primeng 18.0.0-rc.2 → 19.0.0-rc.1

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 (1091) hide show
  1. package/LICENSE.md +1 -1
  2. package/autocomplete/autocomplete.d.ts +11 -11
  3. package/base/style/basestyle.d.ts +11 -11
  4. package/config/primeng.d.ts +12 -6
  5. package/config/provideprimeng.d.ts +1 -12
  6. package/config/themeprovider.d.ts +10 -4
  7. package/confirmdialog/confirmdialog.d.ts +1 -0
  8. package/fesm2022/primeng-accordion.mjs +12 -12
  9. package/fesm2022/primeng-accordion.mjs.map +1 -1
  10. package/fesm2022/primeng-animateonscroll.mjs +1 -1
  11. package/fesm2022/primeng-animateonscroll.mjs.map +1 -1
  12. package/fesm2022/primeng-api.mjs +5 -5
  13. package/fesm2022/primeng-api.mjs.map +1 -1
  14. package/fesm2022/primeng-autocomplete.mjs +135 -136
  15. package/fesm2022/primeng-autocomplete.mjs.map +1 -1
  16. package/fesm2022/primeng-autofocus.mjs +1 -1
  17. package/fesm2022/primeng-autofocus.mjs.map +1 -1
  18. package/fesm2022/primeng-avatar.mjs +2 -2
  19. package/fesm2022/primeng-avatar.mjs.map +1 -1
  20. package/fesm2022/primeng-avatargroup.mjs +2 -2
  21. package/fesm2022/primeng-avatargroup.mjs.map +1 -1
  22. package/fesm2022/primeng-badge.mjs +3 -3
  23. package/fesm2022/primeng-badge.mjs.map +1 -1
  24. package/fesm2022/primeng-basecomponent.mjs +1 -1
  25. package/fesm2022/primeng-basecomponent.mjs.map +1 -1
  26. package/fesm2022/primeng-blockui.mjs +2 -2
  27. package/fesm2022/primeng-blockui.mjs.map +1 -1
  28. package/fesm2022/primeng-breadcrumb.mjs +2 -2
  29. package/fesm2022/primeng-breadcrumb.mjs.map +1 -1
  30. package/fesm2022/primeng-button.mjs +5 -5
  31. package/fesm2022/primeng-button.mjs.map +1 -1
  32. package/fesm2022/primeng-buttongroup.mjs +2 -2
  33. package/fesm2022/primeng-buttongroup.mjs.map +1 -1
  34. package/fesm2022/primeng-calendar.mjs +3 -3
  35. package/fesm2022/primeng-calendar.mjs.map +1 -1
  36. package/fesm2022/primeng-card.mjs +2 -2
  37. package/fesm2022/primeng-card.mjs.map +1 -1
  38. package/fesm2022/primeng-carousel.mjs +2 -2
  39. package/fesm2022/primeng-carousel.mjs.map +1 -1
  40. package/fesm2022/primeng-cascadeselect.mjs +6 -6
  41. package/fesm2022/primeng-cascadeselect.mjs.map +1 -1
  42. package/fesm2022/primeng-chart.mjs +2 -2
  43. package/fesm2022/primeng-chart.mjs.map +1 -1
  44. package/fesm2022/primeng-checkbox.mjs +3 -4
  45. package/fesm2022/primeng-checkbox.mjs.map +1 -1
  46. package/fesm2022/primeng-chip.mjs +2 -2
  47. package/fesm2022/primeng-chip.mjs.map +1 -1
  48. package/fesm2022/primeng-colorpicker.mjs +3 -3
  49. package/fesm2022/primeng-colorpicker.mjs.map +1 -1
  50. package/fesm2022/primeng-config.mjs +39 -40
  51. package/fesm2022/primeng-config.mjs.map +1 -1
  52. package/fesm2022/primeng-confirmdialog.mjs +13 -10
  53. package/fesm2022/primeng-confirmdialog.mjs.map +1 -1
  54. package/fesm2022/primeng-confirmpopup.mjs +2 -2
  55. package/fesm2022/primeng-confirmpopup.mjs.map +1 -1
  56. package/fesm2022/primeng-contextmenu.mjs +6 -6
  57. package/fesm2022/primeng-contextmenu.mjs.map +1 -1
  58. package/fesm2022/primeng-dataview.mjs +2 -2
  59. package/fesm2022/primeng-dataview.mjs.map +1 -1
  60. package/fesm2022/primeng-datepicker.mjs +5 -5
  61. package/fesm2022/primeng-datepicker.mjs.map +1 -1
  62. package/fesm2022/primeng-defer.mjs +1 -1
  63. package/fesm2022/primeng-dialog.mjs +18 -19
  64. package/fesm2022/primeng-dialog.mjs.map +1 -1
  65. package/fesm2022/primeng-divider.mjs +2 -2
  66. package/fesm2022/primeng-divider.mjs.map +1 -1
  67. package/fesm2022/primeng-dock.mjs +3 -4
  68. package/fesm2022/primeng-dock.mjs.map +1 -1
  69. package/fesm2022/primeng-dragdrop.mjs +2 -2
  70. package/fesm2022/primeng-dragdrop.mjs.map +1 -1
  71. package/fesm2022/primeng-drawer.mjs +5 -5
  72. package/fesm2022/primeng-drawer.mjs.map +1 -1
  73. package/fesm2022/primeng-dropdown.mjs +4 -4
  74. package/fesm2022/primeng-dropdown.mjs.map +1 -1
  75. package/fesm2022/primeng-dynamicdialog.mjs +4 -4
  76. package/fesm2022/primeng-dynamicdialog.mjs.map +1 -1
  77. package/fesm2022/primeng-editor.mjs +2 -2
  78. package/fesm2022/primeng-editor.mjs.map +1 -1
  79. package/fesm2022/primeng-fieldset.mjs +2 -2
  80. package/fesm2022/primeng-fieldset.mjs.map +1 -1
  81. package/fesm2022/primeng-fileupload.mjs +3 -4
  82. package/fesm2022/primeng-fileupload.mjs.map +1 -1
  83. package/fesm2022/primeng-floatlabel.mjs +2 -2
  84. package/fesm2022/primeng-floatlabel.mjs.map +1 -1
  85. package/fesm2022/primeng-fluid.mjs +2 -2
  86. package/fesm2022/primeng-fluid.mjs.map +1 -1
  87. package/fesm2022/primeng-focustrap.mjs +1 -1
  88. package/fesm2022/primeng-focustrap.mjs.map +1 -1
  89. package/fesm2022/primeng-galleria.mjs +10 -10
  90. package/fesm2022/primeng-galleria.mjs.map +1 -1
  91. package/fesm2022/primeng-iconfield.mjs +2 -2
  92. package/fesm2022/primeng-iconfield.mjs.map +1 -1
  93. package/fesm2022/primeng-icons-angledoubledown.mjs +2 -2
  94. package/fesm2022/primeng-icons-angledoubledown.mjs.map +1 -1
  95. package/fesm2022/primeng-icons-angledoubleleft.mjs +2 -2
  96. package/fesm2022/primeng-icons-angledoubleleft.mjs.map +1 -1
  97. package/fesm2022/primeng-icons-angledoubleright.mjs +2 -2
  98. package/fesm2022/primeng-icons-angledoubleright.mjs.map +1 -1
  99. package/fesm2022/primeng-icons-angledoubleup.mjs +2 -2
  100. package/fesm2022/primeng-icons-angledoubleup.mjs.map +1 -1
  101. package/fesm2022/primeng-icons-angledown.mjs +2 -2
  102. package/fesm2022/primeng-icons-angledown.mjs.map +1 -1
  103. package/fesm2022/primeng-icons-angleleft.mjs +2 -2
  104. package/fesm2022/primeng-icons-angleleft.mjs.map +1 -1
  105. package/fesm2022/primeng-icons-angleright.mjs +2 -2
  106. package/fesm2022/primeng-icons-angleright.mjs.map +1 -1
  107. package/fesm2022/primeng-icons-angleup.mjs +2 -2
  108. package/fesm2022/primeng-icons-angleup.mjs.map +1 -1
  109. package/fesm2022/primeng-icons-arrowdown.mjs +2 -2
  110. package/fesm2022/primeng-icons-arrowdown.mjs.map +1 -1
  111. package/fesm2022/primeng-icons-arrowdownleft.mjs +2 -2
  112. package/fesm2022/primeng-icons-arrowdownleft.mjs.map +1 -1
  113. package/fesm2022/primeng-icons-arrowdownright.mjs +2 -2
  114. package/fesm2022/primeng-icons-arrowdownright.mjs.map +1 -1
  115. package/fesm2022/primeng-icons-arrowleft.mjs +2 -2
  116. package/fesm2022/primeng-icons-arrowleft.mjs.map +1 -1
  117. package/fesm2022/primeng-icons-arrowright.mjs +2 -2
  118. package/fesm2022/primeng-icons-arrowright.mjs.map +1 -1
  119. package/fesm2022/primeng-icons-arrowup.mjs +2 -2
  120. package/fesm2022/primeng-icons-arrowup.mjs.map +1 -1
  121. package/fesm2022/primeng-icons-ban.mjs +2 -2
  122. package/fesm2022/primeng-icons-ban.mjs.map +1 -1
  123. package/fesm2022/primeng-icons-bars.mjs +2 -2
  124. package/fesm2022/primeng-icons-bars.mjs.map +1 -1
  125. package/fesm2022/primeng-icons-baseicon.mjs +2 -2
  126. package/fesm2022/primeng-icons-baseicon.mjs.map +1 -1
  127. package/fesm2022/primeng-icons-blank.mjs +2 -2
  128. package/fesm2022/primeng-icons-blank.mjs.map +1 -1
  129. package/fesm2022/primeng-icons-calendar.mjs +2 -2
  130. package/fesm2022/primeng-icons-calendar.mjs.map +1 -1
  131. package/fesm2022/primeng-icons-caretleft.mjs +2 -2
  132. package/fesm2022/primeng-icons-caretleft.mjs.map +1 -1
  133. package/fesm2022/primeng-icons-caretright.mjs +2 -2
  134. package/fesm2022/primeng-icons-caretright.mjs.map +1 -1
  135. package/fesm2022/primeng-icons-check.mjs +2 -2
  136. package/fesm2022/primeng-icons-check.mjs.map +1 -1
  137. package/fesm2022/primeng-icons-chevrondown.mjs +2 -2
  138. package/fesm2022/primeng-icons-chevrondown.mjs.map +1 -1
  139. package/fesm2022/primeng-icons-chevronleft.mjs +2 -2
  140. package/fesm2022/primeng-icons-chevronleft.mjs.map +1 -1
  141. package/fesm2022/primeng-icons-chevronright.mjs +2 -2
  142. package/fesm2022/primeng-icons-chevronright.mjs.map +1 -1
  143. package/fesm2022/primeng-icons-chevronup.mjs +2 -2
  144. package/fesm2022/primeng-icons-chevronup.mjs.map +1 -1
  145. package/fesm2022/primeng-icons-exclamationtriangle.mjs +2 -2
  146. package/fesm2022/primeng-icons-exclamationtriangle.mjs.map +1 -1
  147. package/fesm2022/primeng-icons-eye.mjs +2 -2
  148. package/fesm2022/primeng-icons-eye.mjs.map +1 -1
  149. package/fesm2022/primeng-icons-eyeslash.mjs +2 -2
  150. package/fesm2022/primeng-icons-eyeslash.mjs.map +1 -1
  151. package/fesm2022/primeng-icons-filter.mjs +2 -2
  152. package/fesm2022/primeng-icons-filter.mjs.map +1 -1
  153. package/fesm2022/primeng-icons-filterslash.mjs +2 -2
  154. package/fesm2022/primeng-icons-filterslash.mjs.map +1 -1
  155. package/fesm2022/primeng-icons-home.mjs +2 -2
  156. package/fesm2022/primeng-icons-home.mjs.map +1 -1
  157. package/fesm2022/primeng-icons-infocircle.mjs +2 -2
  158. package/fesm2022/primeng-icons-infocircle.mjs.map +1 -1
  159. package/fesm2022/primeng-icons-minus.mjs +2 -2
  160. package/fesm2022/primeng-icons-minus.mjs.map +1 -1
  161. package/fesm2022/primeng-icons-pencil.mjs +2 -2
  162. package/fesm2022/primeng-icons-pencil.mjs.map +1 -1
  163. package/fesm2022/primeng-icons-plus.mjs +2 -2
  164. package/fesm2022/primeng-icons-plus.mjs.map +1 -1
  165. package/fesm2022/primeng-icons-refresh.mjs +2 -2
  166. package/fesm2022/primeng-icons-refresh.mjs.map +1 -1
  167. package/fesm2022/primeng-icons-search.mjs +2 -2
  168. package/fesm2022/primeng-icons-search.mjs.map +1 -1
  169. package/fesm2022/primeng-icons-searchminus.mjs +2 -2
  170. package/fesm2022/primeng-icons-searchminus.mjs.map +1 -1
  171. package/fesm2022/primeng-icons-searchplus.mjs +2 -2
  172. package/fesm2022/primeng-icons-searchplus.mjs.map +1 -1
  173. package/fesm2022/primeng-icons-sortalt.mjs +2 -2
  174. package/fesm2022/primeng-icons-sortalt.mjs.map +1 -1
  175. package/fesm2022/primeng-icons-sortamountdown.mjs +2 -2
  176. package/fesm2022/primeng-icons-sortamountdown.mjs.map +1 -1
  177. package/fesm2022/primeng-icons-sortamountupalt.mjs +2 -2
  178. package/fesm2022/primeng-icons-sortamountupalt.mjs.map +1 -1
  179. package/fesm2022/primeng-icons-spinner.mjs +2 -2
  180. package/fesm2022/primeng-icons-spinner.mjs.map +1 -1
  181. package/fesm2022/primeng-icons-star.mjs +2 -2
  182. package/fesm2022/primeng-icons-star.mjs.map +1 -1
  183. package/fesm2022/primeng-icons-starfill.mjs +2 -2
  184. package/fesm2022/primeng-icons-starfill.mjs.map +1 -1
  185. package/fesm2022/primeng-icons-thlarge.mjs +2 -2
  186. package/fesm2022/primeng-icons-thlarge.mjs.map +1 -1
  187. package/fesm2022/primeng-icons-times.mjs +2 -2
  188. package/fesm2022/primeng-icons-times.mjs.map +1 -1
  189. package/fesm2022/primeng-icons-timescircle.mjs +2 -2
  190. package/fesm2022/primeng-icons-timescircle.mjs.map +1 -1
  191. package/fesm2022/primeng-icons-trash.mjs +2 -2
  192. package/fesm2022/primeng-icons-trash.mjs.map +1 -1
  193. package/fesm2022/primeng-icons-undo.mjs +2 -2
  194. package/fesm2022/primeng-icons-undo.mjs.map +1 -1
  195. package/fesm2022/primeng-icons-upload.mjs +2 -2
  196. package/fesm2022/primeng-icons-upload.mjs.map +1 -1
  197. package/fesm2022/primeng-icons-windowmaximize.mjs +2 -2
  198. package/fesm2022/primeng-icons-windowmaximize.mjs.map +1 -1
  199. package/fesm2022/primeng-icons-windowminimize.mjs +2 -2
  200. package/fesm2022/primeng-icons-windowminimize.mjs.map +1 -1
  201. package/fesm2022/primeng-iftalabel.mjs +2 -2
  202. package/fesm2022/primeng-iftalabel.mjs.map +1 -1
  203. package/fesm2022/primeng-image.mjs +3 -3
  204. package/fesm2022/primeng-image.mjs.map +1 -1
  205. package/fesm2022/primeng-imagecompare.mjs +2 -2
  206. package/fesm2022/primeng-imagecompare.mjs.map +1 -1
  207. package/fesm2022/primeng-inplace.mjs +6 -6
  208. package/fesm2022/primeng-inplace.mjs.map +1 -1
  209. package/fesm2022/primeng-inputgroup.mjs +2 -2
  210. package/fesm2022/primeng-inputgroup.mjs.map +1 -1
  211. package/fesm2022/primeng-inputgroupaddon.mjs +2 -2
  212. package/fesm2022/primeng-inputgroupaddon.mjs.map +1 -1
  213. package/fesm2022/primeng-inputicon.mjs +2 -2
  214. package/fesm2022/primeng-inputicon.mjs.map +1 -1
  215. package/fesm2022/primeng-inputmask.mjs +4 -4
  216. package/fesm2022/primeng-inputmask.mjs.map +1 -1
  217. package/fesm2022/primeng-inputnumber.mjs +5 -6
  218. package/fesm2022/primeng-inputnumber.mjs.map +1 -1
  219. package/fesm2022/primeng-inputotp.mjs +4 -4
  220. package/fesm2022/primeng-inputotp.mjs.map +1 -1
  221. package/fesm2022/primeng-inputswitch.mjs +2 -2
  222. package/fesm2022/primeng-inputswitch.mjs.map +1 -1
  223. package/fesm2022/primeng-inputtext.mjs +10 -9
  224. package/fesm2022/primeng-inputtext.mjs.map +1 -1
  225. package/fesm2022/primeng-inputtextarea.mjs +1 -1
  226. package/fesm2022/primeng-inputtextarea.mjs.map +1 -1
  227. package/fesm2022/primeng-keyfilter.mjs +1 -1
  228. package/fesm2022/primeng-keyfilter.mjs.map +1 -1
  229. package/fesm2022/primeng-knob.mjs +2 -2
  230. package/fesm2022/primeng-knob.mjs.map +1 -1
  231. package/fesm2022/primeng-listbox.mjs +2 -2
  232. package/fesm2022/primeng-listbox.mjs.map +1 -1
  233. package/fesm2022/primeng-megamenu.mjs +5 -5
  234. package/fesm2022/primeng-megamenu.mjs.map +1 -1
  235. package/fesm2022/primeng-menu.mjs +7 -7
  236. package/fesm2022/primeng-menu.mjs.map +1 -1
  237. package/fesm2022/primeng-menubar.mjs +6 -6
  238. package/fesm2022/primeng-menubar.mjs.map +1 -1
  239. package/fesm2022/primeng-message.mjs +2 -2
  240. package/fesm2022/primeng-message.mjs.map +1 -1
  241. package/fesm2022/primeng-messages.mjs +2 -2
  242. package/fesm2022/primeng-messages.mjs.map +1 -1
  243. package/fesm2022/primeng-metergroup.mjs +4 -4
  244. package/fesm2022/primeng-metergroup.mjs.map +1 -1
  245. package/fesm2022/primeng-multiselect.mjs +6 -9
  246. package/fesm2022/primeng-multiselect.mjs.map +1 -1
  247. package/fesm2022/primeng-orderlist.mjs +4 -4
  248. package/fesm2022/primeng-orderlist.mjs.map +1 -1
  249. package/fesm2022/primeng-organizationchart.mjs +5 -5
  250. package/fesm2022/primeng-organizationchart.mjs.map +1 -1
  251. package/fesm2022/primeng-overlay.mjs +3 -3
  252. package/fesm2022/primeng-overlay.mjs.map +1 -1
  253. package/fesm2022/primeng-overlaybadge.mjs +2 -2
  254. package/fesm2022/primeng-overlaybadge.mjs.map +1 -1
  255. package/fesm2022/primeng-overlaypanel.mjs +7 -4
  256. package/fesm2022/primeng-overlaypanel.mjs.map +1 -1
  257. package/fesm2022/primeng-paginator.mjs +2 -2
  258. package/fesm2022/primeng-paginator.mjs.map +1 -1
  259. package/fesm2022/primeng-panel.mjs +3 -4
  260. package/fesm2022/primeng-panel.mjs.map +1 -1
  261. package/fesm2022/primeng-panelmenu.mjs +9 -9
  262. package/fesm2022/primeng-panelmenu.mjs.map +1 -1
  263. package/fesm2022/primeng-password.mjs +30 -7
  264. package/fesm2022/primeng-password.mjs.map +1 -1
  265. package/fesm2022/primeng-picklist.mjs +135 -139
  266. package/fesm2022/primeng-picklist.mjs.map +1 -1
  267. package/fesm2022/primeng-popover.mjs +9 -8
  268. package/fesm2022/primeng-popover.mjs.map +1 -1
  269. package/fesm2022/primeng-progressbar.mjs +2 -2
  270. package/fesm2022/primeng-progressbar.mjs.map +1 -1
  271. package/fesm2022/primeng-progressspinner.mjs +2 -2
  272. package/fesm2022/primeng-progressspinner.mjs.map +1 -1
  273. package/fesm2022/primeng-radiobutton.mjs +2 -2
  274. package/fesm2022/primeng-radiobutton.mjs.map +1 -1
  275. package/fesm2022/primeng-rating.mjs +4 -4
  276. package/fesm2022/primeng-rating.mjs.map +1 -1
  277. package/fesm2022/primeng-ripple.mjs +5 -2
  278. package/fesm2022/primeng-ripple.mjs.map +1 -1
  279. package/fesm2022/primeng-scroller.mjs +2 -2
  280. package/fesm2022/primeng-scroller.mjs.map +1 -1
  281. package/fesm2022/primeng-scrollpanel.mjs +2 -2
  282. package/fesm2022/primeng-scrollpanel.mjs.map +1 -1
  283. package/fesm2022/primeng-scrolltop.mjs +2 -2
  284. package/fesm2022/primeng-scrolltop.mjs.map +1 -1
  285. package/fesm2022/primeng-select.mjs +9 -11
  286. package/fesm2022/primeng-select.mjs.map +1 -1
  287. package/fesm2022/primeng-selectbutton.mjs +3 -4
  288. package/fesm2022/primeng-selectbutton.mjs.map +1 -1
  289. package/fesm2022/primeng-sidebar.mjs +4 -5
  290. package/fesm2022/primeng-sidebar.mjs.map +1 -1
  291. package/fesm2022/primeng-skeleton.mjs +2 -2
  292. package/fesm2022/primeng-skeleton.mjs.map +1 -1
  293. package/fesm2022/primeng-slider.mjs +2 -2
  294. package/fesm2022/primeng-slider.mjs.map +1 -1
  295. package/fesm2022/primeng-speeddial.mjs +2 -2
  296. package/fesm2022/primeng-speeddial.mjs.map +1 -1
  297. package/fesm2022/primeng-splitbutton.mjs +2 -2
  298. package/fesm2022/primeng-splitbutton.mjs.map +1 -1
  299. package/fesm2022/primeng-splitter.mjs +30 -19
  300. package/fesm2022/primeng-splitter.mjs.map +1 -1
  301. package/fesm2022/primeng-stepper.mjs +16 -16
  302. package/fesm2022/primeng-stepper.mjs.map +1 -1
  303. package/fesm2022/primeng-steps.mjs +2 -2
  304. package/fesm2022/primeng-steps.mjs.map +1 -1
  305. package/fesm2022/primeng-styleclass.mjs +1 -1
  306. package/fesm2022/primeng-styleclass.mjs.map +1 -1
  307. package/fesm2022/primeng-table.mjs +6392 -6520
  308. package/fesm2022/primeng-table.mjs.map +1 -1
  309. package/fesm2022/primeng-tabmenu.mjs +2 -2
  310. package/fesm2022/primeng-tabmenu.mjs.map +1 -1
  311. package/fesm2022/primeng-tabs.mjs +11 -11
  312. package/fesm2022/primeng-tabs.mjs.map +1 -1
  313. package/fesm2022/primeng-tabview.mjs +5 -5
  314. package/fesm2022/primeng-tabview.mjs.map +1 -1
  315. package/fesm2022/primeng-tag.mjs +2 -2
  316. package/fesm2022/primeng-tag.mjs.map +1 -1
  317. package/fesm2022/primeng-terminal.mjs +2 -2
  318. package/fesm2022/primeng-terminal.mjs.map +1 -1
  319. package/fesm2022/primeng-textarea.mjs +8 -8
  320. package/fesm2022/primeng-textarea.mjs.map +1 -1
  321. package/fesm2022/primeng-tieredmenu.mjs +6 -6
  322. package/fesm2022/primeng-tieredmenu.mjs.map +1 -1
  323. package/fesm2022/primeng-timeline.mjs +2 -2
  324. package/fesm2022/primeng-timeline.mjs.map +1 -1
  325. package/fesm2022/primeng-toast.mjs +6 -7
  326. package/fesm2022/primeng-toast.mjs.map +1 -1
  327. package/fesm2022/primeng-togglebutton.mjs +3 -4
  328. package/fesm2022/primeng-togglebutton.mjs.map +1 -1
  329. package/fesm2022/primeng-toggleswitch.mjs +2 -2
  330. package/fesm2022/primeng-toggleswitch.mjs.map +1 -1
  331. package/fesm2022/primeng-toolbar.mjs +2 -2
  332. package/fesm2022/primeng-toolbar.mjs.map +1 -1
  333. package/fesm2022/primeng-tooltip.mjs +5 -3
  334. package/fesm2022/primeng-tooltip.mjs.map +1 -1
  335. package/fesm2022/primeng-tree.mjs +112 -63
  336. package/fesm2022/primeng-tree.mjs.map +1 -1
  337. package/fesm2022/primeng-treeselect.mjs +5 -10
  338. package/fesm2022/primeng-treeselect.mjs.map +1 -1
  339. package/fesm2022/primeng-treetable.mjs +31 -29
  340. package/fesm2022/primeng-treetable.mjs.map +1 -1
  341. package/inputtext/inputtext.d.ts +2 -2
  342. package/package.json +176 -524
  343. package/password/password.d.ts +5 -1
  344. package/popover/popover.d.ts +1 -1
  345. package/speeddial/speeddial.d.ts +2 -2
  346. package/splitter/splitter.d.ts +2 -3
  347. package/splitter/style/splitterstyle.d.ts +0 -13
  348. package/table/table.d.ts +928 -1030
  349. package/textarea/textarea.d.ts +2 -2
  350. package/tree/style/treestyle.d.ts +1 -1
  351. package/tree/tree.d.ts +4 -2
  352. package/treetable/treetable.d.ts +1 -1
  353. package/esm2022/accordion/accordion.mjs +0 -1266
  354. package/esm2022/accordion/primeng-accordion.mjs +0 -5
  355. package/esm2022/accordion/public_api.mjs +0 -3
  356. package/esm2022/accordion/style/accordionstyle.mjs +0 -163
  357. package/esm2022/animateonscroll/animateonscroll.mjs +0 -174
  358. package/esm2022/animateonscroll/primeng-animateonscroll.mjs +0 -5
  359. package/esm2022/animateonscroll/public_api.mjs +0 -2
  360. package/esm2022/api/blockableui.mjs +0 -2
  361. package/esm2022/api/confirmaeventtype.mjs +0 -10
  362. package/esm2022/api/confirmation.mjs +0 -2
  363. package/esm2022/api/confirmationservice.mjs +0 -43
  364. package/esm2022/api/contextmenuservice.mjs +0 -22
  365. package/esm2022/api/filtermatchmode.mjs +0 -23
  366. package/esm2022/api/filtermetadata.mjs +0 -2
  367. package/esm2022/api/filteroperator.mjs +0 -5
  368. package/esm2022/api/filterservice.mjs +0 -224
  369. package/esm2022/api/lazyloadevent.mjs +0 -2
  370. package/esm2022/api/lazyloadmeta.mjs +0 -2
  371. package/esm2022/api/megamenuitem.mjs +0 -2
  372. package/esm2022/api/menuitem.mjs +0 -2
  373. package/esm2022/api/messageservice.mjs +0 -47
  374. package/esm2022/api/overlayoptions.mjs +0 -2
  375. package/esm2022/api/overlayservice.mjs +0 -19
  376. package/esm2022/api/primeicons.mjs +0 -314
  377. package/esm2022/api/primeng-api.mjs +0 -5
  378. package/esm2022/api/public_api.mjs +0 -33
  379. package/esm2022/api/scrolleroptions.mjs +0 -2
  380. package/esm2022/api/selectitem.mjs +0 -2
  381. package/esm2022/api/selectitemgroup.mjs +0 -2
  382. package/esm2022/api/shared.mjs +0 -76
  383. package/esm2022/api/sortevent.mjs +0 -2
  384. package/esm2022/api/sortmeta.mjs +0 -2
  385. package/esm2022/api/tablestate.mjs +0 -2
  386. package/esm2022/api/toastmessage.mjs +0 -2
  387. package/esm2022/api/tooltipoptions.mjs +0 -2
  388. package/esm2022/api/translation.mjs +0 -2
  389. package/esm2022/api/translationkeys.mjs +0 -51
  390. package/esm2022/api/treedragdropservice.mjs +0 -21
  391. package/esm2022/api/treenode.mjs +0 -2
  392. package/esm2022/api/treenodedragevent.mjs +0 -2
  393. package/esm2022/api/treetablenode.mjs +0 -2
  394. package/esm2022/autocomplete/autocomplete.interface.mjs +0 -2
  395. package/esm2022/autocomplete/autocomplete.mjs +0 -2225
  396. package/esm2022/autocomplete/primeng-autocomplete.mjs +0 -5
  397. package/esm2022/autocomplete/public_api.mjs +0 -4
  398. package/esm2022/autocomplete/style/autocompletestyle.mjs +0 -408
  399. package/esm2022/autofocus/autofocus.mjs +0 -86
  400. package/esm2022/autofocus/primeng-autofocus.mjs +0 -5
  401. package/esm2022/autofocus/public_api.mjs +0 -2
  402. package/esm2022/avatar/avatar.mjs +0 -193
  403. package/esm2022/avatar/primeng-avatar.mjs +0 -5
  404. package/esm2022/avatar/public_api.mjs +0 -3
  405. package/esm2022/avatar/style/avatarstyle.mjs +0 -130
  406. package/esm2022/avatargroup/avatargroup.mjs +0 -80
  407. package/esm2022/avatargroup/primeng-avatargroup.mjs +0 -5
  408. package/esm2022/avatargroup/public_api.mjs +0 -3
  409. package/esm2022/avatargroup/style/avatargroupstyle.mjs +0 -29
  410. package/esm2022/badge/badge.mjs +0 -332
  411. package/esm2022/badge/primeng-badge.mjs +0 -5
  412. package/esm2022/badge/public_api.mjs +0 -3
  413. package/esm2022/badge/style/badgestyle.mjs +0 -143
  414. package/esm2022/base/base.mjs +0 -19
  415. package/esm2022/base/primeng-base.mjs +0 -5
  416. package/esm2022/base/public_api.mjs +0 -3
  417. package/esm2022/base/style/basestyle.mjs +0 -256
  418. package/esm2022/basecomponent/basecomponent.mjs +0 -183
  419. package/esm2022/basecomponent/primeng-basecomponent.mjs +0 -5
  420. package/esm2022/basecomponent/public_api.mjs +0 -3
  421. package/esm2022/basecomponent/style/basecomponentstyle.mjs +0 -13
  422. package/esm2022/blockui/blockui.interface.mjs +0 -2
  423. package/esm2022/blockui/blockui.mjs +0 -210
  424. package/esm2022/blockui/primeng-blockui.mjs +0 -5
  425. package/esm2022/blockui/public_api.mjs +0 -4
  426. package/esm2022/blockui/style/blockuistyle.mjs +0 -50
  427. package/esm2022/breadcrumb/breadcrumb.interface.mjs +0 -2
  428. package/esm2022/breadcrumb/breadcrumb.mjs +0 -583
  429. package/esm2022/breadcrumb/primeng-breadcrumb.mjs +0 -5
  430. package/esm2022/breadcrumb/public_api.mjs +0 -4
  431. package/esm2022/breadcrumb/style/breadcrumbstyle.mjs +0 -133
  432. package/esm2022/button/button.interface.mjs +0 -2
  433. package/esm2022/button/button.mjs +0 -896
  434. package/esm2022/button/primeng-button.mjs +0 -5
  435. package/esm2022/button/public_api.mjs +0 -4
  436. package/esm2022/button/style/buttonstyle.mjs +0 -707
  437. package/esm2022/buttongroup/buttongroup.mjs +0 -47
  438. package/esm2022/buttongroup/primeng-buttongroup.mjs +0 -5
  439. package/esm2022/buttongroup/public_api.mjs +0 -3
  440. package/esm2022/buttongroup/style/buttongroupstyle.mjs +0 -120
  441. package/esm2022/calendar/calendar.interface.mjs +0 -2
  442. package/esm2022/calendar/calendar.mjs +0 -4504
  443. package/esm2022/calendar/primeng-calendar.mjs +0 -5
  444. package/esm2022/calendar/public_api.mjs +0 -4
  445. package/esm2022/calendar/style/calendarstyle.mjs +0 -472
  446. package/esm2022/card/card.interface.mjs +0 -2
  447. package/esm2022/card/card.mjs +0 -243
  448. package/esm2022/card/primeng-card.mjs +0 -5
  449. package/esm2022/card/public_api.mjs +0 -4
  450. package/esm2022/card/style/cardstyle.mjs +0 -100
  451. package/esm2022/carousel/carousel.interface.mjs +0 -2
  452. package/esm2022/carousel/carousel.mjs +0 -1181
  453. package/esm2022/carousel/primeng-carousel.mjs +0 -5
  454. package/esm2022/carousel/public_api.mjs +0 -4
  455. package/esm2022/carousel/style/carouselstyle.mjs +0 -234
  456. package/esm2022/cascadeselect/cascadeselect.interface.mjs +0 -2
  457. package/esm2022/cascadeselect/cascadeselect.mjs +0 -1840
  458. package/esm2022/cascadeselect/primeng-cascadeselect.mjs +0 -5
  459. package/esm2022/cascadeselect/public_api.mjs +0 -4
  460. package/esm2022/cascadeselect/style/cascadeselectstyle.mjs +0 -379
  461. package/esm2022/chart/chart.mjs +0 -210
  462. package/esm2022/chart/primeng-chart.mjs +0 -5
  463. package/esm2022/chart/public_api.mjs +0 -3
  464. package/esm2022/chart/style/chartstyle.mjs +0 -36
  465. package/esm2022/checkbox/checkbox.interface.mjs +0 -2
  466. package/esm2022/checkbox/checkbox.mjs +0 -450
  467. package/esm2022/checkbox/primeng-checkbox.mjs +0 -5
  468. package/esm2022/checkbox/public_api.mjs +0 -4
  469. package/esm2022/checkbox/style/checkboxstyle.mjs +0 -191
  470. package/esm2022/chip/chip.interface.mjs +0 -2
  471. package/esm2022/chip/chip.mjs +0 -337
  472. package/esm2022/chip/primeng-chip.mjs +0 -5
  473. package/esm2022/chip/public_api.mjs +0 -4
  474. package/esm2022/chip/style/chipstyle.mjs +0 -104
  475. package/esm2022/colorpicker/colorpicker.interface.mjs +0 -2
  476. package/esm2022/colorpicker/colorpicker.mjs +0 -856
  477. package/esm2022/colorpicker/primeng-colorpicker.mjs +0 -5
  478. package/esm2022/colorpicker/public_api.mjs +0 -4
  479. package/esm2022/colorpicker/style/colorpickerstyle.mjs +0 -213
  480. package/esm2022/config/primeng-config.mjs +0 -5
  481. package/esm2022/config/primeng.mjs +0 -189
  482. package/esm2022/config/provideprimeng.mjs +0 -11
  483. package/esm2022/config/public_api.mjs +0 -4
  484. package/esm2022/config/themeprovider.mjs +0 -74
  485. package/esm2022/confirmdialog/confirmdialog.interface.mjs +0 -2
  486. package/esm2022/confirmdialog/confirmdialog.mjs +0 -810
  487. package/esm2022/confirmdialog/primeng-confirmdialog.mjs +0 -5
  488. package/esm2022/confirmdialog/public_api.mjs +0 -4
  489. package/esm2022/confirmdialog/style/confirmdialogstyle.mjs +0 -67
  490. package/esm2022/confirmpopup/confirmpopup.interface.mjs +0 -2
  491. package/esm2022/confirmpopup/confirmpopup.mjs +0 -619
  492. package/esm2022/confirmpopup/primeng-confirmpopup.mjs +0 -5
  493. package/esm2022/confirmpopup/public_api.mjs +0 -4
  494. package/esm2022/confirmpopup/style/confirmpopupstyle.mjs +0 -170
  495. package/esm2022/contextmenu/contextmenu.mjs +0 -1436
  496. package/esm2022/contextmenu/primeng-contextmenu.mjs +0 -5
  497. package/esm2022/contextmenu/public_api.mjs +0 -3
  498. package/esm2022/contextmenu/style/contextmenustyle.mjs +0 -244
  499. package/esm2022/dataview/dataview.interface.mjs +0 -2
  500. package/esm2022/dataview/dataview.mjs +0 -819
  501. package/esm2022/dataview/primeng-dataview.mjs +0 -5
  502. package/esm2022/dataview/public_api.mjs +0 -4
  503. package/esm2022/dataview/style/dataviewstyle.mjs +0 -115
  504. package/esm2022/datepicker/datepicker.interface.mjs +0 -2
  505. package/esm2022/datepicker/datepicker.mjs +0 -4539
  506. package/esm2022/datepicker/primeng-datepicker.mjs +0 -5
  507. package/esm2022/datepicker/public_api.mjs +0 -4
  508. package/esm2022/datepicker/style/datepickerstyle.mjs +0 -663
  509. package/esm2022/defer/defer.mjs +0 -100
  510. package/esm2022/defer/primeng-defer.mjs +0 -5
  511. package/esm2022/defer/public_api.mjs +0 -2
  512. package/esm2022/dialog/dialog.interface.mjs +0 -2
  513. package/esm2022/dialog/dialog.mjs +0 -1384
  514. package/esm2022/dialog/primeng-dialog.mjs +0 -5
  515. package/esm2022/dialog/public_api.mjs +0 -4
  516. package/esm2022/dialog/style/dialogstyle.mjs +0 -283
  517. package/esm2022/divider/divider.mjs +0 -119
  518. package/esm2022/divider/primeng-divider.mjs +0 -5
  519. package/esm2022/divider/public_api.mjs +0 -3
  520. package/esm2022/divider/style/dividerstyle.mjs +0 -138
  521. package/esm2022/dock/dock.interface.mjs +0 -2
  522. package/esm2022/dock/dock.mjs +0 -447
  523. package/esm2022/dock/primeng-dock.mjs +0 -5
  524. package/esm2022/dock/public_api.mjs +0 -4
  525. package/esm2022/dock/style/dockstyle.mjs +0 -210
  526. package/esm2022/dom/connectedoverlayscrollhandler.mjs +0 -30
  527. package/esm2022/dom/domhandler.mjs +0 -725
  528. package/esm2022/dom/primeng-dom.mjs +0 -5
  529. package/esm2022/dom/public_api.mjs +0 -3
  530. package/esm2022/dragdrop/dragdrop.mjs +0 -323
  531. package/esm2022/dragdrop/primeng-dragdrop.mjs +0 -5
  532. package/esm2022/dragdrop/public_api.mjs +0 -2
  533. package/esm2022/drawer/drawer.interface.mjs +0 -2
  534. package/esm2022/drawer/drawer.mjs +0 -663
  535. package/esm2022/drawer/primeng-drawer.mjs +0 -5
  536. package/esm2022/drawer/public_api.mjs +0 -4
  537. package/esm2022/drawer/style/drawerstyle.mjs +0 -283
  538. package/esm2022/dropdown/dropdown.interface.mjs +0 -2
  539. package/esm2022/dropdown/dropdown.mjs +0 -2498
  540. package/esm2022/dropdown/primeng-dropdown.mjs +0 -5
  541. package/esm2022/dropdown/public_api.mjs +0 -4
  542. package/esm2022/dropdown/style/dropdownstyle.mjs +0 -264
  543. package/esm2022/dynamicdialog/dialogservice.mjs +0 -105
  544. package/esm2022/dynamicdialog/dynamicdialog-config.mjs +0 -182
  545. package/esm2022/dynamicdialog/dynamicdialog-injector.mjs +0 -15
  546. package/esm2022/dynamicdialog/dynamicdialog-ref.mjs +0 -119
  547. package/esm2022/dynamicdialog/dynamicdialog.mjs +0 -875
  548. package/esm2022/dynamicdialog/dynamicdialogcontent.mjs +0 -18
  549. package/esm2022/dynamicdialog/primeng-dynamicdialog.mjs +0 -5
  550. package/esm2022/dynamicdialog/public_api.mjs +0 -8
  551. package/esm2022/dynamicdialog/style/dynamicdialogstyle.mjs +0 -60
  552. package/esm2022/editor/editor.interface.mjs +0 -2
  553. package/esm2022/editor/editor.mjs +0 -427
  554. package/esm2022/editor/primeng-editor.mjs +0 -5
  555. package/esm2022/editor/public_api.mjs +0 -4
  556. package/esm2022/editor/style/editorstyle.mjs +0 -1008
  557. package/esm2022/fieldset/fieldset.interface.mjs +0 -2
  558. package/esm2022/fieldset/fieldset.mjs +0 -427
  559. package/esm2022/fieldset/primeng-fieldset.mjs +0 -5
  560. package/esm2022/fieldset/public_api.mjs +0 -4
  561. package/esm2022/fieldset/style/fieldsetstyle.mjs +0 -143
  562. package/esm2022/fileupload/fileupload.interface.mjs +0 -2
  563. package/esm2022/fileupload/fileupload.mjs +0 -1597
  564. package/esm2022/fileupload/primeng-fileupload.mjs +0 -5
  565. package/esm2022/fileupload/public_api.mjs +0 -4
  566. package/esm2022/fileupload/style/fileuploadstyle.mjs +0 -194
  567. package/esm2022/floatlabel/floatlabel.mjs +0 -61
  568. package/esm2022/floatlabel/primeng-floatlabel.mjs +0 -5
  569. package/esm2022/floatlabel/public_api.mjs +0 -3
  570. package/esm2022/floatlabel/style/floatlabelstyle.mjs +0 -133
  571. package/esm2022/fluid/fluid.mjs +0 -50
  572. package/esm2022/fluid/primeng-fluid.mjs +0 -5
  573. package/esm2022/fluid/public_api.mjs +0 -3
  574. package/esm2022/fluid/style/fluidstyle.mjs +0 -38
  575. package/esm2022/focustrap/focustrap.mjs +0 -104
  576. package/esm2022/focustrap/primeng-focustrap.mjs +0 -5
  577. package/esm2022/focustrap/public_api.mjs +0 -2
  578. package/esm2022/galleria/galleria.interface.mjs +0 -2
  579. package/esm2022/galleria/galleria.mjs +0 -1858
  580. package/esm2022/galleria/primeng-galleria.mjs +0 -5
  581. package/esm2022/galleria/public_api.mjs +0 -4
  582. package/esm2022/galleria/style/galleriastyle.mjs +0 -644
  583. package/esm2022/iconfield/iconfield.mjs +0 -73
  584. package/esm2022/iconfield/primeng-iconfield.mjs +0 -5
  585. package/esm2022/iconfield/public_api.mjs +0 -3
  586. package/esm2022/iconfield/style/iconfieldstyle.mjs +0 -77
  587. package/esm2022/icons/angledoubledown/angledoubledown.mjs +0 -34
  588. package/esm2022/icons/angledoubledown/primeng-icons-angledoubledown.mjs +0 -5
  589. package/esm2022/icons/angledoubledown/public_api.mjs +0 -2
  590. package/esm2022/icons/angledoubleleft/angledoubleleft.mjs +0 -34
  591. package/esm2022/icons/angledoubleleft/primeng-icons-angledoubleleft.mjs +0 -5
  592. package/esm2022/icons/angledoubleleft/public_api.mjs +0 -2
  593. package/esm2022/icons/angledoubleright/angledoubleright.mjs +0 -34
  594. package/esm2022/icons/angledoubleright/primeng-icons-angledoubleright.mjs +0 -5
  595. package/esm2022/icons/angledoubleright/public_api.mjs +0 -2
  596. package/esm2022/icons/angledoubleup/angledoubleup.mjs +0 -34
  597. package/esm2022/icons/angledoubleup/primeng-icons-angledoubleup.mjs +0 -5
  598. package/esm2022/icons/angledoubleup/public_api.mjs +0 -2
  599. package/esm2022/icons/angledown/angledown.mjs +0 -32
  600. package/esm2022/icons/angledown/primeng-icons-angledown.mjs +0 -5
  601. package/esm2022/icons/angledown/public_api.mjs +0 -2
  602. package/esm2022/icons/angleleft/angleleft.mjs +0 -32
  603. package/esm2022/icons/angleleft/primeng-icons-angleleft.mjs +0 -5
  604. package/esm2022/icons/angleleft/public_api.mjs +0 -2
  605. package/esm2022/icons/angleright/angleright.mjs +0 -32
  606. package/esm2022/icons/angleright/primeng-icons-angleright.mjs +0 -5
  607. package/esm2022/icons/angleright/public_api.mjs +0 -2
  608. package/esm2022/icons/angleup/angleup.mjs +0 -32
  609. package/esm2022/icons/angleup/primeng-icons-angleup.mjs +0 -5
  610. package/esm2022/icons/angleup/public_api.mjs +0 -2
  611. package/esm2022/icons/arrowdown/arrowdown.mjs +0 -53
  612. package/esm2022/icons/arrowdown/primeng-icons-arrowdown.mjs +0 -5
  613. package/esm2022/icons/arrowdown/public_api.mjs +0 -2
  614. package/esm2022/icons/arrowdownleft/arrowdownleft.mjs +0 -32
  615. package/esm2022/icons/arrowdownleft/primeng-icons-arrowdownleft.mjs +0 -5
  616. package/esm2022/icons/arrowdownleft/public_api.mjs +0 -2
  617. package/esm2022/icons/arrowdownright/arrowdownright.mjs +0 -32
  618. package/esm2022/icons/arrowdownright/primeng-icons-arrowdownright.mjs +0 -5
  619. package/esm2022/icons/arrowdownright/public_api.mjs +0 -2
  620. package/esm2022/icons/arrowleft/arrowleft.mjs +0 -53
  621. package/esm2022/icons/arrowleft/primeng-icons-arrowleft.mjs +0 -5
  622. package/esm2022/icons/arrowleft/public_api.mjs +0 -2
  623. package/esm2022/icons/arrowright/arrowright.mjs +0 -34
  624. package/esm2022/icons/arrowright/primeng-icons-arrowright.mjs +0 -5
  625. package/esm2022/icons/arrowright/public_api.mjs +0 -2
  626. package/esm2022/icons/arrowup/arrowup.mjs +0 -53
  627. package/esm2022/icons/arrowup/primeng-icons-arrowup.mjs +0 -5
  628. package/esm2022/icons/arrowup/public_api.mjs +0 -2
  629. package/esm2022/icons/ban/ban.mjs +0 -51
  630. package/esm2022/icons/ban/primeng-icons-ban.mjs +0 -5
  631. package/esm2022/icons/ban/public_api.mjs +0 -2
  632. package/esm2022/icons/bars/bars.mjs +0 -34
  633. package/esm2022/icons/bars/primeng-icons-bars.mjs +0 -5
  634. package/esm2022/icons/bars/public_api.mjs +0 -2
  635. package/esm2022/icons/baseicon/baseicon.mjs +0 -54
  636. package/esm2022/icons/baseicon/primeng-icons-baseicon.mjs +0 -5
  637. package/esm2022/icons/baseicon/public_api.mjs +0 -3
  638. package/esm2022/icons/baseicon/style/baseiconstyle.mjs +0 -57
  639. package/esm2022/icons/blank/blank.mjs +0 -26
  640. package/esm2022/icons/blank/primeng-icons-blank.mjs +0 -5
  641. package/esm2022/icons/blank/public_api.mjs +0 -2
  642. package/esm2022/icons/calendar/calendar.mjs +0 -32
  643. package/esm2022/icons/calendar/primeng-icons-calendar.mjs +0 -5
  644. package/esm2022/icons/calendar/public_api.mjs +0 -2
  645. package/esm2022/icons/caretleft/caretleft.mjs +0 -32
  646. package/esm2022/icons/caretleft/primeng-icons-caretleft.mjs +0 -5
  647. package/esm2022/icons/caretleft/public_api.mjs +0 -2
  648. package/esm2022/icons/caretright/caretright.mjs +0 -32
  649. package/esm2022/icons/caretright/primeng-icons-caretright.mjs +0 -5
  650. package/esm2022/icons/caretright/public_api.mjs +0 -2
  651. package/esm2022/icons/check/check.mjs +0 -32
  652. package/esm2022/icons/check/primeng-icons-check.mjs +0 -5
  653. package/esm2022/icons/check/public_api.mjs +0 -2
  654. package/esm2022/icons/chevrondown/chevrondown.mjs +0 -32
  655. package/esm2022/icons/chevrondown/primeng-icons-chevrondown.mjs +0 -5
  656. package/esm2022/icons/chevrondown/public_api.mjs +0 -2
  657. package/esm2022/icons/chevronleft/chevronleft.mjs +0 -32
  658. package/esm2022/icons/chevronleft/primeng-icons-chevronleft.mjs +0 -5
  659. package/esm2022/icons/chevronleft/public_api.mjs +0 -2
  660. package/esm2022/icons/chevronright/chevronright.mjs +0 -32
  661. package/esm2022/icons/chevronright/primeng-icons-chevronright.mjs +0 -5
  662. package/esm2022/icons/chevronright/public_api.mjs +0 -2
  663. package/esm2022/icons/chevronup/chevronup.mjs +0 -32
  664. package/esm2022/icons/chevronup/primeng-icons-chevronup.mjs +0 -5
  665. package/esm2022/icons/chevronup/public_api.mjs +0 -2
  666. package/esm2022/icons/exclamationtriangle/exclamationtriangle.mjs +0 -59
  667. package/esm2022/icons/exclamationtriangle/primeng-icons-exclamationtriangle.mjs +0 -5
  668. package/esm2022/icons/exclamationtriangle/public_api.mjs +0 -2
  669. package/esm2022/icons/eye/eye.mjs +0 -34
  670. package/esm2022/icons/eye/primeng-icons-eye.mjs +0 -5
  671. package/esm2022/icons/eye/public_api.mjs +0 -2
  672. package/esm2022/icons/eyeslash/eyeslash.mjs +0 -53
  673. package/esm2022/icons/eyeslash/primeng-icons-eyeslash.mjs +0 -5
  674. package/esm2022/icons/eyeslash/public_api.mjs +0 -2
  675. package/esm2022/icons/filter/filter.mjs +0 -51
  676. package/esm2022/icons/filter/primeng-icons-filter.mjs +0 -5
  677. package/esm2022/icons/filter/public_api.mjs +0 -2
  678. package/esm2022/icons/filterslash/filterslash.mjs +0 -53
  679. package/esm2022/icons/filterslash/primeng-icons-filterslash.mjs +0 -5
  680. package/esm2022/icons/filterslash/public_api.mjs +0 -2
  681. package/esm2022/icons/home/home.mjs +0 -53
  682. package/esm2022/icons/home/primeng-icons-home.mjs +0 -5
  683. package/esm2022/icons/home/public_api.mjs +0 -2
  684. package/esm2022/icons/infocircle/infocircle.mjs +0 -53
  685. package/esm2022/icons/infocircle/primeng-icons-infocircle.mjs +0 -5
  686. package/esm2022/icons/infocircle/public_api.mjs +0 -2
  687. package/esm2022/icons/minus/minus.mjs +0 -32
  688. package/esm2022/icons/minus/primeng-icons-minus.mjs +0 -5
  689. package/esm2022/icons/minus/public_api.mjs +0 -2
  690. package/esm2022/icons/pencil/pencil.mjs +0 -51
  691. package/esm2022/icons/pencil/primeng-icons-pencil.mjs +0 -5
  692. package/esm2022/icons/pencil/public_api.mjs +0 -2
  693. package/esm2022/icons/plus/plus.mjs +0 -51
  694. package/esm2022/icons/plus/primeng-icons-plus.mjs +0 -5
  695. package/esm2022/icons/plus/public_api.mjs +0 -2
  696. package/esm2022/icons/primeng-icons.mjs +0 -5
  697. package/esm2022/icons/public_api.mjs +0 -58
  698. package/esm2022/icons/refresh/primeng-icons-refresh.mjs +0 -5
  699. package/esm2022/icons/refresh/public_api.mjs +0 -2
  700. package/esm2022/icons/refresh/refresh.mjs +0 -53
  701. package/esm2022/icons/search/primeng-icons-search.mjs +0 -5
  702. package/esm2022/icons/search/public_api.mjs +0 -2
  703. package/esm2022/icons/search/search.mjs +0 -53
  704. package/esm2022/icons/searchminus/primeng-icons-searchminus.mjs +0 -5
  705. package/esm2022/icons/searchminus/public_api.mjs +0 -2
  706. package/esm2022/icons/searchminus/searchminus.mjs +0 -53
  707. package/esm2022/icons/searchplus/primeng-icons-searchplus.mjs +0 -5
  708. package/esm2022/icons/searchplus/public_api.mjs +0 -2
  709. package/esm2022/icons/searchplus/searchplus.mjs +0 -53
  710. package/esm2022/icons/sortalt/primeng-icons-sortalt.mjs +0 -5
  711. package/esm2022/icons/sortalt/public_api.mjs +0 -2
  712. package/esm2022/icons/sortalt/sortalt.mjs +0 -57
  713. package/esm2022/icons/sortamountdown/primeng-icons-sortamountdown.mjs +0 -5
  714. package/esm2022/icons/sortamountdown/public_api.mjs +0 -2
  715. package/esm2022/icons/sortamountdown/sortamountdown.mjs +0 -51
  716. package/esm2022/icons/sortamountupalt/primeng-icons-sortamountupalt.mjs +0 -5
  717. package/esm2022/icons/sortamountupalt/public_api.mjs +0 -2
  718. package/esm2022/icons/sortamountupalt/sortamountupalt.mjs +0 -51
  719. package/esm2022/icons/spinner/primeng-icons-spinner.mjs +0 -5
  720. package/esm2022/icons/spinner/public_api.mjs +0 -2
  721. package/esm2022/icons/spinner/spinner.mjs +0 -51
  722. package/esm2022/icons/star/primeng-icons-star.mjs +0 -5
  723. package/esm2022/icons/star/public_api.mjs +0 -2
  724. package/esm2022/icons/star/star.mjs +0 -51
  725. package/esm2022/icons/starfill/primeng-icons-starfill.mjs +0 -5
  726. package/esm2022/icons/starfill/public_api.mjs +0 -2
  727. package/esm2022/icons/starfill/starfill.mjs +0 -51
  728. package/esm2022/icons/thlarge/primeng-icons-thlarge.mjs +0 -5
  729. package/esm2022/icons/thlarge/public_api.mjs +0 -2
  730. package/esm2022/icons/thlarge/thlarge.mjs +0 -53
  731. package/esm2022/icons/times/primeng-icons-times.mjs +0 -5
  732. package/esm2022/icons/times/public_api.mjs +0 -2
  733. package/esm2022/icons/times/times.mjs +0 -32
  734. package/esm2022/icons/timescircle/primeng-icons-timescircle.mjs +0 -5
  735. package/esm2022/icons/timescircle/public_api.mjs +0 -2
  736. package/esm2022/icons/timescircle/timescircle.mjs +0 -53
  737. package/esm2022/icons/trash/primeng-icons-trash.mjs +0 -5
  738. package/esm2022/icons/trash/public_api.mjs +0 -2
  739. package/esm2022/icons/trash/trash.mjs +0 -53
  740. package/esm2022/icons/undo/primeng-icons-undo.mjs +0 -5
  741. package/esm2022/icons/undo/public_api.mjs +0 -2
  742. package/esm2022/icons/undo/undo.mjs +0 -53
  743. package/esm2022/icons/upload/primeng-icons-upload.mjs +0 -5
  744. package/esm2022/icons/upload/public_api.mjs +0 -2
  745. package/esm2022/icons/upload/upload.mjs +0 -53
  746. package/esm2022/icons/windowmaximize/primeng-icons-windowmaximize.mjs +0 -5
  747. package/esm2022/icons/windowmaximize/public_api.mjs +0 -2
  748. package/esm2022/icons/windowmaximize/windowmaximize.mjs +0 -53
  749. package/esm2022/icons/windowminimize/primeng-icons-windowminimize.mjs +0 -5
  750. package/esm2022/icons/windowminimize/public_api.mjs +0 -2
  751. package/esm2022/icons/windowminimize/windowminimize.mjs +0 -53
  752. package/esm2022/iftalabel/iftalabel.mjs +0 -49
  753. package/esm2022/iftalabel/primeng-iftalabel.mjs +0 -5
  754. package/esm2022/iftalabel/public_api.mjs +0 -3
  755. package/esm2022/iftalabel/style/iftalabelstyle.mjs +0 -96
  756. package/esm2022/image/image.interface.mjs +0 -2
  757. package/esm2022/image/image.mjs +0 -747
  758. package/esm2022/image/primeng-image.mjs +0 -5
  759. package/esm2022/image/public_api.mjs +0 -4
  760. package/esm2022/image/style/imagestyle.mjs +0 -219
  761. package/esm2022/imagecompare/imagecompare.mjs +0 -158
  762. package/esm2022/imagecompare/primeng-imagecompare.mjs +0 -5
  763. package/esm2022/imagecompare/public_api.mjs +0 -3
  764. package/esm2022/imagecompare/style/imagecomparestyle.mjs +0 -124
  765. package/esm2022/inplace/inplace.interface.mjs +0 -2
  766. package/esm2022/inplace/inplace.mjs +0 -344
  767. package/esm2022/inplace/primeng-inplace.mjs +0 -5
  768. package/esm2022/inplace/public_api.mjs +0 -4
  769. package/esm2022/inplace/style/inplacestyle.mjs +0 -69
  770. package/esm2022/inputgroup/inputgroup.mjs +0 -68
  771. package/esm2022/inputgroup/primeng-inputgroup.mjs +0 -5
  772. package/esm2022/inputgroup/public_api.mjs +0 -3
  773. package/esm2022/inputgroup/style/inputgroupstyle.mjs +0 -145
  774. package/esm2022/inputgroupaddon/inputgroupaddon.mjs +0 -74
  775. package/esm2022/inputgroupaddon/primeng-inputgroupaddon.mjs +0 -5
  776. package/esm2022/inputgroupaddon/public_api.mjs +0 -3
  777. package/esm2022/inputgroupaddon/style/inputgroupaddonstyle.mjs +0 -16
  778. package/esm2022/inputicon/inputicon.mjs +0 -66
  779. package/esm2022/inputicon/primeng-inputicon.mjs +0 -5
  780. package/esm2022/inputicon/public_api.mjs +0 -3
  781. package/esm2022/inputicon/style/inputiconstyle.mjs +0 -16
  782. package/esm2022/inputmask/inputmask.interface.mjs +0 -2
  783. package/esm2022/inputmask/inputmask.mjs +0 -911
  784. package/esm2022/inputmask/primeng-inputmask.mjs +0 -5
  785. package/esm2022/inputmask/public_api.mjs +0 -4
  786. package/esm2022/inputmask/style/inputmaskstyle.mjs +0 -62
  787. package/esm2022/inputnumber/inputnumber.interface.mjs +0 -2
  788. package/esm2022/inputnumber/inputnumber.mjs +0 -1745
  789. package/esm2022/inputnumber/primeng-inputnumber.mjs +0 -5
  790. package/esm2022/inputnumber/public_api.mjs +0 -4
  791. package/esm2022/inputnumber/style/inputnumberstyle.mjs +0 -240
  792. package/esm2022/inputotp/inputotp.mjs +0 -406
  793. package/esm2022/inputotp/primeng-inputotp.mjs +0 -5
  794. package/esm2022/inputotp/public_api.mjs +0 -3
  795. package/esm2022/inputotp/style/inputotpstyle.mjs +0 -60
  796. package/esm2022/inputswitch/inputswitch.interface.mjs +0 -2
  797. package/esm2022/inputswitch/inputswitch.mjs +0 -241
  798. package/esm2022/inputswitch/primeng-inputswitch.mjs +0 -5
  799. package/esm2022/inputswitch/public_api.mjs +0 -4
  800. package/esm2022/inputswitch/style/inputswitchstyle.mjs +0 -130
  801. package/esm2022/inputtext/inputtext.mjs +0 -103
  802. package/esm2022/inputtext/primeng-inputtext.mjs +0 -5
  803. package/esm2022/inputtext/public_api.mjs +0 -3
  804. package/esm2022/inputtext/style/inputtextstyle.mjs +0 -117
  805. package/esm2022/inputtextarea/inputtextarea.mjs +0 -156
  806. package/esm2022/inputtextarea/primeng-inputtextarea.mjs +0 -5
  807. package/esm2022/inputtextarea/public_api.mjs +0 -3
  808. package/esm2022/inputtextarea/style/textareastyle.mjs +0 -107
  809. package/esm2022/keyfilter/keyfilter.interface.mjs +0 -2
  810. package/esm2022/keyfilter/keyfilter.mjs +0 -263
  811. package/esm2022/keyfilter/primeng-keyfilter.mjs +0 -5
  812. package/esm2022/keyfilter/public_api.mjs +0 -3
  813. package/esm2022/knob/knob.mjs +0 -471
  814. package/esm2022/knob/primeng-knob.mjs +0 -5
  815. package/esm2022/knob/public_api.mjs +0 -3
  816. package/esm2022/knob/style/knobstyle.mjs +0 -83
  817. package/esm2022/listbox/listbox.interface.mjs +0 -2
  818. package/esm2022/listbox/listbox.mjs +0 -2044
  819. package/esm2022/listbox/primeng-listbox.mjs +0 -5
  820. package/esm2022/listbox/public_api.mjs +0 -4
  821. package/esm2022/listbox/style/listboxstyle.mjs +0 -206
  822. package/esm2022/megamenu/megamenu.interface.mjs +0 -2
  823. package/esm2022/megamenu/megamenu.mjs +0 -1607
  824. package/esm2022/megamenu/primeng-megamenu.mjs +0 -5
  825. package/esm2022/megamenu/public_api.mjs +0 -4
  826. package/esm2022/megamenu/style/megamenustyle.mjs +0 -487
  827. package/esm2022/menu/menu.mjs +0 -1193
  828. package/esm2022/menu/primeng-menu.mjs +0 -5
  829. package/esm2022/menu/public_api.mjs +0 -3
  830. package/esm2022/menu/style/menustyle.mjs +0 -179
  831. package/esm2022/menubar/menubar.interface.mjs +0 -2
  832. package/esm2022/menubar/menubar.mjs +0 -1484
  833. package/esm2022/menubar/primeng-menubar.mjs +0 -5
  834. package/esm2022/menubar/public_api.mjs +0 -4
  835. package/esm2022/menubar/style/menubarstyle.mjs +0 -375
  836. package/esm2022/message/message.mjs +0 -421
  837. package/esm2022/message/primeng-message.mjs +0 -5
  838. package/esm2022/message/public_api.mjs +0 -3
  839. package/esm2022/message/style/messagestyle.mjs +0 -357
  840. package/esm2022/messages/messages.interface.mjs +0 -2
  841. package/esm2022/messages/messages.mjs +0 -529
  842. package/esm2022/messages/primeng-messages.mjs +0 -5
  843. package/esm2022/messages/public_api.mjs +0 -4
  844. package/esm2022/messages/style/messagesstyle.mjs +0 -229
  845. package/esm2022/metergroup/metergroup.interface.mjs +0 -2
  846. package/esm2022/metergroup/metergroup.mjs +0 -423
  847. package/esm2022/metergroup/primeng-metergroup.mjs +0 -5
  848. package/esm2022/metergroup/public_api.mjs +0 -4
  849. package/esm2022/metergroup/style/metergroupstyle.mjs +0 -169
  850. package/esm2022/multiselect/multiselect.interface.mjs +0 -2
  851. package/esm2022/multiselect/multiselect.mjs +0 -2924
  852. package/esm2022/multiselect/primeng-multiselect.mjs +0 -5
  853. package/esm2022/multiselect/public_api.mjs +0 -4
  854. package/esm2022/multiselect/style/multiselectstyle.mjs +0 -376
  855. package/esm2022/orderlist/orderlist.interface.mjs +0 -2
  856. package/esm2022/orderlist/orderlist.mjs +0 -1121
  857. package/esm2022/orderlist/primeng-orderlist.mjs +0 -5
  858. package/esm2022/orderlist/public_api.mjs +0 -4
  859. package/esm2022/orderlist/style/orderliststyle.mjs +0 -51
  860. package/esm2022/organizationchart/organizationchart.interface.mjs +0 -2
  861. package/esm2022/organizationchart/organizationchart.mjs +0 -591
  862. package/esm2022/organizationchart/primeng-organizationchart.mjs +0 -5
  863. package/esm2022/organizationchart/public_api.mjs +0 -4
  864. package/esm2022/organizationchart/style/organizationchartstyle.mjs +0 -191
  865. package/esm2022/overlay/overlay.mjs +0 -668
  866. package/esm2022/overlay/primeng-overlay.mjs +0 -5
  867. package/esm2022/overlay/public_api.mjs +0 -3
  868. package/esm2022/overlay/style/overlaystyle.mjs +0 -93
  869. package/esm2022/overlaybadge/overlaybadge.mjs +0 -121
  870. package/esm2022/overlaybadge/primeng-overlaybadge.mjs +0 -5
  871. package/esm2022/overlaybadge/public_api.mjs +0 -3
  872. package/esm2022/overlaybadge/style/overlaybadgestyle.mjs +0 -34
  873. package/esm2022/overlaypanel/overlaypanel.mjs +0 -529
  874. package/esm2022/overlaypanel/primeng-overlaypanel.mjs +0 -5
  875. package/esm2022/overlaypanel/public_api.mjs +0 -3
  876. package/esm2022/overlaypanel/style/popoverstyle.mjs +0 -119
  877. package/esm2022/paginator/paginator.interface.mjs +0 -2
  878. package/esm2022/paginator/paginator.mjs +0 -893
  879. package/esm2022/paginator/primeng-paginator.mjs +0 -5
  880. package/esm2022/paginator/public_api.mjs +0 -4
  881. package/esm2022/paginator/style/paginatorstyle.mjs +0 -243
  882. package/esm2022/panel/panel.mjs +0 -585
  883. package/esm2022/panel/primeng-panel.mjs +0 -5
  884. package/esm2022/panel/public_api.mjs +0 -3
  885. package/esm2022/panel/style/panelstyle.mjs +0 -120
  886. package/esm2022/panelmenu/panelmenu.interface.mjs +0 -2
  887. package/esm2022/panelmenu/panelmenu.mjs +0 -1628
  888. package/esm2022/panelmenu/primeng-panelmenu.mjs +0 -5
  889. package/esm2022/panelmenu/public_api.mjs +0 -4
  890. package/esm2022/panelmenu/style/panelmenustyle.mjs +0 -291
  891. package/esm2022/password/password.mjs +0 -1178
  892. package/esm2022/password/primeng-password.mjs +0 -5
  893. package/esm2022/password/public_api.mjs +0 -3
  894. package/esm2022/password/style/passwordstyle.mjs +0 -182
  895. package/esm2022/picklist/picklist.interface.mjs +0 -2
  896. package/esm2022/picklist/picklist.mjs +0 -2298
  897. package/esm2022/picklist/primeng-picklist.mjs +0 -5
  898. package/esm2022/picklist/public_api.mjs +0 -4
  899. package/esm2022/picklist/style/pickliststyle.mjs +0 -79
  900. package/esm2022/popover/popover.mjs +0 -518
  901. package/esm2022/popover/primeng-popover.mjs +0 -5
  902. package/esm2022/popover/public_api.mjs +0 -3
  903. package/esm2022/popover/style/popoverstyle.mjs +0 -99
  904. package/esm2022/primeng.mjs +0 -5
  905. package/esm2022/progressbar/primeng-progressbar.mjs +0 -5
  906. package/esm2022/progressbar/progressbar.mjs +0 -197
  907. package/esm2022/progressbar/public_api.mjs +0 -3
  908. package/esm2022/progressbar/style/progressbarstyle.mjs +0 -165
  909. package/esm2022/progressspinner/primeng-progressspinner.mjs +0 -5
  910. package/esm2022/progressspinner/progressspinner.mjs +0 -105
  911. package/esm2022/progressspinner/public_api.mjs +0 -3
  912. package/esm2022/progressspinner/style/progressspinnerstyle.mjs +0 -115
  913. package/esm2022/public_api.mjs +0 -2
  914. package/esm2022/radiobutton/primeng-radiobutton.mjs +0 -5
  915. package/esm2022/radiobutton/public_api.mjs +0 -4
  916. package/esm2022/radiobutton/radiobutton.interface.mjs +0 -2
  917. package/esm2022/radiobutton/radiobutton.mjs +0 -356
  918. package/esm2022/radiobutton/style/radiobuttonstyle.mjs +0 -196
  919. package/esm2022/rating/primeng-rating.mjs +0 -5
  920. package/esm2022/rating/public_api.mjs +0 -4
  921. package/esm2022/rating/rating.interface.mjs +0 -2
  922. package/esm2022/rating/rating.mjs +0 -425
  923. package/esm2022/rating/style/ratingstyle.mjs +0 -103
  924. package/esm2022/ripple/primeng-ripple.mjs +0 -5
  925. package/esm2022/ripple/public_api.mjs +0 -3
  926. package/esm2022/ripple/ripple.mjs +0 -131
  927. package/esm2022/ripple/style/ripplestyle.mjs +0 -63
  928. package/esm2022/scroller/primeng-scroller.mjs +0 -5
  929. package/esm2022/scroller/public_api.mjs +0 -4
  930. package/esm2022/scroller/scroller.interface.mjs +0 -2
  931. package/esm2022/scroller/scroller.mjs +0 -1290
  932. package/esm2022/scroller/style/scrollerstyle.mjs +0 -104
  933. package/esm2022/scrollpanel/primeng-scrollpanel.mjs +0 -5
  934. package/esm2022/scrollpanel/public_api.mjs +0 -4
  935. package/esm2022/scrollpanel/scrollpanel.interface.mjs +0 -2
  936. package/esm2022/scrollpanel/scrollpanel.mjs +0 -506
  937. package/esm2022/scrollpanel/style/scrollpanelstyle.mjs +0 -120
  938. package/esm2022/scrolltop/primeng-scrolltop.mjs +0 -5
  939. package/esm2022/scrolltop/public_api.mjs +0 -4
  940. package/esm2022/scrolltop/scrolltop.interface.mjs +0 -2
  941. package/esm2022/scrolltop/scrolltop.mjs +0 -336
  942. package/esm2022/scrolltop/style/scrolltopstyle.mjs +0 -77
  943. package/esm2022/select/primeng-select.mjs +0 -5
  944. package/esm2022/select/public_api.mjs +0 -4
  945. package/esm2022/select/select.interface.mjs +0 -2
  946. package/esm2022/select/select.mjs +0 -2617
  947. package/esm2022/select/style/selectstyle.mjs +0 -368
  948. package/esm2022/selectbutton/primeng-selectbutton.mjs +0 -5
  949. package/esm2022/selectbutton/public_api.mjs +0 -4
  950. package/esm2022/selectbutton/selectbutton.interface.mjs +0 -2
  951. package/esm2022/selectbutton/selectbutton.mjs +0 -373
  952. package/esm2022/selectbutton/style/selectbuttonstyle.mjs +0 -73
  953. package/esm2022/sidebar/primeng-sidebar.mjs +0 -5
  954. package/esm2022/sidebar/public_api.mjs +0 -4
  955. package/esm2022/sidebar/sidebar.interface.mjs +0 -2
  956. package/esm2022/sidebar/sidebar.mjs +0 -578
  957. package/esm2022/sidebar/style/drawerstyle.mjs +0 -174
  958. package/esm2022/skeleton/primeng-skeleton.mjs +0 -5
  959. package/esm2022/skeleton/public_api.mjs +0 -3
  960. package/esm2022/skeleton/skeleton.mjs +0 -121
  961. package/esm2022/skeleton/style/skeletonstyle.mjs +0 -93
  962. package/esm2022/slider/primeng-slider.mjs +0 -5
  963. package/esm2022/slider/public_api.mjs +0 -4
  964. package/esm2022/slider/slider.interface.mjs +0 -2
  965. package/esm2022/slider/slider.mjs +0 -820
  966. package/esm2022/slider/style/sliderstyle.mjs +0 -141
  967. package/esm2022/speeddial/primeng-speeddial.mjs +0 -5
  968. package/esm2022/speeddial/public_api.mjs +0 -4
  969. package/esm2022/speeddial/speeddial.interface.mjs +0 -2
  970. package/esm2022/speeddial/speeddial.mjs +0 -866
  971. package/esm2022/speeddial/style/speeddialstyle.mjs +0 -167
  972. package/esm2022/splitbutton/primeng-splitbutton.mjs +0 -5
  973. package/esm2022/splitbutton/public_api.mjs +0 -4
  974. package/esm2022/splitbutton/splitbutton.interface.mjs +0 -2
  975. package/esm2022/splitbutton/splitbutton.mjs +0 -579
  976. package/esm2022/splitbutton/style/splitbuttonstyle.mjs +0 -100
  977. package/esm2022/splitter/primeng-splitter.mjs +0 -5
  978. package/esm2022/splitter/public_api.mjs +0 -4
  979. package/esm2022/splitter/splitter.interface.mjs +0 -2
  980. package/esm2022/splitter/splitter.mjs +0 -616
  981. package/esm2022/splitter/style/splitterstyle.mjs +0 -126
  982. package/esm2022/stepper/primeng-stepper.mjs +0 -5
  983. package/esm2022/stepper/public_api.mjs +0 -3
  984. package/esm2022/stepper/stepper.mjs +0 -521
  985. package/esm2022/stepper/style/stepperstyle.mjs +0 -228
  986. package/esm2022/steps/primeng-steps.mjs +0 -5
  987. package/esm2022/steps/public_api.mjs +0 -3
  988. package/esm2022/steps/steps.mjs +0 -405
  989. package/esm2022/steps/style/stepsstyle.mjs +0 -180
  990. package/esm2022/styleclass/primeng-styleclass.mjs +0 -5
  991. package/esm2022/styleclass/public_api.mjs +0 -2
  992. package/esm2022/styleclass/styleclass.mjs +0 -315
  993. package/esm2022/table/columnfilter.interface.mjs +0 -2
  994. package/esm2022/table/primeng-table.mjs +0 -5
  995. package/esm2022/table/public_api.mjs +0 -5
  996. package/esm2022/table/style/tablestyle.mjs +0 -906
  997. package/esm2022/table/table.interface.mjs +0 -2
  998. package/esm2022/table/table.mjs +0 -7982
  999. package/esm2022/tabmenu/primeng-tabmenu.mjs +0 -5
  1000. package/esm2022/tabmenu/public_api.mjs +0 -4
  1001. package/esm2022/tabmenu/style/tabmenustyle.mjs +0 -192
  1002. package/esm2022/tabmenu/tabmenu.interface.mjs +0 -2
  1003. package/esm2022/tabmenu/tabmenu.mjs +0 -730
  1004. package/esm2022/tabs/primeng-tabs.mjs +0 -5
  1005. package/esm2022/tabs/public_api.mjs +0 -7
  1006. package/esm2022/tabs/style/tabsstyle.mjs +0 -211
  1007. package/esm2022/tabs/tab.mjs +0 -175
  1008. package/esm2022/tabs/tablist.mjs +0 -297
  1009. package/esm2022/tabs/tabpanel.mjs +0 -60
  1010. package/esm2022/tabs/tabpanels.mjs +0 -38
  1011. package/esm2022/tabs/tabs.mjs +0 -105
  1012. package/esm2022/tabview/primeng-tabview.mjs +0 -5
  1013. package/esm2022/tabview/public_api.mjs +0 -4
  1014. package/esm2022/tabview/style/tabsstyle.mjs +0 -211
  1015. package/esm2022/tabview/tabview.interface.mjs +0 -2
  1016. package/esm2022/tabview/tabview.mjs +0 -1089
  1017. package/esm2022/tag/primeng-tag.mjs +0 -5
  1018. package/esm2022/tag/public_api.mjs +0 -4
  1019. package/esm2022/tag/style/tagstyle.mjs +0 -108
  1020. package/esm2022/tag/tag.interface.mjs +0 -2
  1021. package/esm2022/tag/tag.mjs +0 -168
  1022. package/esm2022/terminal/primeng-terminal.mjs +0 -5
  1023. package/esm2022/terminal/public_api.mjs +0 -4
  1024. package/esm2022/terminal/style/terminalstyle.mjs +0 -113
  1025. package/esm2022/terminal/terminal.mjs +0 -195
  1026. package/esm2022/terminal/terminalservice.mjs +0 -25
  1027. package/esm2022/textarea/primeng-textarea.mjs +0 -5
  1028. package/esm2022/textarea/public_api.mjs +0 -3
  1029. package/esm2022/textarea/style/textareastyle.mjs +0 -120
  1030. package/esm2022/textarea/textarea.mjs +0 -165
  1031. package/esm2022/tieredmenu/primeng-tieredmenu.mjs +0 -5
  1032. package/esm2022/tieredmenu/public_api.mjs +0 -4
  1033. package/esm2022/tieredmenu/style/tieredmenustyle.mjs +0 -276
  1034. package/esm2022/tieredmenu/tieredmenu.interface.mjs +0 -2
  1035. package/esm2022/tieredmenu/tieredmenu.mjs +0 -1444
  1036. package/esm2022/timeline/primeng-timeline.mjs +0 -5
  1037. package/esm2022/timeline/public_api.mjs +0 -4
  1038. package/esm2022/timeline/style/timelinestyle.mjs +0 -217
  1039. package/esm2022/timeline/timeline.interface.mjs +0 -2
  1040. package/esm2022/timeline/timeline.mjs +0 -223
  1041. package/esm2022/toast/primeng-toast.mjs +0 -5
  1042. package/esm2022/toast/public_api.mjs +0 -4
  1043. package/esm2022/toast/style/toaststyle.mjs +0 -351
  1044. package/esm2022/toast/toast.interface.mjs +0 -2
  1045. package/esm2022/toast/toast.mjs +0 -738
  1046. package/esm2022/togglebutton/primeng-togglebutton.mjs +0 -5
  1047. package/esm2022/togglebutton/public_api.mjs +0 -3
  1048. package/esm2022/togglebutton/style/togglebuttonstyle.mjs +0 -170
  1049. package/esm2022/togglebutton/togglebutton.interface.mjs +0 -2
  1050. package/esm2022/togglebutton/togglebutton.mjs +0 -353
  1051. package/esm2022/toggleswitch/primeng-toggleswitch.mjs +0 -5
  1052. package/esm2022/toggleswitch/public_api.mjs +0 -4
  1053. package/esm2022/toggleswitch/style/toggleswitchstyle.mjs +0 -165
  1054. package/esm2022/toggleswitch/toggleswitch.interface.mjs +0 -2
  1055. package/esm2022/toggleswitch/toggleswitch.mjs +0 -278
  1056. package/esm2022/toolbar/primeng-toolbar.mjs +0 -5
  1057. package/esm2022/toolbar/public_api.mjs +0 -4
  1058. package/esm2022/toolbar/style/toolbarstyle.mjs +0 -69
  1059. package/esm2022/toolbar/toolbar.interface.mjs +0 -2
  1060. package/esm2022/toolbar/toolbar.mjs +0 -172
  1061. package/esm2022/tooltip/primeng-tooltip.mjs +0 -5
  1062. package/esm2022/tooltip/public_api.mjs +0 -3
  1063. package/esm2022/tooltip/style/tooltipstyle.mjs +0 -113
  1064. package/esm2022/tooltip/tooltip.mjs +0 -715
  1065. package/esm2022/tree/primeng-tree.mjs +0 -5
  1066. package/esm2022/tree/public_api.mjs +0 -4
  1067. package/esm2022/tree/style/treestyle.mjs +0 -323
  1068. package/esm2022/tree/tree.interface.mjs +0 -2
  1069. package/esm2022/tree/tree.mjs +0 -2248
  1070. package/esm2022/treeselect/primeng-treeselect.mjs +0 -5
  1071. package/esm2022/treeselect/public_api.mjs +0 -4
  1072. package/esm2022/treeselect/style/treeselectstyle.mjs +0 -274
  1073. package/esm2022/treeselect/treeselect.interface.mjs +0 -2
  1074. package/esm2022/treeselect/treeselect.mjs +0 -1372
  1075. package/esm2022/treetable/primeng-treetable.mjs +0 -5
  1076. package/esm2022/treetable/public_api.mjs +0 -4
  1077. package/esm2022/treetable/style/treetablestyle.mjs +0 -621
  1078. package/esm2022/treetable/treetable.interface.mjs +0 -2
  1079. package/esm2022/treetable/treetable.mjs +0 -4642
  1080. package/esm2022/ts-helpers/primeng-ts-helpers.mjs +0 -5
  1081. package/esm2022/ts-helpers/public_api.mjs +0 -2
  1082. package/esm2022/ts-helpers/ts-helpers.mjs +0 -2
  1083. package/esm2022/usestyle/primeng-usestyle.mjs +0 -5
  1084. package/esm2022/usestyle/public_api.mjs +0 -2
  1085. package/esm2022/usestyle/usestyle.mjs +0 -44
  1086. package/esm2022/utils/inpututils.mjs +0 -7
  1087. package/esm2022/utils/objectutils.mjs +0 -276
  1088. package/esm2022/utils/primeng-utils.mjs +0 -5
  1089. package/esm2022/utils/public_api.mjs +0 -6
  1090. package/esm2022/utils/uniquecomponentid.mjs +0 -6
  1091. package/esm2022/utils/zindexutils.mjs +0 -35
@@ -1,1290 +0,0 @@
1
- import { CommonModule, isPlatformBrowser } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, inject, Input, NgModule, Output, ViewChild, ViewEncapsulation } from '@angular/core';
3
- import { findSingle, getHeight, getWidth, isTouchDevice, isVisible } from '@primeuix/utils';
4
- import { SharedModule } from 'primeng/api';
5
- import { BaseComponent } from 'primeng/basecomponent';
6
- import { SpinnerIcon } from 'primeng/icons';
7
- import { ScrollerStyle } from './style/scrollerstyle';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common";
10
- const _c0 = ["content"];
11
- const _c1 = ["item"];
12
- const _c2 = ["loader"];
13
- const _c3 = ["loadericon"];
14
- const _c4 = ["element"];
15
- const _c5 = ["*"];
16
- const _c6 = (a0, a1, a2) => ({ "p-virtualscroller": true, "p-virtualscroller-inline": a0, "p-virtualscroller-both p-both-scroll": a1, "p-virtualscroller-horizontal p-horizontal-scroll": a2 });
17
- const _c7 = (a0, a1) => ({ $implicit: a0, options: a1 });
18
- const _c8 = a0 => ({ "p-virtualscroller-loading ": a0 });
19
- const _c9 = a0 => ({ "p-virtualscroller-loader-mask": a0 });
20
- const _c10 = a0 => ({ numCols: a0 });
21
- const _c11 = a0 => ({ options: a0 });
22
- const _c12 = () => ({ styleClass: "p-virtualscroller-loading-icon" });
23
- const _c13 = (a0, a1) => ({ rows: a0, columns: a1 });
24
- function Scroller_ng_container_0_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
25
- i0.ɵɵelementContainer(0);
26
- } }
27
- function Scroller_ng_container_0_ng_container_3_Template(rf, ctx) { if (rf & 1) {
28
- i0.ɵɵelementContainerStart(0);
29
- i0.ɵɵtemplate(1, Scroller_ng_container_0_ng_container_3_ng_container_1_Template, 1, 0, "ng-container", 10);
30
- i0.ɵɵelementContainerEnd();
31
- } if (rf & 2) {
32
- const ctx_r1 = i0.ɵɵnextContext(2);
33
- i0.ɵɵadvance();
34
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.contentTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction2(2, _c7, ctx_r1.loadedItems, ctx_r1.getContentOptions()));
35
- } }
36
- function Scroller_ng_container_0_ng_template_4_ng_container_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
37
- i0.ɵɵelementContainer(0);
38
- } }
39
- function Scroller_ng_container_0_ng_template_4_ng_container_2_Template(rf, ctx) { if (rf & 1) {
40
- i0.ɵɵelementContainerStart(0);
41
- i0.ɵɵtemplate(1, Scroller_ng_container_0_ng_template_4_ng_container_2_ng_container_1_Template, 1, 0, "ng-container", 10);
42
- i0.ɵɵelementContainerEnd();
43
- } if (rf & 2) {
44
- const item_r3 = ctx.$implicit;
45
- const index_r4 = ctx.index;
46
- const ctx_r1 = i0.ɵɵnextContext(3);
47
- i0.ɵɵadvance();
48
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.itemTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction2(2, _c7, item_r3, ctx_r1.getOptions(index_r4)));
49
- } }
50
- function Scroller_ng_container_0_ng_template_4_Template(rf, ctx) { if (rf & 1) {
51
- i0.ɵɵelementStart(0, "div", 11, 3);
52
- i0.ɵɵtemplate(2, Scroller_ng_container_0_ng_template_4_ng_container_2_Template, 2, 5, "ng-container", 12);
53
- i0.ɵɵelementEnd();
54
- } if (rf & 2) {
55
- const ctx_r1 = i0.ɵɵnextContext(2);
56
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(5, _c8, ctx_r1.d_loading))("ngStyle", ctx_r1.contentStyle);
57
- i0.ɵɵattribute("data-pc-section", "content");
58
- i0.ɵɵadvance(2);
59
- i0.ɵɵproperty("ngForOf", ctx_r1.loadedItems)("ngForTrackBy", ctx_r1._trackBy);
60
- } }
61
- function Scroller_ng_container_0_div_6_Template(rf, ctx) { if (rf & 1) {
62
- i0.ɵɵelement(0, "div", 13);
63
- } if (rf & 2) {
64
- const ctx_r1 = i0.ɵɵnextContext(2);
65
- i0.ɵɵproperty("ngStyle", ctx_r1.spacerStyle);
66
- i0.ɵɵattribute("data-pc-section", "spacer");
67
- } }
68
- function Scroller_ng_container_0_div_7_ng_container_1_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
69
- i0.ɵɵelementContainer(0);
70
- } }
71
- function Scroller_ng_container_0_div_7_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
72
- i0.ɵɵelementContainerStart(0);
73
- i0.ɵɵtemplate(1, Scroller_ng_container_0_div_7_ng_container_1_ng_container_1_ng_container_1_Template, 1, 0, "ng-container", 10);
74
- i0.ɵɵelementContainerEnd();
75
- } if (rf & 2) {
76
- const index_r5 = ctx.index;
77
- const ctx_r1 = i0.ɵɵnextContext(4);
78
- i0.ɵɵadvance();
79
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.loaderTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(4, _c11, ctx_r1.getLoaderOptions(index_r5, ctx_r1.both && i0.ɵɵpureFunction1(2, _c10, ctx_r1.numItemsInViewport.cols))));
80
- } }
81
- function Scroller_ng_container_0_div_7_ng_container_1_Template(rf, ctx) { if (rf & 1) {
82
- i0.ɵɵelementContainerStart(0);
83
- i0.ɵɵtemplate(1, Scroller_ng_container_0_div_7_ng_container_1_ng_container_1_Template, 2, 6, "ng-container", 15);
84
- i0.ɵɵelementContainerEnd();
85
- } if (rf & 2) {
86
- const ctx_r1 = i0.ɵɵnextContext(3);
87
- i0.ɵɵadvance();
88
- i0.ɵɵproperty("ngForOf", ctx_r1.loaderArr);
89
- } }
90
- function Scroller_ng_container_0_div_7_ng_template_2_ng_container_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
91
- i0.ɵɵelementContainer(0);
92
- } }
93
- function Scroller_ng_container_0_div_7_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
94
- i0.ɵɵelementContainerStart(0);
95
- i0.ɵɵtemplate(1, Scroller_ng_container_0_div_7_ng_template_2_ng_container_0_ng_container_1_Template, 1, 0, "ng-container", 10);
96
- i0.ɵɵelementContainerEnd();
97
- } if (rf & 2) {
98
- const ctx_r1 = i0.ɵɵnextContext(4);
99
- i0.ɵɵadvance();
100
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.loadericonTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(3, _c11, i0.ɵɵpureFunction0(2, _c12)));
101
- } }
102
- function Scroller_ng_container_0_div_7_ng_template_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
103
- i0.ɵɵelement(0, "SpinnerIcon", 16);
104
- } if (rf & 2) {
105
- i0.ɵɵproperty("styleClass", "p-virtualscroller-loading-icon pi-spin");
106
- i0.ɵɵattribute("data-pc-section", "loadingIcon");
107
- } }
108
- function Scroller_ng_container_0_div_7_ng_template_2_Template(rf, ctx) { if (rf & 1) {
109
- i0.ɵɵtemplate(0, Scroller_ng_container_0_div_7_ng_template_2_ng_container_0_Template, 2, 5, "ng-container", 6)(1, Scroller_ng_container_0_div_7_ng_template_2_ng_template_1_Template, 1, 2, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
110
- } if (rf & 2) {
111
- const buildInLoaderIcon_r6 = i0.ɵɵreference(2);
112
- const ctx_r1 = i0.ɵɵnextContext(3);
113
- i0.ɵɵproperty("ngIf", ctx_r1.loadericonTemplate)("ngIfElse", buildInLoaderIcon_r6);
114
- } }
115
- function Scroller_ng_container_0_div_7_Template(rf, ctx) { if (rf & 1) {
116
- i0.ɵɵelementStart(0, "div", 14);
117
- i0.ɵɵtemplate(1, Scroller_ng_container_0_div_7_ng_container_1_Template, 2, 1, "ng-container", 6)(2, Scroller_ng_container_0_div_7_ng_template_2_Template, 3, 2, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
118
- i0.ɵɵelementEnd();
119
- } if (rf & 2) {
120
- const buildInLoader_r7 = i0.ɵɵreference(3);
121
- const ctx_r1 = i0.ɵɵnextContext(2);
122
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c9, !ctx_r1.loaderTemplate));
123
- i0.ɵɵattribute("data-pc-section", "loader");
124
- i0.ɵɵadvance();
125
- i0.ɵɵproperty("ngIf", ctx_r1.loaderTemplate)("ngIfElse", buildInLoader_r7);
126
- } }
127
- function Scroller_ng_container_0_Template(rf, ctx) { if (rf & 1) {
128
- const _r1 = i0.ɵɵgetCurrentView();
129
- i0.ɵɵelementContainerStart(0);
130
- i0.ɵɵelementStart(1, "div", 7, 1);
131
- i0.ɵɵlistener("scroll", function Scroller_ng_container_0_Template_div_scroll_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onContainerScroll($event)); });
132
- i0.ɵɵtemplate(3, Scroller_ng_container_0_ng_container_3_Template, 2, 5, "ng-container", 6)(4, Scroller_ng_container_0_ng_template_4_Template, 3, 7, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor)(6, Scroller_ng_container_0_div_6_Template, 1, 2, "div", 8)(7, Scroller_ng_container_0_div_7_Template, 4, 6, "div", 9);
133
- i0.ɵɵelementEnd();
134
- i0.ɵɵelementContainerEnd();
135
- } if (rf & 2) {
136
- const buildInContent_r8 = i0.ɵɵreference(5);
137
- const ctx_r1 = i0.ɵɵnextContext();
138
- i0.ɵɵadvance();
139
- i0.ɵɵclassMap(ctx_r1._styleClass);
140
- i0.ɵɵproperty("ngStyle", ctx_r1._style)("ngClass", i0.ɵɵpureFunction3(12, _c6, ctx_r1.inline, ctx_r1.both, ctx_r1.horizontal));
141
- i0.ɵɵattribute("id", ctx_r1._id)("tabindex", ctx_r1.tabindex)("data-pc-name", "scroller")("data-pc-section", "root");
142
- i0.ɵɵadvance(2);
143
- i0.ɵɵproperty("ngIf", ctx_r1.contentTemplate)("ngIfElse", buildInContent_r8);
144
- i0.ɵɵadvance(3);
145
- i0.ɵɵproperty("ngIf", ctx_r1._showSpacer);
146
- i0.ɵɵadvance();
147
- i0.ɵɵproperty("ngIf", !ctx_r1.loaderDisabled && ctx_r1._showLoader && ctx_r1.d_loading);
148
- } }
149
- function Scroller_ng_template_1_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
150
- i0.ɵɵelementContainer(0);
151
- } }
152
- function Scroller_ng_template_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
153
- i0.ɵɵelementContainerStart(0);
154
- i0.ɵɵtemplate(1, Scroller_ng_template_1_ng_container_1_ng_container_1_Template, 1, 0, "ng-container", 10);
155
- i0.ɵɵelementContainerEnd();
156
- } if (rf & 2) {
157
- const ctx_r1 = i0.ɵɵnextContext(2);
158
- i0.ɵɵadvance();
159
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.contentTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction2(5, _c7, ctx_r1.items, i0.ɵɵpureFunction2(2, _c13, ctx_r1._items, ctx_r1.loadedColumns)));
160
- } }
161
- function Scroller_ng_template_1_Template(rf, ctx) { if (rf & 1) {
162
- i0.ɵɵprojection(0);
163
- i0.ɵɵtemplate(1, Scroller_ng_template_1_ng_container_1_Template, 2, 8, "ng-container", 17);
164
- } if (rf & 2) {
165
- const ctx_r1 = i0.ɵɵnextContext();
166
- i0.ɵɵadvance();
167
- i0.ɵɵproperty("ngIf", ctx_r1.contentTemplate);
168
- } }
169
- /**
170
- * Scroller is a performance-approach to handle huge data efficiently.
171
- * @group Components
172
- */
173
- export class Scroller extends BaseComponent {
174
- zone;
175
- /**
176
- * Unique identifier of the element.
177
- * @group Props
178
- */
179
- get id() {
180
- return this._id;
181
- }
182
- set id(val) {
183
- this._id = val;
184
- }
185
- /**
186
- * Inline style of the component.
187
- * @group Props
188
- */
189
- get style() {
190
- return this._style;
191
- }
192
- set style(val) {
193
- this._style = val;
194
- }
195
- /**
196
- * Style class of the element.
197
- * @group Props
198
- */
199
- get styleClass() {
200
- return this._styleClass;
201
- }
202
- set styleClass(val) {
203
- this._styleClass = val;
204
- }
205
- /**
206
- * Index of the element in tabbing order.
207
- * @group Props
208
- */
209
- get tabindex() {
210
- return this._tabindex;
211
- }
212
- set tabindex(val) {
213
- this._tabindex = val;
214
- }
215
- /**
216
- * An array of objects to display.
217
- * @group Props
218
- */
219
- get items() {
220
- return this._items;
221
- }
222
- set items(val) {
223
- this._items = val;
224
- }
225
- /**
226
- * The height/width of item according to orientation.
227
- * @group Props
228
- */
229
- get itemSize() {
230
- return this._itemSize;
231
- }
232
- set itemSize(val) {
233
- this._itemSize = val;
234
- }
235
- /**
236
- * Height of the scroll viewport.
237
- * @group Props
238
- */
239
- get scrollHeight() {
240
- return this._scrollHeight;
241
- }
242
- set scrollHeight(val) {
243
- this._scrollHeight = val;
244
- }
245
- /**
246
- * Width of the scroll viewport.
247
- * @group Props
248
- */
249
- get scrollWidth() {
250
- return this._scrollWidth;
251
- }
252
- set scrollWidth(val) {
253
- this._scrollWidth = val;
254
- }
255
- /**
256
- * The orientation of scrollbar.
257
- * @group Props
258
- */
259
- get orientation() {
260
- return this._orientation;
261
- }
262
- set orientation(val) {
263
- this._orientation = val;
264
- }
265
- /**
266
- * Used to specify how many items to load in each load method in lazy mode.
267
- * @group Props
268
- */
269
- get step() {
270
- return this._step;
271
- }
272
- set step(val) {
273
- this._step = val;
274
- }
275
- /**
276
- * Delay in scroll before new data is loaded.
277
- * @group Props
278
- */
279
- get delay() {
280
- return this._delay;
281
- }
282
- set delay(val) {
283
- this._delay = val;
284
- }
285
- /**
286
- * Delay after window's resize finishes.
287
- * @group Props
288
- */
289
- get resizeDelay() {
290
- return this._resizeDelay;
291
- }
292
- set resizeDelay(val) {
293
- this._resizeDelay = val;
294
- }
295
- /**
296
- * Used to append each loaded item to top without removing any items from the DOM. Using very large data may cause the browser to crash.
297
- * @group Props
298
- */
299
- get appendOnly() {
300
- return this._appendOnly;
301
- }
302
- set appendOnly(val) {
303
- this._appendOnly = val;
304
- }
305
- /**
306
- * Specifies whether the scroller should be displayed inline or not.
307
- * @group Props
308
- */
309
- get inline() {
310
- return this._inline;
311
- }
312
- set inline(val) {
313
- this._inline = val;
314
- }
315
- /**
316
- * Defines if data is loaded and interacted with in lazy manner.
317
- * @group Props
318
- */
319
- get lazy() {
320
- return this._lazy;
321
- }
322
- set lazy(val) {
323
- this._lazy = val;
324
- }
325
- /**
326
- * If disabled, the scroller feature is eliminated and the content is displayed directly.
327
- * @group Props
328
- */
329
- get disabled() {
330
- return this._disabled;
331
- }
332
- set disabled(val) {
333
- this._disabled = val;
334
- }
335
- /**
336
- * Used to implement a custom loader instead of using the loader feature in the scroller.
337
- * @group Props
338
- */
339
- get loaderDisabled() {
340
- return this._loaderDisabled;
341
- }
342
- set loaderDisabled(val) {
343
- this._loaderDisabled = val;
344
- }
345
- /**
346
- * Columns to display.
347
- * @group Props
348
- */
349
- get columns() {
350
- return this._columns;
351
- }
352
- set columns(val) {
353
- this._columns = val;
354
- }
355
- /**
356
- * Used to implement a custom spacer instead of using the spacer feature in the scroller.
357
- * @group Props
358
- */
359
- get showSpacer() {
360
- return this._showSpacer;
361
- }
362
- set showSpacer(val) {
363
- this._showSpacer = val;
364
- }
365
- /**
366
- * Defines whether to show loader.
367
- * @group Props
368
- */
369
- get showLoader() {
370
- return this._showLoader;
371
- }
372
- set showLoader(val) {
373
- this._showLoader = val;
374
- }
375
- /**
376
- * Determines how many additional elements to add to the DOM outside of the view. According to the scrolls made up and down, extra items are added in a certain algorithm in the form of multiples of this number. Default value is half the number of items shown in the view.
377
- * @group Props
378
- */
379
- get numToleratedItems() {
380
- return this._numToleratedItems;
381
- }
382
- set numToleratedItems(val) {
383
- this._numToleratedItems = val;
384
- }
385
- /**
386
- * Defines whether the data is loaded.
387
- * @group Props
388
- */
389
- get loading() {
390
- return this._loading;
391
- }
392
- set loading(val) {
393
- this._loading = val;
394
- }
395
- /**
396
- * Defines whether to dynamically change the height or width of scrollable container.
397
- * @group Props
398
- */
399
- get autoSize() {
400
- return this._autoSize;
401
- }
402
- set autoSize(val) {
403
- this._autoSize = val;
404
- }
405
- /**
406
- * Function to optimize the dom operations by delegating to ngForTrackBy, default algoritm checks for object identity.
407
- * @group Props
408
- */
409
- get trackBy() {
410
- return this._trackBy;
411
- }
412
- set trackBy(val) {
413
- this._trackBy = val;
414
- }
415
- /**
416
- * Defines whether to use the scroller feature. The properties of scroller component can be used like an object in it.
417
- * @group Props
418
- */
419
- get options() {
420
- return this._options;
421
- }
422
- set options(val) {
423
- this._options = val;
424
- if (val && typeof val === 'object') {
425
- //@ts-ignore
426
- Object.entries(val).forEach(([k, v]) => this[`_${k}`] !== v && (this[`_${k}`] = v));
427
- }
428
- }
429
- /**
430
- * Callback to invoke in lazy mode to load new data.
431
- * @param {ScrollerLazyLoadEvent} event - Custom lazy load event.
432
- * @group Emits
433
- */
434
- onLazyLoad = new EventEmitter();
435
- /**
436
- * Callback to invoke when scroll position changes.
437
- * @param {ScrollerScrollEvent} event - Custom scroll event.
438
- * @group Emits
439
- */
440
- onScroll = new EventEmitter();
441
- /**
442
- * Callback to invoke when scroll position and item's range in view changes.
443
- * @param {ScrollerScrollEvent} event - Custom scroll index change event.
444
- * @group Emits
445
- */
446
- onScrollIndexChange = new EventEmitter();
447
- elementViewChild;
448
- contentViewChild;
449
- _id;
450
- _style;
451
- _styleClass;
452
- _tabindex = 0;
453
- _items;
454
- _itemSize = 0;
455
- _scrollHeight;
456
- _scrollWidth;
457
- _orientation = 'vertical';
458
- _step = 0;
459
- _delay = 0;
460
- _resizeDelay = 10;
461
- _appendOnly = false;
462
- _inline = false;
463
- _lazy = false;
464
- _disabled = false;
465
- _loaderDisabled = false;
466
- _columns;
467
- _showSpacer = true;
468
- _showLoader = false;
469
- _numToleratedItems;
470
- _loading;
471
- _autoSize = false;
472
- _trackBy;
473
- _options;
474
- d_loading = false;
475
- d_numToleratedItems;
476
- contentEl;
477
- /**
478
- * Content template of the component.
479
- * @group Templates
480
- */
481
- contentTemplate;
482
- /**
483
- * Item template of the component.
484
- * @group Templates
485
- */
486
- itemTemplate;
487
- /**
488
- * Loader template of the component.
489
- * @group Templates
490
- */
491
- loaderTemplate;
492
- /**
493
- * Loader icon template of the component.
494
- * @group Templates
495
- */
496
- loadericonTemplate;
497
- first = 0;
498
- last = 0;
499
- page = 0;
500
- isRangeChanged = false;
501
- numItemsInViewport = 0;
502
- lastScrollPos = 0;
503
- lazyLoadState = {};
504
- loaderArr = [];
505
- spacerStyle = {};
506
- contentStyle = {};
507
- scrollTimeout;
508
- resizeTimeout;
509
- initialized = false;
510
- windowResizeListener;
511
- defaultWidth;
512
- defaultHeight;
513
- defaultContentWidth;
514
- defaultContentHeight;
515
- get vertical() {
516
- return this._orientation === 'vertical';
517
- }
518
- get horizontal() {
519
- return this._orientation === 'horizontal';
520
- }
521
- get both() {
522
- return this._orientation === 'both';
523
- }
524
- get loadedItems() {
525
- if (this._items && !this.d_loading) {
526
- if (this.both)
527
- return this._items.slice(this._appendOnly ? 0 : this.first.rows, this.last.rows).map((item) => (this._columns ? item : item.slice(this._appendOnly ? 0 : this.first.cols, this.last.cols)));
528
- else if (this.horizontal && this._columns)
529
- return this._items;
530
- else
531
- return this._items.slice(this._appendOnly ? 0 : this.first, this.last);
532
- }
533
- return [];
534
- }
535
- get loadedRows() {
536
- return this.d_loading ? (this._loaderDisabled ? this.loaderArr : []) : this.loadedItems;
537
- }
538
- get loadedColumns() {
539
- if (this._columns && (this.both || this.horizontal)) {
540
- return this.d_loading && this._loaderDisabled ? (this.both ? this.loaderArr[0] : this.loaderArr) : this._columns.slice(this.both ? this.first.cols : this.first, this.both ? this.last.cols : this.last);
541
- }
542
- return this._columns;
543
- }
544
- _componentStyle = inject(ScrollerStyle);
545
- constructor(zone) {
546
- super();
547
- this.zone = zone;
548
- }
549
- ngOnInit() {
550
- super.ngOnInit();
551
- this.setInitialState();
552
- }
553
- ngOnChanges(simpleChanges) {
554
- super.ngOnChanges(simpleChanges);
555
- let isLoadingChanged = false;
556
- if (simpleChanges.loading) {
557
- const { previousValue, currentValue } = simpleChanges.loading;
558
- if (this.lazy && previousValue !== currentValue && currentValue !== this.d_loading) {
559
- this.d_loading = currentValue;
560
- isLoadingChanged = true;
561
- }
562
- }
563
- if (simpleChanges.orientation) {
564
- this.lastScrollPos = this.both ? { top: 0, left: 0 } : 0;
565
- }
566
- if (simpleChanges.numToleratedItems) {
567
- const { previousValue, currentValue } = simpleChanges.numToleratedItems;
568
- if (previousValue !== currentValue && currentValue !== this.d_numToleratedItems) {
569
- this.d_numToleratedItems = currentValue;
570
- }
571
- }
572
- if (simpleChanges.options) {
573
- const { previousValue, currentValue } = simpleChanges.options;
574
- if (this.lazy && previousValue?.loading !== currentValue?.loading && currentValue?.loading !== this.d_loading) {
575
- this.d_loading = currentValue.loading;
576
- isLoadingChanged = true;
577
- }
578
- if (previousValue?.numToleratedItems !== currentValue?.numToleratedItems && currentValue?.numToleratedItems !== this.d_numToleratedItems) {
579
- this.d_numToleratedItems = currentValue.numToleratedItems;
580
- }
581
- }
582
- if (this.initialized) {
583
- const isChanged = !isLoadingChanged && (simpleChanges.items?.previousValue?.length !== simpleChanges.items?.currentValue?.length || simpleChanges.itemSize || simpleChanges.scrollHeight || simpleChanges.scrollWidth);
584
- if (isChanged) {
585
- this.init();
586
- this.calculateAutoSize();
587
- }
588
- }
589
- }
590
- ngAfterContentInit() {
591
- this.templates.forEach((item) => {
592
- switch (item.getType()) {
593
- case 'content':
594
- this.contentTemplate = item.template;
595
- break;
596
- case 'item':
597
- this.itemTemplate = item.template;
598
- break;
599
- case 'loader':
600
- this.loaderTemplate = item.template;
601
- break;
602
- case 'loadericon':
603
- this.loadericonTemplate = item.template;
604
- break;
605
- default:
606
- this.itemTemplate = item.template;
607
- break;
608
- }
609
- });
610
- }
611
- ngAfterViewInit() {
612
- super.ngAfterViewInit();
613
- Promise.resolve().then(() => {
614
- this.viewInit();
615
- });
616
- }
617
- ngAfterViewChecked() {
618
- if (!this.initialized) {
619
- this.viewInit();
620
- }
621
- }
622
- ngOnDestroy() {
623
- this.unbindResizeListener();
624
- this.contentEl = null;
625
- this.initialized = false;
626
- super.ngOnDestroy();
627
- }
628
- viewInit() {
629
- if (isPlatformBrowser(this.platformId) && !this.initialized) {
630
- if (isVisible(this.elementViewChild?.nativeElement)) {
631
- this.setInitialState();
632
- this.setContentEl(this.contentEl);
633
- this.init();
634
- this.defaultWidth = getWidth(this.elementViewChild?.nativeElement);
635
- this.defaultHeight = getHeight(this.elementViewChild?.nativeElement);
636
- this.defaultContentWidth = getWidth(this.contentEl);
637
- this.defaultContentHeight = getHeight(this.contentEl);
638
- this.initialized = true;
639
- }
640
- }
641
- }
642
- init() {
643
- if (!this._disabled) {
644
- this.setSize();
645
- this.calculateOptions();
646
- this.setSpacerSize();
647
- this.bindResizeListener();
648
- this.cd.detectChanges();
649
- }
650
- }
651
- setContentEl(el) {
652
- this.contentEl = el || this.contentViewChild?.nativeElement || findSingle(this.elementViewChild?.nativeElement, '.p-virtualscroller-content');
653
- }
654
- setInitialState() {
655
- this.first = this.both ? { rows: 0, cols: 0 } : 0;
656
- this.last = this.both ? { rows: 0, cols: 0 } : 0;
657
- this.numItemsInViewport = this.both ? { rows: 0, cols: 0 } : 0;
658
- this.lastScrollPos = this.both ? { top: 0, left: 0 } : 0;
659
- this.d_loading = this._loading || false;
660
- this.d_numToleratedItems = this._numToleratedItems;
661
- this.loaderArr = [];
662
- this.spacerStyle = {};
663
- this.contentStyle = {};
664
- }
665
- getElementRef() {
666
- return this.elementViewChild;
667
- }
668
- getPageByFirst(first) {
669
- return Math.floor(((first ?? this.first) + this.d_numToleratedItems * 4) / (this._step || 1));
670
- }
671
- isPageChanged(first) {
672
- return this._step ? this.page !== this.getPageByFirst(first ?? this.first) : true;
673
- }
674
- scrollTo(options) {
675
- // this.lastScrollPos = this.both ? { top: 0, left: 0 } : 0;
676
- this.elementViewChild?.nativeElement?.scrollTo(options);
677
- }
678
- scrollToIndex(index, behavior = 'auto') {
679
- const valid = this.both ? index.every((i) => i > -1) : index > -1;
680
- if (valid) {
681
- const first = this.first;
682
- const { scrollTop = 0, scrollLeft = 0 } = this.elementViewChild?.nativeElement;
683
- const { numToleratedItems } = this.calculateNumItems();
684
- const contentPos = this.getContentPosition();
685
- const itemSize = this.itemSize;
686
- const calculateFirst = (_index = 0, _numT) => (_index <= _numT ? 0 : _index);
687
- const calculateCoord = (_first, _size, _cpos) => _first * _size + _cpos;
688
- const scrollTo = (left = 0, top = 0) => this.scrollTo({ left, top, behavior });
689
- let newFirst = this.both ? { rows: 0, cols: 0 } : 0;
690
- let isRangeChanged = false, isScrollChanged = false;
691
- if (this.both) {
692
- newFirst = {
693
- rows: calculateFirst(index[0], numToleratedItems[0]),
694
- cols: calculateFirst(index[1], numToleratedItems[1])
695
- };
696
- scrollTo(calculateCoord(newFirst.cols, itemSize[1], contentPos.left), calculateCoord(newFirst.rows, itemSize[0], contentPos.top));
697
- isScrollChanged = this.lastScrollPos.top !== scrollTop || this.lastScrollPos.left !== scrollLeft;
698
- isRangeChanged = newFirst.rows !== first.rows || newFirst.cols !== first.cols;
699
- }
700
- else {
701
- newFirst = calculateFirst(index, numToleratedItems);
702
- this.horizontal ? scrollTo(calculateCoord(newFirst, itemSize, contentPos.left), scrollTop) : scrollTo(scrollLeft, calculateCoord(newFirst, itemSize, contentPos.top));
703
- isScrollChanged = this.lastScrollPos !== (this.horizontal ? scrollLeft : scrollTop);
704
- isRangeChanged = newFirst !== first;
705
- }
706
- this.isRangeChanged = isRangeChanged;
707
- isScrollChanged && (this.first = newFirst);
708
- }
709
- }
710
- scrollInView(index, to, behavior = 'auto') {
711
- if (to) {
712
- const { first, viewport } = this.getRenderedRange();
713
- const scrollTo = (left = 0, top = 0) => this.scrollTo({ left, top, behavior });
714
- const isToStart = to === 'to-start';
715
- const isToEnd = to === 'to-end';
716
- if (isToStart) {
717
- if (this.both) {
718
- if (viewport.first.rows - first.rows > index[0]) {
719
- scrollTo(viewport.first.cols * this._itemSize[1], (viewport.first.rows - 1) * this._itemSize[0]);
720
- }
721
- else if (viewport.first.cols - first.cols > index[1]) {
722
- scrollTo((viewport.first.cols - 1) * this._itemSize[1], viewport.first.rows * this._itemSize[0]);
723
- }
724
- }
725
- else {
726
- if (viewport.first - first > index) {
727
- const pos = (viewport.first - 1) * this._itemSize;
728
- this.horizontal ? scrollTo(pos, 0) : scrollTo(0, pos);
729
- }
730
- }
731
- }
732
- else if (isToEnd) {
733
- if (this.both) {
734
- if (viewport.last.rows - first.rows <= index[0] + 1) {
735
- scrollTo(viewport.first.cols * this._itemSize[1], (viewport.first.rows + 1) * this._itemSize[0]);
736
- }
737
- else if (viewport.last.cols - first.cols <= index[1] + 1) {
738
- scrollTo((viewport.first.cols + 1) * this._itemSize[1], viewport.first.rows * this._itemSize[0]);
739
- }
740
- }
741
- else {
742
- if (viewport.last - first <= index + 1) {
743
- const pos = (viewport.first + 1) * this._itemSize;
744
- this.horizontal ? scrollTo(pos, 0) : scrollTo(0, pos);
745
- }
746
- }
747
- }
748
- }
749
- else {
750
- this.scrollToIndex(index, behavior);
751
- }
752
- }
753
- getRenderedRange() {
754
- const calculateFirstInViewport = (_pos, _size) => (_size || _pos ? Math.floor(_pos / (_size || _pos)) : 0);
755
- let firstInViewport = this.first;
756
- let lastInViewport = 0;
757
- if (this.elementViewChild?.nativeElement) {
758
- const { scrollTop, scrollLeft } = this.elementViewChild.nativeElement;
759
- if (this.both) {
760
- firstInViewport = {
761
- rows: calculateFirstInViewport(scrollTop, this._itemSize[0]),
762
- cols: calculateFirstInViewport(scrollLeft, this._itemSize[1])
763
- };
764
- lastInViewport = {
765
- rows: firstInViewport.rows + this.numItemsInViewport.rows,
766
- cols: firstInViewport.cols + this.numItemsInViewport.cols
767
- };
768
- }
769
- else {
770
- const scrollPos = this.horizontal ? scrollLeft : scrollTop;
771
- firstInViewport = calculateFirstInViewport(scrollPos, this._itemSize);
772
- lastInViewport = firstInViewport + this.numItemsInViewport;
773
- }
774
- }
775
- return {
776
- first: this.first,
777
- last: this.last,
778
- viewport: {
779
- first: firstInViewport,
780
- last: lastInViewport
781
- }
782
- };
783
- }
784
- calculateNumItems() {
785
- const contentPos = this.getContentPosition();
786
- const contentWidth = (this.elementViewChild?.nativeElement ? this.elementViewChild.nativeElement.offsetWidth - contentPos.left : 0) || 0;
787
- const contentHeight = (this.elementViewChild?.nativeElement ? this.elementViewChild.nativeElement.offsetHeight - contentPos.top : 0) || 0;
788
- const calculateNumItemsInViewport = (_contentSize, _itemSize) => (_itemSize || _contentSize ? Math.ceil(_contentSize / (_itemSize || _contentSize)) : 0);
789
- const calculateNumToleratedItems = (_numItems) => Math.ceil(_numItems / 2);
790
- const numItemsInViewport = this.both
791
- ? {
792
- rows: calculateNumItemsInViewport(contentHeight, this._itemSize[0]),
793
- cols: calculateNumItemsInViewport(contentWidth, this._itemSize[1])
794
- }
795
- : calculateNumItemsInViewport(this.horizontal ? contentWidth : contentHeight, this._itemSize);
796
- const numToleratedItems = this.d_numToleratedItems || (this.both ? [calculateNumToleratedItems(numItemsInViewport.rows), calculateNumToleratedItems(numItemsInViewport.cols)] : calculateNumToleratedItems(numItemsInViewport));
797
- return { numItemsInViewport, numToleratedItems };
798
- }
799
- calculateOptions() {
800
- const { numItemsInViewport, numToleratedItems } = this.calculateNumItems();
801
- const calculateLast = (_first, _num, _numT, _isCols = false) => this.getLast(_first + _num + (_first < _numT ? 2 : 3) * _numT, _isCols);
802
- const first = this.first;
803
- const last = this.both
804
- ? {
805
- rows: calculateLast(this.first.rows, numItemsInViewport.rows, numToleratedItems[0]),
806
- cols: calculateLast(this.first.cols, numItemsInViewport.cols, numToleratedItems[1], true)
807
- }
808
- : calculateLast(this.first, numItemsInViewport, numToleratedItems);
809
- this.last = last;
810
- this.numItemsInViewport = numItemsInViewport;
811
- this.d_numToleratedItems = numToleratedItems;
812
- if (this.showLoader) {
813
- this.loaderArr = this.both ? Array.from({ length: numItemsInViewport.rows }).map(() => Array.from({ length: numItemsInViewport.cols })) : Array.from({ length: numItemsInViewport });
814
- }
815
- if (this._lazy) {
816
- Promise.resolve().then(() => {
817
- this.lazyLoadState = {
818
- first: this._step ? (this.both ? { rows: 0, cols: first.cols } : 0) : first,
819
- last: Math.min(this._step ? this._step : this.last, this.items.length)
820
- };
821
- this.handleEvents('onLazyLoad', this.lazyLoadState);
822
- });
823
- }
824
- }
825
- calculateAutoSize() {
826
- if (this._autoSize && !this.d_loading) {
827
- Promise.resolve().then(() => {
828
- if (this.contentEl) {
829
- this.contentEl.style.minHeight = this.contentEl.style.minWidth = 'auto';
830
- this.contentEl.style.position = 'relative';
831
- this.elementViewChild.nativeElement.style.contain = 'none';
832
- const [contentWidth, contentHeight] = [getWidth(this.contentEl), getHeight(this.contentEl)];
833
- contentWidth !== this.defaultContentWidth && (this.elementViewChild.nativeElement.style.width = '');
834
- contentHeight !== this.defaultContentHeight && (this.elementViewChild.nativeElement.style.height = '');
835
- const [width, height] = [getWidth(this.elementViewChild.nativeElement), getHeight(this.elementViewChild.nativeElement)];
836
- (this.both || this.horizontal) && (this.elementViewChild.nativeElement.style.width = width < this.defaultWidth ? width + 'px' : this._scrollWidth || this.defaultWidth + 'px');
837
- (this.both || this.vertical) && (this.elementViewChild.nativeElement.style.height = height < this.defaultHeight ? height + 'px' : this._scrollHeight || this.defaultHeight + 'px');
838
- this.contentEl.style.minHeight = this.contentEl.style.minWidth = '';
839
- this.contentEl.style.position = '';
840
- this.elementViewChild.nativeElement.style.contain = '';
841
- }
842
- });
843
- }
844
- }
845
- getLast(last = 0, isCols = false) {
846
- return this._items ? Math.min(isCols ? (this._columns || this._items[0]).length : this._items.length, last) : 0;
847
- }
848
- getContentPosition() {
849
- if (this.contentEl) {
850
- const style = getComputedStyle(this.contentEl);
851
- const left = parseFloat(style.paddingLeft) + Math.max(parseFloat(style.left) || 0, 0);
852
- const right = parseFloat(style.paddingRight) + Math.max(parseFloat(style.right) || 0, 0);
853
- const top = parseFloat(style.paddingTop) + Math.max(parseFloat(style.top) || 0, 0);
854
- const bottom = parseFloat(style.paddingBottom) + Math.max(parseFloat(style.bottom) || 0, 0);
855
- return { left, right, top, bottom, x: left + right, y: top + bottom };
856
- }
857
- return { left: 0, right: 0, top: 0, bottom: 0, x: 0, y: 0 };
858
- }
859
- setSize() {
860
- if (this.elementViewChild?.nativeElement) {
861
- const parentElement = this.elementViewChild.nativeElement.parentElement.parentElement;
862
- const width = this._scrollWidth || `${this.elementViewChild.nativeElement.offsetWidth || parentElement.offsetWidth}px`;
863
- const height = this._scrollHeight || `${this.elementViewChild.nativeElement.offsetHeight || parentElement.offsetHeight}px`;
864
- const setProp = (_name, _value) => (this.elementViewChild.nativeElement.style[_name] = _value);
865
- if (this.both || this.horizontal) {
866
- setProp('height', height);
867
- setProp('width', width);
868
- }
869
- else {
870
- setProp('height', height);
871
- }
872
- }
873
- }
874
- setSpacerSize() {
875
- if (this._items) {
876
- const contentPos = this.getContentPosition();
877
- const setProp = (_name, _value, _size, _cpos = 0) => (this.spacerStyle = {
878
- ...this.spacerStyle,
879
- ...{ [`${_name}`]: (_value || []).length * _size + _cpos + 'px' }
880
- });
881
- if (this.both) {
882
- setProp('height', this._items, this._itemSize[0], contentPos.y);
883
- setProp('width', this._columns || this._items[1], this._itemSize[1], contentPos.x);
884
- }
885
- else {
886
- this.horizontal ? setProp('width', this._columns || this._items, this._itemSize, contentPos.x) : setProp('height', this._items, this._itemSize, contentPos.y);
887
- }
888
- }
889
- }
890
- setContentPosition(pos) {
891
- if (this.contentEl && !this._appendOnly) {
892
- const first = pos ? pos.first : this.first;
893
- const calculateTranslateVal = (_first, _size) => _first * _size;
894
- const setTransform = (_x = 0, _y = 0) => (this.contentStyle = { ...this.contentStyle, ...{ transform: `translate3d(${_x}px, ${_y}px, 0)` } });
895
- if (this.both) {
896
- setTransform(calculateTranslateVal(first.cols, this._itemSize[1]), calculateTranslateVal(first.rows, this._itemSize[0]));
897
- }
898
- else {
899
- const translateVal = calculateTranslateVal(first, this._itemSize);
900
- this.horizontal ? setTransform(translateVal, 0) : setTransform(0, translateVal);
901
- }
902
- }
903
- }
904
- onScrollPositionChange(event) {
905
- const target = event.target;
906
- const contentPos = this.getContentPosition();
907
- const calculateScrollPos = (_pos, _cpos) => (_pos ? (_pos > _cpos ? _pos - _cpos : _pos) : 0);
908
- const calculateCurrentIndex = (_pos, _size) => (_size || _pos ? Math.floor(_pos / (_size || _pos)) : 0);
909
- const calculateTriggerIndex = (_currentIndex, _first, _last, _num, _numT, _isScrollDownOrRight) => {
910
- return _currentIndex <= _numT ? _numT : _isScrollDownOrRight ? _last - _num - _numT : _first + _numT - 1;
911
- };
912
- const calculateFirst = (_currentIndex, _triggerIndex, _first, _last, _num, _numT, _isScrollDownOrRight) => {
913
- if (_currentIndex <= _numT)
914
- return 0;
915
- else
916
- return Math.max(0, _isScrollDownOrRight ? (_currentIndex < _triggerIndex ? _first : _currentIndex - _numT) : _currentIndex > _triggerIndex ? _first : _currentIndex - 2 * _numT);
917
- };
918
- const calculateLast = (_currentIndex, _first, _last, _num, _numT, _isCols = false) => {
919
- let lastValue = _first + _num + 2 * _numT;
920
- if (_currentIndex >= _numT) {
921
- lastValue += _numT + 1;
922
- }
923
- return this.getLast(lastValue, _isCols);
924
- };
925
- const scrollTop = calculateScrollPos(target.scrollTop, contentPos.top);
926
- const scrollLeft = calculateScrollPos(target.scrollLeft, contentPos.left);
927
- let newFirst = this.both ? { rows: 0, cols: 0 } : 0;
928
- let newLast = this.last;
929
- let isRangeChanged = false;
930
- let newScrollPos = this.lastScrollPos;
931
- if (this.both) {
932
- const isScrollDown = this.lastScrollPos.top <= scrollTop;
933
- const isScrollRight = this.lastScrollPos.left <= scrollLeft;
934
- if (!this._appendOnly || (this._appendOnly && (isScrollDown || isScrollRight))) {
935
- const currentIndex = {
936
- rows: calculateCurrentIndex(scrollTop, this._itemSize[0]),
937
- cols: calculateCurrentIndex(scrollLeft, this._itemSize[1])
938
- };
939
- const triggerIndex = {
940
- rows: calculateTriggerIndex(currentIndex.rows, this.first.rows, this.last.rows, this.numItemsInViewport.rows, this.d_numToleratedItems[0], isScrollDown),
941
- cols: calculateTriggerIndex(currentIndex.cols, this.first.cols, this.last.cols, this.numItemsInViewport.cols, this.d_numToleratedItems[1], isScrollRight)
942
- };
943
- newFirst = {
944
- rows: calculateFirst(currentIndex.rows, triggerIndex.rows, this.first.rows, this.last.rows, this.numItemsInViewport.rows, this.d_numToleratedItems[0], isScrollDown),
945
- cols: calculateFirst(currentIndex.cols, triggerIndex.cols, this.first.cols, this.last.cols, this.numItemsInViewport.cols, this.d_numToleratedItems[1], isScrollRight)
946
- };
947
- newLast = {
948
- rows: calculateLast(currentIndex.rows, newFirst.rows, this.last.rows, this.numItemsInViewport.rows, this.d_numToleratedItems[0]),
949
- cols: calculateLast(currentIndex.cols, newFirst.cols, this.last.cols, this.numItemsInViewport.cols, this.d_numToleratedItems[1], true)
950
- };
951
- isRangeChanged = newFirst.rows !== this.first.rows || newLast.rows !== this.last.rows || newFirst.cols !== this.first.cols || newLast.cols !== this.last.cols || this.isRangeChanged;
952
- newScrollPos = { top: scrollTop, left: scrollLeft };
953
- }
954
- }
955
- else {
956
- const scrollPos = this.horizontal ? scrollLeft : scrollTop;
957
- const isScrollDownOrRight = this.lastScrollPos <= scrollPos;
958
- if (!this._appendOnly || (this._appendOnly && isScrollDownOrRight)) {
959
- const currentIndex = calculateCurrentIndex(scrollPos, this._itemSize);
960
- const triggerIndex = calculateTriggerIndex(currentIndex, this.first, this.last, this.numItemsInViewport, this.d_numToleratedItems, isScrollDownOrRight);
961
- newFirst = calculateFirst(currentIndex, triggerIndex, this.first, this.last, this.numItemsInViewport, this.d_numToleratedItems, isScrollDownOrRight);
962
- newLast = calculateLast(currentIndex, newFirst, this.last, this.numItemsInViewport, this.d_numToleratedItems);
963
- isRangeChanged = newFirst !== this.first || newLast !== this.last || this.isRangeChanged;
964
- newScrollPos = scrollPos;
965
- }
966
- }
967
- return {
968
- first: newFirst,
969
- last: newLast,
970
- isRangeChanged,
971
- scrollPos: newScrollPos
972
- };
973
- }
974
- onScrollChange(event) {
975
- const { first, last, isRangeChanged, scrollPos } = this.onScrollPositionChange(event);
976
- if (isRangeChanged) {
977
- const newState = { first, last };
978
- this.setContentPosition(newState);
979
- this.first = first;
980
- this.last = last;
981
- this.lastScrollPos = scrollPos;
982
- this.handleEvents('onScrollIndexChange', newState);
983
- if (this._lazy && this.isPageChanged(first)) {
984
- const lazyLoadState = {
985
- first: this._step ? Math.min(this.getPageByFirst(first) * this._step, this.items.length - this._step) : first,
986
- last: Math.min(this._step ? (this.getPageByFirst(first) + 1) * this._step : last, this.items.length)
987
- };
988
- const isLazyStateChanged = this.lazyLoadState.first !== lazyLoadState.first || this.lazyLoadState.last !== lazyLoadState.last;
989
- isLazyStateChanged && this.handleEvents('onLazyLoad', lazyLoadState);
990
- this.lazyLoadState = lazyLoadState;
991
- }
992
- }
993
- }
994
- onContainerScroll(event) {
995
- this.handleEvents('onScroll', { originalEvent: event });
996
- if (this._delay && this.isPageChanged()) {
997
- if (this.scrollTimeout) {
998
- clearTimeout(this.scrollTimeout);
999
- }
1000
- if (!this.d_loading && this.showLoader) {
1001
- const { isRangeChanged } = this.onScrollPositionChange(event);
1002
- const changed = isRangeChanged || (this._step ? this.isPageChanged() : false);
1003
- if (changed) {
1004
- this.d_loading = true;
1005
- this.cd.detectChanges();
1006
- }
1007
- }
1008
- this.scrollTimeout = setTimeout(() => {
1009
- this.onScrollChange(event);
1010
- if (this.d_loading && this.showLoader && (!this._lazy || this._loading === undefined)) {
1011
- this.d_loading = false;
1012
- this.page = this.getPageByFirst();
1013
- }
1014
- this.cd.detectChanges();
1015
- }, this._delay);
1016
- }
1017
- else {
1018
- !this.d_loading && this.onScrollChange(event);
1019
- }
1020
- }
1021
- bindResizeListener() {
1022
- if (isPlatformBrowser(this.platformId)) {
1023
- if (!this.windowResizeListener) {
1024
- this.zone.runOutsideAngular(() => {
1025
- const window = this.document.defaultView;
1026
- const event = isTouchDevice() ? 'orientationchange' : 'resize';
1027
- this.windowResizeListener = this.renderer.listen(window, event, this.onWindowResize.bind(this));
1028
- });
1029
- }
1030
- }
1031
- }
1032
- unbindResizeListener() {
1033
- if (this.windowResizeListener) {
1034
- this.windowResizeListener();
1035
- this.windowResizeListener = null;
1036
- }
1037
- }
1038
- onWindowResize() {
1039
- if (this.resizeTimeout) {
1040
- clearTimeout(this.resizeTimeout);
1041
- }
1042
- this.resizeTimeout = setTimeout(() => {
1043
- if (isVisible(this.elementViewChild?.nativeElement)) {
1044
- const [width, height] = [getWidth(this.elementViewChild?.nativeElement), getHeight(this.elementViewChild?.nativeElement)];
1045
- const [isDiffWidth, isDiffHeight] = [width !== this.defaultWidth, height !== this.defaultHeight];
1046
- const reinit = this.both ? isDiffWidth || isDiffHeight : this.horizontal ? isDiffWidth : this.vertical ? isDiffHeight : false;
1047
- reinit &&
1048
- this.zone.run(() => {
1049
- this.d_numToleratedItems = this._numToleratedItems;
1050
- this.defaultWidth = width;
1051
- this.defaultHeight = height;
1052
- this.defaultContentWidth = getWidth(this.contentEl);
1053
- this.defaultContentHeight = getHeight(this.contentEl);
1054
- this.init();
1055
- });
1056
- }
1057
- }, this._resizeDelay);
1058
- }
1059
- handleEvents(name, params) {
1060
- //@ts-ignore
1061
- return this.options && this.options[name] ? this.options[name](params) : this[name].emit(params);
1062
- }
1063
- getContentOptions() {
1064
- return {
1065
- contentStyleClass: `p-virtualscroller-content ${this.d_loading ? 'p-virtualscroller-loading' : ''}`,
1066
- items: this.loadedItems,
1067
- getItemOptions: (index) => this.getOptions(index),
1068
- loading: this.d_loading,
1069
- getLoaderOptions: (index, options) => this.getLoaderOptions(index, options),
1070
- itemSize: this._itemSize,
1071
- rows: this.loadedRows,
1072
- columns: this.loadedColumns,
1073
- spacerStyle: this.spacerStyle,
1074
- contentStyle: this.contentStyle,
1075
- vertical: this.vertical,
1076
- horizontal: this.horizontal,
1077
- both: this.both
1078
- };
1079
- }
1080
- getOptions(renderedIndex) {
1081
- const count = (this._items || []).length;
1082
- const index = this.both ? this.first.rows + renderedIndex : this.first + renderedIndex;
1083
- return {
1084
- index,
1085
- count,
1086
- first: index === 0,
1087
- last: index === count - 1,
1088
- even: index % 2 === 0,
1089
- odd: index % 2 !== 0
1090
- };
1091
- }
1092
- getLoaderOptions(index, extOptions) {
1093
- const count = this.loaderArr.length;
1094
- return {
1095
- index,
1096
- count,
1097
- first: index === 0,
1098
- last: index === count - 1,
1099
- even: index % 2 === 0,
1100
- odd: index % 2 !== 0,
1101
- ...extOptions
1102
- };
1103
- }
1104
- static ɵfac = function Scroller_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || Scroller)(i0.ɵɵdirectiveInject(i0.NgZone)); };
1105
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Scroller, selectors: [["p-scroller"], ["p-virtualscroller"], ["p-virtual-scroller"], ["p-virtualScroller"]], contentQueries: function Scroller_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
1106
- i0.ɵɵcontentQuery(dirIndex, _c0, 5);
1107
- i0.ɵɵcontentQuery(dirIndex, _c1, 5);
1108
- i0.ɵɵcontentQuery(dirIndex, _c2, 5);
1109
- i0.ɵɵcontentQuery(dirIndex, _c3, 5);
1110
- } if (rf & 2) {
1111
- let _t;
1112
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentTemplate = _t.first);
1113
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.itemTemplate = _t.first);
1114
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.loaderTemplate = _t.first);
1115
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.loadericonTemplate = _t.first);
1116
- } }, viewQuery: function Scroller_Query(rf, ctx) { if (rf & 1) {
1117
- i0.ɵɵviewQuery(_c4, 5);
1118
- i0.ɵɵviewQuery(_c0, 5);
1119
- } if (rf & 2) {
1120
- let _t;
1121
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.elementViewChild = _t.first);
1122
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.contentViewChild = _t.first);
1123
- } }, inputs: { id: "id", style: "style", styleClass: "styleClass", tabindex: "tabindex", items: "items", itemSize: "itemSize", scrollHeight: "scrollHeight", scrollWidth: "scrollWidth", orientation: "orientation", step: "step", delay: "delay", resizeDelay: "resizeDelay", appendOnly: "appendOnly", inline: "inline", lazy: "lazy", disabled: "disabled", loaderDisabled: "loaderDisabled", columns: "columns", showSpacer: "showSpacer", showLoader: "showLoader", numToleratedItems: "numToleratedItems", loading: "loading", autoSize: "autoSize", trackBy: "trackBy", options: "options" }, outputs: { onLazyLoad: "onLazyLoad", onScroll: "onScroll", onScrollIndexChange: "onScrollIndexChange" }, standalone: true, features: [i0.ɵɵProvidersFeature([ScrollerStyle]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature], ngContentSelectors: _c5, decls: 3, vars: 2, consts: [["disabledContainer", ""], ["element", ""], ["buildInContent", ""], ["content", ""], ["buildInLoader", ""], ["buildInLoaderIcon", ""], [4, "ngIf", "ngIfElse"], [3, "scroll", "ngStyle", "ngClass"], ["class", "p-virtualscroller-spacer", 3, "ngStyle", 4, "ngIf"], ["class", "p-virtualscroller-loader", 3, "ngClass", 4, "ngIf"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "p-virtualscroller-content", 3, "ngClass", "ngStyle"], [4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "p-virtualscroller-spacer", 3, "ngStyle"], [1, "p-virtualscroller-loader", 3, "ngClass"], [4, "ngFor", "ngForOf"], [3, "styleClass"], [4, "ngIf"]], template: function Scroller_Template(rf, ctx) { if (rf & 1) {
1124
- i0.ɵɵprojectionDef();
1125
- i0.ɵɵtemplate(0, Scroller_ng_container_0_Template, 8, 16, "ng-container", 6)(1, Scroller_ng_template_1_Template, 2, 1, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
1126
- } if (rf & 2) {
1127
- const disabledContainer_r9 = i0.ɵɵreference(2);
1128
- i0.ɵɵproperty("ngIf", !ctx._disabled)("ngIfElse", disabledContainer_r9);
1129
- } }, dependencies: [CommonModule, i1.NgClass, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, i1.NgStyle, SpinnerIcon, SharedModule], encapsulation: 2 });
1130
- }
1131
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(Scroller, [{
1132
- type: Component,
1133
- args: [{
1134
- selector: 'p-scroller, p-virtualscroller, p-virtual-scroller, p-virtualScroller',
1135
- imports: [CommonModule, SpinnerIcon, SharedModule],
1136
- standalone: true,
1137
- template: `
1138
- <ng-container *ngIf="!_disabled; else disabledContainer">
1139
- <div
1140
- #element
1141
- [attr.id]="_id"
1142
- [attr.tabindex]="tabindex"
1143
- [ngStyle]="_style"
1144
- [class]="_styleClass"
1145
- [ngClass]="{
1146
- 'p-virtualscroller': true,
1147
- 'p-virtualscroller-inline': inline,
1148
- 'p-virtualscroller-both p-both-scroll': both,
1149
- 'p-virtualscroller-horizontal p-horizontal-scroll': horizontal
1150
- }"
1151
- (scroll)="onContainerScroll($event)"
1152
- [attr.data-pc-name]="'scroller'"
1153
- [attr.data-pc-section]="'root'"
1154
- >
1155
- <ng-container *ngIf="contentTemplate; else buildInContent">
1156
- <ng-container *ngTemplateOutlet="contentTemplate; context: { $implicit: loadedItems, options: getContentOptions() }"></ng-container>
1157
- </ng-container>
1158
- <ng-template #buildInContent>
1159
- <div #content class="p-virtualscroller-content" [ngClass]="{ 'p-virtualscroller-loading ': d_loading }" [ngStyle]="contentStyle" [attr.data-pc-section]="'content'">
1160
- <ng-container *ngFor="let item of loadedItems; let index = index; trackBy: _trackBy">
1161
- <ng-container *ngTemplateOutlet="itemTemplate; context: { $implicit: item, options: getOptions(index) }"></ng-container>
1162
- </ng-container>
1163
- </div>
1164
- </ng-template>
1165
- <div *ngIf="_showSpacer" class="p-virtualscroller-spacer" [ngStyle]="spacerStyle" [attr.data-pc-section]="'spacer'"></div>
1166
- <div *ngIf="!loaderDisabled && _showLoader && d_loading" class="p-virtualscroller-loader" [ngClass]="{ 'p-virtualscroller-loader-mask': !loaderTemplate }" [attr.data-pc-section]="'loader'">
1167
- <ng-container *ngIf="loaderTemplate; else buildInLoader">
1168
- <ng-container *ngFor="let item of loaderArr; let index = index">
1169
- <ng-container
1170
- *ngTemplateOutlet="
1171
- loaderTemplate;
1172
- context: {
1173
- options: getLoaderOptions(index, both && { numCols: numItemsInViewport.cols })
1174
- }
1175
- "
1176
- ></ng-container>
1177
- </ng-container>
1178
- </ng-container>
1179
- <ng-template #buildInLoader>
1180
- <ng-container *ngIf="loadericonTemplate; else buildInLoaderIcon">
1181
- <ng-container *ngTemplateOutlet="loadericonTemplate; context: { options: { styleClass: 'p-virtualscroller-loading-icon' } }"></ng-container>
1182
- </ng-container>
1183
- <ng-template #buildInLoaderIcon>
1184
- <SpinnerIcon [styleClass]="'p-virtualscroller-loading-icon pi-spin'" [attr.data-pc-section]="'loadingIcon'" />
1185
- </ng-template>
1186
- </ng-template>
1187
- </div>
1188
- </div>
1189
- </ng-container>
1190
- <ng-template #disabledContainer>
1191
- <ng-content></ng-content>
1192
- <ng-container *ngIf="contentTemplate">
1193
- <ng-container *ngTemplateOutlet="contentTemplate; context: { $implicit: items, options: { rows: _items, columns: loadedColumns } }"></ng-container>
1194
- </ng-container>
1195
- </ng-template>
1196
- `,
1197
- changeDetection: ChangeDetectionStrategy.Default,
1198
- encapsulation: ViewEncapsulation.None,
1199
- providers: [ScrollerStyle]
1200
- }]
1201
- }], () => [{ type: i0.NgZone }], { id: [{
1202
- type: Input
1203
- }], style: [{
1204
- type: Input
1205
- }], styleClass: [{
1206
- type: Input
1207
- }], tabindex: [{
1208
- type: Input
1209
- }], items: [{
1210
- type: Input
1211
- }], itemSize: [{
1212
- type: Input
1213
- }], scrollHeight: [{
1214
- type: Input
1215
- }], scrollWidth: [{
1216
- type: Input
1217
- }], orientation: [{
1218
- type: Input
1219
- }], step: [{
1220
- type: Input
1221
- }], delay: [{
1222
- type: Input
1223
- }], resizeDelay: [{
1224
- type: Input
1225
- }], appendOnly: [{
1226
- type: Input
1227
- }], inline: [{
1228
- type: Input
1229
- }], lazy: [{
1230
- type: Input
1231
- }], disabled: [{
1232
- type: Input
1233
- }], loaderDisabled: [{
1234
- type: Input
1235
- }], columns: [{
1236
- type: Input
1237
- }], showSpacer: [{
1238
- type: Input
1239
- }], showLoader: [{
1240
- type: Input
1241
- }], numToleratedItems: [{
1242
- type: Input
1243
- }], loading: [{
1244
- type: Input
1245
- }], autoSize: [{
1246
- type: Input
1247
- }], trackBy: [{
1248
- type: Input
1249
- }], options: [{
1250
- type: Input
1251
- }], onLazyLoad: [{
1252
- type: Output
1253
- }], onScroll: [{
1254
- type: Output
1255
- }], onScrollIndexChange: [{
1256
- type: Output
1257
- }], elementViewChild: [{
1258
- type: ViewChild,
1259
- args: ['element']
1260
- }], contentViewChild: [{
1261
- type: ViewChild,
1262
- args: ['content']
1263
- }], contentTemplate: [{
1264
- type: ContentChild,
1265
- args: ['content']
1266
- }], itemTemplate: [{
1267
- type: ContentChild,
1268
- args: ['item']
1269
- }], loaderTemplate: [{
1270
- type: ContentChild,
1271
- args: ['loader']
1272
- }], loadericonTemplate: [{
1273
- type: ContentChild,
1274
- args: ['loadericon']
1275
- }] }); })();
1276
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(Scroller, { className: "Scroller" }); })();
1277
- export class ScrollerModule {
1278
- static ɵfac = function ScrollerModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ScrollerModule)(); };
1279
- static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: ScrollerModule });
1280
- static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [Scroller, SharedModule, SharedModule] });
1281
- }
1282
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ScrollerModule, [{
1283
- type: NgModule,
1284
- args: [{
1285
- imports: [Scroller, SharedModule],
1286
- exports: [Scroller, SharedModule]
1287
- }]
1288
- }], null, null); })();
1289
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(ScrollerModule, { imports: [Scroller, SharedModule], exports: [Scroller, SharedModule] }); })();
1290
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2Nyb2xsZXIvc2Nyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBSVIsTUFBTSxFQUlOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQWtDLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTZCbEMsd0JBQW9JOzs7SUFEeEksNkJBQTJEO0lBQ3ZELDBHQUFxSDs7OztJQUF0RyxjQUFtQztJQUFBLEFBQW5DLHlEQUFtQyx1R0FBaUU7OztJQUszRyx3QkFBd0g7OztJQUQ1SCw2QkFBcUY7SUFDakYsd0hBQXlHOzs7Ozs7SUFBMUYsY0FBZ0M7SUFBQSxBQUFoQyxzREFBZ0MsNkZBQXdEOzs7SUFGL0csa0NBQW9LO0lBQ2hLLHlHQUFxRjtJQUd6RixpQkFBTTs7O0lBSmtHLEFBQXhELHNFQUF1RCxnQ0FBeUI7O0lBQzdGLGVBQWdCO0lBQW1CLEFBQW5DLDRDQUFnQixpQ0FBb0M7OztJQUszRiwwQkFBMEg7OztJQUFoRSw0Q0FBdUI7Ozs7SUFJckUsd0JBT2dC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TztrQkFBbkIsS0FBSztZQVVPLFVBQVU7a0JBQXRCLEtBQUs7WUFVTyxVQUFVO2tCQUF0QixLQUFLO1lBVU8saUJBQWlCO2tCQUE3QixLQUFLO1lBVU8sT0FBTztrQkFBbkIsS0FBSztZQVVPLFFBQVE7a0JBQXBCLEtBQUs7WUFVTyxPQUFPO2tCQUFuQixLQUFLO1lBVU8sT0FBTztrQkFBbkIsS0FBSztZQWdCSSxVQUFVO2tCQUFuQixNQUFNO1lBTUcsUUFBUTtrQkFBakIsTUFBTTtZQU1HLG1CQUFtQjtrQkFBNUIsTUFBTTtZQUVlLGdCQUFnQjtrQkFBckMsU0FBUzttQkFBQyxTQUFTO1lBRUUsZ0JBQWdCO2tCQUFyQyxTQUFTO21CQUFDLFNBQVM7WUE2REssZUFBZTtrQkFBdkMsWUFBWTttQkFBQyxTQUFTO1lBTUQsWUFBWTtrQkFBakMsWUFBWTttQkFBQyxNQUFNO1lBTUksY0FBYztrQkFBckMsWUFBWTttQkFBQyxRQUFRO1lBTU0sa0JBQWtCO2tCQUE3QyxZQUFZO21CQUFDLFlBQVk7O2tGQXBXakIsUUFBUTtBQTRqQ3JCLE1BQU0sT0FBTyxjQUFjO3dHQUFkLGNBQWM7NERBQWQsY0FBYztnRUFIYixRQUFRLEVBQUUsWUFBWSxFQUNaLFlBQVk7O2lGQUV2QixjQUFjO2NBSjFCLFFBQVE7ZUFBQztnQkFDTixPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDO2dCQUNqQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDO2FBQ3BDOzt3RkFDWSxjQUFjLGNBNWpDZCxRQUFRLEVBeWpDRyxZQUFZLGFBempDdkIsUUFBUSxFQTBqQ0csWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbmRTaW5nbGUsIGdldEhlaWdodCwgZ2V0V2lkdGgsIGlzVG91Y2hEZXZpY2UsIGlzVmlzaWJsZSB9IGZyb20gJ0BwcmltZXVpeC91dGlscyc7XG5pbXBvcnQgeyBQcmltZVRlbXBsYXRlLCBTY3JvbGxlck9wdGlvbnMsIFNoYXJlZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdwcmltZW5nL2Jhc2Vjb21wb25lbnQnO1xuaW1wb3J0IHsgU3Bpbm5lckljb24gfSBmcm9tICdwcmltZW5nL2ljb25zJztcbmltcG9ydCB7IE51bGxhYmxlLCBWb2lkTGlzdGVuZXIgfSBmcm9tICdwcmltZW5nL3RzLWhlbHBlcnMnO1xuaW1wb3J0IHsgU2Nyb2xsZXJMYXp5TG9hZEV2ZW50LCBTY3JvbGxlclNjcm9sbEV2ZW50LCBTY3JvbGxlclNjcm9sbEluZGV4Q2hhbmdlRXZlbnQsIFNjcm9sbGVyVG9UeXBlIH0gZnJvbSAnLi9zY3JvbGxlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2Nyb2xsZXJTdHlsZSB9IGZyb20gJy4vc3R5bGUvc2Nyb2xsZXJzdHlsZSc7XG5cbi8qKlxuICogU2Nyb2xsZXIgaXMgYSBwZXJmb3JtYW5jZS1hcHByb2FjaCB0byBoYW5kbGUgaHVnZSBkYXRhIGVmZmljaWVudGx5LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLXNjcm9sbGVyLCBwLXZpcnR1YWxzY3JvbGxlciwgcC12aXJ0dWFsLXNjcm9sbGVyLCBwLXZpcnR1YWxTY3JvbGxlcicsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU3Bpbm5lckljb24sIFNoYXJlZE1vZHVsZV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIV9kaXNhYmxlZDsgZWxzZSBkaXNhYmxlZENvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICNlbGVtZW50XG4gICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiX2lkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiX3N0eWxlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiX3N0eWxlQ2xhc3NcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ3AtdmlydHVhbHNjcm9sbGVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgJ3AtdmlydHVhbHNjcm9sbGVyLWlubGluZSc6IGlubGluZSxcbiAgICAgICAgICAgICAgICAgICAgJ3AtdmlydHVhbHNjcm9sbGVyLWJvdGggcC1ib3RoLXNjcm9sbCc6IGJvdGgsXG4gICAgICAgICAgICAgICAgICAgICdwLXZpcnR1YWxzY3JvbGxlci1ob3Jpem9udGFsIHAtaG9yaXpvbnRhbC1zY3JvbGwnOiBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgKHNjcm9sbCk9XCJvbkNvbnRhaW5lclNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXBjLW5hbWVdPVwiJ3Njcm9sbGVyJ1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidyb290J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRUZW1wbGF0ZTsgZWxzZSBidWlsZEluQ29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbG9hZGVkSXRlbXMsIG9wdGlvbnM6IGdldENvbnRlbnRPcHRpb25zKCkgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnVpbGRJbkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgI2NvbnRlbnQgY2xhc3M9XCJwLXZpcnR1YWxzY3JvbGxlci1jb250ZW50XCIgW25nQ2xhc3NdPVwieyAncC12aXJ0dWFsc2Nyb2xsZXItbG9hZGluZyAnOiBkX2xvYWRpbmcgfVwiIFtuZ1N0eWxlXT1cImNvbnRlbnRTdHlsZVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInY29udGVudCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbG9hZGVkSXRlbXM7IGxldCBpbmRleCA9IGluZGV4OyB0cmFja0J5OiBfdHJhY2tCeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtLCBvcHRpb25zOiBnZXRPcHRpb25zKGluZGV4KSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiX3Nob3dTcGFjZXJcIiBjbGFzcz1cInAtdmlydHVhbHNjcm9sbGVyLXNwYWNlclwiIFtuZ1N0eWxlXT1cInNwYWNlclN0eWxlXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidzcGFjZXInXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFsb2FkZXJEaXNhYmxlZCAmJiBfc2hvd0xvYWRlciAmJiBkX2xvYWRpbmdcIiBjbGFzcz1cInAtdmlydHVhbHNjcm9sbGVyLWxvYWRlclwiIFtuZ0NsYXNzXT1cInsgJ3AtdmlydHVhbHNjcm9sbGVyLWxvYWRlci1tYXNrJzogIWxvYWRlclRlbXBsYXRlIH1cIiBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ2xvYWRlcidcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRlclRlbXBsYXRlOyBlbHNlIGJ1aWxkSW5Mb2FkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbG9hZGVyQXJyOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IGdldExvYWRlck9wdGlvbnMoaW5kZXgsIGJvdGggJiYgeyBudW1Db2xzOiBudW1JdGVtc0luVmlld3BvcnQuY29scyB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNidWlsZEluTG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRlcmljb25UZW1wbGF0ZTsgZWxzZSBidWlsZEluTG9hZGVySWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkZXJpY29uVGVtcGxhdGU7IGNvbnRleHQ6IHsgb3B0aW9uczogeyBzdHlsZUNsYXNzOiAncC12aXJ0dWFsc2Nyb2xsZXItbG9hZGluZy1pY29uJyB9IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNidWlsZEluTG9hZGVySWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3Bpbm5lckljb24gW3N0eWxlQ2xhc3NdPVwiJ3AtdmlydHVhbHNjcm9sbGVyLWxvYWRpbmctaWNvbiBwaS1zcGluJ1wiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInbG9hZGluZ0ljb24nXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzYWJsZWRDb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW1zLCBvcHRpb25zOiB7IHJvd3M6IF9pdGVtcywgY29sdW1uczogbG9hZGVkQ29sdW1ucyB9IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbU2Nyb2xsZXJTdHlsZV1cbn0pXG5leHBvcnQgY2xhc3MgU2Nyb2xsZXIgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBpZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5faWQ7XG4gICAgfVxuICAgIHNldCBpZCh2YWw6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9pZCA9IHZhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IHN0eWxlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgICB9XG4gICAgc2V0IHN0eWxlKHZhbDogYW55KSB7XG4gICAgICAgIHRoaXMuX3N0eWxlID0gdmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdHlsZSBjbGFzcyBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgc3R5bGVDbGFzcygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVDbGFzcztcbiAgICB9XG4gICAgc2V0IHN0eWxlQ2xhc3ModmFsOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fc3R5bGVDbGFzcyA9IHZhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGFiYmluZyBvcmRlci5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgdGFiaW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJpbmRleDtcbiAgICB9XG4gICAgc2V0IHRhYmluZGV4KHZhbDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RhYmluZGV4ID0gdmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBvYmplY3RzIHRvIGRpc3BsYXkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGl0ZW1zKCk6IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgICB9XG4gICAgc2V0IGl0ZW1zKHZhbDogYW55W10gfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgaGVpZ2h0L3dpZHRoIG9mIGl0ZW0gYWNjb3JkaW5nIHRvIG9yaWVudGF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBpdGVtU2l6ZSgpOiBudW1iZXJbXSB8IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtU2l6ZTtcbiAgICB9XG4gICAgc2V0IGl0ZW1TaXplKHZhbDogbnVtYmVyW10gfCBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5faXRlbVNpemUgPSB2YWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgc2Nyb2xsIHZpZXdwb3J0LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBzY3JvbGxIZWlnaHQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbEhlaWdodDtcbiAgICB9XG4gICAgc2V0IHNjcm9sbEhlaWdodCh2YWw6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9zY3JvbGxIZWlnaHQgPSB2YWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdpZHRoIG9mIHRoZSBzY3JvbGwgdmlld3BvcnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IHNjcm9sbFdpZHRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY3JvbGxXaWR0aDtcbiAgICB9XG4gICAgc2V0IHNjcm9sbFdpZHRoKHZhbDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3Njcm9sbFdpZHRoID0gdmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgb3JpZW50YXRpb24gb2Ygc2Nyb2xsYmFyLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBvcmllbnRhdGlvbigpOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgJ2JvdGgnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uO1xuICAgIH1cbiAgICBzZXQgb3JpZW50YXRpb24odmFsOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgJ2JvdGgnKSB7XG4gICAgICAgIHRoaXMuX29yaWVudGF0aW9uID0gdmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIHNwZWNpZnkgaG93IG1hbnkgaXRlbXMgdG8gbG9hZCBpbiBlYWNoIGxvYWQgbWV0aG9kIGluIGxhenkgbW9kZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgc3RlcCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RlcDtcbiAgICB9XG4gICAgc2V0IHN0ZXAodmFsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fc3RlcCA9IHZhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsYXkgaW4gc2Nyb2xsIGJlZm9yZSBuZXcgZGF0YSBpcyBsb2FkZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGRlbGF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVsYXk7XG4gICAgfVxuICAgIHNldCBkZWxheSh2YWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9kZWxheSA9IHZhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsYXkgYWZ0ZXIgd2luZG93J3MgcmVzaXplIGZpbmlzaGVzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCByZXNpemVEZWxheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc2l6ZURlbGF5O1xuICAgIH1cbiAgICBzZXQgcmVzaXplRGVsYXkodmFsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fcmVzaXplRGVsYXkgPSB2YWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gYXBwZW5kIGVhY2ggbG9hZGVkIGl0ZW0gdG8gdG9wIHdpdGhvdXQgcmVtb3ZpbmcgYW55IGl0ZW1zIGZyb20gdGhlIERPTS4gVXNpbmcgdmVyeSBsYXJnZSBkYXRhIG1heSBjYXVzZSB0aGUgYnJvd3NlciB0byBjcmFzaC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgYXBwZW5kT25seSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FwcGVuZE9ubHk7XG4gICAgfVxuICAgIHNldCBhcHBlbmRPbmx5KHZhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9hcHBlbmRPbmx5ID0gdmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgc2Nyb2xsZXIgc2hvdWxkIGJlIGRpc3BsYXllZCBpbmxpbmUgb3Igbm90LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBpbmxpbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmxpbmU7XG4gICAgfVxuICAgIHNldCBpbmxpbmUodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2lubGluZSA9IHZhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBpZiBkYXRhIGlzIGxvYWRlZCBhbmQgaW50ZXJhY3RlZCB3aXRoIGluIGxhenkgbWFubmVyLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBsYXp5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGF6eTtcbiAgICB9XG4gICAgc2V0IGxhenkodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2xhenkgPSB2YWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIGRpc2FibGVkLCB0aGUgc2Nyb2xsZXIgZmVhdHVyZSBpcyBlbGltaW5hdGVkIGFuZCB0aGUgY29udGVudCBpcyBkaXNwbGF5ZWQgZGlyZWN0bHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCBkaXNhYmxlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gaW1wbGVtZW50IGEgY3VzdG9tIGxvYWRlciBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBsb2FkZXIgZmVhdHVyZSBpbiB0aGUgc2Nyb2xsZXIuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGxvYWRlckRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVyRGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCBsb2FkZXJEaXNhYmxlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fbG9hZGVyRGlzYWJsZWQgPSB2YWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbHVtbnMgdG8gZGlzcGxheS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgY29sdW1ucygpOiBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG4gICAgc2V0IGNvbHVtbnModmFsOiBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fY29sdW1ucyA9IHZhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBpbXBsZW1lbnQgYSBjdXN0b20gc3BhY2VyIGluc3RlYWQgb2YgdXNpbmcgdGhlIHNwYWNlciBmZWF0dXJlIGluIHRoZSBzY3JvbGxlci5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgc2hvd1NwYWNlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dTcGFjZXI7XG4gICAgfVxuICAgIHNldCBzaG93U3BhY2VyKHZhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zaG93U3BhY2VyID0gdmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyBsb2FkZXIuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IHNob3dMb2FkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93TG9hZGVyO1xuICAgIH1cbiAgICBzZXQgc2hvd0xvYWRlcih2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2hvd0xvYWRlciA9IHZhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBob3cgbWFueSBhZGRpdGlvbmFsIGVsZW1lbnRzIHRvIGFkZCB0byB0aGUgRE9NIG91dHNpZGUgb2YgdGhlIHZpZXcuIEFjY29yZGluZyB0byB0aGUgc2Nyb2xscyBtYWRlIHVwIGFuZCBkb3duLCBleHRyYSBpdGVtcyBhcmUgYWRkZWQgaW4gYSBjZXJ0YWluIGFsZ29yaXRobSBpbiB0aGUgZm9ybSBvZiBtdWx0aXBsZXMgb2YgdGhpcyBudW1iZXIuIERlZmF1bHQgdmFsdWUgaXMgaGFsZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHNob3duIGluIHRoZSB2aWV3LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBudW1Ub2xlcmF0ZWRJdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX251bVRvbGVyYXRlZEl0ZW1zO1xuICAgIH1cbiAgICBzZXQgbnVtVG9sZXJhdGVkSXRlbXModmFsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbnVtVG9sZXJhdGVkSXRlbXMgPSB2YWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmluZXMgd2hldGhlciB0aGUgZGF0YSBpcyBsb2FkZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICAgIH1cbiAgICBzZXQgbG9hZGluZyh2YWw6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fbG9hZGluZyA9IHZhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB3aGV0aGVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSB0aGUgaGVpZ2h0IG9yIHdpZHRoIG9mIHNjcm9sbGFibGUgY29udGFpbmVyLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBhdXRvU2l6ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9TaXplO1xuICAgIH1cbiAgICBzZXQgYXV0b1NpemUodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2F1dG9TaXplID0gdmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBvcHRpbWl6ZSB0aGUgZG9tIG9wZXJhdGlvbnMgYnkgZGVsZWdhdGluZyB0byBuZ0ZvclRyYWNrQnksIGRlZmF1bHQgYWxnb3JpdG0gY2hlY2tzIGZvciBvYmplY3QgaWRlbnRpdHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IHRyYWNrQnkoKTogRnVuY3Rpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhY2tCeTtcbiAgICB9XG4gICAgc2V0IHRyYWNrQnkodmFsOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLl90cmFja0J5ID0gdmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBzY3JvbGxlciBmZWF0dXJlLiBUaGUgcHJvcGVydGllcyBvZiBzY3JvbGxlciBjb21wb25lbnQgY2FuIGJlIHVzZWQgbGlrZSBhbiBvYmplY3QgaW4gaXQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IG9wdGlvbnMoKTogU2Nyb2xsZXJPcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gICAgfVxuICAgIHNldCBvcHRpb25zKHZhbDogU2Nyb2xsZXJPcHRpb25zIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSB2YWw7XG5cbiAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyh2YWwpLmZvckVhY2goKFtrLCB2XSkgPT4gdGhpc1tgXyR7a31gXSAhPT0gdiAmJiAodGhpc1tgXyR7a31gXSA9IHYpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2UgaW4gbGF6eSBtb2RlIHRvIGxvYWQgbmV3IGRhdGEuXG4gICAgICogQHBhcmFtIHtTY3JvbGxlckxhenlMb2FkRXZlbnR9IGV2ZW50IC0gQ3VzdG9tIGxhenkgbG9hZCBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25MYXp5TG9hZDogRXZlbnRFbWl0dGVyPFNjcm9sbGVyTGF6eUxvYWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFNjcm9sbGVyTGF6eUxvYWRFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBzY3JvbGwgcG9zaXRpb24gY2hhbmdlcy5cbiAgICAgKiBAcGFyYW0ge1Njcm9sbGVyU2Nyb2xsRXZlbnR9IGV2ZW50IC0gQ3VzdG9tIHNjcm9sbCBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TY3JvbGw6IEV2ZW50RW1pdHRlcjxTY3JvbGxlclNjcm9sbEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8U2Nyb2xsZXJTY3JvbGxFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBzY3JvbGwgcG9zaXRpb24gYW5kIGl0ZW0ncyByYW5nZSBpbiB2aWV3IGNoYW5nZXMuXG4gICAgICogQHBhcmFtIHtTY3JvbGxlclNjcm9sbEV2ZW50fSBldmVudCAtIEN1c3RvbSBzY3JvbGwgaW5kZXggY2hhbmdlIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNjcm9sbEluZGV4Q2hhbmdlOiBFdmVudEVtaXR0ZXI8U2Nyb2xsZXJTY3JvbGxJbmRleENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8U2Nyb2xsZXJTY3JvbGxJbmRleENoYW5nZUV2ZW50PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnZWxlbWVudCcpIGVsZW1lbnRWaWV3Q2hpbGQ6IE51bGxhYmxlPEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZCgnY29udGVudCcpIGNvbnRlbnRWaWV3Q2hpbGQ6IE51bGxhYmxlPEVsZW1lbnRSZWY+O1xuXG4gICAgX2lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBfc3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbiAgICBfc3R5bGVDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgX3RhYmluZGV4OiBudW1iZXIgPSAwO1xuXG4gICAgX2l0ZW1zOiBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgICBfaXRlbVNpemU6IG51bWJlciB8IG51bWJlcltdID0gMDtcblxuICAgIF9zY3JvbGxIZWlnaHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIF9zY3JvbGxXaWR0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgX29yaWVudGF0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgJ2JvdGgnID0gJ3ZlcnRpY2FsJztcblxuICAgIF9zdGVwOiBudW1iZXIgPSAwO1xuXG4gICAgX2RlbGF5OiBudW1iZXIgPSAwO1xuXG4gICAgX3Jlc2l6ZURlbGF5OiBudW1iZXIgPSAxMDtcblxuICAgIF9hcHBlbmRPbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBfaW5saW5lOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBfbGF6eTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBfbG9hZGVyRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIF9jb2x1bW5zOiBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgICBfc2hvd1NwYWNlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBfc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgX251bVRvbGVyYXRlZEl0ZW1zOiBhbnk7XG5cbiAgICBfbG9hZGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIF9hdXRvU2l6ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgX3RyYWNrQnk6IGFueTtcblxuICAgIF9vcHRpb25zOiBTY3JvbGxlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG5cbiAgICBkX2xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGRfbnVtVG9sZXJhdGVkSXRlbXM6IGFueTtcblxuICAgIGNvbnRlbnRFbDogYW55O1xuICAgIC8qKlxuICAgICAqIENvbnRlbnQgdGVtcGxhdGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgVGVtcGxhdGVzXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnY29udGVudCcpIGNvbnRlbnRUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICAvKipcbiAgICAgKiBJdGVtIHRlbXBsYXRlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFRlbXBsYXRlc1xuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2l0ZW0nKSBpdGVtVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgLyoqXG4gICAgICogTG9hZGVyIHRlbXBsYXRlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFRlbXBsYXRlc1xuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2xvYWRlcicpIGxvYWRlclRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIC8qKlxuICAgICAqIExvYWRlciBpY29uIHRlbXBsYXRlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFRlbXBsYXRlc1xuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2xvYWRlcmljb24nKSBsb2FkZXJpY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgZmlyc3Q6IGFueSA9IDA7XG5cbiAgICBsYXN0OiBhbnkgPSAwO1xuXG4gICAgcGFnZTogbnVtYmVyID0gMDtcblxuICAgIGlzUmFuZ2VDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBudW1JdGVtc0luVmlld3BvcnQ6IGFueSA9IDA7XG5cbiAgICBsYXN0U2Nyb2xsUG9zOiBhbnkgPSAwO1xuXG4gICAgbGF6eUxvYWRTdGF0ZTogYW55ID0ge307XG5cbiAgICBsb2FkZXJBcnI6IGFueVtdID0gW107XG5cbiAgICBzcGFjZXJTdHlsZTogeyBba2xhc3M6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZCA9IHt9O1xuXG4gICAgY29udGVudFN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkID0ge307XG5cbiAgICBzY3JvbGxUaW1lb3V0OiBhbnk7XG5cbiAgICByZXNpemVUaW1lb3V0OiBhbnk7XG5cbiAgICBpbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgd2luZG93UmVzaXplTGlzdGVuZXI6IFZvaWRMaXN0ZW5lcjtcblxuICAgIGRlZmF1bHRXaWR0aDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgZGVmYXVsdEhlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgZGVmYXVsdENvbnRlbnRXaWR0aDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgZGVmYXVsdENvbnRlbnRIZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIGdldCB2ZXJ0aWNhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uID09PSAndmVydGljYWwnO1xuICAgIH1cblxuICAgIGdldCBob3Jpem9udGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgICB9XG5cbiAgICBnZXQgYm90aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uID09PSAnYm90aCc7XG4gICAgfVxuXG4gICAgZ2V0IGxvYWRlZEl0ZW1zKCkge1xuICAgICAgICBpZiAodGhpcy5faXRlbXMgJiYgIXRoaXMuZF9sb2FkaW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ib3RoKSByZXR1cm4gdGhpcy5faXRlbXMuc2xpY2UodGhpcy5fYXBwZW5kT25seSA/IDAgOiB0aGlzLmZpcnN0LnJvd3MsIHRoaXMubGFzdC5yb3dzKS5tYXAoKGl0ZW0pID0+ICh0aGlzLl9jb2x1bW5zID8gaXRlbSA6IGl0ZW0uc2xpY2UodGhpcy5fYXBwZW5kT25seSA/IDAgOiB0aGlzLmZpcnN0LmNvbHMsIHRoaXMubGFzdC5jb2xzKSkpO1xuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5ob3Jpem9udGFsICYmIHRoaXMuX2NvbHVtbnMpIHJldHVybiB0aGlzLl9pdGVtcztcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIHRoaXMuX2l0ZW1zLnNsaWNlKHRoaXMuX2FwcGVuZE9ubHkgPyAwIDogdGhpcy5maXJzdCwgdGhpcy5sYXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBnZXQgbG9hZGVkUm93cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZF9sb2FkaW5nID8gKHRoaXMuX2xvYWRlckRpc2FibGVkID8gdGhpcy5sb2FkZXJBcnIgOiBbXSkgOiB0aGlzLmxvYWRlZEl0ZW1zO1xuICAgIH1cblxuICAgIGdldCBsb2FkZWRDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5fY29sdW1ucyAmJiAodGhpcy5ib3RoIHx8IHRoaXMuaG9yaXpvbnRhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRfbG9hZGluZyAmJiB0aGlzLl9sb2FkZXJEaXNhYmxlZCA/ICh0aGlzLmJvdGggPyB0aGlzLmxvYWRlckFyclswXSA6IHRoaXMubG9hZGVyQXJyKSA6IHRoaXMuX2NvbHVtbnMuc2xpY2UodGhpcy5ib3RoID8gdGhpcy5maXJzdC5jb2xzIDogdGhpcy5maXJzdCwgdGhpcy5ib3RoID8gdGhpcy5sYXN0LmNvbHMgOiB0aGlzLmxhc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gICAgfVxuXG4gICAgX2NvbXBvbmVudFN0eWxlID0gaW5qZWN0KFNjcm9sbGVyU3R5bGUpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKHNpbXBsZUNoYW5nZXMpO1xuICAgICAgICBsZXQgaXNMb2FkaW5nQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzaW1wbGVDaGFuZ2VzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlIH0gPSBzaW1wbGVDaGFuZ2VzLmxvYWRpbmc7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmxhenkgJiYgcHJldmlvdXNWYWx1ZSAhPT0gY3VycmVudFZhbHVlICYmIGN1cnJlbnRWYWx1ZSAhPT0gdGhpcy5kX2xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRfbG9hZGluZyA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICBpc0xvYWRpbmdDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaW1wbGVDaGFuZ2VzLm9yaWVudGF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RTY3JvbGxQb3MgPSB0aGlzLmJvdGggPyB7IHRvcDogMCwgbGVmdDogMCB9IDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaW1wbGVDaGFuZ2VzLm51bVRvbGVyYXRlZEl0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCB7IHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSB9ID0gc2ltcGxlQ2hhbmdlcy5udW1Ub2xlcmF0ZWRJdGVtcztcblxuICAgICAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUgIT09IGN1cnJlbnRWYWx1ZSAmJiBjdXJyZW50VmFsdWUgIT09IHRoaXMuZF9udW1Ub2xlcmF0ZWRJdGVtcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZF9udW1Ub2xlcmF0ZWRJdGVtcyA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaW1wbGVDaGFuZ2VzLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlIH0gPSBzaW1wbGVDaGFuZ2VzLm9wdGlvbnM7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmxhenkgJiYgcHJldmlvdXNWYWx1ZT8ubG9hZGluZyAhPT0gY3VycmVudFZhbHVlPy5sb2FkaW5nICYmIGN1cnJlbnRWYWx1ZT8ubG9hZGluZyAhPT0gdGhpcy5kX2xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRfbG9hZGluZyA9IGN1cnJlbnRWYWx1ZS5sb2FkaW5nO1xuICAgICAgICAgICAgICAgIGlzTG9hZGluZ0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJldmlvdXNWYWx1ZT8ubnVtVG9sZXJhdGVkSXRlbXMgIT09IGN1cnJlbnRWYWx1ZT8ubnVtVG9sZXJhdGVkSXRlbXMgJiYgY3VycmVudFZhbHVlPy5udW1Ub2xlcmF0ZWRJdGVtcyAhPT0gdGhpcy5kX251bVRvbGVyYXRlZEl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kX251bVRvbGVyYXRlZEl0ZW1zID0gY3VycmVudFZhbHVlLm51bVRvbGVyYXRlZEl0ZW1zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ2hhbmdlZCA9ICFpc0xvYWRpbmdDaGFuZ2VkICYmIChzaW1wbGVDaGFuZ2VzLml0ZW1zPy5wcmV2aW91c1ZhbHVlPy5sZW5ndGggIT09IHNpbXBsZUNoYW5nZXMuaXRlbXM/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoIHx8IHNpbXBsZUNoYW5nZXMuaXRlbVNpemUgfHwgc2ltcGxlQ2hhbmdlcy5zY3JvbGxIZWlnaHQgfHwgc2ltcGxlQ2hhbmdlcy5zY3JvbGxXaWR0aCk7XG5cbiAgICAgICAgICAgIGlmIChpc0NoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUF1dG9TaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgICh0aGlzLnRlbXBsYXRlcyBhcyBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4pLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoaXRlbS5nZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjb250ZW50JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnaXRlbSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdsb2FkZXInOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlclRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdsb2FkZXJpY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZXJpY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy52aWV3SW5pdCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy52aWV3SW5pdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudW5iaW5kUmVzaXplTGlzdGVuZXIoKTtcblxuICAgICAgICB0aGlzLmNvbnRlbnRFbCA9IG51bGw7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB2aWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgJiYgIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGlmIChpc1Zpc2libGUodGhpcy5lbGVtZW50Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDb250ZW50RWwodGhpcy5jb250ZW50RWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0V2lkdGggPSBnZXRXaWR0aCh0aGlzLmVsZW1lbnRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEhlaWdodCA9IGdldEhlaWdodCh0aGlzLmVsZW1lbnRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbnRlbnRXaWR0aCA9IGdldFdpZHRoKHRoaXMuY29udGVudEVsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDb250ZW50SGVpZ2h0ID0gZ2V0SGVpZ2h0KHRoaXMuY29udGVudEVsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2l6ZSgpO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVPcHRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLnNldFNwYWNlclNpemUoKTtcbiAgICAgICAgICAgIHRoaXMuYmluZFJlc2l6ZUxpc3RlbmVyKCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q29udGVudEVsKGVsPzogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5jb250ZW50RWwgPSBlbCB8fCB0aGlzLmNvbnRlbnRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQgfHwgZmluZFNpbmdsZSh0aGlzLmVsZW1lbnRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQsICcucC12aXJ0dWFsc2Nyb2xsZXItY29udGVudCcpO1xuICAgIH1cblxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5maXJzdCA9IHRoaXMuYm90aCA/IHsgcm93czogMCwgY29sczogMCB9IDogMDtcbiAgICAgICAgdGhpcy5sYXN0ID0gdGhpcy5ib3RoID8geyByb3dzOiAwLCBjb2xzOiAwIH0gOiAwO1xuICAgICAgICB0aGlzLm51bUl0ZW1zSW5WaWV3cG9ydCA9IHRoaXMuYm90aCA/IHsgcm93czogMCwgY29sczogMCB9IDogMDtcbiAgICAgICAgdGhpcy5sYXN0U2Nyb2xsUG9zID0gdGhpcy5ib3RoID8geyB0b3A6IDAsIGxlZnQ6IDAgfSA6IDA7XG4gICAgICAgIHRoaXMuZF9sb2FkaW5nID0gdGhpcy5fbG9hZGluZyB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5kX251bVRvbGVyYXRlZEl0ZW1zID0gdGhpcy5fbnVtVG9sZXJhdGVkSXRlbXM7XG4gICAgICAgIHRoaXMubG9hZGVyQXJyID0gW107XG4gICAgICAgIHRoaXMuc3BhY2VyU3R5bGUgPSB7fTtcbiAgICAgICAgdGhpcy5jb250ZW50U3R5bGUgPSB7fTtcbiAgICB9XG5cbiAgICBnZXRFbGVtZW50UmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Vmlld0NoaWxkO1xuICAgIH1cblxuICAgIGdldFBhZ2VCeUZpcnN0KGZpcnN0PzogYW55KSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKCgoZmlyc3QgPz8gdGhpcy5maXJzdCkgKyB0aGlzLmRfbnVtVG9sZXJhdGVkSXRlbXMgKiA0KSAvICh0aGlzLl9zdGVwIHx8IDEpKTtcbiAgICB9XG5cbiAgICBpc1BhZ2VDaGFuZ2VkKGZpcnN0PzogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwID8gdGhpcy5wYWdlICE9PSB0aGlzLmdldFBhZ2VCeUZpcnN0KGZpcnN0ID8/IHRoaXMuZmlyc3QpIDogdHJ1ZTtcbiAgICB9XG5cbiAgICBzY3JvbGxUbyhvcHRpb25zOiBTY3JvbGxUb09wdGlvbnMpIHtcbiAgICAgICAgLy8gdGhpcy5sYXN0U2Nyb2xsUG9zID0gdGhpcy5ib3RoID8geyB0b3A6IDAsIGxlZnQ6IDAgfSA6IDA7XG4gICAgICAgIHRoaXMuZWxlbWVudFZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudD8uc2Nyb2xsVG8ob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9JbmRleChpbmRleDogbnVtYmVyIHwgbnVtYmVyW10sIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9ICdhdXRvJykge1xuICAgICAgICBjb25zdCB2YWxpZCA9IHRoaXMuYm90aCA/IChpbmRleCBhcyBudW1iZXJbXSkuZXZlcnkoKGkpID0+IGkgPiAtMSkgOiAoaW5kZXggYXMgbnVtYmVyKSA+IC0xO1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLmZpcnN0O1xuICAgICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AgPSAwLCBzY3JvbGxMZWZ0ID0gMCB9ID0gdGhpcy5lbGVtZW50Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgeyBudW1Ub2xlcmF0ZWRJdGVtcyB9ID0gdGhpcy5jYWxjdWxhdGVOdW1JdGVtcygpO1xuICAgICAgICAgICAgY29uc3QgY29udGVudFBvcyA9IHRoaXMuZ2V0Q29udGVudFBvc2l0aW9uKCk7XG4gICAgICAgICAgICBjb25zdCBpdGVtU2l6ZSA9IHRoaXMuaXRlbVNpemU7XG4gICAgICAgICAgICBjb25zdCBjYWxjdWxhdGVGaXJzdCA9IChfaW5kZXggPSAwLCBfbnVtVCkgPT4gKF9pbmRleCA8PSBfbnVtVCA/IDAgOiBfaW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlQ29vcmQgPSAoX2ZpcnN0LCBfc2l6ZSwgX2Nwb3MpID0+IF9maXJzdCAqIF9zaXplICsgX2Nwb3M7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUbyA9IChsZWZ0ID0gMCwgdG9wID0gMCkgPT4gdGhpcy5zY3JvbGxUbyh7IGxlZnQsIHRvcCwgYmVoYXZpb3IgfSk7XG4gICAgICAgICAgICBsZXQgbmV3Rmlyc3QgPSB0aGlzLmJvdGggPyB7IHJvd3M6IDAsIGNvbHM6IDAgfSA6IDA7XG4gICAgICAgICAgICBsZXQgaXNSYW5nZUNoYW5nZWQgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc1Njcm9sbENoYW5nZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYm90aCkge1xuICAgICAgICAgICAgICAgIG5ld0ZpcnN0ID0ge1xuICAgICAgICAgICAgICAgICAgICByb3dzOiBjYWxjdWxhdGVGaXJzdChpbmRleFswXSwgbnVtVG9sZXJhdGVkSXRlbXNbMF0pLFxuICAgICAgICAgICAgICAgICAgICBjb2xzOiBjYWxjdWxhdGVGaXJzdChpbmRleFsxXSwgbnVtVG9sZXJhdGVkSXRlbXNbMV0pXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBzY3JvbGxUbyhjYWxjdWxhdGVDb29yZChuZXdGaXJzdC5jb2xzLCBpdGVtU2l6ZVsxXSwgY29udGVudFBvcy5sZWZ0KSwgY2FsY3VsYXRlQ29vcmQobmV3Rmlyc3Qucm93cywgaXRlbVNpemVbMF0sIGNvbnRlbnRQb3MudG9wKSk7XG4gICAgICAgICAgICAgICAgaXNTY3JvbGxDaGFuZ2VkID0gdGhpcy5sYXN0U2Nyb2xsUG9zLnRvcCAhPT0gc2Nyb2xsVG9wIHx8IHRoaXMubGFzdFNjcm9sbFBvcy5sZWZ0ICE9PSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGlzUmFuZ2VDaGFuZ2VkID0gbmV3Rmlyc3Qucm93cyAhPT0gZmlyc3Qucm93cyB8fCBuZXdGaXJzdC5jb2xzICE9PSBmaXJzdC5jb2xzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdGaXJzdCA9IGNhbGN1bGF0ZUZpcnN0KGluZGV4IGFzIG51bWJlciwgbnVtVG9sZXJhdGVkSXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbCA/IHNjcm9sbFRvKGNhbGN1bGF0ZUNvb3JkKG5ld0ZpcnN0LCBpdGVtU2l6ZSwgY29udGVudFBvcy5sZWZ0KSwgc2Nyb2xsVG9wKSA6IHNjcm9sbFRvKHNjcm9sbExlZnQsIGNhbGN1bGF0ZUNvb3JkKG5ld0ZpcnN0LCBpdGVtU2l6ZSwgY29udGVudFBvcy50b3ApKTtcbiAgICAgICAgICAgICAgICBpc1Njcm9sbENoYW5nZWQgPSB0aGlzLmxhc3RTY3JvbGxQb3MgIT09ICh0aGlzLmhvcml6b250YWwgPyBzY3JvbGxMZWZ0IDogc2Nyb2xsVG9wKTtcbiAgICAgICAgICAgICAgICBpc1JhbmdlQ2hhbmdlZCA9IG5ld0ZpcnN0ICE9PSBmaXJzdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pc1JhbmdlQ2hhbmdlZCA9IGlzUmFuZ2VDaGFuZ2VkO1xuICAgICAgICAgICAgaXNTY3JvbGxDaGFuZ2VkICYmICh0aGlzLmZpcnN0ID0gbmV3Rmlyc3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2Nyb2xsSW5WaWV3KGluZGV4OiBudW1iZXIsIHRvOiBTY3JvbGxlclRvVHlwZSwgYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gJ2F1dG8nKSB7XG4gICAgICAgIGlmICh0bykge1xuICAgICAgICAgICAgY29uc3QgeyBmaXJzdCwgdmlld3BvcnQgfSA9IHRoaXMuZ2V0UmVuZGVyZWRSYW5nZSgpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG8gPSAobGVmdCA9IDAsIHRvcCA9IDApID0+IHRoaXMuc2Nyb2xsVG8oeyBsZWZ0LCB0b3AsIGJlaGF2aW9yIH0pO1xuICAgICAgICAgICAgY29uc3QgaXNUb1N0YXJ0ID0gdG8gPT09ICd0by1zdGFydCc7XG4gICAgICAgICAgICBjb25zdCBpc1RvRW5kID0gdG8gPT09ICd0by1lbmQnO1xuXG4gICAgICAgICAgICBpZiAoaXNUb1N0YXJ0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYm90aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmlld3BvcnQuZmlyc3Qucm93cyAtIGZpcnN0LnJvd3MgPiAoPGFueT5pbmRleClbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvKHZpZXdwb3J0LmZpcnN0LmNvbHMgKiAoPG51bWJlcltdPnRoaXMuX2l0ZW1TaXplKVsxXSwgKHZpZXdwb3J0LmZpcnN0LnJvd3MgLSAxKSAqICg8bnVtYmVyW10+dGhpcy5faXRlbVNpemUpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2aWV3cG9ydC5maXJzdC5jb2xzIC0gZmlyc3QuY29scyA+ICg8YW55PmluZGV4KVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG8oKHZpZXdwb3J0LmZpcnN0LmNvbHMgLSAxKSAqICg8bnVtYmVyW10+dGhpcy5faXRlbVNpemUpWzFdLCB2aWV3cG9ydC5maXJzdC5yb3dzICogKDxudW1iZXJbXT50aGlzLl9pdGVtU2l6ZSlbMF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXdwb3J0LmZpcnN0IC0gZmlyc3QgPiBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zID0gKHZpZXdwb3J0LmZpcnN0IC0gMSkgKiA8bnVtYmVyPnRoaXMuX2l0ZW1TaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsID8gc2Nyb2xsVG8ocG9zLCAwKSA6IHNjcm9sbFRvKDAsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzVG9FbmQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ib3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWV3cG9ydC5sYXN0LnJvd3MgLSBmaXJzdC5yb3dzIDw9ICg8YW55PmluZGV4KVswXSArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvKHZpZXdwb3J0LmZpcnN0LmNvbHMgKiAoPG51bWJlcltdPnRoaXMuX2l0ZW1TaXplKVsxXSwgKHZpZXdwb3J0LmZpcnN0LnJvd3MgKyAxKSAqICg8bnVtYmVyW10+dGhpcy5faXRlbVNpemUpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2aWV3cG9ydC5sYXN0LmNvbHMgLSBmaXJzdC5jb2xzIDw9ICg8YW55PmluZGV4KVsxXSArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvKCh2aWV3cG9ydC5maXJzdC5jb2xzICsgMSkgKiAoPG51bWJlcltdPnRoaXMuX2l0ZW1TaXplKVsxXSwgdmlld3BvcnQuZmlyc3Qucm93cyAqICg8bnVtYmVyW10+dGhpcy5faXRlbVNpemUpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWV3cG9ydC5sYXN0IC0gZmlyc3QgPD0gaW5kZXggKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSAodmlld3BvcnQuZmlyc3QgKyAxKSAqIDxudW1iZXI+dGhpcy5faXRlbVNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvcml6b250YWwgPyBzY3JvbGxUbyhwb3MsIDApIDogc2Nyb2xsVG8oMCwgcG9zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9JbmRleChpbmRleCwgYmVoYXZpb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UmVuZGVyZWRSYW5nZSgpIHtcbiAgICAgICAgY29uc3QgY2FsY3VsYXRlRmlyc3RJblZpZXdwb3J0ID0gKF9wb3M6IG51bWJlciwgX3NpemU6IG51bWJlcikgPT4gKF9zaXplIHx8IF9wb3MgPyBNYXRoLmZsb29yKF9wb3MgLyAoX3NpemUgfHwgX3BvcykpIDogMCk7XG5cbiAgICAgICAgbGV0IGZpcnN0SW5WaWV3cG9ydCA9IHRoaXMuZmlyc3Q7XG4gICAgICAgIGxldCBsYXN0SW5WaWV3cG9ydDogYW55ID0gMDtcblxuICAgICAgICBpZiAodGhpcy5lbGVtZW50Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCB9ID0gdGhpcy5lbGVtZW50Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmJvdGgpIHtcbiAgICAgICAgICAgICAgICBmaXJzdEluVmlld3BvcnQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3M6IGNhbGN1bGF0ZUZpcnN0SW5WaWV3cG9ydChzY3JvbGxUb3AsICg8bnVtYmVyW10+dGhpcy5faXRlbVNpemUpWzBdKSxcbiAgICAgICAgICAgICAgICAgICAgY29sczogY2FsY3VsYXRlRmlyc3RJblZpZXdwb3J0KHNjcm9sbExlZnQsICg8bnVtYmVyW10+dGhpcy5faXRlbVNpemUpWzFdKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbGFzdEluVmlld3BvcnQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd3M6IGZpcnN0SW5WaWV3cG9ydC5yb3dzICsgdGhpcy5udW1JdGVtc0luVmlld3BvcnQucm93cyxcbiAgICAgICAgICAgICAgICAgICAgY29sczogZmlyc3RJblZpZXdwb3J0LmNvbHMgKyB0aGlzLm51bUl0ZW1zSW5WaWV3cG9ydC5jb2xzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsUG9zID0gdGhpcy5ob3Jpem9udGFsID8gc2Nyb2xsTGVmdCA6IHNjcm9sbFRvcDtcbiAgICAgICAgICAgICAgICBmaXJzdEluVmlld3BvcnQgPSBjYWxjdWxhdGVGaXJzdEluVmlld3BvcnQoc2Nyb2xsUG9zLCA8bnVtYmVyPnRoaXMuX2l0ZW1TaXplKTtcbiAgICAgICAgICAgICAgICBsYXN0SW5WaWV3cG9ydCA9IGZpcnN0SW5WaWV3cG9ydCArIHRoaXMubnVtSXRlbXNJblZpZXdwb3J0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpcnN0OiB0aGlzLmZpcnN0LFxuICAgICAgICAgICAgbGFzdDogdGhpcy5sYXN0LFxuICAgICAgICAgICAgdmlld3BvcnQ6IHtcbiAgICAgICAgICAgICAgICBmaXJzdDogZmlyc3RJblZpZXdwb3J0LFxuICAgICAgICAgICAgICAgIGxhc3Q6IGxhc3RJblZpZXdwb3J0XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlTnVtSXRlbXMoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRQb3MgPSB0aGlzLmdldENvbnRlbnRQb3NpdGlvbigpO1xuICAgICAgICBjb25zdCBjb250ZW50V2lkdGggPSAodGhpcy5lbGVtZW50Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50ID8gdGhpcy5lbGVtZW50Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLSBjb250ZW50UG9zLmxlZnQgOiAwKSB8fCAwO1xuICAgICAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gKHRoaXMuZWxlbWVudFZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudCA/IHRoaXMuZWxlbWVudFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCAtIGNvbnRlbnRQb3MudG9wIDogMCkgfHwgMDtcbiAgICAgICAgY29uc3QgY2FsY3VsYXRlTnVtSXRlbXNJblZpZXdwb3J0ID0gKF9jb250ZW50U2l6ZTogbnVtYmVyLCBfaXRlbVNpemU6IG51bWJlcikgPT4gKF9pdGVtU2l6ZSB8fCBfY29udGVudFNpemUgPyBNYXRoLmNlaWwoX2NvbnRlbnRTaXplIC8gKF9pdGVtU2l6ZSB8fCBfY29udGVudFNpemUpKSA6IDApO1xuICAgICAgICBjb25zdCBjYWxjdWxhdGVOdW1Ub2xlcmF0ZWRJdGVtcyA9IChfbnVtSXRlbXM6IG51bWJlcikgPT4gTWF0aC5jZWlsKF9udW1JdGVtcyAvIDIpO1xuICAgICAgICBjb25zdCBudW1JdGVtc0luVmlld3BvcnQ6IGFueSA9IHRoaXMuYm90aFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICByb3dzOiBjYWxjdWxhdGVOdW1JdGVtc0luVmlld3BvcnQoY29udGVudEhlaWdodCwgKDxudW1iZXJbXT50aGlzLl9pdGVtU2l6ZSlbMF0pLFxuICAgICAgICAgICAgICAgICAgY29sczogY2FsY3VsYXRlTnVtSXRlbXNJblZpZXdwb3J0KGNvbnRlbnRXaWR0aCwgKDxudW1iZXJbXT50aGlzLl9pdGVtU2l6ZSlbMV0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogY2FsY3VsYXRlTnVtSXRlbXNJblZpZXdwb3J0KHRoaXMuaG9yaXpvbnRhbCA/IGNvbnRlbnRXaWR0aCA6IGNvbnRlbnRIZWlnaHQsIDxudW1iZXI+dGhpcy5faXRlbVNpemUpO1xuXG4gICAgICAgIGNvbnN0IG51bVRvbGVyYXRlZEl0ZW1zID0gdGhpcy5kX251bVRvbGVyYXRlZEl0ZW1zIHx8ICh0aGlzLmJvdGggPyBbY2FsY3VsYXRlTnVtVG9sZXJhdGVkSXRlbXMobnVtSXRlbXNJblZpZXdwb3J0LnJvd3MpLCBjYWxjdWxhdGVOdW1Ub2xlcmF0ZWRJdGVtcyhudW1JdGVtc0luVmlld3BvcnQuY29scyldIDogY2FsY3VsYXRlTnVtVG9sZXJhdGVkSXRlbXMobnVtSXRlbXNJblZpZXdwb3J0KSk7XG5cbiAgICAgICAgcmV0dXJuIHsgbnVtSXRlbXNJblZpZXdwb3J0LCBudW1Ub2xlcmF0ZWRJdGVtcyB9O1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZU9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHsgbnVtSXRlbXNJblZpZXdwb3J0LCBudW1Ub2xlcmF0ZWRJdGVtcyB9ID0gdGhpcy5jYWxjdWxhdGVOdW1JdGVtcygpO1xuICAgICAgICBjb25zdCBjYWxjdWxhdGVMYXN0ID0gKF9maXJzdDogbnVtYmVyLCBfbnVtOiBudW1iZXIsIF9udW1UOiBudW1iZXIsIF9pc0NvbHM6IGJvb2xlYW4gPSBmYWxzZSkgPT4gdGhpcy5nZXRMYXN0KF9maXJzdCArIF9udW0gKyAoX2ZpcnN0IDwgX251bVQgPyAyIDogMykgKiBfbnVtVCwgX2lzQ29scyk7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5maXJzdDtcbiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXMuYm90aFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICByb3dzOiBjYWxjdWxhdGVMYXN0KHRoaXMuZmlyc3Qucm93cywgbnVtSXRlbXNJblZpZXdwb3J0LnJvd3MsIG51bVRvbGVyYXRlZEl0ZW1zWzBdKSxcbiAgICAgICAgICAgICAgICAgIGNvbHM6IGNhbGN1bGF0ZUxhc3QodGhpcy5maXJzdC5jb2xzLCBudW1JdGVtc0luVmlld3BvcnQuY29scywgbnVtVG9sZXJhdGVkSXRlbXNbMV0sIHRydWUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogY2FsY3VsYXRlTGFzdCh0aGlzLmZpcnN0LCBudW1JdGVtc0luVmlld3BvcnQsIG51bVRvbGVyYXRlZEl0ZW1zKTtcblxuICAgICAgICB0aGlzLmxhc3QgPSBsYXN0O1xuICAgICAgICB0aGlzLm51bUl0ZW1zSW5WaWV3cG9ydCA9IG51bUl0ZW1zSW5WaWV3cG9ydDtcbiAgICAgICAgdGhpcy5kX251bVRvbGVyYXRlZEl0ZW1zID0gbnVtVG9sZXJhdGVkSXRlbXM7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0xvYWRlcikge1xuICAgICAgICAgICAgdGhpcy5sb2FkZXJBcnIgPSB0aGlzLmJvdGggPyBBcnJheS5mcm9tKHsgbGVuZ3RoOiBudW1JdGVtc0luVmlld3BvcnQucm93cyB9KS5tYXAoKCkgPT4gQXJyYXkuZnJvbSh7IGxlbmd0aDogbnVtSXRlbXNJblZpZXdwb3J0LmNvbHMgfSkpIDogQXJyYXkuZnJvbSh7IGxlbmd0aDogbnVtSXRlbXNJblZpZXdwb3J0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2xhenkpIHtcbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGF6eUxvYWRTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3Q6IHRoaXMuX3N0ZXAgPyAodGhpcy5ib3RoID8geyByb3dzOiAwLCBjb2xzOiBmaXJzdC5jb2xzIH0gOiAwKSA6IGZpcnN0LFxuICAgICAgICAgICAgICAgICAgICBsYXN0OiBNYXRoLm1pbih0aGlzLl9zdGVwID8gdGhpcy5fc3RlcCA6IHRoaXMubGFzdCwgKDxhbnlbXT50aGlzLml0ZW1zKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXZlbnRzKCdvbkxhenlMb2FkJywgdGhpcy5sYXp5TG9hZFN0YXRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQXV0b1NpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9hdXRvU2l6ZSAmJiAhdGhpcy5kX2xvYWRpbmcpIHtcbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRFbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRFbC5zdHlsZS5taW5IZWlnaHQgPSB0aGlzLmNvbnRlbnRFbC5zdHlsZS5taW5XaWR0aCA9ICdhdXRvJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50RWwuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuICAgICAgICAgICAgICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy5lbGVtZW50Vmlld0NoaWxkKS5uYXRpdmVFbGVtZW50LnN0eWxlLmNvbnRhaW4gPSAnbm9uZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW2NvbnRlbnRXaWR0aCwgY29udGVudEhlaWdodF0gPSBbZ2V0V2lkdGgodGhpcy5jb250ZW50RWwpLCBnZXRIZWlnaHQodGhpcy5jb250ZW50RWwpXTtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudFdpZHRoICE9PSB0aGlzLmRlZmF1bHRDb250ZW50V2lkdGggJiYgKCg8RWxlbWVudFJlZj50aGlzLmVsZW1lbnRWaWV3Q2hpbGQpLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRIZWlnaHQgIT09IHRoaXMuZGVmYXVsdENvbnRlbnRIZWlnaHQgJiYgKCg8RWxlbWVudFJlZj50aGlzLmVsZW1lbnRWaWV3Q2hpbGQpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJycpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFt3aWR0aCwgaGVpZ2h0XSA9IFtnZXRXaWR0aCgoPEVsZW1lbnRSZWY+dGhpcy5lbGVtZW50Vmlld0NoaWxkKS5uYXRpdmVFbGVtZW50KSwgZ2V0SGVpZ2h0KCg8RWxlbWVudFJlZj50aGlzLmVsZW1lbnRWaWV3Q2hpbGQpLm5hdGl2ZUVsZW1lbnQpXTtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYm90aCB8fCB0aGlzLmhvcml6b250YWwpICYmICgoPEVsZW1lbnRSZWY+dGhpcy5lbGVtZW50Vmlld0NoaWxkKS5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggPCA8bnVtYmVyPnRoaXMuZGVmYXVsdFdpZHRoID8gd2lkdGggKyAncHgnIDogdGhpcy5fc2Nyb2xsV2lkdGggfHwgdGhpcy5kZWZhdWx0V2lkdGggKyAncHgnKTtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYm90aCB8fCB0aGlzLnZlcnRpY2FsKSAmJiAoKDxFbGVtZW50UmVmPnRoaXMuZWxlbWVudFZpZXdDaGlsZCkubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgPCA8bnVtYmVyPnRoaXMuZGVmYXVsdEhlaWdodCA/IGhlaWdodCArICdweCcgOiB0aGlzLl9zY3JvbGxIZWlnaHQgfHwgdGhpcy5kZWZhdWx0SGVpZ2h0ICsgJ3B4Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50RWwuc3R5bGUubWluSGVpZ2h0ID0gdGhpcy5jb250ZW50RWwuc3R5bGUubWluV2lkdGggPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50RWwuc3R5bGUucG9zaXRpb24gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgKDxFbGVtZW50UmVmPnRoaXMuZWxlbWVudFZpZXdDaGlsZCkubmF0aXZlRWxlbWVudC5zdHlsZS5jb250YWluID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRMYXN0KGxhc3QgPSAwLCBpc0NvbHMgPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXMgPyBNYXRoLm1pbihpc0NvbHMgPyAodGhpcy5fY29sdW1ucyB8fCB0aGlzLl9pdGVtc1swXSkubGVuZ3RoIDogdGhpcy5faXRlbXMubGVuZ3RoLCBsYXN0KSA6IDA7XG4gICAgfVxuXG4gICAgZ2V0Q29udGVudFBvc2l0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50RWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRlbnRFbCk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nTGVmdCkgKyBNYXRoLm1heChwYXJzZUZsb2F0KHN0eWxlLmxlZnQpIHx8IDAsIDApO1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdSaWdodCkgKyBNYXRoLm1heChwYXJzZUZsb2F0KHN0eWxlLnJpZ2h0KSB8fCAwLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1RvcCkgKyBNYXRoLm1heChwYXJzZUZsb2F0KHN0eWxlLnRvcCkgfHwgMCwgMCk7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdCb3R0b20pICsgTWF0aC5tYXgocGFyc2VGbG9hdChzdHlsZS5ib3R0b20pIHx8IDAsIDApO1xuXG4gICAgICAgICAgICByZXR1cm4geyBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIHg6IGxlZnQgKyByaWdodCwgeTogdG9wICsgYm90dG9tIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBsZWZ0OiAwLCByaWdodDogMCwgdG9wOiAwLCBib3R0b206IDAsIHg6IDAsIHk6IDAgfTtcbiAgICB9XG5cbiAgICBzZXRTaXplKCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLl9zY3JvbGxXaWR0aCB8fCBgJHt0aGlzLmVsZW1lbnRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCB8fCBwYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRofXB4YDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuX3Njcm9sbEhlaWdodCB8fCBgJHt0aGlzLmVsZW1lbnRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgcGFyZW50RWxlbWVudC5vZmZzZXRIZWlnaHR9cHhgO1xuICAgICAgICAgICAgY29uc3Qgc2V0UHJvcCA9IChfbmFtZTogc3RyaW5nLCBfdmFsdWU6IGFueSkgPT4gKCg8RWxlbWVudFJlZj50aGlzLmVsZW1lbnRWaWV3Q2hpbGQpLm5hdGl2ZUVsZW1lbnQuc3R5bGVbX25hbWVdID0gX3ZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYm90aCB8fCB0aGlzLmhvcml6b250YWwpIHtcbiAgICAgICAgICAgICAgICBzZXRQcm9wKCdoZWlnaHQnLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgIHNldFByb3AoJ3dpZHRoJywgd2lkdGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRQcm9wKCdoZWlnaHQnLCBoZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0U3BhY2VyU2l6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50UG9zID0gdGhpcy5nZXRDb250ZW50UG9zaXRpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IHNldFByb3AgPSAoX25hbWU6IHN0cmluZywgX3ZhbHVlOiBhbnksIF9zaXplOiBudW1iZXIsIF9jcG9zOiBudW1iZXIgPSAwKSA9PlxuICAgICAgICAgICAgICAgICh0aGlzLnNwYWNlclN0eWxlID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnNwYWNlclN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAuLi57IFtgJHtfbmFtZX1gXTogKF92YWx1ZSB8fCBbXSkubGVuZ3RoICogX3NpemUgKyBfY3BvcyArICdweCcgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5ib3RoKSB7XG4gICAgICAgICAgICAgICAgc2V0UHJvcCgnaGVpZ2h0JywgdGhpcy5faXRlbXMsICg8bnVtYmVyW10+dGhpcy5faXRlbVNpemUpWzBdLCBjb250ZW50UG9zLnkpO1xuICAgICAgICAgICAgICAgIHNldFByb3AoJ3dpZHRoJywgdGhpcy5fY29sdW1ucyB8fCB0aGlzLl9pdGVtc1sxXSwgKDxudW1iZXJbXT50aGlzLl9pdGVtU2l6ZSlbMV0sIGNvbnRlbnRQb3MueCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbCA/IHNldFByb3AoJ3dpZHRoJywgdGhpcy5fY29sdW1ucyB8fCB0aGlzLl9pdGVtcywgPG51bWJlcj50aGlzLl9pdGVtU2l6ZSwgY29udGVudFBvcy54KSA6IHNldFByb3AoJ2hlaWdodCcsIHRoaXMuX2l0ZW1zLCA8bnVtYmVyPnRoaXMuX2l0ZW1TaXplLCBjb250ZW50UG9zLnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0Q29udGVudFBvc2l0aW9uKHBvczogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRFbCAmJiAhdGhpcy5fYXBwZW5kT25seSkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBwb3MgPyBwb3MuZmlyc3QgOiB0aGlzLmZpcnN0O1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlVHJhbnNsYXRlVmFsID0gKF9maXJzdDogbnVtYmVyLCBfc2l6ZTogbnVtYmVyKSA9PiBfZmlyc3QgKiBfc2l6ZTtcbiAgICAgICAgICAgIGNvbnN0IHNldFRyYW5zZm9ybSA9IChfeCA9IDAsIF95ID0gMCkgPT4gKHRoaXMuY29udGVudFN0eWxlID0geyAuLi50aGlzLmNvbnRlbnRTdHlsZSwgLi4ueyB0cmFuc2Zvcm06IGB0cmFuc2xhdGUzZCgke194fXB4LCAke195fXB4LCAwKWAgfSB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYm90aCkge1xuICAgICAgICAgICAgICAgIHNldFRyYW5zZm9ybShjYWxjdWxhdGVUcmFuc2xhdGVWYWwoZmlyc3QuY29scywgKDxudW1iZXJbXT50aGlzLl9pdGVtU2l6ZSlbMV0pLCBjYWxjdWxhdGVUcmFuc2xhdGVWYWwoZmlyc3Qucm93cywgKDxudW1iZXJbXT50aGlzLl9pdGVtU2l6ZSlbMF0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlVmFsID0gY2FsY3VsYXRlVHJhbnNsYXRlVmFsKGZpcnN0LCA8bnVtYmVyPnRoaXMuX2l0ZW1TaXplKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhvcml6b250YWwgPyBzZXRUcmFuc2Zvcm0odHJhbnNsYXRlVmFsLCAwKSA6IHNldFRyYW5zZm9ybSgwLCB0cmFuc2xhdGVWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TY3JvbGxQb3NpdGlvbkNoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBjb25zdCBjb250ZW50UG9zID0gdGhpcy5nZXRDb250ZW50UG9zaXRpb24oKTtcbiAgICAgICAgY29uc3QgY2FsY3VsYXRlU2Nyb2xsUG9zID0gKF9wb3M6IG51bWJlciwgX2Nwb3M6IG51bWJlcikgPT4gKF9wb3MgPyAoX3BvcyA+IF9jcG9zID8gX3BvcyAtIF9jcG9zIDogX3BvcykgOiAwKTtcbiAgICAgICAgY29uc3QgY2FsY3VsYXRlQ3VycmVudEluZGV4ID0gKF9wb3M6IG51bWJlciwgX3NpemU6IG51bWJlcikgPT4gKF9zaXplIHx8IF9wb3MgPyBNYXRoLmZsb29yKF9wb3MgLyAoX3NpemUgfHwgX3BvcykpIDogMCk7XG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZVRyaWdnZXJJbmRleCA9IChfY3VycmVudEluZGV4OiBudW1iZXIsIF9maXJzdDogbnVtYmVyLCBfbGFzdDogbnVtYmVyLCBfbnVtOiBudW1iZXIsIF9udW1UOiBudW1iZXIsIF9pc1Njcm9sbERvd25PclJpZ2h0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBfY3VycmVudEluZGV4IDw9IF9udW1UID8gX251bVQgOiBfaXNTY3JvbGxEb3duT3JSaWdodCA/IF9sYXN0IC0gX251bSAtIF9udW1UIDogX2ZpcnN0ICsgX251bVQgLSAxO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjYWxjdWxhdGVGaXJzdCA9IChfY3VycmVudEluZGV4OiBudW1iZXIsIF90cmlnZ2VySW5kZXg6IG51bWJlciwgX2ZpcnN0OiBudW1iZXIsIF9sYXN0OiBudW1iZXIsIF9udW06IG51bWJlciwgX251bVQ6IG51bWJlciwgX2lzU2Nyb2xsRG93bk9yUmlnaHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKF9jdXJyZW50SW5kZXggPD0gX251bVQpIHJldHVybiAwO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gTWF0aC5tYXgoMCwgX2lzU2Nyb2xsRG93bk9yUmlnaHQgPyAoX2N1cnJlbnRJbmRleCA8IF90cmlnZ2VySW5kZXggPyBfZmlyc3QgOiBfY3VycmVudEluZGV4IC0gX251bVQpIDogX2N1cnJlbnRJbmRleCA+IF90cmlnZ2VySW5kZXggPyBfZmlyc3QgOiBfY3VycmVudEluZGV4IC0gMiAqIF9udW1UKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FsY3VsYXRlTGFzdCA9IChfY3VycmVudEluZGV4OiBudW1iZXIsIF9maXJzdDogbnVtYmVyLCBfbGFzdDogbnVtYmVyLCBfbnVtOiBudW1iZXIsIF9udW1UOiBudW1iZXIsIF9pc0NvbHMgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgbGV0IGxhc3RWYWx1ZSA9IF9maXJzdCArIF9udW0gKyAyICogX251bVQ7XG5cbiAgICAgICAgICAgIGlmIChfY3VycmVudEluZGV4ID49IF9udW1UKSB7XG4gICAgICAgICAgICAgICAgbGFzdFZhbHVlICs9IF9udW1UICsgMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFzdChsYXN0VmFsdWUsIF9pc0NvbHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IGNhbGN1bGF0ZVNjcm9sbFBvcygoPEhUTUxFbGVtZW50PnRhcmdldCkuc2Nyb2xsVG9wLCBjb250ZW50UG9zLnRvcCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSBjYWxjdWxhdGVTY3JvbGxQb3MoKDxIVE1MRWxlbWVudD50YXJnZXQpLnNjcm9sbExlZnQsIGNvbnRlbnRQb3MubGVmdCk7XG5cbiAgICAgICAgbGV0IG5ld0ZpcnN0ID0gdGhpcy5ib3RoID8geyByb3dzOiAwLCBjb2xzOiAwIH0gOiAwO1xuICAgICAgICBsZXQgbmV3TGFzdCA9IHRoaXMubGFzdDtcbiAgICAgICAgbGV0IGlzUmFuZ2VDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGxldCBuZXdTY3JvbGxQb3MgPSB0aGlzLmxhc3RTY3JvbGxQb3M7XG5cbiAgICAgICAgaWYgKHRoaXMuYm90aCkge1xuICAgICAgICAgICAgY29uc3QgaXNTY3JvbGxEb3duID0gdGhpcy5sYXN0U2Nyb2xsUG9zLnRvcCA8PSBzY3JvbGxUb3A7XG4gICAgICAgICAgICBjb25zdCBpc1Njcm9sbFJpZ2h0ID0gdGhpcy5sYXN0U2Nyb2xsUG9zLmxlZnQgPD0gc2Nyb2xsTGVmdDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9hcHBlbmRPbmx5IHx8ICh0aGlzLl9hcHBlbmRPbmx5ICYmIChpc1Njcm9sbERvd24gfHwgaXNTY3JvbGxSaWdodCkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0ge1xuICAgICAgICAgICAgICAgICAgICByb3dzOiBjYWxjdWxhdGVDdXJyZW50SW5kZXgoc2Nyb2xsVG9wLCAoPG51bWJlcltdPnRoaXMuX2l0ZW1TaXplKVswXSksXG4gICAgICAgICAgICAgICAgICAgIGNvbHM6IGNhbGN1bGF0ZUN1cnJlbnRJbmRleChzY3JvbGxMZWZ0LCAoPG51bWJlcltdPnRoaXMuX2l0ZW1TaXplKVsxXSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyaWdnZXJJbmRleCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93czogY2FsY3VsYXRlVHJpZ2dlckluZGV4KGN1cnJlbnRJbmRleC5yb3dzLCB0aGlzLmZpcnN0LnJvd3MsIHRoaXMubGFzdC5yb3dzLCB0aGlzLm51bUl0ZW1zSW5WaWV3cG9ydC5yb3dzLCB0aGlzLmRfbnVtVG9sZXJhdGVkSXRlbXNbMF0sIGlzU2Nyb2xsRG93biksXG4gICAgICAgICAgICAgICAgICAgIGNvbHM6IGNhbGN1bGF0ZVRyaWdnZXJJbmRleChjdXJyZW50SW5kZXguY29scywgdGhpcy5maXJzdC5jb2xzLCB0aGlzLmxhc3QuY29scywgdGhpcy5udW1JdGVtc0luVmlld3BvcnQuY29scywgdGhpcy5kX251bVRvbGVyYXRlZEl0ZW1zWzFdLCBpc1Njcm9sbFJpZ2h0KVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBuZXdGaXJzdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93czogY2FsY3VsYXRlRmlyc3QoY3VycmVudEluZGV4LnJvd3MsIHRyaWdnZXJJbmRleC5yb3dzLCB0aGlzLmZpcnN0LnJvd3MsIHRoaXMubGFzdC5yb3dzLCB0aGlzLm51bUl0ZW1zSW5WaWV3cG9ydC5yb3dzLCB0aGlzLmRfbnVtVG9sZXJhdGVkSXRlbXNbMF0sIGlzU2Nyb2xsRG93biksXG4gICAgICAgICAgICAgICAgICAgIGNvbHM6IGNhbGN1bGF0ZUZpcnN0KGN1cnJlbnRJbmRleC5jb2xzLCB0cmlnZ2VySW5kZXguY29scywgdGhpcy5maXJzdC5jb2xzLCB0aGlzLmxhc3QuY29scywgdGhpcy5udW1JdGVtc0luVmlld3BvcnQuY29scywgdGhpcy5kX251bVRvbGVyYXRlZEl0ZW1zWzFdLCBpc1Njcm9sbFJpZ2h0KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbmV3TGFzdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93czogY2FsY3VsYXRlTGFzdChjdXJyZW50SW5kZXgucm93cywgbmV3Rmlyc3Qucm93cywgdGhpcy5sYXN0LnJvd3MsIHRoaXMubnVtSXRlbXNJblZpZXdwb3J0LnJvd3MsIHRoaXMuZF9udW1Ub2xlcmF0ZWRJdGVtc1swXSksXG4gICAgICAgICAgICAgICAgICAgIGNvbHM6IGNhbGN1bGF0ZUxhc3QoY3VycmVudEluZGV4LmNvbHMsIG5ld0ZpcnN0LmNvbHMsIHRoaXMubGFzdC5jb2xzLCB0aGlzLm51bUl0ZW1zSW5WaWV3cG9ydC5jb2xzLCB0aGlzLmRfbnVtVG9sZXJhdGVkSXRlbXNbMV0sIHRydWUpXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlzUmFuZ2VDaGFuZ2VkID0gbmV3Rmlyc3Qucm93cyAhPT0gdGhpcy5maXJzdC5yb3dzIHx8IG5ld0xhc3Qucm93cyAhPT0gdGhpcy5sYXN0LnJvd3MgfHwgbmV3Rmlyc3QuY29scyAhPT0gdGhpcy5maXJzdC5jb2xzIHx8IG5ld0xhc3QuY29scyAhPT0gdGhpcy5sYXN0LmNvbHMgfHwgdGhpcy5pc1JhbmdlQ2hhbmdlZDtcbiAgICAgICAgICAgICAgICBuZXdTY3JvbGxQb3MgPSB7IHRvcDogc2Nyb2xsVG9wLCBsZWZ0OiBzY3JvbGxMZWZ0IH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxQb3MgPSB0aGlzLmhvcml6b250YWwgPyBzY3JvbGxMZWZ0IDogc2Nyb2xsVG9wO1xuICAgICAgICAgICAgY29uc3QgaXNTY3JvbGxEb3duT3JSaWdodCA9IHRoaXMubGFzdFNjcm9sbFBvcyA8PSBzY3JvbGxQb3M7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fYXBwZW5kT25seSB8fCAodGhpcy5fYXBwZW5kT25seSAmJiBpc1Njcm9sbERvd25PclJpZ2h0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGNhbGN1bGF0ZUN1cnJlbnRJbmRleChzY3JvbGxQb3MsIDxudW1iZXI+dGhpcy5faXRlbVNpemUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyaWdnZXJJbmRleCA9IGNhbGN1bGF0ZVRyaWdnZXJJbmRleChjdXJyZW50SW5kZXgsIHRoaXMuZmlyc3QsIHRoaXMubGFzdCwgdGhpcy5udW1JdGVtc0luVmlld3BvcnQsIHRoaXMuZF9udW1Ub2xlcmF0ZWRJdGVtcywgaXNTY3JvbGxEb3duT3JSaWdodCk7XG5cbiAgICAgICAgICAgICAgICBuZXdGaXJzdCA9IGNhbGN1bGF0ZUZpcnN0KGN1cnJlbnRJbmRleCwgdHJpZ2dlckluZGV4LCB0aGlzLmZpcnN0LCB0aGlzLmxhc3QsIHRoaXMubnVtSXRlbXNJblZpZXdwb3J0LCB0aGlzLmRfbnVtVG9sZXJhdGVkSXRlbXMsIGlzU2Nyb2xsRG93bk9yUmlnaHQpO1xuICAgICAgICAgICAgICAgIG5ld0xhc3QgPSBjYWxjdWxhdGVMYXN0KGN1cnJlbnRJbmRleCwgbmV3Rmlyc3QsIHRoaXMubGFzdCwgdGhpcy5udW1JdGVtc0luVmlld3BvcnQsIHRoaXMuZF9udW1Ub2xlcmF0ZWRJdGVtcyk7XG4gICAgICAgICAgICAgICAgaXNSYW5nZUNoYW5nZWQgPSBuZXdGaXJzdCAhPT0gdGhpcy5maXJzdCB8fCBuZXdMYXN0ICE9PSB0aGlzLmxhc3QgfHwgdGhpcy5pc1JhbmdlQ2hhbmdlZDtcbiAgICAgICAgICAgICAgICBuZXdTY3JvbGxQb3MgPSBzY3JvbGxQb3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlyc3Q6IG5ld0ZpcnN0LFxuICAgICAgICAgICAgbGFzdDogbmV3TGFzdCxcbiAgICAgICAgICAgIGlzUmFuZ2VDaGFuZ2VkLFxuICAgICAgICAgICAgc2Nyb2xsUG9zOiBuZXdTY3JvbGxQb3NcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBvblNjcm9sbENoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgeyBmaXJzdCwgbGFzdCwgaXNSYW5nZUNoYW5nZWQsIHNjcm9sbFBvcyB9ID0gdGhpcy5vblNjcm9sbFBvc2l0aW9uQ2hhbmdlKGV2ZW50KTtcblxuICAgICAgICBpZiAoaXNSYW5nZUNoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0geyBmaXJzdCwgbGFzdCB9O1xuXG4gICAgICAgICAgICB0aGlzLnNldENvbnRlbnRQb3NpdGlvbihuZXdTdGF0ZSk7XG5cbiAgICAgICAgICAgIHRoaXMuZmlyc3QgPSBmaXJzdDtcbiAgICAgICAgICAgIHRoaXMubGFzdCA9IGxhc3Q7XG4gICAgICAgICAgICB0aGlzLmxhc3RTY3JvbGxQb3MgPSBzY3JvbGxQb3M7XG5cbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXZlbnRzKCdvblNjcm9sbEluZGV4Q2hhbmdlJywgbmV3U3RhdGUpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fbGF6eSAmJiB0aGlzLmlzUGFnZUNoYW5nZWQoZmlyc3QpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGF6eUxvYWRTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3Q6IHRoaXMuX3N0ZXAgPyBNYXRoLm1pbih0aGlzLmdldFBhZ2VCeUZpcnN0KGZpcnN0KSAqIHRoaXMuX3N0ZXAsICg8YW55W10+dGhpcy5pdGVtcykubGVuZ3RoIC0gdGhpcy5fc3RlcCkgOiBmaXJzdCxcbiAgICAgICAgICAgICAgICAgICAgbGFzdDogTWF0aC5taW4odGhpcy5fc3RlcCA/ICh0aGlzLmdldFBhZ2VCeUZpcnN0KGZpcnN0KSArIDEpICogdGhpcy5fc3RlcCA6IGxhc3QsICg8YW55W10+dGhpcy5pdGVtcykubGVuZ3RoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgaXNMYXp5U3RhdGVDaGFuZ2VkID0gdGhpcy5sYXp5TG9hZFN0YXRlLmZpcnN0ICE9PSBsYXp5TG9hZFN0YXRlLmZpcnN0IHx8IHRoaXMubGF6eUxvYWRTdGF0ZS5sYXN0ICE9PSBsYXp5TG9hZFN0YXRlLmxhc3Q7XG5cbiAgICAgICAgICAgICAgICBpc0xhenlTdGF0ZUNoYW5nZWQgJiYgdGhpcy5oYW5kbGVFdmVudHMoJ29uTGF6eUxvYWQnLCBsYXp5TG9hZFN0YXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhenlMb2FkU3RhdGUgPSBsYXp5TG9hZFN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Db250YWluZXJTY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRXZlbnRzKCdvblNjcm9sbCcsIHsgb3JpZ2luYWxFdmVudDogZXZlbnQgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlbGF5ICYmIHRoaXMuaXNQYWdlQ2hhbmdlZCgpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2Nyb2xsVGltZW91dCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5kX2xvYWRpbmcgJiYgdGhpcy5zaG93TG9hZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc1JhbmdlQ2hhbmdlZCB9ID0gdGhpcy5vblNjcm9sbFBvc2l0aW9uQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFuZ2VkID0gaXNSYW5nZUNoYW5nZWQgfHwgKHRoaXMuX3N0ZXAgPyB0aGlzLmlzUGFnZUNoYW5nZWQoKSA6IGZhbHNlKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZF9sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25TY3JvbGxDaGFuZ2UoZXZlbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZF9sb2FkaW5nICYmIHRoaXMuc2hvd0xvYWRlciAmJiAoIXRoaXMuX2xhenkgfHwgdGhpcy5fbG9hZGluZyA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRfbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLmdldFBhZ2VCeUZpcnN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSwgdGhpcy5fZGVsYXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgIXRoaXMuZF9sb2FkaW5nICYmIHRoaXMub25TY3JvbGxDaGFuZ2UoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmluZFJlc2l6ZUxpc3RlbmVyKCkge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLndpbmRvd1Jlc2l6ZUxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2luZG93ID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldyBhcyBXaW5kb3c7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gaXNUb3VjaERldmljZSgpID8gJ29yaWVudGF0aW9uY2hhbmdlJyA6ICdyZXNpemUnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndpbmRvd1Jlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4od2luZG93LCBldmVudCwgdGhpcy5vbldpbmRvd1Jlc2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuYmluZFJlc2l6ZUxpc3RlbmVyKCkge1xuICAgICAgICBpZiAodGhpcy53aW5kb3dSZXNpemVMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy53aW5kb3dSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy53aW5kb3dSZXNpemVMaXN0ZW5lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVzaXplVGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVzaXplVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2l6ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1Zpc2libGUodGhpcy5lbGVtZW50Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFt3aWR0aCwgaGVpZ2h0XSA9IFtnZXRXaWR0aCh0aGlzLmVsZW1lbnRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQpLCBnZXRIZWlnaHQodGhpcy5lbGVtZW50Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KV07XG4gICAgICAgICAgICAgICAgY29uc3QgW2lzRGlmZldpZHRoLCBpc0RpZmZIZWlnaHRdID0gW3dpZHRoICE9PSB0aGlzLmRlZmF1bHRXaWR0aCwgaGVpZ2h0ICE9PSB0aGlzLmRlZmF1bHRIZWlnaHRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlaW5pdCA9IHRoaXMuYm90aCA/IGlzRGlmZldpZHRoIHx8IGlzRGlmZkhlaWdodCA6IHRoaXMuaG9yaXpvbnRhbCA/IGlzRGlmZldpZHRoIDogdGhpcy52ZXJ0aWNhbCA/IGlzRGlmZkhlaWdodCA6IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgcmVpbml0ICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kX251bVRvbGVyYXRlZEl0ZW1zID0gdGhpcy5fbnVtVG9sZXJhdGVkSXRlbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRXaWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0SGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29udGVudFdpZHRoID0gZ2V0V2lkdGgodGhpcy5jb250ZW50RWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q29udGVudEhlaWdodCA9IGdldEhlaWdodCh0aGlzLmNvbnRlbnRFbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy5fcmVzaXplRGVsYXkpO1xuICAgIH1cblxuICAgIGhhbmRsZUV2ZW50cyhuYW1lOiBzdHJpbmcsIHBhcmFtczogYW55KSB7XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zICYmICg8YW55PnRoaXMub3B0aW9ucylbbmFtZV0gPyAoPGFueT50aGlzLm9wdGlvbnMpW25hbWVdKHBhcmFtcykgOiB0aGlzW25hbWVdLmVtaXQocGFyYW1zKTtcbiAgICB9XG5cbiAgICBnZXRDb250ZW50T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnRlbnRTdHlsZUNsYXNzOiBgcC12aXJ0dWFsc2Nyb2xsZXItY29udGVudCAke3RoaXMuZF9sb2FkaW5nID8gJ3AtdmlydHVhbHNjcm9sbGVyLWxvYWRpbmcnIDogJyd9YCxcbiAgICAgICAgICAgIGl0ZW1zOiB0aGlzLmxvYWRlZEl0ZW1zLFxuICAgICAgICAgICAgZ2V0SXRlbU9wdGlvbnM6IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmdldE9wdGlvbnMoaW5kZXgpLFxuICAgICAgICAgICAgbG9hZGluZzogdGhpcy5kX2xvYWRpbmcsXG4gICAgICAgICAgICBnZXRMb2FkZXJPcHRpb25zOiAoaW5kZXg6IG51bWJlciwgb3B0aW9ucz86IGFueSkgPT4gdGhpcy5nZXRMb2FkZXJPcHRpb25zKGluZGV4LCBvcHRpb25zKSxcbiAgICAgICAgICAgIGl0ZW1TaXplOiB0aGlzLl9pdGVtU2l6ZSxcbiAgICAgICAgICAgIHJvd3M6IHRoaXMubG9hZGVkUm93cyxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMubG9hZGVkQ29sdW1ucyxcbiAgICAgICAgICAgIHNwYWNlclN0eWxlOiB0aGlzLnNwYWNlclN0eWxlLFxuICAgICAgICAgICAgY29udGVudFN0eWxlOiB0aGlzLmNvbnRlbnRTdHlsZSxcbiAgICAgICAgICAgIHZlcnRpY2FsOiB0aGlzLnZlcnRpY2FsLFxuICAgICAgICAgICAgaG9yaXpvbnRhbDogdGhpcy5ob3Jpem9udGFsLFxuICAgICAgICAgICAgYm90aDogdGhpcy5ib3RoXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9ucyhyZW5kZXJlZEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY291bnQgPSAodGhpcy5faXRlbXMgfHwgW10pLmxlbmd0aDtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmJvdGggPyB0aGlzLmZpcnN0LnJvd3MgKyByZW5kZXJlZEluZGV4IDogdGhpcy5maXJzdCArIHJlbmRlcmVkSW5kZXg7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgY291bnQsXG4gICAgICAgICAgICBmaXJzdDogaW5kZXggPT09IDAsXG4gICAgICAgICAgICBsYXN0OiBpbmRleCA9PT0gY291bnQgLSAxLFxuICAgICAgICAgICAgZXZlbjogaW5kZXggJSAyID09PSAwLFxuICAgICAgICAgICAgb2RkOiBpbmRleCAlIDIgIT09IDBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXRMb2FkZXJPcHRpb25zKGluZGV4OiBudW1iZXIsIGV4dE9wdGlvbnM6IGFueSkge1xuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMubG9hZGVyQXJyLmxlbmd0aDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBjb3VudCxcbiAgICAgICAgICAgIGZpcnN0OiBpbmRleCA9PT0gMCxcbiAgICAgICAgICAgIGxhc3Q6IGluZGV4ID09PSBjb3VudCAtIDEsXG4gICAgICAgICAgICBldmVuOiBpbmRleCAlIDIgPT09IDAsXG4gICAgICAgICAgICBvZGQ6IGluZGV4ICUgMiAhPT0gMCxcbiAgICAgICAgICAgIC4uLmV4dE9wdGlvbnNcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1Njcm9sbGVyLCBTaGFyZWRNb2R1bGVdLFxuICAgIGV4cG9ydHM6IFtTY3JvbGxlciwgU2hhcmVkTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBTY3JvbGxlck1vZHVsZSB7fVxuIl19