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

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 (208) hide show
  1. package/README.md +17 -17
  2. package/components/browser/browser.d.ts +6 -6
  3. package/components/browser/browser.d.ts.map +1 -1
  4. package/controls/buttons/index.d.ts +2 -0
  5. package/controls/buttons/index.d.ts.map +1 -0
  6. package/controls/checkbox/checkbox.d.ts +5 -5
  7. package/controls/checkbox/checkbox.d.ts.map +1 -1
  8. package/controls/checkbox/checkbox.module.d.ts.map +1 -1
  9. package/controls/checkbox/radiobutton.d.ts +7 -3
  10. package/controls/checkbox/radiobutton.d.ts.map +1 -1
  11. package/controls/checkbox/radiobuttons.d.ts +5 -5
  12. package/controls/checkbox/radiobuttons.d.ts.map +1 -1
  13. package/controls/confirm/confirm.service.d.ts +10 -11
  14. package/controls/confirm/confirm.service.d.ts.map +1 -1
  15. package/controls/contextmenu/contextmenu.d.ts +6 -6
  16. package/controls/contextmenu/contextmenu.d.ts.map +1 -1
  17. package/controls/contextmenu/contextmenu.module.d.ts.map +1 -1
  18. package/controls/contextmenu/contextmenuanchor.d.ts +2 -2
  19. package/controls/contextmenu/contextmenuanchor.d.ts.map +1 -1
  20. package/controls/contextmenu/contextmenucontainer.d.ts +2 -2
  21. package/controls/contextmenu/contextmenucontainer.d.ts.map +1 -1
  22. package/controls/contextmenu/contextmenuitembutton.d.ts +3 -4
  23. package/controls/contextmenu/contextmenuitembutton.d.ts.map +1 -1
  24. package/controls/contextmenu/contextmenuitemsplitter.d.ts.map +1 -1
  25. package/controls/datetime/date.d.ts +9 -8
  26. package/controls/datetime/date.d.ts.map +1 -1
  27. package/controls/datetime/datetime.d.ts +9 -8
  28. package/controls/datetime/datetime.d.ts.map +1 -1
  29. package/controls/datetime/datetime.module.d.ts.map +1 -1
  30. package/controls/datetime/time.d.ts +9 -8
  31. package/controls/datetime/time.d.ts.map +1 -1
  32. package/controls/dialog/index.d.ts +2 -0
  33. package/controls/dialog/index.d.ts.map +1 -0
  34. package/controls/form/form.d.ts +3 -11
  35. package/controls/form/form.d.ts.map +1 -1
  36. package/controls/form/inheritform.directive.d.ts +16 -39
  37. package/controls/form/inheritform.directive.d.ts.map +1 -1
  38. package/controls/grid/grid.d.ts +2 -2
  39. package/controls/grid/grid.d.ts.map +1 -1
  40. package/controls/grid/grid.module.d.ts.map +1 -1
  41. package/controls/grid/gridbutton.d.ts +1 -10
  42. package/controls/grid/gridbutton.d.ts.map +1 -1
  43. package/controls/input/input.d.ts +5 -5
  44. package/controls/input/input.d.ts.map +1 -1
  45. package/controls/input/input.module.d.ts.map +1 -1
  46. package/controls/input/inputarea.d.ts +5 -5
  47. package/controls/input/inputarea.d.ts.map +1 -1
  48. package/controls/input/inputcurrency.d.ts +5 -5
  49. package/controls/input/inputcurrency.d.ts.map +1 -1
  50. package/controls/input/inputdecimal.d.ts +5 -5
  51. package/controls/input/inputdecimal.d.ts.map +1 -1
  52. package/controls/input/inputemail.d.ts +5 -5
  53. package/controls/input/inputemail.d.ts.map +1 -1
  54. package/controls/input/inputinteger.d.ts +5 -5
  55. package/controls/input/inputinteger.d.ts.map +1 -1
  56. package/controls/input/inputpassword.d.ts +5 -5
  57. package/controls/input/inputpassword.d.ts.map +1 -1
  58. package/controls/input/inputsearch.d.ts +5 -5
  59. package/controls/input/inputsearch.d.ts.map +1 -1
  60. package/controls/layout/formlayout.directive.d.ts +7 -0
  61. package/controls/layout/formlayout.directive.d.ts.map +1 -0
  62. package/controls/layout/layout.module.d.ts +13 -0
  63. package/controls/layout/layout.module.d.ts.map +1 -0
  64. package/controls/layout/tocontrolheight.pipe.d.ts +13 -0
  65. package/controls/layout/tocontrolheight.pipe.d.ts.map +1 -0
  66. package/controls/layout/tocontrolwidthcss.pipe.d.ts +20 -0
  67. package/controls/layout/tocontrolwidthcss.pipe.d.ts.map +1 -0
  68. package/controls/layout/tolabelheight.pipe.d.ts +13 -0
  69. package/controls/layout/tolabelheight.pipe.d.ts.map +1 -0
  70. package/controls/layout/tolabelwidthcss.pipe.d.ts +14 -0
  71. package/controls/layout/tolabelwidthcss.pipe.d.ts.map +1 -0
  72. package/controls/list/dropdown.d.ts +10 -10
  73. package/controls/list/dropdown.d.ts.map +1 -1
  74. package/controls/list/dropdown.module.d.ts.map +1 -1
  75. package/controls/list/listbox.d.ts +8 -8
  76. package/controls/list/listbox.d.ts.map +1 -1
  77. package/controls/multilanguage/multilanguage.module.d.ts.map +1 -1
  78. package/controls/multilanguage/multilanguageinput.d.ts +5 -5
  79. package/controls/multilanguage/multilanguageinput.d.ts.map +1 -1
  80. package/controls/multilanguage/multilanguageinputarea.d.ts +5 -5
  81. package/controls/multilanguage/multilanguageinputarea.d.ts.map +1 -1
  82. package/controls/multilanguage/multilanguagemenu.d.ts +6 -6
  83. package/controls/multilanguage/multilanguagemenu.d.ts.map +1 -1
  84. package/controls/multilanguage/multilanguagemenuanchor.d.ts +2 -2
  85. package/controls/multilanguage/multilanguagemenuanchor.d.ts.map +1 -1
  86. package/controls/multilanguage/multilanguagemenucontainer.d.ts +2 -2
  87. package/controls/multilanguage/multilanguagemenucontainer.d.ts.map +1 -1
  88. package/controls/multilanguage/multilanguagemenuitembutton.d.ts +3 -3
  89. package/controls/multilanguage/multilanguagemenuitembutton.d.ts.map +1 -1
  90. package/controls/static/formcontainer.d.ts +7 -7
  91. package/controls/static/formcontainer.d.ts.map +1 -1
  92. package/controls/static/staticlabel.d.ts +5 -5
  93. package/controls/static/staticlabel.d.ts.map +1 -1
  94. package/controls/static/staticlabel.module.d.ts.map +1 -1
  95. package/controls/tinymce/tinymce.d.ts +6 -6
  96. package/controls/tinymce/tinymce.d.ts.map +1 -1
  97. package/controls/tooltip/tooltip.d.ts +38 -0
  98. package/controls/tooltip/tooltip.d.ts.map +1 -0
  99. package/controls/tooltip/tooltip.module.d.ts +9 -0
  100. package/controls/tooltip/tooltip.module.d.ts.map +1 -0
  101. package/controls/treeview/treeview.d.ts +18 -0
  102. package/controls/treeview/treeview.d.ts.map +1 -0
  103. package/controls/treeview/treeview.module.d.ts +9 -0
  104. package/controls/treeview/treeview.module.d.ts.map +1 -0
  105. package/controls/upload/dropzonemultiple.d.ts +7 -7
  106. package/controls/upload/dropzonemultiple.d.ts.map +1 -1
  107. package/controls/upload/dropzonesingle.d.ts +7 -7
  108. package/controls/upload/dropzonesingle.d.ts.map +1 -1
  109. package/controls/upload/upload.d.ts +7 -7
  110. package/controls/upload/upload.d.ts.map +1 -1
  111. package/controls/upload/upload.module.d.ts.map +1 -1
  112. package/controls/upload/uploadmultiple.d.ts +7 -7
  113. package/controls/upload/uploadmultiple.d.ts.map +1 -1
  114. package/controls/validation/validationsummary.d.ts +4 -4
  115. package/controls/validation/validationsummary.d.ts.map +1 -1
  116. package/esm2022/components/browser/browser.mjs +19 -15
  117. package/esm2022/components/browser/browser.module.mjs +1 -1
  118. package/esm2022/controls/buttons/button.mjs +3 -3
  119. package/esm2022/controls/buttons/button.module.mjs +1 -1
  120. package/esm2022/controls/buttons/index.mjs +2 -0
  121. package/esm2022/controls/checkbox/checkbox.mjs +28 -20
  122. package/esm2022/controls/checkbox/checkbox.module.mjs +15 -5
  123. package/esm2022/controls/checkbox/radiobutton.mjs +18 -9
  124. package/esm2022/controls/checkbox/radiobuttons.mjs +26 -19
  125. package/esm2022/controls/confirm/confirm.mjs +3 -3
  126. package/esm2022/controls/confirm/confirm.module.mjs +1 -1
  127. package/esm2022/controls/confirm/confirm.service.mjs +31 -16
  128. package/esm2022/controls/contextmenu/contextmenu.mjs +14 -28
  129. package/esm2022/controls/contextmenu/contextmenu.module.mjs +12 -8
  130. package/esm2022/controls/contextmenu/contextmenuanchor.mjs +5 -4
  131. package/esm2022/controls/contextmenu/contextmenucontainer.mjs +5 -4
  132. package/esm2022/controls/contextmenu/contextmenuitembutton.mjs +22 -13
  133. package/esm2022/controls/contextmenu/contextmenuitemsplitter.mjs +14 -4
  134. package/esm2022/controls/contextmenu/index.mjs +1 -1
  135. package/esm2022/controls/datetime/date.mjs +42 -22
  136. package/esm2022/controls/datetime/dateselector.mjs +3 -3
  137. package/esm2022/controls/datetime/datetime.mjs +34 -17
  138. package/esm2022/controls/datetime/datetime.module.mjs +27 -10
  139. package/esm2022/controls/datetime/time.mjs +34 -17
  140. package/esm2022/controls/dialog/dialog.mjs +3 -3
  141. package/esm2022/controls/dialog/dialog.module.mjs +1 -1
  142. package/esm2022/controls/dialog/index.mjs +2 -0
  143. package/esm2022/controls/form/form.mjs +6 -17
  144. package/esm2022/controls/form/form.module.mjs +1 -1
  145. package/esm2022/controls/form/inheritform.directive.mjs +46 -63
  146. package/esm2022/controls/grid/grid.mjs +10 -13
  147. package/esm2022/controls/grid/grid.module.mjs +35 -9
  148. package/esm2022/controls/grid/gridbutton.mjs +5 -13
  149. package/esm2022/controls/grid/gridcolumn.mjs +3 -3
  150. package/esm2022/controls/grid/gridcolumnaction.mjs +3 -3
  151. package/esm2022/controls/grid/gridimage.mjs +3 -3
  152. package/esm2022/controls/grid/paging.mjs +3 -3
  153. package/esm2022/controls/input/input.mjs +29 -15
  154. package/esm2022/controls/input/input.module.mjs +36 -6
  155. package/esm2022/controls/input/inputarea.mjs +29 -15
  156. package/esm2022/controls/input/inputcurrency.mjs +29 -15
  157. package/esm2022/controls/input/inputdecimal.mjs +29 -15
  158. package/esm2022/controls/input/inputemail.mjs +29 -15
  159. package/esm2022/controls/input/inputinteger.mjs +29 -15
  160. package/esm2022/controls/input/inputpassword.mjs +29 -15
  161. package/esm2022/controls/input/inputsearch.mjs +27 -13
  162. package/esm2022/controls/layout/formlayout.directive.mjs +16 -0
  163. package/esm2022/controls/layout/layout.module.mjs +44 -0
  164. package/esm2022/controls/layout/tocontrolheight.pipe.mjs +35 -0
  165. package/esm2022/controls/layout/tocontrolwidthcss.pipe.mjs +56 -0
  166. package/esm2022/controls/layout/tolabelheight.pipe.mjs +35 -0
  167. package/esm2022/controls/layout/tolabelwidthcss.pipe.mjs +40 -0
  168. package/esm2022/controls/list/dropdown.mjs +31 -21
  169. package/esm2022/controls/list/dropdown.module.mjs +5 -11
  170. package/esm2022/controls/list/list.module.mjs +2 -2
  171. package/esm2022/controls/list/listbox.mjs +31 -22
  172. package/esm2022/controls/multilanguage/multilanguage.module.mjs +8 -4
  173. package/esm2022/controls/multilanguage/multilanguageinput.mjs +26 -14
  174. package/esm2022/controls/multilanguage/multilanguageinputarea.mjs +27 -15
  175. package/esm2022/controls/multilanguage/multilanguagemenu.mjs +12 -11
  176. package/esm2022/controls/multilanguage/multilanguagemenuanchor.mjs +5 -4
  177. package/esm2022/controls/multilanguage/multilanguagemenucontainer.mjs +5 -4
  178. package/esm2022/controls/multilanguage/multilanguagemenuitembutton.mjs +21 -11
  179. package/esm2022/controls/static/formcontainer.mjs +27 -17
  180. package/esm2022/controls/static/staticlabel.mjs +27 -13
  181. package/esm2022/controls/static/staticlabel.module.mjs +8 -6
  182. package/esm2022/controls/tabs/tab.mjs +3 -3
  183. package/esm2022/controls/tabs/tabitem.mjs +3 -3
  184. package/esm2022/controls/tabs/tabs.module.mjs +1 -1
  185. package/esm2022/controls/tinymce/tinymce.mjs +29 -20
  186. package/esm2022/controls/tinymce/tinymce.module.mjs +1 -1
  187. package/esm2022/controls/tooltip/tooltip.mjs +51 -0
  188. package/esm2022/controls/tooltip/tooltip.module.mjs +18 -0
  189. package/esm2022/controls/treeview/treeview.mjs +77 -0
  190. package/esm2022/controls/treeview/treeview.module.mjs +18 -0
  191. package/esm2022/controls/upload/dropzonemultiple.mjs +32 -14
  192. package/esm2022/controls/upload/dropzonesingle.mjs +32 -14
  193. package/esm2022/controls/upload/upload.mjs +29 -14
  194. package/esm2022/controls/upload/upload.module.mjs +12 -5
  195. package/esm2022/controls/upload/uploadmultiple.mjs +30 -14
  196. package/esm2022/controls/validation/validationsummary.mjs +11 -19
  197. package/esm2022/controls/validation/validationsummary.module.mjs +1 -1
  198. package/esm2022/controls/wizard/wizard.mjs +3 -3
  199. package/esm2022/controls/wizard/wizard.module.mjs +1 -1
  200. package/esm2022/controls/wizard/wizarditem.mjs +1 -1
  201. package/esm2022/public_api.mjs +36 -25
  202. package/fesm2022/simpleangularcontrols-sac-bootstrap4.mjs +1344 -691
  203. package/fesm2022/simpleangularcontrols-sac-bootstrap4.mjs.map +1 -1
  204. package/package.json +37 -36
  205. package/public_api.d.ts +35 -24
  206. package/public_api.d.ts.map +1 -1
  207. package/simpleangularcontrols-sac-bootstrap4-16.0.0-rc.20.tgz +0 -0
  208. package/simpleangularcontrols-sac-bootstrap4-16.0.0-rc.2.tgz +0 -0
@@ -1,25 +1,31 @@
1
1
  import { AsyncPipe, NgClass, NgIf } from '@angular/common';
2
- import { Component, forwardRef, Host, Optional, } from '@angular/core';
2
+ import { Component, Host, Optional, forwardRef, } from '@angular/core';
3
3
  import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
4
4
  import { SacUploadSingleCommon } from '@simpleangularcontrols/sac-common';
5
+ import { SacToControlHeightPipe } from '../layout/tocontrolheight.pipe';
6
+ import { SacToControlWidthCssPipe } from '../layout/tocontrolwidthcss.pipe';
7
+ import { SacToLabelHeightPipe } from '../layout/tolabelheight.pipe';
8
+ import { SacToLabelWidthCssPipe } from '../layout/tolabelwidthcss.pipe';
9
+ import { SacTooltipComponent } from '../tooltip/tooltip';
5
10
  import * as i0 from "@angular/core";
6
- import * as i1 from "../form/form";
11
+ import * as i1 from "../layout/formlayout.directive";
7
12
  /**
8
13
  * Upload Komponten
9
14
  * @see https://github.com/kukhariev/ngx-uploadx/
10
15
  */
11
16
  class SacUploadComponent extends SacUploadSingleCommon {
17
+ // #region Constructors
12
18
  /**
13
- * Konstruktor
14
- * @param parent Formular
15
- * @param injector Angular Dependency Injection Service
16
- * @param renderer Angular Rendering Engine
17
- * @param ngZone ngZone Referenz
19
+ * Constructor
20
+ * @param formLayout SacFormLayout to define scoped layout settings
21
+ * @param injector Injector for injecting services
22
+ * @param renderer Angular rendering engine
23
+ * @param ngZone ngZone to manage external javascripts
18
24
  */
19
- constructor(parent, injector, renderer, ngZone) {
20
- super(parent, injector, renderer, ngZone);
25
+ constructor(formLayout, injector, renderer, ngZone) {
26
+ super(formLayout, injector, renderer, ngZone);
21
27
  }
22
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacUploadComponent, deps: [{ token: i1.SacFormDirective, host: true, optional: true }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacUploadComponent, deps: [{ token: i1.SacFormLayoutDirective, host: true, optional: true }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
23
29
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SacUploadComponent, isStandalone: true, selector: "sac-upload", providers: [
24
30
  {
25
31
  provide: NG_VALUE_ACCESSOR,
@@ -31,7 +37,7 @@ class SacUploadComponent extends SacUploadSingleCommon {
31
37
  multi: true,
32
38
  useExisting: forwardRef(() => SacUploadComponent),
33
39
  },
34
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"row form-group\" [class.no-gutters]=\"disablelabel\">\r\n <label\r\n *ngIf=\"disablelabel === false && !isadaptivelabel\"\r\n id=\"{{name}}_label\"\r\n for=\"{{name}}\"\r\n class=\"col-12 col-form-label\"\r\n [ngClass]=\"[labelsize !== 12 ? 'col-md-' + labelsize : 'sr-only']\"\r\n >{{label}}</label\r\n >\r\n <div\r\n class=\"col-12\"\r\n [ngClass]=\"[disablelabel === false ? 'col-md-' + _inputsize : 'col-md-12']\"\r\n >\r\n <div\r\n class=\"input-group upload-component upload-single\"\r\n [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\"\r\n >\r\n <div class=\"input-group-prepend\">\r\n <!-- image-preview-input -->\r\n <div\r\n class=\"btn upload-input custom-file\"\r\n [class.disabled]=\"HasQueueItem()\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <i class=\"pr-2\" [class]=\"IconBrowse\"></i>\r\n <span class=\"upload-browse\"\r\n >{{ lngResourceService.GetString('UPLOAD_BUTTON_BROWSE') | async\r\n }}</span\r\n >\r\n <input\r\n type=\"file\"\r\n class=\"custom-file-input\"\r\n #files\r\n (click)=\"files.value = ''\"\r\n (uploadxState)=\"onUpload($event)\"\r\n multiple\r\n [disabled]=\"HasQueueItem()\"\r\n />\r\n </div>\r\n </div>\r\n <div\r\n class=\"form-control upload-progress\"\r\n [class.is-invalid]=\"invalid && (dirty || touched)\"\r\n >\r\n <div class=\"progress\">\r\n <div\r\n class=\"progress-bar\"\r\n [class.progress-bar-success]=\"Progress()===100\"\r\n role=\"progressbar\"\r\n [attr.aria-valuenow]=\"Progress()\"\r\n aria-valuemin=\"0\"\r\n aria-valuemax=\"100\"\r\n [style.width.%]=\"Progress()\"\r\n >\r\n <span class=\"progress-text text-dark\"\r\n >{{ Filename() | async }}</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <input type=\"textimage-preview-filename\" class=\"form-control image-preview-filename\" disabled=\"disabled\"> --><!-- don't give a name === doesn't send on POST/GET -->\r\n <div class=\"input-group-append\">\r\n <!-- image-preview-clear button -->\r\n <button\r\n class=\"btn\"\r\n (click)=\"cancelAll()\"\r\n [attr.disabled]=\"HasQueueItem() === false ? 'disabled' : null\"\r\n [class.disabled]=\"HasQueueItem() === false ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconDelete\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"(autoupload === false && enablepause) || (autoupload && enablepause && IsPaused() === false)\"\r\n class=\"btn\"\r\n (click)=\"pauseAll()\"\r\n [attr.disabled]=\"IsUploading() === false ? 'disabled' : null\"\r\n [class.disabled]=\"IsUploading() === false ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconPause\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"autoupload && enablepause && IsPaused()\"\r\n class=\"btn\"\r\n (click)=\"uploadAll()\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconContinue\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"autoupload === false\"\r\n class=\"btn text-nowrap\"\r\n (click)=\"uploadAll()\"\r\n [attr.disabled]=\"IsStateToUpload() === false ? 'disabled' : null\"\r\n [class.disabled]=\"IsStateToUpload() === false ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconUpload\" class=\"pr-2\"></span>{{\r\n lngResourceService.GetString('UPLOAD_BUTTON_UPLOAD') | async }}\r\n </button>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\r\n class=\"invalid-feedback\"\r\n >\r\n {{ GetErrorMessage() | async }}\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".upload-component .custom-file .custom-file-input{inset:0;position:absolute}.upload-component.upload-multiple .upload-progress .progress{border-top-right-radius:0;border-bottom-right-radius:0}.upload-component.upload-single .upload-progress .progress{border-radius:0}.upload-component .upload-progress{padding:0;border:0}.upload-component .upload-progress .progress{height:calc(2.25rem + 2px)}.upload-component .upload-progress .progress .progress-text{position:absolute;left:0;right:0}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
40
+ ], 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\">\n </span>\n </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=\"input-group upload-component upload-single\"\n [class.input-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.input-group-lg]=\"componentHeight === ControlHeight.Large\"\n [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\">\n <div class=\"input-group-prepend\">\n <!-- image-preview-input -->\n <div\n class=\"btn upload-input custom-file\"\n [class.disabled]=\"HasQueueItem()\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <i\n class=\"pr-2\"\n [ngClass]=\"IconBrowse\"></i>\n <span class=\"upload-browse\">{{ buttonbrowse ? buttonbrowse : (lngResourceService.GetString(validationKeyService.UploadButtonBrowse) | async) }}</span>\n <input\n type=\"file\"\n id=\"{{ name }}_uploadinput\"\n class=\"custom-file-input\"\n #files\n (click)=\"files.value = ''\"\n (uploadxState)=\"onUpload($event)\"\n multiple\n [disabled]=\"HasQueueItem()\" />\n </div>\n </div>\n <div\n class=\"form-control upload-progress\"\n [ngClass]=\"[componentHeight | toControlHeight]\"\n [class.is-invalid]=\"invalid && (dirty || touched)\">\n <div class=\"progress\">\n <div\n class=\"progress-bar\"\n [class.progress-bar-success]=\"Progress() === 100\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"Progress()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"Progress()\">\n <span class=\"progress-text text-dark\">{{ Filename() | async }}</span>\n </div>\n </div>\n </div>\n <!-- <input type=\"textimage-preview-filename\" class=\"form-control image-preview-filename\" disabled=\"disabled\"> --><!-- don't give a name === doesn't send on POST/GET -->\n <div class=\"input-group-append\">\n <!-- image-preview-clear button -->\n <button\n class=\"btn\"\n (click)=\"cancelAll()\"\n [attr.disabled]=\"HasQueueItem() === false ? 'disabled' : null\"\n [class.disabled]=\"HasQueueItem() === false ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [ngClass]=\"IconDelete\"></span>\n </button>\n <button\n *ngIf=\"(autoupload === false && enablepause) || (autoupload && enablepause && IsPaused() === false)\"\n class=\"btn\"\n (click)=\"pauseAll()\"\n [attr.disabled]=\"IsUploading() === false ? 'disabled' : null\"\n [class.disabled]=\"IsUploading() === false ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [ngClass]=\"IconPause\"></span>\n </button>\n <button\n *ngIf=\"autoupload && enablepause && IsPaused()\"\n class=\"btn\"\n (click)=\"uploadAll()\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [ngClass]=\"IconContinue\"></span>\n </button>\n <button\n *ngIf=\"autoupload === false\"\n class=\"btn text-nowrap\"\n (click)=\"uploadAll()\"\n [attr.disabled]=\"IsStateToUpload() === false ? 'disabled' : null\"\n [class.disabled]=\"IsStateToUpload() === false ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span\n [ngClass]=\"IconUpload\"\n class=\"pr-2\"></span\n >{{ buttonupload ? buttonupload : (lngResourceService.GetString(validationKeyService.UploadButtonUpload) | async) }}\n </button>\n </div>\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: [".upload-component .custom-file{height:100%}.upload-component .custom-file .custom-file-input{inset:0;position:absolute}.upload-component.upload-multiple .upload-progress .progress{border-top-right-radius:0;border-bottom-right-radius:0}.upload-component.upload-single .upload-progress .progress{border-radius:0}.upload-component .upload-progress{padding:0;border:0}.upload-component .upload-progress .progress{height:100%}.upload-component .upload-progress .progress .progress-text{position:absolute;left:0;right:0}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "pipe", type: SacToControlHeightPipe, name: "toControlHeight" }, { kind: "component", type: SacTooltipComponent, selector: "sac-tooltip" }] }); }
35
41
  }
36
42
  export { SacUploadComponent };
37
43
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacUploadComponent, decorators: [{
@@ -47,10 +53,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
47
53
  multi: true,
48
54
  useExisting: forwardRef(() => SacUploadComponent),
49
55
  },
50
- ], standalone: true, imports: [NgIf, NgClass, AsyncPipe], template: "<div class=\"row form-group\" [class.no-gutters]=\"disablelabel\">\r\n <label\r\n *ngIf=\"disablelabel === false && !isadaptivelabel\"\r\n id=\"{{name}}_label\"\r\n for=\"{{name}}\"\r\n class=\"col-12 col-form-label\"\r\n [ngClass]=\"[labelsize !== 12 ? 'col-md-' + labelsize : 'sr-only']\"\r\n >{{label}}</label\r\n >\r\n <div\r\n class=\"col-12\"\r\n [ngClass]=\"[disablelabel === false ? 'col-md-' + _inputsize : 'col-md-12']\"\r\n >\r\n <div\r\n class=\"input-group upload-component upload-single\"\r\n [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\"\r\n >\r\n <div class=\"input-group-prepend\">\r\n <!-- image-preview-input -->\r\n <div\r\n class=\"btn upload-input custom-file\"\r\n [class.disabled]=\"HasQueueItem()\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <i class=\"pr-2\" [class]=\"IconBrowse\"></i>\r\n <span class=\"upload-browse\"\r\n >{{ lngResourceService.GetString('UPLOAD_BUTTON_BROWSE') | async\r\n }}</span\r\n >\r\n <input\r\n type=\"file\"\r\n class=\"custom-file-input\"\r\n #files\r\n (click)=\"files.value = ''\"\r\n (uploadxState)=\"onUpload($event)\"\r\n multiple\r\n [disabled]=\"HasQueueItem()\"\r\n />\r\n </div>\r\n </div>\r\n <div\r\n class=\"form-control upload-progress\"\r\n [class.is-invalid]=\"invalid && (dirty || touched)\"\r\n >\r\n <div class=\"progress\">\r\n <div\r\n class=\"progress-bar\"\r\n [class.progress-bar-success]=\"Progress()===100\"\r\n role=\"progressbar\"\r\n [attr.aria-valuenow]=\"Progress()\"\r\n aria-valuemin=\"0\"\r\n aria-valuemax=\"100\"\r\n [style.width.%]=\"Progress()\"\r\n >\r\n <span class=\"progress-text text-dark\"\r\n >{{ Filename() | async }}</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <input type=\"textimage-preview-filename\" class=\"form-control image-preview-filename\" disabled=\"disabled\"> --><!-- don't give a name === doesn't send on POST/GET -->\r\n <div class=\"input-group-append\">\r\n <!-- image-preview-clear button -->\r\n <button\r\n class=\"btn\"\r\n (click)=\"cancelAll()\"\r\n [attr.disabled]=\"HasQueueItem() === false ? 'disabled' : null\"\r\n [class.disabled]=\"HasQueueItem() === false ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconDelete\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"(autoupload === false && enablepause) || (autoupload && enablepause && IsPaused() === false)\"\r\n class=\"btn\"\r\n (click)=\"pauseAll()\"\r\n [attr.disabled]=\"IsUploading() === false ? 'disabled' : null\"\r\n [class.disabled]=\"IsUploading() === false ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconPause\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"autoupload && enablepause && IsPaused()\"\r\n class=\"btn\"\r\n (click)=\"uploadAll()\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconContinue\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"autoupload === false\"\r\n class=\"btn text-nowrap\"\r\n (click)=\"uploadAll()\"\r\n [attr.disabled]=\"IsStateToUpload() === false ? 'disabled' : null\"\r\n [class.disabled]=\"IsStateToUpload() === false ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconUpload\" class=\"pr-2\"></span>{{\r\n lngResourceService.GetString('UPLOAD_BUTTON_UPLOAD') | async }}\r\n </button>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\r\n class=\"invalid-feedback\"\r\n >\r\n {{ GetErrorMessage() | async }}\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".upload-component .custom-file .custom-file-input{inset:0;position:absolute}.upload-component.upload-multiple .upload-progress .progress{border-top-right-radius:0;border-bottom-right-radius:0}.upload-component.upload-single .upload-progress .progress{border-radius:0}.upload-component .upload-progress{padding:0;border:0}.upload-component .upload-progress .progress{height:calc(2.25rem + 2px)}.upload-component .upload-progress .progress .progress-text{position:absolute;left:0;right:0}\n"] }]
51
- }], ctorParameters: function () { return [{ type: i1.SacFormDirective, decorators: [{
56
+ ], standalone: true, imports: [
57
+ NgIf,
58
+ NgClass,
59
+ AsyncPipe,
60
+ SacToLabelWidthCssPipe,
61
+ SacToControlWidthCssPipe,
62
+ SacToLabelHeightPipe,
63
+ SacToControlHeightPipe,
64
+ SacTooltipComponent,
65
+ ], 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\">\n </span>\n </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=\"input-group upload-component upload-single\"\n [class.input-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.input-group-lg]=\"componentHeight === ControlHeight.Large\"\n [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\">\n <div class=\"input-group-prepend\">\n <!-- image-preview-input -->\n <div\n class=\"btn upload-input custom-file\"\n [class.disabled]=\"HasQueueItem()\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <i\n class=\"pr-2\"\n [ngClass]=\"IconBrowse\"></i>\n <span class=\"upload-browse\">{{ buttonbrowse ? buttonbrowse : (lngResourceService.GetString(validationKeyService.UploadButtonBrowse) | async) }}</span>\n <input\n type=\"file\"\n id=\"{{ name }}_uploadinput\"\n class=\"custom-file-input\"\n #files\n (click)=\"files.value = ''\"\n (uploadxState)=\"onUpload($event)\"\n multiple\n [disabled]=\"HasQueueItem()\" />\n </div>\n </div>\n <div\n class=\"form-control upload-progress\"\n [ngClass]=\"[componentHeight | toControlHeight]\"\n [class.is-invalid]=\"invalid && (dirty || touched)\">\n <div class=\"progress\">\n <div\n class=\"progress-bar\"\n [class.progress-bar-success]=\"Progress() === 100\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"Progress()\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [style.width.%]=\"Progress()\">\n <span class=\"progress-text text-dark\">{{ Filename() | async }}</span>\n </div>\n </div>\n </div>\n <!-- <input type=\"textimage-preview-filename\" class=\"form-control image-preview-filename\" disabled=\"disabled\"> --><!-- don't give a name === doesn't send on POST/GET -->\n <div class=\"input-group-append\">\n <!-- image-preview-clear button -->\n <button\n class=\"btn\"\n (click)=\"cancelAll()\"\n [attr.disabled]=\"HasQueueItem() === false ? 'disabled' : null\"\n [class.disabled]=\"HasQueueItem() === false ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [ngClass]=\"IconDelete\"></span>\n </button>\n <button\n *ngIf=\"(autoupload === false && enablepause) || (autoupload && enablepause && IsPaused() === false)\"\n class=\"btn\"\n (click)=\"pauseAll()\"\n [attr.disabled]=\"IsUploading() === false ? 'disabled' : null\"\n [class.disabled]=\"IsUploading() === false ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [ngClass]=\"IconPause\"></span>\n </button>\n <button\n *ngIf=\"autoupload && enablepause && IsPaused()\"\n class=\"btn\"\n (click)=\"uploadAll()\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [ngClass]=\"IconContinue\"></span>\n </button>\n <button\n *ngIf=\"autoupload === false\"\n class=\"btn text-nowrap\"\n (click)=\"uploadAll()\"\n [attr.disabled]=\"IsStateToUpload() === false ? 'disabled' : null\"\n [class.disabled]=\"IsStateToUpload() === false ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span\n [ngClass]=\"IconUpload\"\n class=\"pr-2\"></span\n >{{ buttonupload ? buttonupload : (lngResourceService.GetString(validationKeyService.UploadButtonUpload) | async) }}\n </button>\n </div>\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: [".upload-component .custom-file{height:100%}.upload-component .custom-file .custom-file-input{inset:0;position:absolute}.upload-component.upload-multiple .upload-progress .progress{border-top-right-radius:0;border-bottom-right-radius:0}.upload-component.upload-single .upload-progress .progress{border-radius:0}.upload-component .upload-progress{padding:0;border:0}.upload-component .upload-progress .progress{height:100%}.upload-component .upload-progress .progress .progress-text{position:absolute;left:0;right:0}\n"] }]
66
+ }], ctorParameters: function () { return [{ type: i1.SacFormLayoutDirective, decorators: [{
52
67
  type: Host
53
68
  }, {
54
69
  type: Optional
55
70
  }] }, { type: i0.Injector }, { type: i0.Renderer2 }, { type: i0.NgZone }]; } });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2FjLWJvb3RzdHJhcDQvc3JjL2NvbnRyb2xzL3VwbG9hZC91cGxvYWQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zYWMtYm9vdHN0cmFwNC9zcmMvY29udHJvbHMvdXBsb2FkL3VwbG9hZC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNELE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLElBQUksRUFHSixRQUFRLEdBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7QUFHMUU7OztHQUdHO0FBQ0gsTUFtQmEsa0JBQW1CLFNBQVEscUJBQXFCO0lBQzNEOzs7Ozs7T0FNRztJQUNILFlBQ3NCLE1BQXdCLEVBQzVDLFFBQWtCLEVBQ2xCLFFBQW1CLEVBQ25CLE1BQWM7UUFFZCxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQzsrR0FmVSxrQkFBa0I7bUdBQWxCLGtCQUFrQix5REFmbEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsa0JBQWtCO2FBQ2hDO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7YUFDbEQ7U0FDRixpRENqQ0gsb3FKQW9IQSxraUJEakZZLElBQUksNkZBQUUsT0FBTywrRUFBRSxTQUFTOztTQUV2QixrQkFBa0I7NEZBQWxCLGtCQUFrQjtrQkFuQjlCLFNBQVM7K0JBQ0UsWUFBWSxhQUdYO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsb0JBQW9CO3lCQUNoQzt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUM7eUJBQ2xEO3FCQUNGLGNBQ1csSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUM7OzBCQVdoQyxJQUFJOzswQkFBSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgZm9yd2FyZFJlZixcclxuICBIb3N0LFxyXG4gIEluamVjdG9yLFxyXG4gIE5nWm9uZSxcclxuICBPcHRpb25hbCxcclxuICBSZW5kZXJlcjIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTYWNVcGxvYWRTaW5nbGVDb21tb24gfSBmcm9tICdAc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NhYy1jb21tb24nO1xyXG5pbXBvcnQgeyBTYWNGb3JtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZm9ybS9mb3JtJztcclxuXHJcbi8qKlxyXG4gKiBVcGxvYWQgS29tcG9udGVuXHJcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2t1a2hhcmlldi9uZ3gtdXBsb2FkeC9cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2FjLXVwbG9hZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91cGxvYWQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBTYWNVcGxvYWRDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2FjVXBsb2FkQ29tcG9uZW50KSxcclxuICAgIH0sXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtOZ0lmLCBOZ0NsYXNzLCBBc3luY1BpcGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2FjVXBsb2FkQ29tcG9uZW50IGV4dGVuZHMgU2FjVXBsb2FkU2luZ2xlQ29tbW9uIHtcclxuICAvKipcclxuICAgKiBLb25zdHJ1a3RvclxyXG4gICAqIEBwYXJhbSBwYXJlbnQgRm9ybXVsYXJcclxuICAgKiBAcGFyYW0gaW5qZWN0b3IgQW5ndWxhciBEZXBlbmRlbmN5IEluamVjdGlvbiBTZXJ2aWNlXHJcbiAgICogQHBhcmFtIHJlbmRlcmVyIEFuZ3VsYXIgUmVuZGVyaW5nIEVuZ2luZVxyXG4gICAqIEBwYXJhbSBuZ1pvbmUgbmdab25lIFJlZmVyZW56XHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASG9zdCgpIEBPcHRpb25hbCgpIHBhcmVudDogU2FjRm9ybURpcmVjdGl2ZSxcclxuICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBuZ1pvbmU6IE5nWm9uZVxyXG4gICkge1xyXG4gICAgc3VwZXIocGFyZW50LCBpbmplY3RvciwgcmVuZGVyZXIsIG5nWm9uZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiIFtjbGFzcy5uby1ndXR0ZXJzXT1cImRpc2FibGVsYWJlbFwiPlxyXG4gIDxsYWJlbFxyXG4gICAgKm5nSWY9XCJkaXNhYmxlbGFiZWwgPT09IGZhbHNlICYmICFpc2FkYXB0aXZlbGFiZWxcIlxyXG4gICAgaWQ9XCJ7e25hbWV9fV9sYWJlbFwiXHJcbiAgICBmb3I9XCJ7e25hbWV9fVwiXHJcbiAgICBjbGFzcz1cImNvbC0xMiBjb2wtZm9ybS1sYWJlbFwiXHJcbiAgICBbbmdDbGFzc109XCJbbGFiZWxzaXplICE9PSAxMiA/ICAnY29sLW1kLScgKyBsYWJlbHNpemUgOiAnc3Itb25seSddXCJcclxuICAgID57e2xhYmVsfX08L2xhYmVsXHJcbiAgPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiY29sLTEyXCJcclxuICAgIFtuZ0NsYXNzXT1cIltkaXNhYmxlbGFiZWwgPT09IGZhbHNlID8gJ2NvbC1tZC0nICsgX2lucHV0c2l6ZSA6ICdjb2wtbWQtMTInXVwiXHJcbiAgPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImlucHV0LWdyb3VwIHVwbG9hZC1jb21wb25lbnQgdXBsb2FkLXNpbmdsZVwiXHJcbiAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImlzaW5saW5lZXJyb3JlbmFibGVkICYmIGludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCJcclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXByZXBlbmRcIj5cclxuICAgICAgICA8IS0tIGltYWdlLXByZXZpZXctaW5wdXQgLS0+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gdXBsb2FkLWlucHV0IGN1c3RvbS1maWxlXCJcclxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJIYXNRdWV1ZUl0ZW0oKVwiXHJcbiAgICAgICAgICBbY2xhc3MuYnRuLXNlY29uZGFyeV09XCIhKGludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpKVwiXHJcbiAgICAgICAgICBbY2xhc3MuYnRuLWRhbmdlcl09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJwci0yXCIgW2NsYXNzXT1cIkljb25Ccm93c2VcIj48L2k+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZC1icm93c2VcIlxyXG4gICAgICAgICAgICA+e3sgbG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZygnVVBMT0FEX0JVVFRPTl9CUk9XU0UnKSB8IGFzeW5jXHJcbiAgICAgICAgICAgIH19PC9zcGFuXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1maWxlLWlucHV0XCJcclxuICAgICAgICAgICAgI2ZpbGVzXHJcbiAgICAgICAgICAgIChjbGljayk9XCJmaWxlcy52YWx1ZSA9ICcnXCJcclxuICAgICAgICAgICAgKHVwbG9hZHhTdGF0ZSk9XCJvblVwbG9hZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgbXVsdGlwbGVcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIkhhc1F1ZXVlSXRlbSgpXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdXBsb2FkLXByb2dyZXNzXCJcclxuICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIlxyXG4gICAgICAgICAgICBbY2xhc3MucHJvZ3Jlc3MtYmFyLXN1Y2Nlc3NdPVwiUHJvZ3Jlc3MoKT09PTEwMFwiXHJcbiAgICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiUHJvZ3Jlc3MoKVwiXHJcbiAgICAgICAgICAgIGFyaWEtdmFsdWVtaW49XCIwXCJcclxuICAgICAgICAgICAgYXJpYS12YWx1ZW1heD1cIjEwMFwiXHJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cIlByb2dyZXNzKClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByb2dyZXNzLXRleHQgdGV4dC1kYXJrXCJcclxuICAgICAgICAgICAgICA+e3sgRmlsZW5hbWUoKSB8IGFzeW5jIH19PC9zcGFuXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSA8aW5wdXQgdHlwZT1cInRleHRpbWFnZS1wcmV2aWV3LWZpbGVuYW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW1hZ2UtcHJldmlldy1maWxlbmFtZVwiIGRpc2FibGVkPVwiZGlzYWJsZWRcIj4gLS0+PCEtLSBkb24ndCBnaXZlIGEgbmFtZSA9PT0gZG9lc24ndCBzZW5kIG9uIFBPU1QvR0VUIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XHJcbiAgICAgICAgPCEtLSBpbWFnZS1wcmV2aWV3LWNsZWFyIGJ1dHRvbiAtLT5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImJ0blwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsQWxsKClcIlxyXG4gICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiSGFzUXVldWVJdGVtKCkgPT09IGZhbHNlID8gJ2Rpc2FibGVkJyA6IG51bGxcIlxyXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIkhhc1F1ZXVlSXRlbSgpID09PSBmYWxzZSA/ICdkaXNhYmxlZCcgOiBudWxsXCJcclxuICAgICAgICAgIFtjbGFzcy5idG4tc2Vjb25kYXJ5XT1cIiEoaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZCkpXCJcclxuICAgICAgICAgIFtjbGFzcy5idG4tZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiSWNvbkRlbGV0ZVwiPjwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cIihhdXRvdXBsb2FkID09PSBmYWxzZSAmJiBlbmFibGVwYXVzZSkgfHwgKGF1dG91cGxvYWQgJiYgZW5hYmxlcGF1c2UgJiYgSXNQYXVzZWQoKSA9PT0gZmFsc2UpXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuXCJcclxuICAgICAgICAgIChjbGljayk9XCJwYXVzZUFsbCgpXCJcclxuICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIklzVXBsb2FkaW5nKCkgPT09IGZhbHNlID8gJ2Rpc2FibGVkJyA6IG51bGxcIlxyXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIklzVXBsb2FkaW5nKCkgPT09IGZhbHNlID8gJ2Rpc2FibGVkJyA6IG51bGxcIlxyXG4gICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxyXG4gICAgICAgICAgW2NsYXNzLmJ0bi1kYW5nZXJdPVwiaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJJY29uUGF1c2VcIj48L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJhdXRvdXBsb2FkICYmIGVuYWJsZXBhdXNlICYmIElzUGF1c2VkKClcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG5cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInVwbG9hZEFsbCgpXCJcclxuICAgICAgICAgIFtjbGFzcy5idG4tc2Vjb25kYXJ5XT1cIiEoaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZCkpXCJcclxuICAgICAgICAgIFtjbGFzcy5idG4tZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiSWNvbkNvbnRpbnVlXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwiYXV0b3VwbG9hZCA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInVwbG9hZEFsbCgpXCJcclxuICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIklzU3RhdGVUb1VwbG9hZCgpID09PSBmYWxzZSA/ICAnZGlzYWJsZWQnIDogbnVsbFwiXHJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiSXNTdGF0ZVRvVXBsb2FkKCkgPT09IGZhbHNlID8gICdkaXNhYmxlZCcgOiBudWxsXCJcclxuICAgICAgICAgIFtjbGFzcy5idG4tc2Vjb25kYXJ5XT1cIiEoaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZCkpXCJcclxuICAgICAgICAgIFtjbGFzcy5idG4tZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiSWNvblVwbG9hZFwiIGNsYXNzPVwicHItMlwiPjwvc3Bhbj57e1xyXG4gICAgICAgICAgbG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZygnVVBMT0FEX0JVVFRPTl9VUExPQUQnKSB8IGFzeW5jIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwiaXNpbmxpbmVlcnJvcmVuYWJsZWQgJiYgaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIlxyXG4gICAgICBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgPlxyXG4gICAgICB7eyBHZXRFcnJvck1lc3NhZ2UoKSB8IGFzeW5jIH19XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2FjLWJvb3RzdHJhcDQvc3JjL2NvbnRyb2xzL3VwbG9hZC91cGxvYWQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zYWMtYm9vdHN0cmFwNC9zcmMvY29udHJvbHMvdXBsb2FkL3VwbG9hZC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNELE9BQU8sRUFDTCxTQUFTLEVBQ1QsSUFBSSxFQUdKLFFBQVEsRUFFUixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFFekQ7OztHQUdHO0FBQ0gsTUE0QmEsa0JBQW1CLFNBQVEscUJBQXFCO0lBQzNELHVCQUF1QjtJQUV2Qjs7Ozs7O09BTUc7SUFDSCxZQUNzQixVQUFrQyxFQUN0RCxRQUFrQixFQUNsQixRQUFtQixFQUNuQixNQUFjO1FBRWQsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7K0dBakJVLGtCQUFrQjttR0FBbEIsa0JBQWtCLHlEQXhCbEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsa0JBQWtCO2FBQ2hDO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUM7YUFDbEQ7U0FDRixpREN0Q0gsMDVPQW1KQSw4akJEMUdJLElBQUksNkZBQ0osT0FBTywrRUFDUCxTQUFTLHlDQUNULHNCQUFzQixtREFDdEIsd0JBQXdCLHFEQUN4QixvQkFBb0IsaURBQ3BCLHNCQUFzQix3REFDdEIsbUJBQW1COztTQUdWLGtCQUFrQjs0RkFBbEIsa0JBQWtCO2tCQTVCOUIsU0FBUzsrQkFDRSxZQUFZLGFBR1g7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxvQkFBb0I7eUJBQ2hDO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQzt5QkFDbEQ7cUJBQ0YsY0FDVyxJQUFJLFdBQ1A7d0JBQ1AsSUFBSTt3QkFDSixPQUFPO3dCQUNQLFNBQVM7d0JBQ1Qsc0JBQXNCO3dCQUN0Qix3QkFBd0I7d0JBQ3hCLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3dCQUN0QixtQkFBbUI7cUJBQ3BCOzswQkFhRSxJQUFJOzswQkFBSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSG9zdCxcbiAgSW5qZWN0b3IsXG4gIE5nWm9uZSxcbiAgT3B0aW9uYWwsXG4gIFJlbmRlcmVyMixcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNhY1VwbG9hZFNpbmdsZUNvbW1vbiB9IGZyb20gJ0BzaW1wbGVhbmd1bGFyY29udHJvbHMvc2FjLWNvbW1vbic7XG5pbXBvcnQgeyBTYWNGb3JtTGF5b3V0RGlyZWN0aXZlIH0gZnJvbSAnLi4vbGF5b3V0L2Zvcm1sYXlvdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNhY1RvQ29udHJvbEhlaWdodFBpcGUgfSBmcm9tICcuLi9sYXlvdXQvdG9jb250cm9saGVpZ2h0LnBpcGUnO1xuaW1wb3J0IHsgU2FjVG9Db250cm9sV2lkdGhDc3NQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvY29udHJvbHdpZHRoY3NzLnBpcGUnO1xuaW1wb3J0IHsgU2FjVG9MYWJlbEhlaWdodFBpcGUgfSBmcm9tICcuLi9sYXlvdXQvdG9sYWJlbGhlaWdodC5waXBlJztcbmltcG9ydCB7IFNhY1RvTGFiZWxXaWR0aENzc1BpcGUgfSBmcm9tICcuLi9sYXlvdXQvdG9sYWJlbHdpZHRoY3NzLnBpcGUnO1xuaW1wb3J0IHsgU2FjVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4uL3Rvb2x0aXAvdG9vbHRpcCc7XG5cbi8qKlxuICogVXBsb2FkIEtvbXBvbnRlblxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20va3VraGFyaWV2L25neC11cGxvYWR4L1xuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzYWMtdXBsb2FkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXBsb2FkLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBTYWNVcGxvYWRDb21wb25lbnQsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTYWNVcGxvYWRDb21wb25lbnQpLFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0lmLFxuICAgIE5nQ2xhc3MsXG4gICAgQXN5bmNQaXBlLFxuICAgIFNhY1RvTGFiZWxXaWR0aENzc1BpcGUsXG4gICAgU2FjVG9Db250cm9sV2lkdGhDc3NQaXBlLFxuICAgIFNhY1RvTGFiZWxIZWlnaHRQaXBlLFxuICAgIFNhY1RvQ29udHJvbEhlaWdodFBpcGUsXG4gICAgU2FjVG9vbHRpcENvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2FjVXBsb2FkQ29tcG9uZW50IGV4dGVuZHMgU2FjVXBsb2FkU2luZ2xlQ29tbW9uIHtcbiAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvcnNcblxuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICogQHBhcmFtIGZvcm1MYXlvdXQgU2FjRm9ybUxheW91dCB0byBkZWZpbmUgc2NvcGVkIGxheW91dCBzZXR0aW5nc1xuICAgKiBAcGFyYW0gaW5qZWN0b3IgSW5qZWN0b3IgZm9yIGluamVjdGluZyBzZXJ2aWNlc1xuICAgKiBAcGFyYW0gcmVuZGVyZXIgQW5ndWxhciByZW5kZXJpbmcgZW5naW5lXG4gICAqIEBwYXJhbSBuZ1pvbmUgbmdab25lIHRvIG1hbmFnZSBleHRlcm5hbCBqYXZhc2NyaXB0c1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgQEhvc3QoKSBAT3B0aW9uYWwoKSBmb3JtTGF5b3V0OiBTYWNGb3JtTGF5b3V0RGlyZWN0aXZlLFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIG5nWm9uZTogTmdab25lXG4gICkge1xuICAgIHN1cGVyKGZvcm1MYXlvdXQsIGluamVjdG9yLCByZW5kZXJlciwgbmdab25lKTtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb24gQ29uc3RydWN0b3JzXG59XG4iLCI8ZGl2XG4gICAgaWQ9XCJ7eyBuYW1lIH19XCJcbiAgICBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCJcbiAgICBbY2xhc3Mubm8tZ3V0dGVyc109XCJkaXNhYmxlbGFiZWxcIj5cbiAgICA8bGFiZWxcbiAgICAgICAgKm5nSWY9XCJkaXNhYmxlbGFiZWwgPT09IGZhbHNlICYmICFpc0FkYXB0aXZlTGFiZWxcIlxuICAgICAgICBpZD1cInt7IG5hbWUgfX1fbGFiZWxcIlxuICAgICAgICBmb3I9XCJ7eyBuYW1lIH19X3VwbG9hZGlucHV0XCJcbiAgICAgICAgY2xhc3M9XCJjb2wtMTIgY29sLWZvcm0tbGFiZWwgZC1mbGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiW2Rpc2FibGVsYWJlbCA9PT0gZmFsc2UgPyAodGhpcy5sYWJlbFNpemVzIHwgdG9MYWJlbFdpZHRoQ3NzKSA6ICdzci1vbmx5JywgY29tcG9uZW50SGVpZ2h0IHwgdG9MYWJlbEhlaWdodF1cIlxuICAgICAgICBbY2xhc3MucmVxdWlyZWRdPVwiaXNyZXF1aXJlZFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInRleHQgZmxleC1ncm93LTBcIlxuICAgICAgICAgICAgW2NsYXNzLmZsZXgtc20tZ3Jvdy0xXT1cInNwbGl0bGFiZWxhbmRoZWxwdGV4dFwiPlxuICAgICAgICAgICAge3sgbGFiZWwgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzYWMtdG9vbHRpcFxuICAgICAgICAgICAgKm5nSWY9XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dFwiXG4gICAgICAgICAgICBbdG9vbHRpcHRleHRdPVwiaGVscHRleHRcIlxuICAgICAgICAgICAgW2lubGluZW1vZGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJIZWxwdGV4dFRvb2x0aXBJY29uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zYWMtdG9vbHRpcD5cbiAgICA8L2xhYmVsPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb2wtMTJcIlxuICAgICAgICBbbmdDbGFzc109XCJbZGlzYWJsZWxhYmVsID09PSBmYWxzZSA/ICh0aGlzLmxhYmVsU2l6ZXMgfCB0b0NvbnRyb2xXaWR0aENzcykgOiAnJ11cIlxuICAgICAgICBbY2xhc3MuZC1mbGV4XT1cImhlbHB0ZXh0bW9kZSA9PT0gJ3Rvb2x0aXAnICYmIGhlbHB0ZXh0ICYmIGRpc2FibGVsYWJlbFwiPlxuICAgICAgICA8ZGl2IFtjbGFzcy5mbGV4LWdyb3ctMV09XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dCAmJiBkaXNhYmxlbGFiZWxcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWdyb3VwIHVwbG9hZC1jb21wb25lbnQgdXBsb2FkLXNpbmdsZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmlucHV0LWdyb3VwLXNtXT1cImNvbXBvbmVudEhlaWdodCA9PT0gQ29udHJvbEhlaWdodC5TbWFsbFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmlucHV0LWdyb3VwLWxnXT1cImNvbXBvbmVudEhlaWdodCA9PT0gQ29udHJvbEhlaWdodC5MYXJnZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwiaXNpbmxpbmVlcnJvcmVuYWJsZWQgJiYgaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtcHJlcGVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIGltYWdlLXByZXZpZXctaW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIHVwbG9hZC1pbnB1dCBjdXN0b20tZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiSGFzUXVldWVJdGVtKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1kYW5nZXJdPVwiaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwci0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJJY29uQnJvd3NlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWQtYnJvd3NlXCI+e3sgYnV0dG9uYnJvd3NlID8gYnV0dG9uYnJvd3NlIDogKGxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcodmFsaWRhdGlvbktleVNlcnZpY2UuVXBsb2FkQnV0dG9uQnJvd3NlKSB8IGFzeW5jKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInt7IG5hbWUgfX1fdXBsb2FkaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWZpbGUtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICNmaWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWxlcy52YWx1ZSA9ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXBsb2FkeFN0YXRlKT1cIm9uVXBsb2FkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIkhhc1F1ZXVlSXRlbSgpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB1cGxvYWQtcHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbY29tcG9uZW50SGVpZ2h0IHwgdG9Db250cm9sSGVpZ2h0XVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucHJvZ3Jlc3MtYmFyLXN1Y2Nlc3NdPVwiUHJvZ3Jlc3MoKSA9PT0gMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiUHJvZ3Jlc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS12YWx1ZW1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtdmFsdWVtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cIlByb2dyZXNzKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByb2dyZXNzLXRleHQgdGV4dC1kYXJrXCI+e3sgRmlsZW5hbWUoKSB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gPGlucHV0IHR5cGU9XCJ0ZXh0aW1hZ2UtcHJldmlldy1maWxlbmFtZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGltYWdlLXByZXZpZXctZmlsZW5hbWVcIiBkaXNhYmxlZD1cImRpc2FibGVkXCI+IC0tPjwhLS0gZG9uJ3QgZ2l2ZSBhIG5hbWUgPT09IGRvZXNuJ3Qgc2VuZCBvbiBQT1NUL0dFVCAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gaW1hZ2UtcHJldmlldy1jbGVhciBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxBbGwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJIYXNRdWV1ZUl0ZW0oKSA9PT0gZmFsc2UgPyAnZGlzYWJsZWQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiSGFzUXVldWVJdGVtKCkgPT09IGZhbHNlID8gJ2Rpc2FibGVkJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1kYW5nZXJdPVwiaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIkljb25EZWxldGVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihhdXRvdXBsb2FkID09PSBmYWxzZSAmJiBlbmFibGVwYXVzZSkgfHwgKGF1dG91cGxvYWQgJiYgZW5hYmxlcGF1c2UgJiYgSXNQYXVzZWQoKSA9PT0gZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXVzZUFsbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIklzVXBsb2FkaW5nKCkgPT09IGZhbHNlID8gJ2Rpc2FibGVkJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIklzVXBsb2FkaW5nKCkgPT09IGZhbHNlID8gJ2Rpc2FibGVkJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1kYW5nZXJdPVwiaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIkljb25QYXVzZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYXV0b3VwbG9hZCAmJiBlbmFibGVwYXVzZSAmJiBJc1BhdXNlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGxvYWRBbGwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLXNlY29uZGFyeV09XCIhKGludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLWRhbmdlcl09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiSWNvbkNvbnRpbnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhdXRvdXBsb2FkID09PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biB0ZXh0LW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkQWxsKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiSXNTdGF0ZVRvVXBsb2FkKCkgPT09IGZhbHNlID8gJ2Rpc2FibGVkJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIklzU3RhdGVUb1VwbG9hZCgpID09PSBmYWxzZSA/ICdkaXNhYmxlZCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tc2Vjb25kYXJ5XT1cIiEoaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZCkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIkljb25VcGxvYWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHItMlwiPjwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGJ1dHRvbnVwbG9hZCA/IGJ1dHRvbnVwbG9hZCA6IChsbmdSZXNvdXJjZVNlcnZpY2UuR2V0U3RyaW5nKHZhbGlkYXRpb25LZXlTZXJ2aWNlLlVwbG9hZEJ1dHRvblVwbG9hZCkgfCBhc3luYykgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzbWFsbFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVscHRleHRtb2RlID09PSAndGV4dCcgJiYgaGVscHRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtbXV0ZWRcIj5cbiAgICAgICAgICAgICAgICB7eyBoZWxwdGV4dCB9fVxuICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzaW5saW5lZXJyb3JlbmFibGVkICYmIGludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cbiAgICAgICAgICAgICAgICB7eyBHZXRFcnJvck1lc3NhZ2UoKSB8IGFzeW5jIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dCAmJiBkaXNhYmxlbGFiZWxcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wtcGxhaW50ZXh0IGFsaWduLXNlbGYtdG9wIG1sLTIgbXItMSB3LWF1dG9cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiW2NvbXBvbmVudEhlaWdodCB8IHRvQ29udHJvbEhlaWdodF1cIj5cbiAgICAgICAgICAgIDxzYWMtdG9vbHRpcFxuICAgICAgICAgICAgICAgIFt0b29sdGlwdGV4dF09XCJoZWxwdGV4dFwiXG4gICAgICAgICAgICAgICAgW2lubGluZW1vZGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIkhlbHB0ZXh0VG9vbHRpcEljb25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NhYy10b29sdGlwPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -8,23 +8,30 @@ import { SacUploadMultipleComponent } from './uploadmultiple';
8
8
  import * as i0 from "@angular/core";
9
9
  class SACBootstrap4UploadModule {
10
10
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SACBootstrap4UploadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: SACBootstrap4UploadModule, imports: [CommonModule, FormsModule, SacUploadComponent,
11
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: SACBootstrap4UploadModule, imports: [CommonModule,
12
+ FormsModule,
13
+ SacUploadComponent,
12
14
  SacUploadMultipleComponent,
13
15
  SacDropzoneSingleComponent,
14
16
  SacDropzoneMultipleComponent], exports: [SacUploadComponent,
15
17
  SacUploadMultipleComponent,
16
18
  SacDropzoneSingleComponent,
17
19
  SacDropzoneMultipleComponent] }); }
18
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SACBootstrap4UploadModule, imports: [CommonModule, FormsModule] }); }
20
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SACBootstrap4UploadModule, imports: [CommonModule,
21
+ FormsModule] }); }
19
22
  }
20
23
  export { SACBootstrap4UploadModule };
21
24
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SACBootstrap4UploadModule, decorators: [{
22
25
  type: NgModule,
23
26
  args: [{
24
- imports: [CommonModule, FormsModule, SacUploadComponent,
27
+ imports: [
28
+ CommonModule,
29
+ FormsModule,
30
+ SacUploadComponent,
25
31
  SacUploadMultipleComponent,
26
32
  SacDropzoneSingleComponent,
27
- SacDropzoneMultipleComponent],
33
+ SacDropzoneMultipleComponent,
34
+ ],
28
35
  exports: [
29
36
  SacUploadComponent,
30
37
  SacUploadMultipleComponent,
@@ -33,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33
40
  ],
34
41
  }]
35
42
  }] });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1ib290c3RyYXA0L3NyYy9jb250cm9scy91cGxvYWQvdXBsb2FkLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzlDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQUU5RCxNQVlhLHlCQUF5QjsrR0FBekIseUJBQXlCO2dIQUF6Qix5QkFBeUIsWUFYeEIsWUFBWSxFQUFFLFdBQVcsRUFBRSxrQkFBa0I7WUFDbkQsMEJBQTBCO1lBQzFCLDBCQUEwQjtZQUMxQiw0QkFBNEIsYUFFNUIsa0JBQWtCO1lBQ2xCLDBCQUEwQjtZQUMxQiwwQkFBMEI7WUFDMUIsNEJBQTRCO2dIQUd2Qix5QkFBeUIsWUFYeEIsWUFBWSxFQUFFLFdBQVc7O1NBVzFCLHlCQUF5Qjs0RkFBekIseUJBQXlCO2tCQVpyQyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsa0JBQWtCO3dCQUNuRCwwQkFBMEI7d0JBQzFCLDBCQUEwQjt3QkFDMUIsNEJBQTRCLENBQUM7b0JBQ2pDLE9BQU8sRUFBRTt3QkFDTCxrQkFBa0I7d0JBQ2xCLDBCQUEwQjt3QkFDMUIsMEJBQTBCO3dCQUMxQiw0QkFBNEI7cUJBQy9CO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNhY0Ryb3B6b25lTXVsdGlwbGVDb21wb25lbnQgfSBmcm9tICcuL2Ryb3B6b25lbXVsdGlwbGUnO1xyXG5pbXBvcnQgeyBTYWNEcm9wem9uZVNpbmdsZUNvbXBvbmVudCB9IGZyb20gJy4vZHJvcHpvbmVzaW5nbGUnO1xyXG5pbXBvcnQgeyBTYWNVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuL3VwbG9hZCc7XHJcbmltcG9ydCB7IFNhY1VwbG9hZE11bHRpcGxlQ29tcG9uZW50IH0gZnJvbSAnLi91cGxvYWRtdWx0aXBsZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFNhY1VwbG9hZENvbXBvbmVudCxcclxuICAgICAgICBTYWNVcGxvYWRNdWx0aXBsZUNvbXBvbmVudCxcclxuICAgICAgICBTYWNEcm9wem9uZVNpbmdsZUNvbXBvbmVudCxcclxuICAgICAgICBTYWNEcm9wem9uZU11bHRpcGxlQ29tcG9uZW50XSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgICBTYWNVcGxvYWRDb21wb25lbnQsXHJcbiAgICAgICAgU2FjVXBsb2FkTXVsdGlwbGVDb21wb25lbnQsXHJcbiAgICAgICAgU2FjRHJvcHpvbmVTaW5nbGVDb21wb25lbnQsXHJcbiAgICAgICAgU2FjRHJvcHpvbmVNdWx0aXBsZUNvbXBvbmVudCxcclxuICAgIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTQUNCb290c3RyYXA0VXBsb2FkTW9kdWxlIHt9XHJcbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1ib290c3RyYXA0L3NyYy9jb250cm9scy91cGxvYWQvdXBsb2FkLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzlDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQUU5RCxNQWdCYSx5QkFBeUI7K0dBQXpCLHlCQUF5QjtnSEFBekIseUJBQXlCLFlBZGxDLFlBQVk7WUFDWixXQUFXO1lBQ1gsa0JBQWtCO1lBQ2xCLDBCQUEwQjtZQUMxQiwwQkFBMEI7WUFDMUIsNEJBQTRCLGFBRzVCLGtCQUFrQjtZQUNsQiwwQkFBMEI7WUFDMUIsMEJBQTBCO1lBQzFCLDRCQUE0QjtnSEFHbkIseUJBQXlCLFlBZGxDLFlBQVk7WUFDWixXQUFXOztTQWFGLHlCQUF5Qjs0RkFBekIseUJBQXlCO2tCQWhCckMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGtCQUFrQjt3QkFDbEIsMEJBQTBCO3dCQUMxQiwwQkFBMEI7d0JBQzFCLDRCQUE0QjtxQkFDN0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGtCQUFrQjt3QkFDbEIsMEJBQTBCO3dCQUMxQiwwQkFBMEI7d0JBQzFCLDRCQUE0QjtxQkFDN0I7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2FjRHJvcHpvbmVNdWx0aXBsZUNvbXBvbmVudCB9IGZyb20gJy4vZHJvcHpvbmVtdWx0aXBsZSc7XG5pbXBvcnQgeyBTYWNEcm9wem9uZVNpbmdsZUNvbXBvbmVudCB9IGZyb20gJy4vZHJvcHpvbmVzaW5nbGUnO1xuaW1wb3J0IHsgU2FjVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi91cGxvYWQnO1xuaW1wb3J0IHsgU2FjVXBsb2FkTXVsdGlwbGVDb21wb25lbnQgfSBmcm9tICcuL3VwbG9hZG11bHRpcGxlJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBTYWNVcGxvYWRDb21wb25lbnQsXG4gICAgU2FjVXBsb2FkTXVsdGlwbGVDb21wb25lbnQsXG4gICAgU2FjRHJvcHpvbmVTaW5nbGVDb21wb25lbnQsXG4gICAgU2FjRHJvcHpvbmVNdWx0aXBsZUNvbXBvbmVudCxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFNhY1VwbG9hZENvbXBvbmVudCxcbiAgICBTYWNVcGxvYWRNdWx0aXBsZUNvbXBvbmVudCxcbiAgICBTYWNEcm9wem9uZVNpbmdsZUNvbXBvbmVudCxcbiAgICBTYWNEcm9wem9uZU11bHRpcGxlQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTQUNCb290c3RyYXA0VXBsb2FkTW9kdWxlIHt9XG4iXX0=
@@ -1,25 +1,31 @@
1
+ import { SacToControlHeightPipe } from '../layout/tocontrolheight.pipe';
2
+ import { SacToControlWidthCssPipe } from '../layout/tocontrolwidthcss.pipe';
3
+ import { SacToLabelHeightPipe } from '../layout/tolabelheight.pipe';
4
+ import { SacToLabelWidthCssPipe } from '../layout/tolabelwidthcss.pipe';
5
+ import { SacTooltipComponent } from '../tooltip/tooltip';
1
6
  import { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common';
2
- import { Component, Host, Optional, forwardRef, } from '@angular/core';
7
+ import { Component, Host, Optional, forwardRef } from '@angular/core';
3
8
  import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
4
9
  import { SacUploadMultipleCommon } from '@simpleangularcontrols/sac-common';
5
10
  import * as i0 from "@angular/core";
6
- import * as i1 from "../form/form";
11
+ import * as i1 from "../layout/formlayout.directive";
7
12
  /**
8
13
  * Upload Komponente für den Upload mehrer Files
9
14
  * @see https://github.com/kukhariev/ngx-uploadx/
10
15
  */
11
16
  class SacUploadMultipleComponent extends SacUploadMultipleCommon {
17
+ // #region Constructors
12
18
  /**
13
- * Konstruktor
14
- * @param parent Formular
15
- * @param injector Angular Dependency Injection Service
16
- * @param renderer Angular Rendering Engine
17
- * @param ngZone ngZone
19
+ * Constructor
20
+ * @param formLayout SacFormLayout to define scoped layout settings
21
+ * @param injector Injector for injecting services
22
+ * @param renderer Angular rendering engine
23
+ * @param ngZone ngZone to manage external javascripts
18
24
  */
19
- constructor(parent, injector, renderer, ngZone) {
20
- super(parent, injector, renderer, ngZone);
25
+ constructor(formLayout, injector, renderer, ngZone) {
26
+ super(formLayout, injector, renderer, ngZone);
21
27
  }
22
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacUploadMultipleComponent, deps: [{ token: i1.SacFormDirective, host: true, optional: true }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacUploadMultipleComponent, deps: [{ token: i1.SacFormLayoutDirective, host: true, optional: true }, { token: i0.Injector }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
23
29
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SacUploadMultipleComponent, isStandalone: true, selector: "sac-uploadmultiple", providers: [
24
30
  {
25
31
  provide: NG_VALUE_ACCESSOR,
@@ -31,7 +37,7 @@ class SacUploadMultipleComponent extends SacUploadMultipleCommon {
31
37
  multi: true,
32
38
  useExisting: forwardRef(() => SacUploadMultipleComponent),
33
39
  },
34
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"row form-group\" [class.no-gutters]=\"disablelabel\">\r\n <label\r\n *ngIf=\"disablelabel === false && !isadaptivelabel\"\r\n id=\"{{name}}_label\"\r\n for=\"{{name}}\"\r\n class=\"col-12 col-form-label\"\r\n [ngClass]=\"[labelsize !== 12 ? 'col-md-' + labelsize : 'sr-only']\"\r\n >{{label}}</label\r\n >\r\n <div\r\n class=\"col-12\"\r\n [ngClass]=\"[disablelabel === false ? 'col-md-' + _inputsize : 'col-sm-12']\"\r\n >\r\n <div class=\"upload-component\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div\r\n class=\"btn-group\"\r\n [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\"\r\n >\r\n <div\r\n class=\"btn upload-input custom-file\"\r\n [class.disabled]=\"maxfiles > 0 && uploads.length >= maxfiles\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <i [class]=\"IconBrowse\" class=\"pr-2\"></i>\r\n <span class=\"upload-browse\">Browse</span>\r\n <input\r\n type=\"file\"\r\n class=\"custom-file-input\"\r\n #files\r\n (click)=\"files.value = ''\"\r\n (uploadxState)=\"onUpload($event)\"\r\n multiple\r\n [disabled]=\"maxfiles > 0 && uploads.length >= maxfiles\"\r\n />\r\n </div>\r\n\r\n <div class=\"btn-group\">\r\n <!-- image-preview-clear button -->\r\n <button\r\n class=\"btn\"\r\n (click)=\"cancelAll()\"\r\n [attr.disabled]=\"HasQueueItem() === false ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconDelete\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"(autoupload === false && enablepause) || (autoupload && enablepause && IsPaused() === false)\"\r\n class=\"btn\"\r\n (click)=\"pauseAll()\"\r\n [attr.disabled]=\"IsUploading() === false ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconPause\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"autoupload && enablepause && IsPaused() === true\"\r\n class=\"btn\"\r\n (click)=\"uploadAll()\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconContinue\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"autoupload === false\"\r\n class=\"btn text-nowrap\"\r\n (click)=\"uploadAll()\"\r\n [attr.disabled]=\"IsStateToUpload() === false ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconUpload\" class=\"pr-2\"></span> {{\r\n lngResourceService.GetString('UPLOAD_BUTTON_UPLOAD') | async }}\r\n </button>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\r\n class=\"invalid-feedback\"\r\n >\r\n {{ GetErrorMessage() | async }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngFor=\"let file of uploads\" style=\"margin-top: 5px\">\r\n <div class=\"input-group upload-component upload-multiple\">\r\n <div\r\n class=\"form-control upload-progress\"\r\n [class.is-invalid]=\"invalid && (dirty || touched)\"\r\n >\r\n <div class=\"progress\">\r\n <div\r\n class=\"progress-bar\"\r\n [class.progress-bar-success]=\"file.progress===100\"\r\n role=\"progressbar\"\r\n [attr.aria-valuenow]=\"file.progress\"\r\n aria-valuemin=\"0\"\r\n aria-valuemax=\"100\"\r\n [style.width.%]=\"file.progress\"\r\n >\r\n <span class=\"progress-text text-dark\">{{ file.name }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"input-group-append\">\r\n <!-- image-preview-clear button -->\r\n <button\r\n class=\"btn\"\r\n (click)=\"cancel(file.uploadId)\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconDelete\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"(autoupload === false && enablepause) || (autoupload && enablepause && file.status !== 'paused')\"\r\n class=\"btn\"\r\n (click)=\"pause(file.uploadId)\"\r\n [attr.disabled]=\"file.status !== 'uploading' ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconPause\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"autoupload && enablepause && file.status === 'paused'\"\r\n class=\"btn\"\r\n (click)=\"upload(file.uploadId)\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconContinue\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"autoupload === false\"\r\n class=\"btn text-nowrap\"\r\n (click)=\"upload(file.uploadId)\"\r\n [attr.disabled]=\"file.status !== 'added' && file.status !== 'paused' ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconUpload\" class=\"pr-2\"></span>{{\r\n lngResourceService.GetString('UPLOAD_BUTTON_UPLOAD') | async }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".upload-component .custom-file .custom-file-input{inset:0;position:absolute}.upload-component.upload-multiple .upload-progress .progress{border-top-right-radius:0;border-bottom-right-radius:0}.upload-component.upload-single .upload-progress .progress{border-radius:0}.upload-component .upload-progress{padding:0;border:0}.upload-component .upload-progress .progress{height:calc(2.25rem + 2px)}.upload-component .upload-progress .progress .progress-text{position:absolute;left:0;right:0}\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" }] }); }
40
+ ], 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\">\n </span>\n </sac-tooltip>\n </label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\">\n <div class=\"upload-component\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div\n [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\">\n <div\n class=\"btn-group\"\n [class.btn-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.btn-group-lg]=\"componentHeight === ControlHeight.Large\">\n <div\n class=\"btn upload-input custom-file\"\n [class.disabled]=\"maxfiles > 0 && uploads.length >= maxfiles\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <i\n [ngClass]=\"IconBrowse\"\n class=\"pr-2\"></i>\n <span class=\"upload-browse\">{{\n buttonbrowse ? buttonbrowse : (lngResourceService.GetString(validationKeyService.UploadButtonBrowse) | async)\n }}</span>\n <input\n type=\"file\"\n id=\"{{ name }}_uploadinput\"\n class=\"custom-file-input\"\n #files\n (click)=\"files.value = ''\"\n (uploadxState)=\"onUpload($event)\"\n multiple\n [disabled]=\"maxfiles > 0 && uploads.length >= maxfiles\" />\n </div>\n\n <div\n class=\"btn-group\"\n [class.btn-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.btn-group-lg]=\"componentHeight === ControlHeight.Large\">\n <!-- image-preview-clear button -->\n <button\n class=\"btn\"\n (click)=\"cancelAll()\"\n [attr.disabled]=\"HasQueueItem() === false ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [ngClass]=\"IconDelete\"></span>\n </button>\n <button\n *ngIf=\"(autoupload === false && enablepause) || (autoupload && enablepause && IsPaused() === false)\"\n class=\"btn\"\n (click)=\"pauseAll()\"\n [attr.disabled]=\"IsUploading() === false ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [ngClass]=\"IconPause\"></span>\n </button>\n <button\n *ngIf=\"autoupload && enablepause && IsPaused() === true\"\n class=\"btn\"\n (click)=\"uploadAll()\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [ngClass]=\"IconContinue\"></span>\n </button>\n <button\n *ngIf=\"autoupload === false\"\n class=\"btn text-nowrap\"\n (click)=\"uploadAll()\"\n [attr.disabled]=\"IsStateToUpload() === false ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span\n [ngClass]=\"IconUpload\"\n class=\"pr-2\"></span\n >{{ buttonupload ? buttonupload : (lngResourceService.GetString(validationKeyService.UploadButtonUpload) | async) }}\n </button>\n </div>\n </div>\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 *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n </div>\n </div>\n\n <div\n *ngFor=\"let file of uploads\"\n style=\"margin-top: 5px\">\n <div\n class=\"input-group upload-component upload-multiple\"\n [class.input-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.input-group-lg]=\"componentHeight === ControlHeight.Large\">\n <div\n class=\"form-control upload-progress\"\n [class.is-invalid]=\"invalid && (dirty || touched)\">\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 <button\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 </button>\n <button\n *ngIf=\"(autoupload === false && enablepause) || (autoupload && enablepause && file.status !== 'paused')\"\n class=\"btn\"\n (click)=\"pause(file.uploadId)\"\n [attr.disabled]=\"file.status !== 'uploading' ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [class]=\"IconPause\"></span>\n </button>\n <button\n *ngIf=\"autoupload && enablepause && file.status === 'paused'\"\n class=\"btn\"\n (click)=\"upload(file.uploadId)\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [class]=\"IconContinue\"></span>\n </button>\n <button\n *ngIf=\"autoupload === false\"\n class=\"btn text-nowrap\"\n (click)=\"upload(file.uploadId)\"\n [attr.disabled]=\"file.status !== 'added' && file.status !== 'paused' ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span\n [ngClass]=\"IconUpload\"\n class=\"pr-2\"></span\n >{{ buttonupload ? buttonupload : (lngResourceService.GetString(validationKeyService.UploadButtonUpload) | async) }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n </div>\n</div>\n", styles: [".upload-component .custom-file{height:100%}.upload-component .custom-file .custom-file-input{inset:0;position:absolute}.upload-component.upload-multiple .upload-progress .progress{border-top-right-radius:0;border-bottom-right-radius:0}.upload-component.upload-single .upload-progress .progress{border-radius:0}.upload-component .upload-progress{padding:0;border:0}.upload-component .upload-progress .progress{height:100%}.upload-component .upload-progress .progress .progress-text{position:absolute;left:0;right:0}\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: "pipe", type: SacToControlHeightPipe, name: "toControlHeight" }, { kind: "component", type: SacTooltipComponent, selector: "sac-tooltip" }] }); }
35
41
  }
36
42
  export { SacUploadMultipleComponent };
37
43
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacUploadMultipleComponent, decorators: [{
@@ -47,10 +53,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
47
53
  multi: true,
48
54
  useExisting: forwardRef(() => SacUploadMultipleComponent),
49
55
  },
50
- ], standalone: true, imports: [NgIf, NgClass, NgFor, AsyncPipe], template: "<div class=\"row form-group\" [class.no-gutters]=\"disablelabel\">\r\n <label\r\n *ngIf=\"disablelabel === false && !isadaptivelabel\"\r\n id=\"{{name}}_label\"\r\n for=\"{{name}}\"\r\n class=\"col-12 col-form-label\"\r\n [ngClass]=\"[labelsize !== 12 ? 'col-md-' + labelsize : 'sr-only']\"\r\n >{{label}}</label\r\n >\r\n <div\r\n class=\"col-12\"\r\n [ngClass]=\"[disablelabel === false ? 'col-md-' + _inputsize : 'col-sm-12']\"\r\n >\r\n <div class=\"upload-component\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div\r\n class=\"btn-group\"\r\n [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\"\r\n >\r\n <div\r\n class=\"btn upload-input custom-file\"\r\n [class.disabled]=\"maxfiles > 0 && uploads.length >= maxfiles\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <i [class]=\"IconBrowse\" class=\"pr-2\"></i>\r\n <span class=\"upload-browse\">Browse</span>\r\n <input\r\n type=\"file\"\r\n class=\"custom-file-input\"\r\n #files\r\n (click)=\"files.value = ''\"\r\n (uploadxState)=\"onUpload($event)\"\r\n multiple\r\n [disabled]=\"maxfiles > 0 && uploads.length >= maxfiles\"\r\n />\r\n </div>\r\n\r\n <div class=\"btn-group\">\r\n <!-- image-preview-clear button -->\r\n <button\r\n class=\"btn\"\r\n (click)=\"cancelAll()\"\r\n [attr.disabled]=\"HasQueueItem() === false ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconDelete\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"(autoupload === false && enablepause) || (autoupload && enablepause && IsPaused() === false)\"\r\n class=\"btn\"\r\n (click)=\"pauseAll()\"\r\n [attr.disabled]=\"IsUploading() === false ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconPause\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"autoupload && enablepause && IsPaused() === true\"\r\n class=\"btn\"\r\n (click)=\"uploadAll()\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconContinue\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"autoupload === false\"\r\n class=\"btn text-nowrap\"\r\n (click)=\"uploadAll()\"\r\n [attr.disabled]=\"IsStateToUpload() === false ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconUpload\" class=\"pr-2\"></span> {{\r\n lngResourceService.GetString('UPLOAD_BUTTON_UPLOAD') | async }}\r\n </button>\r\n </div>\r\n </div>\r\n <div\r\n *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\r\n class=\"invalid-feedback\"\r\n >\r\n {{ GetErrorMessage() | async }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngFor=\"let file of uploads\" style=\"margin-top: 5px\">\r\n <div class=\"input-group upload-component upload-multiple\">\r\n <div\r\n class=\"form-control upload-progress\"\r\n [class.is-invalid]=\"invalid && (dirty || touched)\"\r\n >\r\n <div class=\"progress\">\r\n <div\r\n class=\"progress-bar\"\r\n [class.progress-bar-success]=\"file.progress===100\"\r\n role=\"progressbar\"\r\n [attr.aria-valuenow]=\"file.progress\"\r\n aria-valuemin=\"0\"\r\n aria-valuemax=\"100\"\r\n [style.width.%]=\"file.progress\"\r\n >\r\n <span class=\"progress-text text-dark\">{{ file.name }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"input-group-append\">\r\n <!-- image-preview-clear button -->\r\n <button\r\n class=\"btn\"\r\n (click)=\"cancel(file.uploadId)\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconDelete\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"(autoupload === false && enablepause) || (autoupload && enablepause && file.status !== 'paused')\"\r\n class=\"btn\"\r\n (click)=\"pause(file.uploadId)\"\r\n [attr.disabled]=\"file.status !== 'uploading' ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconPause\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"autoupload && enablepause && file.status === 'paused'\"\r\n class=\"btn\"\r\n (click)=\"upload(file.uploadId)\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconContinue\"></span>\r\n </button>\r\n <button\r\n *ngIf=\"autoupload === false\"\r\n class=\"btn text-nowrap\"\r\n (click)=\"upload(file.uploadId)\"\r\n [attr.disabled]=\"file.status !== 'added' && file.status !== 'paused' ? 'disabled' : null\"\r\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\r\n [class.btn-danger]=\"invalid && (dirty || touched)\"\r\n >\r\n <span [class]=\"IconUpload\" class=\"pr-2\"></span>{{\r\n lngResourceService.GetString('UPLOAD_BUTTON_UPLOAD') | async }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".upload-component .custom-file .custom-file-input{inset:0;position:absolute}.upload-component.upload-multiple .upload-progress .progress{border-top-right-radius:0;border-bottom-right-radius:0}.upload-component.upload-single .upload-progress .progress{border-radius:0}.upload-component .upload-progress{padding:0;border:0}.upload-component .upload-progress .progress{height:calc(2.25rem + 2px)}.upload-component .upload-progress .progress .progress-text{position:absolute;left:0;right:0}\n"] }]
51
- }], ctorParameters: function () { return [{ type: i1.SacFormDirective, decorators: [{
56
+ ], standalone: true, imports: [
57
+ NgIf,
58
+ NgClass,
59
+ NgFor,
60
+ AsyncPipe,
61
+ SacToLabelWidthCssPipe,
62
+ SacToControlWidthCssPipe,
63
+ SacToLabelHeightPipe,
64
+ SacToControlHeightPipe,
65
+ SacTooltipComponent,
66
+ ], 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\">\n </span>\n </sac-tooltip>\n </label>\n <div\n class=\"col-12\"\n [ngClass]=\"[disablelabel === false ? (this.labelSizes | toControlWidthCss) : '']\">\n <div class=\"upload-component\">\n <div class=\"row\">\n <div class=\"col-12\">\n <div\n [class.d-flex]=\"helptextmode === 'tooltip' && helptext && disablelabel\"\n [class.is-invalid]=\"isinlineerrorenabled && invalid && (dirty || touched)\">\n <div\n class=\"btn-group\"\n [class.btn-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.btn-group-lg]=\"componentHeight === ControlHeight.Large\">\n <div\n class=\"btn upload-input custom-file\"\n [class.disabled]=\"maxfiles > 0 && uploads.length >= maxfiles\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <i\n [ngClass]=\"IconBrowse\"\n class=\"pr-2\"></i>\n <span class=\"upload-browse\">{{\n buttonbrowse ? buttonbrowse : (lngResourceService.GetString(validationKeyService.UploadButtonBrowse) | async)\n }}</span>\n <input\n type=\"file\"\n id=\"{{ name }}_uploadinput\"\n class=\"custom-file-input\"\n #files\n (click)=\"files.value = ''\"\n (uploadxState)=\"onUpload($event)\"\n multiple\n [disabled]=\"maxfiles > 0 && uploads.length >= maxfiles\" />\n </div>\n\n <div\n class=\"btn-group\"\n [class.btn-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.btn-group-lg]=\"componentHeight === ControlHeight.Large\">\n <!-- image-preview-clear button -->\n <button\n class=\"btn\"\n (click)=\"cancelAll()\"\n [attr.disabled]=\"HasQueueItem() === false ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [ngClass]=\"IconDelete\"></span>\n </button>\n <button\n *ngIf=\"(autoupload === false && enablepause) || (autoupload && enablepause && IsPaused() === false)\"\n class=\"btn\"\n (click)=\"pauseAll()\"\n [attr.disabled]=\"IsUploading() === false ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [ngClass]=\"IconPause\"></span>\n </button>\n <button\n *ngIf=\"autoupload && enablepause && IsPaused() === true\"\n class=\"btn\"\n (click)=\"uploadAll()\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [ngClass]=\"IconContinue\"></span>\n </button>\n <button\n *ngIf=\"autoupload === false\"\n class=\"btn text-nowrap\"\n (click)=\"uploadAll()\"\n [attr.disabled]=\"IsStateToUpload() === false ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span\n [ngClass]=\"IconUpload\"\n class=\"pr-2\"></span\n >{{ buttonupload ? buttonupload : (lngResourceService.GetString(validationKeyService.UploadButtonUpload) | async) }}\n </button>\n </div>\n </div>\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 *ngIf=\"isinlineerrorenabled && invalid && (dirty || touched)\"\n class=\"invalid-feedback\">\n {{ GetErrorMessage() | async }}\n </div>\n </div>\n </div>\n\n <div\n *ngFor=\"let file of uploads\"\n style=\"margin-top: 5px\">\n <div\n class=\"input-group upload-component upload-multiple\"\n [class.input-group-sm]=\"componentHeight === ControlHeight.Small\"\n [class.input-group-lg]=\"componentHeight === ControlHeight.Large\">\n <div\n class=\"form-control upload-progress\"\n [class.is-invalid]=\"invalid && (dirty || touched)\">\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 <button\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 </button>\n <button\n *ngIf=\"(autoupload === false && enablepause) || (autoupload && enablepause && file.status !== 'paused')\"\n class=\"btn\"\n (click)=\"pause(file.uploadId)\"\n [attr.disabled]=\"file.status !== 'uploading' ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [class]=\"IconPause\"></span>\n </button>\n <button\n *ngIf=\"autoupload && enablepause && file.status === 'paused'\"\n class=\"btn\"\n (click)=\"upload(file.uploadId)\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span [class]=\"IconContinue\"></span>\n </button>\n <button\n *ngIf=\"autoupload === false\"\n class=\"btn text-nowrap\"\n (click)=\"upload(file.uploadId)\"\n [attr.disabled]=\"file.status !== 'added' && file.status !== 'paused' ? 'disabled' : null\"\n [class.btn-secondary]=\"!(invalid && (dirty || touched))\"\n [class.btn-danger]=\"invalid && (dirty || touched)\">\n <span\n [ngClass]=\"IconUpload\"\n class=\"pr-2\"></span\n >{{ buttonupload ? buttonupload : (lngResourceService.GetString(validationKeyService.UploadButtonUpload) | async) }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <small\n *ngIf=\"helptextmode === 'text' && helptext\"\n class=\"form-text text-muted\">\n {{ helptext }}\n </small>\n </div>\n</div>\n", styles: [".upload-component .custom-file{height:100%}.upload-component .custom-file .custom-file-input{inset:0;position:absolute}.upload-component.upload-multiple .upload-progress .progress{border-top-right-radius:0;border-bottom-right-radius:0}.upload-component.upload-single .upload-progress .progress{border-radius:0}.upload-component .upload-progress{padding:0;border:0}.upload-component .upload-progress .progress{height:100%}.upload-component .upload-progress .progress .progress-text{position:absolute;left:0;right:0}\n"] }]
67
+ }], ctorParameters: function () { return [{ type: i1.SacFormLayoutDirective, decorators: [{
52
68
  type: Host
53
69
  }, {
54
70
  type: Optional
55
71
  }] }, { type: i0.Injector }, { type: i0.Renderer2 }, { type: i0.NgZone }]; } });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkbXVsdGlwbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zYWMtYm9vdHN0cmFwNC9zcmMvY29udHJvbHMvdXBsb2FkL3VwbG9hZG11bHRpcGxlLnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2FjLWJvb3RzdHJhcDQvc3JjL2NvbnRyb2xzL3VwbG9hZC91cGxvYWRtdWx0aXBsZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsU0FBUyxFQUNULElBQUksRUFHSixRQUFRLEVBRVIsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBRzVFOzs7R0FHRztBQUNILE1BbUJhLDBCQUEyQixTQUFRLHVCQUF1QjtJQUNyRTs7Ozs7O09BTUc7SUFDSCxZQUNzQixNQUF3QixFQUM1QyxRQUFrQixFQUNsQixRQUFtQixFQUNuQixNQUFjO1FBRWQsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7K0dBZlUsMEJBQTBCO21HQUExQiwwQkFBMEIsaUVBZjFCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsV0FBVyxFQUFFLDBCQUEwQjthQUN4QztZQUNEO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDO2FBQzFEO1NBQ0YsaURDakNILHExTkE2SkEsa2lCRDFIWSxJQUFJLDZGQUFFLE9BQU8sb0ZBQUUsS0FBSyw4R0FBRSxTQUFTOztTQUU5QiwwQkFBMEI7NEZBQTFCLDBCQUEwQjtrQkFuQnRDLFNBQVM7K0JBQ0Usb0JBQW9CLGFBR25CO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsNEJBQTRCO3lCQUN4Qzt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMkJBQTJCLENBQUM7eUJBQzFEO3FCQUNGLGNBQ1csSUFBSSxXQUNQLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDOzswQkFXdkMsSUFBSTs7MEJBQUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBIb3N0LFxyXG4gIEluamVjdG9yLFxyXG4gIE5nWm9uZSxcclxuICBPcHRpb25hbCxcclxuICBSZW5kZXJlcjIsXHJcbiAgZm9yd2FyZFJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNhY1VwbG9hZE11bHRpcGxlQ29tbW9uIH0gZnJvbSAnQHNpbXBsZWFuZ3VsYXJjb250cm9scy9zYWMtY29tbW9uJztcclxuaW1wb3J0IHsgU2FjRm9ybURpcmVjdGl2ZSB9IGZyb20gJy4uL2Zvcm0vZm9ybSc7XHJcblxyXG4vKipcclxuICogVXBsb2FkIEtvbXBvbmVudGUgZsO8ciBkZW4gVXBsb2FkIG1laHJlciBGaWxlc1xyXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9rdWtoYXJpZXYvbmd4LXVwbG9hZHgvXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NhYy11cGxvYWRtdWx0aXBsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZG11bHRpcGxlLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgdXNlRXhpc3Rpbmc6IFNhY1VwbG9hZE11bHRpcGxlQ29tcG9uZW50LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNhY1VwbG9hZE11bHRpcGxlQ29tcG9uZW50KSxcclxuICAgIH0sXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtOZ0lmLCBOZ0NsYXNzLCBOZ0ZvciwgQXN5bmNQaXBlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNhY1VwbG9hZE11bHRpcGxlQ29tcG9uZW50IGV4dGVuZHMgU2FjVXBsb2FkTXVsdGlwbGVDb21tb24ge1xyXG4gIC8qKlxyXG4gICAqIEtvbnN0cnVrdG9yXHJcbiAgICogQHBhcmFtIHBhcmVudCBGb3JtdWxhclxyXG4gICAqIEBwYXJhbSBpbmplY3RvciBBbmd1bGFyIERlcGVuZGVuY3kgSW5qZWN0aW9uIFNlcnZpY2VcclxuICAgKiBAcGFyYW0gcmVuZGVyZXIgQW5ndWxhciBSZW5kZXJpbmcgRW5naW5lXHJcbiAgICogQHBhcmFtIG5nWm9uZSBuZ1pvbmVcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBIb3N0KCkgQE9wdGlvbmFsKCkgcGFyZW50OiBTYWNGb3JtRGlyZWN0aXZlLFxyXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIG5nWm9uZTogTmdab25lXHJcbiAgKSB7XHJcbiAgICBzdXBlcihwYXJlbnQsIGluamVjdG9yLCByZW5kZXJlciwgbmdab25lKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCIgW2NsYXNzLm5vLWd1dHRlcnNdPVwiZGlzYWJsZWxhYmVsXCI+XHJcbiAgPGxhYmVsXHJcbiAgICAqbmdJZj1cImRpc2FibGVsYWJlbCA9PT0gZmFsc2UgJiYgIWlzYWRhcHRpdmVsYWJlbFwiXHJcbiAgICBpZD1cInt7bmFtZX19X2xhYmVsXCJcclxuICAgIGZvcj1cInt7bmFtZX19XCJcclxuICAgIGNsYXNzPVwiY29sLTEyIGNvbC1mb3JtLWxhYmVsXCJcclxuICAgIFtuZ0NsYXNzXT1cIltsYWJlbHNpemUgIT09IDEyID8gICdjb2wtbWQtJyArIGxhYmVsc2l6ZSA6ICdzci1vbmx5J11cIlxyXG4gICAgPnt7bGFiZWx9fTwvbGFiZWxcclxuICA+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJjb2wtMTJcIlxyXG4gICAgW25nQ2xhc3NdPVwiW2Rpc2FibGVsYWJlbCA9PT0gZmFsc2UgPyAnY29sLW1kLScgKyBfaW5wdXRzaXplIDogJ2NvbC1zbS0xMiddXCJcclxuICA+XHJcbiAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWNvbXBvbmVudFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0bi1ncm91cFwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImlzaW5saW5lZXJyb3JlbmFibGVkICYmIGludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIHVwbG9hZC1pbnB1dCBjdXN0b20tZmlsZVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIm1heGZpbGVzID4gMCAmJiAgdXBsb2Fkcy5sZW5ndGggPj0gbWF4ZmlsZXNcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5idG4tc2Vjb25kYXJ5XT1cIiEoaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZCkpXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuYnRuLWRhbmdlcl09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiSWNvbkJyb3dzZVwiIGNsYXNzPVwicHItMlwiPjwvaT5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZC1icm93c2VcIj5Ccm93c2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1maWxlLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICNmaWxlc1xyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbGVzLnZhbHVlID0gJydcIlxyXG4gICAgICAgICAgICAgICAgKHVwbG9hZHhTdGF0ZSk9XCJvblVwbG9hZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWF4ZmlsZXMgPiAwICYmICB1cGxvYWRzLmxlbmd0aCA+PSBtYXhmaWxlc1wiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSBpbWFnZS1wcmV2aWV3LWNsZWFyIGJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0blwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsQWxsKClcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiSGFzUXVldWVJdGVtKCkgPT09IGZhbHNlID8gJ2Rpc2FibGVkJyA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1kYW5nZXJdPVwiaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJJY29uRGVsZXRlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGF1dG91cGxvYWQgPT09IGZhbHNlICYmIGVuYWJsZXBhdXNlKSB8fCAoYXV0b3VwbG9hZCAmJiBlbmFibGVwYXVzZSAmJiBJc1BhdXNlZCgpID09PSBmYWxzZSlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhdXNlQWxsKClcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiSXNVcGxvYWRpbmcoKSA9PT0gZmFsc2UgPyAnZGlzYWJsZWQnIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLXNlY29uZGFyeV09XCIhKGludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpKVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLWRhbmdlcl09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIkljb25QYXVzZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImF1dG91cGxvYWQgJiYgZW5hYmxlcGF1c2UgJiYgSXNQYXVzZWQoKSA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0blwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkQWxsKClcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1kYW5nZXJdPVwiaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJJY29uQ29udGludWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhdXRvdXBsb2FkID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkQWxsKClcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiSXNTdGF0ZVRvVXBsb2FkKCkgPT09IGZhbHNlID8gICdkaXNhYmxlZCcgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tc2Vjb25kYXJ5XT1cIiEoaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZCkpXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiSWNvblVwbG9hZFwiIGNsYXNzPVwicHItMlwiPjwvc3Bhbj4ge3tcclxuICAgICAgICAgICAgICAgIGxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcoJ1VQTE9BRF9CVVRUT05fVVBMT0FEJykgfCBhc3luYyB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cImlzaW5saW5lZXJyb3JlbmFibGVkICYmIGludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgR2V0RXJyb3JNZXNzYWdlKCkgfCBhc3luYyB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsZSBvZiB1cGxvYWRzXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiA1cHhcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdXBsb2FkLWNvbXBvbmVudCB1cGxvYWQtbXVsdGlwbGVcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdXBsb2FkLXByb2dyZXNzXCJcclxuICAgICAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwiaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInByb2dyZXNzLWJhclwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MucHJvZ3Jlc3MtYmFyLXN1Y2Nlc3NdPVwiZmlsZS5wcm9ncmVzcz09PTEwMFwiXHJcbiAgICAgICAgICAgICAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJmaWxlLnByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgIGFyaWEtdmFsdWVtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgIGFyaWEtdmFsdWVtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiZmlsZS5wcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9ncmVzcy10ZXh0IHRleHQtZGFya1wiPnt7IGZpbGUubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cclxuICAgICAgICAgICAgPCEtLSBpbWFnZS1wcmV2aWV3LWNsZWFyIGJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsKGZpbGUudXBsb2FkSWQpXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuYnRuLXNlY29uZGFyeV09XCIhKGludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpKVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1kYW5nZXJdPVwiaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIkljb25EZWxldGVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIoYXV0b3VwbG9hZCA9PT0gZmFsc2UgJiYgZW5hYmxlcGF1c2UpIHx8IChhdXRvdXBsb2FkICYmIGVuYWJsZXBhdXNlICYmIGZpbGUuc3RhdHVzICE9PSAncGF1c2VkJylcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicGF1c2UoZmlsZS51cGxvYWRJZClcIlxyXG4gICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImZpbGUuc3RhdHVzICE9PSAndXBsb2FkaW5nJyA/ICdkaXNhYmxlZCcgOiBudWxsXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuYnRuLXNlY29uZGFyeV09XCIhKGludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpKVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1kYW5nZXJdPVwiaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIkljb25QYXVzZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAqbmdJZj1cImF1dG91cGxvYWQgJiYgZW5hYmxlcGF1c2UgJiYgZmlsZS5zdGF0dXMgPT09ICdwYXVzZWQnXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ0blwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInVwbG9hZChmaWxlLnVwbG9hZElkKVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5idG4tZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJJY29uQ29udGludWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJhdXRvdXBsb2FkID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJ1cGxvYWQoZmlsZS51cGxvYWRJZClcIlxyXG4gICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImZpbGUuc3RhdHVzICE9PSAnYWRkZWQnICYmIGZpbGUuc3RhdHVzICE9PSAncGF1c2VkJyA/ICAnZGlzYWJsZWQnIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5idG4tZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJJY29uVXBsb2FkXCIgY2xhc3M9XCJwci0yXCI+PC9zcGFuPnt7XHJcbiAgICAgICAgICAgICAgbG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZygnVVBMT0FEX0JVVFRPTl9VUExPQUQnKSB8IGFzeW5jIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkbXVsdGlwbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zYWMtYm9vdHN0cmFwNC9zcmMvY29udHJvbHMvdXBsb2FkL3VwbG9hZG11bHRpcGxlLnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2FjLWJvb3RzdHJhcDQvc3JjL2NvbnRyb2xzL3VwbG9hZC91cGxvYWRtdWx0aXBsZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBb0IsUUFBUSxFQUFhLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQUU1RTs7O0dBR0c7QUFDSCxNQTZCYSwwQkFBMkIsU0FBUSx1QkFBdUI7SUFDbkUsdUJBQXVCO0lBRXZCOzs7Ozs7T0FNRztJQUNILFlBQ3dCLFVBQWtDLEVBQ3RELFFBQWtCLEVBQ2xCLFFBQW1CLEVBQ25CLE1BQWM7UUFFZCxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQzsrR0FqQlEsMEJBQTBCO21HQUExQiwwQkFBMEIsaUVBekJ4QjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFdBQVcsRUFBRSwwQkFBMEI7YUFDMUM7WUFDRDtnQkFDSSxPQUFPLEVBQUUsYUFBYTtnQkFDdEIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQzthQUM1RDtTQUNKLGlEQzlCTCw2aldBdU1BLDhqQkR0S1EsSUFBSSw2RkFDSixPQUFPLG9GQUNQLEtBQUssOEdBQ0wsU0FBUyx5Q0FDVCxzQkFBc0IsbURBQ3RCLHdCQUF3QixxREFDeEIsb0JBQW9CLGlEQUNwQixzQkFBc0Isd0RBQ3RCLG1CQUFtQjs7U0FHZCwwQkFBMEI7NEZBQTFCLDBCQUEwQjtrQkE3QnRDLFNBQVM7K0JBQ0ksb0JBQW9CLGFBR25CO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsNEJBQTRCO3lCQUMxQzt3QkFDRDs0QkFDSSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMkJBQTJCLENBQUM7eUJBQzVEO3FCQUNKLGNBQ1csSUFBSSxXQUNQO3dCQUNMLElBQUk7d0JBQ0osT0FBTzt3QkFDUCxLQUFLO3dCQUNMLFNBQVM7d0JBQ1Qsc0JBQXNCO3dCQUN0Qix3QkFBd0I7d0JBQ3hCLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3dCQUN0QixtQkFBbUI7cUJBQ3RCOzswQkFhSSxJQUFJOzswQkFBSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2FjRm9ybUxheW91dERpcmVjdGl2ZSB9IGZyb20gJy4uL2xheW91dC9mb3JtbGF5b3V0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTYWNUb0NvbnRyb2xIZWlnaHRQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvY29udHJvbGhlaWdodC5waXBlJztcbmltcG9ydCB7IFNhY1RvQ29udHJvbFdpZHRoQ3NzUGlwZSB9IGZyb20gJy4uL2xheW91dC90b2NvbnRyb2x3aWR0aGNzcy5waXBlJztcbmltcG9ydCB7IFNhY1RvTGFiZWxIZWlnaHRQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvbGFiZWxoZWlnaHQucGlwZSc7XG5pbXBvcnQgeyBTYWNUb0xhYmVsV2lkdGhDc3NQaXBlIH0gZnJvbSAnLi4vbGF5b3V0L3RvbGFiZWx3aWR0aGNzcy5waXBlJztcbmltcG9ydCB7IFNhY1Rvb2x0aXBDb21wb25lbnQgfSBmcm9tICcuLi90b29sdGlwL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEhvc3QsIEluamVjdG9yLCBOZ1pvbmUsIE9wdGlvbmFsLCBSZW5kZXJlcjIsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2FjVXBsb2FkTXVsdGlwbGVDb21tb24gfSBmcm9tICdAc2ltcGxlYW5ndWxhcmNvbnRyb2xzL3NhYy1jb21tb24nO1xuXG4vKipcbiAqIFVwbG9hZCBLb21wb25lbnRlIGbDvHIgZGVuIFVwbG9hZCBtZWhyZXIgRmlsZXNcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2t1a2hhcmlldi9uZ3gtdXBsb2FkeC9cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzYWMtdXBsb2FkbXVsdGlwbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91cGxvYWRtdWx0aXBsZS5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi91cGxvYWQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFNhY1VwbG9hZE11bHRpcGxlQ29tcG9uZW50LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTYWNVcGxvYWRNdWx0aXBsZUNvbXBvbmVudCksXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIEFzeW5jUGlwZSxcbiAgICAgICAgU2FjVG9MYWJlbFdpZHRoQ3NzUGlwZSxcbiAgICAgICAgU2FjVG9Db250cm9sV2lkdGhDc3NQaXBlLFxuICAgICAgICBTYWNUb0xhYmVsSGVpZ2h0UGlwZSxcbiAgICAgICAgU2FjVG9Db250cm9sSGVpZ2h0UGlwZSxcbiAgICAgICAgU2FjVG9vbHRpcENvbXBvbmVudCxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTYWNVcGxvYWRNdWx0aXBsZUNvbXBvbmVudCBleHRlbmRzIFNhY1VwbG9hZE11bHRpcGxlQ29tbW9uIHtcbiAgICAvLyAjcmVnaW9uIENvbnN0cnVjdG9yc1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0gZm9ybUxheW91dCBTYWNGb3JtTGF5b3V0IHRvIGRlZmluZSBzY29wZWQgbGF5b3V0IHNldHRpbmdzXG4gICAgICogQHBhcmFtIGluamVjdG9yIEluamVjdG9yIGZvciBpbmplY3Rpbmcgc2VydmljZXNcbiAgICAgKiBAcGFyYW0gcmVuZGVyZXIgQW5ndWxhciByZW5kZXJpbmcgZW5naW5lXG4gICAgICogQHBhcmFtIG5nWm9uZSBuZ1pvbmUgdG8gbWFuYWdlIGV4dGVybmFsIGphdmFzY3JpcHRzXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBIb3N0KCkgQE9wdGlvbmFsKCkgZm9ybUxheW91dDogU2FjRm9ybUxheW91dERpcmVjdGl2ZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBuZ1pvbmU6IE5nWm9uZVxuICAgICkge1xuICAgICAgICBzdXBlcihmb3JtTGF5b3V0LCBpbmplY3RvciwgcmVuZGVyZXIsIG5nWm9uZSk7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcbn1cbiIsIjxkaXZcbiAgICBpZD1cInt7IG5hbWUgfX1cIlxuICAgIGNsYXNzPVwicm93IGZvcm0tZ3JvdXBcIlxuICAgIFtjbGFzcy5uby1ndXR0ZXJzXT1cImRpc2FibGVsYWJlbFwiPlxuICAgIDxsYWJlbFxuICAgICAgICAqbmdJZj1cImRpc2FibGVsYWJlbCA9PT0gZmFsc2UgJiYgIWlzQWRhcHRpdmVMYWJlbFwiXG4gICAgICAgIGlkPVwie3sgbmFtZSB9fV9sYWJlbFwiXG4gICAgICAgIGZvcj1cInt7IG5hbWUgfX1fdXBsb2FkaW5wdXRcIlxuICAgICAgICBjbGFzcz1cImNvbC0xMiBjb2wtZm9ybS1sYWJlbCBkLWZsZXhcIlxuICAgICAgICBbbmdDbGFzc109XCJbZGlzYWJsZWxhYmVsID09PSBmYWxzZSA/ICh0aGlzLmxhYmVsU2l6ZXMgfCB0b0xhYmVsV2lkdGhDc3MpIDogJ3NyLW9ubHknLCBjb21wb25lbnRIZWlnaHQgfCB0b0xhYmVsSGVpZ2h0XVwiXG4gICAgICAgIFtjbGFzcy5yZXF1aXJlZF09XCJpc3JlcXVpcmVkXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dCBmbGV4LWdyb3ctMFwiXG4gICAgICAgICAgICBbY2xhc3MuZmxleC1zbS1ncm93LTFdPVwic3BsaXRsYWJlbGFuZGhlbHB0ZXh0XCI+XG4gICAgICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNhYy10b29sdGlwXG4gICAgICAgICAgICAqbmdJZj1cImhlbHB0ZXh0bW9kZSA9PT0gJ3Rvb2x0aXAnICYmIGhlbHB0ZXh0XCJcbiAgICAgICAgICAgIFt0b29sdGlwdGV4dF09XCJoZWxwdGV4dFwiXG4gICAgICAgICAgICBbaW5saW5lbW9kZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIkhlbHB0ZXh0VG9vbHRpcEljb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NhYy10b29sdGlwPlxuICAgIDwvbGFiZWw+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbC0xMlwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIltkaXNhYmxlbGFiZWwgPT09IGZhbHNlID8gKHRoaXMubGFiZWxTaXplcyB8IHRvQ29udHJvbFdpZHRoQ3NzKSA6ICcnXVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWNvbXBvbmVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmQtZmxleF09XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dCAmJiBkaXNhYmxlbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwiaXNpbmxpbmVlcnJvcmVuYWJsZWQgJiYgaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1ncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1ncm91cC1zbV09XCJjb21wb25lbnRIZWlnaHQgPT09IENvbnRyb2xIZWlnaHQuU21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tZ3JvdXAtbGddPVwiY29tcG9uZW50SGVpZ2h0ID09PSBDb250cm9sSGVpZ2h0LkxhcmdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biB1cGxvYWQtaW5wdXQgY3VzdG9tLWZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwibWF4ZmlsZXMgPiAwICYmIHVwbG9hZHMubGVuZ3RoID49IG1heGZpbGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLWRhbmdlcl09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiSWNvbkJyb3dzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByLTJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXBsb2FkLWJyb3dzZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25icm93c2UgPyBidXR0b25icm93c2UgOiAobG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyh2YWxpZGF0aW9uS2V5U2VydmljZS5VcGxvYWRCdXR0b25Ccm93c2UpIHwgYXN5bmMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3sgbmFtZSB9fV91cGxvYWRpbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1maWxlLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNmaWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbGVzLnZhbHVlID0gJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVwbG9hZHhTdGF0ZSk9XCJvblVwbG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibWF4ZmlsZXMgPiAwICYmIHVwbG9hZHMubGVuZ3RoID49IG1heGZpbGVzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLWdyb3VwLXNtXT1cImNvbXBvbmVudEhlaWdodCA9PT0gQ29udHJvbEhlaWdodC5TbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tZ3JvdXAtbGddPVwiY29tcG9uZW50SGVpZ2h0ID09PSBDb250cm9sSGVpZ2h0LkxhcmdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gaW1hZ2UtcHJldmlldy1jbGVhciBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxBbGwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJIYXNRdWV1ZUl0ZW0oKSA9PT0gZmFsc2UgPyAnZGlzYWJsZWQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLXNlY29uZGFyeV09XCIhKGludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLWRhbmdlcl09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiSWNvbkRlbGV0ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGF1dG91cGxvYWQgPT09IGZhbHNlICYmIGVuYWJsZXBhdXNlKSB8fCAoYXV0b3VwbG9hZCAmJiBlbmFibGVwYXVzZSAmJiBJc1BhdXNlZCgpID09PSBmYWxzZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhdXNlQWxsKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiSXNVcGxvYWRpbmcoKSA9PT0gZmFsc2UgPyAnZGlzYWJsZWQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLXNlY29uZGFyeV09XCIhKGludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLWRhbmdlcl09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiSWNvblBhdXNlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhdXRvdXBsb2FkICYmIGVuYWJsZXBhdXNlICYmIElzUGF1c2VkKCkgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwbG9hZEFsbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tc2Vjb25kYXJ5XT1cIiEoaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZCkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJJY29uQ29udGludWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImF1dG91cGxvYWQgPT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIHRleHQtbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGxvYWRBbGwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJJc1N0YXRlVG9VcGxvYWQoKSA9PT0gZmFsc2UgPyAnZGlzYWJsZWQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLXNlY29uZGFyeV09XCIhKGludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLWRhbmdlcl09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJJY29uVXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByLTJcIj48L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBidXR0b251cGxvYWQgPyBidXR0b251cGxvYWQgOiAobG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyh2YWxpZGF0aW9uS2V5U2VydmljZS5VcGxvYWRCdXR0b25VcGxvYWQpIHwgYXN5bmMpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWxwdGV4dG1vZGUgPT09ICd0b29sdGlwJyAmJiBoZWxwdGV4dCAmJiBkaXNhYmxlbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sLXBsYWludGV4dCBhbGlnbi1zZWxmLXRvcCBtbC0yIG1yLTEgdy1hdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbY29tcG9uZW50SGVpZ2h0IHwgdG9Db250cm9sSGVpZ2h0XVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYWMtdG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcHRleHRdPVwiaGVscHRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lbW9kZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJIZWxwdGV4dFRvb2x0aXBJY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zYWMtdG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc2lubGluZWVycm9yZW5hYmxlZCAmJiBpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IEdldEVycm9yTWVzc2FnZSgpIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWxlIG9mIHVwbG9hZHNcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDogNXB4XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWdyb3VwIHVwbG9hZC1jb21wb25lbnQgdXBsb2FkLW11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlucHV0LWdyb3VwLXNtXT1cImNvbXBvbmVudEhlaWdodCA9PT0gQ29udHJvbEhlaWdodC5TbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pbnB1dC1ncm91cC1sZ109XCJjb21wb25lbnRIZWlnaHQgPT09IENvbnRyb2xIZWlnaHQuTGFyZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdXBsb2FkLXByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnByb2dyZXNzLWJhci1zdWNjZXNzXT1cImZpbGUucHJvZ3Jlc3MgPT09IDEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiZmlsZS5wcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtdmFsdWVtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS12YWx1ZW1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cImZpbGUucHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9ncmVzcy10ZXh0IHRleHQtZGFya1wiPnt7IGZpbGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBpbWFnZS1wcmV2aWV3LWNsZWFyIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbChmaWxlLnVwbG9hZElkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIkljb25EZWxldGVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihhdXRvdXBsb2FkID09PSBmYWxzZSAmJiBlbmFibGVwYXVzZSkgfHwgKGF1dG91cGxvYWQgJiYgZW5hYmxlcGF1c2UgJiYgZmlsZS5zdGF0dXMgIT09ICdwYXVzZWQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXVzZShmaWxlLnVwbG9hZElkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZmlsZS5zdGF0dXMgIT09ICd1cGxvYWRpbmcnID8gJ2Rpc2FibGVkJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tc2Vjb25kYXJ5XT1cIiEoaW52YWxpZCAmJiAoZGlydHkgfHwgdG91Y2hlZCkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLWRhbmdlcl09XCJpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJJY29uUGF1c2VcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImF1dG91cGxvYWQgJiYgZW5hYmxlcGF1c2UgJiYgZmlsZS5zdGF0dXMgPT09ICdwYXVzZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwbG9hZChmaWxlLnVwbG9hZElkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIkljb25Db250aW51ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYXV0b3VwbG9hZCA9PT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIHRleHQtbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBsb2FkKGZpbGUudXBsb2FkSWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJmaWxlLnN0YXR1cyAhPT0gJ2FkZGVkJyAmJiBmaWxlLnN0YXR1cyAhPT0gJ3BhdXNlZCcgPyAnZGlzYWJsZWQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1zZWNvbmRhcnldPVwiIShpbnZhbGlkICYmIChkaXJ0eSB8fCB0b3VjaGVkKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5idG4tZGFuZ2VyXT1cImludmFsaWQgJiYgKGRpcnR5IHx8IHRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiSWNvblVwbG9hZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHItMlwiPjwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBidXR0b251cGxvYWQgPyBidXR0b251cGxvYWQgOiAobG5nUmVzb3VyY2VTZXJ2aWNlLkdldFN0cmluZyh2YWxpZGF0aW9uS2V5U2VydmljZS5VcGxvYWRCdXR0b25VcGxvYWQpIHwgYXN5bmMpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzbWFsbFxuICAgICAgICAgICAgKm5nSWY9XCJoZWxwdGV4dG1vZGUgPT09ICd0ZXh0JyAmJiBoZWxwdGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LW11dGVkXCI+XG4gICAgICAgICAgICB7eyBoZWxwdGV4dCB9fVxuICAgICAgICA8L3NtYWxsPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=