@kando-env/kando-ui 1.2.228-alpha.12 → 1.2.228-alpha.121

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 (581) hide show
  1. package/lib/Router.js +8 -66
  2. package/lib/Widgets/EventsCarousel/EventsCarousel.js +11 -41
  3. package/lib/Widgets/EventsRow/EventsRow.js +15 -42
  4. package/lib/Widgets/Map/GraphUtils.js +1 -4
  5. package/lib/Widgets/Map/Map.js +94 -95
  6. package/lib/Widgets/Map/Map.scss +2 -0
  7. package/lib/Widgets/Map/MapUtils.js +7 -58
  8. package/lib/Widgets/Map/areas/AreaPolygon.js +7 -27
  9. package/lib/Widgets/Map/areas/AreaPolygons.js +8 -21
  10. package/lib/Widgets/Map/edges/Edge.js +10 -31
  11. package/lib/Widgets/Map/edges/Edge.scss +7 -2
  12. package/lib/Widgets/Map/edges/Edges.js +11 -20
  13. package/lib/Widgets/Map/edges/arrows/Arrows.js +7 -22
  14. package/lib/Widgets/Map/events/Event.js +7 -23
  15. package/lib/Widgets/Map/events/EventIndicator.js +20 -43
  16. package/lib/Widgets/Map/events/EventPath.js +5 -20
  17. package/lib/Widgets/Map/events/EventUtils.js +15 -62
  18. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +5 -19
  19. package/lib/Widgets/Map/events/PointOfEvent.js +5 -34
  20. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +4 -14
  21. package/lib/Widgets/Map/events/Snail.js +7 -19
  22. package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +15 -54
  23. package/lib/Widgets/Map/map/FloatingGraph.js +3 -19
  24. package/lib/Widgets/Map/map/GraphDateButton.js +3 -9
  25. package/lib/Widgets/Map/matchGraph/MatchGraph.js +5 -11
  26. package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +4 -10
  27. package/lib/Widgets/Map/points/PointIcon.js +3 -16
  28. package/lib/Widgets/Map/points/PointIcon.scss +16 -1
  29. package/lib/Widgets/Map/points/PointMarker.js +13 -28
  30. package/lib/Widgets/Map/points/PointMarkers.js +59 -83
  31. package/lib/Widgets/Map/points/PointUtils.js +32 -114
  32. package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +19 -53
  33. package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +4 -19
  34. package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +1 -13
  35. package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +1 -5
  36. package/lib/Widgets/MostPolluting/Areas/Areas.js +19 -53
  37. package/lib/Widgets/MostPolluting/Areas/areas.mock.js +1 -1
  38. package/lib/Widgets/MostPolluting/Areas/areasResponse.interface.js +1 -1
  39. package/lib/Widgets/MostPolluting/Areas/styles.js +1 -7
  40. package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +3 -11
  41. package/lib/Widgets/MostPolluting/Factories/Factories.js +30 -64
  42. package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +4 -21
  43. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +1 -10
  44. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +4 -17
  45. package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +3 -7
  46. package/lib/Widgets/MostPolluting/Factories/factories.mock.js +1 -1
  47. package/lib/Widgets/MostPolluting/Factories/factoriesResponse.interface.js +1 -1
  48. package/lib/Widgets/MostPolluting/Factories/styles.js +1 -7
  49. package/lib/Widgets/MostPolluting/MostPolluting.js +37 -24
  50. package/lib/Widgets/MostPolluting/MostPolluting.stories.js +13 -17
  51. package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +2 -9
  52. package/lib/Widgets/MostPolluting/ShowMore/styles.js +1 -5
  53. package/lib/Widgets/MostPolluting/assets/index.js +17 -28
  54. package/lib/Widgets/MostPolluting/components/ChangePercent.js +1 -16
  55. package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +15 -26
  56. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +4 -26
  57. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +25 -33
  58. package/lib/Widgets/MostPolluting/components/PotentialImpact.js +4 -20
  59. package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +29 -43
  60. package/lib/Widgets/MostPolluting/models.js +1 -1
  61. package/lib/Widgets/MostPolluting/styles.js +1 -7
  62. package/lib/Widgets/PotentialImpactSummary/Back/Back.js +2 -9
  63. package/lib/Widgets/PotentialImpactSummary/Icon.js +1 -11
  64. package/lib/Widgets/PotentialImpactSummary/index.js +7 -29
  65. package/lib/Widgets/PotentialImpactSummary/index.test.js +17 -36
  66. package/lib/Widgets/PotentialImpactSummary/styles.js +2 -15
  67. package/lib/Widgets/PotentialImpactSummary/useCasesResponse.interface.js +1 -1
  68. package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +4 -10
  69. package/lib/Widgets/QualitySummary/PieChart/PieChart.js +7 -21
  70. package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +19 -29
  71. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +15 -24
  72. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +7 -21
  73. package/lib/Widgets/QualitySummary/QualitySummary.js +8 -24
  74. package/lib/Widgets/QualitySummary/qualitySummary.mock.js +2 -2
  75. package/lib/Widgets/QualitySummary/qualitySummaryResponse.interface.js +1 -1
  76. package/lib/Widgets/QualitySummary/styles.js +3 -16
  77. package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +10 -21
  78. package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +9 -34
  79. package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +9 -18
  80. package/lib/Widgets/UtilityInformation/UtilityInformation.js +30 -59
  81. package/lib/Widgets/UtilityInformation/UtilityInformationResponse.interface.js +1 -1
  82. package/lib/Widgets/UtilityInformation/styles.js +2 -22
  83. package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +2 -2
  84. package/lib/assets/icons/index.js +5 -8
  85. package/lib/assets/icons/kandoStepper/index.js +9 -14
  86. package/lib/components/ApplyButton/ApplyButton.js +5 -11
  87. package/lib/components/ApplyButton/index.js +1 -4
  88. package/lib/components/Backdrop/Backdrop.js +2 -8
  89. package/lib/components/ContentLoader/ContentLoader.js +7 -12
  90. package/lib/components/ContentLoader/index.js +1 -2
  91. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +7 -14
  92. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +2 -8
  93. package/lib/components/CustomInputs/DoubleTabs/styles.js +2 -10
  94. package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +5 -18
  95. package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +1 -5
  96. package/lib/components/CustomInputs/Search/Search.js +13 -38
  97. package/lib/components/CustomInputs/Search/index.js +1 -4
  98. package/lib/components/CustomInputs/Select/Select.js +33 -33
  99. package/lib/components/CustomInputs/Select/Select.stories.js +2 -8
  100. package/lib/components/DamageType/DamageType.js +37 -76
  101. package/lib/components/DamageType/index.js +1 -4
  102. package/lib/components/DataLoaderError/DataLoaderError.js +4 -10
  103. package/lib/components/DischargeHeatmap/DischargeHeatmap.js +6 -16
  104. package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +17 -37
  105. package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +12 -37
  106. package/lib/components/DischargeHeatmap/HighchartsOptions.js +6 -10
  107. package/lib/components/DischargeHeatmap/index.js +1 -4
  108. package/lib/components/DischargeHeatmap/mocks/handlers.js +3 -4
  109. package/lib/components/DischargeHeatmap/popupText.js +1 -16
  110. package/lib/components/DischargeHeatmap/titles.js +1 -8
  111. package/lib/components/DischargeHeatmap/types.js +1 -1
  112. package/lib/components/ErrorBoundary.js +3 -15
  113. package/lib/components/Events/Events.js +5 -30
  114. package/lib/components/Events/index.js +1 -4
  115. package/lib/components/Graph/Graph.js +31 -74
  116. package/lib/components/Graph/index.js +1 -4
  117. package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +1 -7
  118. package/lib/components/Header/Breadcrumbs/index.js +1 -4
  119. package/lib/components/Header/DoubleTabs/DoubleTabs.js +14 -30
  120. package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +2 -8
  121. package/lib/components/Header/DoubleTabs/styles.js +2 -10
  122. package/lib/components/Header/Header.js +1 -7
  123. package/lib/components/Header/Header.stories.js +2 -8
  124. package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +8 -12
  125. package/lib/components/Header/InfoBar/InfoBar.js +4 -30
  126. package/lib/components/Header/InfoBar/Search/Control.js +2 -13
  127. package/lib/components/Header/InfoBar/Search/GroupLabel.js +1 -12
  128. package/lib/components/Header/InfoBar/Search/Search.js +5 -26
  129. package/lib/components/Header/InfoBar/Search/SearchContainer.js +4 -21
  130. package/lib/components/Header/InfoBar/Search/index.js +1 -4
  131. package/lib/components/Header/InfoBar/Search/searchStyle.js +1 -4
  132. package/lib/components/Header/KandoNavbar/KandoNavbar.js +46 -91
  133. package/lib/components/Header/KandoNavbar/index.js +1 -4
  134. package/lib/components/Header/Slideshow/Slideshow.js +35 -71
  135. package/lib/components/Header/Slideshow/index.js +1 -4
  136. package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +1 -7
  137. package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +2 -15
  138. package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +1 -15
  139. package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +7 -24
  140. package/lib/components/Header/Toolbar/Toolbar.js +46 -84
  141. package/lib/components/InfoBar/InfoBar.js +8 -23
  142. package/lib/components/InfoBar/InfoBar.stories.js +2 -8
  143. package/lib/components/KandoModal/KandoModal.js +19 -42
  144. package/lib/components/KandoModal/index.js +1 -4
  145. package/lib/components/Link.js +2 -11
  146. package/lib/components/Links/CustomRedirect/CustomRedirect.js +3 -12
  147. package/lib/components/Links/StyledLink/StyledLink.js +6 -16
  148. package/lib/components/Links/StyledNavLink/StyledNavLink.js +4 -14
  149. package/lib/components/LiveEvents/CarouselSlide.js +5 -11
  150. package/lib/components/LiveEvents/LiveEvents.js +1 -10
  151. package/lib/components/LiveEvents/index.js +1 -4
  152. package/lib/components/LoaderByPercent/LoaderByPercent.js +13 -23
  153. package/lib/components/Map/Map.js +12 -26
  154. package/lib/components/Map/index.js +1 -4
  155. package/lib/components/Modal/Modal.js +3 -10
  156. package/lib/components/NarrowHeader.js +1 -12
  157. package/lib/components/PointInfo/PointInfo.js +10 -22
  158. package/lib/components/PointInfo/index.js +1 -4
  159. package/lib/components/PopupModal/PopupModal.js +6 -17
  160. package/lib/components/PopupModal/PopupModal.stories.js +2 -11
  161. package/lib/components/Sector/Sector.js +4 -13
  162. package/lib/components/Sector/Sector.test.js +3 -8
  163. package/lib/components/Sector/index.js +1 -4
  164. package/lib/components/Sector/sectorIcons.js +1 -27
  165. package/lib/components/SevereEvent/Eta/Eta.js +20 -40
  166. package/lib/components/SevereEvent/Eta/styles.js +1 -5
  167. package/lib/components/SevereEvent/SevereEvent.js +15 -36
  168. package/lib/components/Spinner/Spinner.js +5 -10
  169. package/lib/components/Spinner/Spinner.stories.js +2 -8
  170. package/lib/components/Spinner/index.js +1 -4
  171. package/lib/components/Spinner/styles.js +1 -9
  172. package/lib/components/Tabs/Tabs.js +4 -24
  173. package/lib/components/Tabs/Tabs.stories.js +2 -8
  174. package/lib/components/Tabs/assets/index.js +1 -6
  175. package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +2 -12
  176. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +12 -43
  177. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +12 -36
  178. package/lib/components/TimeRangeSelector/KandoRangePicker/index.js +1 -4
  179. package/lib/components/TimeRangeSelector/TimeRangeHelper.js +9 -29
  180. package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +4 -9
  181. package/lib/components/TimeRangeSelector/TimeRangeItem/index.js +1 -4
  182. package/lib/components/TimeRangeSelector/TimeRangeList.js +4 -13
  183. package/lib/components/TimeRangeSelector/TimeRangeOptions.js +11 -24
  184. package/lib/components/TimeRangeSelector/TimeRangeSelector.js +11 -36
  185. package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +2 -10
  186. package/lib/components/TimeRangeSelector/constants.js +2 -2
  187. package/lib/components/TimeRangeSelector/index.js +1 -4
  188. package/lib/components/Toggle/Toggle.js +7 -21
  189. package/lib/components/Toggle/index.js +1 -4
  190. package/lib/components/TrendGraph/TrendGraph.js +16 -49
  191. package/lib/components/TrendGraph/index.js +1 -4
  192. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +13 -37
  193. package/lib/components/TrendGraphNVL/index.js +1 -4
  194. package/lib/development-environment/index.js +1 -13
  195. package/lib/development-environment/mock/browser.js +1 -8
  196. package/lib/development-environment/mock/get.js +1 -5
  197. package/lib/development-environment/mock/handlers.js +1 -26
  198. package/lib/development-environment/mock/mockBus.js +2 -7
  199. package/lib/development-environment/mock/mockObjects/area-trends-graph.js +1 -1
  200. package/lib/development-environment/mock/mockObjects/areaInformation.js +1 -1
  201. package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +1 -1
  202. package/lib/development-environment/mock/mockObjects/areaSitesData.js +1 -1
  203. package/lib/development-environment/mock/mockObjects/areasJson.js +1 -1
  204. package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +1 -1
  205. package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +1 -1
  206. package/lib/development-environment/mock/mockObjects/data-menuData.js +1 -1
  207. package/lib/development-environment/mock/mockObjects/data-search.js +1 -1
  208. package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +1 -1
  209. package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +1 -1
  210. package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +1 -1
  211. package/lib/development-environment/mock/mockObjects/eventsJson.js +1 -1
  212. package/lib/development-environment/mock/mockObjects/metascore.js +1 -1
  213. package/lib/development-environment/mock/mockObjects/permissionsJson.js +1 -1
  214. package/lib/development-environment/mock/mockObjects/pointsJson.js +1 -1
  215. package/lib/development-environment/mock/mockObjects/site-info.js +1 -1
  216. package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +1 -1
  217. package/lib/development-environment/togly/ToglyDashboard.js +4 -22
  218. package/lib/development-environment/togly/ToglyItem.js +5 -25
  219. package/lib/development-environment/togly/flags.js +1 -1
  220. package/lib/development-environment/togly/init.js +1 -6
  221. package/lib/development-environment/togly/macro.js +7 -9
  222. package/lib/development-environment/togly/useDoubleKeyDown.js +1 -8
  223. package/lib/development-environment/togly/useLocalStorage.js +12 -19
  224. package/lib/hooks/useApi.js +10 -29
  225. package/lib/hooks/useApiWithDashboardQuery.js +10 -30
  226. package/lib/hooks/useClickOutside.js +1 -5
  227. package/lib/hooks/useInitializeHeaders.js +2 -9
  228. package/lib/hooks/useKandoFetch.js +13 -27
  229. package/lib/hooks/useMap.js +8 -35
  230. package/lib/hooks/useNavContext.js +13 -22
  231. package/lib/hooks/useQueryURL.js +1 -4
  232. package/lib/hooks/useRemoveExistingLayers.js +2 -7
  233. package/lib/hooks/useUpdateEventBodyTail.js +1 -10
  234. package/lib/hooks/useUserTimeZone.js +1 -9
  235. package/lib/hooks/useUserTimeZone.test.js +1 -9
  236. package/lib/hooks/useWindowSize.js +14 -19
  237. package/lib/i18n/en.json +42 -4
  238. package/lib/i18n/en_uk.json +25 -3
  239. package/lib/i18n/fr.json +24 -2
  240. package/lib/i18n/he.json +33 -3
  241. package/lib/i18n/it.json +24 -2
  242. package/lib/index.js +21 -29
  243. package/lib/macros/getVersion.js +2 -3
  244. package/lib/models/IAction.js +1 -1
  245. package/lib/models/IAppState.js +1 -1
  246. package/lib/pages/AreaPage/AreaPage.js +13 -38
  247. package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +6 -17
  248. package/lib/pages/AreaPage/Dashboard/Dashboard.js +3 -24
  249. package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +11 -35
  250. package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +6 -8
  251. package/lib/pages/AreaPage/Dashboard/Sites/Sites.js +46 -65
  252. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +1 -10
  253. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +3 -15
  254. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +3 -7
  255. package/lib/pages/AreaPage/Dashboard/Sites/SitesResponse.interface.js +1 -1
  256. package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +1 -1
  257. package/lib/pages/AreaPage/Dashboard/Sites/styles.js +3 -11
  258. package/lib/pages/AssessmentPage/AssessmentPage.js +5 -30
  259. package/lib/pages/CannyWidget/Feedback.js +10 -25
  260. package/lib/pages/CovidPage/CovidPage.js +1 -14
  261. package/lib/pages/CovidPage/components/Body.js +9 -33
  262. package/lib/pages/CovidPage/components/Map.js +20 -38
  263. package/lib/pages/CovidPage/components/Sidebar.js +4 -18
  264. package/lib/pages/CovidPage/components/Summary.js +8 -29
  265. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +13 -37
  266. package/lib/pages/CovidPage/components/TrendGraphNVL/index.js +1 -4
  267. package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +16 -42
  268. package/lib/pages/CovidPage/components/TrendPopupContent/index.js +1 -4
  269. package/lib/pages/CovidPage/components/areas/Area.js +6 -33
  270. package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +4 -45
  271. package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +5 -18
  272. package/lib/pages/CovidPage/components/areas/AreasList.js +14 -33
  273. package/lib/pages/CovidPage/components/areas/Sort.js +5 -19
  274. package/lib/pages/CovidPage/components/nvlStatusHelper.js +2 -11
  275. package/lib/pages/EventsPage/Body/Body.js +2 -19
  276. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +11 -28
  277. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +11 -31
  278. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +4 -11
  279. package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +3 -11
  280. package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +5 -10
  281. package/lib/pages/EventsPage/DragAndDropArea/index.js +1 -4
  282. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +9 -34
  283. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +2 -21
  284. package/lib/pages/EventsPage/EventsPage.js +1 -13
  285. package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +9 -32
  286. package/lib/pages/EventsPage/events/EventsStyle.scss +1 -0
  287. package/lib/pages/EventsPage/events/MoreInfo.js +1 -19
  288. package/lib/pages/EventsPage/events/Sidebar.js +5 -18
  289. package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +5 -29
  290. package/lib/pages/EventsPage/events/event_info/EventDetails.js +8 -32
  291. package/lib/pages/EventsPage/events/event_info/EventInfo.js +13 -41
  292. package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +2 -14
  293. package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +10 -40
  294. package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +1 -12
  295. package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +8 -30
  296. package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +1 -8
  297. package/lib/pages/EventsPage/events/event_info/MockHistoryInformation/LineChartYear/LineChartYear.js +7 -27
  298. package/lib/pages/EventsPage/events/event_info/MockHistoryInformation/MockHistoryInformation.js +2 -10
  299. package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +5 -21
  300. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsLineChart.js +4 -23
  301. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +4 -22
  302. package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +6 -33
  303. package/lib/pages/EventsPage/events/event_info/samplings/Sampling.js +3 -15
  304. package/lib/pages/EventsPage/events/event_info/samplings/Samplings.js +2 -10
  305. package/lib/pages/EventsPage/events/event_info/sources/Source.js +8 -31
  306. package/lib/pages/EventsPage/events/event_info/sources/Sources.js +4 -20
  307. package/lib/pages/EventsPage/events/events_list/EventItem.js +3 -24
  308. package/lib/pages/EventsPage/events/events_list/EventUtils.js +2 -13
  309. package/lib/pages/EventsPage/events/events_list/EventsList.js +50 -130
  310. package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +11 -32
  311. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +31 -96
  312. package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +10 -55
  313. package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +5 -17
  314. package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +15 -38
  315. package/lib/pages/EventsPage/events/events_list/Sort.js +4 -23
  316. package/lib/pages/ImportFileWizard/FileUploadRespones.js +4 -19
  317. package/lib/pages/ImportFileWizard/ImportButtomButtons.js +2 -8
  318. package/lib/pages/ImportFileWizard/ImportFile.js +10 -29
  319. package/lib/pages/ImportFileWizard/ResponseBody.js +3 -12
  320. package/lib/pages/ImportFileWizard/ValidationForm.js +7 -27
  321. package/lib/pages/ImportFileWizard/ValidationResponse.js +6 -30
  322. package/lib/pages/ImportFileWizard/importFileUtils.js +1 -2
  323. package/lib/pages/ImportFileWizard/index.js +1 -4
  324. package/lib/pages/ImportGisPage/ImportGisContainer.js +7 -27
  325. package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +10 -27
  326. package/lib/pages/ImportGisPage/importGisUtils.js +1 -13
  327. package/lib/pages/ImportGisProcess/index.js +4 -18
  328. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +5 -19
  329. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +3 -10
  330. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +1 -8
  331. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +25 -58
  332. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +2 -8
  333. package/lib/pages/NotificationsPage/Notification/Notification.js +8 -16
  334. package/lib/pages/NotificationsPage/Notifications.interface.js +1 -1
  335. package/lib/pages/NotificationsPage/Notifications.mock.js +1 -1
  336. package/lib/pages/NotificationsPage/Notifications.stories.js +2 -10
  337. package/lib/pages/NotificationsPage/NotificationsPage.js +11 -35
  338. package/lib/pages/NotificationsPage/assets/index.js +15 -24
  339. package/lib/pages/NotificationsPageV2/NotificationsPage.js +35 -83
  340. package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +4 -24
  341. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +17 -42
  342. package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +18 -49
  343. package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +6 -49
  344. package/lib/pages/NotificationsPageV2/notificationUtils.js +8 -31
  345. package/lib/pages/OldSitePage/IDashboardData.js +1 -1
  346. package/lib/pages/OldSitePage/OldSitePage.js +16 -77
  347. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +3 -16
  348. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +2 -8
  349. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +4 -9
  350. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +5 -12
  351. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +2 -12
  352. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +7 -23
  353. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +6 -20
  354. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +4 -10
  355. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +2 -12
  356. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +9 -24
  357. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +4 -12
  358. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +28 -59
  359. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +2 -2
  360. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +12 -10
  361. package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +3 -18
  362. package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +2 -15
  363. package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +8 -16
  364. package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +1 -16
  365. package/lib/pages/OldSitePage/SamplingParameters/models.js +1 -1
  366. package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +2 -10
  367. package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +2 -7
  368. package/lib/pages/ProfilePage/Container.js +2 -6
  369. package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +16 -43
  370. package/lib/pages/ProfilePage/ProfilePage.js +172 -115
  371. package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +9 -32
  372. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +7 -17
  373. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +3 -14
  374. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +20 -48
  375. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +4 -21
  376. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +7 -15
  377. package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +8 -29
  378. package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +6 -25
  379. package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +9 -21
  380. package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +1 -13
  381. package/lib/pages/SamplingsPage/DesktopActions/index.js +1 -4
  382. package/lib/pages/SamplingsPage/NavigationDropdown.js +3 -21
  383. package/lib/pages/SamplingsPage/NewSamplingAction.js +38 -84
  384. package/lib/pages/SamplingsPage/SamplingMobileModal.js +12 -65
  385. package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +5 -19
  386. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +3 -14
  387. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +22 -56
  388. package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +4 -20
  389. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +1 -14
  390. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +43 -115
  391. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +11 -42
  392. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +14 -47
  393. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +15 -49
  394. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +7 -21
  395. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +2 -8
  396. package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +1 -11
  397. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +7 -36
  398. package/lib/pages/SamplingsPage/SamplingsMobileList.js +10 -34
  399. package/lib/pages/SamplingsPage/SamplingsPage.js +14 -39
  400. package/lib/pages/SamplingsPage/SamplingsPageContainer.js +14 -48
  401. package/lib/pages/SamplingsPage/index.js +1 -3
  402. package/lib/pages/SamplingsPage/samplingsPageUtils.js +7 -30
  403. package/lib/pages/SitePage/DischargePattern/DischargePattern.js +2 -10
  404. package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +2 -8
  405. package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +3 -17
  406. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +6 -11
  407. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +15 -23
  408. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +7 -16
  409. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +18 -27
  410. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +2 -12
  411. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +9 -26
  412. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +6 -20
  413. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +4 -10
  414. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +2 -12
  415. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +9 -24
  416. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +4 -12
  417. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +32 -68
  418. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +2 -2
  419. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +12 -10
  420. package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +4 -19
  421. package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +2 -15
  422. package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +17 -38
  423. package/lib/pages/SitePage/SamplingParameters/dataParser.js +13 -29
  424. package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +3 -7
  425. package/lib/pages/SitePage/SamplingParameters/models.js +1 -1
  426. package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +2 -10
  427. package/lib/pages/SitePage/SamplingParameters/styles/styles.js +2 -8
  428. package/lib/pages/SitePage/SiteInformation/ContributorItem.js +5 -12
  429. package/lib/pages/SitePage/SiteInformation/EmptyState.js +1 -10
  430. package/lib/pages/SitePage/SiteInformation/PollutionContributor.js +5 -15
  431. package/lib/pages/SitePage/SiteInformation/SiteInformation.js +20 -51
  432. package/lib/pages/SitePage/SiteInformation/style.js +2 -8
  433. package/lib/pages/SitePage/SitePage.js +13 -54
  434. package/lib/pages/UploadLabResult/index.js +1 -8
  435. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +19 -59
  436. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +2 -9
  437. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +2 -16
  438. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +2 -8
  439. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +9 -35
  440. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +1 -5
  441. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +1 -7
  442. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +1 -10
  443. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +7 -16
  444. package/lib/pages/UtilityDashboardPage/MostSevereEvents/models.js +1 -1
  445. package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +23 -15
  446. package/lib/pages/UtilityDashboardPage/TopBar/constants.js +17 -0
  447. package/lib/pages/UtilityDashboardPage/TopBar/styles.js +1 -5
  448. package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +17 -30
  449. package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +13 -19
  450. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +9 -18
  451. package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +5 -20
  452. package/lib/pages/UtilityDashboardPage/VirtualAreaDashboardPage.js +67 -0
  453. package/lib/pages/WbeDashboard/ExpandableComponent.js +6 -14
  454. package/lib/pages/WbeDashboard/GraphWrapper.js +8 -28
  455. package/lib/pages/WbeDashboard/IndividualTinyGraph.js +6 -19
  456. package/lib/pages/WbeDashboard/SearchInput.js +4 -22
  457. package/lib/pages/WbeDashboard/SummaryGraph.js +56 -76
  458. package/lib/pages/WbeDashboard/SummaryGraphModal.js +1 -13
  459. package/lib/pages/WbeDashboard/Tabs.js +4 -9
  460. package/lib/pages/WbeDashboard/WbeDashboardPage.js +68 -157
  461. package/lib/pages/WbeDashboard/WbeSummaryBar.js +19 -49
  462. package/lib/providers/Slideshow/SlideshowContext.js +3 -5
  463. package/lib/providers/Slideshow/SlideshowProvider.js +16 -31
  464. package/lib/providers/Slideshow/SlideshowRunner.js +7 -17
  465. package/lib/providers/UrlHistory/UrlHistoryContext.js +3 -7
  466. package/lib/providers/UrlHistory/UrlHistoryProvider.js +1 -13
  467. package/lib/providers/UrlHistory/index.js +5 -8
  468. package/lib/providers/UrlHistory/useLastVisited.js +1 -7
  469. package/lib/react-app-env.d.js +1 -1
  470. package/lib/store/ImportGis/action.js +1 -1
  471. package/lib/store/ImportGis/actionTypes.js +1 -2
  472. package/lib/store/ImportGis/actionsCreator.js +7 -17
  473. package/lib/store/ImportGis/models/gisImports.js +1 -1
  474. package/lib/store/ImportGis/reducer.js +1 -17
  475. package/lib/store/WBE/actionTypes.js +1 -1
  476. package/lib/store/WBE/actions.js +1 -3
  477. package/lib/store/WBE/models/IAreaWBE.js +1 -1
  478. package/lib/store/WBE/models/IWBE.js +1 -1
  479. package/lib/store/WBE/models/IWBEState.js +1 -1
  480. package/lib/store/WBE/reducer.js +2 -9
  481. package/lib/store/areas/actionTypes.js +2 -2
  482. package/lib/store/areas/actions.js +2 -11
  483. package/lib/store/areas/models/IArea.js +1 -1
  484. package/lib/store/areas/models/IAreasState.js +1 -1
  485. package/lib/store/areas/reducer.js +1 -9
  486. package/lib/store/context/actionTypes.js +2 -2
  487. package/lib/store/context/actions.js +2 -6
  488. package/lib/store/context/contextMiddlewares.js +1 -9
  489. package/lib/store/context/models/INavContext.js +1 -1
  490. package/lib/store/context/models/INavContextState.js +1 -1
  491. package/lib/store/context/reducer.js +2 -9
  492. package/lib/store/dashboard/dashboardSlice.js +1 -3
  493. package/lib/store/dashboard/periodType.js +1 -1
  494. package/lib/store/edges/actionTypes.js +2 -2
  495. package/lib/store/edges/actions.js +3 -9
  496. package/lib/store/edges/models/IEdge.js +1 -1
  497. package/lib/store/edges/models/IEdgesState.js +1 -1
  498. package/lib/store/edges/reducer.js +2 -16
  499. package/lib/store/events/actionTypes.js +2 -2
  500. package/lib/store/events/actions.js +12 -30
  501. package/lib/store/events/models/IEvent.js +1 -1
  502. package/lib/store/events/models/IEventsState.js +1 -1
  503. package/lib/store/events/models/ISource.js +1 -1
  504. package/lib/store/events/reducer.js +3 -41
  505. package/lib/store/filters/IFilter.js +1 -1
  506. package/lib/store/filters/IFilterItem.js +1 -1
  507. package/lib/store/global/actionTypes.js +2 -2
  508. package/lib/store/global/actions.js +11 -21
  509. package/lib/store/global/models/IGlobalState.js +1 -1
  510. package/lib/store/global/reducer.js +2 -18
  511. package/lib/store/permissions/permissionsSlice.js +1 -6
  512. package/lib/store/points/actionTypes.js +2 -2
  513. package/lib/store/points/actions.js +1 -5
  514. package/lib/store/points/models/IGroup.js +1 -1
  515. package/lib/store/points/models/IPoint.js +1 -1
  516. package/lib/store/points/models/IPointsState.js +1 -1
  517. package/lib/store/points/reducer.js +1 -7
  518. package/lib/store/rootActionTypes.js +1 -1
  519. package/lib/store/rootActions.js +1 -3
  520. package/lib/store/rootReducer.js +4 -23
  521. package/lib/store/rootStore.js +4 -12
  522. package/lib/store/samplings/action.js +1 -1
  523. package/lib/store/samplings/actionTypes.js +1 -2
  524. package/lib/store/samplings/actionsCreator.js +2 -5
  525. package/lib/store/samplings/models/Samplings.js +1 -1
  526. package/lib/store/samplings/reducer.js +1 -9
  527. package/lib/styles/StylesLayout.js +1 -7
  528. package/lib/styles/theme/theme.js +2 -4
  529. package/lib/test/mocks/browser.js +3 -7
  530. package/lib/test/test-utils.js +11 -21
  531. package/lib/ui-kit/Button/Button.js +15 -23
  532. package/lib/ui-kit/Button/Button.test.js +6 -26
  533. package/lib/ui-kit/Button/ButtonUtils.js +1 -1
  534. package/lib/ui-kit/Checkbox/Checkbox.js +7 -21
  535. package/lib/ui-kit/DropDown/DropDown.js +5 -16
  536. package/lib/ui-kit/DropDown/DropDown.test.js +6 -12
  537. package/lib/ui-kit/DropDown/DropDownItem.js +5 -13
  538. package/lib/ui-kit/DropDown/DropdownToggle.js +2 -13
  539. package/lib/ui-kit/IconAction/IconAction.js +3 -9
  540. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +32 -52
  541. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +24 -28
  542. package/lib/ui-kit/KandoList/KandoList.js +5 -16
  543. package/lib/ui-kit/KandoList/kandoListUtils.js +1 -1
  544. package/lib/ui-kit/KandoTable/KandoTable.js +24 -36
  545. package/lib/ui-kit/KandoTable/KandoTable.test.js +1 -16
  546. package/lib/ui-kit/KandoTable/kandoTableUtils.js +1 -1
  547. package/lib/ui-kit/Layout/Layout.js +1 -8
  548. package/lib/ui-kit/MobileInput/MobileInput.js +18 -33
  549. package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +8 -14
  550. package/lib/ui-kit/ModalConfirmation/index.js +1 -3
  551. package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +5 -10
  552. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +3 -11
  553. package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +4 -11
  554. package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +5 -14
  555. package/lib/ui-kit/Tooltip/Tooltip.js +3 -8
  556. package/lib/ui-kit/index.js +1 -15
  557. package/lib/ui-kit/kandoStepper/KandoStepper.js +2 -7
  558. package/lib/utilities/ActionUtility.js +1 -2
  559. package/lib/utilities/Alert.js +2 -10
  560. package/lib/utilities/Analytics.js +2 -12
  561. package/lib/utilities/Array.js +2 -6
  562. package/lib/utilities/Enum.js +12 -16
  563. package/lib/utilities/ErrorBoundary.js +3 -18
  564. package/lib/utilities/File.js +5 -24
  565. package/lib/utilities/GetDir.js +4 -8
  566. package/lib/utilities/KandoDate.js +1 -7
  567. package/lib/utilities/KandoModal.js +7 -22
  568. package/lib/utilities/LocalStorage.js +2 -13
  569. package/lib/utilities/ThousandsToK.js +1 -3
  570. package/lib/utilities/TimeFormat.js +6 -19
  571. package/lib/utilities/Truncate.js +7 -27
  572. package/lib/utilities/edgesMath.js +5 -25
  573. package/lib/utilities/i18n.js +1 -14
  574. package/lib/utilities/kql.js +3 -10
  575. package/lib/utilities/map/icons.js +1 -18
  576. package/lib/utilities/polylinedecorator.js +383 -0
  577. package/lib/utilities/scoreToColor.js +1 -8
  578. package/lib/utilities/time.js +2 -9
  579. package/lib/utilities/uploadToS3.js +1 -9
  580. package/lib/utilities/urls.js +32 -14
  581. package/package.json +4 -1
@@ -1,100 +1,67 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports.SamplingProperties = void 0;
11
-
12
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
-
14
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
15
-
16
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
17
-
18
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
19
-
20
13
  var _react = _interopRequireWildcard(require("react"));
21
-
22
14
  var _axios = _interopRequireDefault(require("axios"));
23
-
24
15
  var _reactDeviceDetect = require("react-device-detect");
25
-
26
16
  var _formik = require("formik");
27
-
28
17
  var _reactRouterDom = require("react-router-dom");
29
-
30
18
  var _reactRedux = require("react-redux");
31
-
32
19
  var _Layout = _interopRequireDefault(require("ui-kit/Layout/Layout"));
33
-
34
20
  var _i18n = _interopRequireDefault(require("utilities/i18n"));
35
-
36
21
  var _useQueryURL = _interopRequireDefault(require("hooks/useQueryURL"));
37
-
38
22
  var _Spinner = require("components/Spinner/Spinner");
39
-
40
23
  var _urls = require("utilities/urls");
41
-
42
24
  var _styles = require("./styles");
43
-
44
25
  var _samplingsPageUtils = require("../samplingsPageUtils");
45
-
46
26
  var _SamplingPropertiesForm = require("./SamplingPropertiesForm");
47
-
48
27
  var _SamplingPropertiesHead = require("./SamplingPropertiesHead");
49
-
50
28
  var _SamplingPropertiesHeadMobile = require("./SamplingPropertiesHeadMobile");
51
-
52
29
  var _samplingPropertiesUtils = require("./samplingPropertiesUtils");
53
-
54
30
  var _SamplerInProcess = _interopRequireDefault(require("./SamplerInProcess"));
55
-
56
31
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
57
-
58
32
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
59
-
60
33
  /*
61
34
  * Properties and Cancelling forms.
62
35
  **/
36
+
63
37
  var isPropertiesPage = function isPropertiesPage(pageType) {
64
38
  return pageType === 'edit';
65
39
  };
66
-
67
40
  var SamplingProperties = function SamplingProperties() {
68
41
  var _useState = (0, _react.useState)(new Date()),
69
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
70
- collectionTime = _useState2[0],
71
- setCollectionTime = _useState2[1];
72
-
42
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
43
+ collectionTime = _useState2[0],
44
+ setCollectionTime = _useState2[1];
73
45
  var _useState3 = (0, _react.useState)([]),
74
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
75
- photos = _useState4[0],
76
- setPhotos = _useState4[1];
77
-
46
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
47
+ photos = _useState4[0],
48
+ setPhotos = _useState4[1];
78
49
  var _useState5 = (0, _react.useState)([]),
79
- _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
80
- photosToDelete = _useState6[0],
81
- setPhotosToDelete = _useState6[1];
82
-
50
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
51
+ photosToDelete = _useState6[0],
52
+ setPhotosToDelete = _useState6[1];
83
53
  var _useState7 = (0, _react.useState)(_i18n.default.t('buttons.save')),
84
- _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
85
- savingMsg = _useState8[0],
86
- setSavingMsg = _useState8[1];
87
-
54
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
55
+ savingMsg = _useState8[0],
56
+ setSavingMsg = _useState8[1];
88
57
  var _useState9 = (0, _react.useState)(false),
89
- _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
90
- samplingUpdated = _useState10[0],
91
- setSamplingUpdated = _useState10[1];
92
-
58
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
59
+ samplingUpdated = _useState10[0],
60
+ setSamplingUpdated = _useState10[1];
93
61
  var _useState11 = (0, _react.useState)(undefined),
94
- _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
95
- samplingPlan = _useState12[0],
96
- setSamplingPlan = _useState12[1];
97
-
62
+ _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
63
+ samplingPlan = _useState12[0],
64
+ setSamplingPlan = _useState12[1];
98
65
  var history = (0, _reactRouterDom.useHistory)();
99
66
  var location = (0, _reactRouterDom.useLocation)();
100
67
  var query = (0, _useQueryURL.default)();
@@ -103,22 +70,18 @@ var SamplingProperties = function SamplingProperties() {
103
70
  });
104
71
  var dateFormat = userInfo.date_time_format === 'us' ? 'MMM d, yyyy hh:mm aa' : 'd/MM/yyyy HH:mm';
105
72
  var pageType = (0, _react.useRef)('');
106
-
107
73
  var _useState13 = (0, _react.useState)(),
108
- _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
109
- samplingProperties = _useState14[0],
110
- setSamplingProperties = _useState14[1];
111
-
74
+ _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
75
+ samplingProperties = _useState14[0],
76
+ setSamplingProperties = _useState14[1];
112
77
  var _useParams = (0, _reactRouterDom.useParams)(),
113
- sampleId = _useParams.sampleId;
114
-
78
+ sampleId = _useParams.sampleId;
115
79
  var waterAuthorityId = (0, _reactRedux.useSelector)(function (state) {
116
80
  return state.global_data.waterAuthorityId;
117
81
  });
118
82
  var locale = (0, _reactRedux.useSelector)(function (state) {
119
83
  return state.nav_context_data.navContext.locale;
120
84
  });
121
-
122
85
  var initFormikValues = function initFormikValues(samplingProperties, isCanceled, timeZone, userInfo) {
123
86
  var pageCollectionTime = (0, _samplingPropertiesUtils.isCollectLayout)(pageType.current) ? collectionTime : (0, _samplingPropertiesUtils.collectionTimeFormat)(samplingProperties.sampling.collection_time, timeZone);
124
87
  var sam = samplingProperties.sampling;
@@ -134,13 +97,12 @@ var SamplingProperties = function SamplingProperties() {
134
97
  is_canceled: isCanceled
135
98
  };
136
99
  if (isCancelledLayout(samplingProperties)) formikValues.canceled_by_id = {
137
- name: userInfo.first_name + ' ' + userInfo.last_name,
138
- id: userInfo.user_id
100
+ name: samplingProperties.canceled_by_name || userInfo.first_name + ' ' + userInfo.last_name,
101
+ id: samplingProperties.sampling.canceled_by_id || userInfo.user_id
139
102
  };
140
103
  formikValues.kando_rep = samplingProperties.sampling.kando_rep;
141
104
  formik.setValues(formikValues);
142
105
  };
143
-
144
106
  var isCancelledLayout = function isCancelledLayout(samplingProperties) {
145
107
  var pageType2isCancelled = {
146
108
  cancel: true,
@@ -148,22 +110,19 @@ var SamplingProperties = function SamplingProperties() {
148
110
  revert_cancel: false
149
111
  };
150
112
  var isCanceled = pageType2isCancelled[pageType.current];
151
-
152
113
  if (isCanceled === null) {
153
114
  isCanceled = samplingProperties.sampling.is_canceled || false;
154
115
  }
155
-
156
116
  return isCanceled;
157
117
  };
158
-
159
118
  var fetchSamplingProperties = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
160
119
  var samplingId,
161
- op,
162
- response,
163
- sampling,
164
- samplingProperties,
165
- isCanceled,
166
- _args = arguments;
120
+ op,
121
+ response,
122
+ sampling,
123
+ samplingProperties,
124
+ isCanceled,
125
+ _args = arguments;
167
126
  return _regenerator.default.wrap(function _callee$(_context) {
168
127
  while (1) {
169
128
  switch (_context.prev = _context.next) {
@@ -174,7 +133,6 @@ var SamplingProperties = function SamplingProperties() {
174
133
  return _axios.default.get((0, _urls.urls)({
175
134
  samplingId: samplingId
176
135
  }).samplingProperties.fetchSampling.url);
177
-
178
136
  case 4:
179
137
  response = _context.sent;
180
138
  sampling = response.data;
@@ -185,7 +143,6 @@ var SamplingProperties = function SamplingProperties() {
185
143
  initFormikValues(samplingProperties, isCanceled, sampling.sampling_plan.time_zone, userInfo);
186
144
  setSamplingProperties(samplingProperties);
187
145
  setSamplingPlan(sampling.sampling_plan);
188
-
189
146
  case 13:
190
147
  case "end":
191
148
  return _context.stop();
@@ -207,7 +164,6 @@ var SamplingProperties = function SamplingProperties() {
207
164
  handleSubmit(values);
208
165
  }
209
166
  });
210
-
211
167
  var handleClose = function handleClose() {
212
168
  if (location.key) {
213
169
  history.goBack();
@@ -218,31 +174,27 @@ var SamplingProperties = function SamplingProperties() {
218
174
  }).samplingsPage.samplingsListRoute.url);
219
175
  }
220
176
  };
221
-
222
177
  var handleSubmit = function handleSubmit(values) {
178
+ var _samplingProperties$s;
223
179
  setSavingMsg(_i18n.default.t('buttons.saving'));
224
180
  values.pictures_attributes = photos;
225
- if (values.canceled_by_id && isCancelledLayout(samplingProperties)) values.canceled_by_id = userInfo.user_id;
181
+ if (values.canceled_by_id && isCancelledLayout(samplingProperties)) values.canceled_by_id = (samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s = samplingProperties.sampling) === null || _samplingProperties$s === void 0 ? void 0 : _samplingProperties$s.canceled_by_id) || userInfo.user_id;
226
182
  var saveFormData = formDataBuilder(values);
227
183
  updateOrCreate(saveFormData);
228
184
  };
229
-
230
185
  var setOriginalSaveMessageWithTimeout = function setOriginalSaveMessageWithTimeout() {
231
186
  setTimeout(function () {
232
187
  setSavingMsg(_i18n.default.t('buttons.save'));
233
188
  }, 3000);
234
189
  };
235
-
236
190
  var formDataBuilder = function formDataBuilder(values) {
237
191
  var formData = new FormData();
238
-
239
192
  for (var key in values) {
240
193
  if (key !== 'pictures_attributes') {
241
194
  var value = values[key] === null ? '' : values[key];
242
195
  formData.append("sampling[".concat(key, "]"), value);
243
196
  }
244
197
  }
245
-
246
198
  var uniquePhotosToDelete = (0, _toConsumableArray2.default)(new Set(photosToDelete));
247
199
  uniquePhotosToDelete.length !== 0 && uniquePhotosToDelete.forEach(function (id, index) {
248
200
  formData.append("sampling[pictures_attributes][".concat(index, "][id]"), JSON.stringify(id));
@@ -250,11 +202,9 @@ var SamplingProperties = function SamplingProperties() {
250
202
  });
251
203
  return formData;
252
204
  };
253
-
254
205
  var updateOrCreate = /*#__PURE__*/function () {
255
206
  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(formData) {
256
- var _samplingProperties$s;
257
-
207
+ var _samplingProperties$s2;
258
208
  var updateOrCreateSuccess, samplingID;
259
209
  return _regenerator.default.wrap(function _callee2$(_context2) {
260
210
  while (1) {
@@ -266,14 +216,11 @@ var SamplingProperties = function SamplingProperties() {
266
216
  setOriginalSaveMessageWithTimeout();
267
217
  handleClose();
268
218
  };
269
-
270
- samplingID = samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s = samplingProperties.sampling) === null || _samplingProperties$s === void 0 ? void 0 : _samplingProperties$s.id;
271
-
219
+ samplingID = samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s2 = samplingProperties.sampling) === null || _samplingProperties$s2 === void 0 ? void 0 : _samplingProperties$s2.id;
272
220
  if (!(samplingID === null)) {
273
221
  _context2.next = 16;
274
222
  break;
275
223
  }
276
-
277
224
  // create
278
225
  formData.append("sampling[date]", collectionTime);
279
226
  _context2.prev = 4;
@@ -281,46 +228,38 @@ var SamplingProperties = function SamplingProperties() {
281
228
  return _axios.default.post((0, _urls.urls)({
282
229
  waterAuthorityId: waterAuthorityId
283
230
  }).samplingProperties.createSampling.url, formData);
284
-
285
231
  case 7:
286
232
  updateOrCreateSuccess('buttons.created');
287
233
  _context2.next = 14;
288
234
  break;
289
-
290
235
  case 10:
291
236
  _context2.prev = 10;
292
237
  _context2.t0 = _context2["catch"](4);
293
238
  setSavingMsg(_i18n.default.t('buttons.error'));
294
239
  setOriginalSaveMessageWithTimeout();
295
-
296
240
  case 14:
297
241
  _context2.next = 27;
298
242
  break;
299
-
300
243
  case 16:
301
- if (pageType.current === 'revert_cancel') {
244
+ if (getUrlQueryOp() === 'edit' || ['revert_cancel'].includes(pageType.current)) {
302
245
  formData.append("sampling[collection_time]", collectionTime);
303
- } // update
304
-
305
-
246
+ }
247
+ // update
306
248
  _context2.prev = 17;
307
249
  _context2.next = 20;
308
250
  return _axios.default.put((0, _urls.urls)({
309
251
  samplingId: samplingID,
310
252
  waterAuthorityId: waterAuthorityId
311
253
  }).samplingProperties.updateSampling.url, formData);
312
-
313
254
  case 20:
314
255
  updateOrCreateSuccess('buttons.updated');
315
256
  _context2.next = 27;
316
257
  break;
317
-
318
258
  case 23:
319
259
  _context2.prev = 23;
320
260
  _context2.t1 = _context2["catch"](17);
321
261
  setSavingMsg(_i18n.default.t('buttons.error'));
322
262
  setOriginalSaveMessageWithTimeout();
323
-
324
263
  case 27:
325
264
  case "end":
326
265
  return _context2.stop();
@@ -328,16 +267,13 @@ var SamplingProperties = function SamplingProperties() {
328
267
  }
329
268
  }, _callee2, null, [[4, 10], [17, 23]]);
330
269
  }));
331
-
332
270
  return function updateOrCreate(_x) {
333
271
  return _ref2.apply(this, arguments);
334
272
  };
335
273
  }();
336
-
337
274
  var detectPageType = function detectPageType(isSamplingCancelled, op) {
338
275
  var editPageValue = isSamplingCancelled ? 'cancel' : 'collect';
339
-
340
- if (op === 'edit') {
276
+ if (op === _samplingsPageUtils.EDIT_PROPERTIES_OP) {
341
277
  return editPageValue;
342
278
  } else if (op === _samplingsPageUtils.COLLECT_SAMPLING_OP) {
343
279
  return 'collect';
@@ -349,13 +285,11 @@ var SamplingProperties = function SamplingProperties() {
349
285
  return editPageValue;
350
286
  }
351
287
  };
352
-
353
288
  var determineCollectionTime = function determineCollectionTime(serverCollectionTime, op) {
354
289
  var currentTime = new Date();
355
290
  var serverTime = serverCollectionTime ? new Date(serverCollectionTime) : currentTime;
356
291
  var editPageValue = serverCollectionTime ? serverTime : currentTime;
357
-
358
- if (op === 'edit') {
292
+ if (op === _samplingsPageUtils.EDIT_PROPERTIES_OP) {
359
293
  return editPageValue;
360
294
  } else if (op === _samplingsPageUtils.COLLECT_SAMPLING_OP) {
361
295
  return currentTime;
@@ -365,27 +299,22 @@ var SamplingProperties = function SamplingProperties() {
365
299
  return editPageValue;
366
300
  }
367
301
  };
368
-
369
302
  var getUrlQueryOp = function getUrlQueryOp() {
370
- var op = query.get('op'); // if not present then default op is 'collecting'
371
-
303
+ var op = query.get('op');
304
+ // if not present then default op is 'collecting'
372
305
  if ([undefined, null, ''].includes(op)) {
373
306
  return _samplingsPageUtils.COLLECT_SAMPLING_OP;
374
307
  }
375
-
376
308
  return op;
377
309
  };
378
-
379
310
  if (!samplingPlan || !samplingProperties) {
380
311
  return /*#__PURE__*/_react.default.createElement(_Spinner.Spinner, null);
381
312
  }
382
-
383
313
  if (samplingProperties.is_pump_in_progress) {
384
314
  return /*#__PURE__*/_react.default.createElement(_SamplerInProcess.default, {
385
315
  handleClose: handleClose
386
316
  });
387
317
  }
388
-
389
318
  return /*#__PURE__*/_react.default.createElement("form", {
390
319
  onSubmit: formik.handleSubmit
391
320
  }, /*#__PURE__*/_react.default.createElement(_Layout.default, null, /*#__PURE__*/_react.default.createElement(_styles.SamplingPropertiesStyle, null, !_reactDeviceDetect.isMobile && /*#__PURE__*/_react.default.createElement(_SamplingPropertiesHead.SamplingPropertiesHead, {
@@ -421,6 +350,5 @@ var SamplingProperties = function SamplingProperties() {
421
350
  formik: formik
422
351
  }))));
423
352
  };
424
-
425
353
  exports.SamplingProperties = SamplingProperties;
426
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYWdlcy9TYW1wbGluZ3NQYWdlL1NhbXBsaW5nUHJvcGVydGllcy9TYW1wbGluZ1Byb3BlcnRpZXMudHN4Il0sIm5hbWVzIjpbImlzUHJvcGVydGllc1BhZ2UiLCJwYWdlVHlwZSIsIlNhbXBsaW5nUHJvcGVydGllcyIsIkRhdGUiLCJjb2xsZWN0aW9uVGltZSIsInNldENvbGxlY3Rpb25UaW1lIiwicGhvdG9zIiwic2V0UGhvdG9zIiwicGhvdG9zVG9EZWxldGUiLCJzZXRQaG90b3NUb0RlbGV0ZSIsImkxOG4iLCJ0Iiwic2F2aW5nTXNnIiwic2V0U2F2aW5nTXNnIiwic2FtcGxpbmdVcGRhdGVkIiwic2V0U2FtcGxpbmdVcGRhdGVkIiwidW5kZWZpbmVkIiwic2FtcGxpbmdQbGFuIiwic2V0U2FtcGxpbmdQbGFuIiwiaGlzdG9yeSIsImxvY2F0aW9uIiwicXVlcnkiLCJ1c2VySW5mbyIsInN0YXRlIiwicGVybWlzc2lvbnMiLCJ1c2VyX2luZm8iLCJkYXRlRm9ybWF0IiwiZGF0ZV90aW1lX2Zvcm1hdCIsInNhbXBsaW5nUHJvcGVydGllcyIsInNldFNhbXBsaW5nUHJvcGVydGllcyIsInNhbXBsZUlkIiwid2F0ZXJBdXRob3JpdHlJZCIsImdsb2JhbF9kYXRhIiwibG9jYWxlIiwibmF2X2NvbnRleHRfZGF0YSIsIm5hdkNvbnRleHQiLCJpbml0Rm9ybWlrVmFsdWVzIiwiaXNDYW5jZWxlZCIsInRpbWVab25lIiwicGFnZUNvbGxlY3Rpb25UaW1lIiwiY3VycmVudCIsInNhbXBsaW5nIiwiY29sbGVjdGlvbl90aW1lIiwic2FtIiwiZm9ybWlrVmFsdWVzIiwibGFiX2lkIiwicHVtcF9zYW1wbGluZ192b2x1bWUiLCJwdW1wX2JhdHRlcnlfbGV2ZWwiLCJkZXNjcmlwdGlvbiIsImthbmRvX3JlcCIsInNhbXBsaW5nX3BsYW5faWQiLCJjYW5jZWxsYXRpb25fcmVhc29uIiwiaXNfY2FuY2VsZWQiLCJpc0NhbmNlbGxlZExheW91dCIsImNhbmNlbGVkX2J5X2lkIiwibmFtZSIsImZpcnN0X25hbWUiLCJsYXN0X25hbWUiLCJpZCIsInVzZXJfaWQiLCJmb3JtaWsiLCJzZXRWYWx1ZXMiLCJwYWdlVHlwZTJpc0NhbmNlbGxlZCIsImNhbmNlbCIsImNvbGxlY3QiLCJyZXZlcnRfY2FuY2VsIiwiZmV0Y2hTYW1wbGluZ1Byb3BlcnRpZXMiLCJzYW1wbGluZ0lkIiwib3AiLCJheGlvcyIsImdldCIsImZldGNoU2FtcGxpbmciLCJ1cmwiLCJyZXNwb25zZSIsImRhdGEiLCJzYW1wbGluZ19wcm9wZXJ0aWVzIiwiZGV0ZWN0UGFnZVR5cGUiLCJkZXRlcm1pbmVDb2xsZWN0aW9uVGltZSIsInNhbXBsaW5nX3BsYW4iLCJ0aW1lX3pvbmUiLCJnZXRVcmxRdWVyeU9wIiwidmFsaWRhdGlvblNjaGVtYSIsInByb3BlcnRpZXNWYWxpZGF0aW9uU2NoZW1hIiwiY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYSIsImVuYWJsZVJlaW5pdGlhbGl6ZSIsImluaXRpYWxWYWx1ZXMiLCJzYW1wbGluZ1Byb3BlcnR5IiwidmFsaWRhdGVPbkNoYW5nZSIsInZhbGlkYXRlT25CbHVyIiwib25TdWJtaXQiLCJ2YWx1ZXMiLCJoYW5kbGVTdWJtaXQiLCJoYW5kbGVDbG9zZSIsImtleSIsImdvQmFjayIsInB1c2giLCJzYW1wbGluZ3NQYWdlIiwic2FtcGxpbmdzTGlzdFJvdXRlIiwicGljdHVyZXNfYXR0cmlidXRlcyIsInNhdmVGb3JtRGF0YSIsImZvcm1EYXRhQnVpbGRlciIsInVwZGF0ZU9yQ3JlYXRlIiwic2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0Iiwic2V0VGltZW91dCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJ2YWx1ZSIsImFwcGVuZCIsInVuaXF1ZVBob3Rvc1RvRGVsZXRlIiwiU2V0IiwibGVuZ3RoIiwiZm9yRWFjaCIsImluZGV4IiwiSlNPTiIsInN0cmluZ2lmeSIsInVwZGF0ZU9yQ3JlYXRlU3VjY2VzcyIsIm1zZyIsInNhbXBsaW5nSUQiLCJwb3N0IiwiY3JlYXRlU2FtcGxpbmciLCJwdXQiLCJ1cGRhdGVTYW1wbGluZyIsImlzU2FtcGxpbmdDYW5jZWxsZWQiLCJlZGl0UGFnZVZhbHVlIiwiQ09MTEVDVF9TQU1QTElOR19PUCIsIkNBTkNFTF9TQU1QTElOR19PUCIsIlJFVkVSVF9DQU5DRUxMQVRJT04iLCJzZXJ2ZXJDb2xsZWN0aW9uVGltZSIsImN1cnJlbnRUaW1lIiwic2VydmVyVGltZSIsImluY2x1ZGVzIiwiaXNfcHVtcF9pbl9wcm9ncmVzcyIsImlzTW9iaWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBU0E7Ozs7OztBQW5DQTtBQUNBO0FBQ0E7QUFtQ0EsSUFBTUEsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFDQyxRQUFEO0FBQUEsU0FBY0EsUUFBUSxLQUFLLE1BQTNCO0FBQUEsQ0FBekI7O0FBRU8sSUFBTUMsa0JBQXNCLEdBQUcsU0FBekJBLGtCQUF5QixHQUFNO0FBQzFDLGtCQUE0QyxxQkFDMUMsSUFBSUMsSUFBSixFQUQwQyxDQUE1QztBQUFBO0FBQUEsTUFBT0MsY0FBUDtBQUFBLE1BQXVCQyxpQkFBdkI7O0FBR0EsbUJBQTRCLHFCQUE4QixFQUE5QixDQUE1QjtBQUFBO0FBQUEsTUFBT0MsTUFBUDtBQUFBLE1BQWVDLFNBQWY7O0FBQ0EsbUJBQTRDLHFCQUFtQixFQUFuQixDQUE1QztBQUFBO0FBQUEsTUFBT0MsY0FBUDtBQUFBLE1BQXVCQyxpQkFBdkI7O0FBQ0EsbUJBQWtDLHFCQUFpQkMsY0FBS0MsQ0FBTCxDQUFPLGNBQVAsQ0FBakIsQ0FBbEM7QUFBQTtBQUFBLE1BQU9DLFNBQVA7QUFBQSxNQUFrQkMsWUFBbEI7O0FBQ0EsbUJBQThDLHFCQUFTLEtBQVQsQ0FBOUM7QUFBQTtBQUFB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LEVBQUUzRCxRQUFRLENBQUN1QyxPQUpyQjtBQUtFLElBQUEsY0FBYyxFQUFFcEMsY0FMbEI7QUFNRSxJQUFBLGlCQUFpQixFQUFFQyxpQkFOckI7QUFPRSxJQUFBLGtCQUFrQixFQUFFVSxrQkFQdEI7QUFRRSxJQUFBLG9CQUFvQixFQUFFZixnQkFBZ0IsQ0FBQ0MsUUFBRCxDQVJ4QztBQVNFLElBQUEsVUFBVSxFQUFFeUI7QUFUZCxJQWhCSixFQTZCR0Usa0JBQWtCLElBQUkzQixRQUF0QixpQkFDQyw2QkFBQyw4Q0FBRDtBQUNFLElBQUEsa0JBQWtCLEVBQUUyQixrQkFEdEI7QUFFRSxJQUFBLFFBQVEsRUFBRVgsWUFGWjtBQUdFLElBQUEsUUFBUSxFQUFFaEIsUUFBUSxDQUFDdUMsT0FIckI7QUFJRSxJQUFBLGtCQUFrQixFQUFFekIsa0JBSnRCO0FBS0UsSUFBQSxTQUFTLEVBQUVILFNBTGI7QUFNRSxJQUFBLFdBQVcsRUFBRWdGLFdBTmY7QUFPRSxJQUFBLGlCQUFpQixFQUFFbkYsaUJBUHJCO0FBUUUsSUFBQSxTQUFTLEVBQUVGLFNBUmI7QUFTRSxJQUFBLE1BQU0sRUFBRUQsTUFUVjtBQVVFLElBQUEsTUFBTSxFQUFFc0Q7QUFWVixJQTlCSixDQURGLENBREYsQ0FERjtBQWtERCxDQWhVTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQcm9wZXJ0aWVzIGFuZCBDYW5jZWxsaW5nIGZvcm1zLlxuICoqL1xuaW1wb3J0IFJlYWN0LCB7IEZDLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IEZvcm1pa0NvbmZpZyB9IGZyb20gJ2Zvcm1pay9kaXN0L3R5cGVzJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAncmVhY3QtZGV2aWNlLWRldGVjdCc7XG5pbXBvcnQgeyB1c2VGb3JtaWsgfSBmcm9tICdmb3JtaWsnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSwgdXNlUGFyYW1zLCB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCBMYXlvdXQgZnJvbSAnc3JjL3VpLWtpdC9MYXlvdXQvTGF5b3V0JztcbmltcG9ydCBpMThuIGZyb20gJ3NyYy91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgdXNlUXVlcnlVUkwgZnJvbSAnc3JjL2hvb2tzL3VzZVF1ZXJ5VVJMJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICdzcmMvY29tcG9uZW50cy9TcGlubmVyL1NwaW5uZXInO1xuaW1wb3J0IHsgdXJscyB9IGZyb20gJ3NyYy91dGlsaXRpZXMvdXJscyc7XG5pbXBvcnQgeyBTYW1wbGluZ1Byb3BlcnRpZXNTdHlsZSB9IGZyb20gJy4vc3R5bGVzJztcbmltcG9ydCB7XG4gIENBTkNFTF9TQU1QTElOR19PUCxcbiAgQ09MTEVDVF9TQU1QTElOR19PUCxcbiAgUkVWRVJUX0NBTkNFTExBVElPTixcbiAgU2FtcGxpbmdGZXRjaERhdGEsXG59IGZyb20gJy4uL3NhbXBsaW5nc1BhZ2VVdGlscyc7XG5pbXBvcnQgeyBTYW1wbGluZ1Byb3BlcnRpZXNGb3JtIH0gZnJvbSAnLi9TYW1wbGluZ1Byb3BlcnRpZXNGb3JtJztcbmltcG9ydCB7IFNhbXBsaW5nUHJvcGVydGllc0hlYWQgfSBmcm9tICcuL1NhbXBsaW5nUHJvcGVydGllc0hlYWQnO1xuaW1wb3J0IHsgU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZE1vYmlsZSB9IGZyb20gJy4vU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZE1vYmlsZSc7XG5pbXBvcnQge1xuICBGb3JtVHlwZSxcbiAgVFNhbXBsaW5nUHJvcGVydGllcyxcbiAgY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYSxcbiAgaXNDb2xsZWN0TGF5b3V0LFxuICBwcm9wZXJ0aWVzVmFsaWRhdGlvblNjaGVtYSxcbiAgc2FtcGxpbmdQcm9wZXJ0eSxcbiAgY29sbGVjdGlvblRpbWVGb3JtYXQsXG59IGZyb20gJy4vc2FtcGxpbmdQcm9wZXJ0aWVzVXRpbHMnO1xuaW1wb3J0IFNhbXBsZXJJblByb2Nlc3MgZnJvbSAnLi9TYW1wbGVySW5Qcm9jZXNzJztcblxuY29uc3QgaXNQcm9wZXJ0aWVzUGFnZSA9IChwYWdlVHlwZSkgPT4gcGFnZVR5cGUgPT09ICdlZGl0JztcblxuZXhwb3J0IGNvbnN0IFNhbXBsaW5nUHJvcGVydGllczogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IFtjb2xsZWN0aW9uVGltZSwgc2V0Q29sbGVjdGlvblRpbWVdID0gdXNlU3RhdGU8c3RyaW5nIHwgRGF0ZSB8IG51bGw+KFxuICAgIG5ldyBEYXRlKCksXG4gICk7XG4gIGNvbnN0IFtwaG90b3MsIHNldFBob3Rvc10gPSB1c2VTdGF0ZTxzdHJpbmcgfCBCbG9iIHwgYW55PihbXSk7XG4gIGNvbnN0IFtwaG90b3NUb0RlbGV0ZSwgc2V0UGhvdG9zVG9EZWxldGVdID0gdXNlU3RhdGU8bnVtYmVyW10+KFtdKTtcbiAgY29uc3QgW3NhdmluZ01zZywgc2V0U2F2aW5nTXNnXSA9IHVzZVN0YXRlPHN0cmluZz4oaTE4bi50KCdidXR0b25zLnNhdmUnKSk7XG4gIGNvbnN0IFtzYW1wbGluZ1VwZGF0ZWQsIHNldFNhbXBsaW5nVXBkYXRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzYW1wbGluZ1BsYW4sIHNldFNhbXBsaW5nUGxhbl0gPSB1c2VTdGF0ZTxcbiAgICBTYW1wbGluZ0ZldGNoRGF0YSB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgY29uc3QgcXVlcnkgPSB1c2VRdWVyeVVSTCgpO1xuICBjb25zdCB1c2VySW5mbyA9IHVzZVNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUucGVybWlzc2lvbnMudXNlcl9pbmZvKTtcbiAgY29uc3QgZGF0ZUZvcm1hdCA9XG4gICAgdXNlckluZm8uZGF0ZV90aW1lX2Zvcm1hdCA9PT0gJ3VzJ1xuICAgICAgPyAnTU1NIGQsIHl5eXkgaGg6bW0gYWEnXG4gICAgICA6ICdkL01NL3l5eXkgSEg6bW0nO1xuICBjb25zdCBwYWdlVHlwZSA9IHVzZVJlZjxzdHJpbmc+KCcnKTtcbiAgY29uc3QgW3NhbXBsaW5nUHJvcGVydGllcywgc2V0U2FtcGxpbmdQcm9wZXJ0aWVzXSA9XG4gICAgdXNlU3RhdGU8VFNhbXBsaW5nUHJvcGVydGllcz4oKTtcbiAgY29uc3QgeyBzYW1wbGVJZCB9ID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IHdhdGVyQXV0aG9yaXR5SWQgPSB1c2VTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLmdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWQsXG4gICk7XG4gIGNvbnN0IGxvY2FsZSA9IHVzZVNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUubmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0LmxvY2FsZSxcbiAgKTtcblxuICBjb25zdCBpbml0Rm9ybWlrVmFsdWVzID0gKFxuICAgIHNhbXBsaW5nUHJvcGVydGllcyxcbiAgICBpc0NhbmNlbGVkLFxuICAgIHRpbWVab25lLFxuICAgIHVzZXJJbmZvLFxuICApID0+IHtcbiAgICBjb25zdCBwYWdlQ29sbGVjdGlvblRpbWUgPSBpc0NvbGxlY3RMYXlvdXQocGFnZVR5cGUuY3VycmVudClcbiAgICAgID8gY29sbGVjdGlvblRpbWVcbiAgICAgIDogY29sbGVjdGlvblRpbWVGb3JtYXQoXG4gICAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmNvbGxlY3Rpb25fdGltZSxcbiAgICAgICAgICB0aW1lWm9uZSxcbiAgICAgICAgKTtcbiAgICBjb25zdCBzYW0gPSBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmc7XG4gICAgbGV0IGZvcm1pa1ZhbHVlczogRm9ybVR5cGUgPSB7XG4gICAgICBsYWJfaWQ6IHNhbS5sYWJfaWQsXG4gICAgICBjb2xsZWN0aW9uX3RpbWU6IHBhZ2VDb2xsZWN0aW9uVGltZSxcbiAgICAgIHB1bXBfc2FtcGxpbmdfdm9sdW1lOiBzYW0ucHVtcF9zYW1wbGluZ192b2x1bWUsXG4gICAgICBwdW1wX2JhdHRlcnlfbGV2ZWw6IHNhbS5wdW1wX2JhdHRlcnlfbGV2ZWwsXG4gICAgICBkZXNjcmlwdGlvbjogc2FtLmRlc2NyaXB0aW9uLFxuICAgICAga2FuZG9fcmVwOiBzYW0ua2FuZG9fcmVwLFxuICAgICAgc2FtcGxpbmdfcGxhbl9pZDogc2FtLnNhbXBsaW5nX3BsYW5faWQsXG4gICAgICBjYW5jZWxsYXRpb25fcmVhc29uOiBzYW0uY2FuY2VsbGF0aW9uX3JlYXNvbiB8fCAnJyxcbiAgICAgIGlzX2NhbmNlbGVkOiBpc0NhbmNlbGVkLFxuICAgIH07XG5cbiAgICBpZiAoaXNDYW5jZWxsZWRMYXlvdXQoc2FtcGxpbmdQcm9wZXJ0aWVzKSlcbiAgICAgIGZvcm1pa1ZhbHVlcy5jYW5jZWxlZF9ieV9pZCA9IHtcbiAgICAgICAgbmFtZTogdXNlckluZm8uZmlyc3RfbmFtZSArICcgJyArIHVzZXJJbmZvLmxhc3RfbmFtZSxcbiAgICAgICAgaWQ6IHVzZXJJbmZvLnVzZXJfaWQsXG4gICAgICB9O1xuICAgIGZvcm1pa1ZhbHVlcy5rYW5kb19yZXAgPSBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcua2FuZG9fcmVwO1xuICAgIGZvcm1pay5zZXRWYWx1ZXMoZm9ybWlrVmFsdWVzKTtcbiAgfTtcblxuICBjb25zdCBpc0NhbmNlbGxlZExheW91dCA9IChzYW1wbGluZ1Byb3BlcnRpZXMpID0+IHtcbiAgICBjb25zdCBwYWdlVHlwZTJpc0NhbmNlbGxlZCA9IHtcbiAgICAgIGNhbmNlbDogdHJ1ZSxcbiAgICAgIGNvbGxlY3Q6IGZhbHNlLFxuICAgICAgcmV2ZXJ0X2NhbmNlbDogZmFsc2UsXG4gICAgfTtcbiAgICBsZXQgaXNDYW5jZWxlZCA9IHBhZ2VUeXBlMmlzQ2FuY2VsbGVkW3BhZ2VUeXBlLmN1cnJlbnRdO1xuICAgIGlmIChpc0NhbmNlbGVkID09PSBudWxsKSB7XG4gICAgICBpc0NhbmNlbGVkID0gc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmlzX2NhbmNlbGVkIHx8IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gaXNDYW5jZWxlZDtcbiAgfTtcblxuICBjb25zdCBmZXRjaFNhbXBsaW5nUHJvcGVydGllcyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChzYW1wbGluZ0lkID0gc2FtcGxlSWQsIG9wKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChcbiAgICAgICAgdXJscyh7IHNhbXBsaW5nSWQ6IHNhbXBsaW5nSWQgfSkuc2FtcGxpbmdQcm9wZXJ0aWVzLmZldGNoU2FtcGxpbmcudXJsLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNhbXBsaW5nID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgIGNvbnN0IHNhbXBsaW5nUHJvcGVydGllcyA9IHNhbXBsaW5nLnNhbXBsaW5nX3Byb3BlcnRpZXM7XG4gICAgICBwYWdlVHlwZS5jdXJyZW50ID0gZGV0ZWN0UGFnZVR5cGUoXG4gICAgICAgIHNhbXBsaW5nUHJvcGVydGllcy5zYW1wbGluZy5pc19jYW5jZWxlZCxcbiAgICAgICAgb3AsXG4gICAgICApO1xuICAgICAgc2V0Q29sbGVjdGlvblRpbWUoXG4gICAgICAgIGRldGVybWluZUNvbGxlY3Rpb25UaW1lKFxuICAgICAgICAgIGNvbGxlY3Rpb25UaW1lRm9ybWF0KFxuICAgICAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmNvbGxlY3Rpb25fdGltZSxcbiAgICAgICAgICAgIHNhbXBsaW5nLnNhbXBsaW5nX3BsYW4udGltZV96b25lLFxuICAgICAgICAgICksXG4gICAgICAgICAgb3AsXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgbGV0IGlzQ2FuY2VsZWQgPSBpc0NhbmNlbGxlZExheW91dChcbiAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmlzX2NhbmNlbGVkLFxuICAgICAgKTtcbiAgICAgIGluaXRGb3JtaWtWYWx1ZXMoXG4gICAgICAgIHNhbXBsaW5nUHJvcGVydGllcyxcbiAgICAgICAgaXNDYW5jZWxlZCxcbiAgICAgICAgc2FtcGxpbmcuc2FtcGxpbmdfcGxhbi50aW1lX3pvbmUsXG4gICAgICAgIHVzZXJJbmZvLFxuICAgICAgKTtcbiAgICAgIHNldFNhbXBsaW5nUHJvcGVydGllcyhzYW1wbGluZ1Byb3BlcnRpZXMpO1xuICAgICAgc2V0U2FtcGxpbmdQbGFuKHNhbXBsaW5nLnNhbXBsaW5nX3BsYW4pO1xuICAgIH0sXG4gICAgW10sXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaFNhbXBsaW5nUHJvcGVydGllcyhzYW1wbGVJZCwgZ2V0VXJsUXVlcnlPcCgpKTtcbiAgfSwgW3NhbXBsaW5nVXBkYXRlZF0pO1xuXG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSBpc0NvbGxlY3RMYXlvdXQocGFnZVR5cGUuY3VycmVudClcbiAgICA/IHByb3BlcnRpZXNWYWxpZGF0aW9uU2NoZW1hXG4gICAgOiBjYW5jZWxsYXRpb25WYWxpZGF0aW9uU2NoZW1hO1xuICBjb25zdCBmb3JtaWsgPSB1c2VGb3JtaWs8Rm9ybWlrQ29uZmlnPEZvcm1UeXBlPj4oe1xuICAgIGVuYWJsZVJlaW5pdGlhbGl6ZTogdHJ1ZSxcbiAgICBpbml0aWFsVmFsdWVzOiBzYW1wbGluZ1Byb3BlcnR5LFxuICAgIHZhbGlkYXRpb25TY2hlbWE6IHZhbGlkYXRpb25TY2hlbWEsXG4gICAgdmFsaWRhdGVPbkNoYW5nZTogZmFsc2UsXG4gICAgdmFsaWRhdGVPbkJsdXI6IHRydWUsXG4gICAgb25TdWJtaXQ6ICh2YWx1ZXMpID0+IHtcbiAgICAgIGhhbmRsZVN1Ym1pdCh2YWx1ZXMpO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xuICAgIGlmIChsb2NhdGlvbi5rZXkpIHtcbiAgICAgIGhpc3RvcnkuZ29CYWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpc3RvcnkucHVzaChcbiAgICAgICAgdXJscyh7IGxvY2FsZSwgd2F0ZXJBdXRob3JpdHlJZCB9KS5zYW1wbGluZ3NQYWdlLnNhbXBsaW5nc0xpc3RSb3V0ZS51cmwsXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSAodmFsdWVzKSA9PiB7XG4gICAgc2V0U2F2aW5nTXNnKGkxOG4udCgnYnV0dG9ucy5zYXZpbmcnKSk7XG4gICAgdmFsdWVzLnBpY3R1cmVzX2F0dHJpYnV0ZXMgPSBwaG90b3M7XG4gICAgaWYgKHZhbHVlcy5jYW5jZWxlZF9ieV9pZCAmJiBpc0NhbmNlbGxlZExheW91dChzYW1wbGluZ1Byb3BlcnRpZXMpKVxuICAgICAgdmFsdWVzLmNhbmNlbGVkX2J5X2lkID0gdXNlckluZm8udXNlcl9pZDtcbiAgICBjb25zdCBzYXZlRm9ybURhdGEgPSBmb3JtRGF0YUJ1aWxkZXIodmFsdWVzKTtcbiAgICB1cGRhdGVPckNyZWF0ZShzYXZlRm9ybURhdGEpO1xuICB9O1xuXG4gIGNvbnN0IHNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldFNhdmluZ01zZyhpMThuLnQoJ2J1dHRvbnMuc2F2ZScpKTtcbiAgICB9LCAzMDAwKTtcbiAgfTtcblxuICBjb25zdCBmb3JtRGF0YUJ1aWxkZXIgPSAodmFsdWVzKSA9PiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZXMpIHtcbiAgICAgIGlmIChrZXkgIT09ICdwaWN0dXJlc19hdHRyaWJ1dGVzJykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1trZXldID09PSBudWxsID8gJycgOiB2YWx1ZXNba2V5XTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGBzYW1wbGluZ1ske2tleX1dYCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgdW5pcXVlUGhvdG9zVG9EZWxldGUgPSBbLi4ubmV3IFNldChwaG90b3NUb0RlbGV0ZSldO1xuICAgIHVuaXF1ZVBob3Rvc1RvRGVsZXRlLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgdW5pcXVlUGhvdG9zVG9EZWxldGUuZm9yRWFjaCgoaWQsIGluZGV4KSA9PiB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICBgc2FtcGxpbmdbcGljdHVyZXNfYXR0cmlidXRlc11bJHtpbmRleH1dW2lkXWAsXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoaWQpLFxuICAgICAgICApO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgYHNhbXBsaW5nW3BpY3R1cmVzX2F0dHJpYnV0ZXNdWyR7aW5kZXh9XVtfZGVzdHJveV1gLFxuICAgICAgICAgICd0cnVlJyxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfTtcblxuICBjb25zdCB1cGRhdGVPckNyZWF0ZSA9IGFzeW5jIChmb3JtRGF0YSkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZU9yQ3JlYXRlU3VjY2VzcyA9IChtc2cpID0+IHtcbiAgICAgIHNldFNhdmluZ01zZyhpMThuLnQobXNnKSk7XG4gICAgICBzZXRTYW1wbGluZ1VwZGF0ZWQodHJ1ZSk7XG4gICAgICBzZXRPcmlnaW5hbFNhdmVNZXNzYWdlV2l0aFRpbWVvdXQoKTtcbiAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNhbXBsaW5nSUQgPSBzYW1wbGluZ1Byb3BlcnRpZXM/LnNhbXBsaW5nPy5pZDtcbiAgICBpZiAoc2FtcGxpbmdJRCA9PT0gbnVsbCkge1xuICAgICAgLy8gY3JlYXRlXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoYHNhbXBsaW5nW2RhdGVdYCwgY29sbGVjdGlvblRpbWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXhpb3MucG9zdChcbiAgICAgICAgICB1cmxzKHtcbiAgICAgICAgICAgIHdhdGVyQXV0aG9yaXR5SWQ6IHdhdGVyQXV0aG9yaXR5SWQsXG4gICAgICAgICAgfSkuc2FtcGxpbmdQcm9wZXJ0aWVzLmNyZWF0ZVNhbXBsaW5nLnVybCxcbiAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgKTtcbiAgICAgICAgdXBkYXRlT3JDcmVhdGVTdWNjZXNzKCdidXR0b25zLmNyZWF0ZWQnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udCgnYnV0dG9ucy5lcnJvcicpKTtcbiAgICAgICAgc2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwYWdlVHlwZS5jdXJyZW50ID09PSAncmV2ZXJ0X2NhbmNlbCcpIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGBzYW1wbGluZ1tjb2xsZWN0aW9uX3RpbWVdYCwgY29sbGVjdGlvblRpbWUpO1xuICAgICAgfVxuICAgICAgLy8gdXBkYXRlXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBheGlvcy5wdXQoXG4gICAgICAgICAgdXJscyh7IHNhbXBsaW5nSWQ6IHNhbXBsaW5nSUQsIHdhdGVyQXV0aG9yaXR5SWQ6IHdhdGVyQXV0aG9yaXR5SWQgfSlcbiAgICAgICAgICAgIC5zYW1wbGluZ1Byb3BlcnRpZXMudXBkYXRlU2FtcGxpbmcudXJsLFxuICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICApO1xuICAgICAgICB1cGRhdGVPckNyZWF0ZVN1Y2Nlc3MoJ2J1dHRvbnMudXBkYXRlZCcpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzZXRTYXZpbmdNc2coaTE4bi50KCdidXR0b25zLmVycm9yJykpO1xuICAgICAgICBzZXRPcmlnaW5hbFNhdmVNZXNzYWdlV2l0aFRpbWVvdXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGV0ZWN0UGFnZVR5cGUgPSAoaXNTYW1wbGluZ0NhbmNlbGxlZCwgb3ApID0+IHtcbiAgICBjb25zdCBlZGl0UGFnZVZhbHVlID0gaXNTYW1wbGluZ0NhbmNlbGxlZCA/ICdjYW5jZWwnIDogJ2NvbGxlY3QnO1xuICAgIGlmIChvcCA9PT0gJ2VkaXQnKSB7XG4gICAgICByZXR1cm4gZWRpdFBhZ2VWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKG9wID09PSBDT0xMRUNUX1NBTVBMSU5HX09QKSB7XG4gICAgICByZXR1cm4gJ2NvbGxlY3QnO1xuICAgIH0gZWxzZSBpZiAob3AgPT09IENBTkNFTF9TQU1QTElOR19PUCkge1xuICAgICAgcmV0dXJuICdjYW5jZWwnO1xuICAgIH0gZWxzZSBpZiAob3AgPT09IFJFVkVSVF9DQU5DRUxMQVRJT04pIHtcbiAgICAgIHJldHVybiAncmV2ZXJ0X2NhbmNlbCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlZGl0UGFnZVZhbHVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZXRlcm1pbmVDb2xsZWN0aW9uVGltZSA9IChzZXJ2ZXJDb2xsZWN0aW9uVGltZSwgb3ApID0+IHtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3Qgc2VydmVyVGltZSA9IHNlcnZlckNvbGxlY3Rpb25UaW1lXG4gICAgICA/IG5ldyBEYXRlKHNlcnZlckNvbGxlY3Rpb25UaW1lKVxuICAgICAgOiBjdXJyZW50VGltZTtcbiAgICBjb25zdCBlZGl0UGFnZVZhbHVlID0gc2VydmVyQ29sbGVjdGlvblRpbWUgPyBzZXJ2ZXJUaW1lIDogY3VycmVudFRpbWU7XG4gICAgaWYgKG9wID09PSAnZWRpdCcpIHtcbiAgICAgIHJldHVybiBlZGl0UGFnZVZhbHVlO1xuICAgIH0gZWxzZSBpZiAob3AgPT09IENPTExFQ1RfU0FNUExJTkdfT1ApIHtcbiAgICAgIHJldHVybiBjdXJyZW50VGltZTtcbiAgICB9IGVsc2UgaWYgKFtDQU5DRUxfU0FNUExJTkdfT1AsIFJFVkVSVF9DQU5DRUxMQVRJT05dLmluY2x1ZGVzKG9wKSkge1xuICAgICAgcmV0dXJuIHNlcnZlclRpbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlZGl0UGFnZVZhbHVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRVcmxRdWVyeU9wID0gKCkgPT4ge1xuICAgIGxldCBvcCA9IHF1ZXJ5LmdldCgnb3AnKTtcbiAgICAvLyBpZiBub3QgcHJlc2VudCB0aGVuIGRlZmF1bHQgb3AgaXMgJ2NvbGxlY3RpbmcnXG4gICAgaWYgKFt1bmRlZmluZWQsIG51bGwsICcnXS5pbmNsdWRlcyhvcCkpIHtcbiAgICAgIHJldHVybiBDT0xMRUNUX1NBTVBMSU5HX09QO1xuICAgIH1cbiAgICByZXR1cm4gb3A7XG4gIH07XG5cbiAgaWYgKCFzYW1wbGluZ1BsYW4gfHwgIXNhbXBsaW5nUHJvcGVydGllcykge1xuICAgIHJldHVybiA8U3Bpbm5lciAvPjtcbiAgfVxuXG4gIGlmIChzYW1wbGluZ1Byb3BlcnRpZXMuaXNfcHVtcF9pbl9wcm9ncmVzcykge1xuICAgIHJldHVybiA8U2FtcGxlckluUHJvY2VzcyBoYW5kbGVDbG9zZT17aGFuZGxlQ2xvc2V9IC8+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Zm9ybSBvblN1Ym1pdD17Zm9ybWlrLmhhbmRsZVN1Ym1pdH0+XG4gICAgICA8TGF5b3V0PlxuICAgICAgICA8U2FtcGxpbmdQcm9wZXJ0aWVzU3R5bGU+XG4gICAgICAgICAgeyFpc01vYmlsZSAmJiAoXG4gICAgICAgICAgICA8U2FtcGxpbmdQcm9wZXJ0aWVzSGVhZFxuICAgICAgICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXM9e3NhbXBsaW5nUHJvcGVydGllc31cbiAgICAgICAgICAgICAgc2FtcGxpbmc9e3NhbXBsaW5nUGxhbn1cbiAgICAgICAgICAgICAgZm9ybWlrPXtmb3JtaWt9XG4gICAgICAgICAgICAgIHBhZ2VUeXBlPXtwYWdlVHlwZS5jdXJyZW50fVxuICAgICAgICAgICAgICBjb2xsZWN0aW9uVGltZT17Y29sbGVjdGlvblRpbWV9XG4gICAgICAgICAgICAgIHNldENvbGxlY3Rpb25UaW1lPXtzZXRDb2xsZWN0aW9uVGltZX1cbiAgICAgICAgICAgICAgc2V0U2FtcGxpbmdVcGRhdGVkPXtzZXRTYW1wbGluZ1VwZGF0ZWR9XG4gICAgICAgICAgICAgIGlzRGF0ZVBpY2tlckRpc2FibGVkPXtpc1Byb3BlcnRpZXNQYWdlKHBhZ2VUeXBlKX1cbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdD17ZGF0ZUZvcm1hdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHtpc01vYmlsZSAmJiAoXG4gICAgICAgICAgICA8U2FtcGxpbmdQcm9wZXJ0aWVzSGVhZE1vYmlsZVxuICAgICAgICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXM9e3NhbXBsaW5nUHJvcGVydGllc31cbiAgICAgICAgICAgICAgc2FtcGxpbmc9e3NhbXBsaW5nUGxhbn1cbiAgICAgICAgICAgICAgZm9ybWlrPXtmb3JtaWt9XG4gICAgICAgICAgICAgIHBhZ2VUeXBlPXtwYWdlVHlwZS5jdXJyZW50fVxuICAgICAgICAgICAgICBjb2xsZWN0aW9uVGltZT17Y29sbGVjdGlvblRpbWV9XG4gICAgICAgICAgICAgIHNldENvbGxlY3Rpb25UaW1lPXtzZXRDb2xsZWN0aW9uVGltZX1cbiAgICAgICAgICAgICAgc2V0U2FtcGxpbmdVcGRhdGVkPXtzZXRTYW1wbGluZ1VwZGF0ZWR9XG4gICAgICAgICAgICAgIGlzRGF0ZVBpY2tlckRpc2FibGVkPXtpc1Byb3BlcnRpZXNQYWdlKHBhZ2VUeXBlKX1cbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdD17ZGF0ZUZvcm1hdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHtzYW1wbGluZ1Byb3BlcnRpZXMgJiYgcGFnZVR5cGUgJiYgKFxuICAgICAgICAgICAgPFNhbXBsaW5nUHJvcGVydGllc0Zvcm1cbiAgICAgICAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzPXtzYW1wbGluZ1Byb3BlcnRpZXN9XG4gICAgICAgICAgICAgIHNhbXBsaW5nPXtzYW1wbGluZ1BsYW59XG4gICAgICAgICAgICAgIHBhZ2VUeXBlPXtwYWdlVHlwZS5jdXJyZW50fVxuICAgICAgICAgICAgICBzZXRTYW1wbGluZ1VwZGF0ZWQ9e3NldFNhbXBsaW5nVXBkYXRlZH1cbiAgICAgICAgICAgICAgc2F2aW5nTXNnPXtzYXZpbmdNc2d9XG4gICAgICAgICAgICAgIGhhbmRsZUNsb3NlPXtoYW5kbGVDbG9zZX1cbiAgICAgICAgICAgICAgc2V0UGhvdG9zVG9EZWxldGU9e3NldFBob3Rvc1RvRGVsZXRlfVxuICAgICAgICAgICAgICBzZXRQaG90b3M9e3NldFBob3Rvc31cbiAgICAgICAgICAgICAgcGhvdG9zPXtwaG90b3N9XG4gICAgICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NhbXBsaW5nUHJvcGVydGllc1N0eWxlPlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9mb3JtPlxuICApO1xufTtcbiJdfQ==
354
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlYWN0RGV2aWNlRGV0ZWN0IiwiX2Zvcm1payIsIl9yZWFjdFJvdXRlckRvbSIsIl9yZWFjdFJlZHV4IiwiX0xheW91dCIsIl9pMThuIiwiX3VzZVF1ZXJ5VVJMIiwiX1NwaW5uZXIiLCJfdXJscyIsIl9zdHlsZXMiLCJfc2FtcGxpbmdzUGFnZVV0aWxzIiwiX1NhbXBsaW5nUHJvcGVydGllc0Zvcm0iLCJfU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZCIsIl9TYW1wbGluZ1Byb3BlcnRpZXNIZWFkTW9iaWxlIiwiX3NhbXBsaW5nUHJvcGVydGllc1V0aWxzIiwiX1NhbXBsZXJJblByb2Nlc3MiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsImlzUHJvcGVydGllc1BhZ2UiLCJwYWdlVHlwZSIsIlNhbXBsaW5nUHJvcGVydGllcyIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiRGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJjb2xsZWN0aW9uVGltZSIsInNldENvbGxlY3Rpb25UaW1lIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJwaG90b3MiLCJzZXRQaG90b3MiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInBob3Rvc1RvRGVsZXRlIiwic2V0UGhvdG9zVG9EZWxldGUiLCJfdXNlU3RhdGU3IiwiaTE4biIsInQiLCJfdXNlU3RhdGU4Iiwic2F2aW5nTXNnIiwic2V0U2F2aW5nTXNnIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTEwIiwic2FtcGxpbmdVcGRhdGVkIiwic2V0U2FtcGxpbmdVcGRhdGVkIiwiX3VzZVN0YXRlMTEiLCJ1bmRlZmluZWQiLCJfdXNlU3RhdGUxMiIsInNhbXBsaW5nUGxhbiIsInNldFNhbXBsaW5nUGxhbiIsImhpc3RvcnkiLCJ1c2VIaXN0b3J5IiwibG9jYXRpb24iLCJ1c2VMb2NhdGlvbiIsInF1ZXJ5IiwidXNlUXVlcnlVUkwiLCJ1c2VySW5mbyIsInVzZVNlbGVjdG9yIiwic3RhdGUiLCJwZXJtaXNzaW9ucyIsInVzZXJfaW5mbyIsImRhdGVGb3JtYXQiLCJkYXRlX3RpbWVfZm9ybWF0IiwidXNlUmVmIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsInNhbXBsaW5nUHJvcGVydGllcyIsInNldFNhbXBsaW5nUHJvcGVydGllcyIsIl91c2VQYXJhbXMiLCJ1c2VQYXJhbXMiLCJzYW1wbGVJZCIsIndhdGVyQXV0aG9yaXR5SWQiLCJnbG9iYWxfZGF0YSIsImxvY2FsZSIsIm5hdl9jb250ZXh0X2RhdGEiLCJuYXZDb250ZXh0IiwiaW5pdEZvcm1pa1ZhbHVlcyIsImlzQ2FuY2VsZWQiLCJ0aW1lWm9uZSIsInBhZ2VDb2xsZWN0aW9uVGltZSIsImlzQ29sbGVjdExheW91dCIsImN1cnJlbnQiLCJjb2xsZWN0aW9uVGltZUZvcm1hdCIsInNhbXBsaW5nIiwiY29sbGVjdGlvbl90aW1lIiwic2FtIiwiZm9ybWlrVmFsdWVzIiwibGFiX2lkIiwicHVtcF9zYW1wbGluZ192b2x1bWUiLCJwdW1wX2JhdHRlcnlfbGV2ZWwiLCJkZXNjcmlwdGlvbiIsImthbmRvX3JlcCIsInNhbXBsaW5nX3BsYW5faWQiLCJjYW5jZWxsYXRpb25fcmVhc29uIiwiaXNfY2FuY2VsZWQiLCJpc0NhbmNlbGxlZExheW91dCIsImNhbmNlbGVkX2J5X2lkIiwibmFtZSIsImNhbmNlbGVkX2J5X25hbWUiLCJmaXJzdF9uYW1lIiwibGFzdF9uYW1lIiwiaWQiLCJ1c2VyX2lkIiwiZm9ybWlrIiwic2V0VmFsdWVzIiwicGFnZVR5cGUyaXNDYW5jZWxsZWQiLCJjYW5jZWwiLCJjb2xsZWN0IiwicmV2ZXJ0X2NhbmNlbCIsImZldGNoU2FtcGxpbmdQcm9wZXJ0aWVzIiwidXNlQ2FsbGJhY2siLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInNhbXBsaW5nSWQiLCJvcCIsInJlc3BvbnNlIiwiX2FyZ3MiLCJhcmd1bWVudHMiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwibGVuZ3RoIiwiYXhpb3MiLCJ1cmxzIiwiZmV0Y2hTYW1wbGluZyIsInVybCIsInNlbnQiLCJkYXRhIiwic2FtcGxpbmdfcHJvcGVydGllcyIsImRldGVjdFBhZ2VUeXBlIiwiZGV0ZXJtaW5lQ29sbGVjdGlvblRpbWUiLCJzYW1wbGluZ19wbGFuIiwidGltZV96b25lIiwic3RvcCIsInVzZUVmZmVjdCIsImdldFVybFF1ZXJ5T3AiLCJ2YWxpZGF0aW9uU2NoZW1hIiwicHJvcGVydGllc1ZhbGlkYXRpb25TY2hlbWEiLCJjYW5jZWxsYXRpb25WYWxpZGF0aW9uU2NoZW1hIiwidXNlRm9ybWlrIiwiZW5hYmxlUmVpbml0aWFsaXplIiwiaW5pdGlhbFZhbHVlcyIsInNhbXBsaW5nUHJvcGVydHkiLCJ2YWxpZGF0ZU9uQ2hhbmdlIiwidmFsaWRhdGVPbkJsdXIiLCJvblN1Ym1pdCIsInZhbHVlcyIsImhhbmRsZVN1Ym1pdCIsImhhbmRsZUNsb3NlIiwiZ29CYWNrIiwicHVzaCIsInNhbXBsaW5nc1BhZ2UiLCJzYW1wbGluZ3NMaXN0Um91dGUiLCJfc2FtcGxpbmdQcm9wZXJ0aWVzJHMiLCJwaWN0dXJlc19hdHRyaWJ1dGVzIiwic2F2ZUZvcm1EYXRhIiwiZm9ybURhdGFCdWlsZGVyIiwidXBkYXRlT3JDcmVhdGUiLCJzZXRPcmlnaW5hbFNhdmVNZXNzYWdlV2l0aFRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsInZhbHVlIiwiYXBwZW5kIiwiY29uY2F0IiwidW5pcXVlUGhvdG9zVG9EZWxldGUiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiU2V0IiwiZm9yRWFjaCIsImluZGV4IiwiSlNPTiIsInN0cmluZ2lmeSIsIl9yZWYyIiwiX2NhbGxlZTIiLCJfc2FtcGxpbmdQcm9wZXJ0aWVzJHMyIiwidXBkYXRlT3JDcmVhdGVTdWNjZXNzIiwic2FtcGxpbmdJRCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIm1zZyIsInBvc3QiLCJjcmVhdGVTYW1wbGluZyIsInQwIiwiaW5jbHVkZXMiLCJwdXQiLCJ1cGRhdGVTYW1wbGluZyIsInQxIiwiX3giLCJhcHBseSIsImlzU2FtcGxpbmdDYW5jZWxsZWQiLCJlZGl0UGFnZVZhbHVlIiwiRURJVF9QUk9QRVJUSUVTX09QIiwiQ09MTEVDVF9TQU1QTElOR19PUCIsIkNBTkNFTF9TQU1QTElOR19PUCIsIlJFVkVSVF9DQU5DRUxMQVRJT04iLCJzZXJ2ZXJDb2xsZWN0aW9uVGltZSIsImN1cnJlbnRUaW1lIiwic2VydmVyVGltZSIsImNyZWF0ZUVsZW1lbnQiLCJTcGlubmVyIiwiaXNfcHVtcF9pbl9wcm9ncmVzcyIsIlNhbXBsaW5nUHJvcGVydGllc1N0eWxlIiwiaXNNb2JpbGUiLCJTYW1wbGluZ1Byb3BlcnRpZXNIZWFkIiwiaXNEYXRlUGlja2VyRGlzYWJsZWQiLCJTYW1wbGluZ1Byb3BlcnRpZXNIZWFkTW9iaWxlIiwiU2FtcGxpbmdQcm9wZXJ0aWVzRm9ybSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGFnZXMvU2FtcGxpbmdzUGFnZS9TYW1wbGluZ1Byb3BlcnRpZXMvU2FtcGxpbmdQcm9wZXJ0aWVzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHJvcGVydGllcyBhbmQgQ2FuY2VsbGluZyBmb3Jtcy5cbiAqKi9cbmltcG9ydCBSZWFjdCwgeyBGQywgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBGb3JtaWtDb25maWcgfSBmcm9tICdmb3JtaWsvZGlzdC90eXBlcyc7XG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJ3JlYWN0LWRldmljZS1kZXRlY3QnO1xuaW1wb3J0IHsgdXNlRm9ybWlrIH0gZnJvbSAnZm9ybWlrJztcbmltcG9ydCB7IHVzZUhpc3RvcnksIHVzZVBhcmFtcywgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG5pbXBvcnQgTGF5b3V0IGZyb20gJ3NyYy91aS1raXQvTGF5b3V0L0xheW91dCc7XG5pbXBvcnQgaTE4biBmcm9tICdzcmMvdXRpbGl0aWVzL2kxOG4nO1xuaW1wb3J0IHVzZVF1ZXJ5VVJMIGZyb20gJ3NyYy9ob29rcy91c2VRdWVyeVVSTCc7XG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnc3JjL2NvbXBvbmVudHMvU3Bpbm5lci9TcGlubmVyJztcbmltcG9ydCB7IHVybHMgfSBmcm9tICdzcmMvdXRpbGl0aWVzL3VybHMnO1xuaW1wb3J0IHsgU2FtcGxpbmdQcm9wZXJ0aWVzU3R5bGUgfSBmcm9tICcuL3N0eWxlcyc7XG5pbXBvcnQge1xuICBDQU5DRUxfU0FNUExJTkdfT1AsXG4gIENPTExFQ1RfU0FNUExJTkdfT1AsXG4gIEVESVRfUFJPUEVSVElFU19PUCxcbiAgUkVWRVJUX0NBTkNFTExBVElPTixcbiAgU2FtcGxpbmdGZXRjaERhdGEsXG59IGZyb20gJy4uL3NhbXBsaW5nc1BhZ2VVdGlscyc7XG5pbXBvcnQgeyBTYW1wbGluZ1Byb3BlcnRpZXNGb3JtIH0gZnJvbSAnLi9TYW1wbGluZ1Byb3BlcnRpZXNGb3JtJztcbmltcG9ydCB7IFNhbXBsaW5nUHJvcGVydGllc0hlYWQgfSBmcm9tICcuL1NhbXBsaW5nUHJvcGVydGllc0hlYWQnO1xuaW1wb3J0IHsgU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZE1vYmlsZSB9IGZyb20gJy4vU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZE1vYmlsZSc7XG5pbXBvcnQge1xuICBGb3JtVHlwZSxcbiAgVFNhbXBsaW5nUHJvcGVydGllcyxcbiAgY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYSxcbiAgaXNDb2xsZWN0TGF5b3V0LFxuICBwcm9wZXJ0aWVzVmFsaWRhdGlvblNjaGVtYSxcbiAgc2FtcGxpbmdQcm9wZXJ0eSxcbiAgY29sbGVjdGlvblRpbWVGb3JtYXQsXG59IGZyb20gJy4vc2FtcGxpbmdQcm9wZXJ0aWVzVXRpbHMnO1xuaW1wb3J0IFNhbXBsZXJJblByb2Nlc3MgZnJvbSAnLi9TYW1wbGVySW5Qcm9jZXNzJztcblxuY29uc3QgaXNQcm9wZXJ0aWVzUGFnZSA9IChwYWdlVHlwZSkgPT4gcGFnZVR5cGUgPT09ICdlZGl0JztcblxuZXhwb3J0IGNvbnN0IFNhbXBsaW5nUHJvcGVydGllczogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IFtjb2xsZWN0aW9uVGltZSwgc2V0Q29sbGVjdGlvblRpbWVdID0gdXNlU3RhdGU8c3RyaW5nIHwgRGF0ZSB8IG51bGw+KFxuICAgIG5ldyBEYXRlKCksXG4gICk7XG4gIGNvbnN0IFtwaG90b3MsIHNldFBob3Rvc10gPSB1c2VTdGF0ZTxzdHJpbmcgfCBCbG9iIHwgYW55PihbXSk7XG4gIGNvbnN0IFtwaG90b3NUb0RlbGV0ZSwgc2V0UGhvdG9zVG9EZWxldGVdID0gdXNlU3RhdGU8bnVtYmVyW10+KFtdKTtcbiAgY29uc3QgW3NhdmluZ01zZywgc2V0U2F2aW5nTXNnXSA9IHVzZVN0YXRlPHN0cmluZz4oaTE4bi50KCdidXR0b25zLnNhdmUnKSk7XG4gIGNvbnN0IFtzYW1wbGluZ1VwZGF0ZWQsIHNldFNhbXBsaW5nVXBkYXRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzYW1wbGluZ1BsYW4sIHNldFNhbXBsaW5nUGxhbl0gPSB1c2VTdGF0ZTxcbiAgICBTYW1wbGluZ0ZldGNoRGF0YSB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgY29uc3QgcXVlcnkgPSB1c2VRdWVyeVVSTCgpO1xuICBjb25zdCB1c2VySW5mbyA9IHVzZVNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUucGVybWlzc2lvbnMudXNlcl9pbmZvKTtcbiAgY29uc3QgZGF0ZUZvcm1hdCA9XG4gICAgdXNlckluZm8uZGF0ZV90aW1lX2Zvcm1hdCA9PT0gJ3VzJ1xuICAgICAgPyAnTU1NIGQsIHl5eXkgaGg6bW0gYWEnXG4gICAgICA6ICdkL01NL3l5eXkgSEg6bW0nO1xuICBjb25zdCBwYWdlVHlwZSA9IHVzZVJlZjxzdHJpbmc+KCcnKTtcbiAgY29uc3QgW3NhbXBsaW5nUHJvcGVydGllcywgc2V0U2FtcGxpbmdQcm9wZXJ0aWVzXSA9XG4gICAgdXNlU3RhdGU8VFNhbXBsaW5nUHJvcGVydGllcz4oKTtcbiAgY29uc3QgeyBzYW1wbGVJZCB9ID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IHdhdGVyQXV0aG9yaXR5SWQgPSB1c2VTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLmdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWQsXG4gICk7XG4gIGNvbnN0IGxvY2FsZSA9IHVzZVNlbGVjdG9yKFxuICAgIChzdGF0ZSkgPT4gc3RhdGUubmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0LmxvY2FsZSxcbiAgKTtcblxuICBjb25zdCBpbml0Rm9ybWlrVmFsdWVzID0gKFxuICAgIHNhbXBsaW5nUHJvcGVydGllcyxcbiAgICBpc0NhbmNlbGVkLFxuICAgIHRpbWVab25lLFxuICAgIHVzZXJJbmZvLFxuICApID0+IHtcbiAgICBjb25zdCBwYWdlQ29sbGVjdGlvblRpbWUgPSBpc0NvbGxlY3RMYXlvdXQocGFnZVR5cGUuY3VycmVudClcbiAgICAgID8gY29sbGVjdGlvblRpbWVcbiAgICAgIDogY29sbGVjdGlvblRpbWVGb3JtYXQoXG4gICAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmNvbGxlY3Rpb25fdGltZSxcbiAgICAgICAgICB0aW1lWm9uZSxcbiAgICAgICAgKTtcbiAgICBjb25zdCBzYW0gPSBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmc7XG4gICAgbGV0IGZvcm1pa1ZhbHVlczogRm9ybVR5cGUgPSB7XG4gICAgICBsYWJfaWQ6IHNhbS5sYWJfaWQsXG4gICAgICBjb2xsZWN0aW9uX3RpbWU6IHBhZ2VDb2xsZWN0aW9uVGltZSxcbiAgICAgIHB1bXBfc2FtcGxpbmdfdm9sdW1lOiBzYW0ucHVtcF9zYW1wbGluZ192b2x1bWUsXG4gICAgICBwdW1wX2JhdHRlcnlfbGV2ZWw6IHNhbS5wdW1wX2JhdHRlcnlfbGV2ZWwsXG4gICAgICBkZXNjcmlwdGlvbjogc2FtLmRlc2NyaXB0aW9uLFxuICAgICAga2FuZG9fcmVwOiBzYW0ua2FuZG9fcmVwLFxuICAgICAgc2FtcGxpbmdfcGxhbl9pZDogc2FtLnNhbXBsaW5nX3BsYW5faWQsXG4gICAgICBjYW5jZWxsYXRpb25fcmVhc29uOiBzYW0uY2FuY2VsbGF0aW9uX3JlYXNvbiB8fCAnJyxcbiAgICAgIGlzX2NhbmNlbGVkOiBpc0NhbmNlbGVkLFxuICAgIH07XG5cbiAgICBpZiAoaXNDYW5jZWxsZWRMYXlvdXQoc2FtcGxpbmdQcm9wZXJ0aWVzKSlcbiAgICAgIGZvcm1pa1ZhbHVlcy5jYW5jZWxlZF9ieV9pZCA9IHtcbiAgICAgICAgbmFtZTpcbiAgICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXMuY2FuY2VsZWRfYnlfbmFtZSB8fFxuICAgICAgICAgIHVzZXJJbmZvLmZpcnN0X25hbWUgKyAnICcgKyB1c2VySW5mby5sYXN0X25hbWUsXG4gICAgICAgIGlkOiBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuY2FuY2VsZWRfYnlfaWQgfHwgdXNlckluZm8udXNlcl9pZCxcbiAgICAgIH07XG4gICAgZm9ybWlrVmFsdWVzLmthbmRvX3JlcCA9IHNhbXBsaW5nUHJvcGVydGllcy5zYW1wbGluZy5rYW5kb19yZXA7XG4gICAgZm9ybWlrLnNldFZhbHVlcyhmb3JtaWtWYWx1ZXMpO1xuICB9O1xuXG4gIGNvbnN0IGlzQ2FuY2VsbGVkTGF5b3V0ID0gKHNhbXBsaW5nUHJvcGVydGllcykgPT4ge1xuICAgIGNvbnN0IHBhZ2VUeXBlMmlzQ2FuY2VsbGVkID0ge1xuICAgICAgY2FuY2VsOiB0cnVlLFxuICAgICAgY29sbGVjdDogZmFsc2UsXG4gICAgICByZXZlcnRfY2FuY2VsOiBmYWxzZSxcbiAgICB9O1xuICAgIGxldCBpc0NhbmNlbGVkID0gcGFnZVR5cGUyaXNDYW5jZWxsZWRbcGFnZVR5cGUuY3VycmVudF07XG4gICAgaWYgKGlzQ2FuY2VsZWQgPT09IG51bGwpIHtcbiAgICAgIGlzQ2FuY2VsZWQgPSBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuaXNfY2FuY2VsZWQgfHwgZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBpc0NhbmNlbGVkO1xuICB9O1xuXG4gIGNvbnN0IGZldGNoU2FtcGxpbmdQcm9wZXJ0aWVzID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNhbXBsaW5nSWQgPSBzYW1wbGVJZCwgb3ApID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICB1cmxzKHsgc2FtcGxpbmdJZDogc2FtcGxpbmdJZCB9KS5zYW1wbGluZ1Byb3BlcnRpZXMuZmV0Y2hTYW1wbGluZy51cmwsXG4gICAgICApO1xuICAgICAgY29uc3Qgc2FtcGxpbmcgPSByZXNwb25zZS5kYXRhO1xuICAgICAgY29uc3Qgc2FtcGxpbmdQcm9wZXJ0aWVzID0gc2FtcGxpbmcuc2FtcGxpbmdfcHJvcGVydGllcztcbiAgICAgIHBhZ2VUeXBlLmN1cnJlbnQgPSBkZXRlY3RQYWdlVHlwZShcbiAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmlzX2NhbmNlbGVkLFxuICAgICAgICBvcCxcbiAgICAgICk7XG4gICAgICBzZXRDb2xsZWN0aW9uVGltZShcbiAgICAgICAgZGV0ZXJtaW5lQ29sbGVjdGlvblRpbWUoXG4gICAgICAgICAgY29sbGVjdGlvblRpbWVGb3JtYXQoXG4gICAgICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuY29sbGVjdGlvbl90aW1lLFxuICAgICAgICAgICAgc2FtcGxpbmcuc2FtcGxpbmdfcGxhbi50aW1lX3pvbmUsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBvcCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBsZXQgaXNDYW5jZWxlZCA9IGlzQ2FuY2VsbGVkTGF5b3V0KFxuICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuaXNfY2FuY2VsZWQsXG4gICAgICApO1xuICAgICAgaW5pdEZvcm1pa1ZhbHVlcyhcbiAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzLFxuICAgICAgICBpc0NhbmNlbGVkLFxuICAgICAgICBzYW1wbGluZy5zYW1wbGluZ19wbGFuLnRpbWVfem9uZSxcbiAgICAgICAgdXNlckluZm8sXG4gICAgICApO1xuICAgICAgc2V0U2FtcGxpbmdQcm9wZXJ0aWVzKHNhbXBsaW5nUHJvcGVydGllcyk7XG4gICAgICBzZXRTYW1wbGluZ1BsYW4oc2FtcGxpbmcuc2FtcGxpbmdfcGxhbik7XG4gICAgfSxcbiAgICBbXSxcbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZldGNoU2FtcGxpbmdQcm9wZXJ0aWVzKHNhbXBsZUlkLCBnZXRVcmxRdWVyeU9wKCkpO1xuICB9LCBbc2FtcGxpbmdVcGRhdGVkXSk7XG5cbiAgY29uc3QgdmFsaWRhdGlvblNjaGVtYSA9IGlzQ29sbGVjdExheW91dChwYWdlVHlwZS5jdXJyZW50KVxuICAgID8gcHJvcGVydGllc1ZhbGlkYXRpb25TY2hlbWFcbiAgICA6IGNhbmNlbGxhdGlvblZhbGlkYXRpb25TY2hlbWE7XG4gIGNvbnN0IGZvcm1payA9IHVzZUZvcm1pazxGb3JtaWtDb25maWc8Rm9ybVR5cGU+Pih7XG4gICAgZW5hYmxlUmVpbml0aWFsaXplOiB0cnVlLFxuICAgIGluaXRpYWxWYWx1ZXM6IHNhbXBsaW5nUHJvcGVydHksXG4gICAgdmFsaWRhdGlvblNjaGVtYTogdmFsaWRhdGlvblNjaGVtYSxcbiAgICB2YWxpZGF0ZU9uQ2hhbmdlOiBmYWxzZSxcbiAgICB2YWxpZGF0ZU9uQmx1cjogdHJ1ZSxcbiAgICBvblN1Ym1pdDogKHZhbHVlcykgPT4ge1xuICAgICAgaGFuZGxlU3VibWl0KHZhbHVlcyk7XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSAoKSA9PiB7XG4gICAgaWYgKGxvY2F0aW9uLmtleSkge1xuICAgICAgaGlzdG9yeS5nb0JhY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlzdG9yeS5wdXNoKFxuICAgICAgICB1cmxzKHsgbG9jYWxlLCB3YXRlckF1dGhvcml0eUlkIH0pLnNhbXBsaW5nc1BhZ2Uuc2FtcGxpbmdzTGlzdFJvdXRlLnVybCxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICh2YWx1ZXMpID0+IHtcbiAgICBzZXRTYXZpbmdNc2coaTE4bi50KCdidXR0b25zLnNhdmluZycpKTtcbiAgICB2YWx1ZXMucGljdHVyZXNfYXR0cmlidXRlcyA9IHBob3RvcztcbiAgICBpZiAodmFsdWVzLmNhbmNlbGVkX2J5X2lkICYmIGlzQ2FuY2VsbGVkTGF5b3V0KHNhbXBsaW5nUHJvcGVydGllcykpXG4gICAgICB2YWx1ZXMuY2FuY2VsZWRfYnlfaWQgPVxuICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXM/LnNhbXBsaW5nPy5jYW5jZWxlZF9ieV9pZCB8fCB1c2VySW5mby51c2VyX2lkO1xuICAgIGNvbnN0IHNhdmVGb3JtRGF0YSA9IGZvcm1EYXRhQnVpbGRlcih2YWx1ZXMpO1xuICAgIHVwZGF0ZU9yQ3JlYXRlKHNhdmVGb3JtRGF0YSk7XG4gIH07XG5cbiAgY29uc3Qgc2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0ID0gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udCgnYnV0dG9ucy5zYXZlJykpO1xuICAgIH0sIDMwMDApO1xuICB9O1xuXG4gIGNvbnN0IGZvcm1EYXRhQnVpbGRlciA9ICh2YWx1ZXMpID0+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlcykge1xuICAgICAgaWYgKGtleSAhPT0gJ3BpY3R1cmVzX2F0dHJpYnV0ZXMnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2tleV0gPT09IG51bGwgPyAnJyA6IHZhbHVlc1trZXldO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoYHNhbXBsaW5nWyR7a2V5fV1gLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCB1bmlxdWVQaG90b3NUb0RlbGV0ZSA9IFsuLi5uZXcgU2V0KHBob3Rvc1RvRGVsZXRlKV07XG4gICAgdW5pcXVlUGhvdG9zVG9EZWxldGUubGVuZ3RoICE9PSAwICYmXG4gICAgICB1bmlxdWVQaG90b3NUb0RlbGV0ZS5mb3JFYWNoKChpZCwgaW5kZXgpID0+IHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgIGBzYW1wbGluZ1twaWN0dXJlc19hdHRyaWJ1dGVzXVske2luZGV4fV1baWRdYCxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShpZCksXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICBgc2FtcGxpbmdbcGljdHVyZXNfYXR0cmlidXRlc11bJHtpbmRleH1dW19kZXN0cm95XWAsXG4gICAgICAgICAgJ3RydWUnLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZU9yQ3JlYXRlID0gYXN5bmMgKGZvcm1EYXRhKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlT3JDcmVhdGVTdWNjZXNzID0gKG1zZykgPT4ge1xuICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udChtc2cpKTtcbiAgICAgIHNldFNhbXBsaW5nVXBkYXRlZCh0cnVlKTtcbiAgICAgIHNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCgpO1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2FtcGxpbmdJRCA9IHNhbXBsaW5nUHJvcGVydGllcz8uc2FtcGxpbmc/LmlkO1xuICAgIGlmIChzYW1wbGluZ0lEID09PSBudWxsKSB7XG4gICAgICAvLyBjcmVhdGVcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChgc2FtcGxpbmdbZGF0ZV1gLCBjb2xsZWN0aW9uVGltZSk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBheGlvcy5wb3N0KFxuICAgICAgICAgIHVybHMoe1xuICAgICAgICAgICAgd2F0ZXJBdXRob3JpdHlJZDogd2F0ZXJBdXRob3JpdHlJZCxcbiAgICAgICAgICB9KS5zYW1wbGluZ1Byb3BlcnRpZXMuY3JlYXRlU2FtcGxpbmcudXJsLFxuICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICApO1xuICAgICAgICB1cGRhdGVPckNyZWF0ZVN1Y2Nlc3MoJ2J1dHRvbnMuY3JlYXRlZCcpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzZXRTYXZpbmdNc2coaTE4bi50KCdidXR0b25zLmVycm9yJykpO1xuICAgICAgICBzZXRPcmlnaW5hbFNhdmVNZXNzYWdlV2l0aFRpbWVvdXQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICBnZXRVcmxRdWVyeU9wKCkgPT09ICdlZGl0JyB8fFxuICAgICAgICBbJ3JldmVydF9jYW5jZWwnXS5pbmNsdWRlcyhwYWdlVHlwZS5jdXJyZW50KVxuICAgICAgKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChgc2FtcGxpbmdbY29sbGVjdGlvbl90aW1lXWAsIGNvbGxlY3Rpb25UaW1lKTtcbiAgICAgIH1cbiAgICAgIC8vIHVwZGF0ZVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXhpb3MucHV0KFxuICAgICAgICAgIHVybHMoeyBzYW1wbGluZ0lkOiBzYW1wbGluZ0lELCB3YXRlckF1dGhvcml0eUlkOiB3YXRlckF1dGhvcml0eUlkIH0pXG4gICAgICAgICAgICAuc2FtcGxpbmdQcm9wZXJ0aWVzLnVwZGF0ZVNhbXBsaW5nLnVybCxcbiAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgKTtcbiAgICAgICAgdXBkYXRlT3JDcmVhdGVTdWNjZXNzKCdidXR0b25zLnVwZGF0ZWQnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udCgnYnV0dG9ucy5lcnJvcicpKTtcbiAgICAgICAgc2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0KCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRldGVjdFBhZ2VUeXBlID0gKGlzU2FtcGxpbmdDYW5jZWxsZWQsIG9wKSA9PiB7XG4gICAgY29uc3QgZWRpdFBhZ2VWYWx1ZSA9IGlzU2FtcGxpbmdDYW5jZWxsZWQgPyAnY2FuY2VsJyA6ICdjb2xsZWN0JztcbiAgICBpZiAob3AgPT09IEVESVRfUFJPUEVSVElFU19PUCkge1xuICAgICAgcmV0dXJuIGVkaXRQYWdlVmFsdWU7XG4gICAgfSBlbHNlIGlmIChvcCA9PT0gQ09MTEVDVF9TQU1QTElOR19PUCkge1xuICAgICAgcmV0dXJuICdjb2xsZWN0JztcbiAgICB9IGVsc2UgaWYgKG9wID09PSBDQU5DRUxfU0FNUExJTkdfT1ApIHtcbiAgICAgIHJldHVybiAnY2FuY2VsJztcbiAgICB9IGVsc2UgaWYgKG9wID09PSBSRVZFUlRfQ0FOQ0VMTEFUSU9OKSB7XG4gICAgICByZXR1cm4gJ3JldmVydF9jYW5jZWwnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZWRpdFBhZ2VWYWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGV0ZXJtaW5lQ29sbGVjdGlvblRpbWUgPSAoc2VydmVyQ29sbGVjdGlvblRpbWUsIG9wKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHNlcnZlclRpbWUgPSBzZXJ2ZXJDb2xsZWN0aW9uVGltZVxuICAgICAgPyBuZXcgRGF0ZShzZXJ2ZXJDb2xsZWN0aW9uVGltZSlcbiAgICAgIDogY3VycmVudFRpbWU7XG4gICAgY29uc3QgZWRpdFBhZ2VWYWx1ZSA9IHNlcnZlckNvbGxlY3Rpb25UaW1lID8gc2VydmVyVGltZSA6IGN1cnJlbnRUaW1lO1xuICAgIGlmIChvcCA9PT0gRURJVF9QUk9QRVJUSUVTX09QKSB7XG4gICAgICByZXR1cm4gZWRpdFBhZ2VWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKG9wID09PSBDT0xMRUNUX1NBTVBMSU5HX09QKSB7XG4gICAgICByZXR1cm4gY3VycmVudFRpbWU7XG4gICAgfSBlbHNlIGlmIChbQ0FOQ0VMX1NBTVBMSU5HX09QLCBSRVZFUlRfQ0FOQ0VMTEFUSU9OXS5pbmNsdWRlcyhvcCkpIHtcbiAgICAgIHJldHVybiBzZXJ2ZXJUaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZWRpdFBhZ2VWYWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0VXJsUXVlcnlPcCA9ICgpID0+IHtcbiAgICBsZXQgb3AgPSBxdWVyeS5nZXQoJ29wJyk7XG4gICAgLy8gaWYgbm90IHByZXNlbnQgdGhlbiBkZWZhdWx0IG9wIGlzICdjb2xsZWN0aW5nJ1xuICAgIGlmIChbdW5kZWZpbmVkLCBudWxsLCAnJ10uaW5jbHVkZXMob3ApKSB7XG4gICAgICByZXR1cm4gQ09MTEVDVF9TQU1QTElOR19PUDtcbiAgICB9XG4gICAgcmV0dXJuIG9wO1xuICB9O1xuXG4gIGlmICghc2FtcGxpbmdQbGFuIHx8ICFzYW1wbGluZ1Byb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gPFNwaW5uZXIgLz47XG4gIH1cblxuICBpZiAoc2FtcGxpbmdQcm9wZXJ0aWVzLmlzX3B1bXBfaW5fcHJvZ3Jlc3MpIHtcbiAgICByZXR1cm4gPFNhbXBsZXJJblByb2Nlc3MgaGFuZGxlQ2xvc2U9e2hhbmRsZUNsb3NlfSAvPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGZvcm0gb25TdWJtaXQ9e2Zvcm1pay5oYW5kbGVTdWJtaXR9PlxuICAgICAgPExheW91dD5cbiAgICAgICAgPFNhbXBsaW5nUHJvcGVydGllc1N0eWxlPlxuICAgICAgICAgIHshaXNNb2JpbGUgJiYgKFxuICAgICAgICAgICAgPFNhbXBsaW5nUHJvcGVydGllc0hlYWRcbiAgICAgICAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzPXtzYW1wbGluZ1Byb3BlcnRpZXN9XG4gICAgICAgICAgICAgIHNhbXBsaW5nPXtzYW1wbGluZ1BsYW59XG4gICAgICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgICAgICBwYWdlVHlwZT17cGFnZVR5cGUuY3VycmVudH1cbiAgICAgICAgICAgICAgY29sbGVjdGlvblRpbWU9e2NvbGxlY3Rpb25UaW1lfVxuICAgICAgICAgICAgICBzZXRDb2xsZWN0aW9uVGltZT17c2V0Q29sbGVjdGlvblRpbWV9XG4gICAgICAgICAgICAgIHNldFNhbXBsaW5nVXBkYXRlZD17c2V0U2FtcGxpbmdVcGRhdGVkfVxuICAgICAgICAgICAgICBpc0RhdGVQaWNrZXJEaXNhYmxlZD17aXNQcm9wZXJ0aWVzUGFnZShwYWdlVHlwZSl9XG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQ9e2RhdGVGb3JtYXR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7aXNNb2JpbGUgJiYgKFxuICAgICAgICAgICAgPFNhbXBsaW5nUHJvcGVydGllc0hlYWRNb2JpbGVcbiAgICAgICAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzPXtzYW1wbGluZ1Byb3BlcnRpZXN9XG4gICAgICAgICAgICAgIHNhbXBsaW5nPXtzYW1wbGluZ1BsYW59XG4gICAgICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgICAgICBwYWdlVHlwZT17cGFnZVR5cGUuY3VycmVudH1cbiAgICAgICAgICAgICAgY29sbGVjdGlvblRpbWU9e2NvbGxlY3Rpb25UaW1lfVxuICAgICAgICAgICAgICBzZXRDb2xsZWN0aW9uVGltZT17c2V0Q29sbGVjdGlvblRpbWV9XG4gICAgICAgICAgICAgIHNldFNhbXBsaW5nVXBkYXRlZD17c2V0U2FtcGxpbmdVcGRhdGVkfVxuICAgICAgICAgICAgICBpc0RhdGVQaWNrZXJEaXNhYmxlZD17aXNQcm9wZXJ0aWVzUGFnZShwYWdlVHlwZSl9XG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQ9e2RhdGVGb3JtYXR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICB7c2FtcGxpbmdQcm9wZXJ0aWVzICYmIHBhZ2VUeXBlICYmIChcbiAgICAgICAgICAgIDxTYW1wbGluZ1Byb3BlcnRpZXNGb3JtXG4gICAgICAgICAgICAgIHNhbXBsaW5nUHJvcGVydGllcz17c2FtcGxpbmdQcm9wZXJ0aWVzfVxuICAgICAgICAgICAgICBzYW1wbGluZz17c2FtcGxpbmdQbGFufVxuICAgICAgICAgICAgICBwYWdlVHlwZT17cGFnZVR5cGUuY3VycmVudH1cbiAgICAgICAgICAgICAgc2V0U2FtcGxpbmdVcGRhdGVkPXtzZXRTYW1wbGluZ1VwZGF0ZWR9XG4gICAgICAgICAgICAgIHNhdmluZ01zZz17c2F2aW5nTXNnfVxuICAgICAgICAgICAgICBoYW5kbGVDbG9zZT17aGFuZGxlQ2xvc2V9XG4gICAgICAgICAgICAgIHNldFBob3Rvc1RvRGVsZXRlPXtzZXRQaG90b3NUb0RlbGV0ZX1cbiAgICAgICAgICAgICAgc2V0UGhvdG9zPXtzZXRQaG90b3N9XG4gICAgICAgICAgICAgIHBob3Rvcz17cGhvdG9zfVxuICAgICAgICAgICAgICBmb3JtaWs9e2Zvcm1pa31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TYW1wbGluZ1Byb3BlcnRpZXNTdHlsZT5cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvZm9ybT5cbiAgKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFHLGtCQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxlQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxXQUFBLEdBQUFOLE9BQUE7QUFFQSxJQUFBTyxPQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxLQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUyxZQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVSxRQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxLQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxPQUFBLEdBQUFaLE9BQUE7QUFDQSxJQUFBYSxtQkFBQSxHQUFBYixPQUFBO0FBT0EsSUFBQWMsdUJBQUEsR0FBQWQsT0FBQTtBQUNBLElBQUFlLHVCQUFBLEdBQUFmLE9BQUE7QUFDQSxJQUFBZ0IsNkJBQUEsR0FBQWhCLE9BQUE7QUFDQSxJQUFBaUIsd0JBQUEsR0FBQWpCLE9BQUE7QUFTQSxJQUFBa0IsaUJBQUEsR0FBQWhCLHNCQUFBLENBQUFGLE9BQUE7QUFBa0QsU0FBQW1CLHlCQUFBQyxXQUFBLGVBQUFDLE9BQUEsa0NBQUFDLGlCQUFBLE9BQUFELE9BQUEsUUFBQUUsZ0JBQUEsT0FBQUYsT0FBQSxZQUFB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