@kando-env/kando-ui 1.2.466-alpha.5 → 1.2.466-alpha.7

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 (725) hide show
  1. package/lib/Router.js +40 -81
  2. package/lib/Widgets/EventsCarousel/EventsCarousel.js +24 -35
  3. package/lib/Widgets/EventsRow/EventsRow.js +26 -39
  4. package/lib/Widgets/Map/GraphUtils.js +4 -6
  5. package/lib/Widgets/Map/Map.js +100 -139
  6. package/lib/Widgets/Map/MapUtils.js +83 -102
  7. package/lib/Widgets/Map/areas/AreaPolygon.js +57 -84
  8. package/lib/Widgets/Map/areas/AreaPolygons.js +23 -25
  9. package/lib/Widgets/Map/areas/AreaUtils.js +46 -46
  10. package/lib/Widgets/Map/areas/Patterns.js +5 -5
  11. package/lib/Widgets/Map/edges/Edge.js +32 -41
  12. package/lib/Widgets/Map/edges/Edges.js +19 -24
  13. package/lib/Widgets/Map/edges/arrows/Arrows.js +24 -45
  14. package/lib/Widgets/Map/events/Event.js +15 -14
  15. package/lib/Widgets/Map/events/EventIndicator.js +66 -63
  16. package/lib/Widgets/Map/events/EventPath.js +33 -34
  17. package/lib/Widgets/Map/events/EventUtils.js +54 -78
  18. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +17 -19
  19. package/lib/Widgets/Map/events/PointOfEvent.js +27 -36
  20. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +29 -39
  21. package/lib/Widgets/Map/events/Snail.js +10 -11
  22. package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +77 -79
  23. package/lib/Widgets/Map/map/FloatingGraph.js +24 -21
  24. package/lib/Widgets/Map/map/GraphDateButton.js +27 -20
  25. package/lib/Widgets/Map/matchGraph/MatchGraph.js +14 -14
  26. package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +17 -16
  27. package/lib/Widgets/Map/points/PointIcon.js +23 -22
  28. package/lib/Widgets/Map/points/PointMarker.js +68 -88
  29. package/lib/Widgets/Map/points/PointMarkers.js +30 -36
  30. package/lib/Widgets/Map/points/PointUtils.js +76 -90
  31. package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +25 -43
  32. package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +11 -11
  33. package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +11 -14
  34. package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +4 -6
  35. package/lib/Widgets/MostPolluting/Areas/Areas.js +28 -60
  36. package/lib/Widgets/MostPolluting/Areas/areas.mock.js +3 -4
  37. package/lib/Widgets/MostPolluting/Areas/areasResponse.interface.js +1 -1
  38. package/lib/Widgets/MostPolluting/Areas/styles.js +4 -6
  39. package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +12 -9
  40. package/lib/Widgets/MostPolluting/Factories/Factories.js +33 -65
  41. package/lib/Widgets/MostPolluting/Factories/FactoryBox/CardLayout.js +15 -20
  42. package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +15 -20
  43. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +9 -10
  44. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +13 -11
  45. package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +4 -6
  46. package/lib/Widgets/MostPolluting/Factories/factories.mock.js +2 -3
  47. package/lib/Widgets/MostPolluting/Factories/factoriesResponse.interface.js +1 -1
  48. package/lib/Widgets/MostPolluting/Factories/styles.js +4 -6
  49. package/lib/Widgets/MostPolluting/MostPolluting.js +23 -34
  50. package/lib/Widgets/MostPolluting/MostPolluting.stories.js +20 -32
  51. package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +7 -5
  52. package/lib/Widgets/MostPolluting/ShowMore/styles.js +7 -6
  53. package/lib/Widgets/MostPolluting/assets/index.js +12 -12
  54. package/lib/Widgets/MostPolluting/components/ChangePercent.js +20 -14
  55. package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +36 -31
  56. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +49 -54
  57. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +44 -40
  58. package/lib/Widgets/MostPolluting/components/PotentialImpact.js +28 -27
  59. package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +53 -49
  60. package/lib/Widgets/MostPolluting/models.js +1 -1
  61. package/lib/Widgets/MostPolluting/styles.js +4 -6
  62. package/lib/Widgets/PotentialImpactSummary/Back/Back.js +8 -6
  63. package/lib/Widgets/PotentialImpactSummary/Icon.js +30 -39
  64. package/lib/Widgets/PotentialImpactSummary/index.js +20 -28
  65. package/lib/Widgets/PotentialImpactSummary/index.test.js +48 -54
  66. package/lib/Widgets/PotentialImpactSummary/styles.js +8 -13
  67. package/lib/Widgets/PotentialImpactSummary/useCasesResponse.interface.js +1 -1
  68. package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +10 -8
  69. package/lib/Widgets/QualitySummary/PieChart/PieChart.js +23 -18
  70. package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +34 -31
  71. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +28 -26
  72. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +35 -38
  73. package/lib/Widgets/QualitySummary/QualitySummary.js +10 -14
  74. package/lib/Widgets/QualitySummary/qualitySummary.mock.js +4 -7
  75. package/lib/Widgets/QualitySummary/qualitySummaryResponse.interface.js +1 -1
  76. package/lib/Widgets/QualitySummary/styles.js +24 -21
  77. package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +12 -14
  78. package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +25 -25
  79. package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +26 -21
  80. package/lib/Widgets/UtilityInformation/UtilityInformation.js +23 -36
  81. package/lib/Widgets/UtilityInformation/UtilityInformationResponse.interface.js +1 -1
  82. package/lib/Widgets/UtilityInformation/styles.js +30 -31
  83. package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +3 -5
  84. package/lib/assets/icons/TopNavbar/index.js +7 -7
  85. package/lib/assets/icons/TrendSvg.js +7 -7
  86. package/lib/assets/icons/index.js +16 -16
  87. package/lib/assets/icons/kandoStepper/index.js +7 -7
  88. package/lib/assets/icons/siteTypes/index.js +2 -2
  89. package/lib/components/ApplyButton/ApplyButton.js +10 -11
  90. package/lib/components/ApplyButton/index.js +3 -4
  91. package/lib/components/Backdrop/Backdrop.js +7 -5
  92. package/lib/components/ContentLoader/ContentLoader.js +12 -10
  93. package/lib/components/ContentLoader/index.js +2 -2
  94. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +12 -12
  95. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +5 -9
  96. package/lib/components/CustomInputs/DoubleTabs/styles.js +21 -16
  97. package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +12 -20
  98. package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +7 -6
  99. package/lib/components/CustomInputs/Search/Search.js +37 -60
  100. package/lib/components/CustomInputs/Search/index.js +3 -4
  101. package/lib/components/CustomInputs/Select/Select.js +38 -55
  102. package/lib/components/CustomInputs/Select/Select.stories.js +6 -10
  103. package/lib/components/DamageType/DamageType.js +35 -60
  104. package/lib/components/DamageType/index.js +3 -4
  105. package/lib/components/DataLoaderError/DataLoaderError.js +9 -7
  106. package/lib/components/DischargeHeatmap/DischargeHeatmap.js +11 -13
  107. package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +72 -73
  108. package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +25 -37
  109. package/lib/components/DischargeHeatmap/HighchartsOptions.js +12 -16
  110. package/lib/components/DischargeHeatmap/index.js +3 -4
  111. package/lib/components/DischargeHeatmap/mocks/handlers.js +5 -6
  112. package/lib/components/DischargeHeatmap/popupText.js +11 -12
  113. package/lib/components/DischargeHeatmap/titles.js +4 -6
  114. package/lib/components/DischargeHeatmap/types.js +1 -1
  115. package/lib/components/ErrorBoundary.js +27 -42
  116. package/lib/components/Events/Events.js +29 -48
  117. package/lib/components/Events/index.js +3 -4
  118. package/lib/components/Graph/Graph.js +74 -95
  119. package/lib/components/Graph/index.js +3 -4
  120. package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +19 -24
  121. package/lib/components/Header/Breadcrumbs/index.js +3 -4
  122. package/lib/components/Header/DoubleTabs/DoubleTabs.js +18 -28
  123. package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +5 -9
  124. package/lib/components/Header/DoubleTabs/styles.js +5 -8
  125. package/lib/components/Header/Header.js +3 -3
  126. package/lib/components/Header/Header.stories.js +5 -9
  127. package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +24 -36
  128. package/lib/components/Header/InfoBar/InfoBar.js +69 -102
  129. package/lib/components/Header/InfoBar/Search/Control.js +11 -10
  130. package/lib/components/Header/InfoBar/Search/GroupLabel.js +8 -7
  131. package/lib/components/Header/InfoBar/Search/Search.js +17 -24
  132. package/lib/components/Header/InfoBar/Search/SearchContainer.js +21 -35
  133. package/lib/components/Header/InfoBar/Search/index.js +3 -4
  134. package/lib/components/Header/InfoBar/Search/searchStyle.js +36 -49
  135. package/lib/components/Header/InfoBar/TimeFilter.js +13 -17
  136. package/lib/components/Header/InfoBar/types.js +1 -1
  137. package/lib/components/Header/KandoNavbar/KandoNavbar.js +66 -93
  138. package/lib/components/Header/KandoNavbar/index.js +3 -4
  139. package/lib/components/Header/Slideshow/Slideshow.js +67 -91
  140. package/lib/components/Header/Slideshow/index.js +3 -4
  141. package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +7 -5
  142. package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +22 -24
  143. package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +17 -17
  144. package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +36 -42
  145. package/lib/components/Header/Toolbar/Toolbar.js +58 -76
  146. package/lib/components/InfoBar/InfoBar.js +10 -24
  147. package/lib/components/InfoBar/InfoBar.stories.js +5 -9
  148. package/lib/components/KandoModal/KandoModal.js +26 -62
  149. package/lib/components/KandoModal/index.js +3 -4
  150. package/lib/components/Link.js +9 -8
  151. package/lib/components/Links/CustomRedirect/CustomRedirect.js +10 -7
  152. package/lib/components/Links/StyledLink/StyledLink.js +17 -20
  153. package/lib/components/Links/StyledNavLink/StyledNavLink.js +12 -10
  154. package/lib/components/LiveEvents/CarouselSlide.js +11 -10
  155. package/lib/components/LiveEvents/LiveEvents.js +7 -6
  156. package/lib/components/LiveEvents/index.js +3 -4
  157. package/lib/components/LoaderByPercent/LoaderByPercent.js +37 -30
  158. package/lib/components/Map/Map.js +20 -25
  159. package/lib/components/Map/index.js +3 -4
  160. package/lib/components/Modal/Modal.js +10 -10
  161. package/lib/components/NarrowHeader.js +18 -32
  162. package/lib/components/PointInfo/PointInfo.js +20 -19
  163. package/lib/components/PointInfo/index.js +3 -4
  164. package/lib/components/PopupModal/PopupModal.js +13 -17
  165. package/lib/components/PopupModal/PopupModal.stories.js +17 -24
  166. package/lib/components/Sector/Sector.js +34 -40
  167. package/lib/components/Sector/Sector.test.js +24 -24
  168. package/lib/components/Sector/SectorIconsNew.js +26 -19
  169. package/lib/components/Sector/index.js +3 -4
  170. package/lib/components/Sector/sectorIcons.js +4 -5
  171. package/lib/components/SevereEvent/Eta/Eta.js +49 -54
  172. package/lib/components/SevereEvent/Eta/styles.js +11 -8
  173. package/lib/components/SevereEvent/SevereEvent.js +28 -52
  174. package/lib/components/SevereEvent/SevereEvent.scss +0 -24
  175. package/lib/components/Spinner/Spinner.js +8 -8
  176. package/lib/components/Spinner/Spinner.stories.js +6 -11
  177. package/lib/components/Spinner/index.js +3 -4
  178. package/lib/components/Spinner/styles.js +21 -16
  179. package/lib/components/Tabs/Tabs.js +18 -31
  180. package/lib/components/Tabs/Tabs.stories.js +6 -10
  181. package/lib/components/Tabs/assets/index.js +6 -6
  182. package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +13 -18
  183. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +32 -45
  184. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +20 -34
  185. package/lib/components/TimeRangeSelector/KandoRangePicker/index.js +3 -4
  186. package/lib/components/TimeRangeSelector/TimeRangeHelper.js +17 -22
  187. package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +13 -14
  188. package/lib/components/TimeRangeSelector/TimeRangeItem/index.js +3 -4
  189. package/lib/components/TimeRangeSelector/TimeRangeList.js +24 -27
  190. package/lib/components/TimeRangeSelector/TimeRangeOptions.js +17 -27
  191. package/lib/components/TimeRangeSelector/TimeRangeSelector.js +26 -31
  192. package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +6 -10
  193. package/lib/components/TimeRangeSelector/constants.js +3 -5
  194. package/lib/components/TimeRangeSelector/index.js +3 -4
  195. package/lib/components/Toggle/Toggle.js +11 -18
  196. package/lib/components/Toggle/index.js +3 -4
  197. package/lib/components/TrendGraph/TrendGraph.js +24 -42
  198. package/lib/components/TrendGraph/index.js +3 -4
  199. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +26 -33
  200. package/lib/components/TrendGraphNVL/index.js +3 -4
  201. package/lib/development-environment/index.js +9 -13
  202. package/lib/development-environment/mock/browser.js +2 -5
  203. package/lib/development-environment/mock/get.js +8 -10
  204. package/lib/development-environment/mock/handlers.js +2 -3
  205. package/lib/development-environment/mock/mockBus.js +4 -5
  206. package/lib/development-environment/mock/mockObjects/area-trends-graph.js +2 -3
  207. package/lib/development-environment/mock/mockObjects/areaInformation.js +2 -3
  208. package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +2 -3
  209. package/lib/development-environment/mock/mockObjects/areaSitesData.js +2 -3
  210. package/lib/development-environment/mock/mockObjects/areasJson.js +2 -3
  211. package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +2 -3
  212. package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +2 -3
  213. package/lib/development-environment/mock/mockObjects/data-menuData.js +2 -3
  214. package/lib/development-environment/mock/mockObjects/data-search.js +2 -3
  215. package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +2 -3
  216. package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +2 -3
  217. package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +2 -3
  218. package/lib/development-environment/mock/mockObjects/eventsJson.js +2 -3
  219. package/lib/development-environment/mock/mockObjects/metascore.js +2 -3
  220. package/lib/development-environment/mock/mockObjects/permissionsJson.js +2 -3
  221. package/lib/development-environment/mock/mockObjects/pointsJson.js +2 -3
  222. package/lib/development-environment/mock/mockObjects/site-info.js +2 -3
  223. package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +2 -3
  224. package/lib/development-environment/togly/ToglyDashboard.js +13 -23
  225. package/lib/development-environment/togly/ToglyItem.js +24 -31
  226. package/lib/development-environment/togly/flags.js +1 -1
  227. package/lib/development-environment/togly/init.js +4 -4
  228. package/lib/development-environment/togly/macro.js +13 -9
  229. package/lib/development-environment/togly/useDoubleKeyDown.js +7 -9
  230. package/lib/development-environment/togly/useLocalStorage.js +13 -18
  231. package/lib/hooks/useApi.js +20 -56
  232. package/lib/hooks/useApiWithDashboardQuery.js +23 -43
  233. package/lib/hooks/useClickOutside.js +4 -5
  234. package/lib/hooks/useInitializeHeaders.js +6 -6
  235. package/lib/hooks/useKandoFetch.js +17 -31
  236. package/lib/hooks/useMap.js +25 -37
  237. package/lib/hooks/useNavContext.js +22 -26
  238. package/lib/hooks/useQueryURL.js +2 -3
  239. package/lib/hooks/useRemoveExistingLayers.js +7 -8
  240. package/lib/hooks/useUpdateEventBodyTail.js +14 -19
  241. package/lib/hooks/useUserTimeZone.js +34 -31
  242. package/lib/hooks/useUserTimeZone.test.js +19 -23
  243. package/lib/hooks/useWindowSize.js +7 -14
  244. package/lib/i18n/en.json +3 -14
  245. package/lib/i18n/he.json +1 -11
  246. package/lib/index.js +11 -13
  247. package/lib/macros/getVersion.js +2 -2
  248. package/lib/models/IAction.js +1 -1
  249. package/lib/models/IAppState.js +1 -1
  250. package/lib/pages/AreaPage/AreaPage.js +34 -68
  251. package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +15 -17
  252. package/lib/pages/AreaPage/Dashboard/Dashboard.js +26 -28
  253. package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +14 -23
  254. package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +5 -5
  255. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +8 -8
  256. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +10 -10
  257. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +4 -6
  258. package/lib/pages/AreaPage/Dashboard/Sites/SitesResponse.interface.js +1 -1
  259. package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +2 -3
  260. package/lib/pages/AreaPage/Dashboard/Sites/styles.js +5 -8
  261. package/lib/pages/AssessmentPage/AssessmentPage.js +38 -46
  262. package/lib/pages/CannyWidget/Feedback.js +14 -16
  263. package/lib/pages/CovidPage/CovidPage.js +9 -16
  264. package/lib/pages/CovidPage/components/Body.js +26 -30
  265. package/lib/pages/CovidPage/components/Map.js +28 -40
  266. package/lib/pages/CovidPage/components/Sidebar.js +15 -16
  267. package/lib/pages/CovidPage/components/Summary.js +20 -29
  268. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +26 -33
  269. package/lib/pages/CovidPage/components/TrendGraphNVL/index.js +3 -4
  270. package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +52 -76
  271. package/lib/pages/CovidPage/components/TrendPopupContent/index.js +3 -4
  272. package/lib/pages/CovidPage/components/areas/Area.js +24 -36
  273. package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +45 -46
  274. package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +32 -36
  275. package/lib/pages/CovidPage/components/areas/AreasList.js +29 -42
  276. package/lib/pages/CovidPage/components/areas/Sort.js +12 -17
  277. package/lib/pages/CovidPage/components/nvlStatusHelper.js +11 -11
  278. package/lib/pages/DashboardMap/AreaCard.js +27 -27
  279. package/lib/pages/DashboardMap/AssessmentIcon.js +8 -7
  280. package/lib/pages/DashboardMap/Capacity.js +28 -77
  281. package/lib/pages/DashboardMap/FactoryCard.js +28 -24
  282. package/lib/pages/DashboardMap/HighchartsOptions.js +6 -5
  283. package/lib/pages/DashboardMap/List.js +55 -65
  284. package/lib/pages/DashboardMap/ListContext.js +14 -19
  285. package/lib/pages/DashboardMap/Loader.js +3 -3
  286. package/lib/pages/DashboardMap/SeverityBadge.js +16 -24
  287. package/lib/pages/DashboardMap/WWTPMap.js +57 -71
  288. package/lib/pages/DashboardMap/WaterDischarge.js +9 -9
  289. package/lib/pages/DashboardMap/Widget.js +48 -67
  290. package/lib/pages/DashboardMap/index.js +3 -4
  291. package/lib/pages/DashboardMap/utils.js +41 -60
  292. package/lib/pages/EventsPage/Body/Body.js +15 -12
  293. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +17 -20
  294. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +16 -27
  295. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +10 -9
  296. package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +13 -10
  297. package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +22 -31
  298. package/lib/pages/EventsPage/DragAndDropArea/index.js +3 -4
  299. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +30 -38
  300. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +14 -23
  301. package/lib/pages/EventsPage/EventsPage.js +10 -17
  302. package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +26 -40
  303. package/lib/pages/EventsPage/events/MoreInfo.js +18 -19
  304. package/lib/pages/EventsPage/events/Sidebar.js +14 -11
  305. package/lib/pages/EventsPage/events/event_info/Contaminants/Contaminants.js +9 -10
  306. package/lib/pages/EventsPage/events/event_info/Contaminants/ContaminantsList.js +19 -24
  307. package/lib/pages/EventsPage/events/event_info/Contaminants/index.js +3 -4
  308. package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +31 -38
  309. package/lib/pages/EventsPage/events/event_info/EventDetails.js +35 -33
  310. package/lib/pages/EventsPage/events/event_info/EventInfo.js +50 -60
  311. package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +5 -5
  312. package/lib/pages/EventsPage/events/event_info/EventSection.js +18 -21
  313. package/lib/pages/EventsPage/events/event_info/EventSection.test.js +29 -23
  314. package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +39 -50
  315. package/lib/pages/EventsPage/events/event_info/Header/Header.js +8 -7
  316. package/lib/pages/EventsPage/events/event_info/Header/HeaderContainer.js +30 -35
  317. package/lib/pages/EventsPage/events/event_info/Header/index.js +3 -4
  318. package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +6 -7
  319. package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +30 -39
  320. package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +6 -9
  321. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionAssessment.js +14 -15
  322. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionTypesList.js +9 -12
  323. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /index.js +3 -4
  324. package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +23 -24
  325. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResult.js +13 -22
  326. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResultButton.js +7 -6
  327. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/index.js +3 -4
  328. package/lib/pages/EventsPage/events/event_info/SamplingList/SamplingDetails.js +13 -12
  329. package/lib/pages/EventsPage/events/event_info/SamplingList/Samplings.js +22 -28
  330. package/lib/pages/EventsPage/events/event_info/SamplingList/index.js +3 -4
  331. package/lib/pages/EventsPage/events/event_info/SeverityScore/ScoreExplanation.js +13 -10
  332. package/lib/pages/EventsPage/events/event_info/SeverityScore/SeverityScore.js +8 -9
  333. package/lib/pages/EventsPage/events/event_info/SeverityScore/index.js +3 -4
  334. package/lib/pages/EventsPage/events/event_info/SourceDetails/Confidence.js +9 -9
  335. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.js +4 -5
  336. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.test.js +13 -11
  337. package/lib/pages/EventsPage/events/event_info/SourceDetails/IconAndTitles.js +7 -5
  338. package/lib/pages/EventsPage/events/event_info/SourceDetails/MoreInfoButton.js +11 -14
  339. package/lib/pages/EventsPage/events/event_info/SourceDetails/OtherSources.js +7 -6
  340. package/lib/pages/EventsPage/events/event_info/SourceDetails/PotentialSources.js +9 -8
  341. package/lib/pages/EventsPage/events/event_info/SourceDetails/SingleSource.js +9 -8
  342. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceCardBody.js +8 -7
  343. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.js +13 -12
  344. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.test.js +18 -19
  345. package/lib/pages/EventsPage/events/event_info/SourceDetails/WaterDischarge.js +7 -7
  346. package/lib/pages/EventsPage/events/event_info/Timelines/DischargeBox.js +9 -8
  347. package/lib/pages/EventsPage/events/event_info/Timelines/EarlyWarning.js +19 -18
  348. package/lib/pages/EventsPage/events/event_info/Timelines/LiveStatusBadge.js +6 -7
  349. package/lib/pages/EventsPage/events/event_info/Timelines/SeenBox.js +13 -12
  350. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.js +23 -19
  351. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.test.js +12 -11
  352. package/lib/pages/EventsPage/events/event_info/Timelines/Titles.js +8 -7
  353. package/lib/pages/EventsPage/events/event_info/Timelines/index.js +3 -4
  354. package/lib/pages/EventsPage/events/event_info/Timelines/style.js +4 -6
  355. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +25 -40
  356. package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +30 -39
  357. package/lib/pages/EventsPage/events/event_info/samplingsOld/Sampling.js +13 -12
  358. package/lib/pages/EventsPage/events/event_info/samplingsOld/Samplings.js +17 -20
  359. package/lib/pages/EventsPage/events/event_info/sources/Source.js +27 -31
  360. package/lib/pages/EventsPage/events/event_info/sources/Sources.js +22 -27
  361. package/lib/pages/EventsPage/events/event_info/styles.js +21 -15
  362. package/lib/pages/EventsPage/events/events_list/EventItem.js +18 -21
  363. package/lib/pages/EventsPage/events/events_list/EventUtils.js +11 -11
  364. package/lib/pages/EventsPage/events/events_list/EventsList.js +111 -142
  365. package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +41 -58
  366. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +90 -135
  367. package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +54 -76
  368. package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +39 -44
  369. package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +32 -41
  370. package/lib/pages/EventsPage/events/events_list/Filter/SingleSelect.js +19 -21
  371. package/lib/pages/EventsPage/events/events_list/Sort.js +28 -39
  372. package/lib/pages/ImportFileWizard/FileUploadRespones.js +14 -22
  373. package/lib/pages/ImportFileWizard/ImportButtomButtons.js +9 -8
  374. package/lib/pages/ImportFileWizard/ImportFile.js +21 -25
  375. package/lib/pages/ImportFileWizard/ResponseBody.js +26 -36
  376. package/lib/pages/ImportFileWizard/ValidationForm.js +23 -23
  377. package/lib/pages/ImportFileWizard/ValidationResponse.js +23 -25
  378. package/lib/pages/ImportFileWizard/importFileUtils.js +4 -5
  379. package/lib/pages/ImportFileWizard/index.js +3 -4
  380. package/lib/pages/ImportGisPage/ImportGisContainer.js +22 -27
  381. package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +38 -44
  382. package/lib/pages/ImportGisPage/importGisUtils.js +43 -52
  383. package/lib/pages/ImportGisProcess/index.js +14 -18
  384. package/lib/pages/ImportSiteProcess/index.js +14 -18
  385. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +7 -13
  386. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +18 -20
  387. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +4 -4
  388. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +28 -60
  389. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +8 -12
  390. package/lib/pages/NotificationsPage/Notification/Notification.js +17 -13
  391. package/lib/pages/NotificationsPage/Notifications.interface.js +1 -1
  392. package/lib/pages/NotificationsPage/Notifications.mock.js +2 -3
  393. package/lib/pages/NotificationsPage/Notifications.stories.js +6 -10
  394. package/lib/pages/NotificationsPage/NotificationsPage.js +19 -38
  395. package/lib/pages/NotificationsPage/assets/index.js +10 -10
  396. package/lib/pages/NotificationsPageV2/NotificationsPage.js +72 -101
  397. package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +95 -65
  398. package/lib/pages/NotificationsPageV2/components/NotificationsForm/EventType.js +13 -15
  399. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSendVia.js +19 -17
  400. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSensors.js +18 -22
  401. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSources.js +18 -22
  402. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationTags.js +19 -23
  403. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +82 -71
  404. package/lib/pages/NotificationsPageV2/components/NotificationsForm/WaterAuthoritySelection.js +19 -23
  405. package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +71 -74
  406. package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +80 -94
  407. package/lib/pages/NotificationsPageV2/notificationUtils.js +40 -39
  408. package/lib/pages/OldSitePage/IDashboardData.js +1 -1
  409. package/lib/pages/OldSitePage/OldSitePage.js +56 -132
  410. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +6 -10
  411. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +5 -9
  412. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +9 -7
  413. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +16 -19
  414. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +10 -12
  415. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +12 -19
  416. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +14 -11
  417. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +5 -9
  418. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +18 -16
  419. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +51 -64
  420. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +10 -8
  421. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +29 -54
  422. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +4 -7
  423. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +12 -19
  424. package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +11 -11
  425. package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +10 -12
  426. package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +27 -23
  427. package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +28 -30
  428. package/lib/pages/OldSitePage/SamplingParameters/models.js +1 -1
  429. package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +5 -8
  430. package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +16 -12
  431. package/lib/pages/OperationsPage/LeftPanel.js +35 -55
  432. package/lib/pages/OperationsPage/Map/Map.js +12 -12
  433. package/lib/pages/OperationsPage/Map/useMap.js +52 -64
  434. package/lib/pages/OperationsPage/OperationsContainerPage.js +32 -59
  435. package/lib/pages/OperationsPage/OperationsFilePage.js +10 -12
  436. package/lib/pages/OperationsPage/OperationsUtilityPage.js +5 -6
  437. package/lib/pages/OperationsPage/RightPanel.js +22 -25
  438. package/lib/pages/OperationsPage/index.js +4 -4
  439. package/lib/pages/PollutionRiskAssessment/FactoryDetails.js +27 -60
  440. package/lib/pages/PollutionRiskAssessment/FilterBehaviors.js +19 -25
  441. package/lib/pages/PollutionRiskAssessment/FilterButton.js +11 -10
  442. package/lib/pages/PollutionRiskAssessment/Map.js +38 -42
  443. package/lib/pages/PollutionRiskAssessment/SearchButton.js +11 -10
  444. package/lib/pages/PollutionRiskAssessment/SearchField.js +26 -40
  445. package/lib/pages/PollutionRiskAssessment/TotalSavings.js +16 -16
  446. package/lib/pages/PollutionRiskAssessment/UseCases.js +32 -34
  447. package/lib/pages/PollutionRiskAssessment/index.js +76 -136
  448. package/lib/pages/PollutionRiskAssessment/useMap.js +34 -50
  449. package/lib/pages/PollutionRiskAssessment/utils.js +7 -7
  450. package/lib/pages/ProfilePage/Container.js +3 -4
  451. package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +23 -40
  452. package/lib/pages/ProfilePage/ProfilePage.js +106 -205
  453. package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +25 -34
  454. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +20 -20
  455. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +27 -30
  456. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +57 -119
  457. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +18 -23
  458. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +14 -13
  459. package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +40 -45
  460. package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +25 -24
  461. package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +18 -19
  462. package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +15 -18
  463. package/lib/pages/SamplingsPage/DesktopActions/index.js +3 -4
  464. package/lib/pages/SamplingsPage/NavigationDropdown.js +43 -31
  465. package/lib/pages/SamplingsPage/NewSamplingAction.js +75 -102
  466. package/lib/pages/SamplingsPage/SamplingMobileModal.js +124 -98
  467. package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +23 -25
  468. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +36 -25
  469. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +36 -61
  470. package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +16 -21
  471. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +10 -9
  472. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +108 -193
  473. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +47 -54
  474. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +42 -39
  475. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +42 -39
  476. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +21 -28
  477. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +4 -6
  478. package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +11 -7
  479. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +51 -53
  480. package/lib/pages/SamplingsPage/SamplingsMobileList.js +22 -31
  481. package/lib/pages/SamplingsPage/SamplingsPage.js +25 -33
  482. package/lib/pages/SamplingsPage/SamplingsPageContainer.js +49 -58
  483. package/lib/pages/SamplingsPage/index.js +2 -3
  484. package/lib/pages/SamplingsPage/samplingsPageUtils.js +52 -83
  485. package/lib/pages/SitePage/DischargePattern/DischargePattern.js +7 -6
  486. package/lib/pages/SitePage/PollutionContributor/PollutionContributor.js +16 -16
  487. package/lib/pages/SitePage/PollutionContributor/PollutionContributorContainer.js +12 -16
  488. package/lib/pages/SitePage/PollutionContributor/contributorUtils.js +16 -16
  489. package/lib/pages/SitePage/PollutionContributor/index.js +3 -4
  490. package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +5 -9
  491. package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +15 -15
  492. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +10 -9
  493. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +27 -24
  494. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +12 -16
  495. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +37 -33
  496. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +10 -12
  497. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +15 -25
  498. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +14 -11
  499. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +5 -9
  500. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +18 -16
  501. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +58 -71
  502. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +10 -8
  503. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +15 -27
  504. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +5 -9
  505. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +12 -19
  506. package/lib/pages/SitePage/SamplingParameters/body/Body.js +10 -9
  507. package/lib/pages/SitePage/SamplingParameters/body/BodyContainer.js +30 -40
  508. package/lib/pages/SitePage/SamplingParameters/body/index.js +3 -4
  509. package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +11 -12
  510. package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +10 -12
  511. package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +54 -54
  512. package/lib/pages/SitePage/SamplingParameters/dataParser.js +32 -41
  513. package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +11 -9
  514. package/lib/pages/SitePage/SamplingParameters/models.js +1 -1
  515. package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +5 -8
  516. package/lib/pages/SitePage/SamplingParameters/styles/styles.js +16 -12
  517. package/lib/pages/SitePage/SiteInformation/EmptyState.js +13 -10
  518. package/lib/pages/SitePage/SiteInformation/SiteInformation.js +31 -31
  519. package/lib/pages/SitePage/SitePage.js +37 -77
  520. package/lib/pages/UploadLabResult/index.js +15 -16
  521. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +27 -37
  522. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +8 -13
  523. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +11 -15
  524. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +5 -9
  525. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +47 -50
  526. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +11 -8
  527. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +4 -5
  528. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +6 -9
  529. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +11 -10
  530. package/lib/pages/UtilityDashboardPage/MostSevereEvents/models.js +1 -1
  531. package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +16 -13
  532. package/lib/pages/UtilityDashboardPage/TopBar/constants.js +8 -8
  533. package/lib/pages/UtilityDashboardPage/TopBar/styles.js +3 -4
  534. package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +20 -30
  535. package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +28 -40
  536. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +15 -17
  537. package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +7 -14
  538. package/lib/pages/UtilityDashboardPage/VirtualAreaDashboardPage.js +26 -31
  539. package/lib/pages/WbeDashboard/ExpandableComponent.js +9 -9
  540. package/lib/pages/WbeDashboard/GraphWrapper.js +28 -35
  541. package/lib/pages/WbeDashboard/IndividualTinyGraph.js +16 -19
  542. package/lib/pages/WbeDashboard/SearchInput.js +15 -21
  543. package/lib/pages/WbeDashboard/SummaryGraph.js +50 -77
  544. package/lib/pages/WbeDashboard/SummaryGraphModal.js +20 -18
  545. package/lib/pages/WbeDashboard/Tabs.js +11 -11
  546. package/lib/pages/WbeDashboard/WbeDashboardPage.js +147 -210
  547. package/lib/pages/WbeDashboard/WbeSummaryBar.js +39 -48
  548. package/lib/pages/WwtpPage/DashboardCard.js +25 -21
  549. package/lib/pages/WwtpPage/DischargePatternCard.js +14 -25
  550. package/lib/pages/WwtpPage/InletsCard/InletsBar.js +11 -11
  551. package/lib/pages/WwtpPage/InletsCard/InletsCard.js +22 -22
  552. package/lib/pages/WwtpPage/InletsCard/index.js +3 -4
  553. package/lib/pages/WwtpPage/Map.js +6 -6
  554. package/lib/pages/WwtpPage/OrganicCard.js +4 -5
  555. package/lib/pages/WwtpPage/PotentialSaving/ImpactCard.js +4 -5
  556. package/lib/pages/WwtpPage/PotentialSaving/PotentialItem.js +8 -7
  557. package/lib/pages/WwtpPage/PotentialSaving/PotentialSaving.js +11 -11
  558. package/lib/pages/WwtpPage/PotentialSaving/PotentialSavingContainer.js +20 -17
  559. package/lib/pages/WwtpPage/PotentialSaving/index.js +3 -4
  560. package/lib/pages/WwtpPage/PotentialSaving/types.js +1 -1
  561. package/lib/pages/WwtpPage/PredictionCard.js +4 -5
  562. package/lib/pages/WwtpPage/TrendCard.js +20 -22
  563. package/lib/pages/WwtpPage/UpgradeBox.js +4 -5
  564. package/lib/pages/WwtpPage/WwtpPage.js +9 -8
  565. package/lib/pages/WwtpPage/WwtpPageContainer.js +23 -19
  566. package/lib/pages/WwtpPage/index.js +3 -4
  567. package/lib/providers/Slideshow/SlideshowContext.js +11 -10
  568. package/lib/providers/Slideshow/SlideshowProvider.js +22 -40
  569. package/lib/providers/Slideshow/SlideshowRunner.js +18 -21
  570. package/lib/providers/UrlHistory/UrlHistoryContext.js +7 -6
  571. package/lib/providers/UrlHistory/UrlHistoryProvider.js +12 -13
  572. package/lib/providers/UrlHistory/index.js +4 -4
  573. package/lib/providers/UrlHistory/useLastVisited.js +5 -6
  574. package/lib/react-app-env.d.js +1 -1
  575. package/lib/store/ImportGis/action.js +1 -1
  576. package/lib/store/ImportGis/actionTypes.js +4 -5
  577. package/lib/store/ImportGis/actionsCreator.js +7 -5
  578. package/lib/store/ImportGis/models/gisImports.js +1 -1
  579. package/lib/store/ImportGis/reducer.js +9 -7
  580. package/lib/store/WBE/actionTypes.js +2 -3
  581. package/lib/store/WBE/actions.js +1 -1
  582. package/lib/store/WBE/models/IAreaWBE.js +1 -1
  583. package/lib/store/WBE/models/IWBE.js +1 -1
  584. package/lib/store/WBE/models/IWBEState.js +1 -1
  585. package/lib/store/WBE/reducer.js +10 -8
  586. package/lib/store/WWTPDashboard/WWTPDashboardSlice.js +24 -15
  587. package/lib/store/WWTPDashboard/types.js +1 -1
  588. package/lib/store/areas/actionTypes.js +4 -7
  589. package/lib/store/areas/actions.js +7 -13
  590. package/lib/store/areas/models/IArea.js +1 -1
  591. package/lib/store/areas/models/IAreasState.js +1 -1
  592. package/lib/store/areas/reducer.js +8 -6
  593. package/lib/store/context/actionTypes.js +3 -5
  594. package/lib/store/context/actions.js +3 -3
  595. package/lib/store/context/contextMiddlewares.js +15 -18
  596. package/lib/store/context/models/INavContext.js +1 -1
  597. package/lib/store/context/models/INavContextState.js +1 -1
  598. package/lib/store/context/reducer.js +10 -8
  599. package/lib/store/dashboard/dashboardSlice.js +18 -11
  600. package/lib/store/dashboard/periodType.js +1 -1
  601. package/lib/store/edges/actionTypes.js +5 -9
  602. package/lib/store/edges/actions.js +4 -8
  603. package/lib/store/edges/models/IEdge.js +1 -1
  604. package/lib/store/edges/models/IEdgesState.js +1 -1
  605. package/lib/store/edges/reducer.js +13 -17
  606. package/lib/store/events/actionTypes.js +17 -33
  607. package/lib/store/events/actions.js +3 -7
  608. package/lib/store/events/models/IEvent.js +1 -1
  609. package/lib/store/events/models/IEventsState.js +1 -1
  610. package/lib/store/events/models/ISource.js +1 -1
  611. package/lib/store/events/reducer.js +28 -39
  612. package/lib/store/filters/IFilter.js +1 -1
  613. package/lib/store/filters/IFilterItem.js +1 -1
  614. package/lib/store/global/actionTypes.js +11 -21
  615. package/lib/store/global/actions.js +8 -6
  616. package/lib/store/global/models/IGlobalState.js +1 -1
  617. package/lib/store/global/reducer.js +9 -7
  618. package/lib/store/permissions/permissionsSlice.js +12 -9
  619. package/lib/store/points/actionTypes.js +3 -5
  620. package/lib/store/points/actions.js +6 -10
  621. package/lib/store/points/models/IGeoPoint.js +1 -1
  622. package/lib/store/points/models/IGroup.js +1 -1
  623. package/lib/store/points/models/IIssue.js +1 -1
  624. package/lib/store/points/models/IPoint.js +1 -1
  625. package/lib/store/points/models/IPointsState.js +1 -1
  626. package/lib/store/points/reducer.js +7 -5
  627. package/lib/store/rootActionTypes.js +2 -3
  628. package/lib/store/rootActions.js +1 -1
  629. package/lib/store/rootReducer.js +12 -10
  630. package/lib/store/rootStore.js +6 -6
  631. package/lib/store/samplings/action.js +1 -1
  632. package/lib/store/samplings/actionTypes.js +4 -5
  633. package/lib/store/samplings/actionsCreator.js +1 -1
  634. package/lib/store/samplings/models/Samplings.js +1 -1
  635. package/lib/store/samplings/reducer.js +10 -10
  636. package/lib/styles/StylesLayout.js +7 -6
  637. package/lib/styles/theme/theme.js +23 -26
  638. package/lib/test/mocks/browser.js +2 -5
  639. package/lib/test/test-utils.js +12 -9
  640. package/lib/ui-kit/Alert/KandoAlert.js +8 -6
  641. package/lib/ui-kit/Button/Button.js +129 -83
  642. package/lib/ui-kit/Button/Button.test.js +27 -33
  643. package/lib/ui-kit/Button/ButtonUtils.js +1 -1
  644. package/lib/ui-kit/Checkbox/Checkbox.js +34 -27
  645. package/lib/ui-kit/ContentCard/ContentCard.js +16 -20
  646. package/lib/ui-kit/Dashboard/Dashboard.js +29 -28
  647. package/lib/ui-kit/Dashboard/index.js +3 -4
  648. package/lib/ui-kit/DropDown/DropDown.js +23 -22
  649. package/lib/ui-kit/DropDown/DropDown.test.js +13 -13
  650. package/lib/ui-kit/DropDown/DropDownItem.js +26 -25
  651. package/lib/ui-kit/DropDown/DropdownToggle.js +13 -10
  652. package/lib/ui-kit/EmptyState/EmptyState.js +7 -6
  653. package/lib/ui-kit/HierarchyGraph/AutoFitTree.js +69 -81
  654. package/lib/ui-kit/HierarchyGraph/HierarchyGraph.js +89 -167
  655. package/lib/ui-kit/HierarchyGraph/LeafSign.js +7 -7
  656. package/lib/ui-kit/HierarchyGraph/MicroStackedBar.js +17 -19
  657. package/lib/ui-kit/HierarchyGraph/NodeIcon.js +9 -8
  658. package/lib/ui-kit/HierarchyGraph/NodeLayout.js +22 -25
  659. package/lib/ui-kit/HierarchyGraph/PollutionContributorNode.js +11 -10
  660. package/lib/ui-kit/HierarchyGraph/ScoreNode.js +10 -9
  661. package/lib/ui-kit/HierarchyGraph/index.js +3 -4
  662. package/lib/ui-kit/HierarchyGraph/utils.js +57 -67
  663. package/lib/ui-kit/IconAction/IconAction.js +9 -8
  664. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +47 -64
  665. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +58 -49
  666. package/lib/ui-kit/InletsPie/InletsPie.js +17 -16
  667. package/lib/ui-kit/InletsPie/index.js +3 -4
  668. package/lib/ui-kit/InletsPie/options.js +7 -9
  669. package/lib/ui-kit/KandoBottomSheet/KandoBottomSheet.js +29 -38
  670. package/lib/ui-kit/KandoFilter/KandoFilter.js +10 -11
  671. package/lib/ui-kit/KandoList/KandoList.js +13 -12
  672. package/lib/ui-kit/KandoList/kandoListUtils.js +1 -1
  673. package/lib/ui-kit/KandoTable/KandoTable.js +48 -41
  674. package/lib/ui-kit/KandoTable/KandoTable.test.js +21 -27
  675. package/lib/ui-kit/KandoTable/kandoTableUtils.js +1 -1
  676. package/lib/ui-kit/Layout/Layout.js +8 -7
  677. package/lib/ui-kit/MobileInput/MobileInput.js +56 -50
  678. package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +14 -17
  679. package/lib/ui-kit/ModalConfirmation/index.js +2 -3
  680. package/lib/ui-kit/OrganicEvents/GaugeChart.js +9 -8
  681. package/lib/ui-kit/OrganicEvents/OrganicEvents.js +8 -9
  682. package/lib/ui-kit/OrganicEvents/OrganicEventsContainer.js +26 -22
  683. package/lib/ui-kit/OrganicEvents/TextInfo.js +17 -13
  684. package/lib/ui-kit/OrganicEvents/index.js +3 -4
  685. package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +12 -11
  686. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +17 -21
  687. package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +3 -4
  688. package/lib/ui-kit/ScoreGauge/ScoreGauge.js +21 -24
  689. package/lib/ui-kit/ScoreGauge/constant.js +3 -4
  690. package/lib/ui-kit/ScoreGauge/index.js +3 -4
  691. package/lib/ui-kit/TimeLineChart/TrendChart.js +25 -28
  692. package/lib/ui-kit/TimeLineChart/index.js +3 -4
  693. package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +10 -11
  694. package/lib/ui-kit/Tooltip/Tooltip.js +15 -9
  695. package/lib/ui-kit/index.js +8 -8
  696. package/lib/ui-kit/kandoStepper/KandoStepper.js +13 -14
  697. package/lib/ui-kit/siteName/SiteName.js +13 -11
  698. package/lib/utilities/ActionUtility.js +7 -7
  699. package/lib/utilities/Alert.js +23 -20
  700. package/lib/utilities/Analytics.js +19 -19
  701. package/lib/utilities/Array.js +4 -5
  702. package/lib/utilities/Enum.js +15 -51
  703. package/lib/utilities/ErrorBoundary.js +27 -42
  704. package/lib/utilities/File.js +45 -73
  705. package/lib/utilities/GetDir.js +10 -10
  706. package/lib/utilities/KandoDate.js +7 -15
  707. package/lib/utilities/KandoModal.js +16 -28
  708. package/lib/utilities/LocalStorage.js +5 -7
  709. package/lib/utilities/ThousandsToK.js +2 -2
  710. package/lib/utilities/TimeFormat.js +22 -23
  711. package/lib/utilities/Truncate.js +17 -27
  712. package/lib/utilities/edgesMath.js +15 -16
  713. package/lib/utilities/i18n.js +5 -6
  714. package/lib/utilities/kql.js +10 -12
  715. package/lib/utilities/map/icons.js +18 -18
  716. package/lib/utilities/polylinedecorator.js +88 -113
  717. package/lib/utilities/scoreToData.js +20 -26
  718. package/lib/utilities/scoreToData.test.js +5 -5
  719. package/lib/utilities/time.js +9 -10
  720. package/lib/utilities/uploadToS3.js +12 -12
  721. package/lib/utilities/urls.js +19 -16
  722. package/package.json +12 -9
  723. package/lib/components/SeasonalInsights/SeasonalInsights.js +0 -150
  724. package/lib/components/SevereEvent/UpstreamBadge.js +0 -60
  725. package/lib/components/TopBanner/TopBanner.js +0 -208
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
@@ -27,23 +27,23 @@ _leaflet.default.Symbol.Dash = _leaflet.default.Class.extend({
27
27
  pixelSize: 10,
28
28
  pathOptions: {}
29
29
  },
30
- initialize: function initialize(options) {
30
+ initialize: function (options) {
31
31
  _leaflet.default.Util.setOptions(this, options);
32
32
  this.options.pathOptions.clickable = false;
33
33
  },
34
- buildSymbol: function buildSymbol(dirPoint, latLngs, map, index, total) {
35
- var opts = this.options;
36
- var d2r = Math.PI / 180;
34
+ buildSymbol: function (dirPoint, latLngs, map, index, total) {
35
+ const opts = this.options;
36
+ const d2r = Math.PI / 180;
37
37
 
38
38
  // for a dot, nothing more to compute
39
39
  if (opts.pixelSize <= 1) {
40
40
  return _leaflet.default.polyline([dirPoint.latLng, dirPoint.latLng], opts.pathOptions);
41
41
  }
42
- var midPoint = map.project(dirPoint.latLng);
43
- var angle = -(dirPoint.heading - 90) * d2r;
44
- var a = _leaflet.default.point(midPoint.x + opts.pixelSize * Math.cos(angle + Math.PI) / 2, midPoint.y + opts.pixelSize * Math.sin(angle) / 2);
42
+ const midPoint = map.project(dirPoint.latLng);
43
+ const angle = -(dirPoint.heading - 90) * d2r;
44
+ const a = _leaflet.default.point(midPoint.x + opts.pixelSize * Math.cos(angle + Math.PI) / 2, midPoint.y + opts.pixelSize * Math.sin(angle) / 2);
45
45
  // compute second point by central symmetry to avoid unecessary cos/sin
46
- var b = midPoint.add(midPoint.subtract(a));
46
+ const b = midPoint.add(midPoint.subtract(a));
47
47
  return _leaflet.default.polyline([map.unproject(a), map.unproject(b)], opts.pathOptions);
48
48
  }
49
49
  });
@@ -60,22 +60,22 @@ _leaflet.default.Symbol.ArrowHead = _leaflet.default.Class.extend({
60
60
  weight: 2
61
61
  }
62
62
  },
63
- initialize: function initialize(options) {
63
+ initialize: function (options) {
64
64
  _leaflet.default.Util.setOptions(this, options);
65
65
  this.options.pathOptions.clickable = false;
66
66
  },
67
- buildSymbol: function buildSymbol(dirPoint, latLngs, map, index, total) {
67
+ buildSymbol: function (dirPoint, latLngs, map, index, total) {
68
68
  return this.options.polygon ? _leaflet.default.polygon(this._buildArrowPath(dirPoint, map), this.options.pathOptions) : _leaflet.default.polyline(this._buildArrowPath(dirPoint, map), this.options.pathOptions);
69
69
  },
70
- _buildArrowPath: function _buildArrowPath(dirPoint, map) {
71
- var d2r = Math.PI / 180;
72
- var tipPoint = map.project(dirPoint.latLng);
73
- var direction = -(dirPoint.heading - 90) * d2r;
74
- var radianArrowAngle = this.options.headAngle / 2 * d2r;
75
- var headAngle1 = direction + radianArrowAngle;
76
- var headAngle2 = direction - radianArrowAngle;
77
- var arrowHead1 = _leaflet.default.point(tipPoint.x - this.options.pixelSize * Math.cos(headAngle1), tipPoint.y + this.options.pixelSize * Math.sin(headAngle1));
78
- var arrowHead2 = _leaflet.default.point(tipPoint.x - this.options.pixelSize * Math.cos(headAngle2), tipPoint.y + this.options.pixelSize * Math.sin(headAngle2));
70
+ _buildArrowPath: function (dirPoint, map) {
71
+ const d2r = Math.PI / 180;
72
+ const tipPoint = map.project(dirPoint.latLng);
73
+ const direction = -(dirPoint.heading - 90) * d2r;
74
+ const radianArrowAngle = this.options.headAngle / 2 * d2r;
75
+ const headAngle1 = direction + radianArrowAngle;
76
+ const headAngle2 = direction - radianArrowAngle;
77
+ const arrowHead1 = _leaflet.default.point(tipPoint.x - this.options.pixelSize * Math.cos(headAngle1), tipPoint.y + this.options.pixelSize * Math.sin(headAngle1));
78
+ const arrowHead2 = _leaflet.default.point(tipPoint.x - this.options.pixelSize * Math.cos(headAngle2), tipPoint.y + this.options.pixelSize * Math.sin(headAngle2));
79
79
  return [map.unproject(arrowHead1), dirPoint.latLng, map.unproject(arrowHead2)];
80
80
  }
81
81
  });
@@ -87,12 +87,12 @@ _leaflet.default.Symbol.Marker = _leaflet.default.Class.extend({
87
87
  markerOptions: {},
88
88
  rotate: false
89
89
  },
90
- initialize: function initialize(options) {
90
+ initialize: function (options) {
91
91
  _leaflet.default.Util.setOptions(this, options);
92
92
  this.options.markerOptions.clickable = false;
93
93
  this.options.markerOptions.draggable = false;
94
94
  },
95
- buildSymbol: function buildSymbol(directionPoint, latLngs, map, index, total) {
95
+ buildSymbol: function (directionPoint, latLngs, map, index, total) {
96
96
  if (this.options.rotate) {
97
97
  this.options.markerOptions.rotationAngle = directionPoint.heading + (this.options.angleCorrection || 0);
98
98
  }
@@ -102,17 +102,13 @@ _leaflet.default.Symbol.Marker = _leaflet.default.Class.extend({
102
102
  _leaflet.default.Symbol.marker = function (options) {
103
103
  return new _leaflet.default.Symbol.Marker(options);
104
104
  };
105
- var isCoord = function isCoord(c) {
106
- return c instanceof _leaflet.default.LatLng || Array.isArray(c) && c.length === 2 && typeof c[0] === 'number';
107
- };
108
- var isCoordArray = function isCoordArray(ll) {
109
- return Array.isArray(ll) && isCoord(ll[0]);
110
- };
105
+ const isCoord = c => c instanceof _leaflet.default.LatLng || Array.isArray(c) && c.length === 2 && typeof c[0] === 'number';
106
+ const isCoordArray = ll => Array.isArray(ll) && isCoord(ll[0]);
111
107
  _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
112
108
  options: {
113
109
  patterns: []
114
110
  },
115
- initialize: function initialize(paths, options) {
111
+ initialize: function (paths, options) {
116
112
  _leaflet.default.FeatureGroup.prototype.initialize.call(this);
117
113
  _leaflet.default.Util.setOptions(this, options);
118
114
  this._map = null;
@@ -125,11 +121,10 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
125
121
  * array of LatLng, array of 2-number arrays, Polyline, Polygon,
126
122
  * array of one of the previous.
127
123
  */
128
- _initPaths: function _initPaths(input, isPolygon) {
129
- var _this = this;
124
+ _initPaths: function (input, isPolygon) {
130
125
  if (isCoordArray(input)) {
131
126
  // Leaflet Polygons don't need the first point to be repeated, but we do
132
- var coords = isPolygon ? input.concat([input[0]]) : input;
127
+ const coords = isPolygon ? input.concat([input[0]]) : input;
133
128
  return [coords];
134
129
  }
135
130
  if (input instanceof _leaflet.default.Polyline) {
@@ -138,21 +133,19 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
138
133
  }
139
134
  if (Array.isArray(input)) {
140
135
  // flatten everything, we just need coordinate lists to apply patterns
141
- return input.reduce(function (flatArray, p) {
142
- return flatArray.concat(_this._initPaths(p, isPolygon));
143
- }, []);
136
+ return input.reduce((flatArray, p) => flatArray.concat(this._initPaths(p, isPolygon)), []);
144
137
  }
145
138
  return [];
146
139
  },
147
140
  // parse pattern definitions and precompute some values
148
- _initPatterns: function _initPatterns(patternDefs) {
141
+ _initPatterns: function (patternDefs) {
149
142
  return patternDefs.map(this._parsePatternDef);
150
143
  },
151
144
  /**
152
145
  * Changes the patterns used by this decorator
153
146
  * and redraws the new one.
154
147
  */
155
- setPatterns: function setPatterns(patterns) {
148
+ setPatterns: function (patterns) {
156
149
  this.options.patterns = patterns;
157
150
  this._patterns = this._initPatterns(this.options.patterns);
158
151
  this.redraw();
@@ -161,7 +154,7 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
161
154
  * Changes the patterns used by this decorator
162
155
  * and redraws the new one.
163
156
  */
164
- setPaths: function setPaths(paths) {
157
+ setPaths: function (paths) {
165
158
  this._paths = this._initPaths(paths);
166
159
  this._bounds = this._initBounds();
167
160
  this.redraw();
@@ -169,7 +162,7 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
169
162
  /**
170
163
  * Parse the pattern definition
171
164
  */
172
- _parsePatternDef: function _parsePatternDef(patternDef, latLngs) {
165
+ _parsePatternDef: function (patternDef, latLngs) {
173
166
  return {
174
167
  symbolFactory: patternDef.symbol,
175
168
  // Parse offset and repeat values, managing the two cases:
@@ -179,12 +172,12 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
179
172
  repeat: parseRelativeOrAbsoluteValue(patternDef.repeat)
180
173
  };
181
174
  },
182
- onAdd: function onAdd(map) {
175
+ onAdd: function (map) {
183
176
  this._map = map;
184
177
  this._draw();
185
178
  this._map.on('moveend', this.redraw, this);
186
179
  },
187
- onRemove: function onRemove(map) {
180
+ onRemove: function (map) {
188
181
  this._map.off('moveend', this.redraw, this);
189
182
  this._map = null;
190
183
  _leaflet.default.FeatureGroup.prototype.onRemove.call(this, map);
@@ -193,44 +186,34 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
193
186
  * As real pattern bounds depends on map zoom and bounds,
194
187
  * we just compute the total bounds of all paths decorated by this instance.
195
188
  */
196
- _initBounds: function _initBounds() {
197
- var allPathCoords = this._paths.reduce(function (acc, path) {
198
- return acc.concat(path);
199
- }, []);
189
+ _initBounds: function () {
190
+ const allPathCoords = this._paths.reduce((acc, path) => acc.concat(path), []);
200
191
  return _leaflet.default.latLngBounds(allPathCoords);
201
192
  },
202
- getBounds: function getBounds() {
193
+ getBounds: function () {
203
194
  return this._bounds;
204
195
  },
205
196
  /**
206
197
  * Returns an array of ILayers object
207
198
  */
208
- _buildSymbols: function _buildSymbols(latLngs, symbolFactory, directionPoints) {
209
- var _this2 = this;
210
- return directionPoints.map(function (directionPoint, i) {
211
- return symbolFactory.buildSymbol(directionPoint, latLngs, _this2._map, i, directionPoints.length);
212
- });
199
+ _buildSymbols: function (latLngs, symbolFactory, directionPoints) {
200
+ return directionPoints.map((directionPoint, i) => symbolFactory.buildSymbol(directionPoint, latLngs, this._map, i, directionPoints.length));
213
201
  },
214
202
  /**
215
203
  * Compute pairs of LatLng and heading angle,
216
204
  * that define positions and directions of the symbols on the path
217
205
  */
218
- _getDirectionPoints: function _getDirectionPoints(latLngs, pattern) {
219
- var _this3 = this;
206
+ _getDirectionPoints: function (latLngs, pattern) {
220
207
  if (latLngs.length < 2) {
221
208
  return [];
222
209
  }
223
- var pathAsPoints = latLngs.map(function (latLng) {
224
- return _this3._map.project(latLng);
225
- });
226
- return projectPatternOnPointPath(pathAsPoints, pattern).map(function (point) {
227
- return {
228
- latLng: _this3._map.unproject(_leaflet.default.point(point.pt)),
229
- heading: point.heading
230
- };
231
- });
210
+ const pathAsPoints = latLngs.map(latLng => this._map.project(latLng));
211
+ return projectPatternOnPointPath(pathAsPoints, pattern).map(point => ({
212
+ latLng: this._map.unproject(_leaflet.default.point(point.pt)),
213
+ heading: point.heading
214
+ }));
232
215
  },
233
- redraw: function redraw() {
216
+ redraw: function () {
234
217
  if (!this._map) {
235
218
  return;
236
219
  }
@@ -240,27 +223,21 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
240
223
  /**
241
224
  * Returns all symbols for a given pattern as an array of FeatureGroup
242
225
  */
243
- _getPatternLayers: function _getPatternLayers(pattern) {
244
- var _this4 = this;
245
- var mapBounds = this._map.getBounds().pad(0.1);
246
- return this._paths.map(function (path) {
247
- var directionPoints = _this4._getDirectionPoints(path, pattern)
226
+ _getPatternLayers: function (pattern) {
227
+ const mapBounds = this._map.getBounds().pad(0.1);
228
+ return this._paths.map(path => {
229
+ const directionPoints = this._getDirectionPoints(path, pattern)
248
230
  // filter out invisible points
249
- .filter(function (point) {
250
- return mapBounds.contains(point.latLng);
251
- });
252
- return _leaflet.default.featureGroup(_this4._buildSymbols(path, pattern.symbolFactory, directionPoints));
231
+ .filter(point => mapBounds.contains(point.latLng));
232
+ return _leaflet.default.featureGroup(this._buildSymbols(path, pattern.symbolFactory, directionPoints));
253
233
  });
254
234
  },
255
235
  /**
256
236
  * Draw all patterns
257
237
  */
258
- _draw: function _draw() {
259
- var _this5 = this;
260
- this._patterns.map(function (pattern) {
261
- return _this5._getPatternLayers(pattern);
262
- }).forEach(function (layers) {
263
- _this5.addLayer(_leaflet.default.featureGroup(layers));
238
+ _draw: function () {
239
+ this._patterns.map(pattern => this._getPatternLayers(pattern)).forEach(layers => {
240
+ this.addLayer(_leaflet.default.featureGroup(layers));
264
241
  });
265
242
  }
266
243
  });
@@ -274,17 +251,17 @@ _leaflet.default.polylineDecorator = function (paths, options) {
274
251
  // functional re-impl of L.Point.distanceTo,
275
252
  // with no dependency on Leaflet for easier testing
276
253
  function pointDistance(ptA, ptB) {
277
- var x = ptB.x - ptA.x;
278
- var y = ptB.y - ptA.y;
254
+ const x = ptB.x - ptA.x;
255
+ const y = ptB.y - ptA.y;
279
256
  return Math.sqrt(x * x + y * y);
280
257
  }
281
- var computeSegmentHeading = function computeSegmentHeading(a, b) {
282
- return (Math.atan2(b.y - a.y, b.x - a.x) * 180 / Math.PI + 90 + 360) % 360;
283
- };
258
+ const computeSegmentHeading = (a, b) => (Math.atan2(b.y - a.y, b.x - a.x) * 180 / Math.PI + 90 + 360) % 360;
284
259
  exports.computeSegmentHeading = computeSegmentHeading;
285
- var asRatioToPathLength = function asRatioToPathLength(_ref, totalPathLength) {
286
- var value = _ref.value,
287
- isInPixels = _ref.isInPixels;
260
+ const asRatioToPathLength = (_ref, totalPathLength) => {
261
+ let {
262
+ value,
263
+ isInPixels
264
+ } = _ref;
288
265
  return isInPixels ? value / totalPathLength : value;
289
266
  };
290
267
  exports.asRatioToPathLength = asRatioToPathLength;
@@ -295,26 +272,24 @@ function parseRelativeOrAbsoluteValue(value) {
295
272
  isInPixels: false
296
273
  };
297
274
  }
298
- var parsedValue = value ? parseFloat(value) : 0;
275
+ const parsedValue = value ? parseFloat(value) : 0;
299
276
  return {
300
277
  value: parsedValue,
301
278
  isInPixels: parsedValue > 0
302
279
  };
303
280
  }
304
- var pointsEqual = function pointsEqual(a, b) {
305
- return a.x === b.x && a.y === b.y;
306
- };
281
+ const pointsEqual = (a, b) => a.x === b.x && a.y === b.y;
307
282
  function pointsToSegments(pts) {
308
- return pts.reduce(function (segments, b, idx, points) {
283
+ return pts.reduce((segments, b, idx, points) => {
309
284
  // this test skips same adjacent points
310
285
  if (idx > 0 && !pointsEqual(b, points[idx - 1])) {
311
- var a = points[idx - 1];
312
- var distA = segments.length > 0 ? segments[segments.length - 1].distB : 0;
313
- var distAB = pointDistance(a, b);
286
+ const a = points[idx - 1];
287
+ const distA = segments.length > 0 ? segments[segments.length - 1].distB : 0;
288
+ const distAB = pointDistance(a, b);
314
289
  segments.push({
315
- a: a,
316
- b: b,
317
- distA: distA,
290
+ a,
291
+ b,
292
+ distA,
318
293
  distB: distA + distAB,
319
294
  heading: computeSegmentHeading(a, b)
320
295
  });
@@ -324,38 +299,38 @@ function pointsToSegments(pts) {
324
299
  }
325
300
  function projectPatternOnPointPath(pts, pattern) {
326
301
  // 1. split the path into segment infos
327
- var segments = pointsToSegments(pts);
328
- var nbSegments = segments.length;
302
+ const segments = pointsToSegments(pts);
303
+ const nbSegments = segments.length;
329
304
  if (nbSegments === 0) {
330
305
  return [];
331
306
  }
332
- var totalPathLength = segments[nbSegments - 1].distB;
333
- var offset = asRatioToPathLength(pattern.offset, totalPathLength);
334
- var endOffset = asRatioToPathLength(pattern.endOffset, totalPathLength);
335
- var repeat = asRatioToPathLength(pattern.repeat, totalPathLength);
336
- var repeatIntervalPixels = totalPathLength * repeat;
337
- var startOffsetPixels = offset > 0 ? totalPathLength * offset : 0;
338
- var endOffsetPixels = endOffset > 0 ? totalPathLength * endOffset : 0;
307
+ const totalPathLength = segments[nbSegments - 1].distB;
308
+ const offset = asRatioToPathLength(pattern.offset, totalPathLength);
309
+ const endOffset = asRatioToPathLength(pattern.endOffset, totalPathLength);
310
+ const repeat = asRatioToPathLength(pattern.repeat, totalPathLength);
311
+ const repeatIntervalPixels = totalPathLength * repeat;
312
+ const startOffsetPixels = offset > 0 ? totalPathLength * offset : 0;
313
+ const endOffsetPixels = endOffset > 0 ? totalPathLength * endOffset : 0;
339
314
 
340
315
  // 2. generate the positions of the pattern as offsets from the path start
341
- var positionOffsets = [];
342
- var positionOffset = startOffsetPixels;
316
+ const positionOffsets = [];
317
+ let positionOffset = startOffsetPixels;
343
318
  do {
344
319
  positionOffsets.push(positionOffset);
345
320
  positionOffset += repeatIntervalPixels;
346
321
  } while (repeatIntervalPixels > 0 && positionOffset < totalPathLength - endOffsetPixels);
347
322
 
348
323
  // 3. projects offsets to segments
349
- var segmentIndex = 0;
350
- var segment = segments[0];
351
- return positionOffsets.map(function (positionOffset) {
324
+ let segmentIndex = 0;
325
+ let segment = segments[0];
326
+ return positionOffsets.map(positionOffset => {
352
327
  // find the segment matching the offset,
353
328
  // starting from the previous one as offsets are ordered
354
329
  while (positionOffset > segment.distB && segmentIndex < nbSegments - 1) {
355
330
  segmentIndex++;
356
331
  segment = segments[segmentIndex];
357
332
  }
358
- var segmentRatio = (positionOffset - segment.distA) / (segment.distB - segment.distA);
333
+ const segmentRatio = (positionOffset - segment.distA) / (segment.distB - segment.distA);
359
334
  return {
360
335
  pt: interpolateBetweenPoints(segment.a, segment.b, segmentRatio),
361
336
  heading: segment.heading
@@ -383,4 +358,4 @@ function interpolateBetweenPoints(ptA, ptB, ratio) {
383
358
  window.L = _leaflet.default;
384
359
  window.L.polylineDecorator = _leaflet.default.polylineDecorator;
385
360
  window.L.Symbol = _leaflet.default.Symbol;
386
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTCIsIlN5bWJvbCIsIkRhc2giLCJDbGFzcyIsImV4dGVuZCIsIm9wdGlvbnMiLCJwaXhlbFNpemUiLCJwYXRoT3B0aW9ucyIsImluaXRpYWxpemUiLCJVdGlsIiwic2V0T3B0aW9ucyIsImNsaWNrYWJsZSIsImJ1aWxkU3ltYm9sIiwiZGlyUG9pbnQiLCJsYXRMbmdzIiwibWFwIiwiaW5kZXgiLCJ0b3RhbCIsIm9wdHMiLCJkMnIiLCJNYXRoIiwiUEkiLCJwb2x5bGluZSIsImxhdExuZyIsIm1pZFBvaW50IiwicHJvamVjdCIsImFuZ2xlIiwiaGVhZGluZyIsImEiLCJwb2ludCIsIngiLCJjb3MiLCJ5Iiwic2luIiwiYiIsImFkZCIsInN1YnRyYWN0IiwidW5wcm9qZWN0IiwiZGFzaCIsIkFycm93SGVhZCIsInBvbHlnb24iLCJoZWFkQW5nbGUiLCJzdHJva2UiLCJ3ZWlnaHQiLCJfYnVpbGRBcnJvd1BhdGgiLCJ0aXBQb2ludCIsImRpcmVjdGlvbiIsInJhZGlhbkFycm93QW5nbGUiLCJoZWFkQW5nbGUxIiwiaGVhZEFuZ2xlMiIsImFycm93SGVhZDEiLCJhcnJvd0hlYWQyIiwiYXJyb3dIZWFkIiwiTWFya2VyIiwibWFya2VyT3B0aW9ucyIsInJvdGF0ZSIsImRyYWdnYWJsZSIsImRpcmVjdGlvblBvaW50Iiwicm90YXRpb25BbmdsZSIsImFuZ2xlQ29ycmVjdGlvbiIsIm1hcmtlciIsImlzQ29vcmQiLCJjIiwiTGF0TG5nIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaXNDb29yZEFycmF5IiwibGwiLCJQb2x5bGluZURlY29yYXRvciIsIkZlYXR1cmVHcm91cCIsInBhdHRlcm5zIiwicGF0aHMiLCJwcm90b3R5cGUiLCJjYWxsIiwiX21hcCIsIl9wYXRocyIsIl9pbml0UGF0aHMiLCJfYm91bmRzIiwiX2luaXRCb3VuZHMiLCJfcGF0dGVybnMiLCJfaW5pdFBhdHRlcm5zIiwiaW5wdXQiLCJpc1BvbHlnb24iLCJfdGhpcyIsImNvb3JkcyIsImNvbmNhdCIsIlBvbHlsaW5lIiwiZ2V0TGF0TG5ncyIsIlBvbHlnb24iLCJyZWR1Y2UiLCJmbGF0QXJyYXkiLCJwIiwicGF0dGVybkRlZnMiLCJfcGFyc2VQYXR0ZXJuRGVmIiwic2V0UGF0dGVybnMiLCJyZWRyYXciLCJzZXRQYXRocyIsInBhdHRlcm5EZWYiLCJzeW1ib2xGYWN0b3J5Iiwic3ltYm9sIiwib2Zmc2V0IiwicGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZSIsImVuZE9mZnNldCIsInJlcGVhdCIsIm9uQWRkIiwiX2RyYXciLCJvbiIsIm9uUmVtb3ZlIiwib2ZmIiwiYWxsUGF0aENvb3JkcyIsImFjYyIsInBhdGgiLCJsYXRMbmdCb3VuZHMiLCJnZXRCb3VuZHMiLCJfYnVpbGRTeW1ib2xzIiwiZGlyZWN0aW9uUG9pbnRzIiwiX3RoaXMyIiwiaSIsIl9nZXREaXJlY3Rpb25Qb2ludHMiLCJwYXR0ZXJuIiwiX3RoaXMzIiwicGF0aEFzUG9pbnRzIiwicHJvamVjdFBhdHRlcm5PblBvaW50UGF0aCIsInB0IiwiY2xlYXJMYXllcnMiLCJfZ2V0UGF0dGVybkxheWVycyIsIl90aGlzNCIsIm1hcEJvdW5kcyIsInBhZCIsImZpbHRlciIsImNvbnRhaW5zIiwiZmVhdHVyZUdyb3VwIiwiX3RoaXM1IiwiZm9yRWFjaCIsImxheWVycyIsImFkZExheWVyIiwicG9seWxpbmVEZWNvcmF0b3IiLCJwb2ludERpc3RhbmNlIiwicHRBIiwicHRCIiwic3FydCIsImNvbXB1dGVTZWdtZW50SGVhZGluZyIsImF0YW4yIiwiZXhwb3J0cyIsImFzUmF0aW9Ub1BhdGhMZW5ndGgiLCJfcmVmIiwidG90YWxQYXRoTGVuZ3RoIiwidmFsdWUiLCJpc0luUGl4ZWxzIiwiaW5kZXhPZiIsInBhcnNlRmxvYXQiLCJwYXJzZWRWYWx1ZSIsInBvaW50c0VxdWFsIiwicG9pbnRzVG9TZWdtZW50cyIsInB0cyIsInNlZ21lbnRzIiwiaWR4IiwicG9pbnRzIiwiZGlzdEEiLCJkaXN0QiIsImRpc3RBQiIsInB1c2giLCJuYlNlZ21lbnRzIiwicmVwZWF0SW50ZXJ2YWxQaXhlbHMiLCJzdGFydE9mZnNldFBpeGVscyIsImVuZE9mZnNldFBpeGVscyIsInBvc2l0aW9uT2Zmc2V0cyIsInBvc2l0aW9uT2Zmc2V0Iiwic2VnbWVudEluZGV4Iiwic2VnbWVudCIsInNlZ21lbnRSYXRpbyIsImludGVycG9sYXRlQmV0d2VlblBvaW50cyIsInJhdGlvIiwid2luZG93Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxpdGllcy9wb2x5bGluZWRlY29yYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTCBmcm9tICdsZWFmbGV0Jztcbi8vIGVuYWJsZSByb3RhdGlvbkFuZ2xlIGFuZCByb3RhdGlvbk9yaWdpbiBzdXBwb3J0IG9uIEwuTWFya2VyXG5pbXBvcnQgJ2xlYWZsZXQtcm90YXRlZG1hcmtlcic7XG5cbi8qKlxuICogRGVmaW5lcyBzZXZlcmFsIGNsYXNzZXMgb2Ygc3ltYm9sIGZhY3RvcmllcyxcbiAqIHRvIGJlIHVzZWQgd2l0aCBMLlBvbHlsaW5lRGVjb3JhdG9yXG4gKi9cblxuTC5TeW1ib2wgPSBMLlN5bWJvbCB8fCB7fTtcblxuLyoqXG4gKiBBIHNpbXBsZSBkYXNoIHN5bWJvbCwgZHJhd24gYXMgYSBQb2x5bGluZS5cbiAqIENhbiBhbHNvIGJlIHVzZWQgZm9yIGRvdHMsIGlmICdwaXhlbFNpemUnIG9wdGlvbiBpcyBnaXZlbiB0aGUgMCB2YWx1ZS5cbiAqL1xuTC5TeW1ib2wuRGFzaCA9IEwuQ2xhc3MuZXh0ZW5kKHtcbiAgb3B0aW9uczoge1xuICAgIHBpeGVsU2l6ZTogMTAsXG4gICAgcGF0aE9wdGlvbnM6IHt9LFxuICB9LFxuXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5vcHRpb25zLnBhdGhPcHRpb25zLmNsaWNrYWJsZSA9IGZhbHNlO1xuICB9LFxuXG4gIGJ1aWxkU3ltYm9sOiBmdW5jdGlvbiAoZGlyUG9pbnQsIGxhdExuZ3MsIG1hcCwgaW5kZXgsIHRvdGFsKSB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCBkMnIgPSBNYXRoLlBJIC8gMTgwO1xuXG4gICAgLy8gZm9yIGEgZG90LCBub3RoaW5nIG1vcmUgdG8gY29tcHV0ZVxuICAgIGlmIChvcHRzLnBpeGVsU2l6ZSA8PSAxKSB7XG4gICAgICByZXR1cm4gTC5wb2x5bGluZShbZGlyUG9pbnQubGF0TG5nLCBkaXJQb2ludC5sYXRMbmddLCBvcHRzLnBhdGhPcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCBtaWRQb2ludCA9IG1hcC5wcm9qZWN0KGRpclBvaW50LmxhdExuZyk7XG4gICAgY29uc3QgYW5nbGUgPSAtKGRpclBvaW50LmhlYWRpbmcgLSA5MCkgKiBkMnI7XG4gICAgY29uc3QgYSA9IEwucG9pbnQoXG4gICAgICBtaWRQb2ludC54ICsgKG9wdHMucGl4ZWxTaXplICogTWF0aC5jb3MoYW5nbGUgKyBNYXRoLlBJKSkgLyAyLFxuICAgICAgbWlkUG9pbnQueSArIChvcHRzLnBpeGVsU2l6ZSAqIE1hdGguc2luKGFuZ2xlKSkgLyAyLFxuICAgICk7XG4gICAgLy8gY29tcHV0ZSBzZWNvbmQgcG9pbnQgYnkgY2VudHJhbCBzeW1tZXRyeSB0byBhdm9pZCB1bmVjZXNzYXJ5IGNvcy9zaW5cbiAgICBjb25zdCBiID0gbWlkUG9pbnQuYWRkKG1pZFBvaW50LnN1YnRyYWN0KGEpKTtcbiAgICByZXR1cm4gTC5wb2x5bGluZShbbWFwLnVucHJvamVjdChhKSwgbWFwLnVucHJvamVjdChiKV0sIG9wdHMucGF0aE9wdGlvbnMpO1xuICB9LFxufSk7XG5cbkwuU3ltYm9sLmRhc2ggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEwuU3ltYm9sLkRhc2gob3B0aW9ucyk7XG59O1xuXG5MLlN5bWJvbC5BcnJvd0hlYWQgPSBMLkNsYXNzLmV4dGVuZCh7XG4gIG9wdGlvbnM6IHtcbiAgICBwb2x5Z29uOiB0cnVlLFxuICAgIHBpeGVsU2l6ZTogMTAsXG4gICAgaGVhZEFuZ2xlOiA2MCxcbiAgICBwYXRoT3B0aW9uczoge1xuICAgICAgc3Ryb2tlOiBmYWxzZSxcbiAgICAgIHdlaWdodDogMixcbiAgICB9LFxuICB9LFxuXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5vcHRpb25zLnBhdGhPcHRpb25zLmNsaWNrYWJsZSA9IGZhbHNlO1xuICB9LFxuXG4gIGJ1aWxkU3ltYm9sOiBmdW5jdGlvbiAoZGlyUG9pbnQsIGxhdExuZ3MsIG1hcCwgaW5kZXgsIHRvdGFsKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb2x5Z29uXG4gICAgICA/IEwucG9seWdvbih0aGlzLl9idWlsZEFycm93UGF0aChkaXJQb2ludCwgbWFwKSwgdGhpcy5vcHRpb25zLnBhdGhPcHRpb25zKVxuICAgICAgOiBMLnBvbHlsaW5lKFxuICAgICAgICAgIHRoaXMuX2J1aWxkQXJyb3dQYXRoKGRpclBvaW50LCBtYXApLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXRoT3B0aW9ucyxcbiAgICAgICAgKTtcbiAgfSxcblxuICBfYnVpbGRBcnJvd1BhdGg6IGZ1bmN0aW9uIChkaXJQb2ludCwgbWFwKSB7XG4gICAgY29uc3QgZDJyID0gTWF0aC5QSSAvIDE4MDtcbiAgICBjb25zdCB0aXBQb2ludCA9IG1hcC5wcm9qZWN0KGRpclBvaW50LmxhdExuZyk7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gLShkaXJQb2ludC5oZWFkaW5nIC0gOTApICogZDJyO1xuICAgIGNvbnN0IHJhZGlhbkFycm93QW5nbGUgPSAodGhpcy5vcHRpb25zLmhlYWRBbmdsZSAvIDIpICogZDJyO1xuXG4gICAgY29uc3QgaGVhZEFuZ2xlMSA9IGRpcmVjdGlvbiArIHJhZGlhbkFycm93QW5nbGU7XG4gICAgY29uc3QgaGVhZEFuZ2xlMiA9IGRpcmVjdGlvbiAtIHJhZGlhbkFycm93QW5nbGU7XG4gICAgY29uc3QgYXJyb3dIZWFkMSA9IEwucG9pbnQoXG4gICAgICB0aXBQb2ludC54IC0gdGhpcy5vcHRpb25zLnBpeGVsU2l6ZSAqIE1hdGguY29zKGhlYWRBbmdsZTEpLFxuICAgICAgdGlwUG9pbnQueSArIHRoaXMub3B0aW9ucy5waXhlbFNpemUgKiBNYXRoLnNpbihoZWFkQW5nbGUxKSxcbiAgICApO1xuICAgIGNvbnN0IGFycm93SGVhZDIgPSBMLnBvaW50KFxuICAgICAgdGlwUG9pbnQueCAtIHRoaXMub3B0aW9ucy5waXhlbFNpemUgKiBNYXRoLmNvcyhoZWFkQW5nbGUyKSxcbiAgICAgIHRpcFBvaW50LnkgKyB0aGlzLm9wdGlvbnMucGl4ZWxTaXplICogTWF0aC5zaW4oaGVhZEFuZ2xlMiksXG4gICAgKTtcblxuICAgIHJldHVybiBbXG4gICAgICBtYXAudW5wcm9qZWN0KGFycm93SGVhZDEpLFxuICAgICAgZGlyUG9pbnQubGF0TG5nLFxuICAgICAgbWFwLnVucHJvamVjdChhcnJvd0hlYWQyKSxcbiAgICBdO1xuICB9LFxufSk7XG5cbkwuU3ltYm9sLmFycm93SGVhZCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgTC5TeW1ib2wuQXJyb3dIZWFkKG9wdGlvbnMpO1xufTtcblxuTC5TeW1ib2wuTWFya2VyID0gTC5DbGFzcy5leHRlbmQoe1xuICBvcHRpb25zOiB7XG4gICAgbWFya2VyT3B0aW9uczoge30sXG4gICAgcm90YXRlOiBmYWxzZSxcbiAgfSxcblxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIEwuVXRpbC5zZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zLmNsaWNrYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zLmRyYWdnYWJsZSA9IGZhbHNlO1xuICB9LFxuXG4gIGJ1aWxkU3ltYm9sOiBmdW5jdGlvbiAoZGlyZWN0aW9uUG9pbnQsIGxhdExuZ3MsIG1hcCwgaW5kZXgsIHRvdGFsKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5yb3RhdGUpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zLnJvdGF0aW9uQW5nbGUgPVxuICAgICAgICBkaXJlY3Rpb25Qb2ludC5oZWFkaW5nICsgKHRoaXMub3B0aW9ucy5hbmdsZUNvcnJlY3Rpb24gfHwgMCk7XG4gICAgfVxuICAgIHJldHVybiBMLm1hcmtlcihkaXJlY3Rpb25Qb2ludC5sYXRMbmcsIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zKTtcbiAgfSxcbn0pO1xuXG5MLlN5bWJvbC5tYXJrZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEwuU3ltYm9sLk1hcmtlcihvcHRpb25zKTtcbn07XG5cbmNvbnN0IGlzQ29vcmQgPSAoYykgPT5cbiAgYyBpbnN0YW5jZW9mIEwuTGF0TG5nIHx8XG4gIChBcnJheS5pc0FycmF5KGMpICYmIGMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBjWzBdID09PSAnbnVtYmVyJyk7XG5cbmNvbnN0IGlzQ29vcmRBcnJheSA9IChsbCkgPT4gQXJyYXkuaXNBcnJheShsbCkgJiYgaXNDb29yZChsbFswXSk7XG5cbkwuUG9seWxpbmVEZWNvcmF0b3IgPSBMLkZlYXR1cmVHcm91cC5leHRlbmQoe1xuICBvcHRpb25zOiB7XG4gICAgcGF0dGVybnM6IFtdLFxuICB9LFxuXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChwYXRocywgb3B0aW9ucykge1xuICAgIEwuRmVhdHVyZUdyb3VwLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyk7XG4gICAgTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5fbWFwID0gbnVsbDtcbiAgICB0aGlzLl9wYXRocyA9IHRoaXMuX2luaXRQYXRocyhwYXRocyk7XG4gICAgdGhpcy5fYm91bmRzID0gdGhpcy5faW5pdEJvdW5kcygpO1xuICAgIHRoaXMuX3BhdHRlcm5zID0gdGhpcy5faW5pdFBhdHRlcm5zKHRoaXMub3B0aW9ucy5wYXR0ZXJucyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlYWxzIHdpdGggYWxsIHRoZSBkaWZmZXJlbnQgY2FzZXMuIGlucHV0IGNhbiBiZSBvbmUgb2YgdGhlc2UgdHlwZXM6XG4gICAqIGFycmF5IG9mIExhdExuZywgYXJyYXkgb2YgMi1udW1iZXIgYXJyYXlzLCBQb2x5bGluZSwgUG9seWdvbixcbiAgICogYXJyYXkgb2Ygb25lIG9mIHRoZSBwcmV2aW91cy5cbiAgICovXG4gIF9pbml0UGF0aHM6IGZ1bmN0aW9uIChpbnB1dCwgaXNQb2x5Z29uKSB7XG4gICAgaWYgKGlzQ29vcmRBcnJheShpbnB1dCkpIHtcbiAgICAgIC8vIExlYWZsZXQgUG9seWdvbnMgZG9uJ3QgbmVlZCB0aGUgZmlyc3QgcG9pbnQgdG8gYmUgcmVwZWF0ZWQsIGJ1dCB3ZSBkb1xuICAgICAgY29uc3QgY29vcmRzID0gaXNQb2x5Z29uID8gaW5wdXQuY29uY2F0KFtpbnB1dFswXV0pIDogaW5wdXQ7XG4gICAgICByZXR1cm4gW2Nvb3Jkc107XG4gICAgfVxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEwuUG9seWxpbmUpIHtcbiAgICAgIC8vIHdlIG5lZWQgc29tZSByZWN1cnNpdml0eSB0byBzdXBwb3J0IG11bHRpLXBvbHkqXG4gICAgICByZXR1cm4gdGhpcy5faW5pdFBhdGhzKGlucHV0LmdldExhdExuZ3MoKSwgaW5wdXQgaW5zdGFuY2VvZiBMLlBvbHlnb24pO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgIC8vIGZsYXR0ZW4gZXZlcnl0aGluZywgd2UganVzdCBuZWVkIGNvb3JkaW5hdGUgbGlzdHMgdG8gYXBwbHkgcGF0dGVybnNcbiAgICAgIHJldHVybiBpbnB1dC5yZWR1Y2UoXG4gICAgICAgIChmbGF0QXJyYXksIHApID0+IGZsYXRBcnJheS5jb25jYXQodGhpcy5faW5pdFBhdGhzKHAsIGlzUG9seWdvbikpLFxuICAgICAgICBbXSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfSxcblxuICAvLyBwYXJzZSBwYXR0ZXJuIGRlZmluaXRpb25zIGFuZCBwcmVjb21wdXRlIHNvbWUgdmFsdWVzXG4gIF9pbml0UGF0dGVybnM6IGZ1bmN0aW9uIChwYXR0ZXJuRGVmcykge1xuICAgIHJldHVybiBwYXR0ZXJuRGVmcy5tYXAodGhpcy5fcGFyc2VQYXR0ZXJuRGVmKTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgcGF0dGVybnMgdXNlZCBieSB0aGlzIGRlY29yYXRvclxuICAgKiBhbmQgcmVkcmF3cyB0aGUgbmV3IG9uZS5cbiAgICovXG4gIHNldFBhdHRlcm5zOiBmdW5jdGlvbiAocGF0dGVybnMpIHtcbiAgICB0aGlzLm9wdGlvbnMucGF0dGVybnMgPSBwYXR0ZXJucztcbiAgICB0aGlzLl9wYXR0ZXJucyA9IHRoaXMuX2luaXRQYXR0ZXJucyh0aGlzLm9wdGlvbnMucGF0dGVybnMpO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIHBhdHRlcm5zIHVzZWQgYnkgdGhpcyBkZWNvcmF0b3JcbiAgICogYW5kIHJlZHJhd3MgdGhlIG5ldyBvbmUuXG4gICAqL1xuICBzZXRQYXRoczogZnVuY3Rpb24gKHBhdGhzKSB7XG4gICAgdGhpcy5fcGF0aHMgPSB0aGlzLl9pbml0UGF0aHMocGF0aHMpO1xuICAgIHRoaXMuX2JvdW5kcyA9IHRoaXMuX2luaXRCb3VuZHMoKTtcbiAgICB0aGlzLnJlZHJhdygpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgcGF0dGVybiBkZWZpbml0aW9uXG4gICAqL1xuICBfcGFyc2VQYXR0ZXJuRGVmOiBmdW5jdGlvbiAocGF0dGVybkRlZiwgbGF0TG5ncykge1xuICAgIHJldHVybiB7XG4gICAgICBzeW1ib2xGYWN0b3J5OiBwYXR0ZXJuRGVmLnN5bWJvbCxcbiAgICAgIC8vIFBhcnNlIG9mZnNldCBhbmQgcmVwZWF0IHZhbHVlcywgbWFuYWdpbmcgdGhlIHR3byBjYXNlczpcbiAgICAgIC8vIGFic29sdXRlIChpbiBwaXhlbHMpIG9yIHJlbGF0aXZlIChpbiBwZXJjZW50YWdlIG9mIHRoZSBwb2x5bGluZSBsZW5ndGgpXG4gICAgICBvZmZzZXQ6IHBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUocGF0dGVybkRlZi5vZmZzZXQpLFxuICAgICAgZW5kT2Zmc2V0OiBwYXJzZVJlbGF0aXZlT3JBYnNvbHV0ZVZhbHVlKHBhdHRlcm5EZWYuZW5kT2Zmc2V0KSxcbiAgICAgIHJlcGVhdDogcGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZShwYXR0ZXJuRGVmLnJlcGVhdCksXG4gICAgfTtcbiAgfSxcblxuICBvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xuICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICB0aGlzLl9kcmF3KCk7XG4gICAgdGhpcy5fbWFwLm9uKCdtb3ZlZW5kJywgdGhpcy5yZWRyYXcsIHRoaXMpO1xuICB9LFxuXG4gIG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gICAgdGhpcy5fbWFwLm9mZignbW92ZWVuZCcsIHRoaXMucmVkcmF3LCB0aGlzKTtcbiAgICB0aGlzLl9tYXAgPSBudWxsO1xuICAgIEwuRmVhdHVyZUdyb3VwLnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsIG1hcCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFzIHJlYWwgcGF0dGVybiBib3VuZHMgZGVwZW5kcyBvbiBtYXAgem9vbSBhbmQgYm91bmRzLFxuICAgKiB3ZSBqdXN0IGNvbXB1dGUgdGhlIHRvdGFsIGJvdW5kcyBvZiBhbGwgcGF0aHMgZGVjb3JhdGVkIGJ5IHRoaXMgaW5zdGFuY2UuXG4gICAqL1xuICBfaW5pdEJvdW5kczogZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGFsbFBhdGhDb29yZHMgPSB0aGlzLl9wYXRocy5yZWR1Y2UoXG4gICAgICAoYWNjLCBwYXRoKSA9PiBhY2MuY29uY2F0KHBhdGgpLFxuICAgICAgW10sXG4gICAgKTtcbiAgICByZXR1cm4gTC5sYXRMbmdCb3VuZHMoYWxsUGF0aENvb3Jkcyk7XG4gIH0sXG5cbiAgZ2V0Qm91bmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBJTGF5ZXJzIG9iamVjdFxuICAgKi9cbiAgX2J1aWxkU3ltYm9sczogZnVuY3Rpb24gKGxhdExuZ3MsIHN5bWJvbEZhY3RvcnksIGRpcmVjdGlvblBvaW50cykge1xuICAgIHJldHVybiBkaXJlY3Rpb25Qb2ludHMubWFwKChkaXJlY3Rpb25Qb2ludCwgaSkgPT5cbiAgICAgIHN5bWJvbEZhY3RvcnkuYnVpbGRTeW1ib2woXG4gICAgICAgIGRpcmVjdGlvblBvaW50LFxuICAgICAgICBsYXRMbmdzLFxuICAgICAgICB0aGlzLl9tYXAsXG4gICAgICAgIGksXG4gICAgICAgIGRpcmVjdGlvblBvaW50cy5sZW5ndGgsXG4gICAgICApLFxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbXB1dGUgcGFpcnMgb2YgTGF0TG5nIGFuZCBoZWFkaW5nIGFuZ2xlLFxuICAgKiB0aGF0IGRlZmluZSBwb3NpdGlvbnMgYW5kIGRpcmVjdGlvbnMgb2YgdGhlIHN5bWJvbHMgb24gdGhlIHBhdGhcbiAgICovXG4gIF9nZXREaXJlY3Rpb25Qb2ludHM6IGZ1bmN0aW9uIChsYXRMbmdzLCBwYXR0ZXJuKSB7XG4gICAgaWYgKGxhdExuZ3MubGVuZ3RoIDwgMikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBwYXRoQXNQb2ludHMgPSBsYXRMbmdzLm1hcCgobGF0TG5nKSA9PiB0aGlzLl9tYXAucHJvamVjdChsYXRMbmcpKTtcbiAgICByZXR1cm4gcHJvamVjdFBhdHRlcm5PblBvaW50UGF0aChwYXRoQXNQb2ludHMsIHBhdHRlcm4pLm1hcCgocG9pbnQpID0+ICh7XG4gICAgICBsYXRMbmc6IHRoaXMuX21hcC51bnByb2plY3QoTC5wb2ludChwb2ludC5wdCkpLFxuICAgICAgaGVhZGluZzogcG9pbnQuaGVhZGluZyxcbiAgICB9KSk7XG4gIH0sXG5cbiAgcmVkcmF3OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9tYXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbGVhckxheWVycygpO1xuICAgIHRoaXMuX2RyYXcoKTtcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgc3ltYm9scyBmb3IgYSBnaXZlbiBwYXR0ZXJuIGFzIGFuIGFycmF5IG9mIEZlYXR1cmVHcm91cFxuICAgKi9cbiAgX2dldFBhdHRlcm5MYXllcnM6IGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgY29uc3QgbWFwQm91bmRzID0gdGhpcy5fbWFwLmdldEJvdW5kcygpLnBhZCgwLjEpO1xuICAgIHJldHVybiB0aGlzLl9wYXRocy5tYXAoKHBhdGgpID0+IHtcbiAgICAgIGNvbnN0IGRpcmVjdGlvblBvaW50cyA9IHRoaXMuX2dldERpcmVjdGlvblBvaW50cyhwYXRoLCBwYXR0ZXJuKVxuICAgICAgICAvLyBmaWx0ZXIgb3V0IGludmlzaWJsZSBwb2ludHNcbiAgICAgICAgLmZpbHRlcigocG9pbnQpID0+IG1hcEJvdW5kcy5jb250YWlucyhwb2ludC5sYXRMbmcpKTtcbiAgICAgIHJldHVybiBMLmZlYXR1cmVHcm91cChcbiAgICAgICAgdGhpcy5fYnVpbGRTeW1ib2xzKHBhdGgsIHBhdHRlcm4uc3ltYm9sRmFjdG9yeSwgZGlyZWN0aW9uUG9pbnRzKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERyYXcgYWxsIHBhdHRlcm5zXG4gICAqL1xuICBfZHJhdzogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX3BhdHRlcm5zXG4gICAgICAubWFwKChwYXR0ZXJuKSA9PiB0aGlzLl9nZXRQYXR0ZXJuTGF5ZXJzKHBhdHRlcm4pKVxuICAgICAgLmZvckVhY2goKGxheWVycykgPT4ge1xuICAgICAgICB0aGlzLmFkZExheWVyKEwuZmVhdHVyZUdyb3VwKGxheWVycykpO1xuICAgICAgfSk7XG4gIH0sXG59KTtcbi8qXG4gKiBBbGxvd3MgY29tcGFjdCBzeW50YXggdG8gYmUgdXNlZFxuICovXG5MLnBvbHlsaW5lRGVjb3JhdG9yID0gZnVuY3Rpb24gKHBhdGhzLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgTC5Qb2x5bGluZURlY29yYXRvcihwYXRocywgb3B0aW9ucyk7XG59O1xuXG4vLyBmdW5jdGlvbmFsIHJlLWltcGwgb2YgTC5Qb2ludC5kaXN0YW5jZVRvLFxuLy8gd2l0aCBubyBkZXBlbmRlbmN5IG9uIExlYWZsZXQgZm9yIGVhc2llciB0ZXN0aW5nXG5mdW5jdGlvbiBwb2ludERpc3RhbmNlKHB0QSwgcHRCKSB7XG4gIGNvbnN0IHggPSBwdEIueCAtIHB0QS54O1xuICBjb25zdCB5ID0gcHRCLnkgLSBwdEEueTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuY29uc3QgY29tcHV0ZVNlZ21lbnRIZWFkaW5nID0gKGEsIGIpID0+XG4gICgoTWF0aC5hdGFuMihiLnkgLSBhLnksIGIueCAtIGEueCkgKiAxODApIC8gTWF0aC5QSSArIDkwICsgMzYwKSAlIDM2MDtcblxuY29uc3QgYXNSYXRpb1RvUGF0aExlbmd0aCA9ICh7IHZhbHVlLCBpc0luUGl4ZWxzIH0sIHRvdGFsUGF0aExlbmd0aCkgPT5cbiAgaXNJblBpeGVscyA/IHZhbHVlIC8gdG90YWxQYXRoTGVuZ3RoIDogdmFsdWU7XG5cbmZ1bmN0aW9uIHBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuaW5kZXhPZignJScpICE9PSAtMSkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogcGFyc2VGbG9hdCh2YWx1ZSkgLyAxMDAsXG4gICAgICBpc0luUGl4ZWxzOiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGNvbnN0IHBhcnNlZFZhbHVlID0gdmFsdWUgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IDA7XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHBhcnNlZFZhbHVlLFxuICAgIGlzSW5QaXhlbHM6IHBhcnNlZFZhbHVlID4gMCxcbiAgfTtcbn1cblxuY29uc3QgcG9pbnRzRXF1YWwgPSAoYSwgYikgPT4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnk7XG5cbmZ1bmN0aW9uIHBvaW50c1RvU2VnbWVudHMocHRzKSB7XG4gIHJldHVybiBwdHMucmVkdWNlKChzZWdtZW50cywgYiwgaWR4LCBwb2ludHMpID0+IHtcbiAgICAvLyB0aGlzIHRlc3Qgc2tpcHMgc2FtZSBhZGphY2VudCBwb2ludHNcbiAgICBpZiAoaWR4ID4gMCAmJiAhcG9pbnRzRXF1YWwoYiwgcG9pbnRzW2lkeCAtIDFdKSkge1xuICAgICAgY29uc3QgYSA9IHBvaW50c1tpZHggLSAxXTtcbiAgICAgIGNvbnN0IGRpc3RBID1cbiAgICAgICAgc2VnbWVudHMubGVuZ3RoID4gMCA/IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmRpc3RCIDogMDtcbiAgICAgIGNvbnN0IGRpc3RBQiA9IHBvaW50RGlzdGFuY2UoYSwgYik7XG4gICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgYSxcbiAgICAgICAgYixcbiAgICAgICAgZGlzdEEsXG4gICAgICAgIGRpc3RCOiBkaXN0QSArIGRpc3RBQixcbiAgICAgICAgaGVhZGluZzogY29tcHV0ZVNlZ21lbnRIZWFkaW5nKGEsIGIpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzZWdtZW50cztcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBwcm9qZWN0UGF0dGVybk9uUG9pbnRQYXRoKHB0cywgcGF0dGVybikge1xuICAvLyAxLiBzcGxpdCB0aGUgcGF0aCBpbnRvIHNlZ21lbnQgaW5mb3NcbiAgY29uc3Qgc2VnbWVudHMgPSBwb2ludHNUb1NlZ21lbnRzKHB0cyk7XG4gIGNvbnN0IG5iU2VnbWVudHMgPSBzZWdtZW50cy5sZW5ndGg7XG4gIGlmIChuYlNlZ21lbnRzID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgdG90YWxQYXRoTGVuZ3RoID0gc2VnbWVudHNbbmJTZWdtZW50cyAtIDFdLmRpc3RCO1xuXG4gIGNvbnN0IG9mZnNldCA9IGFzUmF0aW9Ub1BhdGhMZW5ndGgocGF0dGVybi5vZmZzZXQsIHRvdGFsUGF0aExlbmd0aCk7XG4gIGNvbnN0IGVuZE9mZnNldCA9IGFzUmF0aW9Ub1BhdGhMZW5ndGgocGF0dGVybi5lbmRPZmZzZXQsIHRvdGFsUGF0aExlbmd0aCk7XG4gIGNvbnN0IHJlcGVhdCA9IGFzUmF0aW9Ub1BhdGhMZW5ndGgocGF0dGVybi5yZXBlYXQsIHRvdGFsUGF0aExlbmd0aCk7XG5cbiAgY29uc3QgcmVwZWF0SW50ZXJ2YWxQaXhlbHMgPSB0b3RhbFBhdGhMZW5ndGggKiByZXBlYXQ7XG4gIGNvbnN0IHN0YXJ0T2Zmc2V0UGl4ZWxzID0gb2Zmc2V0ID4gMCA/IHRvdGFsUGF0aExlbmd0aCAqIG9mZnNldCA6IDA7XG4gIGNvbnN0IGVuZE9mZnNldFBpeGVscyA9IGVuZE9mZnNldCA+IDAgPyB0b3RhbFBhdGhMZW5ndGggKiBlbmRPZmZzZXQgOiAwO1xuXG4gIC8vIDIuIGdlbmVyYXRlIHRoZSBwb3NpdGlvbnMgb2YgdGhlIHBhdHRlcm4gYXMgb2Zmc2V0cyBmcm9tIHRoZSBwYXRoIHN0YXJ0XG4gIGNvbnN0IHBvc2l0aW9uT2Zmc2V0cyA9IFtdO1xuICBsZXQgcG9zaXRpb25PZmZzZXQgPSBzdGFydE9mZnNldFBpeGVscztcbiAgZG8ge1xuICAgIHBvc2l0aW9uT2Zmc2V0cy5wdXNoKHBvc2l0aW9uT2Zmc2V0KTtcbiAgICBwb3NpdGlvbk9mZnNldCArPSByZXBlYXRJbnRlcnZhbFBpeGVscztcbiAgfSB3aGlsZSAoXG4gICAgcmVwZWF0SW50ZXJ2YWxQaXhlbHMgPiAwICYmXG4gICAgcG9zaXRpb25PZmZzZXQgPCB0b3RhbFBhdGhMZW5ndGggLSBlbmRPZmZzZXRQaXhlbHNcbiAgKTtcblxuICAvLyAzLiBwcm9qZWN0cyBvZmZzZXRzIHRvIHNlZ21lbnRzXG4gIGxldCBzZWdtZW50SW5kZXggPSAwO1xuICBsZXQgc2VnbWVudCA9IHNlZ21lbnRzWzBdO1xuICByZXR1cm4gcG9zaXRpb25PZmZzZXRzLm1hcCgocG9zaXRpb25PZmZzZXQpID0+IHtcbiAgICAvLyBmaW5kIHRoZSBzZWdtZW50IG1hdGNoaW5nIHRoZSBvZmZzZXQsXG4gICAgLy8gc3RhcnRpbmcgZnJvbSB0aGUgcHJldmlvdXMgb25lIGFzIG9mZnNldHMgYXJlIG9yZGVyZWRcbiAgICB3aGlsZSAocG9zaXRpb25PZmZzZXQgPiBzZWdtZW50LmRpc3RCICYmIHNlZ21lbnRJbmRleCA8IG5iU2VnbWVudHMgLSAxKSB7XG4gICAgICBzZWdtZW50SW5kZXgrKztcbiAgICAgIHNlZ21lbnQgPSBzZWdtZW50c1tzZWdtZW50SW5kZXhdO1xuICAgIH1cblxuICAgIGNvbnN0IHNlZ21lbnRSYXRpbyA9XG4gICAgICAocG9zaXRpb25PZmZzZXQgLSBzZWdtZW50LmRpc3RBKSAvIChzZWdtZW50LmRpc3RCIC0gc2VnbWVudC5kaXN0QSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB0OiBpbnRlcnBvbGF0ZUJldHdlZW5Qb2ludHMoc2VnbWVudC5hLCBzZWdtZW50LmIsIHNlZ21lbnRSYXRpbyksXG4gICAgICBoZWFkaW5nOiBzZWdtZW50LmhlYWRpbmcsXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIHBvaW50IHdoaWNoIGxpZXMgb24gdGhlIHNlZ21lbnQgZGVmaW5lZCBieSBwb2ludHMgQSBhbmQgQixcbiAqIGF0IHRoZSBnaXZlbiByYXRpbyBvZiB0aGUgZGlzdGFuY2UgZnJvbSBBIHRvIEIsIGJ5IGxpbmVhciBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUJldHdlZW5Qb2ludHMocHRBLCBwdEIsIHJhdGlvKSB7XG4gIGlmIChwdEIueCAhPT0gcHRBLngpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcHRBLnggKyByYXRpbyAqIChwdEIueCAtIHB0QS54KSxcbiAgICAgIHk6IHB0QS55ICsgcmF0aW8gKiAocHRCLnkgLSBwdEEueSksXG4gICAgfTtcbiAgfVxuICAvLyBzcGVjaWFsIGNhc2Ugd2hlcmUgcG9pbnRzIGxpZSBvbiB0aGUgc2FtZSB2ZXJ0aWNhbCBheGlzXG4gIHJldHVybiB7XG4gICAgeDogcHRBLngsXG4gICAgeTogcHRBLnkgKyAocHRCLnkgLSBwdEEueSkgKiByYXRpbyxcbiAgfTtcbn1cblxuZXhwb3J0IHtcbiAgcHJvamVjdFBhdHRlcm5PblBvaW50UGF0aCxcbiAgcGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZSxcbiAgLy8gdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBhcmUgZXhwb3J0ZWQgb25seSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2VcbiAgY29tcHV0ZVNlZ21lbnRIZWFkaW5nLFxuICBhc1JhdGlvVG9QYXRoTGVuZ3RoLFxufTtcblxud2luZG93LkwgPSBMO1xud2luZG93LkwucG9seWxpbmVEZWNvcmF0b3IgPSBMLnBvbHlsaW5lRGVjb3JhdG9yO1xud2luZG93LkwuU3ltYm9sID0gTC5TeW1ib2w7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBQSxPQUFBO0FBREE7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUFDLGdCQUFDLENBQUNDLE1BQU0sR0FBR0QsZ0JBQUMsQ0FBQ0MsTUFBTSxJQUFJLENBQUMsQ0FBQzs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQUQsZ0JBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxJQUFJLEdBQUdGLGdCQUFDLENBQUNH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
361
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTCIsIlN5bWJvbCIsIkRhc2giLCJDbGFzcyIsImV4dGVuZCIsIm9wdGlvbnMiLCJwaXhlbFNpemUiLCJwYXRoT3B0aW9ucyIsImluaXRpYWxpemUiLCJVdGlsIiwic2V0T3B0aW9ucyIsImNsaWNrYWJsZSIsImJ1aWxkU3ltYm9sIiwiZGlyUG9pbnQiLCJsYXRMbmdzIiwibWFwIiwiaW5kZXgiLCJ0b3RhbCIsIm9wdHMiLCJkMnIiLCJNYXRoIiwiUEkiLCJwb2x5bGluZSIsImxhdExuZyIsIm1pZFBvaW50IiwicHJvamVjdCIsImFuZ2xlIiwiaGVhZGluZyIsImEiLCJwb2ludCIsIngiLCJjb3MiLCJ5Iiwic2luIiwiYiIsImFkZCIsInN1YnRyYWN0IiwidW5wcm9qZWN0IiwiZGFzaCIsIkFycm93SGVhZCIsInBvbHlnb24iLCJoZWFkQW5nbGUiLCJzdHJva2UiLCJ3ZWlnaHQiLCJfYnVpbGRBcnJvd1BhdGgiLCJ0aXBQb2ludCIsImRpcmVjdGlvbiIsInJhZGlhbkFycm93QW5nbGUiLCJoZWFkQW5nbGUxIiwiaGVhZEFuZ2xlMiIsImFycm93SGVhZDEiLCJhcnJvd0hlYWQyIiwiYXJyb3dIZWFkIiwiTWFya2VyIiwibWFya2VyT3B0aW9ucyIsInJvdGF0ZSIsImRyYWdnYWJsZSIsImRpcmVjdGlvblBvaW50Iiwicm90YXRpb25BbmdsZSIsImFuZ2xlQ29ycmVjdGlvbiIsIm1hcmtlciIsImlzQ29vcmQiLCJjIiwiTGF0TG5nIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaXNDb29yZEFycmF5IiwibGwiLCJQb2x5bGluZURlY29yYXRvciIsIkZlYXR1cmVHcm91cCIsInBhdHRlcm5zIiwicGF0aHMiLCJwcm90b3R5cGUiLCJjYWxsIiwiX21hcCIsIl9wYXRocyIsIl9pbml0UGF0aHMiLCJfYm91bmRzIiwiX2luaXRCb3VuZHMiLCJfcGF0dGVybnMiLCJfaW5pdFBhdHRlcm5zIiwiaW5wdXQiLCJpc1BvbHlnb24iLCJjb29yZHMiLCJjb25jYXQiLCJQb2x5bGluZSIsImdldExhdExuZ3MiLCJQb2x5Z29uIiwicmVkdWNlIiwiZmxhdEFycmF5IiwicCIsInBhdHRlcm5EZWZzIiwiX3BhcnNlUGF0dGVybkRlZiIsInNldFBhdHRlcm5zIiwicmVkcmF3Iiwic2V0UGF0aHMiLCJwYXR0ZXJuRGVmIiwic3ltYm9sRmFjdG9yeSIsInN5bWJvbCIsIm9mZnNldCIsInBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUiLCJlbmRPZmZzZXQiLCJyZXBlYXQiLCJvbkFkZCIsIl9kcmF3Iiwib24iLCJvblJlbW92ZSIsIm9mZiIsImFsbFBhdGhDb29yZHMiLCJhY2MiLCJwYXRoIiwibGF0TG5nQm91bmRzIiwiZ2V0Qm91bmRzIiwiX2J1aWxkU3ltYm9scyIsImRpcmVjdGlvblBvaW50cyIsImkiLCJfZ2V0RGlyZWN0aW9uUG9pbnRzIiwicGF0dGVybiIsInBhdGhBc1BvaW50cyIsInByb2plY3RQYXR0ZXJuT25Qb2ludFBhdGgiLCJwdCIsImNsZWFyTGF5ZXJzIiwiX2dldFBhdHRlcm5MYXllcnMiLCJtYXBCb3VuZHMiLCJwYWQiLCJmaWx0ZXIiLCJjb250YWlucyIsImZlYXR1cmVHcm91cCIsImZvckVhY2giLCJsYXllcnMiLCJhZGRMYXllciIsInBvbHlsaW5lRGVjb3JhdG9yIiwicG9pbnREaXN0YW5jZSIsInB0QSIsInB0QiIsInNxcnQiLCJjb21wdXRlU2VnbWVudEhlYWRpbmciLCJhdGFuMiIsImV4cG9ydHMiLCJhc1JhdGlvVG9QYXRoTGVuZ3RoIiwiX3JlZiIsInRvdGFsUGF0aExlbmd0aCIsInZhbHVlIiwiaXNJblBpeGVscyIsImluZGV4T2YiLCJwYXJzZUZsb2F0IiwicGFyc2VkVmFsdWUiLCJwb2ludHNFcXVhbCIsInBvaW50c1RvU2VnbWVudHMiLCJwdHMiLCJzZWdtZW50cyIsImlkeCIsInBvaW50cyIsImRpc3RBIiwiZGlzdEIiLCJkaXN0QUIiLCJwdXNoIiwibmJTZWdtZW50cyIsInJlcGVhdEludGVydmFsUGl4ZWxzIiwic3RhcnRPZmZzZXRQaXhlbHMiLCJlbmRPZmZzZXRQaXhlbHMiLCJwb3NpdGlvbk9mZnNldHMiLCJwb3NpdGlvbk9mZnNldCIsInNlZ21lbnRJbmRleCIsInNlZ21lbnQiLCJzZWdtZW50UmF0aW8iLCJpbnRlcnBvbGF0ZUJldHdlZW5Qb2ludHMiLCJyYXRpbyIsIndpbmRvdyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcG9seWxpbmVkZWNvcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEwgZnJvbSAnbGVhZmxldCc7XG4vLyBlbmFibGUgcm90YXRpb25BbmdsZSBhbmQgcm90YXRpb25PcmlnaW4gc3VwcG9ydCBvbiBMLk1hcmtlclxuaW1wb3J0ICdsZWFmbGV0LXJvdGF0ZWRtYXJrZXInO1xuXG4vKipcbiAqIERlZmluZXMgc2V2ZXJhbCBjbGFzc2VzIG9mIHN5bWJvbCBmYWN0b3JpZXMsXG4gKiB0byBiZSB1c2VkIHdpdGggTC5Qb2x5bGluZURlY29yYXRvclxuICovXG5cbkwuU3ltYm9sID0gTC5TeW1ib2wgfHwge307XG5cbi8qKlxuICogQSBzaW1wbGUgZGFzaCBzeW1ib2wsIGRyYXduIGFzIGEgUG9seWxpbmUuXG4gKiBDYW4gYWxzbyBiZSB1c2VkIGZvciBkb3RzLCBpZiAncGl4ZWxTaXplJyBvcHRpb24gaXMgZ2l2ZW4gdGhlIDAgdmFsdWUuXG4gKi9cbkwuU3ltYm9sLkRhc2ggPSBMLkNsYXNzLmV4dGVuZCh7XG4gIG9wdGlvbnM6IHtcbiAgICBwaXhlbFNpemU6IDEwLFxuICAgIHBhdGhPcHRpb25zOiB7fSxcbiAgfSxcblxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIEwuVXRpbC5zZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucy5wYXRoT3B0aW9ucy5jbGlja2FibGUgPSBmYWxzZTtcbiAgfSxcblxuICBidWlsZFN5bWJvbDogZnVuY3Rpb24gKGRpclBvaW50LCBsYXRMbmdzLCBtYXAsIGluZGV4LCB0b3RhbCkge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3QgZDJyID0gTWF0aC5QSSAvIDE4MDtcblxuICAgIC8vIGZvciBhIGRvdCwgbm90aGluZyBtb3JlIHRvIGNvbXB1dGVcbiAgICBpZiAob3B0cy5waXhlbFNpemUgPD0gMSkge1xuICAgICAgcmV0dXJuIEwucG9seWxpbmUoW2RpclBvaW50LmxhdExuZywgZGlyUG9pbnQubGF0TG5nXSwgb3B0cy5wYXRoT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWlkUG9pbnQgPSBtYXAucHJvamVjdChkaXJQb2ludC5sYXRMbmcpO1xuICAgIGNvbnN0IGFuZ2xlID0gLShkaXJQb2ludC5oZWFkaW5nIC0gOTApICogZDJyO1xuICAgIGNvbnN0IGEgPSBMLnBvaW50KFxuICAgICAgbWlkUG9pbnQueCArIChvcHRzLnBpeGVsU2l6ZSAqIE1hdGguY29zKGFuZ2xlICsgTWF0aC5QSSkpIC8gMixcbiAgICAgIG1pZFBvaW50LnkgKyAob3B0cy5waXhlbFNpemUgKiBNYXRoLnNpbihhbmdsZSkpIC8gMixcbiAgICApO1xuICAgIC8vIGNvbXB1dGUgc2Vjb25kIHBvaW50IGJ5IGNlbnRyYWwgc3ltbWV0cnkgdG8gYXZvaWQgdW5lY2Vzc2FyeSBjb3Mvc2luXG4gICAgY29uc3QgYiA9IG1pZFBvaW50LmFkZChtaWRQb2ludC5zdWJ0cmFjdChhKSk7XG4gICAgcmV0dXJuIEwucG9seWxpbmUoW21hcC51bnByb2plY3QoYSksIG1hcC51bnByb2plY3QoYildLCBvcHRzLnBhdGhPcHRpb25zKTtcbiAgfSxcbn0pO1xuXG5MLlN5bWJvbC5kYXNoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBMLlN5bWJvbC5EYXNoKG9wdGlvbnMpO1xufTtcblxuTC5TeW1ib2wuQXJyb3dIZWFkID0gTC5DbGFzcy5leHRlbmQoe1xuICBvcHRpb25zOiB7XG4gICAgcG9seWdvbjogdHJ1ZSxcbiAgICBwaXhlbFNpemU6IDEwLFxuICAgIGhlYWRBbmdsZTogNjAsXG4gICAgcGF0aE9wdGlvbnM6IHtcbiAgICAgIHN0cm9rZTogZmFsc2UsXG4gICAgICB3ZWlnaHQ6IDIsXG4gICAgfSxcbiAgfSxcblxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIEwuVXRpbC5zZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucy5wYXRoT3B0aW9ucy5jbGlja2FibGUgPSBmYWxzZTtcbiAgfSxcblxuICBidWlsZFN5bWJvbDogZnVuY3Rpb24gKGRpclBvaW50LCBsYXRMbmdzLCBtYXAsIGluZGV4LCB0b3RhbCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucG9seWdvblxuICAgICAgPyBMLnBvbHlnb24odGhpcy5fYnVpbGRBcnJvd1BhdGgoZGlyUG9pbnQsIG1hcCksIHRoaXMub3B0aW9ucy5wYXRoT3B0aW9ucylcbiAgICAgIDogTC5wb2x5bGluZShcbiAgICAgICAgICB0aGlzLl9idWlsZEFycm93UGF0aChkaXJQb2ludCwgbWFwKSxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucGF0aE9wdGlvbnMsXG4gICAgICAgICk7XG4gIH0sXG5cbiAgX2J1aWxkQXJyb3dQYXRoOiBmdW5jdGlvbiAoZGlyUG9pbnQsIG1hcCkge1xuICAgIGNvbnN0IGQyciA9IE1hdGguUEkgLyAxODA7XG4gICAgY29uc3QgdGlwUG9pbnQgPSBtYXAucHJvamVjdChkaXJQb2ludC5sYXRMbmcpO1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IC0oZGlyUG9pbnQuaGVhZGluZyAtIDkwKSAqIGQycjtcbiAgICBjb25zdCByYWRpYW5BcnJvd0FuZ2xlID0gKHRoaXMub3B0aW9ucy5oZWFkQW5nbGUgLyAyKSAqIGQycjtcblxuICAgIGNvbnN0IGhlYWRBbmdsZTEgPSBkaXJlY3Rpb24gKyByYWRpYW5BcnJvd0FuZ2xlO1xuICAgIGNvbnN0IGhlYWRBbmdsZTIgPSBkaXJlY3Rpb24gLSByYWRpYW5BcnJvd0FuZ2xlO1xuICAgIGNvbnN0IGFycm93SGVhZDEgPSBMLnBvaW50KFxuICAgICAgdGlwUG9pbnQueCAtIHRoaXMub3B0aW9ucy5waXhlbFNpemUgKiBNYXRoLmNvcyhoZWFkQW5nbGUxKSxcbiAgICAgIHRpcFBvaW50LnkgKyB0aGlzLm9wdGlvbnMucGl4ZWxTaXplICogTWF0aC5zaW4oaGVhZEFuZ2xlMSksXG4gICAgKTtcbiAgICBjb25zdCBhcnJvd0hlYWQyID0gTC5wb2ludChcbiAgICAgIHRpcFBvaW50LnggLSB0aGlzLm9wdGlvbnMucGl4ZWxTaXplICogTWF0aC5jb3MoaGVhZEFuZ2xlMiksXG4gICAgICB0aXBQb2ludC55ICsgdGhpcy5vcHRpb25zLnBpeGVsU2l6ZSAqIE1hdGguc2luKGhlYWRBbmdsZTIpLFxuICAgICk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbWFwLnVucHJvamVjdChhcnJvd0hlYWQxKSxcbiAgICAgIGRpclBvaW50LmxhdExuZyxcbiAgICAgIG1hcC51bnByb2plY3QoYXJyb3dIZWFkMiksXG4gICAgXTtcbiAgfSxcbn0pO1xuXG5MLlN5bWJvbC5hcnJvd0hlYWQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEwuU3ltYm9sLkFycm93SGVhZChvcHRpb25zKTtcbn07XG5cbkwuU3ltYm9sLk1hcmtlciA9IEwuQ2xhc3MuZXh0ZW5kKHtcbiAgb3B0aW9uczoge1xuICAgIG1hcmtlck9wdGlvbnM6IHt9LFxuICAgIHJvdGF0ZTogZmFsc2UsXG4gIH0sXG5cbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBMLlV0aWwuc2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcbiAgICB0aGlzLm9wdGlvbnMubWFya2VyT3B0aW9ucy5jbGlja2FibGUgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMubWFya2VyT3B0aW9ucy5kcmFnZ2FibGUgPSBmYWxzZTtcbiAgfSxcblxuICBidWlsZFN5bWJvbDogZnVuY3Rpb24gKGRpcmVjdGlvblBvaW50LCBsYXRMbmdzLCBtYXAsIGluZGV4LCB0b3RhbCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMucm90YXRlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMubWFya2VyT3B0aW9ucy5yb3RhdGlvbkFuZ2xlID1cbiAgICAgICAgZGlyZWN0aW9uUG9pbnQuaGVhZGluZyArICh0aGlzLm9wdGlvbnMuYW5nbGVDb3JyZWN0aW9uIHx8IDApO1xuICAgIH1cbiAgICByZXR1cm4gTC5tYXJrZXIoZGlyZWN0aW9uUG9pbnQubGF0TG5nLCB0aGlzLm9wdGlvbnMubWFya2VyT3B0aW9ucyk7XG4gIH0sXG59KTtcblxuTC5TeW1ib2wubWFya2VyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBMLlN5bWJvbC5NYXJrZXIob3B0aW9ucyk7XG59O1xuXG5jb25zdCBpc0Nvb3JkID0gKGMpID0+XG4gIGMgaW5zdGFuY2VvZiBMLkxhdExuZyB8fFxuICAoQXJyYXkuaXNBcnJheShjKSAmJiBjLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2YgY1swXSA9PT0gJ251bWJlcicpO1xuXG5jb25zdCBpc0Nvb3JkQXJyYXkgPSAobGwpID0+IEFycmF5LmlzQXJyYXkobGwpICYmIGlzQ29vcmQobGxbMF0pO1xuXG5MLlBvbHlsaW5lRGVjb3JhdG9yID0gTC5GZWF0dXJlR3JvdXAuZXh0ZW5kKHtcbiAgb3B0aW9uczoge1xuICAgIHBhdHRlcm5zOiBbXSxcbiAgfSxcblxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAocGF0aHMsIG9wdGlvbnMpIHtcbiAgICBMLkZlYXR1cmVHcm91cC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMpO1xuICAgIEwuVXRpbC5zZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuX21hcCA9IG51bGw7XG4gICAgdGhpcy5fcGF0aHMgPSB0aGlzLl9pbml0UGF0aHMocGF0aHMpO1xuICAgIHRoaXMuX2JvdW5kcyA9IHRoaXMuX2luaXRCb3VuZHMoKTtcbiAgICB0aGlzLl9wYXR0ZXJucyA9IHRoaXMuX2luaXRQYXR0ZXJucyh0aGlzLm9wdGlvbnMucGF0dGVybnMpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZWFscyB3aXRoIGFsbCB0aGUgZGlmZmVyZW50IGNhc2VzLiBpbnB1dCBjYW4gYmUgb25lIG9mIHRoZXNlIHR5cGVzOlxuICAgKiBhcnJheSBvZiBMYXRMbmcsIGFycmF5IG9mIDItbnVtYmVyIGFycmF5cywgUG9seWxpbmUsIFBvbHlnb24sXG4gICAqIGFycmF5IG9mIG9uZSBvZiB0aGUgcHJldmlvdXMuXG4gICAqL1xuICBfaW5pdFBhdGhzOiBmdW5jdGlvbiAoaW5wdXQsIGlzUG9seWdvbikge1xuICAgIGlmIChpc0Nvb3JkQXJyYXkoaW5wdXQpKSB7XG4gICAgICAvLyBMZWFmbGV0IFBvbHlnb25zIGRvbid0IG5lZWQgdGhlIGZpcnN0IHBvaW50IHRvIGJlIHJlcGVhdGVkLCBidXQgd2UgZG9cbiAgICAgIGNvbnN0IGNvb3JkcyA9IGlzUG9seWdvbiA/IGlucHV0LmNvbmNhdChbaW5wdXRbMF1dKSA6IGlucHV0O1xuICAgICAgcmV0dXJuIFtjb29yZHNdO1xuICAgIH1cbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBMLlBvbHlsaW5lKSB7XG4gICAgICAvLyB3ZSBuZWVkIHNvbWUgcmVjdXJzaXZpdHkgdG8gc3VwcG9ydCBtdWx0aS1wb2x5KlxuICAgICAgcmV0dXJuIHRoaXMuX2luaXRQYXRocyhpbnB1dC5nZXRMYXRMbmdzKCksIGlucHV0IGluc3RhbmNlb2YgTC5Qb2x5Z29uKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAvLyBmbGF0dGVuIGV2ZXJ5dGhpbmcsIHdlIGp1c3QgbmVlZCBjb29yZGluYXRlIGxpc3RzIHRvIGFwcGx5IHBhdHRlcm5zXG4gICAgICByZXR1cm4gaW5wdXQucmVkdWNlKFxuICAgICAgICAoZmxhdEFycmF5LCBwKSA9PiBmbGF0QXJyYXkuY29uY2F0KHRoaXMuX2luaXRQYXRocyhwLCBpc1BvbHlnb24pKSxcbiAgICAgICAgW10sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH0sXG5cbiAgLy8gcGFyc2UgcGF0dGVybiBkZWZpbml0aW9ucyBhbmQgcHJlY29tcHV0ZSBzb21lIHZhbHVlc1xuICBfaW5pdFBhdHRlcm5zOiBmdW5jdGlvbiAocGF0dGVybkRlZnMpIHtcbiAgICByZXR1cm4gcGF0dGVybkRlZnMubWFwKHRoaXMuX3BhcnNlUGF0dGVybkRlZik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIHBhdHRlcm5zIHVzZWQgYnkgdGhpcyBkZWNvcmF0b3JcbiAgICogYW5kIHJlZHJhd3MgdGhlIG5ldyBvbmUuXG4gICAqL1xuICBzZXRQYXR0ZXJuczogZnVuY3Rpb24gKHBhdHRlcm5zKSB7XG4gICAgdGhpcy5vcHRpb25zLnBhdHRlcm5zID0gcGF0dGVybnM7XG4gICAgdGhpcy5fcGF0dGVybnMgPSB0aGlzLl9pbml0UGF0dGVybnModGhpcy5vcHRpb25zLnBhdHRlcm5zKTtcbiAgICB0aGlzLnJlZHJhdygpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSBwYXR0ZXJucyB1c2VkIGJ5IHRoaXMgZGVjb3JhdG9yXG4gICAqIGFuZCByZWRyYXdzIHRoZSBuZXcgb25lLlxuICAgKi9cbiAgc2V0UGF0aHM6IGZ1bmN0aW9uIChwYXRocykge1xuICAgIHRoaXMuX3BhdGhzID0gdGhpcy5faW5pdFBhdGhzKHBhdGhzKTtcbiAgICB0aGlzLl9ib3VuZHMgPSB0aGlzLl9pbml0Qm91bmRzKCk7XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfSxcblxuICAvKipcbiAgICogUGFyc2UgdGhlIHBhdHRlcm4gZGVmaW5pdGlvblxuICAgKi9cbiAgX3BhcnNlUGF0dGVybkRlZjogZnVuY3Rpb24gKHBhdHRlcm5EZWYsIGxhdExuZ3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3ltYm9sRmFjdG9yeTogcGF0dGVybkRlZi5zeW1ib2wsXG4gICAgICAvLyBQYXJzZSBvZmZzZXQgYW5kIHJlcGVhdCB2YWx1ZXMsIG1hbmFnaW5nIHRoZSB0d28gY2FzZXM6XG4gICAgICAvLyBhYnNvbHV0ZSAoaW4gcGl4ZWxzKSBvciByZWxhdGl2ZSAoaW4gcGVyY2VudGFnZSBvZiB0aGUgcG9seWxpbmUgbGVuZ3RoKVxuICAgICAgb2Zmc2V0OiBwYXJzZVJlbGF0aXZlT3JBYnNvbHV0ZVZhbHVlKHBhdHRlcm5EZWYub2Zmc2V0KSxcbiAgICAgIGVuZE9mZnNldDogcGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZShwYXR0ZXJuRGVmLmVuZE9mZnNldCksXG4gICAgICByZXBlYXQ6IHBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUocGF0dGVybkRlZi5yZXBlYXQpLFxuICAgIH07XG4gIH0sXG5cbiAgb25BZGQ6IGZ1bmN0aW9uIChtYXApIHtcbiAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgdGhpcy5fZHJhdygpO1xuICAgIHRoaXMuX21hcC5vbignbW92ZWVuZCcsIHRoaXMucmVkcmF3LCB0aGlzKTtcbiAgfSxcblxuICBvblJlbW92ZTogZnVuY3Rpb24gKG1hcCkge1xuICAgIHRoaXMuX21hcC5vZmYoJ21vdmVlbmQnLCB0aGlzLnJlZHJhdywgdGhpcyk7XG4gICAgdGhpcy5fbWFwID0gbnVsbDtcbiAgICBMLkZlYXR1cmVHcm91cC5wcm90b3R5cGUub25SZW1vdmUuY2FsbCh0aGlzLCBtYXApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBcyByZWFsIHBhdHRlcm4gYm91bmRzIGRlcGVuZHMgb24gbWFwIHpvb20gYW5kIGJvdW5kcyxcbiAgICogd2UganVzdCBjb21wdXRlIHRoZSB0b3RhbCBib3VuZHMgb2YgYWxsIHBhdGhzIGRlY29yYXRlZCBieSB0aGlzIGluc3RhbmNlLlxuICAgKi9cbiAgX2luaXRCb3VuZHM6IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhbGxQYXRoQ29vcmRzID0gdGhpcy5fcGF0aHMucmVkdWNlKFxuICAgICAgKGFjYywgcGF0aCkgPT4gYWNjLmNvbmNhdChwYXRoKSxcbiAgICAgIFtdLFxuICAgICk7XG4gICAgcmV0dXJuIEwubGF0TG5nQm91bmRzKGFsbFBhdGhDb29yZHMpO1xuICB9LFxuXG4gIGdldEJvdW5kczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9ib3VuZHM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgSUxheWVycyBvYmplY3RcbiAgICovXG4gIF9idWlsZFN5bWJvbHM6IGZ1bmN0aW9uIChsYXRMbmdzLCBzeW1ib2xGYWN0b3J5LCBkaXJlY3Rpb25Qb2ludHMpIHtcbiAgICByZXR1cm4gZGlyZWN0aW9uUG9pbnRzLm1hcCgoZGlyZWN0aW9uUG9pbnQsIGkpID0+XG4gICAgICBzeW1ib2xGYWN0b3J5LmJ1aWxkU3ltYm9sKFxuICAgICAgICBkaXJlY3Rpb25Qb2ludCxcbiAgICAgICAgbGF0TG5ncyxcbiAgICAgICAgdGhpcy5fbWFwLFxuICAgICAgICBpLFxuICAgICAgICBkaXJlY3Rpb25Qb2ludHMubGVuZ3RoLFxuICAgICAgKSxcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHBhaXJzIG9mIExhdExuZyBhbmQgaGVhZGluZyBhbmdsZSxcbiAgICogdGhhdCBkZWZpbmUgcG9zaXRpb25zIGFuZCBkaXJlY3Rpb25zIG9mIHRoZSBzeW1ib2xzIG9uIHRoZSBwYXRoXG4gICAqL1xuICBfZ2V0RGlyZWN0aW9uUG9pbnRzOiBmdW5jdGlvbiAobGF0TG5ncywgcGF0dGVybikge1xuICAgIGlmIChsYXRMbmdzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgcGF0aEFzUG9pbnRzID0gbGF0TG5ncy5tYXAoKGxhdExuZykgPT4gdGhpcy5fbWFwLnByb2plY3QobGF0TG5nKSk7XG4gICAgcmV0dXJuIHByb2plY3RQYXR0ZXJuT25Qb2ludFBhdGgocGF0aEFzUG9pbnRzLCBwYXR0ZXJuKS5tYXAoKHBvaW50KSA9PiAoe1xuICAgICAgbGF0TG5nOiB0aGlzLl9tYXAudW5wcm9qZWN0KEwucG9pbnQocG9pbnQucHQpKSxcbiAgICAgIGhlYWRpbmc6IHBvaW50LmhlYWRpbmcsXG4gICAgfSkpO1xuICB9LFxuXG4gIHJlZHJhdzogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fbWFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2xlYXJMYXllcnMoKTtcbiAgICB0aGlzLl9kcmF3KCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHN5bWJvbHMgZm9yIGEgZ2l2ZW4gcGF0dGVybiBhcyBhbiBhcnJheSBvZiBGZWF0dXJlR3JvdXBcbiAgICovXG4gIF9nZXRQYXR0ZXJuTGF5ZXJzOiBmdW5jdGlvbiAocGF0dGVybikge1xuICAgIGNvbnN0IG1hcEJvdW5kcyA9IHRoaXMuX21hcC5nZXRCb3VuZHMoKS5wYWQoMC4xKTtcbiAgICByZXR1cm4gdGhpcy5fcGF0aHMubWFwKChwYXRoKSA9PiB7XG4gICAgICBjb25zdCBkaXJlY3Rpb25Qb2ludHMgPSB0aGlzLl9nZXREaXJlY3Rpb25Qb2ludHMocGF0aCwgcGF0dGVybilcbiAgICAgICAgLy8gZmlsdGVyIG91dCBpbnZpc2libGUgcG9pbnRzXG4gICAgICAgIC5maWx0ZXIoKHBvaW50KSA9PiBtYXBCb3VuZHMuY29udGFpbnMocG9pbnQubGF0TG5nKSk7XG4gICAgICByZXR1cm4gTC5mZWF0dXJlR3JvdXAoXG4gICAgICAgIHRoaXMuX2J1aWxkU3ltYm9scyhwYXRoLCBwYXR0ZXJuLnN5bWJvbEZhY3RvcnksIGRpcmVjdGlvblBvaW50cyksXG4gICAgICApO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEcmF3IGFsbCBwYXR0ZXJuc1xuICAgKi9cbiAgX2RyYXc6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9wYXR0ZXJuc1xuICAgICAgLm1hcCgocGF0dGVybikgPT4gdGhpcy5fZ2V0UGF0dGVybkxheWVycyhwYXR0ZXJuKSlcbiAgICAgIC5mb3JFYWNoKChsYXllcnMpID0+IHtcbiAgICAgICAgdGhpcy5hZGRMYXllcihMLmZlYXR1cmVHcm91cChsYXllcnMpKTtcbiAgICAgIH0pO1xuICB9LFxufSk7XG4vKlxuICogQWxsb3dzIGNvbXBhY3Qgc3ludGF4IHRvIGJlIHVzZWRcbiAqL1xuTC5wb2x5bGluZURlY29yYXRvciA9IGZ1bmN0aW9uIChwYXRocywgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IEwuUG9seWxpbmVEZWNvcmF0b3IocGF0aHMsIG9wdGlvbnMpO1xufTtcblxuLy8gZnVuY3Rpb25hbCByZS1pbXBsIG9mIEwuUG9pbnQuZGlzdGFuY2VUbyxcbi8vIHdpdGggbm8gZGVwZW5kZW5jeSBvbiBMZWFmbGV0IGZvciBlYXNpZXIgdGVzdGluZ1xuZnVuY3Rpb24gcG9pbnREaXN0YW5jZShwdEEsIHB0Qikge1xuICBjb25zdCB4ID0gcHRCLnggLSBwdEEueDtcbiAgY29uc3QgeSA9IHB0Qi55IC0gcHRBLnk7XG4gIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG59XG5cbmNvbnN0IGNvbXB1dGVTZWdtZW50SGVhZGluZyA9IChhLCBiKSA9PlxuICAoKE1hdGguYXRhbjIoYi55IC0gYS55LCBiLnggLSBhLngpICogMTgwKSAvIE1hdGguUEkgKyA5MCArIDM2MCkgJSAzNjA7XG5cbmNvbnN0IGFzUmF0aW9Ub1BhdGhMZW5ndGggPSAoeyB2YWx1ZSwgaXNJblBpeGVscyB9LCB0b3RhbFBhdGhMZW5ndGgpID0+XG4gIGlzSW5QaXhlbHMgPyB2YWx1ZSAvIHRvdGFsUGF0aExlbmd0aCA6IHZhbHVlO1xuXG5mdW5jdGlvbiBwYXJzZVJlbGF0aXZlT3JBYnNvbHV0ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmluZGV4T2YoJyUnKSAhPT0gLTEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHBhcnNlRmxvYXQodmFsdWUpIC8gMTAwLFxuICAgICAgaXNJblBpeGVsczogZmFsc2UsXG4gICAgfTtcbiAgfVxuICBjb25zdCBwYXJzZWRWYWx1ZSA9IHZhbHVlID8gcGFyc2VGbG9hdCh2YWx1ZSkgOiAwO1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBwYXJzZWRWYWx1ZSxcbiAgICBpc0luUGl4ZWxzOiBwYXJzZWRWYWx1ZSA+IDAsXG4gIH07XG59XG5cbmNvbnN0IHBvaW50c0VxdWFsID0gKGEsIGIpID0+IGEueCA9PT0gYi54ICYmIGEueSA9PT0gYi55O1xuXG5mdW5jdGlvbiBwb2ludHNUb1NlZ21lbnRzKHB0cykge1xuICByZXR1cm4gcHRzLnJlZHVjZSgoc2VnbWVudHMsIGIsIGlkeCwgcG9pbnRzKSA9PiB7XG4gICAgLy8gdGhpcyB0ZXN0IHNraXBzIHNhbWUgYWRqYWNlbnQgcG9pbnRzXG4gICAgaWYgKGlkeCA+IDAgJiYgIXBvaW50c0VxdWFsKGIsIHBvaW50c1tpZHggLSAxXSkpIHtcbiAgICAgIGNvbnN0IGEgPSBwb2ludHNbaWR4IC0gMV07XG4gICAgICBjb25zdCBkaXN0QSA9XG4gICAgICAgIHNlZ21lbnRzLmxlbmd0aCA+IDAgPyBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5kaXN0QiA6IDA7XG4gICAgICBjb25zdCBkaXN0QUIgPSBwb2ludERpc3RhbmNlKGEsIGIpO1xuICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgIGEsXG4gICAgICAgIGIsXG4gICAgICAgIGRpc3RBLFxuICAgICAgICBkaXN0QjogZGlzdEEgKyBkaXN0QUIsXG4gICAgICAgIGhlYWRpbmc6IGNvbXB1dGVTZWdtZW50SGVhZGluZyhhLCBiKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc2VnbWVudHM7XG4gIH0sIFtdKTtcbn1cblxuZnVuY3Rpb24gcHJvamVjdFBhdHRlcm5PblBvaW50UGF0aChwdHMsIHBhdHRlcm4pIHtcbiAgLy8gMS4gc3BsaXQgdGhlIHBhdGggaW50byBzZWdtZW50IGluZm9zXG4gIGNvbnN0IHNlZ21lbnRzID0gcG9pbnRzVG9TZWdtZW50cyhwdHMpO1xuICBjb25zdCBuYlNlZ21lbnRzID0gc2VnbWVudHMubGVuZ3RoO1xuICBpZiAobmJTZWdtZW50cyA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHRvdGFsUGF0aExlbmd0aCA9IHNlZ21lbnRzW25iU2VnbWVudHMgLSAxXS5kaXN0QjtcblxuICBjb25zdCBvZmZzZXQgPSBhc1JhdGlvVG9QYXRoTGVuZ3RoKHBhdHRlcm4ub2Zmc2V0LCB0b3RhbFBhdGhMZW5ndGgpO1xuICBjb25zdCBlbmRPZmZzZXQgPSBhc1JhdGlvVG9QYXRoTGVuZ3RoKHBhdHRlcm4uZW5kT2Zmc2V0LCB0b3RhbFBhdGhMZW5ndGgpO1xuICBjb25zdCByZXBlYXQgPSBhc1JhdGlvVG9QYXRoTGVuZ3RoKHBhdHRlcm4ucmVwZWF0LCB0b3RhbFBhdGhMZW5ndGgpO1xuXG4gIGNvbnN0IHJlcGVhdEludGVydmFsUGl4ZWxzID0gdG90YWxQYXRoTGVuZ3RoICogcmVwZWF0O1xuICBjb25zdCBzdGFydE9mZnNldFBpeGVscyA9IG9mZnNldCA+IDAgPyB0b3RhbFBhdGhMZW5ndGggKiBvZmZzZXQgOiAwO1xuICBjb25zdCBlbmRPZmZzZXRQaXhlbHMgPSBlbmRPZmZzZXQgPiAwID8gdG90YWxQYXRoTGVuZ3RoICogZW5kT2Zmc2V0IDogMDtcblxuICAvLyAyLiBnZW5lcmF0ZSB0aGUgcG9zaXRpb25zIG9mIHRoZSBwYXR0ZXJuIGFzIG9mZnNldHMgZnJvbSB0aGUgcGF0aCBzdGFydFxuICBjb25zdCBwb3NpdGlvbk9mZnNldHMgPSBbXTtcbiAgbGV0IHBvc2l0aW9uT2Zmc2V0ID0gc3RhcnRPZmZzZXRQaXhlbHM7XG4gIGRvIHtcbiAgICBwb3NpdGlvbk9mZnNldHMucHVzaChwb3NpdGlvbk9mZnNldCk7XG4gICAgcG9zaXRpb25PZmZzZXQgKz0gcmVwZWF0SW50ZXJ2YWxQaXhlbHM7XG4gIH0gd2hpbGUgKFxuICAgIHJlcGVhdEludGVydmFsUGl4ZWxzID4gMCAmJlxuICAgIHBvc2l0aW9uT2Zmc2V0IDwgdG90YWxQYXRoTGVuZ3RoIC0gZW5kT2Zmc2V0UGl4ZWxzXG4gICk7XG5cbiAgLy8gMy4gcHJvamVjdHMgb2Zmc2V0cyB0byBzZWdtZW50c1xuICBsZXQgc2VnbWVudEluZGV4ID0gMDtcbiAgbGV0IHNlZ21lbnQgPSBzZWdtZW50c1swXTtcbiAgcmV0dXJuIHBvc2l0aW9uT2Zmc2V0cy5tYXAoKHBvc2l0aW9uT2Zmc2V0KSA9PiB7XG4gICAgLy8gZmluZCB0aGUgc2VnbWVudCBtYXRjaGluZyB0aGUgb2Zmc2V0LFxuICAgIC8vIHN0YXJ0aW5nIGZyb20gdGhlIHByZXZpb3VzIG9uZSBhcyBvZmZzZXRzIGFyZSBvcmRlcmVkXG4gICAgd2hpbGUgKHBvc2l0aW9uT2Zmc2V0ID4gc2VnbWVudC5kaXN0QiAmJiBzZWdtZW50SW5kZXggPCBuYlNlZ21lbnRzIC0gMSkge1xuICAgICAgc2VnbWVudEluZGV4Kys7XG4gICAgICBzZWdtZW50ID0gc2VnbWVudHNbc2VnbWVudEluZGV4XTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWdtZW50UmF0aW8gPVxuICAgICAgKHBvc2l0aW9uT2Zmc2V0IC0gc2VnbWVudC5kaXN0QSkgLyAoc2VnbWVudC5kaXN0QiAtIHNlZ21lbnQuZGlzdEEpO1xuICAgIHJldHVybiB7XG4gICAgICBwdDogaW50ZXJwb2xhdGVCZXR3ZWVuUG9pbnRzKHNlZ21lbnQuYSwgc2VnbWVudC5iLCBzZWdtZW50UmF0aW8pLFxuICAgICAgaGVhZGluZzogc2VnbWVudC5oZWFkaW5nLFxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBwb2ludCB3aGljaCBsaWVzIG9uIHRoZSBzZWdtZW50IGRlZmluZWQgYnkgcG9pbnRzIEEgYW5kIEIsXG4gKiBhdCB0aGUgZ2l2ZW4gcmF0aW8gb2YgdGhlIGRpc3RhbmNlIGZyb20gQSB0byBCLCBieSBsaW5lYXIgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gaW50ZXJwb2xhdGVCZXR3ZWVuUG9pbnRzKHB0QSwgcHRCLCByYXRpbykge1xuICBpZiAocHRCLnggIT09IHB0QS54KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHB0QS54ICsgcmF0aW8gKiAocHRCLnggLSBwdEEueCksXG4gICAgICB5OiBwdEEueSArIHJhdGlvICogKHB0Qi55IC0gcHRBLnkpLFxuICAgIH07XG4gIH1cbiAgLy8gc3BlY2lhbCBjYXNlIHdoZXJlIHBvaW50cyBsaWUgb24gdGhlIHNhbWUgdmVydGljYWwgYXhpc1xuICByZXR1cm4ge1xuICAgIHg6IHB0QS54LFxuICAgIHk6IHB0QS55ICsgKHB0Qi55IC0gcHRBLnkpICogcmF0aW8sXG4gIH07XG59XG5cbmV4cG9ydCB7XG4gIHByb2plY3RQYXR0ZXJuT25Qb2ludFBhdGgsXG4gIHBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUsXG4gIC8vIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gYXJlIGV4cG9ydGVkIG9ubHkgZm9yIHVuaXQgdGVzdGluZyBwdXJwb3NlXG4gIGNvbXB1dGVTZWdtZW50SGVhZGluZyxcbiAgYXNSYXRpb1RvUGF0aExlbmd0aCxcbn07XG5cbndpbmRvdy5MID0gTDtcbndpbmRvdy5MLnBvbHlsaW5lRGVjb3JhdG9yID0gTC5wb2x5bGluZURlY29yYXRvcjtcbndpbmRvdy5MLlN5bWJvbCA9IEwuU3ltYm9sO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQUEsT0FBQTtBQURBOztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBQyxnQkFBQyxDQUFDQyxNQUFNLEdBQUdELGdCQUFDLENBQUNDLE1BQU0sSUFBSSxDQUFDLENBQUM7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0FELGdCQUFDLENBQUNDLE1BQU0sQ0FBQ0MsSUFBSSxHQUFHRixnQkFBQyxDQUFDRyxLQUFLLENBQUNDLE1BQU0sQ0FBQztFQUM3QkMsT0FBTyxFQUFFO0lBQ1BD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