@kando-env/kando-ui 1.2.235 → 1.2.236

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 (592) hide show
  1. package/lib/Router.js +4 -66
  2. package/lib/Widgets/EventsCarousel/EventsCarousel.js +11 -41
  3. package/lib/Widgets/EventsRow/EventsRow.js +14 -41
  4. package/lib/Widgets/Map/GraphUtils.js +1 -4
  5. package/lib/Widgets/Map/Map.js +117 -62
  6. package/lib/Widgets/Map/Map.scss +67 -0
  7. package/lib/Widgets/Map/MapUtils.js +28 -67
  8. package/lib/Widgets/Map/areas/AreaPolygon.js +7 -27
  9. package/lib/Widgets/Map/areas/AreaPolygons.js +10 -23
  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 +24 -18
  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 +26 -69
  18. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +10 -17
  19. package/lib/Widgets/Map/events/PointOfEvent.js +11 -37
  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 +44 -0
  28. package/lib/Widgets/Map/points/PointIcon.scss +230 -0
  29. package/lib/Widgets/Map/points/PointMarker.js +22 -35
  30. package/lib/Widgets/Map/points/PointMarkers.js +62 -26
  31. package/lib/Widgets/Map/points/PointUtils.js +85 -106
  32. package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +15 -49
  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 +22 -18
  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 +2 -15
  77. package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +9 -20
  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 +22 -45
  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/assets/icons/pin/pin-matash-white.svg +8 -42
  87. package/lib/assets/icons/plus_v.svg +13 -0
  88. package/lib/assets/icons/water_reuse.svg +27 -0
  89. package/lib/assets/map/pin-matash-clicked.svg +12 -0
  90. package/lib/assets/map/pin-matash-white.svg +8 -28
  91. package/lib/assets/map/pin-plant-clicked.svg +10 -0
  92. package/lib/assets/map/pin-plant-white.svg +6 -28
  93. package/lib/assets/map/pin-suction-clicked.svg +10 -0
  94. package/lib/assets/map/pin-suction.svg +6 -23
  95. package/lib/assets/map/pin-water-clicked.svg +11 -0
  96. package/lib/assets/map/pin-water.svg +7 -17
  97. package/lib/assets/point_icons/WWTP-icon.svg +8 -21
  98. package/lib/assets/point_icons/factory-icon.svg +6 -21
  99. package/lib/assets/point_icons/pump-station-icon.svg +6 -16
  100. package/lib/components/ApplyButton/ApplyButton.js +5 -11
  101. package/lib/components/ApplyButton/index.js +1 -4
  102. package/lib/components/Backdrop/Backdrop.js +2 -8
  103. package/lib/components/ContentLoader/ContentLoader.js +7 -12
  104. package/lib/components/ContentLoader/index.js +1 -2
  105. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +7 -14
  106. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +2 -8
  107. package/lib/components/CustomInputs/DoubleTabs/styles.js +2 -10
  108. package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +5 -18
  109. package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +1 -5
  110. package/lib/components/CustomInputs/Search/Search.js +13 -38
  111. package/lib/components/CustomInputs/Search/index.js +1 -4
  112. package/lib/components/CustomInputs/Select/Select.js +33 -33
  113. package/lib/components/CustomInputs/Select/Select.stories.js +2 -8
  114. package/lib/components/DamageType/DamageType.js +37 -76
  115. package/lib/components/DamageType/index.js +1 -4
  116. package/lib/components/DataLoaderError/DataLoaderError.js +4 -10
  117. package/lib/components/DischargeHeatmap/DischargeHeatmap.js +6 -16
  118. package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +17 -37
  119. package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +12 -37
  120. package/lib/components/DischargeHeatmap/HighchartsOptions.js +6 -10
  121. package/lib/components/DischargeHeatmap/index.js +1 -4
  122. package/lib/components/DischargeHeatmap/mocks/handlers.js +3 -4
  123. package/lib/components/DischargeHeatmap/popupText.js +1 -16
  124. package/lib/components/DischargeHeatmap/titles.js +1 -8
  125. package/lib/components/DischargeHeatmap/types.js +1 -1
  126. package/lib/components/ErrorBoundary.js +3 -15
  127. package/lib/components/Events/Events.js +5 -30
  128. package/lib/components/Events/index.js +1 -4
  129. package/lib/components/Graph/Graph.js +31 -74
  130. package/lib/components/Graph/index.js +1 -4
  131. package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +1 -7
  132. package/lib/components/Header/Breadcrumbs/index.js +1 -4
  133. package/lib/components/Header/DoubleTabs/DoubleTabs.js +14 -30
  134. package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +2 -8
  135. package/lib/components/Header/DoubleTabs/styles.js +2 -10
  136. package/lib/components/Header/Header.js +1 -7
  137. package/lib/components/Header/Header.stories.js +2 -8
  138. package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +1 -11
  139. package/lib/components/Header/InfoBar/InfoBar.js +10 -30
  140. package/lib/components/Header/InfoBar/Search/Control.js +2 -13
  141. package/lib/components/Header/InfoBar/Search/GroupLabel.js +1 -12
  142. package/lib/components/Header/InfoBar/Search/Search.js +5 -26
  143. package/lib/components/Header/InfoBar/Search/SearchContainer.js +4 -21
  144. package/lib/components/Header/InfoBar/Search/index.js +1 -4
  145. package/lib/components/Header/InfoBar/Search/searchStyle.js +1 -4
  146. package/lib/components/Header/KandoNavbar/KandoNavbar.js +46 -91
  147. package/lib/components/Header/KandoNavbar/index.js +1 -4
  148. package/lib/components/Header/Slideshow/Slideshow.js +31 -67
  149. package/lib/components/Header/Slideshow/index.js +1 -4
  150. package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +1 -7
  151. package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +2 -15
  152. package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +1 -15
  153. package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +7 -24
  154. package/lib/components/Header/Toolbar/Toolbar.js +46 -84
  155. package/lib/components/InfoBar/InfoBar.js +8 -23
  156. package/lib/components/InfoBar/InfoBar.stories.js +2 -8
  157. package/lib/components/KandoModal/KandoModal.js +19 -42
  158. package/lib/components/KandoModal/index.js +1 -4
  159. package/lib/components/Link.js +2 -11
  160. package/lib/components/Links/CustomRedirect/CustomRedirect.js +3 -12
  161. package/lib/components/Links/StyledLink/StyledLink.js +6 -16
  162. package/lib/components/Links/StyledNavLink/StyledNavLink.js +4 -14
  163. package/lib/components/LiveEvents/CarouselSlide.js +5 -11
  164. package/lib/components/LiveEvents/LiveEvents.js +1 -10
  165. package/lib/components/LiveEvents/index.js +1 -4
  166. package/lib/components/LoaderByPercent/LoaderByPercent.js +13 -23
  167. package/lib/components/Map/Map.js +12 -26
  168. package/lib/components/Map/index.js +1 -4
  169. package/lib/components/Modal/Modal.js +3 -10
  170. package/lib/components/NarrowHeader.js +1 -12
  171. package/lib/components/PointInfo/PointInfo.js +10 -22
  172. package/lib/components/PointInfo/index.js +1 -4
  173. package/lib/components/PopupModal/PopupModal.js +6 -17
  174. package/lib/components/PopupModal/PopupModal.stories.js +2 -11
  175. package/lib/components/Sector/Sector.js +4 -13
  176. package/lib/components/Sector/Sector.test.js +3 -8
  177. package/lib/components/Sector/index.js +1 -4
  178. package/lib/components/Sector/sectorIcons.js +1 -27
  179. package/lib/components/SevereEvent/Eta/Eta.js +20 -40
  180. package/lib/components/SevereEvent/Eta/styles.js +1 -5
  181. package/lib/components/SevereEvent/SevereEvent.js +15 -36
  182. package/lib/components/Spinner/Spinner.js +5 -10
  183. package/lib/components/Spinner/Spinner.stories.js +2 -8
  184. package/lib/components/Spinner/index.js +1 -4
  185. package/lib/components/Spinner/styles.js +1 -9
  186. package/lib/components/Tabs/Tabs.js +4 -24
  187. package/lib/components/Tabs/Tabs.stories.js +2 -8
  188. package/lib/components/Tabs/assets/index.js +1 -6
  189. package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +2 -12
  190. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +12 -43
  191. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +12 -36
  192. package/lib/components/TimeRangeSelector/KandoRangePicker/index.js +1 -4
  193. package/lib/components/TimeRangeSelector/TimeRangeHelper.js +9 -29
  194. package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +4 -9
  195. package/lib/components/TimeRangeSelector/TimeRangeItem/index.js +1 -4
  196. package/lib/components/TimeRangeSelector/TimeRangeList.js +4 -13
  197. package/lib/components/TimeRangeSelector/TimeRangeOptions.js +11 -24
  198. package/lib/components/TimeRangeSelector/TimeRangeSelector.js +11 -36
  199. package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +2 -10
  200. package/lib/components/TimeRangeSelector/constants.js +2 -2
  201. package/lib/components/TimeRangeSelector/index.js +1 -4
  202. package/lib/components/Toggle/Toggle.js +7 -21
  203. package/lib/components/Toggle/index.js +1 -4
  204. package/lib/components/TrendGraph/TrendGraph.js +16 -49
  205. package/lib/components/TrendGraph/index.js +1 -4
  206. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +13 -37
  207. package/lib/components/TrendGraphNVL/index.js +1 -4
  208. package/lib/development-environment/index.js +1 -13
  209. package/lib/development-environment/mock/browser.js +1 -8
  210. package/lib/development-environment/mock/get.js +1 -5
  211. package/lib/development-environment/mock/handlers.js +1 -26
  212. package/lib/development-environment/mock/mockBus.js +2 -7
  213. package/lib/development-environment/mock/mockObjects/area-trends-graph.js +1 -1
  214. package/lib/development-environment/mock/mockObjects/areaInformation.js +1 -1
  215. package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +1 -1
  216. package/lib/development-environment/mock/mockObjects/areaSitesData.js +1 -1
  217. package/lib/development-environment/mock/mockObjects/areasJson.js +1 -1
  218. package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +1 -1
  219. package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +1 -1
  220. package/lib/development-environment/mock/mockObjects/data-menuData.js +1 -1
  221. package/lib/development-environment/mock/mockObjects/data-search.js +1 -1
  222. package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +1 -1
  223. package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +1 -1
  224. package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +1 -1
  225. package/lib/development-environment/mock/mockObjects/eventsJson.js +1 -1
  226. package/lib/development-environment/mock/mockObjects/metascore.js +1 -1
  227. package/lib/development-environment/mock/mockObjects/permissionsJson.js +1 -1
  228. package/lib/development-environment/mock/mockObjects/pointsJson.js +1 -1
  229. package/lib/development-environment/mock/mockObjects/site-info.js +1 -1
  230. package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +1 -1
  231. package/lib/development-environment/togly/ToglyDashboard.js +4 -22
  232. package/lib/development-environment/togly/ToglyItem.js +5 -25
  233. package/lib/development-environment/togly/flags.js +1 -1
  234. package/lib/development-environment/togly/init.js +1 -6
  235. package/lib/development-environment/togly/macro.js +7 -9
  236. package/lib/development-environment/togly/useDoubleKeyDown.js +1 -8
  237. package/lib/development-environment/togly/useLocalStorage.js +12 -19
  238. package/lib/hooks/useApi.js +10 -29
  239. package/lib/hooks/useApiWithDashboardQuery.js +10 -30
  240. package/lib/hooks/useClickOutside.js +1 -5
  241. package/lib/hooks/useInitializeHeaders.js +1 -7
  242. package/lib/hooks/useKandoFetch.js +13 -27
  243. package/lib/hooks/useMap.js +11 -52
  244. package/lib/hooks/useNavContext.js +13 -22
  245. package/lib/hooks/useQueryURL.js +1 -4
  246. package/lib/hooks/useRemoveExistingLayers.js +2 -7
  247. package/lib/hooks/useUpdateEventBodyTail.js +1 -10
  248. package/lib/hooks/useUserTimeZone.js +1 -9
  249. package/lib/hooks/useUserTimeZone.test.js +1 -9
  250. package/lib/hooks/useWindowSize.js +14 -19
  251. package/lib/i18n/en.json +39 -11
  252. package/lib/i18n/en_uk.json +26 -3
  253. package/lib/i18n/fr.json +25 -2
  254. package/lib/i18n/he.json +32 -2
  255. package/lib/i18n/it.json +25 -2
  256. package/lib/index.js +21 -29
  257. package/lib/macros/getVersion.js +2 -3
  258. package/lib/models/IAction.js +1 -1
  259. package/lib/models/IAppState.js +1 -1
  260. package/lib/pages/AreaPage/AreaPage.js +5 -34
  261. package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +6 -17
  262. package/lib/pages/AreaPage/Dashboard/Dashboard.js +2 -23
  263. package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +11 -35
  264. package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +6 -8
  265. package/lib/pages/AreaPage/Dashboard/Sites/Sites.js +46 -65
  266. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +1 -10
  267. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +3 -15
  268. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +3 -7
  269. package/lib/pages/AreaPage/Dashboard/Sites/SitesResponse.interface.js +1 -1
  270. package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +1 -1
  271. package/lib/pages/AreaPage/Dashboard/Sites/styles.js +2 -10
  272. package/lib/pages/AssessmentPage/AssessmentPage.js +5 -30
  273. package/lib/pages/CannyWidget/Feedback.js +10 -25
  274. package/lib/pages/CovidPage/CovidPage.js +1 -14
  275. package/lib/pages/CovidPage/components/Body.js +9 -33
  276. package/lib/pages/CovidPage/components/Map.js +20 -38
  277. package/lib/pages/CovidPage/components/Sidebar.js +4 -18
  278. package/lib/pages/CovidPage/components/Summary.js +8 -29
  279. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +13 -37
  280. package/lib/pages/CovidPage/components/TrendGraphNVL/index.js +1 -4
  281. package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +13 -41
  282. package/lib/pages/CovidPage/components/TrendPopupContent/index.js +1 -4
  283. package/lib/pages/CovidPage/components/areas/Area.js +6 -33
  284. package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +4 -45
  285. package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +5 -18
  286. package/lib/pages/CovidPage/components/areas/AreasList.js +14 -33
  287. package/lib/pages/CovidPage/components/areas/Sort.js +5 -19
  288. package/lib/pages/CovidPage/components/nvlStatusHelper.js +2 -11
  289. package/lib/pages/EventsPage/Body/Body.js +2 -19
  290. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +11 -28
  291. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +11 -31
  292. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +4 -11
  293. package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +3 -11
  294. package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +5 -10
  295. package/lib/pages/EventsPage/DragAndDropArea/index.js +1 -4
  296. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +26 -36
  297. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +5 -24
  298. package/lib/pages/EventsPage/EventsPage.js +1 -13
  299. package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +9 -32
  300. package/lib/pages/EventsPage/events/MoreInfo.js +1 -19
  301. package/lib/pages/EventsPage/events/Sidebar.js +5 -18
  302. package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +5 -29
  303. package/lib/pages/EventsPage/events/event_info/EventDetails.js +8 -32
  304. package/lib/pages/EventsPage/events/event_info/EventInfo.js +14 -42
  305. package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +2 -14
  306. package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +10 -40
  307. package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +1 -12
  308. package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +8 -30
  309. package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +1 -8
  310. package/lib/pages/EventsPage/events/event_info/MockHistoryInformation/LineChartYear/LineChartYear.js +7 -27
  311. package/lib/pages/EventsPage/events/event_info/MockHistoryInformation/MockHistoryInformation.js +2 -10
  312. package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +5 -21
  313. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsLineChart.js +4 -23
  314. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +4 -22
  315. package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +6 -33
  316. package/lib/pages/EventsPage/events/event_info/samplings/Sampling.js +3 -15
  317. package/lib/pages/EventsPage/events/event_info/samplings/Samplings.js +2 -10
  318. package/lib/pages/EventsPage/events/event_info/sources/Source.js +8 -31
  319. package/lib/pages/EventsPage/events/event_info/sources/Sources.js +4 -20
  320. package/lib/pages/EventsPage/events/events_list/EventItem.js +3 -24
  321. package/lib/pages/EventsPage/events/events_list/EventUtils.js +2 -13
  322. package/lib/pages/EventsPage/events/events_list/EventsList.js +54 -111
  323. package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +11 -32
  324. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +35 -96
  325. package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +10 -55
  326. package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +5 -17
  327. package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +15 -38
  328. package/lib/pages/EventsPage/events/events_list/Sort.js +4 -23
  329. package/lib/pages/ImportFileWizard/FileUploadRespones.js +4 -19
  330. package/lib/pages/ImportFileWizard/ImportButtomButtons.js +2 -8
  331. package/lib/pages/ImportFileWizard/ImportFile.js +10 -29
  332. package/lib/pages/ImportFileWizard/ResponseBody.js +3 -12
  333. package/lib/pages/ImportFileWizard/ValidationForm.js +7 -27
  334. package/lib/pages/ImportFileWizard/ValidationResponse.js +6 -30
  335. package/lib/pages/ImportFileWizard/importFileUtils.js +1 -2
  336. package/lib/pages/ImportFileWizard/index.js +1 -4
  337. package/lib/pages/ImportGisPage/ImportGisContainer.js +7 -27
  338. package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +10 -27
  339. package/lib/pages/ImportGisPage/importGisUtils.js +1 -13
  340. package/lib/pages/ImportGisProcess/index.js +4 -18
  341. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +5 -19
  342. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +3 -10
  343. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +1 -8
  344. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +25 -58
  345. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +2 -8
  346. package/lib/pages/NotificationsPage/Notification/Notification.js +8 -16
  347. package/lib/pages/NotificationsPage/Notifications.interface.js +1 -1
  348. package/lib/pages/NotificationsPage/Notifications.mock.js +1 -1
  349. package/lib/pages/NotificationsPage/Notifications.stories.js +2 -10
  350. package/lib/pages/NotificationsPage/NotificationsPage.js +11 -35
  351. package/lib/pages/NotificationsPage/assets/index.js +15 -24
  352. package/lib/pages/NotificationsPageV2/NotificationsPage.js +35 -83
  353. package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +4 -24
  354. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +27 -46
  355. package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +18 -49
  356. package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +4 -47
  357. package/lib/pages/NotificationsPageV2/notificationUtils.js +2 -30
  358. package/lib/pages/OldSitePage/IDashboardData.js +1 -1
  359. package/lib/pages/OldSitePage/OldSitePage.js +16 -77
  360. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +3 -16
  361. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +2 -8
  362. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +4 -9
  363. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +5 -12
  364. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +2 -12
  365. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +7 -23
  366. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +6 -20
  367. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +4 -10
  368. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +2 -12
  369. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +9 -24
  370. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +4 -12
  371. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +28 -59
  372. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +2 -2
  373. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +12 -10
  374. package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +3 -18
  375. package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +2 -15
  376. package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +8 -16
  377. package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +1 -16
  378. package/lib/pages/OldSitePage/SamplingParameters/models.js +1 -1
  379. package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +2 -10
  380. package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +2 -7
  381. package/lib/pages/ProfilePage/Container.js +2 -6
  382. package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +16 -43
  383. package/lib/pages/ProfilePage/ProfilePage.js +172 -115
  384. package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +9 -32
  385. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +7 -17
  386. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +3 -14
  387. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +18 -48
  388. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +4 -21
  389. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +7 -15
  390. package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +8 -29
  391. package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +6 -25
  392. package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +9 -21
  393. package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +1 -13
  394. package/lib/pages/SamplingsPage/DesktopActions/index.js +1 -4
  395. package/lib/pages/SamplingsPage/NavigationDropdown.js +3 -21
  396. package/lib/pages/SamplingsPage/NewSamplingAction.js +38 -84
  397. package/lib/pages/SamplingsPage/SamplingMobileModal.js +12 -65
  398. package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +5 -19
  399. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +2 -13
  400. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +22 -56
  401. package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +4 -20
  402. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +1 -14
  403. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +40 -112
  404. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +11 -42
  405. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +14 -47
  406. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +15 -49
  407. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +5 -21
  408. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +2 -8
  409. package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +1 -11
  410. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +7 -36
  411. package/lib/pages/SamplingsPage/SamplingsMobileList.js +10 -34
  412. package/lib/pages/SamplingsPage/SamplingsPage.js +14 -39
  413. package/lib/pages/SamplingsPage/SamplingsPageContainer.js +14 -48
  414. package/lib/pages/SamplingsPage/index.js +1 -3
  415. package/lib/pages/SamplingsPage/samplingsPageUtils.js +7 -30
  416. package/lib/pages/SitePage/DischargePattern/DischargePattern.js +2 -10
  417. package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +2 -8
  418. package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +3 -17
  419. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +6 -11
  420. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +15 -23
  421. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +7 -16
  422. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +18 -27
  423. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +2 -12
  424. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +9 -26
  425. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +6 -20
  426. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +4 -10
  427. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +2 -12
  428. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +9 -24
  429. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +4 -12
  430. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +32 -68
  431. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +2 -2
  432. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +12 -10
  433. package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +4 -19
  434. package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +2 -15
  435. package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +17 -38
  436. package/lib/pages/SitePage/SamplingParameters/dataParser.js +13 -29
  437. package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +3 -7
  438. package/lib/pages/SitePage/SamplingParameters/models.js +1 -1
  439. package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +2 -10
  440. package/lib/pages/SitePage/SamplingParameters/styles/styles.js +2 -8
  441. package/lib/pages/SitePage/SiteInformation/ContributorItem.js +5 -12
  442. package/lib/pages/SitePage/SiteInformation/EmptyState.js +1 -10
  443. package/lib/pages/SitePage/SiteInformation/PollutionContributor.js +5 -15
  444. package/lib/pages/SitePage/SiteInformation/SiteInformation.js +17 -48
  445. package/lib/pages/SitePage/SiteInformation/style.js +2 -8
  446. package/lib/pages/SitePage/SitePage.js +10 -49
  447. package/lib/pages/UploadLabResult/index.js +1 -8
  448. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +9 -37
  449. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +2 -9
  450. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +2 -16
  451. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +2 -8
  452. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +9 -35
  453. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +1 -5
  454. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +1 -7
  455. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +1 -10
  456. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +7 -16
  457. package/lib/pages/UtilityDashboardPage/MostSevereEvents/models.js +1 -1
  458. package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +1 -10
  459. package/lib/pages/UtilityDashboardPage/TopBar/styles.js +1 -5
  460. package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +3 -25
  461. package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +13 -19
  462. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +9 -18
  463. package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +5 -20
  464. package/lib/pages/WbeDashboard/ExpandableComponent.js +6 -14
  465. package/lib/pages/WbeDashboard/GraphWrapper.js +8 -28
  466. package/lib/pages/WbeDashboard/IndividualTinyGraph.js +6 -19
  467. package/lib/pages/WbeDashboard/SearchInput.js +4 -22
  468. package/lib/pages/WbeDashboard/SummaryGraph.js +56 -76
  469. package/lib/pages/WbeDashboard/SummaryGraphModal.js +1 -13
  470. package/lib/pages/WbeDashboard/Tabs.js +4 -9
  471. package/lib/pages/WbeDashboard/WbeDashboardPage.js +60 -154
  472. package/lib/pages/WbeDashboard/WbeSummaryBar.js +19 -49
  473. package/lib/providers/Slideshow/SlideshowContext.js +3 -5
  474. package/lib/providers/Slideshow/SlideshowProvider.js +16 -31
  475. package/lib/providers/Slideshow/SlideshowRunner.js +7 -17
  476. package/lib/providers/UrlHistory/UrlHistoryContext.js +3 -7
  477. package/lib/providers/UrlHistory/UrlHistoryProvider.js +1 -13
  478. package/lib/providers/UrlHistory/index.js +5 -8
  479. package/lib/providers/UrlHistory/useLastVisited.js +1 -7
  480. package/lib/react-app-env.d.js +1 -1
  481. package/lib/store/ImportGis/action.js +1 -1
  482. package/lib/store/ImportGis/actionTypes.js +1 -2
  483. package/lib/store/ImportGis/actionsCreator.js +7 -17
  484. package/lib/store/ImportGis/models/gisImports.js +1 -1
  485. package/lib/store/ImportGis/reducer.js +1 -17
  486. package/lib/store/WBE/actionTypes.js +1 -1
  487. package/lib/store/WBE/actions.js +1 -3
  488. package/lib/store/WBE/models/IAreaWBE.js +1 -1
  489. package/lib/store/WBE/models/IWBE.js +1 -1
  490. package/lib/store/WBE/models/IWBEState.js +1 -1
  491. package/lib/store/WBE/reducer.js +2 -9
  492. package/lib/store/areas/actionTypes.js +2 -2
  493. package/lib/store/areas/actions.js +2 -11
  494. package/lib/store/areas/models/IArea.js +1 -1
  495. package/lib/store/areas/models/IAreasState.js +1 -1
  496. package/lib/store/areas/reducer.js +1 -9
  497. package/lib/store/context/actionTypes.js +2 -2
  498. package/lib/store/context/actions.js +2 -6
  499. package/lib/store/context/contextMiddlewares.js +1 -9
  500. package/lib/store/context/models/INavContext.js +1 -1
  501. package/lib/store/context/models/INavContextState.js +1 -1
  502. package/lib/store/context/reducer.js +2 -9
  503. package/lib/store/dashboard/dashboardSlice.js +1 -3
  504. package/lib/store/dashboard/periodType.js +1 -1
  505. package/lib/store/edges/actionTypes.js +2 -2
  506. package/lib/store/edges/actions.js +3 -9
  507. package/lib/store/edges/models/IEdge.js +1 -1
  508. package/lib/store/edges/models/IEdgesState.js +1 -1
  509. package/lib/store/edges/reducer.js +2 -16
  510. package/lib/store/events/actionTypes.js +2 -2
  511. package/lib/store/events/actions.js +12 -30
  512. package/lib/store/events/models/IEvent.js +1 -1
  513. package/lib/store/events/models/IEventsState.js +1 -1
  514. package/lib/store/events/models/ISource.js +1 -1
  515. package/lib/store/events/reducer.js +3 -41
  516. package/lib/store/filters/IFilter.js +1 -1
  517. package/lib/store/filters/IFilterItem.js +1 -1
  518. package/lib/store/global/actionTypes.js +2 -2
  519. package/lib/store/global/actions.js +8 -20
  520. package/lib/store/global/models/IGlobalState.js +1 -1
  521. package/lib/store/global/reducer.js +2 -18
  522. package/lib/store/permissions/permissionsSlice.js +3 -6
  523. package/lib/store/points/actionTypes.js +2 -2
  524. package/lib/store/points/actions.js +1 -5
  525. package/lib/store/points/models/IGroup.js +1 -1
  526. package/lib/store/points/models/IPoint.js +1 -1
  527. package/lib/store/points/models/IPointsState.js +1 -1
  528. package/lib/store/points/reducer.js +1 -7
  529. package/lib/store/rootActionTypes.js +1 -1
  530. package/lib/store/rootActions.js +1 -3
  531. package/lib/store/rootReducer.js +4 -23
  532. package/lib/store/rootStore.js +4 -12
  533. package/lib/store/samplings/action.js +1 -1
  534. package/lib/store/samplings/actionTypes.js +1 -2
  535. package/lib/store/samplings/actionsCreator.js +2 -5
  536. package/lib/store/samplings/models/Samplings.js +1 -1
  537. package/lib/store/samplings/reducer.js +1 -9
  538. package/lib/styles/StylesLayout.js +1 -7
  539. package/lib/styles/theme/theme.js +2 -4
  540. package/lib/test/mocks/browser.js +3 -7
  541. package/lib/test/test-utils.js +11 -21
  542. package/lib/ui-kit/Button/Button.js +15 -23
  543. package/lib/ui-kit/Button/Button.test.js +6 -26
  544. package/lib/ui-kit/Button/ButtonUtils.js +1 -1
  545. package/lib/ui-kit/Checkbox/Checkbox.js +7 -21
  546. package/lib/ui-kit/DropDown/DropDown.js +5 -16
  547. package/lib/ui-kit/DropDown/DropDown.test.js +6 -12
  548. package/lib/ui-kit/DropDown/DropDownItem.js +5 -13
  549. package/lib/ui-kit/DropDown/DropdownToggle.js +2 -13
  550. package/lib/ui-kit/IconAction/IconAction.js +3 -9
  551. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +16 -54
  552. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +24 -28
  553. package/lib/ui-kit/KandoList/KandoList.js +5 -16
  554. package/lib/ui-kit/KandoList/kandoListUtils.js +1 -1
  555. package/lib/ui-kit/KandoTable/KandoTable.js +23 -35
  556. package/lib/ui-kit/KandoTable/KandoTable.test.js +1 -16
  557. package/lib/ui-kit/KandoTable/kandoTableUtils.js +1 -1
  558. package/lib/ui-kit/Layout/Layout.js +1 -8
  559. package/lib/ui-kit/MobileInput/MobileInput.js +18 -33
  560. package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +8 -14
  561. package/lib/ui-kit/ModalConfirmation/index.js +1 -3
  562. package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +5 -10
  563. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +3 -11
  564. package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +4 -11
  565. package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +5 -14
  566. package/lib/ui-kit/Tooltip/Tooltip.js +3 -8
  567. package/lib/ui-kit/index.js +1 -15
  568. package/lib/ui-kit/kandoStepper/KandoStepper.js +2 -7
  569. package/lib/utilities/ActionUtility.js +1 -2
  570. package/lib/utilities/Alert.js +2 -10
  571. package/lib/utilities/Analytics.js +2 -12
  572. package/lib/utilities/Array.js +2 -6
  573. package/lib/utilities/Enum.js +12 -16
  574. package/lib/utilities/ErrorBoundary.js +3 -18
  575. package/lib/utilities/File.js +5 -24
  576. package/lib/utilities/GetDir.js +4 -8
  577. package/lib/utilities/KandoDate.js +1 -7
  578. package/lib/utilities/KandoModal.js +7 -22
  579. package/lib/utilities/LocalStorage.js +2 -13
  580. package/lib/utilities/ThousandsToK.js +1 -3
  581. package/lib/utilities/TimeFormat.js +6 -19
  582. package/lib/utilities/Truncate.js +7 -27
  583. package/lib/utilities/edgesMath.js +9 -26
  584. package/lib/utilities/i18n.js +1 -14
  585. package/lib/utilities/kql.js +3 -10
  586. package/lib/utilities/map/icons.js +19 -20
  587. package/lib/utilities/polylinedecorator.js +383 -0
  588. package/lib/utilities/scoreToColor.js +1 -8
  589. package/lib/utilities/time.js +2 -9
  590. package/lib/utilities/uploadToS3.js +1 -9
  591. package/lib/utilities/urls.js +6 -14
  592. package/package.json +9 -4
@@ -1,93 +1,72 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
- exports.popupContent = exports.createSamplingIcons = exports.createObservationIconPoint = exports.createSamplingIconPoint = exports.markerBelongsToSource = exports.markerBelongsToSelectedSource = exports.belongsToSourceBackground = exports.selectedBackground = exports.combinedWWTPIcon = exports.combinedCollectorsIcon = exports.combinedPumpStationIcon = exports.combinedFactoryIcon = exports.standardBackground = exports.matchIconToPoint = exports.createManholePoint = exports.createBubblePoint = exports.isCollectorFocused = void 0;
9
-
7
+ exports.standardBackground = exports.selectedBackground = exports.removeLayerGroup = exports.popupContent = exports.matchIconToPoint = exports.markerBelongsToSource = exports.markerBelongsToSelectedSource = exports.isCollectorFocused = exports.handleMarkerClick = exports.createSamplingIcons = exports.createSamplingIconPoint = exports.createObservationIconPoint = exports.createManholePoint = exports.createBubblePoint = exports.combinedWWTPIcon = exports.combinedPumpStationIcon = exports.combinedFactoryIcon = exports.combinedCollectorsIcon = exports.bindPopupToMarker = exports.belongsToSourceBackground = exports.addLayerGroup = void 0;
10
8
  var _lineChart = _interopRequireDefault(require("../../../assets/line-chart.svg"));
11
-
12
9
  var _leaflet = _interopRequireDefault(require("leaflet"));
13
-
14
10
  var _i18n = _interopRequireDefault(require("../../../utilities/i18n"));
15
-
16
11
  var _blueCircle = _interopRequireDefault(require("../../../assets/point_icons/blue-circle.svg"));
17
-
18
12
  var _samplingIcon = _interopRequireDefault(require("../../../assets/point_icons/sampling-icon.svg"));
19
-
20
13
  var _pinkCircle = _interopRequireDefault(require("../../../assets/point_icons/pink-circle.svg"));
21
-
22
14
  var _observationIcon = _interopRequireDefault(require("../../../assets/point_icons/observation-icon.svg"));
23
-
24
15
  var _redPinRedShadow = _interopRequireDefault(require("../../../assets/point_icons/red-pin-red-shadow.png"));
25
-
26
16
  var _whitePinRedShadow = _interopRequireDefault(require("../../../assets/point_icons/white-pin-red-shadow.png"));
27
-
28
17
  var _whitePinBlackShadow = _interopRequireDefault(require("../../../assets/point_icons/white-pin-black-shadow.png"));
29
-
30
18
  var _yellowCircle = _interopRequireDefault(require("../../../assets/point_icons/yellow-circle.svg"));
31
-
32
19
  var _factoryIcon = _interopRequireDefault(require("../../../assets/point_icons/factory-icon.svg"));
33
-
34
20
  var _greenCircle = _interopRequireDefault(require("../../../assets/point_icons/green-circle.svg"));
35
-
36
21
  var _pumpStationIcon = _interopRequireDefault(require("../../../assets/point_icons/pump-station-icon.svg"));
37
-
38
22
  var _pinWater = _interopRequireDefault(require("../../../assets/map/pin-water.svg"));
39
-
40
23
  var _brightBlueCircle = _interopRequireDefault(require("../../../assets/point_icons/bright-blue-circle.svg"));
41
-
42
24
  var _WWTPIcon = _interopRequireDefault(require("../../../assets/point_icons/WWTP-icon.svg"));
43
-
44
25
  var _waterNoBackground = _interopRequireDefault(require("../../../assets/point_icons/water-no-background.svg"));
45
-
46
26
  var _whitePoint = _interopRequireDefault(require("../../../assets/white-point.png"));
47
-
48
27
  var _MapUtils = require("../MapUtils");
49
-
28
+ var _PointIcon = require("./PointIcon");
29
+ var _water_reuse = _interopRequireDefault(require("../../../assets/icons/water_reuse.svg"));
50
30
  var isCollectorFocused = function isCollectorFocused(point, event) {
51
31
  var _event$observations;
52
-
53
32
  return (event === null || event === void 0 ? void 0 : (_event$observations = event.observations) === null || _event$observations === void 0 ? void 0 : _event$observations.length) === 1 && point.id === event.observations[0].point_id;
54
33
  };
55
-
56
34
  exports.isCollectorFocused = isCollectorFocused;
57
-
58
35
  var buildManholeTootipString = function buildManholeTootipString(point) {
59
36
  var string = "".concat(point.group.name, " ");
60
-
61
37
  if (point.group.type === 'Groups::Factory') {
62
- string += "(".concat(point.group.sector_name, ")");
38
+ string += "<br/>Sector-TBD: ".concat(point.group.sector_name);
39
+ string += "<br/>Water Consumption-TBD: ".concat(point.group.water_consumption_per_day);
63
40
  } else {
64
41
  string = "".concat(point.name);
65
42
  }
66
-
67
43
  return string;
68
- }; // iconSize: [width, height],
69
- // IconAnchor: [(-right)(+left), (-down)(+up)]
70
-
71
-
72
- var createBubblePoint = function createBubblePoint(markerLocation, point, map, hovered) {
73
- // @ts-ignore
74
- matchIconToPoint(point) !== null && // @ts-ignore
75
- matchIconToPoint(point).forEach(function (icon, index) {
76
- var pointCustomIcon = _leaflet.default.marker(markerLocation, {
77
- icon: icon,
78
- riseOnHover: false
79
- }).addTo(map);
44
+ };
80
45
 
81
- pointCustomIcon.bindTooltip(buildManholeTootipString(point));
82
- pointCustomIcon['kando_few_layer_icon'] = matchIconToPoint(point).length > 1;
83
- pointCustomIcon['kando_index_object'] = index;
84
- pointCustomIcon['kando_object_id'] = point.id;
85
- pointCustomIcon['kando_object'] = 'Point';
86
- if (hovered) pointCustomIcon['kando_object'] = 'PointHovered';
46
+ // @ts-ignore
47
+ // iconSize: [width, height],
48
+ // IconAnchor: [(-right)(+left), (-down)(+up)]
49
+ var createBubblePoint = function createBubblePoint(markerLocation, point, map, hovered, layerGroup) {
50
+ var subtitle = point.group.type === 'Groups::Factory' ? point.group.sector_name : '';
51
+ var pointCustomIcon = _leaflet.default.marker(markerLocation, {
52
+ icon: (0, _PointIcon.getPointIconByType)(point.group.type, point.name, subtitle, false, false),
53
+ riseOnHover: false
87
54
  });
55
+ // @ts-ignore
56
+ // pointCustomIcon.bindTooltip(buildManholeTootipString(point));
57
+ pointCustomIcon['kando_object_id'] = point.id;
58
+ pointCustomIcon['kando_object'] = 'Point';
59
+ if (hovered) pointCustomIcon['kando_object'] = 'PointHovered';
60
+ layerGroup.addLayer(pointCustomIcon);
61
+ if (point.group.type === 'Groups::Factory') {
62
+ bindPopupToMarker(point, pointCustomIcon);
88
63
 
64
+ //The following is being called for every point, we should do that on the layerGroup level which will happen once
65
+ //It is noticed when there are thousands of points
66
+ handleMarkerClick(map, point, pointCustomIcon);
67
+ }
89
68
  if (point.relatedEventsAmount) {
90
- var pointCustomIcon = _leaflet.default.marker(markerLocation, {
69
+ var _pointCustomIcon = _leaflet.default.marker(markerLocation, {
91
70
  icon: _leaflet.default.divIcon({
92
71
  className: "\n ".concat(point.relatedEventsAmount >= 100 ? 'circle-events-amount circle-events-amount--tridigit' : 'circle-events-amount', " \n ").concat(point.relatedEventsAmount > 2 ? 'alert-color' : '', "\n "),
93
72
  html: "<p>".concat(point.relatedEventsAmount, "</p>"),
@@ -95,37 +74,31 @@ var createBubblePoint = function createBubblePoint(markerLocation, point, map, h
95
74
  }),
96
75
  riseOnHover: false,
97
76
  opacity: hovered ? 1 : 0
98
- }).addTo(map);
99
-
100
- pointCustomIcon['kando_object_id'] = point.id;
101
- pointCustomIcon['kando_object'] = 'IconNumber';
102
- if (hovered) pointCustomIcon['kando_object'] = 'IconNumberHovered';
77
+ });
78
+ _pointCustomIcon['kando_object_id'] = point.id;
79
+ _pointCustomIcon['kando_object'] = 'IconNumber';
80
+ if (hovered) _pointCustomIcon['kando_object'] = 'IconNumberHovered';
103
81
  }
104
82
  };
105
-
106
83
  exports.createBubblePoint = createBubblePoint;
107
-
108
- var createManholePoint = function createManholePoint(markerLocation, point, map, hovered) {
109
- var pointIcon = _leaflet.default.icon({
84
+ var createManholePoint = function createManholePoint(markerLocation, point, map, hovered, layerGroup) {
85
+ var pointIcon = new _leaflet.default.Icon({
110
86
  iconUrl: _whitePoint.default,
111
87
  iconSize: [9, 9],
112
88
  iconAnchor: [4.5, 4.5]
113
89
  });
114
-
115
- var manholeIcon = _leaflet.default.marker(markerLocation, {
90
+ var manholeIcon = new _leaflet.default.Marker(markerLocation, {
116
91
  icon: pointIcon,
117
92
  riseOnHover: true
118
- }).addTo(map);
119
-
93
+ });
120
94
  manholeIcon.bindTooltip(buildManholeTootipString(point));
121
95
  manholeIcon['kando_object_id'] = point.id;
122
96
  manholeIcon['kando_object'] = 'Point';
123
97
  manholeIcon['kando_point_type'] = 'Manhole';
124
98
  if (hovered) manholeIcon['kando_object'] = 'PointHovered';
99
+ layerGroup.addLayer(manholeIcon);
125
100
  };
126
-
127
101
  exports.createManholePoint = createManholePoint;
128
-
129
102
  var matchIconToPoint = function matchIconToPoint(point, event) {
130
103
  switch (point.group.type) {
131
104
  case 'Groups::Factory':
@@ -138,9 +111,7 @@ var matchIconToPoint = function matchIconToPoint(point, event) {
138
111
  combinedFactoryIcon.unshift(standardBackground());
139
112
  }
140
113
  }
141
-
142
114
  return combinedFactoryIcon;
143
-
144
115
  case 'Groups::PumpStation':
145
116
  if (combinedPumpStationIcon.length === 2) {
146
117
  if (markerBelongsToSelectedSource(event, point)) {
@@ -151,9 +122,7 @@ var matchIconToPoint = function matchIconToPoint(point, event) {
151
122
  combinedPumpStationIcon.unshift(standardBackground());
152
123
  }
153
124
  }
154
-
155
125
  return combinedPumpStationIcon;
156
-
157
126
  case 'Groups::WastewaterTreatmentPlant':
158
127
  if (combinedWWTPIcon.length === 2) {
159
128
  if (markerBelongsToSelectedSource(event, point)) {
@@ -164,9 +133,7 @@ var matchIconToPoint = function matchIconToPoint(point, event) {
164
133
  combinedWWTPIcon.unshift(standardBackground());
165
134
  }
166
135
  }
167
-
168
136
  return combinedWWTPIcon;
169
-
170
137
  case 'Groups::Collectors':
171
138
  if (isCollectorFocused(point, event)) {
172
139
  return [_leaflet.default.icon({
@@ -180,16 +147,12 @@ var matchIconToPoint = function matchIconToPoint(point, event) {
180
147
  popupAnchor: [0, -30]
181
148
  })];
182
149
  }
183
-
184
150
  return combinedCollectorsIcon;
185
-
186
151
  default:
187
152
  return null;
188
153
  }
189
154
  };
190
-
191
155
  exports.matchIconToPoint = matchIconToPoint;
192
-
193
156
  var standardBackground = function standardBackground() {
194
157
  var secondary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
195
158
  var third = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
@@ -200,7 +163,6 @@ var standardBackground = function standardBackground() {
200
163
  popupAnchor: [0, -30]
201
164
  });
202
165
  };
203
-
204
166
  exports.standardBackground = standardBackground;
205
167
  var combinedFactoryIcon = [_leaflet.default.icon({
206
168
  iconUrl: _yellowCircle.default,
@@ -245,7 +207,6 @@ var combinedWWTPIcon = [_leaflet.default.icon({
245
207
  popupAnchor: [0, -30]
246
208
  })];
247
209
  exports.combinedWWTPIcon = combinedWWTPIcon;
248
-
249
210
  var selectedBackground = function selectedBackground() {
250
211
  return _leaflet.default.icon({
251
212
  iconUrl: _redPinRedShadow.default,
@@ -254,9 +215,7 @@ var selectedBackground = function selectedBackground() {
254
215
  popupAnchor: [0, -30]
255
216
  });
256
217
  };
257
-
258
218
  exports.selectedBackground = selectedBackground;
259
-
260
219
  var belongsToSourceBackground = function belongsToSourceBackground() {
261
220
  return _leaflet.default.icon({
262
221
  iconUrl: _whitePinRedShadow.default,
@@ -265,33 +224,25 @@ var belongsToSourceBackground = function belongsToSourceBackground() {
265
224
  popupAnchor: [0, -30]
266
225
  });
267
226
  };
268
-
269
227
  exports.belongsToSourceBackground = belongsToSourceBackground;
270
-
271
228
  var markerBelongsToSelectedSource = function markerBelongsToSelectedSource(event, point) {
272
229
  var source;
273
-
274
230
  if (event !== null && event !== undefined) {
275
231
  source = event.sources.filter(function (source) {
276
232
  return source.point_id === point.id;
277
233
  })[0];
278
234
  }
279
-
280
235
  return event !== null && source && event.selected_source === source.point_id;
281
236
  };
282
-
283
237
  exports.markerBelongsToSelectedSource = markerBelongsToSelectedSource;
284
-
285
238
  var markerBelongsToSource = function markerBelongsToSource(event, point) {
286
239
  if (event === undefined) return;
287
240
  return event !== null && event.sources.filter(function (source) {
288
241
  return source.point_id === point.id;
289
242
  })[0];
290
243
  };
291
-
292
244
  exports.markerBelongsToSource = markerBelongsToSource;
293
-
294
- var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, secondaryIcon, map, point, event, hovered) {
245
+ var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
295
246
  // iconSize: [width, height],
296
247
  // Icon Anchor: [(-right)(+left), (-down)(+up)]
297
248
  var samplingIcon = [_leaflet.default.icon({
@@ -306,7 +257,6 @@ var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, s
306
257
  popupAnchor: [0, -30]
307
258
  })];
308
259
  var thirdIcon = false;
309
-
310
260
  if (markerBelongsToSelectedSource(event, point) && !secondaryIcon) {
311
261
  samplingIcon.unshift(selectedBackground());
312
262
  } else if (markerBelongsToSource(event, point) && !secondaryIcon) {
@@ -315,13 +265,11 @@ var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, s
315
265
  thirdIcon = true;
316
266
  samplingIcon.unshift(standardBackground(secondaryIcon, thirdIcon));
317
267
  }
318
-
319
268
  samplingIcon.forEach(function (icon, index) {
320
269
  var pointCustomIcon = _leaflet.default.marker(markerLocation, {
321
270
  icon: icon,
322
271
  riseOnHover: false
323
- }).addTo(map);
324
-
272
+ });
325
273
  pointCustomIcon.bindTooltip(buildManholeTootipString(point));
326
274
  pointCustomIcon['kando_index_object'] = index;
327
275
  pointCustomIcon['kando_few_layer_icon'] = true;
@@ -330,12 +278,11 @@ var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, s
330
278
  pointCustomIcon['kando_object_id'] = point.id;
331
279
  pointCustomIcon['kando_object'] = 'Sampling';
332
280
  if (hovered) pointCustomIcon['kando_object'] = 'SamplingHovered';
281
+ layerGroup.addLayer(pointCustomIcon);
333
282
  });
334
283
  };
335
-
336
284
  exports.createSamplingIconPoint = createSamplingIconPoint;
337
-
338
- var createObservationIconPoint = function createObservationIconPoint(markerLocation, secondaryIcon, map, point, event, hovered) {
285
+ var createObservationIconPoint = function createObservationIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
339
286
  // iconSize: [width, height],
340
287
  // Icon Anchor: [(-right)(+left), (-down)(+up)]
341
288
  var observationIcon = [_leaflet.default.icon({
@@ -349,7 +296,6 @@ var createObservationIconPoint = function createObservationIconPoint(markerLocat
349
296
  iconAnchor: secondaryIcon ? [-8, 38] : [5, 30],
350
297
  popupAnchor: [0, -30]
351
298
  })];
352
-
353
299
  if (markerBelongsToSelectedSource(event, point) && !secondaryIcon) {
354
300
  observationIcon.unshift(selectedBackground());
355
301
  } else if (markerBelongsToSource(event, point) && !secondaryIcon) {
@@ -357,13 +303,11 @@ var createObservationIconPoint = function createObservationIconPoint(markerLocat
357
303
  } else {
358
304
  observationIcon.unshift(standardBackground(secondaryIcon));
359
305
  }
360
-
361
306
  observationIcon.forEach(function (icon, index) {
362
307
  var pointCustomIcon = _leaflet.default.marker(markerLocation, {
363
308
  icon: icon,
364
309
  riseOnHover: false
365
- }).addTo(map);
366
-
310
+ });
367
311
  pointCustomIcon.bindTooltip(buildManholeTootipString(point));
368
312
  pointCustomIcon['kando_index_object'] = index;
369
313
  pointCustomIcon['kando_few_layer_icon'] = true;
@@ -372,23 +316,19 @@ var createObservationIconPoint = function createObservationIconPoint(markerLocat
372
316
  pointCustomIcon['kando_object_id'] = point.id;
373
317
  pointCustomIcon['kando_object'] = 'Observation';
374
318
  if (hovered) pointCustomIcon['kando_object'] = 'ObservationHovered';
319
+ layerGroup.addLayer(pointCustomIcon);
375
320
  });
376
321
  };
377
-
378
322
  exports.createObservationIconPoint = createObservationIconPoint;
379
-
380
- var createSamplingIcons = function createSamplingIcons(markerLocation, event, point, map, hovered) {
323
+ var createSamplingIcons = function createSamplingIcons(markerLocation, event, point, map, hovered, layerGroup) {
381
324
  var sampledPointIds = event.samplings.map(function (s) {
382
325
  return s.point_id;
383
326
  });
384
-
385
327
  if (event !== null && event.samplings.length !== 0 && sampledPointIds.includes(point.id)) {
386
- createSamplingIconPoint(markerLocation, matchIconToPoint(point, event) !== null, map, point, event, hovered);
328
+ createSamplingIconPoint(markerLocation, matchIconToPoint(point, event) !== null, map, point, event, hovered, layerGroup);
387
329
  }
388
330
  };
389
-
390
331
  exports.createSamplingIcons = createSamplingIcons;
391
-
392
332
  var popupContent = function popupContent(obs, point) {
393
333
  if (obs === null) {
394
334
  return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(point.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <hr/>\n \n <div id=\"sector\"></div>\n </div>\n </div>\n ");
@@ -396,6 +336,45 @@ var popupContent = function popupContent(obs, point) {
396
336
  return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(obs.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <div class=\"popup-content__severity\">\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.severity"), "</p>\n <span class=\"").concat('popup-content__severity--' + obs.severity, "\">\n <b class=\"popup-content__severity-b\">\n ").concat(_i18n.default.t("events_overview.severities.".concat(obs.severity)), "\n </b>\n </span>\n </div>\n \n <hr class=\"popup-content__hr\" />\n\n <div class=\"popup-content__discharge-time\">\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.first_seen"), ":</p>\n <span><b id=\"first-seen-popup\"></b></span>\n </div>\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.last_seen"), ":</p>\n <span><b id=\"last-seen-popup\"></b></span>\n </div> \n </div>\n </div>\n </div>\n ");
397
337
  }
398
338
  };
399
-
400
339
  exports.popupContent = popupContent;
401
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9wb2ludHMvUG9pbnRVdGlscy50cyJdLCJuYW1lcyI6WyJpc0NvbGxlY3RvckZvY3VzZWQiLCJwb2ludCIsImV2ZW50Iiwib2JzZXJ2YXRpb25zIiwibGVuZ3RoIiwiaWQiLCJwb2ludF9pZCIsImJ1aWxkTWFuaG9sZVRvb3RpcFN0cmluZyIsInN0cmluZyIsImdyb3VwIiwibmFtZSIsInR5cGUiLCJzZWN0b3JfbmFtZSIsImNyZWF0ZUJ1YmJsZVBvaW50IiwibWFya2VyTG9jYXRpb24iLCJtYXAiLCJob3ZlcmVkIiwibWF0Y2hJY29uVG9Qb2ludCIsImZvckVhY2giLCJpY29uIiwiaW5kZXgiLCJwb2ludEN1c3RvbUljb24iLCJMIiwibWFya2VyIiwicmlzZU9uSG92ZXIiLCJhZGRUbyIsImJpbmRUb29sdGlwIiwicmVsYXRlZEV2ZW50c0Ftb3VudCIsImRpdkljb24iLCJjbGFzc05hbWUiLCJodG1sIiwiaWNvbkFuY2hvciIsIl96b29tIiwib3BhY2l0eSIsImNyZWF0ZU1hbmhvbGVQb2ludCIsInBvaW50SWNvbiIsImljb25VcmwiLCJ3aGl0ZVBvaW50IiwiaWNvblNpemUiLCJtYW5ob2xlSWNvbiIsImNvbWJpbmVkRmFjdG9yeUljb24iLCJtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZSIsInVuc2hpZnQiLCJzZWxlY3RlZEJhY2tncm91bmQiLCJtYXJrZXJCZWxvbmdzVG9Tb3VyY2UiLCJiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kIiwic3RhbmRhcmRCYWNrZ3JvdW5kIiwiY29tYmluZWRQdW1wU3RhdGlvbkljb24iLCJjb21iaW5lZFdXVFBJY29uIiwicmVkUGluUmVkU2hhZG93Iiwid2F0ZXJJY29uTm9CYWNrZ3JvdW5kIiwicG9wdXBBbmNob3IiLCJjb21iaW5lZENvbGxlY3RvcnNJY29uIiwic2Vjb25kYXJ5IiwidGhpcmQiLCJ3aGl0ZVBpbkJsYWNrU2hhZG93IiwieWVsbG93Q2lyY2xlVVJMIiwicGxhbnRJY29uVVJMIiwiZ3JlZW5DaXJjbGVVUkwiLCJwdW1wU3RhdGlvbkljb25VUkwiLCJjb2xsZWN0b3JJY29uIiwiYnJpZ2h0Qmx1ZUNpcmNsZVVSTCIsIldXVFBJY29uVVJMIiwid2hpdGVQaW5SZWRTaGFkb3ciLCJzb3VyY2UiLCJ1bmRlZmluZWQiLCJzb3VyY2VzIiwiZmlsdGVyIiwic2VsZWN0ZWRfc291cmNlIiwiY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQiLCJzZWNvbmRhcnlJY29uIiwic2FtcGxpbmdJY29uIiwiYmx1ZUNpcmNsZVVSTCIsInNhbXBsaW5nSWNvblVSTCIsInRoaXJkSWNvbiIsImNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50Iiwib2JzZXJ2YXRpb25JY29uIiwicGlua0NpcmNsZVVSTCIsIm9ic2VydmF0aW9uSWNvblVSTCIsImNyZWF0ZVNhbXBsaW5nSWNvbnMiLCJzYW1wbGVkUG9pbnRJZHMiLCJzYW1wbGluZ3MiLCJzIiwiaW5jbHVkZXMiLCJwb3B1cENvbnRlbnQiLCJvYnMiLCJHcmFwaEljb24iLCJpMThuIiwidCIsInNldmVyaXR5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBOztBQUNBOzs7Ozs7Ozs7O0FBT0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNBOztBQUNBOztBQUVPLElBQU1BLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBcUIsQ0FBQ0MsS0FBRCxFQUFnQkMsS0FBaEIsRUFBa0M7QUFBQTs7QUFDbEUsU0FDRSxDQUFBQSxLQUFLLFNBQUwsSUFBQUEsS0FBSyxXQUFMLG1DQUFBQSxLQUFLLENBQUVDLFlBQVAsNEVBQXFCQyxNQUFyQixNQUFnQyxDQUFoQyxJQUNBSCxLQUFLLENBQUNJLEVBQU4sS0FBYUgsS0FBSyxDQUFDQyxZQUFOLENBQW1CLENBQW5CLEVBQXNCRyxRQUZyQztBQUlELENBTE07Ozs7QUFPUCxJQUFNQyx3QkFBd0IsR0FBRyxTQUEzQkEsd0JBQTJCLENBQUNOLEtBQUQsRUFBbUI7QUFDbEQsTUFBSU8sTUFBTSxhQUFNUCxLQUFLLENBQUNRLEtBQU4sQ0FBWUMsSUFBbEIsTUFBVjs7QUFFQSxNQUFJVCxLQUFLLENBQUNRLEtBQU4sQ0FBWUUsSUFBWixLQUFxQixpQkFBekIsRUFBNEM7QUFDMUNILElBQUFBLE1BQU0sZUFBUVAsS0FBSyxDQUFDUSxLQUFOLENBQVlHLFdBQXBCLE1BQU47QUFDRCxHQUZELE1BRU87QUFDTEosSUFBQUEsTUFBTSxhQUFNUCxLQUFLLENBQUNTLElBQVosQ0FBTjtBQUNEOztBQUVELFNBQU9GLE1BQVA7QUFDRCxDQVZELEMsQ0FZQTtBQUNBOzs7QUFDTyxJQUFNSyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQy9CQyxjQUQrQixFQUUvQmIsS0FGK0IsRUFHL0JjLEdBSCtCLEVBSS9CQyxPQUorQixFQUs1QjtBQUNIO0FBQ0FDLEVBQUFBLGdCQUFnQixDQUFDaEIsS0FBRCxDQUFoQixLQUE0QixJQUE1QixJQUNFO0FBQ0FnQixFQUFBQSxnQkFBZ0IsQ0FBQ2hCLEtBQUQsQ0FBaEIsQ0FBd0JpQixPQUF4QixDQUFnQyxVQUFDQyxJQUFELEVBQVlDLEtBQVosRUFBc0I7QUFDcEQsUUFBSUMsZUFBb0IsR0FBR0MsaUJBQUVDLE1BQUYsQ0FBU1QsY0FBVCxFQUF5QjtBQUNsREssTUFBQUEsSUFBSSxFQUFFQSxJQUQ0QztBQUVsREssTUFBQUEsV0FBVyxFQUFFO0FBRnFDLEtBQXpCLEVBR3hCQyxLQUh3QixDQUdsQlYsR0FIa0IsQ0FBM0I7O0FBSUFNLElBQUFBLGVBQWUsQ0FBQ0ssV0FBaEIsQ0FBNEJuQix3QkFBd0IsQ0FBQ04sS0FBRCxDQUFwRDtBQUNBb0IsSUFBQUEsZUFBZSxDQUFDLHNCQUFELENBQWYsR0FDRUosZ0JBQWdCLENBQUNoQixLQUFELENBQWhCLENBQXdCRyxNQUF4QixHQUFpQyxDQURuQztBQUVBaUIsSUFBQUEsZUFBZSxDQUFDLG9CQUFELENBQWYsR0FBd0NELEtBQXhDO0FBQ0FDLElBQUFBLGVBQWUsQ0FBQyxpQkFBRCxDQUFmLEdBQXFDcEIsS0FBSyxDQUFDSSxFQUEzQztBQUNBZ0IsSUFBQUEsZUFBZSxDQUFDLGNBQUQsQ0FBZixHQUFrQyxPQUFsQztBQUNBLFFBQUlMLE9BQUosRUFBYUssZUFBZSxDQUFDLGNBQUQsQ0FBZixHQUFrQyxjQUFsQztBQUNkLEdBWkQsQ0FGRjs7QUFnQkEsTUFBSXBCLEtBQUssQ0FBQzBCLG1CQUFWLEVBQStCO0FBQzdCLFFBQUlOLGVBQWUsR0FBR0MsaUJBQUVDLE1BQUYsQ0FBU1QsY0FBVCxFQUF5QjtBQUM3Q0ssTUFBQUEsSUFBSSxFQUFFRyxpQkFBRU0sT0FBRixDQUFVO0FBQ2RDLFFBQUFBLFNBQVMsd0JBRUw1QixLQUFLLENBQUMwQixtQkFBTixJQUE2QixHQUE3QixHQUNJLHFEQURKLEdBRUksc0JBSkMsMEJBTUwxQixLQUFLLENBQUMwQixtQkFBTixHQUE0QixDQUE1QixHQUFnQyxhQUFoQyxHQUFnRCxFQU4zQyxtQkFESztBQVNkRyxRQUFBQSxJQUFJLGVBQVE3QixLQUFLLENBQUMwQixtQkFBZCxTQVRVO0FBVWRJLFFBQUFBLFVBQVUsRUFBRSwrQkFBZ0JoQixHQUFHLENBQUNpQixLQUFwQixFQUEyQkQ7QUFWekIsT0FBVixDQUR1QztBQWE3Q1AsTUFBQUEsV0FBVyxFQUFFLEtBYmdDO0FBYzdDUyxNQUFBQSxPQUFPLEVBQUVqQixPQUFPLEdBQUcsQ0FBSCxHQUFPO0FBZHNCLEtBQXpCLEVBZW5CUyxLQWZtQixDQWViVixHQWZhLENBQXRCOztBQWlCQU0sSUFBQUEsZUFBZSxDQUFDLGlCQUFELENBQWYsR0FBcUNwQixLQUFLLENBQUNJLEVBQTNDO0FBQ0FnQixJQUFBQSxlQUFlLENBQUMsY0FBRCxDQUFmLEdBQWtDLFlBQWxDO0FBQ0EsUUFBSUwsT0FBSixFQUFhSyxlQUFlLENBQUMsY0FBRCxDQUFmLEdBQWtDLG1CQUFsQztBQUNkO0FBQ0YsQ0E3Q007Ozs7QUErQ0EsSUFBTWEsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFxQixDQUNoQ3BCLGNBRGdDLEVBRWhDYixLQUZnQyxFQUdoQ2MsR0FIZ0MsRUFJaENDLE9BSmdDLEVBSzdCO0FBQ0gsTUFBSW1CLFNBQVMsR0FBR2IsaUJBQUVILElBQUYsQ0FBTztBQUNyQmlCLElBQUFBLE9BQU8sRUFBRUMsbUJBRFk7QUFFckJDLElBQUFBLFFBQVEsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFKLENBRlc7QUFHckJQLElBQUFBLFVBQVUsRUFBRSxDQUFDLEdBQUQsRUFBTSxHQUFOO0FBSFMsR0FBUCxDQUFoQjs7QUFLQSxNQUFJUSxXQUFnQixHQUFHakIsaUJBQUVDLE1BQUYsQ0FBU1QsY0FBVCxFQUF5QjtBQUM5Q0ssSUFBQUEsSUFBSSxFQUFFZ0IsU0FEd0M7QUFFOUNYLElBQUFBLFdBQVcsRUFBRTtBQUZpQyxHQUF6QixFQUdwQkMsS0FIb0IsQ0FHZFYsR0FIYyxDQUF2Qjs7QUFJQXdCLEVBQUFBLFdBQVcsQ0FBQ2IsV0FBWixDQUF3Qm5CLHdCQUF3QixDQUFDTixLQUFELENBQWhEO0FBQ0FzQyxFQUFBQSxXQUFXLENBQUMsaUJBQUQsQ0FBWCxHQUFpQ3RDLEtBQUssQ0FBQ0ksRUFBdkM7QUFDQWtDLEVBQUFBLFdBQVcsQ0FBQyxjQUFELENBQVgsR0FBOEIsT0FBOUI7QUFDQUEsRUFBQUEsV0FBVyxDQUFDLGtCQUFELENBQVgsR0FBa0MsU0FBbEM7QUFDQSxNQUFJdkIsT0FBSixFQUFhdUIsV0FBVyxDQUFDLGNBQUQsQ0FBWCxHQUE4QixjQUE5QjtBQUNkLENBcEJNOzs7O0FBc0JBLElBQU10QixnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQW1CLENBQUNoQixLQUFELEVBQWdCQyxLQUFoQixFQUFrQztBQUNoRSxVQUFRRCxLQUFLLENBQUNRLEtBQU4sQ0FBWUUsSUFBcEI7QUFDRSxTQUFLLGlCQUFMO0FBQ0UsVUFBSTZCLG1CQUFtQixDQUFDcEMsTUFBcEIsS0FBK0IsQ0FBbkMsRUFBc0M7QUFDcEMsWUFBSXFDLDZCQUE2QixDQUFDdkMsS0FBRCxFQUFRRCxLQUFSLENBQWpDLEVBQWlEO0FBQy9DdUMsVUFBQUEsbUJBQW1CLENBQUNFLE9BQXBCLENBQTRCQyxrQkFBa0IsRUFBOUM7QUFDRCxTQUZELE1BRU8sSUFBSUMscUJBQXFCLENBQUMxQyxLQUFELEVBQVFELEtBQVIsQ0FBekIsRUFBeUM7QUFDOUN1QyxVQUFBQSxtQkFBbUIsQ0FBQ0UsT0FBcEIsQ0FBNEJHLHlCQUF5QixFQUFyRDtBQUNELFNBRk0sTUFFQTtBQUNMTCxVQUFBQSxtQkFBbUIsQ0FBQ0UsT0FBcEIsQ0FBNEJJLGtCQUFrQixFQUE5QztBQUNEO0FBQ0Y7O0FBRUQsYUFBT04sbUJBQVA7O0FBQ0YsU0FBSyxxQkFBTDtBQUNFLFVBQUlPLHVCQUF1QixDQUFDM0MsTUFBeEIsS0FBbUMsQ0FBdkMsRUFBMEM7QUFDeEMsWUFBSXFDLDZCQUE2QixDQUFDdkMsS0FBRCxFQUFRRCxLQUFSLENBQWpDLEVBQWlEO0FBQy9DOEMsVUFBQUEsdUJBQXVCLENBQUNMLE9BQXhCLENBQWdDQyxrQkFBa0IsRUFBbEQ7QUFDRCxTQUZELE1BRU8sSUFBSUMscUJBQXFCLENBQUMxQyxLQUFELEVBQVFELEtBQVIsQ0FBekIsRUFBeUM7QUFDOUM4QyxVQUFBQSx1QkFBdUIsQ0FBQ0wsT0FBeEIsQ0FBZ0NHLHlCQUF5QixFQUF6RDtBQUNELFNBRk0sTUFFQTtBQUNMRSxVQUFBQSx1QkFBdUIsQ0FBQ0wsT0FBeEIsQ0FBZ0NJLGtCQUFrQixFQUFsRDtBQUNEO0FBQ0Y7O0FBRUQsYUFBT0MsdUJBQVA7O0FBQ0YsU0FBSyxrQ0FBTDtBQUNFLFVBQUlDLGdCQUFnQixDQUFDNUMsTUFBakIsS0FBNEIsQ0FBaEMsRUFBbUM7QUFDakMsWUFBSXFDLDZCQUE2QixDQUFDdkMsS0FBRCxFQUFRRCxLQUFSLENBQWpDLEVBQWlEO0FBQy9DK0MsVUFBQUEsZ0JBQWdCLENBQUNOLE9BQWpCLENBQXlCQyxrQkFBa0IsRUFBM0M7QUFDRCxTQUZELE1BRU8sSUFBSUMscUJBQXFCLENBQUMxQyxLQUFELEVBQVFELEtBQVIsQ0FBekIsRUFBeUM7QUFDOUMrQyxVQUFBQSxnQkFBZ0IsQ0FBQ04sT0FBakIsQ0FBeUJHLHlCQUF5QixFQUFsRDtBQUNELFNBRk0sTUFFQTtBQUNMRyxVQUFBQSxnQkFBZ0IsQ0FBQ04sT0FBakIsQ0FBeUJJLGtCQUFrQixFQUEzQztBQUNEO0FBQ0Y7O0FBRUQsYUFBT0UsZ0JBQVA7O0FBRUYsU0FBSyxvQkFBTDtBQUNFLFVBQUloRCxrQkFBa0IsQ0FBQ0MsS0FBRCxFQUFRQyxLQUFSLENBQXRCLEVBQXNDO0FBQ3BDLGVBQU8sQ0FDTG9CLGlCQUFFSCxJQUFGLENBQU87QUFDTGlCLFVBQUFBLE9BQU8sRUFBRWEsd0JBREo7QUFFTFgsVUFBQUEsUUFBUSxFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FGTDtBQUdMUCxVQUFBQSxVQUFVLEVBQUUsQ0FBQyxFQUFELEVBQUssRUFBTDtBQUhQLFNBQVAsQ0FESyxFQU9MVCxpQkFBRUgsSUFBRixDQUFPO0FBQ0xpQixVQUFBQSxPQUFPLEVBQUVjLDBCQURKO0FBRUxaLFVBQUFBLFFBQVEsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFKLENBRkw7QUFJTFAsVUFBQUEsVUFBVSxFQUFFLENBQUMsRUFBRCxFQUFLLEVBQUwsQ0FKUDtBQUtMb0IsVUFBQUEsV0FBVyxFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUMsRUFBTDtBQUxSLFNBQVAsQ0FQSyxDQUFQO0FBZUQ7O0FBRUQsYUFBT0Msc0JBQVA7O0FBRUY7QUFDRSxhQUFPLElBQVA7QUE1REo7QUE4REQsQ0EvRE07Ozs7QUFpRUEsSUFBTU4sa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFxQixHQUc3QjtBQUFBLE1BRkhPLFNBRUcsdUVBRmtCLEtBRWxCO0FBQUEsTUFESEMsS0FDRyx1RUFEYyxLQUNkO0FBQ0gsU0FBT2hDLGlCQUFFSCxJQUFGLENBQU87QUFDWmlCLElBQUFBLE9BQU8sRUFBRW1CLDRCQURHO0FBRVpqQixJQUFBQSxRQUFRLEVBQUVlLFNBQVMsR0FBRyxDQUFDLENBQUQsRUFBSSxDQUFKLENBQUgsR0FBWSxDQUFDLENBQUQsRUFBSSxDQUFKLENBRm5CO0FBR1p0QixJQUFBQSxVQUFVLEVBQUVzQixTQUFTLElBQUlDLEtBQWIsR0FBcUIsQ0FBQyxDQUFDLENBQUYsRUFBSyxFQUFMLENBQXJCLEdBQWdDRCxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUYsRUFBSyxFQUFMLENBQUgsR0FBYyxDQUFDLEVBQUQsRUFBSyxFQUFMLENBSHZEO0FBSVpGLElBQUFBLFdBQVcsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFDLEVBQUw7QUFKRCxHQUFQLENBQVA7QUFNRCxDQVZNOzs7QUFZQSxJQUFNWCxtQkFBbUIsR0FBRyxDQUNqQ2xCLGlCQUFFSCxJQUFGLENBQU87QUFDTGlCLEVBQUFBLE9BQU8sRUFBRW9CLHFCQURKO0FBRUxsQixFQUFBQSxRQUFRLEVBQUUsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUZMO0FBR0xQLEVBQUFBLFVBQVUsRUFBRSxDQUFDLElBQUQsRUFBTyxJQUFQLENBSFA7QUFJTG9CLEVBQUFBLFdBQVcsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFDLEVBQUw7QUFKUixDQUFQLENBRGlDLEVBT2pDN0IsaUJBQUVILElBQUYsQ0FBTztBQUNMaUIsRUFBQUEsT0FBTyxFQUFFcUIsb0JBREo7QUFFTG5CLEVBQUFBLFFBQVEsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFKLENBRkw7QUFHTFAsRUFBQUEsVUFBVSxFQUFFLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FIUDtBQUlMb0IsRUFBQUEsV0FBVyxFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUMsRUFBTDtBQUpSLENBQVAsQ0FQaUMsQ0FBNUI7O0FBZUEsSUFBTUosdUJBQXVCLEdBQUcsQ0FDckN6QixpQkFBRUgsSUFBRixDQUFPO0FBQ0xpQixFQUFBQSxPQUFPLEVBQUVzQixvQkFESjtBQUVMcEIsRUFBQUEsUUFBUSxFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FGTDtBQUdMUCxFQUFBQSxVQUFVLEVBQUUsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUhQO0FBSUxvQixFQUFBQSxXQUFXLEVBQUUsQ0FBQyxDQUFELEVBQUksQ0FBQyxFQUFMO0FBSlIsQ0FBUCxDQURxQyxFQU9yQzdCLGlCQUFFSCxJQUFGLENBQU87QUFDTGlCLEVBQUFBLE9BQU8sRUFBRXVCLHdCQURKO0FBRUxyQixFQUFBQSxRQUFRLEVBQUUsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUZMO0FBR0xQLEVBQUFBLFVBQVUsRUFBRSxDQUFDLENBQUQsRUFBSSxFQUFKLENBSFA7QUFJTG9CLEVBQUFBLFdBQVcsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFDLEVBQUw7QUFKUixDQUFQLENBUHFDLENBQWhDOztBQWVBLElBQU1DLHNCQUFzQixHQUFHLENBQ3BDOUIsaUJBQUVILElBQUYsQ0FBTztBQUNMaUIsRUFBQUEsT0FBTyxFQUFFd0IsaUJBREo7QUFFTHRCLEVBQUFBLFFBQVEsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFKLENBRkw7QUFJTFAsRUFBQUEsVUFBVSxFQUFFLENBQUMsRUFBRCxFQUFLLEVBQUwsQ0FKUDtBQUtMb0IsRUFBQUEsV0FBVyxFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUMsRUFBTDtBQUxSLENBQVAsQ0FEb0MsQ0FBL0I7O0FBVUEsSUFBTUgsZ0JBQWdCLEdBQUcsQ0FDOUIxQixpQkFBRUgsSUFBRixDQUFPO0FBQ0xpQixFQUFBQSxPQUFPLEVBQUV5Qix5QkFESjtBQUVMdkIsRUFBQUEsUUFBUSxFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FGTDtBQUdMUCxFQUFBQSxVQUFVLEVBQUUsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUhQO0FBSUxvQixFQUFBQSxXQUFXLEVBQUUsQ0FBQyxDQUFELEVBQUksQ0FBQyxFQUFMO0FBSlIsQ0FBUCxDQUQ4QixFQU85QjdCLGlCQUFFSCxJQUFGLENBQU87QUFDTGlCLEVBQUFBLE9BQU8sRUFBRTBCLGlCQURKO0FBRUx4QixFQUFBQSxRQUFRLEVBQUUsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUZMO0FBR0xQLEVBQUFBLFVBQVUsRUFBRSxDQUFDLENBQUQsRUFBSSxFQUFKLENBSFA7QUFJTG9CLEVBQUFBLFdBQVcsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFDLEVBQUw7QUFKUixDQUFQLENBUDhCLENBQXpCOzs7QUFlQSxJQUFNUixrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQXFCLEdBQU07QUFDdEMsU0FBT3JCLGlCQUFFSCxJQUFGLENBQU87QUFDWmlCLElBQUFBLE9BQU8sRUFBRWEsd0JBREc7QUFFWlgsSUFBQUEsUUFBUSxFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FGRTtBQUdaUCxJQUFBQSxVQUFVLEVBQUUsQ0FBQyxFQUFELEVBQUssRUFBTCxDQUhBO0FBSVpvQixJQUFBQSxXQUFXLEVBQUUsQ0FBQyxDQUFELEVBQUksQ0FBQyxFQUFMO0FBSkQsR0FBUCxDQUFQO0FBTUQsQ0FQTTs7OztBQVNBLElBQU1OLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBNEIsR0FBTTtBQUM3QyxTQUFPdkIsaUJBQUVILElBQUYsQ0FBTztBQUNaaUIsSUFBQUEsT0FBTyxFQUFFMkIsMEJBREc7QUFFWnpCLElBQUFBLFFBQVEsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFKLENBRkU7QUFHWlAsSUFBQUEsVUFBVSxFQUFFLENBQUMsRUFBRCxFQUFLLEVBQUwsQ0FIQTtBQUlab0IsSUFBQUEsV0FBVyxFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUMsRUFBTDtBQUpELEdBQVAsQ0FBUDtBQU1ELENBUE07Ozs7QUFTQSxJQUFNViw2QkFBNkIsR0FBRyxTQUFoQ0EsNkJBQWdDLENBQUN2QyxLQUFELEVBQWdCRCxLQUFoQixFQUFrQztBQUM3RSxNQUFJK0QsTUFBSjs7QUFFQSxNQUFJOUQsS0FBSyxLQUFLLElBQVYsSUFBa0JBLEtBQUssS0FBSytELFNBQWhDLEVBQTJDO0FBQ3pDRCxJQUFBQSxNQUFNLEdBQUc5RCxLQUFLLENBQUNnRSxPQUFOLENBQWNDLE1BQWQsQ0FBcUIsVUFBQ0gsTUFBRDtBQUFBLGFBQVlBLE1BQU0sQ0FBQzFELFFBQVAsS0FBb0JMLEtBQUssQ0FBQ0ksRUFBdEM7QUFBQSxLQUFyQixFQUErRCxDQUEvRCxDQUFUO0FBQ0Q7O0FBRUQsU0FBT0gsS0FBSyxLQUFLLElBQVYsSUFBa0I4RCxNQUFsQixJQUE0QjlELEtBQUssQ0FBQ2tFLGVBQU4sS0FBMEJKLE1BQU0sQ0FBQzFELFFBQXBFO0FBQ0QsQ0FSTTs7OztBQVVBLElBQU1zQyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXdCLENBQUMxQyxLQUFELEVBQWdCRCxLQUFoQixFQUFrQztBQUNyRSxNQUFJQyxLQUFLLEtBQUsrRCxTQUFkLEVBQXlCO0FBQ3pCLFNBQ0UvRCxLQUFLLEtBQUssSUFBVixJQUNBQSxLQUFLLENBQUNnRSxPQUFOLENBQWNDLE1BQWQsQ0FBcUIsVUFBQ0gsTUFBRDtBQUFBLFdBQVlBLE1BQU0sQ0FBQzFELFFBQVAsS0FBb0JMLEtBQUssQ0FBQ0ksRUFBdEM7QUFBQSxHQUFyQixFQUErRCxDQUEvRCxDQUZGO0FBSUQsQ0FOTTs7OztBQVFBLElBQU1nRSx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQTBCLENBQ3JDdkQsY0FEcUMsRUFFckN3RCxhQUZxQyxFQUdyQ3ZELEdBSHFDLEVBSXJDZCxLQUpxQyxFQUtyQ0MsS0FMcUMsRUFNckNjLE9BTnFDLEVBT2xDO0FBQ0g7QUFDQTtBQUNBLE1BQUl1RCxZQUFZLEdBQUcsQ0FDakJqRCxpQkFBRUgsSUFBRixDQUFPO0FBQ0xpQixJQUFBQSxPQUFPLEVBQUVvQyxtQkFESjtBQUVMbEMsSUFBQUEsUUFBUSxFQUFFZ0MsYUFBYSxHQUFHLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBSCxHQUFZLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FGOUI7QUFHTHZDLElBQUFBLFVBQVUsRUFBRXVDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBRixFQUFLLEVBQUwsQ0FBSCxHQUFjLENBQUMsSUFBRCxFQUFPLElBQVAsQ0FIbEM7QUFJTG5CLElBQUFBLFdBQVcsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFDLEVBQUw7QUFKUixHQUFQLENBRGlCLEVBT2pCN0IsaUJBQUVILElBQUYsQ0FBTztBQUNMaUIsSUFBQUEsT0FBTyxFQUFFcUMscUJBREo7QUFFTG5DLElBQUFBLFFBQVEsRUFBRWdDLGFBQWEsR0FBRyxDQUFDLENBQUQsRUFBSSxDQUFKLENBQUgsR0FBWSxDQUFDLENBQUQsRUFBSSxDQUFKLENBRjlCO0FBR0x2QyxJQUFBQSxVQUFVLEVBQUV1QyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUYsRUFBSyxFQUFMLENBQUgsR0FBYyxDQUFDLENBQUQsRUFBSSxFQUFKLENBSGxDO0FBSUxuQixJQUFBQSxXQUFXLEVBQUUsQ0FBQyxDQUFELEVBQUksQ0FBQyxFQUFMO0FBSlIsR0FBUCxDQVBpQixDQUFuQjtBQWVBLE1BQUl1QixTQUFTLEdBQUcsS0FBaEI7O0FBQ0EsTUFBSWpDLDZCQUE2QixDQUFDdkMsS0FBRCxFQUFRRCxLQUFSLENBQTdCLElBQStDLENBQUNxRSxhQUFwRCxFQUFtRTtBQUNqRUMsSUFBQUEsWUFBWSxDQUFDN0IsT0FBYixDQUFxQkMsa0JBQWtCLEVBQXZDO0FBQ0QsR0FGRCxNQUVPLElBQUlDLHFCQUFxQixDQUFDMUMsS0FBRCxFQUFRRCxLQUFSLENBQXJCLElBQXVDLENBQUNxRSxhQUE1QyxFQUEyRDtBQUNoRUMsSUFBQUEsWUFBWSxDQUFDN0IsT0FBYixDQUFxQkcseUJBQXlCLEVBQTlDO0FBQ0QsR0FGTSxNQUVBO0FBQ0w2QixJQUFBQSxTQUFTLEdBQUcsSUFBWjtBQUNBSCxJQUFBQSxZQUFZLENBQUM3QixPQUFiLENBQXFCSSxrQkFBa0IsQ0FBQ3dCLGFBQUQsRUFBZ0JJLFNBQWhCLENBQXZDO0FBQ0Q7O0FBRURILEVBQUFBLFlBQVksQ0FBQ3JELE9BQWIsQ0FBcUIsVUFBQ0MsSUFBRCxFQUFPQyxLQUFQLEVBQWlCO0FBQ3BDLFFBQUlDLGVBQW9CLEdBQUdDLGlCQUFFQyxNQUFGLENBQVNULGNBQVQsRUFBeUI7QUFDbERLLE1BQUFBLElBQUksRUFBRUEsSUFENEM7QUFFbERLLE1BQUFBLFdBQVcsRUFBRTtBQUZxQyxLQUF6QixFQUd4QkMsS0FId0IsQ0FHbEJWLEdBSGtCLENBQTNCOztBQUlBTSxJQUFBQSxlQUFlLENBQUNLLFdBQWhCLENBQTRCbkIsd0JBQXdCLENBQUNOLEtBQUQsQ0FBcEQ7QUFDQW9CLElBQUFBLGVBQWUsQ0FBQyxvQkFBRCxDQUFmLEdBQXdDRCxLQUF4QztBQUNBQyxJQUFBQSxlQUFlLENBQUMsc0JBQUQsQ0FBZixHQUEwQyxJQUExQztBQUNBQSxJQUFBQSxlQUFlLENBQUMsaUJBQUQsQ0FBZixHQUFxQ3FELFNBQVMsR0FBRyxLQUFILEdBQVdKLGFBQXpEO0FBQ0FqRCxJQUFBQSxlQUFlLENBQUMsYUFBRCxDQUFmLEdBQWlDcUQsU0FBakM7QUFDQXJELElBQUFBLGVBQWUsQ0FBQyxpQkFBRCxDQUFmLEdBQXFDcEIsS0FBSyxDQUFDSSxFQUEzQztBQUNBZ0IsSUFBQUEsZUFBZSxDQUFDLGNBQUQsQ0FBZixHQUFrQyxVQUFsQztBQUNBLFFBQUlMLE9BQUosRUFBYUssZUFBZSxDQUFDLGNBQUQsQ0FBZixHQUFrQyxpQkFBbEM7QUFDZCxHQWJEO0FBY0QsQ0FqRE07Ozs7QUFtREEsSUFBTXNELDBCQUEwQixHQUFHLFNBQTdCQSwwQkFBNkIsQ0FDeEM3RCxjQUR3QyxFQUV4Q3dELGFBRndDLEVBR3hDdkQsR0FId0MsRUFJeENkLEtBSndDLEVBS3hDQyxLQUx3QyxFQU14Q2MsT0FOd0MsRUFPckM7QUFDSDtBQUNBO0FBQ0EsTUFBSTRELGVBQWUsR0FBRyxDQUNwQnRELGlCQUFFSCxJQUFGLENBQU87QUFDTGlCLElBQUFBLE9BQU8sRUFBRXlDLG1CQURKO0FBRUx2QyxJQUFBQSxRQUFRLEVBQUVnQyxhQUFhLEdBQUcsQ0FBQyxDQUFELEVBQUksQ0FBSixDQUFILEdBQVksQ0FBQyxDQUFELEVBQUksQ0FBSixDQUY5QjtBQUdMdkMsSUFBQUEsVUFBVSxFQUFFdUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFGLEVBQUssRUFBTCxDQUFILEdBQWMsQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUhsQztBQUlMbkIsSUFBQUEsV0FBVyxFQUFFLENBQUMsQ0FBRCxFQUFJLENBQUMsRUFBTDtBQUpSLEdBQVAsQ0FEb0IsRUFPcEI3QixpQkFBRUgsSUFBRixDQUFPO0FBQ0xpQixJQUFBQSxPQUFPLEVBQUUwQyx3QkFESjtBQUVMeEMsSUFBQUEsUUFBUSxFQUFFZ0MsYUFBYSxHQUFHLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBSCxHQUFZLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FGOUI7QUFHTHZDLElBQUFBLFVBQVUsRUFBRXVDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBRixFQUFLLEVBQUwsQ0FBSCxHQUFjLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FIbEM7QUFJTG5CLElBQUFBLFdBQVcsRUFBRSxDQUFDLENBQUQsRUFBSSxDQUFDLEVBQUw7QUFKUixHQUFQLENBUG9CLENBQXRCOztBQWVBLE1BQUlWLDZCQUE2QixDQUFDdkMsS0FBRCxFQUFRRCxLQUFSLENBQTdCLElBQStDLENBQUNxRSxhQUFwRCxFQUFtRTtBQUNqRU0sSUFBQUEsZUFBZSxDQUFDbEMsT0FBaEIsQ0FBd0JDLGtCQUFrQixFQUExQztBQUNELEdBRkQsTUFFTyxJQUFJQyxxQkFBcUIsQ0FBQzFDLEtBQUQsRUFBUUQsS0FBUixDQUFyQixJQUF1QyxDQUFDcUUsYUFBNUMsRUFBMkQ7QUFDaEVNLElBQUFBLGVBQWUsQ0FBQ2xDLE9BQWhCLENBQXdCRyx5QkFBeUIsRUFBakQ7QUFDRCxHQUZNLE1BRUE7QUFDTCtCLElBQUFBLGVBQWUsQ0FBQ2xDLE9BQWhCLENBQXdCSSxrQkFBa0IsQ0FBQ3dCLGFBQUQsQ0FBMUM7QUFDRDs7QUFFRE0sRUFBQUEsZUFBZSxDQUFDMUQsT0FBaEIsQ0FBd0IsVUFBQ0MsSUFBRCxFQUFPQyxLQUFQLEVBQWlCO0FBQ3ZDLFFBQUlDLGVBQW9CLEdBQUdDLGlCQUFFQyxNQUFGLENBQVNULGNBQVQsRUFBeUI7QUFDbERLLE1BQUFBLElBQUksRUFBRUEsSUFENEM7QUFFbERLLE1BQUFBLFdBQVcsRUFBRTtBQUZxQyxLQUF6QixFQUd4QkMsS0FId0IsQ0FHbEJWLEdBSGtCLENBQTNCOztBQUlBTSxJQUFBQSxlQUFlLENBQUNLLFdBQWhCLENBQTRCbkIsd0JBQXdCLENBQUNOLEtBQUQsQ0FBcEQ7QUFDQW9CLElBQUFBLGVBQWUsQ0FBQyxvQkFBRCxDQUFmLEdBQXdDRCxLQUF4QztBQUNBQyxJQUFBQSxlQUFlLENBQUMsc0JBQUQsQ0FBZixHQUEwQyxJQUExQztBQUNBQSxJQUFBQSxlQUFlLENBQUMsaUJBQUQsQ0FBZixHQUFxQ2lELGFBQXJDO0FBQ0FqRCxJQUFBQSxlQUFlLENBQUMsYUFBRCxDQUFmLEdBQWlDLEtBQWpDO0FBQ0FBLElBQUFBLGVBQWUsQ0FBQyxpQkFBRCxDQUFmLEdBQXFDcEIsS0FBSyxDQUFDSSxFQUEzQztBQUNBZ0IsSUFBQUEsZUFBZSxDQUFDLGNBQUQsQ0FBZixHQUFrQyxhQUFsQztBQUNBLFFBQUlMLE9BQUosRUFBYUssZUFBZSxDQUFDLGNBQUQsQ0FBZixHQUFrQyxvQkFBbEM7QUFDZCxHQWJEO0FBY0QsQ0EvQ007Ozs7QUFpREEsSUFBTTBELG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBc0IsQ0FDakNqRSxjQURpQyxFQUVqQ1osS0FGaUMsRUFHakNELEtBSGlDLEVBSWpDYyxHQUppQyxFQUtqQ0MsT0FMaUMsRUFNOUI7QUFDSCxNQUFJZ0UsZUFBZSxHQUFHOUUsS0FBSyxDQUFDK0UsU0FBTixDQUFnQmxFLEdBQWhCLENBQW9CLFVBQUNtRSxDQUFEO0FBQUEsV0FBT0EsQ0FBQyxDQUFDNUUsUUFBVDtBQUFBLEdBQXBCLENBQXRCOztBQUNBLE1BQ0VKLEtBQUssS0FBSyxJQUFWLElBQ0FBLEtBQUssQ0FBQytFLFNBQU4sQ0FBZ0I3RSxNQUFoQixLQUEyQixDQUQzQixJQUVBNEUsZUFBZSxDQUFDRyxRQUFoQixDQUF5QmxGLEtBQUssQ0FBQ0ksRUFBL0IsQ0FIRixFQUlFO0FBQ0FnRSxJQUFBQSx1QkFBdUIsQ0FDckJ2RCxjQURxQixFQUVyQkcsZ0JBQWdCLENBQUNoQixLQUFELEVBQVFDLEtBQVIsQ0FBaEIsS0FBbUMsSUFGZCxFQUdyQmEsR0FIcUIsRUFJckJkLEtBSnFCLEVBS3JCQyxLQUxxQixFQU1yQmMsT0FOcUIsQ0FBdkI7QUFRRDtBQUNGLENBdEJNOzs7O0FBd0JBLElBQU1vRSxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDQyxHQUFELEVBQVdwRixLQUFYLEVBQTZCO0FBQ3ZELE1BQUlvRixHQUFHLEtBQUssSUFBWixFQUFrQjtBQUNoQiwrSEFFNERwRixLQUFLLENBQUNJLEVBRmxFLGlEQUc0QmlGLGtCQUg1Qix3SkFNMERyRixLQUFLLENBQUNRLEtBQU4sQ0FBWUMsSUFOdEU7QUFhRCxHQWRELE1BY087QUFDTCwrSEFFNEQyRSxHQUFHLENBQUNoRixFQUZoRSxpREFHNEJpRixrQkFINUIsd0pBT2tCckYsS0FBSyxDQUFDUSxLQUFOLENBQVlDLElBUDlCLG9KQVUyRDZFLGNBQUtDLENBQUwsNEJBVjNELHlEQWNzQiw4QkFBOEJILEdBQUcsQ0FBQ0ksUUFkeEQsdUhBaUI4QkYsY0FBS0MsQ0FBTCxzQ0FDOEJILEdBQUcsQ0FBQ0ksUUFEbEMsRUFqQjlCLG1XQTRCK0RGLGNBQUtDLENBQUwsOEJBNUIvRCxnT0FrQytERCxjQUFLQyxDQUFMLDZCQWxDL0Q7QUEyQ0Q7QUFDRixDQTVETSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHcmFwaEljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2xpbmUtY2hhcnQuc3ZnJztcbmltcG9ydCBMLCB7IExhdExuZ1R1cGxlIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgaTE4biBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9wb2ludHMvbW9kZWxzL0lQb2ludCc7XG5pbXBvcnQgYmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYmx1ZS1jaXJjbGUuc3ZnJztcbmltcG9ydCBzYW1wbGluZ0ljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3NhbXBsaW5nLWljb24uc3ZnJztcbmltcG9ydCBwaW5rQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9waW5rLWNpcmNsZS5zdmcnO1xuaW1wb3J0IG9ic2VydmF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvb2JzZXJ2YXRpb24taWNvbi5zdmcnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvZXZlbnRzL21vZGVscy9JRXZlbnQnO1xuaW1wb3J0IHJlZFBpblJlZFNoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcmVkLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5CbGFja1NoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2hpdGUtcGluLWJsYWNrLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHllbGxvd0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMveWVsbG93LWNpcmNsZS5zdmcnO1xuaW1wb3J0IHBsYW50SWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvZmFjdG9yeS1pY29uLnN2Zyc7XG5pbXBvcnQgZ3JlZW5DaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2dyZWVuLWNpcmNsZS5zdmcnO1xuaW1wb3J0IHB1bXBTdGF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcHVtcC1zdGF0aW9uLWljb24uc3ZnJztcbmltcG9ydCBjb2xsZWN0b3JJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9tYXAvcGluLXdhdGVyLnN2Zyc7XG5pbXBvcnQgYnJpZ2h0Qmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYnJpZ2h0LWJsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgV1dUUEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL1dXVFAtaWNvbi5zdmcnO1xuaW1wb3J0IHdhdGVySWNvbk5vQmFja2dyb3VuZCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2F0ZXItbm8tYmFja2dyb3VuZC5zdmcnO1xuaW1wb3J0IHdoaXRlUG9pbnQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3doaXRlLXBvaW50LnBuZyc7XG5pbXBvcnQgeyBldmVudHNDb3VudEljb24gfSBmcm9tICcuLi9NYXBVdGlscyc7XG5cbmV4cG9ydCBjb25zdCBpc0NvbGxlY3RvckZvY3VzZWQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGV2ZW50Py5vYnNlcnZhdGlvbnM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgIHBvaW50LmlkID09PSBldmVudC5vYnNlcnZhdGlvbnNbMF0ucG9pbnRfaWRcbiAgKTtcbn07XG5cbmNvbnN0IGJ1aWxkTWFuaG9sZVRvb3RpcFN0cmluZyA9IChwb2ludDogSVBvaW50KSA9PiB7XG4gIGxldCBzdHJpbmcgPSBgJHtwb2ludC5ncm91cC5uYW1lfSBgO1xuXG4gIGlmIChwb2ludC5ncm91cC50eXBlID09PSAnR3JvdXBzOjpGYWN0b3J5Jykge1xuICAgIHN0cmluZyArPSBgKCR7cG9pbnQuZ3JvdXAuc2VjdG9yX25hbWV9KWA7XG4gIH0gZWxzZSB7XG4gICAgc3RyaW5nID0gYCR7cG9pbnQubmFtZX1gO1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbi8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4vLyBJY29uQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG5leHBvcnQgY29uc3QgY3JlYXRlQnViYmxlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbikgPT4ge1xuICAvLyBAdHMtaWdub3JlXG4gIG1hdGNoSWNvblRvUG9pbnQocG9pbnQpICE9PSBudWxsICYmXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG1hdGNoSWNvblRvUG9pbnQocG9pbnQpLmZvckVhY2goKGljb246IGFueSwgaW5kZXgpID0+IHtcbiAgICAgIGxldCBwb2ludEN1c3RvbUljb246IGFueSA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICAgIGljb246IGljb24sXG4gICAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICAgIH0pLmFkZFRvKG1hcCk7XG4gICAgICBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gICAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2Zld19sYXllcl9pY29uJ10gPVxuICAgICAgICBtYXRjaEljb25Ub1BvaW50KHBvaW50KS5sZW5ndGggPiAxO1xuICAgICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19pbmRleF9vYmplY3QnXSA9IGluZGV4O1xuICAgICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICAgICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gICAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludEhvdmVyZWQnO1xuICAgIH0pO1xuXG4gIGlmIChwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50KSB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbiA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBMLmRpdkljb24oe1xuICAgICAgICBjbGFzc05hbWU6IGBcbiAgICAgICAgICAke1xuICAgICAgICAgICAgcG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+PSAxMDBcbiAgICAgICAgICAgICAgPyAnY2lyY2xlLWV2ZW50cy1hbW91bnQgY2lyY2xlLWV2ZW50cy1hbW91bnQtLXRyaWRpZ2l0J1xuICAgICAgICAgICAgICA6ICdjaXJjbGUtZXZlbnRzLWFtb3VudCdcbiAgICAgICAgICB9IFxuICAgICAgICAgICR7cG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+IDIgPyAnYWxlcnQtY29sb3InIDogJyd9XG4gICAgICAgICAgICBgLFxuICAgICAgICBodG1sOiBgPHA+JHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50fTwvcD5gLFxuICAgICAgICBpY29uQW5jaG9yOiBldmVudHNDb3VudEljb24obWFwLl96b29tKS5pY29uQW5jaG9yLFxuICAgICAgfSksXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgICBvcGFjaXR5OiBob3ZlcmVkID8gMSA6IDAsXG4gICAgfSkuYWRkVG8obWFwKTtcblxuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXInO1xuICAgIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXJIb3ZlcmVkJztcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1hbmhvbGVQb2ludCA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQ/LFxuKSA9PiB7XG4gIGxldCBwb2ludEljb24gPSBMLmljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUG9pbnQsXG4gICAgaWNvblNpemU6IFs5LCA5XSxcbiAgICBpY29uQW5jaG9yOiBbNC41LCA0LjVdLFxuICB9KTtcbiAgbGV0IG1hbmhvbGVJY29uOiBhbnkgPSBMLm1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgIGljb246IHBvaW50SWNvbixcbiAgICByaXNlT25Ib3ZlcjogdHJ1ZSxcbiAgfSkuYWRkVG8obWFwKTtcbiAgbWFuaG9sZUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnQnO1xuICBtYW5ob2xlSWNvblsna2FuZG9fcG9pbnRfdHlwZSddID0gJ01hbmhvbGUnO1xuICBpZiAoaG92ZXJlZCkgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50SG92ZXJlZCc7XG59O1xuXG5leHBvcnQgY29uc3QgbWF0Y2hJY29uVG9Qb2ludCA9IChwb2ludDogSVBvaW50LCBldmVudDogSUV2ZW50KSA9PiB7XG4gIHN3aXRjaCAocG9pbnQuZ3JvdXAudHlwZSkge1xuICAgIGNhc2UgJ0dyb3Vwczo6RmFjdG9yeSc6XG4gICAgICBpZiAoY29tYmluZWRGYWN0b3J5SWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRGYWN0b3J5SWNvbjtcbiAgICBjYXNlICdHcm91cHM6OlB1bXBTdGF0aW9uJzpcbiAgICAgIGlmIChjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRQdW1wU3RhdGlvbkljb247XG4gICAgY2FzZSAnR3JvdXBzOjpXYXN0ZXdhdGVyVHJlYXRtZW50UGxhbnQnOlxuICAgICAgaWYgKGNvbWJpbmVkV1dUUEljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkV1dUUEljb247XG5cbiAgICBjYXNlICdHcm91cHM6OkNvbGxlY3RvcnMnOlxuICAgICAgaWYgKGlzQ29sbGVjdG9yRm9jdXNlZChwb2ludCwgZXZlbnQpKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgTC5pY29uKHtcbiAgICAgICAgICAgIGljb25Vcmw6IHJlZFBpblJlZFNoYWRvdyxcbiAgICAgICAgICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgICAgICAgICBpY29uQW5jaG9yOiBbMzAsIDUyXSxcbiAgICAgICAgICB9KSxcblxuICAgICAgICAgIEwuaWNvbih7XG4gICAgICAgICAgICBpY29uVXJsOiB3YXRlckljb25Ob0JhY2tncm91bmQsXG4gICAgICAgICAgICBpY29uU2l6ZTogWzAsIDBdLFxuXG4gICAgICAgICAgICBpY29uQW5jaG9yOiBbMjIsIDQ0XSxcbiAgICAgICAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkQ29sbGVjdG9yc0ljb247XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzdGFuZGFyZEJhY2tncm91bmQgPSAoXG4gIHNlY29uZGFyeTogYm9vbGVhbiA9IGZhbHNlLFxuICB0aGlyZDogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIHJldHVybiBMLmljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUGluQmxhY2tTaGFkb3csXG4gICAgaWNvblNpemU6IHNlY29uZGFyeSA/IFswLCAwXSA6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnkgJiYgdGhpcmQgPyBbLTIsIDE5XSA6IHNlY29uZGFyeSA/IFstMiwgNDRdIDogWzIwLCA0Ml0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZEZhY3RvcnlJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHllbGxvd0NpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHBsYW50SWNvblVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFs1LCAzMF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBncmVlbkNpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHB1bXBTdGF0aW9uSWNvblVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFs3LCAzMl0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZENvbGxlY3RvcnNJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGNvbGxlY3Rvckljb24sXG4gICAgaWNvblNpemU6IFswLCAwXSxcblxuICAgIGljb25BbmNob3I6IFsyNSwgNTBdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRXV1RQSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBicmlnaHRCbHVlQ2lyY2xlVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzEwLjcsIDMzLjddLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogV1dUUEljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbOCwgMzFdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0ZWRCYWNrZ3JvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiByZWRQaW5SZWRTaGFkb3csXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMzIsIDU0XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQgPSAoKSA9PiB7XG4gIHJldHVybiBMLmljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUGluUmVkU2hhZG93LFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzMyLCA1NF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZSA9IChldmVudDogSUV2ZW50LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGxldCBzb3VyY2U7XG5cbiAgaWYgKGV2ZW50ICE9PSBudWxsICYmIGV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzb3VyY2UgPSBldmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXTtcbiAgfVxuXG4gIHJldHVybiBldmVudCAhPT0gbnVsbCAmJiBzb3VyY2UgJiYgZXZlbnQuc2VsZWN0ZWRfc291cmNlID09PSBzb3VyY2UucG9pbnRfaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyQmVsb25nc1RvU291cmNlID0gKGV2ZW50OiBJRXZlbnQsIHBvaW50OiBJUG9pbnQpID0+IHtcbiAgaWYgKGV2ZW50ID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgcmV0dXJuIChcbiAgICBldmVudCAhPT0gbnVsbCAmJlxuICAgIGV2ZW50LnNvdXJjZXMuZmlsdGVyKChzb3VyY2UpID0+IHNvdXJjZS5wb2ludF9pZCA9PT0gcG9pbnQuaWQpWzBdXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgc2Vjb25kYXJ5SWNvbjogYm9vbGVhbixcbiAgbWFwLFxuICBwb2ludDogSVBvaW50LFxuICBldmVudDogSUV2ZW50LFxuICBob3ZlcmVkPyxcbikgPT4ge1xuICAvLyBpY29uU2l6ZTogW3dpZHRoLCBoZWlnaHRdLFxuICAvLyBJY29uIEFuY2hvcjogWygtcmlnaHQpKCtsZWZ0KSwgKC1kb3duKSgrdXApXVxuICBsZXQgc2FtcGxpbmdJY29uID0gW1xuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBibHVlQ2lyY2xlVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy03LCAxNV0gOiBbMTAuNywgMzMuN10sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHNhbXBsaW5nSWNvblVSTCxcbiAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzAsIDBdIDogWzAsIDBdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstOCwgMTNdIDogWzUsIDMwXSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgXTtcblxuICBsZXQgdGhpcmRJY29uID0gZmFsc2U7XG4gIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlyZEljb24gPSB0cnVlO1xuICAgIHNhbXBsaW5nSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZChzZWNvbmRhcnlJY29uLCB0aGlyZEljb24pKTtcbiAgfVxuXG4gIHNhbXBsaW5nSWNvbi5mb3JFYWNoKChpY29uLCBpbmRleCkgPT4ge1xuICAgIGxldCBwb2ludEN1c3RvbUljb246IGFueSA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBpY29uLFxuICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgIH0pLmFkZFRvKG1hcCk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb3RpcFN0cmluZyhwb2ludCkpO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faW5kZXhfb2JqZWN0J10gPSBpbmRleDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2Zld19sYXllcl9pY29uJ10gPSB0cnVlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fc2Vjb25kYXJ5J10gPSB0aGlyZEljb24gPyBmYWxzZSA6IHNlY29uZGFyeUljb247XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb190aGlyZCddID0gdGhpcmRJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ1NhbXBsaW5nJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZ0hvdmVyZWQnO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVPYnNlcnZhdGlvbkljb25Qb2ludCA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBzZWNvbmRhcnlJY29uOiBib29sZWFuLFxuICBtYXAsXG4gIHBvaW50OiBJUG9pbnQsXG4gIGV2ZW50OiBJRXZlbnQsXG4gIGhvdmVyZWQ/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBvYnNlcnZhdGlvbkljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHBpbmtDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDQwXSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogb2JzZXJ2YXRpb25JY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAzOF0gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoc2Vjb25kYXJ5SWNvbikpO1xuICB9XG5cbiAgb2JzZXJ2YXRpb25JY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSkuYWRkVG8obWFwKTtcbiAgICBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19pbmRleF9vYmplY3QnXSA9IGluZGV4O1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fZmV3X2xheWVyX2ljb24nXSA9IHRydWU7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19zZWNvbmRhcnknXSA9IHNlY29uZGFyeUljb247XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb190aGlyZCddID0gZmFsc2U7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnT2JzZXJ2YXRpb24nO1xuICAgIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ09ic2VydmF0aW9uSG92ZXJlZCc7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvbnMgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgZXZlbnQ6IElFdmVudCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkLFxuKSA9PiB7XG4gIGxldCBzYW1wbGVkUG9pbnRJZHMgPSBldmVudC5zYW1wbGluZ3MubWFwKChzKSA9PiBzLnBvaW50X2lkKTtcbiAgaWYgKFxuICAgIGV2ZW50ICE9PSBudWxsICYmXG4gICAgZXZlbnQuc2FtcGxpbmdzLmxlbmd0aCAhPT0gMCAmJlxuICAgIHNhbXBsZWRQb2ludElkcy5pbmNsdWRlcyhwb2ludC5pZClcbiAgKSB7XG4gICAgY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQoXG4gICAgICBtYXJrZXJMb2NhdGlvbixcbiAgICAgIG1hdGNoSWNvblRvUG9pbnQocG9pbnQsIGV2ZW50KSAhPT0gbnVsbCxcbiAgICAgIG1hcCxcbiAgICAgIHBvaW50LFxuICAgICAgZXZlbnQsXG4gICAgICBob3ZlcmVkLFxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwb3B1cENvbnRlbnQgPSAob2JzOiBhbnksIHBvaW50OiBJUG9pbnQpID0+IHtcbiAgaWYgKG9icyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtcG9wdXBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZ3JhcGgtaWNvbiBwb3B1cC1ncmFwaC1pY29uLSR7cG9pbnQuaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtHcmFwaEljb259XCIvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NpdGUtbmFtZVwiPjxiPiR7cG9pbnQuZ3JvdXAubmFtZX08L2I+PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgPGhyLz5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJzZWN0b3JcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LXBvcHVwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWdyYXBoLWljb24gcG9wdXAtZ3JhcGgtaWNvbi0ke29icy5pZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIke0dyYXBoSWNvbn1cIi8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwicG9wdXAtY29udGVudF9fc2l0ZS1uYW1lXCI+PGI+JHtcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludC5ncm91cC5uYW1lXG4gICAgICAgICAgICAgICAgICAgIH08L2I+PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LXBcIj4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5zZXZlcml0eWAsXG4gICAgICAgICAgICAgICAgICAgICAgICApfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvcHVwLWNvbnRlbnRfX3NldmVyaXR5LS0nICsgb2JzLnNldmVyaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1iXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdGllcy4ke29icy5zZXZlcml0eX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJwb3B1cC1jb250ZW50X19oclwiIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX2Rpc2NoYXJnZS10aW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktcFwiPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5maXJzdF9zZWVuYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfTo8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGIgaWQ9XCJmaXJzdC1zZWVuLXBvcHVwXCI+PC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LXBcIj4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcubGFzdF9zZWVuYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfTo8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGIgaWQ9XCJsYXN0LXNlZW4tcG9wdXBcIj48L2I+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGA7XG4gIH1cbn07XG4iXX0=
340
+ var setIcon = function setIcon(element, clicked, point) {
341
+ element.setIcon((0, _PointIcon.getPointIconByType)(point.group.type, point.name, point.group.sector_name, clicked, false));
342
+ };
343
+ var handleMarkerClick = function handleMarkerClick(map, point, pointCustomIcon) {
344
+ map.on('zoomstart', function () {
345
+ map.closePopup();
346
+ });
347
+ pointCustomIcon.on('popupclose', function () {
348
+ setIcon(pointCustomIcon, false, point);
349
+ });
350
+ pointCustomIcon.on('popupopen', function () {
351
+ setIcon(pointCustomIcon, true, point);
352
+ });
353
+ };
354
+ exports.handleMarkerClick = handleMarkerClick;
355
+ var bindPopupToMarker = function bindPopupToMarker(point, layerGroup) {
356
+ var content = "\n <div class='main-content'>\n <div class='main-content__header'>\n <div class=\"main-content__header__titles\">\n <div class='main-content__header__titles__title'>".concat(point.name, "</div>\n <div class='main-content__header__titles__subtitle'>").concat(point.group.sector_name, "</div>\n </div>\n </div>\n \n <div class='main-content__body'>\n <div class='main-content__body__item'>\n <div class='main-content__body__item__icon'>\n <img src='").concat(_water_reuse.default, "' />\n </div>\n <div class='main-content__body__item__titles'>\n <div class='main-content__body__item__titles__title'>").concat(point.group.water_consumption_per_day, " ").concat(_i18n.default.t('million_gallons_day'), "</div>\n <div class='main-content__body__item__titles__subtitle'>").concat(_i18n.default.t('water_discharge'), "</div>\n </div>\n </div>\n </div>\n </div>\n ");
357
+ layerGroup.bindPopup(content, {
358
+ className: 'point-marker-popup',
359
+ minWidth: '214px',
360
+ maxWidth: '214px',
361
+ closeButton: false
362
+ });
363
+ };
364
+ exports.bindPopupToMarker = bindPopupToMarker;
365
+ var removeLayerGroup = function removeLayerGroup(map, layerGroup) {
366
+ if (map.hasLayer(layerGroup)) {
367
+ map.removeLayer(layerGroup);
368
+ }
369
+ };
370
+ exports.removeLayerGroup = removeLayerGroup;
371
+ var addLayerGroup = function addLayerGroup(map, layerGroup) {
372
+ if (!map.hasLayer(layerGroup)) {
373
+ map.addLayer(layerGroup);
374
+ } else {
375
+ removeLayerGroup(map, layerGroup);
376
+ addLayerGroup(map, layerGroup);
377
+ }
378
+ };
379
+ exports.addLayerGroup = addLayerGroup;
380
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2kxOG4iLCJfYmx1ZUNpcmNsZSIsIl9zYW1wbGluZ0ljb24iLCJfcGlua0NpcmNsZSIsIl9vYnNlcnZhdGlvbkljb24iLCJfcmVkUGluUmVkU2hhZG93IiwiX3doaXRlUGluUmVkU2hhZG93IiwiX3doaXRlUGluQmxhY2tTaGFkb3ciLCJfeWVsbG93Q2lyY2xlIiwiX2ZhY3RvcnlJY29uIiwiX2dyZWVuQ2lyY2xlIiwiX3B1bXBTdGF0aW9uSWNvbiIsIl9waW5XYXRlciIsIl9icmlnaHRCbHVlQ2lyY2xlIiwiX1dXVFBJY29uIiwiX3dhdGVyTm9CYWNrZ3JvdW5kIiwiX3doaXRlUG9pbnQiLCJfTWFwVXRpbHMiLCJfUG9pbnRJY29uIiwiX3dhdGVyX3JldXNlIiwiaXNDb2xsZWN0b3JGb2N1c2VkIiwicG9pbnQiLCJldmVudCIsIl9ldmVudCRvYnNlcnZhdGlvbnMiLCJvYnNlcnZhdGlvbnMiLCJsZW5ndGgiLCJpZCIsInBvaW50X2lkIiwiZXhwb3J0cyIsImJ1aWxkTWFuaG9sZVRvb3RpcFN0cmluZyIsInN0cmluZyIsImNvbmNhdCIsImdyb3VwIiwibmFtZSIsInR5cGUiLCJzZWN0b3JfbmFtZSIsIndhdGVyX2NvbnN1bXB0aW9uX3Blcl9kYXkiLCJjcmVhdGVCdWJibGVQb2ludCIsIm1hcmtlckxvY2F0aW9uIiwibWFwIiwiaG92ZXJlZCIsImxheWVyR3JvdXAiLCJzdWJ0aXRsZSIsInBvaW50Q3VzdG9tSWNvbiIsIkwiLCJtYXJrZXIiLCJpY29uIiwiZ2V0UG9pbnRJY29uQnlUeXBlIiwicmlzZU9uSG92ZXIiLCJhZGRMYXllciIsImJpbmRQb3B1cFRvTWFya2VyIiwiaGFuZGxlTWFya2VyQ2xpY2siLCJyZWxhdGVkRXZlbnRzQW1vdW50IiwiZGl2SWNvbiIsImNsYXNzTmFtZSIsImh0bWwiLCJpY29uQW5jaG9yIiwiZXZlbnRzQ291bnRJY29uIiwiX3pvb20iLCJvcGFjaXR5IiwiY3JlYXRlTWFuaG9sZVBvaW50IiwicG9pbnRJY29uIiwiSWNvbiIsImljb25VcmwiLCJ3aGl0ZVBvaW50IiwiaWNvblNpemUiLCJtYW5ob2xlSWNvbiIsIk1hcmtlciIsImJpbmRUb29sdGlwIiwibWF0Y2hJY29uVG9Qb2ludCIsImNvbWJpbmVkRmFjdG9yeUljb24iLCJtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZSIsInVuc2hpZnQiLCJzZWxlY3RlZEJhY2tncm91bmQiLCJtYXJrZXJCZWxvbmdzVG9Tb3VyY2UiLCJiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kIiwic3RhbmRhcmRCYWNrZ3JvdW5kIiwiY29tYmluZWRQdW1wU3RhdGlvbkljb24iLCJjb21iaW5lZFdXVFBJY29uIiwicmVkUGluUmVkU2hhZG93Iiwid2F0ZXJJY29uTm9CYWNrZ3JvdW5kIiwicG9wdXBBbmNob3IiLCJjb21iaW5lZENvbGxlY3RvcnNJY29uIiwic2Vjb25kYXJ5IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwidGhpcmQiLCJ3aGl0ZVBpbkJsYWNrU2hhZG93IiwieWVsbG93Q2lyY2xlVVJMIiwicGxhbnRJY29uVVJMIiwiZ3JlZW5DaXJjbGVVUkwiLCJwdW1wU3RhdGlvbkljb25VUkwiLCJjb2xsZWN0b3JJY29uIiwiYnJpZ2h0Qmx1ZUNpcmNsZVVSTCIsIldXVFBJY29uVVJMIiwid2hpdGVQaW5SZWRTaGFkb3ciLCJzb3VyY2UiLCJzb3VyY2VzIiwiZmlsdGVyIiwic2VsZWN0ZWRfc291cmNlIiwiY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQiLCJzZWNvbmRhcnlJY29uIiwic2FtcGxpbmdJY29uIiwiYmx1ZUNpcmNsZVVSTCIsInNhbXBsaW5nSWNvblVSTCIsInRoaXJkSWNvbiIsImZvckVhY2giLCJpbmRleCIsImNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50Iiwib2JzZXJ2YXRpb25JY29uIiwicGlua0NpcmNsZVVSTCIsIm9ic2VydmF0aW9uSWNvblVSTCIsImNyZWF0ZVNhbXBsaW5nSWNvbnMiLCJzYW1wbGVkUG9pbnRJZHMiLCJzYW1wbGluZ3MiLCJzIiwiaW5jbHVkZXMiLCJwb3B1cENvbnRlbnQiLCJvYnMiLCJHcmFwaEljb24iLCJpMThuIiwidCIsInNldmVyaXR5Iiwic2V0SWNvbiIsImVsZW1lbnQiLCJjbGlja2VkIiwib24iLCJjbG9zZVBvcHVwIiwiY29udGVudCIsIndhdGVyUmV1c2VJY29uIiwiYmluZFBvcHVwIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImNsb3NlQnV0dG9uIiwicmVtb3ZlTGF5ZXJHcm91cCIsImhhc0xheWVyIiwicmVtb3ZlTGF5ZXIiLCJhZGRMYXllckdyb3VwIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL1dpZGdldHMvTWFwL3BvaW50cy9Qb2ludFV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHcmFwaEljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2xpbmUtY2hhcnQuc3ZnJztcbmltcG9ydCBMLCB7IExhdExuZ1R1cGxlIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgaTE4biBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9wb2ludHMvbW9kZWxzL0lQb2ludCc7XG5pbXBvcnQgYmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYmx1ZS1jaXJjbGUuc3ZnJztcbmltcG9ydCBzYW1wbGluZ0ljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3NhbXBsaW5nLWljb24uc3ZnJztcbmltcG9ydCBwaW5rQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9waW5rLWNpcmNsZS5zdmcnO1xuaW1wb3J0IG9ic2VydmF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvb2JzZXJ2YXRpb24taWNvbi5zdmcnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvZXZlbnRzL21vZGVscy9JRXZlbnQnO1xuaW1wb3J0IHJlZFBpblJlZFNoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcmVkLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5CbGFja1NoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2hpdGUtcGluLWJsYWNrLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHllbGxvd0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMveWVsbG93LWNpcmNsZS5zdmcnO1xuaW1wb3J0IHBsYW50SWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvZmFjdG9yeS1pY29uLnN2Zyc7XG5pbXBvcnQgZ3JlZW5DaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2dyZWVuLWNpcmNsZS5zdmcnO1xuaW1wb3J0IHB1bXBTdGF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcHVtcC1zdGF0aW9uLWljb24uc3ZnJztcbmltcG9ydCBjb2xsZWN0b3JJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9tYXAvcGluLXdhdGVyLnN2Zyc7XG5pbXBvcnQgYnJpZ2h0Qmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYnJpZ2h0LWJsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgV1dUUEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL1dXVFAtaWNvbi5zdmcnO1xuaW1wb3J0IHdhdGVySWNvbk5vQmFja2dyb3VuZCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2F0ZXItbm8tYmFja2dyb3VuZC5zdmcnO1xuaW1wb3J0IHdoaXRlUG9pbnQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3doaXRlLXBvaW50LnBuZyc7XG5pbXBvcnQgeyBldmVudHNDb3VudEljb24gfSBmcm9tICcuLi9NYXBVdGlscyc7XG5pbXBvcnQgeyBnZXRQb2ludEljb25CeVR5cGUgfSBmcm9tICcuL1BvaW50SWNvbic7XG5pbXBvcnQgd2F0ZXJSZXVzZUljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2ljb25zL3dhdGVyX3JldXNlLnN2Zyc7XG5cbmV4cG9ydCBjb25zdCBpc0NvbGxlY3RvckZvY3VzZWQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGV2ZW50Py5vYnNlcnZhdGlvbnM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgIHBvaW50LmlkID09PSBldmVudC5vYnNlcnZhdGlvbnNbMF0ucG9pbnRfaWRcbiAgKTtcbn07XG5cbmNvbnN0IGJ1aWxkTWFuaG9sZVRvb3RpcFN0cmluZyA9IChwb2ludDogSVBvaW50KSA9PiB7XG4gIGxldCBzdHJpbmcgPSBgJHtwb2ludC5ncm91cC5uYW1lfSBgO1xuXG4gIGlmIChwb2ludC5ncm91cC50eXBlID09PSAnR3JvdXBzOjpGYWN0b3J5Jykge1xuICAgIHN0cmluZyArPSBgPGJyLz5TZWN0b3ItVEJEOiAke3BvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lfWA7XG4gICAgc3RyaW5nICs9IGA8YnIvPldhdGVyIENvbnN1bXB0aW9uLVRCRDogJHtwb2ludC5ncm91cC53YXRlcl9jb25zdW1wdGlvbl9wZXJfZGF5fWA7XG4gIH0gZWxzZSB7XG4gICAgc3RyaW5nID0gYCR7cG9pbnQubmFtZX1gO1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbi8vIEB0cy1pZ25vcmVcbi8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4vLyBJY29uQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG5leHBvcnQgY29uc3QgY3JlYXRlQnViYmxlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgY29uc3Qgc3VidGl0bGUgPVxuICAgIHBvaW50Lmdyb3VwLnR5cGUgPT09ICdHcm91cHM6OkZhY3RvcnknID8gcG9pbnQuZ3JvdXAuc2VjdG9yX25hbWUgOiAnJztcbiAgbGV0IHBvaW50Q3VzdG9tSWNvbjogTC5NYXJrZXIgPSBMLm1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgIGljb246IGdldFBvaW50SWNvbkJ5VHlwZShcbiAgICAgIHBvaW50Lmdyb3VwLnR5cGUsXG4gICAgICBwb2ludC5uYW1lLFxuICAgICAgc3VidGl0bGUsXG4gICAgICBmYWxzZSxcbiAgICAgIGZhbHNlLFxuICAgICksXG4gICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICB9KTtcbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50SG92ZXJlZCc7XG5cbiAgbGF5ZXJHcm91cC5hZGRMYXllcihwb2ludEN1c3RvbUljb24pO1xuICBpZiAocG9pbnQuZ3JvdXAudHlwZSA9PT0gJ0dyb3Vwczo6RmFjdG9yeScpIHtcbiAgICBiaW5kUG9wdXBUb01hcmtlcihwb2ludCwgcG9pbnRDdXN0b21JY29uKTtcblxuICAgIC8vVGhlIGZvbGxvd2luZyBpcyBiZWluZyBjYWxsZWQgZm9yIGV2ZXJ5IHBvaW50LCB3ZSBzaG91bGQgZG8gdGhhdCBvbiB0aGUgbGF5ZXJHcm91cCBsZXZlbCB3aGljaCB3aWxsIGhhcHBlbiBvbmNlXG4gICAgLy9JdCBpcyBub3RpY2VkIHdoZW4gdGhlcmUgYXJlIHRob3VzYW5kcyBvZiBwb2ludHNcbiAgICBoYW5kbGVNYXJrZXJDbGljayhtYXAsIHBvaW50LCBwb2ludEN1c3RvbUljb24pO1xuICB9XG5cbiAgaWYgKHBvaW50LnJlbGF0ZWRFdmVudHNBbW91bnQpIHtcbiAgICBsZXQgcG9pbnRDdXN0b21JY29uID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IEwuZGl2SWNvbih7XG4gICAgICAgIGNsYXNzTmFtZTogYFxuICAgICAgICAgICR7XG4gICAgICAgICAgICBwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50ID49IDEwMFxuICAgICAgICAgICAgICA/ICdjaXJjbGUtZXZlbnRzLWFtb3VudCBjaXJjbGUtZXZlbnRzLWFtb3VudC0tdHJpZGlnaXQnXG4gICAgICAgICAgICAgIDogJ2NpcmNsZS1ldmVudHMtYW1vdW50J1xuICAgICAgICAgIH0gXG4gICAgICAgICAgJHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50ID4gMiA/ICdhbGVydC1jb2xvcicgOiAnJ31cbiAgICAgICAgICAgIGAsXG4gICAgICAgIGh0bWw6IGA8cD4ke3BvaW50LnJlbGF0ZWRFdmVudHNBbW91bnR9PC9wPmAsXG4gICAgICAgIGljb25BbmNob3I6IGV2ZW50c0NvdW50SWNvbihtYXAuX3pvb20pLmljb25BbmNob3IsXG4gICAgICB9KSxcbiAgICAgIHJpc2VPbkhvdmVyOiBmYWxzZSxcbiAgICAgIG9wYWNpdHk6IGhvdmVyZWQgPyAxIDogMCxcbiAgICB9KTtcblxuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXInO1xuICAgIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ0ljb25OdW1iZXJIb3ZlcmVkJztcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1hbmhvbGVQb2ludCA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQ/LFxuICBsYXllckdyb3VwPyxcbikgPT4ge1xuICBsZXQgcG9pbnRJY29uID0gbmV3IEwuSWNvbih7XG4gICAgaWNvblVybDogd2hpdGVQb2ludCxcbiAgICBpY29uU2l6ZTogWzksIDldLFxuICAgIGljb25BbmNob3I6IFs0LjUsIDQuNV0sXG4gIH0pO1xuICBsZXQgbWFuaG9sZUljb246IGFueSA9IG5ldyBMLk1hcmtlcihtYXJrZXJMb2NhdGlvbiwge1xuICAgIGljb246IHBvaW50SWNvbixcbiAgICByaXNlT25Ib3ZlcjogdHJ1ZSxcbiAgfSk7XG4gIG1hbmhvbGVJY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb3RpcFN0cmluZyhwb2ludCkpO1xuICBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50JztcbiAgbWFuaG9sZUljb25bJ2thbmRvX3BvaW50X3R5cGUnXSA9ICdNYW5ob2xlJztcbiAgaWYgKGhvdmVyZWQpIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludEhvdmVyZWQnO1xuICBsYXllckdyb3VwLmFkZExheWVyKG1hbmhvbGVJY29uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBtYXRjaEljb25Ub1BvaW50ID0gKHBvaW50OiBJUG9pbnQsIGV2ZW50OiBJRXZlbnQpID0+IHtcbiAgc3dpdGNoIChwb2ludC5ncm91cC50eXBlKSB7XG4gICAgY2FzZSAnR3JvdXBzOjpGYWN0b3J5JzpcbiAgICAgIGlmIChjb21iaW5lZEZhY3RvcnlJY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZEZhY3RvcnlJY29uO1xuICAgIGNhc2UgJ0dyb3Vwczo6UHVtcFN0YXRpb24nOlxuICAgICAgaWYgKGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbjtcbiAgICBjYXNlICdHcm91cHM6Oldhc3Rld2F0ZXJUcmVhdG1lbnRQbGFudCc6XG4gICAgICBpZiAoY29tYmluZWRXV1RQSWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRXV1RQSWNvbjtcblxuICAgIGNhc2UgJ0dyb3Vwczo6Q29sbGVjdG9ycyc6XG4gICAgICBpZiAoaXNDb2xsZWN0b3JGb2N1c2VkKHBvaW50LCBldmVudCkpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogcmVkUGluUmVkU2hhZG93LFxuICAgICAgICAgICAgaWNvblNpemU6IFswLCAwXSxcbiAgICAgICAgICAgIGljb25BbmNob3I6IFszMCwgNTJdLFxuICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgTC5pY29uKHtcbiAgICAgICAgICAgIGljb25Vcmw6IHdhdGVySWNvbk5vQmFja2dyb3VuZCxcbiAgICAgICAgICAgIGljb25TaXplOiBbMCwgMF0sXG5cbiAgICAgICAgICAgIGljb25BbmNob3I6IFsyMiwgNDRdLFxuICAgICAgICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRDb2xsZWN0b3JzSWNvbjtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHN0YW5kYXJkQmFja2dyb3VuZCA9IChcbiAgc2Vjb25kYXJ5OiBib29sZWFuID0gZmFsc2UsXG4gIHRoaXJkOiBib29sZWFuID0gZmFsc2UsXG4pID0+IHtcbiAgcmV0dXJuIEwuaWNvbih7XG4gICAgaWNvblVybDogd2hpdGVQaW5CbGFja1NoYWRvdyxcbiAgICBpY29uU2l6ZTogc2Vjb25kYXJ5ID8gWzAsIDBdIDogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IHNlY29uZGFyeSAmJiB0aGlyZCA/IFstMiwgMTldIDogc2Vjb25kYXJ5ID8gWy0yLCA0NF0gOiBbMjAsIDQyXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkRmFjdG9yeUljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogeWVsbG93Q2lyY2xlVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzEwLjcsIDMzLjddLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogcGxhbnRJY29uVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzUsIDMwXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkUHVtcFN0YXRpb25JY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGdyZWVuQ2lyY2xlVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzEwLjcsIDMzLjddLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogcHVtcFN0YXRpb25JY29uVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzcsIDMyXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkQ29sbGVjdG9yc0ljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogY29sbGVjdG9ySWNvbixcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuXG4gICAgaWNvbkFuY2hvcjogWzI1LCA1MF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZFdXVFBJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGJyaWdodEJsdWVDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBXV1RQSWNvblVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFs4LCAzMV0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RlZEJhY2tncm91bmQgPSAoKSA9PiB7XG4gIHJldHVybiBMLmljb24oe1xuICAgIGljb25Vcmw6IHJlZFBpblJlZFNoYWRvdyxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgcmV0dXJuIEwuaWNvbih7XG4gICAgaWNvblVybDogd2hpdGVQaW5SZWRTaGFkb3csXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMzIsIDU0XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlID0gKGV2ZW50OiBJRXZlbnQsIHBvaW50OiBJUG9pbnQpID0+IHtcbiAgbGV0IHNvdXJjZTtcblxuICBpZiAoZXZlbnQgIT09IG51bGwgJiYgZXZlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIHNvdXJjZSA9IGV2ZW50LnNvdXJjZXMuZmlsdGVyKChzb3VyY2UpID0+IHNvdXJjZS5wb2ludF9pZCA9PT0gcG9pbnQuaWQpWzBdO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50ICE9PSBudWxsICYmIHNvdXJjZSAmJiBldmVudC5zZWxlY3RlZF9zb3VyY2UgPT09IHNvdXJjZS5wb2ludF9pZDtcbn07XG5cbmV4cG9ydCBjb25zdCBtYXJrZXJCZWxvbmdzVG9Tb3VyY2UgPSAoZXZlbnQ6IElFdmVudCwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICByZXR1cm4gKFxuICAgIGV2ZW50ICE9PSBudWxsICYmXG4gICAgZXZlbnQuc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLnBvaW50X2lkID09PSBwb2ludC5pZClbMF1cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTYW1wbGluZ0ljb25Qb2ludCA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBzZWNvbmRhcnlJY29uOiBib29sZWFuLFxuICBtYXAsXG4gIHBvaW50OiBJUG9pbnQsXG4gIGV2ZW50OiBJRXZlbnQsXG4gIGhvdmVyZWQ/LFxuICBsYXllckdyb3VwPyxcbikgPT4ge1xuICAvLyBpY29uU2l6ZTogW3dpZHRoLCBoZWlnaHRdLFxuICAvLyBJY29uIEFuY2hvcjogWygtcmlnaHQpKCtsZWZ0KSwgKC1kb3duKSgrdXApXVxuICBsZXQgc2FtcGxpbmdJY29uID0gW1xuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBibHVlQ2lyY2xlVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy03LCAxNV0gOiBbMTAuNywgMzMuN10sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHNhbXBsaW5nSWNvblVSTCxcbiAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzAsIDBdIDogWzAsIDBdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstOCwgMTNdIDogWzUsIDMwXSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgXTtcblxuICBsZXQgdGhpcmRJY29uID0gZmFsc2U7XG4gIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlyZEljb24gPSB0cnVlO1xuICAgIHNhbXBsaW5nSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZChzZWNvbmRhcnlJY29uLCB0aGlyZEljb24pKTtcbiAgfVxuXG4gIHNhbXBsaW5nSWNvbi5mb3JFYWNoKChpY29uLCBpbmRleCkgPT4ge1xuICAgIGxldCBwb2ludEN1c3RvbUljb246IGFueSA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBpY29uLFxuICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgIH0pO1xuICAgIHBvaW50Q3VzdG9tSWNvbi5iaW5kVG9vbHRpcChidWlsZE1hbmhvbGVUb290aXBTdHJpbmcocG9pbnQpKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2luZGV4X29iamVjdCddID0gaW5kZXg7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19mZXdfbGF5ZXJfaWNvbiddID0gdHJ1ZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3NlY29uZGFyeSddID0gdGhpcmRJY29uID8gZmFsc2UgOiBzZWNvbmRhcnlJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fdGhpcmQnXSA9IHRoaXJkSWNvbjtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZyc7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnU2FtcGxpbmdIb3ZlcmVkJztcbiAgICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBvYnNlcnZhdGlvbkljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHBpbmtDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDQwXSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogb2JzZXJ2YXRpb25JY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAzOF0gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoc2Vjb25kYXJ5SWNvbikpO1xuICB9XG5cbiAgb2JzZXJ2YXRpb25JY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb3RpcFN0cmluZyhwb2ludCkpO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9faW5kZXhfb2JqZWN0J10gPSBpbmRleDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2Zld19sYXllcl9pY29uJ10gPSB0cnVlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fc2Vjb25kYXJ5J10gPSBzZWNvbmRhcnlJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fdGhpcmQnXSA9IGZhbHNlO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ09ic2VydmF0aW9uJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdPYnNlcnZhdGlvbkhvdmVyZWQnO1xuICAgIGxheWVyR3JvdXAuYWRkTGF5ZXIocG9pbnRDdXN0b21JY29uKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlU2FtcGxpbmdJY29ucyA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBldmVudDogSUV2ZW50LFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQsXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIGxldCBzYW1wbGVkUG9pbnRJZHMgPSBldmVudC5zYW1wbGluZ3MubWFwKChzKSA9PiBzLnBvaW50X2lkKTtcbiAgaWYgKFxuICAgIGV2ZW50ICE9PSBudWxsICYmXG4gICAgZXZlbnQuc2FtcGxpbmdzLmxlbmd0aCAhPT0gMCAmJlxuICAgIHNhbXBsZWRQb2ludElkcy5pbmNsdWRlcyhwb2ludC5pZClcbiAgKSB7XG4gICAgY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQoXG4gICAgICBtYXJrZXJMb2NhdGlvbixcbiAgICAgIG1hdGNoSWNvblRvUG9pbnQocG9pbnQsIGV2ZW50KSAhPT0gbnVsbCxcbiAgICAgIG1hcCxcbiAgICAgIHBvaW50LFxuICAgICAgZXZlbnQsXG4gICAgICBob3ZlcmVkLFxuICAgICAgbGF5ZXJHcm91cCxcbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcG9wdXBDb250ZW50ID0gKG9iczogYW55LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChvYnMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LXBvcHVwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWdyYXBoLWljb24gcG9wdXAtZ3JhcGgtaWNvbi0ke3BvaW50LmlkfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7R3JhcGhJY29ufVwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zaXRlLW5hbWVcIj48Yj4ke3BvaW50Lmdyb3VwLm5hbWV9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxoci8+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2VjdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtvYnMuaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtHcmFwaEljb259XCIvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NpdGUtbmFtZVwiPjxiPiR7XG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAubmFtZVxuICAgICAgICAgICAgICAgICAgICB9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdHlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdwb3B1cC1jb250ZW50X19zZXZlcml0eS0tJyArIG9icy5zZXZlcml0eVxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXRpZXMuJHtvYnMuc2V2ZXJpdHl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwicG9wdXAtY29udGVudF9faHJcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19kaXNjaGFyZ2UtdGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LXBcIj4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuZmlyc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwiZmlyc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3Lmxhc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwibGFzdC1zZWVuLXBvcHVwXCI+PC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICB9XG59O1xuXG5sZXQgc2V0SWNvbiA9IChlbGVtZW50LCBjbGlja2VkLCBwb2ludCkgPT4ge1xuICBlbGVtZW50LnNldEljb24oXG4gICAgZ2V0UG9pbnRJY29uQnlUeXBlKFxuICAgICAgcG9pbnQuZ3JvdXAudHlwZSxcbiAgICAgIHBvaW50Lm5hbWUsXG4gICAgICBwb2ludC5ncm91cC5zZWN0b3JfbmFtZSxcbiAgICAgIGNsaWNrZWQsXG4gICAgICBmYWxzZSxcbiAgICApLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZU1hcmtlckNsaWNrID0gKG1hcCwgcG9pbnQsIHBvaW50Q3VzdG9tSWNvbikgPT4ge1xuICBtYXAub24oJ3pvb21zdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICBtYXAuY2xvc2VQb3B1cCgpO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ3BvcHVwY2xvc2UnLCAoKSA9PiB7XG4gICAgc2V0SWNvbihwb2ludEN1c3RvbUljb24sIGZhbHNlLCBwb2ludCk7XG4gIH0pO1xuXG4gIHBvaW50Q3VzdG9tSWNvbi5vbigncG9wdXBvcGVuJywgKCkgPT4ge1xuICAgIHNldEljb24ocG9pbnRDdXN0b21JY29uLCB0cnVlLCBwb2ludCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGJpbmRQb3B1cFRvTWFya2VyID0gKHBvaW50LCBsYXllckdyb3VwKSA9PiB7XG4gIGxldCBjb250ZW50ID0gYFxuICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudCc+XG4gICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9faGVhZGVyJz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRfX2hlYWRlcl9fdGl0bGVzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXJfX3RpdGxlc19fdGl0bGUnPiR7XG4gICAgICAgICAgICAgICAgICBwb2ludC5uYW1lXG4gICAgICAgICAgICAgICAgfTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9faGVhZGVyX190aXRsZXNfX3N1YnRpdGxlJz4ke1xuICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAuc2VjdG9yX25hbWVcbiAgICAgICAgICAgICAgICB9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keSc+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW0nPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9faWNvbic+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPScke3dhdGVyUmV1c2VJY29ufScgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX3RpdGxlcyc+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2JvZHlfX2l0ZW1fX3RpdGxlc19fdGl0bGUnPiR7XG4gICAgICAgICAgICAgICAgICAgIHBvaW50Lmdyb3VwLndhdGVyX2NvbnN1bXB0aW9uX3Blcl9kYXlcbiAgICAgICAgICAgICAgICAgIH0gJHtpMThuLnQoJ21pbGxpb25fZ2FsbG9uc19kYXknKX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzX19zdWJ0aXRsZSc+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICd3YXRlcl9kaXNjaGFyZ2UnLFxuICAgICAgICAgICAgICAgICAgKX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgO1xuXG4gIGxheWVyR3JvdXAuYmluZFBvcHVwKGNvbnRlbnQsIHtcbiAgICBjbGFzc05hbWU6ICdwb2ludC1tYXJrZXItcG9wdXAnLFxuICAgIG1pbldpZHRoOiAnMjE0cHgnLFxuICAgIG1heFdpZHRoOiAnMjE0cHgnLFxuICAgIGNsb3NlQnV0dG9uOiBmYWxzZSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cCA9IChtYXAsIGxheWVyR3JvdXApID0+IHtcbiAgaWYgKG1hcC5oYXNMYXllcihsYXllckdyb3VwKSkge1xuICAgIG1hcC5yZW1vdmVMYXllcihsYXllckdyb3VwKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZExheWVyR3JvdXAgPSAobWFwLCBsYXllckdyb3VwKSA9PiB7XG4gIGlmICghbWFwLmhhc0xheWVyKGxheWVyR3JvdXApKSB7XG4gICAgbWFwLmFkZExheWVyKGxheWVyR3JvdXApO1xuICB9IGVsc2Uge1xuICAgIHJlbW92ZUxheWVyR3JvdXAobWFwLCBsYXllckdyb3VwKTtcbiAgICBhZGRMYXllckdyb3VwKG1hcCwgbGF5ZXJHcm91cCk7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQ0EsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQTJDLElBQUFFLFdBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUFBLElBQUFHLGFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUFBLElBQUFJLFdBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUFBLElBQUFLLGdCQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFPM0MsSUFBQU0sZ0JBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLGtCQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxvQkFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQXlGLElBQUFTLGFBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUFB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