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

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 (719) hide show
  1. package/lib/Router.js +76 -37
  2. package/lib/Widgets/EventsCarousel/EventsCarousel.js +35 -24
  3. package/lib/Widgets/EventsRow/EventsRow.js +39 -26
  4. package/lib/Widgets/Map/GraphUtils.js +6 -4
  5. package/lib/Widgets/Map/Map.js +138 -99
  6. package/lib/Widgets/Map/MapUtils.js +101 -83
  7. package/lib/Widgets/Map/areas/AreaPolygon.js +84 -57
  8. package/lib/Widgets/Map/areas/AreaPolygons.js +25 -23
  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 +74 -50
  12. package/lib/Widgets/Map/edges/Edges.js +24 -19
  13. package/lib/Widgets/Map/edges/arrows/Arrows.js +45 -24
  14. package/lib/Widgets/Map/events/Event.js +14 -15
  15. package/lib/Widgets/Map/events/EventIndicator.js +63 -66
  16. package/lib/Widgets/Map/events/EventPath.js +34 -33
  17. package/lib/Widgets/Map/events/EventUtils.js +78 -54
  18. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +19 -17
  19. package/lib/Widgets/Map/events/PointOfEvent.js +36 -27
  20. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +39 -29
  21. package/lib/Widgets/Map/events/Snail.js +11 -10
  22. package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +79 -77
  23. package/lib/Widgets/Map/map/FloatingGraph.js +21 -24
  24. package/lib/Widgets/Map/map/GraphDateButton.js +20 -27
  25. package/lib/Widgets/Map/matchGraph/MatchGraph.js +14 -14
  26. package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +16 -17
  27. package/lib/Widgets/Map/points/PointIcon.js +22 -23
  28. package/lib/Widgets/Map/points/PointMarker.js +88 -68
  29. package/lib/Widgets/Map/points/PointMarkers.js +36 -30
  30. package/lib/Widgets/Map/points/PointUtils.js +90 -76
  31. package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +43 -25
  32. package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +11 -11
  33. package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +14 -11
  34. package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +6 -4
  35. package/lib/Widgets/MostPolluting/Areas/Areas.js +60 -28
  36. package/lib/Widgets/MostPolluting/Areas/areas.mock.js +4 -3
  37. package/lib/Widgets/MostPolluting/Areas/areasResponse.interface.js +1 -1
  38. package/lib/Widgets/MostPolluting/Areas/styles.js +6 -4
  39. package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +9 -12
  40. package/lib/Widgets/MostPolluting/Factories/Factories.js +65 -33
  41. package/lib/Widgets/MostPolluting/Factories/FactoryBox/CardLayout.js +20 -15
  42. package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +20 -15
  43. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +10 -9
  44. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +11 -13
  45. package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +6 -4
  46. package/lib/Widgets/MostPolluting/Factories/factories.mock.js +3 -2
  47. package/lib/Widgets/MostPolluting/Factories/factoriesResponse.interface.js +1 -1
  48. package/lib/Widgets/MostPolluting/Factories/styles.js +6 -4
  49. package/lib/Widgets/MostPolluting/MostPolluting.js +34 -23
  50. package/lib/Widgets/MostPolluting/MostPolluting.stories.js +32 -20
  51. package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +5 -7
  52. package/lib/Widgets/MostPolluting/ShowMore/styles.js +6 -7
  53. package/lib/Widgets/MostPolluting/assets/index.js +12 -12
  54. package/lib/Widgets/MostPolluting/components/ChangePercent.js +14 -20
  55. package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +31 -36
  56. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +54 -49
  57. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +40 -44
  58. package/lib/Widgets/MostPolluting/components/PotentialImpact.js +27 -28
  59. package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +49 -53
  60. package/lib/Widgets/MostPolluting/models.js +1 -1
  61. package/lib/Widgets/MostPolluting/styles.js +6 -4
  62. package/lib/Widgets/PotentialImpactSummary/Back/Back.js +6 -8
  63. package/lib/Widgets/PotentialImpactSummary/Icon.js +39 -30
  64. package/lib/Widgets/PotentialImpactSummary/index.js +28 -20
  65. package/lib/Widgets/PotentialImpactSummary/index.test.js +54 -48
  66. package/lib/Widgets/PotentialImpactSummary/styles.js +13 -8
  67. package/lib/Widgets/PotentialImpactSummary/useCasesResponse.interface.js +1 -1
  68. package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +8 -10
  69. package/lib/Widgets/QualitySummary/PieChart/PieChart.js +18 -23
  70. package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +31 -34
  71. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +26 -28
  72. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +38 -35
  73. package/lib/Widgets/QualitySummary/QualitySummary.js +14 -10
  74. package/lib/Widgets/QualitySummary/qualitySummary.mock.js +7 -4
  75. package/lib/Widgets/QualitySummary/qualitySummaryResponse.interface.js +1 -1
  76. package/lib/Widgets/QualitySummary/styles.js +21 -24
  77. package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +14 -12
  78. package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +25 -25
  79. package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +21 -26
  80. package/lib/Widgets/UtilityInformation/UtilityInformation.js +36 -23
  81. package/lib/Widgets/UtilityInformation/UtilityInformationResponse.interface.js +1 -1
  82. package/lib/Widgets/UtilityInformation/styles.js +31 -30
  83. package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +5 -3
  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 +11 -10
  90. package/lib/components/ApplyButton/index.js +4 -3
  91. package/lib/components/Backdrop/Backdrop.js +5 -7
  92. package/lib/components/ContentLoader/ContentLoader.js +10 -12
  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 +9 -5
  96. package/lib/components/CustomInputs/DoubleTabs/styles.js +16 -21
  97. package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +20 -12
  98. package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +6 -7
  99. package/lib/components/CustomInputs/Search/Search.js +60 -37
  100. package/lib/components/CustomInputs/Search/index.js +4 -3
  101. package/lib/components/CustomInputs/Select/Select.js +55 -38
  102. package/lib/components/CustomInputs/Select/Select.stories.js +10 -6
  103. package/lib/components/DamageType/DamageType.js +60 -35
  104. package/lib/components/DamageType/index.js +4 -3
  105. package/lib/components/DataLoaderError/DataLoaderError.js +7 -9
  106. package/lib/components/DischargeHeatmap/DischargeHeatmap.js +13 -11
  107. package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +73 -72
  108. package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +37 -25
  109. package/lib/components/DischargeHeatmap/HighchartsOptions.js +16 -12
  110. package/lib/components/DischargeHeatmap/index.js +4 -3
  111. package/lib/components/DischargeHeatmap/mocks/handlers.js +4 -3
  112. package/lib/components/DischargeHeatmap/popupText.js +12 -11
  113. package/lib/components/DischargeHeatmap/titles.js +6 -4
  114. package/lib/components/DischargeHeatmap/types.js +1 -1
  115. package/lib/components/ErrorBoundary.js +42 -27
  116. package/lib/components/Events/Events.js +48 -29
  117. package/lib/components/Events/index.js +4 -3
  118. package/lib/components/Graph/Graph.js +95 -74
  119. package/lib/components/Graph/index.js +4 -3
  120. package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +24 -19
  121. package/lib/components/Header/Breadcrumbs/index.js +4 -3
  122. package/lib/components/Header/DoubleTabs/DoubleTabs.js +28 -18
  123. package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +9 -5
  124. package/lib/components/Header/DoubleTabs/styles.js +8 -5
  125. package/lib/components/Header/Header.js +3 -3
  126. package/lib/components/Header/Header.stories.js +9 -5
  127. package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +36 -24
  128. package/lib/components/Header/InfoBar/InfoBar.js +102 -69
  129. package/lib/components/Header/InfoBar/Search/Control.js +10 -11
  130. package/lib/components/Header/InfoBar/Search/GroupLabel.js +7 -8
  131. package/lib/components/Header/InfoBar/Search/Search.js +24 -17
  132. package/lib/components/Header/InfoBar/Search/SearchContainer.js +35 -21
  133. package/lib/components/Header/InfoBar/Search/index.js +4 -3
  134. package/lib/components/Header/InfoBar/Search/searchStyle.js +49 -36
  135. package/lib/components/Header/InfoBar/TimeFilter.js +17 -13
  136. package/lib/components/Header/InfoBar/types.js +1 -1
  137. package/lib/components/Header/KandoNavbar/KandoNavbar.js +93 -66
  138. package/lib/components/Header/KandoNavbar/index.js +4 -3
  139. package/lib/components/Header/Slideshow/Slideshow.js +91 -67
  140. package/lib/components/Header/Slideshow/index.js +4 -3
  141. package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +5 -7
  142. package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +24 -22
  143. package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +17 -17
  144. package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +42 -36
  145. package/lib/components/Header/Toolbar/Toolbar.js +76 -56
  146. package/lib/components/InfoBar/InfoBar.js +24 -10
  147. package/lib/components/InfoBar/InfoBar.stories.js +9 -5
  148. package/lib/components/KandoModal/KandoModal.js +40 -24
  149. package/lib/components/KandoModal/index.js +4 -3
  150. package/lib/components/Link.js +8 -9
  151. package/lib/components/Links/CustomRedirect/CustomRedirect.js +7 -10
  152. package/lib/components/Links/StyledLink/StyledLink.js +20 -17
  153. package/lib/components/Links/StyledNavLink/StyledNavLink.js +10 -12
  154. package/lib/components/LiveEvents/CarouselSlide.js +10 -11
  155. package/lib/components/LiveEvents/LiveEvents.js +6 -7
  156. package/lib/components/LiveEvents/index.js +4 -3
  157. package/lib/components/LoaderByPercent/LoaderByPercent.js +30 -37
  158. package/lib/components/Map/Map.js +25 -20
  159. package/lib/components/Map/index.js +4 -3
  160. package/lib/components/Modal/Modal.js +10 -10
  161. package/lib/components/NarrowHeader.js +32 -18
  162. package/lib/components/PointInfo/PointInfo.js +19 -20
  163. package/lib/components/PointInfo/index.js +4 -3
  164. package/lib/components/PopupModal/PopupModal.js +17 -13
  165. package/lib/components/PopupModal/PopupModal.stories.js +24 -17
  166. package/lib/components/Sector/Sector.js +40 -34
  167. package/lib/components/Sector/Sector.test.js +24 -24
  168. package/lib/components/Sector/SectorIconsNew.js +19 -26
  169. package/lib/components/Sector/index.js +4 -3
  170. package/lib/components/Sector/sectorIcons.js +5 -4
  171. package/lib/components/SevereEvent/Eta/Eta.js +54 -49
  172. package/lib/components/SevereEvent/Eta/styles.js +8 -11
  173. package/lib/components/SevereEvent/SevereEvent.js +35 -27
  174. package/lib/components/Spinner/Spinner.js +8 -8
  175. package/lib/components/Spinner/Spinner.stories.js +11 -6
  176. package/lib/components/Spinner/index.js +4 -3
  177. package/lib/components/Spinner/styles.js +16 -21
  178. package/lib/components/Tabs/Tabs.js +31 -18
  179. package/lib/components/Tabs/Tabs.stories.js +10 -6
  180. package/lib/components/Tabs/assets/index.js +6 -6
  181. package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +18 -13
  182. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +45 -32
  183. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +34 -20
  184. package/lib/components/TimeRangeSelector/KandoRangePicker/index.js +4 -3
  185. package/lib/components/TimeRangeSelector/TimeRangeHelper.js +22 -17
  186. package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +14 -13
  187. package/lib/components/TimeRangeSelector/TimeRangeItem/index.js +4 -3
  188. package/lib/components/TimeRangeSelector/TimeRangeList.js +27 -24
  189. package/lib/components/TimeRangeSelector/TimeRangeOptions.js +27 -17
  190. package/lib/components/TimeRangeSelector/TimeRangeSelector.js +31 -26
  191. package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +10 -6
  192. package/lib/components/TimeRangeSelector/constants.js +5 -3
  193. package/lib/components/TimeRangeSelector/index.js +4 -3
  194. package/lib/components/Toggle/Toggle.js +18 -11
  195. package/lib/components/Toggle/index.js +4 -3
  196. package/lib/components/TrendGraph/TrendGraph.js +42 -24
  197. package/lib/components/TrendGraph/index.js +4 -3
  198. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +33 -26
  199. package/lib/components/TrendGraphNVL/index.js +4 -3
  200. package/lib/development-environment/index.js +13 -9
  201. package/lib/development-environment/mock/browser.js +5 -2
  202. package/lib/development-environment/mock/get.js +10 -8
  203. package/lib/development-environment/mock/handlers.js +3 -2
  204. package/lib/development-environment/mock/mockBus.js +5 -4
  205. package/lib/development-environment/mock/mockObjects/area-trends-graph.js +3 -2
  206. package/lib/development-environment/mock/mockObjects/areaInformation.js +3 -2
  207. package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +3 -2
  208. package/lib/development-environment/mock/mockObjects/areaSitesData.js +3 -2
  209. package/lib/development-environment/mock/mockObjects/areasJson.js +3 -2
  210. package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +3 -2
  211. package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +3 -2
  212. package/lib/development-environment/mock/mockObjects/data-menuData.js +3 -2
  213. package/lib/development-environment/mock/mockObjects/data-search.js +3 -2
  214. package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +3 -2
  215. package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +3 -2
  216. package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +3 -2
  217. package/lib/development-environment/mock/mockObjects/eventsJson.js +3 -2
  218. package/lib/development-environment/mock/mockObjects/metascore.js +3 -2
  219. package/lib/development-environment/mock/mockObjects/permissionsJson.js +3 -2
  220. package/lib/development-environment/mock/mockObjects/pointsJson.js +3 -2
  221. package/lib/development-environment/mock/mockObjects/site-info.js +3 -2
  222. package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +3 -2
  223. package/lib/development-environment/togly/ToglyDashboard.js +23 -13
  224. package/lib/development-environment/togly/ToglyItem.js +31 -24
  225. package/lib/development-environment/togly/flags.js +1 -1
  226. package/lib/development-environment/togly/init.js +4 -4
  227. package/lib/development-environment/togly/macro.js +9 -13
  228. package/lib/development-environment/togly/useDoubleKeyDown.js +9 -7
  229. package/lib/development-environment/togly/useLocalStorage.js +18 -13
  230. package/lib/hooks/useApi.js +56 -20
  231. package/lib/hooks/useApiWithDashboardQuery.js +43 -23
  232. package/lib/hooks/useClickOutside.js +5 -4
  233. package/lib/hooks/useInitializeHeaders.js +6 -6
  234. package/lib/hooks/useKandoFetch.js +31 -17
  235. package/lib/hooks/useMap.js +37 -25
  236. package/lib/hooks/useNavContext.js +26 -22
  237. package/lib/hooks/useQueryURL.js +3 -2
  238. package/lib/hooks/useRemoveExistingLayers.js +8 -7
  239. package/lib/hooks/useUpdateEventBodyTail.js +19 -14
  240. package/lib/hooks/useUserTimeZone.js +31 -34
  241. package/lib/hooks/useUserTimeZone.test.js +23 -19
  242. package/lib/hooks/useWindowSize.js +14 -7
  243. package/lib/index.js +13 -11
  244. package/lib/macros/getVersion.js +2 -2
  245. package/lib/models/IAction.js +1 -1
  246. package/lib/models/IAppState.js +1 -1
  247. package/lib/pages/AreaPage/AreaPage.js +68 -34
  248. package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +17 -15
  249. package/lib/pages/AreaPage/Dashboard/Dashboard.js +27 -25
  250. package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +23 -14
  251. package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +5 -5
  252. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +8 -8
  253. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +10 -10
  254. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +6 -4
  255. package/lib/pages/AreaPage/Dashboard/Sites/SitesResponse.interface.js +1 -1
  256. package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +3 -2
  257. package/lib/pages/AreaPage/Dashboard/Sites/styles.js +8 -5
  258. package/lib/pages/AssessmentPage/AssessmentPage.js +46 -38
  259. package/lib/pages/CannyWidget/Feedback.js +16 -14
  260. package/lib/pages/CovidPage/CovidPage.js +16 -9
  261. package/lib/pages/CovidPage/components/Body.js +30 -26
  262. package/lib/pages/CovidPage/components/Map.js +40 -28
  263. package/lib/pages/CovidPage/components/Sidebar.js +16 -15
  264. package/lib/pages/CovidPage/components/Summary.js +29 -20
  265. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +33 -26
  266. package/lib/pages/CovidPage/components/TrendGraphNVL/index.js +4 -3
  267. package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +76 -52
  268. package/lib/pages/CovidPage/components/TrendPopupContent/index.js +4 -3
  269. package/lib/pages/CovidPage/components/areas/Area.js +36 -24
  270. package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +46 -45
  271. package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +36 -32
  272. package/lib/pages/CovidPage/components/areas/AreasList.js +42 -29
  273. package/lib/pages/CovidPage/components/areas/Sort.js +17 -12
  274. package/lib/pages/CovidPage/components/nvlStatusHelper.js +11 -11
  275. package/lib/pages/DashboardMap/AreaCard.js +27 -27
  276. package/lib/pages/DashboardMap/AssessmentIcon.js +7 -8
  277. package/lib/pages/DashboardMap/Capacity.js +77 -28
  278. package/lib/pages/DashboardMap/FactoryCard.js +24 -28
  279. package/lib/pages/DashboardMap/HighchartsOptions.js +5 -6
  280. package/lib/pages/DashboardMap/List.js +65 -55
  281. package/lib/pages/DashboardMap/ListContext.js +19 -14
  282. package/lib/pages/DashboardMap/Loader.js +3 -3
  283. package/lib/pages/DashboardMap/SeverityBadge.js +24 -16
  284. package/lib/pages/DashboardMap/WWTPMap.js +71 -57
  285. package/lib/pages/DashboardMap/WaterDischarge.js +9 -9
  286. package/lib/pages/DashboardMap/Widget.js +67 -48
  287. package/lib/pages/DashboardMap/index.js +4 -3
  288. package/lib/pages/DashboardMap/utils.js +60 -41
  289. package/lib/pages/EventsPage/Body/Body.js +12 -15
  290. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +20 -17
  291. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +27 -16
  292. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +9 -10
  293. package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +10 -13
  294. package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +31 -22
  295. package/lib/pages/EventsPage/DragAndDropArea/index.js +4 -3
  296. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +38 -30
  297. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +23 -14
  298. package/lib/pages/EventsPage/EventsPage.js +17 -10
  299. package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +40 -26
  300. package/lib/pages/EventsPage/events/MoreInfo.js +19 -18
  301. package/lib/pages/EventsPage/events/Sidebar.js +11 -14
  302. package/lib/pages/EventsPage/events/event_info/Contaminants/Contaminants.js +10 -9
  303. package/lib/pages/EventsPage/events/event_info/Contaminants/ContaminantsList.js +24 -19
  304. package/lib/pages/EventsPage/events/event_info/Contaminants/index.js +4 -3
  305. package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +38 -31
  306. package/lib/pages/EventsPage/events/event_info/EventDetails.js +32 -34
  307. package/lib/pages/EventsPage/events/event_info/EventInfo.js +60 -50
  308. package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +5 -5
  309. package/lib/pages/EventsPage/events/event_info/EventSection.js +21 -18
  310. package/lib/pages/EventsPage/events/event_info/EventSection.test.js +39 -44
  311. package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +50 -39
  312. package/lib/pages/EventsPage/events/event_info/Header/Header.js +7 -8
  313. package/lib/pages/EventsPage/events/event_info/Header/HeaderContainer.js +34 -29
  314. package/lib/pages/EventsPage/events/event_info/Header/index.js +4 -3
  315. package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +7 -6
  316. package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +39 -30
  317. package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +9 -6
  318. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionAssessment.js +15 -14
  319. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionTypesList.js +12 -9
  320. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /index.js +4 -3
  321. package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +24 -23
  322. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResult.js +22 -13
  323. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResultButton.js +6 -7
  324. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/index.js +4 -3
  325. package/lib/pages/EventsPage/events/event_info/SamplingList/SamplingDetails.js +12 -13
  326. package/lib/pages/EventsPage/events/event_info/SamplingList/Samplings.js +28 -22
  327. package/lib/pages/EventsPage/events/event_info/SamplingList/index.js +4 -3
  328. package/lib/pages/EventsPage/events/event_info/SeverityScore/ScoreExplanation.js +10 -13
  329. package/lib/pages/EventsPage/events/event_info/SeverityScore/SeverityScore.js +9 -8
  330. package/lib/pages/EventsPage/events/event_info/SeverityScore/index.js +4 -3
  331. package/lib/pages/EventsPage/events/event_info/SourceDetails/Confidence.js +9 -9
  332. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.js +5 -4
  333. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.test.js +11 -13
  334. package/lib/pages/EventsPage/events/event_info/SourceDetails/IconAndTitles.js +5 -7
  335. package/lib/pages/EventsPage/events/event_info/SourceDetails/MoreInfoButton.js +14 -11
  336. package/lib/pages/EventsPage/events/event_info/SourceDetails/OtherSources.js +6 -7
  337. package/lib/pages/EventsPage/events/event_info/SourceDetails/PotentialSources.js +8 -9
  338. package/lib/pages/EventsPage/events/event_info/SourceDetails/SingleSource.js +8 -9
  339. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceCardBody.js +7 -8
  340. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.js +12 -13
  341. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.test.js +19 -18
  342. package/lib/pages/EventsPage/events/event_info/SourceDetails/WaterDischarge.js +7 -7
  343. package/lib/pages/EventsPage/events/event_info/Timelines/DischargeBox.js +8 -9
  344. package/lib/pages/EventsPage/events/event_info/Timelines/EarlyWarning.js +18 -19
  345. package/lib/pages/EventsPage/events/event_info/Timelines/LiveStatusBadge.js +7 -6
  346. package/lib/pages/EventsPage/events/event_info/Timelines/SeenBox.js +12 -13
  347. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.js +19 -23
  348. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.test.js +11 -12
  349. package/lib/pages/EventsPage/events/event_info/Timelines/Titles.js +7 -8
  350. package/lib/pages/EventsPage/events/event_info/Timelines/index.js +4 -3
  351. package/lib/pages/EventsPage/events/event_info/Timelines/style.js +6 -4
  352. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +40 -25
  353. package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +39 -30
  354. package/lib/pages/EventsPage/events/event_info/samplingsOld/Sampling.js +12 -13
  355. package/lib/pages/EventsPage/events/event_info/samplingsOld/Samplings.js +20 -17
  356. package/lib/pages/EventsPage/events/event_info/sources/Source.js +31 -27
  357. package/lib/pages/EventsPage/events/event_info/sources/Sources.js +27 -22
  358. package/lib/pages/EventsPage/events/event_info/styles.js +15 -21
  359. package/lib/pages/EventsPage/events/events_list/EventItem.js +21 -18
  360. package/lib/pages/EventsPage/events/events_list/EventUtils.js +11 -11
  361. package/lib/pages/EventsPage/events/events_list/EventsList.js +136 -111
  362. package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +58 -41
  363. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +135 -90
  364. package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +73 -54
  365. package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +44 -39
  366. package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +41 -32
  367. package/lib/pages/EventsPage/events/events_list/Filter/SingleSelect.js +21 -19
  368. package/lib/pages/EventsPage/events/events_list/Sort.js +19 -14
  369. package/lib/pages/ImportFileWizard/FileUploadRespones.js +22 -14
  370. package/lib/pages/ImportFileWizard/ImportButtomButtons.js +8 -9
  371. package/lib/pages/ImportFileWizard/ImportFile.js +25 -21
  372. package/lib/pages/ImportFileWizard/ResponseBody.js +36 -26
  373. package/lib/pages/ImportFileWizard/ValidationForm.js +23 -23
  374. package/lib/pages/ImportFileWizard/ValidationResponse.js +25 -23
  375. package/lib/pages/ImportFileWizard/importFileUtils.js +5 -4
  376. package/lib/pages/ImportFileWizard/index.js +4 -3
  377. package/lib/pages/ImportGisPage/ImportGisContainer.js +27 -22
  378. package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +44 -38
  379. package/lib/pages/ImportGisPage/importGisUtils.js +52 -43
  380. package/lib/pages/ImportGisProcess/index.js +18 -14
  381. package/lib/pages/ImportSiteProcess/index.js +18 -14
  382. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +13 -7
  383. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +20 -18
  384. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +4 -4
  385. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +60 -28
  386. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +12 -8
  387. package/lib/pages/NotificationsPage/Notification/Notification.js +13 -17
  388. package/lib/pages/NotificationsPage/Notifications.interface.js +1 -1
  389. package/lib/pages/NotificationsPage/Notifications.mock.js +3 -2
  390. package/lib/pages/NotificationsPage/Notifications.stories.js +10 -6
  391. package/lib/pages/NotificationsPage/NotificationsPage.js +38 -19
  392. package/lib/pages/NotificationsPage/assets/index.js +10 -10
  393. package/lib/pages/NotificationsPageV2/NotificationsPage.js +101 -72
  394. package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +65 -95
  395. package/lib/pages/NotificationsPageV2/components/NotificationsForm/EventType.js +15 -13
  396. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSendVia.js +17 -19
  397. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSensors.js +22 -18
  398. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSources.js +22 -18
  399. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationTags.js +23 -19
  400. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +71 -82
  401. package/lib/pages/NotificationsPageV2/components/NotificationsForm/WaterAuthoritySelection.js +23 -19
  402. package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +74 -71
  403. package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +94 -80
  404. package/lib/pages/NotificationsPageV2/notificationUtils.js +39 -40
  405. package/lib/pages/OldSitePage/IDashboardData.js +1 -1
  406. package/lib/pages/OldSitePage/OldSitePage.js +132 -56
  407. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +10 -6
  408. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +9 -5
  409. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +7 -9
  410. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +19 -16
  411. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +12 -10
  412. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +19 -12
  413. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +11 -14
  414. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +9 -5
  415. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +16 -18
  416. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +64 -51
  417. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +8 -10
  418. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +54 -29
  419. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +7 -4
  420. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +19 -12
  421. package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +11 -11
  422. package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +12 -10
  423. package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +23 -27
  424. package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +30 -28
  425. package/lib/pages/OldSitePage/SamplingParameters/models.js +1 -1
  426. package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +8 -5
  427. package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +12 -16
  428. package/lib/pages/OperationsPage/LeftPanel.js +55 -35
  429. package/lib/pages/OperationsPage/Map/Map.js +12 -12
  430. package/lib/pages/OperationsPage/Map/useMap.js +64 -52
  431. package/lib/pages/OperationsPage/OperationsContainerPage.js +59 -32
  432. package/lib/pages/OperationsPage/OperationsFilePage.js +12 -10
  433. package/lib/pages/OperationsPage/OperationsUtilityPage.js +6 -5
  434. package/lib/pages/OperationsPage/RightPanel.js +25 -22
  435. package/lib/pages/OperationsPage/index.js +4 -4
  436. package/lib/pages/PollutionRiskAssessment/FactoryDetails.js +60 -27
  437. package/lib/pages/PollutionRiskAssessment/FilterBehaviors.js +25 -19
  438. package/lib/pages/PollutionRiskAssessment/FilterButton.js +10 -11
  439. package/lib/pages/PollutionRiskAssessment/Map.js +42 -38
  440. package/lib/pages/PollutionRiskAssessment/SearchButton.js +10 -11
  441. package/lib/pages/PollutionRiskAssessment/SearchField.js +40 -26
  442. package/lib/pages/PollutionRiskAssessment/TotalSavings.js +16 -16
  443. package/lib/pages/PollutionRiskAssessment/UseCases.js +34 -32
  444. package/lib/pages/PollutionRiskAssessment/index.js +136 -76
  445. package/lib/pages/PollutionRiskAssessment/useMap.js +50 -34
  446. package/lib/pages/PollutionRiskAssessment/utils.js +7 -7
  447. package/lib/pages/ProfilePage/Container.js +4 -3
  448. package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +40 -23
  449. package/lib/pages/ProfilePage/ProfilePage.js +205 -106
  450. package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +34 -25
  451. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +20 -20
  452. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +30 -27
  453. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +119 -57
  454. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +23 -18
  455. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +13 -14
  456. package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +45 -40
  457. package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +24 -25
  458. package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +19 -18
  459. package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +18 -15
  460. package/lib/pages/SamplingsPage/DesktopActions/index.js +4 -3
  461. package/lib/pages/SamplingsPage/NavigationDropdown.js +31 -43
  462. package/lib/pages/SamplingsPage/NewSamplingAction.js +102 -75
  463. package/lib/pages/SamplingsPage/SamplingMobileModal.js +98 -124
  464. package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +25 -23
  465. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +25 -36
  466. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +61 -36
  467. package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +21 -16
  468. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +9 -10
  469. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +193 -108
  470. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +54 -47
  471. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +39 -42
  472. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +39 -42
  473. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +28 -21
  474. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +6 -4
  475. package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +7 -11
  476. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +53 -51
  477. package/lib/pages/SamplingsPage/SamplingsMobileList.js +31 -22
  478. package/lib/pages/SamplingsPage/SamplingsPage.js +33 -25
  479. package/lib/pages/SamplingsPage/SamplingsPageContainer.js +58 -49
  480. package/lib/pages/SamplingsPage/index.js +3 -2
  481. package/lib/pages/SamplingsPage/samplingsPageUtils.js +83 -52
  482. package/lib/pages/SitePage/DischargePattern/DischargePattern.js +6 -7
  483. package/lib/pages/SitePage/PollutionContributor/PollutionContributor.js +16 -16
  484. package/lib/pages/SitePage/PollutionContributor/PollutionContributorContainer.js +16 -12
  485. package/lib/pages/SitePage/PollutionContributor/contributorUtils.js +16 -16
  486. package/lib/pages/SitePage/PollutionContributor/index.js +4 -3
  487. package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +9 -5
  488. package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +15 -15
  489. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +9 -10
  490. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +24 -27
  491. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +16 -12
  492. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +33 -37
  493. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +12 -10
  494. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +25 -15
  495. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +11 -14
  496. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +9 -5
  497. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +16 -18
  498. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +71 -58
  499. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +8 -10
  500. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +27 -15
  501. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +9 -5
  502. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +19 -12
  503. package/lib/pages/SitePage/SamplingParameters/body/Body.js +9 -10
  504. package/lib/pages/SitePage/SamplingParameters/body/BodyContainer.js +40 -30
  505. package/lib/pages/SitePage/SamplingParameters/body/index.js +4 -3
  506. package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +12 -11
  507. package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +12 -10
  508. package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +54 -54
  509. package/lib/pages/SitePage/SamplingParameters/dataParser.js +41 -32
  510. package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +9 -11
  511. package/lib/pages/SitePage/SamplingParameters/models.js +1 -1
  512. package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +8 -5
  513. package/lib/pages/SitePage/SamplingParameters/styles/styles.js +12 -16
  514. package/lib/pages/SitePage/SiteInformation/EmptyState.js +10 -13
  515. package/lib/pages/SitePage/SiteInformation/SiteInformation.js +31 -31
  516. package/lib/pages/SitePage/SitePage.js +76 -36
  517. package/lib/pages/UploadLabResult/index.js +16 -15
  518. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +37 -27
  519. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +13 -8
  520. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +15 -11
  521. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +9 -5
  522. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +50 -47
  523. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +8 -11
  524. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +5 -4
  525. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +9 -6
  526. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +10 -11
  527. package/lib/pages/UtilityDashboardPage/MostSevereEvents/models.js +1 -1
  528. package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +13 -16
  529. package/lib/pages/UtilityDashboardPage/TopBar/constants.js +8 -8
  530. package/lib/pages/UtilityDashboardPage/TopBar/styles.js +4 -3
  531. package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +30 -20
  532. package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +40 -28
  533. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +17 -15
  534. package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +14 -7
  535. package/lib/pages/UtilityDashboardPage/VirtualAreaDashboardPage.js +31 -26
  536. package/lib/pages/WbeDashboard/ExpandableComponent.js +9 -9
  537. package/lib/pages/WbeDashboard/GraphWrapper.js +35 -28
  538. package/lib/pages/WbeDashboard/IndividualTinyGraph.js +19 -16
  539. package/lib/pages/WbeDashboard/SearchInput.js +21 -15
  540. package/lib/pages/WbeDashboard/SummaryGraph.js +77 -50
  541. package/lib/pages/WbeDashboard/SummaryGraphModal.js +18 -20
  542. package/lib/pages/WbeDashboard/Tabs.js +11 -11
  543. package/lib/pages/WbeDashboard/WbeDashboardPage.js +210 -147
  544. package/lib/pages/WbeDashboard/WbeSummaryBar.js +48 -39
  545. package/lib/pages/WwtpPage/DashboardCard.js +21 -25
  546. package/lib/pages/WwtpPage/DischargePatternCard.js +25 -14
  547. package/lib/pages/WwtpPage/InletsCard/InletsBar.js +11 -11
  548. package/lib/pages/WwtpPage/InletsCard/InletsCard.js +22 -22
  549. package/lib/pages/WwtpPage/InletsCard/index.js +4 -3
  550. package/lib/pages/WwtpPage/Map.js +6 -6
  551. package/lib/pages/WwtpPage/OrganicCard.js +5 -4
  552. package/lib/pages/WwtpPage/PotentialSaving/ImpactCard.js +5 -4
  553. package/lib/pages/WwtpPage/PotentialSaving/PotentialItem.js +7 -8
  554. package/lib/pages/WwtpPage/PotentialSaving/PotentialSaving.js +11 -11
  555. package/lib/pages/WwtpPage/PotentialSaving/PotentialSavingContainer.js +17 -20
  556. package/lib/pages/WwtpPage/PotentialSaving/index.js +4 -3
  557. package/lib/pages/WwtpPage/PotentialSaving/types.js +1 -1
  558. package/lib/pages/WwtpPage/PredictionCard.js +5 -4
  559. package/lib/pages/WwtpPage/TrendCard.js +22 -20
  560. package/lib/pages/WwtpPage/UpgradeBox.js +5 -4
  561. package/lib/pages/WwtpPage/WwtpPage.js +8 -9
  562. package/lib/pages/WwtpPage/WwtpPageContainer.js +19 -23
  563. package/lib/pages/WwtpPage/index.js +4 -3
  564. package/lib/providers/Slideshow/SlideshowContext.js +10 -11
  565. package/lib/providers/Slideshow/SlideshowProvider.js +40 -22
  566. package/lib/providers/Slideshow/SlideshowRunner.js +21 -18
  567. package/lib/providers/UrlHistory/UrlHistoryContext.js +6 -7
  568. package/lib/providers/UrlHistory/UrlHistoryProvider.js +13 -12
  569. package/lib/providers/UrlHistory/index.js +4 -4
  570. package/lib/providers/UrlHistory/useLastVisited.js +6 -5
  571. package/lib/react-app-env.d.js +1 -1
  572. package/lib/store/ImportGis/action.js +1 -1
  573. package/lib/store/ImportGis/actionTypes.js +5 -4
  574. package/lib/store/ImportGis/actionsCreator.js +5 -7
  575. package/lib/store/ImportGis/models/gisImports.js +1 -1
  576. package/lib/store/ImportGis/reducer.js +7 -9
  577. package/lib/store/WBE/actionTypes.js +3 -2
  578. package/lib/store/WBE/actions.js +1 -1
  579. package/lib/store/WBE/models/IAreaWBE.js +1 -1
  580. package/lib/store/WBE/models/IWBE.js +1 -1
  581. package/lib/store/WBE/models/IWBEState.js +1 -1
  582. package/lib/store/WBE/reducer.js +8 -10
  583. package/lib/store/WWTPDashboard/WWTPDashboardSlice.js +15 -24
  584. package/lib/store/WWTPDashboard/types.js +1 -1
  585. package/lib/store/areas/actionTypes.js +7 -4
  586. package/lib/store/areas/actions.js +13 -7
  587. package/lib/store/areas/models/IArea.js +1 -1
  588. package/lib/store/areas/models/IAreasState.js +1 -1
  589. package/lib/store/areas/reducer.js +6 -8
  590. package/lib/store/context/actionTypes.js +5 -3
  591. package/lib/store/context/actions.js +3 -3
  592. package/lib/store/context/contextMiddlewares.js +18 -15
  593. package/lib/store/context/models/INavContext.js +1 -1
  594. package/lib/store/context/models/INavContextState.js +1 -1
  595. package/lib/store/context/reducer.js +8 -10
  596. package/lib/store/dashboard/dashboardSlice.js +11 -18
  597. package/lib/store/dashboard/periodType.js +1 -1
  598. package/lib/store/edges/actionTypes.js +9 -5
  599. package/lib/store/edges/actions.js +8 -4
  600. package/lib/store/edges/models/IEdge.js +1 -1
  601. package/lib/store/edges/models/IEdgesState.js +1 -1
  602. package/lib/store/edges/reducer.js +17 -13
  603. package/lib/store/events/actionTypes.js +33 -17
  604. package/lib/store/events/actions.js +7 -3
  605. package/lib/store/events/models/IEvent.js +1 -1
  606. package/lib/store/events/models/IEventsState.js +1 -1
  607. package/lib/store/events/models/ISource.js +1 -1
  608. package/lib/store/events/reducer.js +39 -28
  609. package/lib/store/filters/IFilter.js +1 -1
  610. package/lib/store/filters/IFilterItem.js +1 -1
  611. package/lib/store/global/actionTypes.js +21 -11
  612. package/lib/store/global/actions.js +6 -8
  613. package/lib/store/global/models/IGlobalState.js +1 -1
  614. package/lib/store/global/reducer.js +7 -9
  615. package/lib/store/permissions/permissionsSlice.js +9 -12
  616. package/lib/store/points/actionTypes.js +5 -3
  617. package/lib/store/points/actions.js +10 -6
  618. package/lib/store/points/models/IGeoPoint.js +1 -1
  619. package/lib/store/points/models/IGroup.js +1 -1
  620. package/lib/store/points/models/IIssue.js +1 -1
  621. package/lib/store/points/models/IPoint.js +1 -1
  622. package/lib/store/points/models/IPointsState.js +1 -1
  623. package/lib/store/points/reducer.js +5 -7
  624. package/lib/store/rootActionTypes.js +3 -2
  625. package/lib/store/rootActions.js +1 -1
  626. package/lib/store/rootReducer.js +10 -12
  627. package/lib/store/rootStore.js +6 -6
  628. package/lib/store/samplings/action.js +1 -1
  629. package/lib/store/samplings/actionTypes.js +5 -4
  630. package/lib/store/samplings/actionsCreator.js +1 -1
  631. package/lib/store/samplings/models/Samplings.js +1 -1
  632. package/lib/store/samplings/reducer.js +10 -10
  633. package/lib/styles/StylesLayout.js +6 -7
  634. package/lib/styles/theme/theme.js +26 -23
  635. package/lib/test/mocks/browser.js +5 -2
  636. package/lib/test/test-utils.js +9 -12
  637. package/lib/ui-kit/Alert/KandoAlert.js +6 -8
  638. package/lib/ui-kit/Button/Button.js +83 -129
  639. package/lib/ui-kit/Button/Button.test.js +33 -27
  640. package/lib/ui-kit/Button/ButtonUtils.js +1 -1
  641. package/lib/ui-kit/Checkbox/Checkbox.js +27 -34
  642. package/lib/ui-kit/ContentCard/ContentCard.js +20 -16
  643. package/lib/ui-kit/Dashboard/Dashboard.js +28 -29
  644. package/lib/ui-kit/Dashboard/index.js +4 -3
  645. package/lib/ui-kit/DropDown/DropDown.js +22 -23
  646. package/lib/ui-kit/DropDown/DropDown.test.js +13 -13
  647. package/lib/ui-kit/DropDown/DropDownItem.js +25 -26
  648. package/lib/ui-kit/DropDown/DropdownToggle.js +10 -13
  649. package/lib/ui-kit/EmptyState/EmptyState.js +6 -7
  650. package/lib/ui-kit/HierarchyGraph/AutoFitTree.js +81 -69
  651. package/lib/ui-kit/HierarchyGraph/HierarchyGraph.js +167 -89
  652. package/lib/ui-kit/HierarchyGraph/LeafSign.js +7 -7
  653. package/lib/ui-kit/HierarchyGraph/MicroStackedBar.js +19 -17
  654. package/lib/ui-kit/HierarchyGraph/NodeIcon.js +8 -9
  655. package/lib/ui-kit/HierarchyGraph/NodeLayout.js +25 -22
  656. package/lib/ui-kit/HierarchyGraph/PollutionContributorNode.js +10 -11
  657. package/lib/ui-kit/HierarchyGraph/ScoreNode.js +9 -10
  658. package/lib/ui-kit/HierarchyGraph/index.js +4 -3
  659. package/lib/ui-kit/HierarchyGraph/utils.js +67 -57
  660. package/lib/ui-kit/IconAction/IconAction.js +8 -9
  661. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +64 -47
  662. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +49 -58
  663. package/lib/ui-kit/InletsPie/InletsPie.js +16 -17
  664. package/lib/ui-kit/InletsPie/index.js +4 -3
  665. package/lib/ui-kit/InletsPie/options.js +9 -7
  666. package/lib/ui-kit/KandoBottomSheet/KandoBottomSheet.js +38 -29
  667. package/lib/ui-kit/KandoFilter/KandoFilter.js +11 -10
  668. package/lib/ui-kit/KandoList/KandoList.js +12 -13
  669. package/lib/ui-kit/KandoList/kandoListUtils.js +1 -1
  670. package/lib/ui-kit/KandoTable/KandoTable.js +41 -48
  671. package/lib/ui-kit/KandoTable/KandoTable.test.js +27 -21
  672. package/lib/ui-kit/KandoTable/kandoTableUtils.js +1 -1
  673. package/lib/ui-kit/Layout/Layout.js +7 -8
  674. package/lib/ui-kit/MobileInput/MobileInput.js +50 -56
  675. package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +17 -14
  676. package/lib/ui-kit/ModalConfirmation/index.js +3 -2
  677. package/lib/ui-kit/OrganicEvents/GaugeChart.js +8 -9
  678. package/lib/ui-kit/OrganicEvents/OrganicEvents.js +9 -8
  679. package/lib/ui-kit/OrganicEvents/OrganicEventsContainer.js +22 -26
  680. package/lib/ui-kit/OrganicEvents/TextInfo.js +13 -17
  681. package/lib/ui-kit/OrganicEvents/index.js +4 -3
  682. package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +11 -12
  683. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +21 -17
  684. package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +4 -3
  685. package/lib/ui-kit/ScoreGauge/ScoreGauge.js +24 -21
  686. package/lib/ui-kit/ScoreGauge/constant.js +4 -3
  687. package/lib/ui-kit/ScoreGauge/index.js +4 -3
  688. package/lib/ui-kit/TimeLineChart/TrendChart.js +28 -25
  689. package/lib/ui-kit/TimeLineChart/index.js +4 -3
  690. package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +11 -10
  691. package/lib/ui-kit/Tooltip/Tooltip.js +9 -15
  692. package/lib/ui-kit/index.js +8 -8
  693. package/lib/ui-kit/kandoStepper/KandoStepper.js +14 -13
  694. package/lib/ui-kit/siteName/SiteName.js +11 -13
  695. package/lib/utilities/ActionUtility.js +7 -7
  696. package/lib/utilities/Alert.js +20 -23
  697. package/lib/utilities/Analytics.js +19 -19
  698. package/lib/utilities/Array.js +5 -4
  699. package/lib/utilities/Enum.js +51 -15
  700. package/lib/utilities/ErrorBoundary.js +42 -27
  701. package/lib/utilities/File.js +73 -45
  702. package/lib/utilities/GetDir.js +10 -10
  703. package/lib/utilities/KandoDate.js +15 -7
  704. package/lib/utilities/KandoModal.js +28 -16
  705. package/lib/utilities/LocalStorage.js +7 -5
  706. package/lib/utilities/ThousandsToK.js +2 -2
  707. package/lib/utilities/TimeFormat.js +23 -22
  708. package/lib/utilities/Truncate.js +27 -17
  709. package/lib/utilities/edgesMath.js +16 -15
  710. package/lib/utilities/i18n.js +6 -5
  711. package/lib/utilities/kql.js +12 -10
  712. package/lib/utilities/map/icons.js +18 -18
  713. package/lib/utilities/polylinedecorator.js +113 -88
  714. package/lib/utilities/scoreToData.js +26 -20
  715. package/lib/utilities/scoreToData.test.js +5 -5
  716. package/lib/utilities/time.js +10 -9
  717. package/lib/utilities/uploadToS3.js +12 -12
  718. package/lib/utilities/urls.js +14 -17
  719. package/package.json +1 -1
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.Map = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
9
10
  var L = _interopRequireWildcard(require("leaflet"));
10
11
  require("utilities/polylinedecorator");
11
12
  require("leaflet.markercluster");
@@ -26,130 +27,166 @@ var _ListContext = require("pages/DashboardMap/ListContext");
26
27
  var _actions = require("store/areas/actions");
27
28
  var _actions2 = require("store/points/actions");
28
29
  var _PointIcon2 = require("./points/PointIcon");
30
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
32
  // @ts-ignore
30
33
 
31
34
  require('leaflet.markercluster');
32
- const Map = _ref => {
33
- let {
34
- areas,
35
- edges,
36
- points,
37
- global_data,
38
- areaToCenterBy,
39
- focusedEvent,
40
- hoveredEvent,
41
- hideEdges = false,
42
- mapBoxStyle = _theme.leafletMap.mapDefault,
43
- children,
44
- includeUnmonitoredPoints = true,
45
- includeUnmonitoredDescendantsForEdges = false,
46
- forEventsView = false,
47
- style = {},
48
- forWWTPDashboard = false
49
- } = _ref;
50
- const {
51
- map
52
- } = global_data;
53
- const mapRef = (0, _react.useRef)(null);
54
- const dispatch = (0, _reactRedux.useDispatch)();
55
- const [mapZoomLevel, setMapZoomLevel] = (0, _react.useState)(2);
56
- const {
57
- selectedItem
58
- } = (0, _ListContext.useSelectedItem)();
59
- const [edgesCheckbox, setEdgesCheckbox] = (0, _react.useState)(true);
60
- const [onlyMonitoredPoints, setOnlyMonitoredPoints] = (0, _react.useState)(false);
61
- const [showSamplerIcon, setShowSamplerIcon] = (0, _react.useState)(false);
62
- const edgesCheckboxRef = (0, _react.useRef)(edgesCheckbox);
63
- const hoveredEventPresent = (0, _react.useMemo)(() => {
35
+ var Map = function Map(_ref) {
36
+ var areas = _ref.areas,
37
+ edges = _ref.edges,
38
+ points = _ref.points,
39
+ global_data = _ref.global_data,
40
+ areaToCenterBy = _ref.areaToCenterBy,
41
+ focusedEvent = _ref.focusedEvent,
42
+ hoveredEvent = _ref.hoveredEvent,
43
+ _ref$hideEdges = _ref.hideEdges,
44
+ hideEdges = _ref$hideEdges === void 0 ? false : _ref$hideEdges,
45
+ _ref$mapBoxStyle = _ref.mapBoxStyle,
46
+ mapBoxStyle = _ref$mapBoxStyle === void 0 ? _theme.leafletMap.mapDefault : _ref$mapBoxStyle,
47
+ children = _ref.children,
48
+ _ref$includeUnmonitor = _ref.includeUnmonitoredPoints,
49
+ includeUnmonitoredPoints = _ref$includeUnmonitor === void 0 ? true : _ref$includeUnmonitor,
50
+ _ref$includeUnmonitor2 = _ref.includeUnmonitoredDescendantsForEdges,
51
+ includeUnmonitoredDescendantsForEdges = _ref$includeUnmonitor2 === void 0 ? false : _ref$includeUnmonitor2,
52
+ _ref$forEventsView = _ref.forEventsView,
53
+ forEventsView = _ref$forEventsView === void 0 ? false : _ref$forEventsView,
54
+ _ref$style = _ref.style,
55
+ style = _ref$style === void 0 ? {} : _ref$style,
56
+ _ref$forWWTPDashboard = _ref.forWWTPDashboard,
57
+ forWWTPDashboard = _ref$forWWTPDashboard === void 0 ? false : _ref$forWWTPDashboard;
58
+ var map = global_data.map;
59
+ var mapRef = (0, _react.useRef)(null);
60
+ var dispatch = (0, _reactRedux.useDispatch)();
61
+ var _useState = (0, _react.useState)(2),
62
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
63
+ mapZoomLevel = _useState2[0],
64
+ setMapZoomLevel = _useState2[1];
65
+ var _useSelectedItem = (0, _ListContext.useSelectedItem)(),
66
+ selectedItem = _useSelectedItem.selectedItem;
67
+ var _useState3 = (0, _react.useState)(true),
68
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
69
+ edgesCheckbox = _useState4[0],
70
+ setEdgesCheckbox = _useState4[1];
71
+ var _useState5 = (0, _react.useState)(false),
72
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
73
+ onlyMonitoredPoints = _useState6[0],
74
+ setOnlyMonitoredPoints = _useState6[1];
75
+ var _useState7 = (0, _react.useState)(false),
76
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
77
+ showSamplerIcon = _useState8[0],
78
+ setShowSamplerIcon = _useState8[1];
79
+ var edgesCheckboxRef = (0, _react.useRef)(edgesCheckbox);
80
+ var hoveredEventPresent = (0, _react.useMemo)(function () {
64
81
  return hoveredEvent !== null && hoveredEvent !== undefined;
65
82
  }, [hoveredEvent]);
66
- const focusedEventPresent = (0, _react.useMemo)(() => {
83
+ var focusedEventPresent = (0, _react.useMemo)(function () {
67
84
  return focusedEvent !== null && focusedEvent !== undefined;
68
85
  }, [focusedEvent]);
69
86
 
70
87
  // Add parent layer group for all factories
71
- const [factoriesParentGroup] = (0, _react.useState)(L.layerGroup());
72
- const [unmonitoredFactoriesGroup] = (0, _react.useState)(L.layerGroup());
73
- const [monitoredFactoriesGroup] = (0, _react.useState)(L.layerGroup());
74
- const [unmonitoredEdgesGroup] = (0, _react.useState)(L.layerGroup());
75
- const [monitoredEdgesGroup] = (0, _react.useState)(L.layerGroup());
76
- const [wwtpsLayerGroup] = (0, _react.useState)(L.layerGroup());
77
- const [collectorsLayerGroup] = (0, _react.useState)(L.layerGroup());
78
- const [areasLayerGroup] = (0, _react.useState)(new L.FeatureGroup());
79
- const renderPointMarkers = (filteredPoints, mapRef, props) => mapRef.current !== null && points && /*#__PURE__*/_react.default.createElement(_PointMarkers.PointMarkers, Object.assign({
80
- map: mapRef.current,
81
- points: filteredPoints,
82
- showSamplerIcon: showSamplerIcon
83
- }, props));
84
- const memoizedMonitoredPoints = (0, _react.useMemo)(() => {
88
+ var _useState9 = (0, _react.useState)(L.layerGroup()),
89
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 1),
90
+ factoriesParentGroup = _useState10[0];
91
+ var _useState11 = (0, _react.useState)(L.layerGroup()),
92
+ _useState12 = (0, _slicedToArray2.default)(_useState11, 1),
93
+ unmonitoredFactoriesGroup = _useState12[0];
94
+ var _useState13 = (0, _react.useState)(L.layerGroup()),
95
+ _useState14 = (0, _slicedToArray2.default)(_useState13, 1),
96
+ monitoredFactoriesGroup = _useState14[0];
97
+ var _useState15 = (0, _react.useState)(L.layerGroup()),
98
+ _useState16 = (0, _slicedToArray2.default)(_useState15, 1),
99
+ unmonitoredEdgesGroup = _useState16[0];
100
+ var _useState17 = (0, _react.useState)(L.layerGroup()),
101
+ _useState18 = (0, _slicedToArray2.default)(_useState17, 1),
102
+ monitoredEdgesGroup = _useState18[0];
103
+ var _useState19 = (0, _react.useState)(L.layerGroup()),
104
+ _useState20 = (0, _slicedToArray2.default)(_useState19, 1),
105
+ wwtpsLayerGroup = _useState20[0];
106
+ var _useState21 = (0, _react.useState)(L.layerGroup()),
107
+ _useState22 = (0, _slicedToArray2.default)(_useState21, 1),
108
+ collectorsLayerGroup = _useState22[0];
109
+ var _useState23 = (0, _react.useState)(new L.FeatureGroup()),
110
+ _useState24 = (0, _slicedToArray2.default)(_useState23, 1),
111
+ areasLayerGroup = _useState24[0];
112
+ var renderPointMarkers = function renderPointMarkers(filteredPoints, mapRef, props) {
113
+ return mapRef.current !== null && points && /*#__PURE__*/_react.default.createElement(_PointMarkers.PointMarkers, Object.assign({
114
+ map: mapRef.current,
115
+ points: filteredPoints,
116
+ showSamplerIcon: showSamplerIcon
117
+ }, props));
118
+ };
119
+ var memoizedMonitoredPoints = (0, _react.useMemo)(function () {
85
120
  if (!edgesCheckbox || !mapRef.current || !points || points.length === 0) return null;
86
- const monitoredPoints = (0, _MapUtils.filterPoints)(points, {
121
+ var monitoredPoints = (0, _MapUtils.filterPoints)(points, {
87
122
  onlyMonitored: true
88
123
  });
89
- const result = renderPointMarkers(monitoredPoints, mapRef, {
124
+ var result = renderPointMarkers(monitoredPoints, mapRef, {
90
125
  includeUnmonitoredPoints: true,
91
126
  rerender: _MapUtils.zoomLevels[mapZoomLevel],
92
127
  factoriesGroup: monitoredFactoriesGroup,
93
128
  wwtpsGroup: wwtpsLayerGroup,
94
129
  collectorsGroup: collectorsLayerGroup,
95
- forEventsView,
130
+ forEventsView: forEventsView,
96
131
  showSampler: false
97
132
  });
98
133
  return result;
99
134
  }, [mapRef.current, points, mapZoomLevel]);
100
- const memoizedUnmonitoredPoints = (0, _react.useMemo)(() => {
135
+ var memoizedUnmonitoredPoints = (0, _react.useMemo)(function () {
101
136
  if (!edgesCheckbox || !mapRef.current || !points || points.length === 0) return null;
102
- const unmonitoredPoints = (0, _MapUtils.filterPoints)(points, {
137
+ var unmonitoredPoints = (0, _MapUtils.filterPoints)(points, {
103
138
  onlyMonitored: false
104
139
  });
105
- const result = renderPointMarkers(unmonitoredPoints, mapRef, {
140
+ var result = renderPointMarkers(unmonitoredPoints, mapRef, {
106
141
  includeUnmonitoredPoints: true,
107
142
  rerender: _MapUtils.zoomLevels[mapZoomLevel],
108
143
  factoriesGroup: unmonitoredFactoriesGroup,
109
144
  wwtpsGroup: wwtpsLayerGroup,
110
145
  collectorsGroup: collectorsLayerGroup,
111
- forEventsView
146
+ forEventsView: forEventsView
112
147
  });
113
148
  return result;
114
149
  }, [mapRef.current, points, mapZoomLevel]);
115
- const renderEdges = (filteredEdges, mapRef, edgesCheckbox, props) => mapRef.current !== null && edgesCheckbox && /*#__PURE__*/_react.default.createElement(_Edges.default, Object.assign({
116
- edges: filteredEdges,
117
- map: mapRef.current
118
- }, props));
119
- const memoizedEdges = (0, _react.useMemo)(() => {
120
- const monitoredEdges = (0, _MapUtils.filterEdges)(edges, points, true);
150
+ var renderEdges = function renderEdges(filteredEdges, mapRef, edgesCheckbox, props) {
151
+ return mapRef.current !== null && edgesCheckbox && /*#__PURE__*/_react.default.createElement(_Edges.default, Object.assign({
152
+ edges: filteredEdges,
153
+ map: mapRef.current
154
+ }, props));
155
+ };
156
+ var memoizedEdges = (0, _react.useMemo)(function () {
157
+ var monitoredEdges = (0, _MapUtils.filterEdges)(edges, points, true);
121
158
  return renderEdges(monitoredEdges, mapRef, edgesCheckbox, {
122
- L,
123
- points,
159
+ L: L,
160
+ points: points,
124
161
  hideEdges: false,
125
162
  hideArrows: true,
126
163
  allowUnmonitoredDescendants: includeUnmonitoredDescendantsForEdges,
127
164
  group: monitoredEdgesGroup
128
165
  });
129
166
  }, [points, edgesCheckbox, mapZoomLevel]);
130
- const memoizedUnmonitoredEdges = (0, _react.useMemo)(() => {
131
- const unmonitoredEdges = (0, _MapUtils.filterEdges)(edges, points, false);
167
+ var memoizedUnmonitoredEdges = (0, _react.useMemo)(function () {
168
+ var unmonitoredEdges = (0, _MapUtils.filterEdges)(edges, points, false);
132
169
  return renderEdges(unmonitoredEdges, mapRef, edgesCheckbox, {
133
- L,
134
- points,
170
+ L: L,
171
+ points: points,
135
172
  hideEdges: false,
136
173
  hideArrows: true,
137
174
  allowUnmonitoredDescendants: includeUnmonitoredDescendantsForEdges,
138
175
  group: unmonitoredEdgesGroup
139
176
  });
140
177
  }, [points, edgesCheckbox, mapZoomLevel]);
141
- const handleEdgesCheckboxChange = isChecked => {
178
+ var handleEdgesCheckboxChange = function handleEdgesCheckboxChange(isChecked) {
142
179
  setEdgesCheckbox(isChecked);
143
180
  };
144
181
 
145
182
  // This variable stores the zoom levels the edges are displayed
146
183
  // It is used in two places in the code, so it is better to store it in one place
147
- const edgesZoomLevels = ['Small', 'Medium', 'MLarge', 'Large'];
148
- const handlePointsCheckboxChange = isChecked => {
184
+ var edgesZoomLevels = ['Small', 'Medium', 'MLarge', 'Large'];
185
+ var handlePointsCheckboxChange = function handlePointsCheckboxChange(isChecked) {
149
186
  setOnlyMonitoredPoints(isChecked);
150
187
  if (mapRef.current !== null) {
151
188
  setOnlyMonitoredPoints(isChecked);
152
- let zoom = _MapUtils.zoomLevels[mapRef.current.getZoom()];
189
+ var zoom = _MapUtils.zoomLevels[mapRef.current.getZoom()];
153
190
  if (isChecked) {
154
191
  // Hide unmonitored points when "show only monitored" is checked
155
192
  factoriesParentGroup.removeLayer(unmonitoredFactoriesGroup);
@@ -165,20 +202,20 @@ const Map = _ref => {
165
202
  }
166
203
  }
167
204
  };
168
- const handlePointsWithSamplerCheckboxChange = isChecked => {
205
+ var handlePointsWithSamplerCheckboxChange = function handlePointsWithSamplerCheckboxChange(isChecked) {
169
206
  setShowSamplerIcon(isChecked);
170
207
  };
171
- const trackLayerbox = () => {
208
+ var trackLayerbox = function trackLayerbox() {
172
209
  (0, _MapUtils.setupCheckboxListener)('#edges-checkbox', handleEdgesCheckboxChange);
173
210
  (0, _MapUtils.setupCheckboxListener)('#monitored-points-checkbox', handlePointsCheckboxChange);
174
211
  (0, _MapUtils.setupCheckboxListener)('#monitored-points-with-sampler-checkbox', handlePointsWithSamplerCheckboxChange);
175
212
  };
176
- const zoomRulesForEventsView = () => {
177
- const payload = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, edgesCheckbox && memoizedEdges, edgesCheckbox && !onlyMonitoredPoints && memoizedUnmonitoredEdges, !onlyMonitoredPoints && memoizedUnmonitoredPoints, memoizedMonitoredPoints);
213
+ var zoomRulesForEventsView = function zoomRulesForEventsView() {
214
+ var payload = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, edgesCheckbox && memoizedEdges, edgesCheckbox && !onlyMonitoredPoints && memoizedUnmonitoredEdges, !onlyMonitoredPoints && memoizedUnmonitoredPoints, memoizedMonitoredPoints);
178
215
  return payload;
179
216
  };
180
- const memoizedZoomControl = () => {
181
- let payload = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
217
+ var memoizedZoomControl = function memoizedZoomControl() {
218
+ var payload = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
182
219
  if (edgesZoomLevels.includes(_MapUtils.zoomLevels[mapZoomLevel])) {
183
220
  payload = zoomRulesForEventsView();
184
221
  } else {
@@ -186,7 +223,7 @@ const Map = _ref => {
186
223
  }
187
224
  return payload;
188
225
  };
189
- const memoizedEvent = (0, _react.useMemo)(() => {
226
+ var memoizedEvent = (0, _react.useMemo)(function () {
190
227
  if (focusedEventPresent) {
191
228
  focusedEvent.focused = focusedEventPresent;
192
229
  focusedEvent.hovered = !focusedEventPresent;
@@ -204,27 +241,27 @@ const Map = _ref => {
204
241
  includeNetwork: !hoveredEventPresent
205
242
  });
206
243
  }, [focusedEventPresent, hoveredEventPresent, edges, points]);
207
- (0, _react.useEffect)(() => {
244
+ (0, _react.useEffect)(function () {
208
245
  edgesCheckboxRef.current = edgesCheckbox;
209
246
  }, [edgesCheckbox]);
210
- (0, _react.useEffect)(() => {
247
+ (0, _react.useEffect)(function () {
211
248
  if (mapRef.current) {
212
- const allGroups = [monitoredFactoriesGroup, unmonitoredFactoriesGroup, wwtpsLayerGroup, collectorsLayerGroup];
213
- let matchingMarkers = [];
214
- allGroups.forEach(group => {
215
- group.getLayers().forEach(layer => {
249
+ var allGroups = [monitoredFactoriesGroup, unmonitoredFactoriesGroup, wwtpsLayerGroup, collectorsLayerGroup];
250
+ var matchingMarkers = [];
251
+ allGroups.forEach(function (group) {
252
+ group.getLayers().forEach(function (layer) {
216
253
  if (layer instanceof L.Marker && layer['kando_has_sampler'] === true) {
217
254
  matchingMarkers.push(layer);
218
255
  }
219
256
  });
220
257
  });
221
- matchingMarkers.forEach(marker => {
258
+ matchingMarkers.forEach(function (marker) {
222
259
  marker['kando_show_sampler'] = showSamplerIcon;
223
- const markerIconData = marker['kando_icon_data'];
224
- const markerClicked = marker.isPopupOpen() || false;
225
- const hideText = markerClicked === false;
260
+ var markerIconData = marker['kando_icon_data'];
261
+ var markerClicked = marker.isPopupOpen() || false;
262
+ var hideText = markerClicked === false;
226
263
  if (markerIconData) {
227
- const icon = (0, _PointIcon2.getPointIconByType)((markerIconData === null || markerIconData === void 0 ? void 0 : markerIconData.type) || '', (markerIconData === null || markerIconData === void 0 ? void 0 : markerIconData.title) || '', (markerIconData === null || markerIconData === void 0 ? void 0 : markerIconData.subtitle) || '', markerClicked, hideText, (markerIconData === null || markerIconData === void 0 ? void 0 : markerIconData.hasIssues) || false, showSamplerIcon, (markerIconData === null || markerIconData === void 0 ? void 0 : markerIconData.shouldInstall) || false);
264
+ var icon = (0, _PointIcon2.getPointIconByType)((markerIconData === null || markerIconData === void 0 ? void 0 : markerIconData.type) || '', (markerIconData === null || markerIconData === void 0 ? void 0 : markerIconData.title) || '', (markerIconData === null || markerIconData === void 0 ? void 0 : markerIconData.subtitle) || '', markerClicked, hideText, (markerIconData === null || markerIconData === void 0 ? void 0 : markerIconData.hasIssues) || false, showSamplerIcon, (markerIconData === null || markerIconData === void 0 ? void 0 : markerIconData.shouldInstall) || false);
228
265
  marker.setIcon(icon);
229
266
  }
230
267
  });
@@ -238,7 +275,7 @@ const Map = _ref => {
238
275
  // };
239
276
  // }, [focusedEvent, global_data.eventFilterParam]);
240
277
 
241
- (0, _react.useEffect)(() => {
278
+ (0, _react.useEffect)(function () {
242
279
  return function cleanup() {
243
280
  if (forEventsView && mapRef.current) {
244
281
  dispatch((0, _actions2.clearPoints)());
@@ -257,7 +294,7 @@ const Map = _ref => {
257
294
  mapRef.current.removeLayer(collectorsLayerGroup);
258
295
  mapRef.current.removeLayer(areasLayerGroup);
259
296
  mapRef.current.removeLayer(factoriesParentGroup);
260
- mapRef.current.eachLayer(layer => {
297
+ mapRef.current.eachLayer(function (layer) {
261
298
  if (layer instanceof L.TileLayer) {
262
299
  return;
263
300
  }
@@ -266,7 +303,7 @@ const Map = _ref => {
266
303
  }
267
304
  };
268
305
  }, [global_data.waterAuthorityId]);
269
- (0, _react.useEffect)(() => {
306
+ (0, _react.useEffect)(function () {
270
307
  if (!mapRef.current) {
271
308
  (0, _MapUtils.initializeMap)(mapZoomLevel, mapBoxStyle, _theme.leafletMap.satellite, mapRef, dispatch, _MapUtils.isValidArea, areaToCenterBy, setMapZoomLevel, forWWTPDashboard, true, global_data.waterAuthorityId);
272
309
 
@@ -280,17 +317,19 @@ const Map = _ref => {
280
317
  } else {
281
318
  setMapZoomLevel(mapRef.current.getZoom());
282
319
  if (!areaToCenterBy) {
283
- areaToCenterBy = areas.map(area => area.shape_data).flat();
320
+ areaToCenterBy = areas.map(function (area) {
321
+ return area.shape_data;
322
+ }).flat();
284
323
  }
285
324
  if (!focusedEvent) {
286
325
  (0, _MapUtils.areaFocusLogic)(mapRef, _MapUtils.isValidArea, areaToCenterBy);
287
326
  }
288
327
  }
289
328
  }, [mapRef.current, areaToCenterBy]);
290
- (0, _react.useEffect)(() => {
329
+ (0, _react.useEffect)(function () {
291
330
  var _mapRef$current;
292
- let clicked = false;
293
- (_mapRef$current = mapRef.current) === null || _mapRef$current === void 0 ? void 0 : _mapRef$current.eachLayer(layer => {
331
+ var clicked = false;
332
+ (_mapRef$current = mapRef.current) === null || _mapRef$current === void 0 ? void 0 : _mapRef$current.eachLayer(function (layer) {
294
333
  if (clicked) return;
295
334
  if ((layer === null || layer === void 0 ? void 0 : layer.kando_object_id) === selectedItem && layer.isPopupOpen() === false) {
296
335
  if (layer instanceof L.Marker) {
@@ -302,7 +341,7 @@ const Map = _ref => {
302
341
  }
303
342
  });
304
343
  }, [selectedItem]);
305
- const renderAreas = () => {
344
+ var renderAreas = function renderAreas() {
306
345
  if (!(0, _MapUtils.shouldLoadMapObjects)(global_data, mapRef, edges, points)) {
307
346
  return null;
308
347
  }
@@ -326,4 +365,4 @@ const Map = _ref => {
326
365
  }), renderAreas(), (0, _MapUtils.shoudLoadDependentMapObjects)(edges, areas, global_data, mapRef, points) && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, memoizedEvent, memoizedZoomControl(), children))));
327
366
  };
328
367
  exports.Map = Map;
329
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX3JlYWN0UmVkdXgiLCJfRXJyb3JCb3VuZGFyeSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfQXJlYVBvbHlnb25zIiwiX0VkZ2VzIiwiX1BvaW50TWFya2VycyIsIl9FdmVudCIsIl9NYXBVdGlscyIsIl90aGVtZSIsIl9MaXN0Q29udGV4dCIsIl9hY3Rpb25zIiwiX2FjdGlvbnMyIiwiX1BvaW50SWNvbjIiLCJNYXAiLCJfcmVmIiwiYXJlYXMiLCJlZGdlcyIsInBvaW50cyIsImdsb2JhbF9kYXRhIiwiYXJlYVRvQ2VudGVyQnkiLCJmb2N1c2VkRXZlbnQiLCJob3ZlcmVkRXZlbnQiLCJoaWRlRWRnZXMiLCJtYXBCb3hTdHlsZSIsImxlYWZsZXRNYXAiLCJtYXBEZWZhdWx0IiwiY2hpbGRyZW4iLCJpbmNsdWRlVW5tb25pdG9yZWRQb2ludHMiLCJpbmNsdWRlVW5tb25pdG9yZWREZXNjZW5kYW50c0ZvckVkZ2VzIiwiZm9yRXZlbnRzVmlldyIsInN0eWxlIiwiZm9yV1dUUERhc2hib2FyZCIsIm1hcCIsIm1hcFJlZiIsInVzZVJlZiIsImRpc3BhdGNoIiwidXNlRGlzcGF0Y2giLCJtYXBab29tTGV2ZWwiLCJzZXRNYXBab29tTGV2ZWwiLCJ1c2VTdGF0ZSIsInNlbGVjdGVkSXRlbSIsInVzZVNlbGVjdGVkSXRlbSIsImVkZ2VzQ2hlY2tib3giLCJzZXRFZGdlc0NoZWNrYm94Iiwib25seU1vbml0b3JlZFBvaW50cyIsInNldE9ubHlNb25pdG9yZWRQb2ludHMiLCJzaG93U2FtcGxlckljb24iLCJzZXRTaG93U2FtcGxlckljb24iLCJlZGdlc0NoZWNrYm94UmVmIiwiaG92ZXJlZEV2ZW50UHJlc2VudCIsInVzZU1lbW8iLCJ1bmRlZmluZWQiLCJmb2N1c2VkRXZlbnRQcmVzZW50IiwiZmFjdG9yaWVzUGFyZW50R3JvdXAiLCJsYXllckdyb3VwIiwidW5tb25pdG9yZWRGYWN0b3JpZXNHcm91cCIsIm1vbml0b3JlZEZhY3Rvcmllc0dyb3VwIiwidW5tb25pdG9yZWRFZGdlc0dyb3VwIiwibW9uaXRvcmVkRWRnZXNHcm91cCIsInd3dHBzTGF5ZXJHcm91cCIsImNvbGxlY3RvcnNMYXllckdyb3VwIiwiYXJlYXNMYXllckdyb3VwIiwiRmVhdHVyZUdyb3VwIiwicmVuZGVyUG9pbnRNYXJrZXJzIiwiZmlsdGVyZWRQb2ludHMiLCJwcm9wcyIsImN1cnJlbnQiLCJkZWZhdWx0IiwiY3JlYXRlRWxlbWVudCIsIlBvaW50TWFya2VycyIsIk9iamVjdCIsImFzc2lnbiIsIm1lbW9pemVkTW9uaXRvcmVkUG9pbnRzIiwibGVuZ3RoIiwibW9uaXRvcmVkUG9pbnRzIiwiZmlsdGVyUG9pbnRzIiwib25seU1vbml0b3JlZCIsInJlc3VsdCIsInJlcmVuZGVyIiwiem9vbUxldmVscyIsImZhY3Rvcmllc0dyb3VwIiwid3d0cHNHcm91cCIsImNvbGxlY3RvcnNHcm91cCIsInNob3dTYW1wbGVyIiwibWVtb2l6ZWRVbm1vbml0b3JlZFBvaW50cyIsInVubW9uaXRvcmVkUG9pbnRzIiwicmVuZGVyRWRnZXMiLCJmaWx0ZXJlZEVkZ2VzIiwibWVtb2l6ZWRFZGdlcyIsIm1vbml0b3JlZEVkZ2VzIiwiZmlsdGVyRWRnZXMiLCJoaWRlQXJyb3dzIiwiYWxsb3dVbm1vbml0b3JlZERlc2NlbmRhbnRzIiwiZ3JvdXAiLCJtZW1vaXplZFVubW9uaXRvcmVkRWRnZXMiLCJ1bm1vbml0b3JlZEVkZ2VzIiwiaGFuZGxlRWRnZXNDaGVja2JveENoYW5nZSIsImlzQ2hlY2tlZCIsImVkZ2VzWm9vbUxldmVscyIsImhhbmRsZVBvaW50c0NoZWNrYm94Q2hhbmdlIiwiem9vbSIsImdldFpvb20iLCJyZW1vdmVMYXllciIsInJlbW92ZUZyb20iLCJhZGRMYXllciIsImluY2x1ZGVzIiwiYWRkVG8iLCJoYW5kbGVQb2ludHNXaXRoU2FtcGxlckNoZWNrYm94Q2hhbmdlIiwidHJhY2tMYXllcmJveCIsInNldHVwQ2hlY2tib3hMaXN0ZW5lciIsInpvb21SdWxlc0ZvckV2ZW50c1ZpZXciLCJwYXlsb2FkIiwiRnJhZ21lbnQiLCJtZW1vaXplZFpvb21Db250cm9sIiwibWVtb2l6ZWRFdmVudCIsImZvY3VzZWQiLCJob3ZlcmVkIiwiRXZlbnQiLCJldmVudCIsImluY2x1ZGVOZXR3b3JrIiwidXNlRWZmZWN0IiwiYWxsR3JvdXBzIiwibWF0Y2hpbmdNYXJrZXJzIiwiZm9yRWFjaCIsImdldExheWVycyIsImxheWVyIiwiTWFya2VyIiwicHVzaCIsIm1hcmtlciIsIm1hcmtlckljb25EYXRhIiwibWFya2VyQ2xpY2tlZCIsImlzUG9wdXBPcGVuIiwiaGlkZVRleHQiLCJpY29uIiwiZ2V0UG9pbnRJY29uQnlUeXBlIiwidHlwZSIsInRpdGxlIiwic3VidGl0bGUiLCJoYXNJc3N1ZXMiLCJzaG91bGRJbnN0YWxsIiwic2V0SWNvbiIsImNsZWFudXAiLCJjbGVhclBvaW50cyIsImNsZWFyQXJlYXMiLCJjbGVhckxheWVycyIsImVhY2hMYXllciIsIlRpbGVMYXllciIsIndhdGVyQXV0aG9yaXR5SWQiLCJpbml0aWFsaXplTWFwIiwic2F0ZWxsaXRlIiwiaXNWYWxpZEFyZWEiLCJhcmVhIiwic2hhcGVfZGF0YSIsImZsYXQiLCJhcmVhRm9jdXNMb2dpYyIsIl9tYXBSZWYkY3VycmVudCIsImNsaWNrZWQiLCJrYW5kb19vYmplY3RfaWQiLCJmaXJlIiwiUG9seWdvbiIsInJlbmRlckFyZWFzIiwic2hvdWxkTG9hZE1hcE9iamVjdHMiLCJBcmVhUG9seWdvbnMiLCJtYXBab29tIiwiZmVhdHVyZUdyb3VwIiwiY2xhc3NOYW1lIiwiY29uY2F0Iiwic2lkZW5hdkV4cGFuZGVkIiwiaWQiLCJzaG91ZExvYWREZXBlbmRlbnRNYXBPYmplY3RzIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9NYXAudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1pZ25vcmVcbmltcG9ydCAqIGFzIEwgZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgJ3NyYy91dGlsaXRpZXMvcG9seWxpbmVkZWNvcmF0b3InO1xuaW1wb3J0ICdsZWFmbGV0Lm1hcmtlcmNsdXN0ZXInO1xuaW1wb3J0ICdsZWFmbGV0LnBhdHRlcm4nO1xuaW1wb3J0ICdsZWFmbGV0LmhlYXQnO1xuaW1wb3J0IFJlYWN0LCB7XG4gIENTU1Byb3BlcnRpZXMsXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2ggfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBJQXJlYSB9IGZyb20gJ3NyYy9zdG9yZS9hcmVhcy9tb2RlbHMvSUFyZWEnO1xuaW1wb3J0IHsgSUVkZ2UgfSBmcm9tICdzcmMvc3RvcmUvZWRnZXMvbW9kZWxzL0lFZGdlJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJ3NyYy9zdG9yZS9ldmVudHMvbW9kZWxzL0lFdmVudCc7XG5pbXBvcnQgeyBJR2xvYmFsU3RhdGUgfSBmcm9tICdzcmMvc3RvcmUvZ2xvYmFsL21vZGVscy9JR2xvYmFsU3RhdGUnO1xuaW1wb3J0IHsgSVBvaW50IH0gZnJvbSAnc3JjL3N0b3JlL3BvaW50cy9tb2RlbHMvSVBvaW50JztcbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gJ3NyYy91dGlsaXRpZXMvRXJyb3JCb3VuZGFyeSc7XG5pbXBvcnQgeyBBcmVhUG9seWdvbnMgfSBmcm9tICcuL2FyZWFzL0FyZWFQb2x5Z29ucyc7XG5pbXBvcnQgRWRnZXMgZnJvbSAnLi9lZGdlcy9FZGdlcyc7XG5pbXBvcnQgJy4vTWFwLnNjc3MnO1xuaW1wb3J0ICcuL3BvaW50cy9Qb2ludEljb24uc2Nzcyc7XG5pbXBvcnQgeyBQb2ludE1hcmtlcnMgfSBmcm9tICcuL3BvaW50cy9Qb2ludE1hcmtlcnMnO1xuaW1wb3J0IHsgRXZlbnQgfSBmcm9tICcuL2V2ZW50cy9FdmVudCc7XG5pbXBvcnQge1xuICBhcmVhRm9jdXNMb2dpYyxcbiAgZmlsdGVyRWRnZXMsXG4gIGZpbHRlclBvaW50cyxcbiAgaW5pdGlhbGl6ZU1hcCxcbiAgaXNWYWxpZEFyZWEsXG4gIHNldHVwQ2hlY2tib3hMaXN0ZW5lcixcbiAgc2hvdWRMb2FkRGVwZW5kZW50TWFwT2JqZWN0cyxcbiAgc2hvdWxkTG9hZE1hcE9iamVjdHMsXG4gIHpvb21MZXZlbHMsXG59IGZyb20gJy4vTWFwVXRpbHMnO1xuaW1wb3J0IHsgbGVhZmxldE1hcCB9IGZyb20gJy4uLy4uL3N0eWxlcy90aGVtZS90aGVtZSc7XG5pbXBvcnQgeyB1c2VTZWxlY3RlZEl0ZW0gfSBmcm9tICdzcmMvcGFnZXMvRGFzaGJvYXJkTWFwL0xpc3RDb250ZXh0JztcbmltcG9ydCB7IGNsZWFyQXJlYXMgfSBmcm9tICdzcmMvc3RvcmUvYXJlYXMvYWN0aW9ucyc7XG5pbXBvcnQgeyBjbGVhclBvaW50cyB9IGZyb20gJ3NyYy9zdG9yZS9wb2ludHMvYWN0aW9ucyc7XG5pbXBvcnQgeyBnZXRQb2ludEljb25CeVR5cGUgfSBmcm9tICcuL3BvaW50cy9Qb2ludEljb24nO1xucmVxdWlyZSgnbGVhZmxldC5tYXJrZXJjbHVzdGVyJyk7XG5cbmludGVyZmFjZSBNYXBQcm9wcyB7XG4gIGFyZWFzOiBJQXJlYVtdO1xuICBlZGdlcz86IElFZGdlW107XG4gIHBvaW50cz86IElQb2ludFtdO1xuICBnbG9iYWxfZGF0YTogSUdsb2JhbFN0YXRlO1xuICBhcmVhVG9DZW50ZXJCeT86IGFueTtcbiAgZm9jdXNlZEV2ZW50PzogSUV2ZW50IHwgbnVsbDtcbiAgaG92ZXJlZEV2ZW50PzogSUV2ZW50IHwgbnVsbDtcbiAgaGlkZUVkZ2VzPzogYm9vbGVhbjtcbiAgbWFwQm94U3R5bGU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogYW55O1xuICBzdHlsZT86IENTU1Byb3BlcnRpZXM7XG4gIGluY2x1ZGVVbm1vbml0b3JlZFBvaW50cz86IGJvb2xlYW47XG4gIGluY2x1ZGVVbm1vbml0b3JlZERlc2NlbmRhbnRzRm9yRWRnZXM/OiBib29sZWFuO1xuICBmb3JFdmVudHNWaWV3OiBib29sZWFuO1xuICBmb3JXV1RQRGFzaGJvYXJkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE1hcDogUmVhY3QuRkM8TWFwUHJvcHM+ID0gKHtcbiAgYXJlYXMsXG4gIGVkZ2VzLFxuICBwb2ludHMsXG4gIGdsb2JhbF9kYXRhLFxuICBhcmVhVG9DZW50ZXJCeSxcbiAgZm9jdXNlZEV2ZW50LFxuICBob3ZlcmVkRXZlbnQsXG4gIGhpZGVFZGdlcyA9IGZhbHNlLFxuICBtYXBCb3hTdHlsZSA9IGxlYWZsZXRNYXAubWFwRGVmYXVsdCxcbiAgY2hpbGRyZW4sXG4gIGluY2x1ZGVVbm1vbml0b3JlZFBvaW50cyA9IHRydWUsXG4gIGluY2x1ZGVVbm1vbml0b3JlZERlc2NlbmRhbnRzRm9yRWRnZXMgPSBmYWxzZSxcbiAgZm9yRXZlbnRzVmlldyA9IGZhbHNlLFxuICBzdHlsZSA9IHt9LFxuICBmb3JXV1RQRGFzaGJvYXJkID0gZmFsc2UsXG59KSA9PiB7XG4gIGNvbnN0IHsgbWFwIH0gPSBnbG9iYWxfZGF0YTtcbiAgY29uc3QgbWFwUmVmID0gdXNlUmVmPEwuTWFwIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgW21hcFpvb21MZXZlbCwgc2V0TWFwWm9vbUxldmVsXSA9IHVzZVN0YXRlKDIpO1xuICBjb25zdCB7IHNlbGVjdGVkSXRlbSB9ID0gdXNlU2VsZWN0ZWRJdGVtKCk7XG4gIGNvbnN0IFtlZGdlc0NoZWNrYm94LCBzZXRFZGdlc0NoZWNrYm94XSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbb25seU1vbml0b3JlZFBvaW50cywgc2V0T25seU1vbml0b3JlZFBvaW50c10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93U2FtcGxlckljb24sIHNldFNob3dTYW1wbGVySWNvbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGVkZ2VzQ2hlY2tib3hSZWYgPSB1c2VSZWYoZWRnZXNDaGVja2JveCk7XG5cbiAgY29uc3QgaG92ZXJlZEV2ZW50UHJlc2VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBob3ZlcmVkRXZlbnQgIT09IG51bGwgJiYgaG92ZXJlZEV2ZW50ICE9PSB1bmRlZmluZWQ7XG4gIH0sIFtob3ZlcmVkRXZlbnRdKTtcblxuICBjb25zdCBmb2N1c2VkRXZlbnRQcmVzZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGZvY3VzZWRFdmVudCAhPT0gbnVsbCAmJiBmb2N1c2VkRXZlbnQgIT09IHVuZGVmaW5lZDtcbiAgfSwgW2ZvY3VzZWRFdmVudF0pO1xuXG4gIC8vIEFkZCBwYXJlbnQgbGF5ZXIgZ3JvdXAgZm9yIGFsbCBmYWN0b3JpZXNcbiAgY29uc3QgW2ZhY3Rvcmllc1BhcmVudEdyb3VwXSA9IHVzZVN0YXRlKEwubGF5ZXJHcm91cCgpKTtcbiAgY29uc3QgW3VubW9uaXRvcmVkRmFjdG9yaWVzR3JvdXBdID0gdXNlU3RhdGUoTC5sYXllckdyb3VwKCkpO1xuICBjb25zdCBbbW9uaXRvcmVkRmFjdG9yaWVzR3JvdXBdID0gdXNlU3RhdGUoTC5sYXllckdyb3VwKCkpO1xuICBjb25zdCBbdW5tb25pdG9yZWRFZGdlc0dyb3VwXSA9IHVzZVN0YXRlKEwubGF5ZXJHcm91cCgpKTtcbiAgY29uc3QgW21vbml0b3JlZEVkZ2VzR3JvdXBdID0gdXNlU3RhdGUoTC5sYXllckdyb3VwKCkpO1xuICBjb25zdCBbd3d0cHNMYXllckdyb3VwXSA9IHVzZVN0YXRlKEwubGF5ZXJHcm91cCgpKTtcbiAgY29uc3QgW2NvbGxlY3RvcnNMYXllckdyb3VwXSA9IHVzZVN0YXRlKEwubGF5ZXJHcm91cCgpKTtcbiAgY29uc3QgW2FyZWFzTGF5ZXJHcm91cF0gPSB1c2VTdGF0ZShuZXcgTC5GZWF0dXJlR3JvdXAoKSk7XG5cbiAgY29uc3QgcmVuZGVyUG9pbnRNYXJrZXJzID0gKGZpbHRlcmVkUG9pbnRzLCBtYXBSZWYsIHByb3BzKSA9PlxuICAgIG1hcFJlZi5jdXJyZW50ICE9PSBudWxsICYmXG4gICAgcG9pbnRzICYmIChcbiAgICAgIDxQb2ludE1hcmtlcnNcbiAgICAgICAgbWFwPXttYXBSZWYuY3VycmVudH1cbiAgICAgICAgcG9pbnRzPXtmaWx0ZXJlZFBvaW50c31cbiAgICAgICAgc2hvd1NhbXBsZXJJY29uPXtzaG93U2FtcGxlckljb259XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgIC8+XG4gICAgKTtcblxuICBjb25zdCBtZW1vaXplZE1vbml0b3JlZFBvaW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghZWRnZXNDaGVja2JveCB8fCAhbWFwUmVmLmN1cnJlbnQgfHwgIXBvaW50cyB8fCBwb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBtb25pdG9yZWRQb2ludHMgPSBmaWx0ZXJQb2ludHMocG9pbnRzLCB7IG9ubHlNb25pdG9yZWQ6IHRydWUgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJQb2ludE1hcmtlcnMobW9uaXRvcmVkUG9pbnRzLCBtYXBSZWYsIHtcbiAgICAgIGluY2x1ZGVVbm1vbml0b3JlZFBvaW50czogdHJ1ZSxcbiAgICAgIHJlcmVuZGVyOiB6b29tTGV2ZWxzW21hcFpvb21MZXZlbF0sXG4gICAgICBmYWN0b3JpZXNHcm91cDogbW9uaXRvcmVkRmFjdG9yaWVzR3JvdXAsXG4gICAgICB3d3Rwc0dyb3VwOiB3d3Rwc0xheWVyR3JvdXAsXG4gICAgICBjb2xsZWN0b3JzR3JvdXA6IGNvbGxlY3RvcnNMYXllckdyb3VwLFxuICAgICAgZm9yRXZlbnRzVmlldyxcbiAgICAgIHNob3dTYW1wbGVyOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFttYXBSZWYuY3VycmVudCwgcG9pbnRzLCBtYXBab29tTGV2ZWxdKTtcblxuICBjb25zdCBtZW1vaXplZFVubW9uaXRvcmVkUG9pbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFlZGdlc0NoZWNrYm94IHx8ICFtYXBSZWYuY3VycmVudCB8fCAhcG9pbnRzIHx8IHBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHVubW9uaXRvcmVkUG9pbnRzID0gZmlsdGVyUG9pbnRzKHBvaW50cywgeyBvbmx5TW9uaXRvcmVkOiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHJlbmRlclBvaW50TWFya2Vycyh1bm1vbml0b3JlZFBvaW50cywgbWFwUmVmLCB7XG4gICAgICBpbmNsdWRlVW5tb25pdG9yZWRQb2ludHM6IHRydWUsXG4gICAgICByZXJlbmRlcjogem9vbUxldmVsc1ttYXBab29tTGV2ZWxdLFxuICAgICAgZmFjdG9yaWVzR3JvdXA6IHVubW9uaXRvcmVkRmFjdG9yaWVzR3JvdXAsXG4gICAgICB3d3Rwc0dyb3VwOiB3d3Rwc0xheWVyR3JvdXAsXG4gICAgICBjb2xsZWN0b3JzR3JvdXA6IGNvbGxlY3RvcnNMYXllckdyb3VwLFxuICAgICAgZm9yRXZlbnRzVmlldyxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFttYXBSZWYuY3VycmVudCwgcG9pbnRzLCBtYXBab29tTGV2ZWxdKTtcblxuICBjb25zdCByZW5kZXJFZGdlcyA9IChmaWx0ZXJlZEVkZ2VzLCBtYXBSZWYsIGVkZ2VzQ2hlY2tib3gsIHByb3BzKSA9PlxuICAgIG1hcFJlZi5jdXJyZW50ICE9PSBudWxsICYmXG4gICAgZWRnZXNDaGVja2JveCAmJiAoXG4gICAgICA8RWRnZXMgZWRnZXM9e2ZpbHRlcmVkRWRnZXN9IG1hcD17bWFwUmVmLmN1cnJlbnR9IHsuLi5wcm9wc30gLz5cbiAgICApO1xuXG4gIGNvbnN0IG1lbW9pemVkRWRnZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBtb25pdG9yZWRFZGdlcyA9IGZpbHRlckVkZ2VzKGVkZ2VzLCBwb2ludHMsIHRydWUpO1xuXG4gICAgcmV0dXJuIHJlbmRlckVkZ2VzKG1vbml0b3JlZEVkZ2VzLCBtYXBSZWYsIGVkZ2VzQ2hlY2tib3gsIHtcbiAgICAgIEwsXG4gICAgICBwb2ludHMsXG4gICAgICBoaWRlRWRnZXM6IGZhbHNlLFxuICAgICAgaGlkZUFycm93czogdHJ1ZSxcbiAgICAgIGFsbG93VW5tb25pdG9yZWREZXNjZW5kYW50czogaW5jbHVkZVVubW9uaXRvcmVkRGVzY2VuZGFudHNGb3JFZGdlcyxcbiAgICAgIGdyb3VwOiBtb25pdG9yZWRFZGdlc0dyb3VwLFxuICAgIH0pO1xuICB9LCBbcG9pbnRzLCBlZGdlc0NoZWNrYm94LCBtYXBab29tTGV2ZWxdKTtcblxuICBjb25zdCBtZW1vaXplZFVubW9uaXRvcmVkRWRnZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB1bm1vbml0b3JlZEVkZ2VzID0gZmlsdGVyRWRnZXMoZWRnZXMsIHBvaW50cywgZmFsc2UpO1xuXG4gICAgcmV0dXJuIHJlbmRlckVkZ2VzKHVubW9uaXRvcmVkRWRnZXMsIG1hcFJlZiwgZWRnZXNDaGVja2JveCwge1xuICAgICAgTCxcbiAgICAgIHBvaW50cyxcbiAgICAgIGhpZGVFZGdlczogZmFsc2UsXG4gICAgICBoaWRlQXJyb3dzOiB0cnVlLFxuICAgICAgYWxsb3dVbm1vbml0b3JlZERlc2NlbmRhbnRzOiBpbmNsdWRlVW5tb25pdG9yZWREZXNjZW5kYW50c0ZvckVkZ2VzLFxuICAgICAgZ3JvdXA6IHVubW9uaXRvcmVkRWRnZXNHcm91cCxcbiAgICB9KTtcbiAgfSwgW3BvaW50cywgZWRnZXNDaGVja2JveCwgbWFwWm9vbUxldmVsXSk7XG5cbiAgY29uc3QgaGFuZGxlRWRnZXNDaGVja2JveENoYW5nZSA9IChpc0NoZWNrZWQpID0+IHtcbiAgICBzZXRFZGdlc0NoZWNrYm94KGlzQ2hlY2tlZCk7XG4gIH07XG5cbiAgLy8gVGhpcyB2YXJpYWJsZSBzdG9yZXMgdGhlIHpvb20gbGV2ZWxzIHRoZSBlZGdlcyBhcmUgZGlzcGxheWVkXG4gIC8vIEl0IGlzIHVzZWQgaW4gdHdvIHBsYWNlcyBpbiB0aGUgY29kZSwgc28gaXQgaXMgYmV0dGVyIHRvIHN0b3JlIGl0IGluIG9uZSBwbGFjZVxuICBjb25zdCBlZGdlc1pvb21MZXZlbHMgPSBbJ1NtYWxsJywgJ01lZGl1bScsICdNTGFyZ2UnLCAnTGFyZ2UnXTtcblxuICBjb25zdCBoYW5kbGVQb2ludHNDaGVja2JveENoYW5nZSA9IChpc0NoZWNrZWQpID0+IHtcbiAgICBzZXRPbmx5TW9uaXRvcmVkUG9pbnRzKGlzQ2hlY2tlZCk7XG4gICAgaWYgKG1hcFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBzZXRPbmx5TW9uaXRvcmVkUG9pbnRzKGlzQ2hlY2tlZCk7XG4gICAgICBsZXQgem9vbSA9IHpvb21MZXZlbHNbbWFwUmVmLmN1cnJlbnQuZ2V0Wm9vbSgpXTtcblxuICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAvLyBIaWRlIHVubW9uaXRvcmVkIHBvaW50cyB3aGVuIFwic2hvdyBvbmx5IG1vbml0b3JlZFwiIGlzIGNoZWNrZWRcbiAgICAgICAgZmFjdG9yaWVzUGFyZW50R3JvdXAucmVtb3ZlTGF5ZXIodW5tb25pdG9yZWRGYWN0b3JpZXNHcm91cCk7XG4gICAgICAgIHVubW9uaXRvcmVkRWRnZXNHcm91cC5yZW1vdmVGcm9tKG1hcFJlZi5jdXJyZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNob3cgYWxsIHBvaW50cyB3aGVuIFwic2hvdyBvbmx5IG1vbml0b3JlZFwiIGlzIHVuY2hlY2tlZFxuICAgICAgICBmYWN0b3JpZXNQYXJlbnRHcm91cC5hZGRMYXllcih1bm1vbml0b3JlZEZhY3Rvcmllc0dyb3VwKTtcblxuICAgICAgICAvLyBTaG93IHVubW9uaXRvcmVkIGVkZ2VzIGlmIGF0IGFwcHJvcHJpYXRlIHpvb20gbGV2ZWxcbiAgICAgICAgaWYgKGVkZ2VzQ2hlY2tib3hSZWYuY3VycmVudCAmJiBlZGdlc1pvb21MZXZlbHMuaW5jbHVkZXMoem9vbSkpIHtcbiAgICAgICAgICB1bm1vbml0b3JlZEVkZ2VzR3JvdXAuYWRkVG8obWFwUmVmLmN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVBvaW50c1dpdGhTYW1wbGVyQ2hlY2tib3hDaGFuZ2UgPSAoaXNDaGVja2VkKSA9PiB7XG4gICAgc2V0U2hvd1NhbXBsZXJJY29uKGlzQ2hlY2tlZCk7XG4gIH07XG5cbiAgY29uc3QgdHJhY2tMYXllcmJveCA9ICgpID0+IHtcbiAgICBzZXR1cENoZWNrYm94TGlzdGVuZXIoJyNlZGdlcy1jaGVja2JveCcsIGhhbmRsZUVkZ2VzQ2hlY2tib3hDaGFuZ2UpO1xuICAgIHNldHVwQ2hlY2tib3hMaXN0ZW5lcihcbiAgICAgICcjbW9uaXRvcmVkLXBvaW50cy1jaGVja2JveCcsXG4gICAgICBoYW5kbGVQb2ludHNDaGVja2JveENoYW5nZSxcbiAgICApO1xuICAgIHNldHVwQ2hlY2tib3hMaXN0ZW5lcihcbiAgICAgICcjbW9uaXRvcmVkLXBvaW50cy13aXRoLXNhbXBsZXItY2hlY2tib3gnLFxuICAgICAgaGFuZGxlUG9pbnRzV2l0aFNhbXBsZXJDaGVja2JveENoYW5nZSxcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHpvb21SdWxlc0ZvckV2ZW50c1ZpZXcgPSAoKSA9PiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IChcbiAgICAgIDw+XG4gICAgICAgIHtlZGdlc0NoZWNrYm94ICYmIG1lbW9pemVkRWRnZXN9XG4gICAgICAgIHtlZGdlc0NoZWNrYm94ICYmICFvbmx5TW9uaXRvcmVkUG9pbnRzICYmIG1lbW9pemVkVW5tb25pdG9yZWRFZGdlc31cbiAgICAgICAgeyFvbmx5TW9uaXRvcmVkUG9pbnRzICYmIG1lbW9pemVkVW5tb25pdG9yZWRQb2ludHN9XG4gICAgICAgIHttZW1vaXplZE1vbml0b3JlZFBvaW50c31cbiAgICAgIDwvPlxuICAgICk7XG5cbiAgICByZXR1cm4gcGF5bG9hZDtcbiAgfTtcblxuICBjb25zdCBtZW1vaXplZFpvb21Db250cm9sID0gKCkgPT4ge1xuICAgIGxldCBwYXlsb2FkID0gPD48Lz47XG4gICAgaWYgKGVkZ2VzWm9vbUxldmVscy5pbmNsdWRlcyh6b29tTGV2ZWxzW21hcFpvb21MZXZlbF0pKSB7XG4gICAgICBwYXlsb2FkID0gem9vbVJ1bGVzRm9yRXZlbnRzVmlldygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXlsb2FkID0gKFxuICAgICAgICA8PlxuICAgICAgICAgIHshb25seU1vbml0b3JlZFBvaW50cyAmJiBtZW1vaXplZFVubW9uaXRvcmVkUG9pbnRzfVxuICAgICAgICAgIHttZW1vaXplZE1vbml0b3JlZFBvaW50c31cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9O1xuXG4gIGNvbnN0IG1lbW9pemVkRXZlbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoZm9jdXNlZEV2ZW50UHJlc2VudCkge1xuICAgICAgZm9jdXNlZEV2ZW50IS5mb2N1c2VkID0gZm9jdXNlZEV2ZW50UHJlc2VudDtcbiAgICAgIGZvY3VzZWRFdmVudCEuaG92ZXJlZCA9ICFmb2N1c2VkRXZlbnRQcmVzZW50O1xuICAgIH1cblxuICAgIGlmIChob3ZlcmVkRXZlbnRQcmVzZW50KSB7XG4gICAgICBob3ZlcmVkRXZlbnQhLmhvdmVyZWQgPSBob3ZlcmVkRXZlbnRQcmVzZW50O1xuICAgICAgaG92ZXJlZEV2ZW50IS5mb2N1c2VkID0gIWhvdmVyZWRFdmVudFByZXNlbnQ7XG4gICAgfVxuXG4gICAgaWYgKCFob3ZlcmVkRXZlbnRQcmVzZW50ICYmICFmb2N1c2VkRXZlbnRQcmVzZW50KSByZXR1cm4gPD48Lz47XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEV2ZW50XG4gICAgICAgIGV2ZW50PXtmb2N1c2VkRXZlbnQhIHx8IGhvdmVyZWRFdmVudCF9XG4gICAgICAgIG1hcD17bWFwfVxuICAgICAgICBlZGdlcz17ZWRnZXMhfVxuICAgICAgICBwb2ludHM9e3BvaW50cyF9XG4gICAgICAgIGluY2x1ZGVOZXR3b3JrPXshaG92ZXJlZEV2ZW50UHJlc2VudH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfSwgW2ZvY3VzZWRFdmVudFByZXNlbnQsIGhvdmVyZWRFdmVudFByZXNlbnQsIGVkZ2VzLCBwb2ludHNdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGVkZ2VzQ2hlY2tib3hSZWYuY3VycmVudCA9IGVkZ2VzQ2hlY2tib3g7XG4gIH0sIFtlZGdlc0NoZWNrYm94XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobWFwUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IGFsbEdyb3VwcyA9IFtcbiAgICAgICAgbW9uaXRvcmVkRmFjdG9yaWVzR3JvdXAsXG4gICAgICAgIHVubW9uaXRvcmVkRmFjdG9yaWVzR3JvdXAsXG4gICAgICAgIHd3dHBzTGF5ZXJHcm91cCxcbiAgICAgICAgY29sbGVjdG9yc0xheWVyR3JvdXAsXG4gICAgICBdO1xuXG4gICAgICBsZXQgbWF0Y2hpbmdNYXJrZXJzID0gW107XG5cbiAgICAgIGFsbEdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICBncm91cC5nZXRMYXllcnMoKS5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxheWVyIGluc3RhbmNlb2YgTC5NYXJrZXIgJiZcbiAgICAgICAgICAgIGxheWVyWydrYW5kb19oYXNfc2FtcGxlciddID09PSB0cnVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBtYXRjaGluZ01hcmtlcnMucHVzaChsYXllcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBtYXRjaGluZ01hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiB7XG4gICAgICAgIG1hcmtlclsna2FuZG9fc2hvd19zYW1wbGVyJ10gPSBzaG93U2FtcGxlckljb247XG5cbiAgICAgICAgY29uc3QgbWFya2VySWNvbkRhdGEgPSBtYXJrZXJbJ2thbmRvX2ljb25fZGF0YSddO1xuICAgICAgICBjb25zdCBtYXJrZXJDbGlja2VkID0gbWFya2VyLmlzUG9wdXBPcGVuKCkgfHwgZmFsc2U7XG4gICAgICAgIGNvbnN0IGhpZGVUZXh0ID0gbWFya2VyQ2xpY2tlZCA9PT0gZmFsc2U7XG5cbiAgICAgICAgaWYgKG1hcmtlckljb25EYXRhKSB7XG4gICAgICAgICAgY29uc3QgaWNvbiA9IGdldFBvaW50SWNvbkJ5VHlwZShcbiAgICAgICAgICAgIG1hcmtlckljb25EYXRhPy50eXBlIHx8ICcnLFxuICAgICAgICAgICAgbWFya2VySWNvbkRhdGE/LnRpdGxlIHx8ICcnLFxuICAgICAgICAgICAgbWFya2VySWNvbkRhdGE/LnN1YnRpdGxlIHx8ICcnLFxuICAgICAgICAgICAgbWFya2VyQ2xpY2tlZCxcbiAgICAgICAgICAgIGhpZGVUZXh0LFxuICAgICAgICAgICAgbWFya2VySWNvbkRhdGE/Lmhhc0lzc3VlcyB8fCBmYWxzZSxcbiAgICAgICAgICAgIHNob3dTYW1wbGVySWNvbixcbiAgICAgICAgICAgIG1hcmtlckljb25EYXRhPy5zaG91bGRJbnN0YWxsIHx8IGZhbHNlLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBtYXJrZXIuc2V0SWNvbihpY29uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbc2hvd1NhbXBsZXJJY29uXSk7XG5cbiAgLy8gdXNlRWZmZWN0KCgpID0+IHtcbiAgLy8gICByZXR1cm4gZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgLy8gICAgIGNvbGxlY3RvcnNMYXllckdyb3VwLmNsZWFyTGF5ZXJzKCk7XG4gIC8vICAgICBtYXBSZWYuY3VycmVudD8ucmVtb3ZlTGF5ZXIoY29sbGVjdG9yc0xheWVyR3JvdXApO1xuICAvLyAgIH07XG4gIC8vIH0sIFtmb2N1c2VkRXZlbnQsIGdsb2JhbF9kYXRhLmV2ZW50RmlsdGVyUGFyYW1dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgaWYgKGZvckV2ZW50c1ZpZXcgJiYgbWFwUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgZGlzcGF0Y2goY2xlYXJQb2ludHMoKSk7XG4gICAgICAgIGRpc3BhdGNoKGNsZWFyQXJlYXMoKSk7XG4gICAgICAgIHd3dHBzTGF5ZXJHcm91cC5jbGVhckxheWVycygpO1xuICAgICAgICBhcmVhc0xheWVyR3JvdXAuY2xlYXJMYXllcnMoKTtcbiAgICAgICAgdW5tb25pdG9yZWRGYWN0b3JpZXNHcm91cC5jbGVhckxheWVycygpO1xuICAgICAgICBtb25pdG9yZWRGYWN0b3JpZXNHcm91cC5jbGVhckxheWVycygpO1xuICAgICAgICBmYWN0b3JpZXNQYXJlbnRHcm91cC5jbGVhckxheWVycygpO1xuICAgICAgICBtb25pdG9yZWRFZGdlc0dyb3VwLmNsZWFyTGF5ZXJzKCk7XG4gICAgICAgIGNvbGxlY3RvcnNMYXllckdyb3VwLmNsZWFyTGF5ZXJzKCk7XG4gICAgICAgIHVubW9uaXRvcmVkRWRnZXNHcm91cC5jbGVhckxheWVycygpO1xuICAgICAgICBtYXBSZWYuY3VycmVudC5yZW1vdmVMYXllcih1bm1vbml0b3JlZEVkZ2VzR3JvdXApO1xuICAgICAgICBtYXBSZWYuY3VycmVudC5yZW1vdmVMYXllcihtb25pdG9yZWRFZGdlc0dyb3VwKTtcbiAgICAgICAgbWFwUmVmLmN1cnJlbnQucmVtb3ZlTGF5ZXIod3d0cHNMYXllckdyb3VwKTtcbiAgICAgICAgbWFwUmVmLmN1cnJlbnQucmVtb3ZlTGF5ZXIoY29sbGVjdG9yc0xheWVyR3JvdXApO1xuICAgICAgICBtYXBSZWYuY3VycmVudC5yZW1vdmVMYXllcihhcmVhc0xheWVyR3JvdXApO1xuICAgICAgICBtYXBSZWYuY3VycmVudC5yZW1vdmVMYXllcihmYWN0b3JpZXNQYXJlbnRHcm91cCk7XG5cbiAgICAgICAgbWFwUmVmLmN1cnJlbnQuZWFjaExheWVyKChsYXllcikgPT4ge1xuICAgICAgICAgIGlmIChsYXllciBpbnN0YW5jZW9mIEwuVGlsZUxheWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG1hcFJlZi5jdXJyZW50LnJlbW92ZUxheWVyKGxheWVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2dsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWFwUmVmLmN1cnJlbnQpIHtcbiAgICAgIGluaXRpYWxpemVNYXAoXG4gICAgICAgIG1hcFpvb21MZXZlbCxcbiAgICAgICAgbWFwQm94U3R5bGUsXG4gICAgICAgIGxlYWZsZXRNYXAuc2F0ZWxsaXRlLFxuICAgICAgICBtYXBSZWYsXG4gICAgICAgIGRpc3BhdGNoLFxuICAgICAgICBpc1ZhbGlkQXJlYSxcbiAgICAgICAgYXJlYVRvQ2VudGVyQnksXG4gICAgICAgIHNldE1hcFpvb21MZXZlbCxcbiAgICAgICAgZm9yV1dUUERhc2hib2FyZCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgZ2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZCxcbiAgICAgICk7XG5cbiAgICAgIC8vIEluaXRpYWxpemUgcGFyZW50IGZhY3RvcnkgZ3JvdXBcbiAgICAgIGlmIChtYXBSZWYuY3VycmVudCkge1xuICAgICAgICBmYWN0b3JpZXNQYXJlbnRHcm91cC5hZGRUbyhtYXBSZWYuY3VycmVudCk7XG4gICAgICAgIGZhY3Rvcmllc1BhcmVudEdyb3VwLmFkZExheWVyKG1vbml0b3JlZEZhY3Rvcmllc0dyb3VwKTtcbiAgICAgICAgZmFjdG9yaWVzUGFyZW50R3JvdXAuYWRkTGF5ZXIodW5tb25pdG9yZWRGYWN0b3JpZXNHcm91cCk7XG4gICAgICB9XG5cbiAgICAgIHRyYWNrTGF5ZXJib3goKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0TWFwWm9vbUxldmVsKG1hcFJlZi5jdXJyZW50LmdldFpvb20oKSk7XG4gICAgICBpZiAoIWFyZWFUb0NlbnRlckJ5KSB7XG4gICAgICAgIGFyZWFUb0NlbnRlckJ5ID0gYXJlYXMubWFwKChhcmVhKSA9PiBhcmVhLnNoYXBlX2RhdGEpLmZsYXQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFmb2N1c2VkRXZlbnQpIHtcbiAgICAgICAgYXJlYUZvY3VzTG9naWMobWFwUmVmLCBpc1ZhbGlkQXJlYSwgYXJlYVRvQ2VudGVyQnkpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW21hcFJlZi5jdXJyZW50LCBhcmVhVG9DZW50ZXJCeV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNsaWNrZWQgPSBmYWxzZTtcblxuICAgIG1hcFJlZi5jdXJyZW50Py5lYWNoTGF5ZXIoKGxheWVyKSA9PiB7XG4gICAgICBpZiAoY2xpY2tlZCkgcmV0dXJuO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGxheWVyPy5rYW5kb19vYmplY3RfaWQgPT09IHNlbGVjdGVkSXRlbSAmJlxuICAgICAgICBsYXllci5pc1BvcHVwT3BlbigpID09PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGlmIChsYXllciBpbnN0YW5jZW9mIEwuTWFya2VyKSB7XG4gICAgICAgICAgbGF5ZXIuZmlyZSgnY2xpY2snKTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXllciBpbnN0YW5jZW9mIEwuUG9seWdvbikge1xuICAgICAgICAgIGxheWVyLmZpcmUoJ2NsaWNrLWV2ZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY2xpY2tlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtzZWxlY3RlZEl0ZW1dKTtcblxuICBjb25zdCByZW5kZXJBcmVhcyA9ICgpID0+IHtcbiAgICBpZiAoIXNob3VsZExvYWRNYXBPYmplY3RzKGdsb2JhbF9kYXRhLCBtYXBSZWYsIGVkZ2VzLCBwb2ludHMpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEFyZWFQb2x5Z29uc1xuICAgICAgICBhcmVhcz17YXJlYXN9XG4gICAgICAgIG1hcD17bWFwUmVmLmN1cnJlbnR9XG4gICAgICAgIEw9e0x9XG4gICAgICAgIGFyZWFUb0NlbnRlckJ5PXthcmVhVG9DZW50ZXJCeX1cbiAgICAgICAgbWFwWm9vbT17bWFwWm9vbUxldmVsfVxuICAgICAgICBnbG9iYWxfZGF0YT17Z2xvYmFsX2RhdGF9XG4gICAgICAgIGZlYXR1cmVHcm91cD17YXJlYXNMYXllckdyb3VwfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJrZC1tYXAtY29udGFpbmVyXCIgc3R5bGU9e3N0eWxlfT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtgIG1hcC1jb250YWluZXIgJHtcbiAgICAgICAgICBnbG9iYWxfZGF0YS5zaWRlbmF2RXhwYW5kZWQgPyAnJyA6ICdtYXAtY29udGFpbmVyLS1zaWRlbmF2LWNvbGxhcHNlZCdcbiAgICAgICAgfWB9XG4gICAgICA+XG4gICAgICAgIDxFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgIDxkaXYgaWQ9XCJtYXBcIj48L2Rpdj5cbiAgICAgICAgICB7cmVuZGVyQXJlYXMoKX1cbiAgICAgICAgICB7c2hvdWRMb2FkRGVwZW5kZW50TWFwT2JqZWN0cyhcbiAgICAgICAgICAgIGVkZ2VzLFxuICAgICAgICAgICAgYXJlYXMsXG4gICAgICAgICAgICBnbG9iYWxfZGF0YSxcbiAgICAgICAgICAgIG1hcFJlZixcbiAgICAgICAgICAgIHBvaW50cyxcbiAgICAgICAgICApICYmIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHttZW1vaXplZEV2ZW50fVxuICAgICAgICAgICAgICB7bWVtb2l6ZWRab29tQ29udHJvbCgpfVxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8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
368
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX3JlYWN0UmVkdXgiLCJfRXJyb3JCb3VuZGFyeSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfQXJlYVBvbHlnb25zIiwiX0VkZ2VzIiwiX1BvaW50TWFya2VycyIsIl9FdmVudCIsIl9NYXBVdGlscyIsIl90aGVtZSIsIl9MaXN0Q29udGV4dCIsIl9hY3Rpb25zIiwiX2FjdGlvbnMyIiwiX1BvaW50SWNvbjIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIk1hcCIsIl9yZWYiLCJhcmVhcyIsImVkZ2VzIiwicG9pbnRzIiwiZ2xvYmFsX2RhdGEiLCJhcmVhVG9DZW50ZXJCeSIsImZvY3VzZWRFdmVudCIsImhvdmVyZWRFdmVudCIsIl9yZWYkaGlkZUVkZ2VzIiwiaGlkZUVkZ2VzIiwiX3JlZiRtYXBCb3hTdHlsZSIsIm1hcEJveFN0eWxlIiwibGVhZmxldE1hcCIsIm1hcERlZmF1bHQiLCJjaGlsZHJlbiIsIl9yZWYkaW5jbHVkZVVubW9uaXRvciIsImluY2x1ZGVVbm1vbml0b3JlZFBvaW50cyIsIl9yZWYkaW5jbHVkZVVubW9uaXRvcjIiLCJpbmNsdWRlVW5tb25pdG9yZWREZXNjZW5kYW50c0ZvckVkZ2VzIiwiX3JlZiRmb3JFdmVudHNWaWV3IiwiZm9yRXZlbnRzVmlldyIsIl9yZWYkc3R5bGUiLCJzdHlsZSIsIl9yZWYkZm9yV1dUUERhc2hib2FyZCIsImZvcldXVFBEYXNoYm9hcmQiLCJtYXAiLCJtYXBSZWYiLCJ1c2VSZWYiLCJkaXNwYXRjaCIsInVzZURpc3BhdGNoIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwibWFwWm9vbUxldmVsIiwic2V0TWFwWm9vbUxldmVsIiwiX3VzZVNlbGVjdGVkSXRlbSIsInVzZVNlbGVjdGVkSXRlbSIsInNlbGVjdGVkSXRlbSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZWRnZXNDaGVja2JveCIsInNldEVkZ2VzQ2hlY2tib3giLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsIm9ubHlNb25pdG9yZWRQb2ludHMiLCJzZXRPbmx5TW9uaXRvcmVkUG9pbnRzIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93U2FtcGxlckljb24iLCJzZXRTaG93U2FtcGxlckljb24iLCJlZGdlc0NoZWNrYm94UmVmIiwiaG92ZXJlZEV2ZW50UHJlc2VudCIsInVzZU1lbW8iLCJ1bmRlZmluZWQiLCJmb2N1c2VkRXZlbnRQcmVzZW50IiwiX3VzZVN0YXRlOSIsImxheWVyR3JvdXAiLCJfdXNlU3RhdGUxMCIsImZhY3Rvcmllc1BhcmVudEdyb3VwIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsInVubW9uaXRvcmVkRmFjdG9yaWVzR3JvdXAiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwibW9uaXRvcmVkRmFjdG9yaWVzR3JvdXAiLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2IiwidW5tb25pdG9yZWRFZGdlc0dyb3VwIiwiX3VzZVN0YXRlMTciLCJfdXNlU3RhdGUxOCIsIm1vbml0b3JlZEVkZ2VzR3JvdXAiLCJfdXNlU3RhdGUxOSIsIl91c2VTdGF0ZTIwIiwid3d0cHNMYXllckdyb3VwIiwiX3VzZVN0YXRlMjEiLCJfdXNlU3RhdGUyMiIsImNvbGxlY3RvcnNMYXllckdyb3VwIiwiX3VzZVN0YXRlMjMiLCJGZWF0dXJlR3JvdXAiLCJfdXNlU3RhdGUyNCIsImFyZWFzTGF5ZXJHcm91cCIsInJlbmRlclBvaW50TWFya2VycyIsImZpbHRlcmVkUG9pbnRzIiwicHJvcHMiLCJjdXJyZW50IiwiY3JlYXRlRWxlbWVudCIsIlBvaW50TWFya2VycyIsImFzc2lnbiIsIm1lbW9pemVkTW9uaXRvcmVkUG9pbnRzIiwibGVuZ3RoIiwibW9uaXRvcmVkUG9pbnRzIiwiZmlsdGVyUG9pbnRzIiwib25seU1vbml0b3JlZCIsInJlc3VsdCIsInJlcmVuZGVyIiwiem9vbUxldmVscyIsImZhY3Rvcmllc0dyb3VwIiwid3d0cHNHcm91cCIsImNvbGxlY3RvcnNHcm91cCIsInNob3dTYW1wbGVyIiwibWVtb2l6ZWRVbm1vbml0b3JlZFBvaW50cyIsInVubW9uaXRvcmVkUG9pbnRzIiwicmVuZGVyRWRnZXMiLCJmaWx0ZXJlZEVkZ2VzIiwibWVtb2l6ZWRFZGdlcyIsIm1vbml0b3JlZEVkZ2VzIiwiZmlsdGVyRWRnZXMiLCJoaWRlQXJyb3dzIiwiYWxsb3dVbm1vbml0b3JlZERlc2NlbmRhbnRzIiwiZ3JvdXAiLCJtZW1vaXplZFVubW9uaXRvcmVkRWRnZXMiLCJ1bm1vbml0b3JlZEVkZ2VzIiwiaGFuZGxlRWRnZXNDaGVja2JveENoYW5nZSIsImlzQ2hlY2tlZCIsImVkZ2VzWm9vbUxldmVscyIsImhhbmRsZVBvaW50c0NoZWNrYm94Q2hhbmdlIiwiem9vbSIsImdldFpvb20iLCJyZW1vdmVMYXllciIsInJlbW92ZUZyb20iLCJhZGRMYXllciIsImluY2x1ZGVzIiwiYWRkVG8iLCJoYW5kbGVQb2ludHNXaXRoU2FtcGxlckNoZWNrYm94Q2hhbmdlIiwidHJhY2tMYXllcmJveCIsInNldHVwQ2hlY2tib3hMaXN0ZW5lciIsInpvb21SdWxlc0ZvckV2ZW50c1ZpZXciLCJwYXlsb2FkIiwiRnJhZ21lbnQiLCJtZW1vaXplZFpvb21Db250cm9sIiwibWVtb2l6ZWRFdmVudCIsImZvY3VzZWQiLCJob3ZlcmVkIiwiRXZlbnQiLCJldmVudCIsImluY2x1ZGVOZXR3b3JrIiwidXNlRWZmZWN0IiwiYWxsR3JvdXBzIiwibWF0Y2hpbmdNYXJrZXJzIiwiZm9yRWFjaCIsImdldExheWVycyIsImxheWVyIiwiTWFya2VyIiwicHVzaCIsIm1hcmtlciIsIm1hcmtlckljb25EYXRhIiwibWFya2VyQ2xpY2tlZCIsImlzUG9wdXBPcGVuIiwiaGlkZVRleHQiLCJpY29uIiwiZ2V0UG9pbnRJY29uQnlUeXBlIiwidHlwZSIsInRpdGxlIiwic3VidGl0bGUiLCJoYXNJc3N1ZXMiLCJzaG91bGRJbnN0YWxsIiwic2V0SWNvbiIsImNsZWFudXAiLCJjbGVhclBvaW50cyIsImNsZWFyQXJlYXMiLCJjbGVhckxheWVycyIsImVhY2hMYXllciIsIlRpbGVMYXllciIsIndhdGVyQXV0aG9yaXR5SWQiLCJpbml0aWFsaXplTWFwIiwic2F0ZWxsaXRlIiwiaXNWYWxpZEFyZWEiLCJhcmVhIiwic2hhcGVfZGF0YSIsImZsYXQiLCJhcmVhRm9jdXNMb2dpYyIsIl9tYXBSZWYkY3VycmVudCIsImNsaWNrZWQiLCJrYW5kb19vYmplY3RfaWQiLCJmaXJlIiwiUG9seWdvbiIsInJlbmRlckFyZWFzIiwic2hvdWxkTG9hZE1hcE9iamVjdHMiLCJBcmVhUG9seWdvbnMiLCJtYXBab29tIiwiZmVhdHVyZUdyb3VwIiwiY2xhc3NOYW1lIiwiY29uY2F0Iiwic2lkZW5hdkV4cGFuZGVkIiwiaWQiLCJzaG91ZExvYWREZXBlbmRlbnRNYXBPYmplY3RzIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9NYXAudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1pZ25vcmVcbmltcG9ydCAqIGFzIEwgZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgJ3NyYy91dGlsaXRpZXMvcG9seWxpbmVkZWNvcmF0b3InO1xuaW1wb3J0ICdsZWFmbGV0Lm1hcmtlcmNsdXN0ZXInO1xuaW1wb3J0ICdsZWFmbGV0LnBhdHRlcm4nO1xuaW1wb3J0ICdsZWFmbGV0LmhlYXQnO1xuaW1wb3J0IFJlYWN0LCB7XG4gIENTU1Byb3BlcnRpZXMsXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2ggfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBJQXJlYSB9IGZyb20gJ3NyYy9zdG9yZS9hcmVhcy9tb2RlbHMvSUFyZWEnO1xuaW1wb3J0IHsgSUVkZ2UgfSBmcm9tICdzcmMvc3RvcmUvZWRnZXMvbW9kZWxzL0lFZGdlJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJ3NyYy9zdG9yZS9ldmVudHMvbW9kZWxzL0lFdmVudCc7XG5pbXBvcnQgeyBJR2xvYmFsU3RhdGUgfSBmcm9tICdzcmMvc3RvcmUvZ2xvYmFsL21vZGVscy9JR2xvYmFsU3RhdGUnO1xuaW1wb3J0IHsgSVBvaW50IH0gZnJvbSAnc3JjL3N0b3JlL3BvaW50cy9tb2RlbHMvSVBvaW50JztcbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gJ3NyYy91dGlsaXRpZXMvRXJyb3JCb3VuZGFyeSc7XG5pbXBvcnQgeyBBcmVhUG9seWdvbnMgfSBmcm9tICcuL2FyZWFzL0FyZWFQb2x5Z29ucyc7XG5pbXBvcnQgRWRnZXMgZnJvbSAnLi9lZGdlcy9FZGdlcyc7XG5pbXBvcnQgJy4vTWFwLnNjc3MnO1xuaW1wb3J0ICcuL3BvaW50cy9Qb2ludEljb24uc2Nzcyc7XG5pbXBvcnQgeyBQb2ludE1hcmtlcnMgfSBmcm9tICcuL3BvaW50cy9Qb2ludE1hcmtlcnMnO1xuaW1wb3J0IHsgRXZlbnQgfSBmcm9tICcuL2V2ZW50cy9FdmVudCc7XG5pbXBvcnQge1xuICBhcmVhRm9jdXNMb2dpYyxcbiAgZmlsdGVyRWRnZXMsXG4gIGZpbHRlclBvaW50cyxcbiAgaW5pdGlhbGl6ZU1hcCxcbiAgaXNWYWxpZEFyZWEsXG4gIHNldHVwQ2hlY2tib3hMaXN0ZW5lcixcbiAgc2hvdWRMb2FkRGVwZW5kZW50TWFwT2JqZWN0cyxcbiAgc2hvdWxkTG9hZE1hcE9iamVjdHMsXG4gIHpvb21MZXZlbHMsXG59IGZyb20gJy4vTWFwVXRpbHMnO1xuaW1wb3J0IHsgbGVhZmxldE1hcCB9IGZyb20gJy4uLy4uL3N0eWxlcy90aGVtZS90aGVtZSc7XG5pbXBvcnQgeyB1c2VTZWxlY3RlZEl0ZW0gfSBmcm9tICdzcmMvcGFnZXMvRGFzaGJvYXJkTWFwL0xpc3RDb250ZXh0JztcbmltcG9ydCB7IGNsZWFyQXJlYXMgfSBmcm9tICdzcmMvc3RvcmUvYXJlYXMvYWN0aW9ucyc7XG5pbXBvcnQgeyBjbGVhclBvaW50cyB9IGZyb20gJ3NyYy9zdG9yZS9wb2ludHMvYWN0aW9ucyc7XG5pbXBvcnQgeyBnZXRQb2ludEljb25CeVR5cGUgfSBmcm9tICcuL3BvaW50cy9Qb2ludEljb24nO1xucmVxdWlyZSgnbGVhZmxldC5tYXJrZXJjbHVzdGVyJyk7XG5cbmludGVyZmFjZSBNYXBQcm9wcyB7XG4gIGFyZWFzOiBJQXJlYVtdO1xuICBlZGdlcz86IElFZGdlW107XG4gIHBvaW50cz86IElQb2ludFtdO1xuICBnbG9iYWxfZGF0YTogSUdsb2JhbFN0YXRlO1xuICBhcmVhVG9DZW50ZXJCeT86IGFueTtcbiAgZm9jdXNlZEV2ZW50PzogSUV2ZW50IHwgbnVsbDtcbiAgaG92ZXJlZEV2ZW50PzogSUV2ZW50IHwgbnVsbDtcbiAgaGlkZUVkZ2VzPzogYm9vbGVhbjtcbiAgbWFwQm94U3R5bGU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogYW55O1xuICBzdHlsZT86IENTU1Byb3BlcnRpZXM7XG4gIGluY2x1ZGVVbm1vbml0b3JlZFBvaW50cz86IGJvb2xlYW47XG4gIGluY2x1ZGVVbm1vbml0b3JlZERlc2NlbmRhbnRzRm9yRWRnZXM/OiBib29sZWFuO1xuICBmb3JFdmVudHNWaWV3OiBib29sZWFuO1xuICBmb3JXV1RQRGFzaGJvYXJkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IE1hcDogUmVhY3QuRkM8TWFwUHJvcHM+ID0gKHtcbiAgYXJlYXMsXG4gIGVkZ2VzLFxuICBwb2ludHMsXG4gIGdsb2JhbF9kYXRhLFxuICBhcmVhVG9DZW50ZXJCeSxcbiAgZm9jdXNlZEV2ZW50LFxuICBob3ZlcmVkRXZlbnQsXG4gIGhpZGVFZGdlcyA9IGZhbHNlLFxuICBtYXBCb3hTdHlsZSA9IGxlYWZsZXRNYXAubWFwRGVmYXVsdCxcbiAgY2hpbGRyZW4sXG4gIGluY2x1ZGVVbm1vbml0b3JlZFBvaW50cyA9IHRydWUsXG4gIGluY2x1ZGVVbm1vbml0b3JlZERlc2NlbmRhbnRzRm9yRWRnZXMgPSBmYWxzZSxcbiAgZm9yRXZlbnRzVmlldyA9IGZhbHNlLFxuICBzdHlsZSA9IHt9LFxuICBmb3JXV1RQRGFzaGJvYXJkID0gZmFsc2UsXG59KSA9PiB7XG4gIGNvbnN0IHsgbWFwIH0gPSBnbG9iYWxfZGF0YTtcbiAgY29uc3QgbWFwUmVmID0gdXNlUmVmPEwuTWFwIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgW21hcFpvb21MZXZlbCwgc2V0TWFwWm9vbUxldmVsXSA9IHVzZVN0YXRlKDIpO1xuICBjb25zdCB7IHNlbGVjdGVkSXRlbSB9ID0gdXNlU2VsZWN0ZWRJdGVtKCk7XG4gIGNvbnN0IFtlZGdlc0NoZWNrYm94LCBzZXRFZGdlc0NoZWNrYm94XSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbb25seU1vbml0b3JlZFBvaW50cywgc2V0T25seU1vbml0b3JlZFBvaW50c10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93U2FtcGxlckljb24sIHNldFNob3dTYW1wbGVySWNvbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGVkZ2VzQ2hlY2tib3hSZWYgPSB1c2VSZWYoZWRnZXNDaGVja2JveCk7XG5cbiAgY29uc3QgaG92ZXJlZEV2ZW50UHJlc2VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBob3ZlcmVkRXZlbnQgIT09IG51bGwgJiYgaG92ZXJlZEV2ZW50ICE9PSB1bmRlZmluZWQ7XG4gIH0sIFtob3ZlcmVkRXZlbnRdKTtcblxuICBjb25zdCBmb2N1c2VkRXZlbnRQcmVzZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGZvY3VzZWRFdmVudCAhPT0gbnVsbCAmJiBmb2N1c2VkRXZlbnQgIT09IHVuZGVmaW5lZDtcbiAgfSwgW2ZvY3VzZWRFdmVudF0pO1xuXG4gIC8vIEFkZCBwYXJlbnQgbGF5ZXIgZ3JvdXAgZm9yIGFsbCBmYWN0b3JpZXNcbiAgY29uc3QgW2ZhY3Rvcmllc1BhcmVudEdyb3VwXSA9IHVzZVN0YXRlKEwubGF5ZXJHcm91cCgpKTtcbiAgY29uc3QgW3VubW9uaXRvcmVkRmFjdG9yaWVzR3JvdXBdID0gdXNlU3RhdGUoTC5sYXllckdyb3VwKCkpO1xuICBjb25zdCBbbW9uaXRvcmVkRmFjdG9yaWVzR3JvdXBdID0gdXNlU3RhdGUoTC5sYXllckdyb3VwKCkpO1xuICBjb25zdCBbdW5tb25pdG9yZWRFZGdlc0dyb3VwXSA9IHVzZVN0YXRlKEwubGF5ZXJHcm91cCgpKTtcbiAgY29uc3QgW21vbml0b3JlZEVkZ2VzR3JvdXBdID0gdXNlU3RhdGUoTC5sYXllckdyb3VwKCkpO1xuICBjb25zdCBbd3d0cHNMYXllckdyb3VwXSA9IHVzZVN0YXRlKEwubGF5ZXJHcm91cCgpKTtcbiAgY29uc3QgW2NvbGxlY3RvcnNMYXllckdyb3VwXSA9IHVzZVN0YXRlKEwubGF5ZXJHcm91cCgpKTtcbiAgY29uc3QgW2FyZWFzTGF5ZXJHcm91cF0gPSB1c2VTdGF0ZShuZXcgTC5GZWF0dXJlR3JvdXAoKSk7XG5cbiAgY29uc3QgcmVuZGVyUG9pbnRNYXJrZXJzID0gKGZpbHRlcmVkUG9pbnRzLCBtYXBSZWYsIHByb3BzKSA9PlxuICAgIG1hcFJlZi5jdXJyZW50ICE9PSBudWxsICYmXG4gICAgcG9pbnRzICYmIChcbiAgICAgIDxQb2ludE1hcmtlcnNcbiAgICAgICAgbWFwPXttYXBSZWYuY3VycmVudH1cbiAgICAgICAgcG9pbnRzPXtmaWx0ZXJlZFBvaW50c31cbiAgICAgICAgc2hvd1NhbXBsZXJJY29uPXtzaG93U2FtcGxlckljb259XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgIC8+XG4gICAgKTtcblxuICBjb25zdCBtZW1vaXplZE1vbml0b3JlZFBvaW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghZWRnZXNDaGVja2JveCB8fCAhbWFwUmVmLmN1cnJlbnQgfHwgIXBvaW50cyB8fCBwb2ludHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBtb25pdG9yZWRQb2ludHMgPSBmaWx0ZXJQb2ludHMocG9pbnRzLCB7IG9ubHlNb25pdG9yZWQ6IHRydWUgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJQb2ludE1hcmtlcnMobW9uaXRvcmVkUG9pbnRzLCBtYXBSZWYsIHtcbiAgICAgIGluY2x1ZGVVbm1vbml0b3JlZFBvaW50czogdHJ1ZSxcbiAgICAgIHJlcmVuZGVyOiB6b29tTGV2ZWxzW21hcFpvb21MZXZlbF0sXG4gICAgICBmYWN0b3JpZXNHcm91cDogbW9uaXRvcmVkRmFjdG9yaWVzR3JvdXAsXG4gICAgICB3d3Rwc0dyb3VwOiB3d3Rwc0xheWVyR3JvdXAsXG4gICAgICBjb2xsZWN0b3JzR3JvdXA6IGNvbGxlY3RvcnNMYXllckdyb3VwLFxuICAgICAgZm9yRXZlbnRzVmlldyxcbiAgICAgIHNob3dTYW1wbGVyOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFttYXBSZWYuY3VycmVudCwgcG9pbnRzLCBtYXBab29tTGV2ZWxdKTtcblxuICBjb25zdCBtZW1vaXplZFVubW9uaXRvcmVkUG9pbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFlZGdlc0NoZWNrYm94IHx8ICFtYXBSZWYuY3VycmVudCB8fCAhcG9pbnRzIHx8IHBvaW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHVubW9uaXRvcmVkUG9pbnRzID0gZmlsdGVyUG9pbnRzKHBvaW50cywgeyBvbmx5TW9uaXRvcmVkOiBmYWxzZSB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHJlbmRlclBvaW50TWFya2Vycyh1bm1vbml0b3JlZFBvaW50cywgbWFwUmVmLCB7XG4gICAgICBpbmNsdWRlVW5tb25pdG9yZWRQb2ludHM6IHRydWUsXG4gICAgICByZXJlbmRlcjogem9vbUxldmVsc1ttYXBab29tTGV2ZWxdLFxuICAgICAgZmFjdG9yaWVzR3JvdXA6IHVubW9uaXRvcmVkRmFjdG9yaWVzR3JvdXAsXG4gICAgICB3d3Rwc0dyb3VwOiB3d3Rwc0xheWVyR3JvdXAsXG4gICAgICBjb2xsZWN0b3JzR3JvdXA6IGNvbGxlY3RvcnNMYXllckdyb3VwLFxuICAgICAgZm9yRXZlbnRzVmlldyxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFttYXBSZWYuY3VycmVudCwgcG9pbnRzLCBtYXBab29tTGV2ZWxdKTtcblxuICBjb25zdCByZW5kZXJFZGdlcyA9IChmaWx0ZXJlZEVkZ2VzLCBtYXBSZWYsIGVkZ2VzQ2hlY2tib3gsIHByb3BzKSA9PlxuICAgIG1hcFJlZi5jdXJyZW50ICE9PSBudWxsICYmXG4gICAgZWRnZXNDaGVja2JveCAmJiAoXG4gICAgICA8RWRnZXMgZWRnZXM9e2ZpbHRlcmVkRWRnZXN9IG1hcD17bWFwUmVmLmN1cnJlbnR9IHsuLi5wcm9wc30gLz5cbiAgICApO1xuXG4gIGNvbnN0IG1lbW9pemVkRWRnZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBtb25pdG9yZWRFZGdlcyA9IGZpbHRlckVkZ2VzKGVkZ2VzLCBwb2ludHMsIHRydWUpO1xuXG4gICAgcmV0dXJuIHJlbmRlckVkZ2VzKG1vbml0b3JlZEVkZ2VzLCBtYXBSZWYsIGVkZ2VzQ2hlY2tib3gsIHtcbiAgICAgIEwsXG4gICAgICBwb2ludHMsXG4gICAgICBoaWRlRWRnZXM6IGZhbHNlLFxuICAgICAgaGlkZUFycm93czogdHJ1ZSxcbiAgICAgIGFsbG93VW5tb25pdG9yZWREZXNjZW5kYW50czogaW5jbHVkZVVubW9uaXRvcmVkRGVzY2VuZGFudHNGb3JFZGdlcyxcbiAgICAgIGdyb3VwOiBtb25pdG9yZWRFZGdlc0dyb3VwLFxuICAgIH0pO1xuICB9LCBbcG9pbnRzLCBlZGdlc0NoZWNrYm94LCBtYXBab29tTGV2ZWxdKTtcblxuICBjb25zdCBtZW1vaXplZFVubW9uaXRvcmVkRWRnZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB1bm1vbml0b3JlZEVkZ2VzID0gZmlsdGVyRWRnZXMoZWRnZXMsIHBvaW50cywgZmFsc2UpO1xuXG4gICAgcmV0dXJuIHJlbmRlckVkZ2VzKHVubW9uaXRvcmVkRWRnZXMsIG1hcFJlZiwgZWRnZXNDaGVja2JveCwge1xuICAgICAgTCxcbiAgICAgIHBvaW50cyxcbiAgICAgIGhpZGVFZGdlczogZmFsc2UsXG4gICAgICBoaWRlQXJyb3dzOiB0cnVlLFxuICAgICAgYWxsb3dVbm1vbml0b3JlZERlc2NlbmRhbnRzOiBpbmNsdWRlVW5tb25pdG9yZWREZXNjZW5kYW50c0ZvckVkZ2VzLFxuICAgICAgZ3JvdXA6IHVubW9uaXRvcmVkRWRnZXNHcm91cCxcbiAgICB9KTtcbiAgfSwgW3BvaW50cywgZWRnZXNDaGVja2JveCwgbWFwWm9vbUxldmVsXSk7XG5cbiAgY29uc3QgaGFuZGxlRWRnZXNDaGVja2JveENoYW5nZSA9IChpc0NoZWNrZWQpID0+IHtcbiAgICBzZXRFZGdlc0NoZWNrYm94KGlzQ2hlY2tlZCk7XG4gIH07XG5cbiAgLy8gVGhpcyB2YXJpYWJsZSBzdG9yZXMgdGhlIHpvb20gbGV2ZWxzIHRoZSBlZGdlcyBhcmUgZGlzcGxheWVkXG4gIC8vIEl0IGlzIHVzZWQgaW4gdHdvIHBsYWNlcyBpbiB0aGUgY29kZSwgc28gaXQgaXMgYmV0dGVyIHRvIHN0b3JlIGl0IGluIG9uZSBwbGFjZVxuICBjb25zdCBlZGdlc1pvb21MZXZlbHMgPSBbJ1NtYWxsJywgJ01lZGl1bScsICdNTGFyZ2UnLCAnTGFyZ2UnXTtcblxuICBjb25zdCBoYW5kbGVQb2ludHNDaGVja2JveENoYW5nZSA9IChpc0NoZWNrZWQpID0+IHtcbiAgICBzZXRPbmx5TW9uaXRvcmVkUG9pbnRzKGlzQ2hlY2tlZCk7XG4gICAgaWYgKG1hcFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBzZXRPbmx5TW9uaXRvcmVkUG9pbnRzKGlzQ2hlY2tlZCk7XG4gICAgICBsZXQgem9vbSA9IHpvb21MZXZlbHNbbWFwUmVmLmN1cnJlbnQuZ2V0Wm9vbSgpXTtcblxuICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAvLyBIaWRlIHVubW9uaXRvcmVkIHBvaW50cyB3aGVuIFwic2hvdyBvbmx5IG1vbml0b3JlZFwiIGlzIGNoZWNrZWRcbiAgICAgICAgZmFjdG9yaWVzUGFyZW50R3JvdXAucmVtb3ZlTGF5ZXIodW5tb25pdG9yZWRGYWN0b3JpZXNHcm91cCk7XG4gICAgICAgIHVubW9uaXRvcmVkRWRnZXNHcm91cC5yZW1vdmVGcm9tKG1hcFJlZi5jdXJyZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNob3cgYWxsIHBvaW50cyB3aGVuIFwic2hvdyBvbmx5IG1vbml0b3JlZFwiIGlzIHVuY2hlY2tlZFxuICAgICAgICBmYWN0b3JpZXNQYXJlbnRHcm91cC5hZGRMYXllcih1bm1vbml0b3JlZEZhY3Rvcmllc0dyb3VwKTtcblxuICAgICAgICAvLyBTaG93IHVubW9uaXRvcmVkIGVkZ2VzIGlmIGF0IGFwcHJvcHJpYXRlIHpvb20gbGV2ZWxcbiAgICAgICAgaWYgKGVkZ2VzQ2hlY2tib3hSZWYuY3VycmVudCAmJiBlZGdlc1pvb21MZXZlbHMuaW5jbHVkZXMoem9vbSkpIHtcbiAgICAgICAgICB1bm1vbml0b3JlZEVkZ2VzR3JvdXAuYWRkVG8obWFwUmVmLmN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVBvaW50c1dpdGhTYW1wbGVyQ2hlY2tib3hDaGFuZ2UgPSAoaXNDaGVja2VkKSA9PiB7XG4gICAgc2V0U2hvd1NhbXBsZXJJY29uKGlzQ2hlY2tlZCk7XG4gIH07XG5cbiAgY29uc3QgdHJhY2tMYXllcmJveCA9ICgpID0+IHtcbiAgICBzZXR1cENoZWNrYm94TGlzdGVuZXIoJyNlZGdlcy1jaGVja2JveCcsIGhhbmRsZUVkZ2VzQ2hlY2tib3hDaGFuZ2UpO1xuICAgIHNldHVwQ2hlY2tib3hMaXN0ZW5lcihcbiAgICAgICcjbW9uaXRvcmVkLXBvaW50cy1jaGVja2JveCcsXG4gICAgICBoYW5kbGVQb2ludHNDaGVja2JveENoYW5nZSxcbiAgICApO1xuICAgIHNldHVwQ2hlY2tib3hMaXN0ZW5lcihcbiAgICAgICcjbW9uaXRvcmVkLXBvaW50cy13aXRoLXNhbXBsZXItY2hlY2tib3gnLFxuICAgICAgaGFuZGxlUG9pbnRzV2l0aFNhbXBsZXJDaGVja2JveENoYW5nZSxcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHpvb21SdWxlc0ZvckV2ZW50c1ZpZXcgPSAoKSA9PiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IChcbiAgICAgIDw+XG4gICAgICAgIHtlZGdlc0NoZWNrYm94ICYmIG1lbW9pemVkRWRnZXN9XG4gICAgICAgIHtlZGdlc0NoZWNrYm94ICYmICFvbmx5TW9uaXRvcmVkUG9pbnRzICYmIG1lbW9pemVkVW5tb25pdG9yZWRFZGdlc31cbiAgICAgICAgeyFvbmx5TW9uaXRvcmVkUG9pbnRzICYmIG1lbW9pemVkVW5tb25pdG9yZWRQb2ludHN9XG4gICAgICAgIHttZW1vaXplZE1vbml0b3JlZFBvaW50c31cbiAgICAgIDwvPlxuICAgICk7XG5cbiAgICByZXR1cm4gcGF5bG9hZDtcbiAgfTtcblxuICBjb25zdCBtZW1vaXplZFpvb21Db250cm9sID0gKCkgPT4ge1xuICAgIGxldCBwYXlsb2FkID0gPD48Lz47XG4gICAgaWYgKGVkZ2VzWm9vbUxldmVscy5pbmNsdWRlcyh6b29tTGV2ZWxzW21hcFpvb21MZXZlbF0pKSB7XG4gICAgICBwYXlsb2FkID0gem9vbVJ1bGVzRm9yRXZlbnRzVmlldygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXlsb2FkID0gKFxuICAgICAgICA8PlxuICAgICAgICAgIHshb25seU1vbml0b3JlZFBvaW50cyAmJiBtZW1vaXplZFVubW9uaXRvcmVkUG9pbnRzfVxuICAgICAgICAgIHttZW1vaXplZE1vbml0b3JlZFBvaW50c31cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9O1xuXG4gIGNvbnN0IG1lbW9pemVkRXZlbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoZm9jdXNlZEV2ZW50UHJlc2VudCkge1xuICAgICAgZm9jdXNlZEV2ZW50IS5mb2N1c2VkID0gZm9jdXNlZEV2ZW50UHJlc2VudDtcbiAgICAgIGZvY3VzZWRFdmVudCEuaG92ZXJlZCA9ICFmb2N1c2VkRXZlbnRQcmVzZW50O1xuICAgIH1cblxuICAgIGlmIChob3ZlcmVkRXZlbnRQcmVzZW50KSB7XG4gICAgICBob3ZlcmVkRXZlbnQhLmhvdmVyZWQgPSBob3ZlcmVkRXZlbnRQcmVzZW50O1xuICAgICAgaG92ZXJlZEV2ZW50IS5mb2N1c2VkID0gIWhvdmVyZWRFdmVudFByZXNlbnQ7XG4gICAgfVxuXG4gICAgaWYgKCFob3ZlcmVkRXZlbnRQcmVzZW50ICYmICFmb2N1c2VkRXZlbnRQcmVzZW50KSByZXR1cm4gPD48Lz47XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEV2ZW50XG4gICAgICAgIGV2ZW50PXtmb2N1c2VkRXZlbnQhIHx8IGhvdmVyZWRFdmVudCF9XG4gICAgICAgIG1hcD17bWFwfVxuICAgICAgICBlZGdlcz17ZWRnZXMhfVxuICAgICAgICBwb2ludHM9e3BvaW50cyF9XG4gICAgICAgIGluY2x1ZGVOZXR3b3JrPXshaG92ZXJlZEV2ZW50UHJlc2VudH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfSwgW2ZvY3VzZWRFdmVudFByZXNlbnQsIGhvdmVyZWRFdmVudFByZXNlbnQsIGVkZ2VzLCBwb2ludHNdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGVkZ2VzQ2hlY2tib3hSZWYuY3VycmVudCA9IGVkZ2VzQ2hlY2tib3g7XG4gIH0sIFtlZGdlc0NoZWNrYm94XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobWFwUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IGFsbEdyb3VwcyA9IFtcbiAgICAgICAgbW9uaXRvcmVkRmFjdG9yaWVzR3JvdXAsXG4gICAgICAgIHVubW9uaXRvcmVkRmFjdG9yaWVzR3JvdXAsXG4gICAgICAgIHd3dHBzTGF5ZXJHcm91cCxcbiAgICAgICAgY29sbGVjdG9yc0xheWVyR3JvdXAsXG4gICAgICBdO1xuXG4gICAgICBsZXQgbWF0Y2hpbmdNYXJrZXJzID0gW107XG5cbiAgICAgIGFsbEdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICBncm91cC5nZXRMYXllcnMoKS5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxheWVyIGluc3RhbmNlb2YgTC5NYXJrZXIgJiZcbiAgICAgICAgICAgIGxheWVyWydrYW5kb19oYXNfc2FtcGxlciddID09PSB0cnVlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBtYXRjaGluZ01hcmtlcnMucHVzaChsYXllcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBtYXRjaGluZ01hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiB7XG4gICAgICAgIG1hcmtlclsna2FuZG9fc2hvd19zYW1wbGVyJ10gPSBzaG93U2FtcGxlckljb247XG5cbiAgICAgICAgY29uc3QgbWFya2VySWNvbkRhdGEgPSBtYXJrZXJbJ2thbmRvX2ljb25fZGF0YSddO1xuICAgICAgICBjb25zdCBtYXJrZXJDbGlja2VkID0gbWFya2VyLmlzUG9wdXBPcGVuKCkgfHwgZmFsc2U7XG4gICAgICAgIGNvbnN0IGhpZGVUZXh0ID0gbWFya2VyQ2xpY2tlZCA9PT0gZmFsc2U7XG5cbiAgICAgICAgaWYgKG1hcmtlckljb25EYXRhKSB7XG4gICAgICAgICAgY29uc3QgaWNvbiA9IGdldFBvaW50SWNvbkJ5VHlwZShcbiAgICAgICAgICAgIG1hcmtlckljb25EYXRhPy50eXBlIHx8ICcnLFxuICAgICAgICAgICAgbWFya2VySWNvbkRhdGE/LnRpdGxlIHx8ICcnLFxuICAgICAgICAgICAgbWFya2VySWNvbkRhdGE/LnN1YnRpdGxlIHx8ICcnLFxuICAgICAgICAgICAgbWFya2VyQ2xpY2tlZCxcbiAgICAgICAgICAgIGhpZGVUZXh0LFxuICAgICAgICAgICAgbWFya2VySWNvbkRhdGE/Lmhhc0lzc3VlcyB8fCBmYWxzZSxcbiAgICAgICAgICAgIHNob3dTYW1wbGVySWNvbixcbiAgICAgICAgICAgIG1hcmtlckljb25EYXRhPy5zaG91bGRJbnN0YWxsIHx8IGZhbHNlLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBtYXJrZXIuc2V0SWNvbihpY29uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbc2hvd1NhbXBsZXJJY29uXSk7XG5cbiAgLy8gdXNlRWZmZWN0KCgpID0+IHtcbiAgLy8gICByZXR1cm4gZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgLy8gICAgIGNvbGxlY3RvcnNMYXllckdyb3VwLmNsZWFyTGF5ZXJzKCk7XG4gIC8vICAgICBtYXBSZWYuY3VycmVudD8ucmVtb3ZlTGF5ZXIoY29sbGVjdG9yc0xheWVyR3JvdXApO1xuICAvLyAgIH07XG4gIC8vIH0sIFtmb2N1c2VkRXZlbnQsIGdsb2JhbF9kYXRhLmV2ZW50RmlsdGVyUGFyYW1dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgaWYgKGZvckV2ZW50c1ZpZXcgJiYgbWFwUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgZGlzcGF0Y2goY2xlYXJQb2ludHMoKSk7XG4gICAgICAgIGRpc3BhdGNoKGNsZWFyQXJlYXMoKSk7XG4gICAgICAgIHd3dHBzTGF5ZXJHcm91cC5jbGVhckxheWVycygpO1xuICAgICAgICBhcmVhc0xheWVyR3JvdXAuY2xlYXJMYXllcnMoKTtcbiAgICAgICAgdW5tb25pdG9yZWRGYWN0b3JpZXNHcm91cC5jbGVhckxheWVycygpO1xuICAgICAgICBtb25pdG9yZWRGYWN0b3JpZXNHcm91cC5jbGVhckxheWVycygpO1xuICAgICAgICBmYWN0b3JpZXNQYXJlbnRHcm91cC5jbGVhckxheWVycygpO1xuICAgICAgICBtb25pdG9yZWRFZGdlc0dyb3VwLmNsZWFyTGF5ZXJzKCk7XG4gICAgICAgIGNvbGxlY3RvcnNMYXllckdyb3VwLmNsZWFyTGF5ZXJzKCk7XG4gICAgICAgIHVubW9uaXRvcmVkRWRnZXNHcm91cC5jbGVhckxheWVycygpO1xuICAgICAgICBtYXBSZWYuY3VycmVudC5yZW1vdmVMYXllcih1bm1vbml0b3JlZEVkZ2VzR3JvdXApO1xuICAgICAgICBtYXBSZWYuY3VycmVudC5yZW1vdmVMYXllcihtb25pdG9yZWRFZGdlc0dyb3VwKTtcbiAgICAgICAgbWFwUmVmLmN1cnJlbnQucmVtb3ZlTGF5ZXIod3d0cHNMYXllckdyb3VwKTtcbiAgICAgICAgbWFwUmVmLmN1cnJlbnQucmVtb3ZlTGF5ZXIoY29sbGVjdG9yc0xheWVyR3JvdXApO1xuICAgICAgICBtYXBSZWYuY3VycmVudC5yZW1vdmVMYXllcihhcmVhc0xheWVyR3JvdXApO1xuICAgICAgICBtYXBSZWYuY3VycmVudC5yZW1vdmVMYXllcihmYWN0b3JpZXNQYXJlbnRHcm91cCk7XG5cbiAgICAgICAgbWFwUmVmLmN1cnJlbnQuZWFjaExheWVyKChsYXllcikgPT4ge1xuICAgICAgICAgIGlmIChsYXllciBpbnN0YW5jZW9mIEwuVGlsZUxheWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG1hcFJlZi5jdXJyZW50LnJlbW92ZUxheWVyKGxheWVyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2dsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWRdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWFwUmVmLmN1cnJlbnQpIHtcbiAgICAgIGluaXRpYWxpemVNYXAoXG4gICAgICAgIG1hcFpvb21MZXZlbCxcbiAgICAgICAgbWFwQm94U3R5bGUsXG4gICAgICAgIGxlYWZsZXRNYXAuc2F0ZWxsaXRlLFxuICAgICAgICBtYXBSZWYsXG4gICAgICAgIGRpc3BhdGNoLFxuICAgICAgICBpc1ZhbGlkQXJlYSxcbiAgICAgICAgYXJlYVRvQ2VudGVyQnksXG4gICAgICAgIHNldE1hcFpvb21MZXZlbCxcbiAgICAgICAgZm9yV1dUUERhc2hib2FyZCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgZ2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZCxcbiAgICAgICk7XG5cbiAgICAgIC8vIEluaXRpYWxpemUgcGFyZW50IGZhY3RvcnkgZ3JvdXBcbiAgICAgIGlmIChtYXBSZWYuY3VycmVudCkge1xuICAgICAgICBmYWN0b3JpZXNQYXJlbnRHcm91cC5hZGRUbyhtYXBSZWYuY3VycmVudCk7XG4gICAgICAgIGZhY3Rvcmllc1BhcmVudEdyb3VwLmFkZExheWVyKG1vbml0b3JlZEZhY3Rvcmllc0dyb3VwKTtcbiAgICAgICAgZmFjdG9yaWVzUGFyZW50R3JvdXAuYWRkTGF5ZXIodW5tb25pdG9yZWRGYWN0b3JpZXNHcm91cCk7XG4gICAgICB9XG5cbiAgICAgIHRyYWNrTGF5ZXJib3goKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0TWFwWm9vbUxldmVsKG1hcFJlZi5jdXJyZW50LmdldFpvb20oKSk7XG4gICAgICBpZiAoIWFyZWFUb0NlbnRlckJ5KSB7XG4gICAgICAgIGFyZWFUb0NlbnRlckJ5ID0gYXJlYXMubWFwKChhcmVhKSA9PiBhcmVhLnNoYXBlX2RhdGEpLmZsYXQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFmb2N1c2VkRXZlbnQpIHtcbiAgICAgICAgYXJlYUZvY3VzTG9naWMobWFwUmVmLCBpc1ZhbGlkQXJlYSwgYXJlYVRvQ2VudGVyQnkpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW21hcFJlZi5jdXJyZW50LCBhcmVhVG9DZW50ZXJCeV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IGNsaWNrZWQgPSBmYWxzZTtcblxuICAgIG1hcFJlZi5jdXJyZW50Py5lYWNoTGF5ZXIoKGxheWVyKSA9PiB7XG4gICAgICBpZiAoY2xpY2tlZCkgcmV0dXJuO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGxheWVyPy5rYW5kb19vYmplY3RfaWQgPT09IHNlbGVjdGVkSXRlbSAmJlxuICAgICAgICBsYXllci5pc1BvcHVwT3BlbigpID09PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGlmIChsYXllciBpbnN0YW5jZW9mIEwuTWFya2VyKSB7XG4gICAgICAgICAgbGF5ZXIuZmlyZSgnY2xpY2snKTtcbiAgICAgICAgfSBlbHNlIGlmIChsYXllciBpbnN0YW5jZW9mIEwuUG9seWdvbikge1xuICAgICAgICAgIGxheWVyLmZpcmUoJ2NsaWNrLWV2ZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY2xpY2tlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFtzZWxlY3RlZEl0ZW1dKTtcblxuICBjb25zdCByZW5kZXJBcmVhcyA9ICgpID0+IHtcbiAgICBpZiAoIXNob3VsZExvYWRNYXBPYmplY3RzKGdsb2JhbF9kYXRhLCBtYXBSZWYsIGVkZ2VzLCBwb2ludHMpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEFyZWFQb2x5Z29uc1xuICAgICAgICBhcmVhcz17YXJlYXN9XG4gICAgICAgIG1hcD17bWFwUmVmLmN1cnJlbnR9XG4gICAgICAgIEw9e0x9XG4gICAgICAgIGFyZWFUb0NlbnRlckJ5PXthcmVhVG9DZW50ZXJCeX1cbiAgICAgICAgbWFwWm9vbT17bWFwWm9vbUxldmVsfVxuICAgICAgICBnbG9iYWxfZGF0YT17Z2xvYmFsX2RhdGF9XG4gICAgICAgIGZlYXR1cmVHcm91cD17YXJlYXNMYXllckdyb3VwfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJrZC1tYXAtY29udGFpbmVyXCIgc3R5bGU9e3N0eWxlfT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtgIG1hcC1jb250YWluZXIgJHtcbiAgICAgICAgICBnbG9iYWxfZGF0YS5zaWRlbmF2RXhwYW5kZWQgPyAnJyA6ICdtYXAtY29udGFpbmVyLS1zaWRlbmF2LWNvbGxhcHNlZCdcbiAgICAgICAgfWB9XG4gICAgICA+XG4gICAgICAgIDxFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgIDxkaXYgaWQ9XCJtYXBcIj48L2Rpdj5cbiAgICAgICAgICB7cmVuZGVyQXJlYXMoKX1cbiAgICAgICAgICB7c2hvdWRMb2FkRGVwZW5kZW50TWFwT2JqZWN0cyhcbiAgICAgICAgICAgIGVkZ2VzLFxuICAgICAgICAgICAgYXJlYXMsXG4gICAgICAgICAgICBnbG9iYWxfZGF0YSxcbiAgICAgICAgICAgIG1hcFJlZixcbiAgICAgICAgICAgIHBvaW50cyxcbiAgICAgICAgICApICYmIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIHttZW1vaXplZEV2ZW50fVxuICAgICAgICAgICAgICB7bWVtb2l6ZWRab29tQ29udHJvbCgpfVxuICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0Vycm9yQm91bmRhcnk+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLElBQUFBLENBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBQSxP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