@simpleangularcontrols/sac-bootstrap4 16.0.0-rc.20 → 16.0.0-rc.21

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 (105) hide show
  1. package/controls/buttons/button.d.ts.map +1 -1
  2. package/controls/buttons/button.module.d.ts.map +1 -1
  3. package/controls/checkbox/checkbox.d.ts.map +1 -1
  4. package/controls/checkbox/radiobuttons.d.ts +1 -1
  5. package/controls/checkbox/radiobuttons.d.ts.map +1 -1
  6. package/controls/contextmenu/contextmenu.d.ts.map +1 -1
  7. package/controls/datetime/date.d.ts.map +1 -1
  8. package/controls/datetime/dateselector.d.ts.map +1 -1
  9. package/controls/datetime/datetime.d.ts.map +1 -1
  10. package/controls/datetime/time.d.ts.map +1 -1
  11. package/controls/dialog/dialog.d.ts +4 -4
  12. package/controls/dialog/dialog.d.ts.map +1 -1
  13. package/controls/grid/grid.d.ts +4 -4
  14. package/controls/grid/grid.d.ts.map +1 -1
  15. package/controls/grid/gridbutton.d.ts +5 -2
  16. package/controls/grid/gridbutton.d.ts.map +1 -1
  17. package/controls/grid/gridcolumn.d.ts +1 -1
  18. package/controls/grid/gridcolumn.d.ts.map +1 -1
  19. package/controls/grid/gridimage.d.ts +0 -5
  20. package/controls/grid/gridimage.d.ts.map +1 -1
  21. package/controls/grid/paging.d.ts.map +1 -1
  22. package/controls/input/input.d.ts +1 -1
  23. package/controls/input/input.d.ts.map +1 -1
  24. package/controls/input/inputarea.d.ts +1 -1
  25. package/controls/input/inputarea.d.ts.map +1 -1
  26. package/controls/input/inputcurrency.d.ts +1 -1
  27. package/controls/input/inputcurrency.d.ts.map +1 -1
  28. package/controls/input/inputdecimal.d.ts +1 -1
  29. package/controls/input/inputdecimal.d.ts.map +1 -1
  30. package/controls/input/inputemail.d.ts +1 -1
  31. package/controls/input/inputemail.d.ts.map +1 -1
  32. package/controls/input/inputinteger.d.ts +1 -1
  33. package/controls/input/inputinteger.d.ts.map +1 -1
  34. package/controls/input/inputpassword.d.ts +1 -1
  35. package/controls/input/inputpassword.d.ts.map +1 -1
  36. package/controls/input/inputsearch.d.ts +1 -1
  37. package/controls/input/inputsearch.d.ts.map +1 -1
  38. package/controls/list/dropdown.d.ts +15 -15
  39. package/controls/list/dropdown.d.ts.map +1 -1
  40. package/controls/list/listbox.d.ts +14 -14
  41. package/controls/list/listbox.d.ts.map +1 -1
  42. package/controls/multilanguage/multilanguageinput.d.ts +1 -1
  43. package/controls/multilanguage/multilanguageinput.d.ts.map +1 -1
  44. package/controls/multilanguage/multilanguageinputarea.d.ts +1 -1
  45. package/controls/multilanguage/multilanguageinputarea.d.ts.map +1 -1
  46. package/controls/static/formcontainer.d.ts.map +1 -1
  47. package/controls/static/staticlabel.d.ts +1 -1
  48. package/controls/static/staticlabel.d.ts.map +1 -1
  49. package/controls/tabs/tab.d.ts +1 -1
  50. package/controls/tabs/tab.d.ts.map +1 -1
  51. package/controls/tinymce/tinymce.d.ts.map +1 -1
  52. package/controls/tooltip/tooltip.d.ts.map +1 -1
  53. package/controls/treeview/treeview.d.ts.map +1 -1
  54. package/controls/upload/dropzonemultiple.d.ts.map +1 -1
  55. package/controls/upload/dropzonesingle.d.ts.map +1 -1
  56. package/controls/upload/upload.d.ts +1 -1
  57. package/controls/upload/upload.d.ts.map +1 -1
  58. package/controls/upload/uploadmultiple.d.ts.map +1 -1
  59. package/controls/validation/validationsummary.d.ts +1 -1
  60. package/controls/validation/validationsummary.d.ts.map +1 -1
  61. package/esm2022/controls/buttons/button.mjs +5 -5
  62. package/esm2022/controls/buttons/button.module.mjs +5 -9
  63. package/esm2022/controls/checkbox/checkbox.mjs +5 -6
  64. package/esm2022/controls/checkbox/radiobuttons.mjs +8 -7
  65. package/esm2022/controls/contextmenu/contextmenu.mjs +10 -4
  66. package/esm2022/controls/datetime/date.mjs +12 -11
  67. package/esm2022/controls/datetime/dateselector.mjs +5 -10
  68. package/esm2022/controls/datetime/datetime.mjs +5 -4
  69. package/esm2022/controls/datetime/time.mjs +5 -4
  70. package/esm2022/controls/dialog/dialog.mjs +16 -12
  71. package/esm2022/controls/grid/grid.mjs +7 -6
  72. package/esm2022/controls/grid/grid.module.mjs +3 -2
  73. package/esm2022/controls/grid/gridbutton.mjs +11 -27
  74. package/esm2022/controls/grid/gridcolumn.mjs +6 -5
  75. package/esm2022/controls/grid/gridcolumnaction.mjs +3 -3
  76. package/esm2022/controls/grid/gridimage.mjs +5 -17
  77. package/esm2022/controls/grid/paging.mjs +7 -12
  78. package/esm2022/controls/input/input.mjs +8 -7
  79. package/esm2022/controls/input/inputarea.mjs +8 -7
  80. package/esm2022/controls/input/inputcurrency.mjs +8 -7
  81. package/esm2022/controls/input/inputdecimal.mjs +8 -7
  82. package/esm2022/controls/input/inputemail.mjs +8 -7
  83. package/esm2022/controls/input/inputinteger.mjs +8 -7
  84. package/esm2022/controls/input/inputpassword.mjs +8 -7
  85. package/esm2022/controls/input/inputsearch.mjs +8 -7
  86. package/esm2022/controls/list/dropdown.mjs +35 -34
  87. package/esm2022/controls/list/listbox.mjs +35 -34
  88. package/esm2022/controls/multilanguage/multilanguageinput.mjs +8 -7
  89. package/esm2022/controls/multilanguage/multilanguageinputarea.mjs +8 -7
  90. package/esm2022/controls/static/formcontainer.mjs +5 -4
  91. package/esm2022/controls/static/staticlabel.mjs +8 -7
  92. package/esm2022/controls/tabs/tab.mjs +8 -10
  93. package/esm2022/controls/tinymce/tinymce.mjs +5 -4
  94. package/esm2022/controls/tooltip/tooltip.mjs +4 -4
  95. package/esm2022/controls/treeview/treeview.mjs +6 -12
  96. package/esm2022/controls/upload/dropzonemultiple.mjs +5 -4
  97. package/esm2022/controls/upload/dropzonesingle.mjs +5 -4
  98. package/esm2022/controls/upload/upload.mjs +8 -7
  99. package/esm2022/controls/upload/uploadmultiple.mjs +5 -4
  100. package/esm2022/controls/validation/validationsummary.mjs +4 -4
  101. package/fesm2022/simpleangularcontrols-sac-bootstrap4.mjs +198 -210
  102. package/fesm2022/simpleangularcontrols-sac-bootstrap4.mjs.map +1 -1
  103. package/package.json +2 -2
  104. package/simpleangularcontrols-sac-bootstrap4-16.0.0-rc.21.tgz +0 -0
  105. package/simpleangularcontrols-sac-bootstrap4-16.0.0-rc.20.tgz +0 -0
@@ -1,15 +1,12 @@
1
- import { SacContextmenuComponent } from '../contextmenu';
2
- import { SacContextmenuItemButtonComponent } from '../contextmenu/contextmenuitembutton';
3
- import { SacContextmenuItemSplitterComponent } from '../contextmenu/contextmenuitemsplitter';
4
1
  import { SacToControlHeightPipe } from '../layout/tocontrolheight.pipe';
5
2
  import { SacToControlWidthCssPipe } from '../layout/tocontrolwidthcss.pipe';
6
3
  import { SacToLabelHeightPipe } from '../layout/tolabelheight.pipe';
7
4
  import { SacToLabelWidthCssPipe } from '../layout/tolabelwidthcss.pipe';
8
5
  import { SacTooltipComponent } from '../tooltip/tooltip';
9
- import { AsyncPipe, JsonPipe, NgClass, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';
6
+ import { AsyncPipe, NgClass, NgFor, NgIf, NgTemplateOutlet } from '@angular/common';
10
7
  import { Component, Host, Optional, forwardRef } from '@angular/core';
11
8
  import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
12
- import { SacTreeviewCommon } from '@simpleangularcontrols/sac-common';
9
+ import { SacTestingAttributePipe, SacTreeviewCommon } from '@simpleangularcontrols/sac-common';
13
10
  import * as i0 from "@angular/core";
14
11
  import * as i1 from "../layout/formlayout.directive";
15
12
  /**
@@ -37,7 +34,7 @@ class SacTreeviewComponent extends SacTreeviewCommon {
37
34
  useExisting: forwardRef(() => SacTreeviewComponent),
38
35
  multi: true,
39
36
  },
40
- ], usesInheritance: true, ngImport: i0, template: "<div\n class=\"row mb-3\"\n [class.g-0]=\"disablelabel\">\n <label\n for=\"{{ name }}\"\n class=\"col-12 col-form-label d-flex\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toLabelWidthCss) : 'sr-only', componentHeight | toLabelHeight]\"\n [class.required]=\"isrequired\">\n <div\n class=\"text flex-grow-0\"\n [class.flex-sm-grow-1]=\"splitlabelandhelptext\">\n {{ label }}\n </div>\n <sac-tooltip\n *ngIf=\"helptextmode === 'tooltip' && helptext\"\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\">\n <div [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div\n class=\"w-100\"\n [style.min-width]=\"helptextmode === 'tooltip' && helptext && disablelabel ? 0 : null\"\n [class.mr-1]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <ul\n class=\"list-group list-group-flush\"\n id=\"{{ name }}\"\n [class.is-invalid]=\"invalid && (dirty || touched)\"\n [class.border]=\"invalid && (dirty || touched)\"\n [class.border-danger]=\"invalid && (dirty || touched)\">\n <ng-container *ngFor=\"let node of data\">\n <ng-template\n [ngTemplateOutlet]=\"treeItem\"\n [ngTemplateOutletContext]=\"{ node: node, deep: 0, path: '', textpath: '' }\">\n </ng-template>\n </ng-container>\n </ul>\n\n <div\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n </div>\n\n <div\n *ngIf=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n class=\"form-control-plaintext align-self-top ml-2 mr-1 w-auto\"\n [ngClass]=\"[componentHeight | toControlHeight]\">\n <sac-tooltip\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </div>\n </div>\n </div>\n</div>\n<ng-template\n #treeItem\n let-node=\"node\"\n let-deep=\"deep\"\n let-path=\"path\"\n let-textpath=\"textpath\">\n <li\n class=\"list-group-item list-group-item-action py-1 px-2 d-flex align-items-center\"\n [class.active]=\"isSelectedState(node)\"\n (mouseenter)=\"setHoverState(node, true)\"\n (mouseleave)=\"setHoverState(node, false)\"\n style=\"cursor: pointer\"\n attr.data-path=\"{{ path }}/{{ getStringField(node, attrid) }}\"\n attr.data-textpath=\"{{ textpath }}/{{ getStringField(node, attrlabel) }}\">\n <div\n class=\"mx-3\"\n *ngFor=\"let i of count(deep)\">\n </div>\n\n <div\n (click)=\"onNodeClicked(node)\"\n *ngIf=\"expandedstate === 'true' || expandedstate === true\"\n class=\"mr-2\"\n [ngClass]=\"!hasChildren(node) ? iconFolderEmpty : !isExpandedState(node) ? iconFolderCollabsed : isExpandedState(node) ? iconFolderOpen : ''\">\n </div>\n\n <div\n (click)=\"onNodeClicked(node)\"\n *ngIf=\"attricon && getStringField(node, attricon)\">\n <ng-template\n [ngTemplateOutlet]=\"templateicon || defaultTemplateIcon\"\n [ngTemplateOutletContext]=\"{ node: node }\">\n </ng-template>\n </div>\n\n <div\n (click)=\"onNodeClicked(node)\"\n class=\"flex-grow-1 py-1\"\n [style.overflow]=\"enableellipsis ? 'hidden' : null\"\n [style.text-overflow]=\"enableellipsis ? 'ellipsis' : null\"\n [style.white-space]=\"enableellipsis ? 'nowrap' : null\">\n <ng-template\n [ngTemplateOutlet]=\"templatelabel || defaultTemplateLabel\"\n [ngTemplateOutletContext]=\"{ node: node, label: getStringField(node, attrlabel) }\">\n </ng-template>\n </div>\n\n <div\n (click)=\"setSelectedState(node)\"\n class=\"flex-shrink-0\"\n *ngIf=\"!isDisabledState(node) && (showactionalways || isSelectedState(node) || isHoverState(node))\">\n <ng-template\n [ngTemplateOutlet]=\"templateaction || defaultTemplateAction\"\n [ngTemplateOutletContext]=\"{ node: node, actionhandler: onActionClicked.bind(this) }\">\n </ng-template>\n </div>\n </li>\n\n <ng-container *ngIf=\"isExpandedState(node)\">\n <ng-template\n *ngFor=\"let child of getChildren(node)\"\n [ngTemplateOutlet]=\"treeItem\"\n [ngTemplateOutletContext]=\"{\n node: child,\n deep: deep + 1,\n path: path + '/' + getStringField(node, attrid),\n textpath: textpath + '/' + getStringField(node, attrlabel)\n }\">\n </ng-template>\n </ng-container>\n</ng-template>\n<ng-template\n #defaultTemplateLabel\n let-label=\"label\"\n let-node=\"node\">\n <span [title]=\"label\">\n {{ label }}\n </span>\n</ng-template>\n\n<ng-template\n #defaultTemplateIcon\n let-node=\"node\">\n <div\n class=\"mr-2\"\n [ngClass]=\"getStringField(node, attricon)\">\n </div>\n</ng-template>\n\n<ng-template\n #defaultTemplateAction\n let-node=\"node\"\n let-actionhandler=\"actionhandler\">\n <a\n class=\"btn btn-sm btn-link text-secondary\"\n (click)=\"actionhandler({ action: 'default', node: node })\">\n <i [class]=\"iconAction\"></i>\n </a>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: SacToLabelWidthCssPipe, name: "toLabelWidthCss" }, { kind: "pipe", type: SacToLabelHeightPipe, name: "toLabelHeight" }, { kind: "component", type: SacTooltipComponent, selector: "sac-tooltip" }, { kind: "pipe", type: SacToControlWidthCssPipe, name: "toControlWidthCss" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SacToControlHeightPipe, name: "toControlHeight" }] }); }
37
+ ], usesInheritance: true, ngImport: i0, template: "<div\n class=\"row mb-3\"\n [class.g-0]=\"disablelabel\"\n [attr.data-e2e-key]=\"name | testingattribute : e2eidentifier\">\n <label\n for=\"{{ name }}\"\n class=\"col-12 col-form-label d-flex\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toLabelWidthCss) : 'sr-only', componentHeight | toLabelHeight]\"\n [class.required]=\"isrequired\">\n <div\n class=\"text flex-grow-0\"\n [class.flex-sm-grow-1]=\"splitlabelandhelptext\">\n {{ label }}\n </div>\n <sac-tooltip\n *ngIf=\"helptextmode === 'tooltip' && helptext\"\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\">\n <div [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div\n class=\"w-100\"\n [style.min-width]=\"helptextmode === 'tooltip' && helptext && disablelabel ? 0 : null\"\n [class.mr-1]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <ul\n class=\"list-group list-group-flush\"\n id=\"{{ name }}\"\n [class.is-invalid]=\"invalid && (dirty || touched)\"\n [class.border]=\"invalid && (dirty || touched)\"\n [class.border-danger]=\"invalid && (dirty || touched)\">\n <ng-container *ngFor=\"let node of data\">\n <ng-template\n [ngTemplateOutlet]=\"treeItem\"\n [ngTemplateOutletContext]=\"{ node: node, deep: 0, path: '', textpath: '' }\">\n </ng-template>\n </ng-container>\n </ul>\n\n <div\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n </div>\n\n <div\n *ngIf=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n class=\"form-control-plaintext align-self-top ml-2 mr-1 w-auto\"\n [ngClass]=\"[componentHeight | toControlHeight]\">\n <sac-tooltip\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </div>\n </div>\n </div>\n</div>\n<ng-template\n #treeItem\n let-node=\"node\"\n let-deep=\"deep\"\n let-path=\"path\"\n let-textpath=\"textpath\">\n <li\n class=\"list-group-item list-group-item-action py-1 px-2 d-flex align-items-center\"\n [class.active]=\"isSelectedState(node)\"\n (mouseenter)=\"setHoverState(node, true)\"\n (mouseleave)=\"setHoverState(node, false)\"\n style=\"cursor: pointer\"\n attr.data-path=\"{{ path }}/{{ getStringField(node, attrid) }}\"\n attr.data-textpath=\"{{ textpath }}/{{ getStringField(node, attrlabel) }}\">\n <div\n class=\"mx-3\"\n *ngFor=\"let i of count(deep)\">\n </div>\n\n <div\n (click)=\"onNodeClicked(node)\"\n *ngIf=\"expandedstate === 'true' || expandedstate === true\"\n class=\"mr-2\"\n [ngClass]=\"!hasChildren(node) ? iconFolderEmpty : !isExpandedState(node) ? iconFolderCollabsed : isExpandedState(node) ? iconFolderOpen : ''\">\n </div>\n\n <div\n (click)=\"onNodeClicked(node)\"\n *ngIf=\"attricon && getStringField(node, attricon)\">\n <ng-template\n [ngTemplateOutlet]=\"templateicon || defaultTemplateIcon\"\n [ngTemplateOutletContext]=\"{ node: node }\">\n </ng-template>\n </div>\n\n <div\n (click)=\"onNodeClicked(node)\"\n class=\"flex-grow-1 py-1\"\n [style.overflow]=\"enableellipsis ? 'hidden' : null\"\n [style.text-overflow]=\"enableellipsis ? 'ellipsis' : null\"\n [style.white-space]=\"enableellipsis ? 'nowrap' : null\">\n <ng-template\n [ngTemplateOutlet]=\"templatelabel || defaultTemplateLabel\"\n [ngTemplateOutletContext]=\"{ node: node, label: getStringField(node, attrlabel) }\">\n </ng-template>\n </div>\n\n <div\n (click)=\"setSelectedState(node)\"\n class=\"flex-shrink-0\"\n *ngIf=\"!isDisabledState(node) && (showactionalways || isSelectedState(node) || isHoverState(node))\">\n <ng-template\n [ngTemplateOutlet]=\"templateaction || defaultTemplateAction\"\n [ngTemplateOutletContext]=\"{ node: node, actionhandler: onActionClicked.bind(this) }\">\n </ng-template>\n </div>\n </li>\n\n <ng-container *ngIf=\"isExpandedState(node)\">\n <ng-template\n *ngFor=\"let child of getChildren(node)\"\n [ngTemplateOutlet]=\"treeItem\"\n [ngTemplateOutletContext]=\"{\n node: child,\n deep: deep + 1,\n path: path + '/' + getStringField(node, attrid),\n textpath: textpath + '/' + getStringField(node, attrlabel)\n }\">\n </ng-template>\n </ng-container>\n</ng-template>\n<ng-template\n #defaultTemplateLabel\n let-label=\"label\"\n let-node=\"node\">\n <span [title]=\"label\">{{ label }}</span>\n</ng-template>\n\n<ng-template\n #defaultTemplateIcon\n let-node=\"node\">\n <div\n class=\"mr-2\"\n [ngClass]=\"getStringField(node, attricon)\">\n </div>\n</ng-template>\n\n<ng-template\n #defaultTemplateAction\n let-node=\"node\"\n let-actionhandler=\"actionhandler\">\n <a\n class=\"btn btn-sm btn-link text-secondary\"\n (click)=\"actionhandler({ action: 'default', node: node })\">\n <i [class]=\"iconAction\"></i>\n </a>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: SacToLabelWidthCssPipe, name: "toLabelWidthCss" }, { kind: "pipe", type: SacToLabelHeightPipe, name: "toLabelHeight" }, { kind: "component", type: SacTooltipComponent, selector: "sac-tooltip" }, { kind: "pipe", type: SacToControlWidthCssPipe, name: "toControlWidthCss" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SacToControlHeightPipe, name: "toControlHeight" }, { kind: "pipe", type: SacTestingAttributePipe, name: "testingattribute" }] }); }
41
38
  }
42
39
  export { SacTreeviewComponent };
43
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacTreeviewComponent, decorators: [{
@@ -55,23 +52,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
55
52
  },
56
53
  ], standalone: true, imports: [
57
54
  NgIf,
58
- JsonPipe,
59
55
  NgFor,
60
56
  NgTemplateOutlet,
61
57
  NgClass,
62
- SacContextmenuComponent,
63
- SacContextmenuItemButtonComponent,
64
- SacContextmenuItemSplitterComponent,
65
58
  SacToLabelWidthCssPipe,
66
59
  SacToLabelHeightPipe,
67
60
  SacTooltipComponent,
68
61
  SacToControlWidthCssPipe,
69
62
  AsyncPipe,
70
63
  SacToControlHeightPipe,
71
- ], template: "<div\n class=\"row mb-3\"\n [class.g-0]=\"disablelabel\">\n <label\n for=\"{{ name }}\"\n class=\"col-12 col-form-label d-flex\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toLabelWidthCss) : 'sr-only', componentHeight | toLabelHeight]\"\n [class.required]=\"isrequired\">\n <div\n class=\"text flex-grow-0\"\n [class.flex-sm-grow-1]=\"splitlabelandhelptext\">\n {{ label }}\n </div>\n <sac-tooltip\n *ngIf=\"helptextmode === 'tooltip' && helptext\"\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\">\n <div [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div\n class=\"w-100\"\n [style.min-width]=\"helptextmode === 'tooltip' && helptext && disablelabel ? 0 : null\"\n [class.mr-1]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <ul\n class=\"list-group list-group-flush\"\n id=\"{{ name }}\"\n [class.is-invalid]=\"invalid && (dirty || touched)\"\n [class.border]=\"invalid && (dirty || touched)\"\n [class.border-danger]=\"invalid && (dirty || touched)\">\n <ng-container *ngFor=\"let node of data\">\n <ng-template\n [ngTemplateOutlet]=\"treeItem\"\n [ngTemplateOutletContext]=\"{ node: node, deep: 0, path: '', textpath: '' }\">\n </ng-template>\n </ng-container>\n </ul>\n\n <div\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n </div>\n\n <div\n *ngIf=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n class=\"form-control-plaintext align-self-top ml-2 mr-1 w-auto\"\n [ngClass]=\"[componentHeight | toControlHeight]\">\n <sac-tooltip\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </div>\n </div>\n </div>\n</div>\n<ng-template\n #treeItem\n let-node=\"node\"\n let-deep=\"deep\"\n let-path=\"path\"\n let-textpath=\"textpath\">\n <li\n class=\"list-group-item list-group-item-action py-1 px-2 d-flex align-items-center\"\n [class.active]=\"isSelectedState(node)\"\n (mouseenter)=\"setHoverState(node, true)\"\n (mouseleave)=\"setHoverState(node, false)\"\n style=\"cursor: pointer\"\n attr.data-path=\"{{ path }}/{{ getStringField(node, attrid) }}\"\n attr.data-textpath=\"{{ textpath }}/{{ getStringField(node, attrlabel) }}\">\n <div\n class=\"mx-3\"\n *ngFor=\"let i of count(deep)\">\n </div>\n\n <div\n (click)=\"onNodeClicked(node)\"\n *ngIf=\"expandedstate === 'true' || expandedstate === true\"\n class=\"mr-2\"\n [ngClass]=\"!hasChildren(node) ? iconFolderEmpty : !isExpandedState(node) ? iconFolderCollabsed : isExpandedState(node) ? iconFolderOpen : ''\">\n </div>\n\n <div\n (click)=\"onNodeClicked(node)\"\n *ngIf=\"attricon && getStringField(node, attricon)\">\n <ng-template\n [ngTemplateOutlet]=\"templateicon || defaultTemplateIcon\"\n [ngTemplateOutletContext]=\"{ node: node }\">\n </ng-template>\n </div>\n\n <div\n (click)=\"onNodeClicked(node)\"\n class=\"flex-grow-1 py-1\"\n [style.overflow]=\"enableellipsis ? 'hidden' : null\"\n [style.text-overflow]=\"enableellipsis ? 'ellipsis' : null\"\n [style.white-space]=\"enableellipsis ? 'nowrap' : null\">\n <ng-template\n [ngTemplateOutlet]=\"templatelabel || defaultTemplateLabel\"\n [ngTemplateOutletContext]=\"{ node: node, label: getStringField(node, attrlabel) }\">\n </ng-template>\n </div>\n\n <div\n (click)=\"setSelectedState(node)\"\n class=\"flex-shrink-0\"\n *ngIf=\"!isDisabledState(node) && (showactionalways || isSelectedState(node) || isHoverState(node))\">\n <ng-template\n [ngTemplateOutlet]=\"templateaction || defaultTemplateAction\"\n [ngTemplateOutletContext]=\"{ node: node, actionhandler: onActionClicked.bind(this) }\">\n </ng-template>\n </div>\n </li>\n\n <ng-container *ngIf=\"isExpandedState(node)\">\n <ng-template\n *ngFor=\"let child of getChildren(node)\"\n [ngTemplateOutlet]=\"treeItem\"\n [ngTemplateOutletContext]=\"{\n node: child,\n deep: deep + 1,\n path: path + '/' + getStringField(node, attrid),\n textpath: textpath + '/' + getStringField(node, attrlabel)\n }\">\n </ng-template>\n </ng-container>\n</ng-template>\n<ng-template\n #defaultTemplateLabel\n let-label=\"label\"\n let-node=\"node\">\n <span [title]=\"label\">\n {{ label }}\n </span>\n</ng-template>\n\n<ng-template\n #defaultTemplateIcon\n let-node=\"node\">\n <div\n class=\"mr-2\"\n [ngClass]=\"getStringField(node, attricon)\">\n </div>\n</ng-template>\n\n<ng-template\n #defaultTemplateAction\n let-node=\"node\"\n let-actionhandler=\"actionhandler\">\n <a\n class=\"btn btn-sm btn-link text-secondary\"\n (click)=\"actionhandler({ action: 'default', node: node })\">\n <i [class]=\"iconAction\"></i>\n </a>\n</ng-template>\n" }]
64
+ SacTestingAttributePipe,
65
+ ], template: "<div\n class=\"row mb-3\"\n [class.g-0]=\"disablelabel\"\n [attr.data-e2e-key]=\"name | testingattribute : e2eidentifier\">\n <label\n for=\"{{ name }}\"\n class=\"col-12 col-form-label d-flex\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toLabelWidthCss) : 'sr-only', componentHeight | toLabelHeight]\"\n [class.required]=\"isrequired\">\n <div\n class=\"text flex-grow-0\"\n [class.flex-sm-grow-1]=\"splitlabelandhelptext\">\n {{ label }}\n </div>\n <sac-tooltip\n *ngIf=\"helptextmode === 'tooltip' && helptext\"\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\">\n <div [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div\n class=\"w-100\"\n [style.min-width]=\"helptextmode === 'tooltip' && helptext && disablelabel ? 0 : null\"\n [class.mr-1]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <ul\n class=\"list-group list-group-flush\"\n id=\"{{ name }}\"\n [class.is-invalid]=\"invalid && (dirty || touched)\"\n [class.border]=\"invalid && (dirty || touched)\"\n [class.border-danger]=\"invalid && (dirty || touched)\">\n <ng-container *ngFor=\"let node of data\">\n <ng-template\n [ngTemplateOutlet]=\"treeItem\"\n [ngTemplateOutletContext]=\"{ node: node, deep: 0, path: '', textpath: '' }\">\n </ng-template>\n </ng-container>\n </ul>\n\n <div\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n </div>\n\n <div\n *ngIf=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n class=\"form-control-plaintext align-self-top ml-2 mr-1 w-auto\"\n [ngClass]=\"[componentHeight | toControlHeight]\">\n <sac-tooltip\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </div>\n </div>\n </div>\n</div>\n<ng-template\n #treeItem\n let-node=\"node\"\n let-deep=\"deep\"\n let-path=\"path\"\n let-textpath=\"textpath\">\n <li\n class=\"list-group-item list-group-item-action py-1 px-2 d-flex align-items-center\"\n [class.active]=\"isSelectedState(node)\"\n (mouseenter)=\"setHoverState(node, true)\"\n (mouseleave)=\"setHoverState(node, false)\"\n style=\"cursor: pointer\"\n attr.data-path=\"{{ path }}/{{ getStringField(node, attrid) }}\"\n attr.data-textpath=\"{{ textpath }}/{{ getStringField(node, attrlabel) }}\">\n <div\n class=\"mx-3\"\n *ngFor=\"let i of count(deep)\">\n </div>\n\n <div\n (click)=\"onNodeClicked(node)\"\n *ngIf=\"expandedstate === 'true' || expandedstate === true\"\n class=\"mr-2\"\n [ngClass]=\"!hasChildren(node) ? iconFolderEmpty : !isExpandedState(node) ? iconFolderCollabsed : isExpandedState(node) ? iconFolderOpen : ''\">\n </div>\n\n <div\n (click)=\"onNodeClicked(node)\"\n *ngIf=\"attricon && getStringField(node, attricon)\">\n <ng-template\n [ngTemplateOutlet]=\"templateicon || defaultTemplateIcon\"\n [ngTemplateOutletContext]=\"{ node: node }\">\n </ng-template>\n </div>\n\n <div\n (click)=\"onNodeClicked(node)\"\n class=\"flex-grow-1 py-1\"\n [style.overflow]=\"enableellipsis ? 'hidden' : null\"\n [style.text-overflow]=\"enableellipsis ? 'ellipsis' : null\"\n [style.white-space]=\"enableellipsis ? 'nowrap' : null\">\n <ng-template\n [ngTemplateOutlet]=\"templatelabel || defaultTemplateLabel\"\n [ngTemplateOutletContext]=\"{ node: node, label: getStringField(node, attrlabel) }\">\n </ng-template>\n </div>\n\n <div\n (click)=\"setSelectedState(node)\"\n class=\"flex-shrink-0\"\n *ngIf=\"!isDisabledState(node) && (showactionalways || isSelectedState(node) || isHoverState(node))\">\n <ng-template\n [ngTemplateOutlet]=\"templateaction || defaultTemplateAction\"\n [ngTemplateOutletContext]=\"{ node: node, actionhandler: onActionClicked.bind(this) }\">\n </ng-template>\n </div>\n </li>\n\n <ng-container *ngIf=\"isExpandedState(node)\">\n <ng-template\n *ngFor=\"let child of getChildren(node)\"\n [ngTemplateOutlet]=\"treeItem\"\n [ngTemplateOutletContext]=\"{\n node: child,\n deep: deep + 1,\n path: path + '/' + getStringField(node, attrid),\n textpath: textpath + '/' + getStringField(node, attrlabel)\n }\">\n </ng-template>\n </ng-container>\n</ng-template>\n<ng-template\n #defaultTemplateLabel\n let-label=\"label\"\n let-node=\"node\">\n <span [title]=\"label\">{{ label }}</span>\n</ng-template>\n\n<ng-template\n #defaultTemplateIcon\n let-node=\"node\">\n <div\n class=\"mr-2\"\n [ngClass]=\"getStringField(node, attricon)\">\n </div>\n</ng-template>\n\n<ng-template\n #defaultTemplateAction\n let-node=\"node\"\n let-actionhandler=\"actionhandler\">\n <a\n class=\"btn btn-sm btn-link text-secondary\"\n (click)=\"actionhandler({ action: 'default', node: node })\">\n <i [class]=\"iconAction\"></i>\n </a>\n</ng-template>\n" }]
72
66
  }], ctorParameters: function () { return [{ type: i1.SacFormLayoutDirective, decorators: [{
73
67
  type: Host
74
68
  }, {
75
69
  type: Optional
76
70
  }] }, { type: i0.Injector }]; } });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zYWMtYm9vdHN0cmFwNC9zcmMvY29udHJvbHMvdHJlZXZpZXcvdHJlZXZpZXcudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zYWMtYm9vdHN0cmFwNC9zcmMvY29udHJvbHMvdHJlZXZpZXcvdHJlZXZpZXcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU3RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFZLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7QUFFdEU7O0dBRUc7QUFDSCxNQWlDYSxvQkFBcUIsU0FBUSxpQkFBaUI7SUFDdkQsdUJBQXVCO0lBRXZCOzs7O09BSUc7SUFDSCxZQUFnQyxVQUFrQyxFQUFFLFFBQWtCO1FBQ2xGLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQzsrR0FWUSxvQkFBb0I7bUdBQXBCLG9CQUFvQiwyREE5QmxCO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsV0FBVyxFQUFFLG9CQUFvQjthQUNwQztZQUNEO2dCQUNJLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDO2dCQUNuRCxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0osaURDL0JMLCsrTUE2S0EsNENEM0lRLElBQUksNkZBRUosS0FBSyxtSEFDTCxnQkFBZ0Isb0pBQ2hCLE9BQU8sK0VBSVAsc0JBQXNCLG1EQUN0QixvQkFBb0Isc0RBQ3BCLG1CQUFtQixtREFDbkIsd0JBQXdCLHFEQUN4QixTQUFTLHlDQUNULHNCQUFzQjs7U0FHakIsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBakNoQyxTQUFTOytCQUNJLGNBQWMsYUFFYjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLHNCQUFzQjt5QkFDcEM7d0JBQ0Q7NEJBQ0ksT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDOzRCQUNuRCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSixjQUNXLElBQUksV0FDUDt3QkFDTCxJQUFJO3dCQUNKLFFBQVE7d0JBQ1IsS0FBSzt3QkFDTCxnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AsdUJBQXVCO3dCQUN2QixpQ0FBaUM7d0JBQ2pDLG1DQUFtQzt3QkFDbkMsc0JBQXNCO3dCQUN0QixvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3dCQUN4QixTQUFTO3dCQUNULHNCQUFzQjtxQkFDekI7OzBCQVVZLElBQUk7OzBCQUFJLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYWNDb250ZXh0bWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbnRleHRtZW51JztcbmltcG9ydCB7IFNhY0NvbnRleHRtZW51SXRlbUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbnRleHRtZW51L2NvbnRleHRtZW51aXRlbWJ1dHRvbic7XG5pbXBvcnQgeyBTYWNDb250ZXh0bWVudUl0ZW1TcGxpdHRlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbnRleHRtZW51L2NvbnRleHRtZW51aXRlbXNwbGl0dGVyJztcbmltcG9ydCB7IFNhY0Zvcm1MYXlvdXREaXJlY3RpdmUgfSBmcm9tICcuLi9sYXlvdXQvZm9ybWxheW91dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2FjVG9Db250cm9sSGVpZ2h0UGlwZSB9IGZyb20gJy4uL2xheW91dC90b2NvbnRyb2xoZWlnaHQucGlwZSc7XG5pbXBvcnQgeyBTYWNUb0NvbnRyb2xXaWR0aENzc1BpcGUgfSBmcm9tICcuLi9sYXlvdXQvdG9jb250cm9sd2lkdGhjc3MucGlwZSc7XG5pbXBvcnQgeyBTYWNUb0xhYmVsSGVpZ2h0UGlwZSB9IGZyb20gJy4uL2xheW91dC90b2xhYmVsaGVpZ2h0LnBpcGUnO1xuaW1wb3J0IHsgU2FjVG9MYWJlbFdpZHRoQ3NzUGlwZSB9IGZyb20gJy4uL2xheW91dC90b2xhYmVsd2lkdGhjc3MucGlwZSc7XG5pbXBvcnQgeyBTYWNUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi4vdG9vbHRpcC90b29sdGlwJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgSnNvblBpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdCwgSW5qZWN0b3IsIE9wdGlvbmFsLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNhY1RyZWV2aWV3Q29tbW9uIH0gZnJvbSAnQHNpbXBsZWFuZ3VsYXJjb250cm9scy9zYWMtY29tbW9uJztcblxuLyoqXG4gKiBUcmVldmlldyBDb21wb21uZW50XG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2FjLXRyZWV2aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZXZpZXcuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogU2FjVHJlZXZpZXdDb21wb25lbnQsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTYWNUcmVldmlld0NvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBKc29uUGlwZSxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIFNhY0NvbnRleHRtZW51Q29tcG9uZW50LFxuICAgICAgICBTYWNDb250ZXh0bWVudUl0ZW1CdXR0b25Db21wb25lbnQsXG4gICAgICAgIFNhY0NvbnRleHRtZW51SXRlbVNwbGl0dGVyQ29tcG9uZW50LFxuICAgICAgICBTYWNUb0xhYmVsV2lkdGhDc3NQaXBlLFxuICAgICAgICBTYWNUb0xhYmVsSGVpZ2h0UGlwZSxcbiAgICAgICAgU2FjVG9vbHRpcENvbXBvbmVudCxcbiAgICAgICAgU2FjVG9Db250cm9sV2lkdGhDc3NQaXBlLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIFNhY1RvQ29udHJvbEhlaWdodFBpcGUsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2FjVHJlZXZpZXdDb21wb25lbnQgZXh0ZW5kcyBTYWNUcmVldmlld0NvbW1vbiB7XG4gICAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvcnNcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIGZvcm1MYXlvdXQgU2FjRm9ybUxheW91dCB0byBkZWZpbmUgc2NvcGVkIGxheW91dCBzZXR0aW5nc1xuICAgICAqIEBwYXJhbSBpbmplY3RvciBDb21wb25lbnQgSW5qZWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihASG9zdCgpIEBPcHRpb25hbCgpIGZvcm1MYXlvdXQ6IFNhY0Zvcm1MYXlvdXREaXJlY3RpdmUsIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgICAgICBzdXBlcihmb3JtTGF5b3V0LCBpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cInJvdyBtYi0zXCJcbiAgICBbY2xhc3MuZy0wXT1cImRpc2FibGVsYWJlbFwiPlxuICAgIDxsYWJlbFxuICAgICAgICBmb3I9XCJ7eyBuYW1lIH19XCJcbiAgICAgICAgY2xhc3M9XCJjb2wtMTIgY29sLWZvcm0tbGFiZWwgZC1mbGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiW2Rpc2FibGVsYWJlbCA9PT0gZmFsc2UgPyAodGhpcy5sYWJlbFNpemVzIHwgdG9MYWJlbFdpZHRoQ3NzKSA6ICdzci1vbmx5JywgY29tcG9uZW50SGVpZ2h0IHwgdG9MYWJlbEhlaWdodF1cIlxuICAgICAgICBbY2xhc3MucmVxdWlyZWRdPVwiaXNyZXF1aXJlZFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInRleHQgZmxleC1ncm93LTBcIlxuICAgICAgICAgICAgW2NsYXNzLmZsZXgtc20tZ3Jvdy0xXT1cInNwbGl0bGFiZWxhbmRoZWxwdGV4dFwiPlxuICAgICAgICAgICAge3sgbGFiZWwgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzYWMtdG9vbHRpcFxuICAgICAgICAgICAgKm5nSWY9XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dFwiXG4gICAgICAgICAgICBbdG9vbHRpcHRleHRdPVwiaGVscHRleHRcIlxuICAgICAgICAgICAgW2lubGluZW1vZGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJIZWxwdGV4dFRvb2x0aXBJY29uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zYWMtdG9vbHRpcD5cbiAgICA8L2xhYmVsPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb2wtMTJcIlxuICAgICAgICBbbmdDbGFzc109XCJbZGlzYWJsZWxhYmVsID09PSBmYWxzZSA/ICh0aGlzLmxhYmVsU2l6ZXMgfCB0b0NvbnRyb2xXaWR0aENzcykgOiAnJ11cIj5cbiAgICAgICAgPGRpdiBbY2xhc3MuZC1mbGV4XT1cImhlbHB0ZXh0bW9kZSA9PT0gJ3Rvb2x0aXAnICYmIGhlbHB0ZXh0ICYmIGRpc2FibGVsYWJlbFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDBcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiaGVscHRleHRtb2RlID09PSAndG9vbHRpcCcgJiYgaGVscHRleHQgJiYgZGlzYWJsZWxhYmVsID8gMCA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5tci0xXT1cImhlbHB0ZXh0bW9kZSA9PT0gJ3Rvb2x0aXAnICYmIGhlbHB0ZXh0ICYmIGRpc2FibGVsYWJlbFwiPlxuICAgICAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwie3sgbmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlcl09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHJlZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG5vZGU6IG5vZGUsIGRlZXA6IDAsIHBhdGg6ICcnLCB0ZXh0cGF0aDogJycgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC91bD5cblxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc2lubGluZWVycm9yZW5hYmxlZCAmJiBpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBHZXRFcnJvck1lc3NhZ2UoKSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWxwdGV4dG1vZGUgPT09ICd0ZXh0JyAmJiBoZWxwdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaGVscHRleHQgfX1cbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImhlbHB0ZXh0bW9kZSA9PT0gJ3Rvb2x0aXAnICYmIGhlbHB0ZXh0ICYmIGRpc2FibGVsYWJlbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wtcGxhaW50ZXh0IGFsaWduLXNlbGYtdG9wIG1sLTIgbXItMSB3LWF1dG9cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltjb21wb25lbnRIZWlnaHQgfCB0b0NvbnRyb2xIZWlnaHRdXCI+XG4gICAgICAgICAgICAgICAgPHNhYy10b29sdGlwXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwdGV4dF09XCJoZWxwdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVtb2RlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIkhlbHB0ZXh0VG9vbHRpcEljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NhYy10b29sdGlwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48bmctdGVtcGxhdGVcbiAgICAjdHJlZUl0ZW1cbiAgICBsZXQtbm9kZT1cIm5vZGVcIlxuICAgIGxldC1kZWVwPVwiZGVlcFwiXG4gICAgbGV0LXBhdGg9XCJwYXRoXCJcbiAgICBsZXQtdGV4dHBhdGg9XCJ0ZXh0cGF0aFwiPlxuICAgIDxsaVxuICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBsaXN0LWdyb3VwLWl0ZW0tYWN0aW9uIHB5LTEgcHgtMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc1NlbGVjdGVkU3RhdGUobm9kZSlcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJzZXRIb3ZlclN0YXRlKG5vZGUsIHRydWUpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwic2V0SG92ZXJTdGF0ZShub2RlLCBmYWxzZSlcIlxuICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgIGF0dHIuZGF0YS1wYXRoPVwie3sgcGF0aCB9fS97eyBnZXRTdHJpbmdGaWVsZChub2RlLCBhdHRyaWQpIH19XCJcbiAgICAgICAgYXR0ci5kYXRhLXRleHRwYXRoPVwie3sgdGV4dHBhdGggfX0ve3sgZ2V0U3RyaW5nRmllbGQobm9kZSwgYXR0cmxhYmVsKSB9fVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm14LTNcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGkgb2YgY291bnQoZGVlcClcIj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZUNsaWNrZWQobm9kZSlcIlxuICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRlZHN0YXRlID09PSAndHJ1ZScgfHwgZXhwYW5kZWRzdGF0ZSA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cIm1yLTJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiIWhhc0NoaWxkcmVuKG5vZGUpID8gaWNvbkZvbGRlckVtcHR5IDogIWlzRXhwYW5kZWRTdGF0ZShub2RlKSA/IGljb25Gb2xkZXJDb2xsYWJzZWQgOiBpc0V4cGFuZGVkU3RhdGUobm9kZSkgPyBpY29uRm9sZGVyT3BlbiA6ICcnXCI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVDbGlja2VkKG5vZGUpXCJcbiAgICAgICAgICAgICpuZ0lmPVwiYXR0cmljb24gJiYgZ2V0U3RyaW5nRmllbGQobm9kZSwgYXR0cmljb24pXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZWljb24gfHwgZGVmYXVsdFRlbXBsYXRlSWNvblwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgbm9kZTogbm9kZSB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlQ2xpY2tlZChub2RlKVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3Jvdy0xIHB5LTFcIlxuICAgICAgICAgICAgW3N0eWxlLm92ZXJmbG93XT1cImVuYWJsZWVsbGlwc2lzID8gJ2hpZGRlbicgOiBudWxsXCJcbiAgICAgICAgICAgIFtzdHlsZS50ZXh0LW92ZXJmbG93XT1cImVuYWJsZWVsbGlwc2lzID8gJ2VsbGlwc2lzJyA6IG51bGxcIlxuICAgICAgICAgICAgW3N0eWxlLndoaXRlLXNwYWNlXT1cImVuYWJsZWVsbGlwc2lzID8gJ25vd3JhcCcgOiBudWxsXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZWxhYmVsIHx8IGRlZmF1bHRUZW1wbGF0ZUxhYmVsXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBub2RlOiBub2RlLCBsYWJlbDogZ2V0U3RyaW5nRmllbGQobm9kZSwgYXR0cmxhYmVsKSB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAoY2xpY2spPVwic2V0U2VsZWN0ZWRTdGF0ZShub2RlKVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgICAgKm5nSWY9XCIhaXNEaXNhYmxlZFN0YXRlKG5vZGUpICYmIChzaG93YWN0aW9uYWx3YXlzIHx8IGlzU2VsZWN0ZWRTdGF0ZShub2RlKSB8fCBpc0hvdmVyU3RhdGUobm9kZSkpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZWFjdGlvbiB8fCBkZWZhdWx0VGVtcGxhdGVBY3Rpb25cIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG5vZGU6IG5vZGUsIGFjdGlvbmhhbmRsZXI6IG9uQWN0aW9uQ2xpY2tlZC5iaW5kKHRoaXMpIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFeHBhbmRlZFN0YXRlKG5vZGUpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGdldENoaWxkcmVuKG5vZGUpXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyZWVJdGVtXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgbm9kZTogY2hpbGQsXG4gICAgICAgICAgICAgICAgZGVlcDogZGVlcCArIDEsXG4gICAgICAgICAgICAgICAgcGF0aDogcGF0aCArICcvJyArIGdldFN0cmluZ0ZpZWxkKG5vZGUsIGF0dHJpZCksXG4gICAgICAgICAgICAgICAgdGV4dHBhdGg6IHRleHRwYXRoICsgJy8nICsgZ2V0U3RyaW5nRmllbGQobm9kZSwgYXR0cmxhYmVsKVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZVxuICAgICNkZWZhdWx0VGVtcGxhdGVMYWJlbFxuICAgIGxldC1sYWJlbD1cImxhYmVsXCJcbiAgICBsZXQtbm9kZT1cIm5vZGVcIj5cbiAgICA8c3BhbiBbdGl0bGVdPVwibGFiZWxcIj5cbiAgICAgICAge3sgbGFiZWwgfX1cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgICAjZGVmYXVsdFRlbXBsYXRlSWNvblxuICAgIGxldC1ub2RlPVwibm9kZVwiPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtci0yXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0U3RyaW5nRmllbGQobm9kZSwgYXR0cmljb24pXCI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgICAjZGVmYXVsdFRlbXBsYXRlQWN0aW9uXG4gICAgbGV0LW5vZGU9XCJub2RlXCJcbiAgICBsZXQtYWN0aW9uaGFuZGxlcj1cImFjdGlvbmhhbmRsZXJcIj5cbiAgICA8YVxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpbmsgdGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICAoY2xpY2spPVwiYWN0aW9uaGFuZGxlcih7IGFjdGlvbjogJ2RlZmF1bHQnLCBub2RlOiBub2RlIH0pXCI+XG4gICAgICAgIDxpIFtjbGFzc109XCJpY29uQWN0aW9uXCI+PC9pPlxuICAgIDwvYT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zYWMtYm9vdHN0cmFwNC9zcmMvY29udHJvbHMvdHJlZXZpZXcvdHJlZXZpZXcudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zYWMtYm9vdHN0cmFwNC9zcmMvY29udHJvbHMvdHJlZXZpZXcvdHJlZXZpZXcuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQVksUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQUUvRjs7R0FFRztBQUNILE1BOEJhLG9CQUFxQixTQUFRLGlCQUFpQjtJQUN2RCx1QkFBdUI7SUFFdkI7Ozs7T0FJRztJQUNILFlBQWdDLFVBQWtDLEVBQUUsUUFBa0I7UUFDbEYsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDOytHQVZRLG9CQUFvQjttR0FBcEIsb0JBQW9CLDJEQTNCbEI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsb0JBQW9CO2FBQ3BDO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7Z0JBQ25ELEtBQUssRUFBRSxJQUFJO2FBQ2Q7U0FDSixpREM1Qkwsb2lOQTRLQSw0Q0Q3SVEsSUFBSSw2RkFDSixLQUFLLG1IQUNMLGdCQUFnQixvSkFDaEIsT0FBTywrRUFDUCxzQkFBc0IsbURBQ3RCLG9CQUFvQixzREFDcEIsbUJBQW1CLG1EQUNuQix3QkFBd0IscURBQ3hCLFNBQVMseUNBQ1Qsc0JBQXNCLG1EQUN0Qix1QkFBdUI7O1NBR2xCLG9CQUFvQjs0RkFBcEIsb0JBQW9CO2tCQTlCaEMsU0FBUzsrQkFDSSxjQUFjLGFBRWI7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxzQkFBc0I7eUJBQ3BDO3dCQUNEOzRCQUNJLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDbkQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0osY0FDVyxJQUFJLFdBQ1A7d0JBQ0wsSUFBSTt3QkFDSixLQUFLO3dCQUNMLGdCQUFnQjt3QkFDaEIsT0FBTzt3QkFDUCxzQkFBc0I7d0JBQ3RCLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNuQix3QkFBd0I7d0JBQ3hCLFNBQVM7d0JBQ1Qsc0JBQXNCO3dCQUN0Qix1QkFBdUI7cUJBQzFCOzswQkFVWSxJQUFJOzswQkFBSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FjRm9ybUxheW91dERpcmVjdGl2ZSB9IGZyb20gJy4uL2xheW91dC9mb3JtbGF5b3V0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTYWNUb0NvbnRyb2xIZWlnaHRQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvY29udHJvbGhlaWdodC5waXBlJztcbmltcG9ydCB7IFNhY1RvQ29udHJvbFdpZHRoQ3NzUGlwZSB9IGZyb20gJy4uL2xheW91dC90b2NvbnRyb2x3aWR0aGNzcy5waXBlJztcbmltcG9ydCB7IFNhY1RvTGFiZWxIZWlnaHRQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvbGFiZWxoZWlnaHQucGlwZSc7XG5pbXBvcnQgeyBTYWNUb0xhYmVsV2lkdGhDc3NQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvbGFiZWx3aWR0aGNzcy5waXBlJztcbmltcG9ydCB7IFNhY1Rvb2x0aXBDb21wb25lbnQgfSBmcm9tICcuLi90b29sdGlwL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEhvc3QsIEluamVjdG9yLCBPcHRpb25hbCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTYWNUZXN0aW5nQXR0cmlidXRlUGlwZSwgU2FjVHJlZXZpZXdDb21tb24gfSBmcm9tICdAc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NhYy1jb21tb24nO1xuXG4vKipcbiAqIFRyZWV2aWV3IENvbXBvbW5lbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYWMtdHJlZXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVldmlldy5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBTYWNUcmVldmlld0NvbXBvbmVudCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNhY1RyZWV2aWV3Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBTYWNUb0xhYmVsV2lkdGhDc3NQaXBlLFxuICAgICAgICBTYWNUb0xhYmVsSGVpZ2h0UGlwZSxcbiAgICAgICAgU2FjVG9vbHRpcENvbXBvbmVudCxcbiAgICAgICAgU2FjVG9Db250cm9sV2lkdGhDc3NQaXBlLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIFNhY1RvQ29udHJvbEhlaWdodFBpcGUsXG4gICAgICAgIFNhY1Rlc3RpbmdBdHRyaWJ1dGVQaXBlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNhY1RyZWV2aWV3Q29tcG9uZW50IGV4dGVuZHMgU2FjVHJlZXZpZXdDb21tb24ge1xuICAgIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSBmb3JtTGF5b3V0IFNhY0Zvcm1MYXlvdXQgdG8gZGVmaW5lIHNjb3BlZCBsYXlvdXQgc2V0dGluZ3NcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgQ29tcG9uZW50IEluamVjdG9yXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoQEhvc3QoKSBAT3B0aW9uYWwoKSBmb3JtTGF5b3V0OiBTYWNGb3JtTGF5b3V0RGlyZWN0aXZlLCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoZm9ybUxheW91dCwgaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gQ29uc3RydWN0b3JzXG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJyb3cgbWItM1wiXG4gICAgW2NsYXNzLmctMF09XCJkaXNhYmxlbGFiZWxcIlxuICAgIFthdHRyLmRhdGEtZTJlLWtleV09XCJuYW1lIHwgdGVzdGluZ2F0dHJpYnV0ZSA6IGUyZWlkZW50aWZpZXJcIj5cbiAgICA8bGFiZWxcbiAgICAgICAgZm9yPVwie3sgbmFtZSB9fVwiXG4gICAgICAgIGNsYXNzPVwiY29sLTEyIGNvbC1mb3JtLWxhYmVsIGQtZmxleFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIltkaXNhYmxlbGFiZWwgPT09IGZhbHNlID8gKHRoaXMubGFiZWxTaXplcyB8IHRvTGFiZWxXaWR0aENzcykgOiAnc3Itb25seScsIGNvbXBvbmVudEhlaWdodCB8IHRvTGFiZWxIZWlnaHRdXCJcbiAgICAgICAgW2NsYXNzLnJlcXVpcmVkXT1cImlzcmVxdWlyZWRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0IGZsZXgtZ3Jvdy0wXCJcbiAgICAgICAgICAgIFtjbGFzcy5mbGV4LXNtLWdyb3ctMV09XCJzcGxpdGxhYmVsYW5kaGVscHRleHRcIj5cbiAgICAgICAgICAgIHt7IGxhYmVsIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c2FjLXRvb2x0aXBcbiAgICAgICAgICAgICpuZ0lmPVwiaGVscHRleHRtb2RlID09PSAndG9vbHRpcCcgJiYgaGVscHRleHRcIlxuICAgICAgICAgICAgW3Rvb2x0aXB0ZXh0XT1cImhlbHB0ZXh0XCJcbiAgICAgICAgICAgIFtpbmxpbmVtb2RlXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiSGVscHRleHRUb29sdGlwSWNvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xXCI+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc2FjLXRvb2x0aXA+XG4gICAgPC9sYWJlbD5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY29sLTEyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiW2Rpc2FibGVsYWJlbCA9PT0gZmFsc2UgPyAodGhpcy5sYWJlbFNpemVzIHwgdG9Db250cm9sV2lkdGhDc3MpIDogJyddXCI+XG4gICAgICAgIDxkaXYgW2NsYXNzLmQtZmxleF09XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dCAmJiBkaXNhYmxlbGFiZWxcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImhlbHB0ZXh0bW9kZSA9PT0gJ3Rvb2x0aXAnICYmIGhlbHB0ZXh0ICYmIGRpc2FibGVsYWJlbCA/IDAgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MubXItMV09XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dCAmJiBkaXNhYmxlbGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cInt7IG5hbWUgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXJdPVwiaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWRhbmdlcl09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyZWVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBub2RlOiBub2RlLCBkZWVwOiAwLCBwYXRoOiAnJywgdGV4dHBhdGg6ICcnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvdWw+XG5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNpbmxpbmVlcnJvcmVuYWJsZWQgJiYgaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgR2V0RXJyb3JNZXNzYWdlKCkgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPHNtYWxsXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVscHRleHRtb2RlID09PSAndGV4dCcgJiYgaGVscHRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LW11dGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGhlbHB0ZXh0IH19XG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dCAmJiBkaXNhYmxlbGFiZWxcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sLXBsYWludGV4dCBhbGlnbi1zZWxmLXRvcCBtbC0yIG1yLTEgdy1hdXRvXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbY29tcG9uZW50SGVpZ2h0IHwgdG9Db250cm9sSGVpZ2h0XVwiPlxuICAgICAgICAgICAgICAgIDxzYWMtdG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcHRleHRdPVwiaGVscHRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lbW9kZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJIZWxwdGV4dFRvb2x0aXBJY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zYWMtdG9vbHRpcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlXG4gICAgI3RyZWVJdGVtXG4gICAgbGV0LW5vZGU9XCJub2RlXCJcbiAgICBsZXQtZGVlcD1cImRlZXBcIlxuICAgIGxldC1wYXRoPVwicGF0aFwiXG4gICAgbGV0LXRleHRwYXRoPVwidGV4dHBhdGhcIj5cbiAgICA8bGlcbiAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvbiBweS0xIHB4LTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNTZWxlY3RlZFN0YXRlKG5vZGUpXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwic2V0SG92ZXJTdGF0ZShub2RlLCB0cnVlKVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cInNldEhvdmVyU3RhdGUobm9kZSwgZmFsc2UpXCJcbiAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICBhdHRyLmRhdGEtcGF0aD1cInt7IHBhdGggfX0ve3sgZ2V0U3RyaW5nRmllbGQobm9kZSwgYXR0cmlkKSB9fVwiXG4gICAgICAgIGF0dHIuZGF0YS10ZXh0cGF0aD1cInt7IHRleHRwYXRoIH19L3t7IGdldFN0cmluZ0ZpZWxkKG5vZGUsIGF0dHJsYWJlbCkgfX1cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJteC0zXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpIG9mIGNvdW50KGRlZXApXCI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVDbGlja2VkKG5vZGUpXCJcbiAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kZWRzdGF0ZSA9PT0gJ3RydWUnIHx8IGV4cGFuZGVkc3RhdGUgPT09IHRydWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJtci0yXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIiFoYXNDaGlsZHJlbihub2RlKSA/IGljb25Gb2xkZXJFbXB0eSA6ICFpc0V4cGFuZGVkU3RhdGUobm9kZSkgPyBpY29uRm9sZGVyQ29sbGFic2VkIDogaXNFeHBhbmRlZFN0YXRlKG5vZGUpID8gaWNvbkZvbGRlck9wZW4gOiAnJ1wiPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlQ2xpY2tlZChub2RlKVwiXG4gICAgICAgICAgICAqbmdJZj1cImF0dHJpY29uICYmIGdldFN0cmluZ0ZpZWxkKG5vZGUsIGF0dHJpY29uKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVpY29uIHx8IGRlZmF1bHRUZW1wbGF0ZUljb25cIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG5vZGU6IG5vZGUgfVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZUNsaWNrZWQobm9kZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3ctMSBweS0xXCJcbiAgICAgICAgICAgIFtzdHlsZS5vdmVyZmxvd109XCJlbmFibGVlbGxpcHNpcyA/ICdoaWRkZW4nIDogbnVsbFwiXG4gICAgICAgICAgICBbc3R5bGUudGV4dC1vdmVyZmxvd109XCJlbmFibGVlbGxpcHNpcyA/ICdlbGxpcHNpcycgOiBudWxsXCJcbiAgICAgICAgICAgIFtzdHlsZS53aGl0ZS1zcGFjZV09XCJlbmFibGVlbGxpcHNpcyA/ICdub3dyYXAnIDogbnVsbFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVsYWJlbCB8fCBkZWZhdWx0VGVtcGxhdGVMYWJlbFwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgbm9kZTogbm9kZSwgbGFiZWw6IGdldFN0cmluZ0ZpZWxkKG5vZGUsIGF0dHJsYWJlbCkgfVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKGNsaWNrKT1cInNldFNlbGVjdGVkU3RhdGUobm9kZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4LXNocmluay0wXCJcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzRGlzYWJsZWRTdGF0ZShub2RlKSAmJiAoc2hvd2FjdGlvbmFsd2F5cyB8fCBpc1NlbGVjdGVkU3RhdGUobm9kZSkgfHwgaXNIb3ZlclN0YXRlKG5vZGUpKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVhY3Rpb24gfHwgZGVmYXVsdFRlbXBsYXRlQWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBub2RlOiBub2RlLCBhY3Rpb25oYW5kbGVyOiBvbkFjdGlvbkNsaWNrZWQuYmluZCh0aGlzKSB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2xpPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRXhwYW5kZWRTdGF0ZShub2RlKVwiPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBnZXRDaGlsZHJlbihub2RlKVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmVlSXRlbVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgIG5vZGU6IGNoaWxkLFxuICAgICAgICAgICAgICAgIGRlZXA6IGRlZXAgKyAxLFxuICAgICAgICAgICAgICAgIHBhdGg6IHBhdGggKyAnLycgKyBnZXRTdHJpbmdGaWVsZChub2RlLCBhdHRyaWQpLFxuICAgICAgICAgICAgICAgIHRleHRwYXRoOiB0ZXh0cGF0aCArICcvJyArIGdldFN0cmluZ0ZpZWxkKG5vZGUsIGF0dHJsYWJlbClcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGVcbiAgICAjZGVmYXVsdFRlbXBsYXRlTGFiZWxcbiAgICBsZXQtbGFiZWw9XCJsYWJlbFwiXG4gICAgbGV0LW5vZGU9XCJub2RlXCI+XG4gICAgPHNwYW4gW3RpdGxlXT1cImxhYmVsXCI+e3sgbGFiZWwgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgICAjZGVmYXVsdFRlbXBsYXRlSWNvblxuICAgIGxldC1ub2RlPVwibm9kZVwiPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtci0yXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0U3RyaW5nRmllbGQobm9kZSwgYXR0cmljb24pXCI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgICAjZGVmYXVsdFRlbXBsYXRlQWN0aW9uXG4gICAgbGV0LW5vZGU9XCJub2RlXCJcbiAgICBsZXQtYWN0aW9uaGFuZGxlcj1cImFjdGlvbmhhbmRsZXJcIj5cbiAgICA8YVxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpbmsgdGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICAoY2xpY2spPVwiYWN0aW9uaGFuZGxlcih7IGFjdGlvbjogJ2RlZmF1bHQnLCBub2RlOiBub2RlIH0pXCI+XG4gICAgICAgIDxpIFtjbGFzc109XCJpY29uQWN0aW9uXCI+PC9pPlxuICAgIDwvYT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -6,7 +6,7 @@ import { SacTooltipComponent } from '../tooltip/tooltip';
6
6
  import { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common';
7
7
  import { Component, Host, Optional, forwardRef } from '@angular/core';
8
8
  import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
9
- import { SacDropzoneMultipleCommon } from '@simpleangularcontrols/sac-common';
9
+ import { SacDropzoneMultipleCommon, SacTestingAttributePipe } from '@simpleangularcontrols/sac-common';
10
10
  import * as i0 from "@angular/core";
11
11
  import * as i1 from "../layout/formlayout.directive";
12
12
  /**
@@ -45,7 +45,7 @@ class SacDropzoneMultipleComponent extends SacDropzoneMultipleCommon {
45
45
  multi: true,
46
46
  useExisting: forwardRef(() => SacDropzoneMultipleComponent),
47
47
  },
48
- ], usesInheritance: true, ngImport: i0, template: "<div\n id=\"{{ name }}\"\n class=\"row form-group\"\n [class.no-gutters]=\"disablelabel\">\n <label\n *ngIf=\"disablelabel === false && !isAdaptiveLabel\"\n id=\"{{ name }}_label\"\n for=\"{{ name }}_uploadinput\"\n class=\"col-12 col-form-label d-flex\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toLabelWidthCss) : 'sr-only', componentHeight | toLabelHeight]\"\n [class.required]=\"isrequired\">\n <div\n class=\"text flex-grow-0\"\n [class.flex-sm-grow-1]=\"splitlabelandhelptext\">\n {{ label }}\n </div>\n <sac-tooltip\n *ngIf=\"helptextmode === 'tooltip' && helptext\"\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\"\n ><span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\"></span> </sac-tooltip\n ></label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\"\n [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div [class.flex-grow-1]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div\n class=\"dropzone d-flex justify-content-center position-relative\"\n (drop)=\"dropHandler($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n [class.active]=\"active\"\n [style.min-height]=\"uploadheight\"\n [class.is-invalid]=\"invalid && (dirty || touched)\">\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length === 0\">\n <div class=\"align-self-center text-center\">\n <div [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length > 0\">\n <div class=\"align-self-center progress-container\">\n <div\n class=\"dropzone-uploadstates\"\n [class.mt-1]=\"i > 0\"\n *ngFor=\"let file of uploads; let i = index\">\n <div\n class=\"input-group upload-component upload-component-multiple\"\n [class.input-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.input-group-lg]=\"componentHeight === ControlHeight.Large\">\n <div class=\"form-control upload-progress border-secondary\">\n <div class=\"progress\">\n <div\n class=\"progress-bar\"\n [class.progress-bar-success]=\"file.progress === 100\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"file.progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"file.progress\">\n <span class=\"progress-text text-dark\">{{ file.name }}</span>\n </div>\n </div>\n </div>\n <div class=\"input-group-append\">\n <!-- image-preview-clear button -->\n <a\n class=\"btn\"\n (click)=\"cancel(file.uploadId)\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [class]=\"IconDelete\"></span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <input\n #files\n multiple\n id=\"{{ name }}_uploadinput\"\n type=\"file\"\n class=\"custom-file-input\"\n (click)=\"files.value = ''\"\n (uploadxState)=\"onUpload($event)\"\n [disabled]=\"HasQueueItem()\" />\n </div>\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n <div\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n </div>\n\n <div\n *ngIf=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n class=\"form-control-plaintext align-self-top ml-2 mr-1 w-auto\"\n [ngClass]=\"[componentHeight | toControlHeight]\">\n <sac-tooltip\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </div>\n </div>\n</div>\n", styles: [".dropzone{min-height:9.75rem;border:.125rem dashed lightgray;border-radius:.5rem;background:transparent}.dropzone.is-invalid{border-color:var(--red)}.dropzone .content{position:absolute;inset:0}.dropzone .content .is-invalid{color:var(--red)}.dropzone .content .progress-container{min-width:50%;z-index:100}.dropzone .content .dropzone-uploadstates .upload-progress{padding:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress{height:100%;border-top-right-radius:0;border-bottom-right-radius:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress .progress-text{left:0;right:0;position:absolute}.dropzone .custom-file-input{min-height:100%;height:unset}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SacToLabelWidthCssPipe, name: "toLabelWidthCss" }, { kind: "pipe", type: SacToControlWidthCssPipe, name: "toControlWidthCss" }, { kind: "pipe", type: SacToLabelHeightPipe, name: "toLabelHeight" }, { kind: "component", type: SacTooltipComponent, selector: "sac-tooltip" }, { kind: "pipe", type: SacToControlHeightPipe, name: "toControlHeight" }] }); }
48
+ ], usesInheritance: true, ngImport: i0, template: "<div\n id=\"{{ name }}\"\n class=\"row form-group\"\n [class.no-gutters]=\"disablelabel\"\n [attr.data-e2e-key]=\"name | testingattribute : e2eidentifier\">\n <label\n *ngIf=\"disablelabel === false && !isAdaptiveLabel\"\n id=\"{{ name }}_label\"\n for=\"{{ name }}_uploadinput\"\n class=\"col-12 col-form-label d-flex\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toLabelWidthCss) : 'sr-only', componentHeight | toLabelHeight]\"\n [class.required]=\"isrequired\">\n <div\n class=\"text flex-grow-0\"\n [class.flex-sm-grow-1]=\"splitlabelandhelptext\">\n {{ label }}\n </div>\n <sac-tooltip\n *ngIf=\"helptextmode === 'tooltip' && helptext\"\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\"\n ><span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\"></span> </sac-tooltip\n ></label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\"\n [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div [class.flex-grow-1]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div\n class=\"dropzone d-flex justify-content-center position-relative\"\n (drop)=\"dropHandler($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n [class.active]=\"active\"\n [style.min-height]=\"uploadheight\"\n [class.is-invalid]=\"invalid && (dirty || touched)\">\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length === 0\">\n <div class=\"align-self-center text-center\">\n <div [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length > 0\">\n <div class=\"align-self-center progress-container\">\n <div\n class=\"dropzone-uploadstates\"\n [class.mt-1]=\"i > 0\"\n *ngFor=\"let file of uploads; let i = index\">\n <div\n class=\"input-group upload-component upload-component-multiple\"\n [class.input-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.input-group-lg]=\"componentHeight === ControlHeight.Large\">\n <div class=\"form-control upload-progress border-secondary\">\n <div class=\"progress\">\n <div\n class=\"progress-bar\"\n [class.progress-bar-success]=\"file.progress === 100\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"file.progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"file.progress\">\n <span class=\"progress-text text-dark\">{{ file.name }}</span>\n </div>\n </div>\n </div>\n <div class=\"input-group-append\">\n <!-- image-preview-clear button -->\n <a\n class=\"btn\"\n (click)=\"cancel(file.uploadId)\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [class]=\"IconDelete\"></span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <input\n #files\n multiple\n id=\"{{ name }}_uploadinput\"\n type=\"file\"\n class=\"custom-file-input\"\n (click)=\"files.value = ''\"\n (uploadxState)=\"onUpload($event)\"\n [disabled]=\"HasQueueItem()\" />\n </div>\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n <div\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n </div>\n\n <div\n *ngIf=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n class=\"form-control-plaintext align-self-top ml-2 mr-1 w-auto\"\n [ngClass]=\"[componentHeight | toControlHeight]\">\n <sac-tooltip\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </div>\n </div>\n</div>\n", styles: [".dropzone{min-height:9.75rem;border:.125rem dashed lightgray;border-radius:.5rem;background:transparent}.dropzone.is-invalid{border-color:var(--red)}.dropzone .content{position:absolute;inset:0}.dropzone .content .is-invalid{color:var(--red)}.dropzone .content .progress-container{min-width:50%;z-index:100}.dropzone .content .dropzone-uploadstates .upload-progress{padding:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress{height:100%;border-top-right-radius:0;border-bottom-right-radius:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress .progress-text{left:0;right:0;position:absolute}.dropzone .custom-file-input{min-height:100%;height:unset}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SacToLabelWidthCssPipe, name: "toLabelWidthCss" }, { kind: "pipe", type: SacToControlWidthCssPipe, name: "toControlWidthCss" }, { kind: "pipe", type: SacToLabelHeightPipe, name: "toLabelHeight" }, { kind: "component", type: SacTooltipComponent, selector: "sac-tooltip" }, { kind: "pipe", type: SacToControlHeightPipe, name: "toControlHeight" }, { kind: "pipe", type: SacTestingAttributePipe, name: "testingattribute" }] }); }
49
49
  }
50
50
  export { SacDropzoneMultipleComponent };
51
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacDropzoneMultipleComponent, decorators: [{
@@ -71,10 +71,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
71
71
  SacToLabelHeightPipe,
72
72
  SacTooltipComponent,
73
73
  SacToControlHeightPipe,
74
- ], template: "<div\n id=\"{{ name }}\"\n class=\"row form-group\"\n [class.no-gutters]=\"disablelabel\">\n <label\n *ngIf=\"disablelabel === false && !isAdaptiveLabel\"\n id=\"{{ name }}_label\"\n for=\"{{ name }}_uploadinput\"\n class=\"col-12 col-form-label d-flex\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toLabelWidthCss) : 'sr-only', componentHeight | toLabelHeight]\"\n [class.required]=\"isrequired\">\n <div\n class=\"text flex-grow-0\"\n [class.flex-sm-grow-1]=\"splitlabelandhelptext\">\n {{ label }}\n </div>\n <sac-tooltip\n *ngIf=\"helptextmode === 'tooltip' && helptext\"\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\"\n ><span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\"></span> </sac-tooltip\n ></label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\"\n [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div [class.flex-grow-1]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div\n class=\"dropzone d-flex justify-content-center position-relative\"\n (drop)=\"dropHandler($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n [class.active]=\"active\"\n [style.min-height]=\"uploadheight\"\n [class.is-invalid]=\"invalid && (dirty || touched)\">\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length === 0\">\n <div class=\"align-self-center text-center\">\n <div [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length > 0\">\n <div class=\"align-self-center progress-container\">\n <div\n class=\"dropzone-uploadstates\"\n [class.mt-1]=\"i > 0\"\n *ngFor=\"let file of uploads; let i = index\">\n <div\n class=\"input-group upload-component upload-component-multiple\"\n [class.input-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.input-group-lg]=\"componentHeight === ControlHeight.Large\">\n <div class=\"form-control upload-progress border-secondary\">\n <div class=\"progress\">\n <div\n class=\"progress-bar\"\n [class.progress-bar-success]=\"file.progress === 100\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"file.progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"file.progress\">\n <span class=\"progress-text text-dark\">{{ file.name }}</span>\n </div>\n </div>\n </div>\n <div class=\"input-group-append\">\n <!-- image-preview-clear button -->\n <a\n class=\"btn\"\n (click)=\"cancel(file.uploadId)\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [class]=\"IconDelete\"></span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <input\n #files\n multiple\n id=\"{{ name }}_uploadinput\"\n type=\"file\"\n class=\"custom-file-input\"\n (click)=\"files.value = ''\"\n (uploadxState)=\"onUpload($event)\"\n [disabled]=\"HasQueueItem()\" />\n </div>\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n <div\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n </div>\n\n <div\n *ngIf=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n class=\"form-control-plaintext align-self-top ml-2 mr-1 w-auto\"\n [ngClass]=\"[componentHeight | toControlHeight]\">\n <sac-tooltip\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </div>\n </div>\n</div>\n", styles: [".dropzone{min-height:9.75rem;border:.125rem dashed lightgray;border-radius:.5rem;background:transparent}.dropzone.is-invalid{border-color:var(--red)}.dropzone .content{position:absolute;inset:0}.dropzone .content .is-invalid{color:var(--red)}.dropzone .content .progress-container{min-width:50%;z-index:100}.dropzone .content .dropzone-uploadstates .upload-progress{padding:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress{height:100%;border-top-right-radius:0;border-bottom-right-radius:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress .progress-text{left:0;right:0;position:absolute}.dropzone .custom-file-input{min-height:100%;height:unset}\n"] }]
74
+ SacTestingAttributePipe,
75
+ ], template: "<div\n id=\"{{ name }}\"\n class=\"row form-group\"\n [class.no-gutters]=\"disablelabel\"\n [attr.data-e2e-key]=\"name | testingattribute : e2eidentifier\">\n <label\n *ngIf=\"disablelabel === false && !isAdaptiveLabel\"\n id=\"{{ name }}_label\"\n for=\"{{ name }}_uploadinput\"\n class=\"col-12 col-form-label d-flex\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toLabelWidthCss) : 'sr-only', componentHeight | toLabelHeight]\"\n [class.required]=\"isrequired\">\n <div\n class=\"text flex-grow-0\"\n [class.flex-sm-grow-1]=\"splitlabelandhelptext\">\n {{ label }}\n </div>\n <sac-tooltip\n *ngIf=\"helptextmode === 'tooltip' && helptext\"\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\"\n ><span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\"></span> </sac-tooltip\n ></label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\"\n [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div [class.flex-grow-1]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div\n class=\"dropzone d-flex justify-content-center position-relative\"\n (drop)=\"dropHandler($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n [class.active]=\"active\"\n [style.min-height]=\"uploadheight\"\n [class.is-invalid]=\"invalid && (dirty || touched)\">\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length === 0\">\n <div class=\"align-self-center text-center\">\n <div [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length > 0\">\n <div class=\"align-self-center progress-container\">\n <div\n class=\"dropzone-uploadstates\"\n [class.mt-1]=\"i > 0\"\n *ngFor=\"let file of uploads; let i = index\">\n <div\n class=\"input-group upload-component upload-component-multiple\"\n [class.input-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.input-group-lg]=\"componentHeight === ControlHeight.Large\">\n <div class=\"form-control upload-progress border-secondary\">\n <div class=\"progress\">\n <div\n class=\"progress-bar\"\n [class.progress-bar-success]=\"file.progress === 100\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"file.progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"file.progress\">\n <span class=\"progress-text text-dark\">{{ file.name }}</span>\n </div>\n </div>\n </div>\n <div class=\"input-group-append\">\n <!-- image-preview-clear button -->\n <a\n class=\"btn\"\n (click)=\"cancel(file.uploadId)\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [class]=\"IconDelete\"></span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <input\n #files\n multiple\n id=\"{{ name }}_uploadinput\"\n type=\"file\"\n class=\"custom-file-input\"\n (click)=\"files.value = ''\"\n (uploadxState)=\"onUpload($event)\"\n [disabled]=\"HasQueueItem()\" />\n </div>\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n <div\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n </div>\n\n <div\n *ngIf=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n class=\"form-control-plaintext align-self-top ml-2 mr-1 w-auto\"\n [ngClass]=\"[componentHeight | toControlHeight]\">\n <sac-tooltip\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </div>\n </div>\n</div>\n", styles: [".dropzone{min-height:9.75rem;border:.125rem dashed lightgray;border-radius:.5rem;background:transparent}.dropzone.is-invalid{border-color:var(--red)}.dropzone .content{position:absolute;inset:0}.dropzone .content .is-invalid{color:var(--red)}.dropzone .content .progress-container{min-width:50%;z-index:100}.dropzone .content .dropzone-uploadstates .upload-progress{padding:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress{height:100%;border-top-right-radius:0;border-bottom-right-radius:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress .progress-text{left:0;right:0;position:absolute}.dropzone .custom-file-input{min-height:100%;height:unset}\n"] }]
75
76
  }], ctorParameters: function () { return [{ type: i1.SacFormLayoutDirective, decorators: [{
76
77
  type: Host
77
78
  }, {
78
79
  type: Optional
79
80
  }] }, { type: i0.Injector }, { type: i0.Renderer2 }, { type: i0.NgZone }]; } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcHpvbmVtdWx0aXBsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1ib290c3RyYXA0L3NyYy9jb250cm9scy91cGxvYWQvZHJvcHpvbmVtdWx0aXBsZS50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1ib290c3RyYXA0L3NyYy9jb250cm9scy91cGxvYWQvZHJvcHpvbmVtdWx0aXBsZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBNEIsUUFBUSxFQUFhLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQUU5RTs7O0dBR0c7QUFDSCxNQTZCYSw0QkFBNkIsU0FBUSx5QkFBeUI7SUFDdkUsdUJBQXVCO0lBRXZCOzs7Ozs7T0FNRztJQUNILFlBQ3dCLFVBQWtDLEVBQ3RELFFBQWtCLEVBQ2xCLFFBQW1CLEVBQ25CLE1BQWM7UUFFZCxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELDBCQUEwQjtJQUUxQix5QkFBeUI7SUFFekI7O09BRUc7SUFDSSxRQUFRO1FBQ1gsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JCLENBQUM7K0dBNUJRLDRCQUE0QjttR0FBNUIsNEJBQTRCLG1FQXpCMUI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsNEJBQTRCO2FBQzVDO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUM7YUFDOUQ7U0FDSixpREM5QkwsbzNMQTJIQSwydUJEMUZRLElBQUksNkZBQ0osT0FBTyxvRkFDUCxLQUFLLDhHQUNMLFNBQVMseUNBQ1Qsc0JBQXNCLG1EQUN0Qix3QkFBd0IscURBQ3hCLG9CQUFvQixzREFDcEIsbUJBQW1CLG1EQUNuQixzQkFBc0I7O1NBR2pCLDRCQUE0Qjs0RkFBNUIsNEJBQTRCO2tCQTdCeEMsU0FBUzsrQkFDSSxzQkFBc0IsYUFHckI7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyw4QkFBOEI7eUJBQzVDO3dCQUNEOzRCQUNJLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw2QkFBNkIsQ0FBQzt5QkFDOUQ7cUJBQ0osY0FDVyxJQUFJLFdBQ1A7d0JBQ0wsSUFBSTt3QkFDSixPQUFPO3dCQUNQLEtBQUs7d0JBQ0wsU0FBUzt3QkFDVCxzQkFBc0I7d0JBQ3RCLHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLHNCQUFzQjtxQkFDekI7OzBCQWFJLElBQUk7OzBCQUFJLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYWNGb3JtTGF5b3V0RGlyZWN0aXZlIH0gZnJvbSAnLi4vbGF5b3V0L2Zvcm1sYXlvdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNhY1RvQ29udHJvbEhlaWdodFBpcGUgfSBmcm9tICcuLi9sYXlvdXQvdG9jb250cm9saGVpZ2h0LnBpcGUnO1xuaW1wb3J0IHsgU2FjVG9Db250cm9sV2lkdGhDc3NQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvY29udHJvbHdpZHRoY3NzLnBpcGUnO1xuaW1wb3J0IHsgU2FjVG9MYWJlbEhlaWdodFBpcGUgfSBmcm9tICcuLi9sYXlvdXQvdG9sYWJlbGhlaWdodC5waXBlJztcbmltcG9ydCB7IFNhY1RvTGFiZWxXaWR0aENzc1BpcGUgfSBmcm9tICcuLi9sYXlvdXQvdG9sYWJlbHdpZHRoY3NzLnBpcGUnO1xuaW1wb3J0IHsgU2FjVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4uL3Rvb2x0aXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdCwgSW5qZWN0b3IsIE5nWm9uZSwgT25Jbml0LCBPcHRpb25hbCwgUmVuZGVyZXIyLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNhY0Ryb3B6b25lTXVsdGlwbGVDb21tb24gfSBmcm9tICdAc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NhYy1jb21tb24nO1xuXG4vKipcbiAqIERyb3B6b25lIEtvbXBvbmVudGUgZsO8ciBtZWhyZXJlIFVwbG9hZHNcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2t1a2hhcmlldi9uZ3gtdXBsb2FkeC9cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYWMtZHJvcHpvbmVtdWx0aXBsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Ryb3B6b25lbXVsdGlwbGUuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHJvcHpvbmUuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFNhY0Ryb3B6b25lTXVsdGlwbGVDb21wb25lbnQsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNhY0Ryb3B6b25lTXVsdGlwbGVDb21wb25lbnQpLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIFNhY1RvTGFiZWxXaWR0aENzc1BpcGUsXG4gICAgICAgIFNhY1RvQ29udHJvbFdpZHRoQ3NzUGlwZSxcbiAgICAgICAgU2FjVG9MYWJlbEhlaWdodFBpcGUsXG4gICAgICAgIFNhY1Rvb2x0aXBDb21wb25lbnQsXG4gICAgICAgIFNhY1RvQ29udHJvbEhlaWdodFBpcGUsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2FjRHJvcHpvbmVNdWx0aXBsZUNvbXBvbmVudCBleHRlbmRzIFNhY0Ryb3B6b25lTXVsdGlwbGVDb21tb24gaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSBmb3JtTGF5b3V0IFNhY0Zvcm1MYXlvdXQgdG8gZGVmaW5lIHNjb3BlZCBsYXlvdXQgc2V0dGluZ3NcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgSW5qZWN0b3IgZm9yIGluamVjdGluZyBzZXJ2aWNlc1xuICAgICAqIEBwYXJhbSByZW5kZXJlciBBbmd1bGFyIHJlbmRlcmluZyBlbmdpbmVcbiAgICAgKiBAcGFyYW0gbmdab25lIG5nWm9uZSB0byBtYW5hZ2UgZXh0ZXJuYWwgamF2YXNjcmlwdHNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEhvc3QoKSBAT3B0aW9uYWwoKSBmb3JtTGF5b3V0OiBTYWNGb3JtTGF5b3V0RGlyZWN0aXZlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIG5nWm9uZTogTmdab25lXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGZvcm1MYXlvdXQsIGluamVjdG9yLCByZW5kZXJlciwgbmdab25lKTtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xuXG4gICAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGlzaWVydCBkYXMgQ29udHJvbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXG59XG4iLCI8ZGl2XG4gICAgaWQ9XCJ7eyBuYW1lIH19XCJcbiAgICBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCJcbiAgICBbY2xhc3Mubm8tZ3V0dGVyc109XCJkaXNhYmxlbGFiZWxcIj5cbiAgICA8bGFiZWxcbiAgICAgICAgKm5nSWY9XCJkaXNhYmxlbGFiZWwgPT09IGZhbHNlICYmICFpc0FkYXB0aXZlTGFiZWxcIlxuICAgICAgICBpZD1cInt7IG5hbWUgfX1fbGFiZWxcIlxuICAgICAgICBmb3I9XCJ7eyBuYW1lIH19X3VwbG9hZGlucHV0XCJcbiAgICAgICAgY2xhc3M9XCJjb2wtMTIgY29sLWZvcm0tbGFiZWwgZC1mbGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiW2Rpc2FibGVsYWJlbCA9PT0gZmFsc2UgPyAodGhpcy5sYWJlbFNpemVzIHwgdG9MYWJlbFdpZHRoQ3NzKSA6ICdzci1vbmx5JywgY29tcG9uZW50SGVpZ2h0IHwgdG9MYWJlbEhlaWdodF1cIlxuICAgICAgICBbY2xhc3MucmVxdWlyZWRdPVwiaXNyZXF1aXJlZFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInRleHQgZmxleC1ncm93LTBcIlxuICAgICAgICAgICAgW2NsYXNzLmZsZXgtc20tZ3Jvdy0xXT1cInNwbGl0bGFiZWxhbmRoZWxwdGV4dFwiPlxuICAgICAgICAgICAge3sgbGFiZWwgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzYWMtdG9vbHRpcFxuICAgICAgICAgICAgKm5nSWY9XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dFwiXG4gICAgICAgICAgICBbdG9vbHRpcHRleHRdPVwiaGVscHRleHRcIlxuICAgICAgICAgICAgW2lubGluZW1vZGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJIZWxwdGV4dFRvb2x0aXBJY29uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTFcIj48L3NwYW4+IDwvc2FjLXRvb2x0aXBcbiAgICA+PC9sYWJlbD5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY29sLTEyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiW2Rpc2FibGVsYWJlbCA9PT0gZmFsc2UgPyAodGhpcy5sYWJlbFNpemVzIHwgdG9Db250cm9sV2lkdGhDc3MpIDogJyddXCJcbiAgICAgICAgW2NsYXNzLmQtZmxleF09XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dCAmJiBkaXNhYmxlbGFiZWxcIj5cbiAgICAgICAgPGRpdiBbY2xhc3MuZmxleC1ncm93LTFdPVwiaGVscHRleHRtb2RlID09PSAndG9vbHRpcCcgJiYgaGVscHRleHQgJiYgZGlzYWJsZWxhYmVsXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wem9uZSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZVwiXG4gICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJvcEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRyYWdsZWF2ZSk9XCJvbkRyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwidXBsb2FkaGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb250ZW50IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ1cGxvYWRzLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24tc2VsZi1jZW50ZXIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmlzLWludmFsaWRdPVwiaXNpbmxpbmVlcnJvcmVuYWJsZWQgJiYgaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRlbnQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInVwbG9hZHMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24tc2VsZi1jZW50ZXIgcHJvZ3Jlc3MtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wem9uZS11cGxvYWRzdGF0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tdC0xXT1cImkgPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsZSBvZiB1cGxvYWRzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWdyb3VwIHVwbG9hZC1jb21wb25lbnQgdXBsb2FkLWNvbXBvbmVudC1tdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pbnB1dC1ncm91cC1zbV09XCJjb21wb25lbnRIZWlnaHQgPT09IENvbnRyb2xIZWlnaHQuU21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaW5wdXQtZ3JvdXAtbGddPVwiY29tcG9uZW50SGVpZ2h0ID09PSBDb250cm9sSGVpZ2h0LkxhcmdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdXBsb2FkLXByb2dyZXNzIGJvcmRlci1zZWNvbmRhcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucHJvZ3Jlc3MtYmFyLXN1Y2Nlc3NdPVwiZmlsZS5wcm9ncmVzcyA9PT0gMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJmaWxlLnByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS12YWx1ZW1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLXZhbHVlbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiZmlsZS5wcm9ncmVzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByb2dyZXNzLXRleHQgdGV4dC1kYXJrXCI+e3sgZmlsZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGltYWdlLXByZXZpZXctY2xlYXIgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbChmaWxlLnVwbG9hZElkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIkljb25EZWxldGVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAjZmlsZXNcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ7eyBuYW1lIH19X3VwbG9hZGlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1maWxlLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbGVzLnZhbHVlID0gJydcIlxuICAgICAgICAgICAgICAgICAgICAodXBsb2FkeFN0YXRlKT1cIm9uVXBsb2FkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiSGFzUXVldWVJdGVtKClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICAgICAqbmdJZj1cImhlbHB0ZXh0bW9kZSA9PT0gJ3RleHQnICYmIGhlbHB0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LW11dGVkXCI+XG4gICAgICAgICAgICAgICAge3sgaGVscHRleHQgfX1cbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc2lubGluZWVycm9yZW5hYmxlZCAmJiBpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XG4gICAgICAgICAgICAgICAge3sgR2V0RXJyb3JNZXNzYWdlKCkgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiaGVscHRleHRtb2RlID09PSAndG9vbHRpcCcgJiYgaGVscHRleHQgJiYgZGlzYWJsZWxhYmVsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sLXBsYWludGV4dCBhbGlnbi1zZWxmLXRvcCBtbC0yIG1yLTEgdy1hdXRvXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltjb21wb25lbnRIZWlnaHQgfCB0b0NvbnRyb2xIZWlnaHRdXCI+XG4gICAgICAgICAgICA8c2FjLXRvb2x0aXBcbiAgICAgICAgICAgICAgICBbdG9vbHRpcHRleHRdPVwiaGVscHRleHRcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVtb2RlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJIZWxwdGV4dFRvb2x0aXBJY29uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xXCI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zYWMtdG9vbHRpcD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcHpvbmVtdWx0aXBsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1ib290c3RyYXA0L3NyYy9jb250cm9scy91cGxvYWQvZHJvcHpvbmVtdWx0aXBsZS50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1ib290c3RyYXA0L3NyYy9jb250cm9scy91cGxvYWQvZHJvcHpvbmVtdWx0aXBsZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBNEIsUUFBUSxFQUFhLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQUV2Rzs7O0dBR0c7QUFDSCxNQThCYSw0QkFBNkIsU0FBUSx5QkFBeUI7SUFDdkUsdUJBQXVCO0lBRXZCOzs7Ozs7T0FNRztJQUNILFlBQ3dCLFVBQWtDLEVBQ3RELFFBQWtCLEVBQ2xCLFFBQW1CLEVBQ25CLE1BQWM7UUFFZCxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELDBCQUEwQjtJQUUxQix5QkFBeUI7SUFFekI7O09BRUc7SUFDSSxRQUFRO1FBQ1gsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JCLENBQUM7K0dBNUJRLDRCQUE0QjttR0FBNUIsNEJBQTRCLG1FQTFCMUI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsNEJBQTRCO2FBQzVDO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUM7YUFDOUQ7U0FDSixpREM5QkwseTdMQTRIQSwydUJEM0ZRLElBQUksNkZBQ0osT0FBTyxvRkFDUCxLQUFLLDhHQUNMLFNBQVMseUNBQ1Qsc0JBQXNCLG1EQUN0Qix3QkFBd0IscURBQ3hCLG9CQUFvQixzREFDcEIsbUJBQW1CLG1EQUNuQixzQkFBc0IsbURBQ3RCLHVCQUF1Qjs7U0FHbEIsNEJBQTRCOzRGQUE1Qiw0QkFBNEI7a0JBOUJ4QyxTQUFTOytCQUNJLHNCQUFzQixhQUdyQjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLDhCQUE4Qjt5QkFDNUM7d0JBQ0Q7NEJBQ0ksT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDZCQUE2QixDQUFDO3lCQUM5RDtxQkFDSixjQUNXLElBQUksV0FDUDt3QkFDTCxJQUFJO3dCQUNKLE9BQU87d0JBQ1AsS0FBSzt3QkFDTCxTQUFTO3dCQUNULHNCQUFzQjt3QkFDdEIsd0JBQXdCO3dCQUN4QixvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIsc0JBQXNCO3dCQUN0Qix1QkFBdUI7cUJBQzFCOzswQkFhSSxJQUFJOzswQkFBSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FjRm9ybUxheW91dERpcmVjdGl2ZSB9IGZyb20gJy4uL2xheW91dC9mb3JtbGF5b3V0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTYWNUb0NvbnRyb2xIZWlnaHRQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvY29udHJvbGhlaWdodC5waXBlJztcbmltcG9ydCB7IFNhY1RvQ29udHJvbFdpZHRoQ3NzUGlwZSB9IGZyb20gJy4uL2xheW91dC90b2NvbnRyb2x3aWR0aGNzcy5waXBlJztcbmltcG9ydCB7IFNhY1RvTGFiZWxIZWlnaHRQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvbGFiZWxoZWlnaHQucGlwZSc7XG5pbXBvcnQgeyBTYWNUb0xhYmVsV2lkdGhDc3NQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvbGFiZWx3aWR0aGNzcy5waXBlJztcbmltcG9ydCB7IFNhY1Rvb2x0aXBDb21wb25lbnQgfSBmcm9tICcuLi90b29sdGlwL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEhvc3QsIEluamVjdG9yLCBOZ1pvbmUsIE9uSW5pdCwgT3B0aW9uYWwsIFJlbmRlcmVyMiwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTYWNEcm9wem9uZU11bHRpcGxlQ29tbW9uLCBTYWNUZXN0aW5nQXR0cmlidXRlUGlwZSB9IGZyb20gJ0BzaW1wbGVhbmd1bGFyY29udHJvbHMvc2FjLWNvbW1vbic7XG5cbi8qKlxuICogRHJvcHpvbmUgS29tcG9uZW50ZSBmw7xyIG1laHJlcmUgVXBsb2Fkc1xuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20va3VraGFyaWV2L25neC11cGxvYWR4L1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NhYy1kcm9wem9uZW11bHRpcGxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHJvcHpvbmVtdWx0aXBsZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kcm9wem9uZS5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogU2FjRHJvcHpvbmVNdWx0aXBsZUNvbXBvbmVudCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2FjRHJvcHpvbmVNdWx0aXBsZUNvbXBvbmVudCksXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIEFzeW5jUGlwZSxcbiAgICAgICAgU2FjVG9MYWJlbFdpZHRoQ3NzUGlwZSxcbiAgICAgICAgU2FjVG9Db250cm9sV2lkdGhDc3NQaXBlLFxuICAgICAgICBTYWNUb0xhYmVsSGVpZ2h0UGlwZSxcbiAgICAgICAgU2FjVG9vbHRpcENvbXBvbmVudCxcbiAgICAgICAgU2FjVG9Db250cm9sSGVpZ2h0UGlwZSxcbiAgICAgICAgU2FjVGVzdGluZ0F0dHJpYnV0ZVBpcGUsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2FjRHJvcHpvbmVNdWx0aXBsZUNvbXBvbmVudCBleHRlbmRzIFNhY0Ryb3B6b25lTXVsdGlwbGVDb21tb24gaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8vICNyZWdpb24gQ29uc3RydWN0b3JzXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSBmb3JtTGF5b3V0IFNhY0Zvcm1MYXlvdXQgdG8gZGVmaW5lIHNjb3BlZCBsYXlvdXQgc2V0dGluZ3NcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgSW5qZWN0b3IgZm9yIGluamVjdGluZyBzZXJ2aWNlc1xuICAgICAqIEBwYXJhbSByZW5kZXJlciBBbmd1bGFyIHJlbmRlcmluZyBlbmdpbmVcbiAgICAgKiBAcGFyYW0gbmdab25lIG5nWm9uZSB0byBtYW5hZ2UgZXh0ZXJuYWwgamF2YXNjcmlwdHNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEhvc3QoKSBAT3B0aW9uYWwoKSBmb3JtTGF5b3V0OiBTYWNGb3JtTGF5b3V0RGlyZWN0aXZlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIG5nWm9uZTogTmdab25lXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGZvcm1MYXlvdXQsIGluamVjdG9yLCByZW5kZXJlciwgbmdab25lKTtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xuXG4gICAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGlzaWVydCBkYXMgQ29udHJvbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXG59XG4iLCI8ZGl2XG4gICAgaWQ9XCJ7eyBuYW1lIH19XCJcbiAgICBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCJcbiAgICBbY2xhc3Mubm8tZ3V0dGVyc109XCJkaXNhYmxlbGFiZWxcIlxuICAgIFthdHRyLmRhdGEtZTJlLWtleV09XCJuYW1lIHwgdGVzdGluZ2F0dHJpYnV0ZSA6IGUyZWlkZW50aWZpZXJcIj5cbiAgICA8bGFiZWxcbiAgICAgICAgKm5nSWY9XCJkaXNhYmxlbGFiZWwgPT09IGZhbHNlICYmICFpc0FkYXB0aXZlTGFiZWxcIlxuICAgICAgICBpZD1cInt7IG5hbWUgfX1fbGFiZWxcIlxuICAgICAgICBmb3I9XCJ7eyBuYW1lIH19X3VwbG9hZGlucHV0XCJcbiAgICAgICAgY2xhc3M9XCJjb2wtMTIgY29sLWZvcm0tbGFiZWwgZC1mbGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiW2Rpc2FibGVsYWJlbCA9PT0gZmFsc2UgPyAodGhpcy5sYWJlbFNpemVzIHwgdG9MYWJlbFdpZHRoQ3NzKSA6ICdzci1vbmx5JywgY29tcG9uZW50SGVpZ2h0IHwgdG9MYWJlbEhlaWdodF1cIlxuICAgICAgICBbY2xhc3MucmVxdWlyZWRdPVwiaXNyZXF1aXJlZFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInRleHQgZmxleC1ncm93LTBcIlxuICAgICAgICAgICAgW2NsYXNzLmZsZXgtc20tZ3Jvdy0xXT1cInNwbGl0bGFiZWxhbmRoZWxwdGV4dFwiPlxuICAgICAgICAgICAge3sgbGFiZWwgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzYWMtdG9vbHRpcFxuICAgICAgICAgICAgKm5nSWY9XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dFwiXG4gICAgICAgICAgICBbdG9vbHRpcHRleHRdPVwiaGVscHRleHRcIlxuICAgICAgICAgICAgW2lubGluZW1vZGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJIZWxwdGV4dFRvb2x0aXBJY29uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTFcIj48L3NwYW4+IDwvc2FjLXRvb2x0aXBcbiAgICA+PC9sYWJlbD5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY29sLTEyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiW2Rpc2FibGVsYWJlbCA9PT0gZmFsc2UgPyAodGhpcy5sYWJlbFNpemVzIHwgdG9Db250cm9sV2lkdGhDc3MpIDogJyddXCJcbiAgICAgICAgW2NsYXNzLmQtZmxleF09XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dCAmJiBkaXNhYmxlbGFiZWxcIj5cbiAgICAgICAgPGRpdiBbY2xhc3MuZmxleC1ncm93LTFdPVwiaGVscHRleHRtb2RlID09PSAndG9vbHRpcCcgJiYgaGVscHRleHQgJiYgZGlzYWJsZWxhYmVsXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wem9uZSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZVwiXG4gICAgICAgICAgICAgICAgKGRyb3ApPVwiZHJvcEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRyYWdsZWF2ZSk9XCJvbkRyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwidXBsb2FkaGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb250ZW50IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ1cGxvYWRzLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24tc2VsZi1jZW50ZXIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzLmlzLWludmFsaWRdPVwiaXNpbmxpbmVlcnJvcmVuYWJsZWQgJiYgaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRlbnQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInVwbG9hZHMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24tc2VsZi1jZW50ZXIgcHJvZ3Jlc3MtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wem9uZS11cGxvYWRzdGF0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5tdC0xXT1cImkgPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsZSBvZiB1cGxvYWRzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWdyb3VwIHVwbG9hZC1jb21wb25lbnQgdXBsb2FkLWNvbXBvbmVudC1tdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pbnB1dC1ncm91cC1zbV09XCJjb21wb25lbnRIZWlnaHQgPT09IENvbnRyb2xIZWlnaHQuU21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaW5wdXQtZ3JvdXAtbGddPVwiY29tcG9uZW50SGVpZ2h0ID09PSBDb250cm9sSGVpZ2h0LkxhcmdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdXBsb2FkLXByb2dyZXNzIGJvcmRlci1zZWNvbmRhcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucHJvZ3Jlc3MtYmFyLXN1Y2Nlc3NdPVwiZmlsZS5wcm9ncmVzcyA9PT0gMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJmaWxlLnByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS12YWx1ZW1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLXZhbHVlbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiZmlsZS5wcm9ncmVzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByb2dyZXNzLXRleHQgdGV4dC1kYXJrXCI+e3sgZmlsZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGltYWdlLXByZXZpZXctY2xlYXIgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbChmaWxlLnVwbG9hZElkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIkljb25EZWxldGVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAjZmlsZXNcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ7eyBuYW1lIH19X3VwbG9hZGlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1maWxlLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbGVzLnZhbHVlID0gJydcIlxuICAgICAgICAgICAgICAgICAgICAodXBsb2FkeFN0YXRlKT1cIm9uVXBsb2FkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiSGFzUXVldWVJdGVtKClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICAgICAqbmdJZj1cImhlbHB0ZXh0bW9kZSA9PT0gJ3RleHQnICYmIGhlbHB0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LW11dGVkXCI+XG4gICAgICAgICAgICAgICAge3sgaGVscHRleHQgfX1cbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc2lubGluZWVycm9yZW5hYmxlZCAmJiBpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XG4gICAgICAgICAgICAgICAge3sgR2V0RXJyb3JNZXNzYWdlKCkgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiaGVscHRleHRtb2RlID09PSAndG9vbHRpcCcgJiYgaGVscHRleHQgJiYgZGlzYWJsZWxhYmVsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sLXBsYWludGV4dCBhbGlnbi1zZWxmLXRvcCBtbC0yIG1yLTEgdy1hdXRvXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltjb21wb25lbnRIZWlnaHQgfCB0b0NvbnRyb2xIZWlnaHRdXCI+XG4gICAgICAgICAgICA8c2FjLXRvb2x0aXBcbiAgICAgICAgICAgICAgICBbdG9vbHRpcHRleHRdPVwiaGVscHRleHRcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVtb2RlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJIZWxwdGV4dFRvb2x0aXBJY29uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0xXCI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zYWMtdG9vbHRpcD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -6,7 +6,7 @@ import { SacTooltipComponent } from '../tooltip/tooltip';
6
6
  import { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common';
7
7
  import { Component, Host, Optional, forwardRef } from '@angular/core';
8
8
  import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
9
- import { SacDropzoneSingleCommon } from '@simpleangularcontrols/sac-common';
9
+ import { SacDropzoneSingleCommon, SacTestingAttributePipe } from '@simpleangularcontrols/sac-common';
10
10
  import * as i0 from "@angular/core";
11
11
  import * as i1 from "../layout/formlayout.directive";
12
12
  /**
@@ -45,7 +45,7 @@ class SacDropzoneSingleComponent extends SacDropzoneSingleCommon {
45
45
  multi: true,
46
46
  useExisting: forwardRef(() => SacDropzoneSingleComponent),
47
47
  },
48
- ], usesInheritance: true, ngImport: i0, template: "<div\n id=\"{{ name }}\"\n class=\"row form-group\"\n [class.no-gutters]=\"disablelabel\">\n <label\n *ngIf=\"disablelabel === false && !isAdaptiveLabel\"\n id=\"{{ name }}_label\"\n for=\"{{ name }}_uploadinput\"\n class=\"col-12 col-form-label d-flex\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toLabelWidthCss) : 'sr-only', componentHeight | toLabelHeight]\"\n [class.required]=\"isrequired\">\n <div\n class=\"text flex-grow-0\"\n [class.flex-sm-grow-1]=\"splitlabelandhelptext\">\n {{ label }}\n </div>\n <sac-tooltip\n *ngIf=\"helptextmode === 'tooltip' && helptext\"\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\"\n ><span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\"></span> </sac-tooltip\n ></label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\"\n [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div [class.flex-grow-1]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div\n class=\"dropzone d-flex justify-content-center position-relative\"\n (drop)=\"dropHandler($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n [style.min-height]=\"uploadheight\"\n [class.active]=\"active\"\n [class.is-invalid]=\"invalid && (dirty || touched)\">\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length === 0\">\n <div class=\"align-self-center text-center\">\n <div [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length > 0\">\n <div class=\"align-self-center progress-container\">\n <div\n class=\"dropzone-uploadstates\"\n *ngFor=\"let file of uploads\">\n <div\n class=\"input-group upload-component upload-component-multiple\"\n [class.input-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.input-group-lg]=\"componentHeight === ControlHeight.Large\">\n <div class=\"form-control upload-progress border-secondary\">\n <div class=\"progress\">\n <div\n class=\"progress-bar\"\n [class.progress-bar-success]=\"file.progress === 100\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"file.progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"file.progress\">\n <span class=\"progress-text text-dark\">{{ file.name }}</span>\n </div>\n </div>\n </div>\n <div class=\"input-group-append\">\n <!-- image-preview-clear button -->\n <a\n class=\"btn\"\n (click)=\"cancel(file.uploadId)\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [class]=\"IconDelete\"></span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <input\n #files\n id=\"{{ name }}_uploadinput\"\n type=\"file\"\n class=\"custom-file-input\"\n (click)=\"files.value = ''\"\n (uploadxState)=\"onUpload($event)\"\n [disabled]=\"HasQueueItem()\" />\n </div>\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n <div\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n </div>\n\n <div\n *ngIf=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n class=\"form-control-plaintext align-self-top ml-2 mr-1 w-auto\"\n [ngClass]=\"[componentHeight | toControlHeight]\">\n <sac-tooltip\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </div>\n </div>\n</div>\n", styles: [".dropzone{min-height:9.75rem;border:.125rem dashed lightgray;border-radius:.5rem;background:transparent}.dropzone.is-invalid{border-color:var(--red)}.dropzone .content{position:absolute;inset:0}.dropzone .content .is-invalid{color:var(--red)}.dropzone .content .progress-container{min-width:50%;z-index:100}.dropzone .content .dropzone-uploadstates .upload-progress{padding:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress{height:100%;border-top-right-radius:0;border-bottom-right-radius:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress .progress-text{left:0;right:0;position:absolute}.dropzone .custom-file-input{min-height:100%;height:unset}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SacToLabelWidthCssPipe, name: "toLabelWidthCss" }, { kind: "pipe", type: SacToControlWidthCssPipe, name: "toControlWidthCss" }, { kind: "pipe", type: SacToLabelHeightPipe, name: "toLabelHeight" }, { kind: "component", type: SacTooltipComponent, selector: "sac-tooltip" }, { kind: "pipe", type: SacToControlHeightPipe, name: "toControlHeight" }] }); }
48
+ ], usesInheritance: true, ngImport: i0, template: "<div\n id=\"{{ name }}\"\n class=\"row form-group\"\n [class.no-gutters]=\"disablelabel\"\n [attr.data-e2e-key]=\"name | testingattribute : e2eidentifier\">\n <label\n *ngIf=\"disablelabel === false && !isAdaptiveLabel\"\n id=\"{{ name }}_label\"\n for=\"{{ name }}_uploadinput\"\n class=\"col-12 col-form-label d-flex\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toLabelWidthCss) : 'sr-only', componentHeight | toLabelHeight]\"\n [class.required]=\"isrequired\">\n <div\n class=\"text flex-grow-0\"\n [class.flex-sm-grow-1]=\"splitlabelandhelptext\">\n {{ label }}\n </div>\n <sac-tooltip\n *ngIf=\"helptextmode === 'tooltip' && helptext\"\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\"\n ><span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\"></span> </sac-tooltip\n ></label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\"\n [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div [class.flex-grow-1]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div\n class=\"dropzone d-flex justify-content-center position-relative\"\n (drop)=\"dropHandler($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n [style.min-height]=\"uploadheight\"\n [class.active]=\"active\"\n [class.is-invalid]=\"invalid && (dirty || touched)\">\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length === 0\">\n <div class=\"align-self-center text-center\">\n <div [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length > 0\">\n <div class=\"align-self-center progress-container\">\n <div\n class=\"dropzone-uploadstates\"\n *ngFor=\"let file of uploads\">\n <div\n class=\"input-group upload-component upload-component-multiple\"\n [class.input-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.input-group-lg]=\"componentHeight === ControlHeight.Large\">\n <div class=\"form-control upload-progress border-secondary\">\n <div class=\"progress\">\n <div\n class=\"progress-bar\"\n [class.progress-bar-success]=\"file.progress === 100\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"file.progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"file.progress\">\n <span class=\"progress-text text-dark\">{{ file.name }}</span>\n </div>\n </div>\n </div>\n <div class=\"input-group-append\">\n <!-- image-preview-clear button -->\n <a\n class=\"btn\"\n (click)=\"cancel(file.uploadId)\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [class]=\"IconDelete\"></span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <input\n #files\n id=\"{{ name }}_uploadinput\"\n type=\"file\"\n class=\"custom-file-input\"\n (click)=\"files.value = ''\"\n (uploadxState)=\"onUpload($event)\"\n [disabled]=\"HasQueueItem()\" />\n </div>\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n <div\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n </div>\n\n <div\n *ngIf=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n class=\"form-control-plaintext align-self-top ml-2 mr-1 w-auto\"\n [ngClass]=\"[componentHeight | toControlHeight]\">\n <sac-tooltip\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </div>\n </div>\n</div>\n", styles: [".dropzone{min-height:9.75rem;border:.125rem dashed lightgray;border-radius:.5rem;background:transparent}.dropzone.is-invalid{border-color:var(--red)}.dropzone .content{position:absolute;inset:0}.dropzone .content .is-invalid{color:var(--red)}.dropzone .content .progress-container{min-width:50%;z-index:100}.dropzone .content .dropzone-uploadstates .upload-progress{padding:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress{height:100%;border-top-right-radius:0;border-bottom-right-radius:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress .progress-text{left:0;right:0;position:absolute}.dropzone .custom-file-input{min-height:100%;height:unset}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: SacToLabelWidthCssPipe, name: "toLabelWidthCss" }, { kind: "pipe", type: SacToControlWidthCssPipe, name: "toControlWidthCss" }, { kind: "pipe", type: SacToLabelHeightPipe, name: "toLabelHeight" }, { kind: "component", type: SacTooltipComponent, selector: "sac-tooltip" }, { kind: "pipe", type: SacToControlHeightPipe, name: "toControlHeight" }, { kind: "pipe", type: SacTestingAttributePipe, name: "testingattribute" }] }); }
49
49
  }
50
50
  export { SacDropzoneSingleComponent };
51
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacDropzoneSingleComponent, decorators: [{
@@ -71,10 +71,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
71
71
  SacToLabelHeightPipe,
72
72
  SacTooltipComponent,
73
73
  SacToControlHeightPipe,
74
- ], template: "<div\n id=\"{{ name }}\"\n class=\"row form-group\"\n [class.no-gutters]=\"disablelabel\">\n <label\n *ngIf=\"disablelabel === false && !isAdaptiveLabel\"\n id=\"{{ name }}_label\"\n for=\"{{ name }}_uploadinput\"\n class=\"col-12 col-form-label d-flex\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toLabelWidthCss) : 'sr-only', componentHeight | toLabelHeight]\"\n [class.required]=\"isrequired\">\n <div\n class=\"text flex-grow-0\"\n [class.flex-sm-grow-1]=\"splitlabelandhelptext\">\n {{ label }}\n </div>\n <sac-tooltip\n *ngIf=\"helptextmode === 'tooltip' && helptext\"\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\"\n ><span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\"></span> </sac-tooltip\n ></label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\"\n [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div [class.flex-grow-1]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div\n class=\"dropzone d-flex justify-content-center position-relative\"\n (drop)=\"dropHandler($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n [style.min-height]=\"uploadheight\"\n [class.active]=\"active\"\n [class.is-invalid]=\"invalid && (dirty || touched)\">\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length === 0\">\n <div class=\"align-self-center text-center\">\n <div [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length > 0\">\n <div class=\"align-self-center progress-container\">\n <div\n class=\"dropzone-uploadstates\"\n *ngFor=\"let file of uploads\">\n <div\n class=\"input-group upload-component upload-component-multiple\"\n [class.input-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.input-group-lg]=\"componentHeight === ControlHeight.Large\">\n <div class=\"form-control upload-progress border-secondary\">\n <div class=\"progress\">\n <div\n class=\"progress-bar\"\n [class.progress-bar-success]=\"file.progress === 100\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"file.progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"file.progress\">\n <span class=\"progress-text text-dark\">{{ file.name }}</span>\n </div>\n </div>\n </div>\n <div class=\"input-group-append\">\n <!-- image-preview-clear button -->\n <a\n class=\"btn\"\n (click)=\"cancel(file.uploadId)\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [class]=\"IconDelete\"></span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <input\n #files\n id=\"{{ name }}_uploadinput\"\n type=\"file\"\n class=\"custom-file-input\"\n (click)=\"files.value = ''\"\n (uploadxState)=\"onUpload($event)\"\n [disabled]=\"HasQueueItem()\" />\n </div>\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n <div\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n </div>\n\n <div\n *ngIf=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n class=\"form-control-plaintext align-self-top ml-2 mr-1 w-auto\"\n [ngClass]=\"[componentHeight | toControlHeight]\">\n <sac-tooltip\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </div>\n </div>\n</div>\n", styles: [".dropzone{min-height:9.75rem;border:.125rem dashed lightgray;border-radius:.5rem;background:transparent}.dropzone.is-invalid{border-color:var(--red)}.dropzone .content{position:absolute;inset:0}.dropzone .content .is-invalid{color:var(--red)}.dropzone .content .progress-container{min-width:50%;z-index:100}.dropzone .content .dropzone-uploadstates .upload-progress{padding:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress{height:100%;border-top-right-radius:0;border-bottom-right-radius:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress .progress-text{left:0;right:0;position:absolute}.dropzone .custom-file-input{min-height:100%;height:unset}\n"] }]
74
+ SacTestingAttributePipe,
75
+ ], template: "<div\n id=\"{{ name }}\"\n class=\"row form-group\"\n [class.no-gutters]=\"disablelabel\"\n [attr.data-e2e-key]=\"name | testingattribute : e2eidentifier\">\n <label\n *ngIf=\"disablelabel === false && !isAdaptiveLabel\"\n id=\"{{ name }}_label\"\n for=\"{{ name }}_uploadinput\"\n class=\"col-12 col-form-label d-flex\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toLabelWidthCss) : 'sr-only', componentHeight | toLabelHeight]\"\n [class.required]=\"isrequired\">\n <div\n class=\"text flex-grow-0\"\n [class.flex-sm-grow-1]=\"splitlabelandhelptext\">\n {{ label }}\n </div>\n <sac-tooltip\n *ngIf=\"helptextmode === 'tooltip' && helptext\"\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\"\n ><span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\"></span> </sac-tooltip\n ></label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\"\n [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div [class.flex-grow-1]=\"helptextmode === 'tooltip' && helptext && disablelabel\">\n <div\n class=\"dropzone d-flex justify-content-center position-relative\"\n (drop)=\"dropHandler($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n [style.min-height]=\"uploadheight\"\n [class.active]=\"active\"\n [class.is-invalid]=\"invalid && (dirty || touched)\">\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length === 0\">\n <div class=\"align-self-center text-center\">\n <div [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n <div\n class=\"content d-flex justify-content-center\"\n *ngIf=\"uploads.length > 0\">\n <div class=\"align-self-center progress-container\">\n <div\n class=\"dropzone-uploadstates\"\n *ngFor=\"let file of uploads\">\n <div\n class=\"input-group upload-component upload-component-multiple\"\n [class.input-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.input-group-lg]=\"componentHeight === ControlHeight.Large\">\n <div class=\"form-control upload-progress border-secondary\">\n <div class=\"progress\">\n <div\n class=\"progress-bar\"\n [class.progress-bar-success]=\"file.progress === 100\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"file.progress\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"file.progress\">\n <span class=\"progress-text text-dark\">{{ file.name }}</span>\n </div>\n </div>\n </div>\n <div class=\"input-group-append\">\n <!-- image-preview-clear button -->\n <a\n class=\"btn\"\n (click)=\"cancel(file.uploadId)\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [class]=\"IconDelete\"></span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <input\n #files\n id=\"{{ name }}_uploadinput\"\n type=\"file\"\n class=\"custom-file-input\"\n (click)=\"files.value = ''\"\n (uploadxState)=\"onUpload($event)\"\n [disabled]=\"HasQueueItem()\" />\n </div>\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n <div\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n </div>\n\n <div\n *ngIf=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n class=\"form-control-plaintext align-self-top ml-2 mr-1 w-auto\"\n [ngClass]=\"[componentHeight | toControlHeight]\">\n <sac-tooltip\n [tooltiptext]=\"helptext\"\n [inlinemode]=\"true\">\n <span\n [ngClass]=\"HelptextTooltipIcon\"\n class=\"ml-1\">\n </span>\n </sac-tooltip>\n </div>\n </div>\n</div>\n", styles: [".dropzone{min-height:9.75rem;border:.125rem dashed lightgray;border-radius:.5rem;background:transparent}.dropzone.is-invalid{border-color:var(--red)}.dropzone .content{position:absolute;inset:0}.dropzone .content .is-invalid{color:var(--red)}.dropzone .content .progress-container{min-width:50%;z-index:100}.dropzone .content .dropzone-uploadstates .upload-progress{padding:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress{height:100%;border-top-right-radius:0;border-bottom-right-radius:0}.dropzone .content .dropzone-uploadstates .upload-progress .progress .progress-text{left:0;right:0;position:absolute}.dropzone .custom-file-input{min-height:100%;height:unset}\n"] }]
75
76
  }], ctorParameters: function () { return [{ type: i1.SacFormLayoutDirective, decorators: [{
76
77
  type: Host
77
78
  }, {
78
79
  type: Optional
79
80
  }] }, { type: i0.Injector }, { type: i0.Renderer2 }, { type: i0.NgZone }]; } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcHpvbmVzaW5nbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zYWMtYm9vdHN0cmFwNC9zcmMvY29udHJvbHMvdXBsb2FkL2Ryb3B6b25lc2luZ2xlLnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2FjLWJvb3RzdHJhcDQvc3JjL2NvbnRyb2xzL3VwbG9hZC9kcm9wem9uZXNpbmdsZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBNEIsUUFBUSxFQUFhLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQUU1RTs7O0dBR0c7QUFDSCxNQTZCYSwwQkFBMkIsU0FBUSx1QkFBdUI7SUFDbkUsdUJBQXVCO0lBRXZCOzs7Ozs7T0FNRztJQUNILFlBQ3dCLFVBQWtDLEVBQ3RELFFBQWtCLEVBQ2xCLFFBQW1CLEVBQ25CLE1BQWM7UUFFZCxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELDBCQUEwQjtJQUUxQix5QkFBeUI7SUFFekI7O09BRUc7SUFDSSxRQUFRO1FBQ1gsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JCLENBQUM7K0dBNUJRLDBCQUEwQjttR0FBMUIsMEJBQTBCLGlFQXpCeEI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsMEJBQTBCO2FBQzFDO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMEJBQTBCLENBQUM7YUFDNUQ7U0FDSixpREM5QkwsbXhMQXlIQSwydUJEeEZRLElBQUksNkZBQ0osT0FBTyxvRkFDUCxLQUFLLDhHQUNMLFNBQVMseUNBQ1Qsc0JBQXNCLG1EQUN0Qix3QkFBd0IscURBQ3hCLG9CQUFvQixzREFDcEIsbUJBQW1CLG1EQUNuQixzQkFBc0I7O1NBR2pCLDBCQUEwQjs0RkFBMUIsMEJBQTBCO2tCQTdCdEMsU0FBUzsrQkFDSSxvQkFBb0IsYUFHbkI7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyw0QkFBNEI7eUJBQzFDO3dCQUNEOzRCQUNJLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwyQkFBMkIsQ0FBQzt5QkFDNUQ7cUJBQ0osY0FDVyxJQUFJLFdBQ1A7d0JBQ0wsSUFBSTt3QkFDSixPQUFPO3dCQUNQLEtBQUs7d0JBQ0wsU0FBUzt3QkFDVCxzQkFBc0I7d0JBQ3RCLHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLHNCQUFzQjtxQkFDekI7OzBCQWFJLElBQUk7OzBCQUFJLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYWNGb3JtTGF5b3V0RGlyZWN0aXZlIH0gZnJvbSAnLi4vbGF5b3V0L2Zvcm1sYXlvdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNhY1RvQ29udHJvbEhlaWdodFBpcGUgfSBmcm9tICcuLi9sYXlvdXQvdG9jb250cm9saGVpZ2h0LnBpcGUnO1xuaW1wb3J0IHsgU2FjVG9Db250cm9sV2lkdGhDc3NQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvY29udHJvbHdpZHRoY3NzLnBpcGUnO1xuaW1wb3J0IHsgU2FjVG9MYWJlbEhlaWdodFBpcGUgfSBmcm9tICcuLi9sYXlvdXQvdG9sYWJlbGhlaWdodC5waXBlJztcbmltcG9ydCB7IFNhY1RvTGFiZWxXaWR0aENzc1BpcGUgfSBmcm9tICcuLi9sYXlvdXQvdG9sYWJlbHdpZHRoY3NzLnBpcGUnO1xuaW1wb3J0IHsgU2FjVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4uL3Rvb2x0aXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdCwgSW5qZWN0b3IsIE5nWm9uZSwgT25Jbml0LCBPcHRpb25hbCwgUmVuZGVyZXIyLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNhY0Ryb3B6b25lU2luZ2xlQ29tbW9uIH0gZnJvbSAnQHNpbXBsZWFuZ3VsYXJjb250cm9scy9zYWMtY29tbW9uJztcblxuLyoqXG4gKiBEcm9wem9uZSBLb21wb25lbnRlIGbDvHIgZGVuIFVwbG9hZCBlaW5lcyBGaWxlc1xuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20va3VraGFyaWV2L25neC11cGxvYWR4L1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NhYy1kcm9wem9uZXNpbmdsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Ryb3B6b25lc2luZ2xlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2Ryb3B6b25lLnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBTYWNEcm9wem9uZVNpbmdsZUNvbXBvbmVudCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2FjRHJvcHpvbmVTaW5nbGVDb21wb25lbnQpLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIFNhY1RvTGFiZWxXaWR0aENzc1BpcGUsXG4gICAgICAgIFNhY1RvQ29udHJvbFdpZHRoQ3NzUGlwZSxcbiAgICAgICAgU2FjVG9MYWJlbEhlaWdodFBpcGUsXG4gICAgICAgIFNhY1Rvb2x0aXBDb21wb25lbnQsXG4gICAgICAgIFNhY1RvQ29udHJvbEhlaWdodFBpcGUsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2FjRHJvcHpvbmVTaW5nbGVDb21wb25lbnQgZXh0ZW5kcyBTYWNEcm9wem9uZVNpbmdsZUNvbW1vbiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvcnNcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIGZvcm1MYXlvdXQgU2FjRm9ybUxheW91dCB0byBkZWZpbmUgc2NvcGVkIGxheW91dCBzZXR0aW5nc1xuICAgICAqIEBwYXJhbSBpbmplY3RvciBJbmplY3RvciBmb3IgaW5qZWN0aW5nIHNlcnZpY2VzXG4gICAgICogQHBhcmFtIHJlbmRlcmVyIEFuZ3VsYXIgcmVuZGVyaW5nIGVuZ2luZVxuICAgICAqIEBwYXJhbSBuZ1pvbmUgbmdab25lIHRvIG1hbmFnZSBleHRlcm5hbCBqYXZhc2NyaXB0c1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASG9zdCgpIEBPcHRpb25hbCgpIGZvcm1MYXlvdXQ6IFNhY0Zvcm1MYXlvdXREaXJlY3RpdmUsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgbmdab25lOiBOZ1pvbmVcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZm9ybUxheW91dCwgaW5qZWN0b3IsIHJlbmRlcmVyLCBuZ1pvbmUpO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gQ29uc3RydWN0b3JzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXNpZXJ0IGRhcyBDb250cm9sXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcbn1cbiIsIjxkaXZcbiAgICBpZD1cInt7IG5hbWUgfX1cIlxuICAgIGNsYXNzPVwicm93IGZvcm0tZ3JvdXBcIlxuICAgIFtjbGFzcy5uby1ndXR0ZXJzXT1cImRpc2FibGVsYWJlbFwiPlxuICAgIDxsYWJlbFxuICAgICAgICAqbmdJZj1cImRpc2FibGVsYWJlbCA9PT0gZmFsc2UgJiYgIWlzQWRhcHRpdmVMYWJlbFwiXG4gICAgICAgIGlkPVwie3sgbmFtZSB9fV9sYWJlbFwiXG4gICAgICAgIGZvcj1cInt7IG5hbWUgfX1fdXBsb2FkaW5wdXRcIlxuICAgICAgICBjbGFzcz1cImNvbC0xMiBjb2wtZm9ybS1sYWJlbCBkLWZsZXhcIlxuICAgICAgICBbbmdDbGFzc109XCJbZGlzYWJsZWxhYmVsID09PSBmYWxzZSA/ICh0aGlzLmxhYmVsU2l6ZXMgfCB0b0xhYmVsV2lkdGhDc3MpIDogJ3NyLW9ubHknLCBjb21wb25lbnRIZWlnaHQgfCB0b0xhYmVsSGVpZ2h0XVwiXG4gICAgICAgIFtjbGFzcy5yZXF1aXJlZF09XCJpc3JlcXVpcmVkXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dCBmbGV4LWdyb3ctMFwiXG4gICAgICAgICAgICBbY2xhc3MuZmxleC1zbS1ncm93LTFdPVwic3BsaXRsYWJlbGFuZGhlbHB0ZXh0XCI+XG4gICAgICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNhYy10b29sdGlwXG4gICAgICAgICAgICAqbmdJZj1cImhlbHB0ZXh0bW9kZSA9PT0gJ3Rvb2x0aXAnICYmIGhlbHB0ZXh0XCJcbiAgICAgICAgICAgIFt0b29sdGlwdGV4dF09XCJoZWxwdGV4dFwiXG4gICAgICAgICAgICBbaW5saW5lbW9kZV09XCJ0cnVlXCJcbiAgICAgICAgICAgID48c3BhblxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIkhlbHB0ZXh0VG9vbHRpcEljb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiPjwvc3Bhbj4gPC9zYWMtdG9vbHRpcFxuICAgID48L2xhYmVsPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb2wtMTJcIlxuICAgICAgICBbbmdDbGFzc109XCJbZGlzYWJsZWxhYmVsID09PSBmYWxzZSA/ICh0aGlzLmxhYmVsU2l6ZXMgfCB0b0NvbnRyb2xXaWR0aENzcykgOiAnJ11cIlxuICAgICAgICBbY2xhc3MuZC1mbGV4XT1cImhlbHB0ZXh0bW9kZSA9PT0gJ3Rvb2x0aXAnICYmIGhlbHB0ZXh0ICYmIGRpc2FibGVsYWJlbFwiPlxuICAgICAgICA8ZGl2IFtjbGFzcy5mbGV4LWdyb3ctMV09XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dCAmJiBkaXNhYmxlbGFiZWxcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3B6b25lIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlXCJcbiAgICAgICAgICAgICAgICAoZHJvcCk9XCJkcm9wSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cInVwbG9hZGhlaWdodFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRlbnQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInVwbG9hZHMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1zZWxmLWNlbnRlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuaXMtaW52YWxpZF09XCJpc2lubGluZWVycm9yZW5hYmxlZCAmJiBpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udGVudCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidXBsb2Fkcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1zZWxmLWNlbnRlciBwcm9ncmVzcy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3B6b25lLXVwbG9hZHN0YXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpbGUgb2YgdXBsb2Fkc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1ncm91cCB1cGxvYWQtY29tcG9uZW50IHVwbG9hZC1jb21wb25lbnQtbXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaW5wdXQtZ3JvdXAtc21dPVwiY29tcG9uZW50SGVpZ2h0ID09PSBDb250cm9sSGVpZ2h0LlNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlucHV0LWdyb3VwLWxnXT1cImNvbXBvbmVudEhlaWdodCA9PT0gQ29udHJvbEhlaWdodC5MYXJnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sIHVwbG9hZC1wcm9ncmVzcyBib3JkZXItc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnByb2dyZXNzLWJhci1zdWNjZXNzXT1cImZpbGUucHJvZ3Jlc3MgPT09IDEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiZmlsZS5wcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtdmFsdWVtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS12YWx1ZW1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cImZpbGUucHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9ncmVzcy10ZXh0IHRleHQtZGFya1wiPnt7IGZpbGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBpbWFnZS1wcmV2aWV3LWNsZWFyIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWwoZmlsZS51cGxvYWRJZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tc2Vjb25kYXJ5XT1cIiEoaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZCkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLWRhbmdlcl09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJJY29uRGVsZXRlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI2ZpbGVzXG4gICAgICAgICAgICAgICAgICAgIGlkPVwie3sgbmFtZSB9fV91cGxvYWRpbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWxlcy52YWx1ZSA9ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgKHVwbG9hZHhTdGF0ZSk9XCJvblVwbG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIkhhc1F1ZXVlSXRlbSgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNtYWxsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJoZWxwdGV4dG1vZGUgPT09ICd0ZXh0JyAmJiBoZWxwdGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1tdXRlZFwiPlxuICAgICAgICAgICAgICAgIHt7IGhlbHB0ZXh0IH19XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNpbmxpbmVlcnJvcmVuYWJsZWQgJiYgaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxuICAgICAgICAgICAgICAgIHt7IEdldEVycm9yTWVzc2FnZSgpIHwgYXN5bmMgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImhlbHB0ZXh0bW9kZSA9PT0gJ3Rvb2x0aXAnICYmIGhlbHB0ZXh0ICYmIGRpc2FibGVsYWJlbFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbC1wbGFpbnRleHQgYWxpZ24tc2VsZi10b3AgbWwtMiBtci0xIHctYXV0b1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJbY29tcG9uZW50SGVpZ2h0IHwgdG9Db250cm9sSGVpZ2h0XVwiPlxuICAgICAgICAgICAgPHNhYy10b29sdGlwXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXB0ZXh0XT1cImhlbHB0ZXh0XCJcbiAgICAgICAgICAgICAgICBbaW5saW5lbW9kZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiSGVscHRleHRUb29sdGlwSWNvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc2FjLXRvb2x0aXA+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcHpvbmVzaW5nbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zYWMtYm9vdHN0cmFwNC9zcmMvY29udHJvbHMvdXBsb2FkL2Ryb3B6b25lc2luZ2xlLnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2FjLWJvb3RzdHJhcDQvc3JjL2NvbnRyb2xzL3VwbG9hZC9kcm9wem9uZXNpbmdsZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBNEIsUUFBUSxFQUFhLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQUVyRzs7O0dBR0c7QUFDSCxNQThCYSwwQkFBMkIsU0FBUSx1QkFBdUI7SUFDbkUsdUJBQXVCO0lBRXZCOzs7Ozs7T0FNRztJQUNILFlBQ3dCLFVBQWtDLEVBQ3RELFFBQWtCLEVBQ2xCLFFBQW1CLEVBQ25CLE1BQWM7UUFFZCxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELDBCQUEwQjtJQUUxQix5QkFBeUI7SUFFekI7O09BRUc7SUFDSSxRQUFRO1FBQ1gsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3JCLENBQUM7K0dBNUJRLDBCQUEwQjttR0FBMUIsMEJBQTBCLGlFQTFCeEI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsMEJBQTBCO2FBQzFDO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMEJBQTBCLENBQUM7YUFDNUQ7U0FDSixpREM5QkwsdzFMQTBIQSwydUJEekZRLElBQUksNkZBQ0osT0FBTyxvRkFDUCxLQUFLLDhHQUNMLFNBQVMseUNBQ1Qsc0JBQXNCLG1EQUN0Qix3QkFBd0IscURBQ3hCLG9CQUFvQixzREFDcEIsbUJBQW1CLG1EQUNuQixzQkFBc0IsbURBQ3RCLHVCQUF1Qjs7U0FHbEIsMEJBQTBCOzRGQUExQiwwQkFBMEI7a0JBOUJ0QyxTQUFTOytCQUNJLG9CQUFvQixhQUduQjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLDRCQUE0Qjt5QkFDMUM7d0JBQ0Q7NEJBQ0ksT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDJCQUEyQixDQUFDO3lCQUM1RDtxQkFDSixjQUNXLElBQUksV0FDUDt3QkFDTCxJQUFJO3dCQUNKLE9BQU87d0JBQ1AsS0FBSzt3QkFDTCxTQUFTO3dCQUNULHNCQUFzQjt3QkFDdEIsd0JBQXdCO3dCQUN4QixvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIsc0JBQXNCO3dCQUN0Qix1QkFBdUI7cUJBQzFCOzswQkFhSSxJQUFJOzswQkFBSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FjRm9ybUxheW91dERpcmVjdGl2ZSB9IGZyb20gJy4uL2xheW91dC9mb3JtbGF5b3V0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTYWNUb0NvbnRyb2xIZWlnaHRQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvY29udHJvbGhlaWdodC5waXBlJztcbmltcG9ydCB7IFNhY1RvQ29udHJvbFdpZHRoQ3NzUGlwZSB9IGZyb20gJy4uL2xheW91dC90b2NvbnRyb2x3aWR0aGNzcy5waXBlJztcbmltcG9ydCB7IFNhY1RvTGFiZWxIZWlnaHRQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvbGFiZWxoZWlnaHQucGlwZSc7XG5pbXBvcnQgeyBTYWNUb0xhYmVsV2lkdGhDc3NQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvbGFiZWx3aWR0aGNzcy5waXBlJztcbmltcG9ydCB7IFNhY1Rvb2x0aXBDb21wb25lbnQgfSBmcm9tICcuLi90b29sdGlwL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEhvc3QsIEluamVjdG9yLCBOZ1pvbmUsIE9uSW5pdCwgT3B0aW9uYWwsIFJlbmRlcmVyMiwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTYWNEcm9wem9uZVNpbmdsZUNvbW1vbiwgU2FjVGVzdGluZ0F0dHJpYnV0ZVBpcGUgfSBmcm9tICdAc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NhYy1jb21tb24nO1xuXG4vKipcbiAqIERyb3B6b25lIEtvbXBvbmVudGUgZsO8ciBkZW4gVXBsb2FkIGVpbmVzIEZpbGVzXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9rdWtoYXJpZXYvbmd4LXVwbG9hZHgvXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2FjLWRyb3B6b25lc2luZ2xlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHJvcHpvbmVzaW5nbGUuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHJvcHpvbmUuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFNhY0Ryb3B6b25lU2luZ2xlQ29tcG9uZW50LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTYWNEcm9wem9uZVNpbmdsZUNvbXBvbmVudCksXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIEFzeW5jUGlwZSxcbiAgICAgICAgU2FjVG9MYWJlbFdpZHRoQ3NzUGlwZSxcbiAgICAgICAgU2FjVG9Db250cm9sV2lkdGhDc3NQaXBlLFxuICAgICAgICBTYWNUb0xhYmVsSGVpZ2h0UGlwZSxcbiAgICAgICAgU2FjVG9vbHRpcENvbXBvbmVudCxcbiAgICAgICAgU2FjVG9Db250cm9sSGVpZ2h0UGlwZSxcbiAgICAgICAgU2FjVGVzdGluZ0F0dHJpYnV0ZVBpcGUsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2FjRHJvcHpvbmVTaW5nbGVDb21wb25lbnQgZXh0ZW5kcyBTYWNEcm9wem9uZVNpbmdsZUNvbW1vbiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvcnNcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIGZvcm1MYXlvdXQgU2FjRm9ybUxheW91dCB0byBkZWZpbmUgc2NvcGVkIGxheW91dCBzZXR0aW5nc1xuICAgICAqIEBwYXJhbSBpbmplY3RvciBJbmplY3RvciBmb3IgaW5qZWN0aW5nIHNlcnZpY2VzXG4gICAgICogQHBhcmFtIHJlbmRlcmVyIEFuZ3VsYXIgcmVuZGVyaW5nIGVuZ2luZVxuICAgICAqIEBwYXJhbSBuZ1pvbmUgbmdab25lIHRvIG1hbmFnZSBleHRlcm5hbCBqYXZhc2NyaXB0c1xuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASG9zdCgpIEBPcHRpb25hbCgpIGZvcm1MYXlvdXQ6IFNhY0Zvcm1MYXlvdXREaXJlY3RpdmUsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgbmdab25lOiBOZ1pvbmVcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZm9ybUxheW91dCwgaW5qZWN0b3IsIHJlbmRlcmVyLCBuZ1pvbmUpO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gQ29uc3RydWN0b3JzXG5cbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXNpZXJ0IGRhcyBDb250cm9sXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcbn1cbiIsIjxkaXZcbiAgICBpZD1cInt7IG5hbWUgfX1cIlxuICAgIGNsYXNzPVwicm93IGZvcm0tZ3JvdXBcIlxuICAgIFtjbGFzcy5uby1ndXR0ZXJzXT1cImRpc2FibGVsYWJlbFwiXG4gICAgW2F0dHIuZGF0YS1lMmUta2V5XT1cIm5hbWUgfCB0ZXN0aW5nYXR0cmlidXRlIDogZTJlaWRlbnRpZmllclwiPlxuICAgIDxsYWJlbFxuICAgICAgICAqbmdJZj1cImRpc2FibGVsYWJlbCA9PT0gZmFsc2UgJiYgIWlzQWRhcHRpdmVMYWJlbFwiXG4gICAgICAgIGlkPVwie3sgbmFtZSB9fV9sYWJlbFwiXG4gICAgICAgIGZvcj1cInt7IG5hbWUgfX1fdXBsb2FkaW5wdXRcIlxuICAgICAgICBjbGFzcz1cImNvbC0xMiBjb2wtZm9ybS1sYWJlbCBkLWZsZXhcIlxuICAgICAgICBbbmdDbGFzc109XCJbZGlzYWJsZWxhYmVsID09PSBmYWxzZSA/ICh0aGlzLmxhYmVsU2l6ZXMgfCB0b0xhYmVsV2lkdGhDc3MpIDogJ3NyLW9ubHknLCBjb21wb25lbnRIZWlnaHQgfCB0b0xhYmVsSGVpZ2h0XVwiXG4gICAgICAgIFtjbGFzcy5yZXF1aXJlZF09XCJpc3JlcXVpcmVkXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dCBmbGV4LWdyb3ctMFwiXG4gICAgICAgICAgICBbY2xhc3MuZmxleC1zbS1ncm93LTFdPVwic3BsaXRsYWJlbGFuZGhlbHB0ZXh0XCI+XG4gICAgICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNhYy10b29sdGlwXG4gICAgICAgICAgICAqbmdJZj1cImhlbHB0ZXh0bW9kZSA9PT0gJ3Rvb2x0aXAnICYmIGhlbHB0ZXh0XCJcbiAgICAgICAgICAgIFt0b29sdGlwdGV4dF09XCJoZWxwdGV4dFwiXG4gICAgICAgICAgICBbaW5saW5lbW9kZV09XCJ0cnVlXCJcbiAgICAgICAgICAgID48c3BhblxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIkhlbHB0ZXh0VG9vbHRpcEljb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiPjwvc3Bhbj4gPC9zYWMtdG9vbHRpcFxuICAgID48L2xhYmVsPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb2wtMTJcIlxuICAgICAgICBbbmdDbGFzc109XCJbZGlzYWJsZWxhYmVsID09PSBmYWxzZSA/ICh0aGlzLmxhYmVsU2l6ZXMgfCB0b0NvbnRyb2xXaWR0aENzcykgOiAnJ11cIlxuICAgICAgICBbY2xhc3MuZC1mbGV4XT1cImhlbHB0ZXh0bW9kZSA9PT0gJ3Rvb2x0aXAnICYmIGhlbHB0ZXh0ICYmIGRpc2FibGVsYWJlbFwiPlxuICAgICAgICA8ZGl2IFtjbGFzcy5mbGV4LWdyb3ctMV09XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dCAmJiBkaXNhYmxlbGFiZWxcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3B6b25lIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlXCJcbiAgICAgICAgICAgICAgICAoZHJvcCk9XCJkcm9wSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cInVwbG9hZGhlaWdodFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRlbnQgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInVwbG9hZHMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1zZWxmLWNlbnRlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuaXMtaW52YWxpZF09XCJpc2lubGluZWVycm9yZW5hYmxlZCAmJiBpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udGVudCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidXBsb2Fkcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1zZWxmLWNlbnRlciBwcm9ncmVzcy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3B6b25lLXVwbG9hZHN0YXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpbGUgb2YgdXBsb2Fkc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1ncm91cCB1cGxvYWQtY29tcG9uZW50IHVwbG9hZC1jb21wb25lbnQtbXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaW5wdXQtZ3JvdXAtc21dPVwiY29tcG9uZW50SGVpZ2h0ID09PSBDb250cm9sSGVpZ2h0LlNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlucHV0LWdyb3VwLWxnXT1cImNvbXBvbmVudEhlaWdodCA9PT0gQ29udHJvbEhlaWdodC5MYXJnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sIHVwbG9hZC1wcm9ncmVzcyBib3JkZXItc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnByb2dyZXNzLWJhci1zdWNjZXNzXT1cImZpbGUucHJvZ3Jlc3MgPT09IDEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiZmlsZS5wcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtdmFsdWVtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS12YWx1ZW1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cImZpbGUucHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9ncmVzcy10ZXh0IHRleHQtZGFya1wiPnt7IGZpbGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBpbWFnZS1wcmV2aWV3LWNsZWFyIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWwoZmlsZS51cGxvYWRJZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tc2Vjb25kYXJ5XT1cIiEoaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZCkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLWRhbmdlcl09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJJY29uRGVsZXRlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI2ZpbGVzXG4gICAgICAgICAgICAgICAgICAgIGlkPVwie3sgbmFtZSB9fV91cGxvYWRpbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWxlcy52YWx1ZSA9ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgKHVwbG9hZHhTdGF0ZSk9XCJvblVwbG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIkhhc1F1ZXVlSXRlbSgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNtYWxsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJoZWxwdGV4dG1vZGUgPT09ICd0ZXh0JyAmJiBoZWxwdGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1tdXRlZFwiPlxuICAgICAgICAgICAgICAgIHt7IGhlbHB0ZXh0IH19XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNpbmxpbmVlcnJvcmVuYWJsZWQgJiYgaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPlxuICAgICAgICAgICAgICAgIHt7IEdldEVycm9yTWVzc2FnZSgpIHwgYXN5bmMgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImhlbHB0ZXh0bW9kZSA9PT0gJ3Rvb2x0aXAnICYmIGhlbHB0ZXh0ICYmIGRpc2FibGVsYWJlbFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbC1wbGFpbnRleHQgYWxpZ24tc2VsZi10b3AgbWwtMiBtci0xIHctYXV0b1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJbY29tcG9uZW50SGVpZ2h0IHwgdG9Db250cm9sSGVpZ2h0XVwiPlxuICAgICAgICAgICAgPHNhYy10b29sdGlwXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXB0ZXh0XT1cImhlbHB0ZXh0XCJcbiAgICAgICAgICAgICAgICBbaW5saW5lbW9kZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiSGVscHRleHRUb29sdGlwSWNvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc2FjLXRvb2x0aXA+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=