@dereekb/dbx-web 11.1.7 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (742) hide show
  1. package/calendar/lib/calendar.base.component.d.ts +10 -1
  2. package/calendar/lib/calendar.component.d.ts +8 -5
  3. package/calendar/lib/calendar.module.d.ts +4 -16
  4. package/calendar/lib/calendar.provider.d.ts +5 -0
  5. package/calendar/lib/calendar.store.d.ts +13 -9
  6. package/calendar/lib/index.d.ts +1 -0
  7. package/esm2022/calendar/lib/calendar.base.component.mjs +26 -12
  8. package/esm2022/calendar/lib/calendar.component.mjs +19 -17
  9. package/esm2022/calendar/lib/calendar.mjs +1 -1
  10. package/esm2022/calendar/lib/calendar.module.mjs +10 -76
  11. package/esm2022/calendar/lib/calendar.provider.mjs +11 -0
  12. package/esm2022/calendar/lib/calendar.store.mjs +19 -19
  13. package/esm2022/calendar/lib/index.mjs +2 -1
  14. package/esm2022/lib/action/action.confirm.directive.mjs +10 -12
  15. package/esm2022/lib/action/action.module.mjs +12 -16
  16. package/esm2022/lib/action/key.trigger.directive.mjs +6 -5
  17. package/esm2022/lib/action/snackbar/action.snackbar.component.mjs +29 -36
  18. package/esm2022/lib/action/snackbar/action.snackbar.directive.mjs +14 -27
  19. package/esm2022/lib/action/snackbar/action.snackbar.generator.mjs +1 -1
  20. package/esm2022/lib/action/snackbar/action.snackbar.module.mjs +8 -14
  21. package/esm2022/lib/action/snackbar/action.snackbar.service.mjs +4 -4
  22. package/esm2022/lib/action/transition/action.transition.module.mjs +14 -13
  23. package/esm2022/lib/action/transition/transition.safety.dialog.component.mjs +18 -24
  24. package/esm2022/lib/action/transition/transition.safety.directive.mjs +30 -33
  25. package/esm2022/lib/button/button.component.mjs +71 -104
  26. package/esm2022/lib/button/button.module.mjs +44 -12
  27. package/esm2022/lib/button/button.spacer.directive.mjs +20 -0
  28. package/esm2022/lib/button/icon/icon.button.component.mjs +48 -32
  29. package/esm2022/lib/button/icon/icon.button.module.mjs +10 -24
  30. package/esm2022/lib/button/index.mjs +2 -2
  31. package/esm2022/lib/button/progress/abstract.progress.button.directive.mjs +103 -0
  32. package/esm2022/lib/button/progress/bar.button.component.mjs +15 -11
  33. package/esm2022/lib/button/progress/button.progress.config.mjs +2 -2
  34. package/esm2022/lib/button/progress/button.progress.module.mjs +13 -28
  35. package/esm2022/lib/button/progress/button.progress.providers.mjs +18 -0
  36. package/esm2022/lib/button/progress/index.mjs +2 -1
  37. package/esm2022/lib/button/progress/spinner.button.component.mjs +66 -38
  38. package/esm2022/lib/dbx-web.module.mjs +4 -4
  39. package/esm2022/lib/error/default.error.widget.component.mjs +22 -15
  40. package/esm2022/lib/error/error.action.directive.mjs +9 -8
  41. package/esm2022/lib/error/error.api.mjs +1 -1
  42. package/esm2022/lib/error/error.component.mjs +56 -94
  43. package/esm2022/lib/error/error.details.component.mjs +15 -14
  44. package/esm2022/lib/error/error.loading.directive.mjs +20 -20
  45. package/esm2022/lib/error/error.module.mjs +21 -18
  46. package/esm2022/lib/error/error.popover.component.mjs +14 -17
  47. package/esm2022/lib/error/error.snackbar.action.directive.mjs +6 -5
  48. package/esm2022/lib/error/error.snackbar.component.mjs +57 -39
  49. package/esm2022/lib/error/error.snackbar.service.mjs +11 -10
  50. package/esm2022/lib/error/error.view.component.mjs +40 -33
  51. package/esm2022/lib/error/error.widget.component.mjs +19 -25
  52. package/esm2022/lib/error/error.widget.directive.mjs +3 -3
  53. package/esm2022/lib/error/error.widget.service.mjs +7 -7
  54. package/esm2022/lib/error/state.mjs +1 -1
  55. package/esm2022/lib/extension/download/text/download.text.component.mjs +46 -56
  56. package/esm2022/lib/extension/download/text/download.text.module.mjs +11 -33
  57. package/esm2022/lib/extension/model/index.mjs +2 -2
  58. package/esm2022/lib/extension/model/model.providers.mjs +42 -0
  59. package/esm2022/lib/extension/model/model.state.service.mjs +5 -8
  60. package/esm2022/lib/extension/model/model.tracker.mjs +1 -1
  61. package/esm2022/lib/extension/model/model.tracker.service.mjs +5 -8
  62. package/esm2022/lib/extension/model/model.tracker.view.storage.mjs +8 -8
  63. package/esm2022/lib/extension/model/model.types.mjs +1 -1
  64. package/esm2022/lib/extension/model/model.types.service.mjs +5 -5
  65. package/esm2022/lib/extension/model/state/actions/model.actions.mjs +1 -1
  66. package/esm2022/lib/extension/model/state/effects/tracker.effects.mjs +3 -3
  67. package/esm2022/lib/extension/structure/structure.body.directive.mjs +6 -5
  68. package/esm2022/lib/extension/structure/structure.module.mjs +11 -17
  69. package/esm2022/lib/extension/structure/structure.structure.directive.mjs +10 -6
  70. package/esm2022/lib/extension/widget/widget.component.mjs +32 -37
  71. package/esm2022/lib/extension/widget/widget.directive.mjs +3 -3
  72. package/esm2022/lib/extension/widget/widget.list.component.mjs +31 -20
  73. package/esm2022/lib/extension/widget/widget.module.mjs +15 -24
  74. package/esm2022/lib/extension/widget/widget.service.mjs +4 -4
  75. package/esm2022/lib/index.mjs +2 -2
  76. package/esm2022/lib/interaction/dialog/abstract.dialog.directive.mjs +3 -3
  77. package/esm2022/lib/interaction/dialog/dialog.action.directive.mjs +19 -23
  78. package/esm2022/lib/interaction/dialog/dialog.content.close.component.mjs +23 -22
  79. package/esm2022/lib/interaction/dialog/dialog.content.directive.mjs +23 -0
  80. package/esm2022/lib/interaction/dialog/dialog.content.footer.component.mjs +21 -29
  81. package/esm2022/lib/interaction/dialog/dialog.module.mjs +9 -16
  82. package/esm2022/lib/interaction/dialog/index.mjs +2 -2
  83. package/esm2022/lib/interaction/filter/filter.config.mjs +2 -0
  84. package/esm2022/lib/interaction/filter/filter.menu.mjs +1 -1
  85. package/esm2022/lib/interaction/filter/filter.module.mjs +9 -54
  86. package/esm2022/lib/interaction/filter/filter.partial.list.component.mjs +13 -11
  87. package/esm2022/lib/interaction/filter/filter.partial.menu.component.mjs +22 -29
  88. package/esm2022/lib/interaction/filter/filter.partial.mjs +13 -24
  89. package/esm2022/lib/interaction/filter/filter.popover.button.component.mjs +17 -31
  90. package/esm2022/lib/interaction/filter/filter.popover.button.directive.mjs +10 -12
  91. package/esm2022/lib/interaction/filter/filter.popover.component.mjs +25 -30
  92. package/esm2022/lib/interaction/filter/filter.preset.directive.mjs +17 -29
  93. package/esm2022/lib/interaction/filter/filter.preset.list.component.mjs +13 -11
  94. package/esm2022/lib/interaction/filter/filter.preset.menu.component.mjs +22 -29
  95. package/esm2022/lib/interaction/filter/filter.wrapper.component.mjs +23 -29
  96. package/esm2022/lib/interaction/filter/index.mjs +2 -1
  97. package/esm2022/lib/interaction/interaction.module.mjs +17 -6
  98. package/esm2022/lib/interaction/popover/abstract.popover.directive.mjs +3 -3
  99. package/esm2022/lib/interaction/popover/abstract.popover.ref.directive.mjs +13 -22
  100. package/esm2022/lib/interaction/popover/index.mjs +2 -2
  101. package/esm2022/lib/interaction/popover/popover.action.directive.mjs +20 -23
  102. package/esm2022/lib/interaction/popover/popover.close.component.mjs +12 -8
  103. package/esm2022/lib/interaction/popover/popover.component.mjs +15 -13
  104. package/esm2022/lib/interaction/popover/popover.content.component.mjs +20 -13
  105. package/esm2022/lib/interaction/popover/popover.content.module.mjs +9 -19
  106. package/esm2022/lib/interaction/popover/popover.controls.directive.mjs +7 -6
  107. package/esm2022/lib/interaction/popover/popover.coordinator.component.mjs +17 -15
  108. package/esm2022/lib/interaction/popover/popover.coordinator.service.mjs +4 -4
  109. package/esm2022/lib/interaction/popover/popover.header.component.mjs +25 -22
  110. package/esm2022/lib/interaction/popover/popover.module.mjs +8 -18
  111. package/esm2022/lib/interaction/popover/popover.scroll.content.directive.mjs +41 -0
  112. package/esm2022/lib/interaction/popover/popover.service.mjs +4 -4
  113. package/esm2022/lib/interaction/popup/abstract.popup.directive.mjs +3 -3
  114. package/esm2022/lib/interaction/popup/popup.component.mjs +20 -23
  115. package/esm2022/lib/interaction/popup/popup.content.component.mjs +21 -14
  116. package/esm2022/lib/interaction/popup/popup.controls.buttons.component.mjs +49 -26
  117. package/esm2022/lib/interaction/popup/popup.controls.component.mjs +15 -14
  118. package/esm2022/lib/interaction/popup/popup.coordinator.component.mjs +15 -12
  119. package/esm2022/lib/interaction/popup/popup.coordinator.service.mjs +4 -4
  120. package/esm2022/lib/interaction/popup/popup.mjs +6 -7
  121. package/esm2022/lib/interaction/popup/popup.module.mjs +8 -19
  122. package/esm2022/lib/interaction/popup/popup.position.strategy.mjs +1 -1
  123. package/esm2022/lib/interaction/popup/popup.service.mjs +8 -5
  124. package/esm2022/lib/interaction/prompt/index.mjs +2 -2
  125. package/esm2022/lib/interaction/prompt/prompt.box.directive.mjs +19 -0
  126. package/esm2022/lib/interaction/prompt/prompt.button.confirm.directive.mjs +6 -5
  127. package/esm2022/lib/interaction/prompt/prompt.component.mjs +16 -17
  128. package/esm2022/lib/interaction/prompt/prompt.confirm.component.mjs +35 -35
  129. package/esm2022/lib/interaction/prompt/prompt.confirm.dialog.component.mjs +14 -13
  130. package/esm2022/lib/interaction/prompt/prompt.confirm.directive.mjs +28 -23
  131. package/esm2022/lib/interaction/prompt/prompt.module.mjs +9 -18
  132. package/esm2022/lib/interaction/prompt/prompt.page.component.mjs +11 -8
  133. package/esm2022/lib/keypress/keydown.listener.directive.mjs +6 -5
  134. package/esm2022/lib/keypress/keypress.module.mjs +9 -8
  135. package/esm2022/lib/layout/bar/bar.directive.mjs +14 -11
  136. package/esm2022/lib/layout/bar/bar.header.component.mjs +31 -26
  137. package/esm2022/lib/layout/bar/bar.layout.module.mjs +9 -12
  138. package/esm2022/lib/layout/bar/pagebar.component.mjs +33 -12
  139. package/esm2022/lib/layout/block/block.layout.module.mjs +10 -12
  140. package/esm2022/lib/layout/block/two.block.component.mjs +25 -32
  141. package/esm2022/lib/layout/card/card.box.component.mjs +27 -20
  142. package/esm2022/lib/layout/card/card.box.container.directive.mjs +20 -0
  143. package/esm2022/lib/layout/card/card.box.layout.module.mjs +10 -12
  144. package/esm2022/lib/layout/card/index.mjs +2 -2
  145. package/esm2022/lib/layout/column/column.layout.module.mjs +9 -7
  146. package/esm2022/lib/layout/column/one/one.column.component.mjs +16 -15
  147. package/esm2022/lib/layout/column/one/one.column.module.mjs +9 -9
  148. package/esm2022/lib/layout/column/two/index.mjs +2 -2
  149. package/esm2022/lib/layout/column/two/two.column.back.directive.mjs +10 -12
  150. package/esm2022/lib/layout/column/two/two.column.component.mjs +77 -51
  151. package/esm2022/lib/layout/column/two/two.column.context.directive.mjs +14 -21
  152. package/esm2022/lib/layout/column/two/two.column.full.left.directive.mjs +13 -28
  153. package/esm2022/lib/layout/column/two/two.column.head.directive.mjs +24 -0
  154. package/esm2022/lib/layout/column/two/two.column.module.mjs +9 -15
  155. package/esm2022/lib/layout/column/two/two.column.right.component.mjs +90 -49
  156. package/esm2022/lib/layout/column/two/two.column.sref.directive.mjs +13 -13
  157. package/esm2022/lib/layout/column/two/two.column.sref.showright.directive.mjs +9 -7
  158. package/esm2022/lib/layout/column/two/two.column.store.mjs +15 -11
  159. package/esm2022/lib/layout/compact/compact.directive.mjs +3 -3
  160. package/esm2022/lib/layout/compact/compact.layout.module.mjs +4 -4
  161. package/esm2022/lib/layout/compact/compact.mjs +1 -1
  162. package/esm2022/lib/layout/compact/compact.store.mjs +4 -4
  163. package/esm2022/lib/layout/content/content.border.directive.mjs +11 -11
  164. package/esm2022/lib/layout/content/content.box.directive.mjs +12 -15
  165. package/esm2022/lib/layout/content/content.container.directive.mjs +16 -17
  166. package/esm2022/lib/layout/content/content.directive.mjs +6 -5
  167. package/esm2022/lib/layout/content/content.elevate.directive.mjs +10 -11
  168. package/esm2022/lib/layout/content/content.layout.module.mjs +9 -11
  169. package/esm2022/lib/layout/content/content.page.directive.mjs +6 -5
  170. package/esm2022/lib/layout/content/content.pit.directive.mjs +10 -11
  171. package/esm2022/lib/layout/flag/flag.component.mjs +15 -14
  172. package/esm2022/lib/layout/flag/flag.layout.module.mjs +8 -13
  173. package/esm2022/lib/layout/flag/flag.prompt.component.mjs +18 -20
  174. package/esm2022/lib/layout/flex/flex.group.directive.mjs +21 -47
  175. package/esm2022/lib/layout/flex/flex.layout.module.mjs +11 -9
  176. package/esm2022/lib/layout/flex/flex.size.directive.mjs +11 -12
  177. package/esm2022/lib/layout/item/index.mjs +1 -2
  178. package/esm2022/lib/layout/item/item.icon.component.mjs +31 -24
  179. package/esm2022/lib/layout/layout.module.mjs +6 -8
  180. package/esm2022/lib/layout/list/grid/index.mjs +3 -0
  181. package/esm2022/lib/layout/list/grid/list.grid.view.component.mjs +98 -0
  182. package/esm2022/lib/layout/list/grid/list.grid.view.directive.mjs +34 -0
  183. package/esm2022/lib/layout/list/group/index.mjs +4 -0
  184. package/esm2022/lib/layout/list/group/list.view.value.group.mjs +32 -0
  185. package/esm2022/lib/layout/list/group/list.view.value.group.title.directive.mjs +70 -0
  186. package/esm2022/lib/layout/list/group/list.view.value.group.title.header.component.mjs +60 -0
  187. package/esm2022/lib/layout/list/group/list.view.value.group.title.mjs +2 -0
  188. package/esm2022/lib/layout/list/index.mjs +6 -10
  189. package/esm2022/lib/layout/list/list.component.mjs +109 -135
  190. package/esm2022/lib/layout/list/list.content.empty.component.mjs +9 -7
  191. package/esm2022/lib/layout/list/list.directive.mjs +70 -56
  192. package/esm2022/lib/layout/list/list.layout.module.mjs +59 -49
  193. package/esm2022/lib/layout/list/list.module.mjs +40 -0
  194. package/esm2022/lib/layout/list/list.view.directive.mjs +35 -28
  195. package/esm2022/lib/layout/list/list.view.mjs +1 -1
  196. package/esm2022/lib/layout/list/list.view.selection.directive.mjs +26 -10
  197. package/esm2022/lib/layout/list/list.view.value.component.mjs +135 -143
  198. package/esm2022/lib/layout/list/list.view.value.directive.mjs +12 -18
  199. package/esm2022/lib/layout/list/list.view.value.item.directive.mjs +3 -3
  200. package/esm2022/lib/layout/list/list.view.value.mjs +1 -1
  201. package/esm2022/lib/layout/list/list.view.value.modifier.mjs +1 -1
  202. package/esm2022/lib/layout/list/list.view.value.selection.component.mjs +80 -68
  203. package/esm2022/lib/layout/list/list.wrapper.mjs +1 -3
  204. package/esm2022/lib/layout/list/meta/index.mjs +2 -0
  205. package/esm2022/lib/layout/list/meta/list.view.meta.icon.component.mjs +39 -0
  206. package/esm2022/lib/layout/list/modifier/index.mjs +5 -0
  207. package/esm2022/lib/layout/list/modifier/list.modifier.module.mjs +22 -0
  208. package/esm2022/lib/layout/list/modifier/list.view.value.modifier.directive.mjs +75 -0
  209. package/esm2022/lib/layout/list/modifier/list.view.value.modifier.ripple.directive.mjs +37 -0
  210. package/esm2022/lib/layout/list/modifier/list.view.value.modifier.selection.directive.mjs +35 -0
  211. package/esm2022/lib/layout/section/section.component.mjs +18 -15
  212. package/esm2022/lib/layout/section/section.header.component.mjs +123 -106
  213. package/esm2022/lib/layout/section/section.intro.component.mjs +53 -51
  214. package/esm2022/lib/layout/section/section.layout.module.mjs +9 -15
  215. package/esm2022/lib/layout/section/section.mjs +1 -1
  216. package/esm2022/lib/layout/section/section.page.component.mjs +22 -18
  217. package/esm2022/lib/layout/section/subsection.component.mjs +13 -10
  218. package/esm2022/lib/layout/step/step.component.mjs +56 -21
  219. package/esm2022/lib/layout/step/step.layout.module.mjs +11 -10
  220. package/esm2022/lib/layout/style/index.mjs +2 -1
  221. package/esm2022/lib/layout/style/spacer.directive.mjs +6 -5
  222. package/esm2022/lib/layout/style/style.body.directive.mjs +22 -17
  223. package/esm2022/lib/layout/style/style.color.directive.mjs +11 -14
  224. package/esm2022/lib/layout/style/style.directive.mjs +13 -17
  225. package/esm2022/lib/layout/style/style.layout.module.mjs +8 -10
  226. package/esm2022/lib/layout/style/style.mjs +4 -1
  227. package/esm2022/lib/layout/style/style.providers.mjs +21 -0
  228. package/esm2022/lib/layout/style/style.service.mjs +54 -32
  229. package/esm2022/lib/layout/style/style.set.directive.mjs +31 -47
  230. package/esm2022/lib/layout/text/address.component.mjs +43 -22
  231. package/esm2022/lib/layout/text/compat/form.description.component.mjs +3 -3
  232. package/esm2022/lib/layout/text/compat/hint.component.mjs +3 -3
  233. package/esm2022/lib/layout/text/compat/label.component.mjs +3 -3
  234. package/esm2022/lib/layout/text/compat/note.component.mjs +3 -3
  235. package/esm2022/lib/layout/text/compat/notice.component.mjs +3 -3
  236. package/esm2022/lib/layout/text/compat/ok.component.mjs +3 -3
  237. package/esm2022/lib/layout/text/compat/success.component.mjs +3 -3
  238. package/esm2022/lib/layout/text/compat/text.compat.module.mjs +4 -4
  239. package/esm2022/lib/layout/text/compat/warn.component.mjs +3 -3
  240. package/esm2022/lib/layout/text/detail.block.component.mjs +11 -8
  241. package/esm2022/lib/layout/text/detail.block.header.component.mjs +24 -13
  242. package/esm2022/lib/layout/text/icon.spacer.component.mjs +6 -5
  243. package/esm2022/lib/layout/text/label.block.component.mjs +9 -7
  244. package/esm2022/lib/layout/text/linkify.component.mjs +13 -10
  245. package/esm2022/lib/layout/text/text.chip.directive.mjs +6 -5
  246. package/esm2022/lib/layout/text/text.chips.component.mjs +34 -29
  247. package/esm2022/lib/layout/text/text.module.mjs +8 -13
  248. package/esm2022/lib/loading/basic-loading.component.mjs +31 -97
  249. package/esm2022/lib/loading/loading-progress.component.mjs +47 -54
  250. package/esm2022/lib/loading/loading.action.directive.mjs +9 -11
  251. package/esm2022/lib/loading/loading.component.mjs +60 -81
  252. package/esm2022/lib/loading/loading.module.mjs +8 -13
  253. package/esm2022/lib/router/layout/anchor/anchor.component.mjs +86 -36
  254. package/esm2022/lib/router/layout/anchor/anchor.content.component.mjs +26 -14
  255. package/esm2022/lib/router/layout/anchor/anchor.icon.component.mjs +10 -6
  256. package/esm2022/lib/router/layout/anchor/anchor.link.component.mjs +9 -7
  257. package/esm2022/lib/router/layout/anchor/anchor.module.mjs +17 -13
  258. package/esm2022/lib/router/layout/anchor/anchor.segue.directive.mjs +11 -13
  259. package/esm2022/lib/router/layout/anchorlist/anchorlist.component.mjs +22 -28
  260. package/esm2022/lib/router/layout/anchorlist/anchorlist.module.mjs +9 -15
  261. package/esm2022/lib/router/layout/layout.module.mjs +4 -4
  262. package/esm2022/lib/router/layout/list/list.module.mjs +9 -7
  263. package/esm2022/lib/router/layout/list/router.list.directive.mjs +16 -20
  264. package/esm2022/lib/router/layout/navbar/navbar.component.mjs +41 -87
  265. package/esm2022/lib/router/layout/navbar/navbar.module.mjs +9 -43
  266. package/esm2022/lib/router/layout/sidenav/sidenav.button.component.mjs +28 -24
  267. package/esm2022/lib/router/layout/sidenav/sidenav.component.mjs +91 -71
  268. package/esm2022/lib/router/layout/sidenav/sidenav.ifdisplaymode.directive.mjs +18 -23
  269. package/esm2022/lib/router/layout/sidenav/sidenav.module.mjs +8 -22
  270. package/esm2022/lib/router/layout/sidenav/sidenav.page.component.mjs +37 -46
  271. package/esm2022/lib/router/layout/sidenav/sidenav.pagebar.component.mjs +18 -18
  272. package/esm2022/lib/router/provider/ngrouter/anchor.component.mjs +6 -7
  273. package/esm2022/lib/router/provider/ngrouter/angular.router.providers.mjs +23 -0
  274. package/esm2022/lib/router/provider/ngrouter/index.mjs +2 -2
  275. package/esm2022/lib/router/provider/router.provider.config.mjs +8 -1
  276. package/esm2022/lib/router/provider/uirouter/anchor.component.mjs +14 -12
  277. package/esm2022/lib/router/provider/uirouter/index.mjs +2 -2
  278. package/esm2022/lib/router/provider/uirouter/uirouter.router.providers.mjs +23 -0
  279. package/esm2022/lib/screen/index.mjs +2 -2
  280. package/esm2022/lib/screen/screen.providers.mjs +22 -0
  281. package/esm2022/lib/screen/screen.service.mjs +6 -6
  282. package/esm2022/lib/util/cdk.mjs +1 -1
  283. package/esm2022/mapbox/lib/index.mjs +3 -2
  284. package/esm2022/mapbox/lib/mapbox.change.service.mjs +4 -4
  285. package/esm2022/mapbox/lib/mapbox.injection.component.mjs +13 -12
  286. package/esm2022/mapbox/lib/mapbox.injection.store.mjs +5 -5
  287. package/esm2022/mapbox/lib/mapbox.injection.store.provide.mjs +9 -8
  288. package/esm2022/mapbox/lib/mapbox.layout.component.mjs +93 -117
  289. package/esm2022/mapbox/lib/mapbox.layout.drawer.component.mjs +8 -8
  290. package/esm2022/mapbox/lib/mapbox.layout.resize.sync.directive.mjs +9 -8
  291. package/esm2022/mapbox/lib/mapbox.marker.component.mjs +69 -72
  292. package/esm2022/mapbox/lib/mapbox.marker.mjs +2 -2
  293. package/esm2022/mapbox/lib/mapbox.markers.component.mjs +22 -36
  294. package/esm2022/mapbox/lib/mapbox.menu.component.mjs +33 -31
  295. package/esm2022/mapbox/lib/mapbox.mjs +1 -1
  296. package/esm2022/mapbox/lib/mapbox.module.mjs +24 -61
  297. package/esm2022/mapbox/lib/mapbox.options.mjs +2 -0
  298. package/esm2022/mapbox/lib/mapbox.providers.mjs +25 -0
  299. package/esm2022/mapbox/lib/mapbox.rxjs.mjs +1 -1
  300. package/esm2022/mapbox/lib/mapbox.service.mjs +5 -8
  301. package/esm2022/mapbox/lib/mapbox.store.map.directive.mjs +7 -6
  302. package/esm2022/mapbox/lib/mapbox.store.mjs +39 -15
  303. package/esm2022/mapbox/lib/mapbox.store.provide.mjs +9 -8
  304. package/esm2022/table/lib/date/date.table.column.header.component.mjs +27 -21
  305. package/esm2022/table/lib/date/daterange.table.cell.input.component.mjs +39 -46
  306. package/esm2022/table/lib/date/table.date.module.mjs +8 -58
  307. package/esm2022/table/lib/table.cell.action.component.mjs +13 -10
  308. package/esm2022/table/lib/table.cell.input.component.mjs +13 -10
  309. package/esm2022/table/lib/table.cell.summaryend.component.mjs +13 -10
  310. package/esm2022/table/lib/table.cell.summarystart.component.mjs +13 -10
  311. package/esm2022/table/lib/table.column.directive.mjs +10 -17
  312. package/esm2022/table/lib/table.column.footer.component.mjs +13 -10
  313. package/esm2022/table/lib/table.column.header.component.mjs +13 -10
  314. package/esm2022/table/lib/table.component.mjs +31 -24
  315. package/esm2022/table/lib/table.directive.mjs +16 -22
  316. package/esm2022/table/lib/table.item.action.component.mjs +20 -17
  317. package/esm2022/table/lib/table.item.cell.component.mjs +19 -26
  318. package/esm2022/table/lib/table.item.directive.mjs +10 -17
  319. package/esm2022/table/lib/table.item.header.component.mjs +15 -11
  320. package/esm2022/table/lib/table.module.mjs +11 -55
  321. package/esm2022/table/lib/table.store.mjs +8 -8
  322. package/fesm2022/dereekb-dbx-web-calendar.mjs +69 -110
  323. package/fesm2022/dereekb-dbx-web-calendar.mjs.map +1 -1
  324. package/fesm2022/dereekb-dbx-web-mapbox.mjs +340 -365
  325. package/fesm2022/dereekb-dbx-web-mapbox.mjs.map +1 -1
  326. package/fesm2022/dereekb-dbx-web-table.mjs +230 -317
  327. package/fesm2022/dereekb-dbx-web-table.mjs.map +1 -1
  328. package/fesm2022/dereekb-dbx-web.mjs +8063 -8083
  329. package/fesm2022/dereekb-dbx-web.mjs.map +1 -1
  330. package/lib/action/action.confirm.directive.d.ts +4 -5
  331. package/lib/action/action.module.d.ts +7 -10
  332. package/lib/action/key.trigger.directive.d.ts +1 -1
  333. package/lib/action/snackbar/_snackbar.scss +3 -3
  334. package/lib/action/snackbar/action.snackbar.component.d.ts +15 -14
  335. package/lib/action/snackbar/action.snackbar.directive.d.ts +5 -7
  336. package/lib/action/snackbar/action.snackbar.generator.d.ts +9 -9
  337. package/lib/action/snackbar/action.snackbar.module.d.ts +1 -6
  338. package/lib/action/transition/action.transition.module.d.ts +7 -6
  339. package/lib/action/transition/transition.safety.dialog.component.d.ts +5 -9
  340. package/lib/action/transition/transition.safety.directive.d.ts +10 -7
  341. package/lib/button/_button.scss +3 -3
  342. package/lib/button/button.component.d.ts +16 -21
  343. package/lib/button/button.module.d.ts +10 -7
  344. package/lib/button/{button.spacer.component.d.ts → button.spacer.directive.d.ts} +1 -1
  345. package/lib/button/icon/icon.button.component.d.ts +1 -1
  346. package/lib/button/icon/icon.button.module.d.ts +4 -4
  347. package/lib/button/index.d.ts +1 -1
  348. package/lib/button/progress/abstract.progress.button.directive.d.ts +25 -0
  349. package/lib/button/progress/bar.button.component.d.ts +5 -4
  350. package/lib/button/progress/bar.button.component.scss +1 -1
  351. package/lib/button/progress/button.progress.config.d.ts +62 -34
  352. package/lib/button/progress/button.progress.module.d.ts +4 -10
  353. package/lib/button/progress/button.progress.providers.d.ts +9 -0
  354. package/lib/button/progress/index.d.ts +1 -0
  355. package/lib/button/progress/spinner.button.component.d.ts +18 -7
  356. package/lib/button/progress/spinner.button.component.scss +34 -7
  357. package/lib/error/_error.scss +3 -3
  358. package/lib/error/default.error.widget.component.d.ts +3 -3
  359. package/lib/error/error.action.directive.d.ts +3 -3
  360. package/lib/error/error.component.d.ts +21 -28
  361. package/lib/error/error.details.component.d.ts +2 -2
  362. package/lib/error/error.loading.directive.d.ts +8 -8
  363. package/lib/error/error.module.d.ts +4 -7
  364. package/lib/error/error.popover.component.d.ts +6 -6
  365. package/lib/error/error.snackbar.action.directive.d.ts +1 -1
  366. package/lib/error/error.snackbar.component.d.ts +12 -23
  367. package/lib/error/error.snackbar.service.d.ts +1 -0
  368. package/lib/error/error.view.component.d.ts +10 -12
  369. package/lib/error/error.widget.component.d.ts +4 -8
  370. package/lib/error/error.widget.service.d.ts +1 -1
  371. package/lib/error/state.d.ts +3 -2
  372. package/lib/extension/calendar/_calendar.scss +20 -20
  373. package/lib/extension/download/text/download.text.component.d.ts +16 -14
  374. package/lib/extension/download/text/download.text.module.d.ts +4 -6
  375. package/lib/extension/model/index.d.ts +1 -1
  376. package/lib/extension/model/model.providers.d.ts +13 -0
  377. package/lib/extension/model/model.tracker.d.ts +7 -7
  378. package/lib/extension/model/model.tracker.service.d.ts +2 -2
  379. package/lib/extension/model/model.tracker.view.storage.d.ts +4 -1
  380. package/lib/extension/model/model.types.d.ts +6 -6
  381. package/lib/extension/model/model.types.service.d.ts +1 -1
  382. package/lib/extension/model/state/actions/actions.d.ts +1 -1
  383. package/lib/extension/model/state/actions/model.actions.d.ts +5 -5
  384. package/lib/extension/model/state/effects/tracker.effects.d.ts +1 -1
  385. package/lib/extension/model/state/reducers/model.module.config.d.ts +1 -1
  386. package/lib/extension/structure/structure.body.directive.d.ts +1 -1
  387. package/lib/extension/structure/structure.module.d.ts +4 -2
  388. package/lib/extension/structure/structure.structure.directive.d.ts +5 -2
  389. package/lib/extension/table/_table.scss +3 -3
  390. package/lib/extension/widget/widget.component.d.ts +5 -9
  391. package/lib/extension/widget/widget.list.component.d.ts +8 -4
  392. package/lib/extension/widget/widget.module.d.ts +8 -4
  393. package/lib/index.d.ts +1 -1
  394. package/lib/interaction/dialog/_dialog.scss +3 -3
  395. package/lib/interaction/dialog/dialog.action.directive.d.ts +7 -6
  396. package/lib/interaction/dialog/dialog.content.close.component.d.ts +4 -6
  397. package/lib/interaction/dialog/{dialog.content.component.d.ts → dialog.content.directive.d.ts} +3 -2
  398. package/lib/interaction/dialog/dialog.content.footer.component.d.ts +10 -10
  399. package/lib/interaction/dialog/dialog.module.d.ts +2 -9
  400. package/lib/interaction/dialog/index.d.ts +1 -1
  401. package/lib/interaction/filter/_filter.scss +3 -3
  402. package/lib/interaction/filter/filter.config.d.ts +62 -0
  403. package/lib/interaction/filter/filter.menu.d.ts +3 -3
  404. package/lib/interaction/filter/filter.module.d.ts +2 -11
  405. package/lib/interaction/filter/filter.partial.d.ts +5 -7
  406. package/lib/interaction/filter/filter.partial.list.component.d.ts +1 -1
  407. package/lib/interaction/filter/filter.partial.menu.component.d.ts +5 -5
  408. package/lib/interaction/filter/filter.popover.button.component.d.ts +5 -7
  409. package/lib/interaction/filter/filter.popover.button.directive.d.ts +7 -6
  410. package/lib/interaction/filter/filter.popover.component.d.ts +15 -71
  411. package/lib/interaction/filter/filter.preset.directive.d.ts +7 -11
  412. package/lib/interaction/filter/filter.preset.list.component.d.ts +1 -1
  413. package/lib/interaction/filter/filter.preset.menu.component.d.ts +5 -5
  414. package/lib/interaction/filter/filter.wrapper.component.d.ts +5 -5
  415. package/lib/interaction/filter/index.d.ts +1 -0
  416. package/lib/interaction/interaction.module.d.ts +13 -4
  417. package/lib/interaction/popover/_popover.scss +3 -3
  418. package/lib/interaction/popover/abstract.popover.ref.directive.d.ts +3 -4
  419. package/lib/interaction/popover/index.d.ts +1 -1
  420. package/lib/interaction/popover/popover.action.directive.d.ts +7 -6
  421. package/lib/interaction/popover/popover.close.component.d.ts +1 -1
  422. package/lib/interaction/popover/popover.component.d.ts +15 -9
  423. package/lib/interaction/popover/popover.content.component.d.ts +6 -4
  424. package/lib/interaction/popover/popover.content.module.d.ts +2 -11
  425. package/lib/interaction/popover/popover.controls.directive.d.ts +3 -2
  426. package/lib/interaction/popover/popover.coordinator.component.d.ts +2 -2
  427. package/lib/interaction/popover/popover.header.component.d.ts +4 -3
  428. package/lib/interaction/popover/popover.module.d.ts +2 -11
  429. package/lib/interaction/popover/popover.scroll.content.directive.d.ts +13 -0
  430. package/lib/interaction/popover/popover.service.d.ts +4 -4
  431. package/lib/interaction/popup/_popup.scss +6 -6
  432. package/lib/interaction/popup/popup.component.d.ts +19 -19
  433. package/lib/interaction/popup/popup.content.component.d.ts +2 -1
  434. package/lib/interaction/popup/popup.controls.buttons.component.d.ts +3 -1
  435. package/lib/interaction/popup/popup.controls.component.d.ts +2 -2
  436. package/lib/interaction/popup/popup.coordinator.component.d.ts +3 -2
  437. package/lib/interaction/popup/popup.coordinator.service.d.ts +1 -1
  438. package/lib/interaction/popup/popup.d.ts +7 -6
  439. package/lib/interaction/popup/popup.module.d.ts +1 -10
  440. package/lib/interaction/popup/popup.position.strategy.d.ts +2 -2
  441. package/lib/interaction/popup/popup.service.d.ts +4 -4
  442. package/lib/interaction/prompt/_prompt.scss +4 -4
  443. package/lib/interaction/prompt/index.d.ts +1 -1
  444. package/lib/interaction/prompt/prompt.box.directive.d.ts +6 -0
  445. package/lib/interaction/prompt/prompt.button.confirm.directive.d.ts +1 -1
  446. package/lib/interaction/prompt/prompt.component.d.ts +3 -3
  447. package/lib/interaction/prompt/prompt.confirm.component.d.ts +11 -23
  448. package/lib/interaction/prompt/prompt.confirm.dialog.component.d.ts +2 -3
  449. package/lib/interaction/prompt/prompt.confirm.directive.d.ts +9 -5
  450. package/lib/interaction/prompt/prompt.module.d.ts +2 -11
  451. package/lib/interaction/prompt/prompt.page.component.d.ts +1 -1
  452. package/lib/interaction/style/_style.scss +6 -6
  453. package/lib/keypress/keydown.listener.directive.d.ts +1 -1
  454. package/lib/keypress/keypress.module.d.ts +4 -2
  455. package/lib/layout/bar/_bar.scss +8 -12
  456. package/lib/layout/bar/bar.directive.d.ts +3 -3
  457. package/lib/layout/bar/bar.header.component.d.ts +4 -5
  458. package/lib/layout/bar/bar.layout.module.d.ts +2 -5
  459. package/lib/layout/bar/pagebar.component.d.ts +3 -3
  460. package/lib/layout/block/_block.scss +3 -3
  461. package/lib/layout/block/block.layout.module.d.ts +3 -4
  462. package/lib/layout/block/two.block.component.d.ts +8 -8
  463. package/lib/layout/card/_card.scss +3 -3
  464. package/lib/layout/card/card.box.component.d.ts +3 -3
  465. package/lib/layout/card/card.box.container.directive.d.ts +8 -0
  466. package/lib/layout/card/card.box.layout.module.d.ts +2 -4
  467. package/lib/layout/card/index.d.ts +1 -1
  468. package/lib/layout/column/_column.scss +3 -3
  469. package/lib/layout/column/column.layout.module.d.ts +2 -2
  470. package/lib/layout/column/one/one.column.component.d.ts +3 -3
  471. package/lib/layout/column/one/one.column.module.d.ts +4 -3
  472. package/lib/layout/column/two/index.d.ts +1 -1
  473. package/lib/layout/column/two/two.column.back.directive.d.ts +3 -3
  474. package/lib/layout/column/two/two.column.component.d.ts +37 -20
  475. package/lib/layout/column/two/two.column.context.directive.d.ts +4 -7
  476. package/lib/layout/column/two/two.column.full.left.directive.d.ts +4 -8
  477. package/lib/layout/column/two/two.column.head.directive.d.ts +11 -0
  478. package/lib/layout/column/two/two.column.module.d.ts +2 -8
  479. package/lib/layout/column/two/two.column.right.component.d.ts +12 -14
  480. package/lib/layout/column/two/two.column.sref.directive.d.ts +3 -2
  481. package/lib/layout/column/two/two.column.sref.showright.directive.d.ts +3 -4
  482. package/lib/layout/column/two/two.column.store.d.ts +17 -9
  483. package/lib/layout/content/_content.scss +10 -10
  484. package/lib/layout/content/content.border.directive.d.ts +3 -2
  485. package/lib/layout/content/content.box.directive.d.ts +3 -3
  486. package/lib/layout/content/content.container.directive.d.ts +5 -4
  487. package/lib/layout/content/content.directive.d.ts +1 -1
  488. package/lib/layout/content/content.elevate.directive.d.ts +2 -2
  489. package/lib/layout/content/content.layout.module.d.ts +1 -2
  490. package/lib/layout/content/content.page.directive.d.ts +1 -1
  491. package/lib/layout/content/content.pit.directive.d.ts +2 -2
  492. package/lib/layout/flag/_flag.scss +3 -3
  493. package/lib/layout/flag/flag.component.d.ts +2 -2
  494. package/lib/layout/flag/flag.layout.module.d.ts +1 -6
  495. package/lib/layout/flag/flag.prompt.component.d.ts +4 -3
  496. package/lib/layout/flex/_flex.scss +3 -3
  497. package/lib/layout/flex/flex.group.directive.d.ts +7 -14
  498. package/lib/layout/flex/flex.layout.module.d.ts +4 -2
  499. package/lib/layout/flex/flex.size.directive.d.ts +3 -2
  500. package/lib/layout/item/_item.scss +3 -3
  501. package/lib/layout/item/index.d.ts +0 -1
  502. package/lib/layout/item/item.icon.component.d.ts +3 -3
  503. package/lib/layout/layout.module.d.ts +5 -7
  504. package/lib/layout/list/_list.scss +19 -6
  505. package/lib/layout/list/grid/index.d.ts +2 -0
  506. package/lib/layout/list/{list.grid.view.component.d.ts → grid/list.grid.view.component.d.ts} +23 -31
  507. package/lib/layout/list/grid/list.grid.view.directive.d.ts +24 -0
  508. package/lib/layout/list/group/index.d.ts +3 -0
  509. package/lib/layout/list/{list.view.value.group.d.ts → group/list.view.value.group.d.ts} +2 -2
  510. package/lib/layout/list/{list.view.value.group.title.d.ts → group/list.view.value.group.title.d.ts} +1 -1
  511. package/lib/layout/list/group/list.view.value.group.title.directive.d.ts +15 -0
  512. package/lib/layout/list/group/list.view.value.group.title.header.component.d.ts +21 -0
  513. package/lib/layout/list/index.d.ts +5 -9
  514. package/lib/layout/list/list.component.d.ts +54 -50
  515. package/lib/layout/list/list.content.empty.component.d.ts +1 -1
  516. package/lib/layout/list/list.directive.d.ts +35 -15
  517. package/lib/layout/list/list.layout.module.d.ts +27 -18
  518. package/lib/layout/list/list.module.d.ts +13 -0
  519. package/lib/layout/list/list.view.d.ts +8 -8
  520. package/lib/layout/list/list.view.directive.d.ts +14 -9
  521. package/lib/layout/list/list.view.selection.directive.d.ts +12 -3
  522. package/lib/layout/list/list.view.value.component.d.ts +32 -39
  523. package/lib/layout/list/list.view.value.d.ts +4 -1
  524. package/lib/layout/list/list.view.value.directive.d.ts +5 -7
  525. package/lib/layout/list/list.view.value.selection.component.d.ts +14 -13
  526. package/lib/layout/list/list.wrapper.d.ts +13 -4
  527. package/lib/layout/list/meta/index.d.ts +1 -0
  528. package/lib/layout/list/{list.view.meta.icon.component.d.ts → meta/list.view.meta.icon.component.d.ts} +2 -2
  529. package/lib/layout/list/modifier/index.d.ts +4 -0
  530. package/lib/layout/list/modifier/list.modifier.module.d.ts +12 -0
  531. package/lib/layout/list/{list.view.value.modifier.directive.d.ts → modifier/list.view.value.modifier.directive.d.ts} +13 -12
  532. package/lib/layout/list/{list.view.value.modifier.ripple.directive.d.ts → modifier/list.view.value.modifier.ripple.directive.d.ts} +5 -6
  533. package/lib/layout/list/{list.view.value.modifier.selection.directive.d.ts → modifier/list.view.value.modifier.selection.directive.d.ts} +5 -6
  534. package/lib/layout/section/_section.scss +3 -3
  535. package/lib/layout/section/section.component.d.ts +3 -2
  536. package/lib/layout/section/section.d.ts +28 -6
  537. package/lib/layout/section/section.header.component.d.ts +12 -11
  538. package/lib/layout/section/section.intro.component.d.ts +7 -8
  539. package/lib/layout/section/section.layout.module.d.ts +2 -7
  540. package/lib/layout/section/section.page.component.d.ts +4 -3
  541. package/lib/layout/section/subsection.component.d.ts +1 -1
  542. package/lib/layout/step/_step.scss +3 -3
  543. package/lib/layout/step/step.component.d.ts +6 -5
  544. package/lib/layout/step/step.layout.module.d.ts +4 -3
  545. package/lib/layout/style/_style.scss +20 -3
  546. package/lib/layout/style/index.d.ts +1 -0
  547. package/lib/layout/style/spacer.directive.d.ts +1 -1
  548. package/lib/layout/style/style.body.directive.d.ts +8 -8
  549. package/lib/layout/style/style.color.directive.d.ts +3 -3
  550. package/lib/layout/style/style.d.ts +48 -1
  551. package/lib/layout/style/style.directive.d.ts +5 -5
  552. package/lib/layout/style/style.layout.module.d.ts +1 -2
  553. package/lib/layout/style/style.providers.d.ts +19 -0
  554. package/lib/layout/style/style.service.d.ts +28 -18
  555. package/lib/layout/style/style.set.directive.d.ts +18 -16
  556. package/lib/layout/text/_text.scss +8 -8
  557. package/lib/layout/text/address.component.d.ts +2 -2
  558. package/lib/layout/text/detail.block.component.d.ts +1 -1
  559. package/lib/layout/text/detail.block.header.component.d.ts +1 -1
  560. package/lib/layout/text/icon.spacer.component.d.ts +1 -1
  561. package/lib/layout/text/label.block.component.d.ts +1 -1
  562. package/lib/layout/text/linkify.component.d.ts +3 -2
  563. package/lib/layout/text/text.chip.directive.d.ts +1 -1
  564. package/lib/layout/text/text.chips.component.d.ts +3 -4
  565. package/lib/layout/text/text.module.d.ts +1 -5
  566. package/lib/loading/_loading.scss +3 -3
  567. package/lib/loading/basic-loading.component.d.ts +17 -36
  568. package/lib/loading/loading-progress.component.d.ts +12 -14
  569. package/lib/loading/loading.action.directive.d.ts +2 -4
  570. package/lib/loading/loading.component.d.ts +31 -29
  571. package/lib/loading/loading.module.d.ts +1 -5
  572. package/lib/router/layout/anchor/_anchor.scss +3 -3
  573. package/lib/router/layout/anchor/anchor.component.d.ts +7 -12
  574. package/lib/router/layout/anchor/anchor.content.component.d.ts +4 -3
  575. package/lib/router/layout/anchor/anchor.icon.component.d.ts +1 -1
  576. package/lib/router/layout/anchor/anchor.link.component.d.ts +3 -3
  577. package/lib/router/layout/anchor/anchor.module.d.ts +14 -5
  578. package/lib/router/layout/anchor/anchor.segue.directive.d.ts +5 -6
  579. package/lib/router/layout/anchorlist/_anchorlist.scss +6 -6
  580. package/lib/router/layout/anchorlist/anchorlist.component.d.ts +6 -9
  581. package/lib/router/layout/anchorlist/anchorlist.module.d.ts +4 -9
  582. package/lib/router/layout/list/list.module.d.ts +4 -1
  583. package/lib/router/layout/list/router.list.directive.d.ts +6 -8
  584. package/lib/router/layout/navbar/_navbar.scss +3 -3
  585. package/lib/router/layout/navbar/navbar.component.d.ts +22 -29
  586. package/lib/router/layout/navbar/navbar.module.d.ts +4 -9
  587. package/lib/router/layout/sidenav/_sidenav.scss +8 -8
  588. package/lib/router/layout/sidenav/sidenav.button.component.d.ts +3 -4
  589. package/lib/router/layout/sidenav/sidenav.component.d.ts +19 -18
  590. package/lib/router/layout/sidenav/sidenav.ifdisplaymode.directive.d.ts +7 -7
  591. package/lib/router/layout/sidenav/sidenav.module.d.ts +1 -14
  592. package/lib/router/layout/sidenav/sidenav.page.component.d.ts +7 -10
  593. package/lib/router/layout/sidenav/sidenav.pagebar.component.d.ts +2 -2
  594. package/lib/router/provider/ngrouter/anchor.component.d.ts +1 -1
  595. package/lib/router/provider/ngrouter/angular.router.providers.d.ts +7 -0
  596. package/lib/router/provider/ngrouter/index.d.ts +1 -1
  597. package/lib/router/provider/router.provider.config.d.ts +7 -0
  598. package/lib/router/provider/uirouter/anchor.component.d.ts +6 -5
  599. package/lib/router/provider/uirouter/index.d.ts +1 -1
  600. package/lib/router/provider/uirouter/uirouter.router.providers.d.ts +7 -0
  601. package/lib/screen/index.d.ts +1 -1
  602. package/lib/screen/screen.providers.d.ts +15 -0
  603. package/lib/screen/screen.service.d.ts +7 -7
  604. package/lib/style/_all-typography.scss +1 -1
  605. package/lib/style/_root-variables.scss +13 -13
  606. package/lib/style/_theming.scss +4 -2
  607. package/mapbox/lib/index.d.ts +2 -1
  608. package/mapbox/lib/mapbox.change.service.d.ts +3 -3
  609. package/mapbox/lib/mapbox.d.ts +33 -19
  610. package/mapbox/lib/mapbox.injection.component.d.ts +2 -4
  611. package/mapbox/lib/mapbox.injection.store.provide.d.ts +1 -1
  612. package/mapbox/lib/mapbox.layout.component.d.ts +36 -34
  613. package/mapbox/lib/mapbox.layout.drawer.component.d.ts +2 -2
  614. package/mapbox/lib/mapbox.layout.resize.sync.directive.d.ts +1 -1
  615. package/mapbox/lib/mapbox.marker.component.d.ts +6 -11
  616. package/mapbox/lib/mapbox.marker.d.ts +13 -13
  617. package/mapbox/lib/mapbox.markers.component.d.ts +5 -11
  618. package/mapbox/lib/mapbox.menu.component.d.ts +9 -11
  619. package/mapbox/lib/mapbox.module.d.ts +2 -12
  620. package/mapbox/lib/mapbox.options.d.ts +11 -0
  621. package/mapbox/lib/mapbox.providers.d.ts +17 -0
  622. package/mapbox/lib/mapbox.rxjs.d.ts +6 -6
  623. package/mapbox/lib/mapbox.service.d.ts +1 -1
  624. package/mapbox/lib/mapbox.store.d.ts +28 -6
  625. package/mapbox/lib/mapbox.store.map.directive.d.ts +1 -1
  626. package/mapbox/lib/mapbox.store.provide.d.ts +1 -1
  627. package/package.json +14 -16
  628. package/table/lib/date/date.table.column.header.component.d.ts +3 -3
  629. package/table/lib/date/daterange.table.cell.input.component.d.ts +14 -12
  630. package/table/lib/date/table.date.module.d.ts +1 -9
  631. package/table/lib/table.cell.action.component.d.ts +2 -1
  632. package/table/lib/table.cell.input.component.d.ts +2 -1
  633. package/table/lib/table.cell.summaryend.component.d.ts +2 -1
  634. package/table/lib/table.cell.summarystart.component.d.ts +2 -1
  635. package/table/lib/table.column.directive.d.ts +3 -6
  636. package/table/lib/table.column.footer.component.d.ts +3 -3
  637. package/table/lib/table.column.header.component.d.ts +3 -3
  638. package/table/lib/table.component.d.ts +13 -8
  639. package/table/lib/table.directive.d.ts +5 -4
  640. package/table/lib/table.item.action.component.d.ts +4 -2
  641. package/table/lib/table.item.cell.component.d.ts +3 -5
  642. package/table/lib/table.item.directive.d.ts +3 -6
  643. package/table/lib/table.item.header.component.d.ts +2 -1
  644. package/table/lib/table.module.d.ts +4 -6
  645. package/calendar/esm2022/dereekb-dbx-web-calendar.mjs +0 -5
  646. package/calendar/esm2022/index.mjs +0 -2
  647. package/calendar/esm2022/lib/calendar.base.component.mjs +0 -54
  648. package/calendar/esm2022/lib/calendar.component.mjs +0 -54
  649. package/calendar/esm2022/lib/calendar.mjs +0 -30
  650. package/calendar/esm2022/lib/calendar.module.mjs +0 -87
  651. package/calendar/esm2022/lib/calendar.store.mjs +0 -174
  652. package/calendar/esm2022/lib/index.mjs +0 -6
  653. package/calendar/fesm2022/dereekb-dbx-web-calendar.mjs +0 -385
  654. package/calendar/fesm2022/dereekb-dbx-web-calendar.mjs.map +0 -1
  655. package/calendar/package.json +0 -21
  656. package/esm2022/lib/button/button.spacer.component.mjs +0 -19
  657. package/esm2022/lib/button/progress/base.progress.button.directive.mjs +0 -107
  658. package/esm2022/lib/extension/model/model.module.mjs +0 -66
  659. package/esm2022/lib/interaction/dialog/dialog.content.component.mjs +0 -23
  660. package/esm2022/lib/interaction/popover/popover.scroll.content.component.mjs +0 -48
  661. package/esm2022/lib/interaction/prompt/prompt.box.component.mjs +0 -25
  662. package/esm2022/lib/layout/card/card.box.container.component.mjs +0 -25
  663. package/esm2022/lib/layout/column/two/two.column.head.component.mjs +0 -32
  664. package/esm2022/lib/layout/item/item.layout.module.mjs +0 -19
  665. package/esm2022/lib/layout/list/list.grid.view.component.mjs +0 -112
  666. package/esm2022/lib/layout/list/list.grid.view.directive.mjs +0 -15
  667. package/esm2022/lib/layout/list/list.view.meta.icon.component.mjs +0 -35
  668. package/esm2022/lib/layout/list/list.view.value.group.mjs +0 -32
  669. package/esm2022/lib/layout/list/list.view.value.group.title.directive.mjs +0 -131
  670. package/esm2022/lib/layout/list/list.view.value.group.title.mjs +0 -2
  671. package/esm2022/lib/layout/list/list.view.value.modifier.directive.mjs +0 -77
  672. package/esm2022/lib/layout/list/list.view.value.modifier.ripple.directive.mjs +0 -41
  673. package/esm2022/lib/layout/list/list.view.value.modifier.selection.directive.mjs +0 -39
  674. package/esm2022/lib/router/provider/ngrouter/angular.router.module.mjs +0 -36
  675. package/esm2022/lib/router/provider/uirouter/uirouter.router.module.mjs +0 -36
  676. package/esm2022/lib/screen/screen.module.mjs +0 -24
  677. package/esm2022/mapbox/lib/options.mjs +0 -2
  678. package/lib/button/progress/base.progress.button.directive.d.ts +0 -32
  679. package/lib/extension/model/model.module.d.ts +0 -19
  680. package/lib/interaction/popover/popover.scroll.content.component.d.ts +0 -13
  681. package/lib/interaction/prompt/prompt.box.component.d.ts +0 -6
  682. package/lib/layout/card/card.box.container.component.d.ts +0 -8
  683. package/lib/layout/column/two/two.column.head.component.d.ts +0 -10
  684. package/lib/layout/item/item.layout.module.d.ts +0 -9
  685. package/lib/layout/list/list.grid.view.directive.d.ts +0 -10
  686. package/lib/layout/list/list.view.value.group.title.directive.d.ts +0 -35
  687. package/lib/router/provider/ngrouter/angular.router.module.d.ts +0 -12
  688. package/lib/router/provider/uirouter/uirouter.router.module.d.ts +0 -12
  689. package/lib/screen/screen.module.d.ts +0 -9
  690. package/mapbox/esm2022/dereekb-dbx-web-mapbox.mjs +0 -5
  691. package/mapbox/esm2022/index.mjs +0 -2
  692. package/mapbox/esm2022/lib/index.mjs +0 -21
  693. package/mapbox/esm2022/lib/mapbox.change.service.mjs +0 -40
  694. package/mapbox/esm2022/lib/mapbox.injection.component.mjs +0 -28
  695. package/mapbox/esm2022/lib/mapbox.injection.store.mjs +0 -39
  696. package/mapbox/esm2022/lib/mapbox.injection.store.provide.mjs +0 -47
  697. package/mapbox/esm2022/lib/mapbox.layout.component.mjs +0 -185
  698. package/mapbox/esm2022/lib/mapbox.layout.drawer.component.mjs +0 -21
  699. package/mapbox/esm2022/lib/mapbox.layout.resize.sync.directive.mjs +0 -32
  700. package/mapbox/esm2022/lib/mapbox.marker.component.mjs +0 -135
  701. package/mapbox/esm2022/lib/mapbox.marker.mjs +0 -16
  702. package/mapbox/esm2022/lib/mapbox.markers.component.mjs +0 -58
  703. package/mapbox/esm2022/lib/mapbox.menu.component.mjs +0 -91
  704. package/mapbox/esm2022/lib/mapbox.mjs +0 -19
  705. package/mapbox/esm2022/lib/mapbox.module.mjs +0 -108
  706. package/mapbox/esm2022/lib/mapbox.rxjs.mjs +0 -53
  707. package/mapbox/esm2022/lib/mapbox.service.mjs +0 -36
  708. package/mapbox/esm2022/lib/mapbox.store.map.directive.mjs +0 -33
  709. package/mapbox/esm2022/lib/mapbox.store.mjs +0 -525
  710. package/mapbox/esm2022/lib/mapbox.store.provide.mjs +0 -47
  711. package/mapbox/esm2022/lib/mapbox.util.mjs +0 -15
  712. package/mapbox/esm2022/lib/options.mjs +0 -2
  713. package/mapbox/fesm2022/dereekb-dbx-web-mapbox.mjs +0 -1449
  714. package/mapbox/fesm2022/dereekb-dbx-web-mapbox.mjs.map +0 -1
  715. package/mapbox/lib/options.d.ts +0 -7
  716. package/mapbox/package.json +0 -21
  717. package/table/esm2022/dereekb-dbx-web-table.mjs +0 -5
  718. package/table/esm2022/index.mjs +0 -2
  719. package/table/esm2022/lib/date/date.table.column.header.component.mjs +0 -49
  720. package/table/esm2022/lib/date/daterange.table.cell.input.component.mjs +0 -161
  721. package/table/esm2022/lib/date/index.mjs +0 -4
  722. package/table/esm2022/lib/date/table.date.module.mjs +0 -68
  723. package/table/esm2022/lib/index.mjs +0 -18
  724. package/table/esm2022/lib/table.cell.action.component.mjs +0 -25
  725. package/table/esm2022/lib/table.cell.input.component.mjs +0 -28
  726. package/table/esm2022/lib/table.cell.summaryend.component.mjs +0 -25
  727. package/table/esm2022/lib/table.cell.summarystart.component.mjs +0 -28
  728. package/table/esm2022/lib/table.column.directive.mjs +0 -27
  729. package/table/esm2022/lib/table.column.footer.component.mjs +0 -32
  730. package/table/esm2022/lib/table.column.header.component.mjs +0 -32
  731. package/table/esm2022/lib/table.component.mjs +0 -55
  732. package/table/esm2022/lib/table.directive.mjs +0 -34
  733. package/table/esm2022/lib/table.item.action.component.mjs +0 -32
  734. package/table/esm2022/lib/table.item.cell.component.mjs +0 -36
  735. package/table/esm2022/lib/table.item.directive.mjs +0 -27
  736. package/table/esm2022/lib/table.item.header.component.mjs +0 -24
  737. package/table/esm2022/lib/table.mjs +0 -2
  738. package/table/esm2022/lib/table.module.mjs +0 -74
  739. package/table/esm2022/lib/table.store.mjs +0 -53
  740. package/table/fesm2022/dereekb-dbx-web-table.mjs +0 -704
  741. package/table/fesm2022/dereekb-dbx-web-table.mjs.map +0 -1
  742. package/table/package.json +0 -21
@@ -445,12 +445,16 @@ export class DbxMapboxMapStore extends ComponentStore {
445
445
  }), shareReplay(1));
446
446
  rawBoundNow$ = this.whenInitialized$.pipe(switchMap(() => this.mapInstance$.pipe(switchMap((x) => this._renderingTimer.pipe(map(() => {
447
447
  const bound = x.getBounds();
448
- const boundSw = bound.getSouthWest();
449
- const boundNe = bound.getNorthEast();
450
- const sw = isDefaultLatLngPoint(boundSw) ? swMostLatLngPoint() : { lat: boundSw.lat, lng: boundSw.lng };
451
- const ne = isDefaultLatLngPoint(boundNe) ? neMostLatLngPoint() : { lat: boundNe.lat, lng: boundNe.lng };
452
- return this.latLngBound(sw, ne);
453
- }))))), distinctUntilChanged(isSameLatLngBound), shareReplay(1));
448
+ let result = null;
449
+ if (bound != null) {
450
+ const boundSw = bound.getSouthWest();
451
+ const boundNe = bound.getNorthEast();
452
+ const sw = isDefaultLatLngPoint(boundSw) ? swMostLatLngPoint() : { lat: boundSw.lat, lng: boundSw.lng };
453
+ const ne = isDefaultLatLngPoint(boundNe) ? neMostLatLngPoint() : { lat: boundNe.lat, lng: boundNe.lng };
454
+ result = this.latLngBound(sw, ne);
455
+ }
456
+ return result;
457
+ }), filterMaybe())))), distinctUntilChanged(isSameLatLngBound), shareReplay(1));
454
458
  rawBound$ = this.whenInitialized$.pipe(switchMap(() => {
455
459
  return this.boundRefreshSettings$.pipe(switchMap((settings) => {
456
460
  const { throttle: throttleMs, refreshType } = settings;
@@ -494,8 +498,8 @@ export class DbxMapboxMapStore extends ComponentStore {
494
498
  bearing$ = this.whenInitialized$.pipe(switchMap(() => {
495
499
  return this.isRotating$.pipe(onTrueToFalse(), startWith(undefined), switchMap(() => this.bearingNow$.pipe(first())), distinctUntilChanged(), shareReplay(1));
496
500
  }));
497
- content$ = this.state$.pipe(map((x) => x.content), distinctUntilChanged(), shareReplay(1));
498
- hasContent$ = this.content$.pipe(map(Boolean));
501
+ drawerContent$ = this.state$.pipe(map((x) => x.drawerContent), distinctUntilChanged(), shareReplay(1));
502
+ hasDrawerContent$ = this.drawerContent$.pipe(map(Boolean));
499
503
  clickEvent$ = this.state$.pipe(map((x) => x.clickEvent), distinctUntilChanged(), shareReplay(1));
500
504
  doubleClickEvent$ = this.state$.pipe(map((x) => x.doubleClickEvent), distinctUntilChanged(), shareReplay(1));
501
505
  rightClickEvent$ = this.state$.pipe(map((x) => x.rightClickEvent), distinctUntilChanged(), shareReplay(1));
@@ -514,12 +518,32 @@ export class DbxMapboxMapStore extends ComponentStore {
514
518
  _setDoubleClickEvent = this.updater((state, doubleClickEvent) => ({ ...state, doubleClickEvent }));
515
519
  _setRightClickEvent = this.updater((state, rightClickEvent) => ({ ...state, rightClickEvent }));
516
520
  _setError = this.updater((state, error) => ({ ...state, error }));
517
- clearContent = this.updater((state) => ({ ...state, content: undefined }));
518
- setContent = this.updater((state, content) => ({ ...state, content }));
519
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxMapboxMapStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
520
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxMapboxMapStore });
521
+ clearDrawerContent = this.updater((state) => setDrawerContent(state, undefined));
522
+ setDrawerContent = this.updater(setDrawerContent);
523
+ // MARK: Compat
524
+ /**
525
+ * @deprecated use drawerContent$ instead.
526
+ */
527
+ content$ = this.drawerContent$;
528
+ /**
529
+ * @deprecated use hasDrawerContent$ instead.
530
+ */
531
+ hasContent$ = this.hasDrawerContent$;
532
+ /**
533
+ * @deprecated use clearDrawerContent instead.
534
+ */
535
+ clearContent = this.updater((state) => setDrawerContent(state, undefined));
536
+ /**
537
+ * @deprecated use setDrawerContent instead.
538
+ */
539
+ setContent = this.updater(setDrawerContent);
540
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxMapboxMapStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
541
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxMapboxMapStore });
521
542
  }
522
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxMapboxMapStore, decorators: [{
543
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxMapboxMapStore, decorators: [{
523
544
  type: Injectable
524
- }], ctorParameters: function () { return []; } });
525
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3guc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLDJCQUEyQixFQUUzQixtQkFBbUIsRUFHbkIsbUJBQW1CLEVBR25CLDJCQUEyQixFQUMzQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFFbkIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQiwrQkFBK0IsRUFDL0IsWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBZ0IsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBb0IsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdOLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE9BQU8sRUFBRSwyQkFBMkIsRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFtRSwyQkFBMkIsRUFBRSxNQUFN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OzRHQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbGVhbnVwLCBmaWx0ZXJNYXliZSwgb25UcnVlVG9GYWxzZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIGlzU2FtZUxhdExuZ0JvdW5kLFxuICBpc1NhbWVMYXRMbmdQb2ludCxcbiAgSXNXaXRoaW5MYXRMbmdCb3VuZEZ1bmN0aW9uLFxuICBpc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24sXG4gIExhdExuZ0JvdW5kLFxuICBsYXRMbmdCb3VuZEZ1bmN0aW9uLFxuICBMYXRMbmdQb2ludElucHV0LFxuICBMYXRMbmdQb2ludCxcbiAgbGF0TG5nUG9pbnRGdW5jdGlvbixcbiAgTWF5YmUsXG4gIE92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbixcbiAgb3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uLFxuICBkaWZmTGF0TG5nQm91bmRQb2ludHMsXG4gIGxhdExuZ0JvdW5kQ2VudGVyUG9pbnQsXG4gIGFkZExhdExuZ1BvaW50cyxcbiAgaXNEZWZhdWx0TGF0TG5nUG9pbnQsXG4gIHN3TW9zdExhdExuZ1BvaW50LFxuICBuZU1vc3RMYXRMbmdQb2ludCxcbiAgbGF0TG5nQm91bmRXcmFwc01hcCxcbiAgVmVjdG9yLFxuICBmaWx0ZXJVbmRlZmluZWRWYWx1ZXMsXG4gIGxhdExuZ0JvdW5kRnJvbUlucHV0LFxuICB2ZWN0b3JNaW5pbXVtU2l6ZVJlc2l6ZUZ1bmN0aW9uLFxuICBpc1NhbWVWZWN0b3IsXG4gIFpvb21MZXZlbFxufSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IENvbXBvbmVudFN0b3JlIH0gZnJvbSAnQG5ncngvY29tcG9uZW50LXN0b3JlJztcbmltcG9ydCB7IE1hcFNlcnZpY2UgfSBmcm9tICduZ3gtbWFwYm94LWdsJztcbmltcG9ydCB7IGRlZmF1bHRJZkVtcHR5LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRhcCwgTkVWRVIsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24sIHN0YXJ0V2l0aCwgaW50ZXJ2YWwsIGZpcnN0LCBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgT3BlcmF0b3JGdW5jdGlvbiwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBNYXBib3hHbCBmcm9tICdtYXBib3gtZ2wnO1xuaW1wb3J0IHsgRGJ4TWFwYm94Q2xpY2tFdmVudCwgS25vd25NYXBib3hTdHlsZSwgTWFwYm94QmVhcmluZywgTWFwYm94RWFzZVRvLCBNYXBib3hGaXRCb3VuZHMsIE1hcGJveEZpdFBvc2l0aW9ucywgTWFwYm94Rmx5VG8sIE1hcGJveEp1bXBUbywgTWFwYm94UmVzZXROb3J0aCwgTWFwYm94UmVzZXROb3J0aFBpdGNoLCBNYXBib3hSb3RhdGVUbywgTWFwYm94U25hcFRvTm9ydGgsIE1hcGJveFN0eWxlQ29uZmlnLCBNYXBib3hab29tTGV2ZWwsIE1hcGJveFpvb21MZXZlbFJhbmdlIH0gZnJvbSAnLi9tYXBib3gnO1xuaW1wb3J0IHsgRGJ4TWFwYm94U2VydmljZSB9IGZyb20gJy4vbWFwYm94LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGJ4SW5qZWN0aW9uQ29tcG9uZW50Q29uZmlnIH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuaW1wb3J0IHsgbWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uLCBNYXBib3hWaWV3cG9ydEJvdW5kRnVuY3Rpb24gfSBmcm9tICcuL21hcGJveC51dGlsJztcbmltcG9ydCB7IEZpbHRlck1hcGJveEJvdW5kQ29uZmlnLCBGaWx0ZXJNYXBib3hCb3VuZFJlYWRJdGVtVmFsdWVGdW5jdGlvbiwgZmlsdGVyQnlNYXBib3hWaWV3cG9ydEJvdW5kIH0gZnJvbSAnLi9tYXBib3gucnhqcyc7XG5cbmV4cG9ydCB0eXBlIE1hcGJveE1hcExpZmVjeWNsZVN0YXRlID0gJ2luaXQnIHwgJ2xvYWQnIHwgJ3JlbmRlcicgfCAnaWRsZSc7XG5leHBvcnQgdHlwZSBNYXBib3hNYXBNb3ZlU3RhdGUgPSAnaW5pdCcgfCAnaWRsZScgfCAnbW92aW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFpvb21TdGF0ZSA9ICdpbml0JyB8ICdpZGxlJyB8ICd6b29taW5nJztcbmV4cG9ydCB0eXBlIE1hcGJveE1hcFJvdGF0ZVN0YXRlID0gJ2luaXQnIHwgJ2lkbGUnIHwgJ3JvdGF0aW5nJztcblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdNYXBib3hMaXN0ZW5lclBhaXIge1xuICB0eXBlOiBzdHJpbmc7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlZE1hcGJveExpc3RlbmVyUGFpcjxUIGV4dGVuZHMga2V5b2YgTWFwYm94R2wuTWFwRXZlbnRUeXBlPiB7XG4gIHR5cGU6IFQ7XG4gIGxpc3RlbmVyOiAoZXY6IE1hcGJveEdsLk1hcEV2ZW50VHlwZVtUXSAmIE1hcGJveEdsLkV2ZW50RGF0YSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZyB7XG4gIGxlZnRNYXJnaW46IG51bWJlcjtcbiAgcmlnaHRNYXJnaW46IG51bWJlcjtcbiAgZnVsbFdpZHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIERieE1hcGJveFN0b3JlQm91bmRSZWZyZXNoVHlwZSA9ICdhbHdheXMnIHwgJ3doZW5fbm90X3JlbmRlcmluZycgfCAnb25seV9hZnRlcl9yZW5kZXJfZmluaXNoZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieE1hcGJveFN0b3JlQm91bmRSZWZyZXNoU2V0dGluZ3Mge1xuICAvKipcbiAgICogTWF4IGJvdW5kIHJlZnJlc2ggaW50ZXJ2YWwuXG4gICAqL1xuICB0aHJvdHRsZTogbnVtYmVyO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gd2FpdCB0byB1cGRhdGUgdGhlIGJvdW5kIHVudGlsIGFmdGVyIGl0IGhhcyBmaW5pc2hlZCByZW5kZXJpbmcuXG4gICAqL1xuICByZWZyZXNoVHlwZTogRGJ4TWFwYm94U3RvcmVCb3VuZFJlZnJlc2hUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERieE1hcGJveFN0b3JlU3RhdGUge1xuICAvKipcbiAgICogQ3VycmVudCBNYXBTZXJ2aWNlIGJlaW5nIHV0aWxpemVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFwU2VydmljZT86IE1heWJlPE1hcFNlcnZpY2U+O1xuICByZWFkb25seSBsaWZlY3ljbGVTdGF0ZTogTWFwYm94TWFwTGlmZWN5Y2xlU3RhdGU7XG4gIHJlYWRvbmx5IG1vdmVTdGF0ZTogTWFwYm94TWFwTW92ZVN0YXRlO1xuICByZWFkb25seSB6b29tU3RhdGU6IE1hcGJveE1hcFpvb21TdGF0ZTtcbiAgcmVhZG9ubHkgcm90YXRlU3RhdGU6IE1hcGJveE1hcFJvdGF0ZVN0YXRlO1xuICAvKipcbiAgICogVmlzdWFsIGNvbnRhaW5lciBzaXplIG9mIHRoZSBtYXAuXG4gICAqL1xuICByZWFkb25seSBtYXBDYW52YXNTaXplPzogTWF5YmU8VmVjdG9yPjtcbiAgLyoqXG4gICAqIExhdGVzdCBjbGljayBldmVudFxuICAgKi9cbiAgcmVhZG9ubHkgY2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogTGF0ZXN0IGRvdWJsZS1jbGljayBldmVudFxuICAgKi9cbiAgcmVhZG9ubHkgZG91YmxlQ2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogTGF0ZXN0IGNvbnRleHRtZW51IGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmlnaHRDbGlja0V2ZW50PzogTWF5YmU8RGJ4TWFwYm94Q2xpY2tFdmVudD47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byByZXRhaW4gY29udGVudCBiZXR3ZWVuIHJlc2V0cy5cbiAgICpcbiAgICogVHJ1ZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmV0YWluQ29udGVudDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBjb250ZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBjb250ZW50PzogTWF5YmU8RGJ4SW5qZWN0aW9uQ29tcG9uZW50Q29uZmlnPHVua25vd24+PjtcbiAgLyoqXG4gICAqIExhdGVzdCBlcnJvclxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3I/OiBNYXliZTxFcnJvcj47XG4gIC8qKlxuICAgKiBNYXAgbWFyZ2luL29mZnNldFxuICAgKi9cbiAgcmVhZG9ubHkgbWFyZ2luPzogTWF5YmU8RGJ4TWFwYm94TWFyZ2luQ2FsY3VsYXRpb25TaXppbmc+O1xuICAvKipcbiAgICogTWluaW11bSB2ZWN0b3Igc2l6ZSB0byB1c2UgZm9yIHRoZSB2aWV3cG9ydEJvdW5kRnVuY3Rpb24kLiBJZiBub3QgZGVmaW5lZCB0aGVyZSBpcyBubyBtaW5pbXVtLlxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemU/OiBNYXliZTxQYXJ0aWFsPFZlY3Rvcj4+O1xuICAvKipcbiAgICogQm91bmQgcmVmcmVzaCBzZXR0aW5nc1xuICAgKi9cbiAgcmVhZG9ubHkgYm91bmRSZWZyZXNoU2V0dGluZ3M6IERieE1hcGJveFN0b3JlQm91bmRSZWZyZXNoU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byB1c2UgdGhlIHZpcnR1YWwgYm91bmQgKHZzIHJhdyBib3VuZCkgZm9yIGFsbCBib3VuZC1yZWxhdGVkIG9ic2VydmFibGVzLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlVmlydHVhbEJvdW5kOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFN0b3JlIHVzZWQgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhNYXBib3hNYXBTdG9yZSBleHRlbmRzIENvbXBvbmVudFN0b3JlPERieE1hcGJveFN0b3JlU3RhdGU+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkYnhNYXBib3hTZXJ2aWNlID0gaW5qZWN0KERieE1hcGJveFNlcnZpY2UpO1xuXG4gIHByaXZhdGUgc2FmZUxhdExuZ1BvaW50ID0gbGF0TG5nUG9pbnRGdW5jdGlvbih7IHdyYXA6IHRydWUgfSk7XG4gIHByaXZhdGUgbGF0TG5nUG9pbnQgPSBsYXRMbmdQb2ludEZ1bmN0aW9uKHsgd3JhcDogZmFsc2UsIHZhbGlkYXRlOiBmYWxzZSB9KTtcbiAgcHJpdmF0ZSBsYXRMbmdCb3VuZCA9IGxhdExuZ0JvdW5kRnVuY3Rpb24oeyBwb2ludEZ1bmN0aW9uOiB0aGlzLmxhdExuZ1BvaW50IH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKHtcbiAgICAgIGxpZmVjeWNsZVN0YXRlOiAnaW5pdCcsXG4gICAgICBtb3ZlU3RhdGU6ICdpbml0JyxcbiAgICAgIHpvb21TdGF0ZTogJ2luaXQnLFxuICAgICAgcm90YXRlU3RhdGU6ICdpbml0JyxcbiAgICAgIHJldGFpbkNvbnRlbnQ6IHRydWUsXG4gICAgICB1c2VWaXJ0dWFsQm91bmQ6IHRydWUsXG4gICAgICBib3VuZFJlZnJlc2hTZXR0aW5nczoge1xuICAgICAgICB0aHJvdHRsZTogMzAwLFxuICAgICAgICByZWZyZXNoVHlwZTogJ2Fsd2F5cydcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1BUks6IEVmZmVjdHNcbiAgcmVhZG9ubHkgc2V0TWFwU2VydmljZSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxNYXBTZXJ2aWNlPj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+IHtcbiAgICAgICAgdGhpcy5fc2V0TWFwU2VydmljZShzZXJ2aWNlKTtcblxuICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICByZXR1cm4gTkVWRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHNlcnZpY2UubWFwTG9hZGVkJC5waXBlKFxuICAgICAgICAgICAgZGVmYXVsdElmRW1wdHkodW5kZWZpbmVkKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJyk7XG4gICAgICAgICAgICAgIHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpO1xuICAgICAgICAgICAgICB0aGlzLl9zZXRab29tU3RhdGUoJ2lkbGUnKTtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0Um90YXRlU3RhdGUoJ2lkbGUnKTtcblxuICAgICAgICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyUGFpcnM6IFN0cmluZ01hcGJveExpc3RlbmVyUGFpcltdID0gW107XG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkTGlzdGVuZXI8VCBleHRlbmRzIGtleW9mIE1hcGJveEdsLk1hcEV2ZW50VHlwZT4odHlwZTogVCwgbGlzdGVuZXI6IChldjogTWFwYm94R2wuTWFwRXZlbnRUeXBlW1RdICYgTWFwYm94R2wuRXZlbnREYXRhKSA9PiB2b2lkKSB7XG4gICAgICAgICAgICAgICAgbWFwLm9uKHR5cGUsIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLnB1c2goeyB0eXBlLCBsaXN0ZW5lciB9IGFzIFN0cmluZ01hcGJveExpc3RlbmVyUGFpcik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignaWRsZScsICgpID0+IHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncmVuZGVyJywgKCkgPT4gdGhpcy5fc2V0TGlmZWN5Y2xlU3RhdGUoJ3JlbmRlcicpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2Vycm9yJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvcih4LmVycm9yKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ21vdmVzdGFydCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnbW92aW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignbW92ZWVuZCcsICgpID0+IHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbXN0YXJ0JywgKCkgPT4gdGhpcy5fc2V0Wm9vbVN0YXRlKCd6b29taW5nJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignem9vbWVuZCcsICgpID0+IHRoaXMuX3NldFpvb21TdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncm90YXRlc3RhcnQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgncm90YXRpbmcnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdyb3RhdGVlbmQnLCAoKSA9PiB0aGlzLl9zZXRSb3RhdGVTdGF0ZSgnaWRsZScpKTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignY2xpY2snLCAoeCkgPT4gdGhpcy5fc2V0Q2xpY2tFdmVudCh4KSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdkYmxjbGljaycsICh4KSA9PiB0aGlzLl9zZXREb3VibGVDbGlja0V2ZW50KHgpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKHgpID0+IHRoaXMuX3NldFJpZ2h0Q2xpY2tFdmVudCh4KSk7XG5cbiAgICAgICAgICAgICAgY29uc3QgcmVmcmVzaEZvclJlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudFdpZHRoOiB4LCBjbGllbnRIZWlnaHQ6IHkgfSA9IG1hcC5nZXRDYW52YXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRNYXBDYW52YXNTaXplKHsgeCwgeSB9KTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcigncmVzaXplJywgcmVmcmVzaEZvclJlc2l6ZSk7XG4gICAgICAgICAgICAgIHJlZnJlc2hGb3JSZXNpemUoKTtcblxuICAgICAgICAgICAgICBjb25zdCBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VydmljZSxcbiAgICAgICAgICAgICAgICBsaXN0ZW5lclBhaXJzLFxuICAgICAgICAgICAgICAgIHN1YnNcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjbGVhbnVwKCh7IHNlcnZpY2UsIGxpc3RlbmVyUGFpcnMsIHN1YnMgfSkgPT4ge1xuICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgIGlmIChtYXApIHtcbiAgICAgICAgICBsaXN0ZW5lclBhaXJzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgIG1hcC5vZmYoeC50eXBlLCB4Lmxpc3RlbmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1YnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFN0eWxlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFN0eWxlQ29uZmlnIHwgS25vd25NYXBib3hTdHlsZSB8IHN0cmluZz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc3R5bGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIG1hcC5zZXRTdHlsZShzdHlsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuc2V0U3R5bGUoc3R5bGUuc3R5bGUsIHN0eWxlLm9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldENlbnRlciA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludElucHV0PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChjZW50ZXI6IExhdExuZ1BvaW50SW5wdXQpID0+IHtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSB0aGlzLnNhZmVMYXRMbmdQb2ludChjZW50ZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldENlbnRlcihjZW50ZXJQb2ludCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Wm9vbSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHpvb206IE1hcGJveFpvb21MZXZlbCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldFpvb20oem9vbSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Wm9vbVJhbmdlID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPFBhcnRpYWw8TWFwYm94Wm9vbUxldmVsUmFuZ2U+PikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh6b29tUmFuZ2U6IFBhcnRpYWw8TWFwYm94Wm9vbUxldmVsUmFuZ2U+KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBtYXAuc2V0TWluWm9vbSh6b29tUmFuZ2UubWluIHx8IG51bGwpO1xuICAgICAgICAgICAgbWFwLnNldE1heFpvb20oem9vbVJhbmdlLm1heCB8fCBudWxsKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNaW5ab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWluWm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWF4Wm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRLZXlib2FyZERpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAua2V5Ym9hcmQuZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAua2V5Ym9hcmQuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldERyYWdSb3RhdGVEaXNhYmxlZCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRpc2FibGVkOiBNYXliZTxib29sZWFuPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgbWFwLmRyYWdSb3RhdGUuZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1JvdGF0ZS5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0RHJhZ1BhbkRpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1Bhbi5lbmFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hcC5kcmFnUGFuLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRab29tRGlzYWJsZWQgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkaXNhYmxlZDogTWF5YmU8Ym9vbGVhbj4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG1hcC5zY3JvbGxab29tLmVuYWJsZSgpO1xuICAgICAgICAgICAgICBtYXAuZG91YmxlQ2xpY2tab29tLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwLnNjcm9sbFpvb20uZGlzYWJsZSgpO1xuICAgICAgICAgICAgICBtYXAuZG91YmxlQ2xpY2tab29tLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0UGl0Y2gocGl0Y2gpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1pblBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGl0Y2g6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1pblBpdGNoKHBpdGNoKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRNYXhQaXRjaCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBpdGNoOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNYXhQaXRjaChwaXRjaCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0QmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxudW1iZXI+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGJlYXJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRCZWFyaW5nKGJlYXJpbmcpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJvdGF0ZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocm90YXRlSW5wdXQ6IE1hcGJveEJlYXJpbmcgfCBNYXBib3hSb3RhdGVUbykgPT4ge1xuICAgICAgICBjb25zdCByb3RhdGU6IE1hcGJveFJvdGF0ZVRvID0gdHlwZW9mIHJvdGF0ZUlucHV0ID09PSAnbnVtYmVyJyA/IHsgYmVhcmluZzogcm90YXRlSW5wdXQgfSA6IHJvdGF0ZUlucHV0O1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnJvdGF0ZVRvKHJvdGF0ZS5iZWFyaW5nLCByb3RhdGUub3B0aW9ucywgcm90YXRlPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc2V0Tm9ydGggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aD4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAucmVzZXROb3J0aChyZXNldD8ub3B0aW9ucywgcmVzZXQ/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVzZXROb3J0aFBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFJlc2V0Tm9ydGhQaXRjaD4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNldDogTWF5YmU8TWFwYm94UmVzZXROb3J0aFBpdGNoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5yZXNldE5vcnRoUGl0Y2gocmVzZXQ/Lm9wdGlvbnMsIHJlc2V0Py5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNuYXBUb05vcnRoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHNuYXA6IE1heWJlPE1hcGJveFNuYXBUb05vcnRoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zbmFwVG9Ob3J0aChzbmFwPy5vcHRpb25zLCBzbmFwPy5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpdFBvc2l0aW9ucyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGaXRQb3NpdGlvbnM+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmRGcm9tSW5wdXQgPSBsYXRMbmdCb3VuZEZyb21JbnB1dCh4LnBvc2l0aW9ucyk7XG5cbiAgICAgICAgaWYgKGJvdW5kRnJvbUlucHV0KSB7XG4gICAgICAgICAgY29uc3QgYm91bmQgPSB0aGlzLmxhdExuZ0JvdW5kKGJvdW5kRnJvbUlucHV0KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmZpdEJvdW5kcyhuZXcgTWFwYm94R2wuTG5nTGF0Qm91bmRzKGJvdW5kLnN3LCBib3VuZC5uZSksIHgub3B0aW9ucywgeC5ldmVudERhdGEpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpdEJvdW5kcyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hGaXRCb3VuZHM+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgYm91bmQgPSB0aGlzLmxhdExuZ0JvdW5kKHguYm91bmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5maXRCb3VuZHMobmV3IE1hcGJveEdsLkxuZ0xhdEJvdW5kcyhib3VuZC5zdywgYm91bmQubmUpLCB4Lm9wdGlvbnMsIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBqdW1wVG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94SnVtcFRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMuc2FmZUxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5qdW1wVG8oZmlsdGVyVW5kZWZpbmVkVmFsdWVzKHsgLi4ueC50bywgY2VudGVyIH0pLCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWFzZVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEVhc2VUbz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dENlbnRlciA9IHguY2VudGVyID8/IHgudG8/LmNlbnRlcjtcbiAgICAgICAgY29uc3QgY2VudGVyID0gaW5wdXRDZW50ZXIgPyB0aGlzLnNhZmVMYXRMbmdQb2ludChpbnB1dENlbnRlcikgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuZWFzZVRvKGZpbHRlclVuZGVmaW5lZFZhbHVlcyh7IC4uLngudG8sIGNlbnRlciB9KSwgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZseVRvID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEZseVRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMuc2FmZUxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5mbHlUbyhmaWx0ZXJVbmRlZmluZWRWYWx1ZXMoeyAuLi54LnRvLCBjZW50ZXIgfSksIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByZXNldFBpdGNoQW5kQmVhcmluZyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTx2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIG1hcC5zZXRQaXRjaCgwKTtcbiAgICAgICAgICAgIG1hcC5zZXRCZWFyaW5nKDApO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIC8vIE1BUks6IEFjY2Vzc29yc1xuICBnZXQgdGltZXJSZWZyZXNoUGVyaW9kKCkge1xuICAgIHJldHVybiB0aGlzLmRieE1hcGJveFNlcnZpY2UubWFwYm94TWFwU3RvcmVUaW1lclJlZnJlc2hQZXJpb2Q7XG4gIH1cblxuICBtb3ZpbmdUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLm1vdmVTdGF0ZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeCA9PT0gJ21vdmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW50ZXJ2YWwocGVyaW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoMCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgbGlmZWN5Y2xlUmVuZGVyVGltZXIocGVyaW9kID0gdGhpcy50aW1lclJlZnJlc2hQZXJpb2QpIHtcbiAgICByZXR1cm4gdGhpcy5saWZlY3ljbGVTdGF0ZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeCA9PT0gJ3JlbmRlcicpIHtcbiAgICAgICAgICByZXR1cm4gaW50ZXJ2YWwocGVyaW9kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoMCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgYXROZXh0SWRsZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlU3RhdGUkLnBpcGUoXG4gICAgICBtYXAoKHgpID0+IHggPT09ICdpZGxlJyksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU5leHRDZW50ZXJXaXRoT2Zmc2V0KGlucHV0T2Zmc2V0OiBMYXRMbmdQb2ludElucHV0KTogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4ge1xuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMubGF0TG5nUG9pbnQoaW5wdXRPZmZzZXQpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXROZXh0SWRsZSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgdGhpcy5jZW50ZXIkLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBtYXAoKGNlbnRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyID0ge1xuICAgICAgICAgICAgICBsYXQ6IG9mZnNldC5sYXQgKyBjZW50ZXIubGF0LFxuICAgICAgICAgICAgICBsbmc6IG9mZnNldC5sbmcgKyBjZW50ZXIubG5nXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIG5ld0NlbnRlcjtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU5leHRDZW50ZXJPZmZzZXRXaXRoU2NyZWVuTWFyZ2luQ2hhbmdlKHNpemluZzogRGJ4TWFwYm94TWFyZ2luQ2FsY3VsYXRpb25TaXppbmcpOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiB7XG4gICAgLy8gVE9ETzogQ29uc2lkZXIgY2FsY3VsYXRpbmcgdGhpcyB1c2luZyB0aGUgdmlld3BvcnQoKSBmdW5jdGlvbiBmcm9tIEBwbGFjZW1hcmtpby9nZW8tdmlld3BvcnRcbiAgICByZXR1cm4gdGhpcy5hdE5leHRJZGxlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICB0aGlzLmJvdW5kJC5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgbWFwKChib3VuZHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBkaWZmTGF0TG5nQm91bmRQb2ludHMoYm91bmRzLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlciA9IGxhdExuZ0JvdW5kQ2VudGVyUG9pbnQoYm91bmRzKTtcblxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSBzaXppbmcubGVmdE1hcmdpbiArIHNpemluZy5yaWdodE1hcmdpbjsgLy8gMzAwICsgMFxuICAgICAgICAgICAgY29uc3QgbmV3V2lkdGggPSBzaXppbmcuZnVsbFdpZHRoIC0gb2Zmc2V0V2lkdGg7IC8vIDEwMDAgLSAzMDAgLSAwXG4gICAgICAgICAgICBjb25zdCBuZXdXaWR0aFJhdGlvID0gbmV3V2lkdGggLyBzaXppbmcuZnVsbFdpZHRoOyAvLyA3MDAgLyAxMDAwXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50ZXJMb25naXR1ZGVXaWR0aCA9IGRpZmYubG5nICogbmV3V2lkdGhSYXRpbzsgLy8gNzAlIG9mZnNldFxuXG4gICAgICAgICAgICBjb25zdCBlZmZlY3RpdmVPZmZzZXQ6IExhdExuZ1BvaW50ID0ge1xuICAgICAgICAgICAgICBsYXQ6IDAsXG4gICAgICAgICAgICAgIGxuZzogbmV3Q2VudGVyTG9uZ2l0dWRlV2lkdGggLyAyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSBhZGRMYXRMbmdQb2ludHMoYm91bmRzLnN3LCBlZmZlY3RpdmVPZmZzZXQpO1xuICAgICAgICAgICAgbmV3Q2VudGVyLmxhdCA9IGNlbnRlci5sYXQ7IC8vIHJldGFpbiBjZW50ZXIgcG9zaXRpb25cblxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeyBzaXppbmcsIGJvdW5kcywgZWZmZWN0aXZlT2Zmc2V0LCBuZXdXaWR0aCwgb2Zmc2V0V2lkdGgsIGRpZmYsIGNlbnRlciwgbmV3Q2VudGVyIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3Q2VudGVyO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZmlsdGVyQnlWaWV3cG9ydEJvdW5kPFQ+KGlucHV0OiBGaWx0ZXJNYXBib3hCb3VuZFJlYWRJdGVtVmFsdWVGdW5jdGlvbjxUPiB8IE9taXQ8RmlsdGVyTWFwYm94Qm91bmRDb25maWc8VD4sICdib3VuZEZ1bmN0aW9uT2JzJyB8ICdib3VuZERlY2lzaW9uT2JzJz4pOiBPcGVyYXRvckZ1bmN0aW9uPFRbXSwgVFtdPiB7XG4gICAgY29uc3QgY29uZmlnID0gdHlwZW9mIGlucHV0ID09PSAnZnVuY3Rpb24nID8geyByZWFkVmFsdWU6IGlucHV0IH0gOiBpbnB1dDtcblxuICAgIHJldHVybiBmaWx0ZXJCeU1hcGJveFZpZXdwb3J0Qm91bmQoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgYm91bmRGdW5jdGlvbk9iczogdGhpcy52aWV3cG9ydEJvdW5kRnVuY3Rpb24kLFxuICAgICAgYm91bmREZWNpc2lvbk9iczogdGhpcy5vdmVybGFwc0JvdW5kRnVuY3Rpb24kXG4gICAgfSk7XG4gIH1cblxuICByZWFkb25seSBjdXJyZW50TWFwU2VydmljZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXBTZXJ2aWNlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWFwU2VydmljZSQgPSB0aGlzLmN1cnJlbnRNYXBTZXJ2aWNlJC5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBJbnN0YW5jZSQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94R2wuTWFwPj4gPSB0aGlzLmN1cnJlbnRNYXBTZXJ2aWNlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoY3VycmVudE1hcFNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiB7XG4gICAgICBpZiAoY3VycmVudE1hcFNlcnZpY2UpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRNYXBTZXJ2aWNlLm1hcExvYWRlZCQucGlwZShcbiAgICAgICAgICBkZWZhdWx0SWZFbXB0eSh1bmRlZmluZWQpLFxuICAgICAgICAgIG1hcCgoKSA9PiBjdXJyZW50TWFwU2VydmljZS5tYXBJbnN0YW5jZSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXBJbnN0YW5jZSQgPSB0aGlzLmN1cnJlbnRNYXBJbnN0YW5jZSQucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICByZWFkb25seSBib3VuZFJlZnJlc2hTZXR0aW5ncyQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5ib3VuZFJlZnJlc2hTZXR0aW5ncyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtb3ZlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubW92ZVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbGlmZWN5Y2xlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubGlmZWN5Y2xlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB6b29tU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguem9vbVN0YXRlKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcm90YXRlU3RhdGUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgucm90YXRlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc0luaXRpYWxpemVkJCA9IHRoaXMuY3VycmVudE1hcEluc3RhbmNlJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgaWYgKCF4KSB7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5tb3ZlU3RhdGUkLnBpcGUobWFwKCh4KSA9PiB4ID09PSAnaWRsZScpKSwgdGhpcy5saWZlY3ljbGVTdGF0ZSQucGlwZShtYXAoKHgpID0+IHggPT09ICdpZGxlJykpXSkucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKFttLCBsXSkgPT4gbSAmJiBsKSxcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgd2hlbkluaXRpYWxpemVkJCA9IHRoaXMuaXNJbml0aWFsaXplZCQucGlwZShcbiAgICBmaWx0ZXIoKHgpID0+IHRydWUpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNSZW5kZXJpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdyZW5kZXInKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNNb3ZpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1vdmVTdGF0ZSQucGlwZShcbiAgICAgICAgbWFwKCh4KSA9PiB4ID09PSAnbW92aW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzWm9vbWluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMuem9vbVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICd6b29taW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzUm90YXRpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLnJvdGF0ZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdyb3RhdGluZycpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tb3ZpbmdUaW1lciA9IHRoaXMubW92aW5nVGltZXIoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyaW5nVGltZXIgPSB0aGlzLmxpZmVjeWNsZVJlbmRlclRpbWVyKCk7XG5cbiAgcmVhZG9ubHkgY2VudGVyTm93JDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fbW92aW5nVGltZXIucGlwZShtYXAoKCkgPT4gdGhpcy5sYXRMbmdQb2ludCh4LmdldENlbnRlcigpKSkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgY2VudGVyJDogT2JzZXJ2YWJsZTxMYXRMbmdQb2ludD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3ZpbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNlbnRlck5vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPExhdExuZ1BvaW50Pihpc1NhbWVMYXRMbmdQb2ludCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHgubWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZVZlY3RvciksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjdXJyZW50TWFwQ2FudmFzU2l6ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXBDYW52YXNTaXplKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxNYXliZTxWZWN0b3I+Pihpc1NhbWVWZWN0b3IpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXAgY2FudmFzIHNpemUgd2l0aCBjb25zaWRlcmF0aW9uIHRvIHRoZSB2aXJ0dWFsIHZpZXdwb3J0IHNpemUuXG4gICAqL1xuICByZWFkb25seSBtYXBDYW52YXNTaXplJCA9IHRoaXMuY3VycmVudE1hcENhbnZhc1NpemUkLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgbWluaW11bU1hcENhbnZhc1NpemUobWluVmVjdG9yOiBQYXJ0aWFsPFZlY3Rvcj4pOiBPYnNlcnZhYmxlPFZlY3Rvcj4ge1xuICAgIGNvbnN0IHJlc2l6ZUZuID0gdmVjdG9yTWluaW11bVNpemVSZXNpemVGdW5jdGlvbihtaW5WZWN0b3IpO1xuICAgIHJldHVybiB0aGlzLm1hcENhbnZhc1NpemUkLnBpcGUoXG4gICAgICBtYXAoKHgpID0+IHJlc2l6ZUZuKHgpKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPFZlY3Rvcj4oaXNTYW1lVmVjdG9yKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWFwIGNhbnZhcyBzaXplIHdpdGggY29uc2lkZXJhdGlvbiB0byB0aGUgdmlydHVhbCB2aWV3cG9ydCBzaXplLlxuICAgKi9cbiAgcmVhZG9ubHkgdmlydHVhbE1hcENhbnZhc1NpemUkID0gdGhpcy5taW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSQucGlwZShcbiAgICBzd2l0Y2hNYXAoKG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplKSA9PiB7XG4gICAgICBpZiAobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluaW11bU1hcENhbnZhc1NpemUobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwQ2FudmFzU2l6ZSQ7XG4gICAgICB9XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8VmVjdG9yPihpc1NhbWVWZWN0b3IpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcmF3Vmlld3BvcnRCb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxNYXBib3hWaWV3cG9ydEJvdW5kRnVuY3Rpb24+ID0gdGhpcy5tYXBDYW52YXNTaXplJC5waXBlKFxuICAgIG1hcCgobWFwQ2FudmFzU2l6ZSkgPT4gbWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uKHsgbWFwQ2FudmFzU2l6ZSB9KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIE1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbiBvYnNlcnZhYmxlIHRoYXQgcmV0dXJucyB0aGUgbWluaW11bSB2aWV3cG9ydCBzaXplLlxuICAgKlxuICAgKiBAcGFyYW0gbWluVmVjdG9yXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB2aWV3cG9ydEJvdW5kRnVuY3Rpb25XaXRoTWluaW11bVNpemUobWluVmVjdG9yOiBQYXJ0aWFsPFZlY3Rvcj4pOiBPYnNlcnZhYmxlPE1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbj4ge1xuICAgIGNvbnN0IHJlc2l6ZUZuID0gdmVjdG9yTWluaW11bVNpemVSZXNpemVGdW5jdGlvbihtaW5WZWN0b3IpO1xuICAgIHJldHVybiB0aGlzLm1hcENhbnZhc1NpemUkLnBpcGUoXG4gICAgICBtYXAoKHgpID0+IHJlc2l6ZUZuKHgpKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPFZlY3Rvcj4oaXNTYW1lVmVjdG9yKSxcbiAgICAgIG1hcCgobWFwQ2FudmFzU2l6ZSkgPT4gbWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uKHsgbWFwQ2FudmFzU2l6ZSB9KSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICByZWFkb25seSB2aWV3cG9ydEJvdW5kRnVuY3Rpb24kOiBPYnNlcnZhYmxlPE1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbj4gPSB0aGlzLm1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplJC5waXBlKFxuICAgIHN3aXRjaE1hcCgobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpID0+IHtcbiAgICAgIGlmIChtaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3cG9ydEJvdW5kRnVuY3Rpb25XaXRoTWluaW11bVNpemUobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3Vmlld3BvcnRCb3VuZEZ1bmN0aW9uJDtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHZpcnR1YWxCb3VuZCQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy52aWV3cG9ydEJvdW5kRnVuY3Rpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKChmbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuYm91bmRSZWZyZXNoU2V0dGluZ3MkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoc2V0dGluZ3MpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHRocm90dGxlOiB0aHJvdHRsZU1zLCByZWZyZXNoVHlwZSB9ID0gc2V0dGluZ3M7XG5cbiAgICAgICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPFtMYXRMbmdQb2ludCwgWm9vbUxldmVsXT47XG5cbiAgICAgICAgICBzd2l0Y2ggKHJlZnJlc2hUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdhbHdheXMnOlxuICAgICAgICAgICAgICBvYnMgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmNlbnRlck5vdyQsIHRoaXMuem9vbU5vdyRdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3aGVuX25vdF9yZW5kZXJpbmcnOlxuICAgICAgICAgICAgY2FzZSAnb25seV9hZnRlcl9yZW5kZXJfZmluaXNoZXMnOlxuICAgICAgICAgICAgICBvYnMgPSB0aGlzLmJvdW5kJC5waXBlKHN3aXRjaE1hcCgoKSA9PiBjb21iaW5lTGF0ZXN0KFt0aGlzLmNlbnRlck5vdyQsIHRoaXMuem9vbU5vdyRdKSkpOyAvLyByZWZyZXNoIHdoZW5ldmVyIHRoZSBib3VuZCByZWZyZXNoZXNcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG9icy5waXBlKFxuICAgICAgICAgICAgdGhyb3R0bGVUaW1lKHRocm90dGxlTXMsIHVuZGVmaW5lZCwgeyBsZWFkaW5nOiB0cnVlLCB0cmFpbGluZzogdHJ1ZSB9KSxcbiAgICAgICAgICAgIG1hcCgoW2NlbnRlciwgem9vbV0pID0+XG4gICAgICAgICAgICAgIGZuKHtcbiAgICAgICAgICAgICAgICBjZW50ZXIsXG4gICAgICAgICAgICAgICAgem9vbVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZUxhdExuZ0JvdW5kKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1hcmdpbiQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tYXJnaW4pLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhICE9IG51bGwgJiYgYiAhPSBudWxsICYmIGEuZnVsbFdpZHRoID09PSBiLmZ1bGxXaWR0aCAmJiBhLmxlZnRNYXJnaW4gPT09IGIubGVmdE1hcmdpbiAmJiBhLnJpZ2h0TWFyZ2luID09PSBiLnJpZ2h0TWFyZ2luKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJldmVyc2VNYXJnaW4kID0gdGhpcy5tYXJnaW4kLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB7XG4gICAgICBpZiAoeCkge1xuICAgICAgICByZXR1cm4geyBsZWZ0TWFyZ2luOiAteC5sZWZ0TWFyZ2luLCByaWdodE1hcmdpbjogLXgucmlnaHRNYXJnaW4sIGZ1bGxXaWR0aDogeC5mdWxsV2lkdGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgY2VudGVyR2l2ZW5NYXJnaW4kOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXZlcnNlTWFyZ2luJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgICBpZiAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2VudGVyJC5waXBlKHN3aXRjaE1hcCgoXykgPT4gdGhpcy5jYWxjdWxhdGVOZXh0Q2VudGVyT2Zmc2V0V2l0aFNjcmVlbk1hcmdpbkNoYW5nZSh4KSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc01vdmluZyQucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKCh4KSA9PiAheCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNlbnRlciQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByYXdCb3VuZE5vdyQ6IE9ic2VydmFibGU8TGF0TG5nQm91bmQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+XG4gICAgICAgICAgdGhpcy5fcmVuZGVyaW5nVGltZXIucGlwZShcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGJvdW5kID0geC5nZXRCb3VuZHMoKTtcbiAgICAgICAgICAgICAgY29uc3QgYm91bmRTdyA9IGJvdW5kLmdldFNvdXRoV2VzdCgpO1xuICAgICAgICAgICAgICBjb25zdCBib3VuZE5lID0gYm91bmQuZ2V0Tm9ydGhFYXN0KCk7XG5cbiAgICAgICAgICAgICAgY29uc3Qgc3cgPSBpc0RlZmF1bHRMYXRMbmdQb2ludChib3VuZFN3KSA/IHN3TW9zdExhdExuZ1BvaW50KCkgOiB7IGxhdDogYm91bmRTdy5sYXQsIGxuZzogYm91bmRTdy5sbmcgfTtcbiAgICAgICAgICAgICAgY29uc3QgbmUgPSBpc0RlZmF1bHRMYXRMbmdQb2ludChib3VuZE5lKSA/IG5lTW9zdExhdExuZ1BvaW50KCkgOiB7IGxhdDogYm91bmROZS5sYXQsIGxuZzogYm91bmROZS5sbmcgfTtcblxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sYXRMbmdCb3VuZChzdywgbmUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZUxhdExuZ0JvdW5kKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJhd0JvdW5kJDogT2JzZXJ2YWJsZTxMYXRMbmdCb3VuZD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuYm91bmRSZWZyZXNoU2V0dGluZ3MkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoc2V0dGluZ3MpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHRocm90dGxlOiB0aHJvdHRsZU1zLCByZWZyZXNoVHlwZSB9ID0gc2V0dGluZ3M7XG5cbiAgICAgICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPExhdExuZ0JvdW5kPjtcblxuICAgICAgICAgIHN3aXRjaCAocmVmcmVzaFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Fsd2F5cyc6XG4gICAgICAgICAgICAgIG9icyA9IHRoaXMucmF3Qm91bmROb3ckO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3doZW5fbm90X3JlbmRlcmluZyc6XG4gICAgICAgICAgICAgIG9icyA9IHRoaXMuaXNSZW5kZXJpbmckLnBpcGUoc3dpdGNoTWFwKCh4KSA9PiAoeCA/IEVNUFRZIDogdGhpcy5yYXdCb3VuZE5vdyQpKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb25seV9hZnRlcl9yZW5kZXJfZmluaXNoZXMnOlxuICAgICAgICAgICAgICBvYnMgPSB0aGlzLmlzUmVuZGVyaW5nJC5waXBlKFxuICAgICAgICAgICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMucmF3Qm91bmROb3ckLnBpcGUoZmlyc3QoKSkpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBvYnMucGlwZSh0aHJvdHRsZVRpbWUodGhyb3R0bGVNcywgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlIH0pKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lTGF0TG5nQm91bmQpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdXNlVmlydHVhbEJvdW5kJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnVzZVZpcnR1YWxCb3VuZCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGJvdW5kJDogT2JzZXJ2YWJsZTxMYXRMbmdCb3VuZD4gPSB0aGlzLnVzZVZpcnR1YWxCb3VuZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKHVzZVZpcnR1YWxCb3VuZCkgPT4ge1xuICAgICAgaWYgKHVzZVZpcnR1YWxCb3VuZCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXJ0dWFsQm91bmQkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3Qm91bmQkO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgYm91bmRTaXppbmckOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMuYm91bmQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBkaWZmTGF0TG5nQm91bmRQb2ludHMoeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgYm91bmRXcmFwc0Fyb3VuZFdvcmxkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuYm91bmQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBsYXRMbmdCb3VuZFdyYXBzTWFwKHgpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNXaXRoaW5Cb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxJc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24+ID0gdGhpcy5ib3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IGlzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbih4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBvdmVybGFwc0JvdW5kRnVuY3Rpb24kOiBPYnNlcnZhYmxlPE92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbj4gPSB0aGlzLnZpcnR1YWxCb3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IG92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbih4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB6b29tTm93JDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX3JlbmRlcmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHguZ2V0Wm9vbSgpIGFzIE1hcGJveFpvb21MZXZlbCkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgem9vbSQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1pvb21pbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnpvb21Ob3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHBpdGNoTm93JCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9tb3ZpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB4LmdldFBpdGNoKCkpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IHBpdGNoJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1JvdGF0aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5waXRjaE5vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgYmVhcmluZ05vdyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fbW92aW5nVGltZXIucGlwZShtYXAoKCkgPT4geC5nZXRCZWFyaW5nKCkpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGJlYXJpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzUm90YXRpbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmJlYXJpbmdOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGNvbnRlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguY29udGVudCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGhhc0NvbnRlbnQkID0gdGhpcy5jb250ZW50JC5waXBlKG1hcChCb29sZWFuKSk7XG5cbiAgcmVhZG9ubHkgY2xpY2tFdmVudCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5jbGlja0V2ZW50KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZG91YmxlQ2xpY2tFdmVudCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5kb3VibGVDbGlja0V2ZW50KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcmlnaHRDbGlja0V2ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnJpZ2h0Q2xpY2tFdmVudCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8vIE1BUks6IFN0YXRlIENoYW5nZXNcbiAgcmVhZG9ubHkgc2V0TWFyZ2luID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbWFyZ2luOiBNYXliZTxEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZz4pID0+ICh7IC4uLnN0YXRlLCBtYXJnaW46IG1hcmdpbiAmJiAobWFyZ2luLnJpZ2h0TWFyZ2luICE9PSAwIHx8IG1hcmdpbi5sZWZ0TWFyZ2luICE9PSAwKSA/IG1hcmdpbiA6IHVuZGVmaW5lZCB9KSk7XG4gIHJlYWRvbmx5IHNldE1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemU6IE1heWJlPFBhcnRpYWw8VmVjdG9yPj4pID0+ICh7IC4uLnN0YXRlLCBtaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSB9KSk7XG4gIHJlYWRvbmx5IHNldFVzZVZpcnR1YWxCb3VuZCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHVzZVZpcnR1YWxCb3VuZDogYm9vbGVhbikgPT4gKHsgLi4uc3RhdGUsIHVzZVZpcnR1YWxCb3VuZCB9KSk7XG4gIHJlYWRvbmx5IHNldEJvdW5kUmVmcmVzaFNldHRpbmdzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgYm91bmRSZWZyZXNoU2V0dGluZ3M6IFBhcnRpYWw8RGJ4TWFwYm94U3RvcmVCb3VuZFJlZnJlc2hTZXR0aW5ncz4pID0+ICh7IC4uLnN0YXRlLCBib3VuZFJlZnJlc2hTZXR0aW5nczogeyAuLi5zdGF0ZS5ib3VuZFJlZnJlc2hTZXR0aW5ncywgLi4uYm91bmRSZWZyZXNoU2V0dGluZ3MgfSB9KSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TWFwU2VydmljZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1hcFNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiAoeyBtYXBTZXJ2aWNlLCBtb3ZlU3RhdGU6ICdpbml0JywgbGlmZWN5Y2xlU3RhdGU6ICdpbml0Jywgem9vbVN0YXRlOiAnaW5pdCcsIHJvdGF0ZVN0YXRlOiAnaW5pdCcsIHJldGFpbkNvbnRlbnQ6IHN0YXRlLnJldGFpbkNvbnRlbnQsIGNvbnRlbnQ6IHN0YXRlLnJldGFpbkNvbnRlbnQgPyBzdGF0ZS5jb250ZW50IDogdW5kZWZpbmVkLCB1c2VWaXJ0dWFsQm91bmQ6IHN0YXRlLnVzZVZpcnR1YWxCb3VuZCwgYm91bmRSZWZyZXNoU2V0dGluZ3M6IHN0YXRlLmJvdW5kUmVmcmVzaFNldHRpbmdzIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TGlmZWN5Y2xlU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBsaWZlY3ljbGVTdGF0ZTogTWFwYm94TWFwTGlmZWN5Y2xlU3RhdGUpID0+ICh7IC4uLnN0YXRlLCBsaWZlY3ljbGVTdGF0ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldE1vdmVTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1vdmVTdGF0ZTogTWFwYm94TWFwTW92ZVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgbW92ZVN0YXRlIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0Wm9vbVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgem9vbVN0YXRlOiBNYXBib3hNYXBab29tU3RhdGUpID0+ICh7IC4uLnN0YXRlLCB6b29tU3RhdGUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRSb3RhdGVTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHJvdGF0ZVN0YXRlOiBNYXBib3hNYXBSb3RhdGVTdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIHJvdGF0ZVN0YXRlIH0pKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRNYXBDYW52YXNTaXplID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbWFwQ2FudmFzU2l6ZTogVmVjdG9yKSA9PiAoeyAuLi5zdGF0ZSwgbWFwQ2FudmFzU2l6ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldENsaWNrRXZlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBjbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgY2xpY2tFdmVudCB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldERvdWJsZUNsaWNrRXZlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBkb3VibGVDbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgZG91YmxlQ2xpY2tFdmVudCB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJpZ2h0Q2xpY2tFdmVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHJpZ2h0Q2xpY2tFdmVudDogRGJ4TWFwYm94Q2xpY2tFdmVudCkgPT4gKHsgLi4uc3RhdGUsIHJpZ2h0Q2xpY2tFdmVudCB9KSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0RXJyb3IgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBlcnJvcjogRXJyb3IpID0+ICh7IC4uLnN0YXRlLCBlcnJvciB9KSk7XG5cbiAgcmVhZG9ubHkgY2xlYXJDb250ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIGNvbnRlbnQ6IHVuZGVmaW5lZCB9KSk7XG4gIHJlYWRvbmx5IHNldENvbnRlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBjb250ZW50OiBNYXliZTxEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWc8dW5rbm93bj4+KSA9PiAoeyAuLi5zdGF0ZSwgY29udGVudCB9KSk7XG59XG4iXX0=
545
+ }], ctorParameters: () => [] });
546
+ function setDrawerContent(state, drawerContent) {
547
+ return { ...state, drawerContent, content: drawerContent };
548
+ }
549
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LXdlYi9tYXBib3gvc3JjL2xpYi9tYXBib3guc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLDJCQUEyQixFQUUzQixtQkFBbUIsRUFHbkIsbUJBQW1CLEVBR25CLDJCQUEyQixFQUMzQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFFbkIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQiwrQkFBK0IsRUFDL0IsWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBZ0IsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBb0IsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdOLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXBELE9BQU8sRUFBRSwyQkFBMkIsRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFtRSwyQkFBMkIsRUFBRSxNQUFN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ZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgaXNTYW1lTGF0TG5nQm91bmQsXG4gIGlzU2FtZUxhdExuZ1BvaW50LFxuICBJc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24sXG4gIGlzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbixcbiAgTGF0TG5nQm91bmQsXG4gIGxhdExuZ0JvdW5kRnVuY3Rpb24sXG4gIExhdExuZ1BvaW50SW5wdXQsXG4gIExhdExuZ1BvaW50LFxuICBsYXRMbmdQb2ludEZ1bmN0aW9uLFxuICBNYXliZSxcbiAgT3ZlcmxhcHNMYXRMbmdCb3VuZEZ1bmN0aW9uLFxuICBvdmVybGFwc0xhdExuZ0JvdW5kRnVuY3Rpb24sXG4gIGRpZmZMYXRMbmdCb3VuZFBvaW50cyxcbiAgbGF0TG5nQm91bmRDZW50ZXJQb2ludCxcbiAgYWRkTGF0TG5nUG9pbnRzLFxuICBpc0RlZmF1bHRMYXRMbmdQb2ludCxcbiAgc3dNb3N0TGF0TG5nUG9pbnQsXG4gIG5lTW9zdExhdExuZ1BvaW50LFxuICBsYXRMbmdCb3VuZFdyYXBzTWFwLFxuICBWZWN0b3IsXG4gIGZpbHRlclVuZGVmaW5lZFZhbHVlcyxcbiAgbGF0TG5nQm91bmRGcm9tSW5wdXQsXG4gIHZlY3Rvck1pbmltdW1TaXplUmVzaXplRnVuY3Rpb24sXG4gIGlzU2FtZVZlY3RvcixcbiAgWm9vbUxldmVsXG59IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RvcmUgfSBmcm9tICdAbmdyeC9jb21wb25lbnQtc3RvcmUnO1xuaW1wb3J0IHsgTWFwU2VydmljZSB9IGZyb20gJ25neC1tYXBib3gtZ2wnO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwLCBORVZFUiwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgc3RhcnRXaXRoLCBpbnRlcnZhbCwgZmlyc3QsIGNvbWJpbmVMYXRlc3QsIEVNUFRZLCBPcGVyYXRvckZ1bmN0aW9uLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIE1hcGJveEdsIGZyb20gJ21hcGJveC1nbCc7XG5pbXBvcnQgeyBEYnhNYXBib3hDbGlja0V2ZW50LCBLbm93bk1hcGJveFN0eWxlLCBNYXBib3hCZWFyaW5nLCBNYXBib3hFYXNlVG8sIE1hcGJveEV2ZW50RGF0YSwgTWFwYm94Rml0Qm91bmRzLCBNYXBib3hGaXRQb3NpdGlvbnMsIE1hcGJveEZseVRvLCBNYXBib3hKdW1wVG8sIE1hcGJveFJlc2V0Tm9ydGgsIE1hcGJveFJlc2V0Tm9ydGhQaXRjaCwgTWFwYm94Um90YXRlVG8sIE1hcGJveFNuYXBUb05vcnRoLCBNYXBib3hTdHlsZUNvbmZpZywgTWFwYm94Wm9vbUxldmVsLCBNYXBib3hab29tTGV2ZWxSYW5nZSB9IGZyb20gJy4vbWFwYm94JztcbmltcG9ydCB7IERieE1hcGJveFNlcnZpY2UgfSBmcm9tICcuL21hcGJveC5zZXJ2aWNlJztcbmltcG9ydCB7IERieEluamVjdGlvbkNvbXBvbmVudENvbmZpZyB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcbmltcG9ydCB7IG1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbiwgTWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uIH0gZnJvbSAnLi9tYXBib3gudXRpbCc7XG5pbXBvcnQgeyBGaWx0ZXJNYXBib3hCb3VuZENvbmZpZywgRmlsdGVyTWFwYm94Qm91bmRSZWFkSXRlbVZhbHVlRnVuY3Rpb24sIGZpbHRlckJ5TWFwYm94Vmlld3BvcnRCb3VuZCB9IGZyb20gJy4vbWFwYm94LnJ4anMnO1xuXG5leHBvcnQgdHlwZSBNYXBib3hNYXBMaWZlY3ljbGVTdGF0ZSA9ICdpbml0JyB8ICdsb2FkJyB8ICdyZW5kZXInIHwgJ2lkbGUnO1xuZXhwb3J0IHR5cGUgTWFwYm94TWFwTW92ZVN0YXRlID0gJ2luaXQnIHwgJ2lkbGUnIHwgJ21vdmluZyc7XG5leHBvcnQgdHlwZSBNYXBib3hNYXBab29tU3RhdGUgPSAnaW5pdCcgfCAnaWRsZScgfCAnem9vbWluZyc7XG5leHBvcnQgdHlwZSBNYXBib3hNYXBSb3RhdGVTdGF0ZSA9ICdpbml0JyB8ICdpZGxlJyB8ICdyb3RhdGluZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTWFwYm94TGlzdGVuZXJQYWlyIHtcbiAgdHlwZTogc3RyaW5nO1xuICBsaXN0ZW5lcjogKGV2OiBNYXBib3hFdmVudERhdGEpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZWRNYXBib3hMaXN0ZW5lclBhaXI8VCBleHRlbmRzIGtleW9mIE1hcGJveEdsLk1hcEV2ZW50VHlwZT4ge1xuICB0eXBlOiBUO1xuICBsaXN0ZW5lcjogKGV2OiBNYXBib3hHbC5NYXBFdmVudFR5cGVbVF0gJiBNYXBib3hFdmVudERhdGEpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4TWFwYm94TWFyZ2luQ2FsY3VsYXRpb25TaXppbmcge1xuICBsZWZ0TWFyZ2luOiBudW1iZXI7XG4gIHJpZ2h0TWFyZ2luOiBudW1iZXI7XG4gIGZ1bGxXaWR0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBEYnhNYXBib3hTdG9yZUJvdW5kUmVmcmVzaFR5cGUgPSAnYWx3YXlzJyB8ICd3aGVuX25vdF9yZW5kZXJpbmcnIHwgJ29ubHlfYWZ0ZXJfcmVuZGVyX2ZpbmlzaGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hTdG9yZUJvdW5kUmVmcmVzaFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIE1heCBib3VuZCByZWZyZXNoIGludGVydmFsLlxuICAgKi9cbiAgdGhyb3R0bGU6IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHdhaXQgdG8gdXBkYXRlIHRoZSBib3VuZCB1bnRpbCBhZnRlciBpdCBoYXMgZmluaXNoZWQgcmVuZGVyaW5nLlxuICAgKi9cbiAgcmVmcmVzaFR5cGU6IERieE1hcGJveFN0b3JlQm91bmRSZWZyZXNoVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYnhNYXBib3hTdG9yZVN0YXRlIHtcbiAgLyoqXG4gICAqIEN1cnJlbnQgTWFwU2VydmljZSBiZWluZyB1dGlsaXplZC5cbiAgICovXG4gIHJlYWRvbmx5IG1hcFNlcnZpY2U/OiBNYXliZTxNYXBTZXJ2aWNlPjtcbiAgcmVhZG9ubHkgbGlmZWN5Y2xlU3RhdGU6IE1hcGJveE1hcExpZmVjeWNsZVN0YXRlO1xuICByZWFkb25seSBtb3ZlU3RhdGU6IE1hcGJveE1hcE1vdmVTdGF0ZTtcbiAgcmVhZG9ubHkgem9vbVN0YXRlOiBNYXBib3hNYXBab29tU3RhdGU7XG4gIHJlYWRvbmx5IHJvdGF0ZVN0YXRlOiBNYXBib3hNYXBSb3RhdGVTdGF0ZTtcbiAgLyoqXG4gICAqIFZpc3VhbCBjb250YWluZXIgc2l6ZSBvZiB0aGUgbWFwLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFwQ2FudmFzU2l6ZT86IE1heWJlPFZlY3Rvcj47XG4gIC8qKlxuICAgKiBMYXRlc3QgY2xpY2sgZXZlbnRcbiAgICovXG4gIHJlYWRvbmx5IGNsaWNrRXZlbnQ/OiBNYXliZTxEYnhNYXBib3hDbGlja0V2ZW50PjtcbiAgLyoqXG4gICAqIExhdGVzdCBkb3VibGUtY2xpY2sgZXZlbnRcbiAgICovXG4gIHJlYWRvbmx5IGRvdWJsZUNsaWNrRXZlbnQ/OiBNYXliZTxEYnhNYXBib3hDbGlja0V2ZW50PjtcbiAgLyoqXG4gICAqIExhdGVzdCBjb250ZXh0bWVudSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHJpZ2h0Q2xpY2tFdmVudD86IE1heWJlPERieE1hcGJveENsaWNrRXZlbnQ+O1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcmV0YWluIGNvbnRlbnQgYmV0d2VlbiByZXNldHMuXG4gICAqXG4gICAqIFRydWUgYnkgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IHJldGFpbkNvbnRlbnQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDdXN0b20gZHJhd2VyIGNvbnRlbnQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGRyYXdlckNvbnRlbnQgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ/OiBNYXliZTxEYnhJbmplY3Rpb25Db21wb25lbnRDb25maWc8dW5rbm93bj4+O1xuICAvKipcbiAgICogQ3VzdG9tIGRyYXdlciBjb250ZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBkcmF3ZXJDb250ZW50PzogTWF5YmU8RGJ4SW5qZWN0aW9uQ29tcG9uZW50Q29uZmlnPHVua25vd24+PjtcbiAgLyoqXG4gICAqIExhdGVzdCBlcnJvclxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3I/OiBNYXliZTxFcnJvcj47XG4gIC8qKlxuICAgKiBNYXAgbWFyZ2luL29mZnNldFxuICAgKi9cbiAgcmVhZG9ubHkgbWFyZ2luPzogTWF5YmU8RGJ4TWFwYm94TWFyZ2luQ2FsY3VsYXRpb25TaXppbmc+O1xuICAvKipcbiAgICogTWluaW11bSB2ZWN0b3Igc2l6ZSB0byB1c2UgZm9yIHRoZSB2aWV3cG9ydEJvdW5kRnVuY3Rpb24kLiBJZiBub3QgZGVmaW5lZCB0aGVyZSBpcyBubyBtaW5pbXVtLlxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemU/OiBNYXliZTxQYXJ0aWFsPFZlY3Rvcj4+O1xuICAvKipcbiAgICogQm91bmQgcmVmcmVzaCBzZXR0aW5nc1xuICAgKi9cbiAgcmVhZG9ubHkgYm91bmRSZWZyZXNoU2V0dGluZ3M6IERieE1hcGJveFN0b3JlQm91bmRSZWZyZXNoU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byB1c2UgdGhlIHZpcnR1YWwgYm91bmQgKHZzIHJhdyBib3VuZCkgZm9yIGFsbCBib3VuZC1yZWxhdGVkIG9ic2VydmFibGVzLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlVmlydHVhbEJvdW5kOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFN0b3JlIHVzZWQgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhNYXBib3hNYXBTdG9yZSBleHRlbmRzIENvbXBvbmVudFN0b3JlPERieE1hcGJveFN0b3JlU3RhdGU+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkYnhNYXBib3hTZXJ2aWNlID0gaW5qZWN0KERieE1hcGJveFNlcnZpY2UpO1xuXG4gIHByaXZhdGUgc2FmZUxhdExuZ1BvaW50ID0gbGF0TG5nUG9pbnRGdW5jdGlvbih7IHdyYXA6IHRydWUgfSk7XG4gIHByaXZhdGUgbGF0TG5nUG9pbnQgPSBsYXRMbmdQb2ludEZ1bmN0aW9uKHsgd3JhcDogZmFsc2UsIHZhbGlkYXRlOiBmYWxzZSB9KTtcbiAgcHJpdmF0ZSBsYXRMbmdCb3VuZCA9IGxhdExuZ0JvdW5kRnVuY3Rpb24oeyBwb2ludEZ1bmN0aW9uOiB0aGlzLmxhdExuZ1BvaW50IH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKHtcbiAgICAgIGxpZmVjeWNsZVN0YXRlOiAnaW5pdCcsXG4gICAgICBtb3ZlU3RhdGU6ICdpbml0JyxcbiAgICAgIHpvb21TdGF0ZTogJ2luaXQnLFxuICAgICAgcm90YXRlU3RhdGU6ICdpbml0JyxcbiAgICAgIHJldGFpbkNvbnRlbnQ6IHRydWUsXG4gICAgICB1c2VWaXJ0dWFsQm91bmQ6IHRydWUsXG4gICAgICBib3VuZFJlZnJlc2hTZXR0aW5nczoge1xuICAgICAgICB0aHJvdHRsZTogMzAwLFxuICAgICAgICByZWZyZXNoVHlwZTogJ2Fsd2F5cydcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1BUks6IEVmZmVjdHNcbiAgcmVhZG9ubHkgc2V0TWFwU2VydmljZSA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxNYXBTZXJ2aWNlPj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+IHtcbiAgICAgICAgdGhpcy5fc2V0TWFwU2VydmljZShzZXJ2aWNlKTtcblxuICAgICAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgICAgICByZXR1cm4gTkVWRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHNlcnZpY2UubWFwTG9hZGVkJC5waXBlKFxuICAgICAgICAgICAgZGVmYXVsdElmRW1wdHkodW5kZWZpbmVkKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3NldExpZmVjeWNsZVN0YXRlKCdpZGxlJyk7XG4gICAgICAgICAgICAgIHRoaXMuX3NldE1vdmVTdGF0ZSgnaWRsZScpO1xuICAgICAgICAgICAgICB0aGlzLl9zZXRab29tU3RhdGUoJ2lkbGUnKTtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0Um90YXRlU3RhdGUoJ2lkbGUnKTtcblxuICAgICAgICAgICAgICBjb25zdCBtYXAgPSBzZXJ2aWNlLm1hcEluc3RhbmNlO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyUGFpcnM6IFN0cmluZ01hcGJveExpc3RlbmVyUGFpcltdID0gW107XG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkTGlzdGVuZXI8VCBleHRlbmRzIGtleW9mIE1hcGJveEdsLk1hcEV2ZW50cz4odHlwZTogVCwgbGlzdGVuZXI6IFBhcmFtZXRlcnM8dHlwZW9mIG1hcC5vbjxUPj5bMl0pIHtcbiAgICAgICAgICAgICAgICBtYXAub248VD4odHlwZSwgbGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyUGFpcnMucHVzaCh7IHR5cGUsIGxpc3RlbmVyIH0gYXMgU3RyaW5nTWFwYm94TGlzdGVuZXJQYWlyKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdpZGxlJywgKCkgPT4gdGhpcy5fc2V0TGlmZWN5Y2xlU3RhdGUoJ2lkbGUnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdyZW5kZXInLCAoKSA9PiB0aGlzLl9zZXRMaWZlY3ljbGVTdGF0ZSgncmVuZGVyJykpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignZXJyb3InLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEVycm9yKHguZXJyb3IpO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignbW92ZXN0YXJ0JywgKCkgPT4gdGhpcy5fc2V0TW92ZVN0YXRlKCdtb3ZpbmcnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdtb3ZlZW5kJywgKCkgPT4gdGhpcy5fc2V0TW92ZVN0YXRlKCdpZGxlJykpO1xuXG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCd6b29tc3RhcnQnLCAoKSA9PiB0aGlzLl9zZXRab29tU3RhdGUoJ3pvb21pbmcnKSk7XG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCd6b29tZW5kJywgKCkgPT4gdGhpcy5fc2V0Wm9vbVN0YXRlKCdpZGxlJykpO1xuXG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdyb3RhdGVzdGFydCcsICgpID0+IHRoaXMuX3NldFJvdGF0ZVN0YXRlKCdyb3RhdGluZycpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ3JvdGF0ZWVuZCcsICgpID0+IHRoaXMuX3NldFJvdGF0ZVN0YXRlKCdpZGxlJykpO1xuXG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdjbGljaycsICh4KSA9PiB0aGlzLl9zZXRDbGlja0V2ZW50KHgpKTtcbiAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ2RibGNsaWNrJywgKHgpID0+IHRoaXMuX3NldERvdWJsZUNsaWNrRXZlbnQoeCkpO1xuICAgICAgICAgICAgICBhZGRMaXN0ZW5lcignY29udGV4dG1lbnUnLCAoeCkgPT4gdGhpcy5fc2V0UmlnaHRDbGlja0V2ZW50KHgpKTtcblxuICAgICAgICAgICAgICBjb25zdCByZWZyZXNoRm9yUmVzaXplID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50V2lkdGg6IHgsIGNsaWVudEhlaWdodDogeSB9ID0gbWFwLmdldENhbnZhcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldE1hcENhbnZhc1NpemUoeyB4LCB5IH0pO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGFkZExpc3RlbmVyKCdyZXNpemUnLCByZWZyZXNoRm9yUmVzaXplKTtcbiAgICAgICAgICAgICAgcmVmcmVzaEZvclJlc2l6ZSgpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHN1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGxpc3RlbmVyUGFpcnMsXG4gICAgICAgICAgICAgICAgc3Vic1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNsZWFudXAoKHsgc2VydmljZSwgbGlzdGVuZXJQYWlycywgc3VicyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IG1hcCA9IHNlcnZpY2UubWFwSW5zdGFuY2U7XG5cbiAgICAgICAgaWYgKG1hcCkge1xuICAgICAgICAgIGxpc3RlbmVyUGFpcnMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgbWFwLm9mZih4LnR5cGUsIHgubGlzdGVuZXIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgc3Vicy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0U3R5bGUgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94U3R5bGVDb25maWcgfCBLbm93bk1hcGJveFN0eWxlIHwgc3RyaW5nPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChzdHlsZSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgbWFwLnNldFN0eWxlKHN0eWxlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hcC5zZXRTdHlsZShzdHlsZS5zdHlsZSwgc3R5bGUub3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0Q2VudGVyID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPExhdExuZ1BvaW50SW5wdXQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGNlbnRlcjogTGF0TG5nUG9pbnRJbnB1dCkgPT4ge1xuICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IHRoaXMuc2FmZUxhdExuZ1BvaW50KGNlbnRlcik7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0Q2VudGVyKGNlbnRlclBvaW50KSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRab29tID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveFpvb21MZXZlbD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoem9vbTogTWFwYm94Wm9vbUxldmVsKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0Wm9vbSh6b29tKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRab29tUmFuZ2UgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8UGFydGlhbDxNYXBib3hab29tTGV2ZWxSYW5nZT4+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHpvb21SYW5nZTogUGFydGlhbDxNYXBib3hab29tTGV2ZWxSYW5nZT4pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIG1hcC5zZXRNaW5ab29tKHpvb21SYW5nZS5taW4gfHwgbnVsbCk7XG4gICAgICAgICAgICBtYXAuc2V0TWF4Wm9vbSh6b29tUmFuZ2UubWF4IHx8IG51bGwpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1pblpvb20gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh6b29tOiBNYXBib3hab29tTGV2ZWwpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNaW5ab29tKHpvb20pKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1heFpvb20gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh6b29tOiBNYXBib3hab29tTGV2ZWwpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRNYXhab29tKHpvb20pKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldEtleWJvYXJkRGlzYWJsZWQgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkaXNhYmxlZDogTWF5YmU8Ym9vbGVhbj4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG1hcC5rZXlib2FyZC5lbmFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hcC5rZXlib2FyZC5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0RHJhZ1JvdGF0ZURpc2FibGVkID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1heWJlPGJvb2xlYW4+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGlzYWJsZWQ6IE1heWJlPGJvb2xlYW4+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBtYXAuZHJhZ1JvdGF0ZS5lbmFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hcC5kcmFnUm90YXRlLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXREcmFnUGFuRGlzYWJsZWQgPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8Ym9vbGVhbj4gfCB2b2lkPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkaXNhYmxlZDogTWF5YmU8Ym9vbGVhbj4gfCB2b2lkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICAgIHRhcCgobWFwKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGlzYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG1hcC5kcmFnUGFuLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWFwLmRyYWdQYW4uZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFpvb21EaXNhYmxlZCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxib29sZWFuPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRpc2FibGVkOiBNYXliZTxib29sZWFuPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgICAgdGFwKChtYXApID0+IHtcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgbWFwLnNjcm9sbFpvb20uZW5hYmxlKCk7XG4gICAgICAgICAgICAgIG1hcC5kb3VibGVDbGlja1pvb20uZW5hYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXAuc2Nyb2xsWm9vbS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgIG1hcC5kb3VibGVDbGlja1pvb20uZGlzYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldFBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGl0Y2gpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5zZXRQaXRjaChwaXRjaCkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc2V0TWluUGl0Y2ggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8bnVtYmVyPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChwaXRjaDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuc2V0TWluUGl0Y2gocGl0Y2gpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNldE1heFBpdGNoID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGl0Y2g6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldE1heFBpdGNoKHBpdGNoKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzZXRCZWFyaW5nID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPG51bWJlcj4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoYmVhcmluZykgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNldEJlYXJpbmcoYmVhcmluZykpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcm90YXRlVG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94QmVhcmluZyB8IE1hcGJveFJvdGF0ZVRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyb3RhdGVJbnB1dDogTWFwYm94QmVhcmluZyB8IE1hcGJveFJvdGF0ZVRvKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdGF0ZTogTWFwYm94Um90YXRlVG8gPSB0eXBlb2Ygcm90YXRlSW5wdXQgPT09ICdudW1iZXInID8geyBiZWFyaW5nOiByb3RhdGVJbnB1dCB9IDogcm90YXRlSW5wdXQ7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAucm90YXRlVG8ocm90YXRlLmJlYXJpbmcsIHJvdGF0ZS5vcHRpb25zLCByb3RhdGU/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmVzZXROb3J0aCA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXliZTxNYXBib3hSZXNldE5vcnRoPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlc2V0OiBNYXliZTxNYXBib3hSZXNldE5vcnRoPiB8IHZvaWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5yZXNldE5vcnRoKHJlc2V0Py5vcHRpb25zLCByZXNldD8uZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSByZXNldE5vcnRoUGl0Y2ggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94UmVzZXROb3J0aFBpdGNoPiB8IHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlc2V0OiBNYXliZTxNYXBib3hSZXNldE5vcnRoUGl0Y2g+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnJlc2V0Tm9ydGhQaXRjaChyZXNldD8ub3B0aW9ucywgcmVzZXQ/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc25hcFRvTm9ydGggPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWF5YmU8TWFwYm94U25hcFRvTm9ydGg+IHwgdm9pZD4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoc25hcDogTWF5YmU8TWFwYm94U25hcFRvTm9ydGg+IHwgdm9pZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLnNuYXBUb05vcnRoKHNuYXA/Lm9wdGlvbnMsIHNuYXA/LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZml0UG9zaXRpb25zID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEZpdFBvc2l0aW9ucz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBib3VuZEZyb21JbnB1dCA9IGxhdExuZ0JvdW5kRnJvbUlucHV0KHgucG9zaXRpb25zKTtcblxuICAgICAgICBpZiAoYm91bmRGcm9tSW5wdXQpIHtcbiAgICAgICAgICBjb25zdCBib3VuZCA9IHRoaXMubGF0TG5nQm91bmQoYm91bmRGcm9tSW5wdXQpO1xuICAgICAgICAgIHJldHVybiB0aGlzLm1hcEluc3RhbmNlJC5waXBlKHRhcCgobWFwKSA9PiBtYXAuZml0Qm91bmRzKG5ldyBNYXBib3hHbC5MbmdMYXRCb3VuZHMoYm91bmQuc3csIGJvdW5kLm5lKSwgeC5vcHRpb25zLCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZml0Qm91bmRzID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPE1hcGJveEZpdEJvdW5kcz4pID0+IHtcbiAgICByZXR1cm4gaW5wdXQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICBjb25zdCBib3VuZCA9IHRoaXMubGF0TG5nQm91bmQoeC5ib3VuZHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmZpdEJvdW5kcyhuZXcgTWFwYm94R2wuTG5nTGF0Qm91bmRzKGJvdW5kLnN3LCBib3VuZC5uZSksIHgub3B0aW9ucywgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGp1bXBUbyA9IHRoaXMuZWZmZWN0KChpbnB1dDogT2JzZXJ2YWJsZTxNYXBib3hKdW1wVG8+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRDZW50ZXIgPSB4LmNlbnRlciA/PyB4LnRvPy5jZW50ZXI7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IGlucHV0Q2VudGVyID8gdGhpcy5zYWZlTGF0TG5nUG9pbnQoaW5wdXRDZW50ZXIpIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmp1bXBUbyhmaWx0ZXJVbmRlZmluZWRWYWx1ZXMoeyAuLi54LnRvLCBjZW50ZXIgfSksIHguZXZlbnREYXRhKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBlYXNlVG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94RWFzZVRvPikgPT4ge1xuICAgIHJldHVybiBpbnB1dC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0Q2VudGVyID0geC5jZW50ZXIgPz8geC50bz8uY2VudGVyO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBpbnB1dENlbnRlciA/IHRoaXMuc2FmZUxhdExuZ1BvaW50KGlucHV0Q2VudGVyKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUodGFwKChtYXApID0+IG1hcC5lYXNlVG8oZmlsdGVyVW5kZWZpbmVkVmFsdWVzKHsgLi4ueC50bywgY2VudGVyIH0pLCB4LmV2ZW50RGF0YSkpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmx5VG8gPSB0aGlzLmVmZmVjdCgoaW5wdXQ6IE9ic2VydmFibGU8TWFwYm94Rmx5VG8+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRDZW50ZXIgPSB4LmNlbnRlciA/PyB4LnRvPy5jZW50ZXI7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IGlucHV0Q2VudGVyID8gdGhpcy5zYWZlTGF0TG5nUG9pbnQoaW5wdXRDZW50ZXIpIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZSh0YXAoKG1hcCkgPT4gbWFwLmZseVRvKGZpbHRlclVuZGVmaW5lZFZhbHVlcyh7IC4uLngudG8sIGNlbnRlciB9KSwgeC5ldmVudERhdGEpKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJlc2V0UGl0Y2hBbmRCZWFyaW5nID0gdGhpcy5lZmZlY3QoKGlucHV0OiBPYnNlcnZhYmxlPHZvaWQ+KSA9PiB7XG4gICAgcmV0dXJuIGlucHV0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgICB0YXAoKG1hcCkgPT4ge1xuICAgICAgICAgICAgbWFwLnNldFBpdGNoKDApO1xuICAgICAgICAgICAgbWFwLnNldEJlYXJpbmcoMCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gTUFSSzogQWNjZXNzb3JzXG4gIGdldCB0aW1lclJlZnJlc2hQZXJpb2QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGJ4TWFwYm94U2VydmljZS5tYXBib3hNYXBTdG9yZVRpbWVyUmVmcmVzaFBlcmlvZDtcbiAgfVxuXG4gIG1vdmluZ1RpbWVyKHBlcmlvZCA9IHRoaXMudGltZXJSZWZyZXNoUGVyaW9kKSB7XG4gICAgcmV0dXJuIHRoaXMubW92ZVN0YXRlJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4ID09PSAnbW92aW5nJykge1xuICAgICAgICAgIHJldHVybiBpbnRlcnZhbChwZXJpb2QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvZigwKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICBsaWZlY3ljbGVSZW5kZXJUaW1lcihwZXJpb2QgPSB0aGlzLnRpbWVyUmVmcmVzaFBlcmlvZCkge1xuICAgIHJldHVybiB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4ID09PSAncmVuZGVyJykge1xuICAgICAgICAgIHJldHVybiBpbnRlcnZhbChwZXJpb2QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvZigwKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICBhdE5leHRJZGxlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm1vdmVTdGF0ZSQucGlwZShcbiAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ2lkbGUnKSxcbiAgICAgIGZpcnN0KClcbiAgICApO1xuICB9XG5cbiAgY2FsY3VsYXRlTmV4dENlbnRlcldpdGhPZmZzZXQoaW5wdXRPZmZzZXQ6IExhdExuZ1BvaW50SW5wdXQpOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5sYXRMbmdQb2ludChpbnB1dE9mZnNldCk7XG5cbiAgICByZXR1cm4gdGhpcy5hdE5leHRJZGxlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICB0aGlzLmNlbnRlciQucGlwZShcbiAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgIG1hcCgoY2VudGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSB7XG4gICAgICAgICAgICAgIGxhdDogb2Zmc2V0LmxhdCArIGNlbnRlci5sYXQsXG4gICAgICAgICAgICAgIGxuZzogb2Zmc2V0LmxuZyArIGNlbnRlci5sbmdcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gbmV3Q2VudGVyO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY2FsY3VsYXRlTmV4dENlbnRlck9mZnNldFdpdGhTY3JlZW5NYXJnaW5DaGFuZ2Uoc2l6aW5nOiBEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZyk6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+IHtcbiAgICAvLyBUT0RPOiBDb25zaWRlciBjYWxjdWxhdGluZyB0aGlzIHVzaW5nIHRoZSB2aWV3cG9ydCgpIGZ1bmN0aW9uIGZyb20gQHBsYWNlbWFya2lvL2dlby12aWV3cG9ydFxuICAgIHJldHVybiB0aGlzLmF0TmV4dElkbGUoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIHRoaXMuYm91bmQkLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBtYXAoKGJvdW5kcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlmZiA9IGRpZmZMYXRMbmdCb3VuZFBvaW50cyhib3VuZHMsIHRydWUpO1xuICAgICAgICAgICAgY29uc3QgY2VudGVyID0gbGF0TG5nQm91bmRDZW50ZXJQb2ludChib3VuZHMpO1xuXG4gICAgICAgICAgICBjb25zdCBvZmZzZXRXaWR0aCA9IHNpemluZy5sZWZ0TWFyZ2luICsgc2l6aW5nLnJpZ2h0TWFyZ2luOyAvLyAzMDAgKyAwXG4gICAgICAgICAgICBjb25zdCBuZXdXaWR0aCA9IHNpemluZy5mdWxsV2lkdGggLSBvZmZzZXRXaWR0aDsgLy8gMTAwMCAtIDMwMCAtIDBcbiAgICAgICAgICAgIGNvbnN0IG5ld1dpZHRoUmF0aW8gPSBuZXdXaWR0aCAvIHNpemluZy5mdWxsV2lkdGg7IC8vIDcwMCAvIDEwMDBcbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlckxvbmdpdHVkZVdpZHRoID0gZGlmZi5sbmcgKiBuZXdXaWR0aFJhdGlvOyAvLyA3MCUgb2Zmc2V0XG5cbiAgICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZU9mZnNldDogTGF0TG5nUG9pbnQgPSB7XG4gICAgICAgICAgICAgIGxhdDogMCxcbiAgICAgICAgICAgICAgbG5nOiBuZXdDZW50ZXJMb25naXR1ZGVXaWR0aCAvIDJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IGFkZExhdExuZ1BvaW50cyhib3VuZHMuc3csIGVmZmVjdGl2ZU9mZnNldCk7XG4gICAgICAgICAgICBuZXdDZW50ZXIubGF0ID0gY2VudGVyLmxhdDsgLy8gcmV0YWluIGNlbnRlciBwb3NpdGlvblxuXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh7IHNpemluZywgYm91bmRzLCBlZmZlY3RpdmVPZmZzZXQsIG5ld1dpZHRoLCBvZmZzZXRXaWR0aCwgZGlmZiwgY2VudGVyLCBuZXdDZW50ZXIgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdDZW50ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBmaWx0ZXJCeVZpZXdwb3J0Qm91bmQ8VD4oaW5wdXQ6IEZpbHRlck1hcGJveEJvdW5kUmVhZEl0ZW1WYWx1ZUZ1bmN0aW9uPFQ+IHwgT21pdDxGaWx0ZXJNYXBib3hCb3VuZENvbmZpZzxUPiwgJ2JvdW5kRnVuY3Rpb25PYnMnIHwgJ2JvdW5kRGVjaXNpb25PYnMnPik6IE9wZXJhdG9yRnVuY3Rpb248VFtdLCBUW10+IHtcbiAgICBjb25zdCBjb25maWcgPSB0eXBlb2YgaW5wdXQgPT09ICdmdW5jdGlvbicgPyB7IHJlYWRWYWx1ZTogaW5wdXQgfSA6IGlucHV0O1xuXG4gICAgcmV0dXJuIGZpbHRlckJ5TWFwYm94Vmlld3BvcnRCb3VuZCh7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBib3VuZEZ1bmN0aW9uT2JzOiB0aGlzLnZpZXdwb3J0Qm91bmRGdW5jdGlvbiQsXG4gICAgICBib3VuZERlY2lzaW9uT2JzOiB0aGlzLm92ZXJsYXBzQm91bmRGdW5jdGlvbiRcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBTZXJ2aWNlJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcFNlcnZpY2UpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtYXBTZXJ2aWNlJCA9IHRoaXMuY3VycmVudE1hcFNlcnZpY2UkLnBpcGUoZmlsdGVyTWF5YmUoKSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudE1hcEluc3RhbmNlJDogT2JzZXJ2YWJsZTxNYXliZTxNYXBib3hHbC5NYXA+PiA9IHRoaXMuY3VycmVudE1hcFNlcnZpY2UkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjdXJyZW50TWFwU2VydmljZTogTWF5YmU8TWFwU2VydmljZT4pID0+IHtcbiAgICAgIGlmIChjdXJyZW50TWFwU2VydmljZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudE1hcFNlcnZpY2UubWFwTG9hZGVkJC5waXBlKFxuICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KHVuZGVmaW5lZCksXG4gICAgICAgICAgbWFwKCgpID0+IGN1cnJlbnRNYXBTZXJ2aWNlLm1hcEluc3RhbmNlKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1hcEluc3RhbmNlJCA9IHRoaXMuY3VycmVudE1hcEluc3RhbmNlJC5waXBlKGZpbHRlck1heWJlKCkpO1xuXG4gIHJlYWRvbmx5IGJvdW5kUmVmcmVzaFNldHRpbmdzJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LmJvdW5kUmVmcmVzaFNldHRpbmdzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IG1vdmVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5tb3ZlU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBsaWZlY3ljbGVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5saWZlY3ljbGVTdGF0ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHpvb21TdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC56b29tU3RhdGUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByb3RhdGVTdGF0ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5yb3RhdGVTdGF0ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGlzSW5pdGlhbGl6ZWQkID0gdGhpcy5jdXJyZW50TWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB7XG4gICAgICBpZiAoIXgpIHtcbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt0aGlzLm1vdmVTdGF0ZSQucGlwZShtYXAoKHgpID0+IHggPT09ICdpZGxlJykpLCB0aGlzLmxpZmVjeWNsZVN0YXRlJC5waXBlKG1hcCgoeCkgPT4geCA9PT0gJ2lkbGUnKSldKS5waXBlKFxuICAgICAgICAgIGZpbHRlcigoW20sIGxdKSA9PiBtICYmIGwpLFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgbWFwKCgpID0+IHRydWUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB3aGVuSW5pdGlhbGl6ZWQkID0gdGhpcy5pc0luaXRpYWxpemVkJC5waXBlKFxuICAgIGZpbHRlcigoeCkgPT4gdHJ1ZSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBpc1JlbmRlcmluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubGlmZWN5Y2xlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ3JlbmRlcicpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZWFkb25seSBpc01vdmluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubW92ZVN0YXRlJC5waXBlKFxuICAgICAgICBtYXAoKHgpID0+IHggPT09ICdtb3ZpbmcnKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNab29taW5nJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy56b29tU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ3pvb21pbmcnKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNSb3RhdGluZyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMucm90YXRlU3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCgoeCkgPT4geCA9PT0gJ3JvdGF0aW5nJyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX21vdmluZ1RpbWVyID0gdGhpcy5tb3ZpbmdUaW1lcigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZW5kZXJpbmdUaW1lciA9IHRoaXMubGlmZWN5Y2xlUmVuZGVyVGltZXIoKTtcblxuICByZWFkb25seSBjZW50ZXJOb3ckOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9tb3ZpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB0aGlzLmxhdExuZ1BvaW50KHguZ2V0Q2VudGVyKCkpKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKVxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjZW50ZXIkOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc01vdmluZyQucGlwZShcbiAgICAgICAgb25UcnVlVG9GYWxzZSgpLFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2VudGVyTm93JC5waXBlKGZpcnN0KCkpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8TGF0TG5nUG9pbnQ+KGlzU2FtZUxhdExuZ1BvaW50KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBtaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5taW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lVmVjdG9yKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRNYXBDYW52YXNTaXplJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcENhbnZhc1NpemUpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPE1heWJlPFZlY3Rvcj4+KGlzU2FtZVZlY3RvciksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvKipcbiAgICogVGhlIG1hcCBjYW52YXMgc2l6ZSB3aXRoIGNvbnNpZGVyYXRpb24gdG8gdGhlIHZpcnR1YWwgdmlld3BvcnQgc2l6ZS5cbiAgICovXG4gIHJlYWRvbmx5IG1hcENhbnZhc1NpemUkID0gdGhpcy5jdXJyZW50TWFwQ2FudmFzU2l6ZSQucGlwZShmaWx0ZXJNYXliZSgpKTtcblxuICBtaW5pbXVtTWFwQ2FudmFzU2l6ZShtaW5WZWN0b3I6IFBhcnRpYWw8VmVjdG9yPik6IE9ic2VydmFibGU8VmVjdG9yPiB7XG4gICAgY29uc3QgcmVzaXplRm4gPSB2ZWN0b3JNaW5pbXVtU2l6ZVJlc2l6ZUZ1bmN0aW9uKG1pblZlY3Rvcik7XG4gICAgcmV0dXJuIHRoaXMubWFwQ2FudmFzU2l6ZSQucGlwZShcbiAgICAgIG1hcCgoeCkgPT4gcmVzaXplRm4oeCkpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8VmVjdG9yPihpc1NhbWVWZWN0b3IpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtYXAgY2FudmFzIHNpemUgd2l0aCBjb25zaWRlcmF0aW9uIHRvIHRoZSB2aXJ0dWFsIHZpZXdwb3J0IHNpemUuXG4gICAqL1xuICByZWFkb25seSB2aXJ0dWFsTWFwQ2FudmFzU2l6ZSQgPSB0aGlzLm1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplJC5waXBlKFxuICAgIHN3aXRjaE1hcCgobWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUpID0+IHtcbiAgICAgIGlmIChtaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW5pbXVtTWFwQ2FudmFzU2l6ZShtaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXBDYW52YXNTaXplJDtcbiAgICAgIH1cbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxWZWN0b3I+KGlzU2FtZVZlY3RvciksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSByYXdWaWV3cG9ydEJvdW5kRnVuY3Rpb24kOiBPYnNlcnZhYmxlPE1hcGJveFZpZXdwb3J0Qm91bmRGdW5jdGlvbj4gPSB0aGlzLm1hcENhbnZhc1NpemUkLnBpcGUoXG4gICAgbWFwKChtYXBDYW52YXNTaXplKSA9PiBtYXBib3hWaWV3cG9ydEJvdW5kRnVuY3Rpb24oeyBtYXBDYW52YXNTaXplIH0pKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgTWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uIG9ic2VydmFibGUgdGhhdCByZXR1cm5zIHRoZSBtaW5pbXVtIHZpZXdwb3J0IHNpemUuXG4gICAqXG4gICAqIEBwYXJhbSBtaW5WZWN0b3JcbiAgICogQHJldHVybnNcbiAgICovXG4gIHZpZXdwb3J0Qm91bmRGdW5jdGlvbldpdGhNaW5pbXVtU2l6ZShtaW5WZWN0b3I6IFBhcnRpYWw8VmVjdG9yPik6IE9ic2VydmFibGU8TWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uPiB7XG4gICAgY29uc3QgcmVzaXplRm4gPSB2ZWN0b3JNaW5pbXVtU2l6ZVJlc2l6ZUZ1bmN0aW9uKG1pblZlY3Rvcik7XG4gICAgcmV0dXJuIHRoaXMubWFwQ2FudmFzU2l6ZSQucGlwZShcbiAgICAgIG1hcCgoeCkgPT4gcmVzaXplRm4oeCkpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQ8VmVjdG9yPihpc1NhbWVWZWN0b3IpLFxuICAgICAgbWFwKChtYXBDYW52YXNTaXplKSA9PiBtYXBib3hWaWV3cG9ydEJvdW5kRnVuY3Rpb24oeyBtYXBDYW52YXNTaXplIH0pKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIHJlYWRvbmx5IHZpZXdwb3J0Qm91bmRGdW5jdGlvbiQ6IE9ic2VydmFibGU8TWFwYm94Vmlld3BvcnRCb3VuZEZ1bmN0aW9uPiA9IHRoaXMubWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemUkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChtaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSkgPT4ge1xuICAgICAgaWYgKG1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdwb3J0Qm91bmRGdW5jdGlvbldpdGhNaW5pbXVtU2l6ZShtaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yYXdWaWV3cG9ydEJvdW5kRnVuY3Rpb24kO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdmlydHVhbEJvdW5kJDogT2JzZXJ2YWJsZTxMYXRMbmdCb3VuZD4gPSB0aGlzLnZpZXdwb3J0Qm91bmRGdW5jdGlvbiQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGZuKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5ib3VuZFJlZnJlc2hTZXR0aW5ncyQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChzZXR0aW5ncykgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgdGhyb3R0bGU6IHRocm90dGxlTXMsIHJlZnJlc2hUeXBlIH0gPSBzZXR0aW5ncztcblxuICAgICAgICAgIGxldCBvYnM6IE9ic2VydmFibGU8W0xhdExuZ1BvaW50LCBab29tTGV2ZWxdPjtcblxuICAgICAgICAgIHN3aXRjaCAocmVmcmVzaFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Fsd2F5cyc6XG4gICAgICAgICAgICAgIG9icyA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuY2VudGVyTm93JCwgdGhpcy56b29tTm93JF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3doZW5fbm90X3JlbmRlcmluZyc6XG4gICAgICAgICAgICBjYXNlICdvbmx5X2FmdGVyX3JlbmRlcl9maW5pc2hlcyc6XG4gICAgICAgICAgICAgIG9icyA9IHRoaXMuYm91bmQkLnBpcGUoc3dpdGNoTWFwKCgpID0+IGNvbWJpbmVMYXRlc3QoW3RoaXMuY2VudGVyTm93JCwgdGhpcy56b29tTm93JF0pKSk7IC8vIHJlZnJlc2ggd2hlbmV2ZXIgdGhlIGJvdW5kIHJlZnJlc2hlc1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gb2JzLnBpcGUoXG4gICAgICAgICAgICB0aHJvdHRsZVRpbWUodGhyb3R0bGVNcywgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlIH0pLFxuICAgICAgICAgICAgbWFwKChbY2VudGVyLCB6b29tXSkgPT5cbiAgICAgICAgICAgICAgZm4oe1xuICAgICAgICAgICAgICAgIGNlbnRlcixcbiAgICAgICAgICAgICAgICB6b29tXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lTGF0TG5nQm91bmQpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgbWFyZ2luJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4Lm1hcmdpbiksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGEgIT0gbnVsbCAmJiBiICE9IG51bGwgJiYgYS5mdWxsV2lkdGggPT09IGIuZnVsbFdpZHRoICYmIGEubGVmdE1hcmdpbiA9PT0gYi5sZWZ0TWFyZ2luICYmIGEucmlnaHRNYXJnaW4gPT09IGIucmlnaHRNYXJnaW4pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcmV2ZXJzZU1hcmdpbiQgPSB0aGlzLm1hcmdpbiQucGlwZShcbiAgICBtYXAoKHgpID0+IHtcbiAgICAgIGlmICh4KSB7XG4gICAgICAgIHJldHVybiB7IGxlZnRNYXJnaW46IC14LmxlZnRNYXJnaW4sIHJpZ2h0TWFyZ2luOiAteC5yaWdodE1hcmdpbiwgZnVsbFdpZHRoOiB4LmZ1bGxXaWR0aCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgICB9XG4gICAgfSlcbiAgKTtcblxuICByZWFkb25seSBjZW50ZXJHaXZlbk1hcmdpbiQ6IE9ic2VydmFibGU8TGF0TG5nUG9pbnQ+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2VNYXJnaW4kLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgICAgIGlmICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jZW50ZXIkLnBpcGUoc3dpdGNoTWFwKChfKSA9PiB0aGlzLmNhbGN1bGF0ZU5leHRDZW50ZXJPZmZzZXRXaXRoU2NyZWVuTWFyZ2luQ2hhbmdlKHgpKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzTW92aW5nJC5waXBlKFxuICAgICAgICAgICAgICBmaWx0ZXIoKHgpID0+ICF4KSxcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2VudGVyJClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJhd0JvdW5kTm93JDogT2JzZXJ2YWJsZTxMYXRMbmdCb3VuZD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLl9yZW5kZXJpbmdUaW1lci5waXBlKFxuICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYm91bmQgPSB4LmdldEJvdW5kcygpO1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0OiBMYXRMbmdCb3VuZCB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgICAgICAgIGlmIChib3VuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm91bmRTdyA9IGJvdW5kLmdldFNvdXRoV2VzdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kTmUgPSBib3VuZC5nZXROb3J0aEVhc3QoKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHN3ID0gaXNEZWZhdWx0TGF0TG5nUG9pbnQoYm91bmRTdykgPyBzd01vc3RMYXRMbmdQb2ludCgpIDogeyBsYXQ6IGJvdW5kU3cubGF0LCBsbmc6IGJvdW5kU3cubG5nIH07XG4gICAgICAgICAgICAgICAgY29uc3QgbmUgPSBpc0RlZmF1bHRMYXRMbmdQb2ludChib3VuZE5lKSA/IG5lTW9zdExhdExuZ1BvaW50KCkgOiB7IGxhdDogYm91bmROZS5sYXQsIGxuZzogYm91bmROZS5sbmcgfTtcblxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubGF0TG5nQm91bmQoc3csIG5lKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlck1heWJlKClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGlzU2FtZUxhdExuZ0JvdW5kKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHJhd0JvdW5kJDogT2JzZXJ2YWJsZTxMYXRMbmdCb3VuZD4gPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuYm91bmRSZWZyZXNoU2V0dGluZ3MkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoc2V0dGluZ3MpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHRocm90dGxlOiB0aHJvdHRsZU1zLCByZWZyZXNoVHlwZSB9ID0gc2V0dGluZ3M7XG5cbiAgICAgICAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPExhdExuZ0JvdW5kPjtcblxuICAgICAgICAgIHN3aXRjaCAocmVmcmVzaFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Fsd2F5cyc6XG4gICAgICAgICAgICAgIG9icyA9IHRoaXMucmF3Qm91bmROb3ckO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3doZW5fbm90X3JlbmRlcmluZyc6XG4gICAgICAgICAgICAgIG9icyA9IHRoaXMuaXNSZW5kZXJpbmckLnBpcGUoc3dpdGNoTWFwKCh4KSA9PiAoeCA/IEVNUFRZIDogdGhpcy5yYXdCb3VuZE5vdyQpKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb25seV9hZnRlcl9yZW5kZXJfZmluaXNoZXMnOlxuICAgICAgICAgICAgICBvYnMgPSB0aGlzLmlzUmVuZGVyaW5nJC5waXBlKFxuICAgICAgICAgICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMucmF3Qm91bmROb3ckLnBpcGUoZmlyc3QoKSkpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBvYnMucGlwZSh0aHJvdHRsZVRpbWUodGhyb3R0bGVNcywgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlIH0pKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNTYW1lTGF0TG5nQm91bmQpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgdXNlVmlydHVhbEJvdW5kJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnVzZVZpcnR1YWxCb3VuZCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGJvdW5kJDogT2JzZXJ2YWJsZTxMYXRMbmdCb3VuZD4gPSB0aGlzLnVzZVZpcnR1YWxCb3VuZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKHVzZVZpcnR1YWxCb3VuZCkgPT4ge1xuICAgICAgaWYgKHVzZVZpcnR1YWxCb3VuZCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aXJ0dWFsQm91bmQkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmF3Qm91bmQkO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgYm91bmRTaXppbmckOiBPYnNlcnZhYmxlPExhdExuZ1BvaW50PiA9IHRoaXMuYm91bmQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBkaWZmTGF0TG5nQm91bmRQb2ludHMoeCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgYm91bmRXcmFwc0Fyb3VuZFdvcmxkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuYm91bmQkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiBsYXRMbmdCb3VuZFdyYXBzTWFwKHgpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgaXNXaXRoaW5Cb3VuZEZ1bmN0aW9uJDogT2JzZXJ2YWJsZTxJc1dpdGhpbkxhdExuZ0JvdW5kRnVuY3Rpb24+ID0gdGhpcy5ib3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IGlzV2l0aGluTGF0TG5nQm91bmRGdW5jdGlvbih4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBvdmVybGFwc0JvdW5kRnVuY3Rpb24kOiBPYnNlcnZhYmxlPE92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbj4gPSB0aGlzLnZpcnR1YWxCb3VuZCQucGlwZShcbiAgICBtYXAoKHgpID0+IG92ZXJsYXBzTGF0TG5nQm91bmRGdW5jdGlvbih4KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSB6b29tTm93JDogT2JzZXJ2YWJsZTxNYXBib3hab29tTGV2ZWw+ID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aGlzLm1hcEluc3RhbmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHRoaXMuX3JlbmRlcmluZ1RpbWVyLnBpcGUobWFwKCgpID0+IHguZ2V0Wm9vbSgpIGFzIE1hcGJveFpvb21MZXZlbCkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgem9vbSQ6IE9ic2VydmFibGU8TWFwYm94Wm9vbUxldmVsPiA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1pvb21pbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnpvb21Ob3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IHBpdGNoTm93JCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgdGhpcy5tYXBJbnN0YW5jZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh4KSA9PiB0aGlzLl9tb3ZpbmdUaW1lci5waXBlKG1hcCgoKSA9PiB4LmdldFBpdGNoKCkpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IHBpdGNoJCA9IHRoaXMud2hlbkluaXRpYWxpemVkJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5pc1JvdGF0aW5nJC5waXBlKFxuICAgICAgICBvblRydWVUb0ZhbHNlKCksXG4gICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5waXRjaE5vdyQucGlwZShmaXJzdCgpKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgYmVhcmluZ05vdyQgPSB0aGlzLndoZW5Jbml0aWFsaXplZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRoaXMubWFwSW5zdGFuY2UkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4gdGhpcy5fbW92aW5nVGltZXIucGlwZShtYXAoKCkgPT4geC5nZXRCZWFyaW5nKCkpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlYWRvbmx5IGJlYXJpbmckID0gdGhpcy53aGVuSW5pdGlhbGl6ZWQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmlzUm90YXRpbmckLnBpcGUoXG4gICAgICAgIG9uVHJ1ZVRvRmFsc2UoKSxcbiAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmJlYXJpbmdOb3ckLnBpcGUoZmlyc3QoKSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgKTtcbiAgICB9KVxuICApO1xuXG4gIHJlYWRvbmx5IGRyYXdlckNvbnRlbnQkID0gdGhpcy5zdGF0ZSQucGlwZShcbiAgICBtYXAoKHgpID0+IHguZHJhd2VyQ29udGVudCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IGhhc0RyYXdlckNvbnRlbnQkID0gdGhpcy5kcmF3ZXJDb250ZW50JC5waXBlKG1hcChCb29sZWFuKSk7XG5cbiAgcmVhZG9ubHkgY2xpY2tFdmVudCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5jbGlja0V2ZW50KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZG91YmxlQ2xpY2tFdmVudCQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgIG1hcCgoeCkgPT4geC5kb3VibGVDbGlja0V2ZW50KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgcmlnaHRDbGlja0V2ZW50JCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKCh4KSA9PiB4LnJpZ2h0Q2xpY2tFdmVudCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8vIE1BUks6IFN0YXRlIENoYW5nZXNcbiAgcmVhZG9ubHkgc2V0TWFyZ2luID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbWFyZ2luOiBNYXliZTxEYnhNYXBib3hNYXJnaW5DYWxjdWxhdGlvblNpemluZz4pID0+ICh7IC4uLnN0YXRlLCBtYXJnaW46IG1hcmdpbiAmJiAobWFyZ2luLnJpZ2h0TWFyZ2luICE9PSAwIHx8IG1hcmdpbi5sZWZ0TWFyZ2luICE9PSAwKSA/IG1hcmdpbiA6IHVuZGVmaW5lZCB9KSk7XG4gIHJlYWRvbmx5IHNldE1pbmltdW1WaXJ0dWFsVmlld3BvcnRTaXplID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbWluaW11bVZpcnR1YWxWaWV3cG9ydFNpemU6IE1heWJlPFBhcnRpYWw8VmVjdG9yPj4pID0+ICh7IC4uLnN0YXRlLCBtaW5pbXVtVmlydHVhbFZpZXdwb3J0U2l6ZSB9KSk7XG4gIHJlYWRvbmx5IHNldFVzZVZpcnR1YWxCb3VuZCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHVzZVZpcnR1YWxCb3VuZDogYm9vbGVhbikgPT4gKHsgLi4uc3RhdGUsIHVzZVZpcnR1YWxCb3VuZCB9KSk7XG4gIHJlYWRvbmx5IHNldEJvdW5kUmVmcmVzaFNldHRpbmdzID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgYm91bmRSZWZyZXNoU2V0dGluZ3M6IFBhcnRpYWw8RGJ4TWFwYm94U3RvcmVCb3VuZFJlZnJlc2hTZXR0aW5ncz4pID0+ICh7IC4uLnN0YXRlLCBib3VuZFJlZnJlc2hTZXR0aW5nczogeyAuLi5zdGF0ZS5ib3VuZFJlZnJlc2hTZXR0aW5ncywgLi4uYm91bmRSZWZyZXNoU2V0dGluZ3MgfSB9KSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TWFwU2VydmljZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1hcFNlcnZpY2U6IE1heWJlPE1hcFNlcnZpY2U+KSA9PiAoeyBtYXBTZXJ2aWNlLCBtb3ZlU3RhdGU6ICdpbml0JywgbGlmZWN5Y2xlU3RhdGU6ICdpbml0Jywgem9vbVN0YXRlOiAnaW5pdCcsIHJvdGF0ZVN0YXRlOiAnaW5pdCcsIHJldGFpbkNvbnRlbnQ6IHN0YXRlLnJldGFpbkNvbnRlbnQsIGNvbnRlbnQ6IHN0YXRlLnJldGFpbkNvbnRlbnQgPyBzdGF0ZS5jb250ZW50IDogdW5kZWZpbmVkLCB1c2VWaXJ0dWFsQm91bmQ6IHN0YXRlLnVzZVZpcnR1YWxCb3VuZCwgYm91bmRSZWZyZXNoU2V0dGluZ3M6IHN0YXRlLmJvdW5kUmVmcmVzaFNldHRpbmdzIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0TGlmZWN5Y2xlU3RhdGUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBsaWZlY3ljbGVTdGF0ZTogTWFwYm94TWFwTGlmZWN5Y2xlU3RhdGUpID0+ICh7IC4uLnN0YXRlLCBsaWZlY3ljbGVTdGF0ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldE1vdmVTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIG1vdmVTdGF0ZTogTWFwYm94TWFwTW92ZVN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgbW92ZVN0YXRlIH0pKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0Wm9vbVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgem9vbVN0YXRlOiBNYXBib3hNYXBab29tU3RhdGUpID0+ICh7IC4uLnN0YXRlLCB6b29tU3RhdGUgfSkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRSb3RhdGVTdGF0ZSA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHJvdGF0ZVN0YXRlOiBNYXBib3hNYXBSb3RhdGVTdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIHJvdGF0ZVN0YXRlIH0pKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZXRNYXBDYW52YXNTaXplID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgbWFwQ2FudmFzU2l6ZTogVmVjdG9yKSA9PiAoeyAuLi5zdGF0ZSwgbWFwQ2FudmFzU2l6ZSB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldENsaWNrRXZlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBjbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgY2xpY2tFdmVudCB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldERvdWJsZUNsaWNrRXZlbnQgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBkb3VibGVDbGlja0V2ZW50OiBEYnhNYXBib3hDbGlja0V2ZW50KSA9PiAoeyAuLi5zdGF0ZSwgZG91YmxlQ2xpY2tFdmVudCB9KSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJpZ2h0Q2xpY2tFdmVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUsIHJpZ2h0Q2xpY2tFdmVudDogRGJ4TWFwYm94Q2xpY2tFdmVudCkgPT4gKHsgLi4uc3RhdGUsIHJpZ2h0Q2xpY2tFdmVudCB9KSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc2V0RXJyb3IgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlLCBlcnJvcjogRXJyb3IpID0+ICh7IC4uLnN0YXRlLCBlcnJvciB9KSk7XG5cbiAgcmVhZG9ubHkgY2xlYXJEcmF3ZXJDb250ZW50ID0gdGhpcy51cGRhdGVyKChzdGF0ZSkgPT4gc2V0RHJhd2VyQ29udGVudChzdGF0ZSwgdW5kZWZpbmVkKSk7XG4gIHJlYWRvbmx5IHNldERyYXdlckNvbnRlbnQgPSB0aGlzLnVwZGF0ZXIoc2V0RHJhd2VyQ29udGVudCk7XG5cbiAgLy8gTUFSSzogQ29tcGF0XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZHJhd2VyQ29udGVudCQgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQkID0gdGhpcy5kcmF3ZXJDb250ZW50JDtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGhhc0RyYXdlckNvbnRlbnQkIGluc3RlYWQuXG4gICAqL1xuICByZWFkb25seSBoYXNDb250ZW50JCA9IHRoaXMuaGFzRHJhd2VyQ29udGVudCQ7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBjbGVhckRyYXdlckNvbnRlbnQgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IGNsZWFyQ29udGVudCA9IHRoaXMudXBkYXRlcigoc3RhdGUpID0+IHNldERyYXdlckNvbnRlbnQoc3RhdGUsIHVuZGVmaW5lZCkpO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2Ugc2V0RHJhd2VyQ29udGVudCBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0Q29udGVudCA9IHRoaXMudXBkYXRlcihzZXREcmF3ZXJDb250ZW50KTtcbn1cblxuZnVuY3Rpb24gc2V0RHJhd2VyQ29udGVudChzdGF0ZTogRGJ4TWFwYm94U3RvcmVTdGF0ZSwgZHJhd2VyQ29udGVudDogTWF5YmU8RGJ4SW5qZWN0aW9uQ29tcG9uZW50Q29uZmlnPHVua25vd24+Pikge1xuICByZXR1cm4geyAuLi5zdGF0ZSwgZHJhd2VyQ29udGVudCwgY29udGVudDogZHJhd2VyQ29udGVudCB9O1xufVxuIl19
@@ -6,21 +6,22 @@ import * as i0 from "@angular/core";
6
6
  */
7
7
  export class DbxMapboxMapStoreProviderBlock {
8
8
  dbxMapboxMapStore = inject(DbxMapboxMapStore, { skipSelf: true });
9
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxMapboxMapStoreProviderBlock, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxMapboxMapStoreProviderBlock });
9
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxMapboxMapStoreProviderBlock, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxMapboxMapStoreProviderBlock });
11
11
  }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxMapboxMapStoreProviderBlock, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxMapboxMapStoreProviderBlock, decorators: [{
13
13
  type: Injectable
14
14
  }] });
15
15
  export class DbxMapboxMapStoreInjectionBlockDirective {
16
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxMapboxMapStoreInjectionBlockDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
17
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: DbxMapboxMapStoreInjectionBlockDirective, selector: "[dbxMapboxStoreParentBlocker]", providers: [DbxMapboxMapStoreProviderBlock], ngImport: i0 });
16
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxMapboxMapStoreInjectionBlockDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
17
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DbxMapboxMapStoreInjectionBlockDirective, isStandalone: true, selector: "[dbxMapboxStoreParentBlocker]", providers: [DbxMapboxMapStoreProviderBlock], ngImport: i0 });
18
18
  }
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxMapboxMapStoreInjectionBlockDirective, decorators: [{
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxMapboxMapStoreInjectionBlockDirective, decorators: [{
20
20
  type: Directive,
21
21
  args: [{
22
22
  selector: '[dbxMapboxStoreParentBlocker]',
23
- providers: [DbxMapboxMapStoreProviderBlock]
23
+ providers: [DbxMapboxMapStoreProviderBlock],
24
+ standalone: true
24
25
  }]
25
26
  }] });
26
27
  /**
@@ -44,4 +45,4 @@ export function provideMapboxStoreIfParentIsUnavailable() {
44
45
  deps: [Injector, [new Optional(), DbxMapboxMapStoreProviderBlock], [new Optional(), new SkipSelf(), DbxMapboxMapStore]]
45
46
  };
46
47
  }
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLnByb3ZpZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL21hcGJveC9zcmMvbGliL21hcGJveC5zdG9yZS5wcm92aWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQVksUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFbkQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sOEJBQThCO0lBQ2hDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dHQURoRSw4QkFBOEI7NEdBQTlCLDhCQUE4Qjs7NEZBQTlCLDhCQUE4QjtrQkFEMUMsVUFBVTs7QUFTWCxNQUFNLE9BQU8sd0NBQXdDO3dHQUF4Qyx3Q0FBd0M7NEZBQXhDLHdDQUF3Qyx3REFGeEMsQ0FBQyw4QkFBOEIsQ0FBQzs7NEZBRWhDLHdDQUF3QztrQkFKcEQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsK0JBQStCO29CQUN6QyxTQUFTLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztpQkFDNUM7O0FBR0Q7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHVDQUF1QztJQUNyRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLGlCQUFpQjtRQUMxQixVQUFVLEVBQUUsQ0FBQyxjQUF3QixFQUFFLCtCQUFnRSxFQUFFLGlCQUFxQyxFQUFFLEVBQUU7WUFDaEosSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsaUJBQWlCLElBQUksK0JBQStCLElBQUksSUFBSSxJQUFJLCtCQUErQixDQUFDLGlCQUFpQixLQUFLLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ25LLHdDQUF3QztnQkFDeEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztnQkFDMUcsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3JEO1lBRUQsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSw4QkFBOEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxFQUFFLGlCQUFpQixDQUFDLENBQUM7S0FDeEgsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCwgUHJvdmlkZXIsIFNraXBTZWxmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERieE1hcGJveE1hcFN0b3JlIH0gZnJvbSAnLi9tYXBib3guc3RvcmUnO1xuXG4vKipcbiAqIFRva2VuIHVzZWQgYnkgcHJvdmlkZU1hcGJveFN0b3JlSWZEb2VzTm90RXhpc3QoKSB0byBwcmV2ZW50IGluamVjdGluZyBhIHBhcmVudCBEYnhNYXBib3hNYXBTdG9yZSBpbnRvIHRoZSBjaGlsZCB2aWV3LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4TWFwYm94TWFwU3RvcmVQcm92aWRlckJsb2NrIHtcbiAgcmVhZG9ubHkgZGJ4TWFwYm94TWFwU3RvcmUgPSBpbmplY3QoRGJ4TWFwYm94TWFwU3RvcmUsIHsgc2tpcFNlbGY6IHRydWUgfSk7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tkYnhNYXBib3hTdG9yZVBhcmVudEJsb2NrZXJdJyxcbiAgcHJvdmlkZXJzOiBbRGJ4TWFwYm94TWFwU3RvcmVQcm92aWRlckJsb2NrXVxufSlcbmV4cG9ydCBjbGFzcyBEYnhNYXBib3hNYXBTdG9yZUluamVjdGlvbkJsb2NrRGlyZWN0aXZlIHt9XG5cbi8qKlxuICogQ3JlYXRlcyBhIFByb3ZpZGVyIHRoYXQgaW5pdGlhbGl6ZXMgYSBuZXcgRGJ4TWFwYm94TWFwU3RvcmUgaWYgYSBwYXJlbnQgZG9lcyBub3QgZXhpc3QuXG4gKlxuICogSWYgYSBEYnhNYXBib3hNYXBTdG9yZUluamVjdGlvbkJsb2NrIGlzIGF2YWlsYWJsZSBpbiB0aGUgY29udGV4dCwgYW5kIHJlZmVyZW5jZXMgdGhlIHNhbWUgZGJ4TWFwYm94TWFwU3RvcmUgdGhhdCBpcyBhdHRlbXB0aW5nIHRvIGJlIGluamVjdGVkLCBhIG5ldyBEYnhNYXBib3hNYXBTdG9yZSBpcyBjcmVhdGVkLlxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTWFwYm94U3RvcmVJZlBhcmVudElzVW5hdmFpbGFibGUoKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IERieE1hcGJveE1hcFN0b3JlLFxuICAgIHVzZUZhY3Rvcnk6IChwYXJlbnRJbmplY3RvcjogSW5qZWN0b3IsIGRieE1hcGJveE1hcFN0b3JlSW5qZWN0aW9uQmxvY2s/OiBEYnhNYXBib3hNYXBTdG9yZVByb3ZpZGVyQmxvY2ssIGRieE1hcGJveE1hcFN0b3JlPzogRGJ4TWFwYm94TWFwU3RvcmUpID0+IHtcbiAgICAgIGlmICghZGJ4TWFwYm94TWFwU3RvcmUgfHwgKGRieE1hcGJveE1hcFN0b3JlICYmIGRieE1hcGJveE1hcFN0b3JlSW5qZWN0aW9uQmxvY2sgIT0gbnVsbCAmJiBkYnhNYXBib3hNYXBTdG9yZUluamVjdGlvbkJsb2NrLmRieE1hcGJveE1hcFN0b3JlID09PSBkYnhNYXBib3hNYXBTdG9yZSkpIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IGRieE1hcGJveE1hcFN0b3JlIHRvIHVzZVxuICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7IHByb3ZpZGVyczogW3sgcHJvdmlkZTogRGJ4TWFwYm94TWFwU3RvcmUgfV0sIHBhcmVudDogcGFyZW50SW5qZWN0b3IgfSk7XG4gICAgICAgIGRieE1hcGJveE1hcFN0b3JlID0gaW5qZWN0b3IuZ2V0KERieE1hcGJveE1hcFN0b3JlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRieE1hcGJveE1hcFN0b3JlO1xuICAgIH0sXG4gICAgZGVwczogW0luamVjdG9yLCBbbmV3IE9wdGlvbmFsKCksIERieE1hcGJveE1hcFN0b3JlUHJvdmlkZXJCbG9ja10sIFtuZXcgT3B0aW9uYWwoKSwgbmV3IFNraXBTZWxmKCksIERieE1hcGJveE1hcFN0b3JlXV1cbiAgfTtcbn1cbiJdfQ==
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LnN0b3JlLnByb3ZpZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtd2ViL21hcGJveC9zcmMvbGliL21hcGJveC5zdG9yZS5wcm92aWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQVksUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFbkQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sOEJBQThCO0lBQ2hDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dHQURoRSw4QkFBOEI7NEdBQTlCLDhCQUE4Qjs7NEZBQTlCLDhCQUE4QjtrQkFEMUMsVUFBVTs7QUFVWCxNQUFNLE9BQU8sd0NBQXdDO3dHQUF4Qyx3Q0FBd0M7NEZBQXhDLHdDQUF3Qyw0RUFIeEMsQ0FBQyw4QkFBOEIsQ0FBQzs7NEZBR2hDLHdDQUF3QztrQkFMcEQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsK0JBQStCO29CQUN6QyxTQUFTLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztvQkFDM0MsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOztBQUdEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx1Q0FBdUM7SUFDckQsT0FBTztRQUNMLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsVUFBVSxFQUFFLENBQUMsY0FBd0IsRUFBRSwrQkFBZ0UsRUFBRSxpQkFBcUMsRUFBRSxFQUFFO1lBQ2hKLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLGlCQUFpQixJQUFJLCtCQUErQixJQUFJLElBQUksSUFBSSwrQkFBK0IsQ0FBQyxpQkFBaUIsS0FBSyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BLLHdDQUF3QztnQkFDeEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztnQkFDMUcsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3RELENBQUM7WUFFRCxPQUFPLGlCQUFpQixDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLDhCQUE4QixDQUFDLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRSxFQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztLQUN4SCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9wdGlvbmFsLCBQcm92aWRlciwgU2tpcFNlbGYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGJ4TWFwYm94TWFwU3RvcmUgfSBmcm9tICcuL21hcGJveC5zdG9yZSc7XG5cbi8qKlxuICogVG9rZW4gdXNlZCBieSBwcm92aWRlTWFwYm94U3RvcmVJZkRvZXNOb3RFeGlzdCgpIHRvIHByZXZlbnQgaW5qZWN0aW5nIGEgcGFyZW50IERieE1hcGJveE1hcFN0b3JlIGludG8gdGhlIGNoaWxkIHZpZXcuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhNYXBib3hNYXBTdG9yZVByb3ZpZGVyQmxvY2sge1xuICByZWFkb25seSBkYnhNYXBib3hNYXBTdG9yZSA9IGluamVjdChEYnhNYXBib3hNYXBTdG9yZSwgeyBza2lwU2VsZjogdHJ1ZSB9KTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2RieE1hcGJveFN0b3JlUGFyZW50QmxvY2tlcl0nLFxuICBwcm92aWRlcnM6IFtEYnhNYXBib3hNYXBTdG9yZVByb3ZpZGVyQmxvY2tdLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIERieE1hcGJveE1hcFN0b3JlSW5qZWN0aW9uQmxvY2tEaXJlY3RpdmUge31cblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJvdmlkZXIgdGhhdCBpbml0aWFsaXplcyBhIG5ldyBEYnhNYXBib3hNYXBTdG9yZSBpZiBhIHBhcmVudCBkb2VzIG5vdCBleGlzdC5cbiAqXG4gKiBJZiBhIERieE1hcGJveE1hcFN0b3JlSW5qZWN0aW9uQmxvY2sgaXMgYXZhaWxhYmxlIGluIHRoZSBjb250ZXh0LCBhbmQgcmVmZXJlbmNlcyB0aGUgc2FtZSBkYnhNYXBib3hNYXBTdG9yZSB0aGF0IGlzIGF0dGVtcHRpbmcgdG8gYmUgaW5qZWN0ZWQsIGEgbmV3IERieE1hcGJveE1hcFN0b3JlIGlzIGNyZWF0ZWQuXG4gKlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVNYXBib3hTdG9yZUlmUGFyZW50SXNVbmF2YWlsYWJsZSgpOiBQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogRGJ4TWFwYm94TWFwU3RvcmUsXG4gICAgdXNlRmFjdG9yeTogKHBhcmVudEluamVjdG9yOiBJbmplY3RvciwgZGJ4TWFwYm94TWFwU3RvcmVJbmplY3Rpb25CbG9jaz86IERieE1hcGJveE1hcFN0b3JlUHJvdmlkZXJCbG9jaywgZGJ4TWFwYm94TWFwU3RvcmU/OiBEYnhNYXBib3hNYXBTdG9yZSkgPT4ge1xuICAgICAgaWYgKCFkYnhNYXBib3hNYXBTdG9yZSB8fCAoZGJ4TWFwYm94TWFwU3RvcmUgJiYgZGJ4TWFwYm94TWFwU3RvcmVJbmplY3Rpb25CbG9jayAhPSBudWxsICYmIGRieE1hcGJveE1hcFN0b3JlSW5qZWN0aW9uQmxvY2suZGJ4TWFwYm94TWFwU3RvcmUgPT09IGRieE1hcGJveE1hcFN0b3JlKSkge1xuICAgICAgICAvLyBjcmVhdGUgYSBuZXcgZGJ4TWFwYm94TWFwU3RvcmUgdG8gdXNlXG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHsgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBEYnhNYXBib3hNYXBTdG9yZSB9XSwgcGFyZW50OiBwYXJlbnRJbmplY3RvciB9KTtcbiAgICAgICAgZGJ4TWFwYm94TWFwU3RvcmUgPSBpbmplY3Rvci5nZXQoRGJ4TWFwYm94TWFwU3RvcmUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGJ4TWFwYm94TWFwU3RvcmU7XG4gICAgfSxcbiAgICBkZXBzOiBbSW5qZWN0b3IsIFtuZXcgT3B0aW9uYWwoKSwgRGJ4TWFwYm94TWFwU3RvcmVQcm92aWRlckJsb2NrXSwgW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgRGJ4TWFwYm94TWFwU3RvcmVdXVxuICB9O1xufVxuIl19