@kando-env/kando-ui 1.2.412-alpha.3 → 1.2.412-alpha.6

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 (704) hide show
  1. package/lib/Router.js +37 -42
  2. package/lib/Widgets/EventsCarousel/EventsCarousel.js +4 -5
  3. package/lib/Widgets/EventsRow/EventsRow.js +6 -7
  4. package/lib/Widgets/Map/GraphUtils.js +3 -5
  5. package/lib/Widgets/Map/Map.js +109 -82
  6. package/lib/Widgets/Map/MapUtils.js +35 -67
  7. package/lib/Widgets/Map/areas/AreaPolygon.js +33 -36
  8. package/lib/Widgets/Map/areas/AreaPolygons.js +4 -5
  9. package/lib/Widgets/Map/areas/AreaUtils.js +7 -13
  10. package/lib/Widgets/Map/areas/Patterns.js +2 -3
  11. package/lib/Widgets/Map/edges/Edge.js +4 -5
  12. package/lib/Widgets/Map/edges/Edges.js +4 -5
  13. package/lib/Widgets/Map/edges/arrows/Arrows.js +2 -3
  14. package/lib/Widgets/Map/events/Event.js +4 -5
  15. package/lib/Widgets/Map/events/EventIndicator.js +4 -5
  16. package/lib/Widgets/Map/events/EventPath.js +4 -5
  17. package/lib/Widgets/Map/events/EventUtils.js +21 -34
  18. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +4 -5
  19. package/lib/Widgets/Map/events/PointOfEvent.js +4 -5
  20. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +4 -5
  21. package/lib/Widgets/Map/events/Snail.js +4 -5
  22. package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +5 -7
  23. package/lib/Widgets/Map/map/FloatingGraph.js +2 -3
  24. package/lib/Widgets/Map/map/GraphDateButton.js +2 -3
  25. package/lib/Widgets/Map/matchGraph/MatchGraph.js +2 -3
  26. package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +2 -3
  27. package/lib/Widgets/Map/points/PointIcon.js +3 -5
  28. package/lib/Widgets/Map/points/PointMarker.js +33 -36
  29. package/lib/Widgets/Map/points/PointMarkers.js +8 -9
  30. package/lib/Widgets/Map/points/PointUtils.js +31 -60
  31. package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +4 -5
  32. package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +4 -5
  33. package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +4 -5
  34. package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +3 -5
  35. package/lib/Widgets/MostPolluting/Areas/Areas.js +4 -5
  36. package/lib/Widgets/MostPolluting/Areas/areas.mock.js +2 -3
  37. package/lib/Widgets/MostPolluting/Areas/areasResponse.interface.js +1 -1
  38. package/lib/Widgets/MostPolluting/Areas/styles.js +3 -5
  39. package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +2 -3
  40. package/lib/Widgets/MostPolluting/Factories/Factories.js +4 -5
  41. package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +2 -3
  42. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +2 -3
  43. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +3 -5
  44. package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +3 -5
  45. package/lib/Widgets/MostPolluting/Factories/factories.mock.js +2 -3
  46. package/lib/Widgets/MostPolluting/Factories/factoriesResponse.interface.js +1 -1
  47. package/lib/Widgets/MostPolluting/Factories/styles.js +3 -5
  48. package/lib/Widgets/MostPolluting/MostPolluting.js +4 -5
  49. package/lib/Widgets/MostPolluting/MostPolluting.stories.js +6 -11
  50. package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +2 -3
  51. package/lib/Widgets/MostPolluting/ShowMore/styles.js +2 -3
  52. package/lib/Widgets/MostPolluting/assets/index.js +1 -1
  53. package/lib/Widgets/MostPolluting/components/ChangePercent.js +2 -3
  54. package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +1 -1
  55. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +4 -5
  56. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +1 -1
  57. package/lib/Widgets/MostPolluting/components/PotentialImpact.js +2 -3
  58. package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +1 -2
  59. package/lib/Widgets/MostPolluting/models.js +1 -1
  60. package/lib/Widgets/MostPolluting/styles.js +3 -5
  61. package/lib/Widgets/PotentialImpactSummary/Back/Back.js +2 -3
  62. package/lib/Widgets/PotentialImpactSummary/Icon.js +4 -6
  63. package/lib/Widgets/PotentialImpactSummary/index.js +2 -3
  64. package/lib/Widgets/PotentialImpactSummary/index.test.js +1 -1
  65. package/lib/Widgets/PotentialImpactSummary/styles.js +6 -11
  66. package/lib/Widgets/PotentialImpactSummary/useCasesResponse.interface.js +1 -1
  67. package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +2 -3
  68. package/lib/Widgets/QualitySummary/PieChart/PieChart.js +2 -3
  69. package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +1 -1
  70. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +2 -3
  71. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +3 -3
  72. package/lib/Widgets/QualitySummary/QualitySummary.js +2 -3
  73. package/lib/Widgets/QualitySummary/qualitySummary.mock.js +4 -7
  74. package/lib/Widgets/QualitySummary/qualitySummaryResponse.interface.js +1 -1
  75. package/lib/Widgets/QualitySummary/styles.js +6 -11
  76. package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +4 -5
  77. package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +4 -5
  78. package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +2 -3
  79. package/lib/Widgets/UtilityInformation/UtilityInformation.js +4 -5
  80. package/lib/Widgets/UtilityInformation/UtilityInformationResponse.interface.js +1 -1
  81. package/lib/Widgets/UtilityInformation/styles.js +9 -15
  82. package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +3 -5
  83. package/lib/assets/icons/TopNavbar/index.js +1 -1
  84. package/lib/assets/icons/TrendSvg.js +2 -3
  85. package/lib/assets/icons/index.js +1 -1
  86. package/lib/assets/icons/kandoStepper/index.js +1 -1
  87. package/lib/assets/icons/siteTypes/index.js +1 -1
  88. package/lib/components/ApplyButton/ApplyButton.js +2 -3
  89. package/lib/components/ApplyButton/index.js +2 -3
  90. package/lib/components/Backdrop/Backdrop.js +2 -3
  91. package/lib/components/ContentLoader/ContentLoader.js +2 -3
  92. package/lib/components/ContentLoader/index.js +1 -1
  93. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +3 -5
  94. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +3 -5
  95. package/lib/components/CustomInputs/DoubleTabs/styles.js +4 -7
  96. package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +4 -5
  97. package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +2 -3
  98. package/lib/components/CustomInputs/Search/Search.js +4 -5
  99. package/lib/components/CustomInputs/Search/index.js +2 -3
  100. package/lib/components/CustomInputs/Select/Select.js +4 -5
  101. package/lib/components/CustomInputs/Select/Select.stories.js +3 -5
  102. package/lib/components/DamageType/DamageType.js +6 -7
  103. package/lib/components/DamageType/index.js +2 -3
  104. package/lib/components/DataLoaderError/DataLoaderError.js +2 -3
  105. package/lib/components/DischargeHeatmap/DischargeHeatmap.js +2 -3
  106. package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +1 -1
  107. package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +4 -5
  108. package/lib/components/DischargeHeatmap/HighchartsOptions.js +2 -3
  109. package/lib/components/DischargeHeatmap/index.js +2 -3
  110. package/lib/components/DischargeHeatmap/mocks/handlers.js +2 -3
  111. package/lib/components/DischargeHeatmap/popupText.js +2 -3
  112. package/lib/components/DischargeHeatmap/titles.js +3 -5
  113. package/lib/components/DischargeHeatmap/types.js +1 -1
  114. package/lib/components/ErrorBoundary.js +9 -9
  115. package/lib/components/Events/Events.js +4 -5
  116. package/lib/components/Events/index.js +2 -3
  117. package/lib/components/Graph/Graph.js +7 -8
  118. package/lib/components/Graph/index.js +2 -3
  119. package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +2 -3
  120. package/lib/components/Header/Breadcrumbs/index.js +2 -3
  121. package/lib/components/Header/DoubleTabs/DoubleTabs.js +5 -7
  122. package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +3 -5
  123. package/lib/components/Header/DoubleTabs/styles.js +4 -7
  124. package/lib/components/Header/Header.js +2 -3
  125. package/lib/components/Header/Header.stories.js +3 -5
  126. package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +15 -17
  127. package/lib/components/Header/InfoBar/InfoBar.js +31 -34
  128. package/lib/components/Header/InfoBar/Search/Control.js +2 -3
  129. package/lib/components/Header/InfoBar/Search/GroupLabel.js +2 -3
  130. package/lib/components/Header/InfoBar/Search/Search.js +4 -5
  131. package/lib/components/Header/InfoBar/Search/SearchContainer.js +4 -5
  132. package/lib/components/Header/InfoBar/Search/index.js +2 -3
  133. package/lib/components/Header/InfoBar/Search/searchStyle.js +2 -3
  134. package/lib/components/Header/InfoBar/TimeFilter.js +2 -3
  135. package/lib/components/Header/InfoBar/types.js +1 -1
  136. package/lib/components/Header/KandoNavbar/KandoNavbar.js +7 -8
  137. package/lib/components/Header/KandoNavbar/index.js +2 -3
  138. package/lib/components/Header/Slideshow/Slideshow.js +4 -5
  139. package/lib/components/Header/Slideshow/index.js +2 -3
  140. package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +2 -3
  141. package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +2 -3
  142. package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +5 -6
  143. package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +2 -3
  144. package/lib/components/Header/Toolbar/Toolbar.js +4 -5
  145. package/lib/components/InfoBar/InfoBar.js +4 -5
  146. package/lib/components/InfoBar/InfoBar.stories.js +3 -5
  147. package/lib/components/KandoModal/KandoModal.js +4 -5
  148. package/lib/components/KandoModal/index.js +2 -3
  149. package/lib/components/Link.js +2 -3
  150. package/lib/components/Links/CustomRedirect/CustomRedirect.js +2 -3
  151. package/lib/components/Links/StyledLink/StyledLink.js +3 -5
  152. package/lib/components/Links/StyledNavLink/StyledNavLink.js +2 -3
  153. package/lib/components/LiveEvents/CarouselSlide.js +2 -3
  154. package/lib/components/LiveEvents/LiveEvents.js +2 -3
  155. package/lib/components/LiveEvents/index.js +2 -3
  156. package/lib/components/LoaderByPercent/LoaderByPercent.js +3 -5
  157. package/lib/components/Map/Map.js +4 -5
  158. package/lib/components/Map/index.js +2 -3
  159. package/lib/components/Modal/Modal.js +2 -3
  160. package/lib/components/NarrowHeader.js +9 -9
  161. package/lib/components/PointInfo/PointInfo.js +2 -3
  162. package/lib/components/PointInfo/index.js +2 -3
  163. package/lib/components/PopupModal/PopupModal.js +2 -3
  164. package/lib/components/PopupModal/PopupModal.stories.js +4 -7
  165. package/lib/components/Sector/Sector.js +2 -3
  166. package/lib/components/Sector/Sector.test.js +1 -1
  167. package/lib/components/Sector/SectorIconsNew.js +2 -3
  168. package/lib/components/Sector/index.js +2 -3
  169. package/lib/components/Sector/sectorIcons.js +2 -3
  170. package/lib/components/SevereEvent/Eta/Eta.js +4 -5
  171. package/lib/components/SevereEvent/Eta/styles.js +2 -3
  172. package/lib/components/SevereEvent/SevereEvent.js +6 -6
  173. package/lib/components/Spinner/Spinner.js +2 -3
  174. package/lib/components/Spinner/Spinner.stories.js +4 -7
  175. package/lib/components/Spinner/index.js +2 -3
  176. package/lib/components/Spinner/styles.js +4 -7
  177. package/lib/components/Tabs/Tabs.js +5 -7
  178. package/lib/components/Tabs/Tabs.stories.js +3 -5
  179. package/lib/components/Tabs/assets/index.js +1 -1
  180. package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +4 -5
  181. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +4 -5
  182. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +4 -5
  183. package/lib/components/TimeRangeSelector/KandoRangePicker/index.js +2 -3
  184. package/lib/components/TimeRangeSelector/TimeRangeHelper.js +5 -9
  185. package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +2 -3
  186. package/lib/components/TimeRangeSelector/TimeRangeItem/index.js +2 -3
  187. package/lib/components/TimeRangeSelector/TimeRangeList.js +4 -5
  188. package/lib/components/TimeRangeSelector/TimeRangeOptions.js +4 -5
  189. package/lib/components/TimeRangeSelector/TimeRangeSelector.js +5 -7
  190. package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +3 -5
  191. package/lib/components/TimeRangeSelector/constants.js +3 -5
  192. package/lib/components/TimeRangeSelector/index.js +2 -3
  193. package/lib/components/Toggle/Toggle.js +4 -5
  194. package/lib/components/Toggle/index.js +2 -3
  195. package/lib/components/TrendGraph/TrendGraph.js +4 -5
  196. package/lib/components/TrendGraph/index.js +2 -3
  197. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +4 -6
  198. package/lib/components/TrendGraphNVL/index.js +2 -3
  199. package/lib/development-environment/index.js +2 -3
  200. package/lib/development-environment/mock/browser.js +2 -3
  201. package/lib/development-environment/mock/get.js +2 -3
  202. package/lib/development-environment/mock/handlers.js +2 -3
  203. package/lib/development-environment/mock/mockBus.js +3 -5
  204. package/lib/development-environment/mock/mockObjects/area-trends-graph.js +2 -3
  205. package/lib/development-environment/mock/mockObjects/areaInformation.js +2 -3
  206. package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +2 -3
  207. package/lib/development-environment/mock/mockObjects/areaSitesData.js +2 -3
  208. package/lib/development-environment/mock/mockObjects/areasJson.js +2 -3
  209. package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +2 -3
  210. package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +2 -3
  211. package/lib/development-environment/mock/mockObjects/data-menuData.js +2 -3
  212. package/lib/development-environment/mock/mockObjects/data-search.js +2 -3
  213. package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +2 -3
  214. package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +2 -3
  215. package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +2 -3
  216. package/lib/development-environment/mock/mockObjects/eventsJson.js +2 -3
  217. package/lib/development-environment/mock/mockObjects/metascore.js +2 -3
  218. package/lib/development-environment/mock/mockObjects/permissionsJson.js +2 -3
  219. package/lib/development-environment/mock/mockObjects/pointsJson.js +2 -3
  220. package/lib/development-environment/mock/mockObjects/site-info.js +2 -3
  221. package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +2 -3
  222. package/lib/development-environment/togly/ToglyDashboard.js +4 -5
  223. package/lib/development-environment/togly/ToglyItem.js +4 -5
  224. package/lib/development-environment/togly/flags.js +1 -1
  225. package/lib/development-environment/togly/init.js +1 -1
  226. package/lib/development-environment/togly/macro.js +1 -1
  227. package/lib/development-environment/togly/useDoubleKeyDown.js +2 -3
  228. package/lib/development-environment/togly/useLocalStorage.js +2 -3
  229. package/lib/hooks/useApi.js +30 -32
  230. package/lib/hooks/useApiWithDashboardQuery.js +3 -5
  231. package/lib/hooks/useClickOutside.js +2 -3
  232. package/lib/hooks/useInitializeHeaders.js +2 -3
  233. package/lib/hooks/useKandoFetch.js +2 -3
  234. package/lib/hooks/useMap.js +2 -3
  235. package/lib/hooks/useNavContext.js +2 -3
  236. package/lib/hooks/useQueryURL.js +2 -3
  237. package/lib/hooks/useRemoveExistingLayers.js +2 -3
  238. package/lib/hooks/useUpdateEventBodyTail.js +2 -3
  239. package/lib/hooks/useUserTimeZone.js +8 -15
  240. package/lib/hooks/useUserTimeZone.test.js +3 -3
  241. package/lib/hooks/useWindowSize.js +1 -1
  242. package/lib/index.js +4 -5
  243. package/lib/macros/getVersion.js +2 -2
  244. package/lib/models/IAction.js +1 -1
  245. package/lib/models/IAppState.js +1 -1
  246. package/lib/pages/AreaPage/AreaPage.js +28 -31
  247. package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +4 -5
  248. package/lib/pages/AreaPage/Dashboard/Dashboard.js +4 -5
  249. package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +4 -5
  250. package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +2 -3
  251. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +2 -3
  252. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +2 -3
  253. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +3 -5
  254. package/lib/pages/AreaPage/Dashboard/Sites/SitesResponse.interface.js +1 -1
  255. package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +2 -3
  256. package/lib/pages/AreaPage/Dashboard/Sites/styles.js +4 -7
  257. package/lib/pages/AssessmentPage/AssessmentPage.js +4 -5
  258. package/lib/pages/CannyWidget/Feedback.js +7 -8
  259. package/lib/pages/CovidPage/CovidPage.js +4 -5
  260. package/lib/pages/CovidPage/components/Body.js +4 -5
  261. package/lib/pages/CovidPage/components/Map.js +4 -5
  262. package/lib/pages/CovidPage/components/Sidebar.js +4 -5
  263. package/lib/pages/CovidPage/components/Summary.js +4 -5
  264. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +4 -6
  265. package/lib/pages/CovidPage/components/TrendGraphNVL/index.js +2 -3
  266. package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +4 -5
  267. package/lib/pages/CovidPage/components/TrendPopupContent/index.js +2 -3
  268. package/lib/pages/CovidPage/components/areas/Area.js +4 -5
  269. package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +4 -5
  270. package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +4 -5
  271. package/lib/pages/CovidPage/components/areas/AreasList.js +4 -5
  272. package/lib/pages/CovidPage/components/areas/Sort.js +4 -5
  273. package/lib/pages/CovidPage/components/nvlStatusHelper.js +5 -9
  274. package/lib/pages/DashboardMap/AreaCard.js +2 -3
  275. package/lib/pages/DashboardMap/AssessmentIcon.js +2 -3
  276. package/lib/pages/DashboardMap/Capacity.js +39 -45
  277. package/lib/pages/DashboardMap/FactoryCard.js +2 -3
  278. package/lib/pages/DashboardMap/HighchartsOptions.js +2 -3
  279. package/lib/pages/DashboardMap/List.js +7 -7
  280. package/lib/pages/DashboardMap/ListContext.js +5 -7
  281. package/lib/pages/DashboardMap/Loader.js +2 -3
  282. package/lib/pages/DashboardMap/SeverityBadge.js +2 -3
  283. package/lib/pages/DashboardMap/WWTPMap.js +4 -5
  284. package/lib/pages/DashboardMap/WaterDischarge.js +2 -3
  285. package/lib/pages/DashboardMap/Widget.js +5 -7
  286. package/lib/pages/DashboardMap/index.js +2 -3
  287. package/lib/pages/DashboardMap/utils.js +12 -23
  288. package/lib/pages/EventsPage/Body/Body.js +4 -5
  289. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +3 -3
  290. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +5 -9
  291. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +2 -3
  292. package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +2 -3
  293. package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +1 -1
  294. package/lib/pages/EventsPage/DragAndDropArea/index.js +2 -3
  295. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +4 -5
  296. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +5 -9
  297. package/lib/pages/EventsPage/EventsPage.js +4 -5
  298. package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +4 -5
  299. package/lib/pages/EventsPage/events/MoreInfo.js +4 -5
  300. package/lib/pages/EventsPage/events/Sidebar.js +15 -15
  301. package/lib/pages/EventsPage/events/event_info/Contaminants/Contaminants.js +2 -3
  302. package/lib/pages/EventsPage/events/event_info/Contaminants/ContaminantsList.js +2 -3
  303. package/lib/pages/EventsPage/events/event_info/Contaminants/index.js +2 -3
  304. package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +4 -5
  305. package/lib/pages/EventsPage/events/event_info/EventDetails.js +2 -3
  306. package/lib/pages/EventsPage/events/event_info/EventInfo.js +4 -5
  307. package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +2 -3
  308. package/lib/pages/EventsPage/events/event_info/EventSection.js +2 -3
  309. package/lib/pages/EventsPage/events/event_info/EventSection.test.js +1 -1
  310. package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +4 -5
  311. package/lib/pages/EventsPage/events/event_info/Header/Header.js +2 -3
  312. package/lib/pages/EventsPage/events/event_info/Header/HeaderContainer.js +4 -5
  313. package/lib/pages/EventsPage/events/event_info/Header/index.js +2 -3
  314. package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +2 -3
  315. package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +4 -5
  316. package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +2 -3
  317. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionAssessment.js +2 -3
  318. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionTypesList.js +2 -3
  319. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /index.js +2 -3
  320. package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +4 -5
  321. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResult.js +4 -5
  322. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResultButton.js +2 -3
  323. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/index.js +2 -3
  324. package/lib/pages/EventsPage/events/event_info/SamplingList/SamplingDetails.js +2 -3
  325. package/lib/pages/EventsPage/events/event_info/SamplingList/Samplings.js +4 -5
  326. package/lib/pages/EventsPage/events/event_info/SamplingList/index.js +2 -3
  327. package/lib/pages/EventsPage/events/event_info/SeverityScore/ScoreExplanation.js +2 -3
  328. package/lib/pages/EventsPage/events/event_info/SeverityScore/SeverityScore.js +2 -3
  329. package/lib/pages/EventsPage/events/event_info/SeverityScore/index.js +2 -3
  330. package/lib/pages/EventsPage/events/event_info/SourceDetails/Confidence.js +2 -3
  331. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.js +2 -3
  332. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.test.js +1 -1
  333. package/lib/pages/EventsPage/events/event_info/SourceDetails/IconAndTitles.js +2 -3
  334. package/lib/pages/EventsPage/events/event_info/SourceDetails/MoreInfoButton.js +3 -5
  335. package/lib/pages/EventsPage/events/event_info/SourceDetails/OtherSources.js +2 -3
  336. package/lib/pages/EventsPage/events/event_info/SourceDetails/PotentialSources.js +2 -3
  337. package/lib/pages/EventsPage/events/event_info/SourceDetails/SingleSource.js +2 -3
  338. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceCardBody.js +2 -3
  339. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.js +2 -3
  340. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.test.js +3 -3
  341. package/lib/pages/EventsPage/events/event_info/SourceDetails/WaterDischarge.js +2 -3
  342. package/lib/pages/EventsPage/events/event_info/Timelines/DischargeBox.js +2 -3
  343. package/lib/pages/EventsPage/events/event_info/Timelines/EarlyWarning.js +2 -3
  344. package/lib/pages/EventsPage/events/event_info/Timelines/LiveStatusBadge.js +2 -3
  345. package/lib/pages/EventsPage/events/event_info/Timelines/SeenBox.js +2 -3
  346. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.js +2 -3
  347. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.test.js +1 -1
  348. package/lib/pages/EventsPage/events/event_info/Timelines/Titles.js +2 -3
  349. package/lib/pages/EventsPage/events/event_info/Timelines/index.js +2 -3
  350. package/lib/pages/EventsPage/events/event_info/Timelines/style.js +3 -5
  351. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +4 -5
  352. package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +4 -5
  353. package/lib/pages/EventsPage/events/event_info/samplingsOld/Sampling.js +2 -3
  354. package/lib/pages/EventsPage/events/event_info/samplingsOld/Samplings.js +2 -3
  355. package/lib/pages/EventsPage/events/event_info/sources/Source.js +2 -3
  356. package/lib/pages/EventsPage/events/event_info/sources/Sources.js +4 -5
  357. package/lib/pages/EventsPage/events/event_info/styles.js +3 -5
  358. package/lib/pages/EventsPage/events/events_list/EventItem.js +4 -5
  359. package/lib/pages/EventsPage/events/events_list/EventUtils.js +4 -7
  360. package/lib/pages/EventsPage/events/events_list/EventsList.js +5 -6
  361. package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +4 -5
  362. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +4 -5
  363. package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +4 -5
  364. package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +4 -5
  365. package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +4 -5
  366. package/lib/pages/EventsPage/events/events_list/Sort.js +4 -5
  367. package/lib/pages/ImportFileWizard/FileUploadRespones.js +2 -3
  368. package/lib/pages/ImportFileWizard/ImportButtomButtons.js +2 -3
  369. package/lib/pages/ImportFileWizard/ImportFile.js +4 -5
  370. package/lib/pages/ImportFileWizard/ResponseBody.js +2 -3
  371. package/lib/pages/ImportFileWizard/ValidationForm.js +2 -3
  372. package/lib/pages/ImportFileWizard/ValidationResponse.js +4 -5
  373. package/lib/pages/ImportFileWizard/importFileUtils.js +4 -5
  374. package/lib/pages/ImportFileWizard/index.js +2 -3
  375. package/lib/pages/ImportGisPage/ImportGisContainer.js +5 -7
  376. package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +2 -3
  377. package/lib/pages/ImportGisPage/importGisUtils.js +5 -7
  378. package/lib/pages/ImportGisProcess/index.js +2 -3
  379. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +4 -5
  380. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +2 -3
  381. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +2 -3
  382. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +4 -5
  383. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +3 -5
  384. package/lib/pages/NotificationsPage/Notification/Notification.js +2 -3
  385. package/lib/pages/NotificationsPage/Notifications.interface.js +1 -1
  386. package/lib/pages/NotificationsPage/Notifications.mock.js +2 -3
  387. package/lib/pages/NotificationsPage/Notifications.stories.js +3 -5
  388. package/lib/pages/NotificationsPage/NotificationsPage.js +4 -5
  389. package/lib/pages/NotificationsPage/assets/index.js +1 -1
  390. package/lib/pages/NotificationsPageV2/NotificationsPage.js +5 -7
  391. package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +2 -3
  392. package/lib/pages/NotificationsPageV2/components/NotificationsForm/EventType.js +2 -3
  393. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSendVia.js +2 -3
  394. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSensors.js +2 -3
  395. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSources.js +2 -3
  396. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationTags.js +2 -3
  397. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +5 -7
  398. package/lib/pages/NotificationsPageV2/components/NotificationsForm/WaterAuthoritySelection.js +2 -3
  399. package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +4 -5
  400. package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +17 -33
  401. package/lib/pages/NotificationsPageV2/notificationUtils.js +9 -15
  402. package/lib/pages/OldSitePage/IDashboardData.js +1 -1
  403. package/lib/pages/OldSitePage/OldSitePage.js +51 -56
  404. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +5 -9
  405. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +3 -5
  406. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +2 -3
  407. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +2 -3
  408. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +5 -9
  409. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +4 -5
  410. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +3 -5
  411. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +3 -5
  412. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +5 -9
  413. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +4 -5
  414. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +2 -3
  415. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +4 -5
  416. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +4 -7
  417. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +6 -11
  418. package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +4 -5
  419. package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +4 -5
  420. package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +3 -5
  421. package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +2 -3
  422. package/lib/pages/OldSitePage/SamplingParameters/models.js +1 -1
  423. package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +4 -7
  424. package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +3 -5
  425. package/lib/pages/OperationsPage/LeftPanel.js +4 -5
  426. package/lib/pages/OperationsPage/Map/Map.js +4 -5
  427. package/lib/pages/OperationsPage/Map/useMap.js +5 -6
  428. package/lib/pages/OperationsPage/OperationsPage.js +4 -5
  429. package/lib/pages/OperationsPage/RightPanel.js +2 -3
  430. package/lib/pages/OperationsPage/index.js +2 -3
  431. package/lib/pages/PollutionRiskAssessment/FactoryDetails.js +28 -31
  432. package/lib/pages/PollutionRiskAssessment/FilterBehaviors.js +4 -5
  433. package/lib/pages/PollutionRiskAssessment/FilterButton.js +2 -3
  434. package/lib/pages/PollutionRiskAssessment/Map.js +4 -5
  435. package/lib/pages/PollutionRiskAssessment/SearchButton.js +2 -3
  436. package/lib/pages/PollutionRiskAssessment/SearchField.js +4 -5
  437. package/lib/pages/PollutionRiskAssessment/TotalSavings.js +2 -3
  438. package/lib/pages/PollutionRiskAssessment/UseCases.js +2 -3
  439. package/lib/pages/PollutionRiskAssessment/index.js +28 -31
  440. package/lib/pages/PollutionRiskAssessment/useMap.js +4 -5
  441. package/lib/pages/PollutionRiskAssessment/utils.js +2 -3
  442. package/lib/pages/ProfilePage/Container.js +2 -3
  443. package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +4 -5
  444. package/lib/pages/ProfilePage/ProfilePage.js +4 -5
  445. package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +4 -5
  446. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +4 -7
  447. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +3 -3
  448. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +69 -74
  449. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +4 -5
  450. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +2 -3
  451. package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +4 -7
  452. package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +2 -3
  453. package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +2 -3
  454. package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +2 -3
  455. package/lib/pages/SamplingsPage/DesktopActions/index.js +2 -3
  456. package/lib/pages/SamplingsPage/NavigationDropdown.js +3 -5
  457. package/lib/pages/SamplingsPage/NewSamplingAction.js +20 -23
  458. package/lib/pages/SamplingsPage/SamplingMobileModal.js +2 -3
  459. package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +2 -3
  460. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +2 -3
  461. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +4 -5
  462. package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +4 -5
  463. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +2 -3
  464. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +85 -92
  465. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +4 -5
  466. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +4 -5
  467. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +4 -5
  468. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +12 -21
  469. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +3 -5
  470. package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +2 -3
  471. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +4 -5
  472. package/lib/pages/SamplingsPage/SamplingsMobileList.js +4 -5
  473. package/lib/pages/SamplingsPage/SamplingsPage.js +5 -7
  474. package/lib/pages/SamplingsPage/SamplingsPageContainer.js +4 -5
  475. package/lib/pages/SamplingsPage/index.js +2 -3
  476. package/lib/pages/SamplingsPage/samplingsPageUtils.js +20 -39
  477. package/lib/pages/SitePage/DischargePattern/DischargePattern.js +3 -5
  478. package/lib/pages/SitePage/PollutionContributor/PollutionContributor.js +2 -3
  479. package/lib/pages/SitePage/PollutionContributor/PollutionContributorContainer.js +2 -3
  480. package/lib/pages/SitePage/PollutionContributor/contributorUtils.js +3 -5
  481. package/lib/pages/SitePage/PollutionContributor/index.js +2 -3
  482. package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +3 -5
  483. package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +5 -9
  484. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +2 -3
  485. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +1 -1
  486. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +2 -3
  487. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +1 -1
  488. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +5 -9
  489. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +4 -5
  490. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +3 -5
  491. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +3 -5
  492. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +5 -9
  493. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +4 -5
  494. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +2 -3
  495. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +4 -5
  496. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +5 -9
  497. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +6 -11
  498. package/lib/pages/SitePage/SamplingParameters/body/Body.js +2 -3
  499. package/lib/pages/SitePage/SamplingParameters/body/BodyContainer.js +4 -5
  500. package/lib/pages/SitePage/SamplingParameters/body/index.js +2 -3
  501. package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +4 -5
  502. package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +4 -5
  503. package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +3 -5
  504. package/lib/pages/SitePage/SamplingParameters/dataParser.js +2 -3
  505. package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +1 -1
  506. package/lib/pages/SitePage/SamplingParameters/models.js +1 -1
  507. package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +4 -7
  508. package/lib/pages/SitePage/SamplingParameters/styles/styles.js +3 -5
  509. package/lib/pages/SitePage/SiteInformation/EmptyState.js +2 -3
  510. package/lib/pages/SitePage/SiteInformation/SiteInformation.js +5 -5
  511. package/lib/pages/SitePage/SitePage.js +28 -31
  512. package/lib/pages/UploadLabResult/index.js +2 -3
  513. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +10 -9
  514. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +4 -7
  515. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +6 -11
  516. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +3 -5
  517. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +4 -5
  518. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +2 -3
  519. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +2 -3
  520. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +2 -3
  521. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +2 -3
  522. package/lib/pages/UtilityDashboardPage/MostSevereEvents/models.js +1 -1
  523. package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +2 -3
  524. package/lib/pages/UtilityDashboardPage/TopBar/constants.js +2 -3
  525. package/lib/pages/UtilityDashboardPage/TopBar/styles.js +2 -3
  526. package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +5 -7
  527. package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +6 -11
  528. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +4 -5
  529. package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +4 -5
  530. package/lib/pages/UtilityDashboardPage/VirtualAreaDashboardPage.js +4 -5
  531. package/lib/pages/WbeDashboard/ExpandableComponent.js +4 -5
  532. package/lib/pages/WbeDashboard/GraphWrapper.js +4 -5
  533. package/lib/pages/WbeDashboard/IndividualTinyGraph.js +4 -5
  534. package/lib/pages/WbeDashboard/SearchInput.js +4 -5
  535. package/lib/pages/WbeDashboard/SummaryGraph.js +23 -26
  536. package/lib/pages/WbeDashboard/SummaryGraphModal.js +2 -3
  537. package/lib/pages/WbeDashboard/Tabs.js +2 -3
  538. package/lib/pages/WbeDashboard/WbeDashboardPage.js +4 -5
  539. package/lib/pages/WbeDashboard/WbeSummaryBar.js +4 -5
  540. package/lib/pages/WwtpPage/DashboardCard.js +2 -3
  541. package/lib/pages/WwtpPage/DischargePatternCard.js +5 -7
  542. package/lib/pages/WwtpPage/InletsCard/InletsBar.js +2 -3
  543. package/lib/pages/WwtpPage/InletsCard/InletsCard.js +2 -3
  544. package/lib/pages/WwtpPage/InletsCard/index.js +2 -3
  545. package/lib/pages/WwtpPage/Map.js +4 -4
  546. package/lib/pages/WwtpPage/OrganicCard.js +2 -3
  547. package/lib/pages/WwtpPage/PotentialSaving/ImpactCard.js +2 -3
  548. package/lib/pages/WwtpPage/PotentialSaving/PotentialItem.js +2 -3
  549. package/lib/pages/WwtpPage/PotentialSaving/PotentialSaving.js +2 -3
  550. package/lib/pages/WwtpPage/PotentialSaving/PotentialSavingContainer.js +2 -3
  551. package/lib/pages/WwtpPage/PotentialSaving/index.js +2 -3
  552. package/lib/pages/WwtpPage/PotentialSaving/types.js +1 -1
  553. package/lib/pages/WwtpPage/PredictionCard.js +2 -3
  554. package/lib/pages/WwtpPage/TrendCard.js +2 -3
  555. package/lib/pages/WwtpPage/UpgradeBox.js +2 -3
  556. package/lib/pages/WwtpPage/WwtpPage.js +2 -3
  557. package/lib/pages/WwtpPage/WwtpPageContainer.js +2 -3
  558. package/lib/pages/WwtpPage/index.js +2 -3
  559. package/lib/providers/Slideshow/SlideshowContext.js +4 -7
  560. package/lib/providers/Slideshow/SlideshowProvider.js +4 -5
  561. package/lib/providers/Slideshow/SlideshowRunner.js +2 -3
  562. package/lib/providers/UrlHistory/UrlHistoryContext.js +4 -7
  563. package/lib/providers/UrlHistory/UrlHistoryProvider.js +4 -5
  564. package/lib/providers/UrlHistory/index.js +1 -1
  565. package/lib/providers/UrlHistory/useLastVisited.js +2 -3
  566. package/lib/react-app-env.d.js +1 -1
  567. package/lib/store/ImportGis/action.js +1 -1
  568. package/lib/store/ImportGis/actionTypes.js +4 -5
  569. package/lib/store/ImportGis/actionsCreator.js +1 -1
  570. package/lib/store/ImportGis/models/gisImports.js +1 -1
  571. package/lib/store/ImportGis/reducer.js +1 -1
  572. package/lib/store/WBE/actionTypes.js +2 -3
  573. package/lib/store/WBE/actions.js +1 -1
  574. package/lib/store/WBE/models/IAreaWBE.js +1 -1
  575. package/lib/store/WBE/models/IWBE.js +1 -1
  576. package/lib/store/WBE/models/IWBEState.js +1 -1
  577. package/lib/store/WBE/reducer.js +1 -1
  578. package/lib/store/WWTPDashboard/WWTPDashboardSlice.js +5 -9
  579. package/lib/store/WWTPDashboard/types.js +1 -1
  580. package/lib/store/areas/actionTypes.js +4 -7
  581. package/lib/store/areas/actions.js +1 -1
  582. package/lib/store/areas/models/IArea.js +1 -1
  583. package/lib/store/areas/models/IAreasState.js +1 -1
  584. package/lib/store/areas/reducer.js +1 -1
  585. package/lib/store/context/actionTypes.js +3 -5
  586. package/lib/store/context/actions.js +1 -1
  587. package/lib/store/context/contextMiddlewares.js +2 -3
  588. package/lib/store/context/models/INavContext.js +1 -1
  589. package/lib/store/context/models/INavContextState.js +1 -1
  590. package/lib/store/context/reducer.js +1 -1
  591. package/lib/store/dashboard/dashboardSlice.js +3 -5
  592. package/lib/store/dashboard/periodType.js +1 -1
  593. package/lib/store/edges/actionTypes.js +5 -9
  594. package/lib/store/edges/actions.js +1 -1
  595. package/lib/store/edges/models/IEdge.js +1 -1
  596. package/lib/store/edges/models/IEdgesState.js +1 -1
  597. package/lib/store/edges/reducer.js +1 -1
  598. package/lib/store/events/actionTypes.js +17 -33
  599. package/lib/store/events/actions.js +1 -1
  600. package/lib/store/events/models/IEvent.js +1 -1
  601. package/lib/store/events/models/IEventsState.js +1 -1
  602. package/lib/store/events/models/ISource.js +1 -1
  603. package/lib/store/events/reducer.js +1 -1
  604. package/lib/store/filters/IFilter.js +1 -1
  605. package/lib/store/filters/IFilterItem.js +1 -1
  606. package/lib/store/global/actionTypes.js +11 -21
  607. package/lib/store/global/actions.js +1 -1
  608. package/lib/store/global/models/IGlobalState.js +1 -1
  609. package/lib/store/global/reducer.js +1 -1
  610. package/lib/store/permissions/permissionsSlice.js +2 -3
  611. package/lib/store/points/actionTypes.js +3 -5
  612. package/lib/store/points/actions.js +1 -1
  613. package/lib/store/points/models/IGeoPoint.js +1 -1
  614. package/lib/store/points/models/IGroup.js +1 -1
  615. package/lib/store/points/models/IIssue.js +1 -1
  616. package/lib/store/points/models/IPoint.js +1 -1
  617. package/lib/store/points/models/IPointsState.js +1 -1
  618. package/lib/store/points/reducer.js +1 -1
  619. package/lib/store/rootActionTypes.js +2 -3
  620. package/lib/store/rootActions.js +1 -1
  621. package/lib/store/rootReducer.js +2 -3
  622. package/lib/store/rootStore.js +1 -1
  623. package/lib/store/samplings/action.js +1 -1
  624. package/lib/store/samplings/actionTypes.js +4 -5
  625. package/lib/store/samplings/actionsCreator.js +1 -1
  626. package/lib/store/samplings/models/Samplings.js +1 -1
  627. package/lib/store/samplings/reducer.js +1 -1
  628. package/lib/styles/StylesLayout.js +2 -3
  629. package/lib/styles/theme/theme.js +4 -7
  630. package/lib/test/mocks/browser.js +2 -3
  631. package/lib/test/test-utils.js +1 -1
  632. package/lib/ui-kit/Alert/KandoAlert.js +2 -3
  633. package/lib/ui-kit/Button/Button.js +4 -7
  634. package/lib/ui-kit/Button/Button.test.js +3 -3
  635. package/lib/ui-kit/Button/ButtonUtils.js +1 -1
  636. package/lib/ui-kit/Checkbox/Checkbox.js +3 -5
  637. package/lib/ui-kit/ContentCard/ContentCard.js +2 -3
  638. package/lib/ui-kit/Dashboard/Dashboard.js +4 -5
  639. package/lib/ui-kit/Dashboard/index.js +2 -3
  640. package/lib/ui-kit/DropDown/DropDown.js +2 -3
  641. package/lib/ui-kit/DropDown/DropDown.test.js +1 -1
  642. package/lib/ui-kit/DropDown/DropDownItem.js +3 -5
  643. package/lib/ui-kit/DropDown/DropdownToggle.js +3 -5
  644. package/lib/ui-kit/EmptyState/EmptyState.js +2 -3
  645. package/lib/ui-kit/IconAction/IconAction.js +2 -3
  646. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +4 -5
  647. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +2 -3
  648. package/lib/ui-kit/InletsPie/InletsPie.js +2 -3
  649. package/lib/ui-kit/InletsPie/index.js +2 -3
  650. package/lib/ui-kit/InletsPie/options.js +3 -5
  651. package/lib/ui-kit/KandoBottomSheet/KandoBottomSheet.js +4 -5
  652. package/lib/ui-kit/KandoFilter/KandoFilter.js +2 -3
  653. package/lib/ui-kit/KandoList/KandoList.js +4 -5
  654. package/lib/ui-kit/KandoList/kandoListUtils.js +1 -1
  655. package/lib/ui-kit/KandoTable/KandoTable.js +4 -5
  656. package/lib/ui-kit/KandoTable/KandoTable.test.js +1 -1
  657. package/lib/ui-kit/KandoTable/kandoTableUtils.js +1 -1
  658. package/lib/ui-kit/Layout/Layout.js +2 -3
  659. package/lib/ui-kit/MobileInput/MobileInput.js +2 -3
  660. package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +2 -3
  661. package/lib/ui-kit/ModalConfirmation/index.js +2 -3
  662. package/lib/ui-kit/OrganicEvents/GaugeChart.js +2 -3
  663. package/lib/ui-kit/OrganicEvents/OrganicEvents.js +2 -3
  664. package/lib/ui-kit/OrganicEvents/OrganicEventsContainer.js +2 -3
  665. package/lib/ui-kit/OrganicEvents/TextInfo.js +2 -3
  666. package/lib/ui-kit/OrganicEvents/index.js +2 -3
  667. package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +2 -3
  668. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +2 -3
  669. package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +3 -5
  670. package/lib/ui-kit/ScoreGauge/ScoreGauge.js +3 -5
  671. package/lib/ui-kit/ScoreGauge/constant.js +2 -3
  672. package/lib/ui-kit/ScoreGauge/index.js +2 -3
  673. package/lib/ui-kit/TimeLineChart/TrendChart.js +2 -3
  674. package/lib/ui-kit/TimeLineChart/index.js +2 -3
  675. package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +3 -5
  676. package/lib/ui-kit/Tooltip/Tooltip.js +2 -3
  677. package/lib/ui-kit/index.js +1 -1
  678. package/lib/ui-kit/kandoStepper/KandoStepper.js +2 -3
  679. package/lib/ui-kit/siteName/SiteName.js +2 -3
  680. package/lib/utilities/ActionUtility.js +1 -1
  681. package/lib/utilities/Alert.js +2 -3
  682. package/lib/utilities/Analytics.js +2 -3
  683. package/lib/utilities/Array.js +3 -5
  684. package/lib/utilities/Enum.js +26 -29
  685. package/lib/utilities/ErrorBoundary.js +9 -9
  686. package/lib/utilities/File.js +42 -48
  687. package/lib/utilities/GetDir.js +2 -3
  688. package/lib/utilities/KandoDate.js +3 -5
  689. package/lib/utilities/KandoModal.js +4 -5
  690. package/lib/utilities/LocalStorage.js +5 -9
  691. package/lib/utilities/ThousandsToK.js +2 -3
  692. package/lib/utilities/TimeFormat.js +4 -5
  693. package/lib/utilities/Truncate.js +4 -5
  694. package/lib/utilities/edgesMath.js +6 -7
  695. package/lib/utilities/i18n.js +2 -3
  696. package/lib/utilities/kql.js +3 -5
  697. package/lib/utilities/map/icons.js +2 -3
  698. package/lib/utilities/polylinedecorator.js +3 -5
  699. package/lib/utilities/scoreToData.js +6 -11
  700. package/lib/utilities/scoreToData.test.js +1 -1
  701. package/lib/utilities/time.js +4 -7
  702. package/lib/utilities/uploadToS3.js +2 -3
  703. package/lib/utilities/urls.js +4 -7
  704. package/package.json +1 -1
@@ -28,11 +28,10 @@ var _MapUtils = require("../MapUtils");
28
28
  var _PointIcon = require("./PointIcon");
29
29
  var _water_reuse = _interopRequireDefault(require("../../../assets/icons/water_reuse.svg"));
30
30
  var _utils = require("pages/DashboardMap/utils");
31
- var isCollectorFocused = function isCollectorFocused(point, event) {
31
+ var isCollectorFocused = exports.isCollectorFocused = function isCollectorFocused(point, event) {
32
32
  var _event$observations;
33
33
  return (event === null || event === void 0 ? void 0 : (_event$observations = event.observations) === null || _event$observations === void 0 ? void 0 : _event$observations.length) === 1 && point.id === event.observations[0].point_id;
34
34
  };
35
- exports.isCollectorFocused = isCollectorFocused;
36
35
  var buildManholeTooltipString = function buildManholeTooltipString(point) {
37
36
  var string = "".concat(point.group.name, " ");
38
37
  if (pointIsFactory(point)) {
@@ -43,15 +42,14 @@ var buildManholeTooltipString = function buildManholeTooltipString(point) {
43
42
  }
44
43
  return string;
45
44
  };
46
- var bubbleForWWTP = function bubbleForWWTP(args) {
45
+ var bubbleForWWTP = exports.bubbleForWWTP = function bubbleForWWTP(args) {
47
46
  var pointCustomIcon = _leaflet.default.marker(args.markerLocation, {
48
47
  icon: getIcon(args.wwtpPoint, false),
49
48
  riseOnHover: true
50
49
  });
51
50
  return pointCustomIcon;
52
51
  };
53
- exports.bubbleForWWTP = bubbleForWWTP;
54
- var createBubblePoint = function createBubblePoint(markerLocation, point, map, hovered, layerGroup) {
52
+ var createBubblePoint = exports.createBubblePoint = function createBubblePoint(markerLocation, point, map, hovered, layerGroup) {
55
53
  var flow_rate_unit = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'gd_us';
56
54
  var handleClick = arguments.length > 6 ? arguments[6] : undefined;
57
55
  var subtitle = pointIsFactory(point) ? point.group.sector_name : '';
@@ -85,8 +83,7 @@ var createBubblePoint = function createBubblePoint(markerLocation, point, map, h
85
83
  if (hovered) _pointCustomIcon['kando_object'] = 'IconNumberHovered';
86
84
  }
87
85
  };
88
- exports.createBubblePoint = createBubblePoint;
89
- var createManholePoint = function createManholePoint(markerLocation, point, map, hovered, layerGroup) {
86
+ var createManholePoint = exports.createManholePoint = function createManholePoint(markerLocation, point, map, hovered, layerGroup) {
90
87
  var pointIcon = new _leaflet.default.Icon({
91
88
  iconUrl: _whitePoint.default,
92
89
  iconSize: [9, 9],
@@ -103,8 +100,7 @@ var createManholePoint = function createManholePoint(markerLocation, point, map,
103
100
  if (hovered) manholeIcon['kando_object'] = 'PointHovered';
104
101
  layerGroup.addLayer(manholeIcon);
105
102
  };
106
- exports.createManholePoint = createManholePoint;
107
- var matchIconToPoint = function matchIconToPoint(point, event) {
103
+ var matchIconToPoint = exports.matchIconToPoint = function matchIconToPoint(point, event) {
108
104
  switch (point.group.type) {
109
105
  case 'Groups::Factory':
110
106
  if (combinedFactoryIcon.length === 2) {
@@ -157,8 +153,7 @@ var matchIconToPoint = function matchIconToPoint(point, event) {
157
153
  return null;
158
154
  }
159
155
  };
160
- exports.matchIconToPoint = matchIconToPoint;
161
- var standardBackground = function standardBackground() {
156
+ var standardBackground = exports.standardBackground = function standardBackground() {
162
157
  var secondary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
163
158
  var third = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
164
159
  return _leaflet.default.icon({
@@ -168,8 +163,7 @@ var standardBackground = function standardBackground() {
168
163
  popupAnchor: [0, -30]
169
164
  });
170
165
  };
171
- exports.standardBackground = standardBackground;
172
- var combinedFactoryIcon = [_leaflet.default.icon({
166
+ var combinedFactoryIcon = exports.combinedFactoryIcon = [_leaflet.default.icon({
173
167
  iconUrl: _yellowCircle.default,
174
168
  iconSize: [0, 0],
175
169
  iconAnchor: [10.7, 33.7],
@@ -180,8 +174,7 @@ var combinedFactoryIcon = [_leaflet.default.icon({
180
174
  iconAnchor: [5, 30],
181
175
  popupAnchor: [0, -30]
182
176
  })];
183
- exports.combinedFactoryIcon = combinedFactoryIcon;
184
- var combinedPumpStationIcon = [_leaflet.default.icon({
177
+ var combinedPumpStationIcon = exports.combinedPumpStationIcon = [_leaflet.default.icon({
185
178
  iconUrl: _greenCircle.default,
186
179
  iconSize: [0, 0],
187
180
  iconAnchor: [10.7, 33.7],
@@ -192,15 +185,13 @@ var combinedPumpStationIcon = [_leaflet.default.icon({
192
185
  iconAnchor: [7, 32],
193
186
  popupAnchor: [0, -30]
194
187
  })];
195
- exports.combinedPumpStationIcon = combinedPumpStationIcon;
196
- var combinedCollectorsIcon = [_leaflet.default.icon({
188
+ var combinedCollectorsIcon = exports.combinedCollectorsIcon = [_leaflet.default.icon({
197
189
  iconUrl: _pinWater.default,
198
190
  iconSize: [0, 0],
199
191
  iconAnchor: [25, 50],
200
192
  popupAnchor: [0, -30]
201
193
  })];
202
- exports.combinedCollectorsIcon = combinedCollectorsIcon;
203
- var combinedWWTPIcon = [_leaflet.default.icon({
194
+ var combinedWWTPIcon = exports.combinedWWTPIcon = [_leaflet.default.icon({
204
195
  iconUrl: _brightBlueCircle.default,
205
196
  iconSize: [0, 0],
206
197
  iconAnchor: [10.7, 33.7],
@@ -211,8 +202,7 @@ var combinedWWTPIcon = [_leaflet.default.icon({
211
202
  iconAnchor: [8, 31],
212
203
  popupAnchor: [0, -30]
213
204
  })];
214
- exports.combinedWWTPIcon = combinedWWTPIcon;
215
- var selectedBackground = function selectedBackground() {
205
+ var selectedBackground = exports.selectedBackground = function selectedBackground() {
216
206
  return _leaflet.default.icon({
217
207
  iconUrl: _redPinRedShadow.default,
218
208
  iconSize: [0, 0],
@@ -220,8 +210,7 @@ var selectedBackground = function selectedBackground() {
220
210
  popupAnchor: [0, -30]
221
211
  });
222
212
  };
223
- exports.selectedBackground = selectedBackground;
224
- var belongsToSourceBackground = function belongsToSourceBackground() {
213
+ var belongsToSourceBackground = exports.belongsToSourceBackground = function belongsToSourceBackground() {
225
214
  return _leaflet.default.icon({
226
215
  iconUrl: _whitePinRedShadow.default,
227
216
  iconSize: [0, 0],
@@ -229,8 +218,7 @@ var belongsToSourceBackground = function belongsToSourceBackground() {
229
218
  popupAnchor: [0, -30]
230
219
  });
231
220
  };
232
- exports.belongsToSourceBackground = belongsToSourceBackground;
233
- var markerBelongsToSelectedSource = function markerBelongsToSelectedSource(event, point) {
221
+ var markerBelongsToSelectedSource = exports.markerBelongsToSelectedSource = function markerBelongsToSelectedSource(event, point) {
234
222
  var source;
235
223
  if (event !== null && event !== undefined) {
236
224
  source = event.sources.filter(function (source) {
@@ -239,15 +227,13 @@ var markerBelongsToSelectedSource = function markerBelongsToSelectedSource(event
239
227
  }
240
228
  return event !== null && source && event.selected_source === source.point_id;
241
229
  };
242
- exports.markerBelongsToSelectedSource = markerBelongsToSelectedSource;
243
- var markerBelongsToSource = function markerBelongsToSource(event, point) {
230
+ var markerBelongsToSource = exports.markerBelongsToSource = function markerBelongsToSource(event, point) {
244
231
  if (event === undefined) return;
245
232
  return event !== null && event.sources.filter(function (source) {
246
233
  return source.point_id === point.id;
247
234
  })[0];
248
235
  };
249
- exports.markerBelongsToSource = markerBelongsToSource;
250
- var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
236
+ var createSamplingIconPoint = exports.createSamplingIconPoint = function createSamplingIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
251
237
  // iconSize: [width, height],
252
238
  // Icon Anchor: [(-right)(+left), (-down)(+up)]
253
239
  var samplingIcon = [_leaflet.default.icon({
@@ -286,8 +272,7 @@ var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, s
286
272
  layerGroup.addLayer(pointCustomIcon);
287
273
  });
288
274
  };
289
- exports.createSamplingIconPoint = createSamplingIconPoint;
290
- var createObservationIconPoint = function createObservationIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
275
+ var createObservationIconPoint = exports.createObservationIconPoint = function createObservationIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
291
276
  // iconSize: [width, height],
292
277
  // Icon Anchor: [(-right)(+left), (-down)(+up)]
293
278
  var observationIcon = [_leaflet.default.icon({
@@ -324,8 +309,7 @@ var createObservationIconPoint = function createObservationIconPoint(markerLocat
324
309
  layerGroup.addLayer(pointCustomIcon);
325
310
  });
326
311
  };
327
- exports.createObservationIconPoint = createObservationIconPoint;
328
- var createSamplingIcons = function createSamplingIcons(markerLocation, event, point, map, hovered, layerGroup) {
312
+ var createSamplingIcons = exports.createSamplingIcons = function createSamplingIcons(markerLocation, event, point, map, hovered, layerGroup) {
329
313
  var sampledPointIds = event.samplings.map(function (s) {
330
314
  return s.point_id;
331
315
  });
@@ -333,28 +317,25 @@ var createSamplingIcons = function createSamplingIcons(markerLocation, event, po
333
317
  createSamplingIconPoint(markerLocation, matchIconToPoint(point, event) !== null, map, point, event, hovered, layerGroup);
334
318
  }
335
319
  };
336
- exports.createSamplingIcons = createSamplingIcons;
337
- var popupContent = function popupContent(obs, point) {
320
+ var popupContent = exports.popupContent = function popupContent(obs, point) {
338
321
  if (obs === null) {
339
322
  return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(point.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <hr/>\n \n <div id=\"sector\"></div>\n </div>\n </div>\n ");
340
323
  } else {
341
324
  return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(obs.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <div class=\"popup-content__severity\">\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.severity"), "</p>\n <span class=\"").concat('popup-content__severity--' + obs.severity, "\">\n <b class=\"popup-content__severity-b\">\n ").concat(_i18n.default.t("events_overview.severities.".concat(obs.severity)), "\n </b>\n </span>\n </div>\n \n <hr class=\"popup-content__hr\" />\n\n <div class=\"popup-content__discharge-time\">\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.first_seen"), ":</p>\n <span><b id=\"first-seen-popup\"></b></span>\n </div>\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.last_seen"), ":</p>\n <span><b id=\"last-seen-popup\"></b></span>\n </div> \n </div>\n </div>\n </div>\n ");
342
325
  }
343
326
  };
344
- exports.popupContent = popupContent;
345
327
  var getIcon = function getIcon(point, clicked, subtitle) {
346
328
  var type = point.has_device ? point.group.type : 'Groups::default';
347
329
  var subtitleText = subtitle ? subtitle : point.group.sector_name;
348
330
  return (0, _PointIcon.getPointIconByType)(type, point.name, subtitleText, clicked, !clicked);
349
331
  };
350
- var setIcon = function setIcon(element, clicked, point) {
332
+ var setIcon = exports.setIcon = function setIcon(element, clicked, point) {
351
333
  element.setIcon(getIcon(point, clicked));
352
334
  };
353
335
 
354
336
  // round to nearest thousand is used when you want to round the water consumption to the nearest thousand
355
337
  // for example: 234,567 -> 235,000
356
- exports.setIcon = setIcon;
357
- var calculateWaterConsumption = function calculateWaterConsumption(flow_rate_unit, waterConsumption) {
338
+ var calculateWaterConsumption = exports.calculateWaterConsumption = function calculateWaterConsumption(flow_rate_unit, waterConsumption) {
358
339
  var round_to_nearest_k = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
359
340
  var calculated = '0';
360
341
  if (waterConsumption > 0) {
@@ -376,7 +357,6 @@ var calculateWaterConsumption = function calculateWaterConsumption(flow_rate_uni
376
357
  return Math.round(parseFloat(calculated)).toLocaleString();
377
358
  }
378
359
  };
379
- exports.calculateWaterConsumption = calculateWaterConsumption;
380
360
  var roundToNearestThousand = function roundToNearestThousand(number) {
381
361
  // if(isAlreadyRounded(number)) {
382
362
  // return number;
@@ -394,11 +374,10 @@ var roundToNearestThousand = function roundToNearestThousand(number) {
394
374
  // return number === Math.round(number);
395
375
  // }
396
376
 
397
- var translateFlowRate = function translateFlowRate(flow_rate_unit) {
377
+ var translateFlowRate = exports.translateFlowRate = function translateFlowRate(flow_rate_unit) {
398
378
  return _i18n.default.t("dashboard_v2.profile.flow_rate_unit_options.".concat(flow_rate_unit.includes('gd') ? 'gd' : flow_rate_unit));
399
379
  };
400
- exports.translateFlowRate = translateFlowRate;
401
- var handleMarkerEvents = function handleMarkerEvents(map, point, pointCustomIcon, handleClick) {
380
+ var handleMarkerEvents = exports.handleMarkerEvents = function handleMarkerEvents(map, point, pointCustomIcon, handleClick) {
402
381
  var tooltipVisible = false;
403
382
  map.on('zoomstart', function () {
404
383
  map.closePopup();
@@ -433,8 +412,7 @@ var handleMarkerEvents = function handleMarkerEvents(map, point, pointCustomIcon
433
412
  });
434
413
  }
435
414
  };
436
- exports.handleMarkerEvents = handleMarkerEvents;
437
- var bindPopupToMarker = function bindPopupToMarker(point, layerGroup, flow_rate_unit) {
415
+ var bindPopupToMarker = exports.bindPopupToMarker = function bindPopupToMarker(point, layerGroup, flow_rate_unit) {
438
416
  var content = "\n <div class='main-content'>\n <div class='main-content__header'>\n <div class=\"main-content__header__titles\">\n <div class='main-content__header__titles__title'>".concat(point.name, "</div>\n <div class='main-content__header__titles__subtitle'>").concat(point.group.sector_name, "</div>\n </div>\n </div>\n \n <div class='main-content__body'>\n <div class='main-content__body__item'>\n <div class='main-content__body__item__icon'>\n <img src='").concat(_water_reuse.default, "' />\n </div>\n <div class='main-content__body__item__titles'>\n <div class='main-content__body__item__titles__title'>\n ").concat(getFlowRate(point.group.water_discharge, flow_rate_unit), "\n </div>\n <div class='main-content__body__item__titles__subtitle'>").concat(_i18n.default.t('water_discharge'), "</div>\n </div>\n </div>\n </div>\n </div>\n ");
439
417
  layerGroup.bindPopup(content, {
440
418
  className: 'point-marker-popup',
@@ -443,40 +421,33 @@ var bindPopupToMarker = function bindPopupToMarker(point, layerGroup, flow_rate_
443
421
  closeButton: true
444
422
  });
445
423
  };
446
- exports.bindPopupToMarker = bindPopupToMarker;
447
- var getFlowRate = function getFlowRate(waterConsumption, flowRateUnit) {
424
+ var getFlowRate = exports.getFlowRate = function getFlowRate(waterConsumption, flowRateUnit) {
448
425
  var isRound = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
449
426
  if (waterConsumption > 0) {
450
427
  return calculateWaterConsumption(flowRateUnit, waterConsumption, isRound) + ' ' + translateFlowRate(flowRateUnit);
451
428
  }
452
429
  return _i18n.default.t('events_overview.severities.unknown');
453
430
  };
454
- exports.getFlowRate = getFlowRate;
455
- var removeLayerGroup = function removeLayerGroup(map, layerGroup) {
431
+ var removeLayerGroup = exports.removeLayerGroup = function removeLayerGroup(map, layerGroup) {
456
432
  if (map.hasLayer(layerGroup)) {
457
433
  map.removeLayer(layerGroup);
458
434
  }
459
435
  };
460
- exports.removeLayerGroup = removeLayerGroup;
461
- var addLayerGroup = function addLayerGroup(map, layerGroup) {
436
+ var _addLayerGroup = exports.addLayerGroup = function addLayerGroup(map, layerGroup) {
462
437
  if (!map.hasLayer(layerGroup)) {
463
438
  map.addLayer(layerGroup);
464
439
  } else {
465
440
  removeLayerGroup(map, layerGroup);
466
- addLayerGroup(map, layerGroup);
441
+ _addLayerGroup(map, layerGroup);
467
442
  }
468
443
  };
469
- exports.addLayerGroup = addLayerGroup;
470
- var pointIsWWTP = function pointIsWWTP(point) {
444
+ var pointIsWWTP = exports.pointIsWWTP = function pointIsWWTP(point) {
471
445
  return point.group.type === 'Groups::WastewaterTreatmentPlant';
472
446
  };
473
- exports.pointIsWWTP = pointIsWWTP;
474
- var pointIsFactory = function pointIsFactory(point) {
447
+ var pointIsFactory = exports.pointIsFactory = function pointIsFactory(point) {
475
448
  return isFactoryType(point.group.type);
476
449
  };
477
- exports.pointIsFactory = pointIsFactory;
478
- var isFactoryType = function isFactoryType(type) {
450
+ var isFactoryType = exports.isFactoryType = function isFactoryType(type) {
479
451
  return type === 'Groups::Factory';
480
452
  };
481
- exports.isFactoryType = isFactoryType;
482
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2kxOG4iLCJfYmx1ZUNpcmNsZSIsIl9zYW1wbGluZ0ljb24iLCJfcGlua0NpcmNsZSIsIl9vYnNlcnZhdGlvbkljb24iLCJfcmVkUGluUmVkU2hhZG93IiwiX3doaXRlUGluUmVkU2hhZG93IiwiX3doaXRlUGluQmxhY2tTaGFkb3ciLCJfeWVsbG93Q2lyY2xlIiwiX2ZhY3RvcnlJY29uIiwiX2dyZWVuQ2lyY2xlIiwiX3B1bXBTdGF0aW9uSWNvbiIsIl9waW5XYXRlciIsIl9icmlnaHRCbHVlQ2lyY2xlIiwiX1dXVFBJY29uIiwiX3dhdGVyTm9CYWNrZ3JvdW5kIiwiX3doaXRlUG9pbnQiLCJfTWFwVXRpbHMiLCJfUG9pbnRJY29uIiwiX3dhdGVyX3JldXNlIiwiX3V0aWxzIiwiaXNDb2xsZWN0b3JGb2N1c2VkIiwicG9pbnQiLCJldmVudCIsIl9ldmVudCRvYnNlcnZhdGlvbnMiLCJvYnNlcnZhdGlvbnMiLCJsZW5ndGgiLCJpZCIsInBvaW50X2lkIiwiZXhwb3J0cyIsImJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmciLCJzdHJpbmciLCJjb25jYXQiLCJncm91cCIsIm5hbWUiLCJwb2ludElzRmFjdG9yeSIsInNlY3Rvcl9uYW1lIiwid2F0ZXJfZGlzY2hhcmdlIiwiYnViYmxlRm9yV1dUUCIsImFyZ3MiLCJwb2ludEN1c3RvbUljb24iLCJMIiwibWFya2VyIiwibWFya2VyTG9jYXRpb24iLCJpY29uIiwiZ2V0SWNvbiIsInd3dHBQb2ludCIsInJpc2VPbkhvdmVyIiwiY3JlYXRlQnViYmxlUG9pbnQiLCJtYXAiLCJob3ZlcmVkIiwibGF5ZXJHcm91cCIsImZsb3dfcmF0ZV91bml0IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaGFuZGxlQ2xpY2siLCJzdWJ0aXRsZSIsImhhc19kZXZpY2UiLCJhZGRMYXllciIsImJpbmRQb3B1cFRvTWFya2VyIiwiaGFuZGxlTWFya2VyRXZlbnRzIiwicmVsYXRlZEV2ZW50c0Ftb3VudCIsImRpdkljb24iLCJjbGFzc05hbWUiLCJodG1sIiwiaWNvbkFuY2hvciIsImV2ZW50c0NvdW50SWNvbiIsIl96b29tIiwib3BhY2l0eSIsImNyZWF0ZU1hbmhvbGVQb2ludCIsInBvaW50SWNvbiIsIkljb24iLCJpY29uVXJsIiwid2hpdGVQb2ludCIsImljb25TaXplIiwibWFuaG9sZUljb24iLCJNYXJrZXIiLCJiaW5kVG9vbHRpcCIsIm1hdGNoSWNvblRvUG9pbnQiLCJ0eXBlIiwiY29tYmluZWRGYWN0b3J5SWNvbiIsIm1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlIiwidW5zaGlmdCIsInNlbGVjdGVkQmFja2dyb3VuZCIsIm1hcmtlckJlbG9uZ3NUb1NvdXJjZSIsImJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQiLCJzdGFuZGFyZEJhY2tncm91bmQiLCJjb21iaW5lZFB1bXBTdGF0aW9uSWNvbiIsImNvbWJpbmVkV1dUUEljb24iLCJyZWRQaW5SZWRTaGFkb3ciLCJ3YXRlckljb25Ob0JhY2tncm91bmQiLCJwb3B1cEFuY2hvciIsImNvbWJpbmVkQ29sbGVjdG9yc0ljb24iLCJzZWNvbmRhcnkiLCJ0aGlyZCIsIndoaXRlUGluQmxhY2tTaGFkb3ciLCJ5ZWxsb3dDaXJjbGVVUkwiLCJwbGFudEljb25VUkwiLCJncmVlbkNpcmNsZVVSTCIsInB1bXBTdGF0aW9uSWNvblVSTCIsImNvbGxlY3Rvckljb24iLCJicmlnaHRCbHVlQ2lyY2xlVVJMIiwiV1dUUEljb25VUkwiLCJ3aGl0ZVBpblJlZFNoYWRvdyIsInNvdXJjZSIsInNvdXJjZXMiLCJmaWx0ZXIiLCJzZWxlY3RlZF9zb3VyY2UiLCJjcmVhdGVTYW1wbGluZ0ljb25Qb2ludCIsInNlY29uZGFyeUljb24iLCJzYW1wbGluZ0ljb24iLCJibHVlQ2lyY2xlVVJMIiwic2FtcGxpbmdJY29uVVJMIiwidGhpcmRJY29uIiwiZm9yRWFjaCIsImluZGV4IiwiY3JlYXRlT2JzZXJ2YXRpb25JY29uUG9pbnQiLCJvYnNlcnZhdGlvbkljb24iLCJwaW5rQ2lyY2xlVVJMIiwib2JzZXJ2YXRpb25JY29uVVJMIiwiY3JlYXRlU2FtcGxpbmdJY29ucyIsInNhbXBsZWRQb2ludElkcyIsInNhbXBsaW5ncyIsInMiLCJpbmNsdWRlcyIsInBvcHVwQ29udGVudCIsIm9icyIsIkdyYXBoSWNvbiIsImkxOG4iLCJ0Iiwic2V2ZXJpdHkiLCJjbGlja2VkIiwic3VidGl0bGVUZXh0IiwiZ2V0UG9pbnRJY29uQnlUeXBlIiwic2V0SWNvbiIsImVsZW1lbnQiLCJjYWxjdWxhdGVXYXRlckNvbnN1bXB0aW9uIiwid2F0ZXJDb25zdW1wdGlvbiIsInJvdW5kX3RvX25lYXJlc3RfayIsImNhbGN1bGF0ZWQiLCJ0b0ZpeGVkIiwicm91bmRUb05lYXJlc3RUaG91c2FuZCIsInBhcnNlRmxvYXQiLCJ0b0xvY2FsZVN0cmluZyIsIk1hdGgiLCJyb3VuZCIsIm51bWJlciIsInJvdW5kZWRUaG91c2FuZHMiLCJyb3VuZGVkVmFsdWUiLCJ0cmFuc2xhdGVGbG93UmF0ZSIsInRvb2x0aXBWaXNpYmxlIiwib24iLCJjbG9zZVBvcHVwIiwiaXNQb3B1cE9wZW4iLCJrYW5kb19vYmplY3RfaWQiLCJzZW5kQW5hbHl0aWNzRXZlbnQiLCJwb2ludF9uYW1lIiwiY29udGVudCIsIndhdGVyUmV1c2VJY29uIiwiZ2V0Rmxvd1JhdGUiLCJiaW5kUG9wdXAiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwiY2xvc2VCdXR0b24iLCJmbG93UmF0ZVVuaXQiLCJpc1JvdW5kIiwicmVtb3ZlTGF5ZXJHcm91cCIsImhhc0xheWVyIiwicmVtb3ZlTGF5ZXIiLCJhZGRMYXllckdyb3VwIiwicG9pbnRJc1dXVFAiLCJpc0ZhY3RvcnlUeXBlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL1dpZGdldHMvTWFwL3BvaW50cy9Qb2ludFV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHcmFwaEljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2xpbmUtY2hhcnQuc3ZnJztcbmltcG9ydCBMLCB7IExhdExuZ1R1cGxlIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgaTE4biBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9wb2ludHMvbW9kZWxzL0lQb2ludCc7XG5pbXBvcnQgYmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYmx1ZS1jaXJjbGUuc3ZnJztcbmltcG9ydCBzYW1wbGluZ0ljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3NhbXBsaW5nLWljb24uc3ZnJztcbmltcG9ydCBwaW5rQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9waW5rLWNpcmNsZS5zdmcnO1xuaW1wb3J0IG9ic2VydmF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvb2JzZXJ2YXRpb24taWNvbi5zdmcnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvZXZlbnRzL21vZGVscy9JRXZlbnQnO1xuaW1wb3J0IHJlZFBpblJlZFNoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcmVkLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5CbGFja1NoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2hpdGUtcGluLWJsYWNrLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHllbGxvd0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMveWVsbG93LWNpcmNsZS5zdmcnO1xuaW1wb3J0IHBsYW50SWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvZmFjdG9yeS1pY29uLnN2Zyc7XG5pbXBvcnQgZ3JlZW5DaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2dyZWVuLWNpcmNsZS5zdmcnO1xuaW1wb3J0IHB1bXBTdGF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcHVtcC1zdGF0aW9uLWljb24uc3ZnJztcbmltcG9ydCBjb2xsZWN0b3JJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9tYXAvcGluLXdhdGVyLnN2Zyc7XG5pbXBvcnQgYnJpZ2h0Qmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYnJpZ2h0LWJsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgV1dUUEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL1dXVFAtaWNvbi5zdmcnO1xuaW1wb3J0IHdhdGVySWNvbk5vQmFja2dyb3VuZCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2F0ZXItbm8tYmFja2dyb3VuZC5zdmcnO1xuaW1wb3J0IHdoaXRlUG9pbnQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3doaXRlLXBvaW50LnBuZyc7XG5pbXBvcnQgeyBldmVudHNDb3VudEljb24gfSBmcm9tICcuLi9NYXBVdGlscyc7XG5pbXBvcnQgeyBnZXRQb2ludEljb25CeVR5cGUgfSBmcm9tICcuL1BvaW50SWNvbic7XG5pbXBvcnQgd2F0ZXJSZXVzZUljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2ljb25zL3dhdGVyX3JldXNlLnN2Zyc7XG5pbXBvcnQgeyBzZW5kQW5hbHl0aWNzRXZlbnQgfSBmcm9tICdzcmMvcGFnZXMvRGFzaGJvYXJkTWFwL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGlzQ29sbGVjdG9yRm9jdXNlZCA9IChwb2ludDogSVBvaW50LCBldmVudDogSUV2ZW50KSA9PiB7XG4gIHJldHVybiAoXG4gICAgZXZlbnQ/Lm9ic2VydmF0aW9ucz8ubGVuZ3RoID09PSAxICYmXG4gICAgcG9pbnQuaWQgPT09IGV2ZW50Lm9ic2VydmF0aW9uc1swXS5wb2ludF9pZFxuICApO1xufTtcblxuY29uc3QgYnVpbGRNYW5ob2xlVG9vbHRpcFN0cmluZyA9IChwb2ludDogSVBvaW50KSA9PiB7XG4gIGxldCBzdHJpbmcgPSBgJHtwb2ludC5ncm91cC5uYW1lfSBgO1xuXG4gIGlmIChwb2ludElzRmFjdG9yeShwb2ludCkpIHtcbiAgICBzdHJpbmcgKz0gYDxici8+U2VjdG9yOiAke3BvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lfWA7XG4gICAgc3RyaW5nICs9IGA8YnIvPldhdGVyIENvbnN1bXB0aW9uOiAke3BvaW50Lmdyb3VwLndhdGVyX2Rpc2NoYXJnZX1gO1xuICB9IGVsc2Uge1xuICAgIHN0cmluZyA9IGAke3BvaW50Lm5hbWV9YDtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgYnViYmxlRm9yV1dUUCA9IChhcmdzKSA9PiB7XG4gIGNvbnN0IHBvaW50Q3VzdG9tSWNvbjogTC5NYXJrZXIgPSBMLm1hcmtlcihhcmdzLm1hcmtlckxvY2F0aW9uLCB7XG4gICAgaWNvbjogZ2V0SWNvbihhcmdzLnd3dHBQb2ludCwgZmFsc2UpLFxuICAgIHJpc2VPbkhvdmVyOiB0cnVlLFxuICB9KTtcblxuICByZXR1cm4gcG9pbnRDdXN0b21JY29uO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUJ1YmJsZVBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHBvaW50OiBJUG9pbnQsXG4gIG1hcCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuICBmbG93X3JhdGVfdW5pdCA9ICdnZF91cycsXG4gIGhhbmRsZUNsaWNrPyxcbikgPT4ge1xuICBjb25zdCBzdWJ0aXRsZSA9IHBvaW50SXNGYWN0b3J5KHBvaW50KSA/IHBvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lIDogJyc7XG4gIGxldCBwb2ludEN1c3RvbUljb246IEwuTWFya2VyID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICBpY29uOiBnZXRJY29uKHBvaW50LCBmYWxzZSwgc3VidGl0bGUpLFxuICAgIHJpc2VPbkhvdmVyOiB0cnVlLFxuICB9KTtcbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faGFzX2RldmljZSddID0gcG9pbnQuaGFzX2RldmljZTtcbiAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnRIb3ZlcmVkJztcblxuICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIGlmIChwb2ludElzRmFjdG9yeShwb2ludCkpIHtcbiAgICBiaW5kUG9wdXBUb01hcmtlcihwb2ludCwgcG9pbnRDdXN0b21JY29uLCBmbG93X3JhdGVfdW5pdCk7XG4gIH1cblxuICBoYW5kbGVNYXJrZXJFdmVudHMobWFwLCBwb2ludCwgcG9pbnRDdXN0b21JY29uLCBoYW5kbGVDbGljayk7XG5cbiAgaWYgKHBvaW50LnJlbGF0ZWRFdmVudHNBbW91bnQpIHtcbiAgICBsZXQgcG9pbnRDdXN0b21JY29uID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IEwuZGl2SWNvbih7XG4gICAgICAgIGNsYXNzTmFtZTogYFxuICAgICAgICAgICR7XG4gICAgICAgICAgICBwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50ID49IDEwMFxuICAgICAgICAgICAgICA/ICdjaXJjbGUtZXZlbnRzLWFtb3VudCBjaXJjbGUtZXZlbnRzLWFtb3VudC0tdHJpZGlnaXQnXG4gICAgICAgICAgICAgIDogJ2NpcmNsZS1ldmVudHMtYW1vdW50J1xuICAgICAgICAgIH0gXG4gICAgICAgICAgJHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50ID4gMiA/ICdhbGVydC1jb2xvcicgOiAnJ31cbiAgICAgICAgICAgIGAsXG4gICAgICAgIGh0bWw6IGA8cD4ke3BvaW50LnJlbGF0ZWRFdmVudHNBbW91bnR9PC9wPmAsXG4gICAgICAgIGljb25BbmNob3I6IGV2ZW50c0NvdW50SWNvbihtYXAuX3pvb20pLmljb25BbmNob3IsXG4gICAgICB9KSxcbiAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICAgIG9wYWNpdHk6IGhvdmVyZWQgPyAxIDogMCxcbiAgICB9KTtcblxuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXInO1xuICAgIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXJIb3ZlcmVkJztcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1hbmhvbGVQb2ludCA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQ/LFxuICBsYXllckdyb3VwPyxcbikgPT4ge1xuICBsZXQgcG9pbnRJY29uID0gbmV3IEwuSWNvbih7XG4gICAgaWNvblVybDogd2hpdGVQb2ludCxcbiAgICBpY29uU2l6ZTogWzksIDldLFxuICAgIGljb25BbmNob3I6IFs0LjUsIDQuNV0sXG4gIH0pO1xuICBsZXQgbWFuaG9sZUljb246IGFueSA9IG5ldyBMLk1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgIGljb246IHBvaW50SWNvbixcbiAgICByaXNlT25Ib3ZlcjogdHJ1ZSxcbiAgfSk7XG4gIG1hbmhvbGVJY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcocG9pbnQpKTtcbiAgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIG1hbmhvbGVJY29uWydrYW5kb19wb2ludF90eXBlJ10gPSAnTWFuaG9sZSc7XG4gIGlmIChob3ZlcmVkKSBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnRIb3ZlcmVkJztcbiAgbGF5ZXJHcm91cC5hZGRMYXllcihtYW5ob2xlSWNvbik7XG59O1xuXG5leHBvcnQgY29uc3QgbWF0Y2hJY29uVG9Qb2ludCA9IChwb2ludDogSVBvaW50LCBldmVudDogSUV2ZW50KSA9PiB7XG4gIHN3aXRjaCAocG9pbnQuZ3JvdXAudHlwZSkge1xuICAgIGNhc2UgJ0dyb3Vwczo6RmFjdG9yeSc6XG4gICAgICBpZiAoY29tYmluZWRGYWN0b3J5SWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRGYWN0b3J5SWNvbjtcbiAgICBjYXNlICdHcm91cHM6OlB1bXBTdGF0aW9uJzpcbiAgICAgIGlmIChjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRQdW1wU3RhdGlvbkljb247XG4gICAgY2FzZSAnR3JvdXBzOjpXYXN0ZXdhdGVyVHJlYXRtZW50UGxhbnQnOlxuICAgICAgaWYgKGNvbWJpbmVkV1dUUEljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkV1dUUEljb247XG5cbiAgICBjYXNlICdHcm91cHM6OkNvbGxlY3RvcnMnOlxuICAgICAgaWYgKGlzQ29sbGVjdG9yRm9jdXNlZChwb2ludCwgZXZlbnQpKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgTC5pY29uKHtcbiAgICAgICAgICAgIGljb25Vcmw6IHJlZFBpblJlZFNoYWRvdyxcbiAgICAgICAgICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgICAgICAgICBpY29uQW5jaG9yOiBbMzAsIDUyXSxcbiAgICAgICAgICB9KSxcblxuICAgICAgICAgIEwuaWNvbih7XG4gICAgICAgICAgICBpY29uVXJsOiB3YXRlckljb25Ob0JhY2tncm91bmQsXG4gICAgICAgICAgICBpY29uU2l6ZTogWzAsIDBdLFxuXG4gICAgICAgICAgICBpY29uQW5jaG9yOiBbMjIsIDQ0XSxcbiAgICAgICAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkQ29sbGVjdG9yc0ljb247XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzdGFuZGFyZEJhY2tncm91bmQgPSAoXG4gIHNlY29uZGFyeTogYm9vbGVhbiA9IGZhbHNlLFxuICB0aGlyZDogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIHJldHVybiBMLmljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUGluQmxhY2tTaGFkb3csXG4gICAgaWNvblNpemU6IHNlY29uZGFyeSA/IFswLCAwXSA6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnkgJiYgdGhpcmQgPyBbLTIsIDE5XSA6IHNlY29uZGFyeSA/IFstMiwgNDRdIDogWzIwLCA0Ml0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZEZhY3RvcnlJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHllbGxvd0NpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHBsYW50SWNvblVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFs1LCAzMF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBncmVlbkNpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHB1bXBTdGF0aW9uSWNvblVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFs3LCAzMl0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZENvbGxlY3RvcnNJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGNvbGxlY3Rvckljb24sXG4gICAgaWNvblNpemU6IFswLCAwXSxcblxuICAgIGljb25BbmNob3I6IFsyNSwgNTBdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRXV1RQSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBicmlnaHRCbHVlQ2lyY2xlVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzEwLjcsIDMzLjddLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogV1dUUEljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbOCwgMzFdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0ZWRCYWNrZ3JvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiByZWRQaW5SZWRTaGFkb3csXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMzIsIDU0XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQgPSAoKSA9PiB7XG4gIHJldHVybiBMLmljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUGluUmVkU2hhZG93LFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzMyLCA1NF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZSA9IChldmVudDogSUV2ZW50LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGxldCBzb3VyY2U7XG5cbiAgaWYgKGV2ZW50ICE9PSBudWxsICYmIGV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzb3VyY2UgPSBldmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXTtcbiAgfVxuXG4gIHJldHVybiBldmVudCAhPT0gbnVsbCAmJiBzb3VyY2UgJiYgZXZlbnQuc2VsZWN0ZWRfc291cmNlID09PSBzb3VyY2UucG9pbnRfaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyQmVsb25nc1RvU291cmNlID0gKGV2ZW50OiBJRXZlbnQsIHBvaW50OiBJUG9pbnQpID0+IHtcbiAgaWYgKGV2ZW50ID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgcmV0dXJuIChcbiAgICBldmVudCAhPT0gbnVsbCAmJlxuICAgIGV2ZW50LnNvdXJjZXMuZmlsdGVyKChzb3VyY2UpID0+IHNvdXJjZS5wb2ludF9pZCA9PT0gcG9pbnQuaWQpWzBdXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgc2Vjb25kYXJ5SWNvbjogYm9vbGVhbixcbiAgbWFwLFxuICBwb2ludDogSVBvaW50LFxuICBldmVudDogSUV2ZW50LFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgLy8gaWNvblNpemU6IFt3aWR0aCwgaGVpZ2h0XSxcbiAgLy8gSWNvbiBBbmNob3I6IFsoLXJpZ2h0KSgrbGVmdCksICgtZG93bikoK3VwKV1cbiAgbGV0IHNhbXBsaW5nSWNvbiA9IFtcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogYmx1ZUNpcmNsZVVSTCxcbiAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzAsIDBdIDogWzAsIDBdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstNywgMTVdIDogWzEwLjcsIDMzLjddLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBzYW1wbGluZ0ljb25VUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTgsIDEzXSA6IFs1LCAzMF0sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gIF07XG5cbiAgbGV0IHRoaXJkSWNvbiA9IGZhbHNlO1xuICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSAmJiAhc2Vjb25kYXJ5SWNvbikge1xuICAgIHNhbXBsaW5nSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSAmJiAhc2Vjb25kYXJ5SWNvbikge1xuICAgIHNhbXBsaW5nSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcmRJY29uID0gdHJ1ZTtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoc2Vjb25kYXJ5SWNvbiwgdGhpcmRJY29uKSk7XG4gIH1cblxuICBzYW1wbGluZ0ljb24uZm9yRWFjaCgoaWNvbiwgaW5kZXgpID0+IHtcbiAgICBsZXQgcG9pbnRDdXN0b21JY29uOiBhbnkgPSBMLm1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgICAgaWNvbjogaWNvbixcbiAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICB9KTtcbiAgICBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vbHRpcFN0cmluZyhwb2ludCkpO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faW5kZXhfb2JqZWN0J10gPSBpbmRleDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2Zld19sYXllcl9pY29uJ10gPSB0cnVlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fc2Vjb25kYXJ5J10gPSB0aGlyZEljb24gPyBmYWxzZSA6IHNlY29uZGFyeUljb247XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb190aGlyZCddID0gdGhpcmRJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ1NhbXBsaW5nJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZ0hvdmVyZWQnO1xuICAgIGxheWVyR3JvdXAuYWRkTGF5ZXIocG9pbnRDdXN0b21JY29uKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlT2JzZXJ2YXRpb25JY29uUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgc2Vjb25kYXJ5SWNvbjogYm9vbGVhbixcbiAgbWFwLFxuICBwb2ludDogSVBvaW50LFxuICBldmVudDogSUV2ZW50LFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgLy8gaWNvblNpemU6IFt3aWR0aCwgaGVpZ2h0XSxcbiAgLy8gSWNvbiBBbmNob3I6IFsoLXJpZ2h0KSgrbGVmdCksICgtZG93bikoK3VwKV1cbiAgbGV0IG9ic2VydmF0aW9uSWNvbiA9IFtcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogcGlua0NpcmNsZVVSTCxcbiAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzAsIDBdIDogWzAsIDBdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstNywgNDBdIDogWzEwLjcsIDMzLjddLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBvYnNlcnZhdGlvbkljb25VUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTgsIDM4XSA6IFs1LCAzMF0sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gIF07XG5cbiAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2Uge1xuICAgIG9ic2VydmF0aW9uSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZChzZWNvbmRhcnlJY29uKSk7XG4gIH1cblxuICBvYnNlcnZhdGlvbkljb24uZm9yRWFjaCgoaWNvbiwgaW5kZXgpID0+IHtcbiAgICBsZXQgcG9pbnRDdXN0b21JY29uOiBhbnkgPSBMLm1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgICAgaWNvbjogaWNvbixcbiAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICB9KTtcbiAgICBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vbHRpcFN0cmluZyhwb2ludCkpO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faW5kZXhfb2JqZWN0J10gPSBpbmRleDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2Zld19sYXllcl9pY29uJ10gPSB0cnVlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fc2Vjb25kYXJ5J10gPSBzZWNvbmRhcnlJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fdGhpcmQnXSA9IGZhbHNlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ09ic2VydmF0aW9uJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdPYnNlcnZhdGlvbkhvdmVyZWQnO1xuICAgIGxheWVyR3JvdXAuYWRkTGF5ZXIocG9pbnRDdXN0b21JY29uKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU2FtcGxpbmdJY29ucyA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBldmVudDogSUV2ZW50LFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQsXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIGxldCBzYW1wbGVkUG9pbnRJZHMgPSBldmVudC5zYW1wbGluZ3MubWFwKChzKSA9PiBzLnBvaW50X2lkKTtcbiAgaWYgKFxuICAgIGV2ZW50ICE9PSBudWxsICYmXG4gICAgZXZlbnQuc2FtcGxpbmdzLmxlbmd0aCAhPT0gMCAmJlxuICAgIHNhbXBsZWRQb2ludElkcy5pbmNsdWRlcyhwb2ludC5pZClcbiAgKSB7XG4gICAgY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQoXG4gICAgICBtYXJrZXJMb2NhdGlvbixcbiAgICAgIG1hdGNoSWNvblRvUG9pbnQocG9pbnQsIGV2ZW50KSAhPT0gbnVsbCxcbiAgICAgIG1hcCxcbiAgICAgIHBvaW50LFxuICAgICAgZXZlbnQsXG4gICAgICBob3ZlcmVkLFxuICAgICAgbGF5ZXJHcm91cCxcbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcG9wdXBDb250ZW50ID0gKG9iczogYW55LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChvYnMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LXBvcHVwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWdyYXBoLWljb24gcG9wdXAtZ3JhcGgtaWNvbi0ke3BvaW50LmlkfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7R3JhcGhJY29ufVwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zaXRlLW5hbWVcIj48Yj4ke3BvaW50Lmdyb3VwLm5hbWV9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxoci8+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2VjdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtvYnMuaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtHcmFwaEljb259XCIvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NpdGUtbmFtZVwiPjxiPiR7XG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAubmFtZVxuICAgICAgICAgICAgICAgICAgICB9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdHlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdwb3B1cC1jb250ZW50X19zZXZlcml0eS0tJyArIG9icy5zZXZlcml0eVxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXRpZXMuJHtvYnMuc2V2ZXJpdHl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwicG9wdXAtY29udGVudF9faHJcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19kaXNjaGFyZ2UtdGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LXBcIj4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuZmlyc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwiZmlyc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3Lmxhc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwibGFzdC1zZWVuLXBvcHVwXCI+PC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICB9XG59O1xuXG5jb25zdCBnZXRJY29uID0gKHBvaW50OiBJUG9pbnQsIGNsaWNrZWQ6IGJvb2xlYW4sIHN1YnRpdGxlOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgdHlwZSA9IHBvaW50Lmhhc19kZXZpY2UgPyBwb2ludC5ncm91cC50eXBlIDogJ0dyb3Vwczo6ZGVmYXVsdCc7XG4gIGNvbnN0IHN1YnRpdGxlVGV4dCA9IHN1YnRpdGxlID8gc3VidGl0bGUgOiBwb2ludC5ncm91cC5zZWN0b3JfbmFtZTtcbiAgcmV0dXJuIGdldFBvaW50SWNvbkJ5VHlwZSh0eXBlLCBwb2ludC5uYW1lLCBzdWJ0aXRsZVRleHQsIGNsaWNrZWQsICFjbGlja2VkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRJY29uID0gKGVsZW1lbnQsIGNsaWNrZWQsIHBvaW50KSA9PiB7XG4gIGVsZW1lbnQuc2V0SWNvbihnZXRJY29uKHBvaW50LCBjbGlja2VkKSk7XG59O1xuXG4vLyByb3VuZCB0byBuZWFyZXN0IHRob3VzYW5kIGlzIHVzZWQgd2hlbiB5b3Ugd2FudCB0byByb3VuZCB0aGUgd2F0ZXIgY29uc3VtcHRpb24gdG8gdGhlIG5lYXJlc3QgdGhvdXNhbmRcbi8vIGZvciBleGFtcGxlOiAyMzQsNTY3IC0+IDIzNSwwMDBcbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVXYXRlckNvbnN1bXB0aW9uID0gKFxuICBmbG93X3JhdGVfdW5pdDogc3RyaW5nLFxuICB3YXRlckNvbnN1bXB0aW9uOiBudW1iZXIsXG4gIHJvdW5kX3RvX25lYXJlc3RfazogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIGxldCBjYWxjdWxhdGVkID0gJzAnO1xuXG4gIGlmICh3YXRlckNvbnN1bXB0aW9uID4gMCkge1xuICAgIHN3aXRjaCAoZmxvd19yYXRlX3VuaXQpIHtcbiAgICAgIGNhc2UgJ20zZCc6XG4gICAgICAgIGNhbGN1bGF0ZWQgPSB3YXRlckNvbnN1bXB0aW9uLnRvRml4ZWQoMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2RfdXMnOlxuICAgICAgICBjYWxjdWxhdGVkID0gKHdhdGVyQ29uc3VtcHRpb24gKiAyNjQuMTcyKS50b0ZpeGVkKDIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dkX3VrJzpcbiAgICAgICAgY2FsY3VsYXRlZCA9ICh3YXRlckNvbnN1bXB0aW9uICogMjE5Ljk2OSkudG9GaXhlZCgyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChyb3VuZF90b19uZWFyZXN0X2spIHtcbiAgICByZXR1cm4gcm91bmRUb05lYXJlc3RUaG91c2FuZChwYXJzZUZsb2F0KGNhbGN1bGF0ZWQpKS50b0xvY2FsZVN0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoY2FsY3VsYXRlZCkpLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH1cbn07XG5cbmNvbnN0IHJvdW5kVG9OZWFyZXN0VGhvdXNhbmQgPSAobnVtYmVyKSA9PiB7XG4gIC8vIGlmKGlzQWxyZWFkeVJvdW5kZWQobnVtYmVyKSkge1xuICAvLyAgIHJldHVybiBudW1iZXI7XG4gIC8vIH1cblxuICBpZiAobnVtYmVyIDwgMTAwMCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlcik7XG4gIH1cblxuICBjb25zdCByb3VuZGVkVGhvdXNhbmRzID0gTWF0aC5yb3VuZChudW1iZXIgLyAxMDAwKTtcbiAgY29uc3Qgcm91bmRlZFZhbHVlID0gcm91bmRlZFRob3VzYW5kcyAqIDEwMDA7XG5cbiAgcmV0dXJuIHJvdW5kZWRWYWx1ZTtcbn07XG5cbi8vIGNvbnN0IGlzQWxyZWFkeVJvdW5kZWQgPSAobnVtYmVyKSA9PiB7XG4vLyAgIHJldHVybiBudW1iZXIgPT09IE1hdGgucm91bmQobnVtYmVyKTtcbi8vIH1cblxuZXhwb3J0IGNvbnN0IHRyYW5zbGF0ZUZsb3dSYXRlID0gKGZsb3dfcmF0ZV91bml0KSA9PiB7XG4gIHJldHVybiBpMThuLnQoXG4gICAgYGRhc2hib2FyZF92Mi5wcm9maWxlLmZsb3dfcmF0ZV91bml0X29wdGlvbnMuJHtcbiAgICAgIGZsb3dfcmF0ZV91bml0LmluY2x1ZGVzKCdnZCcpID8gJ2dkJyA6IGZsb3dfcmF0ZV91bml0XG4gICAgfWAsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlTWFya2VyRXZlbnRzID0gKFxuICBtYXAsXG4gIHBvaW50LFxuICBwb2ludEN1c3RvbUljb24sXG4gIGhhbmRsZUNsaWNrLFxuKSA9PiB7XG4gIGxldCB0b29sdGlwVmlzaWJsZSA9IGZhbHNlO1xuXG4gIG1hcC5vbignem9vbXN0YXJ0JywgZnVuY3Rpb24gKCkge1xuICAgIG1hcC5jbG9zZVBvcHVwKCk7XG4gIH0pO1xuXG4gIHBvaW50Q3VzdG9tSWNvbi5vbigncG9wdXBjbG9zZScsICgpID0+IHtcbiAgICAvLyBzZXRJY29uKHBvaW50Q3VzdG9tSWNvbiwgZmFsc2UsIHBvaW50KTtcbiAgICB0b29sdGlwVmlzaWJsZSA9IGZhbHNlO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ3BvcHVwb3BlbicsICgpID0+IHtcbiAgICAvLyBzZXRJY29uKHBvaW50Q3VzdG9tSWNvbiwgdHJ1ZSwgcG9pbnQpO1xuICAgIHRvb2x0aXBWaXNpYmxlID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcG9pbnRDdXN0b21JY29uLm9uKCdtb3VzZW92ZXInLCAoKSA9PiB7XG4gICAgaWYgKHRvb2x0aXBWaXNpYmxlKSByZXR1cm47XG5cbiAgICBzZXRJY29uKHBvaW50Q3VzdG9tSWNvbiwgdHJ1ZSwgcG9pbnQpO1xuICAgIHRvb2x0aXBWaXNpYmxlID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcG9pbnRDdXN0b21JY29uLm9uKCdtb3VzZW91dCcsICgpID0+IHtcbiAgICBpZiAocG9pbnRDdXN0b21JY29uLmlzUG9wdXBPcGVuKCkpIHJldHVybjtcblxuICAgIHNldEljb24ocG9pbnRDdXN0b21JY29uLCBmYWxzZSwgcG9pbnQpO1xuICAgIHRvb2x0aXBWaXNpYmxlID0gZmFsc2U7XG4gIH0pO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICBwb2ludEN1c3RvbUljb24ub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgaGFuZGxlQ2xpY2socG9pbnRDdXN0b21JY29uLmthbmRvX29iamVjdF9pZCk7XG5cbiAgICAgIGlmIChwb2ludElzRmFjdG9yeShwb2ludCkpIHtcbiAgICAgICAgc2VuZEFuYWx5dGljc0V2ZW50KCdNYXAgVmlldyAtIEZhY3RvcnkgY2xpY2tlZCcsICdtYXAnLCB7XG4gICAgICAgICAgcG9pbnRfaWQ6IHBvaW50LmlkLFxuICAgICAgICAgIHBvaW50X25hbWU6IHBvaW50Lm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYmluZFBvcHVwVG9NYXJrZXIgPSAocG9pbnQsIGxheWVyR3JvdXAsIGZsb3dfcmF0ZV91bml0KSA9PiB7XG4gIGxldCBjb250ZW50ID0gYFxuICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudCc+XG4gICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9faGVhZGVyJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRfX2hlYWRlcl9fdGl0bGVzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXJfX3RpdGxlc19fdGl0bGUnPiR7XG4gICAgICAgICAgICAgICAgICBwb2ludC5uYW1lXG4gICAgICAgICAgICAgICAgfTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9faGVhZGVyX190aXRsZXNfX3N1YnRpdGxlJz4ke1xuICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAuc2VjdG9yX25hbWVcbiAgICAgICAgICAgICAgICB9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keSc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW0nPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9faWNvbic+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPScke3dhdGVyUmV1c2VJY29ufScgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX3RpdGxlcyc+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX3RpdGxlc19fdGl0bGUnPlxuICAgICAgICAgICAgICAgICAgICAke2dldEZsb3dSYXRlKHBvaW50Lmdyb3VwLndhdGVyX2Rpc2NoYXJnZSwgZmxvd19yYXRlX3VuaXQpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX3RpdGxlc19fc3VidGl0bGUnPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAnd2F0ZXJfZGlzY2hhcmdlJyxcbiAgICAgICAgICAgICAgICAgICl9PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgYDtcblxuICBsYXllckdyb3VwLmJpbmRQb3B1cChjb250ZW50LCB7XG4gICAgY2xhc3NOYW1lOiAncG9pbnQtbWFya2VyLXBvcHVwJyxcbiAgICBtaW5XaWR0aDogJzIxNHB4JyxcbiAgICBtYXhXaWR0aDogJzIxNHB4JyxcbiAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rmxvd1JhdGUgPSAoXG4gIHdhdGVyQ29uc3VtcHRpb246IG51bWJlcixcbiAgZmxvd1JhdGVVbml0OiBzdHJpbmcsXG4gIGlzUm91bmQ6IGJvb2xlYW4gPSBmYWxzZSxcbikgPT4ge1xuICBpZiAod2F0ZXJDb25zdW1wdGlvbiA+IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgY2FsY3VsYXRlV2F0ZXJDb25zdW1wdGlvbihmbG93UmF0ZVVuaXQsIHdhdGVyQ29uc3VtcHRpb24sIGlzUm91bmQpICtcbiAgICAgICcgJyArXG4gICAgICB0cmFuc2xhdGVGbG93UmF0ZShmbG93UmF0ZVVuaXQpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gaTE4bi50KCdldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdGllcy51bmtub3duJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cCA9IChtYXAsIGxheWVyR3JvdXApID0+IHtcbiAgaWYgKG1hcC5oYXNMYXllcihsYXllckdyb3VwKSkge1xuICAgIG1hcC5yZW1vdmVMYXllcihsYXllckdyb3VwKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZExheWVyR3JvdXAgPSAobWFwLCBsYXllckdyb3VwKSA9PiB7XG4gIGlmICghbWFwLmhhc0xheWVyKGxheWVyR3JvdXApKSB7XG4gICAgbWFwLmFkZExheWVyKGxheWVyR3JvdXApO1xuICB9IGVsc2Uge1xuICAgIHJlbW92ZUxheWVyR3JvdXAobWFwLCBsYXllckdyb3VwKTtcbiAgICBhZGRMYXllckdyb3VwKG1hcCwgbGF5ZXJHcm91cCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwb2ludElzV1dUUCA9IChwb2ludDogSVBvaW50KSA9PiB7XG4gIHJldHVybiBwb2ludC5ncm91cC50eXBlID09PSAnR3JvdXBzOjpXYXN0ZXdhdGVyVHJlYXRtZW50UGxhbnQnO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvaW50SXNGYWN0b3J5ID0gKHBvaW50OiBJUG9pbnQpID0+IHtcbiAgcmV0dXJuIGlzRmFjdG9yeVR5cGUocG9pbnQuZ3JvdXAudHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNGYWN0b3J5VHlwZSA9ICh0eXBlOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIHR5cGUgPT09ICdHcm91cHM6OkZhY3RvcnknO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFDQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFBMkMsSUFBQUUsV0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQUEsSUFBQUcsYUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQUEsSUFBQUksV0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQUEsSUFBQUssZ0JBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQU8zQyxJQUFBTSxnQkFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sa0JBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFR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
453
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2kxOG4iLCJfYmx1ZUNpcmNsZSIsIl9zYW1wbGluZ0ljb24iLCJfcGlua0NpcmNsZSIsIl9vYnNlcnZhdGlvbkljb24iLCJfcmVkUGluUmVkU2hhZG93IiwiX3doaXRlUGluUmVkU2hhZG93IiwiX3doaXRlUGluQmxhY2tTaGFkb3ciLCJfeWVsbG93Q2lyY2xlIiwiX2ZhY3RvcnlJY29uIiwiX2dyZWVuQ2lyY2xlIiwiX3B1bXBTdGF0aW9uSWNvbiIsIl9waW5XYXRlciIsIl9icmlnaHRCbHVlQ2lyY2xlIiwiX1dXVFBJY29uIiwiX3dhdGVyTm9CYWNrZ3JvdW5kIiwiX3doaXRlUG9pbnQiLCJfTWFwVXRpbHMiLCJfUG9pbnRJY29uIiwiX3dhdGVyX3JldXNlIiwiX3V0aWxzIiwiaXNDb2xsZWN0b3JGb2N1c2VkIiwiZXhwb3J0cyIsInBvaW50IiwiZXZlbnQiLCJfZXZlbnQkb2JzZXJ2YXRpb25zIiwib2JzZXJ2YXRpb25zIiwibGVuZ3RoIiwiaWQiLCJwb2ludF9pZCIsImJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmciLCJzdHJpbmciLCJjb25jYXQiLCJncm91cCIsIm5hbWUiLCJwb2ludElzRmFjdG9yeSIsInNlY3Rvcl9uYW1lIiwid2F0ZXJfZGlzY2hhcmdlIiwiYnViYmxlRm9yV1dUUCIsImFyZ3MiLCJwb2ludEN1c3RvbUljb24iLCJMIiwibWFya2VyIiwibWFya2VyTG9jYXRpb24iLCJpY29uIiwiZ2V0SWNvbiIsInd3dHBQb2ludCIsInJpc2VPbkhvdmVyIiwiY3JlYXRlQnViYmxlUG9pbnQiLCJtYXAiLCJob3ZlcmVkIiwibGF5ZXJHcm91cCIsImZsb3dfcmF0ZV91bml0IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaGFuZGxlQ2xpY2siLCJzdWJ0aXRsZSIsImhhc19kZXZpY2UiLCJhZGRMYXllciIsImJpbmRQb3B1cFRvTWFya2VyIiwiaGFuZGxlTWFya2VyRXZlbnRzIiwicmVsYXRlZEV2ZW50c0Ftb3VudCIsImRpdkljb24iLCJjbGFzc05hbWUiLCJodG1sIiwiaWNvbkFuY2hvciIsImV2ZW50c0NvdW50SWNvbiIsIl96b29tIiwib3BhY2l0eSIsImNyZWF0ZU1hbmhvbGVQb2ludCIsInBvaW50SWNvbiIsIkljb24iLCJpY29uVXJsIiwid2hpdGVQb2ludCIsImljb25TaXplIiwibWFuaG9sZUljb24iLCJNYXJrZXIiLCJiaW5kVG9vbHRpcCIsIm1hdGNoSWNvblRvUG9pbnQiLCJ0eXBlIiwiY29tYmluZWRGYWN0b3J5SWNvbiIsIm1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlIiwidW5zaGlmdCIsInNlbGVjdGVkQmFja2dyb3VuZCIsIm1hcmtlckJlbG9uZ3NUb1NvdXJjZSIsImJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQiLCJzdGFuZGFyZEJhY2tncm91bmQiLCJjb21iaW5lZFB1bXBTdGF0aW9uSWNvbiIsImNvbWJpbmVkV1dUUEljb24iLCJyZWRQaW5SZWRTaGFkb3ciLCJ3YXRlckljb25Ob0JhY2tncm91bmQiLCJwb3B1cEFuY2hvciIsImNvbWJpbmVkQ29sbGVjdG9yc0ljb24iLCJzZWNvbmRhcnkiLCJ0aGlyZCIsIndoaXRlUGluQmxhY2tTaGFkb3ciLCJ5ZWxsb3dDaXJjbGVVUkwiLCJwbGFudEljb25VUkwiLCJncmVlbkNpcmNsZVVSTCIsInB1bXBTdGF0aW9uSWNvblVSTCIsImNvbGxlY3Rvckljb24iLCJicmlnaHRCbHVlQ2lyY2xlVVJMIiwiV1dUUEljb25VUkwiLCJ3aGl0ZVBpblJlZFNoYWRvdyIsInNvdXJjZSIsInNvdXJjZXMiLCJmaWx0ZXIiLCJzZWxlY3RlZF9zb3VyY2UiLCJjcmVhdGVTYW1wbGluZ0ljb25Qb2ludCIsInNlY29uZGFyeUljb24iLCJzYW1wbGluZ0ljb24iLCJibHVlQ2lyY2xlVVJMIiwic2FtcGxpbmdJY29uVVJMIiwidGhpcmRJY29uIiwiZm9yRWFjaCIsImluZGV4IiwiY3JlYXRlT2JzZXJ2YXRpb25JY29uUG9pbnQiLCJvYnNlcnZhdGlvbkljb24iLCJwaW5rQ2lyY2xlVVJMIiwib2JzZXJ2YXRpb25JY29uVVJMIiwiY3JlYXRlU2FtcGxpbmdJY29ucyIsInNhbXBsZWRQb2ludElkcyIsInNhbXBsaW5ncyIsInMiLCJpbmNsdWRlcyIsInBvcHVwQ29udGVudCIsIm9icyIsIkdyYXBoSWNvbiIsImkxOG4iLCJ0Iiwic2V2ZXJpdHkiLCJjbGlja2VkIiwic3VidGl0bGVUZXh0IiwiZ2V0UG9pbnRJY29uQnlUeXBlIiwic2V0SWNvbiIsImVsZW1lbnQiLCJjYWxjdWxhdGVXYXRlckNvbnN1bXB0aW9uIiwid2F0ZXJDb25zdW1wdGlvbiIsInJvdW5kX3RvX25lYXJlc3RfayIsImNhbGN1bGF0ZWQiLCJ0b0ZpeGVkIiwicm91bmRUb05lYXJlc3RUaG91c2FuZCIsInBhcnNlRmxvYXQiLCJ0b0xvY2FsZVN0cmluZyIsIk1hdGgiLCJyb3VuZCIsIm51bWJlciIsInJvdW5kZWRUaG91c2FuZHMiLCJyb3VuZGVkVmFsdWUiLCJ0cmFuc2xhdGVGbG93UmF0ZSIsInRvb2x0aXBWaXNpYmxlIiwib24iLCJjbG9zZVBvcHVwIiwiaXNQb3B1cE9wZW4iLCJrYW5kb19vYmplY3RfaWQiLCJzZW5kQW5hbHl0aWNzRXZlbnQiLCJwb2ludF9uYW1lIiwiY29udGVudCIsIndhdGVyUmV1c2VJY29uIiwiZ2V0Rmxvd1JhdGUiLCJiaW5kUG9wdXAiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwiY2xvc2VCdXR0b24iLCJmbG93UmF0ZVVuaXQiLCJpc1JvdW5kIiwicmVtb3ZlTGF5ZXJHcm91cCIsImhhc0xheWVyIiwicmVtb3ZlTGF5ZXIiLCJhZGRMYXllckdyb3VwIiwicG9pbnRJc1dXVFAiLCJpc0ZhY3RvcnlUeXBlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL1dpZGdldHMvTWFwL3BvaW50cy9Qb2ludFV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHcmFwaEljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2xpbmUtY2hhcnQuc3ZnJztcbmltcG9ydCBMLCB7IExhdExuZ1R1cGxlIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgaTE4biBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9wb2ludHMvbW9kZWxzL0lQb2ludCc7XG5pbXBvcnQgYmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYmx1ZS1jaXJjbGUuc3ZnJztcbmltcG9ydCBzYW1wbGluZ0ljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3NhbXBsaW5nLWljb24uc3ZnJztcbmltcG9ydCBwaW5rQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9waW5rLWNpcmNsZS5zdmcnO1xuaW1wb3J0IG9ic2VydmF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvb2JzZXJ2YXRpb24taWNvbi5zdmcnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvZXZlbnRzL21vZGVscy9JRXZlbnQnO1xuaW1wb3J0IHJlZFBpblJlZFNoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcmVkLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5CbGFja1NoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2hpdGUtcGluLWJsYWNrLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHllbGxvd0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMveWVsbG93LWNpcmNsZS5zdmcnO1xuaW1wb3J0IHBsYW50SWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvZmFjdG9yeS1pY29uLnN2Zyc7XG5pbXBvcnQgZ3JlZW5DaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2dyZWVuLWNpcmNsZS5zdmcnO1xuaW1wb3J0IHB1bXBTdGF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcHVtcC1zdGF0aW9uLWljb24uc3ZnJztcbmltcG9ydCBjb2xsZWN0b3JJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9tYXAvcGluLXdhdGVyLnN2Zyc7XG5pbXBvcnQgYnJpZ2h0Qmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYnJpZ2h0LWJsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgV1dUUEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL1dXVFAtaWNvbi5zdmcnO1xuaW1wb3J0IHdhdGVySWNvbk5vQmFja2dyb3VuZCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2F0ZXItbm8tYmFja2dyb3VuZC5zdmcnO1xuaW1wb3J0IHdoaXRlUG9pbnQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3doaXRlLXBvaW50LnBuZyc7XG5pbXBvcnQgeyBldmVudHNDb3VudEljb24gfSBmcm9tICcuLi9NYXBVdGlscyc7XG5pbXBvcnQgeyBnZXRQb2ludEljb25CeVR5cGUgfSBmcm9tICcuL1BvaW50SWNvbic7XG5pbXBvcnQgd2F0ZXJSZXVzZUljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2ljb25zL3dhdGVyX3JldXNlLnN2Zyc7XG5pbXBvcnQgeyBzZW5kQW5hbHl0aWNzRXZlbnQgfSBmcm9tICdzcmMvcGFnZXMvRGFzaGJvYXJkTWFwL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGlzQ29sbGVjdG9yRm9jdXNlZCA9IChwb2ludDogSVBvaW50LCBldmVudDogSUV2ZW50KSA9PiB7XG4gIHJldHVybiAoXG4gICAgZXZlbnQ/Lm9ic2VydmF0aW9ucz8ubGVuZ3RoID09PSAxICYmXG4gICAgcG9pbnQuaWQgPT09IGV2ZW50Lm9ic2VydmF0aW9uc1swXS5wb2ludF9pZFxuICApO1xufTtcblxuY29uc3QgYnVpbGRNYW5ob2xlVG9vbHRpcFN0cmluZyA9IChwb2ludDogSVBvaW50KSA9PiB7XG4gIGxldCBzdHJpbmcgPSBgJHtwb2ludC5ncm91cC5uYW1lfSBgO1xuXG4gIGlmIChwb2ludElzRmFjdG9yeShwb2ludCkpIHtcbiAgICBzdHJpbmcgKz0gYDxici8+U2VjdG9yOiAke3BvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lfWA7XG4gICAgc3RyaW5nICs9IGA8YnIvPldhdGVyIENvbnN1bXB0aW9uOiAke3BvaW50Lmdyb3VwLndhdGVyX2Rpc2NoYXJnZX1gO1xuICB9IGVsc2Uge1xuICAgIHN0cmluZyA9IGAke3BvaW50Lm5hbWV9YDtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgYnViYmxlRm9yV1dUUCA9IChhcmdzKSA9PiB7XG4gIGNvbnN0IHBvaW50Q3VzdG9tSWNvbjogTC5NYXJrZXIgPSBMLm1hcmtlcihhcmdzLm1hcmtlckxvY2F0aW9uLCB7XG4gICAgaWNvbjogZ2V0SWNvbihhcmdzLnd3dHBQb2ludCwgZmFsc2UpLFxuICAgIHJpc2VPbkhvdmVyOiB0cnVlLFxuICB9KTtcblxuICByZXR1cm4gcG9pbnRDdXN0b21JY29uO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUJ1YmJsZVBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHBvaW50OiBJUG9pbnQsXG4gIG1hcCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuICBmbG93X3JhdGVfdW5pdCA9ICdnZF91cycsXG4gIGhhbmRsZUNsaWNrPyxcbikgPT4ge1xuICBjb25zdCBzdWJ0aXRsZSA9IHBvaW50SXNGYWN0b3J5KHBvaW50KSA/IHBvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lIDogJyc7XG4gIGxldCBwb2ludEN1c3RvbUljb246IEwuTWFya2VyID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICBpY29uOiBnZXRJY29uKHBvaW50LCBmYWxzZSwgc3VidGl0bGUpLFxuICAgIHJpc2VPbkhvdmVyOiB0cnVlLFxuICB9KTtcbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faGFzX2RldmljZSddID0gcG9pbnQuaGFzX2RldmljZTtcbiAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnRIb3ZlcmVkJztcblxuICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIGlmIChwb2ludElzRmFjdG9yeShwb2ludCkpIHtcbiAgICBiaW5kUG9wdXBUb01hcmtlcihwb2ludCwgcG9pbnRDdXN0b21JY29uLCBmbG93X3JhdGVfdW5pdCk7XG4gIH1cblxuICBoYW5kbGVNYXJrZXJFdmVudHMobWFwLCBwb2ludCwgcG9pbnRDdXN0b21JY29uLCBoYW5kbGVDbGljayk7XG5cbiAgaWYgKHBvaW50LnJlbGF0ZWRFdmVudHNBbW91bnQpIHtcbiAgICBsZXQgcG9pbnRDdXN0b21JY29uID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IEwuZGl2SWNvbih7XG4gICAgICAgIGNsYXNzTmFtZTogYFxuICAgICAgICAgICR7XG4gICAgICAgICAgICBwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50ID49IDEwMFxuICAgICAgICAgICAgICA/ICdjaXJjbGUtZXZlbnRzLWFtb3VudCBjaXJjbGUtZXZlbnRzLWFtb3VudC0tdHJpZGlnaXQnXG4gICAgICAgICAgICAgIDogJ2NpcmNsZS1ldmVudHMtYW1vdW50J1xuICAgICAgICAgIH0gXG4gICAgICAgICAgJHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50ID4gMiA/ICdhbGVydC1jb2xvcicgOiAnJ31cbiAgICAgICAgICAgIGAsXG4gICAgICAgIGh0bWw6IGA8cD4ke3BvaW50LnJlbGF0ZWRFdmVudHNBbW91bnR9PC9wPmAsXG4gICAgICAgIGljb25BbmNob3I6IGV2ZW50c0NvdW50SWNvbihtYXAuX3pvb20pLmljb25BbmNob3IsXG4gICAgICB9KSxcbiAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICAgIG9wYWNpdHk6IGhvdmVyZWQgPyAxIDogMCxcbiAgICB9KTtcblxuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXInO1xuICAgIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXJIb3ZlcmVkJztcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1hbmhvbGVQb2ludCA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQ/LFxuICBsYXllckdyb3VwPyxcbikgPT4ge1xuICBsZXQgcG9pbnRJY29uID0gbmV3IEwuSWNvbih7XG4gICAgaWNvblVybDogd2hpdGVQb2ludCxcbiAgICBpY29uU2l6ZTogWzksIDldLFxuICAgIGljb25BbmNob3I6IFs0LjUsIDQuNV0sXG4gIH0pO1xuICBsZXQgbWFuaG9sZUljb246IGFueSA9IG5ldyBMLk1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgIGljb246IHBvaW50SWNvbixcbiAgICByaXNlT25Ib3ZlcjogdHJ1ZSxcbiAgfSk7XG4gIG1hbmhvbGVJY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcocG9pbnQpKTtcbiAgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIG1hbmhvbGVJY29uWydrYW5kb19wb2ludF90eXBlJ10gPSAnTWFuaG9sZSc7XG4gIGlmIChob3ZlcmVkKSBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnRIb3ZlcmVkJztcbiAgbGF5ZXJHcm91cC5hZGRMYXllcihtYW5ob2xlSWNvbik7XG59O1xuXG5leHBvcnQgY29uc3QgbWF0Y2hJY29uVG9Qb2ludCA9IChwb2ludDogSVBvaW50LCBldmVudDogSUV2ZW50KSA9PiB7XG4gIHN3aXRjaCAocG9pbnQuZ3JvdXAudHlwZSkge1xuICAgIGNhc2UgJ0dyb3Vwczo6RmFjdG9yeSc6XG4gICAgICBpZiAoY29tYmluZWRGYWN0b3J5SWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRGYWN0b3J5SWNvbjtcbiAgICBjYXNlICdHcm91cHM6OlB1bXBTdGF0aW9uJzpcbiAgICAgIGlmIChjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRQdW1wU3RhdGlvbkljb247XG4gICAgY2FzZSAnR3JvdXBzOjpXYXN0ZXdhdGVyVHJlYXRtZW50UGxhbnQnOlxuICAgICAgaWYgKGNvbWJpbmVkV1dUUEljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkV1dUUEljb247XG5cbiAgICBjYXNlICdHcm91cHM6OkNvbGxlY3RvcnMnOlxuICAgICAgaWYgKGlzQ29sbGVjdG9yRm9jdXNlZChwb2ludCwgZXZlbnQpKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgTC5pY29uKHtcbiAgICAgICAgICAgIGljb25Vcmw6IHJlZFBpblJlZFNoYWRvdyxcbiAgICAgICAgICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgICAgICAgICBpY29uQW5jaG9yOiBbMzAsIDUyXSxcbiAgICAgICAgICB9KSxcblxuICAgICAgICAgIEwuaWNvbih7XG4gICAgICAgICAgICBpY29uVXJsOiB3YXRlckljb25Ob0JhY2tncm91bmQsXG4gICAgICAgICAgICBpY29uU2l6ZTogWzAsIDBdLFxuXG4gICAgICAgICAgICBpY29uQW5jaG9yOiBbMjIsIDQ0XSxcbiAgICAgICAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkQ29sbGVjdG9yc0ljb247XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzdGFuZGFyZEJhY2tncm91bmQgPSAoXG4gIHNlY29uZGFyeTogYm9vbGVhbiA9IGZhbHNlLFxuICB0aGlyZDogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIHJldHVybiBMLmljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUGluQmxhY2tTaGFkb3csXG4gICAgaWNvblNpemU6IHNlY29uZGFyeSA/IFswLCAwXSA6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnkgJiYgdGhpcmQgPyBbLTIsIDE5XSA6IHNlY29uZGFyeSA/IFstMiwgNDRdIDogWzIwLCA0Ml0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZEZhY3RvcnlJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHllbGxvd0NpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHBsYW50SWNvblVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFs1LCAzMF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBncmVlbkNpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHB1bXBTdGF0aW9uSWNvblVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFs3LCAzMl0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZENvbGxlY3RvcnNJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGNvbGxlY3Rvckljb24sXG4gICAgaWNvblNpemU6IFswLCAwXSxcblxuICAgIGljb25BbmNob3I6IFsyNSwgNTBdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRXV1RQSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBicmlnaHRCbHVlQ2lyY2xlVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzEwLjcsIDMzLjddLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogV1dUUEljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbOCwgMzFdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0ZWRCYWNrZ3JvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiByZWRQaW5SZWRTaGFkb3csXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMzIsIDU0XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQgPSAoKSA9PiB7XG4gIHJldHVybiBMLmljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUGluUmVkU2hhZG93LFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzMyLCA1NF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZSA9IChldmVudDogSUV2ZW50LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGxldCBzb3VyY2U7XG5cbiAgaWYgKGV2ZW50ICE9PSBudWxsICYmIGV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzb3VyY2UgPSBldmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXTtcbiAgfVxuXG4gIHJldHVybiBldmVudCAhPT0gbnVsbCAmJiBzb3VyY2UgJiYgZXZlbnQuc2VsZWN0ZWRfc291cmNlID09PSBzb3VyY2UucG9pbnRfaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyQmVsb25nc1RvU291cmNlID0gKGV2ZW50OiBJRXZlbnQsIHBvaW50OiBJUG9pbnQpID0+IHtcbiAgaWYgKGV2ZW50ID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgcmV0dXJuIChcbiAgICBldmVudCAhPT0gbnVsbCAmJlxuICAgIGV2ZW50LnNvdXJjZXMuZmlsdGVyKChzb3VyY2UpID0+IHNvdXJjZS5wb2ludF9pZCA9PT0gcG9pbnQuaWQpWzBdXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgc2Vjb25kYXJ5SWNvbjogYm9vbGVhbixcbiAgbWFwLFxuICBwb2ludDogSVBvaW50LFxuICBldmVudDogSUV2ZW50LFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgLy8gaWNvblNpemU6IFt3aWR0aCwgaGVpZ2h0XSxcbiAgLy8gSWNvbiBBbmNob3I6IFsoLXJpZ2h0KSgrbGVmdCksICgtZG93bikoK3VwKV1cbiAgbGV0IHNhbXBsaW5nSWNvbiA9IFtcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogYmx1ZUNpcmNsZVVSTCxcbiAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzAsIDBdIDogWzAsIDBdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstNywgMTVdIDogWzEwLjcsIDMzLjddLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBzYW1wbGluZ0ljb25VUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTgsIDEzXSA6IFs1LCAzMF0sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gIF07XG5cbiAgbGV0IHRoaXJkSWNvbiA9IGZhbHNlO1xuICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSAmJiAhc2Vjb25kYXJ5SWNvbikge1xuICAgIHNhbXBsaW5nSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSAmJiAhc2Vjb25kYXJ5SWNvbikge1xuICAgIHNhbXBsaW5nSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcmRJY29uID0gdHJ1ZTtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoc2Vjb25kYXJ5SWNvbiwgdGhpcmRJY29uKSk7XG4gIH1cblxuICBzYW1wbGluZ0ljb24uZm9yRWFjaCgoaWNvbiwgaW5kZXgpID0+IHtcbiAgICBsZXQgcG9pbnRDdXN0b21JY29uOiBhbnkgPSBMLm1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgICAgaWNvbjogaWNvbixcbiAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICB9KTtcbiAgICBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vbHRpcFN0cmluZyhwb2ludCkpO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faW5kZXhfb2JqZWN0J10gPSBpbmRleDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2Zld19sYXllcl9pY29uJ10gPSB0cnVlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fc2Vjb25kYXJ5J10gPSB0aGlyZEljb24gPyBmYWxzZSA6IHNlY29uZGFyeUljb247XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb190aGlyZCddID0gdGhpcmRJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ1NhbXBsaW5nJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZ0hvdmVyZWQnO1xuICAgIGxheWVyR3JvdXAuYWRkTGF5ZXIocG9pbnRDdXN0b21JY29uKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlT2JzZXJ2YXRpb25JY29uUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgc2Vjb25kYXJ5SWNvbjogYm9vbGVhbixcbiAgbWFwLFxuICBwb2ludDogSVBvaW50LFxuICBldmVudDogSUV2ZW50LFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgLy8gaWNvblNpemU6IFt3aWR0aCwgaGVpZ2h0XSxcbiAgLy8gSWNvbiBBbmNob3I6IFsoLXJpZ2h0KSgrbGVmdCksICgtZG93bikoK3VwKV1cbiAgbGV0IG9ic2VydmF0aW9uSWNvbiA9IFtcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogcGlua0NpcmNsZVVSTCxcbiAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzAsIDBdIDogWzAsIDBdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstNywgNDBdIDogWzEwLjcsIDMzLjddLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBvYnNlcnZhdGlvbkljb25VUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTgsIDM4XSA6IFs1LCAzMF0sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gIF07XG5cbiAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2Uge1xuICAgIG9ic2VydmF0aW9uSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZChzZWNvbmRhcnlJY29uKSk7XG4gIH1cblxuICBvYnNlcnZhdGlvbkljb24uZm9yRWFjaCgoaWNvbiwgaW5kZXgpID0+IHtcbiAgICBsZXQgcG9pbnRDdXN0b21JY29uOiBhbnkgPSBMLm1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgICAgaWNvbjogaWNvbixcbiAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICB9KTtcbiAgICBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vbHRpcFN0cmluZyhwb2ludCkpO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faW5kZXhfb2JqZWN0J10gPSBpbmRleDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2Zld19sYXllcl9pY29uJ10gPSB0cnVlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fc2Vjb25kYXJ5J10gPSBzZWNvbmRhcnlJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fdGhpcmQnXSA9IGZhbHNlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ09ic2VydmF0aW9uJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdPYnNlcnZhdGlvbkhvdmVyZWQnO1xuICAgIGxheWVyR3JvdXAuYWRkTGF5ZXIocG9pbnRDdXN0b21JY29uKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU2FtcGxpbmdJY29ucyA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBldmVudDogSUV2ZW50LFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQsXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIGxldCBzYW1wbGVkUG9pbnRJZHMgPSBldmVudC5zYW1wbGluZ3MubWFwKChzKSA9PiBzLnBvaW50X2lkKTtcbiAgaWYgKFxuICAgIGV2ZW50ICE9PSBudWxsICYmXG4gICAgZXZlbnQuc2FtcGxpbmdzLmxlbmd0aCAhPT0gMCAmJlxuICAgIHNhbXBsZWRQb2ludElkcy5pbmNsdWRlcyhwb2ludC5pZClcbiAgKSB7XG4gICAgY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQoXG4gICAgICBtYXJrZXJMb2NhdGlvbixcbiAgICAgIG1hdGNoSWNvblRvUG9pbnQocG9pbnQsIGV2ZW50KSAhPT0gbnVsbCxcbiAgICAgIG1hcCxcbiAgICAgIHBvaW50LFxuICAgICAgZXZlbnQsXG4gICAgICBob3ZlcmVkLFxuICAgICAgbGF5ZXJHcm91cCxcbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcG9wdXBDb250ZW50ID0gKG9iczogYW55LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChvYnMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LXBvcHVwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWdyYXBoLWljb24gcG9wdXAtZ3JhcGgtaWNvbi0ke3BvaW50LmlkfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7R3JhcGhJY29ufVwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zaXRlLW5hbWVcIj48Yj4ke3BvaW50Lmdyb3VwLm5hbWV9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxoci8+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2VjdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtvYnMuaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtHcmFwaEljb259XCIvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NpdGUtbmFtZVwiPjxiPiR7XG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAubmFtZVxuICAgICAgICAgICAgICAgICAgICB9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdHlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdwb3B1cC1jb250ZW50X19zZXZlcml0eS0tJyArIG9icy5zZXZlcml0eVxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXRpZXMuJHtvYnMuc2V2ZXJpdHl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwicG9wdXAtY29udGVudF9faHJcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19kaXNjaGFyZ2UtdGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LXBcIj4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuZmlyc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwiZmlyc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3Lmxhc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwibGFzdC1zZWVuLXBvcHVwXCI+PC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICB9XG59O1xuXG5jb25zdCBnZXRJY29uID0gKHBvaW50OiBJUG9pbnQsIGNsaWNrZWQ6IGJvb2xlYW4sIHN1YnRpdGxlOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgdHlwZSA9IHBvaW50Lmhhc19kZXZpY2UgPyBwb2ludC5ncm91cC50eXBlIDogJ0dyb3Vwczo6ZGVmYXVsdCc7XG4gIGNvbnN0IHN1YnRpdGxlVGV4dCA9IHN1YnRpdGxlID8gc3VidGl0bGUgOiBwb2ludC5ncm91cC5zZWN0b3JfbmFtZTtcbiAgcmV0dXJuIGdldFBvaW50SWNvbkJ5VHlwZSh0eXBlLCBwb2ludC5uYW1lLCBzdWJ0aXRsZVRleHQsIGNsaWNrZWQsICFjbGlja2VkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRJY29uID0gKGVsZW1lbnQsIGNsaWNrZWQsIHBvaW50KSA9PiB7XG4gIGVsZW1lbnQuc2V0SWNvbihnZXRJY29uKHBvaW50LCBjbGlja2VkKSk7XG59O1xuXG4vLyByb3VuZCB0byBuZWFyZXN0IHRob3VzYW5kIGlzIHVzZWQgd2hlbiB5b3Ugd2FudCB0byByb3VuZCB0aGUgd2F0ZXIgY29uc3VtcHRpb24gdG8gdGhlIG5lYXJlc3QgdGhvdXNhbmRcbi8vIGZvciBleGFtcGxlOiAyMzQsNTY3IC0+IDIzNSwwMDBcbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVXYXRlckNvbnN1bXB0aW9uID0gKFxuICBmbG93X3JhdGVfdW5pdDogc3RyaW5nLFxuICB3YXRlckNvbnN1bXB0aW9uOiBudW1iZXIsXG4gIHJvdW5kX3RvX25lYXJlc3RfazogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIGxldCBjYWxjdWxhdGVkID0gJzAnO1xuXG4gIGlmICh3YXRlckNvbnN1bXB0aW9uID4gMCkge1xuICAgIHN3aXRjaCAoZmxvd19yYXRlX3VuaXQpIHtcbiAgICAgIGNhc2UgJ20zZCc6XG4gICAgICAgIGNhbGN1bGF0ZWQgPSB3YXRlckNvbnN1bXB0aW9uLnRvRml4ZWQoMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2RfdXMnOlxuICAgICAgICBjYWxjdWxhdGVkID0gKHdhdGVyQ29uc3VtcHRpb24gKiAyNjQuMTcyKS50b0ZpeGVkKDIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dkX3VrJzpcbiAgICAgICAgY2FsY3VsYXRlZCA9ICh3YXRlckNvbnN1bXB0aW9uICogMjE5Ljk2OSkudG9GaXhlZCgyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChyb3VuZF90b19uZWFyZXN0X2spIHtcbiAgICByZXR1cm4gcm91bmRUb05lYXJlc3RUaG91c2FuZChwYXJzZUZsb2F0KGNhbGN1bGF0ZWQpKS50b0xvY2FsZVN0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoY2FsY3VsYXRlZCkpLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH1cbn07XG5cbmNvbnN0IHJvdW5kVG9OZWFyZXN0VGhvdXNhbmQgPSAobnVtYmVyKSA9PiB7XG4gIC8vIGlmKGlzQWxyZWFkeVJvdW5kZWQobnVtYmVyKSkge1xuICAvLyAgIHJldHVybiBudW1iZXI7XG4gIC8vIH1cblxuICBpZiAobnVtYmVyIDwgMTAwMCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlcik7XG4gIH1cblxuICBjb25zdCByb3VuZGVkVGhvdXNhbmRzID0gTWF0aC5yb3VuZChudW1iZXIgLyAxMDAwKTtcbiAgY29uc3Qgcm91bmRlZFZhbHVlID0gcm91bmRlZFRob3VzYW5kcyAqIDEwMDA7XG5cbiAgcmV0dXJuIHJvdW5kZWRWYWx1ZTtcbn07XG5cbi8vIGNvbnN0IGlzQWxyZWFkeVJvdW5kZWQgPSAobnVtYmVyKSA9PiB7XG4vLyAgIHJldHVybiBudW1iZXIgPT09IE1hdGgucm91bmQobnVtYmVyKTtcbi8vIH1cblxuZXhwb3J0IGNvbnN0IHRyYW5zbGF0ZUZsb3dSYXRlID0gKGZsb3dfcmF0ZV91bml0KSA9PiB7XG4gIHJldHVybiBpMThuLnQoXG4gICAgYGRhc2hib2FyZF92Mi5wcm9maWxlLmZsb3dfcmF0ZV91bml0X29wdGlvbnMuJHtcbiAgICAgIGZsb3dfcmF0ZV91bml0LmluY2x1ZGVzKCdnZCcpID8gJ2dkJyA6IGZsb3dfcmF0ZV91bml0XG4gICAgfWAsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlTWFya2VyRXZlbnRzID0gKFxuICBtYXAsXG4gIHBvaW50LFxuICBwb2ludEN1c3RvbUljb24sXG4gIGhhbmRsZUNsaWNrLFxuKSA9PiB7XG4gIGxldCB0b29sdGlwVmlzaWJsZSA9IGZhbHNlO1xuXG4gIG1hcC5vbignem9vbXN0YXJ0JywgZnVuY3Rpb24gKCkge1xuICAgIG1hcC5jbG9zZVBvcHVwKCk7XG4gIH0pO1xuXG4gIHBvaW50Q3VzdG9tSWNvbi5vbigncG9wdXBjbG9zZScsICgpID0+IHtcbiAgICAvLyBzZXRJY29uKHBvaW50Q3VzdG9tSWNvbiwgZmFsc2UsIHBvaW50KTtcbiAgICB0b29sdGlwVmlzaWJsZSA9IGZhbHNlO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ3BvcHVwb3BlbicsICgpID0+IHtcbiAgICAvLyBzZXRJY29uKHBvaW50Q3VzdG9tSWNvbiwgdHJ1ZSwgcG9pbnQpO1xuICAgIHRvb2x0aXBWaXNpYmxlID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcG9pbnRDdXN0b21JY29uLm9uKCdtb3VzZW92ZXInLCAoKSA9PiB7XG4gICAgaWYgKHRvb2x0aXBWaXNpYmxlKSByZXR1cm47XG5cbiAgICBzZXRJY29uKHBvaW50Q3VzdG9tSWNvbiwgdHJ1ZSwgcG9pbnQpO1xuICAgIHRvb2x0aXBWaXNpYmxlID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcG9pbnRDdXN0b21JY29uLm9uKCdtb3VzZW91dCcsICgpID0+IHtcbiAgICBpZiAocG9pbnRDdXN0b21JY29uLmlzUG9wdXBPcGVuKCkpIHJldHVybjtcblxuICAgIHNldEljb24ocG9pbnRDdXN0b21JY29uLCBmYWxzZSwgcG9pbnQpO1xuICAgIHRvb2x0aXBWaXNpYmxlID0gZmFsc2U7XG4gIH0pO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICBwb2ludEN1c3RvbUljb24ub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgaGFuZGxlQ2xpY2socG9pbnRDdXN0b21JY29uLmthbmRvX29iamVjdF9pZCk7XG5cbiAgICAgIGlmIChwb2ludElzRmFjdG9yeShwb2ludCkpIHtcbiAgICAgICAgc2VuZEFuYWx5dGljc0V2ZW50KCdNYXAgVmlldyAtIEZhY3RvcnkgY2xpY2tlZCcsICdtYXAnLCB7XG4gICAgICAgICAgcG9pbnRfaWQ6IHBvaW50LmlkLFxuICAgICAgICAgIHBvaW50X25hbWU6IHBvaW50Lm5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYmluZFBvcHVwVG9NYXJrZXIgPSAocG9pbnQsIGxheWVyR3JvdXAsIGZsb3dfcmF0ZV91bml0KSA9PiB7XG4gIGxldCBjb250ZW50ID0gYFxuICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudCc+XG4gICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9faGVhZGVyJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRfX2hlYWRlcl9fdGl0bGVzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXJfX3RpdGxlc19fdGl0bGUnPiR7XG4gICAgICAgICAgICAgICAgICBwb2ludC5uYW1lXG4gICAgICAgICAgICAgICAgfTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9faGVhZGVyX190aXRsZXNfX3N1YnRpdGxlJz4ke1xuICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAuc2VjdG9yX25hbWVcbiAgICAgICAgICAgICAgICB9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keSc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW0nPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9faWNvbic+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPScke3dhdGVyUmV1c2VJY29ufScgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX3RpdGxlcyc+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX3RpdGxlc19fdGl0bGUnPlxuICAgICAgICAgICAgICAgICAgICAke2dldEZsb3dSYXRlKHBvaW50Lmdyb3VwLndhdGVyX2Rpc2NoYXJnZSwgZmxvd19yYXRlX3VuaXQpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX3RpdGxlc19fc3VidGl0bGUnPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAnd2F0ZXJfZGlzY2hhcmdlJyxcbiAgICAgICAgICAgICAgICAgICl9PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgYDtcblxuICBsYXllckdyb3VwLmJpbmRQb3B1cChjb250ZW50LCB7XG4gICAgY2xhc3NOYW1lOiAncG9pbnQtbWFya2VyLXBvcHVwJyxcbiAgICBtaW5XaWR0aDogJzIxNHB4JyxcbiAgICBtYXhXaWR0aDogJzIxNHB4JyxcbiAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rmxvd1JhdGUgPSAoXG4gIHdhdGVyQ29uc3VtcHRpb246IG51bWJlcixcbiAgZmxvd1JhdGVVbml0OiBzdHJpbmcsXG4gIGlzUm91bmQ6IGJvb2xlYW4gPSBmYWxzZSxcbikgPT4ge1xuICBpZiAod2F0ZXJDb25zdW1wdGlvbiA+IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgY2FsY3VsYXRlV2F0ZXJDb25zdW1wdGlvbihmbG93UmF0ZVVuaXQsIHdhdGVyQ29uc3VtcHRpb24sIGlzUm91bmQpICtcbiAgICAgICcgJyArXG4gICAgICB0cmFuc2xhdGVGbG93UmF0ZShmbG93UmF0ZVVuaXQpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gaTE4bi50KCdldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdGllcy51bmtub3duJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cCA9IChtYXAsIGxheWVyR3JvdXApID0+IHtcbiAgaWYgKG1hcC5oYXNMYXllcihsYXllckdyb3VwKSkge1xuICAgIG1hcC5yZW1vdmVMYXllcihsYXllckdyb3VwKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZExheWVyR3JvdXAgPSAobWFwLCBsYXllckdyb3VwKSA9PiB7XG4gIGlmICghbWFwLmhhc0xheWVyKGxheWVyR3JvdXApKSB7XG4gICAgbWFwLmFkZExheWVyKGxheWVyR3JvdXApO1xuICB9IGVsc2Uge1xuICAgIHJlbW92ZUxheWVyR3JvdXAobWFwLCBsYXllckdyb3VwKTtcbiAgICBhZGRMYXllckdyb3VwKG1hcCwgbGF5ZXJHcm91cCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwb2ludElzV1dUUCA9IChwb2ludDogSVBvaW50KSA9PiB7XG4gIHJldHVybiBwb2ludC5ncm91cC50eXBlID09PSAnR3JvdXBzOjpXYXN0ZXdhdGVyVHJlYXRtZW50UGxhbnQnO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvaW50SXNGYWN0b3J5ID0gKHBvaW50OiBJUG9pbnQpID0+IHtcbiAgcmV0dXJuIGlzRmFjdG9yeVR5cGUocG9pbnQuZ3JvdXAudHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNGYWN0b3J5VHlwZSA9ICh0eXBlOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIHR5cGUgPT09ICdHcm91cHM6OkZhY3RvcnknO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFDQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFBMkMsSUFBQUUsV0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQUEsSUFBQUcsYUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQUEsSUFBQUksV0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQUEsSUFBQUssZ0JBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQU8zQyxJQUFBTSxnQkFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sa0JBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFR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