@qius.solutions/parallel-ui-angular 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1830) hide show
  1. package/LICENSE +88 -0
  2. package/README.md +254 -0
  3. package/accordion/accordion.d.ts +77 -0
  4. package/accordion/index.d.ts +5 -0
  5. package/accordion/public_api.d.ts +1 -0
  6. package/animate/animate.d.ts +27 -0
  7. package/animate/index.d.ts +5 -0
  8. package/animate/public_api.d.ts +1 -0
  9. package/api/blockableui.d.ts +3 -0
  10. package/api/confirmaeventtype.d.ts +5 -0
  11. package/api/confirmation.d.ts +24 -0
  12. package/api/confirmationservice.d.ts +13 -0
  13. package/api/contextmenuservice.d.ts +10 -0
  14. package/api/filtermatchmode.d.ts +22 -0
  15. package/api/filtermetadata.d.ts +5 -0
  16. package/api/filteroperator.d.ts +4 -0
  17. package/api/filterservice.d.ts +29 -0
  18. package/api/index.d.ts +5 -0
  19. package/api/lazyloadevent.d.ts +15 -0
  20. package/api/megamenuitem.d.ts +36 -0
  21. package/api/menuitem.d.ts +55 -0
  22. package/api/message.d.ts +15 -0
  23. package/api/messageservice.d.ts +13 -0
  24. package/api/overlayoptions.d.ts +50 -0
  25. package/api/overlayservice.d.ts +9 -0
  26. package/api/parallel-ui-angular-config.d.ts +20 -0
  27. package/api/parallel-ui-icons.d.ts +260 -0
  28. package/api/public_api.d.ts +29 -0
  29. package/api/selectitem.d.ts +8 -0
  30. package/api/selectitemgroup.d.ts +6 -0
  31. package/api/shared.d.ts +25 -0
  32. package/api/sortevent.d.ts +8 -0
  33. package/api/sortmeta.d.ts +4 -0
  34. package/api/tablestate.d.ts +20 -0
  35. package/api/translation.d.ts +47 -0
  36. package/api/translationkeys.d.ts +42 -0
  37. package/api/treedragdropservice.d.ts +12 -0
  38. package/api/treenode.d.ts +19 -0
  39. package/api/treenodedragevent.d.ts +8 -0
  40. package/autocomplete/autocomplete.d.ts +183 -0
  41. package/autocomplete/index.d.ts +5 -0
  42. package/autocomplete/public_api.d.ts +1 -0
  43. package/autofocus/autofocus.d.ts +17 -0
  44. package/autofocus/index.d.ts +5 -0
  45. package/autofocus/public_api.d.ts +1 -0
  46. package/avatar/avatar.d.ts +28 -0
  47. package/avatar/index.d.ts +5 -0
  48. package/avatar/public_api.d.ts +1 -0
  49. package/avatargroup/avatargroup.d.ts +13 -0
  50. package/avatargroup/index.d.ts +5 -0
  51. package/avatargroup/public_api.d.ts +1 -0
  52. package/badge/badge.d.ts +56 -0
  53. package/badge/index.d.ts +5 -0
  54. package/badge/public_api.d.ts +1 -0
  55. package/baseicon/baseicon.d.ts +14 -0
  56. package/baseicon/index.d.ts +5 -0
  57. package/baseicon/public_api.d.ts +1 -0
  58. package/blockui/blockui.d.ts +37 -0
  59. package/blockui/index.d.ts +5 -0
  60. package/blockui/public_api.d.ts +1 -0
  61. package/breadcrumb/breadcrumb.d.ts +29 -0
  62. package/breadcrumb/index.d.ts +5 -0
  63. package/breadcrumb/public_api.d.ts +1 -0
  64. package/button/button.d.ts +87 -0
  65. package/button/index.d.ts +5 -0
  66. package/button/public_api.d.ts +1 -0
  67. package/calendar/calendar.d.ts +353 -0
  68. package/calendar/index.d.ts +5 -0
  69. package/calendar/public_api.d.ts +1 -0
  70. package/card/card.d.ts +30 -0
  71. package/card/index.d.ts +5 -0
  72. package/card/public_api.d.ts +1 -0
  73. package/carousel/carousel.d.ts +112 -0
  74. package/carousel/index.d.ts +5 -0
  75. package/carousel/public_api.d.ts +1 -0
  76. package/cascadeselect/cascadeselect.d.ts +156 -0
  77. package/cascadeselect/index.d.ts +5 -0
  78. package/cascadeselect/public_api.d.ts +1 -0
  79. package/chart/chart.d.ts +39 -0
  80. package/chart/index.d.ts +5 -0
  81. package/chart/public_api.d.ts +1 -0
  82. package/checkbox/checkbox.d.ts +56 -0
  83. package/checkbox/index.d.ts +5 -0
  84. package/checkbox/public_api.d.ts +1 -0
  85. package/chip/chip.d.ts +33 -0
  86. package/chip/index.d.ts +5 -0
  87. package/chip/public_api.d.ts +1 -0
  88. package/chips/chips.d.ts +73 -0
  89. package/chips/index.d.ts +5 -0
  90. package/chips/public_api.d.ts +1 -0
  91. package/colorpicker/colorpicker.d.ts +141 -0
  92. package/colorpicker/index.d.ts +5 -0
  93. package/colorpicker/public_api.d.ts +1 -0
  94. package/confirmdialog/confirmdialog.d.ts +116 -0
  95. package/confirmdialog/index.d.ts +5 -0
  96. package/confirmdialog/public_api.d.ts +1 -0
  97. package/confirmpopup/confirmpopup.d.ts +71 -0
  98. package/confirmpopup/index.d.ts +5 -0
  99. package/confirmpopup/public_api.d.ts +1 -0
  100. package/contextmenu/contextmenu.d.ts +92 -0
  101. package/contextmenu/index.d.ts +5 -0
  102. package/contextmenu/public_api.d.ts +1 -0
  103. package/dataview/dataview.d.ts +104 -0
  104. package/dataview/index.d.ts +5 -0
  105. package/dataview/public_api.d.ts +1 -0
  106. package/defer/defer.d.ts +29 -0
  107. package/defer/index.d.ts +5 -0
  108. package/defer/public_api.d.ts +1 -0
  109. package/dialog/dialog.d.ts +155 -0
  110. package/dialog/index.d.ts +5 -0
  111. package/dialog/public_api.d.ts +1 -0
  112. package/divider/divider.d.ts +29 -0
  113. package/divider/index.d.ts +5 -0
  114. package/divider/public_api.d.ts +1 -0
  115. package/dock/dock.d.ts +43 -0
  116. package/dock/index.d.ts +5 -0
  117. package/dock/public_api.d.ts +1 -0
  118. package/dom/connectedoverlayscrollhandler.d.ts +9 -0
  119. package/dom/domhandler.d.ts +82 -0
  120. package/dom/index.d.ts +5 -0
  121. package/dom/public_api.d.ts +2 -0
  122. package/dragdrop/dragdrop.d.ts +65 -0
  123. package/dragdrop/index.d.ts +5 -0
  124. package/dragdrop/public_api.d.ts +1 -0
  125. package/dropdown/dropdown.d.ts +225 -0
  126. package/dropdown/index.d.ts +5 -0
  127. package/dropdown/public_api.d.ts +1 -0
  128. package/dynamicdialog/dialogservice.d.ts +18 -0
  129. package/dynamicdialog/dynamicdialog-config.d.ts +29 -0
  130. package/dynamicdialog/dynamicdialog-injector.d.ts +8 -0
  131. package/dynamicdialog/dynamicdialog-ref.d.ts +25 -0
  132. package/dynamicdialog/dynamicdialog.d.ts +101 -0
  133. package/dynamicdialog/dynamicdialogcontent.d.ts +8 -0
  134. package/dynamicdialog/index.d.ts +5 -0
  135. package/dynamicdialog/public_api.d.ts +6 -0
  136. package/editor/editor.d.ts +50 -0
  137. package/editor/index.d.ts +5 -0
  138. package/editor/public_api.d.ts +1 -0
  139. package/esm2020/accordion/accordion.mjs +396 -0
  140. package/esm2020/accordion/public_api.mjs +2 -0
  141. package/esm2020/accordion/qius.solutions-parallel-ui-angular-accordion.mjs +5 -0
  142. package/esm2020/animate/animate.mjs +79 -0
  143. package/esm2020/animate/public_api.mjs +2 -0
  144. package/esm2020/animate/qius.solutions-parallel-ui-angular-animate.mjs +5 -0
  145. package/esm2020/api/blockableui.mjs +2 -0
  146. package/esm2020/api/confirmaeventtype.mjs +7 -0
  147. package/esm2020/api/confirmation.mjs +2 -0
  148. package/esm2020/api/confirmationservice.mjs +28 -0
  149. package/esm2020/api/contextmenuservice.mjs +23 -0
  150. package/esm2020/api/filtermatchmode.mjs +23 -0
  151. package/esm2020/api/filtermetadata.mjs +2 -0
  152. package/esm2020/api/filteroperator.mjs +5 -0
  153. package/esm2020/api/filterservice.mjs +221 -0
  154. package/esm2020/api/lazyloadevent.mjs +2 -0
  155. package/esm2020/api/megamenuitem.mjs +2 -0
  156. package/esm2020/api/menuitem.mjs +2 -0
  157. package/esm2020/api/message.mjs +2 -0
  158. package/esm2020/api/messageservice.mjs +30 -0
  159. package/esm2020/api/overlayoptions.mjs +2 -0
  160. package/esm2020/api/overlayservice.mjs +21 -0
  161. package/esm2020/api/parallel-ui-angular-config.mjs +84 -0
  162. package/esm2020/api/parallel-ui-icons.mjs +261 -0
  163. package/esm2020/api/public_api.mjs +30 -0
  164. package/esm2020/api/qius.solutions-parallel-ui-angular-api.mjs +5 -0
  165. package/esm2020/api/selectitem.mjs +2 -0
  166. package/esm2020/api/selectitemgroup.mjs +2 -0
  167. package/esm2020/api/shared.mjs +62 -0
  168. package/esm2020/api/sortevent.mjs +2 -0
  169. package/esm2020/api/sortmeta.mjs +2 -0
  170. package/esm2020/api/tablestate.mjs +2 -0
  171. package/esm2020/api/translation.mjs +2 -0
  172. package/esm2020/api/translationkeys.mjs +43 -0
  173. package/esm2020/api/treedragdropservice.mjs +23 -0
  174. package/esm2020/api/treenode.mjs +2 -0
  175. package/esm2020/api/treenodedragevent.mjs +2 -0
  176. package/esm2020/autocomplete/autocomplete.mjs +1144 -0
  177. package/esm2020/autocomplete/public_api.mjs +2 -0
  178. package/esm2020/autocomplete/qius.solutions-parallel-ui-angular-autocomplete.mjs +5 -0
  179. package/esm2020/autofocus/autofocus.mjs +51 -0
  180. package/esm2020/autofocus/public_api.mjs +2 -0
  181. package/esm2020/autofocus/qius.solutions-parallel-ui-angular-autofocus.mjs +5 -0
  182. package/esm2020/avatar/avatar.mjs +75 -0
  183. package/esm2020/avatar/public_api.mjs +2 -0
  184. package/esm2020/avatar/qius.solutions-parallel-ui-angular-avatar.mjs +5 -0
  185. package/esm2020/avatargroup/avatargroup.mjs +40 -0
  186. package/esm2020/avatargroup/public_api.mjs +2 -0
  187. package/esm2020/avatargroup/qius.solutions-parallel-ui-angular-avatargroup.mjs +5 -0
  188. package/esm2020/badge/badge.mjs +182 -0
  189. package/esm2020/badge/public_api.mjs +2 -0
  190. package/esm2020/badge/qius.solutions-parallel-ui-angular-badge.mjs +5 -0
  191. package/esm2020/baseicon/baseicon.mjs +41 -0
  192. package/esm2020/baseicon/public_api.mjs +2 -0
  193. package/esm2020/baseicon/qius.solutions-parallel-ui-angular-baseicon.mjs +5 -0
  194. package/esm2020/blockui/blockui.mjs +140 -0
  195. package/esm2020/blockui/public_api.mjs +2 -0
  196. package/esm2020/blockui/qius.solutions-parallel-ui-angular-blockui.mjs +5 -0
  197. package/esm2020/breadcrumb/breadcrumb.mjs +296 -0
  198. package/esm2020/breadcrumb/public_api.mjs +2 -0
  199. package/esm2020/breadcrumb/qius.solutions-parallel-ui-angular-breadcrumb.mjs +5 -0
  200. package/esm2020/button/button.mjs +362 -0
  201. package/esm2020/button/public_api.mjs +2 -0
  202. package/esm2020/button/qius.solutions-parallel-ui-angular-button.mjs +5 -0
  203. package/esm2020/calendar/calendar.mjs +3123 -0
  204. package/esm2020/calendar/public_api.mjs +2 -0
  205. package/esm2020/calendar/qius.solutions-parallel-ui-angular-calendar.mjs +5 -0
  206. package/esm2020/card/card.mjs +126 -0
  207. package/esm2020/card/public_api.mjs +2 -0
  208. package/esm2020/card/qius.solutions-parallel-ui-angular-card.mjs +5 -0
  209. package/esm2020/carousel/carousel.mjs +696 -0
  210. package/esm2020/carousel/public_api.mjs +2 -0
  211. package/esm2020/carousel/qius.solutions-parallel-ui-angular-carousel.mjs +5 -0
  212. package/esm2020/cascadeselect/cascadeselect.mjs +766 -0
  213. package/esm2020/cascadeselect/public_api.mjs +2 -0
  214. package/esm2020/cascadeselect/qius.solutions-parallel-ui-angular-cascadeselect.mjs +5 -0
  215. package/esm2020/chart/chart.mjs +142 -0
  216. package/esm2020/chart/public_api.mjs +2 -0
  217. package/esm2020/chart/qius.solutions-parallel-ui-angular-chart.mjs +5 -0
  218. package/esm2020/checkbox/checkbox.mjs +247 -0
  219. package/esm2020/checkbox/public_api.mjs +2 -0
  220. package/esm2020/checkbox/qius.solutions-parallel-ui-angular-checkbox.mjs +5 -0
  221. package/esm2020/chip/chip.mjs +113 -0
  222. package/esm2020/chip/public_api.mjs +2 -0
  223. package/esm2020/chip/qius.solutions-parallel-ui-angular-chip.mjs +5 -0
  224. package/esm2020/chips/chips.mjs +375 -0
  225. package/esm2020/chips/public_api.mjs +2 -0
  226. package/esm2020/chips/qius.solutions-parallel-ui-angular-chips.mjs +5 -0
  227. package/esm2020/colorpicker/colorpicker.mjs +685 -0
  228. package/esm2020/colorpicker/public_api.mjs +2 -0
  229. package/esm2020/colorpicker/qius.solutions-parallel-ui-angular-colorpicker.mjs +5 -0
  230. package/esm2020/confirmdialog/confirmdialog.mjs +606 -0
  231. package/esm2020/confirmdialog/public_api.mjs +2 -0
  232. package/esm2020/confirmdialog/qius.solutions-parallel-ui-angular-confirmdialog.mjs +5 -0
  233. package/esm2020/confirmpopup/confirmpopup.mjs +394 -0
  234. package/esm2020/confirmpopup/public_api.mjs +2 -0
  235. package/esm2020/confirmpopup/qius.solutions-parallel-ui-angular-confirmpopup.mjs +5 -0
  236. package/esm2020/contextmenu/contextmenu.mjs +691 -0
  237. package/esm2020/contextmenu/public_api.mjs +2 -0
  238. package/esm2020/contextmenu/qius.solutions-parallel-ui-angular-contextmenu.mjs +5 -0
  239. package/esm2020/dataview/dataview.mjs +512 -0
  240. package/esm2020/dataview/public_api.mjs +2 -0
  241. package/esm2020/dataview/qius.solutions-parallel-ui-angular-dataview.mjs +5 -0
  242. package/esm2020/defer/defer.mjs +92 -0
  243. package/esm2020/defer/public_api.mjs +2 -0
  244. package/esm2020/defer/qius.solutions-parallel-ui-angular-defer.mjs +5 -0
  245. package/esm2020/dialog/dialog.mjs +833 -0
  246. package/esm2020/dialog/public_api.mjs +2 -0
  247. package/esm2020/dialog/qius.solutions-parallel-ui-angular-dialog.mjs +5 -0
  248. package/esm2020/divider/divider.mjs +69 -0
  249. package/esm2020/divider/public_api.mjs +2 -0
  250. package/esm2020/divider/qius.solutions-parallel-ui-angular-divider.mjs +5 -0
  251. package/esm2020/dock/dock.mjs +210 -0
  252. package/esm2020/dock/public_api.mjs +2 -0
  253. package/esm2020/dock/qius.solutions-parallel-ui-angular-dock.mjs +5 -0
  254. package/esm2020/dom/connectedoverlayscrollhandler.mjs +27 -0
  255. package/esm2020/dom/domhandler.mjs +600 -0
  256. package/esm2020/dom/public_api.mjs +3 -0
  257. package/esm2020/dom/qius.solutions-parallel-ui-angular-dom.mjs +5 -0
  258. package/esm2020/dragdrop/dragdrop.mjs +251 -0
  259. package/esm2020/dragdrop/public_api.mjs +2 -0
  260. package/esm2020/dragdrop/qius.solutions-parallel-ui-angular-dragdrop.mjs +5 -0
  261. package/esm2020/dropdown/dropdown.mjs +1372 -0
  262. package/esm2020/dropdown/public_api.mjs +2 -0
  263. package/esm2020/dropdown/qius.solutions-parallel-ui-angular-dropdown.mjs +5 -0
  264. package/esm2020/dynamicdialog/dialogservice.mjs +60 -0
  265. package/esm2020/dynamicdialog/dynamicdialog-config.mjs +3 -0
  266. package/esm2020/dynamicdialog/dynamicdialog-injector.mjs +13 -0
  267. package/esm2020/dynamicdialog/dynamicdialog-ref.mjs +41 -0
  268. package/esm2020/dynamicdialog/dynamicdialog.mjs +562 -0
  269. package/esm2020/dynamicdialog/dynamicdialogcontent.mjs +19 -0
  270. package/esm2020/dynamicdialog/public_api.mjs +7 -0
  271. package/esm2020/dynamicdialog/qius.solutions-parallel-ui-angular-dynamicdialog.mjs +5 -0
  272. package/esm2020/editor/editor.mjs +309 -0
  273. package/esm2020/editor/public_api.mjs +2 -0
  274. package/esm2020/editor/qius.solutions-parallel-ui-angular-editor.mjs +5 -0
  275. package/esm2020/fieldset/fieldset.mjs +214 -0
  276. package/esm2020/fieldset/public_api.mjs +2 -0
  277. package/esm2020/fieldset/qius.solutions-parallel-ui-angular-fieldset.mjs +5 -0
  278. package/esm2020/fileupload/fileupload.mjs +754 -0
  279. package/esm2020/fileupload/public_api.mjs +2 -0
  280. package/esm2020/fileupload/qius.solutions-parallel-ui-angular-fileupload.mjs +5 -0
  281. package/esm2020/focustrap/focustrap.mjs +52 -0
  282. package/esm2020/focustrap/public_api.mjs +2 -0
  283. package/esm2020/focustrap/qius.solutions-parallel-ui-angular-focustrap.mjs +5 -0
  284. package/esm2020/galleria/galleria.mjs +1187 -0
  285. package/esm2020/galleria/public_api.mjs +2 -0
  286. package/esm2020/galleria/qius.solutions-parallel-ui-angular-galleria.mjs +5 -0
  287. package/esm2020/icons/angledoubledown/angledoubledown.mjs +35 -0
  288. package/esm2020/icons/angledoubledown/public_api.mjs +2 -0
  289. package/esm2020/icons/angledoubledown/qius.solutions-parallel-ui-angular-icons-angledoubledown.mjs +5 -0
  290. package/esm2020/icons/angledoubleleft/angledoubleleft.mjs +35 -0
  291. package/esm2020/icons/angledoubleleft/public_api.mjs +2 -0
  292. package/esm2020/icons/angledoubleleft/qius.solutions-parallel-ui-angular-icons-angledoubleleft.mjs +5 -0
  293. package/esm2020/icons/angledoubleright/angledoubleright.mjs +35 -0
  294. package/esm2020/icons/angledoubleright/public_api.mjs +2 -0
  295. package/esm2020/icons/angledoubleright/qius.solutions-parallel-ui-angular-icons-angledoubleright.mjs +5 -0
  296. package/esm2020/icons/angledoubleup/angledoubleup.mjs +35 -0
  297. package/esm2020/icons/angledoubleup/public_api.mjs +2 -0
  298. package/esm2020/icons/angledoubleup/qius.solutions-parallel-ui-angular-icons-angledoubleup.mjs +5 -0
  299. package/esm2020/icons/angledown/angledown.mjs +31 -0
  300. package/esm2020/icons/angledown/public_api.mjs +2 -0
  301. package/esm2020/icons/angledown/qius.solutions-parallel-ui-angular-icons-angledown.mjs +5 -0
  302. package/esm2020/icons/angleleft/angleleft.mjs +31 -0
  303. package/esm2020/icons/angleleft/public_api.mjs +2 -0
  304. package/esm2020/icons/angleleft/qius.solutions-parallel-ui-angular-icons-angleleft.mjs +5 -0
  305. package/esm2020/icons/angleright/angleright.mjs +31 -0
  306. package/esm2020/icons/angleright/public_api.mjs +2 -0
  307. package/esm2020/icons/angleright/qius.solutions-parallel-ui-angular-icons-angleright.mjs +5 -0
  308. package/esm2020/icons/angleup/angleup.mjs +31 -0
  309. package/esm2020/icons/angleup/public_api.mjs +2 -0
  310. package/esm2020/icons/angleup/qius.solutions-parallel-ui-angular-icons-angleup.mjs +5 -0
  311. package/esm2020/icons/arrowdown/arrowdown.mjs +49 -0
  312. package/esm2020/icons/arrowdown/public_api.mjs +2 -0
  313. package/esm2020/icons/arrowdown/qius.solutions-parallel-ui-angular-icons-arrowdown.mjs +5 -0
  314. package/esm2020/icons/arrowdownleft/arrowdownleft.mjs +31 -0
  315. package/esm2020/icons/arrowdownleft/public_api.mjs +2 -0
  316. package/esm2020/icons/arrowdownleft/qius.solutions-parallel-ui-angular-icons-arrowdownleft.mjs +5 -0
  317. package/esm2020/icons/arrowdownright/arrowdownright.mjs +31 -0
  318. package/esm2020/icons/arrowdownright/public_api.mjs +2 -0
  319. package/esm2020/icons/arrowdownright/qius.solutions-parallel-ui-angular-icons-arrowdownright.mjs +5 -0
  320. package/esm2020/icons/arrowleft/arrowleft.mjs +49 -0
  321. package/esm2020/icons/arrowleft/public_api.mjs +2 -0
  322. package/esm2020/icons/arrowleft/qius.solutions-parallel-ui-angular-icons-arrowleft.mjs +5 -0
  323. package/esm2020/icons/arrowright/arrowright.mjs +35 -0
  324. package/esm2020/icons/arrowright/public_api.mjs +2 -0
  325. package/esm2020/icons/arrowright/qius.solutions-parallel-ui-angular-icons-arrowright.mjs +5 -0
  326. package/esm2020/icons/arrowup/arrowup.mjs +49 -0
  327. package/esm2020/icons/arrowup/public_api.mjs +2 -0
  328. package/esm2020/icons/arrowup/qius.solutions-parallel-ui-angular-icons-arrowup.mjs +5 -0
  329. package/esm2020/icons/ban/ban.mjs +45 -0
  330. package/esm2020/icons/ban/public_api.mjs +2 -0
  331. package/esm2020/icons/ban/qius.solutions-parallel-ui-angular-icons-ban.mjs +5 -0
  332. package/esm2020/icons/bars/bars.mjs +35 -0
  333. package/esm2020/icons/bars/public_api.mjs +2 -0
  334. package/esm2020/icons/bars/qius.solutions-parallel-ui-angular-icons-bars.mjs +5 -0
  335. package/esm2020/icons/calendar/calendar.mjs +31 -0
  336. package/esm2020/icons/calendar/public_api.mjs +2 -0
  337. package/esm2020/icons/calendar/qius.solutions-parallel-ui-angular-icons-calendar.mjs +5 -0
  338. package/esm2020/icons/caretleft/caretleft.mjs +31 -0
  339. package/esm2020/icons/caretleft/public_api.mjs +2 -0
  340. package/esm2020/icons/caretleft/qius.solutions-parallel-ui-angular-icons-caretleft.mjs +5 -0
  341. package/esm2020/icons/caretright/caretright.mjs +31 -0
  342. package/esm2020/icons/caretright/public_api.mjs +2 -0
  343. package/esm2020/icons/caretright/qius.solutions-parallel-ui-angular-icons-caretright.mjs +5 -0
  344. package/esm2020/icons/check/check.mjs +31 -0
  345. package/esm2020/icons/check/public_api.mjs +2 -0
  346. package/esm2020/icons/check/qius.solutions-parallel-ui-angular-icons-check.mjs +5 -0
  347. package/esm2020/icons/chevrondown/chevrondown.mjs +31 -0
  348. package/esm2020/icons/chevrondown/public_api.mjs +2 -0
  349. package/esm2020/icons/chevrondown/qius.solutions-parallel-ui-angular-icons-chevrondown.mjs +5 -0
  350. package/esm2020/icons/chevronleft/chevronleft.mjs +31 -0
  351. package/esm2020/icons/chevronleft/public_api.mjs +2 -0
  352. package/esm2020/icons/chevronleft/qius.solutions-parallel-ui-angular-icons-chevronleft.mjs +5 -0
  353. package/esm2020/icons/chevronright/chevronright.mjs +31 -0
  354. package/esm2020/icons/chevronright/public_api.mjs +2 -0
  355. package/esm2020/icons/chevronright/qius.solutions-parallel-ui-angular-icons-chevronright.mjs +5 -0
  356. package/esm2020/icons/chevronup/chevronup.mjs +31 -0
  357. package/esm2020/icons/chevronup/public_api.mjs +2 -0
  358. package/esm2020/icons/chevronup/qius.solutions-parallel-ui-angular-icons-chevronup.mjs +5 -0
  359. package/esm2020/icons/exclamationtriangle/exclamationtriangle.mjs +61 -0
  360. package/esm2020/icons/exclamationtriangle/public_api.mjs +2 -0
  361. package/esm2020/icons/exclamationtriangle/qius.solutions-parallel-ui-angular-icons-exclamationtriangle.mjs +5 -0
  362. package/esm2020/icons/eye/eye.mjs +35 -0
  363. package/esm2020/icons/eye/public_api.mjs +2 -0
  364. package/esm2020/icons/eye/qius.solutions-parallel-ui-angular-icons-eye.mjs +5 -0
  365. package/esm2020/icons/eyeslash/eyeslash.mjs +49 -0
  366. package/esm2020/icons/eyeslash/public_api.mjs +2 -0
  367. package/esm2020/icons/eyeslash/qius.solutions-parallel-ui-angular-icons-eyeslash.mjs +5 -0
  368. package/esm2020/icons/filter/filter.mjs +45 -0
  369. package/esm2020/icons/filter/public_api.mjs +2 -0
  370. package/esm2020/icons/filter/qius.solutions-parallel-ui-angular-icons-filter.mjs +5 -0
  371. package/esm2020/icons/filterslash/filterslash.mjs +49 -0
  372. package/esm2020/icons/filterslash/public_api.mjs +2 -0
  373. package/esm2020/icons/filterslash/qius.solutions-parallel-ui-angular-icons-filterslash.mjs +5 -0
  374. package/esm2020/icons/home/home.mjs +49 -0
  375. package/esm2020/icons/home/public_api.mjs +2 -0
  376. package/esm2020/icons/home/qius.solutions-parallel-ui-angular-icons-home.mjs +5 -0
  377. package/esm2020/icons/infocircle/infocircle.mjs +49 -0
  378. package/esm2020/icons/infocircle/public_api.mjs +2 -0
  379. package/esm2020/icons/infocircle/qius.solutions-parallel-ui-angular-icons-infocircle.mjs +5 -0
  380. package/esm2020/icons/minus/minus.mjs +32 -0
  381. package/esm2020/icons/minus/public_api.mjs +2 -0
  382. package/esm2020/icons/minus/qius.solutions-parallel-ui-angular-icons-minus.mjs +5 -0
  383. package/esm2020/icons/pencil/pencil.mjs +45 -0
  384. package/esm2020/icons/pencil/public_api.mjs +2 -0
  385. package/esm2020/icons/pencil/qius.solutions-parallel-ui-angular-icons-pencil.mjs +5 -0
  386. package/esm2020/icons/plus/plus.mjs +45 -0
  387. package/esm2020/icons/plus/public_api.mjs +2 -0
  388. package/esm2020/icons/plus/qius.solutions-parallel-ui-angular-icons-plus.mjs +5 -0
  389. package/esm2020/icons/refresh/public_api.mjs +2 -0
  390. package/esm2020/icons/refresh/qius.solutions-parallel-ui-angular-icons-refresh.mjs +5 -0
  391. package/esm2020/icons/refresh/refresh.mjs +49 -0
  392. package/esm2020/icons/search/public_api.mjs +2 -0
  393. package/esm2020/icons/search/qius.solutions-parallel-ui-angular-icons-search.mjs +5 -0
  394. package/esm2020/icons/search/search.mjs +49 -0
  395. package/esm2020/icons/searchminus/public_api.mjs +2 -0
  396. package/esm2020/icons/searchminus/qius.solutions-parallel-ui-angular-icons-searchminus.mjs +5 -0
  397. package/esm2020/icons/searchminus/searchminus.mjs +49 -0
  398. package/esm2020/icons/searchplus/public_api.mjs +2 -0
  399. package/esm2020/icons/searchplus/qius.solutions-parallel-ui-angular-icons-searchplus.mjs +5 -0
  400. package/esm2020/icons/searchplus/searchplus.mjs +49 -0
  401. package/esm2020/icons/sortalt/public_api.mjs +2 -0
  402. package/esm2020/icons/sortalt/qius.solutions-parallel-ui-angular-icons-sortalt.mjs +5 -0
  403. package/esm2020/icons/sortalt/sortalt.mjs +57 -0
  404. package/esm2020/icons/sortamountdown/public_api.mjs +2 -0
  405. package/esm2020/icons/sortamountdown/qius.solutions-parallel-ui-angular-icons-sortamountdown.mjs +5 -0
  406. package/esm2020/icons/sortamountdown/sortamountdown.mjs +85 -0
  407. package/esm2020/icons/sortamountupalt/public_api.mjs +2 -0
  408. package/esm2020/icons/sortamountupalt/qius.solutions-parallel-ui-angular-icons-sortamountupalt.mjs +5 -0
  409. package/esm2020/icons/sortamountupalt/sortamountupalt.mjs +85 -0
  410. package/esm2020/icons/spinner/public_api.mjs +2 -0
  411. package/esm2020/icons/spinner/qius.solutions-parallel-ui-angular-icons-spinner.mjs +5 -0
  412. package/esm2020/icons/spinner/spinner.mjs +45 -0
  413. package/esm2020/icons/star/public_api.mjs +2 -0
  414. package/esm2020/icons/star/qius.solutions-parallel-ui-angular-icons-star.mjs +5 -0
  415. package/esm2020/icons/star/star.mjs +45 -0
  416. package/esm2020/icons/starfill/public_api.mjs +2 -0
  417. package/esm2020/icons/starfill/qius.solutions-parallel-ui-angular-icons-starfill.mjs +5 -0
  418. package/esm2020/icons/starfill/starfill.mjs +45 -0
  419. package/esm2020/icons/thlarge/public_api.mjs +2 -0
  420. package/esm2020/icons/thlarge/qius.solutions-parallel-ui-angular-icons-thlarge.mjs +5 -0
  421. package/esm2020/icons/thlarge/thlarge.mjs +49 -0
  422. package/esm2020/icons/times/public_api.mjs +2 -0
  423. package/esm2020/icons/times/qius.solutions-parallel-ui-angular-icons-times.mjs +5 -0
  424. package/esm2020/icons/times/times.mjs +31 -0
  425. package/esm2020/icons/timescircle/public_api.mjs +2 -0
  426. package/esm2020/icons/timescircle/qius.solutions-parallel-ui-angular-icons-timescircle.mjs +5 -0
  427. package/esm2020/icons/timescircle/timescircle.mjs +49 -0
  428. package/esm2020/icons/trash/public_api.mjs +2 -0
  429. package/esm2020/icons/trash/qius.solutions-parallel-ui-angular-icons-trash.mjs +5 -0
  430. package/esm2020/icons/trash/trash.mjs +49 -0
  431. package/esm2020/icons/undo/public_api.mjs +2 -0
  432. package/esm2020/icons/undo/qius.solutions-parallel-ui-angular-icons-undo.mjs +5 -0
  433. package/esm2020/icons/undo/undo.mjs +49 -0
  434. package/esm2020/icons/upload/public_api.mjs +2 -0
  435. package/esm2020/icons/upload/qius.solutions-parallel-ui-angular-icons-upload.mjs +5 -0
  436. package/esm2020/icons/upload/upload.mjs +49 -0
  437. package/esm2020/icons/windowmaximize/public_api.mjs +2 -0
  438. package/esm2020/icons/windowmaximize/qius.solutions-parallel-ui-angular-icons-windowmaximize.mjs +5 -0
  439. package/esm2020/icons/windowmaximize/windowmaximize.mjs +49 -0
  440. package/esm2020/icons/windowminimize/public_api.mjs +2 -0
  441. package/esm2020/icons/windowminimize/qius.solutions-parallel-ui-angular-icons-windowminimize.mjs +5 -0
  442. package/esm2020/icons/windowminimize/windowminimize.mjs +49 -0
  443. package/esm2020/image/image.mjs +321 -0
  444. package/esm2020/image/public_api.mjs +2 -0
  445. package/esm2020/image/qius.solutions-parallel-ui-angular-image.mjs +5 -0
  446. package/esm2020/inplace/inplace.mjs +168 -0
  447. package/esm2020/inplace/public_api.mjs +2 -0
  448. package/esm2020/inplace/qius.solutions-parallel-ui-angular-inplace.mjs +5 -0
  449. package/esm2020/inputmask/inputmask.mjs +697 -0
  450. package/esm2020/inputmask/public_api.mjs +2 -0
  451. package/esm2020/inputmask/qius.solutions-parallel-ui-angular-inputmask.mjs +5 -0
  452. package/esm2020/inputnumber/inputnumber.mjs +1189 -0
  453. package/esm2020/inputnumber/public_api.mjs +2 -0
  454. package/esm2020/inputnumber/qius.solutions-parallel-ui-angular-inputnumber.mjs +5 -0
  455. package/esm2020/inputswitch/inputswitch.mjs +160 -0
  456. package/esm2020/inputswitch/public_api.mjs +2 -0
  457. package/esm2020/inputswitch/qius.solutions-parallel-ui-angular-inputswitch.mjs +5 -0
  458. package/esm2020/inputtext/inputtext.mjs +55 -0
  459. package/esm2020/inputtext/public_api.mjs +2 -0
  460. package/esm2020/inputtext/qius.solutions-parallel-ui-angular-inputtext.mjs +5 -0
  461. package/esm2020/inputtextarea/inputtextarea.mjs +117 -0
  462. package/esm2020/inputtextarea/public_api.mjs +2 -0
  463. package/esm2020/inputtextarea/qius.solutions-parallel-ui-angular-inputtextarea.mjs +5 -0
  464. package/esm2020/keyfilter/keyfilter.mjs +214 -0
  465. package/esm2020/keyfilter/public_api.mjs +2 -0
  466. package/esm2020/keyfilter/qius.solutions-parallel-ui-angular-keyfilter.mjs +5 -0
  467. package/esm2020/knob/knob.mjs +283 -0
  468. package/esm2020/knob/public_api.mjs +2 -0
  469. package/esm2020/knob/qius.solutions-parallel-ui-angular-knob.mjs +5 -0
  470. package/esm2020/listbox/listbox.mjs +800 -0
  471. package/esm2020/listbox/public_api.mjs +2 -0
  472. package/esm2020/listbox/qius.solutions-parallel-ui-angular-listbox.mjs +5 -0
  473. package/esm2020/megamenu/megamenu.mjs +464 -0
  474. package/esm2020/megamenu/public_api.mjs +2 -0
  475. package/esm2020/megamenu/qius.solutions-parallel-ui-angular-megamenu.mjs +5 -0
  476. package/esm2020/menu/menu.mjs +548 -0
  477. package/esm2020/menu/public_api.mjs +2 -0
  478. package/esm2020/menu/qius.solutions-parallel-ui-angular-menu.mjs +5 -0
  479. package/esm2020/menubar/menubar.mjs +515 -0
  480. package/esm2020/menubar/public_api.mjs +2 -0
  481. package/esm2020/menubar/qius.solutions-parallel-ui-angular-menubar.mjs +5 -0
  482. package/esm2020/message/message.mjs +103 -0
  483. package/esm2020/message/public_api.mjs +2 -0
  484. package/esm2020/message/qius.solutions-parallel-ui-angular-message.mjs +5 -0
  485. package/esm2020/messages/messages.mjs +272 -0
  486. package/esm2020/messages/public_api.mjs +2 -0
  487. package/esm2020/messages/qius.solutions-parallel-ui-angular-messages.mjs +5 -0
  488. package/esm2020/multiselect/multiselect.mjs +1411 -0
  489. package/esm2020/multiselect/public_api.mjs +2 -0
  490. package/esm2020/multiselect/qius.solutions-parallel-ui-angular-multiselect.mjs +5 -0
  491. package/esm2020/orderlist/orderlist.mjs +621 -0
  492. package/esm2020/orderlist/public_api.mjs +2 -0
  493. package/esm2020/orderlist/qius.solutions-parallel-ui-angular-orderlist.mjs +5 -0
  494. package/esm2020/organizationchart/organizationchart.mjs +319 -0
  495. package/esm2020/organizationchart/public_api.mjs +2 -0
  496. package/esm2020/organizationchart/qius.solutions-parallel-ui-angular-organizationchart.mjs +5 -0
  497. package/esm2020/overlay/overlay.mjs +520 -0
  498. package/esm2020/overlay/public_api.mjs +2 -0
  499. package/esm2020/overlay/qius.solutions-parallel-ui-angular-overlay.mjs +5 -0
  500. package/esm2020/overlaypanel/overlaypanel.mjs +410 -0
  501. package/esm2020/overlaypanel/public_api.mjs +2 -0
  502. package/esm2020/overlaypanel/qius.solutions-parallel-ui-angular-overlaypanel.mjs +5 -0
  503. package/esm2020/paginator/paginator.mjs +405 -0
  504. package/esm2020/paginator/public_api.mjs +2 -0
  505. package/esm2020/paginator/qius.solutions-parallel-ui-angular-paginator.mjs +5 -0
  506. package/esm2020/panel/panel.mjs +296 -0
  507. package/esm2020/panel/public_api.mjs +2 -0
  508. package/esm2020/panel/qius.solutions-parallel-ui-angular-panel.mjs +5 -0
  509. package/esm2020/panelmenu/panelmenu.mjs +518 -0
  510. package/esm2020/panelmenu/public_api.mjs +2 -0
  511. package/esm2020/panelmenu/qius.solutions-parallel-ui-angular-panelmenu.mjs +5 -0
  512. package/esm2020/password/password.mjs +782 -0
  513. package/esm2020/password/public_api.mjs +2 -0
  514. package/esm2020/password/qius.solutions-parallel-ui-angular-password.mjs +5 -0
  515. package/esm2020/picklist/picklist.mjs +1268 -0
  516. package/esm2020/picklist/public_api.mjs +2 -0
  517. package/esm2020/picklist/qius.solutions-parallel-ui-angular-picklist.mjs +5 -0
  518. package/esm2020/progressbar/progressbar.mjs +81 -0
  519. package/esm2020/progressbar/public_api.mjs +2 -0
  520. package/esm2020/progressbar/qius.solutions-parallel-ui-angular-progressbar.mjs +5 -0
  521. package/esm2020/progressspinner/progressspinner.mjs +55 -0
  522. package/esm2020/progressspinner/public_api.mjs +2 -0
  523. package/esm2020/progressspinner/qius.solutions-parallel-ui-angular-progressspinner.mjs +5 -0
  524. package/esm2020/public_api.mjs +2 -0
  525. package/esm2020/qius.solutions-parallel-ui-angular.mjs +5 -0
  526. package/esm2020/radiobutton/public_api.mjs +2 -0
  527. package/esm2020/radiobutton/qius.solutions-parallel-ui-angular-radiobutton.mjs +5 -0
  528. package/esm2020/radiobutton/radiobutton.mjs +254 -0
  529. package/esm2020/rating/public_api.mjs +2 -0
  530. package/esm2020/rating/qius.solutions-parallel-ui-angular-rating.mjs +5 -0
  531. package/esm2020/rating/rating.mjs +199 -0
  532. package/esm2020/ripple/public_api.mjs +2 -0
  533. package/esm2020/ripple/qius.solutions-parallel-ui-angular-ripple.mjs +5 -0
  534. package/esm2020/ripple/ripple.mjs +126 -0
  535. package/esm2020/scroller/public_api.mjs +2 -0
  536. package/esm2020/scroller/qius.solutions-parallel-ui-angular-scroller.mjs +5 -0
  537. package/esm2020/scroller/scroller.mjs +928 -0
  538. package/esm2020/scrollpanel/public_api.mjs +2 -0
  539. package/esm2020/scrollpanel/qius.solutions-parallel-ui-angular-scrollpanel.mjs +5 -0
  540. package/esm2020/scrollpanel/scrollpanel.mjs +272 -0
  541. package/esm2020/scrolltop/public_api.mjs +2 -0
  542. package/esm2020/scrolltop/qius.solutions-parallel-ui-angular-scrolltop.mjs +5 -0
  543. package/esm2020/scrolltop/scrolltop.mjs +221 -0
  544. package/esm2020/selectbutton/public_api.mjs +2 -0
  545. package/esm2020/selectbutton/qius.solutions-parallel-ui-angular-selectbutton.mjs +5 -0
  546. package/esm2020/selectbutton/selectbutton.mjs +209 -0
  547. package/esm2020/sidebar/public_api.mjs +2 -0
  548. package/esm2020/sidebar/qius.solutions-parallel-ui-angular-sidebar.mjs +5 -0
  549. package/esm2020/sidebar/sidebar.mjs +369 -0
  550. package/esm2020/skeleton/public_api.mjs +2 -0
  551. package/esm2020/skeleton/qius.solutions-parallel-ui-angular-skeleton.mjs +5 -0
  552. package/esm2020/skeleton/skeleton.mjs +65 -0
  553. package/esm2020/slidemenu/public_api.mjs +2 -0
  554. package/esm2020/slidemenu/qius.solutions-parallel-ui-angular-slidemenu.mjs +5 -0
  555. package/esm2020/slidemenu/slidemenu.mjs +616 -0
  556. package/esm2020/slider/public_api.mjs +2 -0
  557. package/esm2020/slider/qius.solutions-parallel-ui-angular-slider.mjs +5 -0
  558. package/esm2020/slider/slider.mjs +588 -0
  559. package/esm2020/speeddial/public_api.mjs +2 -0
  560. package/esm2020/speeddial/qius.solutions-parallel-ui-angular-speeddial.mjs +5 -0
  561. package/esm2020/speeddial/speeddial.mjs +402 -0
  562. package/esm2020/spinner/public_api.mjs +2 -0
  563. package/esm2020/spinner/qius.solutions-parallel-ui-angular-spinner.mjs +5 -0
  564. package/esm2020/spinner/spinner.mjs +407 -0
  565. package/esm2020/splitbutton/public_api.mjs +2 -0
  566. package/esm2020/splitbutton/qius.solutions-parallel-ui-angular-splitbutton.mjs +5 -0
  567. package/esm2020/splitbutton/splitbutton.mjs +141 -0
  568. package/esm2020/splitter/public_api.mjs +2 -0
  569. package/esm2020/splitter/qius.solutions-parallel-ui-angular-splitter.mjs +5 -0
  570. package/esm2020/splitter/splitter.mjs +355 -0
  571. package/esm2020/steps/public_api.mjs +2 -0
  572. package/esm2020/steps/qius.solutions-parallel-ui-angular-steps.mjs +5 -0
  573. package/esm2020/steps/steps.mjs +205 -0
  574. package/esm2020/styleclass/public_api.mjs +2 -0
  575. package/esm2020/styleclass/qius.solutions-parallel-ui-angular-styleclass.mjs +5 -0
  576. package/esm2020/styleclass/styleclass.mjs +220 -0
  577. package/esm2020/table/public_api.mjs +2 -0
  578. package/esm2020/table/qius.solutions-parallel-ui-angular-table.mjs +5 -0
  579. package/esm2020/table/table.mjs +5314 -0
  580. package/esm2020/tabmenu/public_api.mjs +2 -0
  581. package/esm2020/tabmenu/qius.solutions-parallel-ui-angular-tabmenu.mjs +5 -0
  582. package/esm2020/tabmenu/tabmenu.mjs +374 -0
  583. package/esm2020/tabview/public_api.mjs +2 -0
  584. package/esm2020/tabview/qius.solutions-parallel-ui-angular-tabview.mjs +5 -0
  585. package/esm2020/tabview/tabview.mjs +527 -0
  586. package/esm2020/tag/public_api.mjs +2 -0
  587. package/esm2020/tag/qius.solutions-parallel-ui-angular-tag.mjs +5 -0
  588. package/esm2020/tag/tag.mjs +86 -0
  589. package/esm2020/terminal/public_api.mjs +3 -0
  590. package/esm2020/terminal/qius.solutions-parallel-ui-angular-terminal.mjs +5 -0
  591. package/esm2020/terminal/terminal.mjs +112 -0
  592. package/esm2020/terminal/terminalservice.mjs +27 -0
  593. package/esm2020/tieredmenu/public_api.mjs +2 -0
  594. package/esm2020/tieredmenu/qius.solutions-parallel-ui-angular-tieredmenu.mjs +5 -0
  595. package/esm2020/tieredmenu/tieredmenu.mjs +663 -0
  596. package/esm2020/timeline/public_api.mjs +2 -0
  597. package/esm2020/timeline/qius.solutions-parallel-ui-angular-timeline.mjs +5 -0
  598. package/esm2020/timeline/timeline.mjs +131 -0
  599. package/esm2020/toast/public_api.mjs +2 -0
  600. package/esm2020/toast/qius.solutions-parallel-ui-angular-toast.mjs +5 -0
  601. package/esm2020/toast/toast.mjs +443 -0
  602. package/esm2020/togglebutton/public_api.mjs +2 -0
  603. package/esm2020/togglebutton/qius.solutions-parallel-ui-angular-togglebutton.mjs +5 -0
  604. package/esm2020/togglebutton/togglebutton.mjs +133 -0
  605. package/esm2020/toolbar/public_api.mjs +2 -0
  606. package/esm2020/toolbar/qius.solutions-parallel-ui-angular-toolbar.mjs +5 -0
  607. package/esm2020/toolbar/toolbar.mjs +83 -0
  608. package/esm2020/tooltip/public_api.mjs +2 -0
  609. package/esm2020/tooltip/qius.solutions-parallel-ui-angular-tooltip.mjs +5 -0
  610. package/esm2020/tooltip/tooltip.mjs +546 -0
  611. package/esm2020/tree/public_api.mjs +2 -0
  612. package/esm2020/tree/qius.solutions-parallel-ui-angular-tree.mjs +5 -0
  613. package/esm2020/tree/tree.mjs +1584 -0
  614. package/esm2020/treeselect/public_api.mjs +2 -0
  615. package/esm2020/treeselect/qius.solutions-parallel-ui-angular-treeselect.mjs +5 -0
  616. package/esm2020/treeselect/treeselect.mjs +778 -0
  617. package/esm2020/treetable/public_api.mjs +2 -0
  618. package/esm2020/treetable/qius.solutions-parallel-ui-angular-treetable.mjs +5 -0
  619. package/esm2020/treetable/treetable.mjs +3217 -0
  620. package/esm2020/tristatecheckbox/public_api.mjs +2 -0
  621. package/esm2020/tristatecheckbox/qius.solutions-parallel-ui-angular-tristatecheckbox.mjs +5 -0
  622. package/esm2020/tristatecheckbox/tristatecheckbox.mjs +223 -0
  623. package/esm2020/utils/objectutils.mjs +198 -0
  624. package/esm2020/utils/public_api.mjs +5 -0
  625. package/esm2020/utils/qius.solutions-parallel-ui-angular-utils.mjs +5 -0
  626. package/esm2020/utils/uniquecomponentid.mjs +7 -0
  627. package/esm2020/utils/zindexutils.mjs +35 -0
  628. package/esm2020/virtualscroller/public_api.mjs +2 -0
  629. package/esm2020/virtualscroller/qius.solutions-parallel-ui-angular-virtualscroller.mjs +5 -0
  630. package/esm2020/virtualscroller/virtualscroller.mjs +153 -0
  631. package/fesm2015/qius.solutions-parallel-ui-angular-accordion.mjs +405 -0
  632. package/fesm2015/qius.solutions-parallel-ui-angular-accordion.mjs.map +1 -0
  633. package/fesm2015/qius.solutions-parallel-ui-angular-animate.mjs +86 -0
  634. package/fesm2015/qius.solutions-parallel-ui-angular-animate.mjs.map +1 -0
  635. package/fesm2015/qius.solutions-parallel-ui-angular-api.mjs +817 -0
  636. package/fesm2015/qius.solutions-parallel-ui-angular-api.mjs.map +1 -0
  637. package/fesm2015/qius.solutions-parallel-ui-angular-autocomplete.mjs +1154 -0
  638. package/fesm2015/qius.solutions-parallel-ui-angular-autocomplete.mjs.map +1 -0
  639. package/fesm2015/qius.solutions-parallel-ui-angular-autofocus.mjs +58 -0
  640. package/fesm2015/qius.solutions-parallel-ui-angular-autofocus.mjs.map +1 -0
  641. package/fesm2015/qius.solutions-parallel-ui-angular-avatar.mjs +82 -0
  642. package/fesm2015/qius.solutions-parallel-ui-angular-avatar.mjs.map +1 -0
  643. package/fesm2015/qius.solutions-parallel-ui-angular-avatargroup.mjs +47 -0
  644. package/fesm2015/qius.solutions-parallel-ui-angular-avatargroup.mjs.map +1 -0
  645. package/fesm2015/qius.solutions-parallel-ui-angular-badge.mjs +191 -0
  646. package/fesm2015/qius.solutions-parallel-ui-angular-badge.mjs.map +1 -0
  647. package/fesm2015/qius.solutions-parallel-ui-angular-baseicon.mjs +48 -0
  648. package/fesm2015/qius.solutions-parallel-ui-angular-baseicon.mjs.map +1 -0
  649. package/fesm2015/qius.solutions-parallel-ui-angular-blockui.mjs +149 -0
  650. package/fesm2015/qius.solutions-parallel-ui-angular-blockui.mjs.map +1 -0
  651. package/fesm2015/qius.solutions-parallel-ui-angular-breadcrumb.mjs +303 -0
  652. package/fesm2015/qius.solutions-parallel-ui-angular-breadcrumb.mjs.map +1 -0
  653. package/fesm2015/qius.solutions-parallel-ui-angular-button.mjs +371 -0
  654. package/fesm2015/qius.solutions-parallel-ui-angular-button.mjs.map +1 -0
  655. package/fesm2015/qius.solutions-parallel-ui-angular-calendar.mjs +3133 -0
  656. package/fesm2015/qius.solutions-parallel-ui-angular-calendar.mjs.map +1 -0
  657. package/fesm2015/qius.solutions-parallel-ui-angular-card.mjs +133 -0
  658. package/fesm2015/qius.solutions-parallel-ui-angular-card.mjs.map +1 -0
  659. package/fesm2015/qius.solutions-parallel-ui-angular-carousel.mjs +706 -0
  660. package/fesm2015/qius.solutions-parallel-ui-angular-carousel.mjs.map +1 -0
  661. package/fesm2015/qius.solutions-parallel-ui-angular-cascadeselect.mjs +776 -0
  662. package/fesm2015/qius.solutions-parallel-ui-angular-cascadeselect.mjs.map +1 -0
  663. package/fesm2015/qius.solutions-parallel-ui-angular-chart.mjs +151 -0
  664. package/fesm2015/qius.solutions-parallel-ui-angular-chart.mjs.map +1 -0
  665. package/fesm2015/qius.solutions-parallel-ui-angular-checkbox.mjs +254 -0
  666. package/fesm2015/qius.solutions-parallel-ui-angular-checkbox.mjs.map +1 -0
  667. package/fesm2015/qius.solutions-parallel-ui-angular-chip.mjs +120 -0
  668. package/fesm2015/qius.solutions-parallel-ui-angular-chip.mjs.map +1 -0
  669. package/fesm2015/qius.solutions-parallel-ui-angular-chips.mjs +384 -0
  670. package/fesm2015/qius.solutions-parallel-ui-angular-chips.mjs.map +1 -0
  671. package/fesm2015/qius.solutions-parallel-ui-angular-colorpicker.mjs +694 -0
  672. package/fesm2015/qius.solutions-parallel-ui-angular-colorpicker.mjs.map +1 -0
  673. package/fesm2015/qius.solutions-parallel-ui-angular-confirmdialog.mjs +615 -0
  674. package/fesm2015/qius.solutions-parallel-ui-angular-confirmdialog.mjs.map +1 -0
  675. package/fesm2015/qius.solutions-parallel-ui-angular-confirmpopup.mjs +403 -0
  676. package/fesm2015/qius.solutions-parallel-ui-angular-confirmpopup.mjs.map +1 -0
  677. package/fesm2015/qius.solutions-parallel-ui-angular-contextmenu.mjs +702 -0
  678. package/fesm2015/qius.solutions-parallel-ui-angular-contextmenu.mjs.map +1 -0
  679. package/fesm2015/qius.solutions-parallel-ui-angular-dataview.mjs +519 -0
  680. package/fesm2015/qius.solutions-parallel-ui-angular-dataview.mjs.map +1 -0
  681. package/fesm2015/qius.solutions-parallel-ui-angular-defer.mjs +101 -0
  682. package/fesm2015/qius.solutions-parallel-ui-angular-defer.mjs.map +1 -0
  683. package/fesm2015/qius.solutions-parallel-ui-angular-dialog.mjs +842 -0
  684. package/fesm2015/qius.solutions-parallel-ui-angular-dialog.mjs.map +1 -0
  685. package/fesm2015/qius.solutions-parallel-ui-angular-divider.mjs +76 -0
  686. package/fesm2015/qius.solutions-parallel-ui-angular-divider.mjs.map +1 -0
  687. package/fesm2015/qius.solutions-parallel-ui-angular-dock.mjs +217 -0
  688. package/fesm2015/qius.solutions-parallel-ui-angular-dock.mjs.map +1 -0
  689. package/fesm2015/qius.solutions-parallel-ui-angular-dom.mjs +632 -0
  690. package/fesm2015/qius.solutions-parallel-ui-angular-dom.mjs.map +1 -0
  691. package/fesm2015/qius.solutions-parallel-ui-angular-dragdrop.mjs +258 -0
  692. package/fesm2015/qius.solutions-parallel-ui-angular-dragdrop.mjs.map +1 -0
  693. package/fesm2015/qius.solutions-parallel-ui-angular-dropdown.mjs +1379 -0
  694. package/fesm2015/qius.solutions-parallel-ui-angular-dropdown.mjs.map +1 -0
  695. package/fesm2015/qius.solutions-parallel-ui-angular-dynamicdialog.mjs +698 -0
  696. package/fesm2015/qius.solutions-parallel-ui-angular-dynamicdialog.mjs.map +1 -0
  697. package/fesm2015/qius.solutions-parallel-ui-angular-editor.mjs +317 -0
  698. package/fesm2015/qius.solutions-parallel-ui-angular-editor.mjs.map +1 -0
  699. package/fesm2015/qius.solutions-parallel-ui-angular-fieldset.mjs +221 -0
  700. package/fesm2015/qius.solutions-parallel-ui-angular-fieldset.mjs.map +1 -0
  701. package/fesm2015/qius.solutions-parallel-ui-angular-fileupload.mjs +764 -0
  702. package/fesm2015/qius.solutions-parallel-ui-angular-fileupload.mjs.map +1 -0
  703. package/fesm2015/qius.solutions-parallel-ui-angular-focustrap.mjs +60 -0
  704. package/fesm2015/qius.solutions-parallel-ui-angular-focustrap.mjs.map +1 -0
  705. package/fesm2015/qius.solutions-parallel-ui-angular-galleria.mjs +1199 -0
  706. package/fesm2015/qius.solutions-parallel-ui-angular-galleria.mjs.map +1 -0
  707. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angledoubledown.mjs +42 -0
  708. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angledoubledown.mjs.map +1 -0
  709. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angledoubleleft.mjs +42 -0
  710. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angledoubleleft.mjs.map +1 -0
  711. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angledoubleright.mjs +42 -0
  712. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angledoubleright.mjs.map +1 -0
  713. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angledoubleup.mjs +42 -0
  714. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angledoubleup.mjs.map +1 -0
  715. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angledown.mjs +38 -0
  716. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angledown.mjs.map +1 -0
  717. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angleleft.mjs +38 -0
  718. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angleleft.mjs.map +1 -0
  719. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angleright.mjs +38 -0
  720. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angleright.mjs.map +1 -0
  721. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angleup.mjs +38 -0
  722. package/fesm2015/qius.solutions-parallel-ui-angular-icons-angleup.mjs.map +1 -0
  723. package/fesm2015/qius.solutions-parallel-ui-angular-icons-arrowdown.mjs +56 -0
  724. package/fesm2015/qius.solutions-parallel-ui-angular-icons-arrowdown.mjs.map +1 -0
  725. package/fesm2015/qius.solutions-parallel-ui-angular-icons-arrowdownleft.mjs +38 -0
  726. package/fesm2015/qius.solutions-parallel-ui-angular-icons-arrowdownleft.mjs.map +1 -0
  727. package/fesm2015/qius.solutions-parallel-ui-angular-icons-arrowdownright.mjs +38 -0
  728. package/fesm2015/qius.solutions-parallel-ui-angular-icons-arrowdownright.mjs.map +1 -0
  729. package/fesm2015/qius.solutions-parallel-ui-angular-icons-arrowleft.mjs +56 -0
  730. package/fesm2015/qius.solutions-parallel-ui-angular-icons-arrowleft.mjs.map +1 -0
  731. package/fesm2015/qius.solutions-parallel-ui-angular-icons-arrowright.mjs +42 -0
  732. package/fesm2015/qius.solutions-parallel-ui-angular-icons-arrowright.mjs.map +1 -0
  733. package/fesm2015/qius.solutions-parallel-ui-angular-icons-arrowup.mjs +56 -0
  734. package/fesm2015/qius.solutions-parallel-ui-angular-icons-arrowup.mjs.map +1 -0
  735. package/fesm2015/qius.solutions-parallel-ui-angular-icons-ban.mjs +52 -0
  736. package/fesm2015/qius.solutions-parallel-ui-angular-icons-ban.mjs.map +1 -0
  737. package/fesm2015/qius.solutions-parallel-ui-angular-icons-bars.mjs +42 -0
  738. package/fesm2015/qius.solutions-parallel-ui-angular-icons-bars.mjs.map +1 -0
  739. package/fesm2015/qius.solutions-parallel-ui-angular-icons-calendar.mjs +38 -0
  740. package/fesm2015/qius.solutions-parallel-ui-angular-icons-calendar.mjs.map +1 -0
  741. package/fesm2015/qius.solutions-parallel-ui-angular-icons-caretleft.mjs +38 -0
  742. package/fesm2015/qius.solutions-parallel-ui-angular-icons-caretleft.mjs.map +1 -0
  743. package/fesm2015/qius.solutions-parallel-ui-angular-icons-caretright.mjs +38 -0
  744. package/fesm2015/qius.solutions-parallel-ui-angular-icons-caretright.mjs.map +1 -0
  745. package/fesm2015/qius.solutions-parallel-ui-angular-icons-check.mjs +38 -0
  746. package/fesm2015/qius.solutions-parallel-ui-angular-icons-check.mjs.map +1 -0
  747. package/fesm2015/qius.solutions-parallel-ui-angular-icons-chevrondown.mjs +38 -0
  748. package/fesm2015/qius.solutions-parallel-ui-angular-icons-chevrondown.mjs.map +1 -0
  749. package/fesm2015/qius.solutions-parallel-ui-angular-icons-chevronleft.mjs +38 -0
  750. package/fesm2015/qius.solutions-parallel-ui-angular-icons-chevronleft.mjs.map +1 -0
  751. package/fesm2015/qius.solutions-parallel-ui-angular-icons-chevronright.mjs +38 -0
  752. package/fesm2015/qius.solutions-parallel-ui-angular-icons-chevronright.mjs.map +1 -0
  753. package/fesm2015/qius.solutions-parallel-ui-angular-icons-chevronup.mjs +38 -0
  754. package/fesm2015/qius.solutions-parallel-ui-angular-icons-chevronup.mjs.map +1 -0
  755. package/fesm2015/qius.solutions-parallel-ui-angular-icons-exclamationtriangle.mjs +68 -0
  756. package/fesm2015/qius.solutions-parallel-ui-angular-icons-exclamationtriangle.mjs.map +1 -0
  757. package/fesm2015/qius.solutions-parallel-ui-angular-icons-eye.mjs +42 -0
  758. package/fesm2015/qius.solutions-parallel-ui-angular-icons-eye.mjs.map +1 -0
  759. package/fesm2015/qius.solutions-parallel-ui-angular-icons-eyeslash.mjs +56 -0
  760. package/fesm2015/qius.solutions-parallel-ui-angular-icons-eyeslash.mjs.map +1 -0
  761. package/fesm2015/qius.solutions-parallel-ui-angular-icons-filter.mjs +52 -0
  762. package/fesm2015/qius.solutions-parallel-ui-angular-icons-filter.mjs.map +1 -0
  763. package/fesm2015/qius.solutions-parallel-ui-angular-icons-filterslash.mjs +56 -0
  764. package/fesm2015/qius.solutions-parallel-ui-angular-icons-filterslash.mjs.map +1 -0
  765. package/fesm2015/qius.solutions-parallel-ui-angular-icons-home.mjs +56 -0
  766. package/fesm2015/qius.solutions-parallel-ui-angular-icons-home.mjs.map +1 -0
  767. package/fesm2015/qius.solutions-parallel-ui-angular-icons-infocircle.mjs +56 -0
  768. package/fesm2015/qius.solutions-parallel-ui-angular-icons-infocircle.mjs.map +1 -0
  769. package/fesm2015/qius.solutions-parallel-ui-angular-icons-minus.mjs +39 -0
  770. package/fesm2015/qius.solutions-parallel-ui-angular-icons-minus.mjs.map +1 -0
  771. package/fesm2015/qius.solutions-parallel-ui-angular-icons-pencil.mjs +52 -0
  772. package/fesm2015/qius.solutions-parallel-ui-angular-icons-pencil.mjs.map +1 -0
  773. package/fesm2015/qius.solutions-parallel-ui-angular-icons-plus.mjs +52 -0
  774. package/fesm2015/qius.solutions-parallel-ui-angular-icons-plus.mjs.map +1 -0
  775. package/fesm2015/qius.solutions-parallel-ui-angular-icons-refresh.mjs +56 -0
  776. package/fesm2015/qius.solutions-parallel-ui-angular-icons-refresh.mjs.map +1 -0
  777. package/fesm2015/qius.solutions-parallel-ui-angular-icons-search.mjs +56 -0
  778. package/fesm2015/qius.solutions-parallel-ui-angular-icons-search.mjs.map +1 -0
  779. package/fesm2015/qius.solutions-parallel-ui-angular-icons-searchminus.mjs +56 -0
  780. package/fesm2015/qius.solutions-parallel-ui-angular-icons-searchminus.mjs.map +1 -0
  781. package/fesm2015/qius.solutions-parallel-ui-angular-icons-searchplus.mjs +56 -0
  782. package/fesm2015/qius.solutions-parallel-ui-angular-icons-searchplus.mjs.map +1 -0
  783. package/fesm2015/qius.solutions-parallel-ui-angular-icons-sortalt.mjs +64 -0
  784. package/fesm2015/qius.solutions-parallel-ui-angular-icons-sortalt.mjs.map +1 -0
  785. package/fesm2015/qius.solutions-parallel-ui-angular-icons-sortamountdown.mjs +92 -0
  786. package/fesm2015/qius.solutions-parallel-ui-angular-icons-sortamountdown.mjs.map +1 -0
  787. package/fesm2015/qius.solutions-parallel-ui-angular-icons-sortamountupalt.mjs +92 -0
  788. package/fesm2015/qius.solutions-parallel-ui-angular-icons-sortamountupalt.mjs.map +1 -0
  789. package/fesm2015/qius.solutions-parallel-ui-angular-icons-spinner.mjs +52 -0
  790. package/fesm2015/qius.solutions-parallel-ui-angular-icons-spinner.mjs.map +1 -0
  791. package/fesm2015/qius.solutions-parallel-ui-angular-icons-star.mjs +52 -0
  792. package/fesm2015/qius.solutions-parallel-ui-angular-icons-star.mjs.map +1 -0
  793. package/fesm2015/qius.solutions-parallel-ui-angular-icons-starfill.mjs +52 -0
  794. package/fesm2015/qius.solutions-parallel-ui-angular-icons-starfill.mjs.map +1 -0
  795. package/fesm2015/qius.solutions-parallel-ui-angular-icons-thlarge.mjs +56 -0
  796. package/fesm2015/qius.solutions-parallel-ui-angular-icons-thlarge.mjs.map +1 -0
  797. package/fesm2015/qius.solutions-parallel-ui-angular-icons-times.mjs +38 -0
  798. package/fesm2015/qius.solutions-parallel-ui-angular-icons-times.mjs.map +1 -0
  799. package/fesm2015/qius.solutions-parallel-ui-angular-icons-timescircle.mjs +56 -0
  800. package/fesm2015/qius.solutions-parallel-ui-angular-icons-timescircle.mjs.map +1 -0
  801. package/fesm2015/qius.solutions-parallel-ui-angular-icons-trash.mjs +56 -0
  802. package/fesm2015/qius.solutions-parallel-ui-angular-icons-trash.mjs.map +1 -0
  803. package/fesm2015/qius.solutions-parallel-ui-angular-icons-undo.mjs +56 -0
  804. package/fesm2015/qius.solutions-parallel-ui-angular-icons-undo.mjs.map +1 -0
  805. package/fesm2015/qius.solutions-parallel-ui-angular-icons-upload.mjs +56 -0
  806. package/fesm2015/qius.solutions-parallel-ui-angular-icons-upload.mjs.map +1 -0
  807. package/fesm2015/qius.solutions-parallel-ui-angular-icons-windowmaximize.mjs +56 -0
  808. package/fesm2015/qius.solutions-parallel-ui-angular-icons-windowmaximize.mjs.map +1 -0
  809. package/fesm2015/qius.solutions-parallel-ui-angular-icons-windowminimize.mjs +56 -0
  810. package/fesm2015/qius.solutions-parallel-ui-angular-icons-windowminimize.mjs.map +1 -0
  811. package/fesm2015/qius.solutions-parallel-ui-angular-image.mjs +330 -0
  812. package/fesm2015/qius.solutions-parallel-ui-angular-image.mjs.map +1 -0
  813. package/fesm2015/qius.solutions-parallel-ui-angular-inplace.mjs +175 -0
  814. package/fesm2015/qius.solutions-parallel-ui-angular-inplace.mjs.map +1 -0
  815. package/fesm2015/qius.solutions-parallel-ui-angular-inputmask.mjs +706 -0
  816. package/fesm2015/qius.solutions-parallel-ui-angular-inputmask.mjs.map +1 -0
  817. package/fesm2015/qius.solutions-parallel-ui-angular-inputnumber.mjs +1198 -0
  818. package/fesm2015/qius.solutions-parallel-ui-angular-inputnumber.mjs.map +1 -0
  819. package/fesm2015/qius.solutions-parallel-ui-angular-inputswitch.mjs +167 -0
  820. package/fesm2015/qius.solutions-parallel-ui-angular-inputswitch.mjs.map +1 -0
  821. package/fesm2015/qius.solutions-parallel-ui-angular-inputtext.mjs +64 -0
  822. package/fesm2015/qius.solutions-parallel-ui-angular-inputtext.mjs.map +1 -0
  823. package/fesm2015/qius.solutions-parallel-ui-angular-inputtextarea.mjs +126 -0
  824. package/fesm2015/qius.solutions-parallel-ui-angular-inputtextarea.mjs.map +1 -0
  825. package/fesm2015/qius.solutions-parallel-ui-angular-keyfilter.mjs +223 -0
  826. package/fesm2015/qius.solutions-parallel-ui-angular-keyfilter.mjs.map +1 -0
  827. package/fesm2015/qius.solutions-parallel-ui-angular-knob.mjs +292 -0
  828. package/fesm2015/qius.solutions-parallel-ui-angular-knob.mjs.map +1 -0
  829. package/fesm2015/qius.solutions-parallel-ui-angular-listbox.mjs +807 -0
  830. package/fesm2015/qius.solutions-parallel-ui-angular-listbox.mjs.map +1 -0
  831. package/fesm2015/qius.solutions-parallel-ui-angular-megamenu.mjs +473 -0
  832. package/fesm2015/qius.solutions-parallel-ui-angular-megamenu.mjs.map +1 -0
  833. package/fesm2015/qius.solutions-parallel-ui-angular-menu.mjs +559 -0
  834. package/fesm2015/qius.solutions-parallel-ui-angular-menu.mjs.map +1 -0
  835. package/fesm2015/qius.solutions-parallel-ui-angular-menubar.mjs +526 -0
  836. package/fesm2015/qius.solutions-parallel-ui-angular-menubar.mjs.map +1 -0
  837. package/fesm2015/qius.solutions-parallel-ui-angular-message.mjs +110 -0
  838. package/fesm2015/qius.solutions-parallel-ui-angular-message.mjs.map +1 -0
  839. package/fesm2015/qius.solutions-parallel-ui-angular-messages.mjs +283 -0
  840. package/fesm2015/qius.solutions-parallel-ui-angular-messages.mjs.map +1 -0
  841. package/fesm2015/qius.solutions-parallel-ui-angular-multiselect.mjs +1421 -0
  842. package/fesm2015/qius.solutions-parallel-ui-angular-multiselect.mjs.map +1 -0
  843. package/fesm2015/qius.solutions-parallel-ui-angular-orderlist.mjs +630 -0
  844. package/fesm2015/qius.solutions-parallel-ui-angular-orderlist.mjs.map +1 -0
  845. package/fesm2015/qius.solutions-parallel-ui-angular-organizationchart.mjs +327 -0
  846. package/fesm2015/qius.solutions-parallel-ui-angular-organizationchart.mjs.map +1 -0
  847. package/fesm2015/qius.solutions-parallel-ui-angular-overlay.mjs +554 -0
  848. package/fesm2015/qius.solutions-parallel-ui-angular-overlay.mjs.map +1 -0
  849. package/fesm2015/qius.solutions-parallel-ui-angular-overlaypanel.mjs +419 -0
  850. package/fesm2015/qius.solutions-parallel-ui-angular-overlaypanel.mjs.map +1 -0
  851. package/fesm2015/qius.solutions-parallel-ui-angular-paginator.mjs +411 -0
  852. package/fesm2015/qius.solutions-parallel-ui-angular-paginator.mjs.map +1 -0
  853. package/fesm2015/qius.solutions-parallel-ui-angular-panel.mjs +303 -0
  854. package/fesm2015/qius.solutions-parallel-ui-angular-panel.mjs.map +1 -0
  855. package/fesm2015/qius.solutions-parallel-ui-angular-panelmenu.mjs +525 -0
  856. package/fesm2015/qius.solutions-parallel-ui-angular-panelmenu.mjs.map +1 -0
  857. package/fesm2015/qius.solutions-parallel-ui-angular-password.mjs +793 -0
  858. package/fesm2015/qius.solutions-parallel-ui-angular-password.mjs.map +1 -0
  859. package/fesm2015/qius.solutions-parallel-ui-angular-picklist.mjs +1277 -0
  860. package/fesm2015/qius.solutions-parallel-ui-angular-picklist.mjs.map +1 -0
  861. package/fesm2015/qius.solutions-parallel-ui-angular-progressbar.mjs +88 -0
  862. package/fesm2015/qius.solutions-parallel-ui-angular-progressbar.mjs.map +1 -0
  863. package/fesm2015/qius.solutions-parallel-ui-angular-progressspinner.mjs +62 -0
  864. package/fesm2015/qius.solutions-parallel-ui-angular-progressspinner.mjs.map +1 -0
  865. package/fesm2015/qius.solutions-parallel-ui-angular-radiobutton.mjs +261 -0
  866. package/fesm2015/qius.solutions-parallel-ui-angular-radiobutton.mjs.map +1 -0
  867. package/fesm2015/qius.solutions-parallel-ui-angular-rating.mjs +206 -0
  868. package/fesm2015/qius.solutions-parallel-ui-angular-rating.mjs.map +1 -0
  869. package/fesm2015/qius.solutions-parallel-ui-angular-ripple.mjs +135 -0
  870. package/fesm2015/qius.solutions-parallel-ui-angular-ripple.mjs.map +1 -0
  871. package/fesm2015/qius.solutions-parallel-ui-angular-scroller.mjs +938 -0
  872. package/fesm2015/qius.solutions-parallel-ui-angular-scroller.mjs.map +1 -0
  873. package/fesm2015/qius.solutions-parallel-ui-angular-scrollpanel.mjs +281 -0
  874. package/fesm2015/qius.solutions-parallel-ui-angular-scrollpanel.mjs.map +1 -0
  875. package/fesm2015/qius.solutions-parallel-ui-angular-scrolltop.mjs +230 -0
  876. package/fesm2015/qius.solutions-parallel-ui-angular-scrolltop.mjs.map +1 -0
  877. package/fesm2015/qius.solutions-parallel-ui-angular-selectbutton.mjs +216 -0
  878. package/fesm2015/qius.solutions-parallel-ui-angular-selectbutton.mjs.map +1 -0
  879. package/fesm2015/qius.solutions-parallel-ui-angular-sidebar.mjs +378 -0
  880. package/fesm2015/qius.solutions-parallel-ui-angular-sidebar.mjs.map +1 -0
  881. package/fesm2015/qius.solutions-parallel-ui-angular-skeleton.mjs +72 -0
  882. package/fesm2015/qius.solutions-parallel-ui-angular-skeleton.mjs.map +1 -0
  883. package/fesm2015/qius.solutions-parallel-ui-angular-slidemenu.mjs +627 -0
  884. package/fesm2015/qius.solutions-parallel-ui-angular-slidemenu.mjs.map +1 -0
  885. package/fesm2015/qius.solutions-parallel-ui-angular-slider.mjs +597 -0
  886. package/fesm2015/qius.solutions-parallel-ui-angular-slider.mjs.map +1 -0
  887. package/fesm2015/qius.solutions-parallel-ui-angular-speeddial.mjs +408 -0
  888. package/fesm2015/qius.solutions-parallel-ui-angular-speeddial.mjs.map +1 -0
  889. package/fesm2015/qius.solutions-parallel-ui-angular-spinner.mjs +414 -0
  890. package/fesm2015/qius.solutions-parallel-ui-angular-spinner.mjs.map +1 -0
  891. package/fesm2015/qius.solutions-parallel-ui-angular-splitbutton.mjs +148 -0
  892. package/fesm2015/qius.solutions-parallel-ui-angular-splitbutton.mjs.map +1 -0
  893. package/fesm2015/qius.solutions-parallel-ui-angular-splitter.mjs +364 -0
  894. package/fesm2015/qius.solutions-parallel-ui-angular-splitter.mjs.map +1 -0
  895. package/fesm2015/qius.solutions-parallel-ui-angular-steps.mjs +212 -0
  896. package/fesm2015/qius.solutions-parallel-ui-angular-steps.mjs.map +1 -0
  897. package/fesm2015/qius.solutions-parallel-ui-angular-styleclass.mjs +227 -0
  898. package/fesm2015/qius.solutions-parallel-ui-angular-styleclass.mjs.map +1 -0
  899. package/fesm2015/qius.solutions-parallel-ui-angular-table.mjs +5329 -0
  900. package/fesm2015/qius.solutions-parallel-ui-angular-table.mjs.map +1 -0
  901. package/fesm2015/qius.solutions-parallel-ui-angular-tabmenu.mjs +385 -0
  902. package/fesm2015/qius.solutions-parallel-ui-angular-tabmenu.mjs.map +1 -0
  903. package/fesm2015/qius.solutions-parallel-ui-angular-tabview.mjs +539 -0
  904. package/fesm2015/qius.solutions-parallel-ui-angular-tabview.mjs.map +1 -0
  905. package/fesm2015/qius.solutions-parallel-ui-angular-tag.mjs +92 -0
  906. package/fesm2015/qius.solutions-parallel-ui-angular-tag.mjs.map +1 -0
  907. package/fesm2015/qius.solutions-parallel-ui-angular-terminal.mjs +143 -0
  908. package/fesm2015/qius.solutions-parallel-ui-angular-terminal.mjs.map +1 -0
  909. package/fesm2015/qius.solutions-parallel-ui-angular-tieredmenu.mjs +674 -0
  910. package/fesm2015/qius.solutions-parallel-ui-angular-tieredmenu.mjs.map +1 -0
  911. package/fesm2015/qius.solutions-parallel-ui-angular-timeline.mjs +138 -0
  912. package/fesm2015/qius.solutions-parallel-ui-angular-timeline.mjs.map +1 -0
  913. package/fesm2015/qius.solutions-parallel-ui-angular-toast.mjs +451 -0
  914. package/fesm2015/qius.solutions-parallel-ui-angular-toast.mjs.map +1 -0
  915. package/fesm2015/qius.solutions-parallel-ui-angular-togglebutton.mjs +140 -0
  916. package/fesm2015/qius.solutions-parallel-ui-angular-togglebutton.mjs.map +1 -0
  917. package/fesm2015/qius.solutions-parallel-ui-angular-toolbar.mjs +90 -0
  918. package/fesm2015/qius.solutions-parallel-ui-angular-toolbar.mjs.map +1 -0
  919. package/fesm2015/qius.solutions-parallel-ui-angular-tooltip.mjs +556 -0
  920. package/fesm2015/qius.solutions-parallel-ui-angular-tooltip.mjs.map +1 -0
  921. package/fesm2015/qius.solutions-parallel-ui-angular-tree.mjs +1596 -0
  922. package/fesm2015/qius.solutions-parallel-ui-angular-tree.mjs.map +1 -0
  923. package/fesm2015/qius.solutions-parallel-ui-angular-treeselect.mjs +791 -0
  924. package/fesm2015/qius.solutions-parallel-ui-angular-treeselect.mjs.map +1 -0
  925. package/fesm2015/qius.solutions-parallel-ui-angular-treetable.mjs +3228 -0
  926. package/fesm2015/qius.solutions-parallel-ui-angular-treetable.mjs.map +1 -0
  927. package/fesm2015/qius.solutions-parallel-ui-angular-tristatecheckbox.mjs +230 -0
  928. package/fesm2015/qius.solutions-parallel-ui-angular-tristatecheckbox.mjs.map +1 -0
  929. package/fesm2015/qius.solutions-parallel-ui-angular-utils.mjs +246 -0
  930. package/fesm2015/qius.solutions-parallel-ui-angular-utils.mjs.map +1 -0
  931. package/fesm2015/qius.solutions-parallel-ui-angular-virtualscroller.mjs +157 -0
  932. package/fesm2015/qius.solutions-parallel-ui-angular-virtualscroller.mjs.map +1 -0
  933. package/fesm2015/qius.solutions-parallel-ui-angular.mjs +6 -0
  934. package/fesm2015/qius.solutions-parallel-ui-angular.mjs.map +1 -0
  935. package/fesm2020/qius.solutions-parallel-ui-angular-accordion.mjs +403 -0
  936. package/fesm2020/qius.solutions-parallel-ui-angular-accordion.mjs.map +1 -0
  937. package/fesm2020/qius.solutions-parallel-ui-angular-animate.mjs +86 -0
  938. package/fesm2020/qius.solutions-parallel-ui-angular-animate.mjs.map +1 -0
  939. package/fesm2020/qius.solutions-parallel-ui-angular-api.mjs +817 -0
  940. package/fesm2020/qius.solutions-parallel-ui-angular-api.mjs.map +1 -0
  941. package/fesm2020/qius.solutions-parallel-ui-angular-autocomplete.mjs +1151 -0
  942. package/fesm2020/qius.solutions-parallel-ui-angular-autocomplete.mjs.map +1 -0
  943. package/fesm2020/qius.solutions-parallel-ui-angular-autofocus.mjs +58 -0
  944. package/fesm2020/qius.solutions-parallel-ui-angular-autofocus.mjs.map +1 -0
  945. package/fesm2020/qius.solutions-parallel-ui-angular-avatar.mjs +82 -0
  946. package/fesm2020/qius.solutions-parallel-ui-angular-avatar.mjs.map +1 -0
  947. package/fesm2020/qius.solutions-parallel-ui-angular-avatargroup.mjs +47 -0
  948. package/fesm2020/qius.solutions-parallel-ui-angular-avatargroup.mjs.map +1 -0
  949. package/fesm2020/qius.solutions-parallel-ui-angular-badge.mjs +189 -0
  950. package/fesm2020/qius.solutions-parallel-ui-angular-badge.mjs.map +1 -0
  951. package/fesm2020/qius.solutions-parallel-ui-angular-baseicon.mjs +48 -0
  952. package/fesm2020/qius.solutions-parallel-ui-angular-baseicon.mjs.map +1 -0
  953. package/fesm2020/qius.solutions-parallel-ui-angular-blockui.mjs +147 -0
  954. package/fesm2020/qius.solutions-parallel-ui-angular-blockui.mjs.map +1 -0
  955. package/fesm2020/qius.solutions-parallel-ui-angular-breadcrumb.mjs +303 -0
  956. package/fesm2020/qius.solutions-parallel-ui-angular-breadcrumb.mjs.map +1 -0
  957. package/fesm2020/qius.solutions-parallel-ui-angular-button.mjs +369 -0
  958. package/fesm2020/qius.solutions-parallel-ui-angular-button.mjs.map +1 -0
  959. package/fesm2020/qius.solutions-parallel-ui-angular-calendar.mjs +3130 -0
  960. package/fesm2020/qius.solutions-parallel-ui-angular-calendar.mjs.map +1 -0
  961. package/fesm2020/qius.solutions-parallel-ui-angular-card.mjs +133 -0
  962. package/fesm2020/qius.solutions-parallel-ui-angular-card.mjs.map +1 -0
  963. package/fesm2020/qius.solutions-parallel-ui-angular-carousel.mjs +703 -0
  964. package/fesm2020/qius.solutions-parallel-ui-angular-carousel.mjs.map +1 -0
  965. package/fesm2020/qius.solutions-parallel-ui-angular-cascadeselect.mjs +773 -0
  966. package/fesm2020/qius.solutions-parallel-ui-angular-cascadeselect.mjs.map +1 -0
  967. package/fesm2020/qius.solutions-parallel-ui-angular-chart.mjs +149 -0
  968. package/fesm2020/qius.solutions-parallel-ui-angular-chart.mjs.map +1 -0
  969. package/fesm2020/qius.solutions-parallel-ui-angular-checkbox.mjs +254 -0
  970. package/fesm2020/qius.solutions-parallel-ui-angular-checkbox.mjs.map +1 -0
  971. package/fesm2020/qius.solutions-parallel-ui-angular-chip.mjs +120 -0
  972. package/fesm2020/qius.solutions-parallel-ui-angular-chip.mjs.map +1 -0
  973. package/fesm2020/qius.solutions-parallel-ui-angular-chips.mjs +382 -0
  974. package/fesm2020/qius.solutions-parallel-ui-angular-chips.mjs.map +1 -0
  975. package/fesm2020/qius.solutions-parallel-ui-angular-colorpicker.mjs +692 -0
  976. package/fesm2020/qius.solutions-parallel-ui-angular-colorpicker.mjs.map +1 -0
  977. package/fesm2020/qius.solutions-parallel-ui-angular-confirmdialog.mjs +613 -0
  978. package/fesm2020/qius.solutions-parallel-ui-angular-confirmdialog.mjs.map +1 -0
  979. package/fesm2020/qius.solutions-parallel-ui-angular-confirmpopup.mjs +401 -0
  980. package/fesm2020/qius.solutions-parallel-ui-angular-confirmpopup.mjs.map +1 -0
  981. package/fesm2020/qius.solutions-parallel-ui-angular-contextmenu.mjs +698 -0
  982. package/fesm2020/qius.solutions-parallel-ui-angular-contextmenu.mjs.map +1 -0
  983. package/fesm2020/qius.solutions-parallel-ui-angular-dataview.mjs +519 -0
  984. package/fesm2020/qius.solutions-parallel-ui-angular-dataview.mjs.map +1 -0
  985. package/fesm2020/qius.solutions-parallel-ui-angular-defer.mjs +99 -0
  986. package/fesm2020/qius.solutions-parallel-ui-angular-defer.mjs.map +1 -0
  987. package/fesm2020/qius.solutions-parallel-ui-angular-dialog.mjs +840 -0
  988. package/fesm2020/qius.solutions-parallel-ui-angular-dialog.mjs.map +1 -0
  989. package/fesm2020/qius.solutions-parallel-ui-angular-divider.mjs +76 -0
  990. package/fesm2020/qius.solutions-parallel-ui-angular-divider.mjs.map +1 -0
  991. package/fesm2020/qius.solutions-parallel-ui-angular-dock.mjs +217 -0
  992. package/fesm2020/qius.solutions-parallel-ui-angular-dock.mjs.map +1 -0
  993. package/fesm2020/qius.solutions-parallel-ui-angular-dom.mjs +632 -0
  994. package/fesm2020/qius.solutions-parallel-ui-angular-dom.mjs.map +1 -0
  995. package/fesm2020/qius.solutions-parallel-ui-angular-dragdrop.mjs +258 -0
  996. package/fesm2020/qius.solutions-parallel-ui-angular-dragdrop.mjs.map +1 -0
  997. package/fesm2020/qius.solutions-parallel-ui-angular-dropdown.mjs +1379 -0
  998. package/fesm2020/qius.solutions-parallel-ui-angular-dropdown.mjs.map +1 -0
  999. package/fesm2020/qius.solutions-parallel-ui-angular-dynamicdialog.mjs +693 -0
  1000. package/fesm2020/qius.solutions-parallel-ui-angular-dynamicdialog.mjs.map +1 -0
  1001. package/fesm2020/qius.solutions-parallel-ui-angular-editor.mjs +316 -0
  1002. package/fesm2020/qius.solutions-parallel-ui-angular-editor.mjs.map +1 -0
  1003. package/fesm2020/qius.solutions-parallel-ui-angular-fieldset.mjs +221 -0
  1004. package/fesm2020/qius.solutions-parallel-ui-angular-fieldset.mjs.map +1 -0
  1005. package/fesm2020/qius.solutions-parallel-ui-angular-fileupload.mjs +761 -0
  1006. package/fesm2020/qius.solutions-parallel-ui-angular-fileupload.mjs.map +1 -0
  1007. package/fesm2020/qius.solutions-parallel-ui-angular-focustrap.mjs +59 -0
  1008. package/fesm2020/qius.solutions-parallel-ui-angular-focustrap.mjs.map +1 -0
  1009. package/fesm2020/qius.solutions-parallel-ui-angular-galleria.mjs +1194 -0
  1010. package/fesm2020/qius.solutions-parallel-ui-angular-galleria.mjs.map +1 -0
  1011. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angledoubledown.mjs +42 -0
  1012. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angledoubledown.mjs.map +1 -0
  1013. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angledoubleleft.mjs +42 -0
  1014. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angledoubleleft.mjs.map +1 -0
  1015. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angledoubleright.mjs +42 -0
  1016. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angledoubleright.mjs.map +1 -0
  1017. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angledoubleup.mjs +42 -0
  1018. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angledoubleup.mjs.map +1 -0
  1019. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angledown.mjs +38 -0
  1020. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angledown.mjs.map +1 -0
  1021. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angleleft.mjs +38 -0
  1022. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angleleft.mjs.map +1 -0
  1023. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angleright.mjs +38 -0
  1024. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angleright.mjs.map +1 -0
  1025. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angleup.mjs +38 -0
  1026. package/fesm2020/qius.solutions-parallel-ui-angular-icons-angleup.mjs.map +1 -0
  1027. package/fesm2020/qius.solutions-parallel-ui-angular-icons-arrowdown.mjs +56 -0
  1028. package/fesm2020/qius.solutions-parallel-ui-angular-icons-arrowdown.mjs.map +1 -0
  1029. package/fesm2020/qius.solutions-parallel-ui-angular-icons-arrowdownleft.mjs +38 -0
  1030. package/fesm2020/qius.solutions-parallel-ui-angular-icons-arrowdownleft.mjs.map +1 -0
  1031. package/fesm2020/qius.solutions-parallel-ui-angular-icons-arrowdownright.mjs +38 -0
  1032. package/fesm2020/qius.solutions-parallel-ui-angular-icons-arrowdownright.mjs.map +1 -0
  1033. package/fesm2020/qius.solutions-parallel-ui-angular-icons-arrowleft.mjs +56 -0
  1034. package/fesm2020/qius.solutions-parallel-ui-angular-icons-arrowleft.mjs.map +1 -0
  1035. package/fesm2020/qius.solutions-parallel-ui-angular-icons-arrowright.mjs +42 -0
  1036. package/fesm2020/qius.solutions-parallel-ui-angular-icons-arrowright.mjs.map +1 -0
  1037. package/fesm2020/qius.solutions-parallel-ui-angular-icons-arrowup.mjs +56 -0
  1038. package/fesm2020/qius.solutions-parallel-ui-angular-icons-arrowup.mjs.map +1 -0
  1039. package/fesm2020/qius.solutions-parallel-ui-angular-icons-ban.mjs +52 -0
  1040. package/fesm2020/qius.solutions-parallel-ui-angular-icons-ban.mjs.map +1 -0
  1041. package/fesm2020/qius.solutions-parallel-ui-angular-icons-bars.mjs +42 -0
  1042. package/fesm2020/qius.solutions-parallel-ui-angular-icons-bars.mjs.map +1 -0
  1043. package/fesm2020/qius.solutions-parallel-ui-angular-icons-calendar.mjs +38 -0
  1044. package/fesm2020/qius.solutions-parallel-ui-angular-icons-calendar.mjs.map +1 -0
  1045. package/fesm2020/qius.solutions-parallel-ui-angular-icons-caretleft.mjs +38 -0
  1046. package/fesm2020/qius.solutions-parallel-ui-angular-icons-caretleft.mjs.map +1 -0
  1047. package/fesm2020/qius.solutions-parallel-ui-angular-icons-caretright.mjs +38 -0
  1048. package/fesm2020/qius.solutions-parallel-ui-angular-icons-caretright.mjs.map +1 -0
  1049. package/fesm2020/qius.solutions-parallel-ui-angular-icons-check.mjs +38 -0
  1050. package/fesm2020/qius.solutions-parallel-ui-angular-icons-check.mjs.map +1 -0
  1051. package/fesm2020/qius.solutions-parallel-ui-angular-icons-chevrondown.mjs +38 -0
  1052. package/fesm2020/qius.solutions-parallel-ui-angular-icons-chevrondown.mjs.map +1 -0
  1053. package/fesm2020/qius.solutions-parallel-ui-angular-icons-chevronleft.mjs +38 -0
  1054. package/fesm2020/qius.solutions-parallel-ui-angular-icons-chevronleft.mjs.map +1 -0
  1055. package/fesm2020/qius.solutions-parallel-ui-angular-icons-chevronright.mjs +38 -0
  1056. package/fesm2020/qius.solutions-parallel-ui-angular-icons-chevronright.mjs.map +1 -0
  1057. package/fesm2020/qius.solutions-parallel-ui-angular-icons-chevronup.mjs +38 -0
  1058. package/fesm2020/qius.solutions-parallel-ui-angular-icons-chevronup.mjs.map +1 -0
  1059. package/fesm2020/qius.solutions-parallel-ui-angular-icons-exclamationtriangle.mjs +68 -0
  1060. package/fesm2020/qius.solutions-parallel-ui-angular-icons-exclamationtriangle.mjs.map +1 -0
  1061. package/fesm2020/qius.solutions-parallel-ui-angular-icons-eye.mjs +42 -0
  1062. package/fesm2020/qius.solutions-parallel-ui-angular-icons-eye.mjs.map +1 -0
  1063. package/fesm2020/qius.solutions-parallel-ui-angular-icons-eyeslash.mjs +56 -0
  1064. package/fesm2020/qius.solutions-parallel-ui-angular-icons-eyeslash.mjs.map +1 -0
  1065. package/fesm2020/qius.solutions-parallel-ui-angular-icons-filter.mjs +52 -0
  1066. package/fesm2020/qius.solutions-parallel-ui-angular-icons-filter.mjs.map +1 -0
  1067. package/fesm2020/qius.solutions-parallel-ui-angular-icons-filterslash.mjs +56 -0
  1068. package/fesm2020/qius.solutions-parallel-ui-angular-icons-filterslash.mjs.map +1 -0
  1069. package/fesm2020/qius.solutions-parallel-ui-angular-icons-home.mjs +56 -0
  1070. package/fesm2020/qius.solutions-parallel-ui-angular-icons-home.mjs.map +1 -0
  1071. package/fesm2020/qius.solutions-parallel-ui-angular-icons-infocircle.mjs +56 -0
  1072. package/fesm2020/qius.solutions-parallel-ui-angular-icons-infocircle.mjs.map +1 -0
  1073. package/fesm2020/qius.solutions-parallel-ui-angular-icons-minus.mjs +39 -0
  1074. package/fesm2020/qius.solutions-parallel-ui-angular-icons-minus.mjs.map +1 -0
  1075. package/fesm2020/qius.solutions-parallel-ui-angular-icons-pencil.mjs +52 -0
  1076. package/fesm2020/qius.solutions-parallel-ui-angular-icons-pencil.mjs.map +1 -0
  1077. package/fesm2020/qius.solutions-parallel-ui-angular-icons-plus.mjs +52 -0
  1078. package/fesm2020/qius.solutions-parallel-ui-angular-icons-plus.mjs.map +1 -0
  1079. package/fesm2020/qius.solutions-parallel-ui-angular-icons-refresh.mjs +56 -0
  1080. package/fesm2020/qius.solutions-parallel-ui-angular-icons-refresh.mjs.map +1 -0
  1081. package/fesm2020/qius.solutions-parallel-ui-angular-icons-search.mjs +56 -0
  1082. package/fesm2020/qius.solutions-parallel-ui-angular-icons-search.mjs.map +1 -0
  1083. package/fesm2020/qius.solutions-parallel-ui-angular-icons-searchminus.mjs +56 -0
  1084. package/fesm2020/qius.solutions-parallel-ui-angular-icons-searchminus.mjs.map +1 -0
  1085. package/fesm2020/qius.solutions-parallel-ui-angular-icons-searchplus.mjs +56 -0
  1086. package/fesm2020/qius.solutions-parallel-ui-angular-icons-searchplus.mjs.map +1 -0
  1087. package/fesm2020/qius.solutions-parallel-ui-angular-icons-sortalt.mjs +64 -0
  1088. package/fesm2020/qius.solutions-parallel-ui-angular-icons-sortalt.mjs.map +1 -0
  1089. package/fesm2020/qius.solutions-parallel-ui-angular-icons-sortamountdown.mjs +92 -0
  1090. package/fesm2020/qius.solutions-parallel-ui-angular-icons-sortamountdown.mjs.map +1 -0
  1091. package/fesm2020/qius.solutions-parallel-ui-angular-icons-sortamountupalt.mjs +92 -0
  1092. package/fesm2020/qius.solutions-parallel-ui-angular-icons-sortamountupalt.mjs.map +1 -0
  1093. package/fesm2020/qius.solutions-parallel-ui-angular-icons-spinner.mjs +52 -0
  1094. package/fesm2020/qius.solutions-parallel-ui-angular-icons-spinner.mjs.map +1 -0
  1095. package/fesm2020/qius.solutions-parallel-ui-angular-icons-star.mjs +52 -0
  1096. package/fesm2020/qius.solutions-parallel-ui-angular-icons-star.mjs.map +1 -0
  1097. package/fesm2020/qius.solutions-parallel-ui-angular-icons-starfill.mjs +52 -0
  1098. package/fesm2020/qius.solutions-parallel-ui-angular-icons-starfill.mjs.map +1 -0
  1099. package/fesm2020/qius.solutions-parallel-ui-angular-icons-thlarge.mjs +56 -0
  1100. package/fesm2020/qius.solutions-parallel-ui-angular-icons-thlarge.mjs.map +1 -0
  1101. package/fesm2020/qius.solutions-parallel-ui-angular-icons-times.mjs +38 -0
  1102. package/fesm2020/qius.solutions-parallel-ui-angular-icons-times.mjs.map +1 -0
  1103. package/fesm2020/qius.solutions-parallel-ui-angular-icons-timescircle.mjs +56 -0
  1104. package/fesm2020/qius.solutions-parallel-ui-angular-icons-timescircle.mjs.map +1 -0
  1105. package/fesm2020/qius.solutions-parallel-ui-angular-icons-trash.mjs +56 -0
  1106. package/fesm2020/qius.solutions-parallel-ui-angular-icons-trash.mjs.map +1 -0
  1107. package/fesm2020/qius.solutions-parallel-ui-angular-icons-undo.mjs +56 -0
  1108. package/fesm2020/qius.solutions-parallel-ui-angular-icons-undo.mjs.map +1 -0
  1109. package/fesm2020/qius.solutions-parallel-ui-angular-icons-upload.mjs +56 -0
  1110. package/fesm2020/qius.solutions-parallel-ui-angular-icons-upload.mjs.map +1 -0
  1111. package/fesm2020/qius.solutions-parallel-ui-angular-icons-windowmaximize.mjs +56 -0
  1112. package/fesm2020/qius.solutions-parallel-ui-angular-icons-windowmaximize.mjs.map +1 -0
  1113. package/fesm2020/qius.solutions-parallel-ui-angular-icons-windowminimize.mjs +56 -0
  1114. package/fesm2020/qius.solutions-parallel-ui-angular-icons-windowminimize.mjs.map +1 -0
  1115. package/fesm2020/qius.solutions-parallel-ui-angular-image.mjs +328 -0
  1116. package/fesm2020/qius.solutions-parallel-ui-angular-image.mjs.map +1 -0
  1117. package/fesm2020/qius.solutions-parallel-ui-angular-inplace.mjs +175 -0
  1118. package/fesm2020/qius.solutions-parallel-ui-angular-inplace.mjs.map +1 -0
  1119. package/fesm2020/qius.solutions-parallel-ui-angular-inputmask.mjs +704 -0
  1120. package/fesm2020/qius.solutions-parallel-ui-angular-inputmask.mjs.map +1 -0
  1121. package/fesm2020/qius.solutions-parallel-ui-angular-inputnumber.mjs +1196 -0
  1122. package/fesm2020/qius.solutions-parallel-ui-angular-inputnumber.mjs.map +1 -0
  1123. package/fesm2020/qius.solutions-parallel-ui-angular-inputswitch.mjs +167 -0
  1124. package/fesm2020/qius.solutions-parallel-ui-angular-inputswitch.mjs.map +1 -0
  1125. package/fesm2020/qius.solutions-parallel-ui-angular-inputtext.mjs +62 -0
  1126. package/fesm2020/qius.solutions-parallel-ui-angular-inputtext.mjs.map +1 -0
  1127. package/fesm2020/qius.solutions-parallel-ui-angular-inputtextarea.mjs +124 -0
  1128. package/fesm2020/qius.solutions-parallel-ui-angular-inputtextarea.mjs.map +1 -0
  1129. package/fesm2020/qius.solutions-parallel-ui-angular-keyfilter.mjs +221 -0
  1130. package/fesm2020/qius.solutions-parallel-ui-angular-keyfilter.mjs.map +1 -0
  1131. package/fesm2020/qius.solutions-parallel-ui-angular-knob.mjs +290 -0
  1132. package/fesm2020/qius.solutions-parallel-ui-angular-knob.mjs.map +1 -0
  1133. package/fesm2020/qius.solutions-parallel-ui-angular-listbox.mjs +807 -0
  1134. package/fesm2020/qius.solutions-parallel-ui-angular-listbox.mjs.map +1 -0
  1135. package/fesm2020/qius.solutions-parallel-ui-angular-megamenu.mjs +471 -0
  1136. package/fesm2020/qius.solutions-parallel-ui-angular-megamenu.mjs.map +1 -0
  1137. package/fesm2020/qius.solutions-parallel-ui-angular-menu.mjs +555 -0
  1138. package/fesm2020/qius.solutions-parallel-ui-angular-menu.mjs.map +1 -0
  1139. package/fesm2020/qius.solutions-parallel-ui-angular-menubar.mjs +522 -0
  1140. package/fesm2020/qius.solutions-parallel-ui-angular-menubar.mjs.map +1 -0
  1141. package/fesm2020/qius.solutions-parallel-ui-angular-message.mjs +110 -0
  1142. package/fesm2020/qius.solutions-parallel-ui-angular-message.mjs.map +1 -0
  1143. package/fesm2020/qius.solutions-parallel-ui-angular-messages.mjs +279 -0
  1144. package/fesm2020/qius.solutions-parallel-ui-angular-messages.mjs.map +1 -0
  1145. package/fesm2020/qius.solutions-parallel-ui-angular-multiselect.mjs +1418 -0
  1146. package/fesm2020/qius.solutions-parallel-ui-angular-multiselect.mjs.map +1 -0
  1147. package/fesm2020/qius.solutions-parallel-ui-angular-orderlist.mjs +628 -0
  1148. package/fesm2020/qius.solutions-parallel-ui-angular-orderlist.mjs.map +1 -0
  1149. package/fesm2020/qius.solutions-parallel-ui-angular-organizationchart.mjs +325 -0
  1150. package/fesm2020/qius.solutions-parallel-ui-angular-organizationchart.mjs.map +1 -0
  1151. package/fesm2020/qius.solutions-parallel-ui-angular-overlay.mjs +527 -0
  1152. package/fesm2020/qius.solutions-parallel-ui-angular-overlay.mjs.map +1 -0
  1153. package/fesm2020/qius.solutions-parallel-ui-angular-overlaypanel.mjs +417 -0
  1154. package/fesm2020/qius.solutions-parallel-ui-angular-overlaypanel.mjs.map +1 -0
  1155. package/fesm2020/qius.solutions-parallel-ui-angular-paginator.mjs +411 -0
  1156. package/fesm2020/qius.solutions-parallel-ui-angular-paginator.mjs.map +1 -0
  1157. package/fesm2020/qius.solutions-parallel-ui-angular-panel.mjs +303 -0
  1158. package/fesm2020/qius.solutions-parallel-ui-angular-panel.mjs.map +1 -0
  1159. package/fesm2020/qius.solutions-parallel-ui-angular-panelmenu.mjs +525 -0
  1160. package/fesm2020/qius.solutions-parallel-ui-angular-panelmenu.mjs.map +1 -0
  1161. package/fesm2020/qius.solutions-parallel-ui-angular-password.mjs +789 -0
  1162. package/fesm2020/qius.solutions-parallel-ui-angular-password.mjs.map +1 -0
  1163. package/fesm2020/qius.solutions-parallel-ui-angular-picklist.mjs +1275 -0
  1164. package/fesm2020/qius.solutions-parallel-ui-angular-picklist.mjs.map +1 -0
  1165. package/fesm2020/qius.solutions-parallel-ui-angular-progressbar.mjs +88 -0
  1166. package/fesm2020/qius.solutions-parallel-ui-angular-progressbar.mjs.map +1 -0
  1167. package/fesm2020/qius.solutions-parallel-ui-angular-progressspinner.mjs +62 -0
  1168. package/fesm2020/qius.solutions-parallel-ui-angular-progressspinner.mjs.map +1 -0
  1169. package/fesm2020/qius.solutions-parallel-ui-angular-radiobutton.mjs +261 -0
  1170. package/fesm2020/qius.solutions-parallel-ui-angular-radiobutton.mjs.map +1 -0
  1171. package/fesm2020/qius.solutions-parallel-ui-angular-rating.mjs +206 -0
  1172. package/fesm2020/qius.solutions-parallel-ui-angular-rating.mjs.map +1 -0
  1173. package/fesm2020/qius.solutions-parallel-ui-angular-ripple.mjs +133 -0
  1174. package/fesm2020/qius.solutions-parallel-ui-angular-ripple.mjs.map +1 -0
  1175. package/fesm2020/qius.solutions-parallel-ui-angular-scroller.mjs +935 -0
  1176. package/fesm2020/qius.solutions-parallel-ui-angular-scroller.mjs.map +1 -0
  1177. package/fesm2020/qius.solutions-parallel-ui-angular-scrollpanel.mjs +279 -0
  1178. package/fesm2020/qius.solutions-parallel-ui-angular-scrollpanel.mjs.map +1 -0
  1179. package/fesm2020/qius.solutions-parallel-ui-angular-scrolltop.mjs +228 -0
  1180. package/fesm2020/qius.solutions-parallel-ui-angular-scrolltop.mjs.map +1 -0
  1181. package/fesm2020/qius.solutions-parallel-ui-angular-selectbutton.mjs +216 -0
  1182. package/fesm2020/qius.solutions-parallel-ui-angular-selectbutton.mjs.map +1 -0
  1183. package/fesm2020/qius.solutions-parallel-ui-angular-sidebar.mjs +376 -0
  1184. package/fesm2020/qius.solutions-parallel-ui-angular-sidebar.mjs.map +1 -0
  1185. package/fesm2020/qius.solutions-parallel-ui-angular-skeleton.mjs +72 -0
  1186. package/fesm2020/qius.solutions-parallel-ui-angular-skeleton.mjs.map +1 -0
  1187. package/fesm2020/qius.solutions-parallel-ui-angular-slidemenu.mjs +623 -0
  1188. package/fesm2020/qius.solutions-parallel-ui-angular-slidemenu.mjs.map +1 -0
  1189. package/fesm2020/qius.solutions-parallel-ui-angular-slider.mjs +595 -0
  1190. package/fesm2020/qius.solutions-parallel-ui-angular-slider.mjs.map +1 -0
  1191. package/fesm2020/qius.solutions-parallel-ui-angular-speeddial.mjs +409 -0
  1192. package/fesm2020/qius.solutions-parallel-ui-angular-speeddial.mjs.map +1 -0
  1193. package/fesm2020/qius.solutions-parallel-ui-angular-spinner.mjs +414 -0
  1194. package/fesm2020/qius.solutions-parallel-ui-angular-spinner.mjs.map +1 -0
  1195. package/fesm2020/qius.solutions-parallel-ui-angular-splitbutton.mjs +148 -0
  1196. package/fesm2020/qius.solutions-parallel-ui-angular-splitbutton.mjs.map +1 -0
  1197. package/fesm2020/qius.solutions-parallel-ui-angular-splitter.mjs +362 -0
  1198. package/fesm2020/qius.solutions-parallel-ui-angular-splitter.mjs.map +1 -0
  1199. package/fesm2020/qius.solutions-parallel-ui-angular-steps.mjs +212 -0
  1200. package/fesm2020/qius.solutions-parallel-ui-angular-steps.mjs.map +1 -0
  1201. package/fesm2020/qius.solutions-parallel-ui-angular-styleclass.mjs +227 -0
  1202. package/fesm2020/qius.solutions-parallel-ui-angular-styleclass.mjs.map +1 -0
  1203. package/fesm2020/qius.solutions-parallel-ui-angular-table.mjs +5321 -0
  1204. package/fesm2020/qius.solutions-parallel-ui-angular-table.mjs.map +1 -0
  1205. package/fesm2020/qius.solutions-parallel-ui-angular-tabmenu.mjs +381 -0
  1206. package/fesm2020/qius.solutions-parallel-ui-angular-tabmenu.mjs.map +1 -0
  1207. package/fesm2020/qius.solutions-parallel-ui-angular-tabview.mjs +534 -0
  1208. package/fesm2020/qius.solutions-parallel-ui-angular-tabview.mjs.map +1 -0
  1209. package/fesm2020/qius.solutions-parallel-ui-angular-tag.mjs +92 -0
  1210. package/fesm2020/qius.solutions-parallel-ui-angular-tag.mjs.map +1 -0
  1211. package/fesm2020/qius.solutions-parallel-ui-angular-terminal.mjs +143 -0
  1212. package/fesm2020/qius.solutions-parallel-ui-angular-terminal.mjs.map +1 -0
  1213. package/fesm2020/qius.solutions-parallel-ui-angular-tieredmenu.mjs +670 -0
  1214. package/fesm2020/qius.solutions-parallel-ui-angular-tieredmenu.mjs.map +1 -0
  1215. package/fesm2020/qius.solutions-parallel-ui-angular-timeline.mjs +138 -0
  1216. package/fesm2020/qius.solutions-parallel-ui-angular-timeline.mjs.map +1 -0
  1217. package/fesm2020/qius.solutions-parallel-ui-angular-toast.mjs +449 -0
  1218. package/fesm2020/qius.solutions-parallel-ui-angular-toast.mjs.map +1 -0
  1219. package/fesm2020/qius.solutions-parallel-ui-angular-togglebutton.mjs +140 -0
  1220. package/fesm2020/qius.solutions-parallel-ui-angular-togglebutton.mjs.map +1 -0
  1221. package/fesm2020/qius.solutions-parallel-ui-angular-toolbar.mjs +90 -0
  1222. package/fesm2020/qius.solutions-parallel-ui-angular-toolbar.mjs.map +1 -0
  1223. package/fesm2020/qius.solutions-parallel-ui-angular-tooltip.mjs +553 -0
  1224. package/fesm2020/qius.solutions-parallel-ui-angular-tooltip.mjs.map +1 -0
  1225. package/fesm2020/qius.solutions-parallel-ui-angular-tree.mjs +1591 -0
  1226. package/fesm2020/qius.solutions-parallel-ui-angular-tree.mjs.map +1 -0
  1227. package/fesm2020/qius.solutions-parallel-ui-angular-treeselect.mjs +785 -0
  1228. package/fesm2020/qius.solutions-parallel-ui-angular-treeselect.mjs.map +1 -0
  1229. package/fesm2020/qius.solutions-parallel-ui-angular-treetable.mjs +3224 -0
  1230. package/fesm2020/qius.solutions-parallel-ui-angular-treetable.mjs.map +1 -0
  1231. package/fesm2020/qius.solutions-parallel-ui-angular-tristatecheckbox.mjs +230 -0
  1232. package/fesm2020/qius.solutions-parallel-ui-angular-tristatecheckbox.mjs.map +1 -0
  1233. package/fesm2020/qius.solutions-parallel-ui-angular-utils.mjs +246 -0
  1234. package/fesm2020/qius.solutions-parallel-ui-angular-utils.mjs.map +1 -0
  1235. package/fesm2020/qius.solutions-parallel-ui-angular-virtualscroller.mjs +160 -0
  1236. package/fesm2020/qius.solutions-parallel-ui-angular-virtualscroller.mjs.map +1 -0
  1237. package/fesm2020/qius.solutions-parallel-ui-angular.mjs +6 -0
  1238. package/fesm2020/qius.solutions-parallel-ui-angular.mjs.map +1 -0
  1239. package/fieldset/fieldset.d.ts +41 -0
  1240. package/fieldset/index.d.ts +5 -0
  1241. package/fieldset/public_api.d.ts +1 -0
  1242. package/fileupload/fileupload.d.ts +139 -0
  1243. package/fileupload/index.d.ts +5 -0
  1244. package/fileupload/public_api.d.ts +1 -0
  1245. package/focustrap/focustrap.d.ts +16 -0
  1246. package/focustrap/index.d.ts +5 -0
  1247. package/focustrap/public_api.d.ts +1 -0
  1248. package/galleria/galleria.d.ts +218 -0
  1249. package/galleria/index.d.ts +5 -0
  1250. package/galleria/public_api.d.ts +1 -0
  1251. package/icons/angledoubledown/angledoubledown.d.ts +6 -0
  1252. package/icons/angledoubledown/index.d.ts +5 -0
  1253. package/icons/angledoubledown/public_api.d.ts +1 -0
  1254. package/icons/angledoubleleft/angledoubleleft.d.ts +6 -0
  1255. package/icons/angledoubleleft/index.d.ts +5 -0
  1256. package/icons/angledoubleleft/public_api.d.ts +1 -0
  1257. package/icons/angledoubleright/angledoubleright.d.ts +6 -0
  1258. package/icons/angledoubleright/index.d.ts +5 -0
  1259. package/icons/angledoubleright/public_api.d.ts +1 -0
  1260. package/icons/angledoubleup/angledoubleup.d.ts +6 -0
  1261. package/icons/angledoubleup/index.d.ts +5 -0
  1262. package/icons/angledoubleup/public_api.d.ts +1 -0
  1263. package/icons/angledown/angledown.d.ts +6 -0
  1264. package/icons/angledown/index.d.ts +5 -0
  1265. package/icons/angledown/public_api.d.ts +1 -0
  1266. package/icons/angleleft/angleleft.d.ts +6 -0
  1267. package/icons/angleleft/index.d.ts +5 -0
  1268. package/icons/angleleft/public_api.d.ts +1 -0
  1269. package/icons/angleright/angleright.d.ts +6 -0
  1270. package/icons/angleright/index.d.ts +5 -0
  1271. package/icons/angleright/public_api.d.ts +1 -0
  1272. package/icons/angleup/angleup.d.ts +6 -0
  1273. package/icons/angleup/index.d.ts +5 -0
  1274. package/icons/angleup/public_api.d.ts +1 -0
  1275. package/icons/arrowdown/arrowdown.d.ts +6 -0
  1276. package/icons/arrowdown/index.d.ts +5 -0
  1277. package/icons/arrowdown/public_api.d.ts +1 -0
  1278. package/icons/arrowdownleft/arrowdownleft.d.ts +6 -0
  1279. package/icons/arrowdownleft/index.d.ts +5 -0
  1280. package/icons/arrowdownleft/public_api.d.ts +1 -0
  1281. package/icons/arrowdownright/arrowdownright.d.ts +6 -0
  1282. package/icons/arrowdownright/index.d.ts +5 -0
  1283. package/icons/arrowdownright/public_api.d.ts +1 -0
  1284. package/icons/arrowleft/arrowleft.d.ts +6 -0
  1285. package/icons/arrowleft/index.d.ts +5 -0
  1286. package/icons/arrowleft/public_api.d.ts +1 -0
  1287. package/icons/arrowright/arrowright.d.ts +6 -0
  1288. package/icons/arrowright/index.d.ts +5 -0
  1289. package/icons/arrowright/public_api.d.ts +1 -0
  1290. package/icons/arrowup/arrowup.d.ts +6 -0
  1291. package/icons/arrowup/index.d.ts +5 -0
  1292. package/icons/arrowup/public_api.d.ts +1 -0
  1293. package/icons/ban/ban.d.ts +6 -0
  1294. package/icons/ban/index.d.ts +5 -0
  1295. package/icons/ban/public_api.d.ts +1 -0
  1296. package/icons/bars/bars.d.ts +6 -0
  1297. package/icons/bars/index.d.ts +5 -0
  1298. package/icons/bars/public_api.d.ts +1 -0
  1299. package/icons/calendar/calendar.d.ts +6 -0
  1300. package/icons/calendar/index.d.ts +5 -0
  1301. package/icons/calendar/public_api.d.ts +1 -0
  1302. package/icons/caretleft/caretleft.d.ts +6 -0
  1303. package/icons/caretleft/index.d.ts +5 -0
  1304. package/icons/caretleft/public_api.d.ts +1 -0
  1305. package/icons/caretright/caretright.d.ts +6 -0
  1306. package/icons/caretright/index.d.ts +5 -0
  1307. package/icons/caretright/public_api.d.ts +1 -0
  1308. package/icons/check/check.d.ts +6 -0
  1309. package/icons/check/index.d.ts +5 -0
  1310. package/icons/check/public_api.d.ts +1 -0
  1311. package/icons/chevrondown/chevrondown.d.ts +6 -0
  1312. package/icons/chevrondown/index.d.ts +5 -0
  1313. package/icons/chevrondown/public_api.d.ts +1 -0
  1314. package/icons/chevronleft/chevronleft.d.ts +6 -0
  1315. package/icons/chevronleft/index.d.ts +5 -0
  1316. package/icons/chevronleft/public_api.d.ts +1 -0
  1317. package/icons/chevronright/chevronright.d.ts +6 -0
  1318. package/icons/chevronright/index.d.ts +5 -0
  1319. package/icons/chevronright/public_api.d.ts +1 -0
  1320. package/icons/chevronup/chevronup.d.ts +6 -0
  1321. package/icons/chevronup/index.d.ts +5 -0
  1322. package/icons/chevronup/public_api.d.ts +1 -0
  1323. package/icons/exclamationtriangle/exclamationtriangle.d.ts +6 -0
  1324. package/icons/exclamationtriangle/index.d.ts +5 -0
  1325. package/icons/exclamationtriangle/public_api.d.ts +1 -0
  1326. package/icons/eye/eye.d.ts +6 -0
  1327. package/icons/eye/index.d.ts +5 -0
  1328. package/icons/eye/public_api.d.ts +1 -0
  1329. package/icons/eyeslash/eyeslash.d.ts +6 -0
  1330. package/icons/eyeslash/index.d.ts +5 -0
  1331. package/icons/eyeslash/public_api.d.ts +1 -0
  1332. package/icons/filter/filter.d.ts +6 -0
  1333. package/icons/filter/index.d.ts +5 -0
  1334. package/icons/filter/public_api.d.ts +1 -0
  1335. package/icons/filterslash/filterslash.d.ts +6 -0
  1336. package/icons/filterslash/index.d.ts +5 -0
  1337. package/icons/filterslash/public_api.d.ts +1 -0
  1338. package/icons/home/home.d.ts +6 -0
  1339. package/icons/home/index.d.ts +5 -0
  1340. package/icons/home/public_api.d.ts +1 -0
  1341. package/icons/infocircle/index.d.ts +5 -0
  1342. package/icons/infocircle/infocircle.d.ts +6 -0
  1343. package/icons/infocircle/public_api.d.ts +1 -0
  1344. package/icons/minus/index.d.ts +5 -0
  1345. package/icons/minus/minus.d.ts +6 -0
  1346. package/icons/minus/public_api.d.ts +1 -0
  1347. package/icons/pencil/index.d.ts +5 -0
  1348. package/icons/pencil/pencil.d.ts +6 -0
  1349. package/icons/pencil/public_api.d.ts +1 -0
  1350. package/icons/plus/index.d.ts +5 -0
  1351. package/icons/plus/plus.d.ts +6 -0
  1352. package/icons/plus/public_api.d.ts +1 -0
  1353. package/icons/refresh/index.d.ts +5 -0
  1354. package/icons/refresh/public_api.d.ts +1 -0
  1355. package/icons/refresh/refresh.d.ts +6 -0
  1356. package/icons/search/index.d.ts +5 -0
  1357. package/icons/search/public_api.d.ts +1 -0
  1358. package/icons/search/search.d.ts +6 -0
  1359. package/icons/searchminus/index.d.ts +5 -0
  1360. package/icons/searchminus/public_api.d.ts +1 -0
  1361. package/icons/searchminus/searchminus.d.ts +6 -0
  1362. package/icons/searchplus/index.d.ts +5 -0
  1363. package/icons/searchplus/public_api.d.ts +1 -0
  1364. package/icons/searchplus/searchplus.d.ts +6 -0
  1365. package/icons/sortalt/index.d.ts +5 -0
  1366. package/icons/sortalt/public_api.d.ts +1 -0
  1367. package/icons/sortalt/sortalt.d.ts +6 -0
  1368. package/icons/sortamountdown/index.d.ts +5 -0
  1369. package/icons/sortamountdown/public_api.d.ts +1 -0
  1370. package/icons/sortamountdown/sortamountdown.d.ts +6 -0
  1371. package/icons/sortamountupalt/index.d.ts +5 -0
  1372. package/icons/sortamountupalt/public_api.d.ts +1 -0
  1373. package/icons/sortamountupalt/sortamountupalt.d.ts +6 -0
  1374. package/icons/spinner/index.d.ts +5 -0
  1375. package/icons/spinner/public_api.d.ts +1 -0
  1376. package/icons/spinner/spinner.d.ts +6 -0
  1377. package/icons/star/index.d.ts +5 -0
  1378. package/icons/star/public_api.d.ts +1 -0
  1379. package/icons/star/star.d.ts +6 -0
  1380. package/icons/starfill/index.d.ts +5 -0
  1381. package/icons/starfill/public_api.d.ts +1 -0
  1382. package/icons/starfill/starfill.d.ts +6 -0
  1383. package/icons/thlarge/index.d.ts +5 -0
  1384. package/icons/thlarge/public_api.d.ts +1 -0
  1385. package/icons/thlarge/thlarge.d.ts +6 -0
  1386. package/icons/times/index.d.ts +5 -0
  1387. package/icons/times/public_api.d.ts +1 -0
  1388. package/icons/times/times.d.ts +6 -0
  1389. package/icons/timescircle/index.d.ts +5 -0
  1390. package/icons/timescircle/public_api.d.ts +1 -0
  1391. package/icons/timescircle/timescircle.d.ts +6 -0
  1392. package/icons/trash/index.d.ts +5 -0
  1393. package/icons/trash/public_api.d.ts +1 -0
  1394. package/icons/trash/trash.d.ts +6 -0
  1395. package/icons/undo/index.d.ts +5 -0
  1396. package/icons/undo/public_api.d.ts +1 -0
  1397. package/icons/undo/undo.d.ts +6 -0
  1398. package/icons/upload/index.d.ts +5 -0
  1399. package/icons/upload/public_api.d.ts +1 -0
  1400. package/icons/upload/upload.d.ts +6 -0
  1401. package/icons/windowmaximize/index.d.ts +5 -0
  1402. package/icons/windowmaximize/public_api.d.ts +1 -0
  1403. package/icons/windowmaximize/windowmaximize.d.ts +6 -0
  1404. package/icons/windowminimize/index.d.ts +5 -0
  1405. package/icons/windowminimize/public_api.d.ts +1 -0
  1406. package/icons/windowminimize/windowminimize.d.ts +6 -0
  1407. package/image/image.d.ts +81 -0
  1408. package/image/index.d.ts +5 -0
  1409. package/image/public_api.d.ts +1 -0
  1410. package/index.d.ts +5 -0
  1411. package/inplace/index.d.ts +5 -0
  1412. package/inplace/inplace.d.ts +45 -0
  1413. package/inplace/public_api.d.ts +1 -0
  1414. package/inputmask/index.d.ts +5 -0
  1415. package/inputmask/inputmask.d.ts +108 -0
  1416. package/inputmask/public_api.d.ts +1 -0
  1417. package/inputnumber/index.d.ts +5 -0
  1418. package/inputnumber/inputnumber.d.ts +177 -0
  1419. package/inputnumber/public_api.d.ts +1 -0
  1420. package/inputswitch/index.d.ts +5 -0
  1421. package/inputswitch/inputswitch.d.ts +47 -0
  1422. package/inputswitch/public_api.d.ts +1 -0
  1423. package/inputtext/index.d.ts +5 -0
  1424. package/inputtext/inputtext.d.ts +22 -0
  1425. package/inputtext/public_api.d.ts +1 -0
  1426. package/inputtextarea/index.d.ts +5 -0
  1427. package/inputtextarea/inputtextarea.d.ts +34 -0
  1428. package/inputtextarea/public_api.d.ts +1 -0
  1429. package/keyfilter/index.d.ts +5 -0
  1430. package/keyfilter/keyfilter.d.ts +39 -0
  1431. package/keyfilter/public_api.d.ts +1 -0
  1432. package/knob/index.d.ts +5 -0
  1433. package/knob/knob.d.ts +81 -0
  1434. package/knob/public_api.d.ts +1 -0
  1435. package/listbox/index.d.ts +5 -0
  1436. package/listbox/listbox.d.ts +125 -0
  1437. package/listbox/public_api.d.ts +1 -0
  1438. package/megamenu/index.d.ts +5 -0
  1439. package/megamenu/megamenu.d.ts +42 -0
  1440. package/megamenu/public_api.d.ts +1 -0
  1441. package/menu/index.d.ts +5 -0
  1442. package/menu/menu.d.ts +77 -0
  1443. package/menu/public_api.d.ts +1 -0
  1444. package/menubar/index.d.ts +5 -0
  1445. package/menubar/menubar.d.ts +97 -0
  1446. package/menubar/public_api.d.ts +1 -0
  1447. package/message/index.d.ts +5 -0
  1448. package/message/message.d.ts +21 -0
  1449. package/message/public_api.d.ts +1 -0
  1450. package/messages/index.d.ts +5 -0
  1451. package/messages/messages.d.ts +49 -0
  1452. package/messages/public_api.d.ts +1 -0
  1453. package/multiselect/index.d.ts +5 -0
  1454. package/multiselect/multiselect.d.ts +232 -0
  1455. package/multiselect/public_api.d.ts +1 -0
  1456. package/orderlist/index.d.ts +5 -0
  1457. package/orderlist/orderlist.d.ts +105 -0
  1458. package/orderlist/public_api.d.ts +1 -0
  1459. package/organizationchart/index.d.ts +5 -0
  1460. package/organizationchart/organizationchart.d.ts +63 -0
  1461. package/organizationchart/public_api.d.ts +1 -0
  1462. package/overlay/index.d.ts +5 -0
  1463. package/overlay/overlay.d.ts +118 -0
  1464. package/overlay/public_api.d.ts +1 -0
  1465. package/overlaypanel/index.d.ts +5 -0
  1466. package/overlaypanel/overlaypanel.d.ts +80 -0
  1467. package/overlaypanel/public_api.d.ts +1 -0
  1468. package/package.json +1267 -0
  1469. package/paginator/index.d.ts +5 -0
  1470. package/paginator/paginator.d.ts +79 -0
  1471. package/paginator/public_api.d.ts +1 -0
  1472. package/panel/index.d.ts +5 -0
  1473. package/panel/panel.d.ts +52 -0
  1474. package/panel/public_api.d.ts +1 -0
  1475. package/panelmenu/index.d.ts +5 -0
  1476. package/panelmenu/panelmenu.d.ts +66 -0
  1477. package/panelmenu/public_api.d.ts +1 -0
  1478. package/password/index.d.ts +5 -0
  1479. package/password/password.d.ts +168 -0
  1480. package/password/public_api.d.ts +1 -0
  1481. package/picklist/index.d.ts +5 -0
  1482. package/picklist/picklist.d.ts +183 -0
  1483. package/picklist/public_api.d.ts +1 -0
  1484. package/progressbar/index.d.ts +5 -0
  1485. package/progressbar/progressbar.d.ts +18 -0
  1486. package/progressbar/public_api.d.ts +1 -0
  1487. package/progressspinner/index.d.ts +5 -0
  1488. package/progressspinner/progressspinner.d.ts +16 -0
  1489. package/progressspinner/public_api.d.ts +1 -0
  1490. package/public_api.d.ts +2 -0
  1491. package/radiobutton/index.d.ts +5 -0
  1492. package/radiobutton/public_api.d.ts +1 -0
  1493. package/radiobutton/radiobutton.d.ts +62 -0
  1494. package/rating/index.d.ts +5 -0
  1495. package/rating/public_api.d.ts +1 -0
  1496. package/rating/rating.d.ts +52 -0
  1497. package/resources/components/accordion/accordion.css +33 -0
  1498. package/resources/components/autocomplete/autocomplete.css +100 -0
  1499. package/resources/components/avatar/avatar.css +26 -0
  1500. package/resources/components/avatargroup/avatargroup.css +8 -0
  1501. package/resources/components/badge/badge.css +32 -0
  1502. package/resources/components/blockui/blockui.css +24 -0
  1503. package/resources/components/breadcrumb/breadcrumb.css +25 -0
  1504. package/resources/components/button/button.css +69 -0
  1505. package/resources/components/calendar/calendar.css +171 -0
  1506. package/resources/components/card/card.css +3 -0
  1507. package/resources/components/carousel/carousel.css +69 -0
  1508. package/resources/components/cascadeselect/cascadeselect.css +96 -0
  1509. package/resources/components/checkbox/checkbox.css +28 -0
  1510. package/resources/components/chip/chip.css +24 -0
  1511. package/resources/components/chips/chips.css +66 -0
  1512. package/resources/components/colorpicker/colorpicker-images.css +7 -0
  1513. package/resources/components/colorpicker/colorpicker.css +81 -0
  1514. package/resources/components/colorpicker/images/color.png +0 -0
  1515. package/resources/components/colorpicker/images/hue.png +0 -0
  1516. package/resources/components/common/common.css +167 -0
  1517. package/resources/components/confirmpopup/confirmpopup.css +49 -0
  1518. package/resources/components/contextmenu/contextmenu.css +46 -0
  1519. package/resources/components/dataview/dataview.css +11 -0
  1520. package/resources/components/dialog/dialog.css +138 -0
  1521. package/resources/components/divider/divider.css +84 -0
  1522. package/resources/components/dock/dock.css +105 -0
  1523. package/resources/components/dropdown/dropdown.css +78 -0
  1524. package/resources/components/editor/editor.css +4 -0
  1525. package/resources/components/fieldset/fieldset.css +25 -0
  1526. package/resources/components/fileupload/fileupload.css +45 -0
  1527. package/resources/components/galleria/galleria.css +274 -0
  1528. package/resources/components/image/image.css +64 -0
  1529. package/resources/components/inplace/inplace.css +17 -0
  1530. package/resources/components/inputmask/inputmask.css +10 -0
  1531. package/resources/components/inputnumber/inputnumber.css +113 -0
  1532. package/resources/components/inputswitch/inputswitch.css +20 -0
  1533. package/resources/components/inputtext/inputtext.css +105 -0
  1534. package/resources/components/inputtextarea/inputtextarea.css +8 -0
  1535. package/resources/components/knob/knob.css +18 -0
  1536. package/resources/components/listbox/listbox.css +38 -0
  1537. package/resources/components/megamenu/megamenu.css +107 -0
  1538. package/resources/components/menu/menu.css +28 -0
  1539. package/resources/components/menubar/menubar.css +75 -0
  1540. package/resources/components/message/message.css +15 -0
  1541. package/resources/components/messages/messages.css +20 -0
  1542. package/resources/components/multiselect/multiselect.css +108 -0
  1543. package/resources/components/orderlist/orderlist.css +76 -0
  1544. package/resources/components/organizationchart/organizationchart.css +60 -0
  1545. package/resources/components/overlay/overlay.css +78 -0
  1546. package/resources/components/overlaypanel/overlaypanel.css +58 -0
  1547. package/resources/components/paginator/paginator.css +35 -0
  1548. package/resources/components/panel/panel.css +27 -0
  1549. package/resources/components/panelmenu/panelmenu.css +40 -0
  1550. package/resources/components/password/images/password-meter.png +0 -0
  1551. package/resources/components/password/password.css +44 -0
  1552. package/resources/components/picklist/picklist.css +58 -0
  1553. package/resources/components/progressbar/progressbar.css +96 -0
  1554. package/resources/components/progressspinner/progressspinner.css +72 -0
  1555. package/resources/components/radiobutton/radiobutton.css +36 -0
  1556. package/resources/components/rating/rating.css +11 -0
  1557. package/resources/components/ripple/ripple.css +27 -0
  1558. package/resources/components/scroller/scroller.css +56 -0
  1559. package/resources/components/scrollpanel/scrollpanel.css +48 -0
  1560. package/resources/components/scrolltop/scrolltop.css +16 -0
  1561. package/resources/components/sidebar/sidebar.css +104 -0
  1562. package/resources/components/skeleton/skeleton.css +33 -0
  1563. package/resources/components/slidemenu/slidemenu.css +99 -0
  1564. package/resources/components/slider/slider.css +39 -0
  1565. package/resources/components/speeddial/speeddial.css +110 -0
  1566. package/resources/components/spinner/spinner.css +61 -0
  1567. package/resources/components/splitbutton/splitbutton.css +31 -0
  1568. package/resources/components/splitter/splitter.css +62 -0
  1569. package/resources/components/steps/steps.css +47 -0
  1570. package/resources/components/table/table.css +242 -0
  1571. package/resources/components/tabmenu/tabmenu.css +78 -0
  1572. package/resources/components/tabview/tabview.css +73 -0
  1573. package/resources/components/tag/tag.css +15 -0
  1574. package/resources/components/terminal/terminal.css +22 -0
  1575. package/resources/components/tieredmenu/tieredmenu.css +49 -0
  1576. package/resources/components/timeline/timeline.css +110 -0
  1577. package/resources/components/toast/toast.css +68 -0
  1578. package/resources/components/toolbar/toolbar.css +17 -0
  1579. package/resources/components/tooltip/tooltip.css +61 -0
  1580. package/resources/components/tree/images/line.gif +0 -0
  1581. package/resources/components/tree/tree.css +156 -0
  1582. package/resources/components/treeselect/treeselect.css +95 -0
  1583. package/resources/components/treetable/treetable.css +203 -0
  1584. package/resources/images/color.png +0 -0
  1585. package/resources/images/hue.png +0 -0
  1586. package/resources/images/line.gif +0 -0
  1587. package/resources/images/password-meter.png +0 -0
  1588. package/resources/parallel-ui-angular.css +588 -0
  1589. package/resources/parallel-ui-angular.min.css +1 -0
  1590. package/resources/themes/arya-blue/theme.css +7757 -0
  1591. package/resources/themes/arya-green/theme.css +7757 -0
  1592. package/resources/themes/arya-orange/theme.css +7757 -0
  1593. package/resources/themes/arya-purple/theme.css +7757 -0
  1594. package/resources/themes/bootstrap4-dark-blue/theme.css +7763 -0
  1595. package/resources/themes/bootstrap4-dark-purple/theme.css +7763 -0
  1596. package/resources/themes/bootstrap4-light-blue/theme.css +7763 -0
  1597. package/resources/themes/bootstrap4-light-purple/theme.css +7763 -0
  1598. package/resources/themes/fluent-light/theme.css +7905 -0
  1599. package/resources/themes/lara-dark-blue/theme.css +7737 -0
  1600. package/resources/themes/lara-dark-indigo/theme.css +7737 -0
  1601. package/resources/themes/lara-dark-purple/theme.css +7737 -0
  1602. package/resources/themes/lara-dark-teal/theme.css +7737 -0
  1603. package/resources/themes/lara-light-blue/theme.css +7737 -0
  1604. package/resources/themes/lara-light-indigo/theme.css +7737 -0
  1605. package/resources/themes/lara-light-purple/theme.css +7737 -0
  1606. package/resources/themes/lara-light-teal/theme.css +7737 -0
  1607. package/resources/themes/luna-amber/theme.css +7686 -0
  1608. package/resources/themes/luna-blue/theme.css +7686 -0
  1609. package/resources/themes/luna-green/theme.css +7686 -0
  1610. package/resources/themes/luna-pink/theme.css +7686 -0
  1611. package/resources/themes/md-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff +0 -0
  1612. package/resources/themes/md-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff2 +0 -0
  1613. package/resources/themes/md-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff +0 -0
  1614. package/resources/themes/md-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff2 +0 -0
  1615. package/resources/themes/md-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff +0 -0
  1616. package/resources/themes/md-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff2 +0 -0
  1617. package/resources/themes/md-dark-deeppurple/theme.css +9765 -0
  1618. package/resources/themes/md-dark-indigo/fonts/roboto-v20-latin-ext_latin-500.woff +0 -0
  1619. package/resources/themes/md-dark-indigo/fonts/roboto-v20-latin-ext_latin-500.woff2 +0 -0
  1620. package/resources/themes/md-dark-indigo/fonts/roboto-v20-latin-ext_latin-700.woff +0 -0
  1621. package/resources/themes/md-dark-indigo/fonts/roboto-v20-latin-ext_latin-700.woff2 +0 -0
  1622. package/resources/themes/md-dark-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff +0 -0
  1623. package/resources/themes/md-dark-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff2 +0 -0
  1624. package/resources/themes/md-dark-indigo/theme.css +9765 -0
  1625. package/resources/themes/md-light-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff +0 -0
  1626. package/resources/themes/md-light-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff2 +0 -0
  1627. package/resources/themes/md-light-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff +0 -0
  1628. package/resources/themes/md-light-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff2 +0 -0
  1629. package/resources/themes/md-light-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff +0 -0
  1630. package/resources/themes/md-light-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff2 +0 -0
  1631. package/resources/themes/md-light-deeppurple/theme.css +9765 -0
  1632. package/resources/themes/md-light-indigo/fonts/roboto-v20-latin-ext_latin-500.woff +0 -0
  1633. package/resources/themes/md-light-indigo/fonts/roboto-v20-latin-ext_latin-500.woff2 +0 -0
  1634. package/resources/themes/md-light-indigo/fonts/roboto-v20-latin-ext_latin-700.woff +0 -0
  1635. package/resources/themes/md-light-indigo/fonts/roboto-v20-latin-ext_latin-700.woff2 +0 -0
  1636. package/resources/themes/md-light-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff +0 -0
  1637. package/resources/themes/md-light-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff2 +0 -0
  1638. package/resources/themes/md-light-indigo/theme.css +9765 -0
  1639. package/resources/themes/mdc-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff +0 -0
  1640. package/resources/themes/mdc-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff2 +0 -0
  1641. package/resources/themes/mdc-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff +0 -0
  1642. package/resources/themes/mdc-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff2 +0 -0
  1643. package/resources/themes/mdc-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff +0 -0
  1644. package/resources/themes/mdc-dark-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff2 +0 -0
  1645. package/resources/themes/mdc-dark-deeppurple/theme.css +9765 -0
  1646. package/resources/themes/mdc-dark-indigo/fonts/roboto-v20-latin-ext_latin-500.woff +0 -0
  1647. package/resources/themes/mdc-dark-indigo/fonts/roboto-v20-latin-ext_latin-500.woff2 +0 -0
  1648. package/resources/themes/mdc-dark-indigo/fonts/roboto-v20-latin-ext_latin-700.woff +0 -0
  1649. package/resources/themes/mdc-dark-indigo/fonts/roboto-v20-latin-ext_latin-700.woff2 +0 -0
  1650. package/resources/themes/mdc-dark-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff +0 -0
  1651. package/resources/themes/mdc-dark-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff2 +0 -0
  1652. package/resources/themes/mdc-dark-indigo/theme.css +9765 -0
  1653. package/resources/themes/mdc-light-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff +0 -0
  1654. package/resources/themes/mdc-light-deeppurple/fonts/roboto-v20-latin-ext_latin-500.woff2 +0 -0
  1655. package/resources/themes/mdc-light-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff +0 -0
  1656. package/resources/themes/mdc-light-deeppurple/fonts/roboto-v20-latin-ext_latin-700.woff2 +0 -0
  1657. package/resources/themes/mdc-light-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff +0 -0
  1658. package/resources/themes/mdc-light-deeppurple/fonts/roboto-v20-latin-ext_latin-regular.woff2 +0 -0
  1659. package/resources/themes/mdc-light-deeppurple/theme.css +9765 -0
  1660. package/resources/themes/mdc-light-indigo/fonts/roboto-v20-latin-ext_latin-500.woff +0 -0
  1661. package/resources/themes/mdc-light-indigo/fonts/roboto-v20-latin-ext_latin-500.woff2 +0 -0
  1662. package/resources/themes/mdc-light-indigo/fonts/roboto-v20-latin-ext_latin-700.woff +0 -0
  1663. package/resources/themes/mdc-light-indigo/fonts/roboto-v20-latin-ext_latin-700.woff2 +0 -0
  1664. package/resources/themes/mdc-light-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff +0 -0
  1665. package/resources/themes/mdc-light-indigo/fonts/roboto-v20-latin-ext_latin-regular.woff2 +0 -0
  1666. package/resources/themes/mdc-light-indigo/theme.css +9765 -0
  1667. package/resources/themes/mira/fonts/Inter-Bold.woff +0 -0
  1668. package/resources/themes/mira/fonts/Inter-Bold.woff2 +0 -0
  1669. package/resources/themes/mira/fonts/Inter-Medium.woff +0 -0
  1670. package/resources/themes/mira/fonts/Inter-Medium.woff2 +0 -0
  1671. package/resources/themes/mira/fonts/Inter-Regular.woff +0 -0
  1672. package/resources/themes/mira/fonts/Inter-Regular.woff2 +0 -0
  1673. package/resources/themes/mira/fonts/Inter-SemiBold.woff +0 -0
  1674. package/resources/themes/mira/fonts/Inter-SemiBold.woff2 +0 -0
  1675. package/resources/themes/mira/theme.css +7990 -0
  1676. package/resources/themes/nano/theme.css +7736 -0
  1677. package/resources/themes/nova/theme.css +7702 -0
  1678. package/resources/themes/nova-accent/theme.css +7714 -0
  1679. package/resources/themes/nova-alt/theme.css +7714 -0
  1680. package/resources/themes/rhea/theme.css +7690 -0
  1681. package/resources/themes/saga-blue/theme.css +7753 -0
  1682. package/resources/themes/saga-green/theme.css +7753 -0
  1683. package/resources/themes/saga-orange/theme.css +7753 -0
  1684. package/resources/themes/saga-purple/theme.css +7753 -0
  1685. package/resources/themes/soho-dark/fonts/lato-v17-latin-ext_latin-300.woff +0 -0
  1686. package/resources/themes/soho-dark/fonts/lato-v17-latin-ext_latin-300.woff2 +0 -0
  1687. package/resources/themes/soho-dark/fonts/lato-v17-latin-ext_latin-700.woff +0 -0
  1688. package/resources/themes/soho-dark/fonts/lato-v17-latin-ext_latin-700.woff2 +0 -0
  1689. package/resources/themes/soho-dark/fonts/lato-v17-latin-ext_latin-regular.woff +0 -0
  1690. package/resources/themes/soho-dark/fonts/lato-v17-latin-ext_latin-regular.woff2 +0 -0
  1691. package/resources/themes/soho-dark/theme.css +7719 -0
  1692. package/resources/themes/soho-light/fonts/lato-v17-latin-ext_latin-300.woff +0 -0
  1693. package/resources/themes/soho-light/fonts/lato-v17-latin-ext_latin-300.woff2 +0 -0
  1694. package/resources/themes/soho-light/fonts/lato-v17-latin-ext_latin-700.woff +0 -0
  1695. package/resources/themes/soho-light/fonts/lato-v17-latin-ext_latin-700.woff2 +0 -0
  1696. package/resources/themes/soho-light/fonts/lato-v17-latin-ext_latin-regular.woff +0 -0
  1697. package/resources/themes/soho-light/fonts/lato-v17-latin-ext_latin-regular.woff2 +0 -0
  1698. package/resources/themes/soho-light/theme.css +7785 -0
  1699. package/resources/themes/tailwind-light/fonts/Inter-Bold.woff +0 -0
  1700. package/resources/themes/tailwind-light/fonts/Inter-Bold.woff2 +0 -0
  1701. package/resources/themes/tailwind-light/fonts/Inter-Light.woff +0 -0
  1702. package/resources/themes/tailwind-light/fonts/Inter-Light.woff2 +0 -0
  1703. package/resources/themes/tailwind-light/fonts/Inter-Medium.woff +0 -0
  1704. package/resources/themes/tailwind-light/fonts/Inter-Medium.woff2 +0 -0
  1705. package/resources/themes/tailwind-light/fonts/Inter-Regular.woff +0 -0
  1706. package/resources/themes/tailwind-light/fonts/Inter-Regular.woff2 +0 -0
  1707. package/resources/themes/tailwind-light/fonts/Inter-SemiBold.woff +0 -0
  1708. package/resources/themes/tailwind-light/fonts/Inter-SemiBold.woff2 +0 -0
  1709. package/resources/themes/tailwind-light/theme.css +7867 -0
  1710. package/resources/themes/vela-blue/theme.css +7757 -0
  1711. package/resources/themes/vela-green/theme.css +7757 -0
  1712. package/resources/themes/vela-orange/theme.css +7757 -0
  1713. package/resources/themes/vela-purple/theme.css +7757 -0
  1714. package/resources/themes/viva-dark/fonts/poppins-v15-latin-ext_latin-300.woff +0 -0
  1715. package/resources/themes/viva-dark/fonts/poppins-v15-latin-ext_latin-300.woff2 +0 -0
  1716. package/resources/themes/viva-dark/fonts/poppins-v15-latin-ext_latin-600.woff +0 -0
  1717. package/resources/themes/viva-dark/fonts/poppins-v15-latin-ext_latin-600.woff2 +0 -0
  1718. package/resources/themes/viva-dark/fonts/poppins-v15-latin-ext_latin-700.woff +0 -0
  1719. package/resources/themes/viva-dark/fonts/poppins-v15-latin-ext_latin-700.woff2 +0 -0
  1720. package/resources/themes/viva-dark/fonts/poppins-v15-latin-ext_latin-regular.woff +0 -0
  1721. package/resources/themes/viva-dark/fonts/poppins-v15-latin-ext_latin-regular.woff2 +0 -0
  1722. package/resources/themes/viva-dark/theme.css +7910 -0
  1723. package/resources/themes/viva-light/fonts/poppins-v15-latin-ext_latin-300.woff +0 -0
  1724. package/resources/themes/viva-light/fonts/poppins-v15-latin-ext_latin-300.woff2 +0 -0
  1725. package/resources/themes/viva-light/fonts/poppins-v15-latin-ext_latin-600.woff +0 -0
  1726. package/resources/themes/viva-light/fonts/poppins-v15-latin-ext_latin-600.woff2 +0 -0
  1727. package/resources/themes/viva-light/fonts/poppins-v15-latin-ext_latin-700.woff +0 -0
  1728. package/resources/themes/viva-light/fonts/poppins-v15-latin-ext_latin-700.woff2 +0 -0
  1729. package/resources/themes/viva-light/fonts/poppins-v15-latin-ext_latin-regular.woff +0 -0
  1730. package/resources/themes/viva-light/fonts/poppins-v15-latin-ext_latin-regular.woff2 +0 -0
  1731. package/resources/themes/viva-light/theme.css +7910 -0
  1732. package/ripple/index.d.ts +5 -0
  1733. package/ripple/public_api.d.ts +1 -0
  1734. package/ripple/ripple.d.ts +31 -0
  1735. package/scroller/index.d.ts +5 -0
  1736. package/scroller/public_api.d.ts +1 -0
  1737. package/scroller/scroller.d.ts +251 -0
  1738. package/scrollpanel/index.d.ts +5 -0
  1739. package/scrollpanel/public_api.d.ts +1 -0
  1740. package/scrollpanel/scrollpanel.d.ts +59 -0
  1741. package/scrolltop/index.d.ts +5 -0
  1742. package/scrolltop/public_api.d.ts +1 -0
  1743. package/scrolltop/scrolltop.d.ts +53 -0
  1744. package/selectbutton/index.d.ts +5 -0
  1745. package/selectbutton/public_api.d.ts +1 -0
  1746. package/selectbutton/selectbutton.d.ts +45 -0
  1747. package/sidebar/index.d.ts +5 -0
  1748. package/sidebar/public_api.d.ts +1 -0
  1749. package/sidebar/sidebar.d.ts +75 -0
  1750. package/skeleton/index.d.ts +5 -0
  1751. package/skeleton/public_api.d.ts +1 -0
  1752. package/skeleton/skeleton.d.ts +25 -0
  1753. package/slidemenu/index.d.ts +5 -0
  1754. package/slidemenu/public_api.d.ts +1 -0
  1755. package/slidemenu/slidemenu.d.ts +112 -0
  1756. package/slider/index.d.ts +5 -0
  1757. package/slider/public_api.d.ts +1 -0
  1758. package/slider/slider.d.ts +92 -0
  1759. package/speeddial/index.d.ts +5 -0
  1760. package/speeddial/public_api.d.ts +1 -0
  1761. package/speeddial/speeddial.d.ts +137 -0
  1762. package/spinner/index.d.ts +5 -0
  1763. package/spinner/public_api.d.ts +1 -0
  1764. package/spinner/spinner.d.ts +80 -0
  1765. package/splitbutton/index.d.ts +5 -0
  1766. package/splitbutton/public_api.d.ts +1 -0
  1767. package/splitbutton/splitbutton.d.ts +45 -0
  1768. package/splitter/index.d.ts +5 -0
  1769. package/splitter/public_api.d.ts +1 -0
  1770. package/splitter/splitter.d.ts +88 -0
  1771. package/steps/index.d.ts +5 -0
  1772. package/steps/public_api.d.ts +1 -0
  1773. package/steps/steps.d.ts +33 -0
  1774. package/styleclass/index.d.ts +5 -0
  1775. package/styleclass/public_api.d.ts +1 -0
  1776. package/styleclass/styleclass.d.ts +45 -0
  1777. package/table/index.d.ts +5 -0
  1778. package/table/public_api.d.ts +1 -0
  1779. package/table/table.d.ts +890 -0
  1780. package/tabmenu/index.d.ts +5 -0
  1781. package/tabmenu/public_api.d.ts +1 -0
  1782. package/tabmenu/tabmenu.d.ts +61 -0
  1783. package/tabview/index.d.ts +5 -0
  1784. package/tabview/public_api.d.ts +1 -0
  1785. package/tabview/tabview.d.ts +110 -0
  1786. package/tag/index.d.ts +5 -0
  1787. package/tag/public_api.d.ts +1 -0
  1788. package/tag/tag.d.ts +30 -0
  1789. package/terminal/index.d.ts +5 -0
  1790. package/terminal/public_api.d.ts +2 -0
  1791. package/terminal/terminal.d.ts +34 -0
  1792. package/terminal/terminalservice.d.ts +11 -0
  1793. package/tieredmenu/index.d.ts +5 -0
  1794. package/tieredmenu/public_api.d.ts +1 -0
  1795. package/tieredmenu/tieredmenu.d.ts +109 -0
  1796. package/timeline/index.d.ts +5 -0
  1797. package/timeline/public_api.d.ts +1 -0
  1798. package/timeline/timeline.d.ts +27 -0
  1799. package/toast/index.d.ts +5 -0
  1800. package/toast/public_api.d.ts +1 -0
  1801. package/toast/toast.d.ts +87 -0
  1802. package/togglebutton/index.d.ts +5 -0
  1803. package/togglebutton/public_api.d.ts +1 -0
  1804. package/togglebutton/togglebutton.d.ts +40 -0
  1805. package/toolbar/index.d.ts +5 -0
  1806. package/toolbar/public_api.d.ts +1 -0
  1807. package/toolbar/toolbar.d.ts +23 -0
  1808. package/tooltip/index.d.ts +5 -0
  1809. package/tooltip/public_api.d.ts +1 -0
  1810. package/tooltip/tooltip.d.ts +115 -0
  1811. package/tree/index.d.ts +5 -0
  1812. package/tree/public_api.d.ts +1 -0
  1813. package/tree/tree.d.ts +207 -0
  1814. package/treeselect/index.d.ts +5 -0
  1815. package/treeselect/public_api.d.ts +1 -0
  1816. package/treeselect/treeselect.d.ts +149 -0
  1817. package/treetable/index.d.ts +5 -0
  1818. package/treetable/public_api.d.ts +1 -0
  1819. package/treetable/treetable.d.ts +542 -0
  1820. package/tristatecheckbox/index.d.ts +5 -0
  1821. package/tristatecheckbox/public_api.d.ts +1 -0
  1822. package/tristatecheckbox/tristatecheckbox.d.ts +49 -0
  1823. package/utils/index.d.ts +5 -0
  1824. package/utils/objectutils.d.ts +17 -0
  1825. package/utils/public_api.d.ts +4 -0
  1826. package/utils/uniquecomponentid.d.ts +2 -0
  1827. package/utils/zindexutils.d.ts +7 -0
  1828. package/virtualscroller/index.d.ts +5 -0
  1829. package/virtualscroller/public_api.d.ts +1 -0
  1830. package/virtualscroller/virtualscroller.d.ts +41 -0
@@ -0,0 +1,3123 @@
1
+ import { animate, state, style, transition, trigger } from '@angular/animations';
2
+ import { CommonModule, DOCUMENT } from '@angular/common';
3
+ import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, forwardRef, Inject, Input, NgModule, Output, ViewChild, ViewEncapsulation } from '@angular/core';
4
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
+ import { QiusTemplate, SharedModule, TranslationKeys } from '@qius.solutions/parallel-ui-angular/api';
6
+ import { ButtonModule } from '@qius.solutions/parallel-ui-angular/button';
7
+ import { ConnectedOverlayScrollHandler, DomHandler } from '@qius.solutions/parallel-ui-angular/dom';
8
+ import { RippleModule } from '@qius.solutions/parallel-ui-angular/ripple';
9
+ import { ObjectUtils, UniqueComponentId, ZIndexUtils } from '@qius.solutions/parallel-ui-angular/utils';
10
+ import { ChevronLeftIcon } from '@qius.solutions/parallel-ui-angular/icons/chevronleft';
11
+ import { ChevronRightIcon } from '@qius.solutions/parallel-ui-angular/icons/chevronright';
12
+ import { ChevronUpIcon } from '@qius.solutions/parallel-ui-angular/icons/chevronup';
13
+ import { ChevronDownIcon } from '@qius.solutions/parallel-ui-angular/icons/chevrondown';
14
+ import { TimesIcon } from '@qius.solutions/parallel-ui-angular/icons/times';
15
+ import { CalendarIcon } from '@qius.solutions/parallel-ui-angular/icons/calendar';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "@qius.solutions/parallel-ui-angular/api";
18
+ import * as i2 from "@angular/common";
19
+ import * as i3 from "@qius.solutions/parallel-ui-angular/button";
20
+ import * as i4 from "@qius.solutions/parallel-ui-angular/ripple";
21
+ export const CALENDAR_VALUE_ACCESSOR = {
22
+ provide: NG_VALUE_ACCESSOR,
23
+ useExisting: forwardRef(() => Calendar),
24
+ multi: true
25
+ };
26
+ export class Calendar {
27
+ constructor(document, el, renderer, cd, zone, config, overlayService) {
28
+ this.document = document;
29
+ this.el = el;
30
+ this.renderer = renderer;
31
+ this.cd = cd;
32
+ this.zone = zone;
33
+ this.config = config;
34
+ this.overlayService = overlayService;
35
+ this.multipleSeparator = ',';
36
+ this.rangeSeparator = '-';
37
+ this.inline = false;
38
+ this.showOtherMonths = true;
39
+ this.shortYearCutoff = '+10';
40
+ this.hourFormat = '24';
41
+ this.stepHour = 1;
42
+ this.stepMinute = 1;
43
+ this.stepSecond = 1;
44
+ this.showSeconds = false;
45
+ this.showOnFocus = true;
46
+ this.showWeek = false;
47
+ this.showClear = false;
48
+ this.dataType = 'date';
49
+ this.selectionMode = 'single';
50
+ this.todayButtonStyleClass = 'p-button-text';
51
+ this.clearButtonStyleClass = 'p-button-text';
52
+ this.autoZIndex = true;
53
+ this.baseZIndex = 0;
54
+ this.keepInvalid = false;
55
+ this.hideOnDateTimeSelect = true;
56
+ this.timeSeparator = ':';
57
+ this.focusTrap = true;
58
+ this.showTransitionOptions = '.12s cubic-bezier(0, 0, 0.2, 1)';
59
+ this.hideTransitionOptions = '.1s linear';
60
+ this.onFocus = new EventEmitter();
61
+ this.onBlur = new EventEmitter();
62
+ this.onClose = new EventEmitter();
63
+ this.onSelect = new EventEmitter();
64
+ this.onClear = new EventEmitter();
65
+ this.onInput = new EventEmitter();
66
+ this.onTodayClick = new EventEmitter();
67
+ this.onClearClick = new EventEmitter();
68
+ this.onMonthChange = new EventEmitter();
69
+ this.onYearChange = new EventEmitter();
70
+ this.onClickOutside = new EventEmitter();
71
+ this.onShow = new EventEmitter();
72
+ this.onModelChange = () => { };
73
+ this.onModelTouched = () => { };
74
+ this.inputFieldValue = null;
75
+ this.navigationState = null;
76
+ this._numberOfMonths = 1;
77
+ this._view = 'date';
78
+ this.convertTo24Hour = function (hours, pm) {
79
+ if (this.hourFormat == '12') {
80
+ if (hours === 12) {
81
+ return pm ? 12 : 0;
82
+ }
83
+ else {
84
+ return pm ? hours + 12 : hours;
85
+ }
86
+ }
87
+ return hours;
88
+ };
89
+ this.window = this.document.defaultView;
90
+ }
91
+ set content(content) {
92
+ this.contentViewChild = content;
93
+ if (this.contentViewChild) {
94
+ if (this.isMonthNavigate) {
95
+ Promise.resolve(null).then(() => this.updateFocus());
96
+ this.isMonthNavigate = false;
97
+ }
98
+ else {
99
+ if (!this.focus) {
100
+ this.initFocusableCell();
101
+ }
102
+ }
103
+ }
104
+ }
105
+ get view() {
106
+ return this._view;
107
+ }
108
+ set view(view) {
109
+ this._view = view;
110
+ this.currentView = this._view;
111
+ }
112
+ get defaultDate() {
113
+ return this._defaultDate;
114
+ }
115
+ set defaultDate(defaultDate) {
116
+ this._defaultDate = defaultDate;
117
+ if (this.initialized) {
118
+ const date = defaultDate || new Date();
119
+ this.currentMonth = date.getMonth();
120
+ this.currentYear = date.getFullYear();
121
+ this.initTime(date);
122
+ this.createMonths(this.currentMonth, this.currentYear);
123
+ }
124
+ }
125
+ get minDate() {
126
+ return this._minDate;
127
+ }
128
+ set minDate(date) {
129
+ this._minDate = date;
130
+ if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {
131
+ this.createMonths(this.currentMonth, this.currentYear);
132
+ }
133
+ }
134
+ get maxDate() {
135
+ return this._maxDate;
136
+ }
137
+ set maxDate(date) {
138
+ this._maxDate = date;
139
+ if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {
140
+ this.createMonths(this.currentMonth, this.currentYear);
141
+ }
142
+ }
143
+ get disabledDates() {
144
+ return this._disabledDates;
145
+ }
146
+ set disabledDates(disabledDates) {
147
+ this._disabledDates = disabledDates;
148
+ if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {
149
+ this.createMonths(this.currentMonth, this.currentYear);
150
+ }
151
+ }
152
+ get disabledDays() {
153
+ return this._disabledDays;
154
+ }
155
+ set disabledDays(disabledDays) {
156
+ this._disabledDays = disabledDays;
157
+ if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {
158
+ this.createMonths(this.currentMonth, this.currentYear);
159
+ }
160
+ }
161
+ get yearRange() {
162
+ return this._yearRange;
163
+ }
164
+ set yearRange(yearRange) {
165
+ this._yearRange = yearRange;
166
+ if (yearRange) {
167
+ const years = yearRange.split(':');
168
+ const yearStart = parseInt(years[0]);
169
+ const yearEnd = parseInt(years[1]);
170
+ this.populateYearOptions(yearStart, yearEnd);
171
+ }
172
+ }
173
+ get showTime() {
174
+ return this._showTime;
175
+ }
176
+ set showTime(showTime) {
177
+ this._showTime = showTime;
178
+ if (this.currentHour === undefined) {
179
+ this.initTime(this.value || new Date());
180
+ }
181
+ this.updateInputfield();
182
+ }
183
+ get locale() {
184
+ return this._locale;
185
+ }
186
+ get responsiveOptions() {
187
+ return this._responsiveOptions;
188
+ }
189
+ set responsiveOptions(responsiveOptions) {
190
+ this._responsiveOptions = responsiveOptions;
191
+ this.destroyResponsiveStyleElement();
192
+ this.createResponsiveStyle();
193
+ }
194
+ get numberOfMonths() {
195
+ return this._numberOfMonths;
196
+ }
197
+ set numberOfMonths(numberOfMonths) {
198
+ this._numberOfMonths = numberOfMonths;
199
+ this.destroyResponsiveStyleElement();
200
+ this.createResponsiveStyle();
201
+ }
202
+ get firstDayOfWeek() {
203
+ return this._firstDayOfWeek;
204
+ }
205
+ set firstDayOfWeek(firstDayOfWeek) {
206
+ this._firstDayOfWeek = firstDayOfWeek;
207
+ this.createWeekDays();
208
+ }
209
+ set locale(newLocale) {
210
+ console.warn('Locale property has no effect, use new i18n API instead.');
211
+ }
212
+ ngOnInit() {
213
+ this.attributeSelector = UniqueComponentId();
214
+ const date = this.defaultDate || new Date();
215
+ this.createResponsiveStyle();
216
+ this.currentMonth = date.getMonth();
217
+ this.currentYear = date.getFullYear();
218
+ this.currentView = this.view;
219
+ if (this.view === 'date') {
220
+ this.createWeekDays();
221
+ this.initTime(date);
222
+ this.createMonths(this.currentMonth, this.currentYear);
223
+ this.ticksTo1970 = ((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000;
224
+ }
225
+ this.translationSubscription = this.config.translationObserver.subscribe(() => {
226
+ this.createWeekDays();
227
+ this.cd.markForCheck();
228
+ });
229
+ this.initialized = true;
230
+ }
231
+ ngAfterContentInit() {
232
+ this.templates.forEach((item) => {
233
+ switch (item.getType()) {
234
+ case 'date':
235
+ this.dateTemplate = item.template;
236
+ break;
237
+ case 'decade':
238
+ this.decadeTemplate = item.template;
239
+ break;
240
+ case 'disabledDate':
241
+ this.disabledDateTemplate = item.template;
242
+ break;
243
+ case 'header':
244
+ this.headerTemplate = item.template;
245
+ break;
246
+ case 'previousicon':
247
+ this.previousIconTemplate = item.template;
248
+ break;
249
+ case 'nexticon':
250
+ this.nextIconTemplate = item.template;
251
+ break;
252
+ case 'triggericon':
253
+ this.triggerIconTemplate = item.template;
254
+ break;
255
+ case 'clearicon':
256
+ this.clearIconTemplate = item.template;
257
+ break;
258
+ case 'decrementicon':
259
+ this.decrementIconTemplate = item.template;
260
+ break;
261
+ case 'incrementicon':
262
+ this.incrementIconTemplate = item.template;
263
+ break;
264
+ case 'footer':
265
+ this.footerTemplate = item.template;
266
+ break;
267
+ default:
268
+ this.dateTemplate = item.template;
269
+ break;
270
+ }
271
+ });
272
+ }
273
+ ngAfterViewInit() {
274
+ if (this.inline) {
275
+ this.contentViewChild && this.contentViewChild.nativeElement.setAttribute(this.attributeSelector, '');
276
+ if (!this.disabled) {
277
+ this.initFocusableCell();
278
+ if (this.numberOfMonths === 1) {
279
+ this.contentViewChild.nativeElement.style.width = DomHandler.getOuterWidth(this.containerViewChild.nativeElement) + 'px';
280
+ }
281
+ }
282
+ }
283
+ }
284
+ getTranslation(option) {
285
+ return this.config.getTranslation(option);
286
+ }
287
+ populateYearOptions(start, end) {
288
+ this.yearOptions = [];
289
+ for (let i = start; i <= end; i++) {
290
+ this.yearOptions.push(i);
291
+ }
292
+ }
293
+ createWeekDays() {
294
+ this.weekDays = [];
295
+ let dayIndex = this.getFirstDateOfWeek();
296
+ let dayLabels = this.getTranslation(TranslationKeys.DAY_NAMES_MIN);
297
+ for (let i = 0; i < 7; i++) {
298
+ this.weekDays.push(dayLabels[dayIndex]);
299
+ dayIndex = dayIndex == 6 ? 0 : ++dayIndex;
300
+ }
301
+ }
302
+ monthPickerValues() {
303
+ let monthPickerValues = [];
304
+ for (let i = 0; i <= 11; i++) {
305
+ monthPickerValues.push(this.config.getTranslation('monthNamesShort')[i]);
306
+ }
307
+ return monthPickerValues;
308
+ }
309
+ yearPickerValues() {
310
+ let yearPickerValues = [];
311
+ let base = this.currentYear - (this.currentYear % 10);
312
+ for (let i = 0; i < 10; i++) {
313
+ yearPickerValues.push(base + i);
314
+ }
315
+ return yearPickerValues;
316
+ }
317
+ createMonths(month, year) {
318
+ this.months = this.months = [];
319
+ for (let i = 0; i < this.numberOfMonths; i++) {
320
+ let m = month + i;
321
+ let y = year;
322
+ if (m > 11) {
323
+ m = (m % 11) - 1;
324
+ y = year + 1;
325
+ }
326
+ this.months.push(this.createMonth(m, y));
327
+ }
328
+ }
329
+ getWeekNumber(date) {
330
+ let checkDate = new Date(date.getTime());
331
+ checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
332
+ let time = checkDate.getTime();
333
+ checkDate.setMonth(0);
334
+ checkDate.setDate(1);
335
+ return Math.floor(Math.round((time - checkDate.getTime()) / 86400000) / 7) + 1;
336
+ }
337
+ createMonth(month, year) {
338
+ let dates = [];
339
+ let firstDay = this.getFirstDayOfMonthIndex(month, year);
340
+ let daysLength = this.getDaysCountInMonth(month, year);
341
+ let prevMonthDaysLength = this.getDaysCountInPrevMonth(month, year);
342
+ let dayNo = 1;
343
+ let today = new Date();
344
+ let weekNumbers = [];
345
+ let monthRows = Math.ceil((daysLength + firstDay) / 7);
346
+ for (let i = 0; i < monthRows; i++) {
347
+ let week = [];
348
+ if (i == 0) {
349
+ for (let j = prevMonthDaysLength - firstDay + 1; j <= prevMonthDaysLength; j++) {
350
+ let prev = this.getPreviousMonthAndYear(month, year);
351
+ week.push({ day: j, month: prev.month, year: prev.year, otherMonth: true, today: this.isToday(today, j, prev.month, prev.year), selectable: this.isSelectable(j, prev.month, prev.year, true) });
352
+ }
353
+ let remainingDaysLength = 7 - week.length;
354
+ for (let j = 0; j < remainingDaysLength; j++) {
355
+ week.push({ day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year), selectable: this.isSelectable(dayNo, month, year, false) });
356
+ dayNo++;
357
+ }
358
+ }
359
+ else {
360
+ for (let j = 0; j < 7; j++) {
361
+ if (dayNo > daysLength) {
362
+ let next = this.getNextMonthAndYear(month, year);
363
+ week.push({
364
+ day: dayNo - daysLength,
365
+ month: next.month,
366
+ year: next.year,
367
+ otherMonth: true,
368
+ today: this.isToday(today, dayNo - daysLength, next.month, next.year),
369
+ selectable: this.isSelectable(dayNo - daysLength, next.month, next.year, true)
370
+ });
371
+ }
372
+ else {
373
+ week.push({ day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year), selectable: this.isSelectable(dayNo, month, year, false) });
374
+ }
375
+ dayNo++;
376
+ }
377
+ }
378
+ if (this.showWeek) {
379
+ weekNumbers.push(this.getWeekNumber(new Date(week[0].year, week[0].month, week[0].day)));
380
+ }
381
+ dates.push(week);
382
+ }
383
+ return {
384
+ month: month,
385
+ year: year,
386
+ dates: dates,
387
+ weekNumbers: weekNumbers
388
+ };
389
+ }
390
+ initTime(date) {
391
+ this.pm = date.getHours() > 11;
392
+ if (this.showTime) {
393
+ this.currentMinute = date.getMinutes();
394
+ this.currentSecond = date.getSeconds();
395
+ this.setCurrentHourPM(date.getHours());
396
+ }
397
+ else if (this.timeOnly) {
398
+ this.currentMinute = 0;
399
+ this.currentHour = 0;
400
+ this.currentSecond = 0;
401
+ }
402
+ }
403
+ navBackward(event) {
404
+ if (this.disabled) {
405
+ event.preventDefault();
406
+ return;
407
+ }
408
+ this.isMonthNavigate = true;
409
+ if (this.currentView === 'month') {
410
+ this.decrementYear();
411
+ setTimeout(() => {
412
+ this.updateFocus();
413
+ }, 1);
414
+ }
415
+ else if (this.currentView === 'year') {
416
+ this.decrementDecade();
417
+ setTimeout(() => {
418
+ this.updateFocus();
419
+ }, 1);
420
+ }
421
+ else {
422
+ if (this.currentMonth === 0) {
423
+ this.currentMonth = 11;
424
+ this.decrementYear();
425
+ }
426
+ else {
427
+ this.currentMonth--;
428
+ }
429
+ this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });
430
+ this.createMonths(this.currentMonth, this.currentYear);
431
+ }
432
+ }
433
+ navForward(event) {
434
+ if (this.disabled) {
435
+ event.preventDefault();
436
+ return;
437
+ }
438
+ this.isMonthNavigate = true;
439
+ if (this.currentView === 'month') {
440
+ this.incrementYear();
441
+ setTimeout(() => {
442
+ this.updateFocus();
443
+ }, 1);
444
+ }
445
+ else if (this.currentView === 'year') {
446
+ this.incrementDecade();
447
+ setTimeout(() => {
448
+ this.updateFocus();
449
+ }, 1);
450
+ }
451
+ else {
452
+ if (this.currentMonth === 11) {
453
+ this.currentMonth = 0;
454
+ this.incrementYear();
455
+ }
456
+ else {
457
+ this.currentMonth++;
458
+ }
459
+ this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });
460
+ this.createMonths(this.currentMonth, this.currentYear);
461
+ }
462
+ }
463
+ decrementYear() {
464
+ this.currentYear--;
465
+ if (this.yearNavigator && this.currentYear < this.yearOptions[0]) {
466
+ let difference = this.yearOptions[this.yearOptions.length - 1] - this.yearOptions[0];
467
+ this.populateYearOptions(this.yearOptions[0] - difference, this.yearOptions[this.yearOptions.length - 1] - difference);
468
+ }
469
+ }
470
+ decrementDecade() {
471
+ this.currentYear = this.currentYear - 10;
472
+ }
473
+ incrementDecade() {
474
+ this.currentYear = this.currentYear + 10;
475
+ }
476
+ incrementYear() {
477
+ this.currentYear++;
478
+ if (this.yearNavigator && this.currentYear > this.yearOptions[this.yearOptions.length - 1]) {
479
+ let difference = this.yearOptions[this.yearOptions.length - 1] - this.yearOptions[0];
480
+ this.populateYearOptions(this.yearOptions[0] + difference, this.yearOptions[this.yearOptions.length - 1] + difference);
481
+ }
482
+ }
483
+ switchToMonthView(event) {
484
+ this.setCurrentView('month');
485
+ event.preventDefault();
486
+ }
487
+ switchToYearView(event) {
488
+ this.setCurrentView('year');
489
+ event.preventDefault();
490
+ }
491
+ onDateSelect(event, dateMeta) {
492
+ if (this.disabled || !dateMeta.selectable) {
493
+ event.preventDefault();
494
+ return;
495
+ }
496
+ if (this.isMultipleSelection() && this.isSelected(dateMeta)) {
497
+ this.value = this.value.filter((date, i) => {
498
+ return !this.isDateEquals(date, dateMeta);
499
+ });
500
+ if (this.value.length === 0) {
501
+ this.value = null;
502
+ }
503
+ this.updateModel(this.value);
504
+ }
505
+ else {
506
+ if (this.shouldSelectDate(dateMeta)) {
507
+ this.selectDate(dateMeta);
508
+ }
509
+ }
510
+ if (this.isSingleSelection() && this.hideOnDateTimeSelect) {
511
+ setTimeout(() => {
512
+ event.preventDefault();
513
+ this.hideOverlay();
514
+ if (this.mask) {
515
+ this.disableModality();
516
+ }
517
+ this.cd.markForCheck();
518
+ }, 150);
519
+ }
520
+ this.updateInputfield();
521
+ event.preventDefault();
522
+ }
523
+ shouldSelectDate(dateMeta) {
524
+ if (this.isMultipleSelection())
525
+ return this.maxDateCount != null ? this.maxDateCount > (this.value ? this.value.length : 0) : true;
526
+ else
527
+ return true;
528
+ }
529
+ onMonthSelect(event, index) {
530
+ if (this.view === 'month') {
531
+ this.onDateSelect(event, { year: this.currentYear, month: index, day: 1, selectable: true });
532
+ }
533
+ else {
534
+ this.currentMonth = index;
535
+ this.createMonths(this.currentMonth, this.currentYear);
536
+ this.setCurrentView('date');
537
+ this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });
538
+ }
539
+ }
540
+ onYearSelect(event, year) {
541
+ if (this.view === 'year') {
542
+ this.onDateSelect(event, { year: year, month: 0, day: 1, selectable: true });
543
+ }
544
+ else {
545
+ this.currentYear = year;
546
+ this.setCurrentView('month');
547
+ this.onYearChange.emit({ month: this.currentMonth + 1, year: this.currentYear });
548
+ }
549
+ }
550
+ updateInputfield() {
551
+ let formattedValue = '';
552
+ if (this.value) {
553
+ if (this.isSingleSelection()) {
554
+ formattedValue = this.formatDateTime(this.value);
555
+ }
556
+ else if (this.isMultipleSelection()) {
557
+ for (let i = 0; i < this.value.length; i++) {
558
+ let dateAsString = this.formatDateTime(this.value[i]);
559
+ formattedValue += dateAsString;
560
+ if (i !== this.value.length - 1) {
561
+ formattedValue += this.multipleSeparator + ' ';
562
+ }
563
+ }
564
+ }
565
+ else if (this.isRangeSelection()) {
566
+ if (this.value && this.value.length) {
567
+ let startDate = this.value[0];
568
+ let endDate = this.value[1];
569
+ formattedValue = this.formatDateTime(startDate);
570
+ if (endDate) {
571
+ formattedValue += ' ' + this.rangeSeparator + ' ' + this.formatDateTime(endDate);
572
+ }
573
+ }
574
+ }
575
+ }
576
+ this.inputFieldValue = formattedValue;
577
+ this.updateFilledState();
578
+ if (this.inputfieldViewChild && this.inputfieldViewChild.nativeElement) {
579
+ this.inputfieldViewChild.nativeElement.value = this.inputFieldValue;
580
+ }
581
+ }
582
+ formatDateTime(date) {
583
+ let formattedValue = this.keepInvalid ? date : null;
584
+ if (this.isValidDate(date)) {
585
+ if (this.timeOnly) {
586
+ formattedValue = this.formatTime(date);
587
+ }
588
+ else {
589
+ formattedValue = this.formatDate(date, this.getDateFormat());
590
+ if (this.showTime) {
591
+ formattedValue += ' ' + this.formatTime(date);
592
+ }
593
+ }
594
+ }
595
+ return formattedValue;
596
+ }
597
+ setCurrentHourPM(hours) {
598
+ if (this.hourFormat == '12') {
599
+ this.pm = hours > 11;
600
+ if (hours >= 12) {
601
+ this.currentHour = hours == 12 ? 12 : hours - 12;
602
+ }
603
+ else {
604
+ this.currentHour = hours == 0 ? 12 : hours;
605
+ }
606
+ }
607
+ else {
608
+ this.currentHour = hours;
609
+ }
610
+ }
611
+ setCurrentView(currentView) {
612
+ this.currentView = currentView;
613
+ this.cd.detectChanges();
614
+ this.alignOverlay();
615
+ }
616
+ selectDate(dateMeta) {
617
+ let date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);
618
+ if (this.showTime) {
619
+ if (this.hourFormat == '12') {
620
+ if (this.currentHour === 12)
621
+ date.setHours(this.pm ? 12 : 0);
622
+ else
623
+ date.setHours(this.pm ? this.currentHour + 12 : this.currentHour);
624
+ }
625
+ else {
626
+ date.setHours(this.currentHour);
627
+ }
628
+ date.setMinutes(this.currentMinute);
629
+ date.setSeconds(this.currentSecond);
630
+ }
631
+ if (this.minDate && this.minDate > date) {
632
+ date = this.minDate;
633
+ this.setCurrentHourPM(date.getHours());
634
+ this.currentMinute = date.getMinutes();
635
+ this.currentSecond = date.getSeconds();
636
+ }
637
+ if (this.maxDate && this.maxDate < date) {
638
+ date = this.maxDate;
639
+ this.setCurrentHourPM(date.getHours());
640
+ this.currentMinute = date.getMinutes();
641
+ this.currentSecond = date.getSeconds();
642
+ }
643
+ if (this.isSingleSelection()) {
644
+ this.updateModel(date);
645
+ }
646
+ else if (this.isMultipleSelection()) {
647
+ this.updateModel(this.value ? [...this.value, date] : [date]);
648
+ }
649
+ else if (this.isRangeSelection()) {
650
+ if (this.value && this.value.length) {
651
+ let startDate = this.value[0];
652
+ let endDate = this.value[1];
653
+ if (!endDate && date.getTime() >= startDate.getTime()) {
654
+ endDate = date;
655
+ }
656
+ else {
657
+ startDate = date;
658
+ endDate = null;
659
+ }
660
+ this.updateModel([startDate, endDate]);
661
+ }
662
+ else {
663
+ this.updateModel([date, null]);
664
+ }
665
+ }
666
+ this.onSelect.emit(date);
667
+ }
668
+ updateModel(value) {
669
+ this.value = value;
670
+ if (this.dataType == 'date') {
671
+ this.onModelChange(this.value);
672
+ }
673
+ else if (this.dataType == 'string') {
674
+ if (this.isSingleSelection()) {
675
+ this.onModelChange(this.formatDateTime(this.value));
676
+ }
677
+ else {
678
+ let stringArrValue = null;
679
+ if (this.value) {
680
+ stringArrValue = this.value.map((date) => this.formatDateTime(date));
681
+ }
682
+ this.onModelChange(stringArrValue);
683
+ }
684
+ }
685
+ }
686
+ getFirstDayOfMonthIndex(month, year) {
687
+ let day = new Date();
688
+ day.setDate(1);
689
+ day.setMonth(month);
690
+ day.setFullYear(year);
691
+ let dayIndex = day.getDay() + this.getSundayIndex();
692
+ return dayIndex >= 7 ? dayIndex - 7 : dayIndex;
693
+ }
694
+ getDaysCountInMonth(month, year) {
695
+ return 32 - this.daylightSavingAdjust(new Date(year, month, 32)).getDate();
696
+ }
697
+ getDaysCountInPrevMonth(month, year) {
698
+ let prev = this.getPreviousMonthAndYear(month, year);
699
+ return this.getDaysCountInMonth(prev.month, prev.year);
700
+ }
701
+ getPreviousMonthAndYear(month, year) {
702
+ let m, y;
703
+ if (month === 0) {
704
+ m = 11;
705
+ y = year - 1;
706
+ }
707
+ else {
708
+ m = month - 1;
709
+ y = year;
710
+ }
711
+ return { month: m, year: y };
712
+ }
713
+ getNextMonthAndYear(month, year) {
714
+ let m, y;
715
+ if (month === 11) {
716
+ m = 0;
717
+ y = year + 1;
718
+ }
719
+ else {
720
+ m = month + 1;
721
+ y = year;
722
+ }
723
+ return { month: m, year: y };
724
+ }
725
+ getSundayIndex() {
726
+ let firstDayOfWeek = this.getFirstDateOfWeek();
727
+ return firstDayOfWeek > 0 ? 7 - firstDayOfWeek : 0;
728
+ }
729
+ isSelected(dateMeta) {
730
+ if (this.value) {
731
+ if (this.isSingleSelection()) {
732
+ return this.isDateEquals(this.value, dateMeta);
733
+ }
734
+ else if (this.isMultipleSelection()) {
735
+ let selected = false;
736
+ for (let date of this.value) {
737
+ selected = this.isDateEquals(date, dateMeta);
738
+ if (selected) {
739
+ break;
740
+ }
741
+ }
742
+ return selected;
743
+ }
744
+ else if (this.isRangeSelection()) {
745
+ if (this.value[1])
746
+ return this.isDateEquals(this.value[0], dateMeta) || this.isDateEquals(this.value[1], dateMeta) || this.isDateBetween(this.value[0], this.value[1], dateMeta);
747
+ else
748
+ return this.isDateEquals(this.value[0], dateMeta);
749
+ }
750
+ }
751
+ else {
752
+ return false;
753
+ }
754
+ }
755
+ isComparable() {
756
+ return this.value != null && typeof this.value !== 'string';
757
+ }
758
+ isMonthSelected(month) {
759
+ if (this.isComparable() && !this.isMultipleSelection()) {
760
+ const [start, end] = this.isRangeSelection() ? this.value : [this.value, this.value];
761
+ const selected = new Date(this.currentYear, month, 1);
762
+ return selected >= start && selected <= (end ?? start);
763
+ }
764
+ return false;
765
+ }
766
+ isMonthDisabled(month) {
767
+ for (let day = 1; day < this.getDaysCountInMonth(month, this.currentYear) + 1; day++) {
768
+ if (this.isSelectable(day, month, this.currentYear, false)) {
769
+ return false;
770
+ }
771
+ }
772
+ return true;
773
+ }
774
+ isYearSelected(year) {
775
+ if (this.isComparable()) {
776
+ let value = this.isRangeSelection() ? this.value[0] : this.value;
777
+ return !this.isMultipleSelection() ? value.getFullYear() === year : false;
778
+ }
779
+ return false;
780
+ }
781
+ isDateEquals(value, dateMeta) {
782
+ if (value && ObjectUtils.isDate(value))
783
+ return value.getDate() === dateMeta.day && value.getMonth() === dateMeta.month && value.getFullYear() === dateMeta.year;
784
+ else
785
+ return false;
786
+ }
787
+ isDateBetween(start, end, dateMeta) {
788
+ let between = false;
789
+ if (start && end) {
790
+ let date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);
791
+ return start.getTime() <= date.getTime() && end.getTime() >= date.getTime();
792
+ }
793
+ return between;
794
+ }
795
+ isSingleSelection() {
796
+ return this.selectionMode === 'single';
797
+ }
798
+ isRangeSelection() {
799
+ return this.selectionMode === 'range';
800
+ }
801
+ isMultipleSelection() {
802
+ return this.selectionMode === 'multiple';
803
+ }
804
+ isToday(today, day, month, year) {
805
+ return today.getDate() === day && today.getMonth() === month && today.getFullYear() === year;
806
+ }
807
+ isSelectable(day, month, year, otherMonth) {
808
+ let validMin = true;
809
+ let validMax = true;
810
+ let validDate = true;
811
+ let validDay = true;
812
+ if (otherMonth && !this.selectOtherMonths) {
813
+ return false;
814
+ }
815
+ if (this.minDate) {
816
+ if (this.minDate.getFullYear() > year) {
817
+ validMin = false;
818
+ }
819
+ else if (this.minDate.getFullYear() === year) {
820
+ if (this.minDate.getMonth() > month) {
821
+ validMin = false;
822
+ }
823
+ else if (this.minDate.getMonth() === month) {
824
+ if (this.minDate.getDate() > day) {
825
+ validMin = false;
826
+ }
827
+ }
828
+ }
829
+ }
830
+ if (this.maxDate) {
831
+ if (this.maxDate.getFullYear() < year) {
832
+ validMax = false;
833
+ }
834
+ else if (this.maxDate.getFullYear() === year) {
835
+ if (this.maxDate.getMonth() < month) {
836
+ validMax = false;
837
+ }
838
+ else if (this.maxDate.getMonth() === month) {
839
+ if (this.maxDate.getDate() < day) {
840
+ validMax = false;
841
+ }
842
+ }
843
+ }
844
+ }
845
+ if (this.disabledDates) {
846
+ validDate = !this.isDateDisabled(day, month, year);
847
+ }
848
+ if (this.disabledDays) {
849
+ validDay = !this.isDayDisabled(day, month, year);
850
+ }
851
+ return validMin && validMax && validDate && validDay;
852
+ }
853
+ isDateDisabled(day, month, year) {
854
+ if (this.disabledDates) {
855
+ for (let disabledDate of this.disabledDates) {
856
+ if (disabledDate.getFullYear() === year && disabledDate.getMonth() === month && disabledDate.getDate() === day) {
857
+ return true;
858
+ }
859
+ }
860
+ }
861
+ return false;
862
+ }
863
+ isDayDisabled(day, month, year) {
864
+ if (this.disabledDays) {
865
+ let weekday = new Date(year, month, day);
866
+ let weekdayNumber = weekday.getDay();
867
+ return this.disabledDays.indexOf(weekdayNumber) !== -1;
868
+ }
869
+ return false;
870
+ }
871
+ onInputFocus(event) {
872
+ this.focus = true;
873
+ if (this.showOnFocus) {
874
+ this.showOverlay();
875
+ }
876
+ this.onFocus.emit(event);
877
+ }
878
+ onInputClick() {
879
+ if (this.showOnFocus && !this.overlayVisible) {
880
+ this.showOverlay();
881
+ }
882
+ }
883
+ onInputBlur(event) {
884
+ this.focus = false;
885
+ this.onBlur.emit(event);
886
+ if (!this.keepInvalid) {
887
+ this.updateInputfield();
888
+ }
889
+ this.onModelTouched();
890
+ }
891
+ onButtonClick(event, inputfield) {
892
+ if (!this.overlayVisible) {
893
+ inputfield.focus();
894
+ this.showOverlay();
895
+ }
896
+ else {
897
+ this.hideOverlay();
898
+ }
899
+ }
900
+ clear() {
901
+ this.inputFieldValue = null;
902
+ this.value = null;
903
+ this.onModelChange(this.value);
904
+ this.onClear.emit();
905
+ }
906
+ onOverlayClick(event) {
907
+ this.overlayService.add({
908
+ originalEvent: event,
909
+ target: this.el.nativeElement
910
+ });
911
+ }
912
+ getMonthName(index) {
913
+ return this.config.getTranslation('monthNames')[index];
914
+ }
915
+ getYear(month) {
916
+ return this.currentView === 'month' ? this.currentYear : month.year;
917
+ }
918
+ switchViewButtonDisabled() {
919
+ return this.numberOfMonths > 1 || this.disabled;
920
+ }
921
+ onPrevButtonClick(event) {
922
+ this.navigationState = { backward: true, button: true };
923
+ this.navBackward(event);
924
+ }
925
+ onNextButtonClick(event) {
926
+ this.navigationState = { backward: false, button: true };
927
+ this.navForward(event);
928
+ }
929
+ onContainerButtonKeydown(event) {
930
+ switch (event.which) {
931
+ //tab
932
+ case 9:
933
+ if (!this.inline) {
934
+ this.trapFocus(event);
935
+ }
936
+ break;
937
+ //escape
938
+ case 27:
939
+ this.overlayVisible = false;
940
+ event.preventDefault();
941
+ break;
942
+ default:
943
+ //Noop
944
+ break;
945
+ }
946
+ }
947
+ onInputKeydown(event) {
948
+ this.isKeydown = true;
949
+ if (event.keyCode === 40 && this.contentViewChild) {
950
+ this.trapFocus(event);
951
+ }
952
+ else if (event.keyCode === 27) {
953
+ if (this.overlayVisible) {
954
+ this.overlayVisible = false;
955
+ event.preventDefault();
956
+ }
957
+ }
958
+ else if (event.keyCode === 13) {
959
+ if (this.overlayVisible) {
960
+ this.overlayVisible = false;
961
+ event.preventDefault();
962
+ }
963
+ }
964
+ else if (event.keyCode === 9 && this.contentViewChild) {
965
+ DomHandler.getFocusableElements(this.contentViewChild.nativeElement).forEach((el) => (el.tabIndex = '-1'));
966
+ if (this.overlayVisible) {
967
+ this.overlayVisible = false;
968
+ }
969
+ }
970
+ }
971
+ onDateCellKeydown(event, date, groupIndex) {
972
+ const cellContent = event.currentTarget;
973
+ const cell = cellContent.parentElement;
974
+ switch (event.which) {
975
+ //down arrow
976
+ case 40: {
977
+ cellContent.tabIndex = '-1';
978
+ let cellIndex = DomHandler.index(cell);
979
+ let nextRow = cell.parentElement.nextElementSibling;
980
+ if (nextRow) {
981
+ let focusCell = nextRow.children[cellIndex].children[0];
982
+ if (DomHandler.hasClass(focusCell, 'p-disabled')) {
983
+ this.navigationState = { backward: false };
984
+ this.navForward(event);
985
+ }
986
+ else {
987
+ nextRow.children[cellIndex].children[0].tabIndex = '0';
988
+ nextRow.children[cellIndex].children[0].focus();
989
+ }
990
+ }
991
+ else {
992
+ this.navigationState = { backward: false };
993
+ this.navForward(event);
994
+ }
995
+ event.preventDefault();
996
+ break;
997
+ }
998
+ //up arrow
999
+ case 38: {
1000
+ cellContent.tabIndex = '-1';
1001
+ let cellIndex = DomHandler.index(cell);
1002
+ let prevRow = cell.parentElement.previousElementSibling;
1003
+ if (prevRow) {
1004
+ let focusCell = prevRow.children[cellIndex].children[0];
1005
+ if (DomHandler.hasClass(focusCell, 'p-disabled')) {
1006
+ this.navigationState = { backward: true };
1007
+ this.navBackward(event);
1008
+ }
1009
+ else {
1010
+ focusCell.tabIndex = '0';
1011
+ focusCell.focus();
1012
+ }
1013
+ }
1014
+ else {
1015
+ this.navigationState = { backward: true };
1016
+ this.navBackward(event);
1017
+ }
1018
+ event.preventDefault();
1019
+ break;
1020
+ }
1021
+ //left arrow
1022
+ case 37: {
1023
+ cellContent.tabIndex = '-1';
1024
+ let prevCell = cell.previousElementSibling;
1025
+ if (prevCell) {
1026
+ let focusCell = prevCell.children[0];
1027
+ if (DomHandler.hasClass(focusCell, 'p-disabled') || DomHandler.hasClass(focusCell.parentElement, 'p-datepicker-weeknumber')) {
1028
+ this.navigateToMonth(true, groupIndex);
1029
+ }
1030
+ else {
1031
+ focusCell.tabIndex = '0';
1032
+ focusCell.focus();
1033
+ }
1034
+ }
1035
+ else {
1036
+ this.navigateToMonth(true, groupIndex);
1037
+ }
1038
+ event.preventDefault();
1039
+ break;
1040
+ }
1041
+ //right arrow
1042
+ case 39: {
1043
+ cellContent.tabIndex = '-1';
1044
+ let nextCell = cell.nextElementSibling;
1045
+ if (nextCell) {
1046
+ let focusCell = nextCell.children[0];
1047
+ if (DomHandler.hasClass(focusCell, 'p-disabled')) {
1048
+ this.navigateToMonth(false, groupIndex);
1049
+ }
1050
+ else {
1051
+ focusCell.tabIndex = '0';
1052
+ focusCell.focus();
1053
+ }
1054
+ }
1055
+ else {
1056
+ this.navigateToMonth(false, groupIndex);
1057
+ }
1058
+ event.preventDefault();
1059
+ break;
1060
+ }
1061
+ //enter
1062
+ //space
1063
+ case 13:
1064
+ case 32: {
1065
+ this.onDateSelect(event, date);
1066
+ event.preventDefault();
1067
+ break;
1068
+ }
1069
+ //escape
1070
+ case 27: {
1071
+ this.overlayVisible = false;
1072
+ event.preventDefault();
1073
+ break;
1074
+ }
1075
+ //tab
1076
+ case 9: {
1077
+ if (!this.inline) {
1078
+ this.trapFocus(event);
1079
+ }
1080
+ break;
1081
+ }
1082
+ default:
1083
+ //no op
1084
+ break;
1085
+ }
1086
+ }
1087
+ onMonthCellKeydown(event, index) {
1088
+ const cell = event.currentTarget;
1089
+ switch (event.which) {
1090
+ //arrows
1091
+ case 38:
1092
+ case 40: {
1093
+ cell.tabIndex = '-1';
1094
+ var cells = cell.parentElement.children;
1095
+ var cellIndex = DomHandler.index(cell);
1096
+ let nextCell = cells[event.which === 40 ? cellIndex + 3 : cellIndex - 3];
1097
+ if (nextCell) {
1098
+ nextCell.tabIndex = '0';
1099
+ nextCell.focus();
1100
+ }
1101
+ event.preventDefault();
1102
+ break;
1103
+ }
1104
+ //left arrow
1105
+ case 37: {
1106
+ cell.tabIndex = '-1';
1107
+ let prevCell = cell.previousElementSibling;
1108
+ if (prevCell) {
1109
+ prevCell.tabIndex = '0';
1110
+ prevCell.focus();
1111
+ }
1112
+ else {
1113
+ this.navigationState = { backward: true };
1114
+ this.navBackward(event);
1115
+ }
1116
+ event.preventDefault();
1117
+ break;
1118
+ }
1119
+ //right arrow
1120
+ case 39: {
1121
+ cell.tabIndex = '-1';
1122
+ let nextCell = cell.nextElementSibling;
1123
+ if (nextCell) {
1124
+ nextCell.tabIndex = '0';
1125
+ nextCell.focus();
1126
+ }
1127
+ else {
1128
+ this.navigationState = { backward: false };
1129
+ this.navForward(event);
1130
+ }
1131
+ event.preventDefault();
1132
+ break;
1133
+ }
1134
+ //enter
1135
+ case 13: {
1136
+ this.onMonthSelect(event, index);
1137
+ event.preventDefault();
1138
+ break;
1139
+ }
1140
+ //enter
1141
+ //space
1142
+ case 13:
1143
+ case 32: {
1144
+ this.overlayVisible = false;
1145
+ event.preventDefault();
1146
+ break;
1147
+ }
1148
+ //escape
1149
+ case 27: {
1150
+ this.overlayVisible = false;
1151
+ event.preventDefault();
1152
+ break;
1153
+ }
1154
+ //tab
1155
+ case 9: {
1156
+ if (!this.inline) {
1157
+ this.trapFocus(event);
1158
+ }
1159
+ break;
1160
+ }
1161
+ default:
1162
+ //no op
1163
+ break;
1164
+ }
1165
+ }
1166
+ onYearCellKeydown(event, index) {
1167
+ const cell = event.currentTarget;
1168
+ switch (event.which) {
1169
+ //arrows
1170
+ case 38:
1171
+ case 40: {
1172
+ cell.tabIndex = '-1';
1173
+ var cells = cell.parentElement.children;
1174
+ var cellIndex = DomHandler.index(cell);
1175
+ let nextCell = cells[event.which === 40 ? cellIndex + 2 : cellIndex - 2];
1176
+ if (nextCell) {
1177
+ nextCell.tabIndex = '0';
1178
+ nextCell.focus();
1179
+ }
1180
+ event.preventDefault();
1181
+ break;
1182
+ }
1183
+ //left arrow
1184
+ case 37: {
1185
+ cell.tabIndex = '-1';
1186
+ let prevCell = cell.previousElementSibling;
1187
+ if (prevCell) {
1188
+ prevCell.tabIndex = '0';
1189
+ prevCell.focus();
1190
+ }
1191
+ else {
1192
+ this.navigationState = { backward: true };
1193
+ this.navBackward(event);
1194
+ }
1195
+ event.preventDefault();
1196
+ break;
1197
+ }
1198
+ //right arrow
1199
+ case 39: {
1200
+ cell.tabIndex = '-1';
1201
+ let nextCell = cell.nextElementSibling;
1202
+ if (nextCell) {
1203
+ nextCell.tabIndex = '0';
1204
+ nextCell.focus();
1205
+ }
1206
+ else {
1207
+ this.navigationState = { backward: false };
1208
+ this.navForward(event);
1209
+ }
1210
+ event.preventDefault();
1211
+ break;
1212
+ }
1213
+ //enter
1214
+ //space
1215
+ case 13:
1216
+ case 32: {
1217
+ this.onYearSelect(event, index);
1218
+ event.preventDefault();
1219
+ break;
1220
+ }
1221
+ //escape
1222
+ case 27: {
1223
+ this.overlayVisible = false;
1224
+ event.preventDefault();
1225
+ break;
1226
+ }
1227
+ //tab
1228
+ case 9: {
1229
+ this.trapFocus(event);
1230
+ break;
1231
+ }
1232
+ default:
1233
+ //no op
1234
+ break;
1235
+ }
1236
+ }
1237
+ navigateToMonth(prev, groupIndex) {
1238
+ if (prev) {
1239
+ if (this.numberOfMonths === 1 || groupIndex === 0) {
1240
+ this.navigationState = { backward: true };
1241
+ this.navBackward(event);
1242
+ }
1243
+ else {
1244
+ let prevMonthContainer = this.contentViewChild.nativeElement.children[groupIndex - 1];
1245
+ let cells = DomHandler.find(prevMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');
1246
+ let focusCell = cells[cells.length - 1];
1247
+ focusCell.tabIndex = '0';
1248
+ focusCell.focus();
1249
+ }
1250
+ }
1251
+ else {
1252
+ if (this.numberOfMonths === 1 || groupIndex === this.numberOfMonths - 1) {
1253
+ this.navigationState = { backward: false };
1254
+ this.navForward(event);
1255
+ }
1256
+ else {
1257
+ let nextMonthContainer = this.contentViewChild.nativeElement.children[groupIndex + 1];
1258
+ let focusCell = DomHandler.findSingle(nextMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');
1259
+ focusCell.tabIndex = '0';
1260
+ focusCell.focus();
1261
+ }
1262
+ }
1263
+ }
1264
+ updateFocus() {
1265
+ let cell;
1266
+ if (this.navigationState) {
1267
+ if (this.navigationState.button) {
1268
+ this.initFocusableCell();
1269
+ if (this.navigationState.backward)
1270
+ DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-prev').focus();
1271
+ else
1272
+ DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-next').focus();
1273
+ }
1274
+ else {
1275
+ if (this.navigationState.backward) {
1276
+ let cells;
1277
+ if (this.currentView === 'month') {
1278
+ cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');
1279
+ }
1280
+ else if (this.currentView === 'year') {
1281
+ cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year:not(.p-disabled)');
1282
+ }
1283
+ else {
1284
+ cells = DomHandler.find(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');
1285
+ }
1286
+ if (cells && cells.length > 0) {
1287
+ cell = cells[cells.length - 1];
1288
+ }
1289
+ }
1290
+ else {
1291
+ if (this.currentView === 'month') {
1292
+ cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');
1293
+ }
1294
+ else if (this.currentView === 'year') {
1295
+ cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-yearpicker .p-yearpicker-year:not(.p-disabled)');
1296
+ }
1297
+ else {
1298
+ cell = DomHandler.findSingle(this.contentViewChild.nativeElement, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');
1299
+ }
1300
+ }
1301
+ if (cell) {
1302
+ cell.tabIndex = '0';
1303
+ cell.focus();
1304
+ }
1305
+ }
1306
+ this.navigationState = null;
1307
+ }
1308
+ else {
1309
+ this.initFocusableCell();
1310
+ }
1311
+ }
1312
+ initFocusableCell() {
1313
+ const contentEl = this.contentViewChild?.nativeElement;
1314
+ let cell;
1315
+ if (this.currentView === 'month') {
1316
+ let cells = DomHandler.find(contentEl, '.p-monthpicker .p-monthpicker-month:not(.p-disabled)');
1317
+ let selectedCell = DomHandler.findSingle(contentEl, '.p-monthpicker .p-monthpicker-month.p-highlight');
1318
+ cells.forEach((cell) => (cell.tabIndex = -1));
1319
+ cell = selectedCell || cells[0];
1320
+ if (cells.length === 0) {
1321
+ let disabledCells = DomHandler.find(contentEl, '.p-monthpicker .p-monthpicker-month.p-disabled[tabindex = "0"]');
1322
+ disabledCells.forEach((cell) => (cell.tabIndex = -1));
1323
+ }
1324
+ }
1325
+ else if (this.currentView === 'year') {
1326
+ let cells = DomHandler.find(contentEl, '.p-yearpicker .p-yearpicker-year:not(.p-disabled)');
1327
+ let selectedCell = DomHandler.findSingle(contentEl, '.p-yearpicker .p-yearpicker-year.p-highlight');
1328
+ cells.forEach((cell) => (cell.tabIndex = -1));
1329
+ cell = selectedCell || cells[0];
1330
+ if (cells.length === 0) {
1331
+ let disabledCells = DomHandler.find(contentEl, '.p-yearpicker .p-yearpicker-year.p-disabled[tabindex = "0"]');
1332
+ disabledCells.forEach((cell) => (cell.tabIndex = -1));
1333
+ }
1334
+ }
1335
+ else {
1336
+ cell = DomHandler.findSingle(contentEl, 'span.p-highlight');
1337
+ if (!cell) {
1338
+ let todayCell = DomHandler.findSingle(contentEl, 'td.p-datepicker-today span:not(.p-disabled):not(.p-ink)');
1339
+ if (todayCell)
1340
+ cell = todayCell;
1341
+ else
1342
+ cell = DomHandler.findSingle(contentEl, '.p-datepicker-calendar td span:not(.p-disabled):not(.p-ink)');
1343
+ }
1344
+ }
1345
+ if (cell) {
1346
+ cell.tabIndex = '0';
1347
+ if (!this.preventFocus && (!this.navigationState || !this.navigationState.button)) {
1348
+ setTimeout(() => {
1349
+ if (!this.disabled) {
1350
+ cell.focus();
1351
+ }
1352
+ }, 1);
1353
+ }
1354
+ this.preventFocus = false;
1355
+ }
1356
+ }
1357
+ trapFocus(event) {
1358
+ let focusableElements = DomHandler.getFocusableElements(this.contentViewChild.nativeElement);
1359
+ if (focusableElements && focusableElements.length > 0) {
1360
+ if (!focusableElements[0].ownerDocument.activeElement) {
1361
+ focusableElements[0].focus();
1362
+ }
1363
+ else {
1364
+ let focusedIndex = focusableElements.indexOf(focusableElements[0].ownerDocument.activeElement);
1365
+ if (event.shiftKey) {
1366
+ if (focusedIndex == -1 || focusedIndex === 0) {
1367
+ if (this.focusTrap) {
1368
+ focusableElements[focusableElements.length - 1].focus();
1369
+ }
1370
+ else {
1371
+ if (focusedIndex === -1)
1372
+ return this.hideOverlay();
1373
+ else if (focusedIndex === 0)
1374
+ return;
1375
+ }
1376
+ }
1377
+ else {
1378
+ focusableElements[focusedIndex - 1].focus();
1379
+ }
1380
+ }
1381
+ else {
1382
+ if (focusedIndex == -1 || focusedIndex === focusableElements.length - 1) {
1383
+ if (!this.focusTrap && focusedIndex != -1)
1384
+ return this.hideOverlay();
1385
+ else
1386
+ focusableElements[0].focus();
1387
+ }
1388
+ else {
1389
+ focusableElements[focusedIndex + 1].focus();
1390
+ }
1391
+ }
1392
+ }
1393
+ }
1394
+ event.preventDefault();
1395
+ }
1396
+ onMonthDropdownChange(m) {
1397
+ this.currentMonth = parseInt(m);
1398
+ this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });
1399
+ this.createMonths(this.currentMonth, this.currentYear);
1400
+ }
1401
+ onYearDropdownChange(y) {
1402
+ this.currentYear = parseInt(y);
1403
+ this.onYearChange.emit({ month: this.currentMonth + 1, year: this.currentYear });
1404
+ this.createMonths(this.currentMonth, this.currentYear);
1405
+ }
1406
+ validateTime(hour, minute, second, pm) {
1407
+ let value = this.value;
1408
+ const convertedHour = this.convertTo24Hour(hour, pm);
1409
+ if (this.isRangeSelection()) {
1410
+ value = this.value[1] || this.value[0];
1411
+ }
1412
+ if (this.isMultipleSelection()) {
1413
+ value = this.value[this.value.length - 1];
1414
+ }
1415
+ const valueDateString = value ? value.toDateString() : null;
1416
+ if (this.minDate && valueDateString && this.minDate.toDateString() === valueDateString) {
1417
+ if (this.minDate.getHours() > convertedHour) {
1418
+ return false;
1419
+ }
1420
+ if (this.minDate.getHours() === convertedHour) {
1421
+ if (this.minDate.getMinutes() > minute) {
1422
+ return false;
1423
+ }
1424
+ if (this.minDate.getMinutes() === minute) {
1425
+ if (this.minDate.getSeconds() > second) {
1426
+ return false;
1427
+ }
1428
+ }
1429
+ }
1430
+ }
1431
+ if (this.maxDate && valueDateString && this.maxDate.toDateString() === valueDateString) {
1432
+ if (this.maxDate.getHours() < convertedHour) {
1433
+ return false;
1434
+ }
1435
+ if (this.maxDate.getHours() === convertedHour) {
1436
+ if (this.maxDate.getMinutes() < minute) {
1437
+ return false;
1438
+ }
1439
+ if (this.maxDate.getMinutes() === minute) {
1440
+ if (this.maxDate.getSeconds() < second) {
1441
+ return false;
1442
+ }
1443
+ }
1444
+ }
1445
+ }
1446
+ return true;
1447
+ }
1448
+ incrementHour(event) {
1449
+ const prevHour = this.currentHour;
1450
+ let newHour = this.currentHour + this.stepHour;
1451
+ let newPM = this.pm;
1452
+ if (this.hourFormat == '24')
1453
+ newHour = newHour >= 24 ? newHour - 24 : newHour;
1454
+ else if (this.hourFormat == '12') {
1455
+ // Before the AM/PM break, now after
1456
+ if (prevHour < 12 && newHour > 11) {
1457
+ newPM = !this.pm;
1458
+ }
1459
+ newHour = newHour >= 13 ? newHour - 12 : newHour;
1460
+ }
1461
+ if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) {
1462
+ this.currentHour = newHour;
1463
+ this.pm = newPM;
1464
+ }
1465
+ event.preventDefault();
1466
+ }
1467
+ onTimePickerElementMouseDown(event, type, direction) {
1468
+ if (!this.disabled) {
1469
+ this.repeat(event, null, type, direction);
1470
+ event.preventDefault();
1471
+ }
1472
+ }
1473
+ onTimePickerElementMouseUp(event) {
1474
+ if (!this.disabled) {
1475
+ this.clearTimePickerTimer();
1476
+ this.updateTime();
1477
+ }
1478
+ }
1479
+ onTimePickerElementMouseLeave() {
1480
+ if (!this.disabled && this.timePickerTimer) {
1481
+ this.clearTimePickerTimer();
1482
+ this.updateTime();
1483
+ }
1484
+ }
1485
+ repeat(event, interval, type, direction) {
1486
+ let i = interval || 500;
1487
+ this.clearTimePickerTimer();
1488
+ this.timePickerTimer = setTimeout(() => {
1489
+ this.repeat(event, 100, type, direction);
1490
+ this.cd.markForCheck();
1491
+ }, i);
1492
+ switch (type) {
1493
+ case 0:
1494
+ if (direction === 1)
1495
+ this.incrementHour(event);
1496
+ else
1497
+ this.decrementHour(event);
1498
+ break;
1499
+ case 1:
1500
+ if (direction === 1)
1501
+ this.incrementMinute(event);
1502
+ else
1503
+ this.decrementMinute(event);
1504
+ break;
1505
+ case 2:
1506
+ if (direction === 1)
1507
+ this.incrementSecond(event);
1508
+ else
1509
+ this.decrementSecond(event);
1510
+ break;
1511
+ }
1512
+ this.updateInputfield();
1513
+ }
1514
+ clearTimePickerTimer() {
1515
+ if (this.timePickerTimer) {
1516
+ clearTimeout(this.timePickerTimer);
1517
+ this.timePickerTimer = null;
1518
+ }
1519
+ }
1520
+ decrementHour(event) {
1521
+ let newHour = this.currentHour - this.stepHour;
1522
+ let newPM = this.pm;
1523
+ if (this.hourFormat == '24')
1524
+ newHour = newHour < 0 ? 24 + newHour : newHour;
1525
+ else if (this.hourFormat == '12') {
1526
+ // If we were at noon/midnight, then switch
1527
+ if (this.currentHour === 12) {
1528
+ newPM = !this.pm;
1529
+ }
1530
+ newHour = newHour <= 0 ? 12 + newHour : newHour;
1531
+ }
1532
+ if (this.validateTime(newHour, this.currentMinute, this.currentSecond, newPM)) {
1533
+ this.currentHour = newHour;
1534
+ this.pm = newPM;
1535
+ }
1536
+ event.preventDefault();
1537
+ }
1538
+ incrementMinute(event) {
1539
+ let newMinute = this.currentMinute + this.stepMinute;
1540
+ newMinute = newMinute > 59 ? newMinute - 60 : newMinute;
1541
+ if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) {
1542
+ this.currentMinute = newMinute;
1543
+ }
1544
+ event.preventDefault();
1545
+ }
1546
+ decrementMinute(event) {
1547
+ let newMinute = this.currentMinute - this.stepMinute;
1548
+ newMinute = newMinute < 0 ? 60 + newMinute : newMinute;
1549
+ if (this.validateTime(this.currentHour, newMinute, this.currentSecond, this.pm)) {
1550
+ this.currentMinute = newMinute;
1551
+ }
1552
+ event.preventDefault();
1553
+ }
1554
+ incrementSecond(event) {
1555
+ let newSecond = this.currentSecond + this.stepSecond;
1556
+ newSecond = newSecond > 59 ? newSecond - 60 : newSecond;
1557
+ if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) {
1558
+ this.currentSecond = newSecond;
1559
+ }
1560
+ event.preventDefault();
1561
+ }
1562
+ decrementSecond(event) {
1563
+ let newSecond = this.currentSecond - this.stepSecond;
1564
+ newSecond = newSecond < 0 ? 60 + newSecond : newSecond;
1565
+ if (this.validateTime(this.currentHour, this.currentMinute, newSecond, this.pm)) {
1566
+ this.currentSecond = newSecond;
1567
+ }
1568
+ event.preventDefault();
1569
+ }
1570
+ updateTime() {
1571
+ let value = this.value;
1572
+ if (this.isRangeSelection()) {
1573
+ value = this.value[1] || this.value[0];
1574
+ }
1575
+ if (this.isMultipleSelection()) {
1576
+ value = this.value[this.value.length - 1];
1577
+ }
1578
+ value = value ? new Date(value.getTime()) : new Date();
1579
+ if (this.hourFormat == '12') {
1580
+ if (this.currentHour === 12)
1581
+ value.setHours(this.pm ? 12 : 0);
1582
+ else
1583
+ value.setHours(this.pm ? this.currentHour + 12 : this.currentHour);
1584
+ }
1585
+ else {
1586
+ value.setHours(this.currentHour);
1587
+ }
1588
+ value.setMinutes(this.currentMinute);
1589
+ value.setSeconds(this.currentSecond);
1590
+ if (this.isRangeSelection()) {
1591
+ if (this.value[1])
1592
+ value = [this.value[0], value];
1593
+ else
1594
+ value = [value, null];
1595
+ }
1596
+ if (this.isMultipleSelection()) {
1597
+ value = [...this.value.slice(0, -1), value];
1598
+ }
1599
+ this.updateModel(value);
1600
+ this.onSelect.emit(value);
1601
+ this.updateInputfield();
1602
+ }
1603
+ toggleAMPM(event) {
1604
+ const newPM = !this.pm;
1605
+ if (this.validateTime(this.currentHour, this.currentMinute, this.currentSecond, newPM)) {
1606
+ this.pm = newPM;
1607
+ this.updateTime();
1608
+ }
1609
+ event.preventDefault();
1610
+ }
1611
+ onUserInput(event) {
1612
+ // IE 11 Workaround for input placeholder : https://github.com/qius.solutions/parallel-ui-angular/issues/2026
1613
+ if (!this.isKeydown) {
1614
+ return;
1615
+ }
1616
+ this.isKeydown = false;
1617
+ let val = event.target.value;
1618
+ try {
1619
+ let value = this.parseValueFromString(val);
1620
+ if (this.isValidSelection(value)) {
1621
+ this.updateModel(value);
1622
+ this.updateUI();
1623
+ }
1624
+ }
1625
+ catch (err) {
1626
+ //invalid date
1627
+ let value = this.keepInvalid ? val : null;
1628
+ this.updateModel(value);
1629
+ }
1630
+ this.filled = val != null && val.length;
1631
+ this.onInput.emit(event);
1632
+ }
1633
+ isValidSelection(value) {
1634
+ let isValid = true;
1635
+ if (this.isSingleSelection()) {
1636
+ if (!this.isSelectable(value.getDate(), value.getMonth(), value.getFullYear(), false)) {
1637
+ isValid = false;
1638
+ }
1639
+ }
1640
+ else if (value.every((v) => this.isSelectable(v.getDate(), v.getMonth(), v.getFullYear(), false))) {
1641
+ if (this.isRangeSelection()) {
1642
+ isValid = value.length > 1 && value[1] > value[0] ? true : false;
1643
+ }
1644
+ }
1645
+ return isValid;
1646
+ }
1647
+ parseValueFromString(text) {
1648
+ if (!text || text.trim().length === 0) {
1649
+ return null;
1650
+ }
1651
+ let value;
1652
+ if (this.isSingleSelection()) {
1653
+ value = this.parseDateTime(text);
1654
+ }
1655
+ else if (this.isMultipleSelection()) {
1656
+ let tokens = text.split(this.multipleSeparator);
1657
+ value = [];
1658
+ for (let token of tokens) {
1659
+ value.push(this.parseDateTime(token.trim()));
1660
+ }
1661
+ }
1662
+ else if (this.isRangeSelection()) {
1663
+ let tokens = text.split(' ' + this.rangeSeparator + ' ');
1664
+ value = [];
1665
+ for (let i = 0; i < tokens.length; i++) {
1666
+ value[i] = this.parseDateTime(tokens[i].trim());
1667
+ }
1668
+ }
1669
+ return value;
1670
+ }
1671
+ parseDateTime(text) {
1672
+ let date;
1673
+ let parts = text.split(' ');
1674
+ if (this.timeOnly) {
1675
+ date = new Date();
1676
+ this.populateTime(date, parts[0], parts[1]);
1677
+ }
1678
+ else {
1679
+ const dateFormat = this.getDateFormat();
1680
+ if (this.showTime) {
1681
+ let ampm = this.hourFormat == '12' ? parts.pop() : null;
1682
+ let timeString = parts.pop();
1683
+ date = this.parseDate(parts.join(' '), dateFormat);
1684
+ this.populateTime(date, timeString, ampm);
1685
+ }
1686
+ else {
1687
+ date = this.parseDate(text, dateFormat);
1688
+ }
1689
+ }
1690
+ return date;
1691
+ }
1692
+ populateTime(value, timeString, ampm) {
1693
+ if (this.hourFormat == '12' && !ampm) {
1694
+ throw 'Invalid Time';
1695
+ }
1696
+ this.pm = ampm === 'PM' || ampm === 'pm';
1697
+ let time = this.parseTime(timeString);
1698
+ value.setHours(time.hour);
1699
+ value.setMinutes(time.minute);
1700
+ value.setSeconds(time.second);
1701
+ }
1702
+ isValidDate(date) {
1703
+ return ObjectUtils.isDate(date) && ObjectUtils.isNotEmpty(date);
1704
+ }
1705
+ updateUI() {
1706
+ let propValue = this.value;
1707
+ if (Array.isArray(propValue)) {
1708
+ propValue = propValue[0];
1709
+ }
1710
+ let val = this.defaultDate && this.isValidDate(this.defaultDate) && !this.value ? this.defaultDate : propValue && this.isValidDate(propValue) ? propValue : new Date();
1711
+ this.currentMonth = val.getMonth();
1712
+ this.currentYear = val.getFullYear();
1713
+ this.createMonths(this.currentMonth, this.currentYear);
1714
+ if (this.showTime || this.timeOnly) {
1715
+ this.setCurrentHourPM(val.getHours());
1716
+ this.currentMinute = val.getMinutes();
1717
+ this.currentSecond = val.getSeconds();
1718
+ }
1719
+ }
1720
+ showOverlay() {
1721
+ if (!this.overlayVisible) {
1722
+ this.updateUI();
1723
+ if (!this.touchUI) {
1724
+ this.preventFocus = true;
1725
+ }
1726
+ this.overlayVisible = true;
1727
+ }
1728
+ }
1729
+ hideOverlay() {
1730
+ this.overlayVisible = false;
1731
+ this.clearTimePickerTimer();
1732
+ if (this.touchUI) {
1733
+ this.disableModality();
1734
+ }
1735
+ this.cd.markForCheck();
1736
+ }
1737
+ toggle() {
1738
+ if (!this.inline) {
1739
+ if (!this.overlayVisible) {
1740
+ this.showOverlay();
1741
+ this.inputfieldViewChild.nativeElement.focus();
1742
+ }
1743
+ else {
1744
+ this.hideOverlay();
1745
+ }
1746
+ }
1747
+ }
1748
+ onOverlayAnimationStart(event) {
1749
+ switch (event.toState) {
1750
+ case 'visible':
1751
+ case 'visibleTouchUI':
1752
+ if (!this.inline) {
1753
+ this.overlay = event.element;
1754
+ this.overlay.setAttribute(this.attributeSelector, '');
1755
+ this.appendOverlay();
1756
+ this.updateFocus();
1757
+ if (this.autoZIndex) {
1758
+ if (this.touchUI)
1759
+ ZIndexUtils.set('modal', this.overlay, this.baseZIndex || this.config.zIndex.modal);
1760
+ else
1761
+ ZIndexUtils.set('overlay', this.overlay, this.baseZIndex || this.config.zIndex.overlay);
1762
+ }
1763
+ this.alignOverlay();
1764
+ this.onShow.emit(event);
1765
+ }
1766
+ break;
1767
+ case 'void':
1768
+ this.onOverlayHide();
1769
+ this.onClose.emit(event);
1770
+ break;
1771
+ }
1772
+ }
1773
+ onOverlayAnimationDone(event) {
1774
+ switch (event.toState) {
1775
+ case 'visible':
1776
+ case 'visibleTouchUI':
1777
+ if (!this.inline) {
1778
+ this.bindDocumentClickListener();
1779
+ this.bindDocumentResizeListener();
1780
+ this.bindScrollListener();
1781
+ }
1782
+ break;
1783
+ case 'void':
1784
+ if (this.autoZIndex) {
1785
+ ZIndexUtils.clear(event.element);
1786
+ }
1787
+ break;
1788
+ }
1789
+ }
1790
+ appendOverlay() {
1791
+ if (this.appendTo) {
1792
+ if (this.appendTo === 'body')
1793
+ this.document.body.appendChild(this.overlay);
1794
+ else
1795
+ DomHandler.appendChild(this.overlay, this.appendTo);
1796
+ }
1797
+ }
1798
+ restoreOverlayAppend() {
1799
+ if (this.overlay && this.appendTo) {
1800
+ this.el.nativeElement.appendChild(this.overlay);
1801
+ }
1802
+ }
1803
+ alignOverlay() {
1804
+ if (this.touchUI) {
1805
+ this.enableModality(this.overlay);
1806
+ }
1807
+ else if (this.overlay) {
1808
+ if (this.appendTo) {
1809
+ if (this.view === 'date') {
1810
+ this.overlay.style.width = DomHandler.getOuterWidth(this.overlay) + 'px';
1811
+ this.overlay.style.minWidth = DomHandler.getOuterWidth(this.inputfieldViewChild.nativeElement) + 'px';
1812
+ }
1813
+ else {
1814
+ this.overlay.style.width = DomHandler.getOuterWidth(this.inputfieldViewChild.nativeElement) + 'px';
1815
+ }
1816
+ DomHandler.absolutePosition(this.overlay, this.inputfieldViewChild.nativeElement);
1817
+ }
1818
+ else {
1819
+ DomHandler.relativePosition(this.overlay, this.inputfieldViewChild.nativeElement);
1820
+ }
1821
+ }
1822
+ }
1823
+ enableModality(element) {
1824
+ if (!this.mask && this.touchUI) {
1825
+ this.mask = this.renderer.createElement('div');
1826
+ this.renderer.setStyle(this.mask, 'zIndex', String(parseInt(element.style.zIndex) - 1));
1827
+ let maskStyleClass = 'p-component-overlay p-datepicker-mask p-datepicker-mask-scrollblocker p-component-overlay p-component-overlay-enter';
1828
+ DomHandler.addMultipleClasses(this.mask, maskStyleClass);
1829
+ this.maskClickListener = this.renderer.listen(this.mask, 'click', (event) => {
1830
+ this.disableModality();
1831
+ });
1832
+ this.renderer.appendChild(this.document.body, this.mask);
1833
+ DomHandler.addClass(this.document.body, 'p-overflow-hidden');
1834
+ }
1835
+ }
1836
+ disableModality() {
1837
+ if (this.mask) {
1838
+ DomHandler.addClass(this.mask, 'p-component-overlay-leave');
1839
+ if (!this.animationEndListener) {
1840
+ this.animationEndListener = this.renderer.listen(this.mask, 'animationend', this.destroyMask.bind(this));
1841
+ }
1842
+ }
1843
+ }
1844
+ destroyMask() {
1845
+ if (!this.mask) {
1846
+ return;
1847
+ }
1848
+ this.renderer.removeChild(this.document.body, this.mask);
1849
+ let bodyChildren = this.document.body.children;
1850
+ let hasBlockerMasks;
1851
+ for (let i = 0; i < bodyChildren.length; i++) {
1852
+ let bodyChild = bodyChildren[i];
1853
+ if (DomHandler.hasClass(bodyChild, 'p-datepicker-mask-scrollblocker')) {
1854
+ hasBlockerMasks = true;
1855
+ break;
1856
+ }
1857
+ }
1858
+ if (!hasBlockerMasks) {
1859
+ DomHandler.removeClass(this.document.body, 'p-overflow-hidden');
1860
+ }
1861
+ this.unbindAnimationEndListener();
1862
+ this.unbindMaskClickListener();
1863
+ this.mask = null;
1864
+ }
1865
+ unbindMaskClickListener() {
1866
+ if (this.maskClickListener) {
1867
+ this.maskClickListener();
1868
+ this.maskClickListener = null;
1869
+ }
1870
+ }
1871
+ unbindAnimationEndListener() {
1872
+ if (this.animationEndListener && this.mask) {
1873
+ this.animationEndListener();
1874
+ this.animationEndListener = null;
1875
+ }
1876
+ }
1877
+ writeValue(value) {
1878
+ this.value = value;
1879
+ if (this.value && typeof this.value === 'string') {
1880
+ try {
1881
+ this.value = this.parseValueFromString(this.value);
1882
+ }
1883
+ catch {
1884
+ if (this.keepInvalid) {
1885
+ this.value = value;
1886
+ }
1887
+ }
1888
+ }
1889
+ this.updateInputfield();
1890
+ this.updateUI();
1891
+ this.cd.markForCheck();
1892
+ }
1893
+ registerOnChange(fn) {
1894
+ this.onModelChange = fn;
1895
+ }
1896
+ registerOnTouched(fn) {
1897
+ this.onModelTouched = fn;
1898
+ }
1899
+ setDisabledState(val) {
1900
+ this.disabled = val;
1901
+ this.cd.markForCheck();
1902
+ }
1903
+ getDateFormat() {
1904
+ return this.dateFormat || this.getTranslation('dateFormat');
1905
+ }
1906
+ getFirstDateOfWeek() {
1907
+ return this._firstDayOfWeek || this.getTranslation(TranslationKeys.FIRST_DAY_OF_WEEK);
1908
+ }
1909
+ // Ported from jquery-ui datepicker formatDate
1910
+ formatDate(date, format) {
1911
+ if (!date) {
1912
+ return '';
1913
+ }
1914
+ let iFormat;
1915
+ const lookAhead = (match) => {
1916
+ const matches = iFormat + 1 < format.length && format.charAt(iFormat + 1) === match;
1917
+ if (matches) {
1918
+ iFormat++;
1919
+ }
1920
+ return matches;
1921
+ }, formatNumber = (match, value, len) => {
1922
+ let num = '' + value;
1923
+ if (lookAhead(match)) {
1924
+ while (num.length < len) {
1925
+ num = '0' + num;
1926
+ }
1927
+ }
1928
+ return num;
1929
+ }, formatName = (match, value, shortNames, longNames) => {
1930
+ return lookAhead(match) ? longNames[value] : shortNames[value];
1931
+ };
1932
+ let output = '';
1933
+ let literal = false;
1934
+ if (date) {
1935
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
1936
+ if (literal) {
1937
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
1938
+ literal = false;
1939
+ }
1940
+ else {
1941
+ output += format.charAt(iFormat);
1942
+ }
1943
+ }
1944
+ else {
1945
+ switch (format.charAt(iFormat)) {
1946
+ case 'd':
1947
+ output += formatNumber('d', date.getDate(), 2);
1948
+ break;
1949
+ case 'D':
1950
+ output += formatName('D', date.getDay(), this.getTranslation(TranslationKeys.DAY_NAMES_SHORT), this.getTranslation(TranslationKeys.DAY_NAMES));
1951
+ break;
1952
+ case 'o':
1953
+ output += formatNumber('o', Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
1954
+ break;
1955
+ case 'm':
1956
+ output += formatNumber('m', date.getMonth() + 1, 2);
1957
+ break;
1958
+ case 'M':
1959
+ output += formatName('M', date.getMonth(), this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT), this.getTranslation(TranslationKeys.MONTH_NAMES));
1960
+ break;
1961
+ case 'y':
1962
+ output += lookAhead('y') ? date.getFullYear() : (date.getFullYear() % 100 < 10 ? '0' : '') + (date.getFullYear() % 100);
1963
+ break;
1964
+ case '@':
1965
+ output += date.getTime();
1966
+ break;
1967
+ case '!':
1968
+ output += date.getTime() * 10000 + this.ticksTo1970;
1969
+ break;
1970
+ case "'":
1971
+ if (lookAhead("'")) {
1972
+ output += "'";
1973
+ }
1974
+ else {
1975
+ literal = true;
1976
+ }
1977
+ break;
1978
+ default:
1979
+ output += format.charAt(iFormat);
1980
+ }
1981
+ }
1982
+ }
1983
+ }
1984
+ return output;
1985
+ }
1986
+ formatTime(date) {
1987
+ if (!date) {
1988
+ return '';
1989
+ }
1990
+ let output = '';
1991
+ let hours = date.getHours();
1992
+ let minutes = date.getMinutes();
1993
+ let seconds = date.getSeconds();
1994
+ if (this.hourFormat == '12' && hours > 11 && hours != 12) {
1995
+ hours -= 12;
1996
+ }
1997
+ if (this.hourFormat == '12') {
1998
+ output += hours === 0 ? 12 : hours < 10 ? '0' + hours : hours;
1999
+ }
2000
+ else {
2001
+ output += hours < 10 ? '0' + hours : hours;
2002
+ }
2003
+ output += ':';
2004
+ output += minutes < 10 ? '0' + minutes : minutes;
2005
+ if (this.showSeconds) {
2006
+ output += ':';
2007
+ output += seconds < 10 ? '0' + seconds : seconds;
2008
+ }
2009
+ if (this.hourFormat == '12') {
2010
+ output += date.getHours() > 11 ? ' PM' : ' AM';
2011
+ }
2012
+ return output;
2013
+ }
2014
+ parseTime(value) {
2015
+ let tokens = value.split(':');
2016
+ let validTokenLength = this.showSeconds ? 3 : 2;
2017
+ if (tokens.length !== validTokenLength) {
2018
+ throw 'Invalid time';
2019
+ }
2020
+ let h = parseInt(tokens[0]);
2021
+ let m = parseInt(tokens[1]);
2022
+ let s = this.showSeconds ? parseInt(tokens[2]) : null;
2023
+ if (isNaN(h) || isNaN(m) || h > 23 || m > 59 || (this.hourFormat == '12' && h > 12) || (this.showSeconds && (isNaN(s) || s > 59))) {
2024
+ throw 'Invalid time';
2025
+ }
2026
+ else {
2027
+ if (this.hourFormat == '12') {
2028
+ if (h !== 12 && this.pm) {
2029
+ h += 12;
2030
+ }
2031
+ else if (!this.pm && h === 12) {
2032
+ h -= 12;
2033
+ }
2034
+ }
2035
+ return { hour: h, minute: m, second: s };
2036
+ }
2037
+ }
2038
+ // Ported from jquery-ui datepicker parseDate
2039
+ parseDate(value, format) {
2040
+ if (format == null || value == null) {
2041
+ throw 'Invalid arguments';
2042
+ }
2043
+ value = typeof value === 'object' ? value.toString() : value + '';
2044
+ if (value === '') {
2045
+ return null;
2046
+ }
2047
+ let iFormat, dim, extra, iValue = 0, shortYearCutoff = typeof this.shortYearCutoff !== 'string' ? this.shortYearCutoff : (new Date().getFullYear() % 100) + parseInt(this.shortYearCutoff, 10), year = -1, month = -1, day = -1, doy = -1, literal = false, date, lookAhead = (match) => {
2048
+ let matches = iFormat + 1 < format.length && format.charAt(iFormat + 1) === match;
2049
+ if (matches) {
2050
+ iFormat++;
2051
+ }
2052
+ return matches;
2053
+ }, getNumber = (match) => {
2054
+ let isDoubled = lookAhead(match), size = match === '@' ? 14 : match === '!' ? 20 : match === 'y' && isDoubled ? 4 : match === 'o' ? 3 : 2, minSize = match === 'y' ? size : 1, digits = new RegExp('^\\d{' + minSize + ',' + size + '}'), num = value.substring(iValue).match(digits);
2055
+ if (!num) {
2056
+ throw 'Missing number at position ' + iValue;
2057
+ }
2058
+ iValue += num[0].length;
2059
+ return parseInt(num[0], 10);
2060
+ }, getName = (match, shortNames, longNames) => {
2061
+ let index = -1;
2062
+ let arr = lookAhead(match) ? longNames : shortNames;
2063
+ let names = [];
2064
+ for (let i = 0; i < arr.length; i++) {
2065
+ names.push([i, arr[i]]);
2066
+ }
2067
+ names.sort((a, b) => {
2068
+ return -(a[1].length - b[1].length);
2069
+ });
2070
+ for (let i = 0; i < names.length; i++) {
2071
+ let name = names[i][1];
2072
+ if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
2073
+ index = names[i][0];
2074
+ iValue += name.length;
2075
+ break;
2076
+ }
2077
+ }
2078
+ if (index !== -1) {
2079
+ return index + 1;
2080
+ }
2081
+ else {
2082
+ throw 'Unknown name at position ' + iValue;
2083
+ }
2084
+ }, checkLiteral = () => {
2085
+ if (value.charAt(iValue) !== format.charAt(iFormat)) {
2086
+ throw 'Unexpected literal at position ' + iValue;
2087
+ }
2088
+ iValue++;
2089
+ };
2090
+ if (this.view === 'month') {
2091
+ day = 1;
2092
+ }
2093
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
2094
+ if (literal) {
2095
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
2096
+ literal = false;
2097
+ }
2098
+ else {
2099
+ checkLiteral();
2100
+ }
2101
+ }
2102
+ else {
2103
+ switch (format.charAt(iFormat)) {
2104
+ case 'd':
2105
+ day = getNumber('d');
2106
+ break;
2107
+ case 'D':
2108
+ getName('D', this.getTranslation(TranslationKeys.DAY_NAMES_SHORT), this.getTranslation(TranslationKeys.DAY_NAMES));
2109
+ break;
2110
+ case 'o':
2111
+ doy = getNumber('o');
2112
+ break;
2113
+ case 'm':
2114
+ month = getNumber('m');
2115
+ break;
2116
+ case 'M':
2117
+ month = getName('M', this.getTranslation(TranslationKeys.MONTH_NAMES_SHORT), this.getTranslation(TranslationKeys.MONTH_NAMES));
2118
+ break;
2119
+ case 'y':
2120
+ year = getNumber('y');
2121
+ break;
2122
+ case '@':
2123
+ date = new Date(getNumber('@'));
2124
+ year = date.getFullYear();
2125
+ month = date.getMonth() + 1;
2126
+ day = date.getDate();
2127
+ break;
2128
+ case '!':
2129
+ date = new Date((getNumber('!') - this.ticksTo1970) / 10000);
2130
+ year = date.getFullYear();
2131
+ month = date.getMonth() + 1;
2132
+ day = date.getDate();
2133
+ break;
2134
+ case "'":
2135
+ if (lookAhead("'")) {
2136
+ checkLiteral();
2137
+ }
2138
+ else {
2139
+ literal = true;
2140
+ }
2141
+ break;
2142
+ default:
2143
+ checkLiteral();
2144
+ }
2145
+ }
2146
+ }
2147
+ if (iValue < value.length) {
2148
+ extra = value.substr(iValue);
2149
+ if (!/^\s+/.test(extra)) {
2150
+ throw 'Extra/unparsed characters found in date: ' + extra;
2151
+ }
2152
+ }
2153
+ if (year === -1) {
2154
+ year = new Date().getFullYear();
2155
+ }
2156
+ else if (year < 100) {
2157
+ year += new Date().getFullYear() - (new Date().getFullYear() % 100) + (year <= shortYearCutoff ? 0 : -100);
2158
+ }
2159
+ if (doy > -1) {
2160
+ month = 1;
2161
+ day = doy;
2162
+ do {
2163
+ dim = this.getDaysCountInMonth(year, month - 1);
2164
+ if (day <= dim) {
2165
+ break;
2166
+ }
2167
+ month++;
2168
+ day -= dim;
2169
+ } while (true);
2170
+ }
2171
+ if (this.view === 'year') {
2172
+ month = month === -1 ? 1 : month;
2173
+ day = day === -1 ? 1 : day;
2174
+ }
2175
+ date = this.daylightSavingAdjust(new Date(year, month - 1, day));
2176
+ if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
2177
+ throw 'Invalid date'; // E.g. 31/02/00
2178
+ }
2179
+ return date;
2180
+ }
2181
+ daylightSavingAdjust(date) {
2182
+ if (!date) {
2183
+ return null;
2184
+ }
2185
+ date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
2186
+ return date;
2187
+ }
2188
+ updateFilledState() {
2189
+ this.filled = this.inputFieldValue && this.inputFieldValue != '';
2190
+ }
2191
+ onTodayButtonClick(event) {
2192
+ let date = new Date();
2193
+ let dateMeta = { day: date.getDate(), month: date.getMonth(), year: date.getFullYear(), otherMonth: date.getMonth() !== this.currentMonth || date.getFullYear() !== this.currentYear, today: true, selectable: true };
2194
+ this.onDateSelect(event, dateMeta);
2195
+ this.onTodayClick.emit(event);
2196
+ }
2197
+ onClearButtonClick(event) {
2198
+ this.updateModel(null);
2199
+ this.updateInputfield();
2200
+ this.hideOverlay();
2201
+ this.onClearClick.emit(event);
2202
+ }
2203
+ createResponsiveStyle() {
2204
+ if (this.numberOfMonths > 1 && this.responsiveOptions) {
2205
+ if (!this.responsiveStyleElement) {
2206
+ this.responsiveStyleElement = this.renderer.createElement('style');
2207
+ this.responsiveStyleElement.type = 'text/css';
2208
+ this.renderer.appendChild(this.document.body, this.responsiveStyleElement);
2209
+ }
2210
+ let innerHTML = '';
2211
+ if (this.responsiveOptions) {
2212
+ let responsiveOptions = [...this.responsiveOptions].filter((o) => !!(o.breakpoint && o.numMonths)).sort((o1, o2) => -1 * o1.breakpoint.localeCompare(o2.breakpoint, undefined, { numeric: true }));
2213
+ for (let i = 0; i < responsiveOptions.length; i++) {
2214
+ let { breakpoint, numMonths } = responsiveOptions[i];
2215
+ let styles = `
2216
+ .p-datepicker[${this.attributeSelector}] .p-datepicker-group:nth-child(${numMonths}) .p-datepicker-next {
2217
+ display: inline-flex !important;
2218
+ }
2219
+ `;
2220
+ for (let j = numMonths; j < this.numberOfMonths; j++) {
2221
+ styles += `
2222
+ .p-datepicker[${this.attributeSelector}] .p-datepicker-group:nth-child(${j + 1}) {
2223
+ display: none !important;
2224
+ }
2225
+ `;
2226
+ }
2227
+ innerHTML += `
2228
+ @media screen and (max-width: ${breakpoint}) {
2229
+ ${styles}
2230
+ }
2231
+ `;
2232
+ }
2233
+ }
2234
+ this.responsiveStyleElement.innerHTML = innerHTML;
2235
+ }
2236
+ }
2237
+ destroyResponsiveStyleElement() {
2238
+ if (this.responsiveStyleElement) {
2239
+ this.responsiveStyleElement.remove();
2240
+ this.responsiveStyleElement = null;
2241
+ }
2242
+ }
2243
+ bindDocumentClickListener() {
2244
+ if (!this.documentClickListener) {
2245
+ this.zone.runOutsideAngular(() => {
2246
+ const documentTarget = this.el ? this.el.nativeElement.ownerDocument : this.document;
2247
+ this.documentClickListener = this.renderer.listen(documentTarget, 'mousedown', (event) => {
2248
+ if (this.isOutsideClicked(event) && this.overlayVisible) {
2249
+ this.zone.run(() => {
2250
+ this.hideOverlay();
2251
+ this.onClickOutside.emit(event);
2252
+ this.cd.markForCheck();
2253
+ });
2254
+ }
2255
+ });
2256
+ });
2257
+ }
2258
+ }
2259
+ unbindDocumentClickListener() {
2260
+ if (this.documentClickListener) {
2261
+ this.documentClickListener();
2262
+ this.documentClickListener = null;
2263
+ }
2264
+ }
2265
+ bindDocumentResizeListener() {
2266
+ if (!this.documentResizeListener && !this.touchUI) {
2267
+ this.documentResizeListener = this.renderer.listen(this.window, 'resize', this.onWindowResize.bind(this));
2268
+ }
2269
+ }
2270
+ unbindDocumentResizeListener() {
2271
+ if (this.documentResizeListener) {
2272
+ this.documentResizeListener();
2273
+ this.documentResizeListener = null;
2274
+ }
2275
+ }
2276
+ bindScrollListener() {
2277
+ if (!this.scrollHandler) {
2278
+ this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, () => {
2279
+ if (this.overlayVisible) {
2280
+ this.hideOverlay();
2281
+ }
2282
+ });
2283
+ }
2284
+ this.scrollHandler.bindScrollListener();
2285
+ }
2286
+ unbindScrollListener() {
2287
+ if (this.scrollHandler) {
2288
+ this.scrollHandler.unbindScrollListener();
2289
+ }
2290
+ }
2291
+ isOutsideClicked(event) {
2292
+ return !(this.el.nativeElement.isSameNode(event.target) || this.isNavIconClicked(event) || this.el.nativeElement.contains(event.target) || (this.overlay && this.overlay.contains(event.target)));
2293
+ }
2294
+ isNavIconClicked(event) {
2295
+ return (DomHandler.hasClass(event.target, 'p-datepicker-prev') || DomHandler.hasClass(event.target, 'p-datepicker-prev-icon') || DomHandler.hasClass(event.target, 'p-datepicker-next') || DomHandler.hasClass(event.target, 'p-datepicker-next-icon'));
2296
+ }
2297
+ onWindowResize() {
2298
+ if (this.overlayVisible && !DomHandler.isTouchDevice()) {
2299
+ this.hideOverlay();
2300
+ }
2301
+ }
2302
+ onOverlayHide() {
2303
+ this.currentView = this.view;
2304
+ if (this.mask) {
2305
+ this.destroyMask();
2306
+ }
2307
+ this.unbindDocumentClickListener();
2308
+ this.unbindDocumentResizeListener();
2309
+ this.unbindScrollListener();
2310
+ this.overlay = null;
2311
+ this.onModelTouched();
2312
+ }
2313
+ ngOnDestroy() {
2314
+ if (this.scrollHandler) {
2315
+ this.scrollHandler.destroy();
2316
+ this.scrollHandler = null;
2317
+ }
2318
+ if (this.translationSubscription) {
2319
+ this.translationSubscription.unsubscribe();
2320
+ }
2321
+ if (this.overlay && this.autoZIndex) {
2322
+ ZIndexUtils.clear(this.overlay);
2323
+ }
2324
+ this.destroyResponsiveStyleElement();
2325
+ this.clearTimePickerTimer();
2326
+ this.restoreOverlayAppend();
2327
+ this.onOverlayHide();
2328
+ }
2329
+ }
2330
+ Calendar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Calendar, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.ParallelUIAngularConfig }, { token: i1.OverlayService }], target: i0.ɵɵFactoryTarget.Component });
2331
+ Calendar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: Calendar, selector: "p-calendar", inputs: { style: "style", styleClass: "styleClass", inputStyle: "inputStyle", inputId: "inputId", name: "name", inputStyleClass: "inputStyleClass", placeholder: "placeholder", ariaLabelledBy: "ariaLabelledBy", iconAriaLabel: "iconAriaLabel", disabled: "disabled", dateFormat: "dateFormat", multipleSeparator: "multipleSeparator", rangeSeparator: "rangeSeparator", inline: "inline", showOtherMonths: "showOtherMonths", selectOtherMonths: "selectOtherMonths", showIcon: "showIcon", icon: "icon", appendTo: "appendTo", readonlyInput: "readonlyInput", shortYearCutoff: "shortYearCutoff", monthNavigator: "monthNavigator", yearNavigator: "yearNavigator", hourFormat: "hourFormat", timeOnly: "timeOnly", stepHour: "stepHour", stepMinute: "stepMinute", stepSecond: "stepSecond", showSeconds: "showSeconds", required: "required", showOnFocus: "showOnFocus", showWeek: "showWeek", showClear: "showClear", dataType: "dataType", selectionMode: "selectionMode", maxDateCount: "maxDateCount", showButtonBar: "showButtonBar", todayButtonStyleClass: "todayButtonStyleClass", clearButtonStyleClass: "clearButtonStyleClass", autoZIndex: "autoZIndex", baseZIndex: "baseZIndex", panelStyleClass: "panelStyleClass", panelStyle: "panelStyle", keepInvalid: "keepInvalid", hideOnDateTimeSelect: "hideOnDateTimeSelect", touchUI: "touchUI", timeSeparator: "timeSeparator", focusTrap: "focusTrap", showTransitionOptions: "showTransitionOptions", hideTransitionOptions: "hideTransitionOptions", tabindex: "tabindex", view: "view", defaultDate: "defaultDate", minDate: "minDate", maxDate: "maxDate", disabledDates: "disabledDates", disabledDays: "disabledDays", yearRange: "yearRange", showTime: "showTime", responsiveOptions: "responsiveOptions", numberOfMonths: "numberOfMonths", firstDayOfWeek: "firstDayOfWeek", locale: "locale" }, outputs: { onFocus: "onFocus", onBlur: "onBlur", onClose: "onClose", onSelect: "onSelect", onClear: "onClear", onInput: "onInput", onTodayClick: "onTodayClick", onClearClick: "onClearClick", onMonthChange: "onMonthChange", onYearChange: "onYearChange", onClickOutside: "onClickOutside", onShow: "onShow" }, host: { properties: { "class.p-inputwrapper-filled": "filled", "class.p-inputwrapper-focus": "focus", "class.p-calendar-clearable": "showClear && !disabled" }, classAttribute: "p-element p-inputwrapper" }, providers: [CALENDAR_VALUE_ACCESSOR], queries: [{ propertyName: "templates", predicate: QiusTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "inputfieldViewChild", first: true, predicate: ["inputfield"], descendants: true }, { propertyName: "content", first: true, predicate: ["contentWrapper"], descendants: true }], ngImport: i0, template: `
2332
+ <span #container [ngClass]="{ 'p-calendar': true, 'p-calendar-w-btn': showIcon, 'p-calendar-timeonly': timeOnly, 'p-calendar-disabled': disabled, 'p-focus': focus }" [ngStyle]="style" [class]="styleClass">
2333
+ <ng-template [ngIf]="!inline">
2334
+ <input
2335
+ #inputfield
2336
+ type="text"
2337
+ [attr.id]="inputId"
2338
+ [attr.name]="name"
2339
+ [attr.required]="required"
2340
+ [attr.aria-required]="required"
2341
+ [value]="inputFieldValue"
2342
+ (focus)="onInputFocus($event)"
2343
+ (keydown)="onInputKeydown($event)"
2344
+ (click)="onInputClick()"
2345
+ (blur)="onInputBlur($event)"
2346
+ [readonly]="readonlyInput"
2347
+ (input)="onUserInput($event)"
2348
+ [ngStyle]="inputStyle"
2349
+ [class]="inputStyleClass"
2350
+ [placeholder]="placeholder || ''"
2351
+ [disabled]="disabled"
2352
+ [attr.tabindex]="tabindex"
2353
+ [attr.inputmode]="touchUI ? 'off' : null"
2354
+ [ngClass]="'p-inputtext p-component'"
2355
+ autocomplete="off"
2356
+ [attr.aria-labelledby]="ariaLabelledBy"
2357
+ />
2358
+ <ng-container *ngIf="showClear && !disabled && value != null">
2359
+ <TimesIcon *ngIf="!clearIconTemplate" [styleClass]="'p-calendar-clear-icon'" (click)="clear()"/>
2360
+ <span *ngIf="clearIconTemplate" class="p-calendar-clear-icon" (click)="clear()">
2361
+ <ng-template *ngTemplateOutlet="clearIconTemplate"></ng-template>
2362
+ </span>
2363
+ </ng-container>
2364
+ <button type="button" [attr.aria-label]="iconAriaLabel" pButton pRipple *ngIf="showIcon" (click)="onButtonClick($event, inputfield)" class="p-datepicker-trigger p-button-icon-only" [disabled]="disabled" tabindex="0">
2365
+ <span *ngIf="icon" [ngClass]="icon"></span>
2366
+ <ng-container *ngIf="!icon">
2367
+ <CalendarIcon *ngIf="!triggerIconTemplate"/>
2368
+ <ng-template *ngTemplateOutlet="triggerIconTemplate"></ng-template>
2369
+ </ng-container>
2370
+ </button>
2371
+ </ng-template>
2372
+ <div
2373
+ #contentWrapper
2374
+ [class]="panelStyleClass"
2375
+ [ngStyle]="panelStyle"
2376
+ [ngClass]="{
2377
+ 'p-datepicker p-component': true,
2378
+ 'p-datepicker-inline': inline,
2379
+ 'p-disabled': disabled,
2380
+ 'p-datepicker-timeonly': timeOnly,
2381
+ 'p-datepicker-multiple-month': this.numberOfMonths > 1,
2382
+ 'p-datepicker-monthpicker': view === 'month',
2383
+ 'p-datepicker-touch-ui': touchUI
2384
+ }"
2385
+ [@overlayAnimation]="
2386
+ touchUI
2387
+ ? { value: 'visibleTouchUI', params: { showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions } }
2388
+ : { value: 'visible', params: { showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions } }
2389
+ "
2390
+ [@.disabled]="inline === true"
2391
+ (@overlayAnimation.start)="onOverlayAnimationStart($event)"
2392
+ (@overlayAnimation.done)="onOverlayAnimationDone($event)"
2393
+ (click)="onOverlayClick($event)"
2394
+ *ngIf="inline || overlayVisible"
2395
+ >
2396
+ <ng-content select="p-header"></ng-content>
2397
+ <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
2398
+ <ng-container *ngIf="!timeOnly">
2399
+ <div class="p-datepicker-group-container">
2400
+ <div class="p-datepicker-group" *ngFor="let month of months; let i = index">
2401
+ <div class="p-datepicker-header">
2402
+ <button (keydown)="onContainerButtonKeydown($event)" class="p-datepicker-prev p-link" (click)="onPrevButtonClick($event)" *ngIf="i === 0" type="button" pRipple>
2403
+ <ChevronLeftIcon [styleClass]="'p-datepicker-prev-icon'" *ngIf="!previousIconTemplate" />
2404
+ <span *ngIf="previousIconTemplate" class="p-datepicker-prev-icon">
2405
+ <ng-template *ngTemplateOutlet="previousIconTemplate;"></ng-template>
2406
+ </span>
2407
+ </button>
2408
+ <div class="p-datepicker-title">
2409
+ <button type="button" (click)="switchToMonthView($event)" (keydown)="onContainerButtonKeydown($event)" *ngIf="currentView === 'date'" class="p-datepicker-month p-link" [disabled]="switchViewButtonDisabled()">
2410
+ {{ getMonthName(month.month) }}
2411
+ </button>
2412
+ <button type="button" (click)="switchToYearView($event)" (keydown)="onContainerButtonKeydown($event)" *ngIf="currentView !== 'year'" class="p-datepicker-year p-link" [disabled]="switchViewButtonDisabled()">
2413
+ {{ getYear(month) }}
2414
+ </button>
2415
+ <span class="p-datepicker-decade" *ngIf="currentView === 'year'">
2416
+ <ng-container *ngIf="!decadeTemplate">{{ yearPickerValues()[0] }} - {{ yearPickerValues()[yearPickerValues().length - 1] }}</ng-container>
2417
+ <ng-container *ngTemplateOutlet="decadeTemplate; context: { $implicit: yearPickerValues }"></ng-container>
2418
+ </span>
2419
+ </div>
2420
+ <button
2421
+ (keydown)="onContainerButtonKeydown($event)"
2422
+ class="p-datepicker-next p-link"
2423
+ (click)="onNextButtonClick($event)"
2424
+ [style.display]="numberOfMonths === 1 ? 'inline-flex' : i === numberOfMonths - 1 ? 'inline-flex' : 'none'"
2425
+ type="button"
2426
+ pRipple
2427
+ >
2428
+ <ChevronRightIcon [styleClass]="'p-datepicker-next-icon'" *ngIf="!nextIconTemplate"/>
2429
+ <span *ngIf="nextIconTemplate" class="p-datepicker-next-icon">
2430
+ <ng-template *ngTemplateOutlet="nextIconTemplate;"></ng-template>
2431
+ </span>
2432
+ </button>
2433
+ </div>
2434
+ <div class="p-datepicker-calendar-container" *ngIf="currentView === 'date'">
2435
+ <table class="p-datepicker-calendar">
2436
+ <thead>
2437
+ <tr>
2438
+ <th *ngIf="showWeek" class="p-datepicker-weekheader p-disabled">
2439
+ <span>{{ getTranslation('weekHeader') }}</span>
2440
+ </th>
2441
+ <th scope="col" *ngFor="let weekDay of weekDays; let begin = first; let end = last">
2442
+ <span>{{ weekDay }}</span>
2443
+ </th>
2444
+ </tr>
2445
+ </thead>
2446
+ <tbody>
2447
+ <tr *ngFor="let week of month.dates; let j = index">
2448
+ <td *ngIf="showWeek" class="p-datepicker-weeknumber">
2449
+ <span class="p-disabled">
2450
+ {{ month.weekNumbers[j] }}
2451
+ </span>
2452
+ </td>
2453
+ <td *ngFor="let date of week" [ngClass]="{ 'p-datepicker-other-month': date.otherMonth, 'p-datepicker-today': date.today }">
2454
+ <ng-container *ngIf="date.otherMonth ? showOtherMonths : true">
2455
+ <span [ngClass]="{ 'p-highlight': isSelected(date), 'p-disabled': !date.selectable }" (click)="onDateSelect($event, date)" draggable="false" (keydown)="onDateCellKeydown($event, date, i)" pRipple>
2456
+ <ng-container *ngIf="!dateTemplate">{{ date.day }}</ng-container>
2457
+ <ng-container *ngTemplateOutlet="dateTemplate; context: { $implicit: date }"></ng-container>
2458
+ </span>
2459
+ </ng-container>
2460
+ </td>
2461
+ </tr>
2462
+ </tbody>
2463
+ </table>
2464
+ </div>
2465
+ </div>
2466
+ </div>
2467
+ <div class="p-monthpicker" *ngIf="currentView === 'month'">
2468
+ <span
2469
+ *ngFor="let m of monthPickerValues(); let i = index"
2470
+ (click)="onMonthSelect($event, i)"
2471
+ (keydown)="onMonthCellKeydown($event, i)"
2472
+ class="p-monthpicker-month"
2473
+ [ngClass]="{ 'p-highlight': isMonthSelected(i), 'p-disabled': isMonthDisabled(i) }"
2474
+ pRipple
2475
+ >
2476
+ {{ m }}
2477
+ </span>
2478
+ </div>
2479
+ <div class="p-yearpicker" *ngIf="currentView === 'year'">
2480
+ <span *ngFor="let y of yearPickerValues()" (click)="onYearSelect($event, y)" (keydown)="onYearCellKeydown($event, y)" class="p-yearpicker-year" [ngClass]="{ 'p-highlight': isYearSelected(y) }" pRipple>
2481
+ {{ y }}
2482
+ </span>
2483
+ </div>
2484
+ </ng-container>
2485
+ <div class="p-timepicker" *ngIf="(showTime || timeOnly) && currentView === 'date'">
2486
+ <div class="p-hour-picker">
2487
+ <button
2488
+ class="p-link"
2489
+ type="button"
2490
+ (keydown)="onContainerButtonKeydown($event)"
2491
+ (keydown.enter)="incrementHour($event)"
2492
+ (keydown.space)="incrementHour($event)"
2493
+ (mousedown)="onTimePickerElementMouseDown($event, 0, 1)"
2494
+ (mouseup)="onTimePickerElementMouseUp($event)"
2495
+ (keyup.enter)="onTimePickerElementMouseUp($event)"
2496
+ (keyup.space)="onTimePickerElementMouseUp($event)"
2497
+ (mouseleave)="onTimePickerElementMouseLeave()"
2498
+ pRipple
2499
+ >
2500
+ <ChevronUpIcon *ngIf="!incrementIconTemplate"/>
2501
+ <ng-template *ngTemplateOutlet="incrementIconTemplate"></ng-template>
2502
+ </button>
2503
+ <span><ng-container *ngIf="currentHour < 10">0</ng-container>{{ currentHour }}</span>
2504
+ <button
2505
+ class="p-link"
2506
+ type="button"
2507
+ (keydown)="onContainerButtonKeydown($event)"
2508
+ (keydown.enter)="decrementHour($event)"
2509
+ (keydown.space)="decrementHour($event)"
2510
+ (mousedown)="onTimePickerElementMouseDown($event, 0, -1)"
2511
+ (mouseup)="onTimePickerElementMouseUp($event)"
2512
+ (keyup.enter)="onTimePickerElementMouseUp($event)"
2513
+ (keyup.space)="onTimePickerElementMouseUp($event)"
2514
+ (mouseleave)="onTimePickerElementMouseLeave()"
2515
+ pRipple
2516
+ >
2517
+ <ChevronDownIcon *ngIf="!decrementIconTemplate"/>
2518
+ <ng-template *ngTemplateOutlet="decrementIconTemplate"></ng-template>
2519
+ </button>
2520
+ </div>
2521
+ <div class="p-separator">
2522
+ <span>{{ timeSeparator }}</span>
2523
+ </div>
2524
+ <div class="p-minute-picker">
2525
+ <button
2526
+ class="p-link"
2527
+ type="button"
2528
+ (keydown)="onContainerButtonKeydown($event)"
2529
+ (keydown.enter)="incrementMinute($event)"
2530
+ (keydown.space)="incrementMinute($event)"
2531
+ (mousedown)="onTimePickerElementMouseDown($event, 1, 1)"
2532
+ (mouseup)="onTimePickerElementMouseUp($event)"
2533
+ (keyup.enter)="onTimePickerElementMouseUp($event)"
2534
+ (keyup.space)="onTimePickerElementMouseUp($event)"
2535
+ (mouseleave)="onTimePickerElementMouseLeave()"
2536
+ pRipple
2537
+ >
2538
+ <ChevronUpIcon *ngIf="!incrementIconTemplate"/>
2539
+ <ng-template *ngTemplateOutlet="incrementIconTemplate"></ng-template>
2540
+ </button>
2541
+ <span><ng-container *ngIf="currentMinute < 10">0</ng-container>{{ currentMinute }}</span>
2542
+ <button
2543
+ class="p-link"
2544
+ type="button"
2545
+ (keydown)="onContainerButtonKeydown($event)"
2546
+ (keydown.enter)="decrementMinute($event)"
2547
+ (keydown.space)="decrementMinute($event)"
2548
+ (mousedown)="onTimePickerElementMouseDown($event, 1, -1)"
2549
+ (mouseup)="onTimePickerElementMouseUp($event)"
2550
+ (keyup.enter)="onTimePickerElementMouseUp($event)"
2551
+ (keyup.space)="onTimePickerElementMouseUp($event)"
2552
+ (mouseleave)="onTimePickerElementMouseLeave()"
2553
+ pRipple
2554
+ >
2555
+ <ChevronDownIcon *ngIf="!decrementIconTemplate"/>
2556
+ <ng-template *ngTemplateOutlet="decrementIconTemplate"></ng-template>
2557
+ </button>
2558
+ </div>
2559
+ <div class="p-separator" *ngIf="showSeconds">
2560
+ <span>{{ timeSeparator }}</span>
2561
+ </div>
2562
+ <div class="p-second-picker" *ngIf="showSeconds">
2563
+ <button
2564
+ class="p-link"
2565
+ type="button"
2566
+ (keydown)="onContainerButtonKeydown($event)"
2567
+ (keydown.enter)="incrementSecond($event)"
2568
+ (keydown.space)="incrementSecond($event)"
2569
+ (mousedown)="onTimePickerElementMouseDown($event, 2, 1)"
2570
+ (mouseup)="onTimePickerElementMouseUp($event)"
2571
+ (keyup.enter)="onTimePickerElementMouseUp($event)"
2572
+ (keyup.space)="onTimePickerElementMouseUp($event)"
2573
+ (mouseleave)="onTimePickerElementMouseLeave()"
2574
+ pRipple
2575
+ >
2576
+ <ChevronUpIcon *ngIf="!incrementIconTemplate"/>
2577
+ <ng-template *ngTemplateOutlet="incrementIconTemplate"></ng-template>
2578
+ </button>
2579
+ <span><ng-container *ngIf="currentSecond < 10">0</ng-container>{{ currentSecond }}</span>
2580
+ <button
2581
+ class="p-link"
2582
+ type="button"
2583
+ (keydown)="onContainerButtonKeydown($event)"
2584
+ (keydown.enter)="decrementSecond($event)"
2585
+ (keydown.space)="decrementSecond($event)"
2586
+ (mousedown)="onTimePickerElementMouseDown($event, 2, -1)"
2587
+ (mouseup)="onTimePickerElementMouseUp($event)"
2588
+ (keyup.enter)="onTimePickerElementMouseUp($event)"
2589
+ (keyup.space)="onTimePickerElementMouseUp($event)"
2590
+ (mouseleave)="onTimePickerElementMouseLeave()"
2591
+ pRipple
2592
+ >
2593
+ <ChevronDownIcon *ngIf="!decrementIconTemplate"/>
2594
+ <ng-template *ngTemplateOutlet="decrementIconTemplate"></ng-template>
2595
+ </button>
2596
+ </div>
2597
+ <div class="p-ampm-picker" *ngIf="hourFormat == '12'">
2598
+ <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (click)="toggleAMPM($event)" (keydown.enter)="toggleAMPM($event)" pRipple>
2599
+ <ChevronUpIcon *ngIf="!incrementIconTemplate"/>
2600
+ <ng-template *ngTemplateOutlet="incrementIconTemplate"></ng-template>
2601
+ </button>
2602
+ <span>{{ pm ? 'PM' : 'AM' }}</span>
2603
+ <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (click)="toggleAMPM($event)" (keydown.enter)="toggleAMPM($event)" pRipple>
2604
+ <ChevronDownIcon *ngIf="!decrementIconTemplate"/>
2605
+ <ng-template *ngTemplateOutlet="decrementIconTemplate"></ng-template>
2606
+ </button>
2607
+ </div>
2608
+ </div>
2609
+ <div class="p-datepicker-buttonbar" *ngIf="showButtonBar">
2610
+ <button type="button" [label]="getTranslation('today')" (keydown)="onContainerButtonKeydown($event)" (click)="onTodayButtonClick($event)" pButton pRipple [ngClass]="[todayButtonStyleClass]"></button>
2611
+ <button type="button" [label]="getTranslation('clear')" (keydown)="onContainerButtonKeydown($event)" (click)="onClearButtonClick($event)" pButton pRipple [ngClass]="[clearButtonStyleClass]"></button>
2612
+ </div>
2613
+ <ng-content select="p-footer"></ng-content>
2614
+ <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
2615
+ </div>
2616
+ </span>
2617
+ `, isInline: true, styles: [".p-calendar{position:relative;display:inline-flex;max-width:100%}.p-calendar .p-inputtext{flex:1 1 auto;width:1%}.p-calendar-w-btn .p-inputtext{border-top-right-radius:0;border-bottom-right-radius:0}.p-calendar-w-btn .p-datepicker-trigger{border-top-left-radius:0;border-bottom-left-radius:0}.p-fluid .p-calendar{display:flex}.p-fluid .p-calendar .p-inputtext{width:1%}.p-calendar .p-datepicker{min-width:100%}.p-datepicker{width:auto;position:absolute;top:0;left:0}.p-datepicker-inline{display:inline-block;position:static;overflow-x:auto}.p-datepicker-header{display:flex;align-items:center;justify-content:space-between}.p-datepicker-header .p-datepicker-title{margin:0 auto}.p-datepicker-prev,.p-datepicker-next{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;overflow:hidden;position:relative}.p-datepicker-multiple-month .p-datepicker-group-container .p-datepicker-group{flex:1 1 auto}.p-datepicker-multiple-month .p-datepicker-group-container{display:flex}.p-datepicker table{width:100%;border-collapse:collapse}.p-datepicker td>span{display:flex;justify-content:center;align-items:center;cursor:pointer;margin:0 auto;overflow:hidden;position:relative}.p-monthpicker-month{width:33.3%;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative}.p-datepicker-buttonbar{display:flex;justify-content:space-between;align-items:center}.p-timepicker{display:flex;justify-content:center;align-items:center}.p-timepicker button{display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative}.p-timepicker>div{display:flex;align-items:center;flex-direction:column}.p-datepicker-touch-ui,.p-calendar .p-datepicker-touch-ui{position:fixed;top:50%;left:50%;min-width:80vw;transform:translate(-50%,-50%)}.p-yearpicker-year{width:50%;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative}.p-calendar-clear-icon{position:absolute;top:50%;margin-top:-.5rem;cursor:pointer}.p-calendar-clearable{position:relative}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i2.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgTemplateOutlet; }), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(function () { return i2.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(function () { return i3.ButtonDirective; }), selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.Ripple; }), selector: "[pRipple]" }, { kind: "component", type: i0.forwardRef(function () { return ChevronLeftIcon; }), selector: "ChevronLeftIcon" }, { kind: "component", type: i0.forwardRef(function () { return ChevronRightIcon; }), selector: "ChevronRightIcon" }, { kind: "component", type: i0.forwardRef(function () { return ChevronUpIcon; }), selector: "ChevronUpIcon" }, { kind: "component", type: i0.forwardRef(function () { return ChevronDownIcon; }), selector: "ChevronDownIcon" }, { kind: "component", type: i0.forwardRef(function () { return TimesIcon; }), selector: "TimesIcon" }, { kind: "component", type: i0.forwardRef(function () { return CalendarIcon; }), selector: "CalendarIcon" }], animations: [
2618
+ trigger('overlayAnimation', [
2619
+ state('visibleTouchUI', style({
2620
+ transform: 'translate(-50%,-50%)',
2621
+ opacity: 1
2622
+ })),
2623
+ transition('void => visible', [style({ opacity: 0, transform: 'scaleY(0.8)' }), animate('{{showTransitionParams}}', style({ opacity: 1, transform: '*' }))]),
2624
+ transition('visible => void', [animate('{{hideTransitionParams}}', style({ opacity: 0 }))]),
2625
+ transition('void => visibleTouchUI', [style({ opacity: 0, transform: 'translate3d(-50%, -40%, 0) scale(0.9)' }), animate('{{showTransitionParams}}')]),
2626
+ transition('visibleTouchUI => void', [
2627
+ animate('{{hideTransitionParams}}', style({
2628
+ opacity: 0,
2629
+ transform: 'translate3d(-50%, -40%, 0) scale(0.9)'
2630
+ }))
2631
+ ])
2632
+ ])
2633
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2634
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Calendar, decorators: [{
2635
+ type: Component,
2636
+ args: [{ selector: 'p-calendar', template: `
2637
+ <span #container [ngClass]="{ 'p-calendar': true, 'p-calendar-w-btn': showIcon, 'p-calendar-timeonly': timeOnly, 'p-calendar-disabled': disabled, 'p-focus': focus }" [ngStyle]="style" [class]="styleClass">
2638
+ <ng-template [ngIf]="!inline">
2639
+ <input
2640
+ #inputfield
2641
+ type="text"
2642
+ [attr.id]="inputId"
2643
+ [attr.name]="name"
2644
+ [attr.required]="required"
2645
+ [attr.aria-required]="required"
2646
+ [value]="inputFieldValue"
2647
+ (focus)="onInputFocus($event)"
2648
+ (keydown)="onInputKeydown($event)"
2649
+ (click)="onInputClick()"
2650
+ (blur)="onInputBlur($event)"
2651
+ [readonly]="readonlyInput"
2652
+ (input)="onUserInput($event)"
2653
+ [ngStyle]="inputStyle"
2654
+ [class]="inputStyleClass"
2655
+ [placeholder]="placeholder || ''"
2656
+ [disabled]="disabled"
2657
+ [attr.tabindex]="tabindex"
2658
+ [attr.inputmode]="touchUI ? 'off' : null"
2659
+ [ngClass]="'p-inputtext p-component'"
2660
+ autocomplete="off"
2661
+ [attr.aria-labelledby]="ariaLabelledBy"
2662
+ />
2663
+ <ng-container *ngIf="showClear && !disabled && value != null">
2664
+ <TimesIcon *ngIf="!clearIconTemplate" [styleClass]="'p-calendar-clear-icon'" (click)="clear()"/>
2665
+ <span *ngIf="clearIconTemplate" class="p-calendar-clear-icon" (click)="clear()">
2666
+ <ng-template *ngTemplateOutlet="clearIconTemplate"></ng-template>
2667
+ </span>
2668
+ </ng-container>
2669
+ <button type="button" [attr.aria-label]="iconAriaLabel" pButton pRipple *ngIf="showIcon" (click)="onButtonClick($event, inputfield)" class="p-datepicker-trigger p-button-icon-only" [disabled]="disabled" tabindex="0">
2670
+ <span *ngIf="icon" [ngClass]="icon"></span>
2671
+ <ng-container *ngIf="!icon">
2672
+ <CalendarIcon *ngIf="!triggerIconTemplate"/>
2673
+ <ng-template *ngTemplateOutlet="triggerIconTemplate"></ng-template>
2674
+ </ng-container>
2675
+ </button>
2676
+ </ng-template>
2677
+ <div
2678
+ #contentWrapper
2679
+ [class]="panelStyleClass"
2680
+ [ngStyle]="panelStyle"
2681
+ [ngClass]="{
2682
+ 'p-datepicker p-component': true,
2683
+ 'p-datepicker-inline': inline,
2684
+ 'p-disabled': disabled,
2685
+ 'p-datepicker-timeonly': timeOnly,
2686
+ 'p-datepicker-multiple-month': this.numberOfMonths > 1,
2687
+ 'p-datepicker-monthpicker': view === 'month',
2688
+ 'p-datepicker-touch-ui': touchUI
2689
+ }"
2690
+ [@overlayAnimation]="
2691
+ touchUI
2692
+ ? { value: 'visibleTouchUI', params: { showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions } }
2693
+ : { value: 'visible', params: { showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions } }
2694
+ "
2695
+ [@.disabled]="inline === true"
2696
+ (@overlayAnimation.start)="onOverlayAnimationStart($event)"
2697
+ (@overlayAnimation.done)="onOverlayAnimationDone($event)"
2698
+ (click)="onOverlayClick($event)"
2699
+ *ngIf="inline || overlayVisible"
2700
+ >
2701
+ <ng-content select="p-header"></ng-content>
2702
+ <ng-container *ngTemplateOutlet="headerTemplate"></ng-container>
2703
+ <ng-container *ngIf="!timeOnly">
2704
+ <div class="p-datepicker-group-container">
2705
+ <div class="p-datepicker-group" *ngFor="let month of months; let i = index">
2706
+ <div class="p-datepicker-header">
2707
+ <button (keydown)="onContainerButtonKeydown($event)" class="p-datepicker-prev p-link" (click)="onPrevButtonClick($event)" *ngIf="i === 0" type="button" pRipple>
2708
+ <ChevronLeftIcon [styleClass]="'p-datepicker-prev-icon'" *ngIf="!previousIconTemplate" />
2709
+ <span *ngIf="previousIconTemplate" class="p-datepicker-prev-icon">
2710
+ <ng-template *ngTemplateOutlet="previousIconTemplate;"></ng-template>
2711
+ </span>
2712
+ </button>
2713
+ <div class="p-datepicker-title">
2714
+ <button type="button" (click)="switchToMonthView($event)" (keydown)="onContainerButtonKeydown($event)" *ngIf="currentView === 'date'" class="p-datepicker-month p-link" [disabled]="switchViewButtonDisabled()">
2715
+ {{ getMonthName(month.month) }}
2716
+ </button>
2717
+ <button type="button" (click)="switchToYearView($event)" (keydown)="onContainerButtonKeydown($event)" *ngIf="currentView !== 'year'" class="p-datepicker-year p-link" [disabled]="switchViewButtonDisabled()">
2718
+ {{ getYear(month) }}
2719
+ </button>
2720
+ <span class="p-datepicker-decade" *ngIf="currentView === 'year'">
2721
+ <ng-container *ngIf="!decadeTemplate">{{ yearPickerValues()[0] }} - {{ yearPickerValues()[yearPickerValues().length - 1] }}</ng-container>
2722
+ <ng-container *ngTemplateOutlet="decadeTemplate; context: { $implicit: yearPickerValues }"></ng-container>
2723
+ </span>
2724
+ </div>
2725
+ <button
2726
+ (keydown)="onContainerButtonKeydown($event)"
2727
+ class="p-datepicker-next p-link"
2728
+ (click)="onNextButtonClick($event)"
2729
+ [style.display]="numberOfMonths === 1 ? 'inline-flex' : i === numberOfMonths - 1 ? 'inline-flex' : 'none'"
2730
+ type="button"
2731
+ pRipple
2732
+ >
2733
+ <ChevronRightIcon [styleClass]="'p-datepicker-next-icon'" *ngIf="!nextIconTemplate"/>
2734
+ <span *ngIf="nextIconTemplate" class="p-datepicker-next-icon">
2735
+ <ng-template *ngTemplateOutlet="nextIconTemplate;"></ng-template>
2736
+ </span>
2737
+ </button>
2738
+ </div>
2739
+ <div class="p-datepicker-calendar-container" *ngIf="currentView === 'date'">
2740
+ <table class="p-datepicker-calendar">
2741
+ <thead>
2742
+ <tr>
2743
+ <th *ngIf="showWeek" class="p-datepicker-weekheader p-disabled">
2744
+ <span>{{ getTranslation('weekHeader') }}</span>
2745
+ </th>
2746
+ <th scope="col" *ngFor="let weekDay of weekDays; let begin = first; let end = last">
2747
+ <span>{{ weekDay }}</span>
2748
+ </th>
2749
+ </tr>
2750
+ </thead>
2751
+ <tbody>
2752
+ <tr *ngFor="let week of month.dates; let j = index">
2753
+ <td *ngIf="showWeek" class="p-datepicker-weeknumber">
2754
+ <span class="p-disabled">
2755
+ {{ month.weekNumbers[j] }}
2756
+ </span>
2757
+ </td>
2758
+ <td *ngFor="let date of week" [ngClass]="{ 'p-datepicker-other-month': date.otherMonth, 'p-datepicker-today': date.today }">
2759
+ <ng-container *ngIf="date.otherMonth ? showOtherMonths : true">
2760
+ <span [ngClass]="{ 'p-highlight': isSelected(date), 'p-disabled': !date.selectable }" (click)="onDateSelect($event, date)" draggable="false" (keydown)="onDateCellKeydown($event, date, i)" pRipple>
2761
+ <ng-container *ngIf="!dateTemplate">{{ date.day }}</ng-container>
2762
+ <ng-container *ngTemplateOutlet="dateTemplate; context: { $implicit: date }"></ng-container>
2763
+ </span>
2764
+ </ng-container>
2765
+ </td>
2766
+ </tr>
2767
+ </tbody>
2768
+ </table>
2769
+ </div>
2770
+ </div>
2771
+ </div>
2772
+ <div class="p-monthpicker" *ngIf="currentView === 'month'">
2773
+ <span
2774
+ *ngFor="let m of monthPickerValues(); let i = index"
2775
+ (click)="onMonthSelect($event, i)"
2776
+ (keydown)="onMonthCellKeydown($event, i)"
2777
+ class="p-monthpicker-month"
2778
+ [ngClass]="{ 'p-highlight': isMonthSelected(i), 'p-disabled': isMonthDisabled(i) }"
2779
+ pRipple
2780
+ >
2781
+ {{ m }}
2782
+ </span>
2783
+ </div>
2784
+ <div class="p-yearpicker" *ngIf="currentView === 'year'">
2785
+ <span *ngFor="let y of yearPickerValues()" (click)="onYearSelect($event, y)" (keydown)="onYearCellKeydown($event, y)" class="p-yearpicker-year" [ngClass]="{ 'p-highlight': isYearSelected(y) }" pRipple>
2786
+ {{ y }}
2787
+ </span>
2788
+ </div>
2789
+ </ng-container>
2790
+ <div class="p-timepicker" *ngIf="(showTime || timeOnly) && currentView === 'date'">
2791
+ <div class="p-hour-picker">
2792
+ <button
2793
+ class="p-link"
2794
+ type="button"
2795
+ (keydown)="onContainerButtonKeydown($event)"
2796
+ (keydown.enter)="incrementHour($event)"
2797
+ (keydown.space)="incrementHour($event)"
2798
+ (mousedown)="onTimePickerElementMouseDown($event, 0, 1)"
2799
+ (mouseup)="onTimePickerElementMouseUp($event)"
2800
+ (keyup.enter)="onTimePickerElementMouseUp($event)"
2801
+ (keyup.space)="onTimePickerElementMouseUp($event)"
2802
+ (mouseleave)="onTimePickerElementMouseLeave()"
2803
+ pRipple
2804
+ >
2805
+ <ChevronUpIcon *ngIf="!incrementIconTemplate"/>
2806
+ <ng-template *ngTemplateOutlet="incrementIconTemplate"></ng-template>
2807
+ </button>
2808
+ <span><ng-container *ngIf="currentHour < 10">0</ng-container>{{ currentHour }}</span>
2809
+ <button
2810
+ class="p-link"
2811
+ type="button"
2812
+ (keydown)="onContainerButtonKeydown($event)"
2813
+ (keydown.enter)="decrementHour($event)"
2814
+ (keydown.space)="decrementHour($event)"
2815
+ (mousedown)="onTimePickerElementMouseDown($event, 0, -1)"
2816
+ (mouseup)="onTimePickerElementMouseUp($event)"
2817
+ (keyup.enter)="onTimePickerElementMouseUp($event)"
2818
+ (keyup.space)="onTimePickerElementMouseUp($event)"
2819
+ (mouseleave)="onTimePickerElementMouseLeave()"
2820
+ pRipple
2821
+ >
2822
+ <ChevronDownIcon *ngIf="!decrementIconTemplate"/>
2823
+ <ng-template *ngTemplateOutlet="decrementIconTemplate"></ng-template>
2824
+ </button>
2825
+ </div>
2826
+ <div class="p-separator">
2827
+ <span>{{ timeSeparator }}</span>
2828
+ </div>
2829
+ <div class="p-minute-picker">
2830
+ <button
2831
+ class="p-link"
2832
+ type="button"
2833
+ (keydown)="onContainerButtonKeydown($event)"
2834
+ (keydown.enter)="incrementMinute($event)"
2835
+ (keydown.space)="incrementMinute($event)"
2836
+ (mousedown)="onTimePickerElementMouseDown($event, 1, 1)"
2837
+ (mouseup)="onTimePickerElementMouseUp($event)"
2838
+ (keyup.enter)="onTimePickerElementMouseUp($event)"
2839
+ (keyup.space)="onTimePickerElementMouseUp($event)"
2840
+ (mouseleave)="onTimePickerElementMouseLeave()"
2841
+ pRipple
2842
+ >
2843
+ <ChevronUpIcon *ngIf="!incrementIconTemplate"/>
2844
+ <ng-template *ngTemplateOutlet="incrementIconTemplate"></ng-template>
2845
+ </button>
2846
+ <span><ng-container *ngIf="currentMinute < 10">0</ng-container>{{ currentMinute }}</span>
2847
+ <button
2848
+ class="p-link"
2849
+ type="button"
2850
+ (keydown)="onContainerButtonKeydown($event)"
2851
+ (keydown.enter)="decrementMinute($event)"
2852
+ (keydown.space)="decrementMinute($event)"
2853
+ (mousedown)="onTimePickerElementMouseDown($event, 1, -1)"
2854
+ (mouseup)="onTimePickerElementMouseUp($event)"
2855
+ (keyup.enter)="onTimePickerElementMouseUp($event)"
2856
+ (keyup.space)="onTimePickerElementMouseUp($event)"
2857
+ (mouseleave)="onTimePickerElementMouseLeave()"
2858
+ pRipple
2859
+ >
2860
+ <ChevronDownIcon *ngIf="!decrementIconTemplate"/>
2861
+ <ng-template *ngTemplateOutlet="decrementIconTemplate"></ng-template>
2862
+ </button>
2863
+ </div>
2864
+ <div class="p-separator" *ngIf="showSeconds">
2865
+ <span>{{ timeSeparator }}</span>
2866
+ </div>
2867
+ <div class="p-second-picker" *ngIf="showSeconds">
2868
+ <button
2869
+ class="p-link"
2870
+ type="button"
2871
+ (keydown)="onContainerButtonKeydown($event)"
2872
+ (keydown.enter)="incrementSecond($event)"
2873
+ (keydown.space)="incrementSecond($event)"
2874
+ (mousedown)="onTimePickerElementMouseDown($event, 2, 1)"
2875
+ (mouseup)="onTimePickerElementMouseUp($event)"
2876
+ (keyup.enter)="onTimePickerElementMouseUp($event)"
2877
+ (keyup.space)="onTimePickerElementMouseUp($event)"
2878
+ (mouseleave)="onTimePickerElementMouseLeave()"
2879
+ pRipple
2880
+ >
2881
+ <ChevronUpIcon *ngIf="!incrementIconTemplate"/>
2882
+ <ng-template *ngTemplateOutlet="incrementIconTemplate"></ng-template>
2883
+ </button>
2884
+ <span><ng-container *ngIf="currentSecond < 10">0</ng-container>{{ currentSecond }}</span>
2885
+ <button
2886
+ class="p-link"
2887
+ type="button"
2888
+ (keydown)="onContainerButtonKeydown($event)"
2889
+ (keydown.enter)="decrementSecond($event)"
2890
+ (keydown.space)="decrementSecond($event)"
2891
+ (mousedown)="onTimePickerElementMouseDown($event, 2, -1)"
2892
+ (mouseup)="onTimePickerElementMouseUp($event)"
2893
+ (keyup.enter)="onTimePickerElementMouseUp($event)"
2894
+ (keyup.space)="onTimePickerElementMouseUp($event)"
2895
+ (mouseleave)="onTimePickerElementMouseLeave()"
2896
+ pRipple
2897
+ >
2898
+ <ChevronDownIcon *ngIf="!decrementIconTemplate"/>
2899
+ <ng-template *ngTemplateOutlet="decrementIconTemplate"></ng-template>
2900
+ </button>
2901
+ </div>
2902
+ <div class="p-ampm-picker" *ngIf="hourFormat == '12'">
2903
+ <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (click)="toggleAMPM($event)" (keydown.enter)="toggleAMPM($event)" pRipple>
2904
+ <ChevronUpIcon *ngIf="!incrementIconTemplate"/>
2905
+ <ng-template *ngTemplateOutlet="incrementIconTemplate"></ng-template>
2906
+ </button>
2907
+ <span>{{ pm ? 'PM' : 'AM' }}</span>
2908
+ <button class="p-link" type="button" (keydown)="onContainerButtonKeydown($event)" (click)="toggleAMPM($event)" (keydown.enter)="toggleAMPM($event)" pRipple>
2909
+ <ChevronDownIcon *ngIf="!decrementIconTemplate"/>
2910
+ <ng-template *ngTemplateOutlet="decrementIconTemplate"></ng-template>
2911
+ </button>
2912
+ </div>
2913
+ </div>
2914
+ <div class="p-datepicker-buttonbar" *ngIf="showButtonBar">
2915
+ <button type="button" [label]="getTranslation('today')" (keydown)="onContainerButtonKeydown($event)" (click)="onTodayButtonClick($event)" pButton pRipple [ngClass]="[todayButtonStyleClass]"></button>
2916
+ <button type="button" [label]="getTranslation('clear')" (keydown)="onContainerButtonKeydown($event)" (click)="onClearButtonClick($event)" pButton pRipple [ngClass]="[clearButtonStyleClass]"></button>
2917
+ </div>
2918
+ <ng-content select="p-footer"></ng-content>
2919
+ <ng-container *ngTemplateOutlet="footerTemplate"></ng-container>
2920
+ </div>
2921
+ </span>
2922
+ `, animations: [
2923
+ trigger('overlayAnimation', [
2924
+ state('visibleTouchUI', style({
2925
+ transform: 'translate(-50%,-50%)',
2926
+ opacity: 1
2927
+ })),
2928
+ transition('void => visible', [style({ opacity: 0, transform: 'scaleY(0.8)' }), animate('{{showTransitionParams}}', style({ opacity: 1, transform: '*' }))]),
2929
+ transition('visible => void', [animate('{{hideTransitionParams}}', style({ opacity: 0 }))]),
2930
+ transition('void => visibleTouchUI', [style({ opacity: 0, transform: 'translate3d(-50%, -40%, 0) scale(0.9)' }), animate('{{showTransitionParams}}')]),
2931
+ transition('visibleTouchUI => void', [
2932
+ animate('{{hideTransitionParams}}', style({
2933
+ opacity: 0,
2934
+ transform: 'translate3d(-50%, -40%, 0) scale(0.9)'
2935
+ }))
2936
+ ])
2937
+ ])
2938
+ ], host: {
2939
+ class: 'p-element p-inputwrapper',
2940
+ '[class.p-inputwrapper-filled]': 'filled',
2941
+ '[class.p-inputwrapper-focus]': 'focus',
2942
+ '[class.p-calendar-clearable]': 'showClear && !disabled'
2943
+ }, providers: [CALENDAR_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".p-calendar{position:relative;display:inline-flex;max-width:100%}.p-calendar .p-inputtext{flex:1 1 auto;width:1%}.p-calendar-w-btn .p-inputtext{border-top-right-radius:0;border-bottom-right-radius:0}.p-calendar-w-btn .p-datepicker-trigger{border-top-left-radius:0;border-bottom-left-radius:0}.p-fluid .p-calendar{display:flex}.p-fluid .p-calendar .p-inputtext{width:1%}.p-calendar .p-datepicker{min-width:100%}.p-datepicker{width:auto;position:absolute;top:0;left:0}.p-datepicker-inline{display:inline-block;position:static;overflow-x:auto}.p-datepicker-header{display:flex;align-items:center;justify-content:space-between}.p-datepicker-header .p-datepicker-title{margin:0 auto}.p-datepicker-prev,.p-datepicker-next{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;overflow:hidden;position:relative}.p-datepicker-multiple-month .p-datepicker-group-container .p-datepicker-group{flex:1 1 auto}.p-datepicker-multiple-month .p-datepicker-group-container{display:flex}.p-datepicker table{width:100%;border-collapse:collapse}.p-datepicker td>span{display:flex;justify-content:center;align-items:center;cursor:pointer;margin:0 auto;overflow:hidden;position:relative}.p-monthpicker-month{width:33.3%;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative}.p-datepicker-buttonbar{display:flex;justify-content:space-between;align-items:center}.p-timepicker{display:flex;justify-content:center;align-items:center}.p-timepicker button{display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative}.p-timepicker>div{display:flex;align-items:center;flex-direction:column}.p-datepicker-touch-ui,.p-calendar .p-datepicker-touch-ui{position:fixed;top:50%;left:50%;min-width:80vw;transform:translate(-50%,-50%)}.p-yearpicker-year{width:50%;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative}.p-calendar-clear-icon{position:absolute;top:50%;margin-top:-.5rem;cursor:pointer}.p-calendar-clearable{position:relative}\n"] }]
2944
+ }], ctorParameters: function () { return [{ type: Document, decorators: [{
2945
+ type: Inject,
2946
+ args: [DOCUMENT]
2947
+ }] }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.ParallelUIAngularConfig }, { type: i1.OverlayService }]; }, propDecorators: { style: [{
2948
+ type: Input
2949
+ }], styleClass: [{
2950
+ type: Input
2951
+ }], inputStyle: [{
2952
+ type: Input
2953
+ }], inputId: [{
2954
+ type: Input
2955
+ }], name: [{
2956
+ type: Input
2957
+ }], inputStyleClass: [{
2958
+ type: Input
2959
+ }], placeholder: [{
2960
+ type: Input
2961
+ }], ariaLabelledBy: [{
2962
+ type: Input
2963
+ }], iconAriaLabel: [{
2964
+ type: Input
2965
+ }], disabled: [{
2966
+ type: Input
2967
+ }], dateFormat: [{
2968
+ type: Input
2969
+ }], multipleSeparator: [{
2970
+ type: Input
2971
+ }], rangeSeparator: [{
2972
+ type: Input
2973
+ }], inline: [{
2974
+ type: Input
2975
+ }], showOtherMonths: [{
2976
+ type: Input
2977
+ }], selectOtherMonths: [{
2978
+ type: Input
2979
+ }], showIcon: [{
2980
+ type: Input
2981
+ }], icon: [{
2982
+ type: Input
2983
+ }], appendTo: [{
2984
+ type: Input
2985
+ }], readonlyInput: [{
2986
+ type: Input
2987
+ }], shortYearCutoff: [{
2988
+ type: Input
2989
+ }], monthNavigator: [{
2990
+ type: Input
2991
+ }], yearNavigator: [{
2992
+ type: Input
2993
+ }], hourFormat: [{
2994
+ type: Input
2995
+ }], timeOnly: [{
2996
+ type: Input
2997
+ }], stepHour: [{
2998
+ type: Input
2999
+ }], stepMinute: [{
3000
+ type: Input
3001
+ }], stepSecond: [{
3002
+ type: Input
3003
+ }], showSeconds: [{
3004
+ type: Input
3005
+ }], required: [{
3006
+ type: Input
3007
+ }], showOnFocus: [{
3008
+ type: Input
3009
+ }], showWeek: [{
3010
+ type: Input
3011
+ }], showClear: [{
3012
+ type: Input
3013
+ }], dataType: [{
3014
+ type: Input
3015
+ }], selectionMode: [{
3016
+ type: Input
3017
+ }], maxDateCount: [{
3018
+ type: Input
3019
+ }], showButtonBar: [{
3020
+ type: Input
3021
+ }], todayButtonStyleClass: [{
3022
+ type: Input
3023
+ }], clearButtonStyleClass: [{
3024
+ type: Input
3025
+ }], autoZIndex: [{
3026
+ type: Input
3027
+ }], baseZIndex: [{
3028
+ type: Input
3029
+ }], panelStyleClass: [{
3030
+ type: Input
3031
+ }], panelStyle: [{
3032
+ type: Input
3033
+ }], keepInvalid: [{
3034
+ type: Input
3035
+ }], hideOnDateTimeSelect: [{
3036
+ type: Input
3037
+ }], touchUI: [{
3038
+ type: Input
3039
+ }], timeSeparator: [{
3040
+ type: Input
3041
+ }], focusTrap: [{
3042
+ type: Input
3043
+ }], showTransitionOptions: [{
3044
+ type: Input
3045
+ }], hideTransitionOptions: [{
3046
+ type: Input
3047
+ }], onFocus: [{
3048
+ type: Output
3049
+ }], onBlur: [{
3050
+ type: Output
3051
+ }], onClose: [{
3052
+ type: Output
3053
+ }], onSelect: [{
3054
+ type: Output
3055
+ }], onClear: [{
3056
+ type: Output
3057
+ }], onInput: [{
3058
+ type: Output
3059
+ }], onTodayClick: [{
3060
+ type: Output
3061
+ }], onClearClick: [{
3062
+ type: Output
3063
+ }], onMonthChange: [{
3064
+ type: Output
3065
+ }], onYearChange: [{
3066
+ type: Output
3067
+ }], onClickOutside: [{
3068
+ type: Output
3069
+ }], onShow: [{
3070
+ type: Output
3071
+ }], templates: [{
3072
+ type: ContentChildren,
3073
+ args: [QiusTemplate]
3074
+ }], tabindex: [{
3075
+ type: Input
3076
+ }], containerViewChild: [{
3077
+ type: ViewChild,
3078
+ args: ['container', { static: false }]
3079
+ }], inputfieldViewChild: [{
3080
+ type: ViewChild,
3081
+ args: ['inputfield', { static: false }]
3082
+ }], content: [{
3083
+ type: ViewChild,
3084
+ args: ['contentWrapper', { static: false }]
3085
+ }], view: [{
3086
+ type: Input
3087
+ }], defaultDate: [{
3088
+ type: Input
3089
+ }], minDate: [{
3090
+ type: Input
3091
+ }], maxDate: [{
3092
+ type: Input
3093
+ }], disabledDates: [{
3094
+ type: Input
3095
+ }], disabledDays: [{
3096
+ type: Input
3097
+ }], yearRange: [{
3098
+ type: Input
3099
+ }], showTime: [{
3100
+ type: Input
3101
+ }], responsiveOptions: [{
3102
+ type: Input
3103
+ }], numberOfMonths: [{
3104
+ type: Input
3105
+ }], firstDayOfWeek: [{
3106
+ type: Input
3107
+ }], locale: [{
3108
+ type: Input
3109
+ }] } });
3110
+ export class CalendarModule {
3111
+ }
3112
+ CalendarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CalendarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3113
+ CalendarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: CalendarModule, declarations: [Calendar], imports: [CommonModule, ButtonModule, SharedModule, RippleModule, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronDownIcon, TimesIcon, CalendarIcon], exports: [Calendar, ButtonModule, SharedModule] });
3114
+ CalendarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CalendarModule, imports: [CommonModule, ButtonModule, SharedModule, RippleModule, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronDownIcon, TimesIcon, CalendarIcon, ButtonModule, SharedModule] });
3115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CalendarModule, decorators: [{
3116
+ type: NgModule,
3117
+ args: [{
3118
+ imports: [CommonModule, ButtonModule, SharedModule, RippleModule, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, ChevronDownIcon, TimesIcon, CalendarIcon],
3119
+ exports: [Calendar, ButtonModule, SharedModule],
3120
+ declarations: [Calendar]
3121
+ }]
3122
+ }] });
3123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvY2FsZW5kYXIvY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBa0IsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakcsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFJUixNQUFNLEVBSU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUEyQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9JLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsVUFBVSxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDcEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFeEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdURB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LFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFJO1FBQ1osT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMxQixTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVCO1FBRUQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFFdkssSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV2RCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMs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dHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgTmdab25lLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT3ZlcmxheVNlcnZpY2UsIFBhcmFsbGVsVUlBbmd1bGFyQ29uZmlnLCBRaXVzVGVtcGxhdGUsIFNoYXJlZE1vZHVsZSwgVHJhbnNsYXRpb25LZXlzIH0gZnJvbSAnQHFpdXMuc29sdXRpb25zL3BhcmFsbGVsLXVpLWFuZ3VsYXIvYXBpJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BxaXVzLnNvbHV0aW9ucy9wYXJhbGxlbC11aS1hbmd1bGFyL2J1dHRvbic7XG5pbXBvcnQgeyBDb25uZWN0ZWRPdmVybGF5U2Nyb2xsSGFuZGxlciwgRG9tSGFuZGxlciB9IGZyb20gJ0BxaXVzLnNvbHV0aW9ucy9wYXJhbGxlbC11aS1hbmd1bGFyL2RvbSc7XG5pbXBvcnQgeyBSaXBwbGVNb2R1bGUgfSBmcm9tICdAcWl1cy5zb2x1dGlvbnMvcGFyYWxsZWwtdWktYW5ndWxhci9yaXBwbGUnO1xuaW1wb3J0IHsgT2JqZWN0VXRpbHMsIFVuaXF1ZUNvbXBvbmVudElkLCBaSW5kZXhVdGlscyB9IGZyb20gJ0BxaXVzLnNvbHV0aW9ucy9wYXJhbGxlbC11aS1hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hldnJvbkxlZnRJY29uIH0gZnJvbSAnQHFpdXMuc29sdXRpb25zL3BhcmFsbGVsLXVpLWFuZ3VsYXIvaWNvbnMvY2hldnJvbmxlZnQnO1xuaW1wb3J0IHsgQ2hldnJvblJpZ2h0SWNvbiB9IGZyb20gJ0BxaXVzLnNvbHV0aW9ucy9wYXJhbGxlbC11aS1hbmd1bGFyL2ljb25zL2NoZXZyb25yaWdodCc7XG5pbXBvcnQgeyBDaGV2cm9uVXBJY29uIH0gZnJvbSAnQHFpdXMuc29sdXRpb25zL3BhcmFsbGVsLXVpLWFuZ3VsYXIvaWNvbnMvY2hldnJvbnVwJztcbmltcG9ydCB7IENoZXZyb25Eb3duSWNvbiB9IGZyb20gJ0BxaXVzLnNvbHV0aW9ucy9wYXJhbGxlbC11aS1hbmd1bGFyL2ljb25zL2NoZXZyb25kb3duJztcbmltcG9ydCB7IFRpbWVzSWNvbiB9IGZyb20gJ0BxaXVzLnNvbHV0aW9ucy9wYXJhbGxlbC11aS1hbmd1bGFyL2ljb25zL3RpbWVzJztcbmltcG9ydCB7IENhbGVuZGFySWNvbiB9IGZyb20gJ0BxaXVzLnNvbHV0aW9ucy9wYXJhbGxlbC11aS1hbmd1bGFyL2ljb25zL2NhbGVuZGFyJztcblxuZXhwb3J0IGNvbnN0IENBTEVOREFSX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2FsZW5kYXIpLFxuICAgIG11bHRpOiB0cnVlXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsZVNldHRpbmdzIHtcbiAgICBmaXJzdERheU9mV2Vlaz86IG51bWJlcjtcbiAgICBkYXlOYW1lcz86IHN0cmluZ1tdO1xuICAgIGRheU5hbWVzU2hvcnQ/OiBzdHJpbmdbXTtcbiAgICBkYXlOYW1lc01pbj86IHN0cmluZ1tdO1xuICAgIG1vbnRoTmFtZXM/OiBzdHJpbmdbXTtcbiAgICBtb250aE5hbWVzU2hvcnQ/OiBzdHJpbmdbXTtcbiAgICB0b2RheT86IHN0cmluZztcbiAgICBjbGVhcj86IHN0cmluZztcbiAgICBkYXRlRm9ybWF0Pzogc3RyaW5nO1xuICAgIHdlZWtIZWFkZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENhbGVuZGFyVHlwZVZpZXcgPSAnZGF0ZScgfCAnbW9udGgnIHwgJ3llYXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3AtY2FsZW5kYXInLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxzcGFuICNjb250YWluZXIgW25nQ2xhc3NdPVwieyAncC1jYWxlbmRhcic6IHRydWUsICdwLWNhbGVuZGFyLXctYnRuJzogc2hvd0ljb24sICdwLWNhbGVuZGFyLXRpbWVvbmx5JzogdGltZU9ubHksICdwLWNhbGVuZGFyLWRpc2FibGVkJzogZGlzYWJsZWQsICdwLWZvY3VzJzogZm9jdXMgfVwiIFtuZ1N0eWxlXT1cInN0eWxlXCIgW2NsYXNzXT1cInN0eWxlQ2xhc3NcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaW5saW5lXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICNpbnB1dGZpZWxkXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpbnB1dEZpZWxkVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbklucHV0S2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSW5wdXRDbGljaygpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25JbnB1dEJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seUlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uVXNlcklucHV0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJpbnB1dFN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImlucHV0U3R5bGVDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuaW5wdXRtb2RlXT1cInRvdWNoVUkgPyAnb2ZmJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIncC1pbnB1dHRleHQgcC1jb21wb25lbnQnXCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Q2xlYXIgJiYgIWRpc2FibGVkICYmIHZhbHVlICE9IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPFRpbWVzSWNvbiAqbmdJZj1cIiFjbGVhckljb25UZW1wbGF0ZVwiIFtzdHlsZUNsYXNzXT1cIidwLWNhbGVuZGFyLWNsZWFyLWljb24nXCIgKGNsaWNrKT1cImNsZWFyKClcIi8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2xlYXJJY29uVGVtcGxhdGVcIiBjbGFzcz1cInAtY2FsZW5kYXItY2xlYXItaWNvblwiIChjbGljayk9XCJjbGVhcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjbGVhckljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbYXR0ci5hcmlhLWxhYmVsXT1cImljb25BcmlhTGFiZWxcIiBwQnV0dG9uIHBSaXBwbGUgKm5nSWY9XCJzaG93SWNvblwiIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKCRldmVudCwgaW5wdXRmaWVsZClcIiBjbGFzcz1cInAtZGF0ZXBpY2tlci10cmlnZ2VyIHAtYnV0dG9uLWljb24tb25seVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImljb25cIiBbbmdDbGFzc109XCJpY29uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDYWxlbmRhckljb24gKm5nSWY9XCIhdHJpZ2dlckljb25UZW1wbGF0ZVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgI2NvbnRlbnRXcmFwcGVyXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInBhbmVsU3R5bGVDbGFzc1wiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwicGFuZWxTdHlsZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAncC1kYXRlcGlja2VyIHAtY29tcG9uZW50JzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgJ3AtZGF0ZXBpY2tlci1pbmxpbmUnOiBpbmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICdwLWRpc2FibGVkJzogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICdwLWRhdGVwaWNrZXItdGltZW9ubHknOiB0aW1lT25seSxcbiAgICAgICAgICAgICAgICAgICAgJ3AtZGF0ZXBpY2tlci1tdWx0aXBsZS1tb250aCc6IHRoaXMubnVtYmVyT2ZNb250aHMgPiAxLFxuICAgICAgICAgICAgICAgICAgICAncC1kYXRlcGlja2VyLW1vbnRocGlja2VyJzogdmlldyA9PT0gJ21vbnRoJyxcbiAgICAgICAgICAgICAgICAgICAgJ3AtZGF0ZXBpY2tlci10b3VjaC11aSc6IHRvdWNoVUlcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBbQG92ZXJsYXlBbmltYXRpb25dPVwiXG4gICAgICAgICAgICAgICAgICAgIHRvdWNoVUlcbiAgICAgICAgICAgICAgICAgICAgICAgID8geyB2YWx1ZTogJ3Zpc2libGVUb3VjaFVJJywgcGFyYW1zOiB7IHNob3dUcmFuc2l0aW9uUGFyYW1zOiBzaG93VHJhbnNpdGlvbk9wdGlvbnMsIGhpZGVUcmFuc2l0aW9uUGFyYW1zOiBoaWRlVHJhbnNpdGlvbk9wdGlvbnMgfSB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHsgdmFsdWU6ICd2aXNpYmxlJywgcGFyYW1zOiB7IHNob3dUcmFuc2l0aW9uUGFyYW1zOiBzaG93VHJhbnNpdGlvbk9wdGlvbnMsIGhpZGVUcmFuc2l0aW9uUGFyYW1zOiBoaWRlVHJhbnNpdGlvbk9wdGlvbnMgfSB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbQC5kaXNhYmxlZF09XCJpbmxpbmUgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgIChAb3ZlcmxheUFuaW1hdGlvbi5zdGFydCk9XCJvbk92ZXJsYXlBbmltYXRpb25TdGFydCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoQG92ZXJsYXlBbmltYXRpb24uZG9uZSk9XCJvbk92ZXJsYXlBbmltYXRpb25Eb25lKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk92ZXJsYXlDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlubGluZSB8fCBvdmVybGF5VmlzaWJsZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwicC1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0aW1lT25seVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1kYXRlcGlja2VyLWdyb3VwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtZGF0ZXBpY2tlci1ncm91cFwiICpuZ0Zvcj1cImxldCBtb250aCBvZiBtb250aHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1kYXRlcGlja2VyLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChrZXlkb3duKT1cIm9uQ29udGFpbmVyQnV0dG9uS2V5ZG93bigkZXZlbnQpXCIgY2xhc3M9XCJwLWRhdGVwaWNrZXItcHJldiBwLWxpbmtcIiAoY2xpY2spPVwib25QcmV2QnV0dG9uQ2xpY2soJGV2ZW50KVwiICpuZ0lmPVwiaSA9PT0gMFwiIHR5cGU9XCJidXR0b25cIiBwUmlwcGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZXZyb25MZWZ0SWNvbiBbc3R5bGVDbGFzc109XCIncC1kYXRlcGlja2VyLXByZXYtaWNvbidcIiAqbmdJZj1cIiFwcmV2aW91c0ljb25UZW1wbGF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInByZXZpb3VzSWNvblRlbXBsYXRlXCIgY2xhc3M9XCJwLWRhdGVwaWNrZXItcHJldi1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldmlvdXNJY29uVGVtcGxhdGU7XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWRhdGVwaWNrZXItdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzd2l0Y2hUb01vbnRoVmlldygkZXZlbnQpXCIgKGtleWRvd24pPVwib25Db250YWluZXJCdXR0b25LZXlkb3duKCRldmVudClcIiAqbmdJZj1cImN1cnJlbnRWaWV3ID09PSAnZGF0ZSdcIiBjbGFzcz1cInAtZGF0ZXBpY2tlci1tb250aCBwLWxpbmtcIiBbZGlzYWJsZWRdPVwic3dpdGNoVmlld0J1dHRvbkRpc2FibGVkKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRNb250aE5hbWUobW9udGgubW9udGgpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzd2l0Y2hUb1llYXJWaWV3KCRldmVudClcIiAoa2V5ZG93bik9XCJvbkNvbnRhaW5lckJ1dHRvbktleWRvd24oJGV2ZW50KVwiICpuZ0lmPVwiY3VycmVudFZpZXcgIT09ICd5ZWFyJ1wiIGNsYXNzPVwicC1kYXRlcGlja2VyLXllYXIgcC1saW5rXCIgW2Rpc2FibGVkXT1cInN3aXRjaFZpZXdCdXR0b25EaXNhYmxlZCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0WWVhcihtb250aCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWRhdGVwaWNrZXItZGVjYWRlXCIgKm5nSWY9XCJjdXJyZW50VmlldyA9PT0gJ3llYXInXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkZWNhZGVUZW1wbGF0ZVwiPnt7IHllYXJQaWNrZXJWYWx1ZXMoKVswXSB9fSAtIHt7IHllYXJQaWNrZXJWYWx1ZXMoKVt5ZWFyUGlja2VyVmFsdWVzKCkubGVuZ3RoIC0gMV0gfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVjYWRlVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB5ZWFyUGlja2VyVmFsdWVzIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uQ29udGFpbmVyQnV0dG9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1kYXRlcGlja2VyLW5leHQgcC1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk5leHRCdXR0b25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIm51bWJlck9mTW9udGhzID09PSAxID8gJ2lubGluZS1mbGV4JyA6IGkgPT09IG51bWJlck9mTW9udGhzIC0gMSA/ICdpbmxpbmUtZmxleCcgOiAnbm9uZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGV2cm9uUmlnaHRJY29uIFtzdHlsZUNsYXNzXT1cIidwLWRhdGVwaWNrZXItbmV4dC1pY29uJ1wiICpuZ0lmPVwiIW5leHRJY29uVGVtcGxhdGVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm5leHRJY29uVGVtcGxhdGVcIiBjbGFzcz1cInAtZGF0ZXBpY2tlci1uZXh0LWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXh0SWNvblRlbXBsYXRlO1wiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWRhdGVwaWNrZXItY2FsZW5kYXItY29udGFpbmVyXCIgKm5nSWY9XCJjdXJyZW50VmlldyA9PT0gJ2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInAtZGF0ZXBpY2tlci1jYWxlbmRhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwic2hvd1dlZWtcIiBjbGFzcz1cInAtZGF0ZXBpY2tlci13ZWVraGVhZGVyIHAtZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldFRyYW5zbGF0aW9uKCd3ZWVrSGVhZGVyJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiICpuZ0Zvcj1cImxldCB3ZWVrRGF5IG9mIHdlZWtEYXlzOyBsZXQgYmVnaW4gPSBmaXJzdDsgbGV0IGVuZCA9IGxhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHdlZWtEYXkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB3ZWVrIG9mIG1vbnRoLmRhdGVzOyBsZXQgaiA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNob3dXZWVrXCIgY2xhc3M9XCJwLWRhdGVwaWNrZXItd2Vla251bWJlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbW9udGgud2Vla051bWJlcnNbal0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBkYXRlIG9mIHdlZWtcIiBbbmdDbGFzc109XCJ7ICdwLWRhdGVwaWNrZXItb3RoZXItbW9udGgnOiBkYXRlLm90aGVyTW9udGgsICdwLWRhdGVwaWNrZXItdG9kYXknOiBkYXRlLnRvZGF5IH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRlLm90aGVyTW9udGggPyBzaG93T3RoZXJNb250aHMgOiB0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieyAncC1oaWdobGlnaHQnOiBpc1NlbGVjdGVkKGRhdGUpLCAncC1kaXNhYmxlZCc6ICFkYXRlLnNlbGVjdGFibGUgfVwiIChjbGljayk9XCJvbkRhdGVTZWxlY3QoJGV2ZW50LCBkYXRlKVwiIGRyYWdnYWJsZT1cImZhbHNlXCIgKGtleWRvd24pPVwib25EYXRlQ2VsbEtleWRvd24oJGV2ZW50LCBkYXRlLCBpKVwiIHBSaXBwbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZGF0ZVRlbXBsYXRlXCI+e3sgZGF0ZS5kYXkgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRhdGVUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGRhdGUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1tb250aHBpY2tlclwiICpuZ0lmPVwiY3VycmVudFZpZXcgPT09ICdtb250aCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG0gb2YgbW9udGhQaWNrZXJWYWx1ZXMoKTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW9udGhTZWxlY3QoJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Nb250aENlbGxLZXlkb3duKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1tb250aHBpY2tlci1tb250aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncC1oaWdobGlnaHQnOiBpc01vbnRoU2VsZWN0ZWQoaSksICdwLWRpc2FibGVkJzogaXNNb250aERpc2FibGVkKGkpIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC15ZWFycGlja2VyXCIgKm5nSWY9XCJjdXJyZW50VmlldyA9PT0gJ3llYXInXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgeSBvZiB5ZWFyUGlja2VyVmFsdWVzKClcIiAoY2xpY2spPVwib25ZZWFyU2VsZWN0KCRldmVudCwgeSlcIiAoa2V5ZG93bik9XCJvblllYXJDZWxsS2V5ZG93bigkZXZlbnQsIHkpXCIgY2xhc3M9XCJwLXllYXJwaWNrZXIteWVhclwiIFtuZ0NsYXNzXT1cInsgJ3AtaGlnaGxpZ2h0JzogaXNZZWFyU2VsZWN0ZWQoeSkgfVwiIHBSaXBwbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC10aW1lcGlja2VyXCIgKm5nSWY9XCIoc2hvd1RpbWUgfHwgdGltZU9ubHkpICYmIGN1cnJlbnRWaWV3ID09PSAnZGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtaG91ci1waWNrZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Db250YWluZXJCdXR0b25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImluY3JlbWVudEhvdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiaW5jcmVtZW50SG91cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uVGltZVBpY2tlckVsZW1lbnRNb3VzZURvd24oJGV2ZW50LCAwLCAxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNldXApPVwib25UaW1lUGlja2VyRWxlbWVudE1vdXNlVXAoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uVGltZVBpY2tlckVsZW1lbnRNb3VzZVVwKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5zcGFjZSk9XCJvblRpbWVQaWNrZXJFbGVtZW50TW91c2VVcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvblRpbWVQaWNrZXJFbGVtZW50TW91c2VMZWF2ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENoZXZyb25VcEljb24gKm5nSWY9XCIhaW5jcmVtZW50SWNvblRlbXBsYXRlXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImluY3JlbWVudEljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50SG91ciA8IDEwXCI+MDwvbmctY29udGFpbmVyPnt7IGN1cnJlbnRIb3VyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkNvbnRhaW5lckJ1dHRvbktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZGVjcmVtZW50SG91cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJkZWNyZW1lbnRIb3VyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25UaW1lUGlja2VyRWxlbWVudE1vdXNlRG93bigkZXZlbnQsIDAsIC0xKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNldXApPVwib25UaW1lUGlja2VyRWxlbWVudE1vdXNlVXAoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uVGltZVBpY2tlckVsZW1lbnRNb3VzZVVwKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5zcGFjZSk9XCJvblRpbWVQaWNrZXJFbGVtZW50TW91c2VVcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvblRpbWVQaWNrZXJFbGVtZW50TW91c2VMZWF2ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hldnJvbkRvd25JY29uICpuZ0lmPVwiIWRlY3JlbWVudEljb25UZW1wbGF0ZVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImRlY3JlbWVudEljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXNlcGFyYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdGltZVNlcGFyYXRvciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLW1pbnV0ZS1waWNrZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Db250YWluZXJCdXR0b25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImluY3JlbWVudE1pbnV0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJpbmNyZW1lbnRNaW51dGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblRpbWVQaWNrZXJFbGVtZW50TW91c2VEb3duKCRldmVudCwgMSwgMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZXVwKT1cIm9uVGltZVBpY2tlckVsZW1lbnRNb3VzZVVwKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvblRpbWVQaWNrZXJFbGVtZW50TW91c2VVcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwib25UaW1lUGlja2VyRWxlbWVudE1vdXNlVXAoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25UaW1lUGlja2VyRWxlbWVudE1vdXNlTGVhdmUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENoZXZyb25VcEljb24gKm5nSWY9XCIhaW5jcmVtZW50SWNvblRlbXBsYXRlXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5jcmVtZW50SWNvblRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRNaW51dGUgPCAxMFwiPjA8L25nLWNvbnRhaW5lcj57eyBjdXJyZW50TWludXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkNvbnRhaW5lckJ1dHRvbktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZGVjcmVtZW50TWludXRlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cImRlY3JlbWVudE1pbnV0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uVGltZVBpY2tlckVsZW1lbnRNb3VzZURvd24oJGV2ZW50LCAxLCAtMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZXVwKT1cIm9uVGltZVBpY2tlckVsZW1lbnRNb3VzZVVwKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvblRpbWVQaWNrZXJFbGVtZW50TW91c2VVcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwib25UaW1lUGlja2VyRWxlbWVudE1vdXNlVXAoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25UaW1lUGlja2VyRWxlbWVudE1vdXNlTGVhdmUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENoZXZyb25Eb3duSWNvbiAqbmdJZj1cIiFkZWNyZW1lbnRJY29uVGVtcGxhdGVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWNyZW1lbnRJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1zZXBhcmF0b3JcIiAqbmdJZj1cInNob3dTZWNvbmRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB0aW1lU2VwYXJhdG9yIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtc2Vjb25kLXBpY2tlclwiICpuZ0lmPVwic2hvd1NlY29uZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Db250YWluZXJCdXR0b25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImluY3JlbWVudFNlY29uZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJpbmNyZW1lbnRTZWNvbmQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblRpbWVQaWNrZXJFbGVtZW50TW91c2VEb3duKCRldmVudCwgMiwgMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZXVwKT1cIm9uVGltZVBpY2tlckVsZW1lbnRNb3VzZVVwKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvblRpbWVQaWNrZXJFbGVtZW50TW91c2VVcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwib25UaW1lUGlja2VyRWxlbWVudE1vdXNlVXAoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25UaW1lUGlja2VyRWxlbWVudE1vdXNlTGVhdmUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENoZXZyb25VcEljb24gKm5nSWY9XCIhaW5jcmVtZW50SWNvblRlbXBsYXRlXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5jcmVtZW50SWNvblRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRTZWNvbmQgPCAxMFwiPjA8L25nLWNvbnRhaW5lcj57eyBjdXJyZW50U2Vjb25kIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkNvbnRhaW5lckJ1dHRvbktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZGVjcmVtZW50U2Vjb25kKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cImRlY3JlbWVudFNlY29uZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uVGltZVBpY2tlckVsZW1lbnRNb3VzZURvd24oJGV2ZW50LCAyLCAtMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZXVwKT1cIm9uVGltZVBpY2tlckVsZW1lbnRNb3VzZVVwKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvblRpbWVQaWNrZXJFbGVtZW50TW91c2VVcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwib25UaW1lUGlja2VyRWxlbWVudE1vdXNlVXAoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25UaW1lUGlja2VyRWxlbWVudE1vdXNlTGVhdmUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENoZXZyb25Eb3duSWNvbiAqbmdJZj1cIiFkZWNyZW1lbnRJY29uVGVtcGxhdGVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWNyZW1lbnRJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1hbXBtLXBpY2tlclwiICpuZ0lmPVwiaG91ckZvcm1hdCA9PSAnMTInXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicC1saW5rXCIgdHlwZT1cImJ1dHRvblwiIChrZXlkb3duKT1cIm9uQ29udGFpbmVyQnV0dG9uS2V5ZG93bigkZXZlbnQpXCIgKGNsaWNrKT1cInRvZ2dsZUFNUE0oJGV2ZW50KVwiIChrZXlkb3duLmVudGVyKT1cInRvZ2dsZUFNUE0oJGV2ZW50KVwiIHBSaXBwbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2hldnJvblVwSWNvbiAqbmdJZj1cIiFpbmNyZW1lbnRJY29uVGVtcGxhdGVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmNyZW1lbnRJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBwbSA/ICdQTScgOiAnQU0nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInAtbGlua1wiIHR5cGU9XCJidXR0b25cIiAoa2V5ZG93bik9XCJvbkNvbnRhaW5lckJ1dHRvbktleWRvd24oJGV2ZW50KVwiIChjbGljayk9XCJ0b2dnbGVBTVBNKCRldmVudClcIiAoa2V5ZG93bi5lbnRlcik9XCJ0b2dnbGVBTVBNKCRldmVudClcIiBwUmlwcGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPENoZXZyb25Eb3duSWNvbiAqbmdJZj1cIiFkZWNyZW1lbnRJY29uVGVtcGxhdGVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWNyZW1lbnRJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWRhdGVwaWNrZXItYnV0dG9uYmFyXCIgKm5nSWY9XCJzaG93QnV0dG9uQmFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCJnZXRUcmFuc2xhdGlvbigndG9kYXknKVwiIChrZXlkb3duKT1cIm9uQ29udGFpbmVyQnV0dG9uS2V5ZG93bigkZXZlbnQpXCIgKGNsaWNrKT1cIm9uVG9kYXlCdXR0b25DbGljaygkZXZlbnQpXCIgcEJ1dHRvbiBwUmlwcGxlIFtuZ0NsYXNzXT1cIlt0b2RheUJ1dHRvblN0eWxlQ2xhc3NdXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCJnZXRUcmFuc2xhdGlvbignY2xlYXInKVwiIChrZXlkb3duKT1cIm9uQ29udGFpbmVyQnV0dG9uS2V5ZG93bigkZXZlbnQpXCIgKGNsaWNrKT1cIm9uQ2xlYXJCdXR0b25DbGljaygkZXZlbnQpXCIgcEJ1dHRvbiBwUmlwcGxlIFtuZ0NsYXNzXT1cIltjbGVhckJ1dHRvblN0eWxlQ2xhc3NdXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwicC1mb290ZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgIGAsXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdvdmVybGF5QW5pbWF0aW9uJywgW1xuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ3Zpc2libGVUb3VjaFVJJyxcbiAgICAgICAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgtNTAlLC01MCUpJyxcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiB2aXNpYmxlJywgW3N0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGVZKDAuOCknIH0pLCBhbmltYXRlKCd7e3Nob3dUcmFuc2l0aW9uUGFyYW1zfX0nLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJyonIH0pKV0pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndmlzaWJsZSA9PiB2b2lkJywgW2FuaW1hdGUoJ3t7aGlkZVRyYW5zaXRpb25QYXJhbXN9fScsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSldKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gdmlzaWJsZVRvdWNoVUknLCBbc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGUzZCgtNTAlLCAtNDAlLCAwKSBzY2FsZSgwLjkpJyB9KSwgYW5pbWF0ZSgne3tzaG93VHJhbnNpdGlvblBhcmFtc319JyldKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3Zpc2libGVUb3VjaFVJID0+IHZvaWQnLCBbXG4gICAgICAgICAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAgICAgICAgICAgJ3t7aGlkZVRyYW5zaXRpb25QYXJhbXN9fScsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUzZCgtNTAlLCAtNDAlLCAwKSBzY2FsZSgwLjkpJ1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAncC1lbGVtZW50IHAtaW5wdXR3cmFwcGVyJyxcbiAgICAgICAgJ1tjbGFzcy5wLWlucHV0d3JhcHBlci1maWxsZWRdJzogJ2ZpbGxlZCcsXG4gICAgICAgICdbY2xhc3MucC1pbnB1dHdyYXBwZXItZm9jdXNdJzogJ2ZvY3VzJyxcbiAgICAgICAgJ1tjbGFzcy5wLWNhbGVuZGFyLWNsZWFyYWJsZV0nOiAnc2hvd0NsZWFyICYmICFkaXNhYmxlZCdcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW0NBTEVOREFSX1ZBTFVFX0FDQ0VTU09SXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBASW5wdXQoKSBzdHlsZTogYW55O1xuXG4gICAgQElucHV0KCkgc3R5bGVDbGFzczogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgaW5wdXRTdHlsZTogYW55O1xuXG4gICAgQElucHV0KCkgaW5wdXRJZDogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgaW5wdXRTdHlsZUNsYXNzOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgYXJpYUxhYmVsbGVkQnk6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGljb25BcmlhTGFiZWw6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBhbnk7XG5cbiAgICBASW5wdXQoKSBkYXRlRm9ybWF0OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBtdWx0aXBsZVNlcGFyYXRvcjogc3RyaW5nID0gJywnO1xuXG4gICAgQElucHV0KCkgcmFuZ2VTZXBhcmF0b3I6IHN0cmluZyA9ICctJztcblxuICAgIEBJbnB1dCgpIGlubGluZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgc2hvd090aGVyTW9udGhzOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIHNlbGVjdE90aGVyTW9udGhzOiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgc2hvd0ljb246IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBpY29uOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBhcHBlbmRUbzogYW55O1xuXG4gICAgQElucHV0KCkgcmVhZG9ubHlJbnB1dDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHNob3J0WWVhckN1dG9mZjogYW55ID0gJysxMCc7XG5cbiAgICBASW5wdXQoKSBtb250aE5hdmlnYXRvcjogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHllYXJOYXZpZ2F0b3I6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBob3VyRm9ybWF0OiBzdHJpbmcgPSAnMjQnO1xuXG4gICAgQElucHV0KCkgdGltZU9ubHk6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBzdGVwSG91cjogbnVtYmVyID0gMTtcblxuICAgIEBJbnB1dCgpIHN0ZXBNaW51dGU6IG51bWJlciA9IDE7XG5cbiAgICBASW5wdXQoKSBzdGVwU2Vjb25kOiBudW1iZXIgPSAxO1xuXG4gICAgQElucHV0KCkgc2hvd1NlY29uZHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgc2hvd09uRm9jdXM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgc2hvd1dlZWs6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNob3dDbGVhcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZGF0YVR5cGU6IHN0cmluZyA9ICdkYXRlJztcblxuICAgIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6IHN0cmluZyA9ICdzaW5nbGUnO1xuXG4gICAgQElucHV0KCkgbWF4RGF0ZUNvdW50OiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBzaG93QnV0dG9uQmFyOiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgdG9kYXlCdXR0b25TdHlsZUNsYXNzOiBzdHJpbmcgPSAncC1idXR0b24tdGV4dCc7XG5cbiAgICBASW5wdXQoKSBjbGVhckJ1dHRvblN0eWxlQ2xhc3M6IHN0cmluZyA9ICdwLWJ1dHRvbi10ZXh0JztcblxuICAgIEBJbnB1dCgpIGF1dG9aSW5kZXg6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgYmFzZVpJbmRleDogbnVtYmVyID0gMDtcblxuICAgIEBJbnB1dCgpIHBhbmVsU3R5bGVDbGFzczogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgcGFuZWxTdHlsZTogYW55O1xuXG4gICAgQElucHV0KCkga2VlcEludmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGhpZGVPbkRhdGVUaW1lU2VsZWN0OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIHRvdWNoVUk6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSB0aW1lU2VwYXJhdG9yOiBzdHJpbmcgPSAnOic7XG5cbiAgICBASW5wdXQoKSBmb2N1c1RyYXA6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgc2hvd1RyYW5zaXRpb25PcHRpb25zOiBzdHJpbmcgPSAnLjEycyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSc7XG5cbiAgICBASW5wdXQoKSBoaWRlVHJhbnNpdGlvbk9wdGlvbnM6IHN0cmluZyA9ICcuMXMgbGluZWFyJztcblxuICAgIEBPdXRwdXQoKSBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBvbkNsZWFyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBvbklucHV0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBvblRvZGF5Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIG9uQ2xlYXJDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgb25Nb250aENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgb25ZZWFyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBvbkNsaWNrT3V0c2lkZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgb25TaG93OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oUWl1c1RlbXBsYXRlKSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxhbnk+O1xuXG4gICAgQElucHV0KCkgdGFiaW5kZXg6IG51bWJlcjtcblxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSB9KSBjb250YWluZXJWaWV3Q2hpbGQ6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dGZpZWxkJywgeyBzdGF0aWM6IGZhbHNlIH0pIGlucHV0ZmllbGRWaWV3Q2hpbGQ6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdjb250ZW50V3JhcHBlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBzZXQgY29udGVudChjb250ZW50OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuY29udGVudFZpZXdDaGlsZCA9IGNvbnRlbnQ7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGVudFZpZXdDaGlsZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNNb250aE5hdmlnYXRlKSB7XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oKCkgPT4gdGhpcy51cGRhdGVGb2N1cygpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTW9udGhOYXZpZ2F0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm9jdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0Rm9jdXNhYmxlQ2VsbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRlbnRWaWV3Q2hpbGQ6IEVsZW1lbnRSZWY7XG5cbiAgICB2YWx1ZTogYW55O1xuXG4gICAgZGF0ZXM6IGFueVtdO1xuXG4gICAgbW9udGhzOiBhbnlbXTtcblxuICAgIHdlZWtEYXlzOiBzdHJpbmdbXTtcblxuICAgIGN1cnJlbnRNb250aDogbnVtYmVyO1xuXG4gICAgY3VycmVudFllYXI6IG51bWJlcjtcblxuICAgIGN1cnJlbnRIb3VyOiBudW1iZXI7XG5cbiAgICBjdXJyZW50TWludXRlOiBudW1iZXI7XG5cbiAgICBjdXJyZW50U2Vjb25kOiBudW1iZXI7XG5cbiAgICBwbTogYm9vbGVhbjtcblxuICAgIG1hc2s6IEhUTUxEaXZFbGVtZW50O1xuXG4gICAgbWFza0NsaWNrTGlzdGVuZXI6IFZvaWRGdW5jdGlvbiB8IG51bGw7XG5cbiAgICBvdmVybGF5OiBIVE1MRGl2RWxlbWVudDtcblxuICAgIHJlc3BvbnNpdmVTdHlsZUVsZW1lbnQ6IGFueTtcblxuICAgIG92ZXJsYXlWaXNpYmxlOiBib29sZWFuO1xuXG4gICAgb25Nb2RlbENoYW5nZTogRnVuY3Rpb24gPSAoKSA9PiB7fTtcblxuICAgIG9uTW9kZWxUb3VjaGVkOiBGdW5jdGlvbiA9ICgpID0+IHt9O1xuXG4gICAgY2FsZW5kYXJFbGVtZW50OiBhbnk7XG5cbiAgICB0aW1lUGlja2VyVGltZXI6IGFueTtcblxuICAgIGRvY3VtZW50Q2xpY2tMaXN0ZW5lcjogVm9pZEZ1bmN0aW9uIHwgbnVsbDtcblxuICAgIGFuaW1hdGlvbkVuZExpc3RlbmVyOiBWb2lkRnVuY3Rpb24gfCBudWxsO1xuXG4gICAgdGlja3NUbzE5NzA6IG51bWJlcjtcblxuICAgIHllYXJPcHRpb25zOiBudW1iZXJbXTtcblxuICAgIGZvY3VzOiBib29sZWFuO1xuXG4gICAgaXNLZXlkb3duOiBib29sZWFuO1xuXG4gICAgZmlsbGVkOiBib29sZWFuO1xuXG4gICAgaW5wdXRGaWVsZFZhbHVlOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgX21pbkRhdGU6IERhdGU7XG5cbiAgICBfbWF4RGF0ZTogRGF0ZTtcblxuICAgIF9zaG93VGltZTogYm9vbGVhbjtcblxuICAgIF95ZWFyUmFuZ2U6IHN0cmluZztcblxuICAgIHByZXZlbnREb2N1bWVudExpc3RlbmVyOiBib29sZWFuO1xuXG4gICAgZGF0ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgaGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBmb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIGRpc2FibGVkRGF0ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgZGVjYWRlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwcmV2aW91c0ljb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIG5leHRJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICB0cmlnZ2VySWNvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgY2xlYXJJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBkZWNyZW1lbnRJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBpbmNyZW1lbnRJY29uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBfZGlzYWJsZWREYXRlczogQXJyYXk8RGF0ZT47XG5cbiAgICBfZGlzYWJsZWREYXlzOiBBcnJheTxudW1iZXI+O1xuXG4gICAgc2VsZWN0RWxlbWVudDogYW55O1xuXG4gICAgdG9kYXlFbGVtZW50OiBhbnk7XG5cbiAgICBmb2N1c0VsZW1lbnQ6IGFueTtcblxuICAgIHNjcm9sbEhhbmRsZXI6IENvbm5lY3RlZE92ZXJsYXlTY3JvbGxIYW5kbGVyIHwgbnVsbDtcblxuICAgIGRvY3VtZW50UmVzaXplTGlzdGVuZXI6IFZvaWRGdW5jdGlvbiB8IG51bGw7XG5cbiAgICBuYXZpZ2F0aW9uU3RhdGU6IGFueSA9IG51bGw7XG5cbiAgICBpc01vbnRoTmF2aWdhdGU6IGJvb2xlYW47XG5cbiAgICBpbml0aWFsaXplZDogYm9vbGVhbjtcblxuICAgIHRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBfbG9jYWxlOiBMb2NhbGVTZXR0aW5ncztcblxuICAgIF9yZXNwb25zaXZlT3B0aW9uczogYW55W107XG5cbiAgICBjdXJyZW50Vmlldzogc3RyaW5nO1xuXG4gICAgYXR0cmlidXRlU2VsZWN0b3I6IHN0cmluZztcblxuICAgIF9udW1iZXJPZk1vbnRoczogbnVtYmVyID0gMTtcblxuICAgIF9maXJzdERheU9mV2VlazogbnVtYmVyO1xuXG4gICAgX3ZpZXc6IENhbGVuZGFyVHlwZVZpZXcgPSAnZGF0ZSc7XG5cbiAgICBwcmV2ZW50Rm9jdXM6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBnZXQgdmlldygpOiBDYWxlbmRhclR5cGVWaWV3IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZpZXc7XG4gICAgfVxuXG4gICAgc2V0IHZpZXcodmlldzogQ2FsZW5kYXJUeXBlVmlldykge1xuICAgICAgICB0aGlzLl92aWV3ID0gdmlldztcbiAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9IHRoaXMuX3ZpZXc7XG4gICAgfVxuXG4gICAgQElucHV0KCkgZ2V0IGRlZmF1bHREYXRlKCk6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdERhdGU7XG4gICAgfVxuXG4gICAgc2V0IGRlZmF1bHREYXRlKGRlZmF1bHREYXRlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHREYXRlID0gZGVmYXVsdERhdGU7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBkZWZhdWx0RGF0ZSB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgdGhpcy5pbml0VGltZShkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlTW9udGhzKHRoaXMuY3VycmVudE1vbnRoLCB0aGlzLmN1cnJlbnRZZWFyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9kZWZhdWx0RGF0ZTogRGF0ZTtcblxuICAgIEBJbnB1dCgpIGdldCBtaW5EYXRlKCk6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgICB9XG5cbiAgICBzZXQgbWluRGF0ZShkYXRlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMuX21pbkRhdGUgPSBkYXRlO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRNb250aCAhPSB1bmRlZmluZWQgJiYgdGhpcy5jdXJyZW50TW9udGggIT0gbnVsbCAmJiB0aGlzLmN1cnJlbnRZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1vbnRocyh0aGlzLmN1cnJlbnRNb250aCwgdGhpcy5jdXJyZW50WWVhcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBnZXQgbWF4RGF0ZSgpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heERhdGU7XG4gICAgfVxuXG4gICAgc2V0IG1heERhdGUoZGF0ZTogRGF0ZSkge1xuICAgICAgICB0aGlzLl9tYXhEYXRlID0gZGF0ZTtcblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TW9udGggIT0gdW5kZWZpbmVkICYmIHRoaXMuY3VycmVudE1vbnRoICE9IG51bGwgJiYgdGhpcy5jdXJyZW50WWVhcikge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVNb250aHModGhpcy5jdXJyZW50TW9udGgsIHRoaXMuY3VycmVudFllYXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgZ2V0IGRpc2FibGVkRGF0ZXMoKTogRGF0ZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkRGF0ZXM7XG4gICAgfVxuXG4gICAgc2V0IGRpc2FibGVkRGF0ZXMoZGlzYWJsZWREYXRlczogRGF0ZVtdKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkRGF0ZXMgPSBkaXNhYmxlZERhdGVzO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50TW9udGggIT0gdW5kZWZpbmVkICYmIHRoaXMuY3VycmVudE1vbnRoICE9IG51bGwgJiYgdGhpcy5jdXJyZW50WWVhcikge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVNb250aHModGhpcy5jdXJyZW50TW9udGgsIHRoaXMuY3VycmVudFllYXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgZ2V0IGRpc2FibGVkRGF5cygpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZERheXM7XG4gICAgfVxuXG4gICAgc2V0IGRpc2FibGVkRGF5cyhkaXNhYmxlZERheXM6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkRGF5cyA9IGRpc2FibGVkRGF5cztcblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TW9udGggIT0gdW5kZWZpbmVkICYmIHRoaXMuY3VycmVudE1vbnRoICE9IG51bGwgJiYgdGhpcy5jdXJyZW50WWVhcikge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVNb250aHModGhpcy5jdXJyZW50TW9udGgsIHRoaXMuY3VycmVudFllYXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgZ2V0IHllYXJSYW5nZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5feWVhclJhbmdlO1xuICAgIH1cblxuICAgIHNldCB5ZWFyUmFuZ2UoeWVhclJhbmdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5feWVhclJhbmdlID0geWVhclJhbmdlO1xuXG4gICAgICAgIGlmICh5ZWFyUmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJzID0geWVhclJhbmdlLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBjb25zdCB5ZWFyU3RhcnQgPSBwYXJzZUludCh5ZWFyc1swXSk7XG4gICAgICAgICAgICBjb25zdCB5ZWFyRW5kID0gcGFyc2VJbnQoeWVhcnNbMV0pO1xuXG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlWWVhck9wdGlvbnMoeWVhclN0YXJ0LCB5ZWFyRW5kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIGdldCBzaG93VGltZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dUaW1lO1xuICAgIH1cblxuICAgIHNldCBzaG93VGltZShzaG93VGltZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zaG93VGltZSA9IHNob3dUaW1lO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRIb3VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdFRpbWUodGhpcy52YWx1ZSB8fCBuZXcgRGF0ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0ZmllbGQoKTtcbiAgICB9XG5cbiAgICBnZXQgbG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGdldCByZXNwb25zaXZlT3B0aW9ucygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zaXZlT3B0aW9ucztcbiAgICB9XG5cbiAgICBzZXQgcmVzcG9uc2l2ZU9wdGlvbnMocmVzcG9uc2l2ZU9wdGlvbnM6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNpdmVPcHRpb25zID0gcmVzcG9uc2l2ZU9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5kZXN0cm95UmVzcG9uc2l2ZVN0eWxlRWxlbWVudCgpO1xuICAgICAgICB0aGlzLmNyZWF0ZVJlc3BvbnNpdmVTdHlsZSgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGdldCBudW1iZXJPZk1vbnRocygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyT2ZNb250aHM7XG4gICAgfVxuXG4gICAgc2V0IG51bWJlck9mTW9udGhzKG51bWJlck9mTW9udGhzOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbnVtYmVyT2ZNb250aHMgPSBudW1iZXJPZk1vbnRocztcblxuICAgICAgICB0aGlzLmRlc3Ryb3lSZXNwb25zaXZlU3R5bGVFbGVtZW50KCk7XG4gICAgICAgIHRoaXMuY3JlYXRlUmVzcG9uc2l2ZVN0eWxlKCk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgZ2V0IGZpcnN0RGF5T2ZXZWVrKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maXJzdERheU9mV2VlaztcbiAgICB9XG5cbiAgICBzZXQgZmlyc3REYXlPZldlZWsoZmlyc3REYXlPZldlZWs6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9maXJzdERheU9mV2VlayA9IGZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgICAgIHRoaXMuY3JlYXRlV2Vla0RheXMoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBsb2NhbGUobmV3TG9jYWxlOiBMb2NhbGVTZXR0aW5ncykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0xvY2FsZSBwcm9wZXJ0eSBoYXMgbm8gZWZmZWN0LCB1c2UgbmV3IGkxOG4gQVBJIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3aW5kb3c6IFdpbmRvdztcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LCBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLCBwdWJsaWMgY2Q6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHpvbmU6IE5nWm9uZSwgcHJpdmF0ZSBjb25maWc6IFBhcmFsbGVsVUlBbmd1bGFyQ29uZmlnLCBwdWJsaWMgb3ZlcmxheVNlcnZpY2U6IE92ZXJsYXlTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMud2luZG93ID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldyBhcyBXaW5kb3c7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VsZWN0b3IgPSBVbmlxdWVDb21wb25lbnRJZCgpO1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5kZWZhdWx0RGF0ZSB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLmNyZWF0ZVJlc3BvbnNpdmVTdHlsZSgpO1xuICAgICAgICB0aGlzLmN1cnJlbnRNb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50WWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9IHRoaXMudmlldztcblxuICAgICAgICBpZiAodGhpcy52aWV3ID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlV2Vla0RheXMoKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdFRpbWUoZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1vbnRocyh0aGlzLmN1cnJlbnRNb250aCwgdGhpcy5jdXJyZW50WWVhcik7XG4gICAgICAgICAgICB0aGlzLnRpY2tzVG8xOTcwID0gKCgxOTcwIC0gMSkgKiAzNjUgKyBNYXRoLmZsb29yKDE5NzAgLyA0KSAtIE1hdGguZmxvb3IoMTk3MCAvIDEwMCkgKyBNYXRoLmZsb29yKDE5NzAgLyA0MDApKSAqIDI0ICogNjAgKiA2MCAqIDEwMDAwMDAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50cmFuc2xhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMuY29uZmlnLnRyYW5zbGF0aW9uT2JzZXJ2ZXIuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlV2Vla0RheXMoKTtcbiAgICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChpdGVtLmdldFR5cGUoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZGVjYWRlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNhZGVUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZGlzYWJsZWREYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAncHJldmlvdXNpY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c0ljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnbmV4dGljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRJY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ3RyaWdnZXJpY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VySWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdjbGVhcmljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFySWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdkZWNyZW1lbnRpY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnRJY29uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2luY3JlbWVudGljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluY3JlbWVudEljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb290ZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAodGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudFZpZXdDaGlsZCAmJiB0aGlzLmNvbnRlbnRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGVTZWxlY3RvciwgJycpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRGb2N1c2FibGVDZWxsKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubnVtYmVyT2ZNb250aHMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSBEb21IYW5kbGVyLmdldE91dGVyV2lkdGgodGhpcy5jb250YWluZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCkgKyAncHgnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFRyYW5zbGF0aW9uKG9wdGlvbjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRUcmFuc2xhdGlvbihvcHRpb24pO1xuICAgIH1cblxuICAgIHBvcHVsYXRlWWVhck9wdGlvbnMoc3RhcnQsIGVuZCkge1xuICAgICAgICB0aGlzLnllYXJPcHRpb25zID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnllYXJPcHRpb25zLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVXZWVrRGF5cygpIHtcbiAgICAgICAgdGhpcy53ZWVrRGF5cyA9IFtdO1xuICAgICAgICBsZXQgZGF5SW5kZXggPSB0aGlzLmdldEZpcnN0RGF0ZU9mV2VlaygpO1xuICAgICAgICBsZXQgZGF5TGFiZWxzID0gdGhpcy5nZXRUcmFuc2xhdGlvbihUcmFuc2xhdGlvbktleXMuREFZX05BTUVTX01JTik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLndlZWtEYXlzLnB1c2goZGF5TGFiZWxzW2RheUluZGV4XSk7XG4gICAgICAgICAgICBkYXlJbmRleCA9IGRheUluZGV4ID09IDYgPyAwIDogKytkYXlJbmRleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1vbnRoUGlja2VyVmFsdWVzKCkge1xuICAgICAgICBsZXQgbW9udGhQaWNrZXJWYWx1ZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMTE7IGkrKykge1xuICAgICAgICAgICAgbW9udGhQaWNrZXJWYWx1ZXMucHVzaCh0aGlzLmNvbmZpZy5nZXRUcmFuc2xhdGlvbignbW9udGhOYW1lc1Nob3J0JylbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1vbnRoUGlja2VyVmFsdWVzO1xuICAgIH1cblxuICAgIHllYXJQaWNrZXJWYWx1ZXMoKSB7XG4gICAgICAgIGxldCB5ZWFyUGlja2VyVmFsdWVzID0gW107XG4gICAgICAgIGxldCBiYXNlID0gdGhpcy5jdXJyZW50WWVhciAtICh0aGlzLmN1cnJlbnRZZWFyICUgMTApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgICAgIHllYXJQaWNrZXJWYWx1ZXMucHVzaChiYXNlICsgaSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geWVhclBpY2tlclZhbHVlcztcbiAgICB9XG5cbiAgICBjcmVhdGVNb250aHMobW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubW9udGhzID0gdGhpcy5tb250aHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm51bWJlck9mTW9udGhzOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBtID0gbW9udGggKyBpO1xuICAgICAgICAgICAgbGV0IHkgPSB5ZWFyO1xuICAgICAgICAgICAgaWYgKG0gPiAxMSkge1xuICAgICAgICAgICAgICAgIG0gPSAobSAlIDExKSAtIDE7XG4gICAgICAgICAgICAgICAgeSA9IHllYXIgKyAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm1vbnRocy5wdXNoKHRoaXMuY3JlYXRlTW9udGgobSwgeSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0V2Vla051bWJlcihkYXRlOiBEYXRlKSB7XG4gICAgICAgIGxldCBjaGVja0RhdGUgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGNoZWNrRGF0ZS5zZXREYXRlKGNoZWNrRGF0ZS5nZXREYXRlKCkgKyA0IC0gKGNoZWNrRGF0ZS5nZXREYXkoKSB8fCA3KSk7XG4gICAgICAgIGxldCB0aW1lID0gY2hlY2tEYXRlLmdldFRpbWUoKTtcbiAgICAgICAgY2hlY2tEYXRlLnNldE1vbnRoKDApO1xuICAgICAgICBjaGVja0RhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yb3VuZCgodGltZSAtIGNoZWNrRGF0ZS5nZXRUaW1lKCkpIC8gODY0MDAwMDApIC8gNykgKyAxO1xuICAgIH1cblxuICAgIGNyZWF0ZU1vbnRoKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcikge1xuICAgICAgICBsZXQgZGF0ZXMgPSBbXTtcbiAgICAgICAgbGV0IGZpcnN0RGF5ID0gdGhpcy5nZXRGaXJzdERheU9mTW9udGhJbmRleChtb250aCwgeWVhcik7XG4gICAgICAgIGxldCBkYXlzTGVuZ3RoID0gdGhpcy5nZXREYXlzQ291bnRJbk1vbnRoKG1vbnRoLCB5ZWFyKTtcbiAgICAgICAgbGV0IHByZXZNb250aERheXNMZW5ndGggPSB0aGlzLmdldERheXNDb3VudEluUHJldk1vbnRoKG1vbnRoLCB5ZWFyKTtcbiAgICAgICAgbGV0IGRheU5vID0gMTtcbiAgICAgICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgICAgbGV0IHdlZWtOdW1iZXJzID0gW107XG4gICAgICAgIGxldCBtb250aFJvd3MgPSBNYXRoLmNlaWwoKGRheXNMZW5ndGggKyBmaXJzdERheSkgLyA3KTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vbnRoUm93czsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgd2VlayA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoaSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IHByZXZNb250aERheXNMZW5ndGggLSBmaXJzdERheSArIDE7IGogPD0gcHJldk1vbnRoRGF5c0xlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gdGhpcy5nZXRQcmV2aW91c01vbnRoQW5kWWVhcihtb250aCwgeWVhcik7XG4gICAgICAgICAgICAgICAgICAgIHdlZWsucHVzaCh7IGRheTogaiwgbW9udGg6IHByZXYubW9udGgsIHllYXI6IHByZXYueWVhciwgb3RoZXJNb250aDogdHJ1ZSwgdG9kYXk6IHRoaXMuaXNUb2RheSh0b2RheSwgaiwgcHJldi5tb250aCwgcHJldi55ZWFyKSwgc2VsZWN0YWJsZTogdGhpcy5pc1NlbGVjdGFibGUoaiwgcHJldi5tb250aCwgcHJldi55ZWFyLCB0cnVlKSB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgcmVtYWluaW5nRGF5c0xlbmd0aCA9IDcgLSB3ZWVrLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlbWFpbmluZ0RheXNMZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrLnB1c2goeyBkYXk6IGRheU5vLCBtb250aDogbW9udGgsIHllYXI6IHllYXIsIHRvZGF5OiB0aGlzLmlzVG9kYXkodG9kYXksIGRheU5vLCBtb250aCwgeWVhciksIHNlbGVjdGFibGU6IHRoaXMuaXNTZWxlY3RhYmxlKGRheU5vLCBtb250aCwgeWVhciwgZmFsc2UpIH0pO1xuICAgICAgICAgICAgICAgICAgICBkYXlObysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCA3OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRheU5vID4gZGF5c0xlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSB0aGlzLmdldE5leHRNb250aEFuZFllYXIobW9udGgsIHllYXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2Vlay5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXk6IGRheU5vIC0gZGF5c0xlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aDogbmV4dC5tb250aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZWFyOiBuZXh0LnllYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJNb250aDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2RheTogdGhpcy5pc1RvZGF5KHRvZGF5LCBkYXlObyAtIGRheXNMZW5ndGgsIG5leHQubW9udGgsIG5leHQueWVhciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdGhpcy5pc1NlbGVjdGFibGUoZGF5Tm8gLSBkYXlzTGVuZ3RoLCBuZXh0Lm1vbnRoLCBuZXh0LnllYXIsIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlZWsucHVzaCh7IGRheTogZGF5Tm8sIG1vbnRoOiBtb250aCwgeWVhcjogeWVhciwgdG9kYXk6IHRoaXMuaXNUb2RheSh0b2RheSwgZGF5Tm8sIG1vbnRoLCB5ZWFyKSwgc2VsZWN0YWJsZTogdGhpcy5pc1NlbGVjdGFibGUoZGF5Tm8sIG1vbnRoLCB5ZWFyLCBmYWxzZSkgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBkYXlObysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1dlZWspIHtcbiAgICAgICAgICAgICAgICB3ZWVrTnVtYmVycy5wdXNoKHRoaXMuZ2V0V2Vla051bWJlcihuZXcgRGF0ZSh3ZWVrWzBdLnllYXIsIHdlZWtbMF0ubW9udGgsIHdlZWtbMF0uZGF5KSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlcy5wdXNoKHdlZWspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgICAgIHllYXI6IHllYXIsXG4gICAgICAgICAgICBkYXRlczogZGF0ZXMsXG4gICAgICAgICAgICB3ZWVrTnVtYmVyczogd2Vla051bWJlcnNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpbml0VGltZShkYXRlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMucG0gPSBkYXRlLmdldEhvdXJzKCkgPiAxMTtcblxuICAgICAgICBpZiAodGhpcy5zaG93VGltZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TWludXRlID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWNvbmQgPSBkYXRlLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudEhvdXJQTShkYXRlLmdldEhvdXJzKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGltZU9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRIb3VyID0gMDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY29uZCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuYXZCYWNrd2FyZChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNNb250aE5hdmlnYXRlID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VmlldyA9PT0gJ21vbnRoJykge1xuICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnRZZWFyKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUZvY3VzKCk7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50RGVjYWRlKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUZvY3VzKCk7XG4gICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRNb250aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gMTE7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnRZZWFyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoLS07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25Nb250aENoYW5nZS5lbWl0KHsgbW9udGg6IHRoaXMuY3VycmVudE1vbnRoICsgMSwgeWVhcjogdGhpcy5jdXJyZW50WWVhciB9KTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlTW9udGhzKHRoaXMuY3VycmVudE1vbnRoLCB0aGlzLmN1cnJlbnRZZWFyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5hdkZvcndhcmQoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzTW9udGhOYXZpZ2F0ZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMuaW5jcmVtZW50WWVhcigpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGb2N1cygpO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50VmlldyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICB0aGlzLmluY3JlbWVudERlY2FkZSgpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGb2N1cygpO1xuICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50TW9udGggPT09IDExKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TW9udGggPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5jcmVtZW50WWVhcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRNb250aCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9uTW9udGhDaGFuZ2UuZW1pdCh7IG1vbnRoOiB0aGlzLmN1cnJlbnRNb250aCArIDEsIHllYXI6IHRoaXMuY3VycmVudFllYXIgfSk7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1vbnRocyh0aGlzLmN1cnJlbnRNb250aCwgdGhpcy5jdXJyZW50WWVhcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZWNyZW1lbnRZZWFyKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRZZWFyLS07XG5cbiAgICAgICAgaWYgKHRoaXMueWVhck5hdmlnYXRvciAmJiB0aGlzLmN1cnJlbnRZZWFyIDwgdGhpcy55ZWFyT3B0aW9uc1swXSkge1xuICAgICAgICAgICAgbGV0IGRpZmZlcmVuY2UgPSB0aGlzLnllYXJPcHRpb25zW3RoaXMueWVhck9wdGlvbnMubGVuZ3RoIC0gMV0gLSB0aGlzLnllYXJPcHRpb25zWzBdO1xuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZVllYXJPcHRpb25zKHRoaXMueWVhck9wdGlvbnNbMF0gLSBkaWZmZXJlbmNlLCB0aGlzLnllYXJPcHRpb25zW3RoaXMueWVhck9wdGlvbnMubGVuZ3RoIC0gMV0gLSBkaWZmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlY3JlbWVudERlY2FkZSgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50WWVhciA9IHRoaXMuY3VycmVudFllYXIgLSAxMDtcbiAgICB9XG5cbiAgICBpbmNyZW1lbnREZWNhZGUoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFllYXIgPSB0aGlzLmN1cnJlbnRZZWFyICsgMTA7XG4gICAgfVxuXG4gICAgaW5jcmVtZW50WWVhcigpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50WWVhcisrO1xuXG4gICAgICAgIGlmICh0aGlzLnllYXJOYXZpZ2F0b3IgJiYgdGhpcy5jdXJyZW50WWVhciA+IHRoaXMueWVhck9wdGlvbnNbdGhpcy55ZWFyT3B0aW9ucy5sZW5ndGggLSAxXSkge1xuICAgICAgICAgICAgbGV0IGRpZmZlcmVuY2UgPSB0aGlzLnllYXJPcHRpb25zW3RoaXMueWVhck9wdGlvbnMubGVuZ3RoIC0gMV0gLSB0aGlzLnllYXJPcHRpb25zWzBdO1xuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZVllYXJPcHRpb25zKHRoaXMueWVhck9wdGlvbnNbMF0gKyBkaWZmZXJlbmNlLCB0aGlzLnllYXJPcHRpb25zW3RoaXMueWVhck9wdGlvbnMubGVuZ3RoIC0gMV0gKyBkaWZmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaFRvTW9udGhWaWV3KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFZpZXcoJ21vbnRoJyk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgc3dpdGNoVG9ZZWFyVmlldyhldmVudCkge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRWaWV3KCd5ZWFyJyk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25EYXRlU2VsZWN0KGV2ZW50LCBkYXRlTWV0YSkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhZGF0ZU1ldGEuc2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb24oKSAmJiB0aGlzLmlzU2VsZWN0ZWQoZGF0ZU1ldGEpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKGRhdGUsIGkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNEYXRlRXF1YWxzKGRhdGUsIGRhdGVNZXRhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKHRoaXMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkU2VsZWN0RGF0ZShkYXRlTWV0YSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGUoZGF0ZU1ldGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb24oKSAmJiB0aGlzLmhpZGVPbkRhdGVUaW1lU2VsZWN0KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZU92ZXJsYXkoKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlTW9kYWxpdHkoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSwgMTUwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXRmaWVsZCgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHNob3VsZFNlbGVjdERhdGUoZGF0ZU1ldGEpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpKSByZXR1cm4gdGhpcy5tYXhEYXRlQ291bnQgIT0gbnVsbCA/IHRoaXMubWF4RGF0ZUNvdW50ID4gKHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlLmxlbmd0aCA6IDApIDogdHJ1ZTtcbiAgICAgICAgZWxzZSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbk1vbnRoU2VsZWN0KGV2ZW50LCBpbmRleCkge1xuICAgICAgICBpZiAodGhpcy52aWV3ID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICB0aGlzLm9uRGF0ZVNlbGVjdChldmVudCwgeyB5ZWFyOiB0aGlzLmN1cnJlbnRZZWFyLCBtb250aDogaW5kZXgsIGRheTogMSwgc2VsZWN0YWJsZTogdHJ1ZSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1vbnRocyh0aGlzLmN1cnJlbnRNb250aCwgdGhpcy5jdXJyZW50WWVhcik7XG4gICAgICAgICAgICB0aGlzLnNldEN1cnJlbnRWaWV3KCdkYXRlJyk7XG4gICAgICAgICAgICB0aGlzLm9uTW9udGhDaGFuZ2UuZW1pdCh7IG1vbnRoOiB0aGlzLmN1cnJlbnRNb250aCArIDEsIHllYXI6IHRoaXMuY3VycmVudFllYXIgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblllYXJTZWxlY3QoZXZlbnQsIHllYXIpIHtcbiAgICAgICAgaWYgKHRoaXMudmlldyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICB0aGlzLm9uRGF0ZVNlbGVjdChldmVudCwgeyB5ZWFyOiB5ZWFyLCBtb250aDogMCwgZGF5OiAxLCBzZWxlY3RhYmxlOiB0cnVlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50WWVhciA9IHllYXI7XG4gICAgICAgICAgICB0aGlzLnNldEN1cnJlbnRWaWV3KCdtb250aCcpO1xuICAgICAgICAgICAgdGhpcy5vblllYXJDaGFuZ2UuZW1pdCh7IG1vbnRoOiB0aGlzLmN1cnJlbnRNb250aCArIDEsIHllYXI6IHRoaXMuY3VycmVudFllYXIgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVJbnB1dGZpZWxkKCkge1xuICAgICAgICBsZXQgZm9ybWF0dGVkVmFsdWUgPSAnJztcblxuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb24oKSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdGhpcy5mb3JtYXREYXRlVGltZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGVBc1N0cmluZyA9IHRoaXMuZm9ybWF0RGF0ZVRpbWUodGhpcy52YWx1ZVtpXSk7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlICs9IGRhdGVBc1N0cmluZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgKz0gdGhpcy5tdWx0aXBsZVNlcGFyYXRvciArICcgJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1JhbmdlU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3RhcnREYXRlID0gdGhpcy52YWx1ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVuZERhdGUgPSB0aGlzLnZhbHVlWzFdO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gdGhpcy5mb3JtYXREYXRlVGltZShzdGFydERhdGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgKz0gJyAnICsgdGhpcy5yYW5nZVNlcGFyYXRvciArICcgJyArIHRoaXMuZm9ybWF0RGF0ZVRpbWUoZW5kRGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlucHV0RmllbGRWYWx1ZSA9IGZvcm1hdHRlZFZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxlZFN0YXRlKCk7XG4gICAgICAgIGlmICh0aGlzLmlucHV0ZmllbGRWaWV3Q2hpbGQgJiYgdGhpcy5pbnB1dGZpZWxkVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRmaWVsZFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5pbnB1dEZpZWxkVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JtYXREYXRlVGltZShkYXRlKSB7XG4gICAgICAgIGxldCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMua2VlcEludmFsaWQgPyBkYXRlIDogbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkRGF0ZShkYXRlKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZU9ubHkpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuZm9ybWF0VGltZShkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmZvcm1hdERhdGUoZGF0ZSwgdGhpcy5nZXREYXRlRm9ybWF0KCkpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlICs9ICcgJyArIHRoaXMuZm9ybWF0VGltZShkYXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0dGVkVmFsdWU7XG4gICAgfVxuXG4gICAgc2V0Q3VycmVudEhvdXJQTShob3VyczogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLmhvdXJGb3JtYXQgPT0gJzEyJykge1xuICAgICAgICAgICAgdGhpcy5wbSA9IGhvdXJzID4gMTE7XG4gICAgICAgICAgICBpZiAoaG91cnMgPj0gMTIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRIb3VyID0gaG91cnMgPT0gMTIgPyAxMiA6IGhvdXJzIC0gMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEhvdXIgPSBob3VycyA9PSAwID8gMTIgOiBob3VycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhvdXIgPSBob3VycztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEN1cnJlbnRWaWV3KGN1cnJlbnRWaWV3OiBDYWxlbmRhclR5cGVWaWV3KSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSBjdXJyZW50VmlldztcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuYWxpZ25PdmVybGF5KCk7XG4gICAgfVxuXG4gICAgc2VsZWN0RGF0ZShkYXRlTWV0YSkge1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKGRhdGVNZXRhLnllYXIsIGRhdGVNZXRhLm1vbnRoLCBkYXRlTWV0YS5kYXkpO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ob3VyRm9ybWF0ID09ICcxMicpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50SG91ciA9PT0gMTIpIGRhdGUuc2V0SG91cnModGhpcy5wbSA/IDEyIDogMCk7XG4gICAgICAgICAgICAgICAgZWxzZSBkYXRlLnNldEhvdXJzKHRoaXMucG0gPyB0aGlzLmN1cnJlbnRIb3VyICsgMTIgOiB0aGlzLmN1cnJlbnRIb3VyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRIb3Vycyh0aGlzLmN1cnJlbnRIb3VyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZS5zZXRNaW51dGVzKHRoaXMuY3VycmVudE1pbnV0ZSk7XG4gICAgICAgICAgICBkYXRlLnNldFNlY29uZHModGhpcy5jdXJyZW50U2Vjb25kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1pbkRhdGUgJiYgdGhpcy5taW5EYXRlID4gZGF0ZSkge1xuICAgICAgICAgICAgZGF0ZSA9IHRoaXMubWluRGF0ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudEhvdXJQTShkYXRlLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TWludXRlID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWNvbmQgPSBkYXRlLmdldFNlY29uZHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1heERhdGUgJiYgdGhpcy5tYXhEYXRlIDwgZGF0ZSkge1xuICAgICAgICAgICAgZGF0ZSA9IHRoaXMubWF4RGF0ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudEhvdXJQTShkYXRlLmdldEhvdXJzKCkpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TWludXRlID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTZWNvbmQgPSBkYXRlLmdldFNlY29uZHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwoZGF0ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy52YWx1ZSA/IFsuLi50aGlzLnZhbHVlLCBkYXRlXSA6IFtkYXRlXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1JhbmdlU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9IHRoaXMudmFsdWVbMF07XG4gICAgICAgICAgICAgICAgbGV0IGVuZERhdGUgPSB0aGlzLnZhbHVlWzFdO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFlbmREYXRlICYmIGRhdGUuZ2V0VGltZSgpID49IHN0YXJ0RGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlID0gZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb2RlbChbc3RhcnREYXRlLCBlbmREYXRlXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwoW2RhdGUsIG51bGxdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChkYXRlKTtcbiAgICB9XG5cbiAgICB1cGRhdGVNb2RlbCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YVR5cGUgPT0gJ2RhdGUnKSB7XG4gICAgICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhVHlwZSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb24oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLmZvcm1hdERhdGVUaW1lKHRoaXMudmFsdWUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0cmluZ0FyclZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdBcnJWYWx1ZSA9IHRoaXMudmFsdWUubWFwKChkYXRlKSA9PiB0aGlzLmZvcm1hdERhdGVUaW1lKGRhdGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHN0cmluZ0FyclZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEZpcnN0RGF5T2ZNb250aEluZGV4KG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcikge1xuICAgICAgICBsZXQgZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgICAgZGF5LnNldERhdGUoMSk7XG4gICAgICAgIGRheS5zZXRNb250aChtb250aCk7XG4gICAgICAgIGRheS5zZXRGdWxsWWVhcih5ZWFyKTtcblxuICAgICAgICBsZXQgZGF5SW5kZXggPSBkYXkuZ2V0RGF5KCkgKyB0aGlzLmdldFN1bmRheUluZGV4KCk7XG4gICAgICAgIHJldHVybiBkYXlJbmRleCA+PSA3ID8gZGF5SW5kZXggLSA3IDogZGF5SW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0RGF5c0NvdW50SW5Nb250aChtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIDMyIC0gdGhpcy5kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMzIpKS5nZXREYXRlKCk7XG4gICAgfVxuXG4gICAgZ2V0RGF5c0NvdW50SW5QcmV2TW9udGgobW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyKSB7XG4gICAgICAgIGxldCBwcmV2ID0gdGhpcy5nZXRQcmV2aW91c01vbnRoQW5kWWVhcihtb250aCwgeWVhcik7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERheXNDb3VudEluTW9udGgocHJldi5tb250aCwgcHJldi55ZWFyKTtcbiAgICB9XG5cbiAgICBnZXRQcmV2aW91c01vbnRoQW5kWWVhcihtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IG0sIHk7XG5cbiAgICAgICAgaWYgKG1vbnRoID09PSAwKSB7XG4gICAgICAgICAgICBtID0gMTE7XG4gICAgICAgICAgICB5ID0geWVhciAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtID0gbW9udGggLSAxO1xuICAgICAgICAgICAgeSA9IHllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBtb250aDogbSwgeWVhcjogeSB9O1xuICAgIH1cblxuICAgIGdldE5leHRNb250aEFuZFllYXIobW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyKSB7XG4gICAgICAgIGxldCBtLCB5O1xuXG4gICAgICAgIGlmIChtb250aCA9PT0gMTEpIHtcbiAgICAgICAgICAgIG0gPSAwO1xuICAgICAgICAgICAgeSA9IHllYXIgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbSA9IG1vbnRoICsgMTtcbiAgICAgICAgICAgIHkgPSB5ZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgbW9udGg6IG0sIHllYXI6IHkgfTtcbiAgICB9XG5cbiAgICBnZXRTdW5kYXlJbmRleCgpIHtcbiAgICAgICAgbGV0IGZpcnN0RGF5T2ZXZWVrID0gdGhpcy5nZXRGaXJzdERhdGVPZldlZWsoKTtcblxuICAgICAgICByZXR1cm4gZmlyc3REYXlPZldlZWsgPiAwID8gNyAtIGZpcnN0RGF5T2ZXZWVrIDogMDtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKGRhdGVNZXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNEYXRlRXF1YWxzKHRoaXMudmFsdWUsIGRhdGVNZXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBkYXRlIG9mIHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSB0aGlzLmlzRGF0ZUVxdWFscyhkYXRlLCBkYXRlTWV0YSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNSYW5nZVNlbGVjdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVbMV0pIHJldHVybiB0aGlzLmlzRGF0ZUVxdWFscyh0aGlzLnZhbHVlWzBdLCBkYXRlTWV0YSkgfHwgdGhpcy5pc0RhdGVFcXVhbHModGhpcy52YWx1ZVsxXSwgZGF0ZU1ldGEpIHx8IHRoaXMuaXNEYXRlQmV0d2Vlbih0aGlzLnZhbHVlWzBdLCB0aGlzLnZhbHVlWzFdLCBkYXRlTWV0YSk7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gdGhpcy5pc0RhdGVFcXVhbHModGhpcy52YWx1ZVswXSwgZGF0ZU1ldGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNDb21wYXJhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB0aGlzLnZhbHVlICE9PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICBpc01vbnRoU2VsZWN0ZWQobW9udGgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDb21wYXJhYmxlKCkgJiYgIXRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpKSB7XG4gICAgICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLmlzUmFuZ2VTZWxlY3Rpb24oKSA/IHRoaXMudmFsdWUgOiBbdGhpcy52YWx1ZSwgdGhpcy52YWx1ZV07XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IG5ldyBEYXRlKHRoaXMuY3VycmVudFllYXIsIG1vbnRoLCAxKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZCA+PSBzdGFydCAmJiBzZWxlY3RlZCA8PSAoZW5kID8/IHN0YXJ0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNNb250aERpc2FibGVkKG1vbnRoKSB7XG4gICAgICAgIGZvciAobGV0IGRheSA9IDE7IGRheSA8IHRoaXMuZ2V0RGF5c0NvdW50SW5Nb250aChtb250aCwgdGhpcy5jdXJyZW50WWVhcikgKyAxOyBkYXkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RhYmxlKGRheSwgbW9udGgsIHRoaXMuY3VycmVudFllYXIsIGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc1llYXJTZWxlY3RlZCh5ZWFyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ29tcGFyYWJsZSgpKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLmlzUmFuZ2VTZWxlY3Rpb24oKSA/IHRoaXMudmFsdWVbMF0gOiB0aGlzLnZhbHVlO1xuXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpID8gdmFsdWUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciA6IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlzRGF0ZUVxdWFscyh2YWx1ZSwgZGF0ZU1ldGEpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIE9iamVjdFV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5nZXREYXRlKCkgPT09IGRhdGVNZXRhLmRheSAmJiB2YWx1ZS5nZXRNb250aCgpID09PSBkYXRlTWV0YS5tb250aCAmJiB2YWx1ZS5nZXRGdWxsWWVhcigpID09PSBkYXRlTWV0YS55ZWFyO1xuICAgICAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc0RhdGVCZXR3ZWVuKHN0YXJ0LCBlbmQsIGRhdGVNZXRhKSB7XG4gICAgICAgIGxldCBiZXR3ZWVuOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgIGlmIChzdGFydCAmJiBlbmQpIHtcbiAgICAgICAgICAgIGxldCBkYXRlOiBEYXRlID0gbmV3IERhdGUoZGF0ZU1ldGEueWVhciwgZGF0ZU1ldGEubW9udGgsIGRhdGVNZXRhLmRheSk7XG4gICAgICAgICAgICByZXR1cm4gc3RhcnQuZ2V0VGltZSgpIDw9IGRhdGUuZ2V0VGltZSgpICYmIGVuZC5nZXRUaW1lKCkgPj0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYmV0d2VlbjtcbiAgICB9XG5cbiAgICBpc1NpbmdsZVNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZSc7XG4gICAgfVxuXG4gICAgaXNSYW5nZVNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3JhbmdlJztcbiAgICB9XG5cbiAgICBpc011bHRpcGxlU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGlwbGUnO1xuICAgIH1cblxuICAgIGlzVG9kYXkodG9kYXksIGRheSwgbW9udGgsIHllYXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRvZGF5LmdldERhdGUoKSA9PT0gZGF5ICYmIHRvZGF5LmdldE1vbnRoKCkgPT09IG1vbnRoICYmIHRvZGF5LmdldEZ1bGxZZWFyKCkgPT09IHllYXI7XG4gICAgfVxuXG4gICAgaXNTZWxlY3RhYmxlKGRheSwgbW9udGgsIHllYXIsIG90aGVyTW9udGgpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHZhbGlkTWluID0gdHJ1ZTtcbiAgICAgICAgbGV0IHZhbGlkTWF4ID0gdHJ1ZTtcbiAgICAgICAgbGV0IHZhbGlkRGF0ZSA9IHRydWU7XG4gICAgICAgIGxldCB2YWxpZERheSA9IHRydWU7XG5cbiAgICAgICAgaWYgKG90aGVyTW9udGggJiYgIXRoaXMuc2VsZWN0T3RoZXJNb250aHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSA+IHllYXIpIHtcbiAgICAgICAgICAgICAgICB2YWxpZE1pbiA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhcikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pbkRhdGUuZ2V0TW9udGgoKSA+IG1vbnRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkTWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1pbkRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWluRGF0ZS5nZXREYXRlKCkgPiBkYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkTWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkgPCB5ZWFyKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRNYXggPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlLmdldE1vbnRoKCkgPCBtb250aCkge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZE1heCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXhEYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heERhdGUuZ2V0RGF0ZSgpIDwgZGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZE1heCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWREYXRlcykge1xuICAgICAgICAgICAgdmFsaWREYXRlID0gIXRoaXMuaXNEYXRlRGlzYWJsZWQoZGF5LCBtb250aCwgeWVhcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZERheXMpIHtcbiAgICAgICAgICAgIHZhbGlkRGF5ID0gIXRoaXMuaXNEYXlEaXNhYmxlZChkYXksIG1vbnRoLCB5ZWFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWxpZE1pbiAmJiB2YWxpZE1heCAmJiB2YWxpZERhdGUgJiYgdmFsaWREYXk7XG4gICAgfVxuXG4gICAgaXNEYXRlRGlzYWJsZWQoZGF5OiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZERhdGVzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkaXNhYmxlZERhdGUgb2YgdGhpcy5kaXNhYmxlZERhdGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRpc2FibGVkRGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmIGRpc2FibGVkRGF0ZS5nZXRNb250aCgpID09PSBtb250aCAmJiBkaXNhYmxlZERhdGUuZ2V0RGF0ZSgpID09PSBkYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlzRGF5RGlzYWJsZWQoZGF5OiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZERheXMpIHtcbiAgICAgICAgICAgIGxldCB3ZWVrZGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSk7XG4gICAgICAgICAgICBsZXQgd2Vla2RheU51bWJlciA9IHdlZWtkYXkuZ2V0RGF5KCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZERheXMuaW5kZXhPZih3ZWVrZGF5TnVtYmVyKSAhPT0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG9uSW5wdXRGb2N1cyhldmVudDogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5mb2N1cyA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLnNob3dPbkZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dPdmVybGF5KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uSW5wdXRDbGljaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd09uRm9jdXMgJiYgIXRoaXMub3ZlcmxheVZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd092ZXJsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW5wdXRCbHVyKGV2ZW50OiBFdmVudCkge1xuICAgICAgICB0aGlzLmZvY3VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25CbHVyLmVtaXQoZXZlbnQpO1xuICAgICAgICBpZiAoIXRoaXMua2VlcEludmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5wdXRmaWVsZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Nb2RlbFRvdWNoZWQoKTtcbiAgICB9XG5cbiAgICBvbkJ1dHRvbkNsaWNrKGV2ZW50LCBpbnB1dGZpZWxkKSB7XG4gICAgICAgIGlmICghdGhpcy5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgICAgICAgaW5wdXRmaWVsZC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5zaG93T3ZlcmxheSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oaWRlT3ZlcmxheSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuaW5wdXRGaWVsZFZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkNsZWFyLmVtaXQoKTtcbiAgICB9XG5cbiAgICBvbk92ZXJsYXlDbGljayhldmVudCkge1xuICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHRhcmdldDogdGhpcy5lbC5uYXRpdmVFbGVtZW50XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldE1vbnRoTmFtZShpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0VHJhbnNsYXRpb24oJ21vbnRoTmFtZXMnKVtpbmRleF07XG4gICAgfVxuXG4gICAgZ2V0WWVhcihtb250aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmlldyA9PT0gJ21vbnRoJyA/IHRoaXMuY3VycmVudFllYXIgOiBtb250aC55ZWFyO1xuICAgIH1cblxuICAgIHN3aXRjaFZpZXdCdXR0b25EaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubnVtYmVyT2ZNb250aHMgPiAxIHx8IHRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgb25QcmV2QnV0dG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU3RhdGUgPSB7IGJhY2t3YXJkOiB0cnVlLCBidXR0b246IHRydWUgfTtcbiAgICAgICAgdGhpcy5uYXZCYWNrd2FyZChldmVudCk7XG4gICAgfVxuXG4gICAgb25OZXh0QnV0dG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU3RhdGUgPSB7IGJhY2t3YXJkOiBmYWxzZSwgYnV0dG9uOiB0cnVlIH07XG4gICAgICAgIHRoaXMubmF2Rm9yd2FyZChldmVudCk7XG4gICAgfVxuXG4gICAgb25Db250YWluZXJCdXR0b25LZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQud2hpY2gpIHtcbiAgICAgICAgICAgIC8vdGFiXG4gICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlubGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYXBGb2N1cyhldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvL2VzY2FwZVxuICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvL05vb3BcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW5wdXRLZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNLZXlkb3duID0gdHJ1ZTtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDQwICYmIHRoaXMuY29udGVudFZpZXdDaGlsZCkge1xuICAgICAgICAgICAgdGhpcy50cmFwRm9jdXMoZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IDkgJiYgdGhpcy5jb250ZW50Vmlld0NoaWxkKSB7XG4gICAgICAgICAgICBEb21IYW5kbGVyLmdldEZvY3VzYWJsZUVsZW1lbnRzKHRoaXMuY29udGVudFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50KS5mb3JFYWNoKChlbCkgPT4gKGVsLnRhYkluZGV4ID0gJy0xJykpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheVZpc2libGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRhdGVDZWxsS2V5ZG93bihldmVudCwgZGF0ZSwgZ3JvdXBJbmRleCkge1xuICAgICAgICBjb25zdCBjZWxsQ29udGVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIGNvbnN0IGNlbGwgPSBjZWxsQ29udGVudC5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQud2hpY2gpIHtcbiAgICAgICAgICAgIC8vZG93biBhcnJvd1xuICAgICAgICAgICAgY2FzZSA0MDoge1xuICAgICAgICAgICAgICAgIGNlbGxDb250ZW50LnRhYkluZGV4ID0gJy0xJztcbiAgICAgICAgICAgICAgICBsZXQgY2VsbEluZGV4ID0gRG9tSGFuZGxlci5pbmRleChjZWxsKTtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dFJvdyA9IGNlbGwucGFyZW50RWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgaWYgKG5leHRSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvY3VzQ2VsbCA9IG5leHRSb3cuY2hpbGRyZW5bY2VsbEluZGV4XS5jaGlsZHJlblswXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKERvbUhhbmRsZXIuaGFzQ2xhc3MoZm9jdXNDZWxsLCAncC1kaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TdGF0ZSA9IHsgYmFja3dhcmQ6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdkZvcndhcmQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFJvdy5jaGlsZHJlbltjZWxsSW5kZXhdLmNoaWxkcmVuWzBdLnRhYkluZGV4ID0gJzAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFJvdy5jaGlsZHJlbltjZWxsSW5kZXhdLmNoaWxkcmVuWzBdLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TdGF0ZSA9IHsgYmFja3dhcmQ6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2Rm9yd2FyZChldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vdXAgYXJyb3dcbiAgICAgICAgICAgIGNhc2UgMzg6IHtcbiAgICAgICAgICAgICAgICBjZWxsQ29udGVudC50YWJJbmRleCA9ICctMSc7XG4gICAgICAgICAgICAgICAgbGV0IGNlbGxJbmRleCA9IERvbUhhbmRsZXIuaW5kZXgoY2VsbCk7XG4gICAgICAgICAgICAgICAgbGV0IHByZXZSb3cgPSBjZWxsLnBhcmVudEVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgICAgICAgICAgICBpZiAocHJldlJvdykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm9jdXNDZWxsID0gcHJldlJvdy5jaGlsZHJlbltjZWxsSW5kZXhdLmNoaWxkcmVuWzBdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoRG9tSGFuZGxlci5oYXNDbGFzcyhmb2N1c0NlbGwsICdwLWRpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblN0YXRlID0geyBiYWNrd2FyZDogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZCYWNrd2FyZChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2N1c0NlbGwudGFiSW5kZXggPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2N1c0NlbGwuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblN0YXRlID0geyBiYWNrd2FyZDogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdkJhY2t3YXJkKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9sZWZ0IGFycm93XG4gICAgICAgICAgICBjYXNlIDM3OiB7XG4gICAgICAgICAgICAgICAgY2VsbENvbnRlbnQudGFiSW5kZXggPSAnLTEnO1xuICAgICAgICAgICAgICAgIGxldCBwcmV2Q2VsbCA9IGNlbGwucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgICAgICAgICAgICBpZiAocHJldkNlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvY3VzQ2VsbCA9IHByZXZDZWxsLmNoaWxkcmVuWzBdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoRG9tSGFuZGxlci5oYXNDbGFzcyhmb2N1c0NlbGwsICdwLWRpc2FibGVkJykgfHwgRG9tSGFuZGxlci5oYXNDbGFzcyhmb2N1c0NlbGwucGFyZW50RWxlbWVudCwgJ3AtZGF0ZXBpY2tlci13ZWVrbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb01vbnRoKHRydWUsIGdyb3VwSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNDZWxsLnRhYkluZGV4ID0gJzAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNDZWxsLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9Nb250aCh0cnVlLCBncm91cEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9yaWdodCBhcnJvd1xuICAgICAgICAgICAgY2FzZSAzOToge1xuICAgICAgICAgICAgICAgIGNlbGxDb250ZW50LnRhYkluZGV4ID0gJy0xJztcbiAgICAgICAgICAgICAgICBsZXQgbmV4dENlbGwgPSBjZWxsLm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgICAgICBpZiAobmV4dENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvY3VzQ2VsbCA9IG5leHRDZWxsLmNoaWxkcmVuWzBdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoRG9tSGFuZGxlci5oYXNDbGFzcyhmb2N1c0NlbGwsICdwLWRpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb01vbnRoKGZhbHNlLCBncm91cEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzQ2VsbC50YWJJbmRleCA9ICcwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzQ2VsbC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTW9udGgoZmFsc2UsIGdyb3VwSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2VudGVyXG4gICAgICAgICAgICAvL3NwYWNlXG4gICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgY2FzZSAzMjoge1xuICAgICAgICAgICAgICAgIHRoaXMub25EYXRlU2VsZWN0KGV2ZW50LCBkYXRlKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2VzY2FwZVxuICAgICAgICAgICAgY2FzZSAyNzoge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RhYlxuICAgICAgICAgICAgY2FzZSA5OiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlubGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYXBGb2N1cyhldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vbm8gb3BcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTW9udGhDZWxsS2V5ZG93bihldmVudCwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQud2hpY2gpIHtcbiAgICAgICAgICAgIC8vYXJyb3dzXG4gICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgY2FzZSA0MDoge1xuICAgICAgICAgICAgICAgIGNlbGwudGFiSW5kZXggPSAnLTEnO1xuICAgICAgICAgICAgICAgIHZhciBjZWxscyA9IGNlbGwucGFyZW50RWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB2YXIgY2VsbEluZGV4ID0gRG9tSGFuZGxlci5pbmRleChjZWxsKTtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dENlbGwgPSBjZWxsc1tldmVudC53aGljaCA9PT0gNDAgPyBjZWxsSW5kZXggKyAzIDogY2VsbEluZGV4IC0gM107XG4gICAgICAgICAgICAgICAgaWYgKG5leHRDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRDZWxsLnRhYkluZGV4ID0gJzAnO1xuICAgICAgICAgICAgICAgICAgICBuZXh0Q2VsbC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2xlZnQgYXJyb3dcbiAgICAgICAgICAgIGNhc2UgMzc6IHtcbiAgICAgICAgICAgICAgICBjZWxsLnRhYkluZGV4ID0gJy0xJztcbiAgICAgICAgICAgICAgICBsZXQgcHJldkNlbGwgPSBjZWxsLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZDZWxsLnRhYkluZGV4ID0gJzAnO1xuICAgICAgICAgICAgICAgICAgICBwcmV2Q2VsbC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblN0YXRlID0geyBiYWNrd2FyZDogdHJ1ZSB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdkJhY2t3YXJkKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3JpZ2h0IGFycm93XG4gICAgICAgICAgICBjYXNlIDM5OiB7XG4gICAgICAgICAgICAgICAgY2VsbC50YWJJbmRleCA9ICctMSc7XG4gICAgICAgICAgICAgICAgbGV0IG5leHRDZWxsID0gY2VsbC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgaWYgKG5leHRDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRDZWxsLnRhYkluZGV4ID0gJzAnO1xuICAgICAgICAgICAgICAgICAgICBuZXh0Q2VsbC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblN0YXRlID0geyBiYWNrd2FyZDogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZGb3J3YXJkKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2VudGVyXG4gICAgICAgICAgICBjYXNlIDEzOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk1vbnRoU2VsZWN0KGV2ZW50LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9lbnRlclxuICAgICAgICAgICAgLy9zcGFjZVxuICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIGNhc2UgMzI6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9lc2NhcGVcbiAgICAgICAgICAgIGNhc2UgMjc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy90YWJcbiAgICAgICAgICAgIGNhc2UgOToge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFwRm9jdXMoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvL25vIG9wXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblllYXJDZWxsS2V5ZG93bihldmVudCwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG5cbiAgICAgICAgc3dpdGNoIChldmVudC53aGljaCkge1xuICAgICAgICAgICAgLy9hcnJvd3NcbiAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICBjYXNlIDQwOiB7XG4gICAgICAgICAgICAgICAgY2VsbC50YWJJbmRleCA9ICctMSc7XG4gICAgICAgICAgICAgICAgdmFyIGNlbGxzID0gY2VsbC5wYXJlbnRFbGVtZW50LmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsSW5kZXggPSBEb21IYW5kbGVyLmluZGV4KGNlbGwpO1xuICAgICAgICAgICAgICAgIGxldCBuZXh0Q2VsbCA9IGNlbGxzW2V2ZW50LndoaWNoID09PSA0MCA/IGNlbGxJbmRleCArIDIgOiBjZWxsSW5kZXggLSAyXTtcbiAgICAgICAgICAgICAgICBpZiAobmV4dENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dENlbGwudGFiSW5kZXggPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgIG5leHRDZWxsLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vbGVmdCBhcnJvd1xuICAgICAgICAgICAgY2FzZSAzNzoge1xuICAgICAgICAgICAgICAgIGNlbGwudGFiSW5kZXggPSAnLTEnO1xuICAgICAgICAgICAgICAgIGxldCBwcmV2Q2VsbCA9IGNlbGwucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgICAgICAgICAgICBpZiAocHJldkNlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldkNlbGwudGFiSW5kZXggPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgIHByZXZDZWxsLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU3RhdGUgPSB7IGJhY2t3YXJkOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2QmFja3dhcmQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vcmlnaHQgYXJyb3dcbiAgICAgICAgICAgIGNhc2UgMzk6IHtcbiAgICAgICAgICAgICAgICBjZWxsLnRhYkluZGV4ID0gJy0xJztcbiAgICAgICAgICAgICAgICBsZXQgbmV4dENlbGwgPSBjZWxsLm5leHRFbGVtZW50U2libGluZztcbiAgICAgICAgICAgICAgICBpZiAobmV4dENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dENlbGwudGFiSW5kZXggPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgIG5leHRDZWxsLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU3RhdGUgPSB7IGJhY2t3YXJkOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdkZvcndhcmQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vZW50ZXJcbiAgICAgICAgICAgIC8vc3BhY2VcbiAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICBjYXNlIDMyOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblllYXJTZWxlY3QoZXZlbnQsIGluZGV4KTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2VzY2FwZVxuICAgICAgICAgICAgY2FzZSAyNzoge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL3RhYlxuICAgICAgICAgICAgY2FzZSA5OiB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFwRm9jdXMoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vbm8gb3BcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5hdmlnYXRlVG9Nb250aChwcmV2LCBncm91cEluZGV4KSB7XG4gICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5udW1iZXJPZk1vbnRocyA9PT0gMSB8fCBncm91cEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU3RhdGUgPSB7IGJhY2t3YXJkOiB0cnVlIH07XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZCYWNrd2FyZChldmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBwcmV2TW9udGhDb250YWluZXIgPSB0aGlzLmNvbnRlbnRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5jaGlsZHJlbltncm91cEluZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgbGV0IGNlbGxzID0gRG9tSGFuZGxlci5maW5kKHByZXZNb250aENvbnRhaW5lciwgJy5wLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgc3Bhbjpub3QoLnAtZGlzYWJsZWQpOm5vdCgucC1pbmspJyk7XG4gICAgICAgICAgICAgICAgbGV0IGZvY3VzQ2VsbCA9IGNlbGxzW2NlbGxzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGZvY3VzQ2VsbC50YWJJbmRleCA9ICcwJztcbiAgICAgICAgICAgICAgICBmb2N1c0NlbGwuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm51bWJlck9mTW9udGhzID09PSAxIHx8IGdyb3VwSW5kZXggPT09IHRoaXMubnVtYmVyT2ZNb250aHMgLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU3RhdGUgPSB7IGJhY2t3YXJkOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIHRoaXMubmF2Rm9yd2FyZChldmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBuZXh0TW9udGhDb250YWluZXIgPSB0aGlzLmNvbnRlbnRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5jaGlsZHJlbltncm91cEluZGV4ICsgMV07XG4gICAgICAgICAgICAgICAgbGV0IGZvY3VzQ2VsbCA9IERvbUhhbmRsZXIuZmluZFNpbmdsZShuZXh0TW9udGhDb250YWluZXIsICcucC1kYXRlcGlja2VyLWNhbGVuZGFyIHRkIHNwYW46bm90KC5wLWRpc2FibGVkKTpub3QoLnAtaW5rKScpO1xuICAgICAgICAgICAgICAgIGZvY3VzQ2VsbC50YWJJbmRleCA9ICcwJztcbiAgICAgICAgICAgICAgICBmb2N1c0NlbGwuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUZvY3VzKCkge1xuICAgICAgICBsZXQgY2VsbDtcblxuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU3RhdGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25TdGF0ZS5idXR0b24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRGb2N1c2FibGVDZWxsKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU3RhdGUuYmFja3dhcmQpIERvbUhhbmRsZXIuZmluZFNpbmdsZSh0aGlzLmNvbnRlbnRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCwgJy5wLWRhdGVwaWNrZXItcHJldicpLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgZWxzZSBEb21IYW5kbGVyLmZpbmRTaW5nbGUodGhpcy5jb250ZW50Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQsICcucC1kYXRlcGlja2VyLW5leHQnKS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU3RhdGUuYmFja3dhcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNlbGxzO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxscyA9IERvbUhhbmRsZXIuZmluZCh0aGlzLmNvbnRlbnRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCwgJy5wLW1vbnRocGlja2VyIC5wLW1vbnRocGlja2VyLW1vbnRoOm5vdCgucC1kaXNhYmxlZCknKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAneWVhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxzID0gRG9tSGFuZGxlci5maW5kKHRoaXMuY29udGVudFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LCAnLnAteWVhcnBpY2tlciAucC15ZWFycGlja2VyLXllYXI6bm90KC5wLWRpc2FibGVkKScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbHMgPSBEb21IYW5kbGVyLmZpbmQodGhpcy5jb250ZW50Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQsICcucC1kYXRlcGlja2VyLWNhbGVuZGFyIHRkIHNwYW46bm90KC5wLWRpc2FibGVkKTpub3QoLnAtaW5rKScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxzICYmIGNlbGxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxsc1tjZWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKHRoaXMuY29udGVudFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LCAnLnAtbW9udGhwaWNrZXIgLnAtbW9udGhwaWNrZXItbW9udGg6bm90KC5wLWRpc2FibGVkKScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbCA9IERvbUhhbmRsZXIuZmluZFNpbmdsZSh0aGlzLmNvbnRlbnRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCwgJy5wLXllYXJwaWNrZXIgLnAteWVhcnBpY2tlci15ZWFyOm5vdCgucC1kaXNhYmxlZCknKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwgPSBEb21IYW5kbGVyLmZpbmRTaW5nbGUodGhpcy5jb250ZW50Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQsICcucC1kYXRlcGlja2VyLWNhbGVuZGFyIHRkIHNwYW46bm90KC5wLWRpc2FibGVkKTpub3QoLnAtaW5rKScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbC50YWJJbmRleCA9ICcwJztcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU3RhdGUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbml0Rm9jdXNhYmxlQ2VsbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdEZvY3VzYWJsZUNlbGwoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRFbCA9IHRoaXMuY29udGVudFZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgbGV0IGNlbGw7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIGxldCBjZWxscyA9IERvbUhhbmRsZXIuZmluZChjb250ZW50RWwsICcucC1tb250aHBpY2tlciAucC1tb250aHBpY2tlci1tb250aDpub3QoLnAtZGlzYWJsZWQpJyk7XG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWRDZWxsID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKGNvbnRlbnRFbCwgJy5wLW1vbnRocGlja2VyIC5wLW1vbnRocGlja2VyLW1vbnRoLnAtaGlnaGxpZ2h0Jyk7XG4gICAgICAgICAgICBjZWxscy5mb3JFYWNoKChjZWxsKSA9PiAoY2VsbC50YWJJbmRleCA9IC0xKSk7XG4gICAgICAgICAgICBjZWxsID0gc2VsZWN0ZWRDZWxsIHx8IGNlbGxzWzBdO1xuXG4gICAgICAgICAgICBpZiAoY2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRpc2FibGVkQ2VsbHMgPSBEb21IYW5kbGVyLmZpbmQoY29udGVudEVsLCAnLnAtbW9udGhwaWNrZXIgLnAtbW9udGhwaWNrZXItbW9udGgucC1kaXNhYmxlZFt0YWJpbmRleCA9IFwiMFwiXScpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVkQ2VsbHMuZm9yRWFjaCgoY2VsbCkgPT4gKGNlbGwudGFiSW5kZXggPSAtMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgbGV0IGNlbGxzID0gRG9tSGFuZGxlci5maW5kKGNvbnRlbnRFbCwgJy5wLXllYXJwaWNrZXIgLnAteWVhcnBpY2tlci15ZWFyOm5vdCgucC1kaXNhYmxlZCknKTtcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZENlbGwgPSBEb21IYW5kbGVyLmZpbmRTaW5nbGUoY29udGVudEVsLCAnLnAteWVhcnBpY2tlciAucC15ZWFycGlja2VyLXllYXIucC1oaWdobGlnaHQnKTtcbiAgICAgICAgICAgIGNlbGxzLmZvckVhY2goKGNlbGwpID0+IChjZWxsLnRhYkluZGV4ID0gLTEpKTtcbiAgICAgICAgICAgIGNlbGwgPSBzZWxlY3RlZENlbGwgfHwgY2VsbHNbMF07XG5cbiAgICAgICAgICAgIGlmIChjZWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgZGlzYWJsZWRDZWxscyA9IERvbUhhbmRsZXIuZmluZChjb250ZW50RWwsICcucC15ZWFycGlja2VyIC5wLXllYXJwaWNrZXIteWVhci5wLWRpc2FibGVkW3RhYmluZGV4ID0gXCIwXCJdJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWRDZWxscy5mb3JFYWNoKChjZWxsKSA9PiAoY2VsbC50YWJJbmRleCA9IC0xKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjZWxsID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKGNvbnRlbnRFbCwgJ3NwYW4ucC1oaWdobGlnaHQnKTtcbiAgICAgICAgICAgIGlmICghY2VsbCkge1xuICAgICAgICAgICAgICAgIGxldCB0b2RheUNlbGwgPSBEb21IYW5kbGVyLmZpbmRTaW5nbGUoY29udGVudEVsLCAndGQucC1kYXRlcGlja2VyLXRvZGF5IHNwYW46bm90KC5wLWRpc2FibGVkKTpub3QoLnAtaW5rKScpO1xuICAgICAgICAgICAgICAgIGlmICh0b2RheUNlbGwpIGNlbGwgPSB0b2RheUNlbGw7XG4gICAgICAgICAgICAgICAgZWxzZSBjZWxsID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKGNvbnRlbnRFbCwgJy5wLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgc3Bhbjpub3QoLnAtZGlzYWJsZWQpOm5vdCgucC1pbmspJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgY2VsbC50YWJJbmRleCA9ICcwJztcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXZlbnRGb2N1cyAmJiAoIXRoaXMubmF2aWdhdGlvblN0YXRlIHx8ICF0aGlzLm5hdmlnYXRpb25TdGF0ZS5idXR0b24pKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucHJldmVudEZvY3VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFwRm9jdXMoZXZlbnQpIHtcbiAgICAgICAgbGV0IGZvY3VzYWJsZUVsZW1lbnRzID0gRG9tSGFuZGxlci5nZXRGb2N1c2FibGVFbGVtZW50cyh0aGlzLmNvbnRlbnRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKGZvY3VzYWJsZUVsZW1lbnRzICYmIGZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICghZm9jdXNhYmxlRWxlbWVudHNbMF0ub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZm9jdXNhYmxlRWxlbWVudHNbMF0uZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvY3VzZWRJbmRleCA9IGZvY3VzYWJsZUVsZW1lbnRzLmluZGV4T2YoZm9jdXNhYmxlRWxlbWVudHNbMF0ub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9jdXNlZEluZGV4ID09IC0xIHx8IGZvY3VzZWRJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNUcmFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlRWxlbWVudHNbZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvY3VzZWRJbmRleCA9PT0gLTEpIHJldHVybiB0aGlzLmhpZGVPdmVybGF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9jdXNlZEluZGV4ID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGVFbGVtZW50c1tmb2N1c2VkSW5kZXggLSAxXS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvY3VzZWRJbmRleCA9PSAtMSB8fCBmb2N1c2VkSW5kZXggPT09IGZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb2N1c1RyYXAgJiYgZm9jdXNlZEluZGV4ICE9IC0xKSByZXR1cm4gdGhpcy5oaWRlT3ZlcmxheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBmb2N1c2FibGVFbGVtZW50c1swXS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlRWxlbWVudHNbZm9jdXNlZEluZGV4ICsgMV0uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25Nb250aERyb3Bkb3duQ2hhbmdlKG06IHN0cmluZykge1xuICAgICAgICB0aGlzLmN1cnJlbnRNb250aCA9IHBhcnNlSW50KG0pO1xuICAgICAgICB0aGlzLm9uTW9udGhDaGFuZ2UuZW1pdCh7IG1vbnRoOiB0aGlzLmN1cnJlbnRNb250aCArIDEsIHllYXI6IHRoaXMuY3VycmVudFllYXIgfSk7XG4gICAgICAgIHRoaXMuY3JlYXRlTW9udGhzKHRoaXMuY3VycmVudE1vbnRoLCB0aGlzLmN1cnJlbnRZZWFyKTtcbiAgICB9XG5cbiAgICBvblllYXJEcm9wZG93bkNoYW5nZSh5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50WWVhciA9IHBhcnNlSW50KHkpO1xuICAgICAgICB0aGlzLm9uWWVhckNoYW5nZS5lbWl0KHsgbW9udGg6IHRoaXMuY3VycmVudE1vbnRoICsgMSwgeWVhcjogdGhpcy5jdXJyZW50WWVhciB9KTtcbiAgICAgICAgdGhpcy5jcmVhdGVNb250aHModGhpcy5jdXJyZW50TW9udGgsIHRoaXMuY3VycmVudFllYXIpO1xuICAgIH1cblxuICAgIGNvbnZlcnRUbzI0SG91ciA9IGZ1bmN0aW9uIChob3VyczogbnVtYmVyLCBwbTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5ob3VyRm9ybWF0ID09ICcxMicpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcG0gPyAxMiA6IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBwbSA/IGhvdXJzICsgMTIgOiBob3VycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaG91cnM7XG4gICAgfTtcblxuICAgIHZhbGlkYXRlVGltZShob3VyOiBudW1iZXIsIG1pbnV0ZTogbnVtYmVyLCBzZWNvbmQ6IG51bWJlciwgcG06IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgY29uc3QgY29udmVydGVkSG91ciA9IHRoaXMuY29udmVydFRvMjRIb3VyKGhvdXIsIHBtKTtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZVNlbGVjdGlvbigpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsdWVbMV0gfHwgdGhpcy52YWx1ZVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy52YWx1ZVt0aGlzLnZhbHVlLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlRGF0ZVN0cmluZyA9IHZhbHVlID8gdmFsdWUudG9EYXRlU3RyaW5nKCkgOiBudWxsO1xuICAgICAgICBpZiAodGhpcy5taW5EYXRlICYmIHZhbHVlRGF0ZVN0cmluZyAmJiB0aGlzLm1pbkRhdGUudG9EYXRlU3RyaW5nKCkgPT09IHZhbHVlRGF0ZVN0cmluZykge1xuICAgICAgICAgICAgaWYgKHRoaXMubWluRGF0ZS5nZXRIb3VycygpID4gY29udmVydGVkSG91cikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1pbkRhdGUuZ2V0SG91cnMoKSA9PT0gY29udmVydGVkSG91cikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pbkRhdGUuZ2V0TWludXRlcygpID4gbWludXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWluRGF0ZS5nZXRNaW51dGVzKCkgPT09IG1pbnV0ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5taW5EYXRlLmdldFNlY29uZHMoKSA+IHNlY29uZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSAmJiB2YWx1ZURhdGVTdHJpbmcgJiYgdGhpcy5tYXhEYXRlLnRvRGF0ZVN0cmluZygpID09PSB2YWx1ZURhdGVTdHJpbmcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1heERhdGUuZ2V0SG91cnMoKSA8IGNvbnZlcnRlZEhvdXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlLmdldEhvdXJzKCkgPT09IGNvbnZlcnRlZEhvdXIpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlLmdldE1pbnV0ZXMoKSA8IG1pbnV0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heERhdGUuZ2V0TWludXRlcygpID09PSBtaW51dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4RGF0ZS5nZXRTZWNvbmRzKCkgPCBzZWNvbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpbmNyZW1lbnRIb3VyKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHByZXZIb3VyID0gdGhpcy5jdXJyZW50SG91cjtcbiAgICAgICAgbGV0IG5ld0hvdXIgPSB0aGlzLmN1cnJlbnRIb3VyICsgdGhpcy5zdGVwSG91cjtcbiAgICAgICAgbGV0IG5ld1BNID0gdGhpcy5wbTtcblxuICAgICAgICBpZiAodGhpcy5ob3VyRm9ybWF0ID09ICcyNCcpIG5ld0hvdXIgPSBuZXdIb3VyID49IDI0ID8gbmV3SG91ciAtIDI0IDogbmV3SG91cjtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5ob3VyRm9ybWF0ID09ICcxMicpIHtcbiAgICAgICAgICAgIC8vIEJlZm9yZSB0aGUgQU0vUE0gYnJlYWssIG5vdyBhZnRlclxuICAgICAgICAgICAgaWYgKHByZXZIb3VyIDwgMTIgJiYgbmV3SG91ciA+IDExKSB7XG4gICAgICAgICAgICAgICAgbmV3UE0gPSAhdGhpcy5wbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0hvdXIgPSBuZXdIb3VyID49IDEzID8gbmV3SG91ciAtIDEyIDogbmV3SG91cjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlVGltZShuZXdIb3VyLCB0aGlzLmN1cnJlbnRNaW51dGUsIHRoaXMuY3VycmVudFNlY29uZCwgbmV3UE0pKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRIb3VyID0gbmV3SG91cjtcbiAgICAgICAgICAgIHRoaXMucG0gPSBuZXdQTTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uVGltZVBpY2tlckVsZW1lbnRNb3VzZURvd24oZXZlbnQ6IEV2ZW50LCB0eXBlOiBudW1iZXIsIGRpcmVjdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5yZXBlYXQoZXZlbnQsIG51bGwsIHR5cGUsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25UaW1lUGlja2VyRWxlbWVudE1vdXNlVXAoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVQaWNrZXJUaW1lcigpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUaW1lKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblRpbWVQaWNrZXJFbGVtZW50TW91c2VMZWF2ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkICYmIHRoaXMudGltZVBpY2tlclRpbWVyKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZVBpY2tlclRpbWVyKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpbWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlcGVhdChldmVudDogRXZlbnQsIGludGVydmFsOiBudW1iZXIsIHR5cGU6IG51bWJlciwgZGlyZWN0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGkgPSBpbnRlcnZhbCB8fCA1MDA7XG5cbiAgICAgICAgdGhpcy5jbGVhclRpbWVQaWNrZXJUaW1lcigpO1xuICAgICAgICB0aGlzLnRpbWVQaWNrZXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXBlYXQoZXZlbnQsIDEwMCwgdHlwZSwgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0sIGkpO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IDEpIHRoaXMuaW5jcmVtZW50SG91cihldmVudCk7XG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLmRlY3JlbWVudEhvdXIoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gMSkgdGhpcy5pbmNyZW1lbnRNaW51dGUoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5kZWNyZW1lbnRNaW51dGUoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gMSkgdGhpcy5pbmNyZW1lbnRTZWNvbmQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5kZWNyZW1lbnRTZWNvbmQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dGZpZWxkKCk7XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lUGlja2VyVGltZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXJUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZVBpY2tlclRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMudGltZVBpY2tlclRpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlY3JlbWVudEhvdXIoZXZlbnQpIHtcbiAgICAgICAgbGV0IG5ld0hvdXIgPSB0aGlzLmN1cnJlbnRIb3VyIC0gdGhpcy5zdGVwSG91cjtcbiAgICAgICAgbGV0IG5ld1BNID0gdGhpcy5wbTtcblxuICAgICAgICBpZiAodGhpcy5ob3VyRm9ybWF0ID09ICcyNCcpIG5ld0hvdXIgPSBuZXdIb3VyIDwgMCA/IDI0ICsgbmV3SG91ciA6IG5ld0hvdXI7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaG91ckZvcm1hdCA9PSAnMTInKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSB3ZXJlIGF0IG5vb24vbWlkbmlnaHQsIHRoZW4gc3dpdGNoXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50SG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBuZXdQTSA9ICF0aGlzLnBtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3SG91ciA9IG5ld0hvdXIgPD0gMCA/IDEyICsgbmV3SG91ciA6IG5ld0hvdXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVRpbWUobmV3SG91ciwgdGhpcy5jdXJyZW50TWludXRlLCB0aGlzLmN1cnJlbnRTZWNvbmQsIG5ld1BNKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SG91ciA9IG5ld0hvdXI7XG4gICAgICAgICAgICB0aGlzLnBtID0gbmV3UE07XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGluY3JlbWVudE1pbnV0ZShldmVudCkge1xuICAgICAgICBsZXQgbmV3TWludXRlID0gdGhpcy5jdXJyZW50TWludXRlICsgdGhpcy5zdGVwTWludXRlO1xuICAgICAgICBuZXdNaW51dGUgPSBuZXdNaW51dGUgPiA1OSA/IG5ld01pbnV0ZSAtIDYwIDogbmV3TWludXRlO1xuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVRpbWUodGhpcy5jdXJyZW50SG91ciwgbmV3TWludXRlLCB0aGlzLmN1cnJlbnRTZWNvbmQsIHRoaXMucG0pKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNaW51dGUgPSBuZXdNaW51dGU7XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGRlY3JlbWVudE1pbnV0ZShldmVudCkge1xuICAgICAgICBsZXQgbmV3TWludXRlID0gdGhpcy5jdXJyZW50TWludXRlIC0gdGhpcy5zdGVwTWludXRlO1xuICAgICAgICBuZXdNaW51dGUgPSBuZXdNaW51dGUgPCAwID8gNjAgKyBuZXdNaW51dGUgOiBuZXdNaW51dGU7XG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlVGltZSh0aGlzLmN1cnJlbnRIb3VyLCBuZXdNaW51dGUsIHRoaXMuY3VycmVudFNlY29uZCwgdGhpcy5wbSkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE1pbnV0ZSA9IG5ld01pbnV0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaW5jcmVtZW50U2Vjb25kKGV2ZW50KSB7XG4gICAgICAgIGxldCBuZXdTZWNvbmQgPSB0aGlzLmN1cnJlbnRTZWNvbmQgKyB0aGlzLnN0ZXBTZWNvbmQ7XG4gICAgICAgIG5ld1NlY29uZCA9IG5ld1NlY29uZCA+IDU5ID8gbmV3U2Vjb25kIC0gNjAgOiBuZXdTZWNvbmQ7XG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlVGltZSh0aGlzLmN1cnJlbnRIb3VyLCB0aGlzLmN1cnJlbnRNaW51dGUsIG5ld1NlY29uZCwgdGhpcy5wbSkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNlY29uZCA9IG5ld1NlY29uZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgZGVjcmVtZW50U2Vjb25kKGV2ZW50KSB7XG4gICAgICAgIGxldCBuZXdTZWNvbmQgPSB0aGlzLmN1cnJlbnRTZWNvbmQgLSB0aGlzLnN0ZXBTZWNvbmQ7XG4gICAgICAgIG5ld1NlY29uZCA9IG5ld1NlY29uZCA8IDAgPyA2MCArIG5ld1NlY29uZCA6IG5ld1NlY29uZDtcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVUaW1lKHRoaXMuY3VycmVudEhvdXIsIHRoaXMuY3VycmVudE1pbnV0ZSwgbmV3U2Vjb25kLCB0aGlzLnBtKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2Vjb25kID0gbmV3U2Vjb25kO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVUaW1lKCkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy52YWx1ZVsxXSB8fCB0aGlzLnZhbHVlWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb24oKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnZhbHVlW3RoaXMudmFsdWUubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlLmdldFRpbWUoKSkgOiBuZXcgRGF0ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmhvdXJGb3JtYXQgPT0gJzEyJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEhvdXIgPT09IDEyKSB2YWx1ZS5zZXRIb3Vycyh0aGlzLnBtID8gMTIgOiAwKTtcbiAgICAgICAgICAgIGVsc2UgdmFsdWUuc2V0SG91cnModGhpcy5wbSA/IHRoaXMuY3VycmVudEhvdXIgKyAxMiA6IHRoaXMuY3VycmVudEhvdXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUuc2V0SG91cnModGhpcy5jdXJyZW50SG91cik7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZS5zZXRNaW51dGVzKHRoaXMuY3VycmVudE1pbnV0ZSk7XG4gICAgICAgIHZhbHVlLnNldFNlY29uZHModGhpcy5jdXJyZW50U2Vjb25kKTtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZVNlbGVjdGlvbigpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZVsxXSkgdmFsdWUgPSBbdGhpcy52YWx1ZVswXSwgdmFsdWVdO1xuICAgICAgICAgICAgZWxzZSB2YWx1ZSA9IFt2YWx1ZSwgbnVsbF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gWy4uLnRoaXMudmFsdWUuc2xpY2UoMCwgLTEpLCB2YWx1ZV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKHZhbHVlKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KHZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dGZpZWxkKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlQU1QTShldmVudCkge1xuICAgICAgICBjb25zdCBuZXdQTSA9ICF0aGlzLnBtO1xuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVRpbWUodGhpcy5jdXJyZW50SG91ciwgdGhpcy5jdXJyZW50TWludXRlLCB0aGlzLmN1cnJlbnRTZWNvbmQsIG5ld1BNKSkge1xuICAgICAgICAgICAgdGhpcy5wbSA9IG5ld1BNO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUaW1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvblVzZXJJbnB1dChldmVudCkge1xuICAgICAgICAvLyBJRSAxMSBXb3JrYXJvdW5kIGZvciBpbnB1dCBwbGFjZWhvbGRlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9xaXVzLnNvbHV0aW9ucy9wYXJhbGxlbC11aS1hbmd1bGFyL2lzc3Vlcy8yMDI2XG4gICAgICAgIGlmICghdGhpcy5pc0tleWRvd24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzS2V5ZG93biA9IGZhbHNlO1xuXG4gICAgICAgIGxldCB2YWwgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnBhcnNlVmFsdWVGcm9tU3RyaW5nKHZhbCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkU2VsZWN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwodmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVUkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvL2ludmFsaWQgZGF0ZVxuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5rZWVwSW52YWxpZCA/IHZhbCA6IG51bGw7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsbGVkID0gdmFsICE9IG51bGwgJiYgdmFsLmxlbmd0aDtcbiAgICAgICAgdGhpcy5vbklucHV0LmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIGlzVmFsaWRTZWxlY3Rpb24odmFsdWUpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbigpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNTZWxlY3RhYmxlKHZhbHVlLmdldERhdGUoKSwgdmFsdWUuZ2V0TW9udGgoKSwgdmFsdWUuZ2V0RnVsbFllYXIoKSwgZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmV2ZXJ5KCh2KSA9PiB0aGlzLmlzU2VsZWN0YWJsZSh2LmdldERhdGUoKSwgdi5nZXRNb250aCgpLCB2LmdldEZ1bGxZZWFyKCksIGZhbHNlKSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmFuZ2VTZWxlY3Rpb24oKSkge1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB2YWx1ZS5sZW5ndGggPiAxICYmIHZhbHVlWzFdID4gdmFsdWVbMF0gPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzVmFsaWQ7XG4gICAgfVxuXG4gICAgcGFyc2VWYWx1ZUZyb21TdHJpbmcodGV4dDogc3RyaW5nKTogRGF0ZSB8IERhdGVbXSB7XG4gICAgICAgIGlmICghdGV4dCB8fCB0ZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlOiBhbnk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb24oKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlRGF0ZVRpbWUodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgICAgIGxldCB0b2tlbnMgPSB0ZXh0LnNwbGl0KHRoaXMubXVsdGlwbGVTZXBhcmF0b3IpO1xuICAgICAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IHRva2VuIG9mIHRva2Vucykge1xuICAgICAgICAgICAgICAgIHZhbHVlLnB1c2godGhpcy5wYXJzZURhdGVUaW1lKHRva2VuLnRyaW0oKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNSYW5nZVNlbGVjdGlvbigpKSB7XG4gICAgICAgICAgICBsZXQgdG9rZW5zID0gdGV4dC5zcGxpdCgnICcgKyB0aGlzLnJhbmdlU2VwYXJhdG9yICsgJyAnKTtcbiAgICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhbHVlW2ldID0gdGhpcy5wYXJzZURhdGVUaW1lKHRva2Vuc1tpXS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHBhcnNlRGF0ZVRpbWUodGV4dCk6IERhdGUge1xuICAgICAgICBsZXQgZGF0ZTogRGF0ZTtcbiAgICAgICAgbGV0IHBhcnRzOiBzdHJpbmdbXSA9IHRleHQuc3BsaXQoJyAnKTtcblxuICAgICAgICBpZiAodGhpcy50aW1lT25seSkge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlVGltZShkYXRlLCBwYXJ0c1swXSwgcGFydHNbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9IHRoaXMuZ2V0RGF0ZUZvcm1hdCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgYW1wbSA9IHRoaXMuaG91ckZvcm1hdCA9PSAnMTInID8gcGFydHMucG9wKCkgOiBudWxsO1xuICAgICAgICAgICAgICAgIGxldCB0aW1lU3RyaW5nID0gcGFydHMucG9wKCk7XG5cbiAgICAgICAgICAgICAgICBkYXRlID0gdGhpcy5wYXJzZURhdGUocGFydHMuam9pbignICcpLCBkYXRlRm9ybWF0KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlVGltZShkYXRlLCB0aW1lU3RyaW5nLCBhbXBtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IHRoaXMucGFyc2VEYXRlKHRleHQsIGRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVUaW1lKHZhbHVlLCB0aW1lU3RyaW5nLCBhbXBtKSB7XG4gICAgICAgIGlmICh0aGlzLmhvdXJGb3JtYXQgPT0gJzEyJyAmJiAhYW1wbSkge1xuICAgICAgICAgICAgdGhyb3cgJ0ludmFsaWQgVGltZSc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBtID0gYW1wbSA9PT0gJ1BNJyB8fCBhbXBtID09PSAncG0nO1xuICAgICAgICBsZXQgdGltZSA9IHRoaXMucGFyc2VUaW1lKHRpbWVTdHJpbmcpO1xuICAgICAgICB2YWx1ZS5zZXRIb3Vycyh0aW1lLmhvdXIpO1xuICAgICAgICB2YWx1ZS5zZXRNaW51dGVzKHRpbWUubWludXRlKTtcbiAgICAgICAgdmFsdWUuc2V0U2Vjb25kcyh0aW1lLnNlY29uZCk7XG4gICAgfVxuXG4gICAgaXNWYWxpZERhdGUoZGF0ZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMuaXNEYXRlKGRhdGUpICYmIE9iamVjdFV0aWxzLmlzTm90RW1wdHkoZGF0ZSk7XG4gICAgfVxuXG4gICAgdXBkYXRlVUkoKSB7XG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgICBwcm9wVmFsdWUgPSBwcm9wVmFsdWVbMF07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmFsID0gdGhpcy5kZWZhdWx0RGF0ZSAmJiB0aGlzLmlzVmFsaWREYXRlKHRoaXMuZGVmYXVsdERhdGUpICYmICF0aGlzLnZhbHVlID8gdGhpcy5kZWZhdWx0RGF0ZSA6IHByb3BWYWx1ZSAmJiB0aGlzLmlzVmFsaWREYXRlKHByb3BWYWx1ZSkgPyBwcm9wVmFsdWUgOiBuZXcgRGF0ZSgpO1xuXG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gdmFsLmdldE1vbnRoKCk7XG4gICAgICAgIHRoaXMuY3VycmVudFllYXIgPSB2YWwuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVNb250aHModGhpcy5jdXJyZW50TW9udGgsIHRoaXMuY3VycmVudFllYXIpO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dUaW1lIHx8IHRoaXMudGltZU9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudEhvdXJQTSh2YWwuZ2V0SG91cnMoKSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNaW51dGUgPSB2YWwuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2Vjb25kID0gdmFsLmdldFNlY29uZHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3dPdmVybGF5KCkge1xuICAgICAgICBpZiAoIXRoaXMub3ZlcmxheVZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVUkoKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRvdWNoVUkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZlbnRGb2N1cyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGlkZU92ZXJsYXkoKSB7XG4gICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jbGVhclRpbWVQaWNrZXJUaW1lcigpO1xuXG4gICAgICAgIGlmICh0aGlzLnRvdWNoVUkpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZU1vZGFsaXR5KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlubGluZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXlWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93T3ZlcmxheSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRmaWVsZFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZU92ZXJsYXkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uT3ZlcmxheUFuaW1hdGlvblN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LnRvU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3Zpc2libGUnOlxuICAgICAgICAgICAgY2FzZSAndmlzaWJsZVRvdWNoVUknOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbmxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5ID0gZXZlbnQuZWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5LnNldEF0dHJpYnV0ZSh0aGlzLmF0dHJpYnV0ZVNlbGVjdG9yLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kT3ZlcmxheSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dG9aSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRvdWNoVUkpIFpJbmRleFV0aWxzLnNldCgnbW9kYWwnLCB0aGlzLm92ZXJsYXksIHRoaXMuYmFzZVpJbmRleCB8fCB0aGlzLmNvbmZpZy56SW5kZXgubW9kYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBaSW5kZXhVdGlscy5zZXQoJ292ZXJsYXknLCB0aGlzLm92ZXJsYXksIHRoaXMuYmFzZVpJbmRleCB8fCB0aGlzLmNvbmZpZy56SW5kZXgub3ZlcmxheSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFsaWduT3ZlcmxheSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2hvdy5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3ZvaWQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25PdmVybGF5SGlkZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMub25DbG9zZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uT3ZlcmxheUFuaW1hdGlvbkRvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQudG9TdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAndmlzaWJsZSc6XG4gICAgICAgICAgICBjYXNlICd2aXNpYmxlVG91Y2hVSSc6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlubGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmREb2N1bWVudENsaWNrTGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kRG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRTY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAndm9pZCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1pJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBaSW5kZXhVdGlscy5jbGVhcihldmVudC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhcHBlbmRPdmVybGF5KCkge1xuICAgICAgICBpZiAodGhpcy5hcHBlbmRUbykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXBwZW5kVG8gPT09ICdib2R5JykgdGhpcy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMub3ZlcmxheSk7XG4gICAgICAgICAgICBlbHNlIERvbUhhbmRsZXIuYXBwZW5kQ2hpbGQodGhpcy5vdmVybGF5LCB0aGlzLmFwcGVuZFRvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc3RvcmVPdmVybGF5QXBwZW5kKCkge1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5ICYmIHRoaXMuYXBwZW5kVG8pIHtcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLm92ZXJsYXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWxpZ25PdmVybGF5KCkge1xuICAgICAgICBpZiAodGhpcy50b3VjaFVJKSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZU1vZGFsaXR5KHRoaXMub3ZlcmxheSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5vdmVybGF5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hcHBlbmRUbykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpZXcgPT09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXkuc3R5bGUud2lkdGggPSBEb21IYW5kbGVyLmdldE91dGVyV2lkdGgodGhpcy5vdmVybGF5KSArICdweCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheS5zdHlsZS5taW5XaWR0aCA9IERvbUhhbmRsZXIuZ2V0T3V0ZXJXaWR0aCh0aGlzLmlucHV0ZmllbGRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCkgKyAncHgnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheS5zdHlsZS53aWR0aCA9IERvbUhhbmRsZXIuZ2V0T3V0ZXJXaWR0aCh0aGlzLmlucHV0ZmllbGRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCkgKyAncHgnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIERvbUhhbmRsZXIuYWJzb2x1dGVQb3NpdGlvbih0aGlzLm92ZXJsYXksIHRoaXMuaW5wdXRmaWVsZFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgRG9tSGFuZGxlci5yZWxhdGl2ZVBvc2l0aW9uKHRoaXMub3ZlcmxheSwgdGhpcy5pbnB1dGZpZWxkVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW5hYmxlTW9kYWxpdHkoZWxlbWVudCkge1xuICAgICAgICBpZiAoIXRoaXMubWFzayAmJiB0aGlzLnRvdWNoVUkpIHtcbiAgICAgICAgICAgIHRoaXMubWFzayA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMubWFzaywgJ3pJbmRleCcsIFN0cmluZyhwYXJzZUludChlbGVtZW50LnN0eWxlLnpJbmRleCkgLSAxKSk7XG4gICAgICAgICAgICBsZXQgbWFza1N0eWxlQ2xhc3MgPSAncC1jb21wb25lbnQtb3ZlcmxheSBwLWRhdGVwaWNrZXItbWFzayBwLWRhdGVwaWNrZXItbWFzay1zY3JvbGxibG9ja2VyIHAtY29tcG9uZW50LW92ZXJsYXkgcC1jb21wb25lbnQtb3ZlcmxheS1lbnRlcic7XG4gICAgICAgICAgICBEb21IYW5kbGVyLmFkZE11bHRpcGxlQ2xhc3Nlcyh0aGlzLm1hc2ssIG1hc2tTdHlsZUNsYXNzKTtcblxuICAgICAgICAgICAgdGhpcy5tYXNrQ2xpY2tMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMubWFzaywgJ2NsaWNrJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVNb2RhbGl0eSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSwgdGhpcy5tYXNrKTtcbiAgICAgICAgICAgIERvbUhhbmRsZXIuYWRkQ2xhc3ModGhpcy5kb2N1bWVudC5ib2R5LCAncC1vdmVyZmxvdy1oaWRkZW4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpc2FibGVNb2RhbGl0eSgpIHtcbiAgICAgICAgaWYgKHRoaXMubWFzaykge1xuICAgICAgICAgICAgRG9tSGFuZGxlci5hZGRDbGFzcyh0aGlzLm1hc2ssICdwLWNvbXBvbmVudC1vdmVybGF5LWxlYXZlJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYW5pbWF0aW9uRW5kTGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvbkVuZExpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5tYXNrLCAnYW5pbWF0aW9uZW5kJywgdGhpcy5kZXN0cm95TWFzay5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3lNYXNrKCkge1xuICAgICAgICBpZiAoIXRoaXMubWFzaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LCB0aGlzLm1hc2spO1xuICAgICAgICBsZXQgYm9keUNoaWxkcmVuID0gdGhpcy5kb2N1bWVudC5ib2R5LmNoaWxkcmVuO1xuICAgICAgICBsZXQgaGFzQmxvY2tlck1hc2tzOiBib29sZWFuO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IGJvZHlDaGlsZCA9IGJvZHlDaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGlmIChEb21IYW5kbGVyLmhhc0NsYXNzKGJvZHlDaGlsZCwgJ3AtZGF0ZXBpY2tlci1tYXNrLXNjcm9sbGJsb2NrZXInKSkge1xuICAgICAgICAgICAgICAgIGhhc0Jsb2NrZXJNYXNrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhhc0Jsb2NrZXJNYXNrcykge1xuICAgICAgICAgICAgRG9tSGFuZGxlci5yZW1vdmVDbGFzcyh0aGlzLmRvY3VtZW50LmJvZHksICdwLW92ZXJmbG93LWhpZGRlbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51bmJpbmRBbmltYXRpb25FbmRMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLnVuYmluZE1hc2tDbGlja0xpc3RlbmVyKCk7XG4gICAgICAgIHRoaXMubWFzayA9IG51bGw7XG4gICAgfVxuXG4gICAgdW5iaW5kTWFza0NsaWNrTGlzdGVuZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLm1hc2tDbGlja0xpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tDbGlja0xpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLm1hc2tDbGlja0xpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuYmluZEFuaW1hdGlvbkVuZExpc3RlbmVyKCkge1xuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25FbmRMaXN0ZW5lciAmJiB0aGlzLm1hc2spIHtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uRW5kTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uRW5kTGlzdGVuZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdHlwZW9mIHRoaXMudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlVmFsdWVGcm9tU3RyaW5nKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMua2VlcEludmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXRmaWVsZCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZVVJKCk7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Nb2RlbFRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZFN0YXRlKHZhbDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gdmFsO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGdldERhdGVGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVGb3JtYXQgfHwgdGhpcy5nZXRUcmFuc2xhdGlvbignZGF0ZUZvcm1hdCcpO1xuICAgIH1cblxuICAgIGdldEZpcnN0RGF0ZU9mV2VlaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrIHx8IHRoaXMuZ2V0VHJhbnNsYXRpb24oVHJhbnNsYXRpb25LZXlzLkZJUlNUX0RBWV9PRl9XRUVLKTtcbiAgICB9XG5cbiAgICAvLyBQb3J0ZWQgZnJvbSBqcXVlcnktdWkgZGF0ZXBpY2tlciBmb3JtYXREYXRlXG4gICAgZm9ybWF0RGF0ZShkYXRlLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaUZvcm1hdDtcbiAgICAgICAgY29uc3QgbG9va0FoZWFkID0gKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGlGb3JtYXQgKyAxIDwgZm9ybWF0Lmxlbmd0aCAmJiBmb3JtYXQuY2hhckF0KGlGb3JtYXQgKyAxKSA9PT0gbWF0Y2g7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaUZvcm1hdCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmb3JtYXROdW1iZXIgPSAobWF0Y2gsIHZhbHVlLCBsZW4pID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbnVtID0gJycgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobG9va0FoZWFkKG1hdGNoKSkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAobnVtLmxlbmd0aCA8IGxlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtID0gJzAnICsgbnVtO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudW07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZm9ybWF0TmFtZSA9IChtYXRjaCwgdmFsdWUsIHNob3J0TmFtZXMsIGxvbmdOYW1lcykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb29rQWhlYWQobWF0Y2gpID8gbG9uZ05hbWVzW3ZhbHVlXSA6IHNob3J0TmFtZXNbdmFsdWVdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgbGV0IG91dHB1dCA9ICcnO1xuICAgICAgICBsZXQgbGl0ZXJhbCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICBmb3IgKGlGb3JtYXQgPSAwOyBpRm9ybWF0IDwgZm9ybWF0Lmxlbmd0aDsgaUZvcm1hdCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdC5jaGFyQXQoaUZvcm1hdCkgPT09IFwiJ1wiICYmICFsb29rQWhlYWQoXCInXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gZm9ybWF0LmNoYXJBdChpRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGZvcm1hdE51bWJlcignZCcsIGRhdGUuZ2V0RGF0ZSgpLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBmb3JtYXROYW1lKCdEJywgZGF0ZS5nZXREYXkoKSwgdGhpcy5nZXRUcmFuc2xhdGlvbihUcmFuc2xhdGlvbktleXMuREFZX05BTUVTX1NIT1JUKSwgdGhpcy5nZXRUcmFuc2xhdGlvbihUcmFuc2xhdGlvbktleXMuREFZX05BTUVTKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gZm9ybWF0TnVtYmVyKCdvJywgTWF0aC5yb3VuZCgobmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDAsIDApLmdldFRpbWUoKSkgLyA4NjQwMDAwMCksIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGZvcm1hdE51bWJlcignbScsIGRhdGUuZ2V0TW9udGgoKSArIDEsIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGZvcm1hdE5hbWUoJ00nLCBkYXRlLmdldE1vbnRoKCksIHRoaXMuZ2V0VHJhbnNsYXRpb24oVHJhbnNsYXRpb25LZXlzLk1PTlRIX05BTUVTX1NIT1JUKSwgdGhpcy5nZXRUcmFuc2xhdGlvbihUcmFuc2xhdGlvbktleXMuTU9OVEhfTkFNRVMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSBsb29rQWhlYWQoJ3knKSA/IGRhdGUuZ2V0RnVsbFllYXIoKSA6IChkYXRlLmdldEZ1bGxZZWFyKCkgJSAxMDAgPCAxMCA/ICcwJyA6ICcnKSArIChkYXRlLmdldEZ1bGxZZWFyKCkgJSAxMDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnISc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGRhdGUuZ2V0VGltZSgpICogMTAwMDAgKyB0aGlzLnRpY2tzVG8xOTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIidcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9va0FoZWFkKFwiJ1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gXCInXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gZm9ybWF0LmNoYXJBdChpRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIGZvcm1hdFRpbWUoZGF0ZSkge1xuICAgICAgICBpZiAoIWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICAgICAgbGV0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgICAgICBsZXQgbWludXRlcyA9IGRhdGUuZ2V0TWludXRlcygpO1xuICAgICAgICBsZXQgc2Vjb25kcyA9IGRhdGUuZ2V0U2Vjb25kcygpO1xuXG4gICAgICAgIGlmICh0aGlzLmhvdXJGb3JtYXQgPT0gJzEyJyAmJiBob3VycyA+IDExICYmIGhvdXJzICE9IDEyKSB7XG4gICAgICAgICAgICBob3VycyAtPSAxMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhvdXJGb3JtYXQgPT0gJzEyJykge1xuICAgICAgICAgICAgb3V0cHV0ICs9IGhvdXJzID09PSAwID8gMTIgOiBob3VycyA8IDEwID8gJzAnICsgaG91cnMgOiBob3VycztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dHB1dCArPSBob3VycyA8IDEwID8gJzAnICsgaG91cnMgOiBob3VycztcbiAgICAgICAgfVxuICAgICAgICBvdXRwdXQgKz0gJzonO1xuICAgICAgICBvdXRwdXQgKz0gbWludXRlcyA8IDEwID8gJzAnICsgbWludXRlcyA6IG1pbnV0ZXM7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlY29uZHMpIHtcbiAgICAgICAgICAgIG91dHB1dCArPSAnOic7XG4gICAgICAgICAgICBvdXRwdXQgKz0gc2Vjb25kcyA8IDEwID8gJzAnICsgc2Vjb25kcyA6IHNlY29uZHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ob3VyRm9ybWF0ID09ICcxMicpIHtcbiAgICAgICAgICAgIG91dHB1dCArPSBkYXRlLmdldEhvdXJzKCkgPiAxMSA/ICcgUE0nIDogJyBBTSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIHBhcnNlVGltZSh2YWx1ZSkge1xuICAgICAgICBsZXQgdG9rZW5zOiBzdHJpbmdbXSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgIGxldCB2YWxpZFRva2VuTGVuZ3RoID0gdGhpcy5zaG93U2Vjb25kcyA/IDMgOiAyO1xuXG4gICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICE9PSB2YWxpZFRva2VuTGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyAnSW52YWxpZCB0aW1lJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBoID0gcGFyc2VJbnQodG9rZW5zWzBdKTtcbiAgICAgICAgbGV0IG0gPSBwYXJzZUludCh0b2tlbnNbMV0pO1xuICAgICAgICBsZXQgcyA9IHRoaXMuc2hvd1NlY29uZHMgPyBwYXJzZUludCh0b2tlbnNbMl0pIDogbnVsbDtcblxuICAgICAgICBpZiAoaXNOYU4oaCkgfHwgaXNOYU4obSkgfHwgaCA+IDIzIHx8IG0gPiA1OSB8fCAodGhpcy5ob3VyRm9ybWF0ID09ICcxMicgJiYgaCA+IDEyKSB8fCAodGhpcy5zaG93U2Vjb25kcyAmJiAoaXNOYU4ocykgfHwgcyA+IDU5KSkpIHtcbiAgICAgICAgICAgIHRocm93ICdJbnZhbGlkIHRpbWUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuaG91ckZvcm1hdCA9PSAnMTInKSB7XG4gICAgICAgICAgICAgICAgaWYgKGggIT09IDEyICYmIHRoaXMucG0pIHtcbiAgICAgICAgICAgICAgICAgICAgaCArPSAxMjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnBtICYmIGggPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGggLT0gMTI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4geyBob3VyOiBoLCBtaW51dGU6IG0sIHNlY29uZDogcyB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUG9ydGVkIGZyb20ganF1ZXJ5LXVpIGRhdGVwaWNrZXIgcGFyc2VEYXRlXG4gICAgcGFyc2VEYXRlKHZhbHVlLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKGZvcm1hdCA9PSBudWxsIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93ICdJbnZhbGlkIGFyZ3VtZW50cyc7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyB2YWx1ZS50b1N0cmluZygpIDogdmFsdWUgKyAnJztcbiAgICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaUZvcm1hdCxcbiAgICAgICAgICAgIGRpbSxcbiAgICAgICAgICAgIGV4dHJhLFxuICAgICAgICAgICAgaVZhbHVlID0gMCxcbiAgICAgICAgICAgIHNob3J0WWVhckN1dG9mZiA9IHR5cGVvZiB0aGlzLnNob3J0WWVhckN1dG9mZiAhPT0gJ3N0cmluZycgPyB0aGlzLnNob3J0WWVhckN1dG9mZiA6IChuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgJSAxMDApICsgcGFyc2VJbnQodGhpcy5zaG9ydFllYXJDdXRvZmYsIDEwKSxcbiAgICAgICAgICAgIHllYXIgPSAtMSxcbiAgICAgICAgICAgIG1vbnRoID0gLTEsXG4gICAgICAgICAgICBkYXkgPSAtMSxcbiAgICAgICAgICAgIGRveSA9IC0xLFxuICAgICAgICAgICAgbGl0ZXJhbCA9IGZhbHNlLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGxvb2tBaGVhZCA9IChtYXRjaCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtYXRjaGVzID0gaUZvcm1hdCArIDEgPCBmb3JtYXQubGVuZ3RoICYmIGZvcm1hdC5jaGFyQXQoaUZvcm1hdCArIDEpID09PSBtYXRjaDtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgICAgICAgICBpRm9ybWF0Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldE51bWJlciA9IChtYXRjaCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpc0RvdWJsZWQgPSBsb29rQWhlYWQobWF0Y2gpLFxuICAgICAgICAgICAgICAgICAgICBzaXplID0gbWF0Y2ggPT09ICdAJyA/IDE0IDogbWF0Y2ggPT09ICchJyA/IDIwIDogbWF0Y2ggPT09ICd5JyAmJiBpc0RvdWJsZWQgPyA0IDogbWF0Y2ggPT09ICdvJyA/IDMgOiAyLFxuICAgICAgICAgICAgICAgICAgICBtaW5TaXplID0gbWF0Y2ggPT09ICd5JyA/IHNpemUgOiAxLFxuICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSBuZXcgUmVnRXhwKCdeXFxcXGR7JyArIG1pblNpemUgKyAnLCcgKyBzaXplICsgJ30nKSxcbiAgICAgICAgICAgICAgICAgICAgbnVtID0gdmFsdWUuc3Vic3RyaW5nKGlWYWx1ZSkubWF0Y2goZGlnaXRzKTtcbiAgICAgICAgICAgICAgICBpZiAoIW51bSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyAnTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gJyArIGlWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaVZhbHVlICs9IG51bVswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG51bVswXSwgMTApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldE5hbWUgPSAobWF0Y2gsIHNob3J0TmFtZXMsIGxvbmdOYW1lcykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIGxldCBhcnIgPSBsb29rQWhlYWQobWF0Y2gpID8gbG9uZ05hbWVzIDogc2hvcnROYW1lcztcbiAgICAgICAgICAgICAgICBsZXQgbmFtZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2goW2ksIGFycltpXV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuYW1lcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtKGFbMV0ubGVuZ3RoIC0gYlsxXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IG5hbWVzW2ldWzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3Vic3RyKGlWYWx1ZSwgbmFtZS5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBuYW1lc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlWYWx1ZSArPSBuYW1lLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93ICdVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gJyArIGlWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2hlY2tMaXRlcmFsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5jaGFyQXQoaVZhbHVlKSAhPT0gZm9ybWF0LmNoYXJBdChpRm9ybWF0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyAnVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uICcgKyBpVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlWYWx1ZSsrO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy52aWV3ID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICBkYXkgPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpRm9ybWF0ID0gMDsgaUZvcm1hdCA8IGZvcm1hdC5sZW5ndGg7IGlGb3JtYXQrKykge1xuICAgICAgICAgICAgaWYgKGxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZm9ybWF0LmNoYXJBdChpRm9ybWF0KSA9PT0gXCInXCIgJiYgIWxvb2tBaGVhZChcIidcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrTGl0ZXJhbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQuY2hhckF0KGlGb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5ID0gZ2V0TnVtYmVyKCdkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXROYW1lKCdEJywgdGhpcy5nZXRUcmFuc2xhdGlvbihUcmFuc2xhdGlvbktleXMuREFZX05BTUVTX1NIT1JUKSwgdGhpcy5nZXRUcmFuc2xhdGlvbihUcmFuc2xhdGlvbktleXMuREFZX05BTUVTKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkb3kgPSBnZXROdW1iZXIoJ28nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoID0gZ2V0TnVtYmVyKCdtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aCA9IGdldE5hbWUoJ00nLCB0aGlzLmdldFRyYW5zbGF0aW9uKFRyYW5zbGF0aW9uS2V5cy5NT05USF9OQU1FU19TSE9SVCksIHRoaXMuZ2V0VHJhbnNsYXRpb24oVHJhbnNsYXRpb25LZXlzLk1PTlRIX05BTUVTKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gZ2V0TnVtYmVyKCd5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoZ2V0TnVtYmVyKCdAJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJyEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKChnZXROdW1iZXIoJyEnKSAtIHRoaXMudGlja3NUbzE5NzApIC8gMTAwMDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoID0gZGF0ZS5nZXRNb250aCgpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCInXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9va0FoZWFkKFwiJ1wiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTGl0ZXJhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMaXRlcmFsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlWYWx1ZSA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgZXh0cmEgPSB2YWx1ZS5zdWJzdHIoaVZhbHVlKTtcbiAgICAgICAgICAgIGlmICghL15cXHMrLy50ZXN0KGV4dHJhKSkge1xuICAgICAgICAgICAgICAgIHRocm93ICdFeHRyYS91bnBhcnNlZCBjaGFyYWN0ZXJzIGZvdW5kIGluIGRhdGU6ICcgKyBleHRyYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh5ZWFyID09PSAtMSkge1xuICAgICAgICAgICAgeWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyIDwgMTAwKSB7XG4gICAgICAgICAgICB5ZWFyICs9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIChuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgJSAxMDApICsgKHllYXIgPD0gc2hvcnRZZWFyQ3V0b2ZmID8gMCA6IC0xMDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRveSA+IC0xKSB7XG4gICAgICAgICAgICBtb250aCA9IDE7XG4gICAgICAgICAgICBkYXkgPSBkb3k7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgZGltID0gdGhpcy5nZXREYXlzQ291bnRJbk1vbnRoKHllYXIsIG1vbnRoIC0gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGRheSA8PSBkaW0pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1vbnRoKys7XG4gICAgICAgICAgICAgICAgZGF5IC09IGRpbTtcbiAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudmlldyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICBtb250aCA9IG1vbnRoID09PSAtMSA/IDEgOiBtb250aDtcbiAgICAgICAgICAgIGRheSA9IGRheSA9PT0gLTEgPyAxIDogZGF5O1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0ZSA9IHRoaXMuZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpKTtcblxuICAgICAgICBpZiAoZGF0ZS5nZXRGdWxsWWVhcigpICE9PSB5ZWFyIHx8IGRhdGUuZ2V0TW9udGgoKSArIDEgIT09IG1vbnRoIHx8IGRhdGUuZ2V0RGF0ZSgpICE9PSBkYXkpIHtcbiAgICAgICAgICAgIHRocm93ICdJbnZhbGlkIGRhdGUnOyAvLyBFLmcuIDMxLzAyLzAwXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBkYXlsaWdodFNhdmluZ0FkanVzdChkYXRlKSB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSA+IDEyID8gZGF0ZS5nZXRIb3VycygpICsgMiA6IDApO1xuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIHVwZGF0ZUZpbGxlZFN0YXRlKCkge1xuICAgICAgICB0aGlzLmZpbGxlZCA9IHRoaXMuaW5wdXRGaWVsZFZhbHVlICYmIHRoaXMuaW5wdXRGaWVsZFZhbHVlICE9ICcnO1xuICAgIH1cblxuICAgIG9uVG9kYXlCdXR0b25DbGljayhldmVudCkge1xuICAgICAgICBsZXQgZGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGxldCBkYXRlTWV0YSA9IHsgZGF5OiBkYXRlLmdldERhdGUoKSwgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSwgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpLCBvdGhlck1vbnRoOiBkYXRlLmdldE1vbnRoKCkgIT09IHRoaXMuY3VycmVudE1vbnRoIHx8IGRhdGUuZ2V0RnVsbFllYXIoKSAhPT0gdGhpcy5jdXJyZW50WWVhciwgdG9kYXk6IHRydWUsIHNlbGVjdGFibGU6IHRydWUgfTtcblxuICAgICAgICB0aGlzLm9uRGF0ZVNlbGVjdChldmVudCwgZGF0ZU1ldGEpO1xuICAgICAgICB0aGlzLm9uVG9kYXlDbGljay5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkNsZWFyQnV0dG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVNb2RlbChudWxsKTtcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dGZpZWxkKCk7XG4gICAgICAgIHRoaXMuaGlkZU92ZXJsYXkoKTtcbiAgICAgICAgdGhpcy5vbkNsZWFyQ2xpY2suZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVzcG9uc2l2ZVN0eWxlKCkge1xuICAgICAgICBpZiAodGhpcy5udW1iZXJPZk1vbnRocyA+IDEgJiYgdGhpcy5yZXNwb25zaXZlT3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlc3BvbnNpdmVTdHlsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpdmVTdHlsZUVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaXZlU3R5bGVFbGVtZW50LnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LCB0aGlzLnJlc3BvbnNpdmVTdHlsZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaW5uZXJIVE1MID0gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNwb25zaXZlT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zaXZlT3B0aW9ucyA9IFsuLi50aGlzLnJlc3BvbnNpdmVPcHRpb25zXS5maWx0ZXIoKG8pID0+ICEhKG8uYnJlYWtwb2ludCAmJiBvLm51bU1vbnRocykpLnNvcnQoKG8xLCBvMikgPT4gLTEgKiBvMS5icmVha3BvaW50LmxvY2FsZUNvbXBhcmUobzIuYnJlYWtwb2ludCwgdW5kZWZpbmVkLCB7IG51bWVyaWM6IHRydWUgfSkpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zaXZlT3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgeyBicmVha3BvaW50LCBudW1Nb250aHMgfSA9IHJlc3BvbnNpdmVPcHRpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3R5bGVzID0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgLnAtZGF0ZXBpY2tlclske3RoaXMuYXR0cmlidXRlU2VsZWN0b3J9XSAucC1kYXRlcGlja2VyLWdyb3VwOm50aC1jaGlsZCgke251bU1vbnRoc30pIC5wLWRhdGVwaWNrZXItbmV4dCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gbnVtTW9udGhzOyBqIDwgdGhpcy5udW1iZXJPZk1vbnRoczsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXMgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wLWRhdGVwaWNrZXJbJHt0aGlzLmF0dHJpYnV0ZVNlbGVjdG9yfV0gLnAtZGF0ZXBpY2tlci1ncm91cDpudGgtY2hpbGQoJHtqICsgMX0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpbm5lckhUTUwgKz0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJHticmVha3BvaW50fSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7c3R5bGVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaXZlU3R5bGVFbGVtZW50LmlubmVySFRNTCA9IGlubmVySFRNTDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3lSZXNwb25zaXZlU3R5bGVFbGVtZW50KCkge1xuICAgICAgICBpZiAodGhpcy5yZXNwb25zaXZlU3R5bGVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpdmVTdHlsZUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpdmVTdHlsZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudFRhcmdldDogYW55ID0gdGhpcy5lbCA/IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50IDogdGhpcy5kb2N1bWVudDtcblxuICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oZG9jdW1lbnRUYXJnZXQsICdtb3VzZWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNPdXRzaWRlQ2xpY2tlZChldmVudCkgJiYgdGhpcy5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlT3ZlcmxheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DbGlja091dHNpZGUuZW1pdChldmVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5iaW5kRG9jdW1lbnRDbGlja0xpc3RlbmVyKCkge1xuICAgICAgICBpZiAodGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiaW5kRG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY3VtZW50UmVzaXplTGlzdGVuZXIgJiYgIXRoaXMudG91Y2hVSSkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy53aW5kb3csICdyZXNpemUnLCB0aGlzLm9uV2luZG93UmVzaXplLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5iaW5kRG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50UmVzaXplTGlzdGVuZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYmluZFNjcm9sbExpc3RlbmVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2Nyb2xsSGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxIYW5kbGVyID0gbmV3IENvbm5lY3RlZE92ZXJsYXlTY3JvbGxIYW5kbGVyKHRoaXMuY29udGFpbmVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVPdmVybGF5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNjcm9sbEhhbmRsZXIuYmluZFNjcm9sbExpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgdW5iaW5kU2Nyb2xsTGlzdGVuZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsSGFuZGxlci51bmJpbmRTY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNPdXRzaWRlQ2xpY2tlZChldmVudDogRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy5lbC5uYXRpdmVFbGVtZW50LmlzU2FtZU5vZGUoZXZlbnQudGFyZ2V0KSB8fCB0aGlzLmlzTmF2SWNvbkNsaWNrZWQoZXZlbnQpIHx8IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpIHx8ICh0aGlzLm92ZXJsYXkgJiYgdGhpcy5vdmVybGF5LmNvbnRhaW5zKDxOb2RlPmV2ZW50LnRhcmdldCkpKTtcbiAgICB9XG5cbiAgICBpc05hdkljb25DbGlja2VkKGV2ZW50OiBFdmVudCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgRG9tSGFuZGxlci5oYXNDbGFzcyhldmVudC50YXJnZXQsICdwLWRhdGVwaWNrZXItcHJldicpIHx8IERvbUhhbmRsZXIuaGFzQ2xhc3MoZXZlbnQudGFyZ2V0LCAncC1kYXRlcGlja2VyLXByZXYtaWNvbicpIHx8IERvbUhhbmRsZXIuaGFzQ2xhc3MoZXZlbnQudGFyZ2V0LCAncC1kYXRlcGlja2VyLW5leHQnKSB8fCBEb21IYW5kbGVyLmhhc0NsYXNzKGV2ZW50LnRhcmdldCwgJ3AtZGF0ZXBpY2tlci1uZXh0LWljb24nKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9uV2luZG93UmVzaXplKCkge1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSAmJiAhRG9tSGFuZGxlci5pc1RvdWNoRGV2aWNlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZU92ZXJsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uT3ZlcmxheUhpZGUoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSB0aGlzLnZpZXc7XG5cbiAgICAgICAgaWYgKHRoaXMubWFzaykge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95TWFzaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51bmJpbmREb2N1bWVudENsaWNrTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy51bmJpbmREb2N1bWVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgIHRoaXMudW5iaW5kU2Nyb2xsTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5ID0gbnVsbDtcbiAgICAgICAgdGhpcy5vbk1vZGVsVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxIYW5kbGVyKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vdmVybGF5ICYmIHRoaXMuYXV0b1pJbmRleCkge1xuICAgICAgICAgICAgWkluZGV4VXRpbHMuY2xlYXIodGhpcy5vdmVybGF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGVzdHJveVJlc3BvbnNpdmVTdHlsZUVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5jbGVhclRpbWVQaWNrZXJUaW1lcigpO1xuICAgICAgICB0aGlzLnJlc3RvcmVPdmVybGF5QXBwZW5kKCk7XG4gICAgICAgIHRoaXMub25PdmVybGF5SGlkZSgpO1xuICAgIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBCdXR0b25Nb2R1bGUsIFNoYXJlZE1vZHVsZSwgUmlwcGxlTW9kdWxlLCBDaGV2cm9uTGVmdEljb24sIENoZXZyb25SaWdodEljb24sIENoZXZyb25VcEljb24sIENoZXZyb25Eb3duSWNvbiwgVGltZXNJY29uLCBDYWxlbmRhckljb25dLFxuICAgIGV4cG9ydHM6IFtDYWxlbmRhciwgQnV0dG9uTW9kdWxlLCBTaGFyZWRNb2R1bGVdLFxuICAgIGRlY2xhcmF0aW9uczogW0NhbGVuZGFyXVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhck1vZHVsZSB7fVxuIl19