@guiexpert/table 0.0.2 → 1.0.2

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 (350) hide show
  1. package/.eslintrc.json +42 -0
  2. package/LICENSE +35 -0
  3. package/README.md +102 -0
  4. package/jest.config.ts +18 -0
  5. package/ng-package.json +7 -0
  6. package/package.json +10 -20
  7. package/project.json +47 -0
  8. package/{index.d.ts → src/index.ts} +72 -20
  9. package/src/lib/table/action/action-id.type.ts +24 -0
  10. package/{lib/table/action/on-action-triggered.if.d.ts → src/lib/table/action/on-action-triggered.if.ts} +4 -1
  11. package/src/lib/table/action/osx-shortcut-actionId-mapping.ts +29 -0
  12. package/src/lib/table/action/shortcut-actionid-mapping.type.ts +3 -0
  13. package/src/lib/table/action/shortcut.service.ts +134 -0
  14. package/src/lib/table/action/windows-shortcut-actionId-mapping.ts +27 -0
  15. package/src/lib/table/checkbox/checkbox-model.if.ts +16 -0
  16. package/src/lib/table/checkbox/checkbox-model.ts +62 -0
  17. package/src/lib/table/checkbox/tree-checkbox-model.ts +123 -0
  18. package/src/lib/table/color/color-rgb.if.ts +7 -0
  19. package/src/lib/table/color/color-rgb.ts +10 -0
  20. package/src/lib/table/color/ge-css-color-util.ts +43 -0
  21. package/src/lib/table/color/three-color-gradient-arg.if.ts +10 -0
  22. package/src/lib/table/color/three-color-gradient-arg.ts +14 -0
  23. package/src/lib/table/color/two-color-gradient-arg.if.ts +8 -0
  24. package/src/lib/table/color/two-color-gradient-arg.ts +12 -0
  25. package/src/lib/table/css-vars.ts +243 -0
  26. package/src/lib/table/data/common/aligns.ts +19 -0
  27. package/src/lib/table/data/common/area-map-factory.ts +14 -0
  28. package/src/lib/table/data/common/area-map.ts +11 -0
  29. package/src/lib/table/data/common/area-map.type.ts +5 -0
  30. package/{lib/table/data/common/args-adjust-columns-to-row-parent-params.d.ts → src/lib/table/data/common/args-adjust-columns-to-row-parent-params.ts} +11 -9
  31. package/src/lib/table/data/common/args-render-cell-div.ts +18 -0
  32. package/src/lib/table/data/common/boolean-function.ts +4 -0
  33. package/src/lib/table/data/common/cell-range.ts +57 -0
  34. package/src/lib/table/data/common/checkbox-column-def.ts +25 -0
  35. package/src/lib/table/data/common/checked-type.ts +1 -0
  36. package/src/lib/table/data/common/event/ge-cell-indices.ts +9 -0
  37. package/src/lib/table/data/common/event/ge-key-event.ts +10 -0
  38. package/src/lib/table/data/common/event/ge-model-change-event.ts +13 -0
  39. package/src/lib/table/data/common/event/ge-mouse-event.ts +38 -0
  40. package/src/lib/table/data/common/event/input/table-cell-update-event.if.ts +10 -0
  41. package/src/lib/table/data/common/event/input/table-cell-update-event.ts +14 -0
  42. package/src/lib/table/data/common/index-and-px.ts +9 -0
  43. package/src/lib/table/data/common/size.if.ts +4 -0
  44. package/src/lib/table/data/common/size.ts +9 -0
  45. package/src/lib/table/data/common/sizes.ts +35 -0
  46. package/src/lib/table/data/common/sort-item.ts +11 -0
  47. package/src/lib/table/data/common/tree-row-if.ts +11 -0
  48. package/src/lib/table/data/common/tree-row.ts +16 -0
  49. package/src/lib/table/data/common/value-label.if.ts +6 -0
  50. package/src/lib/table/data/common/value-label.ts +13 -0
  51. package/src/lib/table/data/div-scope.type.ts +5 -0
  52. package/src/lib/table/data/event/mouse-target-data.ts +45 -0
  53. package/src/lib/table/data/geo-data.ts +13 -0
  54. package/src/lib/table/data/options/auto-restore-options.if.ts +21 -0
  55. package/src/lib/table/data/options/auto-restore-options.ts +50 -0
  56. package/src/lib/table/data/options/default-row-heights.if.ts +5 -0
  57. package/src/lib/table/data/options/default-row-heights.ts +10 -0
  58. package/src/lib/table/data/options/icon.if.ts +7 -0
  59. package/src/lib/table/data/options/icon.ts +10 -0
  60. package/{lib/table/data/options/sorted-options.if.d.ts → src/lib/table/data/options/sorted-options.if.ts} +6 -3
  61. package/src/lib/table/data/options/sorted-options.ts +15 -0
  62. package/src/lib/table/data/options/table-options.if.ts +54 -0
  63. package/src/lib/table/data/options/table-options.ts +66 -0
  64. package/src/lib/table/data/options/tree-options.if.ts +10 -0
  65. package/src/lib/table/data/options/tree-options.ts +32 -0
  66. package/src/lib/table/data/table-model-and-options.if.ts +8 -0
  67. package/src/lib/table/data/table-model-and-options.ts +13 -0
  68. package/src/lib/table/data/tablemodel/area-ident.type.ts +18 -0
  69. package/src/lib/table/data/tablemodel/areamodel/abstract-area-model.ts +183 -0
  70. package/src/lib/table/data/tablemodel/areamodel/area-model-array-of-arrays.ts +59 -0
  71. package/src/lib/table/data/tablemodel/areamodel/area-model-cell-groups.ts +210 -0
  72. package/src/lib/table/data/tablemodel/areamodel/area-model-hidden.ts +120 -0
  73. package/src/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.ts +23 -0
  74. package/src/lib/table/data/tablemodel/areamodel/area-model-object-array.ts +105 -0
  75. package/src/lib/table/data/tablemodel/areamodel/area-model-tree.ts +215 -0
  76. package/src/lib/table/data/tablemodel/areamodel/area-model.if.ts +186 -0
  77. package/src/lib/table/data/tablemodel/areamodel/area-model.ts +110 -0
  78. package/src/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.ts +61 -0
  79. package/src/lib/table/data/tablemodel/areamodel/has-default-row-height-if.ts +3 -0
  80. package/src/lib/table/data/tablemodel/cellgroup/cell-group-ext.ts +167 -0
  81. package/src/lib/table/data/tablemodel/cellgroup/cell-group.if.ts +12 -0
  82. package/src/lib/table/data/tablemodel/cellgroup/cell-group.ts +18 -0
  83. package/src/lib/table/data/tablemodel/cellgroup/cellgroup-factory.ts +148 -0
  84. package/src/lib/table/data/tablemodel/column/column-def.if.ts +28 -0
  85. package/src/lib/table/data/tablemodel/column/column-def.ts +104 -0
  86. package/src/lib/table/data/tablemodel/padding.ts +9 -0
  87. package/src/lib/table/data/tablemodel/table-model.if.ts +90 -0
  88. package/src/lib/table/data/tablemodel/table-model.ts +352 -0
  89. package/src/lib/table/ele-scope.ts +283 -0
  90. package/src/lib/table/event-adapter.ts +28 -0
  91. package/src/lib/table/event-listener.if.ts +19 -0
  92. package/src/lib/table/factory/table-factory.ts +378 -0
  93. package/src/lib/table/factory/tree-factory.ts +51 -0
  94. package/src/lib/table/focus/focus-model.if.ts +14 -0
  95. package/src/lib/table/focus/focus-model.ts +48 -0
  96. package/{lib/table/focus/focus.type.d.ts → src/lib/table/focus/focus.type.ts} +3 -0
  97. package/src/lib/table/input-handler.ts +34 -0
  98. package/src/lib/table/mouse-handler.ts +236 -0
  99. package/src/lib/table/render-scope.ts +936 -0
  100. package/src/lib/table/renderer/cell-group-ext-cell-renderer.ts +27 -0
  101. package/{lib/table/renderer/cell-render.if.d.ts → src/lib/table/renderer/cell-render.if.ts} +10 -1
  102. package/src/lib/table/renderer/checkbox-boolean-property-cell-renderer.ts +63 -0
  103. package/src/lib/table/renderer/checkbox-cell-renderer.ts +39 -0
  104. package/src/lib/table/renderer/date-to-int-date-cell-renderer.ts +39 -0
  105. package/src/lib/table/renderer/date-to-iso-cell-renderer.ts +25 -0
  106. package/src/lib/table/renderer/date-to-locale-date-cell-renderer.ts +24 -0
  107. package/src/lib/table/renderer/date-to-tec-cell-renderer.ts +28 -0
  108. package/{lib/table/renderer/edit/edit-cell-renderer.type.d.ts → src/lib/table/renderer/edit/edit-cell-renderer.type.ts} +1 -0
  109. package/src/lib/table/renderer/edit/edit-input-pipe-for-number.ts +6 -0
  110. package/src/lib/table/renderer/edit/edit-input-pipe.if.ts +7 -0
  111. package/src/lib/table/renderer/edit/input-cell-renderer.ts +41 -0
  112. package/src/lib/table/renderer/edit/select-cell-renderer.ts +60 -0
  113. package/src/lib/table/renderer/male-female-to-icon-cell-renderer.ts +26 -0
  114. package/src/lib/table/renderer/number-cell-renderer.ts +38 -0
  115. package/src/lib/table/renderer/progress-bar-cell-renderer.ts +60 -0
  116. package/src/lib/table/renderer/renderer.ts +11 -0
  117. package/src/lib/table/renderer/star-rating-cell-renderer.ts +45 -0
  118. package/src/lib/table/renderer/true-false-cell-renderer.ts +28 -0
  119. package/src/lib/table/selection/selection-model.if.ts +20 -0
  120. package/src/lib/table/selection/selection-model.ts +109 -0
  121. package/src/lib/table/selection/selection-service.ts +120 -0
  122. package/{lib/table/selection/selection.type.d.ts → src/lib/table/selection/selection.type.ts} +3 -0
  123. package/src/lib/table/service/abstract-store-state.service.ts +105 -0
  124. package/src/lib/table/service/convenience-dom.service.ts +548 -0
  125. package/src/lib/table/service/data/collapsed-expanded.data.ts +11 -0
  126. package/src/lib/table/service/data/html-style.type.ts +1 -0
  127. package/src/lib/table/service/dom-service.if.ts +16 -0
  128. package/src/lib/table/service/ge-filter.service.ts +123 -0
  129. package/src/lib/table/service/simple-dom-service.ts +46 -0
  130. package/src/lib/table/service/sorter.service.ts +30 -0
  131. package/src/lib/table/service/store-state-collapsed-expand.service.ts +76 -0
  132. package/src/lib/table/service/store-state-scroll-pos.service.ts +40 -0
  133. package/src/lib/table/service/store-state-sorting.service.ts +41 -0
  134. package/src/lib/table/service/tree-row.service.ts +31 -0
  135. package/src/lib/table/table-api.ts +61 -0
  136. package/src/lib/table/table-scope.ts +433 -0
  137. package/src/test-setup.ts +1 -0
  138. package/tsconfig.json +22 -0
  139. package/tsconfig.lib.json +19 -0
  140. package/tsconfig.lib.prod.json +7 -0
  141. package/tsconfig.spec.json +20 -0
  142. package/esm2020/guiexpert-table.mjs +0 -5
  143. package/esm2020/index.mjs +0 -108
  144. package/esm2020/lib/table/action/action-id.type.mjs +0 -20
  145. package/esm2020/lib/table/action/on-action-triggered.if.mjs +0 -2
  146. package/esm2020/lib/table/action/osx-shortcut-actionId-mapping.mjs +0 -17
  147. package/esm2020/lib/table/action/shortcut-actionid-mapping.type.mjs +0 -2
  148. package/esm2020/lib/table/action/shortcut.service.mjs +0 -105
  149. package/esm2020/lib/table/action/windows-shortcut-actionId-mapping.mjs +0 -15
  150. package/esm2020/lib/table/checkbox/checkbox-model.if.mjs +0 -2
  151. package/esm2020/lib/table/checkbox/checkbox-model.mjs +0 -52
  152. package/esm2020/lib/table/checkbox/tree-checkbox-model.mjs +0 -106
  153. package/esm2020/lib/table/data/common/aligns.mjs +0 -19
  154. package/esm2020/lib/table/data/common/area-map-factory.mjs +0 -7
  155. package/esm2020/lib/table/data/common/area-map.mjs +0 -8
  156. package/esm2020/lib/table/data/common/area-map.type.mjs +0 -2
  157. package/esm2020/lib/table/data/common/args-adjust-columns-to-row-parent-params.mjs +0 -2
  158. package/esm2020/lib/table/data/common/args-render-cell-div.mjs +0 -2
  159. package/esm2020/lib/table/data/common/boolean-function.mjs +0 -3
  160. package/esm2020/lib/table/data/common/cell-range.mjs +0 -27
  161. package/esm2020/lib/table/data/common/checkbox-column.mjs +0 -15
  162. package/esm2020/lib/table/data/common/checked-type.mjs +0 -2
  163. package/esm2020/lib/table/data/common/event/ge-cell-indices.mjs +0 -7
  164. package/esm2020/lib/table/data/common/event/ge-key-event.mjs +0 -7
  165. package/esm2020/lib/table/data/common/event/ge-model-change-event.mjs +0 -10
  166. package/esm2020/lib/table/data/common/event/ge-mouse-event.mjs +0 -19
  167. package/esm2020/lib/table/data/common/filter-function.mjs +0 -2
  168. package/esm2020/lib/table/data/common/get-t.mjs +0 -2
  169. package/esm2020/lib/table/data/common/index-and-px.mjs +0 -7
  170. package/esm2020/lib/table/data/common/size.if.mjs +0 -2
  171. package/esm2020/lib/table/data/common/size.mjs +0 -7
  172. package/esm2020/lib/table/data/common/sizes.mjs +0 -33
  173. package/esm2020/lib/table/data/common/sort-item.mjs +0 -7
  174. package/esm2020/lib/table/data/common/sort-state.type.mjs +0 -2
  175. package/esm2020/lib/table/data/common/tree-arrow.type.mjs +0 -2
  176. package/esm2020/lib/table/data/common/tree-row-if.mjs +0 -2
  177. package/esm2020/lib/table/data/common/tree-row.mjs +0 -12
  178. package/esm2020/lib/table/data/common/value-label.if.mjs +0 -2
  179. package/esm2020/lib/table/data/common/value-label.mjs +0 -7
  180. package/esm2020/lib/table/data/div-scope.type.mjs +0 -2
  181. package/esm2020/lib/table/data/geo-data.mjs +0 -10
  182. package/esm2020/lib/table/data/options/auto-restore-options.if.mjs +0 -2
  183. package/esm2020/lib/table/data/options/auto-restore-options.mjs +0 -42
  184. package/esm2020/lib/table/data/options/default-row-heights.if.mjs +0 -2
  185. package/esm2020/lib/table/data/options/default-row-heights.mjs +0 -8
  186. package/esm2020/lib/table/data/options/icon.if.mjs +0 -2
  187. package/esm2020/lib/table/data/options/icon.mjs +0 -8
  188. package/esm2020/lib/table/data/options/sorted-options.if.mjs +0 -2
  189. package/esm2020/lib/table/data/options/sorted-options.mjs +0 -9
  190. package/esm2020/lib/table/data/options/table-options.if.mjs +0 -2
  191. package/esm2020/lib/table/data/options/table-options.mjs +0 -37
  192. package/esm2020/lib/table/data/options/tree-options.if.mjs +0 -2
  193. package/esm2020/lib/table/data/options/tree-options.mjs +0 -10
  194. package/esm2020/lib/table/data/side-ident.type.mjs +0 -2
  195. package/esm2020/lib/table/data/tablemodel/area-ident.type.mjs +0 -10
  196. package/esm2020/lib/table/data/tablemodel/areamodel/abstract-area-model.mjs +0 -108
  197. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-array-array.mjs +0 -34
  198. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-hidden.mjs +0 -80
  199. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.mjs +0 -11
  200. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-object-array.mjs +0 -79
  201. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-tree.mjs +0 -166
  202. package/esm2020/lib/table/data/tablemodel/areamodel/area-model.if.mjs +0 -2
  203. package/esm2020/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.mjs +0 -48
  204. package/esm2020/lib/table/data/tablemodel/column/column-def.if.mjs +0 -2
  205. package/esm2020/lib/table/data/tablemodel/column/column-def.mjs +0 -32
  206. package/esm2020/lib/table/data/tablemodel/padding.mjs +0 -9
  207. package/esm2020/lib/table/data/tablemodel/table-model.if.mjs +0 -2
  208. package/esm2020/lib/table/data/tablemodel/table-model.mjs +0 -268
  209. package/esm2020/lib/table/ele-scope.mjs +0 -173
  210. package/esm2020/lib/table/event-adapter.mjs +0 -17
  211. package/esm2020/lib/table/event-listener.if.mjs +0 -2
  212. package/esm2020/lib/table/focus/focus-model.if.mjs +0 -2
  213. package/esm2020/lib/table/focus/focus-model.mjs +0 -22
  214. package/esm2020/lib/table/focus/focus.type.mjs +0 -2
  215. package/esm2020/lib/table/input-handler.mjs +0 -24
  216. package/esm2020/lib/table/mouse-handler.mjs +0 -191
  217. package/esm2020/lib/table/render-scope.mjs +0 -595
  218. package/esm2020/lib/table/renderer/cell-render.if.mjs +0 -2
  219. package/esm2020/lib/table/renderer/checkbox-cell-renderer.mjs +0 -22
  220. package/esm2020/lib/table/renderer/date-to-int-date-cell-renderer.mjs +0 -21
  221. package/esm2020/lib/table/renderer/date-to-iso-cell-renderer.mjs +0 -9
  222. package/esm2020/lib/table/renderer/date-to-locale-date-cell-renderer.mjs +0 -9
  223. package/esm2020/lib/table/renderer/date-to-tec-cell-renderer.mjs +0 -12
  224. package/esm2020/lib/table/renderer/edit/edit-cell-renderer.type.mjs +0 -2
  225. package/esm2020/lib/table/renderer/edit/input-cell-renderer.mjs +0 -23
  226. package/esm2020/lib/table/renderer/edit/select-cell-renderer.mjs +0 -35
  227. package/esm2020/lib/table/renderer/male-female-to-icon-cell-renderer.mjs +0 -12
  228. package/esm2020/lib/table/renderer/number-cell-renderer.mjs +0 -19
  229. package/esm2020/lib/table/renderer/renderer-cleanup-fn.type.mjs +0 -2
  230. package/esm2020/lib/table/renderer/renderer.mjs +0 -7
  231. package/esm2020/lib/table/renderer/true-false-cell-renderer.mjs +0 -15
  232. package/esm2020/lib/table/selection/selection-model.if.mjs +0 -2
  233. package/esm2020/lib/table/selection/selection-model.mjs +0 -97
  234. package/esm2020/lib/table/selection/selection-service.mjs +0 -97
  235. package/esm2020/lib/table/selection/selection.type.mjs +0 -2
  236. package/esm2020/lib/table/service/abstract-store-state.service.mjs +0 -49
  237. package/esm2020/lib/table/service/convenience-dom.service.mjs +0 -394
  238. package/esm2020/lib/table/service/data/collapsed-expanded.data.mjs +0 -9
  239. package/esm2020/lib/table/service/data/html-style.type.mjs +0 -2
  240. package/esm2020/lib/table/service/dom-service.if.mjs +0 -2
  241. package/esm2020/lib/table/service/ge-filter.service.mjs +0 -98
  242. package/esm2020/lib/table/service/simple-dom-service.mjs +0 -34
  243. package/esm2020/lib/table/service/sorter.service.mjs +0 -27
  244. package/esm2020/lib/table/service/store-state-collapsed-expand.service.mjs +0 -57
  245. package/esm2020/lib/table/service/store-state-scroll-pos.service.mjs +0 -29
  246. package/esm2020/lib/table/service/store-state-sorting.service.mjs +0 -29
  247. package/esm2020/lib/table/service/tree-row.service.mjs +0 -23
  248. package/esm2020/lib/table/table-api.mjs +0 -38
  249. package/esm2020/lib/table/table-model-factory.mjs +0 -124
  250. package/esm2020/lib/table/table-scope.mjs +0 -313
  251. package/lib/table/action/action-id.type.d.ts +0 -2
  252. package/lib/table/action/osx-shortcut-actionId-mapping.d.ts +0 -6
  253. package/lib/table/action/shortcut-actionid-mapping.type.d.ts +0 -4
  254. package/lib/table/action/shortcut.service.d.ts +0 -17
  255. package/lib/table/action/windows-shortcut-actionId-mapping.d.ts +0 -6
  256. package/lib/table/checkbox/checkbox-model.d.ts +0 -12
  257. package/lib/table/checkbox/checkbox-model.if.d.ts +0 -9
  258. package/lib/table/checkbox/tree-checkbox-model.d.ts +0 -17
  259. package/lib/table/data/common/aligns.d.ts +0 -24
  260. package/lib/table/data/common/area-map-factory.d.ts +0 -5
  261. package/lib/table/data/common/area-map.d.ts +0 -7
  262. package/lib/table/data/common/area-map.type.d.ts +0 -5
  263. package/lib/table/data/common/args-render-cell-div.d.ts +0 -13
  264. package/lib/table/data/common/boolean-function.d.ts +0 -3
  265. package/lib/table/data/common/cell-range.d.ts +0 -17
  266. package/lib/table/data/common/checkbox-column.d.ts +0 -13
  267. package/lib/table/data/common/checked-type.d.ts +0 -1
  268. package/lib/table/data/common/event/ge-cell-indices.d.ts +0 -5
  269. package/lib/table/data/common/event/ge-key-event.d.ts +0 -5
  270. package/lib/table/data/common/event/ge-model-change-event.d.ts +0 -6
  271. package/lib/table/data/common/event/ge-mouse-event.d.ts +0 -17
  272. package/lib/table/data/common/index-and-px.d.ts +0 -5
  273. package/lib/table/data/common/size.d.ts +0 -6
  274. package/lib/table/data/common/size.if.d.ts +0 -4
  275. package/lib/table/data/common/sizes.d.ts +0 -32
  276. package/lib/table/data/common/sort-item.d.ts +0 -6
  277. package/lib/table/data/common/tree-row-if.d.ts +0 -10
  278. package/lib/table/data/common/tree-row.d.ts +0 -11
  279. package/lib/table/data/common/value-label.d.ts +0 -6
  280. package/lib/table/data/common/value-label.if.d.ts +0 -4
  281. package/lib/table/data/div-scope.type.d.ts +0 -7
  282. package/lib/table/data/geo-data.d.ts +0 -8
  283. package/lib/table/data/options/auto-restore-options.d.ts +0 -11
  284. package/lib/table/data/options/auto-restore-options.if.d.ts +0 -16
  285. package/lib/table/data/options/default-row-heights.d.ts +0 -7
  286. package/lib/table/data/options/default-row-heights.if.d.ts +0 -5
  287. package/lib/table/data/options/icon.d.ts +0 -7
  288. package/lib/table/data/options/icon.if.d.ts +0 -5
  289. package/lib/table/data/options/sorted-options.d.ts +0 -8
  290. package/lib/table/data/options/table-options.d.ts +0 -35
  291. package/lib/table/data/options/table-options.if.d.ts +0 -36
  292. package/lib/table/data/options/tree-options.d.ts +0 -9
  293. package/lib/table/data/options/tree-options.if.d.ts +0 -7
  294. package/lib/table/data/tablemodel/area-ident.type.d.ts +0 -2
  295. package/lib/table/data/tablemodel/areamodel/abstract-area-model.d.ts +0 -43
  296. package/lib/table/data/tablemodel/areamodel/area-model-array-array.d.ts +0 -18
  297. package/lib/table/data/tablemodel/areamodel/area-model-hidden.d.ts +0 -37
  298. package/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.d.ts +0 -10
  299. package/lib/table/data/tablemodel/areamodel/area-model-object-array.d.ts +0 -27
  300. package/lib/table/data/tablemodel/areamodel/area-model-tree.d.ts +0 -39
  301. package/lib/table/data/tablemodel/areamodel/area-model.if.d.ts +0 -146
  302. package/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.d.ts +0 -12
  303. package/lib/table/data/tablemodel/column/column-def.d.ts +0 -46
  304. package/lib/table/data/tablemodel/column/column-def.if.d.ts +0 -22
  305. package/lib/table/data/tablemodel/padding.d.ts +0 -7
  306. package/lib/table/data/tablemodel/table-model.d.ts +0 -61
  307. package/lib/table/data/tablemodel/table-model.if.d.ts +0 -35
  308. package/lib/table/ele-scope.d.ts +0 -37
  309. package/lib/table/event-adapter.d.ts +0 -12
  310. package/lib/table/event-listener.if.d.ts +0 -11
  311. package/lib/table/focus/focus-model.d.ts +0 -12
  312. package/lib/table/focus/focus-model.if.d.ts +0 -6
  313. package/lib/table/input-handler.d.ts +0 -6
  314. package/lib/table/mouse-handler.d.ts +0 -25
  315. package/lib/table/render-scope.d.ts +0 -82
  316. package/lib/table/renderer/checkbox-cell-renderer.d.ts +0 -8
  317. package/lib/table/renderer/date-to-int-date-cell-renderer.d.ts +0 -9
  318. package/lib/table/renderer/date-to-iso-cell-renderer.d.ts +0 -8
  319. package/lib/table/renderer/date-to-locale-date-cell-renderer.d.ts +0 -8
  320. package/lib/table/renderer/date-to-tec-cell-renderer.d.ts +0 -8
  321. package/lib/table/renderer/edit/input-cell-renderer.d.ts +0 -8
  322. package/lib/table/renderer/edit/select-cell-renderer.d.ts +0 -12
  323. package/lib/table/renderer/male-female-to-icon-cell-renderer.d.ts +0 -8
  324. package/lib/table/renderer/number-cell-renderer.d.ts +0 -11
  325. package/lib/table/renderer/renderer.d.ts +0 -5
  326. package/lib/table/renderer/true-false-cell-renderer.d.ts +0 -8
  327. package/lib/table/selection/selection-model.d.ts +0 -21
  328. package/lib/table/selection/selection-model.if.d.ts +0 -11
  329. package/lib/table/selection/selection-service.d.ts +0 -17
  330. package/lib/table/service/abstract-store-state.service.d.ts +0 -10
  331. package/lib/table/service/convenience-dom.service.d.ts +0 -46
  332. package/lib/table/service/data/collapsed-expanded.data.d.ts +0 -7
  333. package/lib/table/service/data/html-style.type.d.ts +0 -3
  334. package/lib/table/service/dom-service.if.d.ts +0 -9
  335. package/lib/table/service/ge-filter.service.d.ts +0 -5
  336. package/lib/table/service/simple-dom-service.d.ts +0 -10
  337. package/lib/table/service/sorter.service.d.ts +0 -3
  338. package/lib/table/service/store-state-collapsed-expand.service.d.ts +0 -15
  339. package/lib/table/service/store-state-scroll-pos.service.d.ts +0 -10
  340. package/lib/table/service/store-state-sorting.service.d.ts +0 -11
  341. package/lib/table/service/tree-row.service.d.ts +0 -5
  342. package/lib/table/table-api.d.ts +0 -16
  343. package/lib/table/table-model-factory.d.ts +0 -60
  344. package/lib/table/table-scope.d.ts +0 -56
  345. /package/{lib/table/data/common/filter-function.d.ts → src/lib/table/data/common/filter-function.ts} +0 -0
  346. /package/{lib/table/data/common/get-t.d.ts → src/lib/table/data/common/get-t.ts} +0 -0
  347. /package/{lib/table/data/common/sort-state.type.d.ts → src/lib/table/data/common/sort-state.type.ts} +0 -0
  348. /package/{lib/table/data/common/tree-arrow.type.d.ts → src/lib/table/data/common/tree-arrow.type.ts} +0 -0
  349. /package/{lib/table/data/side-ident.type.d.ts → src/lib/table/data/side-ident.type.ts} +0 -0
  350. /package/{lib/table/renderer/renderer-cleanup-fn.type.d.ts → src/lib/table/renderer/renderer-cleanup-fn.type.ts} +0 -0
@@ -1,394 +0,0 @@
1
- import { TreeOptions } from "../data/options/tree-options";
2
- import { SortedOptions } from "../data/options/sorted-options";
3
- export class ConvenienceDomService {
4
- constructor(domService) {
5
- this.domService = domService;
6
- }
7
- setStyle(el, style, value) {
8
- this.domService.setStyle(el, style, value);
9
- return el;
10
- }
11
- ;
12
- applyStyle(ele, style) {
13
- for (const key in style) {
14
- this.domService.setStyle(ele, key, style[key]);
15
- }
16
- return ele;
17
- }
18
- applyDisplayNoneStyle(ele) {
19
- this.domService.setStyle(ele, 'display', 'none');
20
- return ele;
21
- }
22
- applyDisplayBlockStyle(ele) {
23
- this.domService.setStyle(ele, 'display', 'block');
24
- return ele;
25
- }
26
- applyStyleInPx(ele, geoData) {
27
- Object.entries(geoData)
28
- .forEach(([key, value]) => this.domService.setStyle(ele, key, value + 'px'));
29
- return ele;
30
- }
31
- applyStylePosistionRelative(ele) {
32
- this.domService.setStyle(ele, 'position', 'relative');
33
- this.domService.setStyle(ele, 'overflow', 'clip');
34
- return ele;
35
- }
36
- applyStylePosistionAbsolute(ele) {
37
- this.domService.setStyle(ele, 'position', 'absolute');
38
- return ele;
39
- }
40
- applyStyleFullSize(ele) {
41
- this.domService.setStyle(ele, 'width', '100%');
42
- this.domService.setStyle(ele, 'height', '100%');
43
- return ele;
44
- }
45
- applyStyleOverflowAuto(overflowX = 'auto', overflowY = 'auto', ele) {
46
- this.domService.setStyle(ele, 'overflow-x', overflowX);
47
- this.domService.setStyle(ele, 'overflow-y', overflowY);
48
- return ele;
49
- }
50
- applyStyleNoPadding(ele) {
51
- this.domService.setStyle(ele, 'padding', '0');
52
- this.domService.setStyle(ele, 'margin', '0');
53
- this.domService.setStyle(ele, 'border', '0');
54
- return ele;
55
- }
56
- appendRelativeChildDiv(parent) {
57
- const child = this.applyStylePosistionRelative(this.applyStyleFullSize(this.applyStyleNoPadding(this.domService.createElement('div'))));
58
- this.domService.appendChild(parent, child);
59
- this.applyStylePosistionAbsolute(parent);
60
- const cache = {};
61
- return { parent, child, cache };
62
- }
63
- appendText(parent, text) {
64
- const div = this.domService.createText(text);
65
- this.domService.appendChild(parent, div);
66
- return div;
67
- }
68
- addClass(clazz, div) {
69
- if (clazz.includes(' ')) {
70
- clazz.split(' ').forEach(c => this.domService.addClass(div, c));
71
- }
72
- else {
73
- this.domService.addClass(div, clazz);
74
- }
75
- return div;
76
- }
77
- addClasses(classes, div) {
78
- if (classes) {
79
- for (const c of classes) {
80
- this.domService.addClass(div, c);
81
- }
82
- }
83
- return div;
84
- }
85
- setAttribute(div, key, value) {
86
- if (key && value) {
87
- this.domService.setAttribute(div, key, value);
88
- }
89
- return div;
90
- }
91
- createAreaDivWithClass(clazz, parent, areaIdent, sideIdent) {
92
- const div = this.domService.createElement('div');
93
- this.addClass(clazz, div);
94
- this.domService.setAttribute(div, 'data-area', areaIdent);
95
- this.domService.setAttribute(div, 'data-side', sideIdent);
96
- this.domService.appendChild(parent, div);
97
- return div;
98
- }
99
- createDivWithClass(clazz, parent) {
100
- const div = this.domService.createElement('div');
101
- this.addClass(clazz, div);
102
- this.domService.appendChild(parent, div);
103
- return div;
104
- }
105
- addRowDiv(divScope, geo, rowIndex = -1, areaIdent, text = '') {
106
- const cacheKey = geo.index ?? -1;
107
- const div = this.getDivOrCreateDiv(cacheKey, divScope);
108
- this.domService.addClass(div, 'ge-table-row-div');
109
- this.domService.addClass(div, `ge-table-row-div-${geo.index}`);
110
- const oddEven = (geo?.index ?? 0) % 2 === 0 ? 'even' : 'odd';
111
- this.domService.addClass(div, `ge-table-row-${oddEven}`);
112
- this.domService.setStyle(div, 'display', 'clip');
113
- this.domService.setStyle(div, 'position', 'absolute');
114
- this.domService.setStyle(div, 'left', `${geo.left}px`);
115
- this.domService.setStyle(div, 'top', `${geo.top}px`);
116
- this.domService.setStyle(div, 'width', `${geo.width}px`);
117
- this.domService.setStyle(div, 'height', `${geo.height}px`);
118
- this.domService.setAttribute(div, 'data-row-index', `${rowIndex}`);
119
- this.domService.setAttribute(div, 'data-area', `${areaIdent}`);
120
- // debugging:
121
- if (text) {
122
- const textElement = this.domService.createText(text);
123
- this.domService.appendChild(div, textElement);
124
- }
125
- // -------------
126
- this.domService.appendChild(divScope.child, div);
127
- return div;
128
- }
129
- addColumnDiv(parent, geo, rowIndex = -1, columnIndex = -1, areaIdent, text = '', treeArrow, tableOptions, checkedType = undefined, sortState) {
130
- const treeOptions = tableOptions?.treeOptions;
131
- const checkboxWithoutExtraColumn = tableOptions?.showCheckboxWihoutExtraColumn;
132
- const div = this.domService.createElement('div');
133
- this.domService.addClass(div, 'ge-table-col-div');
134
- this.domService.addClass(div, `ge-table-col-div-${geo.index}`);
135
- this.domService.setAttribute(div, 'data-col-index', `${geo.index}`);
136
- this.domService.setAttribute(div, 'data-row-index', `${rowIndex}`);
137
- this.domService.setAttribute(div, 'data-area', `${areaIdent}`);
138
- const oddEven = (geo?.index ?? 0) % 2 === 0 ? 'even' : 'odd';
139
- this.domService.addClass(div, `ge-table-col-${oddEven}`);
140
- this.domService.setStyle(div, 'display', 'clip');
141
- this.domService.setStyle(div, 'position', 'absolute');
142
- this.domService.setStyle(div, 'left', `${geo.left}px`);
143
- this.domService.setStyle(div, 'top', `${geo.top}px`);
144
- this.domService.setStyle(div, 'width', `${geo.width}px`);
145
- this.domService.setStyle(div, 'height', `${geo.height}px`);
146
- if (treeArrow && treeArrow !== 'none') {
147
- this.domService.addClass(div, 'ge-table-col-tree');
148
- this.addArrowDiv(div, treeArrow, treeOptions, rowIndex, columnIndex, areaIdent);
149
- }
150
- if (checkboxWithoutExtraColumn && columnIndex === 0 && checkedType) {
151
- this.addCheckboxToDiv(div, checkedType, areaIdent, rowIndex);
152
- }
153
- if (text) {
154
- const firstTreeColumn = (treeArrow !== 'none' && columnIndex === 0);
155
- this.addLabelDiv(div, text, firstTreeColumn, rowIndex, columnIndex, areaIdent);
156
- }
157
- if (sortState) {
158
- this.addSortedIcon(div, sortState, tableOptions?.sortedOptions, columnIndex);
159
- }
160
- this.domService.appendChild(parent, div);
161
- return div;
162
- }
163
- addCheckboxToDiv(parent, checkedType, areaIdent, rowIndex) {
164
- const div = this.domService.createElement('div');
165
- const checked = (checkedType === 'full') ? 'checked' : '';
166
- div.innerHTML = `
167
- <input
168
- type="checkbox"
169
- data-area="${areaIdent}"
170
- data-row-index="${rowIndex}"
171
- data-input-type="checkbox"
172
- ${checked}
173
- class="ge-table-row-checkbox"> `;
174
- this.domService.setStyle(div, 'display', 'inline');
175
- this.domService.setStyle(div, 'width', 'inherit');
176
- this.domService.setAttribute(div, 'data-row-index', `${rowIndex}`);
177
- this.domService.appendChild(parent, div);
178
- return div;
179
- }
180
- addLabelDiv(parent, text = '', firstTreeColumn = false, rowIndex = -1, columnIndex = -1, areaIdent = 'body') {
181
- const div = this.domService.createElement('div');
182
- this.domService.addClass(div, 'ge-table-label-div');
183
- // this.domService.setStyle(div, 'display', 'inline');
184
- this.domService.setStyle(div, 'position', 'relative');
185
- this.domService.setStyle(div, 'background', 'transparent');
186
- this.domService.setStyle(div, 'width', '100%');
187
- this.domService.setStyle(div, 'height', '100%');
188
- this.domService.setAttribute(div, 'data-row-index', `${rowIndex}`);
189
- this.domService.setAttribute(div, 'data-col-index', `${columnIndex}`);
190
- this.domService.setAttribute(div, 'data-area', `${areaIdent}`);
191
- if (text) {
192
- if (firstTreeColumn) {
193
- const textElement = this.domService.createText(text);
194
- this.domService.appendChild(div, textElement);
195
- }
196
- else {
197
- // normal cell:
198
- const div2 = this.domService.createElement('div');
199
- this.domService.appendChild(div, div2);
200
- const textElement = this.domService.createText(text);
201
- this.domService.addClass(div2, 'ge-table-label');
202
- this.domService.appendChild(div2, textElement);
203
- this.domService.setAttribute(div2, 'data-row-index', `${rowIndex}`);
204
- this.domService.setAttribute(div2, 'data-col-index', `${columnIndex}`);
205
- this.domService.setAttribute(div2, 'data-area', `${areaIdent}`);
206
- }
207
- }
208
- this.domService.appendChild(parent, div);
209
- return div;
210
- }
211
- addSortedIcon(parent, sorted = '', sortedOptions = new SortedOptions(), columnIndex = -1) {
212
- const div = this.domService.createElement('div');
213
- this.domService.addClass(div, 'ge-table-sorted-icon-div');
214
- this.domService.setStyle(div, 'position', 'absolute');
215
- this.domService.setStyle(div, 'top', '0');
216
- this.domService.setStyle(div, 'right', '0');
217
- this.domService.setStyle(div, 'width', '20px');
218
- this.domService.setStyle(div, 'background', 'transparent');
219
- this.domService.setStyle(div, 'cursor', 'pointer');
220
- this.domService.setAttribute(div, 'data-col-index', `${columnIndex}`);
221
- this.domService.setAttribute(div, 'data-area', 'header');
222
- let treeOptionsArrow;
223
- if (sorted === 'asc') {
224
- treeOptionsArrow = sortedOptions.iconAsc;
225
- }
226
- else if (sorted === 'desc') {
227
- treeOptionsArrow = sortedOptions.iconDesc;
228
- }
229
- else {
230
- treeOptionsArrow = sortedOptions.iconPlaceholder;
231
- }
232
- // Text:
233
- const content = treeOptionsArrow.content;
234
- const textElement = this.domService.createText(content);
235
- this.domService.appendChild(div, textElement);
236
- // Style:
237
- if (treeOptionsArrow.style) {
238
- this.applyStyleString(div, treeOptionsArrow.style);
239
- }
240
- // Classes:
241
- for (const clazz of treeOptionsArrow.classes) {
242
- this.domService.addClass(div, clazz);
243
- }
244
- this.domService.appendChild(parent, div);
245
- return div;
246
- }
247
- addArrowDiv(parent, arrow = 'none', treeOptions = new TreeOptions(), rowIndex = -1, columnIndex = -1, areaIdent = 'body') {
248
- const div = this.domService.createElement('div');
249
- this.domService.addClass(div, 'ge-table-tree-arrow-div');
250
- this.domService.setStyle(div, 'display', 'inline-block');
251
- this.domService.setStyle(div, 'position', '');
252
- this.domService.setStyle(div, 'width', '20px');
253
- this.domService.setStyle(div, 'background', 'transparent');
254
- this.domService.setStyle(div, 'cursor', 'pointer');
255
- this.domService.setAttribute(div, 'data-row-index', `${rowIndex}`);
256
- this.domService.setAttribute(div, 'data-col-index', `${columnIndex}`);
257
- this.domService.setAttribute(div, 'data-area', `${areaIdent}`);
258
- let treeOptionsArrow;
259
- if (arrow === 'expanded') {
260
- treeOptionsArrow = treeOptions.arrowExpanded;
261
- }
262
- else if (arrow === 'collapsed') {
263
- treeOptionsArrow = treeOptions.arrowCollapsed;
264
- }
265
- else {
266
- treeOptionsArrow = treeOptions.arrowPlaceholder;
267
- }
268
- // Text:
269
- const content = treeOptionsArrow.content;
270
- const textElement = this.domService.createText(content);
271
- this.domService.appendChild(div, textElement);
272
- // Style:
273
- if (treeOptionsArrow.style) {
274
- this.applyStyleString(div, treeOptionsArrow.style);
275
- }
276
- // Classes:
277
- for (const clazz of treeOptionsArrow.classes) {
278
- this.domService.addClass(div, clazz);
279
- }
280
- this.domService.appendChild(parent, div);
281
- return div;
282
- }
283
- addColumnBorderDivs(parent, geo) {
284
- this.addVerticalBorder(geo, parent);
285
- this.addHorizontalBorder(geo, parent);
286
- return parent;
287
- }
288
- addHorizontalBorder(geo, parent, clazz = "ge-table-row-border") {
289
- // Border south:
290
- const div = this.domService.createElement("div");
291
- this.domService.addClass(div, clazz);
292
- this.domService.setStyle(div, "display", "clip");
293
- this.domService.setStyle(div, "position", "absolute");
294
- this.domService.setStyle(div, "left", `${geo.left}px`);
295
- this.domService.setStyle(div, "top", `${(geo.top)}px`);
296
- this.domService.setStyle(div, "width", `${geo.width}px`);
297
- this.domService.setStyle(div, "height", `1px`);
298
- this.domService.appendChild(parent, div);
299
- return div;
300
- }
301
- addFocusBorderDivs(parent, geo, style) {
302
- // Border west:
303
- let div = this.domService.createElement("div");
304
- this.domService.addClass(div, "ge-table-focus-border");
305
- this.domService.setStyle(div, "display", "clip");
306
- this.domService.setStyle(div, "position", "absolute");
307
- this.domService.setStyle(div, 'left', `${geo.left}px`);
308
- this.domService.setStyle(div, 'top', `${geo.top}px`);
309
- this.domService.setStyle(div, 'width', `1px`);
310
- this.domService.setStyle(div, 'height', `${geo.height}px`);
311
- this.applyStyle(div, style);
312
- this.domService.appendChild(parent, div);
313
- // Border east:
314
- div = this.domService.createElement('div');
315
- this.domService.addClass(div, 'ge-table-focus-border');
316
- this.domService.setStyle(div, 'display', 'clip');
317
- this.domService.setStyle(div, 'position', 'absolute');
318
- this.domService.setStyle(div, 'left', `${geo.left + geo.width - 1}px`);
319
- this.domService.setStyle(div, 'top', `${geo.top}px`);
320
- this.domService.setStyle(div, 'width', `1px`);
321
- this.domService.setStyle(div, 'height', `${geo.height}px`);
322
- this.applyStyle(div, style);
323
- this.domService.appendChild(parent, div);
324
- // Border north:
325
- div = this.domService.createElement('div');
326
- this.domService.addClass(div, 'ge-table-focus-border');
327
- this.domService.setStyle(div, 'display', 'clip');
328
- this.domService.setStyle(div, 'position', 'absolute');
329
- this.domService.setStyle(div, 'left', `${geo.left}px`);
330
- this.domService.setStyle(div, 'top', `${(geo.top)}px`);
331
- this.domService.setStyle(div, 'width', `${geo.width}px`);
332
- this.domService.setStyle(div, 'height', `1px`);
333
- this.applyStyle(div, style);
334
- this.domService.appendChild(parent, div);
335
- // Border south:
336
- div = this.domService.createElement('div');
337
- this.domService.addClass(div, 'ge-table-focus-border');
338
- this.domService.setStyle(div, 'display', 'clip');
339
- this.domService.setStyle(div, 'position', 'absolute');
340
- this.domService.setStyle(div, 'left', `${geo.left}px`);
341
- this.domService.setStyle(div, 'top', `${(geo.top + geo.height - 1)}px`);
342
- this.domService.setStyle(div, 'width', `${geo.width}px`);
343
- this.domService.setStyle(div, 'height', `1px`);
344
- this.applyStyle(div, style);
345
- this.domService.appendChild(parent, div);
346
- return parent;
347
- }
348
- addVerticalBorder(geo, parent, clazz = "ge-table-column-border") {
349
- // Border east:
350
- const div = this.domService.createElement("div");
351
- this.domService.addClass(div, clazz);
352
- this.domService.setStyle(div, "display", "clip");
353
- this.domService.setStyle(div, "position", "absolute");
354
- this.domService.setStyle(div, "left", `${geo.left}px`);
355
- this.domService.setStyle(div, "top", `${geo.top}px`);
356
- this.domService.setStyle(div, "width", `1px`);
357
- this.domService.setStyle(div, "height", `${geo.height}px`);
358
- this.domService.appendChild(parent, div);
359
- return div;
360
- }
361
- addDiv(parent, geo, clazz = '') {
362
- const div = this.domService.createElement('div');
363
- if (clazz) {
364
- this.domService.addClass(div, clazz);
365
- }
366
- this.domService.setStyle(div, 'display', 'clip');
367
- this.domService.setStyle(div, 'position', 'absolute');
368
- this.domService.setStyle(div, 'left', `${geo.left}px`);
369
- this.domService.setStyle(div, 'top', `${geo.top}px`);
370
- this.domService.setStyle(div, 'width', `${geo.width}px`);
371
- this.domService.setStyle(div, 'height', `${geo.height}px`);
372
- this.domService.appendChild(parent, div);
373
- return div;
374
- }
375
- applyStyleString(div, style) {
376
- // transform: rotate(-90deg) translate(-100%, 0); transform-origin: left top; font-size: 1.5em;
377
- const cmds = style.split(';').map(s => s.trim()).filter(s => s);
378
- for (const cmd of cmds) {
379
- const [key, value] = cmd.split(':');
380
- this.domService.setStyle(div, key.trim(), value.trim());
381
- }
382
- }
383
- getDivOrCreateDiv(cacheKey, divScope) {
384
- let div = divScope.cache[cacheKey];
385
- if (div) {
386
- div.innerText = ''; // erst mal leer machen, später col-cache nutzen
387
- return div;
388
- }
389
- div = this.domService.createElement('div');
390
- divScope.cache[cacheKey] = div;
391
- return div;
392
- }
393
- }
394
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVuaWVuY2UtZG9tLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RhYmxlL3NyYy9saWIvdGFibGUvc2VydmljZS9jb252ZW5pZW5jZS1kb20uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFPM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSy9ELE1BQU0sT0FBTyxxQkFBcUI7SUFFaEMsWUFDa0IsVUFBd0I7UUFBeEIsZUFBVSxHQUFWLFVBQVUsQ0FBYztJQUUxQyxDQUFDO0lBR0QsUUFBUSxDQUFDLEVBQU8sRUFBRSxLQUFhLEVBQUUsS0FBVTtRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUFBLENBQUM7SUFHRixVQUFVLENBQUMsR0FBbUIsRUFBRSxLQUFnQjtRQUM5QyxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRTtZQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FBbUI7UUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxHQUFtQjtRQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FB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QUMsQ0FBQyxDQUFDO1FBQ2hFLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3RCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFFBQWdCLEVBQUUsUUFBa0I7UUFDNUQsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuQyxJQUFJLEdBQUcsRUFBRTtZQUNQLEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsZ0RBQWdEO1lBQ3BFLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFDRCxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQWlCLEtBQUssQ0FBQyxDQUFDO1FBQzNELFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQy9CLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRG9tU2VydmljZUlmIH0gZnJvbSBcIi4vZG9tLXNlcnZpY2UuaWZcIjtcbmltcG9ydCB7IERpdlNjb3BlIH0gZnJvbSBcIi4vLi4vZGF0YS9kaXYtc2NvcGUudHlwZVwiO1xuaW1wb3J0IHsgR2VvRGF0YSB9IGZyb20gXCIuLy4uL2RhdGEvZ2VvLWRhdGFcIjtcbmltcG9ydCB7IFRyZWVBcnJvd1R5cGUgfSBmcm9tIFwiLi4vZGF0YS9jb21tb24vdHJlZS1hcnJvdy50eXBlXCI7XG5pbXBvcnQgeyBUcmVlT3B0aW9uc0lmIH0gZnJvbSBcIi4uL2RhdGEvb3B0aW9ucy90cmVlLW9wdGlvbnMuaWZcIjtcbmltcG9ydCB7IFRyZWVPcHRpb25zIH0gZnJvbSBcIi4uL2RhdGEvb3B0aW9ucy90cmVlLW9wdGlvbnNcIjtcbmltcG9ydCB7IEFyZWFJZGVudCB9IGZyb20gXCIuLi9kYXRhL3RhYmxlbW9kZWwvYXJlYS1pZGVudC50eXBlXCI7XG5pbXBvcnQgeyBJY29uSWYgfSBmcm9tIFwiLi4vZGF0YS9vcHRpb25zL2ljb24uaWZcIjtcbmltcG9ydCB7IFRhYmxlT3B0aW9uc0lmIH0gZnJvbSBcIi4uL2RhdGEvb3B0aW9ucy90YWJsZS1vcHRpb25zLmlmXCI7XG5pbXBvcnQgeyBDaGVja2VkVHlwZSB9IGZyb20gXCIuLi9kYXRhL2NvbW1vbi9jaGVja2VkLXR5cGVcIjtcbmltcG9ydCB7IFNpZGVJZGVudCB9IGZyb20gXCIuLi9kYXRhL3NpZGUtaWRlbnQudHlwZVwiO1xuaW1wb3J0IHsgU29ydFN0YXRlIH0gZnJvbSBcIi4uL2RhdGEvY29tbW9uL3NvcnQtc3RhdGUudHlwZVwiO1xuaW1wb3J0IHsgU29ydGVkT3B0aW9ucyB9IGZyb20gXCIuLi9kYXRhL29wdGlvbnMvc29ydGVkLW9wdGlvbnNcIjtcbmltcG9ydCB7IFNvcnRlZE9wdGlvbnNJZiB9IGZyb20gXCIuLi9kYXRhL29wdGlvbnMvc29ydGVkLW9wdGlvbnMuaWZcIjtcbmltcG9ydCB7IEh0bWxTdHlsZSB9IGZyb20gXCIuL2RhdGEvaHRtbC1zdHlsZS50eXBlXCI7XG5cblxuZXhwb3J0IGNsYXNzIENvbnZlbmllbmNlRG9tU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGRvbVNlcnZpY2U6IERvbVNlcnZpY2VJZlxuICApIHtcbiAgfVxuXG5cbiAgc2V0U3R5bGUoZWw6IGFueSwgc3R5bGU6IHN0cmluZywgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGVsLCBzdHlsZSwgdmFsdWUpO1xuICAgIHJldHVybiBlbDtcbiAgfTtcblxuXG4gIGFwcGx5U3R5bGUoZWxlOiBIVE1MRGl2RWxlbWVudCwgc3R5bGU6IEh0bWxTdHlsZSk6IEhUTUxEaXZFbGVtZW50IHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzdHlsZSkge1xuICAgICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGVsZSwga2V5LCBzdHlsZVtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIGFwcGx5RGlzcGxheU5vbmVTdHlsZShlbGU6IEhUTUxEaXZFbGVtZW50KTogSFRNTERpdkVsZW1lbnQge1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShlbGUsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgYXBwbHlEaXNwbGF5QmxvY2tTdHlsZShlbGU6IEhUTUxEaXZFbGVtZW50KTogSFRNTERpdkVsZW1lbnQge1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShlbGUsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIGFwcGx5U3R5bGVJblB4KGVsZTogSFRNTERpdkVsZW1lbnQsIGdlb0RhdGE6IEdlb0RhdGEpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgT2JqZWN0LmVudHJpZXMoZ2VvRGF0YSlcbiAgICAgIC5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShlbGUsIGtleSwgdmFsdWUgKyAncHgnKSk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIGFwcGx5U3R5bGVQb3Npc3Rpb25SZWxhdGl2ZShlbGU6IEhUTUxEaXZFbGVtZW50KTogSFRNTERpdkVsZW1lbnQge1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShlbGUsICdwb3NpdGlvbicsICdyZWxhdGl2ZScpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShlbGUsICdvdmVyZmxvdycsICdjbGlwJyk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIGFwcGx5U3R5bGVQb3Npc3Rpb25BYnNvbHV0ZShlbGU6IEhUTUxEaXZFbGVtZW50KTogSFRNTERpdkVsZW1lbnQge1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShlbGUsICdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBhcHBseVN0eWxlRnVsbFNpemUoZWxlOiBIVE1MRGl2RWxlbWVudCk6IEhUTUxEaXZFbGVtZW50IHtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZWxlLCAnd2lkdGgnLCAnMTAwJScpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShlbGUsICdoZWlnaHQnLCAnMTAwJScpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBhcHBseVN0eWxlT3ZlcmZsb3dBdXRvKFxuICAgIG92ZXJmbG93WDogJ3Njcm9sbCcgfCAnYXV0bycgPSAnYXV0bycsXG4gICAgb3ZlcmZsb3dZOiAnc2Nyb2xsJyB8ICdhdXRvJyA9ICdhdXRvJyxcbiAgICBlbGU6IEhUTUxEaXZFbGVtZW50LFxuICApOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGVsZSwgJ292ZXJmbG93LXgnLCBvdmVyZmxvd1gpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShlbGUsICdvdmVyZmxvdy15Jywgb3ZlcmZsb3dZKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgYXBwbHlTdHlsZU5vUGFkZGluZyhlbGU6IEhUTUxEaXZFbGVtZW50KTogSFRNTERpdkVsZW1lbnQge1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShlbGUsICdwYWRkaW5nJywgJzAnKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZWxlLCAnbWFyZ2luJywgJzAnKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZWxlLCAnYm9yZGVyJywgJzAnKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgYXBwZW5kUmVsYXRpdmVDaGlsZERpdihwYXJlbnQ6IEhUTUxEaXZFbGVtZW50KTogRGl2U2NvcGUge1xuICAgIGNvbnN0IGNoaWxkID1cbiAgICAgIHRoaXMuYXBwbHlTdHlsZVBvc2lzdGlvblJlbGF0aXZlKFxuICAgICAgICB0aGlzLmFwcGx5U3R5bGVGdWxsU2l6ZShcbiAgICAgICAgICB0aGlzLmFwcGx5U3R5bGVOb1BhZGRpbmcoXG4gICAgICAgICAgICB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlRWxlbWVudDxIVE1MRGl2RWxlbWVudD4oJ2RpdicpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChwYXJlbnQsIGNoaWxkKTtcbiAgICB0aGlzLmFwcGx5U3R5bGVQb3Npc3Rpb25BYnNvbHV0ZShwYXJlbnQpO1xuICAgIGNvbnN0IGNhY2hlID0ge307XG4gICAgcmV0dXJuIHtwYXJlbnQsIGNoaWxkLCBjYWNoZX07XG4gIH1cblxuICBhcHBlbmRUZXh0KHBhcmVudDogSFRNTERpdkVsZW1lbnQsIHRleHQ6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBkaXYgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlVGV4dCh0ZXh0KTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQocGFyZW50LCBkaXYpO1xuICAgIHJldHVybiBkaXY7XG4gIH1cblxuXG4gIGFkZENsYXNzKGNsYXp6OiBzdHJpbmcsIGRpdjogSFRNTERpdkVsZW1lbnQpIHtcbiAgICBpZiAoY2xhenouaW5jbHVkZXMoJyAnKSkge1xuICAgICAgY2xhenouc3BsaXQoJyAnKS5mb3JFYWNoKGMgPT4gdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgYykpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsIGNsYXp6KTtcbiAgICB9XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG4gIGFkZENsYXNzZXMoY2xhc3Nlczogc3RyaW5nW10gfCB1bmRlZmluZWQsIGRpdjogSFRNTERpdkVsZW1lbnQpIHtcbiAgICBpZiAoY2xhc3Nlcykge1xuICAgICAgZm9yIChjb25zdCBjIG9mIGNsYXNzZXMpIHtcbiAgICAgICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgYyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICBzZXRBdHRyaWJ1dGUoZGl2OiBIVE1MRGl2RWxlbWVudCwga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5ICYmIHZhbHVlKSB7XG4gICAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0QXR0cmlidXRlKGRpdiwga2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuXG4gIGNyZWF0ZUFyZWFEaXZXaXRoQ2xhc3MoY2xheno6IHN0cmluZywgcGFyZW50OiBIVE1MRGl2RWxlbWVudCwgYXJlYUlkZW50OiBBcmVhSWRlbnQsIHNpZGVJZGVudDogU2lkZUlkZW50KTogSFRNTERpdkVsZW1lbnQge1xuICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9tU2VydmljZS5jcmVhdGVFbGVtZW50PEhUTUxEaXZFbGVtZW50PignZGl2Jyk7XG4gICAgdGhpcy5hZGRDbGFzcyhjbGF6eiwgZGl2KTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0QXR0cmlidXRlKGRpdiwgJ2RhdGEtYXJlYScsIGFyZWFJZGVudCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldEF0dHJpYnV0ZShkaXYsICdkYXRhLXNpZGUnLCBzaWRlSWRlbnQpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChwYXJlbnQsIGRpdik7XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG4gIGNyZWF0ZURpdldpdGhDbGFzcyhjbGF6ejogc3RyaW5nLCBwYXJlbnQ6IEhUTUxEaXZFbGVtZW50KTogSFRNTERpdkVsZW1lbnQge1xuICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9tU2VydmljZS5jcmVhdGVFbGVtZW50PEhUTUxEaXZFbGVtZW50PignZGl2Jyk7XG4gICAgdGhpcy5hZGRDbGFzcyhjbGF6eiwgZGl2KTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQocGFyZW50LCBkaXYpO1xuICAgIHJldHVybiBkaXY7XG4gIH1cblxuXG4gIGFkZFJvd0RpdihcbiAgICBkaXZTY29wZTogRGl2U2NvcGUsXG4gICAgZ2VvOiBHZW9EYXRhLFxuICAgIHJvd0luZGV4OiBudW1iZXIgPSAtMSxcbiAgICBhcmVhSWRlbnQ6IEFyZWFJZGVudCxcbiAgICB0ZXh0OiBzdHJpbmcgPSAnJyxcbiAgKTogSFRNTERpdkVsZW1lbnQge1xuXG4gICAgY29uc3QgY2FjaGVLZXkgPSBnZW8uaW5kZXggPz8gLTE7XG4gICAgY29uc3QgZGl2ID0gdGhpcy5nZXREaXZPckNyZWF0ZURpdihjYWNoZUtleSwgZGl2U2NvcGUpO1xuXG4gICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgJ2dlLXRhYmxlLXJvdy1kaXYnKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYWRkQ2xhc3MoZGl2LCBgZ2UtdGFibGUtcm93LWRpdi0ke2dlby5pbmRleH1gKTtcbiAgICBjb25zdCBvZGRFdmVuID0gKGdlbz8uaW5kZXggPz8gMCkgJSAyID09PSAwID8gJ2V2ZW4nIDogJ29kZCc7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgYGdlLXRhYmxlLXJvdy0ke29kZEV2ZW59YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ2Rpc3BsYXknLCAnY2xpcCcpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xuXG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ2xlZnQnLCBgJHtnZW8ubGVmdH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICd0b3AnLCBgJHtnZW8udG9wfXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ3dpZHRoJywgYCR7Z2VvLndpZHRofXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ2hlaWdodCcsIGAke2dlby5oZWlnaHR9cHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0QXR0cmlidXRlKGRpdiwgJ2RhdGEtcm93LWluZGV4JywgYCR7cm93SW5kZXh9YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldEF0dHJpYnV0ZShkaXYsICdkYXRhLWFyZWEnLCBgJHthcmVhSWRlbnR9YCk7XG5cbiAgICAvLyBkZWJ1Z2dpbmc6XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZVRleHQodGV4dCk7XG4gICAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQoZGl2LCB0ZXh0RWxlbWVudCk7XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS1cblxuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChkaXZTY29wZS5jaGlsZCwgZGl2KTtcbiAgICByZXR1cm4gZGl2O1xuICB9XG5cblxuICBhZGRDb2x1bW5EaXYoXG4gICAgcGFyZW50OiBIVE1MRGl2RWxlbWVudCxcbiAgICBnZW86IEdlb0RhdGEsXG4gICAgcm93SW5kZXg6IG51bWJlciA9IC0xLFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIgPSAtMSxcbiAgICBhcmVhSWRlbnQ6IEFyZWFJZGVudCxcbiAgICB0ZXh0OiBzdHJpbmcgPSAnJyxcbiAgICB0cmVlQXJyb3c/OiBUcmVlQXJyb3dUeXBlLFxuICAgIHRhYmxlT3B0aW9ucz86IFRhYmxlT3B0aW9uc0lmLFxuICAgIGNoZWNrZWRUeXBlOiBDaGVja2VkVHlwZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICBzb3J0U3RhdGU/OiBTb3J0U3RhdGVcbiAgKTogSFRNTERpdkVsZW1lbnQge1xuXG4gICAgY29uc3QgdHJlZU9wdGlvbnMgPSB0YWJsZU9wdGlvbnM/LnRyZWVPcHRpb25zO1xuICAgIGNvbnN0IGNoZWNrYm94V2l0aG91dEV4dHJhQ29sdW1uID0gdGFibGVPcHRpb25zPy5zaG93Q2hlY2tib3hXaWhvdXRFeHRyYUNvbHVtbjtcblxuICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9tU2VydmljZS5jcmVhdGVFbGVtZW50PEhUTUxEaXZFbGVtZW50PignZGl2Jyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgJ2dlLXRhYmxlLWNvbC1kaXYnKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYWRkQ2xhc3MoZGl2LCBgZ2UtdGFibGUtY29sLWRpdi0ke2dlby5pbmRleH1gKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0QXR0cmlidXRlKGRpdiwgJ2RhdGEtY29sLWluZGV4JywgYCR7Z2VvLmluZGV4fWApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCAnZGF0YS1yb3ctaW5kZXgnLCBgJHtyb3dJbmRleH1gKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0QXR0cmlidXRlKGRpdiwgJ2RhdGEtYXJlYScsIGAke2FyZWFJZGVudH1gKTtcbiAgICBjb25zdCBvZGRFdmVuID0gKGdlbz8uaW5kZXggPz8gMCkgJSAyID09PSAwID8gJ2V2ZW4nIDogJ29kZCc7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgYGdlLXRhYmxlLWNvbC0ke29kZEV2ZW59YCk7XG5cbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAnZGlzcGxheScsICdjbGlwJyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ2xlZnQnLCBgJHtnZW8ubGVmdH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICd0b3AnLCBgJHtnZW8udG9wfXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ3dpZHRoJywgYCR7Z2VvLndpZHRofXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ2hlaWdodCcsIGAke2dlby5oZWlnaHR9cHhgKTtcblxuICAgIGlmICh0cmVlQXJyb3cgJiYgdHJlZUFycm93ICE9PSAnbm9uZScpIHtcbiAgICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsICdnZS10YWJsZS1jb2wtdHJlZScpO1xuICAgICAgdGhpcy5hZGRBcnJvd0RpdihkaXYsIHRyZWVBcnJvdywgdHJlZU9wdGlvbnMsIHJvd0luZGV4LCBjb2x1bW5JbmRleCwgYXJlYUlkZW50KTtcbiAgICB9XG4gICAgaWYgKGNoZWNrYm94V2l0aG91dEV4dHJhQ29sdW1uICYmIGNvbHVtbkluZGV4ID09PSAwICYmIGNoZWNrZWRUeXBlKSB7XG4gICAgICB0aGlzLmFkZENoZWNrYm94VG9EaXYoZGl2LCBjaGVja2VkVHlwZSwgYXJlYUlkZW50LCByb3dJbmRleCk7XG4gICAgfVxuICAgIGlmICh0ZXh0KSB7XG4gICAgICBjb25zdCBmaXJzdFRyZWVDb2x1bW4gPSAodHJlZUFycm93ICE9PSAnbm9uZScgJiYgY29sdW1uSW5kZXggPT09IDApO1xuICAgICAgdGhpcy5hZGRMYWJlbERpdihkaXYsIHRleHQsIGZpcnN0VHJlZUNvbHVtbiwgcm93SW5kZXgsIGNvbHVtbkluZGV4LCBhcmVhSWRlbnQpO1xuICAgIH1cbiAgICBpZiAoc29ydFN0YXRlKSB7XG4gICAgICB0aGlzLmFkZFNvcnRlZEljb24oZGl2LCBzb3J0U3RhdGUsIHRhYmxlT3B0aW9ucz8uc29ydGVkT3B0aW9ucywgY29sdW1uSW5kZXgpO1xuICAgIH1cblxuXG4gICAgdGhpcy5kb21TZXJ2aWNlLmFwcGVuZENoaWxkKHBhcmVudCwgZGl2KTtcbiAgICByZXR1cm4gZGl2O1xuICB9XG5cblxuICBhZGRDaGVja2JveFRvRGl2KFxuICAgIHBhcmVudDogSFRNTERpdkVsZW1lbnQsXG4gICAgY2hlY2tlZFR5cGU6IENoZWNrZWRUeXBlLFxuICAgIGFyZWFJZGVudDogQXJlYUlkZW50LFxuICAgIHJvd0luZGV4OiBudW1iZXIpOiBIVE1MRGl2RWxlbWVudCB7XG5cbiAgICBjb25zdCBkaXYgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlRWxlbWVudDxIVE1MRGl2RWxlbWVudD4oJ2RpdicpO1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoY2hlY2tlZFR5cGUgPT09ICdmdWxsJykgPyAnY2hlY2tlZCcgOiAnJztcbiAgICBkaXYuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBkYXRhLWFyZWE9XCIke2FyZWFJZGVudH1cIlxuICAgICAgICAgICAgICAgIGRhdGEtcm93LWluZGV4PVwiJHtyb3dJbmRleH1cIlxuICAgICAgICAgICAgICAgIGRhdGEtaW5wdXQtdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAke2NoZWNrZWR9XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJnZS10YWJsZS1yb3ctY2hlY2tib3hcIj4gYDtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAnZGlzcGxheScsICdpbmxpbmUnKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAnd2lkdGgnLCAnaW5oZXJpdCcpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCAnZGF0YS1yb3ctaW5kZXgnLCBgJHtyb3dJbmRleH1gKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQocGFyZW50LCBkaXYpO1xuICAgIHJldHVybiBkaXY7XG4gIH1cblxuXG4gIGFkZExhYmVsRGl2KFxuICAgIHBhcmVudDogSFRNTERpdkVsZW1lbnQsXG4gICAgdGV4dDogc3RyaW5nID0gJycsXG4gICAgZmlyc3RUcmVlQ29sdW1uOiBib29sZWFuID0gZmFsc2UsXG4gICAgcm93SW5kZXg6IG51bWJlciA9IC0xLFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIgPSAtMSxcbiAgICBhcmVhSWRlbnQ6IEFyZWFJZGVudCA9ICdib2R5Jyk6IEhUTUxEaXZFbGVtZW50IHtcblxuICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9tU2VydmljZS5jcmVhdGVFbGVtZW50PEhUTUxEaXZFbGVtZW50PignZGl2Jyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgJ2dlLXRhYmxlLWxhYmVsLWRpdicpO1xuICAgIC8vIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdkaXNwbGF5JywgJ2lubGluZScpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdwb3NpdGlvbicsICdyZWxhdGl2ZScpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdiYWNrZ3JvdW5kJywgJ3RyYW5zcGFyZW50Jyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ3dpZHRoJywgJzEwMCUnKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAnaGVpZ2h0JywgJzEwMCUnKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0QXR0cmlidXRlKGRpdiwgJ2RhdGEtcm93LWluZGV4JywgYCR7cm93SW5kZXh9YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldEF0dHJpYnV0ZShkaXYsICdkYXRhLWNvbC1pbmRleCcsIGAke2NvbHVtbkluZGV4fWApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCAnZGF0YS1hcmVhJywgYCR7YXJlYUlkZW50fWApO1xuXG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGlmIChmaXJzdFRyZWVDb2x1bW4pIHtcbiAgICAgICAgY29uc3QgdGV4dEVsZW1lbnQgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlVGV4dCh0ZXh0KTtcbiAgICAgICAgdGhpcy5kb21TZXJ2aWNlLmFwcGVuZENoaWxkKGRpdiwgdGV4dEVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbm9ybWFsIGNlbGw6XG4gICAgICAgIGNvbnN0IGRpdjIgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlRWxlbWVudDxIVE1MRGl2RWxlbWVudD4oJ2RpdicpO1xuICAgICAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQoZGl2LCBkaXYyKTtcbiAgICAgICAgY29uc3QgdGV4dEVsZW1lbnQgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlVGV4dCh0ZXh0KTtcbiAgICAgICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdjIsICdnZS10YWJsZS1sYWJlbCcpO1xuICAgICAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQoZGl2MiwgdGV4dEVsZW1lbnQpO1xuICAgICAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0QXR0cmlidXRlKGRpdjIsICdkYXRhLXJvdy1pbmRleCcsIGAke3Jvd0luZGV4fWApO1xuICAgICAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0QXR0cmlidXRlKGRpdjIsICdkYXRhLWNvbC1pbmRleCcsIGAke2NvbHVtbkluZGV4fWApO1xuICAgICAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0QXR0cmlidXRlKGRpdjIsICdkYXRhLWFyZWEnLCBgJHthcmVhSWRlbnR9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kb21TZXJ2aWNlLmFwcGVuZENoaWxkKHBhcmVudCwgZGl2KTtcbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgYWRkU29ydGVkSWNvbihcbiAgICBwYXJlbnQ6IEhUTUxEaXZFbGVtZW50LFxuICAgIHNvcnRlZDogU29ydFN0YXRlID0gJycsXG4gICAgc29ydGVkT3B0aW9uczogU29ydGVkT3B0aW9uc0lmID0gbmV3IFNvcnRlZE9wdGlvbnMoKSxcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyID0gLTFcbiAgKTogSFRNTERpdkVsZW1lbnQge1xuXG4gICAgY29uc3QgZGl2ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZUVsZW1lbnQ8SFRNTERpdkVsZW1lbnQ+KCdkaXYnKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYWRkQ2xhc3MoZGl2LCAnZ2UtdGFibGUtc29ydGVkLWljb24tZGl2Jyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ3RvcCcsICcwJyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ3JpZ2h0JywgJzAnKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAnd2lkdGgnLCAnMjBweCcpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdiYWNrZ3JvdW5kJywgJ3RyYW5zcGFyZW50Jyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ2N1cnNvcicsICdwb2ludGVyJyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldEF0dHJpYnV0ZShkaXYsICdkYXRhLWNvbC1pbmRleCcsIGAke2NvbHVtbkluZGV4fWApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCAnZGF0YS1hcmVhJywgJ2hlYWRlcicpO1xuXG4gICAgbGV0IHRyZWVPcHRpb25zQXJyb3c6IEljb25JZjtcbiAgICBpZiAoc29ydGVkID09PSAnYXNjJykge1xuICAgICAgdHJlZU9wdGlvbnNBcnJvdyA9IHNvcnRlZE9wdGlvbnMuaWNvbkFzYztcbiAgICB9IGVsc2UgaWYgKHNvcnRlZCA9PT0gJ2Rlc2MnKSB7XG4gICAgICB0cmVlT3B0aW9uc0Fycm93ID0gc29ydGVkT3B0aW9ucy5pY29uRGVzYztcbiAgICB9IGVsc2Uge1xuICAgICAgdHJlZU9wdGlvbnNBcnJvdyA9IHNvcnRlZE9wdGlvbnMuaWNvblBsYWNlaG9sZGVyO1xuICAgIH1cbiAgICAvLyBUZXh0OlxuICAgIGNvbnN0IGNvbnRlbnQgPSB0cmVlT3B0aW9uc0Fycm93LmNvbnRlbnQ7XG4gICAgY29uc3QgdGV4dEVsZW1lbnQgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlVGV4dChjb250ZW50KTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQoZGl2LCB0ZXh0RWxlbWVudCk7XG5cbiAgICAvLyBTdHlsZTpcbiAgICBpZiAodHJlZU9wdGlvbnNBcnJvdy5zdHlsZSkge1xuICAgICAgdGhpcy5hcHBseVN0eWxlU3RyaW5nKGRpdiwgdHJlZU9wdGlvbnNBcnJvdy5zdHlsZSk7XG4gICAgfVxuXG4gICAgLy8gQ2xhc3NlczpcbiAgICBmb3IgKGNvbnN0IGNsYXp6IG9mIHRyZWVPcHRpb25zQXJyb3cuY2xhc3Nlcykge1xuICAgICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgY2xhenopO1xuICAgIH1cblxuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChwYXJlbnQsIGRpdik7XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG5cbiAgYWRkQXJyb3dEaXYoXG4gICAgcGFyZW50OiBIVE1MRGl2RWxlbWVudCxcbiAgICBhcnJvdzogVHJlZUFycm93VHlwZSA9ICdub25lJyxcbiAgICB0cmVlT3B0aW9uczogVHJlZU9wdGlvbnNJZiA9IG5ldyBUcmVlT3B0aW9ucygpLFxuICAgIHJvd0luZGV4OiBudW1iZXIgPSAtMSxcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyID0gLTEsXG4gICAgYXJlYUlkZW50OiBBcmVhSWRlbnQgPSAnYm9keScsXG4gICk6IEhUTUxEaXZFbGVtZW50IHtcbiAgICBjb25zdCBkaXYgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlRWxlbWVudDxIVE1MRGl2RWxlbWVudD4oJ2RpdicpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsICdnZS10YWJsZS10cmVlLWFycm93LWRpdicpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdkaXNwbGF5JywgJ2lubGluZS1ibG9jaycpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdwb3NpdGlvbicsICcnKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAnd2lkdGgnLCAnMjBweCcpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdiYWNrZ3JvdW5kJywgJ3RyYW5zcGFyZW50Jyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ2N1cnNvcicsICdwb2ludGVyJyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldEF0dHJpYnV0ZShkaXYsICdkYXRhLXJvdy1pbmRleCcsIGAke3Jvd0luZGV4fWApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCAnZGF0YS1jb2wtaW5kZXgnLCBgJHtjb2x1bW5JbmRleH1gKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0QXR0cmlidXRlKGRpdiwgJ2RhdGEtYXJlYScsIGAke2FyZWFJZGVudH1gKTtcblxuICAgIGxldCB0cmVlT3B0aW9uc0Fycm93OiBJY29uSWY7XG4gICAgaWYgKGFycm93ID09PSAnZXhwYW5kZWQnKSB7XG4gICAgICB0cmVlT3B0aW9uc0Fycm93ID0gdHJlZU9wdGlvbnMuYXJyb3dFeHBhbmRlZDtcbiAgICB9IGVsc2UgaWYgKGFycm93ID09PSAnY29sbGFwc2VkJykge1xuICAgICAgdHJlZU9wdGlvbnNBcnJvdyA9IHRyZWVPcHRpb25zLmFycm93Q29sbGFwc2VkXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyZWVPcHRpb25zQXJyb3cgPSB0cmVlT3B0aW9ucy5hcnJvd1BsYWNlaG9sZGVyO1xuICAgIH1cbiAgICAvLyBUZXh0OlxuICAgIGNvbnN0IGNvbnRlbnQgPSB0cmVlT3B0aW9uc0Fycm93LmNvbnRlbnQ7XG4gICAgY29uc3QgdGV4dEVsZW1lbnQgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlVGV4dChjb250ZW50KTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQoZGl2LCB0ZXh0RWxlbWVudCk7XG5cbiAgICAvLyBTdHlsZTpcbiAgICBpZiAodHJlZU9wdGlvbnNBcnJvdy5zdHlsZSkge1xuICAgICAgdGhpcy5hcHBseVN0eWxlU3RyaW5nKGRpdiwgdHJlZU9wdGlvbnNBcnJvdy5zdHlsZSk7XG4gICAgfVxuXG4gICAgLy8gQ2xhc3NlczpcbiAgICBmb3IgKGNvbnN0IGNsYXp6IG9mIHRyZWVPcHRpb25zQXJyb3cuY2xhc3Nlcykge1xuICAgICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgY2xhenopO1xuICAgIH1cblxuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChwYXJlbnQsIGRpdik7XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG4gIGFkZENvbHVtbkJvcmRlckRpdnMocGFyZW50OiBIVE1MRGl2RWxlbWVudCwgZ2VvOiBHZW9EYXRhKTogSFRNTERpdkVsZW1lbnQge1xuICAgIHRoaXMuYWRkVmVydGljYWxCb3JkZXIoZ2VvLCBwYXJlbnQpO1xuICAgIHRoaXMuYWRkSG9yaXpvbnRhbEJvcmRlcihnZW8sIHBhcmVudCk7XG5cbiAgICByZXR1cm4gcGFyZW50O1xuICB9XG5cblxuICBhZGRIb3Jpem9udGFsQm9yZGVyKFxuICAgIGdlbzogR2VvRGF0YSxcbiAgICBwYXJlbnQ6IEhUTUxEaXZFbGVtZW50LFxuICAgIGNsYXp6OiBzdHJpbmcgPSBcImdlLXRhYmxlLXJvdy1ib3JkZXJcIik6IEhUTUxEaXZFbGVtZW50IHtcbiAgICAvLyBCb3JkZXIgc291dGg6XG4gICAgY29uc3QgZGl2ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZUVsZW1lbnQ8SFRNTERpdkVsZW1lbnQ+KFwiZGl2XCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsIGNsYXp6KTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcImRpc3BsYXlcIiwgXCJjbGlwXCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwicG9zaXRpb25cIiwgXCJhYnNvbHV0ZVwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcImxlZnRcIiwgYCR7Z2VvLmxlZnR9cHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcInRvcFwiLCBgJHsoZ2VvLnRvcCl9cHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcIndpZHRoXCIsIGAke2dlby53aWR0aH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwiaGVpZ2h0XCIsIGAxcHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQocGFyZW50LCBkaXYpO1xuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICBhZGRGb2N1c0JvcmRlckRpdnMocGFyZW50OiBIVE1MRGl2RWxlbWVudCwgZ2VvOiBHZW9EYXRhLCBzdHlsZTogSHRtbFN0eWxlKTogSFRNTERpdkVsZW1lbnQge1xuICAgIC8vIEJvcmRlciB3ZXN0OlxuICAgIGxldCBkaXYgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlRWxlbWVudDxIVE1MRGl2RWxlbWVudD4oXCJkaXZcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgXCJnZS10YWJsZS1mb2N1cy1ib3JkZXJcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJkaXNwbGF5XCIsIFwiY2xpcFwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ2xlZnQnLCBgJHtnZW8ubGVmdH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICd0b3AnLCBgJHtnZW8udG9wfXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ3dpZHRoJywgYDFweGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdoZWlnaHQnLCBgJHtnZW8uaGVpZ2h0fXB4YCk7XG4gICAgdGhpcy5hcHBseVN0eWxlKGRpdiwgc3R5bGUpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChwYXJlbnQsIGRpdik7XG5cbiAgICAvLyBCb3JkZXIgZWFzdDpcbiAgICBkaXYgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlRWxlbWVudDxIVE1MRGl2RWxlbWVudD4oJ2RpdicpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsICdnZS10YWJsZS1mb2N1cy1ib3JkZXInKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAnZGlzcGxheScsICdjbGlwJyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ2xlZnQnLCBgJHtnZW8ubGVmdCArIGdlby53aWR0aCAtIDF9cHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAndG9wJywgYCR7Z2VvLnRvcH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICd3aWR0aCcsIGAxcHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAnaGVpZ2h0JywgYCR7Z2VvLmhlaWdodH1weGApO1xuICAgIHRoaXMuYXBwbHlTdHlsZShkaXYsIHN0eWxlKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQocGFyZW50LCBkaXYpO1xuXG4gICAgLy8gQm9yZGVyIG5vcnRoOlxuICAgIGRpdiA9IHRoaXMuZG9tU2VydmljZS5jcmVhdGVFbGVtZW50PEhUTUxEaXZFbGVtZW50PignZGl2Jyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgJ2dlLXRhYmxlLWZvY3VzLWJvcmRlcicpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdkaXNwbGF5JywgJ2NsaXAnKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAncG9zaXRpb24nLCAnYWJzb2x1dGUnKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAnbGVmdCcsIGAke2dlby5sZWZ0fXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ3RvcCcsIGAkeyhnZW8udG9wKX1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICd3aWR0aCcsIGAke2dlby53aWR0aH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdoZWlnaHQnLCBgMXB4YCk7XG4gICAgdGhpcy5hcHBseVN0eWxlKGRpdiwgc3R5bGUpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChwYXJlbnQsIGRpdik7XG5cblxuICAgIC8vIEJvcmRlciBzb3V0aDpcbiAgICBkaXYgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlRWxlbWVudDxIVE1MRGl2RWxlbWVudD4oJ2RpdicpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsICdnZS10YWJsZS1mb2N1cy1ib3JkZXInKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAnZGlzcGxheScsICdjbGlwJyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ2xlZnQnLCBgJHtnZW8ubGVmdH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICd0b3AnLCBgJHsoZ2VvLnRvcCArIGdlby5oZWlnaHQgLSAxKX1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICd3aWR0aCcsIGAke2dlby53aWR0aH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdoZWlnaHQnLCBgMXB4YCk7XG4gICAgdGhpcy5hcHBseVN0eWxlKGRpdiwgc3R5bGUpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChwYXJlbnQsIGRpdik7XG5cbiAgICByZXR1cm4gcGFyZW50O1xuICB9XG5cbiAgYWRkVmVydGljYWxCb3JkZXIoXG4gICAgZ2VvOiBHZW9EYXRhLFxuICAgIHBhcmVudDogSFRNTERpdkVsZW1lbnQsXG4gICAgY2xheno6IHN0cmluZyA9IFwiZ2UtdGFibGUtY29sdW1uLWJvcmRlclwiKTogSFRNTERpdkVsZW1lbnQge1xuICAgIC8vIEJvcmRlciBlYXN0OlxuICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9tU2VydmljZS5jcmVhdGVFbGVtZW50PEhUTUxEaXZFbGVtZW50PihcImRpdlwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYWRkQ2xhc3MoZGl2LCBjbGF6eik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJkaXNwbGF5XCIsIFwiY2xpcFwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJsZWZ0XCIsIGAke2dlby5sZWZ0fXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJ0b3BcIiwgYCR7Z2VvLnRvcH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwid2lkdGhcIiwgYDFweGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwiaGVpZ2h0XCIsIGAke2dlby5oZWlnaHR9cHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQocGFyZW50LCBkaXYpO1xuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICBhZGREaXYocGFyZW50OiBIVE1MRGl2RWxlbWVudCwgZ2VvOiBHZW9EYXRhLCBjbGF6ejogc3RyaW5nID0gJycpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgY29uc3QgZGl2ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZUVsZW1lbnQ8SFRNTERpdkVsZW1lbnQ+KCdkaXYnKTtcbiAgICBpZiAoY2xhenopIHtcbiAgICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsIGNsYXp6KTtcbiAgICB9XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgJ2Rpc3BsYXknLCAnY2xpcCcpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdsZWZ0JywgYCR7Z2VvLmxlZnR9cHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAndG9wJywgYCR7Z2VvLnRvcH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICd3aWR0aCcsIGAke2dlby53aWR0aH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsICdoZWlnaHQnLCBgJHtnZW8uaGVpZ2h0fXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFwcGVuZENoaWxkKHBhcmVudCwgZGl2KTtcbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgYXBwbHlTdHlsZVN0cmluZyhkaXY6IEhUTUxEaXZFbGVtZW50LCBzdHlsZTogc3RyaW5nKSB7XG4gICAgLy8gdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKSB0cmFuc2xhdGUoLTEwMCUsIDApOyB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDsgZm9udC1zaXplOiAxLjVlbTtcbiAgICBjb25zdCBjbWRzID0gc3R5bGUuc3BsaXQoJzsnKS5tYXAocyA9PiBzLnRyaW0oKSkuZmlsdGVyKHMgPT4gcyk7XG4gICAgZm9yIChjb25zdCBjbWQgb2YgY21kcykge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gY21kLnNwbGl0KCc6Jyk7XG4gICAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBrZXkudHJpbSgpLCB2YWx1ZS50cmltKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGl2T3JDcmVhdGVEaXYoY2FjaGVLZXk6IG51bWJlciwgZGl2U2NvcGU6IERpdlNjb3BlKTogSFRNTERpdkVsZW1lbnQge1xuICAgIGxldCBkaXYgPSBkaXZTY29wZS5jYWNoZVtjYWNoZUtleV07XG4gICAgaWYgKGRpdikge1xuICAgICAgZGl2LmlubmVyVGV4dCA9ICcnOyAvLyBlcnN0IG1hbCBsZWVyIG1hY2hlbiwgc3DDpHRlciBjb2wtY2FjaGUgbnV0emVuXG4gICAgICByZXR1cm4gZGl2O1xuICAgIH1cbiAgICBkaXYgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlRWxlbWVudDxIVE1MRGl2RWxlbWVudD4oJ2RpdicpO1xuICAgIGRpdlNjb3BlLmNhY2hlW2NhY2hlS2V5XSA9IGRpdjtcbiAgICByZXR1cm4gZGl2O1xuICB9XG59XG4iXX0=
@@ -1,9 +0,0 @@
1
- export class CollapsedExpandedData {
2
- constructor(mode = 'collapsed', rowIds = [], allCollapsed = false, allExpanded = false) {
3
- this.mode = mode;
4
- this.rowIds = rowIds;
5
- this.allCollapsed = allCollapsed;
6
- this.allExpanded = allExpanded;
7
- }
8
- }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2VkLWV4cGFuZGVkLmRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RhYmxlL3NyYy9saWIvdGFibGUvc2VydmljZS9kYXRhL2NvbGxhcHNlZC1leHBhbmRlZC5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxxQkFBcUI7SUFFaEMsWUFDUyxPQUFpQyxXQUFXLEVBQzVDLFNBQWlDLEVBQUUsRUFDbkMsZUFBd0IsS0FBSyxFQUM3QixjQUF1QixLQUFLO1FBSDVCLFNBQUksR0FBSixJQUFJLENBQXdDO1FBQzVDLFdBQU0sR0FBTixNQUFNLENBQTZCO1FBQ25DLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUM3QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7SUFFckMsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIENvbGxhcHNlZEV4cGFuZGVkRGF0YSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1vZGU6ICdjb2xsYXBzZWQnIHwgJ2V4cGFuZGVkJyA9ICdjb2xsYXBzZWQnLFxuICAgIHB1YmxpYyByb3dJZHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gPSBbXSxcbiAgICBwdWJsaWMgYWxsQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2UsXG4gICAgcHVibGljIGFsbEV4cGFuZGVkOiBib29sZWFuID0gZmFsc2UsXG4gICkge1xuICB9XG5cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1zdHlsZS50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy90YWJsZS9zcmMvbGliL3RhYmxlL3NlcnZpY2UvZGF0YS9odG1sLXN0eWxlLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEh0bWxTdHlsZSA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH07XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLXNlcnZpY2UuaWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RhYmxlL3NyYy9saWIvdGFibGUvc2VydmljZS9kb20tc2VydmljZS5pZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBEb21TZXJ2aWNlSWYge1xuXG4gIHNldFN0eWxlKGVsOiBhbnksIHN0eWxlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG5cbiAgYWRkQ2xhc3MoZGl2OiBIVE1MRWxlbWVudCwgY2xheno6IHN0cmluZyk6IEhUTUxEaXZFbGVtZW50O1xuXG4gIGNyZWF0ZUVsZW1lbnQ8VD4oZWxlOiBzdHJpbmcpOiBUO1xuXG4gIGNyZWF0ZVRleHQodGV4dDogc3RyaW5nKTogSFRNTEVsZW1lbnQ7XG5cbiAgYXBwZW5kVGV4dChwYXJlbnQ6IEhUTUxEaXZFbGVtZW50LCB0ZXh0OiBzdHJpbmcpOiBIVE1MRGl2RWxlbWVudDtcblxuICBhcHBlbmRDaGlsZChwYXJlbnQ6IEhUTUxFbGVtZW50LCBjaGlsZDogSFRNTEVsZW1lbnQpOiB2b2lkO1xuXG4gIHNldEF0dHJpYnV0ZShlbGU6IEhUTUxFbGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG59XG4iXX0=
@@ -1,98 +0,0 @@
1
- export class GeFilterService {
2
- filterPredict(item, filterString, toString = this.objectToString.bind(this)) {
3
- if (!item) {
4
- return false;
5
- }
6
- if (!filterString) {
7
- return true;
8
- }
9
- filterString = filterString.toLowerCase();
10
- const prefixMust = "+";
11
- const prefixNot = "-";
12
- const arr = filterString.toLowerCase().split(" ").filter(s => s !== prefixMust && s !== prefixNot && s !== "");
13
- const ors = arr
14
- .filter(f => !f.startsWith(prefixMust) && !f.startsWith(prefixNot));
15
- const musts = arr
16
- .filter(f => f.startsWith(prefixMust))
17
- .map(s => s.replace(/\+/g, ""));
18
- const nots = arr
19
- .filter(f => f.startsWith(prefixNot))
20
- .map(s => s.replace(/-/g, ""));
21
- let or = !ors.length;
22
- for (let i = 0; i < ors.length; i++) {
23
- if (or || toString(item).includes(ors[i])) {
24
- or = true;
25
- }
26
- }
27
- if (!or) {
28
- return false;
29
- }
30
- for (let i = 0; i < musts.length; i++) {
31
- if (!toString(item).includes(musts[i])) {
32
- return false;
33
- }
34
- }
35
- for (let i = 0; i < nots.length; i++) {
36
- if (toString(item).includes(nots[i])) {
37
- return false;
38
- }
39
- }
40
- return true;
41
- }
42
- filterRows(rows, filterString, toString = (t) => JSON.stringify(t).toLowerCase()) {
43
- if (!rows) {
44
- return [];
45
- }
46
- if (!filterString) {
47
- return [...rows];
48
- }
49
- filterString = filterString.toLowerCase();
50
- const prefixMust = "+";
51
- const prefixNot = "-";
52
- const arr = filterString.toLowerCase().split(" ").filter(s => s !== prefixMust && s !== prefixNot && s !== "");
53
- const ors = arr
54
- .filter(f => !f.startsWith(prefixMust) && !f.startsWith(prefixNot));
55
- const musts = arr
56
- .filter(f => f.startsWith(prefixMust))
57
- .map(s => s.replace(/\+/g, ""));
58
- const nots = arr
59
- .filter(f => f.startsWith(prefixNot))
60
- .map(s => s.replace(/-/g, ""));
61
- return rows?.filter(f => {
62
- let or = !ors.length;
63
- for (let i = 0; i < ors.length; i++) {
64
- if (or || toString(f).includes(ors[i])) {
65
- or = true;
66
- }
67
- }
68
- if (!or) {
69
- return false;
70
- }
71
- for (let i = 0; i < musts.length; i++) {
72
- if (!toString(f).includes(musts[i])) {
73
- return false;
74
- }
75
- }
76
- for (let i = 0; i < nots.length; i++) {
77
- if (toString(f).includes(nots[i])) {
78
- return false;
79
- }
80
- }
81
- return true;
82
- });
83
- }
84
- objectToString(o) {
85
- if (!o) {
86
- return '';
87
- }
88
- const buf = [];
89
- const keys = Object.keys(o);
90
- for (let i = 0; i < keys.length; i++) {
91
- const key = keys[i];
92
- // @ts-ignore
93
- buf.push(o[key]);
94
- }
95
- return buf.join(' ').toLowerCase();
96
- }
97
- }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2UtZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RhYmxlL3NyYy9saWIvdGFibGUvc2VydmljZS9nZS1maWx0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sZUFBZTtJQUcxQixhQUFhLENBQ1gsSUFBTyxFQUNQLFlBQW9CLEVBQ3BCLFdBQTZCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUczRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELFlBQVksR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFMUMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUN0QixNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFL0csTUFBTSxHQUFHLEdBQWEsR0FBRzthQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFdEUsTUFBTSxLQUFLLEdBQWEsR0FBRzthQUN4QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3JDLEdBQUcs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QUFDO2lCQUNkO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBSSxDQUFJO1FBQ3BCLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDTixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsTUFBTSxHQUFHLEdBQWMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLGFBQWE7WUFDYixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JDLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBHZUZpbHRlclNlcnZpY2Uge1xuXG5cbiAgZmlsdGVyUHJlZGljdDxUPihcbiAgICBpdGVtOiBULFxuICAgIGZpbHRlclN0cmluZzogc3RyaW5nLFxuICAgIHRvU3RyaW5nOiAodDogVCkgPT4gc3RyaW5nID0gdGhpcy5vYmplY3RUb1N0cmluZy5iaW5kKHRoaXMpXG4gICk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghZmlsdGVyU3RyaW5nKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZmlsdGVyU3RyaW5nID0gZmlsdGVyU3RyaW5nLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBjb25zdCBwcmVmaXhNdXN0ID0gXCIrXCI7XG4gICAgY29uc3QgcHJlZml4Tm90ID0gXCItXCI7XG4gICAgY29uc3QgYXJyID0gZmlsdGVyU3RyaW5nLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpLmZpbHRlcihzID0+IHMgIT09IHByZWZpeE11c3QgJiYgcyAhPT0gcHJlZml4Tm90ICYmIHMgIT09IFwiXCIpO1xuXG4gICAgY29uc3Qgb3JzOiBzdHJpbmdbXSA9IGFyclxuICAgICAgLmZpbHRlcihmID0+ICFmLnN0YXJ0c1dpdGgocHJlZml4TXVzdCkgJiYgIWYuc3RhcnRzV2l0aChwcmVmaXhOb3QpKTtcblxuICAgIGNvbnN0IG11c3RzOiBzdHJpbmdbXSA9IGFyclxuICAgICAgLmZpbHRlcihmID0+IGYuc3RhcnRzV2l0aChwcmVmaXhNdXN0KSlcbiAgICAgIC5tYXAocyA9PiBzLnJlcGxhY2UoL1xcKy9nLCBcIlwiKSk7XG5cbiAgICBjb25zdCBub3RzOiBzdHJpbmdbXSA9IGFyclxuICAgICAgLmZpbHRlcihmID0+IGYuc3RhcnRzV2l0aChwcmVmaXhOb3QpKVxuICAgICAgLm1hcChzID0+IHMucmVwbGFjZSgvLS9nLCBcIlwiKSk7XG5cbiAgICBsZXQgb3IgPSAhb3JzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9yIHx8IHRvU3RyaW5nKGl0ZW0pLmluY2x1ZGVzKG9yc1tpXSkpIHtcbiAgICAgICAgb3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghdG9TdHJpbmcoaXRlbSkuaW5jbHVkZXMobXVzdHNbaV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodG9TdHJpbmcoaXRlbSkuaW5jbHVkZXMobm90c1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG5cbiAgZmlsdGVyUm93czxUPihcbiAgICByb3dzOiBUW10sXG4gICAgZmlsdGVyU3RyaW5nOiBzdHJpbmcsXG4gICAgdG9TdHJpbmc6ICh0OiBUKSA9PiBzdHJpbmcgPSAodDogVCkgPT4gSlNPTi5zdHJpbmdpZnkodCkudG9Mb3dlckNhc2UoKVxuICApOiBUW10ge1xuXG4gICAgaWYgKCFyb3dzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmICghZmlsdGVyU3RyaW5nKSB7XG4gICAgICByZXR1cm4gWy4uLnJvd3NdO1xuICAgIH1cbiAgICBmaWx0ZXJTdHJpbmcgPSBmaWx0ZXJTdHJpbmcudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IHByZWZpeE11c3QgPSBcIitcIjtcbiAgICBjb25zdCBwcmVmaXhOb3QgPSBcIi1cIjtcbiAgICBjb25zdCBhcnIgPSBmaWx0ZXJTdHJpbmcudG9Mb3dlckNhc2UoKS5zcGxpdChcIiBcIikuZmlsdGVyKHMgPT4gcyAhPT0gcHJlZml4TXVzdCAmJiBzICE9PSBwcmVmaXhOb3QgJiYgcyAhPT0gXCJcIik7XG5cbiAgICBjb25zdCBvcnM6IHN0cmluZ1tdID0gYXJyXG4gICAgICAuZmlsdGVyKGYgPT4gIWYuc3RhcnRzV2l0aChwcmVmaXhNdXN0KSAmJiAhZi5zdGFydHNXaXRoKHByZWZpeE5vdCkpO1xuXG4gICAgY29uc3QgbXVzdHM6IHN0cmluZ1tdID0gYXJyXG4gICAgICAuZmlsdGVyKGYgPT4gZi5zdGFydHNXaXRoKHByZWZpeE11c3QpKVxuICAgICAgLm1hcChzID0+IHMucmVwbGFjZSgvXFwrL2csIFwiXCIpKTtcblxuICAgIGNvbnN0IG5vdHM6IHN0cmluZ1tdID0gYXJyXG4gICAgICAuZmlsdGVyKGYgPT4gZi5zdGFydHNXaXRoKHByZWZpeE5vdCkpXG4gICAgICAubWFwKHMgPT4gcy5yZXBsYWNlKC8tL2csIFwiXCIpKTtcblxuICAgIHJldHVybiByb3dzPy5maWx0ZXIoZiA9PiB7XG4gICAgICBsZXQgb3IgPSAhb3JzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChvciB8fCB0b1N0cmluZyhmKS5pbmNsdWRlcyhvcnNbaV0pKSB7XG4gICAgICAgICAgb3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIW9yKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbXVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCF0b1N0cmluZyhmKS5pbmNsdWRlcyhtdXN0c1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm90cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodG9TdHJpbmcoZikuaW5jbHVkZXMobm90c1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgb2JqZWN0VG9TdHJpbmc8VD4obzogVCk6IHN0cmluZyB7XG4gICAgaWYgKCFvKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGJ1ZjogdW5rbm93bltdID0gW107XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG8pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGJ1Zi5wdXNoKG9ba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiBidWYuam9pbignICcpLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxufVxuIl19