@c8y/ngx-components 1017.0.8 → 1017.0.9

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 (75) hide show
  1. package/esm2020/actility-device-registration/actility-device-registration.component.mjs +3 -3
  2. package/esm2020/context-dashboard/context-dashboard.component.mjs +3 -3
  3. package/esm2020/context-dashboard/dashboard-detail.component.mjs +3 -3
  4. package/esm2020/context-dashboard/device-info-dashboard/device-info-dashboard.component.mjs +43 -51
  5. package/esm2020/context-dashboard/widget-preview.component.mjs +3 -3
  6. package/esm2020/core/authentication/sms-challenge.component.mjs +3 -3
  7. package/esm2020/core/authentication/totp-challenge.component.mjs +3 -3
  8. package/esm2020/core/breadcrumb/breadcrumb-outlet.component.mjs +3 -3
  9. package/esm2020/core/dashboard/dashboard-child.component.mjs +3 -3
  10. package/esm2020/core/dashboard/widget-time-context.component.mjs +3 -3
  11. package/esm2020/core/data-grid/data-grid.component.mjs +3 -3
  12. package/esm2020/core/date-picker/date-picker.component.mjs +3 -3
  13. package/esm2020/core/drop-area/drop-area.component.mjs +3 -3
  14. package/esm2020/core/file-picker/file-picker.component.mjs +3 -3
  15. package/esm2020/core/header/application/app-switcher.component.mjs +3 -3
  16. package/esm2020/core/login/credentials.component.mjs +3 -3
  17. package/esm2020/core/login/login.component.mjs +3 -3
  18. package/esm2020/core/modal/modal.component.mjs +3 -3
  19. package/esm2020/core/select/typeahead.component.mjs +3 -3
  20. package/esm2020/device-grid/columns/alarms.cell-renderer.component.mjs +3 -3
  21. package/esm2020/loriot-device-registration/loriot-device-registration-button.component.mjs +3 -1
  22. package/esm2020/loriot-device-registration/loriot-device-registration.component.mjs +3 -3
  23. package/esm2020/operations/bulk-operations-list/bulk-operations-list.component.mjs +3 -3
  24. package/esm2020/operations/operations-list/operations-list-item.component.mjs +3 -3
  25. package/esm2020/operations/operations-list/operations-list.component.mjs +3 -3
  26. package/esm2020/register-device/bulk/bulk-device-registration-modal.component.mjs +3 -3
  27. package/esm2020/register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.mjs +3 -3
  28. package/esm2020/register-device/extensible/single/extensible-device-registration-modal.component.mjs +3 -3
  29. package/esm2020/register-device/general/general-device-registration.component.mjs +3 -3
  30. package/esm2020/repository/software/device-tab/device-software-list.component.mjs +3 -3
  31. package/esm2020/repository/software/device-tab/installed-software.component.mjs +3 -3
  32. package/esm2020/repository/software/list/add-software-modal.component.mjs +3 -3
  33. package/esm2020/sigfox-device-registration/sigfox-device-registration.component.mjs +3 -3
  34. package/fesm2015/c8y-ngx-components-actility-device-registration.mjs +2 -2
  35. package/fesm2015/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
  36. package/fesm2015/c8y-ngx-components-context-dashboard.mjs +48 -56
  37. package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  38. package/fesm2015/c8y-ngx-components-device-grid.mjs +2 -2
  39. package/fesm2015/c8y-ngx-components-device-grid.mjs.map +1 -1
  40. package/fesm2015/c8y-ngx-components-loriot-device-registration.mjs +4 -2
  41. package/fesm2015/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
  42. package/fesm2015/c8y-ngx-components-operations-bulk-operations-list.mjs +2 -2
  43. package/fesm2015/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
  44. package/fesm2015/c8y-ngx-components-operations-operations-list.mjs +4 -4
  45. package/fesm2015/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  46. package/fesm2015/c8y-ngx-components-register-device.mjs +8 -8
  47. package/fesm2015/c8y-ngx-components-register-device.mjs.map +1 -1
  48. package/fesm2015/c8y-ngx-components-repository-software.mjs +6 -6
  49. package/fesm2015/c8y-ngx-components-repository-software.mjs.map +1 -1
  50. package/fesm2015/c8y-ngx-components-sigfox-device-registration.mjs +2 -2
  51. package/fesm2015/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
  52. package/fesm2015/c8y-ngx-components.mjs +28 -28
  53. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  54. package/fesm2020/c8y-ngx-components-actility-device-registration.mjs +2 -2
  55. package/fesm2020/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
  56. package/fesm2020/c8y-ngx-components-context-dashboard.mjs +48 -56
  57. package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  58. package/fesm2020/c8y-ngx-components-device-grid.mjs +2 -2
  59. package/fesm2020/c8y-ngx-components-device-grid.mjs.map +1 -1
  60. package/fesm2020/c8y-ngx-components-loriot-device-registration.mjs +4 -2
  61. package/fesm2020/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
  62. package/fesm2020/c8y-ngx-components-operations-bulk-operations-list.mjs +2 -2
  63. package/fesm2020/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
  64. package/fesm2020/c8y-ngx-components-operations-operations-list.mjs +4 -4
  65. package/fesm2020/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  66. package/fesm2020/c8y-ngx-components-register-device.mjs +8 -8
  67. package/fesm2020/c8y-ngx-components-register-device.mjs.map +1 -1
  68. package/fesm2020/c8y-ngx-components-repository-software.mjs +6 -6
  69. package/fesm2020/c8y-ngx-components-repository-software.mjs.map +1 -1
  70. package/fesm2020/c8y-ngx-components-sigfox-device-registration.mjs +2 -2
  71. package/fesm2020/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
  72. package/fesm2020/c8y-ngx-components.mjs +28 -28
  73. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  74. package/locales/locales.pot +6 -9
  75. package/package.json +2 -2
@@ -128,10 +128,10 @@ export class DashboardDetailComponent {
128
128
  }
129
129
  }
130
130
  DashboardDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardDetailComponent, deps: [{ token: i1.BsModalRef }, { token: ICON_LIST }, { token: i2.ContextDashboardService }, { token: i3.NavigatorService }, { token: i3.Permissions }, { token: i4.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
131
- DashboardDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DashboardDetailComponent, selector: "c8y-dashboard-detail", viewQueries: [{ propertyName: "dashboardDetailForm", first: true, predicate: ["dashboardDetailForm"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header separator-bottom\">\n <h3 id=\"modal-title\">{{ titleAction | translate }}&nbsp;{{ titleName | translate }}</h3>\n </div>\n\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <div class=\"p-l-24 p-r-24\">\n <form #dashboardDetailForm=\"ngForm\" class=\"d-contents\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div *ngIf=\"!isNamedDashboard || isReport\">\n <div class=\"legend form-block\">\n <span>{{ 'General' | translate }}</span>\n </div>\n <div class=\"d-flex\">\n <c8y-form-group class=\"m-r-16\">\n <label class=\"d-block\">{{ 'Icon' | translate }}</label>\n <div dropdown class=\"dropdown\">\n <button\n title=\"{{ 'Icon' | translate }}\"\n type=\"button\"\n class=\"btn-default btn btn-gray\"\n dropdownToggle\n >\n <i c8yIcon=\"{{ dashboard.icon }}\"></i>\n <span class=\"caret\"></span>\n </button>\n <ul\n *dropdownMenu\n class=\"dropdown-menu modal-inner-scroll dropdown-menu-grid-4 m-l-0\"\n style=\"max-height: 250px\"\n >\n <ng-container *ngFor=\"let icon of filteredIcons\">\n <li (click)=\"selectIcon(icon)\">\n <a\n class=\"interact\"\n title=\"{{ icon }}\"\n [ngClass]=\"{ active: dashboard.icon === icon }\"\n >\n <i class=\"icon\" [c8yIcon]=\"icon\"></i>\n </a>\n </li>\n </ng-container>\n </ul>\n </div>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow\">\n <label>\n <span class=\"m-r-4\" id=\"menuLabel\">{{ 'Menu label' | translate }}</span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <input\n id=\"menuLabel\"\n type=\"text\"\n class=\"form-control\"\n name=\"name\"\n [(ngModel)]=\"dashboardName\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n maxlength=\"512\"\n required\n />\n </c8y-form-group>\n </div>\n <c8y-form-group *ngIf=\"isReport\">\n <label id=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n aria-labelledby=\"description\"\n class=\"form-control\"\n rows=\"2\"\n name=\"description\"\n [(ngModel)]=\"dashboard.description\"\n ></textarea>\n </c8y-form-group>\n <div class=\"row\">\n <div class=\"col-sm-6\" *ngIf=\"!isReport\">\n <c8y-form-group>\n <label for=\"positionNav\">\n <span class=\"m-r-4\" id=\"positionNav\">\n {{ 'Position in navigation' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n popover=\"{{\n 'Position in navigation menu (10000 first, -10000 last)' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <input\n id=\"positionNav\"\n type=\"number\"\n class=\"form-control\"\n name=\"priority\"\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"10000\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class=\"col-sm-6\" *ngIf=\"isReport\">\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label title=\"{{ 'Show in navigator' | translate }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"isNavigatorNode\"\n [(ngModel)]=\"!!dashboard.c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\" *ngIf=\"isReport\">\n <c8y-form-group>\n <label for=\"position\">\n <span class=\"m-r-4\">{{ 'Position in navigator' | translate }}</span>\n <ng-template #positionInNavPop>\n <span>\n {{\n 'Position in navigator (10001 first, -10000 last).' | translate\n }}&nbsp;\n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16\">\n <li *ngFor=\"let node of navigatorNodes$ | async\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"word-break m-l-4 m-r-16\">\n {{\n node.label.length > 15\n ? (node.label | slice: 0:15) + '...'\n : node.label\n }}\n </span>\n <span class=\"pull-right\">{{ node.priority }}</span>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n [popover]=\"positionInNavPop\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <input\n type=\"number\"\n for=\"position\"\n class=\"form-control\"\n name=\"priority\"\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"20000\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div *ngIf=\"!currentDashboard && deviceType\">\n <div class=\"form-group\">\n <label title=\"{{ applyToDevicesOfTypeTitle }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"deviceType\"\n [(ngModel)]=\"dashboard.deviceType\"\n [disabled]=\"!applyToDevicesOfTypePermitted\"\n />\n <span></span>\n <span\n class=\"m-r-4\"\n translate\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n >\n Apply dashboard to all devices of type\n <i>{{ type }}</i>\n </span>\n </label>\n </div>\n\n <div class=\"alert alert-info m-b-24\" *ngIf=\"isDeviceType\">\n <i c8y-icon=\"info\"></i>\n <span\n translate\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n >\n This dashboard is shared between all devices of the type\n <i>{{ type }}</i>\n .\n </span>\n </div>\n </div>\n </div>\n <c8y-dashboard-availability\n *ngIf=\"!!isReport === false\"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"dashboardDetailForm?.form?.markAsDirty()\"\n ></c8y-dashboard-availability>\n <c8y-appearance-settings\n [(themeClass)]=\"styling.themeClass\"\n [(headerClass)]=\"styling.headerClass\"\n ></c8y-appearance-settings>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n id=\"margin\"\n name=\"margin\"\n type=\"number\"\n class=\"form-control\"\n [(ngModel)]=\"dashboard.widgetMargin\"\n min=\"0\"\n max=\"50\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label translate>Widget titles</label>\n <label title=\"{{ 'Translate if possible' | translate }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"translateWidgetTitle\"\n [(ngModel)]=\"dashboard.translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-6\">\n <c8y-widget-preview\n [tab]=\"!isNamedDashboard ? dashboard : undefined\"\n [previewClasses]=\"getDashboardPreviewStyle()\"\n ></c8y-widget-preview>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"dashboardDetailForm.form.invalid || dashboardDetailForm.form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i3.MaxValidationDirective, selector: "[max]", inputs: ["max"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.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: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i6.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i7.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "directive", type: i8.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i8.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i8.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i9.AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: ["themeClass", "headerClass", "defaultThemeClass", "defaultHeaderClass", "possibleStylingTheme", "possibleStylingHeader"], outputs: ["themeClassChange", "headerClassChange"] }, { kind: "component", type: i10.WidgetPreviewComponent, selector: "c8y-widget-preview", inputs: ["previewClasses", "tab"] }, { kind: "component", type: i11.DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: ["globalRolesIds"], outputs: ["globalRolesIdsChange"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.SlicePipe, name: "slice" }] });
131
+ DashboardDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DashboardDetailComponent, selector: "c8y-dashboard-detail", viewQueries: [{ propertyName: "dashboardDetailForm", first: true, predicate: ["dashboardDetailForm"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header separator-bottom\">\n <h3 id=\"modal-title\">{{ titleAction | translate }}&nbsp;{{ titleName | translate }}</h3>\n </div>\n\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <div class=\"p-l-24 p-r-24\">\n <form #dashboardDetailForm=\"ngForm\" class=\"d-contents\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div *ngIf=\"!isNamedDashboard || isReport\">\n <div class=\"legend form-block\">\n <span>{{ 'General' | translate }}</span>\n </div>\n <div class=\"d-flex\">\n <c8y-form-group class=\"m-r-16\">\n <label class=\"d-block\">{{ 'Icon' | translate }}</label>\n <div dropdown class=\"dropdown\">\n <button\n title=\"{{ 'Icon' | translate }}\"\n type=\"button\"\n class=\"btn-default btn btn-gray\"\n aria-haspopup=\"true\"\n dropdownToggle\n >\n <i c8yIcon=\"{{ dashboard.icon }}\"></i>\n <span class=\"caret\"></span>\n </button>\n <ul\n *dropdownMenu\n class=\"dropdown-menu modal-inner-scroll dropdown-menu-grid-4 m-l-0\"\n style=\"max-height: 250px\"\n >\n <ng-container *ngFor=\"let icon of filteredIcons\">\n <li (click)=\"selectIcon(icon)\">\n <a\n class=\"interact\"\n title=\"{{ icon }}\"\n [ngClass]=\"{ active: dashboard.icon === icon }\"\n >\n <i class=\"icon\" [c8yIcon]=\"icon\"></i>\n </a>\n </li>\n </ng-container>\n </ul>\n </div>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow\">\n <label>\n <span class=\"m-r-4\" id=\"menuLabel\">{{ 'Menu label' | translate }}</span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <input\n id=\"menuLabel\"\n type=\"text\"\n class=\"form-control\"\n name=\"name\"\n [(ngModel)]=\"dashboardName\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n maxlength=\"512\"\n required\n />\n </c8y-form-group>\n </div>\n <c8y-form-group *ngIf=\"isReport\">\n <label id=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n aria-labelledby=\"description\"\n class=\"form-control\"\n rows=\"2\"\n name=\"description\"\n [(ngModel)]=\"dashboard.description\"\n ></textarea>\n </c8y-form-group>\n <div class=\"row\">\n <div class=\"col-sm-6\" *ngIf=\"!isReport\">\n <c8y-form-group>\n <label for=\"positionNav\">\n <span class=\"m-r-4\" id=\"positionNav\">\n {{ 'Position in navigation' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n popover=\"{{\n 'Position in navigation menu (10000 first, -10000 last)' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <input\n id=\"positionNav\"\n type=\"number\"\n class=\"form-control\"\n name=\"priority\"\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"10000\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class=\"col-sm-6\" *ngIf=\"isReport\">\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label title=\"{{ 'Show in navigator' | translate }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"isNavigatorNode\"\n [(ngModel)]=\"!!dashboard.c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\" *ngIf=\"isReport\">\n <c8y-form-group>\n <label for=\"position\">\n <span class=\"m-r-4\">{{ 'Position in navigator' | translate }}</span>\n <ng-template #positionInNavPop>\n <span>\n {{\n 'Position in navigator (10001 first, -10000 last).' | translate\n }}&nbsp;\n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16\">\n <li *ngFor=\"let node of navigatorNodes$ | async\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"word-break m-l-4 m-r-16\">\n {{\n node.label.length > 15\n ? (node.label | slice: 0:15) + '...'\n : node.label\n }}\n </span>\n <span class=\"pull-right\">{{ node.priority }}</span>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n [popover]=\"positionInNavPop\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <input\n type=\"number\"\n for=\"position\"\n class=\"form-control\"\n name=\"priority\"\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"20000\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div *ngIf=\"!currentDashboard && deviceType\">\n <div class=\"form-group\">\n <label title=\"{{ applyToDevicesOfTypeTitle }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"deviceType\"\n [(ngModel)]=\"dashboard.deviceType\"\n [disabled]=\"!applyToDevicesOfTypePermitted\"\n />\n <span></span>\n <span\n class=\"m-r-4\"\n translate\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n >\n Apply dashboard to all devices of type\n <i>{{ type }}</i>\n </span>\n </label>\n </div>\n\n <div class=\"alert alert-info m-b-24\" *ngIf=\"isDeviceType\">\n <i c8y-icon=\"info\"></i>\n <span\n translate\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n >\n This dashboard is shared between all devices of the type\n <i>{{ type }}</i>\n .\n </span>\n </div>\n </div>\n </div>\n <c8y-dashboard-availability\n *ngIf=\"!!isReport === false\"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"dashboardDetailForm?.form?.markAsDirty()\"\n ></c8y-dashboard-availability>\n <c8y-appearance-settings\n [(themeClass)]=\"styling.themeClass\"\n [(headerClass)]=\"styling.headerClass\"\n ></c8y-appearance-settings>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n id=\"margin\"\n name=\"margin\"\n type=\"number\"\n class=\"form-control\"\n [(ngModel)]=\"dashboard.widgetMargin\"\n min=\"0\"\n max=\"50\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label translate>Widget titles</label>\n <label title=\"{{ 'Translate if possible' | translate }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"translateWidgetTitle\"\n [(ngModel)]=\"dashboard.translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-6\">\n <c8y-widget-preview\n [tab]=\"!isNamedDashboard ? dashboard : undefined\"\n [previewClasses]=\"getDashboardPreviewStyle()\"\n ></c8y-widget-preview>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"dashboardDetailForm.form.invalid || dashboardDetailForm.form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i3.MaxValidationDirective, selector: "[max]", inputs: ["max"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.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: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i6.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i7.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "directive", type: i8.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i8.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i8.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i9.AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: ["themeClass", "headerClass", "defaultThemeClass", "defaultHeaderClass", "possibleStylingTheme", "possibleStylingHeader"], outputs: ["themeClassChange", "headerClassChange"] }, { kind: "component", type: i10.WidgetPreviewComponent, selector: "c8y-widget-preview", inputs: ["previewClasses", "tab"] }, { kind: "component", type: i11.DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: ["globalRolesIds"], outputs: ["globalRolesIdsChange"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.SlicePipe, name: "slice" }] });
132
132
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardDetailComponent, decorators: [{
133
133
  type: Component,
134
- args: [{ selector: 'c8y-dashboard-detail', template: "<div class=\"viewport-modal\">\n <div class=\"modal-header separator-bottom\">\n <h3 id=\"modal-title\">{{ titleAction | translate }}&nbsp;{{ titleName | translate }}</h3>\n </div>\n\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <div class=\"p-l-24 p-r-24\">\n <form #dashboardDetailForm=\"ngForm\" class=\"d-contents\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div *ngIf=\"!isNamedDashboard || isReport\">\n <div class=\"legend form-block\">\n <span>{{ 'General' | translate }}</span>\n </div>\n <div class=\"d-flex\">\n <c8y-form-group class=\"m-r-16\">\n <label class=\"d-block\">{{ 'Icon' | translate }}</label>\n <div dropdown class=\"dropdown\">\n <button\n title=\"{{ 'Icon' | translate }}\"\n type=\"button\"\n class=\"btn-default btn btn-gray\"\n dropdownToggle\n >\n <i c8yIcon=\"{{ dashboard.icon }}\"></i>\n <span class=\"caret\"></span>\n </button>\n <ul\n *dropdownMenu\n class=\"dropdown-menu modal-inner-scroll dropdown-menu-grid-4 m-l-0\"\n style=\"max-height: 250px\"\n >\n <ng-container *ngFor=\"let icon of filteredIcons\">\n <li (click)=\"selectIcon(icon)\">\n <a\n class=\"interact\"\n title=\"{{ icon }}\"\n [ngClass]=\"{ active: dashboard.icon === icon }\"\n >\n <i class=\"icon\" [c8yIcon]=\"icon\"></i>\n </a>\n </li>\n </ng-container>\n </ul>\n </div>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow\">\n <label>\n <span class=\"m-r-4\" id=\"menuLabel\">{{ 'Menu label' | translate }}</span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <input\n id=\"menuLabel\"\n type=\"text\"\n class=\"form-control\"\n name=\"name\"\n [(ngModel)]=\"dashboardName\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n maxlength=\"512\"\n required\n />\n </c8y-form-group>\n </div>\n <c8y-form-group *ngIf=\"isReport\">\n <label id=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n aria-labelledby=\"description\"\n class=\"form-control\"\n rows=\"2\"\n name=\"description\"\n [(ngModel)]=\"dashboard.description\"\n ></textarea>\n </c8y-form-group>\n <div class=\"row\">\n <div class=\"col-sm-6\" *ngIf=\"!isReport\">\n <c8y-form-group>\n <label for=\"positionNav\">\n <span class=\"m-r-4\" id=\"positionNav\">\n {{ 'Position in navigation' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n popover=\"{{\n 'Position in navigation menu (10000 first, -10000 last)' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <input\n id=\"positionNav\"\n type=\"number\"\n class=\"form-control\"\n name=\"priority\"\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"10000\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class=\"col-sm-6\" *ngIf=\"isReport\">\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label title=\"{{ 'Show in navigator' | translate }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"isNavigatorNode\"\n [(ngModel)]=\"!!dashboard.c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\" *ngIf=\"isReport\">\n <c8y-form-group>\n <label for=\"position\">\n <span class=\"m-r-4\">{{ 'Position in navigator' | translate }}</span>\n <ng-template #positionInNavPop>\n <span>\n {{\n 'Position in navigator (10001 first, -10000 last).' | translate\n }}&nbsp;\n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16\">\n <li *ngFor=\"let node of navigatorNodes$ | async\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"word-break m-l-4 m-r-16\">\n {{\n node.label.length > 15\n ? (node.label | slice: 0:15) + '...'\n : node.label\n }}\n </span>\n <span class=\"pull-right\">{{ node.priority }}</span>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n [popover]=\"positionInNavPop\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <input\n type=\"number\"\n for=\"position\"\n class=\"form-control\"\n name=\"priority\"\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"20000\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div *ngIf=\"!currentDashboard && deviceType\">\n <div class=\"form-group\">\n <label title=\"{{ applyToDevicesOfTypeTitle }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"deviceType\"\n [(ngModel)]=\"dashboard.deviceType\"\n [disabled]=\"!applyToDevicesOfTypePermitted\"\n />\n <span></span>\n <span\n class=\"m-r-4\"\n translate\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n >\n Apply dashboard to all devices of type\n <i>{{ type }}</i>\n </span>\n </label>\n </div>\n\n <div class=\"alert alert-info m-b-24\" *ngIf=\"isDeviceType\">\n <i c8y-icon=\"info\"></i>\n <span\n translate\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n >\n This dashboard is shared between all devices of the type\n <i>{{ type }}</i>\n .\n </span>\n </div>\n </div>\n </div>\n <c8y-dashboard-availability\n *ngIf=\"!!isReport === false\"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"dashboardDetailForm?.form?.markAsDirty()\"\n ></c8y-dashboard-availability>\n <c8y-appearance-settings\n [(themeClass)]=\"styling.themeClass\"\n [(headerClass)]=\"styling.headerClass\"\n ></c8y-appearance-settings>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n id=\"margin\"\n name=\"margin\"\n type=\"number\"\n class=\"form-control\"\n [(ngModel)]=\"dashboard.widgetMargin\"\n min=\"0\"\n max=\"50\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label translate>Widget titles</label>\n <label title=\"{{ 'Translate if possible' | translate }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"translateWidgetTitle\"\n [(ngModel)]=\"dashboard.translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-6\">\n <c8y-widget-preview\n [tab]=\"!isNamedDashboard ? dashboard : undefined\"\n [previewClasses]=\"getDashboardPreviewStyle()\"\n ></c8y-widget-preview>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"dashboardDetailForm.form.invalid || dashboardDetailForm.form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n" }]
134
+ args: [{ selector: 'c8y-dashboard-detail', template: "<div class=\"viewport-modal\">\n <div class=\"modal-header separator-bottom\">\n <h3 id=\"modal-title\">{{ titleAction | translate }}&nbsp;{{ titleName | translate }}</h3>\n </div>\n\n <div class=\"modal-inner-scroll\" id=\"modal-body\">\n <div class=\"p-l-24 p-r-24\">\n <form #dashboardDetailForm=\"ngForm\" class=\"d-contents\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div *ngIf=\"!isNamedDashboard || isReport\">\n <div class=\"legend form-block\">\n <span>{{ 'General' | translate }}</span>\n </div>\n <div class=\"d-flex\">\n <c8y-form-group class=\"m-r-16\">\n <label class=\"d-block\">{{ 'Icon' | translate }}</label>\n <div dropdown class=\"dropdown\">\n <button\n title=\"{{ 'Icon' | translate }}\"\n type=\"button\"\n class=\"btn-default btn btn-gray\"\n aria-haspopup=\"true\"\n dropdownToggle\n >\n <i c8yIcon=\"{{ dashboard.icon }}\"></i>\n <span class=\"caret\"></span>\n </button>\n <ul\n *dropdownMenu\n class=\"dropdown-menu modal-inner-scroll dropdown-menu-grid-4 m-l-0\"\n style=\"max-height: 250px\"\n >\n <ng-container *ngFor=\"let icon of filteredIcons\">\n <li (click)=\"selectIcon(icon)\">\n <a\n class=\"interact\"\n title=\"{{ icon }}\"\n [ngClass]=\"{ active: dashboard.icon === icon }\"\n >\n <i class=\"icon\" [c8yIcon]=\"icon\"></i>\n </a>\n </li>\n </ng-container>\n </ul>\n </div>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow\">\n <label>\n <span class=\"m-r-4\" id=\"menuLabel\">{{ 'Menu label' | translate }}</span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <input\n id=\"menuLabel\"\n type=\"text\"\n class=\"form-control\"\n name=\"name\"\n [(ngModel)]=\"dashboardName\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n maxlength=\"512\"\n required\n />\n </c8y-form-group>\n </div>\n <c8y-form-group *ngIf=\"isReport\">\n <label id=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n aria-labelledby=\"description\"\n class=\"form-control\"\n rows=\"2\"\n name=\"description\"\n [(ngModel)]=\"dashboard.description\"\n ></textarea>\n </c8y-form-group>\n <div class=\"row\">\n <div class=\"col-sm-6\" *ngIf=\"!isReport\">\n <c8y-form-group>\n <label for=\"positionNav\">\n <span class=\"m-r-4\" id=\"positionNav\">\n {{ 'Position in navigation' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n popover=\"{{\n 'Position in navigation menu (10000 first, -10000 last)' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <input\n id=\"positionNav\"\n type=\"number\"\n class=\"form-control\"\n name=\"priority\"\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"10000\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class=\"col-sm-6\" *ngIf=\"isReport\">\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label title=\"{{ 'Show in navigator' | translate }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"isNavigatorNode\"\n [(ngModel)]=\"!!dashboard.c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\" *ngIf=\"isReport\">\n <c8y-form-group>\n <label for=\"position\">\n <span class=\"m-r-4\">{{ 'Position in navigator' | translate }}</span>\n <ng-template #positionInNavPop>\n <span>\n {{\n 'Position in navigator (10001 first, -10000 last).' | translate\n }}&nbsp;\n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16\">\n <li *ngFor=\"let node of navigatorNodes$ | async\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"word-break m-l-4 m-r-16\">\n {{\n node.label.length > 15\n ? (node.label | slice: 0:15) + '...'\n : node.label\n }}\n </span>\n <span class=\"pull-right\">{{ node.priority }}</span>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n type=\"button\"\n [popover]=\"positionInNavPop\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n <i [c8yIcon]=\"'question-circle-o'\"></i>\n </button>\n </label>\n <input\n type=\"number\"\n for=\"position\"\n class=\"form-control\"\n name=\"priority\"\n [(ngModel)]=\"dashboard.priority\"\n min=\"-10000\"\n max=\"20000\"\n placeholder=\"{{ 'e.g.' | translate }} 500\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <div *ngIf=\"!currentDashboard && deviceType\">\n <div class=\"form-group\">\n <label title=\"{{ applyToDevicesOfTypeTitle }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"deviceType\"\n [(ngModel)]=\"dashboard.deviceType\"\n [disabled]=\"!applyToDevicesOfTypePermitted\"\n />\n <span></span>\n <span\n class=\"m-r-4\"\n translate\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n >\n Apply dashboard to all devices of type\n <i>{{ type }}</i>\n </span>\n </label>\n </div>\n\n <div class=\"alert alert-info m-b-24\" *ngIf=\"isDeviceType\">\n <i c8y-icon=\"info\"></i>\n <span\n translate\n [translateParams]=\"{ type: dashboard.deviceTypeValue }\"\n ngNonBindable\n >\n This dashboard is shared between all devices of the type\n <i>{{ type }}</i>\n .\n </span>\n </div>\n </div>\n </div>\n <c8y-dashboard-availability\n *ngIf=\"!!isReport === false\"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"dashboardDetailForm?.form?.markAsDirty()\"\n ></c8y-dashboard-availability>\n <c8y-appearance-settings\n [(themeClass)]=\"styling.themeClass\"\n [(headerClass)]=\"styling.headerClass\"\n ></c8y-appearance-settings>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n id=\"margin\"\n name=\"margin\"\n type=\"number\"\n class=\"form-control\"\n [(ngModel)]=\"dashboard.widgetMargin\"\n min=\"0\"\n max=\"50\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group class=\"p-b-24 m-b-0\">\n <label translate>Widget titles</label>\n <label title=\"{{ 'Translate if possible' | translate }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"translateWidgetTitle\"\n [(ngModel)]=\"dashboard.translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-6\">\n <c8y-widget-preview\n [tab]=\"!isNamedDashboard ? dashboard : undefined\"\n [previewClasses]=\"getDashboardPreviewStyle()\"\n ></c8y-widget-preview>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n class=\"btn btn-default\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"dashboardDetailForm.form.invalid || dashboardDetailForm.form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n" }]
135
135
  }], ctorParameters: function () { return [{ type: i1.BsModalRef }, { type: undefined, decorators: [{
136
136
  type: Inject,
137
137
  args: [ICON_LIST]
@@ -139,4 +139,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
139
139
  type: ViewChild,
140
140
  args: ['dashboardDetailForm', { static: true }]
141
141
  }] } });
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC9kYXNoYm9hcmQtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2Rhc2hib2FyZC1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsT0FBTyxFQUNQLFNBQVMsRUFFVCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixxQkFBcUIsRUFFdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU1qSCxNQUFNLE9BQU8sd0JBQXdCO0lBeUNuQyxZQUNVLEtBQWlCLEVBQ04sUUFBa0IsRUFDN0IsdUJBQWdELEVBQ2hELGdCQUFrQyxFQUNsQyxrQkFBK0IsRUFDL0IsZ0JBQWtDO1FBTGxDLFVBQUssR0FBTCxLQUFLLENBQVk7UUFFakIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHVCQUFrQixH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T0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQy9ELHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQ3hCLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUNoRSxxQkFBcUIsRUFDckIsU0FBUyxFQUNULElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUN6QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztxSEFuSlUsd0JBQXdCLDRDQTJDekIsU0FBUzt5R0EzQ1Isd0JBQXdCLHNNQzFCckMseTBZQXlTQTsyRkQvUWEsd0JBQXdCO2tCQUpwQyxTQUFTOytCQUNFLHNCQUFzQjs7MEJBOEM3QixNQUFNOzJCQUFDLFNBQVM7MEtBMUNpQyxtQkFBbUI7c0JBQXRFLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgZ2V0dGV4dCxcbiAgSUNPTl9MSVNULFxuICBOYXZpZ2F0b3JOb2RlLFxuICBOYXZpZ2F0b3JTZXJ2aWNlLFxuICBQZXJtaXNzaW9uc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIENvbnRleHREYXNoYm9hcmQsXG4gIERBU0hCT0FSRF9USEVNRV9DTEFTU0VTLFxuICBXSURHRVRfSEVBREVSX0NMQVNTRVMsXG4gIERhc2hib2FyZEdsb2JhbFJvbGVzXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUkVQT1JUX0RFRkFVTFRfTkFWSUdBVElPTl9OT0RFX1BSSU9SSVRZIH0gZnJvbSAnLi9yZXBvcnQtZGFzaGJvYXJkL3JlcG9ydC1kYXNoYm9hcmQtbmF2aWdhdGlvbi5mYWN0b3J5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhc2hib2FyZC1kZXRhaWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLWRldGFpbC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgnZGFzaGJvYXJkRGV0YWlsRm9ybScsIHsgc3RhdGljOiB0cnVlIH0pIGRhc2hib2FyZERldGFpbEZvcm06IE5nRm9ybTtcbiAgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkO1xuICBjdXJyZW50RGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkO1xuICBkYXNoYm9hcmROYW1lOiBzdHJpbmc7XG4gIGlzUmVwb3J0OiBib29sZWFuO1xuICBkZXZpY2VUeXBlOiBzdHJpbmc7XG4gIGlzTmFtZWREYXNoYm9hcmQ6IGJvb2xlYW47XG4gIGlzRGV2aWNlVHlwZTogYm9vbGVhbjtcbiAgaWNvbnM6IHN0cmluZ1tdO1xuICBmaWx0ZXJlZEljb25zOiBzdHJpbmdbXTtcbiAgc3R5bGluZyA9IHtcbiAgICB0aGVtZUNsYXNzOiAnZGFzaGJvYXJkLXRoZW1lLWxpZ2h0JyxcbiAgICBoZWFkZXJDbGFzczogJ3BhbmVsLXRpdGxlLXJlZ3VsYXInXG4gIH07XG4gIHBvc3NpYmxlU3R5bGluZyA9IHsgREFTSEJPQVJEX1RIRU1FX0NMQVNTRVMsIFdJREdFVF9IRUFERVJfQ0xBU1NFUyB9O1xuICB0aXRsZU5hbWU6IHN0cmluZztcbiAgbmFtZVBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHRpdGxlQWN0aW9uOiBzdHJpbmc7XG4gIG5hdmlnYXRvck5vZGVzJDogT2JzZXJ2YWJsZTxOYXZpZ2F0b3JOb2RlW10+O1xuICByZXN1bHQ6IFByb21pc2U8Q29udGV4dERhc2hib2FyZD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5fc2F2ZSA9IHJlc29sdmU7XG4gICAgdGhpcy5fY2FuY2VsID0gcmVqZWN0O1xuICB9KTtcbiAgZ2xvYmFsUm9sZXNJZHM6IERhc2hib2FyZEdsb2JhbFJvbGVzO1xuXG4gIGFwcGx5VG9EZXZpY2VzT2ZUeXBlUGVybWl0dGVkOiBib29sZWFuO1xuICBnZXQgYXBwbHlUb0RldmljZXNPZlR5cGVUaXRsZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLmFwcGx5VG9EZXZpY2VzT2ZUeXBlUGVybWl0dGVkXG4gICAgICA/IGdldHRleHQoJ0FwcGx5IGRhc2hib2FyZCB0byBhbGwgZGV2aWNlcyBvZiB0eXBlIHt7IHR5cGUgfX0nKVxuICAgICAgOiBnZXR0ZXh0KCdBcHBseSBkYXNoYm9hcmQgdG8gYWxsIGRldmljZXMgb2YgdHlwZSB7eyB0eXBlIH19IChwZXJtaXNzaW9uIHJlcXVpcmVkKScpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0ZXh0LCB7IHR5cGU6IHRoaXMuZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSB9KTtcbiAgfVxuXG4gIHJlYWRvbmx5IERFRkFVTFRfREFTSEJPQVJEX01BUkdJTiA9IDEyO1xuICByZWFkb25seSBERUZBVUxUX0RBU0hCT0FSRF9JQ09OID0gJ3RoJztcbiAgcmVhZG9ubHkgREVGQVVMVF9EQVNIQk9BUkRfUFJJT1JJVFkgPSAxMDAwMDtcblxuICBwcml2YXRlIF9zYXZlO1xuICBwcml2YXRlIF9jYW5jZWw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtb2RhbDogQnNNb2RhbFJlZixcbiAgICBASW5qZWN0KElDT05fTElTVCkgaWNvbkxpc3Q6IHN0cmluZ1tdLFxuICAgIHByaXZhdGUgY29udGV4dERhc2hib2FyZFNlcnZpY2U6IENvbnRleHREYXNoYm9hcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmF2aWdhdG9yU2VydmljZTogTmF2aWdhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnMsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaWNvbnMgPSBpY29uTGlzdDtcbiAgICB0aGlzLmZpbHRlcmVkSWNvbnMgPSBpY29uTGlzdDtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0RGFzaGJvYXJkQ2ZnID0ge1xuICAgICAgbmFtZTogdGhpcy5pc1JlcG9ydCA/ICdSZXBvcnQnIDogJ0Rhc2hib2FyZCcsXG4gICAgICBwcmlvcml0eTogdGhpcy5pc1JlcG9ydFxuICAgICAgICA/IFJFUE9SVF9ERUZBVUxUX05BVklHQVRJT05fTk9ERV9QUklPUklUWVxuICAgICAgICA6IHRoaXMuREVGQVVMVF9EQVNIQk9BUkRfUFJJT1JJVFksXG4gICAgICBpY29uOiB0aGlzLkRFRkFVTFRfREFTSEJPQVJEX0lDT04sXG4gICAgICBkZXZpY2VUeXBlVmFsdWU6IHRoaXMuZGV2aWNlVHlwZVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5kYXNoYm9hcmQpIHtcbiAgICAgIHRoaXMuY3VycmVudERhc2hib2FyZCA9IGNsb25lKHRoaXMuZGFzaGJvYXJkKTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkTmFtZSA9IHRoaXMuY3VycmVudERhc2hib2FyZC5uYW1lO1xuICAgICAgdGhpcy5zZXREYXNoYm9hcmRTdHlsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhc2hib2FyZCA9IGRlZmF1bHREYXNoYm9hcmRDZmc7XG4gICAgICB0aGlzLmRhc2hib2FyZE5hbWUgPSB0aGlzLmRhc2hib2FyZC5uYW1lO1xuICAgICAgdGhpcy5kYXNoYm9hcmREZXRhaWxGb3JtLmZvcm0ubWFya0FzRGlydHkoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRUaXRsZSgpO1xuICAgIHRoaXMuc2V0dXBBcHBseVRvRGV2aWNlc09mVHlwZUNoZWNrYm94KCk7XG4gICAgdGhpcy5uYXZpZ2F0b3JOb2RlcyQgPSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuaXRlbXMkO1xuICAgIHRoaXMubmFtZVBsYWNlaG9sZGVyID0gdGhpcy5pc1JlcG9ydCA/IGdldHRleHQoJ2UuZy4gTXkgcmVwb3J0JykgOiBnZXR0ZXh0KCdlLmcuIE15IGRhc2hib2FyZCcpO1xuICAgIHRoaXMuZ2xvYmFsUm9sZXNJZHMgPSB0aGlzLmRhc2hib2FyZC5nbG9iYWxSb2xlc0lkcztcbiAgfVxuXG4gIHNldFRpdGxlKCkge1xuICAgIHRoaXMudGl0bGVOYW1lID0gdGhpcy5pc1JlcG9ydCA/IGdldHRleHQoJ3JlcG9ydCcpIDogZ2V0dGV4dCgnZGFzaGJvYXJkJyk7XG4gICAgdGhpcy50aXRsZUFjdGlvbiA9IHRoaXMuY3VycmVudERhc2hib2FyZCA/IGdldHRleHQoJ0VkaXQnKSA6IGdldHRleHQoJ0FkZCcpO1xuICB9XG5cbiAgc2V0dXBBcHBseVRvRGV2aWNlc09mVHlwZUNoZWNrYm94KCkge1xuICAgIGNvbnN0IHJvbGVzVG9DaGVjayA9IFsnUk9MRV9JTlZFTlRPUllfQ1JFQVRFJywgJ1JPTEVfSU5WRU5UT1JZX0FETUlOJ107XG4gICAgdGhpcy5hcHBseVRvRGV2aWNlc09mVHlwZVBlcm1pdHRlZCA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmhhc0FueVJvbGUocm9sZXNUb0NoZWNrKTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5kYXNoYm9hcmQuZ2xvYmFsUm9sZXNJZHMgPSB0aGlzLmdsb2JhbFJvbGVzSWRzO1xuICAgIHRoaXMuZGFzaGJvYXJkLm5hbWUgPSB0aGlzLmRhc2hib2FyZE5hbWU7XG4gICAgdGhpcy5kYXNoYm9hcmQuY2xhc3NlcyA9IHsgW3RoaXMuc3R5bGluZy50aGVtZUNsYXNzXTogdHJ1ZSB9O1xuICAgIHRoaXMuZGFzaGJvYXJkLndpZGdldENsYXNzZXMgPSB7IFt0aGlzLnN0eWxpbmcuaGVhZGVyQ2xhc3NdOiB0cnVlIH07XG4gICAgdGhpcy5kYXNoYm9hcmQuYzh5X0lzTmF2aWdhdG9yTm9kZSA9IHRoaXMuZGFzaGJvYXJkLmM4eV9Jc05hdmlnYXRvck5vZGVcbiAgICAgID8ge31cbiAgICAgIDogdGhpcy5jdXJyZW50RGFzaGJvYXJkXG4gICAgICA/IG51bGxcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuX3NhdmUodGhpcy5kYXNoYm9hcmQpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5fY2FuY2VsKCk7XG4gICAgdGhpcy5tb2RhbC5oaWRlKCk7XG4gIH1cblxuICBnZXREYXNoYm9hcmRQcmV2aWV3U3R5bGUoKSB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHt9O1xuICAgIGNzc0NsYXNzZXNbdGhpcy5zdHlsaW5nLmhlYWRlckNsYXNzXSA9IHRydWU7XG4gICAgY3NzQ2xhc3Nlc1t0aGlzLnN0eWxpbmcudGhlbWVDbGFzc10gPSB0cnVlO1xuICAgIHJldHVybiBjc3NDbGFzc2VzO1xuICB9XG5cbiAgc2VsZWN0SWNvbihpY29uKSB7XG4gICAgdGhpcy5kYXNoYm9hcmQuaWNvbiA9IGljb247XG4gICAgdGhpcy5kYXNoYm9hcmREZXRhaWxGb3JtLmZvcm0ubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcmVkKHRlcm06IHN0cmluZykge1xuICAgIGlmICh0ZXJtKSB7XG4gICAgICBjb25zdCBzZWFyY2ggPSBuZXcgUmVnRXhwKHRlcm0sICdpJyk7XG4gICAgICB0aGlzLmZpbHRlcmVkSWNvbnMgPSB0aGlzLmljb25zLmZpbHRlcih2YWwgPT4gc2VhcmNoLnRlc3QodmFsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJY29ucyA9IHRoaXMuaWNvbnM7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXREYXNoYm9hcmRTdHlsZSgpIHtcbiAgICBjb25zdCBhbGxDbGFzc2VzID0ge1xuICAgICAgLi4udGhpcy5kYXNoYm9hcmQuY2xhc3NlcyxcbiAgICAgIC4uLnRoaXMuZGFzaGJvYXJkLndpZGdldENsYXNzZXNcbiAgICB9O1xuXG4gICAgY29uc3Qgc3R5bGVzID0gT2JqZWN0LmtleXMoYWxsQ2xhc3NlcykubWFwKGMgPT4gYy5zcGxpdCgnLScpLnBvcCgpKTtcbiAgICBzdHlsZXMuZm9yRWFjaChzdHlsZU5hbWUgPT4ge1xuICAgICAgdGhpcy5zdHlsaW5nLnRoZW1lQ2xhc3MgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldFN0eWxpbmcoXG4gICAgICAgIERBU0hCT0FSRF9USEVNRV9DTEFTU0VTLFxuICAgICAgICBzdHlsZU5hbWUsXG4gICAgICAgIHRoaXMuc3R5bGluZy50aGVtZUNsYXNzXG4gICAgICApO1xuICAgICAgdGhpcy5zdHlsaW5nLmhlYWRlckNsYXNzID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRTdHlsaW5nKFxuICAgICAgICBXSURHRVRfSEVBREVSX0NMQVNTRVMsXG4gICAgICAgIHN0eWxlTmFtZSxcbiAgICAgICAgdGhpcy5zdHlsaW5nLmhlYWRlckNsYXNzXG4gICAgICApO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidmlld3BvcnQtbW9kYWxcIj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBzZXBhcmF0b3ItYm90dG9tXCI+XG4gICAgPGgzIGlkPVwibW9kYWwtdGl0bGVcIj57eyB0aXRsZUFjdGlvbiB8IHRyYW5zbGF0ZSB9fSZuYnNwO3t7IHRpdGxlTmFtZSB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1pbm5lci1zY3JvbGxcIiBpZD1cIm1vZGFsLWJvZHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwicC1sLTI0IHAtci0yNFwiPlxuICAgICAgPGZvcm0gI2Rhc2hib2FyZERldGFpbEZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cImQtY29udGVudHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc05hbWVkRGFzaGJvYXJkIHx8IGlzUmVwb3J0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQgZm9ybS1ibG9ja1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdHZW5lcmFsJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJtLXItMTZcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImQtYmxvY2tcIj57eyAnSWNvbicgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGRpdiBkcm9wZG93biBjbGFzcz1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdJY29uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tZGVmYXVsdCBidG4gYnRuLWdyYXlcIlxuICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwie3sgZGFzaGJvYXJkLmljb24gfX1cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJldFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAgICAgICAgICpkcm9wZG93bk1lbnVcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgbW9kYWwtaW5uZXItc2Nyb2xsIGRyb3Bkb3duLW1lbnUtZ3JpZC00IG0tbC0wXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDI1MHB4XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgZmlsdGVyZWRJY29uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIChjbGljayk9XCJzZWxlY3RJY29uKGljb24pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnRlcmFjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBpY29uIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogZGFzaGJvYXJkLmljb24gPT09IGljb24gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25cIiBbYzh5SWNvbl09XCJpY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJmbGV4LWdyb3dcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLXItNFwiIGlkPVwibWVudUxhYmVsXCI+e3sgJ01lbnUgbGFiZWwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscCBidG4taGVscC0tc21cIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyPVwie3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdNZW51IGxhYmVsIHRvIGRpc3BsYXkgaW4gc3VibWVudSB3aGVuIGRhc2hib2FyZCBpcyBhdHRhY2hlZCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ3F1ZXN0aW9uLWNpcmNsZS1vJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwibWVudUxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXNoYm9hcmROYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBuYW1lUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI1MTJcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwICpuZ0lmPVwiaXNSZXBvcnRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgaWQ9XCJkZXNjcmlwdGlvblwiPnt7ICdEZXNjcmlwdGlvbiAnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgIHJvd3M9XCIyXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhc2hib2FyZC5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIiAqbmdJZj1cIiFpc1JlcG9ydFwiPlxuICAgICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicG9zaXRpb25OYXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tci00XCIgaWQ9XCJwb3NpdGlvbk5hdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ1Bvc2l0aW9uIGluIG5hdmlnYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlcj1cInt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdQb3NpdGlvbiBpbiBuYXZpZ2F0aW9uIG1lbnUgKDEwMDAwIGZpcnN0LCAtMTAwMDAgbGFzdCknIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidxdWVzdGlvbi1jaXJjbGUtbydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwicG9zaXRpb25OYXZcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicHJpb3JpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGFzaGJvYXJkLnByaW9yaXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCItMTAwMDBcIlxuICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjEwMDAwXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuJyB8IHRyYW5zbGF0ZSB9fSA1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCIgKm5nSWY9XCJpc1JlcG9ydFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5OYXZpZ2F0b3IgbWVudSBpdGVtPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHRpdGxlPVwie3sgJ1Nob3cgaW4gbmF2aWdhdG9yJyB8IHRyYW5zbGF0ZSB9fVwiIGNsYXNzPVwiYzh5LWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImlzTmF2aWdhdG9yTm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIiEhZGFzaGJvYXJkLmM4eV9Jc05hdmlnYXRvck5vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdTaG93IGluIG5hdmlnYXRvcicgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiICpuZ0lmPVwiaXNSZXBvcnRcIj5cbiAgICAgICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBvc2l0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLXItNFwiPnt7ICdQb3NpdGlvbiBpbiBuYXZpZ2F0b3InIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcG9zaXRpb25Jbk5hdlBvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQb3NpdGlvbiBpbiBuYXZpZ2F0b3IgKDEwMDAxIGZpcnN0LCAtMTAwMDAgbGFzdCkuJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fSZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnRXhpc3Rpbmcgbm9kZXM6JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBtLXQtMTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBub2RlIG9mIG5hdmlnYXRvck5vZGVzJCB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgW2M4eUljb25dPVwibm9kZS5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid29yZC1icmVhayBtLWwtNCBtLXItMTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubGFiZWwubGVuZ3RoID4gMTVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChub2RlLmxhYmVsIHwgc2xpY2U6IDA6MTUpICsgJy4uLidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5vZGUubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHVsbC1yaWdodFwiPnt7IG5vZGUucHJpb3JpdHkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscCBidG4taGVscC0tc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJwb3NpdGlvbkluTmF2UG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ3F1ZXN0aW9uLWNpcmNsZS1vJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9yPVwicG9zaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicHJpb3JpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGFzaGJvYXJkLnByaW9yaXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCItMTAwMDBcIlxuICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjIwMDAwXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuJyB8IHRyYW5zbGF0ZSB9fSA1MDBcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjdXJyZW50RGFzaGJvYXJkICYmIGRldmljZVR5cGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIHRpdGxlPVwie3sgYXBwbHlUb0RldmljZXNPZlR5cGVUaXRsZSB9fVwiIGNsYXNzPVwiYzh5LWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImRldmljZVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGFzaGJvYXJkLmRldmljZVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhYXBwbHlUb0RldmljZXNPZlR5cGVQZXJtaXR0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7IHR5cGU6IGRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgQXBwbHkgZGFzaGJvYXJkIHRvIGFsbCBkZXZpY2VzIG9mIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICA8aT57eyB0eXBlIH19PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm8gbS1iLTI0XCIgKm5nSWY9XCJpc0RldmljZVR5cGVcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGM4eS1pY29uPVwiaW5mb1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInsgdHlwZTogZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgbmdOb25CaW5kYWJsZVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBUaGlzIGRhc2hib2FyZCBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgZGV2aWNlcyBvZiB0aGUgdHlwZVxuICAgICAgICAgICAgICAgICAgICA8aT57eyB0eXBlIH19PC9pPlxuICAgICAgICAgICAgICAgICAgICAuXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Yzh5LWRhc2hib2FyZC1hdmFpbGFiaWxpdHlcbiAgICAgICAgICAgICAgKm5nSWY9XCIhIWlzUmVwb3J0ID09PSBmYWxzZVwiXG4gICAgICAgICAgICAgIFsoZ2xvYmFsUm9sZXNJZHMpXT1cImdsb2JhbFJvbGVzSWRzXCJcbiAgICAgICAgICAgICAgKGdsb2JhbFJvbGVzSWRzQ2hhbmdlKT1cImRhc2hib2FyZERldGFpbEZvcm0/LmZvcm0/Lm1hcmtBc0RpcnR5KClcIlxuICAgICAgICAgICAgPjwvYzh5LWRhc2hib2FyZC1hdmFpbGFiaWxpdHk+XG4gICAgICAgICAgICA8Yzh5LWFwcGVhcmFuY2Utc2V0dGluZ3NcbiAgICAgICAgICAgICAgWyh0aGVtZUNsYXNzKV09XCJzdHlsaW5nLnRoZW1lQ2xhc3NcIlxuICAgICAgICAgICAgICBbKGhlYWRlckNsYXNzKV09XCJzdHlsaW5nLmhlYWRlckNsYXNzXCJcbiAgICAgICAgICAgID48L2M4eS1hcHBlYXJhbmNlLXNldHRpbmdzPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJwLWItMjQgbS1iLTBcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJtYXJnaW5cIj57eyAnV2lkZ2V0IG1hcmdpbicgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwibWFyZ2luXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwibWFyZ2luXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXNoYm9hcmQud2lkZ2V0TWFyZ2luXCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICBtYXg9XCI1MFwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBERUZBVUxUX0RBU0hCT0FSRF9NQVJHSU4gfX1cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWFkZG9uXCI+cHg8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwicC1iLTI0IG0tYi0wXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPldpZGdldCB0aXRsZXM8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIHRpdGxlPVwie3sgJ1RyYW5zbGF0ZSBpZiBwb3NzaWJsZScgfCB0cmFuc2xhdGUgfX1cIiBjbGFzcz1cImM4eS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0cmFuc2xhdGVXaWRnZXRUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXNoYm9hcmQudHJhbnNsYXRlV2lkZ2V0VGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdUcmFuc2xhdGUgaWYgcG9zc2libGUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICA8Yzh5LXdpZGdldC1wcmV2aWV3XG4gICAgICAgICAgICAgIFt0YWJdPVwiIWlzTmFtZWREYXNoYm9hcmQgPyBkYXNoYm9hcmQgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICBbcHJldmlld0NsYXNzZXNdPVwiZ2V0RGFzaGJvYXJkUHJldmlld1N0eWxlKClcIlxuICAgICAgICAgICAgPjwvYzh5LXdpZGdldC1wcmV2aWV3PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b25cbiAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgPlxuICAgICAge3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICB0aXRsZT1cInt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgIChjbGljayk9XCJzYXZlKClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRhc2hib2FyZERldGFpbEZvcm0uZm9ybS5pbnZhbGlkIHx8IGRhc2hib2FyZERldGFpbEZvcm0uZm9ybS5wcmlzdGluZVwiXG4gICAgPlxuICAgICAge3sgJ1NhdmUnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC9kYXNoYm9hcmQtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2Rhc2hib2FyZC1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsT0FBTyxFQUNQLFNBQVMsRUFFVCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixxQkFBcUIsRUFFdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU1qSCxNQUFNLE9BQU8sd0JBQXdCO0lBeUNuQyxZQUNVLEtBQWlCLEVBQ04sUUFBa0IsRUFDN0IsdUJBQWdELEVBQ2hELGdCQUFrQyxFQUNsQyxrQkFBK0IsRUFDL0IsZ0JBQWtDO1FBTGxDLFVBQUssR0FBTCxLQUFLLENBQVk7UUFFakIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHVCQUFrQixH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T0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQy9ELHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQ3hCLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUNoRSxxQkFBcUIsRUFDckIsU0FBUyxFQUNULElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUN6QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztxSEFuSlUsd0JBQXdCLDRDQTJDekIsU0FBUzt5R0EzQ1Isd0JBQXdCLHNNQzFCckMsdTNZQTBTQTsyRkRoUmEsd0JBQXdCO2tCQUpwQyxTQUFTOytCQUNFLHNCQUFzQjs7MEJBOEM3QixNQUFNOzJCQUFDLFNBQVM7MEtBMUNpQyxtQkFBbUI7c0JBQXRFLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgZ2V0dGV4dCxcbiAgSUNPTl9MSVNULFxuICBOYXZpZ2F0b3JOb2RlLFxuICBOYXZpZ2F0b3JTZXJ2aWNlLFxuICBQZXJtaXNzaW9uc1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIENvbnRleHREYXNoYm9hcmQsXG4gIERBU0hCT0FSRF9USEVNRV9DTEFTU0VTLFxuICBXSURHRVRfSEVBREVSX0NMQVNTRVMsXG4gIERhc2hib2FyZEdsb2JhbFJvbGVzXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUkVQT1JUX0RFRkFVTFRfTkFWSUdBVElPTl9OT0RFX1BSSU9SSVRZIH0gZnJvbSAnLi9yZXBvcnQtZGFzaGJvYXJkL3JlcG9ydC1kYXNoYm9hcmQtbmF2aWdhdGlvbi5mYWN0b3J5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhc2hib2FyZC1kZXRhaWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLWRldGFpbC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkRGV0YWlsQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgnZGFzaGJvYXJkRGV0YWlsRm9ybScsIHsgc3RhdGljOiB0cnVlIH0pIGRhc2hib2FyZERldGFpbEZvcm06IE5nRm9ybTtcbiAgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkO1xuICBjdXJyZW50RGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkO1xuICBkYXNoYm9hcmROYW1lOiBzdHJpbmc7XG4gIGlzUmVwb3J0OiBib29sZWFuO1xuICBkZXZpY2VUeXBlOiBzdHJpbmc7XG4gIGlzTmFtZWREYXNoYm9hcmQ6IGJvb2xlYW47XG4gIGlzRGV2aWNlVHlwZTogYm9vbGVhbjtcbiAgaWNvbnM6IHN0cmluZ1tdO1xuICBmaWx0ZXJlZEljb25zOiBzdHJpbmdbXTtcbiAgc3R5bGluZyA9IHtcbiAgICB0aGVtZUNsYXNzOiAnZGFzaGJvYXJkLXRoZW1lLWxpZ2h0JyxcbiAgICBoZWFkZXJDbGFzczogJ3BhbmVsLXRpdGxlLXJlZ3VsYXInXG4gIH07XG4gIHBvc3NpYmxlU3R5bGluZyA9IHsgREFTSEJPQVJEX1RIRU1FX0NMQVNTRVMsIFdJREdFVF9IRUFERVJfQ0xBU1NFUyB9O1xuICB0aXRsZU5hbWU6IHN0cmluZztcbiAgbmFtZVBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHRpdGxlQWN0aW9uOiBzdHJpbmc7XG4gIG5hdmlnYXRvck5vZGVzJDogT2JzZXJ2YWJsZTxOYXZpZ2F0b3JOb2RlW10+O1xuICByZXN1bHQ6IFByb21pc2U8Q29udGV4dERhc2hib2FyZD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5fc2F2ZSA9IHJlc29sdmU7XG4gICAgdGhpcy5fY2FuY2VsID0gcmVqZWN0O1xuICB9KTtcbiAgZ2xvYmFsUm9sZXNJZHM6IERhc2hib2FyZEdsb2JhbFJvbGVzO1xuXG4gIGFwcGx5VG9EZXZpY2VzT2ZUeXBlUGVybWl0dGVkOiBib29sZWFuO1xuICBnZXQgYXBwbHlUb0RldmljZXNPZlR5cGVUaXRsZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLmFwcGx5VG9EZXZpY2VzT2ZUeXBlUGVybWl0dGVkXG4gICAgICA/IGdldHRleHQoJ0FwcGx5IGRhc2hib2FyZCB0byBhbGwgZGV2aWNlcyBvZiB0eXBlIHt7IHR5cGUgfX0nKVxuICAgICAgOiBnZXR0ZXh0KCdBcHBseSBkYXNoYm9hcmQgdG8gYWxsIGRldmljZXMgb2YgdHlwZSB7eyB0eXBlIH19IChwZXJtaXNzaW9uIHJlcXVpcmVkKScpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0ZXh0LCB7IHR5cGU6IHRoaXMuZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSB9KTtcbiAgfVxuXG4gIHJlYWRvbmx5IERFRkFVTFRfREFTSEJPQVJEX01BUkdJTiA9IDEyO1xuICByZWFkb25seSBERUZBVUxUX0RBU0hCT0FSRF9JQ09OID0gJ3RoJztcbiAgcmVhZG9ubHkgREVGQVVMVF9EQVNIQk9BUkRfUFJJT1JJVFkgPSAxMDAwMDtcblxuICBwcml2YXRlIF9zYXZlO1xuICBwcml2YXRlIF9jYW5jZWw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtb2RhbDogQnNNb2RhbFJlZixcbiAgICBASW5qZWN0KElDT05fTElTVCkgaWNvbkxpc3Q6IHN0cmluZ1tdLFxuICAgIHByaXZhdGUgY29udGV4dERhc2hib2FyZFNlcnZpY2U6IENvbnRleHREYXNoYm9hcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmF2aWdhdG9yU2VydmljZTogTmF2aWdhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnMsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaWNvbnMgPSBpY29uTGlzdDtcbiAgICB0aGlzLmZpbHRlcmVkSWNvbnMgPSBpY29uTGlzdDtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0RGFzaGJvYXJkQ2ZnID0ge1xuICAgICAgbmFtZTogdGhpcy5pc1JlcG9ydCA/ICdSZXBvcnQnIDogJ0Rhc2hib2FyZCcsXG4gICAgICBwcmlvcml0eTogdGhpcy5pc1JlcG9ydFxuICAgICAgICA/IFJFUE9SVF9ERUZBVUxUX05BVklHQVRJT05fTk9ERV9QUklPUklUWVxuICAgICAgICA6IHRoaXMuREVGQVVMVF9EQVNIQk9BUkRfUFJJT1JJVFksXG4gICAgICBpY29uOiB0aGlzLkRFRkFVTFRfREFTSEJPQVJEX0lDT04sXG4gICAgICBkZXZpY2VUeXBlVmFsdWU6IHRoaXMuZGV2aWNlVHlwZVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5kYXNoYm9hcmQpIHtcbiAgICAgIHRoaXMuY3VycmVudERhc2hib2FyZCA9IGNsb25lKHRoaXMuZGFzaGJvYXJkKTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkTmFtZSA9IHRoaXMuY3VycmVudERhc2hib2FyZC5uYW1lO1xuICAgICAgdGhpcy5zZXREYXNoYm9hcmRTdHlsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhc2hib2FyZCA9IGRlZmF1bHREYXNoYm9hcmRDZmc7XG4gICAgICB0aGlzLmRhc2hib2FyZE5hbWUgPSB0aGlzLmRhc2hib2FyZC5uYW1lO1xuICAgICAgdGhpcy5kYXNoYm9hcmREZXRhaWxGb3JtLmZvcm0ubWFya0FzRGlydHkoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRUaXRsZSgpO1xuICAgIHRoaXMuc2V0dXBBcHBseVRvRGV2aWNlc09mVHlwZUNoZWNrYm94KCk7XG4gICAgdGhpcy5uYXZpZ2F0b3JOb2RlcyQgPSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuaXRlbXMkO1xuICAgIHRoaXMubmFtZVBsYWNlaG9sZGVyID0gdGhpcy5pc1JlcG9ydCA/IGdldHRleHQoJ2UuZy4gTXkgcmVwb3J0JykgOiBnZXR0ZXh0KCdlLmcuIE15IGRhc2hib2FyZCcpO1xuICAgIHRoaXMuZ2xvYmFsUm9sZXNJZHMgPSB0aGlzLmRhc2hib2FyZC5nbG9iYWxSb2xlc0lkcztcbiAgfVxuXG4gIHNldFRpdGxlKCkge1xuICAgIHRoaXMudGl0bGVOYW1lID0gdGhpcy5pc1JlcG9ydCA/IGdldHRleHQoJ3JlcG9ydCcpIDogZ2V0dGV4dCgnZGFzaGJvYXJkJyk7XG4gICAgdGhpcy50aXRsZUFjdGlvbiA9IHRoaXMuY3VycmVudERhc2hib2FyZCA/IGdldHRleHQoJ0VkaXQnKSA6IGdldHRleHQoJ0FkZCcpO1xuICB9XG5cbiAgc2V0dXBBcHBseVRvRGV2aWNlc09mVHlwZUNoZWNrYm94KCkge1xuICAgIGNvbnN0IHJvbGVzVG9DaGVjayA9IFsnUk9MRV9JTlZFTlRPUllfQ1JFQVRFJywgJ1JPTEVfSU5WRU5UT1JZX0FETUlOJ107XG4gICAgdGhpcy5hcHBseVRvRGV2aWNlc09mVHlwZVBlcm1pdHRlZCA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmhhc0FueVJvbGUocm9sZXNUb0NoZWNrKTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5kYXNoYm9hcmQuZ2xvYmFsUm9sZXNJZHMgPSB0aGlzLmdsb2JhbFJvbGVzSWRzO1xuICAgIHRoaXMuZGFzaGJvYXJkLm5hbWUgPSB0aGlzLmRhc2hib2FyZE5hbWU7XG4gICAgdGhpcy5kYXNoYm9hcmQuY2xhc3NlcyA9IHsgW3RoaXMuc3R5bGluZy50aGVtZUNsYXNzXTogdHJ1ZSB9O1xuICAgIHRoaXMuZGFzaGJvYXJkLndpZGdldENsYXNzZXMgPSB7IFt0aGlzLnN0eWxpbmcuaGVhZGVyQ2xhc3NdOiB0cnVlIH07XG4gICAgdGhpcy5kYXNoYm9hcmQuYzh5X0lzTmF2aWdhdG9yTm9kZSA9IHRoaXMuZGFzaGJvYXJkLmM4eV9Jc05hdmlnYXRvck5vZGVcbiAgICAgID8ge31cbiAgICAgIDogdGhpcy5jdXJyZW50RGFzaGJvYXJkXG4gICAgICA/IG51bGxcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuX3NhdmUodGhpcy5kYXNoYm9hcmQpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5fY2FuY2VsKCk7XG4gICAgdGhpcy5tb2RhbC5oaWRlKCk7XG4gIH1cblxuICBnZXREYXNoYm9hcmRQcmV2aWV3U3R5bGUoKSB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHt9O1xuICAgIGNzc0NsYXNzZXNbdGhpcy5zdHlsaW5nLmhlYWRlckNsYXNzXSA9IHRydWU7XG4gICAgY3NzQ2xhc3Nlc1t0aGlzLnN0eWxpbmcudGhlbWVDbGFzc10gPSB0cnVlO1xuICAgIHJldHVybiBjc3NDbGFzc2VzO1xuICB9XG5cbiAgc2VsZWN0SWNvbihpY29uKSB7XG4gICAgdGhpcy5kYXNoYm9hcmQuaWNvbiA9IGljb247XG4gICAgdGhpcy5kYXNoYm9hcmREZXRhaWxGb3JtLmZvcm0ubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcmVkKHRlcm06IHN0cmluZykge1xuICAgIGlmICh0ZXJtKSB7XG4gICAgICBjb25zdCBzZWFyY2ggPSBuZXcgUmVnRXhwKHRlcm0sICdpJyk7XG4gICAgICB0aGlzLmZpbHRlcmVkSWNvbnMgPSB0aGlzLmljb25zLmZpbHRlcih2YWwgPT4gc2VhcmNoLnRlc3QodmFsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJY29ucyA9IHRoaXMuaWNvbnM7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXREYXNoYm9hcmRTdHlsZSgpIHtcbiAgICBjb25zdCBhbGxDbGFzc2VzID0ge1xuICAgICAgLi4udGhpcy5kYXNoYm9hcmQuY2xhc3NlcyxcbiAgICAgIC4uLnRoaXMuZGFzaGJvYXJkLndpZGdldENsYXNzZXNcbiAgICB9O1xuXG4gICAgY29uc3Qgc3R5bGVzID0gT2JqZWN0LmtleXMoYWxsQ2xhc3NlcykubWFwKGMgPT4gYy5zcGxpdCgnLScpLnBvcCgpKTtcbiAgICBzdHlsZXMuZm9yRWFjaChzdHlsZU5hbWUgPT4ge1xuICAgICAgdGhpcy5zdHlsaW5nLnRoZW1lQ2xhc3MgPSB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmdldFN0eWxpbmcoXG4gICAgICAgIERBU0hCT0FSRF9USEVNRV9DTEFTU0VTLFxuICAgICAgICBzdHlsZU5hbWUsXG4gICAgICAgIHRoaXMuc3R5bGluZy50aGVtZUNsYXNzXG4gICAgICApO1xuICAgICAgdGhpcy5zdHlsaW5nLmhlYWRlckNsYXNzID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRTdHlsaW5nKFxuICAgICAgICBXSURHRVRfSEVBREVSX0NMQVNTRVMsXG4gICAgICAgIHN0eWxlTmFtZSxcbiAgICAgICAgdGhpcy5zdHlsaW5nLmhlYWRlckNsYXNzXG4gICAgICApO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidmlld3BvcnQtbW9kYWxcIj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBzZXBhcmF0b3ItYm90dG9tXCI+XG4gICAgPGgzIGlkPVwibW9kYWwtdGl0bGVcIj57eyB0aXRsZUFjdGlvbiB8IHRyYW5zbGF0ZSB9fSZuYnNwO3t7IHRpdGxlTmFtZSB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1pbm5lci1zY3JvbGxcIiBpZD1cIm1vZGFsLWJvZHlcIj5cbiAgICA8ZGl2IGNsYXNzPVwicC1sLTI0IHAtci0yNFwiPlxuICAgICAgPGZvcm0gI2Rhc2hib2FyZERldGFpbEZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cImQtY29udGVudHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc05hbWVkRGFzaGJvYXJkIHx8IGlzUmVwb3J0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQgZm9ybS1ibG9ja1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdHZW5lcmFsJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJtLXItMTZcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImQtYmxvY2tcIj57eyAnSWNvbicgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGRpdiBkcm9wZG93biBjbGFzcz1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdJY29uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tZGVmYXVsdCBidG4gYnRuLWdyYXlcIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93blRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInt7IGRhc2hib2FyZC5pY29uIH19XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZXRcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICAgICAgICAqZHJvcGRvd25NZW51XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1tZW51IG1vZGFsLWlubmVyLXNjcm9sbCBkcm9wZG93bi1tZW51LWdyaWQtNCBtLWwtMFwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAyNTBweFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpY29uIG9mIGZpbHRlcmVkSWNvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwic2VsZWN0SWNvbihpY29uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW50ZXJhY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgaWNvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGRhc2hib2FyZC5pY29uID09PSBpY29uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uXCIgW2M4eUljb25dPVwiaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwiZmxleC1ncm93XCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1yLTRcIiBpZD1cIm1lbnVMYWJlbFwiPnt7ICdNZW51IGxhYmVsJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlcj1cInt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnTWVudSBsYWJlbCB0byBkaXNwbGF5IGluIHN1Ym1lbnUgd2hlbiBkYXNoYm9hcmQgaXMgYXR0YWNoZWQnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidxdWVzdGlvbi1jaXJjbGUtbydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBpZD1cIm1lbnVMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGFzaGJvYXJkTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgbmFtZVBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNTEyXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCAqbmdJZj1cImlzUmVwb3J0XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGlkPVwiZGVzY3JpcHRpb25cIj57eyAnRGVzY3JpcHRpb24gJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICByb3dzPVwiMlwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXNoYm9hcmQuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCIgKm5nSWY9XCIhaXNSZXBvcnRcIj5cbiAgICAgICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBvc2l0aW9uTmF2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLXItNFwiIGlkPVwicG9zaXRpb25OYXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdQb3NpdGlvbiBpbiBuYXZpZ2F0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXI9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gaW4gbmF2aWdhdGlvbiBtZW51ICgxMDAwMCBmaXJzdCwgLTEwMDAwIGxhc3QpJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCIncXVlc3Rpb24tY2lyY2xlLW8nXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInBvc2l0aW9uTmF2XCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInByaW9yaXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhc2hib2FyZC5wcmlvcml0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgbWluPVwiLTEwMDAwXCJcbiAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDAwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLicgfCB0cmFuc2xhdGUgfX0gNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiICpuZ0lmPVwiaXNSZXBvcnRcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCB0cmFuc2xhdGU+TmF2aWdhdG9yIG1lbnUgaXRlbTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCB0aXRsZT1cInt7ICdTaG93IGluIG5hdmlnYXRvcicgfCB0cmFuc2xhdGUgfX1cIiBjbGFzcz1cImM4eS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJpc05hdmlnYXRvck5vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCIhIWRhc2hib2FyZC5jOHlfSXNOYXZpZ2F0b3JOb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnU2hvdyBpbiBuYXZpZ2F0b3InIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIiAqbmdJZj1cImlzUmVwb3J0XCI+XG4gICAgICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwb3NpdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1yLTRcIj57eyAnUG9zaXRpb24gaW4gbmF2aWdhdG9yJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Bvc2l0aW9uSW5OYXZQb3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24gaW4gbmF2aWdhdG9yICgxMDAwMSBmaXJzdCwgLTEwMDAwIGxhc3QpLicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX0mbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0V4aXN0aW5nIG5vZGVzOicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbS10LTE2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgbm9kZSBvZiBuYXZpZ2F0b3JOb2RlcyQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIm5vZGUuaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIndvcmQtYnJlYWsgbS1sLTQgbS1yLTE2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxhYmVsLmxlbmd0aCA+IDE1XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAobm9kZS5sYWJlbCB8IHNsaWNlOiAwOjE1KSArICcuLi4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBub2RlLmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInB1bGwtcmlnaHRcIj57eyBub2RlLnByaW9yaXR5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BvcG92ZXJdPVwicG9zaXRpb25Jbk5hdlBvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidxdWVzdGlvbi1jaXJjbGUtbydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInByaW9yaXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhc2hib2FyZC5wcmlvcml0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgbWluPVwiLTEwMDAwXCJcbiAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIyMDAwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLicgfCB0cmFuc2xhdGUgfX0gNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY3VycmVudERhc2hib2FyZCAmJiBkZXZpY2VUeXBlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCB0aXRsZT1cInt7IGFwcGx5VG9EZXZpY2VzT2ZUeXBlVGl0bGUgfX1cIiBjbGFzcz1cImM4eS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJkZXZpY2VUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhc2hib2FyZC5kZXZpY2VUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFwcGx5VG9EZXZpY2VzT2ZUeXBlUGVybWl0dGVkXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibS1yLTRcIlxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyB0eXBlOiBkYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlIH1cIlxuICAgICAgICAgICAgICAgICAgICAgIG5nTm9uQmluZGFibGVcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIEFwcGx5IGRhc2hib2FyZCB0byBhbGwgZGV2aWNlcyBvZiB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgPGk+e3sgdHlwZSB9fTwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIG0tYi0yNFwiICpuZ0lmPVwiaXNEZXZpY2VUeXBlXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjOHktaWNvbj1cImluZm9cIj48L2k+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7IHR5cGU6IGRhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUgfVwiXG4gICAgICAgICAgICAgICAgICAgIG5nTm9uQmluZGFibGVcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgVGhpcyBkYXNoYm9hcmQgaXMgc2hhcmVkIGJldHdlZW4gYWxsIGRldmljZXMgb2YgdGhlIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgPGk+e3sgdHlwZSB9fTwvaT5cbiAgICAgICAgICAgICAgICAgICAgLlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGM4eS1kYXNoYm9hcmQtYXZhaWxhYmlsaXR5XG4gICAgICAgICAgICAgICpuZ0lmPVwiISFpc1JlcG9ydCA9PT0gZmFsc2VcIlxuICAgICAgICAgICAgICBbKGdsb2JhbFJvbGVzSWRzKV09XCJnbG9iYWxSb2xlc0lkc1wiXG4gICAgICAgICAgICAgIChnbG9iYWxSb2xlc0lkc0NoYW5nZSk9XCJkYXNoYm9hcmREZXRhaWxGb3JtPy5mb3JtPy5tYXJrQXNEaXJ0eSgpXCJcbiAgICAgICAgICAgID48L2M4eS1kYXNoYm9hcmQtYXZhaWxhYmlsaXR5PlxuICAgICAgICAgICAgPGM4eS1hcHBlYXJhbmNlLXNldHRpbmdzXG4gICAgICAgICAgICAgIFsodGhlbWVDbGFzcyldPVwic3R5bGluZy50aGVtZUNsYXNzXCJcbiAgICAgICAgICAgICAgWyhoZWFkZXJDbGFzcyldPVwic3R5bGluZy5oZWFkZXJDbGFzc1wiXG4gICAgICAgICAgICA+PC9jOHktYXBwZWFyYW5jZS1zZXR0aW5ncz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwicC1iLTI0IG0tYi0wXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibWFyZ2luXCI+e3sgJ1dpZGdldCBtYXJnaW4nIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cIm1hcmdpblwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cIm1hcmdpblwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGFzaGJvYXJkLndpZGdldE1hcmdpblwiXG4gICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgbWF4PVwiNTBcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgREVGQVVMVF9EQVNIQk9BUkRfTUFSR0lOIH19XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPnB4PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgIDxjOHktZm9ybS1ncm91cCBjbGFzcz1cInAtYi0yNCBtLWItMFwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5XaWRnZXQgdGl0bGVzPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCB0aXRsZT1cInt7ICdUcmFuc2xhdGUgaWYgcG9zc2libGUnIHwgdHJhbnNsYXRlIH19XCIgY2xhc3M9XCJjOHktY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidHJhbnNsYXRlV2lkZ2V0VGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGFzaGJvYXJkLnRyYW5zbGF0ZVdpZGdldFRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnVHJhbnNsYXRlIGlmIHBvc3NpYmxlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGM4eS13aWRnZXQtcHJldmlld1xuICAgICAgICAgICAgICBbdGFiXT1cIiFpc05hbWVkRGFzaGJvYXJkID8gZGFzaGJvYXJkIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgW3ByZXZpZXdDbGFzc2VzXT1cImdldERhc2hib2FyZFByZXZpZXdTdHlsZSgpXCJcbiAgICAgICAgICAgID48L2M4eS13aWRnZXQtcHJldmlldz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICB0aXRsZT1cInt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgID5cbiAgICAgIHt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgdGl0bGU9XCJ7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAoY2xpY2spPVwic2F2ZSgpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkYXNoYm9hcmREZXRhaWxGb3JtLmZvcm0uaW52YWxpZCB8fCBkYXNoYm9hcmREZXRhaWxGb3JtLmZvcm0ucHJpc3RpbmVcIlxuICAgID5cbiAgICAgIHt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -19,46 +19,20 @@ export class DeviceInfoDashboardComponent {
19
19
  this.isLoading$ = new BehaviorSubject(true);
20
20
  this.DEVICE_INFO_WIDGETS = [
21
21
  {
22
- name: 'Alarm list',
23
- title: gettext('Active, critical alarms'),
24
- _x: 4,
25
- _y: 7,
26
- _height: 4,
27
- _width: 4,
28
- config: {
29
- options: {
30
- orderMode: 'ACTIVE_FIRST',
31
- severity: { CRITICAL: true },
32
- status: {
33
- ACTIVE: true,
34
- ACKNOWLEDGED: false,
35
- CLEARED: false
36
- },
37
- types: []
38
- }
39
- }
40
- },
41
- {
42
- name: 'Map',
43
- title: gettext('Location'),
44
- _x: 4,
45
- _y: 11,
46
- _height: 4,
47
- _width: 8
22
+ componentId: 'assetNotesWidget',
23
+ title: gettext('Message of the day'),
24
+ classes: { 'panel-title-hidden': true },
25
+ _x: 0,
26
+ _y: 0,
27
+ _height: 2,
28
+ _width: 12
48
29
  },
49
30
  {
50
- name: 'Asset Properties',
51
- title: gettext('Device data'),
52
- config: {
53
- options: {
54
- properties: [],
55
- allowDisplayAndEditKnownProperties: true,
56
- hiddenPropertiesKeyPaths: ['owner']
57
- }
58
- },
31
+ name: 'deviceStatusWidget',
32
+ title: gettext('Device status'),
59
33
  _x: 0,
60
- _y: 7,
61
- _height: 8,
34
+ _y: 2,
35
+ _height: 5,
62
36
  _width: 4
63
37
  },
64
38
  {
@@ -231,13 +205,40 @@ export class DeviceInfoDashboardComponent {
231
205
  }
232
206
  },
233
207
  {
234
- name: 'deviceStatusWidget',
235
- title: gettext('Device status'),
208
+ name: 'Asset Properties',
209
+ title: gettext('Device data'),
210
+ config: {
211
+ options: {
212
+ properties: [],
213
+ allowDisplayAndEditKnownProperties: true,
214
+ hiddenPropertiesKeyPaths: ['owner']
215
+ }
216
+ },
236
217
  _x: 0,
237
- _y: 2,
238
- _height: 5,
218
+ _y: 7,
219
+ _height: 8,
239
220
  _width: 4
240
221
  },
222
+ {
223
+ name: 'Alarm list',
224
+ title: gettext('Active, critical alarms'),
225
+ _x: 4,
226
+ _y: 7,
227
+ _height: 4,
228
+ _width: 4,
229
+ config: {
230
+ options: {
231
+ orderMode: 'ACTIVE_FIRST',
232
+ severity: { CRITICAL: true },
233
+ status: {
234
+ ACTIVE: true,
235
+ ACKNOWLEDGED: false,
236
+ CLEARED: false
237
+ },
238
+ types: []
239
+ }
240
+ }
241
+ },
241
242
  {
242
243
  name: 'deviceGroupAssignmentWidget',
243
244
  title: gettext('Group assignment'),
@@ -246,15 +247,6 @@ export class DeviceInfoDashboardComponent {
246
247
  _height: 4,
247
248
  _width: 4
248
249
  },
249
- {
250
- componentId: 'assetNotesWidget',
251
- title: gettext('Message of the day'),
252
- classes: { 'panel-title-hidden': true },
253
- _x: 0,
254
- _y: 0,
255
- _height: 2,
256
- _width: 12
257
- },
258
250
  {
259
251
  componentId: 'Map',
260
252
  title: gettext('Location'),
@@ -289,4 +281,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
289
281
  type: Component,
290
282
  args: [{ selector: 'c8y-device-info-dashboard-dashboard', template: "<c8y-title>\n {{ title }}\n</c8y-title>\n<c8y-widgets-dashboard\n [context]=\"currentContext$ | async\"\n [widgets]=\"widgets$ | async\"\n [settings]=\"{\n isLoading: isLoading$ | async,\n isDisabled: true,\n canDelete: false,\n translateWidgetTitle: true,\n allowFullscreen: false,\n title: false\n }\"\n>\n</c8y-widgets-dashboard>\n" }]
291
283
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.WidgetService }, { type: i3.TranslateService }]; } });
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWluZm8tZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2RldmljZS1pbmZvLWRhc2hib2FyZC9kZXZpY2UtaW5mby1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvZGV2aWNlLWluZm8tZGFzaGJvYXJkL2RldmljZS1pbmZvLWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7OztBQVFsRCxNQUFNLE9BQU8sNEJBQTRCO0lBc1F2QyxZQUNVLE1BQXNCLEVBQ3RCLGFBQTRCLEVBQzVCLGdCQUFrQztRQUZsQyxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBdFE1QyxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFJdkMsd0JBQW1CLEdBQUc7WUFDcEI7Z0JBQ0UsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLEtBQUssRUFBRSxPQUFPLENB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LEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRTtZQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDOUIsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLElBQUksQ0FDakQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDeEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNiLEdBQUcsTUFBTTtZQUNULE1BQU0sRUFBRTtnQkFDTixHQUFHLE1BQU0sQ0FBQyxNQUFNO2dCQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXO2FBQ3JEO1NBQ0YsQ0FBQyxDQUFDLEVBQ0gsT0FBTyxFQUFFLENBQ1YsQ0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDdkYsR0FBRyxFQUFFO1lBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QyxDQUFDOzt5SEF2U1UsNEJBQTRCOzZHQUE1Qiw0QkFBNEIsMkVDZHpDLHVXQWdCQTsyRkRGYSw0QkFBNEI7a0JBSnhDLFNBQVM7K0JBQ0UscUNBQXFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBnZXR0ZXh0LCBXaWRnZXQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBtZXJnZU1hcCwgdG9BcnJheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFdpZGdldFNlcnZpY2UgfSBmcm9tICcuLi93aWRnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGV2aWNlLWluZm8tZGFzaGJvYXJkLWRhc2hib2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXZpY2UtaW5mby1kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERldmljZUluZm9EYXNoYm9hcmRDb21wb25lbnQge1xuICBjdXJyZW50Q29udGV4dCQ6IE9ic2VydmFibGU8SU1hbmFnZWRPYmplY3Q+O1xuICB3aWRnZXRzJDogT2JzZXJ2YWJsZTxXaWRnZXRbXT47XG4gIGlzTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICB0aXRsZTogc3RyaW5nO1xuICB3aWRnZXRzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgREVWSUNFX0lORk9fV0lER0VUUyA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnQWxhcm0gbGlzdCcsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnQWN0aXZlLCBjcml0aWNhbCBhbGFybXMnKSxcbiAgICAgIF94OiA0LFxuICAgICAgX3k6IDcsXG4gICAgICBfaGVpZ2h0OiA0LFxuICAgICAgX3dpZHRoOiA0LFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBvcmRlck1vZGU6ICdBQ1RJVkVfRklSU1QnLFxuICAgICAgICAgIHNldmVyaXR5OiB7IENSSVRJQ0FMOiB0cnVlIH0sXG4gICAgICAgICAgc3RhdHVzOiB7XG4gICAgICAgICAgICBBQ1RJVkU6IHRydWUsXG4gICAgICAgICAgICBBQ0tOT1dMRURHRUQ6IGZhbHNlLFxuICAgICAgICAgICAgQ0xFQVJFRDogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR5cGVzOiBbXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTWFwJyxcbiAgICAgIHRpdGxlOiBnZXR0ZXh0KCdMb2NhdGlvbicpLFxuICAgICAgX3g6IDQsXG4gICAgICBfeTogMTEsXG4gICAgICBfaGVpZ2h0OiA0LFxuICAgICAgX3dpZHRoOiA4XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnQXNzZXQgUHJvcGVydGllcycsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnRGV2aWNlIGRhdGEnKSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgICAgYWxsb3dEaXNwbGF5QW5kRWRpdEtub3duUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICBoaWRkZW5Qcm9wZXJ0aWVzS2V5UGF0aHM6IFsnb3duZXInXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3g6IDAsXG4gICAgICBfeTogNyxcbiAgICAgIF9oZWlnaHQ6IDgsXG4gICAgICBfd2lkdGg6IDRcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdEYXRhIHBvaW50cyBncmFwaCcsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnRGV2aWNlIGFuZCBjb21tdW5pY2F0aW9uJyksXG4gICAgICBfeDogNCxcbiAgICAgIF95OiAyLFxuICAgICAgX2hlaWdodDogNSxcbiAgICAgIF93aWR0aDogOCxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBpbnRlcnZhbDogJ2hvdXJzJyxcbiAgICAgICAgYWdncmVnYXRpb246ICdOT05FJyxcbiAgICAgICAgcmVhbHRpbWU6IHRydWUsXG4gICAgICAgIGRhdGFwb2ludHNJbml0aWFsRGlzcGxheUxpbWl0OiAzLFxuICAgICAgICBkYXRhcG9pbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfQmF0dGVyeScsXG4gICAgICAgICAgICBzZXJpZXM6ICdsZXZlbCcsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0JhdHRlcnk6IGxldmVsJyksXG4gICAgICAgICAgICB1bml0OiAnJScsXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyM1ZTA3YjMnLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X1NpZ25hbFN0cmVuZ3RoJyxcbiAgICAgICAgICAgIHNlcmllczogJ3Jzc2knLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdTaWduYWw6IFJTU0knKSxcbiAgICAgICAgICAgIHVuaXQ6ICdkQm0nLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjYTdkMGYxJyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9NZW1vcnlNZWFzdXJlbWVudCcsXG4gICAgICAgICAgICBzZXJpZXM6ICdVc2VkJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnTWVtb3J5OiB1c2VkJyksXG4gICAgICAgICAgICB1bml0OiAnTUInLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjZjc1MjI5JyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9DUFVNZWFzdXJlbWVudCcsXG4gICAgICAgICAgICBzZXJpZXM6ICdXb3JrbG9hZCcsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0NQVTogd29ya2xvYWQnKSxcbiAgICAgICAgICAgIHVuaXQ6ICclJyxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnI2IyNGYzZScsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfTmV0d29ya1N0YXRpc3RpY3MnLFxuICAgICAgICAgICAgc2VyaWVzOiAnVXBsb2FkJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnTmV0d29yazogdXBsb2FkJyksXG4gICAgICAgICAgICB1bml0OiAnS0IvcycsXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyM4OGMwMzknLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X1NpZ25hbFN0cmVuZ3RoJyxcbiAgICAgICAgICAgIHNlcmllczogJ1JDU1AnLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdTaWduYWw6IFJDU1AnKSxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzVlMmYxOScsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfU2lnbmFsU3RyZW5ndGgnLFxuICAgICAgICAgICAgc2VyaWVzOiAnUlNDUCcsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NpZ25hbDogUlNDUCcpLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjNWUyZjE5JyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9TaWduYWxTdHJlbmd0aCcsXG4gICAgICAgICAgICBzZXJpZXM6ICdSU1JQJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnU2lnbmFsOiBSU1JQJyksXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyM0M2JhM2InLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X1NpZ25hbFN0cmVuZ3RoJyxcbiAgICAgICAgICAgIHNlcmllczogJ1JTUlEnLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdTaWduYWw6IFJTUlEnKSxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzE0YjBiMycsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfU2lnbmFsU3RyZW5ndGgnLFxuICAgICAgICAgICAgc2VyaWVzOiAnYmVyJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnU2lnbmFsOiBCRVInKSxcbiAgICAgICAgICAgIHVuaXQ6ICclJyxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzQ0ZmYzMycsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfU2lnbmFsU3RyZW5ndGgnLFxuICAgICAgICAgICAgc2VyaWVzOiAnRUNOMCcsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NpZ25hbDogRUNOMCcpLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjODczZWZhJyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9OZXR3b3JrU3RhdGlzdGljcycsXG4gICAgICAgICAgICBzZXJpZXM6ICdEb3dubG9hZCcsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ05ldHdvcms6IGRvd25sb2FkJyksXG4gICAgICAgICAgICB1bml0OiAnS0IvcycsXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyNmMjdhNDUnLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X01lbW9yeU1lYXN1cmVtZW50JyxcbiAgICAgICAgICAgIHNlcmllczogJ1RvdGFsJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnTWVtb3J5OiB0b3RhbCcpLFxuICAgICAgICAgICAgdW5pdDogJ01CJyxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnI2RhZGQ4YycsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgYWxhcm1zRXZlbnRzQ29uZmlnczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnYzh5X0xvY2F0aW9uVXBkYXRlJyxcbiAgICAgICAgICAgIHRpbWVsaW5lVHlwZTogJ0VWRU5UJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzZmNmNkMCcsXG4gICAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdjOHlfTG9jYXRpb25VcGRhdGUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnYzh5X1VuYXZhaWxhYmlsaXR5QWxhcm0nLFxuICAgICAgICAgICAgdGltZWxpbmVUeXBlOiAnQUxBUk0nLFxuICAgICAgICAgICAgY29sb3I6ICcjMzc1YmYyJyxcbiAgICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2M4eV9VbmF2YWlsYWJpbGl0eUFsYXJtJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgdHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQoY29uZmlnLCBjb250ZXh0LCBjOHlEZXZpY2VzKSB7XG4gICAgICAgICduZ0luamVjdCc7XG4gICAgICAgIHJldHVybiBjOHlEZXZpY2VzXG4gICAgICAgICAgLmdldFN1cHBvcnRlZFNlcmllcyhjb250ZXh0LmlkKVxuICAgICAgICAgIC50aGVuKHN1cHBvcnRlZE1lYXN1cmVtZW50U2VyaWVzID0+XG4gICAgICAgICAgICBjb25maWcuZGF0YXBvaW50cy5maWx0ZXIoY29uZmlnTWVhc3VyZW1lbnQgPT5cbiAgICAgICAgICAgICAgc3VwcG9ydGVkTWVhc3VyZW1lbnRTZXJpZXMuZmluZChcbiAgICAgICAgICAgICAgICBzdXBwb3J0ZWRTZXJpZXMgPT5cbiAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZFNlcmllcy5mcmFnbWVudCA9PT0gY29uZmlnTWVhc3VyZW1lbnQuZnJhZ21lbnQgJiZcbiAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZFNlcmllcy5zZXJpZXMgPT09IGNvbmZpZ01lYXN1cmVtZW50LnNlcmllc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC50aGVuKGRhdGFwb2ludHMgPT4gKHsgLi4uY29uZmlnLCAuLi57IGRhdGFwb2ludHMgfSB9KSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZGV2aWNlU3RhdHVzV2lkZ2V0JyxcbiAgICAgIHRpdGxlOiBnZXR0ZXh0KCdEZXZpY2Ugc3RhdHVzJyksXG4gICAgICBfeDogMCxcbiAgICAgIF95OiAyLFxuICAgICAgX2hlaWdodDogNSxcbiAgICAgIF93aWR0aDogNFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2RldmljZUdyb3VwQXNzaWdubWVudFdpZGdldCcsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnR3JvdXAgYXNzaWdubWVudCcpLFxuICAgICAgX3g6IDgsXG4gICAgICBfeTogNyxcbiAgICAgIF9oZWlnaHQ6IDQsXG4gICAgICBfd2lkdGg6IDRcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvbXBvbmVudElkOiAnYXNzZXROb3Rlc1dpZGdldCcsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnTWVzc2FnZSBvZiB0aGUgZGF5JyksXG4gICAgICBjbGFzc2VzOiB7ICdwYW5lbC10aXRsZS1oaWRkZW4nOiB0cnVlIH0sXG4gICAgICBfeDogMCxcbiAgICAgIF95OiAwLFxuICAgICAgX2hlaWdodDogMixcbiAgICAgIF93aWR0aDogMTJcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvbXBvbmVudElkOiAnTWFwJyxcbiAgICAgIHRpdGxlOiBnZXR0ZXh0KCdMb2NhdGlvbicpLFxuICAgICAgX3g6IDQsXG4gICAgICBfeTogMTEsXG4gICAgICBfaGVpZ2h0OiA0LFxuICAgICAgX3dpZHRoOiA4XG4gICAgfVxuICBdIGFzIFdpZGdldFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHdpZGdldFNlcnZpY2U6IFdpZGdldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuY3VycmVudENvbnRleHQkID0gdGhpcy5yb3V0ZXIucGFyZW50LmRhdGEucGlwZShcbiAgICAgIG1hcCgoeyBjb250ZXh0RGF0YSB9KSA9PiB7XG4gICAgICAgIHRoaXMudGl0bGUgPSBjb250ZXh0RGF0YS5uYW1lO1xuICAgICAgICByZXR1cm4gY29udGV4dERhdGE7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLndpZGdldHMkID0gZnJvbSh0aGlzLkRFVklDRV9JTkZPX1dJREdFVFMpLnBpcGUoXG4gICAgICBtZXJnZU1hcCh3aWRnZXQgPT4gdGhpcy53aWRnZXRTZXJ2aWNlLm1hcExlZ2FjeSh3aWRnZXQpKSxcbiAgICAgIG1hcCh3aWRnZXQgPT4gKHtcbiAgICAgICAgLi4ud2lkZ2V0LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAuLi53aWRnZXQuY29uZmlnLFxuICAgICAgICAgIGRldmljZTogdGhpcy5yb3V0ZXIucGFyZW50LnNuYXBzaG90LmRhdGEuY29udGV4dERhdGFcbiAgICAgICAgfVxuICAgICAgfSkpLFxuICAgICAgdG9BcnJheSgpXG4gICAgKTtcblxuICAgIHRoaXMud2lkZ2V0c1N1YnNjcmlwdGlvbiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2lkZ2V0cyQsIHRoaXMuY3VycmVudENvbnRleHQkXSkuc3Vic2NyaWJlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMud2lkZ2V0c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPlxuICB7eyB0aXRsZSB9fVxuPC9jOHktdGl0bGU+XG48Yzh5LXdpZGdldHMtZGFzaGJvYXJkXG4gIFtjb250ZXh0XT1cImN1cnJlbnRDb250ZXh0JCB8IGFzeW5jXCJcbiAgW3dpZGdldHNdPVwid2lkZ2V0cyQgfCBhc3luY1wiXG4gIFtzZXR0aW5nc109XCJ7XG4gICAgaXNMb2FkaW5nOiBpc0xvYWRpbmckIHwgYXN5bmMsXG4gICAgaXNEaXNhYmxlZDogdHJ1ZSxcbiAgICBjYW5EZWxldGU6IGZhbHNlLFxuICAgIHRyYW5zbGF0ZVdpZGdldFRpdGxlOiB0cnVlLFxuICAgIGFsbG93RnVsbHNjcmVlbjogZmFsc2UsXG4gICAgdGl0bGU6IGZhbHNlXG4gIH1cIlxuPlxuPC9jOHktd2lkZ2V0cy1kYXNoYm9hcmQ+XG4iXX0=
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLWluZm8tZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2RldmljZS1pbmZvLWRhc2hib2FyZC9kZXZpY2UtaW5mby1kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29udGV4dC1kYXNoYm9hcmQvZGV2aWNlLWluZm8tZGFzaGJvYXJkL2RldmljZS1pbmZvLWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFVLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7OztBQVFsRCxNQUFNLE9BQU8sNEJBQTRCO0lBOFB2QyxZQUNVLE1BQXNCLEVBQ3RCLGFBQTRCLEVBQzVCLGdCQUFrQztRQUZsQyxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBOVA1QyxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFJdkMsd0JBQW1CLEdBQUc7WUFDcEI7Z0JBQ0UsV0FBVyxFQUFFLGtCQUFrQjtnQkFDL0IsS0FBSyxFQUFFLE9BQU8s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QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxJQUFJLENBQ2pELFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ3hELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDYixHQUFHLE1BQU07WUFDVCxNQUFNLEVBQUU7Z0JBQ04sR0FBRyxNQUFNLENBQUMsTUFBTTtnQkFDaEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVzthQUNyRDtTQUNGLENBQUMsQ0FBQyxFQUNILE9BQU8sRUFBRSxDQUNWLENBQUM7UUFFRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ3ZGLEdBQUcsRUFBRTtZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekMsQ0FBQzs7eUhBL1JVLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLDJFQ2R6Qyx1V0FnQkE7MkZERmEsNEJBQTRCO2tCQUp4QyxTQUFTOytCQUNFLHFDQUFxQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZ2V0dGV4dCwgV2lkZ2V0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAsIHRvQXJyYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBXaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi4vd2lkZ2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRldmljZS1pbmZvLWRhc2hib2FyZC1kYXNoYm9hcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGV2aWNlLWluZm8tZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEZXZpY2VJbmZvRGFzaGJvYXJkQ29tcG9uZW50IHtcbiAgY3VycmVudENvbnRleHQkOiBPYnNlcnZhYmxlPElNYW5hZ2VkT2JqZWN0PjtcbiAgd2lkZ2V0cyQ6IE9ic2VydmFibGU8V2lkZ2V0W10+O1xuICBpc0xvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgdGl0bGU6IHN0cmluZztcbiAgd2lkZ2V0c1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIERFVklDRV9JTkZPX1dJREdFVFMgPSBbXG4gICAge1xuICAgICAgY29tcG9uZW50SWQ6ICdhc3NldE5vdGVzV2lkZ2V0JyxcbiAgICAgIHRpdGxlOiBnZXR0ZXh0KCdNZXNzYWdlIG9mIHRoZSBkYXknKSxcbiAgICAgIGNsYXNzZXM6IHsgJ3BhbmVsLXRpdGxlLWhpZGRlbic6IHRydWUgfSxcbiAgICAgIF94OiAwLFxuICAgICAgX3k6IDAsXG4gICAgICBfaGVpZ2h0OiAyLFxuICAgICAgX3dpZHRoOiAxMlxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2RldmljZVN0YXR1c1dpZGdldCcsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnRGV2aWNlIHN0YXR1cycpLFxuICAgICAgX3g6IDAsXG4gICAgICBfeTogMixcbiAgICAgIF9oZWlnaHQ6IDUsXG4gICAgICBfd2lkdGg6IDRcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdEYXRhIHBvaW50cyBncmFwaCcsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnRGV2aWNlIGFuZCBjb21tdW5pY2F0aW9uJyksXG4gICAgICBfeDogNCxcbiAgICAgIF95OiAyLFxuICAgICAgX2hlaWdodDogNSxcbiAgICAgIF93aWR0aDogOCxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBpbnRlcnZhbDogJ2hvdXJzJyxcbiAgICAgICAgYWdncmVnYXRpb246ICdOT05FJyxcbiAgICAgICAgcmVhbHRpbWU6IHRydWUsXG4gICAgICAgIGRhdGFwb2ludHNJbml0aWFsRGlzcGxheUxpbWl0OiAzLFxuICAgICAgICBkYXRhcG9pbnRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfQmF0dGVyeScsXG4gICAgICAgICAgICBzZXJpZXM6ICdsZXZlbCcsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0JhdHRlcnk6IGxldmVsJyksXG4gICAgICAgICAgICB1bml0OiAnJScsXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyM1ZTA3YjMnLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X1NpZ25hbFN0cmVuZ3RoJyxcbiAgICAgICAgICAgIHNlcmllczogJ3Jzc2knLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdTaWduYWw6IFJTU0knKSxcbiAgICAgICAgICAgIHVuaXQ6ICdkQm0nLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjYTdkMGYxJyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9NZW1vcnlNZWFzdXJlbWVudCcsXG4gICAgICAgICAgICBzZXJpZXM6ICdVc2VkJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnTWVtb3J5OiB1c2VkJyksXG4gICAgICAgICAgICB1bml0OiAnTUInLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjZjc1MjI5JyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9DUFVNZWFzdXJlbWVudCcsXG4gICAgICAgICAgICBzZXJpZXM6ICdXb3JrbG9hZCcsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0NQVTogd29ya2xvYWQnKSxcbiAgICAgICAgICAgIHVuaXQ6ICclJyxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnI2IyNGYzZScsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfTmV0d29ya1N0YXRpc3RpY3MnLFxuICAgICAgICAgICAgc2VyaWVzOiAnVXBsb2FkJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnTmV0d29yazogdXBsb2FkJyksXG4gICAgICAgICAgICB1bml0OiAnS0IvcycsXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyM4OGMwMzknLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X1NpZ25hbFN0cmVuZ3RoJyxcbiAgICAgICAgICAgIHNlcmllczogJ1JDU1AnLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdTaWduYWw6IFJDU1AnKSxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzVlMmYxOScsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfU2lnbmFsU3RyZW5ndGgnLFxuICAgICAgICAgICAgc2VyaWVzOiAnUlNDUCcsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NpZ25hbDogUlNDUCcpLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjNWUyZjE5JyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9TaWduYWxTdHJlbmd0aCcsXG4gICAgICAgICAgICBzZXJpZXM6ICdSU1JQJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnU2lnbmFsOiBSU1JQJyksXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyM0M2JhM2InLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X1NpZ25hbFN0cmVuZ3RoJyxcbiAgICAgICAgICAgIHNlcmllczogJ1JTUlEnLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdTaWduYWw6IFJTUlEnKSxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzE0YjBiMycsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfU2lnbmFsU3RyZW5ndGgnLFxuICAgICAgICAgICAgc2VyaWVzOiAnYmVyJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnU2lnbmFsOiBCRVInKSxcbiAgICAgICAgICAgIHVuaXQ6ICclJyxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzQ0ZmYzMycsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnJhZ21lbnQ6ICdjOHlfU2lnbmFsU3RyZW5ndGgnLFxuICAgICAgICAgICAgc2VyaWVzOiAnRUNOMCcsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NpZ25hbDogRUNOMCcpLFxuICAgICAgICAgICAgcmVuZGVyVHlwZTogJ21pbicsXG4gICAgICAgICAgICBsaW5lVHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgY29sb3I6ICcjODczZWZhJyxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmcmFnbWVudDogJ2M4eV9OZXR3b3JrU3RhdGlzdGljcycsXG4gICAgICAgICAgICBzZXJpZXM6ICdEb3dubG9hZCcsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ05ldHdvcms6IGRvd25sb2FkJyksXG4gICAgICAgICAgICB1bml0OiAnS0IvcycsXG4gICAgICAgICAgICByZW5kZXJUeXBlOiAnbWluJyxcbiAgICAgICAgICAgIGxpbmVUeXBlOiAnbGluZScsXG4gICAgICAgICAgICBjb2xvcjogJyNmMjdhNDUnLFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZyYWdtZW50OiAnYzh5X01lbW9yeU1lYXN1cmVtZW50JyxcbiAgICAgICAgICAgIHNlcmllczogJ1RvdGFsJyxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnTWVtb3J5OiB0b3RhbCcpLFxuICAgICAgICAgICAgdW5pdDogJ01CJyxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6ICdtaW4nLFxuICAgICAgICAgICAgbGluZVR5cGU6ICdsaW5lJyxcbiAgICAgICAgICAgIGNvbG9yOiAnI2RhZGQ4YycsXG4gICAgICAgICAgICBfX2FjdGl2ZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgYWxhcm1zRXZlbnRzQ29uZmlnczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnYzh5X0xvY2F0aW9uVXBkYXRlJyxcbiAgICAgICAgICAgIHRpbWVsaW5lVHlwZTogJ0VWRU5UJyxcbiAgICAgICAgICAgIGNvbG9yOiAnIzZmNmNkMCcsXG4gICAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdjOHlfTG9jYXRpb25VcGRhdGUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX19hY3RpdmU6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnYzh5X1VuYXZhaWxhYmlsaXR5QWxhcm0nLFxuICAgICAgICAgICAgdGltZWxpbmVUeXBlOiAnQUxBUk0nLFxuICAgICAgICAgICAgY29sb3I6ICcjMzc1YmYyJyxcbiAgICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2M4eV9VbmF2YWlsYWJpbGl0eUFsYXJtJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF9fYWN0aXZlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgdHJhbnNmb3JtQ29uZmlnV2l0aENvbnRleHQoY29uZmlnLCBjb250ZXh0LCBjOHlEZXZpY2VzKSB7XG4gICAgICAgICduZ0luamVjdCc7XG4gICAgICAgIHJldHVybiBjOHlEZXZpY2VzXG4gICAgICAgICAgLmdldFN1cHBvcnRlZFNlcmllcyhjb250ZXh0LmlkKVxuICAgICAgICAgIC50aGVuKHN1cHBvcnRlZE1lYXN1cmVtZW50U2VyaWVzID0+XG4gICAgICAgICAgICBjb25maWcuZGF0YXBvaW50cy5maWx0ZXIoY29uZmlnTWVhc3VyZW1lbnQgPT5cbiAgICAgICAgICAgICAgc3VwcG9ydGVkTWVhc3VyZW1lbnRTZXJpZXMuZmluZChcbiAgICAgICAgICAgICAgICBzdXBwb3J0ZWRTZXJpZXMgPT5cbiAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZFNlcmllcy5mcmFnbWVudCA9PT0gY29uZmlnTWVhc3VyZW1lbnQuZnJhZ21lbnQgJiZcbiAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZFNlcmllcy5zZXJpZXMgPT09IGNvbmZpZ01lYXN1cmVtZW50LnNlcmllc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC50aGVuKGRhdGFwb2ludHMgPT4gKHsgLi4uY29uZmlnLCAuLi57IGRhdGFwb2ludHMgfSB9KSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnQXNzZXQgUHJvcGVydGllcycsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnRGV2aWNlIGRhdGEnKSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgICAgYWxsb3dEaXNwbGF5QW5kRWRpdEtub3duUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICBoaWRkZW5Qcm9wZXJ0aWVzS2V5UGF0aHM6IFsnb3duZXInXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3g6IDAsXG4gICAgICBfeTogNyxcbiAgICAgIF9oZWlnaHQ6IDgsXG4gICAgICBfd2lkdGg6IDRcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdBbGFybSBsaXN0JyxcbiAgICAgIHRpdGxlOiBnZXR0ZXh0KCdBY3RpdmUsIGNyaXRpY2FsIGFsYXJtcycpLFxuICAgICAgX3g6IDQsXG4gICAgICBfeTogNyxcbiAgICAgIF9oZWlnaHQ6IDQsXG4gICAgICBfd2lkdGg6IDQsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIG9yZGVyTW9kZTogJ0FDVElWRV9GSVJTVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6IHsgQ1JJVElDQUw6IHRydWUgfSxcbiAgICAgICAgICBzdGF0dXM6IHtcbiAgICAgICAgICAgIEFDVElWRTogdHJ1ZSxcbiAgICAgICAgICAgIEFDS05PV0xFREdFRDogZmFsc2UsXG4gICAgICAgICAgICBDTEVBUkVEOiBmYWxzZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZXM6IFtdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkZXZpY2VHcm91cEFzc2lnbm1lbnRXaWRnZXQnLFxuICAgICAgdGl0bGU6IGdldHRleHQoJ0dyb3VwIGFzc2lnbm1lbnQnKSxcbiAgICAgIF94OiA4LFxuICAgICAgX3k6IDcsXG4gICAgICBfaGVpZ2h0OiA0LFxuICAgICAgX3dpZHRoOiA0XG4gICAgfSxcbiAgICB7XG4gICAgICBjb21wb25lbnRJZDogJ01hcCcsXG4gICAgICB0aXRsZTogZ2V0dGV4dCgnTG9jYXRpb24nKSxcbiAgICAgIF94OiA0LFxuICAgICAgX3k6IDExLFxuICAgICAgX2hlaWdodDogNCxcbiAgICAgIF93aWR0aDogOFxuICAgIH1cbiAgXSBhcyBXaWRnZXRbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSB3aWRnZXRTZXJ2aWNlOiBXaWRnZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmN1cnJlbnRDb250ZXh0JCA9IHRoaXMucm91dGVyLnBhcmVudC5kYXRhLnBpcGUoXG4gICAgICBtYXAoKHsgY29udGV4dERhdGEgfSkgPT4ge1xuICAgICAgICB0aGlzLnRpdGxlID0gY29udGV4dERhdGEubmFtZTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHREYXRhO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy53aWRnZXRzJCA9IGZyb20odGhpcy5ERVZJQ0VfSU5GT19XSURHRVRTKS5waXBlKFxuICAgICAgbWVyZ2VNYXAod2lkZ2V0ID0+IHRoaXMud2lkZ2V0U2VydmljZS5tYXBMZWdhY3kod2lkZ2V0KSksXG4gICAgICBtYXAod2lkZ2V0ID0+ICh7XG4gICAgICAgIC4uLndpZGdldCxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4ud2lkZ2V0LmNvbmZpZyxcbiAgICAgICAgICBkZXZpY2U6IHRoaXMucm91dGVyLnBhcmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhXG4gICAgICAgIH1cbiAgICAgIH0pKSxcbiAgICAgIHRvQXJyYXkoKVxuICAgICk7XG5cbiAgICB0aGlzLndpZGdldHNTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldHMkLCB0aGlzLmN1cnJlbnRDb250ZXh0JF0pLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLndpZGdldHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT5cbiAge3sgdGl0bGUgfX1cbjwvYzh5LXRpdGxlPlxuPGM4eS13aWRnZXRzLWRhc2hib2FyZFxuICBbY29udGV4dF09XCJjdXJyZW50Q29udGV4dCQgfCBhc3luY1wiXG4gIFt3aWRnZXRzXT1cIndpZGdldHMkIHwgYXN5bmNcIlxuICBbc2V0dGluZ3NdPVwie1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nJCB8IGFzeW5jLFxuICAgIGlzRGlzYWJsZWQ6IHRydWUsXG4gICAgY2FuRGVsZXRlOiBmYWxzZSxcbiAgICB0cmFuc2xhdGVXaWRnZXRUaXRsZTogdHJ1ZSxcbiAgICBhbGxvd0Z1bGxzY3JlZW46IGZhbHNlLFxuICAgIHRpdGxlOiBmYWxzZVxuICB9XCJcbj5cbjwvYzh5LXdpZGdldHMtZGFzaGJvYXJkPlxuIl19