igniteui-angular 17.0.0-alpha.2 → 17.0.0-beta.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 (439) hide show
  1. package/esm2022/lib/accordion/accordion.component.mjs +8 -7
  2. package/esm2022/lib/accordion/accordion.module.mjs +4 -4
  3. package/esm2022/lib/action-strip/action-strip.component.mjs +21 -25
  4. package/esm2022/lib/action-strip/action-strip.module.mjs +4 -4
  5. package/esm2022/lib/action-strip/grid-actions/grid-action-button.component.mjs +7 -6
  6. package/esm2022/lib/action-strip/grid-actions/grid-actions-base.directive.mjs +7 -6
  7. package/esm2022/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +13 -9
  8. package/esm2022/lib/action-strip/grid-actions/grid-pinning-actions.component.mjs +3 -3
  9. package/esm2022/lib/avatar/avatar.component.mjs +3 -3
  10. package/esm2022/lib/avatar/avatar.module.mjs +4 -4
  11. package/esm2022/lib/badge/badge.component.mjs +3 -3
  12. package/esm2022/lib/badge/badge.module.mjs +4 -4
  13. package/esm2022/lib/banner/banner.component.mjs +3 -3
  14. package/esm2022/lib/banner/banner.directives.mjs +3 -3
  15. package/esm2022/lib/banner/banner.module.mjs +4 -4
  16. package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +7 -6
  17. package/esm2022/lib/buttonGroup/buttongroup.module.mjs +4 -4
  18. package/esm2022/lib/calendar/calendar-base.mjs +8 -9
  19. package/esm2022/lib/calendar/calendar.component.mjs +11 -8
  20. package/esm2022/lib/calendar/calendar.directives.mjs +15 -15
  21. package/esm2022/lib/calendar/calendar.module.mjs +4 -4
  22. package/esm2022/lib/calendar/days-view/day-item.component.mjs +13 -9
  23. package/esm2022/lib/calendar/days-view/days-view.component.mjs +9 -7
  24. package/esm2022/lib/calendar/days-view/daysview-navigation.service.mjs +3 -3
  25. package/esm2022/lib/calendar/month-picker/month-picker-base.mjs +3 -3
  26. package/esm2022/lib/calendar/month-picker/month-picker.component.mjs +3 -3
  27. package/esm2022/lib/calendar/months-view/months-view.component.mjs +7 -6
  28. package/esm2022/lib/calendar/months-view.pipe.mjs +6 -6
  29. package/esm2022/lib/calendar/years-view/years-view.component.mjs +10 -9
  30. package/esm2022/lib/card/card.component.mjs +37 -33
  31. package/esm2022/lib/card/card.module.mjs +4 -4
  32. package/esm2022/lib/carousel/carousel.component.mjs +18 -13
  33. package/esm2022/lib/carousel/carousel.directives.mjs +9 -9
  34. package/esm2022/lib/carousel/carousel.module.mjs +4 -4
  35. package/esm2022/lib/carousel/slide.component.mjs +10 -8
  36. package/esm2022/lib/checkbox/checkbox.component.mjs +52 -64
  37. package/esm2022/lib/checkbox/checkbox.module.mjs +4 -4
  38. package/esm2022/lib/chips/chip.component.mjs +19 -12
  39. package/esm2022/lib/chips/chips-area.component.mjs +3 -3
  40. package/esm2022/lib/chips/chips.module.mjs +4 -4
  41. package/esm2022/lib/combo/combo-add-item.component.mjs +3 -3
  42. package/esm2022/lib/combo/combo-dropdown.component.mjs +7 -6
  43. package/esm2022/lib/combo/combo-item.component.mjs +7 -6
  44. package/esm2022/lib/combo/combo.api.mjs +3 -3
  45. package/esm2022/lib/combo/combo.common.mjs +27 -38
  46. package/esm2022/lib/combo/combo.component.mjs +28 -27
  47. package/esm2022/lib/combo/combo.directives.mjs +24 -24
  48. package/esm2022/lib/combo/combo.module.mjs +4 -4
  49. package/esm2022/lib/combo/combo.pipes.mjs +6 -6
  50. package/esm2022/lib/core/density.mjs +3 -3
  51. package/esm2022/lib/core/navigation/directives.mjs +6 -6
  52. package/esm2022/lib/core/navigation/nav.service.mjs +3 -3
  53. package/esm2022/lib/core/selection.mjs +3 -3
  54. package/esm2022/lib/core/touch.mjs +3 -3
  55. package/esm2022/lib/core/utils.mjs +3 -3
  56. package/esm2022/lib/date-common/calendar-container/calendar-container.component.mjs +3 -3
  57. package/esm2022/lib/date-common/picker-base.directive.mjs +7 -6
  58. package/esm2022/lib/date-common/picker-icons.common.mjs +9 -9
  59. package/esm2022/lib/date-picker/date-picker.component.mjs +13 -9
  60. package/esm2022/lib/date-picker/date-picker.module.mjs +4 -4
  61. package/esm2022/lib/date-range-picker/date-range-picker-inputs.common.mjs +15 -15
  62. package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +9 -7
  63. package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +4 -4
  64. package/esm2022/lib/dialog/dialog.component.mjs +17 -12
  65. package/esm2022/lib/dialog/dialog.directives.mjs +6 -6
  66. package/esm2022/lib/dialog/dialog.module.mjs +4 -4
  67. package/esm2022/lib/directives/autocomplete/autocomplete.directive.mjs +6 -6
  68. package/esm2022/lib/directives/autocomplete/autocomplete.module.mjs +4 -4
  69. package/esm2022/lib/directives/button/button.directive.mjs +19 -35
  70. package/esm2022/lib/directives/button/button.module.mjs +4 -4
  71. package/esm2022/lib/directives/date-time-editor/date-time-editor.directive.mjs +7 -6
  72. package/esm2022/lib/directives/date-time-editor/date-time-editor.module.mjs +4 -4
  73. package/esm2022/lib/directives/divider/divider.directive.mjs +9 -7
  74. package/esm2022/lib/directives/divider/divider.module.mjs +4 -4
  75. package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +16 -15
  76. package/esm2022/lib/directives/drag-drop/drag-drop.module.mjs +4 -4
  77. package/esm2022/lib/directives/filter/filter.directive.mjs +6 -6
  78. package/esm2022/lib/directives/filter/filter.module.mjs +4 -4
  79. package/esm2022/lib/directives/focus/focus.directive.mjs +6 -6
  80. package/esm2022/lib/directives/focus/focus.module.mjs +4 -4
  81. package/esm2022/lib/directives/focus-trap/focus-trap.directive.mjs +6 -6
  82. package/esm2022/lib/directives/focus-trap/focus-trap.module.mjs +4 -4
  83. package/esm2022/lib/directives/for-of/base.helper.component.mjs +3 -3
  84. package/esm2022/lib/directives/for-of/display.container.mjs +3 -3
  85. package/esm2022/lib/directives/for-of/for_of.directive.mjs +12 -10
  86. package/esm2022/lib/directives/for-of/for_of.module.mjs +4 -4
  87. package/esm2022/lib/directives/for-of/for_of.sync.service.mjs +6 -6
  88. package/esm2022/lib/directives/for-of/horizontal.virtual.helper.component.mjs +3 -3
  89. package/esm2022/lib/directives/for-of/virtual.helper.component.mjs +3 -3
  90. package/esm2022/lib/directives/form-control/form-control.directive.mjs +3 -3
  91. package/esm2022/lib/directives/form-control/form-control.module.mjs +4 -4
  92. package/esm2022/lib/directives/hint/hint.directive.mjs +3 -3
  93. package/esm2022/lib/directives/input/input.directive.mjs +11 -9
  94. package/esm2022/lib/directives/label/label.directive.mjs +3 -3
  95. package/esm2022/lib/directives/layout/layout.directive.mjs +9 -9
  96. package/esm2022/lib/directives/layout/layout.module.mjs +4 -4
  97. package/esm2022/lib/directives/mask/mask-parsing.service.mjs +3 -3
  98. package/esm2022/lib/directives/mask/mask.directive.mjs +7 -6
  99. package/esm2022/lib/directives/mask/mask.module.mjs +4 -4
  100. package/esm2022/lib/directives/notification/notifications.directive.mjs +9 -7
  101. package/esm2022/lib/directives/prefix/prefix.directive.mjs +3 -3
  102. package/esm2022/lib/directives/radio/radio-group.directive.mjs +11 -9
  103. package/esm2022/lib/directives/radio/radio-group.module.mjs +4 -4
  104. package/esm2022/lib/directives/ripple/ripple.directive.mjs +7 -7
  105. package/esm2022/lib/directives/ripple/ripple.module.mjs +4 -4
  106. package/esm2022/lib/directives/scroll-inertia/scroll_inertia.directive.mjs +3 -3
  107. package/esm2022/lib/directives/scroll-inertia/scroll_inertia.module.mjs +4 -4
  108. package/esm2022/lib/directives/suffix/suffix.directive.mjs +3 -3
  109. package/esm2022/lib/directives/template-outlet/template_outlet.directive.mjs +3 -3
  110. package/esm2022/lib/directives/text-highlight/text-highlight.directive.mjs +3 -3
  111. package/esm2022/lib/directives/text-highlight/text-highlight.module.mjs +4 -4
  112. package/esm2022/lib/directives/text-selection/text-selection.directive.mjs +26 -46
  113. package/esm2022/lib/directives/text-selection/text-selection.module.mjs +4 -4
  114. package/esm2022/lib/directives/toggle/toggle.directive.mjs +9 -9
  115. package/esm2022/lib/directives/toggle/toggle.module.mjs +4 -4
  116. package/esm2022/lib/directives/tooltip/tooltip-target.directive.mjs +6 -6
  117. package/esm2022/lib/directives/tooltip/tooltip.component.mjs +3 -3
  118. package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +3 -3
  119. package/esm2022/lib/directives/tooltip/tooltip.module.mjs +4 -4
  120. package/esm2022/lib/drop-down/drop-down-group.component.mjs +7 -6
  121. package/esm2022/lib/drop-down/drop-down-item.base.mjs +11 -8
  122. package/esm2022/lib/drop-down/drop-down-item.component.mjs +3 -3
  123. package/esm2022/lib/drop-down/drop-down-navigation.directive.mjs +3 -3
  124. package/esm2022/lib/drop-down/drop-down.base.mjs +3 -3
  125. package/esm2022/lib/drop-down/drop-down.component.mjs +7 -6
  126. package/esm2022/lib/drop-down/drop-down.module.mjs +4 -4
  127. package/esm2022/lib/expansion-panel/expansion-panel-body.component.mjs +3 -3
  128. package/esm2022/lib/expansion-panel/expansion-panel-header.component.mjs +7 -6
  129. package/esm2022/lib/expansion-panel/expansion-panel.common.mjs +3 -3
  130. package/esm2022/lib/expansion-panel/expansion-panel.component.mjs +7 -6
  131. package/esm2022/lib/expansion-panel/expansion-panel.directives.mjs +9 -9
  132. package/esm2022/lib/expansion-panel/expansion-panel.module.mjs +4 -4
  133. package/esm2022/lib/expansion-panel/toggle-animation-component.mjs +3 -3
  134. package/esm2022/lib/grids/api.service.mjs +3 -3
  135. package/esm2022/lib/grids/cell.component.mjs +7 -6
  136. package/esm2022/lib/grids/column-actions/column-actions-base.directive.mjs +3 -3
  137. package/esm2022/lib/grids/column-actions/column-actions.component.mjs +16 -15
  138. package/esm2022/lib/grids/column-actions/column-hiding.directive.mjs +3 -3
  139. package/esm2022/lib/grids/column-actions/column-pinning.directive.mjs +3 -3
  140. package/esm2022/lib/grids/columns/column-group.component.mjs +13 -9
  141. package/esm2022/lib/grids/columns/column-layout.component.mjs +7 -6
  142. package/esm2022/lib/grids/columns/column.component.mjs +37 -21
  143. package/esm2022/lib/grids/columns/templates.directive.mjs +24 -24
  144. package/esm2022/lib/grids/columns/validators.directive.mjs +21 -21
  145. package/esm2022/lib/grids/common/crud.service.mjs +3 -3
  146. package/esm2022/lib/grids/common/pipes.mjs +54 -54
  147. package/esm2022/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.mjs +3 -3
  148. package/esm2022/lib/grids/filtering/base/grid-filtering-cell.component.mjs +3 -3
  149. package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +3 -3
  150. package/esm2022/lib/grids/filtering/excel-style/base-filtering.component.mjs +3 -3
  151. package/esm2022/lib/grids/filtering/excel-style/excel-style-clear-filters.component.mjs +3 -3
  152. package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +3 -3
  153. package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +3 -3
  154. package/esm2022/lib/grids/filtering/excel-style/excel-style-date-expression.component.mjs +3 -3
  155. package/esm2022/lib/grids/filtering/excel-style/excel-style-default-expression.component.mjs +3 -3
  156. package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +9 -9
  157. package/esm2022/lib/grids/filtering/excel-style/excel-style-header.component.mjs +11 -8
  158. package/esm2022/lib/grids/filtering/excel-style/excel-style-hiding.component.mjs +3 -3
  159. package/esm2022/lib/grids/filtering/excel-style/excel-style-moving.component.mjs +3 -3
  160. package/esm2022/lib/grids/filtering/excel-style/excel-style-pinning.component.mjs +3 -3
  161. package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +6 -6
  162. package/esm2022/lib/grids/filtering/excel-style/excel-style-selecting.component.mjs +3 -3
  163. package/esm2022/lib/grids/filtering/excel-style/excel-style-sorting.component.mjs +3 -3
  164. package/esm2022/lib/grids/filtering/grid-filtering.service.mjs +5 -5
  165. package/esm2022/lib/grids/grid/expandable-cell.component.mjs +3 -3
  166. package/esm2022/lib/grids/grid/grid-api.service.mjs +3 -3
  167. package/esm2022/lib/grids/grid/grid-row.component.mjs +3 -3
  168. package/esm2022/lib/grids/grid/grid-validation.service.mjs +3 -3
  169. package/esm2022/lib/grids/grid/grid.component.mjs +11 -8
  170. package/esm2022/lib/grids/grid/grid.details.pipe.mjs +3 -3
  171. package/esm2022/lib/grids/grid/grid.module.mjs +4 -4
  172. package/esm2022/lib/grids/grid/grid.pipes.mjs +12 -12
  173. package/esm2022/lib/grids/grid/grid.summary.pipe.mjs +3 -3
  174. package/esm2022/lib/grids/grid/groupby-row.component.mjs +3 -3
  175. package/esm2022/lib/grids/grid-base.directive.mjs +33 -19
  176. package/esm2022/lib/grids/grid-footer/grid-footer.component.mjs +3 -3
  177. package/esm2022/lib/grids/grid-mrl-navigation.service.mjs +3 -3
  178. package/esm2022/lib/grids/grid-navigation.service.mjs +3 -3
  179. package/esm2022/lib/grids/grid.common.mjs +3 -3
  180. package/esm2022/lib/grids/grid.directives.mjs +33 -33
  181. package/esm2022/lib/grids/grid.rowEdit.directive.mjs +15 -15
  182. package/esm2022/lib/grids/grouping/grid-group-by-area.component.mjs +3 -3
  183. package/esm2022/lib/grids/grouping/group-by-area.directive.mjs +6 -6
  184. package/esm2022/lib/grids/grouping/tree-grid-group-by-area.component.mjs +8 -7
  185. package/esm2022/lib/grids/headers/grid-header-group.component.mjs +3 -3
  186. package/esm2022/lib/grids/headers/grid-header-row.component.mjs +14 -7
  187. package/esm2022/lib/grids/headers/grid-header.component.mjs +3 -3
  188. package/esm2022/lib/grids/headers/pipes.mjs +9 -9
  189. package/esm2022/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +3 -3
  190. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-api.service.mjs +3 -3
  191. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +7 -6
  192. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +3 -3
  193. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +11 -10
  194. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.module.mjs +4 -4
  195. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.pipes.mjs +6 -6
  196. package/esm2022/lib/grids/hierarchical-grid/hierarchical-row.component.mjs +3 -3
  197. package/esm2022/lib/grids/hierarchical-grid/row-island-api.service.mjs +3 -3
  198. package/esm2022/lib/grids/hierarchical-grid/row-island.component.mjs +7 -6
  199. package/esm2022/lib/grids/moving/moving.drag.directive.mjs +3 -3
  200. package/esm2022/lib/grids/moving/moving.drop.directive.mjs +3 -3
  201. package/esm2022/lib/grids/moving/moving.service.mjs +3 -3
  202. package/esm2022/lib/grids/pivot-grid/pivot-data-selector.component.mjs +13 -9
  203. package/esm2022/lib/grids/pivot-grid/pivot-filtering.service.mjs +3 -3
  204. package/esm2022/lib/grids/pivot-grid/pivot-grid-navigation.service.mjs +3 -3
  205. package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +25 -15
  206. package/esm2022/lib/grids/pivot-grid/pivot-grid.directives.mjs +3 -3
  207. package/esm2022/lib/grids/pivot-grid/pivot-grid.module.mjs +4 -4
  208. package/esm2022/lib/grids/pivot-grid/pivot-grid.pipes.mjs +30 -30
  209. package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +3 -3
  210. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-content.component.mjs +3 -3
  211. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.mjs +3 -3
  212. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header.component.mjs +3 -3
  213. package/esm2022/lib/grids/pivot-grid/pivot-row.component.mjs +3 -3
  214. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.mjs +3 -3
  215. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizer.component.mjs +3 -3
  216. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizing.service.mjs +3 -3
  217. package/esm2022/lib/grids/resizing/resize-handle.directive.mjs +3 -3
  218. package/esm2022/lib/grids/resizing/resizer.component.mjs +3 -3
  219. package/esm2022/lib/grids/resizing/resizer.directive.mjs +3 -3
  220. package/esm2022/lib/grids/resizing/resizing.service.mjs +3 -3
  221. package/esm2022/lib/grids/row-drag.directive.mjs +9 -9
  222. package/esm2022/lib/grids/row.directive.mjs +7 -6
  223. package/esm2022/lib/grids/selection/drag-select.directive.mjs +6 -6
  224. package/esm2022/lib/grids/selection/row-selectors.mjs +9 -9
  225. package/esm2022/lib/grids/selection/selection.service.mjs +3 -3
  226. package/esm2022/lib/grids/state.directive.mjs +3 -3
  227. package/esm2022/lib/grids/summaries/grid-root-summary.pipe.mjs +3 -3
  228. package/esm2022/lib/grids/summaries/grid-summary.service.mjs +10 -8
  229. package/esm2022/lib/grids/summaries/summary-cell.component.mjs +7 -6
  230. package/esm2022/lib/grids/summaries/summary-row.component.mjs +3 -3
  231. package/esm2022/lib/grids/toolbar/common.mjs +15 -15
  232. package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +3 -3
  233. package/esm2022/lib/grids/toolbar/grid-toolbar-exporter.component.mjs +9 -7
  234. package/esm2022/lib/grids/toolbar/grid-toolbar-hiding.component.mjs +3 -3
  235. package/esm2022/lib/grids/toolbar/grid-toolbar-pinning.component.mjs +3 -3
  236. package/esm2022/lib/grids/toolbar/grid-toolbar.base.mjs +16 -11
  237. package/esm2022/lib/grids/toolbar/grid-toolbar.component.mjs +7 -6
  238. package/esm2022/lib/grids/tree-grid/tree-cell.component.mjs +3 -3
  239. package/esm2022/lib/grids/tree-grid/tree-grid-api.service.mjs +3 -3
  240. package/esm2022/lib/grids/tree-grid/tree-grid-row.component.mjs +3 -3
  241. package/esm2022/lib/grids/tree-grid/tree-grid-selection.service.mjs +3 -3
  242. package/esm2022/lib/grids/tree-grid/tree-grid.component.mjs +7 -6
  243. package/esm2022/lib/grids/tree-grid/tree-grid.directives.mjs +3 -3
  244. package/esm2022/lib/grids/tree-grid/tree-grid.filtering.pipe.mjs +3 -3
  245. package/esm2022/lib/grids/tree-grid/tree-grid.grouping.pipe.mjs +3 -3
  246. package/esm2022/lib/grids/tree-grid/tree-grid.module.mjs +4 -4
  247. package/esm2022/lib/grids/tree-grid/tree-grid.pipes.mjs +21 -21
  248. package/esm2022/lib/grids/tree-grid/tree-grid.summary.pipe.mjs +3 -3
  249. package/esm2022/lib/icon/icon.component.mjs +6 -6
  250. package/esm2022/lib/icon/icon.module.mjs +4 -4
  251. package/esm2022/lib/icon/icon.service.mjs +3 -3
  252. package/esm2022/lib/input-group/input-group.component.mjs +7 -6
  253. package/esm2022/lib/input-group/input-group.module.mjs +4 -4
  254. package/esm2022/lib/list/list-item.component.mjs +9 -7
  255. package/esm2022/lib/list/list.common.mjs +15 -15
  256. package/esm2022/lib/list/list.component.mjs +26 -23
  257. package/esm2022/lib/list/list.module.mjs +4 -4
  258. package/esm2022/lib/navbar/navbar.component.mjs +13 -12
  259. package/esm2022/lib/navbar/navbar.module.mjs +4 -4
  260. package/esm2022/lib/navigation-drawer/navigation-drawer.component.mjs +13 -9
  261. package/esm2022/lib/navigation-drawer/navigation-drawer.directives.mjs +13 -13
  262. package/esm2022/lib/navigation-drawer/navigation-drawer.module.mjs +4 -4
  263. package/esm2022/lib/paginator/paginator-interfaces.mjs +3 -3
  264. package/esm2022/lib/paginator/paginator.component.mjs +12 -12
  265. package/esm2022/lib/paginator/paginator.module.mjs +4 -4
  266. package/esm2022/lib/progressbar/progressbar.common.mjs +6 -6
  267. package/esm2022/lib/progressbar/progressbar.component.mjs +23 -17
  268. package/esm2022/lib/progressbar/progressbar.module.mjs +4 -4
  269. package/esm2022/lib/query-builder/query-builder-header.component.mjs +7 -6
  270. package/esm2022/lib/query-builder/query-builder.component.mjs +6 -6
  271. package/esm2022/lib/query-builder/query-builder.module.mjs +4 -4
  272. package/esm2022/lib/radio/radio.component.mjs +37 -44
  273. package/esm2022/lib/select/select-group.component.mjs +3 -3
  274. package/esm2022/lib/select/select-item.component.mjs +3 -3
  275. package/esm2022/lib/select/select-navigation.directive.mjs +3 -3
  276. package/esm2022/lib/select/select.component.mjs +16 -15
  277. package/esm2022/lib/select/select.module.mjs +4 -4
  278. package/esm2022/lib/services/animation/angular-animation-service.mjs +3 -3
  279. package/esm2022/lib/services/csv/csv-exporter.mjs +3 -3
  280. package/esm2022/lib/services/direction/directionality.mjs +3 -3
  281. package/esm2022/lib/services/excel/excel-exporter.mjs +3 -3
  282. package/esm2022/lib/services/overlay/overlay.mjs +5 -5
  283. package/esm2022/lib/services/transaction/transaction-factory.service.mjs +6 -6
  284. package/esm2022/lib/simple-combo/simple-combo.component.mjs +51 -31
  285. package/esm2022/lib/simple-combo/simple-combo.module.mjs +4 -4
  286. package/esm2022/lib/slider/label/thumb-label.component.mjs +9 -7
  287. package/esm2022/lib/slider/slider.common.mjs +9 -9
  288. package/esm2022/lib/slider/slider.component.mjs +15 -10
  289. package/esm2022/lib/slider/slider.module.mjs +4 -4
  290. package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +11 -8
  291. package/esm2022/lib/slider/ticks/tick.pipe.mjs +3 -3
  292. package/esm2022/lib/slider/ticks/ticks.component.mjs +11 -8
  293. package/esm2022/lib/snackbar/snackbar.component.mjs +3 -3
  294. package/esm2022/lib/snackbar/snackbar.module.mjs +4 -4
  295. package/esm2022/lib/splitter/splitter-pane/splitter-pane.component.mjs +9 -7
  296. package/esm2022/lib/splitter/splitter.component.mjs +6 -6
  297. package/esm2022/lib/splitter/splitter.module.mjs +4 -4
  298. package/esm2022/lib/stepper/step/step.component.mjs +15 -10
  299. package/esm2022/lib/stepper/stepper.component.mjs +9 -7
  300. package/esm2022/lib/stepper/stepper.directive.mjs +21 -21
  301. package/esm2022/lib/stepper/stepper.module.mjs +4 -4
  302. package/esm2022/lib/stepper/stepper.service.mjs +6 -6
  303. package/esm2022/lib/switch/switch.component.mjs +32 -40
  304. package/esm2022/lib/switch/switch.module.mjs +4 -4
  305. package/esm2022/lib/tabs/bottom-nav/bottom-nav-content.component.mjs +3 -3
  306. package/esm2022/lib/tabs/bottom-nav/bottom-nav-header.component.mjs +3 -3
  307. package/esm2022/lib/tabs/bottom-nav/bottom-nav-item.component.mjs +3 -3
  308. package/esm2022/lib/tabs/bottom-nav/bottom-nav.component.mjs +5 -5
  309. package/esm2022/lib/tabs/bottom-nav/bottom-nav.directives.mjs +6 -6
  310. package/esm2022/lib/tabs/bottom-nav/bottom-nav.module.mjs +4 -4
  311. package/esm2022/lib/tabs/tab-content.directive.mjs +3 -3
  312. package/esm2022/lib/tabs/tab-header.directive.mjs +3 -3
  313. package/esm2022/lib/tabs/tab-item.directive.mjs +9 -7
  314. package/esm2022/lib/tabs/tabs/tab-content.component.mjs +3 -3
  315. package/esm2022/lib/tabs/tabs/tab-header.component.mjs +3 -3
  316. package/esm2022/lib/tabs/tabs/tab-item.component.mjs +3 -3
  317. package/esm2022/lib/tabs/tabs/tabs.component.mjs +3 -3
  318. package/esm2022/lib/tabs/tabs/tabs.directives.mjs +6 -6
  319. package/esm2022/lib/tabs/tabs/tabs.module.mjs +4 -4
  320. package/esm2022/lib/tabs/tabs.directive.mjs +11 -17
  321. package/esm2022/lib/time-picker/time-picker.component.mjs +9 -7
  322. package/esm2022/lib/time-picker/time-picker.directives.mjs +6 -6
  323. package/esm2022/lib/time-picker/time-picker.module.mjs +4 -4
  324. package/esm2022/lib/time-picker/time-picker.pipes.mjs +6 -6
  325. package/esm2022/lib/toast/toast.component.mjs +3 -3
  326. package/esm2022/lib/toast/toast.module.mjs +4 -4
  327. package/esm2022/lib/tree/tree-navigation.service.mjs +3 -3
  328. package/esm2022/lib/tree/tree-node/tree-node.component.mjs +18 -13
  329. package/esm2022/lib/tree/tree-selection.service.mjs +3 -3
  330. package/esm2022/lib/tree/tree.component.mjs +13 -12
  331. package/esm2022/lib/tree/tree.module.mjs +4 -4
  332. package/esm2022/lib/tree/tree.service.mjs +3 -3
  333. package/fesm2022/igniteui-angular.mjs +2245 -2106
  334. package/fesm2022/igniteui-angular.mjs.map +1 -1
  335. package/lib/accordion/accordion.component.d.ts +1 -0
  336. package/lib/action-strip/action-strip.component.d.ts +2 -2
  337. package/lib/action-strip/grid-actions/grid-action-button.component.d.ts +1 -0
  338. package/lib/action-strip/grid-actions/grid-actions-base.directive.d.ts +1 -0
  339. package/lib/action-strip/grid-actions/grid-editing-actions.component.d.ts +4 -0
  340. package/lib/buttonGroup/buttonGroup.component.d.ts +1 -0
  341. package/lib/calendar/calendar-base.d.ts +1 -0
  342. package/lib/calendar/calendar.component.d.ts +3 -0
  343. package/lib/calendar/days-view/day-item.component.d.ts +4 -0
  344. package/lib/calendar/days-view/days-view.component.d.ts +2 -0
  345. package/lib/calendar/months-view/months-view.component.d.ts +1 -0
  346. package/lib/calendar/years-view/years-view.component.d.ts +1 -0
  347. package/lib/card/card.component.d.ts +4 -0
  348. package/lib/carousel/carousel.component.d.ts +5 -0
  349. package/lib/carousel/slide.component.d.ts +2 -0
  350. package/lib/checkbox/checkbox.component.d.ts +10 -16
  351. package/lib/chips/chip.component.d.ts +7 -0
  352. package/lib/combo/combo-dropdown.component.d.ts +1 -0
  353. package/lib/combo/combo-item.component.d.ts +1 -0
  354. package/lib/combo/combo.common.d.ts +10 -21
  355. package/lib/combo/combo.component.d.ts +10 -8
  356. package/lib/date-common/picker-base.directive.d.ts +1 -0
  357. package/lib/date-picker/date-picker.component.d.ts +4 -0
  358. package/lib/date-range-picker/date-range-picker.component.d.ts +2 -0
  359. package/lib/dialog/dialog.component.d.ts +5 -0
  360. package/lib/directives/autocomplete/autocomplete.directive.d.ts +1 -0
  361. package/lib/directives/button/button.directive.d.ts +10 -23
  362. package/lib/directives/date-time-editor/date-time-editor.directive.d.ts +1 -0
  363. package/lib/directives/divider/divider.directive.d.ts +2 -0
  364. package/lib/directives/drag-drop/drag-drop.directive.d.ts +1 -0
  365. package/lib/directives/focus/focus.directive.d.ts +1 -0
  366. package/lib/directives/focus-trap/focus-trap.directive.d.ts +1 -0
  367. package/lib/directives/for-of/for_of.directive.d.ts +2 -0
  368. package/lib/directives/input/input.directive.d.ts +2 -2
  369. package/lib/directives/layout/layout.directive.d.ts +1 -0
  370. package/lib/directives/mask/mask.directive.d.ts +1 -0
  371. package/lib/directives/notification/notifications.directive.d.ts +2 -0
  372. package/lib/directives/radio/radio-group.directive.d.ts +2 -2
  373. package/lib/directives/ripple/ripple.directive.d.ts +2 -0
  374. package/lib/directives/text-selection/text-selection.directive.d.ts +2 -17
  375. package/lib/directives/tooltip/tooltip-target.directive.d.ts +1 -0
  376. package/lib/drop-down/drop-down-group.component.d.ts +1 -0
  377. package/lib/drop-down/drop-down-item.base.d.ts +3 -0
  378. package/lib/drop-down/drop-down.component.d.ts +1 -0
  379. package/lib/expansion-panel/expansion-panel-header.component.d.ts +1 -0
  380. package/lib/expansion-panel/expansion-panel.component.d.ts +1 -0
  381. package/lib/grids/cell.component.d.ts +1 -0
  382. package/lib/grids/column-actions/column-actions.component.d.ts +1 -0
  383. package/lib/grids/columns/column-group.component.d.ts +4 -0
  384. package/lib/grids/columns/column-layout.component.d.ts +1 -0
  385. package/lib/grids/columns/column.component.d.ts +16 -0
  386. package/lib/grids/filtering/excel-style/excel-style-header.component.d.ts +3 -0
  387. package/lib/grids/grid/grid.component.d.ts +3 -0
  388. package/lib/grids/grid-base.directive.d.ts +11 -0
  389. package/lib/grids/grouping/tree-grid-group-by-area.component.d.ts +1 -0
  390. package/lib/grids/headers/grid-header-row.component.d.ts +5 -0
  391. package/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.d.ts +1 -0
  392. package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +2 -1
  393. package/lib/grids/hierarchical-grid/row-island.component.d.ts +1 -0
  394. package/lib/grids/pivot-grid/pivot-data-selector.component.d.ts +4 -0
  395. package/lib/grids/pivot-grid/pivot-grid.component.d.ts +10 -0
  396. package/lib/grids/row.directive.d.ts +1 -0
  397. package/lib/grids/selection/drag-select.directive.d.ts +1 -0
  398. package/lib/grids/summaries/summary-cell.component.d.ts +1 -0
  399. package/lib/grids/toolbar/grid-toolbar-exporter.component.d.ts +2 -0
  400. package/lib/grids/toolbar/grid-toolbar.base.d.ts +1 -0
  401. package/lib/grids/toolbar/grid-toolbar.component.d.ts +1 -0
  402. package/lib/grids/tree-grid/tree-grid.component.d.ts +1 -0
  403. package/lib/icon/icon.component.d.ts +1 -0
  404. package/lib/input-group/input-group.component.d.ts +1 -0
  405. package/lib/list/list-item.component.d.ts +2 -0
  406. package/lib/list/list.component.d.ts +3 -0
  407. package/lib/navbar/navbar.component.d.ts +1 -0
  408. package/lib/navigation-drawer/navigation-drawer.component.d.ts +4 -0
  409. package/lib/navigation-drawer/navigation-drawer.directives.d.ts +2 -0
  410. package/lib/progressbar/progressbar.component.d.ts +6 -0
  411. package/lib/query-builder/query-builder-header.component.d.ts +1 -0
  412. package/lib/radio/radio.component.d.ts +5 -4
  413. package/lib/select/select.component.d.ts +1 -0
  414. package/lib/simple-combo/simple-combo.component.d.ts +16 -1
  415. package/lib/slider/label/thumb-label.component.d.ts +2 -0
  416. package/lib/slider/slider.component.d.ts +5 -0
  417. package/lib/slider/thumb/thumb-slider.component.d.ts +4 -1
  418. package/lib/slider/ticks/ticks.component.d.ts +3 -0
  419. package/lib/splitter/splitter-pane/splitter-pane.component.d.ts +2 -0
  420. package/lib/stepper/step/step.component.d.ts +5 -0
  421. package/lib/stepper/stepper.component.d.ts +2 -0
  422. package/lib/switch/switch.component.d.ts +4 -4
  423. package/lib/tabs/bottom-nav/bottom-nav.component.d.ts +1 -1
  424. package/lib/tabs/tab-item.directive.d.ts +2 -0
  425. package/lib/tabs/tabs.directive.d.ts +2 -4
  426. package/lib/time-picker/time-picker.component.d.ts +2 -0
  427. package/lib/tree/tree-node/tree-node.component.d.ts +5 -0
  428. package/lib/tree/tree.component.d.ts +1 -0
  429. package/migrations/common/tsUtils.d.ts +2 -0
  430. package/migrations/common/tsUtils.js +4 -3
  431. package/migrations/update-17_0_0/changes/classes.json +21 -0
  432. package/migrations/update-17_0_0/changes/members.json +21 -0
  433. package/migrations/update-17_0_0/index.js +48 -1
  434. package/package.json +2 -2
  435. package/schematics/tsconfig.tsbuildinfo +1 -1
  436. package/styles/igniteui-indigo-dark.css +1 -1
  437. package/styles/igniteui-indigo-light.css +1 -1
  438. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  439. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -1,5 +1,5 @@
1
1
  import { __decorate } from "tslib";
2
- import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Inject, Input, LOCALE_ID, Output, Optional, TemplateRef, ViewChild, ViewChildren, ContentChild, createComponent, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Inject, Input, LOCALE_ID, Output, Optional, TemplateRef, ViewChild, ViewChildren, ContentChild, createComponent, CUSTOM_ELEMENTS_SCHEMA, booleanAttribute } from '@angular/core';
3
3
  import { DOCUMENT, NgTemplateOutlet, NgIf, NgClass, NgStyle, NgFor } from '@angular/common';
4
4
  import { IgxGridBaseDirective } from '../grid-base.directive';
5
5
  import { IgxFilteringService } from '../filtering/grid-filtering.service';
@@ -1705,8 +1705,8 @@ export class IgxPivotGridComponent extends IgxGridBaseDirective {
1705
1705
  this.valueInit.emit(val);
1706
1706
  });
1707
1707
  }
1708
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.1", ngImport: i0, type: IgxPivotGridComponent, deps: [{ token: i1.IgxGridValidationService }, { token: i2.IgxGridSelectionService }, { token: i3.IgxPivotColumnResizingService }, { token: i4.GridBaseAPIService }, { token: i5.IgxFlatTransactionFactory }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: i0.IterableDiffers }, { token: i0.ViewContainerRef }, { token: i0.Injector }, { token: i0.EnvironmentInjector }, { token: i6.IgxPivotGridNavigationService }, { token: i7.IgxFilteringService }, { token: IgxOverlayService }, { token: i8.IgxGridSummaryService }, { token: DisplayDensityToken, optional: true }, { token: LOCALE_ID }, { token: i9.PlatformUtil }, { token: IgxGridTransaction, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
1709
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.0-rc.1", type: IgxPivotGridComponent, isStandalone: true, selector: "igx-pivot-grid", inputs: { valueChipTemplate: "valueChipTemplate", pivotConfiguration: "pivotConfiguration", showPivotConfigurationUI: "showPivotConfigurationUI", superCompactMode: "superCompactMode", displayDensity: "displayDensity", pivotValueCloneStrategy: "pivotValueCloneStrategy", addRowEmptyTemplate: "addRowEmptyTemplate", autoGenerateExclude: "autoGenerateExclude", snackbarDisplayTime: "snackbarDisplayTime", defaultExpandState: "defaultExpandState", pagingMode: "pagingMode", hideRowSelectors: "hideRowSelectors", rowDraggable: "rowDraggable", allowAdvancedFiltering: "allowAdvancedFiltering", filterMode: "filterMode", allowFiltering: "allowFiltering", page: "page", perPage: "perPage", summaryRowHeight: "summaryRowHeight", rowEditable: "rowEditable", pinning: "pinning", summaryPosition: "summaryPosition", summaryCalculationMode: "summaryCalculationMode", showSummaryOnCollapse: "showSummaryOnCollapse", batchEditing: "batchEditing", id: "id", data: "data", totalRecords: "totalRecords", emptyPivotGridTemplate: "emptyPivotGridTemplate" }, outputs: { dimensionsChange: "dimensionsChange", pivotConfigurationChange: "pivotConfigurationChange", dimensionInit: "dimensionInit", valueInit: "valueInit", dimensionsSortingExpressionsChange: "dimensionsSortingExpressionsChange", valuesChange: "valuesChange", cellEdit: "cellEdit", cellEditDone: "cellEditDone", cellEditEnter: "cellEditEnter", cellEditExit: "cellEditExit", columnMovingStart: "columnMovingStart", columnMoving: "columnMoving", columnMovingEnd: "columnMovingEnd", columnPin: "columnPin", columnPinned: "columnPinned", rowAdd: "rowAdd", rowAdded: "rowAdded", rowDeleted: "rowDeleted", rowDelete: "rowDelete", rowDragStart: "rowDragStart", rowDragEnd: "rowDragEnd", rowEditEnter: "rowEditEnter", rowEdit: "rowEdit", rowEditDone: "rowEditDone", rowEditExit: "rowEditExit", rowPinning: "rowPinning", rowPinned: "rowPinned" }, host: { properties: { "attr.role": "this.role", "class.igx-grid__pivot--super-compact": "this.superCompactMode", "attr.id": "this.id" } }, providers: [
1708
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-rc.3", ngImport: i0, type: IgxPivotGridComponent, deps: [{ token: i1.IgxGridValidationService }, { token: i2.IgxGridSelectionService }, { token: i3.IgxPivotColumnResizingService }, { token: i4.GridBaseAPIService }, { token: i5.IgxFlatTransactionFactory }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: DOCUMENT }, { token: i0.ChangeDetectorRef }, { token: i0.IterableDiffers }, { token: i0.ViewContainerRef }, { token: i0.Injector }, { token: i0.EnvironmentInjector }, { token: i6.IgxPivotGridNavigationService }, { token: i7.IgxFilteringService }, { token: IgxOverlayService }, { token: i8.IgxGridSummaryService }, { token: DisplayDensityToken, optional: true }, { token: LOCALE_ID }, { token: i9.PlatformUtil }, { token: IgxGridTransaction, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
1709
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.0.0-rc.3", type: IgxPivotGridComponent, isStandalone: true, selector: "igx-pivot-grid", inputs: { valueChipTemplate: "valueChipTemplate", pivotConfiguration: "pivotConfiguration", showPivotConfigurationUI: ["showPivotConfigurationUI", "showPivotConfigurationUI", booleanAttribute], superCompactMode: ["superCompactMode", "superCompactMode", booleanAttribute], displayDensity: "displayDensity", pivotValueCloneStrategy: "pivotValueCloneStrategy", addRowEmptyTemplate: "addRowEmptyTemplate", autoGenerateExclude: "autoGenerateExclude", snackbarDisplayTime: "snackbarDisplayTime", defaultExpandState: ["defaultExpandState", "defaultExpandState", booleanAttribute], pagingMode: "pagingMode", hideRowSelectors: ["hideRowSelectors", "hideRowSelectors", booleanAttribute], rowDraggable: ["rowDraggable", "rowDraggable", booleanAttribute], allowAdvancedFiltering: ["allowAdvancedFiltering", "allowAdvancedFiltering", booleanAttribute], filterMode: "filterMode", allowFiltering: ["allowFiltering", "allowFiltering", booleanAttribute], page: "page", perPage: "perPage", summaryRowHeight: "summaryRowHeight", rowEditable: ["rowEditable", "rowEditable", booleanAttribute], pinning: "pinning", summaryPosition: "summaryPosition", summaryCalculationMode: "summaryCalculationMode", showSummaryOnCollapse: ["showSummaryOnCollapse", "showSummaryOnCollapse", booleanAttribute], batchEditing: ["batchEditing", "batchEditing", booleanAttribute], id: "id", data: "data", totalRecords: "totalRecords", emptyPivotGridTemplate: "emptyPivotGridTemplate" }, outputs: { dimensionsChange: "dimensionsChange", pivotConfigurationChange: "pivotConfigurationChange", dimensionInit: "dimensionInit", valueInit: "valueInit", dimensionsSortingExpressionsChange: "dimensionsSortingExpressionsChange", valuesChange: "valuesChange", cellEdit: "cellEdit", cellEditDone: "cellEditDone", cellEditEnter: "cellEditEnter", cellEditExit: "cellEditExit", columnMovingStart: "columnMovingStart", columnMoving: "columnMoving", columnMovingEnd: "columnMovingEnd", columnPin: "columnPin", columnPinned: "columnPinned", rowAdd: "rowAdd", rowAdded: "rowAdded", rowDeleted: "rowDeleted", rowDelete: "rowDelete", rowDragStart: "rowDragStart", rowDragEnd: "rowDragEnd", rowEditEnter: "rowEditEnter", rowEdit: "rowEdit", rowEditDone: "rowEditDone", rowEditExit: "rowEditExit", rowPinning: "rowPinning", rowPinned: "rowPinned" }, host: { properties: { "attr.role": "this.role", "class.igx-grid__pivot--super-compact": "this.superCompactMode", "attr.id": "this.id" } }, providers: [
1710
1710
  IgxGridCRUDService,
1711
1711
  IgxGridValidationService,
1712
1712
  IgxGridSummaryService,
@@ -1727,7 +1727,7 @@ __decorate([
1727
1727
  __decorate([
1728
1728
  WatchChanges()
1729
1729
  ], IgxPivotGridComponent.prototype, "rowEditable", null);
1730
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.1", ngImport: i0, type: IgxPivotGridComponent, decorators: [{
1730
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.3", ngImport: i0, type: IgxPivotGridComponent, decorators: [{
1731
1731
  type: Component,
1732
1732
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, selector: 'igx-pivot-grid', providers: [
1733
1733
  IgxGridCRUDService,
@@ -1819,7 +1819,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.1", ng
1819
1819
  }], pivotConfiguration: [{
1820
1820
  type: Input
1821
1821
  }], showPivotConfigurationUI: [{
1822
- type: Input
1822
+ type: Input,
1823
+ args: [{ transform: booleanAttribute }]
1823
1824
  }], role: [{
1824
1825
  type: HostBinding,
1825
1826
  args: ['attr.role']
@@ -1827,7 +1828,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.1", ng
1827
1828
  type: HostBinding,
1828
1829
  args: ['class.igx-grid__pivot--super-compact']
1829
1830
  }, {
1830
- type: Input
1831
+ type: Input,
1832
+ args: [{ transform: booleanAttribute }]
1831
1833
  }], displayDensity: [{
1832
1834
  type: Input
1833
1835
  }], pivotValueCloneStrategy: [{
@@ -1899,19 +1901,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.1", ng
1899
1901
  }], rowPinned: [{
1900
1902
  type: Output
1901
1903
  }], defaultExpandState: [{
1902
- type: Input
1904
+ type: Input,
1905
+ args: [{ transform: booleanAttribute }]
1903
1906
  }], pagingMode: [{
1904
1907
  type: Input
1905
1908
  }], hideRowSelectors: [{
1906
- type: Input
1909
+ type: Input,
1910
+ args: [{ transform: booleanAttribute }]
1907
1911
  }], rowDraggable: [{
1908
- type: Input
1912
+ type: Input,
1913
+ args: [{ transform: booleanAttribute }]
1909
1914
  }], allowAdvancedFiltering: [{
1910
- type: Input
1915
+ type: Input,
1916
+ args: [{ transform: booleanAttribute }]
1911
1917
  }], filterMode: [{
1912
1918
  type: Input
1913
1919
  }], allowFiltering: [{
1914
- type: Input
1920
+ type: Input,
1921
+ args: [{ transform: booleanAttribute }]
1915
1922
  }], page: [{
1916
1923
  type: Input
1917
1924
  }], perPage: [{
@@ -1919,7 +1926,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.1", ng
1919
1926
  }], summaryRowHeight: [{
1920
1927
  type: Input
1921
1928
  }], rowEditable: [{
1922
- type: Input
1929
+ type: Input,
1930
+ args: [{ transform: booleanAttribute }]
1923
1931
  }], pinning: [{
1924
1932
  type: Input
1925
1933
  }], summaryPosition: [{
@@ -1927,9 +1935,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.1", ng
1927
1935
  }], summaryCalculationMode: [{
1928
1936
  type: Input
1929
1937
  }], showSummaryOnCollapse: [{
1930
- type: Input
1938
+ type: Input,
1939
+ args: [{ transform: booleanAttribute }]
1931
1940
  }], batchEditing: [{
1932
- type: Input
1941
+ type: Input,
1942
+ args: [{ transform: booleanAttribute }]
1933
1943
  }], id: [{
1934
1944
  type: HostBinding,
1935
1945
  args: ['attr.id']
@@ -1945,4 +1955,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-rc.1", ng
1945
1955
  }], emptyPivotGridTemplate: [{
1946
1956
  type: Input
1947
1957
  }] } });
1948
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFFWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFFTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFFBQVEsRUFFUixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFHWixZQUFZLEVBQ1osZUFBZSxFQUVmLHNCQUFzQixFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzdHLE9BQU8sRUFBd0IsYUFBYSxFQUFXLE1BQU0sMEJBQTBCLENBQUM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFD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QixLQUFLO2dCQVljLGNBQWM7c0JBRGpDLEtBQUs7Z0JBWWMsSUFBSTtzQkFEdkIsS0FBSztnQkFZYyxPQUFPO3NCQUQxQixLQUFLO2dCQStDYyxnQkFBZ0I7c0JBRG5DLEtBQUs7Z0JBZ0NjLFdBQVc7c0JBRDlCLEtBQUs7Z0JBWWMsT0FBTztzQkFEMUIsS0FBSztnQkFXYyxlQUFlO3NCQURsQyxLQUFLO2dCQVljLHNCQUFzQjtzQkFEekMsS0FBSztnQkFZYyxxQkFBcUI7c0JBRHhDLEtBQUs7Z0JBMEJjLFlBQVk7c0JBRC9CLEtBQUs7Z0JBMkxLLEVBQUU7c0JBRlosV0FBVzt1QkFBQyxTQUFTOztzQkFDckIsS0FBSztnQkFlSyxJQUFJO3NCQURkLEtBQUs7Z0JBNktjLFlBQVk7c0JBRC9CLEtBQUs7Z0JBODNCQyw2QkFBNkI7c0JBRG5DLFNBQVM7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBWWpFLHNCQUFzQjtzQkFENUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIExPQ0FMRV9JRCxcbiAgICBOZ1pvbmUsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEluamVjdG9yLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBjcmVhdGVDb21wb25lbnQsXG4gICAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIE5nVGVtcGxhdGVPdXRsZXQsIE5nSWYsIE5nQ2xhc3MsIE5nU3R5bGUsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgSWd4R3JpZEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9ncmlkLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEZpbHRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hGb3JPZlN5bmNTZXJ2aWNlLCBJZ3hGb3JPZlNjcm9sbFN5bmNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3Itb2YvZm9yX29mLnN5bmMuc2VydmljZSc7XG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSwgUm93VHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ1JVRFNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRTdW1tYXJ5U2VydmljZSB9IGZyb20gJy4uL3N1bW1hcmllcy9ncmlkLXN1bW1hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBERUZBVUxUX1BJVk9UX0tFWVMsIElEaW1lbnNpb25zQ2hhbmdlLCBJZ3hQaXZvdEdyaWRWYWx1ZVRlbXBsYXRlQ29udGV4dCwgSVBpdm90Q29uZmlndXJhdGlvbiwgSVBpdm90Q29uZmlndXJhdGlvbkNoYW5nZWRFdmVudEFyZ3MsIElQaXZvdERpbWVuc2lvbiwgSVBpdm90VmFsdWUsIElWYWx1ZXNDaGFuZ2UsIFBpdm90RGltZW5zaW9uVHlwZSB9IGZyb20gJy4vcGl2b3QtZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4UGl2b3RIZWFkZXJSb3dDb21wb25lbnQgfSBmcm9tICcuL3Bpdm90LWhlYWRlci1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaXZvdFV0aWwgfSBmcm9tICcuL3Bpdm90LXV0aWwnO1xuaW1wb3J0IHsgRmlsdGVyTW9kZSwgR3JpZFBhZ2luZ01vZGUsIEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLCBHcmlkU3VtbWFyeVBvc2l0aW9uIH0gZnJvbSAnLi4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IFdhdGNoQ2hhbmdlcyB9IGZyb20gJy4uL3dhdGNoLWNoYW5nZXMnO1xuaW1wb3J0IHsgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQge1xuICAgIElDZWxsUG9zaXRpb24sXG4gICAgSUNvbHVtbk1vdmluZ0VuZEV2ZW50QXJncywgSUNvbHVtbk1vdmluZ0V2ZW50QXJncywgSUNvbHVtbk1vdmluZ1N0YXJ0RXZlbnRBcmdzLFxuICAgIElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncywgSUdyaWRFZGl0RG9uZUV2ZW50QXJncywgSUdyaWRFZGl0RXZlbnRBcmdzLFxuICAgIElHcmlkVG9vbGJhckV4cG9ydEV2ZW50QXJncyxcbiAgICBJUGluQ29sdW1uQ2FuY2VsbGFibGVFdmVudEFyZ3MsIElQaW5Db2x1bW5FdmVudEFyZ3MsIElQaW5Sb3dFdmVudEFyZ3MsIElSb3dEYXRhRXZlbnRBcmdzLCBJUm93RHJhZ0VuZEV2ZW50QXJncywgSVJvd0RyYWdTdGFydEV2ZW50QXJnc1xufSBmcm9tICcuLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IElneEdyaWRSb3dDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkL2dyaWQtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wUG9zaXRpb24gfSBmcm9tICcuLi9tb3ZpbmcvbW92aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGltZW5zaW9uVmFsdWVzRmlsdGVyaW5nU3RyYXRlZ3ksIE5vb3BQaXZvdERpbWVuc2lvbnNTdHJhdGVneSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9waXZvdC1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCwgSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2ZpbHRlcmluZy9leGNlbC1zdHlsZS9leGNlbC1zdHlsZS1maWx0ZXJpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IElneFBpdm90R3JpZE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9waXZvdC1ncmlkLW5hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hQaXZvdENvbHVtblJlc2l6aW5nU2VydmljZSB9IGZyb20gJy4uL3Jlc2l6aW5nL3Bpdm90LWdyaWQvcGl2b3QtcmVzaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hGbGF0VHJhbnNhY3Rpb25GYWN0b3J5LCBJZ3hPdmVybGF5U2VydmljZSwgU3RhdGUsIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5LCBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGVuc2l0eUNoYW5nZWRFdmVudEFyZ3MsIElEaXNwbGF5RGVuc2l0eU9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgY2xvbmVBcnJheSwgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hQaXZvdEZpbHRlcmluZ1NlcnZpY2UgfSBmcm9tICcuL3Bpdm90LWZpbHRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElneEdyaWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkRm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFBpdm90Um93RGltZW5zaW9uQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4vcGl2b3Qtcm93LWRpbWVuc2lvbi1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVzaXppbmcvcGl2b3QtZ3JpZC9waXZvdC1yZXNpemVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hBY3Rpb25TdHJpcENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2FjdGlvbi1zdHJpcC9hY3Rpb24tc3RyaXAuY29tcG9uZW50JztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiwgU29ydGluZ0RpcmVjdGlvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IFBpdm90U29ydFV0aWwgfSBmcm9tICcuL3Bpdm90LXNvcnQtdXRpbCc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IElneFBpdm90VmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL3Bpdm90LWdyaWQuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nT3BlcmF0aW9uIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1jb25kaXRpb24nO1xuaW1wb3J0IHsgSWd4R3JpZFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXZhbGlkYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hQaXZvdFJvd1BpcGUsIElneFBpdm90Um93RXhwYW5zaW9uUGlwZSwgSWd4UGl2b3RBdXRvVHJhbnNmb3JtLCBJZ3hQaXZvdENvbHVtblBpcGUsIElneFBpdm90R3JpZEZpbHRlclBpcGUsIElneFBpdm90R3JpZFNvcnRpbmdQaXBlLCBJZ3hQaXZvdEdyaWRDb2x1bW5Tb3J0aW5nUGlwZSwgSWd4UGl2b3RDZWxsTWVyZ2luZ1BpcGUgfSBmcm9tICcuL3Bpdm90LWdyaWQucGlwZXMnO1xuaW1wb3J0IHsgSWd4R3JpZFJvd0NsYXNzZXNQaXBlLCBJZ3hHcmlkUm93U3R5bGVzUGlwZSB9IGZyb20gJy4uL2NvbW1vbi9waXBlcyc7XG5pbXBvcnQgeyBJZ3hFeGNlbFN0eWxlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsdGVyaW5nL2V4Y2VsLXN0eWxlL2V4Y2VsLXN0eWxlLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4U25hY2tiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hUb2dnbGVEaXJlY3RpdmUsIElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFBpdm90Um93Q29tcG9uZW50IH0gZnJvbSAnLi9waXZvdC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneFRlbXBsYXRlT3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90ZW1wbGF0ZS1vdXRsZXQvdGVtcGxhdGVfb3V0bGV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Nb3ZpbmdEcm9wRGlyZWN0aXZlIH0gZnJvbSAnLi4vbW92aW5nL21vdmluZy5kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hHcmlkRHJhZ1NlbGVjdERpcmVjdGl2ZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9kcmFnLXNlbGVjdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4R3JpZEJvZHlEaXJlY3RpdmUgfSBmcm9tICcuLi9ncmlkLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSBmcm9tICcuLi9yZXNpemluZy9yZXNpemluZy5zZXJ2aWNlJztcbmltcG9ydCB7IERlZmF1bHREYXRhQ2xvbmVTdHJhdGVneSwgSURhdGFDbG9uZVN0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtY2xvbmUtc3RyYXRlZ3knO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5jb25zdCBNSU5JTVVNX0NPTFVNTl9XSURUSCA9IDIwMDtcbmNvbnN0IE1JTklNVU1fQ09MVU1OX1dJRFRIX1NVUEVSX0NPTVBBQ1QgPSAxMDQ7XG5cbi8qKlxuICogUGl2b3QgR3JpZCBwcm92aWRlcyBhIHdheSB0byBwcmVzZW50IGFuZCBtYW5pcHVsYXRlIGRhdGEgaW4gYSBwaXZvdCB0YWJsZSB2aWV3LlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4UGl2b3RHcmlkTW9kdWxlXG4gKiBAaWd4R3JvdXAgR3JpZHMgJiBMaXN0c1xuICogQGlneEtleXdvcmRzIHBpdm90LCBncmlkLCB0YWJsZVxuICogQGlneFRoZW1lIGlneC1ncmlkLXRoZW1lXG4gKiBAcmVtYXJrc1xuICogVGhlIElnbml0ZSBVSSBQaXZvdCBHcmlkIGlzIHVzZWQgZm9yIGdyb3VwaW5nIGFuZCBhZ2dyZWdhdGluZyBzaW1wbGUgZmxhdCBkYXRhIGludG8gYSBwaXZvdCB0YWJsZS4gIE9uY2UgZGF0YVxuICogaGFzIGJlZW4gYm91bmQgYW5kIHRoZSBkaW1lbnNpb25zIGFuZCB2YWx1ZXMgY29uZmlndXJlZCBpdCBjYW4gYmUgbWFuaXB1bGF0ZWQgdmlhIHNvcnRpbmcgYW5kIGZpbHRlcmluZy5cbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LXBpdm90LWdyaWQgW2RhdGFdPVwiZGF0YVwiIFtwaXZvdENvbmZpZ3VyYXRpb25dPVwiY29uZmlndXJhdGlvblwiPlxuICogPC9pZ3gtcGl2b3QtZ3JpZD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogJ2lneC1waXZvdC1ncmlkJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3Bpdm90LWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBJZ3hHcmlkQ1JVRFNlcnZpY2UsXG4gICAgICAgIElneEdyaWRWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgSWd4R3JpZFN1bW1hcnlTZXJ2aWNlLFxuICAgICAgICBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICBHcmlkQmFzZUFQSVNlcnZpY2UsXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX0dSSURfQkFTRSwgdXNlRXhpc3Rpbmc6IElneFBpdm90R3JpZENvbXBvbmVudCB9LFxuICAgICAgICB7IHByb3ZpZGU6IElneEZpbHRlcmluZ1NlcnZpY2UsIHVzZUNsYXNzOiBJZ3hQaXZvdEZpbHRlcmluZ1NlcnZpY2UgfSxcbiAgICAgICAgSWd4UGl2b3RHcmlkTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIElneFBpdm90Q29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICBJZ3hGb3JPZlN5bmNTZXJ2aWNlLFxuICAgICAgICBJZ3hGb3JPZlNjcm9sbFN5bmNTZXJ2aWNlXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nU3R5bGUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIElneFBpdm90SGVhZGVyUm93Q29tcG9uZW50LFxuICAgICAgICBJZ3hHcmlkQm9keURpcmVjdGl2ZSxcbiAgICAgICAgSWd4R3JpZERyYWdTZWxlY3REaXJlY3RpdmUsXG4gICAgICAgIElneENvbHVtbk1vdmluZ0Ryb3BEaXJlY3RpdmUsXG4gICAgICAgIElneEdyaWRGb3JPZkRpcmVjdGl2ZSxcbiAgICAgICAgSWd4VGVtcGxhdGVPdXRsZXREaXJlY3RpdmUsXG4gICAgICAgIElneFBpdm90Um93Q29tcG9uZW50LFxuICAgICAgICBJZ3hUb2dnbGVEaXJlY3RpdmUsXG4gICAgICAgIElneENpcmN1bGFyUHJvZ3Jlc3NCYXJDb21wb25lbnQsXG4gICAgICAgIElneFNuYWNrYmFyQ29tcG9uZW50LFxuICAgICAgICBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlLFxuICAgICAgICBJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50LFxuICAgICAgICBJZ3hJY29uQ29tcG9uZW50LFxuICAgICAgICBJZ3hQaXZvdFJvd0RpbWVuc2lvbkNvbnRlbnRDb21wb25lbnQsXG4gICAgICAgIElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50LFxuICAgICAgICBJZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBJZ3hFeGNlbFN0eWxlU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBJZ3hHcmlkUm93Q2xhc3Nlc1BpcGUsXG4gICAgICAgIElneEdyaWRSb3dTdHlsZXNQaXBlLFxuICAgICAgICBJZ3hQaXZvdFJvd1BpcGUsXG4gICAgICAgIElneFBpdm90Um93RXhwYW5zaW9uUGlwZSxcbiAgICAgICAgSWd4UGl2b3RBdXRvVHJhbnNmb3JtLFxuICAgICAgICBJZ3hQaXZvdENvbHVtblBpcGUsXG4gICAgICAgIElneFBpdm90R3JpZEZpbHRlclBpcGUsXG4gICAgICAgIElneFBpdm90R3JpZFNvcnRpbmdQaXBlLFxuICAgICAgICBJZ3hQaXZvdEdyaWRDb2x1bW5Tb3J0aW5nUGlwZSxcbiAgICAgICAgSWd4UGl2b3RDZWxsTWVyZ2luZ1BpcGVcbiAgICBdLFxuICAgIHNjaGVtYXM6IFsgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSBdXG59KVxuZXhwb3J0IGNsYXNzIElneFBpdm90R3JpZENvbXBvbmVudCBleHRlbmRzIElneEdyaWRCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LFxuICAgIEdyaWRUeXBlLCBBZnRlclZpZXdJbml0IHtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgZGltZW5zaW9uIGNvbGxlY3Rpb24gaXMgY2hhbmdlZCB2aWEgdGhlIGdyaWQgY2hpcCBhcmVhLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBSZXR1cm5zIHRoZSBuZXcgZGltZW5zaW9uIGNvbGxlY3Rpb24gYW5kIGl0cyB0eXBlOlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAoZGltZW5zaW9uc0NoYW5nZSk9XCJkaW1lbnNpb25zQ2hhbmdlKCRldmVudClcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkaW1lbnNpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJRGltZW5zaW9uc0NoYW5nZT4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBhbnkgb2YgdGhlIHBpdm90Q29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGlzIGNoYW5nZWQgdmlhIHRoZSBncmlkIGNoaXAgYXJlYS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAocGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlZCk9XCJjb25maWd1cmF0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJUGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlZEV2ZW50QXJncz4oKTtcblxuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBkaW1lbnNpb24gaXMgaW5pdGlhbGl6ZWQuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBFbWl0cyB0aGUgZGltZW5zaW9uIHRoYXQgaXMgYWJvdXQgdG8gYmUgaW5pdGlhbGl6ZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkICNncmlkIFtkYXRhXT1cImxvY2FsRGF0YVwiIFtoZWlnaHRdPVwiJzMwNXB4J1wiXG4gICAgICogICAgICAgICAgICAgIChkaW1lbnNpb25Jbml0KT1cImRpbWVuc2lvbkluaXQoJGV2ZW50KVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRpbWVuc2lvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPElQaXZvdERpbWVuc2lvbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgdmFsdWUgaXMgaW5pdGlhbGl6ZWQuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBFbWl0cyB0aGUgdmFsdWUgdGhhdCBpcyBhYm91dCB0byBiZSBpbml0aWFsaXplZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW2hlaWdodF09XCInMzA1cHgnXCJcbiAgICAgKiAgICAgICAgICAgICAgKHZhbHVlSW5pdCk9XCJ2YWx1ZUluaXQoJGV2ZW50KVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbHVlSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpdm90VmFsdWU+KCk7XG5cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBhIGRpbWVuc2lvbiBpcyBzb3J0ZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW2hlaWdodF09XCInMzA1cHgnXCJcbiAgICAgKiAgICAgICAgICAgICAgKGRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnNDaGFuZ2UpPVwiZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9uc0NoYW5nZSgkZXZlbnQpXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVNvcnRpbmdFeHByZXNzaW9uW10+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHZhbHVlcyBjb2xsZWN0aW9uIGlzIGNoYW5nZWQgdmlhIHRoZSBncmlkIGNoaXAgYXJlYS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmV0dXJucyB0aGUgbmV3IGRpbWVuc2lvblxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAodmFsdWVzQ2hhbmdlKT1cInZhbHVlc0NoYW5nZSgkZXZlbnQpXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWx1ZXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElWYWx1ZXNDaGFuZ2U+KCk7XG5cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHNvcnRpbmcgZXhwcmVzc2lvbnMgZ2VuZXJhdGVkIGZvciB0aGUgZGltZW5zaW9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IGV4cHJlc3Npb25zID0gdGhpcy5ncmlkLmRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBkaW1lbnNpb25zU29ydGluZ0V4cHJlc3Npb25zKCkge1xuICAgICAgICBjb25zdCBhbGxFbmFibGVkRGltZW5zaW9ucyA9IHRoaXMucm93RGltZW5zaW9ucy5jb25jYXQodGhpcy5jb2x1bW5EaW1lbnNpb25zKTtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9ucyA9IFBpdm90U29ydFV0aWwuZ2VuZXJhdGVEaW1lbnNpb25Tb3J0aW5nRXhwcmVzc2lvbnMoYWxsRW5hYmxlZERpbWVuc2lvbnMpO1xuICAgICAgICByZXR1cm4gZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9ucztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAVmlld0NoaWxkKElneFBpdm90SGVhZGVyUm93Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSB0aGVhZFJvdzogSWd4UGl2b3RIZWFkZXJSb3dDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFBpdm90VmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogSWd4UGl2b3RWYWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZSB9KVxuICAgIHByb3RlY3RlZCB2YWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZTogSWd4UGl2b3RWYWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyBhIGN1c3RvbSB0ZW1wbGF0ZSBmb3IgdGhlIHZhbHVlIGNoaXBzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkIFt2YWx1ZUNoaXBUZW1wbGF0ZV09XCJteVRlbXBsYXRlXCI+PGlneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgICBASW5wdXQoKVxuICAgICBwdWJsaWMgdmFsdWVDaGlwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPElneFBpdm90R3JpZFZhbHVlVGVtcGxhdGVDb250ZXh0PjtcblxuICAgIEBJbnB1dCgpXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBwaXZvdCBjb25maWd1cmF0aW9uIHdpdGggYWxsIHJlbGF0ZWQgZGltZW5zaW9ucyBhbmQgdmFsdWVzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkIFtwaXZvdENvbmZpZ3VyYXRpb25dPVwiY29uZmlnXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHBpdm90Q29uZmlndXJhdGlvbih2YWx1ZTogSVBpdm90Q29uZmlndXJhdGlvbikge1xuICAgICAgICB0aGlzLl9waXZvdENvbmZpZ3VyYXRpb24gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5lbWl0SW5pdEV2ZW50cyh0aGlzLl9waXZvdENvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IFBpdm90VXRpbC5idWlsZEV4cHJlc3Npb25UcmVlKHZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLl9pbml0KSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm90aWZ5Q2hhbmdlcyh0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBpdm90Q29uZmlndXJhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bpdm90Q29uZmlndXJhdGlvbiB8fCB7IHJvd3M6IG51bGwsIGNvbHVtbnM6IG51bGwsIHZhbHVlczogbnVsbCwgZmlsdGVyczogbnVsbCB9O1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBwaXZvdCBjb25maWd1cmF0aW9uIHVpIGZvciB0aGUgcGl2b3QgZ3JpZCAtIGNoaXBzIGFuZCB0aGVpclxuICAgICAqIGNvcnJlc3BvbmRpbmcgY29udGFpbmVycyBmb3Igcm93LCBmaWx0ZXIsIGNvbHVtbiBkaW1lbnNpb25zIGFuZCB2YWx1ZXNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbc2hvd1Bpdm90Q29uZmlndXJhdGlvblVJXT1cImZhbHNlXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1Bpdm90Q29uZmlndXJhdGlvblVJID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ2dyaWQnO1xuXG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGEgc3VwZXIgY29tcGFjdCB0aGVtZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIE92ZXJyaWRlcyB0aGUgZGlzcGxheURlbnNpdHkgb3B0aW9uIGlmIG9uZSBpcyBzZXQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkIFtzdXBlckNvbXBhY3RNb2RlXT1cInRydWVcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3Bpdm90LS1zdXBlci1jb21wYWN0JylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc3VwZXJDb21wYWN0TW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyQ29tcGFjdE1vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzdXBlckNvbXBhY3RNb2RlKHZhbHVlKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gd2FpdCBmb3IgdGhlIGN1cnJlbnQgZGV0ZWN0aW9uIGN5Y2xlIHRvIGVuZCBiZWZvcmUgdHJpZ2dlcmluZyBhIG5ldyBvbmUuXG4gICAgICAgICAgICB0aGlzLl9zdXBlckNvbXBhY3RNb2RlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgdGhlbWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAqIFRoZSBkZWZhdWx0IHRoZW1lIGlzIGBjb21mb3J0YWJsZWAuXG4gICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmUgYGNvbWZvcnRhYmxlYCwgYGNvc3lgLCBgY29tcGFjdGAuXG4gICAgKiBAcmVtYXJrc1xuICAgICogSWYgc2V0IHdoaWxlIHN1cGVyQ29tcGFjdE1vZGUgaXMgZW5hYmxlZCB3aWxsIGhhdmUgbm8gYWZmZWN0LlxuICAgICogYGBgdHlwZXNjcmlwdFxuICAgICogbGV0IGNvbXBvbmVudFRoZW1lID0gdGhpcy5jb21wb25lbnQuZGlzcGxheURlbnNpdHk7XG4gICAgKiBgYGBcbiAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBkaXNwbGF5RGVuc2l0eSgpOiBEaXNwbGF5RGVuc2l0eSB7XG4gICAgICAgIGlmICh0aGlzLnN1cGVyQ29tcGFjdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBEaXNwbGF5RGVuc2l0eS5jb21wYWN0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5kaXNwbGF5RGVuc2l0eTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIFNldHMgdGhlIHRoZW1lIG9mIHRoZSBjb21wb25lbnQuXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGRpc3BsYXlEZW5zaXR5KHZhbDogRGlzcGxheURlbnNpdHkpIHtcbiAgICAgICAgY29uc3QgY3VycmVudERpc3BsYXlEZW5zaXR5ID0gdGhpcy5fZGlzcGxheURlbnNpdHk7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlEZW5zaXR5ID0gdmFsIGFzIERpc3BsYXlEZW5zaXR5O1xuXG4gICAgICAgIGlmIChjdXJyZW50RGlzcGxheURlbnNpdHkgIT09IHRoaXMuX2Rpc3BsYXlEZW5zaXR5KSB7XG4gICAgICAgICAgICBjb25zdCBkZW5zaXR5Q2hhbmdlZEFyZ3M6IElEZW5zaXR5Q2hhbmdlZEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgICAgICBvbGREZW5zaXR5OiBjdXJyZW50RGlzcGxheURlbnNpdHksXG4gICAgICAgICAgICAgICAgbmV3RGVuc2l0eTogdGhpcy5fZGlzcGxheURlbnNpdHlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZGVuc2l0eUNoYW5nZWQuZW1pdChkZW5zaXR5Q2hhbmdlZEFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSB2YWx1ZXMgY2xvbmUgc3RyYXRlZ3kgb2YgdGhlIHBpdm90IGdyaWQgd2hlbiBhc3NpZ25pbmcgdGhlbSB0byBkaWZmZXJlbnQgZGltZW5zaW9ucy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW3Bpdm90VmFsdWVDbG9uZVN0cmF0ZWd5XT1cImN1c3RvbUNsb25lU3RyYXRlZ3lcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHBpdm90VmFsdWVDbG9uZVN0cmF0ZWd5KCk6IElEYXRhQ2xvbmVTdHJhdGVneSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waXZvdFZhbHVlQ2xvbmVTdHJhdGVneTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHBpdm90VmFsdWVDbG9uZVN0cmF0ZWd5KHN0cmF0ZWd5OiBJRGF0YUNsb25lU3RyYXRlZ3kpIHtcbiAgICAgICAgaWYgKHN0cmF0ZWd5KSB7XG4gICAgICAgICAgICB0aGlzLl9waXZvdFZhbHVlQ2xvbmVTdHJhdGVneSA9IHN0cmF0ZWd5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdyZWNvcmRfdGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgcmVjb3JkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlclRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIGhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKElneFBpdm90R3JpZENvbHVtblJlc2l6ZXJDb21wb25lbnQpXG4gICAgcHVibGljIG92ZXJyaWRlIHJlc2l6ZUxpbmU6IElneFBpdm90R3JpZENvbHVtblJlc2l6ZXJDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oSWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQsIHsgcmVhZDogSWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudHM6IFF1ZXJ5TGlzdDxJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oSWd4UGl2b3RSb3dEaW1lbnNpb25Db250ZW50Q29tcG9uZW50KVxuICAgIHByb3RlY3RlZCByb3dEaW1lbnNpb25Db250ZW50Q29sbGVjdGlvbjogUXVlcnlMaXN0PElneFBpdm90Um93RGltZW5zaW9uQ29udGVudENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXQgbWluQ29sdW1uV2lkdGgoKSB7XG4gICAgICAgIGlmICh0aGlzLnN1cGVyQ29tcGFjdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBNSU5JTVVNX0NPTFVNTl9XSURUSF9TVVBFUl9DT01QQUNUO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1JTklNVU1fQ09MVU1OX1dJRFRIO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKCd2ZXJ0aWNhbFJvd0RpbVNjcm9sbENvbnRhaW5lcicsIHsgcmVhZDogSWd4R3JpZEZvck9mRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIHZlcnRpY2FsUm93RGltU2Nyb2xsQ29udGFpbmVyczogUXVlcnlMaXN0PElneEdyaWRGb3JPZkRpcmVjdGl2ZTxhbnksIGFueVtdPj47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGFkZFJvd0VtcHR5VGVtcGxhdGU6IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBhdXRvR2VuZXJhdGVFeGNsdWRlOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBzbmFja2JhckRpc3BsYXlUaW1lID0gNjAwMDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNlbGxFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjZWxsRWRpdERvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdERvbmVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjZWxsRWRpdEVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjZWxsRWRpdEV4aXQgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdERvbmVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjb2x1bW5Nb3ZpbmdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvbHVtbk1vdmluZ1N0YXJ0RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29sdW1uTW92aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29sdW1uTW92aW5nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29sdW1uTW92aW5nRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29sdW1uTW92aW5nRW5kRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29sdW1uUGluID0gbmV3IEV2ZW50RW1pdHRlcjxJUGluQ29sdW1uQ2FuY2VsbGFibGVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjb2x1bW5QaW5uZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElQaW5Db2x1bW5FdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dBZGQgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0FkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJUm93RGF0YUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0RlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dEYXRhRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dEcmFnU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dEcmFnU3RhcnRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dEcmFnRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJUm93RHJhZ0VuZEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0VkaXRFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RWRpdERvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdERvbmVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dFZGl0RXhpdCA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RG9uZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd1Bpbm5pbmcgPSBuZXcgRXZlbnRFbWl0dGVyPElQaW5Sb3dFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dQaW5uZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElQaW5Sb3dFdmVudEFyZ3M+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgY29sdW1uR3JvdXBTdGF0ZXMgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZGltZW5zaW9uRGF0YUNvbHVtbnM7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBwaXZvdEtleXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5waXZvdEtleXMgfHwgREVGQVVMVF9QSVZPVF9LRVlTO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgaXNQaXZvdCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBkcmFnUm93SUQgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCByb290U3VtbWFyaWVzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJvd0RpbWVuc2lvblJlc2l6aW5nID0gdHJ1ZTtcblxuICAgIHByaXZhdGUgX2VtcHR5Um93RGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24gPSB7IG1lbWJlck5hbWU6ICcnLCBlbmFibGVkOiB0cnVlLCBsZXZlbDogMCB9O1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBlbXB0eVJvd0RpbWVuc2lvbigpOiBJUGl2b3REaW1lbnNpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW1wdHlSb3dEaW1lbnNpb247XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9waXZvdFZhbHVlQ2xvbmVTdHJhdGVneTogSURhdGFDbG9uZVN0cmF0ZWd5ID0gbmV3IERlZmF1bHREYXRhQ2xvbmVTdHJhdGVneSgpO1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfZGVmYXVsdEV4cGFuZFN0YXRlID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIF9maWx0ZXJTdHJhdGVneTogSUZpbHRlcmluZ1N0cmF0ZWd5ID0gbmV3IERpbWVuc2lvblZhbHVlc0ZpbHRlcmluZ1N0cmF0ZWd5KCk7XG4gICAgcHJpdmF0ZSBfZGF0YTtcbiAgICBwcml2YXRlIF9waXZvdENvbmZpZ3VyYXRpb246IElQaXZvdENvbmZpZ3VyYXRpb24gPSB7IHJvd3M6IG51bGwsIGNvbHVtbnM6IG51bGwsIHZhbHVlczogbnVsbCwgZmlsdGVyczogbnVsbCB9O1xuICAgIHByaXZhdGUgcF9pZCA9IGBpZ3gtcGl2b3QtZ3JpZC0ke05FWFRfSUQrK31gO1xuICAgIHByaXZhdGUgX3N1cGVyQ29tcGFjdE1vZGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICogR2V0cy9TZXRzIHRoZSBkZWZhdWx0IGV4cGFuZCBzdGF0ZSBmb3IgYWxsIHJvd3MuXG4gICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdEV4cGFuZFN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEV4cGFuZFN0YXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGVmYXVsdEV4cGFuZFN0YXRlKHZhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kZWZhdWx0RXhwYW5kU3RhdGUgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGFnaW5nTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcGFnaW5nTW9kZShfdmFsOiBHcmlkUGFnaW5nTW9kZSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFdhdGNoQ2hhbmdlcygpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGhpZGVSb3dTZWxlY3RvcnMoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGhpZGVSb3dTZWxlY3RvcnMoX3ZhbHVlOiBib29sZWFuKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYXV0b0dlbmVyYXRlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGFjdGlvblN0cmlwOiBJZ3hBY3Rpb25TdHJpcENvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNob3VsZEdlbmVyYXRlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbW92aW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB0b29sYmFyRXhwb3J0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZFRvb2xiYXJFeHBvcnRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCByb3dEcmFnZ2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcm93RHJhZ2dhYmxlKF92YWw6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBhbGxvd0FkdmFuY2VkRmlsdGVyaW5nKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBhbGxvd0FkdmFuY2VkRmlsdGVyaW5nKF92YWx1ZSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGZpbHRlck1vZGUoKSB7XG4gICAgICAgIHJldHVybiBGaWx0ZXJNb2RlLnF1aWNrRmlsdGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgZmlsdGVyTW9kZShfdmFsdWU6IEZpbHRlck1vZGUpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBhbGxvd0ZpbHRlcmluZygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgYWxsb3dGaWx0ZXJpbmcoX3ZhbHVlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHBhZ2UoX3ZhbDogbnVtYmVyKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGVyUGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBwZXJQYWdlKF92YWw6IG51bWJlcikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwaW5uZWRDb2x1bW5zKCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdW5waW5uZWRDb2x1bW5zKCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnVucGlubmVkQ29sdW1ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHVucGlubmVkRGF0YVZpZXcoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gc3VwZXIudW5waW5uZWREYXRhVmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHVucGlubmVkV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiBzdXBlci51bnBpbm5lZFdpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwaW5uZWRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnBpbm5lZFdpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHN1bW1hcnlSb3dIZWlnaHQoX3ZhbHVlOiBudW1iZXIpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHN1bW1hcnlSb3dIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRyYW5zYWN0aW9ucygpOiBUcmFuc2FjdGlvblNlcnZpY2U8VHJhbnNhY3Rpb24sIFN0YXRlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbnM7XG4gICAgfVxuXG5cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBkcmFnSW5kaWNhdG9ySWNvblRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBkcmFnSW5kaWNhdG9ySWNvblRlbXBsYXRlKF92YWw6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBXYXRjaENoYW5nZXMoKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCByb3dFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcm93RWRpdGFibGUoX3ZhbDogYm9vbGVhbikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5pbmcoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBwaW5uaW5nKF92YWx1ZSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHN1bW1hcnlQb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc3VtbWFyeVBvc2l0aW9uKF92YWx1ZTogR3JpZFN1bW1hcnlQb3NpdGlvbikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVyYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgc3VtbWFyeUNhbGN1bGF0aW9uTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc3VtbWFyeUNhbGN1bGF0aW9uTW9kZShfdmFsdWU6IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJhbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBzaG93U3VtbWFyeU9uQ29sbGFwc2UoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHNob3dTdW1tYXJ5T25Db2xsYXBzZShfdmFsdWU6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGlkZGVuQ29sdW1uc0NvdW50KCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGlubmVkQ29sdW1uc0NvdW50KCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBiYXRjaEVkaXRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGJhdGNoRWRpdGluZyhfdmFsOiBib29sZWFuKSB7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBzZWxlY3RlZFJvd3MoKTogYW55W10ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93SWRzID0gW107XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuZm9yRWFjaChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldiA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkaW0gb2YgdGhpcy5yb3dEaW1lbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJEaW0gPSBkaW07XG4gICAgICAgICAgICAgICAgbGV0IHNob3VsZEJyZWFrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBQaXZvdFV0aWwuZ2V0UmVjb3JkS2V5KHJlY29yZCwgY3VyckRpbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNQaXZvdFJvd1NlbGVjdGVkKGtleSkgJiYgIXNlbGVjdGVkUm93SWRzLmZpbmQoeCA9PiB4ID09PSByZWNvcmQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJvd0lkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRCcmVhayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyRGltID0gY3VyckRpbS5jaGlsZExldmVsO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJEaW0pO1xuICAgICAgICAgICAgICAgIHByZXYucHVzaChkaW0pO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRCcmVhaykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkUm93SWRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGRlZmF1bHQgcm93IGhlaWdodC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHJvd0hlaWdoID0gdGhpcy5ncmlkLmRlZmF1bHRSb3dIZWlnaHQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBkZWZhdWx0Um93SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnN1cGVyQ29tcGFjdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiAyNDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZGVmYXVsdFJvd0hlaWdodDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgdmFsaWRhdGlvblNlcnZpY2U6IElneEdyaWRWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgc2VsZWN0aW9uU2VydmljZTogSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIGNvbFJlc2l6aW5nU2VydmljZTogSWd4UGl2b3RDb2x1bW5SZXNpemluZ1NlcnZpY2UsXG4gICAgICAgIGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPixcbiAgICAgICAgdHJhbnNhY3Rpb25GYWN0b3J5OiBJZ3hGbGF0VHJhbnNhY3Rpb25GYWN0b3J5LFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgem9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBkb2N1bWVudCxcbiAgICAgICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICB2aWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIGVudkluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICBuYXZpZ2F0aW9uOiBJZ3hQaXZvdEdyaWROYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgZmlsdGVyaW5nU2VydmljZTogSWd4RmlsdGVyaW5nU2VydmljZSxcbiAgICAgICAgQEluamVjdChJZ3hPdmVybGF5U2VydmljZSkgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBzdW1tYXJ5U2VydmljZTogSWd4R3JpZFN1bW1hcnlTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBsb2NhbGVJZDogc3RyaW5nLFxuICAgICAgICBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KElneEdyaWRUcmFuc2FjdGlvbikgX2RpVHJhbnNhY3Rpb25zPzogVHJhbnNhY3Rpb25TZXJ2aWNlPFRyYW5zYWN0aW9uLCBTdGF0ZT4pIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICB2YWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgICAgIHNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgICAgICBjb2xSZXNpemluZ1NlcnZpY2UsXG4gICAgICAgICAgICBncmlkQVBJLFxuICAgICAgICAgICAgdHJhbnNhY3Rpb25GYWN0b3J5LFxuICAgICAgICAgICAgZWxlbWVudFJlZixcbiAgICAgICAgICAgIHpvbmUsXG4gICAgICAgICAgICBkb2N1bWVudCxcbiAgICAgICAgICAgIGNkcixcbiAgICAgICAgICAgIGRpZmZlcnMsXG4gICAgICAgICAgICB2aWV3UmVmLFxuICAgICAgICAgICAgaW5qZWN0b3IsXG4gICAgICAgICAgICBlbnZJbmplY3RvcixcbiAgICAgICAgICAgIG5hdmlnYXRpb24sXG4gICAgICAgICAgICBmaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICAgICAgb3ZlcmxheVNlcnZpY2UsXG4gICAgICAgICAgICBzdW1tYXJ5U2VydmljZSxcbiAgICAgICAgICAgIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgICAgICBsb2NhbGVJZCxcbiAgICAgICAgICAgIHBsYXRmb3JtLFxuICAgICAgICAgICAgX2RpVHJhbnNhY3Rpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBwaXZvdCBncmlkIGFsd2F5cyBnZW5lcmF0ZXMgY29sdW1ucyBhdXRvbWF0aWNhbGx5LlxuICAgICAgICB0aGlzLmF1dG9HZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIC8vIGlnbm9yZSBhbnkgdXNlciBkZWZpbmVkIGNvbHVtbnMgYW5kIGF1dG8tZ2VuZXJhdGUgYmFzZWQgb24gcGl2b3QgY29uZmlnLlxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoW10pO1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy52YWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoaXBUZW1wbGF0ZSA9IHRoaXMudmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vdGlmaWVzIGZvciBkaW1lbnNpb24gY2hhbmdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBub3RpZnlEaW1lbnNpb25DaGFuZ2UocmVnZW5lcmF0ZUNvbHVtbnMgPSBmYWxzZSkge1xuICAgICAgICBpZiAocmVnZW5lcmF0ZUNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZnVsbCBsaXN0IG9mIGRpbWVuc2lvbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5ncmlkLmFsbERpbWVuc2lvbnM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBhbGxEaW1lbnNpb25zKCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9waXZvdENvbmZpZ3VyYXRpb247XG4gICAgICAgIGlmICghY29uZmlnKSByZXR1cm4gW107XG4gICAgICAgIHJldHVybiAoY29uZmlnLnJvd3MgfHwgW10pLmNvbmNhdCgoY29uZmlnLmNvbHVtbnMgfHwgW10pKS5jb25jYXQoY29uZmlnLmZpbHRlcnMgfHwgW10pLmZpbHRlcih4ID0+IHggIT09IG51bGwgJiYgeCAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgY3JlYXRlRmlsdGVyRVNGKGRyb3Bkb3duOiBhbnksIGNvbHVtbjogQ29sdW1uVHlwZSwgb3B0aW9uczogT3ZlcmxheVNldHRpbmdzLCBzaG91bGRSZWF0YWNoOiBib29sZWFuKSB7XG4gICAgICAgIG9wdGlvbnMub3V0bGV0ID0gdGhpcy5vdXRsZXQ7XG4gICAgICAgIGlmIChkcm9wZG93bikge1xuICAgICAgICAgICAgZHJvcGRvd24uaW5pdGlhbGl6ZShjb2x1bW4sIHRoaXMub3ZlcmxheVNlcnZpY2UpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFJlYXRhY2gpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMub3ZlcmxheVNlcnZpY2UuYXR0YWNoKGRyb3Bkb3duLmVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGRyb3Bkb3duLm92ZXJsYXlDb21wb25lbnRJZCA9IGlkO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGlkLCByZWY6IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IGRyb3Bkb3duLm92ZXJsYXlDb21wb25lbnRJZCwgcmVmOiB1bmRlZmluZWQgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZlYXR1cmVDb2x1bW5zV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Um93V2lkdGhzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW2lkXT1cIidpZ3gtcGl2b3QtMSdcIiBbZGF0YV09XCJEYXRhXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5wX2lkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5wX2lkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgbGV0cyB5b3UgZmlsbCB0aGUgYElneFBpdm90R3JpZENvbXBvbmVudGAgd2l0aCBhbiBhcnJheSBvZiBkYXRhLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW2RhdGFdPVwiRGF0YVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGRhdGEodmFsdWU6IGFueVtdIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9kYXRhID0gdmFsdWUgfHwgW107XG4gICAgICAgIGlmICghdGhpcy5faW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGlmICh0aGlzLmhlaWdodCA9PT0gbnVsbCB8fCB0aGlzLmhlaWdodC5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgaGVpZ2h0IHdpbGwgY2hhbmdlIGJhc2VkIG9uIGhvdyBtdWNoIGRhdGEgdGhlcmUgaXMsIHJlY2FsY3VsYXRlIHNpemVzIGluIGlneEZvck9mLlxuICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBkYXRhIHNldCB0byB0aGUgY29tcG9uZW50LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZGF0YSA9IHRoaXMuZ3JpZC5kYXRhO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnlbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbnRleHQocm93RGF0YSwgcm93SW5kZXgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiByb3dEYXRhLFxuICAgICAgICAgICAgdGVtcGxhdGVJRDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRhUm93JyxcbiAgICAgICAgICAgICAgICBpZDogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLmdldERhdGFWaWV3SW5kZXgocm93SW5kZXgsIGZhbHNlKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBwaXZvdFJvd1dpZHRocygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93RGltZW5zaW9ucy5sZW5ndGggPyB0aGlzLnJvd0RpbWVuc2lvbnMucmVkdWNlKChhY2N1bXVsYXRvciwgZGltKSA9PiBhY2N1bXVsYXRvciArIHRoaXMucm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW0pLCAwKSA6XG4gICAgICAgICAgICB0aGlzLnJvd0RpbWVuc2lvbldpZHRoVG9QaXhlbHModGhpcy5lbXB0eVJvd0RpbWVuc2lvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW06IElQaXZvdERpbWVuc2lvbiwgaWdub3JlQmVmb3JlSW5pdCA9IGZhbHNlKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFpZ25vcmVCZWZvcmVJbml0ICYmIHRoaXMuc2hvdWxkR2VuZXJhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaW0ud2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBNSU5JTVVNX0NPTFVNTl9XSURUSDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1BlcmNlbnQgPSBkaW0ud2lkdGggJiYgZGltLndpZHRoLmluZGV4T2YoJyUnKSAhPT0gLTE7XG4gICAgICAgIGlmIChpc1BlcmNlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KGRpbS53aWR0aCkgLyAxMDAgKiB0aGlzLmNhbGNXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChkaW0ud2lkdGgsIDEwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJldmVyc2VEaW1lbnNpb25XaWR0aFRvUGVyY2VudCh3aWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCAqIDEwMCAvIHRoaXMuY2FsY1dpZHRoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBpdm90Q29udGVudENhbGNXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgdG90YWxEaW1XaWR0aCA9IHRoaXMucm93RGltZW5zaW9ucy5sZW5ndGggPiAwID9cbiAgICAgICAgICAgIHRoaXMucm93RGltZW5zaW9ucy5tYXAoKGRpbSkgPT4gdGhpcy5yb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbSkpLnJlZHVjZSgocHJldiwgY3VyKSA9PiBwcmV2ICsgY3VyKSA6XG4gICAgICAgICAgICAwO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxjV2lkdGggLSB0b3RhbERpbVdpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RQaW5uZWRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNob3VsZEdlbmVyYXRlID8gKHRoaXMuaXNQaW5uaW5nVG9TdGFydCA/IHRoaXMucGlubmVkV2lkdGggOiB0aGlzLmhlYWRlckZlYXR1cmVzV2lkdGgpIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBpdm90VW5waW5uZWRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNob3VsZEdlbmVyYXRlID8gdGhpcy51bnBpbm5lZFdpZHRoIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHJvd0RpbWVuc2lvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzPy5maWx0ZXIoeCA9PiB4LmVuYWJsZWQpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgY29sdW1uRGltZW5zaW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtbnM/LmZpbHRlcih4ID0+IHguZW5hYmxlZCkgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBmaWx0ZXJEaW1lbnNpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlQ29sdW1uKGNvbDogSWd4Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5nZXQoY29sLmZpZWxkKTtcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSAhc3RhdGU7XG4gICAgICAgIHRoaXMuY29sdW1uR3JvdXBTdGF0ZXMuc2V0KGNvbC5maWVsZCwgbmV3U3RhdGUpO1xuICAgICAgICB0aGlzLnRvZ2dsZVJvd0dyb3VwKGNvbCwgbmV3U3RhdGUpO1xuICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXRDb2x1bW5XaWR0aFN1bSgpOiBudW1iZXIge1xuICAgICAgICBsZXQgY29sU3VtID0gc3VwZXIuZ2V0Q29sdW1uV2lkdGhTdW0oKTtcbiAgICAgICAgY29sU3VtICs9IHRoaXMucm93RGltZW5zaW9ucy5tYXAoZGltID0+IHRoaXMucm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW0sIHRydWUpKS5yZWR1Y2UoKHByZXYsIGN1cikgPT4gcHJldiArIGN1ciwgMCk7XG4gICAgICAgIHJldHVybiBjb2xTdW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgaXNSZWNvcmRQaW5uZWRCeUluZGV4KF9yb3dJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHRvZ2dsZUNvbHVtblZpc2liaWxpdHkoX2FyZ3M6IElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZXhwYW5kQWxsKCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbGxhcHNlQWxsKCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGV4cGFuZFJvdyhfcm93SUQ6IGFueSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbGxhcHNlUm93KF9yb3dJRDogYW55KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZFJvd3MoKTogSWd4R3JpZFJvd0NvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRvdGFsUmVjb3JkcygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCB0b3RhbFJlY29yZHMoX3RvdGFsOiBudW1iZXIpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBtb3ZlQ29sdW1uKF9jb2x1bW46IElneENvbHVtbkNvbXBvbmVudCwgX3RhcmdldDogSWd4Q29sdW1uQ29tcG9uZW50LCBfcG9zOiBEcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQWZ0ZXJEcm9wVGFyZ2V0KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWRkUm93KF9kYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBkZWxldGVSb3coX3Jvd1NlbGVjdG9yOiBhbnkpOiBhbnkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHVwZGF0ZUNlbGwoX3ZhbHVlOiBhbnksIF9yb3dTZWxlY3RvcjogYW55LCBfY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB1cGRhdGVSb3coX3ZhbHVlOiBhbnksIF9yb3dTZWxlY3RvcjogYW55KTogdm9pZCB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZW5hYmxlU3VtbWFyaWVzKC4uLl9yZXN0KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZGlzYWJsZVN1bW1hcmllcyguLi5fcmVzdCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHBpbkNvbHVtbihfY29sdW1uTmFtZTogc3RyaW5nIHwgSWd4Q29sdW1uQ29tcG9uZW50LCBfaW5kZXg/KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB1bnBpbkNvbHVtbihfY29sdW1uTmFtZTogc3RyaW5nIHwgSWd4Q29sdW1uQ29tcG9uZW50LCBfaW5kZXg/KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBwaW5Sb3coX3Jvd0lEOiBhbnksIF9pbmRleD86IG51bWJlciwgX3Jvdz86IFJvd1R5cGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHVucGluUm93KF9yb3dJRDogYW55LCBfcm93PzogUm93VHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZFJvd0hlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBoYXNFZGl0YWJsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGFzU3VtbWFyaXplZENvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGFzTW92YWJsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGlubmVkRGF0YVZpZXcoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgb3BlbkFkdmFuY2VkRmlsdGVyaW5nRGlhbG9nKF9vdmVybGF5U2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjbG9zZUFkdmFuY2VkRmlsdGVyaW5nRGlhbG9nKF9hcHBseUNoYW5nZXM6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBlbmRFZGl0KF9jb21taXQgPSB0cnVlLCBfZXZlbnQ/OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYmVnaW5BZGRSb3dCeUlkKF9yb3dJRDogYW55LCBfYXNDaGlsZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBiZWdpbkFkZFJvd0J5SW5kZXgoX2luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjbGVhclNlYXJjaCgpIHsgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHJlZnJlc2hTZWFyY2goX3VwZGF0ZUFjdGl2ZUluZm8/OiBib29sZWFuLCBfZW5kRWRpdCA9IHRydWUpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZmluZE5leHQoX3RleHQ6IHN0cmluZywgX2Nhc2VTZW5zaXRpdmU/OiBib29sZWFuLCBfZXhhY3RNYXRjaD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZmluZFByZXYoX3RleHQ6IHN0cmluZywgX2Nhc2VTZW5zaXRpdmU/OiBib29sZWFuLCBfZXhhY3RNYXRjaD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0TmV4dENlbGwoY3VyclJvd0luZGV4OiBudW1iZXIsIGN1clZpc2libGVDb2xJbmRleDogbnVtYmVyLFxuICAgICAgICBjYWxsYmFjazogKElneENvbHVtbkNvbXBvbmVudCkgPT4gYm9vbGVhbiA9IG51bGwpOiBJQ2VsbFBvc2l0aW9uIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldE5leHRDZWxsKGN1cnJSb3dJbmRleCwgY3VyVmlzaWJsZUNvbEluZGV4LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldFByZXZpb3VzQ2VsbChjdXJyUm93SW5kZXg6IG51bWJlciwgY3VyVmlzaWJsZUNvbEluZGV4OiBudW1iZXIsXG4gICAgICAgIGNhbGxiYWNrOiAoSWd4Q29sdW1uQ29tcG9uZW50KSA9PiBib29sZWFuID0gbnVsbCk6IElDZWxsUG9zaXRpb24ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0UHJldmlvdXNDZWxsKGN1cnJSb3dJbmRleCwgY3VyVmlzaWJsZUNvbEluZGV4LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldFBpbm5lZFdpZHRoKHRha2VIaWRkZW4gPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0UGlubmVkV2lkdGgodGFrZUhpZGRlbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRvdGFsSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxjSGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW5Hcm91cEV4cGFuZFN0YXRlKGNvbDogSWd4Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5nZXQoY29sLmZpZWxkKTtcbiAgICAgICAgLy8gY29sdW1ucyBhcmUgZXhwYW5kZWQgYnkgZGVmYXVsdD9cbiAgICAgICAgcmV0dXJuIHN0YXRlICE9PSB1bmRlZmluZWQgJiYgc3RhdGUgIT09IG51bGwgPyBzdGF0ZSA6IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVSb3dHcm91cChjb2w6IElneENvbHVtbkNvbXBvbmVudCwgbmV3U3RhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFjb2wpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbHMgPSBjb2wucGFyZW50ID8gY29sLnBhcmVudC5jaGlsZHJlbi50b0FycmF5KCkgOiB0aGlzLl9hdXRvR2VuZXJhdGVkQ29scy5maWx0ZXIoeCA9PiB4LmxldmVsID09PSAwKTtcbiAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdDb2wgPSBwYXJlbnRDb2xzLmZpbHRlcih4ID0+IHguaGVhZGVyID09PSBjb2wuaGVhZGVyICYmIHggIT09IGNvbClbMF07XG4gICAgICAgICAgICBjb25zdCBjdXJySW5kZXggPSBwYXJlbnRDb2xzLmluZGV4T2YoY29sKTtcbiAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdJbmRleCA9IHBhcmVudENvbHMuaW5kZXhPZihzaWJsaW5nQ29sKTtcbiAgICAgICAgICAgIGlmIChjdXJySW5kZXggPCBzaWJsaW5nSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGlja2VkIG9uIHRoZSBmdWxsIGhpZXJhcmNoeSBoZWFkZXJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVUb2dnbGUoY29sLCBuZXdTdGF0ZSk7XG4gICAgICAgICAgICAgICAgc2libGluZ0NvbC5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNsaWNrZWQgb24gc3VtbWFyeSBwYXJlbnQgY29sdW1uIHRoYXQgY29udGFpbnMganVzdCB0aGUgbWVhc3VyZXNcbiAgICAgICAgICAgICAgICBjb2wuaGVhZGVyVGVtcGxhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVG9nZ2xlKHNpYmxpbmdDb2wsIG5ld1N0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbHMgPSBjb2wucGFyZW50ID8gY29sLnBhcmVudC5jaGlsZHJlbiA6IHRoaXMuX2F1dG9HZW5lcmF0ZWRDb2xzLmZpbHRlcih4ID0+IHgubGV2ZWwgPT09IDApO1xuICAgICAgICAgICAgY29uc3QgZmllbGRDb2x1bW4gPSBwYXJlbnRDb2xzLmZpbHRlcih4ID0+IHguaGVhZGVyID09PSBjb2wuaGVhZGVyICYmICF4LmNvbHVtbkdyb3VwKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQ29sdW1uID0gcGFyZW50Q29scy5maWx0ZXIoeCA9PiB4LmhlYWRlciA9PT0gY29sLmhlYWRlciAmJiB4LmNvbHVtbkdyb3VwKVswXTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVRvZ2dsZShncm91cENvbHVtbiwgbmV3U3RhdGUpO1xuICAgICAgICAgICAgaWYgKG5ld1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgZmllbGRDb2x1bW4uaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaWVsZENvbHVtbi5oZWFkZXJUZW1wbGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBzZXR1cENvbHVtbnMoKSB7XG4gICAgICAgIHN1cGVyLnNldHVwQ29sdW1ucygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEF1dG8tc2l6ZXMgcm93IGRpbWVuc2lvbiBjZWxscy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogT25seSBzaXplcyBiYXNlZCBvbiB0aGUgZGltZW5zaW9uIGNlbGxzIGluIHZpZXcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLmF1dG9TaXplUm93RGltZW5zaW9uKGRpbWVuc2lvbik7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGRpbWVuc2lvbiBUaGUgcm93IGRpbWVuc2lvbiB0byBzaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyBhdXRvU2l6ZVJvd0RpbWVuc2lvbihkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbikge1xuICAgICAgICBpZiAodGhpcy5nZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbikgPT09IFBpdm90RGltZW5zaW9uVHlwZS5Sb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWREaW1zID0gUGl2b3RVdGlsLmZsYXR0ZW4oW2RpbWVuc2lvbl0pLm1hcCh4ID0+IHgubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yb3dEaW1lbnNpb25Db250ZW50Q29sbGVjdGlvbi5maWx0ZXIoeCA9PiByZWxhdGVkRGltcy5pbmRleE9mKHguZGltZW5zaW9uLm1lbWJlck5hbWUpICE9PSAtMSk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gY29udGVudC5tYXAoeCA9PiB4LmhlYWRlckdyb3Vwcy50b0FycmF5KCkpLmZsYXQoKS5tYXAoeCA9PiB4LmhlYWRlciAmJiB4LmhlYWRlci5yZWZJbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCBhdXRvV2lkdGggPSB0aGlzLmdldExhcmdlc0NvbnRlbnRXaWR0aChoZWFkZXJzKTtcbiAgICAgICAgICAgIGRpbWVuc2lvbi53aWR0aCA9IGF1dG9XaWR0aDtcbiAgICAgICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydHMgZGltZW5zaW9uIGluIHRhcmdldCBjb2xsZWN0aW9uIGJ5IHR5cGUgYXQgc3BlY2lmaWVkIGluZGV4IG9yIGF0IHRoZSBjb2xsZWN0aW9uJ3MgZW5kLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLmluc2VydERpbWVuc2lvbkF0KGRpbWVuc2lvbiwgUGl2b3REaW1lbnNpb25UeXBlLlJvdywgMSk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGRpbWVuc2lvbiBUaGUgZGltZW5zaW9uIHRoYXQgd2lsbCBiZSBhZGRlZC5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0Q29sbGVjdGlvblR5cGUgVGhlIHRhcmdldCBjb2xsZWN0aW9uIHR5cGUgdG8gYWRkIHRvLiBDYW4gYmUgUm93LCBDb2x1bW4gb3IgRmlsdGVyLlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggaW4gdGhlIGNvbGxlY3Rpb24gYXQgd2hpY2ggdG8gYWRkLlxuICAgICAqIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBJZiBub3Qgc2V0IGl0IHdpbGwgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIGluc2VydERpbWVuc2lvbkF0KGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCB0YXJnZXRDb2xsZWN0aW9uVHlwZTogUGl2b3REaW1lbnNpb25UeXBlLCBpbmRleD86IG51bWJlcikge1xuICAgICAgICBjb25zdCB0YXJnZXRDb2xsZWN0aW9uID0gdGhpcy5nZXREaW1lbnNpb25zQnlUeXBlKHRhcmdldENvbGxlY3Rpb25UeXBlKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRhcmdldENvbGxlY3Rpb24uc3BsaWNlKGluZGV4LCAwLCBkaW1lbnNpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0Q29sbGVjdGlvbi5wdXNoKGRpbWVuc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldENvbGxlY3Rpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5kaW1lbnNpb25zQ2hhbmdlLmVtaXQoeyBkaW1lbnNpb25zOiB0YXJnZXRDb2xsZWN0aW9uLCBkaW1lbnNpb25Db2xsZWN0aW9uVHlwZTogdGFyZ2V0Q29sbGVjdGlvblR5cGUgfSk7XG4gICAgICAgIGlmICh0YXJnZXRDb2xsZWN0aW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5kaW1lbnNpb25EYXRhQ29sdW1ucyA9IHRoaXMuZ2VuZXJhdGVEaW1lbnNpb25Db2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmUgZGltZW5zaW9uIGZyb20gaXRzIGN1cnJlbnRseSBjb2xsZWN0aW9uIHRvIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IGNvbGxlY3Rpb24gYnkgdHlwZSBhdCBzcGVjaWZpZWQgaW5kZXggb3IgYXQgdGhlIGNvbGxlY3Rpb24ncyBlbmQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQubW92ZURpbWVuc2lvbihkaW1lbnNpb24sIFBpdm90RGltZW5zaW9uVHlwZS5Sb3csIDEpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBkaW1lbnNpb24gVGhlIGRpbWVuc2lvbiB0aGF0IHdpbGwgYmUgbW92ZWQuXG4gICAgICogQHBhcmFtIHRhcmdldENvbGxlY3Rpb25UeXBlIFRoZSB0YXJnZXQgY29sbGVjdGlvbiB0eXBlIHRvIG1vdmUgaXQgdG8uIENhbiBiZSBSb3csIENvbHVtbiBvciBGaWx0ZXIuXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBpbiB0aGUgY29sbGVjdGlvbiBhdCB3aGljaCB0byBhZGQuXG4gICAgICogVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIElmIG5vdCBzZXQgaXQgd2lsbCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgbW92ZURpbWVuc2lvbihkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiwgdGFyZ2V0Q29sbGVjdGlvblR5cGU6IFBpdm90RGltZW5zaW9uVHlwZSwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcHJldkNvbGxlY3Rpb25UeXBlID0gdGhpcy5nZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbik7XG4gICAgICAgIGlmIChwcmV2Q29sbGVjdGlvblR5cGUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgLy8gcmVtb3ZlIGZyb20gb2xkIGNvbGxlY3Rpb25cbiAgICAgICAgdGhpcy5fcmVtb3ZlRGltZW5zaW9uSW50ZXJuYWwoZGltZW5zaW9uKTtcbiAgICAgICAgLy8gYWRkIHRvIHRhcmdldFxuICAgICAgICB0aGlzLmluc2VydERpbWVuc2lvbkF0KGRpbWVuc2lvbiwgdGFyZ2V0Q29sbGVjdGlvblR5cGUsIGluZGV4KTtcblxuICAgICAgICBpZiAocHJldkNvbGxlY3Rpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBkaW1lbnNpb24gZnJvbSBpdHMgY3VycmVudGx5IGNvbGxlY3Rpb24uXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHRvZ2dsZURpbWVuc2lvbiB0aGF0IGVuYWJsZWQvZGlzYWJsZXMgdGhlIGRpbWVuc2lvbi5cbiAgICAgKiBUaGlzIGNvbXBsZXRlbHkgcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbiBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5yZW1vdmVEaW1lbnNpb24oZGltZW5zaW9uKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9uIFRoZSBkaW1lbnNpb24gdG8gYmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlRGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgIGNvbnN0IHByZXZDb2xsZWN0aW9uVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICB0aGlzLl9yZW1vdmVEaW1lbnNpb25JbnRlcm5hbChkaW1lbnNpb24pO1xuICAgICAgICBpZiAocHJldkNvbGxlY3Rpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2Q29sbGVjdGlvblR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgZGltZW5zaW9uJ3MgZW5hYmxlZCBzdGF0ZSBvbiBvciBvZmYuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUgZGltZW5zaW9uIHJlbWFpbnMgaW4gaXRzIGN1cnJlbnQgY29sbGVjdGlvbi4gVGhpcyBqdXN0IGNoYW5nZXMgaXRzIGVuYWJsZWQgc3RhdGUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLnRvZ2dsZURpbWVuc2lvbihkaW1lbnNpb24pO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBkaW1lbnNpb24gVGhlIGRpbWVuc2lvbiB0byBiZSB0b2dnbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVEaW1lbnNpb24oZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgY29uc3QgZGltVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICBpZiAoZGltVHlwZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5nZXREaW1lbnNpb25zQnlUeXBlKGRpbVR5cGUpO1xuICAgICAgICBkaW1lbnNpb24uZW5hYmxlZCA9ICFkaW1lbnNpb24uZW5hYmxlZDtcbiAgICAgICAgaWYgKGRpbVR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkaW1lbnNpb24uZW5hYmxlZCAmJiBkaW1lbnNpb24uZmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuY2xlYXJGaWx0ZXIoZGltZW5zaW9uLm1lbWJlck5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5kaW1lbnNpb25zQ2hhbmdlLmVtaXQoeyBkaW1lbnNpb25zOiBjb2xsZWN0aW9uLCBkaW1lbnNpb25Db2xsZWN0aW9uVHlwZTogZGltVHlwZSB9KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBpZiAoZGltVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbkNoYW5nZS5lbWl0KHsgcGl2b3RDb25maWd1cmF0aW9uOiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbiB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnRzIHZhbHVlIGF0IHNwZWNpZmllZCBpbmRleCBvciBhdCB0aGUgZW5kLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLmluc2VydFZhbHVlQXQodmFsdWUsIDEpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgZGVmaW5pdGlvbiB0aGF0IHdpbGwgYmUgYWRkZWQuXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBpbiB0aGUgY29sbGVjdGlvbiBhdCB3aGljaCB0byBhZGQuXG4gICAgICogVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIElmIG5vdCBzZXQgaXQgd2lsbCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW5zZXJ0VmFsdWVBdCh2YWx1ZTogSVBpdm90VmFsdWUsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXM7XG4gICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKGluZGV4LCAwLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMudmFsdWVzQ2hhbmdlLmVtaXQoeyB2YWx1ZXMgfSk7XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmUgdmFsdWUgZnJvbSBpdHMgY3VycmVudGx5IGF0IHNwZWNpZmllZCBpbmRleCBvciBhdCB0aGUgZW5kLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLm1vdmVWYWx1ZSh2YWx1ZSwgMSk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgbW92ZWQuXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBpbiB0aGUgY29sbGVjdGlvbiBhdCB3aGljaCB0byBhZGQuXG4gICAgICogVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIElmIG5vdCBzZXQgaXQgd2lsbCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgbW92ZVZhbHVlKHZhbHVlOiBJUGl2b3RWYWx1ZSwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHJldHVybjtcbiAgICAgICAgLy8gcmVtb3ZlIGZyb20gb2xkIGluZGV4XG4gICAgICAgIHRoaXMucmVtb3ZlVmFsdWUodmFsdWUpO1xuICAgICAgICAvLyBhZGQgdG8gbmV3XG4gICAgICAgIHRoaXMuaW5zZXJ0VmFsdWVBdCh2YWx1ZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdmFsdWUgZnJvbSBjb2xsZWN0aW9uLlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0b2dnbGVWYWx1ZSB0aGF0IGVuYWJsZWQvZGlzYWJsZXMgdGhlIHZhbHVlLlxuICAgICAqIFRoaXMgY29tcGxldGVseSByZW1vdmVzIHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgY29sbGVjdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQucmVtb3ZlVmFsdWUoZGltZW5zaW9uKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZVZhbHVlKHZhbHVlOiBJUGl2b3RWYWx1ZSwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB2YWx1ZXMuaW5kZXhPZih2YWx1ZSk7XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNDaGFuZ2UuZW1pdCh7IHZhbHVlcyB9KTtcbiAgICAgICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgdmFsdWUncyBlbmFibGVkIHN0YXRlIG9uIG9yIG9mZi5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSB2YWx1ZSByZW1haW5zIGluIGl0cyBjdXJyZW50IGNvbGxlY3Rpb24uIFRoaXMganVzdCBjaGFuZ2VzIGl0cyBlbmFibGVkIHN0YXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC50b2dnbGVWYWx1ZSh2YWx1ZSk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBiZSB0b2dnbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVWYWx1ZSh2YWx1ZTogSVBpdm90VmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHJldHVybjtcbiAgICAgICAgdmFsdWUuZW5hYmxlZCA9ICF2YWx1ZS5lbmFibGVkO1xuICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMudmFsdWVzQ2hhbmdlLmVtaXQoeyB2YWx1ZXM6IHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcyB9KTtcbiAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdCh7IHBpdm90Q29uZmlndXJhdGlvbjogdGhpcy5waXZvdENvbmZpZ3VyYXRpb24gfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU29ydCB0aGUgZGltZW5zaW9uIGFuZCBpdHMgY2hpbGRyZW4gaW4gdGhlIHByb3ZpZGVkIGRpcmVjdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQuc29ydERpbWVuc2lvbihkaW1lbnNpb24sIFNvcnRpbmdEaXJlY3Rpb24uQXNjKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHRvZ2dsZWQuXG4gICAgICovXG4gICAgcHVibGljIHNvcnREaW1lbnNpb24oZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24sIHNvcnREaXJlY3Rpb246IFNvcnRpbmdEaXJlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICBkaW1lbnNpb24uc29ydERpcmVjdGlvbiA9IHNvcnREaXJlY3Rpb247XG4gICAgICAgIC8vIGFwcGx5IHNhbWUgc29ydCBkaXJlY3Rpb24gdG8gY2hpbGRyZW4uXG4gICAgICAgIGxldCBkaW0gPSBkaW1lbnNpb247XG4gICAgICAgIHdoaWxlIChkaW0uY2hpbGRMZXZlbCkge1xuICAgICAgICAgICAgZGltLmNoaWxkTGV2ZWwuc29ydERpcmVjdGlvbiA9IGRpbWVuc2lvbi5zb3J0RGlyZWN0aW9uO1xuICAgICAgICAgICAgZGltID0gZGltLmNoaWxkTGV2ZWw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnNDaGFuZ2UuZW1pdCh0aGlzLmRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnMpO1xuICAgICAgICBpZiAoZGltZW5zaW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbHRlcnMgYSBzaW5nbGUgYElQaXZvdERpbWVuc2lvbmAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgZmlsdGVyKCkge1xuICAgICAqICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpO1xuICAgICAqICAgICAgc2V0LmFkZCgnVmFsdWUgMScpO1xuICAgICAqICAgICAgc2V0LmFkZCgnVmFsdWUgMicpO1xuICAgICAqICAgICAgdGhpcy5ncmlkMS5maWx0ZXJEaW1lbnNpb24odGhpcy5waXZvdENvbmZpZ0hpZXJhcmNoeS5yb3dzWzBdLCBzZXQsIElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKS5jb25kaXRpb24oJ2luJykpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyRGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCB2YWx1ZTogYW55LCBjb25kaXRpb25PckV4cHJlc3Npb25UcmVlPzogSUZpbHRlcmluZ09wZXJhdGlvbiB8IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nU2VydmljZS5maWx0ZXIoZGltZW5zaW9uLm1lbWJlck5hbWUsIHZhbHVlLCBjb25kaXRpb25PckV4cHJlc3Npb25UcmVlKTtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICBpZiAoZGltZW5zaW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGltZW5zaW9uc0J5VHlwZShkaW1lbnNpb246IFBpdm90RGltZW5zaW9uVHlwZSkge1xuICAgICAgICBzd2l0Y2ggKGRpbWVuc2lvbikge1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuUm93OlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5waXZvdENvbmZpZ3VyYXRpb24ucm93cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zO1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJlc2l6ZVJvd0RpbWVuc2lvblBpeGVscyhkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiwgbmV3V2lkdGg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpc1BlcmNlbnRhZ2VXaWR0aCA9IGRpbWVuc2lvbi53aWR0aCAmJiB0eXBlb2YgZGltZW5zaW9uLndpZHRoID09PSAnc3RyaW5nJyAmJiBkaW1lbnNpb24ud2lkdGguaW5kZXhPZignJScpICE9PSAtMTtcbiAgICAgICAgaWYgKGlzUGVyY2VudGFnZVdpZHRoKSB7XG4gICAgICAgICAgICBkaW1lbnNpb24ud2lkdGggPSB0aGlzLnJldmVyc2VEaW1lbnNpb25XaWR0aFRvUGVyY2VudChuZXdXaWR0aCkudG9GaXhlZCgyKSArICclJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbi53aWR0aCA9IG5ld1dpZHRoICsgJ3B4JztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vdGlmeSB0aGUgZ3JpZCB0byByZWZsb3csIHRvIHVwZGF0ZSBpZiBob3Jpem9udGFsIHNjcm9sbGJhciBuZWVkcyB0byBiZSByZW5kZXJlZC9yZW1vdmVkLlxuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICogQGhpZGRlblxuICAgICogQGludGVybmFsXG4gICAgKi9cbiAgICBwcm90ZWN0ZWQgX3JlbW92ZURpbWVuc2lvbkludGVybmFsKGRpbWVuc2lvbikge1xuICAgICAgICBjb25zdCBwcmV2Q29sbGVjdGlvblR5cGUgPSB0aGlzLmdldERpbWVuc2lvblR5cGUoZGltZW5zaW9uKTtcbiAgICAgICAgaWYgKHByZXZDb2xsZWN0aW9uVHlwZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBwcmV2Q29sbGVjdGlvbiA9IHRoaXMuZ2V0RGltZW5zaW9uc0J5VHlwZShwcmV2Q29sbGVjdGlvblR5cGUpO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBwcmV2Q29sbGVjdGlvbi5pbmRleE9mKGRpbWVuc2lvbik7XG4gICAgICAgIHByZXZDb2xsZWN0aW9uLnNwbGljZShjdXJyZW50SW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbik6IFBpdm90RGltZW5zaW9uVHlwZSB7XG4gICAgICAgIHJldHVybiBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzKS5pbmRleE9mKGRpbWVuc2lvbikgIT09IC0xID8gUGl2b3REaW1lbnNpb25UeXBlLlJvdyA6XG4gICAgICAgICAgICBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zKS5pbmRleE9mKGRpbWVuc2lvbikgIT09IC0xID8gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbiA6XG4gICAgICAgICAgICAgICAgKCEhdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycyAmJiBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzKS5pbmRleE9mKGRpbWVuc2lvbikgIT09IC0xKSA/XG4gICAgICAgICAgICAgICAgICAgIFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXIgOiBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRMYXJnZXNDb250ZW50V2lkdGgoY29udGVudHM6IEVsZW1lbnRSZWZbXSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxhcmdlc3QgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY2VsbHNDb250ZW50V2lkdGhzID0gW107XG4gICAgICAgICAgICBjb250ZW50cy5mb3JFYWNoKChlbGVtKSA9PiBjZWxsc0NvbnRlbnRXaWR0aHMucHVzaCh0aGlzLmdldEhlYWRlckNlbGxXaWR0aChlbGVtLm5hdGl2ZUVsZW1lbnQpLndpZHRoKSk7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGNlbGxzQ29udGVudFdpZHRocy5pbmRleE9mKE1hdGgubWF4KC4uLmNlbGxzQ29udGVudFdpZHRocykpO1xuICAgICAgICAgICAgY29uc3QgY2VsbFN0eWxlID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGNvbnRlbnRzW2luZGV4XS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxQYWRkaW5nID0gcGFyc2VGbG9hdChjZWxsU3R5bGUucGFkZGluZ0xlZnQpICsgcGFyc2VGbG9hdChjZWxsU3R5bGUucGFkZGluZ1JpZ2h0KSArXG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdChjZWxsU3R5bGUuYm9yZGVyTGVmdFdpZHRoKSArIHBhcnNlRmxvYXQoY2VsbFN0eWxlLmJvcmRlclJpZ2h0V2lkdGgpO1xuICAgICAgICAgICAgbGFyZ2VzdC5zZXQoTWF0aC5tYXgoLi4uY2VsbHNDb250ZW50V2lkdGhzKSwgY2VsbFBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhcmdlc3RDZWxsID0gTWF0aC5tYXgoLi4uQXJyYXkuZnJvbShsYXJnZXN0LmtleXMoKSkpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGguY2VpbChsYXJnZXN0Q2VsbCArIGxhcmdlc3QuZ2V0KGxhcmdlc3RDZWxsKSk7XG5cbiAgICAgICAgaWYgKE51bWJlci5pc05hTih3aWR0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHdpZHRoICsgJ3B4JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICovXG4gICAgcHVibGljIGdldCBoYXNNdWx0aXBsZVZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aCA+IDE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKi9cbiAgICBwdWJsaWMgZ2V0IGV4Y2VsU3R5bGVGaWx0ZXJNYXhIZWlnaHQoKSB7XG4gICAgICAgIC8vIG1heCAxMCByb3dzLCByb3cgc2l6ZSBkZXBlbmRzIG9uIGRlbnNpdHlcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5yZW5kZXJlZFJvd0hlaWdodCAqIDEwO1xuICAgICAgICByZXR1cm4gYCR7bWF4SGVpZ2h0fXB4YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqL1xuICAgIHB1YmxpYyBnZXQgZXhjZWxTdHlsZUZpbHRlck1pbkhlaWdodCgpOiBzdHJpbmcge1xuICAgICAgICAvLyBtaW4gNSByb3dzLCByb3cgc2l6ZSBkZXBlbmRzIG9uIGRlbnNpdHlcbiAgICAgICAgY29uc3QgbWluSGVpZ2h0ID0gdGhpcy5yZW5kZXJlZFJvd0hlaWdodCAqIDU7XG4gICAgICAgIHJldHVybiBgJHttaW5IZWlnaHR9cHhgO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlVG9nZ2xlKGdyb3VwQ29sdW1uOiBJZ3hDb2x1bW5Db21wb25lbnQsIHN0YXRlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghZ3JvdXBDb2x1bW4pIHJldHVybjtcbiAgICAgICAgZ3JvdXBDb2x1bW4uaGlkZGVuID0gc3RhdGU7XG4gICAgICAgIHRoaXMuY29sdW1uR3JvdXBTdGF0ZXMuc2V0KGdyb3VwQ29sdW1uLmZpZWxkLCBzdGF0ZSk7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuVG90YWwgPSB0aGlzLmhhc011bHRpcGxlVmFsdWVzID9cbiAgICAgICAgICAgIGdyb3VwQ29sdW1uLmNoaWxkcmVuLmZpbHRlcih4ID0+IHguY29sdW1uR3JvdXAgJiYgeC5jaGlsZHJlbi5maWx0ZXIoeSA9PiAheS5jb2x1bW5Hcm91cCkubGVuZ3RoID09PSB0aGlzLnZhbHVlcy5sZW5ndGgpIDpcbiAgICAgICAgICAgIGdyb3VwQ29sdW1uLmNoaWxkcmVuLmZpbHRlcih4ID0+ICF4LmNvbHVtbkdyb3VwKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5TdWJncm91cHMgPSB0aGlzLmhhc011bHRpcGxlVmFsdWVzID9cbiAgICAgICAgICAgIGdyb3VwQ29sdW1uLmNoaWxkcmVuLmZpbHRlcih4ID0+IHguY29sdW1uR3JvdXAgJiYgeC5jaGlsZHJlbi5maWx0ZXIoeSA9PiAheS5jb2x1bW5Hcm91cCkubGVuZ3RoID09PSAwKSA6XG4gICAgICAgICAgICBncm91cENvbHVtbi5jaGlsZHJlbi5maWx0ZXIoeCA9PiB4LmNvbHVtbkdyb3VwKTtcbiAgICAgICAgY2hpbGRyZW5Ub3RhbC5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5nZXQoZ3JvdXAuZmllbGQpIHx8IHN0YXRlO1xuICAgICAgICAgICAgaWYgKG5ld1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncm91cC5oZWFkZXJUZW1wbGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZ3JvdXBDb2x1bW4uaGlkZGVuICYmIGNoaWxkcmVuU3ViZ3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNoaWxkcmVuU3ViZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0gdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5nZXQoZ3JvdXAuZmllbGQpIHx8IHN0YXRlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVRvZ2dsZShncm91cCwgbmV3U3RhdGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGNhbGNHcmlkSGVhZFJvdygpIHtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYnVpbGREYXRhVmlldyhkYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl9kYXRhVmlldyA9IGRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0RGF0YUJhc2VkQm9keUhlaWdodCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBkdmwgPSB0aGlzLmRhdGFWaWV3Py5sZW5ndGggfHwgMDtcbiAgICAgICAgcmV0dXJuIGR2bCA8IHRoaXMuX2RlZmF1bHRUYXJnZXRSZWNvcmROdW1iZXIgPyAwIDogdGhpcy5kZWZhdWx0VGFyZ2V0Qm9keUhlaWdodDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaG9yaXpvbnRhbFNjcm9sbEhhbmRsZXIoZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IGV2ZW50LnRhcmdldC5zY3JvbGxMZWZ0O1xuICAgICAgICB0aGlzLnRoZWFkUm93LmhlYWRlckNvbnRhaW5lcnMuZm9yRWFjaChoZWFkZXJGb3JPZiA9PiB7XG4gICAgICAgICAgICBoZWFkZXJGb3JPZi5vbkhTY3JvbGwoc2Nyb2xsTGVmdCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdXBlci5ob3Jpem9udGFsU2Nyb2xsSGFuZGxlcihldmVudCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZlcnRpY2FsU2Nyb2xsSGFuZGxlcihldmVudCkge1xuICAgICAgICB0aGlzLnZlcnRpY2FsUm93RGltU2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgeC5vblNjcm9sbChldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdXBlci52ZXJ0aWNhbFNjcm9sbEhhbmRsZXIoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXV0b2dlbmVyYXRlQ29sdW1ucygpIHtcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBbXTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ3JpZEFQSS5maWx0ZXJEYXRhQnlFeHByZXNzaW9ucyh0aGlzLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk7XG4gICAgICAgIHRoaXMuZGltZW5zaW9uRGF0YUNvbHVtbnMgPSB0aGlzLmdlbmVyYXRlRGltZW5zaW9uQ29sdW1ucygpO1xuICAgICAgICBjb25zdCBmbGF0dGVuZWRDb2x1bW5zV2l0aFNvcnRpbmcgPSBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLmNvbHVtbkRpbWVuc2lvbnMpLmZpbHRlcihkaW0gPT4gZGltLnNvcnREaXJlY3Rpb24pO1xuICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9ICBmbGF0dGVuZWRDb2x1bW5zV2l0aFNvcnRpbmcubGVuZ3RoID4gMD8gUGl2b3RTb3J0VXRpbC5nZW5lcmF0ZURpbWVuc2lvblNvcnRpbmdFeHByZXNzaW9ucyhmbGF0dGVuZWRDb2x1bW5zV2l0aFNvcnRpbmcpIDogW107XG4gICAgICAgIGxldCBzb3J0ZWREYXRhID0gZGF0YTtcbiAgICAgICAgaWYgKGV4cHJlc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNvcnRlZERhdGEgPSBEYXRhVXRpbC5zb3J0KGNsb25lQXJyYXkoZGF0YSksIGV4cHJlc3Npb25zLCB0aGlzLnNvcnRTdHJhdGVneSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpZWxkc01hcDtcbiAgICAgICAgaWYgKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtblN0cmF0ZWd5ICYmIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtblN0cmF0ZWd5IGluc3RhbmNlb2YgTm9vcFBpdm90RGltZW5zaW9uc1N0cmF0ZWd5KSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmdlbmVyYXRlRGF0YUZpZWxkcyhzb3J0ZWREYXRhKTtcbiAgICAgICAgICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCByb3dGaWVsZHMgPSBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzKS5tYXAoeCA9PiB4Lm1lbWJlck5hbWUpO1xuICAgICAgICAgICAgY29uc3Qga2V5RmllbGRzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnBpdm90S2V5cyk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEZpZWxkcyA9IGZpZWxkcy5maWx0ZXIoeCA9PiByb3dGaWVsZHMuaW5kZXhPZih4KSA9PT0gLTEgJiYga2V5RmllbGRzLmluZGV4T2YoeCkgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgeC5pbmRleE9mKHRoaXMucGl2b3RLZXlzLnJvd0RpbWVuc2lvblNlcGFyYXRvciArIHRoaXMucGl2b3RLZXlzLmxldmVsKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICB4LmluZGV4T2YodGhpcy5waXZvdEtleXMucm93RGltZW5zaW9uU2VwYXJhdG9yICsgdGhpcy5waXZvdEtleXMucmVjb3JkcykgPT09IC0xKTtcbiAgICAgICAgICAgIGZpZWxkc01hcCA9IHRoaXMuZ2VuZXJhdGVGcm9tRGF0YShmaWx0ZXJlZEZpZWxkcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZHNNYXAgPSBQaXZvdFV0aWwuZ2V0RmllbGRzSGllcmFyY2h5KFxuICAgICAgICAgICAgICAgIHNvcnRlZERhdGEsXG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EaW1lbnNpb25zLFxuICAgICAgICAgICAgICAgIFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4sXG4gICAgICAgICAgICAgICAgdGhpcy5waXZvdEtleXMsXG4gICAgICAgICAgICAgICAgdGhpcy5waXZvdFZhbHVlQ2xvbmVTdHJhdGVneVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb2x1bW5zID0gdGhpcy5nZW5lcmF0ZUNvbHVtbkhpZXJhcmNoeShmaWVsZHNNYXAsIHNvcnRlZERhdGEpO1xuICAgICAgICB0aGlzLl9hdXRvR2VuZXJhdGVkQ29scyA9IGNvbHVtbnM7XG4gICAgICAgIC8vIHJlc2V0IGV4cGFuc2lvbiBzdGF0ZXMgaWYgYW55IGFyZSBzdG9yZWQuXG4gICAgICAgIHRoaXMuY29sdW1uR3JvdXBTdGF0ZXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpbWFyeUNvbHVtbiA9IGNvbHVtbnMuZmluZCh4ID0+IHguZmllbGQgPT09IGtleSAmJiB4LmhlYWRlclRlbXBsYXRlID09PSB0aGlzLmhlYWRlclRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cFN1bW1hcnlDb2x1bW4gPSBjb2x1bW5zLmZpbmQoeCA9PiB4LmZpZWxkID09PSBrZXkgJiYgeC5oZWFkZXJUZW1wbGF0ZSAhPT0gdGhpcy5oZWFkZXJUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVSb3dHcm91cChwcmltYXJ5Q29sdW1uLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwU3VtbWFyeUNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBncm91cFN1bW1hcnlDb2x1bW4uaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zKGNvbHVtbnMpO1xuICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdWxkR2VuZXJhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXRDb21wb25lbnREZW5zaXR5Q2xhc3MoYmFzZVN0eWxlQ2xhc3M6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnN1cGVyQ29tcGFjdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtiYXNlU3R5bGVDbGFzc30tLSR7RGlzcGxheURlbnNpdHkuY29tcGFjdH0gaWd4LWdyaWRfX3Bpdm90LS1zdXBlci1jb21wYWN0YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0Q29tcG9uZW50RGVuc2l0eUNsYXNzKGJhc2VTdHlsZUNsYXNzKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVEaW1lbnNpb25Db2x1bW5zKCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgY29uc3Qgcm9vdEZpZWxkcyA9IHRoaXMuYWxsRGltZW5zaW9ucy5tYXAoeCA9PiB4Lm1lbWJlck5hbWUpO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gW107XG4gICAgICAgIHJvb3RGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yIH0pO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmZpZWxkID0gZmllbGQ7XG4gICAgICAgICAgICByZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHJlZi5pbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVGcm9tRGF0YShmaWVsZHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMucGl2b3RLZXlzLmNvbHVtbkRpbWVuc2lvblNlcGFyYXRvcjtcbiAgICAgICAgY29uc3QgZGF0YUFyciA9IGZpZWxkcy5tYXAoeCA9PiB4LnNwbGl0KHNlcGFyYXRvcikpLnNvcnQoeCA9PiB4Lmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGhpZXJhcmNoeSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgIGRhdGFBcnIuZm9yRWFjaChhcnIgPT4ge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRIaWVyYXJjaHkgPSBoaWVyYXJjaHk7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBhcnIpIHtcbiAgICAgICAgICAgICAgICBwYXRoLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gcGF0aC5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldEhpZXJhcmNoeSA9IGN1cnJlbnRIaWVyYXJjaHkuZ2V0KG5ld1BhdGgpO1xuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0SGllcmFyY2h5KSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRIaWVyYXJjaHkuc2V0KG5ld1BhdGgsIHsgdmFsdWU6IG5ld1BhdGgsIGV4cGFuZGFibGU6IHRydWUsIGNoaWxkcmVuOiBuZXcgTWFwPHN0cmluZywgYW55PigpLCBkaW1lbnNpb246IHRoaXMuY29sdW1uRGltZW5zaW9uc1swXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0SGllcmFyY2h5ID0gY3VycmVudEhpZXJhcmNoeS5nZXQobmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRIaWVyYXJjaHkgPSB0YXJnZXRIaWVyYXJjaHkuY2hpbGRyZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaGllcmFyY2h5O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZUNvbHVtbkhpZXJhcmNoeShmaWVsZHM6IE1hcDxzdHJpbmcsIGFueT4sIGRhdGEsIHBhcmVudCA9IG51bGwpOiBJZ3hDb2x1bW5Db21wb25lbnRbXSB7XG4gICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgIGlmIChmaWVsZHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWYgPSBjcmVhdGVDb21wb25lbnQoSWd4Q29sdW1uQ29tcG9uZW50LCB7IGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52SW5qZWN0b3IsIGVsZW1lbnRJbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyID0gdmFsdWUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLmZpZWxkID0gdmFsdWUubWVtYmVyO1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLnNvcnRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2UuZGF0YVR5cGUgPSB2YWx1ZS5kYXRhVHlwZSB8fCB0aGlzLnJlc29sdmVEYXRhVHlwZXMoZGF0YVswXVt2YWx1ZS5tZW1iZXJdKTtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2UuZm9ybWF0dGVyID0gdmFsdWUuZm9ybWF0dGVyO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChyZWYuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50RmllbGRzID0gZmllbGRzO1xuICAgICAgICBjdXJyZW50RmllbGRzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBsZXQgc2hvdWxkR2VuZXJhdGUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZSAmJiAodmFsdWUuY2hpbGRyZW4gPT0gbnVsbCB8fCB2YWx1ZS5jaGlsZHJlbi5sZW5ndGggPT09IDAgfHwgdmFsdWUuY2hpbGRyZW4uc2l6ZSA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmNyZWF0ZUNvbHVtbkZvckRpbWVuc2lvbih2YWx1ZSwgZGF0YSwgcGFyZW50LCB0aGlzLmhhc011bHRpcGxlVmFsdWVzKTtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goY29sKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNNdWx0aXBsZVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZWFzdXJlQ2hpbGRyZW4gPSB0aGlzLmdldE1lYXN1cmVDaGlsZHJlbihkYXRhLCBjb2wsIGZhbHNlLCB2YWx1ZS5kaW1lbnNpb24ud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ucmVzZXQobWVhc3VyZUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KG1lYXN1cmVDaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNob3VsZEdlbmVyYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sID0gdGhpcy5jcmVhdGVDb2x1bW5Gb3JEaW1lbnNpb24odmFsdWUsIGRhdGEsIHBhcmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmV4cGFuZGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sLmhlYWRlclRlbXBsYXRlID0gdGhpcy5oZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdlbmVyYXRlQ29sdW1uSGllcmFyY2h5KHZhbHVlLmNoaWxkcmVuLCBkYXRhLCBjb2wpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoeCA9PiB4LmxldmVsID09PSBjb2wubGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goY29sKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNNdWx0aXBsZVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWVhc3VyZUNoaWxkcmVuID0gdGhpcy5nZXRNZWFzdXJlQ2hpbGRyZW4oZGF0YSwgY29sLCB0cnVlLCB2YWx1ZS5kaW1lbnNpb24ud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRDaGlsZHJlbiA9IGZpbHRlcmVkQ2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc3QgYWxsQ2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQobWVhc3VyZUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29sLmNoaWxkcmVuLnJlc2V0KG5lc3RlZENoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmRpbWVuc2lvbi5jaGlsZExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWJsaW5nID0gdGhpcy5jcmVhdGVDb2x1bW5Gb3JEaW1lbnNpb24odmFsdWUsIGRhdGEsIHBhcmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goc2libGluZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVDaGlsZHJlbiA9IHRoaXMuZ2V0TWVhc3VyZUNoaWxkcmVuKGRhdGEsIHNpYmxpbmcsIGZhbHNlLCB2YWx1ZS5kaW1lbnNpb24/LndpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmcuY2hpbGRyZW4ucmVzZXQobWVhc3VyZUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmNvbmNhdChtZWFzdXJlQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ucmVzZXQoZmlsdGVyZWRDaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmNvbmNhdChjaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5kaW1lbnNpb24uY2hpbGRMZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2libGluZyA9IHRoaXMuY3JlYXRlQ29sdW1uRm9yRGltZW5zaW9uKHZhbHVlLCBkYXRhLCBwYXJlbnQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChzaWJsaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNvbHVtbkZvckRpbWVuc2lvbih2YWx1ZTogYW55LCBkYXRhOiBhbnksIHBhcmVudDogQ29sdW1uVHlwZSwgaXNHcm91cDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBrZXkgPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgY29uc3QgcmVmID0gaXNHcm91cCA/XG4gICAgICAgICAgICBjcmVhdGVDb21wb25lbnQoSWd4Q29sdW1uR3JvdXBDb21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yIH0pIDpcbiAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yIH0pO1xuICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyID0gcGFyZW50ICE9IG51bGwgPyBrZXkuc3BsaXQocGFyZW50LmhlYWRlciArIHRoaXMucGl2b3RLZXlzLmNvbHVtbkRpbWVuc2lvblNlcGFyYXRvcilbMV0gOiBrZXk7XG4gICAgICAgIHJlZi5pbnN0YW5jZS5maWVsZCA9IGtleTtcbiAgICAgICAgcmVmLmluc3RhbmNlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgaWYgKHZhbHVlLmRpbWVuc2lvbi53aWR0aCkge1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLndpZHRoID0gdmFsdWUuZGltZW5zaW9uLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlRGVmaW5pdGlvbiA9IHRoaXMudmFsdWVzWzBdO1xuICAgICAgICByZWYuaW5zdGFuY2UuZGF0YVR5cGUgPSB2YWx1ZURlZmluaXRpb24/LmRhdGFUeXBlIHx8IHRoaXMucmVzb2x2ZURhdGFUeXBlcyhkYXRhWzBdW3ZhbHVlRGVmaW5pdGlvbj8ubWVtYmVyXSk7XG4gICAgICAgIHJlZi5pbnN0YW5jZS5mb3JtYXR0ZXIgPSB2YWx1ZURlZmluaXRpb24/LmZvcm1hdHRlcjtcbiAgICAgICAgcmVmLmluc3RhbmNlLnNvcnRhYmxlID0gdHJ1ZTtcbiAgICAgICAgcmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgcmV0dXJuIHJlZi5pbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUNvbHVtbkRpbWVuc2lvbldpZHRoKGRpbTogSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgIGlmIChkaW0ud2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkaW0ud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubWluQ29sdW1uV2lkdGggKyAncHgnO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRNZWFzdXJlQ2hpbGRyZW4oZGF0YSwgcGFyZW50LCBoaWRkZW4sIHBhcmVudFdpZHRoKSB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBbXTtcbiAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLnZhbHVlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNoaWxkV2lkdGggPSBwYXJzZUludChwYXJlbnRXaWR0aCwgMTApIC8gY291bnQ7XG4gICAgICAgIGNvbnN0IGlzUGVyY2VudCA9IHBhcmVudFdpZHRoICYmIHBhcmVudFdpZHRoLmluZGV4T2YoJyUnKSAhPT0gLTE7XG4gICAgICAgIHRoaXMudmFsdWVzLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yfSk7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyID0gdmFsLmRpc3BsYXlOYW1lIHx8IHZhbC5tZW1iZXI7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuZmllbGQgPSBwYXJlbnQuZmllbGQgKyB0aGlzLnBpdm90S2V5cy5jb2x1bW5EaW1lbnNpb25TZXBhcmF0b3IgKyB2YWwubWVtYmVyO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgIGlmIChwYXJlbnRXaWR0aCkge1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS53aWR0aCA9IGlzUGVyY2VudCA/IGNoaWxkV2lkdGggKyAnJScgOiBjaGlsZFdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5oaWRkZW4gPSBoaWRkZW47XG4gICAgICAgICAgICByZWYuaW5zdGFuY2Uuc29ydGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmRhdGFUeXBlID0gdmFsLmRhdGFUeXBlIHx8IHRoaXMucmVzb2x2ZURhdGFUeXBlcyhkYXRhWzBdW3ZhbC5tZW1iZXJdKTtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5mb3JtYXR0ZXIgPSB2YWwuZm9ybWF0dGVyO1xuICAgICAgICAgICAgcmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGNvbHMucHVzaChyZWYuaW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgQFZpZXdDaGlsZCgnZW1wdHlQaXZvdEdyaWRUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkZWZhdWx0RW1wdHlQaXZvdEdyaWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyBhIGN1c3RvbSB0ZW1wbGF0ZSB3aGVuIHBpdm90IGdyaWQgaXMgZW1wdHkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW2VtcHR5UGl2b3RHcmlkVGVtcGxhdGVdPVwibXlUZW1wbGF0ZVwiPjxpZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlbXB0eVBpdm90R3JpZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx2b2lkPjtcblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIGNvbnN0IGFsbEVuYWJsZWREaW1lbnNpb25zID0gdGhpcy5yb3dEaW1lbnNpb25zLmNvbmNhdCh0aGlzLmNvbHVtbkRpbWVuc2lvbnMpO1xuICAgICAgICBpZiAoYWxsRW5hYmxlZERpbWVuc2lvbnMubGVuZ3RoID09PSAwICYmIHRoaXMudmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gbm8gZW5hYmxlZCB2YWx1ZXMgYW5kIGRpbWVuc2lvbnNcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5UGl2b3RHcmlkVGVtcGxhdGUgfHwgdGhpcy5kZWZhdWx0RW1wdHlQaXZvdEdyaWRUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci50ZW1wbGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRJbml0RXZlbnRzKHBpdm90Q29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLmFsbERpbWVuc2lvbnMpO1xuICAgICAgICBkaW1lbnNpb25zLmZvckVhY2goZGltID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uSW5pdC5lbWl0KGRpbSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBwaXZvdENvbmZpZz8udmFsdWVzO1xuICAgICAgICB2YWx1ZXM/LmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVJbml0LmVtaXQodmFsKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPCEtLSBUb29sYmFyIGFyZWEgLS0+XG48bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtZ3JpZC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuXG48IS0tIEdyaWQgdGFibGUgaGVhZCByb3cgYXJlYSAtLT5cbjxpZ3gtcGl2b3QtaGVhZGVyLXJvdyBjbGFzcz1cImlneC1ncmlkLXRoZWFkIGlneC1ncmlkLXRoZWFkLS1waXZvdFwiIHRhYmluZGV4PVwiMFwiXG4gICAgW2dyaWRdPVwidGhpc1wiXG4gICAgW2hhc01STF09XCJoYXNDb2x1bW5MYXlvdXRzXCJcbiAgICBbZGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiXG4gICAgW2FjdGl2ZURlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiXG4gICAgW3dpZHRoXT1cImNhbGNXaWR0aFwiXG4gICAgW3Bpbm5lZENvbHVtbkNvbGxlY3Rpb25dPVwicGlubmVkQ29sdW1uc1wiXG4gICAgW3VucGlubmVkQ29sdW1uQ29sbGVjdGlvbl09XCJ1bnBpbm5lZENvbHVtbnNcIlxuICAgIChrZXlkb3duLm1ldGEuYyk9XCJjb3B5SGFuZGxlcigkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5jb250cm9sLmMpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKGNvcHkpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwibmF2aWdhdGlvbi5oZWFkZXJOYXZpZ2F0aW9uKCRldmVudClcIlxuICAgIChzY3JvbGwpPVwicHJldmVudEhlYWRlclNjcm9sbCgkZXZlbnQpXCJcbj5cbjwvaWd4LXBpdm90LWhlYWRlci1yb3c+XG5cbjxkaXYgaWd4R3JpZEJvZHkgKGtleWRvd24uY29udHJvbC5jKT1cImNvcHlIYW5kbGVyKCRldmVudClcIiAoY29weSk9XCJjb3B5SGFuZGxlcigkZXZlbnQpXCIgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHlcIiByb2xlPVwicm93Z3JvdXBcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93RGltZW5zaW9ucy5sZW5ndGggPyBkZWZhdWx0Um93RGltZW5zaW9uc1RlbXBsYXRlIDogZW1wdHlSb3dEaW1lbnNpb25zVGVtcGxhdGU7IGNvbnRleHQ6IHRoaXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LWNvbnRlbnRcIiB0YWJpbmRleD1cIjBcIiBbYXR0ci5yb2xlXT1cImRhdGFWaWV3Lmxlbmd0aCA/IG51bGwgOiAncm93J1wiIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGFuZGxlTmF2aWdhdGlvbigkZXZlbnQpXCIgKGZvY3VzKT1cIm5hdmlnYXRpb24uZm9jdXNUYm9keSgkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdTdG9wKT1cInNlbGVjdGlvblNlcnZpY2UuZHJhZ01vZGUgPSAkZXZlbnRcIiAoc2Nyb2xsKT1cInByZXZlbnRDb250YWluZXJTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgIChkcmFnU2Nyb2xsKT1cImRyYWdTY3JvbGwoJGV2ZW50KVwiIFtpZ3hHcmlkRHJhZ1NlbGVjdF09XCJzZWxlY3Rpb25TZXJ2aWNlLmRyYWdNb2RlXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJ0b3RhbEhlaWdodFwiIFtzdHlsZS53aWR0aC5weF09XCJwaXZvdENvbnRlbnRDYWxjV2lkdGggfHwgbnVsbFwiICN0Ym9keSBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImhhc01vdmFibGVDb2x1bW5zICYmIGNvbHVtbkluRHJhZyAmJiBwaW5uZWRDb2x1bW5zLmxlbmd0aCA8PSAwXCJcbiAgICAgICAgICAgIFtpZ3hDb2x1bW5Nb3ZpbmdEcm9wXT1cImhlYWRlckNvbnRhaW5lclwiIFthdHRyLmRyb3BwYWJsZV09XCJ0cnVlXCIgaWQ9XCJsZWZ0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1vbi1kcmFnLWxlZnRcIj48L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzTW92YWJsZUNvbHVtbnMgJiYgY29sdW1uSW5EcmFnICYmIHBpbm5lZENvbHVtbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiIGlkPVwibGVmdFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtb24tZHJhZy1waW5uZWRcIiBbc3R5bGUubGVmdC5weF09XCJwaW5uZWRXaWR0aFwiPjwvc3Bhbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgbGV0LXJvd0RhdGEgW2lneEdyaWRGb3JPZl09XCJkYXRhXG4gICAgICAgIHwgcGl2b3RHcmlkRmlsdGVyOnBpdm90Q29uZmlndXJhdGlvbjpmaWx0ZXJTdHJhdGVneTphZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTpmaWx0ZXJpbmdQaXBlVHJpZ2dlcjpwaXBlVHJpZ2dlclxuICAgICAgICB8IHBpdm90R3JpZFNvcnQ6cGl2b3RDb25maWd1cmF0aW9uOnNvcnRTdHJhdGVneTpwaXBlVHJpZ2dlclxuICAgICAgICB8IHBpdm90R3JpZFJvdzpwaXZvdENvbmZpZ3VyYXRpb246cGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k6ZXhwYW5zaW9uU3RhdGVzOnBpcGVUcmlnZ2VyOnNvcnRpbmdFeHByZXNzaW9uc1xuICAgICAgICB8IHBpdm90R3JpZENvbHVtbjpwaXZvdENvbmZpZ3VyYXRpb246cGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k6ZXhwYW5zaW9uU3RhdGVzOnBpcGVUcmlnZ2VyOnNvcnRpbmdFeHByZXNzaW9uc1xuICAgICAgICB8IHBpdm90R3JpZEF1dG9UcmFuc2Zvcm06cGl2b3RDb25maWd1cmF0aW9uOnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgcGl2b3RHcmlkQ29sdW1uU29ydDpzb3J0aW5nRXhwcmVzc2lvbnM6c29ydFN0cmF0ZWd5OnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgcGl2b3RHcmlkUm93RXhwYW5zaW9uOnBpdm90Q29uZmlndXJhdGlvbjpleHBhbnNpb25TdGF0ZXM6ZGVmYXVsdEV4cGFuZFN0YXRlOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgIGxldC1yb3dJbmRleD1cImluZGV4XCIgW2lneEZvclNjcm9sbE9yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIiBbaWd4Rm9yU2Nyb2xsQ29udGFpbmVyXT1cInZlcnRpY2FsU2Nyb2xsXCJcbiAgICAgICAgICAgIFtpZ3hGb3JDb250YWluZXJTaXplXT1cImNhbGNIZWlnaHRcIlxuICAgICAgICAgICAgW2lneEZvckl0ZW1TaXplXT1cImhhc0NvbHVtbkxheW91dHMgPyByb3dIZWlnaHQgKiBtdWx0aVJvd0xheW91dFJvd1NpemUgKyAxIDogcmVuZGVyZWRSb3dIZWlnaHRcIlxuICAgICAgICAgICAgW2lneEdyaWRGb3JPZlZhcmlhYmxlU2l6ZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgI3ZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW2lneFRlbXBsYXRlT3V0bGV0XT1cInJlY29yZFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbaWd4VGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENvbnRleHQocm93RGF0YSwgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoY2FjaGVkVmlld0xvYWRlZCk9XCJjYWNoZWRWaWV3TG9hZGVkKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVjb3JkX3RlbXBsYXRlIGxldC1yb3dJbmRleD1cImluZGV4XCIgbGV0LXJvd0RhdGE+XG4gICAgICAgICAgICA8aWd4LXBpdm90LXJvdyBbc3R5bGUuaGVpZ2h0LnB4XT1cInJlbmRlcmVkUm93SGVpZ2h0XCIgW2dyaWRJRF09XCJpZFwiIFtpbmRleF09XCJyb3dJbmRleFwiIFtkYXRhXT1cInJvd0RhdGFcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvd0NsYXNzZXMgfCBpZ3hHcmlkUm93Q2xhc3Nlczpyb3c6cm93LmluRWRpdE1vZGU6cm93LnNlbGVjdGVkOnJvdy5kaXJ0eTpyb3cuZGVsZXRlZDpyb3cuZHJhZ2dpbmc6cm93SW5kZXg6aGFzQ29sdW1uTGF5b3V0czpmYWxzZTpyb3dEYXRhOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJyb3dTdHlsZXMgfCBpZ3hHcmlkUm93U3R5bGVzOnJvd0RhdGE6cm93SW5kZXg6cGlwZVRyaWdnZXJcIiAjcm93PlxuICAgICAgICAgICAgPC9pZ3gtcGl2b3Qtcm93PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8aWdjLXRyaWFsLXdhdGVybWFyaz48L2lnYy10cmlhbC13YXRlcm1hcms+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZ3hUb2dnbGUgI2xvYWRpbmdPdmVybGF5PlxuICAgICAgICA8aWd4LWNpcmN1bGFyLWJhciBbaW5kZXRlcm1pbmF0ZV09XCJ0cnVlXCIgKm5nSWY9XCJzaG91bGRPdmVybGF5TG9hZGluZ1wiPlxuICAgICAgICA8L2lneC1jaXJjdWxhci1iYXI+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gKm5nSWY9XCJoYXNNb3ZhYmxlQ29sdW1ucyAmJiBjb2x1bW5JbkRyYWdcIiBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiXG4gICAgICAgIGlkPVwicmlnaHRcIiBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtb24tZHJhZy1yaWdodFwiPjwvc3Bhbj5cbiAgICA8ZGl2IFtoaWRkZW5dPVwiIWhhc1ZlcnRpY2FsU2Nyb2xsKClcIiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1zY3JvbGxiYXJcIiBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsU2l6ZVwiIChwb2ludGVyZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXNjcm9sbGJhci1zdGFydFwiIFtzdHlsZS5oZWlnaHQucHhdPVwiIGlzUm93UGlubmluZ1RvVG9wID8gcGlubmVkUm93SGVpZ2h0IDogMFwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXNjcm9sbGJhci1tYWluXCIgW3N0eWxlLmhlaWdodC5weF09XCJjYWxjSGVpZ2h0XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgaWd4R3JpZEZvciBbaWd4R3JpZEZvck9mXT1cIltdXCIgI3ZlcnRpY2FsU2Nyb2xsSG9sZGVyPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXNjcm9sbGJhci1lbmRcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIiFpc1Jvd1Bpbm5pbmdUb1RvcCA/IHBpbm5lZFJvd0hlaWdodCA6IDBcIj48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fYWRkcm93LXNuYWNrYmFyXCI+XG4gICAgICAgIDxpZ3gtc25hY2tiYXIgI2FkZFJvd1NuYWNrYmFyIFtvdXRsZXRdPVwiaWd4Qm9keU92ZXJsYXlPdXRsZXRcIiBbYWN0aW9uVGV4dF09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfc25hY2tiYXJfYWRkcm93X2FjdGlvbnRleHRcIiBbZGlzcGxheVRpbWVdPVwic25hY2tiYXJEaXNwbGF5VGltZVwiPnt7cmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3NuYWNrYmFyX2FkZHJvd19sYWJlbH19PC9pZ3gtc25hY2tiYXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICNpZ3hCb2R5T3ZlcmxheU91dGxldD1cIm92ZXJsYXktb3V0bGV0XCIgaWd4T3ZlcmxheU91dGxldD48L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbFwiIFtzdHlsZS5oZWlnaHQucHhdPVwic2Nyb2xsU2l6ZVwiICNzY3IgW2hpZGRlbl09XCJpc0hvcml6b250YWxTY3JvbGxIaWRkZW5cIiAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1zdGFydFwiIFtzdHlsZS53aWR0aC5weF09XCJwaXZvdFBpbm5lZFdpZHRoXCIgW3N0eWxlLm1pbi13aWR0aC5weF09XCJwaXZvdFBpbm5lZFdpZHRoXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtbWFpblwiIFtzdHlsZS53aWR0aC5weF09XCJwaXZvdFVucGlubmVkV2lkdGhcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgW2lneEdyaWRGb3JPZl09XCJFTVBUWV9EQVRBXCIgI3Njcm9sbENvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1lbmRcIiBbc3R5bGUud2lkdGgucHhdPVwicGl2b3RQaW5uZWRXaWR0aFwiIFtzdHlsZS5taW4td2lkdGgucHhdPVwicGl2b3RQaW5uZWRXaWR0aFwiIFtoaWRkZW5dPVwicGl2b3RQaW5uZWRXaWR0aCA9PT0gMCB8fCBpc1Bpbm5pbmdUb1N0YXJ0XCI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlneC1ncmlkX190Zm9vdFwiIHJvbGU9XCJyb3dncm91cFwiICN0Zm9vdD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2Zvb3RlclwiICNmb290ZXI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWdyaWQtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlGaWx0ZXJlZEdyaWQ+XG4gICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktbWVzc2FnZVwiIHJvbGU9XCJjZWxsXCI+XG4gICAgICAgIDxzcGFuPnt7ZW1wdHlGaWx0ZXJlZEdyaWRNZXNzYWdlfX08L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RW1wdHlHcmlkPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LW1lc3NhZ2VcIiByb2xlPVwiY2VsbFwiPlxuICAgICAgICA8c3Bhbj57e2VtcHR5R3JpZE1lc3NhZ2V9fTwvc3Bhbj5cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nR3JpZD5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2xvYWRpbmdcIj5cbiAgICAgICAgPGlneC1jaXJjdWxhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiPlxuICAgICAgICA8L2lneC1jaXJjdWxhci1iYXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPGlneC1waXZvdC1ncmlkLWNvbHVtbi1yZXNpemVyIFtyZXN0cmljdFJlc2l6ZXJUb3BdPVwidGhlYWRSb3cubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHRcIiAqbmdJZj1cImNvbFJlc2l6aW5nU2VydmljZS5zaG93UmVzaXplclwiPjwvaWd4LXBpdm90LWdyaWQtY29sdW1uLXJlc2l6ZXI+XG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2xvYWRpbmctb3V0bGV0XCIgI2lneExvYWRpbmdPdmVybGF5T3V0bGV0IGlneE92ZXJsYXlPdXRsZXQ+PC9kaXY+XG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX291dGxldFwiICNpZ3hGaWx0ZXJpbmdPdmVybGF5T3V0bGV0IGlneE92ZXJsYXlPdXRsZXQ+PC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGUgbGV0LWNvbHVtbj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3RyLS1oZWFkZXJcIj5cbiAgICAgICAgPGlneC1pY29uIFthdHRyLmRyYWdnYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29sdW1uKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgIHt7Z2V0Q29sdW1uR3JvdXBFeHBhbmRTdGF0ZShjb2x1bW4pID8gXCJjaGV2cm9uX3JpZ2h0XCIgOiBcImV4cGFuZF9tb3JlXCJ9fTwvaWd4LWljb24+XG4gICAgICAgIHt7Y29sdW1uLmhlYWRlcn19XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRSb3dEaW1lbnNpb25zVGVtcGxhdGU+XG4gICAgPGRpdiB0YWJpbmRleD1cIjBcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cInRvdGFsSGVpZ2h0XCIgKm5nRm9yPVwibGV0IGRpbSBvZiByb3dEaW1lbnNpb25zOyBsZXQgZGltSW5kZXggPSBpbmRleDtcIiAjcm93RGltZW5zaW9uQ29udGFpbmVyIHJvbGU9XCJyb3dncm91cFwiIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXBpdm90LWRpbWVuc2lvblwiIChmb2N1cyk9XCJuYXZpZ2F0aW9uLmZvY3VzVGJvZHkoJGV2ZW50KVwiIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGFuZGxlTmF2aWdhdGlvbigkZXZlbnQpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hHcmlkRm9yIGxldC1yb3dEYXRhIFtpZ3hHcmlkRm9yT2ZdPVwiZGF0YVZpZXdcbiAgICAgICAgfCBwaXZvdEdyaWRDZWxsTWVyZ2luZzpwaXZvdENvbmZpZ3VyYXRpb246ZGltOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgIGxldC1yb3dJbmRleD1cImluZGV4XCIgW2lneEZvclNjcm9sbE9yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIiBbaWd4Rm9yU2Nyb2xsQ29udGFpbmVyXT1cInZlcnRpY2FsU2Nyb2xsXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpZ3hGb3JDb250YWluZXJTaXplXT1cImNhbGNIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgW2lneEZvckl0ZW1TaXplXT1cInJlbmRlcmVkUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgIFtpZ3hGb3JTaXplUHJvcE5hbWVdPVwiJ2hlaWdodCdcIlxuICAgICAgICAgICAgICAgICAgICAgI3ZlcnRpY2FsUm93RGltU2Nyb2xsQ29udGFpbmVyPlxuICAgICAgICAgICAgPGlneC1waXZvdC1yb3ctZGltZW5zaW9uLWNvbnRlbnQgcm9sZT1cInJvd1wiIGNsYXNzPVwiaWd4LWdyaWQtdGhlYWRcIiBbZ3JpZF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaW1lbnNpb25dPVwicm93RGF0YS5kaW1lbnNpb25zW2RpbUluZGV4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm9vdERpbWVuc2lvbl09XCJkaW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyZW5kZXJlZFJvd0hlaWdodCAqIChyb3dEYXRhLnJvd1NwYW4gfHwgMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCIgW3Jvd0RhdGFdPVwicm93RGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiIFt3aWR0aF09XCJyb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbSlcIj5cbiAgICAgICAgICAgIDwvaWd4LXBpdm90LXJvdy1kaW1lbnNpb24tY29udGVudD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2VtcHR5Um93RGltZW5zaW9uc1RlbXBsYXRlPlxuICAgIDxkaXYgdGFiaW5kZXg9XCIwXCIgKm5nSWY9XCJjb2x1bW5EaW1lbnNpb25zLmxlbmd0aCA+IDAgfHwgdmFsdWVzLmxlbmd0aCA+IDBcIiAjcm93RGltZW5zaW9uQ29udGFpbmVyIHJvbGU9XCJyb3dncm91cFwiIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXBpdm90LWRpbWVuc2lvblwiIChmb2N1cyk9XCJuYXZpZ2F0aW9uLmZvY3VzVGJvZHkoJGV2ZW50KVwiIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGFuZGxlTmF2aWdhdGlvbigkZXZlbnQpXCI+XG4gICAgICAgIDxpZ3gtcGl2b3Qtcm93LWRpbWVuc2lvbi1jb250ZW50IHJvbGU9XCJyb3dcIiBjbGFzcz1cImlneC1ncmlkLXRoZWFkXCIgW2dyaWRdPVwidGhpc1wiXG4gICAgICAgICAgICBbZGltZW5zaW9uXT1cImVtcHR5Um93RGltZW5zaW9uXCJcbiAgICAgICAgICAgIFtyb290RGltZW5zaW9uXT1cImVtcHR5Um93RGltZW5zaW9uXCJcbiAgICAgICAgICAgIFtyb3dJbmRleF09XCIwXCIgW3Jvd0RhdGFdPVwiZGF0YVZpZXdbMF1cIlxuICAgICAgICAgICAgW2RlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIiBbd2lkdGhdPVwicm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhlbXB0eVJvd0RpbWVuc2lvbilcIj5cbiAgICAgICAgPC9pZ3gtcGl2b3Qtcm93LWRpbWVuc2lvbi1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVBpdm90R3JpZFRlbXBsYXRlPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LW1lc3NhZ2VcIiByb2xlPVwiY2VsbFwiPlxuICAgICAgICA8c3Bhbj57e3Jlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9waXZvdF9lbXB0eV9tZXNzYWdlfX08L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBbaGlkZGVuXT1cInRydWVcIj5cbiAgICA8aWd4LWdyaWQtZXhjZWwtc3R5bGUtZmlsdGVyaW5nIFttYXhIZWlnaHRdPVwiZXhjZWxTdHlsZUZpbHRlck1heEhlaWdodFwiIFttaW5IZWlnaHRdPVwiZXhjZWxTdHlsZUZpbHRlck1pbkhlaWdodFwiPlxuICAgICAgICA8ZGl2IGlneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zIFtoaWRkZW5dPVwidHJ1ZVwiPjwvZGl2PlxuICAgICAgICA8aWd4LWV4Y2VsLXN0eWxlLWZpbHRlci1vcGVyYXRpb25zPlxuICAgICAgICAgICAgPGlneC1leGNlbC1zdHlsZS1zZWFyY2g+PC9pZ3gtZXhjZWwtc3R5bGUtc2VhcmNoPlxuICAgICAgICA8L2lneC1leGNlbC1zdHlsZS1maWx0ZXItb3BlcmF0aW9ucz5cbiAgICA8L2lneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZz5cbjwvZGl2PlxuIl19
1958
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFFWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFFTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFFBQVEsRUFFUixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFHWixZQUFZLEVBQ1osZUFBZSxFQUVmLHNCQUFzQixFQUN0QixnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RyxPQUFPLEVBQXdCLGFBQWEsRUFBVyxNQUFNLDBCQUEwQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1D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LFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVlqRSxzQkFBc0I7c0JBRDVCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIEl0ZXJhYmxlRGlmZmVycyxcbiAgICBMT0NBTEVfSUQsXG4gICAgTmdab25lLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBJbmplY3RvcixcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgY3JlYXRlQ29tcG9uZW50LFxuICAgIEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgICBib29sZWFuQXR0cmlidXRlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIE5nVGVtcGxhdGVPdXRsZXQsIE5nSWYsIE5nQ2xhc3MsIE5nU3R5bGUsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgSWd4R3JpZEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9ncmlkLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEZpbHRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hGb3JPZlN5bmNTZXJ2aWNlLCBJZ3hGb3JPZlNjcm9sbFN5bmNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mb3Itb2YvZm9yX29mLnN5bmMuc2VydmljZSc7XG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSwgUm93VHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ1JVRFNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRTdW1tYXJ5U2VydmljZSB9IGZyb20gJy4uL3N1bW1hcmllcy9ncmlkLXN1bW1hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBERUZBVUxUX1BJVk9UX0tFWVMsIElEaW1lbnNpb25zQ2hhbmdlLCBJZ3hQaXZvdEdyaWRWYWx1ZVRlbXBsYXRlQ29udGV4dCwgSVBpdm90Q29uZmlndXJhdGlvbiwgSVBpdm90Q29uZmlndXJhdGlvbkNoYW5nZWRFdmVudEFyZ3MsIElQaXZvdERpbWVuc2lvbiwgSVBpdm90VmFsdWUsIElWYWx1ZXNDaGFuZ2UsIFBpdm90RGltZW5zaW9uVHlwZSB9IGZyb20gJy4vcGl2b3QtZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4UGl2b3RIZWFkZXJSb3dDb21wb25lbnQgfSBmcm9tICcuL3Bpdm90LWhlYWRlci1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaXZvdFV0aWwgfSBmcm9tICcuL3Bpdm90LXV0aWwnO1xuaW1wb3J0IHsgRmlsdGVyTW9kZSwgR3JpZFBhZ2luZ01vZGUsIEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLCBHcmlkU3VtbWFyeVBvc2l0aW9uIH0gZnJvbSAnLi4vY29tbW9uL2VudW1zJztcbmltcG9ydCB7IFdhdGNoQ2hhbmdlcyB9IGZyb20gJy4uL3dhdGNoLWNoYW5nZXMnO1xuaW1wb3J0IHsgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQge1xuICAgIElDZWxsUG9zaXRpb24sXG4gICAgSUNvbHVtbk1vdmluZ0VuZEV2ZW50QXJncywgSUNvbHVtbk1vdmluZ0V2ZW50QXJncywgSUNvbHVtbk1vdmluZ1N0YXJ0RXZlbnRBcmdzLFxuICAgIElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncywgSUdyaWRFZGl0RG9uZUV2ZW50QXJncywgSUdyaWRFZGl0RXZlbnRBcmdzLFxuICAgIElHcmlkVG9vbGJhckV4cG9ydEV2ZW50QXJncyxcbiAgICBJUGluQ29sdW1uQ2FuY2VsbGFibGVFdmVudEFyZ3MsIElQaW5Db2x1bW5FdmVudEFyZ3MsIElQaW5Sb3dFdmVudEFyZ3MsIElSb3dEYXRhRXZlbnRBcmdzLCBJUm93RHJhZ0VuZEV2ZW50QXJncywgSVJvd0RyYWdTdGFydEV2ZW50QXJnc1xufSBmcm9tICcuLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IElneEdyaWRSb3dDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkL2dyaWQtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcm9wUG9zaXRpb24gfSBmcm9tICcuLi9tb3ZpbmcvbW92aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGltZW5zaW9uVmFsdWVzRmlsdGVyaW5nU3RyYXRlZ3ksIE5vb3BQaXZvdERpbWVuc2lvbnNTdHJhdGVneSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9waXZvdC1zdHJhdGVneSc7XG5pbXBvcnQgeyBJZ3hHcmlkRXhjZWxTdHlsZUZpbHRlcmluZ0NvbXBvbmVudCwgSWd4RXhjZWxTdHlsZUNvbHVtbk9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSwgSWd4RXhjZWxTdHlsZUZpbHRlck9wZXJhdGlvbnNUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2ZpbHRlcmluZy9leGNlbC1zdHlsZS9leGNlbC1zdHlsZS1maWx0ZXJpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IElneFBpdm90R3JpZE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9waXZvdC1ncmlkLW5hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hQaXZvdENvbHVtblJlc2l6aW5nU2VydmljZSB9IGZyb20gJy4uL3Jlc2l6aW5nL3Bpdm90LWdyaWQvcGl2b3QtcmVzaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hGbGF0VHJhbnNhY3Rpb25GYWN0b3J5LCBJZ3hPdmVybGF5U2VydmljZSwgU3RhdGUsIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5LCBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGVuc2l0eUNoYW5nZWRFdmVudEFyZ3MsIElEaXNwbGF5RGVuc2l0eU9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgY2xvbmVBcnJheSwgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hQaXZvdEZpbHRlcmluZ1NlcnZpY2UgfSBmcm9tICcuL3Bpdm90LWZpbHRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFVdGlsIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtdXRpbCc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElneEdyaWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkRm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFBpdm90Um93RGltZW5zaW9uQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4vcGl2b3Qtcm93LWRpbWVuc2lvbi1jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVzaXppbmcvcGl2b3QtZ3JpZC9waXZvdC1yZXNpemVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hBY3Rpb25TdHJpcENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2FjdGlvbi1zdHJpcC9hY3Rpb24tc3RyaXAuY29tcG9uZW50JztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiwgU29ydGluZ0RpcmVjdGlvbiB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IFBpdm90U29ydFV0aWwgfSBmcm9tICcuL3Bpdm90LXNvcnQtdXRpbCc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IElneFBpdm90VmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL3Bpdm90LWdyaWQuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nT3BlcmF0aW9uIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1jb25kaXRpb24nO1xuaW1wb3J0IHsgSWd4R3JpZFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXZhbGlkYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hQaXZvdFJvd1BpcGUsIElneFBpdm90Um93RXhwYW5zaW9uUGlwZSwgSWd4UGl2b3RBdXRvVHJhbnNmb3JtLCBJZ3hQaXZvdENvbHVtblBpcGUsIElneFBpdm90R3JpZEZpbHRlclBpcGUsIElneFBpdm90R3JpZFNvcnRpbmdQaXBlLCBJZ3hQaXZvdEdyaWRDb2x1bW5Tb3J0aW5nUGlwZSwgSWd4UGl2b3RDZWxsTWVyZ2luZ1BpcGUgfSBmcm9tICcuL3Bpdm90LWdyaWQucGlwZXMnO1xuaW1wb3J0IHsgSWd4R3JpZFJvd0NsYXNzZXNQaXBlLCBJZ3hHcmlkUm93U3R5bGVzUGlwZSB9IGZyb20gJy4uL2NvbW1vbi9waXBlcyc7XG5pbXBvcnQgeyBJZ3hFeGNlbFN0eWxlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsdGVyaW5nL2V4Y2VsLXN0eWxlL2V4Y2VsLXN0eWxlLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4U25hY2tiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Byb2dyZXNzYmFyL3Byb2dyZXNzYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hUb2dnbGVEaXJlY3RpdmUsIElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RvZ2dsZS90b2dnbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFBpdm90Um93Q29tcG9uZW50IH0gZnJvbSAnLi9waXZvdC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElneFRlbXBsYXRlT3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90ZW1wbGF0ZS1vdXRsZXQvdGVtcGxhdGVfb3V0bGV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Nb3ZpbmdEcm9wRGlyZWN0aXZlIH0gZnJvbSAnLi4vbW92aW5nL21vdmluZy5kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hHcmlkRHJhZ1NlbGVjdERpcmVjdGl2ZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9kcmFnLXNlbGVjdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4R3JpZEJvZHlEaXJlY3RpdmUgfSBmcm9tICcuLi9ncmlkLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSBmcm9tICcuLi9yZXNpemluZy9yZXNpemluZy5zZXJ2aWNlJztcbmltcG9ydCB7IERlZmF1bHREYXRhQ2xvbmVTdHJhdGVneSwgSURhdGFDbG9uZVN0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2RhdGEtY2xvbmUtc3RyYXRlZ3knO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5jb25zdCBNSU5JTVVNX0NPTFVNTl9XSURUSCA9IDIwMDtcbmNvbnN0IE1JTklNVU1fQ09MVU1OX1dJRFRIX1NVUEVSX0NPTVBBQ1QgPSAxMDQ7XG5cbi8qKlxuICogUGl2b3QgR3JpZCBwcm92aWRlcyBhIHdheSB0byBwcmVzZW50IGFuZCBtYW5pcHVsYXRlIGRhdGEgaW4gYSBwaXZvdCB0YWJsZSB2aWV3LlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4UGl2b3RHcmlkTW9kdWxlXG4gKiBAaWd4R3JvdXAgR3JpZHMgJiBMaXN0c1xuICogQGlneEtleXdvcmRzIHBpdm90LCBncmlkLCB0YWJsZVxuICogQGlneFRoZW1lIGlneC1ncmlkLXRoZW1lXG4gKiBAcmVtYXJrc1xuICogVGhlIElnbml0ZSBVSSBQaXZvdCBHcmlkIGlzIHVzZWQgZm9yIGdyb3VwaW5nIGFuZCBhZ2dyZWdhdGluZyBzaW1wbGUgZmxhdCBkYXRhIGludG8gYSBwaXZvdCB0YWJsZS4gIE9uY2UgZGF0YVxuICogaGFzIGJlZW4gYm91bmQgYW5kIHRoZSBkaW1lbnNpb25zIGFuZCB2YWx1ZXMgY29uZmlndXJlZCBpdCBjYW4gYmUgbWFuaXB1bGF0ZWQgdmlhIHNvcnRpbmcgYW5kIGZpbHRlcmluZy5cbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LXBpdm90LWdyaWQgW2RhdGFdPVwiZGF0YVwiIFtwaXZvdENvbmZpZ3VyYXRpb25dPVwiY29uZmlndXJhdGlvblwiPlxuICogPC9pZ3gtcGl2b3QtZ3JpZD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogJ2lneC1waXZvdC1ncmlkJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3Bpdm90LWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBJZ3hHcmlkQ1JVRFNlcnZpY2UsXG4gICAgICAgIElneEdyaWRWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgSWd4R3JpZFN1bW1hcnlTZXJ2aWNlLFxuICAgICAgICBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICBHcmlkQmFzZUFQSVNlcnZpY2UsXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX0dSSURfQkFTRSwgdXNlRXhpc3Rpbmc6IElneFBpdm90R3JpZENvbXBvbmVudCB9LFxuICAgICAgICB7IHByb3ZpZGU6IElneEZpbHRlcmluZ1NlcnZpY2UsIHVzZUNsYXNzOiBJZ3hQaXZvdEZpbHRlcmluZ1NlcnZpY2UgfSxcbiAgICAgICAgSWd4UGl2b3RHcmlkTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIElneFBpdm90Q29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICBJZ3hGb3JPZlN5bmNTZXJ2aWNlLFxuICAgICAgICBJZ3hGb3JPZlNjcm9sbFN5bmNTZXJ2aWNlXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nU3R5bGUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIElneFBpdm90SGVhZGVyUm93Q29tcG9uZW50LFxuICAgICAgICBJZ3hHcmlkQm9keURpcmVjdGl2ZSxcbiAgICAgICAgSWd4R3JpZERyYWdTZWxlY3REaXJlY3RpdmUsXG4gICAgICAgIElneENvbHVtbk1vdmluZ0Ryb3BEaXJlY3RpdmUsXG4gICAgICAgIElneEdyaWRGb3JPZkRpcmVjdGl2ZSxcbiAgICAgICAgSWd4VGVtcGxhdGVPdXRsZXREaXJlY3RpdmUsXG4gICAgICAgIElneFBpdm90Um93Q29tcG9uZW50LFxuICAgICAgICBJZ3hUb2dnbGVEaXJlY3RpdmUsXG4gICAgICAgIElneENpcmN1bGFyUHJvZ3Jlc3NCYXJDb21wb25lbnQsXG4gICAgICAgIElneFNuYWNrYmFyQ29tcG9uZW50LFxuICAgICAgICBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlLFxuICAgICAgICBJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50LFxuICAgICAgICBJZ3hJY29uQ29tcG9uZW50LFxuICAgICAgICBJZ3hQaXZvdFJvd0RpbWVuc2lvbkNvbnRlbnRDb21wb25lbnQsXG4gICAgICAgIElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50LFxuICAgICAgICBJZ3hFeGNlbFN0eWxlQ29sdW1uT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBJZ3hFeGNlbFN0eWxlRmlsdGVyT3BlcmF0aW9uc1RlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBJZ3hFeGNlbFN0eWxlU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBJZ3hHcmlkUm93Q2xhc3Nlc1BpcGUsXG4gICAgICAgIElneEdyaWRSb3dTdHlsZXNQaXBlLFxuICAgICAgICBJZ3hQaXZvdFJvd1BpcGUsXG4gICAgICAgIElneFBpdm90Um93RXhwYW5zaW9uUGlwZSxcbiAgICAgICAgSWd4UGl2b3RBdXRvVHJhbnNmb3JtLFxuICAgICAgICBJZ3hQaXZvdENvbHVtblBpcGUsXG4gICAgICAgIElneFBpdm90R3JpZEZpbHRlclBpcGUsXG4gICAgICAgIElneFBpdm90R3JpZFNvcnRpbmdQaXBlLFxuICAgICAgICBJZ3hQaXZvdEdyaWRDb2x1bW5Tb3J0aW5nUGlwZSxcbiAgICAgICAgSWd4UGl2b3RDZWxsTWVyZ2luZ1BpcGVcbiAgICBdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQaXZvdEdyaWRDb21wb25lbnQgZXh0ZW5kcyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBHcmlkVHlwZSwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIGRpbWVuc2lvbiBjb2xsZWN0aW9uIGlzIGNoYW5nZWQgdmlhIHRoZSBncmlkIGNoaXAgYXJlYS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmV0dXJucyB0aGUgbmV3IGRpbWVuc2lvbiBjb2xsZWN0aW9uIGFuZCBpdHMgdHlwZTpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW2hlaWdodF09XCInMzA1cHgnXCJcbiAgICAgKiAgICAgICAgICAgICAgKGRpbWVuc2lvbnNDaGFuZ2UpPVwiZGltZW5zaW9uc0NoYW5nZSgkZXZlbnQpXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZGltZW5zaW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SURpbWVuc2lvbnNDaGFuZ2U+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gYW55IG9mIHRoZSBwaXZvdENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBpcyBjaGFuZ2VkIHZpYSB0aGUgZ3JpZCBjaGlwIGFyZWEuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW2hlaWdodF09XCInMzA1cHgnXCJcbiAgICAgKiAgICAgICAgICAgICAgKHBpdm90Q29uZmlndXJhdGlvbkNoYW5nZWQpPVwiY29uZmlndXJhdGlvbkNoYW5nZWQoJGV2ZW50KVwiPjwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBpdm90Q29uZmlndXJhdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpdm90Q29uZmlndXJhdGlvbkNoYW5nZWRFdmVudEFyZ3M+KCk7XG5cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgZGltZW5zaW9uIGlzIGluaXRpYWxpemVkLlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRW1pdHMgdGhlIGRpbWVuc2lvbiB0aGF0IGlzIGFib3V0IHRvIGJlIGluaXRpYWxpemVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCAjZ3JpZCBbZGF0YV09XCJsb2NhbERhdGFcIiBbaGVpZ2h0XT1cIiczMDVweCdcIlxuICAgICAqICAgICAgICAgICAgICAoZGltZW5zaW9uSW5pdCk9XCJkaW1lbnNpb25Jbml0KCRldmVudClcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkaW1lbnNpb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxJUGl2b3REaW1lbnNpb24+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHZhbHVlIGlzIGluaXRpYWxpemVkLlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRW1pdHMgdGhlIHZhbHVlIHRoYXQgaXMgYWJvdXQgdG8gYmUgaW5pdGlhbGl6ZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkICNncmlkIFtkYXRhXT1cImxvY2FsRGF0YVwiIFtoZWlnaHRdPVwiJzMwNXB4J1wiXG4gICAgICogICAgICAgICAgICAgICh2YWx1ZUluaXQpPVwidmFsdWVJbml0KCRldmVudClcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWx1ZUluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPElQaXZvdFZhbHVlPigpO1xuXG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gYSBkaW1lbnNpb24gaXMgc29ydGVkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkICNncmlkIFtkYXRhXT1cImxvY2FsRGF0YVwiIFtoZWlnaHRdPVwiJzMwNXB4J1wiXG4gICAgICogICAgICAgICAgICAgIChkaW1lbnNpb25zU29ydGluZ0V4cHJlc3Npb25zQ2hhbmdlKT1cImRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnNDaGFuZ2UoJGV2ZW50KVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElTb3J0aW5nRXhwcmVzc2lvbltdPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSB2YWx1ZXMgY29sbGVjdGlvbiBpcyBjaGFuZ2VkIHZpYSB0aGUgZ3JpZCBjaGlwIGFyZWEuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJldHVybnMgdGhlIG5ldyBkaW1lbnNpb25cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgI2dyaWQgW2RhdGFdPVwibG9jYWxEYXRhXCIgW2hlaWdodF09XCInMzA1cHgnXCJcbiAgICAgKiAgICAgICAgICAgICAgKHZhbHVlc0NoYW5nZSk9XCJ2YWx1ZXNDaGFuZ2UoJGV2ZW50KVwiPjwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmFsdWVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJVmFsdWVzQ2hhbmdlPigpO1xuXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzb3J0aW5nIGV4cHJlc3Npb25zIGdlbmVyYXRlZCBmb3IgdGhlIGRpbWVuc2lvbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBleHByZXNzaW9ucyA9IHRoaXMuZ3JpZC5kaW1lbnNpb25zU29ydGluZ0V4cHJlc3Npb25zO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGltZW5zaW9uc1NvcnRpbmdFeHByZXNzaW9ucygpIHtcbiAgICAgICAgY29uc3QgYWxsRW5hYmxlZERpbWVuc2lvbnMgPSB0aGlzLnJvd0RpbWVuc2lvbnMuY29uY2F0KHRoaXMuY29sdW1uRGltZW5zaW9ucyk7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnMgPSBQaXZvdFNvcnRVdGlsLmdlbmVyYXRlRGltZW5zaW9uU29ydGluZ0V4cHJlc3Npb25zKGFsbEVuYWJsZWREaW1lbnNpb25zKTtcbiAgICAgICAgcmV0dXJuIGRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZChJZ3hQaXZvdEhlYWRlclJvd0NvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgdGhlYWRSb3c6IElneFBpdm90SGVhZGVyUm93Q29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hQaXZvdFZhbHVlQ2hpcFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IElneFBpdm90VmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmUgfSlcbiAgICBwcm90ZWN0ZWQgdmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmU6IElneFBpdm90VmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgYSBjdXN0b20gdGVtcGxhdGUgZm9yIHRoZSB2YWx1ZSBjaGlwcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbdmFsdWVDaGlwVGVtcGxhdGVdPVwibXlUZW1wbGF0ZVwiPjxpZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB2YWx1ZUNoaXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8SWd4UGl2b3RHcmlkVmFsdWVUZW1wbGF0ZUNvbnRleHQ+O1xuXG4gICAgQElucHV0KClcbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHBpdm90IGNvbmZpZ3VyYXRpb24gd2l0aCBhbGwgcmVsYXRlZCBkaW1lbnNpb25zIGFuZCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW3Bpdm90Q29uZmlndXJhdGlvbl09XCJjb25maWdcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgcGl2b3RDb25maWd1cmF0aW9uKHZhbHVlOiBJUGl2b3RDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHRoaXMuX3Bpdm90Q29uZmlndXJhdGlvbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLmVtaXRJbml0RXZlbnRzKHRoaXMuX3Bpdm90Q29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID0gUGl2b3RVdGlsLmJ1aWxkRXhwcmVzc2lvblRyZWUodmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMuX2luaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGl2b3RDb25maWd1cmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGl2b3RDb25maWd1cmF0aW9uIHx8IHsgcm93czogbnVsbCwgY29sdW1uczogbnVsbCwgdmFsdWVzOiBudWxsLCBmaWx0ZXJzOiBudWxsIH07XG4gICAgfVxuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBwaXZvdCBjb25maWd1cmF0aW9uIHVpIGZvciB0aGUgcGl2b3QgZ3JpZCAtIGNoaXBzIGFuZCB0aGVpclxuICAgICAqIGNvcnJlc3BvbmRpbmcgY29udGFpbmVycyBmb3Igcm93LCBmaWx0ZXIsIGNvbHVtbiBkaW1lbnNpb25zIGFuZCB2YWx1ZXNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcGl2b3QtZ3JpZCBbc2hvd1Bpdm90Q29uZmlndXJhdGlvblVJXT1cImZhbHNlXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1Bpdm90Q29uZmlndXJhdGlvblVJID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ2dyaWQnO1xuXG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGEgc3VwZXIgY29tcGFjdCB0aGVtZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIE92ZXJyaWRlcyB0aGUgZGlzcGxheURlbnNpdHkgb3B0aW9uIGlmIG9uZSBpcyBzZXQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1waXZvdC1ncmlkIFtzdXBlckNvbXBhY3RNb2RlXT1cInRydWVcIj48L2lneC1waXZvdC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3Bpdm90LS1zdXBlci1jb21wYWN0JylcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgZ2V0IHN1cGVyQ29tcGFjdE1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdXBlckNvbXBhY3RNb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgc3VwZXJDb21wYWN0TW9kZSh2YWx1ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIHdhaXQgZm9yIHRoZSBjdXJyZW50IGRldGVjdGlvbiBjeWNsZSB0byBlbmQgYmVmb3JlIHRyaWdnZXJpbmcgYSBuZXcgb25lLlxuICAgICAgICAgICAgdGhpcy5fc3VwZXJDb21wYWN0TW9kZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIHRoZW1lIG9mIHRoZSBjb21wb25lbnQuXG4gICAgKiBUaGUgZGVmYXVsdCB0aGVtZSBpcyBgY29tZm9ydGFibGVgLlxuICAgICogQXZhaWxhYmxlIG9wdGlvbnMgYXJlIGBjb21mb3J0YWJsZWAsIGBjb3N5YCwgYGNvbXBhY3RgLlxuICAgICogQHJlbWFya3NcbiAgICAqIElmIHNldCB3aGlsZSBzdXBlckNvbXBhY3RNb2RlIGlzIGVuYWJsZWQgd2lsbCBoYXZlIG5vIGFmZmVjdC5cbiAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAqIGxldCBjb21wb25lbnRUaGVtZSA9IHRoaXMuY29tcG9uZW50LmRpc3BsYXlEZW5zaXR5O1xuICAgICogYGBgXG4gICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgZGlzcGxheURlbnNpdHkoKTogRGlzcGxheURlbnNpdHkge1xuICAgICAgICBpZiAodGhpcy5zdXBlckNvbXBhY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gRGlzcGxheURlbnNpdHkuY29tcGFjdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZGlzcGxheURlbnNpdHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBTZXRzIHRoZSB0aGVtZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBkaXNwbGF5RGVuc2l0eSh2YWw6IERpc3BsYXlEZW5zaXR5KSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREaXNwbGF5RGVuc2l0eSA9IHRoaXMuX2Rpc3BsYXlEZW5zaXR5O1xuICAgICAgICB0aGlzLl9kaXNwbGF5RGVuc2l0eSA9IHZhbCBhcyBEaXNwbGF5RGVuc2l0eTtcblxuICAgICAgICBpZiAoY3VycmVudERpc3BsYXlEZW5zaXR5ICE9PSB0aGlzLl9kaXNwbGF5RGVuc2l0eSkge1xuICAgICAgICAgICAgY29uc3QgZGVuc2l0eUNoYW5nZWRBcmdzOiBJRGVuc2l0eUNoYW5nZWRFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgb2xkRGVuc2l0eTogY3VycmVudERpc3BsYXlEZW5zaXR5LFxuICAgICAgICAgICAgICAgIG5ld0RlbnNpdHk6IHRoaXMuX2Rpc3BsYXlEZW5zaXR5XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmRlbnNpdHlDaGFuZ2VkLmVtaXQoZGVuc2l0eUNoYW5nZWRBcmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgdmFsdWVzIGNsb25lIHN0cmF0ZWd5IG9mIHRoZSBwaXZvdCBncmlkIHdoZW4gYXNzaWduaW5nIHRoZW0gdG8gZGlmZmVyZW50IGRpbWVuc2lvbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1waXZvdC1ncmlkICNncmlkIFtkYXRhXT1cImxvY2FsRGF0YVwiIFtwaXZvdFZhbHVlQ2xvbmVTdHJhdGVneV09XCJjdXN0b21DbG9uZVN0cmF0ZWd5XCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBwaXZvdFZhbHVlQ2xvbmVTdHJhdGVneSgpOiBJRGF0YUNsb25lU3RyYXRlZ3kge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBwaXZvdFZhbHVlQ2xvbmVTdHJhdGVneShzdHJhdGVneTogSURhdGFDbG9uZVN0cmF0ZWd5KSB7XG4gICAgICAgIGlmIChzdHJhdGVneSkge1xuICAgICAgICAgICAgdGhpcy5fcGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3kgPSBzdHJhdGVneTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgncmVjb3JkX3RlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIHJlY29yZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdoZWFkZXJUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBoZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50KVxuICAgIHB1YmxpYyBvdmVycmlkZSByZXNpemVMaW5lOiBJZ3hQaXZvdEdyaWRDb2x1bW5SZXNpemVyQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50LCB7IHJlYWQ6IElneEdyaWRFeGNlbFN0eWxlRmlsdGVyaW5nQ29tcG9uZW50IH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnRzOiBRdWVyeUxpc3Q8SWd4R3JpZEV4Y2VsU3R5bGVGaWx0ZXJpbmdDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneFBpdm90Um93RGltZW5zaW9uQ29udGVudENvbXBvbmVudClcbiAgICBwcm90ZWN0ZWQgcm93RGltZW5zaW9uQ29udGVudENvbGxlY3Rpb246IFF1ZXJ5TGlzdDxJZ3hQaXZvdFJvd0RpbWVuc2lvbkNvbnRlbnRDb21wb25lbnQ+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0IG1pbkNvbHVtbldpZHRoKCkge1xuICAgICAgICBpZiAodGhpcy5zdXBlckNvbXBhY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gTUlOSU1VTV9DT0xVTU5fV0lEVEhfU1VQRVJfQ09NUEFDVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNSU5JTVVNX0NPTFVNTl9XSURUSDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbigndmVydGljYWxSb3dEaW1TY3JvbGxDb250YWluZXInLCB7IHJlYWQ6IElneEdyaWRGb3JPZkRpcmVjdGl2ZSB9KVxuICAgIHB1YmxpYyB2ZXJ0aWNhbFJvd0RpbVNjcm9sbENvbnRhaW5lcnM6IFF1ZXJ5TGlzdDxJZ3hHcmlkRm9yT2ZEaXJlY3RpdmU8YW55LCBhbnlbXT4+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBhZGRSb3dFbXB0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx2b2lkPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgYXV0b0dlbmVyYXRlRXhjbHVkZTogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgc25hY2tiYXJEaXNwbGF5VGltZSA9IDYwMDA7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBjZWxsRWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2VsbEVkaXREb25lID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXREb25lRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2VsbEVkaXRFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY2VsbEVkaXRFeGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXREb25lRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29sdW1uTW92aW5nU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5Nb3ZpbmdTdGFydEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbHVtbk1vdmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvbHVtbk1vdmluZ0V2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbHVtbk1vdmluZ0VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvbHVtbk1vdmluZ0VuZEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbHVtblBpbiA9IG5ldyBFdmVudEVtaXR0ZXI8SVBpbkNvbHVtbkNhbmNlbGxhYmxlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29sdW1uUGlubmVkID0gbmV3IEV2ZW50RW1pdHRlcjxJUGluQ29sdW1uRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RhdGFFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dEZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJUm93RGF0YUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUdyaWRFZGl0RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RHJhZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxJUm93RHJhZ1N0YXJ0RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RHJhZ0VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8SVJvd0RyYWdFbmRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dFZGl0RW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdEV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHJvd0VkaXREb25lID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZEVkaXREb25lRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93RWRpdEV4aXQgPSBuZXcgRXZlbnRFbWl0dGVyPElHcmlkRWRpdERvbmVFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSByb3dQaW5uaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJUGluUm93RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcm93UGlubmVkID0gbmV3IEV2ZW50RW1pdHRlcjxJUGluUm93RXZlbnRBcmdzPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGNvbHVtbkdyb3VwU3RhdGVzID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGRpbWVuc2lvbkRhdGFDb2x1bW5zO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RLZXlzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24ucGl2b3RLZXlzIHx8IERFRkFVTFRfUElWT1RfS0VZUztcbiAgICB9XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGlzUGl2b3QgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZHJhZ1Jvd0lEID0gbnVsbDtcblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcm9vdFN1bW1hcmllc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyByb3dEaW1lbnNpb25SZXNpemluZyA9IHRydWU7XG5cbiAgICBwcml2YXRlIF9lbXB0eVJvd0RpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uID0geyBtZW1iZXJOYW1lOiAnJywgZW5hYmxlZDogdHJ1ZSwgbGV2ZWw6IDAgfTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZW1wdHlSb3dEaW1lbnNpb24oKTogSVBpdm90RGltZW5zaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VtcHR5Um93RGltZW5zaW9uO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k6IElEYXRhQ2xvbmVTdHJhdGVneSA9IG5ldyBEZWZhdWx0RGF0YUNsb25lU3RyYXRlZ3koKTtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2RlZmF1bHRFeHBhbmRTdGF0ZSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfZmlsdGVyU3RyYXRlZ3k6IElGaWx0ZXJpbmdTdHJhdGVneSA9IG5ldyBEaW1lbnNpb25WYWx1ZXNGaWx0ZXJpbmdTdHJhdGVneSgpO1xuICAgIHByaXZhdGUgX2RhdGE7XG4gICAgcHJpdmF0ZSBfcGl2b3RDb25maWd1cmF0aW9uOiBJUGl2b3RDb25maWd1cmF0aW9uID0geyByb3dzOiBudWxsLCBjb2x1bW5zOiBudWxsLCB2YWx1ZXM6IG51bGwsIGZpbHRlcnM6IG51bGwgfTtcbiAgICBwcml2YXRlIHBfaWQgPSBgaWd4LXBpdm90LWdyaWQtJHtORVhUX0lEKyt9YDtcbiAgICBwcml2YXRlIF9zdXBlckNvbXBhY3RNb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAqIEdldHMvU2V0cyB0aGUgZGVmYXVsdCBleHBhbmQgc3RhdGUgZm9yIGFsbCByb3dzLlxuICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIGdldCBkZWZhdWx0RXhwYW5kU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0RXhwYW5kU3RhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkZWZhdWx0RXhwYW5kU3RhdGUodmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRFeHBhbmRTdGF0ZSA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwYWdpbmdNb2RlKCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBwYWdpbmdNb2RlKF92YWw6IEdyaWRQYWdpbmdNb2RlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAV2F0Y2hDaGFuZ2VzKClcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGhpZGVSb3dTZWxlY3RvcnMoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGhpZGVSb3dTZWxlY3RvcnMoX3ZhbHVlOiBib29sZWFuKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYXV0b0dlbmVyYXRlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGFjdGlvblN0cmlwOiBJZ3hBY3Rpb25TdHJpcENvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNob3VsZEdlbmVyYXRlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbW92aW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB0b29sYmFyRXhwb3J0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZFRvb2xiYXJFeHBvcnRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcm93RHJhZ2dhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHJvd0RyYWdnYWJsZShfdmFsOiBib29sZWFuKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFsbG93QWR2YW5jZWRGaWx0ZXJpbmcoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGFsbG93QWR2YW5jZWRGaWx0ZXJpbmcoX3ZhbHVlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgZmlsdGVyTW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIEZpbHRlck1vZGUucXVpY2tGaWx0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBmaWx0ZXJNb2RlKF92YWx1ZTogRmlsdGVyTW9kZSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBhbGxvd0ZpbHRlcmluZygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgYWxsb3dGaWx0ZXJpbmcoX3ZhbHVlKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHBhZ2UoX3ZhbDogbnVtYmVyKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGVyUGFnZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBwZXJQYWdlKF92YWw6IG51bWJlcikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwaW5uZWRDb2x1bW5zKCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdW5waW5uZWRDb2x1bW5zKCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnVucGlubmVkQ29sdW1ucztcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHVucGlubmVkRGF0YVZpZXcoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gc3VwZXIudW5waW5uZWREYXRhVmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHVucGlubmVkV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiBzdXBlci51bnBpbm5lZFdpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwaW5uZWRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnBpbm5lZFdpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHN1bW1hcnlSb3dIZWlnaHQoX3ZhbHVlOiBudW1iZXIpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHN1bW1hcnlSb3dIZWlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRyYW5zYWN0aW9ucygpOiBUcmFuc2FjdGlvblNlcnZpY2U8VHJhbnNhY3Rpb24sIFN0YXRlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbnM7XG4gICAgfVxuXG5cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBkcmFnSW5kaWNhdG9ySWNvblRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBkcmFnSW5kaWNhdG9ySWNvblRlbXBsYXRlKF92YWw6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBXYXRjaENoYW5nZXMoKVxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcm93RWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHJvd0VkaXRhYmxlKF92YWw6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwaW5uaW5nKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgcGlubmluZyhfdmFsdWUpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBzdW1tYXJ5UG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHN1bW1hcnlQb3NpdGlvbihfdmFsdWU6IEdyaWRTdW1tYXJ5UG9zaXRpb24pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHN1bW1hcnlDYWxjdWxhdGlvbk1vZGUoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IHN1bW1hcnlDYWxjdWxhdGlvbk1vZGUoX3ZhbHVlOiBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVyYWxcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHNob3dTdW1tYXJ5T25Db2xsYXBzZSgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc2hvd1N1bW1hcnlPbkNvbGxhcHNlKF92YWx1ZTogYm9vbGVhbikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBoaWRkZW5Db2x1bW5zQ291bnQoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBwaW5uZWRDb2x1bW5zQ291bnQoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBiYXRjaEVkaXRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGJhdGNoRWRpdGluZyhfdmFsOiBib29sZWFuKSB7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBzZWxlY3RlZFJvd3MoKTogYW55W10ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93SWRzID0gW107XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuZm9yRWFjaChyZWNvcmQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldiA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBkaW0gb2YgdGhpcy5yb3dEaW1lbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJEaW0gPSBkaW07XG4gICAgICAgICAgICAgICAgbGV0IHNob3VsZEJyZWFrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBQaXZvdFV0aWwuZ2V0UmVjb3JkS2V5KHJlY29yZCwgY3VyckRpbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNQaXZvdFJvd1NlbGVjdGVkKGtleSkgJiYgIXNlbGVjdGVkUm93SWRzLmZpbmQoeCA9PiB4ID09PSByZWNvcmQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJvd0lkcy5wdXNoKHJlY29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRCcmVhayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyRGltID0gY3VyckRpbS5jaGlsZExldmVsO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJEaW0pO1xuICAgICAgICAgICAgICAgIHByZXYucHVzaChkaW0pO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRCcmVhaykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkUm93SWRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGRlZmF1bHQgcm93IGhlaWdodC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHJvd0hlaWdoID0gdGhpcy5ncmlkLmRlZmF1bHRSb3dIZWlnaHQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBkZWZhdWx0Um93SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnN1cGVyQ29tcGFjdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiAyNDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZGVmYXVsdFJvd0hlaWdodDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgdmFsaWRhdGlvblNlcnZpY2U6IElneEdyaWRWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgc2VsZWN0aW9uU2VydmljZTogSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIGNvbFJlc2l6aW5nU2VydmljZTogSWd4UGl2b3RDb2x1bW5SZXNpemluZ1NlcnZpY2UsXG4gICAgICAgIGdyaWRBUEk6IEdyaWRCYXNlQVBJU2VydmljZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPixcbiAgICAgICAgdHJhbnNhY3Rpb25GYWN0b3J5OiBJZ3hGbGF0VHJhbnNhY3Rpb25GYWN0b3J5LFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgem9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBkb2N1bWVudCxcbiAgICAgICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICB2aWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIGVudkluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICBuYXZpZ2F0aW9uOiBJZ3hQaXZvdEdyaWROYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgZmlsdGVyaW5nU2VydmljZTogSWd4RmlsdGVyaW5nU2VydmljZSxcbiAgICAgICAgQEluamVjdChJZ3hPdmVybGF5U2VydmljZSkgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBzdW1tYXJ5U2VydmljZTogSWd4R3JpZFN1bW1hcnlTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBsb2NhbGVJZDogc3RyaW5nLFxuICAgICAgICBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KElneEdyaWRUcmFuc2FjdGlvbikgX2RpVHJhbnNhY3Rpb25zPzogVHJhbnNhY3Rpb25TZXJ2aWNlPFRyYW5zYWN0aW9uLCBTdGF0ZT4pIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICB2YWxpZGF0aW9uU2VydmljZSxcbiAgICAgICAgICAgIHNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgICAgICBjb2xSZXNpemluZ1NlcnZpY2UsXG4gICAgICAgICAgICBncmlkQVBJLFxuICAgICAgICAgICAgdHJhbnNhY3Rpb25GYWN0b3J5LFxuICAgICAgICAgICAgZWxlbWVudFJlZixcbiAgICAgICAgICAgIHpvbmUsXG4gICAgICAgICAgICBkb2N1bWVudCxcbiAgICAgICAgICAgIGNkcixcbiAgICAgICAgICAgIGRpZmZlcnMsXG4gICAgICAgICAgICB2aWV3UmVmLFxuICAgICAgICAgICAgaW5qZWN0b3IsXG4gICAgICAgICAgICBlbnZJbmplY3RvcixcbiAgICAgICAgICAgIG5hdmlnYXRpb24sXG4gICAgICAgICAgICBmaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICAgICAgb3ZlcmxheVNlcnZpY2UsXG4gICAgICAgICAgICBzdW1tYXJ5U2VydmljZSxcbiAgICAgICAgICAgIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgICAgICBsb2NhbGVJZCxcbiAgICAgICAgICAgIHBsYXRmb3JtLFxuICAgICAgICAgICAgX2RpVHJhbnNhY3Rpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBwaXZvdCBncmlkIGFsd2F5cyBnZW5lcmF0ZXMgY29sdW1ucyBhdXRvbWF0aWNhbGx5LlxuICAgICAgICB0aGlzLmF1dG9HZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIC8vIGlnbm9yZSBhbnkgdXNlciBkZWZpbmVkIGNvbHVtbnMgYW5kIGF1dG8tZ2VuZXJhdGUgYmFzZWQgb24gcGl2b3QgY29uZmlnLlxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoW10pO1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy52YWx1ZUNoaXBUZW1wbGF0ZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoaXBUZW1wbGF0ZSA9IHRoaXMudmFsdWVDaGlwVGVtcGxhdGVEaXJlY3RpdmUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vdGlmaWVzIGZvciBkaW1lbnNpb24gY2hhbmdlLlxuICAgICAqL1xuICAgIHB1YmxpYyBub3RpZnlEaW1lbnNpb25DaGFuZ2UocmVnZW5lcmF0ZUNvbHVtbnMgPSBmYWxzZSkge1xuICAgICAgICBpZiAocmVnZW5lcmF0ZUNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZnVsbCBsaXN0IG9mIGRpbWVuc2lvbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5ncmlkLmFsbERpbWVuc2lvbnM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBhbGxEaW1lbnNpb25zKCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLl9waXZvdENvbmZpZ3VyYXRpb247XG4gICAgICAgIGlmICghY29uZmlnKSByZXR1cm4gW107XG4gICAgICAgIHJldHVybiAoY29uZmlnLnJvd3MgfHwgW10pLmNvbmNhdCgoY29uZmlnLmNvbHVtbnMgfHwgW10pKS5jb25jYXQoY29uZmlnLmZpbHRlcnMgfHwgW10pLmZpbHRlcih4ID0+IHggIT09IG51bGwgJiYgeCAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgY3JlYXRlRmlsdGVyRVNGKGRyb3Bkb3duOiBhbnksIGNvbHVtbjogQ29sdW1uVHlwZSwgb3B0aW9uczogT3ZlcmxheVNldHRpbmdzLCBzaG91bGRSZWF0YWNoOiBib29sZWFuKSB7XG4gICAgICAgIG9wdGlvbnMub3V0bGV0ID0gdGhpcy5vdXRsZXQ7XG4gICAgICAgIGlmIChkcm9wZG93bikge1xuICAgICAgICAgICAgZHJvcGRvd24uaW5pdGlhbGl6ZShjb2x1bW4sIHRoaXMub3ZlcmxheVNlcnZpY2UpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFJlYXRhY2gpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMub3ZlcmxheVNlcnZpY2UuYXR0YWNoKGRyb3Bkb3duLmVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGRyb3Bkb3duLm92ZXJsYXlDb21wb25lbnRJZCA9IGlkO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGlkLCByZWY6IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IGRyb3Bkb3duLm92ZXJsYXlDb21wb25lbnRJZCwgcmVmOiB1bmRlZmluZWQgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZlYXR1cmVDb2x1bW5zV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Um93V2lkdGhzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW2lkXT1cIidpZ3gtcGl2b3QtMSdcIiBbZGF0YV09XCJEYXRhXCI+PC9pZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5wX2lkO1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5wX2lkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgbGV0cyB5b3UgZmlsbCB0aGUgYElneFBpdm90R3JpZENvbXBvbmVudGAgd2l0aCBhbiBhcnJheSBvZiBkYXRhLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW2RhdGFdPVwiRGF0YVwiPjwvaWd4LXBpdm90LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGRhdGEodmFsdWU6IGFueVtdIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9kYXRhID0gdmFsdWUgfHwgW107XG4gICAgICAgIGlmICghdGhpcy5faW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGlmICh0aGlzLmhlaWdodCA9PT0gbnVsbCB8fCB0aGlzLmhlaWdodC5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgaGVpZ2h0IHdpbGwgY2hhbmdlIGJhc2VkIG9uIGhvdyBtdWNoIGRhdGEgdGhlcmUgaXMsIHJlY2FsY3VsYXRlIHNpemVzIGluIGlneEZvck9mLlxuICAgICAgICAgICAgdGhpcy5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBkYXRhIHNldCB0byB0aGUgY29tcG9uZW50LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgZGF0YSA9IHRoaXMuZ3JpZC5kYXRhO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnlbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldENvbnRleHQocm93RGF0YSwgcm93SW5kZXgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiByb3dEYXRhLFxuICAgICAgICAgICAgdGVtcGxhdGVJRDoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdkYXRhUm93JyxcbiAgICAgICAgICAgICAgICBpZDogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLmdldERhdGFWaWV3SW5kZXgocm93SW5kZXgsIGZhbHNlKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBwaXZvdFJvd1dpZHRocygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93RGltZW5zaW9ucy5sZW5ndGggPyB0aGlzLnJvd0RpbWVuc2lvbnMucmVkdWNlKChhY2N1bXVsYXRvciwgZGltKSA9PiBhY2N1bXVsYXRvciArIHRoaXMucm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW0pLCAwKSA6XG4gICAgICAgICAgICB0aGlzLnJvd0RpbWVuc2lvbldpZHRoVG9QaXhlbHModGhpcy5lbXB0eVJvd0RpbWVuc2lvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW06IElQaXZvdERpbWVuc2lvbiwgaWdub3JlQmVmb3JlSW5pdCA9IGZhbHNlKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFpZ25vcmVCZWZvcmVJbml0ICYmIHRoaXMuc2hvdWxkR2VuZXJhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaW0ud2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBNSU5JTVVNX0NPTFVNTl9XSURUSDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1BlcmNlbnQgPSBkaW0ud2lkdGggJiYgZGltLndpZHRoLmluZGV4T2YoJyUnKSAhPT0gLTE7XG4gICAgICAgIGlmIChpc1BlcmNlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KGRpbS53aWR0aCkgLyAxMDAgKiB0aGlzLmNhbGNXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChkaW0ud2lkdGgsIDEwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHJldmVyc2VEaW1lbnNpb25XaWR0aFRvUGVyY2VudCh3aWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICh3aWR0aCAqIDEwMCAvIHRoaXMuY2FsY1dpZHRoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBpdm90Q29udGVudENhbGNXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgdG90YWxEaW1XaWR0aCA9IHRoaXMucm93RGltZW5zaW9ucy5sZW5ndGggPiAwID9cbiAgICAgICAgICAgIHRoaXMucm93RGltZW5zaW9ucy5tYXAoKGRpbSkgPT4gdGhpcy5yb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbSkpLnJlZHVjZSgocHJldiwgY3VyKSA9PiBwcmV2ICsgY3VyKSA6XG4gICAgICAgICAgICAwO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxjV2lkdGggLSB0b3RhbERpbVdpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgcGl2b3RQaW5uZWRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNob3VsZEdlbmVyYXRlID8gKHRoaXMuaXNQaW5uaW5nVG9TdGFydCA/IHRoaXMucGlubmVkV2lkdGggOiB0aGlzLmhlYWRlckZlYXR1cmVzV2lkdGgpIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHBpdm90VW5waW5uZWRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNob3VsZEdlbmVyYXRlID8gdGhpcy51bnBpbm5lZFdpZHRoIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHJvd0RpbWVuc2lvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzPy5maWx0ZXIoeCA9PiB4LmVuYWJsZWQpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgY29sdW1uRGltZW5zaW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtbnM/LmZpbHRlcih4ID0+IHguZW5hYmxlZCkgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBmaWx0ZXJEaW1lbnNpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcz8uZmlsdGVyKHggPT4geC5lbmFibGVkKSB8fCBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlQ29sdW1uKGNvbDogSWd4Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5nZXQoY29sLmZpZWxkKTtcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSAhc3RhdGU7XG4gICAgICAgIHRoaXMuY29sdW1uR3JvdXBTdGF0ZXMuc2V0KGNvbC5maWVsZCwgbmV3U3RhdGUpO1xuICAgICAgICB0aGlzLnRvZ2dsZVJvd0dyb3VwKGNvbCwgbmV3U3RhdGUpO1xuICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXRDb2x1bW5XaWR0aFN1bSgpOiBudW1iZXIge1xuICAgICAgICBsZXQgY29sU3VtID0gc3VwZXIuZ2V0Q29sdW1uV2lkdGhTdW0oKTtcbiAgICAgICAgY29sU3VtICs9IHRoaXMucm93RGltZW5zaW9ucy5tYXAoZGltID0+IHRoaXMucm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhkaW0sIHRydWUpKS5yZWR1Y2UoKHByZXYsIGN1cikgPT4gcHJldiArIGN1ciwgMCk7XG4gICAgICAgIHJldHVybiBjb2xTdW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgaXNSZWNvcmRQaW5uZWRCeUluZGV4KF9yb3dJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHRvZ2dsZUNvbHVtblZpc2liaWxpdHkoX2FyZ3M6IElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZXhwYW5kQWxsKCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbGxhcHNlQWxsKCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGV4cGFuZFJvdyhfcm93SUQ6IGFueSkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGNvbGxhcHNlUm93KF9yb3dJRDogYW55KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZFJvd3MoKTogSWd4R3JpZFJvd0NvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRvdGFsUmVjb3JkcygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCB0b3RhbFJlY29yZHMoX3RvdGFsOiBudW1iZXIpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBtb3ZlQ29sdW1uKF9jb2x1bW46IElneENvbHVtbkNvbXBvbmVudCwgX3RhcmdldDogSWd4Q29sdW1uQ29tcG9uZW50LCBfcG9zOiBEcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQWZ0ZXJEcm9wVGFyZ2V0KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYWRkUm93KF9kYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBkZWxldGVSb3coX3Jvd1NlbGVjdG9yOiBhbnkpOiBhbnkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHVwZGF0ZUNlbGwoX3ZhbHVlOiBhbnksIF9yb3dTZWxlY3RvcjogYW55LCBfY29sdW1uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB1cGRhdGVSb3coX3ZhbHVlOiBhbnksIF9yb3dTZWxlY3RvcjogYW55KTogdm9pZCB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZW5hYmxlU3VtbWFyaWVzKC4uLl9yZXN0KSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZGlzYWJsZVN1bW1hcmllcyguLi5fcmVzdCkge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHBpbkNvbHVtbihfY29sdW1uTmFtZTogc3RyaW5nIHwgSWd4Q29sdW1uQ29tcG9uZW50LCBfaW5kZXg/KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB1bnBpbkNvbHVtbihfY29sdW1uTmFtZTogc3RyaW5nIHwgSWd4Q29sdW1uQ29tcG9uZW50LCBfaW5kZXg/KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBwaW5Sb3coX3Jvd0lEOiBhbnksIF9pbmRleD86IG51bWJlciwgX3Jvdz86IFJvd1R5cGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHVucGluUm93KF9yb3dJRDogYW55LCBfcm93PzogUm93VHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHBpbm5lZFJvd0hlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBoYXNFZGl0YWJsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGFzU3VtbWFyaXplZENvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgaGFzTW92YWJsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgcGlubmVkRGF0YVZpZXcoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgb3BlbkFkdmFuY2VkRmlsdGVyaW5nRGlhbG9nKF9vdmVybGF5U2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjbG9zZUFkdmFuY2VkRmlsdGVyaW5nRGlhbG9nKF9hcHBseUNoYW5nZXM6IGJvb2xlYW4pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBlbmRFZGl0KF9jb21taXQgPSB0cnVlLCBfZXZlbnQ/OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgYmVnaW5BZGRSb3dCeUlkKF9yb3dJRDogYW55LCBfYXNDaGlsZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBiZWdpbkFkZFJvd0J5SW5kZXgoX2luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjbGVhclNlYXJjaCgpIHsgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHJlZnJlc2hTZWFyY2goX3VwZGF0ZUFjdGl2ZUluZm8/OiBib29sZWFuLCBfZW5kRWRpdCA9IHRydWUpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZmluZE5leHQoX3RleHQ6IHN0cmluZywgX2Nhc2VTZW5zaXRpdmU/OiBib29sZWFuLCBfZXhhY3RNYXRjaD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZmluZFByZXYoX3RleHQ6IHN0cmluZywgX2Nhc2VTZW5zaXRpdmU/OiBib29sZWFuLCBfZXhhY3RNYXRjaD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0TmV4dENlbGwoY3VyclJvd0luZGV4OiBudW1iZXIsIGN1clZpc2libGVDb2xJbmRleDogbnVtYmVyLFxuICAgICAgICBjYWxsYmFjazogKElneENvbHVtbkNvbXBvbmVudCkgPT4gYm9vbGVhbiA9IG51bGwpOiBJQ2VsbFBvc2l0aW9uIHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldE5leHRDZWxsKGN1cnJSb3dJbmRleCwgY3VyVmlzaWJsZUNvbEluZGV4LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldFByZXZpb3VzQ2VsbChjdXJyUm93SW5kZXg6IG51bWJlciwgY3VyVmlzaWJsZUNvbEluZGV4OiBudW1iZXIsXG4gICAgICAgIGNhbGxiYWNrOiAoSWd4Q29sdW1uQ29tcG9uZW50KSA9PiBib29sZWFuID0gbnVsbCk6IElDZWxsUG9zaXRpb24ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0UHJldmlvdXNDZWxsKGN1cnJSb3dJbmRleCwgY3VyVmlzaWJsZUNvbEluZGV4LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldFBpbm5lZFdpZHRoKHRha2VIaWRkZW4gPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0UGlubmVkV2lkdGgodGFrZUhpZGRlbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHRvdGFsSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxjSGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2x1bW5Hcm91cEV4cGFuZFN0YXRlKGNvbDogSWd4Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5nZXQoY29sLmZpZWxkKTtcbiAgICAgICAgLy8gY29sdW1ucyBhcmUgZXhwYW5kZWQgYnkgZGVmYXVsdD9cbiAgICAgICAgcmV0dXJuIHN0YXRlICE9PSB1bmRlZmluZWQgJiYgc3RhdGUgIT09IG51bGwgPyBzdGF0ZSA6IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVSb3dHcm91cChjb2w6IElneENvbHVtbkNvbXBvbmVudCwgbmV3U3RhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFjb2wpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbHMgPSBjb2wucGFyZW50ID8gY29sLnBhcmVudC5jaGlsZHJlbi50b0FycmF5KCkgOiB0aGlzLl9hdXRvR2VuZXJhdGVkQ29scy5maWx0ZXIoeCA9PiB4LmxldmVsID09PSAwKTtcbiAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdDb2wgPSBwYXJlbnRDb2xzLmZpbHRlcih4ID0+IHguaGVhZGVyID09PSBjb2wuaGVhZGVyICYmIHggIT09IGNvbClbMF07XG4gICAgICAgICAgICBjb25zdCBjdXJySW5kZXggPSBwYXJlbnRDb2xzLmluZGV4T2YoY29sKTtcbiAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdJbmRleCA9IHBhcmVudENvbHMuaW5kZXhPZihzaWJsaW5nQ29sKTtcbiAgICAgICAgICAgIGlmIChjdXJySW5kZXggPCBzaWJsaW5nSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGlja2VkIG9uIHRoZSBmdWxsIGhpZXJhcmNoeSBoZWFkZXJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVUb2dnbGUoY29sLCBuZXdTdGF0ZSk7XG4gICAgICAgICAgICAgICAgc2libGluZ0NvbC5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNsaWNrZWQgb24gc3VtbWFyeSBwYXJlbnQgY29sdW1uIHRoYXQgY29udGFpbnMganVzdCB0aGUgbWVhc3VyZXNcbiAgICAgICAgICAgICAgICBjb2wuaGVhZGVyVGVtcGxhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVG9nZ2xlKHNpYmxpbmdDb2wsIG5ld1N0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbHMgPSBjb2wucGFyZW50ID8gY29sLnBhcmVudC5jaGlsZHJlbiA6IHRoaXMuX2F1dG9HZW5lcmF0ZWRDb2xzLmZpbHRlcih4ID0+IHgubGV2ZWwgPT09IDApO1xuICAgICAgICAgICAgY29uc3QgZmllbGRDb2x1bW4gPSBwYXJlbnRDb2xzLmZpbHRlcih4ID0+IHguaGVhZGVyID09PSBjb2wuaGVhZGVyICYmICF4LmNvbHVtbkdyb3VwKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQ29sdW1uID0gcGFyZW50Q29scy5maWx0ZXIoeCA9PiB4LmhlYWRlciA9PT0gY29sLmhlYWRlciAmJiB4LmNvbHVtbkdyb3VwKVswXTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVRvZ2dsZShncm91cENvbHVtbiwgbmV3U3RhdGUpO1xuICAgICAgICAgICAgaWYgKG5ld1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgZmllbGRDb2x1bW4uaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaWVsZENvbHVtbi5oZWFkZXJUZW1wbGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBzZXR1cENvbHVtbnMoKSB7XG4gICAgICAgIHN1cGVyLnNldHVwQ29sdW1ucygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEF1dG8tc2l6ZXMgcm93IGRpbWVuc2lvbiBjZWxscy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogT25seSBzaXplcyBiYXNlZCBvbiB0aGUgZGltZW5zaW9uIGNlbGxzIGluIHZpZXcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLmF1dG9TaXplUm93RGltZW5zaW9uKGRpbWVuc2lvbik7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGRpbWVuc2lvbiBUaGUgcm93IGRpbWVuc2lvbiB0byBzaXplLlxuICAgICAqL1xuICAgIHB1YmxpYyBhdXRvU2l6ZVJvd0RpbWVuc2lvbihkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbikge1xuICAgICAgICBpZiAodGhpcy5nZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbikgPT09IFBpdm90RGltZW5zaW9uVHlwZS5Sb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWREaW1zID0gUGl2b3RVdGlsLmZsYXR0ZW4oW2RpbWVuc2lvbl0pLm1hcCh4ID0+IHgubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yb3dEaW1lbnNpb25Db250ZW50Q29sbGVjdGlvbi5maWx0ZXIoeCA9PiByZWxhdGVkRGltcy5pbmRleE9mKHguZGltZW5zaW9uLm1lbWJlck5hbWUpICE9PSAtMSk7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gY29udGVudC5tYXAoeCA9PiB4LmhlYWRlckdyb3Vwcy50b0FycmF5KCkpLmZsYXQoKS5tYXAoeCA9PiB4LmhlYWRlciAmJiB4LmhlYWRlci5yZWZJbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCBhdXRvV2lkdGggPSB0aGlzLmdldExhcmdlc0NvbnRlbnRXaWR0aChoZWFkZXJzKTtcbiAgICAgICAgICAgIGRpbWVuc2lvbi53aWR0aCA9IGF1dG9XaWR0aDtcbiAgICAgICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydHMgZGltZW5zaW9uIGluIHRhcmdldCBjb2xsZWN0aW9uIGJ5IHR5cGUgYXQgc3BlY2lmaWVkIGluZGV4IG9yIGF0IHRoZSBjb2xsZWN0aW9uJ3MgZW5kLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLmluc2VydERpbWVuc2lvbkF0KGRpbWVuc2lvbiwgUGl2b3REaW1lbnNpb25UeXBlLlJvdywgMSk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIGRpbWVuc2lvbiBUaGUgZGltZW5zaW9uIHRoYXQgd2lsbCBiZSBhZGRlZC5cbiAgICAgKiBAcGFyYW0gdGFyZ2V0Q29sbGVjdGlvblR5cGUgVGhlIHRhcmdldCBjb2xsZWN0aW9uIHR5cGUgdG8gYWRkIHRvLiBDYW4gYmUgUm93LCBDb2x1bW4gb3IgRmlsdGVyLlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggaW4gdGhlIGNvbGxlY3Rpb24gYXQgd2hpY2ggdG8gYWRkLlxuICAgICAqIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBJZiBub3Qgc2V0IGl0IHdpbGwgYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIGluc2VydERpbWVuc2lvbkF0KGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCB0YXJnZXRDb2xsZWN0aW9uVHlwZTogUGl2b3REaW1lbnNpb25UeXBlLCBpbmRleD86IG51bWJlcikge1xuICAgICAgICBjb25zdCB0YXJnZXRDb2xsZWN0aW9uID0gdGhpcy5nZXREaW1lbnNpb25zQnlUeXBlKHRhcmdldENvbGxlY3Rpb25UeXBlKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRhcmdldENvbGxlY3Rpb24uc3BsaWNlKGluZGV4LCAwLCBkaW1lbnNpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0Q29sbGVjdGlvbi5wdXNoKGRpbWVuc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldENvbGxlY3Rpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5kaW1lbnNpb25zQ2hhbmdlLmVtaXQoeyBkaW1lbnNpb25zOiB0YXJnZXRDb2xsZWN0aW9uLCBkaW1lbnNpb25Db2xsZWN0aW9uVHlwZTogdGFyZ2V0Q29sbGVjdGlvblR5cGUgfSk7XG4gICAgICAgIGlmICh0YXJnZXRDb2xsZWN0aW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5kaW1lbnNpb25EYXRhQ29sdW1ucyA9IHRoaXMuZ2VuZXJhdGVEaW1lbnNpb25Db2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLnJlZmxvdygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmUgZGltZW5zaW9uIGZyb20gaXRzIGN1cnJlbnRseSBjb2xsZWN0aW9uIHRvIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IGNvbGxlY3Rpb24gYnkgdHlwZSBhdCBzcGVjaWZpZWQgaW5kZXggb3IgYXQgdGhlIGNvbGxlY3Rpb24ncyBlbmQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQubW92ZURpbWVuc2lvbihkaW1lbnNpb24sIFBpdm90RGltZW5zaW9uVHlwZS5Sb3csIDEpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBkaW1lbnNpb24gVGhlIGRpbWVuc2lvbiB0aGF0IHdpbGwgYmUgbW92ZWQuXG4gICAgICogQHBhcmFtIHRhcmdldENvbGxlY3Rpb25UeXBlIFRoZSB0YXJnZXQgY29sbGVjdGlvbiB0eXBlIHRvIG1vdmUgaXQgdG8uIENhbiBiZSBSb3csIENvbHVtbiBvciBGaWx0ZXIuXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBpbiB0aGUgY29sbGVjdGlvbiBhdCB3aGljaCB0byBhZGQuXG4gICAgICogVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIElmIG5vdCBzZXQgaXQgd2lsbCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgbW92ZURpbWVuc2lvbihkaW1lbnNpb246IElQaXZvdERpbWVuc2lvbiwgdGFyZ2V0Q29sbGVjdGlvblR5cGU6IFBpdm90RGltZW5zaW9uVHlwZSwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcHJldkNvbGxlY3Rpb25UeXBlID0gdGhpcy5nZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbik7XG4gICAgICAgIGlmIChwcmV2Q29sbGVjdGlvblR5cGUgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgLy8gcmVtb3ZlIGZyb20gb2xkIGNvbGxlY3Rpb25cbiAgICAgICAgdGhpcy5fcmVtb3ZlRGltZW5zaW9uSW50ZXJuYWwoZGltZW5zaW9uKTtcbiAgICAgICAgLy8gYWRkIHRvIHRhcmdldFxuICAgICAgICB0aGlzLmluc2VydERpbWVuc2lvbkF0KGRpbWVuc2lvbiwgdGFyZ2V0Q29sbGVjdGlvblR5cGUsIGluZGV4KTtcblxuICAgICAgICBpZiAocHJldkNvbGxlY3Rpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBkaW1lbnNpb24gZnJvbSBpdHMgY3VycmVudGx5IGNvbGxlY3Rpb24uXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHRvZ2dsZURpbWVuc2lvbiB0aGF0IGVuYWJsZWQvZGlzYWJsZXMgdGhlIGRpbWVuc2lvbi5cbiAgICAgKiBUaGlzIGNvbXBsZXRlbHkgcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbiBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC5yZW1vdmVEaW1lbnNpb24oZGltZW5zaW9uKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gZGltZW5zaW9uIFRoZSBkaW1lbnNpb24gdG8gYmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlRGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgIGNvbnN0IHByZXZDb2xsZWN0aW9uVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICB0aGlzLl9yZW1vdmVEaW1lbnNpb25JbnRlcm5hbChkaW1lbnNpb24pO1xuICAgICAgICBpZiAocHJldkNvbGxlY3Rpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2Q29sbGVjdGlvblR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgZGltZW5zaW9uJ3MgZW5hYmxlZCBzdGF0ZSBvbiBvciBvZmYuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUgZGltZW5zaW9uIHJlbWFpbnMgaW4gaXRzIGN1cnJlbnQgY29sbGVjdGlvbi4gVGhpcyBqdXN0IGNoYW5nZXMgaXRzIGVuYWJsZWQgc3RhdGUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLnRvZ2dsZURpbWVuc2lvbihkaW1lbnNpb24pO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSBkaW1lbnNpb24gVGhlIGRpbWVuc2lvbiB0byBiZSB0b2dnbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVEaW1lbnNpb24oZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgY29uc3QgZGltVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICBpZiAoZGltVHlwZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5nZXREaW1lbnNpb25zQnlUeXBlKGRpbVR5cGUpO1xuICAgICAgICBkaW1lbnNpb24uZW5hYmxlZCA9ICFkaW1lbnNpb24uZW5hYmxlZDtcbiAgICAgICAgaWYgKGRpbVR5cGUgPT09IFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkaW1lbnNpb24uZW5hYmxlZCAmJiBkaW1lbnNpb24uZmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuY2xlYXJGaWx0ZXIoZGltZW5zaW9uLm1lbWJlck5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5kaW1lbnNpb25zQ2hhbmdlLmVtaXQoeyBkaW1lbnNpb25zOiBjb2xsZWN0aW9uLCBkaW1lbnNpb25Db2xsZWN0aW9uVHlwZTogZGltVHlwZSB9KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBpZiAoZGltVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbkNoYW5nZS5lbWl0KHsgcGl2b3RDb25maWd1cmF0aW9uOiB0aGlzLnBpdm90Q29uZmlndXJhdGlvbiB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnRzIHZhbHVlIGF0IHNwZWNpZmllZCBpbmRleCBvciBhdCB0aGUgZW5kLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLmluc2VydFZhbHVlQXQodmFsdWUsIDEpO1xuICAgICAqIGBgYFxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgZGVmaW5pdGlvbiB0aGF0IHdpbGwgYmUgYWRkZWQuXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBpbiB0aGUgY29sbGVjdGlvbiBhdCB3aGljaCB0byBhZGQuXG4gICAgICogVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIElmIG5vdCBzZXQgaXQgd2lsbCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW5zZXJ0VmFsdWVBdCh2YWx1ZTogSVBpdm90VmFsdWUsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXM7XG4gICAgICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKGluZGV4LCAwLCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMudmFsdWVzQ2hhbmdlLmVtaXQoeyB2YWx1ZXMgfSk7XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmUgdmFsdWUgZnJvbSBpdHMgY3VycmVudGx5IGF0IHNwZWNpZmllZCBpbmRleCBvciBhdCB0aGUgZW5kLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5ncmlkLm1vdmVWYWx1ZSh2YWx1ZSwgMSk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgbW92ZWQuXG4gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBpbiB0aGUgY29sbGVjdGlvbiBhdCB3aGljaCB0byBhZGQuXG4gICAgICogVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuIElmIG5vdCBzZXQgaXQgd2lsbCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgbW92ZVZhbHVlKHZhbHVlOiBJUGl2b3RWYWx1ZSwgaW5kZXg/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHJldHVybjtcbiAgICAgICAgLy8gcmVtb3ZlIGZyb20gb2xkIGluZGV4XG4gICAgICAgIHRoaXMucmVtb3ZlVmFsdWUodmFsdWUpO1xuICAgICAgICAvLyBhZGQgdG8gbmV3XG4gICAgICAgIHRoaXMuaW5zZXJ0VmFsdWVBdCh2YWx1ZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdmFsdWUgZnJvbSBjb2xsZWN0aW9uLlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0b2dnbGVWYWx1ZSB0aGF0IGVuYWJsZWQvZGlzYWJsZXMgdGhlIHZhbHVlLlxuICAgICAqIFRoaXMgY29tcGxldGVseSByZW1vdmVzIHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgY29sbGVjdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQucmVtb3ZlVmFsdWUoZGltZW5zaW9uKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZVZhbHVlKHZhbHVlOiBJUGl2b3RWYWx1ZSwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzO1xuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB2YWx1ZXMuaW5kZXhPZih2YWx1ZSk7XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICAgICAgdGhpcy52YWx1ZXNDaGFuZ2UuZW1pdCh7IHZhbHVlcyB9KTtcbiAgICAgICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgdmFsdWUncyBlbmFibGVkIHN0YXRlIG9uIG9yIG9mZi5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoZSB2YWx1ZSByZW1haW5zIGluIGl0cyBjdXJyZW50IGNvbGxlY3Rpb24uIFRoaXMganVzdCBjaGFuZ2VzIGl0cyBlbmFibGVkIHN0YXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZC50b2dnbGVWYWx1ZSh2YWx1ZSk7XG4gICAgICogYGBgXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBiZSB0b2dnbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVWYWx1ZSh2YWx1ZTogSVBpdm90VmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHJldHVybjtcbiAgICAgICAgdmFsdWUuZW5hYmxlZCA9ICF2YWx1ZS5lbmFibGVkO1xuICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB0aGlzLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIHRoaXMudmFsdWVzQ2hhbmdlLmVtaXQoeyB2YWx1ZXM6IHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcyB9KTtcbiAgICAgICAgdGhpcy5yZWZsb3coKTtcbiAgICAgICAgdGhpcy5waXZvdENvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdCh7IHBpdm90Q29uZmlndXJhdGlvbjogdGhpcy5waXZvdENvbmZpZ3VyYXRpb24gfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU29ydCB0aGUgZGltZW5zaW9uIGFuZCBpdHMgY2hpbGRyZW4gaW4gdGhlIHByb3ZpZGVkIGRpcmVjdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmdyaWQuc29ydERpbWVuc2lvbihkaW1lbnNpb24sIFNvcnRpbmdEaXJlY3Rpb24uQXNjKTtcbiAgICAgKiBgYGBcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHRvZ2dsZWQuXG4gICAgICovXG4gICAgcHVibGljIHNvcnREaW1lbnNpb24oZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24sIHNvcnREaXJlY3Rpb246IFNvcnRpbmdEaXJlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICBkaW1lbnNpb24uc29ydERpcmVjdGlvbiA9IHNvcnREaXJlY3Rpb247XG4gICAgICAgIC8vIGFwcGx5IHNhbWUgc29ydCBkaXJlY3Rpb24gdG8gY2hpbGRyZW4uXG4gICAgICAgIGxldCBkaW0gPSBkaW1lbnNpb247XG4gICAgICAgIHdoaWxlIChkaW0uY2hpbGRMZXZlbCkge1xuICAgICAgICAgICAgZGltLmNoaWxkTGV2ZWwuc29ydERpcmVjdGlvbiA9IGRpbWVuc2lvbi5zb3J0RGlyZWN0aW9uO1xuICAgICAgICAgICAgZGltID0gZGltLmNoaWxkTGV2ZWw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnNDaGFuZ2UuZW1pdCh0aGlzLmRpbWVuc2lvbnNTb3J0aW5nRXhwcmVzc2lvbnMpO1xuICAgICAgICBpZiAoZGltZW5zaW9uVHlwZSA9PT0gUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbHVtbnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoeyBwaXZvdENvbmZpZ3VyYXRpb246IHRoaXMucGl2b3RDb25maWd1cmF0aW9uIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbHRlcnMgYSBzaW5nbGUgYElQaXZvdERpbWVuc2lvbmAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgZmlsdGVyKCkge1xuICAgICAqICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpO1xuICAgICAqICAgICAgc2V0LmFkZCgnVmFsdWUgMScpO1xuICAgICAqICAgICAgc2V0LmFkZCgnVmFsdWUgMicpO1xuICAgICAqICAgICAgdGhpcy5ncmlkMS5maWx0ZXJEaW1lbnNpb24odGhpcy5waXZvdENvbmZpZ0hpZXJhcmNoeS5yb3dzWzBdLCBzZXQsIElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKS5jb25kaXRpb24oJ2luJykpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyRGltZW5zaW9uKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCB2YWx1ZTogYW55LCBjb25kaXRpb25PckV4cHJlc3Npb25UcmVlPzogSUZpbHRlcmluZ09wZXJhdGlvbiB8IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJpbmdTZXJ2aWNlLmZpbHRlcihkaW1lbnNpb24ubWVtYmVyTmFtZSwgdmFsdWUsIGNvbmRpdGlvbk9yRXhwcmVzc2lvblRyZWUpO1xuICAgICAgICBjb25zdCBkaW1lbnNpb25UeXBlID0gdGhpcy5nZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbik7XG4gICAgICAgIGlmIChkaW1lbnNpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwQ29sdW1ucygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXREaW1lbnNpb25zQnlUeXBlKGRpbWVuc2lvbjogUGl2b3REaW1lbnNpb25UeXBlKSB7XG4gICAgICAgIHN3aXRjaCAoZGltZW5zaW9uKSB7XG4gICAgICAgICAgICBjYXNlIFBpdm90RGltZW5zaW9uVHlwZS5Sb3c6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnJvd3MgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnJvd3M7XG4gICAgICAgICAgICBjYXNlIFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW46XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtbnM7XG4gICAgICAgICAgICBjYXNlIFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXI6XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmZpbHRlcnM7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzaXplUm93RGltZW5zaW9uUGl4ZWxzKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLCBuZXdXaWR0aDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGlzUGVyY2VudGFnZVdpZHRoID0gZGltZW5zaW9uLndpZHRoICYmIHR5cGVvZiBkaW1lbnNpb24ud2lkdGggPT09ICdzdHJpbmcnICYmIGRpbWVuc2lvbi53aWR0aC5pbmRleE9mKCclJykgIT09IC0xO1xuICAgICAgICBpZiAoaXNQZXJjZW50YWdlV2lkdGgpIHtcbiAgICAgICAgICAgIGRpbWVuc2lvbi53aWR0aCA9IHRoaXMucmV2ZXJzZURpbWVuc2lvbldpZHRoVG9QZXJjZW50KG5ld1dpZHRoKS50b0ZpeGVkKDIpICsgJyUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGltZW5zaW9uLndpZHRoID0gbmV3V2lkdGggKyAncHgnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm90aWZ5IHRoZSBncmlkIHRvIHJlZmxvdywgdG8gdXBkYXRlIGlmIGhvcml6b250YWwgc2Nyb2xsYmFyIG5lZWRzIHRvIGJlIHJlbmRlcmVkL3JlbW92ZWQuXG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qXG4gICAgKiBAaGlkZGVuXG4gICAgKiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHByb3RlY3RlZCBfcmVtb3ZlRGltZW5zaW9uSW50ZXJuYWwoZGltZW5zaW9uKSB7XG4gICAgICAgIGNvbnN0IHByZXZDb2xsZWN0aW9uVHlwZSA9IHRoaXMuZ2V0RGltZW5zaW9uVHlwZShkaW1lbnNpb24pO1xuICAgICAgICBpZiAocHJldkNvbGxlY3Rpb25UeXBlID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHByZXZDb2xsZWN0aW9uID0gdGhpcy5nZXREaW1lbnNpb25zQnlUeXBlKHByZXZDb2xsZWN0aW9uVHlwZSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHByZXZDb2xsZWN0aW9uLmluZGV4T2YoZGltZW5zaW9uKTtcbiAgICAgICAgcHJldkNvbGxlY3Rpb24uc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gICAgICAgIHRoaXMucGlwZVRyaWdnZXIrKztcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXREaW1lbnNpb25UeXBlKGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uKTogUGl2b3REaW1lbnNpb25UeXBlIHtcbiAgICAgICAgcmV0dXJuIFBpdm90VXRpbC5mbGF0dGVuKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnJvd3MpLmluZGV4T2YoZGltZW5zaW9uKSAhPT0gLTEgPyBQaXZvdERpbWVuc2lvblR5cGUuUm93IDpcbiAgICAgICAgICAgIFBpdm90VXRpbC5mbGF0dGVuKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtbnMpLmluZGV4T2YoZGltZW5zaW9uKSAhPT0gLTEgPyBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uIDpcbiAgICAgICAgICAgICAgICAoISF0aGlzLnBpdm90Q29uZmlndXJhdGlvbi5maWx0ZXJzICYmIFBpdm90VXRpbC5mbGF0dGVuKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLmZpbHRlcnMpLmluZGV4T2YoZGltZW5zaW9uKSAhPT0gLTEpID9cbiAgICAgICAgICAgICAgICAgICAgUGl2b3REaW1lbnNpb25UeXBlLkZpbHRlciA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldExhcmdlc0NvbnRlbnRXaWR0aChjb250ZW50czogRWxlbWVudFJlZltdKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbGFyZ2VzdCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gICAgICAgIGlmIChjb250ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsc0NvbnRlbnRXaWR0aHMgPSBbXTtcbiAgICAgICAgICAgIGNvbnRlbnRzLmZvckVhY2goKGVsZW0pID0+IGNlbGxzQ29udGVudFdpZHRocy5wdXNoKHRoaXMuZ2V0SGVhZGVyQ2VsbFdpZHRoKGVsZW0ubmF0aXZlRWxlbWVudCkud2lkdGgpKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2VsbHNDb250ZW50V2lkdGhzLmluZGV4T2YoTWF0aC5tYXgoLi4uY2VsbHNDb250ZW50V2lkdGhzKSk7XG4gICAgICAgICAgICBjb25zdCBjZWxsU3R5bGUgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoY29udGVudHNbaW5kZXhdLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgY2VsbFBhZGRpbmcgPSBwYXJzZUZsb2F0KGNlbGxTdHlsZS5wYWRkaW5nTGVmdCkgKyBwYXJzZUZsb2F0KGNlbGxTdHlsZS5wYWRkaW5nUmlnaHQpICtcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGNlbGxTdHlsZS5ib3JkZXJMZWZ0V2lkdGgpICsgcGFyc2VGbG9hdChjZWxsU3R5bGUuYm9yZGVyUmlnaHRXaWR0aCk7XG4gICAgICAgICAgICBsYXJnZXN0LnNldChNYXRoLm1heCguLi5jZWxsc0NvbnRlbnRXaWR0aHMpLCBjZWxsUGFkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFyZ2VzdENlbGwgPSBNYXRoLm1heCguLi5BcnJheS5mcm9tKGxhcmdlc3Qua2V5cygpKSk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5jZWlsKGxhcmdlc3RDZWxsICsgbGFyZ2VzdC5nZXQobGFyZ2VzdENlbGwpKTtcblxuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHdpZHRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gd2lkdGggKyAncHgnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhhc011bHRpcGxlVmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqL1xuICAgIHB1YmxpYyBnZXQgZXhjZWxTdHlsZUZpbHRlck1heEhlaWdodCgpIHtcbiAgICAgICAgLy8gbWF4IDEwIHJvd3MsIHJvdyBzaXplIGRlcGVuZHMgb24gZGVuc2l0eVxuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB0aGlzLnJlbmRlcmVkUm93SGVpZ2h0ICogMTA7XG4gICAgICAgIHJldHVybiBgJHttYXhIZWlnaHR9cHhgO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICovXG4gICAgcHVibGljIGdldCBleGNlbFN0eWxlRmlsdGVyTWluSGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgICAgIC8vIG1pbiA1IHJvd3MsIHJvdyBzaXplIGRlcGVuZHMgb24gZGVuc2l0eVxuICAgICAgICBjb25zdCBtaW5IZWlnaHQgPSB0aGlzLnJlbmRlcmVkUm93SGVpZ2h0ICogNTtcbiAgICAgICAgcmV0dXJuIGAke21pbkhlaWdodH1weGA7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVUb2dnbGUoZ3JvdXBDb2x1bW46IElneENvbHVtbkNvbXBvbmVudCwgc3RhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFncm91cENvbHVtbikgcmV0dXJuO1xuICAgICAgICBncm91cENvbHVtbi5oaWRkZW4gPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5zZXQoZ3JvdXBDb2x1bW4uZmllbGQsIHN0YXRlKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5Ub3RhbCA9IHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMgP1xuICAgICAgICAgICAgZ3JvdXBDb2x1bW4uY2hpbGRyZW4uZmlsdGVyKHggPT4geC5jb2x1bW5Hcm91cCAmJiB4LmNoaWxkcmVuLmZpbHRlcih5ID0+ICF5LmNvbHVtbkdyb3VwKS5sZW5ndGggPT09IHRoaXMudmFsdWVzLmxlbmd0aCkgOlxuICAgICAgICAgICAgZ3JvdXBDb2x1bW4uY2hpbGRyZW4uZmlsdGVyKHggPT4gIXguY29sdW1uR3JvdXApO1xuICAgICAgICBjb25zdCBjaGlsZHJlblN1Ymdyb3VwcyA9IHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMgP1xuICAgICAgICAgICAgZ3JvdXBDb2x1bW4uY2hpbGRyZW4uZmlsdGVyKHggPT4geC5jb2x1bW5Hcm91cCAmJiB4LmNoaWxkcmVuLmZpbHRlcih5ID0+ICF5LmNvbHVtbkdyb3VwKS5sZW5ndGggPT09IDApIDpcbiAgICAgICAgICAgIGdyb3VwQ29sdW1uLmNoaWxkcmVuLmZpbHRlcih4ID0+IHguY29sdW1uR3JvdXApO1xuICAgICAgICBjaGlsZHJlblRvdGFsLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLmdldChncm91cC5maWVsZCkgfHwgc3RhdGU7XG4gICAgICAgICAgICBpZiAobmV3U3RhdGUpIHtcbiAgICAgICAgICAgICAgICBncm91cC5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdyb3VwLmhlYWRlclRlbXBsYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFncm91cENvbHVtbi5oaWRkZW4gJiYgY2hpbGRyZW5TdWJncm91cHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY2hpbGRyZW5TdWJncm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLmNvbHVtbkdyb3VwU3RhdGVzLmdldChncm91cC5maWVsZCkgfHwgc3RhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlVG9nZ2xlKGdyb3VwLCBuZXdTdGF0ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgY2FsY0dyaWRIZWFkUm93KCkge1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBidWlsZERhdGFWaWV3KGRhdGE6IGFueVtdKSB7XG4gICAgICAgIHRoaXMuX2RhdGFWaWV3ID0gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXREYXRhQmFzZWRCb2R5SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGR2bCA9IHRoaXMuZGF0YVZpZXc/Lmxlbmd0aCB8fCAwO1xuICAgICAgICByZXR1cm4gZHZsIDwgdGhpcy5fZGVmYXVsdFRhcmdldFJlY29yZE51bWJlciA/IDAgOiB0aGlzLmRlZmF1bHRUYXJnZXRCb2R5SGVpZ2h0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBob3Jpem9udGFsU2Nyb2xsSGFuZGxlcihldmVudCkge1xuICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gZXZlbnQudGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgICAgIHRoaXMudGhlYWRSb3cuaGVhZGVyQ29udGFpbmVycy5mb3JFYWNoKGhlYWRlckZvck9mID0+IHtcbiAgICAgICAgICAgIGhlYWRlckZvck9mLm9uSFNjcm9sbChzY3JvbGxMZWZ0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1cGVyLmhvcml6b250YWxTY3JvbGxIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmVydGljYWxTY3JvbGxIYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIHRoaXMudmVydGljYWxSb3dEaW1TY3JvbGxDb250YWluZXJzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICB4Lm9uU2Nyb2xsKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1cGVyLnZlcnRpY2FsU2Nyb2xsSGFuZGxlcihldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhdXRvZ2VuZXJhdGVDb2x1bW5zKCkge1xuICAgICAgICBsZXQgY29sdW1ucyA9IFtdO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5ncmlkQVBJLmZpbHRlckRhdGFCeUV4cHJlc3Npb25zKHRoaXMuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTtcbiAgICAgICAgdGhpcy5kaW1lbnNpb25EYXRhQ29sdW1ucyA9IHRoaXMuZ2VuZXJhdGVEaW1lbnNpb25Db2x1bW5zKCk7XG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZENvbHVtbnNXaXRoU29ydGluZyA9IFBpdm90VXRpbC5mbGF0dGVuKHRoaXMuY29sdW1uRGltZW5zaW9ucykuZmlsdGVyKGRpbSA9PiBkaW0uc29ydERpcmVjdGlvbik7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gZmxhdHRlbmVkQ29sdW1uc1dpdGhTb3J0aW5nLmxlbmd0aCA+IDAgPyBQaXZvdFNvcnRVdGlsLmdlbmVyYXRlRGltZW5zaW9uU29ydGluZ0V4cHJlc3Npb25zKGZsYXR0ZW5lZENvbHVtbnNXaXRoU29ydGluZykgOiBbXTtcbiAgICAgICAgbGV0IHNvcnRlZERhdGEgPSBkYXRhO1xuICAgICAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc29ydGVkRGF0YSA9IERhdGFVdGlsLnNvcnQoY2xvbmVBcnJheShkYXRhKSwgZXhwcmVzc2lvbnMsIHRoaXMuc29ydFN0cmF0ZWd5LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmllbGRzTWFwO1xuICAgICAgICBpZiAodGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1uU3RyYXRlZ3kgJiYgdGhpcy5waXZvdENvbmZpZ3VyYXRpb24uY29sdW1uU3RyYXRlZ3kgaW5zdGFuY2VvZiBOb29wUGl2b3REaW1lbnNpb25zU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2VuZXJhdGVEYXRhRmllbGRzKHNvcnRlZERhdGEpO1xuICAgICAgICAgICAgaWYgKGZpZWxkcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHJvd0ZpZWxkcyA9IFBpdm90VXRpbC5mbGF0dGVuKHRoaXMucGl2b3RDb25maWd1cmF0aW9uLnJvd3MpLm1hcCh4ID0+IHgubWVtYmVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBrZXlGaWVsZHMgPSBPYmplY3QudmFsdWVzKHRoaXMucGl2b3RLZXlzKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkRmllbGRzID0gZmllbGRzLmZpbHRlcih4ID0+IHJvd0ZpZWxkcy5pbmRleE9mKHgpID09PSAtMSAmJiBrZXlGaWVsZHMuaW5kZXhPZih4KSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICB4LmluZGV4T2YodGhpcy5waXZvdEtleXMucm93RGltZW5zaW9uU2VwYXJhdG9yICsgdGhpcy5waXZvdEtleXMubGV2ZWwpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIHguaW5kZXhPZih0aGlzLnBpdm90S2V5cy5yb3dEaW1lbnNpb25TZXBhcmF0b3IgKyB0aGlzLnBpdm90S2V5cy5yZWNvcmRzKSA9PT0gLTEpO1xuICAgICAgICAgICAgZmllbGRzTWFwID0gdGhpcy5nZW5lcmF0ZUZyb21EYXRhKGZpbHRlcmVkRmllbGRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkc01hcCA9IFBpdm90VXRpbC5nZXRGaWVsZHNIaWVyYXJjaHkoXG4gICAgICAgICAgICAgICAgc29ydGVkRGF0YSxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRpbWVuc2lvbnMsXG4gICAgICAgICAgICAgICAgUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbixcbiAgICAgICAgICAgICAgICB0aGlzLnBpdm90S2V5cyxcbiAgICAgICAgICAgICAgICB0aGlzLnBpdm90VmFsdWVDbG9uZVN0cmF0ZWd5XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbHVtbnMgPSB0aGlzLmdlbmVyYXRlQ29sdW1uSGllcmFyY2h5KGZpZWxkc01hcCwgc29ydGVkRGF0YSk7XG4gICAgICAgIHRoaXMuX2F1dG9HZW5lcmF0ZWRDb2xzID0gY29sdW1ucztcbiAgICAgICAgLy8gcmVzZXQgZXhwYW5zaW9uIHN0YXRlcyBpZiBhbnkgYXJlIHN0b3JlZC5cbiAgICAgICAgdGhpcy5jb2x1bW5Hcm91cFN0YXRlcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmltYXJ5Q29sdW1uID0gY29sdW1ucy5maW5kKHggPT4geC5maWVsZCA9PT0ga2V5ICYmIHguaGVhZGVyVGVtcGxhdGUgPT09IHRoaXMuaGVhZGVyVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwU3VtbWFyeUNvbHVtbiA9IGNvbHVtbnMuZmluZCh4ID0+IHguZmllbGQgPT09IGtleSAmJiB4LmhlYWRlclRlbXBsYXRlICE9PSB0aGlzLmhlYWRlclRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVJvd0dyb3VwKHByaW1hcnlDb2x1bW4sIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBTdW1tYXJ5Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwU3VtbWFyeUNvbHVtbi5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoY29sdW1ucyk7XG4gICAgICAgIHRoaXMucmVmbG93KCk7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zaG91bGRHZW5lcmF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldENvbXBvbmVudERlbnNpdHlDbGFzcyhiYXNlU3R5bGVDbGFzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuc3VwZXJDb21wYWN0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2Jhc2VTdHlsZUNsYXNzfS0tJHtEaXNwbGF5RGVuc2l0eS5jb21wYWN0fSBpZ3gtZ3JpZF9fcGl2b3QtLXN1cGVyLWNvbXBhY3RgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRDb21wb25lbnREZW5zaXR5Q2xhc3MoYmFzZVN0eWxlQ2xhc3MpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZURpbWVuc2lvbkNvbHVtbnMoKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICBjb25zdCByb290RmllbGRzID0gdGhpcy5hbGxEaW1lbnNpb25zLm1hcCh4ID0+IHgubWVtYmVyTmFtZSk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBbXTtcbiAgICAgICAgcm9vdEZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkNvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuZmllbGQgPSBmaWVsZDtcbiAgICAgICAgICAgIHJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBjb2x1bW5zLnB1c2gocmVmLmluc3RhbmNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZW5lcmF0ZUZyb21EYXRhKGZpZWxkczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5waXZvdEtleXMuY29sdW1uRGltZW5zaW9uU2VwYXJhdG9yO1xuICAgICAgICBjb25zdCBkYXRhQXJyID0gZmllbGRzLm1hcCh4ID0+IHguc3BsaXQoc2VwYXJhdG9yKSkuc29ydCh4ID0+IHgubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgaGllcmFyY2h5ID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICAgICAgZGF0YUFyci5mb3JFYWNoKGFyciA9PiB7XG4gICAgICAgICAgICBsZXQgY3VycmVudEhpZXJhcmNoeSA9IGhpZXJhcmNoeTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsIG9mIGFycikge1xuICAgICAgICAgICAgICAgIHBhdGgucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0SGllcmFyY2h5ID0gY3VycmVudEhpZXJhcmNoeS5nZXQobmV3UGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRIaWVyYXJjaHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEhpZXJhcmNoeS5zZXQobmV3UGF0aCwgeyB2YWx1ZTogbmV3UGF0aCwgZXhwYW5kYWJsZTogdHJ1ZSwgY2hpbGRyZW46IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCksIGRpbWVuc2lvbjogdGhpcy5jb2x1bW5EaW1lbnNpb25zWzBdIH0pO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRIaWVyYXJjaHkgPSBjdXJyZW50SGllcmFyY2h5LmdldChuZXdQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudEhpZXJhcmNoeSA9IHRhcmdldEhpZXJhcmNoeS5jaGlsZHJlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBoaWVyYXJjaHk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlQ29sdW1uSGllcmFyY2h5KGZpZWxkczogTWFwPHN0cmluZywgYW55PiwgZGF0YSwgcGFyZW50ID0gbnVsbCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBbXTtcbiAgICAgICAgaWYgKGZpZWxkcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yIH0pO1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5oZWFkZXIgPSB2YWx1ZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2UuZmllbGQgPSB2YWx1ZS5tZW1iZXI7XG4gICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgICAgICByZWYuaW5zdGFuY2Uuc29ydGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5kYXRhVHlwZSA9IHZhbHVlLmRhdGFUeXBlIHx8IHRoaXMucmVzb2x2ZURhdGFUeXBlcyhkYXRhWzBdW3ZhbHVlLm1lbWJlcl0pO1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5mb3JtYXR0ZXIgPSB2YWx1ZS5mb3JtYXR0ZXI7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSBmaWVsZHM7XG4gICAgICAgIGN1cnJlbnRGaWVsZHMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGxldCBzaG91bGRHZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlICYmICh2YWx1ZS5jaGlsZHJlbiA9PSBudWxsIHx8IHZhbHVlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCB2YWx1ZS5jaGlsZHJlbi5zaXplID09PSAwKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuY3JlYXRlQ29sdW1uRm9yRGltZW5zaW9uKHZhbHVlLCBkYXRhLCBwYXJlbnQsIHRoaXMuaGFzTXVsdGlwbGVWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChjb2wpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc011bHRpcGxlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lYXN1cmVDaGlsZHJlbiA9IHRoaXMuZ2V0TWVhc3VyZUNoaWxkcmVuKGRhdGEsIGNvbCwgZmFsc2UsIHZhbHVlLmRpbWVuc2lvbi53aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5yZXNldChtZWFzdXJlQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5jb25jYXQobWVhc3VyZUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkR2VuZXJhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmNyZWF0ZUNvbHVtbkZvckRpbWVuc2lvbih2YWx1ZSwgZGF0YSwgcGFyZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuZXhwYW5kYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBjb2wuaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2VuZXJhdGVDb2x1bW5IaWVyYXJjaHkodmFsdWUuY2hpbGRyZW4sIGRhdGEsIGNvbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRDaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcih4ID0+IHgubGV2ZWwgPT09IGNvbC5sZXZlbCArIDEpO1xuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChjb2wpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc011bHRpcGxlVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtZWFzdXJlQ2hpbGRyZW4gPSB0aGlzLmdldE1lYXN1cmVDaGlsZHJlbihkYXRhLCBjb2wsIHRydWUsIHZhbHVlLmRpbWVuc2lvbi53aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZENoaWxkcmVuID0gZmlsdGVyZWRDaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zdCBhbGxDaGlsZHJlbiA9IGNoaWxkcmVuLmNvbmNhdChtZWFzdXJlQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ucmVzZXQobmVzdGVkQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0gY29sdW1ucy5jb25jYXQoY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuZGltZW5zaW9uLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpYmxpbmcgPSB0aGlzLmNyZWF0ZUNvbHVtbkZvckRpbWVuc2lvbih2YWx1ZSwgZGF0YSwgcGFyZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaChzaWJsaW5nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZUNoaWxkcmVuID0gdGhpcy5nZXRNZWFzdXJlQ2hpbGRyZW4oZGF0YSwgc2libGluZywgZmFsc2UsIHZhbHVlLmRpbWVuc2lvbj8ud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2libGluZy5jaGlsZHJlbi5yZXNldChtZWFzdXJlQ2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KG1lYXN1cmVDaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5jaGlsZHJlbi5yZXNldChmaWx0ZXJlZENoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmRpbWVuc2lvbi5jaGlsZExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWJsaW5nID0gdGhpcy5jcmVhdGVDb2x1bW5Gb3JEaW1lbnNpb24odmFsdWUsIGRhdGEsIHBhcmVudCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHNpYmxpbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29sdW1ucztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ29sdW1uRm9yRGltZW5zaW9uKHZhbHVlOiBhbnksIGRhdGE6IGFueSwgcGFyZW50OiBDb2x1bW5UeXBlLCBpc0dyb3VwOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICBjb25zdCByZWYgPSBpc0dyb3VwID9cbiAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSkgOlxuICAgICAgICAgICAgY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkNvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgIHJlZi5pbnN0YW5jZS5oZWFkZXIgPSBwYXJlbnQgIT0gbnVsbCA/IGtleS5zcGxpdChwYXJlbnQuaGVhZGVyICsgdGhpcy5waXZvdEtleXMuY29sdW1uRGltZW5zaW9uU2VwYXJhdG9yKVsxXSA6IGtleTtcbiAgICAgICAgcmVmLmluc3RhbmNlLmZpZWxkID0ga2V5O1xuICAgICAgICByZWYuaW5zdGFuY2UucGFyZW50ID0gcGFyZW50O1xuICAgICAgICBpZiAodmFsdWUuZGltZW5zaW9uLndpZHRoKSB7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2Uud2lkdGggPSB2YWx1ZS5kaW1lbnNpb24ud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVEZWZpbml0aW9uID0gdGhpcy52YWx1ZXNbMF07XG4gICAgICAgIHJlZi5pbnN0YW5jZS5kYXRhVHlwZSA9IHZhbHVlRGVmaW5pdGlvbj8uZGF0YVR5cGUgfHwgdGhpcy5yZXNvbHZlRGF0YVR5cGVzKGRhdGFbMF1bdmFsdWVEZWZpbml0aW9uPy5tZW1iZXJdKTtcbiAgICAgICAgcmVmLmluc3RhbmNlLmZvcm1hdHRlciA9IHZhbHVlRGVmaW5pdGlvbj8uZm9ybWF0dGVyO1xuICAgICAgICByZWYuaW5zdGFuY2Uuc29ydGFibGUgPSB0cnVlO1xuICAgICAgICByZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICByZXR1cm4gcmVmLmluc3RhbmNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlQ29sdW1uRGltZW5zaW9uV2lkdGgoZGltOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgaWYgKGRpbS53aWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGRpbS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5taW5Db2x1bW5XaWR0aCArICdweCc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE1lYXN1cmVDaGlsZHJlbihkYXRhLCBwYXJlbnQsIGhpZGRlbiwgcGFyZW50V2lkdGgpIHtcbiAgICAgICAgY29uc3QgY29scyA9IFtdO1xuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMudmFsdWVzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY2hpbGRXaWR0aCA9IHBhcnNlSW50KHBhcmVudFdpZHRoLCAxMCkgLyBjb3VudDtcbiAgICAgICAgY29uc3QgaXNQZXJjZW50ID0gcGFyZW50V2lkdGggJiYgcGFyZW50V2lkdGguaW5kZXhPZignJScpICE9PSAtMTtcbiAgICAgICAgdGhpcy52YWx1ZXMuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkNvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyID0gdmFsLmRpc3BsYXlOYW1lIHx8IHZhbC5tZW1iZXI7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuZmllbGQgPSBwYXJlbnQuZmllbGQgKyB0aGlzLnBpdm90S2V5cy5jb2x1bW5EaW1lbnNpb25TZXBhcmF0b3IgKyB2YWwubWVtYmVyO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgIGlmIChwYXJlbnRXaWR0aCkge1xuICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS53aWR0aCA9IGlzUGVyY2VudCA/IGNoaWxkV2lkdGggKyAnJScgOiBjaGlsZFdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5oaWRkZW4gPSBoaWRkZW47XG4gICAgICAgICAgICByZWYuaW5zdGFuY2Uuc29ydGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmRhdGFUeXBlID0gdmFsLmRhdGFUeXBlIHx8IHRoaXMucmVzb2x2ZURhdGFUeXBlcyhkYXRhWzBdW3ZhbC5tZW1iZXJdKTtcbiAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5mb3JtYXR0ZXIgPSB2YWwuZm9ybWF0dGVyO1xuICAgICAgICAgICAgcmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGNvbHMucHVzaChyZWYuaW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICovXG4gICAgQFZpZXdDaGlsZCgnZW1wdHlQaXZvdEdyaWRUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkZWZhdWx0RW1wdHlQaXZvdEdyaWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyBhIGN1c3RvbSB0ZW1wbGF0ZSB3aGVuIHBpdm90IGdyaWQgaXMgZW1wdHkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXBpdm90LWdyaWQgW2VtcHR5UGl2b3RHcmlkVGVtcGxhdGVdPVwibXlUZW1wbGF0ZVwiPjxpZ3gtcGl2b3QtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlbXB0eVBpdm90R3JpZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx2b2lkPjtcblxuICAgIC8qKlxuICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgdGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIGNvbnN0IGFsbEVuYWJsZWREaW1lbnNpb25zID0gdGhpcy5yb3dEaW1lbnNpb25zLmNvbmNhdCh0aGlzLmNvbHVtbkRpbWVuc2lvbnMpO1xuICAgICAgICBpZiAoYWxsRW5hYmxlZERpbWVuc2lvbnMubGVuZ3RoID09PSAwICYmIHRoaXMudmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gbm8gZW5hYmxlZCB2YWx1ZXMgYW5kIGRpbWVuc2lvbnNcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5UGl2b3RHcmlkVGVtcGxhdGUgfHwgdGhpcy5kZWZhdWx0RW1wdHlQaXZvdEdyaWRUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci50ZW1wbGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRJbml0RXZlbnRzKHBpdm90Q29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBQaXZvdFV0aWwuZmxhdHRlbih0aGlzLmFsbERpbWVuc2lvbnMpO1xuICAgICAgICBkaW1lbnNpb25zLmZvckVhY2goZGltID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uSW5pdC5lbWl0KGRpbSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBwaXZvdENvbmZpZz8udmFsdWVzO1xuICAgICAgICB2YWx1ZXM/LmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVJbml0LmVtaXQodmFsKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPCEtLSBUb29sYmFyIGFyZWEgLS0+XG48bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtZ3JpZC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuXG48IS0tIEdyaWQgdGFibGUgaGVhZCByb3cgYXJlYSAtLT5cbjxpZ3gtcGl2b3QtaGVhZGVyLXJvdyBjbGFzcz1cImlneC1ncmlkLXRoZWFkIGlneC1ncmlkLXRoZWFkLS1waXZvdFwiIHRhYmluZGV4PVwiMFwiXG4gICAgW2dyaWRdPVwidGhpc1wiXG4gICAgW2hhc01STF09XCJoYXNDb2x1bW5MYXlvdXRzXCJcbiAgICBbZGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiXG4gICAgW2FjdGl2ZURlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiXG4gICAgW3dpZHRoXT1cImNhbGNXaWR0aFwiXG4gICAgW3Bpbm5lZENvbHVtbkNvbGxlY3Rpb25dPVwicGlubmVkQ29sdW1uc1wiXG4gICAgW3VucGlubmVkQ29sdW1uQ29sbGVjdGlvbl09XCJ1bnBpbm5lZENvbHVtbnNcIlxuICAgIChrZXlkb3duLm1ldGEuYyk9XCJjb3B5SGFuZGxlcigkZXZlbnQpXCJcbiAgICAoa2V5ZG93bi5jb250cm9sLmMpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKGNvcHkpPVwiY29weUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwibmF2aWdhdGlvbi5oZWFkZXJOYXZpZ2F0aW9uKCRldmVudClcIlxuICAgIChzY3JvbGwpPVwicHJldmVudEhlYWRlclNjcm9sbCgkZXZlbnQpXCJcbj5cbjwvaWd4LXBpdm90LWhlYWRlci1yb3c+XG5cbjxkaXYgaWd4R3JpZEJvZHkgKGtleWRvd24uY29udHJvbC5jKT1cImNvcHlIYW5kbGVyKCRldmVudClcIiAoY29weSk9XCJjb3B5SGFuZGxlcigkZXZlbnQpXCIgY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHlcIiByb2xlPVwicm93Z3JvdXBcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93RGltZW5zaW9ucy5sZW5ndGggPyBkZWZhdWx0Um93RGltZW5zaW9uc1RlbXBsYXRlIDogZW1wdHlSb3dEaW1lbnNpb25zVGVtcGxhdGU7IGNvbnRleHQ6IHRoaXNcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LWNvbnRlbnRcIiB0YWJpbmRleD1cIjBcIiBbYXR0ci5yb2xlXT1cImRhdGFWaWV3Lmxlbmd0aCA/IG51bGwgOiAncm93J1wiIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGFuZGxlTmF2aWdhdGlvbigkZXZlbnQpXCIgKGZvY3VzKT1cIm5hdmlnYXRpb24uZm9jdXNUYm9keSgkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdTdG9wKT1cInNlbGVjdGlvblNlcnZpY2UuZHJhZ01vZGUgPSAkZXZlbnRcIiAoc2Nyb2xsKT1cInByZXZlbnRDb250YWluZXJTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgIChkcmFnU2Nyb2xsKT1cImRyYWdTY3JvbGwoJGV2ZW50KVwiIFtpZ3hHcmlkRHJhZ1NlbGVjdF09XCJzZWxlY3Rpb25TZXJ2aWNlLmRyYWdNb2RlXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJ0b3RhbEhlaWdodFwiIFtzdHlsZS53aWR0aC5weF09XCJwaXZvdENvbnRlbnRDYWxjV2lkdGggfHwgbnVsbFwiICN0Ym9keSBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImhhc01vdmFibGVDb2x1bW5zICYmIGNvbHVtbkluRHJhZyAmJiBwaW5uZWRDb2x1bW5zLmxlbmd0aCA8PSAwXCJcbiAgICAgICAgICAgIFtpZ3hDb2x1bW5Nb3ZpbmdEcm9wXT1cImhlYWRlckNvbnRhaW5lclwiIFthdHRyLmRyb3BwYWJsZV09XCJ0cnVlXCIgaWQ9XCJsZWZ0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1vbi1kcmFnLWxlZnRcIj48L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzTW92YWJsZUNvbHVtbnMgJiYgY29sdW1uSW5EcmFnICYmIHBpbm5lZENvbHVtbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiIGlkPVwibGVmdFwiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtb24tZHJhZy1waW5uZWRcIiBbc3R5bGUubGVmdC5weF09XCJwaW5uZWRXaWR0aFwiPjwvc3Bhbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgbGV0LXJvd0RhdGEgW2lneEdyaWRGb3JPZl09XCJkYXRhXG4gICAgICAgIHwgcGl2b3RHcmlkRmlsdGVyOnBpdm90Q29uZmlndXJhdGlvbjpmaWx0ZXJTdHJhdGVneTphZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTpmaWx0ZXJpbmdQaXBlVHJpZ2dlcjpwaXBlVHJpZ2dlclxuICAgICAgICB8IHBpdm90R3JpZFNvcnQ6cGl2b3RDb25maWd1cmF0aW9uOnNvcnRTdHJhdGVneTpwaXBlVHJpZ2dlclxuICAgICAgICB8IHBpdm90R3JpZFJvdzpwaXZvdENvbmZpZ3VyYXRpb246cGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k6ZXhwYW5zaW9uU3RhdGVzOnBpcGVUcmlnZ2VyOnNvcnRpbmdFeHByZXNzaW9uc1xuICAgICAgICB8IHBpdm90R3JpZENvbHVtbjpwaXZvdENvbmZpZ3VyYXRpb246cGl2b3RWYWx1ZUNsb25lU3RyYXRlZ3k6ZXhwYW5zaW9uU3RhdGVzOnBpcGVUcmlnZ2VyOnNvcnRpbmdFeHByZXNzaW9uc1xuICAgICAgICB8IHBpdm90R3JpZEF1dG9UcmFuc2Zvcm06cGl2b3RDb25maWd1cmF0aW9uOnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgcGl2b3RHcmlkQ29sdW1uU29ydDpzb3J0aW5nRXhwcmVzc2lvbnM6c29ydFN0cmF0ZWd5OnBpcGVUcmlnZ2VyXG4gICAgICAgIHwgcGl2b3RHcmlkUm93RXhwYW5zaW9uOnBpdm90Q29uZmlndXJhdGlvbjpleHBhbnNpb25TdGF0ZXM6ZGVmYXVsdEV4cGFuZFN0YXRlOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgIGxldC1yb3dJbmRleD1cImluZGV4XCIgW2lneEZvclNjcm9sbE9yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIiBbaWd4Rm9yU2Nyb2xsQ29udGFpbmVyXT1cInZlcnRpY2FsU2Nyb2xsXCJcbiAgICAgICAgICAgIFtpZ3hGb3JDb250YWluZXJTaXplXT1cImNhbGNIZWlnaHRcIlxuICAgICAgICAgICAgW2lneEZvckl0ZW1TaXplXT1cImhhc0NvbHVtbkxheW91dHMgPyByb3dIZWlnaHQgKiBtdWx0aVJvd0xheW91dFJvd1NpemUgKyAxIDogcmVuZGVyZWRSb3dIZWlnaHRcIlxuICAgICAgICAgICAgW2lneEdyaWRGb3JPZlZhcmlhYmxlU2l6ZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgI3ZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW2lneFRlbXBsYXRlT3V0bGV0XT1cInJlY29yZFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbaWd4VGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENvbnRleHQocm93RGF0YSwgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoY2FjaGVkVmlld0xvYWRlZCk9XCJjYWNoZWRWaWV3TG9hZGVkKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVjb3JkX3RlbXBsYXRlIGxldC1yb3dJbmRleD1cImluZGV4XCIgbGV0LXJvd0RhdGE+XG4gICAgICAgICAgICA8aWd4LXBpdm90LXJvdyBbc3R5bGUuaGVpZ2h0LnB4XT1cInJlbmRlcmVkUm93SGVpZ2h0XCIgW2dyaWRJRF09XCJpZFwiIFtpbmRleF09XCJyb3dJbmRleFwiIFtkYXRhXT1cInJvd0RhdGFcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvd0NsYXNzZXMgfCBpZ3hHcmlkUm93Q2xhc3Nlczpyb3c6cm93LmluRWRpdE1vZGU6cm93LnNlbGVjdGVkOnJvdy5kaXJ0eTpyb3cuZGVsZXRlZDpyb3cuZHJhZ2dpbmc6cm93SW5kZXg6aGFzQ29sdW1uTGF5b3V0czpmYWxzZTpyb3dEYXRhOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJyb3dTdHlsZXMgfCBpZ3hHcmlkUm93U3R5bGVzOnJvd0RhdGE6cm93SW5kZXg6cGlwZVRyaWdnZXJcIiAjcm93PlxuICAgICAgICAgICAgPC9pZ3gtcGl2b3Qtcm93PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8aWdjLXRyaWFsLXdhdGVybWFyaz48L2lnYy10cmlhbC13YXRlcm1hcms+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZ3hUb2dnbGUgI2xvYWRpbmdPdmVybGF5PlxuICAgICAgICA8aWd4LWNpcmN1bGFyLWJhciBbaW5kZXRlcm1pbmF0ZV09XCJ0cnVlXCIgKm5nSWY9XCJzaG91bGRPdmVybGF5TG9hZGluZ1wiPlxuICAgICAgICA8L2lneC1jaXJjdWxhci1iYXI+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gKm5nSWY9XCJoYXNNb3ZhYmxlQ29sdW1ucyAmJiBjb2x1bW5JbkRyYWdcIiBbaWd4Q29sdW1uTW92aW5nRHJvcF09XCJoZWFkZXJDb250YWluZXJcIiBbYXR0ci5kcm9wcGFibGVdPVwidHJ1ZVwiXG4gICAgICAgIGlkPVwicmlnaHRcIiBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtb24tZHJhZy1yaWdodFwiPjwvc3Bhbj5cbiAgICA8ZGl2IFtoaWRkZW5dPVwiIWhhc1ZlcnRpY2FsU2Nyb2xsKClcIiBjbGFzcz1cImlneC1ncmlkX190Ym9keS1zY3JvbGxiYXJcIiBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsU2l6ZVwiIChwb2ludGVyZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXNjcm9sbGJhci1zdGFydFwiIFtzdHlsZS5oZWlnaHQucHhdPVwiIGlzUm93UGlubmluZ1RvVG9wID8gcGlubmVkUm93SGVpZ2h0IDogMFwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXNjcm9sbGJhci1tYWluXCIgW3N0eWxlLmhlaWdodC5weF09XCJjYWxjSGVpZ2h0XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgaWd4R3JpZEZvciBbaWd4R3JpZEZvck9mXT1cIltdXCIgI3ZlcnRpY2FsU2Nyb2xsSG9sZGVyPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXNjcm9sbGJhci1lbmRcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIiFpc1Jvd1Bpbm5pbmdUb1RvcCA/IHBpbm5lZFJvd0hlaWdodCA6IDBcIj48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtZ3JpZF9fYWRkcm93LXNuYWNrYmFyXCI+XG4gICAgICAgIDxpZ3gtc25hY2tiYXIgI2FkZFJvd1NuYWNrYmFyIFtvdXRsZXRdPVwiaWd4Qm9keU92ZXJsYXlPdXRsZXRcIiBbYWN0aW9uVGV4dF09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfc25hY2tiYXJfYWRkcm93X2FjdGlvbnRleHRcIiBbZGlzcGxheVRpbWVdPVwic25hY2tiYXJEaXNwbGF5VGltZVwiPnt7cmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3NuYWNrYmFyX2FkZHJvd19sYWJlbH19PC9pZ3gtc25hY2tiYXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICNpZ3hCb2R5T3ZlcmxheU91dGxldD1cIm92ZXJsYXktb3V0bGV0XCIgaWd4T3ZlcmxheU91dGxldD48L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbFwiIFtzdHlsZS5oZWlnaHQucHhdPVwic2Nyb2xsU2l6ZVwiICNzY3IgW2hpZGRlbl09XCJpc0hvcml6b250YWxTY3JvbGxIaWRkZW5cIiAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1zdGFydFwiIFtzdHlsZS53aWR0aC5weF09XCJwaXZvdFBpbm5lZFdpZHRoXCIgW3N0eWxlLm1pbi13aWR0aC5weF09XCJwaXZvdFBpbm5lZFdpZHRoXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlneC1ncmlkX19zY3JvbGwtbWFpblwiIFtzdHlsZS53aWR0aC5weF09XCJwaXZvdFVucGlubmVkV2lkdGhcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgW2lneEdyaWRGb3JPZl09XCJFTVBUWV9EQVRBXCIgI3Njcm9sbENvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3Njcm9sbC1lbmRcIiBbc3R5bGUud2lkdGgucHhdPVwicGl2b3RQaW5uZWRXaWR0aFwiIFtzdHlsZS5taW4td2lkdGgucHhdPVwicGl2b3RQaW5uZWRXaWR0aFwiIFtoaWRkZW5dPVwicGl2b3RQaW5uZWRXaWR0aCA9PT0gMCB8fCBpc1Bpbm5pbmdUb1N0YXJ0XCI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImlneC1ncmlkX190Zm9vdFwiIHJvbGU9XCJyb3dncm91cFwiICN0Zm9vdD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2Zvb3RlclwiICNmb290ZXI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWdyaWQtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlGaWx0ZXJlZEdyaWQ+XG4gICAgPHNwYW4gY2xhc3M9XCJpZ3gtZ3JpZF9fdGJvZHktbWVzc2FnZVwiIHJvbGU9XCJjZWxsXCI+XG4gICAgICAgIDxzcGFuPnt7ZW1wdHlGaWx0ZXJlZEdyaWRNZXNzYWdlfX08L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RW1wdHlHcmlkPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LW1lc3NhZ2VcIiByb2xlPVwiY2VsbFwiPlxuICAgICAgICA8c3Bhbj57e2VtcHR5R3JpZE1lc3NhZ2V9fTwvc3Bhbj5cbiAgICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nR3JpZD5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2xvYWRpbmdcIj5cbiAgICAgICAgPGlneC1jaXJjdWxhci1iYXIgW2luZGV0ZXJtaW5hdGVdPVwidHJ1ZVwiPlxuICAgICAgICA8L2lneC1jaXJjdWxhci1iYXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPGlneC1waXZvdC1ncmlkLWNvbHVtbi1yZXNpemVyIFtyZXN0cmljdFJlc2l6ZXJUb3BdPVwidGhlYWRSb3cubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHRcIiAqbmdJZj1cImNvbFJlc2l6aW5nU2VydmljZS5zaG93UmVzaXplclwiPjwvaWd4LXBpdm90LWdyaWQtY29sdW1uLXJlc2l6ZXI+XG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2xvYWRpbmctb3V0bGV0XCIgI2lneExvYWRpbmdPdmVybGF5T3V0bGV0IGlneE92ZXJsYXlPdXRsZXQ+PC9kaXY+XG48ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX291dGxldFwiICNpZ3hGaWx0ZXJpbmdPdmVybGF5T3V0bGV0IGlneE92ZXJsYXlPdXRsZXQ+PC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGUgbGV0LWNvbHVtbj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX3RyLS1oZWFkZXJcIj5cbiAgICAgICAgPGlneC1pY29uIFthdHRyLmRyYWdnYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29sdW1uKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgIHt7Z2V0Q29sdW1uR3JvdXBFeHBhbmRTdGF0ZShjb2x1bW4pID8gXCJjaGV2cm9uX3JpZ2h0XCIgOiBcImV4cGFuZF9tb3JlXCJ9fTwvaWd4LWljb24+XG4gICAgICAgIHt7Y29sdW1uLmhlYWRlcn19XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRSb3dEaW1lbnNpb25zVGVtcGxhdGU+XG4gICAgPGRpdiB0YWJpbmRleD1cIjBcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cInRvdGFsSGVpZ2h0XCIgKm5nRm9yPVwibGV0IGRpbSBvZiByb3dEaW1lbnNpb25zOyBsZXQgZGltSW5kZXggPSBpbmRleDtcIiAjcm93RGltZW5zaW9uQ29udGFpbmVyIHJvbGU9XCJyb3dncm91cFwiIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXBpdm90LWRpbWVuc2lvblwiIChmb2N1cyk9XCJuYXZpZ2F0aW9uLmZvY3VzVGJvZHkoJGV2ZW50KVwiIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGFuZGxlTmF2aWdhdGlvbigkZXZlbnQpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBpZ3hHcmlkRm9yIGxldC1yb3dEYXRhIFtpZ3hHcmlkRm9yT2ZdPVwiZGF0YVZpZXdcbiAgICAgICAgfCBwaXZvdEdyaWRDZWxsTWVyZ2luZzpwaXZvdENvbmZpZ3VyYXRpb246ZGltOnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgIGxldC1yb3dJbmRleD1cImluZGV4XCIgW2lneEZvclNjcm9sbE9yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIiBbaWd4Rm9yU2Nyb2xsQ29udGFpbmVyXT1cInZlcnRpY2FsU2Nyb2xsXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpZ3hGb3JDb250YWluZXJTaXplXT1cImNhbGNIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgW2lneEZvckl0ZW1TaXplXT1cInJlbmRlcmVkUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgIFtpZ3hGb3JTaXplUHJvcE5hbWVdPVwiJ2hlaWdodCdcIlxuICAgICAgICAgICAgICAgICAgICAgI3ZlcnRpY2FsUm93RGltU2Nyb2xsQ29udGFpbmVyPlxuICAgICAgICAgICAgPGlneC1waXZvdC1yb3ctZGltZW5zaW9uLWNvbnRlbnQgcm9sZT1cInJvd1wiIGNsYXNzPVwiaWd4LWdyaWQtdGhlYWRcIiBbZ3JpZF09XCJ0aGlzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaW1lbnNpb25dPVwicm93RGF0YS5kaW1lbnNpb25zW2RpbUluZGV4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm9vdERpbWVuc2lvbl09XCJkaW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyZW5kZXJlZFJvd0hlaWdodCAqIChyb3dEYXRhLnJvd1NwYW4gfHwgMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCIgW3Jvd0RhdGFdPVwicm93RGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiIFt3aWR0aF09XCJyb3dEaW1lbnNpb25XaWR0aFRvUGl4ZWxzKGRpbSlcIj5cbiAgICAgICAgICAgIDwvaWd4LXBpdm90LXJvdy1kaW1lbnNpb24tY29udGVudD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2VtcHR5Um93RGltZW5zaW9uc1RlbXBsYXRlPlxuICAgIDxkaXYgdGFiaW5kZXg9XCIwXCIgKm5nSWY9XCJjb2x1bW5EaW1lbnNpb25zLmxlbmd0aCA+IDAgfHwgdmFsdWVzLmxlbmd0aCA+IDBcIiAjcm93RGltZW5zaW9uQ29udGFpbmVyIHJvbGU9XCJyb3dncm91cFwiIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LXBpdm90LWRpbWVuc2lvblwiIChmb2N1cyk9XCJuYXZpZ2F0aW9uLmZvY3VzVGJvZHkoJGV2ZW50KVwiIChrZXlkb3duKT1cIm5hdmlnYXRpb24uaGFuZGxlTmF2aWdhdGlvbigkZXZlbnQpXCI+XG4gICAgICAgIDxpZ3gtcGl2b3Qtcm93LWRpbWVuc2lvbi1jb250ZW50IHJvbGU9XCJyb3dcIiBjbGFzcz1cImlneC1ncmlkLXRoZWFkXCIgW2dyaWRdPVwidGhpc1wiXG4gICAgICAgICAgICBbZGltZW5zaW9uXT1cImVtcHR5Um93RGltZW5zaW9uXCJcbiAgICAgICAgICAgIFtyb290RGltZW5zaW9uXT1cImVtcHR5Um93RGltZW5zaW9uXCJcbiAgICAgICAgICAgIFtyb3dJbmRleF09XCIwXCIgW3Jvd0RhdGFdPVwiZGF0YVZpZXdbMF1cIlxuICAgICAgICAgICAgW2RlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIiBbd2lkdGhdPVwicm93RGltZW5zaW9uV2lkdGhUb1BpeGVscyhlbXB0eVJvd0RpbWVuc2lvbilcIj5cbiAgICAgICAgPC9pZ3gtcGl2b3Qtcm93LWRpbWVuc2lvbi1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVBpdm90R3JpZFRlbXBsYXRlPlxuICAgIDxzcGFuIGNsYXNzPVwiaWd4LWdyaWRfX3Rib2R5LW1lc3NhZ2VcIiByb2xlPVwiY2VsbFwiPlxuICAgICAgICA8c3Bhbj57e3Jlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9waXZvdF9lbXB0eV9tZXNzYWdlfX08L3NwYW4+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBbaGlkZGVuXT1cInRydWVcIj5cbiAgICA8aWd4LWdyaWQtZXhjZWwtc3R5bGUtZmlsdGVyaW5nIFttYXhIZWlnaHRdPVwiZXhjZWxTdHlsZUZpbHRlck1heEhlaWdodFwiIFttaW5IZWlnaHRdPVwiZXhjZWxTdHlsZUZpbHRlck1pbkhlaWdodFwiPlxuICAgICAgICA8ZGl2IGlneEV4Y2VsU3R5bGVDb2x1bW5PcGVyYXRpb25zIFtoaWRkZW5dPVwidHJ1ZVwiPjwvZGl2PlxuICAgICAgICA8aWd4LWV4Y2VsLXN0eWxlLWZpbHRlci1vcGVyYXRpb25zPlxuICAgICAgICAgICAgPGlneC1leGNlbC1zdHlsZS1zZWFyY2g+PC9pZ3gtZXhjZWwtc3R5bGUtc2VhcmNoPlxuICAgICAgICA8L2lneC1leGNlbC1zdHlsZS1maWx0ZXItb3BlcmF0aW9ucz5cbiAgICA8L2lneC1ncmlkLWV4Y2VsLXN0eWxlLWZpbHRlcmluZz5cbjwvZGl2PlxuIl19