@bizdoc/core 1.17.9 → 1.17.10

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 (37) hide show
  1. package/assets/bizdoc-schema.json +2 -2
  2. package/esm2020/lib/admin/architecture/declarations.mjs +1 -8
  3. package/esm2020/lib/admin/architecture/designer-element.component.mjs +20 -4
  4. package/esm2020/lib/admin/architecture/designer.base.mjs +1 -9
  5. package/esm2020/lib/admin/architecture/elements/action.component.mjs +3 -3
  6. package/esm2020/lib/admin/architecture/elements/analysis-view.component.mjs +8 -8
  7. package/esm2020/lib/admin/architecture/elements/analysis-widget.component.mjs +8 -8
  8. package/esm2020/lib/admin/architecture/elements/attribute.component.mjs +1 -1
  9. package/esm2020/lib/admin/architecture/elements/control.component.mjs +1 -1
  10. package/esm2020/lib/admin/architecture/elements/cube.component.mjs +24 -24
  11. package/esm2020/lib/admin/architecture/elements/folder.component.mjs +3 -3
  12. package/esm2020/lib/admin/architecture/elements/form-invite.dialog.mjs +3 -3
  13. package/esm2020/lib/admin/architecture/elements/form.component.mjs +3 -3
  14. package/esm2020/lib/admin/architecture/elements/guide.component.mjs +3 -3
  15. package/esm2020/lib/admin/architecture/elements/matrix-view.component.mjs +8 -3
  16. package/esm2020/lib/admin/architecture/elements/node.component.mjs +1 -1
  17. package/esm2020/lib/admin/architecture/elements/policy.component.mjs +1 -1
  18. package/esm2020/lib/admin/architecture/elements/report.component.mjs +1 -1
  19. package/esm2020/lib/admin/architecture/elements/role.component.mjs +3 -3
  20. package/esm2020/lib/admin/architecture/elements/rule.component.mjs +1 -1
  21. package/esm2020/lib/admin/architecture/elements/state.component.mjs +1 -1
  22. package/esm2020/lib/admin/architecture/elements/type.component.mjs +7 -6
  23. package/esm2020/lib/admin/architecture/elements/utility.component.mjs +1 -1
  24. package/esm2020/lib/admin/architecture/elements/view.component.mjs +1 -1
  25. package/esm2020/lib/admin/architecture/elements/widget.component.mjs +1 -1
  26. package/esm2020/lib/core/translations.mjs +2 -2
  27. package/esm2020/lib/system.module.mjs +47 -7
  28. package/fesm2015/bizdoc-core.mjs +130 -86
  29. package/fesm2015/bizdoc-core.mjs.map +1 -1
  30. package/fesm2020/bizdoc-core.mjs +130 -86
  31. package/fesm2020/bizdoc-core.mjs.map +1 -1
  32. package/lib/admin/architecture/declarations.d.ts +0 -1
  33. package/lib/admin/architecture/designer-element.component.d.ts +5 -2
  34. package/lib/admin/architecture/designer.base.d.ts +0 -2
  35. package/lib/admin/architecture/elements/cube.component.d.ts +0 -1
  36. package/lib/admin/architecture/elements/matrix-view.component.d.ts +1 -0
  37. package/package.json +1 -1
@@ -50,9 +50,9 @@ export class FolderDesignComponent extends DesignerTypeElementComponent {
50
50
  }
51
51
  }
52
52
  FolderDesignComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FolderDesignComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
53
- FolderDesignComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: FolderDesignComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<bizdoc-designer-element [form]=\"form\" [privileges]=\"true\" [icon]=\"true\" [state]=\"state\">\r\n <ng-template bizdocEditContent>\r\n <ng-container *ngIf=\"view; else main\">\r\n <h2 class=\"mat-title\">{{context.title|translate}}</h2>\r\n <div (document:keydown.escape)=\"closeView($event)\" #element class=\"column\">\r\n <ng-container *ngTemplateOutlet=\"view; context: context\"></ng-container>\r\n </div>\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"closeView()\" type=\"button\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon>keyboard_return</mat-icon></button>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n<!---->\r\n<ng-template #main>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <ng-container formGroupName=\"filters\" *ngIf=\"cubes.length\" class=\"column\">\r\n <h2 class=\"mat-title\">{{'Filters'|translate}}</h2>\r\n <mat-form-field *ngIf=\"cubes.length>1\">\r\n <mat-label>{{'Cube'|translate}}</mat-label>\r\n <mat-select (selectionChange)=\"cubeSelected($event)\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option *ngFor=\"let c of cubes\" [value]=\"c\">{{c.title|localizedString}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Axes'|translate}}</mat-label>\r\n <mat-select formControlName=\"axes\" multiple>\r\n <mat-option *ngFor=\"let a of cube?.axes\" [value]=\"a.name\">{{a.title}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n <h2 class=\"mat-title row\">\r\n {{'Columns'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(columns, newColumn(), 'Column', columnform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"columns\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, columns)\">\r\n <tr class=\"mat-row\" *ngFor=\"let c of columns.controls; index as index\" [formGroup]=\"c\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\" width=\"99%\">\r\n {{c.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\" style=\"white-space: pre;\">\r\n <button mat-icon-button (click)=\"edit(c, 'Column', columnform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"columns.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n </form>\r\n</ng-template>\r\n<ng-template #columnform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required [matAutocomplete]=\"names\" />\r\n <mat-autocomplete #names=\"matAutocomplete\" (optionSelected)=\"form.get('title').setValue($event.option.getLabel())\">\r\n <mat-option value=\"number\">{{'Number'|translate}}</mat-option>\r\n <mat-option value=\"subject\">{{'Subject'|translate}}</mat-option>\r\n <mat-option value=\"value\">{{'Value'|translate}}</mat-option>\r\n <mat-option value=\"owner\">{{'Owner'|translate}}</mat-option>\r\n <mat-option value=\"sender\">{{'Sender'|translate}}</mat-option>\r\n <mat-option value=\"received\">{{'Received'|translate}}</mat-option>\r\n <mat-option value=\"receivedAgo\">{{'ReceivedAgo'|translate}}</mat-option>\r\n <mat-option value=\"replied\">{{'Replied'|translate}}</mat-option>\r\n <mat-option value=\"state\">{{'State'|translate}}</mat-option>\r\n <mat-option value=\"issued\">{{'Issued'|translate}}</mat-option>\r\n <mat-option value=\"issuedAgo\">{{'IssuedAgo'|translate}}</mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <mat-label>{{'DataType'|translate}}</mat-label>\r\n <mat-select formControlName=\"type\">\r\n <mat-option value=\"String\">{{'Text'}}</mat-option>\r\n <mat-option value=\"Decimal\">{{'Numeric'}}</mat-option>\r\n <mat-option value=\"Date\">{{'Date'}}</mat-option>\r\n <mat-option value=\"Boolean\">{{'Boolean'}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i3.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "directive", type: i12.EditContentDirective, selector: "[bizdocEditContent]" }, { kind: "component", type: i12.DesignerItemComponent, selector: "bizdoc-designer-element", inputs: ["privileges", "icon", "form", "state"], outputs: ["continue", "save"] }, { kind: "pipe", type: i13.LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] });
53
+ FolderDesignComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: FolderDesignComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<bizdoc-designer-element [form]=\"form\" [privileges]=\"true\" [icon]=\"true\" [view]=\"view\" (back)=\"view = null\" [context]=\"context\">\r\n <ng-template bizdocEditContent>\r\n <div [formGroup]=\"form\" class=\"column\">\r\n <ng-container formGroupName=\"filters\" *ngIf=\"cubes.length\" class=\"column\">\r\n <h2 class=\"mat-title\">{{'Filters'|translate}}</h2>\r\n <mat-form-field *ngIf=\"cubes.length>1\">\r\n <mat-label>{{'Cube'|translate}}</mat-label>\r\n <mat-select (selectionChange)=\"cubeSelected($event)\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option *ngFor=\"let c of cubes\" [value]=\"c\">{{c.title|localizedString}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Axes'|translate}}</mat-label>\r\n <mat-select formControlName=\"axes\" multiple>\r\n <mat-option *ngFor=\"let a of cube?.axes\" [value]=\"a.name\">{{a.title}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n <h2 class=\"mat-title row\">\r\n {{'Columns'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(columns, newColumn(), 'Column', columnform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"columns\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, columns)\">\r\n <tr class=\"mat-row\" *ngFor=\"let c of columns.controls; index as index\" [formGroup]=\"c\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\" width=\"99%\">\r\n {{c.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\" style=\"white-space: pre;\">\r\n <button mat-icon-button (click)=\"edit(c, 'Column', columnform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"columns.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n<!---->\r\n<ng-template #columnform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required [matAutocomplete]=\"names\" />\r\n <mat-autocomplete #names=\"matAutocomplete\" (optionSelected)=\"form.get('title').setValue($event.option.getLabel())\">\r\n <mat-option value=\"number\">{{'Number'|translate}}</mat-option>\r\n <mat-option value=\"subject\">{{'Subject'|translate}}</mat-option>\r\n <mat-option value=\"value\">{{'Value'|translate}}</mat-option>\r\n <mat-option value=\"owner\">{{'Owner'|translate}}</mat-option>\r\n <mat-option value=\"sender\">{{'Sender'|translate}}</mat-option>\r\n <mat-option value=\"received\">{{'Received'|translate}}</mat-option>\r\n <mat-option value=\"receivedAgo\">{{'ReceivedAgo'|translate}}</mat-option>\r\n <mat-option value=\"replied\">{{'Replied'|translate}}</mat-option>\r\n <mat-option value=\"state\">{{'State'|translate}}</mat-option>\r\n <mat-option value=\"issued\">{{'Issued'|translate}}</mat-option>\r\n <mat-option value=\"issuedAgo\">{{'IssuedAgo'|translate}}</mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <mat-label>{{'DataType'|translate}}</mat-label>\r\n <mat-select formControlName=\"type\">\r\n <mat-option value=\"String\">{{'Text'}}</mat-option>\r\n <mat-option value=\"Decimal\">{{'Numeric'}}</mat-option>\r\n <mat-option value=\"Date\">{{'Date'}}</mat-option>\r\n <mat-option value=\"Boolean\">{{'Boolean'}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i3.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "directive", type: i12.EditContentDirective, selector: "[bizdocEditContent]" }, { kind: "component", type: i12.DesignerItemComponent, selector: "bizdoc-designer-element", inputs: ["privileges", "icon", "form", "view", "context"], outputs: ["continue", "back", "save"] }, { kind: "pipe", type: i13.LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] });
54
54
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FolderDesignComponent, decorators: [{
55
55
  type: Component,
56
- args: [{ template: "<bizdoc-designer-element [form]=\"form\" [privileges]=\"true\" [icon]=\"true\" [state]=\"state\">\r\n <ng-template bizdocEditContent>\r\n <ng-container *ngIf=\"view; else main\">\r\n <h2 class=\"mat-title\">{{context.title|translate}}</h2>\r\n <div (document:keydown.escape)=\"closeView($event)\" #element class=\"column\">\r\n <ng-container *ngTemplateOutlet=\"view; context: context\"></ng-container>\r\n </div>\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"closeView()\" type=\"button\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon>keyboard_return</mat-icon></button>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n<!---->\r\n<ng-template #main>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <ng-container formGroupName=\"filters\" *ngIf=\"cubes.length\" class=\"column\">\r\n <h2 class=\"mat-title\">{{'Filters'|translate}}</h2>\r\n <mat-form-field *ngIf=\"cubes.length>1\">\r\n <mat-label>{{'Cube'|translate}}</mat-label>\r\n <mat-select (selectionChange)=\"cubeSelected($event)\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option *ngFor=\"let c of cubes\" [value]=\"c\">{{c.title|localizedString}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Axes'|translate}}</mat-label>\r\n <mat-select formControlName=\"axes\" multiple>\r\n <mat-option *ngFor=\"let a of cube?.axes\" [value]=\"a.name\">{{a.title}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n <h2 class=\"mat-title row\">\r\n {{'Columns'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(columns, newColumn(), 'Column', columnform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"columns\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, columns)\">\r\n <tr class=\"mat-row\" *ngFor=\"let c of columns.controls; index as index\" [formGroup]=\"c\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\" width=\"99%\">\r\n {{c.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\" style=\"white-space: pre;\">\r\n <button mat-icon-button (click)=\"edit(c, 'Column', columnform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"columns.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n </form>\r\n</ng-template>\r\n<ng-template #columnform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required [matAutocomplete]=\"names\" />\r\n <mat-autocomplete #names=\"matAutocomplete\" (optionSelected)=\"form.get('title').setValue($event.option.getLabel())\">\r\n <mat-option value=\"number\">{{'Number'|translate}}</mat-option>\r\n <mat-option value=\"subject\">{{'Subject'|translate}}</mat-option>\r\n <mat-option value=\"value\">{{'Value'|translate}}</mat-option>\r\n <mat-option value=\"owner\">{{'Owner'|translate}}</mat-option>\r\n <mat-option value=\"sender\">{{'Sender'|translate}}</mat-option>\r\n <mat-option value=\"received\">{{'Received'|translate}}</mat-option>\r\n <mat-option value=\"receivedAgo\">{{'ReceivedAgo'|translate}}</mat-option>\r\n <mat-option value=\"replied\">{{'Replied'|translate}}</mat-option>\r\n <mat-option value=\"state\">{{'State'|translate}}</mat-option>\r\n <mat-option value=\"issued\">{{'Issued'|translate}}</mat-option>\r\n <mat-option value=\"issuedAgo\">{{'IssuedAgo'|translate}}</mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <mat-label>{{'DataType'|translate}}</mat-label>\r\n <mat-select formControlName=\"type\">\r\n <mat-option value=\"String\">{{'Text'}}</mat-option>\r\n <mat-option value=\"Decimal\">{{'Numeric'}}</mat-option>\r\n <mat-option value=\"Date\">{{'Date'}}</mat-option>\r\n <mat-option value=\"Boolean\">{{'Boolean'}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n" }]
56
+ args: [{ template: "<bizdoc-designer-element [form]=\"form\" [privileges]=\"true\" [icon]=\"true\" [view]=\"view\" (back)=\"view = null\" [context]=\"context\">\r\n <ng-template bizdocEditContent>\r\n <div [formGroup]=\"form\" class=\"column\">\r\n <ng-container formGroupName=\"filters\" *ngIf=\"cubes.length\" class=\"column\">\r\n <h2 class=\"mat-title\">{{'Filters'|translate}}</h2>\r\n <mat-form-field *ngIf=\"cubes.length>1\">\r\n <mat-label>{{'Cube'|translate}}</mat-label>\r\n <mat-select (selectionChange)=\"cubeSelected($event)\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option *ngFor=\"let c of cubes\" [value]=\"c\">{{c.title|localizedString}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Axes'|translate}}</mat-label>\r\n <mat-select formControlName=\"axes\" multiple>\r\n <mat-option *ngFor=\"let a of cube?.axes\" [value]=\"a.name\">{{a.title}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n <h2 class=\"mat-title row\">\r\n {{'Columns'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(columns, newColumn(), 'Column', columnform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"columns\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, columns)\">\r\n <tr class=\"mat-row\" *ngFor=\"let c of columns.controls; index as index\" [formGroup]=\"c\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\" width=\"99%\">\r\n {{c.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\" style=\"white-space: pre;\">\r\n <button mat-icon-button (click)=\"edit(c, 'Column', columnform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"columns.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n<!---->\r\n<ng-template #columnform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required [matAutocomplete]=\"names\" />\r\n <mat-autocomplete #names=\"matAutocomplete\" (optionSelected)=\"form.get('title').setValue($event.option.getLabel())\">\r\n <mat-option value=\"number\">{{'Number'|translate}}</mat-option>\r\n <mat-option value=\"subject\">{{'Subject'|translate}}</mat-option>\r\n <mat-option value=\"value\">{{'Value'|translate}}</mat-option>\r\n <mat-option value=\"owner\">{{'Owner'|translate}}</mat-option>\r\n <mat-option value=\"sender\">{{'Sender'|translate}}</mat-option>\r\n <mat-option value=\"received\">{{'Received'|translate}}</mat-option>\r\n <mat-option value=\"receivedAgo\">{{'ReceivedAgo'|translate}}</mat-option>\r\n <mat-option value=\"replied\">{{'Replied'|translate}}</mat-option>\r\n <mat-option value=\"state\">{{'State'|translate}}</mat-option>\r\n <mat-option value=\"issued\">{{'Issued'|translate}}</mat-option>\r\n <mat-option value=\"issuedAgo\">{{'IssuedAgo'|translate}}</mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <mat-label>{{'DataType'|translate}}</mat-label>\r\n <mat-select formControlName=\"type\">\r\n <mat-option value=\"String\">{{'Text'}}</mat-option>\r\n <mat-option value=\"Decimal\">{{'Numeric'}}</mat-option>\r\n <mat-option value=\"Date\">{{'Date'}}</mat-option>\r\n <mat-option value=\"Boolean\">{{'Boolean'}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n" }]
57
57
  }] });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9sZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vYXJjaGl0ZWN0dXJlL2VsZW1lbnRzL2ZvbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2FyY2hpdGVjdHVyZS9lbGVtZW50cy9mb2xkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLaEUsTUFBTSxPQUFPLHFCQUFzQixTQUFRLDRCQUE0QjtJQUR2RTs7UUFFVyxZQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsU0FBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ3RCLElBQUksRUFBRSxJQUFJO2dCQUNWLElBQUksRUFBRSxJQUFJO2FBQ1gsQ0FBQztTQUNILENBQUMsQ0FBQztLQXVCSjtJQXBCQyxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDN0csSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzlGO1FBQ0QsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFDRCxTQUFTLENBQUMsTUFBcUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3pELEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDM0QsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxZQUFZLENBQUMsR0FBb0I7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsS0FBb0IsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDOztrSEE5QlUscUJBQXFCO3NHQUFyQixxQkFBcUIsMkVDUmxDLHUzSkEwRkE7MkZEbEZhLHFCQUFxQjtrQkFEakMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgRm9sZGVyQ29sdW1uIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvbW9kZWxzXCI7XHJcbmltcG9ydCB7IERlc2lnbmVyVHlwZUVsZW1lbnRDb21wb25lbnQgfSBmcm9tIFwiLi4vZGVzaWduZXIuYmFzZVwiO1xyXG5pbXBvcnQgeyBFbGVtZW50SW5mbywgRWxlbWVudE1vZGVsLCB9IGZyb20gXCIuLi9kZWNsYXJhdGlvbnNcIjtcclxuaW1wb3J0IHsgTWF0U2VsZWN0Q2hhbmdlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NlbGVjdFwiO1xyXG5cclxuQENvbXBvbmVudCh7IHRlbXBsYXRlVXJsOiAnZm9sZGVyLmNvbXBvbmVudC5odG1sJyB9KVxyXG5leHBvcnQgY2xhc3MgRm9sZGVyRGVzaWduQ29tcG9uZW50IGV4dGVuZHMgRGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudCB7XHJcbiAgcmVhZG9ubHkgY29sdW1ucyA9IHRoaXMuX2ZiLmFycmF5KFtdKTtcclxuICByZWFkb25seSBmb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgY29sdW1uczogdGhpcy5jb2x1bW5zLFxyXG4gICAgZmlsdGVyczogdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBjdWJlOiBudWxsLFxyXG4gICAgICBheGVzOiBudWxsXHJcbiAgICB9KVxyXG4gIH0pO1xyXG4gIGN1YmVzOiBFbGVtZW50SW5mb1tdO1xyXG4gIGN1YmU6IEVsZW1lbnRJbmZvPGFueT47XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlICE9PSAnd2lkZ2V0Jykge1xyXG4gICAgICB0aGlzLmN1YmVzID0gdGhpcy5fcmVmLmRlc2lnbmVyLmN1YmVzO1xyXG4gICAgICB0aGlzLmN1YmUgPSB0aGlzLm1vZGVsLmZpbHRlcnM/LmN1YmUgPyB0aGlzLl9yZWYuZGVzaWduZXIuY3ViZXMuZmluZChjID0+IGMubmFtZSA9PT0gdGhpcy5tb2RlbC5maWx0ZXJzLmN1YmUpIDpcclxuICAgICAgICB0aGlzLl9yZWYuZGVzaWduZXIuY3ViZXNbMF07XHJcbiAgICAgIHRoaXMubW9kZWwuY29sdW1ucz8uZm9yRWFjaChjID0+IHRoaXMuY29sdW1ucy5wdXNoKHRoaXMubmV3Q29sdW1uKGMpLCB7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xyXG4gICAgfVxyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICB9XHJcbiAgbmV3Q29sdW1uKGNvbHVtbj86IEZvbGRlckNvbHVtbik6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBuYW1lOiB0aGlzLl9mYi5jb250cm9sKGNvbHVtbj8ubmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgIHRpdGxlOiB0aGlzLl9mYi5jb250cm9sKGNvbHVtbj8udGl0bGUsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICB0eXBlOiBjb2x1bW4/LnR5cGUsXHJcbiAgICB9KVxyXG4gIH1cclxuICBjdWJlU2VsZWN0ZWQoZXZ0OiBNYXRTZWxlY3RDaGFuZ2UpIHtcclxuICAgIHRoaXMuY3ViZSA9IGV2dC52YWx1ZSBhcyBFbGVtZW50SW5mbztcclxuICAgIHRoaXMuZm9ybS5nZXQoJ2ZpbHRlcnMuY3ViZScpLnNldFZhbHVlKHRoaXMuY3ViZS5uYW1lKTtcclxuICB9XHJcbn1cclxuIiwiPGJpemRvYy1kZXNpZ25lci1lbGVtZW50IFtmb3JtXT1cImZvcm1cIiBbcHJpdmlsZWdlc109XCJ0cnVlXCIgW2ljb25dPVwidHJ1ZVwiIFtzdGF0ZV09XCJzdGF0ZVwiPlxyXG4gIDxuZy10ZW1wbGF0ZSBiaXpkb2NFZGl0Q29udGVudD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3OyBlbHNlIG1haW5cIj5cclxuICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3tjb250ZXh0LnRpdGxlfHRyYW5zbGF0ZX19PC9oMj5cclxuICAgICAgPGRpdiAoZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUpPVwiY2xvc2VWaWV3KCRldmVudClcIiAjZWxlbWVudCBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2aWV3OyBjb250ZXh0OiBjb250ZXh0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGFjdGlvbnNcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNsb3NlVmlldygpXCIgdHlwZT1cImJ1dHRvblwiIFtiaXpkb2NUb29sdGlwXT1cIidCYWNrJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+a2V5Ym9hcmRfcmV0dXJuPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2JpemRvYy1kZXNpZ25lci1lbGVtZW50PlxyXG48IS0tLS0+XHJcbjxuZy10ZW1wbGF0ZSAjbWFpbj5cclxuICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPVwiZmlsdGVyc1wiICpuZ0lmPVwiY3ViZXMubGVuZ3RoXCIgY2xhc3M9XCJjb2x1bW5cIj5cclxuICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3snRmlsdGVycyd8dHJhbnNsYXRlfX08L2gyPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJjdWJlcy5sZW5ndGg+MVwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3snQ3ViZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCAoc2VsZWN0aW9uQ2hhbmdlKT1cImN1YmVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbj57eydOb25lJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGN1YmVzXCIgW3ZhbHVlXT1cImNcIj57e2MudGl0bGV8bG9jYWxpemVkU3RyaW5nfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eydBeGVzJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImF4ZXNcIiBtdWx0aXBsZT5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBhIG9mIGN1YmU/LmF4ZXNcIiBbdmFsdWVdPVwiYS5uYW1lXCI+e3thLnRpdGxlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGUgcm93XCI+XHJcbiAgICAgIHt7J0NvbHVtbnMnfHRyYW5zbGF0ZX19XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkZChjb2x1bW5zLCBuZXdDb2x1bW4oKSwgJ0NvbHVtbicsIGNvbHVtbmZvcm0pXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FkZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5hZGRfY2lyY2xlX291dGxpbmU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9oMj5cclxuICAgIDx0YWJsZSBmb3JtQXJyYXlOYW1lPVwiY29sdW1uc1wiIGNsYXNzPVwibWF0LXRhYmxlXCIgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudCwgY29sdW1ucylcIj5cclxuICAgICAgPHRyIGNsYXNzPVwibWF0LXJvd1wiICpuZ0Zvcj1cImxldCBjIG9mIGNvbHVtbnMuY29udHJvbHM7IGluZGV4IGFzIGluZGV4XCIgW2Zvcm1Hcm91cF09XCJjXCIgY2RrRHJhZz5cclxuICAgICAgICA8dGQgY2xhc3M9XCJtYXQtY2VsbFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGwgZmxleFwiIHdpZHRoPVwiOTklXCI+XHJcbiAgICAgICAgICB7e2MuZ2V0KCd0aXRsZScpLnZhbHVlfX1cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogcHJlO1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImVkaXQoYywgJ0NvbHVtbicsIGNvbHVtbmZvcm0pXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0VkaXQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+ZWRpdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY29sdW1ucy5yZW1vdmVBdChpbmRleClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVtb3ZlJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgPC9mb3JtPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2NvbHVtbmZvcm0gbGV0LWZvcm0+XHJcbiAgPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJjb2x1bW5cIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgPG1hdC1sYWJlbD57eydUaXRsZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgcmVxdWlyZWQgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAmbmJzcDtcclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgPG1hdC1sYWJlbD57eydOYW1lJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHJlcXVpcmVkIFttYXRBdXRvY29tcGxldGVdPVwibmFtZXNcIiAvPlxyXG4gICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjbmFtZXM9XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwiZm9ybS5nZXQoJ3RpdGxlJykuc2V0VmFsdWUoJGV2ZW50Lm9wdGlvbi5nZXRMYWJlbCgpKVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwibnVtYmVyXCI+e3snTnVtYmVyJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInN1YmplY3RcIj57eydTdWJqZWN0J3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInZhbHVlXCI+e3snVmFsdWUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwib3duZXJcIj57eydPd25lcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJzZW5kZXJcIj57eydTZW5kZXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwicmVjZWl2ZWRcIj57eydSZWNlaXZlZCd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJyZWNlaXZlZEFnb1wiPnt7J1JlY2VpdmVkQWdvJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInJlcGxpZWRcIj57eydSZXBsaWVkJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInN0YXRlXCI+e3snU3RhdGUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiaXNzdWVkXCI+e3snSXNzdWVkJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cImlzc3VlZEFnb1wiPnt7J0lzc3VlZEFnbyd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAmbmJzcDtcclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD57eydEYXRhVHlwZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiU3RyaW5nXCI+e3snVGV4dCd9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkRlY2ltYWxcIj57eydOdW1lcmljJ319PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiRGF0ZVwiPnt7J0RhdGUnfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJCb29sZWFuXCI+e3snQm9vbGVhbid9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Zvcm0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9sZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vYXJjaGl0ZWN0dXJlL2VsZW1lbnRzL2ZvbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2FyY2hpdGVjdHVyZS9lbGVtZW50cy9mb2xkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLaEUsTUFBTSxPQUFPLHFCQUFzQixTQUFRLDRCQUE0QjtJQUR2RTs7UUFFVyxZQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsU0FBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ3RCLElBQUksRUFBRSxJQUFJO2dCQUNWLElBQUksRUFBRSxJQUFJO2FBQ1gsQ0FBQztTQUNILENBQUMsQ0FBQztLQXVCSjtJQXBCQyxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDN0csSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzlGO1FBQ0QsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFDRCxTQUFTLENBQUMsTUFBcUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3pELEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDM0QsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxZQUFZLENBQUMsR0FBb0I7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsS0FBb0IsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDOztrSEE5QlUscUJBQXFCO3NHQUFyQixxQkFBcUIsMkVDUmxDLHMySUE4RUE7MkZEdEVhLHFCQUFxQjtrQkFEakMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgRm9sZGVyQ29sdW1uIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvbW9kZWxzXCI7XHJcbmltcG9ydCB7IERlc2lnbmVyVHlwZUVsZW1lbnRDb21wb25lbnQgfSBmcm9tIFwiLi4vZGVzaWduZXIuYmFzZVwiO1xyXG5pbXBvcnQgeyBFbGVtZW50SW5mbywgRWxlbWVudE1vZGVsLCB9IGZyb20gXCIuLi9kZWNsYXJhdGlvbnNcIjtcclxuaW1wb3J0IHsgTWF0U2VsZWN0Q2hhbmdlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3NlbGVjdFwiO1xyXG5cclxuQENvbXBvbmVudCh7IHRlbXBsYXRlVXJsOiAnZm9sZGVyLmNvbXBvbmVudC5odG1sJyB9KVxyXG5leHBvcnQgY2xhc3MgRm9sZGVyRGVzaWduQ29tcG9uZW50IGV4dGVuZHMgRGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudCB7XHJcbiAgcmVhZG9ubHkgY29sdW1ucyA9IHRoaXMuX2ZiLmFycmF5KFtdKTtcclxuICByZWFkb25seSBmb3JtID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgY29sdW1uczogdGhpcy5jb2x1bW5zLFxyXG4gICAgZmlsdGVyczogdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBjdWJlOiBudWxsLFxyXG4gICAgICBheGVzOiBudWxsXHJcbiAgICB9KVxyXG4gIH0pO1xyXG4gIGN1YmVzOiBFbGVtZW50SW5mb1tdO1xyXG4gIGN1YmU6IEVsZW1lbnRJbmZvPGFueT47XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlICE9PSAnd2lkZ2V0Jykge1xyXG4gICAgICB0aGlzLmN1YmVzID0gdGhpcy5fcmVmLmRlc2lnbmVyLmN1YmVzO1xyXG4gICAgICB0aGlzLmN1YmUgPSB0aGlzLm1vZGVsLmZpbHRlcnM/LmN1YmUgPyB0aGlzLl9yZWYuZGVzaWduZXIuY3ViZXMuZmluZChjID0+IGMubmFtZSA9PT0gdGhpcy5tb2RlbC5maWx0ZXJzLmN1YmUpIDpcclxuICAgICAgICB0aGlzLl9yZWYuZGVzaWduZXIuY3ViZXNbMF07XHJcbiAgICAgIHRoaXMubW9kZWwuY29sdW1ucz8uZm9yRWFjaChjID0+IHRoaXMuY29sdW1ucy5wdXNoKHRoaXMubmV3Q29sdW1uKGMpLCB7IGVtaXRFdmVudDogZmFsc2UgfSkpO1xyXG4gICAgfVxyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICB9XHJcbiAgbmV3Q29sdW1uKGNvbHVtbj86IEZvbGRlckNvbHVtbik6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBuYW1lOiB0aGlzLl9mYi5jb250cm9sKGNvbHVtbj8ubmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgIHRpdGxlOiB0aGlzLl9mYi5jb250cm9sKGNvbHVtbj8udGl0bGUsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICB0eXBlOiBjb2x1bW4/LnR5cGUsXHJcbiAgICB9KVxyXG4gIH1cclxuICBjdWJlU2VsZWN0ZWQoZXZ0OiBNYXRTZWxlY3RDaGFuZ2UpIHtcclxuICAgIHRoaXMuY3ViZSA9IGV2dC52YWx1ZSBhcyBFbGVtZW50SW5mbztcclxuICAgIHRoaXMuZm9ybS5nZXQoJ2ZpbHRlcnMuY3ViZScpLnNldFZhbHVlKHRoaXMuY3ViZS5uYW1lKTtcclxuICB9XHJcbn1cclxuIiwiPGJpemRvYy1kZXNpZ25lci1lbGVtZW50IFtmb3JtXT1cImZvcm1cIiBbcHJpdmlsZWdlc109XCJ0cnVlXCIgW2ljb25dPVwidHJ1ZVwiIFt2aWV3XT1cInZpZXdcIiAoYmFjayk9XCJ2aWV3ID0gbnVsbFwiIFtjb250ZXh0XT1cImNvbnRleHRcIj5cclxuICA8bmctdGVtcGxhdGUgYml6ZG9jRWRpdENvbnRlbnQ+XHJcbiAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT1cImZpbHRlcnNcIiAqbmdJZj1cImN1YmVzLmxlbmd0aFwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3snRmlsdGVycyd8dHJhbnNsYXRlfX08L2gyPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImN1YmVzLmxlbmd0aD4xXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPnt7J0N1YmUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdCAoc2VsZWN0aW9uQ2hhbmdlKT1cImN1YmVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uPnt7J05vbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYyBvZiBjdWJlc1wiIFt2YWx1ZV09XCJjXCI+e3tjLnRpdGxlfGxvY2FsaXplZFN0cmluZ319PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD57eydBeGVzJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiYXhlc1wiIG11bHRpcGxlPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYSBvZiBjdWJlPy5heGVzXCIgW3ZhbHVlXT1cImEubmFtZVwiPnt7YS50aXRsZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGUgcm93XCI+XHJcbiAgICAgICAge3snQ29sdW1ucyd8dHJhbnNsYXRlfX1cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkZChjb2x1bW5zLCBuZXdDb2x1bW4oKSwgJ0NvbHVtbicsIGNvbHVtbmZvcm0pXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FkZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5hZGRfY2lyY2xlX291dGxpbmU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8L2gyPlxyXG4gICAgICA8dGFibGUgZm9ybUFycmF5TmFtZT1cImNvbHVtbnNcIiBjbGFzcz1cIm1hdC10YWJsZVwiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQsIGNvbHVtbnMpXCI+XHJcbiAgICAgICAgPHRyIGNsYXNzPVwibWF0LXJvd1wiICpuZ0Zvcj1cImxldCBjIG9mIGNvbHVtbnMuY29udHJvbHM7IGluZGV4IGFzIGluZGV4XCIgW2Zvcm1Hcm91cF09XCJjXCIgY2RrRHJhZz5cclxuICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPmRyYWdfaW5kaWNhdG9yPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8dGQgY2xhc3M9XCJtYXQtY2VsbCBmbGV4XCIgd2lkdGg9XCI5OSVcIj5cclxuICAgICAgICAgICAge3tjLmdldCgndGl0bGUnKS52YWx1ZX19XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGxcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBwcmU7XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJlZGl0KGMsICdDb2x1bW4nLCBjb2x1bW5mb3JtKVwiIFtiaXpkb2NUb29sdGlwXT1cIidFZGl0J3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY29sdW1ucy5yZW1vdmVBdChpbmRleClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVtb3ZlJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2JpemRvYy1kZXNpZ25lci1lbGVtZW50PlxyXG48IS0tLS0+XHJcbjxuZy10ZW1wbGF0ZSAjY29sdW1uZm9ybSBsZXQtZm9ybT5cclxuICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J1RpdGxlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiByZXF1aXJlZCAvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICZuYnNwO1xyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J05hbWUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcmVxdWlyZWQgW21hdEF1dG9jb21wbGV0ZV09XCJuYW1lc1wiIC8+XHJcbiAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNuYW1lcz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJmb3JtLmdldCgndGl0bGUnKS5zZXRWYWx1ZSgkZXZlbnQub3B0aW9uLmdldExhYmVsKCkpXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJudW1iZXJcIj57eydOdW1iZXInfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwic3ViamVjdFwiPnt7J1N1YmplY3QnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwidmFsdWVcIj57eydWYWx1ZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJvd25lclwiPnt7J093bmVyJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInNlbmRlclwiPnt7J1NlbmRlcid8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJyZWNlaXZlZFwiPnt7J1JlY2VpdmVkJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cInJlY2VpdmVkQWdvXCI+e3snUmVjZWl2ZWRBZ28nfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwicmVwbGllZFwiPnt7J1JlcGxpZWQnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwic3RhdGVcIj57eydTdGF0ZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJpc3N1ZWRcIj57eydJc3N1ZWQnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiaXNzdWVkQWdvXCI+e3snSXNzdWVkQWdvJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICZuYnNwO1xyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J0RhdGFUeXBlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJTdHJpbmdcIj57eydUZXh0J319PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiRGVjaW1hbFwiPnt7J051bWVyaWMnfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJEYXRlXCI+e3snRGF0ZSd9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkJvb2xlYW5cIj57eydCb29sZWFuJ319PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZm9ybT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
@@ -116,12 +116,12 @@ export class FormInviteDialog {
116
116
  }
117
117
  }
118
118
  FormInviteDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FormInviteDialog, deps: [{ token: i1.FormBuilder }, { token: i2.SystemService }, { token: i3.PromptService }, { token: DesignerRef }, { token: i4.PaneRef }], target: i0.ɵɵFactoryTarget.Component });
119
- FormInviteDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: FormInviteDialog, selector: "ng-component", ngImport: i0, template: "<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field>\r\n <mat-chip-list #chips [attr.aria-label]=\"''\" multiple required>\r\n <mat-chip *ngFor=\"let r of groups.value\"\r\n (removed)=\"removeRole(r)\">\r\n {{titleOf(r)}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input [placeholder]=\"'Roles'|translate\" required\r\n [formControl]=search\r\n #inputrole\r\n [matAutocomplete]=\"rolename\"\r\n [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n </mat-chip-list>\r\n <mat-autocomplete #rolename=\"matAutocomplete\" (optionSelected)=\"addRole(inputrole, $event)\">\r\n <mat-option *ngFor=\"let r of roles\" [value]=\"r.name\">\r\n {{r.title || r.name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"form.get('groups').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Roles'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <bizdoc-localized-string formControlName=\"message\" [placeholder]=\"'Message'|translate\" required class=\"flex column\" maxlength=\"400\"></bizdoc-localized-string>\r\n <mat-form-field>\r\n <mat-label>{{'InviteDue' | l18n}}</mat-label>\r\n <input matInput formControlName=\"due\"\r\n [matDatepicker]=\"duePicker\" />\r\n <mat-datepicker-toggle [for]=\"duePicker\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #duePicker></mat-datepicker>\r\n <mat-error *ngIf=\"form.get('due').hasError('min')\" [innerHTML]=\"'DateInPastErr'|translate:(label||name)\"></mat-error>\r\n </mat-form-field>\r\n <mat-checkbox formControlName=\"oneTime\">{{'OneTime'|l18n}}</mat-checkbox>\r\n <mat-selection-list formControlName=\"devices\" multiple>\r\n <mat-list-option *ngFor=\"let d of devices\" [value]=\"d\">{{d|translate}}</mat-list-option>\r\n </mat-selection-list>\r\n <button mat-raised-button color=\"primary\" (click)=\"send()\" [disabled]=\"!form.valid || working\">{{'Send'|l18n}}</button>\r\n</form>\r\n", styles: ["form{padding:8px}\n"], dependencies: [{ 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: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i6.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i6.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i6.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i8.MatSelectionList, selector: "mat-selection-list", inputs: ["disableRipple", "color", "compareWith", "disabled", "multiple"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i8.MatListOption, selector: "mat-list-option", inputs: ["disableRipple", "checkboxPosition", "color", "value", "disabled", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i9.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i9.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i11.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatLabel, selector: "mat-label" }, { kind: "directive", type: i11.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i12.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i16.LocalizedStringComponent, selector: "bizdoc-localized-string", inputs: ["class", "value", "placeholder", "required", "disabled", "maxlength"], outputs: ["valueChanges"] }, { kind: "pipe", type: i17.L18nPipe, name: "l18n" }, { kind: "pipe", type: i17.TranslatePipe, name: "translate" }] });
119
+ FormInviteDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: FormInviteDialog, selector: "ng-component", ngImport: i0, template: "<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field>\r\n <mat-chip-list #chips [attr.aria-label]=\"''\" multiple required>\r\n <mat-chip *ngFor=\"let r of groups.value\"\r\n (removed)=\"removeRole(r)\">\r\n {{titleOf(r)}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input [placeholder]=\"'Roles'|translate\" required\r\n [formControl]=search\r\n #inputrole\r\n [matAutocomplete]=\"rolename\"\r\n [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n </mat-chip-list>\r\n <mat-autocomplete #rolename=\"matAutocomplete\" (optionSelected)=\"addRole(inputrole, $event)\">\r\n <mat-option *ngFor=\"let r of roles\" [value]=\"r.name\">\r\n {{r.title || r.name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"form.get('groups').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Roles'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <bizdoc-localized-string formControlName=\"message\" [placeholder]=\"'Message'|translate\" class=\"flex column\" maxlength=\"400\"></bizdoc-localized-string>\r\n <mat-form-field>\r\n <mat-label>{{'InviteDue' | l18n}}</mat-label>\r\n <input matInput formControlName=\"due\"\r\n [matDatepicker]=\"duePicker\" />\r\n <mat-datepicker-toggle [for]=\"duePicker\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #duePicker></mat-datepicker>\r\n <mat-error *ngIf=\"form.get('due').hasError('min')\" [innerHTML]=\"'DateInPastErr'|translate:(label||name)\"></mat-error>\r\n </mat-form-field>\r\n <mat-checkbox formControlName=\"oneTime\">{{'OneTime'|l18n}}</mat-checkbox>\r\n <mat-selection-list formControlName=\"devices\" multiple>\r\n <mat-list-option *ngFor=\"let d of devices\" [value]=\"d\">{{d|translate}}</mat-list-option>\r\n </mat-selection-list>\r\n <button mat-raised-button color=\"primary\" (click)=\"send()\" [disabled]=\"!form.valid || working\">{{'Send'|l18n}}</button>\r\n</form>\r\n", styles: ["form{padding:8px}\n"], dependencies: [{ 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: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i6.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i6.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i6.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i8.MatSelectionList, selector: "mat-selection-list", inputs: ["disableRipple", "color", "compareWith", "disabled", "multiple"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i8.MatListOption, selector: "mat-list-option", inputs: ["disableRipple", "checkboxPosition", "color", "value", "disabled", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i9.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i9.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i11.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatLabel, selector: "mat-label" }, { kind: "directive", type: i11.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i12.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i16.LocalizedStringComponent, selector: "bizdoc-localized-string", inputs: ["class", "value", "placeholder", "required", "disabled", "maxlength"], outputs: ["valueChanges"] }, { kind: "pipe", type: i17.L18nPipe, name: "l18n" }, { kind: "pipe", type: i17.TranslatePipe, name: "translate" }] });
120
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FormInviteDialog, decorators: [{
121
121
  type: Component,
122
- args: [{ template: "<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field>\r\n <mat-chip-list #chips [attr.aria-label]=\"''\" multiple required>\r\n <mat-chip *ngFor=\"let r of groups.value\"\r\n (removed)=\"removeRole(r)\">\r\n {{titleOf(r)}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input [placeholder]=\"'Roles'|translate\" required\r\n [formControl]=search\r\n #inputrole\r\n [matAutocomplete]=\"rolename\"\r\n [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n </mat-chip-list>\r\n <mat-autocomplete #rolename=\"matAutocomplete\" (optionSelected)=\"addRole(inputrole, $event)\">\r\n <mat-option *ngFor=\"let r of roles\" [value]=\"r.name\">\r\n {{r.title || r.name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"form.get('groups').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Roles'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <bizdoc-localized-string formControlName=\"message\" [placeholder]=\"'Message'|translate\" required class=\"flex column\" maxlength=\"400\"></bizdoc-localized-string>\r\n <mat-form-field>\r\n <mat-label>{{'InviteDue' | l18n}}</mat-label>\r\n <input matInput formControlName=\"due\"\r\n [matDatepicker]=\"duePicker\" />\r\n <mat-datepicker-toggle [for]=\"duePicker\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #duePicker></mat-datepicker>\r\n <mat-error *ngIf=\"form.get('due').hasError('min')\" [innerHTML]=\"'DateInPastErr'|translate:(label||name)\"></mat-error>\r\n </mat-form-field>\r\n <mat-checkbox formControlName=\"oneTime\">{{'OneTime'|l18n}}</mat-checkbox>\r\n <mat-selection-list formControlName=\"devices\" multiple>\r\n <mat-list-option *ngFor=\"let d of devices\" [value]=\"d\">{{d|translate}}</mat-list-option>\r\n </mat-selection-list>\r\n <button mat-raised-button color=\"primary\" (click)=\"send()\" [disabled]=\"!form.valid || working\">{{'Send'|l18n}}</button>\r\n</form>\r\n", styles: ["form{padding:8px}\n"] }]
122
+ args: [{ template: "<form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <mat-form-field>\r\n <mat-chip-list #chips [attr.aria-label]=\"''\" multiple required>\r\n <mat-chip *ngFor=\"let r of groups.value\"\r\n (removed)=\"removeRole(r)\">\r\n {{titleOf(r)}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input [placeholder]=\"'Roles'|translate\" required\r\n [formControl]=search\r\n #inputrole\r\n [matAutocomplete]=\"rolename\"\r\n [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n </mat-chip-list>\r\n <mat-autocomplete #rolename=\"matAutocomplete\" (optionSelected)=\"addRole(inputrole, $event)\">\r\n <mat-option *ngFor=\"let r of roles\" [value]=\"r.name\">\r\n {{r.title || r.name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"form.get('groups').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Roles'|translate)\"></mat-error>\r\n </mat-form-field>\r\n <bizdoc-localized-string formControlName=\"message\" [placeholder]=\"'Message'|translate\" class=\"flex column\" maxlength=\"400\"></bizdoc-localized-string>\r\n <mat-form-field>\r\n <mat-label>{{'InviteDue' | l18n}}</mat-label>\r\n <input matInput formControlName=\"due\"\r\n [matDatepicker]=\"duePicker\" />\r\n <mat-datepicker-toggle [for]=\"duePicker\" matSuffix></mat-datepicker-toggle>\r\n <mat-datepicker #duePicker></mat-datepicker>\r\n <mat-error *ngIf=\"form.get('due').hasError('min')\" [innerHTML]=\"'DateInPastErr'|translate:(label||name)\"></mat-error>\r\n </mat-form-field>\r\n <mat-checkbox formControlName=\"oneTime\">{{'OneTime'|l18n}}</mat-checkbox>\r\n <mat-selection-list formControlName=\"devices\" multiple>\r\n <mat-list-option *ngFor=\"let d of devices\" [value]=\"d\">{{d|translate}}</mat-list-option>\r\n </mat-selection-list>\r\n <button mat-raised-button color=\"primary\" (click)=\"send()\" [disabled]=\"!form.valid || working\">{{'Send'|l18n}}</button>\r\n</form>\r\n", styles: ["form{padding:8px}\n"] }]
123
123
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.SystemService }, { type: i3.PromptService }, { type: i18.DesignerRef, decorators: [{
124
124
  type: Inject,
125
125
  args: [DesignerRef]
126
126
  }] }, { type: i4.PaneRef }]; } });
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbnZpdGUuZGlhbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9hcmNoaXRlY3R1cmUvZWxlbWVudHMvZm9ybS1pbnZpdGUuZGlhbG9nLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9hcmNoaXRlY3R1cmUvZWxlbWVudHMvZm9ybS1pbnZpdGUuZGlhbG9nLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTTlELE1BQU0sT0FDRSxnQkFBZ0I7SUFpQnRCLFlBQ1UsR0FBZ0IsRUFDaEIsUUFBdUIsRUFDdkIsR0FBa0IsRUFDRyxJQUFpQixFQUN0QyxLQUFjO1FBSmQsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLFFBQUcsR0FBSCxHQUFHLENBQWU7UUFDRyxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ3RDLFVBQUssR0FBTCxLQUFLLENBQVM7UUFyQmYsdUJBQWtCLEdBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELFdBQU0sR0FBRyxJQUFJLENBQUMs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LCBFTlRFUiwgU0VNSUNPTE9OIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9rZXljb2Rlc1wiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGVcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFuZVJlZiB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Nsb3RzL3BhbmUtcmVmXCI7XHJcbmltcG9ydCB7IEludml0ZURldmljZSwgUm9sZSwgU3lzdGVtU2VydmljZSB9IGZyb20gXCIuLi8uLi9zeXN0ZW0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEZXNpZ25lclJlZiwgbG9jYWxpemVTdHJpbmcgfSBmcm9tIFwiLi4vZGVjbGFyYXRpb25zXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJ2Zvcm0taW52aXRlLmRpYWxvZy5odG1sJyxcclxuICBzdHlsZXM6IFtgZm9ybSB7cGFkZGluZzogOHB4fWBdXHJcbn0pXHJcbmV4cG9ydFxyXG4gIGNsYXNzIEZvcm1JbnZpdGVEaWFsb2cgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHJlYWRvbmx5IHNlcGFyYXRvcktleXNDb2RlczogbnVtYmVyW10gPSBbRU5URVIsIENPTU1BLCBTRU1JQ09MT05dO1xyXG4gIHJlYWRvbmx5IGdyb3VwcyA9IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgcmVhZG9ubHkgZGV2aWNlcyA9IFsnU21zJywgJ0VtYWlsJywgJ0lNJ10gYXMgSW52aXRlRGV2aWNlW107XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIGdyb3VwczogdGhpcy5ncm91cHMsXHJcbiAgICBkZXZpY2VzOiB0aGlzLl9mYi5jb250cm9sPEludml0ZURldmljZVtdPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgIGR1ZTogdGhpcy5fZmIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLm1pbihuZXcgRGF0ZSgpLmdldFRpbWUoKSkpLFxyXG4gICAgb25lVGltZTogZmFsc2UsXHJcbiAgICBtZXNzYWdlOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZz4obnVsbClcclxuICB9KTtcclxuICBwcml2YXRlIF9zZWFyY2hjaGFuZ2UgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgLyoqIGFsbCBCaXpEb2Mgcm9sZXMgYW5kIHVzZXIgZ3JvdXBzICovXHJcbiAgcHJpdmF0ZSBfcm9sZXM6IFJvbGVbXTtcclxuICByb2xlczogUm9sZVtdO1xyXG4gIHJlYWRvbmx5IHNlYXJjaCA9IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCk7XHJcbiAgd29ya2luZzogYm9vbGVhbjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2ZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIEBJbmplY3QoRGVzaWduZXJSZWYpIHByaXZhdGUgX3JlZjogRGVzaWduZXJSZWYsXHJcbiAgICBwcml2YXRlIF9wYW5lOiBQYW5lUmVmXHJcbiAgKSB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2VydmljZS5yb2xlcygpLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgdGhpcy5fcm9sZXMgPSByLmNvbmNhdCh0aGlzLl9yZWYuZGVzaWduZXIucm9sZXMuZmlsdGVyKHIgPT4gIXIuZGlzYWJsZWQpLlxyXG4gICAgICAgIG1hcChyID0+ICh7XHJcbiAgICAgICAgICBuYW1lOiByLm5hbWUsXHJcbiAgICAgICAgICB0aXRsZTogbG9jYWxpemVTdHJpbmcoci50aXRsZSlcclxuICAgICAgICB9KSkpO1xyXG4gICAgICB0aGlzLl9yb2xlcy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICAgIHJbJ19pbmRleCddID0gKHIudGl0bGUgfHwgci5uYW1lKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHRoaXMuX3JvbGVzW3IubmFtZV0gPSByO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yb2xlcyA9IHRoaXMuX3JvbGVzLnNsaWNlKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxNTApKS5zdWJzY3JpYmUoKHY6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLl9zZWFyY2hjaGFuZ2UubmV4dCh2KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fc2VhcmNoY2hhbmdlLnN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgY29uc3QgZ3JvdXBzID0gdGhpcy5ncm91cHMudmFsdWUgfHwgW107XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gdi50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHRoaXMucm9sZXMgPSB0aGlzLl9yb2xlcy5maWx0ZXIociA9PiByWydfaW5kZXgnXS5pbmRleE9mKHZhbCkgPiAtMSAmJiBncm91cHMuaW5kZXhPZihyLm5hbWUpIDwgMCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMucm9sZXMgPSB0aGlzLl9yb2xlcy5maWx0ZXIociA9PiBncm91cHMuaW5kZXhPZihyLm5hbWUpIDwgMCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGlkXHJcbiAgICovXHJcbiAgcmVtb3ZlUm9sZShpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCByb2xlcyA9IHRoaXMuZ3JvdXBzLnZhbHVlO1xyXG4gICAgY29uc3QgaW5kZXggPSByb2xlcy5pbmRleE9mKGlkKTtcclxuXHJcbiAgICBpZiAoaW5kZXggPj0gMClcclxuICAgICAgcm9sZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMuZ3JvdXBzLnNldFZhbHVlKHJvbGVzKTtcclxuICAgIHRoaXMuX3NlYXJjaGNoYW5nZS5uZXh0KG51bGwpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gaW5wXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgYWRkUm9sZShpbnA6IEhUTUxJbnB1dEVsZW1lbnQsIGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCByb2xlcyA9IHRoaXMuZ3JvdXBzLnZhbHVlO1xyXG4gICAgY29uc3QgaWQgPSBldmVudC5vcHRpb24udmFsdWUgYXMgc3RyaW5nO1xyXG4gICAgaWYgKCFyb2xlcylcclxuICAgICAgdGhpcy5ncm91cHMuc2V0VmFsdWUoW2lkXSk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgcm9sZXMucHVzaChpZCk7XHJcbiAgICAgIHRoaXMuZ3JvdXBzLnNldFZhbHVlKHJvbGVzKTtcclxuICAgIH1cclxuICAgIGlucC52YWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5zZWFyY2guc2V0VmFsdWUobnVsbCk7XHJcbiAgfVxyXG4gIHNlbmQoKSB7XHJcbiAgICBjb25zdCB7IGdyb3VwcywgZGV2aWNlcywgbWVzc2FnZSwgZHVlIH0gPSB0aGlzLmZvcm0udmFsdWU7XHJcbiAgICB0aGlzLndvcmtpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fc2VydmljZS5pbnZpdGUodGhpcy5fcmVmLm1vZGVsLm5hbWUsIHsgZ3JvdXBzLCBtZXNzYWdlLCBkZXZpY2VzLCBkdWUgfSkuXHJcbiAgICAgIHN1YnNjcmliZShlID0+IHtcclxuICAgICAgICB0aGlzLl9wcy50b2FzdChlLm9rID8gJ0ludml0YXRpb25zU2VudCcgOiAnTm9JbnZpdGF0aW9uc1NlbnQnLCBlLm9rKTtcclxuICAgICAgICB0aGlzLl9wYW5lLmNsb3NlKCk7XHJcbiAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB0aGlzLl9wcy5lcnJvcigpO1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgdGl0bGVPZihuYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHJvbGUgPSB0aGlzLl9yb2xlc1tuYW1lXTtcclxuICAgIHJldHVybiByb2xlPy50aXRsZSB8fCBuYW1lO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gIDxtYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtY2hpcC1saXN0ICNjaGlwcyBbYXR0ci5hcmlhLWxhYmVsXT1cIicnXCIgbXVsdGlwbGUgcmVxdWlyZWQ+XHJcbiAgICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgciBvZiBncm91cHMudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgKHJlbW92ZWQpPVwicmVtb3ZlUm9sZShyKVwiPlxyXG4gICAgICAgIHt7dGl0bGVPZihyKX19XHJcbiAgICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cclxuICAgICAgPC9tYXQtY2hpcD5cclxuICAgICAgPGlucHV0IFtwbGFjZWhvbGRlcl09XCInUm9sZXMnfHRyYW5zbGF0ZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPXNlYXJjaFxyXG4gICAgICAgICAgICAgI2lucHV0cm9sZVxyXG4gICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJyb2xlbmFtZVwiXHJcbiAgICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBzXCJcclxuICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRTZXBhcmF0b3JLZXlDb2Rlc109XCJzZXBhcmF0b3JLZXlzQ29kZXNcIj5cclxuICAgIDwvbWF0LWNoaXAtbGlzdD5cclxuICAgIDxtYXQtYXV0b2NvbXBsZXRlICNyb2xlbmFtZT1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJhZGRSb2xlKGlucHV0cm9sZSwgJGV2ZW50KVwiPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgciBvZiByb2xlc1wiIFt2YWx1ZV09XCJyLm5hbWVcIj5cclxuICAgICAgICB7e3IudGl0bGUgfHwgci5uYW1lfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uZ2V0KCdncm91cHMnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIFtpbm5lckhUTUxdPVwiJ1JlcXVpcmVkRXJyJ3x0cmFuc2xhdGU6KCdSb2xlcyd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPGJpemRvYy1sb2NhbGl6ZWQtc3RyaW5nIGZvcm1Db250cm9sTmFtZT1cIm1lc3NhZ2VcIiBbcGxhY2Vob2xkZXJdPVwiJ01lc3NhZ2UnfHRyYW5zbGF0ZVwiIHJlcXVpcmVkIGNsYXNzPVwiZmxleCBjb2x1bW5cIiBtYXhsZW5ndGg9XCI0MDBcIj48L2JpemRvYy1sb2NhbGl6ZWQtc3RyaW5nPlxyXG4gIDxtYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtbGFiZWw+e3snSW52aXRlRHVlJyB8IGwxOG59fTwvbWF0LWxhYmVsPlxyXG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImR1ZVwiXHJcbiAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZHVlUGlja2VyXCIgLz5cclxuICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgW2Zvcl09XCJkdWVQaWNrZXJcIiBtYXRTdWZmaXg+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICA8bWF0LWRhdGVwaWNrZXIgI2R1ZVBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uZ2V0KCdkdWUnKS5oYXNFcnJvcignbWluJylcIiBbaW5uZXJIVE1MXT1cIidEYXRlSW5QYXN0RXJyJ3x0cmFuc2xhdGU6KGxhYmVsfHxuYW1lKVwiPjwvbWF0LWVycm9yPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPG1hdC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJvbmVUaW1lXCI+e3snT25lVGltZSd8bDE4bn19PC9tYXQtY2hlY2tib3g+XHJcbiAgPG1hdC1zZWxlY3Rpb24tbGlzdCBmb3JtQ29udHJvbE5hbWU9XCJkZXZpY2VzXCIgbXVsdGlwbGU+XHJcbiAgICA8bWF0LWxpc3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBkIG9mIGRldmljZXNcIiBbdmFsdWVdPVwiZFwiPnt7ZHx0cmFuc2xhdGV9fTwvbWF0LWxpc3Qtb3B0aW9uPlxyXG4gIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxyXG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNlbmQoKVwiIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZCB8fCB3b3JraW5nXCI+e3snU2VuZCd8bDE4bn19PC9idXR0b24+XHJcbjwvZm9ybT5cclxuIl19
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbnZpdGUuZGlhbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9hcmNoaXRlY3R1cmUvZWxlbWVudHMvZm9ybS1pbnZpdGUuZGlhbG9nLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9hcmNoaXRlY3R1cmUvZWxlbWVudHMvZm9ybS1pbnZpdGUuZGlhbG9nLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTTlELE1BQU0sT0FDRSxnQkFBZ0I7SUFpQnRCLFlBQ1UsR0FBZ0IsRUFDaEIsUUFBdUIsRUFDdkIsR0FBa0IsRUFDRyxJQUFpQixFQUN0QyxLQUFjO1FBSmQsUUFBRyxHQUFILEdBQUcsQ0FBYTtRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLFFBQUcsR0FBSCxHQUFHLENBQWU7UUFDRyxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ3RDLFVBQUssR0FBTCxLQUFLLENBQVM7UUFyQmYsdUJBQWtCLEdBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELFdBQU0sR0FBRyxJQUFJLENBQUMs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LCBFTlRFUiwgU0VNSUNPTE9OIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9rZXljb2Rlc1wiO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGVcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFuZVJlZiB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Nsb3RzL3BhbmUtcmVmXCI7XHJcbmltcG9ydCB7IEludml0ZURldmljZSwgUm9sZSwgU3lzdGVtU2VydmljZSB9IGZyb20gXCIuLi8uLi9zeXN0ZW0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEZXNpZ25lclJlZiwgbG9jYWxpemVTdHJpbmcgfSBmcm9tIFwiLi4vZGVjbGFyYXRpb25zXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJ2Zvcm0taW52aXRlLmRpYWxvZy5odG1sJyxcclxuICBzdHlsZXM6IFtgZm9ybSB7cGFkZGluZzogOHB4fWBdXHJcbn0pXHJcbmV4cG9ydFxyXG4gIGNsYXNzIEZvcm1JbnZpdGVEaWFsb2cgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHJlYWRvbmx5IHNlcGFyYXRvcktleXNDb2RlczogbnVtYmVyW10gPSBbRU5URVIsIENPTU1BLCBTRU1JQ09MT05dO1xyXG4gIHJlYWRvbmx5IGdyb3VwcyA9IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgcmVhZG9ubHkgZGV2aWNlcyA9IFsnU21zJywgJ0VtYWlsJywgJ0lNJ10gYXMgSW52aXRlRGV2aWNlW107XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIGdyb3VwczogdGhpcy5ncm91cHMsXHJcbiAgICBkZXZpY2VzOiB0aGlzLl9mYi5jb250cm9sPEludml0ZURldmljZVtdPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgIGR1ZTogdGhpcy5fZmIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLm1pbihuZXcgRGF0ZSgpLmdldFRpbWUoKSkpLFxyXG4gICAgb25lVGltZTogZmFsc2UsXHJcbiAgICBtZXNzYWdlOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZz4obnVsbClcclxuICB9KTtcclxuICBwcml2YXRlIF9zZWFyY2hjaGFuZ2UgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgLyoqIGFsbCBCaXpEb2Mgcm9sZXMgYW5kIHVzZXIgZ3JvdXBzICovXHJcbiAgcHJpdmF0ZSBfcm9sZXM6IFJvbGVbXTtcclxuICByb2xlczogUm9sZVtdO1xyXG4gIHJlYWRvbmx5IHNlYXJjaCA9IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCk7XHJcbiAgd29ya2luZzogYm9vbGVhbjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2ZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIEBJbmplY3QoRGVzaWduZXJSZWYpIHByaXZhdGUgX3JlZjogRGVzaWduZXJSZWYsXHJcbiAgICBwcml2YXRlIF9wYW5lOiBQYW5lUmVmXHJcbiAgKSB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2VydmljZS5yb2xlcygpLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgdGhpcy5fcm9sZXMgPSByLmNvbmNhdCh0aGlzLl9yZWYuZGVzaWduZXIucm9sZXMuZmlsdGVyKHIgPT4gIXIuZGlzYWJsZWQpLlxyXG4gICAgICAgIG1hcChyID0+ICh7XHJcbiAgICAgICAgICBuYW1lOiByLm5hbWUsXHJcbiAgICAgICAgICB0aXRsZTogbG9jYWxpemVTdHJpbmcoci50aXRsZSlcclxuICAgICAgICB9KSkpO1xyXG4gICAgICB0aGlzLl9yb2xlcy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICAgIHJbJ19pbmRleCddID0gKHIudGl0bGUgfHwgci5uYW1lKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHRoaXMuX3JvbGVzW3IubmFtZV0gPSByO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yb2xlcyA9IHRoaXMuX3JvbGVzLnNsaWNlKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxNTApKS5zdWJzY3JpYmUoKHY6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLl9zZWFyY2hjaGFuZ2UubmV4dCh2KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fc2VhcmNoY2hhbmdlLnN1YnNjcmliZSh2ID0+IHtcclxuICAgICAgY29uc3QgZ3JvdXBzID0gdGhpcy5ncm91cHMudmFsdWUgfHwgW107XHJcbiAgICAgIGlmICh2KSB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gdi50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHRoaXMucm9sZXMgPSB0aGlzLl9yb2xlcy5maWx0ZXIociA9PiByWydfaW5kZXgnXS5pbmRleE9mKHZhbCkgPiAtMSAmJiBncm91cHMuaW5kZXhPZihyLm5hbWUpIDwgMCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMucm9sZXMgPSB0aGlzLl9yb2xlcy5maWx0ZXIociA9PiBncm91cHMuaW5kZXhPZihyLm5hbWUpIDwgMCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGlkXHJcbiAgICovXHJcbiAgcmVtb3ZlUm9sZShpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCByb2xlcyA9IHRoaXMuZ3JvdXBzLnZhbHVlO1xyXG4gICAgY29uc3QgaW5kZXggPSByb2xlcy5pbmRleE9mKGlkKTtcclxuXHJcbiAgICBpZiAoaW5kZXggPj0gMClcclxuICAgICAgcm9sZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMuZ3JvdXBzLnNldFZhbHVlKHJvbGVzKTtcclxuICAgIHRoaXMuX3NlYXJjaGNoYW5nZS5uZXh0KG51bGwpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gaW5wXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgYWRkUm9sZShpbnA6IEhUTUxJbnB1dEVsZW1lbnQsIGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCByb2xlcyA9IHRoaXMuZ3JvdXBzLnZhbHVlO1xyXG4gICAgY29uc3QgaWQgPSBldmVudC5vcHRpb24udmFsdWUgYXMgc3RyaW5nO1xyXG4gICAgaWYgKCFyb2xlcylcclxuICAgICAgdGhpcy5ncm91cHMuc2V0VmFsdWUoW2lkXSk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgcm9sZXMucHVzaChpZCk7XHJcbiAgICAgIHRoaXMuZ3JvdXBzLnNldFZhbHVlKHJvbGVzKTtcclxuICAgIH1cclxuICAgIGlucC52YWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5zZWFyY2guc2V0VmFsdWUobnVsbCk7XHJcbiAgfVxyXG4gIHNlbmQoKSB7XHJcbiAgICBjb25zdCB7IGdyb3VwcywgZGV2aWNlcywgbWVzc2FnZSwgZHVlIH0gPSB0aGlzLmZvcm0udmFsdWU7XHJcbiAgICB0aGlzLndvcmtpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fc2VydmljZS5pbnZpdGUodGhpcy5fcmVmLm1vZGVsLm5hbWUsIHsgZ3JvdXBzLCBtZXNzYWdlLCBkZXZpY2VzLCBkdWUgfSkuXHJcbiAgICAgIHN1YnNjcmliZShlID0+IHtcclxuICAgICAgICB0aGlzLl9wcy50b2FzdChlLm9rID8gJ0ludml0YXRpb25zU2VudCcgOiAnTm9JbnZpdGF0aW9uc1NlbnQnLCBlLm9rKTtcclxuICAgICAgICB0aGlzLl9wYW5lLmNsb3NlKCk7XHJcbiAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB0aGlzLl9wcy5lcnJvcigpO1xyXG4gICAgICAgIHRoaXMud29ya2luZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgdGl0bGVPZihuYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHJvbGUgPSB0aGlzLl9yb2xlc1tuYW1lXTtcclxuICAgIHJldHVybiByb2xlPy50aXRsZSB8fCBuYW1lO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gIDxtYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtY2hpcC1saXN0ICNjaGlwcyBbYXR0ci5hcmlhLWxhYmVsXT1cIicnXCIgbXVsdGlwbGUgcmVxdWlyZWQ+XHJcbiAgICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgciBvZiBncm91cHMudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgKHJlbW92ZWQpPVwicmVtb3ZlUm9sZShyKVwiPlxyXG4gICAgICAgIHt7dGl0bGVPZihyKX19XHJcbiAgICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cclxuICAgICAgPC9tYXQtY2hpcD5cclxuICAgICAgPGlucHV0IFtwbGFjZWhvbGRlcl09XCInUm9sZXMnfHRyYW5zbGF0ZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPXNlYXJjaFxyXG4gICAgICAgICAgICAgI2lucHV0cm9sZVxyXG4gICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJyb2xlbmFtZVwiXHJcbiAgICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBzXCJcclxuICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRTZXBhcmF0b3JLZXlDb2Rlc109XCJzZXBhcmF0b3JLZXlzQ29kZXNcIj5cclxuICAgIDwvbWF0LWNoaXAtbGlzdD5cclxuICAgIDxtYXQtYXV0b2NvbXBsZXRlICNyb2xlbmFtZT1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJhZGRSb2xlKGlucHV0cm9sZSwgJGV2ZW50KVwiPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgciBvZiByb2xlc1wiIFt2YWx1ZV09XCJyLm5hbWVcIj5cclxuICAgICAgICB7e3IudGl0bGUgfHwgci5uYW1lfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uZ2V0KCdncm91cHMnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIFtpbm5lckhUTUxdPVwiJ1JlcXVpcmVkRXJyJ3x0cmFuc2xhdGU6KCdSb2xlcyd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPGJpemRvYy1sb2NhbGl6ZWQtc3RyaW5nIGZvcm1Db250cm9sTmFtZT1cIm1lc3NhZ2VcIiBbcGxhY2Vob2xkZXJdPVwiJ01lc3NhZ2UnfHRyYW5zbGF0ZVwiIGNsYXNzPVwiZmxleCBjb2x1bW5cIiBtYXhsZW5ndGg9XCI0MDBcIj48L2JpemRvYy1sb2NhbGl6ZWQtc3RyaW5nPlxyXG4gIDxtYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtbGFiZWw+e3snSW52aXRlRHVlJyB8IGwxOG59fTwvbWF0LWxhYmVsPlxyXG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImR1ZVwiXHJcbiAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZHVlUGlja2VyXCIgLz5cclxuICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgW2Zvcl09XCJkdWVQaWNrZXJcIiBtYXRTdWZmaXg+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICA8bWF0LWRhdGVwaWNrZXIgI2R1ZVBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uZ2V0KCdkdWUnKS5oYXNFcnJvcignbWluJylcIiBbaW5uZXJIVE1MXT1cIidEYXRlSW5QYXN0RXJyJ3x0cmFuc2xhdGU6KGxhYmVsfHxuYW1lKVwiPjwvbWF0LWVycm9yPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPG1hdC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJvbmVUaW1lXCI+e3snT25lVGltZSd8bDE4bn19PC9tYXQtY2hlY2tib3g+XHJcbiAgPG1hdC1zZWxlY3Rpb24tbGlzdCBmb3JtQ29udHJvbE5hbWU9XCJkZXZpY2VzXCIgbXVsdGlwbGU+XHJcbiAgICA8bWF0LWxpc3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBkIG9mIGRldmljZXNcIiBbdmFsdWVdPVwiZFwiPnt7ZHx0cmFuc2xhdGV9fTwvbWF0LWxpc3Qtb3B0aW9uPlxyXG4gIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxyXG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNlbmQoKVwiIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZCB8fCB3b3JraW5nXCI+e3snU2VuZCd8bDE4bn19PC9idXR0b24+XHJcbjwvZm9ybT5cclxuIl19
@@ -147,12 +147,12 @@ export class FormDesignComponent extends DesignerTypeElementComponent {
147
147
  }
148
148
  }
149
149
  FormDesignComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FormDesignComponent, deps: [{ token: i1.FormBuilder }, { token: i2.PanesRouter }, { token: i3.SystemService }, { token: i4.SessionService }, { token: i0.Injector }, { token: i5.TranslateService }, { token: i0.ElementRef }, { token: DesignerRef }], target: i0.ɵɵFactoryTarget.Component });
150
- FormDesignComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: FormDesignComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<bizdoc-designer-element [form]=\"form\" [privileges]=\"true\" [icon]=\"true\" [state]=\"state\">\r\n <ng-template bizdocContent>\r\n <ejs-sparkline *ngIf=\"usage\" width='250px' height='200px'\r\n type=\"Line\"\r\n [id]=\"model.name\"\r\n [fill]=\"primary\"\r\n [dataSource]=\"usage\"\r\n xName=\"date\"\r\n yName=\"count\"\r\n lineWidth=\"2\"\r\n valueType=\"DateTime\"\r\n [locale]=\"locale\"\r\n [markerSettings]=\"markerSettings\"\r\n [tooltipSettings]=\"tooltipSettings\"\r\n (dataLabelRendering)=\"dataLabelRendering($event)\"\r\n [enableRtl]=\"enableRtl\">\r\n </ejs-sparkline>\r\n <div class=\"row\">\r\n <button mat-icon-button (click)=\"diagram()\" [bizdocTooltip]=\"'Workflow'|translate\" [disabled]=\"model.draft\"><mat-icon>schema</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" [disabled]=\"model.draft\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <button mat-menu-item (click)=\"invite()\">{{'Invite'|l18n}}</button>\r\n </mat-menu>\r\n </div>\r\n </ng-template>\r\n <!--edit-->\r\n <ng-template bizdocEditContent>\r\n <ng-container *ngIf=\"view; else main\">\r\n <h2 class=\"mat-title\">{{context.title|translate}}</h2>\r\n <div (document:keydown.escape)=\"closeView($event)\" #element class=\"column\">\r\n <ng-container *ngTemplateOutlet=\"view; context: context\"></ng-container>\r\n </div>\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"closeView()\" type=\"button\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon>keyboard_return</mat-icon></button>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n<!---->\r\n<ng-template #main>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <div class=\"row flex\" [formGroup]=\"format\">\r\n <mat-form-field>\r\n <mat-label>{{'Prefix'|translate}}</mat-label>\r\n <input matInput formControlName=\"prefix\" />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Digits'|translate}}</mat-label>\r\n <input matInput formControlName=\"digits\" maxlength=\"2\" />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <mat-label>{{'Suffix'|translate}}</mat-label>\r\n <input matInput formControlName=\"suffix\" />\r\n </mat-form-field>\r\n </div>\r\n <bizdoc-localized-string formControlName=\"group\" [placeholder]=\"'Group'|translate\"></bizdoc-localized-string>\r\n <bizdoc-localized-string formControlName=\"description\" [placeholder]=\"'Description'|translate\"></bizdoc-localized-string>\r\n <mat-form-field *ngIf=\"guides.length\">\r\n <mat-label>{{'Guide'|translate}}</mat-label>\r\n <mat-select formControlName=\"guide\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option *ngFor=\"let g of guides\" [value]=\"g.name\">{{g.title |localizedString}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field *ngIf=\"cubes.length\">\r\n <mat-label>{{'Cube'|translate}}</mat-label>\r\n <mat-select formControlName=\"cubes\" multiple>\r\n <mat-option *ngFor=\"let c of cubes\" [value]=\"c.name\">{{c.title |localizedString}}</mat-option>\r\n </mat-select>\r\n <mat-hint>{{'FormCubeHelp'|translate}}</mat-hint>\r\n </mat-form-field>\r\n <!--Rules-->\r\n <h2 class=\"mat-title row\">\r\n {{'Rules'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(rules, newRule(), 'Rule', ruleform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"rules\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, rules)\">\r\n <tr class=\"mat-row\" *ngFor=\"let r of rules.controls; index as index\" [formGroup]=\"r\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\" width=\"99%\">\r\n {{r.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\" style=\"white-space: pre;\">\r\n <button mat-icon-button (click)=\"edit(r, 'Rule', ruleform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"rules.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n </form>\r\n</ng-template>\r\n<ng-template #ruleform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <div class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n </mat-form-field>\r\n </div>\r\n <bizdoc-designer-privileges [form]=\"form\"></bizdoc-designer-privileges>\r\n </form>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i7.SparklineComponent, selector: "ejs-sparkline", inputs: ["axisSettings", "border", "containerArea", "dataLabelSettings", "dataSource", "enablePersistence", "enableRtl", "endPointColor", "fill", "format", "height", "highPointColor", "lineWidth", "locale", "lowPointColor", "markerSettings", "negativePointColor", "opacity", "padding", "palette", "query", "rangeBandSettings", "rangePadding", "startPointColor", "theme", "tiePointColor", "tooltipSettings", "type", "useGroupingSeparator", "valueType", "width", "xName", "yName"], outputs: ["axisRendering", "dataLabelRendering", "load", "loaded", "markerRendering", "pointRegionMouseClick", "pointRegionMouseMove", "pointRendering", "resize", "seriesRendering", "sparklineMouseClick", "sparklineMouseMove", "tooltipInitialize"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i10.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i15.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i15.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i15.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i16.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: i17.LocalizedStringComponent, selector: "bizdoc-localized-string", inputs: ["class", "value", "placeholder", "required", "disabled", "maxlength"], outputs: ["valueChanges"] }, { kind: "component", type: i18.DesignerPrivilegesComponent, selector: "bizdoc-designer-privileges", inputs: ["form"] }, { kind: "directive", type: i19.EditContentDirective, selector: "[bizdocEditContent]" }, { kind: "directive", type: i19.WidgetContentDirective, selector: "[bizdocContent]" }, { kind: "component", type: i19.DesignerItemComponent, selector: "bizdoc-designer-element", inputs: ["privileges", "icon", "form", "state"], outputs: ["continue", "save"] }, { kind: "pipe", type: i20.LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: i21.L18nPipe, name: "l18n" }, { kind: "pipe", type: i21.TranslatePipe, name: "translate" }] });
150
+ FormDesignComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: FormDesignComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<bizdoc-designer-element [form]=\"form\" [privileges]=\"true\" [icon]=\"true\" [view]=\"view\" (back)=\"view = null\" [context]=\"context\">\r\n <ng-template bizdocContent>\r\n <ejs-sparkline *ngIf=\"usage\" width='250px' height='200px'\r\n type=\"Line\"\r\n [id]=\"model.name\"\r\n [fill]=\"primary\"\r\n [dataSource]=\"usage\"\r\n xName=\"date\"\r\n yName=\"count\"\r\n lineWidth=\"2\"\r\n valueType=\"DateTime\"\r\n [locale]=\"locale\"\r\n [markerSettings]=\"markerSettings\"\r\n [tooltipSettings]=\"tooltipSettings\"\r\n (dataLabelRendering)=\"dataLabelRendering($event)\"\r\n [enableRtl]=\"enableRtl\">\r\n </ejs-sparkline>\r\n <div class=\"row\">\r\n <button mat-icon-button (click)=\"diagram()\" [bizdocTooltip]=\"'Workflow'|translate\" [disabled]=\"model.draft\"><mat-icon>schema</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" [disabled]=\"model.draft\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <button mat-menu-item (click)=\"invite()\">{{'Invite'|l18n}}</button>\r\n </mat-menu>\r\n </div>\r\n </ng-template>\r\n <!--edit-->\r\n <ng-template bizdocEditContent>\r\n <div [formGroup]=\"form\" class=\"column\">\r\n <div class=\"row flex\" [formGroup]=\"format\">\r\n <mat-form-field>\r\n <mat-label>{{'Prefix'|translate}}</mat-label>\r\n <input matInput formControlName=\"prefix\" />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Digits'|translate}}</mat-label>\r\n <input matInput formControlName=\"digits\" maxlength=\"2\" />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <mat-label>{{'Suffix'|translate}}</mat-label>\r\n <input matInput formControlName=\"suffix\" />\r\n </mat-form-field>\r\n </div>\r\n <bizdoc-localized-string formControlName=\"group\" [placeholder]=\"'Group'|translate\"></bizdoc-localized-string>\r\n <bizdoc-localized-string formControlName=\"description\" [placeholder]=\"'Description'|translate\"></bizdoc-localized-string>\r\n <mat-form-field *ngIf=\"guides.length\">\r\n <mat-label>{{'Guide'|translate}}</mat-label>\r\n <mat-select formControlName=\"guide\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option *ngFor=\"let g of guides\" [value]=\"g.name\">{{g.title |localizedString}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field *ngIf=\"cubes.length\">\r\n <mat-label>{{'Cube'|translate}}</mat-label>\r\n <mat-select formControlName=\"cubes\" multiple>\r\n <mat-option *ngFor=\"let c of cubes\" [value]=\"c.name\">{{c.title |localizedString}}</mat-option>\r\n </mat-select>\r\n <mat-hint>{{'FormCubeHelp'|translate}}</mat-hint>\r\n </mat-form-field>\r\n <!--Rules-->\r\n <h2 class=\"mat-title row\">\r\n {{'Rules'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(rules, newRule(), 'Rule', ruleform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"rules\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, rules)\">\r\n <tr class=\"mat-row\" *ngFor=\"let r of rules.controls; index as index\" [formGroup]=\"r\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\" width=\"99%\">\r\n {{r.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\" style=\"white-space: pre;\">\r\n <button mat-icon-button (click)=\"edit(r, 'Rule', ruleform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"rules.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n<ng-template #ruleform let-form>\r\n <div [formGroup]=\"form\" class=\"column\">\r\n <div class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n </mat-form-field>\r\n </div>\r\n <bizdoc-designer-privileges [form]=\"form\"></bizdoc-designer-privileges>\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i7.SparklineComponent, selector: "ejs-sparkline", inputs: ["axisSettings", "border", "containerArea", "dataLabelSettings", "dataSource", "enablePersistence", "enableRtl", "endPointColor", "fill", "format", "height", "highPointColor", "lineWidth", "locale", "lowPointColor", "markerSettings", "negativePointColor", "opacity", "padding", "palette", "query", "rangeBandSettings", "rangePadding", "startPointColor", "theme", "tiePointColor", "tooltipSettings", "type", "useGroupingSeparator", "valueType", "width", "xName", "yName"], outputs: ["axisRendering", "dataLabelRendering", "load", "loaded", "markerRendering", "pointRegionMouseClick", "pointRegionMouseMove", "pointRendering", "resize", "seriesRendering", "sparklineMouseClick", "sparklineMouseMove", "tooltipInitialize"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i10.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i15.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i15.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i15.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i16.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: i17.LocalizedStringComponent, selector: "bizdoc-localized-string", inputs: ["class", "value", "placeholder", "required", "disabled", "maxlength"], outputs: ["valueChanges"] }, { kind: "component", type: i18.DesignerPrivilegesComponent, selector: "bizdoc-designer-privileges", inputs: ["form"] }, { kind: "directive", type: i19.EditContentDirective, selector: "[bizdocEditContent]" }, { kind: "directive", type: i19.WidgetContentDirective, selector: "[bizdocContent]" }, { kind: "component", type: i19.DesignerItemComponent, selector: "bizdoc-designer-element", inputs: ["privileges", "icon", "form", "view", "context"], outputs: ["continue", "back", "save"] }, { kind: "pipe", type: i20.LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: i21.L18nPipe, name: "l18n" }, { kind: "pipe", type: i21.TranslatePipe, name: "translate" }] });
151
151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FormDesignComponent, decorators: [{
152
152
  type: Component,
153
- args: [{ template: "<bizdoc-designer-element [form]=\"form\" [privileges]=\"true\" [icon]=\"true\" [state]=\"state\">\r\n <ng-template bizdocContent>\r\n <ejs-sparkline *ngIf=\"usage\" width='250px' height='200px'\r\n type=\"Line\"\r\n [id]=\"model.name\"\r\n [fill]=\"primary\"\r\n [dataSource]=\"usage\"\r\n xName=\"date\"\r\n yName=\"count\"\r\n lineWidth=\"2\"\r\n valueType=\"DateTime\"\r\n [locale]=\"locale\"\r\n [markerSettings]=\"markerSettings\"\r\n [tooltipSettings]=\"tooltipSettings\"\r\n (dataLabelRendering)=\"dataLabelRendering($event)\"\r\n [enableRtl]=\"enableRtl\">\r\n </ejs-sparkline>\r\n <div class=\"row\">\r\n <button mat-icon-button (click)=\"diagram()\" [bizdocTooltip]=\"'Workflow'|translate\" [disabled]=\"model.draft\"><mat-icon>schema</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" [disabled]=\"model.draft\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <button mat-menu-item (click)=\"invite()\">{{'Invite'|l18n}}</button>\r\n </mat-menu>\r\n </div>\r\n </ng-template>\r\n <!--edit-->\r\n <ng-template bizdocEditContent>\r\n <ng-container *ngIf=\"view; else main\">\r\n <h2 class=\"mat-title\">{{context.title|translate}}</h2>\r\n <div (document:keydown.escape)=\"closeView($event)\" #element class=\"column\">\r\n <ng-container *ngTemplateOutlet=\"view; context: context\"></ng-container>\r\n </div>\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"closeView()\" type=\"button\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon>keyboard_return</mat-icon></button>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n<!---->\r\n<ng-template #main>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <div class=\"row flex\" [formGroup]=\"format\">\r\n <mat-form-field>\r\n <mat-label>{{'Prefix'|translate}}</mat-label>\r\n <input matInput formControlName=\"prefix\" />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Digits'|translate}}</mat-label>\r\n <input matInput formControlName=\"digits\" maxlength=\"2\" />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <mat-label>{{'Suffix'|translate}}</mat-label>\r\n <input matInput formControlName=\"suffix\" />\r\n </mat-form-field>\r\n </div>\r\n <bizdoc-localized-string formControlName=\"group\" [placeholder]=\"'Group'|translate\"></bizdoc-localized-string>\r\n <bizdoc-localized-string formControlName=\"description\" [placeholder]=\"'Description'|translate\"></bizdoc-localized-string>\r\n <mat-form-field *ngIf=\"guides.length\">\r\n <mat-label>{{'Guide'|translate}}</mat-label>\r\n <mat-select formControlName=\"guide\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option *ngFor=\"let g of guides\" [value]=\"g.name\">{{g.title |localizedString}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field *ngIf=\"cubes.length\">\r\n <mat-label>{{'Cube'|translate}}</mat-label>\r\n <mat-select formControlName=\"cubes\" multiple>\r\n <mat-option *ngFor=\"let c of cubes\" [value]=\"c.name\">{{c.title |localizedString}}</mat-option>\r\n </mat-select>\r\n <mat-hint>{{'FormCubeHelp'|translate}}</mat-hint>\r\n </mat-form-field>\r\n <!--Rules-->\r\n <h2 class=\"mat-title row\">\r\n {{'Rules'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(rules, newRule(), 'Rule', ruleform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"rules\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, rules)\">\r\n <tr class=\"mat-row\" *ngFor=\"let r of rules.controls; index as index\" [formGroup]=\"r\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\" width=\"99%\">\r\n {{r.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\" style=\"white-space: pre;\">\r\n <button mat-icon-button (click)=\"edit(r, 'Rule', ruleform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"rules.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n </form>\r\n</ng-template>\r\n<ng-template #ruleform let-form>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\">\r\n <div class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n </mat-form-field>\r\n </div>\r\n <bizdoc-designer-privileges [form]=\"form\"></bizdoc-designer-privileges>\r\n </form>\r\n</ng-template>\r\n" }]
153
+ args: [{ template: "<bizdoc-designer-element [form]=\"form\" [privileges]=\"true\" [icon]=\"true\" [view]=\"view\" (back)=\"view = null\" [context]=\"context\">\r\n <ng-template bizdocContent>\r\n <ejs-sparkline *ngIf=\"usage\" width='250px' height='200px'\r\n type=\"Line\"\r\n [id]=\"model.name\"\r\n [fill]=\"primary\"\r\n [dataSource]=\"usage\"\r\n xName=\"date\"\r\n yName=\"count\"\r\n lineWidth=\"2\"\r\n valueType=\"DateTime\"\r\n [locale]=\"locale\"\r\n [markerSettings]=\"markerSettings\"\r\n [tooltipSettings]=\"tooltipSettings\"\r\n (dataLabelRendering)=\"dataLabelRendering($event)\"\r\n [enableRtl]=\"enableRtl\">\r\n </ejs-sparkline>\r\n <div class=\"row\">\r\n <button mat-icon-button (click)=\"diagram()\" [bizdocTooltip]=\"'Workflow'|translate\" [disabled]=\"model.draft\"><mat-icon>schema</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" [disabled]=\"model.draft\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <button mat-menu-item (click)=\"invite()\">{{'Invite'|l18n}}</button>\r\n </mat-menu>\r\n </div>\r\n </ng-template>\r\n <!--edit-->\r\n <ng-template bizdocEditContent>\r\n <div [formGroup]=\"form\" class=\"column\">\r\n <div class=\"row flex\" [formGroup]=\"format\">\r\n <mat-form-field>\r\n <mat-label>{{'Prefix'|translate}}</mat-label>\r\n <input matInput formControlName=\"prefix\" />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Digits'|translate}}</mat-label>\r\n <input matInput formControlName=\"digits\" maxlength=\"2\" />\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field>\r\n <mat-label>{{'Suffix'|translate}}</mat-label>\r\n <input matInput formControlName=\"suffix\" />\r\n </mat-form-field>\r\n </div>\r\n <bizdoc-localized-string formControlName=\"group\" [placeholder]=\"'Group'|translate\"></bizdoc-localized-string>\r\n <bizdoc-localized-string formControlName=\"description\" [placeholder]=\"'Description'|translate\"></bizdoc-localized-string>\r\n <mat-form-field *ngIf=\"guides.length\">\r\n <mat-label>{{'Guide'|translate}}</mat-label>\r\n <mat-select formControlName=\"guide\">\r\n <mat-option>{{'None'|translate}}</mat-option>\r\n <mat-option *ngFor=\"let g of guides\" [value]=\"g.name\">{{g.title |localizedString}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field *ngIf=\"cubes.length\">\r\n <mat-label>{{'Cube'|translate}}</mat-label>\r\n <mat-select formControlName=\"cubes\" multiple>\r\n <mat-option *ngFor=\"let c of cubes\" [value]=\"c.name\">{{c.title |localizedString}}</mat-option>\r\n </mat-select>\r\n <mat-hint>{{'FormCubeHelp'|translate}}</mat-hint>\r\n </mat-form-field>\r\n <!--Rules-->\r\n <h2 class=\"mat-title row\">\r\n {{'Rules'|translate}}\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add(rules, newRule(), 'Rule', ruleform)\" [bizdocTooltip]=\"'Add'|translate\" type=\"button\"><mat-icon>add_circle_outline</mat-icon></button>\r\n </h2>\r\n <table formArrayName=\"rules\" class=\"mat-table\" cdkDropList (cdkDropListDropped)=\"drop($event, rules)\">\r\n <tr class=\"mat-row\" *ngFor=\"let r of rules.controls; index as index\" [formGroup]=\"r\" cdkDrag>\r\n <td class=\"mat-cell\">\r\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\r\n </td>\r\n <td class=\"mat-cell flex\" width=\"99%\">\r\n {{r.get('title').value}}\r\n </td>\r\n <td class=\"mat-cell\" style=\"white-space: pre;\">\r\n <button mat-icon-button (click)=\"edit(r, 'Rule', ruleform)\" [bizdocTooltip]=\"'Edit'|translate\" type=\"button\"><mat-icon>edit</mat-icon></button>\r\n <button mat-icon-button (click)=\"rules.removeAt(index)\" [bizdocTooltip]=\"'Remove'|translate\" type=\"button\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n </ng-template>\r\n</bizdoc-designer-element>\r\n<ng-template #ruleform let-form>\r\n <div [formGroup]=\"form\" class=\"column\">\r\n <div class=\"row\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required />\r\n <mat-error *ngIf=\"form.get('title').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Title'|translate)\"></mat-error>\r\n </mat-form-field>\r\n &nbsp;\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n <mat-error *ngIf=\"form.get('name').hasError('required')\" [innerHTML]=\"'RequiredErr'|translate:('Name'|translate)\"></mat-error>\r\n </mat-form-field>\r\n </div>\r\n <bizdoc-designer-privileges [form]=\"form\"></bizdoc-designer-privileges>\r\n </div>\r\n</ng-template>\r\n" }]
154
154
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.PanesRouter }, { type: i3.SystemService }, { type: i4.SessionService }, { type: i0.Injector }, { type: i5.TranslateService }, { type: i0.ElementRef }, { type: i22.DesignerRef, decorators: [{
155
155
  type: Inject,
156
156
  args: [DesignerRef]
157
157
  }] }]; } });
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2FyY2hpdGVjdHVyZS9lbGVtZW50cy9mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vYXJjaGl0ZWN0dXJlL2VsZW1lbnRzL2Zvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJeEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBZ0MsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRzVELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSw0QkFBNEI7SUEwQ25FLFlBQVksRUFBZSxFQUNqQixPQUFvQixFQUNwQixRQUF1QixFQUN2QixRQUF3QixFQUN4QixTQUFtQixFQUNuQixVQUE0QixFQUNwQyxPQUF3QixFQUNILEdBQWdCO1FBQ3JDLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBUGhCLFlB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QW1IQTsyRkRwR2EsbUJBQW1CO2tCQUQvQixTQUFTOzs7MEJBa0RMLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBJbmplY3RvciwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQXhpc1NldHRpbmdzTW9kZWwsIElEYXRhTGFiZWxSZW5kZXJpbmdFdmVudEFyZ3MsIExpbmVTZXR0aW5nc01vZGVsLCBTcGFya2xpbmUsIFNwYXJrbGluZU1hcmtlclNldHRpbmdzTW9kZWwsIFNwYXJrbGluZVRvb2x0aXBTZXR0aW5nc01vZGVsIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItY2hhcnRzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQYW5lc1JvdXRlciB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Nsb3RzL3JvdXRlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN5c3RlbVNlcnZpY2UsIFJhbmdlSW5mbyB9IGZyb20gXCIuLi8uLi9zeXN0ZW0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEZXNpZ25lclR5cGVFbGVtZW50Q29tcG9uZW50IH0gZnJvbSBcIi4uL2Rlc2lnbmVyLmJhc2VcIjtcclxuaW1wb3J0IHsgRGVzaWduZXJSZWYsIEVsZW1lbnRJbmZvLCBQZXJtaXNzaW9uTW9kZWwsIGxvY2FsaXplU3RyaW5nLCBwcm9ncmFtTmFtZSB9IGZyb20gXCIuLi9kZWNsYXJhdGlvbnNcIjtcclxuaW1wb3J0IHsgRm9ybUludml0ZURpYWxvZyB9IGZyb20gXCIuL2Zvcm0taW52aXRlLmRpYWxvZ1wiO1xyXG5pbXBvcnQgeyBPcGVuUG9saWN5IH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSW50ZXJuYXRpb25hbGl6YXRpb24gfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWJhc2VcIjtcclxuXHJcbkBDb21wb25lbnQoeyB0ZW1wbGF0ZVVybDogJ2Zvcm0uY29tcG9uZW50Lmh0bWwnIH0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtRGVzaWduQ29tcG9uZW50IGV4dGVuZHMgRGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcmVhZG9ubHkgcnVsZXMgPSB0aGlzLl9mYi5hcnJheShbXSk7XHJcbiAgcmVhZG9ubHkgZm9ybWF0ID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgcHJlZml4OiBudWxsLFxyXG4gICAgc3VmZml4OiBudWxsLFxyXG4gICAgZGlnaXRzOiBudWxsXHJcbiAgfSk7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIHJ1bGVzOiB0aGlzLnJ1bGVzLFxyXG4gICAgZ3VpZGU6IG51bGwsXHJcbiAgICBmb3JtYXQ6IG51bGwsXHJcbiAgICBncm91cDogbnVsbCxcclxuICAgIGRlc2NyaXB0aW9uOiBudWxsLFxyXG4gICAgY3ViZXM6IG51bGxcclxuICB9KTtcclxuICB0aGVtZTogJ01hdGVyaWFsJyB8ICdNYXRlcmlhbERhcmsnID0gdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ01hdGVyaWFsRGFyaycgOiAnTWF0ZXJpYWwnO1xyXG4gIHJlYWRvbmx5IGF4aXNTZXR0aW5ncyA9IHtcclxuICAgIGxpbmVTZXR0aW5nczoge1xyXG4gICAgICBvcGFjaXR5IDogLjUsXHJcbiAgICAgIHdpZHRoOiAuNVxyXG4gICAgfSBhcyBMaW5lU2V0dGluZ3NNb2RlbCxcclxuICB9IGFzIEF4aXNTZXR0aW5nc01vZGVsO1xyXG4gIHJlYWRvbmx5IG1hcmtlclNldHRpbmdzID0ge1xyXG4gICAgdmlzaWJsZTogWydOb25lJ10sXHJcbiAgICBzaXplOiAxLjUsXHJcbiAgICBmaWxsOiB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCgpLFxyXG4gIH0gYXMgU3BhcmtsaW5lTWFya2VyU2V0dGluZ3NNb2RlbDtcclxuICByZWFkb25seSB0b29sdGlwU2V0dGluZ3MgPSB7XHJcbiAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgZm9ybWF0OiAnJHtkYXRlfScsXHJcbiAgICB0cmFja0xpbmVTZXR0aW5nczoge1xyXG4gICAgICB2aXNpYmxlOiB0cnVlXHJcbiAgICB9XHJcbiAgfSBhcyBTcGFya2xpbmVUb29sdGlwU2V0dGluZ3NNb2RlbDtcclxuICB1c2FnZTogUmFuZ2VJbmZvW107XHJcbiAgcHJpbWFyeSA9IHRoaXMuX3Nlc3Npb24uZ2V0UHJpbWVyeSgpO1xyXG4gIHJlYWRvbmx5IGVuYWJsZVJ0bCA9IHRoaXMuX3Nlc3Npb24uaW52ZXJzZTtcclxuICBsb2NhbGU6IHN0cmluZztcclxuICByZWFkb25seSBndWlkZXM6IEVsZW1lbnRJbmZvW107XHJcbiAgcmVhZG9ubHkgY3ViZXM6IEVsZW1lbnRJbmZvW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaW50bDogSW50ZXJuYXRpb25hbGl6YXRpb24gPSBuZXcgSW50ZXJuYXRpb25hbGl6YXRpb24oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3RvcihmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFBhbmVzUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgZWxlbWVudDogRWxlbWVudFJlZjxhbnk+LFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcmVmOiBEZXNpZ25lclJlZikge1xyXG4gICAgc3VwZXIoZmIsIGVsZW1lbnQsIHJlZik7XHJcbiAgICB0aGlzLmxvY2FsZSA9IF9zZXNzaW9uLmxhbmd1YWdlO1xyXG4gICAgdGhpcy5fc2Vzc2lvbi50aGVtZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZSh0ID0+IHtcclxuICAgICAgICB0aGlzLnRoZW1lID0gdC5kYXJrID8gJ01hdGVyaWFsRGFyaycgOiAnTWF0ZXJpYWwnO1xyXG4gICAgICAgIHRoaXMucHJpbWFyeSA9IHRoaXMuX3Nlc3Npb24uZ2V0UHJpbWVyeSgpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZ3VpZGVzID0gcmVmLmRlc2lnbmVyLmd1aWRlcztcclxuICAgIHRoaXMuY3ViZXMgPSByZWYuZGVzaWduZXIuY3ViZXM7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3dpZGdldCcpXHJcbiAgICAgIHRoaXMuX3NlcnZpY2UucmFuZ2UodGhpcy5tb2RlbC5uYW1lKS5zdWJzY3JpYmUociA9PlxyXG4gICAgICAgIC8vbmV3IFNwYXJrbGluZSh7XHJcbiAgICAgICAgLy8gIGRhdGFMYWJlbFJlbmRlcmluZzogdGhpcy5kYXRhTGFiZWxSZW5kZXJpbmcuYmluZCh0aGlzKVxyXG4gICAgICAgIC8vfSwgdGhpcy51c2FnZS5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAgIHRoaXMudXNhZ2UgPSByKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm1vZGVsLnJ1bGVzPy5cclxuICAgICAgICBmb3JFYWNoKHIgPT4gdGhpcy5ydWxlcy5wdXNoKHRoaXMubmV3UnVsZShyKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pKTtcclxuICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMubW9kZWw7XHJcbiAgICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgICBjb25zdCBpbmRleDEgPSBmb3JtYXQuaW5kZXhPZigneycpLFxyXG4gICAgICAgICAgaW5kZXgyID0gZm9ybWF0Lmxhc3RJbmRleE9mKCd9JyksXHJcbiAgICAgICAgICBpbmRleDMgPSBmb3JtYXQuaW5kZXhPZignOicsIGluZGV4MSk7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICBwcmVmaXg6IGluZGV4MSA+IDAgPyBmb3JtYXQuc3Vic3RyaW5nKDAsIGluZGV4MSkgOiBudWxsLFxyXG4gICAgICAgICAgZGlnaXRzOiBpbmRleDIgPiBpbmRleDEgKyAyICYmIGluZGV4MyA/IHBhcnNlSW50KGZvcm1hdC5zdWJzdHJpbmcoaW5kZXgzICsgMiwgaW5kZXgyKSkgOiBudWxsLFxyXG4gICAgICAgICAgc3VmZml4OiBpbmRleDIgPCBmb3JtYXQubGVuZ3RoID8gZm9ybWF0LnN1YnN0cmluZyhpbmRleDIgKyAxKSA6IG51bGxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1hdC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMTUwKSkuc3Vic2NyaWJlKGYgPT4ge1xyXG4gICAgICAgIGxldCBmb3JtYXQgPSBmLnByZWZpeCBhcyBzdHJpbmcgfHwgKHRoaXMuZm9ybS5nZXQoJ3RpdGxlJykudmFsdWUgYXMgc3RyaW5nKTtcclxuICAgICAgICBpZiAoZi5kaWdpdHMpIGZvcm1hdCArPSBgezA6RCR7Zi5kaWdpdHN9fWA7XHJcbiAgICAgICAgaWYgKGYuc3VmZml4KSBmb3JtYXQgKz0gZi5zdWZmaXg7XHJcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnZm9ybWF0Jykuc2V0VmFsdWUoZm9ybWF0KTtcclxuICAgICAgICB0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMubW9kZWwucmVzb3VyY2VUeXBlICYmIHRoaXMuZGlzYWJsZSgnZ3JvdXAnLCAnZGVzY3JpcHRpb24nKTtcclxuICAgICAgdGhpcy5fcmVmLnVubG9jaygpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmVuYWJsZSgnZ3JvdXAnLCAnZGVzY3JpcHRpb24nKSk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gIH1cclxuICBkYXRhTGFiZWxSZW5kZXJpbmcoZXZ0OiBJRGF0YUxhYmVsUmVuZGVyaW5nRXZlbnRBcmdzKSB7XHJcbiAgICBldnQudGV4dCA9IHRoaXMuX2ludGwuZm9ybWF0RGF0ZShldnQueCBhcyBhbnkpXHJcbiAgfVxyXG4gIG5ld1J1bGUocnVsZT86IFBlcm1pc3Npb25Nb2RlbCk6IGFueSB7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fZmIuY29udHJvbChydWxlPy5uYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgdGl0bGUgPSB0aGlzLl9mYi5jb250cm9sKHJ1bGU/LnRpdGxlKTtcclxuICAgICFydWxlICYmIHRpdGxlLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodiA9PiBuYW1lLnNldFZhbHVlKHByb2dyYW1OYW1lKHYpKSk7XHJcbiAgICByZXR1cm4gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBuYW1lLFxyXG4gICAgICB0aXRsZSxcclxuICAgICAgcm9sZXM6IHJ1bGU/LnJvbGVzLFxyXG4gICAgICBydWxlOiBydWxlPy5ydWxlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGludml0ZSgpIHtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShGb3JtSW52aXRlRGlhbG9nLCB7XHJcbiAgICAgIHBvbGljeTogT3BlblBvbGljeS5EaWFsb2csXHJcbiAgICAgIGljb246IHRoaXMubW9kZWwuaWNvbixcclxuICAgICAgdGl0bGU6IGxvY2FsaXplU3RyaW5nKHRoaXMubW9kZWwudGl0bGUpLFxyXG4gICAgICBncm91cDogdGhpcy5fdHJhbnNsYXRlLmdldCgnSW52aXRlJyksXHJcbiAgICAgIGluamVjdG9yOiBJbmplY3Rvci5jcmVhdGUoW10sIHRoaXMuX2luamVjdG9yKVxyXG4gICAgfSlcclxuICB9XHJcbiAgZGlhZ3JhbSgpIHtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ2FkbWluL2Zvcm1zJywgdGhpcy5tb2RlbC5uYW1lXSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxiaXpkb2MtZGVzaWduZXItZWxlbWVudCBbZm9ybV09XCJmb3JtXCIgW3ByaXZpbGVnZXNdPVwidHJ1ZVwiIFtpY29uXT1cInRydWVcIiBbc3RhdGVdPVwic3RhdGVcIj5cclxuICA8bmctdGVtcGxhdGUgYml6ZG9jQ29udGVudD5cclxuICAgIDxlanMtc3BhcmtsaW5lICpuZ0lmPVwidXNhZ2VcIiB3aWR0aD0nMjUwcHgnIGhlaWdodD0nMjAwcHgnXHJcbiAgICAgICAgICAgICAgICAgICB0eXBlPVwiTGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbaWRdPVwibW9kZWwubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbZmlsbF09XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInVzYWdlXCJcclxuICAgICAgICAgICAgICAgICAgIHhOYW1lPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICB5TmFtZT1cImNvdW50XCJcclxuICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgdmFsdWVUeXBlPVwiRGF0ZVRpbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgW21hcmtlclNldHRpbmdzXT1cIm1hcmtlclNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgIFt0b29sdGlwU2V0dGluZ3NdPVwidG9vbHRpcFNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgIChkYXRhTGFiZWxSZW5kZXJpbmcpPVwiZGF0YUxhYmVsUmVuZGVyaW5nKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgW2VuYWJsZVJ0bF09XCJlbmFibGVSdGxcIj5cclxuICAgIDwvZWpzLXNwYXJrbGluZT5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImRpYWdyYW0oKVwiIFtiaXpkb2NUb29sdGlwXT1cIidXb3JrZmxvdyd8dHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cIm1vZGVsLmRyYWZ0XCI+PG1hdC1pY29uPnNjaGVtYTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm9wdGlvbnNcIiBbZGlzYWJsZWRdPVwibW9kZWwuZHJhZnRcIj48bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPG1hdC1tZW51ICNvcHRpb25zPlxyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiaW52aXRlKClcIj57eydJbnZpdGUnfGwxOG59fTwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1tZW51PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8IS0tZWRpdC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSBiaXpkb2NFZGl0Q29udGVudD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3OyBlbHNlIG1haW5cIj5cclxuICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3tjb250ZXh0LnRpdGxlfHRyYW5zbGF0ZX19PC9oMj5cclxuICAgICAgPGRpdiAoZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUpPVwiY2xvc2VWaWV3KCRldmVudClcIiAjZWxlbWVudCBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2aWV3OyBjb250ZXh0OiBjb250ZXh0XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGFjdGlvbnNcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNsb3NlVmlldygpXCIgdHlwZT1cImJ1dHRvblwiIFtiaXpkb2NUb29sdGlwXT1cIidCYWNrJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+a2V5Ym9hcmRfcmV0dXJuPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2JpemRvYy1kZXNpZ25lci1lbGVtZW50PlxyXG48IS0tLS0+XHJcbjxuZy10ZW1wbGF0ZSAjbWFpbj5cclxuICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBmbGV4XCIgW2Zvcm1Hcm91cF09XCJmb3JtYXRcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3snUHJlZml4J3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJwcmVmaXhcIiAvPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAmbmJzcDtcclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3snRGlnaXRzJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkaWdpdHNcIiBtYXhsZW5ndGg9XCIyXCIgLz5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgJm5ic3A7XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7J1N1ZmZpeCd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwic3VmZml4XCIgLz5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJpemRvYy1sb2NhbGl6ZWQtc3RyaW5nIGZvcm1Db250cm9sTmFtZT1cImdyb3VwXCIgW3BsYWNlaG9sZGVyXT1cIidHcm91cCd8dHJhbnNsYXRlXCI+PC9iaXpkb2MtbG9jYWxpemVkLXN0cmluZz5cclxuICAgIDxiaXpkb2MtbG9jYWxpemVkLXN0cmluZyBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiIFtwbGFjZWhvbGRlcl09XCInRGVzY3JpcHRpb24nfHRyYW5zbGF0ZVwiPjwvYml6ZG9jLWxvY2FsaXplZC1zdHJpbmc+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJndWlkZXMubGVuZ3RoXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snR3VpZGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImd1aWRlXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24+e3snTm9uZSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGcgb2YgZ3VpZGVzXCIgW3ZhbHVlXT1cImcubmFtZVwiPnt7Zy50aXRsZSB8bG9jYWxpemVkU3RyaW5nfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJjdWJlcy5sZW5ndGhcIj5cclxuICAgICAgPG1hdC1sYWJlbD57eydDdWJlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjdWJlc1wiIG11bHRpcGxlPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGN1YmVzXCIgW3ZhbHVlXT1cImMubmFtZVwiPnt7Yy50aXRsZSB8bG9jYWxpemVkU3RyaW5nfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPG1hdC1oaW50Pnt7J0Zvcm1DdWJlSGVscCd8dHJhbnNsYXRlfX08L21hdC1oaW50PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwhLS1SdWxlcy0tPlxyXG4gICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlIHJvd1wiPlxyXG4gICAgICB7eydSdWxlcyd8dHJhbnNsYXRlfX1cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYWRkKHJ1bGVzLCBuZXdSdWxlKCksICdSdWxlJywgcnVsZWZvcm0pXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FkZCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5hZGRfY2lyY2xlX291dGxpbmU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9oMj5cclxuICAgIDx0YWJsZSBmb3JtQXJyYXlOYW1lPVwicnVsZXNcIiBjbGFzcz1cIm1hdC10YWJsZVwiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQsIHJ1bGVzKVwiPlxyXG4gICAgICA8dHIgY2xhc3M9XCJtYXQtcm93XCIgKm5nRm9yPVwibGV0IHIgb2YgcnVsZXMuY29udHJvbHM7IGluZGV4IGFzIGluZGV4XCIgW2Zvcm1Hcm91cF09XCJyXCIgY2RrRHJhZz5cclxuICAgICAgICA8dGQgY2xhc3M9XCJtYXQtY2VsbFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNka0RyYWdIYW5kbGU+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGwgZmxleFwiIHdpZHRoPVwiOTklXCI+XHJcbiAgICAgICAgICB7e3IuZ2V0KCd0aXRsZScpLnZhbHVlfX1cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogcHJlO1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImVkaXQociwgJ1J1bGUnLCBydWxlZm9ybSlcIiBbYml6ZG9jVG9vbHRpcF09XCInRWRpdCd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5lZGl0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJydWxlcy5yZW1vdmVBdChpbmRleClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVtb3ZlJ3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgPC9mb3JtPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI3J1bGVmb3JtIGxldC1mb3JtPlxyXG4gIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7J1RpdGxlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uZ2V0KCd0aXRsZScpLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgW2lubmVySFRNTF09XCInUmVxdWlyZWRFcnInfHRyYW5zbGF0ZTooJ1RpdGxlJ3x0cmFuc2xhdGUpXCI+PC9tYXQtZXJyb3I+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICZuYnNwO1xyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eydOYW1lJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybS5nZXQoJ25hbWUnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIFtpbm5lckhUTUxdPVwiJ1JlcXVpcmVkRXJyJ3x0cmFuc2xhdGU6KCdOYW1lJ3x0cmFuc2xhdGUpXCI+PC9tYXQtZXJyb3I+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxiaXpkb2MtZGVzaWduZXItcHJpdmlsZWdlcyBbZm9ybV09XCJmb3JtXCI+PC9iaXpkb2MtZGVzaWduZXItcHJpdmlsZWdlcz5cclxuICA8L2Zvcm0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2FyY2hpdGVjdHVyZS9lbGVtZW50cy9mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vYXJjaGl0ZWN0dXJlL2VsZW1lbnRzL2Zvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJeEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBZ0MsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRzVELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSw0QkFBNEI7SUEwQ25FLFlBQVksRUFBZSxFQUNqQixPQUFvQixFQUNwQixRQUF1QixFQUN2QixRQUF3QixFQUN4QixTQUFtQixFQUNuQixVQUE0QixFQUNwQyxPQUF3QixFQUNILEdBQWdCO1FBQ3JDLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBUGhCLFlB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QXNHQTsyRkR2RmEsbUJBQW1CO2tCQUQvQixTQUFTOzs7MEJBa0RMLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBJbmplY3RvciwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQXhpc1NldHRpbmdzTW9kZWwsIElEYXRhTGFiZWxSZW5kZXJpbmdFdmVudEFyZ3MsIExpbmVTZXR0aW5nc01vZGVsLCBTcGFya2xpbmUsIFNwYXJrbGluZU1hcmtlclNldHRpbmdzTW9kZWwsIFNwYXJrbGluZVRvb2x0aXBTZXR0aW5nc01vZGVsIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItY2hhcnRzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQYW5lc1JvdXRlciB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3Nsb3RzL3JvdXRlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN5c3RlbVNlcnZpY2UsIFJhbmdlSW5mbyB9IGZyb20gXCIuLi8uLi9zeXN0ZW0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEZXNpZ25lclR5cGVFbGVtZW50Q29tcG9uZW50IH0gZnJvbSBcIi4uL2Rlc2lnbmVyLmJhc2VcIjtcclxuaW1wb3J0IHsgRGVzaWduZXJSZWYsIEVsZW1lbnRJbmZvLCBQZXJtaXNzaW9uTW9kZWwsIGxvY2FsaXplU3RyaW5nLCBwcm9ncmFtTmFtZSB9IGZyb20gXCIuLi9kZWNsYXJhdGlvbnNcIjtcclxuaW1wb3J0IHsgRm9ybUludml0ZURpYWxvZyB9IGZyb20gXCIuL2Zvcm0taW52aXRlLmRpYWxvZ1wiO1xyXG5pbXBvcnQgeyBPcGVuUG9saWN5IH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvdHJhbnNsYXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSW50ZXJuYXRpb25hbGl6YXRpb24gfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWJhc2VcIjtcclxuXHJcbkBDb21wb25lbnQoeyB0ZW1wbGF0ZVVybDogJ2Zvcm0uY29tcG9uZW50Lmh0bWwnIH0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtRGVzaWduQ29tcG9uZW50IGV4dGVuZHMgRGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcmVhZG9ubHkgcnVsZXMgPSB0aGlzLl9mYi5hcnJheShbXSk7XHJcbiAgcmVhZG9ubHkgZm9ybWF0ID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgcHJlZml4OiBudWxsLFxyXG4gICAgc3VmZml4OiBudWxsLFxyXG4gICAgZGlnaXRzOiBudWxsXHJcbiAgfSk7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIHJ1bGVzOiB0aGlzLnJ1bGVzLFxyXG4gICAgZ3VpZGU6IG51bGwsXHJcbiAgICBmb3JtYXQ6IG51bGwsXHJcbiAgICBncm91cDogbnVsbCxcclxuICAgIGRlc2NyaXB0aW9uOiBudWxsLFxyXG4gICAgY3ViZXM6IG51bGxcclxuICB9KTtcclxuICB0aGVtZTogJ01hdGVyaWFsJyB8ICdNYXRlcmlhbERhcmsnID0gdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ01hdGVyaWFsRGFyaycgOiAnTWF0ZXJpYWwnO1xyXG4gIHJlYWRvbmx5IGF4aXNTZXR0aW5ncyA9IHtcclxuICAgIGxpbmVTZXR0aW5nczoge1xyXG4gICAgICBvcGFjaXR5IDogLjUsXHJcbiAgICAgIHdpZHRoOiAuNVxyXG4gICAgfSBhcyBMaW5lU2V0dGluZ3NNb2RlbCxcclxuICB9IGFzIEF4aXNTZXR0aW5nc01vZGVsO1xyXG4gIHJlYWRvbmx5IG1hcmtlclNldHRpbmdzID0ge1xyXG4gICAgdmlzaWJsZTogWydOb25lJ10sXHJcbiAgICBzaXplOiAxLjUsXHJcbiAgICBmaWxsOiB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCgpLFxyXG4gIH0gYXMgU3BhcmtsaW5lTWFya2VyU2V0dGluZ3NNb2RlbDtcclxuICByZWFkb25seSB0b29sdGlwU2V0dGluZ3MgPSB7XHJcbiAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgZm9ybWF0OiAnJHtkYXRlfScsXHJcbiAgICB0cmFja0xpbmVTZXR0aW5nczoge1xyXG4gICAgICB2aXNpYmxlOiB0cnVlXHJcbiAgICB9XHJcbiAgfSBhcyBTcGFya2xpbmVUb29sdGlwU2V0dGluZ3NNb2RlbDtcclxuICB1c2FnZTogUmFuZ2VJbmZvW107XHJcbiAgcHJpbWFyeSA9IHRoaXMuX3Nlc3Npb24uZ2V0UHJpbWVyeSgpO1xyXG4gIHJlYWRvbmx5IGVuYWJsZVJ0bCA9IHRoaXMuX3Nlc3Npb24uaW52ZXJzZTtcclxuICBsb2NhbGU6IHN0cmluZztcclxuICByZWFkb25seSBndWlkZXM6IEVsZW1lbnRJbmZvW107XHJcbiAgcmVhZG9ubHkgY3ViZXM6IEVsZW1lbnRJbmZvW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaW50bDogSW50ZXJuYXRpb25hbGl6YXRpb24gPSBuZXcgSW50ZXJuYXRpb25hbGl6YXRpb24oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3RvcihmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFBhbmVzUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgZWxlbWVudDogRWxlbWVudFJlZjxhbnk+LFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcmVmOiBEZXNpZ25lclJlZikge1xyXG4gICAgc3VwZXIoZmIsIGVsZW1lbnQsIHJlZik7XHJcbiAgICB0aGlzLmxvY2FsZSA9IF9zZXNzaW9uLmxhbmd1YWdlO1xyXG4gICAgdGhpcy5fc2Vzc2lvbi50aGVtZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZSh0ID0+IHtcclxuICAgICAgICB0aGlzLnRoZW1lID0gdC5kYXJrID8gJ01hdGVyaWFsRGFyaycgOiAnTWF0ZXJpYWwnO1xyXG4gICAgICAgIHRoaXMucHJpbWFyeSA9IHRoaXMuX3Nlc3Npb24uZ2V0UHJpbWVyeSgpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZ3VpZGVzID0gcmVmLmRlc2lnbmVyLmd1aWRlcztcclxuICAgIHRoaXMuY3ViZXMgPSByZWYuZGVzaWduZXIuY3ViZXM7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3dpZGdldCcpXHJcbiAgICAgIHRoaXMuX3NlcnZpY2UucmFuZ2UodGhpcy5tb2RlbC5uYW1lKS5zdWJzY3JpYmUociA9PlxyXG4gICAgICAgIC8vbmV3IFNwYXJrbGluZSh7XHJcbiAgICAgICAgLy8gIGRhdGFMYWJlbFJlbmRlcmluZzogdGhpcy5kYXRhTGFiZWxSZW5kZXJpbmcuYmluZCh0aGlzKVxyXG4gICAgICAgIC8vfSwgdGhpcy51c2FnZS5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAgIHRoaXMudXNhZ2UgPSByKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm1vZGVsLnJ1bGVzPy5cclxuICAgICAgICBmb3JFYWNoKHIgPT4gdGhpcy5ydWxlcy5wdXNoKHRoaXMubmV3UnVsZShyKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pKTtcclxuICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMubW9kZWw7XHJcbiAgICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgICBjb25zdCBpbmRleDEgPSBmb3JtYXQuaW5kZXhPZigneycpLFxyXG4gICAgICAgICAgaW5kZXgyID0gZm9ybWF0Lmxhc3RJbmRleE9mKCd9JyksXHJcbiAgICAgICAgICBpbmRleDMgPSBmb3JtYXQuaW5kZXhPZignOicsIGluZGV4MSk7XHJcbiAgICAgICAgdGhpcy5mb3JtYXQucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICBwcmVmaXg6IGluZGV4MSA+IDAgPyBmb3JtYXQuc3Vic3RyaW5nKDAsIGluZGV4MSkgOiBudWxsLFxyXG4gICAgICAgICAgZGlnaXRzOiBpbmRleDIgPiBpbmRleDEgKyAyICYmIGluZGV4MyA/IHBhcnNlSW50KGZvcm1hdC5zdWJzdHJpbmcoaW5kZXgzICsgMiwgaW5kZXgyKSkgOiBudWxsLFxyXG4gICAgICAgICAgc3VmZml4OiBpbmRleDIgPCBmb3JtYXQubGVuZ3RoID8gZm9ybWF0LnN1YnN0cmluZyhpbmRleDIgKyAxKSA6IG51bGxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1hdC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMTUwKSkuc3Vic2NyaWJlKGYgPT4ge1xyXG4gICAgICAgIGxldCBmb3JtYXQgPSBmLnByZWZpeCBhcyBzdHJpbmcgfHwgKHRoaXMuZm9ybS5nZXQoJ3RpdGxlJykudmFsdWUgYXMgc3RyaW5nKTtcclxuICAgICAgICBpZiAoZi5kaWdpdHMpIGZvcm1hdCArPSBgezA6RCR7Zi5kaWdpdHN9fWA7XHJcbiAgICAgICAgaWYgKGYuc3VmZml4KSBmb3JtYXQgKz0gZi5zdWZmaXg7XHJcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnZm9ybWF0Jykuc2V0VmFsdWUoZm9ybWF0KTtcclxuICAgICAgICB0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMubW9kZWwucmVzb3VyY2VUeXBlICYmIHRoaXMuZGlzYWJsZSgnZ3JvdXAnLCAnZGVzY3JpcHRpb24nKTtcclxuICAgICAgdGhpcy5fcmVmLnVubG9jaygpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmVuYWJsZSgnZ3JvdXAnLCAnZGVzY3JpcHRpb24nKSk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gIH1cclxuICBkYXRhTGFiZWxSZW5kZXJpbmcoZXZ0OiBJRGF0YUxhYmVsUmVuZGVyaW5nRXZlbnRBcmdzKSB7XHJcbiAgICBldnQudGV4dCA9IHRoaXMuX2ludGwuZm9ybWF0RGF0ZShldnQueCBhcyBhbnkpXHJcbiAgfVxyXG4gIG5ld1J1bGUocnVsZT86IFBlcm1pc3Npb25Nb2RlbCk6IGFueSB7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fZmIuY29udHJvbChydWxlPy5uYW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgdGl0bGUgPSB0aGlzLl9mYi5jb250cm9sKHJ1bGU/LnRpdGxlKTtcclxuICAgICFydWxlICYmIHRpdGxlLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodiA9PiBuYW1lLnNldFZhbHVlKHByb2dyYW1OYW1lKHYpKSk7XHJcbiAgICByZXR1cm4gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBuYW1lLFxyXG4gICAgICB0aXRsZSxcclxuICAgICAgcm9sZXM6IHJ1bGU/LnJvbGVzLFxyXG4gICAgICBydWxlOiBydWxlPy5ydWxlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGludml0ZSgpIHtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShGb3JtSW52aXRlRGlhbG9nLCB7XHJcbiAgICAgIHBvbGljeTogT3BlblBvbGljeS5EaWFsb2csXHJcbiAgICAgIGljb246IHRoaXMubW9kZWwuaWNvbixcclxuICAgICAgdGl0bGU6IGxvY2FsaXplU3RyaW5nKHRoaXMubW9kZWwudGl0bGUpLFxyXG4gICAgICBncm91cDogdGhpcy5fdHJhbnNsYXRlLmdldCgnSW52aXRlJyksXHJcbiAgICAgIGluamVjdG9yOiBJbmplY3Rvci5jcmVhdGUoW10sIHRoaXMuX2luamVjdG9yKVxyXG4gICAgfSlcclxuICB9XHJcbiAgZGlhZ3JhbSgpIHtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ2FkbWluL2Zvcm1zJywgdGhpcy5tb2RlbC5uYW1lXSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxiaXpkb2MtZGVzaWduZXItZWxlbWVudCBbZm9ybV09XCJmb3JtXCIgW3ByaXZpbGVnZXNdPVwidHJ1ZVwiIFtpY29uXT1cInRydWVcIiBbdmlld109XCJ2aWV3XCIgKGJhY2spPVwidmlldyA9IG51bGxcIiBbY29udGV4dF09XCJjb250ZXh0XCI+XHJcbiAgPG5nLXRlbXBsYXRlIGJpemRvY0NvbnRlbnQ+XHJcbiAgICA8ZWpzLXNwYXJrbGluZSAqbmdJZj1cInVzYWdlXCIgd2lkdGg9JzI1MHB4JyBoZWlnaHQ9JzIwMHB4J1xyXG4gICAgICAgICAgICAgICAgICAgdHlwZT1cIkxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgW2lkXT1cIm1vZGVsLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgW2ZpbGxdPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJ1c2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICB4TmFtZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgeU5hbWU9XCJjb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgIHZhbHVlVHlwZT1cIkRhdGVUaW1lXCJcclxuICAgICAgICAgICAgICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcclxuICAgICAgICAgICAgICAgICAgIFttYXJrZXJTZXR0aW5nc109XCJtYXJrZXJTZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFNldHRpbmdzXT1cInRvb2x0aXBTZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgICAoZGF0YUxhYmVsUmVuZGVyaW5nKT1cImRhdGFMYWJlbFJlbmRlcmluZygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgIFtlbmFibGVSdGxdPVwiZW5hYmxlUnRsXCI+XHJcbiAgICA8L2Vqcy1zcGFya2xpbmU+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJkaWFncmFtKClcIiBbYml6ZG9jVG9vbHRpcF09XCInV29ya2Zsb3cnfHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCJtb2RlbC5kcmFmdFwiPjxtYXQtaWNvbj5zY2hlbWE8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJvcHRpb25zXCIgW2Rpc2FibGVkXT1cIm1vZGVsLmRyYWZ0XCI+PG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxtYXQtbWVudSAjb3B0aW9ucz5cclxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImludml0ZSgpXCI+e3snSW52aXRlJ3xsMThufX08L2J1dHRvbj5cclxuICAgICAgPC9tYXQtbWVudT5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPCEtLWVkaXQtLT5cclxuICA8bmctdGVtcGxhdGUgYml6ZG9jRWRpdENvbnRlbnQ+XHJcbiAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZmxleFwiIFtmb3JtR3JvdXBdPVwiZm9ybWF0XCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD57eydQcmVmaXgnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicHJlZml4XCIgLz5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICZuYnNwO1xyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+e3snRGlnaXRzJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImRpZ2l0c1wiIG1heGxlbmd0aD1cIjJcIiAvPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD57eydTdWZmaXgnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwic3VmZml4XCIgLz5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGJpemRvYy1sb2NhbGl6ZWQtc3RyaW5nIGZvcm1Db250cm9sTmFtZT1cImdyb3VwXCIgW3BsYWNlaG9sZGVyXT1cIidHcm91cCd8dHJhbnNsYXRlXCI+PC9iaXpkb2MtbG9jYWxpemVkLXN0cmluZz5cclxuICAgICAgPGJpemRvYy1sb2NhbGl6ZWQtc3RyaW5nIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCIgW3BsYWNlaG9sZGVyXT1cIidEZXNjcmlwdGlvbid8dHJhbnNsYXRlXCI+PC9iaXpkb2MtbG9jYWxpemVkLXN0cmluZz5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiZ3VpZGVzLmxlbmd0aFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3snR3VpZGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiZ3VpZGVcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uPnt7J05vbmUnfHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGcgb2YgZ3VpZGVzXCIgW3ZhbHVlXT1cImcubmFtZVwiPnt7Zy50aXRsZSB8bG9jYWxpemVkU3RyaW5nfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJjdWJlcy5sZW5ndGhcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7J0N1YmUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY3ViZXNcIiBtdWx0aXBsZT5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBjIG9mIGN1YmVzXCIgW3ZhbHVlXT1cImMubmFtZVwiPnt7Yy50aXRsZSB8bG9jYWxpemVkU3RyaW5nfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDxtYXQtaGludD57eydGb3JtQ3ViZUhlbHAnfHRyYW5zbGF0ZX19PC9tYXQtaGludD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPCEtLVJ1bGVzLS0+XHJcbiAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZSByb3dcIj5cclxuICAgICAgICB7eydSdWxlcyd8dHJhbnNsYXRlfX1cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImFkZChydWxlcywgbmV3UnVsZSgpLCAnUnVsZScsIHJ1bGVmb3JtKVwiIFtiaXpkb2NUb29sdGlwXT1cIidBZGQnfHRyYW5zbGF0ZVwiIHR5cGU9XCJidXR0b25cIj48bWF0LWljb24+YWRkX2NpcmNsZV9vdXRsaW5lPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPC9oMj5cclxuICAgICAgPHRhYmxlIGZvcm1BcnJheU5hbWU9XCJydWxlc1wiIGNsYXNzPVwibWF0LXRhYmxlXCIgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudCwgcnVsZXMpXCI+XHJcbiAgICAgICAgPHRyIGNsYXNzPVwibWF0LXJvd1wiICpuZ0Zvcj1cImxldCByIG9mIHJ1bGVzLmNvbnRyb2xzOyBpbmRleCBhcyBpbmRleFwiIFtmb3JtR3JvdXBdPVwiclwiIGNka0RyYWc+XHJcbiAgICAgICAgICA8dGQgY2xhc3M9XCJtYXQtY2VsbFwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2RrRHJhZ0hhbmRsZT5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPHRkIGNsYXNzPVwibWF0LWNlbGwgZmxleFwiIHdpZHRoPVwiOTklXCI+XHJcbiAgICAgICAgICAgIHt7ci5nZXQoJ3RpdGxlJykudmFsdWV9fVxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsXCIgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogcHJlO1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZWRpdChyLCAnUnVsZScsIHJ1bGVmb3JtKVwiIFtiaXpkb2NUb29sdGlwXT1cIidFZGl0J3x0cmFuc2xhdGVcIiB0eXBlPVwiYnV0dG9uXCI+PG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicnVsZXMucmVtb3ZlQXQoaW5kZXgpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1JlbW92ZSd8dHJhbnNsYXRlXCIgdHlwZT1cImJ1dHRvblwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9iaXpkb2MtZGVzaWduZXItZWxlbWVudD5cclxuPG5nLXRlbXBsYXRlICNydWxlZm9ybSBsZXQtZm9ybT5cclxuICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7J1RpdGxlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uZ2V0KCd0aXRsZScpLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCIgW2lubmVySFRNTF09XCInUmVxdWlyZWRFcnInfHRyYW5zbGF0ZTooJ1RpdGxlJ3x0cmFuc2xhdGUpXCI+PC9tYXQtZXJyb3I+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICZuYnNwO1xyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eydOYW1lJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybS5nZXQoJ25hbWUnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIFtpbm5lckhUTUxdPVwiJ1JlcXVpcmVkRXJyJ3x0cmFuc2xhdGU6KCdOYW1lJ3x0cmFuc2xhdGUpXCI+PC9tYXQtZXJyb3I+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxiaXpkb2MtZGVzaWduZXItcHJpdmlsZWdlcyBbZm9ybV09XCJmb3JtXCI+PC9iaXpkb2MtZGVzaWduZXItcHJpdmlsZWdlcz5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19