@kando-env/kando-ui 1.2.376 → 1.2.378
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.
- package/lib/Router.js +73 -36
- package/lib/Widgets/EventsCarousel/EventsCarousel.js +35 -25
- package/lib/Widgets/EventsRow/EventsRow.js +39 -27
- package/lib/Widgets/Map/GraphUtils.js +3 -3
- package/lib/Widgets/Map/Map.js +94 -72
- package/lib/Widgets/Map/MapUtils.js +61 -64
- package/lib/Widgets/Map/areas/AreaPolygon.js +77 -53
- package/lib/Widgets/Map/areas/AreaPolygons.js +24 -23
- package/lib/Widgets/Map/areas/AreaUtils.js +46 -47
- package/lib/Widgets/Map/areas/Patterns.js +4 -4
- package/lib/Widgets/Map/edges/Edge.js +35 -31
- package/lib/Widgets/Map/edges/Edges.js +23 -19
- package/lib/Widgets/Map/edges/arrows/Arrows.js +44 -23
- package/lib/Widgets/Map/events/Event.js +17 -17
- package/lib/Widgets/Map/events/EventIndicator.js +60 -65
- package/lib/Widgets/Map/events/EventPath.js +22 -24
- package/lib/Widgets/Map/events/EventUtils.js +80 -60
- package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +18 -17
- package/lib/Widgets/Map/events/PointOfEvent.js +34 -29
- package/lib/Widgets/Map/events/PointsForSpecificEvent.js +37 -30
- package/lib/Widgets/Map/events/Snail.js +20 -19
- package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +86 -93
- package/lib/Widgets/Map/map/FloatingGraph.js +18 -22
- package/lib/Widgets/Map/map/GraphDateButton.js +17 -25
- package/lib/Widgets/Map/matchGraph/MatchGraph.js +12 -13
- package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +15 -16
- package/lib/Widgets/Map/points/PointIcon.js +15 -22
- package/lib/Widgets/Map/points/PointMarker.js +87 -71
- package/lib/Widgets/Map/points/PointMarkers.js +66 -45
- package/lib/Widgets/Map/points/PointUtils.js +83 -145
- package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +48 -30
- package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +10 -29
- package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +12 -11
- package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +3 -3
- package/lib/Widgets/MostPolluting/Areas/Areas.js +60 -31
- package/lib/Widgets/MostPolluting/Areas/areas.mock.js +3 -3
- package/lib/Widgets/MostPolluting/Areas/styles.js +3 -3
- package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +8 -11
- package/lib/Widgets/MostPolluting/Factories/Factories.js +70 -39
- package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +18 -15
- package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +8 -8
- package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +10 -12
- package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +3 -3
- package/lib/Widgets/MostPolluting/Factories/factories.mock.js +2 -2
- package/lib/Widgets/MostPolluting/Factories/styles.js +3 -3
- package/lib/Widgets/MostPolluting/MostPolluting.js +42 -23
- package/lib/Widgets/MostPolluting/MostPolluting.stories.js +22 -18
- package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +4 -6
- package/lib/Widgets/MostPolluting/ShowMore/styles.js +4 -6
- package/lib/Widgets/MostPolluting/assets/index.js +10 -10
- package/lib/Widgets/MostPolluting/components/ChangePercent.js +13 -19
- package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +30 -35
- package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +35 -45
- package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +35 -39
- package/lib/Widgets/MostPolluting/components/PotentialImpact.js +27 -28
- package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +50 -54
- package/lib/Widgets/MostPolluting/styles.js +3 -3
- package/lib/Widgets/PotentialImpactSummary/Back/Back.js +5 -7
- package/lib/Widgets/PotentialImpactSummary/Icon.js +6 -8
- package/lib/Widgets/PotentialImpactSummary/index.js +27 -19
- package/lib/Widgets/PotentialImpactSummary/index.test.js +52 -47
- package/lib/Widgets/PotentialImpactSummary/styles.js +7 -7
- package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +7 -9
- package/lib/Widgets/QualitySummary/PieChart/PieChart.js +17 -22
- package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +32 -35
- package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +24 -26
- package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +37 -35
- package/lib/Widgets/QualitySummary/QualitySummary.js +13 -9
- package/lib/Widgets/QualitySummary/qualitySummary.mock.js +4 -4
- package/lib/Widgets/QualitySummary/styles.js +15 -23
- package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +13 -12
- package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +26 -27
- package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +24 -29
- package/lib/Widgets/UtilityInformation/UtilityInformation.js +44 -30
- package/lib/Widgets/UtilityInformation/styles.js +25 -34
- package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +3 -3
- package/lib/assets/icons/TopNavbar/index.js +6 -6
- package/lib/assets/icons/TrendSvg.js +6 -6
- package/lib/assets/icons/index.js +15 -15
- package/lib/assets/icons/kandoStepper/index.js +5 -5
- package/lib/assets/icons/siteTypes/index.js +1 -1
- package/lib/components/ApplyButton/ApplyButton.js +9 -9
- package/lib/components/Backdrop/Backdrop.js +4 -6
- package/lib/components/ContentLoader/ContentLoader.js +9 -11
- package/lib/components/ContentLoader/index.js +1 -1
- package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +12 -13
- package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +5 -3
- package/lib/components/CustomInputs/DoubleTabs/styles.js +12 -20
- package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +20 -13
- package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +4 -6
- package/lib/components/CustomInputs/Search/Search.js +63 -42
- package/lib/components/CustomInputs/Select/Select.js +58 -45
- package/lib/components/CustomInputs/Select/Select.stories.js +6 -4
- package/lib/components/DamageType/DamageType.js +57 -35
- package/lib/components/DataLoaderError/DataLoaderError.js +6 -8
- package/lib/components/DischargeHeatmap/DischargeHeatmap.js +10 -9
- package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +71 -70
- package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +37 -27
- package/lib/components/DischargeHeatmap/HighchartsOptions.js +12 -10
- package/lib/components/DischargeHeatmap/mocks/handlers.js +3 -3
- package/lib/components/DischargeHeatmap/popupText.js +10 -10
- package/lib/components/DischargeHeatmap/titles.js +3 -3
- package/lib/components/ErrorBoundary.js +41 -27
- package/lib/components/Events/Events.js +58 -41
- package/lib/components/Graph/Graph.js +97 -70
- package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +21 -17
- package/lib/components/Header/DoubleTabs/DoubleTabs.js +33 -25
- package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +5 -3
- package/lib/components/Header/DoubleTabs/styles.js +4 -4
- package/lib/components/Header/Header.js +2 -2
- package/lib/components/Header/Header.stories.js +5 -3
- package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +108 -90
- package/lib/components/Header/InfoBar/InfoBar.js +103 -74
- package/lib/components/Header/InfoBar/Search/Control.js +9 -9
- package/lib/components/Header/InfoBar/Search/GroupLabel.js +5 -7
- package/lib/components/Header/InfoBar/Search/Search.js +21 -16
- package/lib/components/Header/InfoBar/Search/SearchContainer.js +33 -21
- package/lib/components/Header/InfoBar/Search/searchStyle.js +49 -41
- package/lib/components/Header/InfoBar/TimeFilter.js +14 -11
- package/lib/components/Header/KandoNavbar/KandoNavbar.js +89 -64
- package/lib/components/Header/Slideshow/Slideshow.js +90 -68
- package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +4 -6
- package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +23 -21
- package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +18 -18
- package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +43 -37
- package/lib/components/Header/Toolbar/Toolbar.js +74 -55
- package/lib/components/InfoBar/InfoBar.js +23 -10
- package/lib/components/InfoBar/InfoBar.stories.js +5 -3
- package/lib/components/KandoModal/KandoModal.js +41 -27
- package/lib/components/Link.js +7 -8
- package/lib/components/Links/CustomRedirect/CustomRedirect.js +8 -9
- package/lib/components/Links/StyledLink/StyledLink.js +12 -12
- package/lib/components/Links/StyledNavLink/StyledNavLink.js +10 -11
- package/lib/components/LiveEvents/CarouselSlide.js +7 -9
- package/lib/components/LiveEvents/LiveEvents.js +3 -5
- package/lib/components/LoaderByPercent/LoaderByPercent.js +29 -37
- package/lib/components/Map/Map.js +23 -20
- package/lib/components/Modal/Modal.js +9 -9
- package/lib/components/NarrowHeader.js +31 -17
- package/lib/components/PointInfo/PointInfo.js +17 -19
- package/lib/components/PopupModal/PopupModal.js +16 -12
- package/lib/components/PopupModal/PopupModal.stories.js +19 -15
- package/lib/components/Sector/Sector.js +6 -8
- package/lib/components/Sector/Sector.test.js +20 -19
- package/lib/components/Sector/sectorIcons.js +2 -2
- package/lib/components/SevereEvent/Eta/Eta.js +52 -49
- package/lib/components/SevereEvent/Eta/styles.js +6 -10
- package/lib/components/SevereEvent/SevereEvent.js +37 -30
- package/lib/components/Spinner/Spinner.js +8 -8
- package/lib/components/Spinner/Spinner.stories.js +6 -4
- package/lib/components/Spinner/styles.js +14 -22
- package/lib/components/Tabs/Tabs.js +29 -21
- package/lib/components/Tabs/Tabs.stories.js +6 -4
- package/lib/components/Tabs/assets/index.js +5 -5
- package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +15 -12
- package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +51 -40
- package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +31 -19
- package/lib/components/TimeRangeSelector/TimeRangeHelper.js +25 -20
- package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +13 -13
- package/lib/components/TimeRangeSelector/TimeRangeList.js +24 -23
- package/lib/components/TimeRangeSelector/TimeRangeOptions.js +25 -17
- package/lib/components/TimeRangeSelector/TimeRangeSelector.js +32 -31
- package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +6 -4
- package/lib/components/TimeRangeSelector/constants.js +3 -3
- package/lib/components/Toggle/Toggle.js +17 -12
- package/lib/components/TrendGraph/TrendGraph.js +39 -23
- package/lib/components/TrendGraphNVL/TrendGraphNVL.js +33 -27
- package/lib/development-environment/index.js +12 -8
- package/lib/development-environment/mock/browser.js +4 -2
- package/lib/development-environment/mock/get.js +10 -8
- package/lib/development-environment/mock/handlers.js +2 -2
- package/lib/development-environment/mock/mockBus.js +4 -4
- package/lib/development-environment/mock/mockObjects/area-trends-graph.js +2 -2
- package/lib/development-environment/mock/mockObjects/areaInformation.js +2 -2
- package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +2 -2
- package/lib/development-environment/mock/mockObjects/areaSitesData.js +2 -2
- package/lib/development-environment/mock/mockObjects/areasJson.js +2 -2
- package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +2 -2
- package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +2 -2
- package/lib/development-environment/mock/mockObjects/data-menuData.js +2 -2
- package/lib/development-environment/mock/mockObjects/data-search.js +2 -2
- package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +2 -2
- package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +2 -2
- package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +2 -2
- package/lib/development-environment/mock/mockObjects/eventsJson.js +2 -2
- package/lib/development-environment/mock/mockObjects/metascore.js +2 -2
- package/lib/development-environment/mock/mockObjects/permissionsJson.js +2 -2
- package/lib/development-environment/mock/mockObjects/pointsJson.js +2 -2
- package/lib/development-environment/mock/mockObjects/site-info.js +2 -2
- package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +2 -2
- package/lib/development-environment/togly/ToglyDashboard.js +22 -13
- package/lib/development-environment/togly/ToglyItem.js +31 -36
- package/lib/development-environment/togly/init.js +2 -2
- package/lib/development-environment/togly/macro.js +10 -14
- package/lib/development-environment/togly/useDoubleKeyDown.js +9 -7
- package/lib/development-environment/togly/useLocalStorage.js +18 -13
- package/lib/hooks/useApi.js +55 -19
- package/lib/hooks/useApiWithDashboardQuery.js +49 -30
- package/lib/hooks/useClickOutside.js +3 -3
- package/lib/hooks/useInitializeHeaders.js +5 -5
- package/lib/hooks/useKandoFetch.js +29 -16
- package/lib/hooks/useMap.js +34 -22
- package/lib/hooks/useNavContext.js +26 -22
- package/lib/hooks/useRemoveExistingLayers.js +6 -6
- package/lib/hooks/useUpdateEventBodyTail.js +17 -13
- package/lib/hooks/useUserTimeZone.js +30 -33
- package/lib/hooks/useUserTimeZone.test.js +22 -19
- package/lib/hooks/useWindowSize.js +14 -7
- package/lib/i18n/en.json +5 -0
- package/lib/i18n/he.json +5 -0
- package/lib/index.js +12 -11
- package/lib/macros/getVersion.js +3 -3
- package/lib/pages/AreaPage/AreaPage.js +67 -34
- package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +17 -16
- package/lib/pages/AreaPage/Dashboard/Dashboard.js +34 -29
- package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +25 -17
- package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +4 -4
- package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +8 -8
- package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +11 -11
- package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +3 -3
- package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +2 -2
- package/lib/pages/AreaPage/Dashboard/Sites/styles.js +4 -4
- package/lib/pages/AssessmentPage/AssessmentPage.js +46 -40
- package/lib/pages/CannyWidget/Feedback.js +13 -13
- package/lib/pages/CovidPage/CovidPage.js +13 -8
- package/lib/pages/CovidPage/components/Body.js +27 -25
- package/lib/pages/CovidPage/components/Map.js +39 -29
- package/lib/pages/CovidPage/components/Sidebar.js +15 -16
- package/lib/pages/CovidPage/components/Summary.js +27 -20
- package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +33 -27
- package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +73 -51
- package/lib/pages/CovidPage/components/areas/Area.js +40 -29
- package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +46 -55
- package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +35 -32
- package/lib/pages/CovidPage/components/areas/AreasList.js +46 -34
- package/lib/pages/CovidPage/components/areas/Sort.js +14 -11
- package/lib/pages/CovidPage/components/nvlStatusHelper.js +11 -11
- package/lib/pages/DashboardMap/AreaCard.js +28 -28
- package/lib/pages/DashboardMap/AssessmentIcon.js +7 -8
- package/lib/pages/DashboardMap/Capacity.js +80 -31
- package/lib/pages/DashboardMap/FactoryCard.js +29 -33
- package/lib/pages/DashboardMap/HighchartsOptions.js +4 -5
- package/lib/pages/DashboardMap/List.js +112 -74
- package/lib/pages/DashboardMap/ListContext.js +19 -15
- package/lib/pages/DashboardMap/Loader.js +2 -2
- package/lib/pages/DashboardMap/SeverityBadge.js +18 -10
- package/lib/pages/DashboardMap/WWTPMap.js +103 -80
- package/lib/pages/DashboardMap/WaterDischarge.js +10 -10
- package/lib/pages/DashboardMap/Widget.js +71 -54
- package/lib/pages/DashboardMap/utils.js +65 -48
- package/lib/pages/EventsPage/Body/Body.js +15 -20
- package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +19 -17
- package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +35 -27
- package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +6 -8
- package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +7 -11
- package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +30 -21
- package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +64 -53
- package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +31 -19
- package/lib/pages/EventsPage/EventsPage.js +10 -7
- package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +38 -26
- package/lib/pages/EventsPage/events/MoreInfo.js +16 -17
- package/lib/pages/EventsPage/events/Sidebar.js +16 -21
- package/lib/pages/EventsPage/events/event_info/Contaminants/Contaminants.js +7 -7
- package/lib/pages/EventsPage/events/event_info/Contaminants/ContaminantsList.js +20 -17
- package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +35 -30
- package/lib/pages/EventsPage/events/event_info/EventDetails.js +37 -40
- package/lib/pages/EventsPage/events/event_info/EventInfo.js +42 -43
- package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +4 -4
- package/lib/pages/EventsPage/events/event_info/EventSection.js +19 -17
- package/lib/pages/EventsPage/events/event_info/EventSection.test.js +38 -43
- package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +47 -39
- package/lib/pages/EventsPage/events/event_info/Header/Header.js +4 -6
- package/lib/pages/EventsPage/events/event_info/Header/HeaderContainer.js +33 -30
- package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +6 -6
- package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +36 -29
- package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +6 -4
- package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionAssessment.js +10 -10
- package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionTypesList.js +9 -7
- package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +21 -22
- package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResult.js +19 -12
- package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResultButton.js +3 -5
- package/lib/pages/EventsPage/events/event_info/SamplingList/SamplingDetails.js +9 -11
- package/lib/pages/EventsPage/events/event_info/SamplingList/Samplings.js +26 -22
- package/lib/pages/EventsPage/events/event_info/SeverityScore/ScoreExplanation.js +8 -12
- package/lib/pages/EventsPage/events/event_info/SeverityScore/SeverityScore.js +7 -7
- package/lib/pages/EventsPage/events/event_info/SourceDetails/Confidence.js +4 -6
- package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.js +2 -2
- package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.test.js +10 -12
- package/lib/pages/EventsPage/events/event_info/SourceDetails/IconAndTitles.js +8 -10
- package/lib/pages/EventsPage/events/event_info/SourceDetails/MoreInfoButton.js +12 -10
- package/lib/pages/EventsPage/events/event_info/SourceDetails/OtherSources.js +3 -5
- package/lib/pages/EventsPage/events/event_info/SourceDetails/PotentialSources.js +5 -7
- package/lib/pages/EventsPage/events/event_info/SourceDetails/SingleSource.js +5 -7
- package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceCardBody.js +4 -6
- package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.js +9 -11
- package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.test.js +15 -15
- package/lib/pages/EventsPage/events/event_info/SourceDetails/WaterDischarge.js +6 -6
- package/lib/pages/EventsPage/events/event_info/Timelines/DischargeBox.js +5 -7
- package/lib/pages/EventsPage/events/event_info/Timelines/EarlyWarning.js +15 -17
- package/lib/pages/EventsPage/events/event_info/Timelines/LiveStatusBadge.js +4 -4
- package/lib/pages/EventsPage/events/event_info/Timelines/SeenBox.js +8 -10
- package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.js +11 -16
- package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.test.js +8 -9
- package/lib/pages/EventsPage/events/event_info/Timelines/Titles.js +2 -2
- package/lib/pages/EventsPage/events/event_info/Timelines/style.js +3 -3
- package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +38 -25
- package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +36 -29
- package/lib/pages/EventsPage/events/event_info/samplingsOld/Sampling.js +9 -11
- package/lib/pages/EventsPage/events/event_info/samplingsOld/Samplings.js +17 -15
- package/lib/pages/EventsPage/events/event_info/sources/Source.js +30 -27
- package/lib/pages/EventsPage/events/event_info/sources/Sources.js +26 -23
- package/lib/pages/EventsPage/events/event_info/styles.js +12 -20
- package/lib/pages/EventsPage/events/events_list/EventItem.js +19 -18
- package/lib/pages/EventsPage/events/events_list/EventUtils.js +10 -10
- package/lib/pages/EventsPage/events/events_list/EventsList.js +145 -124
- package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +55 -40
- package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +115 -79
- package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +77 -60
- package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +41 -38
- package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +36 -29
- package/lib/pages/EventsPage/events/events_list/Sort.js +16 -13
- package/lib/pages/ImportFileWizard/FileUploadRespones.js +20 -13
- package/lib/pages/ImportFileWizard/ImportButtomButtons.js +4 -6
- package/lib/pages/ImportFileWizard/ImportFile.js +22 -20
- package/lib/pages/ImportFileWizard/ResponseBody.js +33 -24
- package/lib/pages/ImportFileWizard/ValidationForm.js +22 -23
- package/lib/pages/ImportFileWizard/ValidationResponse.js +21 -21
- package/lib/pages/ImportFileWizard/importFileUtils.js +1 -1
- package/lib/pages/ImportGisPage/ImportGisContainer.js +24 -21
- package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +23 -21
- package/lib/pages/ImportGisPage/importGisUtils.js +21 -13
- package/lib/pages/ImportGisProcess/index.js +15 -12
- package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +12 -7
- package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +19 -17
- package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +3 -3
- package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +65 -56
- package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +8 -6
- package/lib/pages/NotificationsPage/Notification/Notification.js +12 -16
- package/lib/pages/NotificationsPage/Notifications.mock.js +2 -2
- package/lib/pages/NotificationsPage/Notifications.stories.js +6 -4
- package/lib/pages/NotificationsPage/NotificationsPage.js +36 -18
- package/lib/pages/NotificationsPage/assets/index.js +9 -9
- package/lib/pages/NotificationsPageV2/NotificationsPage.js +97 -71
- package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +63 -94
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/EventType.js +16 -14
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSendVia.js +16 -18
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSensors.js +21 -17
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSources.js +21 -17
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationTags.js +22 -18
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +69 -83
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/WaterAuthoritySelection.js +22 -18
- package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +74 -74
- package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +95 -97
- package/lib/pages/NotificationsPageV2/notificationUtils.js +48 -54
- package/lib/pages/OldSitePage/OldSitePage.js +132 -57
- package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +5 -5
- package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +5 -3
- package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +6 -8
- package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +20 -18
- package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +7 -9
- package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +18 -12
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +12 -16
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +5 -3
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +12 -18
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +63 -51
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +7 -9
- package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +53 -29
- package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +4 -4
- package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +12 -10
- package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +10 -11
- package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +11 -10
- package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +28 -32
- package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +29 -27
- package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +4 -4
- package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +12 -18
- package/lib/pages/ProfilePage/Container.js +2 -2
- package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +44 -28
- package/lib/pages/ProfilePage/ProfilePage.js +237 -120
- package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +33 -25
- package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +16 -19
- package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +30 -28
- package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +117 -57
- package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +20 -17
- package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +10 -12
- package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +41 -39
- package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +26 -25
- package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +16 -16
- package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +15 -13
- package/lib/pages/SamplingsPage/NavigationDropdown.js +32 -45
- package/lib/pages/SamplingsPage/NewSamplingAction.js +100 -76
- package/lib/pages/SamplingsPage/SamplingMobileModal.js +101 -129
- package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +22 -21
- package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +22 -34
- package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +59 -36
- package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +18 -15
- package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +7 -9
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +194 -110
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +55 -49
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +43 -47
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +45 -49
- package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +20 -19
- package/lib/pages/SamplingsPage/SamplingProperties/styles.js +3 -3
- package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +6 -10
- package/lib/pages/SamplingsPage/SamplingsMobileItem.js +54 -58
- package/lib/pages/SamplingsPage/SamplingsMobileList.js +28 -21
- package/lib/pages/SamplingsPage/SamplingsPage.js +33 -27
- package/lib/pages/SamplingsPage/SamplingsPageContainer.js +58 -50
- package/lib/pages/SamplingsPage/samplingsPageUtils.js +76 -68
- package/lib/pages/SitePage/DischargePattern/DischargePattern.js +4 -6
- package/lib/pages/SitePage/PollutionContributor/PollutionContributor.js +13 -14
- package/lib/pages/SitePage/PollutionContributor/PollutionContributorContainer.js +13 -10
- package/lib/pages/SitePage/PollutionContributor/contributorUtils.js +16 -16
- package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +5 -3
- package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +10 -14
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +8 -9
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +23 -26
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +17 -14
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +32 -36
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +7 -9
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +24 -15
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +12 -16
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +5 -3
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +12 -18
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +70 -58
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +7 -9
- package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +26 -15
- package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +5 -5
- package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +12 -10
- package/lib/pages/SitePage/SamplingParameters/body/Body.js +9 -9
- package/lib/pages/SitePage/SamplingParameters/body/BodyContainer.js +37 -29
- package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +11 -11
- package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +11 -10
- package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +59 -60
- package/lib/pages/SitePage/SamplingParameters/dataParser.js +39 -30
- package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +9 -11
- package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +4 -4
- package/lib/pages/SitePage/SamplingParameters/styles/styles.js +12 -18
- package/lib/pages/SitePage/SiteInformation/EmptyState.js +7 -11
- package/lib/pages/SitePage/SiteInformation/SiteInformation.js +48 -41
- package/lib/pages/SitePage/SitePage.js +84 -41
- package/lib/pages/UploadLabResult/index.js +13 -13
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +35 -26
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +8 -6
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +8 -9
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +5 -3
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +48 -47
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +6 -10
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +4 -4
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +6 -4
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +12 -13
- package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +12 -15
- package/lib/pages/UtilityDashboardPage/TopBar/constants.js +7 -7
- package/lib/pages/UtilityDashboardPage/TopBar/styles.js +2 -2
- package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +38 -23
- package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +30 -26
- package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +18 -17
- package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +13 -7
- package/lib/pages/UtilityDashboardPage/VirtualAreaDashboardPage.js +31 -27
- package/lib/pages/WbeDashboard/ExpandableComponent.js +8 -9
- package/lib/pages/WbeDashboard/GraphWrapper.js +36 -30
- package/lib/pages/WbeDashboard/IndividualTinyGraph.js +19 -17
- package/lib/pages/WbeDashboard/SearchInput.js +20 -15
- package/lib/pages/WbeDashboard/SummaryGraph.js +76 -50
- package/lib/pages/WbeDashboard/SummaryGraphModal.js +17 -19
- package/lib/pages/WbeDashboard/Tabs.js +11 -11
- package/lib/pages/WbeDashboard/WbeDashboardPage.js +213 -151
- package/lib/pages/WbeDashboard/WbeSummaryBar.js +48 -40
- package/lib/pages/WwtpPage/DashboardCard.js +23 -26
- package/lib/pages/WwtpPage/DischargePatternCard.js +23 -14
- package/lib/pages/WwtpPage/InletsCard/InletsBar.js +22 -26
- package/lib/pages/WwtpPage/InletsCard/InletsCard.js +18 -19
- package/lib/pages/WwtpPage/Map.js +3 -5
- package/lib/pages/WwtpPage/OrganicCard.js +2 -2
- package/lib/pages/WwtpPage/PotentialSaving/ImpactCard.js +2 -2
- package/lib/pages/WwtpPage/PotentialSaving/PotentialItem.js +6 -8
- package/lib/pages/WwtpPage/PotentialSaving/PotentialSaving.js +8 -9
- package/lib/pages/WwtpPage/PotentialSaving/PotentialSavingContainer.js +14 -18
- package/lib/pages/WwtpPage/PredictionCard.js +2 -2
- package/lib/pages/WwtpPage/TrendCard.js +19 -18
- package/lib/pages/WwtpPage/UpgradeBox.js +3 -3
- package/lib/pages/WwtpPage/WwtpPage.js +8 -8
- package/lib/pages/WwtpPage/WwtpPageContainer.js +16 -21
- package/lib/providers/Slideshow/SlideshowContext.js +9 -11
- package/lib/providers/Slideshow/SlideshowProvider.js +38 -22
- package/lib/providers/Slideshow/SlideshowRunner.js +19 -17
- package/lib/providers/UrlHistory/UrlHistoryContext.js +4 -6
- package/lib/providers/UrlHistory/UrlHistoryProvider.js +11 -12
- package/lib/providers/UrlHistory/index.js +2 -2
- package/lib/providers/UrlHistory/useLastVisited.js +5 -5
- package/lib/store/ImportGis/actionTypes.js +1 -1
- package/lib/store/ImportGis/actionsCreator.js +5 -7
- package/lib/store/ImportGis/reducer.js +29 -40
- package/lib/store/WBE/actionTypes.js +2 -2
- package/lib/store/WBE/reducer.js +9 -13
- package/lib/store/WWTPDashboard/WWTPDashboardSlice.js +14 -24
- package/lib/store/areas/actionTypes.js +4 -4
- package/lib/store/areas/actions.js +13 -7
- package/lib/store/areas/reducer.js +6 -8
- package/lib/store/context/actionTypes.js +3 -3
- package/lib/store/context/actions.js +3 -3
- package/lib/store/context/contextMiddlewares.js +16 -14
- package/lib/store/context/reducer.js +9 -13
- package/lib/store/dashboard/dashboardSlice.js +10 -18
- package/lib/store/edges/actionTypes.js +5 -5
- package/lib/store/edges/actions.js +8 -4
- package/lib/store/edges/reducer.js +17 -13
- package/lib/store/events/actionTypes.js +17 -17
- package/lib/store/events/actions.js +7 -3
- package/lib/store/events/reducer.js +49 -42
- package/lib/store/global/actionTypes.js +11 -11
- package/lib/store/global/actions.js +6 -8
- package/lib/store/global/reducer.js +10 -11
- package/lib/store/permissions/permissionsSlice.js +8 -12
- package/lib/store/points/actionTypes.js +3 -3
- package/lib/store/points/actions.js +8 -4
- package/lib/store/points/reducer.js +5 -7
- package/lib/store/rootActionTypes.js +2 -2
- package/lib/store/rootReducer.js +12 -17
- package/lib/store/rootStore.js +5 -5
- package/lib/store/samplings/actionTypes.js +1 -1
- package/lib/store/samplings/reducer.js +14 -16
- package/lib/styles/StylesLayout.js +3 -5
- package/lib/styles/theme/theme.js +27 -26
- package/lib/test/mocks/browser.js +4 -2
- package/lib/test/test-utils.js +15 -17
- package/lib/ui-kit/Button/Button.js +80 -128
- package/lib/ui-kit/Button/Button.test.js +29 -24
- package/lib/ui-kit/Checkbox/Checkbox.js +20 -30
- package/lib/ui-kit/ContentCard/ContentCard.js +18 -15
- package/lib/ui-kit/Dashboard/Dashboard.js +22 -25
- package/lib/ui-kit/DropDown/DropDown.js +24 -23
- package/lib/ui-kit/DropDown/DropDown.test.js +12 -12
- package/lib/ui-kit/DropDown/DropDownItem.js +21 -24
- package/lib/ui-kit/DropDown/DropdownToggle.js +8 -12
- package/lib/ui-kit/EmptyState/EmptyState.js +4 -6
- package/lib/ui-kit/IconAction/IconAction.js +5 -7
- package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +64 -48
- package/lib/ui-kit/InfoTooltip/InfoTooltip.js +52 -69
- package/lib/ui-kit/InletsPie/InletsPie.js +13 -15
- package/lib/ui-kit/InletsPie/options.js +6 -6
- package/lib/ui-kit/KandoList/KandoList.js +12 -14
- package/lib/ui-kit/KandoTable/KandoTable.js +40 -48
- package/lib/ui-kit/KandoTable/KandoTable.test.js +22 -16
- package/lib/ui-kit/Layout/Layout.js +4 -6
- package/lib/ui-kit/MobileInput/MobileInput.js +50 -60
- package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +16 -13
- package/lib/ui-kit/OrganicEvents/GaugeChart.js +6 -8
- package/lib/ui-kit/OrganicEvents/OrganicEvents.js +6 -6
- package/lib/ui-kit/OrganicEvents/OrganicEventsContainer.js +20 -27
- package/lib/ui-kit/OrganicEvents/TextInfo.js +10 -15
- package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +8 -10
- package/lib/ui-kit/SamplingStatus/SamplingStatus.js +17 -14
- package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +3 -3
- package/lib/ui-kit/ScoreGauge/ScoreGauge.js +20 -20
- package/lib/ui-kit/ScoreGauge/constant.js +3 -3
- package/lib/ui-kit/TimeLineChart/TrendChart.js +42 -54
- package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +7 -8
- package/lib/ui-kit/Tooltip/Tooltip.js +8 -14
- package/lib/ui-kit/index.js +8 -8
- package/lib/ui-kit/kandoStepper/KandoStepper.js +12 -12
- package/lib/ui-kit/siteName/SiteName.js +8 -11
- package/lib/utilities/ActionUtility.js +7 -7
- package/lib/utilities/Alert.js +17 -21
- package/lib/utilities/Analytics.js +11 -11
- package/lib/utilities/Array.js +5 -4
- package/lib/utilities/Enum.js +51 -15
- package/lib/utilities/ErrorBoundary.js +41 -27
- package/lib/utilities/File.js +69 -40
- package/lib/utilities/GetDir.js +7 -8
- package/lib/utilities/KandoDate.js +15 -7
- package/lib/utilities/KandoModal.js +26 -16
- package/lib/utilities/LocalStorage.js +10 -8
- package/lib/utilities/ThousandsToK.js +3 -3
- package/lib/utilities/TimeFormat.js +20 -21
- package/lib/utilities/Truncate.js +25 -17
- package/lib/utilities/edgesMath.js +15 -14
- package/lib/utilities/i18n.js +3 -3
- package/lib/utilities/kql.js +14 -12
- package/lib/utilities/map/icons.js +3 -3
- package/lib/utilities/polylinedecorator.js +112 -87
- package/lib/utilities/scoreToData.js +17 -17
- package/lib/utilities/scoreToData.test.js +5 -5
- package/lib/utilities/time.js +8 -8
- package/lib/utilities/uploadToS3.js +11 -11
- package/lib/utilities/urls.js +59 -61
- package/package.json +1 -1
|
@@ -28,34 +28,34 @@ var _MapUtils = require("../MapUtils");
|
|
|
28
28
|
var _PointIcon = require("./PointIcon");
|
|
29
29
|
var _water_reuse = _interopRequireDefault(require("../../../assets/icons/water_reuse.svg"));
|
|
30
30
|
var _utils = require("pages/DashboardMap/utils");
|
|
31
|
-
|
|
31
|
+
var isCollectorFocused = function isCollectorFocused(point, event) {
|
|
32
32
|
var _event$observations;
|
|
33
33
|
return (event === null || event === void 0 ? void 0 : (_event$observations = event.observations) === null || _event$observations === void 0 ? void 0 : _event$observations.length) === 1 && point.id === event.observations[0].point_id;
|
|
34
34
|
};
|
|
35
35
|
exports.isCollectorFocused = isCollectorFocused;
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
var buildManholeTooltipString = function buildManholeTooltipString(point) {
|
|
37
|
+
var string = "".concat(point.group.name, " ");
|
|
38
38
|
if (pointIsFactory(point)) {
|
|
39
|
-
string +=
|
|
40
|
-
string +=
|
|
39
|
+
string += "<br/>Sector: ".concat(point.group.sector_name);
|
|
40
|
+
string += "<br/>Water Consumption: ".concat(point.group.water_discharge);
|
|
41
41
|
} else {
|
|
42
|
-
string =
|
|
42
|
+
string = "".concat(point.name);
|
|
43
43
|
}
|
|
44
44
|
return string;
|
|
45
45
|
};
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
var bubbleForWWTP = function bubbleForWWTP(args) {
|
|
47
|
+
var pointCustomIcon = _leaflet.default.marker(args.markerLocation, {
|
|
48
48
|
icon: (0, _PointIcon.getPointIconByType)(args.wwtpPoint.group.type, args.wwtpPoint.name, '', false, true),
|
|
49
49
|
riseOnHover: true
|
|
50
50
|
});
|
|
51
51
|
return pointCustomIcon;
|
|
52
52
|
};
|
|
53
53
|
exports.bubbleForWWTP = bubbleForWWTP;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
var createBubblePoint = function createBubblePoint(markerLocation, point, map, hovered, layerGroup) {
|
|
55
|
+
var flow_rate_unit = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'gd_us';
|
|
56
|
+
var handleClick = arguments.length > 6 ? arguments[6] : undefined;
|
|
57
|
+
var subtitle = pointIsFactory(point) ? point.group.sector_name : '';
|
|
58
|
+
var pointCustomIcon = _leaflet.default.marker(markerLocation, {
|
|
59
59
|
icon: (0, _PointIcon.getPointIconByType)(point.group.type, point.name, subtitle, false, true),
|
|
60
60
|
riseOnHover: true
|
|
61
61
|
});
|
|
@@ -70,31 +70,28 @@ const createBubblePoint = function (markerLocation, point, map, hovered, layerGr
|
|
|
70
70
|
}
|
|
71
71
|
handleMarkerEvents(map, point, pointCustomIcon, handleClick);
|
|
72
72
|
if (point.relatedEventsAmount) {
|
|
73
|
-
|
|
73
|
+
var _pointCustomIcon = _leaflet.default.marker(markerLocation, {
|
|
74
74
|
icon: _leaflet.default.divIcon({
|
|
75
|
-
className:
|
|
76
|
-
|
|
77
|
-
${point.relatedEventsAmount > 2 ? 'alert-color' : ''}
|
|
78
|
-
`,
|
|
79
|
-
html: `<p>${point.relatedEventsAmount}</p>`,
|
|
75
|
+
className: "\n ".concat(point.relatedEventsAmount >= 100 ? 'circle-events-amount circle-events-amount--tridigit' : 'circle-events-amount', " \n ").concat(point.relatedEventsAmount > 2 ? 'alert-color' : '', "\n "),
|
|
76
|
+
html: "<p>".concat(point.relatedEventsAmount, "</p>"),
|
|
80
77
|
iconAnchor: (0, _MapUtils.eventsCountIcon)(map._zoom).iconAnchor
|
|
81
78
|
}),
|
|
82
79
|
riseOnHover: false,
|
|
83
80
|
opacity: hovered ? 1 : 0
|
|
84
81
|
});
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (hovered)
|
|
82
|
+
_pointCustomIcon['kando_object_id'] = point.id;
|
|
83
|
+
_pointCustomIcon['kando_object'] = 'IconNumber';
|
|
84
|
+
if (hovered) _pointCustomIcon['kando_object'] = 'IconNumberHovered';
|
|
88
85
|
}
|
|
89
86
|
};
|
|
90
87
|
exports.createBubblePoint = createBubblePoint;
|
|
91
|
-
|
|
92
|
-
|
|
88
|
+
var createManholePoint = function createManholePoint(markerLocation, point, map, hovered, layerGroup) {
|
|
89
|
+
var pointIcon = new _leaflet.default.Icon({
|
|
93
90
|
iconUrl: _whitePoint.default,
|
|
94
91
|
iconSize: [9, 9],
|
|
95
92
|
iconAnchor: [4.5, 4.5]
|
|
96
93
|
});
|
|
97
|
-
|
|
94
|
+
var manholeIcon = new _leaflet.default.Marker(markerLocation, {
|
|
98
95
|
icon: pointIcon,
|
|
99
96
|
riseOnHover: true
|
|
100
97
|
});
|
|
@@ -106,7 +103,7 @@ const createManholePoint = (markerLocation, point, map, hovered, layerGroup) =>
|
|
|
106
103
|
layerGroup.addLayer(manholeIcon);
|
|
107
104
|
};
|
|
108
105
|
exports.createManholePoint = createManholePoint;
|
|
109
|
-
|
|
106
|
+
var matchIconToPoint = function matchIconToPoint(point, event) {
|
|
110
107
|
switch (point.group.type) {
|
|
111
108
|
case 'Groups::Factory':
|
|
112
109
|
if (combinedFactoryIcon.length === 2) {
|
|
@@ -160,9 +157,9 @@ const matchIconToPoint = (point, event) => {
|
|
|
160
157
|
}
|
|
161
158
|
};
|
|
162
159
|
exports.matchIconToPoint = matchIconToPoint;
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
160
|
+
var standardBackground = function standardBackground() {
|
|
161
|
+
var secondary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
162
|
+
var third = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
166
163
|
return _leaflet.default.icon({
|
|
167
164
|
iconUrl: _whitePinBlackShadow.default,
|
|
168
165
|
iconSize: secondary ? [0, 0] : [0, 0],
|
|
@@ -171,7 +168,7 @@ const standardBackground = function () {
|
|
|
171
168
|
});
|
|
172
169
|
};
|
|
173
170
|
exports.standardBackground = standardBackground;
|
|
174
|
-
|
|
171
|
+
var combinedFactoryIcon = [_leaflet.default.icon({
|
|
175
172
|
iconUrl: _yellowCircle.default,
|
|
176
173
|
iconSize: [0, 0],
|
|
177
174
|
iconAnchor: [10.7, 33.7],
|
|
@@ -183,7 +180,7 @@ const combinedFactoryIcon = [_leaflet.default.icon({
|
|
|
183
180
|
popupAnchor: [0, -30]
|
|
184
181
|
})];
|
|
185
182
|
exports.combinedFactoryIcon = combinedFactoryIcon;
|
|
186
|
-
|
|
183
|
+
var combinedPumpStationIcon = [_leaflet.default.icon({
|
|
187
184
|
iconUrl: _greenCircle.default,
|
|
188
185
|
iconSize: [0, 0],
|
|
189
186
|
iconAnchor: [10.7, 33.7],
|
|
@@ -195,14 +192,14 @@ const combinedPumpStationIcon = [_leaflet.default.icon({
|
|
|
195
192
|
popupAnchor: [0, -30]
|
|
196
193
|
})];
|
|
197
194
|
exports.combinedPumpStationIcon = combinedPumpStationIcon;
|
|
198
|
-
|
|
195
|
+
var combinedCollectorsIcon = [_leaflet.default.icon({
|
|
199
196
|
iconUrl: _pinWater.default,
|
|
200
197
|
iconSize: [0, 0],
|
|
201
198
|
iconAnchor: [25, 50],
|
|
202
199
|
popupAnchor: [0, -30]
|
|
203
200
|
})];
|
|
204
201
|
exports.combinedCollectorsIcon = combinedCollectorsIcon;
|
|
205
|
-
|
|
202
|
+
var combinedWWTPIcon = [_leaflet.default.icon({
|
|
206
203
|
iconUrl: _brightBlueCircle.default,
|
|
207
204
|
iconSize: [0, 0],
|
|
208
205
|
iconAnchor: [10.7, 33.7],
|
|
@@ -214,7 +211,7 @@ const combinedWWTPIcon = [_leaflet.default.icon({
|
|
|
214
211
|
popupAnchor: [0, -30]
|
|
215
212
|
})];
|
|
216
213
|
exports.combinedWWTPIcon = combinedWWTPIcon;
|
|
217
|
-
|
|
214
|
+
var selectedBackground = function selectedBackground() {
|
|
218
215
|
return _leaflet.default.icon({
|
|
219
216
|
iconUrl: _redPinRedShadow.default,
|
|
220
217
|
iconSize: [0, 0],
|
|
@@ -223,7 +220,7 @@ const selectedBackground = () => {
|
|
|
223
220
|
});
|
|
224
221
|
};
|
|
225
222
|
exports.selectedBackground = selectedBackground;
|
|
226
|
-
|
|
223
|
+
var belongsToSourceBackground = function belongsToSourceBackground() {
|
|
227
224
|
return _leaflet.default.icon({
|
|
228
225
|
iconUrl: _whitePinRedShadow.default,
|
|
229
226
|
iconSize: [0, 0],
|
|
@@ -232,23 +229,27 @@ const belongsToSourceBackground = () => {
|
|
|
232
229
|
});
|
|
233
230
|
};
|
|
234
231
|
exports.belongsToSourceBackground = belongsToSourceBackground;
|
|
235
|
-
|
|
236
|
-
|
|
232
|
+
var markerBelongsToSelectedSource = function markerBelongsToSelectedSource(event, point) {
|
|
233
|
+
var source;
|
|
237
234
|
if (event !== null && event !== undefined) {
|
|
238
|
-
source = event.sources.filter(
|
|
235
|
+
source = event.sources.filter(function (source) {
|
|
236
|
+
return source.point_id === point.id;
|
|
237
|
+
})[0];
|
|
239
238
|
}
|
|
240
239
|
return event !== null && source && event.selected_source === source.point_id;
|
|
241
240
|
};
|
|
242
241
|
exports.markerBelongsToSelectedSource = markerBelongsToSelectedSource;
|
|
243
|
-
|
|
242
|
+
var markerBelongsToSource = function markerBelongsToSource(event, point) {
|
|
244
243
|
if (event === undefined) return;
|
|
245
|
-
return event !== null && event.sources.filter(
|
|
244
|
+
return event !== null && event.sources.filter(function (source) {
|
|
245
|
+
return source.point_id === point.id;
|
|
246
|
+
})[0];
|
|
246
247
|
};
|
|
247
248
|
exports.markerBelongsToSource = markerBelongsToSource;
|
|
248
|
-
|
|
249
|
+
var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
|
|
249
250
|
// iconSize: [width, height],
|
|
250
251
|
// Icon Anchor: [(-right)(+left), (-down)(+up)]
|
|
251
|
-
|
|
252
|
+
var samplingIcon = [_leaflet.default.icon({
|
|
252
253
|
iconUrl: _blueCircle.default,
|
|
253
254
|
iconSize: secondaryIcon ? [0, 0] : [0, 0],
|
|
254
255
|
iconAnchor: secondaryIcon ? [-7, 15] : [10.7, 33.7],
|
|
@@ -259,7 +260,7 @@ const createSamplingIconPoint = (markerLocation, secondaryIcon, map, point, even
|
|
|
259
260
|
iconAnchor: secondaryIcon ? [-8, 13] : [5, 30],
|
|
260
261
|
popupAnchor: [0, -30]
|
|
261
262
|
})];
|
|
262
|
-
|
|
263
|
+
var thirdIcon = false;
|
|
263
264
|
if (markerBelongsToSelectedSource(event, point) && !secondaryIcon) {
|
|
264
265
|
samplingIcon.unshift(selectedBackground());
|
|
265
266
|
} else if (markerBelongsToSource(event, point) && !secondaryIcon) {
|
|
@@ -268,8 +269,8 @@ const createSamplingIconPoint = (markerLocation, secondaryIcon, map, point, even
|
|
|
268
269
|
thirdIcon = true;
|
|
269
270
|
samplingIcon.unshift(standardBackground(secondaryIcon, thirdIcon));
|
|
270
271
|
}
|
|
271
|
-
samplingIcon.forEach((icon, index)
|
|
272
|
-
|
|
272
|
+
samplingIcon.forEach(function (icon, index) {
|
|
273
|
+
var pointCustomIcon = _leaflet.default.marker(markerLocation, {
|
|
273
274
|
icon: icon,
|
|
274
275
|
riseOnHover: false
|
|
275
276
|
});
|
|
@@ -285,10 +286,10 @@ const createSamplingIconPoint = (markerLocation, secondaryIcon, map, point, even
|
|
|
285
286
|
});
|
|
286
287
|
};
|
|
287
288
|
exports.createSamplingIconPoint = createSamplingIconPoint;
|
|
288
|
-
|
|
289
|
+
var createObservationIconPoint = function createObservationIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
|
|
289
290
|
// iconSize: [width, height],
|
|
290
291
|
// Icon Anchor: [(-right)(+left), (-down)(+up)]
|
|
291
|
-
|
|
292
|
+
var observationIcon = [_leaflet.default.icon({
|
|
292
293
|
iconUrl: _pinkCircle.default,
|
|
293
294
|
iconSize: secondaryIcon ? [0, 0] : [0, 0],
|
|
294
295
|
iconAnchor: secondaryIcon ? [-7, 40] : [10.7, 33.7],
|
|
@@ -306,8 +307,8 @@ const createObservationIconPoint = (markerLocation, secondaryIcon, map, point, e
|
|
|
306
307
|
} else {
|
|
307
308
|
observationIcon.unshift(standardBackground(secondaryIcon));
|
|
308
309
|
}
|
|
309
|
-
observationIcon.forEach((icon, index)
|
|
310
|
-
|
|
310
|
+
observationIcon.forEach(function (icon, index) {
|
|
311
|
+
var pointCustomIcon = _leaflet.default.marker(markerLocation, {
|
|
311
312
|
icon: icon,
|
|
312
313
|
riseOnHover: false
|
|
313
314
|
});
|
|
@@ -323,73 +324,33 @@ const createObservationIconPoint = (markerLocation, secondaryIcon, map, point, e
|
|
|
323
324
|
});
|
|
324
325
|
};
|
|
325
326
|
exports.createObservationIconPoint = createObservationIconPoint;
|
|
326
|
-
|
|
327
|
-
|
|
327
|
+
var createSamplingIcons = function createSamplingIcons(markerLocation, event, point, map, hovered, layerGroup) {
|
|
328
|
+
var sampledPointIds = event.samplings.map(function (s) {
|
|
329
|
+
return s.point_id;
|
|
330
|
+
});
|
|
328
331
|
if (event !== null && event.samplings.length !== 0 && sampledPointIds.includes(point.id)) {
|
|
329
332
|
createSamplingIconPoint(markerLocation, matchIconToPoint(point, event) !== null, map, point, event, hovered, layerGroup);
|
|
330
333
|
}
|
|
331
334
|
};
|
|
332
335
|
exports.createSamplingIcons = createSamplingIcons;
|
|
333
|
-
|
|
336
|
+
var popupContent = function popupContent(obs, point) {
|
|
334
337
|
if (obs === null) {
|
|
335
|
-
return
|
|
336
|
-
<div class="event-popup">
|
|
337
|
-
<div class="popup-graph-icon popup-graph-icon-${point.id}">
|
|
338
|
-
<img src="${_lineChart.default}"/>
|
|
339
|
-
</div>
|
|
340
|
-
<div class="popup-content">
|
|
341
|
-
<h5 class="popup-content__site-name"><b>${point.group.name}</b></h5>
|
|
342
|
-
<hr/>
|
|
343
|
-
|
|
344
|
-
<div id="sector"></div>
|
|
345
|
-
</div>
|
|
346
|
-
</div>
|
|
347
|
-
`;
|
|
338
|
+
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 ");
|
|
348
339
|
} else {
|
|
349
|
-
return
|
|
350
|
-
<div class="event-popup">
|
|
351
|
-
<div class="popup-graph-icon popup-graph-icon-${obs.id}">
|
|
352
|
-
<img src="${_lineChart.default}"/>
|
|
353
|
-
</div>
|
|
354
|
-
<div class="popup-content">
|
|
355
|
-
<h5 class="popup-content__site-name"><b>${point.group.name}</b></h5>
|
|
356
|
-
<div class="popup-content__severity">
|
|
357
|
-
<p class="popup-content__severity-p">${_i18n.default.t(`events_overview.severity`)}</p>
|
|
358
|
-
<span class="${'popup-content__severity--' + obs.severity}">
|
|
359
|
-
<b class="popup-content__severity-b">
|
|
360
|
-
${_i18n.default.t(`events_overview.severities.${obs.severity}`)}
|
|
361
|
-
</b>
|
|
362
|
-
</span>
|
|
363
|
-
</div>
|
|
364
|
-
|
|
365
|
-
<hr class="popup-content__hr" />
|
|
366
|
-
|
|
367
|
-
<div class="popup-content__discharge-time">
|
|
368
|
-
<div>
|
|
369
|
-
<p class="popup-content__severity-p">${_i18n.default.t(`events_overview.first_seen`)}:</p>
|
|
370
|
-
<span><b id="first-seen-popup"></b></span>
|
|
371
|
-
</div>
|
|
372
|
-
<div>
|
|
373
|
-
<p class="popup-content__severity-p">${_i18n.default.t(`events_overview.last_seen`)}:</p>
|
|
374
|
-
<span><b id="last-seen-popup"></b></span>
|
|
375
|
-
</div>
|
|
376
|
-
</div>
|
|
377
|
-
</div>
|
|
378
|
-
</div>
|
|
379
|
-
`;
|
|
340
|
+
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 ");
|
|
380
341
|
}
|
|
381
342
|
};
|
|
382
343
|
exports.popupContent = popupContent;
|
|
383
|
-
|
|
344
|
+
var setIcon = function setIcon(element, clicked, point) {
|
|
384
345
|
element.setIcon((0, _PointIcon.getPointIconByType)(point.group.type, point.name, point.group.sector_name, clicked, !clicked));
|
|
385
346
|
};
|
|
386
347
|
|
|
387
348
|
// round to nearest thousand is used when you want to round the water consumption to the nearest thousand
|
|
388
349
|
// for example: 234,567 -> 235,000
|
|
389
350
|
exports.setIcon = setIcon;
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
351
|
+
var calculateWaterConsumption = function calculateWaterConsumption(flow_rate_unit, waterConsumption) {
|
|
352
|
+
var round_to_nearest_k = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
353
|
+
var calculated = '0';
|
|
393
354
|
if (waterConsumption > 0) {
|
|
394
355
|
switch (flow_rate_unit) {
|
|
395
356
|
case 'm3d':
|
|
@@ -410,7 +371,7 @@ const calculateWaterConsumption = function (flow_rate_unit, waterConsumption) {
|
|
|
410
371
|
}
|
|
411
372
|
};
|
|
412
373
|
exports.calculateWaterConsumption = calculateWaterConsumption;
|
|
413
|
-
|
|
374
|
+
var roundToNearestThousand = function roundToNearestThousand(number) {
|
|
414
375
|
// if(isAlreadyRounded(number)) {
|
|
415
376
|
// return number;
|
|
416
377
|
// }
|
|
@@ -418,8 +379,8 @@ const roundToNearestThousand = number => {
|
|
|
418
379
|
if (number < 1000) {
|
|
419
380
|
return Math.round(number);
|
|
420
381
|
}
|
|
421
|
-
|
|
422
|
-
|
|
382
|
+
var roundedThousands = Math.round(number / 1000);
|
|
383
|
+
var roundedValue = roundedThousands * 1000;
|
|
423
384
|
return roundedValue;
|
|
424
385
|
};
|
|
425
386
|
|
|
@@ -427,35 +388,35 @@ const roundToNearestThousand = number => {
|
|
|
427
388
|
// return number === Math.round(number);
|
|
428
389
|
// }
|
|
429
390
|
|
|
430
|
-
|
|
431
|
-
return _i18n.default.t(
|
|
391
|
+
var translateFlowRate = function translateFlowRate(flow_rate_unit) {
|
|
392
|
+
return _i18n.default.t("dashboard_v2.profile.flow_rate_unit_options.".concat(flow_rate_unit.includes('gd') ? 'gd' : flow_rate_unit));
|
|
432
393
|
};
|
|
433
394
|
exports.translateFlowRate = translateFlowRate;
|
|
434
|
-
|
|
435
|
-
|
|
395
|
+
var handleMarkerEvents = function handleMarkerEvents(map, point, pointCustomIcon, handleClick) {
|
|
396
|
+
var tooltipVisible = false;
|
|
436
397
|
map.on('zoomstart', function () {
|
|
437
398
|
map.closePopup();
|
|
438
399
|
});
|
|
439
|
-
pointCustomIcon.on('popupclose', ()
|
|
400
|
+
pointCustomIcon.on('popupclose', function () {
|
|
440
401
|
// setIcon(pointCustomIcon, false, point);
|
|
441
402
|
tooltipVisible = false;
|
|
442
403
|
});
|
|
443
|
-
pointCustomIcon.on('popupopen', ()
|
|
404
|
+
pointCustomIcon.on('popupopen', function () {
|
|
444
405
|
// setIcon(pointCustomIcon, true, point);
|
|
445
406
|
tooltipVisible = true;
|
|
446
407
|
});
|
|
447
|
-
pointCustomIcon.on('mouseover', ()
|
|
408
|
+
pointCustomIcon.on('mouseover', function () {
|
|
448
409
|
if (tooltipVisible) return;
|
|
449
410
|
setIcon(pointCustomIcon, true, point);
|
|
450
411
|
tooltipVisible = true;
|
|
451
412
|
});
|
|
452
|
-
pointCustomIcon.on('mouseout', ()
|
|
413
|
+
pointCustomIcon.on('mouseout', function () {
|
|
453
414
|
if (pointCustomIcon.isPopupOpen()) return;
|
|
454
415
|
setIcon(pointCustomIcon, false, point);
|
|
455
416
|
tooltipVisible = false;
|
|
456
417
|
});
|
|
457
418
|
if (typeof handleClick === 'function') {
|
|
458
|
-
pointCustomIcon.on('click', ()
|
|
419
|
+
pointCustomIcon.on('click', function () {
|
|
459
420
|
handleClick(pointCustomIcon.kando_object_id);
|
|
460
421
|
if (pointIsFactory(point)) {
|
|
461
422
|
(0, _utils.sendAnalyticsEvent)('Map View - Factory clicked', 'map', {
|
|
@@ -467,31 +428,8 @@ const handleMarkerEvents = (map, point, pointCustomIcon, handleClick) => {
|
|
|
467
428
|
}
|
|
468
429
|
};
|
|
469
430
|
exports.handleMarkerEvents = handleMarkerEvents;
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
<div class='main-content'>
|
|
473
|
-
<div class='main-content__header'>
|
|
474
|
-
<div class="main-content__header__titles">
|
|
475
|
-
<div class='main-content__header__titles__title'>${point.name}</div>
|
|
476
|
-
<div class='main-content__header__titles__subtitle'>${point.group.sector_name}</div>
|
|
477
|
-
</div>
|
|
478
|
-
</div>
|
|
479
|
-
|
|
480
|
-
<div class='main-content__body'>
|
|
481
|
-
<div class='main-content__body__item'>
|
|
482
|
-
<div class='main-content__body__item__icon'>
|
|
483
|
-
<img src='${_water_reuse.default}' />
|
|
484
|
-
</div>
|
|
485
|
-
<div class='main-content__body__item__titles'>
|
|
486
|
-
<div class='main-content__body__item__titles__title'>
|
|
487
|
-
${getFlowRate(point.group.water_discharge, flow_rate_unit)}
|
|
488
|
-
</div>
|
|
489
|
-
<div class='main-content__body__item__titles__subtitle'>${_i18n.default.t('water_discharge')}</div>
|
|
490
|
-
</div>
|
|
491
|
-
</div>
|
|
492
|
-
</div>
|
|
493
|
-
</div>
|
|
494
|
-
`;
|
|
431
|
+
var bindPopupToMarker = function bindPopupToMarker(point, layerGroup, flow_rate_unit) {
|
|
432
|
+
var content = "\n <div class='main-content'>\n <div class='main-content__header'>\n <div class=\"main-content__header__titles\">\n <div class='main-content__header__titles__title'>".concat(point.name, "</div>\n <div class='main-content__header__titles__subtitle'>").concat(point.group.sector_name, "</div>\n </div>\n </div>\n \n <div class='main-content__body'>\n <div class='main-content__body__item'>\n <div class='main-content__body__item__icon'>\n <img src='").concat(_water_reuse.default, "' />\n </div>\n <div class='main-content__body__item__titles'>\n <div class='main-content__body__item__titles__title'>\n ").concat(getFlowRate(point.group.water_discharge, flow_rate_unit), "\n </div>\n <div class='main-content__body__item__titles__subtitle'>").concat(_i18n.default.t('water_discharge'), "</div>\n </div>\n </div>\n </div>\n </div>\n ");
|
|
495
433
|
layerGroup.bindPopup(content, {
|
|
496
434
|
className: 'point-marker-popup',
|
|
497
435
|
minWidth: '214px',
|
|
@@ -500,21 +438,21 @@ const bindPopupToMarker = (point, layerGroup, flow_rate_unit) => {
|
|
|
500
438
|
});
|
|
501
439
|
};
|
|
502
440
|
exports.bindPopupToMarker = bindPopupToMarker;
|
|
503
|
-
|
|
504
|
-
|
|
441
|
+
var getFlowRate = function getFlowRate(waterConsumption, flowRateUnit) {
|
|
442
|
+
var isRound = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
505
443
|
if (waterConsumption > 0) {
|
|
506
444
|
return calculateWaterConsumption(flowRateUnit, waterConsumption, isRound) + ' ' + translateFlowRate(flowRateUnit);
|
|
507
445
|
}
|
|
508
446
|
return _i18n.default.t('events_overview.severities.unknown');
|
|
509
447
|
};
|
|
510
448
|
exports.getFlowRate = getFlowRate;
|
|
511
|
-
|
|
449
|
+
var removeLayerGroup = function removeLayerGroup(map, layerGroup) {
|
|
512
450
|
if (map.hasLayer(layerGroup)) {
|
|
513
451
|
map.removeLayer(layerGroup);
|
|
514
452
|
}
|
|
515
453
|
};
|
|
516
454
|
exports.removeLayerGroup = removeLayerGroup;
|
|
517
|
-
|
|
455
|
+
var addLayerGroup = function addLayerGroup(map, layerGroup) {
|
|
518
456
|
if (!map.hasLayer(layerGroup)) {
|
|
519
457
|
map.addLayer(layerGroup);
|
|
520
458
|
} else {
|
|
@@ -523,16 +461,16 @@ const addLayerGroup = (map, layerGroup) => {
|
|
|
523
461
|
}
|
|
524
462
|
};
|
|
525
463
|
exports.addLayerGroup = addLayerGroup;
|
|
526
|
-
|
|
464
|
+
var pointIsWWTP = function pointIsWWTP(point) {
|
|
527
465
|
return point.group.type === 'Groups::WastewaterTreatmentPlant';
|
|
528
466
|
};
|
|
529
467
|
exports.pointIsWWTP = pointIsWWTP;
|
|
530
|
-
|
|
468
|
+
var pointIsFactory = function pointIsFactory(point) {
|
|
531
469
|
return isFactoryType(point.group.type);
|
|
532
470
|
};
|
|
533
471
|
exports.pointIsFactory = pointIsFactory;
|
|
534
|
-
|
|
472
|
+
var isFactoryType = function isFactoryType(type) {
|
|
535
473
|
return type === 'Groups::Factory';
|
|
536
474
|
};
|
|
537
475
|
exports.isFactoryType = isFactoryType;
|
|
538
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2kxOG4iLCJfYmx1ZUNpcmNsZSIsIl9zYW1wbGluZ0ljb24iLCJfcGlua0NpcmNsZSIsIl9vYnNlcnZhdGlvbkljb24iLCJfcmVkUGluUmVkU2hhZG93IiwiX3doaXRlUGluUmVkU2hhZG93IiwiX3doaXRlUGluQmxhY2tTaGFkb3ciLCJfeWVsbG93Q2lyY2xlIiwiX2ZhY3RvcnlJY29uIiwiX2dyZWVuQ2lyY2xlIiwiX3B1bXBTdGF0aW9uSWNvbiIsIl9waW5XYXRlciIsIl9icmlnaHRCbHVlQ2lyY2xlIiwiX1dXVFBJY29uIiwiX3dhdGVyTm9CYWNrZ3JvdW5kIiwiX3doaXRlUG9pbnQiLCJfTWFwVXRpbHMiLCJfUG9pbnRJY29uIiwiX3dhdGVyX3JldXNlIiwiX3V0aWxzIiwiaXNDb2xsZWN0b3JGb2N1c2VkIiwicG9pbnQiLCJldmVudCIsIl9ldmVudCRvYnNlcnZhdGlvbnMiLCJvYnNlcnZhdGlvbnMiLCJsZW5ndGgiLCJpZCIsInBvaW50X2lkIiwiZXhwb3J0cyIsImJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmciLCJzdHJpbmciLCJncm91cCIsIm5hbWUiLCJwb2ludElzRmFjdG9yeSIsInNlY3Rvcl9uYW1lIiwid2F0ZXJfZGlzY2hhcmdlIiwiYnViYmxlRm9yV1dUUCIsImFyZ3MiLCJwb2ludEN1c3RvbUljb24iLCJMIiwibWFya2VyIiwibWFya2VyTG9jYXRpb24iLCJpY29uIiwiZ2V0UG9pbnRJY29uQnlUeXBlIiwid3d0cFBvaW50IiwidHlwZSIsInJpc2VPbkhvdmVyIiwiY3JlYXRlQnViYmxlUG9pbnQiLCJtYXAiLCJob3ZlcmVkIiwibGF5ZXJHcm91cCIsImZsb3dfcmF0ZV91bml0IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaGFuZGxlQ2xpY2siLCJzdWJ0aXRsZSIsImFkZExheWVyIiwiYmluZFBvcHVwVG9NYXJrZXIiLCJoYW5kbGVNYXJrZXJFdmVudHMiLCJyZWxhdGVkRXZlbnRzQW1vdW50IiwiZGl2SWNvbiIsImNsYXNzTmFtZSIsImh0bWwiLCJpY29uQW5jaG9yIiwiZXZlbnRzQ291bnRJY29uIiwiX3pvb20iLCJvcGFjaXR5IiwiY3JlYXRlTWFuaG9sZVBvaW50IiwicG9pbnRJY29uIiwiSWNvbiIsImljb25VcmwiLCJ3aGl0ZVBvaW50IiwiaWNvblNpemUiLCJtYW5ob2xlSWNvbiIsIk1hcmtlciIsImJpbmRUb29sdGlwIiwibWF0Y2hJY29uVG9Qb2ludCIsImNvbWJpbmVkRmFjdG9yeUljb24iLCJtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZSIsInVuc2hpZnQiLCJzZWxlY3RlZEJhY2tncm91bmQiLCJtYXJrZXJCZWxvbmdzVG9Tb3VyY2UiLCJiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kIiwic3RhbmRhcmRCYWNrZ3JvdW5kIiwiY29tYmluZWRQdW1wU3RhdGlvbkljb24iLCJjb21iaW5lZFdXVFBJY29uIiwicmVkUGluUmVkU2hhZG93Iiwid2F0ZXJJY29uTm9CYWNrZ3JvdW5kIiwicG9wdXBBbmNob3IiLCJjb21iaW5lZENvbGxlY3RvcnNJY29uIiwic2Vjb25kYXJ5IiwidGhpcmQiLCJ3aGl0ZVBpbkJsYWNrU2hhZG93IiwieWVsbG93Q2lyY2xlVVJMIiwicGxhbnRJY29uVVJMIiwiZ3JlZW5DaXJjbGVVUkwiLCJwdW1wU3RhdGlvbkljb25VUkwiLCJjb2xsZWN0b3JJY29uIiwiYnJpZ2h0Qmx1ZUNpcmNsZVVSTCIsIldXVFBJY29uVVJMIiwid2hpdGVQaW5SZWRTaGFkb3ciLCJzb3VyY2UiLCJzb3VyY2VzIiwiZmlsdGVyIiwic2VsZWN0ZWRfc291cmNlIiwiY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQiLCJzZWNvbmRhcnlJY29uIiwic2FtcGxpbmdJY29uIiwiYmx1ZUNpcmNsZVVSTCIsInNhbXBsaW5nSWNvblVSTCIsInRoaXJkSWNvbiIsImZvckVhY2giLCJpbmRleCIsImNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50Iiwib2JzZXJ2YXRpb25JY29uIiwicGlua0NpcmNsZVVSTCIsIm9ic2VydmF0aW9uSWNvblVSTCIsImNyZWF0ZVNhbXBsaW5nSWNvbnMiLCJzYW1wbGVkUG9pbnRJZHMiLCJzYW1wbGluZ3MiLCJzIiwiaW5jbHVkZXMiLCJwb3B1cENvbnRlbnQiLCJvYnMiLCJHcmFwaEljb24iLCJpMThuIiwidCIsInNldmVyaXR5Iiwic2V0SWNvbiIsImVsZW1lbnQiLCJjbGlja2VkIiwiY2FsY3VsYXRlV2F0ZXJDb25zdW1wdGlvbiIsIndhdGVyQ29uc3VtcHRpb24iLCJyb3VuZF90b19uZWFyZXN0X2siLCJjYWxjdWxhdGVkIiwidG9GaXhlZCIsInJvdW5kVG9OZWFyZXN0VGhvdXNhbmQiLCJwYXJzZUZsb2F0IiwidG9Mb2NhbGVTdHJpbmciLCJNYXRoIiwicm91bmQiLCJudW1iZXIiLCJyb3VuZGVkVGhvdXNhbmRzIiwicm91bmRlZFZhbHVlIiwidHJhbnNsYXRlRmxvd1JhdGUiLCJ0b29sdGlwVmlzaWJsZSIsIm9uIiwiY2xvc2VQb3B1cCIsImlzUG9wdXBPcGVuIiwia2FuZG9fb2JqZWN0X2lkIiwic2VuZEFuYWx5dGljc0V2ZW50IiwicG9pbnRfbmFtZSIsImNvbnRlbnQiLCJ3YXRlclJldXNlSWNvbiIsImdldEZsb3dSYXRlIiwiYmluZFBvcHVwIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImNsb3NlQnV0dG9uIiwiZmxvd1JhdGVVbml0IiwiaXNSb3VuZCIsInJlbW92ZUxheWVyR3JvdXAiLCJoYXNMYXllciIsInJlbW92ZUxheWVyIiwiYWRkTGF5ZXJHcm91cCIsInBvaW50SXNXV1RQIiwiaXNGYWN0b3J5VHlwZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9wb2ludHMvUG9pbnRVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgR3JhcGhJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9saW5lLWNoYXJ0LnN2Zyc7XG5pbXBvcnQgTCwgeyBMYXRMbmdUdXBsZSB9IGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi4vLi4vLi4vdXRpbGl0aWVzL2kxOG4nO1xuaW1wb3J0IHsgSVBvaW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvcG9pbnRzL21vZGVscy9JUG9pbnQnO1xuaW1wb3J0IGJsdWVDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2JsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgc2FtcGxpbmdJY29uVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9zYW1wbGluZy1pY29uLnN2Zyc7XG5pbXBvcnQgcGlua0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcGluay1jaXJjbGUuc3ZnJztcbmltcG9ydCBvYnNlcnZhdGlvbkljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL29ic2VydmF0aW9uLWljb24uc3ZnJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2V2ZW50cy9tb2RlbHMvSUV2ZW50JztcbmltcG9ydCByZWRQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3JlZC1waW4tcmVkLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHdoaXRlUGluUmVkU2hhZG93IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy93aGl0ZS1waW4tcmVkLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHdoaXRlUGluQmxhY2tTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1ibGFjay1zaGFkb3cucG5nJztcbmltcG9ydCB5ZWxsb3dDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3llbGxvdy1jaXJjbGUuc3ZnJztcbmltcG9ydCBwbGFudEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2ZhY3RvcnktaWNvbi5zdmcnO1xuaW1wb3J0IGdyZWVuQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9ncmVlbi1jaXJjbGUuc3ZnJztcbmltcG9ydCBwdW1wU3RhdGlvbkljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3B1bXAtc3RhdGlvbi1pY29uLnN2Zyc7XG5pbXBvcnQgY29sbGVjdG9ySWNvbiBmcm9tICcuLi8uLi8uLi9hc3NldHMvbWFwL3Bpbi13YXRlci5zdmcnO1xuaW1wb3J0IGJyaWdodEJsdWVDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2JyaWdodC1ibHVlLWNpcmNsZS5zdmcnO1xuaW1wb3J0IFdXVFBJY29uVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9XV1RQLWljb24uc3ZnJztcbmltcG9ydCB3YXRlckljb25Ob0JhY2tncm91bmQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3dhdGVyLW5vLWJhY2tncm91bmQuc3ZnJztcbmltcG9ydCB3aGl0ZVBvaW50IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy93aGl0ZS1wb2ludC5wbmcnO1xuaW1wb3J0IHsgZXZlbnRzQ291bnRJY29uIH0gZnJvbSAnLi4vTWFwVXRpbHMnO1xuaW1wb3J0IHsgZ2V0UG9pbnRJY29uQnlUeXBlIH0gZnJvbSAnLi9Qb2ludEljb24nO1xuaW1wb3J0IHdhdGVyUmV1c2VJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9pY29ucy93YXRlcl9yZXVzZS5zdmcnO1xuaW1wb3J0IHsgc2VuZEFuYWx5dGljc0V2ZW50IH0gZnJvbSAnc3JjL3BhZ2VzL0Rhc2hib2FyZE1hcC91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBpc0NvbGxlY3RvckZvY3VzZWQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGV2ZW50Py5vYnNlcnZhdGlvbnM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgIHBvaW50LmlkID09PSBldmVudC5vYnNlcnZhdGlvbnNbMF0ucG9pbnRfaWRcbiAgKTtcbn07XG5cbmNvbnN0IGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcgPSAocG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc3RyaW5nID0gYCR7cG9pbnQuZ3JvdXAubmFtZX0gYDtcblxuICBpZiAocG9pbnRJc0ZhY3RvcnkocG9pbnQpKSB7XG4gICAgc3RyaW5nICs9IGA8YnIvPlNlY3RvcjogJHtwb2ludC5ncm91cC5zZWN0b3JfbmFtZX1gO1xuICAgIHN0cmluZyArPSBgPGJyLz5XYXRlciBDb25zdW1wdGlvbjogJHtwb2ludC5ncm91cC53YXRlcl9kaXNjaGFyZ2V9YDtcbiAgfSBlbHNlIHtcbiAgICBzdHJpbmcgPSBgJHtwb2ludC5uYW1lfWA7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1YmJsZUZvcldXVFAgPSAoYXJncykgPT4ge1xuICBjb25zdCBwb2ludEN1c3RvbUljb246IEwuTWFya2VyID0gTC5tYXJrZXIoYXJncy5tYXJrZXJMb2NhdGlvbiwge1xuICAgIGljb246IGdldFBvaW50SWNvbkJ5VHlwZShcbiAgICAgIGFyZ3Mud3d0cFBvaW50Lmdyb3VwLnR5cGUsXG4gICAgICBhcmdzLnd3dHBQb2ludC5uYW1lLFxuICAgICAgJycsXG4gICAgICBmYWxzZSxcbiAgICAgIHRydWUsXG4gICAgKSxcbiAgICByaXNlT25Ib3ZlcjogdHJ1ZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHBvaW50Q3VzdG9tSWNvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVCdWJibGVQb2ludCA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQ/LFxuICBsYXllckdyb3VwPyxcbiAgZmxvd19yYXRlX3VuaXQgPSAnZ2RfdXMnLFxuICBoYW5kbGVDbGljaz8sXG4pID0+IHtcbiAgY29uc3Qgc3VidGl0bGUgPSBwb2ludElzRmFjdG9yeShwb2ludCkgPyBwb2ludC5ncm91cC5zZWN0b3JfbmFtZSA6ICcnO1xuICBsZXQgcG9pbnRDdXN0b21JY29uOiBMLk1hcmtlciA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgaWNvbjogZ2V0UG9pbnRJY29uQnlUeXBlKFxuICAgICAgcG9pbnQuZ3JvdXAudHlwZSxcbiAgICAgIHBvaW50Lm5hbWUsXG4gICAgICBzdWJ0aXRsZSxcbiAgICAgIGZhbHNlLFxuICAgICAgdHJ1ZSxcbiAgICApLFxuICAgIHJpc2VPbkhvdmVyOiB0cnVlLFxuICB9KTtcbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50SG92ZXJlZCc7XG5cbiAgbGF5ZXJHcm91cC5hZGRMYXllcihwb2ludEN1c3RvbUljb24pO1xuICBpZiAocG9pbnRJc0ZhY3RvcnkocG9pbnQpKSB7XG4gICAgYmluZFBvcHVwVG9NYXJrZXIocG9pbnQsIHBvaW50Q3VzdG9tSWNvbiwgZmxvd19yYXRlX3VuaXQpO1xuICB9XG5cbiAgaGFuZGxlTWFya2VyRXZlbnRzKG1hcCwgcG9pbnQsIHBvaW50Q3VzdG9tSWNvbiwgaGFuZGxlQ2xpY2spO1xuXG4gIGlmIChwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50KSB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbiA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBMLmRpdkljb24oe1xuICAgICAgICBjbGFzc05hbWU6IGBcbiAgICAgICAgICAke1xuICAgICAgICAgICAgcG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+PSAxMDBcbiAgICAgICAgICAgICAgPyAnY2lyY2xlLWV2ZW50cy1hbW91bnQgY2lyY2xlLWV2ZW50cy1hbW91bnQtLXRyaWRpZ2l0J1xuICAgICAgICAgICAgICA6ICdjaXJjbGUtZXZlbnRzLWFtb3VudCdcbiAgICAgICAgICB9IFxuICAgICAgICAgICR7cG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+IDIgPyAnYWxlcnQtY29sb3InIDogJyd9XG4gICAgICAgICAgICBgLFxuICAgICAgICBodG1sOiBgPHA+JHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50fTwvcD5gLFxuICAgICAgICBpY29uQW5jaG9yOiBldmVudHNDb3VudEljb24obWFwLl96b29tKS5pY29uQW5jaG9yLFxuICAgICAgfSksXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgICBvcGFjaXR5OiBob3ZlcmVkID8gMSA6IDAsXG4gICAgfSk7XG5cbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVyJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVySG92ZXJlZCc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYW5ob2xlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgbGV0IHBvaW50SWNvbiA9IG5ldyBMLkljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUG9pbnQsXG4gICAgaWNvblNpemU6IFs5LCA5XSxcbiAgICBpY29uQW5jaG9yOiBbNC41LCA0LjVdLFxuICB9KTtcbiAgbGV0IG1hbmhvbGVJY29uOiBhbnkgPSBuZXcgTC5NYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICBpY29uOiBwb2ludEljb24sXG4gICAgcmlzZU9uSG92ZXI6IHRydWUsXG4gIH0pO1xuICBtYW5ob2xlSWNvbi5iaW5kVG9vbHRpcChidWlsZE1hbmhvbGVUb29sdGlwU3RyaW5nKHBvaW50KSk7XG4gIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnQnO1xuICBtYW5ob2xlSWNvblsna2FuZG9fcG9pbnRfdHlwZSddID0gJ01hbmhvbGUnO1xuICBpZiAoaG92ZXJlZCkgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50SG92ZXJlZCc7XG4gIGxheWVyR3JvdXAuYWRkTGF5ZXIobWFuaG9sZUljb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoSWNvblRvUG9pbnQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICBzd2l0Y2ggKHBvaW50Lmdyb3VwLnR5cGUpIHtcbiAgICBjYXNlICdHcm91cHM6OkZhY3RvcnknOlxuICAgICAgaWYgKGNvbWJpbmVkRmFjdG9yeUljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkRmFjdG9yeUljb247XG4gICAgY2FzZSAnR3JvdXBzOjpQdW1wU3RhdGlvbic6XG4gICAgICBpZiAoY29tYmluZWRQdW1wU3RhdGlvbkljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uO1xuICAgIGNhc2UgJ0dyb3Vwczo6V2FzdGV3YXRlclRyZWF0bWVudFBsYW50JzpcbiAgICAgIGlmIChjb21iaW5lZFdXVFBJY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZFdXVFBJY29uO1xuXG4gICAgY2FzZSAnR3JvdXBzOjpDb2xsZWN0b3JzJzpcbiAgICAgIGlmIChpc0NvbGxlY3RvckZvY3VzZWQocG9pbnQsIGV2ZW50KSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIEwuaWNvbih7XG4gICAgICAgICAgICBpY29uVXJsOiByZWRQaW5SZWRTaGFkb3csXG4gICAgICAgICAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzMwLCA1Ml0sXG4gICAgICAgICAgfSksXG5cbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogd2F0ZXJJY29uTm9CYWNrZ3JvdW5kLFxuICAgICAgICAgICAgaWNvblNpemU6IFswLCAwXSxcblxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzIyLCA0NF0sXG4gICAgICAgICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZENvbGxlY3RvcnNJY29uO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc3RhbmRhcmRCYWNrZ3JvdW5kID0gKFxuICBzZWNvbmRhcnk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgdGhpcmQ6IGJvb2xlYW4gPSBmYWxzZSxcbikgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBpbkJsYWNrU2hhZG93LFxuICAgIGljb25TaXplOiBzZWNvbmRhcnkgPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5ICYmIHRoaXJkID8gWy0yLCAxOV0gOiBzZWNvbmRhcnkgPyBbLTIsIDQ0XSA6IFsyMCwgNDJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRGYWN0b3J5SWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiB5ZWxsb3dDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwbGFudEljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbNSwgMzBdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRQdW1wU3RhdGlvbkljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogZ3JlZW5DaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwdW1wU3RhdGlvbkljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbNywgMzJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRDb2xsZWN0b3JzSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBjb2xsZWN0b3JJY29uLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG5cbiAgICBpY29uQW5jaG9yOiBbMjUsIDUwXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkV1dUUEljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogYnJpZ2h0Qmx1ZUNpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IFdXVFBJY29uVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzgsIDMxXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGVkQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgcmV0dXJuIEwuaWNvbih7XG4gICAgaWNvblVybDogcmVkUGluUmVkU2hhZG93LFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzMyLCA1NF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBpblJlZFNoYWRvdyxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UgPSAoZXZlbnQ6IElFdmVudCwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc291cmNlO1xuXG4gIGlmIChldmVudCAhPT0gbnVsbCAmJiBldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc291cmNlID0gZXZlbnQuc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLnBvaW50X2lkID09PSBwb2ludC5pZClbMF07XG4gIH1cblxuICByZXR1cm4gZXZlbnQgIT09IG51bGwgJiYgc291cmNlICYmIGV2ZW50LnNlbGVjdGVkX3NvdXJjZSA9PT0gc291cmNlLnBvaW50X2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtlckJlbG9uZ3NUb1NvdXJjZSA9IChldmVudDogSUV2ZW50LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHJldHVybiAoXG4gICAgZXZlbnQgIT09IG51bGwgJiZcbiAgICBldmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBzYW1wbGluZ0ljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IGJsdWVDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDE1XSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogc2FtcGxpbmdJY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAxM10gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGxldCB0aGlyZEljb24gPSBmYWxzZTtcbiAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2Uge1xuICAgIHRoaXJkSWNvbiA9IHRydWU7XG4gICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKHNlY29uZGFyeUljb24sIHRoaXJkSWNvbikpO1xuICB9XG5cbiAgc2FtcGxpbmdJY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcocG9pbnQpKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2luZGV4X29iamVjdCddID0gaW5kZXg7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19mZXdfbGF5ZXJfaWNvbiddID0gdHJ1ZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3NlY29uZGFyeSddID0gdGhpcmRJY29uID8gZmFsc2UgOiBzZWNvbmRhcnlJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fdGhpcmQnXSA9IHRoaXJkSWNvbjtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZyc7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnU2FtcGxpbmdIb3ZlcmVkJztcbiAgICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBvYnNlcnZhdGlvbkljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHBpbmtDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDQwXSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogb2JzZXJ2YXRpb25JY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAzOF0gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoc2Vjb25kYXJ5SWNvbikpO1xuICB9XG5cbiAgb2JzZXJ2YXRpb25JY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcocG9pbnQpKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2luZGV4X29iamVjdCddID0gaW5kZXg7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19mZXdfbGF5ZXJfaWNvbiddID0gdHJ1ZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3NlY29uZGFyeSddID0gc2Vjb25kYXJ5SWNvbjtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3RoaXJkJ10gPSBmYWxzZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdPYnNlcnZhdGlvbic7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnT2JzZXJ2YXRpb25Ib3ZlcmVkJztcbiAgICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvbnMgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgZXZlbnQ6IElFdmVudCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkLFxuICBsYXllckdyb3VwPyxcbikgPT4ge1xuICBsZXQgc2FtcGxlZFBvaW50SWRzID0gZXZlbnQuc2FtcGxpbmdzLm1hcCgocykgPT4gcy5wb2ludF9pZCk7XG4gIGlmIChcbiAgICBldmVudCAhPT0gbnVsbCAmJlxuICAgIGV2ZW50LnNhbXBsaW5ncy5sZW5ndGggIT09IDAgJiZcbiAgICBzYW1wbGVkUG9pbnRJZHMuaW5jbHVkZXMocG9pbnQuaWQpXG4gICkge1xuICAgIGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50KFxuICAgICAgbWFya2VyTG9jYXRpb24sXG4gICAgICBtYXRjaEljb25Ub1BvaW50KHBvaW50LCBldmVudCkgIT09IG51bGwsXG4gICAgICBtYXAsXG4gICAgICBwb2ludCxcbiAgICAgIGV2ZW50LFxuICAgICAgaG92ZXJlZCxcbiAgICAgIGxheWVyR3JvdXAsXG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBvcHVwQ29udGVudCA9IChvYnM6IGFueSwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBpZiAob2JzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtwb2ludC5pZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIke0dyYXBoSWNvbn1cIi8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwicG9wdXAtY29udGVudF9fc2l0ZS1uYW1lXCI+PGI+JHtwb2ludC5ncm91cC5uYW1lfTwvYj48L2g1PlxuICAgICAgICAgICAgICAgICAgICA8aHIvPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInNlY3RvclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtcG9wdXBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZ3JhcGgtaWNvbiBwb3B1cC1ncmFwaC1pY29uLSR7b2JzLmlkfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7R3JhcGhJY29ufVwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zaXRlLW5hbWVcIj48Yj4ke1xuICAgICAgICAgICAgICAgICAgICAgIHBvaW50Lmdyb3VwLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfTwvYj48L2g1PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktcFwiPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXR5YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAncG9wdXAtY29udGVudF9fc2V2ZXJpdHktLScgKyBvYnMuc2V2ZXJpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LWJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5zZXZlcml0aWVzLiR7b2JzLnNldmVyaXR5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX2hyXCIgLz5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudF9fZGlzY2hhcmdlLXRpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LmZpcnN0X3NlZW5gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9OjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YiBpZD1cImZpcnN0LXNlZW4tcG9wdXBcIj48L2I+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktcFwiPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5sYXN0X3NlZW5gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9OjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YiBpZD1cImxhc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldEljb24gPSAoZWxlbWVudCwgY2xpY2tlZCwgcG9pbnQpID0+IHtcbiAgZWxlbWVudC5zZXRJY29uKFxuICAgIGdldFBvaW50SWNvbkJ5VHlwZShcbiAgICAgIHBvaW50Lmdyb3VwLnR5cGUsXG4gICAgICBwb2ludC5uYW1lLFxuICAgICAgcG9pbnQuZ3JvdXAuc2VjdG9yX25hbWUsXG4gICAgICBjbGlja2VkLFxuICAgICAgIWNsaWNrZWQsXG4gICAgKSxcbiAgKTtcbn07XG5cbi8vIHJvdW5kIHRvIG5lYXJlc3QgdGhvdXNhbmQgaXMgdXNlZCB3aGVuIHlvdSB3YW50IHRvIHJvdW5kIHRoZSB3YXRlciBjb25zdW1wdGlvbiB0byB0aGUgbmVhcmVzdCB0aG91c2FuZFxuLy8gZm9yIGV4YW1wbGU6IDIzNCw1NjcgLT4gMjM1LDAwMFxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZVdhdGVyQ29uc3VtcHRpb24gPSAoXG4gIGZsb3dfcmF0ZV91bml0OiBzdHJpbmcsXG4gIHdhdGVyQ29uc3VtcHRpb246IG51bWJlcixcbiAgcm91bmRfdG9fbmVhcmVzdF9rOiBib29sZWFuID0gZmFsc2UsXG4pID0+IHtcbiAgbGV0IGNhbGN1bGF0ZWQgPSAnMCc7XG5cbiAgaWYgKHdhdGVyQ29uc3VtcHRpb24gPiAwKSB7XG4gICAgc3dpdGNoIChmbG93X3JhdGVfdW5pdCkge1xuICAgICAgY2FzZSAnbTNkJzpcbiAgICAgICAgY2FsY3VsYXRlZCA9IHdhdGVyQ29uc3VtcHRpb24udG9GaXhlZCgyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdnZF91cyc6XG4gICAgICAgIGNhbGN1bGF0ZWQgPSAod2F0ZXJDb25zdW1wdGlvbiAqIDI2NC4xNzIpLnRvRml4ZWQoMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2RfdWsnOlxuICAgICAgICBjYWxjdWxhdGVkID0gKHdhdGVyQ29uc3VtcHRpb24gKiAyMTkuOTY5KS50b0ZpeGVkKDIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHJvdW5kX3RvX25lYXJlc3Rfaykge1xuICAgIHJldHVybiByb3VuZFRvTmVhcmVzdFRob3VzYW5kKHBhcnNlRmxvYXQoY2FsY3VsYXRlZCkpLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChjYWxjdWxhdGVkKSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgfVxufTtcblxuY29uc3Qgcm91bmRUb05lYXJlc3RUaG91c2FuZCA9IChudW1iZXIpID0+IHtcbiAgLy8gaWYoaXNBbHJlYWR5Um91bmRlZChudW1iZXIpKSB7XG4gIC8vICAgcmV0dXJuIG51bWJlcjtcbiAgLy8gfVxuXG4gIGlmIChudW1iZXIgPCAxMDAwKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgfVxuXG4gIGNvbnN0IHJvdW5kZWRUaG91c2FuZHMgPSBNYXRoLnJvdW5kKG51bWJlciAvIDEwMDApO1xuICBjb25zdCByb3VuZGVkVmFsdWUgPSByb3VuZGVkVGhvdXNhbmRzICogMTAwMDtcblxuICByZXR1cm4gcm91bmRlZFZhbHVlO1xufTtcblxuLy8gY29uc3QgaXNBbHJlYWR5Um91bmRlZCA9IChudW1iZXIpID0+IHtcbi8vICAgcmV0dXJuIG51bWJlciA9PT0gTWF0aC5yb3VuZChudW1iZXIpO1xuLy8gfVxuXG5leHBvcnQgY29uc3QgdHJhbnNsYXRlRmxvd1JhdGUgPSAoZmxvd19yYXRlX3VuaXQpID0+IHtcbiAgcmV0dXJuIGkxOG4udChcbiAgICBgZGFzaGJvYXJkX3YyLnByb2ZpbGUuZmxvd19yYXRlX3VuaXRfb3B0aW9ucy4ke1xuICAgICAgZmxvd19yYXRlX3VuaXQuaW5jbHVkZXMoJ2dkJykgPyAnZ2QnIDogZmxvd19yYXRlX3VuaXRcbiAgICB9YCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVNYXJrZXJFdmVudHMgPSAoXG4gIG1hcCxcbiAgcG9pbnQsXG4gIHBvaW50Q3VzdG9tSWNvbixcbiAgaGFuZGxlQ2xpY2ssXG4pID0+IHtcbiAgbGV0IHRvb2x0aXBWaXNpYmxlID0gZmFsc2U7XG5cbiAgbWFwLm9uKCd6b29tc3RhcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgbWFwLmNsb3NlUG9wdXAoKTtcbiAgfSk7XG5cbiAgcG9pbnRDdXN0b21JY29uLm9uKCdwb3B1cGNsb3NlJywgKCkgPT4ge1xuICAgIC8vIHNldEljb24ocG9pbnRDdXN0b21JY29uLCBmYWxzZSwgcG9pbnQpO1xuICAgIHRvb2x0aXBWaXNpYmxlID0gZmFsc2U7XG4gIH0pO1xuXG4gIHBvaW50Q3VzdG9tSWNvbi5vbigncG9wdXBvcGVuJywgKCkgPT4ge1xuICAgIC8vIHNldEljb24ocG9pbnRDdXN0b21JY29uLCB0cnVlLCBwb2ludCk7XG4gICAgdG9vbHRpcFZpc2libGUgPSB0cnVlO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ21vdXNlb3ZlcicsICgpID0+IHtcbiAgICBpZiAodG9vbHRpcFZpc2libGUpIHJldHVybjtcblxuICAgIHNldEljb24ocG9pbnRDdXN0b21JY29uLCB0cnVlLCBwb2ludCk7XG4gICAgdG9vbHRpcFZpc2libGUgPSB0cnVlO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ21vdXNlb3V0JywgKCkgPT4ge1xuICAgIGlmIChwb2ludEN1c3RvbUljb24uaXNQb3B1cE9wZW4oKSkgcmV0dXJuO1xuXG4gICAgc2V0SWNvbihwb2ludEN1c3RvbUljb24sIGZhbHNlLCBwb2ludCk7XG4gICAgdG9vbHRpcFZpc2libGUgPSBmYWxzZTtcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVDbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHBvaW50Q3VzdG9tSWNvbi5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICBoYW5kbGVDbGljayhwb2ludEN1c3RvbUljb24ua2FuZG9fb2JqZWN0X2lkKTtcblxuICAgICAgaWYgKHBvaW50SXNGYWN0b3J5KHBvaW50KSkge1xuICAgICAgICBzZW5kQW5hbHl0aWNzRXZlbnQoJ01hcCBWaWV3IC0gRmFjdG9yeSBjbGlja2VkJywgJ21hcCcsIHtcbiAgICAgICAgICBwb2ludF9pZDogcG9pbnQuaWQsXG4gICAgICAgICAgcG9pbnRfbmFtZTogcG9pbnQubmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBiaW5kUG9wdXBUb01hcmtlciA9IChwb2ludCwgbGF5ZXJHcm91cCwgZmxvd19yYXRlX3VuaXQpID0+IHtcbiAgbGV0IGNvbnRlbnQgPSBgXG4gICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50Jz5cbiAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXInPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudF9faGVhZGVyX190aXRsZXNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2hlYWRlcl9fdGl0bGVzX190aXRsZSc+JHtcbiAgICAgICAgICAgICAgICAgIHBvaW50Lm5hbWVcbiAgICAgICAgICAgICAgICB9PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXJfX3RpdGxlc19fc3VidGl0bGUnPiR7XG4gICAgICAgICAgICAgICAgICBwb2ludC5ncm91cC5zZWN0b3JfbmFtZVxuICAgICAgICAgICAgICAgIH08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5Jz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbSc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5X19pdGVtX19pY29uJz5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9JyR7d2F0ZXJSZXVzZUljb259JyAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzJz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzX190aXRsZSc+XG4gICAgICAgICAgICAgICAgICAgICR7Z2V0Rmxvd1JhdGUocG9pbnQuZ3JvdXAud2F0ZXJfZGlzY2hhcmdlLCBmbG93X3JhdGVfdW5pdCl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzX19zdWJ0aXRsZSc+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICd3YXRlcl9kaXNjaGFyZ2UnLFxuICAgICAgICAgICAgICAgICAgKX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgO1xuXG4gIGxheWVyR3JvdXAuYmluZFBvcHVwKGNvbnRlbnQsIHtcbiAgICBjbGFzc05hbWU6ICdwb2ludC1tYXJrZXItcG9wdXAnLFxuICAgIG1pbldpZHRoOiAnMjE0cHgnLFxuICAgIG1heFdpZHRoOiAnMjE0cHgnLFxuICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGbG93UmF0ZSA9IChcbiAgd2F0ZXJDb25zdW1wdGlvbjogbnVtYmVyLFxuICBmbG93UmF0ZVVuaXQ6IHN0cmluZyxcbiAgaXNSb3VuZDogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIGlmICh3YXRlckNvbnN1bXB0aW9uID4gMCkge1xuICAgIHJldHVybiAoXG4gICAgICBjYWxjdWxhdGVXYXRlckNvbnN1bXB0aW9uKGZsb3dSYXRlVW5pdCwgd2F0ZXJDb25zdW1wdGlvbiwgaXNSb3VuZCkgK1xuICAgICAgJyAnICtcbiAgICAgIHRyYW5zbGF0ZUZsb3dSYXRlKGZsb3dSYXRlVW5pdClcbiAgICApO1xuICB9XG4gIHJldHVybiBpMThuLnQoJ2V2ZW50c19vdmVydmlldy5zZXZlcml0aWVzLnVua25vd24nKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwID0gKG1hcCwgbGF5ZXJHcm91cCkgPT4ge1xuICBpZiAobWFwLmhhc0xheWVyKGxheWVyR3JvdXApKSB7XG4gICAgbWFwLnJlbW92ZUxheWVyKGxheWVyR3JvdXApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cCA9IChtYXAsIGxheWVyR3JvdXApID0+IHtcbiAgaWYgKCFtYXAuaGFzTGF5ZXIobGF5ZXJHcm91cCkpIHtcbiAgICBtYXAuYWRkTGF5ZXIobGF5ZXJHcm91cCk7XG4gIH0gZWxzZSB7XG4gICAgcmVtb3ZlTGF5ZXJHcm91cChtYXAsIGxheWVyR3JvdXApO1xuICAgIGFkZExheWVyR3JvdXAobWFwLCBsYXllckdyb3VwKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBvaW50SXNXV1RQID0gKHBvaW50OiBJUG9pbnQpID0+IHtcbiAgcmV0dXJuIHBvaW50Lmdyb3VwLnR5cGUgPT09ICdHcm91cHM6Oldhc3Rld2F0ZXJUcmVhdG1lbnRQbGFudCc7XG59O1xuXG5leHBvcnQgY29uc3QgcG9pbnRJc0ZhY3RvcnkgPSAocG9pbnQ6IElQb2ludCkgPT4ge1xuICByZXR1cm4gaXNGYWN0b3J5VHlwZShwb2ludC5ncm91cC50eXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0ZhY3RvcnlUeXBlID0gKHR5cGU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gdHlwZSA9PT0gJ0dyb3Vwczo6RmFjdG9yeSc7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUNBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUEyQyxJQUFBRSxXQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBRyxhQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBSSxXQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBSyxnQkFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBTzNDLElBQUFNLGdCQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxrQkFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsb0JBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUF5RixJQUFBUyxhQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBVSxZQUFBLEdBQUFYLHNCQUFBLENBQUFDLE9BQUE7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
|
|
476
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2kxOG4iLCJfYmx1ZUNpcmNsZSIsIl9zYW1wbGluZ0ljb24iLCJfcGlua0NpcmNsZSIsIl9vYnNlcnZhdGlvbkljb24iLCJfcmVkUGluUmVkU2hhZG93IiwiX3doaXRlUGluUmVkU2hhZG93IiwiX3doaXRlUGluQmxhY2tTaGFkb3ciLCJfeWVsbG93Q2lyY2xlIiwiX2ZhY3RvcnlJY29uIiwiX2dyZWVuQ2lyY2xlIiwiX3B1bXBTdGF0aW9uSWNvbiIsIl9waW5XYXRlciIsIl9icmlnaHRCbHVlQ2lyY2xlIiwiX1dXVFBJY29uIiwiX3dhdGVyTm9CYWNrZ3JvdW5kIiwiX3doaXRlUG9pbnQiLCJfTWFwVXRpbHMiLCJfUG9pbnRJY29uIiwiX3dhdGVyX3JldXNlIiwiX3V0aWxzIiwiaXNDb2xsZWN0b3JGb2N1c2VkIiwicG9pbnQiLCJldmVudCIsIl9ldmVudCRvYnNlcnZhdGlvbnMiLCJvYnNlcnZhdGlvbnMiLCJsZW5ndGgiLCJpZCIsInBvaW50X2lkIiwiZXhwb3J0cyIsImJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmciLCJzdHJpbmciLCJjb25jYXQiLCJncm91cCIsIm5hbWUiLCJwb2ludElzRmFjdG9yeSIsInNlY3Rvcl9uYW1lIiwid2F0ZXJfZGlzY2hhcmdlIiwiYnViYmxlRm9yV1dUUCIsImFyZ3MiLCJwb2ludEN1c3RvbUljb24iLCJMIiwibWFya2VyIiwibWFya2VyTG9jYXRpb24iLCJpY29uIiwiZ2V0UG9pbnRJY29uQnlUeXBlIiwid3d0cFBvaW50IiwidHlwZSIsInJpc2VPbkhvdmVyIiwiY3JlYXRlQnViYmxlUG9pbnQiLCJtYXAiLCJob3ZlcmVkIiwibGF5ZXJHcm91cCIsImZsb3dfcmF0ZV91bml0IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaGFuZGxlQ2xpY2siLCJzdWJ0aXRsZSIsImFkZExheWVyIiwiYmluZFBvcHVwVG9NYXJrZXIiLCJoYW5kbGVNYXJrZXJFdmVudHMiLCJyZWxhdGVkRXZlbnRzQW1vdW50IiwiZGl2SWNvbiIsImNsYXNzTmFtZSIsImh0bWwiLCJpY29uQW5jaG9yIiwiZXZlbnRzQ291bnRJY29uIiwiX3pvb20iLCJvcGFjaXR5IiwiY3JlYXRlTWFuaG9sZVBvaW50IiwicG9pbnRJY29uIiwiSWNvbiIsImljb25VcmwiLCJ3aGl0ZVBvaW50IiwiaWNvblNpemUiLCJtYW5ob2xlSWNvbiIsIk1hcmtlciIsImJpbmRUb29sdGlwIiwibWF0Y2hJY29uVG9Qb2ludCIsImNvbWJpbmVkRmFjdG9yeUljb24iLCJtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZSIsInVuc2hpZnQiLCJzZWxlY3RlZEJhY2tncm91bmQiLCJtYXJrZXJCZWxvbmdzVG9Tb3VyY2UiLCJiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kIiwic3RhbmRhcmRCYWNrZ3JvdW5kIiwiY29tYmluZWRQdW1wU3RhdGlvbkljb24iLCJjb21iaW5lZFdXVFBJY29uIiwicmVkUGluUmVkU2hhZG93Iiwid2F0ZXJJY29uTm9CYWNrZ3JvdW5kIiwicG9wdXBBbmNob3IiLCJjb21iaW5lZENvbGxlY3RvcnNJY29uIiwic2Vjb25kYXJ5IiwidGhpcmQiLCJ3aGl0ZVBpbkJsYWNrU2hhZG93IiwieWVsbG93Q2lyY2xlVVJMIiwicGxhbnRJY29uVVJMIiwiZ3JlZW5DaXJjbGVVUkwiLCJwdW1wU3RhdGlvbkljb25VUkwiLCJjb2xsZWN0b3JJY29uIiwiYnJpZ2h0Qmx1ZUNpcmNsZVVSTCIsIldXVFBJY29uVVJMIiwid2hpdGVQaW5SZWRTaGFkb3ciLCJzb3VyY2UiLCJzb3VyY2VzIiwiZmlsdGVyIiwic2VsZWN0ZWRfc291cmNlIiwiY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQiLCJzZWNvbmRhcnlJY29uIiwic2FtcGxpbmdJY29uIiwiYmx1ZUNpcmNsZVVSTCIsInNhbXBsaW5nSWNvblVSTCIsInRoaXJkSWNvbiIsImZvckVhY2giLCJpbmRleCIsImNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50Iiwib2JzZXJ2YXRpb25JY29uIiwicGlua0NpcmNsZVVSTCIsIm9ic2VydmF0aW9uSWNvblVSTCIsImNyZWF0ZVNhbXBsaW5nSWNvbnMiLCJzYW1wbGVkUG9pbnRJZHMiLCJzYW1wbGluZ3MiLCJzIiwiaW5jbHVkZXMiLCJwb3B1cENvbnRlbnQiLCJvYnMiLCJHcmFwaEljb24iLCJpMThuIiwidCIsInNldmVyaXR5Iiwic2V0SWNvbiIsImVsZW1lbnQiLCJjbGlja2VkIiwiY2FsY3VsYXRlV2F0ZXJDb25zdW1wdGlvbiIsIndhdGVyQ29uc3VtcHRpb24iLCJyb3VuZF90b19uZWFyZXN0X2siLCJjYWxjdWxhdGVkIiwidG9GaXhlZCIsInJvdW5kVG9OZWFyZXN0VGhvdXNhbmQiLCJwYXJzZUZsb2F0IiwidG9Mb2NhbGVTdHJpbmciLCJNYXRoIiwicm91bmQiLCJudW1iZXIiLCJyb3VuZGVkVGhvdXNhbmRzIiwicm91bmRlZFZhbHVlIiwidHJhbnNsYXRlRmxvd1JhdGUiLCJ0b29sdGlwVmlzaWJsZSIsIm9uIiwiY2xvc2VQb3B1cCIsImlzUG9wdXBPcGVuIiwia2FuZG9fb2JqZWN0X2lkIiwic2VuZEFuYWx5dGljc0V2ZW50IiwicG9pbnRfbmFtZSIsImNvbnRlbnQiLCJ3YXRlclJldXNlSWNvbiIsImdldEZsb3dSYXRlIiwiYmluZFBvcHVwIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImNsb3NlQnV0dG9uIiwiZmxvd1JhdGVVbml0IiwiaXNSb3VuZCIsInJlbW92ZUxheWVyR3JvdXAiLCJoYXNMYXllciIsInJlbW92ZUxheWVyIiwiYWRkTGF5ZXJHcm91cCIsInBvaW50SXNXV1RQIiwiaXNGYWN0b3J5VHlwZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9wb2ludHMvUG9pbnRVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgR3JhcGhJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9saW5lLWNoYXJ0LnN2Zyc7XG5pbXBvcnQgTCwgeyBMYXRMbmdUdXBsZSB9IGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi4vLi4vLi4vdXRpbGl0aWVzL2kxOG4nO1xuaW1wb3J0IHsgSVBvaW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvcG9pbnRzL21vZGVscy9JUG9pbnQnO1xuaW1wb3J0IGJsdWVDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2JsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgc2FtcGxpbmdJY29uVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9zYW1wbGluZy1pY29uLnN2Zyc7XG5pbXBvcnQgcGlua0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcGluay1jaXJjbGUuc3ZnJztcbmltcG9ydCBvYnNlcnZhdGlvbkljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL29ic2VydmF0aW9uLWljb24uc3ZnJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2V2ZW50cy9tb2RlbHMvSUV2ZW50JztcbmltcG9ydCByZWRQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3JlZC1waW4tcmVkLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHdoaXRlUGluUmVkU2hhZG93IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy93aGl0ZS1waW4tcmVkLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHdoaXRlUGluQmxhY2tTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1ibGFjay1zaGFkb3cucG5nJztcbmltcG9ydCB5ZWxsb3dDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3llbGxvdy1jaXJjbGUuc3ZnJztcbmltcG9ydCBwbGFudEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2ZhY3RvcnktaWNvbi5zdmcnO1xuaW1wb3J0IGdyZWVuQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9ncmVlbi1jaXJjbGUuc3ZnJztcbmltcG9ydCBwdW1wU3RhdGlvbkljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3B1bXAtc3RhdGlvbi1pY29uLnN2Zyc7XG5pbXBvcnQgY29sbGVjdG9ySWNvbiBmcm9tICcuLi8uLi8uLi9hc3NldHMvbWFwL3Bpbi13YXRlci5zdmcnO1xuaW1wb3J0IGJyaWdodEJsdWVDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2JyaWdodC1ibHVlLWNpcmNsZS5zdmcnO1xuaW1wb3J0IFdXVFBJY29uVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9XV1RQLWljb24uc3ZnJztcbmltcG9ydCB3YXRlckljb25Ob0JhY2tncm91bmQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3dhdGVyLW5vLWJhY2tncm91bmQuc3ZnJztcbmltcG9ydCB3aGl0ZVBvaW50IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy93aGl0ZS1wb2ludC5wbmcnO1xuaW1wb3J0IHsgZXZlbnRzQ291bnRJY29uIH0gZnJvbSAnLi4vTWFwVXRpbHMnO1xuaW1wb3J0IHsgZ2V0UG9pbnRJY29uQnlUeXBlIH0gZnJvbSAnLi9Qb2ludEljb24nO1xuaW1wb3J0IHdhdGVyUmV1c2VJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9pY29ucy93YXRlcl9yZXVzZS5zdmcnO1xuaW1wb3J0IHsgc2VuZEFuYWx5dGljc0V2ZW50IH0gZnJvbSAnc3JjL3BhZ2VzL0Rhc2hib2FyZE1hcC91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBpc0NvbGxlY3RvckZvY3VzZWQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGV2ZW50Py5vYnNlcnZhdGlvbnM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgIHBvaW50LmlkID09PSBldmVudC5vYnNlcnZhdGlvbnNbMF0ucG9pbnRfaWRcbiAgKTtcbn07XG5cbmNvbnN0IGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcgPSAocG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc3RyaW5nID0gYCR7cG9pbnQuZ3JvdXAubmFtZX0gYDtcblxuICBpZiAocG9pbnRJc0ZhY3RvcnkocG9pbnQpKSB7XG4gICAgc3RyaW5nICs9IGA8YnIvPlNlY3RvcjogJHtwb2ludC5ncm91cC5zZWN0b3JfbmFtZX1gO1xuICAgIHN0cmluZyArPSBgPGJyLz5XYXRlciBDb25zdW1wdGlvbjogJHtwb2ludC5ncm91cC53YXRlcl9kaXNjaGFyZ2V9YDtcbiAgfSBlbHNlIHtcbiAgICBzdHJpbmcgPSBgJHtwb2ludC5uYW1lfWA7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1YmJsZUZvcldXVFAgPSAoYXJncykgPT4ge1xuICBjb25zdCBwb2ludEN1c3RvbUljb246IEwuTWFya2VyID0gTC5tYXJrZXIoYXJncy5tYXJrZXJMb2NhdGlvbiwge1xuICAgIGljb246IGdldFBvaW50SWNvbkJ5VHlwZShcbiAgICAgIGFyZ3Mud3d0cFBvaW50Lmdyb3VwLnR5cGUsXG4gICAgICBhcmdzLnd3dHBQb2ludC5uYW1lLFxuICAgICAgJycsXG4gICAgICBmYWxzZSxcbiAgICAgIHRydWUsXG4gICAgKSxcbiAgICByaXNlT25Ib3ZlcjogdHJ1ZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHBvaW50Q3VzdG9tSWNvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVCdWJibGVQb2ludCA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQ/LFxuICBsYXllckdyb3VwPyxcbiAgZmxvd19yYXRlX3VuaXQgPSAnZ2RfdXMnLFxuICBoYW5kbGVDbGljaz8sXG4pID0+IHtcbiAgY29uc3Qgc3VidGl0bGUgPSBwb2ludElzRmFjdG9yeShwb2ludCkgPyBwb2ludC5ncm91cC5zZWN0b3JfbmFtZSA6ICcnO1xuICBsZXQgcG9pbnRDdXN0b21JY29uOiBMLk1hcmtlciA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgaWNvbjogZ2V0UG9pbnRJY29uQnlUeXBlKFxuICAgICAgcG9pbnQuZ3JvdXAudHlwZSxcbiAgICAgIHBvaW50Lm5hbWUsXG4gICAgICBzdWJ0aXRsZSxcbiAgICAgIGZhbHNlLFxuICAgICAgdHJ1ZSxcbiAgICApLFxuICAgIHJpc2VPbkhvdmVyOiB0cnVlLFxuICB9KTtcbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50SG92ZXJlZCc7XG5cbiAgbGF5ZXJHcm91cC5hZGRMYXllcihwb2ludEN1c3RvbUljb24pO1xuICBpZiAocG9pbnRJc0ZhY3RvcnkocG9pbnQpKSB7XG4gICAgYmluZFBvcHVwVG9NYXJrZXIocG9pbnQsIHBvaW50Q3VzdG9tSWNvbiwgZmxvd19yYXRlX3VuaXQpO1xuICB9XG5cbiAgaGFuZGxlTWFya2VyRXZlbnRzKG1hcCwgcG9pbnQsIHBvaW50Q3VzdG9tSWNvbiwgaGFuZGxlQ2xpY2spO1xuXG4gIGlmIChwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50KSB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbiA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBMLmRpdkljb24oe1xuICAgICAgICBjbGFzc05hbWU6IGBcbiAgICAgICAgICAke1xuICAgICAgICAgICAgcG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+PSAxMDBcbiAgICAgICAgICAgICAgPyAnY2lyY2xlLWV2ZW50cy1hbW91bnQgY2lyY2xlLWV2ZW50cy1hbW91bnQtLXRyaWRpZ2l0J1xuICAgICAgICAgICAgICA6ICdjaXJjbGUtZXZlbnRzLWFtb3VudCdcbiAgICAgICAgICB9IFxuICAgICAgICAgICR7cG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+IDIgPyAnYWxlcnQtY29sb3InIDogJyd9XG4gICAgICAgICAgICBgLFxuICAgICAgICBodG1sOiBgPHA+JHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50fTwvcD5gLFxuICAgICAgICBpY29uQW5jaG9yOiBldmVudHNDb3VudEljb24obWFwLl96b29tKS5pY29uQW5jaG9yLFxuICAgICAgfSksXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgICBvcGFjaXR5OiBob3ZlcmVkID8gMSA6IDAsXG4gICAgfSk7XG5cbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVyJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVySG92ZXJlZCc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYW5ob2xlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgbGV0IHBvaW50SWNvbiA9IG5ldyBMLkljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUG9pbnQsXG4gICAgaWNvblNpemU6IFs5LCA5XSxcbiAgICBpY29uQW5jaG9yOiBbNC41LCA0LjVdLFxuICB9KTtcbiAgbGV0IG1hbmhvbGVJY29uOiBhbnkgPSBuZXcgTC5NYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICBpY29uOiBwb2ludEljb24sXG4gICAgcmlzZU9uSG92ZXI6IHRydWUsXG4gIH0pO1xuICBtYW5ob2xlSWNvbi5iaW5kVG9vbHRpcChidWlsZE1hbmhvbGVUb29sdGlwU3RyaW5nKHBvaW50KSk7XG4gIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnQnO1xuICBtYW5ob2xlSWNvblsna2FuZG9fcG9pbnRfdHlwZSddID0gJ01hbmhvbGUnO1xuICBpZiAoaG92ZXJlZCkgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50SG92ZXJlZCc7XG4gIGxheWVyR3JvdXAuYWRkTGF5ZXIobWFuaG9sZUljb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoSWNvblRvUG9pbnQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICBzd2l0Y2ggKHBvaW50Lmdyb3VwLnR5cGUpIHtcbiAgICBjYXNlICdHcm91cHM6OkZhY3RvcnknOlxuICAgICAgaWYgKGNvbWJpbmVkRmFjdG9yeUljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkRmFjdG9yeUljb247XG4gICAgY2FzZSAnR3JvdXBzOjpQdW1wU3RhdGlvbic6XG4gICAgICBpZiAoY29tYmluZWRQdW1wU3RhdGlvbkljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uO1xuICAgIGNhc2UgJ0dyb3Vwczo6V2FzdGV3YXRlclRyZWF0bWVudFBsYW50JzpcbiAgICAgIGlmIChjb21iaW5lZFdXVFBJY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZFdXVFBJY29uO1xuXG4gICAgY2FzZSAnR3JvdXBzOjpDb2xsZWN0b3JzJzpcbiAgICAgIGlmIChpc0NvbGxlY3RvckZvY3VzZWQocG9pbnQsIGV2ZW50KSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIEwuaWNvbih7XG4gICAgICAgICAgICBpY29uVXJsOiByZWRQaW5SZWRTaGFkb3csXG4gICAgICAgICAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzMwLCA1Ml0sXG4gICAgICAgICAgfSksXG5cbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogd2F0ZXJJY29uTm9CYWNrZ3JvdW5kLFxuICAgICAgICAgICAgaWNvblNpemU6IFswLCAwXSxcblxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzIyLCA0NF0sXG4gICAgICAgICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZENvbGxlY3RvcnNJY29uO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc3RhbmRhcmRCYWNrZ3JvdW5kID0gKFxuICBzZWNvbmRhcnk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgdGhpcmQ6IGJvb2xlYW4gPSBmYWxzZSxcbikgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBpbkJsYWNrU2hhZG93LFxuICAgIGljb25TaXplOiBzZWNvbmRhcnkgPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5ICYmIHRoaXJkID8gWy0yLCAxOV0gOiBzZWNvbmRhcnkgPyBbLTIsIDQ0XSA6IFsyMCwgNDJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRGYWN0b3J5SWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiB5ZWxsb3dDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwbGFudEljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbNSwgMzBdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRQdW1wU3RhdGlvbkljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogZ3JlZW5DaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwdW1wU3RhdGlvbkljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbNywgMzJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRDb2xsZWN0b3JzSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBjb2xsZWN0b3JJY29uLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG5cbiAgICBpY29uQW5jaG9yOiBbMjUsIDUwXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkV1dUUEljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogYnJpZ2h0Qmx1ZUNpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IFdXVFBJY29uVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzgsIDMxXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGVkQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgcmV0dXJuIEwuaWNvbih7XG4gICAgaWNvblVybDogcmVkUGluUmVkU2hhZG93LFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzMyLCA1NF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBpblJlZFNoYWRvdyxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UgPSAoZXZlbnQ6IElFdmVudCwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc291cmNlO1xuXG4gIGlmIChldmVudCAhPT0gbnVsbCAmJiBldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc291cmNlID0gZXZlbnQuc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLnBvaW50X2lkID09PSBwb2ludC5pZClbMF07XG4gIH1cblxuICByZXR1cm4gZXZlbnQgIT09IG51bGwgJiYgc291cmNlICYmIGV2ZW50LnNlbGVjdGVkX3NvdXJjZSA9PT0gc291cmNlLnBvaW50X2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtlckJlbG9uZ3NUb1NvdXJjZSA9IChldmVudDogSUV2ZW50LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHJldHVybiAoXG4gICAgZXZlbnQgIT09IG51bGwgJiZcbiAgICBldmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBzYW1wbGluZ0ljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IGJsdWVDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDE1XSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogc2FtcGxpbmdJY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAxM10gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGxldCB0aGlyZEljb24gPSBmYWxzZTtcbiAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2Uge1xuICAgIHRoaXJkSWNvbiA9IHRydWU7XG4gICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKHNlY29uZGFyeUljb24sIHRoaXJkSWNvbikpO1xuICB9XG5cbiAgc2FtcGxpbmdJY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcocG9pbnQpKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2luZGV4X29iamVjdCddID0gaW5kZXg7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19mZXdfbGF5ZXJfaWNvbiddID0gdHJ1ZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3NlY29uZGFyeSddID0gdGhpcmRJY29uID8gZmFsc2UgOiBzZWNvbmRhcnlJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fdGhpcmQnXSA9IHRoaXJkSWNvbjtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZyc7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnU2FtcGxpbmdIb3ZlcmVkJztcbiAgICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBvYnNlcnZhdGlvbkljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHBpbmtDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDQwXSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogb2JzZXJ2YXRpb25JY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAzOF0gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoc2Vjb25kYXJ5SWNvbikpO1xuICB9XG5cbiAgb2JzZXJ2YXRpb25JY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcocG9pbnQpKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2luZGV4X29iamVjdCddID0gaW5kZXg7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19mZXdfbGF5ZXJfaWNvbiddID0gdHJ1ZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3NlY29uZGFyeSddID0gc2Vjb25kYXJ5SWNvbjtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3RoaXJkJ10gPSBmYWxzZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdPYnNlcnZhdGlvbic7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnT2JzZXJ2YXRpb25Ib3ZlcmVkJztcbiAgICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvbnMgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgZXZlbnQ6IElFdmVudCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkLFxuICBsYXllckdyb3VwPyxcbikgPT4ge1xuICBsZXQgc2FtcGxlZFBvaW50SWRzID0gZXZlbnQuc2FtcGxpbmdzLm1hcCgocykgPT4gcy5wb2ludF9pZCk7XG4gIGlmIChcbiAgICBldmVudCAhPT0gbnVsbCAmJlxuICAgIGV2ZW50LnNhbXBsaW5ncy5sZW5ndGggIT09IDAgJiZcbiAgICBzYW1wbGVkUG9pbnRJZHMuaW5jbHVkZXMocG9pbnQuaWQpXG4gICkge1xuICAgIGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50KFxuICAgICAgbWFya2VyTG9jYXRpb24sXG4gICAgICBtYXRjaEljb25Ub1BvaW50KHBvaW50LCBldmVudCkgIT09IG51bGwsXG4gICAgICBtYXAsXG4gICAgICBwb2ludCxcbiAgICAgIGV2ZW50LFxuICAgICAgaG92ZXJlZCxcbiAgICAgIGxheWVyR3JvdXAsXG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBvcHVwQ29udGVudCA9IChvYnM6IGFueSwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBpZiAob2JzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtwb2ludC5pZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIke0dyYXBoSWNvbn1cIi8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwicG9wdXAtY29udGVudF9fc2l0ZS1uYW1lXCI+PGI+JHtwb2ludC5ncm91cC5uYW1lfTwvYj48L2g1PlxuICAgICAgICAgICAgICAgICAgICA8aHIvPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInNlY3RvclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtcG9wdXBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZ3JhcGgtaWNvbiBwb3B1cC1ncmFwaC1pY29uLSR7b2JzLmlkfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7R3JhcGhJY29ufVwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zaXRlLW5hbWVcIj48Yj4ke1xuICAgICAgICAgICAgICAgICAgICAgIHBvaW50Lmdyb3VwLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfTwvYj48L2g1PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktcFwiPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXR5YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAncG9wdXAtY29udGVudF9fc2V2ZXJpdHktLScgKyBvYnMuc2V2ZXJpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LWJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5zZXZlcml0aWVzLiR7b2JzLnNldmVyaXR5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX2hyXCIgLz5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudF9fZGlzY2hhcmdlLXRpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LmZpcnN0X3NlZW5gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9OjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YiBpZD1cImZpcnN0LXNlZW4tcG9wdXBcIj48L2I+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktcFwiPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5sYXN0X3NlZW5gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9OjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YiBpZD1cImxhc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldEljb24gPSAoZWxlbWVudCwgY2xpY2tlZCwgcG9pbnQpID0+IHtcbiAgZWxlbWVudC5zZXRJY29uKFxuICAgIGdldFBvaW50SWNvbkJ5VHlwZShcbiAgICAgIHBvaW50Lmdyb3VwLnR5cGUsXG4gICAgICBwb2ludC5uYW1lLFxuICAgICAgcG9pbnQuZ3JvdXAuc2VjdG9yX25hbWUsXG4gICAgICBjbGlja2VkLFxuICAgICAgIWNsaWNrZWQsXG4gICAgKSxcbiAgKTtcbn07XG5cbi8vIHJvdW5kIHRvIG5lYXJlc3QgdGhvdXNhbmQgaXMgdXNlZCB3aGVuIHlvdSB3YW50IHRvIHJvdW5kIHRoZSB3YXRlciBjb25zdW1wdGlvbiB0byB0aGUgbmVhcmVzdCB0aG91c2FuZFxuLy8gZm9yIGV4YW1wbGU6IDIzNCw1NjcgLT4gMjM1LDAwMFxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZVdhdGVyQ29uc3VtcHRpb24gPSAoXG4gIGZsb3dfcmF0ZV91bml0OiBzdHJpbmcsXG4gIHdhdGVyQ29uc3VtcHRpb246IG51bWJlcixcbiAgcm91bmRfdG9fbmVhcmVzdF9rOiBib29sZWFuID0gZmFsc2UsXG4pID0+IHtcbiAgbGV0IGNhbGN1bGF0ZWQgPSAnMCc7XG5cbiAgaWYgKHdhdGVyQ29uc3VtcHRpb24gPiAwKSB7XG4gICAgc3dpdGNoIChmbG93X3JhdGVfdW5pdCkge1xuICAgICAgY2FzZSAnbTNkJzpcbiAgICAgICAgY2FsY3VsYXRlZCA9IHdhdGVyQ29uc3VtcHRpb24udG9GaXhlZCgyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdnZF91cyc6XG4gICAgICAgIGNhbGN1bGF0ZWQgPSAod2F0ZXJDb25zdW1wdGlvbiAqIDI2NC4xNzIpLnRvRml4ZWQoMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2RfdWsnOlxuICAgICAgICBjYWxjdWxhdGVkID0gKHdhdGVyQ29uc3VtcHRpb24gKiAyMTkuOTY5KS50b0ZpeGVkKDIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHJvdW5kX3RvX25lYXJlc3Rfaykge1xuICAgIHJldHVybiByb3VuZFRvTmVhcmVzdFRob3VzYW5kKHBhcnNlRmxvYXQoY2FsY3VsYXRlZCkpLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChjYWxjdWxhdGVkKSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgfVxufTtcblxuY29uc3Qgcm91bmRUb05lYXJlc3RUaG91c2FuZCA9IChudW1iZXIpID0+IHtcbiAgLy8gaWYoaXNBbHJlYWR5Um91bmRlZChudW1iZXIpKSB7XG4gIC8vICAgcmV0dXJuIG51bWJlcjtcbiAgLy8gfVxuXG4gIGlmIChudW1iZXIgPCAxMDAwKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgfVxuXG4gIGNvbnN0IHJvdW5kZWRUaG91c2FuZHMgPSBNYXRoLnJvdW5kKG51bWJlciAvIDEwMDApO1xuICBjb25zdCByb3VuZGVkVmFsdWUgPSByb3VuZGVkVGhvdXNhbmRzICogMTAwMDtcblxuICByZXR1cm4gcm91bmRlZFZhbHVlO1xufTtcblxuLy8gY29uc3QgaXNBbHJlYWR5Um91bmRlZCA9IChudW1iZXIpID0+IHtcbi8vICAgcmV0dXJuIG51bWJlciA9PT0gTWF0aC5yb3VuZChudW1iZXIpO1xuLy8gfVxuXG5leHBvcnQgY29uc3QgdHJhbnNsYXRlRmxvd1JhdGUgPSAoZmxvd19yYXRlX3VuaXQpID0+IHtcbiAgcmV0dXJuIGkxOG4udChcbiAgICBgZGFzaGJvYXJkX3YyLnByb2ZpbGUuZmxvd19yYXRlX3VuaXRfb3B0aW9ucy4ke1xuICAgICAgZmxvd19yYXRlX3VuaXQuaW5jbHVkZXMoJ2dkJykgPyAnZ2QnIDogZmxvd19yYXRlX3VuaXRcbiAgICB9YCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVNYXJrZXJFdmVudHMgPSAoXG4gIG1hcCxcbiAgcG9pbnQsXG4gIHBvaW50Q3VzdG9tSWNvbixcbiAgaGFuZGxlQ2xpY2ssXG4pID0+IHtcbiAgbGV0IHRvb2x0aXBWaXNpYmxlID0gZmFsc2U7XG5cbiAgbWFwLm9uKCd6b29tc3RhcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgbWFwLmNsb3NlUG9wdXAoKTtcbiAgfSk7XG5cbiAgcG9pbnRDdXN0b21JY29uLm9uKCdwb3B1cGNsb3NlJywgKCkgPT4ge1xuICAgIC8vIHNldEljb24ocG9pbnRDdXN0b21JY29uLCBmYWxzZSwgcG9pbnQpO1xuICAgIHRvb2x0aXBWaXNpYmxlID0gZmFsc2U7XG4gIH0pO1xuXG4gIHBvaW50Q3VzdG9tSWNvbi5vbigncG9wdXBvcGVuJywgKCkgPT4ge1xuICAgIC8vIHNldEljb24ocG9pbnRDdXN0b21JY29uLCB0cnVlLCBwb2ludCk7XG4gICAgdG9vbHRpcFZpc2libGUgPSB0cnVlO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ21vdXNlb3ZlcicsICgpID0+IHtcbiAgICBpZiAodG9vbHRpcFZpc2libGUpIHJldHVybjtcblxuICAgIHNldEljb24ocG9pbnRDdXN0b21JY29uLCB0cnVlLCBwb2ludCk7XG4gICAgdG9vbHRpcFZpc2libGUgPSB0cnVlO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ21vdXNlb3V0JywgKCkgPT4ge1xuICAgIGlmIChwb2ludEN1c3RvbUljb24uaXNQb3B1cE9wZW4oKSkgcmV0dXJuO1xuXG4gICAgc2V0SWNvbihwb2ludEN1c3RvbUljb24sIGZhbHNlLCBwb2ludCk7XG4gICAgdG9vbHRpcFZpc2libGUgPSBmYWxzZTtcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVDbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHBvaW50Q3VzdG9tSWNvbi5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICBoYW5kbGVDbGljayhwb2ludEN1c3RvbUljb24ua2FuZG9fb2JqZWN0X2lkKTtcblxuICAgICAgaWYgKHBvaW50SXNGYWN0b3J5KHBvaW50KSkge1xuICAgICAgICBzZW5kQW5hbHl0aWNzRXZlbnQoJ01hcCBWaWV3IC0gRmFjdG9yeSBjbGlja2VkJywgJ21hcCcsIHtcbiAgICAgICAgICBwb2ludF9pZDogcG9pbnQuaWQsXG4gICAgICAgICAgcG9pbnRfbmFtZTogcG9pbnQubmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBiaW5kUG9wdXBUb01hcmtlciA9IChwb2ludCwgbGF5ZXJHcm91cCwgZmxvd19yYXRlX3VuaXQpID0+IHtcbiAgbGV0IGNvbnRlbnQgPSBgXG4gICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50Jz5cbiAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXInPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudF9faGVhZGVyX190aXRsZXNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2hlYWRlcl9fdGl0bGVzX190aXRsZSc+JHtcbiAgICAgICAgICAgICAgICAgIHBvaW50Lm5hbWVcbiAgICAgICAgICAgICAgICB9PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXJfX3RpdGxlc19fc3VidGl0bGUnPiR7XG4gICAgICAgICAgICAgICAgICBwb2ludC5ncm91cC5zZWN0b3JfbmFtZVxuICAgICAgICAgICAgICAgIH08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5Jz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbSc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5X19pdGVtX19pY29uJz5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9JyR7d2F0ZXJSZXVzZUljb259JyAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzJz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzX190aXRsZSc+XG4gICAgICAgICAgICAgICAgICAgICR7Z2V0Rmxvd1JhdGUocG9pbnQuZ3JvdXAud2F0ZXJfZGlzY2hhcmdlLCBmbG93X3JhdGVfdW5pdCl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzX19zdWJ0aXRsZSc+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICd3YXRlcl9kaXNjaGFyZ2UnLFxuICAgICAgICAgICAgICAgICAgKX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgO1xuXG4gIGxheWVyR3JvdXAuYmluZFBvcHVwKGNvbnRlbnQsIHtcbiAgICBjbGFzc05hbWU6ICdwb2ludC1tYXJrZXItcG9wdXAnLFxuICAgIG1pbldpZHRoOiAnMjE0cHgnLFxuICAgIG1heFdpZHRoOiAnMjE0cHgnLFxuICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGbG93UmF0ZSA9IChcbiAgd2F0ZXJDb25zdW1wdGlvbjogbnVtYmVyLFxuICBmbG93UmF0ZVVuaXQ6IHN0cmluZyxcbiAgaXNSb3VuZDogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIGlmICh3YXRlckNvbnN1bXB0aW9uID4gMCkge1xuICAgIHJldHVybiAoXG4gICAgICBjYWxjdWxhdGVXYXRlckNvbnN1bXB0aW9uKGZsb3dSYXRlVW5pdCwgd2F0ZXJDb25zdW1wdGlvbiwgaXNSb3VuZCkgK1xuICAgICAgJyAnICtcbiAgICAgIHRyYW5zbGF0ZUZsb3dSYXRlKGZsb3dSYXRlVW5pdClcbiAgICApO1xuICB9XG4gIHJldHVybiBpMThuLnQoJ2V2ZW50c19vdmVydmlldy5zZXZlcml0aWVzLnVua25vd24nKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwID0gKG1hcCwgbGF5ZXJHcm91cCkgPT4ge1xuICBpZiAobWFwLmhhc0xheWVyKGxheWVyR3JvdXApKSB7XG4gICAgbWFwLnJlbW92ZUxheWVyKGxheWVyR3JvdXApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cCA9IChtYXAsIGxheWVyR3JvdXApID0+IHtcbiAgaWYgKCFtYXAuaGFzTGF5ZXIobGF5ZXJHcm91cCkpIHtcbiAgICBtYXAuYWRkTGF5ZXIobGF5ZXJHcm91cCk7XG4gIH0gZWxzZSB7XG4gICAgcmVtb3ZlTGF5ZXJHcm91cChtYXAsIGxheWVyR3JvdXApO1xuICAgIGFkZExheWVyR3JvdXAobWFwLCBsYXllckdyb3VwKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBvaW50SXNXV1RQID0gKHBvaW50OiBJUG9pbnQpID0+IHtcbiAgcmV0dXJuIHBvaW50Lmdyb3VwLnR5cGUgPT09ICdHcm91cHM6Oldhc3Rld2F0ZXJUcmVhdG1lbnRQbGFudCc7XG59O1xuXG5leHBvcnQgY29uc3QgcG9pbnRJc0ZhY3RvcnkgPSAocG9pbnQ6IElQb2ludCkgPT4ge1xuICByZXR1cm4gaXNGYWN0b3J5VHlwZShwb2ludC5ncm91cC50eXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0ZhY3RvcnlUeXBlID0gKHR5cGU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gdHlwZSA9PT0gJ0dyb3Vwczo6RmFjdG9yeSc7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUNBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUEyQyxJQUFBRSxXQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBRyxhQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBSSxXQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBSyxnQkFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBTzNDLElBQUFNLGdCQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxrQkFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsb0JBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUF5RixJQUFBUyxhQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBVSxZQUFBLEdBQUFYLHNCQUFBLENB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
|