primeng 18.0.1 → 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1078) hide show
  1. package/base/style/basestyle.d.ts +11 -11
  2. package/config/themeprovider.d.ts +6 -0
  3. package/confirmdialog/confirmdialog.d.ts +1 -0
  4. package/dynamicdialog/dynamicdialog.d.ts +2 -2
  5. package/fesm2022/primeng-accordion.mjs +10 -10
  6. package/fesm2022/primeng-accordion.mjs.map +1 -1
  7. package/fesm2022/primeng-animateonscroll.mjs +1 -1
  8. package/fesm2022/primeng-animateonscroll.mjs.map +1 -1
  9. package/fesm2022/primeng-api.mjs +5 -5
  10. package/fesm2022/primeng-api.mjs.map +1 -1
  11. package/fesm2022/primeng-autocomplete.mjs +2 -2
  12. package/fesm2022/primeng-autocomplete.mjs.map +1 -1
  13. package/fesm2022/primeng-autofocus.mjs +1 -1
  14. package/fesm2022/primeng-autofocus.mjs.map +1 -1
  15. package/fesm2022/primeng-avatar.mjs +2 -2
  16. package/fesm2022/primeng-avatar.mjs.map +1 -1
  17. package/fesm2022/primeng-avatargroup.mjs +2 -2
  18. package/fesm2022/primeng-avatargroup.mjs.map +1 -1
  19. package/fesm2022/primeng-badge.mjs +3 -3
  20. package/fesm2022/primeng-badge.mjs.map +1 -1
  21. package/fesm2022/primeng-basecomponent.mjs +1 -1
  22. package/fesm2022/primeng-basecomponent.mjs.map +1 -1
  23. package/fesm2022/primeng-blockui.mjs +2 -2
  24. package/fesm2022/primeng-blockui.mjs.map +1 -1
  25. package/fesm2022/primeng-breadcrumb.mjs +2 -2
  26. package/fesm2022/primeng-breadcrumb.mjs.map +1 -1
  27. package/fesm2022/primeng-button.mjs +5 -5
  28. package/fesm2022/primeng-button.mjs.map +1 -1
  29. package/fesm2022/primeng-buttongroup.mjs +2 -2
  30. package/fesm2022/primeng-buttongroup.mjs.map +1 -1
  31. package/fesm2022/primeng-calendar.mjs +4 -4
  32. package/fesm2022/primeng-calendar.mjs.map +1 -1
  33. package/fesm2022/primeng-card.mjs +2 -2
  34. package/fesm2022/primeng-card.mjs.map +1 -1
  35. package/fesm2022/primeng-carousel.mjs +2 -2
  36. package/fesm2022/primeng-carousel.mjs.map +1 -1
  37. package/fesm2022/primeng-cascadeselect.mjs +4 -4
  38. package/fesm2022/primeng-cascadeselect.mjs.map +1 -1
  39. package/fesm2022/primeng-chart.mjs +2 -2
  40. package/fesm2022/primeng-chart.mjs.map +1 -1
  41. package/fesm2022/primeng-checkbox.mjs +2 -2
  42. package/fesm2022/primeng-checkbox.mjs.map +1 -1
  43. package/fesm2022/primeng-chip.mjs +2 -2
  44. package/fesm2022/primeng-chip.mjs.map +1 -1
  45. package/fesm2022/primeng-colorpicker.mjs +2 -2
  46. package/fesm2022/primeng-colorpicker.mjs.map +1 -1
  47. package/fesm2022/primeng-config.mjs +14 -12
  48. package/fesm2022/primeng-config.mjs.map +1 -1
  49. package/fesm2022/primeng-confirmdialog.mjs +11 -8
  50. package/fesm2022/primeng-confirmdialog.mjs.map +1 -1
  51. package/fesm2022/primeng-confirmpopup.mjs +2 -2
  52. package/fesm2022/primeng-confirmpopup.mjs.map +1 -1
  53. package/fesm2022/primeng-contextmenu.mjs +5 -5
  54. package/fesm2022/primeng-contextmenu.mjs.map +1 -1
  55. package/fesm2022/primeng-dataview.mjs +2 -2
  56. package/fesm2022/primeng-dataview.mjs.map +1 -1
  57. package/fesm2022/primeng-datepicker.mjs +2 -2
  58. package/fesm2022/primeng-datepicker.mjs.map +1 -1
  59. package/fesm2022/primeng-defer.mjs +1 -1
  60. package/fesm2022/primeng-dialog.mjs +2 -2
  61. package/fesm2022/primeng-dialog.mjs.map +1 -1
  62. package/fesm2022/primeng-divider.mjs +2 -2
  63. package/fesm2022/primeng-divider.mjs.map +1 -1
  64. package/fesm2022/primeng-dock.mjs +2 -2
  65. package/fesm2022/primeng-dock.mjs.map +1 -1
  66. package/fesm2022/primeng-dragdrop.mjs +2 -2
  67. package/fesm2022/primeng-dragdrop.mjs.map +1 -1
  68. package/fesm2022/primeng-drawer.mjs +2 -2
  69. package/fesm2022/primeng-drawer.mjs.map +1 -1
  70. package/fesm2022/primeng-dropdown.mjs +4 -4
  71. package/fesm2022/primeng-dropdown.mjs.map +1 -1
  72. package/fesm2022/primeng-dynamicdialog.mjs +7 -7
  73. package/fesm2022/primeng-dynamicdialog.mjs.map +1 -1
  74. package/fesm2022/primeng-editor.mjs +2 -2
  75. package/fesm2022/primeng-editor.mjs.map +1 -1
  76. package/fesm2022/primeng-fieldset.mjs +2 -2
  77. package/fesm2022/primeng-fieldset.mjs.map +1 -1
  78. package/fesm2022/primeng-fileupload.mjs +2 -2
  79. package/fesm2022/primeng-fileupload.mjs.map +1 -1
  80. package/fesm2022/primeng-floatlabel.mjs +2 -2
  81. package/fesm2022/primeng-floatlabel.mjs.map +1 -1
  82. package/fesm2022/primeng-fluid.mjs +2 -2
  83. package/fesm2022/primeng-fluid.mjs.map +1 -1
  84. package/fesm2022/primeng-focustrap.mjs +1 -1
  85. package/fesm2022/primeng-focustrap.mjs.map +1 -1
  86. package/fesm2022/primeng-galleria.mjs +10 -10
  87. package/fesm2022/primeng-galleria.mjs.map +1 -1
  88. package/fesm2022/primeng-iconfield.mjs +2 -2
  89. package/fesm2022/primeng-iconfield.mjs.map +1 -1
  90. package/fesm2022/primeng-icons-angledoubledown.mjs +2 -2
  91. package/fesm2022/primeng-icons-angledoubledown.mjs.map +1 -1
  92. package/fesm2022/primeng-icons-angledoubleleft.mjs +2 -2
  93. package/fesm2022/primeng-icons-angledoubleleft.mjs.map +1 -1
  94. package/fesm2022/primeng-icons-angledoubleright.mjs +2 -2
  95. package/fesm2022/primeng-icons-angledoubleright.mjs.map +1 -1
  96. package/fesm2022/primeng-icons-angledoubleup.mjs +2 -2
  97. package/fesm2022/primeng-icons-angledoubleup.mjs.map +1 -1
  98. package/fesm2022/primeng-icons-angledown.mjs +2 -2
  99. package/fesm2022/primeng-icons-angledown.mjs.map +1 -1
  100. package/fesm2022/primeng-icons-angleleft.mjs +2 -2
  101. package/fesm2022/primeng-icons-angleleft.mjs.map +1 -1
  102. package/fesm2022/primeng-icons-angleright.mjs +2 -2
  103. package/fesm2022/primeng-icons-angleright.mjs.map +1 -1
  104. package/fesm2022/primeng-icons-angleup.mjs +2 -2
  105. package/fesm2022/primeng-icons-angleup.mjs.map +1 -1
  106. package/fesm2022/primeng-icons-arrowdown.mjs +2 -2
  107. package/fesm2022/primeng-icons-arrowdown.mjs.map +1 -1
  108. package/fesm2022/primeng-icons-arrowdownleft.mjs +2 -2
  109. package/fesm2022/primeng-icons-arrowdownleft.mjs.map +1 -1
  110. package/fesm2022/primeng-icons-arrowdownright.mjs +2 -2
  111. package/fesm2022/primeng-icons-arrowdownright.mjs.map +1 -1
  112. package/fesm2022/primeng-icons-arrowleft.mjs +2 -2
  113. package/fesm2022/primeng-icons-arrowleft.mjs.map +1 -1
  114. package/fesm2022/primeng-icons-arrowright.mjs +2 -2
  115. package/fesm2022/primeng-icons-arrowright.mjs.map +1 -1
  116. package/fesm2022/primeng-icons-arrowup.mjs +2 -2
  117. package/fesm2022/primeng-icons-arrowup.mjs.map +1 -1
  118. package/fesm2022/primeng-icons-ban.mjs +2 -2
  119. package/fesm2022/primeng-icons-ban.mjs.map +1 -1
  120. package/fesm2022/primeng-icons-bars.mjs +2 -2
  121. package/fesm2022/primeng-icons-bars.mjs.map +1 -1
  122. package/fesm2022/primeng-icons-baseicon.mjs +2 -2
  123. package/fesm2022/primeng-icons-baseicon.mjs.map +1 -1
  124. package/fesm2022/primeng-icons-blank.mjs +2 -2
  125. package/fesm2022/primeng-icons-blank.mjs.map +1 -1
  126. package/fesm2022/primeng-icons-calendar.mjs +2 -2
  127. package/fesm2022/primeng-icons-calendar.mjs.map +1 -1
  128. package/fesm2022/primeng-icons-caretleft.mjs +2 -2
  129. package/fesm2022/primeng-icons-caretleft.mjs.map +1 -1
  130. package/fesm2022/primeng-icons-caretright.mjs +2 -2
  131. package/fesm2022/primeng-icons-caretright.mjs.map +1 -1
  132. package/fesm2022/primeng-icons-check.mjs +2 -2
  133. package/fesm2022/primeng-icons-check.mjs.map +1 -1
  134. package/fesm2022/primeng-icons-chevrondown.mjs +2 -2
  135. package/fesm2022/primeng-icons-chevrondown.mjs.map +1 -1
  136. package/fesm2022/primeng-icons-chevronleft.mjs +2 -2
  137. package/fesm2022/primeng-icons-chevronleft.mjs.map +1 -1
  138. package/fesm2022/primeng-icons-chevronright.mjs +2 -2
  139. package/fesm2022/primeng-icons-chevronright.mjs.map +1 -1
  140. package/fesm2022/primeng-icons-chevronup.mjs +2 -2
  141. package/fesm2022/primeng-icons-chevronup.mjs.map +1 -1
  142. package/fesm2022/primeng-icons-exclamationtriangle.mjs +2 -2
  143. package/fesm2022/primeng-icons-exclamationtriangle.mjs.map +1 -1
  144. package/fesm2022/primeng-icons-eye.mjs +2 -2
  145. package/fesm2022/primeng-icons-eye.mjs.map +1 -1
  146. package/fesm2022/primeng-icons-eyeslash.mjs +2 -2
  147. package/fesm2022/primeng-icons-eyeslash.mjs.map +1 -1
  148. package/fesm2022/primeng-icons-filter.mjs +2 -2
  149. package/fesm2022/primeng-icons-filter.mjs.map +1 -1
  150. package/fesm2022/primeng-icons-filterslash.mjs +2 -2
  151. package/fesm2022/primeng-icons-filterslash.mjs.map +1 -1
  152. package/fesm2022/primeng-icons-home.mjs +2 -2
  153. package/fesm2022/primeng-icons-home.mjs.map +1 -1
  154. package/fesm2022/primeng-icons-infocircle.mjs +2 -2
  155. package/fesm2022/primeng-icons-infocircle.mjs.map +1 -1
  156. package/fesm2022/primeng-icons-minus.mjs +2 -2
  157. package/fesm2022/primeng-icons-minus.mjs.map +1 -1
  158. package/fesm2022/primeng-icons-pencil.mjs +2 -2
  159. package/fesm2022/primeng-icons-pencil.mjs.map +1 -1
  160. package/fesm2022/primeng-icons-plus.mjs +2 -2
  161. package/fesm2022/primeng-icons-plus.mjs.map +1 -1
  162. package/fesm2022/primeng-icons-refresh.mjs +2 -2
  163. package/fesm2022/primeng-icons-refresh.mjs.map +1 -1
  164. package/fesm2022/primeng-icons-search.mjs +2 -2
  165. package/fesm2022/primeng-icons-search.mjs.map +1 -1
  166. package/fesm2022/primeng-icons-searchminus.mjs +2 -2
  167. package/fesm2022/primeng-icons-searchminus.mjs.map +1 -1
  168. package/fesm2022/primeng-icons-searchplus.mjs +2 -2
  169. package/fesm2022/primeng-icons-searchplus.mjs.map +1 -1
  170. package/fesm2022/primeng-icons-sortalt.mjs +2 -2
  171. package/fesm2022/primeng-icons-sortalt.mjs.map +1 -1
  172. package/fesm2022/primeng-icons-sortamountdown.mjs +2 -2
  173. package/fesm2022/primeng-icons-sortamountdown.mjs.map +1 -1
  174. package/fesm2022/primeng-icons-sortamountupalt.mjs +2 -2
  175. package/fesm2022/primeng-icons-sortamountupalt.mjs.map +1 -1
  176. package/fesm2022/primeng-icons-spinner.mjs +2 -2
  177. package/fesm2022/primeng-icons-spinner.mjs.map +1 -1
  178. package/fesm2022/primeng-icons-star.mjs +2 -2
  179. package/fesm2022/primeng-icons-star.mjs.map +1 -1
  180. package/fesm2022/primeng-icons-starfill.mjs +2 -2
  181. package/fesm2022/primeng-icons-starfill.mjs.map +1 -1
  182. package/fesm2022/primeng-icons-thlarge.mjs +2 -2
  183. package/fesm2022/primeng-icons-thlarge.mjs.map +1 -1
  184. package/fesm2022/primeng-icons-times.mjs +2 -2
  185. package/fesm2022/primeng-icons-times.mjs.map +1 -1
  186. package/fesm2022/primeng-icons-timescircle.mjs +2 -2
  187. package/fesm2022/primeng-icons-timescircle.mjs.map +1 -1
  188. package/fesm2022/primeng-icons-trash.mjs +2 -2
  189. package/fesm2022/primeng-icons-trash.mjs.map +1 -1
  190. package/fesm2022/primeng-icons-undo.mjs +2 -2
  191. package/fesm2022/primeng-icons-undo.mjs.map +1 -1
  192. package/fesm2022/primeng-icons-upload.mjs +2 -2
  193. package/fesm2022/primeng-icons-upload.mjs.map +1 -1
  194. package/fesm2022/primeng-icons-windowmaximize.mjs +2 -2
  195. package/fesm2022/primeng-icons-windowmaximize.mjs.map +1 -1
  196. package/fesm2022/primeng-icons-windowminimize.mjs +2 -2
  197. package/fesm2022/primeng-icons-windowminimize.mjs.map +1 -1
  198. package/fesm2022/primeng-iftalabel.mjs +2 -2
  199. package/fesm2022/primeng-iftalabel.mjs.map +1 -1
  200. package/fesm2022/primeng-image.mjs +2 -2
  201. package/fesm2022/primeng-image.mjs.map +1 -1
  202. package/fesm2022/primeng-imagecompare.mjs +2 -2
  203. package/fesm2022/primeng-imagecompare.mjs.map +1 -1
  204. package/fesm2022/primeng-inplace.mjs +6 -6
  205. package/fesm2022/primeng-inplace.mjs.map +1 -1
  206. package/fesm2022/primeng-inputgroup.mjs +2 -2
  207. package/fesm2022/primeng-inputgroup.mjs.map +1 -1
  208. package/fesm2022/primeng-inputgroupaddon.mjs +2 -2
  209. package/fesm2022/primeng-inputgroupaddon.mjs.map +1 -1
  210. package/fesm2022/primeng-inputicon.mjs +2 -2
  211. package/fesm2022/primeng-inputicon.mjs.map +1 -1
  212. package/fesm2022/primeng-inputmask.mjs +2 -2
  213. package/fesm2022/primeng-inputmask.mjs.map +1 -1
  214. package/fesm2022/primeng-inputnumber.mjs +2 -2
  215. package/fesm2022/primeng-inputnumber.mjs.map +1 -1
  216. package/fesm2022/primeng-inputotp.mjs +2 -2
  217. package/fesm2022/primeng-inputotp.mjs.map +1 -1
  218. package/fesm2022/primeng-inputswitch.mjs +2 -2
  219. package/fesm2022/primeng-inputswitch.mjs.map +1 -1
  220. package/fesm2022/primeng-inputtext.mjs +1 -1
  221. package/fesm2022/primeng-inputtext.mjs.map +1 -1
  222. package/fesm2022/primeng-inputtextarea.mjs +1 -1
  223. package/fesm2022/primeng-inputtextarea.mjs.map +1 -1
  224. package/fesm2022/primeng-keyfilter.mjs +1 -1
  225. package/fesm2022/primeng-keyfilter.mjs.map +1 -1
  226. package/fesm2022/primeng-knob.mjs +2 -2
  227. package/fesm2022/primeng-knob.mjs.map +1 -1
  228. package/fesm2022/primeng-listbox.mjs +2 -2
  229. package/fesm2022/primeng-listbox.mjs.map +1 -1
  230. package/fesm2022/primeng-megamenu.mjs +4 -4
  231. package/fesm2022/primeng-megamenu.mjs.map +1 -1
  232. package/fesm2022/primeng-menu.mjs +5 -5
  233. package/fesm2022/primeng-menu.mjs.map +1 -1
  234. package/fesm2022/primeng-menubar.mjs +4 -4
  235. package/fesm2022/primeng-menubar.mjs.map +1 -1
  236. package/fesm2022/primeng-message.mjs +2 -2
  237. package/fesm2022/primeng-message.mjs.map +1 -1
  238. package/fesm2022/primeng-messages.mjs +2 -2
  239. package/fesm2022/primeng-messages.mjs.map +1 -1
  240. package/fesm2022/primeng-metergroup.mjs +4 -4
  241. package/fesm2022/primeng-metergroup.mjs.map +1 -1
  242. package/fesm2022/primeng-multiselect.mjs +4 -4
  243. package/fesm2022/primeng-multiselect.mjs.map +1 -1
  244. package/fesm2022/primeng-orderlist.mjs +2 -2
  245. package/fesm2022/primeng-orderlist.mjs.map +1 -1
  246. package/fesm2022/primeng-organizationchart.mjs +5 -5
  247. package/fesm2022/primeng-organizationchart.mjs.map +1 -1
  248. package/fesm2022/primeng-overlay.mjs +2 -2
  249. package/fesm2022/primeng-overlay.mjs.map +1 -1
  250. package/fesm2022/primeng-overlaybadge.mjs +2 -2
  251. package/fesm2022/primeng-overlaybadge.mjs.map +1 -1
  252. package/fesm2022/primeng-overlaypanel.mjs +2 -2
  253. package/fesm2022/primeng-overlaypanel.mjs.map +1 -1
  254. package/fesm2022/primeng-paginator.mjs +2 -2
  255. package/fesm2022/primeng-paginator.mjs.map +1 -1
  256. package/fesm2022/primeng-panel.mjs +2 -2
  257. package/fesm2022/primeng-panel.mjs.map +1 -1
  258. package/fesm2022/primeng-panelmenu.mjs +7 -7
  259. package/fesm2022/primeng-panelmenu.mjs.map +1 -1
  260. package/fesm2022/primeng-password.mjs +4 -4
  261. package/fesm2022/primeng-password.mjs.map +1 -1
  262. package/fesm2022/primeng-picklist.mjs +2 -2
  263. package/fesm2022/primeng-picklist.mjs.map +1 -1
  264. package/fesm2022/primeng-popover.mjs +2 -2
  265. package/fesm2022/primeng-popover.mjs.map +1 -1
  266. package/fesm2022/primeng-progressbar.mjs +2 -2
  267. package/fesm2022/primeng-progressbar.mjs.map +1 -1
  268. package/fesm2022/primeng-progressspinner.mjs +2 -2
  269. package/fesm2022/primeng-progressspinner.mjs.map +1 -1
  270. package/fesm2022/primeng-radiobutton.mjs +2 -2
  271. package/fesm2022/primeng-radiobutton.mjs.map +1 -1
  272. package/fesm2022/primeng-rating.mjs +2 -2
  273. package/fesm2022/primeng-rating.mjs.map +1 -1
  274. package/fesm2022/primeng-ripple.mjs +1 -1
  275. package/fesm2022/primeng-ripple.mjs.map +1 -1
  276. package/fesm2022/primeng-scroller.mjs +2 -2
  277. package/fesm2022/primeng-scroller.mjs.map +1 -1
  278. package/fesm2022/primeng-scrollpanel.mjs +2 -2
  279. package/fesm2022/primeng-scrollpanel.mjs.map +1 -1
  280. package/fesm2022/primeng-scrolltop.mjs +2 -2
  281. package/fesm2022/primeng-scrolltop.mjs.map +1 -1
  282. package/fesm2022/primeng-select.mjs +4 -4
  283. package/fesm2022/primeng-select.mjs.map +1 -1
  284. package/fesm2022/primeng-selectbutton.mjs +2 -2
  285. package/fesm2022/primeng-selectbutton.mjs.map +1 -1
  286. package/fesm2022/primeng-sidebar.mjs +2 -2
  287. package/fesm2022/primeng-sidebar.mjs.map +1 -1
  288. package/fesm2022/primeng-skeleton.mjs +2 -2
  289. package/fesm2022/primeng-skeleton.mjs.map +1 -1
  290. package/fesm2022/primeng-slider.mjs +2 -2
  291. package/fesm2022/primeng-slider.mjs.map +1 -1
  292. package/fesm2022/primeng-speeddial.mjs +2 -2
  293. package/fesm2022/primeng-speeddial.mjs.map +1 -1
  294. package/fesm2022/primeng-splitbutton.mjs +2 -2
  295. package/fesm2022/primeng-splitbutton.mjs.map +1 -1
  296. package/fesm2022/primeng-splitter.mjs +4 -4
  297. package/fesm2022/primeng-splitter.mjs.map +1 -1
  298. package/fesm2022/primeng-stepper.mjs +16 -16
  299. package/fesm2022/primeng-stepper.mjs.map +1 -1
  300. package/fesm2022/primeng-steps.mjs +2 -2
  301. package/fesm2022/primeng-steps.mjs.map +1 -1
  302. package/fesm2022/primeng-styleclass.mjs +1 -1
  303. package/fesm2022/primeng-styleclass.mjs.map +1 -1
  304. package/fesm2022/primeng-table.mjs +64 -38
  305. package/fesm2022/primeng-table.mjs.map +1 -1
  306. package/fesm2022/primeng-tabmenu.mjs +2 -2
  307. package/fesm2022/primeng-tabmenu.mjs.map +1 -1
  308. package/fesm2022/primeng-tabs.mjs +11 -11
  309. package/fesm2022/primeng-tabs.mjs.map +1 -1
  310. package/fesm2022/primeng-tabview.mjs +4 -4
  311. package/fesm2022/primeng-tabview.mjs.map +1 -1
  312. package/fesm2022/primeng-tag.mjs +2 -2
  313. package/fesm2022/primeng-tag.mjs.map +1 -1
  314. package/fesm2022/primeng-terminal.mjs +2 -2
  315. package/fesm2022/primeng-terminal.mjs.map +1 -1
  316. package/fesm2022/primeng-textarea.mjs +1 -1
  317. package/fesm2022/primeng-textarea.mjs.map +1 -1
  318. package/fesm2022/primeng-tieredmenu.mjs +4 -4
  319. package/fesm2022/primeng-tieredmenu.mjs.map +1 -1
  320. package/fesm2022/primeng-timeline.mjs +2 -2
  321. package/fesm2022/primeng-timeline.mjs.map +1 -1
  322. package/fesm2022/primeng-toast.mjs +4 -4
  323. package/fesm2022/primeng-toast.mjs.map +1 -1
  324. package/fesm2022/primeng-togglebutton.mjs +3 -3
  325. package/fesm2022/primeng-togglebutton.mjs.map +1 -1
  326. package/fesm2022/primeng-toggleswitch.mjs +2 -2
  327. package/fesm2022/primeng-toggleswitch.mjs.map +1 -1
  328. package/fesm2022/primeng-toolbar.mjs +2 -2
  329. package/fesm2022/primeng-toolbar.mjs.map +1 -1
  330. package/fesm2022/primeng-tooltip.mjs +1 -1
  331. package/fesm2022/primeng-tooltip.mjs.map +1 -1
  332. package/fesm2022/primeng-tree.mjs +4 -4
  333. package/fesm2022/primeng-tree.mjs.map +1 -1
  334. package/fesm2022/primeng-treeselect.mjs +2 -2
  335. package/fesm2022/primeng-treeselect.mjs.map +1 -1
  336. package/fesm2022/primeng-treetable.mjs +24 -24
  337. package/fesm2022/primeng-treetable.mjs.map +1 -1
  338. package/package.json +163 -511
  339. package/speeddial/speeddial.d.ts +2 -2
  340. package/esm2022/accordion/accordion.mjs +0 -1281
  341. package/esm2022/accordion/primeng-accordion.mjs +0 -5
  342. package/esm2022/accordion/public_api.mjs +0 -3
  343. package/esm2022/accordion/style/accordionstyle.mjs +0 -163
  344. package/esm2022/animateonscroll/animateonscroll.mjs +0 -174
  345. package/esm2022/animateonscroll/primeng-animateonscroll.mjs +0 -5
  346. package/esm2022/animateonscroll/public_api.mjs +0 -2
  347. package/esm2022/api/blockableui.mjs +0 -2
  348. package/esm2022/api/confirmaeventtype.mjs +0 -10
  349. package/esm2022/api/confirmation.mjs +0 -2
  350. package/esm2022/api/confirmationservice.mjs +0 -43
  351. package/esm2022/api/contextmenuservice.mjs +0 -22
  352. package/esm2022/api/filtermatchmode.mjs +0 -23
  353. package/esm2022/api/filtermetadata.mjs +0 -2
  354. package/esm2022/api/filteroperator.mjs +0 -5
  355. package/esm2022/api/filterservice.mjs +0 -224
  356. package/esm2022/api/lazyloadevent.mjs +0 -2
  357. package/esm2022/api/lazyloadmeta.mjs +0 -2
  358. package/esm2022/api/megamenuitem.mjs +0 -2
  359. package/esm2022/api/menuitem.mjs +0 -2
  360. package/esm2022/api/messageservice.mjs +0 -47
  361. package/esm2022/api/overlayoptions.mjs +0 -2
  362. package/esm2022/api/overlayservice.mjs +0 -19
  363. package/esm2022/api/primeicons.mjs +0 -314
  364. package/esm2022/api/primeng-api.mjs +0 -5
  365. package/esm2022/api/public_api.mjs +0 -33
  366. package/esm2022/api/scrolleroptions.mjs +0 -2
  367. package/esm2022/api/selectitem.mjs +0 -2
  368. package/esm2022/api/selectitemgroup.mjs +0 -2
  369. package/esm2022/api/shared.mjs +0 -76
  370. package/esm2022/api/sortevent.mjs +0 -2
  371. package/esm2022/api/sortmeta.mjs +0 -2
  372. package/esm2022/api/tablestate.mjs +0 -2
  373. package/esm2022/api/toastmessage.mjs +0 -2
  374. package/esm2022/api/tooltipoptions.mjs +0 -2
  375. package/esm2022/api/translation.mjs +0 -2
  376. package/esm2022/api/translationkeys.mjs +0 -51
  377. package/esm2022/api/treedragdropservice.mjs +0 -21
  378. package/esm2022/api/treenode.mjs +0 -2
  379. package/esm2022/api/treenodedragevent.mjs +0 -2
  380. package/esm2022/api/treetablenode.mjs +0 -2
  381. package/esm2022/autocomplete/autocomplete.interface.mjs +0 -2
  382. package/esm2022/autocomplete/autocomplete.mjs +0 -2284
  383. package/esm2022/autocomplete/primeng-autocomplete.mjs +0 -5
  384. package/esm2022/autocomplete/public_api.mjs +0 -4
  385. package/esm2022/autocomplete/style/autocompletestyle.mjs +0 -409
  386. package/esm2022/autofocus/autofocus.mjs +0 -86
  387. package/esm2022/autofocus/primeng-autofocus.mjs +0 -5
  388. package/esm2022/autofocus/public_api.mjs +0 -2
  389. package/esm2022/avatar/avatar.mjs +0 -193
  390. package/esm2022/avatar/primeng-avatar.mjs +0 -5
  391. package/esm2022/avatar/public_api.mjs +0 -3
  392. package/esm2022/avatar/style/avatarstyle.mjs +0 -130
  393. package/esm2022/avatargroup/avatargroup.mjs +0 -80
  394. package/esm2022/avatargroup/primeng-avatargroup.mjs +0 -5
  395. package/esm2022/avatargroup/public_api.mjs +0 -3
  396. package/esm2022/avatargroup/style/avatargroupstyle.mjs +0 -29
  397. package/esm2022/badge/badge.mjs +0 -339
  398. package/esm2022/badge/primeng-badge.mjs +0 -5
  399. package/esm2022/badge/public_api.mjs +0 -3
  400. package/esm2022/badge/style/badgestyle.mjs +0 -143
  401. package/esm2022/base/base.mjs +0 -19
  402. package/esm2022/base/primeng-base.mjs +0 -5
  403. package/esm2022/base/public_api.mjs +0 -3
  404. package/esm2022/base/style/basestyle.mjs +0 -256
  405. package/esm2022/basecomponent/basecomponent.mjs +0 -160
  406. package/esm2022/basecomponent/primeng-basecomponent.mjs +0 -5
  407. package/esm2022/basecomponent/public_api.mjs +0 -3
  408. package/esm2022/basecomponent/style/basecomponentstyle.mjs +0 -13
  409. package/esm2022/blockui/blockui.interface.mjs +0 -2
  410. package/esm2022/blockui/blockui.mjs +0 -230
  411. package/esm2022/blockui/primeng-blockui.mjs +0 -5
  412. package/esm2022/blockui/public_api.mjs +0 -4
  413. package/esm2022/blockui/style/blockuistyle.mjs +0 -50
  414. package/esm2022/breadcrumb/breadcrumb.interface.mjs +0 -2
  415. package/esm2022/breadcrumb/breadcrumb.mjs +0 -601
  416. package/esm2022/breadcrumb/primeng-breadcrumb.mjs +0 -5
  417. package/esm2022/breadcrumb/public_api.mjs +0 -4
  418. package/esm2022/breadcrumb/style/breadcrumbstyle.mjs +0 -133
  419. package/esm2022/button/button.interface.mjs +0 -2
  420. package/esm2022/button/button.mjs +0 -923
  421. package/esm2022/button/primeng-button.mjs +0 -5
  422. package/esm2022/button/public_api.mjs +0 -4
  423. package/esm2022/button/style/buttonstyle.mjs +0 -707
  424. package/esm2022/buttongroup/buttongroup.mjs +0 -47
  425. package/esm2022/buttongroup/primeng-buttongroup.mjs +0 -5
  426. package/esm2022/buttongroup/public_api.mjs +0 -3
  427. package/esm2022/buttongroup/style/buttongroupstyle.mjs +0 -120
  428. package/esm2022/calendar/calendar.interface.mjs +0 -2
  429. package/esm2022/calendar/calendar.mjs +0 -4567
  430. package/esm2022/calendar/primeng-calendar.mjs +0 -5
  431. package/esm2022/calendar/public_api.mjs +0 -4
  432. package/esm2022/calendar/style/calendarstyle.mjs +0 -472
  433. package/esm2022/card/card.interface.mjs +0 -2
  434. package/esm2022/card/card.mjs +0 -293
  435. package/esm2022/card/primeng-card.mjs +0 -5
  436. package/esm2022/card/public_api.mjs +0 -4
  437. package/esm2022/card/style/cardstyle.mjs +0 -100
  438. package/esm2022/carousel/carousel.interface.mjs +0 -2
  439. package/esm2022/carousel/carousel.mjs +0 -1213
  440. package/esm2022/carousel/primeng-carousel.mjs +0 -5
  441. package/esm2022/carousel/public_api.mjs +0 -4
  442. package/esm2022/carousel/style/carouselstyle.mjs +0 -234
  443. package/esm2022/cascadeselect/cascadeselect.interface.mjs +0 -2
  444. package/esm2022/cascadeselect/cascadeselect.mjs +0 -1878
  445. package/esm2022/cascadeselect/primeng-cascadeselect.mjs +0 -5
  446. package/esm2022/cascadeselect/public_api.mjs +0 -4
  447. package/esm2022/cascadeselect/style/cascadeselectstyle.mjs +0 -379
  448. package/esm2022/chart/chart.mjs +0 -210
  449. package/esm2022/chart/primeng-chart.mjs +0 -5
  450. package/esm2022/chart/public_api.mjs +0 -3
  451. package/esm2022/chart/style/chartstyle.mjs +0 -36
  452. package/esm2022/checkbox/checkbox.interface.mjs +0 -2
  453. package/esm2022/checkbox/checkbox.mjs +0 -468
  454. package/esm2022/checkbox/primeng-checkbox.mjs +0 -5
  455. package/esm2022/checkbox/public_api.mjs +0 -4
  456. package/esm2022/checkbox/style/checkboxstyle.mjs +0 -191
  457. package/esm2022/chip/chip.interface.mjs +0 -2
  458. package/esm2022/chip/chip.mjs +0 -358
  459. package/esm2022/chip/primeng-chip.mjs +0 -5
  460. package/esm2022/chip/public_api.mjs +0 -4
  461. package/esm2022/chip/style/chipstyle.mjs +0 -104
  462. package/esm2022/colorpicker/colorpicker.interface.mjs +0 -2
  463. package/esm2022/colorpicker/colorpicker.mjs +0 -856
  464. package/esm2022/colorpicker/primeng-colorpicker.mjs +0 -5
  465. package/esm2022/colorpicker/public_api.mjs +0 -4
  466. package/esm2022/colorpicker/style/colorpickerstyle.mjs +0 -213
  467. package/esm2022/config/primeng-config.mjs +0 -5
  468. package/esm2022/config/primeng.mjs +0 -185
  469. package/esm2022/config/provideprimeng.mjs +0 -19
  470. package/esm2022/config/public_api.mjs +0 -4
  471. package/esm2022/config/themeprovider.mjs +0 -68
  472. package/esm2022/confirmdialog/confirmdialog.interface.mjs +0 -2
  473. package/esm2022/confirmdialog/confirmdialog.mjs +0 -854
  474. package/esm2022/confirmdialog/primeng-confirmdialog.mjs +0 -5
  475. package/esm2022/confirmdialog/public_api.mjs +0 -4
  476. package/esm2022/confirmdialog/style/confirmdialogstyle.mjs +0 -67
  477. package/esm2022/confirmpopup/confirmpopup.interface.mjs +0 -2
  478. package/esm2022/confirmpopup/confirmpopup.mjs +0 -647
  479. package/esm2022/confirmpopup/primeng-confirmpopup.mjs +0 -5
  480. package/esm2022/confirmpopup/public_api.mjs +0 -4
  481. package/esm2022/confirmpopup/style/confirmpopupstyle.mjs +0 -170
  482. package/esm2022/contextmenu/contextmenu.mjs +0 -1467
  483. package/esm2022/contextmenu/primeng-contextmenu.mjs +0 -5
  484. package/esm2022/contextmenu/public_api.mjs +0 -3
  485. package/esm2022/contextmenu/style/contextmenustyle.mjs +0 -244
  486. package/esm2022/dataview/dataview.interface.mjs +0 -2
  487. package/esm2022/dataview/dataview.mjs +0 -819
  488. package/esm2022/dataview/primeng-dataview.mjs +0 -5
  489. package/esm2022/dataview/public_api.mjs +0 -4
  490. package/esm2022/dataview/style/dataviewstyle.mjs +0 -115
  491. package/esm2022/datepicker/datepicker.interface.mjs +0 -2
  492. package/esm2022/datepicker/datepicker.mjs +0 -4580
  493. package/esm2022/datepicker/primeng-datepicker.mjs +0 -5
  494. package/esm2022/datepicker/public_api.mjs +0 -4
  495. package/esm2022/datepicker/style/datepickerstyle.mjs +0 -663
  496. package/esm2022/defer/defer.mjs +0 -100
  497. package/esm2022/defer/primeng-defer.mjs +0 -5
  498. package/esm2022/defer/public_api.mjs +0 -2
  499. package/esm2022/dialog/dialog.interface.mjs +0 -2
  500. package/esm2022/dialog/dialog.mjs +0 -1430
  501. package/esm2022/dialog/primeng-dialog.mjs +0 -5
  502. package/esm2022/dialog/public_api.mjs +0 -4
  503. package/esm2022/dialog/style/dialogstyle.mjs +0 -283
  504. package/esm2022/divider/divider.mjs +0 -117
  505. package/esm2022/divider/primeng-divider.mjs +0 -5
  506. package/esm2022/divider/public_api.mjs +0 -3
  507. package/esm2022/divider/style/dividerstyle.mjs +0 -138
  508. package/esm2022/dock/dock.interface.mjs +0 -2
  509. package/esm2022/dock/dock.mjs +0 -465
  510. package/esm2022/dock/primeng-dock.mjs +0 -5
  511. package/esm2022/dock/public_api.mjs +0 -4
  512. package/esm2022/dock/style/dockstyle.mjs +0 -210
  513. package/esm2022/dom/connectedoverlayscrollhandler.mjs +0 -30
  514. package/esm2022/dom/domhandler.mjs +0 -725
  515. package/esm2022/dom/primeng-dom.mjs +0 -5
  516. package/esm2022/dom/public_api.mjs +0 -3
  517. package/esm2022/dragdrop/dragdrop.mjs +0 -323
  518. package/esm2022/dragdrop/primeng-dragdrop.mjs +0 -5
  519. package/esm2022/dragdrop/public_api.mjs +0 -2
  520. package/esm2022/drawer/drawer.interface.mjs +0 -2
  521. package/esm2022/drawer/drawer.mjs +0 -705
  522. package/esm2022/drawer/primeng-drawer.mjs +0 -5
  523. package/esm2022/drawer/public_api.mjs +0 -4
  524. package/esm2022/drawer/style/drawerstyle.mjs +0 -283
  525. package/esm2022/dropdown/dropdown.interface.mjs +0 -2
  526. package/esm2022/dropdown/dropdown.mjs +0 -2506
  527. package/esm2022/dropdown/primeng-dropdown.mjs +0 -5
  528. package/esm2022/dropdown/public_api.mjs +0 -4
  529. package/esm2022/dropdown/style/dropdownstyle.mjs +0 -264
  530. package/esm2022/dynamicdialog/dialogservice.mjs +0 -105
  531. package/esm2022/dynamicdialog/dynamicdialog-config.mjs +0 -182
  532. package/esm2022/dynamicdialog/dynamicdialog-injector.mjs +0 -15
  533. package/esm2022/dynamicdialog/dynamicdialog-ref.mjs +0 -119
  534. package/esm2022/dynamicdialog/dynamicdialog.mjs +0 -879
  535. package/esm2022/dynamicdialog/dynamicdialogcontent.mjs +0 -18
  536. package/esm2022/dynamicdialog/primeng-dynamicdialog.mjs +0 -5
  537. package/esm2022/dynamicdialog/public_api.mjs +0 -8
  538. package/esm2022/dynamicdialog/style/dynamicdialogstyle.mjs +0 -60
  539. package/esm2022/editor/editor.interface.mjs +0 -2
  540. package/esm2022/editor/editor.mjs +0 -443
  541. package/esm2022/editor/primeng-editor.mjs +0 -5
  542. package/esm2022/editor/public_api.mjs +0 -4
  543. package/esm2022/editor/style/editorstyle.mjs +0 -1008
  544. package/esm2022/fieldset/fieldset.interface.mjs +0 -2
  545. package/esm2022/fieldset/fieldset.mjs +0 -455
  546. package/esm2022/fieldset/primeng-fieldset.mjs +0 -5
  547. package/esm2022/fieldset/public_api.mjs +0 -4
  548. package/esm2022/fieldset/style/fieldsetstyle.mjs +0 -143
  549. package/esm2022/fileupload/fileupload.interface.mjs +0 -2
  550. package/esm2022/fileupload/fileupload.mjs +0 -1647
  551. package/esm2022/fileupload/primeng-fileupload.mjs +0 -5
  552. package/esm2022/fileupload/public_api.mjs +0 -4
  553. package/esm2022/fileupload/style/fileuploadstyle.mjs +0 -194
  554. package/esm2022/floatlabel/floatlabel.mjs +0 -61
  555. package/esm2022/floatlabel/primeng-floatlabel.mjs +0 -5
  556. package/esm2022/floatlabel/public_api.mjs +0 -3
  557. package/esm2022/floatlabel/style/floatlabelstyle.mjs +0 -133
  558. package/esm2022/fluid/fluid.mjs +0 -50
  559. package/esm2022/fluid/primeng-fluid.mjs +0 -5
  560. package/esm2022/fluid/public_api.mjs +0 -3
  561. package/esm2022/fluid/style/fluidstyle.mjs +0 -38
  562. package/esm2022/focustrap/focustrap.mjs +0 -104
  563. package/esm2022/focustrap/primeng-focustrap.mjs +0 -5
  564. package/esm2022/focustrap/public_api.mjs +0 -2
  565. package/esm2022/galleria/galleria.interface.mjs +0 -2
  566. package/esm2022/galleria/galleria.mjs +0 -1867
  567. package/esm2022/galleria/primeng-galleria.mjs +0 -5
  568. package/esm2022/galleria/public_api.mjs +0 -4
  569. package/esm2022/galleria/style/galleriastyle.mjs +0 -644
  570. package/esm2022/iconfield/iconfield.mjs +0 -73
  571. package/esm2022/iconfield/primeng-iconfield.mjs +0 -5
  572. package/esm2022/iconfield/public_api.mjs +0 -3
  573. package/esm2022/iconfield/style/iconfieldstyle.mjs +0 -77
  574. package/esm2022/icons/angledoubledown/angledoubledown.mjs +0 -34
  575. package/esm2022/icons/angledoubledown/primeng-icons-angledoubledown.mjs +0 -5
  576. package/esm2022/icons/angledoubledown/public_api.mjs +0 -2
  577. package/esm2022/icons/angledoubleleft/angledoubleleft.mjs +0 -34
  578. package/esm2022/icons/angledoubleleft/primeng-icons-angledoubleleft.mjs +0 -5
  579. package/esm2022/icons/angledoubleleft/public_api.mjs +0 -2
  580. package/esm2022/icons/angledoubleright/angledoubleright.mjs +0 -34
  581. package/esm2022/icons/angledoubleright/primeng-icons-angledoubleright.mjs +0 -5
  582. package/esm2022/icons/angledoubleright/public_api.mjs +0 -2
  583. package/esm2022/icons/angledoubleup/angledoubleup.mjs +0 -34
  584. package/esm2022/icons/angledoubleup/primeng-icons-angledoubleup.mjs +0 -5
  585. package/esm2022/icons/angledoubleup/public_api.mjs +0 -2
  586. package/esm2022/icons/angledown/angledown.mjs +0 -32
  587. package/esm2022/icons/angledown/primeng-icons-angledown.mjs +0 -5
  588. package/esm2022/icons/angledown/public_api.mjs +0 -2
  589. package/esm2022/icons/angleleft/angleleft.mjs +0 -32
  590. package/esm2022/icons/angleleft/primeng-icons-angleleft.mjs +0 -5
  591. package/esm2022/icons/angleleft/public_api.mjs +0 -2
  592. package/esm2022/icons/angleright/angleright.mjs +0 -32
  593. package/esm2022/icons/angleright/primeng-icons-angleright.mjs +0 -5
  594. package/esm2022/icons/angleright/public_api.mjs +0 -2
  595. package/esm2022/icons/angleup/angleup.mjs +0 -32
  596. package/esm2022/icons/angleup/primeng-icons-angleup.mjs +0 -5
  597. package/esm2022/icons/angleup/public_api.mjs +0 -2
  598. package/esm2022/icons/arrowdown/arrowdown.mjs +0 -53
  599. package/esm2022/icons/arrowdown/primeng-icons-arrowdown.mjs +0 -5
  600. package/esm2022/icons/arrowdown/public_api.mjs +0 -2
  601. package/esm2022/icons/arrowdownleft/arrowdownleft.mjs +0 -32
  602. package/esm2022/icons/arrowdownleft/primeng-icons-arrowdownleft.mjs +0 -5
  603. package/esm2022/icons/arrowdownleft/public_api.mjs +0 -2
  604. package/esm2022/icons/arrowdownright/arrowdownright.mjs +0 -32
  605. package/esm2022/icons/arrowdownright/primeng-icons-arrowdownright.mjs +0 -5
  606. package/esm2022/icons/arrowdownright/public_api.mjs +0 -2
  607. package/esm2022/icons/arrowleft/arrowleft.mjs +0 -53
  608. package/esm2022/icons/arrowleft/primeng-icons-arrowleft.mjs +0 -5
  609. package/esm2022/icons/arrowleft/public_api.mjs +0 -2
  610. package/esm2022/icons/arrowright/arrowright.mjs +0 -34
  611. package/esm2022/icons/arrowright/primeng-icons-arrowright.mjs +0 -5
  612. package/esm2022/icons/arrowright/public_api.mjs +0 -2
  613. package/esm2022/icons/arrowup/arrowup.mjs +0 -53
  614. package/esm2022/icons/arrowup/primeng-icons-arrowup.mjs +0 -5
  615. package/esm2022/icons/arrowup/public_api.mjs +0 -2
  616. package/esm2022/icons/ban/ban.mjs +0 -51
  617. package/esm2022/icons/ban/primeng-icons-ban.mjs +0 -5
  618. package/esm2022/icons/ban/public_api.mjs +0 -2
  619. package/esm2022/icons/bars/bars.mjs +0 -34
  620. package/esm2022/icons/bars/primeng-icons-bars.mjs +0 -5
  621. package/esm2022/icons/bars/public_api.mjs +0 -2
  622. package/esm2022/icons/baseicon/baseicon.mjs +0 -54
  623. package/esm2022/icons/baseicon/primeng-icons-baseicon.mjs +0 -5
  624. package/esm2022/icons/baseicon/public_api.mjs +0 -3
  625. package/esm2022/icons/baseicon/style/baseiconstyle.mjs +0 -57
  626. package/esm2022/icons/blank/blank.mjs +0 -26
  627. package/esm2022/icons/blank/primeng-icons-blank.mjs +0 -5
  628. package/esm2022/icons/blank/public_api.mjs +0 -2
  629. package/esm2022/icons/calendar/calendar.mjs +0 -32
  630. package/esm2022/icons/calendar/primeng-icons-calendar.mjs +0 -5
  631. package/esm2022/icons/calendar/public_api.mjs +0 -2
  632. package/esm2022/icons/caretleft/caretleft.mjs +0 -32
  633. package/esm2022/icons/caretleft/primeng-icons-caretleft.mjs +0 -5
  634. package/esm2022/icons/caretleft/public_api.mjs +0 -2
  635. package/esm2022/icons/caretright/caretright.mjs +0 -32
  636. package/esm2022/icons/caretright/primeng-icons-caretright.mjs +0 -5
  637. package/esm2022/icons/caretright/public_api.mjs +0 -2
  638. package/esm2022/icons/check/check.mjs +0 -32
  639. package/esm2022/icons/check/primeng-icons-check.mjs +0 -5
  640. package/esm2022/icons/check/public_api.mjs +0 -2
  641. package/esm2022/icons/chevrondown/chevrondown.mjs +0 -32
  642. package/esm2022/icons/chevrondown/primeng-icons-chevrondown.mjs +0 -5
  643. package/esm2022/icons/chevrondown/public_api.mjs +0 -2
  644. package/esm2022/icons/chevronleft/chevronleft.mjs +0 -32
  645. package/esm2022/icons/chevronleft/primeng-icons-chevronleft.mjs +0 -5
  646. package/esm2022/icons/chevronleft/public_api.mjs +0 -2
  647. package/esm2022/icons/chevronright/chevronright.mjs +0 -32
  648. package/esm2022/icons/chevronright/primeng-icons-chevronright.mjs +0 -5
  649. package/esm2022/icons/chevronright/public_api.mjs +0 -2
  650. package/esm2022/icons/chevronup/chevronup.mjs +0 -32
  651. package/esm2022/icons/chevronup/primeng-icons-chevronup.mjs +0 -5
  652. package/esm2022/icons/chevronup/public_api.mjs +0 -2
  653. package/esm2022/icons/exclamationtriangle/exclamationtriangle.mjs +0 -59
  654. package/esm2022/icons/exclamationtriangle/primeng-icons-exclamationtriangle.mjs +0 -5
  655. package/esm2022/icons/exclamationtriangle/public_api.mjs +0 -2
  656. package/esm2022/icons/eye/eye.mjs +0 -34
  657. package/esm2022/icons/eye/primeng-icons-eye.mjs +0 -5
  658. package/esm2022/icons/eye/public_api.mjs +0 -2
  659. package/esm2022/icons/eyeslash/eyeslash.mjs +0 -53
  660. package/esm2022/icons/eyeslash/primeng-icons-eyeslash.mjs +0 -5
  661. package/esm2022/icons/eyeslash/public_api.mjs +0 -2
  662. package/esm2022/icons/filter/filter.mjs +0 -51
  663. package/esm2022/icons/filter/primeng-icons-filter.mjs +0 -5
  664. package/esm2022/icons/filter/public_api.mjs +0 -2
  665. package/esm2022/icons/filterslash/filterslash.mjs +0 -53
  666. package/esm2022/icons/filterslash/primeng-icons-filterslash.mjs +0 -5
  667. package/esm2022/icons/filterslash/public_api.mjs +0 -2
  668. package/esm2022/icons/home/home.mjs +0 -53
  669. package/esm2022/icons/home/primeng-icons-home.mjs +0 -5
  670. package/esm2022/icons/home/public_api.mjs +0 -2
  671. package/esm2022/icons/infocircle/infocircle.mjs +0 -53
  672. package/esm2022/icons/infocircle/primeng-icons-infocircle.mjs +0 -5
  673. package/esm2022/icons/infocircle/public_api.mjs +0 -2
  674. package/esm2022/icons/minus/minus.mjs +0 -32
  675. package/esm2022/icons/minus/primeng-icons-minus.mjs +0 -5
  676. package/esm2022/icons/minus/public_api.mjs +0 -2
  677. package/esm2022/icons/pencil/pencil.mjs +0 -51
  678. package/esm2022/icons/pencil/primeng-icons-pencil.mjs +0 -5
  679. package/esm2022/icons/pencil/public_api.mjs +0 -2
  680. package/esm2022/icons/plus/plus.mjs +0 -51
  681. package/esm2022/icons/plus/primeng-icons-plus.mjs +0 -5
  682. package/esm2022/icons/plus/public_api.mjs +0 -2
  683. package/esm2022/icons/primeng-icons.mjs +0 -5
  684. package/esm2022/icons/public_api.mjs +0 -58
  685. package/esm2022/icons/refresh/primeng-icons-refresh.mjs +0 -5
  686. package/esm2022/icons/refresh/public_api.mjs +0 -2
  687. package/esm2022/icons/refresh/refresh.mjs +0 -53
  688. package/esm2022/icons/search/primeng-icons-search.mjs +0 -5
  689. package/esm2022/icons/search/public_api.mjs +0 -2
  690. package/esm2022/icons/search/search.mjs +0 -53
  691. package/esm2022/icons/searchminus/primeng-icons-searchminus.mjs +0 -5
  692. package/esm2022/icons/searchminus/public_api.mjs +0 -2
  693. package/esm2022/icons/searchminus/searchminus.mjs +0 -53
  694. package/esm2022/icons/searchplus/primeng-icons-searchplus.mjs +0 -5
  695. package/esm2022/icons/searchplus/public_api.mjs +0 -2
  696. package/esm2022/icons/searchplus/searchplus.mjs +0 -53
  697. package/esm2022/icons/sortalt/primeng-icons-sortalt.mjs +0 -5
  698. package/esm2022/icons/sortalt/public_api.mjs +0 -2
  699. package/esm2022/icons/sortalt/sortalt.mjs +0 -57
  700. package/esm2022/icons/sortamountdown/primeng-icons-sortamountdown.mjs +0 -5
  701. package/esm2022/icons/sortamountdown/public_api.mjs +0 -2
  702. package/esm2022/icons/sortamountdown/sortamountdown.mjs +0 -51
  703. package/esm2022/icons/sortamountupalt/primeng-icons-sortamountupalt.mjs +0 -5
  704. package/esm2022/icons/sortamountupalt/public_api.mjs +0 -2
  705. package/esm2022/icons/sortamountupalt/sortamountupalt.mjs +0 -51
  706. package/esm2022/icons/spinner/primeng-icons-spinner.mjs +0 -5
  707. package/esm2022/icons/spinner/public_api.mjs +0 -2
  708. package/esm2022/icons/spinner/spinner.mjs +0 -51
  709. package/esm2022/icons/star/primeng-icons-star.mjs +0 -5
  710. package/esm2022/icons/star/public_api.mjs +0 -2
  711. package/esm2022/icons/star/star.mjs +0 -51
  712. package/esm2022/icons/starfill/primeng-icons-starfill.mjs +0 -5
  713. package/esm2022/icons/starfill/public_api.mjs +0 -2
  714. package/esm2022/icons/starfill/starfill.mjs +0 -51
  715. package/esm2022/icons/thlarge/primeng-icons-thlarge.mjs +0 -5
  716. package/esm2022/icons/thlarge/public_api.mjs +0 -2
  717. package/esm2022/icons/thlarge/thlarge.mjs +0 -53
  718. package/esm2022/icons/times/primeng-icons-times.mjs +0 -5
  719. package/esm2022/icons/times/public_api.mjs +0 -2
  720. package/esm2022/icons/times/times.mjs +0 -32
  721. package/esm2022/icons/timescircle/primeng-icons-timescircle.mjs +0 -5
  722. package/esm2022/icons/timescircle/public_api.mjs +0 -2
  723. package/esm2022/icons/timescircle/timescircle.mjs +0 -53
  724. package/esm2022/icons/trash/primeng-icons-trash.mjs +0 -5
  725. package/esm2022/icons/trash/public_api.mjs +0 -2
  726. package/esm2022/icons/trash/trash.mjs +0 -53
  727. package/esm2022/icons/undo/primeng-icons-undo.mjs +0 -5
  728. package/esm2022/icons/undo/public_api.mjs +0 -2
  729. package/esm2022/icons/undo/undo.mjs +0 -53
  730. package/esm2022/icons/upload/primeng-icons-upload.mjs +0 -5
  731. package/esm2022/icons/upload/public_api.mjs +0 -2
  732. package/esm2022/icons/upload/upload.mjs +0 -53
  733. package/esm2022/icons/windowmaximize/primeng-icons-windowmaximize.mjs +0 -5
  734. package/esm2022/icons/windowmaximize/public_api.mjs +0 -2
  735. package/esm2022/icons/windowmaximize/windowmaximize.mjs +0 -53
  736. package/esm2022/icons/windowminimize/primeng-icons-windowminimize.mjs +0 -5
  737. package/esm2022/icons/windowminimize/public_api.mjs +0 -2
  738. package/esm2022/icons/windowminimize/windowminimize.mjs +0 -53
  739. package/esm2022/iftalabel/iftalabel.mjs +0 -49
  740. package/esm2022/iftalabel/primeng-iftalabel.mjs +0 -5
  741. package/esm2022/iftalabel/public_api.mjs +0 -3
  742. package/esm2022/iftalabel/style/iftalabelstyle.mjs +0 -96
  743. package/esm2022/image/image.interface.mjs +0 -2
  744. package/esm2022/image/image.mjs +0 -794
  745. package/esm2022/image/primeng-image.mjs +0 -5
  746. package/esm2022/image/public_api.mjs +0 -4
  747. package/esm2022/image/style/imagestyle.mjs +0 -219
  748. package/esm2022/imagecompare/imagecompare.mjs +0 -178
  749. package/esm2022/imagecompare/primeng-imagecompare.mjs +0 -5
  750. package/esm2022/imagecompare/public_api.mjs +0 -3
  751. package/esm2022/imagecompare/style/imagecomparestyle.mjs +0 -124
  752. package/esm2022/inplace/inplace.interface.mjs +0 -2
  753. package/esm2022/inplace/inplace.mjs +0 -369
  754. package/esm2022/inplace/primeng-inplace.mjs +0 -5
  755. package/esm2022/inplace/public_api.mjs +0 -4
  756. package/esm2022/inplace/style/inplacestyle.mjs +0 -69
  757. package/esm2022/inputgroup/inputgroup.mjs +0 -68
  758. package/esm2022/inputgroup/primeng-inputgroup.mjs +0 -5
  759. package/esm2022/inputgroup/public_api.mjs +0 -3
  760. package/esm2022/inputgroup/style/inputgroupstyle.mjs +0 -145
  761. package/esm2022/inputgroupaddon/inputgroupaddon.mjs +0 -74
  762. package/esm2022/inputgroupaddon/primeng-inputgroupaddon.mjs +0 -5
  763. package/esm2022/inputgroupaddon/public_api.mjs +0 -3
  764. package/esm2022/inputgroupaddon/style/inputgroupaddonstyle.mjs +0 -16
  765. package/esm2022/inputicon/inputicon.mjs +0 -66
  766. package/esm2022/inputicon/primeng-inputicon.mjs +0 -5
  767. package/esm2022/inputicon/public_api.mjs +0 -3
  768. package/esm2022/inputicon/style/inputiconstyle.mjs +0 -16
  769. package/esm2022/inputmask/inputmask.interface.mjs +0 -2
  770. package/esm2022/inputmask/inputmask.mjs +0 -927
  771. package/esm2022/inputmask/primeng-inputmask.mjs +0 -5
  772. package/esm2022/inputmask/public_api.mjs +0 -4
  773. package/esm2022/inputmask/style/inputmaskstyle.mjs +0 -62
  774. package/esm2022/inputnumber/inputnumber.interface.mjs +0 -2
  775. package/esm2022/inputnumber/inputnumber.mjs +0 -1753
  776. package/esm2022/inputnumber/primeng-inputnumber.mjs +0 -5
  777. package/esm2022/inputnumber/public_api.mjs +0 -4
  778. package/esm2022/inputnumber/style/inputnumberstyle.mjs +0 -240
  779. package/esm2022/inputotp/inputotp.mjs +0 -425
  780. package/esm2022/inputotp/primeng-inputotp.mjs +0 -5
  781. package/esm2022/inputotp/public_api.mjs +0 -3
  782. package/esm2022/inputotp/style/inputotpstyle.mjs +0 -60
  783. package/esm2022/inputswitch/inputswitch.interface.mjs +0 -2
  784. package/esm2022/inputswitch/inputswitch.mjs +0 -241
  785. package/esm2022/inputswitch/primeng-inputswitch.mjs +0 -5
  786. package/esm2022/inputswitch/public_api.mjs +0 -4
  787. package/esm2022/inputswitch/style/inputswitchstyle.mjs +0 -130
  788. package/esm2022/inputtext/inputtext.mjs +0 -104
  789. package/esm2022/inputtext/primeng-inputtext.mjs +0 -5
  790. package/esm2022/inputtext/public_api.mjs +0 -3
  791. package/esm2022/inputtext/style/inputtextstyle.mjs +0 -117
  792. package/esm2022/inputtextarea/inputtextarea.mjs +0 -156
  793. package/esm2022/inputtextarea/primeng-inputtextarea.mjs +0 -5
  794. package/esm2022/inputtextarea/public_api.mjs +0 -3
  795. package/esm2022/inputtextarea/style/textareastyle.mjs +0 -107
  796. package/esm2022/keyfilter/keyfilter.interface.mjs +0 -2
  797. package/esm2022/keyfilter/keyfilter.mjs +0 -263
  798. package/esm2022/keyfilter/primeng-keyfilter.mjs +0 -5
  799. package/esm2022/keyfilter/public_api.mjs +0 -3
  800. package/esm2022/knob/knob.mjs +0 -471
  801. package/esm2022/knob/primeng-knob.mjs +0 -5
  802. package/esm2022/knob/public_api.mjs +0 -3
  803. package/esm2022/knob/style/knobstyle.mjs +0 -83
  804. package/esm2022/listbox/listbox.interface.mjs +0 -2
  805. package/esm2022/listbox/listbox.mjs +0 -2103
  806. package/esm2022/listbox/primeng-listbox.mjs +0 -5
  807. package/esm2022/listbox/public_api.mjs +0 -4
  808. package/esm2022/listbox/style/listboxstyle.mjs +0 -206
  809. package/esm2022/megamenu/megamenu.interface.mjs +0 -2
  810. package/esm2022/megamenu/megamenu.mjs +0 -1653
  811. package/esm2022/megamenu/primeng-megamenu.mjs +0 -5
  812. package/esm2022/megamenu/public_api.mjs +0 -4
  813. package/esm2022/megamenu/style/megamenustyle.mjs +0 -487
  814. package/esm2022/menu/menu.mjs +0 -1193
  815. package/esm2022/menu/primeng-menu.mjs +0 -5
  816. package/esm2022/menu/public_api.mjs +0 -3
  817. package/esm2022/menu/style/menustyle.mjs +0 -179
  818. package/esm2022/menubar/menubar.interface.mjs +0 -2
  819. package/esm2022/menubar/menubar.mjs +0 -1519
  820. package/esm2022/menubar/primeng-menubar.mjs +0 -5
  821. package/esm2022/menubar/public_api.mjs +0 -4
  822. package/esm2022/menubar/style/menubarstyle.mjs +0 -375
  823. package/esm2022/message/message.mjs +0 -445
  824. package/esm2022/message/primeng-message.mjs +0 -5
  825. package/esm2022/message/public_api.mjs +0 -3
  826. package/esm2022/message/style/messagestyle.mjs +0 -357
  827. package/esm2022/messages/messages.interface.mjs +0 -2
  828. package/esm2022/messages/messages.mjs +0 -538
  829. package/esm2022/messages/primeng-messages.mjs +0 -5
  830. package/esm2022/messages/public_api.mjs +0 -4
  831. package/esm2022/messages/style/messagesstyle.mjs +0 -229
  832. package/esm2022/metergroup/metergroup.interface.mjs +0 -2
  833. package/esm2022/metergroup/metergroup.mjs +0 -455
  834. package/esm2022/metergroup/primeng-metergroup.mjs +0 -5
  835. package/esm2022/metergroup/public_api.mjs +0 -4
  836. package/esm2022/metergroup/style/metergroupstyle.mjs +0 -169
  837. package/esm2022/multiselect/multiselect.interface.mjs +0 -2
  838. package/esm2022/multiselect/multiselect.mjs +0 -3015
  839. package/esm2022/multiselect/primeng-multiselect.mjs +0 -5
  840. package/esm2022/multiselect/public_api.mjs +0 -4
  841. package/esm2022/multiselect/style/multiselectstyle.mjs +0 -373
  842. package/esm2022/orderlist/orderlist.interface.mjs +0 -2
  843. package/esm2022/orderlist/orderlist.mjs +0 -1176
  844. package/esm2022/orderlist/primeng-orderlist.mjs +0 -5
  845. package/esm2022/orderlist/public_api.mjs +0 -4
  846. package/esm2022/orderlist/style/orderliststyle.mjs +0 -51
  847. package/esm2022/organizationchart/organizationchart.interface.mjs +0 -2
  848. package/esm2022/organizationchart/organizationchart.mjs +0 -607
  849. package/esm2022/organizationchart/primeng-organizationchart.mjs +0 -5
  850. package/esm2022/organizationchart/public_api.mjs +0 -4
  851. package/esm2022/organizationchart/style/organizationchartstyle.mjs +0 -191
  852. package/esm2022/overlay/overlay.mjs +0 -688
  853. package/esm2022/overlay/primeng-overlay.mjs +0 -5
  854. package/esm2022/overlay/public_api.mjs +0 -3
  855. package/esm2022/overlay/style/overlaystyle.mjs +0 -93
  856. package/esm2022/overlaybadge/overlaybadge.mjs +0 -121
  857. package/esm2022/overlaybadge/primeng-overlaybadge.mjs +0 -5
  858. package/esm2022/overlaybadge/public_api.mjs +0 -3
  859. package/esm2022/overlaybadge/style/overlaybadgestyle.mjs +0 -34
  860. package/esm2022/overlaypanel/overlaypanel.mjs +0 -552
  861. package/esm2022/overlaypanel/primeng-overlaypanel.mjs +0 -5
  862. package/esm2022/overlaypanel/public_api.mjs +0 -3
  863. package/esm2022/overlaypanel/style/popoverstyle.mjs +0 -119
  864. package/esm2022/paginator/paginator.interface.mjs +0 -2
  865. package/esm2022/paginator/paginator.mjs +0 -925
  866. package/esm2022/paginator/primeng-paginator.mjs +0 -5
  867. package/esm2022/paginator/public_api.mjs +0 -4
  868. package/esm2022/paginator/style/paginatorstyle.mjs +0 -243
  869. package/esm2022/panel/panel.mjs +0 -645
  870. package/esm2022/panel/primeng-panel.mjs +0 -5
  871. package/esm2022/panel/public_api.mjs +0 -3
  872. package/esm2022/panel/style/panelstyle.mjs +0 -120
  873. package/esm2022/panelmenu/panelmenu.interface.mjs +0 -2
  874. package/esm2022/panelmenu/panelmenu.mjs +0 -1651
  875. package/esm2022/panelmenu/primeng-panelmenu.mjs +0 -5
  876. package/esm2022/panelmenu/public_api.mjs +0 -4
  877. package/esm2022/panelmenu/style/panelmenustyle.mjs +0 -291
  878. package/esm2022/password/password.mjs +0 -1240
  879. package/esm2022/password/primeng-password.mjs +0 -5
  880. package/esm2022/password/public_api.mjs +0 -3
  881. package/esm2022/password/style/passwordstyle.mjs +0 -182
  882. package/esm2022/picklist/picklist.interface.mjs +0 -2
  883. package/esm2022/picklist/picklist.mjs +0 -2426
  884. package/esm2022/picklist/primeng-picklist.mjs +0 -5
  885. package/esm2022/picklist/public_api.mjs +0 -4
  886. package/esm2022/picklist/style/pickliststyle.mjs +0 -79
  887. package/esm2022/popover/popover.mjs +0 -535
  888. package/esm2022/popover/primeng-popover.mjs +0 -5
  889. package/esm2022/popover/public_api.mjs +0 -3
  890. package/esm2022/popover/style/popoverstyle.mjs +0 -99
  891. package/esm2022/primeng.mjs +0 -5
  892. package/esm2022/progressbar/primeng-progressbar.mjs +0 -5
  893. package/esm2022/progressbar/progressbar.mjs +0 -215
  894. package/esm2022/progressbar/public_api.mjs +0 -3
  895. package/esm2022/progressbar/style/progressbarstyle.mjs +0 -165
  896. package/esm2022/progressspinner/primeng-progressspinner.mjs +0 -5
  897. package/esm2022/progressspinner/progressspinner.mjs +0 -105
  898. package/esm2022/progressspinner/public_api.mjs +0 -3
  899. package/esm2022/progressspinner/style/progressspinnerstyle.mjs +0 -115
  900. package/esm2022/public_api.mjs +0 -2
  901. package/esm2022/radiobutton/primeng-radiobutton.mjs +0 -5
  902. package/esm2022/radiobutton/public_api.mjs +0 -4
  903. package/esm2022/radiobutton/radiobutton.interface.mjs +0 -2
  904. package/esm2022/radiobutton/radiobutton.mjs +0 -356
  905. package/esm2022/radiobutton/style/radiobuttonstyle.mjs +0 -196
  906. package/esm2022/rating/primeng-rating.mjs +0 -5
  907. package/esm2022/rating/public_api.mjs +0 -4
  908. package/esm2022/rating/rating.interface.mjs +0 -2
  909. package/esm2022/rating/rating.mjs +0 -449
  910. package/esm2022/rating/style/ratingstyle.mjs +0 -103
  911. package/esm2022/ripple/primeng-ripple.mjs +0 -5
  912. package/esm2022/ripple/public_api.mjs +0 -3
  913. package/esm2022/ripple/ripple.mjs +0 -134
  914. package/esm2022/ripple/style/ripplestyle.mjs +0 -63
  915. package/esm2022/scroller/primeng-scroller.mjs +0 -5
  916. package/esm2022/scroller/public_api.mjs +0 -4
  917. package/esm2022/scroller/scroller.interface.mjs +0 -2
  918. package/esm2022/scroller/scroller.mjs +0 -1300
  919. package/esm2022/scroller/style/scrollerstyle.mjs +0 -104
  920. package/esm2022/scrollpanel/primeng-scrollpanel.mjs +0 -5
  921. package/esm2022/scrollpanel/public_api.mjs +0 -4
  922. package/esm2022/scrollpanel/scrollpanel.interface.mjs +0 -2
  923. package/esm2022/scrollpanel/scrollpanel.mjs +0 -525
  924. package/esm2022/scrollpanel/style/scrollpanelstyle.mjs +0 -120
  925. package/esm2022/scrolltop/primeng-scrolltop.mjs +0 -5
  926. package/esm2022/scrolltop/public_api.mjs +0 -4
  927. package/esm2022/scrolltop/scrolltop.interface.mjs +0 -2
  928. package/esm2022/scrolltop/scrolltop.mjs +0 -343
  929. package/esm2022/scrolltop/style/scrolltopstyle.mjs +0 -77
  930. package/esm2022/select/primeng-select.mjs +0 -5
  931. package/esm2022/select/public_api.mjs +0 -4
  932. package/esm2022/select/select.interface.mjs +0 -2
  933. package/esm2022/select/select.mjs +0 -2697
  934. package/esm2022/select/style/selectstyle.mjs +0 -365
  935. package/esm2022/selectbutton/primeng-selectbutton.mjs +0 -5
  936. package/esm2022/selectbutton/public_api.mjs +0 -4
  937. package/esm2022/selectbutton/selectbutton.interface.mjs +0 -2
  938. package/esm2022/selectbutton/selectbutton.mjs +0 -388
  939. package/esm2022/selectbutton/style/selectbuttonstyle.mjs +0 -73
  940. package/esm2022/sidebar/primeng-sidebar.mjs +0 -5
  941. package/esm2022/sidebar/public_api.mjs +0 -4
  942. package/esm2022/sidebar/sidebar.interface.mjs +0 -2
  943. package/esm2022/sidebar/sidebar.mjs +0 -600
  944. package/esm2022/sidebar/style/drawerstyle.mjs +0 -174
  945. package/esm2022/skeleton/primeng-skeleton.mjs +0 -5
  946. package/esm2022/skeleton/public_api.mjs +0 -3
  947. package/esm2022/skeleton/skeleton.mjs +0 -121
  948. package/esm2022/skeleton/style/skeletonstyle.mjs +0 -93
  949. package/esm2022/slider/primeng-slider.mjs +0 -5
  950. package/esm2022/slider/public_api.mjs +0 -4
  951. package/esm2022/slider/slider.interface.mjs +0 -2
  952. package/esm2022/slider/slider.mjs +0 -820
  953. package/esm2022/slider/style/sliderstyle.mjs +0 -141
  954. package/esm2022/speeddial/primeng-speeddial.mjs +0 -5
  955. package/esm2022/speeddial/public_api.mjs +0 -4
  956. package/esm2022/speeddial/speeddial.interface.mjs +0 -2
  957. package/esm2022/speeddial/speeddial.mjs +0 -891
  958. package/esm2022/speeddial/style/speeddialstyle.mjs +0 -167
  959. package/esm2022/splitbutton/primeng-splitbutton.mjs +0 -5
  960. package/esm2022/splitbutton/public_api.mjs +0 -4
  961. package/esm2022/splitbutton/splitbutton.interface.mjs +0 -2
  962. package/esm2022/splitbutton/splitbutton.mjs +0 -602
  963. package/esm2022/splitbutton/style/splitbuttonstyle.mjs +0 -100
  964. package/esm2022/splitter/primeng-splitter.mjs +0 -5
  965. package/esm2022/splitter/public_api.mjs +0 -4
  966. package/esm2022/splitter/splitter.interface.mjs +0 -2
  967. package/esm2022/splitter/splitter.mjs +0 -626
  968. package/esm2022/splitter/style/splitterstyle.mjs +0 -127
  969. package/esm2022/stepper/primeng-stepper.mjs +0 -5
  970. package/esm2022/stepper/public_api.mjs +0 -3
  971. package/esm2022/stepper/stepper.mjs +0 -535
  972. package/esm2022/stepper/style/stepperstyle.mjs +0 -228
  973. package/esm2022/steps/primeng-steps.mjs +0 -5
  974. package/esm2022/steps/public_api.mjs +0 -3
  975. package/esm2022/steps/steps.mjs +0 -405
  976. package/esm2022/steps/style/stepsstyle.mjs +0 -180
  977. package/esm2022/styleclass/primeng-styleclass.mjs +0 -5
  978. package/esm2022/styleclass/public_api.mjs +0 -2
  979. package/esm2022/styleclass/styleclass.mjs +0 -315
  980. package/esm2022/table/columnfilter.interface.mjs +0 -2
  981. package/esm2022/table/primeng-table.mjs +0 -5
  982. package/esm2022/table/public_api.mjs +0 -5
  983. package/esm2022/table/style/tablestyle.mjs +0 -906
  984. package/esm2022/table/table.interface.mjs +0 -2
  985. package/esm2022/table/table.mjs +0 -7840
  986. package/esm2022/tabmenu/primeng-tabmenu.mjs +0 -5
  987. package/esm2022/tabmenu/public_api.mjs +0 -4
  988. package/esm2022/tabmenu/style/tabmenustyle.mjs +0 -192
  989. package/esm2022/tabmenu/tabmenu.interface.mjs +0 -2
  990. package/esm2022/tabmenu/tabmenu.mjs +0 -757
  991. package/esm2022/tabs/primeng-tabs.mjs +0 -5
  992. package/esm2022/tabs/public_api.mjs +0 -7
  993. package/esm2022/tabs/style/tabsstyle.mjs +0 -211
  994. package/esm2022/tabs/tab.mjs +0 -175
  995. package/esm2022/tabs/tablist.mjs +0 -305
  996. package/esm2022/tabs/tabpanel.mjs +0 -60
  997. package/esm2022/tabs/tabpanels.mjs +0 -38
  998. package/esm2022/tabs/tabs.mjs +0 -105
  999. package/esm2022/tabview/primeng-tabview.mjs +0 -5
  1000. package/esm2022/tabview/public_api.mjs +0 -4
  1001. package/esm2022/tabview/style/tabsstyle.mjs +0 -211
  1002. package/esm2022/tabview/tabview.interface.mjs +0 -2
  1003. package/esm2022/tabview/tabview.mjs +0 -1141
  1004. package/esm2022/tag/primeng-tag.mjs +0 -5
  1005. package/esm2022/tag/public_api.mjs +0 -4
  1006. package/esm2022/tag/style/tagstyle.mjs +0 -108
  1007. package/esm2022/tag/tag.interface.mjs +0 -2
  1008. package/esm2022/tag/tag.mjs +0 -192
  1009. package/esm2022/terminal/primeng-terminal.mjs +0 -5
  1010. package/esm2022/terminal/public_api.mjs +0 -4
  1011. package/esm2022/terminal/style/terminalstyle.mjs +0 -113
  1012. package/esm2022/terminal/terminal.mjs +0 -195
  1013. package/esm2022/terminal/terminalservice.mjs +0 -25
  1014. package/esm2022/textarea/primeng-textarea.mjs +0 -5
  1015. package/esm2022/textarea/public_api.mjs +0 -3
  1016. package/esm2022/textarea/style/textareastyle.mjs +0 -120
  1017. package/esm2022/textarea/textarea.mjs +0 -165
  1018. package/esm2022/tieredmenu/primeng-tieredmenu.mjs +0 -5
  1019. package/esm2022/tieredmenu/public_api.mjs +0 -4
  1020. package/esm2022/tieredmenu/style/tieredmenustyle.mjs +0 -276
  1021. package/esm2022/tieredmenu/tieredmenu.interface.mjs +0 -2
  1022. package/esm2022/tieredmenu/tieredmenu.mjs +0 -1467
  1023. package/esm2022/timeline/primeng-timeline.mjs +0 -5
  1024. package/esm2022/timeline/public_api.mjs +0 -4
  1025. package/esm2022/timeline/style/timelinestyle.mjs +0 -217
  1026. package/esm2022/timeline/timeline.interface.mjs +0 -2
  1027. package/esm2022/timeline/timeline.mjs +0 -247
  1028. package/esm2022/toast/primeng-toast.mjs +0 -5
  1029. package/esm2022/toast/public_api.mjs +0 -4
  1030. package/esm2022/toast/style/toaststyle.mjs +0 -351
  1031. package/esm2022/toast/toast.interface.mjs +0 -2
  1032. package/esm2022/toast/toast.mjs +0 -760
  1033. package/esm2022/togglebutton/primeng-togglebutton.mjs +0 -5
  1034. package/esm2022/togglebutton/public_api.mjs +0 -3
  1035. package/esm2022/togglebutton/style/togglebuttonstyle.mjs +0 -170
  1036. package/esm2022/togglebutton/togglebutton.interface.mjs +0 -2
  1037. package/esm2022/togglebutton/togglebutton.mjs +0 -368
  1038. package/esm2022/toggleswitch/primeng-toggleswitch.mjs +0 -5
  1039. package/esm2022/toggleswitch/public_api.mjs +0 -4
  1040. package/esm2022/toggleswitch/style/toggleswitchstyle.mjs +0 -165
  1041. package/esm2022/toggleswitch/toggleswitch.interface.mjs +0 -2
  1042. package/esm2022/toggleswitch/toggleswitch.mjs +0 -297
  1043. package/esm2022/toolbar/primeng-toolbar.mjs +0 -5
  1044. package/esm2022/toolbar/public_api.mjs +0 -4
  1045. package/esm2022/toolbar/style/toolbarstyle.mjs +0 -69
  1046. package/esm2022/toolbar/toolbar.interface.mjs +0 -2
  1047. package/esm2022/toolbar/toolbar.mjs +0 -198
  1048. package/esm2022/tooltip/primeng-tooltip.mjs +0 -5
  1049. package/esm2022/tooltip/public_api.mjs +0 -3
  1050. package/esm2022/tooltip/style/tooltipstyle.mjs +0 -113
  1051. package/esm2022/tooltip/tooltip.mjs +0 -680
  1052. package/esm2022/tree/primeng-tree.mjs +0 -5
  1053. package/esm2022/tree/public_api.mjs +0 -4
  1054. package/esm2022/tree/style/treestyle.mjs +0 -333
  1055. package/esm2022/tree/tree.interface.mjs +0 -2
  1056. package/esm2022/tree/tree.mjs +0 -2304
  1057. package/esm2022/treeselect/primeng-treeselect.mjs +0 -5
  1058. package/esm2022/treeselect/public_api.mjs +0 -4
  1059. package/esm2022/treeselect/style/treeselectstyle.mjs +0 -271
  1060. package/esm2022/treeselect/treeselect.interface.mjs +0 -2
  1061. package/esm2022/treeselect/treeselect.mjs +0 -1439
  1062. package/esm2022/treetable/primeng-treetable.mjs +0 -5
  1063. package/esm2022/treetable/public_api.mjs +0 -4
  1064. package/esm2022/treetable/style/treetablestyle.mjs +0 -621
  1065. package/esm2022/treetable/treetable.interface.mjs +0 -2
  1066. package/esm2022/treetable/treetable.mjs +0 -4661
  1067. package/esm2022/ts-helpers/primeng-ts-helpers.mjs +0 -5
  1068. package/esm2022/ts-helpers/public_api.mjs +0 -2
  1069. package/esm2022/ts-helpers/ts-helpers.mjs +0 -2
  1070. package/esm2022/usestyle/primeng-usestyle.mjs +0 -5
  1071. package/esm2022/usestyle/public_api.mjs +0 -2
  1072. package/esm2022/usestyle/usestyle.mjs +0 -44
  1073. package/esm2022/utils/inpututils.mjs +0 -7
  1074. package/esm2022/utils/objectutils.mjs +0 -276
  1075. package/esm2022/utils/primeng-utils.mjs +0 -5
  1076. package/esm2022/utils/public_api.mjs +0 -6
  1077. package/esm2022/utils/uniquecomponentid.mjs +0 -6
  1078. package/esm2022/utils/zindexutils.mjs +0 -35
@@ -1,3015 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { booleanAttribute, ChangeDetectionStrategy, Component, computed, ContentChild, ContentChildren, effect, EventEmitter, forwardRef, HostBinding, inject, Input, NgModule, numberAttribute, Output, signal, ViewChild, ViewEncapsulation } from '@angular/core';
3
- import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import { deepEquals, equals, findLastIndex, findSingle, focus, getFirstFocusableElement, getFocusableElements, getLastFocusableElement, hasClass, isArray, isHidden, isNotEmpty, isObject, isPrintableCharacter, resolveFieldData, unblockBodyScroll, uuid } from '@primeuix/utils';
5
- import { Footer, Header, PrimeTemplate, SharedModule, TranslationKeys } from 'primeng/api';
6
- import { AutoFocus } from 'primeng/autofocus';
7
- import { BaseComponent } from 'primeng/basecomponent';
8
- import { Checkbox } from 'primeng/checkbox';
9
- import { Chip } from 'primeng/chip';
10
- import { DomHandler } from 'primeng/dom';
11
- import { IconField } from 'primeng/iconfield';
12
- import { CheckIcon, ChevronDownIcon, SearchIcon, TimesIcon } from 'primeng/icons';
13
- import { InputIcon } from 'primeng/inputicon';
14
- import { InputText } from 'primeng/inputtext';
15
- import { Overlay } from 'primeng/overlay';
16
- import { Ripple } from 'primeng/ripple';
17
- import { Scroller } from 'primeng/scroller';
18
- import { Tooltip } from 'primeng/tooltip';
19
- import { MultiSelectStyle } from './style/multiselectstyle';
20
- import * as i0 from "@angular/core";
21
- import * as i1 from "@angular/common";
22
- import * as i2 from "@angular/forms";
23
- import * as i3 from "primeng/api";
24
- const _c0 = a0 => ({ height: a0 });
25
- const _c1 = (a0, a1) => ({ "p-multiselect-option": true, "p-disabled": a0, "p-focus": a1 });
26
- const _c2 = a0 => ({ $implicit: a0 });
27
- const _c3 = (a0, a1) => ({ checked: a0, class: a1 });
28
- function MultiSelectItem_ng_container_2_ng_template_1_0_ng_template_0_Template(rf, ctx) { }
29
- function MultiSelectItem_ng_container_2_ng_template_1_0_Template(rf, ctx) { if (rf & 1) {
30
- i0.ɵɵtemplate(0, MultiSelectItem_ng_container_2_ng_template_1_0_ng_template_0_Template, 0, 0, "ng-template");
31
- } }
32
- function MultiSelectItem_ng_container_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
33
- i0.ɵɵtemplate(0, MultiSelectItem_ng_container_2_ng_template_1_0_Template, 1, 0, null, 4);
34
- } if (rf & 2) {
35
- const klass_r1 = ctx.class;
36
- const ctx_r1 = i0.ɵɵnextContext(2);
37
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.itemCheckboxIconTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction2(2, _c3, ctx_r1.selected, klass_r1));
38
- } }
39
- function MultiSelectItem_ng_container_2_Template(rf, ctx) { if (rf & 1) {
40
- i0.ɵɵelementContainerStart(0);
41
- i0.ɵɵtemplate(1, MultiSelectItem_ng_container_2_ng_template_1_Template, 1, 5, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
42
- i0.ɵɵelementContainerEnd();
43
- } }
44
- function MultiSelectItem_span_3_Template(rf, ctx) { if (rf & 1) {
45
- i0.ɵɵelementStart(0, "span");
46
- i0.ɵɵtext(1);
47
- i0.ɵɵelementEnd();
48
- } if (rf & 2) {
49
- let tmp_1_0;
50
- const ctx_r1 = i0.ɵɵnextContext();
51
- i0.ɵɵadvance();
52
- i0.ɵɵtextInterpolate((tmp_1_0 = ctx_r1.label) !== null && tmp_1_0 !== undefined ? tmp_1_0 : "empty");
53
- } }
54
- function MultiSelectItem_ng_container_4_Template(rf, ctx) { if (rf & 1) {
55
- i0.ɵɵelementContainer(0);
56
- } }
57
- const _c4 = ["item"];
58
- const _c5 = ["group"];
59
- const _c6 = ["loader"];
60
- const _c7 = ["header"];
61
- const _c8 = ["filter"];
62
- const _c9 = ["footer"];
63
- const _c10 = ["emptyfilter"];
64
- const _c11 = ["empty"];
65
- const _c12 = ["selecteditems"];
66
- const _c13 = ["checkicon"];
67
- const _c14 = ["loadingicon"];
68
- const _c15 = ["filtericon"];
69
- const _c16 = ["removetokenicon"];
70
- const _c17 = ["chipicon"];
71
- const _c18 = ["clearicon"];
72
- const _c19 = ["dropdownicon"];
73
- const _c20 = ["itemcheckboxicon"];
74
- const _c21 = ["headercheckboxicon"];
75
- const _c22 = ["overlay"];
76
- const _c23 = ["filterInput"];
77
- const _c24 = ["focusInput"];
78
- const _c25 = ["items"];
79
- const _c26 = ["scroller"];
80
- const _c27 = ["lastHiddenFocusableEl"];
81
- const _c28 = ["firstHiddenFocusableEl"];
82
- const _c29 = ["headerCheckbox"];
83
- const _c30 = [[["p-header"]], [["p-footer"]]];
84
- const _c31 = ["p-header", "p-footer"];
85
- const _c32 = (a0, a1) => ({ $implicit: a0, removeChip: a1 });
86
- const _c33 = () => ({ class: "p-multiselect-chip-icon" });
87
- const _c34 = a0 => ({ options: a0 });
88
- const _c35 = (a0, a1, a2) => ({ checked: a0, partialSelected: a1, class: a2 });
89
- const _c36 = (a0, a1) => ({ $implicit: a0, options: a1 });
90
- const _c37 = () => ({});
91
- function MultiSelect_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
92
- i0.ɵɵelementContainerStart(0);
93
- i0.ɵɵtext(1);
94
- i0.ɵɵelementContainerEnd();
95
- } if (rf & 2) {
96
- const ctx_r1 = i0.ɵɵnextContext(2);
97
- i0.ɵɵadvance();
98
- i0.ɵɵtextInterpolate(ctx_r1.label() || "empty");
99
- } }
100
- function MultiSelect_ng_container_5_ng_container_2_div_1_ng_container_3_ng_template_1_ng_container_0_span_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
101
- i0.ɵɵelementContainer(0);
102
- } }
103
- function MultiSelect_ng_container_5_ng_container_2_div_1_ng_container_3_ng_template_1_ng_container_0_span_1_Template(rf, ctx) { if (rf & 1) {
104
- const _r5 = i0.ɵɵgetCurrentView();
105
- i0.ɵɵelementStart(0, "span", 29);
106
- i0.ɵɵlistener("click", function MultiSelect_ng_container_5_ng_container_2_div_1_ng_container_3_ng_template_1_ng_container_0_span_1_Template_span_click_0_listener($event) { i0.ɵɵrestoreView(_r5); const item_r4 = i0.ɵɵnextContext(4).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.removeOption(item_r4, $event)); });
107
- i0.ɵɵtemplate(1, MultiSelect_ng_container_5_ng_container_2_div_1_ng_container_3_ng_template_1_ng_container_0_span_1_ng_container_1_Template, 1, 0, "ng-container", 21);
108
- i0.ɵɵelementEnd();
109
- } if (rf & 2) {
110
- const ctx_r1 = i0.ɵɵnextContext(7);
111
- i0.ɵɵattribute("data-pc-section", "clearicon")("aria-hidden", true);
112
- i0.ɵɵadvance();
113
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.chipIconTemplate || ctx_r1._chipIconTemplate || ctx_r1.removeTokenIconTemplate || ctx_r1._removeTokenIconTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction0(4, _c33));
114
- } }
115
- function MultiSelect_ng_container_5_ng_container_2_div_1_ng_container_3_ng_template_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {
116
- i0.ɵɵelementContainerStart(0);
117
- i0.ɵɵtemplate(1, MultiSelect_ng_container_5_ng_container_2_div_1_ng_container_3_ng_template_1_ng_container_0_span_1_Template, 2, 5, "span", 28);
118
- i0.ɵɵelementContainerEnd();
119
- } if (rf & 2) {
120
- const ctx_r1 = i0.ɵɵnextContext(6);
121
- i0.ɵɵadvance();
122
- i0.ɵɵproperty("ngIf", ctx_r1.chipIconTemplate || ctx_r1._chipIconTemplate || ctx_r1.removeTokenIconTemplate || ctx_r1._removeTokenIconTemplate);
123
- } }
124
- function MultiSelect_ng_container_5_ng_container_2_div_1_ng_container_3_ng_template_1_Template(rf, ctx) { if (rf & 1) {
125
- i0.ɵɵtemplate(0, MultiSelect_ng_container_5_ng_container_2_div_1_ng_container_3_ng_template_1_ng_container_0_Template, 2, 1, "ng-container", 20);
126
- } if (rf & 2) {
127
- const ctx_r1 = i0.ɵɵnextContext(5);
128
- i0.ɵɵproperty("ngIf", !ctx_r1.disabled);
129
- } }
130
- function MultiSelect_ng_container_5_ng_container_2_div_1_ng_container_3_Template(rf, ctx) { if (rf & 1) {
131
- i0.ɵɵelementContainerStart(0);
132
- i0.ɵɵtemplate(1, MultiSelect_ng_container_5_ng_container_2_div_1_ng_container_3_ng_template_1_Template, 1, 1, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
133
- i0.ɵɵelementContainerEnd();
134
- } }
135
- function MultiSelect_ng_container_5_ng_container_2_div_1_Template(rf, ctx) { if (rf & 1) {
136
- const _r3 = i0.ɵɵgetCurrentView();
137
- i0.ɵɵelementStart(0, "div", 26, 4)(2, "p-chip", 27);
138
- i0.ɵɵlistener("onRemove", function MultiSelect_ng_container_5_ng_container_2_div_1_Template_p_chip_onRemove_2_listener($event) { const item_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.removeOption(item_r4, $event)); });
139
- i0.ɵɵtemplate(3, MultiSelect_ng_container_5_ng_container_2_div_1_ng_container_3_Template, 3, 0, "ng-container", 20);
140
- i0.ɵɵelementEnd()();
141
- } if (rf & 2) {
142
- const item_r4 = ctx.$implicit;
143
- const ctx_r1 = i0.ɵɵnextContext(3);
144
- i0.ɵɵadvance(2);
145
- i0.ɵɵproperty("label", ctx_r1.getLabelByValue(item_r4))("removable", true)("removeIcon", ctx_r1.chipIcon);
146
- i0.ɵɵadvance();
147
- i0.ɵɵproperty("ngIf", ctx_r1.chipIconTemplate || ctx_r1._chipIconTemplate || ctx_r1.removeTokenIconTemplate || ctx_r1._removeTokenIconTemplate);
148
- } }
149
- function MultiSelect_ng_container_5_ng_container_2_ng_container_2_Template(rf, ctx) { if (rf & 1) {
150
- i0.ɵɵelementContainerStart(0);
151
- i0.ɵɵtext(1);
152
- i0.ɵɵelementContainerEnd();
153
- } if (rf & 2) {
154
- const ctx_r1 = i0.ɵɵnextContext(3);
155
- i0.ɵɵadvance();
156
- i0.ɵɵtextInterpolate(ctx_r1.placeholder() || ctx_r1.defaultLabel || "empty");
157
- } }
158
- function MultiSelect_ng_container_5_ng_container_2_Template(rf, ctx) { if (rf & 1) {
159
- i0.ɵɵelementContainerStart(0);
160
- i0.ɵɵtemplate(1, MultiSelect_ng_container_5_ng_container_2_div_1_Template, 4, 4, "div", 25)(2, MultiSelect_ng_container_5_ng_container_2_ng_container_2_Template, 2, 1, "ng-container", 20);
161
- i0.ɵɵelementContainerEnd();
162
- } if (rf & 2) {
163
- const ctx_r1 = i0.ɵɵnextContext(2);
164
- i0.ɵɵadvance();
165
- i0.ɵɵproperty("ngForOf", ctx_r1.chipSelectedItems());
166
- i0.ɵɵadvance();
167
- i0.ɵɵproperty("ngIf", !ctx_r1.modelValue() || ctx_r1.modelValue().length === 0);
168
- } }
169
- function MultiSelect_ng_container_5_Template(rf, ctx) { if (rf & 1) {
170
- i0.ɵɵelementContainerStart(0);
171
- i0.ɵɵtemplate(1, MultiSelect_ng_container_5_ng_container_1_Template, 2, 1, "ng-container", 20)(2, MultiSelect_ng_container_5_ng_container_2_Template, 3, 2, "ng-container", 20);
172
- i0.ɵɵelementContainerEnd();
173
- } if (rf & 2) {
174
- const ctx_r1 = i0.ɵɵnextContext();
175
- i0.ɵɵadvance();
176
- i0.ɵɵproperty("ngIf", ctx_r1.display === "comma");
177
- i0.ɵɵadvance();
178
- i0.ɵɵproperty("ngIf", ctx_r1.display === "chip");
179
- } }
180
- function MultiSelect_ng_container_6_Template(rf, ctx) { if (rf & 1) {
181
- i0.ɵɵelementContainer(0);
182
- } }
183
- function MultiSelect_ng_container_7_TimesIcon_1_Template(rf, ctx) { if (rf & 1) {
184
- const _r6 = i0.ɵɵgetCurrentView();
185
- i0.ɵɵelementStart(0, "TimesIcon", 31);
186
- i0.ɵɵlistener("click", function MultiSelect_ng_container_7_TimesIcon_1_Template_TimesIcon_click_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.clear($event)); });
187
- i0.ɵɵelementEnd();
188
- } if (rf & 2) {
189
- i0.ɵɵattribute("data-pc-section", "clearicon")("aria-hidden", true);
190
- } }
191
- function MultiSelect_ng_container_7_span_2_1_ng_template_0_Template(rf, ctx) { }
192
- function MultiSelect_ng_container_7_span_2_1_Template(rf, ctx) { if (rf & 1) {
193
- i0.ɵɵtemplate(0, MultiSelect_ng_container_7_span_2_1_ng_template_0_Template, 0, 0, "ng-template");
194
- } }
195
- function MultiSelect_ng_container_7_span_2_Template(rf, ctx) { if (rf & 1) {
196
- const _r7 = i0.ɵɵgetCurrentView();
197
- i0.ɵɵelementStart(0, "span", 31);
198
- i0.ɵɵlistener("click", function MultiSelect_ng_container_7_span_2_Template_span_click_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.clear($event)); });
199
- i0.ɵɵtemplate(1, MultiSelect_ng_container_7_span_2_1_Template, 1, 0, null, 32);
200
- i0.ɵɵelementEnd();
201
- } if (rf & 2) {
202
- const ctx_r1 = i0.ɵɵnextContext(2);
203
- i0.ɵɵattribute("data-pc-section", "clearicon")("aria-hidden", true);
204
- i0.ɵɵadvance();
205
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.clearIconTemplate || ctx_r1._clearIconTemplate);
206
- } }
207
- function MultiSelect_ng_container_7_Template(rf, ctx) { if (rf & 1) {
208
- i0.ɵɵelementContainerStart(0);
209
- i0.ɵɵtemplate(1, MultiSelect_ng_container_7_TimesIcon_1_Template, 1, 2, "TimesIcon", 30)(2, MultiSelect_ng_container_7_span_2_Template, 2, 3, "span", 30);
210
- i0.ɵɵelementContainerEnd();
211
- } if (rf & 2) {
212
- const ctx_r1 = i0.ɵɵnextContext();
213
- i0.ɵɵadvance();
214
- i0.ɵɵproperty("ngIf", !ctx_r1.clearIconTemplate && !ctx_r1._clearIconTemplate);
215
- i0.ɵɵadvance();
216
- i0.ɵɵproperty("ngIf", ctx_r1.clearIconTemplate || ctx_r1._clearIconTemplate);
217
- } }
218
- function MultiSelect_ng_container_9_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
219
- i0.ɵɵelementContainer(0);
220
- } }
221
- function MultiSelect_ng_container_9_ng_container_1_Template(rf, ctx) { if (rf & 1) {
222
- i0.ɵɵelementContainerStart(0);
223
- i0.ɵɵtemplate(1, MultiSelect_ng_container_9_ng_container_1_ng_container_1_Template, 1, 0, "ng-container", 32);
224
- i0.ɵɵelementContainerEnd();
225
- } if (rf & 2) {
226
- const ctx_r1 = i0.ɵɵnextContext(2);
227
- i0.ɵɵadvance();
228
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.loadingIconTemplate || ctx_r1._loadingIconTemplate);
229
- } }
230
- function MultiSelect_ng_container_9_ng_container_2_span_1_Template(rf, ctx) { if (rf & 1) {
231
- i0.ɵɵelement(0, "span", 35);
232
- } if (rf & 2) {
233
- const ctx_r1 = i0.ɵɵnextContext(3);
234
- i0.ɵɵproperty("ngClass", "p-multiselect-loading-icon pi-spin " + ctx_r1.loadingIcon);
235
- } }
236
- function MultiSelect_ng_container_9_ng_container_2_span_2_Template(rf, ctx) { if (rf & 1) {
237
- i0.ɵɵelement(0, "span", 36);
238
- } if (rf & 2) {
239
- i0.ɵɵclassMap("p-multiselect-loading-icon pi pi-spinner pi-spin");
240
- } }
241
- function MultiSelect_ng_container_9_ng_container_2_Template(rf, ctx) { if (rf & 1) {
242
- i0.ɵɵelementContainerStart(0);
243
- i0.ɵɵtemplate(1, MultiSelect_ng_container_9_ng_container_2_span_1_Template, 1, 1, "span", 33)(2, MultiSelect_ng_container_9_ng_container_2_span_2_Template, 1, 2, "span", 34);
244
- i0.ɵɵelementContainerEnd();
245
- } if (rf & 2) {
246
- const ctx_r1 = i0.ɵɵnextContext(2);
247
- i0.ɵɵadvance();
248
- i0.ɵɵproperty("ngIf", ctx_r1.loadingIcon);
249
- i0.ɵɵadvance();
250
- i0.ɵɵproperty("ngIf", !ctx_r1.loadingIcon);
251
- } }
252
- function MultiSelect_ng_container_9_Template(rf, ctx) { if (rf & 1) {
253
- i0.ɵɵelementContainerStart(0);
254
- i0.ɵɵtemplate(1, MultiSelect_ng_container_9_ng_container_1_Template, 2, 1, "ng-container", 20)(2, MultiSelect_ng_container_9_ng_container_2_Template, 3, 2, "ng-container", 20);
255
- i0.ɵɵelementContainerEnd();
256
- } if (rf & 2) {
257
- const ctx_r1 = i0.ɵɵnextContext();
258
- i0.ɵɵadvance();
259
- i0.ɵɵproperty("ngIf", ctx_r1.loadingIconTemplate || ctx_r1._loadingIconTemplate);
260
- i0.ɵɵadvance();
261
- i0.ɵɵproperty("ngIf", !ctx_r1.loadingIconTemplate && !ctx_r1._loadingIconTemplate);
262
- } }
263
- function MultiSelect_ng_template_10_ng_container_0_span_1_Template(rf, ctx) { if (rf & 1) {
264
- i0.ɵɵelement(0, "span", 40);
265
- } if (rf & 2) {
266
- const ctx_r1 = i0.ɵɵnextContext(3);
267
- i0.ɵɵproperty("ngClass", ctx_r1.dropdownIcon);
268
- i0.ɵɵattribute("data-pc-section", "triggericon")("aria-hidden", true);
269
- } }
270
- function MultiSelect_ng_template_10_ng_container_0_ChevronDownIcon_2_Template(rf, ctx) { if (rf & 1) {
271
- i0.ɵɵelement(0, "ChevronDownIcon", 41);
272
- } if (rf & 2) {
273
- i0.ɵɵproperty("styleClass", "p-multiselect-dropdown-icon");
274
- i0.ɵɵattribute("data-pc-section", "triggericon")("aria-hidden", true);
275
- } }
276
- function MultiSelect_ng_template_10_ng_container_0_Template(rf, ctx) { if (rf & 1) {
277
- i0.ɵɵelementContainerStart(0);
278
- i0.ɵɵtemplate(1, MultiSelect_ng_template_10_ng_container_0_span_1_Template, 1, 3, "span", 38)(2, MultiSelect_ng_template_10_ng_container_0_ChevronDownIcon_2_Template, 1, 3, "ChevronDownIcon", 39);
279
- i0.ɵɵelementContainerEnd();
280
- } if (rf & 2) {
281
- const ctx_r1 = i0.ɵɵnextContext(2);
282
- i0.ɵɵadvance();
283
- i0.ɵɵproperty("ngIf", ctx_r1.dropdownIcon);
284
- i0.ɵɵadvance();
285
- i0.ɵɵproperty("ngIf", !ctx_r1.dropdownIcon);
286
- } }
287
- function MultiSelect_ng_template_10_span_1_1_ng_template_0_Template(rf, ctx) { }
288
- function MultiSelect_ng_template_10_span_1_1_Template(rf, ctx) { if (rf & 1) {
289
- i0.ɵɵtemplate(0, MultiSelect_ng_template_10_span_1_1_ng_template_0_Template, 0, 0, "ng-template");
290
- } }
291
- function MultiSelect_ng_template_10_span_1_Template(rf, ctx) { if (rf & 1) {
292
- i0.ɵɵelementStart(0, "span", 42);
293
- i0.ɵɵtemplate(1, MultiSelect_ng_template_10_span_1_1_Template, 1, 0, null, 32);
294
- i0.ɵɵelementEnd();
295
- } if (rf & 2) {
296
- const ctx_r1 = i0.ɵɵnextContext(2);
297
- i0.ɵɵattribute("data-pc-section", "triggericon")("aria-hidden", true);
298
- i0.ɵɵadvance();
299
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.dropdownIconTemplate || ctx_r1._dropdownIconTemplate);
300
- } }
301
- function MultiSelect_ng_template_10_Template(rf, ctx) { if (rf & 1) {
302
- i0.ɵɵtemplate(0, MultiSelect_ng_template_10_ng_container_0_Template, 3, 2, "ng-container", 20)(1, MultiSelect_ng_template_10_span_1_Template, 2, 3, "span", 37);
303
- } if (rf & 2) {
304
- const ctx_r1 = i0.ɵɵnextContext();
305
- i0.ɵɵproperty("ngIf", !ctx_r1.dropdownIconTemplate && !ctx_r1._dropdownIconTemplate);
306
- i0.ɵɵadvance();
307
- i0.ɵɵproperty("ngIf", ctx_r1.dropdownIconTemplate || ctx_r1._dropdownIconTemplate);
308
- } }
309
- function MultiSelect_ng_template_14_ng_container_3_Template(rf, ctx) { if (rf & 1) {
310
- i0.ɵɵelementContainer(0);
311
- } }
312
- function MultiSelect_ng_template_14_div_4_ng_container_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
313
- i0.ɵɵelementContainer(0);
314
- } }
315
- function MultiSelect_ng_template_14_div_4_ng_container_2_Template(rf, ctx) { if (rf & 1) {
316
- i0.ɵɵelementContainerStart(0);
317
- i0.ɵɵtemplate(1, MultiSelect_ng_template_14_div_4_ng_container_2_ng_container_1_Template, 1, 0, "ng-container", 21);
318
- i0.ɵɵelementContainerEnd();
319
- } if (rf & 2) {
320
- const ctx_r1 = i0.ɵɵnextContext(3);
321
- i0.ɵɵadvance();
322
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.filterTemplate || ctx_r1._filterTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c34, ctx_r1.filterOptions));
323
- } }
324
- function MultiSelect_ng_template_14_div_4_ng_template_3_p_checkbox_0_ng_template_2_CheckIcon_0_Template(rf, ctx) { if (rf & 1) {
325
- i0.ɵɵelement(0, "CheckIcon", 41);
326
- } if (rf & 2) {
327
- const klass_r10 = i0.ɵɵnextContext().class;
328
- i0.ɵɵproperty("styleClass", klass_r10);
329
- i0.ɵɵattribute("data-pc-section", "icon");
330
- } }
331
- function MultiSelect_ng_template_14_div_4_ng_template_3_p_checkbox_0_ng_template_2_1_ng_template_0_Template(rf, ctx) { }
332
- function MultiSelect_ng_template_14_div_4_ng_template_3_p_checkbox_0_ng_template_2_1_Template(rf, ctx) { if (rf & 1) {
333
- i0.ɵɵtemplate(0, MultiSelect_ng_template_14_div_4_ng_template_3_p_checkbox_0_ng_template_2_1_ng_template_0_Template, 0, 0, "ng-template");
334
- } }
335
- function MultiSelect_ng_template_14_div_4_ng_template_3_p_checkbox_0_ng_template_2_Template(rf, ctx) { if (rf & 1) {
336
- i0.ɵɵtemplate(0, MultiSelect_ng_template_14_div_4_ng_template_3_p_checkbox_0_ng_template_2_CheckIcon_0_Template, 1, 2, "CheckIcon", 39)(1, MultiSelect_ng_template_14_div_4_ng_template_3_p_checkbox_0_ng_template_2_1_Template, 1, 0, null, 21);
337
- } if (rf & 2) {
338
- const klass_r10 = ctx.class;
339
- const ctx_r1 = i0.ɵɵnextContext(5);
340
- i0.ɵɵproperty("ngIf", !ctx_r1.headerCheckboxIconTemplate && !ctx_r1._headerCheckboxIconTemplate && ctx_r1.allSelected());
341
- i0.ɵɵadvance();
342
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.headerCheckboxIconTemplate || ctx_r1._headerCheckboxIconTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction3(3, _c35, ctx_r1.allSelected(), ctx_r1.partialSelected(), klass_r10));
343
- } }
344
- function MultiSelect_ng_template_14_div_4_ng_template_3_p_checkbox_0_Template(rf, ctx) { if (rf & 1) {
345
- const _r9 = i0.ɵɵgetCurrentView();
346
- i0.ɵɵelementStart(0, "p-checkbox", 51, 10);
347
- i0.ɵɵlistener("onChange", function MultiSelect_ng_template_14_div_4_ng_template_3_p_checkbox_0_Template_p_checkbox_onChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onToggleAll($event)); });
348
- i0.ɵɵtemplate(2, MultiSelect_ng_template_14_div_4_ng_template_3_p_checkbox_0_ng_template_2_Template, 2, 7, "ng-template", null, 11, i0.ɵɵtemplateRefExtractor);
349
- i0.ɵɵelementEnd();
350
- } if (rf & 2) {
351
- const ctx_r1 = i0.ɵɵnextContext(4);
352
- i0.ɵɵproperty("ngModel", ctx_r1.allSelected())("binary", true)("variant", ctx_r1.variant)("disabled", ctx_r1.disabled);
353
- } }
354
- function MultiSelect_ng_template_14_div_4_ng_template_3_div_1_SearchIcon_5_Template(rf, ctx) { if (rf & 1) {
355
- i0.ɵɵelement(0, "SearchIcon", 41);
356
- } if (rf & 2) {
357
- i0.ɵɵproperty("styleClass", "p-multiselect-filter-icon");
358
- } }
359
- function MultiSelect_ng_template_14_div_4_ng_template_3_div_1_span_6_1_ng_template_0_Template(rf, ctx) { }
360
- function MultiSelect_ng_template_14_div_4_ng_template_3_div_1_span_6_1_Template(rf, ctx) { if (rf & 1) {
361
- i0.ɵɵtemplate(0, MultiSelect_ng_template_14_div_4_ng_template_3_div_1_span_6_1_ng_template_0_Template, 0, 0, "ng-template");
362
- } }
363
- function MultiSelect_ng_template_14_div_4_ng_template_3_div_1_span_6_Template(rf, ctx) { if (rf & 1) {
364
- i0.ɵɵelementStart(0, "span", 55);
365
- i0.ɵɵtemplate(1, MultiSelect_ng_template_14_div_4_ng_template_3_div_1_span_6_1_Template, 1, 0, null, 32);
366
- i0.ɵɵelementEnd();
367
- } if (rf & 2) {
368
- const ctx_r1 = i0.ɵɵnextContext(5);
369
- i0.ɵɵadvance();
370
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.filterIconTemplate || ctx_r1._filterIconTemplate);
371
- } }
372
- function MultiSelect_ng_template_14_div_4_ng_template_3_div_1_Template(rf, ctx) { if (rf & 1) {
373
- const _r11 = i0.ɵɵgetCurrentView();
374
- i0.ɵɵelementStart(0, "div", 52)(1, "p-iconfield")(2, "input", 53, 12);
375
- i0.ɵɵlistener("input", function MultiSelect_ng_template_14_div_4_ng_template_3_div_1_Template_input_input_2_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onFilterInputChange($event)); })("keydown", function MultiSelect_ng_template_14_div_4_ng_template_3_div_1_Template_input_keydown_2_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onFilterKeyDown($event)); })("click", function MultiSelect_ng_template_14_div_4_ng_template_3_div_1_Template_input_click_2_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onInputClick($event)); })("blur", function MultiSelect_ng_template_14_div_4_ng_template_3_div_1_Template_input_blur_2_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onFilterBlur($event)); });
376
- i0.ɵɵelementEnd();
377
- i0.ɵɵelementStart(4, "p-inputicon");
378
- i0.ɵɵtemplate(5, MultiSelect_ng_template_14_div_4_ng_template_3_div_1_SearchIcon_5_Template, 1, 1, "SearchIcon", 39)(6, MultiSelect_ng_template_14_div_4_ng_template_3_div_1_span_6_Template, 2, 1, "span", 54);
379
- i0.ɵɵelementEnd()()();
380
- } if (rf & 2) {
381
- const ctx_r1 = i0.ɵɵnextContext(4);
382
- i0.ɵɵadvance(2);
383
- i0.ɵɵproperty("variant", ctx_r1.variant)("value", ctx_r1._filterValue() || "")("disabled", ctx_r1.disabled);
384
- i0.ɵɵattribute("autocomplete", ctx_r1.autocomplete)("aria-owns", ctx_r1.id + "_list")("aria-activedescendant", ctx_r1.focusedOptionId)("placeholder", ctx_r1.filterPlaceHolder)("aria-label", ctx_r1.ariaFilterLabel);
385
- i0.ɵɵadvance(3);
386
- i0.ɵɵproperty("ngIf", !ctx_r1.filterIconTemplate && !ctx_r1._filterIconTemplate);
387
- i0.ɵɵadvance();
388
- i0.ɵɵproperty("ngIf", ctx_r1.filterIconTemplate || ctx_r1._filterIconTemplate);
389
- } }
390
- function MultiSelect_ng_template_14_div_4_ng_template_3_Template(rf, ctx) { if (rf & 1) {
391
- i0.ɵɵtemplate(0, MultiSelect_ng_template_14_div_4_ng_template_3_p_checkbox_0_Template, 4, 4, "p-checkbox", 49)(1, MultiSelect_ng_template_14_div_4_ng_template_3_div_1_Template, 7, 10, "div", 50);
392
- } if (rf & 2) {
393
- const ctx_r1 = i0.ɵɵnextContext(3);
394
- i0.ɵɵproperty("ngIf", ctx_r1.showToggleAll && !ctx_r1.selectionLimit);
395
- i0.ɵɵadvance();
396
- i0.ɵɵproperty("ngIf", ctx_r1.filter);
397
- } }
398
- function MultiSelect_ng_template_14_div_4_Template(rf, ctx) { if (rf & 1) {
399
- i0.ɵɵelementStart(0, "div", 48);
400
- i0.ɵɵprojection(1);
401
- i0.ɵɵtemplate(2, MultiSelect_ng_template_14_div_4_ng_container_2_Template, 2, 4, "ng-container", 23)(3, MultiSelect_ng_template_14_div_4_ng_template_3_Template, 2, 2, "ng-template", null, 9, i0.ɵɵtemplateRefExtractor);
402
- i0.ɵɵelementEnd();
403
- } if (rf & 2) {
404
- const builtInFilterElement_r12 = i0.ɵɵreference(4);
405
- const ctx_r1 = i0.ɵɵnextContext(2);
406
- i0.ɵɵadvance(2);
407
- i0.ɵɵproperty("ngIf", ctx_r1.filterTemplate || ctx_r1._filterTemplate)("ngIfElse", builtInFilterElement_r12);
408
- } }
409
- function MultiSelect_ng_template_14_p_scroller_6_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
410
- i0.ɵɵelementContainer(0);
411
- } }
412
- function MultiSelect_ng_template_14_p_scroller_6_ng_template_2_Template(rf, ctx) { if (rf & 1) {
413
- i0.ɵɵtemplate(0, MultiSelect_ng_template_14_p_scroller_6_ng_template_2_ng_container_0_Template, 1, 0, "ng-container", 21);
414
- } if (rf & 2) {
415
- const items_r14 = ctx.$implicit;
416
- const scrollerOptions_r15 = ctx.options;
417
- i0.ɵɵnextContext(2);
418
- const buildInItems_r16 = i0.ɵɵreference(9);
419
- i0.ɵɵproperty("ngTemplateOutlet", buildInItems_r16)("ngTemplateOutletContext", i0.ɵɵpureFunction2(2, _c36, items_r14, scrollerOptions_r15));
420
- } }
421
- function MultiSelect_ng_template_14_p_scroller_6_ng_container_4_ng_template_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {
422
- i0.ɵɵelementContainer(0);
423
- } }
424
- function MultiSelect_ng_template_14_p_scroller_6_ng_container_4_ng_template_1_Template(rf, ctx) { if (rf & 1) {
425
- i0.ɵɵtemplate(0, MultiSelect_ng_template_14_p_scroller_6_ng_container_4_ng_template_1_ng_container_0_Template, 1, 0, "ng-container", 21);
426
- } if (rf & 2) {
427
- const scrollerOptions_r17 = ctx.options;
428
- const ctx_r1 = i0.ɵɵnextContext(4);
429
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.loaderTemplate || ctx_r1._loaderTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c34, scrollerOptions_r17));
430
- } }
431
- function MultiSelect_ng_template_14_p_scroller_6_ng_container_4_Template(rf, ctx) { if (rf & 1) {
432
- i0.ɵɵelementContainerStart(0);
433
- i0.ɵɵtemplate(1, MultiSelect_ng_template_14_p_scroller_6_ng_container_4_ng_template_1_Template, 1, 4, "ng-template", null, 14, i0.ɵɵtemplateRefExtractor);
434
- i0.ɵɵelementContainerEnd();
435
- } }
436
- function MultiSelect_ng_template_14_p_scroller_6_Template(rf, ctx) { if (rf & 1) {
437
- const _r13 = i0.ɵɵgetCurrentView();
438
- i0.ɵɵelementStart(0, "p-scroller", 56, 13);
439
- i0.ɵɵlistener("onLazyLoad", function MultiSelect_ng_template_14_p_scroller_6_Template_p_scroller_onLazyLoad_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onLazyLoad.emit($event)); });
440
- i0.ɵɵtemplate(2, MultiSelect_ng_template_14_p_scroller_6_ng_template_2_Template, 1, 5, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor)(4, MultiSelect_ng_template_14_p_scroller_6_ng_container_4_Template, 3, 0, "ng-container", 20);
441
- i0.ɵɵelementEnd();
442
- } if (rf & 2) {
443
- const ctx_r1 = i0.ɵɵnextContext(2);
444
- i0.ɵɵstyleMap(i0.ɵɵpureFunction1(9, _c0, ctx_r1.scrollHeight));
445
- i0.ɵɵproperty("items", ctx_r1.visibleOptions())("itemSize", ctx_r1.virtualScrollItemSize || ctx_r1._itemSize)("autoSize", true)("tabindex", -1)("lazy", ctx_r1.lazy)("options", ctx_r1.virtualScrollOptions);
446
- i0.ɵɵadvance(4);
447
- i0.ɵɵproperty("ngIf", ctx_r1.loaderTemplate || ctx_r1._loaderTemplate);
448
- } }
449
- function MultiSelect_ng_template_14_ng_container_7_ng_container_1_Template(rf, ctx) { if (rf & 1) {
450
- i0.ɵɵelementContainer(0);
451
- } }
452
- function MultiSelect_ng_template_14_ng_container_7_Template(rf, ctx) { if (rf & 1) {
453
- i0.ɵɵelementContainerStart(0);
454
- i0.ɵɵtemplate(1, MultiSelect_ng_template_14_ng_container_7_ng_container_1_Template, 1, 0, "ng-container", 21);
455
- i0.ɵɵelementContainerEnd();
456
- } if (rf & 2) {
457
- i0.ɵɵnextContext();
458
- const buildInItems_r16 = i0.ɵɵreference(9);
459
- const ctx_r1 = i0.ɵɵnextContext();
460
- i0.ɵɵadvance();
461
- i0.ɵɵproperty("ngTemplateOutlet", buildInItems_r16)("ngTemplateOutletContext", i0.ɵɵpureFunction2(3, _c36, ctx_r1.visibleOptions(), i0.ɵɵpureFunction0(2, _c37)));
462
- } }
463
- function MultiSelect_ng_template_14_ng_template_8_ng_template_2_ng_container_0_span_2_Template(rf, ctx) { if (rf & 1) {
464
- i0.ɵɵelementStart(0, "span");
465
- i0.ɵɵtext(1);
466
- i0.ɵɵelementEnd();
467
- } if (rf & 2) {
468
- const option_r18 = i0.ɵɵnextContext(2).$implicit;
469
- const ctx_r1 = i0.ɵɵnextContext(3);
470
- i0.ɵɵadvance();
471
- i0.ɵɵtextInterpolate(ctx_r1.getOptionGroupLabel(option_r18.optionGroup));
472
- } }
473
- function MultiSelect_ng_template_14_ng_template_8_ng_template_2_ng_container_0_ng_container_3_Template(rf, ctx) { if (rf & 1) {
474
- i0.ɵɵelementContainer(0);
475
- } }
476
- function MultiSelect_ng_template_14_ng_template_8_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
477
- i0.ɵɵelementContainerStart(0);
478
- i0.ɵɵelementStart(1, "li", 60);
479
- i0.ɵɵtemplate(2, MultiSelect_ng_template_14_ng_template_8_ng_template_2_ng_container_0_span_2_Template, 2, 1, "span", 20)(3, MultiSelect_ng_template_14_ng_template_8_ng_template_2_ng_container_0_ng_container_3_Template, 1, 0, "ng-container", 21);
480
- i0.ɵɵelementEnd();
481
- i0.ɵɵelementContainerEnd();
482
- } if (rf & 2) {
483
- const ctx_r18 = i0.ɵɵnextContext();
484
- const option_r18 = ctx_r18.$implicit;
485
- const i_r20 = ctx_r18.index;
486
- const scrollerOptions_r21 = i0.ɵɵnextContext().options;
487
- const ctx_r1 = i0.ɵɵnextContext(2);
488
- i0.ɵɵadvance();
489
- i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(5, _c0, scrollerOptions_r21.itemSize + "px"));
490
- i0.ɵɵattribute("id", ctx_r1.id + "_" + ctx_r1.getOptionIndex(i_r20, scrollerOptions_r21));
491
- i0.ɵɵadvance();
492
- i0.ɵɵproperty("ngIf", !ctx_r1.groupTemplate);
493
- i0.ɵɵadvance();
494
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.groupTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction1(7, _c2, option_r18.optionGroup));
495
- } }
496
- function MultiSelect_ng_template_14_ng_template_8_ng_template_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
497
- const _r22 = i0.ɵɵgetCurrentView();
498
- i0.ɵɵelementContainerStart(0);
499
- i0.ɵɵelementStart(1, "p-multiselect-item", 61);
500
- i0.ɵɵlistener("onClick", function MultiSelect_ng_template_14_ng_template_8_ng_template_2_ng_container_1_Template_p_multiselect_item_onClick_1_listener($event) { i0.ɵɵrestoreView(_r22); const i_r20 = i0.ɵɵnextContext().index; const scrollerOptions_r21 = i0.ɵɵnextContext().options; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOptionSelect($event, false, ctx_r1.getOptionIndex(i_r20, scrollerOptions_r21))); })("onMouseEnter", function MultiSelect_ng_template_14_ng_template_8_ng_template_2_ng_container_1_Template_p_multiselect_item_onMouseEnter_1_listener($event) { i0.ɵɵrestoreView(_r22); const i_r20 = i0.ɵɵnextContext().index; const scrollerOptions_r21 = i0.ɵɵnextContext().options; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOptionMouseEnter($event, ctx_r1.getOptionIndex(i_r20, scrollerOptions_r21))); });
501
- i0.ɵɵelementEnd();
502
- i0.ɵɵelementContainerEnd();
503
- } if (rf & 2) {
504
- const ctx_r18 = i0.ɵɵnextContext();
505
- const option_r18 = ctx_r18.$implicit;
506
- const i_r20 = ctx_r18.index;
507
- const scrollerOptions_r21 = i0.ɵɵnextContext().options;
508
- const ctx_r1 = i0.ɵɵnextContext(2);
509
- i0.ɵɵadvance();
510
- i0.ɵɵproperty("id", ctx_r1.id + "_" + ctx_r1.getOptionIndex(i_r20, scrollerOptions_r21))("option", option_r18)("selected", ctx_r1.isSelected(option_r18))("label", ctx_r1.getOptionLabel(option_r18))("disabled", ctx_r1.isOptionDisabled(option_r18))("template", ctx_r1.itemTemplate || ctx_r1._itemTemplate)("checkIconTemplate", ctx_r1.checkIconTemplate || ctx_r1._checkIconTemplate)("itemCheckboxIconTemplate", ctx_r1.itemCheckboxIconTemplate || ctx_r1._itemCheckboxIconTemplate)("itemSize", scrollerOptions_r21.itemSize)("focused", ctx_r1.focusedOptionIndex() === ctx_r1.getOptionIndex(i_r20, scrollerOptions_r21))("ariaPosInset", ctx_r1.getAriaPosInset(ctx_r1.getOptionIndex(i_r20, scrollerOptions_r21)))("ariaSetSize", ctx_r1.ariaSetSize)("variant", ctx_r1.variant);
511
- } }
512
- function MultiSelect_ng_template_14_ng_template_8_ng_template_2_Template(rf, ctx) { if (rf & 1) {
513
- i0.ɵɵtemplate(0, MultiSelect_ng_template_14_ng_template_8_ng_template_2_ng_container_0_Template, 4, 9, "ng-container", 20)(1, MultiSelect_ng_template_14_ng_template_8_ng_template_2_ng_container_1_Template, 2, 13, "ng-container", 20);
514
- } if (rf & 2) {
515
- const option_r18 = ctx.$implicit;
516
- const ctx_r1 = i0.ɵɵnextContext(3);
517
- i0.ɵɵproperty("ngIf", ctx_r1.isOptionGroup(option_r18));
518
- i0.ɵɵadvance();
519
- i0.ɵɵproperty("ngIf", !ctx_r1.isOptionGroup(option_r18));
520
- } }
521
- function MultiSelect_ng_template_14_ng_template_8_li_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
522
- i0.ɵɵtext(0);
523
- } if (rf & 2) {
524
- const ctx_r1 = i0.ɵɵnextContext(4);
525
- i0.ɵɵtextInterpolate1(" ", ctx_r1.emptyFilterMessageLabel, " ");
526
- } }
527
- function MultiSelect_ng_template_14_ng_template_8_li_3_Conditional_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
528
- i0.ɵɵelementContainer(0);
529
- } }
530
- function MultiSelect_ng_template_14_ng_template_8_li_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
531
- i0.ɵɵtemplate(0, MultiSelect_ng_template_14_ng_template_8_li_3_Conditional_2_ng_container_0_Template, 1, 0, "ng-container", 32);
532
- } if (rf & 2) {
533
- const ctx_r1 = i0.ɵɵnextContext(4);
534
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.emptyFilterTemplate || ctx_r1._emptyFilterTemplate || ctx_r1.emptyTemplate || ctx_r1._emptyFilterTemplate);
535
- } }
536
- function MultiSelect_ng_template_14_ng_template_8_li_3_Template(rf, ctx) { if (rf & 1) {
537
- i0.ɵɵelementStart(0, "li", 62);
538
- i0.ɵɵtemplate(1, MultiSelect_ng_template_14_ng_template_8_li_3_Conditional_1_Template, 1, 1)(2, MultiSelect_ng_template_14_ng_template_8_li_3_Conditional_2_Template, 1, 1, "ng-container");
539
- i0.ɵɵelementEnd();
540
- } if (rf & 2) {
541
- const scrollerOptions_r21 = i0.ɵɵnextContext().options;
542
- const ctx_r1 = i0.ɵɵnextContext(2);
543
- i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(2, _c0, scrollerOptions_r21.itemSize + "px"));
544
- i0.ɵɵadvance();
545
- i0.ɵɵconditional(!ctx_r1.emptyFilterTemplate && !ctx_r1._emptyFilterTemplate && !ctx_r1.emptyTemplate && !ctx_r1._emptyTemplate ? 1 : 2);
546
- } }
547
- function MultiSelect_ng_template_14_ng_template_8_li_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
548
- i0.ɵɵtext(0);
549
- } if (rf & 2) {
550
- const ctx_r1 = i0.ɵɵnextContext(4);
551
- i0.ɵɵtextInterpolate1(" ", ctx_r1.emptyMessageLabel, " ");
552
- } }
553
- function MultiSelect_ng_template_14_ng_template_8_li_4_Conditional_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
554
- i0.ɵɵelementContainer(0);
555
- } }
556
- function MultiSelect_ng_template_14_ng_template_8_li_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
557
- i0.ɵɵtemplate(0, MultiSelect_ng_template_14_ng_template_8_li_4_Conditional_2_ng_container_0_Template, 1, 0, "ng-container", 32);
558
- } if (rf & 2) {
559
- const ctx_r1 = i0.ɵɵnextContext(4);
560
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.emptyTemplate || ctx_r1._emptyTemplate);
561
- } }
562
- function MultiSelect_ng_template_14_ng_template_8_li_4_Template(rf, ctx) { if (rf & 1) {
563
- i0.ɵɵelementStart(0, "li", 62);
564
- i0.ɵɵtemplate(1, MultiSelect_ng_template_14_ng_template_8_li_4_Conditional_1_Template, 1, 1)(2, MultiSelect_ng_template_14_ng_template_8_li_4_Conditional_2_Template, 1, 1, "ng-container");
565
- i0.ɵɵelementEnd();
566
- } if (rf & 2) {
567
- const scrollerOptions_r21 = i0.ɵɵnextContext().options;
568
- const ctx_r1 = i0.ɵɵnextContext(2);
569
- i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(2, _c0, scrollerOptions_r21.itemSize + "px"));
570
- i0.ɵɵadvance();
571
- i0.ɵɵconditional(!ctx_r1.emptyTemplate && !ctx_r1._emptyTemplate ? 1 : 2);
572
- } }
573
- function MultiSelect_ng_template_14_ng_template_8_Template(rf, ctx) { if (rf & 1) {
574
- i0.ɵɵelementStart(0, "ul", 57, 15);
575
- i0.ɵɵtemplate(2, MultiSelect_ng_template_14_ng_template_8_ng_template_2_Template, 2, 2, "ng-template", 58)(3, MultiSelect_ng_template_14_ng_template_8_li_3_Template, 3, 4, "li", 59)(4, MultiSelect_ng_template_14_ng_template_8_li_4_Template, 3, 4, "li", 59);
576
- i0.ɵɵelementEnd();
577
- } if (rf & 2) {
578
- const items_r23 = ctx.$implicit;
579
- const scrollerOptions_r21 = ctx.options;
580
- const ctx_r1 = i0.ɵɵnextContext(2);
581
- i0.ɵɵstyleMap(scrollerOptions_r21.contentStyle);
582
- i0.ɵɵproperty("ngClass", scrollerOptions_r21.contentStyleClass);
583
- i0.ɵɵattribute("aria-label", ctx_r1.listLabel);
584
- i0.ɵɵadvance(2);
585
- i0.ɵɵproperty("ngForOf", items_r23);
586
- i0.ɵɵadvance();
587
- i0.ɵɵproperty("ngIf", ctx_r1.hasFilter() && ctx_r1.isEmpty());
588
- i0.ɵɵadvance();
589
- i0.ɵɵproperty("ngIf", !ctx_r1.hasFilter() && ctx_r1.isEmpty());
590
- } }
591
- function MultiSelect_ng_template_14_div_10_ng_container_2_Template(rf, ctx) { if (rf & 1) {
592
- i0.ɵɵelementContainer(0);
593
- } }
594
- function MultiSelect_ng_template_14_div_10_Template(rf, ctx) { if (rf & 1) {
595
- i0.ɵɵelementStart(0, "div");
596
- i0.ɵɵprojection(1, 1);
597
- i0.ɵɵtemplate(2, MultiSelect_ng_template_14_div_10_ng_container_2_Template, 1, 0, "ng-container", 32);
598
- i0.ɵɵelementEnd();
599
- } if (rf & 2) {
600
- const ctx_r1 = i0.ɵɵnextContext(2);
601
- i0.ɵɵadvance(2);
602
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.footerTemplate || ctx_r1._footerTemplate);
603
- } }
604
- function MultiSelect_ng_template_14_Template(rf, ctx) { if (rf & 1) {
605
- const _r8 = i0.ɵɵgetCurrentView();
606
- i0.ɵɵelementStart(0, "div", 43)(1, "span", 44, 6);
607
- i0.ɵɵlistener("focus", function MultiSelect_ng_template_14_Template_span_focus_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFirstHiddenFocus($event)); });
608
- i0.ɵɵelementEnd();
609
- i0.ɵɵtemplate(3, MultiSelect_ng_template_14_ng_container_3_Template, 1, 0, "ng-container", 32)(4, MultiSelect_ng_template_14_div_4_Template, 5, 2, "div", 45);
610
- i0.ɵɵelementStart(5, "div", 46);
611
- i0.ɵɵtemplate(6, MultiSelect_ng_template_14_p_scroller_6_Template, 5, 11, "p-scroller", 47)(7, MultiSelect_ng_template_14_ng_container_7_Template, 2, 6, "ng-container", 20)(8, MultiSelect_ng_template_14_ng_template_8_Template, 5, 7, "ng-template", null, 7, i0.ɵɵtemplateRefExtractor);
612
- i0.ɵɵelementEnd();
613
- i0.ɵɵtemplate(10, MultiSelect_ng_template_14_div_10_Template, 3, 1, "div", 20);
614
- i0.ɵɵelementStart(11, "span", 44, 8);
615
- i0.ɵɵlistener("focus", function MultiSelect_ng_template_14_Template_span_focus_11_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onLastHiddenFocus($event)); });
616
- i0.ɵɵelementEnd()();
617
- } if (rf & 2) {
618
- const ctx_r1 = i0.ɵɵnextContext();
619
- i0.ɵɵclassMap(ctx_r1.panelStyleClass);
620
- i0.ɵɵproperty("ngClass", "p-multiselect-overlay p-component")("ngStyle", ctx_r1.panelStyle);
621
- i0.ɵɵattribute("id", ctx_r1.id + "_list");
622
- i0.ɵɵadvance();
623
- i0.ɵɵattribute("tabindex", 0)("data-p-hidden-accessible", true)("data-p-hidden-focusable", true);
624
- i0.ɵɵadvance(2);
625
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.headerTemplate || ctx_r1._headerTemplate);
626
- i0.ɵɵadvance();
627
- i0.ɵɵproperty("ngIf", ctx_r1.showHeader);
628
- i0.ɵɵadvance();
629
- i0.ɵɵstyleProp("max-height", ctx_r1.virtualScroll ? "auto" : ctx_r1.scrollHeight || "auto");
630
- i0.ɵɵadvance();
631
- i0.ɵɵproperty("ngIf", ctx_r1.virtualScroll);
632
- i0.ɵɵadvance();
633
- i0.ɵɵproperty("ngIf", !ctx_r1.virtualScroll);
634
- i0.ɵɵadvance(3);
635
- i0.ɵɵproperty("ngIf", ctx_r1.footerFacet || ctx_r1.footerTemplate || ctx_r1._footerTemplate);
636
- i0.ɵɵadvance();
637
- i0.ɵɵattribute("tabindex", 0)("data-p-hidden-accessible", true)("data-p-hidden-focusable", true);
638
- } }
639
- export const MULTISELECT_VALUE_ACCESSOR = {
640
- provide: NG_VALUE_ACCESSOR,
641
- useExisting: forwardRef(() => MultiSelect),
642
- multi: true
643
- };
644
- export class MultiSelectItem extends BaseComponent {
645
- id;
646
- option;
647
- selected;
648
- label;
649
- disabled;
650
- itemSize;
651
- focused;
652
- ariaPosInset;
653
- ariaSetSize;
654
- variant;
655
- template;
656
- checkIconTemplate;
657
- itemCheckboxIconTemplate;
658
- onClick = new EventEmitter();
659
- onMouseEnter = new EventEmitter();
660
- onOptionClick(event) {
661
- this.onClick.emit({
662
- originalEvent: event,
663
- option: this.option,
664
- selected: this.selected
665
- });
666
- event.stopPropagation();
667
- event.preventDefault();
668
- }
669
- onOptionMouseEnter(event) {
670
- this.onMouseEnter.emit({
671
- originalEvent: event,
672
- option: this.option,
673
- selected: this.selected
674
- });
675
- }
676
- static ɵfac = /*@__PURE__*/ (() => { let ɵMultiSelectItem_BaseFactory; return function MultiSelectItem_Factory(__ngFactoryType__) { return (ɵMultiSelectItem_BaseFactory || (ɵMultiSelectItem_BaseFactory = i0.ɵɵgetInheritedFactory(MultiSelectItem)))(__ngFactoryType__ || MultiSelectItem); }; })();
677
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MultiSelectItem, selectors: [["p-multiSelectItem"], ["p-multiselect-item"]], inputs: { id: "id", option: "option", selected: [2, "selected", "selected", booleanAttribute], label: "label", disabled: [2, "disabled", "disabled", booleanAttribute], itemSize: [2, "itemSize", "itemSize", numberAttribute], focused: [2, "focused", "focused", booleanAttribute], ariaPosInset: "ariaPosInset", ariaSetSize: "ariaSetSize", variant: "variant", template: "template", checkIconTemplate: "checkIconTemplate", itemCheckboxIconTemplate: "itemCheckboxIconTemplate" }, outputs: { onClick: "onClick", onMouseEnter: "onMouseEnter" }, standalone: true, features: [i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], decls: 5, vars: 26, consts: [["icon", ""], ["pRipple", "", "role", "option", 3, "click", "mouseenter", "ngStyle", "ngClass", "id"], [3, "ngModel", "binary", "tabindex", "variant"], [4, "ngIf"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"]], template: function MultiSelectItem_Template(rf, ctx) { if (rf & 1) {
678
- i0.ɵɵelementStart(0, "li", 1);
679
- i0.ɵɵlistener("click", function MultiSelectItem_Template_li_click_0_listener($event) { return ctx.onOptionClick($event); })("mouseenter", function MultiSelectItem_Template_li_mouseenter_0_listener($event) { return ctx.onOptionMouseEnter($event); });
680
- i0.ɵɵelementStart(1, "p-checkbox", 2);
681
- i0.ɵɵtemplate(2, MultiSelectItem_ng_container_2_Template, 3, 0, "ng-container", 3);
682
- i0.ɵɵelementEnd();
683
- i0.ɵɵtemplate(3, MultiSelectItem_span_3_Template, 2, 1, "span", 3)(4, MultiSelectItem_ng_container_4_Template, 1, 0, "ng-container", 4);
684
- i0.ɵɵelementEnd();
685
- } if (rf & 2) {
686
- i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(19, _c0, ctx.itemSize + "px"))("ngClass", i0.ɵɵpureFunction2(21, _c1, ctx.disabled, ctx.focused))("id", ctx.id);
687
- i0.ɵɵattribute("aria-label", ctx.label)("aria-setsize", ctx.ariaSetSize)("aria-posinset", ctx.ariaPosInset)("aria-selected", ctx.selected)("data-p-focused", ctx.focused)("data-p-highlight", ctx.selected)("data-p-disabled", ctx.disabled)("aria-checked", ctx.selected);
688
- i0.ɵɵadvance();
689
- i0.ɵɵproperty("ngModel", ctx.selected)("binary", true)("tabindex", -1)("variant", ctx.variant);
690
- i0.ɵɵadvance();
691
- i0.ɵɵproperty("ngIf", ctx.itemCheckboxIconTemplate);
692
- i0.ɵɵadvance();
693
- i0.ɵɵproperty("ngIf", !ctx.template);
694
- i0.ɵɵadvance();
695
- i0.ɵɵproperty("ngTemplateOutlet", ctx.template)("ngTemplateOutletContext", i0.ɵɵpureFunction1(24, _c2, ctx.option));
696
- } }, dependencies: [CommonModule, i1.NgClass, i1.NgIf, i1.NgTemplateOutlet, i1.NgStyle, Checkbox, FormsModule, i2.NgControlStatus, i2.NgModel, Ripple, SharedModule], encapsulation: 2 });
697
- }
698
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MultiSelectItem, [{
699
- type: Component,
700
- args: [{
701
- selector: 'p-multiSelectItem, p-multiselect-item',
702
- standalone: true,
703
- imports: [CommonModule, Checkbox, FormsModule, Ripple, SharedModule],
704
- template: `
705
- <li
706
- pRipple
707
- role="option"
708
- [ngStyle]="{ height: itemSize + 'px' }"
709
- [ngClass]="{
710
- 'p-multiselect-option': true,
711
- 'p-disabled': disabled,
712
- 'p-focus': focused
713
- }"
714
- [id]="id"
715
- [attr.aria-label]="label"
716
- [attr.aria-setsize]="ariaSetSize"
717
- [attr.aria-posinset]="ariaPosInset"
718
- [attr.aria-selected]="selected"
719
- [attr.data-p-focused]="focused"
720
- [attr.data-p-highlight]="selected"
721
- [attr.data-p-disabled]="disabled"
722
- [attr.aria-checked]="selected"
723
- (click)="onOptionClick($event)"
724
- (mouseenter)="onOptionMouseEnter($event)"
725
- >
726
- <p-checkbox [ngModel]="selected" [binary]="true" [tabindex]="-1" [variant]="variant">
727
- <ng-container *ngIf="itemCheckboxIconTemplate">
728
- <ng-template #icon let-klass="class">
729
- <ng-template *ngTemplateOutlet="itemCheckboxIconTemplate; context: { checked: selected, class: klass }"></ng-template>
730
- </ng-template>
731
- </ng-container>
732
- </p-checkbox>
733
- <span *ngIf="!template">{{ label ?? 'empty' }}</span>
734
- <ng-container *ngTemplateOutlet="template; context: { $implicit: option }"></ng-container>
735
- </li>
736
- `,
737
- encapsulation: ViewEncapsulation.None
738
- }]
739
- }], null, { id: [{
740
- type: Input
741
- }], option: [{
742
- type: Input
743
- }], selected: [{
744
- type: Input,
745
- args: [{ transform: booleanAttribute }]
746
- }], label: [{
747
- type: Input
748
- }], disabled: [{
749
- type: Input,
750
- args: [{ transform: booleanAttribute }]
751
- }], itemSize: [{
752
- type: Input,
753
- args: [{ transform: numberAttribute }]
754
- }], focused: [{
755
- type: Input,
756
- args: [{ transform: booleanAttribute }]
757
- }], ariaPosInset: [{
758
- type: Input
759
- }], ariaSetSize: [{
760
- type: Input
761
- }], variant: [{
762
- type: Input
763
- }], template: [{
764
- type: Input
765
- }], checkIconTemplate: [{
766
- type: Input
767
- }], itemCheckboxIconTemplate: [{
768
- type: Input
769
- }], onClick: [{
770
- type: Output
771
- }], onMouseEnter: [{
772
- type: Output
773
- }] }); })();
774
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MultiSelectItem, { className: "MultiSelectItem" }); })();
775
- // @ts-ignore
776
- /**
777
- * MultiSelect is used to select multiple items from a collection.
778
- * @group Components
779
- */
780
- export class MultiSelect extends BaseComponent {
781
- zone;
782
- filterService;
783
- overlayService;
784
- /**
785
- * Unique identifier of the component
786
- * @group Props
787
- */
788
- id;
789
- /**
790
- * Defines a string that labels the input for accessibility.
791
- * @group Props
792
- */
793
- ariaLabel;
794
- /**
795
- * Inline style of the element.
796
- * @group Props
797
- */
798
- style;
799
- /**
800
- * Style class of the element.
801
- * @group Props
802
- */
803
- styleClass;
804
- /**
805
- * Inline style of the overlay panel.
806
- * @group Props
807
- */
808
- panelStyle;
809
- /**
810
- * Style class of the overlay panel element.
811
- * @group Props
812
- */
813
- panelStyleClass;
814
- /**
815
- * Identifier of the focus input to match a label defined for the component.
816
- * @group Props
817
- */
818
- inputId;
819
- /**
820
- * When present, it specifies that the element should be disabled.
821
- * @group Props
822
- */
823
- disabled;
824
- /**
825
- * Spans 100% width of the container when enabled.
826
- * @group Props
827
- */
828
- fluid;
829
- /**
830
- * When present, it specifies that the component cannot be edited.
831
- * @group Props
832
- */
833
- readonly;
834
- /**
835
- * Whether to display options as grouped when nested options are provided.
836
- * @group Props
837
- */
838
- group;
839
- /**
840
- * When specified, displays an input field to filter the items on keyup.
841
- * @group Props
842
- */
843
- filter = true;
844
- /**
845
- * Defines placeholder of the filter input.
846
- * @group Props
847
- */
848
- filterPlaceHolder;
849
- /**
850
- * Locale to use in filtering. The default locale is the host environment's current locale.
851
- * @group Props
852
- */
853
- filterLocale;
854
- /**
855
- * Specifies the visibility of the options panel.
856
- * @group Props
857
- */
858
- overlayVisible;
859
- /**
860
- * Index of the element in tabbing order.
861
- * @group Props
862
- */
863
- tabindex = 0;
864
- /**
865
- * Specifies the input variant of the component.
866
- * @group Props
867
- */
868
- variant = 'outlined';
869
- /**
870
- * Target element to attach the overlay, valid values are "body" or a local ng-template variable of another element (note: use binding with brackets for template variables, e.g. [appendTo]="mydiv" for a div element having #mydiv as variable name).
871
- * @group Props
872
- */
873
- appendTo;
874
- /**
875
- * A property to uniquely identify a value in options.
876
- * @group Props
877
- */
878
- dataKey;
879
- /**
880
- * Name of the input element.
881
- * @group Props
882
- */
883
- name;
884
- /**
885
- * Establishes relationships between the component and label(s) where its value should be one or more element IDs.
886
- * @group Props
887
- */
888
- ariaLabelledBy;
889
- /**
890
- * Whether to show labels of selected item labels or use default label.
891
- * @group Props
892
- * @defaultValue true
893
- */
894
- set displaySelectedLabel(val) {
895
- this._displaySelectedLabel = val;
896
- }
897
- get displaySelectedLabel() {
898
- return this._displaySelectedLabel;
899
- }
900
- /**
901
- * Decides how many selected item labels to show at most.
902
- * @group Props
903
- * @defaultValue 3
904
- */
905
- set maxSelectedLabels(val) {
906
- this._maxSelectedLabels = val;
907
- }
908
- get maxSelectedLabels() {
909
- return this._maxSelectedLabels;
910
- }
911
- /**
912
- * Decides how many selected item labels to show at most.
913
- * @group Props
914
- */
915
- selectionLimit;
916
- /**
917
- * Label to display after exceeding max selected labels e.g. ({0} items selected), defaults "ellipsis" keyword to indicate a text-overflow.
918
- * @group Props
919
- */
920
- selectedItemsLabel;
921
- /**
922
- * Whether to show the checkbox at header to toggle all items at once.
923
- * @group Props
924
- */
925
- showToggleAll = true;
926
- /**
927
- * Text to display when filtering does not return any results.
928
- * @group Props
929
- */
930
- emptyFilterMessage = '';
931
- /**
932
- * Text to display when there is no data. Defaults to global value in i18n translation configuration.
933
- * @group Props
934
- */
935
- emptyMessage = '';
936
- /**
937
- * Clears the filter value when hiding the dropdown.
938
- * @group Props
939
- */
940
- resetFilterOnHide = false;
941
- /**
942
- * Icon class of the dropdown icon.
943
- * @group Props
944
- */
945
- dropdownIcon;
946
- /**
947
- * Icon class of the chip icon.
948
- * @group Props
949
- */
950
- chipIcon;
951
- /**
952
- * Name of the label field of an option.
953
- * @group Props
954
- */
955
- optionLabel;
956
- /**
957
- * Name of the value field of an option.
958
- * @group Props
959
- */
960
- optionValue;
961
- /**
962
- * Name of the disabled field of an option.
963
- * @group Props
964
- */
965
- optionDisabled;
966
- /**
967
- * Name of the label field of an option group.
968
- * @group Props
969
- */
970
- optionGroupLabel = 'label';
971
- /**
972
- * Name of the options field of an option group.
973
- * @group Props
974
- */
975
- optionGroupChildren = 'items';
976
- /**
977
- * Whether to show the header.
978
- * @group Props
979
- */
980
- showHeader = true;
981
- /**
982
- * When filtering is enabled, filterBy decides which field or fields (comma separated) to search against.
983
- * @group Props
984
- */
985
- filterBy;
986
- /**
987
- * Height of the viewport in pixels, a scrollbar is defined if height of list exceeds this value.
988
- * @group Props
989
- */
990
- scrollHeight = '200px';
991
- /**
992
- * Defines if data is loaded and interacted with in lazy manner.
993
- * @group Props
994
- */
995
- lazy = false;
996
- /**
997
- * Whether the data should be loaded on demand during scroll.
998
- * @group Props
999
- */
1000
- virtualScroll;
1001
- /**
1002
- * Whether the multiselect is in loading state.
1003
- * @group Props
1004
- */
1005
- loading = false;
1006
- /**
1007
- * Height of an item in the list for VirtualScrolling.
1008
- * @group Props
1009
- */
1010
- virtualScrollItemSize;
1011
- /**
1012
- * Icon to display in loading state.
1013
- * @group Props
1014
- */
1015
- loadingIcon;
1016
- /**
1017
- * Whether to use the scroller feature. The properties of scroller component can be used like an object in it.
1018
- * @group Props
1019
- */
1020
- virtualScrollOptions;
1021
- /**
1022
- * Whether to use overlay API feature. The properties of overlay API can be used like an object in it.
1023
- * @group Props
1024
- */
1025
- overlayOptions;
1026
- /**
1027
- * Defines a string that labels the filter input.
1028
- * @group Props
1029
- */
1030
- ariaFilterLabel;
1031
- /**
1032
- * Defines how the items are filtered.
1033
- * @group Props
1034
- */
1035
- filterMatchMode = 'contains';
1036
- /**
1037
- * Advisory information to display in a tooltip on hover.
1038
- * @group Props
1039
- */
1040
- tooltip = '';
1041
- /**
1042
- * Position of the tooltip.
1043
- * @group Props
1044
- */
1045
- tooltipPosition = 'right';
1046
- /**
1047
- * Type of CSS position.
1048
- * @group Props
1049
- */
1050
- tooltipPositionStyle = 'absolute';
1051
- /**
1052
- * Style class of the tooltip.
1053
- * @group Props
1054
- */
1055
- tooltipStyleClass;
1056
- /**
1057
- * Applies focus to the filter element when the overlay is shown.
1058
- * @group Props
1059
- */
1060
- autofocusFilter = false;
1061
- /**
1062
- * Defines how the selected items are displayed.
1063
- * @group Props
1064
- */
1065
- display = 'comma';
1066
- /**
1067
- * Defines the autocomplete is active.
1068
- * @group Props
1069
- */
1070
- autocomplete = 'off';
1071
- /**
1072
- * Defines the size of the component.
1073
- * @group Props
1074
- */
1075
- size;
1076
- /**
1077
- * When enabled, a clear icon is displayed to clear the value.
1078
- * @group Props
1079
- */
1080
- showClear = false;
1081
- /**
1082
- * When present, it specifies that the component should automatically get focus on load.
1083
- * @group Props
1084
- */
1085
- autofocus;
1086
- /**
1087
- * @deprecated since v14.2.0, use overlayOptions property instead.
1088
- * Whether to automatically manage layering.
1089
- * @group Props
1090
- */
1091
- get autoZIndex() {
1092
- return this._autoZIndex;
1093
- }
1094
- set autoZIndex(val) {
1095
- this._autoZIndex = val;
1096
- console.log('The autoZIndex property is deprecated since v14.2.0, use overlayOptions property instead.');
1097
- }
1098
- /**
1099
- * @deprecated since v14.2.0, use overlayOptions property instead.
1100
- * Base zIndex value to use in layering.
1101
- * @group Props
1102
- */
1103
- get baseZIndex() {
1104
- return this._baseZIndex;
1105
- }
1106
- set baseZIndex(val) {
1107
- this._baseZIndex = val;
1108
- console.log('The baseZIndex property is deprecated since v14.2.0, use overlayOptions property instead.');
1109
- }
1110
- /**
1111
- * Transition options of the show animation.
1112
- * @group Props
1113
- * @deprecated since v14.2.0, use overlayOptions property instead.
1114
- */
1115
- get showTransitionOptions() {
1116
- return this._showTransitionOptions;
1117
- }
1118
- set showTransitionOptions(val) {
1119
- this._showTransitionOptions = val;
1120
- console.log('The showTransitionOptions property is deprecated since v14.2.0, use overlayOptions property instead.');
1121
- }
1122
- /**
1123
- * Transition options of the hide animation.
1124
- * @group Props
1125
- * @deprecated since v14.2.0, use overlayOptions property instead.
1126
- */
1127
- get hideTransitionOptions() {
1128
- return this._hideTransitionOptions;
1129
- }
1130
- set hideTransitionOptions(val) {
1131
- this._hideTransitionOptions = val;
1132
- console.log('The hideTransitionOptions property is deprecated since v14.2.0, use overlayOptions property instead.');
1133
- }
1134
- /**
1135
- * Label to display when there are no selections.
1136
- * @group Props
1137
- * @deprecated Use placeholder instead.
1138
- */
1139
- set defaultLabel(val) {
1140
- this._defaultLabel = val;
1141
- console.log('defaultLabel property is deprecated since 16.6.0, use placeholder instead');
1142
- }
1143
- get defaultLabel() {
1144
- return this._defaultLabel;
1145
- }
1146
- /**
1147
- * Label to display when there are no selections.
1148
- * @group Props
1149
- */
1150
- set placeholder(val) {
1151
- this._placeholder.set(val);
1152
- }
1153
- get placeholder() {
1154
- return this._placeholder.asReadonly();
1155
- }
1156
- /**
1157
- * An array of objects to display as the available options.
1158
- * @group Props
1159
- */
1160
- get options() {
1161
- const options = this._options();
1162
- return options;
1163
- }
1164
- set options(val) {
1165
- if (!deepEquals(this._options(), val)) {
1166
- this._options.set(val);
1167
- }
1168
- }
1169
- /**
1170
- * When specified, filter displays with this value.
1171
- * @group Props
1172
- */
1173
- get filterValue() {
1174
- return this._filterValue();
1175
- }
1176
- set filterValue(val) {
1177
- this._filterValue.set(val);
1178
- }
1179
- /**
1180
- * Item size of item to be virtual scrolled.
1181
- * @group Props
1182
- * @deprecated use virtualScrollItemSize property instead.
1183
- */
1184
- get itemSize() {
1185
- return this._itemSize;
1186
- }
1187
- set itemSize(val) {
1188
- this._itemSize = val;
1189
- console.log('The itemSize property is deprecated, use virtualScrollItemSize property instead.');
1190
- }
1191
- /**
1192
- * Whether all data is selected.
1193
- * @group Props
1194
- */
1195
- get selectAll() {
1196
- return this._selectAll;
1197
- }
1198
- set selectAll(value) {
1199
- this._selectAll = value;
1200
- }
1201
- /**
1202
- * Indicates whether to focus on options when hovering over them, defaults to optionLabel.
1203
- * @group Props
1204
- */
1205
- focusOnHover = true;
1206
- /**
1207
- * Fields used when filtering the options, defaults to optionLabel.
1208
- * @group Props
1209
- */
1210
- filterFields;
1211
- /**
1212
- * Determines if the option will be selected on focus.
1213
- * @group Props
1214
- */
1215
- selectOnFocus = false;
1216
- /**
1217
- * Whether to focus on the first visible or selected element when the overlay panel is shown.
1218
- * @group Props
1219
- */
1220
- autoOptionFocus = false;
1221
- /**
1222
- * Callback to invoke when value changes.
1223
- * @param {MultiSelectChangeEvent} event - Custom change event.
1224
- * @group Emits
1225
- */
1226
- onChange = new EventEmitter();
1227
- /**
1228
- * Callback to invoke when data is filtered.
1229
- * @param {MultiSelectFilterEvent} event - Custom filter event.
1230
- * @group Emits
1231
- */
1232
- onFilter = new EventEmitter();
1233
- /**
1234
- * Callback to invoke when multiselect receives focus.
1235
- * @param {MultiSelectFocusEvent} event - Custom focus event.
1236
- * @group Emits
1237
- */
1238
- onFocus = new EventEmitter();
1239
- /**
1240
- * Callback to invoke when multiselect loses focus.
1241
- * @param {MultiSelectBlurEvent} event - Custom blur event.
1242
- * @group Emits
1243
- */
1244
- onBlur = new EventEmitter();
1245
- /**
1246
- * Callback to invoke when component is clicked.
1247
- * @param {Event} event - Browser event.
1248
- * @group Emits
1249
- */
1250
- onClick = new EventEmitter();
1251
- /**
1252
- * Callback to invoke when input field is cleared.
1253
- * @group Emits
1254
- */
1255
- onClear = new EventEmitter();
1256
- /**
1257
- * Callback to invoke when overlay panel becomes visible.
1258
- * @group Emits
1259
- */
1260
- onPanelShow = new EventEmitter();
1261
- /**
1262
- * Callback to invoke when overlay panel becomes hidden.
1263
- * @group Emits
1264
- */
1265
- onPanelHide = new EventEmitter();
1266
- /**
1267
- * Callback to invoke in lazy mode to load new data.
1268
- * @param {MultiSelectLazyLoadEvent} event - Lazy load event.
1269
- * @group Emits
1270
- */
1271
- onLazyLoad = new EventEmitter();
1272
- /**
1273
- * Callback to invoke in lazy mode to load new data.
1274
- * @param {MultiSelectRemoveEvent} event - Remove event.
1275
- * @group Emits
1276
- */
1277
- onRemove = new EventEmitter();
1278
- /**
1279
- * Callback to invoke when all data is selected.
1280
- * @param {MultiSelectSelectAllChangeEvent} event - Custom select event.
1281
- * @group Emits
1282
- */
1283
- onSelectAllChange = new EventEmitter();
1284
- overlayViewChild;
1285
- filterInputChild;
1286
- focusInputViewChild;
1287
- itemsViewChild;
1288
- scroller;
1289
- lastHiddenFocusableElementOnOverlay;
1290
- firstHiddenFocusableElementOnOverlay;
1291
- headerCheckboxViewChild;
1292
- footerFacet;
1293
- headerFacet;
1294
- _componentStyle = inject(MultiSelectStyle);
1295
- searchValue;
1296
- searchTimeout;
1297
- _selectAll = null;
1298
- _autoZIndex;
1299
- _baseZIndex;
1300
- _showTransitionOptions;
1301
- _hideTransitionOptions;
1302
- _defaultLabel;
1303
- _placeholder = signal(undefined);
1304
- _itemSize;
1305
- _selectionLimit;
1306
- _disableTooltip = false;
1307
- value;
1308
- _filteredOptions;
1309
- onModelChange = () => { };
1310
- onModelTouched = () => { };
1311
- valuesAsString;
1312
- focus;
1313
- filtered;
1314
- itemTemplate;
1315
- groupTemplate;
1316
- loaderTemplate;
1317
- headerTemplate;
1318
- filterTemplate;
1319
- footerTemplate;
1320
- emptyFilterTemplate;
1321
- emptyTemplate;
1322
- selectedItemsTemplate;
1323
- checkIconTemplate;
1324
- loadingIconTemplate;
1325
- filterIconTemplate;
1326
- removeTokenIconTemplate;
1327
- chipIconTemplate;
1328
- clearIconTemplate;
1329
- dropdownIconTemplate;
1330
- itemCheckboxIconTemplate;
1331
- headerCheckboxIconTemplate;
1332
- templates;
1333
- _itemTemplate;
1334
- _groupTemplate;
1335
- _loaderTemplate;
1336
- _headerTemplate;
1337
- _filterTemplate;
1338
- _footerTemplate;
1339
- _emptyFilterTemplate;
1340
- _emptyTemplate;
1341
- _selectedItemsTemplate;
1342
- _checkIconTemplate;
1343
- _loadingIconTemplate;
1344
- _filterIconTemplate;
1345
- _removeTokenIconTemplate;
1346
- _chipIconTemplate;
1347
- _clearIconTemplate;
1348
- _dropdownIconTemplate;
1349
- _itemCheckboxIconTemplate;
1350
- _headerCheckboxIconTemplate;
1351
- ngAfterContentInit() {
1352
- this.templates.forEach((item) => {
1353
- switch (item.getType()) {
1354
- case 'item':
1355
- this._itemTemplate = item.template;
1356
- break;
1357
- case 'group':
1358
- this._groupTemplate = item.template;
1359
- break;
1360
- case 'selectedItems':
1361
- this._selectedItemsTemplate = item.template;
1362
- break;
1363
- case 'header':
1364
- this._headerTemplate = item.template;
1365
- break;
1366
- case 'filter':
1367
- this._filterTemplate = item.template;
1368
- break;
1369
- case 'emptyfilter':
1370
- this._emptyFilterTemplate = item.template;
1371
- break;
1372
- case 'empty':
1373
- this._emptyTemplate = item.template;
1374
- break;
1375
- case 'footer':
1376
- this._footerTemplate = item.template;
1377
- break;
1378
- case 'loader':
1379
- this._loaderTemplate = item.template;
1380
- break;
1381
- case 'checkicon':
1382
- this._checkIconTemplate = item.template;
1383
- console.warn('checkicon is deprecated and will removed in future. Use itemcheckboxicon or headercheckboxicon templates instead.');
1384
- break;
1385
- case 'headercheckboxicon':
1386
- this._headerCheckboxIconTemplate = item.template;
1387
- break;
1388
- case 'loadingicon':
1389
- this._loadingIconTemplate = item.template;
1390
- break;
1391
- case 'filtericon':
1392
- this._filterIconTemplate = item.template;
1393
- break;
1394
- case 'removetokenicon':
1395
- this._removeTokenIconTemplate = item.template;
1396
- break;
1397
- case 'clearicon':
1398
- this._clearIconTemplate = item.template;
1399
- break;
1400
- case 'dropdownicon':
1401
- this._dropdownIconTemplate = item.template;
1402
- break;
1403
- case 'itemcheckboxicon':
1404
- this._itemCheckboxIconTemplate = item.template;
1405
- break;
1406
- case 'chipicon':
1407
- this._chipIconTemplate = item.template;
1408
- break;
1409
- default:
1410
- this._itemTemplate = item.template;
1411
- break;
1412
- }
1413
- });
1414
- }
1415
- headerCheckboxFocus;
1416
- filterOptions;
1417
- preventModelTouched;
1418
- preventDocumentDefault;
1419
- focused = false;
1420
- itemsWrapper;
1421
- _displaySelectedLabel = true;
1422
- _maxSelectedLabels = 3;
1423
- modelValue = signal(null);
1424
- _filterValue = signal(null);
1425
- _options = signal(null);
1426
- startRangeIndex = signal(-1);
1427
- focusedOptionIndex = signal(-1);
1428
- selectedOptions;
1429
- clickInProgress = false;
1430
- get hostClasses() {
1431
- const classes = [];
1432
- if (typeof this.rootClass === 'string') {
1433
- classes.push(this.rootClass);
1434
- }
1435
- else if (Array.isArray(this.rootClass)) {
1436
- classes.push(...this.rootClass);
1437
- }
1438
- else if (typeof this.rootClass === 'object') {
1439
- Object.keys(this.rootClass)
1440
- .filter((key) => this.rootClass[key])
1441
- .forEach((key) => classes.push(key));
1442
- }
1443
- if (this.styleClass) {
1444
- classes.push(this.styleClass);
1445
- }
1446
- return classes.join(' ');
1447
- }
1448
- get rootClass() {
1449
- return this._componentStyle.classes.root({ instance: this });
1450
- }
1451
- get labelClass() {
1452
- return this._componentStyle.classes.label({ instance: this });
1453
- }
1454
- get emptyMessageLabel() {
1455
- return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);
1456
- }
1457
- get emptyFilterMessageLabel() {
1458
- return this.emptyFilterMessage || this.config.getTranslation(TranslationKeys.EMPTY_FILTER_MESSAGE);
1459
- }
1460
- get filled() {
1461
- if (typeof this.modelValue() === 'string')
1462
- return !!this.modelValue();
1463
- return isNotEmpty(this.modelValue());
1464
- }
1465
- get isVisibleClearIcon() {
1466
- return this.modelValue() != null && this.modelValue() !== '' && isNotEmpty(this.modelValue()) && this.showClear && !this.disabled && this.filled;
1467
- }
1468
- get toggleAllAriaLabel() {
1469
- return this.config.translation.aria ? this.config.translation.aria[this.allSelected() ? 'selectAll' : 'unselectAll'] : undefined;
1470
- }
1471
- get closeAriaLabel() {
1472
- return this.config.translation.aria ? this.config.translation.aria.close : undefined;
1473
- }
1474
- get listLabel() {
1475
- return this.config.getTranslation(TranslationKeys.ARIA)['listLabel'];
1476
- }
1477
- get hasFluid() {
1478
- const nativeElement = this.el.nativeElement;
1479
- const fluidComponent = nativeElement.closest('p-fluid');
1480
- return this.fluid || !!fluidComponent;
1481
- }
1482
- getAllVisibleAndNonVisibleOptions() {
1483
- return this.group ? this.flatOptions(this.options) : this.options || [];
1484
- }
1485
- visibleOptions = computed(() => {
1486
- const options = this.getAllVisibleAndNonVisibleOptions();
1487
- const isArrayOfObjects = isArray(options) && isObject(options[0]);
1488
- if (this._filterValue()) {
1489
- let filteredOptions;
1490
- if (isArrayOfObjects) {
1491
- filteredOptions = this.filterService.filter(options, this.searchFields(), this._filterValue(), this.filterMatchMode, this.filterLocale);
1492
- }
1493
- else {
1494
- filteredOptions = options.filter((option) => option.toString().toLocaleLowerCase().includes(this._filterValue().toLocaleLowerCase()));
1495
- }
1496
- if (this.group) {
1497
- const optionGroups = this.options || [];
1498
- const filtered = [];
1499
- optionGroups.forEach((group) => {
1500
- const groupChildren = this.getOptionGroupChildren(group);
1501
- const filteredItems = groupChildren.filter((item) => filteredOptions.includes(item));
1502
- if (filteredItems.length > 0)
1503
- filtered.push({
1504
- ...group,
1505
- [typeof this.optionGroupChildren === 'string' ? this.optionGroupChildren : 'items']: [...filteredItems]
1506
- });
1507
- });
1508
- return this.flatOptions(filtered);
1509
- }
1510
- return filteredOptions;
1511
- }
1512
- return options;
1513
- });
1514
- label = computed(() => {
1515
- let label;
1516
- const modelValue = this.modelValue();
1517
- if (modelValue && modelValue.length && this.displaySelectedLabel) {
1518
- if (isNotEmpty(this.maxSelectedLabels) && modelValue.length > this.maxSelectedLabels) {
1519
- return this.getSelectedItemsLabel();
1520
- }
1521
- else {
1522
- label = '';
1523
- for (let i = 0; i < modelValue.length; i++) {
1524
- if (i !== 0) {
1525
- label += ', ';
1526
- }
1527
- label += this.getLabelByValue(modelValue[i]);
1528
- }
1529
- }
1530
- }
1531
- else {
1532
- label = this.placeholder() || this.defaultLabel || '';
1533
- }
1534
- return label;
1535
- });
1536
- chipSelectedItems = computed(() => {
1537
- return isNotEmpty(this.maxSelectedLabels) && this.modelValue() && this.modelValue().length > this.maxSelectedLabels ? this.modelValue().slice(0, this.maxSelectedLabels) : this.modelValue();
1538
- });
1539
- constructor(zone, filterService, overlayService) {
1540
- super();
1541
- this.zone = zone;
1542
- this.filterService = filterService;
1543
- this.overlayService = overlayService;
1544
- effect(() => {
1545
- const modelValue = this.modelValue();
1546
- const visibleOptions = this.visibleOptions();
1547
- if (visibleOptions && isNotEmpty(visibleOptions)) {
1548
- if (this.optionValue && this.optionLabel && modelValue) {
1549
- this.selectedOptions = visibleOptions.filter((option) => modelValue.includes(option[this.optionLabel]) || modelValue.includes(option[this.optionValue]));
1550
- }
1551
- else {
1552
- this.selectedOptions = modelValue;
1553
- }
1554
- this.cd.markForCheck();
1555
- }
1556
- });
1557
- }
1558
- ngOnInit() {
1559
- super.ngOnInit();
1560
- this.id = this.id || uuid('pn_id_');
1561
- this.autoUpdateModel();
1562
- if (this.filterBy) {
1563
- this.filterOptions = {
1564
- filter: (value) => this.onFilterInputChange(value),
1565
- reset: () => this.resetFilter()
1566
- };
1567
- }
1568
- }
1569
- maxSelectionLimitReached() {
1570
- return this.selectionLimit && this.modelValue() && this.modelValue().length === this.selectionLimit;
1571
- }
1572
- ngAfterViewInit() {
1573
- super.ngOnInit();
1574
- if (this.overlayVisible) {
1575
- this.show();
1576
- }
1577
- }
1578
- ngAfterViewChecked() {
1579
- if (this.filtered) {
1580
- this.zone.runOutsideAngular(() => {
1581
- setTimeout(() => {
1582
- this.overlayViewChild?.alignOverlay();
1583
- }, 1);
1584
- });
1585
- this.filtered = false;
1586
- }
1587
- }
1588
- flatOptions(options) {
1589
- return (options || []).reduce((result, option, index) => {
1590
- result.push({ optionGroup: option, group: true, index });
1591
- const optionGroupChildren = this.getOptionGroupChildren(option);
1592
- optionGroupChildren && optionGroupChildren.forEach((o) => result.push(o));
1593
- return result;
1594
- }, []);
1595
- }
1596
- autoUpdateModel() {
1597
- if (this.selectOnFocus && this.autoOptionFocus && !this.hasSelectedOption()) {
1598
- this.focusedOptionIndex.set(this.findFirstFocusedOptionIndex());
1599
- const value = this.getOptionValue(this.visibleOptions()[this.focusedOptionIndex()]);
1600
- this.onOptionSelect({ originalEvent: null, option: [value] });
1601
- }
1602
- }
1603
- /**
1604
- * Updates the model value.
1605
- * @group Method
1606
- */
1607
- updateModel(value, event) {
1608
- this.value = value;
1609
- this.onModelChange(value);
1610
- this.modelValue.set(value);
1611
- }
1612
- onInputClick(event) {
1613
- event.stopPropagation();
1614
- event.preventDefault();
1615
- this.focusedOptionIndex.set(-1);
1616
- }
1617
- onOptionSelect(event, isFocus = false, index = -1) {
1618
- const { originalEvent, option } = event;
1619
- if (this.disabled || this.isOptionDisabled(option)) {
1620
- return;
1621
- }
1622
- let selected = this.isSelected(option);
1623
- let value = null;
1624
- if (selected) {
1625
- value = this.modelValue().filter((val) => !equals(val, this.getOptionValue(option), this.equalityKey()));
1626
- }
1627
- else {
1628
- value = [...(this.modelValue() || []), this.getOptionValue(option)];
1629
- }
1630
- this.updateModel(value, originalEvent);
1631
- index !== -1 && this.focusedOptionIndex.set(index);
1632
- isFocus && focus(this.focusInputViewChild?.nativeElement);
1633
- this.onChange.emit({
1634
- originalEvent: event,
1635
- value: value,
1636
- itemValue: option
1637
- });
1638
- }
1639
- findSelectedOptionIndex() {
1640
- return this.hasSelectedOption() ? this.visibleOptions().findIndex((option) => this.isValidSelectedOption(option)) : -1;
1641
- }
1642
- onOptionSelectRange(event, start = -1, end = -1) {
1643
- start === -1 && (start = this.findNearestSelectedOptionIndex(end, true));
1644
- end === -1 && (end = this.findNearestSelectedOptionIndex(start));
1645
- if (start !== -1 && end !== -1) {
1646
- const rangeStart = Math.min(start, end);
1647
- const rangeEnd = Math.max(start, end);
1648
- const value = this.visibleOptions()
1649
- .slice(rangeStart, rangeEnd + 1)
1650
- .filter((option) => this.isValidOption(option))
1651
- .map((option) => this.getOptionValue(option));
1652
- this.updateModel(value, event);
1653
- }
1654
- }
1655
- searchFields() {
1656
- return (this.filterBy || this.optionLabel || 'label').split(',');
1657
- }
1658
- findNearestSelectedOptionIndex(index, firstCheckUp = false) {
1659
- let matchedOptionIndex = -1;
1660
- if (this.hasSelectedOption()) {
1661
- if (firstCheckUp) {
1662
- matchedOptionIndex = this.findPrevSelectedOptionIndex(index);
1663
- matchedOptionIndex = matchedOptionIndex === -1 ? this.findNextSelectedOptionIndex(index) : matchedOptionIndex;
1664
- }
1665
- else {
1666
- matchedOptionIndex = this.findNextSelectedOptionIndex(index);
1667
- matchedOptionIndex = matchedOptionIndex === -1 ? this.findPrevSelectedOptionIndex(index) : matchedOptionIndex;
1668
- }
1669
- }
1670
- return matchedOptionIndex > -1 ? matchedOptionIndex : index;
1671
- }
1672
- findPrevSelectedOptionIndex(index) {
1673
- const matchedOptionIndex = this.hasSelectedOption() && index > 0 ? findLastIndex(this.visibleOptions().slice(0, index), (option) => this.isValidSelectedOption(option)) : -1;
1674
- return matchedOptionIndex > -1 ? matchedOptionIndex : -1;
1675
- }
1676
- findFirstFocusedOptionIndex() {
1677
- const selectedIndex = this.findFirstSelectedOptionIndex();
1678
- return selectedIndex < 0 ? this.findFirstOptionIndex() : selectedIndex;
1679
- }
1680
- findFirstOptionIndex() {
1681
- return this.visibleOptions().findIndex((option) => this.isValidOption(option));
1682
- }
1683
- findFirstSelectedOptionIndex() {
1684
- return this.hasSelectedOption() ? this.visibleOptions().findIndex((option) => this.isValidSelectedOption(option)) : -1;
1685
- }
1686
- findNextSelectedOptionIndex(index) {
1687
- const matchedOptionIndex = this.hasSelectedOption() && index < this.visibleOptions().length - 1
1688
- ? this.visibleOptions()
1689
- .slice(index + 1)
1690
- .findIndex((option) => this.isValidSelectedOption(option))
1691
- : -1;
1692
- return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : -1;
1693
- }
1694
- equalityKey() {
1695
- return this.optionValue ? null : this.dataKey;
1696
- }
1697
- hasSelectedOption() {
1698
- return isNotEmpty(this.modelValue());
1699
- }
1700
- isValidSelectedOption(option) {
1701
- return this.isValidOption(option) && this.isSelected(option);
1702
- }
1703
- isOptionGroup(option) {
1704
- return (this.group || this.optionGroupLabel) && option.optionGroup && option.group;
1705
- }
1706
- isValidOption(option) {
1707
- return option && !(this.isOptionDisabled(option) || this.isOptionGroup(option));
1708
- }
1709
- isOptionDisabled(option) {
1710
- if (this.maxSelectionLimitReached() && !this.isSelected(option)) {
1711
- return true;
1712
- }
1713
- return this.optionDisabled ? resolveFieldData(option, this.optionDisabled) : option && option.disabled !== undefined ? option.disabled : false;
1714
- }
1715
- isSelected(option) {
1716
- const optionValue = this.getOptionValue(option);
1717
- return (this.modelValue() || []).some((value) => equals(value, optionValue, this.equalityKey()));
1718
- }
1719
- isOptionMatched(option) {
1720
- return this.isValidOption(option) && this.getOptionLabel(option).toString().toLocaleLowerCase(this.filterLocale).startsWith(this.searchValue.toLocaleLowerCase(this.filterLocale));
1721
- }
1722
- isEmpty() {
1723
- return !this._options() || (this.visibleOptions() && this.visibleOptions().length === 0);
1724
- }
1725
- getOptionIndex(index, scrollerOptions) {
1726
- return this.virtualScrollerDisabled ? index : scrollerOptions && scrollerOptions.getItemOptions(index)['index'];
1727
- }
1728
- getAriaPosInset(index) {
1729
- return ((this.optionGroupLabel
1730
- ? index -
1731
- this.visibleOptions()
1732
- .slice(0, index)
1733
- .filter((option) => this.isOptionGroup(option)).length
1734
- : index) + 1);
1735
- }
1736
- get ariaSetSize() {
1737
- return this.visibleOptions().filter((option) => !this.isOptionGroup(option)).length;
1738
- }
1739
- getLabelByValue(value) {
1740
- const options = this.group ? this.flatOptions(this._options()) : this._options() || [];
1741
- const matchedOption = options.find((option) => !this.isOptionGroup(option) && equals(this.getOptionValue(option), value, this.equalityKey()));
1742
- return matchedOption ? this.getOptionLabel(matchedOption) : null;
1743
- }
1744
- getSelectedItemsLabel() {
1745
- let pattern = /{(.*?)}/;
1746
- let message = this.selectedItemsLabel ? this.selectedItemsLabel : this.config.getTranslation(TranslationKeys.SELECTION_MESSAGE);
1747
- if (pattern.test(message)) {
1748
- return message.replace(message.match(pattern)[0], this.modelValue().length + '');
1749
- }
1750
- return message;
1751
- }
1752
- getOptionLabel(option) {
1753
- return this.optionLabel ? resolveFieldData(option, this.optionLabel) : option && option.label != undefined ? option.label : option;
1754
- }
1755
- getOptionValue(option) {
1756
- return this.optionValue ? resolveFieldData(option, this.optionValue) : !this.optionLabel && option && option.value !== undefined ? option.value : option;
1757
- }
1758
- getOptionGroupLabel(optionGroup) {
1759
- return this.optionGroupLabel ? resolveFieldData(optionGroup, this.optionGroupLabel) : optionGroup && optionGroup.label != undefined ? optionGroup.label : optionGroup;
1760
- }
1761
- getOptionGroupChildren(optionGroup) {
1762
- return this.optionGroupChildren ? resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;
1763
- }
1764
- onKeyDown(event) {
1765
- if (this.disabled) {
1766
- event.preventDefault();
1767
- return;
1768
- }
1769
- const metaKey = event.metaKey || event.ctrlKey;
1770
- switch (event.code) {
1771
- case 'ArrowDown':
1772
- this.onArrowDownKey(event);
1773
- break;
1774
- case 'ArrowUp':
1775
- this.onArrowUpKey(event);
1776
- break;
1777
- case 'Home':
1778
- this.onHomeKey(event);
1779
- break;
1780
- case 'End':
1781
- this.onEndKey(event);
1782
- break;
1783
- case 'PageDown':
1784
- this.onPageDownKey(event);
1785
- break;
1786
- case 'PageUp':
1787
- this.onPageUpKey(event);
1788
- break;
1789
- case 'Enter':
1790
- case 'Space':
1791
- this.onEnterKey(event);
1792
- break;
1793
- case 'Escape':
1794
- this.onEscapeKey(event);
1795
- break;
1796
- case 'Tab':
1797
- this.onTabKey(event);
1798
- break;
1799
- case 'ShiftLeft':
1800
- case 'ShiftRight':
1801
- this.onShiftKey();
1802
- break;
1803
- default:
1804
- if (event.code === 'KeyA' && metaKey) {
1805
- const value = this.visibleOptions()
1806
- .filter((option) => this.isValidOption(option))
1807
- .map((option) => this.getOptionValue(option));
1808
- this.updateModel(value, event);
1809
- event.preventDefault();
1810
- break;
1811
- }
1812
- if (!metaKey && isPrintableCharacter(event.key)) {
1813
- !this.overlayVisible && this.show();
1814
- this.searchOptions(event, event.key);
1815
- event.preventDefault();
1816
- }
1817
- break;
1818
- }
1819
- }
1820
- onFilterKeyDown(event) {
1821
- switch (event.code) {
1822
- case 'ArrowDown':
1823
- this.onArrowDownKey(event);
1824
- break;
1825
- case 'ArrowUp':
1826
- this.onArrowUpKey(event, true);
1827
- break;
1828
- case 'ArrowLeft':
1829
- case 'ArrowRight':
1830
- this.onArrowLeftKey(event, true);
1831
- break;
1832
- case 'Home':
1833
- this.onHomeKey(event, true);
1834
- break;
1835
- case 'End':
1836
- this.onEndKey(event, true);
1837
- break;
1838
- case 'Enter':
1839
- case 'NumpadEnter':
1840
- this.onEnterKey(event);
1841
- break;
1842
- case 'Escape':
1843
- this.onEscapeKey(event);
1844
- break;
1845
- case 'Tab':
1846
- this.onTabKey(event, true);
1847
- break;
1848
- default:
1849
- break;
1850
- }
1851
- }
1852
- onArrowLeftKey(event, pressedInInputText = false) {
1853
- pressedInInputText && this.focusedOptionIndex.set(-1);
1854
- }
1855
- onArrowDownKey(event) {
1856
- const optionIndex = this.focusedOptionIndex() !== -1 ? this.findNextOptionIndex(this.focusedOptionIndex()) : this.findFirstFocusedOptionIndex();
1857
- if (event.shiftKey) {
1858
- this.onOptionSelectRange(event, this.startRangeIndex(), optionIndex);
1859
- }
1860
- this.changeFocusedOptionIndex(event, optionIndex);
1861
- !this.overlayVisible && this.show();
1862
- event.preventDefault();
1863
- event.stopPropagation();
1864
- }
1865
- onArrowUpKey(event, pressedInInputText = false) {
1866
- if (event.altKey && !pressedInInputText) {
1867
- if (this.focusedOptionIndex() !== -1) {
1868
- this.onOptionSelect(event, this.visibleOptions()[this.focusedOptionIndex()]);
1869
- }
1870
- this.overlayVisible && this.hide();
1871
- event.preventDefault();
1872
- }
1873
- else {
1874
- const optionIndex = this.focusedOptionIndex() !== -1 ? this.findPrevOptionIndex(this.focusedOptionIndex()) : this.findLastFocusedOptionIndex();
1875
- if (event.shiftKey) {
1876
- this.onOptionSelectRange(event, optionIndex, this.startRangeIndex());
1877
- }
1878
- this.changeFocusedOptionIndex(event, optionIndex);
1879
- !this.overlayVisible && this.show();
1880
- event.preventDefault();
1881
- }
1882
- event.stopPropagation();
1883
- }
1884
- onHomeKey(event, pressedInInputText = false) {
1885
- const { currentTarget } = event;
1886
- if (pressedInInputText) {
1887
- const len = currentTarget.value.length;
1888
- currentTarget.setSelectionRange(0, event.shiftKey ? len : 0);
1889
- this.focusedOptionIndex.set(-1);
1890
- }
1891
- else {
1892
- let metaKey = event.metaKey || event.ctrlKey;
1893
- let optionIndex = this.findFirstOptionIndex();
1894
- if (event.shiftKey && metaKey) {
1895
- this.onOptionSelectRange(event, optionIndex, this.startRangeIndex());
1896
- }
1897
- this.changeFocusedOptionIndex(event, optionIndex);
1898
- !this.overlayVisible && this.show();
1899
- }
1900
- event.preventDefault();
1901
- }
1902
- onEndKey(event, pressedInInputText = false) {
1903
- const { currentTarget } = event;
1904
- if (pressedInInputText) {
1905
- const len = currentTarget.value.length;
1906
- currentTarget.setSelectionRange(event.shiftKey ? 0 : len, len);
1907
- this.focusedOptionIndex.set(-1);
1908
- }
1909
- else {
1910
- let metaKey = event.metaKey || event.ctrlKey;
1911
- let optionIndex = this.findLastFocusedOptionIndex();
1912
- if (event.shiftKey && metaKey) {
1913
- this.onOptionSelectRange(event, this.startRangeIndex(), optionIndex);
1914
- }
1915
- this.changeFocusedOptionIndex(event, optionIndex);
1916
- !this.overlayVisible && this.show();
1917
- }
1918
- event.preventDefault();
1919
- }
1920
- onPageDownKey(event) {
1921
- this.scrollInView(this.visibleOptions().length - 1);
1922
- event.preventDefault();
1923
- }
1924
- onPageUpKey(event) {
1925
- this.scrollInView(0);
1926
- event.preventDefault();
1927
- }
1928
- onEnterKey(event) {
1929
- if (!this.overlayVisible) {
1930
- this.onArrowDownKey(event);
1931
- }
1932
- else {
1933
- if (this.focusedOptionIndex() !== -1) {
1934
- if (event.shiftKey) {
1935
- this.onOptionSelectRange(event, this.focusedOptionIndex());
1936
- }
1937
- else {
1938
- this.onOptionSelect({ originalEvent: event, option: this.visibleOptions()[this.focusedOptionIndex()] });
1939
- }
1940
- }
1941
- }
1942
- event.preventDefault();
1943
- }
1944
- onEscapeKey(event) {
1945
- this.overlayVisible && this.hide(true);
1946
- event.preventDefault();
1947
- }
1948
- onDeleteKey(event) {
1949
- if (this.showClear) {
1950
- this.clear(event);
1951
- event.preventDefault();
1952
- }
1953
- }
1954
- onTabKey(event, pressedInInputText = false) {
1955
- if (!pressedInInputText) {
1956
- if (this.overlayVisible && this.hasFocusableElements()) {
1957
- focus(event.shiftKey ? this.lastHiddenFocusableElementOnOverlay.nativeElement : this.firstHiddenFocusableElementOnOverlay.nativeElement);
1958
- event.preventDefault();
1959
- }
1960
- else {
1961
- if (this.focusedOptionIndex() !== -1) {
1962
- this.onOptionSelect({ originalEvent: event, option: this.visibleOptions()[this.focusedOptionIndex()] });
1963
- }
1964
- this.overlayVisible && this.hide(this.filter);
1965
- }
1966
- }
1967
- }
1968
- onShiftKey() {
1969
- this.startRangeIndex.set(this.focusedOptionIndex());
1970
- }
1971
- onContainerClick(event) {
1972
- if (this.disabled || this.loading || this.readonly || event.target.isSameNode(this.focusInputViewChild?.nativeElement)) {
1973
- return;
1974
- }
1975
- if (!this.overlayViewChild || !this.overlayViewChild.el.nativeElement.contains(event.target)) {
1976
- if (this.clickInProgress) {
1977
- return;
1978
- }
1979
- this.clickInProgress = true;
1980
- setTimeout(() => {
1981
- this.clickInProgress = false;
1982
- }, 150);
1983
- this.overlayVisible ? this.hide(true) : this.show(true);
1984
- }
1985
- this.focusInputViewChild?.nativeElement.focus({ preventScroll: true });
1986
- this.onClick.emit(event);
1987
- this.cd.detectChanges();
1988
- }
1989
- onFirstHiddenFocus(event) {
1990
- const focusableEl = event.relatedTarget === this.focusInputViewChild?.nativeElement ? getFirstFocusableElement(this.overlayViewChild?.overlayViewChild?.nativeElement, ':not([data-p-hidden-focusable="true"])') : this.focusInputViewChild?.nativeElement;
1991
- focus(focusableEl);
1992
- }
1993
- onInputFocus(event) {
1994
- this.focused = true;
1995
- const focusedOptionIndex = this.focusedOptionIndex() !== -1 ? this.focusedOptionIndex() : this.overlayVisible && this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : -1;
1996
- this.focusedOptionIndex.set(focusedOptionIndex);
1997
- this.overlayVisible && this.scrollInView(this.focusedOptionIndex());
1998
- this.onFocus.emit({ originalEvent: event });
1999
- }
2000
- onInputBlur(event) {
2001
- this.focused = false;
2002
- this.onBlur.emit({ originalEvent: event });
2003
- if (!this.preventModelTouched) {
2004
- this.onModelTouched();
2005
- }
2006
- this.preventModelTouched = false;
2007
- }
2008
- onFilterInputChange(event) {
2009
- let value = event.target.value;
2010
- this._filterValue.set(value);
2011
- this.focusedOptionIndex.set(-1);
2012
- this.onFilter.emit({ originalEvent: event, filter: this._filterValue() });
2013
- !this.virtualScrollerDisabled && this.scroller.scrollToIndex(0);
2014
- setTimeout(() => {
2015
- this.overlayViewChild.alignOverlay();
2016
- });
2017
- }
2018
- onLastHiddenFocus(event) {
2019
- const focusableEl = event.relatedTarget === this.focusInputViewChild?.nativeElement ? getLastFocusableElement(this.overlayViewChild?.overlayViewChild?.nativeElement, ':not([data-p-hidden-focusable="true"])') : this.focusInputViewChild?.nativeElement;
2020
- focus(focusableEl);
2021
- }
2022
- onOptionMouseEnter(event, index) {
2023
- if (this.focusOnHover) {
2024
- this.changeFocusedOptionIndex(event, index);
2025
- }
2026
- }
2027
- onHeaderCheckboxKeyDown(event) {
2028
- if (this.disabled) {
2029
- event.preventDefault();
2030
- return;
2031
- }
2032
- switch (event.code) {
2033
- case 'Space':
2034
- this.onToggleAll(event);
2035
- break;
2036
- case 'Enter':
2037
- this.onToggleAll(event);
2038
- break;
2039
- default:
2040
- break;
2041
- }
2042
- }
2043
- onFilterBlur(event) {
2044
- this.focusedOptionIndex.set(-1);
2045
- }
2046
- onHeaderCheckboxFocus() {
2047
- this.headerCheckboxFocus = true;
2048
- }
2049
- onHeaderCheckboxBlur() {
2050
- this.headerCheckboxFocus = false;
2051
- }
2052
- onToggleAll(event) {
2053
- if (this.disabled || this.readonly) {
2054
- return;
2055
- }
2056
- if (this.selectAll != null) {
2057
- this.onSelectAllChange.emit({
2058
- originalEvent: event,
2059
- checked: !this.allSelected()
2060
- });
2061
- }
2062
- else {
2063
- // pre-selected disabled options should always be selected.
2064
- const selectedDisabledOptions = this.getAllVisibleAndNonVisibleOptions().filter((option) => this.isSelected(option) && (this.optionDisabled ? resolveFieldData(option, this.optionDisabled) : option && option.disabled !== undefined ? option.disabled : false));
2065
- const visibleOptions = this.allSelected()
2066
- ? this.visibleOptions().filter((option) => !this.isValidOption(option) && this.isSelected(option))
2067
- : this.visibleOptions().filter((option) => this.isSelected(option) || this.isValidOption(option));
2068
- const optionValues = [...selectedDisabledOptions, ...visibleOptions].map((option) => this.getOptionValue(option));
2069
- const value = [...new Set(optionValues)];
2070
- this.updateModel(value, event);
2071
- // because onToggleAll could have been called during filtering, this additional test needs to be performed before calling onSelectAllChange.emit
2072
- if (!value.length || value.length === this.getAllVisibleAndNonVisibleOptions().length) {
2073
- this.onSelectAllChange.emit({
2074
- originalEvent: event,
2075
- checked: !!value.length
2076
- });
2077
- }
2078
- }
2079
- if (this.partialSelected()) {
2080
- this.selectedOptions = null;
2081
- this.cd.markForCheck();
2082
- }
2083
- this.onChange.emit({ originalEvent: event, value: this.value });
2084
- DomHandler.focus(this.headerCheckboxViewChild?.inputViewChild?.nativeElement);
2085
- this.headerCheckboxFocus = true;
2086
- event.originalEvent.preventDefault();
2087
- event.originalEvent.stopPropagation();
2088
- }
2089
- changeFocusedOptionIndex(event, index) {
2090
- if (this.focusedOptionIndex() !== index) {
2091
- this.focusedOptionIndex.set(index);
2092
- this.scrollInView();
2093
- }
2094
- }
2095
- get virtualScrollerDisabled() {
2096
- return !this.virtualScroll;
2097
- }
2098
- scrollInView(index = -1) {
2099
- const id = index !== -1 ? `${this.id}_${index}` : this.focusedOptionId;
2100
- if (this.itemsViewChild && this.itemsViewChild.nativeElement) {
2101
- const element = findSingle(this.itemsViewChild.nativeElement, `li[id="${id}"]`);
2102
- if (element) {
2103
- element.scrollIntoView && element.scrollIntoView({ block: 'nearest', inline: 'nearest' });
2104
- }
2105
- else if (!this.virtualScrollerDisabled) {
2106
- setTimeout(() => {
2107
- this.virtualScroll && this.scroller?.scrollToIndex(index !== -1 ? index : this.focusedOptionIndex());
2108
- }, 0);
2109
- }
2110
- }
2111
- }
2112
- get focusedOptionId() {
2113
- return this.focusedOptionIndex() !== -1 ? `${this.id}_${this.focusedOptionIndex()}` : null;
2114
- }
2115
- writeValue(value) {
2116
- this.value = value;
2117
- this.modelValue.set(this.value);
2118
- this.cd.markForCheck();
2119
- }
2120
- registerOnChange(fn) {
2121
- this.onModelChange = fn;
2122
- }
2123
- registerOnTouched(fn) {
2124
- this.onModelTouched = fn;
2125
- }
2126
- setDisabledState(val) {
2127
- this.disabled = val;
2128
- this.cd.markForCheck();
2129
- }
2130
- allSelected() {
2131
- return this.selectAll !== null ? this.selectAll : isNotEmpty(this.visibleOptions()) && this.visibleOptions().every((option) => this.isOptionGroup(option) || this.isOptionDisabled(option) || this.isSelected(option));
2132
- }
2133
- partialSelected() {
2134
- return this.selectedOptions && this.selectedOptions.length > 0 && this.selectedOptions.length < this.options.length;
2135
- }
2136
- /**
2137
- * Displays the panel.
2138
- * @group Method
2139
- */
2140
- show(isFocus) {
2141
- this.overlayVisible = true;
2142
- const focusedOptionIndex = this.focusedOptionIndex() !== -1 ? this.focusedOptionIndex() : this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : this.findSelectedOptionIndex();
2143
- this.focusedOptionIndex.set(focusedOptionIndex);
2144
- if (isFocus) {
2145
- focus(this.focusInputViewChild?.nativeElement);
2146
- }
2147
- this.cd.markForCheck();
2148
- }
2149
- /**
2150
- * Hides the panel.
2151
- * @group Method
2152
- */
2153
- hide(isFocus) {
2154
- this.overlayVisible = false;
2155
- this.focusedOptionIndex.set(-1);
2156
- if (this.filter && this.resetFilterOnHide) {
2157
- this.resetFilter();
2158
- }
2159
- if (this.overlayOptions?.mode === 'modal') {
2160
- unblockBodyScroll();
2161
- }
2162
- isFocus && focus(this.focusInputViewChild?.nativeElement);
2163
- this.onPanelHide.emit();
2164
- this.cd.markForCheck();
2165
- }
2166
- onOverlayAnimationStart(event) {
2167
- switch (event.toState) {
2168
- case 'visible':
2169
- this.itemsWrapper = findSingle(this.overlayViewChild?.overlayViewChild?.nativeElement, this.virtualScroll ? '.p-scroller' : '.p-multiselect-items-wrapper');
2170
- this.virtualScroll && this.scroller?.setContentEl(this.itemsViewChild?.nativeElement);
2171
- if (this._options() && this._options().length) {
2172
- if (this.virtualScroll) {
2173
- const selectedIndex = isNotEmpty(this.modelValue()) ? this.focusedOptionIndex() : -1;
2174
- if (selectedIndex !== -1) {
2175
- this.scroller?.scrollToIndex(selectedIndex);
2176
- }
2177
- }
2178
- else {
2179
- let selectedListItem = findSingle(this.itemsWrapper, '[data-p-highlight="true"]');
2180
- if (selectedListItem) {
2181
- selectedListItem.scrollIntoView({ block: 'nearest', inline: 'nearest' });
2182
- }
2183
- }
2184
- }
2185
- if (this.filterInputChild && this.filterInputChild.nativeElement) {
2186
- this.preventModelTouched = true;
2187
- if (this.autofocusFilter) {
2188
- this.filterInputChild.nativeElement.focus();
2189
- }
2190
- }
2191
- this.onPanelShow.emit();
2192
- case 'void':
2193
- this.itemsWrapper = null;
2194
- this.onModelTouched();
2195
- break;
2196
- }
2197
- }
2198
- resetFilter() {
2199
- if (this.filterInputChild && this.filterInputChild.nativeElement) {
2200
- this.filterInputChild.nativeElement.value = '';
2201
- }
2202
- this._filterValue.set(null);
2203
- this._filteredOptions = null;
2204
- }
2205
- close(event) {
2206
- this.hide();
2207
- event.preventDefault();
2208
- event.stopPropagation();
2209
- }
2210
- clear(event) {
2211
- this.value = null;
2212
- this.updateModel(null, event);
2213
- this.selectedOptions = null;
2214
- this.onClear.emit();
2215
- this._disableTooltip = true;
2216
- event.stopPropagation();
2217
- }
2218
- labelContainerMouseLeave() {
2219
- if (this._disableTooltip)
2220
- this._disableTooltip = false;
2221
- }
2222
- removeOption(optionValue, event) {
2223
- let value = this.modelValue().filter((val) => !equals(val, optionValue, this.equalityKey()));
2224
- this.updateModel(value, event);
2225
- this.onChange.emit({
2226
- originalEvent: event,
2227
- value: value,
2228
- itemValue: optionValue
2229
- });
2230
- this.onRemove.emit({
2231
- newValue: value,
2232
- removed: optionValue
2233
- });
2234
- event && event.stopPropagation();
2235
- }
2236
- findNextItem(item) {
2237
- let nextItem = item.nextElementSibling;
2238
- if (nextItem)
2239
- return hasClass(nextItem.children[0], 'p-disabled') || isHidden(nextItem.children[0]) || hasClass(nextItem, 'p-multiselect-item-group') ? this.findNextItem(nextItem) : nextItem.children[0];
2240
- else
2241
- return null;
2242
- }
2243
- findPrevItem(item) {
2244
- let prevItem = item.previousElementSibling;
2245
- if (prevItem)
2246
- return hasClass(prevItem.children[0], 'p-disabled') || isHidden(prevItem.children[0]) || hasClass(prevItem, 'p-multiselect-item-group') ? this.findPrevItem(prevItem) : prevItem.children[0];
2247
- else
2248
- return null;
2249
- }
2250
- findNextOptionIndex(index) {
2251
- const matchedOptionIndex = index < this.visibleOptions().length - 1
2252
- ? this.visibleOptions()
2253
- .slice(index + 1)
2254
- .findIndex((option) => this.isValidOption(option))
2255
- : -1;
2256
- return matchedOptionIndex > -1 ? matchedOptionIndex + index + 1 : index;
2257
- }
2258
- findPrevOptionIndex(index) {
2259
- const matchedOptionIndex = index > 0 ? findLastIndex(this.visibleOptions().slice(0, index), (option) => this.isValidOption(option)) : -1;
2260
- return matchedOptionIndex > -1 ? matchedOptionIndex : index;
2261
- }
2262
- findLastSelectedOptionIndex() {
2263
- return this.hasSelectedOption() ? findLastIndex(this.visibleOptions(), (option) => this.isValidSelectedOption(option)) : -1;
2264
- }
2265
- findLastFocusedOptionIndex() {
2266
- const selectedIndex = this.findLastSelectedOptionIndex();
2267
- return selectedIndex < 0 ? this.findLastOptionIndex() : selectedIndex;
2268
- }
2269
- findLastOptionIndex() {
2270
- return findLastIndex(this.visibleOptions(), (option) => this.isValidOption(option));
2271
- }
2272
- searchOptions(event, char) {
2273
- this.searchValue = (this.searchValue || '') + char;
2274
- let optionIndex = -1;
2275
- let matched = false;
2276
- if (this.focusedOptionIndex() !== -1) {
2277
- optionIndex = this.visibleOptions()
2278
- .slice(this.focusedOptionIndex())
2279
- .findIndex((option) => this.isOptionMatched(option));
2280
- optionIndex =
2281
- optionIndex === -1
2282
- ? this.visibleOptions()
2283
- .slice(0, this.focusedOptionIndex())
2284
- .findIndex((option) => this.isOptionMatched(option))
2285
- : optionIndex + this.focusedOptionIndex();
2286
- }
2287
- else {
2288
- optionIndex = this.visibleOptions().findIndex((option) => this.isOptionMatched(option));
2289
- }
2290
- if (optionIndex !== -1) {
2291
- matched = true;
2292
- }
2293
- if (optionIndex === -1 && this.focusedOptionIndex() === -1) {
2294
- optionIndex = this.findFirstFocusedOptionIndex();
2295
- }
2296
- if (optionIndex !== -1) {
2297
- this.changeFocusedOptionIndex(event, optionIndex);
2298
- }
2299
- if (this.searchTimeout) {
2300
- clearTimeout(this.searchTimeout);
2301
- }
2302
- this.searchTimeout = setTimeout(() => {
2303
- this.searchValue = '';
2304
- this.searchTimeout = null;
2305
- }, 500);
2306
- return matched;
2307
- }
2308
- activateFilter() {
2309
- if (this.hasFilter() && this._options) {
2310
- if (this.group) {
2311
- let filteredGroups = [];
2312
- for (let optgroup of this.options) {
2313
- let filteredSubOptions = this.filterService.filter(this.getOptionGroupChildren(optgroup), this.searchFields(), this.filterValue, this.filterMatchMode, this.filterLocale);
2314
- if (filteredSubOptions && filteredSubOptions.length) {
2315
- filteredGroups.push({ ...optgroup, ...{ [this.optionGroupChildren]: filteredSubOptions } });
2316
- }
2317
- }
2318
- this._filteredOptions = filteredGroups;
2319
- }
2320
- else {
2321
- this._filteredOptions = this.filterService.filter(this.options, this.searchFields(), this.filterValue, this.filterMatchMode, this.filterLocale);
2322
- }
2323
- }
2324
- else {
2325
- this._filteredOptions = null;
2326
- }
2327
- }
2328
- hasFocusableElements() {
2329
- return getFocusableElements(this.overlayViewChild.overlayViewChild.nativeElement, ':not([data-p-hidden-focusable="true"])').length > 0;
2330
- }
2331
- hasFilter() {
2332
- return this._filterValue() && this._filterValue().trim().length > 0;
2333
- }
2334
- static ɵfac = function MultiSelect_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MultiSelect)(i0.ɵɵdirectiveInject(i0.NgZone), i0.ɵɵdirectiveInject(i3.FilterService), i0.ɵɵdirectiveInject(i3.OverlayService)); };
2335
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MultiSelect, selectors: [["p-multiSelect"], ["p-multiselect"], ["p-multi-select"]], contentQueries: function MultiSelect_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
2336
- i0.ɵɵcontentQuery(dirIndex, Footer, 5);
2337
- i0.ɵɵcontentQuery(dirIndex, Header, 5);
2338
- i0.ɵɵcontentQuery(dirIndex, _c4, 4);
2339
- i0.ɵɵcontentQuery(dirIndex, _c5, 4);
2340
- i0.ɵɵcontentQuery(dirIndex, _c6, 4);
2341
- i0.ɵɵcontentQuery(dirIndex, _c7, 4);
2342
- i0.ɵɵcontentQuery(dirIndex, _c8, 4);
2343
- i0.ɵɵcontentQuery(dirIndex, _c9, 4);
2344
- i0.ɵɵcontentQuery(dirIndex, _c10, 4);
2345
- i0.ɵɵcontentQuery(dirIndex, _c11, 4);
2346
- i0.ɵɵcontentQuery(dirIndex, _c12, 4);
2347
- i0.ɵɵcontentQuery(dirIndex, _c13, 4);
2348
- i0.ɵɵcontentQuery(dirIndex, _c14, 4);
2349
- i0.ɵɵcontentQuery(dirIndex, _c15, 4);
2350
- i0.ɵɵcontentQuery(dirIndex, _c16, 4);
2351
- i0.ɵɵcontentQuery(dirIndex, _c17, 4);
2352
- i0.ɵɵcontentQuery(dirIndex, _c18, 4);
2353
- i0.ɵɵcontentQuery(dirIndex, _c19, 4);
2354
- i0.ɵɵcontentQuery(dirIndex, _c20, 4);
2355
- i0.ɵɵcontentQuery(dirIndex, _c21, 4);
2356
- i0.ɵɵcontentQuery(dirIndex, PrimeTemplate, 4);
2357
- } if (rf & 2) {
2358
- let _t;
2359
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.footerFacet = _t.first);
2360
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headerFacet = _t.first);
2361
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.itemTemplate = _t.first);
2362
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.groupTemplate = _t.first);
2363
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.loaderTemplate = _t.first);
2364
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headerTemplate = _t.first);
2365
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.filterTemplate = _t.first);
2366
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.footerTemplate = _t.first);
2367
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.emptyFilterTemplate = _t.first);
2368
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.emptyTemplate = _t.first);
2369
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.selectedItemsTemplate = _t.first);
2370
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.checkIconTemplate = _t.first);
2371
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.loadingIconTemplate = _t.first);
2372
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.filterIconTemplate = _t.first);
2373
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.removeTokenIconTemplate = _t.first);
2374
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.chipIconTemplate = _t.first);
2375
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.clearIconTemplate = _t.first);
2376
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropdownIconTemplate = _t.first);
2377
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.itemCheckboxIconTemplate = _t.first);
2378
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headerCheckboxIconTemplate = _t.first);
2379
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templates = _t);
2380
- } }, viewQuery: function MultiSelect_Query(rf, ctx) { if (rf & 1) {
2381
- i0.ɵɵviewQuery(_c22, 5);
2382
- i0.ɵɵviewQuery(_c23, 5);
2383
- i0.ɵɵviewQuery(_c24, 5);
2384
- i0.ɵɵviewQuery(_c25, 5);
2385
- i0.ɵɵviewQuery(_c26, 5);
2386
- i0.ɵɵviewQuery(_c27, 5);
2387
- i0.ɵɵviewQuery(_c28, 5);
2388
- i0.ɵɵviewQuery(_c29, 5);
2389
- } if (rf & 2) {
2390
- let _t;
2391
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.overlayViewChild = _t.first);
2392
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.filterInputChild = _t.first);
2393
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.focusInputViewChild = _t.first);
2394
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.itemsViewChild = _t.first);
2395
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.scroller = _t.first);
2396
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.lastHiddenFocusableElementOnOverlay = _t.first);
2397
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.firstHiddenFocusableElementOnOverlay = _t.first);
2398
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headerCheckboxViewChild = _t.first);
2399
- } }, hostVars: 5, hostBindings: function MultiSelect_HostBindings(rf, ctx) { if (rf & 1) {
2400
- i0.ɵɵlistener("click", function MultiSelect_click_HostBindingHandler($event) { return ctx.onContainerClick($event); });
2401
- } if (rf & 2) {
2402
- i0.ɵɵattribute("id", ctx.id);
2403
- i0.ɵɵstyleMap(ctx.style);
2404
- i0.ɵɵclassMap(ctx.hostClasses);
2405
- } }, inputs: { id: "id", ariaLabel: "ariaLabel", style: "style", styleClass: "styleClass", panelStyle: "panelStyle", panelStyleClass: "panelStyleClass", inputId: "inputId", disabled: [2, "disabled", "disabled", booleanAttribute], fluid: [2, "fluid", "fluid", booleanAttribute], readonly: [2, "readonly", "readonly", booleanAttribute], group: [2, "group", "group", booleanAttribute], filter: [2, "filter", "filter", booleanAttribute], filterPlaceHolder: "filterPlaceHolder", filterLocale: "filterLocale", overlayVisible: [2, "overlayVisible", "overlayVisible", booleanAttribute], tabindex: [2, "tabindex", "tabindex", numberAttribute], variant: "variant", appendTo: "appendTo", dataKey: "dataKey", name: "name", ariaLabelledBy: "ariaLabelledBy", displaySelectedLabel: "displaySelectedLabel", maxSelectedLabels: "maxSelectedLabels", selectionLimit: [2, "selectionLimit", "selectionLimit", numberAttribute], selectedItemsLabel: "selectedItemsLabel", showToggleAll: [2, "showToggleAll", "showToggleAll", booleanAttribute], emptyFilterMessage: "emptyFilterMessage", emptyMessage: "emptyMessage", resetFilterOnHide: [2, "resetFilterOnHide", "resetFilterOnHide", booleanAttribute], dropdownIcon: "dropdownIcon", chipIcon: "chipIcon", optionLabel: "optionLabel", optionValue: "optionValue", optionDisabled: "optionDisabled", optionGroupLabel: "optionGroupLabel", optionGroupChildren: "optionGroupChildren", showHeader: [2, "showHeader", "showHeader", booleanAttribute], filterBy: "filterBy", scrollHeight: "scrollHeight", lazy: [2, "lazy", "lazy", booleanAttribute], virtualScroll: [2, "virtualScroll", "virtualScroll", booleanAttribute], loading: [2, "loading", "loading", booleanAttribute], virtualScrollItemSize: [2, "virtualScrollItemSize", "virtualScrollItemSize", numberAttribute], loadingIcon: "loadingIcon", virtualScrollOptions: "virtualScrollOptions", overlayOptions: "overlayOptions", ariaFilterLabel: "ariaFilterLabel", filterMatchMode: "filterMatchMode", tooltip: "tooltip", tooltipPosition: "tooltipPosition", tooltipPositionStyle: "tooltipPositionStyle", tooltipStyleClass: "tooltipStyleClass", autofocusFilter: [2, "autofocusFilter", "autofocusFilter", booleanAttribute], display: "display", autocomplete: "autocomplete", size: "size", showClear: [2, "showClear", "showClear", booleanAttribute], autofocus: [2, "autofocus", "autofocus", booleanAttribute], autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", defaultLabel: "defaultLabel", placeholder: "placeholder", options: "options", filterValue: "filterValue", itemSize: "itemSize", selectAll: "selectAll", focusOnHover: [2, "focusOnHover", "focusOnHover", booleanAttribute], filterFields: "filterFields", selectOnFocus: [2, "selectOnFocus", "selectOnFocus", booleanAttribute], autoOptionFocus: [2, "autoOptionFocus", "autoOptionFocus", booleanAttribute] }, outputs: { onChange: "onChange", onFilter: "onFilter", onFocus: "onFocus", onBlur: "onBlur", onClick: "onClick", onClear: "onClear", onPanelShow: "onPanelShow", onPanelHide: "onPanelHide", onLazyLoad: "onLazyLoad", onRemove: "onRemove", onSelectAllChange: "onSelectAllChange" }, standalone: true, features: [i0.ɵɵProvidersFeature([MULTISELECT_VALUE_ACCESSOR, MultiSelectStyle]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], ngContentSelectors: _c31, decls: 16, vars: 39, consts: [["focusInput", ""], ["elseBlock", ""], ["overlay", ""], ["content", ""], ["token", ""], ["removeicon", ""], ["firstHiddenFocusableEl", ""], ["buildInItems", ""], ["lastHiddenFocusableEl", ""], ["builtInFilterElement", ""], ["headerCheckbox", ""], ["checkboxicon", ""], ["filterInput", ""], ["scroller", ""], ["loader", ""], ["items", ""], [1, "p-hidden-accessible"], ["role", "combobox", 3, "focus", "blur", "keydown", "pTooltip", "tooltipPosition", "positionStyle", "tooltipStyleClass", "pAutoFocus"], [1, "p-multiselect-label-container", 3, "mouseleave", "pTooltip", "tooltipDisabled", "tooltipPosition", "positionStyle", "tooltipStyleClass"], [3, "ngClass"], [4, "ngIf"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "p-multiselect-dropdown"], [4, "ngIf", "ngIfElse"], [3, "visibleChange", "onAnimationStart", "onHide", "visible", "options", "target", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], ["class", "p-multiselect-chip-item", 4, "ngFor", "ngForOf"], [1, "p-multiselect-chip-item"], ["styleClass", "p-multiselect-chip", 3, "onRemove", "label", "removable", "removeIcon"], ["class", "p-multiselect-chip-icon", 3, "click", 4, "ngIf"], [1, "p-multiselect-chip-icon", 3, "click"], ["class", "p-multiselect-clear-icon", 3, "click", 4, "ngIf"], [1, "p-multiselect-clear-icon", 3, "click"], [4, "ngTemplateOutlet"], ["aria-hidden", "true", 3, "ngClass", 4, "ngIf"], ["aria-hidden", "true", 3, "class", 4, "ngIf"], ["aria-hidden", "true", 3, "ngClass"], ["aria-hidden", "true"], ["class", "p-multiselect-dropdown-icon", 4, "ngIf"], ["class", "p-multiselect-dropdown-icon", 3, "ngClass", 4, "ngIf"], [3, "styleClass", 4, "ngIf"], [1, "p-multiselect-dropdown-icon", 3, "ngClass"], [3, "styleClass"], [1, "p-multiselect-dropdown-icon"], [3, "ngClass", "ngStyle"], ["role", "presentation", 1, "p-hidden-accessible", "p-hidden-focusable", 3, "focus"], ["class", "p-multiselect-header", 4, "ngIf"], [1, "p-multiselect-list-container"], [3, "items", "style", "itemSize", "autoSize", "tabindex", "lazy", "options", "onLazyLoad", 4, "ngIf"], [1, "p-multiselect-header"], [3, "ngModel", "binary", "variant", "disabled", "onChange", 4, "ngIf"], ["class", "p-multiselect-filter-container", 4, "ngIf"], [3, "onChange", "ngModel", "binary", "variant", "disabled"], [1, "p-multiselect-filter-container"], ["pInputText", "", "type", "text", "role", "searchbox", 1, "p-multiselect-filter", 3, "input", "keydown", "click", "blur", "variant", "value", "disabled"], ["class", "p-multiselect-filter-icon", 4, "ngIf"], [1, "p-multiselect-filter-icon"], [3, "onLazyLoad", "items", "itemSize", "autoSize", "tabindex", "lazy", "options"], ["role", "listbox", "aria-multiselectable", "true", 1, "p-multiselect-list", 3, "ngClass"], ["ngFor", "", 3, "ngForOf"], ["class", "p-multiselect-empty-message", "role", "option", 3, "ngStyle", 4, "ngIf"], ["role", "option", 1, "p-multiselect-option-group", 3, "ngStyle"], [3, "onClick", "onMouseEnter", "id", "option", "selected", "label", "disabled", "template", "checkIconTemplate", "itemCheckboxIconTemplate", "itemSize", "focused", "ariaPosInset", "ariaSetSize", "variant"], ["role", "option", 1, "p-multiselect-empty-message", 3, "ngStyle"]], template: function MultiSelect_Template(rf, ctx) { if (rf & 1) {
2406
- const _r1 = i0.ɵɵgetCurrentView();
2407
- i0.ɵɵprojectionDef(_c30);
2408
- i0.ɵɵelementStart(0, "div", 16)(1, "input", 17, 0);
2409
- i0.ɵɵlistener("focus", function MultiSelect_Template_input_focus_1_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onInputFocus($event)); })("blur", function MultiSelect_Template_input_blur_1_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onInputBlur($event)); })("keydown", function MultiSelect_Template_input_keydown_1_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyDown($event)); });
2410
- i0.ɵɵelementEnd()();
2411
- i0.ɵɵelementStart(3, "div", 18);
2412
- i0.ɵɵlistener("mouseleave", function MultiSelect_Template_div_mouseleave_3_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.labelContainerMouseLeave()); });
2413
- i0.ɵɵelementStart(4, "div", 19);
2414
- i0.ɵɵtemplate(5, MultiSelect_ng_container_5_Template, 3, 2, "ng-container", 20)(6, MultiSelect_ng_container_6_Template, 1, 0, "ng-container", 21);
2415
- i0.ɵɵelementEnd()();
2416
- i0.ɵɵtemplate(7, MultiSelect_ng_container_7_Template, 3, 2, "ng-container", 20);
2417
- i0.ɵɵelementStart(8, "div", 22);
2418
- i0.ɵɵtemplate(9, MultiSelect_ng_container_9_Template, 3, 2, "ng-container", 23)(10, MultiSelect_ng_template_10_Template, 2, 2, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
2419
- i0.ɵɵelementEnd();
2420
- i0.ɵɵelementStart(12, "p-overlay", 24, 2);
2421
- i0.ɵɵtwoWayListener("visibleChange", function MultiSelect_Template_p_overlay_visibleChange_12_listener($event) { i0.ɵɵrestoreView(_r1); i0.ɵɵtwoWayBindingSet(ctx.overlayVisible, $event) || (ctx.overlayVisible = $event); return i0.ɵɵresetView($event); });
2422
- i0.ɵɵlistener("onAnimationStart", function MultiSelect_Template_p_overlay_onAnimationStart_12_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onOverlayAnimationStart($event)); })("onHide", function MultiSelect_Template_p_overlay_onHide_12_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.hide()); });
2423
- i0.ɵɵtemplate(14, MultiSelect_ng_template_14_Template, 13, 18, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
2424
- i0.ɵɵelementEnd();
2425
- } if (rf & 2) {
2426
- let tmp_15_0;
2427
- const elseBlock_r24 = i0.ɵɵreference(11);
2428
- i0.ɵɵattribute("data-p-hidden-accessible", true);
2429
- i0.ɵɵadvance();
2430
- i0.ɵɵproperty("pTooltip", ctx.tooltip)("tooltipPosition", ctx.tooltipPosition)("positionStyle", ctx.tooltipPositionStyle)("tooltipStyleClass", ctx.tooltipStyleClass)("pAutoFocus", ctx.autofocus);
2431
- i0.ɵɵattribute("aria-disabled", ctx.disabled)("id", ctx.inputId)("aria-label", ctx.ariaLabel)("aria-labelledby", ctx.ariaLabelledBy)("aria-haspopup", "listbox")("aria-expanded", (tmp_15_0 = ctx.overlayVisible) !== null && tmp_15_0 !== undefined ? tmp_15_0 : false)("aria-controls", ctx.overlayVisible ? ctx.id + "_list" : null)("tabindex", !ctx.disabled ? ctx.tabindex : -1)("aria-activedescendant", ctx.focused ? ctx.focusedOptionId : undefined)("value", ctx.label() || "empty");
2432
- i0.ɵɵadvance(2);
2433
- i0.ɵɵproperty("pTooltip", ctx.tooltip)("tooltipDisabled", ctx._disableTooltip)("tooltipPosition", ctx.tooltipPosition)("positionStyle", ctx.tooltipPositionStyle)("tooltipStyleClass", ctx.tooltipStyleClass);
2434
- i0.ɵɵadvance();
2435
- i0.ɵɵproperty("ngClass", ctx.labelClass);
2436
- i0.ɵɵadvance();
2437
- i0.ɵɵproperty("ngIf", !ctx.selectedItemsTemplate && !ctx._selectedItemsTemplate);
2438
- i0.ɵɵadvance();
2439
- i0.ɵɵproperty("ngTemplateOutlet", ctx.selectedItemsTemplate || ctx._selectedItemsTemplate)("ngTemplateOutletContext", i0.ɵɵpureFunction2(36, _c32, ctx.selectedOptions, ctx.removeOption.bind(ctx)));
2440
- i0.ɵɵadvance();
2441
- i0.ɵɵproperty("ngIf", ctx.isVisibleClearIcon);
2442
- i0.ɵɵadvance(2);
2443
- i0.ɵɵproperty("ngIf", ctx.loading)("ngIfElse", elseBlock_r24);
2444
- i0.ɵɵadvance(3);
2445
- i0.ɵɵtwoWayProperty("visible", ctx.overlayVisible);
2446
- i0.ɵɵproperty("options", ctx.overlayOptions)("target", "@parent")("appendTo", ctx.appendTo)("autoZIndex", ctx.autoZIndex)("baseZIndex", ctx.baseZIndex)("showTransitionOptions", ctx.showTransitionOptions)("hideTransitionOptions", ctx.hideTransitionOptions);
2447
- } }, dependencies: [CommonModule, i1.NgClass, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, i1.NgStyle, MultiSelectItem, Overlay, SharedModule, Tooltip, Scroller, AutoFocus, CheckIcon, SearchIcon, TimesIcon, ChevronDownIcon, IconField, InputIcon, InputText, Chip, Checkbox, FormsModule, i2.NgControlStatus, i2.NgModel], encapsulation: 2, changeDetection: 0 });
2448
- }
2449
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MultiSelect, [{
2450
- type: Component,
2451
- args: [{
2452
- selector: 'p-multiSelect, p-multiselect, p-multi-select',
2453
- standalone: true,
2454
- imports: [CommonModule, MultiSelectItem, Overlay, SharedModule, Tooltip, Scroller, AutoFocus, CheckIcon, SearchIcon, TimesIcon, ChevronDownIcon, IconField, InputIcon, InputText, Chip, Checkbox, FormsModule],
2455
- template: `
2456
- <div class="p-hidden-accessible" [attr.data-p-hidden-accessible]="true">
2457
- <input
2458
- #focusInput
2459
- [pTooltip]="tooltip"
2460
- [tooltipPosition]="tooltipPosition"
2461
- [positionStyle]="tooltipPositionStyle"
2462
- [tooltipStyleClass]="tooltipStyleClass"
2463
- [attr.aria-disabled]="disabled"
2464
- [attr.id]="inputId"
2465
- role="combobox"
2466
- [attr.aria-label]="ariaLabel"
2467
- [attr.aria-labelledby]="ariaLabelledBy"
2468
- [attr.aria-haspopup]="'listbox'"
2469
- [attr.aria-expanded]="overlayVisible ?? false"
2470
- [attr.aria-controls]="overlayVisible ? id + '_list' : null"
2471
- [attr.tabindex]="!disabled ? tabindex : -1"
2472
- [attr.aria-activedescendant]="focused ? focusedOptionId : undefined"
2473
- (focus)="onInputFocus($event)"
2474
- (blur)="onInputBlur($event)"
2475
- (keydown)="onKeyDown($event)"
2476
- [pAutoFocus]="autofocus"
2477
- [attr.value]="label() || 'empty'"
2478
- />
2479
- </div>
2480
- <div
2481
- class="p-multiselect-label-container"
2482
- [pTooltip]="tooltip"
2483
- (mouseleave)="labelContainerMouseLeave()"
2484
- [tooltipDisabled]="_disableTooltip"
2485
- [tooltipPosition]="tooltipPosition"
2486
- [positionStyle]="tooltipPositionStyle"
2487
- [tooltipStyleClass]="tooltipStyleClass"
2488
- >
2489
- <div [ngClass]="labelClass">
2490
- <ng-container *ngIf="!selectedItemsTemplate && !_selectedItemsTemplate">
2491
- <ng-container *ngIf="display === 'comma'">{{ label() || 'empty' }}</ng-container>
2492
- <ng-container *ngIf="display === 'chip'">
2493
- <div #token *ngFor="let item of chipSelectedItems(); let i = index" class="p-multiselect-chip-item">
2494
- <p-chip styleClass="p-multiselect-chip" [label]="getLabelByValue(item)" [removable]="true" (onRemove)="removeOption(item, $event)" [removeIcon]="chipIcon">
2495
- <ng-container *ngIf="chipIconTemplate || _chipIconTemplate || removeTokenIconTemplate || _removeTokenIconTemplate">
2496
- <ng-template #removeicon>
2497
- <ng-container *ngIf="!disabled">
2498
- <span
2499
- class="p-multiselect-chip-icon"
2500
- *ngIf="chipIconTemplate || _chipIconTemplate || removeTokenIconTemplate || _removeTokenIconTemplate"
2501
- (click)="removeOption(item, $event)"
2502
- [attr.data-pc-section]="'clearicon'"
2503
- [attr.aria-hidden]="true"
2504
- >
2505
- <ng-container *ngTemplateOutlet="chipIconTemplate || _chipIconTemplate || removeTokenIconTemplate || _removeTokenIconTemplate; context: { class: 'p-multiselect-chip-icon' }"></ng-container>
2506
- </span>
2507
- </ng-container>
2508
- </ng-template>
2509
- </ng-container>
2510
- </p-chip>
2511
- </div>
2512
- <ng-container *ngIf="!modelValue() || modelValue().length === 0">{{ placeholder() || defaultLabel || 'empty' }}</ng-container>
2513
- </ng-container>
2514
- </ng-container>
2515
- <ng-container *ngTemplateOutlet="selectedItemsTemplate || _selectedItemsTemplate; context: { $implicit: selectedOptions, removeChip: removeOption.bind(this) }"></ng-container>
2516
- </div>
2517
- </div>
2518
- <ng-container *ngIf="isVisibleClearIcon">
2519
- <TimesIcon *ngIf="!clearIconTemplate && !_clearIconTemplate" class="p-multiselect-clear-icon" (click)="clear($event)" [attr.data-pc-section]="'clearicon'" [attr.aria-hidden]="true" />
2520
- <span *ngIf="clearIconTemplate || _clearIconTemplate" class="p-multiselect-clear-icon" (click)="clear($event)" [attr.data-pc-section]="'clearicon'" [attr.aria-hidden]="true">
2521
- <ng-template *ngTemplateOutlet="clearIconTemplate || _clearIconTemplate"></ng-template>
2522
- </span>
2523
- </ng-container>
2524
- <div class="p-multiselect-dropdown">
2525
- <ng-container *ngIf="loading; else elseBlock">
2526
- <ng-container *ngIf="loadingIconTemplate || _loadingIconTemplate">
2527
- <ng-container *ngTemplateOutlet="loadingIconTemplate || _loadingIconTemplate"></ng-container>
2528
- </ng-container>
2529
- <ng-container *ngIf="!loadingIconTemplate && !_loadingIconTemplate">
2530
- <span *ngIf="loadingIcon" [ngClass]="'p-multiselect-loading-icon pi-spin ' + loadingIcon" aria-hidden="true"></span>
2531
- <span *ngIf="!loadingIcon" [class]="'p-multiselect-loading-icon pi pi-spinner pi-spin'" aria-hidden="true"></span>
2532
- </ng-container>
2533
- </ng-container>
2534
- <ng-template #elseBlock>
2535
- <ng-container *ngIf="!dropdownIconTemplate && !_dropdownIconTemplate">
2536
- <span *ngIf="dropdownIcon" class="p-multiselect-dropdown-icon" [ngClass]="dropdownIcon" [attr.data-pc-section]="'triggericon'" [attr.aria-hidden]="true"></span>
2537
- <ChevronDownIcon *ngIf="!dropdownIcon" [styleClass]="'p-multiselect-dropdown-icon'" [attr.data-pc-section]="'triggericon'" [attr.aria-hidden]="true" />
2538
- </ng-container>
2539
- <span *ngIf="dropdownIconTemplate || _dropdownIconTemplate" class="p-multiselect-dropdown-icon" [attr.data-pc-section]="'triggericon'" [attr.aria-hidden]="true">
2540
- <ng-template *ngTemplateOutlet="dropdownIconTemplate || _dropdownIconTemplate"></ng-template>
2541
- </span>
2542
- </ng-template>
2543
- </div>
2544
- <p-overlay
2545
- #overlay
2546
- [(visible)]="overlayVisible"
2547
- [options]="overlayOptions"
2548
- [target]="'@parent'"
2549
- [appendTo]="appendTo"
2550
- [autoZIndex]="autoZIndex"
2551
- [baseZIndex]="baseZIndex"
2552
- [showTransitionOptions]="showTransitionOptions"
2553
- [hideTransitionOptions]="hideTransitionOptions"
2554
- (onAnimationStart)="onOverlayAnimationStart($event)"
2555
- (onHide)="hide()"
2556
- >
2557
- <ng-template #content>
2558
- <div [attr.id]="id + '_list'" [ngClass]="'p-multiselect-overlay p-component'" [ngStyle]="panelStyle" [class]="panelStyleClass">
2559
- <span
2560
- #firstHiddenFocusableEl
2561
- role="presentation"
2562
- class="p-hidden-accessible p-hidden-focusable"
2563
- [attr.tabindex]="0"
2564
- (focus)="onFirstHiddenFocus($event)"
2565
- [attr.data-p-hidden-accessible]="true"
2566
- [attr.data-p-hidden-focusable]="true"
2567
- >
2568
- </span>
2569
- <ng-container *ngTemplateOutlet="headerTemplate || _headerTemplate"></ng-container>
2570
- <div class="p-multiselect-header" *ngIf="showHeader">
2571
- <ng-content select="p-header"></ng-content>
2572
- <ng-container *ngIf="filterTemplate || _filterTemplate; else builtInFilterElement">
2573
- <ng-container *ngTemplateOutlet="filterTemplate || _filterTemplate; context: { options: filterOptions }"></ng-container>
2574
- </ng-container>
2575
- <ng-template #builtInFilterElement>
2576
- <p-checkbox [ngModel]="allSelected()" [binary]="true" (onChange)="onToggleAll($event)" *ngIf="showToggleAll && !selectionLimit" [variant]="variant" [disabled]="disabled" #headerCheckbox>
2577
- <ng-template #checkboxicon let-klass="class">
2578
- <CheckIcon *ngIf="!headerCheckboxIconTemplate && !_headerCheckboxIconTemplate && allSelected()" [styleClass]="klass" [attr.data-pc-section]="'icon'" />
2579
- <ng-template
2580
- *ngTemplateOutlet="
2581
- headerCheckboxIconTemplate || _headerCheckboxIconTemplate;
2582
- context: {
2583
- checked: allSelected(),
2584
- partialSelected: partialSelected(),
2585
- class: klass
2586
- }
2587
- "
2588
- ></ng-template>
2589
- </ng-template>
2590
- </p-checkbox>
2591
-
2592
- <div class="p-multiselect-filter-container" *ngIf="filter">
2593
- <p-iconfield>
2594
- <input
2595
- #filterInput
2596
- pInputText
2597
- [variant]="variant"
2598
- type="text"
2599
- [attr.autocomplete]="autocomplete"
2600
- role="searchbox"
2601
- [attr.aria-owns]="id + '_list'"
2602
- [attr.aria-activedescendant]="focusedOptionId"
2603
- [value]="_filterValue() || ''"
2604
- (input)="onFilterInputChange($event)"
2605
- (keydown)="onFilterKeyDown($event)"
2606
- (click)="onInputClick($event)"
2607
- (blur)="onFilterBlur($event)"
2608
- class="p-multiselect-filter"
2609
- [disabled]="disabled"
2610
- [attr.placeholder]="filterPlaceHolder"
2611
- [attr.aria-label]="ariaFilterLabel"
2612
- />
2613
- <p-inputicon>
2614
- <SearchIcon [styleClass]="'p-multiselect-filter-icon'" *ngIf="!filterIconTemplate && !_filterIconTemplate" />
2615
- <span *ngIf="filterIconTemplate || _filterIconTemplate" class="p-multiselect-filter-icon">
2616
- <ng-template *ngTemplateOutlet="filterIconTemplate || _filterIconTemplate"></ng-template>
2617
- </span>
2618
- </p-inputicon>
2619
- </p-iconfield>
2620
- </div>
2621
- </ng-template>
2622
- </div>
2623
- <div class="p-multiselect-list-container" [style.max-height]="virtualScroll ? 'auto' : scrollHeight || 'auto'">
2624
- <p-scroller
2625
- *ngIf="virtualScroll"
2626
- #scroller
2627
- [items]="visibleOptions()"
2628
- [style]="{ height: scrollHeight }"
2629
- [itemSize]="virtualScrollItemSize || _itemSize"
2630
- [autoSize]="true"
2631
- [tabindex]="-1"
2632
- [lazy]="lazy"
2633
- (onLazyLoad)="onLazyLoad.emit($event)"
2634
- [options]="virtualScrollOptions"
2635
- >
2636
- <ng-template #content let-items let-scrollerOptions="options">
2637
- <ng-container *ngTemplateOutlet="buildInItems; context: { $implicit: items, options: scrollerOptions }"></ng-container>
2638
- </ng-template>
2639
- <ng-container *ngIf="loaderTemplate || _loaderTemplate">
2640
- <ng-template #loader let-scrollerOptions="options">
2641
- <ng-container *ngTemplateOutlet="loaderTemplate || _loaderTemplate; context: { options: scrollerOptions }"></ng-container>
2642
- </ng-template>
2643
- </ng-container>
2644
- </p-scroller>
2645
- <ng-container *ngIf="!virtualScroll">
2646
- <ng-container *ngTemplateOutlet="buildInItems; context: { $implicit: visibleOptions(), options: {} }"></ng-container>
2647
- </ng-container>
2648
-
2649
- <ng-template #buildInItems let-items let-scrollerOptions="options">
2650
- <ul #items class="p-multiselect-list" [ngClass]="scrollerOptions.contentStyleClass" [style]="scrollerOptions.contentStyle" role="listbox" aria-multiselectable="true" [attr.aria-label]="listLabel">
2651
- <ng-template ngFor let-option [ngForOf]="items" let-i="index">
2652
- <ng-container *ngIf="isOptionGroup(option)">
2653
- <li [attr.id]="id + '_' + getOptionIndex(i, scrollerOptions)" class="p-multiselect-option-group" [ngStyle]="{ height: scrollerOptions.itemSize + 'px' }" role="option">
2654
- <span *ngIf="!groupTemplate">{{ getOptionGroupLabel(option.optionGroup) }}</span>
2655
- <ng-container *ngTemplateOutlet="groupTemplate; context: { $implicit: option.optionGroup }"></ng-container>
2656
- </li>
2657
- </ng-container>
2658
- <ng-container *ngIf="!isOptionGroup(option)">
2659
- <p-multiselect-item
2660
- [id]="id + '_' + getOptionIndex(i, scrollerOptions)"
2661
- [option]="option"
2662
- [selected]="isSelected(option)"
2663
- [label]="getOptionLabel(option)"
2664
- [disabled]="isOptionDisabled(option)"
2665
- [template]="itemTemplate || _itemTemplate"
2666
- [checkIconTemplate]="checkIconTemplate || _checkIconTemplate"
2667
- [itemCheckboxIconTemplate]="itemCheckboxIconTemplate || _itemCheckboxIconTemplate"
2668
- [itemSize]="scrollerOptions.itemSize"
2669
- [focused]="focusedOptionIndex() === getOptionIndex(i, scrollerOptions)"
2670
- [ariaPosInset]="getAriaPosInset(getOptionIndex(i, scrollerOptions))"
2671
- [ariaSetSize]="ariaSetSize"
2672
- [variant]="variant"
2673
- (onClick)="onOptionSelect($event, false, getOptionIndex(i, scrollerOptions))"
2674
- (onMouseEnter)="onOptionMouseEnter($event, getOptionIndex(i, scrollerOptions))"
2675
- ></p-multiselect-item>
2676
- </ng-container>
2677
- </ng-template>
2678
-
2679
- <li *ngIf="hasFilter() && isEmpty()" class="p-multiselect-empty-message" [ngStyle]="{ height: scrollerOptions.itemSize + 'px' }" role="option">
2680
- @if (!emptyFilterTemplate && !_emptyFilterTemplate && !emptyTemplate && !_emptyTemplate) {
2681
- {{ emptyFilterMessageLabel }}
2682
- } @else {
2683
- <ng-container *ngTemplateOutlet="emptyFilterTemplate || _emptyFilterTemplate || emptyTemplate || _emptyFilterTemplate"></ng-container>
2684
- }
2685
- </li>
2686
- <li *ngIf="!hasFilter() && isEmpty()" class="p-multiselect-empty-message" [ngStyle]="{ height: scrollerOptions.itemSize + 'px' }" role="option">
2687
- @if (!emptyTemplate && !_emptyTemplate) {
2688
- {{ emptyMessageLabel }}
2689
- } @else {
2690
- <ng-container *ngTemplateOutlet="emptyTemplate || _emptyTemplate"></ng-container>
2691
- }
2692
- </li>
2693
- </ul>
2694
- </ng-template>
2695
- </div>
2696
- <div *ngIf="footerFacet || footerTemplate || _footerTemplate">
2697
- <ng-content select="p-footer"></ng-content>
2698
- <ng-container *ngTemplateOutlet="footerTemplate || _footerTemplate"></ng-container>
2699
- </div>
2700
-
2701
- <span
2702
- #lastHiddenFocusableEl
2703
- role="presentation"
2704
- class="p-hidden-accessible p-hidden-focusable"
2705
- [attr.tabindex]="0"
2706
- (focus)="onLastHiddenFocus($event)"
2707
- [attr.data-p-hidden-accessible]="true"
2708
- [attr.data-p-hidden-focusable]="true"
2709
- ></span>
2710
- </div>
2711
- </ng-template>
2712
- </p-overlay>
2713
- `,
2714
- providers: [MULTISELECT_VALUE_ACCESSOR, MultiSelectStyle],
2715
- changeDetection: ChangeDetectionStrategy.OnPush,
2716
- encapsulation: ViewEncapsulation.None,
2717
- host: {
2718
- '[attr.id]': 'id',
2719
- '[style]': 'style',
2720
- '(click)': 'onContainerClick($event)'
2721
- }
2722
- }]
2723
- }], () => [{ type: i0.NgZone }, { type: i3.FilterService }, { type: i3.OverlayService }], { id: [{
2724
- type: Input
2725
- }], ariaLabel: [{
2726
- type: Input
2727
- }], style: [{
2728
- type: Input
2729
- }], styleClass: [{
2730
- type: Input
2731
- }], panelStyle: [{
2732
- type: Input
2733
- }], panelStyleClass: [{
2734
- type: Input
2735
- }], inputId: [{
2736
- type: Input
2737
- }], disabled: [{
2738
- type: Input,
2739
- args: [{ transform: booleanAttribute }]
2740
- }], fluid: [{
2741
- type: Input,
2742
- args: [{ transform: booleanAttribute }]
2743
- }], readonly: [{
2744
- type: Input,
2745
- args: [{ transform: booleanAttribute }]
2746
- }], group: [{
2747
- type: Input,
2748
- args: [{ transform: booleanAttribute }]
2749
- }], filter: [{
2750
- type: Input,
2751
- args: [{ transform: booleanAttribute }]
2752
- }], filterPlaceHolder: [{
2753
- type: Input
2754
- }], filterLocale: [{
2755
- type: Input
2756
- }], overlayVisible: [{
2757
- type: Input,
2758
- args: [{ transform: booleanAttribute }]
2759
- }], tabindex: [{
2760
- type: Input,
2761
- args: [{ transform: numberAttribute }]
2762
- }], variant: [{
2763
- type: Input
2764
- }], appendTo: [{
2765
- type: Input
2766
- }], dataKey: [{
2767
- type: Input
2768
- }], name: [{
2769
- type: Input
2770
- }], ariaLabelledBy: [{
2771
- type: Input
2772
- }], displaySelectedLabel: [{
2773
- type: Input
2774
- }], maxSelectedLabels: [{
2775
- type: Input
2776
- }], selectionLimit: [{
2777
- type: Input,
2778
- args: [{ transform: numberAttribute }]
2779
- }], selectedItemsLabel: [{
2780
- type: Input
2781
- }], showToggleAll: [{
2782
- type: Input,
2783
- args: [{ transform: booleanAttribute }]
2784
- }], emptyFilterMessage: [{
2785
- type: Input
2786
- }], emptyMessage: [{
2787
- type: Input
2788
- }], resetFilterOnHide: [{
2789
- type: Input,
2790
- args: [{ transform: booleanAttribute }]
2791
- }], dropdownIcon: [{
2792
- type: Input
2793
- }], chipIcon: [{
2794
- type: Input
2795
- }], optionLabel: [{
2796
- type: Input
2797
- }], optionValue: [{
2798
- type: Input
2799
- }], optionDisabled: [{
2800
- type: Input
2801
- }], optionGroupLabel: [{
2802
- type: Input
2803
- }], optionGroupChildren: [{
2804
- type: Input
2805
- }], showHeader: [{
2806
- type: Input,
2807
- args: [{ transform: booleanAttribute }]
2808
- }], filterBy: [{
2809
- type: Input
2810
- }], scrollHeight: [{
2811
- type: Input
2812
- }], lazy: [{
2813
- type: Input,
2814
- args: [{ transform: booleanAttribute }]
2815
- }], virtualScroll: [{
2816
- type: Input,
2817
- args: [{ transform: booleanAttribute }]
2818
- }], loading: [{
2819
- type: Input,
2820
- args: [{ transform: booleanAttribute }]
2821
- }], virtualScrollItemSize: [{
2822
- type: Input,
2823
- args: [{ transform: numberAttribute }]
2824
- }], loadingIcon: [{
2825
- type: Input
2826
- }], virtualScrollOptions: [{
2827
- type: Input
2828
- }], overlayOptions: [{
2829
- type: Input
2830
- }], ariaFilterLabel: [{
2831
- type: Input
2832
- }], filterMatchMode: [{
2833
- type: Input
2834
- }], tooltip: [{
2835
- type: Input
2836
- }], tooltipPosition: [{
2837
- type: Input
2838
- }], tooltipPositionStyle: [{
2839
- type: Input
2840
- }], tooltipStyleClass: [{
2841
- type: Input
2842
- }], autofocusFilter: [{
2843
- type: Input,
2844
- args: [{ transform: booleanAttribute }]
2845
- }], display: [{
2846
- type: Input
2847
- }], autocomplete: [{
2848
- type: Input
2849
- }], size: [{
2850
- type: Input
2851
- }], showClear: [{
2852
- type: Input,
2853
- args: [{ transform: booleanAttribute }]
2854
- }], autofocus: [{
2855
- type: Input,
2856
- args: [{ transform: booleanAttribute }]
2857
- }], autoZIndex: [{
2858
- type: Input
2859
- }], baseZIndex: [{
2860
- type: Input
2861
- }], showTransitionOptions: [{
2862
- type: Input
2863
- }], hideTransitionOptions: [{
2864
- type: Input
2865
- }], defaultLabel: [{
2866
- type: Input
2867
- }], placeholder: [{
2868
- type: Input
2869
- }], options: [{
2870
- type: Input
2871
- }], filterValue: [{
2872
- type: Input
2873
- }], itemSize: [{
2874
- type: Input
2875
- }], selectAll: [{
2876
- type: Input
2877
- }], focusOnHover: [{
2878
- type: Input,
2879
- args: [{ transform: booleanAttribute }]
2880
- }], filterFields: [{
2881
- type: Input
2882
- }], selectOnFocus: [{
2883
- type: Input,
2884
- args: [{ transform: booleanAttribute }]
2885
- }], autoOptionFocus: [{
2886
- type: Input,
2887
- args: [{ transform: booleanAttribute }]
2888
- }], onChange: [{
2889
- type: Output
2890
- }], onFilter: [{
2891
- type: Output
2892
- }], onFocus: [{
2893
- type: Output
2894
- }], onBlur: [{
2895
- type: Output
2896
- }], onClick: [{
2897
- type: Output
2898
- }], onClear: [{
2899
- type: Output
2900
- }], onPanelShow: [{
2901
- type: Output
2902
- }], onPanelHide: [{
2903
- type: Output
2904
- }], onLazyLoad: [{
2905
- type: Output
2906
- }], onRemove: [{
2907
- type: Output
2908
- }], onSelectAllChange: [{
2909
- type: Output
2910
- }], overlayViewChild: [{
2911
- type: ViewChild,
2912
- args: ['overlay']
2913
- }], filterInputChild: [{
2914
- type: ViewChild,
2915
- args: ['filterInput']
2916
- }], focusInputViewChild: [{
2917
- type: ViewChild,
2918
- args: ['focusInput']
2919
- }], itemsViewChild: [{
2920
- type: ViewChild,
2921
- args: ['items']
2922
- }], scroller: [{
2923
- type: ViewChild,
2924
- args: ['scroller']
2925
- }], lastHiddenFocusableElementOnOverlay: [{
2926
- type: ViewChild,
2927
- args: ['lastHiddenFocusableEl']
2928
- }], firstHiddenFocusableElementOnOverlay: [{
2929
- type: ViewChild,
2930
- args: ['firstHiddenFocusableEl']
2931
- }], headerCheckboxViewChild: [{
2932
- type: ViewChild,
2933
- args: ['headerCheckbox']
2934
- }], footerFacet: [{
2935
- type: ContentChild,
2936
- args: [Footer]
2937
- }], headerFacet: [{
2938
- type: ContentChild,
2939
- args: [Header]
2940
- }], itemTemplate: [{
2941
- type: ContentChild,
2942
- args: ['item', { descendants: false }]
2943
- }], groupTemplate: [{
2944
- type: ContentChild,
2945
- args: ['group', { descendants: false }]
2946
- }], loaderTemplate: [{
2947
- type: ContentChild,
2948
- args: ['loader', { descendants: false }]
2949
- }], headerTemplate: [{
2950
- type: ContentChild,
2951
- args: ['header', { descendants: false }]
2952
- }], filterTemplate: [{
2953
- type: ContentChild,
2954
- args: ['filter', { descendants: false }]
2955
- }], footerTemplate: [{
2956
- type: ContentChild,
2957
- args: ['footer', { descendants: false }]
2958
- }], emptyFilterTemplate: [{
2959
- type: ContentChild,
2960
- args: ['emptyfilter', { descendants: false }]
2961
- }], emptyTemplate: [{
2962
- type: ContentChild,
2963
- args: ['empty', { descendants: false }]
2964
- }], selectedItemsTemplate: [{
2965
- type: ContentChild,
2966
- args: ['selecteditems', { descendants: false }]
2967
- }], checkIconTemplate: [{
2968
- type: ContentChild,
2969
- args: ['checkicon', { descendants: false }]
2970
- }], loadingIconTemplate: [{
2971
- type: ContentChild,
2972
- args: ['loadingicon', { descendants: false }]
2973
- }], filterIconTemplate: [{
2974
- type: ContentChild,
2975
- args: ['filtericon', { descendants: false }]
2976
- }], removeTokenIconTemplate: [{
2977
- type: ContentChild,
2978
- args: ['removetokenicon', { descendants: false }]
2979
- }], chipIconTemplate: [{
2980
- type: ContentChild,
2981
- args: ['chipicon', { descendants: false }]
2982
- }], clearIconTemplate: [{
2983
- type: ContentChild,
2984
- args: ['clearicon', { descendants: false }]
2985
- }], dropdownIconTemplate: [{
2986
- type: ContentChild,
2987
- args: ['dropdownicon', { descendants: false }]
2988
- }], itemCheckboxIconTemplate: [{
2989
- type: ContentChild,
2990
- args: ['itemcheckboxicon', { descendants: false }]
2991
- }], headerCheckboxIconTemplate: [{
2992
- type: ContentChild,
2993
- args: ['headercheckboxicon', { descendants: false }]
2994
- }], templates: [{
2995
- type: ContentChildren,
2996
- args: [PrimeTemplate]
2997
- }], hostClasses: [{
2998
- type: HostBinding,
2999
- args: ['class']
3000
- }] }); })();
3001
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MultiSelect, { className: "MultiSelect" }); })();
3002
- export class MultiSelectModule {
3003
- static ɵfac = function MultiSelectModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MultiSelectModule)(); };
3004
- static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: MultiSelectModule });
3005
- static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [MultiSelect, SharedModule, SharedModule] });
3006
- }
3007
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MultiSelectModule, [{
3008
- type: NgModule,
3009
- args: [{
3010
- imports: [MultiSelect, SharedModule],
3011
- exports: [MultiSelect, SharedModule]
3012
- }]
3013
- }], null, null); })();
3014
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(MultiSelectModule, { imports: [MultiSelect, SharedModule], exports: [MultiSelect, SharedModule] }); })();
3015
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlzZWxlY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXVsdGlzZWxlY3QvbXVsdGlzZWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFJSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGVBQWUsRUFDZixNQUFNLEVBRU4sWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBRVIsZUFBZSxFQUVmLE1BQU0sRUFHTixNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFDSCxVQUFVLEVBQ1YsTUFBTSxFQUNOLGFBQWEsRUFDYixVQUFVLEVBQ1YsS0FBSyxFQUNMLHdCQUF3QixFQUN4QixvQkFBb0IsRUFDcEIsdUJBQXVCLEVBQ3ZCLFFBQVEsRUFDUixPQUFPLEVBQ1AsUUFBUSxFQUNSLFVBQVUsRUFDVixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsSUFBSSxFQUNQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFpQixNQUFNLEVBQUUsTUFBTSxFQUFrQyxhQUFhLEVBQW1CLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0osT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLElB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LFdBQVcsRUFBRSxLQUFLLEVBQUU7WUFFTyx1QkFBdUI7a0JBQS9FLFlBQVk7bUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFO1lBRUwsZ0JBQWdCO2tCQUFqRSxZQUFZO21CQUFDLFVBQVUsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7WUFFRyxpQkFBaUI7a0JBQW5FLFlBQVk7bUJBQUMsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtZQUVLLG9CQUFvQjtrQkFBekUsWUFBWTttQkFBQyxjQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFO1lBRU0sd0JBQXdCO2tCQUFqRixZQUFZO21CQUFDLGtCQUFrQixFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtZQUVJLDBCQUEwQjtrQkFBckYsWUFBWTttQkFBQyxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7WUFFMUIsU0FBUztrQkFBeEMsZUFBZTttQkFBQyxhQUFhO1lBdUpKLFdBQVc7a0JBQXBDLFdBQVc7bUJBQUMsT0FBTzs7a0ZBN3VCWCxXQUFXO0FBODBEeEIsTUFBTSxPQUFPLGlCQUFpQjsyR0FBakIsaUJBQWlCOzREQUFqQixpQkFBaUI7Z0VBSGhCLFdBQVcsRUFBRSxZQUFZLEVBQ1osWUFBWTs7aUZBRTFCLGlCQUFpQjtjQUo3QixRQUFRO2VBQUM7Z0JBQ04sT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQztnQkFDcEMsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQzthQUN2Qzs7d0ZBQ1ksaUJBQWlCLGNBOTBEakIsV0FBVyxFQTIwREcsWUFBWSxhQTMwRDFCLFdBQVcsRUE0MERHLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbmltYXRpb25FdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBlZmZlY3QsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgTmdab25lLFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaWduYWwsXG4gICAgc2lnbmFsLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIGRlZXBFcXVhbHMsXG4gICAgZXF1YWxzLFxuICAgIGZpbmRMYXN0SW5kZXgsXG4gICAgZmluZFNpbmdsZSxcbiAgICBmb2N1cyxcbiAgICBnZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQsXG4gICAgZ2V0Rm9jdXNhYmxlRWxlbWVudHMsXG4gICAgZ2V0TGFzdEZvY3VzYWJsZUVsZW1lbnQsXG4gICAgaGFzQ2xhc3MsXG4gICAgaXNBcnJheSxcbiAgICBpc0hpZGRlbixcbiAgICBpc05vdEVtcHR5LFxuICAgIGlzT2JqZWN0LFxuICAgIGlzUHJpbnRhYmxlQ2hhcmFjdGVyLFxuICAgIHJlc29sdmVGaWVsZERhdGEsXG4gICAgdW5ibG9ja0JvZHlTY3JvbGwsXG4gICAgdXVpZFxufSBmcm9tICdAcHJpbWV1aXgvdXRpbHMnO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSwgRm9vdGVyLCBIZWFkZXIsIE92ZXJsYXlPcHRpb25zLCBPdmVybGF5U2VydmljZSwgUHJpbWVUZW1wbGF0ZSwgU2Nyb2xsZXJPcHRpb25zLCBTaGFyZWRNb2R1bGUsIFRyYW5zbGF0aW9uS2V5cyB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IEF1dG9Gb2N1cyB9IGZyb20gJ3ByaW1lbmcvYXV0b2ZvY3VzJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdwcmltZW5nL2Jhc2Vjb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcbmltcG9ydCB7IENoaXAgfSBmcm9tICdwcmltZW5nL2NoaXAnO1xuaW1wb3J0IHsgRG9tSGFuZGxlciB9IGZyb20gJ3ByaW1lbmcvZG9tJztcbmltcG9ydCB7IEljb25GaWVsZCB9IGZyb20gJ3ByaW1lbmcvaWNvbmZpZWxkJztcbmltcG9ydCB7IENoZWNrSWNvbiwgQ2hldnJvbkRvd25JY29uLCBTZWFyY2hJY29uLCBUaW1lc0ljb24gfSBmcm9tICdwcmltZW5nL2ljb25zJztcbmltcG9ydCB7IElucHV0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaW5wdXRpY29uJztcbmltcG9ydCB7IElucHV0VGV4dCB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdwcmltZW5nL292ZXJsYXknO1xuaW1wb3J0IHsgUmlwcGxlIH0gZnJvbSAncHJpbWVuZy9yaXBwbGUnO1xuaW1wb3J0IHsgU2Nyb2xsZXIgfSBmcm9tICdwcmltZW5nL3Njcm9sbGVyJztcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdwcmltZW5nL3RzLWhlbHBlcnMnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RCbHVyRXZlbnQsIE11bHRpU2VsZWN0Q2hhbmdlRXZlbnQsIE11bHRpU2VsZWN0RmlsdGVyRXZlbnQsIE11bHRpU2VsZWN0RmlsdGVyT3B0aW9ucywgTXVsdGlTZWxlY3RGb2N1c0V2ZW50LCBNdWx0aVNlbGVjdExhenlMb2FkRXZlbnQsIE11bHRpU2VsZWN0UmVtb3ZlRXZlbnQsIE11bHRpU2VsZWN0U2VsZWN0QWxsQ2hhbmdlRXZlbnQgfSBmcm9tICcuL211bHRpc2VsZWN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdFN0eWxlIH0gZnJvbSAnLi9zdHlsZS9tdWx0aXNlbGVjdHN0eWxlJztcblxuZXhwb3J0IGNvbnN0IE1VTFRJU0VMRUNUX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTXVsdGlTZWxlY3QpLFxuICAgIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3AtbXVsdGlTZWxlY3RJdGVtLCBwLW11bHRpc2VsZWN0LWl0ZW0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ2hlY2tib3gsIEZvcm1zTW9kdWxlLCBSaXBwbGUsIFNoYXJlZE1vZHVsZV0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGxpXG4gICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBpdGVtU2l6ZSArICdweCcgfVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3AtbXVsdGlzZWxlY3Qtb3B0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAncC1kaXNhYmxlZCc6IGRpc2FibGVkLFxuICAgICAgICAgICAgICAgICdwLWZvY3VzJzogZm9jdXNlZFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXNldHNpemVdPVwiYXJpYVNldFNpemVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1wb3NpbnNldF09XCJhcmlhUG9zSW5zZXRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJzZWxlY3RlZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXAtZm9jdXNlZF09XCJmb2N1c2VkXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtcC1oaWdobGlnaHRdPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1wLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJzZWxlY3RlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25PcHRpb25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uT3B0aW9uTW91c2VFbnRlcigkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHAtY2hlY2tib3ggW25nTW9kZWxdPVwic2VsZWN0ZWRcIiBbYmluYXJ5XT1cInRydWVcIiBbdGFiaW5kZXhdPVwiLTFcIiBbdmFyaWFudF09XCJ2YXJpYW50XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1DaGVja2JveEljb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ljb24gbGV0LWtsYXNzPVwiY2xhc3NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1DaGVja2JveEljb25UZW1wbGF0ZTsgY29udGV4dDogeyBjaGVja2VkOiBzZWxlY3RlZCwgY2xhc3M6IGtsYXNzIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9wLWNoZWNrYm94PlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGVtcGxhdGVcIj57eyBsYWJlbCA/PyAnZW1wdHknIH19PC9zcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogb3B0aW9uIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9saT5cbiAgICBgLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlTZWxlY3RJdGVtIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gICAgQElucHV0KCkgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIG9wdGlvbjogYW55O1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNlbGVjdGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgbGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGl0ZW1TaXplOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZm9jdXNlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIGFyaWFQb3NJbnNldDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgYXJpYVNldFNpemU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIHZhcmlhbnQ6ICdvdXRsaW5lZCcgfCAnZmlsbGVkJztcblxuICAgIEBJbnB1dCgpIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgY2hlY2tJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBpdGVtQ2hlY2tib3hJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBAT3V0cHV0KCkgb25DbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgb25Nb3VzZUVudGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIG9uT3B0aW9uQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25DbGljay5lbWl0KHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgb3B0aW9uOiB0aGlzLm9wdGlvbixcbiAgICAgICAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkXG4gICAgICAgIH0pO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbk9wdGlvbk1vdXNlRW50ZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25Nb3VzZUVudGVyLmVtaXQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBvcHRpb246IHRoaXMub3B0aW9uLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLy8gQHRzLWlnbm9yZVxuLyoqXG4gKiBNdWx0aVNlbGVjdCBpcyB1c2VkIHRvIHNlbGVjdCBtdWx0aXBsZSBpdGVtcyBmcm9tIGEgY29sbGVjdGlvbi5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncC1tdWx0aVNlbGVjdCwgcC1tdWx0aXNlbGVjdCwgcC1tdWx0aS1zZWxlY3QnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTXVsdGlTZWxlY3RJdGVtLCBPdmVybGF5LCBTaGFyZWRNb2R1bGUsIFRvb2x0aXAsIFNjcm9sbGVyLCBBdXRvRm9jdXMsIENoZWNrSWNvbiwgU2VhcmNoSWNvbiwgVGltZXNJY29uLCBDaGV2cm9uRG93bkljb24sIEljb25GaWVsZCwgSW5wdXRJY29uLCBJbnB1dFRleHQsIENoaXAsIENoZWNrYm94LCBGb3Jtc01vZHVsZV0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInAtaGlkZGVuLWFjY2Vzc2libGVcIiBbYXR0ci5kYXRhLXAtaGlkZGVuLWFjY2Vzc2libGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI2ZvY3VzSW5wdXRcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwidG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICAgICAgICAgICAgICAgIFtwb3NpdGlvblN0eWxlXT1cInRvb2x0aXBQb3NpdGlvblN0eWxlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFN0eWxlQ2xhc3NdPVwidG9vbHRpcFN0eWxlQ2xhc3NcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCInbGlzdGJveCdcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3ZlcmxheVZpc2libGUgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwib3ZlcmxheVZpc2libGUgPyBpZCArICdfbGlzdCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIhZGlzYWJsZWQgPyB0YWJpbmRleCA6IC0xXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiZm9jdXNlZCA/IGZvY3VzZWRPcHRpb25JZCA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uSW5wdXRGb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3BBdXRvRm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgICAgICAgICBbYXR0ci52YWx1ZV09XCJsYWJlbCgpIHx8ICdlbXB0eSdcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicC1tdWx0aXNlbGVjdC1sYWJlbC1jb250YWluZXJcIlxuICAgICAgICAgICAgW3BUb29sdGlwXT1cInRvb2x0aXBcIlxuICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibGFiZWxDb250YWluZXJNb3VzZUxlYXZlKClcIlxuICAgICAgICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCJfZGlzYWJsZVRvb2x0aXBcIlxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICAgICAgICAgICAgW3Bvc2l0aW9uU3R5bGVdPVwidG9vbHRpcFBvc2l0aW9uU3R5bGVcIlxuICAgICAgICAgICAgW3Rvb2x0aXBTdHlsZUNsYXNzXT1cInRvb2x0aXBTdHlsZUNsYXNzXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJsYWJlbENsYXNzXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWxlY3RlZEl0ZW1zVGVtcGxhdGUgJiYgIV9zZWxlY3RlZEl0ZW1zVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXkgPT09ICdjb21tYSdcIj57eyBsYWJlbCgpIHx8ICdlbXB0eScgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXkgPT09ICdjaGlwJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjdG9rZW4gKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hpcFNlbGVjdGVkSXRlbXMoKTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwicC1tdWx0aXNlbGVjdC1jaGlwLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1jaGlwIHN0eWxlQ2xhc3M9XCJwLW11bHRpc2VsZWN0LWNoaXBcIiBbbGFiZWxdPVwiZ2V0TGFiZWxCeVZhbHVlKGl0ZW0pXCIgW3JlbW92YWJsZV09XCJ0cnVlXCIgKG9uUmVtb3ZlKT1cInJlbW92ZU9wdGlvbihpdGVtLCAkZXZlbnQpXCIgW3JlbW92ZUljb25dPVwiY2hpcEljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaXBJY29uVGVtcGxhdGUgfHwgX2NoaXBJY29uVGVtcGxhdGUgfHwgcmVtb3ZlVG9rZW5JY29uVGVtcGxhdGUgfHwgX3JlbW92ZVRva2VuSWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlbW92ZWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLW11bHRpc2VsZWN0LWNoaXAtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNoaXBJY29uVGVtcGxhdGUgfHwgX2NoaXBJY29uVGVtcGxhdGUgfHwgcmVtb3ZlVG9rZW5JY29uVGVtcGxhdGUgfHwgX3JlbW92ZVRva2VuSWNvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVPcHRpb24oaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ2NsZWFyaWNvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlwSWNvblRlbXBsYXRlIHx8IF9jaGlwSWNvblRlbXBsYXRlIHx8IHJlbW92ZVRva2VuSWNvblRlbXBsYXRlIHx8IF9yZW1vdmVUb2tlbkljb25UZW1wbGF0ZTsgY29udGV4dDogeyBjbGFzczogJ3AtbXVsdGlzZWxlY3QtY2hpcC1pY29uJyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW1vZGVsVmFsdWUoKSB8fCBtb2RlbFZhbHVlKCkubGVuZ3RoID09PSAwXCI+e3sgcGxhY2Vob2xkZXIoKSB8fCBkZWZhdWx0TGFiZWwgfHwgJ2VtcHR5JyB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0ZWRJdGVtc1RlbXBsYXRlIHx8IF9zZWxlY3RlZEl0ZW1zVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBzZWxlY3RlZE9wdGlvbnMsIHJlbW92ZUNoaXA6IHJlbW92ZU9wdGlvbi5iaW5kKHRoaXMpIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVmlzaWJsZUNsZWFySWNvblwiPlxuICAgICAgICAgICAgPFRpbWVzSWNvbiAqbmdJZj1cIiFjbGVhckljb25UZW1wbGF0ZSAmJiAhX2NsZWFySWNvblRlbXBsYXRlXCIgY2xhc3M9XCJwLW11bHRpc2VsZWN0LWNsZWFyLWljb25cIiAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInY2xlYXJpY29uJ1wiIFthdHRyLmFyaWEtaGlkZGVuXT1cInRydWVcIiAvPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjbGVhckljb25UZW1wbGF0ZSB8fCBfY2xlYXJJY29uVGVtcGxhdGVcIiBjbGFzcz1cInAtbXVsdGlzZWxlY3QtY2xlYXItaWNvblwiIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidjbGVhcmljb24nXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImNsZWFySWNvblRlbXBsYXRlIHx8IF9jbGVhckljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1tdWx0aXNlbGVjdC1kcm9wZG93blwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmc7IGVsc2UgZWxzZUJsb2NrXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdJY29uVGVtcGxhdGUgfHwgX2xvYWRpbmdJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdJY29uVGVtcGxhdGUgfHwgX2xvYWRpbmdJY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdJY29uVGVtcGxhdGUgJiYgIV9sb2FkaW5nSWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibG9hZGluZ0ljb25cIiBbbmdDbGFzc109XCIncC1tdWx0aXNlbGVjdC1sb2FkaW5nLWljb24gcGktc3BpbiAnICsgbG9hZGluZ0ljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWxvYWRpbmdJY29uXCIgW2NsYXNzXT1cIidwLW11bHRpc2VsZWN0LWxvYWRpbmctaWNvbiBwaSBwaS1zcGlubmVyIHBpLXNwaW4nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRyb3Bkb3duSWNvblRlbXBsYXRlICYmICFfZHJvcGRvd25JY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkcm9wZG93bkljb25cIiBjbGFzcz1cInAtbXVsdGlzZWxlY3QtZHJvcGRvd24taWNvblwiIFtuZ0NsYXNzXT1cImRyb3Bkb3duSWNvblwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCIndHJpZ2dlcmljb24nXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPENoZXZyb25Eb3duSWNvbiAqbmdJZj1cIiFkcm9wZG93bkljb25cIiBbc3R5bGVDbGFzc109XCIncC1tdWx0aXNlbGVjdC1kcm9wZG93bi1pY29uJ1wiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCIndHJpZ2dlcmljb24nXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkcm9wZG93bkljb25UZW1wbGF0ZSB8fCBfZHJvcGRvd25JY29uVGVtcGxhdGVcIiBjbGFzcz1cInAtbXVsdGlzZWxlY3QtZHJvcGRvd24taWNvblwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCIndHJpZ2dlcmljb24nXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkljb25UZW1wbGF0ZSB8fCBfZHJvcGRvd25JY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cC1vdmVybGF5XG4gICAgICAgICAgICAjb3ZlcmxheVxuICAgICAgICAgICAgWyh2aXNpYmxlKV09XCJvdmVybGF5VmlzaWJsZVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJvdmVybGF5T3B0aW9uc1wiXG4gICAgICAgICAgICBbdGFyZ2V0XT1cIidAcGFyZW50J1wiXG4gICAgICAgICAgICBbYXBwZW5kVG9dPVwiYXBwZW5kVG9cIlxuICAgICAgICAgICAgW2F1dG9aSW5kZXhdPVwiYXV0b1pJbmRleFwiXG4gICAgICAgICAgICBbYmFzZVpJbmRleF09XCJiYXNlWkluZGV4XCJcbiAgICAgICAgICAgIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwic2hvd1RyYW5zaXRpb25PcHRpb25zXCJcbiAgICAgICAgICAgIFtoaWRlVHJhbnNpdGlvbk9wdGlvbnNdPVwiaGlkZVRyYW5zaXRpb25PcHRpb25zXCJcbiAgICAgICAgICAgIChvbkFuaW1hdGlvblN0YXJ0KT1cIm9uT3ZlcmxheUFuaW1hdGlvblN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgKG9uSGlkZSk9XCJoaWRlKClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBbYXR0ci5pZF09XCJpZCArICdfbGlzdCdcIiBbbmdDbGFzc109XCIncC1tdWx0aXNlbGVjdC1vdmVybGF5IHAtY29tcG9uZW50J1wiIFtuZ1N0eWxlXT1cInBhbmVsU3R5bGVcIiBbY2xhc3NdPVwicGFuZWxTdHlsZUNsYXNzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAjZmlyc3RIaWRkZW5Gb2N1c2FibGVFbFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtaGlkZGVuLWFjY2Vzc2libGUgcC1oaWRkZW4tZm9jdXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRmlyc3RIaWRkZW5Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtcC1oaWRkZW4tYWNjZXNzaWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtcC1oaWRkZW4tZm9jdXNhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlIHx8IF9oZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1tdWx0aXNlbGVjdC1oZWFkZXJcIiAqbmdJZj1cInNob3dIZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInAtaGVhZGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlclRlbXBsYXRlIHx8IF9maWx0ZXJUZW1wbGF0ZTsgZWxzZSBidWlsdEluRmlsdGVyRWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJUZW1wbGF0ZSB8fCBfZmlsdGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgb3B0aW9uczogZmlsdGVyT3B0aW9ucyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnVpbHRJbkZpbHRlckVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2hlY2tib3ggW25nTW9kZWxdPVwiYWxsU2VsZWN0ZWQoKVwiIFtiaW5hcnldPVwidHJ1ZVwiIChvbkNoYW5nZSk9XCJvblRvZ2dsZUFsbCgkZXZlbnQpXCIgKm5nSWY9XCJzaG93VG9nZ2xlQWxsICYmICFzZWxlY3Rpb25MaW1pdFwiIFt2YXJpYW50XT1cInZhcmlhbnRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAjaGVhZGVyQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tib3hpY29uIGxldC1rbGFzcz1cImNsYXNzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tJY29uICpuZ0lmPVwiIWhlYWRlckNoZWNrYm94SWNvblRlbXBsYXRlICYmICFfaGVhZGVyQ2hlY2tib3hJY29uVGVtcGxhdGUgJiYgYWxsU2VsZWN0ZWQoKVwiIFtzdHlsZUNsYXNzXT1cImtsYXNzXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidpY29uJ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJDaGVja2JveEljb25UZW1wbGF0ZSB8fCBfaGVhZGVyQ2hlY2tib3hJY29uVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGFsbFNlbGVjdGVkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsU2VsZWN0ZWQ6IHBhcnRpYWxTZWxlY3RlZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IGtsYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWNoZWNrYm94PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbXVsdGlzZWxlY3QtZmlsdGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWljb25maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNmaWx0ZXJJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFyaWFudF09XCJ2YXJpYW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cImlkICsgJ19saXN0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cImZvY3VzZWRPcHRpb25JZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIl9maWx0ZXJWYWx1ZSgpIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25GaWx0ZXJJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkZpbHRlcktleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSW5wdXRDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZpbHRlckJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLW11bHRpc2VsZWN0LWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJmaWx0ZXJQbGFjZUhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhRmlsdGVyTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWlucHV0aWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VhcmNoSWNvbiBbc3R5bGVDbGFzc109XCIncC1tdWx0aXNlbGVjdC1maWx0ZXItaWNvbidcIiAqbmdJZj1cIiFmaWx0ZXJJY29uVGVtcGxhdGUgJiYgIV9maWx0ZXJJY29uVGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVySWNvblRlbXBsYXRlIHx8IF9maWx0ZXJJY29uVGVtcGxhdGVcIiBjbGFzcz1cInAtbXVsdGlzZWxlY3QtZmlsdGVyLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVySWNvblRlbXBsYXRlIHx8IF9maWx0ZXJJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1pbnB1dGljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1pY29uZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbXVsdGlzZWxlY3QtbGlzdC1jb250YWluZXJcIiBbc3R5bGUubWF4LWhlaWdodF09XCJ2aXJ0dWFsU2Nyb2xsID8gJ2F1dG8nIDogc2Nyb2xsSGVpZ2h0IHx8ICdhdXRvJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtc2Nyb2xsZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInZpcnR1YWxTY3JvbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzY3JvbGxlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJ2aXNpYmxlT3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwieyBoZWlnaHQ6IHNjcm9sbEhlaWdodCB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplIHx8IF9pdGVtU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9TaXplXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhenldPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uTGF6eUxvYWQpPVwib25MYXp5TG9hZC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInZpcnR1YWxTY3JvbGxPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NvbnRlbnQgbGV0LWl0ZW1zIGxldC1zY3JvbGxlck9wdGlvbnM9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidWlsZEluSXRlbXM7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtcywgb3B0aW9uczogc2Nyb2xsZXJPcHRpb25zIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkZXJUZW1wbGF0ZSB8fCBfbG9hZGVyVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkZXIgbGV0LXNjcm9sbGVyT3B0aW9ucz1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkZXJUZW1wbGF0ZSB8fCBfbG9hZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgb3B0aW9uczogc2Nyb2xsZXJPcHRpb25zIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1zY3JvbGxlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdmlydHVhbFNjcm9sbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidWlsZEluSXRlbXM7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB2aXNpYmxlT3B0aW9ucygpLCBvcHRpb25zOiB7fSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNidWlsZEluSXRlbXMgbGV0LWl0ZW1zIGxldC1zY3JvbGxlck9wdGlvbnM9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsICNpdGVtcyBjbGFzcz1cInAtbXVsdGlzZWxlY3QtbGlzdFwiIFtuZ0NsYXNzXT1cInNjcm9sbGVyT3B0aW9ucy5jb250ZW50U3R5bGVDbGFzc1wiIFtzdHlsZV09XCJzY3JvbGxlck9wdGlvbnMuY29udGVudFN0eWxlXCIgcm9sZT1cImxpc3Rib3hcIiBhcmlhLW11bHRpc2VsZWN0YWJsZT1cInRydWVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImxpc3RMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LW9wdGlvbiBbbmdGb3JPZl09XCJpdGVtc1wiIGxldC1pPVwiaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc09wdGlvbkdyb3VwKG9wdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgW2F0dHIuaWRdPVwiaWQgKyAnXycgKyBnZXRPcHRpb25JbmRleChpLCBzY3JvbGxlck9wdGlvbnMpXCIgY2xhc3M9XCJwLW11bHRpc2VsZWN0LW9wdGlvbi1ncm91cFwiIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBzY3JvbGxlck9wdGlvbnMuaXRlbVNpemUgKyAncHgnIH1cIiByb2xlPVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWdyb3VwVGVtcGxhdGVcIj57eyBnZXRPcHRpb25Hcm91cExhYmVsKG9wdGlvbi5vcHRpb25Hcm91cCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogb3B0aW9uLm9wdGlvbkdyb3VwIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzT3B0aW9uR3JvdXAob3B0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLW11bHRpc2VsZWN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImlkICsgJ18nICsgZ2V0T3B0aW9uSW5kZXgoaSwgc2Nyb2xsZXJPcHRpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25dPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWQob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJnZXRPcHRpb25MYWJlbChvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzT3B0aW9uRGlzYWJsZWQob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGUgfHwgX2l0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja0ljb25UZW1wbGF0ZV09XCJjaGVja0ljb25UZW1wbGF0ZSB8fCBfY2hlY2tJY29uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbUNoZWNrYm94SWNvblRlbXBsYXRlXT1cIml0ZW1DaGVja2JveEljb25UZW1wbGF0ZSB8fCBfaXRlbUNoZWNrYm94SWNvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1TaXplXT1cInNjcm9sbGVyT3B0aW9ucy5pdGVtU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb2N1c2VkXT1cImZvY3VzZWRPcHRpb25JbmRleCgpID09PSBnZXRPcHRpb25JbmRleChpLCBzY3JvbGxlck9wdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFQb3NJbnNldF09XCJnZXRBcmlhUG9zSW5zZXQoZ2V0T3B0aW9uSW5kZXgoaSwgc2Nyb2xsZXJPcHRpb25zKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYVNldFNpemVdPVwiYXJpYVNldFNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFyaWFudF09XCJ2YXJpYW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25PcHRpb25TZWxlY3QoJGV2ZW50LCBmYWxzZSwgZ2V0T3B0aW9uSW5kZXgoaSwgc2Nyb2xsZXJPcHRpb25zKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25Nb3VzZUVudGVyKT1cIm9uT3B0aW9uTW91c2VFbnRlcigkZXZlbnQsIGdldE9wdGlvbkluZGV4KGksIHNjcm9sbGVyT3B0aW9ucykpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wLW11bHRpc2VsZWN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJoYXNGaWx0ZXIoKSAmJiBpc0VtcHR5KClcIiBjbGFzcz1cInAtbXVsdGlzZWxlY3QtZW1wdHktbWVzc2FnZVwiIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBzY3JvbGxlck9wdGlvbnMuaXRlbVNpemUgKyAncHgnIH1cIiByb2xlPVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFlbXB0eUZpbHRlclRlbXBsYXRlICYmICFfZW1wdHlGaWx0ZXJUZW1wbGF0ZSAmJiAhZW1wdHlUZW1wbGF0ZSAmJiAhX2VtcHR5VGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbXB0eUZpbHRlck1lc3NhZ2VMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5RmlsdGVyVGVtcGxhdGUgfHwgX2VtcHR5RmlsdGVyVGVtcGxhdGUgfHwgZW1wdHlUZW1wbGF0ZSB8fCBfZW1wdHlGaWx0ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCIhaGFzRmlsdGVyKCkgJiYgaXNFbXB0eSgpXCIgY2xhc3M9XCJwLW11bHRpc2VsZWN0LWVtcHR5LW1lc3NhZ2VcIiBbbmdTdHlsZV09XCJ7IGhlaWdodDogc2Nyb2xsZXJPcHRpb25zLml0ZW1TaXplICsgJ3B4JyB9XCIgcm9sZT1cIm9wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghZW1wdHlUZW1wbGF0ZSAmJiAhX2VtcHR5VGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbXB0eU1lc3NhZ2VMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5VGVtcGxhdGUgfHwgX2VtcHR5VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmb290ZXJGYWNldCB8fCBmb290ZXJUZW1wbGF0ZSB8fCBfZm9vdGVyVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInAtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlIHx8IF9mb290ZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgI2xhc3RIaWRkZW5Gb2N1c2FibGVFbFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtaGlkZGVuLWFjY2Vzc2libGUgcC1oaWRkZW4tZm9jdXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uTGFzdEhpZGRlbkZvY3VzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1wLWhpZGRlbi1hY2Nlc3NpYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1wLWhpZGRlbi1mb2N1c2FibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3Atb3ZlcmxheT5cbiAgICBgLFxuICAgIHByb3ZpZGVyczogW01VTFRJU0VMRUNUX1ZBTFVFX0FDQ0VTU09SLCBNdWx0aVNlbGVjdFN0eWxlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgICAgICdbc3R5bGVdJzogJ3N0eWxlJyxcbiAgICAgICAgJyhjbGljayknOiAnb25Db250YWluZXJDbGljaygkZXZlbnQpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlTZWxlY3QgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdDaGVja2VkLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgLyoqXG4gICAgICogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbXBvbmVudFxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBhIHN0cmluZyB0aGF0IGxhYmVscyB0aGUgaW5wdXQgZm9yIGFjY2Vzc2liaWxpdHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFN0eWxlIGNsYXNzIG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0eWxlQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBJbmxpbmUgc3R5bGUgb2YgdGhlIG92ZXJsYXkgcGFuZWwuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcGFuZWxTdHlsZTogYW55O1xuICAgIC8qKlxuICAgICAqIFN0eWxlIGNsYXNzIG9mIHRoZSBvdmVybGF5IHBhbmVsIGVsZW1lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcGFuZWxTdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSWRlbnRpZmllciBvZiB0aGUgZm9jdXMgaW5wdXQgdG8gbWF0Y2ggYSBsYWJlbCBkZWZpbmVkIGZvciB0aGUgY29tcG9uZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGlucHV0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGVuIHByZXNlbnQsIGl0IHNwZWNpZmllcyB0aGF0IHRoZSBlbGVtZW50IHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU3BhbnMgMTAwJSB3aWR0aCBvZiB0aGUgY29udGFpbmVyIHdoZW4gZW5hYmxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZmx1aWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hlbiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGUgY29tcG9uZW50IGNhbm5vdCBiZSBlZGl0ZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJlYWRvbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzcGxheSBvcHRpb25zIGFzIGdyb3VwZWQgd2hlbiBuZXN0ZWQgb3B0aW9ucyBhcmUgcHJvdmlkZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGdyb3VwOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZW4gc3BlY2lmaWVkLCBkaXNwbGF5cyBhbiBpbnB1dCBmaWVsZCB0byBmaWx0ZXIgdGhlIGl0ZW1zIG9uIGtleXVwLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBmaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgcGxhY2Vob2xkZXIgb2YgdGhlIGZpbHRlciBpbnB1dC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWx0ZXJQbGFjZUhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIExvY2FsZSB0byB1c2UgaW4gZmlsdGVyaW5nLiBUaGUgZGVmYXVsdCBsb2NhbGUgaXMgdGhlIGhvc3QgZW52aXJvbm1lbnQncyBjdXJyZW50IGxvY2FsZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWx0ZXJMb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIG9wdGlvbnMgcGFuZWwuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG92ZXJsYXlWaXNpYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEluZGV4IG9mIHRoZSBlbGVtZW50IGluIHRhYmJpbmcgb3JkZXIuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgdGFiaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDA7XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBpbnB1dCB2YXJpYW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgdmFyaWFudDogJ2ZpbGxlZCcgfCAnb3V0bGluZWQnID0gJ291dGxpbmVkJztcbiAgICAvKipcbiAgICAgKiBUYXJnZXQgZWxlbWVudCB0byBhdHRhY2ggdGhlIG92ZXJsYXksIHZhbGlkIHZhbHVlcyBhcmUgXCJib2R5XCIgb3IgYSBsb2NhbCBuZy10ZW1wbGF0ZSB2YXJpYWJsZSBvZiBhbm90aGVyIGVsZW1lbnQgKG5vdGU6IHVzZSBiaW5kaW5nIHdpdGggYnJhY2tldHMgZm9yIHRlbXBsYXRlIHZhcmlhYmxlcywgZS5nLiBbYXBwZW5kVG9dPVwibXlkaXZcIiBmb3IgYSBkaXYgZWxlbWVudCBoYXZpbmcgI215ZGl2IGFzIHZhcmlhYmxlIG5hbWUpLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvOiBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWYgfCBUZW1wbGF0ZVJlZjxhbnk+IHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB8IGFueTtcbiAgICAvKipcbiAgICAgKiBBIHByb3BlcnR5IHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgdmFsdWUgaW4gb3B0aW9ucy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkYXRhS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRXN0YWJsaXNoZXMgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBjb21wb25lbnQgYW5kIGxhYmVsKHMpIHdoZXJlIGl0cyB2YWx1ZSBzaG91bGQgYmUgb25lIG9yIG1vcmUgZWxlbWVudCBJRHMuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgbGFiZWxzIG9mIHNlbGVjdGVkIGl0ZW0gbGFiZWxzIG9yIHVzZSBkZWZhdWx0IGxhYmVsLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqIEBkZWZhdWx0VmFsdWUgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNldCBkaXNwbGF5U2VsZWN0ZWRMYWJlbCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheVNlbGVjdGVkTGFiZWwgPSB2YWw7XG4gICAgfVxuICAgIGdldCBkaXNwbGF5U2VsZWN0ZWRMYWJlbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlTZWxlY3RlZExhYmVsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWNpZGVzIGhvdyBtYW55IHNlbGVjdGVkIGl0ZW0gbGFiZWxzIHRvIHNob3cgYXQgbW9zdC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKiBAZGVmYXVsdFZhbHVlIDNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZXQgbWF4U2VsZWN0ZWRMYWJlbHModmFsOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX21heFNlbGVjdGVkTGFiZWxzID0gdmFsO1xuICAgIH1cbiAgICBnZXQgbWF4U2VsZWN0ZWRMYWJlbHMoKTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhTZWxlY3RlZExhYmVscztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVjaWRlcyBob3cgbWFueSBzZWxlY3RlZCBpdGVtIGxhYmVscyB0byBzaG93IGF0IG1vc3QuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgc2VsZWN0aW9uTGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBMYWJlbCB0byBkaXNwbGF5IGFmdGVyIGV4Y2VlZGluZyBtYXggc2VsZWN0ZWQgbGFiZWxzIGUuZy4gKHswfSBpdGVtcyBzZWxlY3RlZCksIGRlZmF1bHRzIFwiZWxsaXBzaXNcIiBrZXl3b3JkIHRvIGluZGljYXRlIGEgdGV4dC1vdmVyZmxvdy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIGNoZWNrYm94IGF0IGhlYWRlciB0byB0b2dnbGUgYWxsIGl0ZW1zIGF0IG9uY2UuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dUb2dnbGVBbGw6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIFRleHQgdG8gZGlzcGxheSB3aGVuIGZpbHRlcmluZyBkb2VzIG5vdCByZXR1cm4gYW55IHJlc3VsdHMuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZW1wdHlGaWx0ZXJNZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgICAvKipcbiAgICAgKiBUZXh0IHRvIGRpc3BsYXkgd2hlbiB0aGVyZSBpcyBubyBkYXRhLiBEZWZhdWx0cyB0byBnbG9iYWwgdmFsdWUgaW4gaTE4biB0cmFuc2xhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGVtcHR5TWVzc2FnZTogc3RyaW5nID0gJyc7XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBmaWx0ZXIgdmFsdWUgd2hlbiBoaWRpbmcgdGhlIGRyb3Bkb3duLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXNldEZpbHRlck9uSGlkZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEljb24gY2xhc3Mgb2YgdGhlIGRyb3Bkb3duIGljb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZHJvcGRvd25JY29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSWNvbiBjbGFzcyBvZiB0aGUgY2hpcCBpY29uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGNoaXBJY29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgbGFiZWwgZmllbGQgb2YgYW4gb3B0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG9wdGlvbkxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgdmFsdWUgZmllbGQgb2YgYW4gb3B0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG9wdGlvblZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZGlzYWJsZWQgZmllbGQgb2YgYW4gb3B0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG9wdGlvbkRpc2FibGVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgbGFiZWwgZmllbGQgb2YgYW4gb3B0aW9uIGdyb3VwLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG9wdGlvbkdyb3VwTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICdsYWJlbCc7XG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgb3B0aW9ucyBmaWVsZCBvZiBhbiBvcHRpb24gZ3JvdXAuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgb3B0aW9uR3JvdXBDaGlsZHJlbjogc3RyaW5nID0gJ2l0ZW1zJztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIGhlYWRlci5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0hlYWRlcjogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogV2hlbiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCwgZmlsdGVyQnkgZGVjaWRlcyB3aGljaCBmaWVsZCBvciBmaWVsZHMgKGNvbW1hIHNlcGFyYXRlZCkgdG8gc2VhcmNoIGFnYWluc3QuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZmlsdGVyQnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIHZpZXdwb3J0IGluIHBpeGVscywgYSBzY3JvbGxiYXIgaXMgZGVmaW5lZCBpZiBoZWlnaHQgb2YgbGlzdCBleGNlZWRzIHRoaXMgdmFsdWUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0OiBzdHJpbmcgPSAnMjAwcHgnO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgaWYgZGF0YSBpcyBsb2FkZWQgYW5kIGludGVyYWN0ZWQgd2l0aCBpbiBsYXp5IG1hbm5lci5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbGF6eTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGRhdGEgc2hvdWxkIGJlIGxvYWRlZCBvbiBkZW1hbmQgZHVyaW5nIHNjcm9sbC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdmlydHVhbFNjcm9sbDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBtdWx0aXNlbGVjdCBpcyBpbiBsb2FkaW5nIHN0YXRlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBsb2FkaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIGFuIGl0ZW0gaW4gdGhlIGxpc3QgZm9yIFZpcnR1YWxTY3JvbGxpbmcuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgdmlydHVhbFNjcm9sbEl0ZW1TaXplOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSWNvbiB0byBkaXNwbGF5IGluIGxvYWRpbmcgc3RhdGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgbG9hZGluZ0ljb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHVzZSB0aGUgc2Nyb2xsZXIgZmVhdHVyZS4gVGhlIHByb3BlcnRpZXMgb2Ygc2Nyb2xsZXIgY29tcG9uZW50IGNhbiBiZSB1c2VkIGxpa2UgYW4gb2JqZWN0IGluIGl0LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGxPcHRpb25zOiBTY3JvbGxlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB1c2Ugb3ZlcmxheSBBUEkgZmVhdHVyZS4gVGhlIHByb3BlcnRpZXMgb2Ygb3ZlcmxheSBBUEkgY2FuIGJlIHVzZWQgbGlrZSBhbiBvYmplY3QgaW4gaXQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgb3ZlcmxheU9wdGlvbnM6IE92ZXJsYXlPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgYSBzdHJpbmcgdGhhdCBsYWJlbHMgdGhlIGZpbHRlciBpbnB1dC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhcmlhRmlsdGVyTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGhvdyB0aGUgaXRlbXMgYXJlIGZpbHRlcmVkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGZpbHRlck1hdGNoTW9kZTogJ2NvbnRhaW5zJyB8ICdzdGFydHNXaXRoJyB8ICdlbmRzV2l0aCcgfCAnZXF1YWxzJyB8ICdub3RFcXVhbHMnIHwgJ2luJyB8ICdsdCcgfCAnbHRlJyB8ICdndCcgfCAnZ3RlJyA9ICdjb250YWlucyc7XG4gICAgLyoqXG4gICAgICogQWR2aXNvcnkgaW5mb3JtYXRpb24gdG8gZGlzcGxheSBpbiBhIHRvb2x0aXAgb24gaG92ZXIuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgdG9vbHRpcDogc3RyaW5nID0gJyc7XG4gICAgLyoqXG4gICAgICogUG9zaXRpb24gb2YgdGhlIHRvb2x0aXAuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgdG9vbHRpcFBvc2l0aW9uOiAndG9wJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnYm90dG9tJyA9ICdyaWdodCc7XG4gICAgLyoqXG4gICAgICogVHlwZSBvZiBDU1MgcG9zaXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgdG9vbHRpcFBvc2l0aW9uU3R5bGU6IHN0cmluZyA9ICdhYnNvbHV0ZSc7XG4gICAgLyoqXG4gICAgICogU3R5bGUgY2xhc3Mgb2YgdGhlIHRvb2x0aXAuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgdG9vbHRpcFN0eWxlQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIGZvY3VzIHRvIHRoZSBmaWx0ZXIgZWxlbWVudCB3aGVuIHRoZSBvdmVybGF5IGlzIHNob3duLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhdXRvZm9jdXNGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGhvdyB0aGUgc2VsZWN0ZWQgaXRlbXMgYXJlIGRpc3BsYXllZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkaXNwbGF5OiBzdHJpbmcgfCAnY29tbWEnIHwgJ2NoaXAnID0gJ2NvbW1hJztcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBhdXRvY29tcGxldGUgaXMgYWN0aXZlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGF1dG9jb21wbGV0ZTogc3RyaW5nID0gJ29mZic7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHNpemU6ICdsYXJnZScgfCAnc21hbGwnO1xuICAgIC8qKlxuICAgICAqIFdoZW4gZW5hYmxlZCwgYSBjbGVhciBpY29uIGlzIGRpc3BsYXllZCB0byBjbGVhciB0aGUgdmFsdWUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dDbGVhcjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFdoZW4gcHJlc2VudCwgaXQgc3BlY2lmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCBzaG91bGQgYXV0b21hdGljYWxseSBnZXQgZm9jdXMgb24gbG9hZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b2ZvY3VzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHYxNC4yLjAsIHVzZSBvdmVybGF5T3B0aW9ucyBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSBtYW5hZ2UgbGF5ZXJpbmcuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGF1dG9aSW5kZXgoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvWkluZGV4O1xuICAgIH1cbiAgICBzZXQgYXV0b1pJbmRleCh2YWw6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fYXV0b1pJbmRleCA9IHZhbDtcbiAgICAgICAgY29uc29sZS5sb2coJ1RoZSBhdXRvWkluZGV4IHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgc2luY2UgdjE0LjIuMCwgdXNlIG92ZXJsYXlPcHRpb25zIHByb3BlcnR5IGluc3RlYWQuJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIHYxNC4yLjAsIHVzZSBvdmVybGF5T3B0aW9ucyBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqIEJhc2UgekluZGV4IHZhbHVlIHRvIHVzZSBpbiBsYXllcmluZy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgYmFzZVpJbmRleCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fYmFzZVpJbmRleDtcbiAgICB9XG4gICAgc2V0IGJhc2VaSW5kZXgodmFsOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fYmFzZVpJbmRleCA9IHZhbDtcbiAgICAgICAgY29uc29sZS5sb2coJ1RoZSBiYXNlWkluZGV4IHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgc2luY2UgdjE0LjIuMCwgdXNlIG92ZXJsYXlPcHRpb25zIHByb3BlcnR5IGluc3RlYWQuJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRyYW5zaXRpb24gb3B0aW9ucyBvZiB0aGUgc2hvdyBhbmltYXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdjE0LjIuMCwgdXNlIG92ZXJsYXlPcHRpb25zIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IHNob3dUcmFuc2l0aW9uT3B0aW9ucygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd1RyYW5zaXRpb25PcHRpb25zO1xuICAgIH1cbiAgICBzZXQgc2hvd1RyYW5zaXRpb25PcHRpb25zKHZhbDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3Nob3dUcmFuc2l0aW9uT3B0aW9ucyA9IHZhbDtcbiAgICAgICAgY29uc29sZS5sb2coJ1RoZSBzaG93VHJhbnNpdGlvbk9wdGlvbnMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBzaW5jZSB2MTQuMi4wLCB1c2Ugb3ZlcmxheU9wdGlvbnMgcHJvcGVydHkgaW5zdGVhZC4nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJhbnNpdGlvbiBvcHRpb25zIG9mIHRoZSBoaWRlIGFuaW1hdGlvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2MTQuMi4wLCB1c2Ugb3ZlcmxheU9wdGlvbnMgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgaGlkZVRyYW5zaXRpb25PcHRpb25zKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlVHJhbnNpdGlvbk9wdGlvbnM7XG4gICAgfVxuICAgIHNldCBoaWRlVHJhbnNpdGlvbk9wdGlvbnModmFsOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5faGlkZVRyYW5zaXRpb25PcHRpb25zID0gdmFsO1xuICAgICAgICBjb25zb2xlLmxvZygnVGhlIGhpZGVUcmFuc2l0aW9uT3B0aW9ucyBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkIHNpbmNlIHYxNC4yLjAsIHVzZSBvdmVybGF5T3B0aW9ucyBwcm9wZXJ0eSBpbnN0ZWFkLicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMYWJlbCB0byBkaXNwbGF5IHdoZW4gdGhlcmUgYXJlIG5vIHNlbGVjdGlvbnMuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHBsYWNlaG9sZGVyIGluc3RlYWQuXG4gICAgICovXG4gICAgQElucHV0KCkgc2V0IGRlZmF1bHRMYWJlbCh2YWw6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0TGFiZWwgPSB2YWw7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkZWZhdWx0TGFiZWwgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBzaW5jZSAxNi42LjAsIHVzZSBwbGFjZWhvbGRlciBpbnN0ZWFkJyk7XG4gICAgfVxuICAgIGdldCBkZWZhdWx0TGFiZWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRMYWJlbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTGFiZWwgdG8gZGlzcGxheSB3aGVuIHRoZXJlIGFyZSBubyBzZWxlY3Rpb25zLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHNldCBwbGFjZWhvbGRlcih2YWw6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlci5zZXQodmFsKTtcbiAgICB9XG4gICAgZ2V0IHBsYWNlaG9sZGVyKCk6IFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyLmFzUmVhZG9ubHkoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb2JqZWN0cyB0byBkaXNwbGF5IGFzIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgb3B0aW9ucygpOiBhbnlbXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9vcHRpb25zKCk7XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgICBzZXQgb3B0aW9ucyh2YWw6IGFueVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghZGVlcEVxdWFscyh0aGlzLl9vcHRpb25zKCksIHZhbCkpIHtcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMuc2V0KHZhbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hlbiBzcGVjaWZpZWQsIGZpbHRlciBkaXNwbGF5cyB3aXRoIHRoaXMgdmFsdWUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGZpbHRlclZhbHVlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyVmFsdWUoKTtcbiAgICB9XG4gICAgc2V0IGZpbHRlclZhbHVlKHZhbDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9maWx0ZXJWYWx1ZS5zZXQodmFsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXRlbSBzaXplIG9mIGl0ZW0gdG8gYmUgdmlydHVhbCBzY3JvbGxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgdmlydHVhbFNjcm9sbEl0ZW1TaXplIHByb3BlcnR5IGluc3RlYWQuXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IGl0ZW1TaXplKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtU2l6ZTtcbiAgICB9XG4gICAgc2V0IGl0ZW1TaXplKHZhbDogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1TaXplID0gdmFsO1xuICAgICAgICBjb25zb2xlLmxvZygnVGhlIGl0ZW1TaXplIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQsIHVzZSB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgcHJvcGVydHkgaW5zdGVhZC4nKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hldGhlciBhbGwgZGF0YSBpcyBzZWxlY3RlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgc2VsZWN0QWxsKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdEFsbDtcbiAgICB9XG4gICAgc2V0IHNlbGVjdEFsbCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0QWxsID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGZvY3VzIG9uIG9wdGlvbnMgd2hlbiBob3ZlcmluZyBvdmVyIHRoZW0sIGRlZmF1bHRzIHRvIG9wdGlvbkxhYmVsLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBmb2N1c09uSG92ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIEZpZWxkcyB1c2VkIHdoZW4gZmlsdGVyaW5nIHRoZSBvcHRpb25zLCBkZWZhdWx0cyB0byBvcHRpb25MYWJlbC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWx0ZXJGaWVsZHM6IGFueVtdIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhlIG9wdGlvbiB3aWxsIGJlIHNlbGVjdGVkIG9uIGZvY3VzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzZWxlY3RPbkZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBmb2N1cyBvbiB0aGUgZmlyc3QgdmlzaWJsZSBvciBzZWxlY3RlZCBlbGVtZW50IHdoZW4gdGhlIG92ZXJsYXkgcGFuZWwgaXMgc2hvd24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9PcHRpb25Gb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHZhbHVlIGNoYW5nZXMuXG4gICAgICogQHBhcmFtIHtNdWx0aVNlbGVjdENoYW5nZUV2ZW50fSBldmVudCAtIEN1c3RvbSBjaGFuZ2UgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TXVsdGlTZWxlY3RDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE11bHRpU2VsZWN0Q2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZGF0YSBpcyBmaWx0ZXJlZC5cbiAgICAgKiBAcGFyYW0ge011bHRpU2VsZWN0RmlsdGVyRXZlbnR9IGV2ZW50IC0gQ3VzdG9tIGZpbHRlciBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25GaWx0ZXI6IEV2ZW50RW1pdHRlcjxNdWx0aVNlbGVjdEZpbHRlckV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TXVsdGlTZWxlY3RGaWx0ZXJFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBtdWx0aXNlbGVjdCByZWNlaXZlcyBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge011bHRpU2VsZWN0Rm9jdXNFdmVudH0gZXZlbnQgLSBDdXN0b20gZm9jdXMgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxNdWx0aVNlbGVjdEZvY3VzRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNdWx0aVNlbGVjdEZvY3VzRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gbXVsdGlzZWxlY3QgbG9zZXMgZm9jdXMuXG4gICAgICogQHBhcmFtIHtNdWx0aVNlbGVjdEJsdXJFdmVudH0gZXZlbnQgLSBDdXN0b20gYmx1ciBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CbHVyOiBFdmVudEVtaXR0ZXI8TXVsdGlTZWxlY3RCbHVyRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNdWx0aVNlbGVjdEJsdXJFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBjb21wb25lbnQgaXMgY2xpY2tlZC5cbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCAtIEJyb3dzZXIgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGlucHV0IGZpZWxkIGlzIGNsZWFyZWQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2xlYXI6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBvdmVybGF5IHBhbmVsIGJlY29tZXMgdmlzaWJsZS5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QYW5lbFNob3c6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBvdmVybGF5IHBhbmVsIGJlY29tZXMgaGlkZGVuLlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBhbmVsSGlkZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBpbiBsYXp5IG1vZGUgdG8gbG9hZCBuZXcgZGF0YS5cbiAgICAgKiBAcGFyYW0ge011bHRpU2VsZWN0TGF6eUxvYWRFdmVudH0gZXZlbnQgLSBMYXp5IGxvYWQgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTGF6eUxvYWQ6IEV2ZW50RW1pdHRlcjxNdWx0aVNlbGVjdExhenlMb2FkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNdWx0aVNlbGVjdExhenlMb2FkRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIGluIGxhenkgbW9kZSB0byBsb2FkIG5ldyBkYXRhLlxuICAgICAqIEBwYXJhbSB7TXVsdGlTZWxlY3RSZW1vdmVFdmVudH0gZXZlbnQgLSBSZW1vdmUgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVtb3ZlOiBFdmVudEVtaXR0ZXI8TXVsdGlTZWxlY3RSZW1vdmVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE11bHRpU2VsZWN0UmVtb3ZlRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYWxsIGRhdGEgaXMgc2VsZWN0ZWQuXG4gICAgICogQHBhcmFtIHtNdWx0aVNlbGVjdFNlbGVjdEFsbENoYW5nZUV2ZW50fSBldmVudCAtIEN1c3RvbSBzZWxlY3QgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0QWxsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8TXVsdGlTZWxlY3RTZWxlY3RBbGxDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE11bHRpU2VsZWN0U2VsZWN0QWxsQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdvdmVybGF5Jykgb3ZlcmxheVZpZXdDaGlsZDogTnVsbGFibGU8T3ZlcmxheT47XG5cbiAgICBAVmlld0NoaWxkKCdmaWx0ZXJJbnB1dCcpIGZpbHRlcklucHV0Q2hpbGQ6IE51bGxhYmxlPEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZCgnZm9jdXNJbnB1dCcpIGZvY3VzSW5wdXRWaWV3Q2hpbGQ6IE51bGxhYmxlPEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZCgnaXRlbXMnKSBpdGVtc1ZpZXdDaGlsZDogTnVsbGFibGU8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkKCdzY3JvbGxlcicpIHNjcm9sbGVyOiBOdWxsYWJsZTxTY3JvbGxlcj47XG5cbiAgICBAVmlld0NoaWxkKCdsYXN0SGlkZGVuRm9jdXNhYmxlRWwnKSBsYXN0SGlkZGVuRm9jdXNhYmxlRWxlbWVudE9uT3ZlcmxheTogTnVsbGFibGU8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkKCdmaXJzdEhpZGRlbkZvY3VzYWJsZUVsJykgZmlyc3RIaWRkZW5Gb2N1c2FibGVFbGVtZW50T25PdmVybGF5OiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlckNoZWNrYm94JykgaGVhZGVyQ2hlY2tib3hWaWV3Q2hpbGQ6IE51bGxhYmxlPENoZWNrYm94PjtcblxuICAgIEBDb250ZW50Q2hpbGQoRm9vdGVyKSBmb290ZXJGYWNldDogYW55O1xuXG4gICAgQENvbnRlbnRDaGlsZChIZWFkZXIpIGhlYWRlckZhY2V0OiBhbnk7XG5cbiAgICBfY29tcG9uZW50U3R5bGUgPSBpbmplY3QoTXVsdGlTZWxlY3RTdHlsZSk7XG5cbiAgICBzZWFyY2hWYWx1ZTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIHNlYXJjaFRpbWVvdXQ6IGFueTtcblxuICAgIF9zZWxlY3RBbGw6IGJvb2xlYW4gfCB1bmRlZmluZWQgfCBudWxsID0gbnVsbDtcblxuICAgIF9hdXRvWkluZGV4OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgX2Jhc2VaSW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIF9zaG93VHJhbnNpdGlvbk9wdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIF9oaWRlVHJhbnNpdGlvbk9wdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIF9kZWZhdWx0TGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIF9wbGFjZWhvbGRlciA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICBfaXRlbVNpemU6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIF9zZWxlY3Rpb25MaW1pdDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgX2Rpc2FibGVUb29sdGlwID0gZmFsc2U7XG5cbiAgICB2YWx1ZTogYW55W107XG5cbiAgICBwdWJsaWMgX2ZpbHRlcmVkT3B0aW9uczogYW55W10gfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICAgcHVibGljIG9uTW9kZWxDaGFuZ2U6IEZ1bmN0aW9uID0gKCkgPT4ge307XG5cbiAgICBwdWJsaWMgb25Nb2RlbFRvdWNoZWQ6IEZ1bmN0aW9uID0gKCkgPT4ge307XG5cbiAgICBwdWJsaWMgdmFsdWVzQXNTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBmb2N1czogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBmaWx0ZXJlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2l0ZW0nLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBAQ29udGVudENoaWxkKCdncm91cCcsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0pIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBAQ29udGVudENoaWxkKCdsb2FkZXInLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBsb2FkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0pIGhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZmlsdGVyJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgZmlsdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBAQ29udGVudENoaWxkKCdmb290ZXInLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBmb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2VtcHR5ZmlsdGVyJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgZW1wdHlGaWx0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2VtcHR5JywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgZW1wdHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBDb250ZW50Q2hpbGQoJ3NlbGVjdGVkaXRlbXMnLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBzZWxlY3RlZEl0ZW1zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBAQ29udGVudENoaWxkKCdjaGVja2ljb24nLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBjaGVja0ljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2xvYWRpbmdpY29uJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgbG9hZGluZ0ljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2ZpbHRlcmljb24nLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBmaWx0ZXJJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBAQ29udGVudENoaWxkKCdyZW1vdmV0b2tlbmljb24nLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSByZW1vdmVUb2tlbkljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2NoaXBpY29uJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgY2hpcEljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2NsZWFyaWNvbicsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0pIGNsZWFySWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnZHJvcGRvd25pY29uJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgZHJvcGRvd25JY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBAQ29udGVudENoaWxkKCdpdGVtY2hlY2tib3hpY29uJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgaXRlbUNoZWNrYm94SWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgQENvbnRlbnRDaGlsZCgnaGVhZGVyY2hlY2tib3hpY29uJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgaGVhZGVyQ2hlY2tib3hJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFByaW1lVGVtcGxhdGUpIHRlbXBsYXRlczogTnVsbGFibGU8UXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+PjtcblxuICAgIF9pdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBfZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIF9sb2FkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIF9oZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIF9maWx0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIF9mb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuICAgIF9lbXB0eUZpbHRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgX2VtcHR5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBfc2VsZWN0ZWRJdGVtc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgX2NoZWNrSWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgX2xvYWRpbmdJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBfZmlsdGVySWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgX3JlbW92ZVRva2VuSWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgX2NoaXBJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBfY2xlYXJJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBfZHJvcGRvd25JY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cbiAgICBfaXRlbUNoZWNrYm94SWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgX2hlYWRlckNoZWNrYm94SWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICAodGhpcy50ZW1wbGF0ZXMgYXMgUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+KS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKGl0ZW0uZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnaXRlbSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ncm91cFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdzZWxlY3RlZEl0ZW1zJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc1RlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdoZWFkZXInOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFkZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2VtcHR5ZmlsdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1wdHlGaWx0ZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZW1wdHknOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbXB0eVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdmb290ZXInOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb290ZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnbG9hZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGVyVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2NoZWNraWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrSWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdjaGVja2ljb24gaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCByZW1vdmVkIGluIGZ1dHVyZS4gVXNlIGl0ZW1jaGVja2JveGljb24gb3IgaGVhZGVyY2hlY2tib3hpY29uIHRlbXBsYXRlcyBpbnN0ZWFkLicpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2hlYWRlcmNoZWNrYm94aWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlYWRlckNoZWNrYm94SWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdsb2FkaW5naWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2ZpbHRlcmljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJJY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ3JlbW92ZXRva2VuaWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVRva2VuSWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdjbGVhcmljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhckljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZHJvcGRvd25pY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZHJvcGRvd25JY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2l0ZW1jaGVja2JveGljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pdGVtQ2hlY2tib3hJY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2NoaXBpY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hpcEljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlbVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBoZWFkZXJDaGVja2JveEZvY3VzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgZmlsdGVyT3B0aW9uczogTXVsdGlTZWxlY3RGaWx0ZXJPcHRpb25zIHwgdW5kZWZpbmVkO1xuXG4gICAgcHJldmVudE1vZGVsVG91Y2hlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIHByZXZlbnREb2N1bWVudERlZmF1bHQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBpdGVtc1dyYXBwZXI6IGFueTtcblxuICAgIF9kaXNwbGF5U2VsZWN0ZWRMYWJlbDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBfbWF4U2VsZWN0ZWRMYWJlbHM6IG51bWJlciA9IDM7XG5cbiAgICBtb2RlbFZhbHVlID0gc2lnbmFsPGFueT4obnVsbCk7XG5cbiAgICBfZmlsdGVyVmFsdWUgPSBzaWduYWw8YW55PihudWxsKTtcblxuICAgIF9vcHRpb25zID0gc2lnbmFsPGFueVtdPihudWxsKTtcblxuICAgIHN0YXJ0UmFuZ2VJbmRleCA9IHNpZ25hbDxudW1iZXI+KC0xKTtcblxuICAgIGZvY3VzZWRPcHRpb25JbmRleCA9IHNpZ25hbDxudW1iZXI+KC0xKTtcblxuICAgIHNlbGVjdGVkT3B0aW9uczogYW55O1xuXG4gICAgY2xpY2tJblByb2dyZXNzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgZ2V0IGhvc3RDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbXTtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucm9vdENsYXNzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMucm9vdENsYXNzKTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMucm9vdENsYXNzKSkge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKC4uLnRoaXMucm9vdENsYXNzKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5yb290Q2xhc3MgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnJvb3RDbGFzcylcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChrZXkpID0+IHRoaXMucm9vdENsYXNzW2tleV0pXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4gY2xhc3Nlcy5wdXNoKGtleSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3R5bGVDbGFzcykge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuc3R5bGVDbGFzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgZ2V0IHJvb3RDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudFN0eWxlLmNsYXNzZXMucm9vdCh7IGluc3RhbmNlOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIGdldCBsYWJlbENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50U3R5bGUuY2xhc3Nlcy5sYWJlbCh7IGluc3RhbmNlOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIGdldCBlbXB0eU1lc3NhZ2VMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5lbXB0eU1lc3NhZ2UgfHwgdGhpcy5jb25maWcuZ2V0VHJhbnNsYXRpb24oVHJhbnNsYXRpb25LZXlzLkVNUFRZX01FU1NBR0UpO1xuICAgIH1cblxuICAgIGdldCBlbXB0eUZpbHRlck1lc3NhZ2VMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5lbXB0eUZpbHRlck1lc3NhZ2UgfHwgdGhpcy5jb25maWcuZ2V0VHJhbnNsYXRpb24oVHJhbnNsYXRpb25LZXlzLkVNUFRZX0ZJTFRFUl9NRVNTQUdFKTtcbiAgICB9XG5cbiAgICBnZXQgZmlsbGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMubW9kZWxWYWx1ZSgpID09PSAnc3RyaW5nJykgcmV0dXJuICEhdGhpcy5tb2RlbFZhbHVlKCk7XG5cbiAgICAgICAgcmV0dXJuIGlzTm90RW1wdHkodGhpcy5tb2RlbFZhbHVlKCkpO1xuICAgIH1cblxuICAgIGdldCBpc1Zpc2libGVDbGVhckljb24oKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsVmFsdWUoKSAhPSBudWxsICYmIHRoaXMubW9kZWxWYWx1ZSgpICE9PSAnJyAmJiBpc05vdEVtcHR5KHRoaXMubW9kZWxWYWx1ZSgpKSAmJiB0aGlzLnNob3dDbGVhciAmJiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLmZpbGxlZDtcbiAgICB9XG5cbiAgICBnZXQgdG9nZ2xlQWxsQXJpYUxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcudHJhbnNsYXRpb24uYXJpYSA/IHRoaXMuY29uZmlnLnRyYW5zbGF0aW9uLmFyaWFbdGhpcy5hbGxTZWxlY3RlZCgpID8gJ3NlbGVjdEFsbCcgOiAndW5zZWxlY3RBbGwnXSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXQgY2xvc2VBcmlhTGFiZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy50cmFuc2xhdGlvbi5hcmlhID8gdGhpcy5jb25maWcudHJhbnNsYXRpb24uYXJpYS5jbG9zZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXQgbGlzdExhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRUcmFuc2xhdGlvbihUcmFuc2xhdGlvbktleXMuQVJJQSlbJ2xpc3RMYWJlbCddO1xuICAgIH1cblxuICAgIGdldCBoYXNGbHVpZCgpIHtcbiAgICAgICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgZmx1aWRDb21wb25lbnQgPSBuYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3AtZmx1aWQnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmx1aWQgfHwgISFmbHVpZENvbXBvbmVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbFZpc2libGVBbmROb25WaXNpYmxlT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAgPyB0aGlzLmZsYXRPcHRpb25zKHRoaXMub3B0aW9ucykgOiB0aGlzLm9wdGlvbnMgfHwgW107XG4gICAgfVxuXG4gICAgdmlzaWJsZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldEFsbFZpc2libGVBbmROb25WaXNpYmxlT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBpc0FycmF5T2ZPYmplY3RzID0gaXNBcnJheShvcHRpb25zKSAmJiBpc09iamVjdChvcHRpb25zWzBdKTtcblxuICAgICAgICBpZiAodGhpcy5fZmlsdGVyVmFsdWUoKSkge1xuICAgICAgICAgICAgbGV0IGZpbHRlcmVkT3B0aW9ucztcblxuICAgICAgICAgICAgaWYgKGlzQXJyYXlPZk9iamVjdHMpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyKG9wdGlvbnMsIHRoaXMuc2VhcmNoRmllbGRzKCksIHRoaXMuX2ZpbHRlclZhbHVlKCksIHRoaXMuZmlsdGVyTWF0Y2hNb2RlLCB0aGlzLmZpbHRlckxvY2FsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi50b1N0cmluZygpLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5fZmlsdGVyVmFsdWUoKS50b0xvY2FsZUxvd2VyQ2FzZSgpKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXBzID0gdGhpcy5vcHRpb25zIHx8IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gW107XG5cbiAgICAgICAgICAgICAgICBvcHRpb25Hcm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBDaGlsZHJlbiA9IHRoaXMuZ2V0T3B0aW9uR3JvdXBDaGlsZHJlbihncm91cCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBncm91cENoaWxkcmVuLmZpbHRlcigoaXRlbSkgPT4gZmlsdGVyZWRPcHRpb25zLmluY2x1ZGVzKGl0ZW0pKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVvZiB0aGlzLm9wdGlvbkdyb3VwQ2hpbGRyZW4gPT09ICdzdHJpbmcnID8gdGhpcy5vcHRpb25Hcm91cENoaWxkcmVuIDogJ2l0ZW1zJ106IFsuLi5maWx0ZXJlZEl0ZW1zXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mbGF0T3B0aW9ucyhmaWx0ZXJlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZE9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfSk7XG5cbiAgICBsYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgbGV0IGxhYmVsO1xuICAgICAgICBjb25zdCBtb2RlbFZhbHVlID0gdGhpcy5tb2RlbFZhbHVlKCk7XG5cbiAgICAgICAgaWYgKG1vZGVsVmFsdWUgJiYgbW9kZWxWYWx1ZS5sZW5ndGggJiYgdGhpcy5kaXNwbGF5U2VsZWN0ZWRMYWJlbCkge1xuICAgICAgICAgICAgaWYgKGlzTm90RW1wdHkodGhpcy5tYXhTZWxlY3RlZExhYmVscykgJiYgbW9kZWxWYWx1ZS5sZW5ndGggPiB0aGlzLm1heFNlbGVjdGVkTGFiZWxzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWRJdGVtc0xhYmVsKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxhYmVsID0gJyc7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vZGVsVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsICs9ICcsICc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsYWJlbCArPSB0aGlzLmdldExhYmVsQnlWYWx1ZShtb2RlbFZhbHVlW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYWJlbCA9IHRoaXMucGxhY2Vob2xkZXIoKSB8fCB0aGlzLmRlZmF1bHRMYWJlbCB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFiZWw7XG4gICAgfSk7XG5cbiAgICBjaGlwU2VsZWN0ZWRJdGVtcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGlzTm90RW1wdHkodGhpcy5tYXhTZWxlY3RlZExhYmVscykgJiYgdGhpcy5tb2RlbFZhbHVlKCkgJiYgdGhpcy5tb2RlbFZhbHVlKCkubGVuZ3RoID4gdGhpcy5tYXhTZWxlY3RlZExhYmVscyA/IHRoaXMubW9kZWxWYWx1ZSgpLnNsaWNlKDAsIHRoaXMubWF4U2VsZWN0ZWRMYWJlbHMpIDogdGhpcy5tb2RlbFZhbHVlKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG4gICAgICAgIHB1YmxpYyBmaWx0ZXJTZXJ2aWNlOiBGaWx0ZXJTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgb3ZlcmxheVNlcnZpY2U6IE92ZXJsYXlTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbFZhbHVlID0gdGhpcy5tb2RlbFZhbHVlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVPcHRpb25zID0gdGhpcy52aXNpYmxlT3B0aW9ucygpO1xuICAgICAgICAgICAgaWYgKHZpc2libGVPcHRpb25zICYmIGlzTm90RW1wdHkodmlzaWJsZU9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9uVmFsdWUgJiYgdGhpcy5vcHRpb25MYWJlbCAmJiBtb2RlbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gdmlzaWJsZU9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IG1vZGVsVmFsdWUuaW5jbHVkZXMob3B0aW9uW3RoaXMub3B0aW9uTGFiZWxdKSB8fCBtb2RlbFZhbHVlLmluY2x1ZGVzKG9wdGlvblt0aGlzLm9wdGlvblZhbHVlXSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gbW9kZWxWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuaWQgPSB0aGlzLmlkIHx8IHV1aWQoJ3BuX2lkXycpO1xuICAgICAgICB0aGlzLmF1dG9VcGRhdGVNb2RlbCgpO1xuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlckJ5KSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyOiAodmFsdWUpID0+IHRoaXMub25GaWx0ZXJJbnB1dENoYW5nZSh2YWx1ZSksXG4gICAgICAgICAgICAgICAgcmVzZXQ6ICgpID0+IHRoaXMucmVzZXRGaWx0ZXIoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1heFNlbGVjdGlvbkxpbWl0UmVhY2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTGltaXQgJiYgdGhpcy5tb2RlbFZhbHVlKCkgJiYgdGhpcy5tb2RlbFZhbHVlKCkubGVuZ3RoID09PSB0aGlzLnNlbGVjdGlvbkxpbWl0O1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJlZCkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5Vmlld0NoaWxkPy5hbGlnbk92ZXJsYXkoKTtcbiAgICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmxhdE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gKG9wdGlvbnMgfHwgW10pLnJlZHVjZSgocmVzdWx0LCBvcHRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IG9wdGlvbkdyb3VwOiBvcHRpb24sIGdyb3VwOiB0cnVlLCBpbmRleCB9KTtcblxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXBDaGlsZHJlbiA9IHRoaXMuZ2V0T3B0aW9uR3JvdXBDaGlsZHJlbihvcHRpb24pO1xuXG4gICAgICAgICAgICBvcHRpb25Hcm91cENoaWxkcmVuICYmIG9wdGlvbkdyb3VwQ2hpbGRyZW4uZm9yRWFjaCgobykgPT4gcmVzdWx0LnB1c2gobykpO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuXG4gICAgYXV0b1VwZGF0ZU1vZGVsKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RPbkZvY3VzICYmIHRoaXMuYXV0b09wdGlvbkZvY3VzICYmICF0aGlzLmhhc1NlbGVjdGVkT3B0aW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4LnNldCh0aGlzLmZpbmRGaXJzdEZvY3VzZWRPcHRpb25JbmRleCgpKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZSh0aGlzLnZpc2libGVPcHRpb25zKClbdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXgoKV0pO1xuICAgICAgICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdCh7IG9yaWdpbmFsRXZlbnQ6IG51bGwsIG9wdGlvbjogW3ZhbHVlXSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIG1vZGVsIHZhbHVlLlxuICAgICAqIEBncm91cCBNZXRob2RcbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlTW9kZWwodmFsdWUsIGV2ZW50Pykge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZS5zZXQodmFsdWUpO1xuICAgIH1cblxuICAgIG9uSW5wdXRDbGljayhldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXguc2V0KC0xKTtcbiAgICB9XG5cbiAgICBvbk9wdGlvblNlbGVjdChldmVudCwgaXNGb2N1cyA9IGZhbHNlLCBpbmRleCA9IC0xKSB7XG4gICAgICAgIGNvbnN0IHsgb3JpZ2luYWxFdmVudCwgb3B0aW9uIH0gPSBldmVudDtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5pc09wdGlvbkRpc2FibGVkKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RlZChvcHRpb24pO1xuICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLm1vZGVsVmFsdWUoKS5maWx0ZXIoKHZhbCkgPT4gIWVxdWFscyh2YWwsIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSwgdGhpcy5lcXVhbGl0eUtleSgpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFsuLi4odGhpcy5tb2RlbFZhbHVlKCkgfHwgW10pLCB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbildO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVNb2RlbCh2YWx1ZSwgb3JpZ2luYWxFdmVudCk7XG4gICAgICAgIGluZGV4ICE9PSAtMSAmJiB0aGlzLmZvY3VzZWRPcHRpb25JbmRleC5zZXQoaW5kZXgpO1xuXG4gICAgICAgIGlzRm9jdXMgJiYgZm9jdXModGhpcy5mb2N1c0lucHV0Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBpdGVtVmFsdWU6IG9wdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmaW5kU2VsZWN0ZWRPcHRpb25JbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzU2VsZWN0ZWRPcHRpb24oKSA/IHRoaXMudmlzaWJsZU9wdGlvbnMoKS5maW5kSW5kZXgoKG9wdGlvbikgPT4gdGhpcy5pc1ZhbGlkU2VsZWN0ZWRPcHRpb24ob3B0aW9uKSkgOiAtMTtcbiAgICB9XG5cbiAgICBvbk9wdGlvblNlbGVjdFJhbmdlKGV2ZW50LCBzdGFydCA9IC0xLCBlbmQgPSAtMSkge1xuICAgICAgICBzdGFydCA9PT0gLTEgJiYgKHN0YXJ0ID0gdGhpcy5maW5kTmVhcmVzdFNlbGVjdGVkT3B0aW9uSW5kZXgoZW5kLCB0cnVlKSk7XG4gICAgICAgIGVuZCA9PT0gLTEgJiYgKGVuZCA9IHRoaXMuZmluZE5lYXJlc3RTZWxlY3RlZE9wdGlvbkluZGV4KHN0YXJ0KSk7XG5cbiAgICAgICAgaWYgKHN0YXJ0ICE9PSAtMSAmJiBlbmQgIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZVN0YXJ0ID0gTWF0aC5taW4oc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICBjb25zdCByYW5nZUVuZCA9IE1hdGgubWF4KHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZpc2libGVPcHRpb25zKClcbiAgICAgICAgICAgICAgICAuc2xpY2UocmFuZ2VTdGFydCwgcmFuZ2VFbmQgKyAxKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gdGhpcy5pc1ZhbGlkT3B0aW9uKG9wdGlvbikpXG4gICAgICAgICAgICAgICAgLm1hcCgob3B0aW9uKSA9PiB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbikpO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKHZhbHVlLCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWFyY2hGaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5maWx0ZXJCeSB8fCB0aGlzLm9wdGlvbkxhYmVsIHx8ICdsYWJlbCcpLnNwbGl0KCcsJyk7XG4gICAgfVxuXG4gICAgZmluZE5lYXJlc3RTZWxlY3RlZE9wdGlvbkluZGV4KGluZGV4LCBmaXJzdENoZWNrVXAgPSBmYWxzZSkge1xuICAgICAgICBsZXQgbWF0Y2hlZE9wdGlvbkluZGV4ID0gLTE7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzU2VsZWN0ZWRPcHRpb24oKSkge1xuICAgICAgICAgICAgaWYgKGZpcnN0Q2hlY2tVcCkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRPcHRpb25JbmRleCA9IHRoaXMuZmluZFByZXZTZWxlY3RlZE9wdGlvbkluZGV4KGluZGV4KTtcbiAgICAgICAgICAgICAgICBtYXRjaGVkT3B0aW9uSW5kZXggPSBtYXRjaGVkT3B0aW9uSW5kZXggPT09IC0xID8gdGhpcy5maW5kTmV4dFNlbGVjdGVkT3B0aW9uSW5kZXgoaW5kZXgpIDogbWF0Y2hlZE9wdGlvbkluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVkT3B0aW9uSW5kZXggPSB0aGlzLmZpbmROZXh0U2VsZWN0ZWRPcHRpb25JbmRleChpbmRleCk7XG4gICAgICAgICAgICAgICAgbWF0Y2hlZE9wdGlvbkluZGV4ID0gbWF0Y2hlZE9wdGlvbkluZGV4ID09PSAtMSA/IHRoaXMuZmluZFByZXZTZWxlY3RlZE9wdGlvbkluZGV4KGluZGV4KSA6IG1hdGNoZWRPcHRpb25JbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXRjaGVkT3B0aW9uSW5kZXggPiAtMSA/IG1hdGNoZWRPcHRpb25JbmRleCA6IGluZGV4O1xuICAgIH1cblxuICAgIGZpbmRQcmV2U2VsZWN0ZWRPcHRpb25JbmRleChpbmRleCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkT3B0aW9uSW5kZXggPSB0aGlzLmhhc1NlbGVjdGVkT3B0aW9uKCkgJiYgaW5kZXggPiAwID8gZmluZExhc3RJbmRleCh0aGlzLnZpc2libGVPcHRpb25zKCkuc2xpY2UoMCwgaW5kZXgpLCAob3B0aW9uKSA9PiB0aGlzLmlzVmFsaWRTZWxlY3RlZE9wdGlvbihvcHRpb24pKSA6IC0xO1xuXG4gICAgICAgIHJldHVybiBtYXRjaGVkT3B0aW9uSW5kZXggPiAtMSA/IG1hdGNoZWRPcHRpb25JbmRleCA6IC0xO1xuICAgIH1cblxuICAgIGZpbmRGaXJzdEZvY3VzZWRPcHRpb25JbmRleCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuZmluZEZpcnN0U2VsZWN0ZWRPcHRpb25JbmRleCgpO1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4IDwgMCA/IHRoaXMuZmluZEZpcnN0T3B0aW9uSW5kZXgoKSA6IHNlbGVjdGVkSW5kZXg7XG4gICAgfVxuXG4gICAgZmluZEZpcnN0T3B0aW9uSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVPcHRpb25zKCkuZmluZEluZGV4KChvcHRpb24pID0+IHRoaXMuaXNWYWxpZE9wdGlvbihvcHRpb24pKTtcbiAgICB9XG5cbiAgICBmaW5kRmlyc3RTZWxlY3RlZE9wdGlvbkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNTZWxlY3RlZE9wdGlvbigpID8gdGhpcy52aXNpYmxlT3B0aW9ucygpLmZpbmRJbmRleCgob3B0aW9uKSA9PiB0aGlzLmlzVmFsaWRTZWxlY3RlZE9wdGlvbihvcHRpb24pKSA6IC0xO1xuICAgIH1cblxuICAgIGZpbmROZXh0U2VsZWN0ZWRPcHRpb25JbmRleChpbmRleCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkT3B0aW9uSW5kZXggPVxuICAgICAgICAgICAgdGhpcy5oYXNTZWxlY3RlZE9wdGlvbigpICYmIGluZGV4IDwgdGhpcy52aXNpYmxlT3B0aW9ucygpLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICA/IHRoaXMudmlzaWJsZU9wdGlvbnMoKVxuICAgICAgICAgICAgICAgICAgICAgIC5zbGljZShpbmRleCArIDEpXG4gICAgICAgICAgICAgICAgICAgICAgLmZpbmRJbmRleCgob3B0aW9uKSA9PiB0aGlzLmlzVmFsaWRTZWxlY3RlZE9wdGlvbihvcHRpb24pKVxuICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgcmV0dXJuIG1hdGNoZWRPcHRpb25JbmRleCA+IC0xID8gbWF0Y2hlZE9wdGlvbkluZGV4ICsgaW5kZXggKyAxIDogLTE7XG4gICAgfVxuXG4gICAgZXF1YWxpdHlLZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlID8gbnVsbCA6IHRoaXMuZGF0YUtleTtcbiAgICB9XG5cbiAgICBoYXNTZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzTm90RW1wdHkodGhpcy5tb2RlbFZhbHVlKCkpO1xuICAgIH1cblxuICAgIGlzVmFsaWRTZWxlY3RlZE9wdGlvbihvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZE9wdGlvbihvcHRpb24pICYmIHRoaXMuaXNTZWxlY3RlZChvcHRpb24pO1xuICAgIH1cblxuICAgIGlzT3B0aW9uR3JvdXAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5ncm91cCB8fCB0aGlzLm9wdGlvbkdyb3VwTGFiZWwpICYmIG9wdGlvbi5vcHRpb25Hcm91cCAmJiBvcHRpb24uZ3JvdXA7XG4gICAgfVxuXG4gICAgaXNWYWxpZE9wdGlvbihvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbiAmJiAhKHRoaXMuaXNPcHRpb25EaXNhYmxlZChvcHRpb24pIHx8IHRoaXMuaXNPcHRpb25Hcm91cChvcHRpb24pKTtcbiAgICB9XG5cbiAgICBpc09wdGlvbkRpc2FibGVkKG9wdGlvbjogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLm1heFNlbGVjdGlvbkxpbWl0UmVhY2hlZCgpICYmICF0aGlzLmlzU2VsZWN0ZWQob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uRGlzYWJsZWQgPyByZXNvbHZlRmllbGREYXRhKG9wdGlvbiwgdGhpcy5vcHRpb25EaXNhYmxlZCkgOiBvcHRpb24gJiYgb3B0aW9uLmRpc2FibGVkICE9PSB1bmRlZmluZWQgPyBvcHRpb24uZGlzYWJsZWQgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKG9wdGlvbikge1xuICAgICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uKTtcbiAgICAgICAgcmV0dXJuICh0aGlzLm1vZGVsVmFsdWUoKSB8fCBbXSkuc29tZSgodmFsdWUpID0+IGVxdWFscyh2YWx1ZSwgb3B0aW9uVmFsdWUsIHRoaXMuZXF1YWxpdHlLZXkoKSkpO1xuICAgIH1cblxuICAgIGlzT3B0aW9uTWF0Y2hlZChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZE9wdGlvbihvcHRpb24pICYmIHRoaXMuZ2V0T3B0aW9uTGFiZWwob3B0aW9uKS50b1N0cmluZygpLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuZmlsdGVyTG9jYWxlKS5zdGFydHNXaXRoKHRoaXMuc2VhcmNoVmFsdWUudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5maWx0ZXJMb2NhbGUpKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX29wdGlvbnMoKSB8fCAodGhpcy52aXNpYmxlT3B0aW9ucygpICYmIHRoaXMudmlzaWJsZU9wdGlvbnMoKS5sZW5ndGggPT09IDApO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkluZGV4KGluZGV4LCBzY3JvbGxlck9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlydHVhbFNjcm9sbGVyRGlzYWJsZWQgPyBpbmRleCA6IHNjcm9sbGVyT3B0aW9ucyAmJiBzY3JvbGxlck9wdGlvbnMuZ2V0SXRlbU9wdGlvbnMoaW5kZXgpWydpbmRleCddO1xuICAgIH1cblxuICAgIGdldEFyaWFQb3NJbnNldChpbmRleCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHRoaXMub3B0aW9uR3JvdXBMYWJlbFxuICAgICAgICAgICAgICAgID8gaW5kZXggLVxuICAgICAgICAgICAgICAgICAgdGhpcy52aXNpYmxlT3B0aW9ucygpXG4gICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsIGluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gdGhpcy5pc09wdGlvbkdyb3VwKG9wdGlvbikpLmxlbmd0aFxuICAgICAgICAgICAgICAgIDogaW5kZXgpICsgMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBhcmlhU2V0U2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZU9wdGlvbnMoKS5maWx0ZXIoKG9wdGlvbikgPT4gIXRoaXMuaXNPcHRpb25Hcm91cChvcHRpb24pKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZ2V0TGFiZWxCeVZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdyb3VwID8gdGhpcy5mbGF0T3B0aW9ucyh0aGlzLl9vcHRpb25zKCkpIDogdGhpcy5fb3B0aW9ucygpIHx8IFtdO1xuICAgICAgICBjb25zdCBtYXRjaGVkT3B0aW9uID0gb3B0aW9ucy5maW5kKChvcHRpb24pID0+ICF0aGlzLmlzT3B0aW9uR3JvdXAob3B0aW9uKSAmJiBlcXVhbHModGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb24pLCB2YWx1ZSwgdGhpcy5lcXVhbGl0eUtleSgpKSk7XG4gICAgICAgIHJldHVybiBtYXRjaGVkT3B0aW9uID8gdGhpcy5nZXRPcHRpb25MYWJlbChtYXRjaGVkT3B0aW9uKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRJdGVtc0xhYmVsKCkge1xuICAgICAgICBsZXQgcGF0dGVybiA9IC97KC4qPyl9LztcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0aGlzLnNlbGVjdGVkSXRlbXNMYWJlbCA/IHRoaXMuc2VsZWN0ZWRJdGVtc0xhYmVsIDogdGhpcy5jb25maWcuZ2V0VHJhbnNsYXRpb24oVHJhbnNsYXRpb25LZXlzLlNFTEVDVElPTl9NRVNTQUdFKTtcblxuICAgICAgICBpZiAocGF0dGVybi50ZXN0KG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZS5yZXBsYWNlKG1lc3NhZ2UubWF0Y2gocGF0dGVybilbMF0sIHRoaXMubW9kZWxWYWx1ZSgpLmxlbmd0aCArICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkxhYmVsKG9wdGlvbjogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkxhYmVsID8gcmVzb2x2ZUZpZWxkRGF0YShvcHRpb24sIHRoaXMub3B0aW9uTGFiZWwpIDogb3B0aW9uICYmIG9wdGlvbi5sYWJlbCAhPSB1bmRlZmluZWQgPyBvcHRpb24ubGFiZWwgOiBvcHRpb247XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uVmFsdWUob3B0aW9uOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uVmFsdWUgPyByZXNvbHZlRmllbGREYXRhKG9wdGlvbiwgdGhpcy5vcHRpb25WYWx1ZSkgOiAhdGhpcy5vcHRpb25MYWJlbCAmJiBvcHRpb24gJiYgb3B0aW9uLnZhbHVlICE9PSB1bmRlZmluZWQgPyBvcHRpb24udmFsdWUgOiBvcHRpb247XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uR3JvdXBMYWJlbChvcHRpb25Hcm91cDogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkdyb3VwTGFiZWwgPyByZXNvbHZlRmllbGREYXRhKG9wdGlvbkdyb3VwLCB0aGlzLm9wdGlvbkdyb3VwTGFiZWwpIDogb3B0aW9uR3JvdXAgJiYgb3B0aW9uR3JvdXAubGFiZWwgIT0gdW5kZWZpbmVkID8gb3B0aW9uR3JvdXAubGFiZWwgOiBvcHRpb25Hcm91cDtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25Hcm91cENoaWxkcmVuKG9wdGlvbkdyb3VwOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uR3JvdXBDaGlsZHJlbiA/IHJlc29sdmVGaWVsZERhdGEob3B0aW9uR3JvdXAsIHRoaXMub3B0aW9uR3JvdXBDaGlsZHJlbikgOiBvcHRpb25Hcm91cC5pdGVtcztcbiAgICB9XG5cbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZXRhS2V5ID0gZXZlbnQubWV0YUtleSB8fCBldmVudC5jdHJsS2V5O1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXJyb3dEb3duS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFycm93VXBLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uSG9tZUtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVuZEtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uUGFnZURvd25LZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlVXBLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICBjYXNlICdTcGFjZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVudGVyS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uRXNjYXBlS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uVGFiS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnU2hpZnRMZWZ0JzpcbiAgICAgICAgICAgIGNhc2UgJ1NoaWZ0UmlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25TaGlmdEtleSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChldmVudC5jb2RlID09PSAnS2V5QScgJiYgbWV0YUtleSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmlzaWJsZU9wdGlvbnMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigob3B0aW9uKSA9PiB0aGlzLmlzVmFsaWRPcHRpb24ob3B0aW9uKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKG9wdGlvbikgPT4gdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb24pKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKHZhbHVlLCBldmVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhS2V5ICYmIGlzUHJpbnRhYmxlQ2hhcmFjdGVyKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMub3ZlcmxheVZpc2libGUgJiYgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoT3B0aW9ucyhldmVudCwgZXZlbnQua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRmlsdGVyS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFycm93RG93bktleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd1VwS2V5KGV2ZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd0xlZnRLZXkoZXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uSG9tZUtleShldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVuZEtleShldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICAgIGNhc2UgJ051bXBhZEVudGVyJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uRW50ZXJLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICAgICAgICAgIHRoaXMub25Fc2NhcGVLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdUYWInOlxuICAgICAgICAgICAgICAgIHRoaXMub25UYWJLZXkoZXZlbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BcnJvd0xlZnRLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHByZXNzZWRJbklucHV0VGV4dDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHByZXNzZWRJbklucHV0VGV4dCAmJiB0aGlzLmZvY3VzZWRPcHRpb25JbmRleC5zZXQoLTEpO1xuICAgIH1cblxuICAgIG9uQXJyb3dEb3duS2V5KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXgoKSAhPT0gLTEgPyB0aGlzLmZpbmROZXh0T3B0aW9uSW5kZXgodGhpcy5mb2N1c2VkT3B0aW9uSW5kZXgoKSkgOiB0aGlzLmZpbmRGaXJzdEZvY3VzZWRPcHRpb25JbmRleCgpO1xuXG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdFJhbmdlKGV2ZW50LCB0aGlzLnN0YXJ0UmFuZ2VJbmRleCgpLCBvcHRpb25JbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgb3B0aW9uSW5kZXgpO1xuICAgICAgICAhdGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLnNob3coKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgb25BcnJvd1VwS2V5KGV2ZW50LCBwcmVzc2VkSW5JbnB1dFRleHQgPSBmYWxzZSkge1xuICAgICAgICBpZiAoZXZlbnQuYWx0S2V5ICYmICFwcmVzc2VkSW5JbnB1dFRleHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25PcHRpb25TZWxlY3QoZXZlbnQsIHRoaXMudmlzaWJsZU9wdGlvbnMoKVt0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgJiYgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uSW5kZXggPSB0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpICE9PSAtMSA/IHRoaXMuZmluZFByZXZPcHRpb25JbmRleCh0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpKSA6IHRoaXMuZmluZExhc3RGb2N1c2VkT3B0aW9uSW5kZXgoKTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdFJhbmdlKGV2ZW50LCBvcHRpb25JbmRleCwgdGhpcy5zdGFydFJhbmdlSW5kZXgoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRm9jdXNlZE9wdGlvbkluZGV4KGV2ZW50LCBvcHRpb25JbmRleCk7XG5cbiAgICAgICAgICAgICF0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuc2hvdygpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBvbkhvbWVLZXkoZXZlbnQsIHByZXNzZWRJbklucHV0VGV4dCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudFRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgICAgaWYgKHByZXNzZWRJbklucHV0VGV4dCkge1xuICAgICAgICAgICAgY29uc3QgbGVuID0gY3VycmVudFRhcmdldC52YWx1ZS5sZW5ndGg7XG5cbiAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgZXZlbnQuc2hpZnRLZXkgPyBsZW4gOiAwKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4LnNldCgtMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbWV0YUtleSA9IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuY3RybEtleTtcbiAgICAgICAgICAgIGxldCBvcHRpb25JbmRleCA9IHRoaXMuZmluZEZpcnN0T3B0aW9uSW5kZXgoKTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIG1ldGFLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uU2VsZWN0UmFuZ2UoZXZlbnQsIG9wdGlvbkluZGV4LCB0aGlzLnN0YXJ0UmFuZ2VJbmRleCgpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkT3B0aW9uSW5kZXgoZXZlbnQsIG9wdGlvbkluZGV4KTtcblxuICAgICAgICAgICAgIXRoaXMub3ZlcmxheVZpc2libGUgJiYgdGhpcy5zaG93KCk7XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uRW5kS2V5KGV2ZW50LCBwcmVzc2VkSW5JbnB1dFRleHQgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCB7IGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xuXG4gICAgICAgIGlmIChwcmVzc2VkSW5JbnB1dFRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IGN1cnJlbnRUYXJnZXQudmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgY3VycmVudFRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShldmVudC5zaGlmdEtleSA/IDAgOiBsZW4sIGxlbik7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmRleC5zZXQoLTEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG1ldGFLZXkgPSBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgICAgICBsZXQgb3B0aW9uSW5kZXggPSB0aGlzLmZpbmRMYXN0Rm9jdXNlZE9wdGlvbkluZGV4KCk7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSAmJiBtZXRhS2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdFJhbmdlKGV2ZW50LCB0aGlzLnN0YXJ0UmFuZ2VJbmRleCgpLCBvcHRpb25JbmRleCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRm9jdXNlZE9wdGlvbkluZGV4KGV2ZW50LCBvcHRpb25JbmRleCk7XG5cbiAgICAgICAgICAgICF0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuc2hvdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvblBhZ2VEb3duS2V5KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsSW5WaWV3KHRoaXMudmlzaWJsZU9wdGlvbnMoKS5sZW5ndGggLSAxKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvblBhZ2VVcEtleShldmVudCkge1xuICAgICAgICB0aGlzLnNjcm9sbEluVmlldygwKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkVudGVyS2V5KGV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5vbkFycm93RG93bktleShldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb2N1c2VkT3B0aW9uSW5kZXgoKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdFJhbmdlKGV2ZW50LCB0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uU2VsZWN0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIG9wdGlvbjogdGhpcy52aXNpYmxlT3B0aW9ucygpW3RoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCldIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25Fc2NhcGVLZXkoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLmhpZGUodHJ1ZSk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25EZWxldGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0NsZWFyKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyKGV2ZW50KTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblRhYktleShldmVudCwgcHJlc3NlZEluSW5wdXRUZXh0ID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFwcmVzc2VkSW5JbnB1dFRleHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuaGFzRm9jdXNhYmxlRWxlbWVudHMoKSkge1xuICAgICAgICAgICAgICAgIGZvY3VzKGV2ZW50LnNoaWZ0S2V5ID8gdGhpcy5sYXN0SGlkZGVuRm9jdXNhYmxlRWxlbWVudE9uT3ZlcmxheS5uYXRpdmVFbGVtZW50IDogdGhpcy5maXJzdEhpZGRlbkZvY3VzYWJsZUVsZW1lbnRPbk92ZXJsYXkubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb2N1c2VkT3B0aW9uSW5kZXgoKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBvcHRpb246IHRoaXMudmlzaWJsZU9wdGlvbnMoKVt0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpXSB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuaGlkZSh0aGlzLmZpbHRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNoaWZ0S2V5KCkge1xuICAgICAgICB0aGlzLnN0YXJ0UmFuZ2VJbmRleC5zZXQodGhpcy5mb2N1c2VkT3B0aW9uSW5kZXgoKSk7XG4gICAgfVxuXG4gICAgb25Db250YWluZXJDbGljayhldmVudDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubG9hZGluZyB8fCB0aGlzLnJlYWRvbmx5IHx8IChldmVudC50YXJnZXQgYXMgTm9kZSkuaXNTYW1lTm9kZSh0aGlzLmZvY3VzSW5wdXRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMub3ZlcmxheVZpZXdDaGlsZCB8fCAhdGhpcy5vdmVybGF5Vmlld0NoaWxkLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xpY2tJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNsaWNrSW5Qcm9ncmVzcyA9IHRydWU7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAxNTApO1xuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID8gdGhpcy5oaWRlKHRydWUpIDogdGhpcy5zaG93KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNJbnB1dFZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgIHRoaXMub25DbGljay5lbWl0KGV2ZW50KTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgb25GaXJzdEhpZGRlbkZvY3VzKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZUVsID1cbiAgICAgICAgICAgIGV2ZW50LnJlbGF0ZWRUYXJnZXQgPT09IHRoaXMuZm9jdXNJbnB1dFZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudCA/IGdldEZpcnN0Rm9jdXNhYmxlRWxlbWVudCh0aGlzLm92ZXJsYXlWaWV3Q2hpbGQ/Lm92ZXJsYXlWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQsICc6bm90KFtkYXRhLXAtaGlkZGVuLWZvY3VzYWJsZT1cInRydWVcIl0pJykgOiB0aGlzLmZvY3VzSW5wdXRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgZm9jdXMoZm9jdXNhYmxlRWwpO1xuICAgIH1cblxuICAgIG9uSW5wdXRGb2N1cyhldmVudDogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZm9jdXNlZE9wdGlvbkluZGV4ID0gdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXgoKSAhPT0gLTEgPyB0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpIDogdGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLmF1dG9PcHRpb25Gb2N1cyA/IHRoaXMuZmluZEZpcnN0Rm9jdXNlZE9wdGlvbkluZGV4KCkgOiAtMTtcbiAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXguc2V0KGZvY3VzZWRPcHRpb25JbmRleCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgJiYgdGhpcy5zY3JvbGxJblZpZXcodGhpcy5mb2N1c2VkT3B0aW9uSW5kZXgoKSk7XG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQgfSk7XG4gICAgfVxuXG4gICAgb25JbnB1dEJsdXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQgfSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnByZXZlbnRNb2RlbFRvdWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbFRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXZlbnRNb2RlbFRvdWNoZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvbkZpbHRlcklucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBsZXQgdmFsdWU6IHN0cmluZyA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgIHRoaXMuX2ZpbHRlclZhbHVlLnNldCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4LnNldCgtMSk7XG4gICAgICAgIHRoaXMub25GaWx0ZXIuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBmaWx0ZXI6IHRoaXMuX2ZpbHRlclZhbHVlKCkgfSk7XG5cbiAgICAgICAgIXRoaXMudmlydHVhbFNjcm9sbGVyRGlzYWJsZWQgJiYgdGhpcy5zY3JvbGxlci5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpZXdDaGlsZC5hbGlnbk92ZXJsYXkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25MYXN0SGlkZGVuRm9jdXMoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlRWwgPVxuICAgICAgICAgICAgZXZlbnQucmVsYXRlZFRhcmdldCA9PT0gdGhpcy5mb2N1c0lucHV0Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50ID8gZ2V0TGFzdEZvY3VzYWJsZUVsZW1lbnQodGhpcy5vdmVybGF5Vmlld0NoaWxkPy5vdmVybGF5Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50LCAnOm5vdChbZGF0YS1wLWhpZGRlbi1mb2N1c2FibGU9XCJ0cnVlXCJdKScpIDogdGhpcy5mb2N1c0lucHV0Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGZvY3VzKGZvY3VzYWJsZUVsKTtcbiAgICB9XG5cbiAgICBvbk9wdGlvbk1vdXNlRW50ZXIoZXZlbnQsIGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzT25Ib3Zlcikge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkT3B0aW9uSW5kZXgoZXZlbnQsIGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSGVhZGVyQ2hlY2tib3hLZXlEb3duKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ1NwYWNlJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uVG9nZ2xlQWxsKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uVG9nZ2xlQWxsKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkZpbHRlckJsdXIoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXguc2V0KC0xKTtcbiAgICB9XG5cbiAgICBvbkhlYWRlckNoZWNrYm94Rm9jdXMoKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyQ2hlY2tib3hGb2N1cyA9IHRydWU7XG4gICAgfVxuXG4gICAgb25IZWFkZXJDaGVja2JveEJsdXIoKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyQ2hlY2tib3hGb2N1cyA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uVG9nZ2xlQWxsKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdEFsbCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0QWxsQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6ICF0aGlzLmFsbFNlbGVjdGVkKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcHJlLXNlbGVjdGVkIGRpc2FibGVkIG9wdGlvbnMgc2hvdWxkIGFsd2F5cyBiZSBzZWxlY3RlZC5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRGlzYWJsZWRPcHRpb25zID0gdGhpcy5nZXRBbGxWaXNpYmxlQW5kTm9uVmlzaWJsZU9wdGlvbnMoKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKG9wdGlvbikgPT4gdGhpcy5pc1NlbGVjdGVkKG9wdGlvbikgJiYgKHRoaXMub3B0aW9uRGlzYWJsZWQgPyByZXNvbHZlRmllbGREYXRhKG9wdGlvbiwgdGhpcy5vcHRpb25EaXNhYmxlZCkgOiBvcHRpb24gJiYgb3B0aW9uLmRpc2FibGVkICE9PSB1bmRlZmluZWQgPyBvcHRpb24uZGlzYWJsZWQgOiBmYWxzZSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZpc2libGVPcHRpb25zID0gdGhpcy5hbGxTZWxlY3RlZCgpXG4gICAgICAgICAgICAgICAgPyB0aGlzLnZpc2libGVPcHRpb25zKCkuZmlsdGVyKChvcHRpb24pID0+ICF0aGlzLmlzVmFsaWRPcHRpb24ob3B0aW9uKSAmJiB0aGlzLmlzU2VsZWN0ZWQob3B0aW9uKSlcbiAgICAgICAgICAgICAgICA6IHRoaXMudmlzaWJsZU9wdGlvbnMoKS5maWx0ZXIoKG9wdGlvbikgPT4gdGhpcy5pc1NlbGVjdGVkKG9wdGlvbikgfHwgdGhpcy5pc1ZhbGlkT3B0aW9uKG9wdGlvbikpO1xuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25WYWx1ZXMgPSBbLi4uc2VsZWN0ZWREaXNhYmxlZE9wdGlvbnMsIC4uLnZpc2libGVPcHRpb25zXS5tYXAoKG9wdGlvbikgPT4gdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb24pKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gWy4uLm5ldyBTZXQob3B0aW9uVmFsdWVzKV07XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwodmFsdWUsIGV2ZW50KTtcblxuICAgICAgICAgICAgLy8gYmVjYXVzZSBvblRvZ2dsZUFsbCBjb3VsZCBoYXZlIGJlZW4gY2FsbGVkIGR1cmluZyBmaWx0ZXJpbmcsIHRoaXMgYWRkaXRpb25hbCB0ZXN0IG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBiZWZvcmUgY2FsbGluZyBvblNlbGVjdEFsbENoYW5nZS5lbWl0XG4gICAgICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aCB8fCB2YWx1ZS5sZW5ndGggPT09IHRoaXMuZ2V0QWxsVmlzaWJsZUFuZE5vblZpc2libGVPcHRpb25zKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdEFsbENoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6ICEhdmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYXJ0aWFsU2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCB2YWx1ZTogdGhpcy52YWx1ZSB9KTtcbiAgICAgICAgRG9tSGFuZGxlci5mb2N1cyh0aGlzLmhlYWRlckNoZWNrYm94Vmlld0NoaWxkPy5pbnB1dFZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuaGVhZGVyQ2hlY2tib3hGb2N1cyA9IHRydWU7XG5cbiAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5vcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgaW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkgIT09IGluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmRleC5zZXQoaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxJblZpZXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB2aXJ0dWFsU2Nyb2xsZXJEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnZpcnR1YWxTY3JvbGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsSW5WaWV3KGluZGV4ID0gLTEpIHtcbiAgICAgICAgY29uc3QgaWQgPSBpbmRleCAhPT0gLTEgPyBgJHt0aGlzLmlkfV8ke2luZGV4fWAgOiB0aGlzLmZvY3VzZWRPcHRpb25JZDtcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNWaWV3Q2hpbGQgJiYgdGhpcy5pdGVtc1ZpZXdDaGlsZC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZmluZFNpbmdsZSh0aGlzLml0ZW1zVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQsIGBsaVtpZD1cIiR7aWR9XCJdYCk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcgJiYgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcsIGlubGluZTogJ25lYXJlc3QnIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsZXJEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwgJiYgdGhpcy5zY3JvbGxlcj8uc2Nyb2xsVG9JbmRleChpbmRleCAhPT0gLTEgPyBpbmRleCA6IHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkpO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGZvY3VzZWRPcHRpb25JZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkgIT09IC0xID8gYCR7dGhpcy5pZH1fJHt0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpfWAgOiBudWxsO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZS5zZXQodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbk1vZGVsVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUodmFsOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB2YWw7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgYWxsU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdEFsbCAhPT0gbnVsbCA/IHRoaXMuc2VsZWN0QWxsIDogaXNOb3RFbXB0eSh0aGlzLnZpc2libGVPcHRpb25zKCkpICYmIHRoaXMudmlzaWJsZU9wdGlvbnMoKS5ldmVyeSgob3B0aW9uKSA9PiB0aGlzLmlzT3B0aW9uR3JvdXAob3B0aW9uKSB8fCB0aGlzLmlzT3B0aW9uRGlzYWJsZWQob3B0aW9uKSB8fCB0aGlzLmlzU2VsZWN0ZWQob3B0aW9uKSk7XG4gICAgfVxuXG4gICAgcGFydGlhbFNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbnMgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPCB0aGlzLm9wdGlvbnMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIHRoZSBwYW5lbC5cbiAgICAgKiBAZ3JvdXAgTWV0aG9kXG4gICAgICovXG4gICAgcHVibGljIHNob3coaXNGb2N1cz8pIHtcbiAgICAgICAgdGhpcy5vdmVybGF5VmlzaWJsZSA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgZm9jdXNlZE9wdGlvbkluZGV4ID0gdGhpcy5mb2N1c2VkT3B0aW9uSW5kZXgoKSAhPT0gLTEgPyB0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpIDogdGhpcy5hdXRvT3B0aW9uRm9jdXMgPyB0aGlzLmZpbmRGaXJzdEZvY3VzZWRPcHRpb25JbmRleCgpIDogdGhpcy5maW5kU2VsZWN0ZWRPcHRpb25JbmRleCgpO1xuICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmRleC5zZXQoZm9jdXNlZE9wdGlvbkluZGV4KTtcblxuICAgICAgICBpZiAoaXNGb2N1cykge1xuICAgICAgICAgICAgZm9jdXModGhpcy5mb2N1c0lucHV0Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZXMgdGhlIHBhbmVsLlxuICAgICAqIEBncm91cCBNZXRob2RcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZShpc0ZvY3VzPykge1xuICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4LnNldCgtMSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyICYmIHRoaXMucmVzZXRGaWx0ZXJPbkhpZGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRGaWx0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vdmVybGF5T3B0aW9ucz8ubW9kZSA9PT0gJ21vZGFsJykge1xuICAgICAgICAgICAgdW5ibG9ja0JvZHlTY3JvbGwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzRm9jdXMgJiYgZm9jdXModGhpcy5mb2N1c0lucHV0Vmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5vblBhbmVsSGlkZS5lbWl0KCk7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgb25PdmVybGF5QW5pbWF0aW9uU3RhcnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQudG9TdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAndmlzaWJsZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1dyYXBwZXIgPSBmaW5kU2luZ2xlKHRoaXMub3ZlcmxheVZpZXdDaGlsZD8ub3ZlcmxheVZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudCwgdGhpcy52aXJ0dWFsU2Nyb2xsID8gJy5wLXNjcm9sbGVyJyA6ICcucC1tdWx0aXNlbGVjdC1pdGVtcy13cmFwcGVyJyk7XG4gICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMuc2Nyb2xsZXI/LnNldENvbnRlbnRFbCh0aGlzLml0ZW1zVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zKCkgJiYgdGhpcy5fb3B0aW9ucygpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gaXNOb3RFbXB0eSh0aGlzLm1vZGVsVmFsdWUoKSkgPyB0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpIDogLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbGVyPy5zY3JvbGxUb0luZGV4KHNlbGVjdGVkSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkTGlzdEl0ZW0gPSBmaW5kU2luZ2xlKHRoaXMuaXRlbXNXcmFwcGVyLCAnW2RhdGEtcC1oaWdobGlnaHQ9XCJ0cnVlXCJdJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZExpc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0SXRlbS5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcsIGlubGluZTogJ25lYXJlc3QnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVySW5wdXRDaGlsZCAmJiB0aGlzLmZpbHRlcklucHV0Q2hpbGQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZlbnRNb2RlbFRvdWNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dG9mb2N1c0ZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJbnB1dENoaWxkLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub25QYW5lbFNob3cuZW1pdCgpO1xuICAgICAgICAgICAgY2FzZSAndm9pZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1dyYXBwZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMub25Nb2RlbFRvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0RmlsdGVyKCkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJJbnB1dENoaWxkICYmIHRoaXMuZmlsdGVySW5wdXRDaGlsZC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcklucHV0Q2hpbGQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZmlsdGVyVmFsdWUuc2V0KG51bGwpO1xuICAgICAgICB0aGlzLl9maWx0ZXJlZE9wdGlvbnMgPSBudWxsO1xuICAgIH1cblxuICAgIGNsb3NlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY2xlYXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKG51bGwsIGV2ZW50KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBudWxsO1xuICAgICAgICB0aGlzLm9uQ2xlYXIuZW1pdCgpO1xuICAgICAgICB0aGlzLl9kaXNhYmxlVG9vbHRpcCA9IHRydWU7XG5cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgbGFiZWxDb250YWluZXJNb3VzZUxlYXZlKCkge1xuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZVRvb2x0aXApIHRoaXMuX2Rpc2FibGVUb29sdGlwID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVtb3ZlT3B0aW9uKG9wdGlvblZhbHVlLCBldmVudCkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLm1vZGVsVmFsdWUoKS5maWx0ZXIoKHZhbCkgPT4gIWVxdWFscyh2YWwsIG9wdGlvblZhbHVlLCB0aGlzLmVxdWFsaXR5S2V5KCkpKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKHZhbHVlLCBldmVudCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGl0ZW1WYWx1ZTogb3B0aW9uVmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25SZW1vdmUuZW1pdCh7XG4gICAgICAgICAgICBuZXdWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICByZW1vdmVkOiBvcHRpb25WYWx1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBldmVudCAmJiBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBmaW5kTmV4dEl0ZW0oaXRlbTogYW55KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgbGV0IG5leHRJdGVtID0gaXRlbS5uZXh0RWxlbWVudFNpYmxpbmc7XG5cbiAgICAgICAgaWYgKG5leHRJdGVtKSByZXR1cm4gaGFzQ2xhc3MobmV4dEl0ZW0uY2hpbGRyZW5bMF0sICdwLWRpc2FibGVkJykgfHwgaXNIaWRkZW4obmV4dEl0ZW0uY2hpbGRyZW5bMF0pIHx8IGhhc0NsYXNzKG5leHRJdGVtLCAncC1tdWx0aXNlbGVjdC1pdGVtLWdyb3VwJykgPyB0aGlzLmZpbmROZXh0SXRlbShuZXh0SXRlbSkgOiBuZXh0SXRlbS5jaGlsZHJlblswXTtcbiAgICAgICAgZWxzZSByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmaW5kUHJldkl0ZW0oaXRlbTogYW55KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgbGV0IHByZXZJdGVtID0gaXRlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuXG4gICAgICAgIGlmIChwcmV2SXRlbSkgcmV0dXJuIGhhc0NsYXNzKHByZXZJdGVtLmNoaWxkcmVuWzBdLCAncC1kaXNhYmxlZCcpIHx8IGlzSGlkZGVuKHByZXZJdGVtLmNoaWxkcmVuWzBdKSB8fCBoYXNDbGFzcyhwcmV2SXRlbSwgJ3AtbXVsdGlzZWxlY3QtaXRlbS1ncm91cCcpID8gdGhpcy5maW5kUHJldkl0ZW0ocHJldkl0ZW0pIDogcHJldkl0ZW0uY2hpbGRyZW5bMF07XG4gICAgICAgIGVsc2UgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZmluZE5leHRPcHRpb25JbmRleChpbmRleCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkT3B0aW9uSW5kZXggPVxuICAgICAgICAgICAgaW5kZXggPCB0aGlzLnZpc2libGVPcHRpb25zKCkubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgID8gdGhpcy52aXNpYmxlT3B0aW9ucygpXG4gICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4ICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAuZmluZEluZGV4KChvcHRpb24pID0+IHRoaXMuaXNWYWxpZE9wdGlvbihvcHRpb24pKVxuICAgICAgICAgICAgICAgIDogLTE7XG4gICAgICAgIHJldHVybiBtYXRjaGVkT3B0aW9uSW5kZXggPiAtMSA/IG1hdGNoZWRPcHRpb25JbmRleCArIGluZGV4ICsgMSA6IGluZGV4O1xuICAgIH1cblxuICAgIGZpbmRQcmV2T3B0aW9uSW5kZXgoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZE9wdGlvbkluZGV4ID0gaW5kZXggPiAwID8gZmluZExhc3RJbmRleCh0aGlzLnZpc2libGVPcHRpb25zKCkuc2xpY2UoMCwgaW5kZXgpLCAob3B0aW9uKSA9PiB0aGlzLmlzVmFsaWRPcHRpb24ob3B0aW9uKSkgOiAtMTtcblxuICAgICAgICByZXR1cm4gbWF0Y2hlZE9wdGlvbkluZGV4ID4gLTEgPyBtYXRjaGVkT3B0aW9uSW5kZXggOiBpbmRleDtcbiAgICB9XG5cbiAgICBmaW5kTGFzdFNlbGVjdGVkT3B0aW9uSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1NlbGVjdGVkT3B0aW9uKCkgPyBmaW5kTGFzdEluZGV4KHRoaXMudmlzaWJsZU9wdGlvbnMoKSwgKG9wdGlvbikgPT4gdGhpcy5pc1ZhbGlkU2VsZWN0ZWRPcHRpb24ob3B0aW9uKSkgOiAtMTtcbiAgICB9XG5cbiAgICBmaW5kTGFzdEZvY3VzZWRPcHRpb25JbmRleCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuZmluZExhc3RTZWxlY3RlZE9wdGlvbkluZGV4KCk7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkSW5kZXggPCAwID8gdGhpcy5maW5kTGFzdE9wdGlvbkluZGV4KCkgOiBzZWxlY3RlZEluZGV4O1xuICAgIH1cblxuICAgIGZpbmRMYXN0T3B0aW9uSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiBmaW5kTGFzdEluZGV4KHRoaXMudmlzaWJsZU9wdGlvbnMoKSwgKG9wdGlvbikgPT4gdGhpcy5pc1ZhbGlkT3B0aW9uKG9wdGlvbikpO1xuICAgIH1cblxuICAgIHNlYXJjaE9wdGlvbnMoZXZlbnQsIGNoYXIpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICh0aGlzLnNlYXJjaFZhbHVlIHx8ICcnKSArIGNoYXI7XG5cbiAgICAgICAgbGV0IG9wdGlvbkluZGV4ID0gLTE7XG4gICAgICAgIGxldCBtYXRjaGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkgIT09IC0xKSB7XG4gICAgICAgICAgICBvcHRpb25JbmRleCA9IHRoaXMudmlzaWJsZU9wdGlvbnMoKVxuICAgICAgICAgICAgICAgIC5zbGljZSh0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpKVxuICAgICAgICAgICAgICAgIC5maW5kSW5kZXgoKG9wdGlvbikgPT4gdGhpcy5pc09wdGlvbk1hdGNoZWQob3B0aW9uKSk7XG4gICAgICAgICAgICBvcHRpb25JbmRleCA9XG4gICAgICAgICAgICAgICAgb3B0aW9uSW5kZXggPT09IC0xXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy52aXNpYmxlT3B0aW9ucygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCB0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZEluZGV4KChvcHRpb24pID0+IHRoaXMuaXNPcHRpb25NYXRjaGVkKG9wdGlvbikpXG4gICAgICAgICAgICAgICAgICAgIDogb3B0aW9uSW5kZXggKyB0aGlzLmZvY3VzZWRPcHRpb25JbmRleCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9uSW5kZXggPSB0aGlzLnZpc2libGVPcHRpb25zKCkuZmluZEluZGV4KChvcHRpb24pID0+IHRoaXMuaXNPcHRpb25NYXRjaGVkKG9wdGlvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uSW5kZXggPT09IC0xICYmIHRoaXMuZm9jdXNlZE9wdGlvbkluZGV4KCkgPT09IC0xKSB7XG4gICAgICAgICAgICBvcHRpb25JbmRleCA9IHRoaXMuZmluZEZpcnN0Rm9jdXNlZE9wdGlvbkluZGV4KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgb3B0aW9uSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIH0sIDUwMCk7XG5cbiAgICAgICAgcmV0dXJuIG1hdGNoZWQ7XG4gICAgfVxuXG4gICAgYWN0aXZhdGVGaWx0ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0ZpbHRlcigpICYmIHRoaXMuX29wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkR3JvdXBzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgb3B0Z3JvdXAgb2YgdGhpcy5vcHRpb25zIGFzIGFueVtdKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFN1Yk9wdGlvbnMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyKHRoaXMuZ2V0T3B0aW9uR3JvdXBDaGlsZHJlbihvcHRncm91cCksIHRoaXMuc2VhcmNoRmllbGRzKCksIHRoaXMuZmlsdGVyVmFsdWUsIHRoaXMuZmlsdGVyTWF0Y2hNb2RlLCB0aGlzLmZpbHRlckxvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZFN1Yk9wdGlvbnMgJiYgZmlsdGVyZWRTdWJPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRHcm91cHMucHVzaCh7IC4uLm9wdGdyb3VwLCAuLi57IFt0aGlzLm9wdGlvbkdyb3VwQ2hpbGRyZW5dOiBmaWx0ZXJlZFN1Yk9wdGlvbnMgfSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmVkT3B0aW9ucyA9IGZpbHRlcmVkR3JvdXBzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyKHRoaXMub3B0aW9ucyBhcyBhbnlbXSwgdGhpcy5zZWFyY2hGaWVsZHMoKSwgdGhpcy5maWx0ZXJWYWx1ZSwgdGhpcy5maWx0ZXJNYXRjaE1vZGUsIHRoaXMuZmlsdGVyTG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbHRlcmVkT3B0aW9ucyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYXNGb2N1c2FibGVFbGVtZW50cygpIHtcbiAgICAgICAgcmV0dXJuIGdldEZvY3VzYWJsZUVsZW1lbnRzKHRoaXMub3ZlcmxheVZpZXdDaGlsZC5vdmVybGF5Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQsICc6bm90KFtkYXRhLXAtaGlkZGVuLWZvY3VzYWJsZT1cInRydWVcIl0pJykubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJWYWx1ZSgpICYmIHRoaXMuX2ZpbHRlclZhbHVlKCkudHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtNdWx0aVNlbGVjdCwgU2hhcmVkTW9kdWxlXSxcbiAgICBleHBvcnRzOiBbTXVsdGlTZWxlY3QsIFNoYXJlZE1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlTZWxlY3RNb2R1bGUge31cbiJdfQ==