@coreui/angular-pro 4.2.19 → 4.3.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 (405) hide show
  1. package/README.md +175 -175
  2. package/esm2020/lib/accordion/accordion/accordion.component.mjs +4 -4
  3. package/esm2020/lib/accordion/accordion-button/accordion-button.directive.mjs +4 -4
  4. package/esm2020/lib/accordion/accordion-item/accordion-item.component.mjs +4 -4
  5. package/esm2020/lib/accordion/accordion.module.mjs +5 -5
  6. package/esm2020/lib/accordion/accordion.service.mjs +4 -4
  7. package/esm2020/lib/alert/alert-heading.directive.mjs +4 -4
  8. package/esm2020/lib/alert/alert-link.directive.mjs +4 -4
  9. package/esm2020/lib/alert/alert.component.mjs +4 -4
  10. package/esm2020/lib/alert/alert.module.mjs +5 -5
  11. package/esm2020/lib/avatar/avatar.component.mjs +4 -4
  12. package/esm2020/lib/avatar/avatar.module.mjs +5 -5
  13. package/esm2020/lib/backdrop/backdrop.service.mjs +4 -4
  14. package/esm2020/lib/badge/badge.component.mjs +4 -4
  15. package/esm2020/lib/badge/badge.module.mjs +5 -5
  16. package/esm2020/lib/breadcrumb/breadcrumb/breadcrumb.component.mjs +4 -4
  17. package/esm2020/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.mjs +4 -4
  18. package/esm2020/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.mjs +4 -4
  19. package/esm2020/lib/breadcrumb/breadcrumb-router/breadcrumb-router.service.mjs +4 -4
  20. package/esm2020/lib/breadcrumb/breadcrumb.module.mjs +5 -5
  21. package/esm2020/lib/button/button-close.directive.mjs +4 -4
  22. package/esm2020/lib/button/button.directive.mjs +4 -4
  23. package/esm2020/lib/button/button.module.mjs +5 -5
  24. package/esm2020/lib/button-group/button-group/button-group.component.mjs +4 -4
  25. package/esm2020/lib/button-group/button-group.module.mjs +5 -5
  26. package/esm2020/lib/button-group/button-toolbar/button-toolbar.component.mjs +4 -4
  27. package/esm2020/lib/calendar/calendar/calendar-class-view.pipe.mjs +4 -4
  28. package/esm2020/lib/calendar/calendar/calendar.component.mjs +4 -4
  29. package/esm2020/lib/calendar/calendar-month/calendar-class-day.pipe.mjs +4 -4
  30. package/esm2020/lib/calendar/calendar-month/calendar-class-month.pipe.mjs +4 -4
  31. package/esm2020/lib/calendar/calendar-month/calendar-class-year.pipe.mjs +4 -4
  32. package/esm2020/lib/calendar/calendar-month/calendar-day-title.pipe.mjs +4 -4
  33. package/esm2020/lib/calendar/calendar-month/calendar-day.directive.mjs +4 -4
  34. package/esm2020/lib/calendar/calendar-month/calendar-day.pipe.mjs +4 -4
  35. package/esm2020/lib/calendar/calendar-month/calendar-month.component.mjs +4 -4
  36. package/esm2020/lib/calendar/calendar-month/calendar-weekday.pipe.mjs +4 -4
  37. package/esm2020/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +4 -4
  38. package/esm2020/lib/calendar/calendar.module.mjs +5 -5
  39. package/esm2020/lib/calendar/calendar.service.mjs +4 -4
  40. package/esm2020/lib/callout/callout.component.mjs +4 -4
  41. package/esm2020/lib/callout/callout.module.mjs +5 -5
  42. package/esm2020/lib/card/card-body.component.mjs +4 -4
  43. package/esm2020/lib/card/card-footer.component.mjs +4 -4
  44. package/esm2020/lib/card/card-group.component.mjs +4 -4
  45. package/esm2020/lib/card/card-header-actions.component.mjs +4 -4
  46. package/esm2020/lib/card/card-header.component.mjs +4 -4
  47. package/esm2020/lib/card/card-img-overlay/card-img-overlay.component.mjs +4 -4
  48. package/esm2020/lib/card/card-img.directive.mjs +4 -4
  49. package/esm2020/lib/card/card-link.directive.mjs +4 -4
  50. package/esm2020/lib/card/card-subtitle.directive.mjs +4 -4
  51. package/esm2020/lib/card/card-text.directive.mjs +4 -4
  52. package/esm2020/lib/card/card-title.directive.mjs +4 -4
  53. package/esm2020/lib/card/card.component.mjs +4 -4
  54. package/esm2020/lib/card/card.module.mjs +5 -5
  55. package/esm2020/lib/carousel/carousel/carousel.component.mjs +4 -4
  56. package/esm2020/lib/carousel/carousel-caption/carousel-caption.component.mjs +4 -4
  57. package/esm2020/lib/carousel/carousel-control/carousel-control.component.mjs +4 -4
  58. package/esm2020/lib/carousel/carousel-indicators/carousel-indicators.component.mjs +4 -4
  59. package/esm2020/lib/carousel/carousel-inner/carousel-inner.component.mjs +4 -4
  60. package/esm2020/lib/carousel/carousel-item/carousel-item.component.mjs +4 -4
  61. package/esm2020/lib/carousel/carousel-state.mjs +4 -4
  62. package/esm2020/lib/carousel/carousel.config.mjs +4 -4
  63. package/esm2020/lib/carousel/carousel.module.mjs +5 -5
  64. package/esm2020/lib/carousel/carousel.service.mjs +4 -4
  65. package/esm2020/lib/collapse/collapse.directive.mjs +4 -4
  66. package/esm2020/lib/collapse/collapse.module.mjs +5 -5
  67. package/esm2020/lib/date-picker/date-picker.component.mjs +4 -4
  68. package/esm2020/lib/date-picker/date-picker.module.mjs +5 -5
  69. package/esm2020/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +4 -4
  70. package/esm2020/lib/date-range-picker/date-range-picker.module.mjs +5 -5
  71. package/esm2020/lib/dropdown/dropdown/dropdown.component.mjs +7 -7
  72. package/esm2020/lib/dropdown/dropdown-close/dropdown-close.directive.mjs +4 -4
  73. package/esm2020/lib/dropdown/dropdown-divider/dropdown-divider.directive.mjs +4 -4
  74. package/esm2020/lib/dropdown/dropdown-header/dropdown-header.directive.mjs +4 -4
  75. package/esm2020/lib/dropdown/dropdown-item/dropdown-item-plain.directive.mjs +4 -4
  76. package/esm2020/lib/dropdown/dropdown-item/dropdown-item.directive.mjs +4 -4
  77. package/esm2020/lib/dropdown/dropdown-menu/dropdown-menu.directive.mjs +4 -4
  78. package/esm2020/lib/dropdown/dropdown.module.mjs +5 -5
  79. package/esm2020/lib/dropdown/dropdown.service.mjs +4 -4
  80. package/esm2020/lib/element-cover/element-cover.component.mjs +4 -4
  81. package/esm2020/lib/element-cover/element-cover.module.mjs +5 -5
  82. package/esm2020/lib/footer/footer.component.mjs +4 -4
  83. package/esm2020/lib/footer/footer.module.mjs +5 -5
  84. package/esm2020/lib/form/form/form.directive.mjs +4 -4
  85. package/esm2020/lib/form/form-check/form-check-input.directive.mjs +4 -4
  86. package/esm2020/lib/form/form-check/form-check-label.directive.mjs +4 -4
  87. package/esm2020/lib/form/form-check/form-check.component.mjs +4 -4
  88. package/esm2020/lib/form/form-control/form-control.directive.mjs +4 -4
  89. package/esm2020/lib/form/form-feedback/form-feedback.component.mjs +4 -4
  90. package/esm2020/lib/form/form-floating/form-floating.directive.mjs +4 -4
  91. package/esm2020/lib/form/form-label/form-label.directive.mjs +4 -4
  92. package/esm2020/lib/form/form-select/form-select.directive.mjs +4 -4
  93. package/esm2020/lib/form/form-text/form-text.directive.mjs +4 -4
  94. package/esm2020/lib/form/form.module.mjs +5 -5
  95. package/esm2020/lib/form/input-group/input-group.component.mjs +4 -4
  96. package/esm2020/lib/form/input-group-text/input-group-text.directive.mjs +4 -4
  97. package/esm2020/lib/grid/col.component.mjs +4 -4
  98. package/esm2020/lib/grid/col.directive.mjs +4 -4
  99. package/esm2020/lib/grid/container.component.mjs +4 -4
  100. package/esm2020/lib/grid/grid.module.mjs +5 -5
  101. package/esm2020/lib/grid/gutter.directive.mjs +4 -4
  102. package/esm2020/lib/grid/row.component.mjs +4 -4
  103. package/esm2020/lib/grid/row.directive.mjs +4 -4
  104. package/esm2020/lib/header/header/header.component.mjs +4 -4
  105. package/esm2020/lib/header/header-brand/header-brand.component.mjs +4 -4
  106. package/esm2020/lib/header/header-divider/header-divider.component.mjs +4 -4
  107. package/esm2020/lib/header/header-nav/header-nav.component.mjs +4 -4
  108. package/esm2020/lib/header/header-text/header-text.component.mjs +4 -4
  109. package/esm2020/lib/header/header-toggler/header-toggler.directive.mjs +4 -4
  110. package/esm2020/lib/header/header.module.mjs +5 -5
  111. package/esm2020/lib/image/img.directive.mjs +4 -4
  112. package/esm2020/lib/image/img.module.mjs +5 -5
  113. package/esm2020/lib/list-group/list-group-item.directive.mjs +4 -4
  114. package/esm2020/lib/list-group/list-group.directive.mjs +4 -4
  115. package/esm2020/lib/list-group/list-group.module.mjs +5 -5
  116. package/esm2020/lib/loading-button/loading-button.component.mjs +4 -4
  117. package/esm2020/lib/loading-button/loading-button.module.mjs +5 -5
  118. package/esm2020/lib/modal/modal/modal.component.mjs +4 -4
  119. package/esm2020/lib/modal/modal-body/modal-body.component.mjs +4 -4
  120. package/esm2020/lib/modal/modal-content/modal-content.component.mjs +4 -4
  121. package/esm2020/lib/modal/modal-dialog/modal-dialog.component.mjs +4 -4
  122. package/esm2020/lib/modal/modal-dismiss/modal-toggle.directive.mjs +4 -4
  123. package/esm2020/lib/modal/modal-footer/modal-footer.component.mjs +4 -4
  124. package/esm2020/lib/modal/modal-header/modal-header.component.mjs +4 -4
  125. package/esm2020/lib/modal/modal-title/modal-title.directive.mjs +4 -4
  126. package/esm2020/lib/modal/modal.module.mjs +5 -5
  127. package/esm2020/lib/modal/modal.service.mjs +4 -4
  128. package/esm2020/lib/multi-select/multi-select/multi-select.component.mjs +6 -6
  129. package/esm2020/lib/multi-select/multi-select-native-select/multi-select-native-select.component.mjs +4 -4
  130. package/esm2020/lib/multi-select/multi-select-optgroup/multi-select-optgroup-label.component.mjs +4 -4
  131. package/esm2020/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.mjs +4 -4
  132. package/esm2020/lib/multi-select/multi-select-option/multi-select-option.component.mjs +4 -4
  133. package/esm2020/lib/multi-select/multi-select-tag/multi-select-tag.component.mjs +4 -4
  134. package/esm2020/lib/multi-select/multi-select.module.mjs +5 -5
  135. package/esm2020/lib/multi-select/multi-select.service.mjs +4 -4
  136. package/esm2020/lib/nav/nav-item.component.mjs +4 -4
  137. package/esm2020/lib/nav/nav-link.directive.mjs +4 -4
  138. package/esm2020/lib/nav/nav.component.mjs +4 -4
  139. package/esm2020/lib/nav/nav.module.mjs +5 -5
  140. package/esm2020/lib/navbar/navbar-brand/navbar-brand.directive.mjs +4 -4
  141. package/esm2020/lib/navbar/navbar-nav/navbar-nav.component.mjs +4 -4
  142. package/esm2020/lib/navbar/navbar-text/navbar-text.component.mjs +4 -4
  143. package/esm2020/lib/navbar/navbar-toggler/navbar-toggler.directive.mjs +4 -4
  144. package/esm2020/lib/navbar/navbar.component.mjs +4 -4
  145. package/esm2020/lib/navbar/navbar.module.mjs +5 -5
  146. package/esm2020/lib/offcanvas/offcanvas/offcanvas.component.mjs +4 -4
  147. package/esm2020/lib/offcanvas/offcanvas-body/offcanvas-body.component.mjs +4 -4
  148. package/esm2020/lib/offcanvas/offcanvas-header/offcanvas-header.component.mjs +4 -4
  149. package/esm2020/lib/offcanvas/offcanvas-title/offcanvas-title.directive.mjs +4 -4
  150. package/esm2020/lib/offcanvas/offcanvas-toggle/offcanvas-toggle.directive.mjs +4 -4
  151. package/esm2020/lib/offcanvas/offcanvas.module.mjs +5 -5
  152. package/esm2020/lib/offcanvas/offcanvas.service.mjs +4 -4
  153. package/esm2020/lib/pagination/page-item/page-item.component.mjs +4 -4
  154. package/esm2020/lib/pagination/page-item/page-item.directive.mjs +4 -4
  155. package/esm2020/lib/pagination/page-link/page-link.directive.mjs +4 -4
  156. package/esm2020/lib/pagination/pagination/pagination.component.mjs +4 -4
  157. package/esm2020/lib/pagination/pagination.module.mjs +5 -5
  158. package/esm2020/lib/placeholder/placeholder-animation.directive.mjs +4 -4
  159. package/esm2020/lib/placeholder/placeholder.directive.mjs +4 -4
  160. package/esm2020/lib/placeholder/placeholder.module.mjs +5 -5
  161. package/esm2020/lib/popover/popover/popover.component.mjs +4 -4
  162. package/esm2020/lib/popover/popover.directive.mjs +4 -4
  163. package/esm2020/lib/popover/popover.module.mjs +5 -5
  164. package/esm2020/lib/progress/progress-bar.component.mjs +4 -4
  165. package/esm2020/lib/progress/progress.component.mjs +4 -4
  166. package/esm2020/lib/progress/progress.module.mjs +5 -5
  167. package/esm2020/lib/services/class-toggle.service.mjs +4 -4
  168. package/esm2020/lib/services/intersection.service.mjs +4 -4
  169. package/esm2020/lib/services/listeners.service.mjs +4 -4
  170. package/esm2020/lib/shared/html-attr.directive.mjs +4 -4
  171. package/esm2020/lib/shared/shared.module.mjs +5 -5
  172. package/esm2020/lib/shared/template-id.directive.mjs +4 -4
  173. package/esm2020/lib/sidebar/sidebar/sidebar.component.mjs +4 -4
  174. package/esm2020/lib/sidebar/sidebar-backdrop/sidebar-backdrop.service.mjs +4 -4
  175. package/esm2020/lib/sidebar/sidebar-brand/sidebar-brand.component.mjs +4 -4
  176. package/esm2020/lib/sidebar/sidebar-footer/sidebar-footer.component.mjs +4 -4
  177. package/esm2020/lib/sidebar/sidebar-header/sidebar-header.component.mjs +4 -4
  178. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-badge.pipe.mjs +4 -4
  179. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-divider.component.mjs +4 -4
  180. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-group.service.mjs +4 -4
  181. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-icon.pipe.mjs +4 -4
  182. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-item-class.pipe.mjs +4 -4
  183. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-label.component.mjs +4 -4
  184. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +7 -7
  185. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-link.pipe.mjs +4 -4
  186. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav-title.component.mjs +4 -4
  187. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +7 -7
  188. package/esm2020/lib/sidebar/sidebar-nav/sidebar-nav.service.mjs +7 -7
  189. package/esm2020/lib/sidebar/sidebar-toggle/sidebar-toggle.directive.mjs +4 -4
  190. package/esm2020/lib/sidebar/sidebar-toggler/sidebar-toggler.component.mjs +4 -4
  191. package/esm2020/lib/sidebar/sidebar.module.mjs +5 -5
  192. package/esm2020/lib/sidebar/sidebar.service.mjs +4 -4
  193. package/esm2020/lib/smart-pagination/smart-pagination.component.mjs +4 -4
  194. package/esm2020/lib/smart-pagination/smart-pagination.module.mjs +5 -5
  195. package/esm2020/lib/smart-table/smart-table/smart-table.component.mjs +4 -4
  196. package/esm2020/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +4 -4
  197. package/esm2020/lib/smart-table/smart-table-head/smart-table-head.component.mjs +4 -4
  198. package/esm2020/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +4 -4
  199. package/esm2020/lib/smart-table/smart-table.module.mjs +5 -5
  200. package/esm2020/lib/spinner/spinner.component.mjs +4 -4
  201. package/esm2020/lib/spinner/spinner.module.mjs +5 -5
  202. package/esm2020/lib/table/table-active.directive.mjs +4 -4
  203. package/esm2020/lib/table/table-color.directive.mjs +4 -4
  204. package/esm2020/lib/table/table.directive.mjs +4 -4
  205. package/esm2020/lib/table/table.module.mjs +5 -5
  206. package/esm2020/lib/tabs/tab-content/tab-content.component.mjs +4 -4
  207. package/esm2020/lib/tabs/tab-content-ref.directive.mjs +4 -4
  208. package/esm2020/lib/tabs/tab-pane/tab-pane.component.mjs +4 -4
  209. package/esm2020/lib/tabs/tab.service.mjs +4 -4
  210. package/esm2020/lib/tabs/tabs.module.mjs +5 -5
  211. package/esm2020/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.mjs +7 -7
  212. package/esm2020/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.mjs +7 -7
  213. package/esm2020/lib/time-picker/time-picker.component.mjs +4 -4
  214. package/esm2020/lib/time-picker/time-picker.module.mjs +5 -5
  215. package/esm2020/lib/toast/toast/toast.component.mjs +4 -4
  216. package/esm2020/lib/toast/toast-body/toast-body.component.mjs +4 -4
  217. package/esm2020/lib/toast/toast-close.directive.mjs +4 -4
  218. package/esm2020/lib/toast/toast-header/toast-header.component.mjs +4 -4
  219. package/esm2020/lib/toast/toast.module.mjs +5 -5
  220. package/esm2020/lib/toast/toaster/toaster-host.directive.mjs +4 -4
  221. package/esm2020/lib/toast/toaster/toaster.component.mjs +4 -4
  222. package/esm2020/lib/toast/toaster/toaster.service.mjs +4 -4
  223. package/esm2020/lib/tooltip/tooltip/tooltip.component.mjs +4 -4
  224. package/esm2020/lib/tooltip/tooltip.directive.mjs +4 -4
  225. package/esm2020/lib/tooltip/tooltip.module.mjs +5 -5
  226. package/esm2020/lib/utilities/align.directive.mjs +4 -4
  227. package/esm2020/lib/utilities/bg-color.directive.mjs +4 -4
  228. package/esm2020/lib/utilities/border.directive.mjs +4 -4
  229. package/esm2020/lib/utilities/rounded.directive.mjs +4 -4
  230. package/esm2020/lib/utilities/text-color.directive.mjs +4 -4
  231. package/esm2020/lib/utilities/utilities.module.mjs +5 -5
  232. package/esm2020/lib/widget/widget-stat-a/widget-stat-a.component.mjs +4 -4
  233. package/esm2020/lib/widget/widget-stat-b/widget-stat-b.component.mjs +4 -4
  234. package/esm2020/lib/widget/widget-stat-c/widget-stat-c.component.mjs +4 -4
  235. package/esm2020/lib/widget/widget-stat-d/widget-stat-d.component.mjs +4 -4
  236. package/esm2020/lib/widget/widget-stat-e/widget-stat-e.component.mjs +4 -4
  237. package/esm2020/lib/widget/widget-stat-f/widget-stat-f.component.mjs +4 -4
  238. package/esm2020/lib/widget/widget.module.mjs +5 -5
  239. package/fesm2015/coreui-angular-pro.mjs +775 -775
  240. package/fesm2015/coreui-angular-pro.mjs.map +1 -1
  241. package/fesm2020/coreui-angular-pro.mjs +775 -775
  242. package/fesm2020/coreui-angular-pro.mjs.map +1 -1
  243. package/lib/accordion/accordion/accordion.component.d.ts +1 -1
  244. package/lib/accordion/accordion-button/accordion-button.directive.d.ts +1 -1
  245. package/lib/accordion/accordion-item/accordion-item.component.d.ts +1 -1
  246. package/lib/alert/alert-heading.directive.d.ts +1 -1
  247. package/lib/alert/alert-link.directive.d.ts +1 -1
  248. package/lib/alert/alert.component.d.ts +1 -1
  249. package/lib/avatar/avatar.component.d.ts +1 -1
  250. package/lib/badge/badge.component.d.ts +1 -1
  251. package/lib/breadcrumb/breadcrumb/breadcrumb.component.d.ts +1 -1
  252. package/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.d.ts +1 -1
  253. package/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.d.ts +1 -1
  254. package/lib/button/button-close.directive.d.ts +1 -1
  255. package/lib/button/button.directive.d.ts +1 -1
  256. package/lib/button-group/button-group/button-group.component.d.ts +1 -1
  257. package/lib/button-group/button-toolbar/button-toolbar.component.d.ts +1 -1
  258. package/lib/calendar/calendar/calendar.component.d.ts +1 -1
  259. package/lib/calendar/calendar-month/calendar-day.directive.d.ts +1 -1
  260. package/lib/calendar/calendar-month/calendar-month.component.d.ts +1 -1
  261. package/lib/calendar/calendar-navigation/calendar-navigation.component.d.ts +1 -1
  262. package/lib/callout/callout.component.d.ts +1 -1
  263. package/lib/card/card-body.component.d.ts +1 -1
  264. package/lib/card/card-footer.component.d.ts +1 -1
  265. package/lib/card/card-group.component.d.ts +1 -1
  266. package/lib/card/card-header-actions.component.d.ts +1 -1
  267. package/lib/card/card-header.component.d.ts +1 -1
  268. package/lib/card/card-img-overlay/card-img-overlay.component.d.ts +1 -1
  269. package/lib/card/card-img.directive.d.ts +1 -1
  270. package/lib/card/card-link.directive.d.ts +1 -1
  271. package/lib/card/card-subtitle.directive.d.ts +1 -1
  272. package/lib/card/card-text.directive.d.ts +1 -1
  273. package/lib/card/card-title.directive.d.ts +1 -1
  274. package/lib/card/card.component.d.ts +1 -1
  275. package/lib/carousel/carousel/carousel.component.d.ts +1 -1
  276. package/lib/carousel/carousel-caption/carousel-caption.component.d.ts +1 -1
  277. package/lib/carousel/carousel-control/carousel-control.component.d.ts +1 -1
  278. package/lib/carousel/carousel-indicators/carousel-indicators.component.d.ts +1 -1
  279. package/lib/carousel/carousel-inner/carousel-inner.component.d.ts +1 -1
  280. package/lib/carousel/carousel-item/carousel-item.component.d.ts +1 -1
  281. package/lib/collapse/collapse.directive.d.ts +1 -1
  282. package/lib/date-picker/date-picker.component.d.ts +1 -1
  283. package/lib/date-range-picker/date-range-picker/date-range-picker.component.d.ts +1 -1
  284. package/lib/dropdown/dropdown/dropdown.component.d.ts +2 -2
  285. package/lib/dropdown/dropdown-close/dropdown-close.directive.d.ts +1 -1
  286. package/lib/dropdown/dropdown-divider/dropdown-divider.directive.d.ts +1 -1
  287. package/lib/dropdown/dropdown-header/dropdown-header.directive.d.ts +1 -1
  288. package/lib/dropdown/dropdown-item/dropdown-item-plain.directive.d.ts +1 -1
  289. package/lib/dropdown/dropdown-item/dropdown-item.directive.d.ts +1 -1
  290. package/lib/dropdown/dropdown-menu/dropdown-menu.directive.d.ts +1 -1
  291. package/lib/element-cover/element-cover.component.d.ts +1 -1
  292. package/lib/footer/footer.component.d.ts +1 -1
  293. package/lib/form/form/form.directive.d.ts +1 -1
  294. package/lib/form/form-check/form-check-input.directive.d.ts +1 -1
  295. package/lib/form/form-check/form-check-label.directive.d.ts +1 -1
  296. package/lib/form/form-check/form-check.component.d.ts +1 -1
  297. package/lib/form/form-control/form-control.directive.d.ts +1 -1
  298. package/lib/form/form-feedback/form-feedback.component.d.ts +1 -1
  299. package/lib/form/form-floating/form-floating.directive.d.ts +1 -1
  300. package/lib/form/form-label/form-label.directive.d.ts +1 -1
  301. package/lib/form/form-select/form-select.directive.d.ts +1 -1
  302. package/lib/form/form-text/form-text.directive.d.ts +1 -1
  303. package/lib/form/input-group/input-group.component.d.ts +1 -1
  304. package/lib/form/input-group-text/input-group-text.directive.d.ts +1 -1
  305. package/lib/grid/col.component.d.ts +1 -1
  306. package/lib/grid/col.directive.d.ts +1 -1
  307. package/lib/grid/container.component.d.ts +1 -1
  308. package/lib/grid/gutter.directive.d.ts +1 -1
  309. package/lib/grid/row.component.d.ts +1 -1
  310. package/lib/grid/row.directive.d.ts +1 -1
  311. package/lib/header/header/header.component.d.ts +1 -1
  312. package/lib/header/header-brand/header-brand.component.d.ts +1 -1
  313. package/lib/header/header-divider/header-divider.component.d.ts +1 -1
  314. package/lib/header/header-nav/header-nav.component.d.ts +1 -1
  315. package/lib/header/header-text/header-text.component.d.ts +1 -1
  316. package/lib/header/header-toggler/header-toggler.directive.d.ts +1 -1
  317. package/lib/image/img.directive.d.ts +1 -1
  318. package/lib/list-group/list-group-item.directive.d.ts +1 -1
  319. package/lib/list-group/list-group.directive.d.ts +1 -1
  320. package/lib/loading-button/loading-button.component.d.ts +1 -1
  321. package/lib/modal/modal/modal.component.d.ts +1 -1
  322. package/lib/modal/modal-body/modal-body.component.d.ts +1 -1
  323. package/lib/modal/modal-content/modal-content.component.d.ts +1 -1
  324. package/lib/modal/modal-dialog/modal-dialog.component.d.ts +1 -1
  325. package/lib/modal/modal-dismiss/modal-toggle.directive.d.ts +1 -1
  326. package/lib/modal/modal-footer/modal-footer.component.d.ts +1 -1
  327. package/lib/modal/modal-header/modal-header.component.d.ts +1 -1
  328. package/lib/modal/modal-title/modal-title.directive.d.ts +1 -1
  329. package/lib/multi-select/multi-select/multi-select.component.d.ts +1 -1
  330. package/lib/multi-select/multi-select-native-select/multi-select-native-select.component.d.ts +1 -1
  331. package/lib/multi-select/multi-select-optgroup/multi-select-optgroup-label.component.d.ts +1 -1
  332. package/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.d.ts +1 -1
  333. package/lib/multi-select/multi-select-option/multi-select-option.component.d.ts +1 -1
  334. package/lib/multi-select/multi-select-tag/multi-select-tag.component.d.ts +1 -1
  335. package/lib/nav/nav-item.component.d.ts +1 -1
  336. package/lib/nav/nav-link.directive.d.ts +1 -1
  337. package/lib/nav/nav.component.d.ts +1 -1
  338. package/lib/navbar/navbar-brand/navbar-brand.directive.d.ts +1 -1
  339. package/lib/navbar/navbar-nav/navbar-nav.component.d.ts +1 -1
  340. package/lib/navbar/navbar-text/navbar-text.component.d.ts +1 -1
  341. package/lib/navbar/navbar-toggler/navbar-toggler.directive.d.ts +1 -1
  342. package/lib/navbar/navbar.component.d.ts +1 -1
  343. package/lib/offcanvas/offcanvas/offcanvas.component.d.ts +1 -1
  344. package/lib/offcanvas/offcanvas-body/offcanvas-body.component.d.ts +1 -1
  345. package/lib/offcanvas/offcanvas-header/offcanvas-header.component.d.ts +1 -1
  346. package/lib/offcanvas/offcanvas-title/offcanvas-title.directive.d.ts +1 -1
  347. package/lib/offcanvas/offcanvas-toggle/offcanvas-toggle.directive.d.ts +1 -1
  348. package/lib/pagination/page-item/page-item.component.d.ts +1 -1
  349. package/lib/pagination/page-item/page-item.directive.d.ts +1 -1
  350. package/lib/pagination/page-link/page-link.directive.d.ts +1 -1
  351. package/lib/pagination/pagination/pagination.component.d.ts +1 -1
  352. package/lib/placeholder/placeholder-animation.directive.d.ts +1 -1
  353. package/lib/placeholder/placeholder.directive.d.ts +1 -1
  354. package/lib/popover/popover/popover.component.d.ts +1 -1
  355. package/lib/popover/popover.directive.d.ts +1 -1
  356. package/lib/progress/progress-bar.component.d.ts +1 -1
  357. package/lib/progress/progress.component.d.ts +1 -1
  358. package/lib/shared/html-attr.directive.d.ts +1 -1
  359. package/lib/shared/template-id.directive.d.ts +1 -1
  360. package/lib/sidebar/sidebar/sidebar.component.d.ts +1 -1
  361. package/lib/sidebar/sidebar-brand/sidebar-brand.component.d.ts +1 -1
  362. package/lib/sidebar/sidebar-footer/sidebar-footer.component.d.ts +1 -1
  363. package/lib/sidebar/sidebar-header/sidebar-header.component.d.ts +1 -1
  364. package/lib/sidebar/sidebar-nav/sidebar-nav-divider.component.d.ts +1 -1
  365. package/lib/sidebar/sidebar-nav/sidebar-nav-label.component.d.ts +1 -1
  366. package/lib/sidebar/sidebar-nav/sidebar-nav-link.component.d.ts +2 -2
  367. package/lib/sidebar/sidebar-nav/sidebar-nav-title.component.d.ts +1 -1
  368. package/lib/sidebar/sidebar-nav/sidebar-nav.component.d.ts +2 -2
  369. package/lib/sidebar/sidebar-toggle/sidebar-toggle.directive.d.ts +1 -1
  370. package/lib/sidebar/sidebar-toggler/sidebar-toggler.component.d.ts +1 -1
  371. package/lib/smart-pagination/smart-pagination.component.d.ts +1 -1
  372. package/lib/smart-table/smart-table/smart-table.component.d.ts +1 -1
  373. package/lib/smart-table/smart-table-filter/smart-table-filter.component.d.ts +1 -1
  374. package/lib/smart-table/smart-table-head/smart-table-head.component.d.ts +1 -1
  375. package/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.d.ts +1 -1
  376. package/lib/spinner/spinner.component.d.ts +1 -1
  377. package/lib/table/table-active.directive.d.ts +1 -1
  378. package/lib/table/table-color.directive.d.ts +1 -1
  379. package/lib/table/table.directive.d.ts +1 -1
  380. package/lib/tabs/tab-content/tab-content.component.d.ts +1 -1
  381. package/lib/tabs/tab-content-ref.directive.d.ts +1 -1
  382. package/lib/tabs/tab-pane/tab-pane.component.d.ts +1 -1
  383. package/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.d.ts +2 -2
  384. package/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.d.ts +2 -2
  385. package/lib/time-picker/time-picker.component.d.ts +1 -1
  386. package/lib/toast/toast/toast.component.d.ts +1 -1
  387. package/lib/toast/toast-body/toast-body.component.d.ts +1 -1
  388. package/lib/toast/toast-close.directive.d.ts +1 -1
  389. package/lib/toast/toast-header/toast-header.component.d.ts +1 -1
  390. package/lib/toast/toaster/toaster-host.directive.d.ts +1 -1
  391. package/lib/toast/toaster/toaster.component.d.ts +1 -1
  392. package/lib/tooltip/tooltip/tooltip.component.d.ts +1 -1
  393. package/lib/tooltip/tooltip.directive.d.ts +1 -1
  394. package/lib/utilities/align.directive.d.ts +1 -1
  395. package/lib/utilities/bg-color.directive.d.ts +1 -1
  396. package/lib/utilities/border.directive.d.ts +1 -1
  397. package/lib/utilities/rounded.directive.d.ts +1 -1
  398. package/lib/utilities/text-color.directive.d.ts +1 -1
  399. package/lib/widget/widget-stat-a/widget-stat-a.component.d.ts +1 -1
  400. package/lib/widget/widget-stat-b/widget-stat-b.component.d.ts +1 -1
  401. package/lib/widget/widget-stat-c/widget-stat-c.component.d.ts +1 -1
  402. package/lib/widget/widget-stat-d/widget-stat-d.component.d.ts +1 -1
  403. package/lib/widget/widget-stat-e/widget-stat-e.component.d.ts +1 -1
  404. package/lib/widget/widget-stat-f/widget-stat-f.component.d.ts +1 -1
  405. package/package.json +5 -5
@@ -430,9 +430,9 @@ export class SmartTableComponent {
430
430
  }
431
431
  }
432
432
  }
433
- SmartTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SmartTableComponent, deps: [{ token: i0.IterableDiffers }, { token: i0.KeyValueDiffers }], target: i0.ɵɵFactoryTarget.Component });
434
- SmartTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SmartTableComponent, selector: "c-smart-table", inputs: { activePage: "activePage", cleaner: "cleaner", clickableRows: "clickableRows", columns: "columns", columnFilter: "columnFilter", columnFilterValue: "columnFilterValue", columnSorter: "columnSorter", footer: "footer", header: "header", items: "items", itemsPerPage: "itemsPerPage", itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", itemsPerPageSelect: "itemsPerPageSelect", loading: "loading", noItemsLabel: "noItemsLabel", pagination: "pagination", selectable: "selectable", sorterValue: "sorterValue", tableFilter: "tableFilter", tableFilterLabel: "tableFilterLabel", tableFilterPlaceholder: "tableFilterPlaceholder", tableFilterValue: "tableFilterValue", tableBodyProps: "tableBodyProps", tableFootProps: "tableFootProps", tableHeadProps: "tableHeadProps", tableProps: "tableProps" }, outputs: { selectedItemsChange: "selectedItemsChange", sorterValueChange: "sorterValueChange", activePageChange: "activePageChange", itemsPerPageChange: "itemsPerPageChange", rowClick: "rowClick", columnFilterValueChange: "columnFilterValueChange", filteredItemsChange: "filteredItemsChange", tableFilterValueChange: "tableFilterValueChange" }, queries: [{ propertyName: "columnTemplates", predicate: TemplateIdDirective }], exportAs: ["cSmartTable"], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"itemsPerPageSelect || tableFilter || cleaner\" class=\"row my-2 mx-0\">\r\n <ng-template [ngIf]=\"tableFilter || cleaner\">\r\n <div class=\"col-auto p-0\">\r\n <c-smart-table-filter\r\n (valueChange)=\"handleTableFilterChange($event)\"\r\n *ngIf=\"tableFilter\"\r\n [filterLabel]=\"tableFilterLabel\"\r\n [filterPlaceholder]=\"tableFilterPlaceholder\"\r\n [value]=\"tableFilterState\"\r\n >\r\n </c-smart-table-filter>\r\n </div>\r\n <div class=\"col-auto p-0\">\r\n <button\r\n (click)=\"clean($event)\"\r\n *ngIf=\"cleaner\"\r\n [disabled]=\"!isFiltered\"\r\n [ngClass]=\"{'ms-1': tableFilter}\"\r\n [tabindex]=\"0\"\r\n cButton\r\n color=\"transparent\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\"></ng-container>\r\n </button>\r\n </div>\r\n </ng-template>\r\n</div>\r\n<div class=\"position-relative\">\r\n <table [align]=\"tableProps?.align\"\r\n [borderColor]=\"tableProps?.borderColor\"\r\n [bordered]=\"tableProps?.bordered\"\r\n [borderless]=\"tableProps?.borderless\"\r\n [caption]=\"tableProps?.caption\"\r\n [color]=\"tableProps?.color\"\r\n [hover]=\"tableProps?.hover\"\r\n [responsive]=\"tableProps?.responsive\"\r\n [small]=\"tableProps?.small\"\r\n [striped]=\"tableProps?.striped\"\r\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\r\n [cTableColor]=\"tableProps?.color\"\r\n cTable\r\n >\r\n <c-smart-table-head\r\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\r\n (selectAllChange)=\"handleSelectAllChange($event)\"\r\n (sorterStateChange)=\"handleSortChange($event)\"\r\n *ngIf=\"header\"\r\n [columnFilterState]=\"columnFilterState\"\r\n [columnFilter]=\"columnFilter\"\r\n [columns]=\"columns\"\r\n [selectAll]=\"selectedAll\"\r\n [selectable]=\"selectable\"\r\n [sorterValue]=\"sorterValue\"\r\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\r\n [cTableColor]=\"tableHeadProps?.color\"\r\n [cAlign]=\"tableHeadProps?.align\"\r\n [columnFilterTemplates]=\"columnFilterTemplates\"\r\n ></c-smart-table-head>\r\n\r\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\"></ng-container>\r\n\r\n <c-smart-table-head\r\n (selectAllChange)=\"handleSelectAllChange($event)\"\r\n (sorterStateChange)=\"handleSortChange($event)\"\r\n *ngIf=\"footer\"\r\n [columns]=\"columns\"\r\n [selectAll]=\"selectedAll\"\r\n [selectable]=\"selectable\"\r\n [sorterValue]=\"sorterValue\"\r\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\r\n [cTableColor]=\"tableFootProps?.color\"\r\n [cAlign]=\"tableFootProps?.align\"\r\n component=\"tfoot\"\r\n [columnFilterTemplates]=\"columnFilterTemplates\"\r\n ></c-smart-table-head>\r\n\r\n </table>\r\n <c-element-cover\r\n *ngIf=\"loading\"\r\n [boundaries]=\"[\r\n { sides: ['top'], query: 'td' },\r\n { sides: ['bottom'], query: 'tbody' }\r\n ]\"\r\n ></c-element-cover>\r\n</div>\r\n<ng-template [ngIf]=\"pagination || itemsPerPageSelect\">\r\n <div class=\"row\">\r\n <div class=\"col\">\r\n <c-smart-pagination\r\n (activePageChange)=\"setActivePage($event)\"\r\n *ngIf=\"pagination && numberOfPages > 1\"\r\n [activePage]=\"activePage\"\r\n [pages]=\"numberOfPages\">\r\n </c-smart-pagination>\r\n </div>\r\n <div class=\"col-auto ms-auto\">\r\n <c-smart-table-items-per-page-selector\r\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\r\n *ngIf=\"itemsPerPageSelect\"\r\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\r\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n >\r\n </c-smart-table-items-per-page-selector>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #tbodyDefaultTemplate>\r\n <tbody [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\r\n [cTableColor]=\"tableBodyProps?.color\"\r\n [cAlign]=\"tableBodyProps?.align\"\r\n >\r\n <ng-template ngFor let-item [ngForOf]=\"currentItems\" let-cnt=\"count\" let-i=\"index\" let-isEven=\"even\" let-isOdd=\"odd\">\r\n <tr [tabindex]=\"clickableRows ? 0 : -1\"\r\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\r\n (click)=\"handleRowClick({$event, item, i})\"\r\n [cTableActive]=\"item._props?.active\"\r\n [cTableColor]=\"item._props?.color\"\r\n [cAlign]=\"item._props?.align\"\r\n >\r\n <td *ngIf=\"selectable\"\r\n [cTableActive]=\"item?.['_cellProps']?._all?.active\"\r\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\r\n [cAlign]=\"item?.['_cellProps']?._all?.align\"\r\n >\r\n <input (change)=\"handleRowChecked($event, item)\" [checked]=\"item._selected ?? false\" cFormCheckInput>\r\n </td>\r\n <ng-template ngFor let-columnName [ngForOf]=\"rawColumnNames\" let-i=\"index\" >\r\n <ng-container *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {item, columnName, tdContent: item[columnName] }\"></ng-container>\r\n </ng-template>\r\n </tr>\r\n <ng-template [ngIf]=\"templates['tableDetails']\">\r\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\r\n <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>\r\n <tr class=\"p-0\">\r\n <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">\r\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\"></ng-container>\r\n </tbody>\r\n</ng-template>\r\n\r\n<ng-template #columnDefaultTemplate let-item=\"item\" let-columnName=\"columnName\" let-tdContent=\"tdContent\">\r\n <td\r\n [cTableActive]=\"tableDataCellProps(item, columnName)?.['active']\"\r\n [cTableColor]=\"tableDataCellProps(item, columnName)?.color\"\r\n [cAlign]=\"tableDataCellProps(item, columnName)?.align\"\r\n [ngClass]=\"tableDataCellClasses(item, columnName)\"\r\n >\r\n {{tdContent}}\r\n </td>\r\n</ng-template>\r\n\r\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\r\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\r\n<!-- <tr class=\"p-0\">-->\r\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\r\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\r\n<!-- </td>-->\r\n<!-- </tr>-->\r\n<!--</ng-template>-->\r\n\r\n<ng-template #noItemsDefaultTemplate>\r\n <tr *ngIf=\"!currentItems.length\">\r\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{noItemsLabel}}</td>\r\n </tr>\r\n</ng-template>\r\n\r\n<!--todo: filterIconCustomTemplate-->\r\n<ng-template #filterIconTemplate>\r\n <svg class=\"icon icon-custom-size\" role=\"img\" viewBox=\"0 0 512 512\" width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <polygon class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\"></polygon>\r\n <polygon class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\"></polygon>\r\n </svg>\r\n</ng-template>\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }, { kind: "directive", type: i3.TableDirective, selector: "table[cTable]", inputs: ["align", "borderColor", "bordered", "borderless", "caption", "color", "hover", "responsive", "small", "striped", "stripedColumns"] }, { kind: "directive", type: i4.TableColorDirective, selector: "[cTableColor]", inputs: ["cTableColor"] }, { kind: "directive", type: i5.TableActiveDirective, selector: "[cTableActive]", inputs: ["cTableActive"] }, { kind: "component", type: i6.SmartPaginationComponent, selector: "c-smart-pagination", inputs: ["activePage", "arrows", "doubleArrows", "dots", "limit", "pages", "firstButton", "lastButton", "nextButton", "previousButton", "align", "size", "role"], outputs: ["activePageChange"], exportAs: ["cSmartPagination"] }, { kind: "directive", type: i7.FormCheckInputDirective, selector: "input[cFormCheckInput]", inputs: ["type", "indeterminate", "valid"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "directive", type: i9.HtmlAttributesDirective, selector: "[cHtmlAttr]", inputs: ["cHtmlAttr"], exportAs: ["cHtmlAttr"] }, { kind: "directive", type: i10.AlignDirective, selector: "[cAlign]", inputs: ["cAlign"] }, { kind: "component", type: i11.SmartTableFilterComponent, selector: "c-smart-table-filter", inputs: ["filterLabel", "filterPlaceholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: i12.SmartTableItemsPerPageSelectorComponent, selector: "c-smart-table-items-per-page-selector", inputs: ["itemsPerPage", "itemsPerPageLabel", "itemsPerPageOptions"], outputs: ["itemsPerPageChange"] }, { kind: "component", type: i13.SmartTableHeadComponent, selector: "c-smart-table-head", inputs: ["columnFilter", "columnFilterState", "columnSorter", "component", "columns", "selectable", "selectAll", "sorterValue", "columnFilterTemplates"], outputs: ["columnFilterStateChange", "sorterStateChange", "selectAllChange"] }] });
435
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SmartTableComponent, decorators: [{
433
+ SmartTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SmartTableComponent, deps: [{ token: i0.IterableDiffers }, { token: i0.KeyValueDiffers }], target: i0.ɵɵFactoryTarget.Component });
434
+ SmartTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: SmartTableComponent, selector: "c-smart-table", inputs: { activePage: "activePage", cleaner: "cleaner", clickableRows: "clickableRows", columns: "columns", columnFilter: "columnFilter", columnFilterValue: "columnFilterValue", columnSorter: "columnSorter", footer: "footer", header: "header", items: "items", itemsPerPage: "itemsPerPage", itemsPerPageLabel: "itemsPerPageLabel", itemsPerPageOptions: "itemsPerPageOptions", itemsPerPageSelect: "itemsPerPageSelect", loading: "loading", noItemsLabel: "noItemsLabel", pagination: "pagination", selectable: "selectable", sorterValue: "sorterValue", tableFilter: "tableFilter", tableFilterLabel: "tableFilterLabel", tableFilterPlaceholder: "tableFilterPlaceholder", tableFilterValue: "tableFilterValue", tableBodyProps: "tableBodyProps", tableFootProps: "tableFootProps", tableHeadProps: "tableHeadProps", tableProps: "tableProps" }, outputs: { selectedItemsChange: "selectedItemsChange", sorterValueChange: "sorterValueChange", activePageChange: "activePageChange", itemsPerPageChange: "itemsPerPageChange", rowClick: "rowClick", columnFilterValueChange: "columnFilterValueChange", filteredItemsChange: "filteredItemsChange", tableFilterValueChange: "tableFilterValueChange" }, queries: [{ propertyName: "columnTemplates", predicate: TemplateIdDirective }], exportAs: ["cSmartTable"], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"itemsPerPageSelect || tableFilter || cleaner\" class=\"row my-2 mx-0\">\r\n <ng-template [ngIf]=\"tableFilter || cleaner\">\r\n <div class=\"col-auto p-0\">\r\n <c-smart-table-filter\r\n (valueChange)=\"handleTableFilterChange($event)\"\r\n *ngIf=\"tableFilter\"\r\n [filterLabel]=\"tableFilterLabel\"\r\n [filterPlaceholder]=\"tableFilterPlaceholder\"\r\n [value]=\"tableFilterState\"\r\n >\r\n </c-smart-table-filter>\r\n </div>\r\n <div class=\"col-auto p-0\">\r\n <button\r\n (click)=\"clean($event)\"\r\n *ngIf=\"cleaner\"\r\n [disabled]=\"!isFiltered\"\r\n [ngClass]=\"{'ms-1': tableFilter}\"\r\n [tabindex]=\"0\"\r\n cButton\r\n color=\"transparent\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\"></ng-container>\r\n </button>\r\n </div>\r\n </ng-template>\r\n</div>\r\n<div class=\"position-relative\">\r\n <table [align]=\"tableProps?.align\"\r\n [borderColor]=\"tableProps?.borderColor\"\r\n [bordered]=\"tableProps?.bordered\"\r\n [borderless]=\"tableProps?.borderless\"\r\n [caption]=\"tableProps?.caption\"\r\n [color]=\"tableProps?.color\"\r\n [hover]=\"tableProps?.hover\"\r\n [responsive]=\"tableProps?.responsive\"\r\n [small]=\"tableProps?.small\"\r\n [striped]=\"tableProps?.striped\"\r\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\r\n [cTableColor]=\"tableProps?.color\"\r\n cTable\r\n >\r\n <c-smart-table-head\r\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\r\n (selectAllChange)=\"handleSelectAllChange($event)\"\r\n (sorterStateChange)=\"handleSortChange($event)\"\r\n *ngIf=\"header\"\r\n [columnFilterState]=\"columnFilterState\"\r\n [columnFilter]=\"columnFilter\"\r\n [columns]=\"columns\"\r\n [selectAll]=\"selectedAll\"\r\n [selectable]=\"selectable\"\r\n [sorterValue]=\"sorterValue\"\r\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\r\n [cTableColor]=\"tableHeadProps?.color\"\r\n [cAlign]=\"tableHeadProps?.align\"\r\n [columnFilterTemplates]=\"columnFilterTemplates\"\r\n ></c-smart-table-head>\r\n\r\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\"></ng-container>\r\n\r\n <c-smart-table-head\r\n (selectAllChange)=\"handleSelectAllChange($event)\"\r\n (sorterStateChange)=\"handleSortChange($event)\"\r\n *ngIf=\"footer\"\r\n [columns]=\"columns\"\r\n [selectAll]=\"selectedAll\"\r\n [selectable]=\"selectable\"\r\n [sorterValue]=\"sorterValue\"\r\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\r\n [cTableColor]=\"tableFootProps?.color\"\r\n [cAlign]=\"tableFootProps?.align\"\r\n component=\"tfoot\"\r\n [columnFilterTemplates]=\"columnFilterTemplates\"\r\n ></c-smart-table-head>\r\n\r\n </table>\r\n <c-element-cover\r\n *ngIf=\"loading\"\r\n [boundaries]=\"[\r\n { sides: ['top'], query: 'td' },\r\n { sides: ['bottom'], query: 'tbody' }\r\n ]\"\r\n ></c-element-cover>\r\n</div>\r\n<ng-template [ngIf]=\"pagination || itemsPerPageSelect\">\r\n <div class=\"row\">\r\n <div class=\"col\">\r\n <c-smart-pagination\r\n (activePageChange)=\"setActivePage($event)\"\r\n *ngIf=\"pagination && numberOfPages > 1\"\r\n [activePage]=\"activePage\"\r\n [pages]=\"numberOfPages\">\r\n </c-smart-pagination>\r\n </div>\r\n <div class=\"col-auto ms-auto\">\r\n <c-smart-table-items-per-page-selector\r\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\r\n *ngIf=\"itemsPerPageSelect\"\r\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\r\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n >\r\n </c-smart-table-items-per-page-selector>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #tbodyDefaultTemplate>\r\n <tbody [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\r\n [cTableColor]=\"tableBodyProps?.color\"\r\n [cAlign]=\"tableBodyProps?.align\"\r\n >\r\n <ng-template ngFor let-item [ngForOf]=\"currentItems\" let-cnt=\"count\" let-i=\"index\" let-isEven=\"even\" let-isOdd=\"odd\">\r\n <tr [tabindex]=\"clickableRows ? 0 : -1\"\r\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\r\n (click)=\"handleRowClick({$event, item, i})\"\r\n [cTableActive]=\"item._props?.active\"\r\n [cTableColor]=\"item._props?.color\"\r\n [cAlign]=\"item._props?.align\"\r\n >\r\n <td *ngIf=\"selectable\"\r\n [cTableActive]=\"item?.['_cellProps']?._all?.active\"\r\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\r\n [cAlign]=\"item?.['_cellProps']?._all?.align\"\r\n >\r\n <input (change)=\"handleRowChecked($event, item)\" [checked]=\"item._selected ?? false\" cFormCheckInput>\r\n </td>\r\n <ng-template ngFor let-columnName [ngForOf]=\"rawColumnNames\" let-i=\"index\" >\r\n <ng-container *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {item, columnName, tdContent: item[columnName] }\"></ng-container>\r\n </ng-template>\r\n </tr>\r\n <ng-template [ngIf]=\"templates['tableDetails']\">\r\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\r\n <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>\r\n <tr class=\"p-0\">\r\n <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">\r\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\"></ng-container>\r\n </tbody>\r\n</ng-template>\r\n\r\n<ng-template #columnDefaultTemplate let-item=\"item\" let-columnName=\"columnName\" let-tdContent=\"tdContent\">\r\n <td\r\n [cTableActive]=\"tableDataCellProps(item, columnName)?.['active']\"\r\n [cTableColor]=\"tableDataCellProps(item, columnName)?.color\"\r\n [cAlign]=\"tableDataCellProps(item, columnName)?.align\"\r\n [ngClass]=\"tableDataCellClasses(item, columnName)\"\r\n >\r\n {{tdContent}}\r\n </td>\r\n</ng-template>\r\n\r\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\r\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\r\n<!-- <tr class=\"p-0\">-->\r\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\r\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\r\n<!-- </td>-->\r\n<!-- </tr>-->\r\n<!--</ng-template>-->\r\n\r\n<ng-template #noItemsDefaultTemplate>\r\n <tr *ngIf=\"!currentItems.length\">\r\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{noItemsLabel}}</td>\r\n </tr>\r\n</ng-template>\r\n\r\n<!--todo: filterIconCustomTemplate-->\r\n<ng-template #filterIconTemplate>\r\n <svg class=\"icon icon-custom-size\" role=\"img\" viewBox=\"0 0 512 512\" width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <polygon class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\"></polygon>\r\n <polygon class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\"></polygon>\r\n </svg>\r\n</ng-template>\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }, { kind: "directive", type: i3.TableDirective, selector: "table[cTable]", inputs: ["align", "borderColor", "bordered", "borderless", "caption", "color", "hover", "responsive", "small", "striped", "stripedColumns"] }, { kind: "directive", type: i4.TableColorDirective, selector: "[cTableColor]", inputs: ["cTableColor"] }, { kind: "directive", type: i5.TableActiveDirective, selector: "[cTableActive]", inputs: ["cTableActive"] }, { kind: "component", type: i6.SmartPaginationComponent, selector: "c-smart-pagination", inputs: ["activePage", "arrows", "doubleArrows", "dots", "limit", "pages", "firstButton", "lastButton", "nextButton", "previousButton", "align", "size", "role"], outputs: ["activePageChange"], exportAs: ["cSmartPagination"] }, { kind: "directive", type: i7.FormCheckInputDirective, selector: "input[cFormCheckInput]", inputs: ["type", "indeterminate", "valid"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[cButton]", inputs: ["active", "color", "disabled", "shape", "size", "type", "variant"], exportAs: ["cButton"] }, { kind: "directive", type: i9.HtmlAttributesDirective, selector: "[cHtmlAttr]", inputs: ["cHtmlAttr"], exportAs: ["cHtmlAttr"] }, { kind: "directive", type: i10.AlignDirective, selector: "[cAlign]", inputs: ["cAlign"] }, { kind: "component", type: i11.SmartTableFilterComponent, selector: "c-smart-table-filter", inputs: ["filterLabel", "filterPlaceholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: i12.SmartTableItemsPerPageSelectorComponent, selector: "c-smart-table-items-per-page-selector", inputs: ["itemsPerPage", "itemsPerPageLabel", "itemsPerPageOptions"], outputs: ["itemsPerPageChange"] }, { kind: "component", type: i13.SmartTableHeadComponent, selector: "c-smart-table-head", inputs: ["columnFilter", "columnFilterState", "columnSorter", "component", "columns", "selectable", "selectAll", "sorterValue", "columnFilterTemplates"], outputs: ["columnFilterStateChange", "sorterStateChange", "selectAllChange"] }] });
435
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SmartTableComponent, decorators: [{
436
436
  type: Component,
437
437
  args: [{ selector: 'c-smart-table', exportAs: 'cSmartTable', template: "<div *ngIf=\"itemsPerPageSelect || tableFilter || cleaner\" class=\"row my-2 mx-0\">\r\n <ng-template [ngIf]=\"tableFilter || cleaner\">\r\n <div class=\"col-auto p-0\">\r\n <c-smart-table-filter\r\n (valueChange)=\"handleTableFilterChange($event)\"\r\n *ngIf=\"tableFilter\"\r\n [filterLabel]=\"tableFilterLabel\"\r\n [filterPlaceholder]=\"tableFilterPlaceholder\"\r\n [value]=\"tableFilterState\"\r\n >\r\n </c-smart-table-filter>\r\n </div>\r\n <div class=\"col-auto p-0\">\r\n <button\r\n (click)=\"clean($event)\"\r\n *ngIf=\"cleaner\"\r\n [disabled]=\"!isFiltered\"\r\n [ngClass]=\"{'ms-1': tableFilter}\"\r\n [tabindex]=\"0\"\r\n cButton\r\n color=\"transparent\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"filterIconTemplate\"></ng-container>\r\n </button>\r\n </div>\r\n </ng-template>\r\n</div>\r\n<div class=\"position-relative\">\r\n <table [align]=\"tableProps?.align\"\r\n [borderColor]=\"tableProps?.borderColor\"\r\n [bordered]=\"tableProps?.bordered\"\r\n [borderless]=\"tableProps?.borderless\"\r\n [caption]=\"tableProps?.caption\"\r\n [color]=\"tableProps?.color\"\r\n [hover]=\"tableProps?.hover\"\r\n [responsive]=\"tableProps?.responsive\"\r\n [small]=\"tableProps?.small\"\r\n [striped]=\"tableProps?.striped\"\r\n [cHtmlAttr]=\"tableProps?.attributes ?? {}\"\r\n [cTableColor]=\"tableProps?.color\"\r\n cTable\r\n >\r\n <c-smart-table-head\r\n (columnFilterStateChange)=\"handleColumnFilterChange($event)\"\r\n (selectAllChange)=\"handleSelectAllChange($event)\"\r\n (sorterStateChange)=\"handleSortChange($event)\"\r\n *ngIf=\"header\"\r\n [columnFilterState]=\"columnFilterState\"\r\n [columnFilter]=\"columnFilter\"\r\n [columns]=\"columns\"\r\n [selectAll]=\"selectedAll\"\r\n [selectable]=\"selectable\"\r\n [sorterValue]=\"sorterValue\"\r\n [cHtmlAttr]=\"tableHeadProps?.attributes ?? {}\"\r\n [cTableColor]=\"tableHeadProps?.color\"\r\n [cAlign]=\"tableHeadProps?.align\"\r\n [columnFilterTemplates]=\"columnFilterTemplates\"\r\n ></c-smart-table-head>\r\n\r\n <ng-container *ngTemplateOutlet=\"tbodyDefaultTemplate\"></ng-container>\r\n\r\n <c-smart-table-head\r\n (selectAllChange)=\"handleSelectAllChange($event)\"\r\n (sorterStateChange)=\"handleSortChange($event)\"\r\n *ngIf=\"footer\"\r\n [columns]=\"columns\"\r\n [selectAll]=\"selectedAll\"\r\n [selectable]=\"selectable\"\r\n [sorterValue]=\"sorterValue\"\r\n [cHtmlAttr]=\"tableFootProps?.attributes ?? {}\"\r\n [cTableColor]=\"tableFootProps?.color\"\r\n [cAlign]=\"tableFootProps?.align\"\r\n component=\"tfoot\"\r\n [columnFilterTemplates]=\"columnFilterTemplates\"\r\n ></c-smart-table-head>\r\n\r\n </table>\r\n <c-element-cover\r\n *ngIf=\"loading\"\r\n [boundaries]=\"[\r\n { sides: ['top'], query: 'td' },\r\n { sides: ['bottom'], query: 'tbody' }\r\n ]\"\r\n ></c-element-cover>\r\n</div>\r\n<ng-template [ngIf]=\"pagination || itemsPerPageSelect\">\r\n <div class=\"row\">\r\n <div class=\"col\">\r\n <c-smart-pagination\r\n (activePageChange)=\"setActivePage($event)\"\r\n *ngIf=\"pagination && numberOfPages > 1\"\r\n [activePage]=\"activePage\"\r\n [pages]=\"numberOfPages\">\r\n </c-smart-pagination>\r\n </div>\r\n <div class=\"col-auto ms-auto\">\r\n <c-smart-table-items-per-page-selector\r\n (itemsPerPageChange)=\"handleItemsPerPageChange($event)\"\r\n *ngIf=\"itemsPerPageSelect\"\r\n [itemsPerPageLabel]=\"itemsPerPageLabel\"\r\n [itemsPerPageOptions]=\"itemsPerPageOptions\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n >\r\n </c-smart-table-items-per-page-selector>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #tbodyDefaultTemplate>\r\n <tbody [cHtmlAttr]=\"tableBodyProps?.attributes ?? {}\"\r\n [cTableColor]=\"tableBodyProps?.color\"\r\n [cAlign]=\"tableBodyProps?.align\"\r\n >\r\n <ng-template ngFor let-item [ngForOf]=\"currentItems\" let-cnt=\"count\" let-i=\"index\" let-isEven=\"even\" let-isOdd=\"odd\">\r\n <tr [tabindex]=\"clickableRows ? 0 : -1\"\r\n [ngStyle]=\"{cursor: clickableRows ? 'pointer' : 'auto'}\"\r\n (click)=\"handleRowClick({$event, item, i})\"\r\n [cTableActive]=\"item._props?.active\"\r\n [cTableColor]=\"item._props?.color\"\r\n [cAlign]=\"item._props?.align\"\r\n >\r\n <td *ngIf=\"selectable\"\r\n [cTableActive]=\"item?.['_cellProps']?._all?.active\"\r\n [cTableColor]=\"item?.['_cellProps']?._all?.color\"\r\n [cAlign]=\"item?.['_cellProps']?._all?.align\"\r\n >\r\n <input (change)=\"handleRowChecked($event, item)\" [checked]=\"item._selected ?? false\" cFormCheckInput>\r\n </td>\r\n <ng-template ngFor let-columnName [ngForOf]=\"rawColumnNames\" let-i=\"index\" >\r\n <ng-container *ngTemplateOutlet=\"templates['tableData'] || columnDefaultTemplate; context: {item, columnName, tdContent: item[columnName] }\"></ng-container>\r\n </ng-template>\r\n </tr>\r\n <ng-template [ngIf]=\"templates['tableDetails']\">\r\n <!-- <ng-container *ngTemplateOutlet=\"rowDetailsDefaultTemplate\"></ng-container>-->\r\n <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>\r\n <tr class=\"p-0\">\r\n <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">\r\n <ng-container *ngTemplateOutlet=\"templates['tableDetails']; context: {item, index: i}\"></ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </ng-template>\r\n <ng-container *ngTemplateOutlet=\"noItemsDefaultTemplate\"></ng-container>\r\n </tbody>\r\n</ng-template>\r\n\r\n<ng-template #columnDefaultTemplate let-item=\"item\" let-columnName=\"columnName\" let-tdContent=\"tdContent\">\r\n <td\r\n [cTableActive]=\"tableDataCellProps(item, columnName)?.['active']\"\r\n [cTableColor]=\"tableDataCellProps(item, columnName)?.color\"\r\n [cAlign]=\"tableDataCellProps(item, columnName)?.align\"\r\n [ngClass]=\"tableDataCellClasses(item, columnName)\"\r\n >\r\n {{tdContent}}\r\n </td>\r\n</ng-template>\r\n\r\n<!--<ng-template #rowDetailsDefaultTemplate let-item let-index>-->\r\n<!-- <tr><td [colSpan]=\"colspan\" class=\"p-0\" tabindex=\"-1\" [ngStyle]=\"{borderBottomWidth: 0}\"></td></tr>-->\r\n<!-- <tr class=\"p-0\">-->\r\n<!-- <td [colSpan]=\"colspan\" class=\"p-0\" [ngStyle]=\"{border: 0}\">-->\r\n<!-- <ng-container *ngTemplateOutlet=\"templates?.tableDetails\"></ng-container>-->\r\n<!-- </td>-->\r\n<!-- </tr>-->\r\n<!--</ng-template>-->\r\n\r\n<ng-template #noItemsDefaultTemplate>\r\n <tr *ngIf=\"!currentItems.length\">\r\n <td [colSpan]=\"colspan\" class=\"justify-content-center\">{{noItemsLabel}}</td>\r\n </tr>\r\n</ng-template>\r\n\r\n<!--todo: filterIconCustomTemplate-->\r\n<ng-template #filterIconTemplate>\r\n <svg class=\"icon icon-custom-size\" role=\"img\" viewBox=\"0 0 512 512\" width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <polygon class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"40 16 40 53.828 109.024 136 150.815 136 76.896 48 459.51 48 304 242.388 304 401.373 241.373 464 240 464 240 368 208 368 208 496 254.627 496 336 414.627 336 253.612 496 53.612 496 16 40 16\"></polygon>\r\n <polygon class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"166.403 248.225 226.864 187.763 204.237 165.135 143.775 225.597 83.313 165.135 60.687 187.763 121.148 248.225 60.687 308.687 83.313 331.314 143.775 270.852 204.237 331.314 226.864 308.687 166.403 248.225\"></polygon>\r\n </svg>\r\n</ng-template>\r\n", styles: [":host{display:block}\n"] }]
438
438
  }], ctorParameters: function () { return [{ type: i0.IterableDiffers }, { type: i0.KeyValueDiffers }]; }, propDecorators: { activePage: [{
@@ -509,4 +509,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
509
509
  type: ContentChildren,
510
510
  args: [TemplateIdDirective]
511
511
  }] } });
512
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbWFydC10YWJsZS9zbWFydC10YWJsZS9zbWFydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBTUwsTUFBTSxFQUtQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsb0JBQW9CLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQWdCL0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFRbkQsTUFBTSxPQUFPLG1CQUFtQjtJQVc5QixZQUNVLGVBQWdDLEVBQ2hDLGVBQWdDO1FBRGhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFtQmxDLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBU2hCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFTMUIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUEyQmhDLHVCQUFrQixHQUF1QixFQUFFLENBQUM7UUFXNUMsWUFBTyxHQUFZLEtBQUssQ0FBQztRQVN6QixZQUFPLEdBQVksS0FBSyxDQUFDO1FBY3pCLFdBQU0sR0FBb0IsRUFBZ0MsQ0FBQztRQVMzRCxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUUxQixzQkFBaUIsR0FBVyxpQkFBaUIsQ0FBQztRQUM5Qyx3QkFBbUIsR0FBYSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBR2hELGlCQUFZLEdBQThCLGdCQUFnQixDQUFDO1FBUzVELGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBUzdCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBVTdCLGlCQUFZLEdBQWlCLEVBQUUsQ0FBQztRQWdCL0IscUJBQWdCLEdBQUcsU0FBUyxDQUFDO1FBQzdCLDJCQUFzQixHQUFHLGdCQUFnQixDQUFDO1FBYTNDLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUU5QixtQkFBYyxHQUFzQixFQUFFLENBQUM7UUFDdkMsbUJBQWMsR0FBc0IsRUFBRSxDQUFDO1FBQ3ZDLG1CQUFjLEdBQXNCLEVBQUUsQ0FBQztRQUN2QyxlQUFVLEdBQVksRUFBRSxDQUFDO1FBRXhCLHdCQUFtQixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2pFLHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQy9ELHFCQUFnQixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzlELHVCQUFrQixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2hFLGFBQVEsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN0RCw0QkFBdUIsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNyRSx3QkFBbUIsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqRSwyQkFBc0IsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUc5RSxjQUFTLEdBQWlELEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDbEcsMEJBQXFCLEdBQWlELEVBQUUsQ0FBQztRQXVCakUsaUJBQVksR0FBdUIsS0FBSyxDQUFDO1FBNEV6QyxvQkFBZSxHQUFxQixFQUFFLENBQUM7UUE5UjdDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEYsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNGLENBQUM7SUFNRCxJQUNJLFVBQVUsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUdELElBQ0ksT0FBTyxDQUFDLEtBQWM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFHRCxJQUNJLGFBQWEsQ0FBQyxLQUFjO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBR0QsSUFDSSxPQUFPLENBQUMsS0FBSztRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM5QyxDQUFDO0lBS0QsSUFDSSxpQkFBaUIsQ0FBQyxLQUF5QjtRQUM3QyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hELElBQUksT0FBTyxFQUFFO2dCQUNYLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7Z0JBQ2xFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyw2QkFBNkI7YUFDbEQ7U0FDRjtJQUNILENBQUM7SUFDRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBS0QsSUFDSSxNQUFNLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUdELElBQ0ksTUFBTSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFHRCxJQUNJLEtBQUssQ0FBQyxLQUFjO1FBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxJQUFJLE9BQU8sRUFBRTtnQkFDWCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUErQixDQUFDO2FBQ2xFO1NBQ0Y7SUFDSCxDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFHRCxJQUNJLFlBQVksQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBU0QsSUFDSSxVQUFVLENBQUMsS0FBYztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUdELElBQ0ksVUFBVSxDQUFDLEtBQWM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFHRCxJQUNJLFdBQVcsQ0FBQyxLQUFtQjtRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUdELElBQ0ksV0FBVyxDQUFDLE1BQU07UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDM0IsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNoRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsT0FBTyxNQUFNLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQ3hILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7U0FDakc7SUFDSCxDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFNRCxJQUNJLGdCQUFnQixDQUFDLEtBQWE7UUFDaEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssS0FBSyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsNkJBQTZCO1NBQ2xEO0lBQ0gsQ0FBQztJQUNELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFxQkQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBMEIsRUFBRSxFQUFFO1lBQzFELElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztnQkFDekQsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7UUFDdEcsNEJBQTRCO0lBQzlCLENBQUM7SUFDRCxJQUFJLFdBQVcsQ0FBQyxLQUFLO1FBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7UUFDbkgsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBR0QsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0lBQ3hGLENBQUM7SUFFRCxJQUFJLDBCQUEwQjtRQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQzNCLElBQUksQ0FBQywwQkFBMEIsRUFDL0IsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQ3JELENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQzFFLDJCQUEyQjtJQUM3QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRO1lBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUNsQyxPQUFPLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUM1RCxDQUFDLENBQUM7WUFDRixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDcEMsSUFDRSxDQUFDLEdBQUc7WUFDSixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ3BDLENBQUMsSUFBSSxDQUFDLFlBQVk7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRO2dCQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUM3QjtZQUNBLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUMzQjtRQUNELHdGQUF3RjtRQUN4Rix3Q0FBd0M7UUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3pDLGFBQWE7UUFDYixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBMkIsRUFBRSxLQUE0QixFQUFFLEVBQUU7WUFDdEcsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixNQUFNLENBQUMsR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFFLE1BQU0sQ0FBQyxHQUFHLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFJRCxJQUFJLGNBQWM7UUFDaEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixJQUNFLElBQUksQ0FBQyxZQUFZO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRO1lBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUMxQjtZQUNBLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO1lBQzlCLGFBQWE7WUFDYixPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBRTlELElBQUksS0FBSyxZQUFZLFFBQVEsRUFBRTtnQkFDN0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxPQUFPO2FBQ1I7WUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakQsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdkQsYUFBYTtnQkFDYixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2FBQzFGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztRQUM5QixhQUFhO1FBQ2IsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDaEMsSUFDRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFDdEIsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFDdkY7WUFDQSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckQsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDdEM7YUFDRjtZQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRixhQUFhO1FBQ2IsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUEyQixFQUFFLEVBQUU7WUFDbkQsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0QztTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFjO1FBQzdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFXLEVBQUUsS0FBYSxFQUFFLEVBQUU7Z0JBQzlDLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQXNCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBNkM7UUFDNUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUztRQUNsQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQ0wsSUFBSSxDQUFDLFlBQVk7WUFDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUNaLE9BQU8sTUFBTSxLQUFLLFFBQVE7Z0JBQzFCLENBQUMsT0FBTyxNQUFNLEtBQUssUUFBUTtvQkFDekIsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzdELFlBQVksQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQWMsRUFBRSxLQUFhO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNCLE9BQU87U0FDUjtRQUNELDZEQUE2RDtRQUM3RCxNQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXRDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUU7WUFDM0IsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFDckIsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7YUFDckI7aUJBQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRTtnQkFDaEMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7YUFDdEI7aUJBQU07Z0JBQ0wsSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUU7b0JBQ3pFLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2lCQUNyQjtxQkFBTTtvQkFDTCxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztpQkFDakI7YUFDRjtTQUNGO2FBQU07WUFDTCxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUN0QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUNyQjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBYztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQsd0JBQXdCLENBQUMsTUFBVztRQUNsQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUMvRSxDQUFDO0lBRUQsdUJBQXVCLENBQUMsTUFBVztRQUNqQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLE1BQU0sR0FBRyxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxLQUFLLElBQUksQ0FBQztRQUN2RixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUYsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBa0I7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyw0QkFBNEI7SUFDbEQsQ0FBQztJQUVELHdCQUF3QixDQUFDLEtBQWE7UUFDcEMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBYSxFQUFFLElBQW1CO1FBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUksTUFBTSxDQUFDLE1BQTJCLENBQUMsT0FBTyxDQUFDO1FBQzdELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQVc7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQW1CLEVBQUUsRUFBRTtZQUNuRCxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVcsRUFBRSxPQUFlO1FBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSTtZQUNsQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNwRSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUN2RSxDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBVyxFQUFFLE9BQWU7UUFDL0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFlLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQztRQUNuRixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFrQjtRQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBNkIsQ0FBQztRQUNwRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUE2RDtRQUMxRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDaEMsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3RCw2Q0FBNkM7WUFDM0MsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxDQUFDO1lBQzFELElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtnQkFDOUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QjtZQUNILElBQUk7U0FDTDtRQUNELElBQUksT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDL0IsTUFBTSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUMzRCxJQUFJLHNCQUFzQixDQUFDLFdBQVcsRUFBRTtnQkFDdEMsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsWUFBWSxDQUFDO2dCQUN6RCxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZCO2FBQ0Y7U0FDRjtJQUNILENBQUM7O2lIQWhnQlUsbUJBQW1CO3FHQUFuQixtQkFBbUIsNHVDQXdNYixtQkFBbUIsNkVDalB0QyxxNVBBd0xBOzRGRC9JYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsZUFBZSxZQUdmLGFBQWE7b0lBMkJuQixVQUFVO3NCQURiLEtBQUs7Z0JBV0YsT0FBTztzQkFEVixLQUFLO2dCQVVGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBVUYsT0FBTztzQkFEVixLQUFLO2dCQVNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0YsaUJBQWlCO3NCQURwQixLQUFLO2dCQWdCRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdGLE1BQU07c0JBRFQsS0FBSztnQkFVRixNQUFNO3NCQURULEtBQUs7Z0JBVUYsS0FBSztzQkFEUixLQUFLO2dCQWVGLFlBQVk7c0JBRGYsS0FBSztnQkFTRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRixVQUFVO3NCQURiLEtBQUs7Z0JBVUYsVUFBVTtzQkFEYixLQUFLO2dCQVVGLFdBQVc7c0JBRGQsS0FBSztnQkFXRixXQUFXO3NCQURkLEtBQUs7Z0JBY0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFHRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBYUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFK0IsZUFBZTtzQkFBcEQsZUFBZTt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgSXRlcmFibGVEaWZmZXIsXHJcbiAgSXRlcmFibGVEaWZmZXJzLFxyXG4gIEtleVZhbHVlRGlmZmVyLFxyXG4gIEtleVZhbHVlRGlmZmVycyxcclxuICBPbkNoYW5nZXMsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFR5cGVcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcblxyXG5pbXBvcnQgeyBJVGFibGUgfSBmcm9tICcuLi8uLi90YWJsZS90YWJsZS50eXBlJztcclxuaW1wb3J0IHtcclxuICBJQ29sdW1uLFxyXG4gIElDb2x1bW5GaWx0ZXIsXHJcbiAgSUNvbHVtbkZpbHRlclZhbHVlLFxyXG4gIElJdGVtLFxyXG4gIElJdGVtSW50ZXJuYWwsXHJcbiAgSVNtYXJ0VGFibGUsXHJcbiAgSVNvcnRlcixcclxuICBJU29ydGVyVmFsdWUsXHJcbiAgSVRhYmxlRmlsdGVyLFxyXG4gIElUYWJsZUdyb3VwUHJvcHMsXHJcbiAgSXRlbXNQZXJQYWdlU2VsZWN0XHJcbn0gZnJvbSAnLi4vc21hcnQtdGFibGUudHlwZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlSWREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjLXNtYXJ0LXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZXhwb3J0QXM6ICdjU21hcnRUYWJsZSdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBJU21hcnRUYWJsZSwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2FjdGl2ZVBhZ2U6IE51bWJlcklucHV0O1xyXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jbGVhbmVyOiBCb29sZWFuSW5wdXQ7XHJcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NsaWNrYWJsZVJvd3M6IEJvb2xlYW5JbnB1dDtcclxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZm9vdGVyOiBCb29sZWFuSW5wdXQ7XHJcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hlYWRlcjogQm9vbGVhbklucHV0O1xyXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9pdGVtc1BlclBhZ2U6IE51bWJlcklucHV0O1xyXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9wYWdpbmF0aW9uOiBCb29sZWFuSW5wdXQ7XHJcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NlbGVjdGFibGU6IEJvb2xlYW5JbnB1dDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxyXG4gICAgcHJpdmF0ZSBrZXlWYWx1ZURpZmZlcnM6IEtleVZhbHVlRGlmZmVyc1xyXG4gICkge1xyXG4gICAgdGhpcy5pdGVtc0RpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5pdGVtcykuY3JlYXRlKCk7XHJcbiAgICB0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIgPSB0aGlzLml0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuX2NvbHVtbkZpbHRlcmVkKS5jcmVhdGUoKTtcclxuICAgIHRoaXMuY29sdW1GaWx0ZXJWYWx1ZURpZmZlciA9IHRoaXMua2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSkuY3JlYXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zRGlmZmVyOiBJdGVyYWJsZURpZmZlcjxhbnk+IHwgbnVsbDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zRmlsdGVyZWREaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPGFueT4gfCBudWxsO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY29sdW1GaWx0ZXJWYWx1ZURpZmZlcjogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IHwgbnVsbDtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYWN0aXZlUGFnZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9hY3RpdmVQYWdlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpIHx8IDE7XHJcbiAgICB0aGlzLmFjdGl2ZVBhZ2VDaGFuZ2UuZW1pdCh0aGlzLl9hY3RpdmVQYWdlKTtcclxuICB9XHJcbiAgZ2V0IGFjdGl2ZVBhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlO1xyXG4gIH1cclxuICBwcml2YXRlIF9hY3RpdmVQYWdlID0gMTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY2xlYW5lcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fY2xlYW5lciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBjbGVhbmVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsZWFuZXI7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NsZWFuZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY2xpY2thYmxlUm93cyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fY2xpY2thYmxlUm93cyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBjbGlja2FibGVSb3dzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsaWNrYWJsZVJvd3M7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NsaWNrYWJsZVJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY29sdW1ucyh2YWx1ZSkge1xyXG4gICAgdGhpcy5fY29sdW1ucyA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgY29sdW1ucygpIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zIHx8IHRoaXMucmF3Q29sdW1uTmFtZXM7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbHVtbnM/OiAoc3RyaW5nIHwgSUNvbHVtbilbXTtcclxuXHJcbiAgQElucHV0KCkgY29sdW1uRmlsdGVyPzogYm9vbGVhbiB8IElDb2x1bW5GaWx0ZXI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbHVtbkZpbHRlclZhbHVlKHZhbHVlOiBJQ29sdW1uRmlsdGVyVmFsdWUpIHtcclxuICAgIGlmICh0aGlzLmNvbHVtRmlsdGVyVmFsdWVEaWZmZXIpIHtcclxuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuY29sdW1GaWx0ZXJWYWx1ZURpZmZlci5kaWZmKHZhbHVlKTtcclxuICAgICAgaWYgKGNoYW5nZXMpIHtcclxuICAgICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJWYWx1ZSA9IHsgLi4udmFsdWUgfTtcclxuICAgICAgICB0aGlzLmNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoeyAuLi50aGlzLl9jb2x1bW5GaWx0ZXJWYWx1ZSB9KTtcclxuICAgICAgICB0aGlzLnRhYmxlRmlsdGVyZWQ7IC8vIGVtaXRzIHRhYmxlRmlsdGVyZWQgY2hhbmdlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGNvbHVtbkZpbHRlclZhbHVlKCk6IElDb2x1bW5GaWx0ZXJWYWx1ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uRmlsdGVyVmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbHVtbkZpbHRlclZhbHVlOiBJQ29sdW1uRmlsdGVyVmFsdWUgPSB7fTtcclxuXHJcbiAgQElucHV0KCkgY29sdW1uU29ydGVyPzogYm9vbGVhbiB8IElTb3J0ZXI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGZvb3Rlcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZm9vdGVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IGZvb3RlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9mb290ZXI7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Zvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBoZWFkZXIodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2hlYWRlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBoZWFkZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyO1xyXG4gIH1cclxuICBwcml2YXRlIF9oZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbXModmFsdWU6IElJdGVtW10pIHtcclxuICAgIGlmICh0aGlzLml0ZW1zRGlmZmVyKSB7XHJcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZW1zRGlmZmVyLmRpZmYodmFsdWUpO1xyXG4gICAgICBpZiAoY2hhbmdlcykge1xyXG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5zZXRJdGVtcyh2YWx1ZSkgYXMgQXJyYXk8VHlwZTxJSXRlbUludGVybmFsPj47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGl0ZW1zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xyXG4gIH1cclxuICBwcml2YXRlIF9pdGVtczogSUl0ZW1JbnRlcm5hbFtdID0gW10gYXMgQXJyYXk8VHlwZTxJSXRlbUludGVybmFsPj47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1zUGVyUGFnZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBpdGVtc1BlclBhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2U7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2l0ZW1zUGVyUGFnZTogbnVtYmVyID0gMTA7XHJcblxyXG4gIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZUxhYmVsOiBzdHJpbmcgPSAnSXRlbXMgcGVyIHBhZ2U6JztcclxuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDUwXTtcclxuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VTZWxlY3Q/OiBib29sZWFuIHwgSXRlbXNQZXJQYWdlU2VsZWN0O1xyXG4gIEBJbnB1dCgpIGxvYWRpbmc/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG5vSXRlbXNMYWJlbDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICdObyBpdGVtcyBmb3VuZCc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHBhZ2luYXRpb24odmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3BhZ2luYXRpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgcGFnaW5hdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uO1xyXG4gIH1cclxuICBwcml2YXRlIF9wYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3NlbGVjdGFibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgc2VsZWN0YWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZWxlY3RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNvcnRlclZhbHVlKHZhbHVlOiBJU29ydGVyVmFsdWUpIHtcclxuICAgIHRoaXMuX3NvcnRlclZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLnNvcnRlclZhbHVlQ2hhbmdlLmVtaXQoeyAuLi52YWx1ZSB9KTtcclxuICB9XHJcbiAgZ2V0IHNvcnRlclZhbHVlKCk6IElTb3J0ZXJWYWx1ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydGVyVmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NvcnRlclZhbHVlOiBJU29ydGVyVmFsdWUgPSB7fTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgdGFibGVGaWx0ZXIoZmlsdGVyKSB7XHJcbiAgICB0aGlzLl90YWJsZUZpbHRlciA9IGZpbHRlcjtcclxuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnb2JqZWN0Jykge1xyXG4gICAgICB0aGlzLnRhYmxlRmlsdGVyTGFiZWwgPSB0eXBlb2YgZmlsdGVyLmxhYmVsID09PSAnc3RyaW5nJyA/IGZpbHRlci5sYWJlbCA6IHRoaXMudGFibGVGaWx0ZXJMYWJlbDtcclxuICAgICAgdGhpcy50YWJsZUZpbHRlclBsYWNlaG9sZGVyID0gdHlwZW9mIGZpbHRlci5wbGFjZWhvbGRlciA9PT0gJ3N0cmluZycgPyBmaWx0ZXIucGxhY2Vob2xkZXIgOiB0aGlzLnRhYmxlRmlsdGVyUGxhY2Vob2xkZXI7XHJcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9IHR5cGVvZiBmaWx0ZXIudmFsdWUgPT09ICdzdHJpbmcnID8gZmlsdGVyLnZhbHVlIDogdGhpcy50YWJsZUZpbHRlclZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgdGFibGVGaWx0ZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFibGVGaWx0ZXI7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3RhYmxlRmlsdGVyPzogYm9vbGVhbiB8IElUYWJsZUZpbHRlcjtcclxuXHJcbiAgQElucHV0KCkgdGFibGVGaWx0ZXJMYWJlbCA9ICdGaWx0ZXI6JztcclxuICBASW5wdXQoKSB0YWJsZUZpbHRlclBsYWNlaG9sZGVyID0gJ3R5cGUgc3RyaW5nLi4uJztcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgdGFibGVGaWx0ZXJWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fdGFibGVGaWx0ZXJWYWx1ZSAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5fdGFibGVGaWx0ZXJWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICB0aGlzLnRhYmxlRmlsdGVyVmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJlZDsgLy8gZW1pdHMgdGFibGVGaWx0ZXJlZCBjaGFuZ2VcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHRhYmxlRmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90YWJsZUZpbHRlclZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF90YWJsZUZpbHRlclZhbHVlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQElucHV0KCkgdGFibGVCb2R5UHJvcHM/OiBJVGFibGVHcm91cFByb3BzID0ge307XHJcbiAgQElucHV0KCkgdGFibGVGb290UHJvcHM/OiBJVGFibGVHcm91cFByb3BzID0ge307XHJcbiAgQElucHV0KCkgdGFibGVIZWFkUHJvcHM/OiBJVGFibGVHcm91cFByb3BzID0ge307XHJcbiAgQElucHV0KCkgdGFibGVQcm9wcz86IElUYWJsZSA9IHt9O1xyXG5cclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc29ydGVyVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGFjdGl2ZVBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGl0ZW1zUGVyUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJlZEl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSB0YWJsZUZpbHRlclZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlSWREaXJlY3RpdmUpIGNvbHVtblRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxUZW1wbGF0ZUlkRGlyZWN0aXZlPjtcclxuICB0ZW1wbGF0ZXM6IHsgW2tleTogc3RyaW5nXTogKFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSB9ID0geyB0YWJsZURldGFpbHM6IG51bGwsIHRhYmxlRGF0YTogbnVsbCB9O1xyXG4gIGNvbHVtbkZpbHRlclRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiAoVGVtcGxhdGVSZWY8YW55PiB8IG51bGwpIH0gPSB7fTtcclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb2x1bW5UZW1wbGF0ZXMuZm9yRWFjaCgoY2hpbGQ6IFRlbXBsYXRlSWREaXJlY3RpdmUpID0+IHtcclxuICAgICAgaWYgKGNoaWxkLmlkLnN0YXJ0c1dpdGgoJ2NvbHVtbkZpbHRlcl8nKSkge1xyXG4gICAgICAgIHRoaXMuY29sdW1uRmlsdGVyVGVtcGxhdGVzW2NoaWxkLmlkXSA9IGNoaWxkLnRlbXBsYXRlUmVmO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJUZW1wbGF0ZXMgPSB7Li4udGhpcy5jb2x1bW5GaWx0ZXJUZW1wbGF0ZXN9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkQWxsKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5fc2VsZWN0ZWQgPT09IHRydWUpO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkLmxlbmd0aCA9PT0gMCA/IGZhbHNlIDogc2VsZWN0ZWQubGVuZ3RoID09PSB0aGlzLml0ZW1zLmxlbmd0aCA/IHRydWUgOiAnaW5kZXRlcm1pbmF0ZSc7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5fc2VsZWN0ZWRBbGw7XHJcbiAgfVxyXG4gIHNldCBzZWxlY3RlZEFsbCh2YWx1ZSkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5fc2VsZWN0ZWQgPT09IHRydWUpO1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRBbGwgPSBzZWxlY3RlZC5sZW5ndGggPT09IDAgPyBmYWxzZSA6IHNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5pdGVtcy5sZW5ndGggPyB0cnVlIDogJ2luZGV0ZXJtaW5hdGUnO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQoc2VsZWN0ZWQpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZWxlY3RlZEFsbDogKGJvb2xlYW4gfCBzdHJpbmcpID0gZmFsc2U7XHJcblxyXG4gIGdldCB0YWJsZUZpbHRlclN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA/IHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA6ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbHVtbkZpbHRlclN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgPyB0aGlzLmNvbHVtbkZpbHRlclZhbHVlIDoge307XHJcbiAgfVxyXG5cclxuICBnZXQgbnVtYmVyT2ZQYWdlcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZSA/IE1hdGguY2VpbCh0aGlzLnNvcnRlZEl0ZW1zLmxlbmd0aCAvIHRoaXMuX2l0ZW1zUGVyUGFnZSkgOiAxO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbHNwYW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlID8gdGhpcy5yYXdDb2x1bW5OYW1lcy5sZW5ndGggKyAxIDogdGhpcy5yYXdDb2x1bW5OYW1lcy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlyc3RJdGVtT25BY3RpdmVQYWdlSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlID8gKHRoaXMuX2FjdGl2ZVBhZ2UgLSAxKSAqIHRoaXMuX2l0ZW1zUGVyUGFnZSA6IDA7XHJcbiAgfVxyXG5cclxuICBnZXQgaXRlbXNPbkFjdGl2ZVBhZ2UoKTogSUl0ZW1JbnRlcm5hbFtdIHtcclxuICAgIHJldHVybiB0aGlzLnNvcnRlZEl0ZW1zLnNsaWNlKFxyXG4gICAgICB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4LFxyXG4gICAgICB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4ICsgdGhpcy5faXRlbXNQZXJQYWdlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRJdGVtcygpOiBJSXRlbUludGVybmFsW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhZ2UgPyB0aGlzLml0ZW1zT25BY3RpdmVQYWdlIDogdGhpcy5zb3J0ZWRJdGVtcyA/PyBbXTtcclxuICAgIC8vIHJldHVybiB0aGlzLml0ZW1zID8/IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdlbkNvbHMoKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5faXRlbXMgPyB0aGlzLl9pdGVtc1swXSA/PyB7fSA6IHt9KS5maWx0ZXIoKGVsKSA9PiBlbC5jaGFyQXQoMCkgIT09ICdfJyk7XHJcbiAgfVxyXG5cclxuICBnZXQgcmF3Q29sdW1uTmFtZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uc1xyXG4gICAgICA/IHRoaXMuX2NvbHVtbnMubWFwKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiAodHlwZW9mIGNvbHVtbiA9PT0gJ29iamVjdCcpID8gY29sdW1uLmtleSA6IGNvbHVtbjtcclxuICAgICAgfSlcclxuICAgICAgOiB0aGlzLmdlbkNvbHM7XHJcbiAgfVxyXG5cclxuICBnZXQgaXRlbXNEYXRhQ29sdW1ucygpIHtcclxuICAgIHJldHVybiB0aGlzLnJhd0NvbHVtbk5hbWVzLmZpbHRlcigobmFtZSkgPT4gdGhpcy5nZW5Db2xzLmluY2x1ZGVzKG5hbWUpKTtcclxuICB9XHJcblxyXG4gIGdldCBzb3J0ZWRJdGVtcygpOiBJSXRlbUludGVybmFsW10ge1xyXG4gICAgY29uc3QgY29sID0gdGhpcy5zb3J0ZXJWYWx1ZS5jb2x1bW47XHJcbiAgICBpZiAoXHJcbiAgICAgICFjb2wgfHxcclxuICAgICAgIXRoaXMuaXRlbXNEYXRhQ29sdW1ucy5pbmNsdWRlcyhjb2wpIHx8XHJcbiAgICAgICh0aGlzLmNvbHVtblNvcnRlciAmJlxyXG4gICAgICAgIHR5cGVvZiB0aGlzLmNvbHVtblNvcnRlciA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICB0aGlzLmNvbHVtblNvcnRlci5leHRlcm5hbClcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlcmVkO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgdmFsdWVzIGluIGNvbHVtbiBhcmUgdG8gYmUgc29ydGVkIGJ5IG51bWVyaWMgdmFsdWUgdGhleSBhbGwgaGF2ZSB0byBiZSB0eXBlIG51bWJlclxyXG4gICAgLy8gY29uc3QgZmxpcCA9IHNvcnRlclN0YXRlLmFzYyA/IDEgOiAtMVxyXG4gICAgY29uc3QgZmxpcCA9IHRoaXMuc29ydGVyVmFsdWUuc3RhdGUgPT09ICdhc2MnID8gMSA6IHRoaXMuc29ydGVyVmFsdWUuc3RhdGUgPT09ICdkZXNjJyA/IC0xIDogMDtcclxuICAgIGNvbnN0IHRhYmxlRmlsdGVyZWQgPSB0aGlzLnRhYmxlRmlsdGVyZWQ7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBjb25zdCBzb3J0ZWQgPSB0YWJsZUZpbHRlcmVkLnNsaWNlKCkuc29ydCgoaXRlbTogeyBbeDogc3RyaW5nXTogYW55OyB9LCBpdGVtMjogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtjb2xdO1xyXG4gICAgICBjb25zdCB2YWx1ZTIgPSBpdGVtMltjb2xdO1xyXG4gICAgICBjb25zdCBhID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBjb25zdCBiID0gdHlwZW9mIHZhbHVlMiA9PT0gJ251bWJlcicgPyB2YWx1ZTIgOiBTdHJpbmcodmFsdWUyKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICByZXR1cm4gYSA+IGIgPyAxICogZmxpcCA6IGIgPiBhID8gLTEgKiBmbGlwIDogMDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNvcnRlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbHVtbkZpbHRlcmVkOiAgSUl0ZW1JbnRlcm5hbFtdID0gW107XHJcblxyXG4gIGdldCBjb2x1bW5GaWx0ZXJlZCgpOiBJSXRlbUludGVybmFsW10ge1xyXG4gICAgbGV0IF9pdGVtcyA9IHRoaXMuX2l0ZW1zO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNvbHVtbkZpbHRlciAmJlxyXG4gICAgICB0eXBlb2YgdGhpcy5jb2x1bW5GaWx0ZXIgPT09ICdvYmplY3QnICYmXHJcbiAgICAgIHRoaXMuY29sdW1uRmlsdGVyLmV4dGVybmFsXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5fY29sdW1uRmlsdGVyZWQgPSBfaXRlbXM7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgcmV0dXJuIF9pdGVtcztcclxuICAgIH1cclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuY29sdW1uRmlsdGVyU3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG5cclxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgICBfaXRlbXMgPSBfaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB2YWx1ZShpdGVtW2tleV0pKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNvbHVtbkZpbHRlciA9IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgaWYgKGNvbHVtbkZpbHRlciAmJiB0aGlzLml0ZW1zRGF0YUNvbHVtbnMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBfaXRlbXMgPSBfaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBTdHJpbmcoaXRlbVtrZXldKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNvbHVtbkZpbHRlcikpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2NvbHVtbkZpbHRlcmVkID0gX2l0ZW1zO1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgcmV0dXJuIF9pdGVtcztcclxuICB9XHJcblxyXG4gIGdldCB0YWJsZUZpbHRlcmVkKCk6IElJdGVtSW50ZXJuYWxbXSB7XHJcbiAgICBsZXQgaXRlbXMgPSB0aGlzLmNvbHVtbkZpbHRlcmVkO1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy50YWJsZUZpbHRlclN0YXRlIHx8XHJcbiAgICAgICh0aGlzLnRhYmxlRmlsdGVyICYmIHR5cGVvZiB0aGlzLnRhYmxlRmlsdGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLnRhYmxlRmlsdGVyLmV4dGVybmFsKVxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIpIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyLmRpZmYoaXRlbXMpO1xyXG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXNDaGFuZ2UuZW1pdChpdGVtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMudGFibGVGaWx0ZXJTdGF0ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgdmFsdWVDb250YWluRmlsdGVyID0gKHZhbDogYW55KSA9PiBTdHJpbmcodmFsKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcik7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcigoaXRlbTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuaXRlbXNEYXRhQ29sdW1ucy5maW5kKChrZXkpID0+IHZhbHVlQ29udGFpbkZpbHRlcihpdGVtW2tleV0pKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlcikge1xyXG4gICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyLmRpZmYoaXRlbXMpO1xyXG4gICAgICBpZiAoY2hhbmdlcykge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzRmlsdGVyZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlclN0YXRlIHx8IHRoaXMuc29ydGVyVmFsdWU/LmNvbHVtbiB8fCBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1uRmlsdGVyU3RhdGUpLmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRJdGVtcyhpdGVtczogSUl0ZW1bXSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XHJcbiAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IElJdGVtLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgX2lkOiBpbmRleCB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiA8SUl0ZW1JbnRlcm5hbD5bXTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50OiB7IGNvbHVtbktleTogc3RyaW5nOyBpbmRleDogbnVtYmVyOyB9KSB7XHJcbiAgICB0aGlzLmhhbmRsZVNvcnRlckNoYW5nZSgkZXZlbnQuY29sdW1uS2V5LCAkZXZlbnQuaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgaXNTb3J0YWJsZShpOiBudW1iZXIpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IGlzRGF0YUNvbHVtbiA9IHRoaXMuaXRlbXNEYXRhQ29sdW1ucy5pbmNsdWRlcyh0aGlzLnJhd0NvbHVtbk5hbWVzW2ldKTtcclxuICAgIGxldCBjb2x1bW47XHJcbiAgICBpZiAodGhpcy5jb2x1bW5zKSBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbaV07XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmNvbHVtblNvcnRlciAmJlxyXG4gICAgICAoIXRoaXMuY29sdW1ucyB8fFxyXG4gICAgICAgIHR5cGVvZiBjb2x1bW4gIT09ICdvYmplY3QnIHx8XHJcbiAgICAgICAgKHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgICAodHlwZW9mIGNvbHVtbi5zb3J0ZXIgPT09ICd1bmRlZmluZWQnIHx8IGNvbHVtbi5zb3J0ZXIpKSkgJiZcclxuICAgICAgaXNEYXRhQ29sdW1uXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU29ydGVyQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNTb3J0YWJsZShpbmRleCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy9pZiBjb2x1bW4gY2hhbmdlZCBvciBzb3J0IHdhcyBkZXNjZW5kaW5nIGNoYW5nZSBhc2MgdG8gdHJ1ZVxyXG4gICAgY29uc3Qgc3RhdGUgPSB7IC4uLnRoaXMuc29ydGVyVmFsdWUgfTtcclxuXHJcbiAgICBpZiAoc3RhdGUuY29sdW1uID09PSBjb2x1bW4pIHtcclxuICAgICAgaWYgKHN0YXRlLnN0YXRlID09PSAwKSB7XHJcbiAgICAgICAgc3RhdGUuc3RhdGUgPSAnYXNjJztcclxuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5zdGF0ZSA9PT0gJ2FzYycpIHtcclxuICAgICAgICBzdGF0ZS5zdGF0ZSA9ICdkZXNjJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29sdW1uU29ydGVyID09PSAnb2JqZWN0JyAmJiAhdGhpcy5jb2x1bW5Tb3J0ZXIucmVzZXRhYmxlKSB7XHJcbiAgICAgICAgICBzdGF0ZS5zdGF0ZSA9ICdhc2MnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzdGF0ZS5zdGF0ZSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdGF0ZS5jb2x1bW4gPSBjb2x1bW47XHJcbiAgICAgIHN0YXRlLnN0YXRlID0gJ2FzYyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNvcnRlclZhbHVlID0geyAuLi5zdGF0ZSB9O1xyXG4gIH1cclxuXHJcbiAgc2V0QWN0aXZlUGFnZSgkZXZlbnQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5hY3RpdmVQYWdlID0gJGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ29sdW1uRmlsdGVyQ2hhbmdlKCRldmVudDogYW55KSB7XHJcbiAgICBjb25zdCB7IGNvbHVtbiwgdmFsdWUsIHR5cGUgfSA9ICRldmVudDtcclxuICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcclxuICAgIHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgPSB7IC4uLnRoaXMuY29sdW1uRmlsdGVyVmFsdWUsIFtgJHtjb2x1bW59YF06IHZhbHVlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVUYWJsZUZpbHRlckNoYW5nZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgeyB2YWx1ZSwgdHlwZSB9ID0gJGV2ZW50O1xyXG4gICAgY29uc3QgaXNMYXp5ID0gdHlwZW9mIHRoaXMudGFibGVGaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMudGFibGVGaWx0ZXI/LmxhenkgPT09IHRydWU7XHJcbiAgICBpZiAoKChpc0xhenkgJiYgdHlwZSA9PT0gJ2lucHV0JykgfHwgKCFpc0xhenkgJiYgdHlwZSA9PT0gJ2NoYW5nZScpKSAmJiB2YWx1ZS5sZW5ndGggIT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xyXG4gICAgdGhpcy50YWJsZUZpbHRlclZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBjbGVhbigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgPSB7fTtcclxuICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5zb3J0ZXJWYWx1ZSA9IHt9O1xyXG4gICAgdGhpcy50YWJsZUZpbHRlcmVkOyAvL2VtaXRzIHRhYmxlRmlsdGVyZWQgY2hhbmdlXHJcbiAgfVxyXG5cclxuICBoYW5kbGVJdGVtc1BlclBhZ2VDaGFuZ2UodmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9pdGVtc1BlclBhZ2UpIHtcclxuICAgICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xyXG4gICAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5pdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSb3dDaGVja2VkKCRldmVudDogRXZlbnQsIGl0ZW06IElJdGVtSW50ZXJuYWwpIHtcclxuICAgIGl0ZW0uX3NlbGVjdGVkID0gKCRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uX3NlbGVjdGVkID09PSB0cnVlKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNlbGVjdEFsbENoYW5nZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5faXRlbXMgPSB0aGlzLml0ZW1zLm1hcCgoaXRlbTogSUl0ZW1JbnRlcm5hbCkgPT4ge1xyXG4gICAgICByZXR1cm4geyAuLi5pdGVtLCBfc2VsZWN0ZWQ6ICRldmVudCB9O1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkQWxsID0gJGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgdGFibGVEYXRhQ2VsbFByb3BzKGl0ZW06IElJdGVtLCBjb2xOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHByb3BzID0gaXRlbVsnX2NlbGxQcm9wcyddICYmIHtcclxuICAgICAgLi4uKGl0ZW1bJ19jZWxsUHJvcHMnXVsnX2FsbCddICYmIHsgLi4uaXRlbVsnX2NlbGxQcm9wcyddWydfYWxsJ10gfSksXHJcbiAgICAgIC4uLihpdGVtWydfY2VsbFByb3BzJ11bY29sTmFtZV0gJiYgeyAuLi5pdGVtWydfY2VsbFByb3BzJ11bY29sTmFtZV0gfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gcHJvcHM7XHJcbiAgfVxyXG5cclxuICB0YWJsZURhdGFDZWxsQ2xhc3NlcyhpdGVtOiBJSXRlbSwgY29sTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2x1bW46IElDb2x1bW4pID0+IGNvbHVtblsna2V5J10gPT09IGNvbE5hbWUpO1xyXG4gICAgcmV0dXJuIGNvbHVtblswXT8uX2NsYXNzZXM7XHJcbiAgfVxyXG5cclxuICBnZXRDb2x1bW5OYW1lKCRldmVudDogTW91c2VFdmVudCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSAkZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XHJcbiAgICBjb25zdCBjbG9zZXN0ID0gdGFyZ2V0LmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNsb3Nlc3QgPyBBcnJheS5mcm9tKGNsb3Nlc3QuY2hpbGRyZW4pIDogW107XHJcbiAgICBjb25zdCBjbGlja2VkQ2VsbCA9IGNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLmNvbnRhaW5zKHRhcmdldCkpWzBdO1xyXG4gICAgcmV0dXJuIHRoaXMucmF3Q29sdW1uTmFtZXNbY2hpbGRyZW4uaW5kZXhPZihjbGlja2VkQ2VsbCkgLSAodGhpcy5fc2VsZWN0YWJsZSA/IDEgOiAwKV07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSb3dDbGljayhwYXJhbTogeyAkZXZlbnQ6IE1vdXNlRXZlbnQ7IGl0ZW06IElJdGVtSW50ZXJuYWw7IGk6IG51bWJlciB9KSB7XHJcbiAgICBjb25zdCB7ICRldmVudCwgaXRlbSwgaSB9ID0geyAuLi5wYXJhbSB9O1xyXG4gICAgY29uc3QgY29sdW1uTmFtZSA9IHRoaXMuZ2V0Q29sdW1uTmFtZShwYXJhbS4kZXZlbnQpO1xyXG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHsgaXRlbTogaXRlbSwgaW5kZXg6IGkgKyB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4LCBjb2x1bW5OYW1lLCBldmVudDogJGV2ZW50IH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbkZpbHRlclZhbHVlJ10pIHtcclxuICAgICAgY29uc3QgY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UgPSBjaGFuZ2VzWydjb2x1bW5GaWx0ZXJWYWx1ZSddO1xyXG4gICAgICAvLyBpZiAoY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjb2x1bW5GaWx0ZXJWYWx1ZUNoYW5nZS5jdXJyZW50VmFsdWU7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKGN1cnJlbnRWYWx1ZSA/PyB7fSkubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1sndGFibGVGaWx0ZXJWYWx1ZSddKSB7XHJcbiAgICAgIGNvbnN0IHRhYmxlRmlsdGVyVmFsdWVDaGFuZ2UgPSBjaGFuZ2VzWyd0YWJsZUZpbHRlclZhbHVlJ107XHJcbiAgICAgIGlmICh0YWJsZUZpbHRlclZhbHVlQ2hhbmdlLmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGFibGVGaWx0ZXJWYWx1ZUNoYW5nZS5jdXJyZW50VmFsdWU7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cIml0ZW1zUGVyUGFnZVNlbGVjdCB8fCB0YWJsZUZpbHRlciB8fCBjbGVhbmVyXCIgY2xhc3M9XCJyb3cgbXktMiBteC0wXCI+XHJcbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRhYmxlRmlsdGVyIHx8IGNsZWFuZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBwLTBcIj5cclxuICAgICAgPGMtc21hcnQtdGFibGUtZmlsdGVyXHJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZVRhYmxlRmlsdGVyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICpuZ0lmPVwidGFibGVGaWx0ZXJcIlxyXG4gICAgICAgIFtmaWx0ZXJMYWJlbF09XCJ0YWJsZUZpbHRlckxhYmVsXCJcclxuICAgICAgICBbZmlsdGVyUGxhY2Vob2xkZXJdPVwidGFibGVGaWx0ZXJQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgW3ZhbHVlXT1cInRhYmxlRmlsdGVyU3RhdGVcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvYy1zbWFydC10YWJsZS1maWx0ZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBwLTBcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJjbGVhbigkZXZlbnQpXCJcclxuICAgICAgICAqbmdJZj1cImNsZWFuZXJcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhaXNGaWx0ZXJlZFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydtcy0xJzogdGFibGVGaWx0ZXJ9XCJcclxuICAgICAgICBbdGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgICAgY0J1dHRvblxyXG4gICAgICAgIGNvbG9yPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlckljb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICA8dGFibGUgW2FsaWduXT1cInRhYmxlUHJvcHM/LmFsaWduXCJcclxuICAgICAgICAgW2JvcmRlckNvbG9yXT1cInRhYmxlUHJvcHM/LmJvcmRlckNvbG9yXCJcclxuICAgICAgICAgW2JvcmRlcmVkXT1cInRhYmxlUHJvcHM/LmJvcmRlcmVkXCJcclxuICAgICAgICAgW2JvcmRlcmxlc3NdPVwidGFibGVQcm9wcz8uYm9yZGVybGVzc1wiXHJcbiAgICAgICAgIFtjYXB0aW9uXT1cInRhYmxlUHJvcHM/LmNhcHRpb25cIlxyXG4gICAgICAgICBbY29sb3JdPVwidGFibGVQcm9wcz8uY29sb3JcIlxyXG4gICAgICAgICBbaG92ZXJdPVwidGFibGVQcm9wcz8uaG92ZXJcIlxyXG4gICAgICAgICBbcmVzcG9uc2l2ZV09XCJ0YWJsZVByb3BzPy5yZXNwb25zaXZlXCJcclxuICAgICAgICAgW3NtYWxsXT1cInRhYmxlUHJvcHM/LnNtYWxsXCJcclxuICAgICAgICAgW3N0cmlwZWRdPVwidGFibGVQcm9wcz8uc3RyaXBlZFwiXHJcbiAgICAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXHJcbiAgICAgICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZVByb3BzPy5jb2xvclwiXHJcbiAgICAgICAgIGNUYWJsZVxyXG4gID5cclxuICAgIDxjLXNtYXJ0LXRhYmxlLWhlYWRcclxuICAgICAgKGNvbHVtbkZpbHRlclN0YXRlQ2hhbmdlKT1cImhhbmRsZUNvbHVtbkZpbHRlckNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKHNlbGVjdEFsbENoYW5nZSk9XCJoYW5kbGVTZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChzb3J0ZXJTdGF0ZUNoYW5nZSk9XCJoYW5kbGVTb3J0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAqbmdJZj1cImhlYWRlclwiXHJcbiAgICAgIFtjb2x1bW5GaWx0ZXJTdGF0ZV09XCJjb2x1bW5GaWx0ZXJTdGF0ZVwiXHJcbiAgICAgIFtjb2x1bW5GaWx0ZXJdPVwiY29sdW1uRmlsdGVyXCJcclxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgIFtzZWxlY3RBbGxdPVwic2VsZWN0ZWRBbGxcIlxyXG4gICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcclxuICAgICAgW3NvcnRlclZhbHVlXT1cInNvcnRlclZhbHVlXCJcclxuICAgICAgW2NIdG1sQXR0cl09XCJ0YWJsZUhlYWRQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXHJcbiAgICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZUhlYWRQcm9wcz8uY29sb3JcIlxyXG4gICAgICBbY0FsaWduXT1cInRhYmxlSGVhZFByb3BzPy5hbGlnblwiXHJcbiAgICAgIFtjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNdPVwiY29sdW1uRmlsdGVyVGVtcGxhdGVzXCJcclxuICAgID48L2Mtc21hcnQtdGFibGUtaGVhZD5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGJvZHlEZWZhdWx0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8Yy1zbWFydC10YWJsZS1oZWFkXHJcbiAgICAgIChzZWxlY3RBbGxDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAoc29ydGVyU3RhdGVDaGFuZ2UpPVwiaGFuZGxlU29ydENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKm5nSWY9XCJmb290ZXJcIlxyXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgW3NlbGVjdEFsbF09XCJzZWxlY3RlZEFsbFwiXHJcbiAgICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxyXG4gICAgICBbc29ydGVyVmFsdWVdPVwic29ydGVyVmFsdWVcIlxyXG4gICAgICBbY0h0bWxBdHRyXT1cInRhYmxlRm9vdFByb3BzPy5hdHRyaWJ1dGVzID8/IHt9XCJcclxuICAgICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlRm9vdFByb3BzPy5jb2xvclwiXHJcbiAgICAgIFtjQWxpZ25dPVwidGFibGVGb290UHJvcHM/LmFsaWduXCJcclxuICAgICAgY29tcG9uZW50PVwidGZvb3RcIlxyXG4gICAgICBbY29sdW1uRmlsdGVyVGVtcGxhdGVzXT1cImNvbHVtbkZpbHRlclRlbXBsYXRlc1wiXHJcbiAgICA+PC9jLXNtYXJ0LXRhYmxlLWhlYWQ+XHJcblxyXG4gIDwvdGFibGU+XHJcbiAgPGMtZWxlbWVudC1jb3ZlclxyXG4gICAgKm5nSWY9XCJsb2FkaW5nXCJcclxuICAgIFtib3VuZGFyaWVzXT1cIltcclxuICAgICAgeyBzaWRlczogWyd0b3AnXSwgcXVlcnk6ICd0ZCcgfSxcclxuICAgICAgeyBzaWRlczogWydib3R0b20nXSwgcXVlcnk6ICd0Ym9keScgfVxyXG4gICAgXVwiXHJcbiAgPjwvYy1lbGVtZW50LWNvdmVyPlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInBhZ2luYXRpb24gfHwgaXRlbXNQZXJQYWdlU2VsZWN0XCI+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICA8Yy1zbWFydC1wYWdpbmF0aW9uXHJcbiAgICAgICAgKGFjdGl2ZVBhZ2VDaGFuZ2UpPVwic2V0QWN0aXZlUGFnZSgkZXZlbnQpXCJcclxuICAgICAgICAqbmdJZj1cInBhZ2luYXRpb24gJiYgbnVtYmVyT2ZQYWdlcyA+IDFcIlxyXG4gICAgICAgIFthY3RpdmVQYWdlXT1cImFjdGl2ZVBhZ2VcIlxyXG4gICAgICAgIFtwYWdlc109XCJudW1iZXJPZlBhZ2VzXCI+XHJcbiAgICAgIDwvYy1zbWFydC1wYWdpbmF0aW9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gbXMtYXV0b1wiPlxyXG4gICAgICA8Yy1zbWFydC10YWJsZS1pdGVtcy1wZXItcGFnZS1zZWxlY3RvclxyXG4gICAgICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwiaGFuZGxlSXRlbXNQZXJQYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICpuZ0lmPVwiaXRlbXNQZXJQYWdlU2VsZWN0XCJcclxuICAgICAgICBbaXRlbXNQZXJQYWdlTGFiZWxdPVwiaXRlbXNQZXJQYWdlTGFiZWxcIlxyXG4gICAgICAgIFtpdGVtc1BlclBhZ2VPcHRpb25zXT1cIml0ZW1zUGVyUGFnZU9wdGlvbnNcIlxyXG4gICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCJcclxuICAgICAgPlxyXG4gICAgICA8L2Mtc21hcnQtdGFibGUtaXRlbXMtcGVyLXBhZ2Utc2VsZWN0b3I+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdGJvZHlEZWZhdWx0VGVtcGxhdGU+XHJcbiAgPHRib2R5IFtjSHRtbEF0dHJdPVwidGFibGVCb2R5UHJvcHM/LmF0dHJpYnV0ZXMgPz8ge31cIlxyXG4gICAgICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVCb2R5UHJvcHM/LmNvbG9yXCJcclxuICAgICAgICAgW2NBbGlnbl09XCJ0YWJsZUJvZHlQcm9wcz8uYWxpZ25cIlxyXG4gID5cclxuICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWl0ZW0gW25nRm9yT2ZdPVwiY3VycmVudEl0ZW1zXCIgbGV0LWNudD1cImNvdW50XCIgbGV0LWk9XCJpbmRleFwiIGxldC1pc0V2ZW49XCJldmVuXCIgbGV0LWlzT2RkPVwib2RkXCI+XHJcbiAgICA8dHIgW3RhYmluZGV4XT1cImNsaWNrYWJsZVJvd3MgPyAwIDogLTFcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntjdXJzb3I6IGNsaWNrYWJsZVJvd3MgPyAncG9pbnRlcicgOiAnYXV0byd9XCJcclxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlUm93Q2xpY2soeyRldmVudCwgaXRlbSwgaX0pXCJcclxuICAgICAgICBbY1RhYmxlQWN0aXZlXT1cIml0ZW0uX3Byb3BzPy5hY3RpdmVcIlxyXG4gICAgICAgIFtjVGFibGVDb2xvcl09XCJpdGVtLl9wcm9wcz8uY29sb3JcIlxyXG4gICAgICAgIFtjQWxpZ25dPVwiaXRlbS5fcHJvcHM/LmFsaWduXCJcclxuICAgID5cclxuICAgICAgPHRkICpuZ0lmPVwic2VsZWN0YWJsZVwiXHJcbiAgICAgICAgICBbY1RhYmxlQWN0aXZlXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hY3RpdmVcIlxyXG4gICAgICAgICAgW2NUYWJsZUNvbG9yXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5jb2xvclwiXHJcbiAgICAgICAgICBbY0FsaWduXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hbGlnblwiXHJcbiAgICAgID5cclxuICAgICAgICAgIDxpbnB1dCAoY2hhbmdlKT1cImhhbmRsZVJvd0NoZWNrZWQoJGV2ZW50LCBpdGVtKVwiIFtjaGVja2VkXT1cIml0ZW0uX3NlbGVjdGVkID8/IGZhbHNlXCIgY0Zvcm1DaGVja0lucHV0PlxyXG4gICAgICA8L3RkPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWNvbHVtbk5hbWUgW25nRm9yT2ZdPVwicmF3Q29sdW1uTmFtZXNcIiBsZXQtaT1cImluZGV4XCIgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXNbJ3RhYmxlRGF0YSddIHx8IGNvbHVtbkRlZmF1bHRUZW1wbGF0ZTsgY29udGV4dDoge2l0ZW0sIGNvbHVtbk5hbWUsIHRkQ29udGVudDogaXRlbVtjb2x1bW5OYW1lXSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3RyPlxyXG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRlbXBsYXRlc1sndGFibGVEZXRhaWxzJ11cIj5cclxuICAgICAgPCEtLSAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dEZXRhaWxzRGVmYXVsdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+LS0+XHJcbiAgICAgIDx0cj48dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgdGFiaW5kZXg9XCItMVwiIFtuZ1N0eWxlXT1cIntib3JkZXJCb3R0b21XaWR0aDogMH1cIj48L3RkPjwvdHI+XHJcbiAgICAgIDx0ciBjbGFzcz1cInAtMFwiPlxyXG4gICAgICAgIDx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJwLTBcIiBbbmdTdHlsZV09XCJ7Ym9yZGVyOiAwfVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1sndGFibGVEZXRhaWxzJ107IGNvbnRleHQ6IHtpdGVtLCBpbmRleDogaX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub0l0ZW1zRGVmYXVsdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgPC90Ym9keT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29sdW1uRGVmYXVsdFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC1jb2x1bW5OYW1lPVwiY29sdW1uTmFtZVwiIGxldC10ZENvbnRlbnQ9XCJ0ZENvbnRlbnRcIj5cclxuICA8dGRcclxuICAgIFtjVGFibGVBY3RpdmVdPVwidGFibGVEYXRhQ2VsbFByb3BzKGl0ZW0sIGNvbHVtbk5hbWUpPy5bJ2FjdGl2ZSddXCJcclxuICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZURhdGFDZWxsUHJvcHMoaXRlbSwgY29sdW1uTmFtZSk/LmNvbG9yXCJcclxuICAgIFtjQWxpZ25dPVwidGFibGVEYXRhQ2VsbFByb3BzKGl0ZW0sIGNvbHVtbk5hbWUpPy5hbGlnblwiXHJcbiAgICBbbmdDbGFzc109XCJ0YWJsZURhdGFDZWxsQ2xhc3NlcyhpdGVtLCBjb2x1bW5OYW1lKVwiXHJcbiAgPlxyXG4gICAge3t0ZENvbnRlbnR9fVxyXG4gIDwvdGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tPG5nLXRlbXBsYXRlICNyb3dEZXRhaWxzRGVmYXVsdFRlbXBsYXRlIGxldC1pdGVtIGxldC1pbmRleD4tLT5cclxuPCEtLSAgPHRyPjx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJwLTBcIiB0YWJpbmRleD1cIi0xXCIgW25nU3R5bGVdPVwie2JvcmRlckJvdHRvbVdpZHRoOiAwfVwiPjwvdGQ+PC90cj4tLT5cclxuPCEtLSAgPHRyIGNsYXNzPVwicC0wXCI+LS0+XHJcbjwhLS0gICAgPHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cInAtMFwiIFtuZ1N0eWxlXT1cIntib3JkZXI6IDB9XCI+LS0+XHJcbjwhLS0gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzPy50YWJsZURldGFpbHNcIj48L25nLWNvbnRhaW5lcj4tLT5cclxuPCEtLSAgICA8L3RkPi0tPlxyXG48IS0tICA8L3RyPi0tPlxyXG48IS0tPC9uZy10ZW1wbGF0ZT4tLT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbm9JdGVtc0RlZmF1bHRUZW1wbGF0ZT5cclxuICA8dHIgKm5nSWY9XCIhY3VycmVudEl0ZW1zLmxlbmd0aFwiPlxyXG4gICAgPHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cImp1c3RpZnktY29udGVudC1jZW50ZXJcIj57e25vSXRlbXNMYWJlbH19PC90ZD5cclxuICA8L3RyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLXRvZG86IGZpbHRlckljb25DdXN0b21UZW1wbGF0ZS0tPlxyXG48bmctdGVtcGxhdGUgI2ZpbHRlckljb25UZW1wbGF0ZT5cclxuICA8c3ZnIGNsYXNzPVwiaWNvbiBpY29uLWN1c3RvbS1zaXplXCIgcm9sZT1cImltZ1wiIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiIHdpZHRoPVwiMThcIlxyXG4gICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgPHBvbHlnb24gY2xhc3M9XCJjaS1wcmltYXJ5XCJcclxuICAgICAgICAgICAgIGZpbGw9XCJ2YXIoLS1jaS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpXCJcclxuICAgICAgICAgICAgIHBvaW50cz1cIjQwIDE2IDQwIDUzLjgyOCAxMDkuMDI0IDEzNiAxNTAuODE1IDEzNiA3Ni44OTYgNDggNDU5LjUxIDQ4IDMwNCAyNDIuMzg4IDMwNCA0MDEuMzczIDI0MS4zNzMgNDY0IDI0MCA0NjQgMjQwIDM2OCAyMDggMzY4IDIwOCA0OTYgMjU0LjYyNyA0OTYgMzM2IDQxNC42MjcgMzM2IDI1My42MTIgNDk2IDUzLjYxMiA0OTYgMTYgNDAgMTZcIj48L3BvbHlnb24+XHJcbiAgICA8cG9seWdvbiBjbGFzcz1cImNpLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgZmlsbD1cInZhcigtLWNpLXByaW1hcnktY29sb3IsIGN1cnJlbnRDb2xvcilcIlxyXG4gICAgICAgICAgICAgcG9pbnRzPVwiMTY2LjQwMyAyNDguMjI1IDIyNi44NjQgMTg3Ljc2MyAyMDQuMjM3IDE2NS4xMzUgMTQzLjc3NSAyMjUuNTk3IDgzLjMxMyAxNjUuMTM1IDYwLjY4NyAxODcuNzYzIDEyMS4xNDggMjQ4LjIyNSA2MC42ODcgMzA4LjY4NyA4My4zMTMgMzMxLjMxNCAxNDMuNzc1IDI3MC44NTIgMjA0LjIzNyAzMzEuMzE0IDIyNi44NjQgMzA4LjY4NyAxNjYuNDAzIDI0OC4yMjVcIj48L3BvbHlnb24+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
512
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbWFydC10YWJsZS9zbWFydC10YWJsZS9zbWFydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBTUwsTUFBTSxFQUtQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsb0JBQW9CLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQWdCL0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFRbkQsTUFBTSxPQUFPLG1CQUFtQjtJQVc5QixZQUNVLGVBQWdDLEVBQ2hDLGVBQWdDO1FBRGhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFtQmxDLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBU2hCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFTMUIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUEyQmhDLHVCQUFrQixHQUF1QixFQUFFLENBQUM7UUFXNUMsWUFBTyxHQUFZLEtBQUssQ0FBQztRQVN6QixZQUFPLEdBQVksS0FBSyxDQUFDO1FBY3pCLFdBQU0sR0FBb0IsRUFBZ0MsQ0FBQztRQVMzRCxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUUxQixzQkFBaUIsR0FBVyxpQkFBaUIsQ0FBQztRQUM5Qyx3QkFBbUIsR0FBYSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFB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Z0JBR0YsaUJBQWlCO3NCQURwQixLQUFLO2dCQWdCRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdGLE1BQU07c0JBRFQsS0FBSztnQkFVRixNQUFNO3NCQURULEtBQUs7Z0JBVUYsS0FBSztzQkFEUixLQUFLO2dCQWVGLFlBQVk7c0JBRGYsS0FBSztnQkFTRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRixVQUFVO3NCQURiLEtBQUs7Z0JBVUYsVUFBVTtzQkFEYixLQUFLO2dCQVVGLFdBQVc7c0JBRGQsS0FBSztnQkFXRixXQUFXO3NCQURkLEtBQUs7Z0JBY0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFHRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBYUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFK0IsZUFBZTtzQkFBcEQsZUFBZTt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgSXRlcmFibGVEaWZmZXIsXHJcbiAgSXRlcmFibGVEaWZmZXJzLFxyXG4gIEtleVZhbHVlRGlmZmVyLFxyXG4gIEtleVZhbHVlRGlmZmVycyxcclxuICBPbkNoYW5nZXMsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFR5cGVcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcblxyXG5pbXBvcnQgeyBJVGFibGUgfSBmcm9tICcuLi8uLi90YWJsZS90YWJsZS50eXBlJztcclxuaW1wb3J0IHtcclxuICBJQ29sdW1uLFxyXG4gIElDb2x1bW5GaWx0ZXIsXHJcbiAgSUNvbHVtbkZpbHRlclZhbHVlLFxyXG4gIElJdGVtLFxyXG4gIElJdGVtSW50ZXJuYWwsXHJcbiAgSVNtYXJ0VGFibGUsXHJcbiAgSVNvcnRlcixcclxuICBJU29ydGVyVmFsdWUsXHJcbiAgSVRhYmxlRmlsdGVyLFxyXG4gIElUYWJsZUdyb3VwUHJvcHMsXHJcbiAgSXRlbXNQZXJQYWdlU2VsZWN0XHJcbn0gZnJvbSAnLi4vc21hcnQtdGFibGUudHlwZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlSWREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjLXNtYXJ0LXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZXhwb3J0QXM6ICdjU21hcnRUYWJsZSdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBJU21hcnRUYWJsZSwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2FjdGl2ZVBhZ2U6IE51bWJlcklucHV0O1xyXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jbGVhbmVyOiBCb29sZWFuSW5wdXQ7XHJcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NsaWNrYWJsZVJvd3M6IEJvb2xlYW5JbnB1dDtcclxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZm9vdGVyOiBCb29sZWFuSW5wdXQ7XHJcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hlYWRlcjogQm9vbGVhbklucHV0O1xyXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9pdGVtc1BlclBhZ2U6IE51bWJlcklucHV0O1xyXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9wYWdpbmF0aW9uOiBCb29sZWFuSW5wdXQ7XHJcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NlbGVjdGFibGU6IEJvb2xlYW5JbnB1dDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxyXG4gICAgcHJpdmF0ZSBrZXlWYWx1ZURpZmZlcnM6IEtleVZhbHVlRGlmZmVyc1xyXG4gICkge1xyXG4gICAgdGhpcy5pdGVtc0RpZmZlciA9IHRoaXMuaXRlcmFibGVEaWZmZXJzLmZpbmQodGhpcy5pdGVtcykuY3JlYXRlKCk7XHJcbiAgICB0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIgPSB0aGlzLml0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuX2NvbHVtbkZpbHRlcmVkKS5jcmVhdGUoKTtcclxuICAgIHRoaXMuY29sdW1GaWx0ZXJWYWx1ZURpZmZlciA9IHRoaXMua2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5jb2x1bW5GaWx0ZXJWYWx1ZSkuY3JlYXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zRGlmZmVyOiBJdGVyYWJsZURpZmZlcjxhbnk+IHwgbnVsbDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zRmlsdGVyZWREaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPGFueT4gfCBudWxsO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY29sdW1GaWx0ZXJWYWx1ZURpZmZlcjogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IHwgbnVsbDtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYWN0aXZlUGFnZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9hY3RpdmVQYWdlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpIHx8IDE7XHJcbiAgICB0aGlzLmFjdGl2ZVBhZ2VDaGFuZ2UuZW1pdCh0aGlzLl9hY3RpdmVQYWdlKTtcclxuICB9XHJcbiAgZ2V0IGFjdGl2ZVBhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlO1xyXG4gIH1cclxuICBwcml2YXRlIF9hY3RpdmVQYWdlID0gMTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY2xlYW5lcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fY2xlYW5lciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBjbGVhbmVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsZWFuZXI7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NsZWFuZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY2xpY2thYmxlUm93cyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fY2xpY2thYmxlUm93cyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBjbGlja2FibGVSb3dzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsaWNrYWJsZVJvd3M7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NsaWNrYWJsZVJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY29sdW1ucyh2YWx1ZSkge1xyXG4gICAgdGhpcy5fY29sdW1ucyA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgY29sdW1ucygpIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zIHx8IHRoaXMucmF3Q29sdW1uTmFtZXM7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbHVtbnM/OiAoc3RyaW5nIHwgSUNvbHVtbilbXTtcclxuXHJcbiAgQElucHV0KCkgY29sdW1uRmlsdGVyPzogYm9vbGVhbiB8IElDb2x1bW5GaWx0ZXI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbHVtbkZpbHRlclZhbHVlKHZhbHVlOiBJQ29sdW1uRmlsdGVyVmFsdWUpIHtcclxuICAgIGlmICh0aGlzLmNvbHVtRmlsdGVyVmFsdWVEaWZmZXIpIHtcclxuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuY29sdW1GaWx0ZXJWYWx1ZURpZmZlci5kaWZmKHZhbHVlKTtcclxuICAgICAgaWYgKGNoYW5nZXMpIHtcclxuICAgICAgICB0aGlzLl9jb2x1bW5GaWx0ZXJWYWx1ZSA9IHsgLi4udmFsdWUgfTtcclxuICAgICAgICB0aGlzLmNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoeyAuLi50aGlzLl9jb2x1bW5GaWx0ZXJWYWx1ZSB9KTtcclxuICAgICAgICB0aGlzLnRhYmxlRmlsdGVyZWQ7IC8vIGVtaXRzIHRhYmxlRmlsdGVyZWQgY2hhbmdlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGNvbHVtbkZpbHRlclZhbHVlKCk6IElDb2x1bW5GaWx0ZXJWYWx1ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uRmlsdGVyVmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbHVtbkZpbHRlclZhbHVlOiBJQ29sdW1uRmlsdGVyVmFsdWUgPSB7fTtcclxuXHJcbiAgQElucHV0KCkgY29sdW1uU29ydGVyPzogYm9vbGVhbiB8IElTb3J0ZXI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGZvb3Rlcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZm9vdGVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IGZvb3RlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9mb290ZXI7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Zvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBoZWFkZXIodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2hlYWRlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBoZWFkZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyO1xyXG4gIH1cclxuICBwcml2YXRlIF9oZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbXModmFsdWU6IElJdGVtW10pIHtcclxuICAgIGlmICh0aGlzLml0ZW1zRGlmZmVyKSB7XHJcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLml0ZW1zRGlmZmVyLmRpZmYodmFsdWUpO1xyXG4gICAgICBpZiAoY2hhbmdlcykge1xyXG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5zZXRJdGVtcyh2YWx1ZSkgYXMgQXJyYXk8VHlwZTxJSXRlbUludGVybmFsPj47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGl0ZW1zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xyXG4gIH1cclxuICBwcml2YXRlIF9pdGVtczogSUl0ZW1JbnRlcm5hbFtdID0gW10gYXMgQXJyYXk8VHlwZTxJSXRlbUludGVybmFsPj47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1zUGVyUGFnZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBpdGVtc1BlclBhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2U7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2l0ZW1zUGVyUGFnZTogbnVtYmVyID0gMTA7XHJcblxyXG4gIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZUxhYmVsOiBzdHJpbmcgPSAnSXRlbXMgcGVyIHBhZ2U6JztcclxuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjAsIDUwXTtcclxuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VTZWxlY3Q/OiBib29sZWFuIHwgSXRlbXNQZXJQYWdlU2VsZWN0O1xyXG4gIEBJbnB1dCgpIGxvYWRpbmc/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG5vSXRlbXNMYWJlbDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICdObyBpdGVtcyBmb3VuZCc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHBhZ2luYXRpb24odmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3BhZ2luYXRpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgcGFnaW5hdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0aW9uO1xyXG4gIH1cclxuICBwcml2YXRlIF9wYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNlbGVjdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3NlbGVjdGFibGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgc2VsZWN0YWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZWxlY3RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNvcnRlclZhbHVlKHZhbHVlOiBJU29ydGVyVmFsdWUpIHtcclxuICAgIHRoaXMuX3NvcnRlclZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLnNvcnRlclZhbHVlQ2hhbmdlLmVtaXQoeyAuLi52YWx1ZSB9KTtcclxuICB9XHJcbiAgZ2V0IHNvcnRlclZhbHVlKCk6IElTb3J0ZXJWYWx1ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydGVyVmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NvcnRlclZhbHVlOiBJU29ydGVyVmFsdWUgPSB7fTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgdGFibGVGaWx0ZXIoZmlsdGVyKSB7XHJcbiAgICB0aGlzLl90YWJsZUZpbHRlciA9IGZpbHRlcjtcclxuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnb2JqZWN0Jykge1xyXG4gICAgICB0aGlzLnRhYmxlRmlsdGVyTGFiZWwgPSB0eXBlb2YgZmlsdGVyLmxhYmVsID09PSAnc3RyaW5nJyA/IGZpbHRlci5sYWJlbCA6IHRoaXMudGFibGVGaWx0ZXJMYWJlbDtcclxuICAgICAgdGhpcy50YWJsZUZpbHRlclBsYWNlaG9sZGVyID0gdHlwZW9mIGZpbHRlci5wbGFjZWhvbGRlciA9PT0gJ3N0cmluZycgPyBmaWx0ZXIucGxhY2Vob2xkZXIgOiB0aGlzLnRhYmxlRmlsdGVyUGxhY2Vob2xkZXI7XHJcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9IHR5cGVvZiBmaWx0ZXIudmFsdWUgPT09ICdzdHJpbmcnID8gZmlsdGVyLnZhbHVlIDogdGhpcy50YWJsZUZpbHRlclZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgdGFibGVGaWx0ZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFibGVGaWx0ZXI7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3RhYmxlRmlsdGVyPzogYm9vbGVhbiB8IElUYWJsZUZpbHRlcjtcclxuXHJcbiAgQElucHV0KCkgdGFibGVGaWx0ZXJMYWJlbCA9ICdGaWx0ZXI6JztcclxuICBASW5wdXQoKSB0YWJsZUZpbHRlclBsYWNlaG9sZGVyID0gJ3R5cGUgc3RyaW5nLi4uJztcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgdGFibGVGaWx0ZXJWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fdGFibGVGaWx0ZXJWYWx1ZSAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5fdGFibGVGaWx0ZXJWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICB0aGlzLnRhYmxlRmlsdGVyVmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJlZDsgLy8gZW1pdHMgdGFibGVGaWx0ZXJlZCBjaGFuZ2VcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHRhYmxlRmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90YWJsZUZpbHRlclZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF90YWJsZUZpbHRlclZhbHVlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQElucHV0KCkgdGFibGVCb2R5UHJvcHM/OiBJVGFibGVHcm91cFByb3BzID0ge307XHJcbiAgQElucHV0KCkgdGFibGVGb290UHJvcHM/OiBJVGFibGVHcm91cFByb3BzID0ge307XHJcbiAgQElucHV0KCkgdGFibGVIZWFkUHJvcHM/OiBJVGFibGVHcm91cFByb3BzID0ge307XHJcbiAgQElucHV0KCkgdGFibGVQcm9wcz86IElUYWJsZSA9IHt9O1xyXG5cclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc29ydGVyVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGFjdGl2ZVBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGl0ZW1zUGVyUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJlZEl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSB0YWJsZUZpbHRlclZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlSWREaXJlY3RpdmUpIGNvbHVtblRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxUZW1wbGF0ZUlkRGlyZWN0aXZlPjtcclxuICB0ZW1wbGF0ZXM6IHsgW2tleTogc3RyaW5nXTogKFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSB9ID0geyB0YWJsZURldGFpbHM6IG51bGwsIHRhYmxlRGF0YTogbnVsbCB9O1xyXG4gIGNvbHVtbkZpbHRlclRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiAoVGVtcGxhdGVSZWY8YW55PiB8IG51bGwpIH0gPSB7fTtcclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb2x1bW5UZW1wbGF0ZXMuZm9yRWFjaCgoY2hpbGQ6IFRlbXBsYXRlSWREaXJlY3RpdmUpID0+IHtcclxuICAgICAgaWYgKGNoaWxkLmlkLnN0YXJ0c1dpdGgoJ2NvbHVtbkZpbHRlcl8nKSkge1xyXG4gICAgICAgIHRoaXMuY29sdW1uRmlsdGVyVGVtcGxhdGVzW2NoaWxkLmlkXSA9IGNoaWxkLnRlbXBsYXRlUmVmO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRlbXBsYXRlc1tjaGlsZC5pZF0gPSBjaGlsZC50ZW1wbGF0ZVJlZjtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJUZW1wbGF0ZXMgPSB7Li4udGhpcy5jb2x1bW5GaWx0ZXJUZW1wbGF0ZXN9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkQWxsKCkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5fc2VsZWN0ZWQgPT09IHRydWUpO1xyXG4gICAgcmV0dXJuIHNlbGVjdGVkLmxlbmd0aCA9PT0gMCA/IGZhbHNlIDogc2VsZWN0ZWQubGVuZ3RoID09PSB0aGlzLml0ZW1zLmxlbmd0aCA/IHRydWUgOiAnaW5kZXRlcm1pbmF0ZSc7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5fc2VsZWN0ZWRBbGw7XHJcbiAgfVxyXG4gIHNldCBzZWxlY3RlZEFsbCh2YWx1ZSkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5fc2VsZWN0ZWQgPT09IHRydWUpO1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRBbGwgPSBzZWxlY3RlZC5sZW5ndGggPT09IDAgPyBmYWxzZSA6IHNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy5pdGVtcy5sZW5ndGggPyB0cnVlIDogJ2luZGV0ZXJtaW5hdGUnO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQoc2VsZWN0ZWQpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZWxlY3RlZEFsbDogKGJvb2xlYW4gfCBzdHJpbmcpID0gZmFsc2U7XHJcblxyXG4gIGdldCB0YWJsZUZpbHRlclN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA/IHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA6ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbHVtbkZpbHRlclN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgPyB0aGlzLmNvbHVtbkZpbHRlclZhbHVlIDoge307XHJcbiAgfVxyXG5cclxuICBnZXQgbnVtYmVyT2ZQYWdlcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZSA/IE1hdGguY2VpbCh0aGlzLnNvcnRlZEl0ZW1zLmxlbmd0aCAvIHRoaXMuX2l0ZW1zUGVyUGFnZSkgOiAxO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbHNwYW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlID8gdGhpcy5yYXdDb2x1bW5OYW1lcy5sZW5ndGggKyAxIDogdGhpcy5yYXdDb2x1bW5OYW1lcy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnZXQgZmlyc3RJdGVtT25BY3RpdmVQYWdlSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlID8gKHRoaXMuX2FjdGl2ZVBhZ2UgLSAxKSAqIHRoaXMuX2l0ZW1zUGVyUGFnZSA6IDA7XHJcbiAgfVxyXG5cclxuICBnZXQgaXRlbXNPbkFjdGl2ZVBhZ2UoKTogSUl0ZW1JbnRlcm5hbFtdIHtcclxuICAgIHJldHVybiB0aGlzLnNvcnRlZEl0ZW1zLnNsaWNlKFxyXG4gICAgICB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4LFxyXG4gICAgICB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4ICsgdGhpcy5faXRlbXNQZXJQYWdlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRJdGVtcygpOiBJSXRlbUludGVybmFsW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVBhZ2UgPyB0aGlzLml0ZW1zT25BY3RpdmVQYWdlIDogdGhpcy5zb3J0ZWRJdGVtcyA/PyBbXTtcclxuICAgIC8vIHJldHVybiB0aGlzLml0ZW1zID8/IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdlbkNvbHMoKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5faXRlbXMgPyB0aGlzLl9pdGVtc1swXSA/PyB7fSA6IHt9KS5maWx0ZXIoKGVsKSA9PiBlbC5jaGFyQXQoMCkgIT09ICdfJyk7XHJcbiAgfVxyXG5cclxuICBnZXQgcmF3Q29sdW1uTmFtZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uc1xyXG4gICAgICA/IHRoaXMuX2NvbHVtbnMubWFwKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiAodHlwZW9mIGNvbHVtbiA9PT0gJ29iamVjdCcpID8gY29sdW1uLmtleSA6IGNvbHVtbjtcclxuICAgICAgfSlcclxuICAgICAgOiB0aGlzLmdlbkNvbHM7XHJcbiAgfVxyXG5cclxuICBnZXQgaXRlbXNEYXRhQ29sdW1ucygpIHtcclxuICAgIHJldHVybiB0aGlzLnJhd0NvbHVtbk5hbWVzLmZpbHRlcigobmFtZSkgPT4gdGhpcy5nZW5Db2xzLmluY2x1ZGVzKG5hbWUpKTtcclxuICB9XHJcblxyXG4gIGdldCBzb3J0ZWRJdGVtcygpOiBJSXRlbUludGVybmFsW10ge1xyXG4gICAgY29uc3QgY29sID0gdGhpcy5zb3J0ZXJWYWx1ZS5jb2x1bW47XHJcbiAgICBpZiAoXHJcbiAgICAgICFjb2wgfHxcclxuICAgICAgIXRoaXMuaXRlbXNEYXRhQ29sdW1ucy5pbmNsdWRlcyhjb2wpIHx8XHJcbiAgICAgICh0aGlzLmNvbHVtblNvcnRlciAmJlxyXG4gICAgICAgIHR5cGVvZiB0aGlzLmNvbHVtblNvcnRlciA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICB0aGlzLmNvbHVtblNvcnRlci5leHRlcm5hbClcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlcmVkO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgdmFsdWVzIGluIGNvbHVtbiBhcmUgdG8gYmUgc29ydGVkIGJ5IG51bWVyaWMgdmFsdWUgdGhleSBhbGwgaGF2ZSB0byBiZSB0eXBlIG51bWJlclxyXG4gICAgLy8gY29uc3QgZmxpcCA9IHNvcnRlclN0YXRlLmFzYyA/IDEgOiAtMVxyXG4gICAgY29uc3QgZmxpcCA9IHRoaXMuc29ydGVyVmFsdWUuc3RhdGUgPT09ICdhc2MnID8gMSA6IHRoaXMuc29ydGVyVmFsdWUuc3RhdGUgPT09ICdkZXNjJyA/IC0xIDogMDtcclxuICAgIGNvbnN0IHRhYmxlRmlsdGVyZWQgPSB0aGlzLnRhYmxlRmlsdGVyZWQ7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBjb25zdCBzb3J0ZWQgPSB0YWJsZUZpbHRlcmVkLnNsaWNlKCkuc29ydCgoaXRlbTogeyBbeDogc3RyaW5nXTogYW55OyB9LCBpdGVtMjogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtjb2xdO1xyXG4gICAgICBjb25zdCB2YWx1ZTIgPSBpdGVtMltjb2xdO1xyXG4gICAgICBjb25zdCBhID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBjb25zdCBiID0gdHlwZW9mIHZhbHVlMiA9PT0gJ251bWJlcicgPyB2YWx1ZTIgOiBTdHJpbmcodmFsdWUyKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICByZXR1cm4gYSA+IGIgPyAxICogZmxpcCA6IGIgPiBhID8gLTEgKiBmbGlwIDogMDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNvcnRlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbHVtbkZpbHRlcmVkOiAgSUl0ZW1JbnRlcm5hbFtdID0gW107XHJcblxyXG4gIGdldCBjb2x1bW5GaWx0ZXJlZCgpOiBJSXRlbUludGVybmFsW10ge1xyXG4gICAgbGV0IF9pdGVtcyA9IHRoaXMuX2l0ZW1zO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNvbHVtbkZpbHRlciAmJlxyXG4gICAgICB0eXBlb2YgdGhpcy5jb2x1bW5GaWx0ZXIgPT09ICdvYmplY3QnICYmXHJcbiAgICAgIHRoaXMuY29sdW1uRmlsdGVyLmV4dGVybmFsXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5fY29sdW1uRmlsdGVyZWQgPSBfaXRlbXM7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgcmV0dXJuIF9pdGVtcztcclxuICAgIH1cclxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuY29sdW1uRmlsdGVyU3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG5cclxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgICBfaXRlbXMgPSBfaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB2YWx1ZShpdGVtW2tleV0pKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNvbHVtbkZpbHRlciA9IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgaWYgKGNvbHVtbkZpbHRlciAmJiB0aGlzLml0ZW1zRGF0YUNvbHVtbnMuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBfaXRlbXMgPSBfaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBTdHJpbmcoaXRlbVtrZXldKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNvbHVtbkZpbHRlcikpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2NvbHVtbkZpbHRlcmVkID0gX2l0ZW1zO1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgcmV0dXJuIF9pdGVtcztcclxuICB9XHJcblxyXG4gIGdldCB0YWJsZUZpbHRlcmVkKCk6IElJdGVtSW50ZXJuYWxbXSB7XHJcbiAgICBsZXQgaXRlbXMgPSB0aGlzLmNvbHVtbkZpbHRlcmVkO1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy50YWJsZUZpbHRlclN0YXRlIHx8XHJcbiAgICAgICh0aGlzLnRhYmxlRmlsdGVyICYmIHR5cGVvZiB0aGlzLnRhYmxlRmlsdGVyID09PSAnb2JqZWN0JyAmJiB0aGlzLnRhYmxlRmlsdGVyLmV4dGVybmFsKVxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWREaWZmZXIpIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyLmRpZmYoaXRlbXMpO1xyXG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXNDaGFuZ2UuZW1pdChpdGVtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMudGFibGVGaWx0ZXJTdGF0ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgdmFsdWVDb250YWluRmlsdGVyID0gKHZhbDogYW55KSA9PiBTdHJpbmcodmFsKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlcik7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcigoaXRlbTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuaXRlbXNEYXRhQ29sdW1ucy5maW5kKChrZXkpID0+IHZhbHVlQ29udGFpbkZpbHRlcihpdGVtW2tleV0pKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZERpZmZlcikge1xyXG4gICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5pdGVtc0ZpbHRlcmVkRGlmZmVyLmRpZmYoaXRlbXMpO1xyXG4gICAgICBpZiAoY2hhbmdlcykge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzRmlsdGVyZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZUZpbHRlclN0YXRlIHx8IHRoaXMuc29ydGVyVmFsdWU/LmNvbHVtbiB8fCBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1uRmlsdGVyU3RhdGUpLmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRJdGVtcyhpdGVtczogSUl0ZW1bXSkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XHJcbiAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IElJdGVtLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgX2lkOiBpbmRleCB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiA8SUl0ZW1JbnRlcm5hbD5bXTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50OiB7IGNvbHVtbktleTogc3RyaW5nOyBpbmRleDogbnVtYmVyOyB9KSB7XHJcbiAgICB0aGlzLmhhbmRsZVNvcnRlckNoYW5nZSgkZXZlbnQuY29sdW1uS2V5LCAkZXZlbnQuaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgaXNTb3J0YWJsZShpOiBudW1iZXIpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IGlzRGF0YUNvbHVtbiA9IHRoaXMuaXRlbXNEYXRhQ29sdW1ucy5pbmNsdWRlcyh0aGlzLnJhd0NvbHVtbk5hbWVzW2ldKTtcclxuICAgIGxldCBjb2x1bW47XHJcbiAgICBpZiAodGhpcy5jb2x1bW5zKSBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbaV07XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmNvbHVtblNvcnRlciAmJlxyXG4gICAgICAoIXRoaXMuY29sdW1ucyB8fFxyXG4gICAgICAgIHR5cGVvZiBjb2x1bW4gIT09ICdvYmplY3QnIHx8XHJcbiAgICAgICAgKHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmXHJcbiAgICAgICAgICAodHlwZW9mIGNvbHVtbi5zb3J0ZXIgPT09ICd1bmRlZmluZWQnIHx8IGNvbHVtbi5zb3J0ZXIpKSkgJiZcclxuICAgICAgaXNEYXRhQ29sdW1uXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU29ydGVyQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNTb3J0YWJsZShpbmRleCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy9pZiBjb2x1bW4gY2hhbmdlZCBvciBzb3J0IHdhcyBkZXNjZW5kaW5nIGNoYW5nZSBhc2MgdG8gdHJ1ZVxyXG4gICAgY29uc3Qgc3RhdGUgPSB7IC4uLnRoaXMuc29ydGVyVmFsdWUgfTtcclxuXHJcbiAgICBpZiAoc3RhdGUuY29sdW1uID09PSBjb2x1bW4pIHtcclxuICAgICAgaWYgKHN0YXRlLnN0YXRlID09PSAwKSB7XHJcbiAgICAgICAgc3RhdGUuc3RhdGUgPSAnYXNjJztcclxuICAgICAgfSBlbHNlIGlmIChzdGF0ZS5zdGF0ZSA9PT0gJ2FzYycpIHtcclxuICAgICAgICBzdGF0ZS5zdGF0ZSA9ICdkZXNjJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY29sdW1uU29ydGVyID09PSAnb2JqZWN0JyAmJiAhdGhpcy5jb2x1bW5Tb3J0ZXIucmVzZXRhYmxlKSB7XHJcbiAgICAgICAgICBzdGF0ZS5zdGF0ZSA9ICdhc2MnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzdGF0ZS5zdGF0ZSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdGF0ZS5jb2x1bW4gPSBjb2x1bW47XHJcbiAgICAgIHN0YXRlLnN0YXRlID0gJ2FzYyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNvcnRlclZhbHVlID0geyAuLi5zdGF0ZSB9O1xyXG4gIH1cclxuXHJcbiAgc2V0QWN0aXZlUGFnZSgkZXZlbnQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5hY3RpdmVQYWdlID0gJGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ29sdW1uRmlsdGVyQ2hhbmdlKCRldmVudDogYW55KSB7XHJcbiAgICBjb25zdCB7IGNvbHVtbiwgdmFsdWUsIHR5cGUgfSA9ICRldmVudDtcclxuICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcclxuICAgIHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgPSB7IC4uLnRoaXMuY29sdW1uRmlsdGVyVmFsdWUsIFtgJHtjb2x1bW59YF06IHZhbHVlIH07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVUYWJsZUZpbHRlckNoYW5nZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgeyB2YWx1ZSwgdHlwZSB9ID0gJGV2ZW50O1xyXG4gICAgY29uc3QgaXNMYXp5ID0gdHlwZW9mIHRoaXMudGFibGVGaWx0ZXIgPT09ICdvYmplY3QnICYmIHRoaXMudGFibGVGaWx0ZXI/LmxhenkgPT09IHRydWU7XHJcbiAgICBpZiAoKChpc0xhenkgJiYgdHlwZSA9PT0gJ2lucHV0JykgfHwgKCFpc0xhenkgJiYgdHlwZSA9PT0gJ2NoYW5nZScpKSAmJiB2YWx1ZS5sZW5ndGggIT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xyXG4gICAgdGhpcy50YWJsZUZpbHRlclZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBjbGVhbigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuY29sdW1uRmlsdGVyVmFsdWUgPSB7fTtcclxuICAgIHRoaXMudGFibGVGaWx0ZXJWYWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5zb3J0ZXJWYWx1ZSA9IHt9O1xyXG4gICAgdGhpcy50YWJsZUZpbHRlcmVkOyAvL2VtaXRzIHRhYmxlRmlsdGVyZWQgY2hhbmdlXHJcbiAgfVxyXG5cclxuICBoYW5kbGVJdGVtc1BlclBhZ2VDaGFuZ2UodmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9pdGVtc1BlclBhZ2UpIHtcclxuICAgICAgdGhpcy5zZXRBY3RpdmVQYWdlKDEpO1xyXG4gICAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5pdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSb3dDaGVja2VkKCRldmVudDogRXZlbnQsIGl0ZW06IElJdGVtSW50ZXJuYWwpIHtcclxuICAgIGl0ZW0uX3NlbGVjdGVkID0gKCRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uX3NlbGVjdGVkID09PSB0cnVlKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNlbGVjdEFsbENoYW5nZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5faXRlbXMgPSB0aGlzLml0ZW1zLm1hcCgoaXRlbTogSUl0ZW1JbnRlcm5hbCkgPT4ge1xyXG4gICAgICByZXR1cm4geyAuLi5pdGVtLCBfc2VsZWN0ZWQ6ICRldmVudCB9O1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkQWxsID0gJGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgdGFibGVEYXRhQ2VsbFByb3BzKGl0ZW06IElJdGVtLCBjb2xOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHByb3BzID0gaXRlbVsnX2NlbGxQcm9wcyddICYmIHtcclxuICAgICAgLi4uKGl0ZW1bJ19jZWxsUHJvcHMnXVsnX2FsbCddICYmIHsgLi4uaXRlbVsnX2NlbGxQcm9wcyddWydfYWxsJ10gfSksXHJcbiAgICAgIC4uLihpdGVtWydfY2VsbFByb3BzJ11bY29sTmFtZV0gJiYgeyAuLi5pdGVtWydfY2VsbFByb3BzJ11bY29sTmFtZV0gfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gcHJvcHM7XHJcbiAgfVxyXG5cclxuICB0YWJsZURhdGFDZWxsQ2xhc3NlcyhpdGVtOiBJSXRlbSwgY29sTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2x1bW46IElDb2x1bW4pID0+IGNvbHVtblsna2V5J10gPT09IGNvbE5hbWUpO1xyXG4gICAgcmV0dXJuIGNvbHVtblswXT8uX2NsYXNzZXM7XHJcbiAgfVxyXG5cclxuICBnZXRDb2x1bW5OYW1lKCRldmVudDogTW91c2VFdmVudCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSAkZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XHJcbiAgICBjb25zdCBjbG9zZXN0ID0gdGFyZ2V0LmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNsb3Nlc3QgPyBBcnJheS5mcm9tKGNsb3Nlc3QuY2hpbGRyZW4pIDogW107XHJcbiAgICBjb25zdCBjbGlja2VkQ2VsbCA9IGNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IGNoaWxkLmNvbnRhaW5zKHRhcmdldCkpWzBdO1xyXG4gICAgcmV0dXJuIHRoaXMucmF3Q29sdW1uTmFtZXNbY2hpbGRyZW4uaW5kZXhPZihjbGlja2VkQ2VsbCkgLSAodGhpcy5fc2VsZWN0YWJsZSA/IDEgOiAwKV07XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSb3dDbGljayhwYXJhbTogeyAkZXZlbnQ6IE1vdXNlRXZlbnQ7IGl0ZW06IElJdGVtSW50ZXJuYWw7IGk6IG51bWJlciB9KSB7XHJcbiAgICBjb25zdCB7ICRldmVudCwgaXRlbSwgaSB9ID0geyAuLi5wYXJhbSB9O1xyXG4gICAgY29uc3QgY29sdW1uTmFtZSA9IHRoaXMuZ2V0Q29sdW1uTmFtZShwYXJhbS4kZXZlbnQpO1xyXG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHsgaXRlbTogaXRlbSwgaW5kZXg6IGkgKyB0aGlzLmZpcnN0SXRlbU9uQWN0aXZlUGFnZUluZGV4LCBjb2x1bW5OYW1lLCBldmVudDogJGV2ZW50IH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbkZpbHRlclZhbHVlJ10pIHtcclxuICAgICAgY29uc3QgY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UgPSBjaGFuZ2VzWydjb2x1bW5GaWx0ZXJWYWx1ZSddO1xyXG4gICAgICAvLyBpZiAoY29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjb2x1bW5GaWx0ZXJWYWx1ZUNoYW5nZS5jdXJyZW50VmFsdWU7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKGN1cnJlbnRWYWx1ZSA/PyB7fSkubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEFjdGl2ZVBhZ2UoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1sndGFibGVGaWx0ZXJWYWx1ZSddKSB7XHJcbiAgICAgIGNvbnN0IHRhYmxlRmlsdGVyVmFsdWVDaGFuZ2UgPSBjaGFuZ2VzWyd0YWJsZUZpbHRlclZhbHVlJ107XHJcbiAgICAgIGlmICh0YWJsZUZpbHRlclZhbHVlQ2hhbmdlLmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGFibGVGaWx0ZXJWYWx1ZUNoYW5nZS5jdXJyZW50VmFsdWU7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuc2V0QWN0aXZlUGFnZSgxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cIml0ZW1zUGVyUGFnZVNlbGVjdCB8fCB0YWJsZUZpbHRlciB8fCBjbGVhbmVyXCIgY2xhc3M9XCJyb3cgbXktMiBteC0wXCI+XHJcbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRhYmxlRmlsdGVyIHx8IGNsZWFuZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBwLTBcIj5cclxuICAgICAgPGMtc21hcnQtdGFibGUtZmlsdGVyXHJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZVRhYmxlRmlsdGVyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICpuZ0lmPVwidGFibGVGaWx0ZXJcIlxyXG4gICAgICAgIFtmaWx0ZXJMYWJlbF09XCJ0YWJsZUZpbHRlckxhYmVsXCJcclxuICAgICAgICBbZmlsdGVyUGxhY2Vob2xkZXJdPVwidGFibGVGaWx0ZXJQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgW3ZhbHVlXT1cInRhYmxlRmlsdGVyU3RhdGVcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvYy1zbWFydC10YWJsZS1maWx0ZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBwLTBcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIChjbGljayk9XCJjbGVhbigkZXZlbnQpXCJcclxuICAgICAgICAqbmdJZj1cImNsZWFuZXJcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCIhaXNGaWx0ZXJlZFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydtcy0xJzogdGFibGVGaWx0ZXJ9XCJcclxuICAgICAgICBbdGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgICAgY0J1dHRvblxyXG4gICAgICAgIGNvbG9yPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlckljb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICA8dGFibGUgW2FsaWduXT1cInRhYmxlUHJvcHM/LmFsaWduXCJcclxuICAgICAgICAgW2JvcmRlckNvbG9yXT1cInRhYmxlUHJvcHM/LmJvcmRlckNvbG9yXCJcclxuICAgICAgICAgW2JvcmRlcmVkXT1cInRhYmxlUHJvcHM/LmJvcmRlcmVkXCJcclxuICAgICAgICAgW2JvcmRlcmxlc3NdPVwidGFibGVQcm9wcz8uYm9yZGVybGVzc1wiXHJcbiAgICAgICAgIFtjYXB0aW9uXT1cInRhYmxlUHJvcHM/LmNhcHRpb25cIlxyXG4gICAgICAgICBbY29sb3JdPVwidGFibGVQcm9wcz8uY29sb3JcIlxyXG4gICAgICAgICBbaG92ZXJdPVwidGFibGVQcm9wcz8uaG92ZXJcIlxyXG4gICAgICAgICBbcmVzcG9uc2l2ZV09XCJ0YWJsZVByb3BzPy5yZXNwb25zaXZlXCJcclxuICAgICAgICAgW3NtYWxsXT1cInRhYmxlUHJvcHM/LnNtYWxsXCJcclxuICAgICAgICAgW3N0cmlwZWRdPVwidGFibGVQcm9wcz8uc3RyaXBlZFwiXHJcbiAgICAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXHJcbiAgICAgICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZVByb3BzPy5jb2xvclwiXHJcbiAgICAgICAgIGNUYWJsZVxyXG4gID5cclxuICAgIDxjLXNtYXJ0LXRhYmxlLWhlYWRcclxuICAgICAgKGNvbHVtbkZpbHRlclN0YXRlQ2hhbmdlKT1cImhhbmRsZUNvbHVtbkZpbHRlckNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKHNlbGVjdEFsbENoYW5nZSk9XCJoYW5kbGVTZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChzb3J0ZXJTdGF0ZUNoYW5nZSk9XCJoYW5kbGVTb3J0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAqbmdJZj1cImhlYWRlclwiXHJcbiAgICAgIFtjb2x1bW5GaWx0ZXJTdGF0ZV09XCJjb2x1bW5GaWx0ZXJTdGF0ZVwiXHJcbiAgICAgIFtjb2x1bW5GaWx0ZXJdPVwiY29sdW1uRmlsdGVyXCJcclxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgIFtzZWxlY3RBbGxdPVwic2VsZWN0ZWRBbGxcIlxyXG4gICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcclxuICAgICAgW3NvcnRlclZhbHVlXT1cInNvcnRlclZhbHVlXCJcclxuICAgICAgW2NIdG1sQXR0cl09XCJ0YWJsZUhlYWRQcm9wcz8uYXR0cmlidXRlcyA/PyB7fVwiXHJcbiAgICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZUhlYWRQcm9wcz8uY29sb3JcIlxyXG4gICAgICBbY0FsaWduXT1cInRhYmxlSGVhZFByb3BzPy5hbGlnblwiXHJcbiAgICAgIFtjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNdPVwiY29sdW1uRmlsdGVyVGVtcGxhdGVzXCJcclxuICAgID48L2Mtc21hcnQtdGFibGUtaGVhZD5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGJvZHlEZWZhdWx0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8Yy1zbWFydC10YWJsZS1oZWFkXHJcbiAgICAgIChzZWxlY3RBbGxDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAoc29ydGVyU3RhdGVDaGFuZ2UpPVwiaGFuZGxlU29ydENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKm5nSWY9XCJmb290ZXJcIlxyXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgW3NlbGVjdEFsbF09XCJzZWxlY3RlZEFsbFwiXHJcbiAgICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxyXG4gICAgICBbc29ydGVyVmFsdWVdPVwic29ydGVyVmFsdWVcIlxyXG4gICAgICBbY0h0bWxBdHRyXT1cInRhYmxlRm9vdFByb3BzPy5hdHRyaWJ1dGVzID8/IHt9XCJcclxuICAgICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlRm9vdFByb3BzPy5jb2xvclwiXHJcbiAgICAgIFtjQWxpZ25dPVwidGFibGVGb290UHJvcHM/LmFsaWduXCJcclxuICAgICAgY29tcG9uZW50PVwidGZvb3RcIlxyXG4gICAgICBbY29sdW1uRmlsdGVyVGVtcGxhdGVzXT1cImNvbHVtbkZpbHRlclRlbXBsYXRlc1wiXHJcbiAgICA+PC9jLXNtYXJ0LXRhYmxlLWhlYWQ+XHJcblxyXG4gIDwvdGFibGU+XHJcbiAgPGMtZWxlbWVudC1jb3ZlclxyXG4gICAgKm5nSWY9XCJsb2FkaW5nXCJcclxuICAgIFtib3VuZGFyaWVzXT1cIltcclxuICAgICAgeyBzaWRlczogWyd0b3AnXSwgcXVlcnk6ICd0ZCcgfSxcclxuICAgICAgeyBzaWRlczogWydib3R0b20nXSwgcXVlcnk6ICd0Ym9keScgfVxyXG4gICAgXVwiXHJcbiAgPjwvYy1lbGVtZW50LWNvdmVyPlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInBhZ2luYXRpb24gfHwgaXRlbXNQZXJQYWdlU2VsZWN0XCI+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICA8Yy1zbWFydC1wYWdpbmF0aW9uXHJcbiAgICAgICAgKGFjdGl2ZVBhZ2VDaGFuZ2UpPVwic2V0QWN0aXZlUGFnZSgkZXZlbnQpXCJcclxuICAgICAgICAqbmdJZj1cInBhZ2luYXRpb24gJiYgbnVtYmVyT2ZQYWdlcyA+IDFcIlxyXG4gICAgICAgIFthY3RpdmVQYWdlXT1cImFjdGl2ZVBhZ2VcIlxyXG4gICAgICAgIFtwYWdlc109XCJudW1iZXJPZlBhZ2VzXCI+XHJcbiAgICAgIDwvYy1zbWFydC1wYWdpbmF0aW9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gbXMtYXV0b1wiPlxyXG4gICAgICA8Yy1zbWFydC10YWJsZS1pdGVtcy1wZXItcGFnZS1zZWxlY3RvclxyXG4gICAgICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwiaGFuZGxlSXRlbXNQZXJQYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICpuZ0lmPVwiaXRlbXNQZXJQYWdlU2VsZWN0XCJcclxuICAgICAgICBbaXRlbXNQZXJQYWdlTGFiZWxdPVwiaXRlbXNQZXJQYWdlTGFiZWxcIlxyXG4gICAgICAgIFtpdGVtc1BlclBhZ2VPcHRpb25zXT1cIml0ZW1zUGVyUGFnZU9wdGlvbnNcIlxyXG4gICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCJcclxuICAgICAgPlxyXG4gICAgICA8L2Mtc21hcnQtdGFibGUtaXRlbXMtcGVyLXBhZ2Utc2VsZWN0b3I+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdGJvZHlEZWZhdWx0VGVtcGxhdGU+XHJcbiAgPHRib2R5IFtjSHRtbEF0dHJdPVwidGFibGVCb2R5UHJvcHM/LmF0dHJpYnV0ZXMgPz8ge31cIlxyXG4gICAgICAgICBbY1RhYmxlQ29sb3JdPVwidGFibGVCb2R5UHJvcHM/LmNvbG9yXCJcclxuICAgICAgICAgW2NBbGlnbl09XCJ0YWJsZUJvZHlQcm9wcz8uYWxpZ25cIlxyXG4gID5cclxuICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWl0ZW0gW25nRm9yT2ZdPVwiY3VycmVudEl0ZW1zXCIgbGV0LWNudD1cImNvdW50XCIgbGV0LWk9XCJpbmRleFwiIGxldC1pc0V2ZW49XCJldmVuXCIgbGV0LWlzT2RkPVwib2RkXCI+XHJcbiAgICA8dHIgW3RhYmluZGV4XT1cImNsaWNrYWJsZVJvd3MgPyAwIDogLTFcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntjdXJzb3I6IGNsaWNrYWJsZVJvd3MgPyAncG9pbnRlcicgOiAnYXV0byd9XCJcclxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlUm93Q2xpY2soeyRldmVudCwgaXRlbSwgaX0pXCJcclxuICAgICAgICBbY1RhYmxlQWN0aXZlXT1cIml0ZW0uX3Byb3BzPy5hY3RpdmVcIlxyXG4gICAgICAgIFtjVGFibGVDb2xvcl09XCJpdGVtLl9wcm9wcz8uY29sb3JcIlxyXG4gICAgICAgIFtjQWxpZ25dPVwiaXRlbS5fcHJvcHM/LmFsaWduXCJcclxuICAgID5cclxuICAgICAgPHRkICpuZ0lmPVwic2VsZWN0YWJsZVwiXHJcbiAgICAgICAgICBbY1RhYmxlQWN0aXZlXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hY3RpdmVcIlxyXG4gICAgICAgICAgW2NUYWJsZUNvbG9yXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5jb2xvclwiXHJcbiAgICAgICAgICBbY0FsaWduXT1cIml0ZW0/LlsnX2NlbGxQcm9wcyddPy5fYWxsPy5hbGlnblwiXHJcbiAgICAgID5cclxuICAgICAgICAgIDxpbnB1dCAoY2hhbmdlKT1cImhhbmRsZVJvd0NoZWNrZWQoJGV2ZW50LCBpdGVtKVwiIFtjaGVja2VkXT1cIml0ZW0uX3NlbGVjdGVkID8/IGZhbHNlXCIgY0Zvcm1DaGVja0lucHV0PlxyXG4gICAgICA8L3RkPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWNvbHVtbk5hbWUgW25nRm9yT2ZdPVwicmF3Q29sdW1uTmFtZXNcIiBsZXQtaT1cImluZGV4XCIgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXNbJ3RhYmxlRGF0YSddIHx8IGNvbHVtbkRlZmF1bHRUZW1wbGF0ZTsgY29udGV4dDoge2l0ZW0sIGNvbHVtbk5hbWUsIHRkQ29udGVudDogaXRlbVtjb2x1bW5OYW1lXSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3RyPlxyXG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRlbXBsYXRlc1sndGFibGVEZXRhaWxzJ11cIj5cclxuICAgICAgPCEtLSAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dEZXRhaWxzRGVmYXVsdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+LS0+XHJcbiAgICAgIDx0cj48dGQgW2NvbFNwYW5dPVwiY29sc3BhblwiIGNsYXNzPVwicC0wXCIgdGFiaW5kZXg9XCItMVwiIFtuZ1N0eWxlXT1cIntib3JkZXJCb3R0b21XaWR0aDogMH1cIj48L3RkPjwvdHI+XHJcbiAgICAgIDx0ciBjbGFzcz1cInAtMFwiPlxyXG4gICAgICAgIDx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJwLTBcIiBbbmdTdHlsZV09XCJ7Ym9yZGVyOiAwfVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1sndGFibGVEZXRhaWxzJ107IGNvbnRleHQ6IHtpdGVtLCBpbmRleDogaX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub0l0ZW1zRGVmYXVsdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgPC90Ym9keT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29sdW1uRGVmYXVsdFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC1jb2x1bW5OYW1lPVwiY29sdW1uTmFtZVwiIGxldC10ZENvbnRlbnQ9XCJ0ZENvbnRlbnRcIj5cclxuICA8dGRcclxuICAgIFtjVGFibGVBY3RpdmVdPVwidGFibGVEYXRhQ2VsbFByb3BzKGl0ZW0sIGNvbHVtbk5hbWUpPy5bJ2FjdGl2ZSddXCJcclxuICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZURhdGFDZWxsUHJvcHMoaXRlbSwgY29sdW1uTmFtZSk/LmNvbG9yXCJcclxuICAgIFtjQWxpZ25dPVwidGFibGVEYXRhQ2VsbFByb3BzKGl0ZW0sIGNvbHVtbk5hbWUpPy5hbGlnblwiXHJcbiAgICBbbmdDbGFzc109XCJ0YWJsZURhdGFDZWxsQ2xhc3NlcyhpdGVtLCBjb2x1bW5OYW1lKVwiXHJcbiAgPlxyXG4gICAge3t0ZENvbnRlbnR9fVxyXG4gIDwvdGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tPG5nLXRlbXBsYXRlICNyb3dEZXRhaWxzRGVmYXVsdFRlbXBsYXRlIGxldC1pdGVtIGxldC1pbmRleD4tLT5cclxuPCEtLSAgPHRyPjx0ZCBbY29sU3Bhbl09XCJjb2xzcGFuXCIgY2xhc3M9XCJwLTBcIiB0YWJpbmRleD1cIi0xXCIgW25nU3R5bGVdPVwie2JvcmRlckJvdHRvbVdpZHRoOiAwfVwiPjwvdGQ+PC90cj4tLT5cclxuPCEtLSAgPHRyIGNsYXNzPVwicC0wXCI+LS0+XHJcbjwhLS0gICAgPHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cInAtMFwiIFtuZ1N0eWxlXT1cIntib3JkZXI6IDB9XCI+LS0+XHJcbjwhLS0gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzPy50YWJsZURldGFpbHNcIj48L25nLWNvbnRhaW5lcj4tLT5cclxuPCEtLSAgICA8L3RkPi0tPlxyXG48IS0tICA8L3RyPi0tPlxyXG48IS0tPC9uZy10ZW1wbGF0ZT4tLT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbm9JdGVtc0RlZmF1bHRUZW1wbGF0ZT5cclxuICA8dHIgKm5nSWY9XCIhY3VycmVudEl0ZW1zLmxlbmd0aFwiPlxyXG4gICAgPHRkIFtjb2xTcGFuXT1cImNvbHNwYW5cIiBjbGFzcz1cImp1c3RpZnktY29udGVudC1jZW50ZXJcIj57e25vSXRlbXNMYWJlbH19PC90ZD5cclxuICA8L3RyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLXRvZG86IGZpbHRlckljb25DdXN0b21UZW1wbGF0ZS0tPlxyXG48bmctdGVtcGxhdGUgI2ZpbHRlckljb25UZW1wbGF0ZT5cclxuICA8c3ZnIGNsYXNzPVwiaWNvbiBpY29uLWN1c3RvbS1zaXplXCIgcm9sZT1cImltZ1wiIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiIHdpZHRoPVwiMThcIlxyXG4gICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgPHBvbHlnb24gY2xhc3M9XCJjaS1wcmltYXJ5XCJcclxuICAgICAgICAgICAgIGZpbGw9XCJ2YXIoLS1jaS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpXCJcclxuICAgICAgICAgICAgIHBvaW50cz1cIjQwIDE2IDQwIDUzLjgyOCAxMDkuMDI0IDEzNiAxNTAuODE1IDEzNiA3Ni44OTYgNDggNDU5LjUxIDQ4IDMwNCAyNDIuMzg4IDMwNCA0MDEuMzczIDI0MS4zNzMgNDY0IDI0MCA0NjQgMjQwIDM2OCAyMDggMzY4IDIwOCA0OTYgMjU0LjYyNyA0OTYgMzM2IDQxNC42MjcgMzM2IDI1My42MTIgNDk2IDUzLjYxMiA0OTYgMTYgNDAgMTZcIj48L3BvbHlnb24+XHJcbiAgICA8cG9seWdvbiBjbGFzcz1cImNpLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgZmlsbD1cInZhcigtLWNpLXByaW1hcnktY29sb3IsIGN1cnJlbnRDb2xvcilcIlxyXG4gICAgICAgICAgICAgcG9pbnRzPVwiMTY2LjQwMyAyNDguMjI1IDIyNi44NjQgMTg3Ljc2MyAyMDQuMjM3IDE2NS4xMzUgMTQzLjc3NSAyMjUuNTk3IDgzLjMxMyAxNjUuMTM1IDYwLjY4NyAxODcuNzYzIDEyMS4xNDggMjQ4LjIyNSA2MC42ODcgMzA4LjY4NyA4My4zMTMgMzMxLjMxNCAxNDMuNzc1IDI3MC44NTIgMjA0LjIzNyAzMzEuMzE0IDIyNi44NjQgMzA4LjY4NyAxNjYuNDAzIDI0OC4yMjVcIj48L3BvbHlnb24+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -31,9 +31,9 @@ export class SmartTableFilterComponent {
31
31
  this.value = $event.target.value;
32
32
  }
33
33
  }
34
- SmartTableFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SmartTableFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
35
- SmartTableFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SmartTableFilterComponent, selector: "c-smart-table-filter", inputs: { filterLabel: "filterLabel", filterPlaceholder: "filterPlaceholder", value: "value" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<label cLabel=\"col\" class=\"col-sm-auto\">{{filterLabel}}</label>\r\n<div class=\"col-sm-auto\">\r\n <input (change)=\"handleTableFilterChange($event)\"\r\n (input)=\"handleTableFilterChange($event)\"\r\n [placeholder]=\"filterPlaceholder\"\r\n [value]=\"value\"\r\n cFormControl />\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "directive", type: i2.FormLabelDirective, selector: "[cLabel]", inputs: ["cLabel", "sizing"] }] });
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SmartTableFilterComponent, decorators: [{
34
+ SmartTableFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SmartTableFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
35
+ SmartTableFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: SmartTableFilterComponent, selector: "c-smart-table-filter", inputs: { filterLabel: "filterLabel", filterPlaceholder: "filterPlaceholder", value: "value" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<label cLabel=\"col\" class=\"col-sm-auto\">{{filterLabel}}</label>\r\n<div class=\"col-sm-auto\">\r\n <input (change)=\"handleTableFilterChange($event)\"\r\n (input)=\"handleTableFilterChange($event)\"\r\n [placeholder]=\"filterPlaceholder\"\r\n [value]=\"value\"\r\n cFormControl />\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "directive", type: i2.FormLabelDirective, selector: "[cLabel]", inputs: ["cLabel", "sizing"] }] });
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SmartTableFilterComponent, decorators: [{
37
37
  type: Component,
38
38
  args: [{ selector: 'c-smart-table-filter', template: "<label cLabel=\"col\" class=\"col-sm-auto\">{{filterLabel}}</label>\r\n<div class=\"col-sm-auto\">\r\n <input (change)=\"handleTableFilterChange($event)\"\r\n (input)=\"handleTableFilterChange($event)\"\r\n [placeholder]=\"filterPlaceholder\"\r\n [value]=\"value\"\r\n cFormControl />\r\n</div>\r\n" }]
39
39
  }], ctorParameters: function () { return []; }, propDecorators: { filterLabel: [{
@@ -48,4 +48,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
48
48
  type: HostBinding,
49
49
  args: ['class']
50
50
  }] } });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvc21hcnQtdGFibGUvc21hcnQtdGFibGUtZmlsdGVyL3NtYXJ0LXRhYmxlLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLWZpbHRlci9zbWFydC10YWJsZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFPcEYsTUFBTSxPQUFPLHlCQUF5QjtJQUVwQztRQUVTLGdCQUFXLEdBQVcsU0FBUyxDQUFDO1FBQ2hDLHNCQUFpQixHQUFXLFFBQVEsQ0FBQztRQWNwQyxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRTNELFdBQU0sR0FBRyxFQUFFLENBQUM7UUFDWixjQUFTLEdBQUcsRUFBRSxDQUFDO0lBcEJQLENBQUM7SUFLakIsSUFDSSxLQUFLLENBQUMsS0FBYTtRQUNyQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUztZQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBT0QsSUFDSSxXQUFXO1FBQ2IsT0FBTztZQUNMLEdBQUcsRUFBRSxJQUFJO1lBQ1QsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELHVCQUF1QixDQUFDLE1BQWE7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUksTUFBTSxDQUFDLE1BQTJCLENBQUMsS0FBSyxDQUFDO0lBQ3pELENBQUM7O3VIQW5DVSx5QkFBeUI7MkdBQXpCLHlCQUF5Qiw0UENQdEMsNlVBUUE7NEZERGEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHNCQUFzQjswRUFRdkIsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0YsS0FBSztzQkFEUixLQUFLO2dCQVlJLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUgsV0FBVztzQkFEZCxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYy1zbWFydC10YWJsZS1maWx0ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC10YWJsZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LXRhYmxlLWZpbHRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydFRhYmxlRmlsdGVyQ29tcG9uZW50IHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgQElucHV0KCkgZmlsdGVyTGFiZWw6IHN0cmluZyA9ICdGaWx0ZXI6JztcclxuICBASW5wdXQoKSBmaWx0ZXJQbGFjZWhvbGRlcjogc3RyaW5nID0gJ0ZpbHRlcic7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl92YWx1ZSAhPSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZXZlbnRUeXBlKVxyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoeyB2YWx1ZSwgdHlwZTogdGhpcy5ldmVudFR5cGUgfSk7XHJcbiAgfVxyXG4gIGdldCB2YWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcclxuICBwcml2YXRlIGV2ZW50VHlwZSA9ICcnO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcclxuICBnZXQgaG9zdENsYXNzZXMoKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJvdzogdHJ1ZSxcclxuICAgICAgJ21iLTInOiB0cnVlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlVGFibGVGaWx0ZXJDaGFuZ2UoJGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5ldmVudFR5cGUgPSAkZXZlbnQudHlwZTtcclxuICAgIHRoaXMudmFsdWUgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcclxuICB9XHJcbn1cclxuIiwiPGxhYmVsIGNMYWJlbD1cImNvbFwiIGNsYXNzPVwiY29sLXNtLWF1dG9cIj57e2ZpbHRlckxhYmVsfX08L2xhYmVsPlxyXG48ZGl2IGNsYXNzPVwiY29sLXNtLWF1dG9cIj5cclxuICA8aW5wdXQgKGNoYW5nZSk9XCJoYW5kbGVUYWJsZUZpbHRlckNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgKGlucHV0KT1cImhhbmRsZVRhYmxlRmlsdGVyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgICBjRm9ybUNvbnRyb2wgLz5cclxuPC9kaXY+XHJcbiJdfQ==
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvc21hcnQtdGFibGUvc21hcnQtdGFibGUtZmlsdGVyL3NtYXJ0LXRhYmxlLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLWZpbHRlci9zbWFydC10YWJsZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFPcEYsTUFBTSxPQUFPLHlCQUF5QjtJQUVwQztRQUVTLGdCQUFXLEdBQVcsU0FBUyxDQUFDO1FBQ2hDLHNCQUFpQixHQUFXLFFBQVEsQ0FBQztRQWNwQyxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRTNELFdBQU0sR0FBRyxFQUFFLENBQUM7UUFDWixjQUFTLEdBQUcsRUFBRSxDQUFDO0lBcEJQLENBQUM7SUFLakIsSUFDSSxLQUFLLENBQUMsS0FBYTtRQUNyQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUztZQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBT0QsSUFDSSxXQUFXO1FBQ2IsT0FBTztZQUNMLEdBQUcsRUFBRSxJQUFJO1lBQ1QsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELHVCQUF1QixDQUFDLE1BQWE7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUksTUFBTSxDQUFDLE1BQTJCLENBQUMsS0FBSyxDQUFDO0lBQ3pELENBQUM7O3NIQW5DVSx5QkFBeUI7MEdBQXpCLHlCQUF5Qiw0UENQdEMsNlVBUUE7MkZERGEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHNCQUFzQjswRUFRdkIsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0YsS0FBSztzQkFEUixLQUFLO2dCQVlJLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUgsV0FBVztzQkFEZCxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYy1zbWFydC10YWJsZS1maWx0ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC10YWJsZS1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LXRhYmxlLWZpbHRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydFRhYmxlRmlsdGVyQ29tcG9uZW50IHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgQElucHV0KCkgZmlsdGVyTGFiZWw6IHN0cmluZyA9ICdGaWx0ZXI6JztcclxuICBASW5wdXQoKSBmaWx0ZXJQbGFjZWhvbGRlcjogc3RyaW5nID0gJ0ZpbHRlcic7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl92YWx1ZSAhPSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZXZlbnRUeXBlKVxyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoeyB2YWx1ZSwgdHlwZTogdGhpcy5ldmVudFR5cGUgfSk7XHJcbiAgfVxyXG4gIGdldCB2YWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfdmFsdWUgPSAnJztcclxuICBwcml2YXRlIGV2ZW50VHlwZSA9ICcnO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcclxuICBnZXQgaG9zdENsYXNzZXMoKTogYW55IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJvdzogdHJ1ZSxcclxuICAgICAgJ21iLTInOiB0cnVlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlVGFibGVGaWx0ZXJDaGFuZ2UoJGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5ldmVudFR5cGUgPSAkZXZlbnQudHlwZTtcclxuICAgIHRoaXMudmFsdWUgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcclxuICB9XHJcbn1cclxuIiwiPGxhYmVsIGNMYWJlbD1cImNvbFwiIGNsYXNzPVwiY29sLXNtLWF1dG9cIj57e2ZpbHRlckxhYmVsfX08L2xhYmVsPlxyXG48ZGl2IGNsYXNzPVwiY29sLXNtLWF1dG9cIj5cclxuICA8aW5wdXQgKGNoYW5nZSk9XCJoYW5kbGVUYWJsZUZpbHRlckNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgKGlucHV0KT1cImhhbmRsZVRhYmxlRmlsdGVyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxyXG4gICAgICAgICBjRm9ybUNvbnRyb2wgLz5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -121,9 +121,9 @@ export class SmartTableHeadComponent {
121
121
  return `columnFilter_${this.columnKey(column) ?? '_undefined'}`;
122
122
  }
123
123
  }
124
- SmartTableHeadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SmartTableHeadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
125
- SmartTableHeadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SmartTableHeadComponent, selector: "c-smart-table-head", inputs: { columnFilter: "columnFilter", columnFilterState: "columnFilterState", columnSorter: "columnSorter", component: "component", columns: "columns", selectable: "selectable", selectAll: "selectAll", sorterValue: "sorterValue", columnFilterTemplates: "columnFilterTemplates" }, outputs: { columnFilterStateChange: "columnFilterStateChange", sorterStateChange: "sorterStateChange", selectAllChange: "selectAllChange" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<tr>\r\n <th *ngIf=\"selectable\">\r\n <input (change)=\"handleSelectAllChecked($event)\"\r\n [checked]=\"selectAll === true\"\r\n [indeterminate]=\"selectAll === 'indeterminate'\"\r\n cFormCheckInput>\r\n </th>\r\n <th\r\n (click)=\"handleSortClick(column, i)\"\r\n *ngFor=\"let column of columns; let i = index\"\r\n [cHtmlAttr]=\"tableHeaderCellProps(column)\"\r\n [cTableColor]=\"tableHeaderCellColor(column)\"\r\n [ngStyle]=\"tableHeaderCellStyles(column)\"\r\n >\r\n <div class=\"d-inline\">{{ columnLabel(column) }}</div>\r\n <ng-template [ngIf]=\"columnSorter && columnSorterEnabled(column)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"columnSorterIconTemplate; context: { $implicit: getColumnSorterState(column) }\"\r\n ></ng-container>\r\n </ng-template>\r\n </th>\r\n</tr>\r\n<tr *ngIf=\"columnFilter\">\r\n <th *ngIf=\"selectable\"></th>\r\n <th *ngFor=\"let column of columns; let i = index\"\r\n [cHtmlAttr]=\"tableHeaderCellProps(column)\"\r\n [cTableColor]=\"tableHeaderCellColor(column)\"\r\n [ngStyle]=\"tableHeaderCellStyles(column)\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"columnFilterTemplates[getColumnFilter(column)] ?? defaultColumnFilter; context: {$implicit: column, header: this}\"></ng-container>\r\n <ng-template #defaultColumnFilter let-column>\r\n <input\r\n (change)=\"handleColumnFilterValueChange($event, column)\"\r\n (input)=\"handleColumnFilterValueChange($event, column)\"\r\n *ngIf=\"columnFilterEnabled(column)\"\r\n [value]=\"columnFilterState[columnKey(column)] ?? ''\"\r\n cFormControl\r\n sizing=\"sm\"\r\n />\r\n </ng-template>\r\n </th>\r\n</tr>\r\n\r\n<ng-template #columnSorterIconTemplate let-columnSorterState>\r\n <ng-container [ngSwitch]=\"columnSorterState\">\r\n <span *ngSwitchCase=\"'asc'\" class=\"float-end me-1\">\r\n <ng-container *ngTemplateOutlet=\"sortingIconAscendingTemplate\"></ng-container>\r\n </span>\r\n <span *ngSwitchCase=\"'desc'\" class=\"float-end me-1\">\r\n <ng-container *ngTemplateOutlet=\"sortingIconDescendingTemplate\"></ng-container>\r\n </span>\r\n <span *ngSwitchDefault class=\"opacity-25 float-end me-1\">\r\n <ng-container *ngTemplateOutlet=\"sortingIconTemplate\"></ng-container>\r\n </span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<!--todo: sortingIconCustom Templates-->\r\n<ng-template #sortingIconTemplate>\r\n <svg\r\n class=\"icon icon-custom-size\"\r\n role=\"img\"\r\n viewBox=\"0 0 512 512\"\r\n width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <polygon\r\n class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"384 433.373 384 160 352 160 352 434.51 282.177 364.687 259.55 387.313 367.432 495.196 475.313 387.313 452.687 364.687 384 433.373\"\r\n ></polygon>\r\n <polygon\r\n class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"159.432 17.372 51.55 125.255 74.177 147.882 144 78.059 144 352 176 352 176 79.195 244.687 147.882 267.313 125.255 159.432 17.372\"\r\n ></polygon>\r\n </svg>\r\n</ng-template>\r\n\r\n<ng-template #sortingIconAscendingTemplate>\r\n <svg\r\n class=\"icon icon-custom-size\"\r\n role=\"img\"\r\n viewBox=\"0 0 512 512\"\r\n width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <polygon\r\n class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"390.624 150.625 256 16 121.376 150.625 144.004 173.252 240.001 77.254 240.001 495.236 272.001 495.236 272.001 77.257 367.996 173.252 390.624 150.625\"\r\n ></polygon>\r\n </svg>\r\n</ng-template>\r\n\r\n<ng-template #sortingIconDescendingTemplate>\r\n <svg\r\n class=\"icon icon-custom-size\"\r\n role=\"img\"\r\n viewBox=\"0 0 512 512\"\r\n width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <polygon\r\n class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"367.997 338.75 271.999 434.747 271.999 17.503 239.999 17.503 239.999 434.745 144.003 338.75 121.376 361.377 256 496 390.624 361.377 367.997 338.75\"\r\n ></polygon>\r\n </svg>\r\n</ng-template>\r\n", styles: [":host{-webkit-user-select:none;user-select:none}:host.thead{display:table-header-group;vertical-align:middle;border-color:inherit}:host.tfoot{display:table-footer-group;vertical-align:middle;border-color:inherit}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2.TableColorDirective, selector: "[cTableColor]", inputs: ["cTableColor"] }, { kind: "directive", type: i3.FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "directive", type: i4.FormCheckInputDirective, selector: "input[cFormCheckInput]", inputs: ["type", "indeterminate", "valid"] }, { kind: "directive", type: i5.HtmlAttributesDirective, selector: "[cHtmlAttr]", inputs: ["cHtmlAttr"], exportAs: ["cHtmlAttr"] }] });
126
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SmartTableHeadComponent, decorators: [{
124
+ SmartTableHeadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SmartTableHeadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
125
+ SmartTableHeadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: SmartTableHeadComponent, selector: "c-smart-table-head", inputs: { columnFilter: "columnFilter", columnFilterState: "columnFilterState", columnSorter: "columnSorter", component: "component", columns: "columns", selectable: "selectable", selectAll: "selectAll", sorterValue: "sorterValue", columnFilterTemplates: "columnFilterTemplates" }, outputs: { columnFilterStateChange: "columnFilterStateChange", sorterStateChange: "sorterStateChange", selectAllChange: "selectAllChange" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<tr>\r\n <th *ngIf=\"selectable\">\r\n <input (change)=\"handleSelectAllChecked($event)\"\r\n [checked]=\"selectAll === true\"\r\n [indeterminate]=\"selectAll === 'indeterminate'\"\r\n cFormCheckInput>\r\n </th>\r\n <th\r\n (click)=\"handleSortClick(column, i)\"\r\n *ngFor=\"let column of columns; let i = index\"\r\n [cHtmlAttr]=\"tableHeaderCellProps(column)\"\r\n [cTableColor]=\"tableHeaderCellColor(column)\"\r\n [ngStyle]=\"tableHeaderCellStyles(column)\"\r\n >\r\n <div class=\"d-inline\">{{ columnLabel(column) }}</div>\r\n <ng-template [ngIf]=\"columnSorter && columnSorterEnabled(column)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"columnSorterIconTemplate; context: { $implicit: getColumnSorterState(column) }\"\r\n ></ng-container>\r\n </ng-template>\r\n </th>\r\n</tr>\r\n<tr *ngIf=\"columnFilter\">\r\n <th *ngIf=\"selectable\"></th>\r\n <th *ngFor=\"let column of columns; let i = index\"\r\n [cHtmlAttr]=\"tableHeaderCellProps(column)\"\r\n [cTableColor]=\"tableHeaderCellColor(column)\"\r\n [ngStyle]=\"tableHeaderCellStyles(column)\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"columnFilterTemplates[getColumnFilter(column)] ?? defaultColumnFilter; context: {$implicit: column, header: this}\"></ng-container>\r\n <ng-template #defaultColumnFilter let-column>\r\n <input\r\n (change)=\"handleColumnFilterValueChange($event, column)\"\r\n (input)=\"handleColumnFilterValueChange($event, column)\"\r\n *ngIf=\"columnFilterEnabled(column)\"\r\n [value]=\"columnFilterState[columnKey(column)] ?? ''\"\r\n cFormControl\r\n sizing=\"sm\"\r\n />\r\n </ng-template>\r\n </th>\r\n</tr>\r\n\r\n<ng-template #columnSorterIconTemplate let-columnSorterState>\r\n <ng-container [ngSwitch]=\"columnSorterState\">\r\n <span *ngSwitchCase=\"'asc'\" class=\"float-end me-1\">\r\n <ng-container *ngTemplateOutlet=\"sortingIconAscendingTemplate\"></ng-container>\r\n </span>\r\n <span *ngSwitchCase=\"'desc'\" class=\"float-end me-1\">\r\n <ng-container *ngTemplateOutlet=\"sortingIconDescendingTemplate\"></ng-container>\r\n </span>\r\n <span *ngSwitchDefault class=\"opacity-25 float-end me-1\">\r\n <ng-container *ngTemplateOutlet=\"sortingIconTemplate\"></ng-container>\r\n </span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<!--todo: sortingIconCustom Templates-->\r\n<ng-template #sortingIconTemplate>\r\n <svg\r\n class=\"icon icon-custom-size\"\r\n role=\"img\"\r\n viewBox=\"0 0 512 512\"\r\n width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <polygon\r\n class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"384 433.373 384 160 352 160 352 434.51 282.177 364.687 259.55 387.313 367.432 495.196 475.313 387.313 452.687 364.687 384 433.373\"\r\n ></polygon>\r\n <polygon\r\n class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"159.432 17.372 51.55 125.255 74.177 147.882 144 78.059 144 352 176 352 176 79.195 244.687 147.882 267.313 125.255 159.432 17.372\"\r\n ></polygon>\r\n </svg>\r\n</ng-template>\r\n\r\n<ng-template #sortingIconAscendingTemplate>\r\n <svg\r\n class=\"icon icon-custom-size\"\r\n role=\"img\"\r\n viewBox=\"0 0 512 512\"\r\n width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <polygon\r\n class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"390.624 150.625 256 16 121.376 150.625 144.004 173.252 240.001 77.254 240.001 495.236 272.001 495.236 272.001 77.257 367.996 173.252 390.624 150.625\"\r\n ></polygon>\r\n </svg>\r\n</ng-template>\r\n\r\n<ng-template #sortingIconDescendingTemplate>\r\n <svg\r\n class=\"icon icon-custom-size\"\r\n role=\"img\"\r\n viewBox=\"0 0 512 512\"\r\n width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <polygon\r\n class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"367.997 338.75 271.999 434.747 271.999 17.503 239.999 17.503 239.999 434.745 144.003 338.75 121.376 361.377 256 496 390.624 361.377 367.997 338.75\"\r\n ></polygon>\r\n </svg>\r\n</ng-template>\r\n", styles: [":host{-webkit-user-select:none;user-select:none}:host.thead{display:table-header-group;vertical-align:middle;border-color:inherit}:host.tfoot{display:table-footer-group;vertical-align:middle;border-color:inherit}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2.TableColorDirective, selector: "[cTableColor]", inputs: ["cTableColor"] }, { kind: "directive", type: i3.FormControlDirective, selector: "input[cFormControl], textarea[cFormControl]", inputs: ["sizing", "valid", "type", "plaintext"] }, { kind: "directive", type: i4.FormCheckInputDirective, selector: "input[cFormCheckInput]", inputs: ["type", "indeterminate", "valid"] }, { kind: "directive", type: i5.HtmlAttributesDirective, selector: "[cHtmlAttr]", inputs: ["cHtmlAttr"], exportAs: ["cHtmlAttr"] }] });
126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: SmartTableHeadComponent, decorators: [{
127
127
  type: Component,
128
128
  args: [{ selector: 'c-smart-table-head', template: "<tr>\r\n <th *ngIf=\"selectable\">\r\n <input (change)=\"handleSelectAllChecked($event)\"\r\n [checked]=\"selectAll === true\"\r\n [indeterminate]=\"selectAll === 'indeterminate'\"\r\n cFormCheckInput>\r\n </th>\r\n <th\r\n (click)=\"handleSortClick(column, i)\"\r\n *ngFor=\"let column of columns; let i = index\"\r\n [cHtmlAttr]=\"tableHeaderCellProps(column)\"\r\n [cTableColor]=\"tableHeaderCellColor(column)\"\r\n [ngStyle]=\"tableHeaderCellStyles(column)\"\r\n >\r\n <div class=\"d-inline\">{{ columnLabel(column) }}</div>\r\n <ng-template [ngIf]=\"columnSorter && columnSorterEnabled(column)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"columnSorterIconTemplate; context: { $implicit: getColumnSorterState(column) }\"\r\n ></ng-container>\r\n </ng-template>\r\n </th>\r\n</tr>\r\n<tr *ngIf=\"columnFilter\">\r\n <th *ngIf=\"selectable\"></th>\r\n <th *ngFor=\"let column of columns; let i = index\"\r\n [cHtmlAttr]=\"tableHeaderCellProps(column)\"\r\n [cTableColor]=\"tableHeaderCellColor(column)\"\r\n [ngStyle]=\"tableHeaderCellStyles(column)\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"columnFilterTemplates[getColumnFilter(column)] ?? defaultColumnFilter; context: {$implicit: column, header: this}\"></ng-container>\r\n <ng-template #defaultColumnFilter let-column>\r\n <input\r\n (change)=\"handleColumnFilterValueChange($event, column)\"\r\n (input)=\"handleColumnFilterValueChange($event, column)\"\r\n *ngIf=\"columnFilterEnabled(column)\"\r\n [value]=\"columnFilterState[columnKey(column)] ?? ''\"\r\n cFormControl\r\n sizing=\"sm\"\r\n />\r\n </ng-template>\r\n </th>\r\n</tr>\r\n\r\n<ng-template #columnSorterIconTemplate let-columnSorterState>\r\n <ng-container [ngSwitch]=\"columnSorterState\">\r\n <span *ngSwitchCase=\"'asc'\" class=\"float-end me-1\">\r\n <ng-container *ngTemplateOutlet=\"sortingIconAscendingTemplate\"></ng-container>\r\n </span>\r\n <span *ngSwitchCase=\"'desc'\" class=\"float-end me-1\">\r\n <ng-container *ngTemplateOutlet=\"sortingIconDescendingTemplate\"></ng-container>\r\n </span>\r\n <span *ngSwitchDefault class=\"opacity-25 float-end me-1\">\r\n <ng-container *ngTemplateOutlet=\"sortingIconTemplate\"></ng-container>\r\n </span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<!--todo: sortingIconCustom Templates-->\r\n<ng-template #sortingIconTemplate>\r\n <svg\r\n class=\"icon icon-custom-size\"\r\n role=\"img\"\r\n viewBox=\"0 0 512 512\"\r\n width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <polygon\r\n class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"384 433.373 384 160 352 160 352 434.51 282.177 364.687 259.55 387.313 367.432 495.196 475.313 387.313 452.687 364.687 384 433.373\"\r\n ></polygon>\r\n <polygon\r\n class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"159.432 17.372 51.55 125.255 74.177 147.882 144 78.059 144 352 176 352 176 79.195 244.687 147.882 267.313 125.255 159.432 17.372\"\r\n ></polygon>\r\n </svg>\r\n</ng-template>\r\n\r\n<ng-template #sortingIconAscendingTemplate>\r\n <svg\r\n class=\"icon icon-custom-size\"\r\n role=\"img\"\r\n viewBox=\"0 0 512 512\"\r\n width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <polygon\r\n class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"390.624 150.625 256 16 121.376 150.625 144.004 173.252 240.001 77.254 240.001 495.236 272.001 495.236 272.001 77.257 367.996 173.252 390.624 150.625\"\r\n ></polygon>\r\n </svg>\r\n</ng-template>\r\n\r\n<ng-template #sortingIconDescendingTemplate>\r\n <svg\r\n class=\"icon icon-custom-size\"\r\n role=\"img\"\r\n viewBox=\"0 0 512 512\"\r\n width=\"18\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <polygon\r\n class=\"ci-primary\"\r\n fill=\"var(--ci-primary-color, currentColor)\"\r\n points=\"367.997 338.75 271.999 434.747 271.999 17.503 239.999 17.503 239.999 434.745 144.003 338.75 121.376 361.377 256 496 390.624 361.377 367.997 338.75\"\r\n ></polygon>\r\n </svg>\r\n</ng-template>\r\n", styles: [":host{-webkit-user-select:none;user-select:none}:host.thead{display:table-header-group;vertical-align:middle;border-color:inherit}:host.tfoot{display:table-footer-group;vertical-align:middle;border-color:inherit}\n"] }]
129
129
  }], ctorParameters: function () { return []; }, propDecorators: { columnFilter: [{
@@ -154,4 +154,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
154
154
  type: HostBinding,
155
155
  args: ['class']
156
156
  }] } });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUtaGVhZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLWhlYWQvc21hcnQtdGFibGUtaGVhZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLWhlYWQvc21hcnQtdGFibGUtaGVhZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVE1RixNQUFNLE9BQU8sdUJBQXVCO0lBRWxDO1FBR1Msc0JBQWlCLEdBQXVCLEVBQUUsQ0FBQztRQUMzQyxpQkFBWSxHQUF1QixJQUFJLENBQUM7UUFDeEMsY0FBUyxHQUFZLE9BQU8sQ0FBQztRQVl0QywyQkFBc0IsR0FBUyxFQUFFLENBQUM7UUFFbEMsT0FBTztRQUNQLG9EQUFvRDtRQUNwRCw2REFBNkQ7UUFDN0QsOERBQThEO1FBRXBELDRCQUF1QixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JFLHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQy9ELG9CQUFlLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUExQnZELENBQUM7SUFVakIsSUFDSSxxQkFBcUIsQ0FBQyxLQUFLO1FBQzdCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBQUEsQ0FB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Q0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBd0I7UUFDdEMsT0FBTyxnQkFBaUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxZQUFhLEVBQUUsQ0FBQztJQUNwRSxDQUFDOztxSEE1SVUsdUJBQXVCO3lHQUF2Qix1QkFBdUIsd2hCQ1JwQyw4dUlBOEdBOzRGRHRHYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usb0JBQW9COzBFQVFyQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVGLHFCQUFxQjtzQkFEeEIsS0FBSztnQkFjSSx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0gsV0FBVztzQkFEZCxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJQ29sdW1uLCBJQ29sdW1uRmlsdGVyLCBJQ29sdW1uRmlsdGVyVmFsdWUsIElTb3J0ZXIsIElTb3J0ZXJWYWx1ZSB9IGZyb20gJy4uL3NtYXJ0LXRhYmxlLnR5cGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjLXNtYXJ0LXRhYmxlLWhlYWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC10YWJsZS1oZWFkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC10YWJsZS1oZWFkLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0VGFibGVIZWFkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgQElucHV0KCkgY29sdW1uRmlsdGVyPzogYm9vbGVhbiB8IElDb2x1bW5GaWx0ZXI7XHJcbiAgQElucHV0KCkgY29sdW1uRmlsdGVyU3RhdGU6IElDb2x1bW5GaWx0ZXJWYWx1ZSA9IHt9O1xyXG4gIEBJbnB1dCgpIGNvbHVtblNvcnRlcj86IGJvb2xlYW4gfCBJU29ydGVyID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjb21wb25lbnQ/OiBzdHJpbmcgPSAndGhlYWQnO1xyXG4gIEBJbnB1dCgpIGNvbHVtbnM/OiAoSUNvbHVtbiB8IHN0cmluZylbXTtcclxuICBASW5wdXQoKSBzZWxlY3RhYmxlPzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzZWxlY3RBbGw/OiBib29sZWFuIHwgc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNvcnRlclZhbHVlPzogSVNvcnRlclZhbHVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbHVtbkZpbHRlclRlbXBsYXRlcyh2YWx1ZSkge1xyXG4gICAgdGhpcy5fY29sdW1uRmlsdGVyVGVtcGxhdGVzID0geyAuLi52YWx1ZSB9O1xyXG4gIH07XHJcbiAgZ2V0IGNvbHVtbkZpbHRlclRlbXBsYXRlcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2x1bW5GaWx0ZXJUZW1wbGF0ZXM7XHJcbiAgfTtcclxuICBfY29sdW1uRmlsdGVyVGVtcGxhdGVzPzogYW55ID0ge307XHJcblxyXG4gIC8vIHRvZG9cclxuICAvLyBASW5wdXQoKSBzb3J0aW5nSWNvbj86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLy8gQElucHV0KCkgc29ydGluZ0ljb25Bc2NlbmRpbmc/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vIEBJbnB1dCgpIHNvcnRpbmdJY29uRGVzY2VuZGluZz86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBPdXRwdXQoKSBjb2x1bW5GaWx0ZXJTdGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc29ydGVyU3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdEFsbENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXHJcbiAgZ2V0IGhvc3RDbGFzc2VzKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGhlYWQ6IHRoaXMuY29tcG9uZW50ID09PSAndGhlYWQnLFxyXG4gICAgICB0Zm9vdDogdGhpcy5jb21wb25lbnQgPT09ICd0Zm9vdCdcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29sdW1ucz8uZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBjb2x1bW5LZXkgPSB0aGlzLmNvbHVtbktleShjb2x1bW4pO1xyXG4gICAgICB0aGlzLmNvbHVtbkZpbHRlclN0YXRlW2NvbHVtbktleV0gPSB0aGlzLmNvbHVtbkZpbHRlclN0YXRlW2NvbHVtbktleV0gPz8gJyc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRhYmxlSGVhZGVyQ2VsbFByb3BzIChjb2x1bW46IElDb2x1bW4gfCBzdHJpbmcpIHtcclxuICAgIGlmICh0eXBlb2YgY29sdW1uID09PSAnb2JqZWN0JyAmJiBjb2x1bW4uX3Byb3BzKSB7XHJcbiAgICAgIGNvbnN0IHsgY29sb3IsIC4uLnByb3BzIH0gPSB7IC4uLmNvbHVtbi5fcHJvcHMgfVxyXG4gICAgICByZXR1cm4gcHJvcHNcclxuICAgIH1cclxuICAgIHJldHVybiB7fVxyXG4gIH1cclxuXHJcbiAgdGFibGVIZWFkZXJDZWxsQ29sb3IgKGNvbHVtbjogSUNvbHVtbiB8IHN0cmluZykge1xyXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmIGNvbHVtbi5fcHJvcHMpIHtcclxuICAgICAgY29uc3QgeyBjb2xvciB9ID0geyAuLi5jb2x1bW4uX3Byb3BzIH1cclxuICAgICAgcmV0dXJuIGNvbG9yXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcblxyXG4gIHRhYmxlSGVhZGVyQ2VsbFN0eWxlcyhjb2x1bW46IElDb2x1bW4gfCBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHN0eWxlID0geyB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJywgb3ZlcmZsb3c6ICdoaWRkZW4nLCBjdXJzb3I6ICcnIH07XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY29sdW1uU29ydGVyICYmXHJcbiAgICAgICh0eXBlb2YgY29sdW1uICE9PSAnb2JqZWN0JyB8fFxyXG4gICAgICAgICh0eXBlb2YgY29sdW1uID09PSAnb2JqZWN0JyAmJiAodHlwZW9mIGNvbHVtbi5zb3J0ZXIgPT09ICd1bmRlZmluZWQnIHx8IGNvbHVtbi5zb3J0ZXIpKSlcclxuICAgICkge1xyXG4gICAgICBzdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmIGNvbHVtbi5fc3R5bGUpIHtcclxuICAgICAgcmV0dXJuIHsgLi4uc3R5bGUsIC4uLmNvbHVtbi5fc3R5bGUgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZTtcclxuICB9XHJcblxyXG4gIGNvbHVtbkxhYmVsKGNvbHVtbjogSUNvbHVtbiB8IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnID8gY29sdW1uLmxhYmVsICE9PSB1bmRlZmluZWQgPyBjb2x1bW4ubGFiZWwgOiB0aGlzLnByZXR0aWZ5TmFtZShjb2x1bW4ua2V5KSA6IHRoaXMucHJldHRpZnlOYW1lKGNvbHVtbik7XHJcbiAgfVxyXG5cclxuICBjb2x1bW5LZXkoY29sdW1uOiBJQ29sdW1uIHwgc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGNvbHVtbiA9PT0gJ29iamVjdCcgPyBjb2x1bW4ua2V5IDogY29sdW1uO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1uU29ydGVyU3RhdGUoY29sdW1uOiBJQ29sdW1uIHwgc3RyaW5nKSB7XHJcbiAgICBjb25zdCBjb2x1bW5LZXkgPSB0aGlzLmNvbHVtbktleShjb2x1bW4pO1xyXG4gICAgaWYgKHRoaXMuc29ydGVyVmFsdWU/LmNvbHVtbiA9PT0gY29sdW1uS2V5KSB7XHJcbiAgICAgIGlmICh0aGlzLnNvcnRlclZhbHVlLnN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydGVyVmFsdWUuc3RhdGU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIHByZXR0aWZ5TmFtZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBuYW1lXHJcbiAgICAgIC5yZXBsYWNlKC9bLV8uXS9nLCAnICcpXHJcbiAgICAgIC5yZXBsYWNlKC8gKy9nLCAnICcpXHJcbiAgICAgIC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCAnJDEgJDInKVxyXG4gICAgICAuc3BsaXQoJyAnKVxyXG4gICAgICAubWFwKCh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcclxuICAgICAgLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNvcnRDbGljayhjb2x1bW46IElDb2x1bW4gfCBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuY29sdW1uU29ydGVyRW5hYmxlZChjb2x1bW4pKSB7XHJcbiAgICAgIGNvbnN0IGNvbHVtbktleSA9IHRoaXMuY29sdW1uS2V5KGNvbHVtbik7XHJcbiAgICAgIHRoaXMuc29ydGVyU3RhdGVDaGFuZ2UuZW1pdCh7IGNvbHVtbktleSwgaW5kZXg6IGkgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb2x1bW5GaWx0ZXJFbmFibGVkKGNvbHVtbjogSUNvbHVtbiB8IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBjb2x1bW4gIT09ICdvYmplY3QnID8gdHJ1ZSA6IHR5cGVvZiBjb2x1bW4uZmlsdGVyID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBjb2x1bW4uZmlsdGVyO1xyXG4gIH1cclxuXHJcbiAgY29sdW1uU29ydGVyRW5hYmxlZChjb2x1bW46IElDb2x1bW4gfCBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0eXBlb2YgY29sdW1uICE9PSAnb2JqZWN0JyA/IHRydWUgOiB0eXBlb2YgY29sdW1uLnNvcnRlciA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogY29sdW1uLnNvcnRlcjtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlKCRldmVudDogRXZlbnQsIGNvbHVtbjogSUNvbHVtbiB8IHN0cmluZykge1xyXG4gICAgY29uc3QgY29sdW1uS2V5ID0gdGhpcy5jb2x1bW5LZXkoY29sdW1uKTtcclxuICAgIGNvbnN0IGNvbHVtbkZpbHRlclZhbHVlID0gKCRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSAkZXZlbnQudHlwZTtcclxuICAgIGNvbnN0IGlzTGF6eSA9IHR5cGVvZiB0aGlzLmNvbHVtbkZpbHRlciA9PT0gJ29iamVjdCcgJiYgdGhpcy5jb2x1bW5GaWx0ZXIubGF6eSA9PT0gdHJ1ZTtcclxuICAgIGlmICgoKGlzTGF6eSAmJiBldmVudFR5cGUgPT09ICdpbnB1dCcpIHx8ICghaXNMYXp5ICYmIGV2ZW50VHlwZSA9PT0gJ2NoYW5nZScpKSAmJiBjb2x1bW5GaWx0ZXJWYWx1ZS5sZW5ndGggIT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJTdGF0ZVt0aGlzLmNvbHVtbktleShjb2x1bW4pXSA9IGNvbHVtbkZpbHRlclZhbHVlO1xyXG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJTdGF0ZUNoYW5nZS5lbWl0KHsgY29sdW1uOiBjb2x1bW5LZXksIHZhbHVlOiBjb2x1bW5GaWx0ZXJWYWx1ZSwgdHlwZTogZXZlbnRUeXBlIH0pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2VsZWN0QWxsQ2hlY2tlZCgkZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3RBbGwgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xyXG4gICAgdGhpcy5zZWxlY3RBbGxDaGFuZ2UuZW1pdChzZWxlY3RBbGwpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1uRmlsdGVyKGNvbHVtbjogSUNvbHVtbiB8IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGBjb2x1bW5GaWx0ZXJfJHsgdGhpcy5jb2x1bW5LZXkoY29sdW1uKSA/PyAnX3VuZGVmaW5lZCcgfWA7XHJcbiAgfVxyXG59XHJcbiIsIjx0cj5cclxuICA8dGggKm5nSWY9XCJzZWxlY3RhYmxlXCI+XHJcbiAgICA8aW5wdXQgKGNoYW5nZSk9XCJoYW5kbGVTZWxlY3RBbGxDaGVja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdEFsbCA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0QWxsID09PSAnaW5kZXRlcm1pbmF0ZSdcIlxyXG4gICAgICAgICAgIGNGb3JtQ2hlY2tJbnB1dD5cclxuICA8L3RoPlxyXG4gIDx0aFxyXG4gICAgKGNsaWNrKT1cImhhbmRsZVNvcnRDbGljayhjb2x1bW4sIGkpXCJcclxuICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICBbY0h0bWxBdHRyXT1cInRhYmxlSGVhZGVyQ2VsbFByb3BzKGNvbHVtbilcIlxyXG4gICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlSGVhZGVyQ2VsbENvbG9yKGNvbHVtbilcIlxyXG4gICAgW25nU3R5bGVdPVwidGFibGVIZWFkZXJDZWxsU3R5bGVzKGNvbHVtbilcIlxyXG4gID5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWlubGluZVwiPnt7IGNvbHVtbkxhYmVsKGNvbHVtbikgfX08L2Rpdj5cclxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjb2x1bW5Tb3J0ZXIgJiYgY29sdW1uU29ydGVyRW5hYmxlZChjb2x1bW4pXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtblNvcnRlckljb25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGdldENvbHVtblNvcnRlclN0YXRlKGNvbHVtbikgfVwiXHJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC90aD5cclxuPC90cj5cclxuPHRyICpuZ0lmPVwiY29sdW1uRmlsdGVyXCI+XHJcbiAgPHRoICpuZ0lmPVwic2VsZWN0YWJsZVwiPjwvdGg+XHJcbiAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVIZWFkZXJDZWxsUHJvcHMoY29sdW1uKVwiXHJcbiAgICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZUhlYWRlckNlbGxDb2xvcihjb2x1bW4pXCJcclxuICAgICAgW25nU3R5bGVdPVwidGFibGVIZWFkZXJDZWxsU3R5bGVzKGNvbHVtbilcIlxyXG4gID5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNbZ2V0Q29sdW1uRmlsdGVyKGNvbHVtbildID8/IGRlZmF1bHRDb2x1bW5GaWx0ZXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGNvbHVtbiwgaGVhZGVyOiB0aGlzfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29sdW1uRmlsdGVyIGxldC1jb2x1bW4+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlQ29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAoaW5wdXQpPVwiaGFuZGxlQ29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAqbmdJZj1cImNvbHVtbkZpbHRlckVuYWJsZWQoY29sdW1uKVwiXHJcbiAgICAgICAgW3ZhbHVlXT1cImNvbHVtbkZpbHRlclN0YXRlW2NvbHVtbktleShjb2x1bW4pXSA/PyAnJ1wiXHJcbiAgICAgICAgY0Zvcm1Db250cm9sXHJcbiAgICAgICAgc2l6aW5nPVwic21cIlxyXG4gICAgICAvPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3RoPlxyXG48L3RyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb2x1bW5Tb3J0ZXJJY29uVGVtcGxhdGUgbGV0LWNvbHVtblNvcnRlclN0YXRlPlxyXG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtblNvcnRlclN0YXRlXCI+XHJcbiAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2FzYydcIiBjbGFzcz1cImZsb2F0LWVuZCBtZS0xXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzb3J0aW5nSWNvbkFzY2VuZGluZ1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2Rlc2MnXCIgY2xhc3M9XCJmbG9hdC1lbmQgbWUtMVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic29ydGluZ0ljb25EZXNjZW5kaW5nVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgY2xhc3M9XCJvcGFjaXR5LTI1IGZsb2F0LWVuZCBtZS0xXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzb3J0aW5nSWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tdG9kbzogc29ydGluZ0ljb25DdXN0b20gVGVtcGxhdGVzLS0+XHJcbjxuZy10ZW1wbGF0ZSAjc29ydGluZ0ljb25UZW1wbGF0ZT5cclxuICA8c3ZnXHJcbiAgICBjbGFzcz1cImljb24gaWNvbi1jdXN0b20tc2l6ZVwiXHJcbiAgICByb2xlPVwiaW1nXCJcclxuICAgIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiXHJcbiAgICB3aWR0aD1cIjE4XCJcclxuICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gID5cclxuICAgIDxwb2x5Z29uXHJcbiAgICAgIGNsYXNzPVwiY2ktcHJpbWFyeVwiXHJcbiAgICAgIGZpbGw9XCJ2YXIoLS1jaS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpXCJcclxuICAgICAgcG9pbnRzPVwiMzg0IDQzMy4zNzMgMzg0IDE2MCAzNTIgMTYwIDM1MiA0MzQuNTEgMjgyLjE3NyAzNjQuNjg3IDI1OS41NSAzODcuMzEzIDM2Ny40MzIgNDk1LjE5NiA0NzUuMzEzIDM4Ny4zMTMgNDUyLjY4NyAzNjQuNjg3IDM4NCA0MzMuMzczXCJcclxuICAgID48L3BvbHlnb24+XHJcbiAgICA8cG9seWdvblxyXG4gICAgICBjbGFzcz1cImNpLXByaW1hcnlcIlxyXG4gICAgICBmaWxsPVwidmFyKC0tY2ktcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKVwiXHJcbiAgICAgIHBvaW50cz1cIjE1OS40MzIgMTcuMzcyIDUxLjU1IDEyNS4yNTUgNzQuMTc3IDE0Ny44ODIgMTQ0IDc4LjA1OSAxNDQgMzUyIDE3NiAzNTIgMTc2IDc5LjE5NSAyNDQuNjg3IDE0Ny44ODIgMjY3LjMxMyAxMjUuMjU1IDE1OS40MzIgMTcuMzcyXCJcclxuICAgID48L3BvbHlnb24+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3NvcnRpbmdJY29uQXNjZW5kaW5nVGVtcGxhdGU+XHJcbiAgPHN2Z1xyXG4gICAgY2xhc3M9XCJpY29uIGljb24tY3VzdG9tLXNpemVcIlxyXG4gICAgcm9sZT1cImltZ1wiXHJcbiAgICB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIlxyXG4gICAgd2lkdGg9XCIxOFwiXHJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICA+XHJcbiAgICA8cG9seWdvblxyXG4gICAgICBjbGFzcz1cImNpLXByaW1hcnlcIlxyXG4gICAgICBmaWxsPVwidmFyKC0tY2ktcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKVwiXHJcbiAgICAgIHBvaW50cz1cIjM5MC42MjQgMTUwLjYyNSAyNTYgMTYgMTIxLjM3NiAxNTAuNjI1IDE0NC4wMDQgMTczLjI1MiAyNDAuMDAxIDc3LjI1NCAyNDAuMDAxIDQ5NS4yMzYgMjcyLjAwMSA0OTUuMjM2IDI3Mi4wMDEgNzcuMjU3IDM2Ny45OTYgMTczLjI1MiAzOTAuNjI0IDE1MC42MjVcIlxyXG4gICAgPjwvcG9seWdvbj5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc29ydGluZ0ljb25EZXNjZW5kaW5nVGVtcGxhdGU+XHJcbiAgPHN2Z1xyXG4gICAgY2xhc3M9XCJpY29uIGljb24tY3VzdG9tLXNpemVcIlxyXG4gICAgcm9sZT1cImltZ1wiXHJcbiAgICB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIlxyXG4gICAgd2lkdGg9XCIxOFwiXHJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICA+XHJcbiAgICA8cG9seWdvblxyXG4gICAgICBjbGFzcz1cImNpLXByaW1hcnlcIlxyXG4gICAgICBmaWxsPVwidmFyKC0tY2ktcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKVwiXHJcbiAgICAgIHBvaW50cz1cIjM2Ny45OTcgMzM4Ljc1IDI3MS45OTkgNDM0Ljc0NyAyNzEuOTk5IDE3LjUwMyAyMzkuOTk5IDE3LjUwMyAyMzkuOTk5IDQzNC43NDUgMTQ0LjAwMyAzMzguNzUgMTIxLjM3NiAzNjEuMzc3IDI1NiA0OTYgMzkwLjYyNCAzNjEuMzc3IDM2Ny45OTcgMzM4Ljc1XCJcclxuICAgID48L3BvbHlnb24+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUtaGVhZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLWhlYWQvc21hcnQtdGFibGUtaGVhZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXRhYmxlL3NtYXJ0LXRhYmxlLWhlYWQvc21hcnQtdGFibGUtaGVhZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVE1RixNQUFNLE9BQU8sdUJBQXVCO0lBRWxDO1FBR1Msc0JBQWlCLEdBQXVCLEVBQUUsQ0FBQztRQUMzQyxpQkFBWSxHQUF1QixJQUFJLENBQUM7UUFDeEMsY0FBUyxHQUFZLE9BQU8sQ0FBQztRQVl0QywyQkFBc0IsR0FBUyxFQUFFLENBQUM7UUFFbEMsT0FBTztRQUNQLG9EQUFvRDtRQUNwRCw2REFBNkQ7UUFDN0QsOERBQThEO1FBRXBELDRCQUF1QixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JFLHNCQUFpQixHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQy9ELG9CQUFlLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUExQnZELENBQUM7SUFVakIsSUFDSSxxQkFBcUIsQ0FBQyxLQUFLO1FBQzdCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUFBLENBQUM7SUFDRixJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBQUEsQ0FB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Q0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBd0I7UUFDdEMsT0FBTyxnQkFBaUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxZQUFhLEVBQUUsQ0FBQztJQUNwRSxDQUFDOztvSEE1SVUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsd2hCQ1JwQyw4dUlBOEdBOzJGRHRHYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usb0JBQW9COzBFQVFyQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVGLHFCQUFxQjtzQkFEeEIsS0FBSztnQkFjSSx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0gsV0FBVztzQkFEZCxXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJQ29sdW1uLCBJQ29sdW1uRmlsdGVyLCBJQ29sdW1uRmlsdGVyVmFsdWUsIElTb3J0ZXIsIElTb3J0ZXJWYWx1ZSB9IGZyb20gJy4uL3NtYXJ0LXRhYmxlLnR5cGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjLXNtYXJ0LXRhYmxlLWhlYWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC10YWJsZS1oZWFkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC10YWJsZS1oZWFkLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0VGFibGVIZWFkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgQElucHV0KCkgY29sdW1uRmlsdGVyPzogYm9vbGVhbiB8IElDb2x1bW5GaWx0ZXI7XHJcbiAgQElucHV0KCkgY29sdW1uRmlsdGVyU3RhdGU6IElDb2x1bW5GaWx0ZXJWYWx1ZSA9IHt9O1xyXG4gIEBJbnB1dCgpIGNvbHVtblNvcnRlcj86IGJvb2xlYW4gfCBJU29ydGVyID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjb21wb25lbnQ/OiBzdHJpbmcgPSAndGhlYWQnO1xyXG4gIEBJbnB1dCgpIGNvbHVtbnM/OiAoSUNvbHVtbiB8IHN0cmluZylbXTtcclxuICBASW5wdXQoKSBzZWxlY3RhYmxlPzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzZWxlY3RBbGw/OiBib29sZWFuIHwgc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNvcnRlclZhbHVlPzogSVNvcnRlclZhbHVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbHVtbkZpbHRlclRlbXBsYXRlcyh2YWx1ZSkge1xyXG4gICAgdGhpcy5fY29sdW1uRmlsdGVyVGVtcGxhdGVzID0geyAuLi52YWx1ZSB9O1xyXG4gIH07XHJcbiAgZ2V0IGNvbHVtbkZpbHRlclRlbXBsYXRlcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2x1bW5GaWx0ZXJUZW1wbGF0ZXM7XHJcbiAgfTtcclxuICBfY29sdW1uRmlsdGVyVGVtcGxhdGVzPzogYW55ID0ge307XHJcblxyXG4gIC8vIHRvZG9cclxuICAvLyBASW5wdXQoKSBzb3J0aW5nSWNvbj86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgLy8gQElucHV0KCkgc29ydGluZ0ljb25Bc2NlbmRpbmc/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIC8vIEBJbnB1dCgpIHNvcnRpbmdJY29uRGVzY2VuZGluZz86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBPdXRwdXQoKSBjb2x1bW5GaWx0ZXJTdGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc29ydGVyU3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdEFsbENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXHJcbiAgZ2V0IGhvc3RDbGFzc2VzKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGhlYWQ6IHRoaXMuY29tcG9uZW50ID09PSAndGhlYWQnLFxyXG4gICAgICB0Zm9vdDogdGhpcy5jb21wb25lbnQgPT09ICd0Zm9vdCdcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29sdW1ucz8uZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBjb2x1bW5LZXkgPSB0aGlzLmNvbHVtbktleShjb2x1bW4pO1xyXG4gICAgICB0aGlzLmNvbHVtbkZpbHRlclN0YXRlW2NvbHVtbktleV0gPSB0aGlzLmNvbHVtbkZpbHRlclN0YXRlW2NvbHVtbktleV0gPz8gJyc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRhYmxlSGVhZGVyQ2VsbFByb3BzIChjb2x1bW46IElDb2x1bW4gfCBzdHJpbmcpIHtcclxuICAgIGlmICh0eXBlb2YgY29sdW1uID09PSAnb2JqZWN0JyAmJiBjb2x1bW4uX3Byb3BzKSB7XHJcbiAgICAgIGNvbnN0IHsgY29sb3IsIC4uLnByb3BzIH0gPSB7IC4uLmNvbHVtbi5fcHJvcHMgfVxyXG4gICAgICByZXR1cm4gcHJvcHNcclxuICAgIH1cclxuICAgIHJldHVybiB7fVxyXG4gIH1cclxuXHJcbiAgdGFibGVIZWFkZXJDZWxsQ29sb3IgKGNvbHVtbjogSUNvbHVtbiB8IHN0cmluZykge1xyXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmIGNvbHVtbi5fcHJvcHMpIHtcclxuICAgICAgY29uc3QgeyBjb2xvciB9ID0geyAuLi5jb2x1bW4uX3Byb3BzIH1cclxuICAgICAgcmV0dXJuIGNvbG9yXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcblxyXG4gIHRhYmxlSGVhZGVyQ2VsbFN0eWxlcyhjb2x1bW46IElDb2x1bW4gfCBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHN0eWxlID0geyB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJywgb3ZlcmZsb3c6ICdoaWRkZW4nLCBjdXJzb3I6ICcnIH07XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY29sdW1uU29ydGVyICYmXHJcbiAgICAgICh0eXBlb2YgY29sdW1uICE9PSAnb2JqZWN0JyB8fFxyXG4gICAgICAgICh0eXBlb2YgY29sdW1uID09PSAnb2JqZWN0JyAmJiAodHlwZW9mIGNvbHVtbi5zb3J0ZXIgPT09ICd1bmRlZmluZWQnIHx8IGNvbHVtbi5zb3J0ZXIpKSlcclxuICAgICkge1xyXG4gICAgICBzdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnICYmIGNvbHVtbi5fc3R5bGUpIHtcclxuICAgICAgcmV0dXJuIHsgLi4uc3R5bGUsIC4uLmNvbHVtbi5fc3R5bGUgfTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHlsZTtcclxuICB9XHJcblxyXG4gIGNvbHVtbkxhYmVsKGNvbHVtbjogSUNvbHVtbiB8IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBjb2x1bW4gPT09ICdvYmplY3QnID8gY29sdW1uLmxhYmVsICE9PSB1bmRlZmluZWQgPyBjb2x1bW4ubGFiZWwgOiB0aGlzLnByZXR0aWZ5TmFtZShjb2x1bW4ua2V5KSA6IHRoaXMucHJldHRpZnlOYW1lKGNvbHVtbik7XHJcbiAgfVxyXG5cclxuICBjb2x1bW5LZXkoY29sdW1uOiBJQ29sdW1uIHwgc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGNvbHVtbiA9PT0gJ29iamVjdCcgPyBjb2x1bW4ua2V5IDogY29sdW1uO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1uU29ydGVyU3RhdGUoY29sdW1uOiBJQ29sdW1uIHwgc3RyaW5nKSB7XHJcbiAgICBjb25zdCBjb2x1bW5LZXkgPSB0aGlzLmNvbHVtbktleShjb2x1bW4pO1xyXG4gICAgaWYgKHRoaXMuc29ydGVyVmFsdWU/LmNvbHVtbiA9PT0gY29sdW1uS2V5KSB7XHJcbiAgICAgIGlmICh0aGlzLnNvcnRlclZhbHVlLnN0YXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydGVyVmFsdWUuc3RhdGU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIHByZXR0aWZ5TmFtZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBuYW1lXHJcbiAgICAgIC5yZXBsYWNlKC9bLV8uXS9nLCAnICcpXHJcbiAgICAgIC5yZXBsYWNlKC8gKy9nLCAnICcpXHJcbiAgICAgIC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCAnJDEgJDInKVxyXG4gICAgICAuc3BsaXQoJyAnKVxyXG4gICAgICAubWFwKCh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcclxuICAgICAgLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNvcnRDbGljayhjb2x1bW46IElDb2x1bW4gfCBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuY29sdW1uU29ydGVyRW5hYmxlZChjb2x1bW4pKSB7XHJcbiAgICAgIGNvbnN0IGNvbHVtbktleSA9IHRoaXMuY29sdW1uS2V5KGNvbHVtbik7XHJcbiAgICAgIHRoaXMuc29ydGVyU3RhdGVDaGFuZ2UuZW1pdCh7IGNvbHVtbktleSwgaW5kZXg6IGkgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb2x1bW5GaWx0ZXJFbmFibGVkKGNvbHVtbjogSUNvbHVtbiB8IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBjb2x1bW4gIT09ICdvYmplY3QnID8gdHJ1ZSA6IHR5cGVvZiBjb2x1bW4uZmlsdGVyID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBjb2x1bW4uZmlsdGVyO1xyXG4gIH1cclxuXHJcbiAgY29sdW1uU29ydGVyRW5hYmxlZChjb2x1bW46IElDb2x1bW4gfCBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0eXBlb2YgY29sdW1uICE9PSAnb2JqZWN0JyA/IHRydWUgOiB0eXBlb2YgY29sdW1uLnNvcnRlciA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogY29sdW1uLnNvcnRlcjtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNvbHVtbkZpbHRlclZhbHVlQ2hhbmdlKCRldmVudDogRXZlbnQsIGNvbHVtbjogSUNvbHVtbiB8IHN0cmluZykge1xyXG4gICAgY29uc3QgY29sdW1uS2V5ID0gdGhpcy5jb2x1bW5LZXkoY29sdW1uKTtcclxuICAgIGNvbnN0IGNvbHVtbkZpbHRlclZhbHVlID0gKCRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSAkZXZlbnQudHlwZTtcclxuICAgIGNvbnN0IGlzTGF6eSA9IHR5cGVvZiB0aGlzLmNvbHVtbkZpbHRlciA9PT0gJ29iamVjdCcgJiYgdGhpcy5jb2x1bW5GaWx0ZXIubGF6eSA9PT0gdHJ1ZTtcclxuICAgIGlmICgoKGlzTGF6eSAmJiBldmVudFR5cGUgPT09ICdpbnB1dCcpIHx8ICghaXNMYXp5ICYmIGV2ZW50VHlwZSA9PT0gJ2NoYW5nZScpKSAmJiBjb2x1bW5GaWx0ZXJWYWx1ZS5sZW5ndGggIT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJTdGF0ZVt0aGlzLmNvbHVtbktleShjb2x1bW4pXSA9IGNvbHVtbkZpbHRlclZhbHVlO1xyXG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJTdGF0ZUNoYW5nZS5lbWl0KHsgY29sdW1uOiBjb2x1bW5LZXksIHZhbHVlOiBjb2x1bW5GaWx0ZXJWYWx1ZSwgdHlwZTogZXZlbnRUeXBlIH0pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2VsZWN0QWxsQ2hlY2tlZCgkZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3RBbGwgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xyXG4gICAgdGhpcy5zZWxlY3RBbGxDaGFuZ2UuZW1pdChzZWxlY3RBbGwpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1uRmlsdGVyKGNvbHVtbjogSUNvbHVtbiB8IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGBjb2x1bW5GaWx0ZXJfJHsgdGhpcy5jb2x1bW5LZXkoY29sdW1uKSA/PyAnX3VuZGVmaW5lZCcgfWA7XHJcbiAgfVxyXG59XHJcbiIsIjx0cj5cclxuICA8dGggKm5nSWY9XCJzZWxlY3RhYmxlXCI+XHJcbiAgICA8aW5wdXQgKGNoYW5nZSk9XCJoYW5kbGVTZWxlY3RBbGxDaGVja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdEFsbCA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0QWxsID09PSAnaW5kZXRlcm1pbmF0ZSdcIlxyXG4gICAgICAgICAgIGNGb3JtQ2hlY2tJbnB1dD5cclxuICA8L3RoPlxyXG4gIDx0aFxyXG4gICAgKGNsaWNrKT1cImhhbmRsZVNvcnRDbGljayhjb2x1bW4sIGkpXCJcclxuICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICBbY0h0bWxBdHRyXT1cInRhYmxlSGVhZGVyQ2VsbFByb3BzKGNvbHVtbilcIlxyXG4gICAgW2NUYWJsZUNvbG9yXT1cInRhYmxlSGVhZGVyQ2VsbENvbG9yKGNvbHVtbilcIlxyXG4gICAgW25nU3R5bGVdPVwidGFibGVIZWFkZXJDZWxsU3R5bGVzKGNvbHVtbilcIlxyXG4gID5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWlubGluZVwiPnt7IGNvbHVtbkxhYmVsKGNvbHVtbikgfX08L2Rpdj5cclxuICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjb2x1bW5Tb3J0ZXIgJiYgY29sdW1uU29ydGVyRW5hYmxlZChjb2x1bW4pXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtblNvcnRlckljb25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGdldENvbHVtblNvcnRlclN0YXRlKGNvbHVtbikgfVwiXHJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC90aD5cclxuPC90cj5cclxuPHRyICpuZ0lmPVwiY29sdW1uRmlsdGVyXCI+XHJcbiAgPHRoICpuZ0lmPVwic2VsZWN0YWJsZVwiPjwvdGg+XHJcbiAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgIFtjSHRtbEF0dHJdPVwidGFibGVIZWFkZXJDZWxsUHJvcHMoY29sdW1uKVwiXHJcbiAgICAgIFtjVGFibGVDb2xvcl09XCJ0YWJsZUhlYWRlckNlbGxDb2xvcihjb2x1bW4pXCJcclxuICAgICAgW25nU3R5bGVdPVwidGFibGVIZWFkZXJDZWxsU3R5bGVzKGNvbHVtbilcIlxyXG4gID5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5GaWx0ZXJUZW1wbGF0ZXNbZ2V0Q29sdW1uRmlsdGVyKGNvbHVtbildID8/IGRlZmF1bHRDb2x1bW5GaWx0ZXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGNvbHVtbiwgaGVhZGVyOiB0aGlzfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29sdW1uRmlsdGVyIGxldC1jb2x1bW4+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlQ29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAoaW5wdXQpPVwiaGFuZGxlQ29sdW1uRmlsdGVyVmFsdWVDaGFuZ2UoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAqbmdJZj1cImNvbHVtbkZpbHRlckVuYWJsZWQoY29sdW1uKVwiXHJcbiAgICAgICAgW3ZhbHVlXT1cImNvbHVtbkZpbHRlclN0YXRlW2NvbHVtbktleShjb2x1bW4pXSA/PyAnJ1wiXHJcbiAgICAgICAgY0Zvcm1Db250cm9sXHJcbiAgICAgICAgc2l6aW5nPVwic21cIlxyXG4gICAgICAvPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3RoPlxyXG48L3RyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb2x1bW5Tb3J0ZXJJY29uVGVtcGxhdGUgbGV0LWNvbHVtblNvcnRlclN0YXRlPlxyXG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtblNvcnRlclN0YXRlXCI+XHJcbiAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2FzYydcIiBjbGFzcz1cImZsb2F0LWVuZCBtZS0xXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzb3J0aW5nSWNvbkFzY2VuZGluZ1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2Rlc2MnXCIgY2xhc3M9XCJmbG9hdC1lbmQgbWUtMVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic29ydGluZ0ljb25EZXNjZW5kaW5nVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgY2xhc3M9XCJvcGFjaXR5LTI1IGZsb2F0LWVuZCBtZS0xXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzb3J0aW5nSWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tdG9kbzogc29ydGluZ0ljb25DdXN0b20gVGVtcGxhdGVzLS0+XHJcbjxuZy10ZW1wbGF0ZSAjc29ydGluZ0ljb25UZW1wbGF0ZT5cclxuICA8c3ZnXHJcbiAgICBjbGFzcz1cImljb24gaWNvbi1jdXN0b20tc2l6ZVwiXHJcbiAgICByb2xlPVwiaW1nXCJcclxuICAgIHZpZXdCb3g9XCIwIDAgNTEyIDUxMlwiXHJcbiAgICB3aWR0aD1cIjE4XCJcclxuICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gID5cclxuICAgIDxwb2x5Z29uXHJcbiAgICAgIGNsYXNzPVwiY2ktcHJpbWFyeVwiXHJcbiAgICAgIGZpbGw9XCJ2YXIoLS1jaS1wcmltYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpXCJcclxuICAgICAgcG9pbnRzPVwiMzg0IDQzMy4zNzMgMzg0IDE2MCAzNTIgMTYwIDM1MiA0MzQuNTEgMjgyLjE3NyAzNjQuNjg3IDI1OS41NSAzODcuMzEzIDM2Ny40MzIgNDk1LjE5NiA0NzUuMzEzIDM4Ny4zMTMgNDUyLjY4NyAzNjQuNjg3IDM4NCA0MzMuMzczXCJcclxuICAgID48L3BvbHlnb24+XHJcbiAgICA8cG9seWdvblxyXG4gICAgICBjbGFzcz1cImNpLXByaW1hcnlcIlxyXG4gICAgICBmaWxsPVwidmFyKC0tY2ktcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKVwiXHJcbiAgICAgIHBvaW50cz1cIjE1OS40MzIgMTcuMzcyIDUxLjU1IDEyNS4yNTUgNzQuMTc3IDE0Ny44ODIgMTQ0IDc4LjA1OSAxNDQgMzUyIDE3NiAzNTIgMTc2IDc5LjE5NSAyNDQuNjg3IDE0Ny44ODIgMjY3LjMxMyAxMjUuMjU1IDE1OS40MzIgMTcuMzcyXCJcclxuICAgID48L3BvbHlnb24+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3NvcnRpbmdJY29uQXNjZW5kaW5nVGVtcGxhdGU+XHJcbiAgPHN2Z1xyXG4gICAgY2xhc3M9XCJpY29uIGljb24tY3VzdG9tLXNpemVcIlxyXG4gICAgcm9sZT1cImltZ1wiXHJcbiAgICB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIlxyXG4gICAgd2lkdGg9XCIxOFwiXHJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICA+XHJcbiAgICA8cG9seWdvblxyXG4gICAgICBjbGFzcz1cImNpLXByaW1hcnlcIlxyXG4gICAgICBmaWxsPVwidmFyKC0tY2ktcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKVwiXHJcbiAgICAgIHBvaW50cz1cIjM5MC42MjQgMTUwLjYyNSAyNTYgMTYgMTIxLjM3NiAxNTAuNjI1IDE0NC4wMDQgMTczLjI1MiAyNDAuMDAxIDc3LjI1NCAyNDAuMDAxIDQ5NS4yMzYgMjcyLjAwMSA0OTUuMjM2IDI3Mi4wMDEgNzcuMjU3IDM2Ny45OTYgMTczLjI1MiAzOTAuNjI0IDE1MC42MjVcIlxyXG4gICAgPjwvcG9seWdvbj5cclxuICA8L3N2Zz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc29ydGluZ0ljb25EZXNjZW5kaW5nVGVtcGxhdGU+XHJcbiAgPHN2Z1xyXG4gICAgY2xhc3M9XCJpY29uIGljb24tY3VzdG9tLXNpemVcIlxyXG4gICAgcm9sZT1cImltZ1wiXHJcbiAgICB2aWV3Qm94PVwiMCAwIDUxMiA1MTJcIlxyXG4gICAgd2lkdGg9XCIxOFwiXHJcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICA+XHJcbiAgICA8cG9seWdvblxyXG4gICAgICBjbGFzcz1cImNpLXByaW1hcnlcIlxyXG4gICAgICBmaWxsPVwidmFyKC0tY2ktcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKVwiXHJcbiAgICAgIHBvaW50cz1cIjM2Ny45OTcgMzM4Ljc1IDI3MS45OTkgNDM0Ljc0NyAyNzEuOTk5IDE3LjUwMyAyMzkuOTk5IDE3LjUwMyAyMzkuOTk5IDQzNC43NDUgMTQ0LjAwMyAzMzguNzUgMTIxLjM3NiAzNjEuMzc3IDI1NiA0OTYgMzkwLjYyNCAzNjEuMzc3IDM2Ny45OTcgMzM4Ljc1XCJcclxuICAgID48L3BvbHlnb24+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==