@acorex/components 6.5.14 → 6.5.15

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 (631) hide show
  1. package/acorex-components.d.ts +5 -0
  2. package/esm2020/acorex-components.mjs +5 -0
  3. package/esm2020/lib/accordion/accordion.component.mjs +44 -0
  4. package/esm2020/lib/accordion/accordion.module.mjs +20 -0
  5. package/esm2020/lib/base/base-page.class.mjs +94 -0
  6. package/esm2020/lib/base/components.class.mjs +17 -0
  7. package/esm2020/lib/base/element.class.mjs +294 -0
  8. package/esm2020/lib/base/events.class.mjs +11 -0
  9. package/esm2020/lib/button/button.component.mjs +71 -0
  10. package/esm2020/lib/button/button.module.mjs +21 -0
  11. package/esm2020/lib/calendar/calendar-box/calendar-box.component.mjs +413 -0
  12. package/esm2020/lib/calendar/calendar-box/calendar-box.module.mjs +22 -0
  13. package/esm2020/lib/calendar/scheduler/scheduler-views.property.mjs +54 -0
  14. package/esm2020/lib/calendar/scheduler/scheduler.class.mjs +18 -0
  15. package/esm2020/lib/calendar/scheduler/scheduler.component.mjs +213 -0
  16. package/esm2020/lib/calendar/scheduler/scheduler.module.mjs +68 -0
  17. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +132 -0
  18. package/esm2020/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +37 -0
  19. package/esm2020/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +47 -0
  20. package/esm2020/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +95 -0
  21. package/esm2020/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +204 -0
  22. package/esm2020/lib/calendar/scheduler/views/scheduler-view.component.mjs +99 -0
  23. package/esm2020/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +77 -0
  24. package/esm2020/lib/checkbox/checkbox.component.mjs +98 -0
  25. package/esm2020/lib/checkbox/checkbox.module.mjs +20 -0
  26. package/esm2020/lib/color-picker/color-box/color-box.component.mjs +422 -0
  27. package/esm2020/lib/color-picker/color-picker.component.mjs +82 -0
  28. package/esm2020/lib/color-picker/color-picker.module.mjs +24 -0
  29. package/esm2020/lib/context-menu/context-menu.component.mjs +65 -0
  30. package/esm2020/lib/context-menu/context-menu.directive.mjs +135 -0
  31. package/esm2020/lib/context-menu/context-menu.module.mjs +20 -0
  32. package/esm2020/lib/data-filter/columns/filter-column-date.component.mjs +138 -0
  33. package/esm2020/lib/data-filter/columns/filter-column-number.component.mjs +117 -0
  34. package/esm2020/lib/data-filter/columns/filter-column-selection.component.mjs +74 -0
  35. package/esm2020/lib/data-filter/columns/filter-column-string.component.mjs +117 -0
  36. package/esm2020/lib/data-filter/filter-panel/filter-panel.component.mjs +258 -0
  37. package/esm2020/lib/data-filter/filter.class.mjs +44 -0
  38. package/esm2020/lib/data-filter/filter.module.mjs +90 -0
  39. package/esm2020/lib/data-filter/toolbar/filter-toolbar.component.mjs +166 -0
  40. package/esm2020/lib/data-list/core/data-list.component.mjs +40 -0
  41. package/esm2020/lib/data-list/list/list.component.mjs +124 -0
  42. package/esm2020/lib/data-list/list/list.module.mjs +22 -0
  43. package/esm2020/lib/data-list/list/toolbar-list-view.component.mjs +85 -0
  44. package/esm2020/lib/data-source/datasource.component.mjs +47 -0
  45. package/esm2020/lib/data-source/datasource.module.mjs +18 -0
  46. package/esm2020/lib/data-source/read-param.mjs +5 -0
  47. package/esm2020/lib/date-picker/date-picker.component.mjs +702 -0
  48. package/esm2020/lib/date-picker/date-picker.module.mjs +25 -0
  49. package/esm2020/lib/dialog/dialog.component.mjs +24 -0
  50. package/esm2020/lib/dialog/dialog.module.mjs +21 -0
  51. package/esm2020/lib/dialog/dialog.service.mjs +150 -0
  52. package/esm2020/lib/drawer/content.component.mjs +18 -0
  53. package/esm2020/lib/drawer/drawer-container.component.mjs +36 -0
  54. package/esm2020/lib/drawer/drawer.component.mjs +142 -0
  55. package/esm2020/lib/drawer/drawer.module.mjs +23 -0
  56. package/esm2020/lib/dropdown/dropdown.component.mjs +176 -0
  57. package/esm2020/lib/dropdown/dropdown.module.mjs +26 -0
  58. package/esm2020/lib/fieldset/fieldset.component.mjs +59 -0
  59. package/esm2020/lib/fieldset/fieldset.module.mjs +19 -0
  60. package/esm2020/lib/form-group/form-group.component.mjs +34 -0
  61. package/esm2020/lib/form-group/form-group.module.mjs +21 -0
  62. package/esm2020/lib/label/label.component.mjs +19 -0
  63. package/esm2020/lib/label/label.module.mjs +21 -0
  64. package/esm2020/lib/loading/loading-indicator.component.mjs +17 -0
  65. package/esm2020/lib/loading/loading-panel.component.mjs +44 -0
  66. package/esm2020/lib/loading/loading.module.mjs +21 -0
  67. package/esm2020/lib/loading/loading.service.mjs +45 -0
  68. package/esm2020/lib/menu/menu-item.component.mjs +47 -0
  69. package/esm2020/lib/menu/menu.component.mjs +86 -0
  70. package/esm2020/lib/menu/menu.module.mjs +22 -0
  71. package/esm2020/lib/menu/menu2.component.mjs +96 -0
  72. package/esm2020/lib/number-box/number-box.component.mjs +622 -0
  73. package/esm2020/lib/number-box/number-box.module.mjs +21 -0
  74. package/esm2020/lib/page/content.component.mjs +32 -0
  75. package/esm2020/lib/page/footer.component.mjs +19 -0
  76. package/esm2020/lib/page/page.component.mjs +53 -0
  77. package/esm2020/lib/page/page.module.mjs +22 -0
  78. package/esm2020/lib/panel-box/panel-box.component.mjs +88 -0
  79. package/esm2020/lib/panel-box/panel-box.module.mjs +19 -0
  80. package/esm2020/lib/password-box/password-box.component.mjs +31 -0
  81. package/esm2020/lib/password-box/password-box.module.mjs +23 -0
  82. package/esm2020/lib/popover/custom-cdk-overlay.service.mjs +48 -0
  83. package/esm2020/lib/popover/overlay.service.mjs +90 -0
  84. package/esm2020/lib/popover/popover.component.mjs +127 -0
  85. package/esm2020/lib/popover/popover.module.mjs +19 -0
  86. package/esm2020/lib/popup/popup.component.mjs +146 -0
  87. package/esm2020/lib/popup/popup.module.mjs +25 -0
  88. package/esm2020/lib/popup/popup.service.mjs +93 -0
  89. package/esm2020/lib/progress-bar/progress-bar.component.mjs +19 -0
  90. package/esm2020/lib/progress-bar/progress-bar.module.mjs +19 -0
  91. package/esm2020/lib/property-editor/editors/check-editor/check-editor.mjs +61 -0
  92. package/esm2020/lib/property-editor/editors/check-editor/check.module.mjs +22 -0
  93. package/esm2020/lib/property-editor/editors/color-editor/color.editor.mjs +38 -0
  94. package/esm2020/lib/property-editor/editors/color-editor/color.module.mjs +24 -0
  95. package/esm2020/lib/property-editor/editors/column-editor/column.editor.mjs +115 -0
  96. package/esm2020/lib/property-editor/editors/column-editor/column.module.mjs +32 -0
  97. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +211 -0
  98. package/esm2020/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +78 -0
  99. package/esm2020/lib/property-editor/editors/date-editor/date.editor.mjs +51 -0
  100. package/esm2020/lib/property-editor/editors/date-editor/date.module.mjs +24 -0
  101. package/esm2020/lib/property-editor/editors/number-editor/number.editor.mjs +63 -0
  102. package/esm2020/lib/property-editor/editors/number-editor/number.module.mjs +24 -0
  103. package/esm2020/lib/property-editor/editors/range-editor/range.editor.mjs +140 -0
  104. package/esm2020/lib/property-editor/editors/range-editor/range.module.mjs +61 -0
  105. package/esm2020/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +72 -0
  106. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +71 -0
  107. package/esm2020/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +25 -0
  108. package/esm2020/lib/property-editor/editors/selection-editor/selection-editor.mjs +69 -0
  109. package/esm2020/lib/property-editor/editors/selection-editor/selection.module.mjs +22 -0
  110. package/esm2020/lib/property-editor/editors/switch-editor/number.editor.mjs +29 -0
  111. package/esm2020/lib/property-editor/editors/switch-editor/number.module.mjs +25 -0
  112. package/esm2020/lib/property-editor/editors/text-editor/text.editor.mjs +32 -0
  113. package/esm2020/lib/property-editor/editors/text-editor/text.module.mjs +24 -0
  114. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +32 -0
  115. package/esm2020/lib/property-editor/editors/textarea-editor/textarea.module.mjs +24 -0
  116. package/esm2020/lib/property-editor/editors/time-editor/time.editor.mjs +43 -0
  117. package/esm2020/lib/property-editor/editors/time-editor/time.module.mjs +24 -0
  118. package/esm2020/lib/property-editor/property-editor-renderer.directive.mjs +154 -0
  119. package/esm2020/lib/property-editor/property-editor.class.mjs +101 -0
  120. package/esm2020/lib/property-editor/property-editor.module.mjs +196 -0
  121. package/esm2020/lib/query-builder/query-builder-group.component.mjs +124 -0
  122. package/esm2020/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +171 -0
  123. package/esm2020/lib/query-builder/query-builder-rule.component.mjs +395 -0
  124. package/esm2020/lib/query-builder/query-builder.class.mjs +20 -0
  125. package/esm2020/lib/query-builder/query-builder.component.mjs +82 -0
  126. package/esm2020/lib/query-builder/query-builder.module.mjs +62 -0
  127. package/esm2020/lib/query-builder/query-builder.service.mjs +197 -0
  128. package/esm2020/lib/search-bar/search-bar.component.mjs +283 -0
  129. package/esm2020/lib/search-bar/search-bar.module.mjs +63 -0
  130. package/esm2020/lib/searchbox/searchbox.component.mjs +79 -0
  131. package/esm2020/lib/searchbox/searchbox.module.mjs +24 -0
  132. package/esm2020/lib/selectbox/selectbox.component.mjs +961 -0
  133. package/esm2020/lib/selectbox/selectbox.module.mjs +44 -0
  134. package/esm2020/lib/selectbox/selectbox2.component.mjs +574 -0
  135. package/esm2020/lib/selection-list/selection-list.component.mjs +108 -0
  136. package/esm2020/lib/selection-list/selection-list.module.mjs +21 -0
  137. package/esm2020/lib/switch/switch.component.mjs +51 -0
  138. package/esm2020/lib/switch/switch.module.mjs +20 -0
  139. package/esm2020/lib/tab-page/tab-page-Renderer.component.mjs +71 -0
  140. package/esm2020/lib/tab-page/tab-page-host.component.mjs +116 -0
  141. package/esm2020/lib/tab-page/tab-page.module.mjs +21 -0
  142. package/esm2020/lib/tab-page/tab-page.service.mjs +156 -0
  143. package/esm2020/lib/tab-strip/tab-strip.component.mjs +36 -0
  144. package/esm2020/lib/tab-strip/tab-strip.module.mjs +19 -0
  145. package/esm2020/lib/tab-view/dynamic-tabs.directive.mjs +24 -0
  146. package/esm2020/lib/tab-view/tab-view.component.mjs +105 -0
  147. package/esm2020/lib/tab-view/tab-view.module.mjs +21 -0
  148. package/esm2020/lib/tab-view/tab.component.mjs +30 -0
  149. package/esm2020/lib/textarea/textarea.component.mjs +26 -0
  150. package/esm2020/lib/textarea/textarea.module.mjs +21 -0
  151. package/esm2020/lib/textbox/textbox.component.mjs +39 -0
  152. package/esm2020/lib/textbox/textbox.module.mjs +24 -0
  153. package/esm2020/lib/time-picker/time-picker.component.mjs +943 -0
  154. package/esm2020/lib/time-picker/time-picker.module.mjs +22 -0
  155. package/esm2020/lib/toast/toast-message/toast-message.component.mjs +74 -0
  156. package/esm2020/lib/toast/toast-wrapper/toast-wrapper.component.mjs +13 -0
  157. package/esm2020/lib/toast/toast.module.mjs +21 -0
  158. package/esm2020/lib/toast/toast.service.mjs +44 -0
  159. package/esm2020/lib/toolbar/group-button/toolbar-group-button.component.mjs +78 -0
  160. package/esm2020/lib/toolbar/menu/toolbar-menu.component.mjs +57 -0
  161. package/esm2020/lib/toolbar/search/toolbar-search.component.mjs +54 -0
  162. package/esm2020/lib/toolbar/title/toolbar-title.component.mjs +47 -0
  163. package/esm2020/lib/toolbar/toolbar-item.mjs +6 -0
  164. package/esm2020/lib/toolbar/toolbar.component.mjs +13 -0
  165. package/esm2020/lib/toolbar/toolbar.module.mjs +40 -0
  166. package/esm2020/lib/tooltip/tooltip.directive.mjs +100 -0
  167. package/esm2020/lib/tooltip/tooltip.module.mjs +19 -0
  168. package/esm2020/lib/tree-side-menu/tree-side-menu.component.mjs +646 -0
  169. package/esm2020/lib/tree-side-menu/tree-side-menu.module.mjs +35 -0
  170. package/esm2020/lib/tree-view/tree-view.component.mjs +776 -0
  171. package/esm2020/lib/tree-view/tree-view.module.mjs +22 -0
  172. package/esm2020/lib/upload-file/upload-file.component.mjs +208 -0
  173. package/esm2020/lib/upload-file/upload-file.events.mjs +2 -0
  174. package/esm2020/lib/upload-file/upload-file.module.mjs +24 -0
  175. package/esm2020/lib/validation/validation-form.component.mjs +65 -0
  176. package/esm2020/lib/validation/validation-rule.widget.mjs +111 -0
  177. package/esm2020/lib/validation/validation.class.mjs +2 -0
  178. package/esm2020/lib/validation/validation.component.mjs +89 -0
  179. package/esm2020/lib/validation/validation.module.mjs +34 -0
  180. package/esm2020/public-api.mjs +158 -0
  181. package/fesm2015/acorex-components.mjs +15988 -0
  182. package/fesm2015/acorex-components.mjs.map +1 -0
  183. package/fesm2020/acorex-components.mjs +15923 -0
  184. package/fesm2020/acorex-components.mjs.map +1 -0
  185. package/lib/accordion/accordion.component.d.ts +13 -0
  186. package/lib/accordion/accordion.module.d.ts +9 -0
  187. package/lib/base/base-page.class.d.ts +46 -0
  188. package/lib/base/components.class.d.ts +10 -0
  189. package/lib/base/element.class.d.ts +106 -0
  190. package/lib/base/events.class.d.ts +18 -0
  191. package/lib/button/button.component.d.ts +21 -0
  192. package/lib/button/button.module.d.ts +8 -0
  193. package/lib/calendar/calendar-box/calendar-box.component.d.ts +81 -0
  194. package/lib/calendar/calendar-box/calendar-box.module.d.ts +11 -0
  195. package/lib/calendar/scheduler/scheduler-views.property.d.ts +19 -0
  196. package/{src/lib/calendar/scheduler/scheduler.class.ts → lib/calendar/scheduler/scheduler.class.d.ts} +6 -20
  197. package/lib/calendar/scheduler/scheduler.component.d.ts +39 -0
  198. package/lib/calendar/scheduler/scheduler.module.d.ts +21 -0
  199. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.d.ts +25 -0
  200. package/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.d.ts +14 -0
  201. package/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.d.ts +16 -0
  202. package/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.d.ts +26 -0
  203. package/lib/calendar/scheduler/views/month/scheduler-month-view.component.d.ts +37 -0
  204. package/lib/calendar/scheduler/views/scheduler-view.component.d.ts +28 -0
  205. package/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.d.ts +24 -0
  206. package/lib/checkbox/checkbox.component.d.ts +30 -0
  207. package/lib/checkbox/checkbox.module.d.ts +9 -0
  208. package/lib/color-picker/color-box/color-box.component.d.ts +25 -0
  209. package/lib/color-picker/color-picker.component.d.ts +30 -0
  210. package/lib/color-picker/color-picker.module.d.ts +13 -0
  211. package/lib/context-menu/context-menu.component.d.ts +22 -0
  212. package/lib/context-menu/context-menu.directive.d.ts +38 -0
  213. package/lib/context-menu/context-menu.module.d.ts +9 -0
  214. package/lib/data-filter/columns/filter-column-date.component.d.ts +22 -0
  215. package/lib/data-filter/columns/filter-column-number.component.d.ts +15 -0
  216. package/lib/data-filter/columns/filter-column-selection.component.d.ts +18 -0
  217. package/lib/data-filter/columns/filter-column-string.component.d.ts +15 -0
  218. package/lib/data-filter/filter-panel/filter-panel.component.d.ts +45 -0
  219. package/lib/data-filter/filter.class.d.ts +40 -0
  220. package/lib/data-filter/filter.module.d.ts +24 -0
  221. package/lib/data-filter/toolbar/filter-toolbar.component.d.ts +25 -0
  222. package/lib/data-list/core/data-list.component.d.ts +15 -0
  223. package/lib/data-list/list/list.component.d.ts +40 -0
  224. package/lib/data-list/list/list.module.d.ts +11 -0
  225. package/lib/data-list/list/toolbar-list-view.component.d.ts +17 -0
  226. package/lib/data-source/datasource.component.d.ts +16 -0
  227. package/lib/data-source/datasource.module.d.ts +7 -0
  228. package/{src/lib/data-source/read-param.ts → lib/data-source/read-param.d.ts} +3 -13
  229. package/lib/date-picker/date-picker.component.d.ts +81 -0
  230. package/lib/date-picker/date-picker.module.d.ts +14 -0
  231. package/lib/dialog/dialog.component.d.ts +14 -0
  232. package/lib/dialog/dialog.module.d.ts +10 -0
  233. package/lib/dialog/dialog.service.d.ts +36 -0
  234. package/lib/drawer/content.component.d.ts +7 -0
  235. package/lib/drawer/drawer-container.component.d.ts +10 -0
  236. package/lib/drawer/drawer.component.d.ts +34 -0
  237. package/lib/drawer/drawer.module.d.ts +10 -0
  238. package/lib/dropdown/dropdown.component.d.ts +38 -0
  239. package/lib/dropdown/dropdown.module.d.ts +13 -0
  240. package/lib/fieldset/fieldset.component.d.ts +11 -0
  241. package/lib/fieldset/fieldset.module.d.ts +8 -0
  242. package/lib/form-group/form-group.component.d.ts +14 -0
  243. package/lib/form-group/form-group.module.d.ts +8 -0
  244. package/lib/label/label.component.d.ts +9 -0
  245. package/lib/label/label.module.d.ts +8 -0
  246. package/lib/loading/loading-indicator.component.d.ts +9 -0
  247. package/lib/loading/loading-panel.component.d.ts +13 -0
  248. package/lib/loading/loading.module.d.ts +10 -0
  249. package/lib/loading/loading.service.d.ts +13 -0
  250. package/lib/menu/menu-item.component.d.ts +18 -0
  251. package/lib/menu/menu.component.d.ts +35 -0
  252. package/lib/menu/menu.module.d.ts +11 -0
  253. package/lib/menu/menu2.component.d.ts +21 -0
  254. package/lib/number-box/number-box.component.d.ts +52 -0
  255. package/lib/number-box/number-box.module.d.ts +10 -0
  256. package/lib/page/content.component.d.ts +8 -0
  257. package/lib/page/footer.component.d.ts +5 -0
  258. package/lib/page/page.component.d.ts +16 -0
  259. package/lib/page/page.module.d.ts +11 -0
  260. package/lib/panel-box/panel-box.component.d.ts +19 -0
  261. package/lib/panel-box/panel-box.module.d.ts +8 -0
  262. package/lib/password-box/password-box.component.d.ts +12 -0
  263. package/lib/password-box/password-box.module.d.ts +10 -0
  264. package/lib/popover/custom-cdk-overlay.service.d.ts +19 -0
  265. package/lib/popover/overlay.service.d.ts +31 -0
  266. package/lib/popover/popover.component.d.ts +34 -0
  267. package/lib/popover/popover.module.d.ts +8 -0
  268. package/lib/popup/popup.component.d.ts +39 -0
  269. package/lib/popup/popup.module.d.ts +13 -0
  270. package/lib/popup/popup.service.d.ts +22 -0
  271. package/lib/progress-bar/progress-bar.component.d.ts +7 -0
  272. package/lib/progress-bar/progress-bar.module.d.ts +8 -0
  273. package/lib/property-editor/editors/check-editor/check-editor.d.ts +19 -0
  274. package/lib/property-editor/editors/check-editor/check.module.d.ts +11 -0
  275. package/lib/property-editor/editors/color-editor/color.editor.d.ts +13 -0
  276. package/lib/property-editor/editors/color-editor/color.module.d.ts +12 -0
  277. package/lib/property-editor/editors/column-editor/column.editor.d.ts +34 -0
  278. package/lib/property-editor/editors/column-editor/column.module.d.ts +20 -0
  279. package/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.d.ts +44 -0
  280. package/lib/property-editor/editors/conditional-color-editor/conditional-color.module.d.ts +19 -0
  281. package/lib/property-editor/editors/date-editor/date.editor.d.ts +28 -0
  282. package/lib/property-editor/editors/date-editor/date.module.d.ts +12 -0
  283. package/lib/property-editor/editors/number-editor/number.editor.d.ts +20 -0
  284. package/lib/property-editor/editors/number-editor/number.module.d.ts +12 -0
  285. package/lib/property-editor/editors/range-editor/range.editor.d.ts +29 -0
  286. package/lib/property-editor/editors/range-editor/range.module.d.ts +18 -0
  287. package/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.d.ts +29 -0
  288. package/lib/property-editor/editors/selectbox-editor/selectbox.editor.d.ts +28 -0
  289. package/lib/property-editor/editors/selectbox-editor/selectbox.module.d.ts +14 -0
  290. package/lib/property-editor/editors/selection-editor/selection-editor.d.ts +25 -0
  291. package/lib/property-editor/editors/selection-editor/selection.module.d.ts +11 -0
  292. package/lib/property-editor/editors/switch-editor/number.editor.d.ts +11 -0
  293. package/lib/property-editor/editors/switch-editor/number.module.d.ts +13 -0
  294. package/lib/property-editor/editors/text-editor/text.editor.d.ts +18 -0
  295. package/lib/property-editor/editors/text-editor/text.module.d.ts +12 -0
  296. package/lib/property-editor/editors/textarea-editor/textarea.editor.d.ts +17 -0
  297. package/lib/property-editor/editors/textarea-editor/textarea.module.d.ts +12 -0
  298. package/lib/property-editor/editors/time-editor/time.editor.d.ts +17 -0
  299. package/lib/property-editor/editors/time-editor/time.module.d.ts +12 -0
  300. package/lib/property-editor/property-editor-renderer.directive.d.ts +30 -0
  301. package/lib/property-editor/property-editor.class.d.ts +92 -0
  302. package/lib/property-editor/property-editor.module.d.ts +21 -0
  303. package/lib/query-builder/query-builder-group.component.d.ts +33 -0
  304. package/lib/query-builder/query-builder-popup/query-builder-popup.component.d.ts +35 -0
  305. package/lib/query-builder/query-builder-rule.component.d.ts +45 -0
  306. package/lib/query-builder/query-builder.class.d.ts +45 -0
  307. package/lib/query-builder/query-builder.component.d.ts +27 -0
  308. package/lib/query-builder/query-builder.module.d.ts +23 -0
  309. package/lib/query-builder/query-builder.service.d.ts +18 -0
  310. package/lib/search-bar/search-bar.component.d.ts +61 -0
  311. package/lib/search-bar/search-bar.module.d.ts +18 -0
  312. package/lib/searchbox/searchbox.component.d.ts +22 -0
  313. package/lib/searchbox/searchbox.module.d.ts +13 -0
  314. package/lib/selectbox/selectbox.component.d.ts +118 -0
  315. package/lib/selectbox/selectbox.module.d.ts +15 -0
  316. package/lib/selectbox/selectbox2.component.d.ts +103 -0
  317. package/lib/selection-list/selection-list.component.d.ts +32 -0
  318. package/lib/selection-list/selection-list.module.d.ts +10 -0
  319. package/lib/switch/switch.component.d.ts +20 -0
  320. package/lib/switch/switch.module.d.ts +9 -0
  321. package/lib/tab-page/tab-page-Renderer.component.d.ts +16 -0
  322. package/lib/tab-page/tab-page-host.component.d.ts +25 -0
  323. package/lib/tab-page/tab-page.module.d.ts +10 -0
  324. package/lib/tab-page/tab-page.service.d.ts +30 -0
  325. package/lib/tab-strip/tab-strip.component.d.ts +28 -0
  326. package/lib/tab-strip/tab-strip.module.d.ts +8 -0
  327. package/lib/tab-view/dynamic-tabs.directive.d.ts +16 -0
  328. package/lib/tab-view/tab-view.component.d.ts +26 -0
  329. package/lib/tab-view/tab-view.module.d.ts +10 -0
  330. package/lib/tab-view/tab.component.d.ts +12 -0
  331. package/lib/textarea/textarea.component.d.ts +12 -0
  332. package/lib/textarea/textarea.module.d.ts +8 -0
  333. package/lib/textbox/textbox.component.d.ts +16 -0
  334. package/lib/textbox/textbox.module.d.ts +11 -0
  335. package/lib/time-picker/time-picker.component.d.ts +52 -0
  336. package/lib/time-picker/time-picker.module.d.ts +11 -0
  337. package/lib/toast/toast-message/toast-message.component.d.ts +18 -0
  338. package/lib/toast/toast-wrapper/toast-wrapper.component.d.ts +8 -0
  339. package/lib/toast/toast.module.d.ts +9 -0
  340. package/lib/toast/toast.service.d.ts +18 -0
  341. package/lib/toolbar/group-button/toolbar-group-button.component.d.ts +12 -0
  342. package/lib/toolbar/menu/toolbar-menu.component.d.ts +24 -0
  343. package/lib/toolbar/search/toolbar-search.component.d.ts +16 -0
  344. package/lib/toolbar/title/toolbar-title.component.d.ts +9 -0
  345. package/lib/toolbar/toolbar-item.d.ts +3 -0
  346. package/lib/toolbar/toolbar.component.d.ts +8 -0
  347. package/lib/toolbar/toolbar.module.d.ts +14 -0
  348. package/lib/tooltip/tooltip.directive.d.ts +21 -0
  349. package/lib/tooltip/tooltip.module.d.ts +8 -0
  350. package/lib/tree-side-menu/tree-side-menu.component.d.ts +111 -0
  351. package/lib/tree-side-menu/tree-side-menu.module.d.ts +11 -0
  352. package/lib/tree-view/tree-view.component.d.ts +121 -0
  353. package/lib/tree-view/tree-view.module.d.ts +11 -0
  354. package/lib/upload-file/upload-file.component.d.ts +42 -0
  355. package/lib/upload-file/upload-file.events.d.ts +10 -0
  356. package/lib/upload-file/upload-file.module.d.ts +13 -0
  357. package/lib/validation/validation-form.component.d.ts +19 -0
  358. package/lib/validation/validation-rule.widget.d.ts +23 -0
  359. package/lib/validation/validation.class.d.ts +16 -0
  360. package/lib/validation/validation.component.d.ts +25 -0
  361. package/lib/validation/validation.module.d.ts +11 -0
  362. package/package.json +33 -13
  363. package/{src/public-api.ts → public-api.d.ts} +2 -61
  364. package/karma.conf.js +0 -32
  365. package/ng-package.json +0 -10
  366. package/src/lib/accordion/accordion.component.ts +0 -43
  367. package/src/lib/accordion/accordion.module.ts +0 -11
  368. package/src/lib/accordion/api.ts +0 -2
  369. package/src/lib/base/base-page.class.ts +0 -116
  370. package/src/lib/base/components.class.ts +0 -9
  371. package/src/lib/base/element.class.ts +0 -344
  372. package/src/lib/base/events.class.ts +0 -32
  373. package/src/lib/button/button.component.html +0 -17
  374. package/src/lib/button/button.component.ts +0 -72
  375. package/src/lib/button/button.module.ts +0 -14
  376. package/src/lib/calendar/calendar-box/calendar-box.component.html +0 -68
  377. package/src/lib/calendar/calendar-box/calendar-box.component.ts +0 -461
  378. package/src/lib/calendar/calendar-box/calendar-box.module.ts +0 -16
  379. package/src/lib/calendar/scheduler/scheduler-views.property.ts +0 -38
  380. package/src/lib/calendar/scheduler/scheduler.component.html +0 -9
  381. package/src/lib/calendar/scheduler/scheduler.component.scss +0 -181
  382. package/src/lib/calendar/scheduler/scheduler.component.ts +0 -249
  383. package/src/lib/calendar/scheduler/scheduler.module.ts +0 -45
  384. package/src/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.ts +0 -133
  385. package/src/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.ts +0 -33
  386. package/src/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.html +0 -43
  387. package/src/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.scss +0 -66
  388. package/src/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.ts +0 -50
  389. package/src/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.html +0 -45
  390. package/src/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.scss +0 -19
  391. package/src/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.ts +0 -103
  392. package/src/lib/calendar/scheduler/views/month/scheduler-month-view.component.html +0 -39
  393. package/src/lib/calendar/scheduler/views/month/scheduler-month-view.component.scss +0 -55
  394. package/src/lib/calendar/scheduler/views/month/scheduler-month-view.component.ts +0 -233
  395. package/src/lib/calendar/scheduler/views/scheduler-view.component.ts +0 -124
  396. package/src/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.html +0 -50
  397. package/src/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.scss +0 -4
  398. package/src/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.ts +0 -92
  399. package/src/lib/checkbox/checkbox.component.html +0 -22
  400. package/src/lib/checkbox/checkbox.component.ts +0 -107
  401. package/src/lib/checkbox/checkbox.module.ts +0 -11
  402. package/src/lib/color-picker/color-box/color-box.component.html +0 -37
  403. package/src/lib/color-picker/color-box/color-box.component.scss +0 -60
  404. package/src/lib/color-picker/color-box/color-box.component.ts +0 -438
  405. package/src/lib/color-picker/color-picker.component.html +0 -31
  406. package/src/lib/color-picker/color-picker.component.ts +0 -87
  407. package/src/lib/color-picker/color-picker.module.ts +0 -16
  408. package/src/lib/context-menu/context-menu.component.html +0 -42
  409. package/src/lib/context-menu/context-menu.component.ts +0 -78
  410. package/src/lib/context-menu/context-menu.directive.ts +0 -159
  411. package/src/lib/context-menu/context-menu.module.ts +0 -15
  412. package/src/lib/data-filter/columns/filter-column-date.component.ts +0 -123
  413. package/src/lib/data-filter/columns/filter-column-number.component.ts +0 -100
  414. package/src/lib/data-filter/columns/filter-column-selection.component.ts +0 -69
  415. package/src/lib/data-filter/columns/filter-column-string.component.ts +0 -100
  416. package/src/lib/data-filter/filter-panel/filter-panel.component.html +0 -120
  417. package/src/lib/data-filter/filter-panel/filter-panel.component.scss +0 -143
  418. package/src/lib/data-filter/filter-panel/filter-panel.component.ts +0 -266
  419. package/src/lib/data-filter/filter.class.ts +0 -73
  420. package/src/lib/data-filter/filter.module.ts +0 -52
  421. package/src/lib/data-filter/toolbar/filter-toolbar.component.html +0 -5
  422. package/src/lib/data-filter/toolbar/filter-toolbar.component.scss +0 -17
  423. package/src/lib/data-filter/toolbar/filter-toolbar.component.ts +0 -179
  424. package/src/lib/data-list/core/data-list.component.ts +0 -62
  425. package/src/lib/data-list/list/list.component.html +0 -32
  426. package/src/lib/data-list/list/list.component.scss +0 -64
  427. package/src/lib/data-list/list/list.component.ts +0 -149
  428. package/src/lib/data-list/list/list.module.ts +0 -14
  429. package/src/lib/data-list/list/toolbar-list-view.component.ts +0 -63
  430. package/src/lib/data-source/datasource.component.ts +0 -50
  431. package/src/lib/data-source/datasource.module.ts +0 -11
  432. package/src/lib/date-picker/date-picker.component.html +0 -30
  433. package/src/lib/date-picker/date-picker.component.scss +0 -5
  434. package/src/lib/date-picker/date-picker.component.ts +0 -720
  435. package/src/lib/date-picker/date-picker.module.ts +0 -17
  436. package/src/lib/dialog/dialog.component.html +0 -5
  437. package/src/lib/dialog/dialog.component.scss +0 -32
  438. package/src/lib/dialog/dialog.component.ts +0 -32
  439. package/src/lib/dialog/dialog.module.ts +0 -13
  440. package/src/lib/dialog/dialog.service.ts +0 -178
  441. package/src/lib/drawer/content.component.ts +0 -18
  442. package/src/lib/drawer/drawer-container.component.ts +0 -37
  443. package/src/lib/drawer/drawer.component.ts +0 -151
  444. package/src/lib/drawer/drawer.module.ts +0 -16
  445. package/src/lib/dropdown/dropdown.component.html +0 -26
  446. package/src/lib/dropdown/dropdown.component.scss +0 -8
  447. package/src/lib/dropdown/dropdown.component.ts +0 -197
  448. package/src/lib/dropdown/dropdown.module.ts +0 -19
  449. package/src/lib/fieldset/fieldset.component.html +0 -6
  450. package/src/lib/fieldset/fieldset.component.ts +0 -49
  451. package/src/lib/fieldset/fieldset.module.ts +0 -11
  452. package/src/lib/form-group/form-group.component.html +0 -15
  453. package/src/lib/form-group/form-group.component.ts +0 -39
  454. package/src/lib/form-group/form-group.module.ts +0 -14
  455. package/src/lib/label/label.component.html +0 -5
  456. package/src/lib/label/label.component.ts +0 -18
  457. package/src/lib/label/label.module.ts +0 -14
  458. package/src/lib/loading/loading-indicator.component.html +0 -27
  459. package/src/lib/loading/loading-indicator.component.ts +0 -16
  460. package/src/lib/loading/loading-panel.component.ts +0 -37
  461. package/src/lib/loading/loading.module.ts +0 -13
  462. package/src/lib/loading/loading.service.ts +0 -44
  463. package/src/lib/menu/menu-item.component.ts +0 -41
  464. package/src/lib/menu/menu.component.html +0 -74
  465. package/src/lib/menu/menu.component.ts +0 -111
  466. package/src/lib/menu/menu.module.ts +0 -13
  467. package/src/lib/menu/menu2.component.scss +0 -59
  468. package/src/lib/menu/menu2.component.ts +0 -98
  469. package/src/lib/number-box/number-box.component.html +0 -32
  470. package/src/lib/number-box/number-box.component.ts +0 -641
  471. package/src/lib/number-box/number-box.module.ts +0 -13
  472. package/src/lib/page/content.component.ts +0 -18
  473. package/src/lib/page/footer.component.ts +0 -13
  474. package/src/lib/page/page.component.ts +0 -43
  475. package/src/lib/page/page.module.ts +0 -14
  476. package/src/lib/panel-box/panel-box.component.html +0 -19
  477. package/src/lib/panel-box/panel-box.component.scss +0 -25
  478. package/src/lib/panel-box/panel-box.component.ts +0 -87
  479. package/src/lib/panel-box/panel-box.module.ts +0 -10
  480. package/src/lib/password-box/password-box.component.html +0 -22
  481. package/src/lib/password-box/password-box.component.ts +0 -30
  482. package/src/lib/password-box/password-box.module.ts +0 -16
  483. package/src/lib/popover/custom-cdk-overlay.service.ts +0 -82
  484. package/src/lib/popover/overlay.service.ts +0 -102
  485. package/src/lib/popover/popover.component.html +0 -5
  486. package/src/lib/popover/popover.component.scss +0 -9
  487. package/src/lib/popover/popover.component.ts +0 -130
  488. package/src/lib/popover/popover.module.ts +0 -11
  489. package/src/lib/popup/popup.component.html +0 -33
  490. package/src/lib/popup/popup.component.scss +0 -173
  491. package/src/lib/popup/popup.component.ts +0 -182
  492. package/src/lib/popup/popup.module.ts +0 -16
  493. package/src/lib/popup/popup.service.ts +0 -103
  494. package/src/lib/progress-bar/progress-bar.component.html +0 -5
  495. package/src/lib/progress-bar/progress-bar.component.ts +0 -10
  496. package/src/lib/progress-bar/progress-bar.module.ts +0 -11
  497. package/src/lib/property-editor/editors/check-editor/check-editor.ts +0 -44
  498. package/src/lib/property-editor/editors/check-editor/check.module.ts +0 -14
  499. package/src/lib/property-editor/editors/color-editor/color.editor.ts +0 -30
  500. package/src/lib/property-editor/editors/color-editor/color.module.ts +0 -20
  501. package/src/lib/property-editor/editors/column-editor/column.editor.html +0 -75
  502. package/src/lib/property-editor/editors/column-editor/column.editor.scss +0 -193
  503. package/src/lib/property-editor/editors/column-editor/column.editor.ts +0 -124
  504. package/src/lib/property-editor/editors/column-editor/column.module.ts +0 -28
  505. package/src/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.html +0 -80
  506. package/src/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.scss +0 -71
  507. package/src/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.ts +0 -232
  508. package/src/lib/property-editor/editors/conditional-color-editor/conditional-color.module.ts +0 -52
  509. package/src/lib/property-editor/editors/date-editor/date.editor.ts +0 -49
  510. package/src/lib/property-editor/editors/date-editor/date.module.ts +0 -20
  511. package/src/lib/property-editor/editors/number-editor/number.editor.ts +0 -46
  512. package/src/lib/property-editor/editors/number-editor/number.module.ts +0 -20
  513. package/src/lib/property-editor/editors/range-editor/range.editor.html +0 -67
  514. package/src/lib/property-editor/editors/range-editor/range.editor.scss +0 -68
  515. package/src/lib/property-editor/editors/range-editor/range.editor.ts +0 -153
  516. package/src/lib/property-editor/editors/range-editor/range.module.ts +0 -37
  517. package/src/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.html +0 -8
  518. package/src/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.ts +0 -70
  519. package/src/lib/property-editor/editors/selectbox-editor/selectbox.editor.html +0 -8
  520. package/src/lib/property-editor/editors/selectbox-editor/selectbox.editor.ts +0 -77
  521. package/src/lib/property-editor/editors/selectbox-editor/selectbox.module.ts +0 -18
  522. package/src/lib/property-editor/editors/selection-editor/selection-editor.ts +0 -52
  523. package/src/lib/property-editor/editors/selection-editor/selection.module.ts +0 -14
  524. package/src/lib/property-editor/editors/switch-editor/number.editor.ts +0 -26
  525. package/src/lib/property-editor/editors/switch-editor/number.module.ts +0 -21
  526. package/src/lib/property-editor/editors/text-editor/text.editor.html +0 -5
  527. package/src/lib/property-editor/editors/text-editor/text.editor.ts +0 -31
  528. package/src/lib/property-editor/editors/text-editor/text.module.ts +0 -20
  529. package/src/lib/property-editor/editors/textarea-editor/textarea.editor.html +0 -9
  530. package/src/lib/property-editor/editors/textarea-editor/textarea.editor.ts +0 -37
  531. package/src/lib/property-editor/editors/textarea-editor/textarea.module.ts +0 -20
  532. package/src/lib/property-editor/editors/time-editor/time.editor.ts +0 -38
  533. package/src/lib/property-editor/editors/time-editor/time.module.ts +0 -20
  534. package/src/lib/property-editor/property-editor-renderer.directive.ts +0 -165
  535. package/src/lib/property-editor/property-editor.class.ts +0 -178
  536. package/src/lib/property-editor/property-editor.module.ts +0 -115
  537. package/src/lib/query-builder/query-builder-group.component.html +0 -68
  538. package/src/lib/query-builder/query-builder-group.component.ts +0 -122
  539. package/src/lib/query-builder/query-builder-popup/query-builder-popup.component.html +0 -82
  540. package/src/lib/query-builder/query-builder-popup/query-builder-popup.component.ts +0 -178
  541. package/src/lib/query-builder/query-builder-rule.component.html +0 -135
  542. package/src/lib/query-builder/query-builder-rule.component.ts +0 -390
  543. package/src/lib/query-builder/query-builder.class.ts +0 -53
  544. package/src/lib/query-builder/query-builder.component.html +0 -3
  545. package/src/lib/query-builder/query-builder.component.scss +0 -286
  546. package/src/lib/query-builder/query-builder.component.ts +0 -220
  547. package/src/lib/query-builder/query-builder.module.ts +0 -44
  548. package/src/lib/query-builder/query-builder.service.ts +0 -188
  549. package/src/lib/search-bar/search-bar.component.html +0 -30
  550. package/src/lib/search-bar/search-bar.component.scss +0 -106
  551. package/src/lib/search-bar/search-bar.component.ts +0 -287
  552. package/src/lib/search-bar/search-bar.module.ts +0 -33
  553. package/src/lib/searchbox/searchbox.component.html +0 -25
  554. package/src/lib/searchbox/searchbox.component.ts +0 -85
  555. package/src/lib/searchbox/searchbox.module.ts +0 -17
  556. package/src/lib/selectbox/selectbox.component.html +0 -100
  557. package/src/lib/selectbox/selectbox.component.ts +0 -984
  558. package/src/lib/selectbox/selectbox.module.ts +0 -31
  559. package/src/lib/selectbox/selectbox2.component.html +0 -78
  560. package/src/lib/selectbox/selectbox2.component.ts +0 -603
  561. package/src/lib/selection-list/selection-list.component.html +0 -21
  562. package/src/lib/selection-list/selection-list.component.ts +0 -115
  563. package/src/lib/selection-list/selection-list.module.ts +0 -13
  564. package/src/lib/switch/switch.component.html +0 -4
  565. package/src/lib/switch/switch.component.scss +0 -65
  566. package/src/lib/switch/switch.component.ts +0 -57
  567. package/src/lib/switch/switch.module.ts +0 -14
  568. package/src/lib/tab-page/tab-page-Renderer.component.ts +0 -70
  569. package/src/lib/tab-page/tab-page-host.component.ts +0 -110
  570. package/src/lib/tab-page/tab-page.module.ts +0 -13
  571. package/src/lib/tab-page/tab-page.service.ts +0 -176
  572. package/src/lib/tab-strip/tab-strip.component.html +0 -6
  573. package/src/lib/tab-strip/tab-strip.component.ts +0 -47
  574. package/src/lib/tab-strip/tab-strip.module.ts +0 -11
  575. package/src/lib/tab-view/dynamic-tabs.directive.ts +0 -17
  576. package/src/lib/tab-view/tab-view.component.html +0 -33
  577. package/src/lib/tab-view/tab-view.component.scss +0 -0
  578. package/src/lib/tab-view/tab-view.component.ts +0 -129
  579. package/src/lib/tab-view/tab-view.module.ts +0 -12
  580. package/src/lib/tab-view/tab.component.html +0 -8
  581. package/src/lib/tab-view/tab.component.ts +0 -15
  582. package/src/lib/textarea/textarea.component.html +0 -13
  583. package/src/lib/textarea/textarea.component.ts +0 -24
  584. package/src/lib/textarea/textarea.module.ts +0 -14
  585. package/src/lib/textbox/textbox.component.html +0 -22
  586. package/src/lib/textbox/textbox.component.ts +0 -38
  587. package/src/lib/textbox/textbox.module.ts +0 -16
  588. package/src/lib/time-picker/time-picker.component.html +0 -21
  589. package/src/lib/time-picker/time-picker.component.ts +0 -1003
  590. package/src/lib/time-picker/time-picker.module.ts +0 -15
  591. package/src/lib/toast/toast-message/toast-message.component.html +0 -17
  592. package/src/lib/toast/toast-message/toast-message.component.scss +0 -75
  593. package/src/lib/toast/toast-message/toast-message.component.ts +0 -64
  594. package/src/lib/toast/toast-wrapper/toast-wrapper.component.scss +0 -15
  595. package/src/lib/toast/toast-wrapper/toast-wrapper.component.ts +0 -13
  596. package/src/lib/toast/toast.module.ts +0 -12
  597. package/src/lib/toast/toast.service.ts +0 -64
  598. package/src/lib/toolbar/group-button/toolbar-group-button.component.ts +0 -54
  599. package/src/lib/toolbar/menu/toolbar-menu.component.html +0 -4
  600. package/src/lib/toolbar/menu/toolbar-menu.component.ts +0 -81
  601. package/src/lib/toolbar/search/toolbar-search.component.html +0 -4
  602. package/src/lib/toolbar/search/toolbar-search.component.scss +0 -24
  603. package/src/lib/toolbar/search/toolbar-search.component.ts +0 -61
  604. package/src/lib/toolbar/title/toolbar-title.component.ts +0 -35
  605. package/src/lib/toolbar/toolbar-item.ts +0 -4
  606. package/src/lib/toolbar/toolbar.component.html +0 -4
  607. package/src/lib/toolbar/toolbar.component.scss +0 -9
  608. package/src/lib/toolbar/toolbar.component.ts +0 -16
  609. package/src/lib/toolbar/toolbar.module.ts +0 -25
  610. package/src/lib/tooltip/tooltip.directive.ts +0 -101
  611. package/src/lib/tooltip/tooltip.module.ts +0 -11
  612. package/src/lib/tree-side-menu/tree-side-menu.component.html +0 -43
  613. package/src/lib/tree-side-menu/tree-side-menu.component.ts +0 -698
  614. package/src/lib/tree-side-menu/tree-side-menu.module.ts +0 -19
  615. package/src/lib/tree-view/tree-view.component.html +0 -46
  616. package/src/lib/tree-view/tree-view.component.ts +0 -836
  617. package/src/lib/tree-view/tree-view.module.ts +0 -16
  618. package/src/lib/upload-file/upload-file.component.html +0 -16
  619. package/src/lib/upload-file/upload-file.component.ts +0 -230
  620. package/src/lib/upload-file/upload-file.events.ts +0 -11
  621. package/src/lib/upload-file/upload-file.module.ts +0 -16
  622. package/src/lib/validation/validation-form.component.ts +0 -78
  623. package/src/lib/validation/validation-rule.widget.ts +0 -112
  624. package/src/lib/validation/validation.class.ts +0 -22
  625. package/src/lib/validation/validation.component.ts +0 -92
  626. package/src/lib/validation/validation.module.ts +0 -28
  627. package/src/test.ts +0 -28
  628. package/tsconfig.lib.json +0 -25
  629. package/tsconfig.lib.prod.json +0 -6
  630. package/tsconfig.spec.json +0 -17
  631. package/tslint.json +0 -17
@@ -0,0 +1,776 @@
1
+ import { Component, ViewEncapsulation, Input, ContentChild, Output, EventEmitter, ElementRef, TemplateRef } from '@angular/core';
2
+ import { AXDataSourceComponent } from '../data-source/datasource.component';
3
+ import { AXHtmlEvent, AXValueEvent } from '../base/events.class';
4
+ import { AXBaseComponent } from '../base/element.class';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../checkbox/checkbox.component";
7
+ import * as i2 from "../context-menu/context-menu.component";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "../context-menu/context-menu.directive";
10
+ export class AXTreeViewNode {
11
+ constructor() {
12
+ this.itemData = new AXTreeViewItemData();
13
+ }
14
+ }
15
+ export class AXTreeViewItemData {
16
+ }
17
+ export class AXTreeViewItemMovedEvent {
18
+ }
19
+ export class AXTreeViewselectionChangedEvent extends AXValueEvent {
20
+ }
21
+ export class AXTreeViewseletedKeyFieldsChangedEvent extends AXValueEvent {
22
+ }
23
+ export class AXTreeViewItemClick extends AXHtmlEvent {
24
+ }
25
+ export class AXTreeViewComponent extends AXBaseComponent {
26
+ constructor(ref) {
27
+ super();
28
+ this.ref = ref;
29
+ this.selectionMode = 'single';
30
+ this.selectionLevel = 'all';
31
+ // user can set only one of this /selectedFieldName or /seletedKeyFields
32
+ //seletedKeyFields set id of nodes and parents
33
+ //selectedFieldName set name of fields that set selectes
34
+ this.selectedFieldName = null;
35
+ // @Input()
36
+ // selectNodesRecursive: 'all' | 'parents' | 'childs' | 'none' = 'all'; //leaf
37
+ this.checkParents = true;
38
+ this.checkChilds = true;
39
+ this.seletedKeyFields = [];
40
+ this.keyField = 'id';
41
+ this.hasChildField = 'child';
42
+ this.bordered = false;
43
+ this.lazyLoading = true;
44
+ this.allowDrag = false;
45
+ this.size = 'md';
46
+ this.disabled = false;
47
+ this.selectionChanged = new EventEmitter();
48
+ this.seletedKeyFieldsChanged = new EventEmitter();
49
+ this.onItemOpening = new EventEmitter();
50
+ this.onItemClick = new EventEmitter();
51
+ this.onItemClosing = new EventEmitter();
52
+ this.onItemDrag = new EventEmitter();
53
+ this.onItemMoved = new EventEmitter();
54
+ this.selectableField = '';
55
+ this.onContextMenuItemClick = new EventEmitter();
56
+ this.showSelectBox = false;
57
+ this.loading = false;
58
+ this.list = [];
59
+ this.selectedItems = [];
60
+ this.selectedParents = [];
61
+ this.loadAllChildren = false;
62
+ this.listLoad = [];
63
+ this.validDrop = true;
64
+ this.lockedDrag = false;
65
+ this.childField = 'childeren';
66
+ this.showContextMenu = false;
67
+ this.isSelectedItem = false;
68
+ this.loced = false;
69
+ this.levelCount = 0;
70
+ }
71
+ handleOnContextMenuItem(e) {
72
+ if (this.disabled) {
73
+ return;
74
+ }
75
+ this.onContextMenuItemClick.emit(e);
76
+ }
77
+ refresh() {
78
+ this.list = [];
79
+ this._contentDataSource.fetch(null);
80
+ }
81
+ internalSelectItem(item, userChange = true) {
82
+ if (item[this.hasChildField] === false || this.selectionMode === 'single') {
83
+ item.select = !item.select;
84
+ if (item.parentNode && this.selectionMode !== 'single' && this.checkParents == true) {
85
+ this.changeParentSelect(item.parentNode);
86
+ }
87
+ if (item.select === true) {
88
+ if (this.selectionMode === 'single') {
89
+ this.selectedItems.forEach((e) => {
90
+ e.select = false;
91
+ });
92
+ this.selectedItems = [];
93
+ this.selectedItems.push(item);
94
+ }
95
+ else {
96
+ this.selectedItems.push(item);
97
+ }
98
+ }
99
+ else {
100
+ this.selectedItems = this.selectedItems.filter((c) => c[this.keyField] !== item[this.keyField]);
101
+ }
102
+ }
103
+ else {
104
+ item.select = !item.select;
105
+ if (item.parentNode && this.selectionMode === 'multiple' && this.checkParents == true) {
106
+ this.changeParentSelect(item.parentNode);
107
+ }
108
+ if (this.selectionMode === 'multiple' && this.checkChilds == true) {
109
+ this.changeChildSelect(item, item.select);
110
+ }
111
+ if (item.select == true) {
112
+ if (this.selectionMode === 'multiple') {
113
+ this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
114
+ this.selectedParents.push(item);
115
+ }
116
+ else {
117
+ this.selectedParents.forEach((e) => {
118
+ e.select = false;
119
+ });
120
+ this.selectedParents = [];
121
+ this.selectedParents.push(item);
122
+ }
123
+ }
124
+ else {
125
+ this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
126
+ }
127
+ }
128
+ if (userChange) {
129
+ this.selectionChanged.emit({
130
+ component: this,
131
+ value: this.makeNode(item),
132
+ htmlElement: this.ref.nativeElement
133
+ });
134
+ }
135
+ }
136
+ makeNode(item, addChildren = true) {
137
+ const node = new AXTreeViewNode();
138
+ if (addChildren) {
139
+ node.children = item[this.childField] === undefined ? [] : item[this.childField]?.map((m) => this.makeNode(m));
140
+ }
141
+ node.itemData.disabled = item.disabled === true ? item.disabled : false;
142
+ node.itemData.open = item.open === true ? item.open : false;
143
+ node.itemData.key = item[this.keyField];
144
+ const c = [];
145
+ let i = 0;
146
+ for (var k in item) {
147
+ i = i + 1;
148
+ if (k != 'select' &&
149
+ k != 'hasChild' &&
150
+ k != 'loading' &&
151
+ k != 'requestId' &&
152
+ k != 'disabled' &&
153
+ k != 'open' &&
154
+ k != 'parentNode' &&
155
+ k != 'toggle' &&
156
+ k != 'loaded' &&
157
+ k != 'indeterminate' &&
158
+ k != this.childField) {
159
+ //c.push({ k: item[k] });
160
+ c[k] = item[k];
161
+ }
162
+ }
163
+ node.itemData.item = c; //TO DO
164
+ node.itemData.selected = item.select === true ? item.select : false;
165
+ node.itemData.indeterminate = item.select === null ? true : false;
166
+ node.itemData.hasChild = item[this.hasChildField];
167
+ node.parent = item.parentNode === undefined ? null : this.makeNode(item.parentNode, false);
168
+ if (node.parent != null) {
169
+ node.parent.selectParent = () => {
170
+ if (item.parentNode['select'] != true) {
171
+ this.internalSelectItem(item.parentNode, true);
172
+ }
173
+ };
174
+ node.parent.unSelectParent = () => {
175
+ if (item.parentNode['select'] == true) {
176
+ this.internalSelectItem(item.parentNode, true);
177
+ }
178
+ };
179
+ }
180
+ if (node.children != null && node.children.length > 0) {
181
+ node.children.selectChilds = () => {
182
+ item.childeren.forEach((element) => {
183
+ if (element['select'] != true) {
184
+ this.internalSelectItem(element, true);
185
+ }
186
+ });
187
+ };
188
+ node.children.unSelectChilds = () => {
189
+ item.childeren.forEach((element) => {
190
+ if (element['select'] == true) {
191
+ this.internalSelectItem(element, true);
192
+ }
193
+ });
194
+ };
195
+ }
196
+ return node;
197
+ }
198
+ changeChildSelect(item, s) {
199
+ // if (this.selectNodesRecursive == 'all' || this.selectNodesRecursive == 'childs') {
200
+ if (this.checkChilds == true) {
201
+ item.select = s;
202
+ if (item[this.hasChildField] === true && item[this.childField] && item[this.childField].length > 0) {
203
+ item[this.childField].forEach((elm) => {
204
+ if (elm[this.hasChildField] === true) {
205
+ elm.select = s;
206
+ if (s === true && this.selectionMode !== 'single') {
207
+ this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== elm[this.keyField]);
208
+ this.selectedParents.push(elm);
209
+ }
210
+ if (s === false && this.selectionMode !== 'single') {
211
+ this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== elm[this.keyField]);
212
+ }
213
+ this.changeChildSelect(elm, s);
214
+ }
215
+ else {
216
+ elm.select = s;
217
+ if (s === true && this.selectionMode !== 'single') {
218
+ this.selectedItems = this.selectedItems.filter((c) => c[this.keyField] !== elm[this.keyField]);
219
+ this.selectedItems.push(elm);
220
+ }
221
+ if (s === false && this.selectionMode !== 'single') {
222
+ this.selectedItems = this.selectedItems.filter((c) => c[this.keyField] !== elm[this.keyField]);
223
+ }
224
+ }
225
+ });
226
+ }
227
+ else {
228
+ item.select = s;
229
+ }
230
+ }
231
+ }
232
+ changeParentSelect(item) {
233
+ //if (this.selectNodesRecursive == 'all' || this.selectNodesRecursive == 'parents') {
234
+ if (this.checkParents) {
235
+ let allselect = true;
236
+ let alldeselect = true;
237
+ let oneselect = false;
238
+ let isindeterminate = false;
239
+ if (item[this.childField]) {
240
+ for (let index = 0; index < item[this.childField].length; index++) {
241
+ if (item[this.childField][index].select === true) {
242
+ alldeselect = false;
243
+ oneselect = true;
244
+ }
245
+ if (item[this.childField][index].select === false || item[this.childField][index].select === undefined) {
246
+ allselect = false;
247
+ }
248
+ if (item[this.childField][index].select === null) {
249
+ isindeterminate = true;
250
+ alldeselect = false;
251
+ oneselect = true;
252
+ allselect = false;
253
+ }
254
+ }
255
+ }
256
+ if (oneselect || (isindeterminate && !allselect)) {
257
+ item.select = null;
258
+ this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
259
+ this.selectedParents.push(item);
260
+ }
261
+ if (allselect === true) {
262
+ item.select = true;
263
+ this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
264
+ this.selectedParents.push(item);
265
+ }
266
+ if (alldeselect === true) {
267
+ this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== item[this.keyField]);
268
+ item.select = false;
269
+ }
270
+ if (item.parentNode && item.parentNode[this.childField] && item.parentNode[this.childField].length > 0) {
271
+ this.changeParentSelect(item.parentNode);
272
+ }
273
+ }
274
+ }
275
+ ngOnInit() {
276
+ this.onItemClick.subscribe((data) => {
277
+ if (!data.cancel) {
278
+ this.toggleNode(data.item, data.flag);
279
+ }
280
+ });
281
+ }
282
+ itemdbClick(e, item) {
283
+ if (this.selectionMode == 'single') {
284
+ this.handleOnNodeClick(e, item, true);
285
+ }
286
+ }
287
+ handleOnNodeClick(e, item, flag = false) {
288
+ if (this.disabled) {
289
+ return;
290
+ }
291
+ // this.internalSelectItem(item);
292
+ this.onItemClick.emit({
293
+ component: this,
294
+ htmlEvent: e,
295
+ item,
296
+ flag
297
+ });
298
+ }
299
+ nodeClick(item) {
300
+ if (this.disabled) {
301
+ return;
302
+ }
303
+ if (item[this.hasChildField] == true) {
304
+ this.toggleNode(item, true);
305
+ }
306
+ else {
307
+ this.internalSelectItem(item, true);
308
+ }
309
+ }
310
+ toggleNode(item, flag = false) {
311
+ //item[this.hasChildField] === false &&
312
+ if (this.selectionMode === 'single' && !flag) {
313
+ if (this.selectionLevel == 'nodes' && item.hasChild == true) {
314
+ }
315
+ else {
316
+ this.internalSelectItem(item);
317
+ }
318
+ }
319
+ else {
320
+ item.toggle = !item.toggle;
321
+ if (this.selectionMode === 'single') {
322
+ if (this.selectionLevel == 'nodes' && item.hasChild == true) {
323
+ }
324
+ else {
325
+ this.internalSelectItem(item);
326
+ }
327
+ }
328
+ if (item[this.hasChildField] === true && item.loaded !== true && this.lazyLoading) {
329
+ this.itemRow = item;
330
+ const uid = Math.floor(Math.random() * 100000000);
331
+ item.requestId = uid;
332
+ this.listLoad.push(item);
333
+ this._contentDataSource.fetch(item);
334
+ this.showLoading(this.itemRow);
335
+ }
336
+ if (item.toggle && item[this.hasChildField] === true) {
337
+ item.open = true;
338
+ this.onItemOpening.emit(this.makeNode(item));
339
+ }
340
+ else if (!item.toggle && item[this.hasChildField] === true) {
341
+ item.open = false;
342
+ this.onItemClosing.emit(this.makeNode(item));
343
+ }
344
+ }
345
+ }
346
+ getLevel(item) {
347
+ return new Promise((resolve, reject) => {
348
+ debugger;
349
+ if (item.parentNode) {
350
+ this.levelCount = this.levelCount + 1;
351
+ this.getLevel(item.parentNode).then((res) => {
352
+ resolve(this.levelCount);
353
+ });
354
+ }
355
+ else {
356
+ this.levelCount = this.levelCount + 1;
357
+ resolve(this.levelCount);
358
+ }
359
+ });
360
+ }
361
+ ngAfterContentInit() {
362
+ this._contentDataSource.fetch(null);
363
+ this._contentDataSource.onDataReceived.subscribe((_data) => {
364
+ if (this.list.length === 0) {
365
+ this.hideLoading(null);
366
+ this.list = _data.data.result;
367
+ this.list.forEach((el) => {
368
+ el.disabledCheckBox = this.selectableField != '' ? (el[this.selectableField] ? el[this.selectableField] : false) : false;
369
+ el.select = false;
370
+ if (this.selectionLevel == 'nodes' && el[this.hasChildField] == true) {
371
+ el.disabledCheckBox = true;
372
+ }
373
+ if (this.selectionLevel == 'parents' && el[this.hasChildField] == false) {
374
+ el.disabledCheckBox = true;
375
+ }
376
+ if (this.seletedKeyFields.length > 0) {
377
+ this.seletedKeyFields.forEach((n) => {
378
+ if (n.includes(el[this.keyField])) {
379
+ if (el[this.hasChildField] == true) {
380
+ if (((this.checkParents == false && this.checkChilds == false) || this.checkChilds == false) && n.length == 1) {
381
+ //select parent when check child and check parent is false TODO check this Action
382
+ this.selectItem(el);
383
+ }
384
+ this.open(el);
385
+ }
386
+ else {
387
+ this.selectItem(el);
388
+ this.isSelectedItem = true;
389
+ }
390
+ }
391
+ });
392
+ }
393
+ else if (this.selectedFieldName != null) {
394
+ if (el[this.hasChildField] == true && el[this.selectedFieldName] == true) {
395
+ if ((this.checkParents == false && this.checkChilds == false) || this.checkChilds == false) {
396
+ //select parent when check child and check parent is false TODO check this Action
397
+ this.selectItem(el);
398
+ }
399
+ this.open(el);
400
+ }
401
+ else if (el[this.selectedFieldName] == true) {
402
+ this.selectItem(el);
403
+ this.isSelectedItem = true;
404
+ }
405
+ }
406
+ });
407
+ }
408
+ else {
409
+ this.itemRow = this.listLoad.filter((c) => c.requestId === _data.data.requestId)[0];
410
+ this.listLoad = this.listLoad.filter((c) => c.requestId !== _data.data.requestId);
411
+ this.itemRow.loaded = true;
412
+ if (this.itemRow !== undefined) {
413
+ this.hideLoading(this.itemRow);
414
+ const result = _data.data.result;
415
+ if (this.list.length !== 0) {
416
+ if (this.itemRow[this.childField] && this.itemRow[this.childField].length > 0) {
417
+ result.forEach((el) => {
418
+ el.disabledCheckBox = this.selectableField != '' ? (el[this.selectableField] ? el[this.selectableField] : false) : false;
419
+ // el.disabledCheckBox = this.selectableField != '' ? el[this.selectableField] : false;
420
+ this.itemRow[this.childField][this.itemRow[this.childField].length] = el;
421
+ });
422
+ }
423
+ else {
424
+ this.itemRow[this.childField] = result;
425
+ }
426
+ for (let i = 0; i < result.length; i++) {
427
+ result[i].disabledCheckBox =
428
+ this.selectableField != '' ? (result[i][this.selectableField] ? result[i][this.selectableField] : false) : false;
429
+ if (this.selectionLevel == 'nodes' && result[i][this.hasChildField] == true) {
430
+ result[i].disabledCheckBox = true;
431
+ }
432
+ if (this.selectionLevel == 'parents' && result[i][this.hasChildField] == false) {
433
+ result[i].disabledCheckBox = true;
434
+ }
435
+ // if (this.selectionMode !== 'single' && (this.selectNodesRecursive == 'all' || this.selectNodesRecursive == 'childs')) {
436
+ if (this.selectionMode !== 'single' && this.checkChilds == true) {
437
+ result[i].select = this.itemRow.select === (undefined || null) ? false : this.itemRow.select;
438
+ if (this.itemRow.select === true && this.selectionMode == 'multiple' && result[i][this.hasChildField] === false) {
439
+ this.selectedItems = this.selectedItems.filter((c) => c[this.keyField] !== result[i][this.keyField]);
440
+ this.selectedItems.push(result[i]);
441
+ }
442
+ else if (this.itemRow.select === true && this.selectionMode == 'multiple' && result[i][this.hasChildField] === true) {
443
+ this.selectedParents = this.selectedParents.filter((c) => c[this.keyField] !== result[i][this.keyField]);
444
+ this.selectedParents.push(result[i]);
445
+ }
446
+ }
447
+ else {
448
+ result[i].select = false;
449
+ }
450
+ result[i].parentNode = this.itemRow;
451
+ if (this.seletedKeyFields.length > 0) {
452
+ this.seletedKeyFields.forEach((n) => {
453
+ if (n.includes(result[i][this.keyField])) {
454
+ if (result[i][this.hasChildField] == true) {
455
+ this.levelCount = 0;
456
+ debugger;
457
+ this.getLevel(result[i]).then((resLevel) => {
458
+ debugger;
459
+ if (this.checkParents == false && this.checkChilds == false && n.length == this.levelCount) {
460
+ //select parent when check child and check parent is false TODO check this Action
461
+ this.selectItem(result[i]);
462
+ }
463
+ this.open(result[i]);
464
+ });
465
+ }
466
+ else {
467
+ this.selectItem(result[i]);
468
+ this.isSelectedItem = true;
469
+ }
470
+ }
471
+ });
472
+ }
473
+ else if (this.selectedFieldName != null) {
474
+ if (result[i][this.hasChildField] == true && result[i][this.selectedFieldName] == true) {
475
+ if (this.checkParents == false && this.checkChilds == false) {
476
+ //select parent when check child and check parent is false TODO check this Action
477
+ this.selectItem(result[i]);
478
+ }
479
+ this.open(result[i]);
480
+ }
481
+ else if (result[i][this.selectedFieldName] == true) {
482
+ this.selectItem(result[i]);
483
+ this.isSelectedItem = true;
484
+ }
485
+ }
486
+ }
487
+ this.itemRow.loaded = true;
488
+ }
489
+ }
490
+ }
491
+ if (this.isSelectedItem == true && !this.loced) {
492
+ this.loced = true;
493
+ this.seletedKeyFieldsChanged.emit({
494
+ component: this,
495
+ // value: this.makeNode(item),
496
+ htmlElement: this.ref.nativeElement
497
+ });
498
+ }
499
+ });
500
+ }
501
+ ngAfterViewInit() {
502
+ if (this.selectionMode !== 'single') {
503
+ this.showSelectBox = true;
504
+ }
505
+ this.showContextMenu = true;
506
+ }
507
+ // onItemClick(e, v) {
508
+ // }
509
+ onDragStart(e, v) {
510
+ if (!this.lockedDrag) {
511
+ this.itemDrag = v;
512
+ this.onItemDrag.emit(v);
513
+ }
514
+ e.stopImmediatePropagation();
515
+ }
516
+ onDragEnd(e, v) {
517
+ if (!this.lockedDrag) {
518
+ this.itemDrop = v;
519
+ }
520
+ e.stopImmediatePropagation();
521
+ }
522
+ drop(e) {
523
+ // this.onItemDrop.emit(this.itemDrop);
524
+ if (!this.lockedDrag) {
525
+ this.validDrop = true;
526
+ this.sameChilde(this.itemDrag, this.itemDrop);
527
+ if (this.validDrop && this.itemDrag[this.keyField] !== this.itemDrop[this.keyField] && this.itemDrag.parentNode !== this.itemDrop) {
528
+ const movedEvent = new AXTreeViewItemMovedEvent();
529
+ movedEvent.source = this.makeNode(this.itemDrag);
530
+ movedEvent.target = this.makeNode(this.itemDrop);
531
+ this.lockedDrag = true;
532
+ this.showLoading(this.itemDrag);
533
+ this.showLoading(this.itemDrop);
534
+ movedEvent.resolve = (value) => {
535
+ this.hideLoading(this.itemDrag);
536
+ this.hideLoading(this.itemDrop);
537
+ if (value) {
538
+ this.dragDropItem(this.itemDrag, this.itemDrop);
539
+ }
540
+ else {
541
+ this.lockedDrag = false;
542
+ }
543
+ };
544
+ this.onItemMoved.emit(movedEvent);
545
+ }
546
+ }
547
+ e.stopImmediatePropagation();
548
+ }
549
+ sameChilde(parent, child) {
550
+ if (parent[this.childField] && parent[this.childField].length > 0) {
551
+ for (let index = 0; index < parent[this.childField].length; index++) {
552
+ if (parent[this.childField][index][this.keyField] == child[this.keyField]) {
553
+ this.validDrop = false;
554
+ }
555
+ if (parent[this.childField][index][this.childField] && parent[this.childField][index][this.childField].length > 0) {
556
+ this.sameChilde(parent[this.childField][index], child);
557
+ }
558
+ }
559
+ }
560
+ else if (parent[this.keyField] == child[this.keyField]) {
561
+ this.validDrop = false;
562
+ }
563
+ }
564
+ dragDropItem(itemChild, itemParent) {
565
+ if (this.selectionLevel == 'nodes') {
566
+ itemParent.disabledCheckBox = true;
567
+ }
568
+ if (itemChild.parentNode) {
569
+ itemChild.parentNode[this.childField] = itemChild.parentNode[this.childField].filter((c) => c[this.keyField] !== itemChild[this.keyField]);
570
+ }
571
+ else {
572
+ this.list = this.list.filter((c) => c[this.keyField] !== itemChild[this.keyField]);
573
+ }
574
+ itemChild.parentNode = itemParent;
575
+ if (itemParent[this.childField] && itemParent[this.childField].length > 0) {
576
+ itemParent[this.childField][itemParent[this.childField].length] = itemChild;
577
+ }
578
+ else {
579
+ itemParent[this.childField] = [];
580
+ itemParent[this.childField][0] = itemChild;
581
+ if (itemParent[this.hasChildField] === true) {
582
+ this.toggleNode(itemParent);
583
+ }
584
+ else {
585
+ itemParent.toggle = !itemParent.toggle;
586
+ itemParent.loaded = true;
587
+ }
588
+ itemParent[this.hasChildField] = true;
589
+ }
590
+ if (itemChild.parentNode && this.selectionMode !== 'single') {
591
+ this.changeParentSelect(itemChild.parentNode);
592
+ }
593
+ this.lockedDrag = false;
594
+ }
595
+ listChange(field, value) {
596
+ for (let index = 0; index < this.list.length; index++) {
597
+ this.changeChiled(this.list[index], field, value);
598
+ }
599
+ this.loadAllChildren = false;
600
+ }
601
+ changeChiled(item, field, value) {
602
+ if (field === 'toggle' && (item.loaded === false || item.loaded === undefined)) {
603
+ if (this.loadAllChildren === true) {
604
+ this.toggleNode(item);
605
+ item[field] = value;
606
+ }
607
+ }
608
+ else {
609
+ item[field] = value;
610
+ if (field === 'select' && item[this.hasChildField] === false && value === true) {
611
+ this.selectedItems.push(item);
612
+ }
613
+ if (field === 'select' && item[this.hasChildField] === true && value === true) {
614
+ this.selectedParents.push(item);
615
+ }
616
+ }
617
+ if (field === 'select') {
618
+ item.indeterminate = false;
619
+ }
620
+ if (item[this.hasChildField] === true && item[this.childField] && item[this.childField].length > 0) {
621
+ item[this.childField].forEach((element) => {
622
+ this.changeChiled(element, field, value);
623
+ });
624
+ }
625
+ }
626
+ showLoading(item) {
627
+ item.loading = true;
628
+ }
629
+ hideLoading(item) {
630
+ if (item != null) {
631
+ item.loading = false;
632
+ }
633
+ }
634
+ openAll(loadAll = false) {
635
+ // if (loadAll) {
636
+ // this.loadAllChildren = true;
637
+ // this.listChange('toggle', true);
638
+ //} else {
639
+ this.listChange('toggle', true);
640
+ // }
641
+ }
642
+ selectItem(item) {
643
+ if (item['select'] != true) {
644
+ this.internalSelectItem(item, false);
645
+ }
646
+ }
647
+ unSelectItem(item) {
648
+ if (item['select'] == true) {
649
+ this.internalSelectItem(item, false);
650
+ }
651
+ }
652
+ open(item) {
653
+ if (item['toggle'] !== true) {
654
+ this.toggleNode(item, true);
655
+ }
656
+ }
657
+ scrolIntoView(item) {
658
+ let element = document.querySelector(`li[data-id='${item[this.keyField]}']`);
659
+ element.scrollIntoView();
660
+ }
661
+ closeAll() {
662
+ this.listChange('toggle', false);
663
+ }
664
+ selectAll() {
665
+ if (this.selectionMode !== 'single') {
666
+ this.listChange('select', true);
667
+ }
668
+ }
669
+ unSelectAll() {
670
+ if (this.selectionMode !== 'single') {
671
+ this.listChange('select', false);
672
+ }
673
+ this.selectedItems = [];
674
+ }
675
+ getSelectedNodes() {
676
+ const selectItemsNode = [];
677
+ this.selectedItems.forEach((e) => {
678
+ selectItemsNode.push(this.makeNode(e));
679
+ });
680
+ return selectItemsNode;
681
+ }
682
+ getSelectedParents() {
683
+ const selectItemsParent = [];
684
+ this.selectedParents.forEach((e) => {
685
+ selectItemsParent.push(this.makeNode(e));
686
+ });
687
+ return selectItemsParent;
688
+ }
689
+ getParentsId(item) {
690
+ let keyFields = [];
691
+ keyFields.push(item[this.keyField]);
692
+ if (item.parentNode) {
693
+ keyFields.push(...this.getParentsId(item.parentNode));
694
+ }
695
+ return keyFields;
696
+ }
697
+ getSelectedKeyFields() {
698
+ let keyFields = [];
699
+ this.selectedItems.forEach((elm) => {
700
+ var Ids = this.getParentsId(elm);
701
+ if (Ids) {
702
+ keyFields.push(Ids);
703
+ }
704
+ });
705
+ return keyFields;
706
+ }
707
+ getSelectedKeyFieldsParents() {
708
+ let keyFields = [];
709
+ this.selectedParents.forEach((elm) => {
710
+ var Ids = this.getParentsId(elm);
711
+ if (Ids) {
712
+ keyFields.push(Ids);
713
+ }
714
+ });
715
+ return keyFields;
716
+ }
717
+ }
718
+ AXTreeViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXTreeViewComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
719
+ AXTreeViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: { selectionMode: "selectionMode", selectionLevel: "selectionLevel", selectedFieldName: "selectedFieldName", checkParents: "checkParents", checkChilds: "checkChilds", seletedKeyFields: "seletedKeyFields", keyField: "keyField", hasChildField: "hasChildField", bordered: "bordered", lazyLoading: "lazyLoading", allowDrag: "allowDrag", size: "size", disabled: "disabled", selectableField: "selectableField", contextMenuItems: "contextMenuItems" }, outputs: { selectionChanged: "selectionChanged", seletedKeyFieldsChanged: "seletedKeyFieldsChanged", onItemOpening: "onItemOpening", onItemClick: "onItemClick", onItemClosing: "onItemClosing", onItemDrag: "onItemDrag", onItemMoved: "onItemMoved", onContextMenuItemClick: "onContextMenuItemClick" }, queries: [{ propertyName: "nodeTemplate", first: true, predicate: TemplateRef, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ul class=\"ax treeview {{size}}\">\r\n <ng-template #recursiveList let-list>\r\n <ng-container *ngFor=\"let item of list\">\r\n <li class=\"active {{item[hasChildField] ? '':'node'}}\" [class.bordered]=\"bordered\"\r\n [class.selected]=\"item.select\" [draggable]=\"allowDrag\" (dragstart)=\"onDragStart($event, item)\"\r\n [attr.data-id]=\"item[keyField]\" (dragleave)=\"onDragEnd($event,item)\" (dragend)=drop($event)>\r\n <div [class.disabled]=\"disabled\" axContextMenu [contextDataItem]=\"item\"\r\n [contextMenuItems]=\"contextMenuItems\" [contextMenu]=\"menu\"\r\n (onContextMenuItemClick)=\"handleOnContextMenuItem($event)\"\r\n style=\"display: flex; cursor: pointer;align-items: center;\">\r\n <div class=\"start-side\">\r\n <div *ngIf=\"item[hasChildField]\" class=\"collapse-icon\"\r\n (click)=\"handleOnNodeClick($event,item,true)\">\r\n <i class=\"fal\"\r\n [ngClass]=\"{'fa-minus': !!item.toggle , 'fa-plus': !item.toggle , 'fa-spinner fa-spin':item.loading }\"></i>\r\n </div>\r\n\r\n <ax-check-box *ngIf=\"showSelectBox\" [disabled]=\"item.disabledCheckBox || disabled\" [size]=\"size\"\r\n [indeterminate]=\"true\" [value]=\"item.select\" (onClick)=\"internalSelectItem(item)\">\r\n </ax-check-box>\r\n\r\n\r\n </div>\r\n <div class=\"text-list\" (click)=\"nodeClick(item)\" (dblclick)=\"itemdbClick($event,item)\">\r\n <ng-container *ngIf=\"nodeTemplate; else elseTemplate\">\r\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context:{ $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n {{item.title}}\r\n </ng-template>\r\n </div>\r\n </div>\r\n <ul *ngIf=\"item.loading\">\r\n <i class=\"far \"></i>\r\n </ul>\r\n <ul class=\"child\" *ngIf=\"item.toggle\" style=\"background-color: white !important;\">\r\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: item.childeren }\">\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: list }\"></ng-container>\r\n</ul>\r\n\r\n<ax-context-menu #menu></ax-context-menu>", components: [{ type: i1.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["readonly", "disabled", "size", "label", "tabIndex", "indeterminate", "value"], outputs: ["onValueChanged", "valueChange", "onClick"] }, { type: i2.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["size", "width", "items"], outputs: ["onItemClick", "onClosed"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.AXContextMenuDirective, selector: "[axContextMenu]", inputs: ["contextMenu", "contextDataItem", "contextMenuItems", "rtl"], outputs: ["onContextMenuItemClick"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], encapsulation: i0.ViewEncapsulation.None });
720
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXTreeViewComponent, decorators: [{
721
+ type: Component,
722
+ args: [{ selector: 'ax-tree-view', encapsulation: ViewEncapsulation.None, template: "<ul class=\"ax treeview {{size}}\">\r\n <ng-template #recursiveList let-list>\r\n <ng-container *ngFor=\"let item of list\">\r\n <li class=\"active {{item[hasChildField] ? '':'node'}}\" [class.bordered]=\"bordered\"\r\n [class.selected]=\"item.select\" [draggable]=\"allowDrag\" (dragstart)=\"onDragStart($event, item)\"\r\n [attr.data-id]=\"item[keyField]\" (dragleave)=\"onDragEnd($event,item)\" (dragend)=drop($event)>\r\n <div [class.disabled]=\"disabled\" axContextMenu [contextDataItem]=\"item\"\r\n [contextMenuItems]=\"contextMenuItems\" [contextMenu]=\"menu\"\r\n (onContextMenuItemClick)=\"handleOnContextMenuItem($event)\"\r\n style=\"display: flex; cursor: pointer;align-items: center;\">\r\n <div class=\"start-side\">\r\n <div *ngIf=\"item[hasChildField]\" class=\"collapse-icon\"\r\n (click)=\"handleOnNodeClick($event,item,true)\">\r\n <i class=\"fal\"\r\n [ngClass]=\"{'fa-minus': !!item.toggle , 'fa-plus': !item.toggle , 'fa-spinner fa-spin':item.loading }\"></i>\r\n </div>\r\n\r\n <ax-check-box *ngIf=\"showSelectBox\" [disabled]=\"item.disabledCheckBox || disabled\" [size]=\"size\"\r\n [indeterminate]=\"true\" [value]=\"item.select\" (onClick)=\"internalSelectItem(item)\">\r\n </ax-check-box>\r\n\r\n\r\n </div>\r\n <div class=\"text-list\" (click)=\"nodeClick(item)\" (dblclick)=\"itemdbClick($event,item)\">\r\n <ng-container *ngIf=\"nodeTemplate; else elseTemplate\">\r\n <ng-container *ngTemplateOutlet=\"nodeTemplate; context:{ $implicit: item }\"></ng-container>\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n {{item.title}}\r\n </ng-template>\r\n </div>\r\n </div>\r\n <ul *ngIf=\"item.loading\">\r\n <i class=\"far \"></i>\r\n </ul>\r\n <ul class=\"child\" *ngIf=\"item.toggle\" style=\"background-color: white !important;\">\r\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: item.childeren }\">\r\n </ng-container>\r\n </ul>\r\n </li>\r\n </ng-container>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"recursiveList; context:{ $implicit: list }\"></ng-container>\r\n</ul>\r\n\r\n<ax-context-menu #menu></ax-context-menu>" }]
723
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { nodeTemplate: [{
724
+ type: ContentChild,
725
+ args: [TemplateRef, { static: true }]
726
+ }], _contentDataSource: [{
727
+ type: ContentChild,
728
+ args: [AXDataSourceComponent, { static: true }]
729
+ }], selectionMode: [{
730
+ type: Input
731
+ }], selectionLevel: [{
732
+ type: Input
733
+ }], selectedFieldName: [{
734
+ type: Input
735
+ }], checkParents: [{
736
+ type: Input
737
+ }], checkChilds: [{
738
+ type: Input
739
+ }], seletedKeyFields: [{
740
+ type: Input
741
+ }], keyField: [{
742
+ type: Input
743
+ }], hasChildField: [{
744
+ type: Input
745
+ }], bordered: [{
746
+ type: Input
747
+ }], lazyLoading: [{
748
+ type: Input
749
+ }], allowDrag: [{
750
+ type: Input
751
+ }], size: [{
752
+ type: Input
753
+ }], disabled: [{
754
+ type: Input
755
+ }], selectionChanged: [{
756
+ type: Output
757
+ }], seletedKeyFieldsChanged: [{
758
+ type: Output
759
+ }], onItemOpening: [{
760
+ type: Output
761
+ }], onItemClick: [{
762
+ type: Output
763
+ }], onItemClosing: [{
764
+ type: Output
765
+ }], onItemDrag: [{
766
+ type: Output
767
+ }], onItemMoved: [{
768
+ type: Output
769
+ }], selectableField: [{
770
+ type: Input
771
+ }], onContextMenuItemClick: [{
772
+ type: Output
773
+ }], contextMenuItems: [{
774
+ type: Input
775
+ }] } });
776
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb21wb25lbnRzL3NyYy9saWIvdHJlZS12aWV3L3RyZWUtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29tcG9uZW50cy9zcmMvbGliL3RyZWUtdmlldy90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQWUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7O0FBSXhELE1BQU0sT0FBTyxjQUFjO0lBQTNCO1FBRUUsYUFBUSxHQUF1QixJQUFJLGtCQUFrQixFQUFFLENBQUM7SUFFMUQsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLGtCQUFrQjtDQVE5QjtBQUVELE1BQU0sT0FBTyx3QkFBd0I7Q0FJcEM7QUFFRCxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsWUFBNEI7Q0FFaEY7QUFFRCxNQUFNLE9BQU8sc0NBQXVDLFNBQVEsWUFBNEI7Q0FFdkY7QUFFRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBdUI7Q0FLL0Q7QUFPRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsZUFBZTtJQWtHdEQsWUFBb0IsR0FBZTtRQUNqQyxLQUFLLEVBQUUsQ0FBQztRQURVLFFBQUcsR0FBSCxHQUFHLENBQVk7UUExRm5DLGtCQUFhLEdBQTBC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S0FBSztnQkFJTixnQkFBZ0I7c0JBRGYsTUFBTTtnQkFJUCx1QkFBdUI7c0JBRHRCLE1BQU07Z0JBSVAsYUFBYTtzQkFEWixNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTTtnQkFJUCxhQUFhO3NCQURaLE1BQU07Z0JBSVAsVUFBVTtzQkFEVCxNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTTtnQkFJUCxlQUFlO3NCQURkLEtBQUs7Z0JBSU4sc0JBQXNCO3NCQURyQixNQUFNO2dCQW9CUCxnQkFBZ0I7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBDb250ZW50Q2hpbGQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFYRGF0YVNvdXJjZUNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGEtc291cmNlL2RhdGFzb3VyY2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhEYXRhRXZlbnQsIEFYSHRtbEV2ZW50LCBBWFZhbHVlRXZlbnQgfSBmcm9tICcuLi9iYXNlL2V2ZW50cy5jbGFzcyc7XHJcbmltcG9ydCB7IEFYQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UvZWxlbWVudC5jbGFzcyc7XHJcbmltcG9ydCB7IEFYQ29udGV4dE1lbnVJdGVtQ2xpY2tFdmVudCwgQVhDb250ZXh0TWVudVByb21pc2VGdW5jdGlvbiwgQVhDb250ZXh0TWVudUZ1bmN0aW9uIH0gZnJvbSAnLi4vY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBBWE1lbnVJdGVtIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBWFRyZWVWaWV3Tm9kZSB7XHJcbiAgY2hpbGRyZW46IEFYVHJlZVZpZXdOb2RlW107XHJcbiAgaXRlbURhdGE6IEFYVHJlZVZpZXdJdGVtRGF0YSA9IG5ldyBBWFRyZWVWaWV3SXRlbURhdGEoKTtcclxuICBwYXJlbnQ6IEFYVHJlZVZpZXdOb2RlO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQVhUcmVlVmlld0l0ZW1EYXRhIHtcclxuICBzZWxlY3RlZDogYm9vbGVhbjtcclxuICBpbmRldGVybWluYXRlOiBib29sZWFuO1xyXG4gIGtleTogc3RyaW5nO1xyXG4gIGRpc2FibGVkOiBib29sZWFuO1xyXG4gIG9wZW46IGJvb2xlYW47XHJcbiAgaGFzQ2hpbGQ6IGJvb2xlYW47XHJcbiAgaXRlbTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQVhUcmVlVmlld0l0ZW1Nb3ZlZEV2ZW50IHtcclxuICBzb3VyY2U6IEFYVHJlZVZpZXdOb2RlO1xyXG4gIHRhcmdldDogQVhUcmVlVmlld05vZGU7XHJcbiAgcmVzb2x2ZTogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQVhUcmVlVmlld3NlbGVjdGlvbkNoYW5nZWRFdmVudCBleHRlbmRzIEFYVmFsdWVFdmVudDxBWFRyZWVWaWV3Tm9kZT4ge1xyXG4gIGNvbXBvbmVudDogQVhUcmVlVmlld0NvbXBvbmVudDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFYVHJlZVZpZXdzZWxldGVkS2V5RmllbGRzQ2hhbmdlZEV2ZW50IGV4dGVuZHMgQVhWYWx1ZUV2ZW50PEFYVHJlZVZpZXdOb2RlPiB7XHJcbiAgY29tcG9uZW50OiBBWFRyZWVWaWV3Q29tcG9uZW50O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQVhUcmVlVmlld0l0ZW1DbGljayBleHRlbmRzIEFYSHRtbEV2ZW50PE1vdXNlRXZlbnQ+IHtcclxuICBjb21wb25lbnQ6IEFYVHJlZVZpZXdDb21wb25lbnQ7XHJcbiAgaXRlbTogYW55O1xyXG4gIGZsYWc6IGJvb2xlYW47XHJcbiAgY2FuY2VsPzogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdheC10cmVlLXZpZXcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBWFRyZWVWaWV3Q29tcG9uZW50IGV4dGVuZHMgQVhCYXNlQ29tcG9uZW50IHtcclxuICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIG5vZGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChBWERhdGFTb3VyY2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgcHJpdmF0ZSBfY29udGVudERhdGFTb3VyY2U6IEFYRGF0YVNvdXJjZUNvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KClcclxuICBzZWxlY3Rpb25Nb2RlOiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgPSAnc2luZ2xlJztcclxuXHJcbiAgQElucHV0KClcclxuICBzZWxlY3Rpb25MZXZlbDogJ2FsbCcgfCAnbm9kZXMnIHwgJ3BhcmVudHMnID0gJ2FsbCc7XHJcblxyXG4gIC8vIHVzZXIgY2FuIHNldCBvbmx5IG9uZSBvZiB0aGlzIC9zZWxlY3RlZEZpZWxkTmFtZSBvciAvc2VsZXRlZEtleUZpZWxkc1xyXG4gIC8vc2VsZXRlZEtleUZpZWxkcyBzZXQgaWQgb2Ygbm9kZXMgYW5kIHBhcmVudHNcclxuICAvL3NlbGVjdGVkRmllbGROYW1lIHNldCBuYW1lIG9mIGZpZWxkcyB0aGF0IHNldCBzZWxlY3Rlc1xyXG4gIEBJbnB1dCgpXHJcbiAgc2VsZWN0ZWRGaWVsZE5hbWU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8vIEBJbnB1dCgpXHJcbiAgLy8gc2VsZWN0Tm9kZXNSZWN1cnNpdmU6ICdhbGwnIHwgJ3BhcmVudHMnIHwgJ2NoaWxkcycgfCAnbm9uZScgPSAnYWxsJzsgLy9sZWFmXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgY2hlY2tQYXJlbnRzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBjaGVja0NoaWxkczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2VsZXRlZEtleUZpZWxkczogYW55W10gPSBbXTtcclxuXHJcbiAgQElucHV0KClcclxuICBrZXlGaWVsZDogc3RyaW5nID0gJ2lkJztcclxuXHJcbiAgQElucHV0KClcclxuICBoYXNDaGlsZEZpZWxkOiBzdHJpbmcgPSAnY2hpbGQnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGJvcmRlcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgbGF6eUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGFsbG93RHJhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNpemU6ICdtZCcgfCAnc20nID0gJ21kJztcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWFRyZWVWaWV3c2VsZWN0aW9uQ2hhbmdlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhUcmVlVmlld3NlbGVjdGlvbkNoYW5nZWRFdmVudD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgc2VsZXRlZEtleUZpZWxkc0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWFRyZWVWaWV3c2VsZXRlZEtleUZpZWxkc0NoYW5nZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYVHJlZVZpZXdzZWxlY3Rpb25DaGFuZ2VkRXZlbnQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSXRlbU9wZW5pbmc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSXRlbUNsaWNrOiBFdmVudEVtaXR0ZXI8QVhUcmVlVmlld0l0ZW1DbGljaz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYVHJlZVZpZXdJdGVtQ2xpY2s+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSXRlbUNsb3Npbmc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSXRlbURyYWc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uSXRlbU1vdmVkOiBFdmVudEVtaXR0ZXI8QVhUcmVlVmlld0l0ZW1Nb3ZlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhUcmVlVmlld0l0ZW1Nb3ZlZEV2ZW50PigpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNlbGVjdGFibGVGaWVsZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uQ29udGV4dE1lbnVJdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjxBWENvbnRleHRNZW51SXRlbUNsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWENvbnRleHRNZW51SXRlbUNsaWNrRXZlbnQ+KCk7XHJcblxyXG4gIHNob3dTZWxlY3RCb3g6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGlzdDogYW55W10gPSBbXTtcclxuICBpdGVtUm93OiBhbnk7XHJcbiAgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZFBhcmVudHM6IGFueVtdID0gW107XHJcbiAgbG9hZEFsbENoaWxkcmVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGlzdExvYWQ6IGFueVtdID0gW107XHJcbiAgaXRlbURyb3A6IGFueTtcclxuICBpdGVtRHJhZzogYW55O1xyXG4gIHZhbGlkRHJvcDogYm9vbGVhbiA9IHRydWU7XHJcbiAgbG9ja2VkRHJhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoaWxkRmllbGQ6IHN0cmluZyA9ICdjaGlsZGVyZW4nO1xyXG4gIHNob3dDb250ZXh0TWVudTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzU2VsZWN0ZWRJdGVtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbG9jZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGNvbnRleHRNZW51SXRlbXM6IEFYTWVudUl0ZW1bXSB8IEFYQ29udGV4dE1lbnVQcm9taXNlRnVuY3Rpb24gfCBBWENvbnRleHRNZW51RnVuY3Rpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBFbGVtZW50UmVmKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlT25Db250ZXh0TWVudUl0ZW0oZTogQVhDb250ZXh0TWVudUl0ZW1DbGlja0V2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMub25Db250ZXh0TWVudUl0ZW1DbGljay5lbWl0KGUpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHRoaXMubGlzdCA9IFtdO1xyXG4gICAgdGhpcy5fY29udGVudERhdGFTb3VyY2UuZmV0Y2gobnVsbCk7XHJcbiAgfVxyXG5cclxuICBpbnRlcm5hbFNlbGVjdEl0ZW0oaXRlbSwgdXNlckNoYW5nZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGlmIChpdGVtW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT09IGZhbHNlIHx8IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgaXRlbS5zZWxlY3QgPSAhaXRlbS5zZWxlY3Q7XHJcbiAgICAgIGlmIChpdGVtLnBhcmVudE5vZGUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJyAmJiB0aGlzLmNoZWNrUGFyZW50cyA9PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VQYXJlbnRTZWxlY3QoaXRlbS5wYXJlbnROb2RlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXRlbS5zZWxlY3QgPT09IHRydWUpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgZS5zZWxlY3QgPSBmYWxzZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGl0ZW1bdGhpcy5rZXlGaWVsZF0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpdGVtLnNlbGVjdCA9ICFpdGVtLnNlbGVjdDtcclxuXHJcbiAgICAgIGlmIChpdGVtLnBhcmVudE5vZGUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGlwbGUnICYmIHRoaXMuY2hlY2tQYXJlbnRzID09IHRydWUpIHtcclxuICAgICAgICB0aGlzLmNoYW5nZVBhcmVudFNlbGVjdChpdGVtLnBhcmVudE5vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZScgJiYgdGhpcy5jaGVja0NoaWxkcyA9PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VDaGlsZFNlbGVjdChpdGVtLCBpdGVtLnNlbGVjdCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpdGVtLnNlbGVjdCA9PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMgPSB0aGlzLnNlbGVjdGVkUGFyZW50cy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGl0ZW1bdGhpcy5rZXlGaWVsZF0pO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMucHVzaChpdGVtKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICBlLnNlbGVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMgPSB0aGlzLnNlbGVjdGVkUGFyZW50cy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGl0ZW1bdGhpcy5rZXlGaWVsZF0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodXNlckNoYW5nZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLm1ha2VOb2RlKGl0ZW0pLFxyXG4gICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYWtlTm9kZShpdGVtLCBhZGRDaGlsZHJlbjogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IG5vZGU6IEFYVHJlZVZpZXdOb2RlID0gbmV3IEFYVHJlZVZpZXdOb2RlKCk7XHJcbiAgICBpZiAoYWRkQ2hpbGRyZW4pIHtcclxuICAgICAgbm9kZS5jaGlsZHJlbiA9IGl0ZW1bdGhpcy5jaGlsZEZpZWxkXSA9PT0gdW5kZWZpbmVkID8gW10gOiBpdGVtW3RoaXMuY2hpbGRGaWVsZF0/Lm1hcCgobSkgPT4gdGhpcy5tYWtlTm9kZShtKSk7XHJcbiAgICB9XHJcbiAgICBub2RlLml0ZW1EYXRhLmRpc2FibGVkID0gaXRlbS5kaXNhYmxlZCA9PT0gdHJ1ZSA/IGl0ZW0uZGlzYWJsZWQgOiBmYWxzZTtcclxuICAgIG5vZGUuaXRlbURhdGEub3BlbiA9IGl0ZW0ub3BlbiA9PT0gdHJ1ZSA/IGl0ZW0ub3BlbiA6IGZhbHNlO1xyXG4gICAgbm9kZS5pdGVtRGF0YS5rZXkgPSBpdGVtW3RoaXMua2V5RmllbGRdO1xyXG5cclxuICAgIGNvbnN0IGMgPSBbXTtcclxuICAgIGxldCBpID0gMDtcclxuICAgIGZvciAodmFyIGsgaW4gaXRlbSkge1xyXG4gICAgICBpID0gaSArIDE7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBrICE9ICdzZWxlY3QnICYmXHJcbiAgICAgICAgayAhPSAnaGFzQ2hpbGQnICYmXHJcbiAgICAgICAgayAhPSAnbG9hZGluZycgJiZcclxuICAgICAgICBrICE9ICdyZXF1ZXN0SWQnICYmXHJcbiAgICAgICAgayAhPSAnZGlzYWJsZWQnICYmXHJcbiAgICAgICAgayAhPSAnb3BlbicgJiZcclxuICAgICAgICBrICE9ICdwYXJlbnROb2RlJyAmJlxyXG4gICAgICAgIGsgIT0gJ3RvZ2dsZScgJiZcclxuICAgICAgICBrICE9ICdsb2FkZWQnICYmXHJcbiAgICAgICAgayAhPSAnaW5kZXRlcm1pbmF0ZScgJiZcclxuICAgICAgICBrICE9IHRoaXMuY2hpbGRGaWVsZFxyXG4gICAgICApIHtcclxuICAgICAgICAvL2MucHVzaCh7IGs6IGl0ZW1ba10gfSk7XHJcbiAgICAgICAgY1trXSA9IGl0ZW1ba107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBub2RlLml0ZW1EYXRhLml0ZW0gPSBjOyAvL1RPIERPXHJcbiAgICBub2RlLml0ZW1EYXRhLnNlbGVjdGVkID0gaXRlbS5zZWxlY3QgPT09IHRydWUgPyBpdGVtLnNlbGVjdCA6IGZhbHNlO1xyXG4gICAgbm9kZS5pdGVtRGF0YS5pbmRldGVybWluYXRlID0gaXRlbS5zZWxlY3QgPT09IG51bGwgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBub2RlLml0ZW1EYXRhLmhhc0NoaWxkID0gaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdO1xyXG4gICAgbm9kZS5wYXJlbnQgPSBpdGVtLnBhcmVudE5vZGUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB0aGlzLm1ha2VOb2RlKGl0ZW0ucGFyZW50Tm9kZSwgZmFsc2UpO1xyXG4gICAgaWYgKG5vZGUucGFyZW50ICE9IG51bGwpIHtcclxuICAgICAgKG5vZGUucGFyZW50IGFzIGFueSkuc2VsZWN0UGFyZW50ID0gKCkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnBhcmVudE5vZGVbJ3NlbGVjdCddICE9IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxTZWxlY3RJdGVtKGl0ZW0ucGFyZW50Tm9kZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICAobm9kZS5wYXJlbnQgYXMgYW55KS51blNlbGVjdFBhcmVudCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5wYXJlbnROb2RlWydzZWxlY3QnXSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLmludGVybmFsU2VsZWN0SXRlbShpdGVtLnBhcmVudE5vZGUsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChub2RlLmNoaWxkcmVuICE9IG51bGwgJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIChub2RlLmNoaWxkcmVuIGFzIGFueSkuc2VsZWN0Q2hpbGRzID0gKCkgPT4ge1xyXG4gICAgICAgIGl0ZW0uY2hpbGRlcmVuLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgIGlmIChlbGVtZW50WydzZWxlY3QnXSAhPSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxTZWxlY3RJdGVtKGVsZW1lbnQsIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9O1xyXG4gICAgICAobm9kZS5jaGlsZHJlbiBhcyBhbnkpLnVuU2VsZWN0Q2hpbGRzID0gKCkgPT4ge1xyXG4gICAgICAgIGl0ZW0uY2hpbGRlcmVuLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgIGlmIChlbGVtZW50WydzZWxlY3QnXSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxTZWxlY3RJdGVtKGVsZW1lbnQsIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoYW5nZUNoaWxkU2VsZWN0KGl0ZW0sIHMpIHtcclxuICAgIC8vIGlmICh0aGlzLnNlbGVjdE5vZGVzUmVjdXJzaXZlID09ICdhbGwnIHx8IHRoaXMuc2VsZWN0Tm9kZXNSZWN1cnNpdmUgPT0gJ2NoaWxkcycpIHtcclxuICAgIGlmICh0aGlzLmNoZWNrQ2hpbGRzID09IHRydWUpIHtcclxuICAgICAgaXRlbS5zZWxlY3QgPSBzO1xyXG4gICAgICBpZiAoaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSB0cnVlICYmIGl0ZW1bdGhpcy5jaGlsZEZpZWxkXSAmJiBpdGVtW3RoaXMuY2hpbGRGaWVsZF0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGl0ZW1bdGhpcy5jaGlsZEZpZWxkXS5mb3JFYWNoKChlbG0pID0+IHtcclxuICAgICAgICAgIGlmIChlbG1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBlbG0uc2VsZWN0ID0gcztcclxuXHJcbiAgICAgICAgICAgIGlmIChzID09PSB0cnVlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cyA9IHRoaXMuc2VsZWN0ZWRQYXJlbnRzLmZpbHRlcigoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPT0gZWxtW3RoaXMua2V5RmllbGRdKTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cy5wdXNoKGVsbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHMgPT09IGZhbHNlICYmIHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cyA9IHRoaXMuc2VsZWN0ZWRQYXJlbnRzLmZpbHRlcigoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPT0gZWxtW3RoaXMua2V5RmllbGRdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZUNoaWxkU2VsZWN0KGVsbSwgcyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlbG0uc2VsZWN0ID0gcztcclxuICAgICAgICAgICAgaWYgKHMgPT09IHRydWUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGVsbVt0aGlzLmtleUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goZWxtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocyA9PT0gZmFsc2UgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGVsbVt0aGlzLmtleUZpZWxkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpdGVtLnNlbGVjdCA9IHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hhbmdlUGFyZW50U2VsZWN0KGl0ZW0pIHtcclxuICAgIC8vaWYgKHRoaXMuc2VsZWN0Tm9kZXNSZWN1cnNpdmUgPT0gJ2FsbCcgfHwgdGhpcy5zZWxlY3ROb2Rlc1JlY3Vyc2l2ZSA9PSAncGFyZW50cycpIHtcclxuICAgIGlmICh0aGlzLmNoZWNrUGFyZW50cykge1xyXG4gICAgICBsZXQgYWxsc2VsZWN0ID0gdHJ1ZTtcclxuICAgICAgbGV0IGFsbGRlc2VsZWN0ID0gdHJ1ZTtcclxuICAgICAgbGV0IG9uZXNlbGVjdCA9IGZhbHNlO1xyXG4gICAgICBsZXQgaXNpbmRldGVybWluYXRlID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAoaXRlbVt0aGlzLmNoaWxkRmllbGRdKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGl0ZW1bdGhpcy5jaGlsZEZpZWxkXS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgIGlmIChpdGVtW3RoaXMuY2hpbGRGaWVsZF1baW5kZXhdLnNlbGVjdCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBhbGxkZXNlbGVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBvbmVzZWxlY3QgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW1bdGhpcy5jaGlsZEZpZWxkXVtpbmRleF0uc2VsZWN0ID09PSBmYWxzZSB8fCBpdGVtW3RoaXMuY2hpbGRGaWVsZF1baW5kZXhdLnNlbGVjdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGFsbHNlbGVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW1bdGhpcy5jaGlsZEZpZWxkXVtpbmRleF0uc2VsZWN0ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlzaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGFsbGRlc2VsZWN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG9uZXNlbGVjdCA9IHRydWU7XHJcbiAgICAgICAgICAgIGFsbHNlbGVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG9uZXNlbGVjdCB8fCAoaXNpbmRldGVybWluYXRlICYmICFhbGxzZWxlY3QpKSB7XHJcbiAgICAgICAgaXRlbS5zZWxlY3QgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzID0gdGhpcy5zZWxlY3RlZFBhcmVudHMuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9PSBpdGVtW3RoaXMua2V5RmllbGRdKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50cy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhbGxzZWxlY3QgPT09IHRydWUpIHtcclxuICAgICAgICBpdGVtLnNlbGVjdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMgPSB0aGlzLnNlbGVjdGVkUGFyZW50cy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGl0ZW1bdGhpcy5rZXlGaWVsZF0pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFsbGRlc2VsZWN0ID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMgPSB0aGlzLnNlbGVjdGVkUGFyZW50cy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGl0ZW1bdGhpcy5rZXlGaWVsZF0pO1xyXG4gICAgICAgIGl0ZW0uc2VsZWN0ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGl0ZW0ucGFyZW50Tm9kZSAmJiBpdGVtLnBhcmVudE5vZGVbdGhpcy5jaGlsZEZpZWxkXSAmJiBpdGVtLnBhcmVudE5vZGVbdGhpcy5jaGlsZEZpZWxkXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VQYXJlbnRTZWxlY3QoaXRlbS5wYXJlbnROb2RlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uSXRlbUNsaWNrLnN1YnNjcmliZSgoZGF0YTogQVhUcmVlVmlld0l0ZW1DbGljaykgPT4ge1xyXG4gICAgICBpZiAoIWRhdGEuY2FuY2VsKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVOb2RlKGRhdGEuaXRlbSwgZGF0YS5mbGFnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpdGVtZGJDbGljayhlOiBNb3VzZUV2ZW50LCBpdGVtKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09ICdzaW5nbGUnKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlT25Ob2RlQ2xpY2soZSwgaXRlbSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVPbk5vZGVDbGljayhlOiBNb3VzZUV2ZW50LCBpdGVtLCBmbGFnID0gZmFsc2UpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vICB0aGlzLmludGVybmFsU2VsZWN0SXRlbShpdGVtKTtcclxuICAgIHRoaXMub25JdGVtQ2xpY2suZW1pdCh7XHJcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgaHRtbEV2ZW50OiBlLFxyXG4gICAgICBpdGVtLFxyXG4gICAgICBmbGFnXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5vZGVDbGljayhpdGVtKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmIChpdGVtW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnRvZ2dsZU5vZGUoaXRlbSwgdHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludGVybmFsU2VsZWN0SXRlbShpdGVtLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZU5vZGUoaXRlbSwgZmxhZyA9IGZhbHNlKSB7XHJcbiAgICAvL2l0ZW1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gZmFsc2UgJiZcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnICYmICFmbGFnKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkxldmVsID09ICdub2RlcycgJiYgaXRlbS5oYXNDaGlsZCA9PSB0cnVlKSB7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbFNlbGVjdEl0ZW0oaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGl0ZW0udG9nZ2xlID0gIWl0ZW0udG9nZ2xlO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkxldmVsID09ICdub2RlcycgJiYgaXRlbS5oYXNDaGlsZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxTZWxlY3RJdGVtKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGl0ZW1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gdHJ1ZSAmJiBpdGVtLmxvYWRlZCAhPT0gdHJ1ZSAmJiB0aGlzLmxhenlMb2FkaW5nKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtUm93ID0gaXRlbTtcclxuICAgICAgICBjb25zdCB1aWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDApO1xyXG4gICAgICAgIGl0ZW0ucmVxdWVzdElkID0gdWlkO1xyXG4gICAgICAgIHRoaXMubGlzdExvYWQucHVzaChpdGVtKTtcclxuICAgICAgICB0aGlzLl9jb250ZW50RGF0YVNvdXJjZS5mZXRjaChpdGVtKTtcclxuICAgICAgICB0aGlzLnNob3dMb2FkaW5nKHRoaXMuaXRlbVJvdyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGl0ZW0udG9nZ2xlICYmIGl0ZW1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGl0ZW0ub3BlbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbkl0ZW1PcGVuaW5nLmVtaXQodGhpcy5tYWtlTm9kZShpdGVtKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIWl0ZW0udG9nZ2xlICYmIGl0ZW1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGl0ZW0ub3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub25JdGVtQ2xvc2luZy5lbWl0KHRoaXMubWFrZU5vZGUoaXRlbSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgbGV2ZWxDb3VudDogbnVtYmVyID0gMDtcclxuICBnZXRMZXZlbChpdGVtKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBkZWJ1Z2dlclxyXG4gICAgICBpZiAoaXRlbS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgdGhpcy5sZXZlbENvdW50ID0gdGhpcy5sZXZlbENvdW50ICsgMTtcclxuICAgICAgICB0aGlzLmdldExldmVsKGl0ZW0ucGFyZW50Tm9kZSkudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICByZXNvbHZlKHRoaXMubGV2ZWxDb3VudCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxldmVsQ291bnQgPSB0aGlzLmxldmVsQ291bnQgKyAxO1xyXG4gICAgICAgIHJlc29sdmUodGhpcy5sZXZlbENvdW50KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5fY29udGVudERhdGFTb3VyY2UuZmV0Y2gobnVsbCk7XHJcbiAgICB0aGlzLl9jb250ZW50RGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZC5zdWJzY3JpYmUoKF9kYXRhKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmxpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5oaWRlTG9hZGluZyhudWxsKTtcclxuICAgICAgICB0aGlzLmxpc3QgPSBfZGF0YS5kYXRhLnJlc3VsdDtcclxuXHJcbiAgICAgICAgdGhpcy5saXN0LmZvckVhY2goKGVsKSA9PiB7XHJcbiAgICAgICAgICBlbC5kaXNhYmxlZENoZWNrQm94ID0gdGhpcy5zZWxlY3RhYmxlRmllbGQgIT0gJycgPyAoZWxbdGhpcy5zZWxlY3RhYmxlRmllbGRdID8gZWxbdGhpcy5zZWxlY3RhYmxlRmllbGRdIDogZmFsc2UpIDogZmFsc2U7XHJcbiAgICAgICAgICBlbC5zZWxlY3QgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25MZXZlbCA9PSAnbm9kZXMnICYmIGVsW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBlbC5kaXNhYmxlZENoZWNrQm94ID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25MZXZlbCA9PSAncGFyZW50cycgJiYgZWxbdGhpcy5oYXNDaGlsZEZpZWxkXSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBlbC5kaXNhYmxlZENoZWNrQm94ID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnNlbGV0ZWRLZXlGaWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGV0ZWRLZXlGaWVsZHMuZm9yRWFjaCgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG4uaW5jbHVkZXMoZWxbdGhpcy5rZXlGaWVsZF0pKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxbdGhpcy5oYXNDaGlsZEZpZWxkXSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICgoKHRoaXMuY2hlY2tQYXJlbnRzID09IGZhbHNlICYmIHRoaXMuY2hlY2tDaGlsZHMgPT0gZmFsc2UpIHx8IHRoaXMuY2hlY2tDaGlsZHMgPT0gZmFsc2UpICYmIG4ubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL3NlbGVjdCBwYXJlbnQgd2hlbiBjaGVjayBjaGlsZCBhbmQgY2hlY2sgcGFyZW50IGlzIGZhbHNlIFRPRE8gY2hlY2sgdGhpcyBBY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oZWwpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMub3BlbihlbCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oZWwpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0ZWRJdGVtID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRmllbGROYW1lICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT0gdHJ1ZSAmJiBlbFt0aGlzLnNlbGVjdGVkRmllbGROYW1lXSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCh0aGlzLmNoZWNrUGFyZW50cyA9PSBmYWxzZSAmJiB0aGlzLmNoZWNrQ2hpbGRzID09IGZhbHNlKSB8fCB0aGlzLmNoZWNrQ2hpbGRzID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAvL3NlbGVjdCBwYXJlbnQgd2hlbiBjaGVjayBjaGlsZCBhbmQgY2hlY2sgcGFyZW50IGlzIGZhbHNlIFRPRE8gY2hlY2sgdGhpcyBBY3Rpb25cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShlbCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMub3BlbihlbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxbdGhpcy5zZWxlY3RlZEZpZWxkTmFtZV0gPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShlbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGVkSXRlbSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLml0ZW1Sb3cgPSB0aGlzLmxpc3RMb2FkLmZpbHRlcigoYykgPT4gYy5yZXF1ZXN0SWQgPT09IF9kYXRhLmRhdGEucmVxdWVzdElkKVswXTtcclxuICAgICAgICB0aGlzLmxpc3RMb2FkID0gdGhpcy5saXN0TG9hZC5maWx0ZXIoKGMpID0+IGMucmVxdWVzdElkICE9PSBfZGF0YS5kYXRhLnJlcXVlc3RJZCk7XHJcbiAgICAgICAgdGhpcy5pdGVtUm93LmxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbVJvdyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmhpZGVMb2FkaW5nKHRoaXMuaXRlbVJvdyk7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBfZGF0YS5kYXRhLnJlc3VsdDtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5saXN0Lmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtUm93W3RoaXMuY2hpbGRGaWVsZF0gJiYgdGhpcy5pdGVtUm93W3RoaXMuY2hpbGRGaWVsZF0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHJlc3VsdC5mb3JFYWNoKChlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWwuZGlzYWJsZWRDaGVja0JveCA9IHRoaXMuc2VsZWN0YWJsZUZpZWxkICE9ICcnID8gKGVsW3RoaXMuc2VsZWN0YWJsZUZpZWxkXSA/IGVsW3RoaXMuc2VsZWN0YWJsZUZpZWxkXSA6IGZhbHNlKSA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gZWwuZGlzYWJsZWRDaGVja0JveCA9IHRoaXMuc2VsZWN0YWJsZUZpZWxkICE9ICcnID8gZWxbdGhpcy5zZWxlY3RhYmxlRmllbGRdIDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1Sb3dbdGhpcy5jaGlsZEZpZWxkXVt0aGlzLml0ZW1Sb3dbdGhpcy5jaGlsZEZpZWxkXS5sZW5ndGhdID0gZWw7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtUm93W3RoaXMuY2hpbGRGaWVsZF0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0W2ldLmRpc2FibGVkQ2hlY2tCb3ggPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RhYmxlRmllbGQgIT0gJycgPyAocmVzdWx0W2ldW3RoaXMuc2VsZWN0YWJsZUZpZWxkXSA/IHJlc3VsdFtpXVt0aGlzLnNlbGVjdGFibGVGaWVsZF0gOiBmYWxzZSkgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTGV2ZWwgPT0gJ25vZGVzJyAmJiByZXN1bHRbaV1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRbaV0uZGlzYWJsZWRDaGVja0JveCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkxldmVsID09ICdwYXJlbnRzJyAmJiByZXN1bHRbaV1bdGhpcy5oYXNDaGlsZEZpZWxkXSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W2ldLmRpc2FibGVkQ2hlY2tCb3ggPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJyAmJiAodGhpcy5zZWxlY3ROb2Rlc1JlY3Vyc2l2ZSA9PSAnYWxsJyB8fCB0aGlzLnNlbGVjdE5vZGVzUmVjdXJzaXZlID09ICdjaGlsZHMnKSkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICdzaW5nbGUnICYmIHRoaXMuY2hlY2tDaGlsZHMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W2ldLnNlbGVjdCA9IHRoaXMuaXRlbVJvdy5zZWxlY3QgPT09ICh1bmRlZmluZWQgfHwgbnVsbCkgPyBmYWxzZSA6IHRoaXMuaXRlbVJvdy5zZWxlY3Q7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbVJvdy5zZWxlY3QgPT09IHRydWUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlID09ICdtdWx0aXBsZScgJiYgcmVzdWx0W2ldW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IHJlc3VsdFtpXVt0aGlzLmtleUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHJlc3VsdFtpXSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbVJvdy5zZWxlY3QgPT09IHRydWUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlID09ICdtdWx0aXBsZScgJiYgcmVzdWx0W2ldW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMgPSB0aGlzLnNlbGVjdGVkUGFyZW50cy5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IHJlc3VsdFtpXVt0aGlzLmtleUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRzLnB1c2gocmVzdWx0W2ldKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W2ldLnNlbGVjdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXN1bHRbaV0ucGFyZW50Tm9kZSA9IHRoaXMuaXRlbVJvdztcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZXRlZEtleUZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGV0ZWRLZXlGaWVsZHMuZm9yRWFjaCgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChuLmluY2x1ZGVzKHJlc3VsdFtpXVt0aGlzLmtleUZpZWxkXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0W2ldW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT0gdHJ1ZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxDb3VudCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRMZXZlbChyZXN1bHRbaV0pLnRoZW4oKHJlc0xldmVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrUGFyZW50cyA9PSBmYWxzZSAmJiB0aGlzLmNoZWNrQ2hpbGRzID09IGZhbHNlICYmIG4ubGVuZ3RoID09IHRoaXMubGV2ZWxDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vc2VsZWN0IHBhcmVudCB3aGVuIGNoZWNrIGNoaWxkIGFuZCBjaGVjayBwYXJlbnQgaXMgZmFsc2UgVE9ETyBjaGVjayB0aGlzIEFjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShyZXN1bHRbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4ocmVzdWx0W2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKHJlc3VsdFtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0ZWRJdGVtID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEZpZWxkTmFtZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0W2ldW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT0gdHJ1ZSAmJiByZXN1bHRbaV1bdGhpcy5zZWxlY3RlZEZpZWxkTmFtZV0gPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja1BhcmVudHMgPT0gZmFsc2UgJiYgdGhpcy5jaGVja0NoaWxkcyA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vc2VsZWN0IHBhcmVudCB3aGVuIGNoZWNrIGNoaWxkIGFuZCBjaGVjayBwYXJlbnQgaXMgZmFsc2UgVE9ETyBjaGVjayB0aGlzIEFjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShyZXN1bHRbaV0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMub3BlbihyZXN1bHRbaV0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRbaV1bdGhpcy5zZWxlY3RlZEZpZWxkTmFtZV0gPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0ocmVzdWx0W2ldKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdGVkSXRlbSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbVJvdy5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZEl0ZW0gPT0gdHJ1ZSAmJiAhdGhpcy5sb2NlZCkge1xyXG4gICAgICAgIHRoaXMubG9jZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2VsZXRlZEtleUZpZWxkc0NoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXHJcbiAgICAgICAgICAvLyB2YWx1ZTogdGhpcy5tYWtlTm9kZShpdGVtKSxcclxuICAgICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcclxuICAgICAgdGhpcy5zaG93U2VsZWN0Qm94ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIG9uSXRlbUNsaWNrKGUsIHYpIHtcclxuXHJcbiAgLy8gfVxyXG5cclxuICBvbkRyYWdTdGFydChlOiBFdmVudCwgdikge1xyXG4gICAgaWYgKCF0aGlzLmxvY2tlZERyYWcpIHtcclxuICAgICAgdGhpcy5pdGVtRHJhZyA9IHY7XHJcbiAgICAgIHRoaXMub25JdGVtRHJhZy5lbWl0KHYpO1xyXG4gICAgfVxyXG4gICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ0VuZChlLCB2KSB7XHJcbiAgICBpZiAoIXRoaXMubG9ja2VkRHJhZykge1xyXG4gICAgICB0aGlzLml0ZW1Ecm9wID0gdjtcclxuICAgIH1cclxuICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBkcm9wKGUpIHtcclxuICAgIC8vICB0aGlzLm9uSXRlbURyb3AuZW1pdCh0aGlzLml0ZW1Ecm9wKTtcclxuICAgIGlmICghdGhpcy5sb2NrZWREcmFnKSB7XHJcbiAgICAgIHRoaXMudmFsaWREcm9wID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zYW1lQ2hpbGRlKHRoaXMuaXRlbURyYWcsIHRoaXMuaXRlbURyb3ApO1xyXG4gICAgICBpZiAodGhpcy52YWxpZERyb3AgJiYgdGhpcy5pdGVtRHJhZ1t0aGlzLmtleUZpZWxkXSAhPT0gdGhpcy5pdGVtRHJvcFt0aGlzLmtleUZpZWxkXSAmJiB0aGlzLml0ZW1EcmFnLnBhcmVudE5vZGUgIT09IHRoaXMuaXRlbURyb3ApIHtcclxuICAgICAgICBjb25zdCBtb3ZlZEV2ZW50OiBBWFRyZWVWaWV3SXRlbU1vdmVkRXZlbnQgPSBuZXcgQVhUcmVlVmlld0l0ZW1Nb3ZlZEV2ZW50KCk7XHJcbiAgICAgICAgbW92ZWRFdmVudC5zb3VyY2UgPSB0aGlzLm1ha2VOb2RlKHRoaXMuaXRlbURyYWcpO1xyXG4gICAgICAgIG1vdmVkRXZlbnQudGFyZ2V0ID0gdGhpcy5tYWtlTm9kZSh0aGlzLml0ZW1Ecm9wKTtcclxuICAgICAgICB0aGlzLmxvY2tlZERyYWcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcodGhpcy5pdGVtRHJhZyk7XHJcbiAgICAgICAgdGhpcy5zaG93TG9hZGluZyh0aGlzLml0ZW1Ecm9wKTtcclxuICAgICAgICBtb3ZlZEV2ZW50LnJlc29sdmUgPSAodmFsdWU6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgIHRoaXMuaGlkZUxvYWRpbmcodGhpcy5pdGVtRHJhZyk7XHJcbiAgICAgICAgICB0aGlzLmhpZGVMb2FkaW5nKHRoaXMuaXRlbURyb3ApO1xyXG4gICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJhZ0Ryb3BJdGVtKHRoaXMuaXRlbURyYWcsIHRoaXMuaXRlbURyb3ApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NrZWREcmFnID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9uSXRlbU1vdmVkLmVtaXQobW92ZWRFdmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgc2FtZUNoaWxkZShwYXJlbnQsIGNoaWxkKSB7XHJcbiAgICBpZiAocGFyZW50W3RoaXMuY2hpbGRGaWVsZF0gJiYgcGFyZW50W3RoaXMuY2hpbGRGaWVsZF0ubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcGFyZW50W3RoaXMuY2hpbGRGaWVsZF0ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgaWYgKHBhcmVudFt0aGlzLmNoaWxkRmllbGRdW2luZGV4XVt0aGlzLmtleUZpZWxkXSA9PSBjaGlsZFt0aGlzLmtleUZpZWxkXSkge1xyXG4gICAgICAgICAgdGhpcy52YWxpZERyb3AgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmVudFt0aGlzLmNoaWxkRmllbGRdW2luZGV4XVt0aGlzLmNoaWxkRmllbGRdICYmIHBhcmVudFt0aGlzLmNoaWxkRmllbGRdW2luZGV4XVt0aGlzLmNoaWxkRmllbGRdLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuc2FtZUNoaWxkZShwYXJlbnRbdGhpcy5jaGlsZEZpZWxkXVtpbmRleF0sIGNoaWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAocGFyZW50W3RoaXMua2V5RmllbGRdID09IGNoaWxkW3RoaXMua2V5RmllbGRdKSB7XHJcbiAgICAgIHRoaXMudmFsaWREcm9wID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmFnRHJvcEl0ZW0oaXRlbUNoaWxkLCBpdGVtUGFyZW50KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25MZXZlbCA9PSAnbm9kZXMnKSB7XHJcbiAgICAgIGl0ZW1QYXJlbnQuZGlzYWJsZWRDaGVja0JveCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGl0ZW1DaGlsZC5wYXJlbnROb2RlKSB7XHJcbiAgICAgIGl0ZW1DaGlsZC5wYXJlbnROb2RlW3RoaXMuY2hpbGRGaWVsZF0gPSBpdGVtQ2hpbGQucGFyZW50Tm9kZVt0aGlzLmNoaWxkRmllbGRdLmZpbHRlcigoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPT0gaXRlbUNoaWxkW3RoaXMua2V5RmllbGRdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubGlzdCA9IHRoaXMubGlzdC5maWx0ZXIoKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT09IGl0ZW1DaGlsZFt0aGlzLmtleUZpZWxkXSk7XHJcbiAgICB9XHJcbiAgICBpdGVtQ2hpbGQucGFyZW50Tm9kZSA9IGl0ZW1QYXJlbnQ7XHJcbiAgICBpZiAoaXRlbVBhcmVudFt0aGlzLmNoaWxkRmllbGRdICYmIGl0ZW1QYXJlbnRbdGhpcy5jaGlsZEZpZWxkXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGl0ZW1QYXJlbnRbdGhpcy5jaGlsZEZpZWxkXVtpdGVtUGFyZW50W3RoaXMuY2hpbGRGaWVsZF0ubGVuZ3RoXSA9IGl0ZW1DaGlsZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGl0ZW1QYXJlbnRbdGhpcy5jaGlsZEZpZWxkXSA9IFtdO1xyXG4gICAgICBpdGVtUGFyZW50W3RoaXMuY2hpbGRGaWVsZF1bMF0gPSBpdGVtQ2hpbGQ7XHJcbiAgICAgIGlmIChpdGVtUGFyZW50W3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLnRvZ2dsZU5vZGUoaXRlbVBhcmVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXRlbVBhcmVudC50b2dnbGUgPSAhaXRlbVBhcmVudC50b2dnbGU7XHJcbiAgICAgICAgaXRlbVBhcmVudC5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGl0ZW1QYXJlbnRbdGhpcy5oYXNDaGlsZEZpZWxkXSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoaXRlbUNoaWxkLnBhcmVudE5vZGUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJykge1xyXG4gICAgICB0aGlzLmNoYW5nZVBhcmVudFNlbGVjdChpdGVtQ2hpbGQucGFyZW50Tm9kZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvY2tlZERyYWcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdENoYW5nZShmaWVsZCwgdmFsdWUpIHtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmxpc3QubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlQ2hpbGVkKHRoaXMubGlzdFtpbmRleF0sIGZpZWxkLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvYWRBbGxDaGlsZHJlbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGFuZ2VDaGlsZWQoaXRlbSwgZmllbGQsIHZhbHVlKSB7XHJcbiAgICBpZiAoZmllbGQgPT09ICd0b2dnbGUnICYmIChpdGVtLmxvYWRlZCA9PT0gZmFsc2UgfHwgaXRlbS5sb2FkZWQgPT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgaWYgKHRoaXMubG9hZEFsbENoaWxkcmVuID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVOb2RlKGl0ZW0pO1xyXG4gICAgICAgIGl0ZW1bZmllbGRdID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGl0ZW1bZmllbGRdID0gdmFsdWU7XHJcbiAgICAgIGlmIChmaWVsZCA9PT0gJ3NlbGVjdCcgJiYgaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSBmYWxzZSAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChmaWVsZCA9PT0gJ3NlbGVjdCcgJiYgaXRlbVt0aGlzLmhhc0NoaWxkRmllbGRdID09PSB0cnVlICYmIHZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBhcmVudHMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGZpZWxkID09PSAnc2VsZWN0Jykge1xyXG4gICAgICBpdGVtLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpdGVtW3RoaXMuaGFzQ2hpbGRGaWVsZF0gPT09IHRydWUgJiYgaXRlbVt0aGlzLmNoaWxkRmllbGRdICYmIGl0ZW1bdGhpcy5jaGlsZEZpZWxkXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGl0ZW1bdGhpcy5jaGlsZEZpZWxkXS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VDaGlsZWQoZWxlbWVudCwgZmllbGQsIHZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3dMb2FkaW5nKGl0ZW0pOiB2b2lkIHtcclxuICAgIGl0ZW0ubG9hZGluZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhpZGVMb2FkaW5nKGl0ZW0pOiB2b2lkIHtcclxuICAgIGlmIChpdGVtICE9IG51bGwpIHtcclxuICAgICAgaXRlbS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlbkFsbChsb2FkQWxsOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIC8vIGlmIChsb2FkQWxsKSB7XHJcbiAgICAvLyB0aGlzLmxvYWRBbGxDaGlsZHJlbiA9IHRydWU7XHJcbiAgICAvLyB0aGlzLmxpc3RDaGFuZ2UoJ3RvZ2dsZScsIHRydWUpO1xyXG4gICAgLy99IGVsc2Uge1xyXG4gICAgdGhpcy5saXN0Q2hhbmdlKCd0b2dnbGUnLCB0cnVlKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RJdGVtKGl0ZW0pIHtcclxuICAgIGlmIChpdGVtWydzZWxlY3QnXSAhPSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxTZWxlY3RJdGVtKGl0ZW0sIGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1blNlbGVjdEl0ZW0oaXRlbSkge1xyXG4gICAgaWYgKGl0ZW1bJ3NlbGVjdCddID09IHRydWUpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbFNlbGVjdEl0ZW0oaXRlbSwgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW4oaXRlbSkge1xyXG4gICAgaWYgKGl0ZW1bJ3RvZ2dsZSddICE9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlTm9kZShpdGVtLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzY3JvbEludG9WaWV3KGl0ZW0pIHtcclxuICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlbZGF0YS1pZD0nJHtpdGVtW3RoaXMua2V5RmllbGRdfSddYCk7XHJcbiAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VBbGwoKSB7XHJcbiAgICB0aGlzLmxpc3RDaGFuZ2UoJ3RvZ2dsZScsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RBbGwoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnc2luZ2xlJykge1xyXG4gICAgICB0aGlzLmxpc3RDaGFuZ2UoJ3NlbGVjdCcsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVuU2VsZWN0QWxsKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3NpbmdsZScpIHtcclxuICAgICAgdGhpcy5saXN0Q2hhbmdlKCdzZWxlY3QnLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWxlY3RlZE5vZGVzKCk6IEFYVHJlZVZpZXdOb2RlW10ge1xyXG4gICAgY29uc3Qgc2VsZWN0SXRlbXNOb2RlID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICBzZWxlY3RJdGVtc05vZGUucHVzaCh0aGlzLm1ha2VOb2RlKGUpKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNlbGVjdEl0ZW1zTm9kZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFBhcmVudHMoKTogQVhUcmVlVmlld05vZGVbXSB7XHJcbiAgICBjb25zdCBzZWxlY3RJdGVtc1BhcmVudCA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFBhcmVudHMuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICBzZWxlY3RJdGVtc1BhcmVudC5wdXNoKHRoaXMubWFrZU5vZGUoZSkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc2VsZWN0SXRlbXNQYXJlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRQYXJlbnRzSWQoaXRlbSkge1xyXG4gICAgbGV0IGtleUZpZWxkcyA9IFtdO1xyXG4gICAga2V5RmllbGRzLnB1c2goaXRlbVt0aGlzLmtleUZpZWxkXSk7XHJcbiAgICBpZiAoaXRlbS5wYXJlbnROb2RlKSB7XHJcbiAgICAgIGtleUZpZWxkcy5wdXNoKC4uLnRoaXMuZ2V0UGFyZW50c0lkKGl0ZW0ucGFyZW50Tm9kZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleUZpZWxkcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWxlY3RlZEtleUZpZWxkcygpIHtcclxuICAgIGxldCBrZXlGaWVsZHMgPSBbXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChlbG0pID0+IHtcclxuICAgICAgdmFyIElkcyA9IHRoaXMuZ2V0UGFyZW50c0lkKGVsbSk7XHJcbiAgICAgIGlmIChJZHMpIHtcclxuICAgICAgICBrZXlGaWVsZHMucHVzaChJZHMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBrZXlGaWVsZHM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRLZXlGaWVsZHNQYXJlbnRzKCkge1xyXG4gICAgbGV0IGtleUZpZWxkcyA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFBhcmVudHMuZm9yRWFjaCgoZWxtKSA9PiB7XHJcbiAgICAgIHZhciBJZHMgPSB0aGlzLmdldFBhcmVudHNJZChlbG0pO1xyXG4gICAgICBpZiAoSWRzKSB7XHJcbiAgICAgICAga2V5RmllbGRzLnB1c2goSWRzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4ga2V5RmllbGRzO1xyXG4gIH1cclxufVxyXG4iLCI8dWwgY2xhc3M9XCJheCB0cmVldmlldyB7e3NpemV9fVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlICNyZWN1cnNpdmVMaXN0IGxldC1saXN0PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGlzdFwiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJhY3RpdmUge3tpdGVtW2hhc0NoaWxkRmllbGRdID8gJyc6J25vZGUnfX1cIiBbY2xhc3MuYm9yZGVyZWRdPVwiYm9yZGVyZWRcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cIml0ZW0uc2VsZWN0XCIgW2RyYWdnYWJsZV09XCJhbGxvd0RyYWdcIiAoZHJhZ3N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudCwgaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJpdGVtW2tleUZpZWxkXVwiIChkcmFnbGVhdmUpPVwib25EcmFnRW5kKCRldmVudCxpdGVtKVwiIChkcmFnZW5kKT1kcm9wKCRldmVudCk+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiIGF4Q29udGV4dE1lbnUgW2NvbnRleHREYXRhSXRlbV09XCJpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29udGV4dE1lbnVJdGVtc109XCJjb250ZXh0TWVudUl0ZW1zXCIgW2NvbnRleHRNZW51XT1cIm1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbkNvbnRleHRNZW51SXRlbUNsaWNrKT1cImhhbmRsZU9uQ29udGV4dE1lbnVJdGVtKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogZmxleDsgY3Vyc29yOiBwb2ludGVyO2FsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0YXJ0LXNpZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW1baGFzQ2hpbGRGaWVsZF1cIiBjbGFzcz1cImNvbGxhcHNlLWljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9uTm9kZUNsaWNrKCRldmVudCxpdGVtLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydmYS1taW51cyc6ICEhaXRlbS50b2dnbGUgLCAnZmEtcGx1cyc6ICFpdGVtLnRvZ2dsZSAsICdmYS1zcGlubmVyIGZhLXNwaW4nOml0ZW0ubG9hZGluZyB9XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1jaGVjay1ib3ggKm5nSWY9XCJzaG93U2VsZWN0Qm94XCIgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRDaGVja0JveCB8fCBkaXNhYmxlZFwiIFtzaXplXT1cInNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiIFt2YWx1ZV09XCJpdGVtLnNlbGVjdFwiIChvbkNsaWNrKT1cImludGVybmFsU2VsZWN0SXRlbShpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2F4LWNoZWNrLWJveD5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWxpc3RcIiAoY2xpY2spPVwibm9kZUNsaWNrKGl0ZW0pXCIgKGRibGNsaWNrKT1cIml0ZW1kYkNsaWNrKCRldmVudCxpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZVRlbXBsYXRlOyBlbHNlIGVsc2VUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vZGVUZW1wbGF0ZTsgY29udGV4dDp7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS50aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDx1bCAqbmdJZj1cIml0ZW0ubG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjaGlsZFwiICpuZ0lmPVwiaXRlbS50b2dnbGVcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlY3Vyc2l2ZUxpc3Q7IGNvbnRleHQ6eyAkaW1wbGljaXQ6IGl0ZW0uY2hpbGRlcmVuIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlY3Vyc2l2ZUxpc3Q7IGNvbnRleHQ6eyAkaW1wbGljaXQ6IGxpc3QgfVwiPjwvbmctY29udGFpbmVyPlxyXG48L3VsPlxyXG5cclxuPGF4LWNvbnRleHQtbWVudSAjbWVudT48L2F4LWNvbnRleHQtbWVudT4iXX0=