@tetacom/ng-components 1.1.10 → 1.1.11

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 (253) hide show
  1. package/.eslintrc.json +37 -0
  2. package/common/service/dynamic-component.service.d.ts +4 -4
  3. package/common/service/overlay-container.service.d.ts +2 -2
  4. package/common/util/array-util.d.ts +2 -2
  5. package/common/util/dom-util.d.ts +1 -1
  6. package/component/accordion/accordion/accordion.component.d.ts +1 -4
  7. package/component/accordion/accordion-item/accordion-item.component.d.ts +5 -6
  8. package/component/date-picker/base-calendar.d.ts +7 -7
  9. package/component/date-picker/base-picker.d.ts +3 -3
  10. package/component/date-picker/date-picker/date-calendar/date-calendar.component.d.ts +3 -3
  11. package/component/date-picker/date-range/date-range.component.d.ts +5 -5
  12. package/component/date-picker/date-range/range-calendar/range-calendar.component.d.ts +3 -3
  13. package/component/dropdown/dropdown-base.d.ts +2 -2
  14. package/component/file-upload/file-upload-area/file-upload-area.component.d.ts +8 -10
  15. package/component/filter/contarct/filter-item.d.ts +17 -16
  16. package/component/input/input/input.component.d.ts +5 -8
  17. package/component/property-grid/property-grid/property-grid.component.d.ts +3 -3
  18. package/component/select/select/select.component.d.ts +8 -9
  19. package/component/table/base/cell-component-base.d.ts +23 -13
  20. package/component/table/cell/cell.component.d.ts +5 -11
  21. package/component/table/cell-host/cell-host.component.d.ts +6 -6
  22. package/component/table/contract/i-cell-instance.d.ts +2 -1
  23. package/component/table/contract/public-api.d.ts +1 -0
  24. package/component/table/contract/table-column.d.ts +48 -39
  25. package/component/table/contract/table-row.d.ts +8 -0
  26. package/component/table/default/boolean-cell/boolean-cell.component.d.ts +1 -2
  27. package/component/table/default/date-cell/date-cell.component.d.ts +2 -3
  28. package/component/table/default/date-time-cell/date-time-cell.component.d.ts +2 -3
  29. package/component/table/default/list-cell/list-cell.component.d.ts +5 -7
  30. package/component/table/default/numeric-cell/numeric-cell.component.d.ts +1 -3
  31. package/component/table/default/string-cell/string-cell.component.d.ts +2 -3
  32. package/component/table/service/table.service.d.ts +32 -31
  33. package/component/table/table/table.component.d.ts +11 -10
  34. package/component/table/table-body/table-body.component.d.ts +13 -11
  35. package/component/table/table-head/table-head.component.d.ts +2 -2
  36. package/component/table/table.module.d.ts +1 -1
  37. package/directive/context-menu/context-menu.directive.d.ts +4 -5
  38. package/directive/drag-drop/drag.directive.d.ts +4 -4
  39. package/directive/drag-sort/drag-sort-container.directive.d.ts +2 -3
  40. package/directive/dynamic-content-base.directive.d.ts +8 -9
  41. package/directive/hint/hint.directive.d.ts +5 -5
  42. package/directive/tooltip/tooltip.directive.d.ts +3 -3
  43. package/esm2022/common/service/click.service.mjs +3 -3
  44. package/esm2022/common/service/dynamic-component.service.mjs +6 -6
  45. package/esm2022/common/service/overlay-container.service.mjs +6 -6
  46. package/esm2022/common/util/array-util.mjs +6 -5
  47. package/esm2022/common/util/dom-util.mjs +4 -3
  48. package/esm2022/common/util/position-util.mjs +10 -5
  49. package/esm2022/component/accordion/accordion/accordion.component.mjs +6 -10
  50. package/esm2022/component/accordion/accordion-content.directive.mjs +3 -3
  51. package/esm2022/component/accordion/accordion-head/accordion-head.component.mjs +3 -3
  52. package/esm2022/component/accordion/accordion-item/accordion-item.component.mjs +7 -9
  53. package/esm2022/component/accordion/accordion.module.mjs +4 -4
  54. package/esm2022/component/autocomplete/autocomplete/autocomplete.component.mjs +3 -3
  55. package/esm2022/component/autocomplete/autocomplete.module.mjs +4 -4
  56. package/esm2022/component/avatar/avatar/avatar.component.mjs +3 -3
  57. package/esm2022/component/avatar/avatar.module.mjs +4 -4
  58. package/esm2022/component/button/button/button.component.mjs +3 -3
  59. package/esm2022/component/button/button.module.mjs +4 -4
  60. package/esm2022/component/chart-3d/chart-3d.module.mjs +4 -4
  61. package/esm2022/component/chart-3d/chart3d/chart3d.component.mjs +3 -3
  62. package/esm2022/component/checkbox/checkbox/checkbox.component.mjs +5 -5
  63. package/esm2022/component/checkbox/checkbox.module.mjs +4 -4
  64. package/esm2022/component/date-picker/base-calendar.mjs +55 -21
  65. package/esm2022/component/date-picker/base-picker.mjs +4 -4
  66. package/esm2022/component/date-picker/date-picker/date-calendar/date-calendar.component.mjs +11 -9
  67. package/esm2022/component/date-picker/date-picker/date-picker.component.mjs +3 -3
  68. package/esm2022/component/date-picker/date-picker.module.mjs +4 -4
  69. package/esm2022/component/date-picker/date-range/date-range.component.mjs +11 -11
  70. package/esm2022/component/date-picker/date-range/range-calendar/range-calendar.component.mjs +14 -12
  71. package/esm2022/component/date-picker/day-picker/day-item/day-item.component.mjs +3 -3
  72. package/esm2022/component/date-picker/day-picker/day-picker.component.mjs +3 -3
  73. package/esm2022/component/date-picker/month-picker/month-picker.component.mjs +3 -3
  74. package/esm2022/component/date-picker/year-picker/scroll-to-selected-year.directive.mjs +3 -3
  75. package/esm2022/component/date-picker/year-picker/year-picker.component.mjs +3 -3
  76. package/esm2022/component/delimiter/delimiter/delimiter.component.mjs +3 -3
  77. package/esm2022/component/delimiter/delimiter.module.mjs +4 -4
  78. package/esm2022/component/divider/divider/divider.component.mjs +3 -3
  79. package/esm2022/component/divider/divider.module.mjs +4 -4
  80. package/esm2022/component/dropdown/dropdown/dropdown.component.mjs +3 -3
  81. package/esm2022/component/dropdown/dropdown-base.mjs +20 -16
  82. package/esm2022/component/dropdown/dropdown-content.directive.mjs +3 -3
  83. package/esm2022/component/dropdown/dropdown-head.directive.mjs +3 -3
  84. package/esm2022/component/dropdown/dropdown.directive.mjs +3 -3
  85. package/esm2022/component/dropdown/dropdown.module.mjs +4 -4
  86. package/esm2022/component/dynamic-component/dynamic-component.module.mjs +4 -4
  87. package/esm2022/component/dynamic-component/popup-content/popup-content.component.mjs +3 -3
  88. package/esm2022/component/expand-card/expand-card/expand-card.component.mjs +3 -3
  89. package/esm2022/component/expand-card/expand-card.module.mjs +4 -4
  90. package/esm2022/component/expand-card/expand-item/expand-item.component.mjs +3 -3
  91. package/esm2022/component/expand-panel/expand-panel/expand-panel.component.mjs +3 -3
  92. package/esm2022/component/expand-panel/expand-panel-content.directive.mjs +3 -3
  93. package/esm2022/component/expand-panel/expand-panel-head.directive.mjs +3 -3
  94. package/esm2022/component/expand-panel/expand-panel.module.mjs +4 -4
  95. package/esm2022/component/file-upload/file-item/file-item.component.mjs +3 -3
  96. package/esm2022/component/file-upload/file-upload-area/file-upload-area.component.mjs +12 -12
  97. package/esm2022/component/file-upload/file-upload.module.mjs +4 -4
  98. package/esm2022/component/filter/boolean-filter/boolean-filter.component.mjs +3 -3
  99. package/esm2022/component/filter/contarct/filter-item.mjs +1 -1
  100. package/esm2022/component/filter/date-filter/date-filter.component.mjs +3 -3
  101. package/esm2022/component/filter/filter-host/filter-host.component.mjs +3 -3
  102. package/esm2022/component/filter/filter.module.mjs +4 -4
  103. package/esm2022/component/filter/list-filter/list-filter.component.mjs +3 -3
  104. package/esm2022/component/filter/numeric-filter/numeric-filter.component.mjs +3 -3
  105. package/esm2022/component/filter/string-filter/string-filter.component.mjs +3 -3
  106. package/esm2022/component/icon/icon/icon.component.mjs +3 -3
  107. package/esm2022/component/icon/icon-file/icon-file.component.mjs +3 -3
  108. package/esm2022/component/icon/icon-file/icon-file.module.mjs +4 -4
  109. package/esm2022/component/icon/icon-sprite.directive.mjs +3 -3
  110. package/esm2022/component/icon/icon.module.mjs +4 -4
  111. package/esm2022/component/icon/icon.service.mjs +3 -3
  112. package/esm2022/component/input/color-input/color-input.component.mjs +7 -9
  113. package/esm2022/component/input/form-group-title/form-group-title.component.mjs +3 -3
  114. package/esm2022/component/input/input/input.component.mjs +7 -9
  115. package/esm2022/component/input/input.module.mjs +4 -4
  116. package/esm2022/component/input/text-field/text-field.component.mjs +3 -3
  117. package/esm2022/component/message/message/message.component.mjs +3 -3
  118. package/esm2022/component/message/message-host/message-host.component.mjs +3 -3
  119. package/esm2022/component/message/message.module.mjs +4 -4
  120. package/esm2022/component/message/message.service.mjs +3 -3
  121. package/esm2022/component/modal/dialog/dialog.component.mjs +3 -3
  122. package/esm2022/component/modal/dialog.service.mjs +3 -3
  123. package/esm2022/component/modal/modal-container/modal-container.component.mjs +3 -3
  124. package/esm2022/component/modal/modal.module.mjs +4 -4
  125. package/esm2022/component/modal/modal.service.mjs +3 -3
  126. package/esm2022/component/pager/pager/pager.component.mjs +3 -3
  127. package/esm2022/component/pager/pager.module.mjs +4 -4
  128. package/esm2022/component/panel/panel/panel.component.mjs +3 -3
  129. package/esm2022/component/panel/panel.module.mjs +4 -4
  130. package/esm2022/component/progress-bar/progress-bar/progress-bar.component.mjs +3 -3
  131. package/esm2022/component/progress-bar/progress-bar.module.mjs +4 -4
  132. package/esm2022/component/property-grid/property-grid/property-grid-group/property-grid-group.component.mjs +3 -3
  133. package/esm2022/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +3 -3
  134. package/esm2022/component/property-grid/property-grid/property-grid-item-description.directive.mjs +3 -3
  135. package/esm2022/component/property-grid/property-grid/property-grid.component.mjs +12 -15
  136. package/esm2022/component/property-grid/property-grid.module.mjs +4 -4
  137. package/esm2022/component/radio/radio/radio.component.mjs +3 -3
  138. package/esm2022/component/radio/radio-button/radio-button.component.mjs +3 -3
  139. package/esm2022/component/radio/radio.module.mjs +4 -4
  140. package/esm2022/component/resize-panel/resize-panel/resize-panel.component.mjs +3 -3
  141. package/esm2022/component/resize-panel/resize-panel.module.mjs +4 -4
  142. package/esm2022/component/select/select/select.component.mjs +18 -20
  143. package/esm2022/component/select/select-option.directive.mjs +3 -3
  144. package/esm2022/component/select/select-value.directive.mjs +3 -3
  145. package/esm2022/component/select/select.module.mjs +4 -4
  146. package/esm2022/component/sidebar/sidebar/sidebar.component.mjs +3 -3
  147. package/esm2022/component/sidebar/sidebar.module.mjs +4 -4
  148. package/esm2022/component/switch/switch/switch.component.mjs +3 -3
  149. package/esm2022/component/switch/switch-button/switch-button.component.mjs +3 -3
  150. package/esm2022/component/switch/switch.module.mjs +4 -4
  151. package/esm2022/component/switch/switch.service.mjs +3 -3
  152. package/esm2022/component/table/base/cell-component-base.mjs +97 -40
  153. package/esm2022/component/table/base/head-cell-component-base.mjs +3 -3
  154. package/esm2022/component/table/cell/cell.component.mjs +6 -16
  155. package/esm2022/component/table/cell-host/cell-host.component.mjs +11 -11
  156. package/esm2022/component/table/contract/i-cell-coordinates.mjs +1 -1
  157. package/esm2022/component/table/contract/i-cell-event.mjs +1 -1
  158. package/esm2022/component/table/contract/i-cell-instance.mjs +1 -1
  159. package/esm2022/component/table/contract/i-cell-value.mjs +1 -1
  160. package/esm2022/component/table/contract/public-api.mjs +2 -1
  161. package/esm2022/component/table/contract/table-column.mjs +8 -5
  162. package/esm2022/component/table/contract/table-row.mjs +9 -0
  163. package/esm2022/component/table/default/boolean-cell/boolean-cell.component.mjs +8 -8
  164. package/esm2022/component/table/default/date-cell/date-cell.component.mjs +10 -10
  165. package/esm2022/component/table/default/date-time-cell/date-time-cell.component.mjs +5 -9
  166. package/esm2022/component/table/default/default-head-cell/default-head-cell.component.mjs +3 -3
  167. package/esm2022/component/table/default/list-cell/list-cell.component.mjs +9 -16
  168. package/esm2022/component/table/default/numeric-cell/numeric-cell.component.mjs +6 -18
  169. package/esm2022/component/table/default/string-cell/string-cell.component.mjs +6 -17
  170. package/esm2022/component/table/head-cell/head-cell.component.mjs +3 -3
  171. package/esm2022/component/table/head-cell-dropdown/head-cell-dropdown.component.mjs +3 -3
  172. package/esm2022/component/table/head-cell-host/head-cell-host.component.mjs +3 -3
  173. package/esm2022/component/table/selection-cell/selection-cell.component.mjs +3 -3
  174. package/esm2022/component/table/selection-head-cell/selection-head-cell.component.mjs +3 -3
  175. package/esm2022/component/table/service/table.service.mjs +106 -77
  176. package/esm2022/component/table/table/table.component.mjs +48 -44
  177. package/esm2022/component/table/table-body/table-body.component.mjs +36 -44
  178. package/esm2022/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +3 -3
  179. package/esm2022/component/table/table-head/main-dropdown-tab/main-dropdown-tab.component.mjs +3 -3
  180. package/esm2022/component/table/table-head/table-head.component.mjs +13 -14
  181. package/esm2022/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +3 -3
  182. package/esm2022/component/table/table-head-group/table-head-group.component.mjs +3 -3
  183. package/esm2022/component/table/table.module.mjs +11 -8
  184. package/esm2022/component/tabs/tab/tab.component.mjs +3 -3
  185. package/esm2022/component/tabs/tab-content.directive.mjs +3 -3
  186. package/esm2022/component/tabs/tab-title.directive.mjs +3 -3
  187. package/esm2022/component/tabs/tabs/tabs.component.mjs +3 -3
  188. package/esm2022/component/tabs/tabs.module.mjs +4 -4
  189. package/esm2022/component/theme-switch/theme-switch/theme-switch.component.mjs +3 -3
  190. package/esm2022/component/theme-switch/theme-switch.module.mjs +4 -4
  191. package/esm2022/component/theme-switch/theme-switch.service.mjs +3 -3
  192. package/esm2022/component/toggle/toggle/toggle.component.mjs +3 -3
  193. package/esm2022/component/toggle/toggle.module.mjs +4 -4
  194. package/esm2022/component/toolbar/toolbar/toolbar.component.mjs +3 -3
  195. package/esm2022/component/toolbar/toolbar.module.mjs +4 -4
  196. package/esm2022/component/tree/tree/tree.component.mjs +3 -3
  197. package/esm2022/component/tree/tree-item/tree-item.component.mjs +3 -3
  198. package/esm2022/component/tree/tree-item-toggle/tree-item-toggle.component.mjs +3 -3
  199. package/esm2022/component/tree/tree.module.mjs +4 -4
  200. package/esm2022/component/tree/tree.service.mjs +3 -3
  201. package/esm2022/directive/auto-position/auto-position.directive.mjs +3 -3
  202. package/esm2022/directive/auto-position/auto-position.module.mjs +4 -4
  203. package/esm2022/directive/click-outside/click-outside.directive.mjs +3 -3
  204. package/esm2022/directive/click-outside/click-outside.module.mjs +4 -4
  205. package/esm2022/directive/context-menu/context-menu.directive.mjs +10 -10
  206. package/esm2022/directive/context-menu/context-menu.module.mjs +4 -4
  207. package/esm2022/directive/disable-control/disable-control.directive.mjs +3 -3
  208. package/esm2022/directive/disable-control/disable-control.module.mjs +4 -4
  209. package/esm2022/directive/drag-drop/drag-container.directive.mjs +3 -3
  210. package/esm2022/directive/drag-drop/drag-drop.module.mjs +4 -4
  211. package/esm2022/directive/drag-drop/drag-drop.service.mjs +3 -3
  212. package/esm2022/directive/drag-drop/drag-placeholder.directive.mjs +3 -3
  213. package/esm2022/directive/drag-drop/drag-preview.directive.mjs +3 -3
  214. package/esm2022/directive/drag-drop/drag.directive.mjs +20 -16
  215. package/esm2022/directive/drag-sort/drag-sort-container.directive.mjs +6 -10
  216. package/esm2022/directive/drag-sort/drag-sort-item.directive.mjs +4 -4
  217. package/esm2022/directive/drag-sort/drag-sort.module.mjs +4 -4
  218. package/esm2022/directive/dynamic-content-base.directive.mjs +8 -10
  219. package/esm2022/directive/highlight/highlight.directive.mjs +3 -3
  220. package/esm2022/directive/highlight/highlight.module.mjs +4 -4
  221. package/esm2022/directive/hint/hint.directive.mjs +13 -10
  222. package/esm2022/directive/hint/hint.module.mjs +4 -4
  223. package/esm2022/directive/let/let.directive.mjs +3 -3
  224. package/esm2022/directive/let/let.module.mjs +4 -4
  225. package/esm2022/directive/loader/loader.directive.mjs +8 -10
  226. package/esm2022/directive/loader/loader.module.mjs +4 -4
  227. package/esm2022/directive/no-autofill/no-autofill.directive.mjs +3 -3
  228. package/esm2022/directive/no-autofill/no-autofill.module.mjs +4 -4
  229. package/esm2022/directive/only-number/only-number.directive.mjs +4 -8
  230. package/esm2022/directive/only-number/only-number.module.mjs +4 -4
  231. package/esm2022/directive/resize-drag/resize-drag.directive.mjs +3 -3
  232. package/esm2022/directive/resize-drag/resize-drag.module.mjs +4 -4
  233. package/esm2022/directive/scroll-into-view/scroll-into-view.directive.mjs +3 -3
  234. package/esm2022/directive/scroll-into-view/scroll-into-view.module.mjs +4 -4
  235. package/esm2022/directive/scrollable/scrollable/scrollable.component.mjs +3 -3
  236. package/esm2022/directive/scrollable/scrollable.directive.mjs +3 -3
  237. package/esm2022/directive/scrollable/scrollable.module.mjs +4 -4
  238. package/esm2022/directive/teta-template/teta-template.directive.mjs +3 -3
  239. package/esm2022/directive/teta-template/teta-template.module.mjs +4 -4
  240. package/esm2022/directive/tooltip/tooltip.directive.mjs +12 -13
  241. package/esm2022/directive/tooltip/tooltip.module.mjs +4 -4
  242. package/esm2022/locale/teta-config.service.mjs +3 -3
  243. package/esm2022/pipe/date-pipe/teta-date-pipe.module.mjs +4 -4
  244. package/esm2022/pipe/date-pipe/teta-date.pipe.mjs +3 -3
  245. package/esm2022/pipe/number-pipe/number-pipe.module.mjs +4 -4
  246. package/esm2022/pipe/number-pipe/number.pipe.mjs +3 -3
  247. package/esm2022/util/forms-util.mjs +11 -5
  248. package/fesm2022/tetacom-ng-components.mjs +1496 -1415
  249. package/fesm2022/tetacom-ng-components.mjs.map +1 -1
  250. package/package.json +6 -6
  251. package/style/dropdown.scss +3 -3
  252. package/style/table.scss +4 -0
  253. package/util/forms-util.d.ts +1 -1
@@ -1,7 +1,7 @@
1
1
  import { Component, ContentChildren, EventEmitter, HostBinding, Input, Optional, Output, } from '@angular/core';
2
2
  import { FormGroup, NgForm } from '@angular/forms';
3
- import { PropertyGridItemDescriptionDirective } from "./property-grid-item-description.directive";
4
- import { FormsUtil } from "../../../util/forms-util";
3
+ import { FormsUtil } from '../../../util/forms-util';
4
+ import { PropertyGridItemDescriptionDirective } from './property-grid-item-description.directive';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@angular/forms";
7
7
  import * as i2 from "@angular/common";
@@ -18,7 +18,7 @@ export class PropertyGridComponent {
18
18
  this._item = item;
19
19
  if (this.formGroup) {
20
20
  this.formGroup.patchValue(item, {
21
- emitEvent: false
21
+ emitEvent: false,
22
22
  });
23
23
  }
24
24
  }
@@ -41,12 +41,11 @@ export class PropertyGridComponent {
41
41
  }
42
42
  constructor(_formGroup) {
43
43
  this._formGroup = _formGroup;
44
- // console.log(this.formGroup)
45
44
  }
46
45
  onControlValueChange(event) {
47
- const affected = this.columns.filter((_) => _.parentName === event.name);
46
+ const affected = this.columns.filter(_ => _.parentName === event.name);
48
47
  if (affected?.length) {
49
- affected.forEach((item) => {
48
+ affected.forEach(item => {
50
49
  const value = this.formGroup.getRawValue()[item.name];
51
50
  if (value) {
52
51
  const dictValue = this.getDictValue(value, item.name);
@@ -60,8 +59,7 @@ export class PropertyGridComponent {
60
59
  }
61
60
  this.controlValueChange.emit(event);
62
61
  }
63
- ngOnInit() {
64
- }
62
+ ngOnInit() { }
65
63
  ngOnDestroy() {
66
64
  this._alive = false;
67
65
  }
@@ -69,14 +67,13 @@ export class PropertyGridComponent {
69
67
  return column.name;
70
68
  }
71
69
  getDictValue(value, name) {
72
- return this.dict[name]?.find((_) => _.id === value);
73
- }
74
- ngAfterViewInit() {
70
+ return this.dict[name]?.find(_ => _.id === value);
75
71
  }
76
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: PropertyGridComponent, deps: [{ token: i1.ControlContainer, optional: true }], target: i0.ɵɵFactoryTarget.Component });
77
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: PropertyGridComponent, selector: "teta-property-grid", inputs: { hideNonEditable: "hideNonEditable", columns: "columns", dict: "dict", item: "item", horizontal: "horizontal", decimalPart: "decimalPart" }, outputs: { controlValueChange: "controlValueChange" }, host: { properties: { "class.form-container": "this.formClass" } }, queries: [{ propertyName: "itemTemplates", predicate: PropertyGridItemDescriptionDirective }], ngImport: i0, template: "<ng-container *ngIf=\"columns?.length\">\n <ng-container *ngFor=\"let column of columns; trackBy: trackColumns\">\n <teta-property-grid-item *ngIf=\"column.columns?.length < 1 && (column.editable || !hideNonEditable)\"\n [dict]=\"dict\"\n [column]=\"column\"\n [item]=\"item\"\n [id]=\"column.name\"\n [itemTemplates]=\"itemTemplates\"\n [decimalPart]=\"decimalPart\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"></teta-property-grid-item>\n <teta-property-grid-group *ngIf=\"column.columns?.length > 0 && (column.editable || !hideNonEditable)\"\n [id]=\"column.name\"\n [dict]=\"dict\"\n [column]=\"column\"\n [item]=\"item\"\n [itemTemplates]=\"itemTemplates\"\n [decimalPart]=\"decimalPart\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"></teta-property-grid-group>\n </ng-container>\n</ng-container>\n", styles: [":host{padding:12px 8px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.PropertyGridGroupComponent, selector: "teta-property-grid-group", inputs: ["column", "hideNonEditable", "dict", "item", "horizontal", "decimalPart", "itemTemplates"], outputs: ["controlValueChange"] }, { kind: "component", type: i4.PropertyGridItemComponent, selector: "teta-property-grid-item", inputs: ["column", "hideNonEditable", "dict", "decimalPart", "item", "itemTemplates", "horizontal"], outputs: ["controlValueChange"] }], viewProviders: [FormsUtil.formProvider] });
72
+ ngAfterViewInit() { }
73
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: PropertyGridComponent, deps: [{ token: i1.ControlContainer, optional: true }], target: i0.ɵɵFactoryTarget.Component });
74
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: PropertyGridComponent, selector: "teta-property-grid", inputs: { hideNonEditable: "hideNonEditable", columns: "columns", dict: "dict", item: "item", horizontal: "horizontal", decimalPart: "decimalPart" }, outputs: { controlValueChange: "controlValueChange" }, host: { properties: { "class.form-container": "this.formClass" } }, queries: [{ propertyName: "itemTemplates", predicate: PropertyGridItemDescriptionDirective }], ngImport: i0, template: "<ng-container *ngIf=\"columns?.length\">\n <ng-container *ngFor=\"let column of columns; trackBy: trackColumns\">\n <teta-property-grid-item *ngIf=\"column.columns?.length < 1 && (column.editable || !hideNonEditable)\"\n [dict]=\"dict\"\n [column]=\"column\"\n [item]=\"item\"\n [id]=\"column.name\"\n [itemTemplates]=\"itemTemplates\"\n [decimalPart]=\"decimalPart\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"></teta-property-grid-item>\n <teta-property-grid-group *ngIf=\"column.columns?.length > 0 && (column.editable || !hideNonEditable)\"\n [id]=\"column.name\"\n [dict]=\"dict\"\n [column]=\"column\"\n [item]=\"item\"\n [itemTemplates]=\"itemTemplates\"\n [decimalPart]=\"decimalPart\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"></teta-property-grid-group>\n </ng-container>\n</ng-container>\n", styles: [":host{padding:12px 8px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.PropertyGridGroupComponent, selector: "teta-property-grid-group", inputs: ["column", "hideNonEditable", "dict", "item", "horizontal", "decimalPart", "itemTemplates"], outputs: ["controlValueChange"] }, { kind: "component", type: i4.PropertyGridItemComponent, selector: "teta-property-grid-item", inputs: ["column", "hideNonEditable", "dict", "decimalPart", "item", "itemTemplates", "horizontal"], outputs: ["controlValueChange"] }], viewProviders: [FormsUtil.formProvider] });
78
75
  }
79
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: PropertyGridComponent, decorators: [{
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: PropertyGridComponent, decorators: [{
80
77
  type: Component,
81
78
  args: [{ selector: 'teta-property-grid', viewProviders: [FormsUtil.formProvider], template: "<ng-container *ngIf=\"columns?.length\">\n <ng-container *ngFor=\"let column of columns; trackBy: trackColumns\">\n <teta-property-grid-item *ngIf=\"column.columns?.length < 1 && (column.editable || !hideNonEditable)\"\n [dict]=\"dict\"\n [column]=\"column\"\n [item]=\"item\"\n [id]=\"column.name\"\n [itemTemplates]=\"itemTemplates\"\n [decimalPart]=\"decimalPart\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"></teta-property-grid-item>\n <teta-property-grid-group *ngIf=\"column.columns?.length > 0 && (column.editable || !hideNonEditable)\"\n [id]=\"column.name\"\n [dict]=\"dict\"\n [column]=\"column\"\n [item]=\"item\"\n [itemTemplates]=\"itemTemplates\"\n [decimalPart]=\"decimalPart\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"></teta-property-grid-group>\n </ng-container>\n</ng-container>\n", styles: [":host{padding:12px 8px}\n"] }]
82
79
  }], ctorParameters: function () { return [{ type: i1.ControlContainer, decorators: [{
@@ -102,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
102
99
  }], controlValueChange: [{
103
100
  type: Output
104
101
  }] } });
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3Byb3BlcnR5LWdyaWQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkL3Byb3BlcnR5LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFBRSxlQUFlLEVBQzFCLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVHLFFBQVEsRUFDaEIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBbUIsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxvQ0FBb0MsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ2hHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7O0FBUW5ELE1BQU0sT0FBTyxxQkFBcUI7SUFtQ0E7SUFsQ0ssU0FBUyxHQUFHLElBQUksQ0FBQztJQUNDLGFBQWEsQ0FBa0Q7SUFDN0csZUFBZSxDQUFVO0lBQ3pCLE9BQU8sQ0FBZ0I7SUFDdkIsSUFBSSxDQUE4QjtJQUMzQyxJQUFhLElBQUksQ0FBQyxJQUFPO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7Z0JBQzlCLFNBQVMsRUFBRSxLQUFLO2FBQ2pCLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUNELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ1EsVUFB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a0JBQWtCO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCwgT3B0aW9uYWwsXG4gIE91dHB1dCwgUXVlcnlMaXN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGFibGVDb2x1bW59IGZyb20gJy4uLy4uL3RhYmxlL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQge0lEaWN0aW9uYXJ5fSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7SUlkTmFtZX0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktaWQtbmFtZSc7XG5pbXBvcnQge0NvbnRyb2xDb250YWluZXIsIEZvcm1Hcm91cCwgTmdGb3JtfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1Byb3BlcnR5R3JpZEl0ZW1EZXNjcmlwdGlvbkRpcmVjdGl2ZX0gZnJvbSBcIi4vcHJvcGVydHktZ3JpZC1pdGVtLWRlc2NyaXB0aW9uLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHtGb3Jtc1V0aWx9IGZyb20gXCIuLi8uLi8uLi91dGlsL2Zvcm1zLXV0aWxcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS1wcm9wZXJ0eS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb3BlcnR5LWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9wZXJ0eS1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFtGb3Jtc1V0aWwuZm9ybVByb3ZpZGVyXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvcGVydHlHcmlkQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZvcm0tY29udGFpbmVyJykgZm9ybUNsYXNzID0gdHJ1ZTtcbiAgQENvbnRlbnRDaGlsZHJlbihQcm9wZXJ0eUdyaWRJdGVtRGVzY3JpcHRpb25EaXJlY3RpdmUpIGl0ZW1UZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxQcm9wZXJ0eUdyaWRJdGVtRGVzY3JpcHRpb25EaXJlY3RpdmU+O1xuICBASW5wdXQoKSBoaWRlTm9uRWRpdGFibGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbHVtbnM6IFRhYmxlQ29sdW1uW107XG4gIEBJbnB1dCgpIGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPjtcbiAgQElucHV0KCkgc2V0IGl0ZW0oaXRlbTogVCkge1xuICAgIHRoaXMuX2l0ZW0gPSBpdGVtO1xuICAgIGlmKHRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKGl0ZW0sIHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtO1xuICB9XG4gIEBJbnB1dCgpIGhvcml6b250YWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRlY2ltYWxQYXJ0OiBudW1iZXI7XG5cbiAgQE91dHB1dCgpIGNvbnRyb2xWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUlkTmFtZTxhbnk+PigpO1xuXG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfaXRlbTogVDtcblxuICBnZXQgZm9ybUdyb3VwKCk6IEZvcm1Hcm91cCB7XG4gICAgaWYgKHRoaXMuX2Zvcm1Hcm91cCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1Hcm91cDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2Zvcm1Hcm91cCBpbnN0YW5jZW9mIE5nRm9ybSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1Hcm91cC5mb3JtO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgX2Zvcm1Hcm91cDogQ29udHJvbENvbnRhaW5lcikge1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZm9ybUdyb3VwKVxuICB9XG5cbiAgb25Db250cm9sVmFsdWVDaGFuZ2UoZXZlbnQ6IElJZE5hbWU8YW55Pikge1xuICAgIGNvbnN0IGFmZmVjdGVkID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoXykgPT4gXy5wYXJlbnROYW1lID09PSBldmVudC5uYW1lKTtcbiAgICBpZiAoYWZmZWN0ZWQ/Lmxlbmd0aCkge1xuICAgICAgYWZmZWN0ZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKClbaXRlbS5uYW1lXTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZGljdFZhbHVlID0gdGhpcy5nZXREaWN0VmFsdWUodmFsdWUsIGl0ZW0ubmFtZSk7XG4gICAgICAgICAgaWYgKGRpY3RWYWx1ZSAmJiBkaWN0VmFsdWUucGFyZW50SWQgIT09IGV2ZW50LmlkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdPYmogPSB7fTtcbiAgICAgICAgICAgIG5ld09ialtpdGVtLm5hbWVdID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3T2JqKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2xWYWx1ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fYWxpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIHRyYWNrQ29sdW1ucyhpbmRleDogbnVtYmVyLCBjb2x1bW46IFRhYmxlQ29sdW1uKTogYW55IHtcbiAgICByZXR1cm4gY29sdW1uLm5hbWU7XG4gIH1cblxuICBwcml2YXRlIGdldERpY3RWYWx1ZSh2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5kaWN0W25hbWVdPy5maW5kKChfKSA9PiBfLmlkID09PSB2YWx1ZSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5zPy5sZW5ndGhcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQ29sdW1uc1wiPlxuICAgIDx0ZXRhLXByb3BlcnR5LWdyaWQtaXRlbSAqbmdJZj1cImNvbHVtbi5jb2x1bW5zPy5sZW5ndGggPCAxICYmIChjb2x1bW4uZWRpdGFibGUgfHwgIWhpZGVOb25FZGl0YWJsZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGljdF09XCJkaWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1UZW1wbGF0ZXNdPVwiaXRlbVRlbXBsYXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWNpbWFsUGFydF09XCJkZWNpbWFsUGFydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hvcml6b250YWxdPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb250cm9sVmFsdWVDaGFuZ2UpPVwib25Db250cm9sVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlTm9uRWRpdGFibGVdPVwiaGlkZU5vbkVkaXRhYmxlXCI+PC90ZXRhLXByb3BlcnR5LWdyaWQtaXRlbT5cbiAgICA8dGV0YS1wcm9wZXJ0eS1ncmlkLWdyb3VwICpuZ0lmPVwiY29sdW1uLmNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgKGNvbHVtbi5lZGl0YWJsZSB8fCAhaGlkZU5vbkVkaXRhYmxlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RpY3RdPVwiZGljdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtVGVtcGxhdGVzXT1cIml0ZW1UZW1wbGF0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlY2ltYWxQYXJ0XT1cImRlY2ltYWxQYXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtob3Jpem9udGFsXT1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRyb2xWYWx1ZUNoYW5nZSk9XCJvbkNvbnRyb2xWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlTm9uRWRpdGFibGVdPVwiaGlkZU5vbkVkaXRhYmxlXCI+PC90ZXRhLXByb3BlcnR5LWdyaWQtZ3JvdXA+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3Byb3BlcnR5LWdyaWQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkL3Byb3BlcnR5LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW9CLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7OztBQVFsRyxNQUFNLE9BQU8scUJBQXFCO0lBc0NBO0lBbkNLLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFFdEQsYUFBYSxDQUFrRDtJQUN0RCxlQUFlLENBQVU7SUFDekIsT0FBTyxDQUFnQjtJQUN2QixJQUFJLENBQThCO0lBQzNDLElBQWEsSUFBSSxDQUFDLElBQU87UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtnQkFDOUIsU0FBUyxFQUFFLEtBQUs7YUFDakIsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDUSxVQUFV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b250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBGb3JtR3JvdXAsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7IElJZE5hbWUgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7IEZvcm1zVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvZm9ybXMtdXRpbCc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL3RhYmxlL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQgeyBQcm9wZXJ0eUdyaWRJdGVtRGVzY3JpcHRpb25EaXJlY3RpdmUgfSBmcm9tICcuL3Byb3BlcnR5LWdyaWQtaXRlbS1kZXNjcmlwdGlvbi5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXByb3BlcnR5LWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvcGVydHktZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Byb3BlcnR5LWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgdmlld1Byb3ZpZGVyczogW0Zvcm1zVXRpbC5mb3JtUHJvdmlkZXJdLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eUdyaWRDb21wb25lbnQ8VD5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxue1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZvcm0tY29udGFpbmVyJykgZm9ybUNsYXNzID0gdHJ1ZTtcbiAgQENvbnRlbnRDaGlsZHJlbihQcm9wZXJ0eUdyaWRJdGVtRGVzY3JpcHRpb25EaXJlY3RpdmUpXG4gIGl0ZW1UZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxQcm9wZXJ0eUdyaWRJdGVtRGVzY3JpcHRpb25EaXJlY3RpdmU+O1xuICBASW5wdXQoKSBoaWRlTm9uRWRpdGFibGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbHVtbnM6IFRhYmxlQ29sdW1uW107XG4gIEBJbnB1dCgpIGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPjtcbiAgQElucHV0KCkgc2V0IGl0ZW0oaXRlbTogVCkge1xuICAgIHRoaXMuX2l0ZW0gPSBpdGVtO1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cCkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShpdGVtLCB7XG4gICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW07XG4gIH1cbiAgQElucHV0KCkgaG9yaXpvbnRhbDogYm9vbGVhbjtcbiAgQElucHV0KCkgZGVjaW1hbFBhcnQ6IG51bWJlcjtcblxuICBAT3V0cHV0KCkgY29udHJvbFZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJSWROYW1lPGFueT4+KCk7XG5cbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuICBwcml2YXRlIF9pdGVtOiBUO1xuXG4gIGdldCBmb3JtR3JvdXAoKTogRm9ybUdyb3VwIHtcbiAgICBpZiAodGhpcy5fZm9ybUdyb3VwIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZm9ybUdyb3VwIGluc3RhbmNlb2YgTmdGb3JtKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwLmZvcm07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZm9ybUdyb3VwOiBDb250cm9sQ29udGFpbmVyKSB7fVxuXG4gIG9uQ29udHJvbFZhbHVlQ2hhbmdlKGV2ZW50OiBJSWROYW1lPGFueT4pIHtcbiAgICBjb25zdCBhZmZlY3RlZCA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXyA9PiBfLnBhcmVudE5hbWUgPT09IGV2ZW50Lm5hbWUpO1xuICAgIGlmIChhZmZlY3RlZD8ubGVuZ3RoKSB7XG4gICAgICBhZmZlY3RlZC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKClbaXRlbS5uYW1lXTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZGljdFZhbHVlID0gdGhpcy5nZXREaWN0VmFsdWUodmFsdWUsIGl0ZW0ubmFtZSk7XG4gICAgICAgICAgaWYgKGRpY3RWYWx1ZSAmJiBkaWN0VmFsdWUucGFyZW50SWQgIT09IGV2ZW50LmlkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdPYmogPSB7fTtcbiAgICAgICAgICAgIG5ld09ialtpdGVtLm5hbWVdID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3T2JqKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2xWYWx1ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9hbGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgdHJhY2tDb2x1bW5zKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW4pOiBhbnkge1xuICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGljdFZhbHVlKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmRpY3RbbmFtZV0/LmZpbmQoXyA9PiBfLmlkID09PSB2YWx1ZSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7fVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbnM/Lmxlbmd0aFwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgdHJhY2tCeTogdHJhY2tDb2x1bW5zXCI+XG4gICAgPHRldGEtcHJvcGVydHktZ3JpZC1pdGVtICpuZ0lmPVwiY29sdW1uLmNvbHVtbnM/Lmxlbmd0aCA8IDEgJiYgKGNvbHVtbi5lZGl0YWJsZSB8fCAhaGlkZU5vbkVkaXRhYmxlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaWN0XT1cImRpY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbVRlbXBsYXRlc109XCJpdGVtVGVtcGxhdGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlY2ltYWxQYXJ0XT1cImRlY2ltYWxQYXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaG9yaXpvbnRhbF09XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRyb2xWYWx1ZUNoYW5nZSk9XCJvbkNvbnRyb2xWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVOb25FZGl0YWJsZV09XCJoaWRlTm9uRWRpdGFibGVcIj48L3RldGEtcHJvcGVydHktZ3JpZC1pdGVtPlxuICAgIDx0ZXRhLXByb3BlcnR5LWdyaWQtZ3JvdXAgKm5nSWY9XCJjb2x1bW4uY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoY29sdW1uLmVkaXRhYmxlIHx8ICFoaWRlTm9uRWRpdGFibGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGljdF09XCJkaWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1UZW1wbGF0ZXNdPVwiaXRlbVRlbXBsYXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVjaW1hbFBhcnRdPVwiZGVjaW1hbFBhcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hvcml6b250YWxdPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29udHJvbFZhbHVlQ2hhbmdlKT1cIm9uQ29udHJvbFZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVOb25FZGl0YWJsZV09XCJoaWRlTm9uRWRpdGFibGVcIj48L3RldGEtcHJvcGVydHktZ3JpZC1ncm91cD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -16,8 +16,8 @@ import { ExpandCardModule } from "../expand-card/expand-card.module";
16
16
  import { PropertyGridItemDescriptionDirective } from './property-grid/property-grid-item-description.directive';
17
17
  import * as i0 from "@angular/core";
18
18
  export class PropertyGridModule {
19
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: PropertyGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.4", ngImport: i0, type: PropertyGridModule, declarations: [PropertyGridComponent,
19
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: PropertyGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: PropertyGridModule, declarations: [PropertyGridComponent,
21
21
  PropertyGridGroupComponent,
22
22
  PropertyGridItemComponent,
23
23
  PropertyGridItemDescriptionDirective], imports: [CommonModule,
@@ -32,7 +32,7 @@ export class PropertyGridModule {
32
32
  TranslocoModule,
33
33
  HintModule,
34
34
  ExpandCardModule], exports: [PropertyGridComponent, PropertyGridItemDescriptionDirective] });
35
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: PropertyGridModule, providers: [
35
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: PropertyGridModule, providers: [
36
36
  {
37
37
  provide: TRANSLOCO_SCOPE,
38
38
  useValue: { scope: 'errors', alias: 'errors' },
@@ -51,7 +51,7 @@ export class PropertyGridModule {
51
51
  HintModule,
52
52
  ExpandCardModule] });
53
53
  }
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: PropertyGridModule, decorators: [{
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: PropertyGridModule, decorators: [{
55
55
  type: NgModule,
56
56
  args: [{
57
57
  declarations: [
@@ -202,8 +202,8 @@ export class RadioComponent {
202
202
  this._setChecked(this.selectedButton$);
203
203
  }
204
204
  }
205
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: RadioComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
206
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: RadioComponent, selector: "teta-radio", inputs: { inline: "inline", checkChangeSelected: "checkChangeSelected", disabled: "disabled", value: "value" }, host: { listeners: { "focus": "focusHandler($event)", "focusout": "focusoutHandler($event)", "keydown": "keyEvent($event)" }, properties: { "tabindex": "this.tabindex", "class.radio": "this.radioClass", "class.radio_inline": "this.inline" } }, providers: [
205
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: RadioComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
206
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: RadioComponent, selector: "teta-radio", inputs: { inline: "inline", checkChangeSelected: "checkChangeSelected", disabled: "disabled", value: "value" }, host: { listeners: { "focus": "focusHandler($event)", "focusout": "focusoutHandler($event)", "keydown": "keyEvent($event)" }, properties: { "tabindex": "this.tabindex", "class.radio": "this.radioClass", "class.radio_inline": "this.inline" } }, providers: [
207
207
  {
208
208
  provide: NG_VALUE_ACCESSOR,
209
209
  useExisting: forwardRef(() => RadioComponent),
@@ -211,7 +211,7 @@ export class RadioComponent {
211
211
  },
212
212
  ], ngImport: i0, template: "<ng-content></ng-content>", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
213
213
  }
214
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: RadioComponent, decorators: [{
214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: RadioComponent, decorators: [{
215
215
  type: Component,
216
216
  args: [{ selector: 'teta-radio', providers: [
217
217
  {
@@ -36,10 +36,10 @@ export class RadioButtonComponent {
36
36
  ngOnDestroy() {
37
37
  this.radio._removeButton(this);
38
38
  }
39
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: RadioButtonComponent, deps: [{ token: i0.ViewContainerRef }, { token: i1.RadioComponent, host: true }], target: i0.ɵɵFactoryTarget.Component });
40
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: RadioButtonComponent, selector: "teta-radio-button", inputs: { checked: "checked", disabled: "disabled", value: "value" }, host: { listeners: { "click": "hostClick()" }, properties: { "class.radio-button": "this.radioButton", "class.radio-button-selected": "this.selected", "class.radio-button-checked": "this.checked", "class.radio-button_disabled": "this.disabled" } }, ngImport: i0, template: "<div class=\"radio-button-icon\">\n <div *ngIf=\"checked\" class=\"radio-button-small-icon\"></div>\n</div>\n<ng-content></ng-content>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
39
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: RadioButtonComponent, deps: [{ token: i0.ViewContainerRef }, { token: i1.RadioComponent, host: true }], target: i0.ɵɵFactoryTarget.Component });
40
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: RadioButtonComponent, selector: "teta-radio-button", inputs: { checked: "checked", disabled: "disabled", value: "value" }, host: { listeners: { "click": "hostClick()" }, properties: { "class.radio-button": "this.radioButton", "class.radio-button-selected": "this.selected", "class.radio-button-checked": "this.checked", "class.radio-button_disabled": "this.disabled" } }, ngImport: i0, template: "<div class=\"radio-button-icon\">\n <div *ngIf=\"checked\" class=\"radio-button-small-icon\"></div>\n</div>\n<ng-content></ng-content>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
41
41
  }
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: RadioButtonComponent, decorators: [{
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: RadioButtonComponent, decorators: [{
43
43
  type: Component,
44
44
  args: [{ selector: 'teta-radio-button', encapsulation: ViewEncapsulation.None, template: "<div class=\"radio-button-icon\">\n <div *ngIf=\"checked\" class=\"radio-button-small-icon\"></div>\n</div>\n<ng-content></ng-content>\n" }]
45
45
  }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i1.RadioComponent, decorators: [{
@@ -5,11 +5,11 @@ import { RadioButtonComponent } from './radio-button/radio-button.component';
5
5
  import { FormsModule } from '@angular/forms';
6
6
  import * as i0 from "@angular/core";
7
7
  export class RadioModule {
8
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: RadioModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.4", ngImport: i0, type: RadioModule, declarations: [RadioComponent, RadioButtonComponent], imports: [CommonModule, FormsModule], exports: [RadioComponent, RadioButtonComponent] });
10
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: RadioModule, imports: [CommonModule, FormsModule] });
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: RadioModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: RadioModule, declarations: [RadioComponent, RadioButtonComponent], imports: [CommonModule, FormsModule], exports: [RadioComponent, RadioButtonComponent] });
10
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: RadioModule, imports: [CommonModule, FormsModule] });
11
11
  }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: RadioModule, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: RadioModule, decorators: [{
13
13
  type: NgModule,
14
14
  args: [{
15
15
  declarations: [RadioComponent, RadioButtonComponent],
@@ -148,10 +148,10 @@ export class ResizePanelComponent {
148
148
  }
149
149
  }
150
150
  }
151
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ResizePanelComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
152
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: ResizePanelComponent, selector: "teta-resize-panel", inputs: { size: "size", direction: "direction", grabPosition: "grabPosition", name: "name", minSize: "minSize", maxSize: "maxSize" }, host: { properties: { "class.resize-panel": "this.resizePanelClass" } }, ngImport: i0, template: "<ng-content></ng-content>\n<div #grab class=\"resize-grab\"\n [style.width.px]=\"direction === 'vertical' ? size : ''\"\n [style.height.px]=\"direction === 'horizontal' ? size : ''\"\n (resizeStart)=\"resizeStart($event)\"\n (resizeProcess)=\"resizeProcess($event)\"\n (resizeEnd)=\"resizeEnd($event)\"\n [tetaResizeDrag]=\"direction\"\n [ngClass]=\"getClassName()\">\n <teta-icon [name]=\"icon\" [palette]=\"'text'\"></teta-icon>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: i3.ResizeDragDirective, selector: "[tetaResizeDrag]", inputs: ["tetaResizeDrag"], outputs: ["resizeStart", "resizeProcess", "resizeEnd"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
151
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ResizePanelComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
152
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: ResizePanelComponent, selector: "teta-resize-panel", inputs: { size: "size", direction: "direction", grabPosition: "grabPosition", name: "name", minSize: "minSize", maxSize: "maxSize" }, host: { properties: { "class.resize-panel": "this.resizePanelClass" } }, ngImport: i0, template: "<ng-content></ng-content>\n<div #grab class=\"resize-grab\"\n [style.width.px]=\"direction === 'vertical' ? size : ''\"\n [style.height.px]=\"direction === 'horizontal' ? size : ''\"\n (resizeStart)=\"resizeStart($event)\"\n (resizeProcess)=\"resizeProcess($event)\"\n (resizeEnd)=\"resizeEnd($event)\"\n [tetaResizeDrag]=\"direction\"\n [ngClass]=\"getClassName()\">\n <teta-icon [name]=\"icon\" [palette]=\"'text'\"></teta-icon>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: i3.ResizeDragDirective, selector: "[tetaResizeDrag]", inputs: ["tetaResizeDrag"], outputs: ["resizeStart", "resizeProcess", "resizeEnd"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
153
153
  }
154
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ResizePanelComponent, decorators: [{
154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ResizePanelComponent, decorators: [{
155
155
  type: Component,
156
156
  args: [{ selector: 'teta-resize-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n<div #grab class=\"resize-grab\"\n [style.width.px]=\"direction === 'vertical' ? size : ''\"\n [style.height.px]=\"direction === 'horizontal' ? size : ''\"\n (resizeStart)=\"resizeStart($event)\"\n (resizeProcess)=\"resizeProcess($event)\"\n (resizeEnd)=\"resizeEnd($event)\"\n [tetaResizeDrag]=\"direction\"\n [ngClass]=\"getClassName()\">\n <teta-icon [name]=\"icon\" [palette]=\"'text'\"></teta-icon>\n</div>\n" }]
157
157
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
@@ -5,11 +5,11 @@ import { IconModule } from '../icon/icon.module';
5
5
  import { ResizeDragModule } from '../../directive/resize-drag/resize-drag.module';
6
6
  import * as i0 from "@angular/core";
7
7
  export class ResizePanelModule {
8
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ResizePanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.4", ngImport: i0, type: ResizePanelModule, declarations: [ResizePanelComponent], imports: [CommonModule, IconModule, ResizeDragModule], exports: [ResizePanelComponent] });
10
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ResizePanelModule, imports: [CommonModule, IconModule, ResizeDragModule] });
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ResizePanelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.0", ngImport: i0, type: ResizePanelModule, declarations: [ResizePanelComponent], imports: [CommonModule, IconModule, ResizeDragModule], exports: [ResizePanelComponent] });
10
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ResizePanelModule, imports: [CommonModule, IconModule, ResizeDragModule] });
11
11
  }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: ResizePanelModule, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: ResizePanelModule, decorators: [{
13
13
  type: NgModule,
14
14
  args: [{
15
15
  declarations: [ResizePanelComponent],
@@ -1,7 +1,7 @@
1
1
  import { ChangeDetectionStrategy, Component, ContentChild, forwardRef, HostBinding, Input, } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
2
3
  import { Align } from '../../../common/enum/align.enum';
3
4
  import { VerticalAlign } from '../../../common/enum/vertical-align.enum';
4
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
5
  import { SelectOptionDirective } from '../select-option.directive';
6
6
  import { SelectValueDirective } from '../select-value.directive';
7
7
  import * as i0 from "@angular/core";
@@ -25,7 +25,9 @@ export class SelectComponent {
25
25
  multiple;
26
26
  set options(options) {
27
27
  this._options = options;
28
- if (this._internalValue !== null && this._internalValue !== undefined && this.options) {
28
+ if (this._internalValue !== null &&
29
+ this._internalValue !== undefined &&
30
+ this.options) {
29
31
  this.getSelectedValue(this._internalValue);
30
32
  }
31
33
  }
@@ -66,7 +68,7 @@ export class SelectComponent {
66
68
  if (!this.searchText) {
67
69
  return this.options;
68
70
  }
69
- return this.options?.filter((option) => this.getSearchString(option)
71
+ return this.options?.filter(option => this.getSearchString(option)
70
72
  .toLowerCase()
71
73
  .indexOf(this.searchText.toLowerCase()) >= 0);
72
74
  }
@@ -103,7 +105,7 @@ export class SelectComponent {
103
105
  else {
104
106
  this.value = [...this.value, option];
105
107
  }
106
- this._internalValue = this.value.map((_) => this.getValue(_));
108
+ this._internalValue = this.value.map(_ => this.getValue(_));
107
109
  this.onChange(this._internalValue);
108
110
  }
109
111
  else {
@@ -126,11 +128,11 @@ export class SelectComponent {
126
128
  removeItemClick(option, event) {
127
129
  event.stopPropagation();
128
130
  this.removeItem(option);
129
- this._internalValue = this.value.map((_) => this.getValue(_));
131
+ this._internalValue = this.value.map(_ => this.getValue(_));
130
132
  this.onChange(this._internalValue);
131
133
  }
132
134
  removeItem(option) {
133
- this.value = this.value.filter((_) => _ !== option);
135
+ this.value = this.value.filter(_ => _ !== option);
134
136
  }
135
137
  search(text) {
136
138
  this.searchText = text;
@@ -171,20 +173,16 @@ export class SelectComponent {
171
173
  focus() {
172
174
  this._elementRef.nativeElement.focus();
173
175
  }
174
- ngOnInit() {
175
- }
176
176
  writeValue(value) {
177
177
  this._internalValue = value;
178
178
  this.getSelectedValue(value);
179
179
  this._cdr.detectChanges();
180
180
  }
181
- onChange = () => {
182
- };
181
+ onChange = () => { };
183
182
  registerOnChange(fn) {
184
183
  this.onChange = fn;
185
184
  }
186
- onTouched = () => {
187
- };
185
+ onTouched = () => { };
188
186
  registerOnTouched(fn) {
189
187
  this.onTouched = fn;
190
188
  }
@@ -196,25 +194,25 @@ export class SelectComponent {
196
194
  if (this.multiple) {
197
195
  this.value =
198
196
  value && this.options
199
- ? this.options.filter((option) => value.indexOf(this.getValue(option)) > -1)
197
+ ? this.options.filter(option => value.indexOf(this.getValue(option)) > -1)
200
198
  : [];
201
199
  }
202
200
  else {
203
201
  this.value =
204
202
  this.options &&
205
- this.options?.find((option) => this.getValue(option) === value);
203
+ this.options?.find(option => this.getValue(option) === value);
206
204
  }
207
205
  }
208
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SelectComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.TetaConfigService }], target: i0.ɵɵFactoryTarget.Component });
209
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.4", type: SelectComponent, selector: "teta-select", inputs: { multiple: "multiple", options: "options", invalid: "invalid", align: "align", verticalAlign: "verticalAlign", autoClose: "autoClose", autoCloseIgnore: "autoCloseIgnore", disabled: "disabled", itemSize: "itemSize", virtual: "virtual", icon: "icon", placeholder: "placeholder", appendToBody: "appendToBody", allowNull: "allowNull", viewType: "viewType", notFoundText: "notFoundText", valueRef: "valueRef", textRef: "textRef", searchRef: "searchRef" }, host: { properties: { "class.select_multiple": "this.multiple", "class.select_open": "this.open", "class.select": "this.selectClass", "tabindex": "this.tabindex", "class.select_disabled": "this.isDisabled" } }, providers: [
206
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: SelectComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.TetaConfigService }], target: i0.ɵɵFactoryTarget.Component });
207
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.0", type: SelectComponent, selector: "teta-select", inputs: { multiple: "multiple", options: "options", invalid: "invalid", align: "align", verticalAlign: "verticalAlign", autoClose: "autoClose", autoCloseIgnore: "autoCloseIgnore", disabled: "disabled", itemSize: "itemSize", virtual: "virtual", icon: "icon", placeholder: "placeholder", appendToBody: "appendToBody", allowNull: "allowNull", viewType: "viewType", notFoundText: "notFoundText", valueRef: "valueRef", textRef: "textRef", searchRef: "searchRef" }, host: { properties: { "class.select_multiple": "this.multiple", "class.select_open": "this.open", "class.select": "this.selectClass", "tabindex": "this.tabindex", "class.select_disabled": "this.isDisabled" } }, providers: [
210
208
  {
211
209
  provide: NG_VALUE_ACCESSOR,
212
210
  useExisting: forwardRef(() => SelectComponent),
213
211
  multi: true,
214
212
  },
215
- ], queries: [{ propertyName: "optionDirective", first: true, predicate: SelectOptionDirective, descendants: true, static: true }, { propertyName: "valueDirective", first: true, predicate: SelectValueDirective, descendants: true, static: true }], ngImport: i0, template: "<ng-container *tetaLet=\"locale | async as loc\">\n <teta-dropdown [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [autoClose]=\"autoClose\"\n [autoCloseIgnore]=\"autoCloseIgnore\"\n [(open)]=\"open\"\n [appendToBody]=\"appendToBody\"\n [disabled]=\"disabled\"\n [viewType]=\"viewType\"\n class=\"row row_auto\">\n <div tetaDropdownHead\n [class]=\"'row row_auto select-head select_'+viewType\"\n [class.select-head_invalid]=\"invalid\">\n <div class=\"row_auto flex align-center\">\n <teta-icon *ngIf=\"icon\" [name]=\"icon\" [palette]=\"'text'\" class=\"margin-right-1\"></teta-icon>\n <span class=\"placeholder\" *ngIf=\"(value == null || value?.length === 0)&&!multiple\">\n {{placeholder || loc.notSelected}}\n </span>\n <ng-container\n *ngTemplateOutlet=\"valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}\"></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\" [palette]=\"'text'\"></teta-icon>\n </div>\n <div *ngIf=\"options?.length\" tetaDropdownContent class=\"select-body row_auto\"\n (click)=\"$event.preventDefault()\">\n <ng-container *ngIf=\"searchRef\">\n <div class=\"select-search padding-h-2\">\n <teta-text-field [ngModel]=\"searchText\"\n [class]=\"'select_'+viewType\"\n (ngModelChange)=\"search($event)\"\n [placeholder]=\"loc.search\"\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n </ng-container>\n <ng-container *ngIf=\"visibleOptions?.length;else notFound \">\n <ng-container *ngIf=\"!multiple && allowNull\">\n <div [class]=\"'margin-h-2 list-item list-item_interactive select_'+viewType\"\n (click)=\"clear()\">\n {{loc.notSelected}}\n </div>\n <div class=\"list-divider margin-bottom-0\"></div>\n </ng-container>\n <teta-scrollable *ngIf=\"virtual; else default\" class=\"column column_auto padding-h-2\">\n <cdk-virtual-scroll-viewport tetaScrollable\n [itemSize]=\"40\"\n minBufferPx=\"200\"\n maxBufferPx=\"600\">\n <div [class]=\"'select-list-item select-list-item_interactive justify-content-between select_'+viewType\"\n *cdkVirtualFor=\"let option of visibleOptions; templateCacheSize: 0;\"\n [class.select-list-item_active]=\"itemSelected(option)\"\n [tetaHighlight]=\"searchText\"\n (click)=\"clickOption(option, $event)\">\n <div [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </div>\n <teta-icon *ngIf=\"itemSelected(option)\" [name]=\"'tick'\" [palette]=\"'text'\"\n class=\"margin-left-2\"></teta-icon>\n </div>\n </cdk-virtual-scroll-viewport>\n </teta-scrollable>\n <ng-template #default>\n <teta-scrollable class=\"column column_auto padding-h-2\" [contentClass]=\"['column', 'column_auto']\">\n <div class=\"select-list\">\n <div [class]=\"'list-item list-item_interactive justify-content-between select_'+viewType\"\n *ngFor=\"let option of visibleOptions\"\n [class.select-list-item_active]=\"itemSelected(option) && multiple\"\n [class.select-list-item]=\"multiple\"\n (click)=\"clickOption(option, $event)\">\n <span [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </span>\n <teta-icon *ngIf=\"itemSelected(option) && multiple\" [name]=\"'tick'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </div>\n </teta-scrollable>\n </ng-template>\n </ng-container>\n <div class=\"row row_auto select-chip-field flex-wrap\" *ngIf=\"multiple && value?.length\">\n <div *ngFor=\"let item of value\" class=\"tag\">\n {{getText(item)}}\n <teta-icon class=\"cursor-pointer\" [palette]=\"'text'\" [name]=\"'closeCircle'\" (click)=\"removeItemClick(item, $event)\"></teta-icon>\n </div>\n </div>\n </div>\n </teta-dropdown>\n <ng-template #notFound>\n <p\n class=\"padding-h-3 text-overflow-ellipsis overflow-hidden select-not-found-option\">{{notFoundText || loc.notFound}}</p>\n </ng-template>\n <ng-template #optionDefault let-option>\n {{getText(option)}}\n </ng-template>\n <ng-template #valueDefault let-value>\n <div class=\"row_auto overflow-hidden text-overflow-ellipsis\" *ngIf=\"multiple\">\n {{loc.selected + ' ' + value?.length}}\n </div>\n <ng-container *ngIf=\"!multiple\">\n <span class=\"row row_auto overflow-hidden text-overflow-ellipsis\">{{getText(value)}}</span>\n </ng-container>\n </ng-template>\n</ng-container>\n\n", styles: [""], dependencies: [{ kind: "component", type: i2.DropdownComponent, selector: "teta-dropdown", exportAs: ["dropdown"] }, { kind: "directive", type: i3.DropdownHeadDirective, selector: "[tetaDropdownHead]" }, { kind: "directive", type: i4.DropdownContentDirective, selector: "[tetaDropdownContent]" }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i6.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i6.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: i9.HighlightDirective, selector: "[tetaHighlight]", inputs: ["tetaHighlight"] }, { kind: "component", type: i10.TextFieldComponent, selector: "teta-text-field", inputs: ["placeholder", "leftIconName", "disabled", "onlyNumber", "decimalPart", "invalid"] }, { kind: "directive", type: i11.LetDirective, selector: "[tetaLet]", inputs: ["tetaLet"] }, { kind: "directive", type: i12.ScrollableDirective, selector: "[tetaScrollable]" }, { kind: "component", type: i13.ScrollableComponent, selector: "teta-scrollable", inputs: ["direction", "showScrollbars", "contentClass"], outputs: ["scroll"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
213
+ ], queries: [{ propertyName: "optionDirective", first: true, predicate: SelectOptionDirective, descendants: true, static: true }, { propertyName: "valueDirective", first: true, predicate: SelectValueDirective, descendants: true, static: true }], ngImport: i0, template: "<ng-container *tetaLet='locale | async as loc'>\n <teta-dropdown [align]='align'\n [verticalAlign]='verticalAlign'\n [autoClose]='autoClose'\n [autoCloseIgnore]='autoCloseIgnore'\n [(open)]='open'\n [appendToBody]='appendToBody'\n [disabled]='disabled'\n [viewType]='viewType'\n class='row row_auto'>\n <div tetaDropdownHead\n [class]=\"'row row_auto select-head select_'+viewType\"\n [class.select-head_invalid]='invalid'>\n <div class='row_auto flex align-center'>\n <teta-icon *ngIf='icon' [name]='icon' [palette]=\"'text'\" class='margin-right-1'></teta-icon>\n <span class='placeholder' *ngIf='(value=== null ||value=== undefined || value?.length === 0)&&!multiple'>\n {{placeholder || loc.notSelected}}\n </span>\n <ng-container\n *ngTemplateOutlet='valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}'></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\" [palette]=\"'text'\"></teta-icon>\n </div>\n <div *ngIf='options?.length'\n tetaDropdownContent\n class='select-body row_auto'\n (click)='$event.preventDefault()'>\n <ng-container *ngIf='searchRef'>\n <div class='select-search padding-h-2'>\n <teta-text-field [ngModel]='searchText'\n [class]=\"'select_'+viewType\"\n (ngModelChange)='search($event)'\n [placeholder]='loc.search'\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n </ng-container>\n <ng-container *ngIf='visibleOptions?.length;else notFound '>\n <ng-container *ngIf='!multiple && allowNull'>\n <div [class]=\"'margin-h-2 list-item list-item_interactive select_'+viewType\"\n (click)='clear()'>\n {{loc.notSelected}}\n </div>\n <div class='list-divider margin-bottom-0'></div>\n </ng-container>\n <teta-scrollable *ngIf='virtual; else default' class='column column_auto padding-h-2'>\n <cdk-virtual-scroll-viewport tetaScrollable\n [itemSize]='40'\n minBufferPx='200'\n maxBufferPx='600'>\n <div [class]=\"'select-list-item select-list-item_interactive justify-content-between select_'+viewType\"\n *cdkVirtualFor='let option of visibleOptions; templateCacheSize: 0;'\n [class.select-list-item_active]='itemSelected(option)'\n [tetaHighlight]='searchText'\n (click)='clickOption(option, $event)'>\n <div [tetaHighlight]='searchText'>\n <ng-container\n *ngTemplateOutlet='optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}'>\n </ng-container>\n </div>\n <teta-icon *ngIf='itemSelected(option)' [name]=\"'tick'\" [palette]=\"'text'\"\n class='margin-left-2'></teta-icon>\n </div>\n </cdk-virtual-scroll-viewport>\n </teta-scrollable>\n <ng-template #default>\n <teta-scrollable class='column column_auto padding-h-2' [contentClass]=\"['column', 'column_auto']\">\n <div class='select-list'>\n <div [class]=\"'list-item list-item_interactive justify-content-between select_'+viewType\"\n *ngFor='let option of visibleOptions'\n [class.select-list-item_active]='itemSelected(option) && multiple'\n [class.select-list-item]='multiple'\n (click)='clickOption(option, $event)'>\n <span [tetaHighlight]='searchText'>\n <ng-container\n *ngTemplateOutlet='optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}'>\n </ng-container>\n </span>\n <teta-icon *ngIf='itemSelected(option) && multiple' [name]=\"'tick'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </div>\n </teta-scrollable>\n </ng-template>\n </ng-container>\n <div class='row row_auto select-chip-field flex-wrap' *ngIf='multiple && value?.length'>\n <div *ngFor='let item of value' class='tag'>\n {{getText(item)}}\n <teta-icon class='cursor-pointer' [palette]=\"'text'\" [name]=\"'closeCircle'\"\n (click)='removeItemClick(item, $event)'></teta-icon>\n </div>\n </div>\n </div>\n </teta-dropdown>\n <ng-template #notFound>\n <p\n class='padding-h-3 text-overflow-ellipsis overflow-hidden select-not-found-option'>{{notFoundText || loc.notFound}}</p>\n </ng-template>\n <ng-template #optionDefault let-option>\n {{getText(option)}}\n </ng-template>\n <ng-template #valueDefault let-value>\n <div class='row_auto overflow-hidden text-overflow-ellipsis' *ngIf='multiple'>\n {{loc.selected + ' ' + value?.length}}\n </div>\n <ng-container *ngIf='!multiple'>\n <span class='row row_auto overflow-hidden text-overflow-ellipsis'>{{getText(value)}}</span>\n </ng-container>\n </ng-template>\n</ng-container>\n\n", styles: [""], dependencies: [{ kind: "component", type: i2.DropdownComponent, selector: "teta-dropdown", exportAs: ["dropdown"] }, { kind: "directive", type: i3.DropdownHeadDirective, selector: "[tetaDropdownHead]" }, { kind: "directive", type: i4.DropdownContentDirective, selector: "[tetaDropdownContent]" }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i6.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i6.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: i9.HighlightDirective, selector: "[tetaHighlight]", inputs: ["tetaHighlight"] }, { kind: "component", type: i10.TextFieldComponent, selector: "teta-text-field", inputs: ["placeholder", "leftIconName", "disabled", "onlyNumber", "decimalPart", "invalid"] }, { kind: "directive", type: i11.LetDirective, selector: "[tetaLet]", inputs: ["tetaLet"] }, { kind: "directive", type: i12.ScrollableDirective, selector: "[tetaScrollable]" }, { kind: "component", type: i13.ScrollableComponent, selector: "teta-scrollable", inputs: ["direction", "showScrollbars", "contentClass"], outputs: ["scroll"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
216
214
  }
217
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImport: i0, type: SelectComponent, decorators: [{
215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: SelectComponent, decorators: [{
218
216
  type: Component,
219
217
  args: [{ selector: 'teta-select', providers: [
220
218
  {
@@ -222,7 +220,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
222
220
  useExisting: forwardRef(() => SelectComponent),
223
221
  multi: true,
224
222
  },
225
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *tetaLet=\"locale | async as loc\">\n <teta-dropdown [align]=\"align\"\n [verticalAlign]=\"verticalAlign\"\n [autoClose]=\"autoClose\"\n [autoCloseIgnore]=\"autoCloseIgnore\"\n [(open)]=\"open\"\n [appendToBody]=\"appendToBody\"\n [disabled]=\"disabled\"\n [viewType]=\"viewType\"\n class=\"row row_auto\">\n <div tetaDropdownHead\n [class]=\"'row row_auto select-head select_'+viewType\"\n [class.select-head_invalid]=\"invalid\">\n <div class=\"row_auto flex align-center\">\n <teta-icon *ngIf=\"icon\" [name]=\"icon\" [palette]=\"'text'\" class=\"margin-right-1\"></teta-icon>\n <span class=\"placeholder\" *ngIf=\"(value == null || value?.length === 0)&&!multiple\">\n {{placeholder || loc.notSelected}}\n </span>\n <ng-container\n *ngTemplateOutlet=\"valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}\"></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\" [palette]=\"'text'\"></teta-icon>\n </div>\n <div *ngIf=\"options?.length\" tetaDropdownContent class=\"select-body row_auto\"\n (click)=\"$event.preventDefault()\">\n <ng-container *ngIf=\"searchRef\">\n <div class=\"select-search padding-h-2\">\n <teta-text-field [ngModel]=\"searchText\"\n [class]=\"'select_'+viewType\"\n (ngModelChange)=\"search($event)\"\n [placeholder]=\"loc.search\"\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n </ng-container>\n <ng-container *ngIf=\"visibleOptions?.length;else notFound \">\n <ng-container *ngIf=\"!multiple && allowNull\">\n <div [class]=\"'margin-h-2 list-item list-item_interactive select_'+viewType\"\n (click)=\"clear()\">\n {{loc.notSelected}}\n </div>\n <div class=\"list-divider margin-bottom-0\"></div>\n </ng-container>\n <teta-scrollable *ngIf=\"virtual; else default\" class=\"column column_auto padding-h-2\">\n <cdk-virtual-scroll-viewport tetaScrollable\n [itemSize]=\"40\"\n minBufferPx=\"200\"\n maxBufferPx=\"600\">\n <div [class]=\"'select-list-item select-list-item_interactive justify-content-between select_'+viewType\"\n *cdkVirtualFor=\"let option of visibleOptions; templateCacheSize: 0;\"\n [class.select-list-item_active]=\"itemSelected(option)\"\n [tetaHighlight]=\"searchText\"\n (click)=\"clickOption(option, $event)\">\n <div [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </div>\n <teta-icon *ngIf=\"itemSelected(option)\" [name]=\"'tick'\" [palette]=\"'text'\"\n class=\"margin-left-2\"></teta-icon>\n </div>\n </cdk-virtual-scroll-viewport>\n </teta-scrollable>\n <ng-template #default>\n <teta-scrollable class=\"column column_auto padding-h-2\" [contentClass]=\"['column', 'column_auto']\">\n <div class=\"select-list\">\n <div [class]=\"'list-item list-item_interactive justify-content-between select_'+viewType\"\n *ngFor=\"let option of visibleOptions\"\n [class.select-list-item_active]=\"itemSelected(option) && multiple\"\n [class.select-list-item]=\"multiple\"\n (click)=\"clickOption(option, $event)\">\n <span [tetaHighlight]=\"searchText\">\n <ng-container\n *ngTemplateOutlet=\"optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}\">\n </ng-container>\n </span>\n <teta-icon *ngIf=\"itemSelected(option) && multiple\" [name]=\"'tick'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </div>\n </teta-scrollable>\n </ng-template>\n </ng-container>\n <div class=\"row row_auto select-chip-field flex-wrap\" *ngIf=\"multiple && value?.length\">\n <div *ngFor=\"let item of value\" class=\"tag\">\n {{getText(item)}}\n <teta-icon class=\"cursor-pointer\" [palette]=\"'text'\" [name]=\"'closeCircle'\" (click)=\"removeItemClick(item, $event)\"></teta-icon>\n </div>\n </div>\n </div>\n </teta-dropdown>\n <ng-template #notFound>\n <p\n class=\"padding-h-3 text-overflow-ellipsis overflow-hidden select-not-found-option\">{{notFoundText || loc.notFound}}</p>\n </ng-template>\n <ng-template #optionDefault let-option>\n {{getText(option)}}\n </ng-template>\n <ng-template #valueDefault let-value>\n <div class=\"row_auto overflow-hidden text-overflow-ellipsis\" *ngIf=\"multiple\">\n {{loc.selected + ' ' + value?.length}}\n </div>\n <ng-container *ngIf=\"!multiple\">\n <span class=\"row row_auto overflow-hidden text-overflow-ellipsis\">{{getText(value)}}</span>\n </ng-container>\n </ng-template>\n</ng-container>\n\n" }]
223
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *tetaLet='locale | async as loc'>\n <teta-dropdown [align]='align'\n [verticalAlign]='verticalAlign'\n [autoClose]='autoClose'\n [autoCloseIgnore]='autoCloseIgnore'\n [(open)]='open'\n [appendToBody]='appendToBody'\n [disabled]='disabled'\n [viewType]='viewType'\n class='row row_auto'>\n <div tetaDropdownHead\n [class]=\"'row row_auto select-head select_'+viewType\"\n [class.select-head_invalid]='invalid'>\n <div class='row_auto flex align-center'>\n <teta-icon *ngIf='icon' [name]='icon' [palette]=\"'text'\" class='margin-right-1'></teta-icon>\n <span class='placeholder' *ngIf='(value=== null ||value=== undefined || value?.length === 0)&&!multiple'>\n {{placeholder || loc.notSelected}}\n </span>\n <ng-container\n *ngTemplateOutlet='valueDirective ? valueDirective.template : valueDefault; context: {$implicit: value, value: value}'></ng-container>\n </div>\n <teta-icon [name]=\"'arrowDownSmall'\" [palette]=\"'text'\"></teta-icon>\n </div>\n <div *ngIf='options?.length'\n tetaDropdownContent\n class='select-body row_auto'\n (click)='$event.preventDefault()'>\n <ng-container *ngIf='searchRef'>\n <div class='select-search padding-h-2'>\n <teta-text-field [ngModel]='searchText'\n [class]=\"'select_'+viewType\"\n (ngModelChange)='search($event)'\n [placeholder]='loc.search'\n [leftIconName]=\"'search'\"></teta-text-field>\n </div>\n </ng-container>\n <ng-container *ngIf='visibleOptions?.length;else notFound '>\n <ng-container *ngIf='!multiple && allowNull'>\n <div [class]=\"'margin-h-2 list-item list-item_interactive select_'+viewType\"\n (click)='clear()'>\n {{loc.notSelected}}\n </div>\n <div class='list-divider margin-bottom-0'></div>\n </ng-container>\n <teta-scrollable *ngIf='virtual; else default' class='column column_auto padding-h-2'>\n <cdk-virtual-scroll-viewport tetaScrollable\n [itemSize]='40'\n minBufferPx='200'\n maxBufferPx='600'>\n <div [class]=\"'select-list-item select-list-item_interactive justify-content-between select_'+viewType\"\n *cdkVirtualFor='let option of visibleOptions; templateCacheSize: 0;'\n [class.select-list-item_active]='itemSelected(option)'\n [tetaHighlight]='searchText'\n (click)='clickOption(option, $event)'>\n <div [tetaHighlight]='searchText'>\n <ng-container\n *ngTemplateOutlet='optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}'>\n </ng-container>\n </div>\n <teta-icon *ngIf='itemSelected(option)' [name]=\"'tick'\" [palette]=\"'text'\"\n class='margin-left-2'></teta-icon>\n </div>\n </cdk-virtual-scroll-viewport>\n </teta-scrollable>\n <ng-template #default>\n <teta-scrollable class='column column_auto padding-h-2' [contentClass]=\"['column', 'column_auto']\">\n <div class='select-list'>\n <div [class]=\"'list-item list-item_interactive justify-content-between select_'+viewType\"\n *ngFor='let option of visibleOptions'\n [class.select-list-item_active]='itemSelected(option) && multiple'\n [class.select-list-item]='multiple'\n (click)='clickOption(option, $event)'>\n <span [tetaHighlight]='searchText'>\n <ng-container\n *ngTemplateOutlet='optionDirective ? optionDirective.template : optionDefault; context: {$implicit: option, option: option}'>\n </ng-container>\n </span>\n <teta-icon *ngIf='itemSelected(option) && multiple' [name]=\"'tick'\" [palette]=\"'text'\"></teta-icon>\n </div>\n </div>\n </teta-scrollable>\n </ng-template>\n </ng-container>\n <div class='row row_auto select-chip-field flex-wrap' *ngIf='multiple && value?.length'>\n <div *ngFor='let item of value' class='tag'>\n {{getText(item)}}\n <teta-icon class='cursor-pointer' [palette]=\"'text'\" [name]=\"'closeCircle'\"\n (click)='removeItemClick(item, $event)'></teta-icon>\n </div>\n </div>\n </div>\n </teta-dropdown>\n <ng-template #notFound>\n <p\n class='padding-h-3 text-overflow-ellipsis overflow-hidden select-not-found-option'>{{notFoundText || loc.notFound}}</p>\n </ng-template>\n <ng-template #optionDefault let-option>\n {{getText(option)}}\n </ng-template>\n <ng-template #valueDefault let-value>\n <div class='row_auto overflow-hidden text-overflow-ellipsis' *ngIf='multiple'>\n {{loc.selected + ' ' + value?.length}}\n </div>\n <ng-container *ngIf='!multiple'>\n <span class='row row_auto overflow-hidden text-overflow-ellipsis'>{{getText(value)}}</span>\n </ng-container>\n </ng-template>\n</ng-container>\n\n" }]
226
224
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.TetaConfigService }]; }, propDecorators: { multiple: [{
227
225
  type: HostBinding,
228
226
  args: ['class.select_multiple']
@@ -283,4 +281,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.4", ngImpor
283
281
  type: HostBinding,
284
282
  args: ['class.select_disabled']
285
283
  }] } });
286
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvc2VsZWN0L3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC9zZWxlY3Qvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBRVosVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEdBRU4sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUV2RSxPQUFPLEVBQXVCLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQW1CL0QsTUFBTSxPQUFPLGVBQWU7SUEwRWhCO0lBQ0E7SUFDQTtJQXpFVixRQUFRLENBQVU7SUFFbEIsSUFBYSxPQUFPLENBQUMsT0FBYztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDckYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVRLE9BQU8sQ0FB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O2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdOLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBSW5ELGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBR2hCLElBQUk7c0JBQXJDLFdBQVc7dUJBQUMsbUJBQW1CO2dCQUVjLFdBQVc7c0JBQXhELFdBQVc7dUJBQUMsY0FBYztnQkFHZixRQUFRO3NCQURuQixXQUFXO3VCQUFDLFVBQVU7Z0JBTW5CLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FsaWdufSBmcm9tICcuLi8uLi8uLi9jb21tb24vZW51bS9hbGlnbi5lbnVtJztcbmltcG9ydCB7VmVydGljYWxBbGlnbn0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VudW0vdmVydGljYWwtYWxpZ24uZW51bSc7XG5pbXBvcnQge0F1dG9DbG9zZUlnbm9yZUNhc2V9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9hdXRvLWNsb3NlLWlnbm9yZS1jYXNlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1NlbGVjdE9wdGlvbkRpcmVjdGl2ZX0gZnJvbSAnLi4vc2VsZWN0LW9wdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHtTZWxlY3RWYWx1ZURpcmVjdGl2ZX0gZnJvbSAnLi4vc2VsZWN0LXZhbHVlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1RldGFDb25maWdTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vbG9jYWxlL3RldGEtY29uZmlnLnNlcnZpY2VcIjtcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7VGV0YUxvY2FsaXNhdGlvbn0gZnJvbSBcIi4uLy4uLy4uL2xvY2FsZS90ZXRhLWxvY2FsaXNhdGlvblwiO1xuaW1wb3J0IHt2aWV3VHlwZX0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9tb2RlbC92aWV3LXR5cGUubW9kZWxcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGV0YS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2VsZWN0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZWxlY3RfbXVsdGlwbGUnKVxuICBASW5wdXQoKVxuICBtdWx0aXBsZTogYm9vbGVhbjtcblxuICBASW5wdXQoKSBzZXQgb3B0aW9ucyhvcHRpb25zOiBhbnlbXSkge1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmICh0aGlzLl9pbnRlcm5hbFZhbHVlICE9PSBudWxsICYmIHRoaXMuX2ludGVybmFsVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRWYWx1ZSh0aGlzLl9pbnRlcm5hbFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIEBJbnB1dCgpIGludmFsaWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFsaWduOiBBbGlnbiA9IEFsaWduLm1pbldpZHRoO1xuICBASW5wdXQoKSB2ZXJ0aWNhbEFsaWduOiBWZXJ0aWNhbEFsaWduID0gVmVydGljYWxBbGlnbi5hdXRvO1xuICBASW5wdXQoKSBhdXRvQ2xvc2UgPSB0cnVlO1xuICBASW5wdXQoKSBhdXRvQ2xvc2VJZ25vcmU6IEFycmF5PEF1dG9DbG9zZUlnbm9yZUNhc2U+ID0gWydpbnNpZGUnXTtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGl0ZW1TaXplID0gMzI7XG4gIEBJbnB1dCgpIHZpcnR1YWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGljb246IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgYXBwZW5kVG9Cb2R5OiBib29sZWFuO1xuICBASW5wdXQoKSBhbGxvd051bGwgPSB0cnVlO1xuICBASW5wdXQoKSB2aWV3VHlwZTogdmlld1R5cGUgPSAncm91bmRlZCc7XG4gIEBJbnB1dCgpIG5vdEZvdW5kVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSB2YWx1ZVJlZjogKChpdGVtOiBhbnkpID0+IGFueSkgfCBzdHJpbmc7XG4gIEBJbnB1dCgpIHRleHRSZWY6ICgoaXRlbTogYW55KSA9PiBzdHJpbmcpIHwgc3RyaW5nO1xuICBASW5wdXQoKSBzZWFyY2hSZWY6IHN0cmluZyB8ICgoaXRlbTogYW55KSA9PiBzdHJpbmcpO1xuXG4gIEBDb250ZW50Q2hpbGQoU2VsZWN0T3B0aW9uRGlyZWN0aXZlLCB7c3RhdGljOiB0cnVlfSlcbiAgb3B0aW9uRGlyZWN0aXZlOiBTZWxlY3RPcHRpb25EaXJlY3RpdmU7XG5cbiAgQENvbnRlbnRDaGlsZChTZWxlY3RWYWx1ZURpcmVjdGl2ZSwge3N0YXRpYzogdHJ1ZX0pXG4gIHZhbHVlRGlyZWN0aXZlOiBTZWxlY3RWYWx1ZURpcmVjdGl2ZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNlbGVjdF9vcGVuJykgb3BlbiA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2VsZWN0JykgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RDbGFzcyA9IHRydWU7XG5cbiAgQEhvc3RCaW5kaW5nKCd0YWJpbmRleCcpXG4gIHByaXZhdGUgZ2V0IHRhYmluZGV4KCkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkID8gbnVsbCA6IDA7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNlbGVjdF9kaXNhYmxlZCcpXG4gIGdldCBpc0Rpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgdmFsdWU6IGFueSB8IGFueVtdO1xuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIGxvY2FsZTogT2JzZXJ2YWJsZTxUZXRhTG9jYWxpc2F0aW9uPjtcblxuICBnZXQgdmlzaWJsZU9wdGlvbnMoKTogYW55W10ge1xuICAgIGlmICghdGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zPy5maWx0ZXIoXG4gICAgICAob3B0aW9uKSA9PlxuICAgICAgICB0aGlzLmdldFNlYXJjaFN0cmluZyhvcHRpb24pXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAuaW5kZXhPZih0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSkgPj0gMFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9vcHRpb25zOiBhbnkgfCBhbnlbXTtcbiAgcHJpdmF0ZSBfaW50ZXJuYWxWYWx1ZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9jb25maWc6IFRldGFDb25maWdTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5fY29uZmlnLmxvY2FsZVxuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgbGV0IHZhbDogYW55O1xuICAgIGlmICh0aGlzLm11bHRpcGxlID09PSB0cnVlKSB7XG4gICAgICB2YWwgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgY2xpY2tPcHRpb24ob3B0aW9uOiBhbnksIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgPT09IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy52YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnZhbHVlLmluZGV4T2Yob3B0aW9uKSA+PSAwKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbShvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFsuLi50aGlzLnZhbHVlLCBvcHRpb25dO1xuICAgICAgfVxuICAgICAgdGhpcy5faW50ZXJuYWxWYWx1ZSA9IHRoaXMudmFsdWUubWFwKChfKSA9PiB0aGlzLmdldFZhbHVlKF8pKVxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9pbnRlcm5hbFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IG9wdGlvbjtcbiAgICAgIHRoaXMuX2ludGVybmFsVmFsdWUgPSB0aGlzLmdldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9pbnRlcm5hbFZhbHVlKTtcbiAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGl0ZW1TZWxlY3RlZChvcHRpb246IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZT8uaW5kZXhPZihvcHRpb24pID49IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBvcHRpb247XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlSXRlbUNsaWNrKG9wdGlvbjogYW55LCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucmVtb3ZlSXRlbShvcHRpb24pO1xuICAgIHRoaXMuX2ludGVybmFsVmFsdWUgPSB0aGlzLnZhbHVlLm1hcCgoXykgPT4gdGhpcy5nZXRWYWx1ZShfKSlcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX2ludGVybmFsVmFsdWUpO1xuICB9XG5cbiAgcmVtb3ZlSXRlbShvcHRpb246IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLmZpbHRlcigoXykgPT4gXyAhPT0gb3B0aW9uKTtcbiAgfVxuXG4gIHNlYXJjaCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB0ZXh0O1xuICB9XG5cbiAgZ2V0VGV4dChvcHRpb246IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKG9wdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZW9mIHRoaXMudGV4dFJlZikge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIG9wdGlvblt0aGlzLnRleHRSZWZdO1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy50ZXh0UmVmKG9wdGlvbik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cbiAgfVxuXG4gIGdldFZhbHVlKG9wdGlvbjogYW55KTogYW55IHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB0aGlzLnZhbHVlUmVmKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gb3B0aW9uW3RoaXMudmFsdWVSZWZdO1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVJlZihvcHRpb24pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9XG4gIH1cblxuICBnZXRTZWFyY2hTdHJpbmcob3B0aW9uOiBhbnkpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHlwZW9mIHRoaXMuc2VhcmNoUmVmKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gb3B0aW9uW3RoaXMuc2VhcmNoUmVmXTtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoUmVmKG9wdGlvbik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSB8IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5faW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZ2V0U2VsZWN0ZWRWYWx1ZSh2YWx1ZSlcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge1xuICB9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgb25Ub3VjaGVkID0gKCkgPT4ge1xuICB9O1xuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkVmFsdWUodmFsdWU6IGFueSB8IGFueVtdKSB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMudmFsdWUgPVxuICAgICAgICB2YWx1ZSAmJiB0aGlzLm9wdGlvbnNcbiAgICAgICAgICA/IHRoaXMub3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAob3B0aW9uKSA9PiB2YWx1ZS5pbmRleE9mKHRoaXMuZ2V0VmFsdWUob3B0aW9uKSkgPiAtMVxuICAgICAgICAgIClcbiAgICAgICAgICA6IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgdGhpcy5vcHRpb25zICYmXG4gICAgICAgIHRoaXMub3B0aW9ucz8uZmluZCgob3B0aW9uKSA9PiB0aGlzLmdldFZhbHVlKG9wdGlvbikgPT09IHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKnRldGFMZXQ9XCJsb2NhbGUgfCBhc3luYyBhcyBsb2NcIj5cbiAgPHRldGEtZHJvcGRvd24gW2FsaWduXT1cImFsaWduXCJcbiAgICAgICAgICAgICAgICAgW3ZlcnRpY2FsQWxpZ25dPVwidmVydGljYWxBbGlnblwiXG4gICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiYXV0b0Nsb3NlXCJcbiAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZUlnbm9yZV09XCJhdXRvQ2xvc2VJZ25vcmVcIlxuICAgICAgICAgICAgICAgICBbKG9wZW4pXT1cIm9wZW5cIlxuICAgICAgICAgICAgICAgICBbYXBwZW5kVG9Cb2R5XT1cImFwcGVuZFRvQm9keVwiXG4gICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgIFt2aWV3VHlwZV09XCJ2aWV3VHlwZVwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwicm93IHJvd19hdXRvXCI+XG4gICAgPGRpdiB0ZXRhRHJvcGRvd25IZWFkXG4gICAgICAgICBbY2xhc3NdPVwiJ3JvdyByb3dfYXV0byBzZWxlY3QtaGVhZCBzZWxlY3RfJyt2aWV3VHlwZVwiXG4gICAgICAgICBbY2xhc3Muc2VsZWN0LWhlYWRfaW52YWxpZF09XCJpbnZhbGlkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93X2F1dG8gZmxleCBhbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgPHRldGEtaWNvbiAqbmdJZj1cImljb25cIiBbbmFtZV09XCJpY29uXCIgW3BhbGV0dGVdPVwiJ3RleHQnXCIgY2xhc3M9XCJtYXJnaW4tcmlnaHQtMVwiPjwvdGV0YS1pY29uPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInBsYWNlaG9sZGVyXCIgKm5nSWY9XCIodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZT8ubGVuZ3RoID09PSAwKSYmIW11bHRpcGxlXCI+XG4gICAgICAgICAge3twbGFjZWhvbGRlciB8fCBsb2Mubm90U2VsZWN0ZWR9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInZhbHVlRGlyZWN0aXZlID8gdmFsdWVEaXJlY3RpdmUudGVtcGxhdGUgOiB2YWx1ZURlZmF1bHQ7IGNvbnRleHQ6IHskaW1wbGljaXQ6IHZhbHVlLCB2YWx1ZTogdmFsdWV9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx0ZXRhLWljb24gW25hbWVdPVwiJ2Fycm93RG93blNtYWxsJ1wiIFtwYWxldHRlXT1cIid0ZXh0J1wiPjwvdGV0YS1pY29uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zPy5sZW5ndGhcIiB0ZXRhRHJvcGRvd25Db250ZW50IGNsYXNzPVwic2VsZWN0LWJvZHkgcm93X2F1dG9cIlxuICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoUmVmXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtc2VhcmNoIHBhZGRpbmctaC0yXCI+XG4gICAgICAgICAgPHRldGEtdGV4dC1maWVsZCBbbmdNb2RlbF09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInc2VsZWN0Xycrdmlld1R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxvYy5zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xlZnRJY29uTmFtZV09XCInc2VhcmNoJ1wiPjwvdGV0YS10ZXh0LWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpc2libGVPcHRpb25zPy5sZW5ndGg7ZWxzZSBub3RGb3VuZCBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtdWx0aXBsZSAmJiBhbGxvd051bGxcIj5cbiAgICAgICAgICA8ZGl2IFtjbGFzc109XCInbWFyZ2luLWgtMiBsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlIHNlbGVjdF8nK3ZpZXdUeXBlXCJcbiAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhcigpXCI+XG4gICAgICAgICAgICB7e2xvYy5ub3RTZWxlY3RlZH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZGl2aWRlciBtYXJnaW4tYm90dG9tLTBcIj48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0ZXRhLXNjcm9sbGFibGUgKm5nSWY9XCJ2aXJ0dWFsOyBlbHNlIGRlZmF1bHRcIiBjbGFzcz1cImNvbHVtbiBjb2x1bW5fYXV0byBwYWRkaW5nLWgtMlwiPlxuICAgICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgdGV0YVNjcm9sbGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtU2l6ZV09XCI0MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5CdWZmZXJQeD1cIjIwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCdWZmZXJQeD1cIjYwMFwiPlxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ3NlbGVjdC1saXN0LWl0ZW0gc2VsZWN0LWxpc3QtaXRlbV9pbnRlcmFjdGl2ZSBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBzZWxlY3RfJyt2aWV3VHlwZVwiXG4gICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiB2aXNpYmxlT3B0aW9uczsgdGVtcGxhdGVDYWNoZVNpemU6IDA7XCJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdC1saXN0LWl0ZW1fYWN0aXZlXT1cIml0ZW1TZWxlY3RlZChvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgW3RldGFIaWdobGlnaHRdPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja09wdGlvbihvcHRpb24sICRldmVudClcIj5cbiAgICAgICAgICAgICAgPGRpdiBbdGV0YUhpZ2hsaWdodF09XCJzZWFyY2hUZXh0XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHRpb25EaXJlY3RpdmUgPyBvcHRpb25EaXJlY3RpdmUudGVtcGxhdGUgOiBvcHRpb25EZWZhdWx0OyBjb250ZXh0OiB7JGltcGxpY2l0OiBvcHRpb24sIG9wdGlvbjogb3B0aW9ufVwiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHRldGEtaWNvbiAqbmdJZj1cIml0ZW1TZWxlY3RlZChvcHRpb24pXCIgW25hbWVdPVwiJ3RpY2snXCIgW3BhbGV0dGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hcmdpbi1sZWZ0LTJcIj48L3RldGEtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgICAgICA8L3RldGEtc2Nyb2xsYWJsZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgIDx0ZXRhLXNjcm9sbGFibGUgY2xhc3M9XCJjb2x1bW4gY29sdW1uX2F1dG8gcGFkZGluZy1oLTJcIiBbY29udGVudENsYXNzXT1cIlsnY29sdW1uJywgJ2NvbHVtbl9hdXRvJ11cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtbGlzdFwiPlxuICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCInbGlzdC1pdGVtIGxpc3QtaXRlbV9pbnRlcmFjdGl2ZSBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiAgc2VsZWN0Xycrdmlld1R5cGVcIlxuICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgdmlzaWJsZU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3QtbGlzdC1pdGVtX2FjdGl2ZV09XCJpdGVtU2VsZWN0ZWQob3B0aW9uKSAmJiBtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdC1saXN0LWl0ZW1dPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGlja09wdGlvbihvcHRpb24sICRldmVudClcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW3RldGFIaWdobGlnaHRdPVwic2VhcmNoVGV4dFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwib3B0aW9uRGlyZWN0aXZlID8gb3B0aW9uRGlyZWN0aXZlLnRlbXBsYXRlIDogb3B0aW9uRGVmYXVsdDsgY29udGV4dDogeyRpbXBsaWNpdDogb3B0aW9uLCBvcHRpb246IG9wdGlvbn1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDx0ZXRhLWljb24gKm5nSWY9XCJpdGVtU2VsZWN0ZWQob3B0aW9uKSAmJiBtdWx0aXBsZVwiIFtuYW1lXT1cIid0aWNrJ1wiIFtwYWxldHRlXT1cIid0ZXh0J1wiPjwvdGV0YS1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGV0YS1zY3JvbGxhYmxlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IHJvd19hdXRvIHNlbGVjdC1jaGlwLWZpZWxkIGZsZXgtd3JhcFwiICpuZ0lmPVwibXVsdGlwbGUgJiYgdmFsdWU/Lmxlbmd0aFwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZhbHVlXCIgY2xhc3M9XCJ0YWdcIj5cbiAgICAgICAgICB7e2dldFRleHQoaXRlbSl9fVxuICAgICAgICAgIDx0ZXRhLWljb24gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtwYWxldHRlXT1cIid0ZXh0J1wiIFtuYW1lXT1cIidjbG9zZUNpcmNsZSdcIiAoY2xpY2spPVwicmVtb3ZlSXRlbUNsaWNrKGl0ZW0sICRldmVudClcIj48L3RldGEtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC90ZXRhLWRyb3Bkb3duPlxuICA8bmctdGVtcGxhdGUgI25vdEZvdW5kPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInBhZGRpbmctaC0zIHRleHQtb3ZlcmZsb3ctZWxsaXBzaXMgb3ZlcmZsb3ctaGlkZGVuIHNlbGVjdC1ub3QtZm91bmQtb3B0aW9uXCI+e3tub3RGb3VuZFRleHQgfHwgbG9jLm5vdEZvdW5kfX08L3A+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjb3B0aW9uRGVmYXVsdCBsZXQtb3B0aW9uPlxuICAgIHt7Z2V0VGV4dChvcHRpb24pfX1cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICN2YWx1ZURlZmF1bHQgbGV0LXZhbHVlPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dfYXV0byBvdmVyZmxvdy1oaWRkZW4gdGV4dC1vdmVyZmxvdy1lbGxpcHNpc1wiICpuZ0lmPVwibXVsdGlwbGVcIj5cbiAgICAgIHt7bG9jLnNlbGVjdGVkICsgJyAnICsgdmFsdWU/Lmxlbmd0aH19XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtdWx0aXBsZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJyb3cgcm93X2F1dG8gb3ZlcmZsb3ctaGlkZGVuIHRleHQtb3ZlcmZsb3ctZWxsaXBzaXNcIj57e2dldFRleHQodmFsdWUpfX08L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cblxuIl19
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvc2VsZWN0L3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC9zZWxlY3Qvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBRVosVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXpFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFJekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQWVqRSxNQUFNLE9BQU8sZUFBZTtJQThFaEI7SUFDQTtJQUNBO0lBN0VWLFFBQVEsQ0FBVTtJQUVsQixJQUFhLE9BQU8sQ0FBQyxPQUFjO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQ0UsSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJO1lBQzVCLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUztZQUNqQyxJQUFJLENBQUMsT0FBTyxFQUNaO1lBQ0EsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVRLE9BQU8sQ0FB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Q0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFHTixlQUFlO3NCQURkLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlyRCxjQUFjO3NCQURiLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdsQixJQUFJO3NCQUFyQyxXQUFXO3VCQUFDLG1CQUFtQjtnQkFFYyxXQUFXO3NCQUF4RCxXQUFXO3VCQUFDLGNBQWM7Z0JBR2YsUUFBUTtzQkFEbkIsV0FBVzt1QkFBQyxVQUFVO2dCQU1uQixVQUFVO3NCQURiLFdBQVc7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQXV0b0Nsb3NlSWdub3JlQ2FzZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9hdXRvLWNsb3NlLWlnbm9yZS1jYXNlJztcbmltcG9ydCB7IEFsaWduIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VudW0vYWxpZ24uZW51bSc7XG5pbXBvcnQgeyBWZXJ0aWNhbEFsaWduIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VudW0vdmVydGljYWwtYWxpZ24uZW51bSc7XG5pbXBvcnQgeyB2aWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9tb2RlbC92aWV3LXR5cGUubW9kZWwnO1xuaW1wb3J0IHsgVGV0YUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9sb2NhbGUvdGV0YS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBUZXRhTG9jYWxpc2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbG9jYWxlL3RldGEtbG9jYWxpc2F0aW9uJztcbmltcG9ydCB7IFNlbGVjdE9wdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL3NlbGVjdC1vcHRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IFNlbGVjdFZhbHVlRGlyZWN0aXZlIH0gZnJvbSAnLi4vc2VsZWN0LXZhbHVlLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNlbGVjdF9tdWx0aXBsZScpXG4gIEBJbnB1dCgpXG4gIG11bHRpcGxlOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHNldCBvcHRpb25zKG9wdGlvbnM6IGFueVtdKSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKFxuICAgICAgdGhpcy5faW50ZXJuYWxWYWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgdGhpcy5faW50ZXJuYWxWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLm9wdGlvbnNcbiAgICApIHtcbiAgICAgIHRoaXMuZ2V0U2VsZWN0ZWRWYWx1ZSh0aGlzLl9pbnRlcm5hbFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIEBJbnB1dCgpIGludmFsaWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFsaWduOiBBbGlnbiA9IEFsaWduLm1pbldpZHRoO1xuICBASW5wdXQoKSB2ZXJ0aWNhbEFsaWduOiBWZXJ0aWNhbEFsaWduID0gVmVydGljYWxBbGlnbi5hdXRvO1xuICBASW5wdXQoKSBhdXRvQ2xvc2UgPSB0cnVlO1xuICBASW5wdXQoKSBhdXRvQ2xvc2VJZ25vcmU6IEFycmF5PEF1dG9DbG9zZUlnbm9yZUNhc2U+ID0gWydpbnNpZGUnXTtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGl0ZW1TaXplID0gMzI7XG4gIEBJbnB1dCgpIHZpcnR1YWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGljb246IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgYXBwZW5kVG9Cb2R5OiBib29sZWFuO1xuICBASW5wdXQoKSBhbGxvd051bGwgPSB0cnVlO1xuICBASW5wdXQoKSB2aWV3VHlwZTogdmlld1R5cGUgPSAncm91bmRlZCc7XG4gIEBJbnB1dCgpIG5vdEZvdW5kVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSB2YWx1ZVJlZjogKChpdGVtOiBhbnkpID0+IGFueSkgfCBzdHJpbmc7XG4gIEBJbnB1dCgpIHRleHRSZWY6ICgoaXRlbTogYW55KSA9PiBzdHJpbmcpIHwgc3RyaW5nO1xuICBASW5wdXQoKSBzZWFyY2hSZWY6IHN0cmluZyB8ICgoaXRlbTogYW55KSA9PiBzdHJpbmcpO1xuXG4gIEBDb250ZW50Q2hpbGQoU2VsZWN0T3B0aW9uRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBvcHRpb25EaXJlY3RpdmU6IFNlbGVjdE9wdGlvbkRpcmVjdGl2ZTtcblxuICBAQ29udGVudENoaWxkKFNlbGVjdFZhbHVlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICB2YWx1ZURpcmVjdGl2ZTogU2VsZWN0VmFsdWVEaXJlY3RpdmU7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZWxlY3Rfb3BlbicpIG9wZW4gPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNlbGVjdCcpIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0Q2xhc3MgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygndGFiaW5kZXgnKVxuICBwcml2YXRlIGdldCB0YWJpbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/IG51bGwgOiAwO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zZWxlY3RfZGlzYWJsZWQnKVxuICBnZXQgaXNEaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgfVxuXG4gIHZhbHVlOiBhbnkgfCBhbnlbXTtcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBsb2NhbGU6IE9ic2VydmFibGU8VGV0YUxvY2FsaXNhdGlvbj47XG5cbiAgZ2V0IHZpc2libGVPcHRpb25zKCk6IGFueVtdIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucz8uZmlsdGVyKFxuICAgICAgb3B0aW9uID0+XG4gICAgICAgIHRoaXMuZ2V0U2VhcmNoU3RyaW5nKG9wdGlvbilcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIC5pbmRleE9mKHRoaXMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKSA+PSAwXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX29wdGlvbnM6IGFueSB8IGFueVtdO1xuICBwcml2YXRlIF9pbnRlcm5hbFZhbHVlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgX2NvbmZpZzogVGV0YUNvbmZpZ1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLl9jb25maWcubG9jYWxlO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgbGV0IHZhbDogYW55O1xuICAgIGlmICh0aGlzLm11bHRpcGxlID09PSB0cnVlKSB7XG4gICAgICB2YWwgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgY2xpY2tPcHRpb24ob3B0aW9uOiBhbnksIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgPT09IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy52YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnZhbHVlLmluZGV4T2Yob3B0aW9uKSA+PSAwKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbShvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFsuLi50aGlzLnZhbHVlLCBvcHRpb25dO1xuICAgICAgfVxuICAgICAgdGhpcy5faW50ZXJuYWxWYWx1ZSA9IHRoaXMudmFsdWUubWFwKF8gPT4gdGhpcy5nZXRWYWx1ZShfKSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX2ludGVybmFsVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gb3B0aW9uO1xuICAgICAgdGhpcy5faW50ZXJuYWxWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX2ludGVybmFsVmFsdWUpO1xuICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaXRlbVNlbGVjdGVkKG9wdGlvbjogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlPy5pbmRleE9mKG9wdGlvbikgPj0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG9wdGlvbjtcbiAgICB9XG4gIH1cblxuICByZW1vdmVJdGVtQ2xpY2sob3B0aW9uOiBhbnksIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5yZW1vdmVJdGVtKG9wdGlvbik7XG4gICAgdGhpcy5faW50ZXJuYWxWYWx1ZSA9IHRoaXMudmFsdWUubWFwKF8gPT4gdGhpcy5nZXRWYWx1ZShfKSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9pbnRlcm5hbFZhbHVlKTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW0ob3B0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoXyA9PiBfICE9PSBvcHRpb24pO1xuICB9XG5cbiAgc2VhcmNoKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRleHQ7XG4gIH1cblxuICBnZXRUZXh0KG9wdGlvbjogYW55KTogc3RyaW5nIHtcbiAgICBpZiAob3B0aW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlb2YgdGhpcy50ZXh0UmVmKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gb3B0aW9uW3RoaXMudGV4dFJlZl07XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRSZWYob3B0aW9uKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgfVxuICB9XG5cbiAgZ2V0VmFsdWUob3B0aW9uOiBhbnkpOiBhbnkge1xuICAgIHN3aXRjaCAodHlwZW9mIHRoaXMudmFsdWVSZWYpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiBvcHRpb25bdGhpcy52YWx1ZVJlZl07XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlUmVmKG9wdGlvbik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlYXJjaFN0cmluZyhvcHRpb246IGFueSk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0eXBlb2YgdGhpcy5zZWFyY2hSZWYpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiBvcHRpb25bdGhpcy5zZWFyY2hSZWZdO1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hSZWYob3B0aW9uKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSB8IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5faW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZ2V0U2VsZWN0ZWRWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRWYWx1ZSh2YWx1ZTogYW55IHwgYW55W10pIHtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy52YWx1ZSA9XG4gICAgICAgIHZhbHVlICYmIHRoaXMub3B0aW9uc1xuICAgICAgICAgID8gdGhpcy5vcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgb3B0aW9uID0+IHZhbHVlLmluZGV4T2YodGhpcy5nZXRWYWx1ZShvcHRpb24pKSA+IC0xXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9XG4gICAgICAgIHRoaXMub3B0aW9ucyAmJlxuICAgICAgICB0aGlzLm9wdGlvbnM/LmZpbmQob3B0aW9uID0+IHRoaXMuZ2V0VmFsdWUob3B0aW9uKSA9PT0gdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqdGV0YUxldD0nbG9jYWxlIHwgYXN5bmMgYXMgbG9jJz5cbiAgPHRldGEtZHJvcGRvd24gW2FsaWduXT0nYWxpZ24nXG4gICAgICAgICAgICAgICAgIFt2ZXJ0aWNhbEFsaWduXT0ndmVydGljYWxBbGlnbidcbiAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09J2F1dG9DbG9zZSdcbiAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZUlnbm9yZV09J2F1dG9DbG9zZUlnbm9yZSdcbiAgICAgICAgICAgICAgICAgWyhvcGVuKV09J29wZW4nXG4gICAgICAgICAgICAgICAgIFthcHBlbmRUb0JvZHldPSdhcHBlbmRUb0JvZHknXG4gICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09J2Rpc2FibGVkJ1xuICAgICAgICAgICAgICAgICBbdmlld1R5cGVdPSd2aWV3VHlwZSdcbiAgICAgICAgICAgICAgICAgY2xhc3M9J3JvdyByb3dfYXV0byc+XG4gICAgPGRpdiB0ZXRhRHJvcGRvd25IZWFkXG4gICAgICAgICBbY2xhc3NdPVwiJ3JvdyByb3dfYXV0byBzZWxlY3QtaGVhZCBzZWxlY3RfJyt2aWV3VHlwZVwiXG4gICAgICAgICBbY2xhc3Muc2VsZWN0LWhlYWRfaW52YWxpZF09J2ludmFsaWQnPlxuICAgICAgPGRpdiBjbGFzcz0ncm93X2F1dG8gZmxleCBhbGlnbi1jZW50ZXInPlxuICAgICAgICA8dGV0YS1pY29uICpuZ0lmPSdpY29uJyBbbmFtZV09J2ljb24nIFtwYWxldHRlXT1cIid0ZXh0J1wiIGNsYXNzPSdtYXJnaW4tcmlnaHQtMSc+PC90ZXRhLWljb24+XG4gICAgICAgIDxzcGFuIGNsYXNzPSdwbGFjZWhvbGRlcicgKm5nSWY9Jyh2YWx1ZT09PSBudWxsIHx8dmFsdWU9PT0gdW5kZWZpbmVkIHx8IHZhbHVlPy5sZW5ndGggPT09IDApJiYhbXVsdGlwbGUnPlxuICAgICAgICAgIHt7cGxhY2Vob2xkZXIgfHwgbG9jLm5vdFNlbGVjdGVkfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9J3ZhbHVlRGlyZWN0aXZlID8gdmFsdWVEaXJlY3RpdmUudGVtcGxhdGUgOiB2YWx1ZURlZmF1bHQ7IGNvbnRleHQ6IHskaW1wbGljaXQ6IHZhbHVlLCB2YWx1ZTogdmFsdWV9Jz48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRldGEtaWNvbiBbbmFtZV09XCInYXJyb3dEb3duU21hbGwnXCIgW3BhbGV0dGVdPVwiJ3RleHQnXCI+PC90ZXRhLWljb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0nb3B0aW9ucz8ubGVuZ3RoJ1xuICAgICAgICAgdGV0YURyb3Bkb3duQ29udGVudFxuICAgICAgICAgY2xhc3M9J3NlbGVjdC1ib2R5IHJvd19hdXRvJ1xuICAgICAgICAgKGNsaWNrKT0nJGV2ZW50LnByZXZlbnREZWZhdWx0KCknPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0nc2VhcmNoUmVmJz5cbiAgICAgICAgPGRpdiBjbGFzcz0nc2VsZWN0LXNlYXJjaCBwYWRkaW5nLWgtMic+XG4gICAgICAgICAgPHRldGEtdGV4dC1maWVsZCBbbmdNb2RlbF09J3NlYXJjaFRleHQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ3NlbGVjdF8nK3ZpZXdUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT0nc2VhcmNoKCRldmVudCknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPSdsb2Muc2VhcmNoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xlZnRJY29uTmFtZV09XCInc2VhcmNoJ1wiPjwvdGV0YS10ZXh0LWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0ndmlzaWJsZU9wdGlvbnM/Lmxlbmd0aDtlbHNlIG5vdEZvdW5kICc+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9JyFtdWx0aXBsZSAmJiBhbGxvd051bGwnPlxuICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidtYXJnaW4taC0yIGxpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmUgc2VsZWN0Xycrdmlld1R5cGVcIlxuICAgICAgICAgICAgICAgKGNsaWNrKT0nY2xlYXIoKSc+XG4gICAgICAgICAgICB7e2xvYy5ub3RTZWxlY3RlZH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0nbGlzdC1kaXZpZGVyIG1hcmdpbi1ib3R0b20tMCc+PC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8dGV0YS1zY3JvbGxhYmxlICpuZ0lmPSd2aXJ0dWFsOyBlbHNlIGRlZmF1bHQnIGNsYXNzPSdjb2x1bW4gY29sdW1uX2F1dG8gcGFkZGluZy1oLTInPlxuICAgICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgdGV0YVNjcm9sbGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtU2l6ZV09JzQwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluQnVmZmVyUHg9JzIwMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJ1ZmZlclB4PSc2MDAnPlxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ3NlbGVjdC1saXN0LWl0ZW0gc2VsZWN0LWxpc3QtaXRlbV9pbnRlcmFjdGl2ZSBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBzZWxlY3RfJyt2aWV3VHlwZVwiXG4gICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPSdsZXQgb3B0aW9uIG9mIHZpc2libGVPcHRpb25zOyB0ZW1wbGF0ZUNhY2hlU2l6ZTogMDsnXG4gICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3QtbGlzdC1pdGVtX2FjdGl2ZV09J2l0ZW1TZWxlY3RlZChvcHRpb24pJ1xuICAgICAgICAgICAgICAgICBbdGV0YUhpZ2hsaWdodF09J3NlYXJjaFRleHQnXG4gICAgICAgICAgICAgICAgIChjbGljayk9J2NsaWNrT3B0aW9uKG9wdGlvbiwgJGV2ZW50KSc+XG4gICAgICAgICAgICAgIDxkaXYgW3RldGFIaWdobGlnaHRdPSdzZWFyY2hUZXh0Jz5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD0nb3B0aW9uRGlyZWN0aXZlID8gb3B0aW9uRGlyZWN0aXZlLnRlbXBsYXRlIDogb3B0aW9uRGVmYXVsdDsgY29udGV4dDogeyRpbXBsaWNpdDogb3B0aW9uLCBvcHRpb246IG9wdGlvbn0nPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHRldGEtaWNvbiAqbmdJZj0naXRlbVNlbGVjdGVkKG9wdGlvbiknIFtuYW1lXT1cIid0aWNrJ1wiIFtwYWxldHRlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9J21hcmdpbi1sZWZ0LTInPjwvdGV0YS1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgICAgIDwvdGV0YS1zY3JvbGxhYmxlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgPHRldGEtc2Nyb2xsYWJsZSBjbGFzcz0nY29sdW1uIGNvbHVtbl9hdXRvIHBhZGRpbmctaC0yJyBbY29udGVudENsYXNzXT1cIlsnY29sdW1uJywgJ2NvbHVtbl9hdXRvJ11cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9J3NlbGVjdC1saXN0Jz5cbiAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ2xpc3QtaXRlbSBsaXN0LWl0ZW1faW50ZXJhY3RpdmUganVzdGlmeS1jb250ZW50LWJldHdlZW4gIHNlbGVjdF8nK3ZpZXdUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAqbmdGb3I9J2xldCBvcHRpb24gb2YgdmlzaWJsZU9wdGlvbnMnXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdC1saXN0LWl0ZW1fYWN0aXZlXT0naXRlbVNlbGVjdGVkKG9wdGlvbikgJiYgbXVsdGlwbGUnXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdC1saXN0LWl0ZW1dPSdtdWx0aXBsZSdcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPSdjbGlja09wdGlvbihvcHRpb24sICRldmVudCknPlxuICAgICAgICAgICAgICA8c3BhbiBbdGV0YUhpZ2hsaWdodF09J3NlYXJjaFRleHQnPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PSdvcHRpb25EaXJlY3RpdmUgPyBvcHRpb25EaXJlY3RpdmUudGVtcGxhdGUgOiBvcHRpb25EZWZhdWx0OyBjb250ZXh0OiB7JGltcGxpY2l0OiBvcHRpb24sIG9wdGlvbjogb3B0aW9ufSc+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8dGV0YS1pY29uICpuZ0lmPSdpdGVtU2VsZWN0ZWQob3B0aW9uKSAmJiBtdWx0aXBsZScgW25hbWVdPVwiJ3RpY2snXCIgW3BhbGV0dGVdPVwiJ3RleHQnXCI+PC90ZXRhLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZXRhLXNjcm9sbGFibGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9J3JvdyByb3dfYXV0byBzZWxlY3QtY2hpcC1maWVsZCBmbGV4LXdyYXAnICpuZ0lmPSdtdWx0aXBsZSAmJiB2YWx1ZT8ubGVuZ3RoJz5cbiAgICAgICAgPGRpdiAqbmdGb3I9J2xldCBpdGVtIG9mIHZhbHVlJyBjbGFzcz0ndGFnJz5cbiAgICAgICAgICB7e2dldFRleHQoaXRlbSl9fVxuICAgICAgICAgIDx0ZXRhLWljb24gY2xhc3M9J2N1cnNvci1wb2ludGVyJyBbcGFsZXR0ZV09XCIndGV4dCdcIiBbbmFtZV09XCInY2xvc2VDaXJjbGUnXCJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9J3JlbW92ZUl0ZW1DbGljayhpdGVtLCAkZXZlbnQpJz48L3RldGEtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC90ZXRhLWRyb3Bkb3duPlxuICA8bmctdGVtcGxhdGUgI25vdEZvdW5kPlxuICAgIDxwXG4gICAgICBjbGFzcz0ncGFkZGluZy1oLTMgdGV4dC1vdmVyZmxvdy1lbGxpcHNpcyBvdmVyZmxvdy1oaWRkZW4gc2VsZWN0LW5vdC1mb3VuZC1vcHRpb24nPnt7bm90Rm91bmRUZXh0IHx8IGxvYy5ub3RGb3VuZH19PC9wPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI29wdGlvbkRlZmF1bHQgbGV0LW9wdGlvbj5cbiAgICB7e2dldFRleHQob3B0aW9uKX19XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjdmFsdWVEZWZhdWx0IGxldC12YWx1ZT5cbiAgICA8ZGl2IGNsYXNzPSdyb3dfYXV0byBvdmVyZmxvdy1oaWRkZW4gdGV4dC1vdmVyZmxvdy1lbGxpcHNpcycgKm5nSWY9J211bHRpcGxlJz5cbiAgICAgIHt7bG9jLnNlbGVjdGVkICsgJyAnICsgdmFsdWU/Lmxlbmd0aH19XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj0nIW11bHRpcGxlJz5cbiAgICAgIDxzcGFuIGNsYXNzPSdyb3cgcm93X2F1dG8gb3ZlcmZsb3ctaGlkZGVuIHRleHQtb3ZlcmZsb3ctZWxsaXBzaXMnPnt7Z2V0VGV4dCh2YWx1ZSl9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuXG4iXX0=