@worktile/theia 18.0.15 → 18.1.0

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 (370) hide show
  1. package/constants/node-types.d.ts +1 -0
  2. package/core/toolbar-item/base-toolbar-item.d.ts +2 -2
  3. package/fesm2022/worktile-theia.mjs +304 -311
  4. package/fesm2022/worktile-theia.mjs.map +1 -1
  5. package/interfaces/view-base.d.ts +1 -1
  6. package/package.json +2 -4
  7. package/plugins/code/code.component.scss +1 -2
  8. package/plugins/image/image.component.d.ts +1 -1
  9. package/plugins/link/link.component.d.ts +1 -1
  10. package/plugins/mention/suggestion.component.d.ts +1 -1
  11. package/plugins/vertical-align/toolbar-item.component.d.ts +3 -2
  12. package/esm2022/components/action/prevent-default.mjs +0 -21
  13. package/esm2022/components/column-resize/column-resize-notifier.mjs +0 -31
  14. package/esm2022/components/column-resize/column-resize.directive.mjs +0 -124
  15. package/esm2022/components/column-resize/event-dispatcher.mjs +0 -56
  16. package/esm2022/components/column-resize/overlay-handle.component.mjs +0 -144
  17. package/esm2022/components/column-resize/resize-ref.mjs +0 -26
  18. package/esm2022/components/column-resize/resizing.store.mjs +0 -92
  19. package/esm2022/components/column-resize/selectors.mjs +0 -4
  20. package/esm2022/components/contextmenu/contextmenu.component.mjs +0 -99
  21. package/esm2022/components/conversion-hint/conversion-hint.component.mjs +0 -56
  22. package/esm2022/components/element/element.component.mjs +0 -23
  23. package/esm2022/components/index.mjs +0 -24
  24. package/esm2022/components/inline-toolbar/inline-toolbar.component.mjs +0 -131
  25. package/esm2022/components/listbox/listbox.mjs +0 -380
  26. package/esm2022/components/listbox/listbox.type.mjs +0 -5
  27. package/esm2022/components/plugin-menu/plugin-menu.component.mjs +0 -272
  28. package/esm2022/components/table-select/table-select.component.mjs +0 -49
  29. package/esm2022/components/template/template.component.mjs +0 -62
  30. package/esm2022/components/text/text.component.mjs +0 -57
  31. package/esm2022/components/toolbar/toolbar.component.mjs +0 -262
  32. package/esm2022/components/toolbar-dropdown/toolbar-dropdown.component.mjs +0 -137
  33. package/esm2022/components/toolbar-group/toolbar-group.component.mjs +0 -125
  34. package/esm2022/components/toolbar-item/toolbar-item.component.mjs +0 -80
  35. package/esm2022/constants/auto-format-rules.mjs +0 -167
  36. package/esm2022/constants/code.mjs +0 -85
  37. package/esm2022/constants/color-select.mjs +0 -3
  38. package/esm2022/constants/default.mjs +0 -11
  39. package/esm2022/constants/error.mjs +0 -7
  40. package/esm2022/constants/index.mjs +0 -9
  41. package/esm2022/constants/node-types.mjs +0 -136
  42. package/esm2022/constants/plugin-menu.mjs +0 -311
  43. package/esm2022/constants/selector.mjs +0 -3
  44. package/esm2022/constants/toolbar.mjs +0 -53
  45. package/esm2022/core/create-plugin.mjs +0 -5
  46. package/esm2022/core/create-toolbar.mjs +0 -55
  47. package/esm2022/core/index.mjs +0 -6
  48. package/esm2022/core/toolbar-item/base-toolbar-item.mjs +0 -95
  49. package/esm2022/core/utils/combine-plugins.mjs +0 -10
  50. package/esm2022/core/utils/flatten-deep-plugins.mjs +0 -19
  51. package/esm2022/core/utils/get-plugin-options.mjs +0 -3
  52. package/esm2022/core/utils/get-plugin.mjs +0 -2
  53. package/esm2022/core/utils/get-plugins.mjs +0 -4
  54. package/esm2022/core/utils/index.mjs +0 -12
  55. package/esm2022/core/utils/merge-array.mjs +0 -18
  56. package/esm2022/core/utils/merge-deep-plugins.mjs +0 -14
  57. package/esm2022/core/utils/merge-options.mjs +0 -25
  58. package/esm2022/core/utils/nested-structure-by-key.mjs +0 -11
  59. package/esm2022/core/utils/plugin-menu.mjs +0 -63
  60. package/esm2022/core/utils/plugins-by-key.mjs +0 -10
  61. package/esm2022/core/with-theia.mjs +0 -25
  62. package/esm2022/custom-types.mjs +0 -2
  63. package/esm2022/editor.component.mjs +0 -488
  64. package/esm2022/editor.module.mjs +0 -18
  65. package/esm2022/i18n/i18n.mjs +0 -10
  66. package/esm2022/i18n/i18n.service.mjs +0 -46
  67. package/esm2022/i18n/i18n.token.mjs +0 -9
  68. package/esm2022/i18n/index.mjs +0 -10
  69. package/esm2022/i18n/locales/de-de.mjs +0 -102
  70. package/esm2022/i18n/locales/en-us.mjs +0 -102
  71. package/esm2022/i18n/locales/ja-jp.mjs +0 -102
  72. package/esm2022/i18n/locales/ru-ru.mjs +0 -102
  73. package/esm2022/i18n/locales/zh-hans.mjs +0 -102
  74. package/esm2022/i18n/locales/zh-hant.mjs +0 -102
  75. package/esm2022/interfaces/auto-format.mjs +0 -2
  76. package/esm2022/interfaces/editor.mjs +0 -26
  77. package/esm2022/interfaces/element.mjs +0 -2
  78. package/esm2022/interfaces/image.mjs +0 -3
  79. package/esm2022/interfaces/index.mjs +0 -11
  80. package/esm2022/interfaces/plugins/index.mjs +0 -6
  81. package/esm2022/interfaces/plugins/no-infer.mjs +0 -2
  82. package/esm2022/interfaces/plugins/plugin-key.mjs +0 -42
  83. package/esm2022/interfaces/plugins/plugin-menu.mjs +0 -19
  84. package/esm2022/interfaces/plugins/plugins.mjs +0 -2
  85. package/esm2022/interfaces/plugins/with-override.mjs +0 -2
  86. package/esm2022/interfaces/preset.mjs +0 -3
  87. package/esm2022/interfaces/reset-block-type-plugin-options.mjs +0 -2
  88. package/esm2022/interfaces/toolbar.mjs +0 -12
  89. package/esm2022/interfaces/upload.mjs +0 -2
  90. package/esm2022/interfaces/utility/index.mjs +0 -4
  91. package/esm2022/interfaces/utility/nested-structure-by-key.mjs +0 -2
  92. package/esm2022/interfaces/utility/override-by-key.mjs +0 -2
  93. package/esm2022/interfaces/utility/types.mjs +0 -2
  94. package/esm2022/interfaces/valid-children-types.mjs +0 -36
  95. package/esm2022/interfaces/view-base.mjs +0 -38
  96. package/esm2022/pipes.mjs +0 -61
  97. package/esm2022/plugins/align/align.editor.mjs +0 -41
  98. package/esm2022/plugins/align/align.plugin.mjs +0 -64
  99. package/esm2022/plugins/autoformat/autoformat.plugin.mjs +0 -109
  100. package/esm2022/plugins/autoformat/transforms/auto-format-block.mjs +0 -14
  101. package/esm2022/plugins/autoformat/transforms/auto-format-inline.mjs +0 -78
  102. package/esm2022/plugins/blockquote/blockquote.component.mjs +0 -16
  103. package/esm2022/plugins/blockquote/blockquote.editor.mjs +0 -20
  104. package/esm2022/plugins/blockquote/blockquote.plugin.mjs +0 -84
  105. package/esm2022/plugins/code/code.component.mjs +0 -255
  106. package/esm2022/plugins/code/code.editor.mjs +0 -59
  107. package/esm2022/plugins/code/code.plugin.mjs +0 -67
  108. package/esm2022/plugins/color/color.editor.mjs +0 -27
  109. package/esm2022/plugins/color/color.plugin.mjs +0 -32
  110. package/esm2022/plugins/color/toolbar-item.component.mjs +0 -99
  111. package/esm2022/plugins/common/block-card.plugin.mjs +0 -330
  112. package/esm2022/plugins/common/common.plugin.mjs +0 -49
  113. package/esm2022/plugins/common/get-fragment.plugin.mjs +0 -24
  114. package/esm2022/plugins/common/history.plugin.mjs +0 -31
  115. package/esm2022/plugins/common/insert-data-by-invalid-type.mjs +0 -23
  116. package/esm2022/plugins/common/move-selection.plugin.mjs +0 -105
  117. package/esm2022/plugins/common/remove-empty.plugin.mjs +0 -61
  118. package/esm2022/plugins/common/remove-void.plugin.mjs +0 -60
  119. package/esm2022/plugins/common/reset-type.plugin.mjs +0 -35
  120. package/esm2022/plugins/deserialize/deserialize-html.plugin.mjs +0 -61
  121. package/esm2022/plugins/deserialize/deserialize-md.plugin.mjs +0 -142
  122. package/esm2022/plugins/font-size/font-size.editor.mjs +0 -98
  123. package/esm2022/plugins/heading/heading.editor.mjs +0 -54
  124. package/esm2022/plugins/heading/heading.plugin.mjs +0 -136
  125. package/esm2022/plugins/hr/hr.component.mjs +0 -37
  126. package/esm2022/plugins/hr/hr.editor.mjs +0 -16
  127. package/esm2022/plugins/hr/hr.plugin.mjs +0 -56
  128. package/esm2022/plugins/image/image.component.mjs +0 -474
  129. package/esm2022/plugins/image/image.editor.mjs +0 -116
  130. package/esm2022/plugins/image/image.plugin.mjs +0 -90
  131. package/esm2022/plugins/indent/indent.editor.mjs +0 -78
  132. package/esm2022/plugins/indent/indent.plugin.mjs +0 -59
  133. package/esm2022/plugins/indent/on-keydown-indent.mjs +0 -59
  134. package/esm2022/plugins/index.mjs +0 -73
  135. package/esm2022/plugins/inline-code/inline-code.component.mjs +0 -28
  136. package/esm2022/plugins/inline-code/inline-code.editor.mjs +0 -49
  137. package/esm2022/plugins/inline-code/inline-code.plugin.mjs +0 -67
  138. package/esm2022/plugins/link/edit/link-edit.component.mjs +0 -104
  139. package/esm2022/plugins/link/hover/link-hover.component.mjs +0 -38
  140. package/esm2022/plugins/link/link.component.mjs +0 -170
  141. package/esm2022/plugins/link/link.editor.mjs +0 -87
  142. package/esm2022/plugins/link/link.plugin.mjs +0 -89
  143. package/esm2022/plugins/link/link.types.mjs +0 -12
  144. package/esm2022/plugins/list/components/bulleted-list.component.mjs +0 -28
  145. package/esm2022/plugins/list/components/list-item.component.mjs +0 -88
  146. package/esm2022/plugins/list/components/numbered-list.component.mjs +0 -37
  147. package/esm2022/plugins/list/list.editor.mjs +0 -128
  148. package/esm2022/plugins/list/list.plugin.mjs +0 -302
  149. package/esm2022/plugins/list/normalizers/get-list-normalizer.mjs +0 -39
  150. package/esm2022/plugins/list/normalizers/normalize-list-item.mjs +0 -18
  151. package/esm2022/plugins/list/normalizers/normalize-no.mjs +0 -43
  152. package/esm2022/plugins/list/on-key-down-list.mjs +0 -33
  153. package/esm2022/plugins/list/queries/get-list-item-entry.mjs +0 -28
  154. package/esm2022/plugins/list/queries/get-list-item-sublist.mjs +0 -12
  155. package/esm2022/plugins/list/queries/get-list-types.mjs +0 -5
  156. package/esm2022/plugins/list/queries/get-start-list-item.mjs +0 -27
  157. package/esm2022/plugins/list/queries/has-list-in-list-item.mjs +0 -27
  158. package/esm2022/plugins/list/queries/is-in-list.mjs +0 -6
  159. package/esm2022/plugins/list/queries/is-list-nested.mjs +0 -10
  160. package/esm2022/plugins/list/queries/is-list.mjs +0 -5
  161. package/esm2022/plugins/list/queries/is-node-type-list.mjs +0 -5
  162. package/esm2022/plugins/list/queries/is-selection-at-list-item-start.mjs +0 -13
  163. package/esm2022/plugins/list/queries/is-selection-in-same-list-item.mjs +0 -17
  164. package/esm2022/plugins/list/queries/is-single-list-item.mjs +0 -9
  165. package/esm2022/plugins/list/transforms/insert-list-data.mjs +0 -72
  166. package/esm2022/plugins/list/transforms/insert-list-item.mjs +0 -73
  167. package/esm2022/plugins/list/transforms/move-list-item-down.mjs +0 -41
  168. package/esm2022/plugins/list/transforms/move-list-item-sublist-items-to-list-item-sublist.mjs +0 -43
  169. package/esm2022/plugins/list/transforms/move-list-item-sublist-items-to-list.mjs +0 -30
  170. package/esm2022/plugins/list/transforms/move-list-item-up.mjs +0 -78
  171. package/esm2022/plugins/list/transforms/unwrap-list.mjs +0 -10
  172. package/esm2022/plugins/list/types.mjs +0 -2
  173. package/esm2022/plugins/mark/mark.editor.mjs +0 -28
  174. package/esm2022/plugins/mark/mark.plugin.mjs +0 -105
  175. package/esm2022/plugins/mention/index.mjs +0 -5
  176. package/esm2022/plugins/mention/mention.editor.mjs +0 -179
  177. package/esm2022/plugins/mention/mention.plugin.mjs +0 -92
  178. package/esm2022/plugins/mention/mention.type.mjs +0 -2
  179. package/esm2022/plugins/mention/suggestion.component.mjs +0 -22
  180. package/esm2022/plugins/node-id/node-id.plugin.mjs +0 -78
  181. package/esm2022/plugins/normalizers/insert-paragraph-nodes.mjs +0 -28
  182. package/esm2022/plugins/normalizers/remove-empty-nodes.mjs +0 -18
  183. package/esm2022/plugins/normalizers/trailing-node.plugin.mjs +0 -33
  184. package/esm2022/plugins/paint-format/paint-format.editor.mjs +0 -126
  185. package/esm2022/plugins/public-api.mjs +0 -20
  186. package/esm2022/plugins/quick-insert/components/quick-insert.component.mjs +0 -126
  187. package/esm2022/plugins/quick-insert/index.mjs +0 -4
  188. package/esm2022/plugins/quick-insert/quick-insert.editor.mjs +0 -70
  189. package/esm2022/plugins/quick-insert/quick-insert.plugin.mjs +0 -109
  190. package/esm2022/plugins/soft-break/soft-break.plugin.mjs +0 -36
  191. package/esm2022/plugins/soft-break/soft-break.types.mjs +0 -2
  192. package/esm2022/plugins/table/components/insert-mark/insert-mark.component.mjs +0 -132
  193. package/esm2022/plugins/table/components/row/row.component.mjs +0 -93
  194. package/esm2022/plugins/table/components/table.component.mjs +0 -887
  195. package/esm2022/plugins/table/components/td/td.component.mjs +0 -610
  196. package/esm2022/plugins/table/components/toolbar/table-options.component.mjs +0 -102
  197. package/esm2022/plugins/table/components/toolbar/table-toolbar.component.mjs +0 -179
  198. package/esm2022/plugins/table/table.editor.mjs +0 -301
  199. package/esm2022/plugins/table/table.pipe.mjs +0 -66
  200. package/esm2022/plugins/table/table.plugin.mjs +0 -556
  201. package/esm2022/plugins/table/table.service.mjs +0 -122
  202. package/esm2022/plugins/table/table.store.mjs +0 -417
  203. package/esm2022/plugins/table/table.types.mjs +0 -68
  204. package/esm2022/plugins/table/toolbar-item.component.mjs +0 -95
  205. package/esm2022/plugins/table/transforms/clear-cell.mjs +0 -14
  206. package/esm2022/plugins/table/transforms/clear-table-node.mjs +0 -27
  207. package/esm2022/plugins/table/transforms/index.mjs +0 -8
  208. package/esm2022/plugins/table/transforms/insert-column.mjs +0 -69
  209. package/esm2022/plugins/table/transforms/insert-row.mjs +0 -50
  210. package/esm2022/plugins/table/transforms/insert-table.mjs +0 -15
  211. package/esm2022/plugins/table/transforms/move-selection-from-cell.mjs +0 -91
  212. package/esm2022/plugins/table/transforms/remove-column.mjs +0 -51
  213. package/esm2022/plugins/table/transforms/remove-row.mjs +0 -48
  214. package/esm2022/plugins/table/transforms/remove-table.mjs +0 -49
  215. package/esm2022/plugins/table/utils/add-columns.mjs +0 -38
  216. package/esm2022/plugins/table/utils/calc-anchor-position.mjs +0 -26
  217. package/esm2022/plugins/table/utils/calc-span.mjs +0 -73
  218. package/esm2022/plugins/table/utils/calculate-table.mjs +0 -116
  219. package/esm2022/plugins/table/utils/cell-position.mjs +0 -57
  220. package/esm2022/plugins/table/utils/create-cell.mjs +0 -19
  221. package/esm2022/plugins/table/utils/create-row.mjs +0 -12
  222. package/esm2022/plugins/table/utils/create-table-position.mjs +0 -10
  223. package/esm2022/plugins/table/utils/create-table.mjs +0 -15
  224. package/esm2022/plugins/table/utils/get-grid-columns.mjs +0 -79
  225. package/esm2022/plugins/table/utils/get-min-max-cell-index.mjs +0 -69
  226. package/esm2022/plugins/table/utils/get-next-cell.mjs +0 -44
  227. package/esm2022/plugins/table/utils/get-select-cell-node.mjs +0 -16
  228. package/esm2022/plugins/table/utils/handle-cell.mjs +0 -25
  229. package/esm2022/plugins/table/utils/index.mjs +0 -16
  230. package/esm2022/plugins/table/utils/is-header-row.mjs +0 -15
  231. package/esm2022/plugins/table/utils/is-legal-table.mjs +0 -26
  232. package/esm2022/plugins/table/utils/is-range-in-table.mjs +0 -16
  233. package/esm2022/plugins/table/utils/is-selection-in-table.mjs +0 -51
  234. package/esm2022/plugins/table/utils/is-virtual-key.mjs +0 -13
  235. package/esm2022/plugins/table/utils/merge-cell.mjs +0 -110
  236. package/esm2022/plugins/table/utils/next-path.mjs +0 -5
  237. package/esm2022/plugins/table/utils/normalize-table.mjs +0 -31
  238. package/esm2022/plugins/table/utils/remove-columns.mjs +0 -23
  239. package/esm2022/plugins/table/utils/remove-row-column.mjs +0 -45
  240. package/esm2022/plugins/table/utils/set-menu-cell-invisibility.mjs +0 -45
  241. package/esm2022/plugins/table/utils/split-cell.mjs +0 -29
  242. package/esm2022/plugins/table/utils/table-entry.mjs +0 -21
  243. package/esm2022/plugins/table/utils/table-position.mjs +0 -251
  244. package/esm2022/plugins/table/utils/table-viewport.mjs +0 -41
  245. package/esm2022/plugins/todo-item/todo-item.component.mjs +0 -65
  246. package/esm2022/plugins/todo-item/todo-item.editor.mjs +0 -32
  247. package/esm2022/plugins/todo-item/todo-item.plugin.mjs +0 -93
  248. package/esm2022/plugins/vertical-align/toolbar-item.component.mjs +0 -89
  249. package/esm2022/plugins/vertical-align/vertical-align.editor.mjs +0 -59
  250. package/esm2022/public-api.mjs +0 -22
  251. package/esm2022/queries/anchor-block-entry.mjs +0 -13
  252. package/esm2022/queries/anchor-block.mjs +0 -6
  253. package/esm2022/queries/anchor-inline-entry.mjs +0 -10
  254. package/esm2022/queries/find-descendant.mjs +0 -47
  255. package/esm2022/queries/find-node.mjs +0 -45
  256. package/esm2022/queries/find-path.mjs +0 -28
  257. package/esm2022/queries/get-above-by-type.mjs +0 -14
  258. package/esm2022/queries/get-above.mjs +0 -9
  259. package/esm2022/queries/get-anchor-block-entry.mjs +0 -8
  260. package/esm2022/queries/get-block-above.mjs +0 -10
  261. package/esm2022/queries/get-block-card-above.mjs +0 -10
  262. package/esm2022/queries/get-block-card-cursor.mjs +0 -9
  263. package/esm2022/queries/get-container-blocks.mjs +0 -12
  264. package/esm2022/queries/get-directly-parent.mjs +0 -12
  265. package/esm2022/queries/get-insert-elements-path.mjs +0 -46
  266. package/esm2022/queries/get-last-child-path.mjs +0 -9
  267. package/esm2022/queries/get-last-node.mjs +0 -17
  268. package/esm2022/queries/get-next-sibling-nodes.mjs +0 -17
  269. package/esm2022/queries/get-node.mjs +0 -10
  270. package/esm2022/queries/get-nodes-by-type.mjs +0 -15
  271. package/esm2022/queries/get-nodes.mjs +0 -7
  272. package/esm2022/queries/get-parent.mjs +0 -12
  273. package/esm2022/queries/get-plain-text.mjs +0 -16
  274. package/esm2022/queries/get-plugin-by-toolbar.mjs +0 -13
  275. package/esm2022/queries/get-point-before.mjs +0 -62
  276. package/esm2022/queries/get-point-from-location.mjs +0 -15
  277. package/esm2022/queries/get-previous-path.mjs +0 -9
  278. package/esm2022/queries/get-rang-from-block-start.mjs +0 -16
  279. package/esm2022/queries/get-range-before.mjs +0 -17
  280. package/esm2022/queries/get-selection-marks.mjs +0 -18
  281. package/esm2022/queries/get-selection-nodes-by-type.mjs +0 -30
  282. package/esm2022/queries/get-text.mjs +0 -9
  283. package/esm2022/queries/get-toolbar-disabled.mjs +0 -13
  284. package/esm2022/queries/index.mjs +0 -62
  285. package/esm2022/queries/is-across-blocks.mjs +0 -7
  286. package/esm2022/queries/is-ancestor-empty.mjs +0 -6
  287. package/esm2022/queries/is-ancestor.mjs +0 -3
  288. package/esm2022/queries/is-block-above-empty.mjs +0 -11
  289. package/esm2022/queries/is-block-active.mjs +0 -8
  290. package/esm2022/queries/is-block-card-cursor.mjs +0 -16
  291. package/esm2022/queries/is-block-text-empty-after-selection.mjs +0 -31
  292. package/esm2022/queries/is-collapsed.mjs +0 -7
  293. package/esm2022/queries/is-contain-nested-type.mjs +0 -29
  294. package/esm2022/queries/is-container-type.mjs +0 -3
  295. package/esm2022/queries/is-descendant.mjs +0 -3
  296. package/esm2022/queries/is-empty-content-filter.mjs +0 -22
  297. package/esm2022/queries/is-empty-content.mjs +0 -15
  298. package/esm2022/queries/is-empty-paragraph-by-path.mjs +0 -7
  299. package/esm2022/queries/is-empty-paragraph.mjs +0 -28
  300. package/esm2022/queries/is-first-child.mjs +0 -5
  301. package/esm2022/queries/is-global-collapsed.mjs +0 -5
  302. package/esm2022/queries/is-include-types.mjs +0 -12
  303. package/esm2022/queries/is-node-type-in.mjs +0 -9
  304. package/esm2022/queries/is-node-type.mjs +0 -15
  305. package/esm2022/queries/is-paragraph.mjs +0 -9
  306. package/esm2022/queries/is-point-at-root.mjs +0 -2
  307. package/esm2022/queries/is-range-across-blocks.mjs +0 -22
  308. package/esm2022/queries/is-range-at-root.mjs +0 -3
  309. package/esm2022/queries/is-root-path.mjs +0 -2
  310. package/esm2022/queries/is-start.mjs +0 -6
  311. package/esm2022/queries/some-node.mjs +0 -9
  312. package/esm2022/services/context.service.mjs +0 -140
  313. package/esm2022/services/table-contextmenu.service.mjs +0 -288
  314. package/esm2022/services/toolbar.service.mjs +0 -47
  315. package/esm2022/shortcuts/index.mjs +0 -5
  316. package/esm2022/shortcuts/mark.mjs +0 -25
  317. package/esm2022/test/basic/basic.component.mjs +0 -61
  318. package/esm2022/test/faker/data-transfer-faker.mjs +0 -13
  319. package/esm2022/test/faker/tethys-icon-faker.mjs +0 -22
  320. package/esm2022/test/index.mjs +0 -7
  321. package/esm2022/test/utils/mock-plugins.mjs +0 -104
  322. package/esm2022/test/utils/preset-config.mjs +0 -17
  323. package/esm2022/test/utils/with-plugin.mjs +0 -11
  324. package/esm2022/transforms/apply-deep-to-nodes.mjs +0 -22
  325. package/esm2022/transforms/clear-marks.mjs +0 -23
  326. package/esm2022/transforms/delete-element.mjs +0 -12
  327. package/esm2022/transforms/delete-node-by-type.mjs +0 -10
  328. package/esm2022/transforms/handle-continual-delete-backward.mjs +0 -18
  329. package/esm2022/transforms/handle-continual-insert-break.mjs +0 -20
  330. package/esm2022/transforms/index.mjs +0 -19
  331. package/esm2022/transforms/insert-elements.mjs +0 -55
  332. package/esm2022/transforms/insert-paragraph.mjs +0 -6
  333. package/esm2022/transforms/merge-deep-to-nodes.mjs +0 -9
  334. package/esm2022/transforms/move-children.mjs +0 -22
  335. package/esm2022/transforms/on-keydown-reset-block-type.mjs +0 -23
  336. package/esm2022/transforms/set-end-selection.mjs +0 -10
  337. package/esm2022/transforms/set-marks.mjs +0 -9
  338. package/esm2022/transforms/set-node-by-type.mjs +0 -10
  339. package/esm2022/transforms/set-node.mjs +0 -6
  340. package/esm2022/transforms/un-hang-range.mjs +0 -11
  341. package/esm2022/transforms/un-wrap.mjs +0 -12
  342. package/esm2022/transforms/unwrap-nodes-by-type.mjs +0 -14
  343. package/esm2022/utils/auto-focus.mjs +0 -24
  344. package/esm2022/utils/blob.mjs +0 -16
  345. package/esm2022/utils/cast-array.mjs +0 -7
  346. package/esm2022/utils/color-picker.mjs +0 -15
  347. package/esm2022/utils/common.mjs +0 -11
  348. package/esm2022/utils/copy-node.mjs +0 -38
  349. package/esm2022/utils/create-empty-paragraph.mjs +0 -14
  350. package/esm2022/utils/data-transform.mjs +0 -48
  351. package/esm2022/utils/dom.mjs +0 -56
  352. package/esm2022/utils/editor-uuid.mjs +0 -8
  353. package/esm2022/utils/fragment.mjs +0 -82
  354. package/esm2022/utils/get-editable-element-height.mjs +0 -6
  355. package/esm2022/utils/get-mode.mjs +0 -14
  356. package/esm2022/utils/get-toolbar-class.mjs +0 -6
  357. package/esm2022/utils/id-creator.mjs +0 -11
  358. package/esm2022/utils/index.mjs +0 -23
  359. package/esm2022/utils/insert-data-by-invalid-type.mjs +0 -70
  360. package/esm2022/utils/is-clean-empty-paragraph.mjs +0 -37
  361. package/esm2022/utils/is-inline.mjs +0 -9
  362. package/esm2022/utils/lodash.mjs +0 -3
  363. package/esm2022/utils/match.mjs +0 -32
  364. package/esm2022/utils/merge-element-options.mjs +0 -19
  365. package/esm2022/utils/normalize.mjs +0 -61
  366. package/esm2022/utils/refocus.mjs +0 -47
  367. package/esm2022/utils/scrolling.mjs +0 -43
  368. package/esm2022/utils/update-popover-position.mjs +0 -26
  369. package/esm2022/utils/weak-maps.mjs +0 -9
  370. package/esm2022/worktile-theia.mjs +0 -5
@@ -1,417 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { BehaviorSubject, Subject, merge } from 'rxjs';
3
- import { skip } from 'rxjs/operators';
4
- import { Editor, Node, Path, Transforms } from 'slate';
5
- import { AngularEditor } from 'slate-angular';
6
- import { groupBy, map, uniq } from '../../utils/lodash';
7
- import { getNextCell } from './utils';
8
- import { getCellPositionsFromRange, getSelectedCellPositions, isSelectedAllCell, uniqueCellPosition } from './utils/cell-position';
9
- import { createTablePosition } from './utils/create-table-position';
10
- import { getMinAndMaxCellIndex } from './utils/get-min-max-cell-index';
11
- import { getCellPositionsBeforeMerge } from './utils/merge-cell';
12
- import { getTablePath } from './utils/table-entry';
13
- import * as i0 from "@angular/core";
14
- export class TableStore {
15
- get dangerousCells() {
16
- return this.dangerousCells$.getValue();
17
- }
18
- get selectedCells() {
19
- return this.selectedCells$.getValue();
20
- }
21
- get isExistSelectedCell() {
22
- return this.selectedCells.length > 0;
23
- }
24
- constructor() {
25
- this.selectedCells$ = new BehaviorSubject([]);
26
- this.dangerousCells$ = new BehaviorSubject([]);
27
- this.cellsChangeObject$ = new Subject();
28
- this.tableChange$ = new Subject();
29
- this.selectedColumnsIndex = [];
30
- this.selectedRowsIndex = [];
31
- this.dangerousColumnsIndex = [];
32
- this.dangerousRowsIndex = [];
33
- this.isPrepareSelecting = false;
34
- this.isCellSelecting = false;
35
- this.isRightClicking = false;
36
- this.isFocusedInput = false;
37
- }
38
- initEditor(editor) {
39
- this.editor = editor;
40
- }
41
- getSelectedCellPositions() {
42
- return getSelectedCellPositions(this.editor, this.selectedCells$.getValue());
43
- }
44
- publishDangerousCells(value) {
45
- return this.dangerousCells$.next(value);
46
- }
47
- setSelectedColumnsAndRowIndex() {
48
- if (!this.editor?.selection) {
49
- return;
50
- }
51
- const pos = createTablePosition(this.editor);
52
- if (!pos?.table) {
53
- return;
54
- }
55
- const mergeBeforeCells = [];
56
- const selectedCellPositions = this.getSelectedCellPositions();
57
- selectedCellPositions.forEach(({ row, col }) => {
58
- // 计算合并单元格数据时,要按合并前的数据处理
59
- mergeBeforeCells.push(...getCellPositionsBeforeMerge(this.editor, { row, col }));
60
- });
61
- const cells = uniqueCellPosition(mergeBeforeCells, selectedCellPositions);
62
- const rowGroup = groupBy(cells, ({ row }) => row);
63
- const colGroup = groupBy(cells, ({ col }) => col);
64
- this.selectedRowsIndex = [];
65
- this.selectedColumnsIndex = [];
66
- for (const row in rowGroup) {
67
- if (rowGroup[row].length === pos.getWidth()) {
68
- this.selectedRowsIndex.push(parseInt(row, 10));
69
- }
70
- }
71
- for (const col in colGroup) {
72
- if (colGroup[col].length === pos.getHeight()) {
73
- this.selectedColumnsIndex.push(parseInt(col, 10));
74
- }
75
- }
76
- this.selectedRowsIndex = uniq(this.selectedRowsIndex);
77
- this.selectedColumnsIndex = uniq(this.selectedColumnsIndex);
78
- if (isSelectedAllCell(this.editor, selectedCellPositions)) {
79
- this.isSelectedTable = true;
80
- }
81
- else {
82
- this.isSelectedTable = false;
83
- }
84
- }
85
- setSelectedCells(cells, pos, metaKey = false) {
86
- const uniqueCells = metaKey ? uniqueCellPosition(cells, this.getSelectedCellPositions()) : cells;
87
- const cellElements = uniqueCells.map(cell => {
88
- return pos.findCellByPath(cell);
89
- });
90
- this.selectedCells$.next(cellElements);
91
- this.setSelectedColumnsAndRowIndex();
92
- }
93
- selectRow(editor, index, event) {
94
- const pos = createTablePosition(editor);
95
- const rangeCells = getCellPositionsFromRange(index, 0, index + 1, pos.getWidth());
96
- this.clearLastFocusPath();
97
- if (event?.shiftKey) {
98
- this.areaSelectRowAndColumn(rangeCells, event);
99
- }
100
- else {
101
- const lastColIndex = pos.tableEntry[0].children[index].children.length - 1;
102
- this.setAnchorCellPath(pos.tableEntry[1].concat([index, lastColIndex]));
103
- this.setSelectedCells(rangeCells, pos, event?.metaKey);
104
- this.focusCell(pos.tableEntry[1].concat([index, 0]));
105
- }
106
- }
107
- selectColumn(editor, index, event) {
108
- const pos = createTablePosition(editor);
109
- const rangeCells = getCellPositionsFromRange(0, index, pos.getHeight(), index + 1);
110
- this.clearLastFocusPath();
111
- if (event?.shiftKey) {
112
- this.areaSelectRowAndColumn(rangeCells, event);
113
- }
114
- else {
115
- const lastRowIndex = pos.tableEntry[0].children.length - 1;
116
- this.setAnchorCellPath(pos.tableEntry[1].concat([lastRowIndex, index]));
117
- this.setSelectedCells(rangeCells, pos, event?.metaKey);
118
- this.focusCell(pos.tableEntry[1].concat([0, index]));
119
- }
120
- }
121
- selectTable(editor, metaKey = false) {
122
- const pos = createTablePosition(editor);
123
- const cells = getCellPositionsFromRange(0, 0, pos.getHeight(), pos.getWidth());
124
- const lastCell = cells[cells.length - 1];
125
- const anchorCellPath = pos.tableEntry[1].concat([lastCell.row, lastCell.col]);
126
- this.isSelectedTable = true;
127
- this.setSelectedCells(cells, pos, metaKey);
128
- this.setAnchorCellPath(anchorCellPath);
129
- this.focusCell(pos.tableEntry[1].concat([0, 0]));
130
- }
131
- // 拖选开始 || 记录聚焦点
132
- selectCellStart(cell, editor) {
133
- const node = AngularEditor.toSlateNode(editor, cell);
134
- const path = AngularEditor.findPath(editor, node);
135
- this.isPrepareSelecting = true;
136
- this.setAnchorCellPath(path);
137
- this.focusCellPath = path;
138
- this.focusCellElement = cell;
139
- this.lastFocusCellPath = path;
140
- if (!this.preFocusCellPath) {
141
- this.preFocusCellPath = this.anchorCellPath;
142
- }
143
- }
144
- // 拖选
145
- selectCells(editor, metaKey = false) {
146
- const pos = createTablePosition(editor);
147
- const anchorPath = this.anchorCellPath.slice(-2);
148
- const focusPath = this.focusCellPath.slice(-2);
149
- const rows = [anchorPath[0], focusPath[0]].sort((m, n) => m - n);
150
- const columns = [anchorPath[1], focusPath[1]].sort((m, n) => m - n);
151
- const { colspan: anchorColSpanCount, rowspan: anchorRowSpanCount } = Editor.node(editor, this.anchorCellPath)[0];
152
- const { colspan: focusColSpanCount, rowspan: focusRowSpanCount } = Editor.node(editor, this.focusCellPath)[0];
153
- const anchorRow = anchorPath[0] + (anchorRowSpanCount || 1) - 1;
154
- const focusRow = focusPath[0] + (focusRowSpanCount || 1) - 1;
155
- const anchorCol = anchorPath[1] + (anchorColSpanCount || 1) - 1;
156
- const focusCol = focusPath[1] + (focusColSpanCount || 1) - 1;
157
- let initMaxCol = Math.max(anchorCol, focusCol);
158
- let initMaxRow = Math.max(anchorRow, focusRow);
159
- const { minRow, maxRow, minCol, maxCol } = getMinAndMaxCellIndex(this.editor, this.getSelectedCellPositions(), initMaxRow, initMaxCol, rows[0], columns[0], pos.table);
160
- const cells = getCellPositionsFromRange(minRow, minCol, maxRow + 1, maxCol + 1);
161
- this.setSelectedCells(cells, pos, metaKey);
162
- }
163
- selectFirstCell() {
164
- const selectedCellPositions = this.getSelectedCellPositions();
165
- const { row, col } = selectedCellPositions[0];
166
- const tablePath = getTablePath(this.editor);
167
- const path = Editor.start(this.editor, [...tablePath, row, col]);
168
- Transforms.select(this.editor, path);
169
- }
170
- // 选择单元格
171
- selectCell(cell, editor, metaKey = false) {
172
- const node = AngularEditor.toSlateNode(editor, cell);
173
- const path = AngularEditor.findPath(editor, node);
174
- this.setAnchorCellPath(path);
175
- this.focusCellPath = path;
176
- this.focusCellElement = cell;
177
- const [row, col] = path.slice(-2);
178
- const pos = createTablePosition(editor, path);
179
- const cells = [{ row, col }];
180
- const selectedCellPositions = this.getSelectedCellPositions();
181
- if (metaKey) {
182
- cells.push(...selectedCellPositions);
183
- // 处理单元格选中时,处理为选中多单元格
184
- const selectedCells = getCellPositionsBeforeMerge(this.editor, { row, col });
185
- cells.push(...selectedCells);
186
- // 已聚焦的单元格在多选模式下选中(暂存上次聚焦的单元格数据)
187
- const focusCell = this.lastFocusCellPath?.slice(-2);
188
- if (focusCell) {
189
- const focusCells = getCellPositionsBeforeMerge(this.editor, { row: focusCell[0], col: focusCell[1] });
190
- cells.push(...focusCells);
191
- }
192
- }
193
- this.setSelectedCells(cells, pos, metaKey);
194
- }
195
- selectCellOngoing(cell, editor, event) {
196
- const pos = createTablePosition(editor);
197
- if (AngularEditor.isReadonly(editor) || !editor.selection || !pos?.table) {
198
- return;
199
- }
200
- let isChanged;
201
- if (cell) {
202
- const node = AngularEditor.toSlateNode(editor, cell);
203
- const path = AngularEditor.findPath(editor, node);
204
- isChanged = !this.focusCellPath || !Path.equals(this.focusCellPath, path);
205
- this.focusCellPath = path;
206
- this.focusCellElement = cell;
207
- }
208
- else {
209
- const selectedCellPositions = this.getSelectedCellPositions();
210
- isChanged = !this.focusCellPath || (Path.equals(this.focusCellPath, this.anchorCellPath) && selectedCellPositions.length === 0);
211
- }
212
- if (this.isPrepareSelecting && isChanged) {
213
- if (JSON.stringify(this.preFocusCellPath) !== JSON.stringify(this.focusCellPath)) {
214
- this.isCellSelecting = true;
215
- this.selectCells(editor, event?.metaKey);
216
- this.preFocusCellPath = this.focusCellPath;
217
- }
218
- }
219
- }
220
- clearSelectedCells() {
221
- this.selectedColumnsIndex = [];
222
- this.selectedRowsIndex = [];
223
- this.isSelectedTable = false;
224
- this.isCellSelecting = false;
225
- this.isRightClicking = false;
226
- this.isFocusedInput = false;
227
- this.selectedCells$.next([]);
228
- }
229
- clearLastFocusPath() {
230
- this.lastFocusCellPath = null;
231
- }
232
- selectedCellsChange() {
233
- return this.selectedCells$.asObservable().pipe(skip(1));
234
- }
235
- cellsPositionChange() {
236
- return this.cellsChangeObject$.asObservable();
237
- }
238
- changeCells() {
239
- this.cellsChangeObject$.next();
240
- }
241
- emitTableChange() {
242
- this.tableChange$.next();
243
- }
244
- tableChange() {
245
- return this.tableChange$.asObservable();
246
- }
247
- selectCellEnd() {
248
- if (this.isCellSelecting) {
249
- this.focusCell(this.focusCellPath);
250
- }
251
- this.isPrepareSelecting = false;
252
- this.preFocusCellPath = null;
253
- }
254
- dangerousCellsChange() {
255
- return this.dangerousCells$.asObservable().pipe(skip(1));
256
- }
257
- setDangerousCells() {
258
- const selectedCellPositions = this.getSelectedCellPositions();
259
- this.dangerousRowsIndex = this.selectedRowsIndex;
260
- this.dangerousColumnsIndex = this.selectedColumnsIndex;
261
- this.dangerousCells$.next(selectedCellPositions);
262
- }
263
- clearDangerousCells() {
264
- this.dangerousRowsIndex = [];
265
- this.dangerousColumnsIndex = [];
266
- this.dangerousCells$.next([]);
267
- const pos = createTablePosition(this.editor);
268
- if (pos.table) {
269
- this.isSelectedTable = this.selectedRowsIndex.length === pos.getHeight() && this.selectedColumnsIndex.length === pos.getWidth();
270
- }
271
- }
272
- dangerousOrSelectedCellsChange() {
273
- return merge(this.dangerousCells$.asObservable().pipe(skip(1)), this.selectedCells$.asObservable().pipe(skip(1)));
274
- }
275
- setDangerousRows() {
276
- const selectedCellPositions = this.getSelectedCellPositions();
277
- const cells = selectedCellPositions;
278
- const rows = uniq(map(cells, 'row')).valueOf();
279
- const pos = createTablePosition(this.editor);
280
- const result = [];
281
- this.dangerousRowsIndex = rows;
282
- this.isSelectedTable = rows.length === pos.getHeight();
283
- if (this.isSelectedTable) {
284
- this.dangerousColumnsIndex = [...Array(pos.getWidth())].map((v, i) => i);
285
- }
286
- for (const rowIndex of rows) {
287
- for (let i = 0; i < pos.getWidth(); i++) {
288
- result.push({
289
- row: rowIndex,
290
- col: i
291
- });
292
- }
293
- }
294
- this.dangerousCells$.next(result);
295
- }
296
- setDangerousColumns() {
297
- const selectedCellPositions = this.getSelectedCellPositions();
298
- const cells = selectedCellPositions;
299
- const cols = uniq(map(cells, 'col')).valueOf();
300
- const pos = createTablePosition(this.editor);
301
- const result = [];
302
- this.dangerousColumnsIndex = cols;
303
- this.isSelectedTable = cols.length === pos.getWidth();
304
- if (this.isSelectedTable) {
305
- this.dangerousRowsIndex = [...Array(pos.getHeight())].map((_, i) => i);
306
- }
307
- for (const colIndex of cols) {
308
- for (let i = 0; i < pos.getHeight(); i++) {
309
- result.push({
310
- row: i,
311
- col: colIndex
312
- });
313
- }
314
- }
315
- this.dangerousCells$.next(result);
316
- }
317
- setDangerousTable() {
318
- this.isSelectedTable = true;
319
- const pos = createTablePosition(this.editor);
320
- const cells = getCellPositionsFromRange(0, 0, pos.getHeight(), pos.getWidth());
321
- this.dangerousRowsIndex = [...Array(pos.getHeight())].map((_, i) => i);
322
- this.dangerousColumnsIndex = [...Array(pos.getWidth())].map((_, i) => i);
323
- this.dangerousCells$.next(cells);
324
- }
325
- /**
326
- * 聚焦单元格并设置聚焦相关路径及元素
327
- */
328
- focusCell(path) {
329
- const node = Node.get(this.editor, path);
330
- const cellHTMLElement = AngularEditor.toDOMNode(this.editor, node);
331
- this.preFocusCellPath = this.focusCellPath;
332
- this.focusCellPath = path;
333
- this.focusCellElement = cellHTMLElement;
334
- Transforms.select(this.editor, Editor.start(this.editor, path));
335
- }
336
- /**
337
- * 区域选择开始
338
- * @param editor 编辑器对象
339
- * @param cell 单元格元素
340
- */
341
- areaSelectionStart(cell, editor) {
342
- const node = AngularEditor.toSlateNode(editor, cell);
343
- const path = AngularEditor.findPath(editor, node);
344
- this.isPrepareSelecting = true;
345
- this.lastFocusCellPath = path;
346
- if (!this?.anchorCellPath) {
347
- this.setAnchorCellPath(path);
348
- }
349
- if (!this?.focusCellPath) {
350
- this.focusCellPath = path;
351
- }
352
- if (!this.preFocusCellPath) {
353
- this.preFocusCellPath = this.anchorCellPath;
354
- }
355
- }
356
- /**
357
- * 设置区域选择的单元格
358
- * @param cellElement 单元格元素
359
- */
360
- setAreaSelectionCells(cellElement, event) {
361
- if (AngularEditor.isReadonly(this.editor) || !this.editor.selection || !this.isPrepareSelecting) {
362
- return;
363
- }
364
- const currentCellPath = AngularEditor.findPath(this.editor, cellElement);
365
- const selectedCellPositions = this.getSelectedCellPositions();
366
- const selectEqual = Path.equals(currentCellPath, this.anchorCellPath);
367
- // 不可以区域选择单一单元格
368
- if (selectedCellPositions.length <= 1 && selectEqual) {
369
- return;
370
- }
371
- this.isCellSelecting = true;
372
- this.focusCell(currentCellPath);
373
- this.selectCells(this.editor, event?.metaKey);
374
- }
375
- /**
376
- * 处理区域选择启用时选择整行/整列
377
- * @param cells 选择的单元格
378
- */
379
- areaSelectRowAndColumn(cells, event) {
380
- const pos = createTablePosition(this.editor);
381
- const [row, col] = this.focusCellPath.slice(-2);
382
- const selectCells = [{ row, col }, ...cells];
383
- const sortRows = selectCells.map(item => item.row).sort((m, n) => m - n);
384
- const sortCols = selectCells.map(item => item.col).sort((m, n) => m - n);
385
- const startRow = sortRows[0];
386
- const startCol = sortCols[0];
387
- const endRow = sortCols[sortCols.length - 1];
388
- const endCol = sortRows[sortRows.length - 1];
389
- const anchorCellPath = pos.tableEntry[1].concat([endCol, endRow]);
390
- const focusCellPath = pos.tableEntry[1].concat([startRow, startCol]);
391
- this.setAnchorCellPath(anchorCellPath);
392
- this.focusCell(focusCellPath);
393
- this.selectCells(this.editor, event?.metaKey);
394
- }
395
- /**
396
- * 设置指定 anchorCellPath
397
- * @param path 路径
398
- */
399
- setAnchorCellPath(path) {
400
- if (path) {
401
- this.anchorCellPath = path;
402
- }
403
- }
404
- selectCellInDirection(direction) {
405
- const [row, col] = this.focusCellPath.slice(-2);
406
- const nextCell = getNextCell(this.editor, direction, [row, col]);
407
- if (nextCell) {
408
- this.setAreaSelectionCells(nextCell);
409
- }
410
- }
411
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
412
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableStore }); }
413
- }
414
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableStore, decorators: [{
415
- type: Injectable
416
- }], ctorParameters: () => [] });
417
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS90YWJsZS5zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhELE9BQU8sRUFBaUIsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25JLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFHbkQsTUFBTSxPQUFPLFVBQVU7SUEyQ25CLElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsY0FB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amVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNraXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFZGl0b3IsIE5vZGUsIFBhdGgsIFRyYW5zZm9ybXMgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yIH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgeyBUYWJsZUNlbGxFbGVtZW50IH0gZnJvbSAnLi4vLi4vY3VzdG9tLXR5cGVzJztcbmltcG9ydCB7IGdyb3VwQnksIG1hcCwgdW5pcSB9IGZyb20gJy4uLy4uL3V0aWxzL2xvZGFzaCc7XG5pbXBvcnQgeyBDZWxsUG9zaXRpb24sIFRhYmxlU2VsZWN0Q2VsbERpcmVjdGlvbiB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xuaW1wb3J0IHsgVGFibGVQb3NpdGlvbiwgZ2V0TmV4dENlbGwgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGdldENlbGxQb3NpdGlvbnNGcm9tUmFuZ2UsIGdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucywgaXNTZWxlY3RlZEFsbENlbGwsIHVuaXF1ZUNlbGxQb3NpdGlvbiB9IGZyb20gJy4vdXRpbHMvY2VsbC1wb3NpdGlvbic7XG5pbXBvcnQgeyBjcmVhdGVUYWJsZVBvc2l0aW9uIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtdGFibGUtcG9zaXRpb24nO1xuaW1wb3J0IHsgZ2V0TWluQW5kTWF4Q2VsbEluZGV4IH0gZnJvbSAnLi91dGlscy9nZXQtbWluLW1heC1jZWxsLWluZGV4JztcbmltcG9ydCB7IGdldENlbGxQb3NpdGlvbnNCZWZvcmVNZXJnZSB9IGZyb20gJy4vdXRpbHMvbWVyZ2UtY2VsbCc7XG5pbXBvcnQgeyBnZXRUYWJsZVBhdGggfSBmcm9tICcuL3V0aWxzL3RhYmxlLWVudHJ5JztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhYmxlU3RvcmUge1xuICAgIHByaXZhdGUgc2VsZWN0ZWRDZWxscyQ6IEJlaGF2aW9yU3ViamVjdDxUYWJsZUNlbGxFbGVtZW50W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUYWJsZUNlbGxFbGVtZW50W10+KFtdKTtcblxuICAgIHByaXZhdGUgZGFuZ2Vyb3VzQ2VsbHMkOiBCZWhhdmlvclN1YmplY3Q8Q2VsbFBvc2l0aW9uW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG5cbiAgICBwcml2YXRlIGNlbGxzQ2hhbmdlT2JqZWN0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcml2YXRlIHRhYmxlQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBzZWxlY3RlZENvbHVtbnNJbmRleDogbnVtYmVyW10gPSBbXTtcblxuICAgIHNlbGVjdGVkUm93c0luZGV4OiBudW1iZXJbXSA9IFtdO1xuXG4gICAgZGFuZ2Vyb3VzQ29sdW1uc0luZGV4OiBudW1iZXJbXSA9IFtdO1xuXG4gICAgZGFuZ2Vyb3VzUm93c0luZGV4OiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaXNTZWxlY3RlZFRhYmxlOiBib29sZWFuO1xuXG4gICAgZWRpdG9yOiBFZGl0b3I7XG5cbiAgICBwdWJsaWMgaXNGdWxsc2NyZWVuOiBib29sZWFuO1xuXG4gICAgcHVibGljIGFuY2hvckNlbGxQYXRoOiBudW1iZXJbXTtcblxuICAgIHB1YmxpYyBmb2N1c0NlbGxQYXRoOiBudW1iZXJbXTtcblxuICAgIHB1YmxpYyBwcmVGb2N1c0NlbGxQYXRoOiBudW1iZXJbXTtcblxuICAgIHB1YmxpYyBsYXN0Rm9jdXNDZWxsUGF0aDogbnVtYmVyW107XG5cbiAgICBwdWJsaWMgZm9jdXNDZWxsRWxlbWVudDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ7XG5cbiAgICBwdWJsaWMgaXNQcmVwYXJlU2VsZWN0aW5nID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgaXNDZWxsU2VsZWN0aW5nID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgaXNSaWdodENsaWNraW5nID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgaXNGb2N1c2VkSW5wdXQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBtYXhDb2w6IG51bWJlcjtcblxuICAgIGdldCBkYW5nZXJvdXNDZWxscygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGFuZ2Vyb3VzQ2VsbHMkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkQ2VsbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ2VsbHMkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGlzRXhpc3RTZWxlY3RlZENlbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ2VsbHMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBpbml0RWRpdG9yKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpOiBDZWxsUG9zaXRpb25bXSB7XG4gICAgICAgIHJldHVybiBnZXRTZWxlY3RlZENlbGxQb3NpdGlvbnModGhpcy5lZGl0b3IsIHRoaXMuc2VsZWN0ZWRDZWxscyQuZ2V0VmFsdWUoKSk7XG4gICAgfVxuXG4gICAgcHVibGlzaERhbmdlcm91c0NlbGxzKHZhbHVlOiBDZWxsUG9zaXRpb25bXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYW5nZXJvdXNDZWxscyQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0U2VsZWN0ZWRDb2x1bW5zQW5kUm93SW5kZXgoKSB7XG4gICAgICAgIGlmICghdGhpcy5lZGl0b3I/LnNlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zID0gY3JlYXRlVGFibGVQb3NpdGlvbih0aGlzLmVkaXRvcik7XG4gICAgICAgIGlmICghcG9zPy50YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWVyZ2VCZWZvcmVDZWxscyA9IFtdO1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxQb3NpdGlvbnMgPSB0aGlzLmdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpO1xuICAgICAgICBzZWxlY3RlZENlbGxQb3NpdGlvbnMuZm9yRWFjaCgoeyByb3csIGNvbCB9KSA9PiB7XG4gICAgICAgICAgICAvLyDorqHnrpflkIjlubbljZXlhYPmoLzmlbDmja7ml7bvvIzopoHmjInlkIjlubbliY3nmoTmlbDmja7lpITnkIZcbiAgICAgICAgICAgIG1lcmdlQmVmb3JlQ2VsbHMucHVzaCguLi5nZXRDZWxsUG9zaXRpb25zQmVmb3JlTWVyZ2UodGhpcy5lZGl0b3IsIHsgcm93LCBjb2wgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2VsbHMgPSB1bmlxdWVDZWxsUG9zaXRpb24obWVyZ2VCZWZvcmVDZWxscywgc2VsZWN0ZWRDZWxsUG9zaXRpb25zKTtcbiAgICAgICAgY29uc3Qgcm93R3JvdXAgPSBncm91cEJ5KGNlbGxzLCAoeyByb3cgfSkgPT4gcm93KTtcbiAgICAgICAgY29uc3QgY29sR3JvdXAgPSBncm91cEJ5KGNlbGxzLCAoeyBjb2wgfSkgPT4gY29sKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NJbmRleCA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4ID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgcm93IGluIHJvd0dyb3VwKSB7XG4gICAgICAgICAgICBpZiAocm93R3JvdXBbcm93XS5sZW5ndGggPT09IHBvcy5nZXRXaWR0aCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NJbmRleC5wdXNoKHBhcnNlSW50KHJvdywgMTApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBpbiBjb2xHcm91cCkge1xuICAgICAgICAgICAgaWYgKGNvbEdyb3VwW2NvbF0ubGVuZ3RoID09PSBwb3MuZ2V0SGVpZ2h0KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4LnB1c2gocGFyc2VJbnQoY29sLCAxMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzSW5kZXggPSB1bmlxKHRoaXMuc2VsZWN0ZWRSb3dzSW5kZXgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4ID0gdW5pcSh0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4KTtcbiAgICAgICAgaWYgKGlzU2VsZWN0ZWRBbGxDZWxsKHRoaXMuZWRpdG9yLCBzZWxlY3RlZENlbGxQb3NpdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLmlzU2VsZWN0ZWRUYWJsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU2VsZWN0ZWRUYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0U2VsZWN0ZWRDZWxscyhjZWxsczogQ2VsbFBvc2l0aW9uW10sIHBvczogVGFibGVQb3NpdGlvbiwgbWV0YUtleTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHVuaXF1ZUNlbGxzID0gbWV0YUtleSA/IHVuaXF1ZUNlbGxQb3NpdGlvbihjZWxscywgdGhpcy5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoKSkgOiBjZWxscztcbiAgICAgICAgY29uc3QgY2VsbEVsZW1lbnRzID0gdW5pcXVlQ2VsbHMubWFwKGNlbGwgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHBvcy5maW5kQ2VsbEJ5UGF0aChjZWxsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscyQubmV4dChjZWxsRWxlbWVudHMpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkQ29sdW1uc0FuZFJvd0luZGV4KCk7XG4gICAgfVxuXG4gICAgc2VsZWN0Um93KGVkaXRvcjogRWRpdG9yLCBpbmRleDogbnVtYmVyLCBldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcG9zID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IpO1xuICAgICAgICBjb25zdCByYW5nZUNlbGxzID0gZ2V0Q2VsbFBvc2l0aW9uc0Zyb21SYW5nZShpbmRleCwgMCwgaW5kZXggKyAxLCBwb3MuZ2V0V2lkdGgoKSk7XG5cbiAgICAgICAgdGhpcy5jbGVhckxhc3RGb2N1c1BhdGgoKTtcbiAgICAgICAgaWYgKGV2ZW50Py5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5hcmVhU2VsZWN0Um93QW5kQ29sdW1uKHJhbmdlQ2VsbHMsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RDb2xJbmRleCA9IHBvcy50YWJsZUVudHJ5WzBdLmNoaWxkcmVuW2luZGV4XS5jaGlsZHJlbi5sZW5ndGggLSAxO1xuICAgICAgICAgICAgdGhpcy5zZXRBbmNob3JDZWxsUGF0aChwb3MudGFibGVFbnRyeVsxXS5jb25jYXQoW2luZGV4LCBsYXN0Q29sSW5kZXhdKSk7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkQ2VsbHMocmFuZ2VDZWxscywgcG9zLCBldmVudD8ubWV0YUtleSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQ2VsbChwb3MudGFibGVFbnRyeVsxXS5jb25jYXQoW2luZGV4LCAwXSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0Q29sdW1uKGVkaXRvcjogRWRpdG9yLCBpbmRleDogbnVtYmVyLCBldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcG9zID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IpO1xuICAgICAgICBjb25zdCByYW5nZUNlbGxzID0gZ2V0Q2VsbFBvc2l0aW9uc0Zyb21SYW5nZSgwLCBpbmRleCwgcG9zLmdldEhlaWdodCgpLCBpbmRleCArIDEpO1xuXG4gICAgICAgIHRoaXMuY2xlYXJMYXN0Rm9jdXNQYXRoKCk7XG4gICAgICAgIGlmIChldmVudD8uc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuYXJlYVNlbGVjdFJvd0FuZENvbHVtbihyYW5nZUNlbGxzLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0Um93SW5kZXggPSBwb3MudGFibGVFbnRyeVswXS5jaGlsZHJlbi5sZW5ndGggLSAxO1xuICAgICAgICAgICAgdGhpcy5zZXRBbmNob3JDZWxsUGF0aChwb3MudGFibGVFbnRyeVsxXS5jb25jYXQoW2xhc3RSb3dJbmRleCwgaW5kZXhdKSk7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkQ2VsbHMocmFuZ2VDZWxscywgcG9zLCBldmVudD8ubWV0YUtleSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQ2VsbChwb3MudGFibGVFbnRyeVsxXS5jb25jYXQoWzAsIGluZGV4XSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0VGFibGUoZWRpdG9yOiBFZGl0b3IsIG1ldGFLZXk6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBwb3MgPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gZ2V0Q2VsbFBvc2l0aW9uc0Zyb21SYW5nZSgwLCAwLCBwb3MuZ2V0SGVpZ2h0KCksIHBvcy5nZXRXaWR0aCgpKTtcbiAgICAgICAgY29uc3QgbGFzdENlbGwgPSBjZWxsc1tjZWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgYW5jaG9yQ2VsbFBhdGggPSBwb3MudGFibGVFbnRyeVsxXS5jb25jYXQoW2xhc3RDZWxsLnJvdywgbGFzdENlbGwuY29sXSk7XG5cbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGFibGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkQ2VsbHMoY2VsbHMsIHBvcywgbWV0YUtleSk7XG4gICAgICAgIHRoaXMuc2V0QW5jaG9yQ2VsbFBhdGgoYW5jaG9yQ2VsbFBhdGgpO1xuICAgICAgICB0aGlzLmZvY3VzQ2VsbChwb3MudGFibGVFbnRyeVsxXS5jb25jYXQoWzAsIDBdKSk7XG4gICAgfVxuXG4gICAgLy8g5ouW6YCJ5byA5aeLIHx8IOiusOW9leiBmueEpueCuVxuICAgIHNlbGVjdENlbGxTdGFydChjZWxsOiBIVE1MVGFibGVDZWxsRWxlbWVudCwgZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUoZWRpdG9yLCBjZWxsKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBub2RlKTtcbiAgICAgICAgdGhpcy5pc1ByZXBhcmVTZWxlY3RpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldEFuY2hvckNlbGxQYXRoKHBhdGgpO1xuICAgICAgICB0aGlzLmZvY3VzQ2VsbFBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLmZvY3VzQ2VsbEVsZW1lbnQgPSBjZWxsO1xuICAgICAgICB0aGlzLmxhc3RGb2N1c0NlbGxQYXRoID0gcGF0aDtcbiAgICAgICAgaWYgKCF0aGlzLnByZUZvY3VzQ2VsbFBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMucHJlRm9jdXNDZWxsUGF0aCA9IHRoaXMuYW5jaG9yQ2VsbFBhdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDmi5bpgIlcbiAgICBzZWxlY3RDZWxscyhlZGl0b3I6IEVkaXRvciwgbWV0YUtleTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgY29uc3QgYW5jaG9yUGF0aCA9IHRoaXMuYW5jaG9yQ2VsbFBhdGguc2xpY2UoLTIpO1xuICAgICAgICBjb25zdCBmb2N1c1BhdGggPSB0aGlzLmZvY3VzQ2VsbFBhdGguc2xpY2UoLTIpO1xuXG4gICAgICAgIGNvbnN0IHJvd3MgPSBbYW5jaG9yUGF0aFswXSwgZm9jdXNQYXRoWzBdXS5zb3J0KChtLCBuKSA9PiBtIC0gbik7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBbYW5jaG9yUGF0aFsxXSwgZm9jdXNQYXRoWzFdXS5zb3J0KChtLCBuKSA9PiBtIC0gbik7XG5cbiAgICAgICAgY29uc3QgeyBjb2xzcGFuOiBhbmNob3JDb2xTcGFuQ291bnQsIHJvd3NwYW46IGFuY2hvclJvd1NwYW5Db3VudCB9ID0gRWRpdG9yLm5vZGUoXG4gICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICB0aGlzLmFuY2hvckNlbGxQYXRoXG4gICAgICAgIClbMF0gYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgY29uc3QgeyBjb2xzcGFuOiBmb2N1c0NvbFNwYW5Db3VudCwgcm93c3BhbjogZm9jdXNSb3dTcGFuQ291bnQgfSA9IEVkaXRvci5ub2RlKGVkaXRvciwgdGhpcy5mb2N1c0NlbGxQYXRoKVswXSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuXG4gICAgICAgIGNvbnN0IGFuY2hvclJvdyA9IGFuY2hvclBhdGhbMF0gKyAoYW5jaG9yUm93U3BhbkNvdW50IHx8IDEpIC0gMTtcbiAgICAgICAgY29uc3QgZm9jdXNSb3cgPSBmb2N1c1BhdGhbMF0gKyAoZm9jdXNSb3dTcGFuQ291bnQgfHwgMSkgLSAxO1xuICAgICAgICBjb25zdCBhbmNob3JDb2wgPSBhbmNob3JQYXRoWzFdICsgKGFuY2hvckNvbFNwYW5Db3VudCB8fCAxKSAtIDE7XG4gICAgICAgIGNvbnN0IGZvY3VzQ29sID0gZm9jdXNQYXRoWzFdICsgKGZvY3VzQ29sU3BhbkNvdW50IHx8IDEpIC0gMTtcblxuICAgICAgICBsZXQgaW5pdE1heENvbCA9IE1hdGgubWF4KGFuY2hvckNvbCwgZm9jdXNDb2wpO1xuICAgICAgICBsZXQgaW5pdE1heFJvdyA9IE1hdGgubWF4KGFuY2hvclJvdywgZm9jdXNSb3cpO1xuICAgICAgICBjb25zdCB7IG1pblJvdywgbWF4Um93LCBtaW5Db2wsIG1heENvbCB9ID0gZ2V0TWluQW5kTWF4Q2VsbEluZGV4KFxuICAgICAgICAgICAgdGhpcy5lZGl0b3IsXG4gICAgICAgICAgICB0aGlzLmdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpLFxuICAgICAgICAgICAgaW5pdE1heFJvdyxcbiAgICAgICAgICAgIGluaXRNYXhDb2wsXG4gICAgICAgICAgICByb3dzWzBdLFxuICAgICAgICAgICAgY29sdW1uc1swXSxcbiAgICAgICAgICAgIHBvcy50YWJsZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjZWxscyA9IGdldENlbGxQb3NpdGlvbnNGcm9tUmFuZ2UobWluUm93LCBtaW5Db2wsIG1heFJvdyArIDEsIG1heENvbCArIDEpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkQ2VsbHMoY2VsbHMsIHBvcywgbWV0YUtleSk7XG4gICAgfVxuXG4gICAgc2VsZWN0Rmlyc3RDZWxsKCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxQb3NpdGlvbnMgPSB0aGlzLmdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpO1xuICAgICAgICBjb25zdCB7IHJvdywgY29sIH0gPSBzZWxlY3RlZENlbGxQb3NpdGlvbnNbMF07XG4gICAgICAgIGNvbnN0IHRhYmxlUGF0aCA9IGdldFRhYmxlUGF0aCh0aGlzLmVkaXRvcik7XG4gICAgICAgIGNvbnN0IHBhdGggPSBFZGl0b3Iuc3RhcnQodGhpcy5lZGl0b3IsIFsuLi50YWJsZVBhdGgsIHJvdywgY29sXSk7XG4gICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KHRoaXMuZWRpdG9yLCBwYXRoKTtcbiAgICB9XG5cbiAgICAvLyDpgInmi6nljZXlhYPmoLxcbiAgICBzZWxlY3RDZWxsKGNlbGw6IEhUTUxUYWJsZUNlbGxFbGVtZW50LCBlZGl0b3I6IEVkaXRvciwgbWV0YUtleTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVOb2RlKGVkaXRvciwgY2VsbCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBub2RlKTtcbiAgICAgICAgdGhpcy5zZXRBbmNob3JDZWxsUGF0aChwYXRoKTtcbiAgICAgICAgdGhpcy5mb2N1c0NlbGxQYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5mb2N1c0NlbGxFbGVtZW50ID0gY2VsbDtcbiAgICAgICAgY29uc3QgW3JvdywgY29sXSA9IHBhdGguc2xpY2UoLTIpO1xuICAgICAgICBjb25zdCBwb3MgPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvciwgcGF0aCk7XG4gICAgICAgIGNvbnN0IGNlbGxzOiBDZWxsUG9zaXRpb25bXSA9IFt7IHJvdywgY29sIH1dO1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxQb3NpdGlvbnMgPSB0aGlzLmdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpO1xuICAgICAgICBpZiAobWV0YUtleSkge1xuICAgICAgICAgICAgY2VsbHMucHVzaCguLi5zZWxlY3RlZENlbGxQb3NpdGlvbnMpO1xuICAgICAgICAgICAgLy8g5aSE55CG5Y2V5YWD5qC86YCJ5Lit5pe277yM5aSE55CG5Li66YCJ5Lit5aSa5Y2V5YWD5qC8XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gZ2V0Q2VsbFBvc2l0aW9uc0JlZm9yZU1lcmdlKHRoaXMuZWRpdG9yLCB7IHJvdywgY29sIH0pO1xuICAgICAgICAgICAgY2VsbHMucHVzaCguLi5zZWxlY3RlZENlbGxzKTtcbiAgICAgICAgICAgIC8vIOW3suiBmueEpueahOWNleWFg+agvOWcqOWkmumAieaooeW8j+S4i+mAieS4re+8iOaaguWtmOS4iuasoeiBmueEpueahOWNleWFg+agvOaVsOaNru+8iVxuICAgICAgICAgICAgY29uc3QgZm9jdXNDZWxsID0gdGhpcy5sYXN0Rm9jdXNDZWxsUGF0aD8uc2xpY2UoLTIpO1xuICAgICAgICAgICAgaWYgKGZvY3VzQ2VsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzQ2VsbHMgPSBnZXRDZWxsUG9zaXRpb25zQmVmb3JlTWVyZ2UodGhpcy5lZGl0b3IsIHsgcm93OiBmb2N1c0NlbGxbMF0sIGNvbDogZm9jdXNDZWxsWzFdIH0pO1xuICAgICAgICAgICAgICAgIGNlbGxzLnB1c2goLi4uZm9jdXNDZWxscyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZENlbGxzKGNlbGxzLCBwb3MsIG1ldGFLZXkpO1xuICAgIH1cblxuICAgIHNlbGVjdENlbGxPbmdvaW5nKGNlbGw6IEhUTUxUYWJsZUNlbGxFbGVtZW50LCBlZGl0b3I6IEVkaXRvciwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgcG9zID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IpO1xuICAgICAgICBpZiAoQW5ndWxhckVkaXRvci5pc1JlYWRvbmx5KGVkaXRvcikgfHwgIWVkaXRvci5zZWxlY3Rpb24gfHwgIXBvcz8udGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXNDaGFuZ2VkOiBib29sZWFuO1xuICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUoZWRpdG9yLCBjZWxsKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgbm9kZSk7XG4gICAgICAgICAgICBpc0NoYW5nZWQgPSAhdGhpcy5mb2N1c0NlbGxQYXRoIHx8ICFQYXRoLmVxdWFscyh0aGlzLmZvY3VzQ2VsbFBhdGgsIHBhdGgpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0NlbGxQYXRoID0gcGF0aDtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDZWxsRWxlbWVudCA9IGNlbGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxQb3NpdGlvbnMgPSB0aGlzLmdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpO1xuICAgICAgICAgICAgaXNDaGFuZ2VkID0gIXRoaXMuZm9jdXNDZWxsUGF0aCB8fCAoUGF0aC5lcXVhbHModGhpcy5mb2N1c0NlbGxQYXRoLCB0aGlzLmFuY2hvckNlbGxQYXRoKSAmJiBzZWxlY3RlZENlbGxQb3NpdGlvbnMubGVuZ3RoID09PSAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1ByZXBhcmVTZWxlY3RpbmcgJiYgaXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5wcmVGb2N1c0NlbGxQYXRoKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5mb2N1c0NlbGxQYXRoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDZWxsU2VsZWN0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENlbGxzKGVkaXRvciwgZXZlbnQ/Lm1ldGFLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlRm9jdXNDZWxsUGF0aCA9IHRoaXMuZm9jdXNDZWxsUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyU2VsZWN0ZWRDZWxscygpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNJbmRleCA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0luZGV4ID0gW107XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZFRhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNDZWxsU2VsZWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNSaWdodENsaWNraW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENlbGxzJC5uZXh0KFtdKTtcbiAgICB9XG5cbiAgICBjbGVhckxhc3RGb2N1c1BhdGgoKSB7XG4gICAgICAgIHRoaXMubGFzdEZvY3VzQ2VsbFBhdGggPSBudWxsO1xuICAgIH1cblxuICAgIHNlbGVjdGVkQ2VsbHNDaGFuZ2UoKTogT2JzZXJ2YWJsZTxUYWJsZUNlbGxFbGVtZW50W10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDZWxscyQuYXNPYnNlcnZhYmxlKCkucGlwZShza2lwKDEpKTtcbiAgICB9XG5cbiAgICBjZWxsc1Bvc2l0aW9uQ2hhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jZWxsc0NoYW5nZU9iamVjdCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgY2hhbmdlQ2VsbHMoKSB7XG4gICAgICAgIHRoaXMuY2VsbHNDaGFuZ2VPYmplY3QkLm5leHQoKTtcbiAgICB9XG5cbiAgICBlbWl0VGFibGVDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMudGFibGVDaGFuZ2UkLm5leHQoKTtcbiAgICB9XG5cbiAgICB0YWJsZUNoYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDaGFuZ2UkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHNlbGVjdENlbGxFbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ2VsbFNlbGVjdGluZykge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0NlbGwodGhpcy5mb2N1c0NlbGxQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzUHJlcGFyZVNlbGVjdGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByZUZvY3VzQ2VsbFBhdGggPSBudWxsO1xuICAgIH1cblxuICAgIGRhbmdlcm91c0NlbGxzQ2hhbmdlKCk6IE9ic2VydmFibGU8Q2VsbFBvc2l0aW9uW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGFuZ2Vyb3VzQ2VsbHMkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2tpcCgxKSk7XG4gICAgfVxuXG4gICAgc2V0RGFuZ2Vyb3VzQ2VsbHMoKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFBvc2l0aW9ucyA9IHRoaXMuZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKCk7XG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzUm93c0luZGV4ID0gdGhpcy5zZWxlY3RlZFJvd3NJbmRleDtcbiAgICAgICAgdGhpcy5kYW5nZXJvdXNDb2x1bW5zSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1uc0luZGV4O1xuICAgICAgICB0aGlzLmRhbmdlcm91c0NlbGxzJC5uZXh0KHNlbGVjdGVkQ2VsbFBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgY2xlYXJEYW5nZXJvdXNDZWxscygpIHtcbiAgICAgICAgdGhpcy5kYW5nZXJvdXNSb3dzSW5kZXggPSBbXTtcbiAgICAgICAgdGhpcy5kYW5nZXJvdXNDb2x1bW5zSW5kZXggPSBbXTtcbiAgICAgICAgdGhpcy5kYW5nZXJvdXNDZWxscyQubmV4dChbXSk7XG4gICAgICAgIGNvbnN0IHBvcyA9IGNyZWF0ZVRhYmxlUG9zaXRpb24odGhpcy5lZGl0b3IpO1xuICAgICAgICBpZiAocG9zLnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmlzU2VsZWN0ZWRUYWJsZSA9IHRoaXMuc2VsZWN0ZWRSb3dzSW5kZXgubGVuZ3RoID09PSBwb3MuZ2V0SGVpZ2h0KCkgJiYgdGhpcy5zZWxlY3RlZENvbHVtbnNJbmRleC5sZW5ndGggPT09IHBvcy5nZXRXaWR0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGFuZ2Vyb3VzT3JTZWxlY3RlZENlbGxzQ2hhbmdlKCkge1xuICAgICAgICByZXR1cm4gbWVyZ2UodGhpcy5kYW5nZXJvdXNDZWxscyQuYXNPYnNlcnZhYmxlKCkucGlwZShza2lwKDEpKSwgdGhpcy5zZWxlY3RlZENlbGxzJC5hc09ic2VydmFibGUoKS5waXBlKHNraXAoMSkpKTtcbiAgICB9XG5cbiAgICBzZXREYW5nZXJvdXNSb3dzKCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxQb3NpdGlvbnMgPSB0aGlzLmdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpO1xuICAgICAgICBjb25zdCBjZWxscyA9IHNlbGVjdGVkQ2VsbFBvc2l0aW9ucztcbiAgICAgICAgY29uc3Qgcm93cyA9IHVuaXEobWFwKGNlbGxzLCAncm93JykpLnZhbHVlT2YoKSBhcyBudW1iZXJbXTtcbiAgICAgICAgY29uc3QgcG9zID0gY3JlYXRlVGFibGVQb3NpdGlvbih0aGlzLmVkaXRvcik7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzUm93c0luZGV4ID0gcm93cztcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGFibGUgPSByb3dzLmxlbmd0aCA9PT0gcG9zLmdldEhlaWdodCgpO1xuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFuZ2Vyb3VzQ29sdW1uc0luZGV4ID0gWy4uLkFycmF5KHBvcy5nZXRXaWR0aCgpKV0ubWFwKCh2LCBpKSA9PiBpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgcm93SW5kZXggb2Ygcm93cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3MuZ2V0V2lkdGgoKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICByb3c6IHJvd0luZGV4LFxuICAgICAgICAgICAgICAgICAgICBjb2w6IGlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhbmdlcm91c0NlbGxzJC5uZXh0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgc2V0RGFuZ2Vyb3VzQ29sdW1ucygpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsUG9zaXRpb25zID0gdGhpcy5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoKTtcbiAgICAgICAgY29uc3QgY2VsbHMgPSBzZWxlY3RlZENlbGxQb3NpdGlvbnM7XG4gICAgICAgIGNvbnN0IGNvbHMgPSB1bmlxKG1hcChjZWxscywgJ2NvbCcpKS52YWx1ZU9mKCkgYXMgbnVtYmVyW107XG4gICAgICAgIGNvbnN0IHBvcyA9IGNyZWF0ZVRhYmxlUG9zaXRpb24odGhpcy5lZGl0b3IpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgICB0aGlzLmRhbmdlcm91c0NvbHVtbnNJbmRleCA9IGNvbHM7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZFRhYmxlID0gY29scy5sZW5ndGggPT09IHBvcy5nZXRXaWR0aCgpO1xuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFuZ2Vyb3VzUm93c0luZGV4ID0gWy4uLkFycmF5KHBvcy5nZXRIZWlnaHQoKSldLm1hcCgoXywgaSkgPT4gaSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGNvbEluZGV4IG9mIGNvbHMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9zLmdldEhlaWdodCgpOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHJvdzogaSxcbiAgICAgICAgICAgICAgICAgICAgY29sOiBjb2xJbmRleFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzQ2VsbHMkLm5leHQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBzZXREYW5nZXJvdXNUYWJsZSgpIHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGFibGUgPSB0cnVlO1xuICAgICAgICBjb25zdCBwb3MgPSBjcmVhdGVUYWJsZVBvc2l0aW9uKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgY29uc3QgY2VsbHMgPSBnZXRDZWxsUG9zaXRpb25zRnJvbVJhbmdlKDAsIDAsIHBvcy5nZXRIZWlnaHQoKSwgcG9zLmdldFdpZHRoKCkpO1xuICAgICAgICB0aGlzLmRhbmdlcm91c1Jvd3NJbmRleCA9IFsuLi5BcnJheShwb3MuZ2V0SGVpZ2h0KCkpXS5tYXAoKF8sIGkpID0+IGkpO1xuICAgICAgICB0aGlzLmRhbmdlcm91c0NvbHVtbnNJbmRleCA9IFsuLi5BcnJheShwb3MuZ2V0V2lkdGgoKSldLm1hcCgoXywgaSkgPT4gaSk7XG4gICAgICAgIHRoaXMuZGFuZ2Vyb3VzQ2VsbHMkLm5leHQoY2VsbHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiBmueEpuWNleWFg+agvOW5tuiuvue9ruiBmueEpuebuOWFs+i3r+W+hOWPiuWFg+e0oFxuICAgICAqL1xuICAgIGZvY3VzQ2VsbChwYXRoOiBudW1iZXJbXSkge1xuICAgICAgICBjb25zdCBub2RlID0gTm9kZS5nZXQodGhpcy5lZGl0b3IsIHBhdGgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNlbGxIVE1MRWxlbWVudCA9IEFuZ3VsYXJFZGl0b3IudG9ET01Ob2RlKHRoaXMuZWRpdG9yLCBub2RlKSBhcyBIVE1MVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgdGhpcy5wcmVGb2N1c0NlbGxQYXRoID0gdGhpcy5mb2N1c0NlbGxQYXRoO1xuICAgICAgICB0aGlzLmZvY3VzQ2VsbFBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLmZvY3VzQ2VsbEVsZW1lbnQgPSBjZWxsSFRNTEVsZW1lbnQ7XG4gICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KHRoaXMuZWRpdG9yLCBFZGl0b3Iuc3RhcnQodGhpcy5lZGl0b3IsIHBhdGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDljLrln5/pgInmi6nlvIDlp4tcbiAgICAgKiBAcGFyYW0gZWRpdG9yIOe8lui+keWZqOWvueixoVxuICAgICAqIEBwYXJhbSBjZWxsIOWNleWFg+agvOWFg+e0oFxuICAgICAqL1xuICAgIGFyZWFTZWxlY3Rpb25TdGFydChjZWxsOiBIVE1MVGFibGVDZWxsRWxlbWVudCwgZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUoZWRpdG9yLCBjZWxsKTtcbiAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBub2RlKTtcbiAgICAgICAgdGhpcy5pc1ByZXBhcmVTZWxlY3RpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmxhc3RGb2N1c0NlbGxQYXRoID0gcGF0aDtcbiAgICAgICAgaWYgKCF0aGlzPy5hbmNob3JDZWxsUGF0aCkge1xuICAgICAgICAgICAgdGhpcy5zZXRBbmNob3JDZWxsUGF0aChwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXM/LmZvY3VzQ2VsbFBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDZWxsUGF0aCA9IHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnByZUZvY3VzQ2VsbFBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMucHJlRm9jdXNDZWxsUGF0aCA9IHRoaXMuYW5jaG9yQ2VsbFBhdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ljLrln5/pgInmi6nnmoTljZXlhYPmoLxcbiAgICAgKiBAcGFyYW0gY2VsbEVsZW1lbnQg5Y2V5YWD5qC85YWD57SgXG4gICAgICovXG4gICAgc2V0QXJlYVNlbGVjdGlvbkNlbGxzKGNlbGxFbGVtZW50OiBUYWJsZUNlbGxFbGVtZW50LCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKEFuZ3VsYXJFZGl0b3IuaXNSZWFkb25seSh0aGlzLmVkaXRvcikgfHwgIXRoaXMuZWRpdG9yLnNlbGVjdGlvbiB8fCAhdGhpcy5pc1ByZXBhcmVTZWxlY3RpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDZWxsUGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgodGhpcy5lZGl0b3IsIGNlbGxFbGVtZW50KTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsUG9zaXRpb25zID0gdGhpcy5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0RXF1YWwgPSBQYXRoLmVxdWFscyhjdXJyZW50Q2VsbFBhdGgsIHRoaXMuYW5jaG9yQ2VsbFBhdGgpO1xuXG4gICAgICAgIC8vIOS4jeWPr+S7peWMuuWfn+mAieaLqeWNleS4gOWNleWFg+agvFxuICAgICAgICBpZiAoc2VsZWN0ZWRDZWxsUG9zaXRpb25zLmxlbmd0aCA8PSAxICYmIHNlbGVjdEVxdWFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0NlbGxTZWxlY3RpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmZvY3VzQ2VsbChjdXJyZW50Q2VsbFBhdGgpO1xuICAgICAgICB0aGlzLnNlbGVjdENlbGxzKHRoaXMuZWRpdG9yLCBldmVudD8ubWV0YUtleSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5aSE55CG5Yy65Z+f6YCJ5oup5ZCv55So5pe26YCJ5oup5pW06KGML+aVtOWIl1xuICAgICAqIEBwYXJhbSBjZWxscyDpgInmi6nnmoTljZXlhYPmoLxcbiAgICAgKi9cbiAgICBhcmVhU2VsZWN0Um93QW5kQ29sdW1uKGNlbGxzOiBDZWxsUG9zaXRpb25bXSwgZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvcyA9IGNyZWF0ZVRhYmxlUG9zaXRpb24odGhpcy5lZGl0b3IpO1xuICAgICAgICBjb25zdCBbcm93LCBjb2xdID0gdGhpcy5mb2N1c0NlbGxQYXRoLnNsaWNlKC0yKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0Q2VsbHMgPSBbeyByb3csIGNvbCB9LCAuLi5jZWxsc107XG4gICAgICAgIGNvbnN0IHNvcnRSb3dzID0gc2VsZWN0Q2VsbHMubWFwKGl0ZW0gPT4gaXRlbS5yb3cpLnNvcnQoKG0sIG4pID0+IG0gLSBuKTtcbiAgICAgICAgY29uc3Qgc29ydENvbHMgPSBzZWxlY3RDZWxscy5tYXAoaXRlbSA9PiBpdGVtLmNvbCkuc29ydCgobSwgbikgPT4gbSAtIG4pO1xuICAgICAgICBjb25zdCBzdGFydFJvdyA9IHNvcnRSb3dzWzBdO1xuICAgICAgICBjb25zdCBzdGFydENvbCA9IHNvcnRDb2xzWzBdO1xuICAgICAgICBjb25zdCBlbmRSb3cgPSBzb3J0Q29sc1tzb3J0Q29scy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgZW5kQ29sID0gc29ydFJvd3Nbc29ydFJvd3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IGFuY2hvckNlbGxQYXRoID0gcG9zLnRhYmxlRW50cnlbMV0uY29uY2F0KFtlbmRDb2wsIGVuZFJvd10pO1xuICAgICAgICBjb25zdCBmb2N1c0NlbGxQYXRoID0gcG9zLnRhYmxlRW50cnlbMV0uY29uY2F0KFtzdGFydFJvdywgc3RhcnRDb2xdKTtcblxuICAgICAgICB0aGlzLnNldEFuY2hvckNlbGxQYXRoKGFuY2hvckNlbGxQYXRoKTtcbiAgICAgICAgdGhpcy5mb2N1c0NlbGwoZm9jdXNDZWxsUGF0aCk7XG4gICAgICAgIHRoaXMuc2VsZWN0Q2VsbHModGhpcy5lZGl0b3IsIGV2ZW50Py5tZXRhS2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7mjIflrpogYW5jaG9yQ2VsbFBhdGhcbiAgICAgKiBAcGFyYW0gcGF0aCDot6/lvoRcbiAgICAgKi9cbiAgICBzZXRBbmNob3JDZWxsUGF0aChwYXRoOiBudW1iZXJbXSkge1xuICAgICAgICBpZiAocGF0aCkge1xuICAgICAgICAgICAgdGhpcy5hbmNob3JDZWxsUGF0aCA9IHBhdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RDZWxsSW5EaXJlY3Rpb24oZGlyZWN0aW9uOiBUYWJsZVNlbGVjdENlbGxEaXJlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgW3JvdywgY29sXSA9IHRoaXMuZm9jdXNDZWxsUGF0aC5zbGljZSgtMik7XG4gICAgICAgIGNvbnN0IG5leHRDZWxsID0gZ2V0TmV4dENlbGwodGhpcy5lZGl0b3IsIGRpcmVjdGlvbiwgW3JvdywgY29sXSk7XG4gICAgICAgIGlmIChuZXh0Q2VsbCkge1xuICAgICAgICAgICAgdGhpcy5zZXRBcmVhU2VsZWN0aW9uQ2VsbHMobmV4dENlbGwpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,68 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- import { ElementKinds } from '../../constants/node-types';
3
- export const THE_TABLE_COMPONENT_TOKEN = new InjectionToken('the-Table-token');
4
- export const HEADER_CELL_CLASS = 'the-header-cell';
5
- export const STICKY_CELL_CLASS = 'the-sticky-cell';
6
- export const TOP_CELL_CLASS = 'the-top-cell';
7
- export var TableOperations;
8
- (function (TableOperations) {
9
- TableOperations["headerRow"] = "headerRow";
10
- TableOperations["headerColumn"] = "headerColumn";
11
- TableOperations["numberedColumn"] = "numberedColumn";
12
- })(TableOperations || (TableOperations = {}));
13
- export const BASE_CELL_HEIGHT = 41; // min height
14
- export const BASE_FILL_HEIGHT = 2 * 8 + 1; // padding * 2 + border 1
15
- export const BASE_CELL_INNER_HEIGHT = BASE_CELL_HEIGHT - BASE_FILL_HEIGHT; // 24
16
- export const TABLE_INSERT_MASK = 19;
17
- export const TABLE_BORDER = 1;
18
- export const TABLE_PADDING = 8;
19
- export const TABLE_CONTROL = 11;
20
- export const TABLE_NUMBER_COLUMN = 45;
21
- export const TableWithStickyRowClass = 'the-table-with-sticky-row';
22
- export var FullscreenState;
23
- (function (FullscreenState) {
24
- FullscreenState["on"] = "on";
25
- FullscreenState["off"] = "off";
26
- })(FullscreenState || (FullscreenState = {}));
27
- export class TableOptions {
28
- constructor(options) {
29
- // The type of table blocks
30
- this.typeTable = ElementKinds.table;
31
- // The type of row blocks
32
- this.typeRow = ElementKinds.tableRow;
33
- // The type of cell blocks
34
- this.typeCell = ElementKinds.tableCell;
35
- // The default type for blocks in cells
36
- this.typeContent = ElementKinds.tableContent;
37
- // The type of block inserted when exiting
38
- this.exitBlockType = ElementKinds.paragraph;
39
- this.defaultWidth = 200;
40
- this.minWidthPx = 52;
41
- this.maxWidthPx = 1000;
42
- this.minHeightPx = 41;
43
- this.maxHeightPx = 1000;
44
- if (!options) {
45
- return;
46
- }
47
- const { typeTable, typeRow, typeCell, typeContent } = options;
48
- this.typeTable = typeTable;
49
- this.typeRow = typeRow;
50
- this.typeCell = typeCell;
51
- this.typeContent = typeContent;
52
- }
53
- }
54
- export var TableInsertType;
55
- (function (TableInsertType) {
56
- TableInsertType["insertRowsUp"] = "insert-rows-up";
57
- TableInsertType["insertRowsDown"] = "insert-rows-down";
58
- TableInsertType["insertColumnsLeft"] = "insert-columns-left";
59
- TableInsertType["insertColumnsRight"] = "insert-columns-right";
60
- })(TableInsertType || (TableInsertType = {}));
61
- export var TableSelectCellDirection;
62
- (function (TableSelectCellDirection) {
63
- TableSelectCellDirection[TableSelectCellDirection["up"] = 0] = "up";
64
- TableSelectCellDirection[TableSelectCellDirection["right"] = 1] = "right";
65
- TableSelectCellDirection[TableSelectCellDirection["down"] = 2] = "down";
66
- TableSelectCellDirection[TableSelectCellDirection["left"] = 3] = "left";
67
- })(TableSelectCellDirection || (TableSelectCellDirection = {}));
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS90YWJsZS50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUsxRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLGNBQWMsQ0FBMEIsaUJBQWlCLENBQUMsQ0FBQztBQUV4RyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBRTdDLE1BQU0sQ0FBTixJQUFZLGVBTVg7QUFORCxXQUFZLGVBQWU7SUFDdkIsMENBQXVCLENBQUE7SUFFdkIsZ0RBQTZCLENBQUE7SUFFN0Isb0RBQWlDLENBQUE7QUFDckMsQ0FBQyxFQU5XLGVBQWUsS0FBZixlQUFlLFFBTTFCO0FBUUQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLENBQUMsYUFBYTtBQUNqRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLHlCQUF5QjtBQUNwRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUs7QUFDaEYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDOUIsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRywyQkFBMkIsQ0FBQztBQTRCbkUsTUFBTSxDQUFOLElBQVksZUFHWDtBQUhELFdBQVksZUFBZTtJQUN2Qiw0QkFBUyxDQUFBO0lBQ1QsOEJBQVcsQ0FBQTtBQUNmLENBQUMsRUFIVyxlQUFlLEtBQWYsZUFBZSxRQUcxQjtBQXFDRCxNQUFNLE9BQU8sWUFBWTtJQXNCckIsWUFBWSxPQUE0QjtRQXJCeEMsMkJBQTJCO1FBQzNCLGNBQVMsR0FBdUIsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUNuRCx5QkFBeUI7UUFDekIsWUFBTyxHQUEwQixZQUFZLENBQUMsUUFBUSxDQUFDO1FBQ3ZELDBCQUEwQjtRQUMxQixhQUFRLEdBQTJCLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDMUQsdUNBQXVDO1FBQ3ZDLGdCQUFXLEdBQThCLFlBQVksQ0FBQyxZQUFZLENBQUM7UUFDbkUsMENBQTBDO1FBQzFDLGtCQUFhLEdBQTJCLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFFL0QsaUJBQVksR0FBRyxHQUFHLENBQUM7UUFFbkIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUVoQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRWxCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBRWpCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBR2YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ1gsT0FBTztRQUNYLENBQUM7UUFDRCxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzlELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ25DLENBQUM7Q0FDSjtBQUVELE1BQU0sQ0FBTixJQUFZLGVBS1g7QUFMRCxXQUFZLGVBQWU7SUFDdkIsa0RBQStCLENBQUE7SUFDL0Isc0RBQW1DLENBQUE7SUFDbkMsNERBQXlDLENBQUE7SUFDekMsOERBQTJDLENBQUE7QUFDL0MsQ0FBQyxFQUxXLGVBQWUsS0FBZixlQUFlLFFBSzFCO0FBRUQsTUFBTSxDQUFOLElBQVksd0JBS1g7QUFMRCxXQUFZLHdCQUF3QjtJQUNoQyxtRUFBRSxDQUFBO0lBQ0YseUVBQUssQ0FBQTtJQUNMLHVFQUFJLENBQUE7SUFDSix1RUFBSSxDQUFBO0FBQ1IsQ0FBQyxFQUxXLHdCQUF3QixLQUF4Qix3QkFBd0IsUUFLbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRWRpdG9yLCBFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0IHsgRWxlbWVudEtpbmRzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL25vZGUtdHlwZXMnO1xuaW1wb3J0IHsgVGFibGVDZWxsRWxlbWVudCwgVGFibGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vY3VzdG9tLXR5cGVzJztcbmltcG9ydCB7IFRoZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy92aWV3LWJhc2UnO1xuaW1wb3J0IHsgVGhlVGFibGUgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUuY29tcG9uZW50JztcblxuZXhwb3J0IGNvbnN0IFRIRV9UQUJMRV9DT01QT05FTlRfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29tcG9uZW50VHlwZTxUaGVUYWJsZT4+KCd0aGUtVGFibGUtdG9rZW4nKTtcblxuZXhwb3J0IGNvbnN0IEhFQURFUl9DRUxMX0NMQVNTID0gJ3RoZS1oZWFkZXItY2VsbCc7XG5cbmV4cG9ydCBjb25zdCBTVElDS1lfQ0VMTF9DTEFTUyA9ICd0aGUtc3RpY2t5LWNlbGwnO1xuXG5leHBvcnQgY29uc3QgVE9QX0NFTExfQ0xBU1MgPSAndGhlLXRvcC1jZWxsJztcblxuZXhwb3J0IGVudW0gVGFibGVPcGVyYXRpb25zIHtcbiAgICBoZWFkZXJSb3cgPSAnaGVhZGVyUm93JyxcblxuICAgIGhlYWRlckNvbHVtbiA9ICdoZWFkZXJDb2x1bW4nLFxuXG4gICAgbnVtYmVyZWRDb2x1bW4gPSAnbnVtYmVyZWRDb2x1bW4nXG59XG5leHBvcnQgaW50ZXJmYWNlIFRoZVRhYmxlQmFzZSBleHRlbmRzIFRoZUJhc2VFbGVtZW50IHtcbiAgICBpbml0aWFsaXplQ29sdW1uczogKCkgPT4gdm9pZDtcbiAgICB0cmFuc2Zvcm1Db2x1bW5zV2lkdGg6ICgpID0+IHZvaWQ7XG4gICAgaW5pdGlhbGl6ZVJvd3M6ICgpID0+IHZvaWQ7XG4gICAgdHJhbnNmb3JtUm93SGVpZ2h0OiAocm93SW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IEJBU0VfQ0VMTF9IRUlHSFQgPSA0MTsgLy8gbWluIGhlaWdodFxuZXhwb3J0IGNvbnN0IEJBU0VfRklMTF9IRUlHSFQgPSAyICogOCArIDE7IC8vIHBhZGRpbmcgKiAyICsgYm9yZGVyIDFcbmV4cG9ydCBjb25zdCBCQVNFX0NFTExfSU5ORVJfSEVJR0hUID0gQkFTRV9DRUxMX0hFSUdIVCAtIEJBU0VfRklMTF9IRUlHSFQ7IC8vIDI0XG5leHBvcnQgY29uc3QgVEFCTEVfSU5TRVJUX01BU0sgPSAxOTtcbmV4cG9ydCBjb25zdCBUQUJMRV9CT1JERVIgPSAxO1xuZXhwb3J0IGNvbnN0IFRBQkxFX1BBRERJTkcgPSA4O1xuZXhwb3J0IGNvbnN0IFRBQkxFX0NPTlRST0wgPSAxMTtcbmV4cG9ydCBjb25zdCBUQUJMRV9OVU1CRVJfQ09MVU1OID0gNDU7XG5cbmV4cG9ydCBjb25zdCBUYWJsZVdpdGhTdGlja3lSb3dDbGFzcyA9ICd0aGUtdGFibGUtd2l0aC1zdGlja3ktcm93JztcblxuZXhwb3J0IGludGVyZmFjZSBUaGVUYWJsZUNvbHVtbiB7XG4gICAgd2lkdGg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaGVUYWJsZU9wdGlvbnMge1xuICAgIGhlYWRlclJvdz86IGJvb2xlYW47XG4gICAgaGVhZGVyQ29sdW1uPzogYm9vbGVhbjtcbiAgICBudW1iZXJlZENvbHVtbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUVudGl0eSB7XG4gICAgaWNvbjogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBrZXk6IHN0cmluZztcbiAgICBkaXZpZGVyPzogYm9vbGVhbjtcbiAgICBleHRlbmRJY29uPzogc3RyaW5nO1xuICAgIHZpc2liaWxpdHk/OiBib29sZWFuO1xuICAgIGlzSW5wdXROdW1iZXI/OiBib29sZWFuO1xuICAgIG5hbWVTdWZmaXg/OiBzdHJpbmc7XG4gICAgY291bnQ/OiBudW1iZXI7XG4gICAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIGFjdGlvbkhhbmRsZTogKGVudGl0eTogTWVudUVudGl0eSkgPT4gdm9pZDtcbiAgICBhY3RpdmVIYW5kbGU/OiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGVudGl0eT86IE1lbnVFbnRpdHkpID0+IHZvaWQ7XG4gICAgZGVhY3RpdmF0ZUhhbmRsZT86IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGVudW0gRnVsbHNjcmVlblN0YXRlIHtcbiAgICBvbiA9ICdvbicsXG4gICAgb2ZmID0gJ29mZidcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaGVQbHVnaW5UYWJsZU9wdGlvbiB7XG4gICAgZnJlZXplQ29sdW1uSGVhZGVyPzogYm9vbGVhbjsgLy8g5qCH6aKY5YiX5ZCO5rua5Yqo5piv5ZCm5pSv5oyB5Ya757uTXG4gICAgZnJlZXplUm93SGVhZGVyPzogYm9vbGVhbjsgLy8g5qCH6aKY6KGM5ZCO5rua5Yqo5piv5ZCm5pSv5oyB5Ya757uTXG4gICAgLy8g5ZCO5pyf5o+S5Lu255qE5bel5YW35qCP5pSv5oyB5aSW6YOo6Ieq5a6a5LmJ5pe25Y+v5Lul5Yig6ZmkXG4gICAgc2hvd0Z1bGxzY3JlZW4/OiBib29sZWFuO1xuICAgIHNldEZ1bGxzY3JlZW4/OiAoZWRpdG9yOiBFZGl0b3IsIGV2ZW50OiBNb3VzZUV2ZW50LCBlbGVtZW50OiBFbGVtZW50KSA9PiB2b2lkO1xuICAgIGZ1bGxzY3JlZW5BY3Rpb24/OiAoZWRpdG9yOiBFZGl0b3IpID0+IE9ic2VydmFibGU8eyBlbGVtZW50OiBFbGVtZW50IHwgdW5kZWZpbmVkOyBzdGF0ZTogRnVsbHNjcmVlblN0YXRlIH0+O1xuICAgIHJvd1NlbGVjdD86IChlZGl0b3I6IEVkaXRvciwgZGF0YTogeyBpbmRleDogbnVtYmVyOyBjZWxsczogVGFibGVDZWxsRWxlbWVudFtdIH0pID0+IHZvaWQ7XG4gICAgY29sU2VsZWN0PzogKGVkaXRvcjogRWRpdG9yLCBkYXRhOiB7IGluZGV4OiBudW1iZXI7IGNlbGxzOiBUYWJsZUNlbGxFbGVtZW50W10gfSkgPT4gdm9pZDtcbiAgICB0YWJsZVNlbGVjdD86IChlZGl0b3I6IEVkaXRvciwgZGF0YTogeyB0YWJsZTogVGFibGVFbGVtZW50IH0pID0+IHZvaWQ7XG4gICAgZGVzZWxlY3Q/OiAoZWRpdG9yOiBFZGl0b3IpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFBvc2l0aW9uIHtcbiAgICByb3c6IG51bWJlcjtcbiAgICBjb2w6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZURyb3Bkb3duT3B0aW9uIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgaXNBY3RpdmU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlT3B0aW9uc0Zvcm1hdCB7XG4gICAgdHlwZVRhYmxlPzogRWxlbWVudEtpbmRzLnRhYmxlO1xuICAgIHR5cGVSb3c/OiBFbGVtZW50S2luZHMudGFibGVSb3c7XG4gICAgdHlwZUNlbGw/OiBFbGVtZW50S2luZHMudGFibGVDZWxsO1xuICAgIHR5cGVDb250ZW50PzogRWxlbWVudEtpbmRzLnRhYmxlQ29udGVudDtcbiAgICBleGl0QmxvY2tUeXBlPzogc3RyaW5nO1xuICAgIGRlZmF1bHRXaWR0aD86IG51bWJlcjtcbiAgICBtaW5XaWR0aD86IG51bWJlcjtcbiAgICBtYXhXaWR0aD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlT3B0aW9ucyB7XG4gICAgLy8gVGhlIHR5cGUgb2YgdGFibGUgYmxvY2tzXG4gICAgdHlwZVRhYmxlOiBFbGVtZW50S2luZHMudGFibGUgPSBFbGVtZW50S2luZHMudGFibGU7XG4gICAgLy8gVGhlIHR5cGUgb2Ygcm93IGJsb2Nrc1xuICAgIHR5cGVSb3c6IEVsZW1lbnRLaW5kcy50YWJsZVJvdyA9IEVsZW1lbnRLaW5kcy50YWJsZVJvdztcbiAgICAvLyBUaGUgdHlwZSBvZiBjZWxsIGJsb2Nrc1xuICAgIHR5cGVDZWxsOiBFbGVtZW50S2luZHMudGFibGVDZWxsID0gRWxlbWVudEtpbmRzLnRhYmxlQ2VsbDtcbiAgICAvLyBUaGUgZGVmYXVsdCB0eXBlIGZvciBibG9ja3MgaW4gY2VsbHNcbiAgICB0eXBlQ29udGVudDogRWxlbWVudEtpbmRzLnRhYmxlQ29udGVudCA9IEVsZW1lbnRLaW5kcy50YWJsZUNvbnRlbnQ7XG4gICAgLy8gVGhlIHR5cGUgb2YgYmxvY2sgaW5zZXJ0ZWQgd2hlbiBleGl0aW5nXG4gICAgZXhpdEJsb2NrVHlwZTogRWxlbWVudEtpbmRzLnBhcmFncmFwaCA9IEVsZW1lbnRLaW5kcy5wYXJhZ3JhcGg7XG5cbiAgICBkZWZhdWx0V2lkdGggPSAyMDA7XG5cbiAgICBtaW5XaWR0aFB4ID0gNTI7XG5cbiAgICBtYXhXaWR0aFB4ID0gMTAwMDtcblxuICAgIG1pbkhlaWdodFB4ID0gNDE7XG5cbiAgICBtYXhIZWlnaHRQeCA9IDEwMDA7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zPzogVGFibGVPcHRpb25zRm9ybWF0KSB7XG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdHlwZVRhYmxlLCB0eXBlUm93LCB0eXBlQ2VsbCwgdHlwZUNvbnRlbnQgfSA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMudHlwZVRhYmxlID0gdHlwZVRhYmxlO1xuICAgICAgICB0aGlzLnR5cGVSb3cgPSB0eXBlUm93O1xuICAgICAgICB0aGlzLnR5cGVDZWxsID0gdHlwZUNlbGw7XG4gICAgICAgIHRoaXMudHlwZUNvbnRlbnQgPSB0eXBlQ29udGVudDtcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIFRhYmxlSW5zZXJ0VHlwZSB7XG4gICAgaW5zZXJ0Um93c1VwID0gJ2luc2VydC1yb3dzLXVwJyxcbiAgICBpbnNlcnRSb3dzRG93biA9ICdpbnNlcnQtcm93cy1kb3duJyxcbiAgICBpbnNlcnRDb2x1bW5zTGVmdCA9ICdpbnNlcnQtY29sdW1ucy1sZWZ0JyxcbiAgICBpbnNlcnRDb2x1bW5zUmlnaHQgPSAnaW5zZXJ0LWNvbHVtbnMtcmlnaHQnXG59XG5cbmV4cG9ydCBlbnVtIFRhYmxlU2VsZWN0Q2VsbERpcmVjdGlvbiB7XG4gICAgdXAsXG4gICAgcmlnaHQsXG4gICAgZG93bixcbiAgICBsZWZ0XG59XG4iXX0=