igniteui-angular 16.0.0-beta.2 → 16.0.0-beta.4

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 (349) hide show
  1. package/esm2022/lib/accordion/accordion.component.mjs +4 -4
  2. package/esm2022/lib/accordion/accordion.module.mjs +5 -5
  3. package/esm2022/lib/action-strip/action-strip.component.mjs +7 -7
  4. package/esm2022/lib/action-strip/action-strip.module.mjs +5 -5
  5. package/esm2022/lib/action-strip/grid-actions/grid-action-button.component.mjs +4 -4
  6. package/esm2022/lib/action-strip/grid-actions/grid-actions-base.directive.mjs +4 -4
  7. package/esm2022/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +4 -4
  8. package/esm2022/lib/action-strip/grid-actions/grid-pinning-actions.component.mjs +4 -4
  9. package/esm2022/lib/avatar/avatar.component.mjs +4 -4
  10. package/esm2022/lib/avatar/avatar.module.mjs +5 -5
  11. package/esm2022/lib/badge/badge.component.mjs +4 -4
  12. package/esm2022/lib/badge/badge.module.mjs +5 -5
  13. package/esm2022/lib/banner/banner.component.mjs +4 -4
  14. package/esm2022/lib/banner/banner.directives.mjs +4 -4
  15. package/esm2022/lib/banner/banner.module.mjs +5 -5
  16. package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +4 -4
  17. package/esm2022/lib/buttonGroup/buttongroup.module.mjs +5 -5
  18. package/esm2022/lib/calendar/calendar-base.mjs +4 -4
  19. package/esm2022/lib/calendar/calendar.component.mjs +4 -4
  20. package/esm2022/lib/calendar/calendar.directives.mjs +16 -16
  21. package/esm2022/lib/calendar/calendar.module.mjs +5 -5
  22. package/esm2022/lib/calendar/days-view/day-item.component.mjs +4 -4
  23. package/esm2022/lib/calendar/days-view/days-view.component.mjs +4 -4
  24. package/esm2022/lib/calendar/days-view/daysview-navigation.service.mjs +4 -4
  25. package/esm2022/lib/calendar/month-picker/month-picker-base.mjs +4 -4
  26. package/esm2022/lib/calendar/month-picker/month-picker.component.mjs +4 -4
  27. package/esm2022/lib/calendar/months-view/months-view.component.mjs +4 -4
  28. package/esm2022/lib/calendar/months-view.pipe.mjs +7 -7
  29. package/esm2022/lib/calendar/years-view/years-view.component.mjs +7 -7
  30. package/esm2022/lib/card/card.component.mjs +28 -28
  31. package/esm2022/lib/card/card.module.mjs +5 -5
  32. package/esm2022/lib/carousel/carousel.component.mjs +7 -7
  33. package/esm2022/lib/carousel/carousel.directives.mjs +10 -10
  34. package/esm2022/lib/carousel/carousel.module.mjs +5 -5
  35. package/esm2022/lib/carousel/slide.component.mjs +4 -4
  36. package/esm2022/lib/checkbox/checkbox.component.mjs +4 -4
  37. package/esm2022/lib/checkbox/checkbox.module.mjs +5 -5
  38. package/esm2022/lib/chips/chip.component.mjs +4 -4
  39. package/esm2022/lib/chips/chips-area.component.mjs +4 -4
  40. package/esm2022/lib/chips/chips.module.mjs +5 -5
  41. package/esm2022/lib/combo/combo-add-item.component.mjs +4 -4
  42. package/esm2022/lib/combo/combo-dropdown.component.mjs +4 -4
  43. package/esm2022/lib/combo/combo-item.component.mjs +4 -4
  44. package/esm2022/lib/combo/combo.api.mjs +4 -4
  45. package/esm2022/lib/combo/combo.common.mjs +4 -4
  46. package/esm2022/lib/combo/combo.component.mjs +4 -4
  47. package/esm2022/lib/combo/combo.directives.mjs +25 -25
  48. package/esm2022/lib/combo/combo.module.mjs +5 -5
  49. package/esm2022/lib/combo/combo.pipes.mjs +7 -7
  50. package/esm2022/lib/core/density.mjs +4 -4
  51. package/esm2022/lib/core/navigation/directives.mjs +7 -7
  52. package/esm2022/lib/core/navigation/nav.service.mjs +4 -4
  53. package/esm2022/lib/core/selection.mjs +4 -4
  54. package/esm2022/lib/core/touch.mjs +4 -4
  55. package/esm2022/lib/core/utils.mjs +4 -4
  56. package/esm2022/lib/date-common/calendar-container/calendar-container.component.mjs +4 -4
  57. package/esm2022/lib/date-common/picker-base.directive.mjs +4 -4
  58. package/esm2022/lib/date-common/picker-icons.common.mjs +10 -10
  59. package/esm2022/lib/date-picker/date-picker.component.mjs +4 -4
  60. package/esm2022/lib/date-picker/date-picker.module.mjs +5 -5
  61. package/esm2022/lib/date-range-picker/date-range-picker-inputs.common.mjs +16 -16
  62. package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +4 -4
  63. package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +5 -5
  64. package/esm2022/lib/dialog/dialog.component.mjs +4 -4
  65. package/esm2022/lib/dialog/dialog.directives.mjs +7 -7
  66. package/esm2022/lib/dialog/dialog.module.mjs +5 -5
  67. package/esm2022/lib/directives/autocomplete/autocomplete.directive.mjs +4 -4
  68. package/esm2022/lib/directives/autocomplete/autocomplete.module.mjs +5 -5
  69. package/esm2022/lib/directives/button/button.directive.mjs +4 -4
  70. package/esm2022/lib/directives/button/button.module.mjs +5 -5
  71. package/esm2022/lib/directives/date-time-editor/date-time-editor.directive.mjs +4 -4
  72. package/esm2022/lib/directives/date-time-editor/date-time-editor.module.mjs +5 -5
  73. package/esm2022/lib/directives/divider/divider.directive.mjs +4 -4
  74. package/esm2022/lib/directives/divider/divider.module.mjs +5 -5
  75. package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +13 -13
  76. package/esm2022/lib/directives/drag-drop/drag-drop.module.mjs +5 -5
  77. package/esm2022/lib/directives/filter/filter.directive.mjs +7 -7
  78. package/esm2022/lib/directives/filter/filter.module.mjs +5 -5
  79. package/esm2022/lib/directives/focus/focus.directive.mjs +4 -4
  80. package/esm2022/lib/directives/focus/focus.module.mjs +5 -5
  81. package/esm2022/lib/directives/focus-trap/focus-trap.directive.mjs +4 -4
  82. package/esm2022/lib/directives/focus-trap/focus-trap.module.mjs +5 -5
  83. package/esm2022/lib/directives/for-of/base.helper.component.mjs +4 -4
  84. package/esm2022/lib/directives/for-of/display.container.mjs +4 -4
  85. package/esm2022/lib/directives/for-of/for_of.directive.mjs +7 -7
  86. package/esm2022/lib/directives/for-of/for_of.module.mjs +5 -5
  87. package/esm2022/lib/directives/for-of/for_of.sync.service.mjs +7 -7
  88. package/esm2022/lib/directives/for-of/horizontal.virtual.helper.component.mjs +4 -4
  89. package/esm2022/lib/directives/for-of/virtual.helper.component.mjs +4 -4
  90. package/esm2022/lib/directives/form-control/form-control.directive.mjs +4 -4
  91. package/esm2022/lib/directives/form-control/form-control.module.mjs +5 -5
  92. package/esm2022/lib/directives/hint/hint.directive.mjs +4 -4
  93. package/esm2022/lib/directives/input/input.directive.mjs +14 -4
  94. package/esm2022/lib/directives/label/label.directive.mjs +4 -4
  95. package/esm2022/lib/directives/layout/layout.directive.mjs +7 -7
  96. package/esm2022/lib/directives/layout/layout.module.mjs +5 -5
  97. package/esm2022/lib/directives/mask/mask-parsing.service.mjs +4 -4
  98. package/esm2022/lib/directives/mask/mask.directive.mjs +4 -4
  99. package/esm2022/lib/directives/mask/mask.module.mjs +5 -5
  100. package/esm2022/lib/directives/notification/notifications.directive.mjs +4 -4
  101. package/esm2022/lib/directives/prefix/prefix.directive.mjs +4 -4
  102. package/esm2022/lib/directives/radio/radio-group.directive.mjs +4 -4
  103. package/esm2022/lib/directives/radio/radio-group.module.mjs +5 -5
  104. package/esm2022/lib/directives/ripple/ripple.directive.mjs +4 -4
  105. package/esm2022/lib/directives/ripple/ripple.module.mjs +5 -5
  106. package/esm2022/lib/directives/scroll-inertia/scroll_inertia.directive.mjs +4 -4
  107. package/esm2022/lib/directives/scroll-inertia/scroll_inertia.module.mjs +5 -5
  108. package/esm2022/lib/directives/suffix/suffix.directive.mjs +4 -4
  109. package/esm2022/lib/directives/template-outlet/template_outlet.directive.mjs +4 -4
  110. package/esm2022/lib/directives/text-highlight/text-highlight.directive.mjs +4 -4
  111. package/esm2022/lib/directives/text-highlight/text-highlight.module.mjs +5 -5
  112. package/esm2022/lib/directives/text-selection/text-selection.directive.mjs +4 -4
  113. package/esm2022/lib/directives/text-selection/text-selection.module.mjs +5 -5
  114. package/esm2022/lib/directives/toggle/toggle.directive.mjs +10 -10
  115. package/esm2022/lib/directives/toggle/toggle.module.mjs +5 -5
  116. package/esm2022/lib/directives/tooltip/tooltip-target.directive.mjs +4 -4
  117. package/esm2022/lib/directives/tooltip/tooltip.component.mjs +4 -4
  118. package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +4 -4
  119. package/esm2022/lib/directives/tooltip/tooltip.module.mjs +5 -5
  120. package/esm2022/lib/drop-down/drop-down-group.component.mjs +4 -4
  121. package/esm2022/lib/drop-down/drop-down-item.base.mjs +4 -4
  122. package/esm2022/lib/drop-down/drop-down-item.component.mjs +4 -4
  123. package/esm2022/lib/drop-down/drop-down-navigation.directive.mjs +4 -4
  124. package/esm2022/lib/drop-down/drop-down.base.mjs +4 -4
  125. package/esm2022/lib/drop-down/drop-down.component.mjs +4 -4
  126. package/esm2022/lib/drop-down/drop-down.module.mjs +5 -5
  127. package/esm2022/lib/expansion-panel/expansion-panel-body.component.mjs +4 -4
  128. package/esm2022/lib/expansion-panel/expansion-panel-header.component.mjs +4 -4
  129. package/esm2022/lib/expansion-panel/expansion-panel.common.mjs +4 -4
  130. package/esm2022/lib/expansion-panel/expansion-panel.component.mjs +4 -4
  131. package/esm2022/lib/expansion-panel/expansion-panel.directives.mjs +10 -10
  132. package/esm2022/lib/expansion-panel/expansion-panel.module.mjs +5 -5
  133. package/esm2022/lib/expansion-panel/toggle-animation-component.mjs +4 -4
  134. package/esm2022/lib/grids/api.service.mjs +4 -4
  135. package/esm2022/lib/grids/cell.component.mjs +4 -4
  136. package/esm2022/lib/grids/column-actions/column-actions-base.directive.mjs +4 -4
  137. package/esm2022/lib/grids/column-actions/column-actions.component.mjs +13 -13
  138. package/esm2022/lib/grids/column-actions/column-hiding.directive.mjs +4 -4
  139. package/esm2022/lib/grids/column-actions/column-pinning.directive.mjs +4 -4
  140. package/esm2022/lib/grids/column-actions/public_api.mjs +13 -0
  141. package/esm2022/lib/grids/columns/column-group.component.mjs +4 -4
  142. package/esm2022/lib/grids/columns/column-layout.component.mjs +4 -4
  143. package/esm2022/lib/grids/columns/column.component.mjs +4 -4
  144. package/esm2022/lib/grids/columns/templates.directive.mjs +25 -25
  145. package/esm2022/lib/grids/columns/validators.directive.mjs +22 -22
  146. package/esm2022/lib/grids/common/crud.service.mjs +4 -4
  147. package/esm2022/lib/grids/common/pipes.mjs +55 -55
  148. package/esm2022/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.mjs +4 -4
  149. package/esm2022/lib/grids/filtering/base/grid-filtering-cell.component.mjs +4 -4
  150. package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +4 -4
  151. package/esm2022/lib/grids/filtering/excel-style/base-filtering.component.mjs +4 -4
  152. package/esm2022/lib/grids/filtering/excel-style/excel-style-clear-filters.component.mjs +4 -4
  153. package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +4 -4
  154. package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +4 -4
  155. package/esm2022/lib/grids/filtering/excel-style/excel-style-date-expression.component.mjs +4 -4
  156. package/esm2022/lib/grids/filtering/excel-style/excel-style-default-expression.component.mjs +4 -4
  157. package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +10 -10
  158. package/esm2022/lib/grids/filtering/excel-style/excel-style-header.component.mjs +4 -4
  159. package/esm2022/lib/grids/filtering/excel-style/excel-style-hiding.component.mjs +4 -4
  160. package/esm2022/lib/grids/filtering/excel-style/excel-style-moving.component.mjs +4 -4
  161. package/esm2022/lib/grids/filtering/excel-style/excel-style-pinning.component.mjs +4 -4
  162. package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +7 -7
  163. package/esm2022/lib/grids/filtering/excel-style/excel-style-selecting.component.mjs +4 -4
  164. package/esm2022/lib/grids/filtering/excel-style/excel-style-sorting.component.mjs +4 -4
  165. package/esm2022/lib/grids/filtering/grid-filtering.service.mjs +4 -4
  166. package/esm2022/lib/grids/grid/expandable-cell.component.mjs +4 -4
  167. package/esm2022/lib/grids/grid/grid-api.service.mjs +4 -4
  168. package/esm2022/lib/grids/grid/grid-row.component.mjs +4 -4
  169. package/esm2022/lib/grids/grid/grid-validation.service.mjs +4 -4
  170. package/esm2022/lib/grids/grid/grid.component.mjs +5 -6
  171. package/esm2022/lib/grids/grid/grid.details.pipe.mjs +4 -4
  172. package/esm2022/lib/grids/grid/grid.directives.mjs +34 -34
  173. package/esm2022/lib/grids/grid/grid.module.mjs +27 -24
  174. package/esm2022/lib/grids/grid/grid.pipes.mjs +13 -13
  175. package/esm2022/lib/grids/grid/grid.summary.pipe.mjs +4 -4
  176. package/esm2022/lib/grids/grid/groupby-row.component.mjs +4 -4
  177. package/esm2022/lib/grids/grid-base.directive.mjs +4 -4
  178. package/esm2022/lib/grids/grid-footer/grid-footer.component.mjs +4 -4
  179. package/esm2022/lib/grids/grid-mrl-navigation.service.mjs +4 -4
  180. package/esm2022/lib/grids/grid-navigation.service.mjs +4 -4
  181. package/esm2022/lib/grids/grid.common.mjs +4 -4
  182. package/esm2022/lib/grids/grid.rowEdit.directive.mjs +16 -16
  183. package/esm2022/lib/grids/grouping/grid-group-by-area.component.mjs +4 -4
  184. package/esm2022/lib/grids/grouping/group-by-area.directive.mjs +7 -7
  185. package/esm2022/lib/grids/grouping/tree-grid-group-by-area.component.mjs +4 -4
  186. package/esm2022/lib/grids/headers/grid-header-group.component.mjs +4 -4
  187. package/esm2022/lib/grids/headers/grid-header-row.component.mjs +4 -4
  188. package/esm2022/lib/grids/headers/grid-header.component.mjs +4 -4
  189. package/esm2022/lib/grids/headers/pipes.mjs +10 -10
  190. package/esm2022/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +4 -4
  191. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-api.service.mjs +4 -4
  192. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +4 -4
  193. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +4 -4
  194. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +7 -7
  195. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.module.mjs +27 -24
  196. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.pipes.mjs +7 -7
  197. package/esm2022/lib/grids/hierarchical-grid/hierarchical-row.component.mjs +4 -4
  198. package/esm2022/lib/grids/hierarchical-grid/row-island-api.service.mjs +4 -4
  199. package/esm2022/lib/grids/hierarchical-grid/row-island.component.mjs +4 -4
  200. package/esm2022/lib/grids/moving/moving.drag.directive.mjs +4 -4
  201. package/esm2022/lib/grids/moving/moving.drop.directive.mjs +4 -4
  202. package/esm2022/lib/grids/moving/moving.service.mjs +4 -4
  203. package/esm2022/lib/grids/pivot-grid/pivot-data-selector.component.mjs +4 -4
  204. package/esm2022/lib/grids/pivot-grid/pivot-filtering.service.mjs +4 -4
  205. package/esm2022/lib/grids/pivot-grid/pivot-grid-navigation.service.mjs +4 -4
  206. package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +4 -4
  207. package/esm2022/lib/grids/pivot-grid/pivot-grid.directives.mjs +4 -4
  208. package/esm2022/lib/grids/pivot-grid/pivot-grid.module.mjs +27 -24
  209. package/esm2022/lib/grids/pivot-grid/pivot-grid.pipes.mjs +31 -31
  210. package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +4 -4
  211. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-content.component.mjs +4 -4
  212. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.mjs +4 -4
  213. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header.component.mjs +4 -4
  214. package/esm2022/lib/grids/pivot-grid/pivot-row.component.mjs +4 -4
  215. package/esm2022/lib/grids/public_api.mjs +5 -2
  216. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.mjs +4 -4
  217. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizer.component.mjs +4 -4
  218. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizing.service.mjs +4 -4
  219. package/esm2022/lib/grids/resizing/resize-handle.directive.mjs +4 -4
  220. package/esm2022/lib/grids/resizing/resizer.component.mjs +4 -4
  221. package/esm2022/lib/grids/resizing/resizer.directive.mjs +4 -4
  222. package/esm2022/lib/grids/resizing/resizing.service.mjs +4 -4
  223. package/esm2022/lib/grids/row-drag.directive.mjs +10 -10
  224. package/esm2022/lib/grids/row.directive.mjs +4 -4
  225. package/esm2022/lib/grids/selection/drag-select.directive.mjs +4 -4
  226. package/esm2022/lib/grids/selection/row-selectors.mjs +10 -10
  227. package/esm2022/lib/grids/selection/selection.service.mjs +4 -4
  228. package/esm2022/lib/grids/state.directive.mjs +4 -4
  229. package/esm2022/lib/grids/summaries/grid-root-summary.pipe.mjs +4 -4
  230. package/esm2022/lib/grids/summaries/grid-summary.service.mjs +4 -4
  231. package/esm2022/lib/grids/summaries/summary-cell.component.mjs +4 -4
  232. package/esm2022/lib/grids/summaries/summary-row.component.mjs +4 -4
  233. package/esm2022/lib/grids/toolbar/common.mjs +16 -16
  234. package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +4 -4
  235. package/esm2022/lib/grids/toolbar/grid-toolbar-exporter.component.mjs +4 -4
  236. package/esm2022/lib/grids/toolbar/grid-toolbar-hiding.component.mjs +4 -4
  237. package/esm2022/lib/grids/toolbar/grid-toolbar-pinning.component.mjs +4 -4
  238. package/esm2022/lib/grids/toolbar/grid-toolbar.base.mjs +7 -7
  239. package/esm2022/lib/grids/toolbar/grid-toolbar.component.mjs +4 -4
  240. package/esm2022/lib/grids/tree-grid/public_api.mjs +7 -1
  241. package/esm2022/lib/grids/tree-grid/tree-cell.component.mjs +4 -4
  242. package/esm2022/lib/grids/tree-grid/tree-grid-api.service.mjs +4 -4
  243. package/esm2022/lib/grids/tree-grid/tree-grid-row.component.mjs +4 -4
  244. package/esm2022/lib/grids/tree-grid/tree-grid-selection.service.mjs +4 -4
  245. package/esm2022/lib/grids/tree-grid/tree-grid.component.mjs +4 -4
  246. package/esm2022/lib/grids/tree-grid/tree-grid.directives.mjs +4 -4
  247. package/esm2022/lib/grids/tree-grid/tree-grid.filtering.pipe.mjs +4 -4
  248. package/esm2022/lib/grids/tree-grid/tree-grid.grouping.pipe.mjs +4 -4
  249. package/esm2022/lib/grids/tree-grid/tree-grid.module.mjs +44 -39
  250. package/esm2022/lib/grids/tree-grid/tree-grid.pipes.mjs +22 -22
  251. package/esm2022/lib/grids/tree-grid/tree-grid.summary.pipe.mjs +4 -4
  252. package/esm2022/lib/icon/icon.component.mjs +4 -4
  253. package/esm2022/lib/icon/icon.module.mjs +5 -5
  254. package/esm2022/lib/icon/icon.service.mjs +4 -4
  255. package/esm2022/lib/input-group/input-group.component.mjs +4 -4
  256. package/esm2022/lib/input-group/input-group.module.mjs +5 -5
  257. package/esm2022/lib/list/list-item.component.mjs +4 -4
  258. package/esm2022/lib/list/list.common.mjs +16 -16
  259. package/esm2022/lib/list/list.component.mjs +19 -19
  260. package/esm2022/lib/list/list.module.mjs +5 -5
  261. package/esm2022/lib/navbar/navbar.component.mjs +10 -10
  262. package/esm2022/lib/navbar/navbar.module.mjs +5 -5
  263. package/esm2022/lib/navigation-drawer/navigation-drawer.component.mjs +4 -4
  264. package/esm2022/lib/navigation-drawer/navigation-drawer.directives.mjs +10 -10
  265. package/esm2022/lib/navigation-drawer/navigation-drawer.module.mjs +5 -5
  266. package/esm2022/lib/paginator/paginator-interfaces.mjs +4 -4
  267. package/esm2022/lib/paginator/paginator.component.mjs +13 -13
  268. package/esm2022/lib/paginator/paginator.module.mjs +5 -5
  269. package/esm2022/lib/progressbar/progressbar.common.mjs +7 -7
  270. package/esm2022/lib/progressbar/progressbar.component.mjs +10 -10
  271. package/esm2022/lib/progressbar/progressbar.module.mjs +5 -5
  272. package/esm2022/lib/query-builder/query-builder-header.component.mjs +4 -4
  273. package/esm2022/lib/query-builder/query-builder.component.mjs +7 -7
  274. package/esm2022/lib/query-builder/query-builder.module.mjs +5 -5
  275. package/esm2022/lib/radio/radio.component.mjs +4 -4
  276. package/esm2022/lib/select/select-group.component.mjs +4 -4
  277. package/esm2022/lib/select/select-item.component.mjs +4 -4
  278. package/esm2022/lib/select/select-navigation.directive.mjs +4 -4
  279. package/esm2022/lib/select/select.component.mjs +13 -13
  280. package/esm2022/lib/select/select.module.mjs +5 -5
  281. package/esm2022/lib/services/animation/angular-animation-service.mjs +4 -4
  282. package/esm2022/lib/services/csv/csv-exporter.mjs +4 -4
  283. package/esm2022/lib/services/direction/directionality.mjs +4 -4
  284. package/esm2022/lib/services/excel/excel-exporter.mjs +4 -4
  285. package/esm2022/lib/services/overlay/overlay.mjs +4 -4
  286. package/esm2022/lib/services/transaction/transaction-factory.service.mjs +7 -7
  287. package/esm2022/lib/simple-combo/simple-combo.component.mjs +4 -4
  288. package/esm2022/lib/simple-combo/simple-combo.module.mjs +5 -5
  289. package/esm2022/lib/slider/label/thumb-label.component.mjs +4 -4
  290. package/esm2022/lib/slider/slider.common.mjs +10 -10
  291. package/esm2022/lib/slider/slider.component.mjs +4 -4
  292. package/esm2022/lib/slider/slider.module.mjs +5 -5
  293. package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +4 -4
  294. package/esm2022/lib/slider/ticks/tick.pipe.mjs +4 -4
  295. package/esm2022/lib/slider/ticks/ticks.component.mjs +4 -4
  296. package/esm2022/lib/snackbar/snackbar.component.mjs +4 -4
  297. package/esm2022/lib/snackbar/snackbar.module.mjs +5 -5
  298. package/esm2022/lib/splitter/splitter-pane/splitter-pane.component.mjs +4 -4
  299. package/esm2022/lib/splitter/splitter.component.mjs +7 -7
  300. package/esm2022/lib/splitter/splitter.module.mjs +5 -5
  301. package/esm2022/lib/stepper/step/step.component.mjs +4 -4
  302. package/esm2022/lib/stepper/stepper.component.mjs +4 -4
  303. package/esm2022/lib/stepper/stepper.directive.mjs +22 -22
  304. package/esm2022/lib/stepper/stepper.module.mjs +5 -5
  305. package/esm2022/lib/stepper/stepper.service.mjs +4 -4
  306. package/esm2022/lib/switch/switch.component.mjs +4 -4
  307. package/esm2022/lib/switch/switch.module.mjs +5 -5
  308. package/esm2022/lib/tabs/bottom-nav/bottom-nav-content.component.mjs +4 -4
  309. package/esm2022/lib/tabs/bottom-nav/bottom-nav-header.component.mjs +4 -4
  310. package/esm2022/lib/tabs/bottom-nav/bottom-nav-item.component.mjs +4 -4
  311. package/esm2022/lib/tabs/bottom-nav/bottom-nav.component.mjs +4 -4
  312. package/esm2022/lib/tabs/bottom-nav/bottom-nav.directives.mjs +7 -7
  313. package/esm2022/lib/tabs/bottom-nav/bottom-nav.module.mjs +5 -5
  314. package/esm2022/lib/tabs/tab-content.directive.mjs +4 -4
  315. package/esm2022/lib/tabs/tab-header.directive.mjs +4 -4
  316. package/esm2022/lib/tabs/tab-item.directive.mjs +4 -4
  317. package/esm2022/lib/tabs/tabs/tab-content.component.mjs +4 -4
  318. package/esm2022/lib/tabs/tabs/tab-header.component.mjs +4 -4
  319. package/esm2022/lib/tabs/tabs/tab-item.component.mjs +4 -4
  320. package/esm2022/lib/tabs/tabs/tabs.component.mjs +4 -4
  321. package/esm2022/lib/tabs/tabs/tabs.directives.mjs +7 -7
  322. package/esm2022/lib/tabs/tabs/tabs.module.mjs +5 -5
  323. package/esm2022/lib/tabs/tabs.directive.mjs +4 -4
  324. package/esm2022/lib/time-picker/time-picker.component.mjs +4 -4
  325. package/esm2022/lib/time-picker/time-picker.directives.mjs +7 -7
  326. package/esm2022/lib/time-picker/time-picker.module.mjs +5 -5
  327. package/esm2022/lib/time-picker/time-picker.pipes.mjs +7 -7
  328. package/esm2022/lib/toast/toast.component.mjs +4 -4
  329. package/esm2022/lib/toast/toast.module.mjs +5 -5
  330. package/esm2022/lib/tree/tree-navigation.service.mjs +4 -4
  331. package/esm2022/lib/tree/tree-node/tree-node.component.mjs +7 -7
  332. package/esm2022/lib/tree/tree-selection.service.mjs +4 -4
  333. package/esm2022/lib/tree/tree.component.mjs +10 -10
  334. package/esm2022/lib/tree/tree.module.mjs +5 -5
  335. package/esm2022/lib/tree/tree.service.mjs +4 -4
  336. package/fesm2022/igniteui-angular.mjs +3098 -3079
  337. package/fesm2022/igniteui-angular.mjs.map +1 -1
  338. package/lib/directives/input/input.directive.d.ts +3 -0
  339. package/lib/grids/column-actions/public_api.d.ts +7 -0
  340. package/lib/grids/grid/grid.module.d.ts +23 -20
  341. package/lib/grids/grid/public_api.d.ts +1 -1
  342. package/lib/grids/hierarchical-grid/hierarchical-grid.module.d.ts +23 -20
  343. package/lib/grids/hierarchical-grid/public_api.d.ts +1 -1
  344. package/lib/grids/pivot-grid/pivot-grid.module.d.ts +23 -20
  345. package/lib/grids/pivot-grid/public_api.d.ts +1 -1
  346. package/lib/grids/public_api.d.ts +2 -1
  347. package/lib/grids/tree-grid/public_api.d.ts +5 -1
  348. package/lib/grids/tree-grid/tree-grid.module.d.ts +40 -35
  349. package/package.json +6 -6
@@ -202,10 +202,10 @@ export class IgxGridGroupByRowComponent {
202
202
  get showRowSelectors() {
203
203
  return this.grid.rowSelection !== GridSelectionMode.none && !this.hideGroupRowSelectors;
204
204
  }
205
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxGridGroupByRowComponent, deps: [{ token: IGX_GRID_BASE }, { token: i1.IgxGridSelectionService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i2.IgxFilteringService }], target: i0.ɵɵFactoryTarget.Component }); }
206
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0-rc.4", type: IgxGridGroupByRowComponent, isStandalone: true, selector: "igx-grid-groupby-row", inputs: { hideGroupRowSelectors: "hideGroupRowSelectors", rowDraggable: "rowDraggable", index: "index", gridID: "gridID", groupRow: "groupRow", isFocused: "isFocused" }, host: { listeners: { "pointerdown": "activate()" }, properties: { "attr.aria-expanded": "this.expanded", "attr.aria-describedby": "this.describedBy", "attr.data-rowIndex": "this.dataRowIndex", "attr.id": "this.attrCellID", "class": "this.styleClasses" } }, viewQueries: [{ propertyName: "groupContent", first: true, predicate: ["groupContent"], descendants: true, static: true }, { propertyName: "defaultGroupByExpandedTemplate", first: true, predicate: ["defaultGroupByExpandedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultGroupByCollapsedTemplate", first: true, predicate: ["defaultGroupByCollapsedTemplate"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-container #defaultGroupRow>\n\n <ng-container *ngIf=\"rowDraggable\">\n <div class=\"igx-grid__drag-indicator igx-grid__tr-action\">\n <igx-icon [style.visibility]=\"'hidden'\">drag_indicator</igx-icon>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"showRowSelectors\">\n <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" style=\"background: none;\" (pointerdown)=\"$event.preventDefault()\"\n (click)=\"onGroupSelectorClick($event)\">\n <ng-template #groupByRowSelector *ngTemplateOutlet=\"\n this.grid.groupByRowSelectorTemplate ? this.grid.groupByRowSelectorTemplate : groupByRowSelectorBaseTemplate;\n context: { $implicit: {\n selectedCount: selectedRowsInTheGroup.length,\n totalCount: this.groupRow.records.length,\n groupRow: this.groupRow }}\">\n </ng-template>\n </div>\n </ng-container>\n\n <div (click)=\"toggle()\" class=\"igx-grid__grouping-indicator\">\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\">\n </ng-container>\n </div>\n\n <div class=\"igx-grid__group-content\" #groupContent>\n <ng-container\n *ngTemplateOutlet=\"grid.groupRowTemplate ? grid.groupRowTemplate : defaultGroupByTemplate; context: { $implicit: groupRow }\">\n </ng-container>\n </div>\n\n <ng-template #defaultGroupByExpandedTemplate>\n <igx-icon>expand_more</igx-icon>\n </ng-template>\n\n <ng-template #defaultGroupByCollapsedTemplate>\n <igx-icon>chevron_right</igx-icon>\n </ng-template>\n\n\n <ng-template #defaultGroupByTemplate>\n <div class=\"igx-group-label\">\n <igx-icon class=\"igx-group-label__icon\">group_work</igx-icon>\n <span class=\"igx-group-label__column-name\">\n {{ groupRow.column && groupRow.column.header ?\n groupRow.column.header :\n (groupRow.expression ? groupRow.expression.fieldName : '') }}:\n </span>\n\n <span class=\"igx-group-label__text\">{{\n formatter\n ? (groupRow.value | columnFormatter:formatter:groupRow.records[0]:null)\n : dataType === \"number\"\n ? (groupRow.value | number:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n : (dataType === 'date' || dataType === 'time' || dataType === 'dateTime')\n ? (groupRow.value | date:groupRow.column.pipeArgs.format:groupRow.column.pipeArgs.timezone:grid.locale)\n : dataType === 'currency'\n ? (groupRow.value | currency:currencyCode:groupRow.column.pipeArgs.display:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n : dataType === 'percent'\n ? (groupRow.value | percent:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n : groupRow.value\n }}</span>\n\n <igx-badge [value]=\"groupRow.records ? groupRow.records.length : 0\" class='igx-group-label__count-badge'>\n </igx-badge>\n </div>\n </ng-template>\n <ng-template #groupByRowSelectorBaseTemplate let-context>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"areAllRowsInTheGroupSelected\"\n [disableRipple]=\"true\" [indeterminate]=\"groupByRowCheckboxIndeterminateState\"\n [disabled]=\"this.grid.rowSelection === 'single'\" [aria-label]=\"groupByRowSelectorBaseAriaLabel\"\n #groupByRowCheckbox>\n </igx-checkbox>\n </div>\n </ng-template>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: PercentPipe, name: "percent" }, { kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: IgxBadgeComponent, selector: "igx-badge", inputs: ["id", "type", "value", "icon", "shape"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"], outputs: ["change"] }, { kind: "pipe", type: IgxColumnFormatterPipe, name: "columnFormatter" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
205
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxGridGroupByRowComponent, deps: [{ token: IGX_GRID_BASE }, { token: i1.IgxGridSelectionService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i2.IgxFilteringService }], target: i0.ɵɵFactoryTarget.Component }); }
206
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: IgxGridGroupByRowComponent, isStandalone: true, selector: "igx-grid-groupby-row", inputs: { hideGroupRowSelectors: "hideGroupRowSelectors", rowDraggable: "rowDraggable", index: "index", gridID: "gridID", groupRow: "groupRow", isFocused: "isFocused" }, host: { listeners: { "pointerdown": "activate()" }, properties: { "attr.aria-expanded": "this.expanded", "attr.aria-describedby": "this.describedBy", "attr.data-rowIndex": "this.dataRowIndex", "attr.id": "this.attrCellID", "class": "this.styleClasses" } }, viewQueries: [{ propertyName: "groupContent", first: true, predicate: ["groupContent"], descendants: true, static: true }, { propertyName: "defaultGroupByExpandedTemplate", first: true, predicate: ["defaultGroupByExpandedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultGroupByCollapsedTemplate", first: true, predicate: ["defaultGroupByCollapsedTemplate"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-container #defaultGroupRow>\n\n <ng-container *ngIf=\"rowDraggable\">\n <div class=\"igx-grid__drag-indicator igx-grid__tr-action\">\n <igx-icon [style.visibility]=\"'hidden'\">drag_indicator</igx-icon>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"showRowSelectors\">\n <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" style=\"background: none;\" (pointerdown)=\"$event.preventDefault()\"\n (click)=\"onGroupSelectorClick($event)\">\n <ng-template #groupByRowSelector *ngTemplateOutlet=\"\n this.grid.groupByRowSelectorTemplate ? this.grid.groupByRowSelectorTemplate : groupByRowSelectorBaseTemplate;\n context: { $implicit: {\n selectedCount: selectedRowsInTheGroup.length,\n totalCount: this.groupRow.records.length,\n groupRow: this.groupRow }}\">\n </ng-template>\n </div>\n </ng-container>\n\n <div (click)=\"toggle()\" class=\"igx-grid__grouping-indicator\">\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\">\n </ng-container>\n </div>\n\n <div class=\"igx-grid__group-content\" #groupContent>\n <ng-container\n *ngTemplateOutlet=\"grid.groupRowTemplate ? grid.groupRowTemplate : defaultGroupByTemplate; context: { $implicit: groupRow }\">\n </ng-container>\n </div>\n\n <ng-template #defaultGroupByExpandedTemplate>\n <igx-icon>expand_more</igx-icon>\n </ng-template>\n\n <ng-template #defaultGroupByCollapsedTemplate>\n <igx-icon>chevron_right</igx-icon>\n </ng-template>\n\n\n <ng-template #defaultGroupByTemplate>\n <div class=\"igx-group-label\">\n <igx-icon class=\"igx-group-label__icon\">group_work</igx-icon>\n <span class=\"igx-group-label__column-name\">\n {{ groupRow.column && groupRow.column.header ?\n groupRow.column.header :\n (groupRow.expression ? groupRow.expression.fieldName : '') }}:\n </span>\n\n <span class=\"igx-group-label__text\">{{\n formatter\n ? (groupRow.value | columnFormatter:formatter:groupRow.records[0]:null)\n : dataType === \"number\"\n ? (groupRow.value | number:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n : (dataType === 'date' || dataType === 'time' || dataType === 'dateTime')\n ? (groupRow.value | date:groupRow.column.pipeArgs.format:groupRow.column.pipeArgs.timezone:grid.locale)\n : dataType === 'currency'\n ? (groupRow.value | currency:currencyCode:groupRow.column.pipeArgs.display:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n : dataType === 'percent'\n ? (groupRow.value | percent:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n : groupRow.value\n }}</span>\n\n <igx-badge [value]=\"groupRow.records ? groupRow.records.length : 0\" class='igx-group-label__count-badge'>\n </igx-badge>\n </div>\n </ng-template>\n <ng-template #groupByRowSelectorBaseTemplate let-context>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"areAllRowsInTheGroupSelected\"\n [disableRipple]=\"true\" [indeterminate]=\"groupByRowCheckboxIndeterminateState\"\n [disabled]=\"this.grid.rowSelection === 'single'\" [aria-label]=\"groupByRowSelectorBaseAriaLabel\"\n #groupByRowCheckbox>\n </igx-checkbox>\n </div>\n </ng-template>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: DecimalPipe, name: "number" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: PercentPipe, name: "percent" }, { kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: IgxBadgeComponent, selector: "igx-badge", inputs: ["id", "type", "value", "icon", "shape"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"], outputs: ["change"] }, { kind: "pipe", type: IgxColumnFormatterPipe, name: "columnFormatter" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
207
207
  }
208
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxGridGroupByRowComponent, decorators: [{
208
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IgxGridGroupByRowComponent, decorators: [{
209
209
  type: Component,
210
210
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-grid-groupby-row', standalone: true, imports: [
211
211
  NgIf,
@@ -262,4 +262,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ng
262
262
  type: HostBinding,
263
263
  args: ['class']
264
264
  }] } });
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBieS1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2dyaWQvZ3JvdXBieS1yb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2dyaWQvZ3JvdXBieS1yb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFFWCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVsSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcvQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVyRSxPQUFPLEVBQVksYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7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O3VCQUFDLG9CQUFvQjtnQkFTdEIsV0FBVztzQkFEckIsV0FBVzt1QkFBQyx1QkFBdUI7Z0JBT3pCLFlBQVk7c0JBRHRCLFdBQVc7dUJBQUMsb0JBQW9CO2dCQWdCdEIsVUFBVTtzQkFEcEIsV0FBVzt1QkFBQyxTQUFTO2dCQVlYLFlBQVk7c0JBRHRCLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBPbkRlc3Ryb3ksXG4gICAgSW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgRGVjaW1hbFBpcGUsIERhdGVQaXBlLCBnZXRMb2NhbGVDdXJyZW5jeUNvZGUsIFBlcmNlbnRQaXBlLCBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEZpbHRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkUm93Q29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZFNlbGVjdGlvbk1vZGUgfSBmcm9tICcuLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgSVNlbGVjdGlvbk5vZGUgfSBmcm9tICcuLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgSWd4Q2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4QmFkZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9iYWRnZS9iYWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uRm9ybWF0dGVyUGlwZSB9IGZyb20gJy4uL2NvbW1vbi9waXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtZ3JvdXBieS1yb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncm91cGJ5LXJvdy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIERlY2ltYWxQaXBlLFxuICAgICAgICBEYXRlUGlwZSxcbiAgICAgICAgUGVyY2VudFBpcGUsXG4gICAgICAgIEN1cnJlbmN5UGlwZSxcbiAgICAgICAgSWd4SWNvbkNvbXBvbmVudCxcbiAgICAgICAgSWd4QmFkZ2VDb21wb25lbnQsXG4gICAgICAgIElneENoZWNrYm94Q29tcG9uZW50LFxuICAgICAgICBJZ3hDb2x1bW5Gb3JtYXR0ZXJQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkR3JvdXBCeVJvd0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhpZGVHcm91cFJvd1NlbGVjdG9yczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByb3dEcmFnZ2FibGU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIHRoZSBpbmRleCBvZiB0aGUgcm93LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQtZ3JvdXBieS1yb3cgW2dyaWRJRF09XCJpZFwiIFtpbmRleF09XCJyb3dJbmRleFwiIFtncm91cFJvd109XCJyb3dEYXRhXCIgI3Jvdz48L2lneC1ncmlkLWdyb3VwYnktcm93PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGluZGV4OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIHRoZSBpZCBvZiB0aGUgZ3JpZCB0aGUgcm93IGJlbG9uZ3MgdG8uXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZ3JpZC1ncm91cGJ5LXJvdyBbZ3JpZElEXT1cImlkXCIgW2luZGV4XT1cInJvd0luZGV4XCIgW2dyb3VwUm93XT1cInJvd0RhdGFcIiAjcm93PjwvaWd4LWdyaWQtZ3JvdXBieS1yb3c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ3JpZElEOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzcGVjaWZpZXMgdGhlIGdyb3VwIHJlY29yZCB0aGUgY29tcG9uZW50IHJlbmRlcnMgZm9yLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiA8aWd4LWdyaWQtZ3JvdXBieS1yb3cgW2dyaWRJRF09XCJpZFwiIFtpbmRleF09XCJyb3dJbmRleFwiIFtncm91cFJvd109XCJyb3dEYXRhXCIgI3Jvdz48L2lneC1ncmlkLWdyb3VwYnktcm93PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdyb3VwUm93OiBJR3JvdXBCeVJlY29yZDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByZWZlcmVuY2Ugb2YgdGhlIGNvbnRlbnQgb2YgdGhlIGdyb3VwLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBncm91cFJvd0NvbnRlbnQgPSB0aGlzLmdyaWQxLnJvd0xpc3QuZmlyc3QuZ3JvdXBDb250ZW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyb3VwQ29udGVudCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGdyb3VwQ29udGVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByb3RlY3RlZCBpc0ZvY3VzZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0R3JvdXBCeUV4cGFuZGVkVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEdyb3VwQnlFeHBhbmRlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRHcm91cEJ5Q29sbGFwc2VkVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEdyb3VwQnlDb2xsYXBzZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDc3NDbGFzcyA9ICdpZ3gtZ3JpZF9fZ3JvdXAtcm93JztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcGFkZGluZ0luZGVudGF0aW9uQ3NzQ2xhc3MgPSAnaWd4LWdyaWRfX2dyb3VwLXJvdy0tcGFkZGluZy1sZXZlbCc7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHJvdyBpcyBmb2N1c2VkLlxuICAgICAqIGBgYFxuICAgICAqIGxldCBncmlkUm93Rm9jdXNlZCA9IHRoaXMuZ3JpZDEucm93TGlzdC5maXJzdC5mb2N1c2VkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBY3RpdmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5Q29kZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cFJvdy5jb2x1bW4ucGlwZUFyZ3MuY3VycmVuY3lDb2RlID9cbiAgICAgICAgICAgIHRoaXMuZ3JvdXBSb3cuY29sdW1uLnBpcGVBcmdzLmN1cnJlbmN5Q29kZSA6IGdldExvY2FsZUN1cnJlbmN5Q29kZSh0aGlzLmdyaWQubG9jYWxlKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChJR1hfR1JJRF9CQVNFKSBwdWJsaWMgZ3JpZDogR3JpZFR5cGUsXG4gICAgICAgIHB1YmxpYyBncmlkU2VsZWN0aW9uOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgZmlsdGVyaW5nU2VydmljZTogSWd4RmlsdGVyaW5nU2VydmljZSkge1xuICAgICAgICB0aGlzLmdyaWRTZWxlY3Rpb24uc2VsZWN0ZWRSb3dzQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgQEhvc3RMaXN0ZW5lcigncG9pbnRlcmRvd24nKVxuICAgIHB1YmxpYyBhY3RpdmF0ZSgpIHtcbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRpb24uc2V0QWN0aXZlTm9kZSh7IHJvdzogdGhpcy5pbmRleCB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgZ3JvdXAgcm93IGlzIGV4cGFuZGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBncm91cFJvd0V4cGFuZGVkID0gdGhpcy5ncmlkMS5yb3dMaXN0LmZpcnN0LmV4cGFuZGVkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJylcbiAgICBwdWJsaWMgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cCh0aGlzLmdyb3VwUm93KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKVxuICAgIHB1YmxpYyBnZXQgZGVzY3JpYmVkQnkoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZ3JSb3dFeHByID0gdGhpcy5ncm91cFJvdy5leHByZXNzaW9uICE9PSB1bmRlZmluZWQgPyB0aGlzLmdyb3VwUm93LmV4cHJlc3Npb24uZmllbGROYW1lIDogJyc7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRJRCArICdfJyArIGdyUm93RXhwcjtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1yb3dJbmRleCcpXG4gICAgcHVibGljIGdldCBkYXRhUm93SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHVuZGVybHlpbmcgSFRNTCBlbGVtZW50LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBncm91cFJvd0VsZW1lbnQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIHB1YmxpYyBnZXQgYXR0ckNlbGxJRCgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZ3JpZElEfV8ke3RoaXMuaW5kZXh9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzdHlsZSBjbGFzc2VzIGFwcGxpZWQgdG8gdGhlIGdyb3VwIHJvd3MuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGdyb3VwQ3NzU3R5bGVzID0gdGhpcy5ncmlkMS5yb3dMaXN0LmZpcnN0LnN0eWxlQ2xhc3NlcztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBwdWJsaWMgZ2V0IHN0eWxlQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5kZWZhdWx0Q3NzQ2xhc3N9IGAgKyBgJHt0aGlzLnBhZGRpbmdJbmRlbnRhdGlvbkNzc0NsYXNzfS1gICsgdGhpcy5ncm91cFJvdy5sZXZlbCArXG4gICAgICAgICAgICAodGhpcy5pc0FjdGl2ZSgpID8gYCAke3RoaXMuZGVmYXVsdENzc0NsYXNzfS0tYWN0aXZlYCA6ICcnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlID8gdGhpcy5ncmlkLm5hdmlnYXRpb24uYWN0aXZlTm9kZS5yb3cgPT09IHRoaXMuaW5kZXggOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSb3dJRChyb3dEYXRhKTogSWd4R3JpZFJvd0NvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJvd0RhdGFbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcm93RGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkdyb3VwU2VsZWN0b3JDbGljayhldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5pc011bHRpUm93U2VsZWN0aW9uRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5hcmVBbGxSb3dzSW5UaGVHcm91cFNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRTZWxlY3Rpb24uZGVzZWxlY3RSb3dzKHRoaXMuZ3JvdXBSb3cucmVjb3Jkcy5tYXAoeCA9PiB0aGlzLmdldFJvd0lEKHgpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRTZWxlY3Rpb24uc2VsZWN0Um93cyh0aGlzLmdyb3VwUm93LnJlY29yZHMubWFwKHggPT4gdGhpcy5nZXRSb3dJRCh4KSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgZ3JvdXAgcm93LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQxLnJvd0xpc3QuZmlyc3QudG9nZ2xlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCkge1xuICAgICAgICB0aGlzLmdyaWQudG9nZ2xlR3JvdXAodGhpcy5ncm91cFJvdyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpY29uVGVtcGxhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0V4cGFuZGVkSW5kaWNhdG9yVGVtcGxhdGUgfHwgdGhpcy5kZWZhdWx0R3JvdXBCeUV4cGFuZGVkVGVtcGxhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0NvbGxhcHNlZEluZGljYXRvclRlbXBsYXRlIHx8IHRoaXMuZGVmYXVsdEdyb3VwQnlDb2xsYXBzZWRUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgc2VsZWN0aW9uTm9kZSgpOiBJU2VsZWN0aW9uTm9kZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3c6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuZ3JpZFNlbGVjdGlvbi5hY3RpdmVFbGVtZW50ID8gdGhpcy5ncmlkU2VsZWN0aW9uLmFjdGl2ZUVsZW1lbnQuY29sdW1uIDogMFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRhdGFUeXBlKCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ3JvdXBSb3cuY29sdW1uO1xuICAgICAgICByZXR1cm4gKGNvbHVtbiAmJiBjb2x1bW4uZGF0YVR5cGUpIHx8IEdyaWRDb2x1bW5EYXRhVHlwZS5TdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZvcm1hdHRlcigpOiBhbnkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdyb3VwUm93LmNvbHVtbjtcbiAgICAgICAgcmV0dXJuIChjb2x1bW4gJiYgY29sdW1uLmZvcm1hdHRlcikgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYXJlQWxsUm93c0luVGhlR3JvdXBTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBSb3cucmVjb3Jkcy5ldmVyeSh4ID0+IHRoaXMuZ3JpZFNlbGVjdGlvbi5pc1Jvd1NlbGVjdGVkKHRoaXMuZ2V0Um93SUQoeCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWRSb3dzSW5UaGVHcm91cCgpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gbmV3IFNldCh0aGlzLmdyaWRTZWxlY3Rpb24uZmlsdGVyZWRTZWxlY3RlZFJvd0lkcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwUm93LnJlY29yZHMuZmlsdGVyKHJvd0lEID0+IHNlbGVjdGVkSWRzLmhhcyh0aGlzLmdldFJvd0lEKHJvd0lEKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBncm91cEJ5Um93Q2hlY2tib3hJbmRldGVybWluYXRlU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93c0luVGhlR3JvdXAubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmFyZUFsbFJvd3NJblRoZUdyb3VwU2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBncm91cEJ5Um93U2VsZWN0b3JCYXNlQXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGFyaWFMYWJlbDogc3RyaW5nID0gdGhpcy5hcmVBbGxSb3dzSW5UaGVHcm91cFNlbGVjdGVkID9cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZ3JvdXBCeUFyZWFfZGVzZWxlY3RfbWVzc2FnZSA6IHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZ3JvdXBCeUFyZWFfc2VsZWN0X21lc3NhZ2U7XG4gICAgICAgIHJldHVybiBhcmlhTGFiZWwucmVwbGFjZSgnezB9JywgdGhpcy5ncm91cFJvdy5leHByZXNzaW9uLmZpZWxkTmFtZSkucmVwbGFjZSgnezF9JywgdGhpcy5ncm91cFJvdy52YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dSb3dTZWxlY3RvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93U2VsZWN0aW9uICE9PSBHcmlkU2VsZWN0aW9uTW9kZS5ub25lICYmICF0aGlzLmhpZGVHcm91cFJvd1NlbGVjdG9ycztcbiAgICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXIgI2RlZmF1bHRHcm91cFJvdz5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dEcmFnZ2FibGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19kcmFnLWluZGljYXRvciBpZ3gtZ3JpZF9fdHItYWN0aW9uXCI+XG4gICAgICAgICAgICA8aWd4LWljb24gW3N0eWxlLnZpc2liaWxpdHldPVwiJ2hpZGRlbidcIj5kcmFnX2luZGljYXRvcjwvaWd4LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dSb3dTZWxlY3RvcnNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19jYngtc2VsZWN0aW9uIGlneC1ncmlkX190ci1hY3Rpb25cIiBzdHlsZT1cImJhY2tncm91bmQ6IG5vbmU7XCIgKHBvaW50ZXJkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkdyb3VwU2VsZWN0b3JDbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2dyb3VwQnlSb3dTZWxlY3RvciAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncm91cEJ5Um93U2VsZWN0b3JUZW1wbGF0ZSA/IHRoaXMuZ3JpZC5ncm91cEJ5Um93U2VsZWN0b3JUZW1wbGF0ZSA6IGdyb3VwQnlSb3dTZWxlY3RvckJhc2VUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDoge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvdW50OiBzZWxlY3RlZFJvd3NJblRoZUdyb3VwLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxDb3VudDogdGhpcy5ncm91cFJvdy5yZWNvcmRzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBSb3c6IHRoaXMuZ3JvdXBSb3cgfX1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiAoY2xpY2spPVwidG9nZ2xlKClcIiBjbGFzcz1cImlneC1ncmlkX19ncm91cGluZy1pbmRpY2F0b3JcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHRoaXMgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fZ3JvdXAtY29udGVudFwiICNncm91cENvbnRlbnQ+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JpZC5ncm91cFJvd1RlbXBsYXRlID8gZ3JpZC5ncm91cFJvd1RlbXBsYXRlIDogZGVmYXVsdEdyb3VwQnlUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGdyb3VwUm93IH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHcm91cEJ5RXhwYW5kZWRUZW1wbGF0ZT5cbiAgICAgICAgPGlneC1pY29uPmV4cGFuZF9tb3JlPC9pZ3gtaWNvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBCeUNvbGxhcHNlZFRlbXBsYXRlPlxuICAgICAgICA8aWd4LWljb24+Y2hldnJvbl9yaWdodDwvaWd4LWljb24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuXG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBCeVRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyb3VwLWxhYmVsXCI+XG4gICAgICAgICAgICA8aWd4LWljb24gY2xhc3M9XCJpZ3gtZ3JvdXAtbGFiZWxfX2ljb25cIj5ncm91cF93b3JrPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyb3VwLWxhYmVsX19jb2x1bW4tbmFtZVwiPlxuICAgICAgICAgICAgICAgIHt7IGdyb3VwUm93LmNvbHVtbiAmJiBncm91cFJvdy5jb2x1bW4uaGVhZGVyID9cbiAgICAgICAgICAgICAgICBncm91cFJvdy5jb2x1bW4uaGVhZGVyIDpcbiAgICAgICAgICAgICAgICAoZ3JvdXBSb3cuZXhwcmVzc2lvbiA/IGdyb3VwUm93LmV4cHJlc3Npb24uZmllbGROYW1lIDogJycpIH19OlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1ncm91cC1sYWJlbF9fdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyXG4gICAgICAgICAgICAgICAgICAgID8gKGdyb3VwUm93LnZhbHVlIHwgY29sdW1uRm9ybWF0dGVyOmZvcm1hdHRlcjpncm91cFJvdy5yZWNvcmRzWzBdOm51bGwpXG4gICAgICAgICAgICAgICAgICAgIDogZGF0YVR5cGUgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgPyAoZ3JvdXBSb3cudmFsdWUgfCBudW1iZXI6Z3JvdXBSb3cuY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgICAgIDogKGRhdGFUeXBlID09PSAnZGF0ZScgfHwgZGF0YVR5cGUgPT09ICd0aW1lJyB8fCBkYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJylcbiAgICAgICAgICAgICAgICAgICAgPyAoZ3JvdXBSb3cudmFsdWUgfCBkYXRlOmdyb3VwUm93LmNvbHVtbi5waXBlQXJncy5mb3JtYXQ6Z3JvdXBSb3cuY29sdW1uLnBpcGVBcmdzLnRpbWV6b25lOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgICAgICA6IGRhdGFUeXBlID09PSAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgID8gKGdyb3VwUm93LnZhbHVlIHwgY3VycmVuY3k6Y3VycmVuY3lDb2RlOmdyb3VwUm93LmNvbHVtbi5waXBlQXJncy5kaXNwbGF5Omdyb3VwUm93LmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgICAgICA6IGRhdGFUeXBlID09PSAncGVyY2VudCdcbiAgICAgICAgICAgICAgICAgICAgPyAoZ3JvdXBSb3cudmFsdWUgfCBwZXJjZW50Omdyb3VwUm93LmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgICAgICA6IGdyb3VwUm93LnZhbHVlXG4gICAgICAgICAgICB9fTwvc3Bhbj5cblxuICAgICAgICAgICAgPGlneC1iYWRnZSBbdmFsdWVdPVwiZ3JvdXBSb3cucmVjb3JkcyA/IGdyb3VwUm93LnJlY29yZHMubGVuZ3RoIDogMFwiIGNsYXNzPSdpZ3gtZ3JvdXAtbGFiZWxfX2NvdW50LWJhZGdlJz5cbiAgICAgICAgICAgIDwvaWd4LWJhZGdlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjZ3JvdXBCeVJvd1NlbGVjdG9yQmFzZVRlbXBsYXRlIGxldC1jb250ZXh0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2NieC1wYWRkaW5nXCI+XG4gICAgICAgICAgICA8aWd4LWNoZWNrYm94IFt0YWJpbmRleF09XCItMVwiIFtyZWFkb25seV09XCJ0cnVlXCIgW2NoZWNrZWRdPVwiYXJlQWxsUm93c0luVGhlR3JvdXBTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiIFtpbmRldGVybWluYXRlXT1cImdyb3VwQnlSb3dDaGVja2JveEluZGV0ZXJtaW5hdGVTdGF0ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRoaXMuZ3JpZC5yb3dTZWxlY3Rpb24gPT09ICdzaW5nbGUnXCIgW2FyaWEtbGFiZWxdPVwiZ3JvdXBCeVJvd1NlbGVjdG9yQmFzZUFyaWFMYWJlbFwiXG4gICAgICAgICAgICAgICAgI2dyb3VwQnlSb3dDaGVja2JveD5cbiAgICAgICAgICAgIDwvaWd4LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBieS1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2dyaWQvZ3JvdXBieS1yb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL2dyaWQvZ3JvdXBieS1yb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFFWCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVsSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcvQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVyRSxPQUFPLEVBQVksYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7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O3VCQUFDLG9CQUFvQjtnQkFTdEIsV0FBVztzQkFEckIsV0FBVzt1QkFBQyx1QkFBdUI7Z0JBT3pCLFlBQVk7c0JBRHRCLFdBQVc7dUJBQUMsb0JBQW9CO2dCQWdCdEIsVUFBVTtzQkFEcEIsV0FBVzt1QkFBQyxTQUFTO2dCQVlYLFlBQVk7c0JBRHRCLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBPbkRlc3Ryb3ksXG4gICAgSW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgRGVjaW1hbFBpcGUsIERhdGVQaXBlLCBnZXRMb2NhbGVDdXJyZW5jeUNvZGUsIFBlcmNlbnRQaXBlLCBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IElHcm91cEJ5UmVjb3JkIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktcmVjb3JkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEZpbHRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkUm93Q29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZFNlbGVjdGlvbk1vZGUgfSBmcm9tICcuLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgSVNlbGVjdGlvbk5vZGUgfSBmcm9tICcuLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgSWd4Q2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4QmFkZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9iYWRnZS9iYWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uRm9ybWF0dGVyUGlwZSB9IGZyb20gJy4uL2NvbW1vbi9waXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtZ3JvdXBieS1yb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncm91cGJ5LXJvdy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIERlY2ltYWxQaXBlLFxuICAgICAgICBEYXRlUGlwZSxcbiAgICAgICAgUGVyY2VudFBpcGUsXG4gICAgICAgIEN1cnJlbmN5UGlwZSxcbiAgICAgICAgSWd4SWNvbkNvbXBvbmVudCxcbiAgICAgICAgSWd4QmFkZ2VDb21wb25lbnQsXG4gICAgICAgIElneENoZWNrYm94Q29tcG9uZW50LFxuICAgICAgICBJZ3hDb2x1bW5Gb3JtYXR0ZXJQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkR3JvdXBCeVJvd0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhpZGVHcm91cFJvd1NlbGVjdG9yczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByb3dEcmFnZ2FibGU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIHRoZSBpbmRleCBvZiB0aGUgcm93LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQtZ3JvdXBieS1yb3cgW2dyaWRJRF09XCJpZFwiIFtpbmRleF09XCJyb3dJbmRleFwiIFtncm91cFJvd109XCJyb3dEYXRhXCIgI3Jvdz48L2lneC1ncmlkLWdyb3VwYnktcm93PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGluZGV4OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXRzIHRoZSBpZCBvZiB0aGUgZ3JpZCB0aGUgcm93IGJlbG9uZ3MgdG8uXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZ3JpZC1ncm91cGJ5LXJvdyBbZ3JpZElEXT1cImlkXCIgW2luZGV4XT1cInJvd0luZGV4XCIgW2dyb3VwUm93XT1cInJvd0RhdGFcIiAjcm93PjwvaWd4LWdyaWQtZ3JvdXBieS1yb3c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ3JpZElEOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzcGVjaWZpZXMgdGhlIGdyb3VwIHJlY29yZCB0aGUgY29tcG9uZW50IHJlbmRlcnMgZm9yLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiA8aWd4LWdyaWQtZ3JvdXBieS1yb3cgW2dyaWRJRF09XCJpZFwiIFtpbmRleF09XCJyb3dJbmRleFwiIFtncm91cFJvd109XCJyb3dEYXRhXCIgI3Jvdz48L2lneC1ncmlkLWdyb3VwYnktcm93PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdyb3VwUm93OiBJR3JvdXBCeVJlY29yZDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByZWZlcmVuY2Ugb2YgdGhlIGNvbnRlbnQgb2YgdGhlIGdyb3VwLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBncm91cFJvd0NvbnRlbnQgPSB0aGlzLmdyaWQxLnJvd0xpc3QuZmlyc3QuZ3JvdXBDb250ZW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyb3VwQ29udGVudCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGdyb3VwQ29udGVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByb3RlY3RlZCBpc0ZvY3VzZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0R3JvdXBCeUV4cGFuZGVkVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEdyb3VwQnlFeHBhbmRlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRHcm91cEJ5Q29sbGFwc2VkVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEdyb3VwQnlDb2xsYXBzZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDc3NDbGFzcyA9ICdpZ3gtZ3JpZF9fZ3JvdXAtcm93JztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcGFkZGluZ0luZGVudGF0aW9uQ3NzQ2xhc3MgPSAnaWd4LWdyaWRfX2dyb3VwLXJvdy0tcGFkZGluZy1sZXZlbCc7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHJvdyBpcyBmb2N1c2VkLlxuICAgICAqIGBgYFxuICAgICAqIGxldCBncmlkUm93Rm9jdXNlZCA9IHRoaXMuZ3JpZDEucm93TGlzdC5maXJzdC5mb2N1c2VkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBY3RpdmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbmN5Q29kZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cFJvdy5jb2x1bW4ucGlwZUFyZ3MuY3VycmVuY3lDb2RlID9cbiAgICAgICAgICAgIHRoaXMuZ3JvdXBSb3cuY29sdW1uLnBpcGVBcmdzLmN1cnJlbmN5Q29kZSA6IGdldExvY2FsZUN1cnJlbmN5Q29kZSh0aGlzLmdyaWQubG9jYWxlKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChJR1hfR1JJRF9CQVNFKSBwdWJsaWMgZ3JpZDogR3JpZFR5cGUsXG4gICAgICAgIHB1YmxpYyBncmlkU2VsZWN0aW9uOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgZmlsdGVyaW5nU2VydmljZTogSWd4RmlsdGVyaW5nU2VydmljZSkge1xuICAgICAgICB0aGlzLmdyaWRTZWxlY3Rpb24uc2VsZWN0ZWRSb3dzQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgQEhvc3RMaXN0ZW5lcigncG9pbnRlcmRvd24nKVxuICAgIHB1YmxpYyBhY3RpdmF0ZSgpIHtcbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRpb24uc2V0QWN0aXZlTm9kZSh7IHJvdzogdGhpcy5pbmRleCB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgZ3JvdXAgcm93IGlzIGV4cGFuZGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBncm91cFJvd0V4cGFuZGVkID0gdGhpcy5ncmlkMS5yb3dMaXN0LmZpcnN0LmV4cGFuZGVkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJylcbiAgICBwdWJsaWMgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmlzRXhwYW5kZWRHcm91cCh0aGlzLmdyb3VwUm93KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKVxuICAgIHB1YmxpYyBnZXQgZGVzY3JpYmVkQnkoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZ3JSb3dFeHByID0gdGhpcy5ncm91cFJvdy5leHByZXNzaW9uICE9PSB1bmRlZmluZWQgPyB0aGlzLmdyb3VwUm93LmV4cHJlc3Npb24uZmllbGROYW1lIDogJyc7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRJRCArICdfJyArIGdyUm93RXhwcjtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1yb3dJbmRleCcpXG4gICAgcHVibGljIGdldCBkYXRhUm93SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHVuZGVybHlpbmcgSFRNTCBlbGVtZW50LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBncm91cFJvd0VsZW1lbnQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIHB1YmxpYyBnZXQgYXR0ckNlbGxJRCgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZ3JpZElEfV8ke3RoaXMuaW5kZXh9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzdHlsZSBjbGFzc2VzIGFwcGxpZWQgdG8gdGhlIGdyb3VwIHJvd3MuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGdyb3VwQ3NzU3R5bGVzID0gdGhpcy5ncmlkMS5yb3dMaXN0LmZpcnN0LnN0eWxlQ2xhc3NlcztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBwdWJsaWMgZ2V0IHN0eWxlQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5kZWZhdWx0Q3NzQ2xhc3N9IGAgKyBgJHt0aGlzLnBhZGRpbmdJbmRlbnRhdGlvbkNzc0NsYXNzfS1gICsgdGhpcy5ncm91cFJvdy5sZXZlbCArXG4gICAgICAgICAgICAodGhpcy5pc0FjdGl2ZSgpID8gYCAke3RoaXMuZGVmYXVsdENzc0NsYXNzfS0tYWN0aXZlYCA6ICcnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQubmF2aWdhdGlvbi5hY3RpdmVOb2RlID8gdGhpcy5ncmlkLm5hdmlnYXRpb24uYWN0aXZlTm9kZS5yb3cgPT09IHRoaXMuaW5kZXggOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSb3dJRChyb3dEYXRhKTogSWd4R3JpZFJvd0NvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleSA/IHJvd0RhdGFbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcm93RGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkdyb3VwU2VsZWN0b3JDbGljayhldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5pc011bHRpUm93U2VsZWN0aW9uRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5hcmVBbGxSb3dzSW5UaGVHcm91cFNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRTZWxlY3Rpb24uZGVzZWxlY3RSb3dzKHRoaXMuZ3JvdXBSb3cucmVjb3Jkcy5tYXAoeCA9PiB0aGlzLmdldFJvd0lEKHgpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRTZWxlY3Rpb24uc2VsZWN0Um93cyh0aGlzLmdyb3VwUm93LnJlY29yZHMubWFwKHggPT4gdGhpcy5nZXRSb3dJRCh4KSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgZ3JvdXAgcm93LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQxLnJvd0xpc3QuZmlyc3QudG9nZ2xlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCkge1xuICAgICAgICB0aGlzLmdyaWQudG9nZ2xlR3JvdXAodGhpcy5ncm91cFJvdyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpY29uVGVtcGxhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0V4cGFuZGVkSW5kaWNhdG9yVGVtcGxhdGUgfHwgdGhpcy5kZWZhdWx0R3JvdXBCeUV4cGFuZGVkVGVtcGxhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0NvbGxhcHNlZEluZGljYXRvclRlbXBsYXRlIHx8IHRoaXMuZGVmYXVsdEdyb3VwQnlDb2xsYXBzZWRUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgc2VsZWN0aW9uTm9kZSgpOiBJU2VsZWN0aW9uTm9kZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3c6IHRoaXMuaW5kZXgsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuZ3JpZFNlbGVjdGlvbi5hY3RpdmVFbGVtZW50ID8gdGhpcy5ncmlkU2VsZWN0aW9uLmFjdGl2ZUVsZW1lbnQuY29sdW1uIDogMFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRhdGFUeXBlKCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ3JvdXBSb3cuY29sdW1uO1xuICAgICAgICByZXR1cm4gKGNvbHVtbiAmJiBjb2x1bW4uZGF0YVR5cGUpIHx8IEdyaWRDb2x1bW5EYXRhVHlwZS5TdHJpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZvcm1hdHRlcigpOiBhbnkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdyb3VwUm93LmNvbHVtbjtcbiAgICAgICAgcmV0dXJuIChjb2x1bW4gJiYgY29sdW1uLmZvcm1hdHRlcikgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgYXJlQWxsUm93c0luVGhlR3JvdXBTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBSb3cucmVjb3Jkcy5ldmVyeSh4ID0+IHRoaXMuZ3JpZFNlbGVjdGlvbi5pc1Jvd1NlbGVjdGVkKHRoaXMuZ2V0Um93SUQoeCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWRSb3dzSW5UaGVHcm91cCgpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gbmV3IFNldCh0aGlzLmdyaWRTZWxlY3Rpb24uZmlsdGVyZWRTZWxlY3RlZFJvd0lkcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwUm93LnJlY29yZHMuZmlsdGVyKHJvd0lEID0+IHNlbGVjdGVkSWRzLmhhcyh0aGlzLmdldFJvd0lEKHJvd0lEKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBncm91cEJ5Um93Q2hlY2tib3hJbmRldGVybWluYXRlU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93c0luVGhlR3JvdXAubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmFyZUFsbFJvd3NJblRoZUdyb3VwU2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBncm91cEJ5Um93U2VsZWN0b3JCYXNlQXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGFyaWFMYWJlbDogc3RyaW5nID0gdGhpcy5hcmVBbGxSb3dzSW5UaGVHcm91cFNlbGVjdGVkID9cbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZ3JvdXBCeUFyZWFfZGVzZWxlY3RfbWVzc2FnZSA6IHRoaXMuZ3JpZC5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfZ3JvdXBCeUFyZWFfc2VsZWN0X21lc3NhZ2U7XG4gICAgICAgIHJldHVybiBhcmlhTGFiZWwucmVwbGFjZSgnezB9JywgdGhpcy5ncm91cFJvdy5leHByZXNzaW9uLmZpZWxkTmFtZSkucmVwbGFjZSgnezF9JywgdGhpcy5ncm91cFJvdy52YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dSb3dTZWxlY3RvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93U2VsZWN0aW9uICE9PSBHcmlkU2VsZWN0aW9uTW9kZS5ub25lICYmICF0aGlzLmhpZGVHcm91cFJvd1NlbGVjdG9ycztcbiAgICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXIgI2RlZmF1bHRHcm91cFJvdz5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dEcmFnZ2FibGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19kcmFnLWluZGljYXRvciBpZ3gtZ3JpZF9fdHItYWN0aW9uXCI+XG4gICAgICAgICAgICA8aWd4LWljb24gW3N0eWxlLnZpc2liaWxpdHldPVwiJ2hpZGRlbidcIj5kcmFnX2luZGljYXRvcjwvaWd4LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dSb3dTZWxlY3RvcnNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19jYngtc2VsZWN0aW9uIGlneC1ncmlkX190ci1hY3Rpb25cIiBzdHlsZT1cImJhY2tncm91bmQ6IG5vbmU7XCIgKHBvaW50ZXJkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkdyb3VwU2VsZWN0b3JDbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2dyb3VwQnlSb3dTZWxlY3RvciAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncm91cEJ5Um93U2VsZWN0b3JUZW1wbGF0ZSA/IHRoaXMuZ3JpZC5ncm91cEJ5Um93U2VsZWN0b3JUZW1wbGF0ZSA6IGdyb3VwQnlSb3dTZWxlY3RvckJhc2VUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDoge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvdW50OiBzZWxlY3RlZFJvd3NJblRoZUdyb3VwLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxDb3VudDogdGhpcy5ncm91cFJvdy5yZWNvcmRzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBSb3c6IHRoaXMuZ3JvdXBSb3cgfX1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiAoY2xpY2spPVwidG9nZ2xlKClcIiBjbGFzcz1cImlneC1ncmlkX19ncm91cGluZy1pbmRpY2F0b3JcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHRoaXMgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fZ3JvdXAtY29udGVudFwiICNncm91cENvbnRlbnQ+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JpZC5ncm91cFJvd1RlbXBsYXRlID8gZ3JpZC5ncm91cFJvd1RlbXBsYXRlIDogZGVmYXVsdEdyb3VwQnlUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGdyb3VwUm93IH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHcm91cEJ5RXhwYW5kZWRUZW1wbGF0ZT5cbiAgICAgICAgPGlneC1pY29uPmV4cGFuZF9tb3JlPC9pZ3gtaWNvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBCeUNvbGxhcHNlZFRlbXBsYXRlPlxuICAgICAgICA8aWd4LWljb24+Y2hldnJvbl9yaWdodDwvaWd4LWljb24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuXG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBCeVRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyb3VwLWxhYmVsXCI+XG4gICAgICAgICAgICA8aWd4LWljb24gY2xhc3M9XCJpZ3gtZ3JvdXAtbGFiZWxfX2ljb25cIj5ncm91cF93b3JrPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyb3VwLWxhYmVsX19jb2x1bW4tbmFtZVwiPlxuICAgICAgICAgICAgICAgIHt7IGdyb3VwUm93LmNvbHVtbiAmJiBncm91cFJvdy5jb2x1bW4uaGVhZGVyID9cbiAgICAgICAgICAgICAgICBncm91cFJvdy5jb2x1bW4uaGVhZGVyIDpcbiAgICAgICAgICAgICAgICAoZ3JvdXBSb3cuZXhwcmVzc2lvbiA/IGdyb3VwUm93LmV4cHJlc3Npb24uZmllbGROYW1lIDogJycpIH19OlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlneC1ncm91cC1sYWJlbF9fdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyXG4gICAgICAgICAgICAgICAgICAgID8gKGdyb3VwUm93LnZhbHVlIHwgY29sdW1uRm9ybWF0dGVyOmZvcm1hdHRlcjpncm91cFJvdy5yZWNvcmRzWzBdOm51bGwpXG4gICAgICAgICAgICAgICAgICAgIDogZGF0YVR5cGUgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgPyAoZ3JvdXBSb3cudmFsdWUgfCBudW1iZXI6Z3JvdXBSb3cuY29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICAgICAgICAgIDogKGRhdGFUeXBlID09PSAnZGF0ZScgfHwgZGF0YVR5cGUgPT09ICd0aW1lJyB8fCBkYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJylcbiAgICAgICAgICAgICAgICAgICAgPyAoZ3JvdXBSb3cudmFsdWUgfCBkYXRlOmdyb3VwUm93LmNvbHVtbi5waXBlQXJncy5mb3JtYXQ6Z3JvdXBSb3cuY29sdW1uLnBpcGVBcmdzLnRpbWV6b25lOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgICAgICA6IGRhdGFUeXBlID09PSAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgID8gKGdyb3VwUm93LnZhbHVlIHwgY3VycmVuY3k6Y3VycmVuY3lDb2RlOmdyb3VwUm93LmNvbHVtbi5waXBlQXJncy5kaXNwbGF5Omdyb3VwUm93LmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgICAgICA6IGRhdGFUeXBlID09PSAncGVyY2VudCdcbiAgICAgICAgICAgICAgICAgICAgPyAoZ3JvdXBSb3cudmFsdWUgfCBwZXJjZW50Omdyb3VwUm93LmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKVxuICAgICAgICAgICAgICAgICAgICA6IGdyb3VwUm93LnZhbHVlXG4gICAgICAgICAgICB9fTwvc3Bhbj5cblxuICAgICAgICAgICAgPGlneC1iYWRnZSBbdmFsdWVdPVwiZ3JvdXBSb3cucmVjb3JkcyA/IGdyb3VwUm93LnJlY29yZHMubGVuZ3RoIDogMFwiIGNsYXNzPSdpZ3gtZ3JvdXAtbGFiZWxfX2NvdW50LWJhZGdlJz5cbiAgICAgICAgICAgIDwvaWd4LWJhZGdlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjZ3JvdXBCeVJvd1NlbGVjdG9yQmFzZVRlbXBsYXRlIGxldC1jb250ZXh0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2NieC1wYWRkaW5nXCI+XG4gICAgICAgICAgICA8aWd4LWNoZWNrYm94IFt0YWJpbmRleF09XCItMVwiIFtyZWFkb25seV09XCJ0cnVlXCIgW2NoZWNrZWRdPVwiYXJlQWxsUm93c0luVGhlR3JvdXBTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiIFtpbmRldGVybWluYXRlXT1cImdyb3VwQnlSb3dDaGVja2JveEluZGV0ZXJtaW5hdGVTdGF0ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRoaXMuZ3JpZC5yb3dTZWxlY3Rpb24gPT09ICdzaW5nbGUnXCIgW2FyaWEtbGFiZWxdPVwiZ3JvdXBCeVJvd1NlbGVjdG9yQmFzZUFyaWFMYWJlbFwiXG4gICAgICAgICAgICAgICAgI2dyb3VwQnlSb3dDaGVja2JveD5cbiAgICAgICAgICAgIDwvaWd4LWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=