cax-design-system 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1812) hide show
  1. package/README.md +47 -0
  2. package/accordion/accordion.d.ts +220 -0
  3. package/accordion/accordion.interface.d.ts +49 -0
  4. package/accordion/accordion.module.d.ts +13 -0
  5. package/accordion/index.d.ts +5 -0
  6. package/accordion/public_api.d.ts +3 -0
  7. package/animate/animate.d.ts +40 -0
  8. package/animate/index.d.ts +5 -0
  9. package/animate/public_api.d.ts +1 -0
  10. package/animateonscroll/animateonscroll.d.ts +75 -0
  11. package/animateonscroll/index.d.ts +5 -0
  12. package/animateonscroll/public_api.d.ts +1 -0
  13. package/api/blockableui.d.ts +10 -0
  14. package/api/caxconfig.d.ts +24 -0
  15. package/api/confirmaeventtype.d.ts +8 -0
  16. package/api/confirmation.d.ts +91 -0
  17. package/api/confirmationservice.d.ts +30 -0
  18. package/api/contextmenuservice.d.ts +11 -0
  19. package/api/filtermatchmode.d.ts +22 -0
  20. package/api/filtermetadata.d.ts +18 -0
  21. package/api/filteroperator.d.ts +4 -0
  22. package/api/filterservice.d.ts +10 -0
  23. package/api/index.d.ts +5 -0
  24. package/api/lazyloadevent.d.ts +47 -0
  25. package/api/lazyloadmeta.d.ts +19 -0
  26. package/api/megamenuitem.d.ts +130 -0
  27. package/api/menuitem.d.ts +176 -0
  28. package/api/message.d.ts +30 -0
  29. package/api/messageservice.d.ts +32 -0
  30. package/api/overlayoptions.d.ts +188 -0
  31. package/api/overlayservice.d.ts +9 -0
  32. package/api/primeicons.d.ts +313 -0
  33. package/api/public_api.d.ts +33 -0
  34. package/api/scrolleroptions.d.ts +116 -0
  35. package/api/selectitem.d.ts +12 -0
  36. package/api/selectitemgroup.d.ts +10 -0
  37. package/api/shared.d.ts +24 -0
  38. package/api/sortevent.d.ts +12 -0
  39. package/api/sortmeta.d.ts +8 -0
  40. package/api/tablestate.d.ts +60 -0
  41. package/api/tooltipoptions.d.ts +69 -0
  42. package/api/translation.d.ts +135 -0
  43. package/api/translationkeys.d.ts +50 -0
  44. package/api/treedragdropservice.d.ts +12 -0
  45. package/api/treenode.d.ts +86 -0
  46. package/api/treenodedragevent.d.ts +27 -0
  47. package/api/treetablenode.d.ts +36 -0
  48. package/autocomplete/autocomplete.d.ts +629 -0
  49. package/autocomplete/autocomplete.interface.d.ts +164 -0
  50. package/autocomplete/index.d.ts +5 -0
  51. package/autocomplete/public_api.d.ts +2 -0
  52. package/autofocus/autofocus.d.ts +28 -0
  53. package/autofocus/index.d.ts +5 -0
  54. package/autofocus/public_api.d.ts +1 -0
  55. package/avatar/avatar.d.ts +73 -0
  56. package/avatar/avatar.module.d.ts +7 -0
  57. package/avatar/index.d.ts +5 -0
  58. package/avatar/public_api.d.ts +2 -0
  59. package/avatargroup/avatargroup.d.ts +27 -0
  60. package/avatargroup/index.d.ts +5 -0
  61. package/avatargroup/public_api.d.ts +1 -0
  62. package/badge/badge.d.ts +23 -0
  63. package/badge/badge.directive.d.ts +33 -0
  64. package/badge/badge.module.d.ts +10 -0
  65. package/badge/index.d.ts +5 -0
  66. package/badge/public_api.d.ts +3 -0
  67. package/baseicon/baseicon.d.ts +15 -0
  68. package/baseicon/index.d.ts +5 -0
  69. package/baseicon/public_api.d.ts +1 -0
  70. package/blockui/blockui.d.ts +64 -0
  71. package/blockui/blockui.interface.d.ts +11 -0
  72. package/blockui/index.d.ts +5 -0
  73. package/blockui/public_api.d.ts +2 -0
  74. package/breadcrumb/breadcrumb.d.ts +55 -0
  75. package/breadcrumb/breadcrumb.interface.d.ts +38 -0
  76. package/breadcrumb/breadcrumb.module.d.ts +13 -0
  77. package/breadcrumb/index.d.ts +5 -0
  78. package/breadcrumb/public_api.d.ts +3 -0
  79. package/button/button.d.ts +84 -0
  80. package/button/button.directive.d.ts +46 -0
  81. package/button/button.interface.d.ts +30 -0
  82. package/button/button.module.d.ts +9 -0
  83. package/button/index.d.ts +5 -0
  84. package/button/public_api.d.ts +4 -0
  85. package/buttongroup/buttongroup.d.ts +11 -0
  86. package/buttongroup/index.d.ts +5 -0
  87. package/buttongroup/public_api.d.ts +1 -0
  88. package/calendar/calendar.d.ts +712 -0
  89. package/calendar/calendar.interface.d.ts +204 -0
  90. package/calendar/calendar.module.d.ts +9 -0
  91. package/calendar/index.d.ts +5 -0
  92. package/calendar/public_api.d.ts +3 -0
  93. package/card/card.d.ts +53 -0
  94. package/card/card.interface.d.ts +27 -0
  95. package/card/card.module.d.ts +11 -0
  96. package/card/index.d.ts +5 -0
  97. package/card/public_api.d.ts +3 -0
  98. package/carousel/carousel.d.ts +227 -0
  99. package/carousel/carousel.interface.d.ts +63 -0
  100. package/carousel/index.d.ts +5 -0
  101. package/carousel/public_api.d.ts +2 -0
  102. package/cascadeselect/cascadeselect.d.ts +435 -0
  103. package/cascadeselect/cascadeselect.interface.d.ts +115 -0
  104. package/cascadeselect/cascadeselect.module.d.ts +15 -0
  105. package/cascadeselect/index.d.ts +5 -0
  106. package/cascadeselect/public_api.d.ts +3 -0
  107. package/chart/chart.d.ts +87 -0
  108. package/chart/index.d.ts +5 -0
  109. package/chart/public_api.d.ts +1 -0
  110. package/checkbox/checkbox.d.ts +164 -0
  111. package/checkbox/checkbox.interface.d.ts +26 -0
  112. package/checkbox/checkbox.module.d.ts +10 -0
  113. package/checkbox/index.d.ts +5 -0
  114. package/checkbox/public_api.d.ts +3 -0
  115. package/chip/chip.d.ts +37 -0
  116. package/chip/chip.interface.d.ts +15 -0
  117. package/chip/chip.module.d.ts +10 -0
  118. package/chip/index.d.ts +5 -0
  119. package/chip/public_api.d.ts +3 -0
  120. package/chips/chips.d.ts +221 -0
  121. package/chips/chips.interface.d.ts +58 -0
  122. package/chips/chips.module.d.ts +13 -0
  123. package/chips/index.d.ts +5 -0
  124. package/chips/public_api.d.ts +3 -0
  125. package/colorpicker/colorpicker.d.ts +247 -0
  126. package/colorpicker/colorpicker.interface.d.ts +15 -0
  127. package/colorpicker/index.d.ts +5 -0
  128. package/colorpicker/public_api.d.ts +2 -0
  129. package/confirmdialog/confirmdialog.d.ts +273 -0
  130. package/confirmdialog/confirmdialog.interface.d.ts +39 -0
  131. package/confirmdialog/index.d.ts +5 -0
  132. package/confirmdialog/public_api.d.ts +2 -0
  133. package/confirmpopup/confirmpopup.d.ts +119 -0
  134. package/confirmpopup/confirmpopup.interface.d.ts +27 -0
  135. package/confirmpopup/index.d.ts +5 -0
  136. package/confirmpopup/public_api.d.ts +2 -0
  137. package/contextmenu/contextmenu.d.ts +260 -0
  138. package/contextmenu/index.d.ts +5 -0
  139. package/contextmenu/public_api.d.ts +1 -0
  140. package/dataview/dataview.d.ts +274 -0
  141. package/dataview/dataview.interface.d.ts +183 -0
  142. package/dataview/index.d.ts +5 -0
  143. package/dataview/public_api.d.ts +2 -0
  144. package/defer/defer.d.ts +39 -0
  145. package/defer/index.d.ts +5 -0
  146. package/defer/public_api.d.ts +1 -0
  147. package/dialog/dialog.d.ts +373 -0
  148. package/dialog/dialog.interface.d.ts +31 -0
  149. package/dialog/index.d.ts +5 -0
  150. package/dialog/public_api.d.ts +2 -0
  151. package/divider/divider.d.ts +49 -0
  152. package/divider/divider.module.d.ts +7 -0
  153. package/divider/index.d.ts +5 -0
  154. package/divider/public_api.d.ts +2 -0
  155. package/dock/dock.d.ts +115 -0
  156. package/dock/dock.interface.d.ts +19 -0
  157. package/dock/index.d.ts +5 -0
  158. package/dock/public_api.d.ts +2 -0
  159. package/dom/connectedoverlayscrollhandler.d.ts +9 -0
  160. package/dom/domhandler.d.ts +95 -0
  161. package/dom/index.d.ts +5 -0
  162. package/dom/public_api.d.ts +2 -0
  163. package/dragdrop/dragdrop.d.ts +112 -0
  164. package/dragdrop/dragdrop.module.d.ts +8 -0
  165. package/dragdrop/index.d.ts +5 -0
  166. package/dragdrop/public_api.d.ts +2 -0
  167. package/dropdown/dropdown-item.d.ts +30 -0
  168. package/dropdown/dropdown.d.ts +627 -0
  169. package/dropdown/dropdown.interface.d.ts +154 -0
  170. package/dropdown/dropdown.module.d.ts +11 -0
  171. package/dropdown/index.d.ts +5 -0
  172. package/dropdown/public_api.d.ts +4 -0
  173. package/dynamicdialog/dialogservice.d.ts +35 -0
  174. package/dynamicdialog/dynamicdialog-config.d.ts +221 -0
  175. package/dynamicdialog/dynamicdialog-injector.d.ts +7 -0
  176. package/dynamicdialog/dynamicdialog-ref.d.ts +101 -0
  177. package/dynamicdialog/dynamicdialog.d.ts +124 -0
  178. package/dynamicdialog/dynamicdialogcontent.d.ts +8 -0
  179. package/dynamicdialog/index.d.ts +5 -0
  180. package/dynamicdialog/public_api.d.ts +6 -0
  181. package/editor/editor.d.ts +111 -0
  182. package/editor/editor.interface.d.ts +64 -0
  183. package/editor/index.d.ts +5 -0
  184. package/editor/public_api.d.ts +2 -0
  185. package/esm2022/accordion/accordion.interface.mjs +2 -0
  186. package/esm2022/accordion/accordion.mjs +591 -0
  187. package/esm2022/accordion/accordion.module.mjs +23 -0
  188. package/esm2022/accordion/cax-design-system-accordion.mjs +5 -0
  189. package/esm2022/accordion/public_api.mjs +4 -0
  190. package/esm2022/animate/animate.mjs +101 -0
  191. package/esm2022/animate/cax-design-system-animate.mjs +5 -0
  192. package/esm2022/animate/public_api.mjs +2 -0
  193. package/esm2022/animateonscroll/animateonscroll.mjs +185 -0
  194. package/esm2022/animateonscroll/cax-design-system-animateonscroll.mjs +5 -0
  195. package/esm2022/animateonscroll/public_api.mjs +2 -0
  196. package/esm2022/api/blockableui.mjs +2 -0
  197. package/esm2022/api/cax-design-system-api.mjs +5 -0
  198. package/esm2022/api/caxconfig.mjs +163 -0
  199. package/esm2022/api/confirmaeventtype.mjs +10 -0
  200. package/esm2022/api/confirmation.mjs +2 -0
  201. package/esm2022/api/confirmationservice.mjs +43 -0
  202. package/esm2022/api/contextmenuservice.mjs +22 -0
  203. package/esm2022/api/filtermatchmode.mjs +23 -0
  204. package/esm2022/api/filtermetadata.mjs +2 -0
  205. package/esm2022/api/filteroperator.mjs +5 -0
  206. package/esm2022/api/filterservice.mjs +225 -0
  207. package/esm2022/api/lazyloadevent.mjs +2 -0
  208. package/esm2022/api/lazyloadmeta.mjs +2 -0
  209. package/esm2022/api/megamenuitem.mjs +2 -0
  210. package/esm2022/api/menuitem.mjs +2 -0
  211. package/esm2022/api/message.mjs +2 -0
  212. package/esm2022/api/messageservice.mjs +47 -0
  213. package/esm2022/api/overlayoptions.mjs +2 -0
  214. package/esm2022/api/overlayservice.mjs +19 -0
  215. package/esm2022/api/primeicons.mjs +314 -0
  216. package/esm2022/api/public_api.mjs +34 -0
  217. package/esm2022/api/scrolleroptions.mjs +2 -0
  218. package/esm2022/api/selectitem.mjs +2 -0
  219. package/esm2022/api/selectitemgroup.mjs +2 -0
  220. package/esm2022/api/shared.mjs +65 -0
  221. package/esm2022/api/sortevent.mjs +2 -0
  222. package/esm2022/api/sortmeta.mjs +2 -0
  223. package/esm2022/api/tablestate.mjs +2 -0
  224. package/esm2022/api/tooltipoptions.mjs +2 -0
  225. package/esm2022/api/translation.mjs +2 -0
  226. package/esm2022/api/translationkeys.mjs +51 -0
  227. package/esm2022/api/treedragdropservice.mjs +21 -0
  228. package/esm2022/api/treenode.mjs +2 -0
  229. package/esm2022/api/treenodedragevent.mjs +2 -0
  230. package/esm2022/api/treetablenode.mjs +2 -0
  231. package/esm2022/autocomplete/autocomplete.interface.mjs +2 -0
  232. package/esm2022/autocomplete/autocomplete.mjs +1880 -0
  233. package/esm2022/autocomplete/cax-design-system-autocomplete.mjs +5 -0
  234. package/esm2022/autocomplete/public_api.mjs +3 -0
  235. package/esm2022/autofocus/autofocus.mjs +78 -0
  236. package/esm2022/autofocus/cax-design-system-autofocus.mjs +5 -0
  237. package/esm2022/autofocus/public_api.mjs +2 -0
  238. package/esm2022/avatar/avatar.mjs +104 -0
  239. package/esm2022/avatar/avatar.module.mjs +16 -0
  240. package/esm2022/avatar/cax-design-system-avatar.mjs +5 -0
  241. package/esm2022/avatar/public_api.mjs +3 -0
  242. package/esm2022/avatargroup/avatargroup.mjs +54 -0
  243. package/esm2022/avatargroup/cax-design-system-avatargroup.mjs +5 -0
  244. package/esm2022/avatargroup/public_api.mjs +2 -0
  245. package/esm2022/badge/badge.directive.mjs +199 -0
  246. package/esm2022/badge/badge.mjs +51 -0
  247. package/esm2022/badge/badge.module.mjs +20 -0
  248. package/esm2022/badge/cax-design-system-badge.mjs +5 -0
  249. package/esm2022/badge/public_api.mjs +4 -0
  250. package/esm2022/baseicon/baseicon.mjs +45 -0
  251. package/esm2022/baseicon/cax-design-system-baseicon.mjs +5 -0
  252. package/esm2022/baseicon/public_api.mjs +2 -0
  253. package/esm2022/blockui/blockui.interface.mjs +2 -0
  254. package/esm2022/blockui/blockui.mjs +206 -0
  255. package/esm2022/blockui/cax-design-system-blockui.mjs +5 -0
  256. package/esm2022/blockui/public_api.mjs +3 -0
  257. package/esm2022/breadcrumb/breadcrumb.interface.mjs +2 -0
  258. package/esm2022/breadcrumb/breadcrumb.mjs +120 -0
  259. package/esm2022/breadcrumb/breadcrumb.module.mjs +23 -0
  260. package/esm2022/breadcrumb/cax-design-system-breadcrumb.mjs +5 -0
  261. package/esm2022/breadcrumb/public_api.mjs +4 -0
  262. package/esm2022/button/button.directive.mjs +227 -0
  263. package/esm2022/button/button.interface.mjs +2 -0
  264. package/esm2022/button/button.mjs +189 -0
  265. package/esm2022/button/button.module.mjs +18 -0
  266. package/esm2022/button/cax-design-system-button.mjs +5 -0
  267. package/esm2022/button/public_api.mjs +5 -0
  268. package/esm2022/buttongroup/buttongroup.mjs +38 -0
  269. package/esm2022/buttongroup/cax-design-system-buttongroup.mjs +5 -0
  270. package/esm2022/buttongroup/public_api.mjs +2 -0
  271. package/esm2022/calendar/calendar.interface.mjs +2 -0
  272. package/esm2022/calendar/calendar.mjs +3192 -0
  273. package/esm2022/calendar/calendar.module.mjs +18 -0
  274. package/esm2022/calendar/cax-design-system-calendar.mjs +5 -0
  275. package/esm2022/calendar/public_api.mjs +4 -0
  276. package/esm2022/card/card.interface.mjs +2 -0
  277. package/esm2022/card/card.mjs +117 -0
  278. package/esm2022/card/card.module.mjs +21 -0
  279. package/esm2022/card/cax-design-system-card.mjs +5 -0
  280. package/esm2022/card/public_api.mjs +4 -0
  281. package/esm2022/carousel/carousel.interface.mjs +2 -0
  282. package/esm2022/carousel/carousel.mjs +968 -0
  283. package/esm2022/carousel/cax-design-system-carousel.mjs +5 -0
  284. package/esm2022/carousel/public_api.mjs +3 -0
  285. package/esm2022/cascadeselect/cascadeselect.interface.mjs +2 -0
  286. package/esm2022/cascadeselect/cascadeselect.mjs +1135 -0
  287. package/esm2022/cascadeselect/cascadeselect.module.mjs +25 -0
  288. package/esm2022/cascadeselect/cax-design-system-cascadeselect.mjs +5 -0
  289. package/esm2022/cascadeselect/public_api.mjs +4 -0
  290. package/esm2022/cax-design-system.mjs +5 -0
  291. package/esm2022/chart/cax-design-system-chart.mjs +5 -0
  292. package/esm2022/chart/chart.mjs +236 -0
  293. package/esm2022/chart/public_api.mjs +2 -0
  294. package/esm2022/checkbox/cax-design-system-checkbox.mjs +5 -0
  295. package/esm2022/checkbox/checkbox.interface.mjs +2 -0
  296. package/esm2022/checkbox/checkbox.mjs +303 -0
  297. package/esm2022/checkbox/checkbox.module.mjs +20 -0
  298. package/esm2022/checkbox/public_api.mjs +4 -0
  299. package/esm2022/chip/cax-design-system-chip.mjs +5 -0
  300. package/esm2022/chip/chip.interface.mjs +2 -0
  301. package/esm2022/chip/chip.mjs +86 -0
  302. package/esm2022/chip/chip.module.mjs +20 -0
  303. package/esm2022/chip/public_api.mjs +4 -0
  304. package/esm2022/chips/cax-design-system-chips.mjs +5 -0
  305. package/esm2022/chips/chips.interface.mjs +2 -0
  306. package/esm2022/chips/chips.mjs +568 -0
  307. package/esm2022/chips/chips.module.mjs +22 -0
  308. package/esm2022/chips/public_api.mjs +4 -0
  309. package/esm2022/colorpicker/cax-design-system-colorpicker.mjs +5 -0
  310. package/esm2022/colorpicker/colorpicker.interface.mjs +2 -0
  311. package/esm2022/colorpicker/colorpicker.mjs +829 -0
  312. package/esm2022/colorpicker/public_api.mjs +3 -0
  313. package/esm2022/confirmdialog/cax-design-system-confirmdialog.mjs +5 -0
  314. package/esm2022/confirmdialog/confirmdialog.interface.mjs +2 -0
  315. package/esm2022/confirmdialog/confirmdialog.mjs +689 -0
  316. package/esm2022/confirmdialog/public_api.mjs +3 -0
  317. package/esm2022/confirmpopup/cax-design-system-confirmpopup.mjs +5 -0
  318. package/esm2022/confirmpopup/confirmpopup.interface.mjs +2 -0
  319. package/esm2022/confirmpopup/confirmpopup.mjs +499 -0
  320. package/esm2022/confirmpopup/public_api.mjs +3 -0
  321. package/esm2022/contextmenu/cax-design-system-contextmenu.mjs +5 -0
  322. package/esm2022/contextmenu/contextmenu.mjs +1304 -0
  323. package/esm2022/contextmenu/public_api.mjs +2 -0
  324. package/esm2022/dataview/cax-design-system-dataview.mjs +5 -0
  325. package/esm2022/dataview/dataview.interface.mjs +2 -0
  326. package/esm2022/dataview/dataview.mjs +723 -0
  327. package/esm2022/dataview/public_api.mjs +3 -0
  328. package/esm2022/defer/cax-design-system-defer.mjs +5 -0
  329. package/esm2022/defer/defer.mjs +111 -0
  330. package/esm2022/defer/public_api.mjs +2 -0
  331. package/esm2022/dialog/cax-design-system-dialog.mjs +5 -0
  332. package/esm2022/dialog/dialog.interface.mjs +2 -0
  333. package/esm2022/dialog/dialog.mjs +1168 -0
  334. package/esm2022/dialog/public_api.mjs +3 -0
  335. package/esm2022/divider/cax-design-system-divider.mjs +5 -0
  336. package/esm2022/divider/divider.mjs +69 -0
  337. package/esm2022/divider/divider.module.mjs +16 -0
  338. package/esm2022/divider/public_api.mjs +3 -0
  339. package/esm2022/dock/cax-design-system-dock.mjs +5 -0
  340. package/esm2022/dock/dock.interface.mjs +2 -0
  341. package/esm2022/dock/dock.mjs +431 -0
  342. package/esm2022/dock/public_api.mjs +3 -0
  343. package/esm2022/dom/cax-design-system-dom.mjs +5 -0
  344. package/esm2022/dom/connectedoverlayscrollhandler.mjs +30 -0
  345. package/esm2022/dom/domhandler.mjs +722 -0
  346. package/esm2022/dom/public_api.mjs +3 -0
  347. package/esm2022/dragdrop/cax-design-system-dragdrop.mjs +5 -0
  348. package/esm2022/dragdrop/dragdrop.mjs +309 -0
  349. package/esm2022/dragdrop/dragdrop.module.mjs +18 -0
  350. package/esm2022/dragdrop/public_api.mjs +3 -0
  351. package/esm2022/dropdown/cax-design-system-dropdown.mjs +5 -0
  352. package/esm2022/dropdown/dropdown-item.mjs +72 -0
  353. package/esm2022/dropdown/dropdown.interface.mjs +2 -0
  354. package/esm2022/dropdown/dropdown.mjs +1597 -0
  355. package/esm2022/dropdown/dropdown.module.mjs +20 -0
  356. package/esm2022/dropdown/public_api.mjs +5 -0
  357. package/esm2022/dynamicdialog/cax-design-system-dynamicdialog.mjs +5 -0
  358. package/esm2022/dynamicdialog/dialogservice.mjs +102 -0
  359. package/esm2022/dynamicdialog/dynamicdialog-config.mjs +187 -0
  360. package/esm2022/dynamicdialog/dynamicdialog-injector.mjs +15 -0
  361. package/esm2022/dynamicdialog/dynamicdialog-ref.mjs +119 -0
  362. package/esm2022/dynamicdialog/dynamicdialog.mjs +696 -0
  363. package/esm2022/dynamicdialog/dynamicdialogcontent.mjs +20 -0
  364. package/esm2022/dynamicdialog/public_api.mjs +7 -0
  365. package/esm2022/editor/cax-design-system-editor.mjs +5 -0
  366. package/esm2022/editor/editor.interface.mjs +2 -0
  367. package/esm2022/editor/editor.mjs +392 -0
  368. package/esm2022/editor/public_api.mjs +3 -0
  369. package/esm2022/fieldset/cax-design-system-fieldset.mjs +5 -0
  370. package/esm2022/fieldset/fieldset.interface.mjs +2 -0
  371. package/esm2022/fieldset/fieldset.mjs +297 -0
  372. package/esm2022/fieldset/public_api.mjs +3 -0
  373. package/esm2022/fileupload/cax-design-system-fileupload.mjs +5 -0
  374. package/esm2022/fileupload/fileupload.interface.mjs +2 -0
  375. package/esm2022/fileupload/fileupload.mjs +1188 -0
  376. package/esm2022/fileupload/public_api.mjs +3 -0
  377. package/esm2022/floatlabel/cax-design-system-floatlabel.mjs +5 -0
  378. package/esm2022/floatlabel/floatlabel.mjs +44 -0
  379. package/esm2022/floatlabel/public_api.mjs +2 -0
  380. package/esm2022/focustrap/cax-design-system-focustrap.mjs +5 -0
  381. package/esm2022/focustrap/focustrap.mjs +103 -0
  382. package/esm2022/focustrap/public_api.mjs +2 -0
  383. package/esm2022/galleria/cax-design-system-galleria.mjs +5 -0
  384. package/esm2022/galleria/galleria.interface.mjs +2 -0
  385. package/esm2022/galleria/galleria.mjs +1668 -0
  386. package/esm2022/galleria/public_api.mjs +3 -0
  387. package/esm2022/iconfield/cax-design-system-iconfield.mjs +5 -0
  388. package/esm2022/iconfield/iconfield.mjs +44 -0
  389. package/esm2022/iconfield/public_api.mjs +2 -0
  390. package/esm2022/icons/angledoubledown/angledoubledown.mjs +35 -0
  391. package/esm2022/icons/angledoubledown/cax-design-system-icons-angledoubledown.mjs +5 -0
  392. package/esm2022/icons/angledoubledown/public_api.mjs +2 -0
  393. package/esm2022/icons/angledoubleleft/angledoubleleft.mjs +35 -0
  394. package/esm2022/icons/angledoubleleft/cax-design-system-icons-angledoubleleft.mjs +5 -0
  395. package/esm2022/icons/angledoubleleft/public_api.mjs +2 -0
  396. package/esm2022/icons/angledoubleright/angledoubleright.mjs +35 -0
  397. package/esm2022/icons/angledoubleright/cax-design-system-icons-angledoubleright.mjs +5 -0
  398. package/esm2022/icons/angledoubleright/public_api.mjs +2 -0
  399. package/esm2022/icons/angledoubleup/angledoubleup.mjs +35 -0
  400. package/esm2022/icons/angledoubleup/cax-design-system-icons-angledoubleup.mjs +5 -0
  401. package/esm2022/icons/angledoubleup/public_api.mjs +2 -0
  402. package/esm2022/icons/angledown/angledown.mjs +31 -0
  403. package/esm2022/icons/angledown/cax-design-system-icons-angledown.mjs +5 -0
  404. package/esm2022/icons/angledown/public_api.mjs +2 -0
  405. package/esm2022/icons/angleleft/angleleft.mjs +31 -0
  406. package/esm2022/icons/angleleft/cax-design-system-icons-angleleft.mjs +5 -0
  407. package/esm2022/icons/angleleft/public_api.mjs +2 -0
  408. package/esm2022/icons/angleright/angleright.mjs +31 -0
  409. package/esm2022/icons/angleright/cax-design-system-icons-angleright.mjs +5 -0
  410. package/esm2022/icons/angleright/public_api.mjs +2 -0
  411. package/esm2022/icons/angleup/angleup.mjs +31 -0
  412. package/esm2022/icons/angleup/cax-design-system-icons-angleup.mjs +5 -0
  413. package/esm2022/icons/angleup/public_api.mjs +2 -0
  414. package/esm2022/icons/arrowdown/arrowdown.mjs +54 -0
  415. package/esm2022/icons/arrowdown/cax-design-system-icons-arrowdown.mjs +5 -0
  416. package/esm2022/icons/arrowdown/public_api.mjs +2 -0
  417. package/esm2022/icons/arrowdownleft/arrowdownleft.mjs +31 -0
  418. package/esm2022/icons/arrowdownleft/cax-design-system-icons-arrowdownleft.mjs +5 -0
  419. package/esm2022/icons/arrowdownleft/public_api.mjs +2 -0
  420. package/esm2022/icons/arrowdownright/arrowdownright.mjs +31 -0
  421. package/esm2022/icons/arrowdownright/cax-design-system-icons-arrowdownright.mjs +5 -0
  422. package/esm2022/icons/arrowdownright/public_api.mjs +2 -0
  423. package/esm2022/icons/arrowleft/arrowleft.mjs +54 -0
  424. package/esm2022/icons/arrowleft/cax-design-system-icons-arrowleft.mjs +5 -0
  425. package/esm2022/icons/arrowleft/public_api.mjs +2 -0
  426. package/esm2022/icons/arrowright/arrowright.mjs +35 -0
  427. package/esm2022/icons/arrowright/cax-design-system-icons-arrowright.mjs +5 -0
  428. package/esm2022/icons/arrowright/public_api.mjs +2 -0
  429. package/esm2022/icons/arrowup/arrowup.mjs +54 -0
  430. package/esm2022/icons/arrowup/cax-design-system-icons-arrowup.mjs +5 -0
  431. package/esm2022/icons/arrowup/public_api.mjs +2 -0
  432. package/esm2022/icons/ban/ban.mjs +50 -0
  433. package/esm2022/icons/ban/cax-design-system-icons-ban.mjs +5 -0
  434. package/esm2022/icons/ban/public_api.mjs +2 -0
  435. package/esm2022/icons/bars/bars.mjs +35 -0
  436. package/esm2022/icons/bars/cax-design-system-icons-bars.mjs +5 -0
  437. package/esm2022/icons/bars/public_api.mjs +2 -0
  438. package/esm2022/icons/blank/blank.mjs +25 -0
  439. package/esm2022/icons/blank/cax-design-system-icons-blank.mjs +5 -0
  440. package/esm2022/icons/blank/public_api.mjs +2 -0
  441. package/esm2022/icons/calendar/calendar.mjs +31 -0
  442. package/esm2022/icons/calendar/cax-design-system-icons-calendar.mjs +5 -0
  443. package/esm2022/icons/calendar/public_api.mjs +2 -0
  444. package/esm2022/icons/caretleft/caretleft.mjs +31 -0
  445. package/esm2022/icons/caretleft/cax-design-system-icons-caretleft.mjs +5 -0
  446. package/esm2022/icons/caretleft/public_api.mjs +2 -0
  447. package/esm2022/icons/caretright/caretright.mjs +31 -0
  448. package/esm2022/icons/caretright/cax-design-system-icons-caretright.mjs +5 -0
  449. package/esm2022/icons/caretright/public_api.mjs +2 -0
  450. package/esm2022/icons/check/cax-design-system-icons-check.mjs +5 -0
  451. package/esm2022/icons/check/check.mjs +31 -0
  452. package/esm2022/icons/check/public_api.mjs +2 -0
  453. package/esm2022/icons/chevrondown/cax-design-system-icons-chevrondown.mjs +5 -0
  454. package/esm2022/icons/chevrondown/chevrondown.mjs +31 -0
  455. package/esm2022/icons/chevrondown/public_api.mjs +2 -0
  456. package/esm2022/icons/chevronleft/cax-design-system-icons-chevronleft.mjs +5 -0
  457. package/esm2022/icons/chevronleft/chevronleft.mjs +31 -0
  458. package/esm2022/icons/chevronleft/public_api.mjs +2 -0
  459. package/esm2022/icons/chevronright/cax-design-system-icons-chevronright.mjs +5 -0
  460. package/esm2022/icons/chevronright/chevronright.mjs +31 -0
  461. package/esm2022/icons/chevronright/public_api.mjs +2 -0
  462. package/esm2022/icons/chevronup/cax-design-system-icons-chevronup.mjs +5 -0
  463. package/esm2022/icons/chevronup/chevronup.mjs +31 -0
  464. package/esm2022/icons/chevronup/public_api.mjs +2 -0
  465. package/esm2022/icons/exclamationtriangle/cax-design-system-icons-exclamationtriangle.mjs +5 -0
  466. package/esm2022/icons/exclamationtriangle/exclamationtriangle.mjs +66 -0
  467. package/esm2022/icons/exclamationtriangle/public_api.mjs +2 -0
  468. package/esm2022/icons/eye/cax-design-system-icons-eye.mjs +5 -0
  469. package/esm2022/icons/eye/eye.mjs +35 -0
  470. package/esm2022/icons/eye/public_api.mjs +2 -0
  471. package/esm2022/icons/eyeslash/cax-design-system-icons-eyeslash.mjs +5 -0
  472. package/esm2022/icons/eyeslash/eyeslash.mjs +54 -0
  473. package/esm2022/icons/eyeslash/public_api.mjs +2 -0
  474. package/esm2022/icons/filter/cax-design-system-icons-filter.mjs +5 -0
  475. package/esm2022/icons/filter/filter.mjs +50 -0
  476. package/esm2022/icons/filter/public_api.mjs +2 -0
  477. package/esm2022/icons/filterslash/cax-design-system-icons-filterslash.mjs +5 -0
  478. package/esm2022/icons/filterslash/filterslash.mjs +54 -0
  479. package/esm2022/icons/filterslash/public_api.mjs +2 -0
  480. package/esm2022/icons/home/cax-design-system-icons-home.mjs +5 -0
  481. package/esm2022/icons/home/home.mjs +54 -0
  482. package/esm2022/icons/home/public_api.mjs +2 -0
  483. package/esm2022/icons/infocircle/cax-design-system-icons-infocircle.mjs +5 -0
  484. package/esm2022/icons/infocircle/infocircle.mjs +54 -0
  485. package/esm2022/icons/infocircle/public_api.mjs +2 -0
  486. package/esm2022/icons/minus/cax-design-system-icons-minus.mjs +5 -0
  487. package/esm2022/icons/minus/minus.mjs +32 -0
  488. package/esm2022/icons/minus/public_api.mjs +2 -0
  489. package/esm2022/icons/pencil/cax-design-system-icons-pencil.mjs +5 -0
  490. package/esm2022/icons/pencil/pencil.mjs +50 -0
  491. package/esm2022/icons/pencil/public_api.mjs +2 -0
  492. package/esm2022/icons/plus/cax-design-system-icons-plus.mjs +5 -0
  493. package/esm2022/icons/plus/plus.mjs +50 -0
  494. package/esm2022/icons/plus/public_api.mjs +2 -0
  495. package/esm2022/icons/refresh/cax-design-system-icons-refresh.mjs +5 -0
  496. package/esm2022/icons/refresh/public_api.mjs +2 -0
  497. package/esm2022/icons/refresh/refresh.mjs +54 -0
  498. package/esm2022/icons/search/cax-design-system-icons-search.mjs +5 -0
  499. package/esm2022/icons/search/public_api.mjs +2 -0
  500. package/esm2022/icons/search/search.mjs +54 -0
  501. package/esm2022/icons/searchminus/cax-design-system-icons-searchminus.mjs +5 -0
  502. package/esm2022/icons/searchminus/public_api.mjs +2 -0
  503. package/esm2022/icons/searchminus/searchminus.mjs +54 -0
  504. package/esm2022/icons/searchplus/cax-design-system-icons-searchplus.mjs +5 -0
  505. package/esm2022/icons/searchplus/public_api.mjs +2 -0
  506. package/esm2022/icons/searchplus/searchplus.mjs +54 -0
  507. package/esm2022/icons/sortalt/cax-design-system-icons-sortalt.mjs +5 -0
  508. package/esm2022/icons/sortalt/public_api.mjs +2 -0
  509. package/esm2022/icons/sortalt/sortalt.mjs +62 -0
  510. package/esm2022/icons/sortamountdown/cax-design-system-icons-sortamountdown.mjs +5 -0
  511. package/esm2022/icons/sortamountdown/public_api.mjs +2 -0
  512. package/esm2022/icons/sortamountdown/sortamountdown.mjs +50 -0
  513. package/esm2022/icons/sortamountupalt/cax-design-system-icons-sortamountupalt.mjs +5 -0
  514. package/esm2022/icons/sortamountupalt/public_api.mjs +2 -0
  515. package/esm2022/icons/sortamountupalt/sortamountupalt.mjs +50 -0
  516. package/esm2022/icons/spinner/cax-design-system-icons-spinner.mjs +5 -0
  517. package/esm2022/icons/spinner/public_api.mjs +2 -0
  518. package/esm2022/icons/spinner/spinner.mjs +50 -0
  519. package/esm2022/icons/star/cax-design-system-icons-star.mjs +5 -0
  520. package/esm2022/icons/star/public_api.mjs +2 -0
  521. package/esm2022/icons/star/star.mjs +50 -0
  522. package/esm2022/icons/starfill/cax-design-system-icons-starfill.mjs +5 -0
  523. package/esm2022/icons/starfill/public_api.mjs +2 -0
  524. package/esm2022/icons/starfill/starfill.mjs +50 -0
  525. package/esm2022/icons/thlarge/cax-design-system-icons-thlarge.mjs +5 -0
  526. package/esm2022/icons/thlarge/public_api.mjs +2 -0
  527. package/esm2022/icons/thlarge/thlarge.mjs +54 -0
  528. package/esm2022/icons/times/cax-design-system-icons-times.mjs +5 -0
  529. package/esm2022/icons/times/public_api.mjs +2 -0
  530. package/esm2022/icons/times/times.mjs +31 -0
  531. package/esm2022/icons/timescircle/cax-design-system-icons-timescircle.mjs +5 -0
  532. package/esm2022/icons/timescircle/public_api.mjs +2 -0
  533. package/esm2022/icons/timescircle/timescircle.mjs +54 -0
  534. package/esm2022/icons/trash/cax-design-system-icons-trash.mjs +5 -0
  535. package/esm2022/icons/trash/public_api.mjs +2 -0
  536. package/esm2022/icons/trash/trash.mjs +54 -0
  537. package/esm2022/icons/undo/cax-design-system-icons-undo.mjs +5 -0
  538. package/esm2022/icons/undo/public_api.mjs +2 -0
  539. package/esm2022/icons/undo/undo.mjs +54 -0
  540. package/esm2022/icons/upload/cax-design-system-icons-upload.mjs +5 -0
  541. package/esm2022/icons/upload/public_api.mjs +2 -0
  542. package/esm2022/icons/upload/upload.mjs +54 -0
  543. package/esm2022/icons/windowmaximize/cax-design-system-icons-windowmaximize.mjs +5 -0
  544. package/esm2022/icons/windowmaximize/public_api.mjs +2 -0
  545. package/esm2022/icons/windowmaximize/windowmaximize.mjs +54 -0
  546. package/esm2022/icons/windowminimize/cax-design-system-icons-windowminimize.mjs +5 -0
  547. package/esm2022/icons/windowminimize/public_api.mjs +2 -0
  548. package/esm2022/icons/windowminimize/windowminimize.mjs +54 -0
  549. package/esm2022/image/cax-design-system-image.mjs +5 -0
  550. package/esm2022/image/image.interface.mjs +2 -0
  551. package/esm2022/image/image.mjs +418 -0
  552. package/esm2022/image/image.module.mjs +17 -0
  553. package/esm2022/image/public_api.mjs +4 -0
  554. package/esm2022/inplace/cax-design-system-inplace.mjs +5 -0
  555. package/esm2022/inplace/inplace.interface.mjs +2 -0
  556. package/esm2022/inplace/inplace.mjs +243 -0
  557. package/esm2022/inplace/public_api.mjs +3 -0
  558. package/esm2022/inputgroup/cax-design-system-inputgroup.mjs +5 -0
  559. package/esm2022/inputgroup/inputgroup.mjs +48 -0
  560. package/esm2022/inputgroup/inputgroup.module.mjs +25 -0
  561. package/esm2022/inputgroup/public_api.mjs +3 -0
  562. package/esm2022/inputgroupaddon/cax-design-system-inputgroupaddon.mjs +5 -0
  563. package/esm2022/inputgroupaddon/inputgroupaddon.mjs +32 -0
  564. package/esm2022/inputgroupaddon/inputgroupaddon.module.mjs +24 -0
  565. package/esm2022/inputgroupaddon/public_api.mjs +3 -0
  566. package/esm2022/inputicon/cax-design-system-inputicon.mjs +5 -0
  567. package/esm2022/inputicon/inputicon.mjs +38 -0
  568. package/esm2022/inputicon/public_api.mjs +2 -0
  569. package/esm2022/inputmask/cax-design-system-inputmask.mjs +5 -0
  570. package/esm2022/inputmask/inputmask.interface.mjs +2 -0
  571. package/esm2022/inputmask/inputmask.mjs +914 -0
  572. package/esm2022/inputmask/public_api.mjs +3 -0
  573. package/esm2022/inputnumber/cax-design-system-inputnumber.mjs +5 -0
  574. package/esm2022/inputnumber/inputnumber.interface.mjs +2 -0
  575. package/esm2022/inputnumber/inputnumber.mjs +1290 -0
  576. package/esm2022/inputnumber/inputnumber.module.mjs +17 -0
  577. package/esm2022/inputnumber/public_api.mjs +4 -0
  578. package/esm2022/inputotp/cax-design-system-inputotp.mjs +5 -0
  579. package/esm2022/inputotp/inputotp.interface.mjs +2 -0
  580. package/esm2022/inputotp/inputotp.mjs +381 -0
  581. package/esm2022/inputotp/public_api.mjs +3 -0
  582. package/esm2022/inputswitch/cax-design-system-inputswitch.mjs +5 -0
  583. package/esm2022/inputswitch/inputswitch.interface.mjs +2 -0
  584. package/esm2022/inputswitch/inputswitch.mjs +244 -0
  585. package/esm2022/inputswitch/public_api.mjs +3 -0
  586. package/esm2022/inputtext/cax-design-system-inputtext.mjs +5 -0
  587. package/esm2022/inputtext/inputtext.component.mjs +74 -0
  588. package/esm2022/inputtext/inputtext.directive.mjs +52 -0
  589. package/esm2022/inputtext/inputtext.module.mjs +20 -0
  590. package/esm2022/inputtext/public_api.mjs +4 -0
  591. package/esm2022/inputtextarea/cax-design-system-inputtextarea.mjs +5 -0
  592. package/esm2022/inputtextarea/inputtextarea.mjs +135 -0
  593. package/esm2022/inputtextarea/public_api.mjs +2 -0
  594. package/esm2022/keyfilter/cax-design-system-keyfilter.mjs +5 -0
  595. package/esm2022/keyfilter/keyfilter.interface.mjs +2 -0
  596. package/esm2022/keyfilter/keyfilter.mjs +265 -0
  597. package/esm2022/keyfilter/public_api.mjs +3 -0
  598. package/esm2022/knob/cax-design-system-knob.mjs +5 -0
  599. package/esm2022/knob/knob.mjs +464 -0
  600. package/esm2022/knob/public_api.mjs +2 -0
  601. package/esm2022/listbox/cax-design-system-listbox.mjs +5 -0
  602. package/esm2022/listbox/listbox.interface.mjs +2 -0
  603. package/esm2022/listbox/listbox.mjs +1555 -0
  604. package/esm2022/listbox/public_api.mjs +3 -0
  605. package/esm2022/logo/cax-design-system-logo.mjs +5 -0
  606. package/esm2022/logo/logo.mjs +45 -0
  607. package/esm2022/logo/logo.module.mjs +16 -0
  608. package/esm2022/logo/public_api.mjs +3 -0
  609. package/esm2022/megamenu/cax-design-system-megamenu.mjs +5 -0
  610. package/esm2022/megamenu/megamenu.interface.mjs +2 -0
  611. package/esm2022/megamenu/megamenu.mjs +1190 -0
  612. package/esm2022/megamenu/public_api.mjs +3 -0
  613. package/esm2022/menu/cax-design-system-menu.mjs +5 -0
  614. package/esm2022/menu/menu.mjs +953 -0
  615. package/esm2022/menu/public_api.mjs +2 -0
  616. package/esm2022/menubar/cax-design-system-menubar.mjs +5 -0
  617. package/esm2022/menubar/menubar.interface.mjs +2 -0
  618. package/esm2022/menubar/menubar.mjs +1249 -0
  619. package/esm2022/menubar/public_api.mjs +3 -0
  620. package/esm2022/message/cax-design-system-message.mjs +5 -0
  621. package/esm2022/message/message.mjs +112 -0
  622. package/esm2022/message/public_api.mjs +2 -0
  623. package/esm2022/messages/cax-design-system-messages.mjs +5 -0
  624. package/esm2022/messages/messages.interface.mjs +2 -0
  625. package/esm2022/messages/messages.mjs +283 -0
  626. package/esm2022/messages/messages.module.mjs +17 -0
  627. package/esm2022/messages/public_api.mjs +4 -0
  628. package/esm2022/metergroup/cax-design-system-metergroup.mjs +5 -0
  629. package/esm2022/metergroup/metergroup.interface.mjs +2 -0
  630. package/esm2022/metergroup/metergroup.mjs +280 -0
  631. package/esm2022/metergroup/public_api.mjs +3 -0
  632. package/esm2022/multiselect/cax-design-system-multiselect.mjs +5 -0
  633. package/esm2022/multiselect/multiselect.interface.mjs +2 -0
  634. package/esm2022/multiselect/multiselect.mjs +2525 -0
  635. package/esm2022/multiselect/public_api.mjs +3 -0
  636. package/esm2022/navigation/cax-design-system-navigation.mjs +5 -0
  637. package/esm2022/navigation/navigation.interface.mjs +2 -0
  638. package/esm2022/navigation/navigation.mjs +261 -0
  639. package/esm2022/navigation/navigation.module.mjs +16 -0
  640. package/esm2022/navigation/public_api.mjs +3 -0
  641. package/esm2022/orderlist/cax-design-system-orderlist.mjs +5 -0
  642. package/esm2022/orderlist/orderlist.interface.mjs +2 -0
  643. package/esm2022/orderlist/orderlist.mjs +993 -0
  644. package/esm2022/orderlist/public_api.mjs +3 -0
  645. package/esm2022/organizationchart/cax-design-system-organizationchart.mjs +5 -0
  646. package/esm2022/organizationchart/organizationchart.interface.mjs +2 -0
  647. package/esm2022/organizationchart/organizationchart.mjs +416 -0
  648. package/esm2022/organizationchart/public_api.mjs +3 -0
  649. package/esm2022/overlay/cax-design-system-overlay.mjs +5 -0
  650. package/esm2022/overlay/overlay.mjs +579 -0
  651. package/esm2022/overlay/overlay.module.mjs +17 -0
  652. package/esm2022/overlay/public_api.mjs +3 -0
  653. package/esm2022/overlaypanel/cax-design-system-overlaypanel.mjs +5 -0
  654. package/esm2022/overlaypanel/overlaypanel.mjs +470 -0
  655. package/esm2022/overlaypanel/overlaypanel.module.mjs +17 -0
  656. package/esm2022/overlaypanel/public_api.mjs +3 -0
  657. package/esm2022/paginator/cax-design-system-paginator.mjs +5 -0
  658. package/esm2022/paginator/paginator.interface.mjs +2 -0
  659. package/esm2022/paginator/paginator.mjs +424 -0
  660. package/esm2022/paginator/paginator.module.mjs +27 -0
  661. package/esm2022/paginator/public_api.mjs +4 -0
  662. package/esm2022/panel/cax-design-system-panel.mjs +5 -0
  663. package/esm2022/panel/panel.interface.mjs +2 -0
  664. package/esm2022/panel/panel.mjs +393 -0
  665. package/esm2022/panel/public_api.mjs +3 -0
  666. package/esm2022/panelmenu/cax-design-system-panelmenu.mjs +5 -0
  667. package/esm2022/panelmenu/panelmenu.interface.mjs +2 -0
  668. package/esm2022/panelmenu/panelmenu.mjs +1276 -0
  669. package/esm2022/panelmenu/public_api.mjs +3 -0
  670. package/esm2022/password/cax-design-system-password.mjs +5 -0
  671. package/esm2022/password/password.mjs +1017 -0
  672. package/esm2022/password/public_api.mjs +2 -0
  673. package/esm2022/picklist/cax-design-system-picklist.mjs +5 -0
  674. package/esm2022/picklist/picklist.interface.mjs +2 -0
  675. package/esm2022/picklist/picklist.mjs +1909 -0
  676. package/esm2022/picklist/public_api.mjs +3 -0
  677. package/esm2022/progressbar/cax-design-system-progressbar.mjs +5 -0
  678. package/esm2022/progressbar/progressbar.mjs +86 -0
  679. package/esm2022/progressbar/progressbar.module.mjs +18 -0
  680. package/esm2022/progressbar/public_api.mjs +3 -0
  681. package/esm2022/progressspinner/cax-design-system-progressspinner.mjs +5 -0
  682. package/esm2022/progressspinner/progressspinner.mjs +112 -0
  683. package/esm2022/progressspinner/progressspinner.module.mjs +18 -0
  684. package/esm2022/progressspinner/public_api.mjs +3 -0
  685. package/esm2022/public_api.mjs +2 -0
  686. package/esm2022/radiobutton/cax-design-system-radiobutton.mjs +5 -0
  687. package/esm2022/radiobutton/public_api.mjs +4 -0
  688. package/esm2022/radiobutton/radiobutton.interface.mjs +2 -0
  689. package/esm2022/radiobutton/radiobutton.mjs +277 -0
  690. package/esm2022/radiobutton/radiobutton.module.mjs +16 -0
  691. package/esm2022/rating/cax-design-system-rating.mjs +5 -0
  692. package/esm2022/rating/public_api.mjs +3 -0
  693. package/esm2022/rating/rating.interface.mjs +2 -0
  694. package/esm2022/rating/rating.mjs +388 -0
  695. package/esm2022/ripple/cax-design-system-ripple.mjs +5 -0
  696. package/esm2022/ripple/public_api.mjs +3 -0
  697. package/esm2022/ripple/ripple.mjs +129 -0
  698. package/esm2022/ripple/ripple.module.mjs +16 -0
  699. package/esm2022/scroller/cax-design-system-scroller.mjs +5 -0
  700. package/esm2022/scroller/public_api.mjs +4 -0
  701. package/esm2022/scroller/scroller.interface.mjs +2 -0
  702. package/esm2022/scroller/scroller.mjs +981 -0
  703. package/esm2022/scroller/scroller.module.mjs +17 -0
  704. package/esm2022/scrollpanel/cax-design-system-scrollpanel.mjs +5 -0
  705. package/esm2022/scrollpanel/public_api.mjs +3 -0
  706. package/esm2022/scrollpanel/scrollpanel.interface.mjs +2 -0
  707. package/esm2022/scrollpanel/scrollpanel.mjs +501 -0
  708. package/esm2022/scrolltop/cax-design-system-scrolltop.mjs +5 -0
  709. package/esm2022/scrolltop/public_api.mjs +3 -0
  710. package/esm2022/scrolltop/scrolltop.interface.mjs +2 -0
  711. package/esm2022/scrolltop/scrolltop.mjs +282 -0
  712. package/esm2022/selectbutton/cax-design-system-selectbutton.mjs +5 -0
  713. package/esm2022/selectbutton/public_api.mjs +3 -0
  714. package/esm2022/selectbutton/selectbutton.interface.mjs +2 -0
  715. package/esm2022/selectbutton/selectbutton.mjs +378 -0
  716. package/esm2022/sidebar/cax-design-system-sidebar.mjs +5 -0
  717. package/esm2022/sidebar/public_api.mjs +4 -0
  718. package/esm2022/sidebar/sidebar.interface.mjs +2 -0
  719. package/esm2022/sidebar/sidebar.mjs +419 -0
  720. package/esm2022/sidebar/sidebar.module.mjs +21 -0
  721. package/esm2022/skeleton/cax-design-system-skeleton.mjs +5 -0
  722. package/esm2022/skeleton/public_api.mjs +3 -0
  723. package/esm2022/skeleton/skeleton.mjs +87 -0
  724. package/esm2022/skeleton/skeleton.module.mjs +18 -0
  725. package/esm2022/slidemenu/cax-design-system-slidemenu.mjs +5 -0
  726. package/esm2022/slidemenu/public_api.mjs +3 -0
  727. package/esm2022/slidemenu/slidemenu.interface.mjs +2 -0
  728. package/esm2022/slidemenu/slidemenu.mjs +1501 -0
  729. package/esm2022/slider/cax-design-system-slider.mjs +5 -0
  730. package/esm2022/slider/public_api.mjs +3 -0
  731. package/esm2022/slider/slider.interface.mjs +2 -0
  732. package/esm2022/slider/slider.mjs +796 -0
  733. package/esm2022/speeddial/cax-design-system-speeddial.mjs +5 -0
  734. package/esm2022/speeddial/public_api.mjs +4 -0
  735. package/esm2022/speeddial/speeddial.interface.mjs +2 -0
  736. package/esm2022/speeddial/speeddial.mjs +611 -0
  737. package/esm2022/speeddial/speeddial.module.mjs +24 -0
  738. package/esm2022/spinner/cax-design-system-spinner.mjs +5 -0
  739. package/esm2022/spinner/public_api.mjs +2 -0
  740. package/esm2022/spinner/spinner.mjs +447 -0
  741. package/esm2022/splitbutton/cax-design-system-splitbutton.mjs +5 -0
  742. package/esm2022/splitbutton/public_api.mjs +4 -0
  743. package/esm2022/splitbutton/splitbutton.interface.mjs +2 -0
  744. package/esm2022/splitbutton/splitbutton.mjs +364 -0
  745. package/esm2022/splitbutton/splitbutton.module.mjs +22 -0
  746. package/esm2022/splitter/cax-design-system-splitter.mjs +5 -0
  747. package/esm2022/splitter/public_api.mjs +3 -0
  748. package/esm2022/splitter/splitter.interface.mjs +2 -0
  749. package/esm2022/splitter/splitter.mjs +562 -0
  750. package/esm2022/stepper/cax-design-system-stepper.mjs +5 -0
  751. package/esm2022/stepper/public_api.mjs +3 -0
  752. package/esm2022/stepper/stepper.interface.mjs +2 -0
  753. package/esm2022/stepper/stepper.mjs +677 -0
  754. package/esm2022/steps/cax-design-system-steps.mjs +5 -0
  755. package/esm2022/steps/public_api.mjs +2 -0
  756. package/esm2022/steps/steps.mjs +345 -0
  757. package/esm2022/styleclass/cax-design-system-styleclass.mjs +5 -0
  758. package/esm2022/styleclass/public_api.mjs +2 -0
  759. package/esm2022/styleclass/styleclass.mjs +316 -0
  760. package/esm2022/table/cax-design-system-table.mjs +5 -0
  761. package/esm2022/table/columnfilter.interface.mjs +2 -0
  762. package/esm2022/table/components/cell-editor/cell-editor.mjs +52 -0
  763. package/esm2022/table/components/column-filter/column-filter.mjs +685 -0
  764. package/esm2022/table/components/column-filter-form-element/column-filter-form-element.mjs +106 -0
  765. package/esm2022/table/components/sort-icon/sort-icon.mjs +75 -0
  766. package/esm2022/table/components/table-body/table-body.mjs +152 -0
  767. package/esm2022/table/components/table-checkbox/table-checkbox.mjs +82 -0
  768. package/esm2022/table/components/table-header-checkbox/table-header-checkbox.mjs +92 -0
  769. package/esm2022/table/components/table-radio-button/table-radio-button.mjs +79 -0
  770. package/esm2022/table/directives/cancel-editable-row.directive.mjs +32 -0
  771. package/esm2022/table/directives/content-menu-row.directive.mjs +70 -0
  772. package/esm2022/table/directives/editable-column.directive.mjs +344 -0
  773. package/esm2022/table/directives/editable-row.directive.mjs +32 -0
  774. package/esm2022/table/directives/frozen-column.directive.mjs +77 -0
  775. package/esm2022/table/directives/init-editable-row.directive.mjs +32 -0
  776. package/esm2022/table/directives/reorderable-column.directive.mjs +115 -0
  777. package/esm2022/table/directives/reorderable-row-handle.directive.mjs +25 -0
  778. package/esm2022/table/directives/reorderable-row.directive.mjs +122 -0
  779. package/esm2022/table/directives/resizable-column.directive.mjs +123 -0
  780. package/esm2022/table/directives/row-group-header.directive.mjs +26 -0
  781. package/esm2022/table/directives/row-toggler.directive.mjs +42 -0
  782. package/esm2022/table/directives/save-editable-row.directive.mjs +32 -0
  783. package/esm2022/table/directives/selectable-row-double-click.directive.mjs +71 -0
  784. package/esm2022/table/directives/selectable-row.directive.mjs +243 -0
  785. package/esm2022/table/directives/sortable-column.directive.mjs +90 -0
  786. package/esm2022/table/public_api.mjs +29 -0
  787. package/esm2022/table/table.interface.mjs +2 -0
  788. package/esm2022/table/table.mjs +2721 -0
  789. package/esm2022/table/table.module.mjs +147 -0
  790. package/esm2022/table/table.service.mjs +42 -0
  791. package/esm2022/tabmenu/cax-design-system-tabmenu.mjs +5 -0
  792. package/esm2022/tabmenu/public_api.mjs +3 -0
  793. package/esm2022/tabmenu/tabmenu.interface.mjs +2 -0
  794. package/esm2022/tabmenu/tabmenu.mjs +576 -0
  795. package/esm2022/tabview/cax-design-system-tabview.mjs +5 -0
  796. package/esm2022/tabview/public_api.mjs +4 -0
  797. package/esm2022/tabview/tabview.interface.mjs +2 -0
  798. package/esm2022/tabview/tabview.mjs +824 -0
  799. package/esm2022/tabview/tabview.module.mjs +24 -0
  800. package/esm2022/tag/cax-design-system-tag.mjs +5 -0
  801. package/esm2022/tag/public_api.mjs +4 -0
  802. package/esm2022/tag/tag.interface.mjs +2 -0
  803. package/esm2022/tag/tag.mjs +95 -0
  804. package/esm2022/tag/tag.module.mjs +19 -0
  805. package/esm2022/terminal/cax-design-system-terminal.mjs +5 -0
  806. package/esm2022/terminal/public_api.mjs +3 -0
  807. package/esm2022/terminal/terminal.mjs +143 -0
  808. package/esm2022/terminal/terminalservice.mjs +25 -0
  809. package/esm2022/tieredmenu/cax-design-system-tieredmenu.mjs +5 -0
  810. package/esm2022/tieredmenu/public_api.mjs +4 -0
  811. package/esm2022/tieredmenu/tieredmenu.interface.mjs +2 -0
  812. package/esm2022/tieredmenu/tieredmenu.mjs +1289 -0
  813. package/esm2022/tieredmenu/tiredmenu.module.mjs +23 -0
  814. package/esm2022/timeline/cax-design-system-timeline.mjs +5 -0
  815. package/esm2022/timeline/public_api.mjs +3 -0
  816. package/esm2022/timeline/timeline.interface.mjs +2 -0
  817. package/esm2022/timeline/timeline.mjs +167 -0
  818. package/esm2022/toast/cax-design-system-toast.mjs +5 -0
  819. package/esm2022/toast/public_api.mjs +4 -0
  820. package/esm2022/toast/toast.interface.mjs +2 -0
  821. package/esm2022/toast/toast.mjs +324 -0
  822. package/esm2022/toast/toast.module.mjs +18 -0
  823. package/esm2022/toast/toastitem.mjs +170 -0
  824. package/esm2022/togglebutton/cax-design-system-togglebutton.mjs +5 -0
  825. package/esm2022/togglebutton/public_api.mjs +3 -0
  826. package/esm2022/togglebutton/togglebutton.interface.mjs +2 -0
  827. package/esm2022/togglebutton/togglebutton.mjs +274 -0
  828. package/esm2022/toggleswitch/cax-design-system-toggleswitch.mjs +5 -0
  829. package/esm2022/toggleswitch/public_api.mjs +3 -0
  830. package/esm2022/toggleswitch/toggleswitch.mjs +34 -0
  831. package/esm2022/toggleswitch/toggleswitch.module.mjs +19 -0
  832. package/esm2022/toolbar/cax-design-system-toolbar.mjs +5 -0
  833. package/esm2022/toolbar/public_api.mjs +3 -0
  834. package/esm2022/toolbar/toolbar.interface.mjs +2 -0
  835. package/esm2022/toolbar/toolbar.mjs +111 -0
  836. package/esm2022/tooltip/cax-design-system-tooltip.mjs +5 -0
  837. package/esm2022/tooltip/public_api.mjs +3 -0
  838. package/esm2022/tooltip/tooltip.mjs +889 -0
  839. package/esm2022/tooltip/tooltip.module.mjs +18 -0
  840. package/esm2022/tree/cax-design-system-tree.mjs +5 -0
  841. package/esm2022/tree/public_api.mjs +4 -0
  842. package/esm2022/tree/tree.interface.mjs +2 -0
  843. package/esm2022/tree/tree.mjs +1495 -0
  844. package/esm2022/tree/tree.module.mjs +29 -0
  845. package/esm2022/treeselect/cax-design-system-treeselect.mjs +5 -0
  846. package/esm2022/treeselect/public_api.mjs +3 -0
  847. package/esm2022/treeselect/treeselect.interface.mjs +2 -0
  848. package/esm2022/treeselect/treeselect.mjs +1193 -0
  849. package/esm2022/treetable/cax-design-system-treetable.mjs +5 -0
  850. package/esm2022/treetable/public_api.mjs +3 -0
  851. package/esm2022/treetable/treetable.interface.mjs +2 -0
  852. package/esm2022/treetable/treetable.mjs +4111 -0
  853. package/esm2022/tristatecheckbox/cax-design-system-tristatecheckbox.mjs +5 -0
  854. package/esm2022/tristatecheckbox/public_api.mjs +4 -0
  855. package/esm2022/tristatecheckbox/tristatecheckbox.interface.mjs +2 -0
  856. package/esm2022/tristatecheckbox/tristatecheckbox.mjs +215 -0
  857. package/esm2022/tristatecheckbox/tristatecheckbox.module.mjs +17 -0
  858. package/esm2022/ts-helpers/cax-design-system-ts-helpers.mjs +5 -0
  859. package/esm2022/ts-helpers/public_api.mjs +2 -0
  860. package/esm2022/ts-helpers/ts-helpers.mjs +2 -0
  861. package/esm2022/utils/cax-design-system-utils.mjs +5 -0
  862. package/esm2022/utils/objectutils.mjs +258 -0
  863. package/esm2022/utils/public_api.mjs +5 -0
  864. package/esm2022/utils/uniquecomponentid.mjs +6 -0
  865. package/esm2022/utils/zindexutils.mjs +35 -0
  866. package/esm2022/virtualscroller/cax-design-system-virtualscroller.mjs +5 -0
  867. package/esm2022/virtualscroller/public_api.mjs +3 -0
  868. package/esm2022/virtualscroller/virtualscroller.interface.mjs +2 -0
  869. package/esm2022/virtualscroller/virtualscroller.mjs +215 -0
  870. package/fesm2022/cax-design-system-accordion.mjs +617 -0
  871. package/fesm2022/cax-design-system-accordion.mjs.map +1 -0
  872. package/fesm2022/cax-design-system-animate.mjs +108 -0
  873. package/fesm2022/cax-design-system-animate.mjs.map +1 -0
  874. package/fesm2022/cax-design-system-animateonscroll.mjs +192 -0
  875. package/fesm2022/cax-design-system-animateonscroll.mjs.map +1 -0
  876. package/fesm2022/cax-design-system-api.mjs +995 -0
  877. package/fesm2022/cax-design-system-api.mjs.map +1 -0
  878. package/fesm2022/cax-design-system-autocomplete.mjs +1887 -0
  879. package/fesm2022/cax-design-system-autocomplete.mjs.map +1 -0
  880. package/fesm2022/cax-design-system-autofocus.mjs +85 -0
  881. package/fesm2022/cax-design-system-autofocus.mjs.map +1 -0
  882. package/fesm2022/cax-design-system-avatar.mjs +124 -0
  883. package/fesm2022/cax-design-system-avatar.mjs.map +1 -0
  884. package/fesm2022/cax-design-system-avatargroup.mjs +61 -0
  885. package/fesm2022/cax-design-system-avatargroup.mjs.map +1 -0
  886. package/fesm2022/cax-design-system-badge.mjs +270 -0
  887. package/fesm2022/cax-design-system-badge.mjs.map +1 -0
  888. package/fesm2022/cax-design-system-baseicon.mjs +52 -0
  889. package/fesm2022/cax-design-system-baseicon.mjs.map +1 -0
  890. package/fesm2022/cax-design-system-blockui.mjs +213 -0
  891. package/fesm2022/cax-design-system-blockui.mjs.map +1 -0
  892. package/fesm2022/cax-design-system-breadcrumb.mjs +146 -0
  893. package/fesm2022/cax-design-system-breadcrumb.mjs.map +1 -0
  894. package/fesm2022/cax-design-system-button.mjs +431 -0
  895. package/fesm2022/cax-design-system-button.mjs.map +1 -0
  896. package/fesm2022/cax-design-system-buttongroup.mjs +45 -0
  897. package/fesm2022/cax-design-system-buttongroup.mjs.map +1 -0
  898. package/fesm2022/cax-design-system-calendar.mjs +3212 -0
  899. package/fesm2022/cax-design-system-calendar.mjs.map +1 -0
  900. package/fesm2022/cax-design-system-card.mjs +141 -0
  901. package/fesm2022/cax-design-system-card.mjs.map +1 -0
  902. package/fesm2022/cax-design-system-carousel.mjs +975 -0
  903. package/fesm2022/cax-design-system-carousel.mjs.map +1 -0
  904. package/fesm2022/cax-design-system-cascadeselect.mjs +1163 -0
  905. package/fesm2022/cax-design-system-cascadeselect.mjs.map +1 -0
  906. package/fesm2022/cax-design-system-chart.mjs +243 -0
  907. package/fesm2022/cax-design-system-chart.mjs.map +1 -0
  908. package/fesm2022/cax-design-system-checkbox.mjs +326 -0
  909. package/fesm2022/cax-design-system-checkbox.mjs.map +1 -0
  910. package/fesm2022/cax-design-system-chip.mjs +109 -0
  911. package/fesm2022/cax-design-system-chip.mjs.map +1 -0
  912. package/fesm2022/cax-design-system-chips.mjs +588 -0
  913. package/fesm2022/cax-design-system-chips.mjs.map +1 -0
  914. package/fesm2022/cax-design-system-colorpicker.mjs +836 -0
  915. package/fesm2022/cax-design-system-colorpicker.mjs.map +1 -0
  916. package/fesm2022/cax-design-system-confirmdialog.mjs +696 -0
  917. package/fesm2022/cax-design-system-confirmdialog.mjs.map +1 -0
  918. package/fesm2022/cax-design-system-confirmpopup.mjs +506 -0
  919. package/fesm2022/cax-design-system-confirmpopup.mjs.map +1 -0
  920. package/fesm2022/cax-design-system-contextmenu.mjs +1311 -0
  921. package/fesm2022/cax-design-system-contextmenu.mjs.map +1 -0
  922. package/fesm2022/cax-design-system-dataview.mjs +730 -0
  923. package/fesm2022/cax-design-system-dataview.mjs.map +1 -0
  924. package/fesm2022/cax-design-system-defer.mjs +118 -0
  925. package/fesm2022/cax-design-system-defer.mjs.map +1 -0
  926. package/fesm2022/cax-design-system-dialog.mjs +1175 -0
  927. package/fesm2022/cax-design-system-dialog.mjs.map +1 -0
  928. package/fesm2022/cax-design-system-divider.mjs +89 -0
  929. package/fesm2022/cax-design-system-divider.mjs.map +1 -0
  930. package/fesm2022/cax-design-system-dock.mjs +438 -0
  931. package/fesm2022/cax-design-system-dock.mjs.map +1 -0
  932. package/fesm2022/cax-design-system-dom.mjs +757 -0
  933. package/fesm2022/cax-design-system-dom.mjs.map +1 -0
  934. package/fesm2022/cax-design-system-dragdrop.mjs +331 -0
  935. package/fesm2022/cax-design-system-dragdrop.mjs.map +1 -0
  936. package/fesm2022/cax-design-system-dropdown.mjs +1684 -0
  937. package/fesm2022/cax-design-system-dropdown.mjs.map +1 -0
  938. package/fesm2022/cax-design-system-dynamicdialog.mjs +1133 -0
  939. package/fesm2022/cax-design-system-dynamicdialog.mjs.map +1 -0
  940. package/fesm2022/cax-design-system-editor.mjs +399 -0
  941. package/fesm2022/cax-design-system-editor.mjs.map +1 -0
  942. package/fesm2022/cax-design-system-fieldset.mjs +304 -0
  943. package/fesm2022/cax-design-system-fieldset.mjs.map +1 -0
  944. package/fesm2022/cax-design-system-fileupload.mjs +1195 -0
  945. package/fesm2022/cax-design-system-fileupload.mjs.map +1 -0
  946. package/fesm2022/cax-design-system-floatlabel.mjs +51 -0
  947. package/fesm2022/cax-design-system-floatlabel.mjs.map +1 -0
  948. package/fesm2022/cax-design-system-focustrap.mjs +110 -0
  949. package/fesm2022/cax-design-system-focustrap.mjs.map +1 -0
  950. package/fesm2022/cax-design-system-galleria.mjs +1675 -0
  951. package/fesm2022/cax-design-system-galleria.mjs.map +1 -0
  952. package/fesm2022/cax-design-system-iconfield.mjs +51 -0
  953. package/fesm2022/cax-design-system-iconfield.mjs.map +1 -0
  954. package/fesm2022/cax-design-system-icons-angledoubledown.mjs +42 -0
  955. package/fesm2022/cax-design-system-icons-angledoubledown.mjs.map +1 -0
  956. package/fesm2022/cax-design-system-icons-angledoubleleft.mjs +42 -0
  957. package/fesm2022/cax-design-system-icons-angledoubleleft.mjs.map +1 -0
  958. package/fesm2022/cax-design-system-icons-angledoubleright.mjs +42 -0
  959. package/fesm2022/cax-design-system-icons-angledoubleright.mjs.map +1 -0
  960. package/fesm2022/cax-design-system-icons-angledoubleup.mjs +42 -0
  961. package/fesm2022/cax-design-system-icons-angledoubleup.mjs.map +1 -0
  962. package/fesm2022/cax-design-system-icons-angledown.mjs +38 -0
  963. package/fesm2022/cax-design-system-icons-angledown.mjs.map +1 -0
  964. package/fesm2022/cax-design-system-icons-angleleft.mjs +38 -0
  965. package/fesm2022/cax-design-system-icons-angleleft.mjs.map +1 -0
  966. package/fesm2022/cax-design-system-icons-angleright.mjs +38 -0
  967. package/fesm2022/cax-design-system-icons-angleright.mjs.map +1 -0
  968. package/fesm2022/cax-design-system-icons-angleup.mjs +38 -0
  969. package/fesm2022/cax-design-system-icons-angleup.mjs.map +1 -0
  970. package/fesm2022/cax-design-system-icons-arrowdown.mjs +61 -0
  971. package/fesm2022/cax-design-system-icons-arrowdown.mjs.map +1 -0
  972. package/fesm2022/cax-design-system-icons-arrowdownleft.mjs +38 -0
  973. package/fesm2022/cax-design-system-icons-arrowdownleft.mjs.map +1 -0
  974. package/fesm2022/cax-design-system-icons-arrowdownright.mjs +38 -0
  975. package/fesm2022/cax-design-system-icons-arrowdownright.mjs.map +1 -0
  976. package/fesm2022/cax-design-system-icons-arrowleft.mjs +61 -0
  977. package/fesm2022/cax-design-system-icons-arrowleft.mjs.map +1 -0
  978. package/fesm2022/cax-design-system-icons-arrowright.mjs +42 -0
  979. package/fesm2022/cax-design-system-icons-arrowright.mjs.map +1 -0
  980. package/fesm2022/cax-design-system-icons-arrowup.mjs +61 -0
  981. package/fesm2022/cax-design-system-icons-arrowup.mjs.map +1 -0
  982. package/fesm2022/cax-design-system-icons-ban.mjs +57 -0
  983. package/fesm2022/cax-design-system-icons-ban.mjs.map +1 -0
  984. package/fesm2022/cax-design-system-icons-bars.mjs +42 -0
  985. package/fesm2022/cax-design-system-icons-bars.mjs.map +1 -0
  986. package/fesm2022/cax-design-system-icons-blank.mjs +32 -0
  987. package/fesm2022/cax-design-system-icons-blank.mjs.map +1 -0
  988. package/fesm2022/cax-design-system-icons-calendar.mjs +38 -0
  989. package/fesm2022/cax-design-system-icons-calendar.mjs.map +1 -0
  990. package/fesm2022/cax-design-system-icons-caretleft.mjs +38 -0
  991. package/fesm2022/cax-design-system-icons-caretleft.mjs.map +1 -0
  992. package/fesm2022/cax-design-system-icons-caretright.mjs +38 -0
  993. package/fesm2022/cax-design-system-icons-caretright.mjs.map +1 -0
  994. package/fesm2022/cax-design-system-icons-check.mjs +38 -0
  995. package/fesm2022/cax-design-system-icons-check.mjs.map +1 -0
  996. package/fesm2022/cax-design-system-icons-chevrondown.mjs +38 -0
  997. package/fesm2022/cax-design-system-icons-chevrondown.mjs.map +1 -0
  998. package/fesm2022/cax-design-system-icons-chevronleft.mjs +38 -0
  999. package/fesm2022/cax-design-system-icons-chevronleft.mjs.map +1 -0
  1000. package/fesm2022/cax-design-system-icons-chevronright.mjs +38 -0
  1001. package/fesm2022/cax-design-system-icons-chevronright.mjs.map +1 -0
  1002. package/fesm2022/cax-design-system-icons-chevronup.mjs +38 -0
  1003. package/fesm2022/cax-design-system-icons-chevronup.mjs.map +1 -0
  1004. package/fesm2022/cax-design-system-icons-exclamationtriangle.mjs +73 -0
  1005. package/fesm2022/cax-design-system-icons-exclamationtriangle.mjs.map +1 -0
  1006. package/fesm2022/cax-design-system-icons-eye.mjs +42 -0
  1007. package/fesm2022/cax-design-system-icons-eye.mjs.map +1 -0
  1008. package/fesm2022/cax-design-system-icons-eyeslash.mjs +61 -0
  1009. package/fesm2022/cax-design-system-icons-eyeslash.mjs.map +1 -0
  1010. package/fesm2022/cax-design-system-icons-filter.mjs +57 -0
  1011. package/fesm2022/cax-design-system-icons-filter.mjs.map +1 -0
  1012. package/fesm2022/cax-design-system-icons-filterslash.mjs +61 -0
  1013. package/fesm2022/cax-design-system-icons-filterslash.mjs.map +1 -0
  1014. package/fesm2022/cax-design-system-icons-home.mjs +61 -0
  1015. package/fesm2022/cax-design-system-icons-home.mjs.map +1 -0
  1016. package/fesm2022/cax-design-system-icons-infocircle.mjs +61 -0
  1017. package/fesm2022/cax-design-system-icons-infocircle.mjs.map +1 -0
  1018. package/fesm2022/cax-design-system-icons-minus.mjs +39 -0
  1019. package/fesm2022/cax-design-system-icons-minus.mjs.map +1 -0
  1020. package/fesm2022/cax-design-system-icons-pencil.mjs +57 -0
  1021. package/fesm2022/cax-design-system-icons-pencil.mjs.map +1 -0
  1022. package/fesm2022/cax-design-system-icons-plus.mjs +57 -0
  1023. package/fesm2022/cax-design-system-icons-plus.mjs.map +1 -0
  1024. package/fesm2022/cax-design-system-icons-refresh.mjs +61 -0
  1025. package/fesm2022/cax-design-system-icons-refresh.mjs.map +1 -0
  1026. package/fesm2022/cax-design-system-icons-search.mjs +61 -0
  1027. package/fesm2022/cax-design-system-icons-search.mjs.map +1 -0
  1028. package/fesm2022/cax-design-system-icons-searchminus.mjs +61 -0
  1029. package/fesm2022/cax-design-system-icons-searchminus.mjs.map +1 -0
  1030. package/fesm2022/cax-design-system-icons-searchplus.mjs +61 -0
  1031. package/fesm2022/cax-design-system-icons-searchplus.mjs.map +1 -0
  1032. package/fesm2022/cax-design-system-icons-sortalt.mjs +69 -0
  1033. package/fesm2022/cax-design-system-icons-sortalt.mjs.map +1 -0
  1034. package/fesm2022/cax-design-system-icons-sortamountdown.mjs +57 -0
  1035. package/fesm2022/cax-design-system-icons-sortamountdown.mjs.map +1 -0
  1036. package/fesm2022/cax-design-system-icons-sortamountupalt.mjs +57 -0
  1037. package/fesm2022/cax-design-system-icons-sortamountupalt.mjs.map +1 -0
  1038. package/fesm2022/cax-design-system-icons-spinner.mjs +57 -0
  1039. package/fesm2022/cax-design-system-icons-spinner.mjs.map +1 -0
  1040. package/fesm2022/cax-design-system-icons-star.mjs +57 -0
  1041. package/fesm2022/cax-design-system-icons-star.mjs.map +1 -0
  1042. package/fesm2022/cax-design-system-icons-starfill.mjs +57 -0
  1043. package/fesm2022/cax-design-system-icons-starfill.mjs.map +1 -0
  1044. package/fesm2022/cax-design-system-icons-thlarge.mjs +61 -0
  1045. package/fesm2022/cax-design-system-icons-thlarge.mjs.map +1 -0
  1046. package/fesm2022/cax-design-system-icons-times.mjs +38 -0
  1047. package/fesm2022/cax-design-system-icons-times.mjs.map +1 -0
  1048. package/fesm2022/cax-design-system-icons-timescircle.mjs +61 -0
  1049. package/fesm2022/cax-design-system-icons-timescircle.mjs.map +1 -0
  1050. package/fesm2022/cax-design-system-icons-trash.mjs +61 -0
  1051. package/fesm2022/cax-design-system-icons-trash.mjs.map +1 -0
  1052. package/fesm2022/cax-design-system-icons-undo.mjs +61 -0
  1053. package/fesm2022/cax-design-system-icons-undo.mjs.map +1 -0
  1054. package/fesm2022/cax-design-system-icons-upload.mjs +61 -0
  1055. package/fesm2022/cax-design-system-icons-upload.mjs.map +1 -0
  1056. package/fesm2022/cax-design-system-icons-windowmaximize.mjs +61 -0
  1057. package/fesm2022/cax-design-system-icons-windowmaximize.mjs.map +1 -0
  1058. package/fesm2022/cax-design-system-icons-windowminimize.mjs +61 -0
  1059. package/fesm2022/cax-design-system-icons-windowminimize.mjs.map +1 -0
  1060. package/fesm2022/cax-design-system-image.mjs +438 -0
  1061. package/fesm2022/cax-design-system-image.mjs.map +1 -0
  1062. package/fesm2022/cax-design-system-inplace.mjs +250 -0
  1063. package/fesm2022/cax-design-system-inplace.mjs.map +1 -0
  1064. package/fesm2022/cax-design-system-inputgroup.mjs +77 -0
  1065. package/fesm2022/cax-design-system-inputgroup.mjs.map +1 -0
  1066. package/fesm2022/cax-design-system-inputgroupaddon.mjs +60 -0
  1067. package/fesm2022/cax-design-system-inputgroupaddon.mjs.map +1 -0
  1068. package/fesm2022/cax-design-system-inputicon.mjs +45 -0
  1069. package/fesm2022/cax-design-system-inputicon.mjs.map +1 -0
  1070. package/fesm2022/cax-design-system-inputmask.mjs +921 -0
  1071. package/fesm2022/cax-design-system-inputmask.mjs.map +1 -0
  1072. package/fesm2022/cax-design-system-inputnumber.mjs +1310 -0
  1073. package/fesm2022/cax-design-system-inputnumber.mjs.map +1 -0
  1074. package/fesm2022/cax-design-system-inputotp.mjs +388 -0
  1075. package/fesm2022/cax-design-system-inputotp.mjs.map +1 -0
  1076. package/fesm2022/cax-design-system-inputswitch.mjs +251 -0
  1077. package/fesm2022/cax-design-system-inputswitch.mjs.map +1 -0
  1078. package/fesm2022/cax-design-system-inputtext.mjs +145 -0
  1079. package/fesm2022/cax-design-system-inputtext.mjs.map +1 -0
  1080. package/fesm2022/cax-design-system-inputtextarea.mjs +142 -0
  1081. package/fesm2022/cax-design-system-inputtextarea.mjs.map +1 -0
  1082. package/fesm2022/cax-design-system-keyfilter.mjs +272 -0
  1083. package/fesm2022/cax-design-system-keyfilter.mjs.map +1 -0
  1084. package/fesm2022/cax-design-system-knob.mjs +471 -0
  1085. package/fesm2022/cax-design-system-knob.mjs.map +1 -0
  1086. package/fesm2022/cax-design-system-listbox.mjs +1562 -0
  1087. package/fesm2022/cax-design-system-listbox.mjs.map +1 -0
  1088. package/fesm2022/cax-design-system-logo.mjs +65 -0
  1089. package/fesm2022/cax-design-system-logo.mjs.map +1 -0
  1090. package/fesm2022/cax-design-system-megamenu.mjs +1197 -0
  1091. package/fesm2022/cax-design-system-megamenu.mjs.map +1 -0
  1092. package/fesm2022/cax-design-system-menu.mjs +960 -0
  1093. package/fesm2022/cax-design-system-menu.mjs.map +1 -0
  1094. package/fesm2022/cax-design-system-menubar.mjs +1256 -0
  1095. package/fesm2022/cax-design-system-menubar.mjs.map +1 -0
  1096. package/fesm2022/cax-design-system-message.mjs +119 -0
  1097. package/fesm2022/cax-design-system-message.mjs.map +1 -0
  1098. package/fesm2022/cax-design-system-messages.mjs +303 -0
  1099. package/fesm2022/cax-design-system-messages.mjs.map +1 -0
  1100. package/fesm2022/cax-design-system-metergroup.mjs +287 -0
  1101. package/fesm2022/cax-design-system-metergroup.mjs.map +1 -0
  1102. package/fesm2022/cax-design-system-multiselect.mjs +2532 -0
  1103. package/fesm2022/cax-design-system-multiselect.mjs.map +1 -0
  1104. package/fesm2022/cax-design-system-navigation.mjs +281 -0
  1105. package/fesm2022/cax-design-system-navigation.mjs.map +1 -0
  1106. package/fesm2022/cax-design-system-orderlist.mjs +1000 -0
  1107. package/fesm2022/cax-design-system-orderlist.mjs.map +1 -0
  1108. package/fesm2022/cax-design-system-organizationchart.mjs +423 -0
  1109. package/fesm2022/cax-design-system-organizationchart.mjs.map +1 -0
  1110. package/fesm2022/cax-design-system-overlay.mjs +599 -0
  1111. package/fesm2022/cax-design-system-overlay.mjs.map +1 -0
  1112. package/fesm2022/cax-design-system-overlaypanel.mjs +490 -0
  1113. package/fesm2022/cax-design-system-overlaypanel.mjs.map +1 -0
  1114. package/fesm2022/cax-design-system-paginator.mjs +454 -0
  1115. package/fesm2022/cax-design-system-paginator.mjs.map +1 -0
  1116. package/fesm2022/cax-design-system-panel.mjs +400 -0
  1117. package/fesm2022/cax-design-system-panel.mjs.map +1 -0
  1118. package/fesm2022/cax-design-system-panelmenu.mjs +1283 -0
  1119. package/fesm2022/cax-design-system-panelmenu.mjs.map +1 -0
  1120. package/fesm2022/cax-design-system-password.mjs +1024 -0
  1121. package/fesm2022/cax-design-system-password.mjs.map +1 -0
  1122. package/fesm2022/cax-design-system-picklist.mjs +1916 -0
  1123. package/fesm2022/cax-design-system-picklist.mjs.map +1 -0
  1124. package/fesm2022/cax-design-system-progressbar.mjs +108 -0
  1125. package/fesm2022/cax-design-system-progressbar.mjs.map +1 -0
  1126. package/fesm2022/cax-design-system-progressspinner.mjs +134 -0
  1127. package/fesm2022/cax-design-system-progressspinner.mjs.map +1 -0
  1128. package/fesm2022/cax-design-system-radiobutton.mjs +297 -0
  1129. package/fesm2022/cax-design-system-radiobutton.mjs.map +1 -0
  1130. package/fesm2022/cax-design-system-rating.mjs +395 -0
  1131. package/fesm2022/cax-design-system-rating.mjs.map +1 -0
  1132. package/fesm2022/cax-design-system-ripple.mjs +149 -0
  1133. package/fesm2022/cax-design-system-ripple.mjs.map +1 -0
  1134. package/fesm2022/cax-design-system-scroller.mjs +1001 -0
  1135. package/fesm2022/cax-design-system-scroller.mjs.map +1 -0
  1136. package/fesm2022/cax-design-system-scrollpanel.mjs +508 -0
  1137. package/fesm2022/cax-design-system-scrollpanel.mjs.map +1 -0
  1138. package/fesm2022/cax-design-system-scrolltop.mjs +289 -0
  1139. package/fesm2022/cax-design-system-scrolltop.mjs.map +1 -0
  1140. package/fesm2022/cax-design-system-selectbutton.mjs +385 -0
  1141. package/fesm2022/cax-design-system-selectbutton.mjs.map +1 -0
  1142. package/fesm2022/cax-design-system-sidebar.mjs +439 -0
  1143. package/fesm2022/cax-design-system-sidebar.mjs.map +1 -0
  1144. package/fesm2022/cax-design-system-skeleton.mjs +109 -0
  1145. package/fesm2022/cax-design-system-skeleton.mjs.map +1 -0
  1146. package/fesm2022/cax-design-system-slidemenu.mjs +1508 -0
  1147. package/fesm2022/cax-design-system-slidemenu.mjs.map +1 -0
  1148. package/fesm2022/cax-design-system-slider.mjs +803 -0
  1149. package/fesm2022/cax-design-system-slider.mjs.map +1 -0
  1150. package/fesm2022/cax-design-system-speeddial.mjs +637 -0
  1151. package/fesm2022/cax-design-system-speeddial.mjs.map +1 -0
  1152. package/fesm2022/cax-design-system-spinner.mjs +454 -0
  1153. package/fesm2022/cax-design-system-spinner.mjs.map +1 -0
  1154. package/fesm2022/cax-design-system-splitbutton.mjs +390 -0
  1155. package/fesm2022/cax-design-system-splitbutton.mjs.map +1 -0
  1156. package/fesm2022/cax-design-system-splitter.mjs +569 -0
  1157. package/fesm2022/cax-design-system-splitter.mjs.map +1 -0
  1158. package/fesm2022/cax-design-system-stepper.mjs +684 -0
  1159. package/fesm2022/cax-design-system-stepper.mjs.map +1 -0
  1160. package/fesm2022/cax-design-system-steps.mjs +352 -0
  1161. package/fesm2022/cax-design-system-steps.mjs.map +1 -0
  1162. package/fesm2022/cax-design-system-styleclass.mjs +323 -0
  1163. package/fesm2022/cax-design-system-styleclass.mjs.map +1 -0
  1164. package/fesm2022/cax-design-system-table.mjs +5562 -0
  1165. package/fesm2022/cax-design-system-table.mjs.map +1 -0
  1166. package/fesm2022/cax-design-system-tabmenu.mjs +583 -0
  1167. package/fesm2022/cax-design-system-tabmenu.mjs.map +1 -0
  1168. package/fesm2022/cax-design-system-tabview.mjs +850 -0
  1169. package/fesm2022/cax-design-system-tabview.mjs.map +1 -0
  1170. package/fesm2022/cax-design-system-tag.mjs +117 -0
  1171. package/fesm2022/cax-design-system-tag.mjs.map +1 -0
  1172. package/fesm2022/cax-design-system-terminal.mjs +172 -0
  1173. package/fesm2022/cax-design-system-terminal.mjs.map +1 -0
  1174. package/fesm2022/cax-design-system-tieredmenu.mjs +1314 -0
  1175. package/fesm2022/cax-design-system-tieredmenu.mjs.map +1 -0
  1176. package/fesm2022/cax-design-system-timeline.mjs +174 -0
  1177. package/fesm2022/cax-design-system-timeline.mjs.map +1 -0
  1178. package/fesm2022/cax-design-system-toast.mjs +507 -0
  1179. package/fesm2022/cax-design-system-toast.mjs.map +1 -0
  1180. package/fesm2022/cax-design-system-togglebutton.mjs +281 -0
  1181. package/fesm2022/cax-design-system-togglebutton.mjs.map +1 -0
  1182. package/fesm2022/cax-design-system-toggleswitch.mjs +57 -0
  1183. package/fesm2022/cax-design-system-toggleswitch.mjs.map +1 -0
  1184. package/fesm2022/cax-design-system-toolbar.mjs +118 -0
  1185. package/fesm2022/cax-design-system-toolbar.mjs.map +1 -0
  1186. package/fesm2022/cax-design-system-tooltip.mjs +910 -0
  1187. package/fesm2022/cax-design-system-tooltip.mjs.map +1 -0
  1188. package/fesm2022/cax-design-system-tree.mjs +1527 -0
  1189. package/fesm2022/cax-design-system-tree.mjs.map +1 -0
  1190. package/fesm2022/cax-design-system-treeselect.mjs +1200 -0
  1191. package/fesm2022/cax-design-system-treeselect.mjs.map +1 -0
  1192. package/fesm2022/cax-design-system-treetable.mjs +4118 -0
  1193. package/fesm2022/cax-design-system-treetable.mjs.map +1 -0
  1194. package/fesm2022/cax-design-system-tristatecheckbox.mjs +235 -0
  1195. package/fesm2022/cax-design-system-tristatecheckbox.mjs.map +1 -0
  1196. package/fesm2022/cax-design-system-ts-helpers.mjs +4 -0
  1197. package/fesm2022/cax-design-system-ts-helpers.mjs.map +1 -0
  1198. package/fesm2022/cax-design-system-utils.mjs +305 -0
  1199. package/fesm2022/cax-design-system-utils.mjs.map +1 -0
  1200. package/fesm2022/cax-design-system-virtualscroller.mjs +222 -0
  1201. package/fesm2022/cax-design-system-virtualscroller.mjs.map +1 -0
  1202. package/fesm2022/cax-design-system.mjs +6 -0
  1203. package/fesm2022/cax-design-system.mjs.map +1 -0
  1204. package/fieldset/fieldset.d.ts +93 -0
  1205. package/fieldset/fieldset.interface.d.ts +46 -0
  1206. package/fieldset/index.d.ts +5 -0
  1207. package/fieldset/public_api.d.ts +2 -0
  1208. package/fileupload/fileupload.d.ts +380 -0
  1209. package/fileupload/fileupload.interface.d.ts +226 -0
  1210. package/fileupload/index.d.ts +5 -0
  1211. package/fileupload/public_api.d.ts +2 -0
  1212. package/floatlabel/floatlabel.d.ts +17 -0
  1213. package/floatlabel/index.d.ts +5 -0
  1214. package/floatlabel/public_api.d.ts +1 -0
  1215. package/focustrap/focustrap.d.ts +34 -0
  1216. package/focustrap/index.d.ts +5 -0
  1217. package/focustrap/public_api.d.ts +1 -0
  1218. package/galleria/galleria.d.ts +404 -0
  1219. package/galleria/galleria.interface.d.ts +97 -0
  1220. package/galleria/index.d.ts +5 -0
  1221. package/galleria/public_api.d.ts +2 -0
  1222. package/iconfield/iconfield.d.ts +25 -0
  1223. package/iconfield/index.d.ts +5 -0
  1224. package/iconfield/public_api.d.ts +1 -0
  1225. package/icons/angledoubledown/angledoubledown.d.ts +6 -0
  1226. package/icons/angledoubledown/index.d.ts +5 -0
  1227. package/icons/angledoubledown/public_api.d.ts +1 -0
  1228. package/icons/angledoubleleft/angledoubleleft.d.ts +6 -0
  1229. package/icons/angledoubleleft/index.d.ts +5 -0
  1230. package/icons/angledoubleleft/public_api.d.ts +1 -0
  1231. package/icons/angledoubleright/angledoubleright.d.ts +6 -0
  1232. package/icons/angledoubleright/index.d.ts +5 -0
  1233. package/icons/angledoubleright/public_api.d.ts +1 -0
  1234. package/icons/angledoubleup/angledoubleup.d.ts +6 -0
  1235. package/icons/angledoubleup/index.d.ts +5 -0
  1236. package/icons/angledoubleup/public_api.d.ts +1 -0
  1237. package/icons/angledown/angledown.d.ts +6 -0
  1238. package/icons/angledown/index.d.ts +5 -0
  1239. package/icons/angledown/public_api.d.ts +1 -0
  1240. package/icons/angleleft/angleleft.d.ts +6 -0
  1241. package/icons/angleleft/index.d.ts +5 -0
  1242. package/icons/angleleft/public_api.d.ts +1 -0
  1243. package/icons/angleright/angleright.d.ts +6 -0
  1244. package/icons/angleright/index.d.ts +5 -0
  1245. package/icons/angleright/public_api.d.ts +1 -0
  1246. package/icons/angleup/angleup.d.ts +6 -0
  1247. package/icons/angleup/index.d.ts +5 -0
  1248. package/icons/angleup/public_api.d.ts +1 -0
  1249. package/icons/arrowdown/arrowdown.d.ts +9 -0
  1250. package/icons/arrowdown/index.d.ts +5 -0
  1251. package/icons/arrowdown/public_api.d.ts +1 -0
  1252. package/icons/arrowdownleft/arrowdownleft.d.ts +6 -0
  1253. package/icons/arrowdownleft/index.d.ts +5 -0
  1254. package/icons/arrowdownleft/public_api.d.ts +1 -0
  1255. package/icons/arrowdownright/arrowdownright.d.ts +6 -0
  1256. package/icons/arrowdownright/index.d.ts +5 -0
  1257. package/icons/arrowdownright/public_api.d.ts +1 -0
  1258. package/icons/arrowleft/arrowleft.d.ts +8 -0
  1259. package/icons/arrowleft/index.d.ts +5 -0
  1260. package/icons/arrowleft/public_api.d.ts +1 -0
  1261. package/icons/arrowright/arrowright.d.ts +6 -0
  1262. package/icons/arrowright/index.d.ts +5 -0
  1263. package/icons/arrowright/public_api.d.ts +1 -0
  1264. package/icons/arrowup/arrowup.d.ts +8 -0
  1265. package/icons/arrowup/index.d.ts +5 -0
  1266. package/icons/arrowup/public_api.d.ts +1 -0
  1267. package/icons/ban/ban.d.ts +8 -0
  1268. package/icons/ban/index.d.ts +5 -0
  1269. package/icons/ban/public_api.d.ts +1 -0
  1270. package/icons/bars/bars.d.ts +6 -0
  1271. package/icons/bars/index.d.ts +5 -0
  1272. package/icons/bars/public_api.d.ts +1 -0
  1273. package/icons/blank/blank.d.ts +6 -0
  1274. package/icons/blank/index.d.ts +5 -0
  1275. package/icons/blank/public_api.d.ts +1 -0
  1276. package/icons/calendar/calendar.d.ts +6 -0
  1277. package/icons/calendar/index.d.ts +5 -0
  1278. package/icons/calendar/public_api.d.ts +1 -0
  1279. package/icons/caretleft/caretleft.d.ts +6 -0
  1280. package/icons/caretleft/index.d.ts +5 -0
  1281. package/icons/caretleft/public_api.d.ts +1 -0
  1282. package/icons/caretright/caretright.d.ts +6 -0
  1283. package/icons/caretright/index.d.ts +5 -0
  1284. package/icons/caretright/public_api.d.ts +1 -0
  1285. package/icons/check/check.d.ts +6 -0
  1286. package/icons/check/index.d.ts +5 -0
  1287. package/icons/check/public_api.d.ts +1 -0
  1288. package/icons/chevrondown/chevrondown.d.ts +6 -0
  1289. package/icons/chevrondown/index.d.ts +5 -0
  1290. package/icons/chevrondown/public_api.d.ts +1 -0
  1291. package/icons/chevronleft/chevronleft.d.ts +6 -0
  1292. package/icons/chevronleft/index.d.ts +5 -0
  1293. package/icons/chevronleft/public_api.d.ts +1 -0
  1294. package/icons/chevronright/chevronright.d.ts +6 -0
  1295. package/icons/chevronright/index.d.ts +5 -0
  1296. package/icons/chevronright/public_api.d.ts +1 -0
  1297. package/icons/chevronup/chevronup.d.ts +6 -0
  1298. package/icons/chevronup/index.d.ts +5 -0
  1299. package/icons/chevronup/public_api.d.ts +1 -0
  1300. package/icons/exclamationtriangle/exclamationtriangle.d.ts +9 -0
  1301. package/icons/exclamationtriangle/index.d.ts +5 -0
  1302. package/icons/exclamationtriangle/public_api.d.ts +1 -0
  1303. package/icons/eye/eye.d.ts +6 -0
  1304. package/icons/eye/index.d.ts +5 -0
  1305. package/icons/eye/public_api.d.ts +1 -0
  1306. package/icons/eyeslash/eyeslash.d.ts +8 -0
  1307. package/icons/eyeslash/index.d.ts +5 -0
  1308. package/icons/eyeslash/public_api.d.ts +1 -0
  1309. package/icons/filter/filter.d.ts +8 -0
  1310. package/icons/filter/index.d.ts +5 -0
  1311. package/icons/filter/public_api.d.ts +1 -0
  1312. package/icons/filterslash/filterslash.d.ts +8 -0
  1313. package/icons/filterslash/index.d.ts +5 -0
  1314. package/icons/filterslash/public_api.d.ts +1 -0
  1315. package/icons/home/home.d.ts +8 -0
  1316. package/icons/home/index.d.ts +5 -0
  1317. package/icons/home/public_api.d.ts +1 -0
  1318. package/icons/infocircle/index.d.ts +5 -0
  1319. package/icons/infocircle/infocircle.d.ts +8 -0
  1320. package/icons/infocircle/public_api.d.ts +1 -0
  1321. package/icons/minus/index.d.ts +5 -0
  1322. package/icons/minus/minus.d.ts +6 -0
  1323. package/icons/minus/public_api.d.ts +1 -0
  1324. package/icons/pencil/index.d.ts +5 -0
  1325. package/icons/pencil/pencil.d.ts +8 -0
  1326. package/icons/pencil/public_api.d.ts +1 -0
  1327. package/icons/plus/index.d.ts +5 -0
  1328. package/icons/plus/plus.d.ts +8 -0
  1329. package/icons/plus/public_api.d.ts +1 -0
  1330. package/icons/refresh/index.d.ts +5 -0
  1331. package/icons/refresh/public_api.d.ts +1 -0
  1332. package/icons/refresh/refresh.d.ts +8 -0
  1333. package/icons/search/index.d.ts +5 -0
  1334. package/icons/search/public_api.d.ts +1 -0
  1335. package/icons/search/search.d.ts +8 -0
  1336. package/icons/searchminus/index.d.ts +5 -0
  1337. package/icons/searchminus/public_api.d.ts +1 -0
  1338. package/icons/searchminus/searchminus.d.ts +8 -0
  1339. package/icons/searchplus/index.d.ts +5 -0
  1340. package/icons/searchplus/public_api.d.ts +1 -0
  1341. package/icons/searchplus/searchplus.d.ts +8 -0
  1342. package/icons/sortalt/index.d.ts +5 -0
  1343. package/icons/sortalt/public_api.d.ts +1 -0
  1344. package/icons/sortalt/sortalt.d.ts +8 -0
  1345. package/icons/sortamountdown/index.d.ts +5 -0
  1346. package/icons/sortamountdown/public_api.d.ts +1 -0
  1347. package/icons/sortamountdown/sortamountdown.d.ts +8 -0
  1348. package/icons/sortamountupalt/index.d.ts +5 -0
  1349. package/icons/sortamountupalt/public_api.d.ts +1 -0
  1350. package/icons/sortamountupalt/sortamountupalt.d.ts +8 -0
  1351. package/icons/spinner/index.d.ts +5 -0
  1352. package/icons/spinner/public_api.d.ts +1 -0
  1353. package/icons/spinner/spinner.d.ts +8 -0
  1354. package/icons/star/index.d.ts +5 -0
  1355. package/icons/star/public_api.d.ts +1 -0
  1356. package/icons/star/star.d.ts +8 -0
  1357. package/icons/starfill/index.d.ts +5 -0
  1358. package/icons/starfill/public_api.d.ts +1 -0
  1359. package/icons/starfill/starfill.d.ts +8 -0
  1360. package/icons/thlarge/index.d.ts +5 -0
  1361. package/icons/thlarge/public_api.d.ts +1 -0
  1362. package/icons/thlarge/thlarge.d.ts +8 -0
  1363. package/icons/times/index.d.ts +5 -0
  1364. package/icons/times/public_api.d.ts +1 -0
  1365. package/icons/times/times.d.ts +6 -0
  1366. package/icons/timescircle/index.d.ts +5 -0
  1367. package/icons/timescircle/public_api.d.ts +1 -0
  1368. package/icons/timescircle/timescircle.d.ts +8 -0
  1369. package/icons/trash/index.d.ts +5 -0
  1370. package/icons/trash/public_api.d.ts +1 -0
  1371. package/icons/trash/trash.d.ts +8 -0
  1372. package/icons/undo/index.d.ts +5 -0
  1373. package/icons/undo/public_api.d.ts +1 -0
  1374. package/icons/undo/undo.d.ts +8 -0
  1375. package/icons/upload/index.d.ts +5 -0
  1376. package/icons/upload/public_api.d.ts +1 -0
  1377. package/icons/upload/upload.d.ts +8 -0
  1378. package/icons/windowmaximize/index.d.ts +5 -0
  1379. package/icons/windowmaximize/public_api.d.ts +1 -0
  1380. package/icons/windowmaximize/windowmaximize.d.ts +8 -0
  1381. package/icons/windowminimize/index.d.ts +5 -0
  1382. package/icons/windowminimize/public_api.d.ts +1 -0
  1383. package/icons/windowminimize/windowminimize.d.ts +8 -0
  1384. package/image/image.d.ts +188 -0
  1385. package/image/image.interface.d.ts +31 -0
  1386. package/image/image.module.d.ts +8 -0
  1387. package/image/index.d.ts +5 -0
  1388. package/image/public_api.d.ts +3 -0
  1389. package/index.d.ts +5 -0
  1390. package/inplace/index.d.ts +5 -0
  1391. package/inplace/inplace.d.ts +109 -0
  1392. package/inplace/inplace.interface.d.ts +19 -0
  1393. package/inplace/public_api.d.ts +2 -0
  1394. package/inputgroup/index.d.ts +5 -0
  1395. package/inputgroup/inputgroup.d.ts +28 -0
  1396. package/inputgroup/inputgroup.module.d.ts +15 -0
  1397. package/inputgroup/public_api.d.ts +2 -0
  1398. package/inputgroupaddon/index.d.ts +5 -0
  1399. package/inputgroupaddon/inputgroupaddon.d.ts +21 -0
  1400. package/inputgroupaddon/inputgroupaddon.module.d.ts +14 -0
  1401. package/inputgroupaddon/public_api.d.ts +2 -0
  1402. package/inputicon/index.d.ts +5 -0
  1403. package/inputicon/inputicon.d.ts +21 -0
  1404. package/inputicon/public_api.d.ts +1 -0
  1405. package/inputmask/index.d.ts +5 -0
  1406. package/inputmask/inputmask.d.ts +273 -0
  1407. package/inputmask/inputmask.interface.d.ts +19 -0
  1408. package/inputmask/public_api.d.ts +2 -0
  1409. package/inputnumber/index.d.ts +5 -0
  1410. package/inputnumber/inputnumber.d.ts +392 -0
  1411. package/inputnumber/inputnumber.interface.d.ts +38 -0
  1412. package/inputnumber/inputnumber.module.d.ts +8 -0
  1413. package/inputnumber/public_api.d.ts +3 -0
  1414. package/inputotp/index.d.ts +5 -0
  1415. package/inputotp/inputotp.d.ts +123 -0
  1416. package/inputotp/inputotp.interface.d.ts +65 -0
  1417. package/inputotp/public_api.d.ts +2 -0
  1418. package/inputswitch/index.d.ts +5 -0
  1419. package/inputswitch/inputswitch.d.ts +106 -0
  1420. package/inputswitch/inputswitch.interface.d.ts +15 -0
  1421. package/inputswitch/public_api.d.ts +2 -0
  1422. package/inputtext/index.d.ts +5 -0
  1423. package/inputtext/inputtext.component.d.ts +25 -0
  1424. package/inputtext/inputtext.directive.d.ts +20 -0
  1425. package/inputtext/inputtext.module.d.ts +10 -0
  1426. package/inputtext/public_api.d.ts +3 -0
  1427. package/inputtextarea/index.d.ts +5 -0
  1428. package/inputtextarea/inputtextarea.d.ts +53 -0
  1429. package/inputtextarea/public_api.d.ts +1 -0
  1430. package/keyfilter/index.d.ts +5 -0
  1431. package/keyfilter/keyfilter.d.ts +58 -0
  1432. package/keyfilter/keyfilter.interface.d.ts +5 -0
  1433. package/keyfilter/public_api.d.ts +2 -0
  1434. package/knob/index.d.ts +5 -0
  1435. package/knob/knob.d.ts +178 -0
  1436. package/knob/public_api.d.ts +1 -0
  1437. package/listbox/index.d.ts +5 -0
  1438. package/listbox/listbox.d.ts +463 -0
  1439. package/listbox/listbox.interface.d.ts +156 -0
  1440. package/listbox/public_api.d.ts +2 -0
  1441. package/logo/index.d.ts +5 -0
  1442. package/logo/logo.d.ts +11 -0
  1443. package/logo/logo.module.d.ts +7 -0
  1444. package/logo/public_api.d.ts +2 -0
  1445. package/megamenu/index.d.ts +5 -0
  1446. package/megamenu/megamenu.d.ts +198 -0
  1447. package/megamenu/megamenu.interface.d.ts +31 -0
  1448. package/megamenu/public_api.d.ts +2 -0
  1449. package/menu/index.d.ts +5 -0
  1450. package/menu/menu.d.ts +220 -0
  1451. package/menu/public_api.d.ts +1 -0
  1452. package/menubar/index.d.ts +5 -0
  1453. package/menubar/menubar.d.ts +248 -0
  1454. package/menubar/menubar.interface.d.ts +40 -0
  1455. package/menubar/public_api.d.ts +2 -0
  1456. package/message/index.d.ts +5 -0
  1457. package/message/message.d.ts +52 -0
  1458. package/message/public_api.d.ts +1 -0
  1459. package/messages/index.d.ts +5 -0
  1460. package/messages/messages.d.ts +115 -0
  1461. package/messages/messages.interface.d.ts +18 -0
  1462. package/messages/messages.module.d.ts +8 -0
  1463. package/messages/public_api.d.ts +3 -0
  1464. package/metergroup/index.d.ts +5 -0
  1465. package/metergroup/metergroup.d.ts +101 -0
  1466. package/metergroup/metergroup.interface.d.ts +122 -0
  1467. package/metergroup/public_api.d.ts +2 -0
  1468. package/multiselect/index.d.ts +5 -0
  1469. package/multiselect/multiselect.d.ts +724 -0
  1470. package/multiselect/multiselect.interface.d.ts +247 -0
  1471. package/multiselect/public_api.d.ts +2 -0
  1472. package/navigation/index.d.ts +5 -0
  1473. package/navigation/navigation.d.ts +54 -0
  1474. package/navigation/navigation.interface.d.ts +23 -0
  1475. package/navigation/navigation.module.d.ts +7 -0
  1476. package/navigation/public_api.d.ts +2 -0
  1477. package/orderlist/index.d.ts +5 -0
  1478. package/orderlist/orderlist.d.ts +270 -0
  1479. package/orderlist/orderlist.interface.d.ts +110 -0
  1480. package/orderlist/public_api.d.ts +2 -0
  1481. package/organizationchart/index.d.ts +5 -0
  1482. package/organizationchart/organizationchart.d.ts +132 -0
  1483. package/organizationchart/organizationchart.interface.d.ts +59 -0
  1484. package/organizationchart/public_api.d.ts +2 -0
  1485. package/overlay/index.d.ts +5 -0
  1486. package/overlay/overlay.d.ts +238 -0
  1487. package/overlay/overlay.module.d.ts +8 -0
  1488. package/overlay/public_api.d.ts +2 -0
  1489. package/overlaypanel/index.d.ts +5 -0
  1490. package/overlaypanel/overlaypanel.d.ts +162 -0
  1491. package/overlaypanel/overlaypanel.module.d.ts +8 -0
  1492. package/overlaypanel/public_api.d.ts +2 -0
  1493. package/package.json +1033 -0
  1494. package/paginator/index.d.ts +5 -0
  1495. package/paginator/paginator.d.ts +192 -0
  1496. package/paginator/paginator.interface.d.ts +37 -0
  1497. package/paginator/paginator.module.d.ts +17 -0
  1498. package/paginator/public_api.d.ts +3 -0
  1499. package/panel/index.d.ts +5 -0
  1500. package/panel/panel.d.ts +126 -0
  1501. package/panel/panel.interface.d.ts +58 -0
  1502. package/panel/public_api.d.ts +2 -0
  1503. package/panelmenu/index.d.ts +5 -0
  1504. package/panelmenu/panelmenu.d.ts +225 -0
  1505. package/panelmenu/panelmenu.interface.d.ts +23 -0
  1506. package/panelmenu/public_api.d.ts +2 -0
  1507. package/password/index.d.ts +5 -0
  1508. package/password/password.d.ts +342 -0
  1509. package/password/public_api.d.ts +1 -0
  1510. package/picklist/index.d.ts +5 -0
  1511. package/picklist/picklist.d.ts +453 -0
  1512. package/picklist/picklist.interface.d.ts +242 -0
  1513. package/picklist/public_api.d.ts +2 -0
  1514. package/progressbar/index.d.ts +5 -0
  1515. package/progressbar/progressbar.d.ts +54 -0
  1516. package/progressbar/progressbar.module.d.ts +8 -0
  1517. package/progressbar/public_api.d.ts +2 -0
  1518. package/progressspinner/index.d.ts +5 -0
  1519. package/progressspinner/progressspinner.d.ts +50 -0
  1520. package/progressspinner/progressspinner.module.d.ts +8 -0
  1521. package/progressspinner/public_api.d.ts +2 -0
  1522. package/public_api.d.ts +2 -0
  1523. package/radiobutton/index.d.ts +5 -0
  1524. package/radiobutton/public_api.d.ts +3 -0
  1525. package/radiobutton/radiobutton.d.ts +145 -0
  1526. package/radiobutton/radiobutton.interface.d.ts +15 -0
  1527. package/radiobutton/radiobutton.module.d.ts +7 -0
  1528. package/rating/index.d.ts +5 -0
  1529. package/rating/public_api.d.ts +2 -0
  1530. package/rating/rating.d.ts +146 -0
  1531. package/rating/rating.interface.d.ts +34 -0
  1532. package/resources/cax.min.scss +1 -0
  1533. package/resources/cax.scss +784 -0
  1534. package/resources/components/accordion/accordion.scss +44 -0
  1535. package/resources/components/autocomplete/autocomplete.css +104 -0
  1536. package/resources/components/avatar/avatar.scss +33 -0
  1537. package/resources/components/avatargroup/avatargroup.css +10 -0
  1538. package/resources/components/badge/badge.scss +34 -0
  1539. package/resources/components/blockui/blockui.css +26 -0
  1540. package/resources/components/breadcrumb/breadcrumb.scss +33 -0
  1541. package/resources/components/button/button.scss +117 -0
  1542. package/resources/components/calendar/calendar.scss +177 -0
  1543. package/resources/components/card/card.scss +50 -0
  1544. package/resources/components/carousel/carousel.css +71 -0
  1545. package/resources/components/cascadeselect/cascadeselect.scss +99 -0
  1546. package/resources/components/checkbox/checkbox.scss +30 -0
  1547. package/resources/components/chip/chip.scss +63 -0
  1548. package/resources/components/chips/chips.scss +156 -0
  1549. package/resources/components/colorpicker/colorpicker-images.css +7 -0
  1550. package/resources/components/colorpicker/colorpicker.css +83 -0
  1551. package/resources/components/colorpicker/images/color.png +0 -0
  1552. package/resources/components/colorpicker/images/hue.png +0 -0
  1553. package/resources/components/common/common.scss +182 -0
  1554. package/resources/components/confirmpopup/confirmpopup.css +53 -0
  1555. package/resources/components/contextmenu/contextmenu.css +42 -0
  1556. package/resources/components/dataview/dataview.css +13 -0
  1557. package/resources/components/dialog/dialog.scss +164 -0
  1558. package/resources/components/divider/divider.scss +86 -0
  1559. package/resources/components/dock/dock.css +107 -0
  1560. package/resources/components/dropdown/dropdown.scss +92 -0
  1561. package/resources/components/editor/editor.css +4 -0
  1562. package/resources/components/fieldset/fieldset.css +30 -0
  1563. package/resources/components/fileupload/fileupload.css +47 -0
  1564. package/resources/components/galleria/galleria.css +281 -0
  1565. package/resources/components/iconfield/iconfield.css +5 -0
  1566. package/resources/components/image/image.scss +97 -0
  1567. package/resources/components/inplace/inplace.css +19 -0
  1568. package/resources/components/inputicon/inputicon.css +6 -0
  1569. package/resources/components/inputmask/inputmask.css +12 -0
  1570. package/resources/components/inputnumber/inputnumber.scss +116 -0
  1571. package/resources/components/inputotp/inputotp.css +2 -0
  1572. package/resources/components/inputswitch/inputswitch.css +23 -0
  1573. package/resources/components/inputtext/inputtext.scss +150 -0
  1574. package/resources/components/inputtextarea/inputtextarea.css +10 -0
  1575. package/resources/components/knob/knob.css +20 -0
  1576. package/resources/components/listbox/listbox.css +40 -0
  1577. package/resources/components/logo/logo.scss +0 -0
  1578. package/resources/components/megamenu/megamenu.css +108 -0
  1579. package/resources/components/menu/menu.css +30 -0
  1580. package/resources/components/menubar/menubar.css +81 -0
  1581. package/resources/components/message/message.css +17 -0
  1582. package/resources/components/messages/messages.scss +55 -0
  1583. package/resources/components/multiselect/multiselect.css +116 -0
  1584. package/resources/components/navigation/navigation.scss +217 -0
  1585. package/resources/components/orderlist/orderlist.css +78 -0
  1586. package/resources/components/organizationchart/organizationchart.css +62 -0
  1587. package/resources/components/overlay/overlay.scss +80 -0
  1588. package/resources/components/overlaypanel/overlaypanel.scss +63 -0
  1589. package/resources/components/paginator/paginator.scss +37 -0
  1590. package/resources/components/panel/panel.css +29 -0
  1591. package/resources/components/panelmenu/panelmenu.css +45 -0
  1592. package/resources/components/password/images/password-meter.png +0 -0
  1593. package/resources/components/password/password.css +54 -0
  1594. package/resources/components/picklist/picklist.css +60 -0
  1595. package/resources/components/progressbar/progressbar.scss +122 -0
  1596. package/resources/components/progressspinner/progressspinner.scss +94 -0
  1597. package/resources/components/radiobutton/radiobutton.scss +38 -0
  1598. package/resources/components/rating/rating.css +15 -0
  1599. package/resources/components/ripple/ripple.scss +29 -0
  1600. package/resources/components/scroller/scroller.scss +58 -0
  1601. package/resources/components/scrollpanel/scrollpanel.css +50 -0
  1602. package/resources/components/scrolltop/scrolltop.css +18 -0
  1603. package/resources/components/sidebar/sidebar.scss +114 -0
  1604. package/resources/components/skeleton/skeleton.scss +25 -0
  1605. package/resources/components/slidemenu/slidemenu.css +100 -0
  1606. package/resources/components/slider/slider.css +41 -0
  1607. package/resources/components/speeddial/speeddial.scss +122 -0
  1608. package/resources/components/spinner/spinner.css +63 -0
  1609. package/resources/components/splitbutton/splitbutton.scss +48 -0
  1610. package/resources/components/splitter/splitter.css +70 -0
  1611. package/resources/components/stepper/stepper.css +9 -0
  1612. package/resources/components/steps/steps.css +49 -0
  1613. package/resources/components/table/table.scss +249 -0
  1614. package/resources/components/tabmenu/tabmenu.css +80 -0
  1615. package/resources/components/tabview/tabview.scss +163 -0
  1616. package/resources/components/tag/tag.scss +17 -0
  1617. package/resources/components/terminal/terminal.css +24 -0
  1618. package/resources/components/tieredmenu/tieredmenu.scss +55 -0
  1619. package/resources/components/timeline/timeline.css +114 -0
  1620. package/resources/components/toast/toast.scss +83 -0
  1621. package/resources/components/toggleswitch/toggleswitch.scss +30 -0
  1622. package/resources/components/toolbar/toolbar.css +19 -0
  1623. package/resources/components/tooltip/tooltip.scss +124 -0
  1624. package/resources/components/tree/images/line.gif +0 -0
  1625. package/resources/components/tree/tree.scss +158 -0
  1626. package/resources/components/treeselect/treeselect.css +98 -0
  1627. package/resources/components/treetable/treetable.css +205 -0
  1628. package/resources/images/color.png +0 -0
  1629. package/resources/images/hue.png +0 -0
  1630. package/resources/images/line.gif +0 -0
  1631. package/resources/images/password-meter.png +0 -0
  1632. package/resources/logo/dataX-dark.svg +12 -0
  1633. package/resources/logo/dataX-icon-dark.svg +6 -0
  1634. package/resources/logo/dataX-icon.svg +6 -0
  1635. package/resources/logo/dataX.svg +12 -0
  1636. package/resources/logo/usercard.png +0 -0
  1637. package/resources/themes/cax-theme.scss +9272 -0
  1638. package/ripple/index.d.ts +5 -0
  1639. package/ripple/public_api.d.ts +2 -0
  1640. package/ripple/ripple.d.ts +30 -0
  1641. package/ripple/ripple.module.d.ts +7 -0
  1642. package/scroller/index.d.ts +5 -0
  1643. package/scroller/public_api.d.ts +3 -0
  1644. package/scroller/scroller.d.ts +343 -0
  1645. package/scroller/scroller.interface.d.ts +177 -0
  1646. package/scroller/scroller.module.d.ts +8 -0
  1647. package/scrollpanel/index.d.ts +5 -0
  1648. package/scrollpanel/public_api.d.ts +2 -0
  1649. package/scrollpanel/scrollpanel.d.ts +103 -0
  1650. package/scrollpanel/scrollpanel.interface.d.ts +11 -0
  1651. package/scrolltop/index.d.ts +5 -0
  1652. package/scrolltop/public_api.d.ts +2 -0
  1653. package/scrolltop/scrolltop.d.ts +97 -0
  1654. package/scrolltop/scrolltop.interface.d.ts +18 -0
  1655. package/selectbutton/index.d.ts +5 -0
  1656. package/selectbutton/public_api.d.ts +2 -0
  1657. package/selectbutton/selectbutton.d.ts +136 -0
  1658. package/selectbutton/selectbutton.interface.d.ts +45 -0
  1659. package/sidebar/index.d.ts +5 -0
  1660. package/sidebar/public_api.d.ts +3 -0
  1661. package/sidebar/sidebar.d.ts +158 -0
  1662. package/sidebar/sidebar.interface.d.ts +27 -0
  1663. package/sidebar/sidebar.module.d.ts +12 -0
  1664. package/skeleton/index.d.ts +5 -0
  1665. package/skeleton/public_api.d.ts +2 -0
  1666. package/skeleton/skeleton.d.ts +61 -0
  1667. package/skeleton/skeleton.module.d.ts +8 -0
  1668. package/slidemenu/index.d.ts +5 -0
  1669. package/slidemenu/public_api.d.ts +2 -0
  1670. package/slidemenu/slidemenu.d.ts +322 -0
  1671. package/slidemenu/slidemenu.interface.d.ts +15 -0
  1672. package/slider/index.d.ts +5 -0
  1673. package/slider/public_api.d.ts +2 -0
  1674. package/slider/slider.d.ts +174 -0
  1675. package/slider/slider.interface.d.ts +38 -0
  1676. package/speeddial/index.d.ts +5 -0
  1677. package/speeddial/public_api.d.ts +3 -0
  1678. package/speeddial/speeddial.d.ts +277 -0
  1679. package/speeddial/speeddial.interface.d.ts +28 -0
  1680. package/speeddial/speeddial.module.d.ts +14 -0
  1681. package/spinner/index.d.ts +5 -0
  1682. package/spinner/public_api.d.ts +1 -0
  1683. package/spinner/spinner.d.ts +90 -0
  1684. package/splitbutton/index.d.ts +5 -0
  1685. package/splitbutton/public_api.d.ts +3 -0
  1686. package/splitbutton/splitbutton.d.ts +221 -0
  1687. package/splitbutton/splitbutton.interface.d.ts +30 -0
  1688. package/splitbutton/splitbutton.module.d.ts +12 -0
  1689. package/splitter/index.d.ts +5 -0
  1690. package/splitter/public_api.d.ts +2 -0
  1691. package/splitter/splitter.d.ts +164 -0
  1692. package/splitter/splitter.interface.d.ts +34 -0
  1693. package/stepper/index.d.ts +5 -0
  1694. package/stepper/public_api.d.ts +2 -0
  1695. package/stepper/stepper.d.ts +117 -0
  1696. package/stepper/stepper.interface.d.ts +26 -0
  1697. package/steps/index.d.ts +5 -0
  1698. package/steps/public_api.d.ts +1 -0
  1699. package/steps/steps.d.ts +85 -0
  1700. package/styleclass/index.d.ts +5 -0
  1701. package/styleclass/public_api.d.ts +1 -0
  1702. package/styleclass/styleclass.d.ts +108 -0
  1703. package/table/columnfilter.interface.d.ts +247 -0
  1704. package/table/components/cell-editor/cell-editor.d.ts +20 -0
  1705. package/table/components/column-filter/column-filter.d.ts +256 -0
  1706. package/table/components/column-filter-form-element/column-filter-form-element.d.ts +37 -0
  1707. package/table/components/sort-icon/sort-icon.d.ts +21 -0
  1708. package/table/components/table-body/table-body.d.ts +36 -0
  1709. package/table/components/table-checkbox/table-checkbox.d.ts +31 -0
  1710. package/table/components/table-header-checkbox/table-header-checkbox.d.ts +29 -0
  1711. package/table/components/table-radio-button/table-radio-button.d.ts +29 -0
  1712. package/table/directives/cancel-editable-row.directive.d.ts +11 -0
  1713. package/table/directives/content-menu-row.directive.d.ts +22 -0
  1714. package/table/directives/editable-column.directive.d.ts +40 -0
  1715. package/table/directives/editable-row.directive.d.ts +12 -0
  1716. package/table/directives/frozen-column.directive.d.ts +16 -0
  1717. package/table/directives/init-editable-row.directive.d.ts +11 -0
  1718. package/table/directives/reorderable-column.directive.d.ts +32 -0
  1719. package/table/directives/reorderable-row-handle.directive.d.ts +9 -0
  1720. package/table/directives/reorderable-row.directive.d.ts +34 -0
  1721. package/table/directives/resizable-column.directive.d.ts +35 -0
  1722. package/table/directives/row-group-header.directive.d.ts +9 -0
  1723. package/table/directives/row-toggler.directive.d.ts +13 -0
  1724. package/table/directives/save-editable-row.directive.d.ts +11 -0
  1725. package/table/directives/selectable-row-double-click.directive.d.ts +22 -0
  1726. package/table/directives/selectable-row.directive.d.ts +37 -0
  1727. package/table/directives/sortable-column.directive.d.ts +24 -0
  1728. package/table/index.d.ts +5 -0
  1729. package/table/public_api.d.ts +28 -0
  1730. package/table/table.d.ts +859 -0
  1731. package/table/table.interface.d.ts +623 -0
  1732. package/table/table.module.d.ts +32 -0
  1733. package/table/table.service.d.ts +24 -0
  1734. package/tabmenu/index.d.ts +5 -0
  1735. package/tabmenu/public_api.d.ts +2 -0
  1736. package/tabmenu/tabmenu.d.ts +126 -0
  1737. package/tabmenu/tabmenu.interface.d.ts +32 -0
  1738. package/tabview/index.d.ts +5 -0
  1739. package/tabview/public_api.d.ts +3 -0
  1740. package/tabview/tabview.d.ts +281 -0
  1741. package/tabview/tabview.interface.d.ts +49 -0
  1742. package/tabview/tabview.module.d.ts +14 -0
  1743. package/tag/index.d.ts +5 -0
  1744. package/tag/public_api.d.ts +3 -0
  1745. package/tag/tag.d.ts +61 -0
  1746. package/tag/tag.interface.d.ts +11 -0
  1747. package/tag/tag.module.d.ts +9 -0
  1748. package/terminal/index.d.ts +5 -0
  1749. package/terminal/public_api.d.ts +2 -0
  1750. package/terminal/terminal.d.ts +56 -0
  1751. package/terminal/terminalservice.d.ts +11 -0
  1752. package/tieredmenu/index.d.ts +5 -0
  1753. package/tieredmenu/public_api.d.ts +3 -0
  1754. package/tieredmenu/tieredmenu.d.ts +266 -0
  1755. package/tieredmenu/tieredmenu.interface.d.ts +27 -0
  1756. package/tieredmenu/tiredmenu.module.d.ts +13 -0
  1757. package/timeline/index.d.ts +5 -0
  1758. package/timeline/public_api.d.ts +2 -0
  1759. package/timeline/timeline.d.ts +54 -0
  1760. package/timeline/timeline.interface.d.ts +43 -0
  1761. package/toast/index.d.ts +5 -0
  1762. package/toast/public_api.d.ts +3 -0
  1763. package/toast/toast.d.ts +142 -0
  1764. package/toast/toast.interface.d.ts +52 -0
  1765. package/toast/toast.module.d.ts +9 -0
  1766. package/toast/toastitem.d.ts +37 -0
  1767. package/togglebutton/index.d.ts +5 -0
  1768. package/togglebutton/public_api.d.ts +2 -0
  1769. package/togglebutton/togglebutton.d.ts +115 -0
  1770. package/togglebutton/togglebutton.interface.d.ts +34 -0
  1771. package/toggleswitch/index.d.ts +5 -0
  1772. package/toggleswitch/public_api.d.ts +2 -0
  1773. package/toggleswitch/toggleswitch.d.ts +13 -0
  1774. package/toggleswitch/toggleswitch.module.d.ts +9 -0
  1775. package/toolbar/index.d.ts +5 -0
  1776. package/toolbar/public_api.d.ts +2 -0
  1777. package/toolbar/toolbar.d.ts +43 -0
  1778. package/toolbar/toolbar.interface.d.ts +19 -0
  1779. package/tooltip/index.d.ts +5 -0
  1780. package/tooltip/public_api.d.ts +2 -0
  1781. package/tooltip/tooltip.d.ts +208 -0
  1782. package/tooltip/tooltip.module.d.ts +8 -0
  1783. package/tree/index.d.ts +5 -0
  1784. package/tree/public_api.d.ts +3 -0
  1785. package/tree/tree.d.ts +449 -0
  1786. package/tree/tree.interface.d.ts +193 -0
  1787. package/tree/tree.module.d.ts +19 -0
  1788. package/treeselect/index.d.ts +5 -0
  1789. package/treeselect/public_api.d.ts +2 -0
  1790. package/treeselect/treeselect.d.ts +405 -0
  1791. package/treeselect/treeselect.interface.d.ts +108 -0
  1792. package/treetable/index.d.ts +5 -0
  1793. package/treetable/public_api.d.ts +2 -0
  1794. package/treetable/treetable.d.ts +988 -0
  1795. package/treetable/treetable.interface.d.ts +472 -0
  1796. package/tristatecheckbox/index.d.ts +5 -0
  1797. package/tristatecheckbox/public_api.d.ts +3 -0
  1798. package/tristatecheckbox/tristatecheckbox.d.ts +117 -0
  1799. package/tristatecheckbox/tristatecheckbox.interface.d.ts +30 -0
  1800. package/tristatecheckbox/tristatecheckbox.module.d.ts +8 -0
  1801. package/ts-helpers/index.d.ts +5 -0
  1802. package/ts-helpers/public_api.d.ts +1 -0
  1803. package/ts-helpers/ts-helpers.d.ts +4 -0
  1804. package/utils/index.d.ts +5 -0
  1805. package/utils/objectutils.d.ts +24 -0
  1806. package/utils/public_api.d.ts +4 -0
  1807. package/utils/uniquecomponentid.d.ts +2 -0
  1808. package/utils/zindexutils.d.ts +7 -0
  1809. package/virtualscroller/index.d.ts +5 -0
  1810. package/virtualscroller/public_api.d.ts +2 -0
  1811. package/virtualscroller/virtualscroller.d.ts +89 -0
  1812. package/virtualscroller/virtualscroller.interface.d.ts +72 -0
@@ -0,0 +1,1495 @@
1
+ import { booleanAttribute, ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, forwardRef, Inject, Input, numberAttribute, Optional, Output, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import { CaxTemplate, TranslationKeys } from 'cax-design-system/api';
3
+ import { DomHandler } from 'cax-design-system/dom';
4
+ import { ObjectUtils } from 'cax-design-system/utils';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "cax-design-system/icons/check";
8
+ import * as i3 from "cax-design-system/icons/chevrondown";
9
+ import * as i4 from "cax-design-system/icons/chevronright";
10
+ import * as i5 from "cax-design-system/icons/minus";
11
+ import * as i6 from "cax-design-system/icons/spinner";
12
+ import * as i7 from "cax-design-system/icons/plus";
13
+ import * as i8 from "cax-design-system/badge";
14
+ import * as i9 from "cax-design-system/api";
15
+ import * as i10 from "cax-design-system/scroller";
16
+ import * as i11 from "cax-design-system/icons/search";
17
+ export class UITreeNode {
18
+ static ICON_CLASS = 'cax-treenode-icon ';
19
+ rowNode;
20
+ node;
21
+ parentNode;
22
+ root;
23
+ index;
24
+ firstChild;
25
+ lastChild;
26
+ level;
27
+ indentation;
28
+ itemSize;
29
+ loadingMode;
30
+ tree;
31
+ timeout;
32
+ draghoverPrev;
33
+ draghoverNext;
34
+ draghoverNode;
35
+ get ariaSelected() {
36
+ return this.tree.selectionMode === 'single' || this.tree.selectionMode === 'multiple' ? this.isSelected() : undefined;
37
+ }
38
+ get ariaChecked() {
39
+ return this.tree.selectionMode === 'checkbox' ? this.isSelected() : undefined;
40
+ }
41
+ constructor(tree) {
42
+ this.tree = tree;
43
+ }
44
+ ngOnInit() {
45
+ this.node.parent = this.parentNode;
46
+ const nativeElement = this.tree.el.nativeElement;
47
+ const pDialogWrapper = nativeElement.closest('cax-dialog');
48
+ if (this.parentNode && !pDialogWrapper) {
49
+ this.setAllNodesTabIndexes();
50
+ this.tree.syncNodeOption(this.node, this.tree.value, 'parent', this.tree.getNodeWithKey(this.parentNode.key, this.tree.value));
51
+ }
52
+ }
53
+ getIcon() {
54
+ let icon;
55
+ if (this.node.icon)
56
+ icon = this.node.icon;
57
+ else
58
+ icon = this.node.expanded && this.node.children && this.node.children?.length ? this.node.expandedIcon : this.node.collapsedIcon;
59
+ return UITreeNode.ICON_CLASS + ' ' + icon;
60
+ }
61
+ isLeaf() {
62
+ return this.tree.isNodeLeaf(this.node);
63
+ }
64
+ toggle(event) {
65
+ if (this.node.expanded)
66
+ this.collapse(event);
67
+ else
68
+ this.expand(event);
69
+ event.stopPropagation();
70
+ }
71
+ expand(event) {
72
+ this.node.expanded = true;
73
+ if (this.tree.virtualScroll) {
74
+ this.tree.updateSerializedValue();
75
+ this.focusVirtualNode();
76
+ }
77
+ this.tree.onNodeExpand.emit({ originalEvent: event, node: this.node });
78
+ }
79
+ collapse(event) {
80
+ this.node.expanded = false;
81
+ if (this.tree.virtualScroll) {
82
+ this.tree.updateSerializedValue();
83
+ this.focusVirtualNode();
84
+ }
85
+ this.tree.onNodeCollapse.emit({ originalEvent: event, node: this.node });
86
+ }
87
+ onNodeClick(event) {
88
+ this.tree.onNodeClick(event, this.node);
89
+ }
90
+ onNodeKeydown(event) {
91
+ if (event.key === 'Enter') {
92
+ this.tree.onNodeClick(event, this.node);
93
+ }
94
+ }
95
+ onNodeTouchEnd() {
96
+ this.tree.onNodeTouchEnd();
97
+ }
98
+ onNodeRightClick(event) {
99
+ this.tree.onNodeRightClick(event, this.node);
100
+ }
101
+ isSelected() {
102
+ return this.tree.isSelected(this.node);
103
+ }
104
+ isSameNode(event) {
105
+ return event.currentTarget && (event.currentTarget.isSameNode(event.target) || event.currentTarget.isSameNode(event.target.closest('[role="treeitem"]')));
106
+ }
107
+ onDropPoint(event, position) {
108
+ event.preventDefault();
109
+ let dragNode = this.tree.dragNode;
110
+ let dragNodeIndex = this.tree.dragNodeIndex;
111
+ let dragNodeScope = this.tree.dragNodeScope;
112
+ let isValidDropPointIndex = this.tree.dragNodeTree === this.tree ? position === 1 || dragNodeIndex !== this.index - 1 : true;
113
+ if (this.tree.allowDrop(dragNode, this.node, dragNodeScope) && isValidDropPointIndex) {
114
+ let dropParams = { ...this.createDropPointEventMetadata(position) };
115
+ if (this.tree.validateDrop) {
116
+ this.tree.onNodeDrop.emit({
117
+ originalEvent: event,
118
+ dragNode: dragNode,
119
+ dropNode: this.node,
120
+ index: this.index,
121
+ accept: () => {
122
+ this.processPointDrop(dropParams);
123
+ }
124
+ });
125
+ }
126
+ else {
127
+ this.processPointDrop(dropParams);
128
+ this.tree.onNodeDrop.emit({
129
+ originalEvent: event,
130
+ dragNode: dragNode,
131
+ dropNode: this.node,
132
+ index: this.index
133
+ });
134
+ }
135
+ }
136
+ this.draghoverPrev = false;
137
+ this.draghoverNext = false;
138
+ }
139
+ processPointDrop(event) {
140
+ let newNodeList = event.dropNode.parent ? event.dropNode.parent.children : this.tree.value;
141
+ event.dragNodeSubNodes.splice(event.dragNodeIndex, 1);
142
+ let dropIndex = this.index;
143
+ if (event.position < 0) {
144
+ dropIndex = event.dragNodeSubNodes === newNodeList ? (event.dragNodeIndex > event.index ? event.index : event.index - 1) : event.index;
145
+ newNodeList.splice(dropIndex, 0, event.dragNode);
146
+ }
147
+ else {
148
+ dropIndex = newNodeList.length;
149
+ newNodeList.push(event.dragNode);
150
+ }
151
+ this.tree.dragDropService.stopDrag({
152
+ node: event.dragNode,
153
+ subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,
154
+ index: event.dragNodeIndex
155
+ });
156
+ }
157
+ createDropPointEventMetadata(position) {
158
+ return {
159
+ dragNode: this.tree.dragNode,
160
+ dragNodeIndex: this.tree.dragNodeIndex,
161
+ dragNodeSubNodes: this.tree.dragNodeSubNodes,
162
+ dropNode: this.node,
163
+ index: this.index,
164
+ position: position
165
+ };
166
+ }
167
+ onDropPointDragOver(event) {
168
+ event.dataTransfer.dropEffect = 'move';
169
+ event.preventDefault();
170
+ }
171
+ onDropPointDragEnter(event, position) {
172
+ if (this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {
173
+ if (position < 0)
174
+ this.draghoverPrev = true;
175
+ else
176
+ this.draghoverNext = true;
177
+ }
178
+ }
179
+ onDropPointDragLeave(event) {
180
+ this.draghoverPrev = false;
181
+ this.draghoverNext = false;
182
+ }
183
+ onDragStart(event) {
184
+ if (this.tree.draggableNodes && this.node.draggable !== false) {
185
+ event.dataTransfer.setData('text', 'data');
186
+ this.tree.dragDropService.startDrag({
187
+ tree: this,
188
+ node: this.node,
189
+ subNodes: this.node?.parent ? this.node.parent.children : this.tree.value,
190
+ index: this.index,
191
+ scope: this.tree.draggableScope
192
+ });
193
+ }
194
+ else {
195
+ event.preventDefault();
196
+ }
197
+ }
198
+ onDragStop(event) {
199
+ this.tree.dragDropService.stopDrag({
200
+ node: this.node,
201
+ subNodes: this.node?.parent ? this.node.parent.children : this.tree.value,
202
+ index: this.index
203
+ });
204
+ }
205
+ onDropNodeDragOver(event) {
206
+ event.dataTransfer.dropEffect = 'move';
207
+ if (this.tree.droppableNodes) {
208
+ event.preventDefault();
209
+ event.stopPropagation();
210
+ }
211
+ }
212
+ onDropNode(event) {
213
+ if (this.tree.droppableNodes && this.node?.droppable !== false) {
214
+ let dragNode = this.tree.dragNode;
215
+ if (this.tree.allowDrop(dragNode, this.node, this.tree.dragNodeScope)) {
216
+ let dropParams = { ...this.createDropNodeEventMetadata() };
217
+ if (this.tree.validateDrop) {
218
+ this.tree.onNodeDrop.emit({
219
+ originalEvent: event,
220
+ dragNode: dragNode,
221
+ dropNode: this.node,
222
+ index: this.index,
223
+ accept: () => {
224
+ this.processNodeDrop(dropParams);
225
+ }
226
+ });
227
+ }
228
+ else {
229
+ this.processNodeDrop(dropParams);
230
+ this.tree.onNodeDrop.emit({
231
+ originalEvent: event,
232
+ dragNode: dragNode,
233
+ dropNode: this.node,
234
+ index: this.index
235
+ });
236
+ }
237
+ }
238
+ }
239
+ event.preventDefault();
240
+ event.stopPropagation();
241
+ this.draghoverNode = false;
242
+ }
243
+ createDropNodeEventMetadata() {
244
+ return {
245
+ dragNode: this.tree.dragNode,
246
+ dragNodeIndex: this.tree.dragNodeIndex,
247
+ dragNodeSubNodes: this.tree.dragNodeSubNodes,
248
+ dropNode: this.node
249
+ };
250
+ }
251
+ processNodeDrop(event) {
252
+ let dragNodeIndex = event.dragNodeIndex;
253
+ event.dragNodeSubNodes.splice(dragNodeIndex, 1);
254
+ if (event.dropNode.children)
255
+ event.dropNode.children.push(event.dragNode);
256
+ else
257
+ event.dropNode.children = [event.dragNode];
258
+ this.tree.dragDropService.stopDrag({
259
+ node: event.dragNode,
260
+ subNodes: event.dropNode.parent ? event.dropNode.parent.children : this.tree.value,
261
+ index: dragNodeIndex
262
+ });
263
+ }
264
+ onDropNodeDragEnter(event) {
265
+ if (this.tree.droppableNodes && this.node?.droppable !== false && this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {
266
+ this.draghoverNode = true;
267
+ }
268
+ }
269
+ onDropNodeDragLeave(event) {
270
+ if (this.tree.droppableNodes) {
271
+ let rect = event.currentTarget.getBoundingClientRect();
272
+ if (event.x > rect.left + rect.width || event.x < rect.left || event.y >= Math.floor(rect.top + rect.height) || event.y < rect.top) {
273
+ this.draghoverNode = false;
274
+ }
275
+ }
276
+ }
277
+ onKeyDown(event) {
278
+ if (!this.isSameNode(event) || (this.tree.contextMenu && this.tree.contextMenu.containerViewChild?.nativeElement.style.display === 'block')) {
279
+ return;
280
+ }
281
+ switch (event.code) {
282
+ //down arrow
283
+ case 'ArrowDown':
284
+ this.onArrowDown(event);
285
+ break;
286
+ //up arrow
287
+ case 'ArrowUp':
288
+ this.onArrowUp(event);
289
+ break;
290
+ //right arrow
291
+ case 'ArrowRight':
292
+ this.onArrowRight(event);
293
+ break;
294
+ //left arrow
295
+ case 'ArrowLeft':
296
+ this.onArrowLeft(event);
297
+ break;
298
+ //enter
299
+ case 'Enter':
300
+ case 'NumpadEnter':
301
+ this.onEnter(event);
302
+ break;
303
+ //space
304
+ case 'Space':
305
+ const nodeName = event.target instanceof HTMLElement && event.target.nodeName;
306
+ if (!['INPUT'].includes(nodeName)) {
307
+ this.onEnter(event);
308
+ }
309
+ break;
310
+ //tab
311
+ case 'Tab':
312
+ this.setAllNodesTabIndexes();
313
+ break;
314
+ default:
315
+ //no op
316
+ break;
317
+ }
318
+ }
319
+ onArrowUp(event) {
320
+ const nodeElement = event.target.getAttribute('data-pc-section') === 'toggler' ? event.target.closest('[role="treeitem"]') : event.target.parentElement;
321
+ if (nodeElement.previousElementSibling) {
322
+ this.focusRowChange(nodeElement, nodeElement.previousElementSibling, this.findLastVisibleDescendant(nodeElement.previousElementSibling));
323
+ }
324
+ else {
325
+ let parentNodeElement = this.getParentNodeElement(nodeElement);
326
+ if (parentNodeElement) {
327
+ this.focusRowChange(nodeElement, parentNodeElement);
328
+ }
329
+ }
330
+ event.preventDefault();
331
+ }
332
+ onArrowDown(event) {
333
+ const nodeElement = event.target.getAttribute('data-pc-section') === 'toggler' ? event.target.closest('[role="treeitem"]') : event.target;
334
+ const listElement = nodeElement.children[1];
335
+ if (listElement && listElement.children.length > 0) {
336
+ this.focusRowChange(nodeElement, listElement.children[0]);
337
+ }
338
+ else {
339
+ if (nodeElement.parentElement.nextElementSibling) {
340
+ this.focusRowChange(nodeElement, nodeElement.parentElement.nextElementSibling);
341
+ }
342
+ else {
343
+ let nextSiblingAncestor = this.findNextSiblingOfAncestor(nodeElement.parentElement);
344
+ if (nextSiblingAncestor) {
345
+ this.focusRowChange(nodeElement, nextSiblingAncestor);
346
+ }
347
+ }
348
+ }
349
+ event.preventDefault();
350
+ }
351
+ onArrowRight(event) {
352
+ if (!this.node?.expanded && !this.tree.isNodeLeaf(this.node)) {
353
+ this.expand(event);
354
+ event.currentTarget.tabIndex = -1;
355
+ setTimeout(() => {
356
+ this.onArrowDown(event);
357
+ }, 1);
358
+ }
359
+ event.preventDefault();
360
+ }
361
+ onArrowLeft(event) {
362
+ const nodeElement = event.target.getAttribute('data-pc-section') === 'toggler' ? event.target.closest('[role="treeitem"]') : event.target;
363
+ if (this.level === 0 && !this.node?.expanded) {
364
+ return false;
365
+ }
366
+ if (this.node?.expanded) {
367
+ this.collapse(event);
368
+ return;
369
+ }
370
+ let parentNodeElement = this.getParentNodeElement(nodeElement.parentElement);
371
+ if (parentNodeElement) {
372
+ this.focusRowChange(event.currentTarget, parentNodeElement);
373
+ }
374
+ event.preventDefault();
375
+ }
376
+ isActionableElement(event) {
377
+ const target = event.target;
378
+ const isActionable = target instanceof HTMLElement && (target.nodeName == 'A' || target.nodeName == 'BUTTON');
379
+ return isActionable;
380
+ }
381
+ onEnter(event) {
382
+ this.tree.onNodeClick(event, this.node);
383
+ this.setTabIndexForSelectionMode(event, this.tree.nodeTouched);
384
+ if (!this.isActionableElement(event)) {
385
+ event.preventDefault();
386
+ }
387
+ }
388
+ setAllNodesTabIndexes() {
389
+ const nodes = DomHandler.find(this.tree.el.nativeElement, '.cax-treenode');
390
+ const hasSelectedNode = [...nodes].some((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');
391
+ [...nodes].forEach((node) => {
392
+ node.tabIndex = -1;
393
+ });
394
+ if (hasSelectedNode) {
395
+ const selectedNodes = [...nodes].filter((node) => node.getAttribute('aria-selected') === 'true' || node.getAttribute('aria-checked') === 'true');
396
+ selectedNodes[0].tabIndex = 0;
397
+ return;
398
+ }
399
+ [...nodes][0].tabIndex = 0;
400
+ }
401
+ setTabIndexForSelectionMode(event, nodeTouched) {
402
+ if (this.tree.selectionMode !== null) {
403
+ const elements = [...DomHandler.find(this.tree.el.nativeElement, '.cax-treenode')];
404
+ event.currentTarget.tabIndex = nodeTouched === false ? -1 : 0;
405
+ if (elements.every((element) => element.tabIndex === -1)) {
406
+ elements[0].tabIndex = 0;
407
+ }
408
+ }
409
+ }
410
+ findNextSiblingOfAncestor(nodeElement) {
411
+ let parentNodeElement = this.getParentNodeElement(nodeElement);
412
+ if (parentNodeElement) {
413
+ if (parentNodeElement.nextElementSibling)
414
+ return parentNodeElement.nextElementSibling;
415
+ else
416
+ return this.findNextSiblingOfAncestor(parentNodeElement);
417
+ }
418
+ else {
419
+ return null;
420
+ }
421
+ }
422
+ findLastVisibleDescendant(nodeElement) {
423
+ const listElement = Array.from(nodeElement.children).find((el) => DomHandler.hasClass(el, 'cax-treenode'));
424
+ const childrenListElement = listElement.children[1];
425
+ if (childrenListElement && childrenListElement.children.length > 0) {
426
+ const lastChildElement = childrenListElement.children[childrenListElement.children.length - 1];
427
+ return this.findLastVisibleDescendant(lastChildElement);
428
+ }
429
+ else {
430
+ return nodeElement;
431
+ }
432
+ }
433
+ getParentNodeElement(nodeElement) {
434
+ const parentNodeElement = nodeElement.parentElement?.parentElement?.parentElement;
435
+ return parentNodeElement?.tagName === 'P-TREENODE' ? parentNodeElement : null;
436
+ }
437
+ focusNode(element) {
438
+ if (this.tree.droppableNodes)
439
+ element.children[1].focus();
440
+ else
441
+ element.children[0].focus();
442
+ }
443
+ focusRowChange(firstFocusableRow, currentFocusedRow, lastVisibleDescendant) {
444
+ firstFocusableRow.tabIndex = '-1';
445
+ currentFocusedRow.children[0].tabIndex = '0';
446
+ this.focusNode(lastVisibleDescendant || currentFocusedRow);
447
+ }
448
+ focusVirtualNode() {
449
+ this.timeout = setTimeout(() => {
450
+ let node = DomHandler.findSingle(document.body, `[data-id="${this.node?.key ?? this.node?.data}"]`);
451
+ DomHandler.focus(node);
452
+ }, 1);
453
+ }
454
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: UITreeNode, deps: [{ token: forwardRef(() => Tree) }], target: i0.ɵɵFactoryTarget.Component });
455
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: UITreeNode, selector: "cax-treeNode", inputs: { rowNode: "rowNode", node: "node", parentNode: "parentNode", root: ["root", "root", booleanAttribute], index: ["index", "index", numberAttribute], firstChild: ["firstChild", "firstChild", booleanAttribute], lastChild: ["lastChild", "lastChild", booleanAttribute], level: ["level", "level", numberAttribute], indentation: ["indentation", "indentation", numberAttribute], itemSize: ["itemSize", "itemSize", numberAttribute], loadingMode: "loadingMode" }, host: { classAttribute: "cax-element" }, ngImport: i0, template: "<ng-template [ngIf]=\"node\">\r\n <li\r\n *ngIf=\"tree.droppableNodes\"\r\n class=\"cax-treenode-droppoint\"\r\n [attr.aria-hidden]=\"true\"\r\n [ngClass]=\"{ 'cax-treenode-droppoint-active': draghoverPrev }\"\r\n (drop)=\"onDropPoint($event, -1)\"\r\n (dragover)=\"onDropPointDragOver($event)\"\r\n (dragenter)=\"onDropPointDragEnter($event, -1)\"\r\n (dragleave)=\"onDropPointDragLeave($event)\"\r\n ></li>\r\n <li\r\n *ngIf=\"!tree.horizontal\"\r\n [ngClass]=\"['cax-treenode', node.styleClass || '', isLeaf() ? 'cax-treenode-leaf' : '']\"\r\n [ngStyle]=\"{ height: itemSize + 'px' }\"\r\n [style]=\"node.style\"\r\n [attr.aria-label]=\"node.label\"\r\n [attr.aria-checked]=\"ariaChecked\"\r\n [attr.aria-setsize]=\"node.children ? node.children.length : 0\"\r\n [attr.aria-selected]=\"ariaSelected\"\r\n [attr.aria-expanded]=\"node.expanded\"\r\n [attr.aria-posinset]=\"index + 1\"\r\n [attr.aria-level]=\"level + 1\"\r\n [attr.tabindex]=\"index === 0 ? 0 : -1\"\r\n [attr.data-id]=\"node.key\"\r\n role=\"treeitem\"\r\n (keydown)=\"onKeyDown($event)\"\r\n >\r\n <div\r\n class=\"cax-treenode-content\"\r\n [ngStyle]=\"{\r\n 'padding-left': level * indentation + 'rem'\r\n }\"\r\n (click)=\"onNodeClick($event)\"\r\n (contextmenu)=\"onNodeRightClick($event)\"\r\n (touchend)=\"onNodeTouchEnd()\"\r\n (drop)=\"onDropNode($event)\"\r\n (dragover)=\"onDropNodeDragOver($event)\"\r\n (dragenter)=\"onDropNodeDragEnter($event)\"\r\n (dragleave)=\"onDropNodeDragLeave($event)\"\r\n [draggable]=\"tree.draggableNodes\"\r\n (dragstart)=\"onDragStart($event)\"\r\n (dragend)=\"onDragStop($event)\"\r\n [ngClass]=\"{ 'cax-treenode-selectable': tree.selectionMode && node.selectable !== false, 'cax-treenode-dragover': draghoverNode, 'cax-highlight': isSelected() }\"\r\n >\r\n <button type=\"button\" [attr.data-pc-section]=\"'toggler'\" class=\"cax-tree-toggler cax-link\" (click)=\"toggle($event)\" pRipple tabindex=\"-1\">\r\n <ng-container *ngIf=\"!tree.togglerIconTemplate\">\r\n <ng-container *ngIf=\"!node.loading\">\r\n <ChevronRightIcon *ngIf=\"!node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" />\r\n <ChevronDownIcon *ngIf=\"node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" />\r\n </ng-container>\r\n <ng-container *ngIf=\"loadingMode === 'icon' && node.loading\">\r\n <SpinnerIcon [spin]=\"true\" [styleClass]=\"'cax-tree-node-toggler-icon'\" />\r\n </ng-container>\r\n </ng-container>\r\n <span *ngIf=\"tree.togglerIconTemplate\" class=\"cax-tree-toggler-icon\">\r\n <ng-template *ngTemplateOutlet=\"tree.togglerIconTemplate; context: { $implicit: node.expanded }\"></ng-template>\r\n </span>\r\n </button>\r\n <div\r\n class=\"cax-checkbox cax-component\"\r\n [ngClass]=\"{ 'cax-checkbox-disabled cax-disabled': node.selectable === false, 'cax-variant-filled': tree?.config.inputStyle() === 'filled' }\"\r\n *ngIf=\"tree.selectionMode == 'checkbox'\"\r\n aria-hidden=\"true\"\r\n >\r\n <div class=\"cax-checkbox-box\" [ngClass]=\"{ 'cax-highlight': isSelected(), 'cax-indeterminate': node.partialSelected }\" role=\"checkbox\">\r\n <ng-container *ngIf=\"!tree.checkboxIconTemplate\">\r\n <CheckIcon *ngIf=\"!node.partialSelected && isSelected()\" [styleClass]=\"'cax-checkbox-icon'\" />\r\n <MinusIcon *ngIf=\"node.partialSelected\" [styleClass]=\"'cax-checkbox-icon'\" />\r\n </ng-container>\r\n <ng-template *ngTemplateOutlet=\"tree.checkboxIconTemplate; context: { $implicit: isSelected(), partialSelected: node.partialSelected }\"></ng-template>\r\n </div>\r\n </div>\r\n <span [class]=\"getIcon()\" *ngIf=\"node.icon || node.expandedIcon || node.collapsedIcon\"></span>\r\n <span class=\"cax-treenode-label\">\r\n <span *ngIf=\"!tree.getTemplateForNode(node)\">{{ node.label }}</span>\r\n <span *ngIf=\"tree.getTemplateForNode(node)\">\r\n <ng-container *ngTemplateOutlet=\"tree.getTemplateForNode(node); context: { $implicit: node }\"></ng-container>\r\n </span>\r\n </span>\r\n <span class=\"cax-tree-badge\" *ngIf=\"node.badge\">\r\n <cax-badge [severity]=\"'secondary'\" [value]=\"node.badge\"></cax-badge>\r\n </span>\r\n </div>\r\n <ul\r\n class=\"cax-treenode-children\"\r\n [ngStyle]=\"{\r\n display: node.expanded ? 'block' : 'none'\r\n }\"\r\n *ngIf=\"!tree.virtualScroll && node.children && node.expanded\"\r\n role=\"group\"\r\n >\r\n <cax-treeNode\r\n *ngFor=\"let childNode of node.children; let firstChild = first; let lastChild = last; let index = index; trackBy: tree.trackBy\"\r\n [node]=\"childNode\"\r\n [parentNode]=\"node\"\r\n [firstChild]=\"firstChild\"\r\n [lastChild]=\"lastChild\"\r\n [index]=\"index\"\r\n [itemSize]=\"itemSize\"\r\n [level]=\"level + 1\"\r\n [loadingMode]=\"loadingMode\"\r\n ></cax-treeNode>\r\n </ul>\r\n </li>\r\n\r\n <li\r\n *ngIf=\"tree.droppableNodes && lastChild\"\r\n class=\"cax-treenode-droppoint\"\r\n [ngClass]=\"{ 'cax-treenode-droppoint-active': draghoverNext }\"\r\n (drop)=\"onDropPoint($event, 1)\"\r\n [attr.aria-hidden]=\"true\"\r\n (dragover)=\"onDropPointDragOver($event)\"\r\n (dragenter)=\"onDropPointDragEnter($event, 1)\"\r\n (dragleave)=\"onDropPointDragLeave($event)\"\r\n ></li>\r\n\r\n <table *ngIf=\"tree.horizontal\" [class]=\"node.styleClass\">\r\n <tbody>\r\n <tr>\r\n <td class=\"cax-treenode-connector\" *ngIf=\"!root\">\r\n <table class=\"cax-treenode-connector-table\">\r\n <tbody>\r\n <tr>\r\n <td [ngClass]=\"{ 'cax-treenode-connector-line': !firstChild }\"></td>\r\n </tr>\r\n <tr>\r\n <td [ngClass]=\"{ 'cax-treenode-connector-line': !lastChild }\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n <td class=\"cax-treenode\" [ngClass]=\"{ 'cax-treenode-collapsed': !node.expanded }\">\r\n <div\r\n class=\"cax-treenode-content\"\r\n tabindex=\"0\"\r\n [ngClass]=\"{ 'cax-treenode-selectable': tree.selectionMode, 'cax-highlight': isSelected() }\"\r\n (click)=\"onNodeClick($event)\"\r\n (contextmenu)=\"onNodeRightClick($event)\"\r\n (touchend)=\"onNodeTouchEnd()\"\r\n (keydown)=\"onNodeKeydown($event)\"\r\n >\r\n <span *ngIf=\"!isLeaf()\" [ngClass]=\"'cax-tree-toggler'\" (click)=\"toggle($event)\">\r\n <ng-container *ngIf=\"!tree.togglerIconTemplate\">\r\n <PlusIcon *ngIf=\"!node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" [ariaLabel]=\"tree.togglerAriaLabel\" />\r\n <MinusIcon *ngIf=\"node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" [ariaLabel]=\"tree.togglerAriaLabel\" />\r\n </ng-container>\r\n <span *ngIf=\"tree.togglerIconTemplate\" class=\"cax-tree-toggler-icon\">\r\n <ng-template *ngTemplateOutlet=\"tree.togglerIconTemplate; context: { $implicit: node.expanded }\"></ng-template>\r\n </span>\r\n </span>\r\n <span [class]=\"getIcon()\" *ngIf=\"node.icon || node.expandedIcon || node.collapsedIcon\"></span>\r\n <span class=\"cax-treenode-label\">\r\n <span *ngIf=\"!tree.getTemplateForNode(node)\">{{ node.label }}</span>\r\n <span *ngIf=\"tree.getTemplateForNode(node)\">\r\n <ng-container *ngTemplateOutlet=\"tree.getTemplateForNode(node); context: { $implicit: node }\"></ng-container>\r\n </span>\r\n </span>\r\n </div>\r\n </td>\r\n <td\r\n class=\"cax-treenode-children-container\"\r\n *ngIf=\"node.children && node.expanded\"\r\n [ngStyle]=\"{\r\n display: node.expanded ? 'table-cell' : 'none'\r\n }\"\r\n >\r\n <div class=\"cax-treenode-children\">\r\n <cax-treeNode *ngFor=\"let childNode of node.children; let firstChild = first; let lastChild = last; trackBy: tree.trackBy\" [node]=\"childNode\" [firstChild]=\"firstChild\" [lastChild]=\"lastChild\"></cax-treeNode>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.CheckIcon, selector: "CheckIcon" }, { kind: "component", type: i3.ChevronDownIcon, selector: "ChevronDownIcon" }, { kind: "component", type: i4.ChevronRightIcon, selector: "ChevronRightIcon" }, { kind: "component", type: i5.MinusIcon, selector: "MinusIcon" }, { kind: "component", type: i6.SpinnerIcon, selector: "SpinnerIcon" }, { kind: "component", type: i7.PlusIcon, selector: "PlusIcon" }, { kind: "component", type: i8.Badge, selector: "cax-badge", inputs: ["styleClass", "style", "badgeSize", "severity", "value", "badgeDisabled", "size"] }, { kind: "component", type: UITreeNode, selector: "cax-treeNode", inputs: ["rowNode", "node", "parentNode", "root", "index", "firstChild", "lastChild", "level", "indentation", "itemSize", "loadingMode"] }], encapsulation: i0.ViewEncapsulation.None });
456
+ }
457
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: UITreeNode, decorators: [{
458
+ type: Component,
459
+ args: [{ selector: 'cax-treeNode', encapsulation: ViewEncapsulation.None, host: {
460
+ class: 'cax-element'
461
+ }, template: "<ng-template [ngIf]=\"node\">\r\n <li\r\n *ngIf=\"tree.droppableNodes\"\r\n class=\"cax-treenode-droppoint\"\r\n [attr.aria-hidden]=\"true\"\r\n [ngClass]=\"{ 'cax-treenode-droppoint-active': draghoverPrev }\"\r\n (drop)=\"onDropPoint($event, -1)\"\r\n (dragover)=\"onDropPointDragOver($event)\"\r\n (dragenter)=\"onDropPointDragEnter($event, -1)\"\r\n (dragleave)=\"onDropPointDragLeave($event)\"\r\n ></li>\r\n <li\r\n *ngIf=\"!tree.horizontal\"\r\n [ngClass]=\"['cax-treenode', node.styleClass || '', isLeaf() ? 'cax-treenode-leaf' : '']\"\r\n [ngStyle]=\"{ height: itemSize + 'px' }\"\r\n [style]=\"node.style\"\r\n [attr.aria-label]=\"node.label\"\r\n [attr.aria-checked]=\"ariaChecked\"\r\n [attr.aria-setsize]=\"node.children ? node.children.length : 0\"\r\n [attr.aria-selected]=\"ariaSelected\"\r\n [attr.aria-expanded]=\"node.expanded\"\r\n [attr.aria-posinset]=\"index + 1\"\r\n [attr.aria-level]=\"level + 1\"\r\n [attr.tabindex]=\"index === 0 ? 0 : -1\"\r\n [attr.data-id]=\"node.key\"\r\n role=\"treeitem\"\r\n (keydown)=\"onKeyDown($event)\"\r\n >\r\n <div\r\n class=\"cax-treenode-content\"\r\n [ngStyle]=\"{\r\n 'padding-left': level * indentation + 'rem'\r\n }\"\r\n (click)=\"onNodeClick($event)\"\r\n (contextmenu)=\"onNodeRightClick($event)\"\r\n (touchend)=\"onNodeTouchEnd()\"\r\n (drop)=\"onDropNode($event)\"\r\n (dragover)=\"onDropNodeDragOver($event)\"\r\n (dragenter)=\"onDropNodeDragEnter($event)\"\r\n (dragleave)=\"onDropNodeDragLeave($event)\"\r\n [draggable]=\"tree.draggableNodes\"\r\n (dragstart)=\"onDragStart($event)\"\r\n (dragend)=\"onDragStop($event)\"\r\n [ngClass]=\"{ 'cax-treenode-selectable': tree.selectionMode && node.selectable !== false, 'cax-treenode-dragover': draghoverNode, 'cax-highlight': isSelected() }\"\r\n >\r\n <button type=\"button\" [attr.data-pc-section]=\"'toggler'\" class=\"cax-tree-toggler cax-link\" (click)=\"toggle($event)\" pRipple tabindex=\"-1\">\r\n <ng-container *ngIf=\"!tree.togglerIconTemplate\">\r\n <ng-container *ngIf=\"!node.loading\">\r\n <ChevronRightIcon *ngIf=\"!node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" />\r\n <ChevronDownIcon *ngIf=\"node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" />\r\n </ng-container>\r\n <ng-container *ngIf=\"loadingMode === 'icon' && node.loading\">\r\n <SpinnerIcon [spin]=\"true\" [styleClass]=\"'cax-tree-node-toggler-icon'\" />\r\n </ng-container>\r\n </ng-container>\r\n <span *ngIf=\"tree.togglerIconTemplate\" class=\"cax-tree-toggler-icon\">\r\n <ng-template *ngTemplateOutlet=\"tree.togglerIconTemplate; context: { $implicit: node.expanded }\"></ng-template>\r\n </span>\r\n </button>\r\n <div\r\n class=\"cax-checkbox cax-component\"\r\n [ngClass]=\"{ 'cax-checkbox-disabled cax-disabled': node.selectable === false, 'cax-variant-filled': tree?.config.inputStyle() === 'filled' }\"\r\n *ngIf=\"tree.selectionMode == 'checkbox'\"\r\n aria-hidden=\"true\"\r\n >\r\n <div class=\"cax-checkbox-box\" [ngClass]=\"{ 'cax-highlight': isSelected(), 'cax-indeterminate': node.partialSelected }\" role=\"checkbox\">\r\n <ng-container *ngIf=\"!tree.checkboxIconTemplate\">\r\n <CheckIcon *ngIf=\"!node.partialSelected && isSelected()\" [styleClass]=\"'cax-checkbox-icon'\" />\r\n <MinusIcon *ngIf=\"node.partialSelected\" [styleClass]=\"'cax-checkbox-icon'\" />\r\n </ng-container>\r\n <ng-template *ngTemplateOutlet=\"tree.checkboxIconTemplate; context: { $implicit: isSelected(), partialSelected: node.partialSelected }\"></ng-template>\r\n </div>\r\n </div>\r\n <span [class]=\"getIcon()\" *ngIf=\"node.icon || node.expandedIcon || node.collapsedIcon\"></span>\r\n <span class=\"cax-treenode-label\">\r\n <span *ngIf=\"!tree.getTemplateForNode(node)\">{{ node.label }}</span>\r\n <span *ngIf=\"tree.getTemplateForNode(node)\">\r\n <ng-container *ngTemplateOutlet=\"tree.getTemplateForNode(node); context: { $implicit: node }\"></ng-container>\r\n </span>\r\n </span>\r\n <span class=\"cax-tree-badge\" *ngIf=\"node.badge\">\r\n <cax-badge [severity]=\"'secondary'\" [value]=\"node.badge\"></cax-badge>\r\n </span>\r\n </div>\r\n <ul\r\n class=\"cax-treenode-children\"\r\n [ngStyle]=\"{\r\n display: node.expanded ? 'block' : 'none'\r\n }\"\r\n *ngIf=\"!tree.virtualScroll && node.children && node.expanded\"\r\n role=\"group\"\r\n >\r\n <cax-treeNode\r\n *ngFor=\"let childNode of node.children; let firstChild = first; let lastChild = last; let index = index; trackBy: tree.trackBy\"\r\n [node]=\"childNode\"\r\n [parentNode]=\"node\"\r\n [firstChild]=\"firstChild\"\r\n [lastChild]=\"lastChild\"\r\n [index]=\"index\"\r\n [itemSize]=\"itemSize\"\r\n [level]=\"level + 1\"\r\n [loadingMode]=\"loadingMode\"\r\n ></cax-treeNode>\r\n </ul>\r\n </li>\r\n\r\n <li\r\n *ngIf=\"tree.droppableNodes && lastChild\"\r\n class=\"cax-treenode-droppoint\"\r\n [ngClass]=\"{ 'cax-treenode-droppoint-active': draghoverNext }\"\r\n (drop)=\"onDropPoint($event, 1)\"\r\n [attr.aria-hidden]=\"true\"\r\n (dragover)=\"onDropPointDragOver($event)\"\r\n (dragenter)=\"onDropPointDragEnter($event, 1)\"\r\n (dragleave)=\"onDropPointDragLeave($event)\"\r\n ></li>\r\n\r\n <table *ngIf=\"tree.horizontal\" [class]=\"node.styleClass\">\r\n <tbody>\r\n <tr>\r\n <td class=\"cax-treenode-connector\" *ngIf=\"!root\">\r\n <table class=\"cax-treenode-connector-table\">\r\n <tbody>\r\n <tr>\r\n <td [ngClass]=\"{ 'cax-treenode-connector-line': !firstChild }\"></td>\r\n </tr>\r\n <tr>\r\n <td [ngClass]=\"{ 'cax-treenode-connector-line': !lastChild }\"></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </td>\r\n <td class=\"cax-treenode\" [ngClass]=\"{ 'cax-treenode-collapsed': !node.expanded }\">\r\n <div\r\n class=\"cax-treenode-content\"\r\n tabindex=\"0\"\r\n [ngClass]=\"{ 'cax-treenode-selectable': tree.selectionMode, 'cax-highlight': isSelected() }\"\r\n (click)=\"onNodeClick($event)\"\r\n (contextmenu)=\"onNodeRightClick($event)\"\r\n (touchend)=\"onNodeTouchEnd()\"\r\n (keydown)=\"onNodeKeydown($event)\"\r\n >\r\n <span *ngIf=\"!isLeaf()\" [ngClass]=\"'cax-tree-toggler'\" (click)=\"toggle($event)\">\r\n <ng-container *ngIf=\"!tree.togglerIconTemplate\">\r\n <PlusIcon *ngIf=\"!node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" [ariaLabel]=\"tree.togglerAriaLabel\" />\r\n <MinusIcon *ngIf=\"node.expanded\" [styleClass]=\"'cax-tree-toggler-icon'\" [ariaLabel]=\"tree.togglerAriaLabel\" />\r\n </ng-container>\r\n <span *ngIf=\"tree.togglerIconTemplate\" class=\"cax-tree-toggler-icon\">\r\n <ng-template *ngTemplateOutlet=\"tree.togglerIconTemplate; context: { $implicit: node.expanded }\"></ng-template>\r\n </span>\r\n </span>\r\n <span [class]=\"getIcon()\" *ngIf=\"node.icon || node.expandedIcon || node.collapsedIcon\"></span>\r\n <span class=\"cax-treenode-label\">\r\n <span *ngIf=\"!tree.getTemplateForNode(node)\">{{ node.label }}</span>\r\n <span *ngIf=\"tree.getTemplateForNode(node)\">\r\n <ng-container *ngTemplateOutlet=\"tree.getTemplateForNode(node); context: { $implicit: node }\"></ng-container>\r\n </span>\r\n </span>\r\n </div>\r\n </td>\r\n <td\r\n class=\"cax-treenode-children-container\"\r\n *ngIf=\"node.children && node.expanded\"\r\n [ngStyle]=\"{\r\n display: node.expanded ? 'table-cell' : 'none'\r\n }\"\r\n >\r\n <div class=\"cax-treenode-children\">\r\n <cax-treeNode *ngFor=\"let childNode of node.children; let firstChild = first; let lastChild = last; trackBy: tree.trackBy\" [node]=\"childNode\" [firstChild]=\"firstChild\" [lastChild]=\"lastChild\"></cax-treeNode>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</ng-template>\r\n" }]
462
+ }], ctorParameters: () => [{ type: Tree, decorators: [{
463
+ type: Inject,
464
+ args: [forwardRef(() => Tree)]
465
+ }] }], propDecorators: { rowNode: [{
466
+ type: Input
467
+ }], node: [{
468
+ type: Input
469
+ }], parentNode: [{
470
+ type: Input
471
+ }], root: [{
472
+ type: Input,
473
+ args: [{ transform: booleanAttribute }]
474
+ }], index: [{
475
+ type: Input,
476
+ args: [{ transform: numberAttribute }]
477
+ }], firstChild: [{
478
+ type: Input,
479
+ args: [{ transform: booleanAttribute }]
480
+ }], lastChild: [{
481
+ type: Input,
482
+ args: [{ transform: booleanAttribute }]
483
+ }], level: [{
484
+ type: Input,
485
+ args: [{ transform: numberAttribute }]
486
+ }], indentation: [{
487
+ type: Input,
488
+ args: [{ transform: numberAttribute }]
489
+ }], itemSize: [{
490
+ type: Input,
491
+ args: [{ transform: numberAttribute }]
492
+ }], loadingMode: [{
493
+ type: Input
494
+ }] } });
495
+ /**
496
+ * Tree is used to display hierarchical data.
497
+ * @group Components
498
+ */
499
+ export class Tree {
500
+ el;
501
+ dragDropService;
502
+ config;
503
+ cd;
504
+ /**
505
+ * An array of treenodes.
506
+ * @group Props
507
+ */
508
+ value;
509
+ /**
510
+ * Defines the selection mode.
511
+ * @group Props
512
+ */
513
+ selectionMode;
514
+ /**
515
+ * Loading mode display.
516
+ * @group Props
517
+ */
518
+ loadingMode = 'mask';
519
+ /**
520
+ * A single treenode instance or an array to refer to the selections.
521
+ * @group Props
522
+ */
523
+ selection;
524
+ /**
525
+ * Inline style of the component.
526
+ * @group Props
527
+ */
528
+ style;
529
+ /**
530
+ * Style class of the component.
531
+ * @group Props
532
+ */
533
+ styleClass;
534
+ /**
535
+ * Context menu instance.
536
+ * @group Props
537
+ */
538
+ contextMenu;
539
+ /**
540
+ * Defines the orientation of the tree, valid values are 'vertical' and 'horizontal'.
541
+ * @group Props
542
+ */
543
+ layout = 'vertical';
544
+ /**
545
+ * Scope of the draggable nodes to match a droppableScope.
546
+ * @group Props
547
+ */
548
+ draggableScope;
549
+ /**
550
+ * Scope of the droppable nodes to match a draggableScope.
551
+ * @group Props
552
+ */
553
+ droppableScope;
554
+ /**
555
+ * Whether the nodes are draggable.
556
+ * @group Props
557
+ */
558
+ draggableNodes;
559
+ /**
560
+ * Whether the nodes are droppable.
561
+ * @group Props
562
+ */
563
+ droppableNodes;
564
+ /**
565
+ * Defines how multiple items can be selected, when true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item can be toggled individually. On touch enabled devices, metaKeySelection is turned off automatically.
566
+ * @group Props
567
+ */
568
+ metaKeySelection = false;
569
+ /**
570
+ * Whether checkbox selections propagate to ancestor nodes.
571
+ * @group Props
572
+ */
573
+ propagateSelectionUp = true;
574
+ /**
575
+ * Whether checkbox selections propagate to descendant nodes.
576
+ * @group Props
577
+ */
578
+ propagateSelectionDown = true;
579
+ /**
580
+ * Displays a loader to indicate data load is in progress.
581
+ * @group Props
582
+ */
583
+ loading;
584
+ /**
585
+ * The icon to show while indicating data load is in progress.
586
+ * @group Props
587
+ */
588
+ loadingIcon;
589
+ /**
590
+ * Text to display when there is no data.
591
+ * @group Props
592
+ */
593
+ emptyMessage = '';
594
+ /**
595
+ * Used to define a string that labels the tree.
596
+ * @group Props
597
+ */
598
+ ariaLabel;
599
+ /**
600
+ * Defines a string that labels the toggler icon for accessibility.
601
+ * @group Props
602
+ */
603
+ togglerAriaLabel;
604
+ /**
605
+ * Establishes relationships between the component and label(s) where its value should be one or more element IDs.
606
+ * @group Props
607
+ */
608
+ ariaLabelledBy;
609
+ /**
610
+ * When enabled, drop can be accepted or rejected based on condition defined at onNodeDrop.
611
+ * @group Props
612
+ */
613
+ validateDrop;
614
+ /**
615
+ * When specified, displays an input field to filter the items.
616
+ * @group Props
617
+ */
618
+ filter;
619
+ /**
620
+ * When filtering is enabled, filterBy decides which field or fields (comma separated) to search against.
621
+ * @group Props
622
+ */
623
+ filterBy = 'label';
624
+ /**
625
+ * Mode for filtering valid values are "lenient" and "strict". Default is lenient.
626
+ * @group Props
627
+ */
628
+ filterMode = 'lenient';
629
+ /**
630
+ * Placeholder text to show when filter input is empty.
631
+ * @group Props
632
+ */
633
+ filterPlaceholder;
634
+ /**
635
+ * Values after the tree nodes are filtered.
636
+ * @group Props
637
+ */
638
+ filteredNodes;
639
+ /**
640
+ * Locale to use in filtering. The default locale is the host environment's current locale.
641
+ * @group Props
642
+ */
643
+ filterLocale;
644
+ /**
645
+ * Height of the scrollable viewport.
646
+ * @group Props
647
+ */
648
+ scrollHeight;
649
+ /**
650
+ * Defines if data is loaded and interacted with in lazy manner.
651
+ * @group Props
652
+ */
653
+ lazy = false;
654
+ /**
655
+ * Whether the data should be loaded on demand during scroll.
656
+ * @group Props
657
+ */
658
+ virtualScroll;
659
+ /**
660
+ * Height of an item in the list for VirtualScrolling.
661
+ * @group Props
662
+ */
663
+ virtualScrollItemSize;
664
+ /**
665
+ * Whether to use the scroller feature. The properties of scroller component can be used like an object in it.
666
+ * @group Props
667
+ */
668
+ virtualScrollOptions;
669
+ /**
670
+ * Indentation factor for spacing of the nested node when virtual scrolling is enabled.
671
+ * @group Props
672
+ */
673
+ indentation = 1.5;
674
+ /**
675
+ * Custom templates of the component.
676
+ * @group Props
677
+ */
678
+ _templateMap;
679
+ /**
680
+ * Function to optimize the node list rendering, default algorithm checks for object identity.
681
+ * @group Props
682
+ */
683
+ trackBy = (index, item) => item;
684
+ /**
685
+ * Height of the node.
686
+ * @group Props
687
+ * @deprecated use virtualScrollItemSize property instead.
688
+ */
689
+ _virtualNodeHeight;
690
+ get virtualNodeHeight() {
691
+ return this._virtualNodeHeight;
692
+ }
693
+ set virtualNodeHeight(val) {
694
+ this._virtualNodeHeight = val;
695
+ console.warn('The virtualNodeHeight property is deprecated, use virtualScrollItemSize property instead.');
696
+ }
697
+ /**
698
+ * Callback to invoke on selection change.
699
+ * @param {(TreeNode<any> | TreeNode<any>[] | null)} event - Custom selection change event.
700
+ * @group Emits
701
+ */
702
+ selectionChange = new EventEmitter();
703
+ /**
704
+ * Callback to invoke when a node is selected.
705
+ * @param {TreeNodeSelectEvent} event - Node select event.
706
+ * @group Emits
707
+ */
708
+ onNodeSelect = new EventEmitter();
709
+ /**
710
+ * Callback to invoke when a node is unselected.
711
+ * @param {TreeNodeUnSelectEvent} event - Node unselect event.
712
+ * @group Emits
713
+ */
714
+ onNodeUnselect = new EventEmitter();
715
+ /**
716
+ * Callback to invoke when a node is expanded.
717
+ * @param {TreeNodeExpandEvent} event - Node expand event.
718
+ * @group Emits
719
+ */
720
+ onNodeExpand = new EventEmitter();
721
+ /**
722
+ * Callback to invoke when a node is collapsed.
723
+ * @param {TreeNodeCollapseEvent} event - Node collapse event.
724
+ * @group Emits
725
+ */
726
+ onNodeCollapse = new EventEmitter();
727
+ /**
728
+ * Callback to invoke when a node is selected with right click.
729
+ * @param {onNodeContextMenuSelect} event - Node context menu select event.
730
+ * @group Emits
731
+ */
732
+ onNodeContextMenuSelect = new EventEmitter();
733
+ /**
734
+ * Callback to invoke when a node is dropped.
735
+ * @param {TreeNodeDropEvent} event - Node drop event.
736
+ * @group Emits
737
+ */
738
+ onNodeDrop = new EventEmitter();
739
+ /**
740
+ * Callback to invoke in lazy mode to load new data.
741
+ * @param {TreeLazyLoadEvent} event - Custom lazy load event.
742
+ * @group Emits
743
+ */
744
+ onLazyLoad = new EventEmitter();
745
+ /**
746
+ * Callback to invoke in virtual scroll mode when scroll position changes.
747
+ * @param {TreeScrollEvent} event - Custom scroll event.
748
+ * @group Emits
749
+ */
750
+ onScroll = new EventEmitter();
751
+ /**
752
+ * Callback to invoke in virtual scroll mode when scroll position and item's range in view changes.
753
+ * @param {TreeScrollIndexChangeEvent} event - Scroll index change event.
754
+ * @group Emits
755
+ */
756
+ onScrollIndexChange = new EventEmitter();
757
+ /**
758
+ * Callback to invoke when data is filtered.
759
+ * @param {TreeFilterEvent} event - Custom filter event.
760
+ * @group Emits
761
+ */
762
+ onFilter = new EventEmitter();
763
+ templates;
764
+ filterViewChild;
765
+ scroller;
766
+ wrapperViewChild;
767
+ serializedValue;
768
+ headerTemplate;
769
+ footerTemplate;
770
+ loaderTemplate;
771
+ emptyMessageTemplate;
772
+ togglerIconTemplate;
773
+ checkboxIconTemplate;
774
+ loadingIconTemplate;
775
+ filterIconTemplate;
776
+ nodeTouched;
777
+ dragNodeTree;
778
+ dragNode;
779
+ dragNodeSubNodes;
780
+ dragNodeIndex;
781
+ dragNodeScope;
782
+ dragHover;
783
+ dragStartSubscription;
784
+ dragStopSubscription;
785
+ constructor(el, dragDropService, config, cd) {
786
+ this.el = el;
787
+ this.dragDropService = dragDropService;
788
+ this.config = config;
789
+ this.cd = cd;
790
+ }
791
+ ngOnInit() {
792
+ if (this.droppableNodes) {
793
+ this.dragStartSubscription = this.dragDropService.dragStart$.subscribe((event) => {
794
+ this.dragNodeTree = event.tree;
795
+ this.dragNode = event.node;
796
+ this.dragNodeSubNodes = event.subNodes;
797
+ this.dragNodeIndex = event.index;
798
+ this.dragNodeScope = event.scope;
799
+ });
800
+ this.dragStopSubscription = this.dragDropService.dragStop$.subscribe((event) => {
801
+ this.dragNodeTree = null;
802
+ this.dragNode = null;
803
+ this.dragNodeSubNodes = null;
804
+ this.dragNodeIndex = null;
805
+ this.dragNodeScope = null;
806
+ this.dragHover = false;
807
+ });
808
+ }
809
+ }
810
+ ngOnChanges(simpleChange) {
811
+ if (simpleChange.value) {
812
+ this.updateSerializedValue();
813
+ if (this.hasFilterActive()) {
814
+ this._filter(this.filterViewChild.nativeElement.value);
815
+ }
816
+ }
817
+ }
818
+ get horizontal() {
819
+ return this.layout == 'horizontal';
820
+ }
821
+ get emptyMessageLabel() {
822
+ return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);
823
+ }
824
+ ngAfterContentInit() {
825
+ if (this.templates.length) {
826
+ this._templateMap = {};
827
+ }
828
+ this.templates.forEach((item) => {
829
+ switch (item.getType()) {
830
+ case 'header':
831
+ this.headerTemplate = item.template;
832
+ break;
833
+ case 'empty':
834
+ this.emptyMessageTemplate = item.template;
835
+ break;
836
+ case 'footer':
837
+ this.footerTemplate = item.template;
838
+ break;
839
+ case 'loader':
840
+ this.loaderTemplate = item.template;
841
+ break;
842
+ case 'togglericon':
843
+ this.togglerIconTemplate = item.template;
844
+ break;
845
+ case 'checkboxicon':
846
+ this.checkboxIconTemplate = item.template;
847
+ break;
848
+ case 'loadingicon':
849
+ this.loadingIconTemplate = item.template;
850
+ break;
851
+ case 'filtericon':
852
+ this.filterIconTemplate = item.template;
853
+ break;
854
+ default:
855
+ this._templateMap[item.name] = item.template;
856
+ break;
857
+ }
858
+ });
859
+ }
860
+ updateSerializedValue() {
861
+ this.serializedValue = [];
862
+ this.serializeNodes(null, this.getRootNode(), 0, true);
863
+ }
864
+ serializeNodes(parent, nodes, level, visible) {
865
+ if (nodes && nodes.length) {
866
+ for (let node of nodes) {
867
+ node.parent = parent;
868
+ const rowNode = {
869
+ node: node,
870
+ parent: parent,
871
+ level: level,
872
+ visible: visible && (parent ? parent.expanded : true)
873
+ };
874
+ this.serializedValue.push(rowNode);
875
+ if (rowNode.visible && node.expanded) {
876
+ this.serializeNodes(node, node.children, level + 1, rowNode.visible);
877
+ }
878
+ }
879
+ }
880
+ }
881
+ onNodeClick(event, node) {
882
+ let eventTarget = event.target;
883
+ if (DomHandler.hasClass(eventTarget, 'cax-tree-toggler') || DomHandler.hasClass(eventTarget, 'cax-tree-toggler-icon')) {
884
+ return;
885
+ }
886
+ else if (this.selectionMode) {
887
+ if (node.selectable === false) {
888
+ node.style = '--cax-focus-ring-color: none;';
889
+ return;
890
+ }
891
+ else {
892
+ node.style = '--cax-focus-ring-color: var(--primary-color)';
893
+ }
894
+ if (this.hasFilteredNodes()) {
895
+ node = this.getNodeWithKey(node.key, this.filteredNodes);
896
+ if (!node) {
897
+ return;
898
+ }
899
+ }
900
+ let index = this.findIndexInSelection(node);
901
+ let selected = index >= 0;
902
+ if (this.isCheckboxSelectionMode()) {
903
+ if (selected) {
904
+ if (this.propagateSelectionDown)
905
+ this.propagateDown(node, false);
906
+ else
907
+ this.selection = this.selection.filter((val, i) => i != index);
908
+ if (this.propagateSelectionUp && node.parent) {
909
+ this.propagateUp(node.parent, false);
910
+ }
911
+ this.selectionChange.emit(this.selection);
912
+ this.onNodeUnselect.emit({ originalEvent: event, node: node });
913
+ }
914
+ else {
915
+ if (this.propagateSelectionDown)
916
+ this.propagateDown(node, true);
917
+ else
918
+ this.selection = [...(this.selection || []), node];
919
+ if (this.propagateSelectionUp && node.parent) {
920
+ this.propagateUp(node.parent, true);
921
+ }
922
+ this.selectionChange.emit(this.selection);
923
+ this.onNodeSelect.emit({ originalEvent: event, node: node });
924
+ }
925
+ }
926
+ else {
927
+ let metaSelection = this.nodeTouched ? false : this.metaKeySelection;
928
+ if (metaSelection) {
929
+ let metaKey = event.metaKey || event.ctrlKey;
930
+ if (selected && metaKey) {
931
+ if (this.isSingleSelectionMode()) {
932
+ this.selectionChange.emit(null);
933
+ }
934
+ else {
935
+ this.selection = this.selection.filter((val, i) => i != index);
936
+ this.selectionChange.emit(this.selection);
937
+ }
938
+ this.onNodeUnselect.emit({ originalEvent: event, node: node });
939
+ }
940
+ else {
941
+ if (this.isSingleSelectionMode()) {
942
+ this.selectionChange.emit(node);
943
+ }
944
+ else if (this.isMultipleSelectionMode()) {
945
+ this.selection = !metaKey ? [] : this.selection || [];
946
+ this.selection = [...this.selection, node];
947
+ this.selectionChange.emit(this.selection);
948
+ }
949
+ this.onNodeSelect.emit({ originalEvent: event, node: node });
950
+ }
951
+ }
952
+ else {
953
+ if (this.isSingleSelectionMode()) {
954
+ if (selected) {
955
+ this.selection = null;
956
+ this.onNodeUnselect.emit({ originalEvent: event, node: node });
957
+ }
958
+ else {
959
+ this.selection = node;
960
+ setTimeout(() => {
961
+ this.onNodeSelect.emit({ originalEvent: event, node: node });
962
+ });
963
+ }
964
+ }
965
+ else {
966
+ if (selected) {
967
+ this.selection = this.selection.filter((val, i) => i != index);
968
+ this.onNodeUnselect.emit({ originalEvent: event, node: node });
969
+ }
970
+ else {
971
+ this.selection = [...(this.selection || []), node];
972
+ setTimeout(() => {
973
+ this.onNodeSelect.emit({ originalEvent: event, node: node });
974
+ });
975
+ }
976
+ }
977
+ this.selectionChange.emit(this.selection);
978
+ }
979
+ }
980
+ }
981
+ this.nodeTouched = false;
982
+ }
983
+ onNodeTouchEnd() {
984
+ this.nodeTouched = true;
985
+ }
986
+ onNodeRightClick(event, node) {
987
+ if (this.contextMenu) {
988
+ let eventTarget = event.target;
989
+ let className = eventTarget.getAttribute('class');
990
+ if (className && className.includes('cax-tree-toggler')) {
991
+ return;
992
+ }
993
+ else {
994
+ let index = this.findIndexInSelection(node);
995
+ let selected = index >= 0;
996
+ if (!selected) {
997
+ if (this.isSingleSelectionMode())
998
+ this.selectionChange.emit(node);
999
+ else
1000
+ this.selectionChange.emit([node]);
1001
+ }
1002
+ this.contextMenu.show(event);
1003
+ this.onNodeContextMenuSelect.emit({ originalEvent: event, node: node });
1004
+ }
1005
+ }
1006
+ }
1007
+ findIndexInSelection(node) {
1008
+ let index = -1;
1009
+ if (this.selectionMode && this.selection) {
1010
+ if (this.isSingleSelectionMode()) {
1011
+ let areNodesEqual = (this.selection.key && this.selection.key === node.key) || this.selection == node;
1012
+ index = areNodesEqual ? 0 : -1;
1013
+ }
1014
+ else {
1015
+ for (let i = 0; i < this.selection.length; i++) {
1016
+ let selectedNode = this.selection[i];
1017
+ let areNodesEqual = (selectedNode.key && selectedNode.key === node.key) || selectedNode == node;
1018
+ if (areNodesEqual) {
1019
+ index = i;
1020
+ break;
1021
+ }
1022
+ }
1023
+ }
1024
+ }
1025
+ return index;
1026
+ }
1027
+ syncNodeOption(node, parentNodes, option, value) {
1028
+ // to synchronize the node option between the filtered nodes and the original nodes(this.value)
1029
+ const _node = this.hasFilteredNodes() ? this.getNodeWithKey(node.key, parentNodes) : null;
1030
+ if (_node) {
1031
+ _node[option] = value || node[option];
1032
+ }
1033
+ }
1034
+ hasFilteredNodes() {
1035
+ return this.filter && this.filteredNodes && this.filteredNodes.length;
1036
+ }
1037
+ hasFilterActive() {
1038
+ return this.filter && this.filterViewChild?.nativeElement?.value.length > 0;
1039
+ }
1040
+ getNodeWithKey(key, nodes) {
1041
+ for (let node of nodes) {
1042
+ if (node.key === key) {
1043
+ return node;
1044
+ }
1045
+ if (node.children) {
1046
+ let matchedNode = this.getNodeWithKey(key, node.children);
1047
+ if (matchedNode) {
1048
+ return matchedNode;
1049
+ }
1050
+ }
1051
+ }
1052
+ }
1053
+ propagateUp(node, select) {
1054
+ if (node.children && node.children.length) {
1055
+ let selectedCount = 0;
1056
+ let childPartialSelected = false;
1057
+ for (let child of node.children) {
1058
+ if (this.isSelected(child)) {
1059
+ selectedCount++;
1060
+ }
1061
+ else if (child.partialSelected) {
1062
+ childPartialSelected = true;
1063
+ }
1064
+ }
1065
+ if (select && selectedCount == node.children.length) {
1066
+ this.selection = [...(this.selection || []), node];
1067
+ node.partialSelected = false;
1068
+ }
1069
+ else {
1070
+ if (!select) {
1071
+ let index = this.findIndexInSelection(node);
1072
+ if (index >= 0) {
1073
+ this.selection = this.selection.filter((val, i) => i != index);
1074
+ }
1075
+ }
1076
+ if (childPartialSelected || (selectedCount > 0 && selectedCount != node.children.length))
1077
+ node.partialSelected = true;
1078
+ else
1079
+ node.partialSelected = false;
1080
+ }
1081
+ this.syncNodeOption(node, this.filteredNodes, 'partialSelected');
1082
+ }
1083
+ let parent = node.parent;
1084
+ if (parent) {
1085
+ this.propagateUp(parent, select);
1086
+ }
1087
+ }
1088
+ propagateDown(node, select) {
1089
+ let index = this.findIndexInSelection(node);
1090
+ if (select && index == -1 && node.selectable !== false) {
1091
+ this.selection = [...(this.selection || []), this.filterUnselectableChildren(node)];
1092
+ }
1093
+ else if (!select && index > -1) {
1094
+ this.selection = this.selection.filter((val, i) => i != index);
1095
+ }
1096
+ node.partialSelected = false;
1097
+ this.syncNodeOption(node, this.filteredNodes, 'partialSelected');
1098
+ if (node.children && node.children.length) {
1099
+ for (let child of node.children) {
1100
+ this.propagateDown(child, select);
1101
+ }
1102
+ }
1103
+ }
1104
+ filterUnselectableChildren(node) {
1105
+ let clonedNode = Object.assign({}, node);
1106
+ if (clonedNode.children && clonedNode.children.length) {
1107
+ for (let child of clonedNode.children) {
1108
+ if (child.selectable === false) {
1109
+ clonedNode.children = clonedNode.children.filter((val) => val != child);
1110
+ }
1111
+ child = this.filterUnselectableChildren(child);
1112
+ }
1113
+ }
1114
+ return clonedNode;
1115
+ }
1116
+ isSelected(node) {
1117
+ return this.findIndexInSelection(node) != -1;
1118
+ }
1119
+ isSingleSelectionMode() {
1120
+ return this.selectionMode && this.selectionMode == 'single';
1121
+ }
1122
+ isMultipleSelectionMode() {
1123
+ return this.selectionMode && this.selectionMode == 'multiple';
1124
+ }
1125
+ isCheckboxSelectionMode() {
1126
+ return this.selectionMode && this.selectionMode == 'checkbox';
1127
+ }
1128
+ isNodeLeaf(node) {
1129
+ return node.leaf == false ? false : !(node.children && node.children.length);
1130
+ }
1131
+ getRootNode() {
1132
+ return this.filteredNodes ? this.filteredNodes : this.value;
1133
+ }
1134
+ getTemplateForNode(node) {
1135
+ if (this._templateMap)
1136
+ return node.type ? this._templateMap[node.type] : this._templateMap['default'];
1137
+ else
1138
+ return null;
1139
+ }
1140
+ onDragOver(event) {
1141
+ if (this.droppableNodes && (!this.value || this.value.length === 0)) {
1142
+ event.dataTransfer.dropEffect = 'move';
1143
+ event.preventDefault();
1144
+ }
1145
+ }
1146
+ onDrop(event) {
1147
+ if (this.droppableNodes && (!this.value || this.value.length === 0)) {
1148
+ event.preventDefault();
1149
+ let dragNode = this.dragNode;
1150
+ if (this.allowDrop(dragNode, null, this.dragNodeScope)) {
1151
+ let dragNodeIndex = this.dragNodeIndex;
1152
+ this.value = this.value || [];
1153
+ if (this.validateDrop) {
1154
+ this.onNodeDrop.emit({
1155
+ originalEvent: event,
1156
+ dragNode: dragNode,
1157
+ dropNode: null,
1158
+ index: dragNodeIndex,
1159
+ accept: () => {
1160
+ this.processTreeDrop(dragNode, dragNodeIndex);
1161
+ }
1162
+ });
1163
+ }
1164
+ else {
1165
+ this.onNodeDrop.emit({
1166
+ originalEvent: event,
1167
+ dragNode: dragNode,
1168
+ dropNode: null,
1169
+ index: dragNodeIndex
1170
+ });
1171
+ this.processTreeDrop(dragNode, dragNodeIndex);
1172
+ }
1173
+ }
1174
+ }
1175
+ }
1176
+ processTreeDrop(dragNode, dragNodeIndex) {
1177
+ this.dragNodeSubNodes.splice(dragNodeIndex, 1);
1178
+ this.value.push(dragNode);
1179
+ this.dragDropService.stopDrag({
1180
+ node: dragNode
1181
+ });
1182
+ }
1183
+ onDragEnter() {
1184
+ if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {
1185
+ this.dragHover = true;
1186
+ }
1187
+ }
1188
+ onDragLeave(event) {
1189
+ if (this.droppableNodes) {
1190
+ let rect = event.currentTarget.getBoundingClientRect();
1191
+ if (event.x > rect.left + rect.width || event.x < rect.left || event.y > rect.top + rect.height || event.y < rect.top) {
1192
+ this.dragHover = false;
1193
+ }
1194
+ }
1195
+ }
1196
+ allowDrop(dragNode, dropNode, dragNodeScope) {
1197
+ if (!dragNode) {
1198
+ //prevent random html elements to be dragged
1199
+ return false;
1200
+ }
1201
+ else if (this.isValidDragScope(dragNodeScope)) {
1202
+ let allow = true;
1203
+ if (dropNode) {
1204
+ if (dragNode === dropNode) {
1205
+ allow = false;
1206
+ }
1207
+ else {
1208
+ let parent = dropNode.parent;
1209
+ while (parent != null) {
1210
+ if (parent === dragNode) {
1211
+ allow = false;
1212
+ break;
1213
+ }
1214
+ parent = parent.parent;
1215
+ }
1216
+ }
1217
+ }
1218
+ return allow;
1219
+ }
1220
+ else {
1221
+ return false;
1222
+ }
1223
+ }
1224
+ isValidDragScope(dragScope) {
1225
+ let dropScope = this.droppableScope;
1226
+ if (dropScope) {
1227
+ if (typeof dropScope === 'string') {
1228
+ if (typeof dragScope === 'string')
1229
+ return dropScope === dragScope;
1230
+ else if (Array.isArray(dragScope))
1231
+ return dragScope.indexOf(dropScope) != -1;
1232
+ }
1233
+ else if (Array.isArray(dropScope)) {
1234
+ if (typeof dragScope === 'string') {
1235
+ return dropScope.indexOf(dragScope) != -1;
1236
+ }
1237
+ else if (Array.isArray(dragScope)) {
1238
+ for (let s of dropScope) {
1239
+ for (let ds of dragScope) {
1240
+ if (s === ds) {
1241
+ return true;
1242
+ }
1243
+ }
1244
+ }
1245
+ }
1246
+ }
1247
+ return false;
1248
+ }
1249
+ else {
1250
+ return true;
1251
+ }
1252
+ }
1253
+ _filter(value) {
1254
+ let filterValue = value;
1255
+ if (filterValue === '') {
1256
+ this.filteredNodes = null;
1257
+ }
1258
+ else {
1259
+ this.filteredNodes = [];
1260
+ const searchFields = this.filterBy.split(',');
1261
+ const filterText = ObjectUtils.removeAccents(filterValue).toLocaleLowerCase(this.filterLocale);
1262
+ const isStrictMode = this.filterMode === 'strict';
1263
+ for (let node of this.value) {
1264
+ let copyNode = { ...node };
1265
+ let paramsWithoutNode = { searchFields, filterText, isStrictMode };
1266
+ if ((isStrictMode && (this.findFilteredNodes(copyNode, paramsWithoutNode) || this.isFilterMatched(copyNode, paramsWithoutNode))) ||
1267
+ (!isStrictMode && (this.isFilterMatched(copyNode, paramsWithoutNode) || this.findFilteredNodes(copyNode, paramsWithoutNode)))) {
1268
+ this.filteredNodes.push(copyNode);
1269
+ }
1270
+ }
1271
+ }
1272
+ this.updateSerializedValue();
1273
+ this.onFilter.emit({
1274
+ filter: filterValue,
1275
+ filteredValue: this.filteredNodes
1276
+ });
1277
+ }
1278
+ /**
1279
+ * Resets filter.
1280
+ * @group Method
1281
+ */
1282
+ resetFilter() {
1283
+ this.filteredNodes = null;
1284
+ if (this.filterViewChild && this.filterViewChild.nativeElement) {
1285
+ this.filterViewChild.nativeElement.value = '';
1286
+ }
1287
+ }
1288
+ /**
1289
+ * Scrolls to virtual index.
1290
+ * @param {number} number - Index to be scrolled.
1291
+ * @group Method
1292
+ */
1293
+ scrollToVirtualIndex(index) {
1294
+ this.virtualScroll && this.scroller?.scrollToIndex(index);
1295
+ }
1296
+ /**
1297
+ * Scrolls to virtual index.
1298
+ * @param {ScrollToOptions} options - Scroll options.
1299
+ * @group Method
1300
+ */
1301
+ scrollTo(options) {
1302
+ if (this.virtualScroll) {
1303
+ this.scroller?.scrollTo(options);
1304
+ }
1305
+ else if (this.wrapperViewChild && this.wrapperViewChild.nativeElement) {
1306
+ if (this.wrapperViewChild.nativeElement.scrollTo) {
1307
+ this.wrapperViewChild.nativeElement.scrollTo(options);
1308
+ }
1309
+ else {
1310
+ this.wrapperViewChild.nativeElement.scrollLeft = options.left;
1311
+ this.wrapperViewChild.nativeElement.scrollTop = options.top;
1312
+ }
1313
+ }
1314
+ }
1315
+ findFilteredNodes(node, paramsWithoutNode) {
1316
+ if (node) {
1317
+ let matched = false;
1318
+ if (node.children) {
1319
+ let childNodes = [...node.children];
1320
+ node.children = [];
1321
+ for (let childNode of childNodes) {
1322
+ let copyChildNode = { ...childNode };
1323
+ if (this.isFilterMatched(copyChildNode, paramsWithoutNode)) {
1324
+ matched = true;
1325
+ node.children.push(copyChildNode);
1326
+ }
1327
+ }
1328
+ }
1329
+ if (matched) {
1330
+ node.expanded = true;
1331
+ return true;
1332
+ }
1333
+ }
1334
+ }
1335
+ isFilterMatched(node, params) {
1336
+ let { searchFields, filterText, isStrictMode } = params;
1337
+ let matched = false;
1338
+ for (let field of searchFields) {
1339
+ let fieldValue = ObjectUtils.removeAccents(String(ObjectUtils.resolveFieldData(node, field))).toLocaleLowerCase(this.filterLocale);
1340
+ if (fieldValue.indexOf(filterText) > -1) {
1341
+ matched = true;
1342
+ }
1343
+ }
1344
+ if (!matched || (isStrictMode && !this.isNodeLeaf(node))) {
1345
+ matched = this.findFilteredNodes(node, { searchFields, filterText, isStrictMode }) || matched;
1346
+ }
1347
+ return matched;
1348
+ }
1349
+ getIndex(options, index) {
1350
+ const getItemOptions = options['getItemOptions'];
1351
+ return getItemOptions ? getItemOptions(index).index : index;
1352
+ }
1353
+ getBlockableElement() {
1354
+ return this.el.nativeElement.children[0];
1355
+ }
1356
+ ngOnDestroy() {
1357
+ if (this.dragStartSubscription) {
1358
+ this.dragStartSubscription.unsubscribe();
1359
+ }
1360
+ if (this.dragStopSubscription) {
1361
+ this.dragStopSubscription.unsubscribe();
1362
+ }
1363
+ }
1364
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Tree, deps: [{ token: i0.ElementRef }, { token: i9.TreeDragDropService, optional: true }, { token: i9.caxConfig }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1365
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: Tree, selector: "cax-tree", inputs: { value: "value", selectionMode: "selectionMode", loadingMode: "loadingMode", selection: "selection", style: "style", styleClass: "styleClass", contextMenu: "contextMenu", layout: "layout", draggableScope: "draggableScope", droppableScope: "droppableScope", draggableNodes: ["draggableNodes", "draggableNodes", booleanAttribute], droppableNodes: ["droppableNodes", "droppableNodes", booleanAttribute], metaKeySelection: ["metaKeySelection", "metaKeySelection", booleanAttribute], propagateSelectionUp: ["propagateSelectionUp", "propagateSelectionUp", booleanAttribute], propagateSelectionDown: ["propagateSelectionDown", "propagateSelectionDown", booleanAttribute], loading: ["loading", "loading", booleanAttribute], loadingIcon: "loadingIcon", emptyMessage: "emptyMessage", ariaLabel: "ariaLabel", togglerAriaLabel: "togglerAriaLabel", ariaLabelledBy: "ariaLabelledBy", validateDrop: ["validateDrop", "validateDrop", booleanAttribute], filter: ["filter", "filter", booleanAttribute], filterBy: "filterBy", filterMode: "filterMode", filterPlaceholder: "filterPlaceholder", filteredNodes: "filteredNodes", filterLocale: "filterLocale", scrollHeight: "scrollHeight", lazy: ["lazy", "lazy", booleanAttribute], virtualScroll: ["virtualScroll", "virtualScroll", booleanAttribute], virtualScrollItemSize: ["virtualScrollItemSize", "virtualScrollItemSize", numberAttribute], virtualScrollOptions: "virtualScrollOptions", indentation: ["indentation", "indentation", numberAttribute], _templateMap: "_templateMap", trackBy: "trackBy", virtualNodeHeight: "virtualNodeHeight" }, outputs: { selectionChange: "selectionChange", onNodeSelect: "onNodeSelect", onNodeUnselect: "onNodeUnselect", onNodeExpand: "onNodeExpand", onNodeCollapse: "onNodeCollapse", onNodeContextMenuSelect: "onNodeContextMenuSelect", onNodeDrop: "onNodeDrop", onLazyLoad: "onLazyLoad", onScroll: "onScroll", onScrollIndexChange: "onScrollIndexChange", onFilter: "onFilter" }, host: { classAttribute: "cax-element" }, queries: [{ propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "filterViewChild", first: true, predicate: ["filter"], descendants: true }, { propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }, { propertyName: "wrapperViewChild", first: true, predicate: ["wrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n [ngClass]=\"{ 'cax-tree cax-component': true, 'cax-tree-selectable': selectionMode, 'cax-treenode-dragover': dragHover, 'cax-tree-loading': loading, 'cax-tree-flex-scrollable': scrollHeight === 'flex' }\"\r\n [ngStyle]=\"style\"\r\n [class]=\"styleClass\"\r\n *ngIf=\"!horizontal\"\r\n (drop)=\"onDrop($event)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragenter)=\"onDragEnter()\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n>\r\n <div class=\"cax-tree-loading-overlay cax-component-overlay\" *ngIf=\"loading && loadingMode === 'mask'\">\r\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-tree-loading-icon pi-spin ' + loadingIcon\"></i>\r\n <ng-container *ngIf=\"!loadingIcon\">\r\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-tree-loading-icon'\" />\r\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-tree-loading-icon\">\r\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n <div *ngIf=\"filter\" class=\"cax-tree-filter-container\">\r\n <input #filter type=\"search\" autocomplete=\"off\" class=\"cax-tree-filter cax-inputtext cax-component\" [attr.placeholder]=\"filterPlaceholder\" (keydown.enter)=\"$event.preventDefault()\" (input)=\"_filter($event.target.value)\" />\r\n <SearchIcon *ngIf=\"!filterIconTemplate\" [styleClass]=\"'cax-tree-filter-icon'\" />\r\n <span *ngIf=\"filterIconTemplate\" class=\"cax-tree-filter-icon\">\r\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\r\n </span>\r\n </div>\r\n <ng-container *ngIf=\"getRootNode()?.length\">\r\n <cax-scroller\r\n #scroller\r\n *ngIf=\"virtualScroll\"\r\n [items]=\"serializedValue\"\r\n [tabindex]=\"-1\"\r\n styleClass=\"cax-tree-wrapper\"\r\n [style]=\"{ height: scrollHeight !== 'flex' ? scrollHeight : undefined }\"\r\n [scrollHeight]=\"scrollHeight !== 'flex' ? undefined : '100%'\"\r\n [itemSize]=\"virtualScrollItemSize || _virtualNodeHeight\"\r\n [lazy]=\"lazy\"\r\n (onScroll)=\"onScroll.emit($event)\"\r\n (onScrollIndexChange)=\"onScrollIndexChange.emit($event)\"\r\n (onLazyLoad)=\"onLazyLoad.emit($event)\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ul *ngIf=\"items\" class=\"cax-tree-container\" [ngClass]=\"scrollerOptions.contentStyleClass\" [style]=\"scrollerOptions.contentStyle\" role=\"tree\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\">\r\n <cax-treeNode\r\n #treeNode\r\n *ngFor=\"let rowNode of items; let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy\"\r\n [level]=\"rowNode.level\"\r\n [rowNode]=\"rowNode\"\r\n [node]=\"rowNode.node\"\r\n [parentNode]=\"rowNode.parent\"\r\n [firstChild]=\"firstChild\"\r\n [lastChild]=\"lastChild\"\r\n [index]=\"getIndex(scrollerOptions, index)\"\r\n [itemSize]=\"scrollerOptions.itemSize\"\r\n [indentation]=\"indentation\"\r\n [loadingMode]=\"loadingMode\"\r\n ></cax-treeNode>\r\n </ul>\r\n </ng-template>\r\n <ng-container *ngIf=\"loaderTemplate\">\r\n <ng-template caxTemplate=\"loader\" let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"loaderTemplate; context: { options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <div #wrapper class=\"cax-tree-wrapper\" [ngStyle]=\"{ 'max-height': scrollHeight }\">\r\n <ul class=\"cax-tree-container\" *ngIf=\"getRootNode()\" role=\"tree\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\">\r\n <cax-treeNode\r\n *ngFor=\"let node of getRootNode(); let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy\"\r\n [node]=\"node\"\r\n [firstChild]=\"firstChild\"\r\n [lastChild]=\"lastChild\"\r\n [index]=\"index\"\r\n [level]=\"0\"\r\n [loadingMode]=\"loadingMode\"\r\n ></cax-treeNode>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"cax-tree-empty-message\" *ngIf=\"!loading && (getRootNode() == null || getRootNode().length === 0)\">\r\n <ng-container *ngIf=\"!emptyMessageTemplate; else emptyFilter\"> {{ emptyMessageLabel }} </ng-container>\r\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n</div>\r\n<div [ngClass]=\"{ 'cax-tree cax-tree-horizontal cax-component': true, 'cax-tree-selectable': selectionMode }\" [ngStyle]=\"style\" [class]=\"styleClass\" *ngIf=\"horizontal\">\r\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n <div class=\"cax-tree-loading-mask cax-component-overlay\" *ngIf=\"loading\">\r\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-tree-loading-icon pi-spin ' + loadingIcon\"></i>\r\n <ng-container *ngIf=\"!loadingIcon\">\r\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-tree-loading-icon'\" />\r\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-tree-loading-icon\">\r\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <table *ngIf=\"value && value[0]\">\r\n <cax-treeNode [node]=\"value[0]\" [root]=\"true\"></cax-treeNode>\r\n </table>\r\n <div class=\"cax-tree-empty-message\" *ngIf=\"!loading && (getRootNode() == null || getRootNode().length === 0)\">\r\n <ng-container *ngIf=\"!emptyMessageTemplate; else emptyFilter\"> {{ emptyMessageLabel }} </ng-container>\r\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n</div>\r\n", styles: ["@layer cax{.cax-tree-container{margin:0;padding:0;list-style-type:none;overflow:auto}.cax-treenode-children{margin:0;padding:0;list-style-type:none}.cax-tree-wrapper{overflow:auto}.cax-treenode-selectable{cursor:pointer;-webkit-user-select:none;user-select:none}.cax-tree-toggler{cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative;flex-shrink:0}.cax-treenode-leaf>.cax-treenode-content .cax-tree-toggler{visibility:hidden}.cax-treenode-content{display:flex;align-items:center}.cax-tree-filter{width:100%}.cax-tree-filter-container{position:relative;display:block;width:100%}.cax-tree-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.cax-tree-loading{position:relative;min-height:4rem}.cax-tree .cax-tree-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:2}.cax-tree-flex-scrollable{display:flex;flex:1;height:100%;flex-direction:column}.cax-tree-flex-scrollable .cax-tree-wrapper{flex:1}.cax-tree .cax-treenode-droppoint{height:4px;list-style-type:none}.cax-tree .cax-treenode-droppoint-active{border:0 none}.cax-tree-horizontal{width:auto;padding-left:0;padding-right:0;overflow:auto}.cax-tree.cax-tree-horizontal table,.cax-tree.cax-tree-horizontal tr,.cax-tree.cax-tree-horizontal td{border-collapse:collapse;margin:0;padding:0;vertical-align:middle}.cax-tree-horizontal .cax-treenode-content{font-weight:400;padding:.4em 1em .4em .2em;display:flex;align-items:center}.cax-tree-horizontal .cax-treenode-parent .cax-treenode-content{font-weight:400;white-space:nowrap}.cax-tree.cax-tree-horizontal .cax-treenode{background:url(data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=) repeat-x scroll center center transparent;padding:.25rem 2.5rem}.cax-tree.cax-tree-horizontal .cax-treenode.cax-treenode-leaf,.cax-tree.cax-tree-horizontal .cax-treenode.cax-treenode-collapsed{padding-right:0}.cax-tree.cax-tree-horizontal .cax-treenode-children{padding:0;margin:0}.cax-tree.cax-tree-horizontal .cax-treenode-connector{width:1px}.cax-tree.cax-tree-horizontal .cax-treenode-connector-table{height:100%;width:1px}.cax-tree.cax-tree-horizontal .cax-treenode-connector-line{background:url(data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=) repeat-y scroll 0 0 transparent;width:1px}.cax-tree.cax-tree-horizontal table{height:0}.cax-scroller .cax-tree-container{overflow:visible}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i9.CaxTemplate, selector: "[caxTemplate]", inputs: ["type", "caxTemplate"] }, { kind: "component", type: i10.Scroller, selector: "cax-scroller", inputs: ["id", "style", "styleClass", "tabindex", "items", "itemSize", "scrollHeight", "scrollWidth", "orientation", "step", "delay", "resizeDelay", "appendOnly", "inline", "lazy", "disabled", "loaderDisabled", "columns", "showSpacer", "showLoader", "numToleratedItems", "loading", "autoSize", "trackBy", "options"], outputs: ["onLazyLoad", "onScroll", "onScrollIndexChange"] }, { kind: "component", type: i11.SearchIcon, selector: "SearchIcon" }, { kind: "component", type: i6.SpinnerIcon, selector: "SpinnerIcon" }, { kind: "component", type: UITreeNode, selector: "cax-treeNode", inputs: ["rowNode", "node", "parentNode", "root", "index", "firstChild", "lastChild", "level", "indentation", "itemSize", "loadingMode"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
1366
+ }
1367
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Tree, decorators: [{
1368
+ type: Component,
1369
+ args: [{ selector: 'cax-tree', changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, host: {
1370
+ class: 'cax-element'
1371
+ }, template: "<div\r\n [ngClass]=\"{ 'cax-tree cax-component': true, 'cax-tree-selectable': selectionMode, 'cax-treenode-dragover': dragHover, 'cax-tree-loading': loading, 'cax-tree-flex-scrollable': scrollHeight === 'flex' }\"\r\n [ngStyle]=\"style\"\r\n [class]=\"styleClass\"\r\n *ngIf=\"!horizontal\"\r\n (drop)=\"onDrop($event)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragenter)=\"onDragEnter()\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n>\r\n <div class=\"cax-tree-loading-overlay cax-component-overlay\" *ngIf=\"loading && loadingMode === 'mask'\">\r\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-tree-loading-icon pi-spin ' + loadingIcon\"></i>\r\n <ng-container *ngIf=\"!loadingIcon\">\r\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-tree-loading-icon'\" />\r\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-tree-loading-icon\">\r\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n <div *ngIf=\"filter\" class=\"cax-tree-filter-container\">\r\n <input #filter type=\"search\" autocomplete=\"off\" class=\"cax-tree-filter cax-inputtext cax-component\" [attr.placeholder]=\"filterPlaceholder\" (keydown.enter)=\"$event.preventDefault()\" (input)=\"_filter($event.target.value)\" />\r\n <SearchIcon *ngIf=\"!filterIconTemplate\" [styleClass]=\"'cax-tree-filter-icon'\" />\r\n <span *ngIf=\"filterIconTemplate\" class=\"cax-tree-filter-icon\">\r\n <ng-template *ngTemplateOutlet=\"filterIconTemplate\"></ng-template>\r\n </span>\r\n </div>\r\n <ng-container *ngIf=\"getRootNode()?.length\">\r\n <cax-scroller\r\n #scroller\r\n *ngIf=\"virtualScroll\"\r\n [items]=\"serializedValue\"\r\n [tabindex]=\"-1\"\r\n styleClass=\"cax-tree-wrapper\"\r\n [style]=\"{ height: scrollHeight !== 'flex' ? scrollHeight : undefined }\"\r\n [scrollHeight]=\"scrollHeight !== 'flex' ? undefined : '100%'\"\r\n [itemSize]=\"virtualScrollItemSize || _virtualNodeHeight\"\r\n [lazy]=\"lazy\"\r\n (onScroll)=\"onScroll.emit($event)\"\r\n (onScrollIndexChange)=\"onScrollIndexChange.emit($event)\"\r\n (onLazyLoad)=\"onLazyLoad.emit($event)\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ul *ngIf=\"items\" class=\"cax-tree-container\" [ngClass]=\"scrollerOptions.contentStyleClass\" [style]=\"scrollerOptions.contentStyle\" role=\"tree\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\">\r\n <cax-treeNode\r\n #treeNode\r\n *ngFor=\"let rowNode of items; let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy\"\r\n [level]=\"rowNode.level\"\r\n [rowNode]=\"rowNode\"\r\n [node]=\"rowNode.node\"\r\n [parentNode]=\"rowNode.parent\"\r\n [firstChild]=\"firstChild\"\r\n [lastChild]=\"lastChild\"\r\n [index]=\"getIndex(scrollerOptions, index)\"\r\n [itemSize]=\"scrollerOptions.itemSize\"\r\n [indentation]=\"indentation\"\r\n [loadingMode]=\"loadingMode\"\r\n ></cax-treeNode>\r\n </ul>\r\n </ng-template>\r\n <ng-container *ngIf=\"loaderTemplate\">\r\n <ng-template caxTemplate=\"loader\" let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"loaderTemplate; context: { options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <div #wrapper class=\"cax-tree-wrapper\" [ngStyle]=\"{ 'max-height': scrollHeight }\">\r\n <ul class=\"cax-tree-container\" *ngIf=\"getRootNode()\" role=\"tree\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\">\r\n <cax-treeNode\r\n *ngFor=\"let node of getRootNode(); let firstChild = first; let lastChild = last; let index = index; trackBy: trackBy\"\r\n [node]=\"node\"\r\n [firstChild]=\"firstChild\"\r\n [lastChild]=\"lastChild\"\r\n [index]=\"index\"\r\n [level]=\"0\"\r\n [loadingMode]=\"loadingMode\"\r\n ></cax-treeNode>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"cax-tree-empty-message\" *ngIf=\"!loading && (getRootNode() == null || getRootNode().length === 0)\">\r\n <ng-container *ngIf=\"!emptyMessageTemplate; else emptyFilter\"> {{ emptyMessageLabel }} </ng-container>\r\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n</div>\r\n<div [ngClass]=\"{ 'cax-tree cax-tree-horizontal cax-component': true, 'cax-tree-selectable': selectionMode }\" [ngStyle]=\"style\" [class]=\"styleClass\" *ngIf=\"horizontal\">\r\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\r\n <div class=\"cax-tree-loading-mask cax-component-overlay\" *ngIf=\"loading\">\r\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-tree-loading-icon pi-spin ' + loadingIcon\"></i>\r\n <ng-container *ngIf=\"!loadingIcon\">\r\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-tree-loading-icon'\" />\r\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-tree-loading-icon\">\r\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <table *ngIf=\"value && value[0]\">\r\n <cax-treeNode [node]=\"value[0]\" [root]=\"true\"></cax-treeNode>\r\n </table>\r\n <div class=\"cax-tree-empty-message\" *ngIf=\"!loading && (getRootNode() == null || getRootNode().length === 0)\">\r\n <ng-container *ngIf=\"!emptyMessageTemplate; else emptyFilter\"> {{ emptyMessageLabel }} </ng-container>\r\n <ng-container #emptyFilter *ngTemplateOutlet=\"emptyMessageTemplate\"></ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n</div>\r\n", styles: ["@layer cax{.cax-tree-container{margin:0;padding:0;list-style-type:none;overflow:auto}.cax-treenode-children{margin:0;padding:0;list-style-type:none}.cax-tree-wrapper{overflow:auto}.cax-treenode-selectable{cursor:pointer;-webkit-user-select:none;user-select:none}.cax-tree-toggler{cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative;flex-shrink:0}.cax-treenode-leaf>.cax-treenode-content .cax-tree-toggler{visibility:hidden}.cax-treenode-content{display:flex;align-items:center}.cax-tree-filter{width:100%}.cax-tree-filter-container{position:relative;display:block;width:100%}.cax-tree-filter-icon{position:absolute;top:50%;margin-top:-.5rem}.cax-tree-loading{position:relative;min-height:4rem}.cax-tree .cax-tree-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:2}.cax-tree-flex-scrollable{display:flex;flex:1;height:100%;flex-direction:column}.cax-tree-flex-scrollable .cax-tree-wrapper{flex:1}.cax-tree .cax-treenode-droppoint{height:4px;list-style-type:none}.cax-tree .cax-treenode-droppoint-active{border:0 none}.cax-tree-horizontal{width:auto;padding-left:0;padding-right:0;overflow:auto}.cax-tree.cax-tree-horizontal table,.cax-tree.cax-tree-horizontal tr,.cax-tree.cax-tree-horizontal td{border-collapse:collapse;margin:0;padding:0;vertical-align:middle}.cax-tree-horizontal .cax-treenode-content{font-weight:400;padding:.4em 1em .4em .2em;display:flex;align-items:center}.cax-tree-horizontal .cax-treenode-parent .cax-treenode-content{font-weight:400;white-space:nowrap}.cax-tree.cax-tree-horizontal .cax-treenode{background:url(data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=) repeat-x scroll center center transparent;padding:.25rem 2.5rem}.cax-tree.cax-tree-horizontal .cax-treenode.cax-treenode-leaf,.cax-tree.cax-tree-horizontal .cax-treenode.cax-treenode-collapsed{padding-right:0}.cax-tree.cax-tree-horizontal .cax-treenode-children{padding:0;margin:0}.cax-tree.cax-tree-horizontal .cax-treenode-connector{width:1px}.cax-tree.cax-tree-horizontal .cax-treenode-connector-table{height:100%;width:1px}.cax-tree.cax-tree-horizontal .cax-treenode-connector-line{background:url(data:image/gif;base64,R0lGODlhAQABAIAAALGxsf///yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzQgNDYuMjcyOTc2LCBTYXQgSmFuIDI3IDIwMDcgMjI6Mzc6MzcgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhhcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx4YXA6Q3JlYXRvclRvb2w+QWRvYmUgRmlyZXdvcmtzIENTMzwveGFwOkNyZWF0b3JUb29sPgogICAgICAgICA8eGFwOkNyZWF0ZURhdGU+MjAxMC0wMy0xMVQxMDoxNjo0MVo8L3hhcDpDcmVhdGVEYXRlPgogICAgICAgICA8eGFwOk1vZGlmeURhdGU+MjAxMC0wMy0xMVQxMjo0NDoxOVo8L3hhcDpNb2RpZnlEYXRlPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9naWY8L2RjOmZvcm1hdD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PAA6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQABwD/ACwAAAAAAQABAAACAkQBADs=) repeat-y scroll 0 0 transparent;width:1px}.cax-tree.cax-tree-horizontal table{height:0}.cax-scroller .cax-tree-container{overflow:visible}}\n"] }]
1372
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i9.TreeDragDropService, decorators: [{
1373
+ type: Optional
1374
+ }] }, { type: i9.caxConfig }, { type: i0.ChangeDetectorRef }], propDecorators: { value: [{
1375
+ type: Input
1376
+ }], selectionMode: [{
1377
+ type: Input
1378
+ }], loadingMode: [{
1379
+ type: Input
1380
+ }], selection: [{
1381
+ type: Input
1382
+ }], style: [{
1383
+ type: Input
1384
+ }], styleClass: [{
1385
+ type: Input
1386
+ }], contextMenu: [{
1387
+ type: Input
1388
+ }], layout: [{
1389
+ type: Input
1390
+ }], draggableScope: [{
1391
+ type: Input
1392
+ }], droppableScope: [{
1393
+ type: Input
1394
+ }], draggableNodes: [{
1395
+ type: Input,
1396
+ args: [{ transform: booleanAttribute }]
1397
+ }], droppableNodes: [{
1398
+ type: Input,
1399
+ args: [{ transform: booleanAttribute }]
1400
+ }], metaKeySelection: [{
1401
+ type: Input,
1402
+ args: [{ transform: booleanAttribute }]
1403
+ }], propagateSelectionUp: [{
1404
+ type: Input,
1405
+ args: [{ transform: booleanAttribute }]
1406
+ }], propagateSelectionDown: [{
1407
+ type: Input,
1408
+ args: [{ transform: booleanAttribute }]
1409
+ }], loading: [{
1410
+ type: Input,
1411
+ args: [{ transform: booleanAttribute }]
1412
+ }], loadingIcon: [{
1413
+ type: Input
1414
+ }], emptyMessage: [{
1415
+ type: Input
1416
+ }], ariaLabel: [{
1417
+ type: Input
1418
+ }], togglerAriaLabel: [{
1419
+ type: Input
1420
+ }], ariaLabelledBy: [{
1421
+ type: Input
1422
+ }], validateDrop: [{
1423
+ type: Input,
1424
+ args: [{ transform: booleanAttribute }]
1425
+ }], filter: [{
1426
+ type: Input,
1427
+ args: [{ transform: booleanAttribute }]
1428
+ }], filterBy: [{
1429
+ type: Input
1430
+ }], filterMode: [{
1431
+ type: Input
1432
+ }], filterPlaceholder: [{
1433
+ type: Input
1434
+ }], filteredNodes: [{
1435
+ type: Input
1436
+ }], filterLocale: [{
1437
+ type: Input
1438
+ }], scrollHeight: [{
1439
+ type: Input
1440
+ }], lazy: [{
1441
+ type: Input,
1442
+ args: [{ transform: booleanAttribute }]
1443
+ }], virtualScroll: [{
1444
+ type: Input,
1445
+ args: [{ transform: booleanAttribute }]
1446
+ }], virtualScrollItemSize: [{
1447
+ type: Input,
1448
+ args: [{ transform: numberAttribute }]
1449
+ }], virtualScrollOptions: [{
1450
+ type: Input
1451
+ }], indentation: [{
1452
+ type: Input,
1453
+ args: [{ transform: numberAttribute }]
1454
+ }], _templateMap: [{
1455
+ type: Input
1456
+ }], trackBy: [{
1457
+ type: Input
1458
+ }], virtualNodeHeight: [{
1459
+ type: Input
1460
+ }], selectionChange: [{
1461
+ type: Output
1462
+ }], onNodeSelect: [{
1463
+ type: Output
1464
+ }], onNodeUnselect: [{
1465
+ type: Output
1466
+ }], onNodeExpand: [{
1467
+ type: Output
1468
+ }], onNodeCollapse: [{
1469
+ type: Output
1470
+ }], onNodeContextMenuSelect: [{
1471
+ type: Output
1472
+ }], onNodeDrop: [{
1473
+ type: Output
1474
+ }], onLazyLoad: [{
1475
+ type: Output
1476
+ }], onScroll: [{
1477
+ type: Output
1478
+ }], onScrollIndexChange: [{
1479
+ type: Output
1480
+ }], onFilter: [{
1481
+ type: Output
1482
+ }], templates: [{
1483
+ type: ContentChildren,
1484
+ args: [CaxTemplate]
1485
+ }], filterViewChild: [{
1486
+ type: ViewChild,
1487
+ args: ['filter']
1488
+ }], scroller: [{
1489
+ type: ViewChild,
1490
+ args: ['scroller']
1491
+ }], wrapperViewChild: [{
1492
+ type: ViewChild,
1493
+ args: ['wrapper']
1494
+ }] } });
1495
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy90cmVlL3RyZWUudHMiLCIuLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvdHJlZS90cmVlbm9kZS5odG1sIiwiLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL3RyZWUvdHJlZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFJZixRQUFRLEVBQ1IsTUFBTSxFQUlOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEwQixXQUFXLEVBQW1CLGVBQWUsRUFBaUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM3SSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7O0FBd0J0RCxNQUFNLE9BQU8sVUFBVTtJQUNuQixNQUFNLENBQUMsVUFBVSxHQUFXLG9CQUFvQixDQUFDO0lBRXhDLE9BQU8sQ0FBTTtJQUViLElBQUksQ0FBNEI7SUFFaEMsVUFBVSxDQUE0QjtJQUVQLElBQUksQ0FBc0I7SUFFM0IsS0FBSyxDQUFxQjtJQUV6QixVQUFVLENBQXNCO0lBRWhDLFNBQVMsQ0FBc0I7SUFFaEMsS0FBSyxDQUFxQjtJQUUxQixXQUFXLENBQXFCO0lBRWhDLFFBQVEsQ0FBcUI7SUFFM0QsV0FBVyxDQUFTO0lBRTdCLElBQUksQ0FBTztJQUVYLE9BQU8sQ0FBTTtJQUViLGFBQWEsQ0FBc0I7SUFFbkMsYUFBYSxDQUFzQjtJQUVuQyxhQUFhLENBQXNCO0lBRW5DLElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDMUgsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNsRixDQUFDO0lBRUQsWUFBNEMsSUFBVTtRQUNsRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsUUFBUTtRQUNPLElBQUksQ0FBQyxJQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQ2pELE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFM0QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQVcsSUFBSSxDQUFDLElBQUksRUFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFTLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFtQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkwsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxJQUF3QixDQUFDO1FBRTdCLElBQWUsSUFBSSxDQUFDLElBQUssQ0FBQyxJQUFJO1lBQUUsSUFBSSxHQUFjLElBQUksQ0FBQyxJQUFLLENBQUMsSUFBYyxDQUFDOztZQUN2RSxJQUFJLEdBQWMsSUFBSSxDQUFDLElBQUssQ0FBQyxRQUFRLElBQWUsSUFBSSxDQUFDLElBQUssQ0FBQyxRQUFRLElBQWUsSUFBSSxDQUFDLElBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBWSxJQUFJLENBQUMsSUFBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQVksSUFBSSxDQUFDLElBQUssQ0FBQyxhQUFhLENBQUM7UUFFbE0sT0FBTyxVQUFVLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDOUMsQ0FBQztJQUVELE1BQU07UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQVk7UUFDZixJQUFlLElBQUksQ0FBQyxJQUFLLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7O1lBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBWTtRQUNKLElBQUksQ0FBQyxJQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBWSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVk7UUFDTixJQUFJLENBQUMsSUFBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQVksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFpQjtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBb0I7UUFDOUIsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBaUI7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxVQUFVO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFLO1FBQ1osT0FBTyxLQUFLLENBQUMsYUFBYSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlKLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBZ0IsRUFBRSxRQUFnQjtRQUMxQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDbEMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDNUMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDNUMsSUFBSSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLGFBQWEsS0FBYSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRXJJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQVcsUUFBUSxFQUFZLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUN2RyxJQUFJLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFTLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFFNUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ3RCLGFBQWEsRUFBRSxLQUFLO29CQUNwQixRQUFRLEVBQUUsUUFBUTtvQkFDbEIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7b0JBQ2pCLE1BQU0sRUFBRSxHQUFHLEVBQUU7d0JBQ1QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUN0QyxDQUFDO2lCQUNKLENBQUMsQ0FBQztZQUNQLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDdEIsYUFBYSxFQUFFLEtBQUs7b0JBQ3BCLFFBQVEsRUFBRSxRQUFRO29CQUNsQixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztpQkFDcEIsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBVTtRQUN2QixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMzRixLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUUzQixJQUFJLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsU0FBUyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3ZJLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDSixTQUFTLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztZQUMvQixXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO1lBQy9CLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUTtZQUNwQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQ2xGLEtBQUssRUFBRSxLQUFLLENBQUMsYUFBYTtTQUM3QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsNEJBQTRCLENBQUMsUUFBZ0I7UUFDekMsT0FBTztZQUNILFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDNUIsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUN0QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUM1QyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFFBQVEsRUFBRSxRQUFRO1NBQ3JCLENBQUM7SUFDTixDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBVTtRQUMxQixLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDdkMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFZLEVBQUUsUUFBZ0I7UUFDL0MsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBWSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLFFBQVEsR0FBRyxDQUFDO2dCQUFFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDOztnQkFDdkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDbkMsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFZO1FBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVTtRQUNsQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFlLElBQUksQ0FBQyxJQUFLLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3hFLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUUzQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2hDLElBQUksRUFBRSxJQUFJO2dCQUNWLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO2dCQUN6RSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7YUFDbEMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7WUFDL0IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUN6RSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQVU7UUFDekIsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDakIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM3RCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUVsQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFXLFFBQVEsRUFBWSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDeEYsSUFBSSxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBRSxFQUFFLENBQUM7Z0JBRTNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO3dCQUN0QixhQUFhLEVBQUUsS0FBSzt3QkFDcEIsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTt3QkFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO3dCQUNqQixNQUFNLEVBQUUsR0FBRyxFQUFFOzRCQUNULElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ3JDLENBQUM7cUJBQ0osQ0FBQyxDQUFDO2dCQUNQLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7d0JBQ3RCLGFBQWEsRUFBRSxLQUFLO3dCQUNwQixRQUFRLEVBQUUsUUFBUTt3QkFDbEIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO3dCQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7cUJBQ3BCLENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFFRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRCwyQkFBMkI7UUFDdkIsT0FBTztZQUNILFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDNUIsYUFBYSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUN0QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUM1QyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDdEIsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBVTtRQUN0QixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWhELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRO1lBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzs7WUFDckUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO1lBQy9CLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUTtZQUNwQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQ2xGLEtBQUssRUFBRSxhQUFhO1NBQ3ZCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFVO1FBQzFCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFZLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ2hLLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBVTtRQUMxQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0IsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3ZELElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDakksSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDL0IsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQW9CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMxSSxPQUFPO1FBQ1gsQ0FBQztRQUVELFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLFlBQVk7WUFDWixLQUFLLFdBQVc7Z0JBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsTUFBTTtZQUVWLFVBQVU7WUFDVixLQUFLLFNBQVM7Z0JBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEIsTUFBTTtZQUVWLGFBQWE7WUFDYixLQUFLLFlBQVk7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekIsTUFBTTtZQUVWLFlBQVk7WUFDWixLQUFLLFdBQVc7Z0JBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsTUFBTTtZQUVWLE9BQU87WUFDUCxLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssYUFBYTtnQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQixNQUFNO1lBRVYsT0FBTztZQUNQLEtBQUssT0FBTztnQkFDUixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLFdBQVcsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDOUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hCLENBQUM7Z0JBQ0QsTUFBTTtZQUVWLEtBQUs7WUFDTCxLQUFLLEtBQUs7Z0JBQ04sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQzdCLE1BQU07WUFFVjtnQkFDSSxPQUFPO2dCQUNQLE1BQU07UUFDZCxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFvQjtRQUMxQixNQUFNLFdBQVcsR0FBb0IsS0FBSyxDQUFDLE1BQU8sQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFrQixLQUFLLENBQUMsTUFBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBa0IsS0FBSyxDQUFDLE1BQU8sQ0FBQyxhQUFhLENBQUM7UUFFOU0sSUFBSSxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7UUFDN0ksQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUUvRCxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDeEQsQ0FBQztRQUNMLENBQUM7UUFFRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFvQjtRQUM1QixNQUFNLFdBQVcsR0FBb0IsS0FBSyxDQUFDLE1BQU8sQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFrQixLQUFLLENBQUMsTUFBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBaUIsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM5TCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVDLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDbkYsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFcEYsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO29CQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFvQjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNyRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ0YsS0FBSyxDQUFDLGFBQWMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFcEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNWLENBQUM7UUFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFvQjtRQUM1QixNQUFNLFdBQVcsR0FBb0IsS0FBSyxDQUFDLE1BQU8sQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFrQixLQUFLLENBQUMsTUFBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBaUIsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUU5TCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUMzQyxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFN0UsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQUs7UUFDckIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUU1QixNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksV0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQztRQUU5RyxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQW9CO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFM0UsTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQztRQUVqSixDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQztZQUVqSixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUU5QixPQUFPO1FBQ1gsQ0FBQztRQUVELENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsV0FBVztRQUMxQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ25DLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBRW5GLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFOUQsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdkQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQseUJBQXlCLENBQUMsV0FBZ0I7UUFDdEMsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFL0QsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLElBQUksaUJBQWlCLENBQUMsa0JBQWtCO2dCQUFFLE9BQU8saUJBQWlCLENBQUMsa0JBQWtCLENBQUM7O2dCQUNqRixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxXQUFnQjtRQUN0QyxNQUFNLFdBQVcsR0FBZ0IsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ3hILE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRCxJQUFJLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUUvRixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVELENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxXQUFXLENBQUM7UUFDdkIsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxXQUFrQztRQUNuRCxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQztRQUVsRixPQUFPLGlCQUFpQixFQUFFLE9BQU8sS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEYsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFZO1FBQ2xCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjO1lBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7O1lBQ3JFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRCxjQUFjLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUscUJBQXNCO1FBQ3ZFLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDbEMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFFN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGFBQXVCLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFjLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUN4SCxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNWLENBQUM7dUdBNWdCUSxVQUFVLGtCQTJDQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDOzJGQTNDakMsVUFBVSx5SEFTQyxnQkFBZ0IsNkJBRWhCLGVBQWUsNENBRWYsZ0JBQWdCLHlDQUVoQixnQkFBZ0IsNkJBRWhCLGVBQWUsK0NBRWYsZUFBZSxzQ0FFZixlQUFlLGtHQ3hFdkMsc3hUQStLQSx5cUNENUhhLFVBQVU7OzJGQUFWLFVBQVU7a0JBUnRCLFNBQVM7K0JBQ0ksY0FBYyxpQkFFVCxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNGLEtBQUssRUFBRSxhQUFhO3FCQUN2Qjs7MEJBNkNZLE1BQU07MkJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzt5Q0F4Q2pDLE9BQU87c0JBQWYsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFa0MsSUFBSTtzQkFBM0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFFQyxLQUFLO3NCQUEzQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFFRyxVQUFVO3NCQUFqRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUVFLFNBQVM7c0JBQWhELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRUMsS0FBSztzQkFBM0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBRUUsV0FBVztzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBRUUsUUFBUTtzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBRTVCLFdBQVc7c0JBQW5CLEtBQUs7O0FBd2ZWOzs7R0FHRztBQVdILE1BQU0sT0FBTyxJQUFJO0lBa1RGO0lBQ1k7SUFDWjtJQUNDO0lBcFRaOzs7T0FHRztJQUNNLEtBQUssQ0FBZ0Q7SUFDOUQ7OztPQUdHO0lBQ00sYUFBYSxDQUF3RDtJQUM5RTs7O09BR0c7SUFDTSxXQUFXLEdBQW9CLE1BQU0sQ0FBQztJQUMvQzs7O09BR0c7SUFDTSxTQUFTLENBQU07SUFDeEI7OztPQUdHO0lBQ00sS0FBSyxDQUE4QztJQUM1RDs7O09BR0c7SUFDTSxVQUFVLENBQXFCO0lBQ3hDOzs7T0FHRztJQUNNLFdBQVcsQ0FBTTtJQUMxQjs7O09BR0c7SUFDTSxNQUFNLEdBQVcsVUFBVSxDQUFDO0lBQ3JDOzs7T0FHRztJQUNNLGNBQWMsQ0FBTTtJQUM3Qjs7O09BR0c7SUFDTSxjQUFjLENBQU07SUFDN0I7OztPQUdHO0lBQ3FDLGNBQWMsQ0FBc0I7SUFDNUU7OztPQUdHO0lBQ3FDLGNBQWMsQ0FBc0I7SUFDNUU7OztPQUdHO0lBQ3FDLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUMxRTs7O09BR0c7SUFDcUMsb0JBQW9CLEdBQVksSUFBSSxDQUFDO0lBQzdFOzs7T0FHRztJQUNxQyxzQkFBc0IsR0FBWSxJQUFJLENBQUM7SUFDL0U7OztPQUdHO0lBQ3FDLE9BQU8sQ0FBc0I7SUFDckU7OztPQUdHO0lBQ00sV0FBVyxDQUFxQjtJQUN6Qzs7O09BR0c7SUFDTSxZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQ25DOzs7T0FHRztJQUNNLFNBQVMsQ0FBcUI7SUFDdkM7OztPQUdHO0lBQ00sZ0JBQWdCLENBQXFCO0lBQzlDOzs7T0FHRztJQUNNLGNBQWMsQ0FBcUI7SUFDNUM7OztPQUdHO0lBQ3FDLFlBQVksQ0FBc0I7SUFDMUU7OztPQUdHO0lBQ3FDLE1BQU0sQ0FBc0I7SUFDcEU7OztPQUdHO0lBQ00sUUFBUSxHQUFXLE9BQU8sQ0FBQztJQUNwQzs7O09BR0c7SUFDTSxVQUFVLEdBQVcsU0FBUyxDQUFDO0lBQ3hDOzs7T0FHRztJQUNNLGlCQUFpQixDQUFxQjtJQUMvQzs7O09BR0c7SUFDTSxhQUFhLENBQXFDO0lBQzNEOzs7T0FHRztJQUNNLFlBQVksQ0FBcUI7SUFDMUM7OztPQUdHO0lBQ00sWUFBWSxDQUFxQjtJQUMxQzs7O09BR0c7SUFDcUMsSUFBSSxHQUFZLEtBQUssQ0FBQztJQUM5RDs7O09BR0c7SUFDcUMsYUFBYSxDQUFzQjtJQUMzRTs7O09BR0c7SUFDb0MscUJBQXFCLENBQXFCO0lBQ2pGOzs7T0FHRztJQUNNLG9CQUFvQixDQUE4QjtJQUMzRDs7O09BR0c7SUFDb0MsV0FBVyxHQUFXLEdBQUcsQ0FBQztJQUNqRTs7O09BR0c7SUFDTSxZQUFZLENBQU07SUFDM0I7OztPQUdHO0lBQ00sT0FBTyxHQUFhLENBQUMsS0FBYSxFQUFFLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ2hFOzs7O09BSUc7SUFDSCxrQkFBa0IsQ0FBcUI7SUFDdkMsSUFBYSxpQkFBaUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksaUJBQWlCLENBQUMsR0FBdUI7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztRQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLDJGQUEyRixDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUNEOzs7O09BSUc7SUFDTyxlQUFlLEdBQXlELElBQUksWUFBWSxFQUEwQyxDQUFDO0lBQzdJOzs7O09BSUc7SUFDTyxZQUFZLEdBQXNDLElBQUksWUFBWSxFQUF1QixDQUFDO0lBQ3BHOzs7O09BSUc7SUFDTyxjQUFjLEdBQXdDLElBQUksWUFBWSxFQUF5QixDQUFDO0lBQzFHOzs7O09BSUc7SUFDTyxZQUFZLEdBQXNDLElBQUksWUFBWSxFQUF1QixDQUFDO0lBQ3BHOzs7O09BSUc7SUFDTyxjQUFjLEdBQXdDLElBQUksWUFBWSxFQUF5QixDQUFDO0lBQzFHOzs7O09BSUc7SUFDTyx1QkFBdUIsR0FBaUQsSUFBSSxZQUFZLEVBQWtDLENBQUM7SUFDckk7Ozs7T0FJRztJQUNPLFVBQVUsR0FBb0MsSUFBSSxZQUFZLEVBQXFCLENBQUM7SUFDOUY7Ozs7T0FJRztJQUNPLFVBQVUsR0FBb0MsSUFBSSxZQUFZLEVBQXFCLENBQUM7SUFDOUY7Ozs7T0FJRztJQUNPLFFBQVEsR0FBa0MsSUFBSSxZQUFZLEVBQW1CLENBQUM7SUFDeEY7Ozs7T0FJRztJQUNPLG1CQUFtQixHQUE2QyxJQUFJLFlBQVksRUFBOEIsQ0FBQztJQUN6SDs7OztPQUlHO0lBQ08sUUFBUSxHQUFrQyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUUxRCxTQUFTLENBQTJCO0lBRTdDLGVBQWUsQ0FBdUI7SUFFcEMsUUFBUSxDQUFxQjtJQUU5QixnQkFBZ0IsQ0FBdUI7SUFFN0QsZUFBZSxDQUE0QjtJQUUzQyxjQUFjLENBQTZCO0lBRTNDLGNBQWMsQ0FBNkI7SUFFM0MsY0FBYyxDQUE2QjtJQUUzQyxvQkFBb0IsQ0FBNkI7SUFFakQsbUJBQW1CLENBQTZCO0lBRWhELG9CQUFvQixDQUE2QjtJQUVqRCxtQkFBbUIsQ0FBNkI7SUFFaEQsa0JBQWtCLENBQTZCO0lBRXhDLFdBQVcsQ0FBNkI7SUFFeEMsWUFBWSxDQUEwQjtJQUV0QyxRQUFRLENBQW1DO0lBRTNDLGdCQUFnQixDQUFxQztJQUVyRCxhQUFhLENBQTRCO0lBRXpDLGFBQWEsQ0FBTTtJQUVuQixTQUFTLENBQTZCO0lBRXRDLHFCQUFxQixDQUFrQztJQUV2RCxvQkFBb0IsQ0FBa0M7SUFFN0QsWUFDVyxFQUFjLEVBQ0YsZUFBb0MsRUFDaEQsTUFBaUIsRUFDaEIsRUFBcUI7UUFIdEIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNGLG9CQUFlLEdBQWYsZUFBZSxDQUFxQjtRQUNoRCxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2hCLE9BQUUsR0FBRixFQUFFLENBQW1CO0lBQzlCLENBQUM7SUFFSixRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUM3RSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMzRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxZQUEyQjtRQUNuQyxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUssSUFBSSxDQUFDLFNBQW9DLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUVBLElBQUksQ0FBQyxTQUFvQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hELFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssUUFBUTtvQkFDVCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQ3BDLE1BQU07Z0JBRVYsS0FBSyxPQUFPO29CQUNSLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUMxQyxNQUFNO2dCQUVWLEtBQUssUUFBUTtvQkFDVCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQ3BDLE1BQU07Z0JBRVYsS0FBSyxRQUFRO29CQUNULElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDcEMsTUFBTTtnQkFFVixLQUFLLGFBQWE7b0JBQ2QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQ3pDLE1BQU07Z0JBRVYsS0FBSyxjQUFjO29CQUNmLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUMxQyxNQUFNO2dCQUVWLEtBQUssYUFBYTtvQkFDZCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDekMsTUFBTTtnQkFFVixLQUFLLFlBQVk7b0JBQ2IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQ3hDLE1BQU07Z0JBRVY7b0JBQ0ksSUFBSSxDQUFDLFlBQVksQ0FBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDbEQsTUFBTTtZQUNkLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQTRCLEVBQUUsS0FBNEIsRUFBRSxLQUFhLEVBQUUsT0FBZ0I7UUFDdEcsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2dCQUNyQixNQUFNLE9BQU8sR0FBRztvQkFDWixJQUFJLEVBQUUsSUFBSTtvQkFDVixNQUFNLEVBQUUsTUFBTTtvQkFDZCxLQUFLLEVBQUUsS0FBSztvQkFDWixPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQ3hELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGVBQW1DLENBQUMsSUFBSSxDQUFXLE9BQU8sQ0FBQyxDQUFDO2dCQUVsRSxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN6RSxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVksRUFBRSxJQUFjO1FBQ3BDLElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDeEMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztZQUNwSCxPQUFPO1FBQ1gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRywrQkFBK0IsQ0FBQztnQkFDN0MsT0FBTztZQUNYLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsS0FBSyxHQUFHLDhDQUE4QyxDQUFDO1lBQ2hFLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7Z0JBQzFCLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFTLElBQUksQ0FBQyxHQUFHLEVBQW1CLElBQUksQ0FBQyxhQUFhLENBQWEsQ0FBQztnQkFDOUYsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNSLE9BQU87Z0JBQ1gsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxRQUFRLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUUxQixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ1gsSUFBSSxJQUFJLENBQUMsc0JBQXNCO3dCQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOzt3QkFDNUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQWEsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztvQkFFdEYsSUFBSSxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3pDLENBQUM7b0JBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ25FLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLElBQUksQ0FBQyxzQkFBc0I7d0JBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O3dCQUMzRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBRXhELElBQUksSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN4QyxDQUFDO29CQUVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUVyRSxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNoQixJQUFJLE9BQU8sR0FBbUIsS0FBTSxDQUFDLE9BQU8sSUFBb0IsS0FBTSxDQUFDLE9BQU8sQ0FBQztvQkFFL0UsSUFBSSxRQUFRLElBQUksT0FBTyxFQUFFLENBQUM7d0JBQ3RCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQzs0QkFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3BDLENBQUM7NkJBQU0sQ0FBQzs0QkFDSixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBYSxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDOzRCQUNqRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQzlDLENBQUM7d0JBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUNuRSxDQUFDO3lCQUFNLENBQUM7d0JBQ0osSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDOzRCQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBVyxJQUFJLENBQUMsQ0FBQzt3QkFDOUMsQ0FBQzs2QkFBTSxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUM7NEJBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7NEJBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7NEJBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDOUMsQ0FBQzt3QkFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ2pFLENBQUM7Z0JBQ0wsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQzt3QkFDL0IsSUFBSSxRQUFRLEVBQUUsQ0FBQzs0QkFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzs0QkFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUNuRSxDQUFDOzZCQUFNLENBQUM7NEJBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7NEJBQ3RCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0NBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUNqRSxDQUFDLENBQUMsQ0FBQzt3QkFDUCxDQUFDO29CQUNMLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixJQUFJLFFBQVEsRUFBRSxDQUFDOzRCQUNYLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFhLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7NEJBQ2pGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDbkUsQ0FBQzs2QkFBTSxDQUFDOzRCQUNKLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFDbkQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQ0FDWixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7NEJBQ2pFLENBQUMsQ0FBQyxDQUFDO3dCQUNQLENBQUM7b0JBQ0wsQ0FBQztvQkFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzlDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWlCLEVBQUUsSUFBbUI7UUFDbkQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxXQUFXLEdBQVksS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUN4QyxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWxELElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxPQUFPO1lBQ1gsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxRQUFRLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztnQkFFMUIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNaLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO3dCQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzt3QkFDN0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxDQUFDO2dCQUVELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1RSxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFjO1FBQy9CLElBQUksS0FBSyxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDO2dCQUMvQixJQUFJLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztnQkFDdEcsS0FBSyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQzdDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JDLElBQUksYUFBYSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDO29CQUNoRyxJQUFJLGFBQWEsRUFBRSxDQUFDO3dCQUNoQixLQUFLLEdBQUcsQ0FBQyxDQUFDO3dCQUNWLE1BQU07b0JBQ1YsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsY0FBYyxDQUFDLElBQWMsRUFBRSxXQUE0QixFQUFFLE1BQVcsRUFBRSxLQUFXO1FBQ2pGLCtGQUErRjtRQUMvRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbEcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNGLEtBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLElBQVUsSUFBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDMUUsQ0FBQztJQUVELGVBQWU7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFXLEVBQUUsS0FBc0I7UUFDOUMsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNyQixJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLFdBQVcsRUFBRSxDQUFDO29CQUNkLE9BQU8sV0FBVyxDQUFDO2dCQUN2QixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQWMsRUFBRSxNQUFlO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLElBQUksYUFBYSxHQUFXLENBQUMsQ0FBQztZQUM5QixJQUFJLG9CQUFvQixHQUFZLEtBQUssQ0FBQztZQUMxQyxLQUFLLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLGFBQWEsRUFBRSxDQUFDO2dCQUNwQixDQUFDO3FCQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUMvQixvQkFBb0IsR0FBRyxJQUFJLENBQUM7Z0JBQ2hDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxNQUFNLElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDakMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDVixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzVDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFhLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7b0JBQ3JGLENBQUM7Z0JBQ0wsQ0FBQztnQkFFRCxJQUFJLG9CQUFvQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7b0JBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7O29CQUNqSCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUN0QyxDQUFDO1lBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQW1CLElBQUksQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBRUQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBYyxFQUFFLE1BQWU7UUFDekMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVDLElBQUksTUFBTSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4RixDQUFDO2FBQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBYSxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUU3QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBbUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRWxGLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxJQUFjO1FBQ3JDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXpDLElBQUksVUFBVSxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BELEtBQUssSUFBSSxLQUFLLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQzdCLFVBQVUsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFhLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQztnQkFDdEYsQ0FBQztnQkFDRCxLQUFLLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFjO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxxQkFBcUI7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksUUFBUSxDQUFDO0lBQ2hFLENBQUM7SUFFRCx1QkFBdUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksVUFBVSxDQUFDO0lBQ2xFLENBQUM7SUFFRCx1QkFBdUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksVUFBVSxDQUFDO0lBQ2xFLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBYztRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELFdBQVc7UUFDUCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDaEUsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQWM7UUFDN0IsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7O1lBQ2pHLE9BQU8sSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBZ0I7UUFDdkIsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFVLElBQUksQ0FBQyxLQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkUsS0FBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1lBQzlDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFnQjtRQUNuQixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQVUsSUFBSSxDQUFDLEtBQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQW9CLENBQUM7WUFFekMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELElBQUksYUFBYSxHQUFXLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBRTlCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDakIsYUFBYSxFQUFFLEtBQUs7d0JBQ3BCLFFBQVEsRUFBRSxRQUFRO3dCQUNsQixRQUFRLEVBQUUsSUFBSTt3QkFDZCxLQUFLLEVBQUUsYUFBYTt3QkFDcEIsTUFBTSxFQUFFLEdBQUcsRUFBRTs0QkFDVCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQzt3QkFDbEQsQ0FBQztxQkFDSixDQUFDLENBQUM7Z0JBQ1AsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO3dCQUNqQixhQUFhLEVBQUUsS0FBSzt3QkFDcEIsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLFFBQVEsRUFBRSxJQUFJO3dCQUNkLEtBQUssRUFBRSxhQUFhO3FCQUN2QixDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ2xELENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBa0IsRUFBRSxhQUFxQjtRQUNuQyxJQUFJLENBQUMsZ0JBQWlCLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsS0FBeUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7WUFDMUIsSUFBSSxFQUFFLFFBQVE7U0FDakIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBVyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUMzRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUMxQixDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFnQjtRQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLElBQUksR0FBSSxLQUFLLENBQUMsYUFBNkIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3hFLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNwSCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUMzQixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsUUFBa0IsRUFBRSxRQUE4QixFQUFFLGFBQWtCO1FBQzVFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNaLDRDQUE0QztZQUM1QyxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxJQUFJLEtBQUssR0FBWSxJQUFJLENBQUM7WUFDMUIsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDWCxJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDeEIsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7b0JBQzdCLE9BQU8sTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO3dCQUNwQixJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQzs0QkFDdEIsS0FBSyxHQUFHLEtBQUssQ0FBQzs0QkFDZCxNQUFNO3dCQUNWLENBQUM7d0JBQ0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0JBQzNCLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBYztRQUMzQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRXBDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDWixJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVE7b0JBQUUsT0FBTyxTQUFTLEtBQUssU0FBUyxDQUFDO3FCQUM3RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO29CQUFFLE9BQW9CLFNBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0YsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsT0FBb0IsU0FBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDNUQsQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDbEMsS0FBSyxJQUFJLENBQUMsSUFBSSxTQUFTLEVBQUUsQ0FBQzt3QkFDdEIsS0FBSyxJQUFJLEVBQUUsSUFBSSxTQUFTLEVBQUUsQ0FBQzs0QkFDdkIsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7Z0NBQ1gsT0FBTyxJQUFJLENBQUM7NEJBQ2hCLENBQUM7d0JBQ0wsQ0FBQztvQkFDTCxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0wsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFhO1FBQ3hCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sWUFBWSxHQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQy9GLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDO1lBQ2xELEtBQUssSUFBSSxJQUFJLElBQXFCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO2dCQUMzQixJQUFJLGlCQUFpQixHQUFHLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsQ0FBQztnQkFDbkUsSUFDSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7b0JBQzVILENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQy9ILENBQUM7b0JBQ0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2YsTUFBTSxFQUFFLFdBQVc7WUFDbkIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ3BDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXO1FBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFFMUIsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDN0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNsRCxDQUFDO0lBQ0wsQ0FBQztJQUNEOzs7O09BSUc7SUFDSSxvQkFBb0IsQ0FBQyxLQUFhO1FBQ3JDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUNEOzs7O09BSUc7SUFDSSxRQUFRLENBQUMsT0FBWTtRQUN4QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RFLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQzlELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDaEUsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBYyxFQUFFLGlCQUFzQjtRQUNwRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixJQUFJLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsS0FBSyxJQUFJLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxhQUFhLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDO29CQUNyQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLEVBQUUsQ0FBQzt3QkFDekQsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDdEMsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztZQUVELElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFjLEVBQUUsTUFBVztRQUN2QyxJQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDeEQsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLEtBQUssSUFBSSxLQUFLLElBQUksWUFBWSxFQUFFLENBQUM7WUFDN0IsSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ25JLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ25CLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQztRQUNsRyxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUFZLEVBQUUsS0FBYTtRQUNoQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRCxPQUFPLGNBQWMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxtQkFBbUI7UUFDZixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QyxDQUFDO0lBQ0wsQ0FBQzt1R0F4NkJRLElBQUk7MkZBQUosSUFBSSx1VkF1RE8sZ0JBQWdCLHdEQUtoQixnQkFBZ0IsOERBS2hCLGdCQUFnQiwwRUFLaEIsZ0JBQWdCLGdGQUtoQixnQkFBZ0IsbUNBS2hCLGdCQUFnQiw0TUE4QmhCLGdCQUFnQixnQ0FLaEIsZ0JBQWdCLDhNQW1DaEIsZ0JBQWdCLHFEQUtoQixnQkFBZ0IsNkVBS2hCLGVBQWUsNkZBVWYsZUFBZSwyaUJBMkZsQixXQUFXLGtWRXIxQmhDLHd3TkE4R0EsdXdyQ0YzRGEsVUFBVTs7MkZBNmhCVixJQUFJO2tCQVZoQixTQUFTOytCQUNJLFVBQVUsbUJBRUgsdUJBQXVCLENBQUMsT0FBTyxpQkFDakMsaUJBQWlCLENBQUMsSUFBSSxRQUUvQjt3QkFDRixLQUFLLEVBQUUsYUFBYTtxQkFDdkI7OzBCQXFUSSxRQUFRO2lHQTlTSixLQUFLO3NCQUFiLEtBQUs7Z0JBS0csYUFBYTtzQkFBckIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csY0FBYztzQkFBdEIsS0FBSztnQkFLRyxjQUFjO3NCQUF0QixLQUFLO2dCQUtrQyxjQUFjO3NCQUFyRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUtFLGNBQWM7c0JBQXJELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBS0UsZ0JBQWdCO3NCQUF2RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUtFLG9CQUFvQjtzQkFBM0QsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFLRSxzQkFBc0I7c0JBQTdELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBS0UsT0FBTztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFLN0IsV0FBVztzQkFBbkIsS0FBSztnQkFLRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUtHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBS2tDLFlBQVk7c0JBQW5ELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBS0UsTUFBTTtzQkFBN0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFLN0IsUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFLRyxhQUFhO3NCQUFyQixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLa0MsSUFBSTtzQkFBM0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFLRSxhQUFhO3NCQUFwRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUtDLHFCQUFxQjtzQkFBM0QsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBSzVCLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFLaUMsV0FBVztzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBSzVCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQU9PLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFZSSxlQUFlO3NCQUF4QixNQUFNO2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBTUcsY0FBYztzQkFBdkIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQU1HLGNBQWM7c0JBQXZCLE1BQU07Z0JBTUcsdUJBQXVCO3NCQUFoQyxNQUFNO2dCQU1HLFVBQVU7c0JBQW5CLE1BQU07Z0JBTUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFNRyxRQUFRO3NCQUFqQixNQUFNO2dCQU1HLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFNRyxRQUFRO3NCQUFqQixNQUFNO2dCQUV1QixTQUFTO3NCQUF0QyxlQUFlO3VCQUFDLFdBQVc7Z0JBRVAsZUFBZTtzQkFBbkMsU0FBUzt1QkFBQyxRQUFRO2dCQUVJLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFFQyxnQkFBZ0I7c0JBQXJDLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCbG9ja2FibGVVSSwgY2F4Q29uZmlnLCBDYXhUZW1wbGF0ZSwgU2Nyb2xsZXJPcHRpb25zLCBUcmFuc2xhdGlvbktleXMsIFRyZWVEcmFnRHJvcFNlcnZpY2UsIFRyZWVOb2RlIH0gZnJvbSAnY2F4LWRlc2lnbi1zeXN0ZW0vYXBpJztcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS9kb20nO1xuaW1wb3J0IHsgU2Nyb2xsZXIgfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS9zY3JvbGxlcic7XG5pbXBvcnQgeyBPYmplY3RVdGlscyB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL3V0aWxzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS90cy1oZWxwZXJzJztcbmltcG9ydCB7XG4gICAgVHJlZUZpbHRlckV2ZW50LFxuICAgIFRyZWVMYXp5TG9hZEV2ZW50LFxuICAgIFRyZWVOb2RlQ29sbGFwc2VFdmVudCxcbiAgICBUcmVlTm9kZUNvbnRleHRNZW51U2VsZWN0RXZlbnQsXG4gICAgVHJlZU5vZGVEcm9wRXZlbnQsXG4gICAgVHJlZU5vZGVFeHBhbmRFdmVudCxcbiAgICBUcmVlTm9kZVNlbGVjdEV2ZW50LFxuICAgIFRyZWVOb2RlVW5TZWxlY3RFdmVudCxcbiAgICBUcmVlU2Nyb2xsRXZlbnQsXG4gICAgVHJlZVNjcm9sbEluZGV4Q2hhbmdlRXZlbnRcbn0gZnJvbSAnLi90cmVlLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY2F4LXRyZWVOb2RlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZW5vZGUuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnY2F4LWVsZW1lbnQnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBVSVRyZWVOb2RlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBzdGF0aWMgSUNPTl9DTEFTUzogc3RyaW5nID0gJ2NheC10cmVlbm9kZS1pY29uICc7XG5cbiAgICBASW5wdXQoKSByb3dOb2RlOiBhbnk7XG5cbiAgICBASW5wdXQoKSBub2RlOiBUcmVlTm9kZTxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgcGFyZW50Tm9kZTogVHJlZU5vZGU8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByb290OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBmaXJzdENoaWxkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGxhc3RDaGlsZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGxldmVsOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBpbmRlbnRhdGlvbjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgaXRlbVNpemU6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIGxvYWRpbmdNb2RlOiBzdHJpbmc7XG5cbiAgICB0cmVlOiBUcmVlO1xuXG4gICAgdGltZW91dDogYW55O1xuXG4gICAgZHJhZ2hvdmVyUHJldjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIGRyYWdob3Zlck5leHQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBkcmFnaG92ZXJOb2RlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgZ2V0IGFyaWFTZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZS5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJyB8fCB0aGlzLnRyZWUuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJyA/IHRoaXMuaXNTZWxlY3RlZCgpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGdldCBhcmlhQ2hlY2tlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZS5zZWxlY3Rpb25Nb2RlID09PSAnY2hlY2tib3gnID8gdGhpcy5pc1NlbGVjdGVkKCkgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChmb3J3YXJkUmVmKCgpID0+IFRyZWUpKSB0cmVlOiBUcmVlKSB7XG4gICAgICAgIHRoaXMudHJlZSA9IHRyZWUgYXMgVHJlZTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgKDxUcmVlTm9kZT50aGlzLm5vZGUpLnBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICAgICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMudHJlZS5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBwRGlhbG9nV3JhcHBlciA9IG5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgnY2F4LWRpYWxvZycpO1xuXG4gICAgICAgIGlmICh0aGlzLnBhcmVudE5vZGUgJiYgIXBEaWFsb2dXcmFwcGVyKSB7XG4gICAgICAgICAgICB0aGlzLnNldEFsbE5vZGVzVGFiSW5kZXhlcygpO1xuICAgICAgICAgICAgdGhpcy50cmVlLnN5bmNOb2RlT3B0aW9uKDxUcmVlTm9kZT50aGlzLm5vZGUsIDxUcmVlTm9kZTxhbnk+W10+dGhpcy50cmVlLnZhbHVlLCAncGFyZW50JywgdGhpcy50cmVlLmdldE5vZGVXaXRoS2V5KDxzdHJpbmc+dGhpcy5wYXJlbnROb2RlLmtleSwgPFRyZWVOb2RlPGFueT5bXT50aGlzLnRyZWUudmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEljb24oKSB7XG4gICAgICAgIGxldCBpY29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKCg8VHJlZU5vZGU+dGhpcy5ub2RlKS5pY29uKSBpY29uID0gKDxUcmVlTm9kZT50aGlzLm5vZGUpLmljb24gYXMgc3RyaW5nO1xuICAgICAgICBlbHNlIGljb24gPSAoPFRyZWVOb2RlPnRoaXMubm9kZSkuZXhwYW5kZWQgJiYgKDxUcmVlTm9kZT50aGlzLm5vZGUpLmNoaWxkcmVuICYmICg8VHJlZU5vZGU+dGhpcy5ub2RlKS5jaGlsZHJlbj8ubGVuZ3RoID8gKDxUcmVlTm9kZT50aGlzLm5vZGUpLmV4cGFuZGVkSWNvbiA6ICg8VHJlZU5vZGU+dGhpcy5ub2RlKS5jb2xsYXBzZWRJY29uO1xuXG4gICAgICAgIHJldHVybiBVSVRyZWVOb2RlLklDT05fQ0xBU1MgKyAnICcgKyBpY29uO1xuICAgIH1cblxuICAgIGlzTGVhZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZS5pc05vZGVMZWFmKDxUcmVlTm9kZT50aGlzLm5vZGUpO1xuICAgIH1cblxuICAgIHRvZ2dsZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKCg8VHJlZU5vZGU+dGhpcy5ub2RlKS5leHBhbmRlZCkgdGhpcy5jb2xsYXBzZShldmVudCk7XG4gICAgICAgIGVsc2UgdGhpcy5leHBhbmQoZXZlbnQpO1xuXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGV4cGFuZChldmVudDogRXZlbnQpIHtcbiAgICAgICAgKDxUcmVlTm9kZT50aGlzLm5vZGUpLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMudHJlZS52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWUudXBkYXRlU2VyaWFsaXplZFZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzVmlydHVhbE5vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyZWUub25Ob2RlRXhwYW5kLmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgbm9kZTogPFRyZWVOb2RlPnRoaXMubm9kZSB9KTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgKDxUcmVlTm9kZT50aGlzLm5vZGUpLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnRyZWUudmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlLnVwZGF0ZVNlcmlhbGl6ZWRWYWx1ZSgpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c1ZpcnR1YWxOb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmVlLm9uTm9kZUNvbGxhcHNlLmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgbm9kZTogPFRyZWVOb2RlPnRoaXMubm9kZSB9KTtcbiAgICB9XG5cbiAgICBvbk5vZGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLnRyZWUub25Ob2RlQ2xpY2soZXZlbnQsIDxUcmVlTm9kZT50aGlzLm5vZGUpO1xuICAgIH1cblxuICAgIG9uTm9kZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgdGhpcy50cmVlLm9uTm9kZUNsaWNrKGV2ZW50LCA8VHJlZU5vZGU+dGhpcy5ub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTm9kZVRvdWNoRW5kKCkge1xuICAgICAgICB0aGlzLnRyZWUub25Ob2RlVG91Y2hFbmQoKTtcbiAgICB9XG5cbiAgICBvbk5vZGVSaWdodENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMudHJlZS5vbk5vZGVSaWdodENsaWNrKGV2ZW50LCA8VHJlZU5vZGU+dGhpcy5ub2RlKTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlLmlzU2VsZWN0ZWQoPFRyZWVOb2RlPnRoaXMubm9kZSk7XG4gICAgfVxuXG4gICAgaXNTYW1lTm9kZShldmVudCkge1xuICAgICAgICByZXR1cm4gZXZlbnQuY3VycmVudFRhcmdldCAmJiAoZXZlbnQuY3VycmVudFRhcmdldC5pc1NhbWVOb2RlKGV2ZW50LnRhcmdldCkgfHwgZXZlbnQuY3VycmVudFRhcmdldC5pc1NhbWVOb2RlKGV2ZW50LnRhcmdldC5jbG9zZXN0KCdbcm9sZT1cInRyZWVpdGVtXCJdJykpKTtcbiAgICB9XG5cbiAgICBvbkRyb3BQb2ludChldmVudDogRHJhZ0V2ZW50LCBwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCBkcmFnTm9kZSA9IHRoaXMudHJlZS5kcmFnTm9kZTtcbiAgICAgICAgbGV0IGRyYWdOb2RlSW5kZXggPSB0aGlzLnRyZWUuZHJhZ05vZGVJbmRleDtcbiAgICAgICAgbGV0IGRyYWdOb2RlU2NvcGUgPSB0aGlzLnRyZWUuZHJhZ05vZGVTY29wZTtcbiAgICAgICAgbGV0IGlzVmFsaWREcm9wUG9pbnRJbmRleCA9IHRoaXMudHJlZS5kcmFnTm9kZVRyZWUgPT09IHRoaXMudHJlZSA/IHBvc2l0aW9uID09PSAxIHx8IGRyYWdOb2RlSW5kZXggIT09IDxudW1iZXI+dGhpcy5pbmRleCAtIDEgOiB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLnRyZWUuYWxsb3dEcm9wKDxUcmVlTm9kZT5kcmFnTm9kZSwgPFRyZWVOb2RlPnRoaXMubm9kZSwgZHJhZ05vZGVTY29wZSkgJiYgaXNWYWxpZERyb3BQb2ludEluZGV4KSB7XG4gICAgICAgICAgICBsZXQgZHJvcFBhcmFtcyA9IHsgLi4udGhpcy5jcmVhdGVEcm9wUG9pbnRFdmVudE1ldGFkYXRhKDxudW1iZXI+cG9zaXRpb24pIH07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWUudmFsaWRhdGVEcm9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlLm9uTm9kZURyb3AuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICBkcmFnTm9kZTogZHJhZ05vZGUsXG4gICAgICAgICAgICAgICAgICAgIGRyb3BOb2RlOiB0aGlzLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1BvaW50RHJvcChkcm9wUGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NQb2ludERyb3AoZHJvcFBhcmFtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlLm9uTm9kZURyb3AuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICBkcmFnTm9kZTogZHJhZ05vZGUsXG4gICAgICAgICAgICAgICAgICAgIGRyb3BOb2RlOiB0aGlzLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLmluZGV4XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRyYWdob3ZlclByZXYgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kcmFnaG92ZXJOZXh0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJvY2Vzc1BvaW50RHJvcChldmVudDogYW55KSB7XG4gICAgICAgIGxldCBuZXdOb2RlTGlzdCA9IGV2ZW50LmRyb3BOb2RlLnBhcmVudCA/IGV2ZW50LmRyb3BOb2RlLnBhcmVudC5jaGlsZHJlbiA6IHRoaXMudHJlZS52YWx1ZTtcbiAgICAgICAgZXZlbnQuZHJhZ05vZGVTdWJOb2Rlcy5zcGxpY2UoZXZlbnQuZHJhZ05vZGVJbmRleCwgMSk7XG4gICAgICAgIGxldCBkcm9wSW5kZXggPSB0aGlzLmluZGV4O1xuXG4gICAgICAgIGlmIChldmVudC5wb3NpdGlvbiA8IDApIHtcbiAgICAgICAgICAgIGRyb3BJbmRleCA9IGV2ZW50LmRyYWdOb2RlU3ViTm9kZXMgPT09IG5ld05vZGVMaXN0ID8gKGV2ZW50LmRyYWdOb2RlSW5kZXggPiBldmVudC5pbmRleCA/IGV2ZW50LmluZGV4IDogZXZlbnQuaW5kZXggLSAxKSA6IGV2ZW50LmluZGV4O1xuICAgICAgICAgICAgbmV3Tm9kZUxpc3Quc3BsaWNlKGRyb3BJbmRleCwgMCwgZXZlbnQuZHJhZ05vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZHJvcEluZGV4ID0gbmV3Tm9kZUxpc3QubGVuZ3RoO1xuICAgICAgICAgICAgbmV3Tm9kZUxpc3QucHVzaChldmVudC5kcmFnTm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyZWUuZHJhZ0Ryb3BTZXJ2aWNlLnN0b3BEcmFnKHtcbiAgICAgICAgICAgIG5vZGU6IGV2ZW50LmRyYWdOb2RlLFxuICAgICAgICAgICAgc3ViTm9kZXM6IGV2ZW50LmRyb3BOb2RlLnBhcmVudCA/IGV2ZW50LmRyb3BOb2RlLnBhcmVudC5jaGlsZHJlbiA6IHRoaXMudHJlZS52YWx1ZSxcbiAgICAgICAgICAgIGluZGV4OiBldmVudC5kcmFnTm9kZUluZGV4XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZURyb3BQb2ludEV2ZW50TWV0YWRhdGEocG9zaXRpb246IG51bWJlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZHJhZ05vZGU6IHRoaXMudHJlZS5kcmFnTm9kZSxcbiAgICAgICAgICAgIGRyYWdOb2RlSW5kZXg6IHRoaXMudHJlZS5kcmFnTm9kZUluZGV4LFxuICAgICAgICAgICAgZHJhZ05vZGVTdWJOb2RlczogdGhpcy50cmVlLmRyYWdOb2RlU3ViTm9kZXMsXG4gICAgICAgICAgICBkcm9wTm9kZTogdGhpcy5ub2RlLFxuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBvbkRyb3BQb2ludERyYWdPdmVyKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25Ecm9wUG9pbnREcmFnRW50ZXIoZXZlbnQ6IEV2ZW50LCBwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnRyZWUuYWxsb3dEcm9wKDxUcmVlTm9kZT50aGlzLnRyZWUuZHJhZ05vZGUsIDxUcmVlTm9kZT50aGlzLm5vZGUsIHRoaXMudHJlZS5kcmFnTm9kZVNjb3BlKSkge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCkgdGhpcy5kcmFnaG92ZXJQcmV2ID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2UgdGhpcy5kcmFnaG92ZXJOZXh0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJvcFBvaW50RHJhZ0xlYXZlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICB0aGlzLmRyYWdob3ZlclByZXYgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kcmFnaG92ZXJOZXh0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25EcmFnU3RhcnQoZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAodGhpcy50cmVlLmRyYWdnYWJsZU5vZGVzICYmICg8VHJlZU5vZGU+dGhpcy5ub2RlKS5kcmFnZ2FibGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dCcsICdkYXRhJyk7XG5cbiAgICAgICAgICAgIHRoaXMudHJlZS5kcmFnRHJvcFNlcnZpY2Uuc3RhcnREcmFnKHtcbiAgICAgICAgICAgICAgICB0cmVlOiB0aGlzLFxuICAgICAgICAgICAgICAgIG5vZGU6IHRoaXMubm9kZSxcbiAgICAgICAgICAgICAgICBzdWJOb2RlczogdGhpcy5ub2RlPy5wYXJlbnQgPyB0aGlzLm5vZGUucGFyZW50LmNoaWxkcmVuIDogdGhpcy50cmVlLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgICAgICAgICAgIHNjb3BlOiB0aGlzLnRyZWUuZHJhZ2dhYmxlU2NvcGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ1N0b3AoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLnRyZWUuZHJhZ0Ryb3BTZXJ2aWNlLnN0b3BEcmFnKHtcbiAgICAgICAgICAgIG5vZGU6IHRoaXMubm9kZSxcbiAgICAgICAgICAgIHN1Yk5vZGVzOiB0aGlzLm5vZGU/LnBhcmVudCA/IHRoaXMubm9kZS5wYXJlbnQuY2hpbGRyZW4gOiB0aGlzLnRyZWUudmFsdWUsXG4gICAgICAgICAgICBpbmRleDogdGhpcy5pbmRleFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRyb3BOb2RlRHJhZ092ZXIoZXZlbnQ6IGFueSkge1xuICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcbiAgICAgICAgaWYgKHRoaXMudHJlZS5kcm9wcGFibGVOb2Rlcykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ecm9wTm9kZShldmVudDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLnRyZWUuZHJvcHBhYmxlTm9kZXMgJiYgdGhpcy5ub2RlPy5kcm9wcGFibGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBsZXQgZHJhZ05vZGUgPSB0aGlzLnRyZWUuZHJhZ05vZGU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWUuYWxsb3dEcm9wKDxUcmVlTm9kZT5kcmFnTm9kZSwgPFRyZWVOb2RlPnRoaXMubm9kZSwgdGhpcy50cmVlLmRyYWdOb2RlU2NvcGUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRyb3BQYXJhbXMgPSB7IC4uLnRoaXMuY3JlYXRlRHJvcE5vZGVFdmVudE1ldGFkYXRhKCkgfTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyZWUudmFsaWRhdGVEcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZS5vbk5vZGVEcm9wLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnTm9kZTogZHJhZ05vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkcm9wTm9kZTogdGhpcy5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NOb2RlRHJvcChkcm9wUGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzTm9kZURyb3AoZHJvcFBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZS5vbk5vZGVEcm9wLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnTm9kZTogZHJhZ05vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkcm9wTm9kZTogdGhpcy5ub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuZHJhZ2hvdmVyTm9kZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNyZWF0ZURyb3BOb2RlRXZlbnRNZXRhZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRyYWdOb2RlOiB0aGlzLnRyZWUuZHJhZ05vZGUsXG4gICAgICAgICAgICBkcmFnTm9kZUluZGV4OiB0aGlzLnRyZWUuZHJhZ05vZGVJbmRleCxcbiAgICAgICAgICAgIGRyYWdOb2RlU3ViTm9kZXM6IHRoaXMudHJlZS5kcmFnTm9kZVN1Yk5vZGVzLFxuICAgICAgICAgICAgZHJvcE5vZGU6IHRoaXMubm9kZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByb2Nlc3NOb2RlRHJvcChldmVudDogYW55KSB7XG4gICAgICAgIGxldCBkcmFnTm9kZUluZGV4ID0gZXZlbnQuZHJhZ05vZGVJbmRleDtcbiAgICAgICAgZXZlbnQuZHJhZ05vZGVTdWJOb2Rlcy5zcGxpY2UoZHJhZ05vZGVJbmRleCwgMSk7XG5cbiAgICAgICAgaWYgKGV2ZW50LmRyb3BOb2RlLmNoaWxkcmVuKSBldmVudC5kcm9wTm9kZS5jaGlsZHJlbi5wdXNoKGV2ZW50LmRyYWdOb2RlKTtcbiAgICAgICAgZWxzZSBldmVudC5kcm9wTm9kZS5jaGlsZHJlbiA9IFtldmVudC5kcmFnTm9kZV07XG5cbiAgICAgICAgdGhpcy50cmVlLmRyYWdEcm9wU2VydmljZS5zdG9wRHJhZyh7XG4gICAgICAgICAgICBub2RlOiBldmVudC5kcmFnTm9kZSxcbiAgICAgICAgICAgIHN1Yk5vZGVzOiBldmVudC5kcm9wTm9kZS5wYXJlbnQgPyBldmVudC5kcm9wTm9kZS5wYXJlbnQuY2hpbGRyZW4gOiB0aGlzLnRyZWUudmFsdWUsXG4gICAgICAgICAgICBpbmRleDogZHJhZ05vZGVJbmRleFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRyb3BOb2RlRHJhZ0VudGVyKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZS5kcm9wcGFibGVOb2RlcyAmJiB0aGlzLm5vZGU/LmRyb3BwYWJsZSAhPT0gZmFsc2UgJiYgdGhpcy50cmVlLmFsbG93RHJvcCg8VHJlZU5vZGU+dGhpcy50cmVlLmRyYWdOb2RlLCA8VHJlZU5vZGU+dGhpcy5ub2RlLCB0aGlzLnRyZWUuZHJhZ05vZGVTY29wZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2hvdmVyTm9kZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyb3BOb2RlRHJhZ0xlYXZlKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZS5kcm9wcGFibGVOb2Rlcykge1xuICAgICAgICAgICAgbGV0IHJlY3QgPSBldmVudC5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgaWYgKGV2ZW50LnggPiByZWN0LmxlZnQgKyByZWN0LndpZHRoIHx8IGV2ZW50LnggPCByZWN0LmxlZnQgfHwgZXZlbnQueSA+PSBNYXRoLmZsb29yKHJlY3QudG9wICsgcmVjdC5oZWlnaHQpIHx8IGV2ZW50LnkgPCByZWN0LnRvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2hvdmVyTm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1NhbWVOb2RlKGV2ZW50KSB8fCAodGhpcy50cmVlLmNvbnRleHRNZW51ICYmIHRoaXMudHJlZS5jb250ZXh0TWVudS5jb250YWluZXJWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgICAgICAgLy9kb3duIGFycm93XG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd0Rvd24oZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvL3VwIGFycm93XG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXJyb3dVcChldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vcmlnaHQgYXJyb3dcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd1JpZ2h0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy9sZWZ0IGFycm93XG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd0xlZnQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvL2VudGVyXG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICBjYXNlICdOdW1wYWRFbnRlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVudGVyKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy9zcGFjZVxuICAgICAgICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVOYW1lID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lO1xuICAgICAgICAgICAgICAgIGlmICghWydJTlBVVCddLmluY2x1ZGVzKG5vZGVOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRW50ZXIoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy90YWJcbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBbGxOb2Rlc1RhYkluZGV4ZXMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvL25vIG9wXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkFycm93VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgbm9kZUVsZW1lbnQgPSAoPEhUTUxEaXZFbGVtZW50PmV2ZW50LnRhcmdldCkuZ2V0QXR0cmlidXRlKCdkYXRhLXBjLXNlY3Rpb24nKSA9PT0gJ3RvZ2dsZXInID8gKDxIVE1MRGl2RWxlbWVudD5ldmVudC50YXJnZXQpLmNsb3Nlc3QoJ1tyb2xlPVwidHJlZWl0ZW1cIl0nKSA6ICg8SFRNTERpdkVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgIGlmIChub2RlRWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzUm93Q2hhbmdlKG5vZGVFbGVtZW50LCBub2RlRWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLCB0aGlzLmZpbmRMYXN0VmlzaWJsZURlc2NlbmRhbnQobm9kZUVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHBhcmVudE5vZGVFbGVtZW50ID0gdGhpcy5nZXRQYXJlbnROb2RlRWxlbWVudChub2RlRWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNSb3dDaGFuZ2Uobm9kZUVsZW1lbnQsIHBhcmVudE5vZGVFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25BcnJvd0Rvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgbm9kZUVsZW1lbnQgPSAoPEhUTUxEaXZFbGVtZW50PmV2ZW50LnRhcmdldCkuZ2V0QXR0cmlidXRlKCdkYXRhLXBjLXNlY3Rpb24nKSA9PT0gJ3RvZ2dsZXInID8gKDxIVE1MRGl2RWxlbWVudD5ldmVudC50YXJnZXQpLmNsb3Nlc3QoJ1tyb2xlPVwidHJlZWl0ZW1cIl0nKSA6IDxIVE1MRGl2RWxlbWVudD5ldmVudC50YXJnZXQ7XG4gICAgICAgIGNvbnN0IGxpc3RFbGVtZW50ID0gbm9kZUVsZW1lbnQuY2hpbGRyZW5bMV07XG5cbiAgICAgICAgaWYgKGxpc3RFbGVtZW50ICYmIGxpc3RFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNSb3dDaGFuZ2Uobm9kZUVsZW1lbnQsIGxpc3RFbGVtZW50LmNoaWxkcmVuWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChub2RlRWxlbWVudC5wYXJlbnRFbGVtZW50Lm5leHRFbGVtZW50U2libGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNSb3dDaGFuZ2Uobm9kZUVsZW1lbnQsIG5vZGVFbGVtZW50LnBhcmVudEVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IG5leHRTaWJsaW5nQW5jZXN0b3IgPSB0aGlzLmZpbmROZXh0U2libGluZ09mQW5jZXN0b3Iobm9kZUVsZW1lbnQucGFyZW50RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmV4dFNpYmxpbmdBbmNlc3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzUm93Q2hhbmdlKG5vZGVFbGVtZW50LCBuZXh0U2libGluZ0FuY2VzdG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkFycm93UmlnaHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5vZGU/LmV4cGFuZGVkICYmICF0aGlzLnRyZWUuaXNOb2RlTGVhZig8VHJlZU5vZGU+dGhpcy5ub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmQoZXZlbnQpO1xuICAgICAgICAgICAgKDxIVE1MRGl2RWxlbWVudD5ldmVudC5jdXJyZW50VGFyZ2V0KS50YWJJbmRleCA9IC0xO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXJyb3dEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25BcnJvd0xlZnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgbm9kZUVsZW1lbnQgPSAoPEhUTUxEaXZFbGVtZW50PmV2ZW50LnRhcmdldCkuZ2V0QXR0cmlidXRlKCdkYXRhLXBjLXNlY3Rpb24nKSA9PT0gJ3RvZ2dsZXInID8gKDxIVE1MRGl2RWxlbWVudD5ldmVudC50YXJnZXQpLmNsb3Nlc3QoJ1tyb2xlPVwidHJlZWl0ZW1cIl0nKSA6IDxIVE1MRGl2RWxlbWVudD5ldmVudC50YXJnZXQ7XG5cbiAgICAgICAgaWYgKHRoaXMubGV2ZWwgPT09IDAgJiYgIXRoaXMubm9kZT8uZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5vZGU/LmV4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYXJlbnROb2RlRWxlbWVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZUVsZW1lbnQobm9kZUVsZW1lbnQucGFyZW50RWxlbWVudCk7XG5cbiAgICAgICAgaWYgKHBhcmVudE5vZGVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzUm93Q2hhbmdlKGV2ZW50LmN1cnJlbnRUYXJnZXQsIHBhcmVudE5vZGVFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaXNBY3Rpb25hYmxlRWxlbWVudChldmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgY29uc3QgaXNBY3Rpb25hYmxlID0gdGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgKHRhcmdldC5ub2RlTmFtZSA9PSAnQScgfHwgdGFyZ2V0Lm5vZGVOYW1lID09ICdCVVRUT04nKTtcblxuICAgICAgICByZXR1cm4gaXNBY3Rpb25hYmxlO1xuICAgIH1cblxuICAgIG9uRW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy50cmVlLm9uTm9kZUNsaWNrKGV2ZW50LCA8VHJlZU5vZGU+dGhpcy5ub2RlKTtcbiAgICAgICAgdGhpcy5zZXRUYWJJbmRleEZvclNlbGVjdGlvbk1vZGUoZXZlbnQsIHRoaXMudHJlZS5ub2RlVG91Y2hlZCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzQWN0aW9uYWJsZUVsZW1lbnQoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0QWxsTm9kZXNUYWJJbmRleGVzKCkge1xuICAgICAgICBjb25zdCBub2RlcyA9IERvbUhhbmRsZXIuZmluZCh0aGlzLnRyZWUuZWwubmF0aXZlRWxlbWVudCwgJy5jYXgtdHJlZW5vZGUnKTtcblxuICAgICAgICBjb25zdCBoYXNTZWxlY3RlZE5vZGUgPSBbLi4ubm9kZXNdLnNvbWUoKG5vZGUpID0+IG5vZGUuZ2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJykgPT09ICd0cnVlJyB8fCBub2RlLmdldEF0dHJpYnV0ZSgnYXJpYS1jaGVja2VkJykgPT09ICd0cnVlJyk7XG5cbiAgICAgICAgWy4uLm5vZGVzXS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBub2RlLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChoYXNTZWxlY3RlZE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTm9kZXMgPSBbLi4ubm9kZXNdLmZpbHRlcigobm9kZSkgPT4gbm9kZS5nZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnKSA9PT0gJ3RydWUnIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnKSA9PT0gJ3RydWUnKTtcblxuICAgICAgICAgICAgc2VsZWN0ZWROb2Rlc1swXS50YWJJbmRleCA9IDA7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIFsuLi5ub2Rlc11bMF0udGFiSW5kZXggPSAwO1xuICAgIH1cblxuICAgIHNldFRhYkluZGV4Rm9yU2VsZWN0aW9uTW9kZShldmVudCwgbm9kZVRvdWNoZWQpIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZS5zZWxlY3Rpb25Nb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IFsuLi5Eb21IYW5kbGVyLmZpbmQodGhpcy50cmVlLmVsLm5hdGl2ZUVsZW1lbnQsICcuY2F4LXRyZWVub2RlJyldO1xuXG4gICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnRhYkluZGV4ID0gbm9kZVRvdWNoZWQgPT09IGZhbHNlID8gLTEgOiAwO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudHMuZXZlcnkoKGVsZW1lbnQpID0+IGVsZW1lbnQudGFiSW5kZXggPT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzWzBdLnRhYkluZGV4ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbmROZXh0U2libGluZ09mQW5jZXN0b3Iobm9kZUVsZW1lbnQ6IGFueSk6IGFueSB7XG4gICAgICAgIGxldCBwYXJlbnROb2RlRWxlbWVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZUVsZW1lbnQobm9kZUVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChwYXJlbnROb2RlRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGVFbGVtZW50Lm5leHRFbGVtZW50U2libGluZykgcmV0dXJuIHBhcmVudE5vZGVFbGVtZW50Lm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIHRoaXMuZmluZE5leHRTaWJsaW5nT2ZBbmNlc3RvcihwYXJlbnROb2RlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbmRMYXN0VmlzaWJsZURlc2NlbmRhbnQobm9kZUVsZW1lbnQ6IGFueSk6IGFueSB7XG4gICAgICAgIGNvbnN0IGxpc3RFbGVtZW50ID0gPEhUTUxFbGVtZW50PkFycmF5LmZyb20obm9kZUVsZW1lbnQuY2hpbGRyZW4pLmZpbmQoKGVsKSA9PiBEb21IYW5kbGVyLmhhc0NsYXNzKGVsLCAnY2F4LXRyZWVub2RlJykpO1xuICAgICAgICBjb25zdCBjaGlsZHJlbkxpc3RFbGVtZW50ID0gbGlzdEVsZW1lbnQuY2hpbGRyZW5bMV07XG4gICAgICAgIGlmIChjaGlsZHJlbkxpc3RFbGVtZW50ICYmIGNoaWxkcmVuTGlzdEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbGFzdENoaWxkRWxlbWVudCA9IGNoaWxkcmVuTGlzdEVsZW1lbnQuY2hpbGRyZW5bY2hpbGRyZW5MaXN0RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZExhc3RWaXNpYmxlRGVzY2VuZGFudChsYXN0Q2hpbGRFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlRWxlbWVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFBhcmVudE5vZGVFbGVtZW50KG5vZGVFbGVtZW50OiBIVE1MRWxlbWVudCB8IEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZUVsZW1lbnQgPSBub2RlRWxlbWVudC5wYXJlbnRFbGVtZW50Py5wYXJlbnRFbGVtZW50Py5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgIHJldHVybiBwYXJlbnROb2RlRWxlbWVudD8udGFnTmFtZSA9PT0gJ1AtVFJFRU5PREUnID8gcGFyZW50Tm9kZUVsZW1lbnQgOiBudWxsO1xuICAgIH1cblxuICAgIGZvY3VzTm9kZShlbGVtZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZS5kcm9wcGFibGVOb2RlcykgKGVsZW1lbnQuY2hpbGRyZW5bMV0gYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgICAgIGVsc2UgKGVsZW1lbnQuY2hpbGRyZW5bMF0gYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgZm9jdXNSb3dDaGFuZ2UoZmlyc3RGb2N1c2FibGVSb3csIGN1cnJlbnRGb2N1c2VkUm93LCBsYXN0VmlzaWJsZURlc2NlbmRhbnQ/KSB7XG4gICAgICAgIGZpcnN0Rm9jdXNhYmxlUm93LnRhYkluZGV4ID0gJy0xJztcbiAgICAgICAgY3VycmVudEZvY3VzZWRSb3cuY2hpbGRyZW5bMF0udGFiSW5kZXggPSAnMCc7XG5cbiAgICAgICAgdGhpcy5mb2N1c05vZGUobGFzdFZpc2libGVEZXNjZW5kYW50IHx8IGN1cnJlbnRGb2N1c2VkUm93KTtcbiAgICB9XG5cbiAgICBmb2N1c1ZpcnR1YWxOb2RlKCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGxldCBub2RlID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKGRvY3VtZW50LmJvZHksIGBbZGF0YS1pZD1cIiR7PFRyZWVOb2RlPnRoaXMubm9kZT8ua2V5ID8/IDxUcmVlTm9kZT50aGlzLm5vZGU/LmRhdGF9XCJdYCk7XG4gICAgICAgICAgICBEb21IYW5kbGVyLmZvY3VzKG5vZGUpO1xuICAgICAgICB9LCAxKTtcbiAgICB9XG59XG5cbi8qKlxuICogVHJlZSBpcyB1c2VkIHRvIGRpc3BsYXkgaGllcmFyY2hpY2FsIGRhdGEuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NheC10cmVlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdHlsZVVybHM6IFsnLi90cmVlLnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnY2F4LWVsZW1lbnQnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQmxvY2thYmxlVUkge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRyZWVub2Rlcy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB2YWx1ZTogVHJlZU5vZGU8YW55PiB8IFRyZWVOb2RlPGFueT5bXSB8IGFueVtdIHwgYW55O1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHNlbGVjdGlvbiBtb2RlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyB8ICdjaGVja2JveCcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIExvYWRpbmcgbW9kZSBkaXNwbGF5LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGxvYWRpbmdNb2RlOiAnbWFzaycgfCAnaWNvbicgPSAnbWFzayc7XG4gICAgLyoqXG4gICAgICogQSBzaW5nbGUgdHJlZW5vZGUgaW5zdGFuY2Ugb3IgYW4gYXJyYXkgdG8gcmVmZXIgdG8gdGhlIHNlbGVjdGlvbnMuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2VsZWN0aW9uOiBhbnk7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU3R5bGUgY2xhc3Mgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogQ29udGV4dCBtZW51IGluc3RhbmNlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGNvbnRleHRNZW51OiBhbnk7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIHRyZWUsIHZhbGlkIHZhbHVlcyBhcmUgJ3ZlcnRpY2FsJyBhbmQgJ2hvcml6b250YWwnLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGxheW91dDogc3RyaW5nID0gJ3ZlcnRpY2FsJztcbiAgICAvKipcbiAgICAgKiBTY29wZSBvZiB0aGUgZHJhZ2dhYmxlIG5vZGVzIHRvIG1hdGNoIGEgZHJvcHBhYmxlU2NvcGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZHJhZ2dhYmxlU2NvcGU6IGFueTtcbiAgICAvKipcbiAgICAgKiBTY29wZSBvZiB0aGUgZHJvcHBhYmxlIG5vZGVzIHRvIG1hdGNoIGEgZHJhZ2dhYmxlU2NvcGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZHJvcHBhYmxlU2NvcGU6IGFueTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBub2RlcyBhcmUgZHJhZ2dhYmxlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkcmFnZ2FibGVOb2RlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBub2RlcyBhcmUgZHJvcHBhYmxlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkcm9wcGFibGVOb2RlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGhvdyBtdWx0aXBsZSBpdGVtcyBjYW4gYmUgc2VsZWN0ZWQsIHdoZW4gdHJ1ZSBtZXRhS2V5IG5lZWRzIHRvIGJlIHByZXNzZWQgdG8gc2VsZWN0IG9yIHVuc2VsZWN0IGFuIGl0ZW0gYW5kIHdoZW4gc2V0IHRvIGZhbHNlIHNlbGVjdGlvbiBvZiBlYWNoIGl0ZW0gY2FuIGJlIHRvZ2dsZWQgaW5kaXZpZHVhbGx5LiBPbiB0b3VjaCBlbmFibGVkIGRldmljZXMsIG1ldGFLZXlTZWxlY3Rpb24gaXMgdHVybmVkIG9mZiBhdXRvbWF0aWNhbGx5LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBtZXRhS2V5U2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBjaGVja2JveCBzZWxlY3Rpb25zIHByb3BhZ2F0ZSB0byBhbmNlc3RvciBub2Rlcy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcHJvcGFnYXRlU2VsZWN0aW9uVXA6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgY2hlY2tib3ggc2VsZWN0aW9ucyBwcm9wYWdhdGUgdG8gZGVzY2VuZGFudCBub2Rlcy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcHJvcGFnYXRlU2VsZWN0aW9uRG93bjogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBsb2FkZXIgdG8gaW5kaWNhdGUgZGF0YSBsb2FkIGlzIGluIHByb2dyZXNzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBsb2FkaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFRoZSBpY29uIHRvIHNob3cgd2hpbGUgaW5kaWNhdGluZyBkYXRhIGxvYWQgaXMgaW4gcHJvZ3Jlc3MuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgbG9hZGluZ0ljb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBUZXh0IHRvIGRpc3BsYXkgd2hlbiB0aGVyZSBpcyBubyBkYXRhLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGVtcHR5TWVzc2FnZTogc3RyaW5nID0gJyc7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkZWZpbmUgYSBzdHJpbmcgdGhhdCBsYWJlbHMgdGhlIHRyZWUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBhIHN0cmluZyB0aGF0IGxhYmVscyB0aGUgdG9nZ2xlciBpY29uIGZvciBhY2Nlc3NpYmlsaXR5LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRvZ2dsZXJBcmlhTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBFc3RhYmxpc2hlcyByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGNvbXBvbmVudCBhbmQgbGFiZWwocykgd2hlcmUgaXRzIHZhbHVlIHNob3VsZCBiZSBvbmUgb3IgbW9yZSBlbGVtZW50IElEcy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhcmlhTGFiZWxsZWRCeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZW4gZW5hYmxlZCwgZHJvcCBjYW4gYmUgYWNjZXB0ZWQgb3IgcmVqZWN0ZWQgYmFzZWQgb24gY29uZGl0aW9uIGRlZmluZWQgYXQgb25Ob2RlRHJvcC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdmFsaWRhdGVEcm9wOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZW4gc3BlY2lmaWVkLCBkaXNwbGF5cyBhbiBpbnB1dCBmaWVsZCB0byBmaWx0ZXIgdGhlIGl0ZW1zLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBmaWx0ZXI6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hlbiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCwgZmlsdGVyQnkgZGVjaWRlcyB3aGljaCBmaWVsZCBvciBmaWVsZHMgKGNvbW1hIHNlcGFyYXRlZCkgdG8gc2VhcmNoIGFnYWluc3QuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZmlsdGVyQnk6IHN0cmluZyA9ICdsYWJlbCc7XG4gICAgLyoqXG4gICAgICogTW9kZSBmb3IgZmlsdGVyaW5nIHZhbGlkIHZhbHVlcyBhcmUgXCJsZW5pZW50XCIgYW5kIFwic3RyaWN0XCIuIERlZmF1bHQgaXMgbGVuaWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWx0ZXJNb2RlOiBzdHJpbmcgPSAnbGVuaWVudCc7XG4gICAgLyoqXG4gICAgICogUGxhY2Vob2xkZXIgdGV4dCB0byBzaG93IHdoZW4gZmlsdGVyIGlucHV0IGlzIGVtcHR5LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGZpbHRlclBsYWNlaG9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVmFsdWVzIGFmdGVyIHRoZSB0cmVlIG5vZGVzIGFyZSBmaWx0ZXJlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWx0ZXJlZE5vZGVzOiBUcmVlTm9kZTxhbnk+W10gfCB1bmRlZmluZWQgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIExvY2FsZSB0byB1c2UgaW4gZmlsdGVyaW5nLiBUaGUgZGVmYXVsdCBsb2NhbGUgaXMgdGhlIGhvc3QgZW52aXJvbm1lbnQncyBjdXJyZW50IGxvY2FsZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWx0ZXJMb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIHNjcm9sbGFibGUgdmlld3BvcnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBpZiBkYXRhIGlzIGxvYWRlZCBhbmQgaW50ZXJhY3RlZCB3aXRoIGluIGxhenkgbWFubmVyLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBsYXp5OiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgZGF0YSBzaG91bGQgYmUgbG9hZGVkIG9uIGRlbWFuZCBkdXJpbmcgc2Nyb2xsLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB2aXJ0dWFsU2Nyb2xsOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiBhbiBpdGVtIGluIHRoZSBsaXN0IGZvciBWaXJ0dWFsU2Nyb2xsaW5nLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHZpcnR1YWxTY3JvbGxJdGVtU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdXNlIHRoZSBzY3JvbGxlciBmZWF0dXJlLiBUaGUgcHJvcGVydGllcyBvZiBzY3JvbGxlciBjb21wb25lbnQgY2FuIGJlIHVzZWQgbGlrZSBhbiBvYmplY3QgaW4gaXQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgdmlydHVhbFNjcm9sbE9wdGlvbnM6IFNjcm9sbGVyT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBJbmRlbnRhdGlvbiBmYWN0b3IgZm9yIHNwYWNpbmcgb2YgdGhlIG5lc3RlZCBub2RlIHdoZW4gdmlydHVhbCBzY3JvbGxpbmcgaXMgZW5hYmxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBpbmRlbnRhdGlvbjogbnVtYmVyID0gMS41O1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSB0ZW1wbGF0ZXMgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBfdGVtcGxhdGVNYXA6IGFueTtcbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBvcHRpbWl6ZSB0aGUgbm9kZSBsaXN0IHJlbmRlcmluZywgZGVmYXVsdCBhbGdvcml0aG0gY2hlY2tzIGZvciBvYmplY3QgaWRlbnRpdHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgdHJhY2tCeTogRnVuY3Rpb24gPSAoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSA9PiBpdGVtO1xuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgbm9kZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgdmlydHVhbFNjcm9sbEl0ZW1TaXplIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgX3ZpcnR1YWxOb2RlSGVpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgQElucHV0KCkgZ2V0IHZpcnR1YWxOb2RlSGVpZ2h0KCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXJ0dWFsTm9kZUhlaWdodDtcbiAgICB9XG4gICAgc2V0IHZpcnR1YWxOb2RlSGVpZ2h0KHZhbDogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3ZpcnR1YWxOb2RlSGVpZ2h0ID0gdmFsO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSB2aXJ0dWFsTm9kZUhlaWdodCBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLCB1c2UgdmlydHVhbFNjcm9sbEl0ZW1TaXplIHByb3BlcnR5IGluc3RlYWQuJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiBzZWxlY3Rpb24gY2hhbmdlLlxuICAgICAqIEBwYXJhbSB7KFRyZWVOb2RlPGFueT4gfCBUcmVlTm9kZTxhbnk+W10gfCBudWxsKX0gZXZlbnQgLSBDdXN0b20gc2VsZWN0aW9uIGNoYW5nZSBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VHJlZU5vZGU8YW55PiB8IFRyZWVOb2RlPGFueT5bXSB8IG51bGw+ID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlTm9kZTxhbnk+IHwgVHJlZU5vZGU8YW55PltdIHwgbnVsbD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIG5vZGUgaXMgc2VsZWN0ZWQuXG4gICAgICogQHBhcmFtIHtUcmVlTm9kZVNlbGVjdEV2ZW50fSBldmVudCAtIE5vZGUgc2VsZWN0IGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbk5vZGVTZWxlY3Q6IEV2ZW50RW1pdHRlcjxUcmVlTm9kZVNlbGVjdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZU5vZGVTZWxlY3RFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIG5vZGUgaXMgdW5zZWxlY3RlZC5cbiAgICAgKiBAcGFyYW0ge1RyZWVOb2RlVW5TZWxlY3RFdmVudH0gZXZlbnQgLSBOb2RlIHVuc2VsZWN0IGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbk5vZGVVbnNlbGVjdDogRXZlbnRFbWl0dGVyPFRyZWVOb2RlVW5TZWxlY3RFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVOb2RlVW5TZWxlY3RFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIG5vZGUgaXMgZXhwYW5kZWQuXG4gICAgICogQHBhcmFtIHtUcmVlTm9kZUV4cGFuZEV2ZW50fSBldmVudCAtIE5vZGUgZXhwYW5kIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbk5vZGVFeHBhbmQ6IEV2ZW50RW1pdHRlcjxUcmVlTm9kZUV4cGFuZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZU5vZGVFeHBhbmRFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIG5vZGUgaXMgY29sbGFwc2VkLlxuICAgICAqIEBwYXJhbSB7VHJlZU5vZGVDb2xsYXBzZUV2ZW50fSBldmVudCAtIE5vZGUgY29sbGFwc2UgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTm9kZUNvbGxhcHNlOiBFdmVudEVtaXR0ZXI8VHJlZU5vZGVDb2xsYXBzZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZU5vZGVDb2xsYXBzZUV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgbm9kZSBpcyBzZWxlY3RlZCB3aXRoIHJpZ2h0IGNsaWNrLlxuICAgICAqIEBwYXJhbSB7b25Ob2RlQ29udGV4dE1lbnVTZWxlY3R9IGV2ZW50IC0gTm9kZSBjb250ZXh0IG1lbnUgc2VsZWN0IGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbk5vZGVDb250ZXh0TWVudVNlbGVjdDogRXZlbnRFbWl0dGVyPFRyZWVOb2RlQ29udGV4dE1lbnVTZWxlY3RFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVOb2RlQ29udGV4dE1lbnVTZWxlY3RFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIG5vZGUgaXMgZHJvcHBlZC5cbiAgICAgKiBAcGFyYW0ge1RyZWVOb2RlRHJvcEV2ZW50fSBldmVudCAtIE5vZGUgZHJvcCBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ob2RlRHJvcDogRXZlbnRFbWl0dGVyPFRyZWVOb2RlRHJvcEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZU5vZGVEcm9wRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIGluIGxhenkgbW9kZSB0byBsb2FkIG5ldyBkYXRhLlxuICAgICAqIEBwYXJhbSB7VHJlZUxhenlMb2FkRXZlbnR9IGV2ZW50IC0gQ3VzdG9tIGxhenkgbG9hZCBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25MYXp5TG9hZDogRXZlbnRFbWl0dGVyPFRyZWVMYXp5TG9hZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZUxhenlMb2FkRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIGluIHZpcnR1YWwgc2Nyb2xsIG1vZGUgd2hlbiBzY3JvbGwgcG9zaXRpb24gY2hhbmdlcy5cbiAgICAgKiBAcGFyYW0ge1RyZWVTY3JvbGxFdmVudH0gZXZlbnQgLSBDdXN0b20gc2Nyb2xsIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNjcm9sbDogRXZlbnRFbWl0dGVyPFRyZWVTY3JvbGxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVTY3JvbGxFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2UgaW4gdmlydHVhbCBzY3JvbGwgbW9kZSB3aGVuIHNjcm9sbCBwb3NpdGlvbiBhbmQgaXRlbSdzIHJhbmdlIGluIHZpZXcgY2hhbmdlcy5cbiAgICAgKiBAcGFyYW0ge1RyZWVTY3JvbGxJbmRleENoYW5nZUV2ZW50fSBldmVudCAtIFNjcm9sbCBpbmRleCBjaGFuZ2UgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2Nyb2xsSW5kZXhDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUcmVlU2Nyb2xsSW5kZXhDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVTY3JvbGxJbmRleENoYW5nZUV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGRhdGEgaXMgZmlsdGVyZWQuXG4gICAgICogQHBhcmFtIHtUcmVlRmlsdGVyRXZlbnR9IGV2ZW50IC0gQ3VzdG9tIGZpbHRlciBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWx0ZXI6IEV2ZW50RW1pdHRlcjxUcmVlRmlsdGVyRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlRmlsdGVyRXZlbnQ+KCk7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKENheFRlbXBsYXRlKSB0ZW1wbGF0ZXM6IE51bGxhYmxlPFF1ZXJ5TGlzdDxhbnk+PjtcblxuICAgIEBWaWV3Q2hpbGQoJ2ZpbHRlcicpIGZpbHRlclZpZXdDaGlsZDogTnVsbGFibGU8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkKCdzY3JvbGxlcicpIHNjcm9sbGVyOiBOdWxsYWJsZTxTY3JvbGxlcj47XG5cbiAgICBAVmlld0NoaWxkKCd3cmFwcGVyJykgd3JhcHBlclZpZXdDaGlsZDogTnVsbGFibGU8RWxlbWVudFJlZj47XG5cbiAgICBzZXJpYWxpemVkVmFsdWU6IE51bGxhYmxlPFRyZWVOb2RlPGFueT5bXT47XG5cbiAgICBoZWFkZXJUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBmb290ZXJUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBsb2FkZXJUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBlbXB0eU1lc3NhZ2VUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICB0b2dnbGVySWNvblRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIGNoZWNrYm94SWNvblRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIGxvYWRpbmdJY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgZmlsdGVySWNvblRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIHB1YmxpYyBub2RlVG91Y2hlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgICBwdWJsaWMgZHJhZ05vZGVUcmVlOiBUcmVlIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIHB1YmxpYyBkcmFnTm9kZTogVHJlZU5vZGU8YW55PiB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgICBwdWJsaWMgZHJhZ05vZGVTdWJOb2RlczogVHJlZU5vZGU8YW55PltdIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIHB1YmxpYyBkcmFnTm9kZUluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICAgcHVibGljIGRyYWdOb2RlU2NvcGU6IGFueTtcblxuICAgIHB1YmxpYyBkcmFnSG92ZXI6IGJvb2xlYW4gfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICAgcHVibGljIGRyYWdTdGFydFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIHB1YmxpYyBkcmFnU3RvcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHB1YmxpYyBkcmFnRHJvcFNlcnZpY2U6IFRyZWVEcmFnRHJvcFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBjb25maWc6IGNheENvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcHBhYmxlTm9kZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0U3Vic2NyaXB0aW9uID0gdGhpcy5kcmFnRHJvcFNlcnZpY2UuZHJhZ1N0YXJ0JC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnTm9kZVRyZWUgPSBldmVudC50cmVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ05vZGUgPSBldmVudC5ub2RlO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ05vZGVTdWJOb2RlcyA9IGV2ZW50LnN1Yk5vZGVzO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ05vZGVJbmRleCA9IGV2ZW50LmluZGV4O1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ05vZGVTY29wZSA9IGV2ZW50LnNjb3BlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZHJhZ1N0b3BTdWJzY3JpcHRpb24gPSB0aGlzLmRyYWdEcm9wU2VydmljZS5kcmFnU3RvcCQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ05vZGVUcmVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdOb2RlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdOb2RlU3ViTm9kZXMgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ05vZGVJbmRleCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnTm9kZVNjb3BlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdIb3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2U6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKHNpbXBsZUNoYW5nZS52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZXJpYWxpemVkVmFsdWUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0ZpbHRlckFjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyKHRoaXMuZmlsdGVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGhvcml6b250YWwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dCA9PSAnaG9yaXpvbnRhbCc7XG4gICAgfVxuXG4gICAgZ2V0IGVtcHR5TWVzc2FnZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcHR5TWVzc2FnZSB8fCB0aGlzLmNvbmZpZy5nZXRUcmFuc2xhdGlvbihUcmFuc2xhdGlvbktleXMuRU1QVFlfTUVTU0FHRSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBpZiAoKHRoaXMudGVtcGxhdGVzIGFzIFF1ZXJ5TGlzdDxDYXhUZW1wbGF0ZT4pLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGVNYXAgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgICh0aGlzLnRlbXBsYXRlcyBhcyBRdWVyeUxpc3Q8Q2F4VGVtcGxhdGU+KS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0uZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZW1wdHknOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHR5TWVzc2FnZVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdmb290ZXInOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvb3RlclRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdsb2FkZXInOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlclRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICd0b2dnbGVyaWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlckljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tib3hpY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2JveEljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnbG9hZGluZ2ljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdJY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZpbHRlcmljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGVNYXBbPGFueT5pdGVtLm5hbWVdID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZVNlcmlhbGl6ZWRWYWx1ZSgpIHtcbiAgICAgICAgdGhpcy5zZXJpYWxpemVkVmFsdWUgPSBbXTtcbiAgICAgICAgdGhpcy5zZXJpYWxpemVOb2RlcyhudWxsLCB0aGlzLmdldFJvb3ROb2RlKCksIDAsIHRydWUpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZU5vZGVzKHBhcmVudDogVHJlZU5vZGU8YW55PiB8IG51bGwsIG5vZGVzOiBUcmVlTm9kZTxhbnk+W10gfCBhbnksIGxldmVsOiBudW1iZXIsIHZpc2libGU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd05vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogbGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6IHZpc2libGUgJiYgKHBhcmVudCA/IHBhcmVudC5leHBhbmRlZCA6IHRydWUpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAodGhpcy5zZXJpYWxpemVkVmFsdWUgYXMgVHJlZU5vZGU8YW55PltdKS5wdXNoKDxUcmVlTm9kZT5yb3dOb2RlKTtcblxuICAgICAgICAgICAgICAgIGlmIChyb3dOb2RlLnZpc2libGUgJiYgbm9kZS5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcmlhbGl6ZU5vZGVzKG5vZGUsIG5vZGUuY2hpbGRyZW4sIGxldmVsICsgMSwgcm93Tm9kZS52aXNpYmxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk5vZGVDbGljayhldmVudDogRXZlbnQsIG5vZGU6IFRyZWVOb2RlKSB7XG4gICAgICAgIGxldCBldmVudFRhcmdldCA9IDxFbGVtZW50PmV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYgKERvbUhhbmRsZXIuaGFzQ2xhc3MoZXZlbnRUYXJnZXQsICdjYXgtdHJlZS10b2dnbGVyJykgfHwgRG9tSGFuZGxlci5oYXNDbGFzcyhldmVudFRhcmdldCwgJ2NheC10cmVlLXRvZ2dsZXItaWNvbicpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5zZWxlY3RhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG5vZGUuc3R5bGUgPSAnLS1jYXgtZm9jdXMtcmluZy1jb2xvcjogbm9uZTsnO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZS5zdHlsZSA9ICctLWNheC1mb2N1cy1yaW5nLWNvbG9yOiB2YXIoLS1wcmltYXJ5LWNvbG9yKSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0ZpbHRlcmVkTm9kZXMoKSkge1xuICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLmdldE5vZGVXaXRoS2V5KDxzdHJpbmc+bm9kZS5rZXksIDxUcmVlTm9kZTxhbnk+W10+dGhpcy5maWx0ZXJlZE5vZGVzKSBhcyBUcmVlTm9kZTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5maW5kSW5kZXhJblNlbGVjdGlvbihub2RlKTtcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZCA9IGluZGV4ID49IDA7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ2hlY2tib3hTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcGFnYXRlU2VsZWN0aW9uRG93bikgdGhpcy5wcm9wYWdhdGVEb3duKG5vZGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB0aGlzLnNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmZpbHRlcigodmFsOiBUcmVlTm9kZSwgaTogbnVtYmVyKSA9PiBpICE9IGluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wYWdhdGVTZWxlY3Rpb25VcCAmJiBub2RlLnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVVcChub2RlLnBhcmVudCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlVW5zZWxlY3QuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBub2RlOiBub2RlIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BhZ2F0ZVNlbGVjdGlvbkRvd24pIHRoaXMucHJvcGFnYXRlRG93bihub2RlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB0aGlzLnNlbGVjdGlvbiA9IFsuLi4odGhpcy5zZWxlY3Rpb24gfHwgW10pLCBub2RlXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wYWdhdGVTZWxlY3Rpb25VcCAmJiBub2RlLnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVVcChub2RlLnBhcmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5vZGVTZWxlY3QuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBub2RlOiBub2RlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IG1ldGFTZWxlY3Rpb24gPSB0aGlzLm5vZGVUb3VjaGVkID8gZmFsc2UgOiB0aGlzLm1ldGFLZXlTZWxlY3Rpb247XG5cbiAgICAgICAgICAgICAgICBpZiAobWV0YVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWV0YUtleSA9ICg8S2V5Ym9hcmRFdmVudD5ldmVudCkubWV0YUtleSB8fCAoPEtleWJvYXJkRXZlbnQ+ZXZlbnQpLmN0cmxLZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkICYmIG1ldGFLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5maWx0ZXIoKHZhbDogVHJlZU5vZGUsIGk6IG51bWJlcikgPT4gaSAhPSBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlVW5zZWxlY3QuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBub2RlOiBub2RlIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KDxUcmVlTm9kZT5ub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uTW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSAhbWV0YUtleSA/IFtdIDogdGhpcy5zZWxlY3Rpb24gfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBbLi4udGhpcy5zZWxlY3Rpb24sIG5vZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTm9kZVNlbGVjdC5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIG5vZGU6IG5vZGUgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlVW5zZWxlY3QuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBub2RlOiBub2RlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IG5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlU2VsZWN0LmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgbm9kZTogbm9kZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24uZmlsdGVyKCh2YWw6IFRyZWVOb2RlLCBpOiBudW1iZXIpID0+IGkgIT0gaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlVW5zZWxlY3QuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBub2RlOiBub2RlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFsuLi4odGhpcy5zZWxlY3Rpb24gfHwgW10pLCBub2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5vZGVTZWxlY3QuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBub2RlOiBub2RlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ub2RlVG91Y2hlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uTm9kZVRvdWNoRW5kKCkge1xuICAgICAgICB0aGlzLm5vZGVUb3VjaGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbk5vZGVSaWdodENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBub2RlOiBUcmVlTm9kZTxhbnk+KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHRNZW51KSB7XG4gICAgICAgICAgICBsZXQgZXZlbnRUYXJnZXQgPSA8RWxlbWVudD5ldmVudC50YXJnZXQ7XG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gZXZlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xuXG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lICYmIGNsYXNzTmFtZS5pbmNsdWRlcygnY2F4LXRyZWUtdG9nZ2xlcicpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmZpbmRJbmRleEluU2VsZWN0aW9uKG5vZGUpO1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZCA9IGluZGV4ID49IDA7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpKSB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoW25vZGVdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51LnNob3coZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlQ29udGV4dE1lbnVTZWxlY3QuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBub2RlOiBub2RlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmluZEluZGV4SW5TZWxlY3Rpb24obm9kZTogVHJlZU5vZGUpIHtcbiAgICAgICAgbGV0IGluZGV4OiBudW1iZXIgPSAtMTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAmJiB0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJlTm9kZXNFcXVhbCA9ICh0aGlzLnNlbGVjdGlvbi5rZXkgJiYgdGhpcy5zZWxlY3Rpb24ua2V5ID09PSBub2RlLmtleSkgfHwgdGhpcy5zZWxlY3Rpb24gPT0gbm9kZTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGFyZU5vZGVzRXF1YWwgPyAwIDogLTE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3Rpb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkTm9kZSA9IHRoaXMuc2VsZWN0aW9uW2ldO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJlTm9kZXNFcXVhbCA9IChzZWxlY3RlZE5vZGUua2V5ICYmIHNlbGVjdGVkTm9kZS5rZXkgPT09IG5vZGUua2V5KSB8fCBzZWxlY3RlZE5vZGUgPT0gbm9kZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZU5vZGVzRXF1YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHN5bmNOb2RlT3B0aW9uKG5vZGU6IFRyZWVOb2RlLCBwYXJlbnROb2RlczogVHJlZU5vZGU8YW55PltdLCBvcHRpb246IGFueSwgdmFsdWU/OiBhbnkpIHtcbiAgICAgICAgLy8gdG8gc3luY2hyb25pemUgdGhlIG5vZGUgb3B0aW9uIGJldHdlZW4gdGhlIGZpbHRlcmVkIG5vZGVzIGFuZCB0aGUgb3JpZ2luYWwgbm9kZXModGhpcy52YWx1ZSlcbiAgICAgICAgY29uc3QgX25vZGUgPSB0aGlzLmhhc0ZpbHRlcmVkTm9kZXMoKSA/IHRoaXMuZ2V0Tm9kZVdpdGhLZXkoPHN0cmluZz5ub2RlLmtleSwgcGFyZW50Tm9kZXMpIDogbnVsbDtcbiAgICAgICAgaWYgKF9ub2RlKSB7XG4gICAgICAgICAgICAoPGFueT5fbm9kZSlbb3B0aW9uXSA9IHZhbHVlIHx8ICg8YW55Pm5vZGUpW29wdGlvbl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYXNGaWx0ZXJlZE5vZGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIgJiYgdGhpcy5maWx0ZXJlZE5vZGVzICYmIHRoaXMuZmlsdGVyZWROb2Rlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgaGFzRmlsdGVyQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIgJiYgdGhpcy5maWx0ZXJWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQ/LnZhbHVlLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgZ2V0Tm9kZVdpdGhLZXkoa2V5OiBzdHJpbmcsIG5vZGVzOiBUcmVlTm9kZTxhbnk+W10pOiBUcmVlTm9kZTxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgZm9yIChsZXQgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgICAgaWYgKG5vZGUua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlZE5vZGUgPSB0aGlzLmdldE5vZGVXaXRoS2V5KGtleSwgbm9kZS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZWROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVkTm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9wYWdhdGVVcChub2RlOiBUcmVlTm9kZSwgc2VsZWN0OiBib29sZWFuKSB7XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWRDb3VudDogbnVtYmVyID0gMDtcbiAgICAgICAgICAgIGxldCBjaGlsZFBhcnRpYWxTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ291bnQrKztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLnBhcnRpYWxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZFBhcnRpYWxTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZWN0ICYmIHNlbGVjdGVkQ291bnQgPT0gbm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFsuLi4odGhpcy5zZWxlY3Rpb24gfHwgW10pLCBub2RlXTtcbiAgICAgICAgICAgICAgICBub2RlLnBhcnRpYWxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmZpbmRJbmRleEluU2VsZWN0aW9uKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5maWx0ZXIoKHZhbDogVHJlZU5vZGUsIGk6IG51bWJlcikgPT4gaSAhPSBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRQYXJ0aWFsU2VsZWN0ZWQgfHwgKHNlbGVjdGVkQ291bnQgPiAwICYmIHNlbGVjdGVkQ291bnQgIT0gbm9kZS5jaGlsZHJlbi5sZW5ndGgpKSBub2RlLnBhcnRpYWxTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWxzZSBub2RlLnBhcnRpYWxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN5bmNOb2RlT3B0aW9uKG5vZGUsIDxUcmVlTm9kZTxhbnk+W10+dGhpcy5maWx0ZXJlZE5vZGVzLCAncGFydGlhbFNlbGVjdGVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVXAocGFyZW50LCBzZWxlY3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvcGFnYXRlRG93bihub2RlOiBUcmVlTm9kZSwgc2VsZWN0OiBib29sZWFuKSB7XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuZmluZEluZGV4SW5TZWxlY3Rpb24obm9kZSk7XG5cbiAgICAgICAgaWYgKHNlbGVjdCAmJiBpbmRleCA9PSAtMSAmJiBub2RlLnNlbGVjdGFibGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFsuLi4odGhpcy5zZWxlY3Rpb24gfHwgW10pLCB0aGlzLmZpbHRlclVuc2VsZWN0YWJsZUNoaWxkcmVuKG5vZGUpXTtcbiAgICAgICAgfSBlbHNlIGlmICghc2VsZWN0ICYmIGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24uZmlsdGVyKCh2YWw6IFRyZWVOb2RlLCBpOiBudW1iZXIpID0+IGkgIT0gaW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZS5wYXJ0aWFsU2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnN5bmNOb2RlT3B0aW9uKG5vZGUsIDxUcmVlTm9kZTxhbnk+W10+dGhpcy5maWx0ZXJlZE5vZGVzLCAncGFydGlhbFNlbGVjdGVkJyk7XG5cbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZURvd24oY2hpbGQsIHNlbGVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaWx0ZXJVbnNlbGVjdGFibGVDaGlsZHJlbihub2RlOiBUcmVlTm9kZSk6IFRyZWVOb2RlIHtcbiAgICAgICAgbGV0IGNsb25lZE5vZGUgPSBPYmplY3QuYXNzaWduKHt9LCBub2RlKTtcblxuICAgICAgICBpZiAoY2xvbmVkTm9kZS5jaGlsZHJlbiAmJiBjbG9uZWROb2RlLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgY2xvbmVkTm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5zZWxlY3RhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZWROb2RlLmNoaWxkcmVuID0gY2xvbmVkTm9kZS5jaGlsZHJlbi5maWx0ZXIoKHZhbDogVHJlZU5vZGUpID0+IHZhbCAhPSBjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNoaWxkID0gdGhpcy5maWx0ZXJVbnNlbGVjdGFibGVDaGlsZHJlbihjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xvbmVkTm9kZTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKG5vZGU6IFRyZWVOb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRJbmRleEluU2VsZWN0aW9uKG5vZGUpICE9IC0xO1xuICAgIH1cblxuICAgIGlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSAmJiB0aGlzLnNlbGVjdGlvbk1vZGUgPT0gJ3NpbmdsZSc7XG4gICAgfVxuXG4gICAgaXNNdWx0aXBsZVNlbGVjdGlvbk1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlID09ICdtdWx0aXBsZSc7XG4gICAgfVxuXG4gICAgaXNDaGVja2JveFNlbGVjdGlvbk1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlID09ICdjaGVja2JveCc7XG4gICAgfVxuXG4gICAgaXNOb2RlTGVhZihub2RlOiBUcmVlTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gbm9kZS5sZWFmID09IGZhbHNlID8gZmFsc2UgOiAhKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGgpO1xuICAgIH1cblxuICAgIGdldFJvb3ROb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZE5vZGVzID8gdGhpcy5maWx0ZXJlZE5vZGVzIDogdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBnZXRUZW1wbGF0ZUZvck5vZGUobm9kZTogVHJlZU5vZGUpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLl90ZW1wbGF0ZU1hcCkgcmV0dXJuIG5vZGUudHlwZSA/IHRoaXMuX3RlbXBsYXRlTWFwW25vZGUudHlwZV0gOiB0aGlzLl90ZW1wbGF0ZU1hcFsnZGVmYXVsdCddO1xuICAgICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5kcm9wcGFibGVOb2RlcyAmJiAoIXRoaXMudmFsdWUgfHwgKDxhbnk+dGhpcy52YWx1ZSkubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgKDxhbnk+ZXZlbnQpLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUnO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3BwYWJsZU5vZGVzICYmICghdGhpcy52YWx1ZSB8fCAoPGFueT50aGlzLnZhbHVlKS5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgbGV0IGRyYWdOb2RlID0gdGhpcy5kcmFnTm9kZSBhcyBUcmVlTm9kZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dEcm9wKGRyYWdOb2RlLCBudWxsLCB0aGlzLmRyYWdOb2RlU2NvcGUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRyYWdOb2RlSW5kZXggPSA8bnVtYmVyPnRoaXMuZHJhZ05vZGVJbmRleDtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCBbXTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRlRHJvcCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTm9kZURyb3AuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdOb2RlOiBkcmFnTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyb3BOb2RlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGRyYWdOb2RlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NUcmVlRHJvcChkcmFnTm9kZSwgZHJhZ05vZGVJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlRHJvcC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ05vZGU6IGRyYWdOb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZHJvcE5vZGU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogZHJhZ05vZGVJbmRleFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NUcmVlRHJvcChkcmFnTm9kZSwgZHJhZ05vZGVJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc1RyZWVEcm9wKGRyYWdOb2RlOiBUcmVlTm9kZSwgZHJhZ05vZGVJbmRleDogbnVtYmVyKSB7XG4gICAgICAgICg8VHJlZU5vZGU8YW55PltdPnRoaXMuZHJhZ05vZGVTdWJOb2Rlcykuc3BsaWNlKGRyYWdOb2RlSW5kZXgsIDEpO1xuICAgICAgICAodGhpcy52YWx1ZSBhcyBUcmVlTm9kZTxhbnk+W10pLnB1c2goZHJhZ05vZGUpO1xuICAgICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5zdG9wRHJhZyh7XG4gICAgICAgICAgICBub2RlOiBkcmFnTm9kZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRyYWdFbnRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcHBhYmxlTm9kZXMgJiYgdGhpcy5hbGxvd0Ryb3AoPFRyZWVOb2RlPnRoaXMuZHJhZ05vZGUsIG51bGwsIHRoaXMuZHJhZ05vZGVTY29wZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0hvdmVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcHBhYmxlTm9kZXMpIHtcbiAgICAgICAgICAgIGxldCByZWN0ID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgaWYgKGV2ZW50LnggPiByZWN0LmxlZnQgKyByZWN0LndpZHRoIHx8IGV2ZW50LnggPCByZWN0LmxlZnQgfHwgZXZlbnQueSA+IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgfHwgZXZlbnQueSA8IHJlY3QudG9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnSG92ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFsbG93RHJvcChkcmFnTm9kZTogVHJlZU5vZGUsIGRyb3BOb2RlOiBUcmVlTm9kZTxhbnk+IHwgbnVsbCwgZHJhZ05vZGVTY29wZTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghZHJhZ05vZGUpIHtcbiAgICAgICAgICAgIC8vcHJldmVudCByYW5kb20gaHRtbCBlbGVtZW50cyB0byBiZSBkcmFnZ2VkXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1ZhbGlkRHJhZ1Njb3BlKGRyYWdOb2RlU2NvcGUpKSB7XG4gICAgICAgICAgICBsZXQgYWxsb3c6IGJvb2xlYW4gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGRyb3BOb2RlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRyYWdOb2RlID09PSBkcm9wTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBhbGxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnQgPSBkcm9wTm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudCA9PT0gZHJhZ05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGFsbG93O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNWYWxpZERyYWdTY29wZShkcmFnU2NvcGU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgZHJvcFNjb3BlID0gdGhpcy5kcm9wcGFibGVTY29wZTtcblxuICAgICAgICBpZiAoZHJvcFNjb3BlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRyb3BTY29wZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRyYWdTY29wZSA9PT0gJ3N0cmluZycpIHJldHVybiBkcm9wU2NvcGUgPT09IGRyYWdTY29wZTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRyYWdTY29wZSkpIHJldHVybiAoPEFycmF5PGFueT4+ZHJhZ1Njb3BlKS5pbmRleE9mKGRyb3BTY29wZSkgIT0gLTE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZHJvcFNjb3BlKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZHJhZ1Njb3BlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDxBcnJheTxhbnk+PmRyb3BTY29wZSkuaW5kZXhPZihkcmFnU2NvcGUpICE9IC0xO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkcmFnU2NvcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHMgb2YgZHJvcFNjb3BlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBkcyBvZiBkcmFnU2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9PT0gZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgX2ZpbHRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGxldCBmaWx0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAoZmlsdGVyVmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkTm9kZXMgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE5vZGVzID0gW107XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hGaWVsZHM6IHN0cmluZ1tdID0gdGhpcy5maWx0ZXJCeS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyVGV4dCA9IE9iamVjdFV0aWxzLnJlbW92ZUFjY2VudHMoZmlsdGVyVmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuZmlsdGVyTG9jYWxlKTtcbiAgICAgICAgICAgIGNvbnN0IGlzU3RyaWN0TW9kZSA9IHRoaXMuZmlsdGVyTW9kZSA9PT0gJ3N0cmljdCc7XG4gICAgICAgICAgICBmb3IgKGxldCBub2RlIG9mIDxUcmVlTm9kZTxhbnk+W10+dGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBjb3B5Tm9kZSA9IHsgLi4ubm9kZSB9O1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbXNXaXRob3V0Tm9kZSA9IHsgc2VhcmNoRmllbGRzLCBmaWx0ZXJUZXh0LCBpc1N0cmljdE1vZGUgfTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIChpc1N0cmljdE1vZGUgJiYgKHRoaXMuZmluZEZpbHRlcmVkTm9kZXMoY29weU5vZGUsIHBhcmFtc1dpdGhvdXROb2RlKSB8fCB0aGlzLmlzRmlsdGVyTWF0Y2hlZChjb3B5Tm9kZSwgcGFyYW1zV2l0aG91dE5vZGUpKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKCFpc1N0cmljdE1vZGUgJiYgKHRoaXMuaXNGaWx0ZXJNYXRjaGVkKGNvcHlOb2RlLCBwYXJhbXNXaXRob3V0Tm9kZSkgfHwgdGhpcy5maW5kRmlsdGVyZWROb2Rlcyhjb3B5Tm9kZSwgcGFyYW1zV2l0aG91dE5vZGUpKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE5vZGVzLnB1c2goY29weU5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlU2VyaWFsaXplZFZhbHVlKCk7XG4gICAgICAgIHRoaXMub25GaWx0ZXIuZW1pdCh7XG4gICAgICAgICAgICBmaWx0ZXI6IGZpbHRlclZhbHVlLFxuICAgICAgICAgICAgZmlsdGVyZWRWYWx1ZTogdGhpcy5maWx0ZXJlZE5vZGVzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyBmaWx0ZXIuXG4gICAgICogQGdyb3VwIE1ldGhvZFxuICAgICAqL1xuICAgIHB1YmxpYyByZXNldEZpbHRlcigpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE5vZGVzID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5maWx0ZXJWaWV3Q2hpbGQgJiYgdGhpcy5maWx0ZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNjcm9sbHMgdG8gdmlydHVhbCBpbmRleC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIC0gSW5kZXggdG8gYmUgc2Nyb2xsZWQuXG4gICAgICogQGdyb3VwIE1ldGhvZFxuICAgICAqL1xuICAgIHB1YmxpYyBzY3JvbGxUb1ZpcnR1YWxJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbCAmJiB0aGlzLnNjcm9sbGVyPy5zY3JvbGxUb0luZGV4KGluZGV4KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2Nyb2xscyB0byB2aXJ0dWFsIGluZGV4LlxuICAgICAqIEBwYXJhbSB7U2Nyb2xsVG9PcHRpb25zfSBvcHRpb25zIC0gU2Nyb2xsIG9wdGlvbnMuXG4gICAgICogQGdyb3VwIE1ldGhvZFxuICAgICAqL1xuICAgIHB1YmxpYyBzY3JvbGxUbyhvcHRpb25zOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxlcj8uc2Nyb2xsVG8ob3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy53cmFwcGVyVmlld0NoaWxkICYmIHRoaXMud3JhcHBlclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy53cmFwcGVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLndyYXBwZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5zY3JvbGxUbyhvcHRpb25zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IG9wdGlvbnMubGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLndyYXBwZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBvcHRpb25zLnRvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbmRGaWx0ZXJlZE5vZGVzKG5vZGU6IFRyZWVOb2RlLCBwYXJhbXNXaXRob3V0Tm9kZTogYW55KSB7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBsZXQgbWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGROb2RlcyA9IFsuLi5ub2RlLmNoaWxkcmVuXTtcbiAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2hpbGROb2RlIG9mIGNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvcHlDaGlsZE5vZGUgPSB7IC4uLmNoaWxkTm9kZSB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0ZpbHRlck1hdGNoZWQoY29weUNoaWxkTm9kZSwgcGFyYW1zV2l0aG91dE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucHVzaChjb3B5Q2hpbGROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRmlsdGVyTWF0Y2hlZChub2RlOiBUcmVlTm9kZSwgcGFyYW1zOiBhbnkpIHtcbiAgICAgICAgbGV0IHsgc2VhcmNoRmllbGRzLCBmaWx0ZXJUZXh0LCBpc1N0cmljdE1vZGUgfSA9IHBhcmFtcztcbiAgICAgICAgbGV0IG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgZmllbGQgb2Ygc2VhcmNoRmllbGRzKSB7XG4gICAgICAgICAgICBsZXQgZmllbGRWYWx1ZSA9IE9iamVjdFV0aWxzLnJlbW92ZUFjY2VudHMoU3RyaW5nKE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEobm9kZSwgZmllbGQpKSkudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5maWx0ZXJMb2NhbGUpO1xuICAgICAgICAgICAgaWYgKGZpZWxkVmFsdWUuaW5kZXhPZihmaWx0ZXJUZXh0KSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW1hdGNoZWQgfHwgKGlzU3RyaWN0TW9kZSAmJiAhdGhpcy5pc05vZGVMZWFmKG5vZGUpKSkge1xuICAgICAgICAgICAgbWF0Y2hlZCA9IHRoaXMuZmluZEZpbHRlcmVkTm9kZXMobm9kZSwgeyBzZWFyY2hGaWVsZHMsIGZpbHRlclRleHQsIGlzU3RyaWN0TW9kZSB9KSB8fCBtYXRjaGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hdGNoZWQ7XG4gICAgfVxuXG4gICAgZ2V0SW5kZXgob3B0aW9uczogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdldEl0ZW1PcHRpb25zID0gb3B0aW9uc1snZ2V0SXRlbU9wdGlvbnMnXTtcbiAgICAgICAgcmV0dXJuIGdldEl0ZW1PcHRpb25zID8gZ2V0SXRlbU9wdGlvbnMoaW5kZXgpLmluZGV4IDogaW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0QmxvY2thYmxlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdTdGFydFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kcmFnU3RhcnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRyYWdTdG9wU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdTdG9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgW25nSWZdPVwibm9kZVwiPlxyXG4gICAgPGxpXHJcbiAgICAgICAgKm5nSWY9XCJ0cmVlLmRyb3BwYWJsZU5vZGVzXCJcclxuICAgICAgICBjbGFzcz1cImNheC10cmVlbm9kZS1kcm9wcG9pbnRcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cInRydWVcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NheC10cmVlbm9kZS1kcm9wcG9pbnQtYWN0aXZlJzogZHJhZ2hvdmVyUHJldiB9XCJcclxuICAgICAgICAoZHJvcCk9XCJvbkRyb3BQb2ludCgkZXZlbnQsIC0xKVwiXHJcbiAgICAgICAgKGRyYWdvdmVyKT1cIm9uRHJvcFBvaW50RHJhZ092ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKGRyYWdlbnRlcik9XCJvbkRyb3BQb2ludERyYWdFbnRlcigkZXZlbnQsIC0xKVwiXHJcbiAgICAgICAgKGRyYWdsZWF2ZSk9XCJvbkRyb3BQb2ludERyYWdMZWF2ZSgkZXZlbnQpXCJcclxuICAgID48L2xpPlxyXG4gICAgPGxpXHJcbiAgICAgICAgKm5nSWY9XCIhdHJlZS5ob3Jpem9udGFsXCJcclxuICAgICAgICBbbmdDbGFzc109XCJbJ2NheC10cmVlbm9kZScsIG5vZGUuc3R5bGVDbGFzcyB8fCAnJywgaXNMZWFmKCkgPyAnY2F4LXRyZWVub2RlLWxlYWYnIDogJyddXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJ7IGhlaWdodDogaXRlbVNpemUgKyAncHgnIH1cIlxyXG4gICAgICAgIFtzdHlsZV09XCJub2RlLnN0eWxlXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIm5vZGUubGFiZWxcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJhcmlhQ2hlY2tlZFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1zZXRzaXplXT1cIm5vZGUuY2hpbGRyZW4gPyBub2RlLmNoaWxkcmVuLmxlbmd0aCA6IDBcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiYXJpYVNlbGVjdGVkXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm5vZGUuZXhwYW5kZWRcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPVwiaW5kZXggKyAxXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxldmVsXT1cImxldmVsICsgMVwiXHJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaW5kZXggPT09IDAgPyAwIDogLTFcIlxyXG4gICAgICAgIFthdHRyLmRhdGEtaWRdPVwibm9kZS5rZXlcIlxyXG4gICAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXHJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjYXgtdHJlZW5vZGUtY29udGVudFwiXHJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICdwYWRkaW5nLWxlZnQnOiBsZXZlbCAqIGluZGVudGF0aW9uICsgJ3JlbSdcclxuICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uTm9kZVJpZ2h0Q2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICh0b3VjaGVuZCk9XCJvbk5vZGVUb3VjaEVuZCgpXCJcclxuICAgICAgICAgICAgKGRyb3ApPVwib25Ecm9wTm9kZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGRyYWdvdmVyKT1cIm9uRHJvcE5vZGVEcmFnT3ZlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGRyYWdlbnRlcik9XCJvbkRyb3BOb2RlRHJhZ0VudGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uRHJvcE5vZGVEcmFnTGVhdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtkcmFnZ2FibGVdPVwidHJlZS5kcmFnZ2FibGVOb2Rlc1wiXHJcbiAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChkcmFnZW5kKT1cIm9uRHJhZ1N0b3AoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NheC10cmVlbm9kZS1zZWxlY3RhYmxlJzogdHJlZS5zZWxlY3Rpb25Nb2RlICYmIG5vZGUuc2VsZWN0YWJsZSAhPT0gZmFsc2UsICdjYXgtdHJlZW5vZGUtZHJhZ292ZXInOiBkcmFnaG92ZXJOb2RlLCAnY2F4LWhpZ2hsaWdodCc6IGlzU2VsZWN0ZWQoKSB9XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCIndG9nZ2xlcidcIiBjbGFzcz1cImNheC10cmVlLXRvZ2dsZXIgY2F4LWxpbmtcIiAoY2xpY2spPVwidG9nZ2xlKCRldmVudClcIiBwUmlwcGxlIHRhYmluZGV4PVwiLTFcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdHJlZS50b2dnbGVySWNvblRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFub2RlLmxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPENoZXZyb25SaWdodEljb24gKm5nSWY9XCIhbm9kZS5leHBhbmRlZFwiIFtzdHlsZUNsYXNzXT1cIidjYXgtdHJlZS10b2dnbGVyLWljb24nXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPENoZXZyb25Eb3duSWNvbiAqbmdJZj1cIm5vZGUuZXhwYW5kZWRcIiBbc3R5bGVDbGFzc109XCInY2F4LXRyZWUtdG9nZ2xlci1pY29uJ1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdNb2RlID09PSAnaWNvbicgJiYgbm9kZS5sb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTcGlubmVySWNvbiBbc3Bpbl09XCJ0cnVlXCIgW3N0eWxlQ2xhc3NdPVwiJ2NheC10cmVlLW5vZGUtdG9nZ2xlci1pY29uJ1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidHJlZS50b2dnbGVySWNvblRlbXBsYXRlXCIgY2xhc3M9XCJjYXgtdHJlZS10b2dnbGVyLWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmVlLnRvZ2dsZXJJY29uVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlLmV4cGFuZGVkIH1cIj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjYXgtY2hlY2tib3ggY2F4LWNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjYXgtY2hlY2tib3gtZGlzYWJsZWQgY2F4LWRpc2FibGVkJzogbm9kZS5zZWxlY3RhYmxlID09PSBmYWxzZSwgJ2NheC12YXJpYW50LWZpbGxlZCc6IHRyZWU/LmNvbmZpZy5pbnB1dFN0eWxlKCkgPT09ICdmaWxsZWQnIH1cIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0cmVlLnNlbGVjdGlvbk1vZGUgPT0gJ2NoZWNrYm94J1wiXHJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F4LWNoZWNrYm94LWJveFwiIFtuZ0NsYXNzXT1cInsgJ2NheC1oaWdobGlnaHQnOiBpc1NlbGVjdGVkKCksICdjYXgtaW5kZXRlcm1pbmF0ZSc6IG5vZGUucGFydGlhbFNlbGVjdGVkIH1cIiByb2xlPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRyZWUuY2hlY2tib3hJY29uVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPENoZWNrSWNvbiAqbmdJZj1cIiFub2RlLnBhcnRpYWxTZWxlY3RlZCAmJiBpc1NlbGVjdGVkKClcIiBbc3R5bGVDbGFzc109XCInY2F4LWNoZWNrYm94LWljb24nXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPE1pbnVzSWNvbiAqbmdJZj1cIm5vZGUucGFydGlhbFNlbGVjdGVkXCIgW3N0eWxlQ2xhc3NdPVwiJ2NheC1jaGVja2JveC1pY29uJ1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJlZS5jaGVja2JveEljb25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGlzU2VsZWN0ZWQoKSwgcGFydGlhbFNlbGVjdGVkOiBub2RlLnBhcnRpYWxTZWxlY3RlZCB9XCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImdldEljb24oKVwiICpuZ0lmPVwibm9kZS5pY29uIHx8IG5vZGUuZXhwYW5kZWRJY29uIHx8IG5vZGUuY29sbGFwc2VkSWNvblwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXgtdHJlZW5vZGUtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRyZWUuZ2V0VGVtcGxhdGVGb3JOb2RlKG5vZGUpXCI+e3sgbm9kZS5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidHJlZS5nZXRUZW1wbGF0ZUZvck5vZGUobm9kZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJlZS5nZXRUZW1wbGF0ZUZvck5vZGUobm9kZSk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNheC10cmVlLWJhZGdlXCIgKm5nSWY9XCJub2RlLmJhZGdlXCI+XHJcbiAgICAgICAgICAgICAgICA8Y2F4LWJhZGdlIFtzZXZlcml0eV09XCInc2Vjb25kYXJ5J1wiIFt2YWx1ZV09XCJub2RlLmJhZGdlXCI+PC9jYXgtYmFkZ2U+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8dWxcclxuICAgICAgICAgICAgY2xhc3M9XCJjYXgtdHJlZW5vZGUtY2hpbGRyZW5cIlxyXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub2RlLmV4cGFuZGVkID8gJ2Jsb2NrJyA6ICdub25lJ1xyXG4gICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhdHJlZS52aXJ0dWFsU2Nyb2xsICYmIG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5leHBhbmRlZFwiXHJcbiAgICAgICAgICAgIHJvbGU9XCJncm91cFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8Y2F4LXRyZWVOb2RlXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGROb2RlIG9mIG5vZGUuY2hpbGRyZW47IGxldCBmaXJzdENoaWxkID0gZmlyc3Q7IGxldCBsYXN0Q2hpbGQgPSBsYXN0OyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJlZS50cmFja0J5XCJcclxuICAgICAgICAgICAgICAgIFtub2RlXT1cImNoaWxkTm9kZVwiXHJcbiAgICAgICAgICAgICAgICBbcGFyZW50Tm9kZV09XCJub2RlXCJcclxuICAgICAgICAgICAgICAgIFtmaXJzdENoaWxkXT1cImZpcnN0Q2hpbGRcIlxyXG4gICAgICAgICAgICAgICAgW2xhc3RDaGlsZF09XCJsYXN0Q2hpbGRcIlxyXG4gICAgICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcclxuICAgICAgICAgICAgICAgIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICBbbGV2ZWxdPVwibGV2ZWwgKyAxXCJcclxuICAgICAgICAgICAgICAgIFtsb2FkaW5nTW9kZV09XCJsb2FkaW5nTW9kZVwiXHJcbiAgICAgICAgICAgID48L2NheC10cmVlTm9kZT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgPC9saT5cclxuXHJcbiAgICA8bGlcclxuICAgICAgICAqbmdJZj1cInRyZWUuZHJvcHBhYmxlTm9kZXMgJiYgbGFzdENoaWxkXCJcclxuICAgICAgICBjbGFzcz1cImNheC10cmVlbm9kZS1kcm9wcG9pbnRcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NheC10cmVlbm9kZS1kcm9wcG9pbnQtYWN0aXZlJzogZHJhZ2hvdmVyTmV4dCB9XCJcclxuICAgICAgICAoZHJvcCk9XCJvbkRyb3BQb2ludCgkZXZlbnQsIDEpXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJ0cnVlXCJcclxuICAgICAgICAoZHJhZ292ZXIpPVwib25Ecm9wUG9pbnREcmFnT3ZlcigkZXZlbnQpXCJcclxuICAgICAgICAoZHJhZ2VudGVyKT1cIm9uRHJvcFBvaW50RHJhZ0VudGVyKCRldmVudCwgMSlcIlxyXG4gICAgICAgIChkcmFnbGVhdmUpPVwib25Ecm9wUG9pbnREcmFnTGVhdmUoJGV2ZW50KVwiXHJcbiAgICA+PC9saT5cclxuXHJcbiAgICA8dGFibGUgKm5nSWY9XCJ0cmVlLmhvcml6b250YWxcIiBbY2xhc3NdPVwibm9kZS5zdHlsZUNsYXNzXCI+XHJcbiAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjYXgtdHJlZW5vZGUtY29ubmVjdG9yXCIgKm5nSWY9XCIhcm9vdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImNheC10cmVlbm9kZS1jb25uZWN0b3ItdGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBbbmdDbGFzc109XCJ7ICdjYXgtdHJlZW5vZGUtY29ubmVjdG9yLWxpbmUnOiAhZmlyc3RDaGlsZCB9XCI+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIFtuZ0NsYXNzXT1cInsgJ2NheC10cmVlbm9kZS1jb25uZWN0b3ItbGluZSc6ICFsYXN0Q2hpbGQgfVwiPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2F4LXRyZWVub2RlXCIgW25nQ2xhc3NdPVwieyAnY2F4LXRyZWVub2RlLWNvbGxhcHNlZCc6ICFub2RlLmV4cGFuZGVkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2F4LXRyZWVub2RlLWNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjYXgtdHJlZW5vZGUtc2VsZWN0YWJsZSc6IHRyZWUuc2VsZWN0aW9uTW9kZSwgJ2NheC1oaWdobGlnaHQnOiBpc1NlbGVjdGVkKCkgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uTm9kZVJpZ2h0Q2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh0b3VjaGVuZCk9XCJvbk5vZGVUb3VjaEVuZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Ob2RlS2V5ZG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzTGVhZigpXCIgW25nQ2xhc3NdPVwiJ2NheC10cmVlLXRvZ2dsZXInXCIgKGNsaWNrKT1cInRvZ2dsZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRyZWUudG9nZ2xlckljb25UZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQbHVzSWNvbiAqbmdJZj1cIiFub2RlLmV4cGFuZGVkXCIgW3N0eWxlQ2xhc3NdPVwiJ2NheC10cmVlLXRvZ2dsZXItaWNvbidcIiBbYXJpYUxhYmVsXT1cInRyZWUudG9nZ2xlckFyaWFMYWJlbFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPE1pbnVzSWNvbiAqbmdJZj1cIm5vZGUuZXhwYW5kZWRcIiBbc3R5bGVDbGFzc109XCInY2F4LXRyZWUtdG9nZ2xlci1pY29uJ1wiIFthcmlhTGFiZWxdPVwidHJlZS50b2dnbGVyQXJpYUxhYmVsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0cmVlLnRvZ2dsZXJJY29uVGVtcGxhdGVcIiBjbGFzcz1cImNheC10cmVlLXRvZ2dsZXItaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRyZWUudG9nZ2xlckljb25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGUuZXhwYW5kZWQgfVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImdldEljb24oKVwiICpuZ0lmPVwibm9kZS5pY29uIHx8IG5vZGUuZXhwYW5kZWRJY29uIHx8IG5vZGUuY29sbGFwc2VkSWNvblwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXgtdHJlZW5vZGUtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRyZWUuZ2V0VGVtcGxhdGVGb3JOb2RlKG5vZGUpXCI+e3sgbm9kZS5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidHJlZS5nZXRUZW1wbGF0ZUZvck5vZGUobm9kZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidHJlZS5nZXRUZW1wbGF0ZUZvck5vZGUobm9kZSk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2F4LXRyZWVub2RlLWNoaWxkcmVuLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLmNoaWxkcmVuICYmIG5vZGUuZXhwYW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9kZS5leHBhbmRlZCA/ICd0YWJsZS1jZWxsJyA6ICdub25lJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXgtdHJlZW5vZGUtY2hpbGRyZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNheC10cmVlTm9kZSAqbmdGb3I9XCJsZXQgY2hpbGROb2RlIG9mIG5vZGUuY2hpbGRyZW47IGxldCBmaXJzdENoaWxkID0gZmlyc3Q7IGxldCBsYXN0Q2hpbGQgPSBsYXN0OyB0cmFja0J5OiB0cmVlLnRyYWNrQnlcIiBbbm9kZV09XCJjaGlsZE5vZGVcIiBbZmlyc3RDaGlsZF09XCJmaXJzdENoaWxkXCIgW2xhc3RDaGlsZF09XCJsYXN0Q2hpbGRcIj48L2NheC10cmVlTm9kZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgIDwvdGFibGU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiIsIjxkaXZcclxuICAgIFtuZ0NsYXNzXT1cInsgJ2NheC10cmVlIGNheC1jb21wb25lbnQnOiB0cnVlLCAnY2F4LXRyZWUtc2VsZWN0YWJsZSc6IHNlbGVjdGlvbk1vZGUsICdjYXgtdHJlZW5vZGUtZHJhZ292ZXInOiBkcmFnSG92ZXIsICdjYXgtdHJlZS1sb2FkaW5nJzogbG9hZGluZywgJ2NheC10cmVlLWZsZXgtc2Nyb2xsYWJsZSc6IHNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnIH1cIlxyXG4gICAgW25nU3R5bGVdPVwic3R5bGVcIlxyXG4gICAgW2NsYXNzXT1cInN0eWxlQ2xhc3NcIlxyXG4gICAgKm5nSWY9XCIhaG9yaXpvbnRhbFwiXHJcbiAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXHJcbiAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcclxuICAgIChkcmFnZW50ZXIpPVwib25EcmFnRW50ZXIoKVwiXHJcbiAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxyXG4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2F4LXRyZWUtbG9hZGluZy1vdmVybGF5IGNheC1jb21wb25lbnQtb3ZlcmxheVwiICpuZ0lmPVwibG9hZGluZyAmJiBsb2FkaW5nTW9kZSA9PT0gJ21hc2snXCI+XHJcbiAgICAgICAgPGkgKm5nSWY9XCJsb2FkaW5nSWNvblwiIFtjbGFzc109XCInY2F4LXRyZWUtbG9hZGluZy1pY29uIHBpLXNwaW4gJyArIGxvYWRpbmdJY29uXCI+PC9pPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ0ljb25cIj5cclxuICAgICAgICAgICAgPFNwaW5uZXJJY29uICpuZ0lmPVwiIWxvYWRpbmdJY29uVGVtcGxhdGVcIiBbc3Bpbl09XCJ0cnVlXCIgW3N0eWxlQ2xhc3NdPVwiJ2NheC10cmVlLWxvYWRpbmctaWNvbidcIiAvPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImxvYWRpbmdJY29uVGVtcGxhdGVcIiBjbGFzcz1cImNheC10cmVlLWxvYWRpbmctaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0ljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyXCIgY2xhc3M9XCJjYXgtdHJlZS1maWx0ZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGlucHV0ICNmaWx0ZXIgdHlwZT1cInNlYXJjaFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwiY2F4LXRyZWUtZmlsdGVyIGNheC1pbnB1dHRleHQgY2F4LWNvbXBvbmVudFwiIFthdHRyLnBsYWNlaG9sZGVyXT1cImZpbHRlclBsYWNlaG9sZGVyXCIgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAoaW5wdXQpPVwiX2ZpbHRlcigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIC8+XHJcbiAgICAgICAgPFNlYXJjaEljb24gKm5nSWY9XCIhZmlsdGVySWNvblRlbXBsYXRlXCIgW3N0eWxlQ2xhc3NdPVwiJ2NheC10cmVlLWZpbHRlci1pY29uJ1wiIC8+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXJJY29uVGVtcGxhdGVcIiBjbGFzcz1cImNheC10cmVlLWZpbHRlci1pY29uXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlckljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Um9vdE5vZGUoKT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgPGNheC1zY3JvbGxlclxyXG4gICAgICAgICAgICAjc2Nyb2xsZXJcclxuICAgICAgICAgICAgKm5nSWY9XCJ2aXJ0dWFsU2Nyb2xsXCJcclxuICAgICAgICAgICAgW2l0ZW1zXT1cInNlcmlhbGl6ZWRWYWx1ZVwiXHJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXHJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJjYXgtdHJlZS13cmFwcGVyXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cInsgaGVpZ2h0OiBzY3JvbGxIZWlnaHQgIT09ICdmbGV4JyA/IHNjcm9sbEhlaWdodCA6IHVuZGVmaW5lZCB9XCJcclxuICAgICAgICAgICAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHQgIT09ICdmbGV4JyA/IHVuZGVmaW5lZCA6ICcxMDAlJ1wiXHJcbiAgICAgICAgICAgIFtpdGVtU2l6ZV09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgfHwgX3ZpcnR1YWxOb2RlSGVpZ2h0XCJcclxuICAgICAgICAgICAgW2xhenldPVwibGF6eVwiXHJcbiAgICAgICAgICAgIChvblNjcm9sbCk9XCJvblNjcm9sbC5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAob25TY3JvbGxJbmRleENoYW5nZSk9XCJvblNjcm9sbEluZGV4Q2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChvbkxhenlMb2FkKT1cIm9uTGF6eUxvYWQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgW29wdGlvbnNdPVwidmlydHVhbFNjcm9sbE9wdGlvbnNcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNheFRlbXBsYXRlPVwiY29udGVudFwiIGxldC1pdGVtcyBsZXQtc2Nyb2xsZXJPcHRpb25zPVwib3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPHVsICpuZ0lmPVwiaXRlbXNcIiBjbGFzcz1cImNheC10cmVlLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInNjcm9sbGVyT3B0aW9ucy5jb250ZW50U3R5bGVDbGFzc1wiIFtzdHlsZV09XCJzY3JvbGxlck9wdGlvbnMuY29udGVudFN0eWxlXCIgcm9sZT1cInRyZWVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjYXgtdHJlZU5vZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgI3RyZWVOb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb3dOb2RlIG9mIGl0ZW1zOyBsZXQgZmlyc3RDaGlsZCA9IGZpcnN0OyBsZXQgbGFzdENoaWxkID0gbGFzdDsgbGV0IGluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGV2ZWxdPVwicm93Tm9kZS5sZXZlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dOb2RlXT1cInJvd05vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJyb3dOb2RlLm5vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGFyZW50Tm9kZV09XCJyb3dOb2RlLnBhcmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaXJzdENoaWxkXT1cImZpcnN0Q2hpbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFzdENoaWxkXT1cImxhc3RDaGlsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJnZXRJbmRleChzY3JvbGxlck9wdGlvbnMsIGluZGV4KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtU2l6ZV09XCJzY3JvbGxlck9wdGlvbnMuaXRlbVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5kZW50YXRpb25dPVwiaW5kZW50YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ01vZGVdPVwibG9hZGluZ01vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2NheC10cmVlTm9kZT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkZXJUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNheFRlbXBsYXRlPVwibG9hZGVyXCIgbGV0LXNjcm9sbGVyT3B0aW9ucz1cIm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgb3B0aW9uczogc2Nyb2xsZXJPcHRpb25zIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvY2F4LXNjcm9sbGVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdmlydHVhbFNjcm9sbFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICN3cmFwcGVyIGNsYXNzPVwiY2F4LXRyZWUtd3JhcHBlclwiIFtuZ1N0eWxlXT1cInsgJ21heC1oZWlnaHQnOiBzY3JvbGxIZWlnaHQgfVwiPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY2F4LXRyZWUtY29udGFpbmVyXCIgKm5nSWY9XCJnZXRSb290Tm9kZSgpXCIgcm9sZT1cInRyZWVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjYXgtdHJlZU5vZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG5vZGUgb2YgZ2V0Um9vdE5vZGUoKTsgbGV0IGZpcnN0Q2hpbGQgPSBmaXJzdDsgbGV0IGxhc3RDaGlsZCA9IGxhc3Q7IGxldCBpbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwibm9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaXJzdENoaWxkXT1cImZpcnN0Q2hpbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFzdENoaWxkXT1cImxhc3RDaGlsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsZXZlbF09XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmdNb2RlXT1cImxvYWRpbmdNb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9jYXgtdHJlZU5vZGU+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXgtdHJlZS1lbXB0eS1tZXNzYWdlXCIgKm5nSWY9XCIhbG9hZGluZyAmJiAoZ2V0Um9vdE5vZGUoKSA9PSBudWxsIHx8IGdldFJvb3ROb2RlKCkubGVuZ3RoID09PSAwKVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZW1wdHlNZXNzYWdlVGVtcGxhdGU7IGVsc2UgZW1wdHlGaWx0ZXJcIj4ge3sgZW1wdHlNZXNzYWdlTGFiZWwgfX0gPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAjZW1wdHlGaWx0ZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eU1lc3NhZ2VUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbjxkaXYgW25nQ2xhc3NdPVwieyAnY2F4LXRyZWUgY2F4LXRyZWUtaG9yaXpvbnRhbCBjYXgtY29tcG9uZW50JzogdHJ1ZSwgJ2NheC10cmVlLXNlbGVjdGFibGUnOiBzZWxlY3Rpb25Nb2RlIH1cIiBbbmdTdHlsZV09XCJzdHlsZVwiIFtjbGFzc109XCJzdHlsZUNsYXNzXCIgKm5nSWY9XCJob3Jpem9udGFsXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXgtdHJlZS1sb2FkaW5nLW1hc2sgY2F4LWNvbXBvbmVudC1vdmVybGF5XCIgKm5nSWY9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgPGkgKm5nSWY9XCJsb2FkaW5nSWNvblwiIFtjbGFzc109XCInY2F4LXRyZWUtbG9hZGluZy1pY29uIHBpLXNwaW4gJyArIGxvYWRpbmdJY29uXCI+PC9pPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ0ljb25cIj5cclxuICAgICAgICAgICAgPFNwaW5uZXJJY29uICpuZ0lmPVwiIWxvYWRpbmdJY29uVGVtcGxhdGVcIiBbc3Bpbl09XCJ0cnVlXCIgW3N0eWxlQ2xhc3NdPVwiJ2NheC10cmVlLWxvYWRpbmctaWNvbidcIiAvPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImxvYWRpbmdJY29uVGVtcGxhdGVcIiBjbGFzcz1cImNheC10cmVlLWxvYWRpbmctaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0ljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHRhYmxlICpuZ0lmPVwidmFsdWUgJiYgdmFsdWVbMF1cIj5cclxuICAgICAgICA8Y2F4LXRyZWVOb2RlIFtub2RlXT1cInZhbHVlWzBdXCIgW3Jvb3RdPVwidHJ1ZVwiPjwvY2F4LXRyZWVOb2RlPlxyXG4gICAgPC90YWJsZT5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXgtdHJlZS1lbXB0eS1tZXNzYWdlXCIgKm5nSWY9XCIhbG9hZGluZyAmJiAoZ2V0Um9vdE5vZGUoKSA9PSBudWxsIHx8IGdldFJvb3ROb2RlKCkubGVuZ3RoID09PSAwKVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZW1wdHlNZXNzYWdlVGVtcGxhdGU7IGVsc2UgZW1wdHlGaWx0ZXJcIj4ge3sgZW1wdHlNZXNzYWdlTGFiZWwgfX0gPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAjZW1wdHlGaWx0ZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eU1lc3NhZ2VUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbiJdfQ==