@c8y/ngx-components 1021.22.69 → 1021.22.71

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 (18) hide show
  1. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +15 -46
  2. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
  3. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts +3 -0
  4. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts.map +1 -1
  5. package/datapoint-selector/datapoint-selection.model.d.ts +4 -6
  6. package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
  7. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +47 -22
  8. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.mjs +1 -1
  9. package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
  10. package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
  11. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +3 -2
  12. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +48 -23
  13. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  14. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +2 -1
  15. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  16. package/locales/es.po +2 -1
  17. package/package.json +1 -1
  18. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -1
@@ -164,7 +164,7 @@ export class DatapointSelectorListItemComponent {
164
164
  useExisting: forwardRef(() => DatapointSelectorListItemComponent),
165
165
  multi: true
166
166
  }
167
- ], queries: [{ propertyName: "dragHandle", first: true, predicate: ListItemDragHandleComponent, descendants: true }], ngImport: i0, template: "<c8y-li class=\"c8y-list__item__collapse--container-small\" [formGroup]=\"formGroup\" #li>\n <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n <c8y-li-checkbox\n class=\"a-s-center p-r-0\"\n *ngIf=\"showActiveToggle\"\n [displayAsSwitch]=\"true\"\n formControlName=\"__active\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-li-checkbox>\n\n <div class=\"d-flex a-i-center p-l-16\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\" [title]=\"'Change color' | translate\">\n <div class=\"c8y-colorpicker\">\n <input\n type=\"color\"\n [attr.aria-label]=\"'Color' | translate\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\"></span>\n </div>\n </div>\n <button\n class=\"btn-clean data-point-label text-truncate\"\n type=\"button\"\n [attr.aria-expanded]=\"!li.collapsed\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <span class=\"text-truncate\" [title]=\"formGroup.value.details?.label\">\n <c8y-highlight\n [text]=\"formGroup.value.details?.label\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n <small class=\"text-truncate text-muted icon-flex\" *ngIf=\"formGroup.value.__target\">\n <i c8yIcon=\"exchange\"></i>\n <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n </small>\n </button>\n\n <button\n class=\"btn btn-dot btn-dot--danger m-l-auto\"\n type=\"button\"\n [attr.aria-label]=\"'Invalid' | translate\"\n [popover]=\"\n errorMessage\n ? errorMessage\n : ('Some entries are invalid. Check the input fields with red borders.' | translate)\n \"\n triggers=\"focus\"\n placement=\"left\"\n container=\"body\"\n *ngIf=\"!(isValid$ | async)\"\n >\n <i c8yIcon=\"warning\"></i>\n </button>\n <div class=\"m-l-auto a-s-center p-r-4\" *ngIf=\"showAddRemoveButton\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n type=\"button\"\n [attr.aria-label]=\"'Remove' | translate\"\n [tooltip]=\"'Remove from selected data points' | translate\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--remove-datapoint-button'\"\n >\n <i class=\"icon-20\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n class=\"btn btn-dot text-primary\"\n type=\"button\"\n [attr.aria-label]=\"'Add to selected data points' | translate\"\n [tooltip]=\"'Add to selected data points' | translate\"\n [delay]=\"500\"\n [disabled]=\"!(isValid$ | async)\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"!isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--add-datapoint-button'\"\n >\n <i class=\"text-primary icon-20\" c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li-action\n *ngIf=\"optionToRemove\"\n [icon]=\"'minus-circle'\"\n [label]=\"'Remove from list' | translate\"\n (click)=\"remove()\"\n ></c8y-li-action>\n <c8y-li-action\n *ngFor=\"let action of actions\"\n [icon]=\"action.icon\"\n [label]=\"action.label\"\n (click)=\"action.callback(formGroup.value)\"\n ></c8y-li-action>\n <c8y-li-collapse>\n <div class=\"data-point-details\">\n <ul class=\"list-unstyled small m-b-16\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Fragment</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.fragment\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Series</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.series\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n </ul>\n <div\n class=\"form-group\"\n *ngIf=\"datapointLibraryEntries && datapointLibraryEntries | async as libraryEntries\"\n >\n <label class=\"d-inline-block\" translate>Data point template</label>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"datapointHintPopoverTemplate\"\n (click)=\"$event.stopPropagation()\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n ></button>\n\n <ng-template #datapointHintPopoverTemplate>\n {{\n 'Using a data point template sets color, label, unit and ranges. Removing the template allows you to set the values manually.'\n | translate\n }}\n </ng-template>\n <div class=\"d-flex\">\n <c8y-typeahead\n class=\"flex-grow\"\n [placeholder]=\"'No template' | translate\"\n [ngModel]=\"formGroup.value.__template ? formGroup.value.details : undefined\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onSearch)=\"setPipe($event)\"\n [displayProperty]=\"'label'\"\n [hideNew]=\"true\"\n *ngIf=\"datapointLibraryEntries\"\n [disabled]=\"isSelected && disableTypeaheadIfSelected\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link interact\"\n *c8yFor=\"\n let item of datapointLibraryEntries;\n loadMore: 'auto';\n pipe: filterPipe;\n notFound: notFoundTemplate\n \"\n (click)=\"dataPointTemplateSelected(item)\"\n [active]=\"formGroup.value.__template === item.id\"\n [attr.role]=\"'menuitem'\"\n >\n <c8y-highlight [text]=\"item.c8y_Kpi?.label\" [pattern]=\"pattern\"></c8y-highlight>\n <c8y-li-icon icon=\"circle\" [style.color]=\"item.c8y_Kpi?.color\"></c8y-li-icon>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0\">\n <span>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n <button\n class=\"btn btn-info btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n [attr.aria-label]=\"'Info' | translate\"\n [popover]=\"datapointOverviewPopoverTemplate\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"formGroup.value.__template\"\n >\n <i class=\"text-info\" c8yIcon=\"info\"></i>\n </button>\n <button\n class=\"btn btn-danger btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n tooltip=\"{{ 'Unlink data point template' | translate }}\"\n [attr.aria-label]=\"'Unlink data point template' | translate\"\n triggers=\"mouseenter\"\n [delay]=\"500\"\n *ngIf=\"formGroup.value.__template && hasUnlinkTemplateOption\"\n (click)=\"unlinkDatapointTemplate()\"\n >\n <i c8yIcon=\"unlink\"></i>\n </button>\n </div>\n </div>\n <ng-template #datapointOverviewPopoverTemplate>\n <c8y-datapoint-template-popover\n [datapoint]=\"formGroup.value.details\"\n ></c8y-datapoint-template-popover>\n </ng-template>\n <c8y-datapoint-attributes-form\n *ngIf=\"defaultFormOptions\"\n [showTarget]=\"defaultFormOptions.showTarget\"\n [showRange]=\"defaultFormOptions.showRange\"\n [showYellowRange]=\"defaultFormOptions.showYellowRange\"\n [showRedRange]=\"defaultFormOptions.showRedRange\"\n [showChart]=\"defaultFormOptions.showChart\"\n [showDisplay]=\"defaultFormOptions.showDisplay\"\n [showFormIfTemplateWasSelected]=\"defaultFormOptions.showFormIfTemplateWasSelected\"\n formControlName=\"details\"\n ></c8y-datapoint-attributes-form>\n </div>\n </c8y-li-collapse>\n</c8y-li>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i2.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected", "highlightFirstItem"], outputs: ["onSearch", "onIconClick"] }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i2.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i2.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "component", type: i2.ListItemDragHandleComponent, selector: "c8y-list-item-drag-handle, c8y-li-drag-handle" }, { 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: "directive", type: i4.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i5.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i6.DatapointTemplatePopoverComponent, selector: "c8y-datapoint-template-popover", inputs: ["datapoint", "attributes"] }, { kind: "component", type: i7.DatapointAttributesFormComponent, selector: "c8y-datapoint-attributes-form", inputs: ["showTarget", "showRange", "showYellowRange", "showRedRange", "showChart", "showDisplay", "showFormIfTemplateWasSelected"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
167
+ ], queries: [{ propertyName: "dragHandle", first: true, predicate: ListItemDragHandleComponent, descendants: true }], ngImport: i0, template: "<c8y-li class=\"c8y-list__item__collapse--container-small\" [formGroup]=\"formGroup\" #li>\n <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n <c8y-li-checkbox\n class=\"a-s-center p-r-0\"\n *ngIf=\"showActiveToggle\"\n [displayAsSwitch]=\"true\"\n formControlName=\"__active\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-li-checkbox>\n\n <div class=\"d-flex a-i-center p-l-16\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\" [title]=\"'Change color' | translate\">\n <div class=\"c8y-colorpicker\">\n <input\n type=\"color\"\n [attr.aria-label]=\"'Color' | translate\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\"></span>\n </div>\n </div>\n <button\n class=\"btn-clean data-point-label text-truncate\"\n type=\"button\"\n [attr.aria-expanded]=\"!li.collapsed\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <span class=\"text-truncate\" [title]=\"formGroup.value.details?.label\">\n <c8y-highlight\n [text]=\"formGroup.value.details?.label\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n <small class=\"text-truncate text-muted icon-flex\" *ngIf=\"formGroup.value.__target\">\n <i c8yIcon=\"exchange\"></i>\n <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n </small>\n </button>\n\n <button\n class=\"btn btn-dot btn-dot--danger m-l-auto\"\n type=\"button\"\n [attr.aria-label]=\"'Invalid' | translate\"\n [popover]=\"\n errorMessage\n ? errorMessage\n : ('Some entries are invalid. Check the input fields with red borders.' | translate)\n \"\n triggers=\"focus\"\n placement=\"left\"\n container=\"body\"\n *ngIf=\"!(isValid$ | async)\"\n >\n <i c8yIcon=\"warning\"></i>\n </button>\n <div class=\"m-l-auto a-s-center p-r-4\" *ngIf=\"showAddRemoveButton\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n type=\"button\"\n [attr.aria-label]=\"'Remove' | translate\"\n [tooltip]=\"'Remove from selected data points' | translate\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--remove-datapoint-button'\"\n >\n <i class=\"icon-20\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n class=\"btn btn-dot text-primary\"\n type=\"button\"\n [attr.aria-label]=\"'Add to selected data points' | translate\"\n [tooltip]=\"'Add to selected data points' | translate\"\n [delay]=\"500\"\n [disabled]=\"!(isValid$ | async)\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"!isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--add-datapoint-button'\"\n >\n <i class=\"text-primary icon-20\" c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li-action\n *ngIf=\"optionToRemove\"\n [icon]=\"'minus-circle'\"\n [label]=\"'Remove from list' | translate\"\n (click)=\"remove()\"\n ></c8y-li-action>\n <c8y-li-action\n *ngFor=\"let action of actions\"\n [icon]=\"action.icon\"\n [label]=\"action.label\"\n (click)=\"action.callback(formGroup.value)\"\n ></c8y-li-action>\n <c8y-li-collapse>\n <div class=\"data-point-details\">\n <ul class=\"list-unstyled small m-b-16\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Fragment</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.fragment\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Series</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.series\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n </ul>\n <div\n class=\"form-group\"\n *ngIf=\"datapointLibraryEntries && datapointLibraryEntries | async as libraryEntries\"\n >\n <label class=\"d-inline-block\" translate>Data point template</label>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"datapointHintPopoverTemplate\"\n (click)=\"$event.stopPropagation()\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n ></button>\n\n <ng-template #datapointHintPopoverTemplate>\n {{\n 'Using a data point template sets color, label, unit and ranges. Removing the template allows you to set the values manually.'\n | translate\n }}\n </ng-template>\n <div class=\"d-flex\">\n <c8y-typeahead\n class=\"flex-grow\"\n [placeholder]=\"'No template' | translate\"\n [ngModel]=\"formGroup.value.__template ? formGroup.value.details : undefined\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onSearch)=\"setPipe($event)\"\n [displayProperty]=\"'label'\"\n [hideNew]=\"true\"\n *ngIf=\"datapointLibraryEntries\"\n [disabled]=\"isSelected && disableTypeaheadIfSelected\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link interact\"\n *c8yFor=\"\n let item of datapointLibraryEntries;\n loadMore: 'auto';\n pipe: filterPipe;\n notFound: notFoundTemplate\n \"\n (click)=\"dataPointTemplateSelected(item)\"\n [active]=\"formGroup.value.__template === item.id\"\n [attr.role]=\"'menuitem'\"\n >\n <c8y-highlight [text]=\"item.c8y_Kpi?.label\" [pattern]=\"pattern\"></c8y-highlight>\n <c8y-li-icon icon=\"circle\" [style.color]=\"item.c8y_Kpi?.color\"></c8y-li-icon>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0\">\n <span>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n <button\n class=\"btn btn-info btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n [attr.aria-label]=\"'Info' | translate\"\n [popover]=\"datapointOverviewPopoverTemplate\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"formGroup.value.__template\"\n >\n <i class=\"text-info\" c8yIcon=\"info\"></i>\n </button>\n <button\n class=\"btn btn-danger btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n tooltip=\"{{ 'Unlink data point template' | translate }}\"\n [attr.aria-label]=\"'Unlink data point template' | translate\"\n triggers=\"mouseenter\"\n [delay]=\"500\"\n *ngIf=\"formGroup.value.__template && hasUnlinkTemplateOption\"\n (click)=\"unlinkDatapointTemplate()\"\n >\n <i c8yIcon=\"unlink\"></i>\n </button>\n </div>\n </div>\n <ng-template #datapointOverviewPopoverTemplate>\n <c8y-datapoint-template-popover\n [datapoint]=\"formGroup.value.details\"\n ></c8y-datapoint-template-popover>\n </ng-template>\n <c8y-datapoint-attributes-form\n *ngIf=\"defaultFormOptions\"\n [showTarget]=\"defaultFormOptions.showTarget\"\n [showRange]=\"defaultFormOptions.showRange\"\n [showYellowRange]=\"defaultFormOptions.showYellowRange\"\n [showRedRange]=\"defaultFormOptions.showRedRange\"\n [showChart]=\"defaultFormOptions.showChart\"\n [showFormIfTemplateWasSelected]=\"defaultFormOptions.showFormIfTemplateWasSelected\"\n [selectableChartRenderTypes]=\"defaultFormOptions.selectableChartRenderTypes\"\n [selectableChartLineTypes]=\"defaultFormOptions.selectableChartLineTypes\"\n [selectableAxisTypes]=\"defaultFormOptions.selectableAxisTypes\"\n formControlName=\"details\"\n ></c8y-datapoint-attributes-form>\n </div>\n </c8y-li-collapse>\n</c8y-li>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i2.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected", "highlightFirstItem"], outputs: ["onSearch", "onIconClick"] }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i2.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i2.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "component", type: i2.ListItemDragHandleComponent, selector: "c8y-list-item-drag-handle, c8y-li-drag-handle" }, { 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: "directive", type: i4.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "directive", type: i5.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i6.DatapointTemplatePopoverComponent, selector: "c8y-datapoint-template-popover", inputs: ["datapoint", "attributes"] }, { kind: "component", type: i7.DatapointAttributesFormComponent, selector: "c8y-datapoint-attributes-form", inputs: ["selectableChartRenderTypes", "selectableChartLineTypes", "selectableAxisTypes", "showTarget", "showRange", "showYellowRange", "showRedRange", "showChart", "showFormIfTemplateWasSelected"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
168
168
  }
169
169
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointSelectorListItemComponent, decorators: [{
170
170
  type: Component,
@@ -179,7 +179,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
179
179
  useExisting: forwardRef(() => DatapointSelectorListItemComponent),
180
180
  multi: true
181
181
  }
182
- ], template: "<c8y-li class=\"c8y-list__item__collapse--container-small\" [formGroup]=\"formGroup\" #li>\n <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n <c8y-li-checkbox\n class=\"a-s-center p-r-0\"\n *ngIf=\"showActiveToggle\"\n [displayAsSwitch]=\"true\"\n formControlName=\"__active\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-li-checkbox>\n\n <div class=\"d-flex a-i-center p-l-16\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\" [title]=\"'Change color' | translate\">\n <div class=\"c8y-colorpicker\">\n <input\n type=\"color\"\n [attr.aria-label]=\"'Color' | translate\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\"></span>\n </div>\n </div>\n <button\n class=\"btn-clean data-point-label text-truncate\"\n type=\"button\"\n [attr.aria-expanded]=\"!li.collapsed\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <span class=\"text-truncate\" [title]=\"formGroup.value.details?.label\">\n <c8y-highlight\n [text]=\"formGroup.value.details?.label\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n <small class=\"text-truncate text-muted icon-flex\" *ngIf=\"formGroup.value.__target\">\n <i c8yIcon=\"exchange\"></i>\n <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n </small>\n </button>\n\n <button\n class=\"btn btn-dot btn-dot--danger m-l-auto\"\n type=\"button\"\n [attr.aria-label]=\"'Invalid' | translate\"\n [popover]=\"\n errorMessage\n ? errorMessage\n : ('Some entries are invalid. Check the input fields with red borders.' | translate)\n \"\n triggers=\"focus\"\n placement=\"left\"\n container=\"body\"\n *ngIf=\"!(isValid$ | async)\"\n >\n <i c8yIcon=\"warning\"></i>\n </button>\n <div class=\"m-l-auto a-s-center p-r-4\" *ngIf=\"showAddRemoveButton\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n type=\"button\"\n [attr.aria-label]=\"'Remove' | translate\"\n [tooltip]=\"'Remove from selected data points' | translate\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--remove-datapoint-button'\"\n >\n <i class=\"icon-20\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n class=\"btn btn-dot text-primary\"\n type=\"button\"\n [attr.aria-label]=\"'Add to selected data points' | translate\"\n [tooltip]=\"'Add to selected data points' | translate\"\n [delay]=\"500\"\n [disabled]=\"!(isValid$ | async)\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"!isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--add-datapoint-button'\"\n >\n <i class=\"text-primary icon-20\" c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li-action\n *ngIf=\"optionToRemove\"\n [icon]=\"'minus-circle'\"\n [label]=\"'Remove from list' | translate\"\n (click)=\"remove()\"\n ></c8y-li-action>\n <c8y-li-action\n *ngFor=\"let action of actions\"\n [icon]=\"action.icon\"\n [label]=\"action.label\"\n (click)=\"action.callback(formGroup.value)\"\n ></c8y-li-action>\n <c8y-li-collapse>\n <div class=\"data-point-details\">\n <ul class=\"list-unstyled small m-b-16\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Fragment</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.fragment\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Series</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.series\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n </ul>\n <div\n class=\"form-group\"\n *ngIf=\"datapointLibraryEntries && datapointLibraryEntries | async as libraryEntries\"\n >\n <label class=\"d-inline-block\" translate>Data point template</label>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"datapointHintPopoverTemplate\"\n (click)=\"$event.stopPropagation()\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n ></button>\n\n <ng-template #datapointHintPopoverTemplate>\n {{\n 'Using a data point template sets color, label, unit and ranges. Removing the template allows you to set the values manually.'\n | translate\n }}\n </ng-template>\n <div class=\"d-flex\">\n <c8y-typeahead\n class=\"flex-grow\"\n [placeholder]=\"'No template' | translate\"\n [ngModel]=\"formGroup.value.__template ? formGroup.value.details : undefined\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onSearch)=\"setPipe($event)\"\n [displayProperty]=\"'label'\"\n [hideNew]=\"true\"\n *ngIf=\"datapointLibraryEntries\"\n [disabled]=\"isSelected && disableTypeaheadIfSelected\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link interact\"\n *c8yFor=\"\n let item of datapointLibraryEntries;\n loadMore: 'auto';\n pipe: filterPipe;\n notFound: notFoundTemplate\n \"\n (click)=\"dataPointTemplateSelected(item)\"\n [active]=\"formGroup.value.__template === item.id\"\n [attr.role]=\"'menuitem'\"\n >\n <c8y-highlight [text]=\"item.c8y_Kpi?.label\" [pattern]=\"pattern\"></c8y-highlight>\n <c8y-li-icon icon=\"circle\" [style.color]=\"item.c8y_Kpi?.color\"></c8y-li-icon>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0\">\n <span>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n <button\n class=\"btn btn-info btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n [attr.aria-label]=\"'Info' | translate\"\n [popover]=\"datapointOverviewPopoverTemplate\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"formGroup.value.__template\"\n >\n <i class=\"text-info\" c8yIcon=\"info\"></i>\n </button>\n <button\n class=\"btn btn-danger btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n tooltip=\"{{ 'Unlink data point template' | translate }}\"\n [attr.aria-label]=\"'Unlink data point template' | translate\"\n triggers=\"mouseenter\"\n [delay]=\"500\"\n *ngIf=\"formGroup.value.__template && hasUnlinkTemplateOption\"\n (click)=\"unlinkDatapointTemplate()\"\n >\n <i c8yIcon=\"unlink\"></i>\n </button>\n </div>\n </div>\n <ng-template #datapointOverviewPopoverTemplate>\n <c8y-datapoint-template-popover\n [datapoint]=\"formGroup.value.details\"\n ></c8y-datapoint-template-popover>\n </ng-template>\n <c8y-datapoint-attributes-form\n *ngIf=\"defaultFormOptions\"\n [showTarget]=\"defaultFormOptions.showTarget\"\n [showRange]=\"defaultFormOptions.showRange\"\n [showYellowRange]=\"defaultFormOptions.showYellowRange\"\n [showRedRange]=\"defaultFormOptions.showRedRange\"\n [showChart]=\"defaultFormOptions.showChart\"\n [showDisplay]=\"defaultFormOptions.showDisplay\"\n [showFormIfTemplateWasSelected]=\"defaultFormOptions.showFormIfTemplateWasSelected\"\n formControlName=\"details\"\n ></c8y-datapoint-attributes-form>\n </div>\n </c8y-li-collapse>\n</c8y-li>\n" }]
182
+ ], template: "<c8y-li class=\"c8y-list__item__collapse--container-small\" [formGroup]=\"formGroup\" #li>\n <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n <c8y-li-checkbox\n class=\"a-s-center p-r-0\"\n *ngIf=\"showActiveToggle\"\n [displayAsSwitch]=\"true\"\n formControlName=\"__active\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-li-checkbox>\n\n <div class=\"d-flex a-i-center p-l-16\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\" [title]=\"'Change color' | translate\">\n <div class=\"c8y-colorpicker\">\n <input\n type=\"color\"\n [attr.aria-label]=\"'Color' | translate\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\"></span>\n </div>\n </div>\n <button\n class=\"btn-clean data-point-label text-truncate\"\n type=\"button\"\n [attr.aria-expanded]=\"!li.collapsed\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <span class=\"text-truncate\" [title]=\"formGroup.value.details?.label\">\n <c8y-highlight\n [text]=\"formGroup.value.details?.label\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n <small class=\"text-truncate text-muted icon-flex\" *ngIf=\"formGroup.value.__target\">\n <i c8yIcon=\"exchange\"></i>\n <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n </small>\n </button>\n\n <button\n class=\"btn btn-dot btn-dot--danger m-l-auto\"\n type=\"button\"\n [attr.aria-label]=\"'Invalid' | translate\"\n [popover]=\"\n errorMessage\n ? errorMessage\n : ('Some entries are invalid. Check the input fields with red borders.' | translate)\n \"\n triggers=\"focus\"\n placement=\"left\"\n container=\"body\"\n *ngIf=\"!(isValid$ | async)\"\n >\n <i c8yIcon=\"warning\"></i>\n </button>\n <div class=\"m-l-auto a-s-center p-r-4\" *ngIf=\"showAddRemoveButton\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n type=\"button\"\n [attr.aria-label]=\"'Remove' | translate\"\n [tooltip]=\"'Remove from selected data points' | translate\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--remove-datapoint-button'\"\n >\n <i class=\"icon-20\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n class=\"btn btn-dot text-primary\"\n type=\"button\"\n [attr.aria-label]=\"'Add to selected data points' | translate\"\n [tooltip]=\"'Add to selected data points' | translate\"\n [delay]=\"500\"\n [disabled]=\"!(isValid$ | async)\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"!isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--add-datapoint-button'\"\n >\n <i class=\"text-primary icon-20\" c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li-action\n *ngIf=\"optionToRemove\"\n [icon]=\"'minus-circle'\"\n [label]=\"'Remove from list' | translate\"\n (click)=\"remove()\"\n ></c8y-li-action>\n <c8y-li-action\n *ngFor=\"let action of actions\"\n [icon]=\"action.icon\"\n [label]=\"action.label\"\n (click)=\"action.callback(formGroup.value)\"\n ></c8y-li-action>\n <c8y-li-collapse>\n <div class=\"data-point-details\">\n <ul class=\"list-unstyled small m-b-16\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Fragment</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.fragment\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Series</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.series\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n </ul>\n <div\n class=\"form-group\"\n *ngIf=\"datapointLibraryEntries && datapointLibraryEntries | async as libraryEntries\"\n >\n <label class=\"d-inline-block\" translate>Data point template</label>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"datapointHintPopoverTemplate\"\n (click)=\"$event.stopPropagation()\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n ></button>\n\n <ng-template #datapointHintPopoverTemplate>\n {{\n 'Using a data point template sets color, label, unit and ranges. Removing the template allows you to set the values manually.'\n | translate\n }}\n </ng-template>\n <div class=\"d-flex\">\n <c8y-typeahead\n class=\"flex-grow\"\n [placeholder]=\"'No template' | translate\"\n [ngModel]=\"formGroup.value.__template ? formGroup.value.details : undefined\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onSearch)=\"setPipe($event)\"\n [displayProperty]=\"'label'\"\n [hideNew]=\"true\"\n *ngIf=\"datapointLibraryEntries\"\n [disabled]=\"isSelected && disableTypeaheadIfSelected\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link interact\"\n *c8yFor=\"\n let item of datapointLibraryEntries;\n loadMore: 'auto';\n pipe: filterPipe;\n notFound: notFoundTemplate\n \"\n (click)=\"dataPointTemplateSelected(item)\"\n [active]=\"formGroup.value.__template === item.id\"\n [attr.role]=\"'menuitem'\"\n >\n <c8y-highlight [text]=\"item.c8y_Kpi?.label\" [pattern]=\"pattern\"></c8y-highlight>\n <c8y-li-icon icon=\"circle\" [style.color]=\"item.c8y_Kpi?.color\"></c8y-li-icon>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0\">\n <span>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n <button\n class=\"btn btn-info btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n [attr.aria-label]=\"'Info' | translate\"\n [popover]=\"datapointOverviewPopoverTemplate\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"formGroup.value.__template\"\n >\n <i class=\"text-info\" c8yIcon=\"info\"></i>\n </button>\n <button\n class=\"btn btn-danger btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n tooltip=\"{{ 'Unlink data point template' | translate }}\"\n [attr.aria-label]=\"'Unlink data point template' | translate\"\n triggers=\"mouseenter\"\n [delay]=\"500\"\n *ngIf=\"formGroup.value.__template && hasUnlinkTemplateOption\"\n (click)=\"unlinkDatapointTemplate()\"\n >\n <i c8yIcon=\"unlink\"></i>\n </button>\n </div>\n </div>\n <ng-template #datapointOverviewPopoverTemplate>\n <c8y-datapoint-template-popover\n [datapoint]=\"formGroup.value.details\"\n ></c8y-datapoint-template-popover>\n </ng-template>\n <c8y-datapoint-attributes-form\n *ngIf=\"defaultFormOptions\"\n [showTarget]=\"defaultFormOptions.showTarget\"\n [showRange]=\"defaultFormOptions.showRange\"\n [showYellowRange]=\"defaultFormOptions.showYellowRange\"\n [showRedRange]=\"defaultFormOptions.showRedRange\"\n [showChart]=\"defaultFormOptions.showChart\"\n [showFormIfTemplateWasSelected]=\"defaultFormOptions.showFormIfTemplateWasSelected\"\n [selectableChartRenderTypes]=\"defaultFormOptions.selectableChartRenderTypes\"\n [selectableChartLineTypes]=\"defaultFormOptions.selectableChartLineTypes\"\n [selectableAxisTypes]=\"defaultFormOptions.selectableAxisTypes\"\n formControlName=\"details\"\n ></c8y-datapoint-attributes-form>\n </div>\n </c8y-li-collapse>\n</c8y-li>\n" }]
183
183
  }], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { defaultFormOptions: [{
184
184
  type: Input
185
185
  }], isSelected: [{
@@ -218,4 +218,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
218
218
  type: ContentChild,
219
219
  args: [ListItemDragHandleComponent]
220
220
  }] } });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50LXNlbGVjdG9yLWxpc3QtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9kYXRhcG9pbnQtc2VsZWN0b3IvZGF0YXBvaW50LXNlbGVjdG9yLWxpc3QtaXRlbS9kYXRhcG9pbnQtc2VsZWN0b3ItbGlzdC1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2RhdGFwb2ludC1zZWxlY3Rvci9kYXRhcG9pbnQtc2VsZWN0b3ItbGlzdC1pdGVtL2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFHTCxXQUFXLEVBRVgsYUFBYSxFQUNiLGlCQUFpQixFQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBbUIsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRixPQUFPLEVBR0wsMEJBQTBCLEVBRzNCLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7OztBQWtCdEMsTUFBTSxPQUFPLGtDQUFrQztJQTBCN0MsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUF4Qm5DLHVCQUFrQixHQUEyQyxFQUFFLENBQUM7UUFDaEUsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQix3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDM0IsYUFBUSxHQUFHLElBQUksQ0FB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUdyb3VwLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGb3JPZkZpbHRlclBpcGUsIExpc3RJdGVtRHJhZ0hhbmRsZUNvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50QWN0aW9uLFxuICBEYXRhcG9pbnRBdHRyaWJ1dGVzRm9ybUNvbmZpZyxcbiAgREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlQsXG4gIEtQSURldGFpbHMsXG4gIE1hbmFnZWRPYmplY3RLUElcbn0gZnJvbSAnLi4vZGF0YXBvaW50LXNlbGVjdGlvbi5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnQtc2VsZWN0b3ItbGlzdC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGFwb2ludFNlbGVjdG9yTGlzdEl0ZW1Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhcG9pbnRTZWxlY3Rvckxpc3RJdGVtQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludFNlbGVjdG9yTGlzdEl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIGRlZmF1bHRGb3JtT3B0aW9uczogUGFydGlhbDxEYXRhcG9pbnRBdHRyaWJ1dGVzRm9ybUNvbmZpZz4gPSB7fTtcbiAgQElucHV0KCkgaXNTZWxlY3RlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0NvbGxhcHNlZCA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBZGRSZW1vdmVCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBlZGl0YWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBY3RpdmVUb2dnbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgYWN0aXZlVG9nZ2xlRGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd09wdGlvbnMgPSBmYWxzZTtcbiAgQElucHV0KCkgZGF0YXBvaW50TGlicmFyeUVudHJpZXM6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8TWFuYWdlZE9iamVjdEtQST4+O1xuICBASW5wdXQoKSBhY3Rpb25zOiBEYXRhcG9pbnRBY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBvcHRpb25Ub1JlbW92ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBoYXNVbmxpbmtUZW1wbGF0ZU9wdGlvbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgYWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEtQSURldGFpbHM+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxLUElEZXRhaWxzPigpO1xuICBASW5wdXQoKSBjb2xvclBpY2tlckRpc2FibGVkID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzYWJsZVR5cGVhaGVhZElmU2VsZWN0ZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlnaGxpZ2h0VGV4dDogc3RyaW5nO1xuICBAQ29udGVudENoaWxkKExpc3RJdGVtRHJhZ0hhbmRsZUNvbXBvbmVudCkgZHJhZ0hhbmRsZTogTGlzdEl0ZW1EcmFnSGFuZGxlQ29tcG9uZW50O1xuXG4gIHBhdHRlcm4gPSAnJztcbiAgZmlsdGVyUGlwZTogRm9yT2ZGaWx0ZXJQaXBlPE1hbmFnZWRPYmplY3RLUEk+O1xuICBpc1ZhbGlkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZGV0YWlsczogW10sXG4gICAgICBjb2xvcjogW10sXG4gICAgICBfX2FjdGl2ZTogW10sXG4gICAgICBfX3RhcmdldDogW10sXG4gICAgICBmcmFnbWVudDogW10sXG4gICAgICBzZXJpZXM6IFtdLFxuICAgICAgX190ZW1wbGF0ZTogW11cbiAgICB9KTtcbiAgICB0aGlzLmlzVmFsaWQkID0gdGhpcy5mb3JtR3JvdXAuc3RhdHVzQ2hhbmdlcy5waXBlKFxuICAgICAgbWFwKHN0YXR1cyA9PiBzdGF0dXMgPT09ICdWQUxJRCcpLFxuICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybUdyb3VwLnZhbGlkKVxuICAgICk7XG4gIH1cblxuICB2YWxpZGF0ZShfY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwPy5pbnZhbGlkKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV07XG4gICAgICAgIGlmIChjb250cm9sLmludmFsaWQpIHtcbiAgICAgICAgICBjb25zdCBlcnJvcnMgPSBjb250cm9sLmVycm9ycztcbiAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IE9iamVjdC52YWx1ZXMoZXJyb3JzKVswXS5tZXNzYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cD8udmFsaWQgPyBudWxsIDogeyBmb3JtSW52YWxpZDoge30gfTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHsgLi4ub2JqLCBkZXRhaWxzOiBvYmogfSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShtYXAodG1wID0+IHRoaXMudHJhbnNmb3JtRm9ybVZhbHVlKHRtcCkpKS5zdWJzY3JpYmUoZm4pO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHRha2UoMSkpLnN1YnNjcmliZShmbik7XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXA/LmRpc2FibGVkID09PSBpc0Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzRGlzYWJsZWQgPyB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCkgOiB0aGlzLmZvcm1Hcm91cC5lbmFibGUoKTtcbiAgfVxuXG4gIGNvbGxhcHNlKCkge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSAhdGhpcy5pc0NvbGxhcHNlZDtcbiAgfVxuXG4gIGFkZE9yUmVtb3ZlSXRlbSgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudHJhbnNmb3JtRm9ybVZhbHVlKHRoaXMuZm9ybUdyb3VwLnZhbHVlKTtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLnJlbW92ZWQuZW1pdCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkZWQuZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKCkge1xuICAgIHRoaXMucmVtb3ZlZC5lbWl0KHRoaXMudHJhbnNmb3JtRm9ybVZhbHVlKHRoaXMuZm9ybUdyb3VwLnZhbHVlKSk7XG4gIH1cblxuICBzZXRQaXBlKGZpbHRlclN0cjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXR0ZXJuID0gZmlsdGVyU3RyO1xuICAgIHRoaXMuZmlsdGVyUGlwZSA9IHBpcGUoXG4gICAgICBtYXAoKGRhdGE6IE1hbmFnZWRPYmplY3RLUElbXSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJEYXRhcG9pbnRMYWJlbChkYXRhLCBmaWx0ZXJTdHIpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdW5saW5rRGF0YXBvaW50VGVtcGxhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlLmRldGFpbHMgfHwge307XG4gICAgdGhpcy5yZXNldFVudXNlZFByb3BlcnRpZXMoZGV0YWlscyk7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IF9fdGVtcGxhdGU6IHVuZGVmaW5lZCwgZGV0YWlscyB9KTtcbiAgfVxuXG4gIGRhdGFQb2ludFRlbXBsYXRlU2VsZWN0ZWQodGVtcGxhdGU6IE1hbmFnZWRPYmplY3RLUEkpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzVG9Bc3NpZ246IEFycmF5PGtleW9mIEtQSURldGFpbHM+ID0gW1xuICAgICAgJ2NvbG9yJyxcbiAgICAgICdsYWJlbCcsXG4gICAgICAnbWluJyxcbiAgICAgICdtYXgnLFxuICAgICAgJ3llbGxvd1JhbmdlTWF4JyxcbiAgICAgICd5ZWxsb3dSYW5nZU1pbicsXG4gICAgICAncmVkUmFuZ2VNYXgnLFxuICAgICAgJ3JlZFJhbmdlTWluJyxcbiAgICAgICd0YXJnZXQnLFxuICAgICAgJ29yaWVudGF0aW9uJyxcbiAgICAgICd1bml0J1xuICAgIF07XG4gICAgY29uc3QgeyBmcmFnbWVudCwgc2VyaWVzLCBfX3RhcmdldCwgX19hY3RpdmUgfSA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlO1xuICAgIGNvbnN0IGRhdGFQb2ludDogS1BJRGV0YWlscyA9IHtcbiAgICAgIGZyYWdtZW50LFxuICAgICAgc2VyaWVzLFxuICAgICAgX19hY3RpdmUsXG4gICAgICBfX3RhcmdldCxcbiAgICAgIF9fdGVtcGxhdGU6IHRlbXBsYXRlLmlkXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzVG9Bc3NpZ24pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGVtcGxhdGVbREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlRdW2F0dHJpYnV0ZV07XG4gICAgICBkYXRhUG9pbnRbYXR0cmlidXRlXSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLndyaXRlVmFsdWUoZGF0YVBvaW50KTtcbiAgICB0aGlzLnNldFBpcGUoJycpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFVudXNlZFByb3BlcnRpZXMoZGV0YWlsczogUGFydGlhbDxLUElEZXRhaWxzPik6IHZvaWQge1xuICAgIGNvbnN0IHsgc2hvd1RhcmdldCwgc2hvd1llbGxvd1JhbmdlLCBzaG93UmVkUmFuZ2UgfSA9IHRoaXMuZGVmYXVsdEZvcm1PcHRpb25zO1xuICAgIGRldGFpbHMuX190ZW1wbGF0ZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoIXNob3dUYXJnZXQpIHtcbiAgICAgIGRldGFpbHMudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIXNob3dZZWxsb3dSYW5nZSkge1xuICAgICAgZGV0YWlscy55ZWxsb3dSYW5nZU1pbiA9IHVuZGVmaW5lZDtcbiAgICAgIGRldGFpbHMueWVsbG93UmFuZ2VNYXggPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghc2hvd1JlZFJhbmdlKSB7XG4gICAgICBkZXRhaWxzLnJlZFJhbmdlTWluID0gdW5kZWZpbmVkO1xuICAgICAgZGV0YWlscy5yZWRSYW5nZU1heCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckRhdGFwb2ludExhYmVsKGtwaXM6IE1hbmFnZWRPYmplY3RLUElbXSwgZmlsdGVyU3RyOiBzdHJpbmcpOiBNYW5hZ2VkT2JqZWN0S1BJW10ge1xuICAgIHJldHVybiBrcGlzLmZpbHRlcihcbiAgICAgIChtbzogTWFuYWdlZE9iamVjdEtQSSkgPT5cbiAgICAgICAgbW9bREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlRdICYmXG4gICAgICAgIG1vW0RBVEFQT0lOVF9MSUJSQVJZX0ZSQUdNRU5UXS5sYWJlbCAmJlxuICAgICAgICB0eXBlb2YgbW9bREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlRdLmxhYmVsID09PSAnc3RyaW5nJyAmJlxuICAgICAgICBtb1tEQVRBUE9JTlRfTElCUkFSWV9GUkFHTUVOVF0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclN0ci50b0xvd2VyQ2FzZSgpKSA+IC0xXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRm9ybVZhbHVlKGZvcm1WYWx1ZTogYW55KSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgZm9ybVZhbHVlLmRldGFpbHMgfHwge30sIGZvcm1WYWx1ZSk7XG4gICAgZGVsZXRlIG9iai5kZXRhaWxzO1xuICAgIHJldHVybiBvYmo7XG4gIH1cbn1cbiIsIjxjOHktbGkgY2xhc3M9XCJjOHktbGlzdF9faXRlbV9fY29sbGFwc2UtLWNvbnRhaW5lci1zbWFsbFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgI2xpPlxuICA8Yzh5LWxpLWRyYWctaGFuZGxlPjxuZy1jb250ZW50IHNlbGVjdD1cImM4eS1saS1kcmFnLWhhbmRsZVwiPjwvbmctY29udGVudD48L2M4eS1saS1kcmFnLWhhbmRsZT5cbiAgPGM4eS1saS1jaGVja2JveFxuICAgIGNsYXNzPVwiYS1zLWNlbnRlciBwLXItMFwiXG4gICAgKm5nSWY9XCJzaG93QWN0aXZlVG9nZ2xlXCJcbiAgICBbZGlzcGxheUFzU3dpdGNoXT1cInRydWVcIlxuICAgIGZvcm1Db250cm9sTmFtZT1cIl9fYWN0aXZlXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgPjwvYzh5LWxpLWNoZWNrYm94PlxuXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBwLWwtMTZcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2NvbG9ycGlja2VyIHAtdC0wIHAtYi0wIHAtbC0wXCIgW3RpdGxlXT1cIidDaGFuZ2UgY29sb3InIHwgdHJhbnNsYXRlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYzh5LWNvbG9ycGlja2VyXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQ29sb3InIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb2xvclwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImZvcm1Hcm91cC52YWx1ZS5jb2xvclwiPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIGRhdGEtcG9pbnQtbGFiZWwgdGV4dC10cnVuY2F0ZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIWxpLmNvbGxhcHNlZFwiXG4gICAgICAoY2xpY2spPVwibGkuY29sbGFwc2VkID0gIWxpLmNvbGxhcHNlZFwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCIgW3RpdGxlXT1cImZvcm1Hcm91cC52YWx1ZS5kZXRhaWxzPy5sYWJlbFwiPlxuICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgIFt0ZXh0XT1cImZvcm1Hcm91cC52YWx1ZS5kZXRhaWxzPy5sYWJlbFwiXG4gICAgICAgICAgW3BhdHRlcm5dPVwiaGlnaGxpZ2h0VGV4dFwiXG4gICAgICAgICAgW3Nob3VsZFRyaW1QYXR0ZXJuXT1cInRydWVcIlxuICAgICAgICA+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC10cnVuY2F0ZSB0ZXh0LW11dGVkIGljb24tZmxleFwiICpuZ0lmPVwiZm9ybUdyb3VwLnZhbHVlLl9fdGFyZ2V0XCI+XG4gICAgICAgIDxpIGM4eUljb249XCJleGNoYW5nZVwiPjwvaT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgZm9ybUdyb3VwLnZhbHVlLl9fdGFyZ2V0Lm5hbWUgfX08L3NwYW4+XG4gICAgICA8L3NtYWxsPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBidG4tZG90LS1kYW5nZXIgbS1sLWF1dG9cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidJbnZhbGlkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbcG9wb3Zlcl09XCJcbiAgICAgICAgZXJyb3JNZXNzYWdlXG4gICAgICAgICAgPyBlcnJvck1lc3NhZ2VcbiAgICAgICAgICA6ICgnU29tZSBlbnRyaWVzIGFyZSBpbnZhbGlkLiBDaGVjayB0aGUgaW5wdXQgZmllbGRzIHdpdGggcmVkIGJvcmRlcnMuJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAqbmdJZj1cIiEoaXNWYWxpZCQgfCBhc3luYylcIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJ3YXJuaW5nXCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJtLWwtYXV0byBhLXMtY2VudGVyIHAtci00XCIgKm5nSWY9XCJzaG93QWRkUmVtb3ZlQnV0dG9uXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3QgYnRuLWRvdC0tZGFuZ2VyXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbdG9vbHRpcF09XCInUmVtb3ZlIGZyb20gc2VsZWN0ZWQgZGF0YSBwb2ludHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgIChjbGljayk9XCJhZGRPclJlbW92ZUl0ZW0oKVwiXG4gICAgICAgICpuZ0lmPVwiaXNTZWxlY3RlZFwiXG4gICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0tLXJlbW92ZS1kYXRhcG9pbnQtYnV0dG9uJ1wiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwiaWNvbi0yMFwiIGM4eUljb249XCJtaW51cy1jaXJjbGVcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCB0ZXh0LXByaW1hcnlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQWRkIHRvIHNlbGVjdGVkIGRhdGEgcG9pbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFt0b29sdGlwXT1cIidBZGQgdG8gc2VsZWN0ZWQgZGF0YSBwb2ludHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhKGlzVmFsaWQkIHwgYXN5bmMpXCJcbiAgICAgICAgKGNsaWNrKT1cImFkZE9yUmVtb3ZlSXRlbSgpXCJcbiAgICAgICAgKm5nSWY9XCIhaXNTZWxlY3RlZFwiXG4gICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0tLWFkZC1kYXRhcG9pbnQtYnV0dG9uJ1wiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwidGV4dC1wcmltYXJ5IGljb24tMjBcIiBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGM4eS1saS1hY3Rpb25cbiAgICAqbmdJZj1cIm9wdGlvblRvUmVtb3ZlXCJcbiAgICBbaWNvbl09XCInbWludXMtY2lyY2xlJ1wiXG4gICAgW2xhYmVsXT1cIidSZW1vdmUgZnJvbSBsaXN0JyB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cInJlbW92ZSgpXCJcbiAgPjwvYzh5LWxpLWFjdGlvbj5cbiAgPGM4eS1saS1hY3Rpb25cbiAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIlxuICAgIFtpY29uXT1cImFjdGlvbi5pY29uXCJcbiAgICBbbGFiZWxdPVwiYWN0aW9uLmxhYmVsXCJcbiAgICAoY2xpY2spPVwiYWN0aW9uLmNhbGxiYWNrKGZvcm1Hcm91cC52YWx1ZSlcIlxuICA+PC9jOHktbGktYWN0aW9uPlxuICA8Yzh5LWxpLWNvbGxhcHNlPlxuICAgIDxkaXYgY2xhc3M9XCJkYXRhLXBvaW50LWRldGFpbHNcIj5cbiAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgc21hbGwgbS1iLTE2XCI+XG4gICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci04IGEtcy1zdGFydCB0ZXh0LW11dGVkXCIgdHJhbnNsYXRlPkZyYWdtZW50PC9sYWJlbD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCI+XG4gICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICBbdGV4dF09XCJmb3JtR3JvdXAudmFsdWUuZnJhZ21lbnRcIlxuICAgICAgICAgICAgICBbcGF0dGVybl09XCJoaWdobGlnaHRUZXh0XCJcbiAgICAgICAgICAgICAgW3Nob3VsZFRyaW1QYXR0ZXJuXT1cInRydWVcIlxuICAgICAgICAgICAgPjwvYzh5LWhpZ2hsaWdodD5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLTggYS1zLXN0YXJ0IHRleHQtbXV0ZWRcIiB0cmFuc2xhdGU+U2VyaWVzPC9sYWJlbD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCI+XG4gICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICBbdGV4dF09XCJmb3JtR3JvdXAudmFsdWUuc2VyaWVzXCJcbiAgICAgICAgICAgICAgW3BhdHRlcm5dPVwiaGlnaGxpZ2h0VGV4dFwiXG4gICAgICAgICAgICAgIFtzaG91bGRUcmltUGF0dGVybl09XCJ0cnVlXCJcbiAgICAgICAgICAgID48L2M4eS1oaWdobGlnaHQ+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwXCJcbiAgICAgICAgKm5nSWY9XCJkYXRhcG9pbnRMaWJyYXJ5RW50cmllcyAmJiBkYXRhcG9pbnRMaWJyYXJ5RW50cmllcyB8IGFzeW5jIGFzIGxpYnJhcnlFbnRyaWVzXCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIiB0cmFuc2xhdGU+RGF0YSBwb2ludCB0ZW1wbGF0ZTwvbGFiZWw+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtwb3BvdmVyXT1cImRhdGFwb2ludEhpbnRQb3BvdmVyVGVtcGxhdGVcIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2RhdGFwb2ludEhpbnRQb3BvdmVyVGVtcGxhdGU+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgICdVc2luZyBhIGRhdGEgcG9pbnQgdGVtcGxhdGUgc2V0cyBjb2xvciwgbGFiZWwsIHVuaXQgYW5kIHJhbmdlcy4gUmVtb3ZpbmcgdGhlIHRlbXBsYXRlIGFsbG93cyB5b3UgdG8gc2V0IHRoZSB2YWx1ZXMgbWFudWFsbHkuJ1xuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgIH19XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8Yzh5LXR5cGVhaGVhZFxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3dcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidObyB0ZW1wbGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZm9ybUdyb3VwLnZhbHVlLl9fdGVtcGxhdGUgPyBmb3JtR3JvdXAudmFsdWUuZGV0YWlscyA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgKG9uU2VhcmNoKT1cInNldFBpcGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzcGxheVByb3BlcnR5XT1cIidsYWJlbCdcIlxuICAgICAgICAgICAgW2hpZGVOZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImRhdGFwb2ludExpYnJhcnlFbnRyaWVzXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1NlbGVjdGVkICYmIGRpc2FibGVUeXBlYWhlYWRJZlNlbGVjdGVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1sLTggcC1yLTggYzh5LWxpc3RfX2l0ZW0tLWxpbmsgaW50ZXJhY3RcIlxuICAgICAgICAgICAgICAqYzh5Rm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgZGF0YXBvaW50TGlicmFyeUVudHJpZXM7XG4gICAgICAgICAgICAgICAgbG9hZE1vcmU6ICdhdXRvJztcbiAgICAgICAgICAgICAgICBwaXBlOiBmaWx0ZXJQaXBlO1xuICAgICAgICAgICAgICAgIG5vdEZvdW5kOiBub3RGb3VuZFRlbXBsYXRlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkYXRhUG9pbnRUZW1wbGF0ZVNlbGVjdGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgW2FjdGl2ZV09XCJmb3JtR3JvdXAudmFsdWUuX190ZW1wbGF0ZSA9PT0gaXRlbS5pZFwiXG4gICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiJ21lbnVpdGVtJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjOHktaGlnaGxpZ2h0IFt0ZXh0XT1cIml0ZW0uYzh5X0twaT8ubGFiZWxcIiBbcGF0dGVybl09XCJwYXR0ZXJuXCI+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgICAgICAgICA8Yzh5LWxpLWljb24gaWNvbj1cImNpcmNsZVwiIFtzdHlsZS5jb2xvcl09XCJpdGVtLmM4eV9LcGk/LmNvbG9yXCI+PC9jOHktbGktaWNvbj5cbiAgICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RGb3VuZFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8Yzh5LWxpIGNsYXNzPVwiYmctbGV2ZWwtMiBwLThcIiAqbmdJZj1cInBhdHRlcm4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPk5vIG1hdGNoIGZvdW5kLjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvYzh5LXR5cGVhaGVhZD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4taW5mbyBidG4teHMgYnRuLWljb24gYS1zLWNlbnRlciBtLWwtOFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0luZm8nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtwb3BvdmVyXT1cImRhdGFwb2ludE92ZXJ2aWV3UG9wb3ZlclRlbXBsYXRlXCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLnZhbHVlLl9fdGVtcGxhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwidGV4dC1pbmZvXCIgYzh5SWNvbj1cImluZm9cIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4teHMgYnRuLWljb24gYS1zLWNlbnRlciBtLWwtOFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnVW5saW5rIGRhdGEgcG9pbnQgdGVtcGxhdGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1VubGluayBkYXRhIHBvaW50IHRlbXBsYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0cmlnZ2Vycz1cIm1vdXNlZW50ZXJcIlxuICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC52YWx1ZS5fX3RlbXBsYXRlICYmIGhhc1VubGlua1RlbXBsYXRlT3B0aW9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ1bmxpbmtEYXRhcG9pbnRUZW1wbGF0ZSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwidW5saW5rXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNkYXRhcG9pbnRPdmVydmlld1BvcG92ZXJUZW1wbGF0ZT5cbiAgICAgICAgPGM4eS1kYXRhcG9pbnQtdGVtcGxhdGUtcG9wb3ZlclxuICAgICAgICAgIFtkYXRhcG9pbnRdPVwiZm9ybUdyb3VwLnZhbHVlLmRldGFpbHNcIlxuICAgICAgICA+PC9jOHktZGF0YXBvaW50LXRlbXBsYXRlLXBvcG92ZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGM4eS1kYXRhcG9pbnQtYXR0cmlidXRlcy1mb3JtXG4gICAgICAgICpuZ0lmPVwiZGVmYXVsdEZvcm1PcHRpb25zXCJcbiAgICAgICAgW3Nob3dUYXJnZXRdPVwiZGVmYXVsdEZvcm1PcHRpb25zLnNob3dUYXJnZXRcIlxuICAgICAgICBbc2hvd1JhbmdlXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93UmFuZ2VcIlxuICAgICAgICBbc2hvd1llbGxvd1JhbmdlXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93WWVsbG93UmFuZ2VcIlxuICAgICAgICBbc2hvd1JlZFJhbmdlXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93UmVkUmFuZ2VcIlxuICAgICAgICBbc2hvd0NoYXJ0XT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93Q2hhcnRcIlxuICAgICAgICBbc2hvd0Rpc3BsYXldPVwiZGVmYXVsdEZvcm1PcHRpb25zLnNob3dEaXNwbGF5XCJcbiAgICAgICAgW3Nob3dGb3JtSWZUZW1wbGF0ZVdhc1NlbGVjdGVkXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93Rm9ybUlmVGVtcGxhdGVXYXNTZWxlY3RlZFwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRldGFpbHNcIlxuICAgICAgPjwvYzh5LWRhdGFwb2ludC1hdHRyaWJ1dGVzLWZvcm0+XG4gICAgPC9kaXY+XG4gIDwvYzh5LWxpLWNvbGxhcHNlPlxuPC9jOHktbGk+XG4iXX0=
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50LXNlbGVjdG9yLWxpc3QtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9kYXRhcG9pbnQtc2VsZWN0b3IvZGF0YXBvaW50LXNlbGVjdG9yLWxpc3QtaXRlbS9kYXRhcG9pbnQtc2VsZWN0b3ItbGlzdC1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2RhdGFwb2ludC1zZWxlY3Rvci9kYXRhcG9pbnQtc2VsZWN0b3ItbGlzdC1pdGVtL2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFHTCxXQUFXLEVBRVgsYUFBYSxFQUNiLGlCQUFpQixFQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBbUIsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRixPQUFPLEVBR0wsMEJBQTBCLEVBRzNCLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7OztBQWtCdEMsTUFBTSxPQUFPLGtDQUFrQztJQTBCN0MsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUF4Qm5DLHVCQUFrQixHQUEyQyxFQUFFLENBQUM7UUFDaEUsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQix3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDM0IsYUFBUSxHQUFHLElBQUksQ0FB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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUdyb3VwLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGb3JPZkZpbHRlclBpcGUsIExpc3RJdGVtRHJhZ0hhbmRsZUNvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50QWN0aW9uLFxuICBEYXRhcG9pbnRBdHRyaWJ1dGVzRm9ybUNvbmZpZyxcbiAgREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlQsXG4gIEtQSURldGFpbHMsXG4gIE1hbmFnZWRPYmplY3RLUElcbn0gZnJvbSAnLi4vZGF0YXBvaW50LXNlbGVjdGlvbi5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnQtc2VsZWN0b3ItbGlzdC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGFwb2ludFNlbGVjdG9yTGlzdEl0ZW1Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhcG9pbnRTZWxlY3Rvckxpc3RJdGVtQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludFNlbGVjdG9yTGlzdEl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIGRlZmF1bHRGb3JtT3B0aW9uczogUGFydGlhbDxEYXRhcG9pbnRBdHRyaWJ1dGVzRm9ybUNvbmZpZz4gPSB7fTtcbiAgQElucHV0KCkgaXNTZWxlY3RlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0NvbGxhcHNlZCA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBZGRSZW1vdmVCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBlZGl0YWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBY3RpdmVUb2dnbGUgPSBmYWxzZTtcbiAgQElucHV0KCkgYWN0aXZlVG9nZ2xlRGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd09wdGlvbnMgPSBmYWxzZTtcbiAgQElucHV0KCkgZGF0YXBvaW50TGlicmFyeUVudHJpZXM6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8TWFuYWdlZE9iamVjdEtQST4+O1xuICBASW5wdXQoKSBhY3Rpb25zOiBEYXRhcG9pbnRBY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBvcHRpb25Ub1JlbW92ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBoYXNVbmxpbmtUZW1wbGF0ZU9wdGlvbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgYWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEtQSURldGFpbHM+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxLUElEZXRhaWxzPigpO1xuICBASW5wdXQoKSBjb2xvclBpY2tlckRpc2FibGVkID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzYWJsZVR5cGVhaGVhZElmU2VsZWN0ZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgaGlnaGxpZ2h0VGV4dDogc3RyaW5nO1xuICBAQ29udGVudENoaWxkKExpc3RJdGVtRHJhZ0hhbmRsZUNvbXBvbmVudCkgZHJhZ0hhbmRsZTogTGlzdEl0ZW1EcmFnSGFuZGxlQ29tcG9uZW50O1xuXG4gIHBhdHRlcm4gPSAnJztcbiAgZmlsdGVyUGlwZTogRm9yT2ZGaWx0ZXJQaXBlPE1hbmFnZWRPYmplY3RLUEk+O1xuICBpc1ZhbGlkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIpIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZGV0YWlsczogW10sXG4gICAgICBjb2xvcjogW10sXG4gICAgICBfX2FjdGl2ZTogW10sXG4gICAgICBfX3RhcmdldDogW10sXG4gICAgICBmcmFnbWVudDogW10sXG4gICAgICBzZXJpZXM6IFtdLFxuICAgICAgX190ZW1wbGF0ZTogW11cbiAgICB9KTtcbiAgICB0aGlzLmlzVmFsaWQkID0gdGhpcy5mb3JtR3JvdXAuc3RhdHVzQ2hhbmdlcy5waXBlKFxuICAgICAgbWFwKHN0YXR1cyA9PiBzdGF0dXMgPT09ICdWQUxJRCcpLFxuICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybUdyb3VwLnZhbGlkKVxuICAgICk7XG4gIH1cblxuICB2YWxpZGF0ZShfY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwPy5pbnZhbGlkKSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV07XG4gICAgICAgIGlmIChjb250cm9sLmludmFsaWQpIHtcbiAgICAgICAgICBjb25zdCBlcnJvcnMgPSBjb250cm9sLmVycm9ycztcbiAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IE9iamVjdC52YWx1ZXMoZXJyb3JzKVswXS5tZXNzYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cD8udmFsaWQgPyBudWxsIDogeyBmb3JtSW52YWxpZDoge30gfTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHsgLi4ub2JqLCBkZXRhaWxzOiBvYmogfSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShtYXAodG1wID0+IHRoaXMudHJhbnNmb3JtRm9ybVZhbHVlKHRtcCkpKS5zdWJzY3JpYmUoZm4pO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHRha2UoMSkpLnN1YnNjcmliZShmbik7XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXA/LmRpc2FibGVkID09PSBpc0Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzRGlzYWJsZWQgPyB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCkgOiB0aGlzLmZvcm1Hcm91cC5lbmFibGUoKTtcbiAgfVxuXG4gIGNvbGxhcHNlKCkge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSAhdGhpcy5pc0NvbGxhcHNlZDtcbiAgfVxuXG4gIGFkZE9yUmVtb3ZlSXRlbSgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudHJhbnNmb3JtRm9ybVZhbHVlKHRoaXMuZm9ybUdyb3VwLnZhbHVlKTtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICB0aGlzLnJlbW92ZWQuZW1pdCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkZWQuZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKCkge1xuICAgIHRoaXMucmVtb3ZlZC5lbWl0KHRoaXMudHJhbnNmb3JtRm9ybVZhbHVlKHRoaXMuZm9ybUdyb3VwLnZhbHVlKSk7XG4gIH1cblxuICBzZXRQaXBlKGZpbHRlclN0cjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXR0ZXJuID0gZmlsdGVyU3RyO1xuICAgIHRoaXMuZmlsdGVyUGlwZSA9IHBpcGUoXG4gICAgICBtYXAoKGRhdGE6IE1hbmFnZWRPYmplY3RLUElbXSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJEYXRhcG9pbnRMYWJlbChkYXRhLCBmaWx0ZXJTdHIpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdW5saW5rRGF0YXBvaW50VGVtcGxhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlLmRldGFpbHMgfHwge307XG4gICAgdGhpcy5yZXNldFVudXNlZFByb3BlcnRpZXMoZGV0YWlscyk7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7IF9fdGVtcGxhdGU6IHVuZGVmaW5lZCwgZGV0YWlscyB9KTtcbiAgfVxuXG4gIGRhdGFQb2ludFRlbXBsYXRlU2VsZWN0ZWQodGVtcGxhdGU6IE1hbmFnZWRPYmplY3RLUEkpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzVG9Bc3NpZ246IEFycmF5PGtleW9mIEtQSURldGFpbHM+ID0gW1xuICAgICAgJ2NvbG9yJyxcbiAgICAgICdsYWJlbCcsXG4gICAgICAnbWluJyxcbiAgICAgICdtYXgnLFxuICAgICAgJ3llbGxvd1JhbmdlTWF4JyxcbiAgICAgICd5ZWxsb3dSYW5nZU1pbicsXG4gICAgICAncmVkUmFuZ2VNYXgnLFxuICAgICAgJ3JlZFJhbmdlTWluJyxcbiAgICAgICd0YXJnZXQnLFxuICAgICAgJ29yaWVudGF0aW9uJyxcbiAgICAgICd1bml0J1xuICAgIF07XG4gICAgY29uc3QgeyBmcmFnbWVudCwgc2VyaWVzLCBfX3RhcmdldCwgX19hY3RpdmUgfSA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlO1xuICAgIGNvbnN0IGRhdGFQb2ludDogS1BJRGV0YWlscyA9IHtcbiAgICAgIGZyYWdtZW50LFxuICAgICAgc2VyaWVzLFxuICAgICAgX19hY3RpdmUsXG4gICAgICBfX3RhcmdldCxcbiAgICAgIF9fdGVtcGxhdGU6IHRlbXBsYXRlLmlkXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzVG9Bc3NpZ24pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGVtcGxhdGVbREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlRdW2F0dHJpYnV0ZV07XG4gICAgICBkYXRhUG9pbnRbYXR0cmlidXRlXSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLndyaXRlVmFsdWUoZGF0YVBvaW50KTtcbiAgICB0aGlzLnNldFBpcGUoJycpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFVudXNlZFByb3BlcnRpZXMoZGV0YWlsczogUGFydGlhbDxLUElEZXRhaWxzPik6IHZvaWQge1xuICAgIGNvbnN0IHsgc2hvd1RhcmdldCwgc2hvd1llbGxvd1JhbmdlLCBzaG93UmVkUmFuZ2UgfSA9IHRoaXMuZGVmYXVsdEZvcm1PcHRpb25zO1xuICAgIGRldGFpbHMuX190ZW1wbGF0ZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoIXNob3dUYXJnZXQpIHtcbiAgICAgIGRldGFpbHMudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoIXNob3dZZWxsb3dSYW5nZSkge1xuICAgICAgZGV0YWlscy55ZWxsb3dSYW5nZU1pbiA9IHVuZGVmaW5lZDtcbiAgICAgIGRldGFpbHMueWVsbG93UmFuZ2VNYXggPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghc2hvd1JlZFJhbmdlKSB7XG4gICAgICBkZXRhaWxzLnJlZFJhbmdlTWluID0gdW5kZWZpbmVkO1xuICAgICAgZGV0YWlscy5yZWRSYW5nZU1heCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckRhdGFwb2ludExhYmVsKGtwaXM6IE1hbmFnZWRPYmplY3RLUElbXSwgZmlsdGVyU3RyOiBzdHJpbmcpOiBNYW5hZ2VkT2JqZWN0S1BJW10ge1xuICAgIHJldHVybiBrcGlzLmZpbHRlcihcbiAgICAgIChtbzogTWFuYWdlZE9iamVjdEtQSSkgPT5cbiAgICAgICAgbW9bREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlRdICYmXG4gICAgICAgIG1vW0RBVEFQT0lOVF9MSUJSQVJZX0ZSQUdNRU5UXS5sYWJlbCAmJlxuICAgICAgICB0eXBlb2YgbW9bREFUQVBPSU5UX0xJQlJBUllfRlJBR01FTlRdLmxhYmVsID09PSAnc3RyaW5nJyAmJlxuICAgICAgICBtb1tEQVRBUE9JTlRfTElCUkFSWV9GUkFHTUVOVF0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclN0ci50b0xvd2VyQ2FzZSgpKSA+IC0xXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRm9ybVZhbHVlKGZvcm1WYWx1ZTogYW55KSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgZm9ybVZhbHVlLmRldGFpbHMgfHwge30sIGZvcm1WYWx1ZSk7XG4gICAgZGVsZXRlIG9iai5kZXRhaWxzO1xuICAgIHJldHVybiBvYmo7XG4gIH1cbn1cbiIsIjxjOHktbGkgY2xhc3M9XCJjOHktbGlzdF9faXRlbV9fY29sbGFwc2UtLWNvbnRhaW5lci1zbWFsbFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgI2xpPlxuICA8Yzh5LWxpLWRyYWctaGFuZGxlPjxuZy1jb250ZW50IHNlbGVjdD1cImM4eS1saS1kcmFnLWhhbmRsZVwiPjwvbmctY29udGVudD48L2M4eS1saS1kcmFnLWhhbmRsZT5cbiAgPGM4eS1saS1jaGVja2JveFxuICAgIGNsYXNzPVwiYS1zLWNlbnRlciBwLXItMFwiXG4gICAgKm5nSWY9XCJzaG93QWN0aXZlVG9nZ2xlXCJcbiAgICBbZGlzcGxheUFzU3dpdGNoXT1cInRydWVcIlxuICAgIGZvcm1Db250cm9sTmFtZT1cIl9fYWN0aXZlXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgPjwvYzh5LWxpLWNoZWNrYm94PlxuXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBwLWwtMTZcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYzh5LWxpc3RfX2l0ZW1fX2NvbG9ycGlja2VyIHAtdC0wIHAtYi0wIHAtbC0wXCIgW3RpdGxlXT1cIidDaGFuZ2UgY29sb3InIHwgdHJhbnNsYXRlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYzh5LWNvbG9ycGlja2VyXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQ29sb3InIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb2xvclwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImZvcm1Hcm91cC52YWx1ZS5jb2xvclwiPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIGRhdGEtcG9pbnQtbGFiZWwgdGV4dC10cnVuY2F0ZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIWxpLmNvbGxhcHNlZFwiXG4gICAgICAoY2xpY2spPVwibGkuY29sbGFwc2VkID0gIWxpLmNvbGxhcHNlZFwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCIgW3RpdGxlXT1cImZvcm1Hcm91cC52YWx1ZS5kZXRhaWxzPy5sYWJlbFwiPlxuICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgIFt0ZXh0XT1cImZvcm1Hcm91cC52YWx1ZS5kZXRhaWxzPy5sYWJlbFwiXG4gICAgICAgICAgW3BhdHRlcm5dPVwiaGlnaGxpZ2h0VGV4dFwiXG4gICAgICAgICAgW3Nob3VsZFRyaW1QYXR0ZXJuXT1cInRydWVcIlxuICAgICAgICA+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC10cnVuY2F0ZSB0ZXh0LW11dGVkIGljb24tZmxleFwiICpuZ0lmPVwiZm9ybUdyb3VwLnZhbHVlLl9fdGFyZ2V0XCI+XG4gICAgICAgIDxpIGM4eUljb249XCJleGNoYW5nZVwiPjwvaT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgZm9ybUdyb3VwLnZhbHVlLl9fdGFyZ2V0Lm5hbWUgfX08L3NwYW4+XG4gICAgICA8L3NtYWxsPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCBidG4tZG90LS1kYW5nZXIgbS1sLWF1dG9cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidJbnZhbGlkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbcG9wb3Zlcl09XCJcbiAgICAgICAgZXJyb3JNZXNzYWdlXG4gICAgICAgICAgPyBlcnJvck1lc3NhZ2VcbiAgICAgICAgICA6ICgnU29tZSBlbnRyaWVzIGFyZSBpbnZhbGlkLiBDaGVjayB0aGUgaW5wdXQgZmllbGRzIHdpdGggcmVkIGJvcmRlcnMuJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAqbmdJZj1cIiEoaXNWYWxpZCQgfCBhc3luYylcIlxuICAgID5cbiAgICAgIDxpIGM4eUljb249XCJ3YXJuaW5nXCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJtLWwtYXV0byBhLXMtY2VudGVyIHAtci00XCIgKm5nSWY9XCJzaG93QWRkUmVtb3ZlQnV0dG9uXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3QgYnRuLWRvdC0tZGFuZ2VyXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbdG9vbHRpcF09XCInUmVtb3ZlIGZyb20gc2VsZWN0ZWQgZGF0YSBwb2ludHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgIChjbGljayk9XCJhZGRPclJlbW92ZUl0ZW0oKVwiXG4gICAgICAgICpuZ0lmPVwiaXNTZWxlY3RlZFwiXG4gICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0tLXJlbW92ZS1kYXRhcG9pbnQtYnV0dG9uJ1wiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwiaWNvbi0yMFwiIGM4eUljb249XCJtaW51cy1jaXJjbGVcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCB0ZXh0LXByaW1hcnlcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQWRkIHRvIHNlbGVjdGVkIGRhdGEgcG9pbnRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFt0b29sdGlwXT1cIidBZGQgdG8gc2VsZWN0ZWQgZGF0YSBwb2ludHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhKGlzVmFsaWQkIHwgYXN5bmMpXCJcbiAgICAgICAgKGNsaWNrKT1cImFkZE9yUmVtb3ZlSXRlbSgpXCJcbiAgICAgICAgKm5nSWY9XCIhaXNTZWxlY3RlZFwiXG4gICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2RhdGFwb2ludC1zZWxlY3Rvci1saXN0LWl0ZW0tLWFkZC1kYXRhcG9pbnQtYnV0dG9uJ1wiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwidGV4dC1wcmltYXJ5IGljb24tMjBcIiBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGM4eS1saS1hY3Rpb25cbiAgICAqbmdJZj1cIm9wdGlvblRvUmVtb3ZlXCJcbiAgICBbaWNvbl09XCInbWludXMtY2lyY2xlJ1wiXG4gICAgW2xhYmVsXT1cIidSZW1vdmUgZnJvbSBsaXN0JyB8IHRyYW5zbGF0ZVwiXG4gICAgKGNsaWNrKT1cInJlbW92ZSgpXCJcbiAgPjwvYzh5LWxpLWFjdGlvbj5cbiAgPGM4eS1saS1hY3Rpb25cbiAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIlxuICAgIFtpY29uXT1cImFjdGlvbi5pY29uXCJcbiAgICBbbGFiZWxdPVwiYWN0aW9uLmxhYmVsXCJcbiAgICAoY2xpY2spPVwiYWN0aW9uLmNhbGxiYWNrKGZvcm1Hcm91cC52YWx1ZSlcIlxuICA+PC9jOHktbGktYWN0aW9uPlxuICA8Yzh5LWxpLWNvbGxhcHNlPlxuICAgIDxkaXYgY2xhc3M9XCJkYXRhLXBvaW50LWRldGFpbHNcIj5cbiAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgc21hbGwgbS1iLTE2XCI+XG4gICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNtYWxsIG0tYi0wIG0tci04IGEtcy1zdGFydCB0ZXh0LW11dGVkXCIgdHJhbnNsYXRlPkZyYWdtZW50PC9sYWJlbD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCI+XG4gICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICBbdGV4dF09XCJmb3JtR3JvdXAudmFsdWUuZnJhZ21lbnRcIlxuICAgICAgICAgICAgICBbcGF0dGVybl09XCJoaWdobGlnaHRUZXh0XCJcbiAgICAgICAgICAgICAgW3Nob3VsZFRyaW1QYXR0ZXJuXT1cInRydWVcIlxuICAgICAgICAgICAgPjwvYzh5LWhpZ2hsaWdodD5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaSBjbGFzcz1cInAtdC00IHAtYi00IGQtZmxleCBzZXBhcmF0b3ItYm90dG9tXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbS1iLTAgbS1yLTggYS1zLXN0YXJ0IHRleHQtbXV0ZWRcIiB0cmFuc2xhdGU+U2VyaWVzPC9sYWJlbD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC1hdXRvXCI+XG4gICAgICAgICAgICA8Yzh5LWhpZ2hsaWdodFxuICAgICAgICAgICAgICBbdGV4dF09XCJmb3JtR3JvdXAudmFsdWUuc2VyaWVzXCJcbiAgICAgICAgICAgICAgW3BhdHRlcm5dPVwiaGlnaGxpZ2h0VGV4dFwiXG4gICAgICAgICAgICAgIFtzaG91bGRUcmltUGF0dGVybl09XCJ0cnVlXCJcbiAgICAgICAgICAgID48L2M4eS1oaWdobGlnaHQ+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwXCJcbiAgICAgICAgKm5nSWY9XCJkYXRhcG9pbnRMaWJyYXJ5RW50cmllcyAmJiBkYXRhcG9pbnRMaWJyYXJ5RW50cmllcyB8IGFzeW5jIGFzIGxpYnJhcnlFbnRyaWVzXCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIiB0cmFuc2xhdGU+RGF0YSBwb2ludCB0ZW1wbGF0ZTwvbGFiZWw+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtwb3BvdmVyXT1cImRhdGFwb2ludEhpbnRQb3BvdmVyVGVtcGxhdGVcIlxuICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2RhdGFwb2ludEhpbnRQb3BvdmVyVGVtcGxhdGU+XG4gICAgICAgICAge3tcbiAgICAgICAgICAgICdVc2luZyBhIGRhdGEgcG9pbnQgdGVtcGxhdGUgc2V0cyBjb2xvciwgbGFiZWwsIHVuaXQgYW5kIHJhbmdlcy4gUmVtb3ZpbmcgdGhlIHRlbXBsYXRlIGFsbG93cyB5b3UgdG8gc2V0IHRoZSB2YWx1ZXMgbWFudWFsbHkuJ1xuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgIH19XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8Yzh5LXR5cGVhaGVhZFxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3dcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidObyB0ZW1wbGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZm9ybUdyb3VwLnZhbHVlLl9fdGVtcGxhdGUgPyBmb3JtR3JvdXAudmFsdWUuZGV0YWlscyA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgKG9uU2VhcmNoKT1cInNldFBpcGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzcGxheVByb3BlcnR5XT1cIidsYWJlbCdcIlxuICAgICAgICAgICAgW2hpZGVOZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICAqbmdJZj1cImRhdGFwb2ludExpYnJhcnlFbnRyaWVzXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1NlbGVjdGVkICYmIGRpc2FibGVUeXBlYWhlYWRJZlNlbGVjdGVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LWxpXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1sLTggcC1yLTggYzh5LWxpc3RfX2l0ZW0tLWxpbmsgaW50ZXJhY3RcIlxuICAgICAgICAgICAgICAqYzh5Rm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgZGF0YXBvaW50TGlicmFyeUVudHJpZXM7XG4gICAgICAgICAgICAgICAgbG9hZE1vcmU6ICdhdXRvJztcbiAgICAgICAgICAgICAgICBwaXBlOiBmaWx0ZXJQaXBlO1xuICAgICAgICAgICAgICAgIG5vdEZvdW5kOiBub3RGb3VuZFRlbXBsYXRlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkYXRhUG9pbnRUZW1wbGF0ZVNlbGVjdGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgW2FjdGl2ZV09XCJmb3JtR3JvdXAudmFsdWUuX190ZW1wbGF0ZSA9PT0gaXRlbS5pZFwiXG4gICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiJ21lbnVpdGVtJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjOHktaGlnaGxpZ2h0IFt0ZXh0XT1cIml0ZW0uYzh5X0twaT8ubGFiZWxcIiBbcGF0dGVybl09XCJwYXR0ZXJuXCI+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgICAgICAgICA8Yzh5LWxpLWljb24gaWNvbj1cImNpcmNsZVwiIFtzdHlsZS5jb2xvcl09XCJpdGVtLmM4eV9LcGk/LmNvbG9yXCI+PC9jOHktbGktaWNvbj5cbiAgICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RGb3VuZFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8Yzh5LWxpIGNsYXNzPVwiYmctbGV2ZWwtMiBwLThcIiAqbmdJZj1cInBhdHRlcm4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPk5vIG1hdGNoIGZvdW5kLjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9jOHktbGk+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvYzh5LXR5cGVhaGVhZD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4taW5mbyBidG4teHMgYnRuLWljb24gYS1zLWNlbnRlciBtLWwtOFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0luZm8nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtwb3BvdmVyXT1cImRhdGFwb2ludE92ZXJ2aWV3UG9wb3ZlclRlbXBsYXRlXCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLnZhbHVlLl9fdGVtcGxhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwidGV4dC1pbmZvXCIgYzh5SWNvbj1cImluZm9cIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4teHMgYnRuLWljb24gYS1zLWNlbnRlciBtLWwtOFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnVW5saW5rIGRhdGEgcG9pbnQgdGVtcGxhdGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1VubGluayBkYXRhIHBvaW50IHRlbXBsYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0cmlnZ2Vycz1cIm1vdXNlZW50ZXJcIlxuICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC52YWx1ZS5fX3RlbXBsYXRlICYmIGhhc1VubGlua1RlbXBsYXRlT3B0aW9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ1bmxpbmtEYXRhcG9pbnRUZW1wbGF0ZSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjOHlJY29uPVwidW5saW5rXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNkYXRhcG9pbnRPdmVydmlld1BvcG92ZXJUZW1wbGF0ZT5cbiAgICAgICAgPGM4eS1kYXRhcG9pbnQtdGVtcGxhdGUtcG9wb3ZlclxuICAgICAgICAgIFtkYXRhcG9pbnRdPVwiZm9ybUdyb3VwLnZhbHVlLmRldGFpbHNcIlxuICAgICAgICA+PC9jOHktZGF0YXBvaW50LXRlbXBsYXRlLXBvcG92ZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGM4eS1kYXRhcG9pbnQtYXR0cmlidXRlcy1mb3JtXG4gICAgICAgICpuZ0lmPVwiZGVmYXVsdEZvcm1PcHRpb25zXCJcbiAgICAgICAgW3Nob3dUYXJnZXRdPVwiZGVmYXVsdEZvcm1PcHRpb25zLnNob3dUYXJnZXRcIlxuICAgICAgICBbc2hvd1JhbmdlXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93UmFuZ2VcIlxuICAgICAgICBbc2hvd1llbGxvd1JhbmdlXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93WWVsbG93UmFuZ2VcIlxuICAgICAgICBbc2hvd1JlZFJhbmdlXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93UmVkUmFuZ2VcIlxuICAgICAgICBbc2hvd0NoYXJ0XT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zaG93Q2hhcnRcIlxuICAgICAgICBbc2hvd0Zvcm1JZlRlbXBsYXRlV2FzU2VsZWN0ZWRdPVwiZGVmYXVsdEZvcm1PcHRpb25zLnNob3dGb3JtSWZUZW1wbGF0ZVdhc1NlbGVjdGVkXCJcbiAgICAgICAgW3NlbGVjdGFibGVDaGFydFJlbmRlclR5cGVzXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zZWxlY3RhYmxlQ2hhcnRSZW5kZXJUeXBlc1wiXG4gICAgICAgIFtzZWxlY3RhYmxlQ2hhcnRMaW5lVHlwZXNdPVwiZGVmYXVsdEZvcm1PcHRpb25zLnNlbGVjdGFibGVDaGFydExpbmVUeXBlc1wiXG4gICAgICAgIFtzZWxlY3RhYmxlQXhpc1R5cGVzXT1cImRlZmF1bHRGb3JtT3B0aW9ucy5zZWxlY3RhYmxlQXhpc1R5cGVzXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGV0YWlsc1wiXG4gICAgICA+PC9jOHktZGF0YXBvaW50LWF0dHJpYnV0ZXMtZm9ybT5cbiAgICA8L2Rpdj5cbiAgPC9jOHktbGktY29sbGFwc2U+XG48L2M4eS1saT5cbiJdfQ==
@@ -52,7 +52,8 @@ export class DatapointsTableWidgetConfigComponent {
52
52
  this.datapointSelectionConfig = {};
53
53
  this.disabledAggregationOptions = {};
54
54
  this.defaultFormOptions = {
55
- showDisplay: true,
55
+ selectableChartLineTypes: [],
56
+ selectableAxisTypes: [],
56
57
  showRedRange: true,
57
58
  showYellowRange: true
58
59
  };
@@ -384,4 +385,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
384
385
  }], ctorParameters: () => [{ type: i1.DatapointsTableService }, { type: i2.DatapointsTableConfigService }, { type: i3.FormBuilder }, { type: i3.NgForm }, { type: i4.WidgetConfigComponent }], propDecorators: { config: [{
385
386
  type: Input
386
387
  }] } });
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvZGF0YXBvaW50cy10YWJsZS9kYXRhcG9pbnRzLXRhYmxlLWNvbmZpZy9kYXRhcG9pbnRzLXRhYmxlLWNvbmZpZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtY29uZmlnL2RhdGFwb2ludHMtdGFibGUtY29uZmlnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBRUwsV0FBVyxFQUNYLFdBQVcsRUFDWCxNQUFNLEVBQ04sbUJBQW1CLEVBR25CLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUd0QixVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBR0wsdUJBQXVCLEVBRXhCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixnQ0FBZ0MsRUFFakMsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBRUwscUJBQXFCLEVBQ3JC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QUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUN4QyxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQzs4R0FuYVUsb0NBQW9DO2tHQUFwQyxvQ0FBb0MsMEhDOUVqRCw0c1JBK05BLDJDRHhKSSxVQUFVLCswRUFDVix1QkFBdUIsc1RBQ3ZCLHdCQUF3QiwwSUFDeEIsYUFBYSw4VkFDYixtQkFBbUI7OzJGQUdWLG9DQUFvQztrQkFaaEQsU0FBUzsrQkFDRSxrQ0FBa0MsY0FFaEMsSUFBSSxXQUNQO3dCQUNQLFVBQVU7d0JBQ1YsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLGFBQWE7d0JBQ2IsbUJBQW1CO3FCQUNwQjt5TkFNUSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIE5nRm9ybSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yRm4sXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fTEFCRUxTLFxuICBBR0dSRUdBVElPTl9WQUxVRVMsXG4gIEFHR1JFR0FUSU9OX1ZBTFVFU19BUlIsXG4gIEFnZ3JlZ2F0aW9uT3B0aW9uLFxuICBBZ2dyZWdhdGlvbk9wdGlvblN0YXR1cyxcbiAgQ29yZU1vZHVsZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFdpZGdldENvbmZpZ0NvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvY29udGV4dC1kYXNoYm9hcmQnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db25maWcsXG4gIERhdGFwb2ludFNlbGVjdG9yTW9kYWxPcHRpb25zLFxuICBEYXRhcG9pbnRTZWxlY3Rvck1vZHVsZSxcbiAgS1BJRGV0YWlsc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludC1zZWxlY3Rvcic7XG5pbXBvcnQge1xuICBkYXRlUmFuZ2VWYWxpZGF0b3IsXG4gIFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLFxuICBUaW1lUmFuZ2VJbnRlcnZhbFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludHMtZXhwb3J0LXNlbGVjdG9yJztcbmltcG9ydCB7IElOVEVSVkFMX1ZBTFVFUyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaW50ZXJ2YWwtcGlja2VyJztcbmltcG9ydCB7IFBvcG92ZXJNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3BvcG92ZXInO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgRGF0YXBvaW50c1RhYmxlQ29uZmlnLFxuICBEQVRFX1NFTEVDVElPTl9MQUJFTFMsXG4gIERBVEVfU0VMRUNUSU9OX1ZBTFVFUyxcbiAgREFURV9TRUxFQ1RJT05fVkFMVUVTX0FSUixcbiAgRGF0ZVJhbmdlLFxuICBERUZBVUxUX0NPVU5URE9XTl9WQUxVRSxcbiAgSU5URVJWQUxfVkFMVUVTX0FSUixcbiAgUkVGUkVTSF9JTlRFUlZBTF9WQUxVRVNfQVJSLFxuICBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMU1xufSBmcm9tICcuLi9kYXRhcG9pbnRzLXRhYmxlLXdpZGdldC5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhcG9pbnRzVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vZGF0YXBvaW50cy10YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhcG9pbnRzVGFibGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhcG9pbnRzLXRhYmxlLWNvbmZpZy5zZXJ2aWNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1pbk9uZURhdGFwb2ludEFjdGl2ZSgpOiBWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgIGNvbnN0IGRhdGFwb2ludHM6IEtQSURldGFpbHNbXSA9IGNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoIWRhdGFwb2ludHMgfHwgIWRhdGFwb2ludHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVEYXRhcG9pbnRzID0gZGF0YXBvaW50cy5maWx0ZXIoZGF0YXBvaW50ID0+IGRhdGFwb2ludC5fX2FjdGl2ZSk7XG5cbiAgICBpZiAoYWN0aXZlRGF0YXBvaW50cy5sZW5ndGggPj0gMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7IGV4YWN0bHlPbmVEYXRhcG9pbnROZWVkc1RvQmVBY3RpdmU6IHRydWUgfTtcbiAgfTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhdGFwb2ludHMtdGFibGUtdmlldy1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXBvaW50cy10YWJsZS1jb25maWcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29yZU1vZHVsZSxcbiAgICBEYXRhcG9pbnRTZWxlY3Rvck1vZHVsZSxcbiAgICBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQsXG4gICAgUG9wb3Zlck1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YXBvaW50c1RhYmxlV2lkZ2V0Q29uZmlnQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogIERhdGEgcG9pbnRzIHRhYmxlIHdpZGdldCBjb25maWcuXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc6IERhdGFwb2ludHNUYWJsZUNvbmZpZztcblxuICByZWFkb25seSBBR0dSRUdBVElPTl9MQUJFTFMgPSBBR0dSRUdBVElPTl9MQUJFTFM7XG4gIHJlYWRvbmx5IERBVEVfU0VMRUNUSU9OX0xBQkVMUyA9IERBVEVfU0VMRUNUSU9OX0xBQkVMUztcbiAgcmVhZG9ubHkgREVGQVVMVF9EQVRFX1NFTEVDVE9SX1ZBTFVFID0gREFURV9TRUxFQ1RJT05fVkFMVUVTLmRhc2hib2FyZF9jb250ZXh0O1xuICByZWFkb25seSBERUZBVUxUX0lOVEVSVkFMX1ZBTFVFID0gSU5URVJWQUxfVkFMVUVTLmhvdXJzO1xuICByZWFkb25seSBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMUyA9IFRJTUVfUkFOR0VfSU5URVJWQUxfTEFCRUxTO1xuXG4gIHJlYWRvbmx5IEFHR1JFR0FUSU9OX1ZBTFVFU19BUlIgPSBBR0dSRUdBVElPTl9WQUxVRVNfQVJSO1xuICByZWFkb25seSBEQVRFX1NFTEVDVElPTl9WQUxVRVNfQVJSID0gREFURV9TRUxFQ1RJT05fVkFMVUVTX0FSUjtcbiAgcmVhZG9ubHkgSU5URVJWQUxfVkFMVUVTX0FSUiA9IElOVEVSVkFMX1ZBTFVFU19BUlI7XG4gIHJlYWRvbmx5IFJFRlJFU0hfSU5URVJWQUxfVkFMVUVTX0FSUiA9IFJFRlJFU0hfSU5URVJWQUxfVkFMVUVTX0FSUjtcblxuICBkYXRhcG9pbnRTZWxlY3Rpb25Db25maWc6IFBhcnRpYWw8RGF0YXBvaW50U2VsZWN0b3JNb2RhbE9wdGlvbnM+ID0ge307XG4gIGRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zOiBBZ2dyZWdhdGlvbk9wdGlvblN0YXR1cyA9IHt9O1xuICBkZWZhdWx0Rm9ybU9wdGlvbnM6IFBhcnRpYWw8RGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db25maWc+ID0ge1xuICAgIHNob3dEaXNwbGF5OiB0cnVlLFxuICAgIHNob3dSZWRSYW5nZTogdHJ1ZSxcbiAgICBzaG93WWVsbG93UmFuZ2U6IHRydWVcbiAgfTtcbiAgZm9ybUdyb3VwOiBSZXR1cm5UeXBlPERhdGFwb2ludHNUYWJsZVdpZGdldENvbmZpZ0NvbXBvbmVudFsnY3JlYXRlRm9ybSddPjtcbiAgaXNXaWRnZXRMaW5rZWRUb0dsb2JhbFRpbWVDb250ZXh0OiBib29sZWFuO1xuXG4gIHByaXZhdGUgZGVjaW1hbExpbWl0cyA9IHtcbiAgICBudW1iZXJPZkRlY2ltYWxQbGFjZXNNaW46IDAsXG4gICAgbnVtYmVyT2ZEZWNpbWFsUGxhY2VzTWF4OiAxMFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZSB3aGVuIHRoZSB0aW1lIGludGVydmFsIHNlbGVjdG9yIGl0ZW0gaGFzIGJlZW4gY2hhbmdlZCBwcm9ncmFtbWF0aWNhbGx5LlxuICAgKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gdHJhY2sgY2hhbmdlcyBpbiB0aGUgdGltZSBpbnRlcnZhbCBzZWxlY3RvclxuICAgKiB0aGF0IGFyZSBub3QgdHJpZ2dlcmVkIGJ5IGRpcmVjdCB1c2VyIGludGVyYWN0aW9uLCBidXQgYnkgdGhlIGFwcGxpY2F0aW9uIGl0c2VsZi5cbiAgICpcbiAgICogSW4gb3VyIGNhc2UsIHRoZSBkYXRlIHNlbGVjdG9yIGFuZCB0aGUgaW50ZXJ2YWwgc2VsZWN0b3IgYXJlIGxpbmtlZC5cbiAgICogU28sIHdoZW4gb25lIG9mIHRoZW0gY2hhbmdlcywgaXQgYWZmZWN0cyB0aGUgb3RoZXIuXG4gICAqIEZvciBleGFtcGxlLCBzZWxlY3RpbmcgXCJMYXN0IGhvdXJcIiBpbiB0aGUgaW50ZXJ2YWwgc2VsZWN0b3Igc2hvdWxkIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSBkYXRlIHJhbmdlIHRvIHRoZSBsYXN0IGhvdXIuXG4gICAqIEJ1dCB3aXRob3V0IHRoaXMgZmxhZywgY2hhbmdpbmcgdGhlIGRhdGUgcmFuZ2Ugd291bGQgYWxzbyB1cGRhdGUgdGhlIGludGVydmFsIHNlbGVjdG9yLCByZXN1bHRpbmcgaW4gXCJDdXN0b20gZGF0ZVwiIGJlaW5nIHNlbGVjdGVkLlxuICAgKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB0aGUgc3lzdGVtIHdvdWxkIGludGVycHJldCB0aGUgYmVoYXZpb3IgdGhpcyB3YXkuXG4gICAqL1xuICBwcml2YXRlIGlzSW50ZXJ2YWxTZWxlY3RvckNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gZmFsc2U7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0YXBvaW50c1RhYmxlU2VydmljZTogRGF0YXBvaW50c1RhYmxlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2U6IERhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBmb3JtOiBOZ0Zvcm0sXG4gICAgcHJpdmF0ZSB3aWRnZXRDb25maWc6IFdpZGdldENvbmZpZ0NvbXBvbmVudFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnLmNvbnRleHQ/LmlkKSB7XG4gICAgICB0aGlzLmRhdGFwb2ludFNlbGVjdGlvbkNvbmZpZy5jb250ZXh0QXNzZXQgPSB0aGlzLndpZGdldENvbmZpZz8uY29udGV4dDtcbiAgICB9XG5cbiAgICB0aGlzLmlzV2lkZ2V0TGlua2VkVG9HbG9iYWxUaW1lQ29udGV4dCA9XG4gICAgICB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCA/PyB0cnVlO1xuXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuXG4gICAgdGhpcy5oYW5kbGVBdXRvUmVmcmVzaFRvZ2dsZUNoYW5nZXMoKTtcbiAgICB0aGlzLmhhbmRsZUludGVydmFsU2VsZWN0b3JDaGFuZ2VzKCk7XG4gICAgdGhpcy5oYW5kbGVEYXRlU2VsZWN0b3JDaGFuZ2VzKCk7XG4gICAgdGhpcy5oYW5kbGVHbG9iYWxEYXRlU2VsZWN0b3JDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZS51cGRhdGVEaXNhYmxlZFN0YXRlT2ZBZ2dyZWdhdGlvbk9wdGlvbkVudHJpZXMoXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVGcm9tLnZhbHVlLFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlVG8udmFsdWUsXG4gICAgICAgIEFHR1JFR0FUSU9OX1ZBTFVFU19BUlJcbiAgICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBvbkJlZm9yZVNhdmUoY29uZmlnPzogRGF0YXBvaW50c1RhYmxlQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5mb3JtR3JvdXAudmFsdWUuYWdncmVnYXRpb24gPT09IEFHR1JFR0FUSU9OX1ZBTFVFUy5ub25lIHx8XG4gICAgICAoIXRoaXMuZm9ybUdyb3VwLnZhbHVlLmFnZ3JlZ2F0aW9uICYmIGNvbmZpZy5hZ2dyZWdhdGlvbiA9PT0gQUdHUkVHQVRJT05fVkFMVUVTLm5vbmUpXG4gICAgKSB7XG4gICAgICAvLyBUaGUgJ05PTkUnIGFnZ3JlZ2F0aW9uIHR5cGUgaXMgbm90IGhhbmRsZWQgYnkgYSBiYWNrZW5kLCBzbyBpdCBzaW1wbHkgbmVlZHMgdG8gYmUgZGVsZXRlZCB0byBnZXQgZGF0YSB3aXRob3V0IGFnZ3JlZ2F0aW9uLlxuICAgICAgdGhpcy5kZWxldGVBZ2dyZWdhdGlvblByb3BlcnR5KGNvbmZpZyk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGltZUNvbnRleHQoY29uZmlnLCB0aGlzLmZvcm1Hcm91cC52YWx1ZS5nbG9iYWxEYXRlU2VsZWN0b3IpO1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCB0aGlzLmZvcm1Hcm91cC52YWx1ZSk7XG4gIH1cblxuICB0b2dnbGVSZWZyZXNoSW50ZXJ2YWxDb250cm9sKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmlzQXV0b1JlZnJlc2hFbmFibGVkLnZhbHVlXG4gICAgICA/IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLnJlZnJlc2hJbnRlcnZhbC5kaXNhYmxlKClcbiAgICAgIDogdGhpcy5mb3JtR3JvdXAuY29udHJvbHMucmVmcmVzaEludGVydmFsLmVuYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUaW1lQ29udGV4dChjb25maWc6IERhdGFwb2ludHNUYWJsZUNvbmZpZywgc2VsZWN0ZWREYXRlQ29udGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgc3dpdGNoIChzZWxlY3RlZERhdGVDb250ZXh0KSB7XG4gICAgICBjYXNlIERBVEVfU0VMRUNUSU9OX1ZBTFVFUy5kYXNoYm9hcmRfY29udGV4dDpcbiAgICAgICAgY29uZmlnLmRpc3BsYXlEYXRlU2VsZWN0aW9uID0gZmFsc2U7XG4gICAgICAgIGNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCA9IHRydWU7XG4gICAgICAgIGlmIChjb25maWcuYWdncmVnYXRpb24gIT09ICdOT05FJykge1xuICAgICAgICAgIHRoaXMuZGVsZXRlQWdncmVnYXRpb25Qcm9wZXJ0eShjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEQVRFX1NFTEVDVElPTl9WQUxVRVMudmlld19hbmRfY29uZmlnOlxuICAgICAgICBjb25maWcuZGlzcGxheURhdGVTZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgICBjb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERBVEVfU0VMRUNUSU9OX1ZBTFVFUy5jb25maWc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25maWcuZGlzcGxheURhdGVTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuY3JlYXRlRm9ybSgpO1xuICAgIC8vIFdoZW4gdGhlICdOT05FJyBhZ2dyZWdhdGlvbiBpcyByZW1vdmVkIGF0IHRoZSAnb25CZWZvcmVTYXZlJyBibG9jayxcbiAgICAvLyBhbmQgYSBHbG9iYWwgRGF0ZSBDb250ZXh0IGZvcmNlcyB3aWRnZXRzIGF1dG8gcmVmcmVzaCB0byBiZSBlbmFibGVkXG4gICAgLy8gdGhlbiwgdGhlIGFnZ3JlZ2F0aW9uIHNlbGVjdG9yIHdpbGwgYmUgZW1wdHkgb24gaW5pdGlhbCBsb2FkLlxuICAgIHRoaXMuY29uZmlnLmFnZ3JlZ2F0aW9uID0gdGhpcy5jb25maWcuYWdncmVnYXRpb24gPz8gQUdHUkVHQVRJT05fVkFMVUVTLm5vbmU7XG5cbiAgICB0aGlzLmZvcm0uZm9ybS5hZGRDb250cm9sKCdjb25maWcnLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgY29uc3QgeyBkYXRlRnJvbSwgZGF0ZVRvIH0gPSB0aGlzLmRhdGFwb2ludHNUYWJsZVNlcnZpY2UuY2FsY3VsYXRlRGF0ZVJhbmdlKFxuICAgICAgdGhpcy5ERUZBVUxUX0lOVEVSVkFMX1ZBTFVFXG4gICAgKTtcbiAgICBjb25zdCBpc0xlZ2FjeVdpZGdldCA9XG4gICAgICB0aGlzLmNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgnd2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCcpICYmXG4gICAgICAhdGhpcy5jb25maWcuaGFzT3duUHJvcGVydHkoJ2RlY2ltYWxQbGFjZXMnKTtcblxuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxuICAgICAge1xuICAgICAgICBhZ2dyZWdhdGlvbjogbmV3IEZvcm1Db250cm9sKHtcbiAgICAgICAgICB2YWx1ZTogQUdHUkVHQVRJT05fVkFMVUVTLm5vbmUgYXMgQWdncmVnYXRpb25PcHRpb24sXG4gICAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLmlzQXV0b1JlZmVyc2hEaXNhYmxlZCgpXG4gICAgICAgIH0pLFxuICAgICAgICBkYXRhcG9pbnRzOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobmV3IEFycmF5PEtQSURldGFpbHM+KCksIFtcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpLFxuICAgICAgICAgIG1pbk9uZURhdGFwb2ludEFjdGl2ZSgpXG4gICAgICAgIF0pLFxuICAgICAgICBnbG9iYWxEYXRlU2VsZWN0b3I6IG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgICBpc0xlZ2FjeVdpZGdldFxuICAgICAgICAgICAgPyB0aGlzLmRldGVybWluZUdsb2JhbERhdGVTZWxlY3RvclZhbHVlRm9yTGVnYWN5V2lkZ2V0KClcbiAgICAgICAgICAgIDogdGhpcy5ERUZBVUxUX0RBVEVfU0VMRUNUT1JfVkFMVUVcbiAgICAgICAgKSxcbiAgICAgICAgZGF0ZUZyb206IG5ldyBGb3JtQ29udHJvbChkYXRlRnJvbSksXG4gICAgICAgIGRhdGVUbzogbmV3IEZvcm1Db250cm9sKGRhdGVUbyksXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IFtcbiAgICAgICAgICAyLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgICBWYWxpZGF0b3JzLm1pbih0aGlzLmRlY2ltYWxMaW1pdHMubnVtYmVyT2ZEZWNpbWFsUGxhY2VzTWluKSxcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KHRoaXMuZGVjaW1hbExpbWl0cy5udW1iZXJPZkRlY2ltYWxQbGFjZXNNYXgpLFxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0rJCcpXG4gICAgICAgICAgXVxuICAgICAgICBdLFxuICAgICAgICBpbnRlcnZhbDogbmV3IEZvcm1Db250cm9sKHRoaXMuREVGQVVMVF9JTlRFUlZBTF9WQUxVRSBhcyBUaW1lUmFuZ2VJbnRlcnZhbCksXG4gICAgICAgIGlzQXV0b1JlZnJlc2hFbmFibGVkOiBpc0xlZ2FjeVdpZGdldCA/IHRoaXMuY29uZmlnLnJlYWx0aW1lIDogW3RydWVdLFxuICAgICAgICByZWZyZXNoSW50ZXJ2YWw6IG5ldyBGb3JtQ29udHJvbCh7XG4gICAgICAgICAgdmFsdWU6IERFRkFVTFRfQ09VTlRET1dOX1ZBTFVFLFxuICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmlzQXV0b1JlZmVyc2hEaXNhYmxlZCgpXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgeyB2YWxpZGF0b3JzOiBkYXRlUmFuZ2VWYWxpZGF0b3IgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZUdsb2JhbERhdGVTZWxlY3RvclZhbHVlRm9yTGVnYWN5V2lkZ2V0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBkaXNwbGF5RGF0ZVNlbGVjdGlvbiwgd2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgLy8gU3RhdGUgb2Ygd2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCB3YXMgY29udmVydGVkIHRvIHdpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0LlxuICAgIC8vIFRoYXQgaXMgd2h5IGl0IHVzZSBoZXJlIGluIGEgbGVnYWN5IHdpZGdldCBjb250ZXh0LlxuICAgIGlmICh3aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCkge1xuICAgICAgcmV0dXJuIERBVEVfU0VMRUNUSU9OX1ZBTFVFUy5kYXNoYm9hcmRfY29udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGxheURhdGVTZWxlY3Rpb25cbiAgICAgID8gREFURV9TRUxFQ1RJT05fVkFMVUVTLnZpZXdfYW5kX2NvbmZpZ1xuICAgICAgOiBEQVRFX1NFTEVDVElPTl9WQUxVRVMuY29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0F1dG9SZWZlcnNoRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNJbml0aWFsV2lkZ2V0Q3JlYXRpb24gPVxuICAgICAgT2JqZWN0LmtleXModGhpcy5jb25maWcpLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmNvbmZpZ1snc2V0dGluZ3MnXTtcblxuICAgIGlmIChpc0luaXRpYWxXaWRnZXRDcmVhdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTGVnYWN5V2lkZ2V0UmVhbHRpbWVOb3RBY3RpdmUgPVxuICAgICAgIXRoaXMuY29uZmlnLnJlYWx0aW1lICYmXG4gICAgICAhdGhpcy5jb25maWcuaGFzT3duUHJvcGVydHkoJ2RlY2ltYWxQbGFjZXMnKSAmJlxuICAgICAgIXRoaXMuY29uZmlnLmhhc093blByb3BlcnR5KCdyZWZyZXNoSW50ZXJ2YWwnKSAmJlxuICAgICAgIXRoaXMuY29uZmlnLmhhc093blByb3BlcnR5KCdpc0F1dG9SZWZyZXNoRW5hYmxlZCcpO1xuXG4gICAgaWYgKGlzTGVnYWN5V2lkZ2V0UmVhbHRpbWVOb3RBY3RpdmUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhdGhpcy5jb25maWcuaXNBdXRvUmVmcmVzaEVuYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjaGFuZ2VzIHRvIHRoZSBhdXRvLXJlZnJlc2ggdG9nZ2xlIGNvbnRyb2wgYW5kIHVwZGF0ZXMgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wgYWNjb3JkaW5nbHkuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHN1YnNjcmliZXMgdG8gdGhlIHZhbHVlIGNoYW5nZXMgb2YgdGhlIGF1dG8tcmVmcmVzaCB0b2dnbGUgZm9ybSBjb250cm9sLlxuICAgKiBXaGVuIGF1dG8tcmVmcmVzaCBpcyBlbmFibGVkLCB0aGUgYWdncmVnYXRpb24gY29udHJvbCdzIHZhbHVlIGlzIHNldCB0byAnbm9uZScgYW5kIHRoZSBjb250cm9sIGlzXG4gICAqIHZpc3VhbGx5IGRpc2FibGVkIChidXQgbm90IHByb2dyYW1tYXRpY2FsbHkgZGlzYWJsZWQgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBzYXZlZCkuXG4gICAqIFdoZW4gYXV0by1yZWZyZXNoIGlzIGRpc2FibGVkLCB0aGUgYWdncmVnYXRpb24gY29udHJvbCBpcyBlbmFibGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVBdXRvUmVmcmVzaFRvZ2dsZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuaXNBdXRvUmVmcmVzaEVuYWJsZWQudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChpc0F1dG9SZWZyZXNoRW5hYmxlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICBjb25zdCBhZ2dyZWdhdGlvbkNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hZ2dyZWdhdGlvbjtcbiAgICAgICAgaWYgKGlzQXV0b1JlZnJlc2hFbmFibGVkKSB7XG4gICAgICAgICAgYWdncmVnYXRpb25Db250cm9sLnNldFZhbHVlKEFHR1JFR0FUSU9OX1ZBTFVFUy5ub25lKTtcbiAgICAgICAgICAvLyBEbyBub3QgZGlzYWJsZSB0aGUgY29udHJvbCBwcm9ncmFtbWF0aWNhbGx5IHRvIGVuc3VyZSB0aGUgdmFsdWUgaXMgc2F2ZWQuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWdncmVnYXRpb25Db250cm9sLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNoYW5nZXMgaW4gdGhlIGludGVydmFsIHNlbGVjdG9yIGZvcm0gY29udHJvbC5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlSW50ZXJ2YWxTZWxlY3RvckNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuaW50ZXJ2YWwudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZEludGVydmFsOiBUaW1lUmFuZ2VJbnRlcnZhbCkgPT4ge1xuICAgICAgICBpZiAoc2VsZWN0ZWRJbnRlcnZhbCA9PT0gVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMuY3VzdG9tKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlTm9uQ3VzdG9tSW50ZXJ2YWwoc2VsZWN0ZWRJbnRlcnZhbCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTm9uQ3VzdG9tSW50ZXJ2YWwoc2VsZWN0ZWRJbnRlcnZhbDogVGltZVJhbmdlSW50ZXJ2YWwpOiB2b2lkIHtcbiAgICB0aGlzLmlzSW50ZXJ2YWxTZWxlY3RvckNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZShzZWxlY3RlZEludGVydmFsKTtcbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkQWdncmVnYXRpb25PcHRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVBZ2dyZWdhdGlvbklmQXV0b1JlZnJlc2hEaXNhYmxlZChzZWxlY3RlZEludGVydmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0ZVJhbmdlKHNlbGVjdGVkSW50ZXJ2YWw6IFRpbWVSYW5nZUludGVydmFsKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZVJhbmdlOiBEYXRlUmFuZ2UgPSB0aGlzLmRhdGFwb2ludHNUYWJsZVNlcnZpY2UuY2FsY3VsYXRlRGF0ZVJhbmdlKHNlbGVjdGVkSW50ZXJ2YWwpO1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVUby5zZXRWYWx1ZShkYXRlUmFuZ2UuZGF0ZVRvKTtcblxuICAgIC8vIE1UTS02MTM1MVxuICAgIC8vIFVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gcXVldWUgdGhlIGRhdGVGcm9tIHVwZGF0ZS5cbiAgICAvLyBUaGlzIHByZXZlbnRzIHRpbWluZyBpc3N1ZXMgd2hlcmUgcmFwaWQgc2V0VmFsdWUgY2FsbHMgbWlnaHRcbiAgICAvLyBjYXVzZSB0aGUgdmlldyB0byBnbyBvdXQgb2Ygc3luYyB3aXRoIGZvcm0gY29udHJvbCB2YWx1ZXMsXG4gICAgLy8gZXNwZWNpYWxseSBkdXJpbmcgdGhlIGZpcnN0IGNoYW5nZSBhZnRlciBpbml0aWFsaXphdGlvbi5cbiAgICAvLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgIC8qKlxuICAgICAqIFdpdGhvdXQgdGhpcyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgb3Igc2V0VGltZW91dCwgZGF0ZUZyb20gd29uJ3QgY2hhbmdlIHRvIGEgY29ycmVjdCB2YWx1ZSBhZnRlciBmaXJzdCBzZWxlY3RvciBjaGFuZ2UuXG4gICAgICogV2hlbiBmb3JtIGlzIHNhdmVkIGl0IHNhdmVzIHdpdGggYSBjb3JyZWN0IHZhbHVlLCBldmVuIHdpdGhvdXQgd2l0aCB0aGlzIGZpeC5cbiAgICAgKiBIb3cgdG8gcmVwcm9kdWNlOlxuICAgICAqIDEuIHNldCBkYXRlIHZhbHVlcyB0byBlLmcuOiAwMS4wNS4yMDI0LTMwLjA1LjIwMjQgYW5kIHNhdmUgaXRcbiAgICAgKiAyLiByZW9wZW4gYSBjb25maWcgYW5kIHN3aXRjaCBpbnRlcnZhbCB0byBsYXN0IG1vbnRoXG4gICAgICovXG4gICAgLy8gVGhpcyBmaXggYnJha2VzIGEgbG9naWMgYmVoaW5kIGRpc2FibGluZyBub24gYXZhaWxhYmxlIGFnZ3JlZ2F0aW9ucy5cbiAgICAvLyBGb3JtIHdpbGwgYmUgc3RpbGwgc2F2ZWQgd2l0aCBjb3JyZWN0IGRhdGUgdmFsdWUsIG9ubHkgdmlldyBpcyBvdXQgb2YgYSBzeW5jLlxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVGcm9tLnNldFZhbHVlKGRhdGVSYW5nZS5kYXRlRnJvbSk7XG4gICAgdGhpcy5pc0ludGVydmFsU2VsZWN0b3JDaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSA9IGZhbHNlO1xuICAgIC8vIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZS51cGRhdGVEaXNhYmxlZFN0YXRlT2ZBZ2dyZWdhdGlvbk9wdGlvbkVudHJpZXMoXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVGcm9tLnZhbHVlLFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlVG8udmFsdWUsXG4gICAgICAgIEFHR1JFR0FUSU9OX1ZBTFVFU19BUlJcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUFnZ3JlZ2F0aW9uSWZBdXRvUmVmcmVzaERpc2FibGVkKHNlbGVjdGVkSW50ZXJ2YWw6IFRpbWVSYW5nZUludGVydmFsKTogdm9pZCB7XG4gICAgY29uc3QgaXNBdXRvUmVmcmVzaERpc2FibGVkID0gIXRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmlzQXV0b1JlZnJlc2hFbmFibGVkLnZhbHVlO1xuICAgIGlmIChpc0F1dG9SZWZyZXNoRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2V0QWdncmVnYXRpb25WYWx1ZShzZWxlY3RlZEludGVydmFsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEFnZ3JlZ2F0aW9uVmFsdWUoaW50ZXJ2YWw6IFRpbWVSYW5nZUludGVydmFsKTogdm9pZCB7XG4gICAgY29uc3QgYWdncmVnYXRpb25Db250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuYWdncmVnYXRpb247XG5cbiAgICBjb25zdCBuZXdBZ2dyZWdhdGlvblZhbHVlID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZS5kZXRlcm1pbmVBZ2dyZWdhdGlvblZhbHVlKGludGVydmFsKTtcbiAgICBhZ2dyZWdhdGlvbkNvbnRyb2wuc2V0VmFsdWUobmV3QWdncmVnYXRpb25WYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjaGFuZ2VzIGluIHRoZSBkYXRlIHNlbGVjdG9yIGZvcm0gY29udHJvbC5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlRGF0ZVNlbGVjdG9yQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBtZXJnZShcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVGcm9tLnZhbHVlQ2hhbmdlcyxcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVUby52YWx1ZUNoYW5nZXNcbiAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuaGFuZGxlRGF0ZUNoYW5nZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGF0ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0ludGVydmFsU2VsZWN0b3JDaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmludGVydmFsO1xuICAgIGlmIChpbnRlcnZhbENvbnRyb2wudmFsdWUgPT09IFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLmN1c3RvbSkge1xuICAgICAgdGhpcy5oYW5kbGVDdXN0b21JbnRlcnZhbERhdGVDaGFuZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRJbnRlcnZhbFRvQ3VzdG9tKGludGVydmFsQ29udHJvbCk7XG4gICAgfVxuICAgIHRoaXMuc2V0VG9GaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uT3B0aW9uSWZDdXJyZW50QWdncmVnYXRpb25Jc0Rpc2FibGVkKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUN1c3RvbUludGVydmFsRGF0ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkQWdncmVnYXRpb25PcHRpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEludGVydmFsVG9DdXN0b20oaW50ZXJ2YWxDb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB2b2lkIHtcbiAgICBpbnRlcnZhbENvbnRyb2wuc2V0VmFsdWUoVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMuY3VzdG9tKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNoYW5nZXMgaW4gdGhlIGdsb2JhbCBkYXRlIHNlbGVjdG9yIGZvcm0gY29udHJvbC5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlR2xvYmFsRGF0ZVNlbGVjdG9yQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5nbG9iYWxEYXRlU2VsZWN0b3IudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZCA9PT0gREFURV9TRUxFQ1RJT05fVkFMVUVTLmRhc2hib2FyZF9jb250ZXh0KSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVEYXNoYm9hcmRDb250ZXh0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVOb25EYXNoYm9hcmRDb250ZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEYXNoYm9hcmRDb250ZXh0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNXaWRnZXRMaW5rZWRUb0dsb2JhbFRpbWVDb250ZXh0ID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTm9uRGFzaGJvYXJkQ29udGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzV2lkZ2V0TGlua2VkVG9HbG9iYWxUaW1lQ29udGV4dCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuaXNDb25maWdTYXZlZFdpdGhvdXREYXNoYm9hcmRUaW1lT3B0aW9uKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUFnZ3JlZ2F0aW9uSWZOZWNlc3NhcnkoKTtcbiAgICB0aGlzLnNldEludGVydmFsVG9DdXN0b20odGhpcy5mb3JtR3JvdXAuY29udHJvbHMuaW50ZXJ2YWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbmZpZ1NhdmVkV2l0aG91dERhc2hib2FyZFRpbWVPcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQWdncmVnYXRpb25JZk5lY2Vzc2FyeSgpOiB2b2lkIHtcbiAgICBjb25zdCBhZ2dyZWdhdGlvbkNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hZ2dyZWdhdGlvbjtcbiAgICBjb25zdCBpc0Rhc2hib2FyZFRpbWVPcHRpb25TZXRBZ2dyZWdhdGlvblRvTnVsbCA9ICFhZ2dyZWdhdGlvbkNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoaXNEYXNoYm9hcmRUaW1lT3B0aW9uU2V0QWdncmVnYXRpb25Ub051bGwpIHtcbiAgICAgIGFnZ3JlZ2F0aW9uQ29udHJvbC5zZXRWYWx1ZShBR0dSRUdBVElPTl9WQUxVRVMubm9uZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wgdG8gdGhlIGZpcnN0IGF2YWlsYWJsZSAobm9uLWRpc2FibGVkKSBvcHRpb24gaWYgdGhlIGN1cnJlbnQgb3B0aW9uIGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZDpcbiAgICogLSBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wuXG4gICAqIC0gQ2hlY2tzIGlmIHRoZSBjdXJyZW50IGFnZ3JlZ2F0aW9uIG9wdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogLSBJZiB0aGUgY3VycmVudCBvcHRpb24gaXMgZGlzYWJsZWQsIHNldHMgdGhlIGNvbnRyb2wgdG8gdGhlIGZpcnN0IGF2YWlsYWJsZSAobm9uLWRpc2FibGVkKSBvcHRpb24gYmFzZWQgb24gdGhlIGZvbGxvd2luZyBvcmRlcjpcbiAgICogICAtIElmIHRoZSBjdXJyZW50IHZhbHVlIGlzIGBEQUlMWWAsIGl0IHN3aXRjaGVzIHRvIGBIT1VSTFlgIGlmIGl0J3Mgbm90IGRpc2FibGVkLCBvdGhlcndpc2UgdG8gYE1JTlVURUxZYCBpZiBgSE9VUkxZYCBpcyBhbHNvIGRpc2FibGVkLlxuICAgKiAgIC0gSWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYEhPVVJMWWAsIGl0IHN3aXRjaGVzIHRvIGBNSU5VVEVMWWAgaWYgaXQncyBub3QgZGlzYWJsZWQuXG4gICAqICAgLSBJZiBhbGwgb3B0aW9ucyBhcmUgZGlzYWJsZWQsIGl0IHNldHMgdGhlIHZhbHVlIHRvIGBOT05FYC5cbiAgICpcbiAgICogVGhlIGRpc2FibGVkIHN0YXRlIGlzIHN0b3JlZCBpbiB0aGUgYGRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zYCBvYmplY3QsXG4gICAqIHdoZXJlIHRoZSBrZXkgaXMgdGhlIGFnZ3JlZ2F0aW9uIHZhbHVlIGFuZCB0aGUgdmFsdWUgaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBUaGUgYEFHR1JFR0FUSU9OX1ZBTFVFU2Agb2JqZWN0IGRlZmluZXMgdGhlIHBvc3NpYmxlIGFnZ3JlZ2F0aW9uIHZhbHVlcy5cbiAgICovXG4gIC8vIFRPRE8gc2FtZSBtZXRob2QgaXMgaW4gZGF0YXBvaW50cyBleHBvcnQgY29tcG9uZW50LiBDb25zaWRlciBtb3ZpbmcgaXQgdG8gYSBzaGFyZWQgc2VydmljZSB3aGVuIERQVCB3aWxsIGJlIGludGVncmF0aW5nIHdpdGggTVRNLTU5Njg5LlxuICAvLyBUT0RPICdkZXRlcm1pbmVOZXdBZ2dyZWdhdGlvblZhbHVlJyB3aWxsIGJlIGEgc2hhcmVkIG1ldGhvZC5cbiAgLy8gSW50ZWdyYXRpb24gdGFzazogTVRNLTYwMjIxXG4gIHByaXZhdGUgc2V0VG9GaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uT3B0aW9uSWZDdXJyZW50QWdncmVnYXRpb25Jc0Rpc2FibGVkKCk6IHZvaWQge1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmFnZ3JlZ2F0aW9uO1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGFnZ3JlZ2F0aW9uQ29udHJvbC52YWx1ZTtcblxuICAgIGNvbnN0IG5ld0FnZ3JlZ2F0aW9uVmFsdWUgPSB0aGlzLmRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2UuZGV0ZXJtaW5lTmV3QWdncmVnYXRpb25WYWx1ZShcbiAgICAgIGN1cnJlbnRWYWx1ZSxcbiAgICAgIHRoaXMuZGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYgKG5ld0FnZ3JlZ2F0aW9uVmFsdWUgIT09IGN1cnJlbnRWYWx1ZSkge1xuICAgICAgYWdncmVnYXRpb25Db250cm9sLnNldFZhbHVlKG5ld0FnZ3JlZ2F0aW9uVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQWdncmVnYXRpb25Qcm9wZXJ0eShjb25maWc6IERhdGFwb2ludHNUYWJsZUNvbmZpZyk6IHZvaWQge1xuICAgIGRlbGV0ZSB0aGlzLmZvcm1Hcm91cC52YWx1ZS5hZ2dyZWdhdGlvbjtcbiAgICBkZWxldGUgY29uZmlnLmFnZ3JlZ2F0aW9uO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC1sLTI0IHAtci0yNFwiPlxuICA8Zm9ybVxuICAgIGNsYXNzPVwibm8tY2FyZC1jb250ZXh0XCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gID5cbiAgICA8IS0tIDxkYXRhcG9pbnRzLXNlbGVjdG9yPiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPCEtLSBnbG9iYWwtdGltZS1jb250ZXh0LXNlbGVjdG9yIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtLWItMCBwLWItMTYgc2VwYXJhdG9yLWJvdHRvbVwiPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBwLXQtNFwiXG4gICAgICAgICAgICBmb3I9XCJkYXRlU2VsZWN0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnRGF0ZSBzZWxlY3Rpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJwb3BvdmVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwb3BvdmVyVGVtcGxhdGU+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIENob29zZSBob3cgdG8gc2VsZWN0IGEgZGF0ZSByYW5nZSwgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZTpcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibS1sLTAgcC1sLTggbS10LTggbS1iLTBcIj5cbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICA8Yj5EYXNoYm9hcmQgdGltZSByYW5nZTo8L2I+XG4gICAgICAgICAgICAgICAgICByZXN0cmljdHMgZGF0ZSBzZWxlY3Rpb24gdG8gdGhlIGdsb2JhbCBkYXNoYm9hcmQgY29uZmlndXJhdGlvbiBvbmx5XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICA8Yj5XaWRnZXQgY29uZmlndXJhdGlvbjo8L2I+XG4gICAgICAgICAgICAgICAgICByZXN0cmljdHMgdGhlIGRhdGUgc2VsZWN0aW9uIG9ubHkgdG8gdGhlIHdpZGdldCBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICA8Yj5XaWRnZXQgYW5kIHdpZGdldCBjb25maWd1cmF0aW9uOjwvYj5cbiAgICAgICAgICAgICAgICAgIHJlc3RyaWN0cyB0aGUgZGF0ZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldCB2aWV3IGFuZCB3aWRnZXQgY29uZmlndXJhdGlvbiBvbmx5XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC0xMlwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInRGF0ZSBzZWxlY3Rpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRGF0ZSBzZWxlY3Rpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgaWQ9XCJnbG9iYWxEYXRlU2VsZWN0b3JcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJnbG9iYWxEYXRlU2VsZWN0b3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGFTZWxlY3Rpb25WYWx1ZSBvZiBEQVRFX1NFTEVDVElPTl9WQUxVRVNfQVJSXCJcbiAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJkYXRhU2VsZWN0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgREFURV9TRUxFQ1RJT05fTEFCRUxTW2RhdGFTZWxlY3Rpb25WYWx1ZV0gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGM4eS1kYXRhcG9pbnQtc2VsZWN0aW9uLWxpc3RcbiAgICAgICAgICBjbGFzcz1cImJnLWluaGVyaXQgc2VwYXJhdG9yLXRvcCBwLXQtMTYgZC1ibG9ja1wiXG4gICAgICAgICAgbGlzdFRpdGxlPVwie3sgJ0RhdGEgcG9pbnRzJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgbmFtZT1cImRhdGFwb2ludHNcIlxuICAgICAgICAgIFtkZWZhdWx0Rm9ybU9wdGlvbnNdPVwiZGVmYXVsdEZvcm1PcHRpb25zXCJcbiAgICAgICAgICBbY29uZmlnXT1cImRhdGFwb2ludFNlbGVjdGlvbkNvbmZpZ1wiXG4gICAgICAgICAgW21pbkFjdGl2ZUNvdW50XT1cIjFcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRhdGFwb2ludHNcIlxuICAgICAgICA+PC9jOHktZGF0YXBvaW50LXNlbGVjdGlvbi1saXN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNXaWRnZXRMaW5rZWRUb0dsb2JhbFRpbWVDb250ZXh0XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICA8IS0tIGludGVydmFsIHNlbGVjdG9yIC0tPlxuICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0XCI+XG4gICAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIHt7ICdBdXRvIHJlZnJlc2gnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscCBidG4taGVscC0tc21cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiXG4gICAgICAgICAgICAgICAgICAgICdDaGFuZ2UgdGhlIHN0YXRlIG9mIGludGVydmFsIGF1dG9tYXRpYyByZWZyZXNoIGFuZCBzZXQgdGhlIHJlZnJlc2ggZnJlcXVlbmN5LidcbiAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgIDwvbGVnZW5kPlxuICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJtLWItMTYgZm9ybS1ncm91cC1zbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTQgbS10LTggbS1iLTggYS1pLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInJlZnJlc2hUb2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJpc0F1dG9SZWZyZXNoRW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpc0F1dG9SZWZyZXNoRW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJlZnJlc2hJbnRlcnZhbENvbnRyb2woKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+e3sgJ0F1dG8gcmVmcmVzaCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1iLTBcIlxuICAgICAgICAgICAgICAgICAgICBmb3I9XCJyZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyAnSW50ZXJ2YWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC0xMlwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidSZWZyZXNoIGludGVydmFsIGluIHNlY29uZHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInJlZnJlc2hJbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWZyZXNoSW50ZXJ2YWwgb2YgUkVGUkVTSF9JTlRFUlZBTF9WQUxVRVNfQVJSXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInJlZnJlc2hJbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3t7IHNlY29uZHMgfX0gcycgfCB0cmFuc2xhdGU6IHsgc2Vjb25kczogcmVmcmVzaEludGVydmFsIC8gMTAwMCB9IH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBkZWNpbWFsIGlucHV0IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIj5cbiAgICAgICAgICAgIDxsZWdlbmQ+XG4gICAgICAgICAgICAgIHt7ICdEZWNpbWFsIHBsYWNlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbGVnZW5kPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwicC10LThcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJkZWNpbWFsUGxhY2VzXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZWNpbWFsUGxhY2VzXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIGFnZ3JlZ2F0aW9uIHNlbGVjdG9yIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzV2lkZ2V0TGlua2VkVG9HbG9iYWxUaW1lQ29udGV4dFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0XCI+XG4gICAgICAgICAgICAgIDxsZWdlbmQ+XG4gICAgICAgICAgICAgICAge3sgJ0FnZ3JlZ2F0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2xlZ2VuZD5cbiAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwicC10LThcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmcgYmVsb3cgW2F0dHIuZGlzYWJsZWRdIGVuc3VyZXMgdGhhdCB0aGUgY29udHJvbCBpcyB2aXN1YWxseSBkaXNhYmxlZCBhbmQgdXNlciBpbnRlcmFjdGlvbiBpcyBwcmV2ZW50ZWQsXG4gICAgICAgICAgICAgICB3aGlsZSBzdGlsbCBhbGxvd2luZyB0aGUgdmFsdWUgdG8gYmUgdXBkYXRlZCBhbmQgc2F2ZWQgY29ycmVjdGx5IGluIHRoZSBmb3JtLlxuICAgICAgICAgICAgICAgVGhpcyBzb2x1dGlvbiBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIgZW5hYmxlcyBhdXRvLXJlZnJlc2gsIGluIHdoaWNoIGNhc2UgYWdncmVnYXRpb24gbXVzdCBiZSBzZXQgdG8gTk9ORS4gLS0+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtMTJcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FnZ3JlZ2F0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYWdncmVnYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZ2dyZWdhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImZvcm1Hcm91cC52YWx1ZS5pc0F1dG9SZWZyZXNoRW5hYmxlZCA/IHRydWUgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhZ2dyZWdhdGlvblZhbHVlIG9mIEFHR1JFR0FUSU9OX1ZBTFVFU19BUlJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cImFnZ3JlZ2F0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1thZ2dyZWdhdGlvblZhbHVlXVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBBR0dSRUdBVElPTl9MQUJFTFNbYWdncmVnYXRpb25WYWx1ZV0gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIHRpbWUgaW50ZXJ2YWwgc2VsZWN0b3IgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldFwiPlxuICAgICAgICAgICAgPGxlZ2VuZD5cbiAgICAgICAgICAgICAge3sgJ1RpbWUgaW50ZXJ2YWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2xlZ2VuZD5cbiAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cInAtdC04XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LTEyXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInSW50ZXJ2YWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGludGVydmFsVmFsdWUgb2YgSU5URVJWQUxfVkFMVUVTX0FSUlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cImludGVydmFsVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMU1tpbnRlcnZhbFZhbHVlXSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBkYXRlIHBpY2tlcnMgLS0+XG4gICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIj5cbiAgICAgICAgPGxlZ2VuZD5cbiAgICAgICAgICB7eyAnRGF0ZSByYW5nZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9sZWdlbmQ+XG4gICAgICAgIDxjOHktZGF0ZS1yYW5nZS1waWNrZXI+PC9jOHktZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==
388
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS1jb25maWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvZGF0YXBvaW50cy10YWJsZS9kYXRhcG9pbnRzLXRhYmxlLWNvbmZpZy9kYXRhcG9pbnRzLXRhYmxlLWNvbmZpZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtY29uZmlnL2RhdGFwb2ludHMtdGFibGUtY29uZmlnLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBRUwsV0FBVyxFQUNYLFdBQVcsRUFDWCxNQUFNLEVBQ04sbUJBQW1CLEVBR25CLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUd0QixVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RSxPQUFPLEVBR0wsdUJBQXVCLEVBRXhCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixnQ0FBZ0MsRUFFakMsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBRUwscUJBQXFCLEVBQ3JC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N0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDeEMsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7OEdBcGFVLG9DQUFvQztrR0FBcEMsb0NBQW9DLDBIQzlFakQsNHNSQStOQSwyQ0R4SkksVUFBVSwrMEVBQ1YsdUJBQXVCLHNUQUN2Qix3QkFBd0IsMElBQ3hCLGFBQWEsOFZBQ2IsbUJBQW1COzsyRkFHVixvQ0FBb0M7a0JBWmhELFNBQVM7K0JBQ0Usa0NBQWtDLGNBRWhDLElBQUksV0FDUDt3QkFDUCxVQUFVO3dCQUNWLHVCQUF1Qjt3QkFDdkIsd0JBQXdCO3dCQUN4QixhQUFhO3dCQUNiLG1CQUFtQjtxQkFDcEI7eU5BTVEsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBOZ0Zvcm0sXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvckZuLFxuICBWYWxpZGF0b3JzXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX0xBQkVMUyxcbiAgQUdHUkVHQVRJT05fVkFMVUVTLFxuICBBR0dSRUdBVElPTl9WQUxVRVNfQVJSLFxuICBBZ2dyZWdhdGlvbk9wdGlvbixcbiAgQWdncmVnYXRpb25PcHRpb25TdGF0dXMsXG4gIENvcmVNb2R1bGVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBXaWRnZXRDb25maWdDb21wb25lbnQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2NvbnRleHQtZGFzaGJvYXJkJztcbmltcG9ydCB7XG4gIERhdGFwb2ludEF0dHJpYnV0ZXNGb3JtQ29uZmlnLFxuICBEYXRhcG9pbnRTZWxlY3Rvck1vZGFsT3B0aW9ucyxcbiAgRGF0YXBvaW50U2VsZWN0b3JNb2R1bGUsXG4gIEtQSURldGFpbHNcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtc2VsZWN0b3InO1xuaW1wb3J0IHtcbiAgZGF0ZVJhbmdlVmFsaWRhdG9yLFxuICBUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUyxcbiAgVGltZVJhbmdlSW50ZXJ2YWxcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnRzLWV4cG9ydC1zZWxlY3Rvcic7XG5pbXBvcnQgeyBJTlRFUlZBTF9WQUxVRVMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ludGVydmFsLXBpY2tlcic7XG5pbXBvcnQgeyBQb3BvdmVyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wb3BvdmVyJztcbmltcG9ydCB7IG1lcmdlLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERhdGFwb2ludHNUYWJsZUNvbmZpZyxcbiAgREFURV9TRUxFQ1RJT05fTEFCRUxTLFxuICBEQVRFX1NFTEVDVElPTl9WQUxVRVMsXG4gIERBVEVfU0VMRUNUSU9OX1ZBTFVFU19BUlIsXG4gIERhdGVSYW5nZSxcbiAgREVGQVVMVF9DT1VOVERPV05fVkFMVUUsXG4gIElOVEVSVkFMX1ZBTFVFU19BUlIsXG4gIFJFRlJFU0hfSU5URVJWQUxfVkFMVUVTX0FSUixcbiAgVElNRV9SQU5HRV9JTlRFUlZBTF9MQUJFTFNcbn0gZnJvbSAnLi4vZGF0YXBvaW50cy10YWJsZS13aWRnZXQubW9kZWwnO1xuaW1wb3J0IHsgRGF0YXBvaW50c1RhYmxlU2VydmljZSB9IGZyb20gJy4uL2RhdGFwb2ludHMtdGFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vZGF0YXBvaW50cy10YWJsZS1jb25maWcuc2VydmljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5PbmVEYXRhcG9pbnRBY3RpdmUoKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICBjb25zdCBkYXRhcG9pbnRzOiBLUElEZXRhaWxzW10gPSBjb250cm9sLnZhbHVlO1xuXG4gICAgaWYgKCFkYXRhcG9pbnRzIHx8ICFkYXRhcG9pbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlRGF0YXBvaW50cyA9IGRhdGFwb2ludHMuZmlsdGVyKGRhdGFwb2ludCA9PiBkYXRhcG9pbnQuX19hY3RpdmUpO1xuXG4gICAgaWYgKGFjdGl2ZURhdGFwb2ludHMubGVuZ3RoID49IDEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4geyBleGFjdGx5T25lRGF0YXBvaW50TmVlZHNUb0JlQWN0aXZlOiB0cnVlIH07XG4gIH07XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnRzLXRhYmxlLXZpZXctY29uZmlnJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludHMtdGFibGUtY29uZmlnLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvcmVNb2R1bGUsXG4gICAgRGF0YXBvaW50U2VsZWN0b3JNb2R1bGUsXG4gICAgRGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LFxuICAgIFBvcG92ZXJNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGFwb2ludHNUYWJsZVdpZGdldENvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqICBEYXRhIHBvaW50cyB0YWJsZSB3aWRnZXQgY29uZmlnLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiBEYXRhcG9pbnRzVGFibGVDb25maWc7XG5cbiAgcmVhZG9ubHkgQUdHUkVHQVRJT05fTEFCRUxTID0gQUdHUkVHQVRJT05fTEFCRUxTO1xuICByZWFkb25seSBEQVRFX1NFTEVDVElPTl9MQUJFTFMgPSBEQVRFX1NFTEVDVElPTl9MQUJFTFM7XG4gIHJlYWRvbmx5IERFRkFVTFRfREFURV9TRUxFQ1RPUl9WQUxVRSA9IERBVEVfU0VMRUNUSU9OX1ZBTFVFUy5kYXNoYm9hcmRfY29udGV4dDtcbiAgcmVhZG9ubHkgREVGQVVMVF9JTlRFUlZBTF9WQUxVRSA9IElOVEVSVkFMX1ZBTFVFUy5ob3VycztcbiAgcmVhZG9ubHkgVElNRV9SQU5HRV9JTlRFUlZBTF9MQUJFTFMgPSBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMUztcblxuICByZWFkb25seSBBR0dSRUdBVElPTl9WQUxVRVNfQVJSID0gQUdHUkVHQVRJT05fVkFMVUVTX0FSUjtcbiAgcmVhZG9ubHkgREFURV9TRUxFQ1RJT05fVkFMVUVTX0FSUiA9IERBVEVfU0VMRUNUSU9OX1ZBTFVFU19BUlI7XG4gIHJlYWRvbmx5IElOVEVSVkFMX1ZBTFVFU19BUlIgPSBJTlRFUlZBTF9WQUxVRVNfQVJSO1xuICByZWFkb25seSBSRUZSRVNIX0lOVEVSVkFMX1ZBTFVFU19BUlIgPSBSRUZSRVNIX0lOVEVSVkFMX1ZBTFVFU19BUlI7XG5cbiAgZGF0YXBvaW50U2VsZWN0aW9uQ29uZmlnOiBQYXJ0aWFsPERhdGFwb2ludFNlbGVjdG9yTW9kYWxPcHRpb25zPiA9IHt9O1xuICBkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uczogQWdncmVnYXRpb25PcHRpb25TdGF0dXMgPSB7fTtcbiAgZGVmYXVsdEZvcm1PcHRpb25zOiBQYXJ0aWFsPERhdGFwb2ludEF0dHJpYnV0ZXNGb3JtQ29uZmlnPiA9IHtcbiAgICBzZWxlY3RhYmxlQ2hhcnRMaW5lVHlwZXM6IFtdLFxuICAgIHNlbGVjdGFibGVBeGlzVHlwZXM6IFtdLFxuICAgIHNob3dSZWRSYW5nZTogdHJ1ZSxcbiAgICBzaG93WWVsbG93UmFuZ2U6IHRydWVcbiAgfTtcbiAgZm9ybUdyb3VwOiBSZXR1cm5UeXBlPERhdGFwb2ludHNUYWJsZVdpZGdldENvbmZpZ0NvbXBvbmVudFsnY3JlYXRlRm9ybSddPjtcbiAgaXNXaWRnZXRMaW5rZWRUb0dsb2JhbFRpbWVDb250ZXh0OiBib29sZWFuO1xuXG4gIHByaXZhdGUgZGVjaW1hbExpbWl0cyA9IHtcbiAgICBudW1iZXJPZkRlY2ltYWxQbGFjZXNNaW46IDAsXG4gICAgbnVtYmVyT2ZEZWNpbWFsUGxhY2VzTWF4OiAxMFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZSB3aGVuIHRoZSB0aW1lIGludGVydmFsIHNlbGVjdG9yIGl0ZW0gaGFzIGJlZW4gY2hhbmdlZCBwcm9ncmFtbWF0aWNhbGx5LlxuICAgKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gdHJhY2sgY2hhbmdlcyBpbiB0aGUgdGltZSBpbnRlcnZhbCBzZWxlY3RvclxuICAgKiB0aGF0IGFyZSBub3QgdHJpZ2dlcmVkIGJ5IGRpcmVjdCB1c2VyIGludGVyYWN0aW9uLCBidXQgYnkgdGhlIGFwcGxpY2F0aW9uIGl0c2VsZi5cbiAgICpcbiAgICogSW4gb3VyIGNhc2UsIHRoZSBkYXRlIHNlbGVjdG9yIGFuZCB0aGUgaW50ZXJ2YWwgc2VsZWN0b3IgYXJlIGxpbmtlZC5cbiAgICogU28sIHdoZW4gb25lIG9mIHRoZW0gY2hhbmdlcywgaXQgYWZmZWN0cyB0aGUgb3RoZXIuXG4gICAqIEZvciBleGFtcGxlLCBzZWxlY3RpbmcgXCJMYXN0IGhvdXJcIiBpbiB0aGUgaW50ZXJ2YWwgc2VsZWN0b3Igc2hvdWxkIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSBkYXRlIHJhbmdlIHRvIHRoZSBsYXN0IGhvdXIuXG4gICAqIEJ1dCB3aXRob3V0IHRoaXMgZmxhZywgY2hhbmdpbmcgdGhlIGRhdGUgcmFuZ2Ugd291bGQgYWxzbyB1cGRhdGUgdGhlIGludGVydmFsIHNlbGVjdG9yLCByZXN1bHRpbmcgaW4gXCJDdXN0b20gZGF0ZVwiIGJlaW5nIHNlbGVjdGVkLlxuICAgKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB0aGUgc3lzdGVtIHdvdWxkIGludGVycHJldCB0aGUgYmVoYXZpb3IgdGhpcyB3YXkuXG4gICAqL1xuICBwcml2YXRlIGlzSW50ZXJ2YWxTZWxlY3RvckNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gZmFsc2U7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0YXBvaW50c1RhYmxlU2VydmljZTogRGF0YXBvaW50c1RhYmxlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2U6IERhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBmb3JtOiBOZ0Zvcm0sXG4gICAgcHJpdmF0ZSB3aWRnZXRDb25maWc6IFdpZGdldENvbmZpZ0NvbXBvbmVudFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnLmNvbnRleHQ/LmlkKSB7XG4gICAgICB0aGlzLmRhdGFwb2ludFNlbGVjdGlvbkNvbmZpZy5jb250ZXh0QXNzZXQgPSB0aGlzLndpZGdldENvbmZpZz8uY29udGV4dDtcbiAgICB9XG5cbiAgICB0aGlzLmlzV2lkZ2V0TGlua2VkVG9HbG9iYWxUaW1lQ29udGV4dCA9XG4gICAgICB0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCA/PyB0cnVlO1xuXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuXG4gICAgdGhpcy5oYW5kbGVBdXRvUmVmcmVzaFRvZ2dsZUNoYW5nZXMoKTtcbiAgICB0aGlzLmhhbmRsZUludGVydmFsU2VsZWN0b3JDaGFuZ2VzKCk7XG4gICAgdGhpcy5oYW5kbGVEYXRlU2VsZWN0b3JDaGFuZ2VzKCk7XG4gICAgdGhpcy5oYW5kbGVHbG9iYWxEYXRlU2VsZWN0b3JDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZS51cGRhdGVEaXNhYmxlZFN0YXRlT2ZBZ2dyZWdhdGlvbk9wdGlvbkVudHJpZXMoXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVGcm9tLnZhbHVlLFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlVG8udmFsdWUsXG4gICAgICAgIEFHR1JFR0FUSU9OX1ZBTFVFU19BUlJcbiAgICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBvbkJlZm9yZVNhdmUoY29uZmlnPzogRGF0YXBvaW50c1RhYmxlQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5mb3JtR3JvdXAudmFsdWUuYWdncmVnYXRpb24gPT09IEFHR1JFR0FUSU9OX1ZBTFVFUy5ub25lIHx8XG4gICAgICAoIXRoaXMuZm9ybUdyb3VwLnZhbHVlLmFnZ3JlZ2F0aW9uICYmIGNvbmZpZy5hZ2dyZWdhdGlvbiA9PT0gQUdHUkVHQVRJT05fVkFMVUVTLm5vbmUpXG4gICAgKSB7XG4gICAgICAvLyBUaGUgJ05PTkUnIGFnZ3JlZ2F0aW9uIHR5cGUgaXMgbm90IGhhbmRsZWQgYnkgYSBiYWNrZW5kLCBzbyBpdCBzaW1wbHkgbmVlZHMgdG8gYmUgZGVsZXRlZCB0byBnZXQgZGF0YSB3aXRob3V0IGFnZ3JlZ2F0aW9uLlxuICAgICAgdGhpcy5kZWxldGVBZ2dyZWdhdGlvblByb3BlcnR5KGNvbmZpZyk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGltZUNvbnRleHQoY29uZmlnLCB0aGlzLmZvcm1Hcm91cC52YWx1ZS5nbG9iYWxEYXRlU2VsZWN0b3IpO1xuICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCB0aGlzLmZvcm1Hcm91cC52YWx1ZSk7XG4gIH1cblxuICB0b2dnbGVSZWZyZXNoSW50ZXJ2YWxDb250cm9sKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmlzQXV0b1JlZnJlc2hFbmFibGVkLnZhbHVlXG4gICAgICA/IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLnJlZnJlc2hJbnRlcnZhbC5kaXNhYmxlKClcbiAgICAgIDogdGhpcy5mb3JtR3JvdXAuY29udHJvbHMucmVmcmVzaEludGVydmFsLmVuYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUaW1lQ29udGV4dChjb25maWc6IERhdGFwb2ludHNUYWJsZUNvbmZpZywgc2VsZWN0ZWREYXRlQ29udGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgc3dpdGNoIChzZWxlY3RlZERhdGVDb250ZXh0KSB7XG4gICAgICBjYXNlIERBVEVfU0VMRUNUSU9OX1ZBTFVFUy5kYXNoYm9hcmRfY29udGV4dDpcbiAgICAgICAgY29uZmlnLmRpc3BsYXlEYXRlU2VsZWN0aW9uID0gZmFsc2U7XG4gICAgICAgIGNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCA9IHRydWU7XG4gICAgICAgIGlmIChjb25maWcuYWdncmVnYXRpb24gIT09ICdOT05FJykge1xuICAgICAgICAgIHRoaXMuZGVsZXRlQWdncmVnYXRpb25Qcm9wZXJ0eShjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEQVRFX1NFTEVDVElPTl9WQUxVRVMudmlld19hbmRfY29uZmlnOlxuICAgICAgICBjb25maWcuZGlzcGxheURhdGVTZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgICBjb25maWcud2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERBVEVfU0VMRUNUSU9OX1ZBTFVFUy5jb25maWc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25maWcuZGlzcGxheURhdGVTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgY29uZmlnLndpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuY3JlYXRlRm9ybSgpO1xuICAgIC8vIFdoZW4gdGhlICdOT05FJyBhZ2dyZWdhdGlvbiBpcyByZW1vdmVkIGF0IHRoZSAnb25CZWZvcmVTYXZlJyBibG9jayxcbiAgICAvLyBhbmQgYSBHbG9iYWwgRGF0ZSBDb250ZXh0IGZvcmNlcyB3aWRnZXRzIGF1dG8gcmVmcmVzaCB0byBiZSBlbmFibGVkXG4gICAgLy8gdGhlbiwgdGhlIGFnZ3JlZ2F0aW9uIHNlbGVjdG9yIHdpbGwgYmUgZW1wdHkgb24gaW5pdGlhbCBsb2FkLlxuICAgIHRoaXMuY29uZmlnLmFnZ3JlZ2F0aW9uID0gdGhpcy5jb25maWcuYWdncmVnYXRpb24gPz8gQUdHUkVHQVRJT05fVkFMVUVTLm5vbmU7XG5cbiAgICB0aGlzLmZvcm0uZm9ybS5hZGRDb250cm9sKCdjb25maWcnLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgY29uc3QgeyBkYXRlRnJvbSwgZGF0ZVRvIH0gPSB0aGlzLmRhdGFwb2ludHNUYWJsZVNlcnZpY2UuY2FsY3VsYXRlRGF0ZVJhbmdlKFxuICAgICAgdGhpcy5ERUZBVUxUX0lOVEVSVkFMX1ZBTFVFXG4gICAgKTtcbiAgICBjb25zdCBpc0xlZ2FjeVdpZGdldCA9XG4gICAgICB0aGlzLmNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgnd2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCcpICYmXG4gICAgICAhdGhpcy5jb25maWcuaGFzT3duUHJvcGVydHkoJ2RlY2ltYWxQbGFjZXMnKTtcblxuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxuICAgICAge1xuICAgICAgICBhZ2dyZWdhdGlvbjogbmV3IEZvcm1Db250cm9sKHtcbiAgICAgICAgICB2YWx1ZTogQUdHUkVHQVRJT05fVkFMVUVTLm5vbmUgYXMgQWdncmVnYXRpb25PcHRpb24sXG4gICAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLmlzQXV0b1JlZmVyc2hEaXNhYmxlZCgpXG4gICAgICAgIH0pLFxuICAgICAgICBkYXRhcG9pbnRzOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobmV3IEFycmF5PEtQSURldGFpbHM+KCksIFtcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpLFxuICAgICAgICAgIG1pbk9uZURhdGFwb2ludEFjdGl2ZSgpXG4gICAgICAgIF0pLFxuICAgICAgICBnbG9iYWxEYXRlU2VsZWN0b3I6IG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgICBpc0xlZ2FjeVdpZGdldFxuICAgICAgICAgICAgPyB0aGlzLmRldGVybWluZUdsb2JhbERhdGVTZWxlY3RvclZhbHVlRm9yTGVnYWN5V2lkZ2V0KClcbiAgICAgICAgICAgIDogdGhpcy5ERUZBVUxUX0RBVEVfU0VMRUNUT1JfVkFMVUVcbiAgICAgICAgKSxcbiAgICAgICAgZGF0ZUZyb206IG5ldyBGb3JtQ29udHJvbChkYXRlRnJvbSksXG4gICAgICAgIGRhdGVUbzogbmV3IEZvcm1Db250cm9sKGRhdGVUbyksXG4gICAgICAgIGRlY2ltYWxQbGFjZXM6IFtcbiAgICAgICAgICAyLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgICBWYWxpZGF0b3JzLm1pbih0aGlzLmRlY2ltYWxMaW1pdHMubnVtYmVyT2ZEZWNpbWFsUGxhY2VzTWluKSxcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KHRoaXMuZGVjaW1hbExpbWl0cy5udW1iZXJPZkRlY2ltYWxQbGFjZXNNYXgpLFxuICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0rJCcpXG4gICAgICAgICAgXVxuICAgICAgICBdLFxuICAgICAgICBpbnRlcnZhbDogbmV3IEZvcm1Db250cm9sKHRoaXMuREVGQVVMVF9JTlRFUlZBTF9WQUxVRSBhcyBUaW1lUmFuZ2VJbnRlcnZhbCksXG4gICAgICAgIGlzQXV0b1JlZnJlc2hFbmFibGVkOiBpc0xlZ2FjeVdpZGdldCA/IHRoaXMuY29uZmlnLnJlYWx0aW1lIDogW3RydWVdLFxuICAgICAgICByZWZyZXNoSW50ZXJ2YWw6IG5ldyBGb3JtQ29udHJvbCh7XG4gICAgICAgICAgdmFsdWU6IERFRkFVTFRfQ09VTlRET1dOX1ZBTFVFLFxuICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmlzQXV0b1JlZmVyc2hEaXNhYmxlZCgpXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgeyB2YWxpZGF0b3JzOiBkYXRlUmFuZ2VWYWxpZGF0b3IgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZUdsb2JhbERhdGVTZWxlY3RvclZhbHVlRm9yTGVnYWN5V2lkZ2V0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBkaXNwbGF5RGF0ZVNlbGVjdGlvbiwgd2lkZ2V0SW5zdGFuY2VHbG9iYWxBdXRvUmVmcmVzaENvbnRleHQgfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgLy8gU3RhdGUgb2Ygd2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dCB3YXMgY29udmVydGVkIHRvIHdpZGdldEluc3RhbmNlR2xvYmFsQXV0b1JlZnJlc2hDb250ZXh0LlxuICAgIC8vIFRoYXQgaXMgd2h5IGl0IHVzZSBoZXJlIGluIGEgbGVnYWN5IHdpZGdldCBjb250ZXh0LlxuICAgIGlmICh3aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dCkge1xuICAgICAgcmV0dXJuIERBVEVfU0VMRUNUSU9OX1ZBTFVFUy5kYXNoYm9hcmRfY29udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGxheURhdGVTZWxlY3Rpb25cbiAgICAgID8gREFURV9TRUxFQ1RJT05fVkFMVUVTLnZpZXdfYW5kX2NvbmZpZ1xuICAgICAgOiBEQVRFX1NFTEVDVElPTl9WQUxVRVMuY29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0F1dG9SZWZlcnNoRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNJbml0aWFsV2lkZ2V0Q3JlYXRpb24gPVxuICAgICAgT2JqZWN0LmtleXModGhpcy5jb25maWcpLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmNvbmZpZ1snc2V0dGluZ3MnXTtcblxuICAgIGlmIChpc0luaXRpYWxXaWRnZXRDcmVhdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTGVnYWN5V2lkZ2V0UmVhbHRpbWVOb3RBY3RpdmUgPVxuICAgICAgIXRoaXMuY29uZmlnLnJlYWx0aW1lICYmXG4gICAgICAhdGhpcy5jb25maWcuaGFzT3duUHJvcGVydHkoJ2RlY2ltYWxQbGFjZXMnKSAmJlxuICAgICAgIXRoaXMuY29uZmlnLmhhc093blByb3BlcnR5KCdyZWZyZXNoSW50ZXJ2YWwnKSAmJlxuICAgICAgIXRoaXMuY29uZmlnLmhhc093blByb3BlcnR5KCdpc0F1dG9SZWZyZXNoRW5hYmxlZCcpO1xuXG4gICAgaWYgKGlzTGVnYWN5V2lkZ2V0UmVhbHRpbWVOb3RBY3RpdmUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhdGhpcy5jb25maWcuaXNBdXRvUmVmcmVzaEVuYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjaGFuZ2VzIHRvIHRoZSBhdXRvLXJlZnJlc2ggdG9nZ2xlIGNvbnRyb2wgYW5kIHVwZGF0ZXMgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wgYWNjb3JkaW5nbHkuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIHN1YnNjcmliZXMgdG8gdGhlIHZhbHVlIGNoYW5nZXMgb2YgdGhlIGF1dG8tcmVmcmVzaCB0b2dnbGUgZm9ybSBjb250cm9sLlxuICAgKiBXaGVuIGF1dG8tcmVmcmVzaCBpcyBlbmFibGVkLCB0aGUgYWdncmVnYXRpb24gY29udHJvbCdzIHZhbHVlIGlzIHNldCB0byAnbm9uZScgYW5kIHRoZSBjb250cm9sIGlzXG4gICAqIHZpc3VhbGx5IGRpc2FibGVkIChidXQgbm90IHByb2dyYW1tYXRpY2FsbHkgZGlzYWJsZWQgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBzYXZlZCkuXG4gICAqIFdoZW4gYXV0by1yZWZyZXNoIGlzIGRpc2FibGVkLCB0aGUgYWdncmVnYXRpb24gY29udHJvbCBpcyBlbmFibGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVBdXRvUmVmcmVzaFRvZ2dsZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuaXNBdXRvUmVmcmVzaEVuYWJsZWQudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChpc0F1dG9SZWZyZXNoRW5hYmxlZDogYm9vbGVhbikgPT4ge1xuICAgICAgICBjb25zdCBhZ2dyZWdhdGlvbkNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hZ2dyZWdhdGlvbjtcbiAgICAgICAgaWYgKGlzQXV0b1JlZnJlc2hFbmFibGVkKSB7XG4gICAgICAgICAgYWdncmVnYXRpb25Db250cm9sLnNldFZhbHVlKEFHR1JFR0FUSU9OX1ZBTFVFUy5ub25lKTtcbiAgICAgICAgICAvLyBEbyBub3QgZGlzYWJsZSB0aGUgY29udHJvbCBwcm9ncmFtbWF0aWNhbGx5IHRvIGVuc3VyZSB0aGUgdmFsdWUgaXMgc2F2ZWQuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWdncmVnYXRpb25Db250cm9sLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNoYW5nZXMgaW4gdGhlIGludGVydmFsIHNlbGVjdG9yIGZvcm0gY29udHJvbC5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlSW50ZXJ2YWxTZWxlY3RvckNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuaW50ZXJ2YWwudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZEludGVydmFsOiBUaW1lUmFuZ2VJbnRlcnZhbCkgPT4ge1xuICAgICAgICBpZiAoc2VsZWN0ZWRJbnRlcnZhbCA9PT0gVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMuY3VzdG9tKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlTm9uQ3VzdG9tSW50ZXJ2YWwoc2VsZWN0ZWRJbnRlcnZhbCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTm9uQ3VzdG9tSW50ZXJ2YWwoc2VsZWN0ZWRJbnRlcnZhbDogVGltZVJhbmdlSW50ZXJ2YWwpOiB2b2lkIHtcbiAgICB0aGlzLmlzSW50ZXJ2YWxTZWxlY3RvckNoYW5nZWRQcm9ncmFtbWF0aWNhbGx5ID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZShzZWxlY3RlZEludGVydmFsKTtcbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkQWdncmVnYXRpb25PcHRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVBZ2dyZWdhdGlvbklmQXV0b1JlZnJlc2hEaXNhYmxlZChzZWxlY3RlZEludGVydmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0ZVJhbmdlKHNlbGVjdGVkSW50ZXJ2YWw6IFRpbWVSYW5nZUludGVydmFsKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZVJhbmdlOiBEYXRlUmFuZ2UgPSB0aGlzLmRhdGFwb2ludHNUYWJsZVNlcnZpY2UuY2FsY3VsYXRlRGF0ZVJhbmdlKHNlbGVjdGVkSW50ZXJ2YWwpO1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVUby5zZXRWYWx1ZShkYXRlUmFuZ2UuZGF0ZVRvKTtcblxuICAgIC8vIE1UTS02MTM1MVxuICAgIC8vIFVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gcXVldWUgdGhlIGRhdGVGcm9tIHVwZGF0ZS5cbiAgICAvLyBUaGlzIHByZXZlbnRzIHRpbWluZyBpc3N1ZXMgd2hlcmUgcmFwaWQgc2V0VmFsdWUgY2FsbHMgbWlnaHRcbiAgICAvLyBjYXVzZSB0aGUgdmlldyB0byBnbyBvdXQgb2Ygc3luYyB3aXRoIGZvcm0gY29udHJvbCB2YWx1ZXMsXG4gICAgLy8gZXNwZWNpYWxseSBkdXJpbmcgdGhlIGZpcnN0IGNoYW5nZSBhZnRlciBpbml0aWFsaXphdGlvbi5cbiAgICAvLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgIC8qKlxuICAgICAqIFdpdGhvdXQgdGhpcyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgb3Igc2V0VGltZW91dCwgZGF0ZUZyb20gd29uJ3QgY2hhbmdlIHRvIGEgY29ycmVjdCB2YWx1ZSBhZnRlciBmaXJzdCBzZWxlY3RvciBjaGFuZ2UuXG4gICAgICogV2hlbiBmb3JtIGlzIHNhdmVkIGl0IHNhdmVzIHdpdGggYSBjb3JyZWN0IHZhbHVlLCBldmVuIHdpdGhvdXQgd2l0aCB0aGlzIGZpeC5cbiAgICAgKiBIb3cgdG8gcmVwcm9kdWNlOlxuICAgICAqIDEuIHNldCBkYXRlIHZhbHVlcyB0byBlLmcuOiAwMS4wNS4yMDI0LTMwLjA1LjIwMjQgYW5kIHNhdmUgaXRcbiAgICAgKiAyLiByZW9wZW4gYSBjb25maWcgYW5kIHN3aXRjaCBpbnRlcnZhbCB0byBsYXN0IG1vbnRoXG4gICAgICovXG4gICAgLy8gVGhpcyBmaXggYnJha2VzIGEgbG9naWMgYmVoaW5kIGRpc2FibGluZyBub24gYXZhaWxhYmxlIGFnZ3JlZ2F0aW9ucy5cbiAgICAvLyBGb3JtIHdpbGwgYmUgc3RpbGwgc2F2ZWQgd2l0aCBjb3JyZWN0IGRhdGUgdmFsdWUsIG9ubHkgdmlldyBpcyBvdXQgb2YgYSBzeW5jLlxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVGcm9tLnNldFZhbHVlKGRhdGVSYW5nZS5kYXRlRnJvbSk7XG4gICAgdGhpcy5pc0ludGVydmFsU2VsZWN0b3JDaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSA9IGZhbHNlO1xuICAgIC8vIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZS51cGRhdGVEaXNhYmxlZFN0YXRlT2ZBZ2dyZWdhdGlvbk9wdGlvbkVudHJpZXMoXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVGcm9tLnZhbHVlLFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5kYXRlVG8udmFsdWUsXG4gICAgICAgIEFHR1JFR0FUSU9OX1ZBTFVFU19BUlJcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUFnZ3JlZ2F0aW9uSWZBdXRvUmVmcmVzaERpc2FibGVkKHNlbGVjdGVkSW50ZXJ2YWw6IFRpbWVSYW5nZUludGVydmFsKTogdm9pZCB7XG4gICAgY29uc3QgaXNBdXRvUmVmcmVzaERpc2FibGVkID0gIXRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmlzQXV0b1JlZnJlc2hFbmFibGVkLnZhbHVlO1xuICAgIGlmIChpc0F1dG9SZWZyZXNoRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2V0QWdncmVnYXRpb25WYWx1ZShzZWxlY3RlZEludGVydmFsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEFnZ3JlZ2F0aW9uVmFsdWUoaW50ZXJ2YWw6IFRpbWVSYW5nZUludGVydmFsKTogdm9pZCB7XG4gICAgY29uc3QgYWdncmVnYXRpb25Db250cm9sID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHMuYWdncmVnYXRpb247XG5cbiAgICBjb25zdCBuZXdBZ2dyZWdhdGlvblZhbHVlID1cbiAgICAgIHRoaXMuZGF0YXBvaW50c1RhYmxlQ29uZmlnU2VydmljZS5kZXRlcm1pbmVBZ2dyZWdhdGlvblZhbHVlKGludGVydmFsKTtcbiAgICBhZ2dyZWdhdGlvbkNvbnRyb2wuc2V0VmFsdWUobmV3QWdncmVnYXRpb25WYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjaGFuZ2VzIGluIHRoZSBkYXRlIHNlbGVjdG9yIGZvcm0gY29udHJvbC5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlRGF0ZVNlbGVjdG9yQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBtZXJnZShcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVGcm9tLnZhbHVlQ2hhbmdlcyxcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmRhdGVUby52YWx1ZUNoYW5nZXNcbiAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuaGFuZGxlRGF0ZUNoYW5nZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGF0ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0ludGVydmFsU2VsZWN0b3JDaGFuZ2VkUHJvZ3JhbW1hdGljYWxseSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmludGVydmFsO1xuICAgIGlmIChpbnRlcnZhbENvbnRyb2wudmFsdWUgPT09IFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLmN1c3RvbSkge1xuICAgICAgdGhpcy5oYW5kbGVDdXN0b21JbnRlcnZhbERhdGVDaGFuZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRJbnRlcnZhbFRvQ3VzdG9tKGludGVydmFsQ29udHJvbCk7XG4gICAgfVxuICAgIHRoaXMuc2V0VG9GaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uT3B0aW9uSWZDdXJyZW50QWdncmVnYXRpb25Jc0Rpc2FibGVkKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUN1c3RvbUludGVydmFsRGF0ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZURpc2FibGVkQWdncmVnYXRpb25PcHRpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEludGVydmFsVG9DdXN0b20oaW50ZXJ2YWxDb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB2b2lkIHtcbiAgICBpbnRlcnZhbENvbnRyb2wuc2V0VmFsdWUoVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMuY3VzdG9tKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNoYW5nZXMgaW4gdGhlIGdsb2JhbCBkYXRlIHNlbGVjdG9yIGZvcm0gY29udHJvbC5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlR2xvYmFsRGF0ZVNlbGVjdG9yQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5nbG9iYWxEYXRlU2VsZWN0b3IudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChzZWxlY3RlZCA9PT0gREFURV9TRUxFQ1RJT05fVkFMVUVTLmRhc2hib2FyZF9jb250ZXh0KSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVEYXNoYm9hcmRDb250ZXh0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVOb25EYXNoYm9hcmRDb250ZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEYXNoYm9hcmRDb250ZXh0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNXaWRnZXRMaW5rZWRUb0dsb2JhbFRpbWVDb250ZXh0ID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTm9uRGFzaGJvYXJkQ29udGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzV2lkZ2V0TGlua2VkVG9HbG9iYWxUaW1lQ29udGV4dCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuaXNDb25maWdTYXZlZFdpdGhvdXREYXNoYm9hcmRUaW1lT3B0aW9uKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUFnZ3JlZ2F0aW9uSWZOZWNlc3NhcnkoKTtcbiAgICB0aGlzLnNldEludGVydmFsVG9DdXN0b20odGhpcy5mb3JtR3JvdXAuY29udHJvbHMuaW50ZXJ2YWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbmZpZ1NhdmVkV2l0aG91dERhc2hib2FyZFRpbWVPcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmNvbmZpZy53aWRnZXRJbnN0YW5jZUdsb2JhbEF1dG9SZWZyZXNoQ29udGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQWdncmVnYXRpb25JZk5lY2Vzc2FyeSgpOiB2b2lkIHtcbiAgICBjb25zdCBhZ2dyZWdhdGlvbkNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scy5hZ2dyZWdhdGlvbjtcbiAgICBjb25zdCBpc0Rhc2hib2FyZFRpbWVPcHRpb25TZXRBZ2dyZWdhdGlvblRvTnVsbCA9ICFhZ2dyZWdhdGlvbkNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAoaXNEYXNoYm9hcmRUaW1lT3B0aW9uU2V0QWdncmVnYXRpb25Ub051bGwpIHtcbiAgICAgIGFnZ3JlZ2F0aW9uQ29udHJvbC5zZXRWYWx1ZShBR0dSRUdBVElPTl9WQUxVRVMubm9uZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wgdG8gdGhlIGZpcnN0IGF2YWlsYWJsZSAobm9uLWRpc2FibGVkKSBvcHRpb24gaWYgdGhlIGN1cnJlbnQgb3B0aW9uIGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZDpcbiAgICogLSBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGFnZ3JlZ2F0aW9uIGNvbnRyb2wuXG4gICAqIC0gQ2hlY2tzIGlmIHRoZSBjdXJyZW50IGFnZ3JlZ2F0aW9uIG9wdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogLSBJZiB0aGUgY3VycmVudCBvcHRpb24gaXMgZGlzYWJsZWQsIHNldHMgdGhlIGNvbnRyb2wgdG8gdGhlIGZpcnN0IGF2YWlsYWJsZSAobm9uLWRpc2FibGVkKSBvcHRpb24gYmFzZWQgb24gdGhlIGZvbGxvd2luZyBvcmRlcjpcbiAgICogICAtIElmIHRoZSBjdXJyZW50IHZhbHVlIGlzIGBEQUlMWWAsIGl0IHN3aXRjaGVzIHRvIGBIT1VSTFlgIGlmIGl0J3Mgbm90IGRpc2FibGVkLCBvdGhlcndpc2UgdG8gYE1JTlVURUxZYCBpZiBgSE9VUkxZYCBpcyBhbHNvIGRpc2FibGVkLlxuICAgKiAgIC0gSWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYEhPVVJMWWAsIGl0IHN3aXRjaGVzIHRvIGBNSU5VVEVMWWAgaWYgaXQncyBub3QgZGlzYWJsZWQuXG4gICAqICAgLSBJZiBhbGwgb3B0aW9ucyBhcmUgZGlzYWJsZWQsIGl0IHNldHMgdGhlIHZhbHVlIHRvIGBOT05FYC5cbiAgICpcbiAgICogVGhlIGRpc2FibGVkIHN0YXRlIGlzIHN0b3JlZCBpbiB0aGUgYGRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zYCBvYmplY3QsXG4gICAqIHdoZXJlIHRoZSBrZXkgaXMgdGhlIGFnZ3JlZ2F0aW9uIHZhbHVlIGFuZCB0aGUgdmFsdWUgaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBUaGUgYEFHR1JFR0FUSU9OX1ZBTFVFU2Agb2JqZWN0IGRlZmluZXMgdGhlIHBvc3NpYmxlIGFnZ3JlZ2F0aW9uIHZhbHVlcy5cbiAgICovXG4gIC8vIFRPRE8gc2FtZSBtZXRob2QgaXMgaW4gZGF0YXBvaW50cyBleHBvcnQgY29tcG9uZW50LiBDb25zaWRlciBtb3ZpbmcgaXQgdG8gYSBzaGFyZWQgc2VydmljZSB3aGVuIERQVCB3aWxsIGJlIGludGVncmF0aW5nIHdpdGggTVRNLTU5Njg5LlxuICAvLyBUT0RPICdkZXRlcm1pbmVOZXdBZ2dyZWdhdGlvblZhbHVlJyB3aWxsIGJlIGEgc2hhcmVkIG1ldGhvZC5cbiAgLy8gSW50ZWdyYXRpb24gdGFzazogTVRNLTYwMjIxXG4gIHByaXZhdGUgc2V0VG9GaXJzdEF2YWlsYWJsZUFnZ3JlZ2F0aW9uT3B0aW9uSWZDdXJyZW50QWdncmVnYXRpb25Jc0Rpc2FibGVkKCk6IHZvaWQge1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uQ29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLmFnZ3JlZ2F0aW9uO1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGFnZ3JlZ2F0aW9uQ29udHJvbC52YWx1ZTtcblxuICAgIGNvbnN0IG5ld0FnZ3JlZ2F0aW9uVmFsdWUgPSB0aGlzLmRhdGFwb2ludHNUYWJsZUNvbmZpZ1NlcnZpY2UuZGV0ZXJtaW5lTmV3QWdncmVnYXRpb25WYWx1ZShcbiAgICAgIGN1cnJlbnRWYWx1ZSxcbiAgICAgIHRoaXMuZGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYgKG5ld0FnZ3JlZ2F0aW9uVmFsdWUgIT09IGN1cnJlbnRWYWx1ZSkge1xuICAgICAgYWdncmVnYXRpb25Db250cm9sLnNldFZhbHVlKG5ld0FnZ3JlZ2F0aW9uVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQWdncmVnYXRpb25Qcm9wZXJ0eShjb25maWc6IERhdGFwb2ludHNUYWJsZUNvbmZpZyk6IHZvaWQge1xuICAgIGRlbGV0ZSB0aGlzLmZvcm1Hcm91cC52YWx1ZS5hZ2dyZWdhdGlvbjtcbiAgICBkZWxldGUgY29uZmlnLmFnZ3JlZ2F0aW9uO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC1sLTI0IHAtci0yNFwiPlxuICA8Zm9ybVxuICAgIGNsYXNzPVwibm8tY2FyZC1jb250ZXh0XCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gID5cbiAgICA8IS0tIDxkYXRhcG9pbnRzLXNlbGVjdG9yPiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPCEtLSBnbG9iYWwtdGltZS1jb250ZXh0LXNlbGVjdG9yIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtLWItMCBwLWItMTYgc2VwYXJhdG9yLWJvdHRvbVwiPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBwLXQtNFwiXG4gICAgICAgICAgICBmb3I9XCJkYXRlU2VsZWN0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnRGF0ZSBzZWxlY3Rpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJwb3BvdmVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwb3BvdmVyVGVtcGxhdGU+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIENob29zZSBob3cgdG8gc2VsZWN0IGEgZGF0ZSByYW5nZSwgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZTpcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibS1sLTAgcC1sLTggbS10LTggbS1iLTBcIj5cbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICA8Yj5EYXNoYm9hcmQgdGltZSByYW5nZTo8L2I+XG4gICAgICAgICAgICAgICAgICByZXN0cmljdHMgZGF0ZSBzZWxlY3Rpb24gdG8gdGhlIGdsb2JhbCBkYXNoYm9hcmQgY29uZmlndXJhdGlvbiBvbmx5XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICA8Yj5XaWRnZXQgY29uZmlndXJhdGlvbjo8L2I+XG4gICAgICAgICAgICAgICAgICByZXN0cmljdHMgdGhlIGRhdGUgc2VsZWN0aW9uIG9ubHkgdG8gdGhlIHdpZGdldCBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICA8Yj5XaWRnZXQgYW5kIHdpZGdldCBjb25maWd1cmF0aW9uOjwvYj5cbiAgICAgICAgICAgICAgICAgIHJlc3RyaWN0cyB0aGUgZGF0ZSBzZWxlY3Rpb24gdG8gdGhlIHdpZGdldCB2aWV3IGFuZCB3aWRnZXQgY29uZmlndXJhdGlvbiBvbmx5XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC0xMlwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInRGF0ZSBzZWxlY3Rpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRGF0ZSBzZWxlY3Rpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgaWQ9XCJnbG9iYWxEYXRlU2VsZWN0b3JcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJnbG9iYWxEYXRlU2VsZWN0b3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGFTZWxlY3Rpb25WYWx1ZSBvZiBEQVRFX1NFTEVDVElPTl9WQUxVRVNfQVJSXCJcbiAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJkYXRhU2VsZWN0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgREFURV9TRUxFQ1RJT05fTEFCRUxTW2RhdGFTZWxlY3Rpb25WYWx1ZV0gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGM4eS1kYXRhcG9pbnQtc2VsZWN0aW9uLWxpc3RcbiAgICAgICAgICBjbGFzcz1cImJnLWluaGVyaXQgc2VwYXJhdG9yLXRvcCBwLXQtMTYgZC1ibG9ja1wiXG4gICAgICAgICAgbGlzdFRpdGxlPVwie3sgJ0RhdGEgcG9pbnRzJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgbmFtZT1cImRhdGFwb2ludHNcIlxuICAgICAgICAgIFtkZWZhdWx0Rm9ybU9wdGlvbnNdPVwiZGVmYXVsdEZvcm1PcHRpb25zXCJcbiAgICAgICAgICBbY29uZmlnXT1cImRhdGFwb2ludFNlbGVjdGlvbkNvbmZpZ1wiXG4gICAgICAgICAgW21pbkFjdGl2ZUNvdW50XT1cIjFcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRhdGFwb2ludHNcIlxuICAgICAgICA+PC9jOHktZGF0YXBvaW50LXNlbGVjdGlvbi1saXN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNXaWRnZXRMaW5rZWRUb0dsb2JhbFRpbWVDb250ZXh0XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgICA8IS0tIGludGVydmFsIHNlbGVjdG9yIC0tPlxuICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0XCI+XG4gICAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIHt7ICdBdXRvIHJlZnJlc2gnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscCBidG4taGVscC0tc21cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwiXG4gICAgICAgICAgICAgICAgICAgICdDaGFuZ2UgdGhlIHN0YXRlIG9mIGludGVydmFsIGF1dG9tYXRpYyByZWZyZXNoIGFuZCBzZXQgdGhlIHJlZnJlc2ggZnJlcXVlbmN5LidcbiAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgIDwvbGVnZW5kPlxuICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJtLWItMTYgZm9ybS1ncm91cC1zbVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTQgbS10LTggbS1iLTggYS1pLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInJlZnJlc2hUb2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJpc0F1dG9SZWZyZXNoRW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpc0F1dG9SZWZyZXNoRW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJlZnJlc2hJbnRlcnZhbENvbnRyb2woKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+e3sgJ0F1dG8gcmVmcmVzaCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1iLTBcIlxuICAgICAgICAgICAgICAgICAgICBmb3I9XCJyZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyAnSW50ZXJ2YWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImM4eS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC0xMlwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidSZWZyZXNoIGludGVydmFsIGluIHNlY29uZHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInJlZnJlc2hJbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZWZyZXNoSW50ZXJ2YWwgb2YgUkVGUkVTSF9JTlRFUlZBTF9WQUxVRVNfQVJSXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInJlZnJlc2hJbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3t7IHNlY29uZHMgfX0gcycgfCB0cmFuc2xhdGU6IHsgc2Vjb25kczogcmVmcmVzaEludGVydmFsIC8gMTAwMCB9IH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBkZWNpbWFsIGlucHV0IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIj5cbiAgICAgICAgICAgIDxsZWdlbmQ+XG4gICAgICAgICAgICAgIHt7ICdEZWNpbWFsIHBsYWNlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbGVnZW5kPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwicC10LThcIj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJkZWNpbWFsUGxhY2VzXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZWNpbWFsUGxhY2VzXCJcbiAgICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIGFnZ3JlZ2F0aW9uIHNlbGVjdG9yIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzV2lkZ2V0TGlua2VkVG9HbG9iYWxUaW1lQ29udGV4dFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0XCI+XG4gICAgICAgICAgICAgIDxsZWdlbmQ+XG4gICAgICAgICAgICAgICAge3sgJ0FnZ3JlZ2F0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2xlZ2VuZD5cbiAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwicC10LThcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIFNldHRpbmcgYmVsb3cgW2F0dHIuZGlzYWJsZWRdIGVuc3VyZXMgdGhhdCB0aGUgY29udHJvbCBpcyB2aXN1YWxseSBkaXNhYmxlZCBhbmQgdXNlciBpbnRlcmFjdGlvbiBpcyBwcmV2ZW50ZWQsXG4gICAgICAgICAgICAgICB3aGlsZSBzdGlsbCBhbGxvd2luZyB0aGUgdmFsdWUgdG8gYmUgdXBkYXRlZCBhbmQgc2F2ZWQgY29ycmVjdGx5IGluIHRoZSBmb3JtLlxuICAgICAgICAgICAgICAgVGhpcyBzb2x1dGlvbiBjb3ZlcnMgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIgZW5hYmxlcyBhdXRvLXJlZnJlc2gsIGluIHdoaWNoIGNhc2UgYWdncmVnYXRpb24gbXVzdCBiZSBzZXQgdG8gTk9ORS4gLS0+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtMTJcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FnZ3JlZ2F0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYWdncmVnYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZ2dyZWdhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImZvcm1Hcm91cC52YWx1ZS5pc0F1dG9SZWZyZXNoRW5hYmxlZCA/IHRydWUgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhZ2dyZWdhdGlvblZhbHVlIG9mIEFHR1JFR0FUSU9OX1ZBTFVFU19BUlJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cImFnZ3JlZ2F0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1thZ2dyZWdhdGlvblZhbHVlXVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBBR0dSRUdBVElPTl9MQUJFTFNbYWdncmVnYXRpb25WYWx1ZV0gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIHRpbWUgaW50ZXJ2YWwgc2VsZWN0b3IgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldFwiPlxuICAgICAgICAgICAgPGxlZ2VuZD5cbiAgICAgICAgICAgICAge3sgJ1RpbWUgaW50ZXJ2YWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2xlZ2VuZD5cbiAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cInAtdC04XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LTEyXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInSW50ZXJ2YWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwiaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGludGVydmFsVmFsdWUgb2YgSU5URVJWQUxfVkFMVUVTX0FSUlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cImludGVydmFsVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBUSU1FX1JBTkdFX0lOVEVSVkFMX0xBQkVMU1tpbnRlcnZhbFZhbHVlXSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBkYXRlIHBpY2tlcnMgLS0+XG4gICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIj5cbiAgICAgICAgPGxlZ2VuZD5cbiAgICAgICAgICB7eyAnRGF0ZSByYW5nZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9sZWdlbmQ+XG4gICAgICAgIDxjOHktZGF0ZS1yYW5nZS1waWNrZXI+PC9jOHktZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cbiJdfQ==