{"version":3,"sources":["constants/actionTypes.js","reducers/authReducer.js","constants/constants.ts","constants/date.js","utils/timeranges.ts","utils/date.js","reducers/sessionReducer.js","reducers/rootReducer.js","reducers/flagsReducer.js","reducers/userReducer.js","env-config.js","hooks/useAuthProvider.ts","components/EmptyState/EmptyState.tsx","images/spinner.svg","components/Spinner/Spinner.jsx","components/TransitionWrapper/TransitionWrapper.tsx","components/LoadingStates/LoadingStates.tsx","images/bug.svg","images/exclamation-triangle.svg","images/heart-break_wolverine.svg","images/issue.svg","images/pr.svg","images/pr-activity-chevron-approved.svg","images/pr-activity-chevron-commented.svg","images/pr-activity-chevron-update.svg","images/Party Popper - Wolverine.svg","images/subtask.svg","images/Party Popper - Aurora.svg","images/heart-break_aurora.svg","components/Icon/Icon.tsx","utils/api.ts","utils/router.ts","utils/settings.ts","hooks/useUserSettings.ts","utils/user.js","hooks/useFullOrganizationData.ts","utils/teams.ts","hooks/useTeamsData.ts","hooks/useOrganizationData.ts","hooks/useOwnFallbackOrgChartTeam.ts","utils/sprints.ts","utils/url-params.ts","hooks/useActiveUser.ts","hooks/useActiveUsersTeams.ts","hooks/useDefaultTeam.ts","hooks/useProjectsAndBoardsData.ts","hooks/useSprintMetadata.ts","hooks/useUrlParamsContextValues.ts","hooks/useActiveTeam.ts","context/url-params.tsx","utils/uplevelAnalytics.js","hooks/useTracking.ts","components/SupportEmailLink/SupportEmailLink.tsx","components/UserWithNoUplevelAccountPage/UserWithNoUplevelAccountPage.tsx","actions/authActions.js","actions/flagActions.js","actions/sessionActions.js","actions/userActions.js","utils/work-items.ts","hooks/useUrlParams.ts","components/DashboardPage/fetchUserData.ts","components/DashboardPage/fetchUserInfoData.ts","hooks/useInitialData.ts","components/DashboardPage/parseUserData.ts","components/DataLoadWrapper/DataLoadWrapper.tsx","components/Auth0UiReadyWrapper/Auth0UiReadyWrapper.tsx","components/SecureRoute/SecureRoute.tsx","components/ContentWithIcon/ContentWithIcon.tsx","components/Button/Button.jsx","constants/widgets.js","images/avatar_01.svg","images/avatar_02.svg","images/avatar_03.svg","images/avatar_04.svg","images/avatar_05.svg","images/avatar_06.svg","images/avatar_07.svg","images/avatar_08.svg","components/Image/Image.jsx","components/DefaultAvatar/DefaultAvatar.jsx","components/SlackAvatar/SlackAvatar.tsx","components/CrossTeamAvatar/CrossTeamAvatar.tsx","components/UserCommentBlock/UserCommentBlock.tsx","components/CommentsList/CommentsList.tsx","components/Tooltip/Tooltip.jsx","components/Annotations/ReactionTooltip.js","components/Annotations/ReactionPills.js","components/CloseButton/CloseButton.tsx","components/Modal/Modal.jsx","components/Annotations/AnnotationsModal.js","components/ValueWithDirectionality/ValueWithDirectionality.tsx","utils/cycle-time.ts","components/CycleTimeStageHeader/CycleTimeStageHeader.tsx","components/CycleTimeValueDisplay/CycleTimeValueDisplay.tsx","utils/color.js","themes/currentTheme.ts","components/HtmlText/HtmlText.tsx","components/InfoIcon/InfoIcon.tsx","components/WorkMetadataCycleTimeSummary/WorkMetadataCycleTimeSummary.tsx","components/ChartCycleTime/ChartCycleTime.tsx","components/RouteLink/RouteLink.tsx","components/Switch/Switch.tsx","components/ShowRelatedItemsSelector/ShowRelatedItemsSelector.tsx","components/Time/Time.jsx","components/WorkMetadataIcon/WorkMetadataIcon.tsx","components/SortableColumnHeader/SortableColumnHeader.tsx","components/Table/Table.tsx","components/WorkMetadataIssuesList/WorkMetadataIssuesList.tsx","constants/components.js","components/WorkMetadataTeamList/WorkMetadataTeamList.tsx","utils/work-deep-dive.ts","components/EpicDetailsIssuesList/EpicDetailsIssuesList.tsx","components/Stepper/Stepper.tsx","components/PaginationStepper/PaginationStepper.tsx","components/WorkMetadataDetailsTeamList/WorkMetadataDetailsTeamList.tsx","components/StoryPoints/StoryPoints.tsx","components/WorkMetadataIssuesSummary/WorkMetadataIssuesSummary.tsx","components/WorkMetadataDetailsSummary/WorkMetadataDetailsSummary.tsx","hooks/useWorkItemsData.ts","hooks/useAnnotationsData.ts","components/EpicDetails/EpicDetails.tsx","components/ContextDrawer/ContextDrawer.tsx","images/checked.svg","images/unchecked-light.svg","images/unchecked-dark.svg","components/CustomCheckboxInput/CustomCheckboxInput.tsx","components/CustomRadioInput/CustomRadioInput.tsx","components/InputsList/InputsList.tsx","components/SelectableInputsList/SelectableInputsList.tsx","components/EpicFilterCheckboxList/EpicFilterCheckboxList.tsx","components/OtherSprintItemsFilter/OtherSprintItemsFilter.tsx","components/OwnerContributorFilter/OwnerContributorFilter.tsx","components/ProjectsFilter/ProjectsFilter.tsx","components/PullRequestCalloutsFilter/PullRequestCalloutsFilter.tsx","components/RepositoryFilter/RepositoryFilter.tsx","components/StatusFilter/StatusFilter.tsx","components/TypesOfWorkFilter/TypesOfWorkFilter.tsx","components/WorkItemCalloutsFilter/WorkItemCalloutsFilter.tsx","components/WorkItemTypeFilter/WorkItemTypeFilter.tsx","components/EpicFilter/EpicFilter.tsx","components/EpicFilterDrawerAndTrigger/EpicFilterDrawerAndTrigger.tsx","components/FilterPills/FilterPills.tsx","components/UiCenteringWrapper/UiCenteringWrapper.tsx","components/EpicDetailsBaseTemplate/EpicDetailsBaseTemplate.tsx","components/EpicDetailsPage/EpicDetailsPage.tsx","components/DataDisclaimer/DataDisclaimer.tsx","components/PopupContent/PopupContent.tsx","components/InfoPopupContent/InfoPopupContent.tsx","components/TriggeredOverlay/TriggeredOverlay.tsx","components/InfoPopup/InfoPopup.tsx","components/InfoBook/InfoBook.tsx","components/ChartTooltipWrapper/ChartTooltipWrapper.tsx","components/Chart/Chart.tsx","components/Chart/config.js","components/TimeRange/TimeRange.tsx","components/OperationalMetricsSparklineTooltip/OperationalMetricsSparklineTooltip.tsx","utils/chart.js","utils/operational-metrics.ts","components/ChartOpsMetricsSparkline/config.ts","components/ChartOpsMetricsSparkline/ChartOpsMetricsSparkline.tsx","components/OperationalMetricsBox/OperationalMetricsBox.tsx","components/ChartOperationalMetricsCycleTime/config.ts","components/ChartOperationalMetricsCycleTime/ChartOperationalMetricsCycleTime.tsx","components/OperationalMetricsCycleTimeBreakoutStage/OperationalMetricsCycleTimeBreakoutStage.tsx","components/OperationalMetricsCycleTimeBreakout/OperationalMetricsCycleTimeBreakout.tsx","components/OperationalMetricsCycleTimeSummary/OperationalMetricsCycleTimeSummary.tsx","components/OperationalMetricsCycleTime/OperationalMetricsCycleTime.tsx","hooks/useOperationalMetricsData.ts","components/OperationalMetricsPage/OperationalMetricsPage.tsx","components/PRRepositorySummaryList/PRRepositorySummaryList.tsx","components/ChartImage/no-chart.png","components/TeamList/TeamList.tsx","components/PrWorkflowChartStatusTooltip/PrWorkflowChartStatusTooltip.tsx","components/PrWorkflowChartActivityTooltip/PrWorkflowChartActivityTooltip.tsx","components/PrWorkflowChartSeriesTooltip/PrWorkflowChartSeriesTooltip.tsx","components/ChartPrWorkflow/config.ts","components/ChartPrWorkflow/ChartPrWorkflow.tsx","components/PrWorkflowChartKey/PrWorkflowChartKey.tsx","utils/file.js","components/PrWorkflowChartWrapper/PrWorkflowChartWrapper.tsx","components/PRWorkflow/PRWorkflow.tsx","components/PageTitle/PageTitle.tsx","components/PagedStepper/PagedStepper.tsx","components/AvatarIcon/AvatarIcon.tsx","utils/people-picker.ts","components/PeoplePicker/PeoplePicker.tsx","components/ChartPrCadence/config.js","components/ChartPrCadence/ChartPrCadence.jsx","components/ScrollContainerWithReset/ScrollContainerWithReset.tsx","components/PrCadenceList/PrCadenceList.jsx","utils/pr-cadence.js","components/PrCadenceChartWrapper/useBackingData.js","components/PrCadenceChartWrapper/parser.js","constants/users.ts","components/PrCadenceChartWrapper/PrCadenceChartWrapper.jsx","components/WorkMetadataActivities/WorkMetadataActivities.tsx","images/chevron.svg","components/WorkMetadataEpic/WorkMetadataEpic.tsx","components/WorkMetadata/WorkMetadata.tsx","components/WorkMetadataEpicsList/WorkMetadataEpicsList.tsx","components/EpicsList/EpicsList.tsx","components/Dropdown/DropdownIndicator.jsx","components/Dropdown/Dropdown.tsx","components/GroupByLabel/GroupByLabel.tsx","components/GroupBySelector/GroupBySelector.tsx","components/WorkItemsGroupBySelector/WorkItemsGroupBySelector.tsx","components/WorkMetadataActivitiesKey/WorkMetadataActivitiesKey.tsx","components/ProjectWork/ProjectWork.tsx","components/ChartSpline/config.js","components/ChartSpline/ChartSpline.jsx","components/ChartStoryPoints/config.js","components/ChartStoryPoints/ChartStoryPoints.jsx","components/GridCol/GridCol.jsx","components/GridContainer/GridContainer.jsx","components/GridRow/GridRow.jsx","components/StoryPointsAverage/StoryPointsAverage.jsx","components/BorderedBox/BorderedBox.jsx","components/StoryPointsList/StoryPointsList.jsx","utils/story-points.js","components/StoryPointsChartWrapper/useBackingData.js","components/StoryPointsChartWrapper/StoryPointsChartWrapper.jsx","components/StoryPointsChartWrapper/parser.js","components/RouteLinkTabs/RouteLinkTabs.tsx","components/TemplateHeader/TemplateHeader.tsx","components/WorkDeepDivePage/WorkDeepDivePage.tsx","components/OrganizationNavigationMenuCard/OrganizationNavigationMenuCard.tsx","components/OrganizationNavigationMenuCardsList/OrganizationNavigationMenuCardsList.tsx","components/OrganizationNavigationMenu/OrganizationNavigationMenu.tsx","components/UiFilterPopupTrigger/UiFilterPopupTrigger.tsx","components/UiFilterOverlay/UiFilterOverlay.tsx","components/DirectorViewNavigation/DirectorViewNavigation.tsx","components/AllTeamsMenuPopup/AllTeamsMenuPopup.tsx","components/AllTeamsMenu/AllTeamsMenu.tsx","components/FlexibleTeamsNavigation/FlexibleTeamsNavigation.tsx","components/SprintStepper/SprintStepper.tsx","components/TimeRangeSelectorLabel/TimeRangeSelectorLabel.tsx","components/TimeRangeSelectorSprintLabel/TimeRangeSelectorSprintLabel.tsx","components/UiFilterPopupWrapper/UiFilterPopupWrapper.tsx","components/TimeRangeSelector/TimeRangeSelector.tsx","components/TimerangeStepper/TimerangeStepper.tsx","components/UiFilterTimeRange/UiFilterTimeRange.tsx","components/GlobalNavigation/GlobalNavigation.tsx","components/FeedbackForm/FeedbackForm.tsx","components/LabsPage/LabsChart.tsx","utils/labs.ts","components/LabsPage/useBackingData.ts","components/LabsPage/LabsPage.tsx","components/NoAccessPage/NoAccessPage.tsx","components/NoPermissions/NoPermissions.tsx","components/ChartOverviewTrendline/config.ts","components/ChartOverviewTrendline/ChartOverviewTrendline.tsx","components/OverviewSummaryCurrentValue/OverviewSummaryCurrentValue.tsx","components/OverviewSummaryPreviousValue/OverviewSummaryPreviousValue.tsx","components/OverviewSummary/OverviewSummary.tsx","components/OverviewCycleTimeTrendlineTooltip/OverviewCycleTimeTrendlineTooltip.tsx","interfaces/zod-schema.ts","utils/organization-data.ts","hooks/useOrganizationCycleTimeData.ts","components/OverviewCycleTime/OverviewCycleTime.tsx","components/OverviewDeepWorkScatterplotTooltip/OverviewDeepWorkScatterplotTooltip.tsx","utils/math.ts","components/ChartOverviewDeepWorkScatterplot/config.ts","components/ChartOverviewDeepWorkScatterplot/ChartOverviewDeepWorkScatterplot.tsx","components/OverviewGroupBySelector/OverviewGroupBySelector.tsx","components/OverviewDeepWorkByGroup/OverviewDeepWorkByGroup.tsx","components/OverviewDeepWorkTrendlineTooltip/OverviewDeepWorkTrendlineTooltip.tsx","hooks/useOrganizationDeepWorkData.ts","components/OverviewDeepWorkPage/OverviewDeepWorkPage.tsx","components/OverviewFilters/OverviewFilters.tsx","components/OverviewReleaseFrequencyTrendlineTooltip/OverviewReleaseFrequencyTrendlineTooltip.tsx","hooks/useOrganizationReleaseFrequencyData.ts","components/OverviewReleaseFrequency/OverviewReleaseFrequency.tsx","hooks/useOrganizationTeamsData.ts","hooks/useOrganizationTimeRanges.ts","components/OverviewPage/OverviewPage.tsx","utils/overview.ts","components/PersonCard/PersonCard.tsx","utils/reports.ts","components/ReportsList/useBackingData.ts","components/ReportsList/parser.ts","components/ReportsList/ReportsList.tsx","components/ReportsBaseTemplate/ReportsBaseTemplate.tsx","components/ReportsPage/ReportsPage.tsx","components/CycleTimeByGroupTable/CycleTimeByGroupTable.tsx","components/Expander/Expander.tsx","components/SignalTypeContainer/SignalTypeContainer.tsx","components/RetrosFactorsList/RetrosFactorsList.tsx","components/ChartSprintHealthTrendAnalysis/config.ts","components/ChartSprintHealthTrendAnalysis/ChartSprintHealthTrendAnalysis.tsx","utils/health-metrics.ts","components/RetrosTrendAnalysis/RetrosTrendAnalysis.tsx","components/WorkMetadataReactionsRollupRow/WorkMetadataReactionsRollupRow.tsx","components/WorkMetadataReactionsRollup/WorkMetadataReactionsRollup.tsx","components/RetrosRangeFactorsContainer/RetrosRangeFactorsContainer.tsx","components/ChartSprintProgress/config.ts","components/ChartSprintProgress/ChartSprintProgress.tsx","components/WorkProgressBreakout/WorkProgressBreakout.tsx","components/WorkProgress/WorkProgress.tsx","components/RetrosSprintCompletion/RetrosSprintCompletion.tsx","components/RetrosSprintHealthFactors/RetrosSprintHealthFactors.tsx","components/QuickReact/QuickReact.tsx","components/RetrosSprintReactionsSummary/RetrosSprintReactionsSummary.tsx","components/TeamRoster/TeamRoster.tsx","components/SignalHealthColor/SignalHealthColor.tsx","components/SprintUpdatesTableItem/SprintUpdatesTableItem.tsx","utils/retros.ts","components/SprintUpdatesTable/SprintUpdatesTable.tsx","components/RetrosSummary/RetrosSummary.tsx","hooks/useSprintHealthData.ts","components/RetrosPage/RetrosPage.tsx","components/EnabledJiraProjects/useBackingData.ts","components/EnabledJiraProjects/EnabledJiraProjects.tsx","components/EnabledRepositoriesTable/useBackingData.ts","components/EnabledRepositoriesTable/EnabledRepositoriesTable.tsx","components/UiFilterSelectableInputsList/UiFilterSelectableInputsList.tsx","components/SettingsDefaultGroupBySelector/SettingsDefaultGroupBySelector.tsx","components/SettingsProjectsAndRepos/SettingsProjectsAndRepos.tsx","components/DefaultTeamRadio/DefaultTeamRadio.tsx","components/AvatarIconCreator/AvatarIconCreator.tsx","components/SprintsMetadataSelector/SprintsMetadataSelector.tsx","components/DotMenu/DotMenu.tsx","components/TeamCardDotMenu/TeamCardDotMenu.tsx","components/TeamCardTeamMembers/TeamCardTeamMembers.tsx","components/TeamMembersAdderOption/TeamMembersAdderOption.tsx","components/TeamMembersAdder/TeamMembersAdder.tsx","components/TextInput/TextInput.tsx","components/ExistingTeam/ExistingTeam.tsx","components/NewTeamForm/NewTeamForm.tsx","components/TeamCardConfirmationModalContent/TeamCardConfirmationModalContent.tsx","components/TeamCardSubmitModalContent/TeamCardSubmitModalContent.tsx","components/TeamCardModalContent/TeamCardModalContent.tsx","components/TeamCard/TeamCard.tsx","components/SettingsTeamBuilderGrid/SettingsTeamBuilderGrid.tsx","components/SettingsTeamBuilder/SettingsTeamBuilder.tsx","components/TextBlock/TextBlock.jsx","components/Header/Header.jsx","components/ErrorLevels/ErrorLevelMedium.jsx","components/TeamCustomizationSettingsSwitches/TeamCustomizationSettingsSwitches.tsx","components/JiraWorkSettings/JiraWorkSettings.tsx","components/SourceCodeSettings/SourceCodeSettings.tsx","components/ChatSettings/ChatSettings.tsx","components/CalendarSettings/CalendarSettings.tsx","hooks/useCustomizationData.ts","components/TeamCustomizationSettings/TeamCustomizationSettings.tsx","components/SettingsPage/SettingsPage.tsx","components/HomeLinkWithDropdown/HomeLinkWithDropDown.tsx","components/SidebarLinks/SidebarLinks.tsx","images/Horz_Color-Rev_Lg.png","components/Sidebar/Sidebar.tsx","components/StartPage/StartPage.tsx","images/team.png","components/ChartPackedBubble/config.js","components/ChartPackedBubble/ChartPackedBubble.jsx","components/ChartMeetingClassifications/config.js","components/ChartMeetingClassifications/ChartMeetingClassifications.jsx","components/MeetingClassificationOverrideConfirmation/MeetingClassificationOverrideConfirmation.tsx","components/MeetingClassificationLabel/MeetingClassificationLabel.tsx","components/MeetingClassificationOverrideForm/MeetingClassificationOverrideForm.tsx","components/PipedList/PipedList.jsx","components/MeetingList/MeetingList.jsx","components/MeetingListSummary/MeetingListSummary.jsx","components/MeetingClassificationsChartWrapper/parser.js","components/MeetingClassificationsChartWrapper/fetchMeetingClassificationsData.js","utils/meeting-classifications.js","components/MeetingClassificationsChartWrapper/useBackingData.js","components/InfoPopups/InfoPopups.tsx","components/MeetingClassificationsChartWrapper/MeetingClassificationsChartWrapper.jsx","components/ChartMeetingTime/config.js","components/ChartMeetingTime/ChartMeetingTime.jsx","utils/meeting-time.ts","hooks/useMeetingLengthData.ts","components/MeetingTimeChartWrapper/MeetingTimeChartWrapper.jsx","components/MeetingInsights/MeetingInsights.tsx","constants/charts.js","components/ChartPeopleHealth/config.ts","components/ChartPeopleHealth/ChartPeopleHealth.tsx","components/WarningTriangle/WarningTriangle.tsx","components/MetricCalloutDetails/MetricCalloutDetails.tsx","components/MetricTileContextSwitchingDetails/MetricTileContextSwitchingDetails.tsx","components/MetricTileDeepWorkDetails/MetricTileDeepWorkDetails.tsx","components/MetricCalloutTile/MetricCalloutTile.tsx","components/PeopleHealth/PeopleHealth.tsx","utils/team-deep-dive.ts","hooks/useTeamDeepDiveData.ts","components/TeamDeepDive/TeamDeepDivePage.tsx","components/ChartSprintHealth/config.ts","components/ChartSprintHealth/ChartSprintHealth.tsx","components/SprintHealth/SprintHealth.tsx","hooks/useSprintSuccessData.ts","components/SprintSuccess/SprintSuccess.tsx","components/StartWorkProgress/StartWorkProgress.tsx","components/StartPageSummary/StartPageSummary.tsx","components/ReportsCard/ReportsCard.tsx","components/PersonTile/PersonTile.tsx","hooks/useAllocationsData.ts","components/YourTeam/YourTeam.tsx","utils/team-home.ts","components/TeamHomePage/TeamHomePage.tsx","components/NoAccessClientDashboard/NoAccessClientDashboard.tsx","components/DashboardPage/DashboardPage.tsx","hooks/useCanAccessTeamData.ts","components/ScrollManagement/ScrollManagement.jsx","components/UplevelUi/UplevelUi.jsx","containers/UnknownUser/UnknownUser.tsx","components/Auth0Wrapper/Auth0Wrapper.tsx","components/DomainForm/DomainForm.tsx","components/AuthPage/AuthPage.tsx","utils/auth.js","components/OktaUiReadyWrapper/OktaUiReadyWrapper.tsx","components/OktaWrapper/OktaWrapper.tsx","components/App/App.tsx","index.js"],"names":["actionTypes","reduce","result","key","toLowerCase","directionTypes","momentUnitTypes","sprintMetadataWorkTypes","SPRINT_WORK","NOT_ATTACHED_TO_SPRINT","PULL_REQUESTS_NOT_IN_SPRINT","REMOVED_FROM_SPRINT","COMPLETED_OUTSIDE_SPRINT","sprintOptions","UNASSIGNED","id","label","OTHER_TEAMS","timerangeTypes","CUSTOM","DAYS","WEEKS","SPRINTS","namedTimerangeIds","LAST_WEEK","PREVIOUS_14_DAYS","PREVIOUS_30_DAYS","PREVIOUS_90_DAYS","THIS_WEEK","YESTERDAY","TODAY","timerangeIds","timerangeTypesMetadata","timerangeType","displayName","reservedEpics","NO_EPIC","UNLINKED_PRS","reservedEpicsMetadata","magicRowId","title","reservedProjects","workMetadataStatusTypes","CLOSED_NOT_MERGED","DONE","OPEN","DRAFT","IN_PROGRESS","TODO","prActivityStatusTypes","APPROVED","CHANGES_REQUESTED","COMMENTED","COMMITS_ADDED","MERGED","WITHDRAWN","prActivityStatusLabels","OPENED","WAITING_FOR_REVIEW","DEV","REVIEW","RELEASE","workMetadataActivityTypes","BUG","ISSUE","PR","SUB_TASK","pageIds","teamDeepDiveSections","PEOPLE_HEALTH","HEALTH_METRICS","MEETING_INSIGHTS","teamDeepDiveSectionLabels","teamDeepDiveMeasurePathParams","OVERALL_TEAM_HEALTH","DEEP_WORK","ALWAYS_ON","CHAT_INTERRUPTIONS","CONTEXT_SWITCHING","meetingInsightsMeasurePathParams","MEETING_DISTRIBUTION","MEETING_LENGTH","meetingInsightsMeasureLabels","settingsSections","PROJECTS_AND_REPOS","TEAM_BUILDER","TEAM_SETTINGS","settingsSectionLabels","teamSettingsSections","CALENDAR","CHAT","SOURCE_WORK","JIRA_WORK","teamSettingsSectionsLabels","workDeepDiveSections","OPS_METRICS","PROJECT_WORK","PR_WORKFLOW","PR_FREQUENCY","STORY_POINTS","workDeepDiveSectionLabels","pageMetadata","path","children","flag","workItemCalloutTypes","ADDED_MID_SPRINT","OPEN_MULTIPLE_SPRINTS","NULL_STORY_POINTS","pullRequestCalloutTypes","STUCK","STALLED_PULL_REQUEST_NO_COMMENTS","STALLED_PULL_REQUEST_FEW_COMMENTS","STALLED_PULL_REQUEST_MANY_COMMENTS","STALLED_PULL_REQUEST_APPROVED_NOT_MERGED","PULL_REQUEST_MERGED_WITHOUT_APPROVAL","LOW_COMPLEXITY_HIGH_COMMENTS","PullRequestStalledOptions","name","calloutMetadata","groupByTypes","EPIC","FLEX_TEAM","MANAGER","NONE","PROJECT","REPORT_GROUP","ROLE","USER","ownerContributorTypes","OWNER","CONTRIBUTOR","ownerContributorAlternativeLabels","cycleTimeStages","cycleTimeStageLabels","directionalityTypes","healthScoreTypes","EXCELLENT","GOOD","OK","CONCERNING","alwaysOnScoreRanges","NORMAL","ABOVE_NORMAL","HIGH","contextSwitchingScoreRanges","LESS","ABOUT_THE_SAME","MORE","healthScoreRanges","sprintStates","Signals","contextSwitchingFactors","CONTEXT_SWITCHING_TOTAL","CONTEXT_SWITCHING_TOP_PRIORITY_BUGS","CONTEXT_SWITCHING_MEETINGS","CONTEXT_SWITCHING_SLACK_CHANNELS","CONTEXT_SWITCHING_CHAT_CHANNELS","CONTEXT_SWITCHING_PR_REPOS","CONTEXT_SWITCHING_JIRA_EPICS","overviewHealthTypes","AVERAGE_HEALTH","PROJECT_HEALTH","peopleHealthSignals","healthFactorsMetadata","contextSwitchingFactorsMetadata","signalTypes","HEALTHY","UNHEALTHY","annotationStatusTypes","CELEBRATE","THUMBS_UP","QUESTION","DISAPPOINTED","ANGRY","COMMENT","orderedAnnotationStatusTypes","StatusIconMap","positiveSignals","negativeSignals","neutralSignals","SUPPORT_EMAIL_ADDRESS","workItemsUrlParamKeys","ALL_USERS","CALLOUTS","END_DATE","GROUP_BY","OWNER_CONTRIBUTOR","PAGE","PROJECT_IDS","SHOW_RELATED","SORT","SPRINT_ID","SPRINT_WORK_OTHER","SPRINT_WORK_TYPES","START_DATE","STATUS","USERS","WORK_ITEM_TYPES","REPOSITORIES","urlParamKeys","BOARD_ID","GROUPS_LIST","GROUP_DETAILS","TIMERANGE_ID","TEAM_ID","TEAM_LEAD_ID","SELECTED_USER","VISIBLE_REPOSITORIES","BOARD","REPORT_GROUPS","EPIC_ID","ROLES","TEAM","TEAMS","TEAM_LEAD","TENANT_ID","TIMERANGE","urlUuidParams","urlObjectParams","urlUserSettingsParams","urlGlobalParams","SOURCES_DESCRIPTION_MAP","displayText","icon","urlParamsBaseDefaultValues","allUsers","callouts","reportGroups","groupBy","groupsList","page","groupDetails","sort","otherSprintItems","ownerContributor","projectIds","repositories","roles","showRelatedItems","sprintId","status","teams","typesOfWork","users","workItemTypes","selectedUser","visibleRepositories","urlParamsSprintDefaultValues","urlParamsKanbanDefaultValues","authProviders","urlParamsValuesLabels","prComplexityLevels","NOT_COMPLEX_TO_REVIEW","COMPLEX_TO_REVIEW","chartToolTipConfig","useHTML","enabled","backgroundColor","shadow","borderWidth","borderRadius","outside","customizationSettingsKeys","sprintCustomizationSettingsKeys","orderedRoles","roleTypes","acc","current","snakeCase","toUpperCase","managerRoles","FRONT_LINE_MANAGER","LEADERSHIP","teamAvatarIcons","getSprintTimerangesForBoard","board","sprints","map","sprint","boardId","sprintName","end","getTimestampForDate","moment","utc","completeAt","Date","setMilliseconds","start","startAt","state","date","toISOString","getTimeDifference","_ref","base","comparator","unit","diff","createTimestamp","time","createTimestampWithOffset","formatTimestamp","_ref2","format","timestamp","ISO_8601","getDateWeekBefore","subtract","getPreviousNumDaysTimerange","days","startOf","endOf","namedTimeranges","getCurrentWeekTimerange","combineReducers","auth","arguments","length","undefined","action","type","STORE_AUTH_ACCESS_TOKEN","payload","STORE_AUTH_PARAMS","authParams","flags","STORE_FLAGS","session","deviceType","isMobile","referrer","document","window","location","href","username","organization","parentsOfActiveTeam","STORE_SESSION_PARAMS","STORE_ORGANIZATION","user","STORE_USER","config","FARS_URL","process","BLUE_URL","LAUNCH_DARKLY_CLIENT_ID","HOTJAR_ID","HEAP_ID","SENTRY_DSN","ORG_DASHBOARD_URL","useAuthProvider","okta","useOktaAuth","auth0","useAuth0","isAuth0","useSelector","authProvider","getIsAuthenticated","useCallback","Promise","resolve","isAuthenticated","oktaAuth","then","response","getAccessToken","async","getAccessTokenSilently","getUser","getUserGivenName","given_name","StyledContainer","styled","div","withConfig","componentId","props","theme","fonts","primary","StyledMaxWidthContainer","StyledHeader","header","weights","extraBold","StyledBody","hasHeader","sizes","sm","md","regular","bold","EmptyState","body","className","testId","thisTestId","concat","_jsx","_jsxs","StyledSpinner","Spinner","otherProps","src","spinner","alt","Container","transition","TransitionWrapper","SpinnerWrapper","LoadingStates","content","isNoDataState","isSpinningState","noDataContent","displayContent","isUndefined","StyledIcon","span","color","colors","StyledIconImage","img","FA_ICONS","arrowDown","arrowTrendDown","arrowLeft","arrowRight","arrowUp","arrowTrendUp","bookmarkSaved","bookmarkUnsaved","externalLink","slack","paperAirplane","questionCircle","usersCog","sortedAsc","sortedDesc","teamPlus","thumbsUp","triangleDown","triangleLeft","triangleRight","triangleUp","warningOutlineOnly","circleCheck","lineArrowLeft","lineArrowRight","catSpace","honeyBadger","deerRudolph","horseHead","rabbitFast","skullCow","skullCrossbones","medicalWorker","ellipsisHorizontal","rulerTriangle","codeMerge","commentsAlt","closeSolid","expandArrows","compressArrows","alicorn","bat","cat","cow","crow","deer","dog","dove","dragon","duck","elephant","fish","frog","ghost","hippo","horse","kiwi","monkey","narwhal","otter","pegasus","pig","rabbit","ram","robot","sheep","skull","snake","snowman","spider","squirrel","turtle","unicorn","whale","question","comment","calendar","chat","check","close","crosshairs","edit","headphones","house","info","plus","sliders","angry","team","unsorted","warning","cog","eye","sitemap","star","starOutline","alien","astronaut","spy","ninja","cowboy","vr","nurse","builder","shuffle","book","jira","beaker","lock","CUSTOM_ICONS","exclamationTriangle","bug","issue","pr","prActivityChevronApproved","prActivityChevronCommented","prActivityChevronUpdate","subtask","partyHorn","partyHornAurora","disappointed","disappointedAurora","TEAM_ICONS","pick","Icon","customIconKeys","Object","keys","includes","FontAwesomeIcon","errorHandler","e","captureException","reject","validationHandler","schema","responseToTest","parse","data","error","api","axios","create","baseURL","headers","interceptors","use","r","legacyApi","farsApi","parsePageIdFromPathname","pathname","urlParams","substring","split","getPageTitle","pageTitle","baseTitle","updateUserSettings","accessToken","params","tenantId","put","Authorization","useUserSettings","authAccessToken","userHasUplevelAccount","useQuery","get","requestUserSettings","userSettings","defaults","defaultJiraGroupBy","staleTime","Infinity","createUserKey","email","crypto","createHash","update","digest","createFlagUserMetadata","tenant","kebabCase","tenantAlias","enabled_roles","createAnalyticsUserMetadata","metadata","forEach","role","set","useFullOrganizationData","_ref4","requestFullOrganization","refetchOnWindowFocus","createOrUpdateTeam","post","deleteTeam","_ref3","getTeamNameFromTeam","teamName","isOrgChartTeam","teamLead","teamMembers","find","t","orgChartTeamLeadId","createdByUser","getFlattenedTeamMembersTreeForTeam","flattenDeep","sortTeam","u1","u2","localeCompare","useTeamsData","options","canRequest","teamMembersToRequest","teamMemberEmails","useMemo","isEmpty","every","requestTeams","useOrganizationData","startDate","endDate","requestOrgChart","useOwnFallbackOrgChartTeam","fallbackOrgChartTeam","setFallbackOrgChartTeam","useState","userId","ownOrgChartRootTeam","ownTeams","useEffect","userIdToMatch","getFallbackOrgChartTeamFromTeams","getDefaultActiveSprint","s","getSprintRangeString","value","values","findIndex","inRange","filterSprintHealthFactorsToRange","factors","range","filter","isNull","filterAnnotationsForGroup","_ref5","annotations","group","filteredAnnotations","a","groupId","NIL","nilProjectId","uuidProjectId","partition","projectId","magicRow","groupName","getBoard","_ref6","sprintMetadata","allBoards","needsSprintMetadata","useSprints","defaultBoardId","b","filteredSprints","getTeamSprintMetadata","_ref7","shouldUseSprints","projectsData","defaultProjectId","derivedTeamBoard","projects","boards","project","projectIdsWithBoards","uniq","p","defaultProject","defaultBoards","defaultBoard","defaultSprint","defaultSprintTimerange","getIsSprintMode","timerange","uuidTranslator","shortUUID","arrayifyUrlParam","isArray","getUrlParamsDefaultValues","pageId","getAllUsers","activeTeam","u","getBoardId","getQuerystringParamsToSet","defaultTeam","paramsFromUi","parsedQuerystring","persistQuerystring","paramsToSet","JSON","stringify","defaultValues","paramsFromUiKeys","groupslist","_paramsFromUi$team","_paramsFromUi$team2","teamId","namedTimerange","timerangeId","entries","staticDefaultValue","defaultValue","isEqual","urlon","v","fromUUID","getTeamId","getTeamLead","fullOrganizationData","teamLeadId","getTeamLeadId","parseInt","getUsers","parseQuerystring","qs","mapValues","querystring","arrayFormat","arrayFormatSeparator","parseBooleans","toUUID","useActiveUser","activeUser","setActiveUser","search","useLocation","usersOrgChartRootTeam","flattenedUsersOrganization","useActiveUsersTeams","_team","ownFallbackOrgChartTeam","useDefaultTeam","setDefaultTeam","activeUserId","orgChartTeam","activeUsersTeams","ownDefaultTeamId","defaultTeamId","settingsDefaultTeam","useProjectsAndBoardsData","requestProjectsAndBoards","useSprintMetadata","previous14DaysMetadata","requestSprintMetadata","useUrlParamsContextValues","match","useRouteMatch","pageMatch","useActiveTeam","setActiveTeam","querystringTeamId","querystringTeam","projectsAndBoardsData","today","querystringBoardId","activeBoard","allSprintTimeranges","querystringTimerangeId","foundSprint","getTimerange","getSprintId","getGroupBy","getReportGroups","getProjectIds","getRepositories","getRoles","getTeams","getVisibleRepositories","getOtherSprintItems","getTypesOfWork","getWorkItemTypes","getCallouts","getOwnerContributor","getGroupsList","getGroupDetails","isNil","getShowRelatedItems","getStatus","getSelectedUser","UrlParamsContext","createContext","UrlParamsProvider","Provider","sendEvent","Consumer","farsUrl","Sentry","useTracking","urlParamsContextValues","useContext","triggeredEvent","setTriggeredEvent","baseEventParams","uiFilterParams","trackEvent","event","isNoAccountPage","test","merge","uiEvent","category","elementId","eventLabel","eventValue","ExternalLink","all","wolverine","auroraTeal","SupportEmailLink","onClick","persist","ContentWrapper","Header","h1","Body","UserWithNoUplevelAccountPage","storeFlags","storeSessionParams","storeOrganization","storeUser","getWorkItemsActivitiesTotals","activities","totalWeight","sum","activity","activityType","score","categoryKey","breakdownByActivityType","accumulated","activityKey","item","breakdownByStatus","count","jiraItems","k","displayTitle","percentage","sumBy","flattenWorkItems","workItems","rootWorkItemId","level","workItem","childWorkItems","getWorkItemsRequestParamsFromUrlParams","_urlParams$team","workItemsRequestParams","epicId","NIL_UUID","getWorkItemsRequestParamsEpicId","usersToRequest","m","Number","_workItemsRequestPara","_workItemsRequestPara2","_workItemsRequestPara3","getWorkItemsRequestParamsOtherSprintItems","getWorkItemsRequestParamsTypesOfWork","column","order","desc","c","startsWith","getWorkItemsRequestParamsProjectIds","getWorkItemsRequestParamsWorkItemTypes","_ref8","mapWorkItemRecursive","parents","flatten","invertPRWorkItems","workItemsById","wi","_workItemsById$get","Map","Array","from","getTeamRosterFromGroupsList","epic","owners","owner","useUrlParams","canViewOpsMetrics","history","useHistory","matchWorkDeepDive","matchPageId","currentPageId","selectedWorkDeepDiveSection","selectedSection","matchTeamDeepDive","selectedTeamDeepDiveSection","selectedTeamDeepDiveMetric","invertedParams","invert","selectedMetric","getPathForPageId","querystringParams","generatePath","getWorkDeepDivePath","getSprintRetrosPath","getStartPath","getTeamHomePath","getTeamDeepDivePath","getSettingsPath","getOverviewPath","updateUrlParams","push","teamDeepDiveParams","workDeepDiveParams","fetchUserData","requestUser","requestUserInfo","useInitialData","authenticatedUserEmail","setAuthenticatedUserEmail","setIsAuthenticated","isFullyAuthenticated","hasInvalidRoles","_setHasInvalidRoles","dispatch","useDispatch","heap","hj","initializeHotjar","hasFlags","hasRequestedUserInfo","useRef","hasRequestedUserData","hasRequestedUserGivenName","hasRequestedFlags","hasSentParams","hasInitializedHotjar","hasIdentifiedHotjar","hasInitializedHeap","userEmail","userGivenName","userLdHash","userEnabledRoles","isLoading","isLoadingUserSettings","hasBaselineRenderingData","token","baseSessionParams","loginTimestamp","uuid","uuidv4","userDataResponse","parsedUserData","parseUserData","displayTenantAlias","givenName","userInfoDataResponse","fetchUserInfoData","ldClient","LDClient","custom","allAttributesPrivate","fetchGoals","hash","useReport","on","fetchedFlags","allFlags","has","heapConfig","load","identify","addUserProperties","DataLoadWrapper","uiIsReady","_state$session","Redirect","to","Auth0UiReadyWrapper","hasRedirected","SecureRoute","component","args","Route","withAuthenticationRequired","onRedirecting","StyledContent","ContentWithIcon","iconColor","UnstyledButton","button","disabled","css","_templateObject","_taggedTemplateLiteral","StyledButton","default","bg","_templateObject2","hoverActiveButtonStyles","_templateObject3","hover","border","fg","StyledBorderedButton","borders","widths","radius","_templateObject4","isActive","_templateObject5","Button","DisplayButton","bordered","style","avatarImages","StyledImage","isResponsive","Image","srcsetString","altText","onError","useSrcset","index","join","srcSet","DefaultAvatar","sample","SlackAvatar","hasError","setHasError","iceman","IconAvatar","CrossTeamAvatar","CommentBlock","StyledSlackAvatar","StyledCrossTeamAvatar","UserCommentText","white","jean","CommentTimestamp","storm","Name","CommentText","Expander","xs","UserCommentBlock","_annotation$userDetai","annotation","teamMember","showFullComment","setShowFullComment","commentText","userDetailedComment","truncate","slackAvatar","dateTime","fromNow","Footer","footer","CommentsList","comments","maxVisibleComments","sortedComments","sortBy","reverse","isCollapsed","setIsCollapsed","visibleComments","slice","member","StyledTooltip","StyledTooltipTrigger","StyledTooltipPopup","Tooltip","Component","constructor","super","setShow","show","this","setState","target","React","createRef","render","onShowTooltip","placement","popupContent","trigger","ref","onMouseEnter","onMouseLeave","Overlay","defaultProps","ReactionList","ul","ReactionTimestamp","ReactionLineItem","li","ReactionTooltip","anno","_teamMembers$find","userName","datetime","PillRow","ReactionPill","isSelected","showCount","ReactionIcon","ReactionPills","contextItem","handleAnnotationClick","hoverIconParty","setHoverIconParty","hoverIconDisappointed","setHoverIconDisappointed","handleHover","isMouseEnter","preventDefault","statusEntry","annotationCheckins","userAnnotationCheckinStatus","iconKey","statusCount","isAuroraImage","iconToShow","pillToDisplay","some","StyledIconClose","modal","closeButton","CloseButton","GlobalStyle","createGlobalStyle","borderString","lightJean","StyledBootstrapModalHeader","hasHeaderContent","rest","BootstrapModalHeader","Modal","allowClose","dialogClassName","onHide","onShow","headerContent","BootstrapModal","BootstrapModalBody","ModalContainer","CommentIcon","CommentButton","CommentTextArea","SubmitButton","Subheader","write","CommentForm","form","AnnotationsModal","context","triggerWriteTextComment","setActiveIdToAnnotate","isModalOpen","textComment","setTextComment","_Fragment","onShowModal","onSubmit","onChange","isInverted","direction","petra","cyclops","Value","subheader","Arrow","ValueWithDirectionality","display","absoluteValue","Math","abs","displayValue","getValueInHours","getCycleTimeStageInHours","cycleTime","total","rollupCycleTime","splitCycleTimeHours","cycleTimeHours","roundHours","cycleTimeDays","floor","modHours","cycleTimeRemainderHours","round","compact","getMedianCycleTime","cycleTimes","medians","stageKey","medianTimes","_c$stageKey","stageTimes","stageTimesInHours","v1","v2","medianIndex","medianStageHours","getMedianCycleStageTime","getCycleTimeDelta","previous","deltaInHours","_splitDelta$find","splitDelta","filterTruthyCycleTimeValues","stage","isFinite","chart","CycleTimeStageHeader","startCase","capitalize","ValuesContainer","NumberAndUnit","Sign","NA","Unit","Delta","mode","MissingStage","CycleTimeValueDisplay","delta","stageCycleTimeInHours","number","displayUnit","hexToRgb","hex","opacity","g","bgToFgColor","currentTheme","reversed","breakpointsValues","lg","xl","xxl","marvelMint","archangel","banshee","beast","gambit","jubilee","juggernaut","magma","magneto","nightcrawler","phoenix","pixie","professorX","rogue","sunfire","thunderbird","breakpoints","borderedBox","brand","breadcrumb","unstyled","thickness","card","carousel","text","healthFactors","averageHealth","peopleHealth","projectHealth","ISSUES_ADDED","ISSUES_CARRYOVER","ISSUES_CLOSED","ISSUES_WITH_DESCRIPTIONS","ISSUES_WITH_STORY_POINTS","JIRA_BUGS","PRS_MERGED_NO_APPROVAL","PRS_NO_REVIEWERS","PRS_STUCK","deepWorkByIc","ramp","scheduled","available","storyPoints","marker","fill","stroke","alwaysOnRisk","normal","high","dash","alwaysOnRiskTrend","meetingClassifications","MANAGER_IC_ONE_ON_ONES","BLOCKED_FOR_WORK","PRODUCT_RELEASE_REVIEWS","WORKING_SESSIONS_PROJECT_MEETINGS","RECRUITING","SCRUM","SOCIAL_COMPANY_EVENTS","TRAINING_SESSIONS","OUT_OF_OFFICE","OFFICE_HOURS","OTHER_MEETING_EVENTS","NOT_A_MEETING","prCadence","prs","reviewTime","deepWorkTime","meetingTime","dropdown","indicator","option","selected","selectedHover","expander","featuredContent","feedback","highlight","avatarIcons","iconInfo","light","dark","link","background","overlay","pipedList","recommendation","subHeader","scheduleOptionStatus","ideal","signalHealth","relativeHealth","statusMessage","focus","success","stepper","indicators","table","strong","textFlag","texturedContainer","lightGrey","darkGrey","teal","tooltip","popupShadow","uiBackground","uplevelFooter","validationMessage","widgetHeader","hairline","thin","ultraLight","semiLight","medium","demiBold","black","grid","columnWidth","gap","sidebar","sidebarGutter","gridOffset","charts","series","full","partial","HtmlText","htmlText","parser","PopupContent","IconWrapper","InfoIcon","InformationText","Title","h3","HeaderGroup","hgroup","RollupValue","Values","BreakdownByStage","BreakoutValue","WorkMetadataCycleTimeSummary","rollupTotals","CycleTimeSummary","StageList","ChartCycleTime","onMouseOver","RouteLink","tracked","setTracked","DisplayLink","NavLink","Link","StyledFormControlLabel","withStyles","root","margin","justifyContent","FormControlLabel","baseStyles","width","height","padding","switchBase","transform","thumb","boxShadow","track","checked","HorizontalSwitch","MaterialUiSwitch","HorizontalSwitchWithLabel","fontFamily","fontSize","Switch","isDisabled","labelContent","showSwitchStatus","labelPlacement","DisplaySwitch","control","Label","StyledInfo","ShowRelatedItemsSelector","debouncedToggle","debounce","updated","updatedShowRelatedItems","Time","WorkMetadataIcon","SortIcon","ChildWrapper","SortableColumnHeader","StyledTr","tr","StyledTh","th","StyledTd","td","ClickWrapper","isClickable","Table","allowSorting","caption","columns","controlledState","getRowProps","initialState","manuallySort","reactTableColumns","reactTableData","memoizedInitialState","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","useTable","disableSortBy","manualSortBy","useControlledState","useFilters","useSortBy","headerGroup","getHeaderGroupProps","onClickHeader","renderedHeader","getHeaderProps","getSortByToggleProps","invoke","isSorted","isSortedDesc","row","cells","cell","getCellProps","IssuesTable","WorkMetadataIssuesList","hiddenColumns","list","storyPointsListTypes","MAX_NUM_AVATARS","List","ListItem","CrossteamHeader","h5","CrossTeamWrapper","CrossTeamNumber","Extras","ExtrasNameList","WorkMetadataTeamList","maxNumAvatars","findUserInActiveTeamMembers","activeTeamMembers","uplevelUserId","crossteam","l","maxNumTeamAvatars","teamDisplayContent","teamMemberId","toString","crossteamDisplayContent","extras","fullArray","writeAnnotations","removeAnnotations","HeaderContainer","h2","StyledShowRelatedItems","IssueLink","LinkIcon","IssueIconWrapper","IconBackgroundColor","hasChildWithCallouts","hasCallouts","PrSubstatus","ArrowIcon","DisplayId","StoryPoints","Updated","Status","CalloutListItem","Callout","ReactionColumn","ReactionSet","ReactionCount","ReactButtons","UserAnnotationsCell","ReactButton","hasReaction","ReactIcon","WorkHeader","WorkTypeIcon","WorkDisplayId","WorkTitle","InternalLink","IssuesList","EpicDetailsIssuesList","showHeader","customColumns","useParams","isUnlinkedPrs","hasAnnotations","queryClient","useQueryClient","mutate","writeAnnotationsMutate","useMutation","onSuccess","invalidateQueries","err","console","removeAnnotationsMutate","activeIdToAnnotate","triggerWriteAnnotation","annotationStatus","isText","parentId","workItemId","workItemAltId","url","displayId","workItemType","userAnnotationPainLevel","annotationContext","writeParams","triggerRemoveAnnotation","existingAnnotation","annotationId","_workItem$annotations","onClickIssueLink","sortType","updatedSortedColumns","onShowCycleTimeTooltip","baseColumns","accessor","Cell","repository","original","rel","originBranch","targetBranch","replace","decodeURIComponent","String","fromCharCode","isPrDetails","i","_ref9","isSameOrAfter","_ref10","_ref11","calloutId","callout","_ref12","_ref13","_ref14","OverlayTrigger","Popover","toPairs","countBy","entry","_Object$entries$filte","_Object$entries$filte2","additionalColumns","_ref15","_ref16","complexity","_ref17","_row$childWorkItems$","_ref18","_cell$row$original","relatedTickets","col","combinedColumns","columnToPush","splice","position","d","classNames","subRow","highlightedRow","nav","Stepper","isNextDisabled","isPrevDisabled","nextButton","prevButton","PAGE_SET_LENGTH","ChunkStepper","PageList","StepperIconWrapper","StepperIcon","PageButton","PageListItem","Ellipsis","PaginationStepper","currentPage","pageSetLength","finalPage","getChunkIndex","chunkedPages","chunk","times","currentChunkIndex","setCurrentChunkIndex","hasMorePageSets","updatedPage","onClickPage","NoMembers","enhancedTeamMember","addTeamAttributes","userDetails","inTeamMember","isCrossTeam","ActivitiesWrapper","AllIssuesList","AllIssuesListItem","h4","IssueScore","BreakdownListItem","BreakdownScore","BreakdownStatus","TypeIcon","UnlinkedPrsHelpText","section","UnlinkedPrsHeader","CycleTime","WorkMetadataIssuesSummary","_workToDisplay$find","workToDisplay","categoriesToDisplay","activityFromCategory","work","_activity$count","breakdown","EpicId","TeamListRow","WorkMetadataDetailsSummary","contributors","workCategoryId","workCategoryName","workCategoryUrl","onClickEpicLink","WorkMetadataDetailsTeamList","useWorkItemsData","_dataRequestParams","isKanbanMode","dataRequestParams","paramsToRetain","getSprintRetrosRequestParamsFromWorkItemsRequestParams","getWorkItemsRequestParamsPRWorkflow","omit","requestWorkItems","useAnnotationsData","requestParams","requestAnnotations","PaginationStepperWrapper","EpicDetails","_rawWorkItemsData$wor","isError","isFetching","isSuccess","annotationsData","rawWorkItemsData","flattenedAndAnnotatedWorkItems","flattenedWorkItems","workDeepDiveTitle","getEpicDetailsPageTitle","scroll","top","left","behavior","Drawer","ContextDrawer","isOpen","onCloseDrawer","anchor","onClose","open","HiddenInput","input","DisplayInput","bgImage","checkedAsset","variation","uncheckedLightAsset","uncheckedDarkAsset","TextWrapper","CustomCheckboxInput","htmlFor","tabIndex","CustomRadioInput","InputsListWrapper","InputsList","AllSelectedToggle","StyledSelectableInputsList","SelectableInputsList","onToggleListItem","onToggleAllSelected","showSelectAll","allSelected","o","CheckboxWrapper","Checkboxes","EpicFilterCheckboxList","onUpdateSelection","listOptions","Option","OtherSprintItemsFilter","workItemsData","areFiltersDisabled","setAreFiltersDisabled","otherSprintItemsTotals","optionsList","helpTextKey","_otherSprintItemsTota","totals","otherSprintItem","updatedOtherSprintItems","OwnerContributorFilter","useAlternativeLabels","updatedTypes","ProjectsFilter","projectTotals","_projectTotals$find","projectKey","projectName","updatedProjectIds","allProjects","onToggleProject","PullRequestCalloutsFilter","sprintCallouts","calloutTotals","enabledCalloutIds","_calloutTotals$filter","_calloutTotals$find","displayTotal","retainedCallouts","union","onToggleType","RepositoryFilter","repositoryTotals","repositoriesList","_repositoryTotals$fin","updatedRepositories","allRepositories","onToggleRepositories","StatusFilter","statusTotals","_statusTotals$find","updatedStatus","TypesOfWorkFilter","typesOfWorkTotals","enabledTypeOfWorkIds","typeOfWork","_typesOfWorkTotals$fi","WorkItemCalloutsFilter","isSprintMode","pullRequestCallouts","isVisible","_calloutTotals$find2","WorkItemTypeFilter","workItemTypeTotals","shouldDisplayWorkItemType","_workItemTypeTotals$f","FilterWrapper","FilterHeader","Close","DoneButton","EpicFilter","onClickClose","isGroupedByUser","isPRWorkflowTab","Sliders","Trigger","FilterPanel","EpicFilterDrawerAndTrigger","epicFilterDrawerIsOpen","setEpicFilterDrawerIsOpen","filterPillsParams","Pill","X","ClearFilters","FilterPills","enabledDataIds","flattenedParamValues","paramValue","getDisplayValue","displayPills","pillId","currentValue","onClickPill","clearFilters","onClickClearFilters","UiCenteringWrapper","BreadcrumbLink","Breadcrumb","Content","EpicDetailsBaseTemplate","epicsListPath","breadcrumbString","EpicDetailsPage","small","DataDisclaimer","HeaderWrapper","InfoPopupContent","onCancelPopup","hasCloseButton","OverlayWrapper","TriggeredOverlay","overlayContent","overlayPlacement","onToggleShow","triggerAction","triggerContent","onToggle","rootClose","rootCloseEvent","TriggerIcon","popupPlacement","InfoPopup","showPopup","setShowPopup","isHoverAction","nextShow","PopupHeader","LearnLink","InfoBook","ChartTooltipWrapper","isInit","setContext","formatter","refresh","apply","point","hide","node","getElementById","ReactDOM","createPortal","HighchartsMore","HighchartsNetworkGraph","HighchartsHeatmap","HighchartsTilemap","HighchartsPatternFill","HighchartsAccessibility","highchartsModule","HighchartsStock","Chart","tooltipComponent","chartRef","highchart","setHighchart","callback","isFetchingData","finalConfig","credits","generateConfig","chartInstance","showLoading","hideLoading","_finalConfig$yAxis","_finalConfig$xAxis","yAxisConfig","yAxis","xAxisConfig","xAxis","setExtremes","min","max","HighchartsReact","highcharts","_context$point","cloneElement","TimeRange","TimerangeDisplayName","ValueContainer","OperationalMetricsSparklineTooltip","getSlackAvatarHtml","getAdjustedTooltipPosition","currentPosition","windowScroll","y","getPlotBands","scoreTypes","metricType","getAlwaysOnText","verticalAlign","textAlign","getBandTickPositions","scoreRanges","getMetricValue","metric","_data$data$find","dataRecord","getMetricMetadata","_data$data$find2","getOperationalMetric","raw","getMetric","getOperationalMetricDelta","unitIsPercent","previousValue","getPercentageDelta","mapStageData","_metric$metadata","getMetricBoxUnit","isActiveSprint","isPrevious","getMetricBoxDisplayValue","isPercentage","sanitized","valueToShow","isString","sortedData","orderBy","isCycleTime","dataToSeries","record","basePoint","SPRINT","x","metricValue","metricUnit","getMetricUnit","_data$data$find3","pointValue","tooltipDisplayValue","positiveValues","charAt","toFixed","dataToNumericSeries","getColorForDelta","overflow","categories","maxPadding","minPadding","labels","fontWeight","startOnTick","endOnTick","lineColor","tickWidth","tickmarkPlacement","showFirstLabel","gridLineWidth","align","isLast","isFirst","legend","plotOptions","animation","lineWidth","states","halo","size","fillOpacity","positioner","w","h","getPosition","scrollY","withTheme","InfoPopups","InfoI","CurrentValues","_templateObject6","ValueBlock","_templateObject7","PrimaryValue","_templateObject8","ValueUnit","_templateObject9","Previous","_templateObject10","PreviousValue","_templateObject11","PreviousTitle","_templateObject12","_templateObject13","_templateObject14","Comparison","_templateObject15","ComparisonHeader","_templateObject16","OverallDelta","_templateObject17","Sparkline","ChartOpsMetricsSparkline","_templateObject18","OperationalMetricsBox","deltaValue","firstMonth","linkPath","opMetricsData","overallDeltaValue","previousTimerangeHeader","textContent","currentDisplayUnit","previousDisplayUnit","deltaUnit","unitIsPercentage","valueAndUnitDisplayBlock","definition","summary","totalCycleTimeInHours","visible","bar","dataLabels","stacking","inactive","stageTimeInHours","borderColor","StageHeader","Current","PreviousHeader","OperationalMetricsCycleTimeBreakoutStage","_getMetricMetadata","_getMetricMetadata2","currentStage","currentCycleTime","currentDisplayStage","previousStage","previousCycleTime","previousDisplayStage","BreakoutContainer","ProgressBar","figure","ChartOperationalMetricsCycleTime","OperationalMetricsCycleTimeBreakout","OperationalMetricsCycleTimeSummary","first","currentRollup","firstRollup","previousRollup","Book","DisplayContainer","Summary","Breakout","OperationalMetricsCycleTime","useOperationalMetricsData","requestOperationalMetrics","MetricBoxes","CycleTimeWrapper","OperationalMetricsPage","getIsActiveSprint","informationText","operationalMetricsText","kanban","displayPreviousHeader","getDisplayTextForPreviousTimerange","timerangeMetadata","timeDifferenceInDays","operationalMetricsData","isFetchingOperationalMetricsData","isSuccessOperationalMetricsData","releaseCount","previousReleaseCount","firstReleaseCount","releaseCountDelta","overallReleaseCountDelta","releaseCountValue","previousReleaseCountValue","bugAllocation","previousBugAllocation","firstBugAllocation","bugAllocationDelta","overallBugAllocationDelta","bugAllocationValue","previousBugAllocationValue","completionRate","previousCompletionRate","firstCompletionRate","completionRateDelta","overallCompletionRateDelta","completionRateValue","previousCompletionRateValue","complexPrsRate","previousComplexPrsRate","firstComplexPrsRate","complexPrsRateDelta","overallComplexPrsRateDelta","complexPrsRateValue","previousComplexPrsRateValue","prWorkFlowLinkPath","complexPrs","RepositoryTable","aurora","CellContainer","LastUpdatedContainer","WorkIcon","AlertTriangle","DefinitionWrapper","CalloutLabel","dt","CalloutContent","ExpandIconContainer","ExpandIcon","DetailsTableContainer","NumericText","NumCallouts","PRRepositorySummaryList","pullRequests","_data$workItems","memoizedGetTeamMembers","teamMembersArrays","uniqBy","m1","m2","pullRequestsByRepository","authors","medianCycleTime","reviewers","onClickRollupCell","childTableCustomColumns","onClickCell","closedAt","lastUpdatedDate","_pr$activityHistory","activityHistory","activityAt","now","_row$authors$","_row$reviewers$","UserRow","dd","TeamList","userIds","rowCount","take","image","ColWrapper","dl","DefinitionWrapperStacked","Term","Definition","Warning","Tickets","PrWorkflowChartStatusTooltip","_last","invertedWorkItem","related","last","statusHistory","Slack","CrossTeam","PrWorkflowChartActivityTooltip","relatedUser","PrWorkflowChartSeriesTooltip","filteredData","repos","firstChartDateValue","valueOf","lastChartDateValue","statusHistoryData","_currentTheme$colors$","fillColor","_currentTheme$colors$2","events","mouseOver","activityHistoryData","symbol","orderedStatusHistory","p1","p2","zoneAxis","zones","idx","_orderedStatusHistory","marginLeft","marginTop","panning","panKey","cursor","zoomType","spline","stickyTracking","useUTC","dateTimeLabelFormats","week","day","hour","minute","endDateOnTick","gridLineColor","defaultLabel","axis","defaultLabelFormatter","call","plotLines","dashStyle","rotation","zIndex","startDateOnTick","opposite","plotBands","indexOf","scrollbar","barBackgroundColor","barBorderRadius","barBorderWidth","buttonBackgroundColor","buttonBorderWidth","minWidth","rifleColor","trackBackgroundColor","trackBorderRadius","trackBorderWidth","tickLength","ChartPrWorkflow","KeySection","KeyList","itemsPerLine","ChartEvent","ChartActivity","Bullet","Chevron","Instruction","PrWorkflowChartKey","Caption","figcaption","Disclaimer","InteractiveChartWrapper","ChartKey","PrWorkflowChartWrapper","chartKey","legacyData","chartNames","requestCharts","noChartImage","StyledFilter","StyledEmptyState","PRWorkflow","_workItems","hasData","parsedData","PageTitle","numVisibleItems","NextArrowWrapper","PrevArrowWrapper","VisibleItems","DEFAULT_NUM_VISIBLE_ITEMS","PagedStepper","activeIndex","items","reconciledNumVisibleItems","chunked","currentVisibleIndex","setCurrentVisibleIndex","currentChunk","visibleItems","updatedIndex","bgColor","AvatarIcon","avatarColor","avatarIcon","getSelectableTeamMembers","_urlParams$team2","AvatarContainer","AvatarHoverName","TeamIcon","PeoplePicker","teamAvatarEnabled","selectableTeamMembersParams","selectableTeamMembers","showPrivacyTooltip","privacyText","teamInsightDisclaimer","foundTeamMemberIndex","setSelectedUser","updatedSelectedUser","peopleAvatars","personIsEnabled","handleAvatarClick","selectedASpecificPerson","Boolean","whoClicked","avatarList","onClickTeam","onClickSeries","selectedDateRange","chartColors","groupedRows","weekRanges","yAxisMax","select","unselect","columnData","_groupedRows","numMerged","lineData","medianReviewTimeInHours","allowPointSelect","itemDistance","itemStyle","layout","symbolHeight","symbolWidth","symbolPadding","symbolRadius","shared","pointData","points","line","connectNulls","lineWidthPlus","duration","pointPlacement","maxPointWidth","configParams","ScrollContainerWithReset","resetTrigger","containerRef","isScrolled","setIsScrolled","scrollTop","onScroll","StyledTable","PrCadenceList","mergedDtm","filterType","titleIsTruncated","prUrl","toBranch","fromBranch","reviewerNames","repositoryUrl","useBackingData","manualState","_setData","defaultStartDate","DEFAULT_NUM_WEEKS_DATA_RANGE","defaultWeekRanges","add","getChartTimerangesForBoardAndTimerange","timeranges","timerangeSorter","t1","t2","baselineDate","timerangesToAdd","_setIsFetchingData","_setError","requestProps","responseData","requestPrCadence","_weekRanges$find","sorted","reviewTimesSorted","reviewTimeHours","parseData","withScope","scope","legacyRoles","legacyRoleTypes","Figure","PrCadenceChartWrapper","setSelectedDateRange","prCadenceData","dataIsEmpty","prList","emptyStateRole","PRIVATEIC","PRIVATEIC_EXEC","ChartPrCadence","Score","WorkMetadataActivities","ChevronContainer","MinHeightWrapper","chevron","EpicName","WorkMetadataEpic","textElementRef","hoverStatus","setHover","compareSize","_textElementRef$curre","_textElementRef$curre2","_textElementRef$curre3","_textElementRef$curre4","compare","parentElement","scrollWidth","addEventListener","removeEventListener","groupDisplayId","displayGroupName","MetadataWrapper","MetadataHeader","OwnersWrapper","WorkMetadata","groupPath","collaborators","ListHeader","ColHeaders","ColHeader","Metadata","WorkMetadataEpicsList","ListHeaderTitle","NoWorkEpic","EpicsList","noWorkEpic","standardEpics","workMetadata","DropdownIndicator","components","isFocused","StyledDropdown","shouldShowLabel","StyledLabel","SelectWrapper","formatOptionLabel","isClearable","isCreatable","isMulti","isSearchable","maxMenuHeight","menuPlacement","menuPosition","onChangeMulti","onCreateOption","placeholder","styles","SelectComponent","CreatableSelect","Select","overrideStyles","styleObj","indicatorSeparator","menu","singleValue","valueContainer","alignItems","blurInputOnSelect","formatCreateLabel","GroupByLabel","GroupBySelector","updatedGroupBy","Dropdown","WorkItemsGroupBySelector","Activity","StoryPointsContainer","WorkMetadataActivitiesKey","visibleActivities","showStoryPoints","ActivitiesKey","ProjectWork","ChartSpline","companyAverageData","onSelectDate","selectedDate","seriesData","measures","overall","baselineValues","marginRight","tickInterval","step","textTransform","StyledGridCol","Col","GridCol","StyledGridContainer","GridContainer","fluid","StyledGridRow","Row","GridRow","StyledValueContainer","StyledValue","StyledValueWithDirectionality","StyledDeltaContainer","StoryPointsAverage","isNaN","formattedValue","displayDelta","formattedDelta","StyledBorderedBox","getBorder","BorderedBox","StyledScrollingContainer","StyledListContainer","StoryPointsList","listType","WITH_STORY_POINTS","isWithStoryPointsList","ticketString","setDefaultStartDate","defaultEndDate","setDefaultEndDate","setSelectedDate","requestStoryPoints","responseByDate","StyledFigCaption","StoryPointsChartWrapper","storyPointsData","teamHasNoAssignedTicketsForAllDates","resultsByUser","metaData","selectedDateIndex","selectedDateMetadata","previousDateMetadata","average","allTicketsWithOwnerNames","ticketsWithoutStoryPoints","ticketsWithStoryPoints","selectedDateFormatted","teamHasNoAssignedTicketsForSelectedDate","Fragment","ChartStoryPoints","WITHOUT_STORY_POINTS","Base","Placeholder","RouteLinkTabs","defaultTabId","tabs","initialTabKey","numItems","TemplateHeader","StyledTemplateHeader","HeaderContentWrapper","StyledTabs","StyledStoryPoints","StyledPRCadence","WorkDeepDivePage","activeTimerange","canViewPrWorkflowTab","canViewPrFrequency","canViewStoryPoints","allowedSections","selectedTeamMembers","sectionTitle","getWorkDeepDivePageTitle","exact","PersonButton","PersonWrapper","DirectReportsButton","Avatar","InlineArrow","DirectReports","OrganizationNavigationMenuCard","_person$team","_person$team2","onClickPerson","onClickReportsNav","person","showArrowInline","showDirectReports","hasDirectReports","personMetadata","OrganizationNavigationMenuCardsList","_team$teamMembers","activePerson","ScrollContainer","OrganizationWrapper","CardsList","LineWrapper","SecondaryCardsList","BreadcrumbItem","BreadcrumbChevron","BreadcrumbName","OrganizationNavigationMenu","onUpdate","orgChartRootTeam","userWithMetadata","slackHandle","slackUrl","include_in_team_roster","setBreadcrumb","currentBreadcrumbIndex","setCurrentBreadcrumbIndex","filteredBreadcrumb","updateLevel","currentBreadcrumb","personWithDisplayedReports","onClickRootPerson","onClickBreadcrumbItem","UiFilterPopupTrigger","PositionedChild","hasModalBg","UiFilterOverlay","onCancelOverlay","onTriggerOverlay","arrowProps","_show","popper","TriggerWrapper","DirectorViewNavigation","activeOverlay","onHideOverlay","displayUser","ceil","numTeams","NameWrapperButton","AllTeamsMenuPopup","AllTeamsMenu","TeamPopup","DefinitionList","listLength","StyledListItem","AllTeams","FlexibleTeamsNavigation","selectedTeam","foundTeamIndex","stepperIsPaged","StepperContent","StepperText","SprintStepper","steppableSprints","orderedSprints","currentSprintIndex","stepperContent","updatedTimerange","onChangeSprint","TimeRangeSelectorLabel","SprintName","BoardName","TimeRangeSelectorSprintLabel","sprintState","timerangeBoard","labelText","boardName","PositionedCloseButton","UiFilterPopupWrapper","isSubmitDisabled","onCancel","showApplyChanges","ReactDateRangePicker","DateRangePicker","TimeRangeSelector","selectionTimeranges","currentSelection","setCurrentSelection","toDate","allTimeranges","selection","matchedRange","onClickSubmit","months","maxDate","ranges","showPreview","staticRanges","StyledTimeRange","Clamped","TimerangeStepper","getUpdatedStartAndEnd","initialTimerange","changeInterval","displayTime","nextStart","nextEnd","updatedStart","updatedEnd","onChangeTimerange","StepperWrapper","TriggerContent","Sprint","Timerange","UiFilterTimeRange","setActiveOverlay","isStepperDisabled","setIsStepperDisabled","isSuccessSprintMetadata","activeSprints","debouncedStepperChange","onChangeStepper","updatedTimerangeId","eventParams","fullSprintMetadata","DirectorAndTeams","TimerangeWrapper","DirectorNav","FlexTeamsLoader","GlobalNavigation","_orgChartRootTeam$tea","groupIdMatch","displayTeams","foundDefaultTeam","otherTeams","shouldShowFlexibleTeams","shouldShowDirectorView","overlayKey","StarContainer","StarMessage","Stars","StarIcon","SentMessage","FeedbackForm","triggerWriteFeedback","descriptionHeader","setComment","rating","setRating","isSent","setIsSent","_","ratingNumber","widgetName","FrameContainer","ChartTitle","ChartIframe","iframe","ChartFooter","Description","DescriptionHeader","TitleContainer","NewFlag","LabsChart","descriptionBody","displayIsNew","manifest","setIsFetching","setError","setCharts","experiments","externalPage","fetchedCharts","files","requestLabsData","sendFeedback","enteredFeedback","errorType","HeaderBody","LabsPage","MANIFEST","manualManifest","MANIFESTJSON","labsHeaderDescription","chartToDisplay","Greeting","ContentContainer","ContentWidthWrapper","NoAccessPage","NoPermissions","_sortedData","benchmark","selectedStartDate","isDaysScale","measure","mainColor","includesFutureDates","isSame","yAxisValuesWithBenchmarks","low","yMin","yMax","spacingTop","accessibility","description","month","tickColor","getOverviewTrendlineYAxisLabelFormatter","mid","click","ChartOverviewTrendline","SelectedPeriodText","SelectedPeriodValue","OverviewSummaryCurrentValue","Previous14Days","OverviewSummaryPreviousValue","EmptyStateWrapper","HeaderText","OverviewSummary","isEmptyData","OverviewCycleTimeTrendlineTooltip","createManyUnion","literals","z","literal","orgShortIsoFormatRegex","RegExp","zHexColor","string","regex","zRoles","zLegacyRoles","zLegacyRolesSnakeCase","zUserId","zUplevelRole","null","allUserAttributes","object","array","boolean","reports","reportGroup","nullable","uplevel_role","zUser","zTeamAvatarIcons","zTruthyOrgChartVersion","allTeamAttributes","createdAt","createdByUplevelUserId","includeInExecCharts","orgChartVersion","orgChartVertical","teamMemberUplevelUserIds","baseTeam","zSimpleTeam","extend","zPoint","zOrgTimeRange","zSimpleTeamItem","teamLeadsName","zOrgByTime","zOrgByTimeItem","zOrgPoint","optional","zOrgByTimePoint","zOrgByUserDataRecord","zOrgByUserDataRecordExtended","zOrgByUser","zOrgDeepWorkGroups","invertedRoleTypes","getOrgDeepWorkByGroup","groupProperty","urlParamsTeams","truthyTeamMemberMetadata","teamMembersValues","userData","_teams$find","getFilteredTeamMembersMetadata","filteredTeamMembers","groupedTeamMembers","lodashGroupBy","mapKeys","_teams$find2","dedupTeamNames","dedupedTeamNames","flattenDepth","getMappedSummaryData","orgTimeRanges","_orgTimeRanges$find","isBefore","getDisplayTrendlinePoints","selectedTimeRange","selectedIndex","previousIndex","useOrganizationCycleTimeData","catch","requestOrganizationCycleTimeData","ChartGrid","MainContent","Benchmark","BenchmarkLine","OverviewCycleTime","isFetchingOverviewData","summaryData","isErrorSummaryData","isFetchingSummaryData","isSuccessSummaryData","mappedSummaryData","truthyValuesInHours","hasNoRawSummaryData","hasNoSummaryData","isFetchingAnyData","hasNoFetchedData","hasNoFilteredData","OverviewDeepWorkScatterplotTooltip","median","sortedArray","midpoint","icons","mappedTeamData","medianDeepWorkValue","sortOrder","mapAndSortDataByMedianValue","allDataPoints","dataPointsGroupedByRole","dataRoles","orderedDataRoles","rolesConfig","offset","textOverflow","NUM_VISIBLE_ROWS","scatter","jitter","ChartOverviewDeepWorkScatterplot","OverviewGroupBySelector","availableReportGroups","availableRoles","availableTeams","flexTeams","PrimaryTitle","Subtitle","Selector","OverviewDeepWorkByGroup","OverviewDeepWorkTrendlineTooltip","useOrganizationDeepWorkData","requestOrganizationDeepWorkData","OverviewDeepWorkPage","isErrorOverviewData","byGroupData","isErrorByGroupData","isFetchingByGroupData","isSuccessByGroupData","groupedByGroupData","typedData","groupedData","hasNoRawByGroupData","hasNoByGroupData","isErrorAllData","createRoleOptions","createReportGroupOptions","createTeamOptions","teamMetadata","FiltersContainer","OverviewFilters","selectedReportGroups","selectedRoles","selectedTeams","partitionedTeams","selectedPartitionedTeamIds","allRoleOptions","selectedRoleOptions","allReportGroupOptions","selectedReportGroupOptions","allOrgTeamOptions","allFlexTeamOptions","selectedOrgTeamOptions","selectedFlexTeamOptions","selectedTeamIds","OverviewReleaseFrequencyTrendlineTooltip","useOrganizationReleaseFrequencyData","requestOrganizationReleaseFrequencyData","OverviewReleaseFrequency","useOrganizationTeamsData","includeFlexTeams","requestOrganizationTeamsData","useOrganizationTimeRanges","trackError","requestOrganizationTimeRanges","errorParams","Filters","MessageBlock","Email","SupportText","OverviewPage","querystringStartDate","querystringEndDate","timeRangesData","isErrorOrganizationTimeRanges","isFetchingOrganizationTimeRanges","nonFutureTimeRanges","pop","organizationTeamsData","isErrorOrganizationTeamsData","isFetchingOrganizationTeamsData","isErrorFullOrganizationData","isFetchingFullOrganizationData","organizationIcTeamMembers","getOrganizationIcTeamMembers","filteredOrganizationUserIds","unionOrgTeamUserIds","unionFlexTeamUserIds","filteredOrgTeamUserIds","filteredFlexTeamUserIds","teamsList","getFilteredOrganizationUserIds","getRoleTypesFromUsers","getReportGroupsFromUsers","extendedTeamsWithNames","getExtendedTeamsWithNames","organizationIcTeamMemberIds","extendedTeams","icUserIds","deepWorkDisplayContent","releaseFrequencyDisplayContent","cycleTimeDisplayContent","overviewDisplayContent","overview","overviewPageMessage","AvatarWrapper","PersonCard","_setHasError","reportingTeam","requestReportsList","Card","Reports","DownloadLink","ReportsList","reportsListData","report","onClickDownloadLink","ReportsBaseTemplate","ReportsPage","hasReports","getReportsPageTitle","reportsPageMetadata","CycleTimeRow","EpicLink","CycleTimeByGroupTable","groupedWorkItems","sectionType","infoText","cycleTimesInSection","_group$activities$fin","_totalCycleTime$find","_Object$values$find","def","getOrDefault","totalCycleTime","daysInCycleTime","rowId","defaultIsOpen","setIsOpen","SignalTypeContainer","isExpandable","FactorsListItem","InlineIcon","FactorsHeader","FactorName","RetrosFactorsList","factorsArray","isUnhealthyFactors","f","factorSlug","factorMetadata","projectHealthFactors","peopleHealthFactors","isSameMonth","tickPositions","alignColumns","seriesName","strippedName","getSprintHealthFactorsTooltip","ErrorBoundary","getPersonScore","personRecord","factor","_personRecord$metric","_personRecord$metric$","contextSwitchingIndex","_personRecord$CONTEXT","contextSwitchingFactor","contextSwitchingFactorScore","multiplier","metricToCalculate","HOURS","DETAILS","numbersToMean","mean","getNumberDataSeries","chartView","metricSeries","teamScores","scores","peopleScores","filteredScores","it","getAveragePeopleScoresOfPresent","TOTAL","CALLOUT_DETAILS","bucket","CHAT_CHANNELS_WITH_INTERRUPTIONS","details","PR_REPOS","JIRA_EPICS","TOP_PRIORITY_BUGS","parent","dateEnd","getFilteredSprintHealthData","filtered","omitBy","StyledExpander","RetrosTrendAnalysis","thisSprint","hasPeopleHealthData","ChartSprintHealthTrendAnalysis","GroupId","ReactionsList","numListItems","ReactionsListItem","ReactionWrapper","statusType","NumReactions","TeamMember","WorkMetadataReactionsRollupRow","groupedAnnotations","numReactionIcons","statusAnnotations","NoReactionsHelpText","NoReactionsHtmlText","WorkDeepDiveLink","WorkMetadataReactionsRollup","selectedGroupBy","workDeepDiveLinkPath","annotationsForGroup","FactorsAndCycleTime","ReactionsOrCycleTime","Factors","FactorsListHeader","TrendAnalysis","RetrosRangeFactorsContainer","sprintCompletionData","sprintHealthFactorsData","currentSprintHealthFactorsData","hasRetrosReactions","filteredPeopleFactors","filteredProjectFactors","pickBy","filteredWorkItems","annotationsWithNonNeutralReactions","positiveReactions","negativeReactions","onBarClick","onBarMouseOver","colorRamp","textOutline","brightness","userOptions","WorkProgressBreakout","activityTypes","activitiesWithValues","activityTypeKey","Rollup","numColumns","RollupCategory","RollupCategoryHeader","rollup","KeyWrapper","ChartWrapper","SecondaryActivitiesHeader","WorkProgress","displayCategories","ChartSprintProgress","RetrosSprintCompletion","tooltipContent","LinkList","LinkListItem","SprintHealthFactorsContainer","SprintHealthFactorsGrid","sprintHealthFactorSet","SprintHealthPill","sprintHealthScoreType","HealthPillWrapper","TooltipText","SprintHealthFooter","FooterPill","RetrosSprintHealthFactors","activePill","setActivePill","setSprintHealthFactorSet","onClickFactorSet","factorSet","chartData","sortedAndFilteredChartData","getHealthPillText","signals","healthySignals","getTooltipText","factorSetId","onMouseOut","userHasSelectedAnnotation","QuickReact","onReact","numAnnotations","TitleWrapper","ReactionsRow","ReactionsSummary","Reaction","ReactionTrigger","ReactionTotal","CommentsListHeader","SprintMetadata","CallToAction","RetrosSprintReactionsSummary","setIsModalOpen","writeAnnotationsMutation","removeAnnotationsMutation","retroReactionId","sprintReactions","commentReactions","sprintContext","isTextComment","reactionKey","reactions","StyledEye","names","TeamRoster","em","scoreType","SignalHealthColor","Total","TotalNumber","SprintUpdatesTableItem","getSprintUpdateTablePathParams","itemKey","isStrict","Grid","ValuesWrapper","canShowAddedMidSprintBreakout","Nested","SprintUpdatesTable","retroTotals","isStrictUi","addedMidSprintInSprint","addedMidSprintRemoved","addedMidSprint","notCompleted","carryOverFromPreviousSprint","removedMidSprint","unestimatedItems","completedOutsideSprint","StyledPageTitle","SubHeader","Stats","Stat","StatHeader","StatValue","SprintHealthStatValue","Charts","SprintHealthChart","SprintCompletionChart","ReactionsAndStats","ActiveSprint","RetrosSummary","_activitiesTotals$fin","_sprintHealthFactorsD","_sprintCompletionData","_sprintCompletionData2","activitiesTotals","sprintCompletionPercentage","sprintHealthScore","useSprintHealthData","sprintIds","requestSprintHealth","RangeFactors","GroupBy","RetrosPage","canViewRetros","teamActuallyUsesSprints","isErrorSprintCompletionData","isLoadingSprintCompletionData","sprintHealthData","isErrorSprintHealthData","isLoadingSprintHealthData","isErrorAnnotationsData","isLoadingAnnotationsData","requestEnabledJiraProjectsData","EnabledJiraProjects","_setCurrentPage","pageSize","tableData","requestEnabledRepositories","EnabledRepositoriesTable","StyledSelectableInputs","UiFilterSelectableInputsList","FormHeader","SettingsDefaultGroupBySelector","userSettingsMutation","updatedType","IntroText","Subgrid","SettingsProjectsAndRepos","Radio","DefaultTeamRadio","isDefault","onChangeDefaultTeam","createIcon","createColor","DisplayIcon","ShuffleIcon","AvatarIconCreator","onCreateIcon","updatedIcon","updatedColor","ProjectInput","BoardInput","StyledSwitch","NoData","MetadataType","MetadataValue","isEditing","updatedMargin","isDropdown","Error","getInputStyles","SprintsMetadataSelector","hasBoardError","hasProjectError","onSelectBoard","onSelectProject","onToggleSprints","actuallyUsesSprints","projectOptions","selectedProject","selectedProjectValue","boardOptions","selectedBoard","selectedBoardValue","displayProject","displayBoard","DotMenu","Menu","MenuListItem","MenuButton","TeamCardDotMenu","onClearAll","onDelete","onEdit","nameSlug","TeamMembersList","TeamMemberAvatar","isPending","TeamMemberNameAndTitle","TeamMemberName","TeamMemberTitle","Remove","RemoveButton","SpacingWrapper","TeamCardTeamMembers","onRemoveTeamMember","PlusIcon","ChildrenWrapper","TeamMembersAdderOption","createOptions","TeamMembersAdder","addablePeople","onCreateTeamMember","onUpdateTeamMembers","flexFlow","maxHeight","overflowY","multiValueContainer","multiValueLabel","paddingTop","paddingBottom","paddingLeft","whiteSpace","multiValue","multiValueRemove","StyledTextInput","TextInput","onBlur","NameWrapper","TeamNameWrapper","IconCreator","NameInput","hasTeamNameError","Adder","hasTeamMembersError","TeamMembers","ExistingTeam","addedTeamMembers","canEdit","fullOrganization","onBlurTeamName","onChangeTeamName","filteredOrganization","differenceBy","Form","FieldWrapper","TeamMembersFieldWrapper","Sprints","NewTeamForm","Buttons","ConfirmButton","CancelButton","TeamCardConfirmationModalContent","onConfirm","Paragraph","TeamName","TeamCardSubmitModalContent","newTeamMembers","removedTeamMembers","isConfirmAction","filteredAddedTeamMembers","n","canReceiveEmailNotifications","TeamCardModalContent","displayModal","onCancelDelete","onCancelRemoveTeamMember","onCancelSubmit","onConfirmDelete","onConfirmRemoveTeamMember","onConfirmSubmit","isNewTeam","modalContent","isSelf","ButtonWrapper","CreatedByName","RESET_STATE","tmpRemoveTeamMembers","TeamCard","_team$createdByUser","modePrefix","isLoadingFullOrganizationData","deleteTeamMutation","createUpdateTeamMutation","updatedTeam","setTeamMembers","updatedSettings","setQueryData","isSuccessProjectsData","updateState","newState","setAddedTeamMembers","setAvatarColor","setAvatarIcon","setBoard","setHasBoardError","setHasProjectError","setHasTeamMembersError","setHasTeamNameError","setProject","setShouldUseSprints","setTeamName","setTmpRemoveTeamMembers","INITIAL_STATE","getInitialState","setProjects","setBoards","setSprint","setDisplayModal","setIsEditing","boardProject","updatedBoards","filteredBoards","updatedTeamMembers","teamMembersWithMetadata","currentlyAddedTeamMember","orgMember","newTeamMember","currentTeamMembers","doSubmit","filteredExistingTeamMembers","existing","removed","allTeamMembers","canEditExistingTeam","canSubmit","TeamCardCol","SettingsTeamBuilderGrid","CardHeader","SettingsTeamBuilder","orgChartTeams","StyledTextBlock","weight","isUppercase","TextBlock","hasBorder","extrabold","as","ErrorLevelMedium","message","marginBottom","SwitchContainer","HtmlDisplayName","TeamCustomizationSettingsSwitches","settings","featureConfig","sourceFeatureMap","getSourceContributionText","source","visibility","contribution","arrayToPrettyString","optionKey","switchDisplayName","jiraCustomizationSettingsKeys","storyPointsCustomizationSettingsKeys","bugsCustomizationSettingsKeys","SettingsWrapper","Issues","JiraWorkSettings","onChangeSwitch","showHealthFactorsCustomizations","teamUsesSprints","jiraOptionsKeys","difference","storyOptionsKeys","sourceCodeCustomizationSettingsKeys","SourceCodeSettings","chatCustomizationSettingsKeys","ChatSettings","calendarCustomizationSettingsKeys","CalendarSettings","useCustomizationData","teamParams","teamIds","customizationParams","teamSettings","subtasks","queryData","requestTeamsCustomizations","queryMutation","newSettings","updateTeamCustomizations","InfoText","InternalTeamPickerContainer","Teams","TeamTitle","TeamLength","rosterLength","TabContent","TeamJiraContainer","DisclaimerText","JiraItem","SaveChangesText","SaveButtonContainer","SaveButton","LargeText","_templateObject19","StyledModal","_templateObject20","_templateObject21","_templateObject22","BodyText","_templateObject23","GoBackButton","_templateObject24","TurnOffButton","_templateObject25","FactorLists","_templateObject26","Column","_templateObject27","FactorItem","_templateObject28","TeamCustomizationSettings","_activeTeam$teamMembe","_activeTeam$teamMembe2","_queryData$data2","activeTeamId","userHasNoFlexTeams","savedSettings","_queryData$data","_queryData$data$","settingsLocal","setSettingsLocal","allProjectFactorsDisabled","setAllProjectFactorsDisabled","allContextFactorsDisabled","setAllContextFactorsDisabled","isSavable","projectsDisabled","contextSwitchingDisabled","handleSaveChanges","Tabs","SettingsPage","canViewTeamBuilder","canViewTeamCustomizationSettings","TenantAlias","HomeIcon","DropDownContainer","StyledRouteLink","StyledName","HomeLinkWithDropDown","activeTeamLead","homeDropDownIsOpen","_setHomeDropDownIsOpen","isOverviewPage","onClickHome","isLoggedInUser","onClickDropdown","Beaker","SidebarList","SidebarLink","isZoomedIn","UplevelWebLink","LinkTitle","LinkFlag","LinkChildrenList","LinkChildrenListItem","ListDivider","Divider","pageIsAllowed","SidebarLinks","pages","allowedFeatures","isAllowed","enabledFeatures","_flags$newFeatures","_flags$beta","linkId","isEnabled","linkContent","newFeatures","beta","linkWrapper","divider","disableGutters","childLinkId","StyledDrawer","SidebarLinksWrapper","BorderWrapper","UserButton","isTeamLead","ResourceLinksList","ResourceLinksListItem","ResourceLink","ResourceLinkHeader","ResourceLinkIcon","ResourceLinkText","UplevelLogo","PrivacyLink","SettingsLink","CogIcon","Sidebar","onClickUser","resetState","variant","currentTarget","UplevelLogoWords","getFullYear","StartPage","ChartPackedBubble","selectedTeamMember","allClassifications","allValuesAreTheSame","classificationName","clip","deltaPercent","valueHours","indicatorDirection","isNumber","slackAvatarHtml","getMeetingClassificationsTooltipHtml","itemMarginBottom","itemMarginTop","itemWidth","allowOverlap","packedbubble","minSize","maxSize","draggable","layoutAlgorithm","enableSimulation","gravitationalConstant","maxIterations","maxSpeed","onSelectClassificationId","override","setConfig","memoizedData","overrideLabel","memoizedTheme","memoizedTeamMember","MeetingClassificationOverrideConfirmation","onClickConfirmation","onClickResumeEditing","MeetingClassificationLabel","Text","MeetingClassificationOverrideForm","meeting","selectedClassification","setSelectedClassification","currentClassification","classification","listName","onSubmitClassification","StyledPipedList","PipedList","listItem","MeetingTable","MeetingList","onClickEdit","dateAndTime","StyledMeetingList","meetings","handleOverride","meetingToEdit","setMeetingToEdit","modalDisplay","setModalDisplay","modalIsVisible","setModalIsVisible","meetingsStringified","onCancelModal","isConfirmationButton","overrideParams","mapUserValues","allMeetings","currentTotalHours","previousTotalHours","valuePercent","totalHours","endTime","startTime","fetchMeetingClassificationsData","canViewFullTeam","requestMeetingClassifications","requestMeetingClassifications_privateic","responseDataCurrent","dataFetcher","responseDataPrevious","mappedValues","StyledInfoPopup","_healthFactorsMetadat","_healthFactorsMetadat2","canSeeAlwaysOnData","isMeetingPopup","why","what","textNoAlwaysOn","MeetingClassificationsChartWrapper","selectedUserValue","teamAverageImage","overrideOption","setOverrideOption","meetingClassificationsData","newValue","selfDataMeetings","selfData","selectedUserData","ChartMeetingClassifications","MeetingListSummary","canViewTeam","isViewingTeam","teamData","teamAverages","individualData","userValues","teamConfig","individualConfig","getMeetingTimeTooltip","isTeamSeriesTooltip","colorKeyClassnames","StyledChart","configProps","useMeetingLengthData","canViewTeamData","requestMeetingTime","requestMeetingTime_privateic","MeetingTimeChartWrapper","meetingLengthData","meetingTimeList","ChartMeetingTime","MeetingInsightsTabs","MeetingInsights","canViewMeetingLengthTab","displayParams","getDeepWorkTooltips","showFullTeam","_dateRecord$peopleSco","dateRecord","teamDeepWorkBuckets","_record$DEEP_WORK","_record$DEEP_WORK$HOU","_record$DEEP_WORK2","_record$DEEP_WORK2$HO","_record$DEEP_WORK3","_record$DEEP_WORK3$HO","userMetadataRecord","hours","currentAverageDeepWorkTime","rollingAverageRecordSet","isSameOrBefore","displayRecords","currentAverage","rollingAverage","getDeepWorkTooltipDisplay","_record$peopleScores$","_record$peopleScores$2","_record$peopleScores$3","hoursDetails","getYAxisMax","alwaysOn","deepWork","deepWorkTeam","chatInterruptions","chatInterruptionsTeam","contextSwitchingTotal","contextSwitchingTeam","contextSwitchingJiraP1BugTickets","contextSwitchingMeetings","contextSwitchingSlackChannels","contextSwitchingPRRepos","contextSwitchingJiraEpics","baseSeries","dateStart","alwaysOnRiskTypes","contextSwitchingScoreTypes","legendItemClick","seriesIndex","setVisible","getContextSwitchingTooltips","_data$find","scoreRecord","itemsToShow","_scoreRecord$CONTEXT_","_scoreRecord$CONTEXT_2","_scoreRecord$CONTEXT_3","_scoreRecord$CONTEXT_4","_scoreRecord$CONTEXT_5","_scoreRecord$CONTEXT_6","_scoreRecord$CONTEXT_7","_scoreRecord$CONTEXT_8","_scoreRecord$CONTEXT_9","_scoreRecord$CONTEXT_10","_scoreRecord$CONTEXT_11","_scoreRecord$CONTEXT_12","bucketMap","_scoreRecord$CONTEXT_13","_scoreRecord$CONTEXT_14","theRecord","_scoreRecord$CONTEXT_15","_scoreRecord$CONTEXT_16","totalChannels","_scoreRecord$CONTEXT_17","_scoreRecord$CONTEXT_18","_scoreRecord$CONTEXT_19","_scoreRecord$CONTEXT_20","_repos$details","namedMeetings","otherMeetings","_scoreRecord$CONTEXT_21","getPeopleHealthContextSwitchingTooltip","seriesColor","userRecords","getUserRecordsForTooltips","_data$find2","_person$CHAT_INTERRUP","nameMetricMap","keyPairs","hasSubMetric","selectedSubMetric","getPeopleHealthBucketTooltip","getAlwaysOnDisplay","ContextSwitchingWarningContainer","WarningContainerSection","SubfactorsList","isNullContextSwitching","timeRecord","d1","d2","Triangle","baseWidth","AlertCount","WarningTriangle","alertCount","DataAndHeader","HeaderSection","DataSection","DataText","MetricCalloutDetails","metricTitle","timeUnit","thisSprintData","rollingAverageData","SectionHeader","SignalType","SignalInDropdown","SignalNotInDropdown","healthy","DeepDiveLink","ContextSwitchingFactorCircle","ContextSwitchingTitle","MetricTileContextSwitchingDetails","mostRecentData","unhealthyContextSwitchingData","_s$CONTEXT_SWITCHING","_s$CONTEXT_SWITCHING2","_s$CONTEXT_SWITCHING3","_s$CONTEXT_SWITCHING4","_s$CONTEXT_SWITCHING5","getPersonDetails","unhealthyData","_unhealthyData$find","_unhealthyData$find$s","detailData","detailListData","b1","b2","jiraP1BugsPath","parseJiraP1Bugs","e1","e2","jiraEpicsPath","parseJiraEpics","chatInterruptionsPath","parseSlackChannelInterruptions","meetingsPath","topMeetingTypes","val","remainingMeetingPct","parseMeetings","r1","r2","repo","reposPath","parsePRRepos","unhealthyUsers","contextSwitchingPath","getTeamDetails","MetricTileDeepWorkDetails","_userScores$DEEP_WORK","userScores","submetricValue","submetricIndex","lowerCase","curr","MetricCircle","MetricCircleWrapper","SectionContainer","TileHeader","SignalDefinition","signal","MetricCalloutTile","_data$sort","_mostRecentData$peopl","_sanitizedMostRecentD","_healthyPeopleIds$fil","_healthyPeopleIds$fil2","_healthyPeopleIds$fil3","visibleTeamMembers","sanitizedMostRecentData","metricSignal","scoreToSignal","unhealthyPeopleIds","healthyPeopleIds","peopleScore","_peopleScore$DEEP_WOR","unhealthyPeople","healthyPeople","getPathFromEmail","shouldShowTeamMetricSignal","_unhealthyPeopleIds$f","_unhealthyPeopleIds$f2","_unhealthyPeopleIds$f3","_u$DEEP_WORK$HOURS","_u$CONTEXT_SWITCHING$","_u$DEEP_WORK$HOURS2","_u$CONTEXT_SWITCHING$2","StyledMetricIcon","TooltipPopup","SourcesList","SourceIcon","MetricTileContainer","PeopleHealthTabs","DisclaimerContainer","canViewSelectedData","showTabs","showMetricTiles","updatedSelectedMetric","teamDeepDivePath","setSelectedMetric","selectableMetricOptions","_urlParams$team$teamM","sources","ChartPeopleHealth","useTeamDeepDiveData","teamMemberIds","endSprintId","requestTeamDeepDiveData","fetchedData","transformHandler","transformTeamDeepDiveData","HeaderContent","SubRouteContainer","TitleText","TeamDeepDivePage","selectedUserEmail","teamDeepDiveSelectedSection","teamDeepDiveSelectedMetric","teamDeepDiveTitle","getTeamDeepDivePageTitle","peopleHealthData","isFetchingPeopleHealthData","errorPeopleHealthData","canViewMeetingInsightsTab","userFromTeamMembers","meetingInsightsDisabled","selectableSectionOptions","titleSuffix","PeopleHealth","spacingBottom","isCurrentSprint","overallScore","factorsList","factorValue","factorsData","getSprintHealthTooltip","ChartSprintHealth","ChartHeader","HealthScoreTitle","HealthScoreHeader","HealthScoreValue","SprintHealth","bookTextContent","healthText","sprintHealth","sprintData","useSprintSuccessData","requestSprintSuccess","SuccessContent","SuccessValue","SprintSuccess","isIdle","workProgressText","projectedDone","StartWorkProgress","workProgress","Roster","StyledSprintHealth","StartPageSummary","isSuccessSprintHealthData","isErrorWorkCompletionData","isLoadingWorkCompletionData","isSuccessWorkCompletionData","workCompletionData","customizedSprintHealthData","StyledReporteePill","ReporteeNameAndTitle","lineArrow","ReportsWrapper","ReportsText","ReportsWrapperExpanded","TotalOrgText","NumberText","ReportsCard","reportsDropdownOpen","setReportsDropdownOpen","getTotalReportsLength","currentReports","reportsOfReports","_r$team","newActiveTeam","parentsToAdd","updatedParents","updatedUser","totalReportsLength","dropdownOpen","getReportsText","currentReportsTeamMembers","newTeam","totalReports","getReportsList","SignalContainerHeader","NameAndTitle","HealthySignal","PrPill","AllocationPill","allocationPercent","AllocationText","PrText","AllocationSection","AllocationHeader","AllocationExpander","HealthySignalsValue","AllocationValue","NoAllocationMsg","SignalTooltip","UnhealthyTooltip","PersonTile","_signals$ALWAYS_ON","_signals$ALWAYS_ON$","_flatten","allocations","displaySignals","_s$","isShowingExpandedAllocations","setIsShowingExpandedAllocations","prettyPrint","str","sortedAllocations","allocationsToShow","unhealthySignals","signalGroup","partitionSignals","pullRequestItems","pullRequestStatuses","getSignalEndpoint","_PullRequestStalledOp","statusName","prRecord","signalEndpoint","signalContents","signalTypeTrigger","allocation","epicName","_flattenedOrganizatio","getTeam","useAllocationsData","requestUserAllocationsData","Team","StyledTextHeader","TitleTextWrapper","CreateTeamLink","CreateTeamText","YourTeam","_peopleHealthData$peo","isFetchingTilesData","allocationsData","isFetchingAllocationsData","teamHealthData","_person$CONTEXT_SWITC","_person$CONTEXT_SWITC2","_person$DEEP_WORK","_person$DEEP_WORK$HOU","PULL_REQUEST","teamWithMetadata","memberTileData","memberSignals","memberAllocationsData","allocationSet","flattenedAllocations","epics","TeamHomePage","shouldShowSummary","NoAccessClientDashboard","PageContainer","main","NoTeamWarningContainer","WarningTitle","WarningBodyText","WarningSubheader","WarningStepsList","WarningStep","SettingsLinkButton","NoAccessContainer","MainPages","canAccessTeamData","DashboardPage","useCanAccessTeamData","_activeTeam$createdBy2","isAccessibleTeam","setIsAccessibleTeam","activeTeamsTeamLeadId","activeTeamMemberIds","organizationTeamMemberIds","_getFlattenedTeamMemb","orgChartTeamLeadIsInUsersOrganization","containsTeamMemberInUsersOrganization","_activeTeam$createdBy","userIsOnTeam","userCreatedTeam","hasNoTeam","canAccessDashboard","ScrollManagement","componentDidUpdate","prevProps","scrollTo","withRouter","StyledUplevelUi","UplevelUi","_ThemeProvider","UnknownUser","Auth0Wrapper","preAuth0RedirectUrl","setPreAuth0RedirectUrl","setHasRedirected","hasSentEvent","setHasSentEvent","sessionUsername","providerConfig","domain","clientId","audience","redirectUri","origin","onRedirectCallback","appState","originalUri","returnTo","Auth0Provider","StyledForm","DomainForm","emailIsValid","setEmailIsValid","validateEmailAddress","yup","isValid","valueToValidate","emailAddress","FormData","emailAddressIsValid","inputIsValid","required","AuthPage","urlDomain","localStorageDomain","localStorage","getItem","userEnteredDomain","setUserEnteredDomain","setDomain","hasAuthParams","reconciledDomain","setItem","fetchedAuthParams","requestAuthParams","parsedAuthParams","attributes","parseAuthParams","storeAuthParams","OktaUiReadyWrapper","OktaWrapper","preOktaRedirectUrl","setPreOktaRedirectUrl","OktaAuth","issuer","scopes","pkce","Security","restoreOriginalUri","_oktaAuth","toRelativeUrl","LoginCallback","App","createBrowserHistory","sentryReduxEnhancer","dsn","release","autoSessionTracking","environment","integrations","ExtraErrorData","BrowserTracing","routingInstrumentation","normalizeDepth","tracesSampleRate","QueryClient","store","createStore","rootReducer","ReduxProvider","QueryClientProvider","client","Router"],"mappings":"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AAxV,YAAA,wBAAAyV,YAAA,gBAAVH,CAAU,2BAkBrBmD,GAAyB,CACpC,aAAcC,KACd,mBAAoBC,KACpB,aAAcC,KACd,cAAeC,KACf,WAAYC,KACZ,iBAAkBC,KAClB,iBAAkBC,KAClB,mBAAoBC,KACpB,gBAAiBC,KACjB,aAAcC,KACd,iBAAkBC,KAClB,kBAAmBC,KACnB,YAAaC,KACb,aAAcC,KACd,cAAeC,KACf,YAAaC,MACb,YAAaC,KACb,gBAAiBC,KACjB,gBAAiBC,KACjB,iBAAkBC,KAClB,cAAeC,KACf,uBAAwBC,KACxB,eAAgBC,KAChB,kBAAmBC,KACnB,mBAAoBC,KACpB,YAAaC,KACb,eAAgBC,KAChB,eAAgBC,KAChB,aAAcC,KACd,cAAeC,KACf,YAAaC,MACb,mBAAoBC,MACpB,iBAAkBC,MAClB,sBAAuBC,KACvB,iBAAkBC,KAClB,aAAcC,KACd,eAAgBC,KAChB,cAAeC,KACf,gBAAiBC,KACjB,kBAAmBC,KACnBC,aACAC,SACAC,SACAC,SACAC,UACAC,UACAC,SACAC,UACAC,YACAC,UACAC,cACAC,UACAC,UACAC,WACAC,WACAC,WACAC,UACAC,YACAC,aACAC,WACAC,aACAC,SACAC,YACAC,SACAC,YACAC,YACAC,YACAC,YACAC,cACAC,aACAC,eACAC,aACAC,cACAC,YACAC,cACAC,aACAC,cACAC,UACAC,WACAC,WACAC,gBACAC,UACAC,gBACAC,WACAC,UACAC,UACAC,aACAC,WACAC,WACAC,cACAC,aACAC,SACAC,SACApR,YACAqR,cACAC,WACAC,iBACAC,YACAC,gBACAC,UACAC,YACAC,aACAC,QACAC,YACAC,cACAC,aACAC,UACAC,UACAC,YACAC,WAGWC,GAAiC,CAC5C,mBAAoBC,GACpBC,OACAC,SACAC,MACA,+BAAgCC,GAChC,gCAAiCC,GACjC,6BAA8BC,GAC9BC,WACA,aAAcC,GACd,oBAAqBC,GACrBC,gBACA,sBAAuBC,IAGZC,GAA2BC,eAAK5H,GAAUzJ,IAEbqR,eAAK5H,GAAU,CACvD,QACA,YACA,UACA,SACA,iBACA,QACA,QACA,MACA,OA6Ba6H,OA1BFjQ,IAA2D,IAA1D,MAAEgI,EAAK,UAAEzB,EAAS,KAAE9K,EAAI,OAAE+K,EAAS,UAAiBxG,EAChE,MAAMkQ,EAAiBC,OAAOC,KAAKlB,IAGnC,MADiB,IAAIiB,OAAOC,KAAKhI,OAAc8H,GACjCG,SAAS5U,GAIhByU,EAAeG,SAAS5U,GAC7BkL,eAACuB,GAAe,CACdhB,IAAKzL,EACL8K,UAAWA,EACX,iBAAAG,OAAgBF,EAAM,UAAAE,OAASjL,GAC/BuL,IAAKkI,GAAazT,KAGpBkL,eAACmB,GAAU,CACTvB,UAAWA,EACXyB,MAAOA,EACP,iBAAAtB,OAAgBF,EAAM,UAAAE,OAASjL,GAAOzH,SAEtC2S,eAAC2J,KAAe,CAAC7U,KAAM2M,GAAS3M,OAhB3B,IAkBR,E,4BCvUI,MAAM8U,GAAgBC,IAC3BC,aAAiBD,GACVpM,QAAQsM,OAAOF,IAGXG,GAAoBA,CAC/BC,EACAC,KAEA,IACE,OAAOzM,QAAQC,QAAQuM,EAAOE,MAAMD,EAAeE,MACrD,CAAE,MAAOC,GAKP,OAJAP,aAAiBO,GAIV5M,QAAQsM,OAAOM,EACxB,GAIIC,GAAMC,KAAMC,OAAO,CACvBC,QAAQ,GAAD1K,OAAKzD,GAAOG,SAAQ,QAC3BiO,QAAS,CACP,eAAgB,sBAGpBJ,GAAIK,aAAa7M,SAAS8M,KAAIC,GAAKA,GAAGjB,IAG/B,MAAMkB,GAAYP,KAAMC,OAAO,CACpCC,QAAQ,OACRC,QAAS,CACP,eAAgB,sBAGpBI,GAAUH,aAAa7M,SAAS8M,KAAIC,GAAKA,GAAGjB,IAGrC,MAAMmB,GAAUR,KAAMC,OAAO,CAClCC,QAAQ,GAAD1K,OAAKzD,GAAOC,SAAQ,QAC3BmO,QAAS,CACP,eAAgB,sBAGpBK,GAAQJ,aAAa7M,SAAS8M,KAAIC,GAAKA,GAAGjB,IAE3BU,UCjDR,MAAMU,GAA2BC,IACtC,MAAMC,EAAYD,EAASE,UAAU,GAAGC,MAAM,KAC9C,OACIF,EAAU,IACVA,EAAU,IACZA,EAAU,KAAOjgB,EAEVA,EACGigB,EAAU,GAGfA,EAAU,GAFRjgB,CAEU,EAGRogB,GAAgBC,IAC3B,MAAMC,EAAY,UAClB,OAAID,EACI,GAANvL,OAAUuL,EAAS,OAAAvL,OAAMwL,GAEpBA,CAAS,ECoBLC,GAAqBxN,UAIgB,IAJT,YACvCyN,EAAW,OACXC,EAAM,SACNC,GACU7R,EAMV,aAL6DwQ,GAAIsB,IAAG,IAAA7L,OAE9D4L,EAAQ,kBAAkBD,EAAQ,CACtChB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,IAAI,ECrCT0B,GAAkBA,KAC7B,MAAML,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDK,EAAwB3O,cAC3BpE,GAA6BA,EAAMsC,QAAQyQ,wBAG9C,OAAOC,oBACL,iBACA,IDA+BjO,WAGe,IAHR,YACxCyN,EAAW,SACXE,GACUtS,EAQV,aAP6DiR,GAAI4B,IAAG,IAAAnM,OAE9D4L,EAAQ,kBAAkB,CAC9BjB,QAAS,CACPmB,cAAc,UAAD9L,OAAY0L,OAGbrB,IAAI,ECVhB+B,CAAoB,CAClBV,cACAE,aACC9N,MAAKuO,GAENC,mBAASD,EAAc,CACrBE,mBAAoBhe,GAAaC,UAGvC,CACEge,UAAWC,IACXzV,UAAW0U,KAAiBE,KAAcK,GAE7C,E,yBC/BI,MAAMS,GAAgBC,GAC3BC,KACGC,WAAW,UACXC,OAAOH,EAAMxlB,eACb4lB,OAAO,OAECC,GAAyB3Q,IAAI,CACxC4Q,OAAQC,oBAAU7Q,EAAK8Q,YAAYhmB,eACnCimB,cAAe/Q,EAAK+Q,eAAiB,KAG1BC,GAA8BhR,IACzC,IAAIiR,EAAW,CACbL,OAAQC,oBAAU7Q,EAAK8Q,YAAYhmB,gBAGrC,OADCkV,EAAK+Q,eAAiB,IAAIG,SAAQC,GAAQC,cAAIH,EAAUE,GAAM,KACxDF,CAAQ,ECbJI,GAA0BA,KAGrC,MAAMhC,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDK,EAAwB3O,cAC3BpE,GAA6BA,EAAMsC,QAAQyQ,wBAI9C,OAAOC,oBACL,qBACA,IDgFmCjO,WAAsC,IAA/B,YAAEyN,EAAW,SAAEE,GAAU+B,EAMrE,aALuBpD,GAAI4B,IAAI,IAADnM,OAAK4L,EAAQ,uBAAuB,CAChEjB,QAAS,CACPmB,cAAc,UAAD9L,OAAY0L,OAGbrB,IAAI,ECrFhBuD,CAAwB,CACtBlC,cACAE,cAEJ,CACE5U,UAAW0U,KAAiBE,KAAcK,EAC1C4B,sBAAsB,GAEzB,EC8BUC,GAAqB7P,UAIgB,IAJT,YACvCyN,EAAW,SACXE,EAAQ,OACRD,GACkB5R,EAQlB,aAPqDwQ,GAAIwD,KAAI,IAAA/N,OACvD4L,EAAQ,2BACZD,EACA,CACEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAGxBrB,IAAI,EAGT2D,GAAa/P,UAIQ,IAJD,YAC/ByN,EAAW,SACXE,EAAQ,OACRD,GACYsC,EAIZ,aAHuB1D,GAAIwD,KAAK,IAAD/N,OAAK4L,EAAQ,iBAAiBD,EAAQ,CACnEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,IAAI,EAoCT6D,GAAuB/G,IAClC,GAAQ,OAAJA,QAAI,IAAJA,KAAMgH,SACR,OAAOhH,EAAKgH,SAGd,GAAQ,OAAJhH,QAAI,IAAJA,KAAMiH,eAAgB,CACxB,MAAMC,EAAWlH,EAAKmH,YAAYC,MAChCC,GAAKA,EAAE1mB,KAAOqf,EAAKsH,qBAErB,MAAM,GAANzO,OAAkB,OAARqO,QAAQ,IAARA,OAAQ,EAARA,EAAUhgB,KAAI,eAC1B,CAEA,OAAU,OAAJ8Y,QAAI,IAAJA,KAAMuH,cACJ,mBAAN1O,OAA0BmH,EAAKuH,cAAcrgB,WAD/C,CAEA,EAYWsgB,GACXxH,KAEK,OAAJA,QAAI,IAAJA,OAAI,EAAJA,EAAMmH,cAAe,IAAItO,OACxB4O,sBACM,OAAJzH,QAAI,IAAJA,OAAI,EAAJA,EAAMmH,YAAYjW,KAAKmW,GACjBA,EAAErH,KACGwH,GAAmCH,EAAErH,MAEvC,OAKF0H,GAAWA,CACtBP,EACAjS,IAEAiS,EAAY9Y,MAAK,CAACsZ,EAAIC,IAEhBD,EAAGhnB,KAAOuU,EAAKvU,IAAY,EAC3BinB,EAAGjnB,KAAOuU,EAAKvU,GAAW,EACvBgnB,EAAGzgB,KAAK2gB,cAAcD,EAAG1gB,QC/JvB4gB,GAAe,SAACC,GAA0C,IAAvBC,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GACxD,MAAM6Q,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDwD,EAAuBF,EAAQE,qBAC/BC,EAAmBC,mBACvB,IACEC,kBAAQH,KACPA,EAAqBI,OAAMhB,KAAOA,EAAE7B,QACjC,GACAyC,EAAqB/W,KAAImW,GAAKA,EAAE7B,SACtC,CAACyC,IAEGzD,EAAS2D,mBACb,MACE5D,cACAE,WACAD,OAAQ,CACNxV,MAAOkZ,MAGX,CAAC3D,EAAa2D,EAAkBzD,IAGlC,OAAOM,oBACL,CAAC,QAAS,IAAKP,EAAQ1Q,KAAMiU,EAAQjU,QACrC,IDUwBgD,WAIwB,IAJjB,YACjCyN,EAAW,SACXE,EAAQ,OACRD,GACarS,EAMb,aAL4DiR,GAAIwD,KAAI,IAAA/N,OAE9D4L,EAAQ,sBAAsBD,EAAQ,CAC1ChB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,IAAI,ECpBZoF,CAAa9D,IACnB,CACEa,UAAWC,IACXzV,UACI0U,KAAiBE,KAAcyD,EAAiBvU,QAAUqU,GAGpE,ECxCaO,GAAsB,WAAwB,IAAvBP,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC5C,MAAM6Q,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDK,EAAwB3O,cAC3BpE,GAA6BA,EAAMsC,QAAQyQ,wBAExCxR,EAAkB6C,cACrBpE,GAA6BA,EAAMsC,QAAQf,mBAEtCzB,MAAO2W,EAAWlX,IAAKmX,GAAYnV,EACzC3R,EAAaN,kBAGf,OAAO0jB,oBACL,aACA,IJuE2BjO,WAA8C,IAAvC,YAAEyN,EAAW,SAAEE,EAAQ,OAAED,GAAQsC,EAIrE,aAHuB1D,GAAIwD,KAAK,IAAD/N,OAAK4L,EAAQ,iBAAiBD,EAAQ,CACnEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,IAAI,EI1EhBwF,CAAgB,CACdnE,cACAE,WACAD,OAAQ,CACNgE,YACAC,UACAzZ,MAAO,GACPyV,eAGN,CACEY,UAAWC,IACXzV,UACI0U,KAAiBE,KAAcK,GAAyBkD,GAGlE,ECnCaW,GAA6BA,KACxC,MAAOC,EAAsBC,GAA2BC,qBAKlD5T,EAAOiB,cAAapE,GAA6BA,EAAMmD,OACvD6T,EAAa,OAAJ7T,QAAI,IAAJA,OAAI,EAAJA,EAAMvU,IAGbuiB,KAAM8F,GAAwBT,MAC9BrF,KAAM+F,GAAanB,GACzB,CACEhU,KAAM,YACNmU,sBAAyC,OAAnBe,QAAmB,IAAnBA,OAAmB,EAAnBA,EAAqB7B,cAAe,CAACjS,MAG3D6T,GAYJ,OATAG,qBAAU,KACR,GAAc,OAARD,QAAQ,IAARA,KAAUtV,OAAQ,CACtB,MAAMqM,EACJgJ,IH8GNG,EG7GiDJ,GH+G5C,QAHLja,EG5GuCma,SH+GlC,IAALna,OAAK,EAALA,EAAOsY,MACJC,GACCA,EAAEJ,gBAAkBI,EAAEC,qBAAuB6B,OACvC,OAALra,QAAK,IAALA,OAAK,EAALA,EAAOsY,MAAMC,GAAqBA,EAAEJ,mBGjHrC4B,EAAwB7I,EAC1B,CHyG4CoJ,IAC9Cta,EACAqa,CG3GE,GACC,CAACF,EAAUF,IAEPH,CAAoB,E,6ECgBtB,MAqDMS,GAA0BpY,GACzB,OAAPA,QAAO,IAAPA,KAAS0C,OAGP1C,EAAQmW,MAAKkC,GAAKA,EAAEvX,QAAU7I,MAAwB+H,EAAQ,GAF5D,KAKEsY,GAAwBC,GAC5BlH,OAAOC,KAAKtZ,IACjBqZ,OAAOmH,OAAOxgB,IAAmBygB,WAAU/F,GAAKgG,kBAAQH,EAAO7F,EAAE,GAAIA,EAAE,OAI9DiG,GAAmCA,CAC9CC,EACAC,IAEOD,EACJE,QAAOpH,IAAMqH,iBAAOrH,EAAE,KAAOgH,kBAAQhH,EAAE,GAAImH,EAAM,GAAIA,EAAM,MAC3D5Y,KAAIyR,GAAKA,EAAE,KAGHsH,GAA4BC,IAQlC,IARmC,YACxCC,EAAW,MACXC,EAAK,QACLnc,GAKDic,EACC,MAAMG,EAAsBF,EAAYJ,QAAOO,GAGtCA,EADLrc,IAAY7G,GAAaK,QAAU,YAAc,YACrB2iB,EAAMG,UAItC,GAAIH,EAAMG,UAAYC,KAAK,CACzB,MAAOC,EAAcC,GAAiBC,oBACpCN,GACAC,GAAKA,EAAEM,YAAcJ,OAKvB,OAAOJ,EAAMS,WACX3oB,EAAsBH,EAAcE,cAAcE,YAEhB,6BAAlCioB,EAAMU,UAAU9qB,cACdyqB,EACAC,CACN,CAEA,OAAOL,CAAmB,EAGfU,GAAWC,IAUkB,IAVjB,eACvBC,EAAc,UACdC,EAAS,QACT9Z,EAAO,KACP4O,GAMDgL,EACC,GAAMhL,IAAShG,sBAAYkR,GAAY,CACrC,MAAMC,IAA4B,OAAJnL,QAAI,IAAJA,MAAMoL,eAAmB,OAAJpL,QAAI,IAAJA,KAAMqL,gBACzD,IACGF,GACAA,IAAwBnR,sBAAYiR,GACrC,CACA,MAAMja,GACK,OAATka,QAAS,IAATA,OAAS,EAATA,EAAW9D,MAAMkE,GAAsBA,EAAEla,UAAYA,OAC5C,OAAT8Z,QAAS,IAATA,OAAS,EAATA,EAAW9D,MACRkE,GAAsBA,EAAEla,WAAgB,OAAJ4O,QAAI,IAAJA,OAAI,EAAJA,EAAMqL,qBAE/B,OAAdJ,QAAc,IAAdA,OAAc,EAAdA,EAAiB,IAEnB,GAAU,OAAJjL,QAAI,IAAJA,KAAMoL,YAAgBpa,EAAO,CAEjC,MAAMua,EAAkBva,EAAMC,QAAQ8Y,QACnCT,KAAyBA,EAAExX,SAAWwX,EAAEvX,QAAU7I,KAErD,OAASqiB,EAAgB5X,OACrB,IACK3C,EACHC,QAASsa,GAEX,IACN,CACA,OAAO,IACT,CACF,GAGWC,GAAwBC,IAiB9B,IAjB+B,iBACpCC,EAAgB,aAChBC,EAAY,iBACZC,EAAgB,eAChBP,EAAc,eACdpE,EAAc,iBACd4E,GAWDJ,EACKK,EAAoC,GACpCC,EAAgC,GAChC/a,EAA+B,KAC/Bgb,EAAmC,KACnC7a,EAA4C,KAEhD,GAAIua,EAAkB,CACpB,MAAMO,EAAuBC,eAC3BP,EAAaI,OAAO7a,KAAKoa,GAAsBA,EAAEV,aAOnD,GALAkB,EAAWH,EAAaG,SAAS/B,QAAQoC,GACvCF,EAAqBzJ,SAAS2J,EAAEvB,aAElCmB,EAASJ,EAAaI,OAEhBH,EAAkB,CACtB,MAAMQ,EAAiBN,EAAS1E,MAC7B+E,GAAwBA,EAAEvB,YAAcgB,IAE3C,GAAMQ,EAAgB,CACpBJ,EAAUI,EACV,MAAMC,EAAgBN,EAAOhC,QAC1BuB,GAAsBA,EAAEV,YAAcgB,IAEnCS,EAAc1Y,SAClBoY,EAASM,EAEb,CACF,CAEA,GAAMhB,GAAmBpE,GAAoB4E,EAAmB,CAC9D,MAAMS,EACJrF,GAAoB4E,EAChBA,EACAE,EAAO3E,MAAMkE,GAAsBA,EAAEla,UAAYia,IACvD,GAAMiB,EAAc,CAClBtb,EAAQsb,EACR,MAAMF,EAAiBN,EAAS1E,MAC7B+E,GAAwBA,EAAEvB,YAAc0B,EAAa1B,YAElDwB,IACJJ,EAAUI,GAEZ,MAAMG,EAAgBlD,GAAuBiD,EAAarb,SAC1D,GAAMsb,EAAe,CACnB,MACMC,EADmBzb,GAA4Bub,GACLlF,MAC9CC,GAAKA,EAAE1mB,KAAO4rB,EAAc3d,WAExB4d,IACJrb,EAASqb,EAEb,CACF,CACF,CACF,CACA,MAAO,CAAER,UAAShb,QAAOG,SAAQ2a,WAAUC,SAAQ,EAGxCU,GACXC,GACYA,EAAU7qB,gBAAkBf,EAAeI,QCpPnDyrB,GAAiBC,OAEVC,GAAoBrD,GAC3BsD,kBAAQtD,GACHA,EAAMnb,OAER,CAACmb,GAGGuD,GAA4B5a,IAMlC,IANmC,OACxC6a,EAAM,UACNN,GAIDva,EACC,MAAMC,EACFsa,GAAaD,GAAgBC,GAC3Btd,GACAC,GACN,OAAS2d,GAAUA,IAAWjpB,EAC1B,IACKqO,EACHnE,QAAS7G,GAAaO,MAExByK,CAAI,EAGG6a,GAAeC,IAC1B,OAAW,OAAVA,QAAU,IAAVA,KAAY/F,aPKkBnY,EOJTke,EAAW/F,YPIOnY,EAAMkC,KAAIic,GAAKA,EAAE3H,SOHrD3X,GAA2BC,UAC7BO,OPE6BW,KOFvB,EAEGoe,GAAcpc,IACpB,OAALA,QAAK,IAALA,OAAK,EAALA,EAAOI,UAAW,KAqEPic,GAA4BvG,IAkBlC,IAlBmC,YACxCwG,EAAW,gBACXha,EAAe,OACf0Z,EAAM,aACNO,EAAY,kBACZC,EAAiB,mBACjBC,EAAkB,UAClBf,EAAS,aACTxH,GAUD4B,EAEK4G,EAAcC,KAAK1K,MACrB0K,KAAKC,UACDH,EACE,IACMX,kBAAQW,KAAwBrF,kBAAQqF,GACxCtL,eAAKqL,EAAmBC,GACxBD,KACDD,GAELA,IAGJM,EAAgBd,GAA0B,CAAEC,SAAQN,cAExD,MAAMoB,EAAmBxL,OAAOC,KAAKgL,GAoBrC,GAlBIO,EAAiBtL,SAASpW,GAAaE,eACzCohB,EAAYxf,WAAa,IACpB2f,EAAc3f,cACXsf,EAAkBtf,WAAasf,EAAkBO,WAAa,CAAC,KAClER,EAAarf,aAGhB4f,EAAiBtL,SAASpW,GAAaG,iBACzCmhB,EAAYtf,aAAe,IACtByf,EAAczf,gBACXof,EAAkBpf,aACpBof,EAAkBpf,aAClB,CAAC,KACFmf,EAAanf,eAKhB0f,EAAiBtL,SAASpW,GAAaa,MAAO,CAAC,IAAD+gB,EAGzCC,EAFP,IAAqB,QAAjBD,EAAAT,EAAavN,YAAI,IAAAgO,OAAA,EAAjBA,EAAmBE,WAAsB,OAAXZ,QAAW,IAAXA,OAAW,EAAXA,EAAaY,eACtCR,EAAYQ,YAGnBR,EAAc,IACTA,EACHQ,OAAyB,QAAnBD,EAAEV,EAAavN,YAAI,IAAAiO,OAAA,EAAjBA,EAAmBC,eAIxBR,EAAY1N,IACrB,CAEA,GACE8N,EAAiBtL,SAASpW,GAAaiB,YACrCkgB,EAAab,UACf,CAOA,GANAmB,EAAgBd,GAA0B,CACxCC,SACAN,UAAWa,EAAab,YAItBpK,OAAOmH,OAAO9nB,GAAc6gB,SAAS+K,EAAab,UAAU/rB,IAAK,CACnE,MAAMwtB,EAAiB7a,EAAgBia,EAAab,UAAU/rB,IAG9D+sB,EAAc,IACTA,EACHU,YAAab,EAAab,UAAU/rB,KAMpCynB,kBAAQ+F,IACRZ,EAAab,UAAU7a,SAAwB,OAAdsc,QAAc,IAAdA,OAAc,EAAdA,EAAgBtc,QACjD0b,EAAab,UAAUpb,OAAsB,OAAd6c,QAAc,IAAdA,OAAc,EAAdA,EAAgB7c,QAE/Coc,EAAc,IACTA,EACHjF,QAAS8E,EAAab,UAAUpb,IAChCkX,UAAW+E,EAAab,UAAU7a,eAK/B6b,EAAY9e,gBACZ8e,EAAYtc,OACrB,MAEEsc,EAAc,IACTA,EACH9e,SAAU2e,EAAab,UAAU/rB,GACjCyQ,QAASmc,EAAab,UAAUtb,gBAG3Bsc,EAAYU,mBACZV,EAAYjF,eACZiF,EAAYlF,iBAIdkF,EAAYhB,SACrB,CA0CA,OAxCApK,OAAO+L,QAAQX,GAAatH,SAAQI,IAAmB,IAAjBzmB,EAAKypB,GAAMhD,EAC/C,IAAKxM,sBAAYkL,GAAe,CAC9B,MAAMoJ,EACJT,EAAc9tB,GAIVwuB,EAAejM,OAAOC,KAAK/U,IAAuBgV,SAASziB,KAC1DitB,GAAUA,IAAWjpB,EACpB,KACAmhB,EAAa1X,GAAsBzN,MAEvCuuB,EAEAE,kBAAQD,EAAc/E,WACjBkE,EAAY3tB,EAEvB,CAGIiqB,iBAAOR,WACFkE,EAAY3tB,GAIjBuiB,OAAOC,KAAKmL,GAAalL,SAASziB,KAGhCwN,GAAgBiV,SAASziB,KAC3B2tB,EAAY3tB,GAAO0uB,KAAMb,UAAUpE,IAIjClc,GAAckV,SAASziB,KACzB2tB,EAAY3tB,GAAO+sB,kBAAQtD,GACvBA,EAAMtY,KAAIwd,GAAK/B,GAAegC,SAASD,KACvC/B,GAAegC,SAASnF,IAEhC,IAEKkE,CAAW,EAyEPkB,GAAapB,GACxBA,EAAkBU,QAAU,KAEjBW,GAAc3E,IAAA,IAAC,qBAC1B4E,EAAoB,WACpBC,GAID7E,EAAA,OACG4E,GAA0BC,GACxBD,EAAqB1H,MAClB+F,GAAuCA,EAAExsB,KAAOouB,KAEnD,IAAI,EAEGC,GAAiBxB,GAC1BA,EAAkBuB,WAChBE,SAASzB,EAAkBuB,WAAY,IACvC,KA4FOG,GAAY1B,GACvBX,GAAiBW,EAAkBxe,OAASnB,GAA2BmB,OAY5DmgB,GAAoBC,GACxBC,oBACLC,KAAYrM,MAAMmM,EAAI,CACpBG,YAAa,oBACbC,qBAAsB,IACtBC,eAAe,KAEjB,CAACjG,EAAOzpB,KACDiqB,iBAAOR,IAAUlc,GAAckV,SAASziB,GACpC+sB,kBAAQtD,GACVA,EAAwBtY,KAAIwd,GAAK/B,GAAe+C,OAAOhB,KACxD/B,GAAe+C,OAAOlG,GAExBjc,GAAgBiV,SAASziB,GACpB0uB,KAAMxL,MAAMuG,GAEdA,ICxfAmG,GAAgBA,KAC3B,MAAOC,EAAYC,GAAiB/G,mBAElC,MACI5T,EAAOiB,cAAapE,GAA6BA,EAAMmD,QAGvD,OAAE4a,GAAWC,eACbvC,EAAoBrF,mBAAQ,IAAMgH,GAAiBW,IAAS,CAChEA,EACAX,KAEIJ,EAAaC,GAAcxB,IAGzBtK,KAAM8M,GAA0BzH,KAClC0H,EAA6B9H,mBAAQ,KACzC,GAAM6H,EACJ,OAAOxI,GAAmCwI,EAC5C,GACC,CAACA,IACE9I,EAAWiB,mBACf,IAAgC,OAA1B8H,QAA0B,IAA1BA,OAA0B,EAA1BA,EAA4B7I,MAAKC,GAAKA,EAAE1mB,KAAOouB,KACrD,CAACkB,EAA4BlB,IAW/B,OARA7F,qBAAU,KACHlP,sBAAYgW,IAA2BhW,sBAAY9E,GAGtD2a,EAAc,MAFdA,EAAc3I,GAAYhS,EAG5B,GACC,CAAC8a,EAAuB9I,EAAUhS,IAE9B0a,CAAU,EC3CNM,GAAsBA,KAAO,IAADC,EAEvC,MAAMjb,EAAOiB,cAAapE,GAA6BA,EAAMmD,OACvDkb,EAA0BzH,KAC1BiH,EAAaD,KAIb1H,GACO,OAAV2H,QAAU,IAAVA,GAAoD,QAA1CO,EAAVP,EAAgD5P,YAAI,IAAAmQ,OAA1C,EAAXA,EAAuDhJ,gBAC/B,OAAvBiJ,QAAuB,IAAvBA,OAAuB,EAAvBA,EAAyB9I,sBAAuBpS,EAAKvU,GAC3B,OAAvByvB,QAAuB,IAAvBA,OAAuB,EAAvBA,EAAyBjJ,YACzB,CAACjS,IAEP,OAAO4S,GACL,CACEhU,KAAM,qBACNmU,0BAGAA,EACH,ECJUoI,GAAiBA,KAC5B,MAAO/C,EAAagD,GAAkBxH,mBAA+B,MAC/DsH,EAA0BzH,KAC1BiH,EAAaD,KACbY,EAAyB,OAAVX,QAAU,IAAVA,OAAU,EAAVA,EAAYjvB,GAC3B6vB,GACO,OAAVZ,QAAU,IAAVA,OAAU,EAAVA,EAAgD5P,OACjDoQ,GACMlN,KAAMuN,GAAqBP,MAC3BhN,KAAMgC,GAAiBN,KACzB8L,EAA+B,OAAZxL,QAAY,IAAZA,OAAY,EAAZA,EAAcyL,cAEjCC,EAAiDzI,mBAAQ,KAC7D,GAAsB,OAAhBsI,QAAgB,IAAhBA,KAAkB9c,OACtB,OAAO8c,EAAiBrJ,MACrBC,GAAqBA,EAAE6G,SAAWwC,GAEvC,GACC,CAACD,EAAkBC,IAetB,OAbAxH,qBAAU,KACFqH,GAAkC,OAAhBE,QAAgB,IAAhBA,KAAkB9c,QAAY6c,EAIpDF,EACEM,GAAuBJ,GAAgBJ,GAGzCE,EAAe,KACjB,GACC,CAACC,EAAcK,EAAqBJ,EAAcC,IAE9CnD,CAAW,EClDPuD,GAA2B,WAAwB,IAAvB7I,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GACjD,MAAM6Q,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDK,EAAwB3O,cAC3BpE,GAA6BA,EAAMsC,QAAQyQ,wBAI9C,OAAOC,oBACL,uBACA,ILgDoCjO,WAGc,IAHP,YAC7CyN,EAAW,SACXE,GACU7R,EAMV,aALiEwQ,GAAI4B,IAAG,IAAAnM,OAElE4L,EAAQ,gCAAgC,CAC5CjB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,IAAI,EKxDhB4N,CAAyB,CACvBvM,cACAE,cAEJ,CACE5U,UACI0U,KAAiBE,KAAcK,KAA2BkD,EAC9DtB,sBAAsB,GAG5B,ECfaqK,GAAoB,SAAChJ,GAA0C,IAAvBC,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC7D,MAAM6Q,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAGhDuM,EADU7a,cAAapE,GAA6BA,EAAMsC,UAEtDf,gBAAgB3R,EAAaN,kBACjC2e,EAAO+H,EAAQ/H,KAEfkI,EAAmBC,mBACvB,IACM,OAAJnI,QAAI,IAAJA,KAAMoL,YAAoB,OAAJpL,QAAI,IAAJA,KAAMmH,YAAYxT,OACpCqM,EAAKmH,YAAYjW,KAAImW,GAAKA,EAAE7B,QAC5B,IACN,CAACxF,IAGGwE,EAAS2D,mBACb,MACE5D,cACAE,WACAD,OAAQ,CACNiE,QAASuI,EAAuB1f,IAChC9C,WAAY,GACZga,UAAWwI,EAAuBnf,MAClC4S,WACAzV,MAAOkZ,MAGX,CAAC3D,EAAayM,EAAwB9I,EAAkBzD,IAG1D,OAAOM,oBACL,CAAC,kBAAmB,IAAKP,EAAQ1Q,KAAMiU,EAAQjU,QAC/C,INEiCgD,WAImB,IAJZ,YAC1CyN,EAAW,OACXC,EAAM,SACNC,GACgBtS,EAMhB,aAL6DiR,GAAIwD,KAAI,IAAA/N,OAE/D4L,EAAQ,qCAAqCD,EAAQ,CACzDhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,IAAI,EMZZ+N,CAAsBzM,IAC5B,CACE3U,UACI0U,KACAE,KACAuM,KACA9I,EAAiBvU,QACnBqU,GAGR,ECTakJ,GAA4BA,KAEvC,MAAM,OAAEpB,GAAWpb,OAAOC,SACpB6Y,EAAoBrF,mBAAQ,IAAMgH,GAAiBW,IAAS,CAACA,IAC7DqB,EAAQC,aAAa,IAAAvY,OAGrB9U,EAAsB,KAAA8U,OAAInT,EAAqBE,aAAY,cAG3DyrB,GADe,OAALF,QAAK,IAALA,KAAO3M,OAAO+F,QACZ6G,aAAa,aAGzBpE,EAAkB,OAATqE,QAAS,IAATA,OAAS,EAATA,EAAW7M,OAAOwI,OAE3BE,EC3DqBoE,MAC3B,MAAOpE,EAAYqE,GAAiBzI,mBAA+B,OAG7D,OAAEgH,GAAWC,eACbvC,EAAoBrF,mBAAQ,IAAMgH,GAAiBW,IAAS,CAChEX,GACAW,IAEI0B,EAAoB5C,GAAUpB,GAE9BF,EAAc+C,MACZnN,KAAMuN,GAAqBP,KAC7BuB,EAAkBtJ,mBACtB,IACkB,OAAhBsI,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBrJ,MACfC,GAAqBA,EAAE6G,SAAWsD,KAEvC,CAACf,EAAkBe,IAiBrB,OAdAtI,qBAAU,KAEc,OAAhBuH,QAAgB,IAAhBA,KAAkB9c,QAAY2Z,EAGhCiE,EADIE,GAGUnE,GAGhBiE,EAAc,KAChB,GACC,CAACd,EAAkBnD,EAAamE,IAE5BvE,CAAU,EDwBEoE,IACXpO,KAAMwO,GAA0Bb,MAChC3N,KAAM+H,GAAmB8F,GAC/B,CAAEjd,KAAM,cAAekM,KAAMkN,KACjB,OAAVA,QAAU,IAAVA,MAAY9B,eAAyB,OAAV8B,QAAU,IAAVA,KAAY7B,kBAEnCnI,KAAM4L,GAAyBvI,MAC/BrD,KAAMgC,GAAiBN,KACzBQ,EAAiC,OAAZF,QAAY,IAAZA,OAAY,EAAZA,EAAcE,mBAGnCX,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAGhDnR,EADU6C,cAAapE,GAA6BA,EAAMsC,UAChCf,gBAG1Bqe,EAAQre,EAAgBnS,EAAkBO,OAG1CwpB,EAAiC,OAArBwG,QAAqB,IAArBA,OAAqB,EAArBA,EAAuB3F,OACnC6F,EAAqBpE,EAAkBpc,QACvCygB,EAAc1J,mBAClB,IACE4C,GAAS,CACPE,iBACAC,YACA9Z,QAASwgB,EACT5R,KAAMkN,KAEV,CAACA,EAAYhC,EAAW0G,EAAoB3G,IAExC6G,EAAyD3J,mBAAQ,IAC9DC,kBAAQ8C,GACX,GACAzD,sBACEyD,EAAUha,KAAKoa,GAAsBva,GAA4Bua,OAEtE,CAACJ,IAEJ,OAAO/C,mBAAQ,KACb,GAAM+E,IAAelT,sBAAY6X,GAAc,CAC7C,MAAME,EAA0BvE,EAAkB5e,UAChD4e,EAAkBY,YACd1B,EN8RgB1B,KAgBO,IAhBN,oBAC3B8G,EAAmB,MACnB9gB,EAAK,QACLyX,EAAO,gBACPnV,EAAe,UACfkV,EAAS,KACTxI,EAAI,YACJoO,GASDpD,EACC,MAAMgG,EAAyB1d,EAAgB3R,EAAaN,kBACtD2wB,EAAcF,EAAoB1K,MACrCkC,GAAkCA,EAAE3oB,KAAOytB,IAI9C,GAAM4D,EACJ,OAAOA,EAGJ,GAAM5D,GAAe9L,OAAOmH,OAAO9nB,GAAc6gB,SAAS4L,GAAc,CAC3E,MAAMD,EAAiB7a,EAAgB8a,GAEvC,GAAMD,EACJ,OAAOA,EACF,GAAM3F,GAAeC,EAC1B,MAAO,IACF7mB,EAAuBwsB,GAC1Bvc,MAAO2W,EACPlX,IAAKmX,EAGX,MAGK,GAAMzI,IAAShG,sBAAYhJ,GAI9B,GACEgP,EAAKoL,aAEJpB,iBAAOhZ,GACR,CACA,MAAMub,EAAgBlD,GAAuBrY,EAAMC,SAKnD,GAAMsb,EAAe,CACnB,MACMC,EADmBzb,GAA4BC,GACLoW,MAC9CC,GAAKA,EAAE1mB,KAAO4rB,EAAc3d,WAM9B,GAAM4d,EACJ,OAAOA,CAEX,CACF,MACE,GAAIxC,iBAAOhZ,GACT,OAAOggB,EAOb,OAAO1d,EAAgBnS,EAAkBO,MAAM,EM5WzBuwB,CAAa,CAC7BH,sBACA9gB,MAAO6gB,EACPpJ,QAAS+E,EAAkB/E,QAC3BD,UAAWgF,EAAkBhF,UAC7B4F,YAAa2D,EACbze,kBACA0M,KAAMkN,IAEFkB,EAAc1B,EAAU/rB,GACxB8nB,EAAUiE,EAAUpb,IACpBkX,EAAYkE,EAAU7a,MAEtBjD,EN4LV8d,IACmBD,GAAgBC,GAAaA,EAAU/rB,GAAK,KM7L1CuxB,CAAYxF,GAEvB5e,EAAWmf,GAAYC,GACvBlN,EAAOkN,EACPgB,EAASU,GAAU1B,GACnB6B,EAAaC,GAAcxB,GAC3BtG,EAAW2H,GAAY,CAC3BC,uBACAC,eAGI/d,EAAQ6gB,EACRzgB,EAAUgc,GAAWyE,GAErB5jB,ENrDc2E,KAAA,IAAC,mBACzBwS,EAAkB,kBAClBoI,EAAiB,OACjBR,GAKDpa,EAAA,OAEC4a,EAAkBvf,UACf+e,GAAUA,IAAWjpB,EAAmB,KAAOqhB,IAClD2H,GAA0B,CAAEC,WAAU/e,OAAO,EMyCzBkkB,CAAW,CACzB/M,qBACAoI,oBACAR,WAGIhf,ENhEoBwf,IAC9BX,GACEW,EAAkBxf,cAAgBH,GAA2BG,cM8DtCokB,CAAgB5E,GAE/Bhf,EN1BkBgf,IAC5BX,GACEW,EAAkBhf,YAAcX,GAA2BW,YMwBtC6jB,CAAc7E,GAE3B/e,ENvBoB+e,IAC9BX,GACEW,EAAkB/e,cAAgBZ,GAA2BY,cMqBtC6jB,CAAgB9E,GAE/B9e,ENpBa8e,IACvBX,GAAiBW,EAAkB9e,OAASb,GAA2Ba,OMmBrD6jB,CAAS/E,GAEjB1e,ENnBa0e,IACvBX,GAAiBW,EAAkB1e,OAASjB,GAA2BiB,OMkBrD0jB,CAAShF,GAEjBre,ENlB2Bqe,IACrCX,GACEW,EAAkBre,qBAChBtB,GAA2BsB,qBMeCsjB,CAAuBjF,GAE7Clf,ENnDwBkf,IAClCX,GACEW,EAAkBlf,kBAChBT,GAA2BS,kBMgDFokB,CAAoBlF,GAEvCze,ENgUkB4jB,EAC5BnF,EACAd,IAEAG,GACEW,EAAkBze,aAChBge,GAA0B,CAAEL,cAAa3d,aMtUrB4jB,CAAenF,EAAmBd,GAEhDzd,EN0UqBue,IAC/BX,GACEW,EAAkBve,eAAiBpB,GAA2BoB,eM5UtC2jB,CAAiBpF,GAEjCzf,ENvFgByf,IAC1BX,GACEW,EAAkBzf,UAAYF,GAA2BE,UMqFtC8kB,CAAYrF,GAEvBjf,ENrDuBukB,EACjCtF,EACAd,IAEAG,GACEW,EAAkBjf,kBAChBwe,GAA0B,CAAEL,cAAane,kBM+ChBukB,CACvBtF,EACAd,GAGIxe,ENnEkBsf,IAC5BA,EAAkBtf,YAAcL,GAA2BK,WMkEpC6kB,CAAcvF,GAE3Bpf,ENxEoBof,IAC9BA,EAAkBpf,cAAgBP,GAA2BO,aMuEpC4kB,CAAgBxF,GAE/B7e,ENqIwB6e,IAClCyF,gBAAMzF,EAAkB7e,kBACpBd,GAA2Bc,iBAC3B6e,EAAkB7e,iBMxIOukB,CAAoB1F,GAEvC3e,ENiMaskB,EACvB3F,EACAd,IAEAG,GACEW,EAAkB3e,QAAUke,GAA0B,CAAEL,cAAa7d,QMtMpDskB,CAAU3F,EAAmBd,GAEtCxd,EN8ToBse,IAC9ByF,gBAAMzF,EAAkBte,cACpBrB,GAA2BqB,aAC3Bse,EAAkBte,aMjUGkkB,CAAgB5F,GAErC,MAAO,CACL1f,WACAkD,QACAI,UACArD,WACA0a,UACAxa,UACAG,eACAF,aACAI,mBACAC,mBACAC,aACAR,eACAU,QACAC,mBACAC,WACA4Z,YACA3Z,SACAmR,OACAkO,SACAa,aACA7H,WACApY,QACA2V,WACAiI,YACA0B,cACArf,cACAE,gBACAC,eACAT,eACAU,sBAEJ,CACA,MAAO,IACF4d,GAA0B,CAAEC,WAC/Blf,SAAUmf,GAAYC,GACtBlc,MAAO6gB,GAAe,KACtBzgB,QAASgc,GAAWyE,GACpBpJ,QAASkJ,EAAMrgB,IACfkX,UAAWmJ,EAAM9f,MACjBmO,KAAMkN,EACNgB,OAAQU,GAAUpB,GAClBuB,WAAYC,GAAcxB,GAC1BtG,SAAU2H,GAAY,CACpBC,uBACAC,WAAYC,GAAcxB,KAE5Bxe,MAAOkgB,GAAS1B,GAChB/I,WACAiI,UAAWiF,EACXvD,YAAauD,EAAMhxB,GACpB,GACA,CACDkxB,EACA3E,EACA4E,EACA1M,EACA0J,EACAxb,EACA0Z,EACAQ,EACA/I,EACAkN,GACA,EErPS0B,GAAmBC,wBAC9B,CAAC,GAEUC,GAAoBphB,IAI1B,IAJ2B,SAChChM,GAGDgM,EACC,OACE2G,eAACua,GAAiBG,SAAQ,CAAChK,MAAO0H,KAA4B/qB,SAC3DA,GACyB,ECZnBstB,IDeoBJ,GAAiBK,SCfzB5c,UAAuD,IAAhD,YAAEyN,EAAW,QAAEoP,EAAO,OAAEnP,EAAM,SAAEC,GAAUtS,EACxE,IAAKwhB,IAAYpP,EACf,OAAO,KAET,UACQV,GAAQa,IAAI,IAAD7L,OAAK4L,EAAQ,WAAWD,EAAQ,CAC/ChB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,KAExC,CAAE,MAAOpB,GACPyQ,KAAwBzQ,EAC1B,ICQW0Q,GAAcA,KAMzB,MAAMC,EAAyBC,qBAAWV,KACnCW,EAAgBC,GAAqBnL,mBAAuB,MAC7DvE,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCxQ,EAAU8B,cAAapE,GAA6BA,EAAMsC,UAC1DoQ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDkP,EAAUve,GAAOC,UACjB,SAAE0O,GAAagM,eACf/C,EAAS7E,mBAAQ,IACdrE,GAAwBC,IAC9B,CAACA,IACEmQ,EAAkB/L,mBAAQ,KACvB,CACL5D,cACAoP,UACAlP,WACAD,OAAQ,CAMNnQ,QAAS,IAAKA,EAAS8f,eAAgBL,OAG1C,CAACvP,EAAaoP,EAASlP,EAAUpQ,EAASyf,IAEvCM,EAAa9d,uBAChB+d,IACCJ,EAAkBI,EAAM,GAE1B,CAACJ,IAoCH,OAjCA/K,qBAAU,KACR,WACE,IAAKc,iBAAOgK,GAAiB,CAC3B,MAAMpzB,EAAQokB,cAAIgP,EAAgB,SAC5BM,EAAkB,qBAAqBC,KAAK3zB,GAClD,IACE6yB,GACEe,gBAAMN,EAAiB,CACrB1P,OAAQ,CACNiQ,QAAS,CACP5gB,OAAQmR,cAAIgP,EAAgB,WAAa,QACzCU,SAAU,MACVC,UAAW3P,cAAIgP,EAAgB,sBAG/BY,WAAYN,EAAkB1zB,EAAK,GAAAiY,OAAMmU,EAAM,KAAAnU,OAAIjY,GACnDi0B,WAAY7P,cAAIgP,EAAgB,SAChC7lB,KAAMmmB,EACF,+BACAtH,EACJla,UAAWvB,GAAoB,IAAII,WAK3CsiB,EAAkB,KACpB,CAAE,MAAOtR,GACPsR,EAAkB,KACpB,CACF,CACD,EA7BD,EA6BI,GACH,CAACC,EAAiBlH,EAAQgH,IAEtB,CAAEI,aAAY,ECpFjBU,GAAe1d,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAZH,CAAY,wDAK3BkC,GAAYlC,KAAOkT,EAAChT,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAARH,CAAQ,0HAKbI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAIhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,YAGrCH,IAkDOI,OAnCU/iB,IAMX,IANY,UACxBuG,EAAS,QACTiB,EAAU1O,GAAqB,QAC/BkqB,EAAO,KACPjuB,EAAI,OACJyR,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,wBACtB,WAAEyb,GAAeP,KAevB,OACE9a,gBAACO,GAAS,CACRZ,UAAWA,EACXyc,QAhBJ,SAAqBxS,GACnBA,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAK3R,EAAI,uBACdsiB,MAAM,iCAAD3Q,OAAmC3R,KAGtCiuB,GACFA,EAAQxS,EAEZ,EAMI,cAAa/J,EACbhE,KAAI,UAAAiE,OAAY5N,IAAwB9E,SAAA,CAEvCwT,EAAQ,IAACb,eAACgc,GAAY,CAAClnB,KAAK,gBAAgB+K,OAAQA,MAC3C,EClEhB,MAAMW,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAAVH,CAAU,0EAMtBie,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,eAAVH,CAAU,sBAG3Bke,GAASle,KAAOme,GAAEje,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAATH,CAAS,8CAEPI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAGtDid,GAAOpe,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAARH,CAAQ,6BACNI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAyCzCqd,OA/BsBtjB,IAGT,IAHU,UACpCuG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,+BACtB,WAAEyb,GAAeP,KAYvB,OAVA3K,qBAAU,KACRkL,EAAW,CACTzR,EAAG,CACD7O,KAAM,aAERlT,MAAO,yCACP4oB,MAAM,UACN,GACD,IAGD1Q,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD4S,gBAACsc,GAAc,CAAAlvB,SAAA,CACb2S,eAACwc,GAAM,CAAAnvB,SAAC,WACR4S,gBAACyc,GAAI,CAAArvB,SAAA,CAAC,kGAEuB,OAE7B2S,eAACoc,GAAgB,CAAChuB,KAAK,uBAAuByR,OAAQC,QAE9C,E,oBCxDT,MCAM8c,GAAavhB,IACjB,CACLL,KAAMlU,EAAYwU,YAClBJ,QAAS,CAAEG,WCHFwhB,GAAqBnR,IACzB,CACL1Q,KAAMlU,EAAYoV,qBAClBhB,QAASwQ,IAyCAoR,GAAoB9gB,IACxB,CACLhB,KAAMlU,EAAYqV,mBAClBjB,QAAS,CAAEc,kBC/CF+gB,GAAY3gB,IAChB,CACLpB,KAAMlU,EAAYuV,WAClBnB,QAAS,CAAEkB,UC+BF4gB,GACXC,IAEA,IAAKA,EACH,MAAO,GAET,MAAMC,EAAcC,cAClBF,EACGhM,QACCmM,GACEzlB,oBAAUylB,EAASC,cAAczlB,gBACjChN,EAA0BG,KAE7BqN,KAAIglB,GAAYA,EAASE,SAG9B,MAAO,CACL9zB,EAAwBG,KACxBH,EAAwBK,YACxBL,EAAwBE,MACxB0O,KAAImlB,IACJ,MAAMC,EAA0BP,EAAWl2B,QACzC,CAAC02B,EAAsC/lB,KACrC,MAAMgmB,EAAc/lB,oBAAUD,EAAQ2lB,cAAczlB,cAC9C+lB,EAAOjmB,EAAQkmB,kBAAkBtP,MACrCkE,GAAKA,EAAEzc,SAAWwnB,IAMpB,OAJAE,EAAYC,GAAerR,mBAASsR,GAAQ,CAAC,EAAG,CAC9CL,MAAO,EACPO,MAAO,IAEFJ,CAAW,GAEpB,CAAC,GAEGK,EAAYtU,OAAO+L,QAAQiI,GAC9BvM,QAAO5X,IAAA,IAAE0kB,GAAE1kB,EAAA,OAAK0kB,IAAMnzB,EAA0BG,EAAE,IAClDqN,KAAI0B,IAAA,IAAE,CAAE8b,GAAE9b,EAAA,OAAK8b,CAAC,IACnB,MAAO,CACLoI,aACET,IAAgB/zB,EAAwBG,KACpC,QACA4zB,IAAgB/zB,EAAwBE,KACxC,OACA,cACNqM,OAAQwnB,EACRC,0BACAS,WAAaC,gBAAMJ,EAAW,SAAWZ,EAAe,IACzD,GACD,EAGSiB,GAAmBnQ,IAQQ,IARP,UAC/BoQ,EAAS,eACTC,EAAc,MACdC,GAKDtQ,EACC,OAAOW,sBACLyP,EAAUhmB,KAAImmB,GACL,CACL,IACKA,EACHD,QACAD,mBAEFte,OACAuP,kBAAQiP,EAASC,gBACb,GACAL,GAAiB,CACfC,UAAWG,EAASC,eACpBH,eAAgBnN,iBAAOmN,GACnBE,EAAS12B,GACTw2B,EACJC,MAAOA,EAAQ,OAI1B,EA+BUG,GAAyCA,CACpDvT,EACAuG,KACI,IAADiN,EAEH,MAAMC,EAAyB9J,KAAK1K,MAAM0K,KAAKC,UAAU5J,IACnD0T,EArBuClR,KAAA,IAAC,QAC9CvY,EAAO,QACPsc,GAID/D,EAAA,OACCvY,IAAY7G,GAAaC,MACnBkjB,EACAjI,OAAOmH,OAAO1nB,GAAeygB,SAAS+H,GACpCoN,KACApN,EAEJ,IAAI,EAQOqN,CAAgC,CAC7C3pB,QAASwpB,EAAuBxpB,QAChCsc,YAEIsN,EACJJ,EAAuBxpB,UAAY7G,GAAaQ,MAAU2iB,GACxC,QAAdiN,EAAAxT,EAAUhE,YAAI,IAAAwX,OAAA,EAAdA,EAAgBrQ,YACb4C,QAAO+N,GAAKA,EAAEn3B,KAAOo3B,OAAOxN,KAC5BrZ,KAAI4mB,GAAKA,EAAEtS,UAAU,GACG,OAA3BxB,EAAU9U,cAAoD,SAA3B8U,EAAU9U,aAC7C,GACA,CAAC8U,EAAU9U,cAwBT,IAAD8oB,EAAAC,EAAAC,EArEyCnqB,GA+C5Cic,iBAAOyN,EAAuB7oB,kBACzB6oB,EAAuB7oB,gBACvB6oB,EAAuBnpB,wBACvBmpB,EAAuB1oB,cAE9B0oB,EAAuBnpB,iBAAmB6pB,GACxC,CACElqB,QAASwpB,EAAuBxpB,QAChCK,iBAAkBmpB,EAAuBnpB,iBACzCU,MAAO6oB,IAGXJ,EAAuB1oB,YAAcqpB,GAAqC,CACxE7N,UACAxb,YAAa0oB,EAAuB1oB,eAGlC2oB,IACJD,EAAuBC,OAASA,GAE9B1d,sBAAYuQ,IACdkN,EAAuBtpB,KAAOspB,EAAuBvpB,WAAWC,MAEhEspB,EAAuBtpB,MACc,QAAnC6pB,EAAAP,EAAuBrpB,oBAAY,IAAA4pB,OAAA,EAAnCA,EAAqC7pB,OACrCN,GAA2BO,aAAaD,KAC1CspB,EAAuBppB,MACc,QAAnC4pB,EAAAR,EAAuBrpB,oBAAY,IAAA6pB,GAAM,QAANC,EAAnCD,EAAqC5pB,YAAI,IAAA6pB,OAAN,EAAnCA,EAA2ChnB,KACxCmnB,IACQ,CACLA,OACgB,SAAdA,EAAO13B,IACP82B,EAAuBC,SAAW31B,EAAcE,aAC5C,YACAo2B,EAAO13B,GACb23B,MAAOD,EAAOE,KAAO,OAAS,YAG/B1qB,GAA2BO,aAAaC,MAiCjD,OA9BAopB,EAAuB1pB,UAxFyBA,EAyF9C0pB,EAAuB1pB,UAvFZyU,SAAS/b,EAAwBC,OACrC,IACFqH,EAASgc,QAAOyO,GAAKA,IAAM/xB,EAAwBC,WACnD4b,OAAOmH,OAAOhjB,GAAyBsjB,QAAOyO,GAC/CA,EAAEC,WAAW,cAIZ1qB,EAiFP0pB,EAAuBjpB,WAAakqB,GAAoC,CACtEnO,UACAtc,QAASwpB,EAAuBxpB,QAChCO,WAAYipB,EAAuBjpB,aAErCipB,EAAuBzoB,MAAQ6oB,EAC/BJ,EAAuBxoB,cAAgB0pB,GACrC,CACEpO,UACAtb,cAAewoB,EAAuBxoB,uBAInCwoB,EAAuBzmB,aACvBymB,EAAuBzpB,oBACvBypB,EAAuBrmB,eACvBqmB,EAAuBrpB,oBACvBqpB,EAAuBvpB,kBACvBupB,EAAuB/oB,aACvB+oB,EAAuBzX,YACvByX,EAAuB3oB,aACvB2oB,EAAuBvQ,gBACvBuQ,EAAuB1I,kBACvB0I,EAAuB/K,iBACvB+K,EAAuBrJ,mBACvBqJ,EAAuBtoB,oBAEvBsoB,CAAsB,EAGlBU,GAA4CjO,IAAA,IAAC,QACxDjc,EAAO,iBACPK,EAAgB,MAChBU,GAKDkb,EAAA,OACCjc,IAAY7G,GAAaQ,KACrBiG,GAA2BS,iBAC3B8Z,kBAAQpZ,IAAUoZ,kBAAQ9Z,GAC1B,GACAA,CAAgB,EAEToqB,GAAsC1N,IAAA,IAAC,QAClDT,EAAO,QACPtc,EAAO,WACPO,GAKDwc,EAAA,OACGT,EACEtc,IAAY7G,GAAaC,KACvBkjB,IAAYxoB,EAAcE,aACxB,CAAC01B,MACDnpB,EACFP,IAAY7G,GAAaK,QACzB,CAAC8iB,GACD/b,EACFA,CAAU,EAEH4pB,GAAuC3M,IAAA,IAAC,QACnDlB,EAAO,YACPxb,GAID0c,EAAA,OACClB,IAAYxoB,EAAcE,aACtB,CAAC9B,EAAwBE,wBACzB0O,CAAW,EAEJ4pB,GAAyCC,IAAA,IAAC,QACrDrO,EAAO,cACPtb,GAID2pB,EAAA,OACCrO,IAAYxoB,EAAcE,aACtB4L,GAA2BoB,cAC3BA,CAAa,EAEnB,SAAS4pB,GACPxB,EACAyB,GAEA,MAA0B,iBAAtBzB,EAASA,SACJ,CAAC,IAAKA,EAAUC,eAAgBwB,IACpCzB,EAASC,eAAe3jB,OAEtBolB,kBACL1B,EAASC,eAAepmB,KAAIsnB,GAC1BK,GAAqBL,EAAG,IAAIM,EAAS,IAAKzB,EAAUC,eAAgB,SAJ5B,EAO9C,CAEO,MAAM0B,GACX9B,IAEA,IAAKA,EAAUvjB,OAAQ,MAAO,GAC9B,MAAMslB,EAAgDF,kBACpD7B,EAAUhmB,KAAIgoB,GAAML,GAAqBK,EAAI,OAC7Cr5B,QAAuC,CAACo5B,EAAexX,KAAQ,IAAD0X,EAU9D,OATAF,EAAc3S,IAAI7E,EAAG9gB,GAAI,IACpB8gB,EACH6V,eAAgBpL,eAIdzK,EAAG6V,eAAeze,QAA+B,QAAxBsgB,EAAAF,EAAcjU,IAAIvD,EAAG9gB,WAAG,IAAAw4B,OAAA,EAAxBA,EAA0B7B,iBAAkB,OAGlE2B,CAAa,GACnB,IAAIG,KACP,OAAOC,MAAMC,KAAKL,EAAcxP,SAAS,EAY9B8P,GAA8B,eACzCrW,EAA2BxP,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GAAE,OAEhCwY,eACE6M,kBACM,OAAJ7V,QAAI,IAAJA,OAAI,EAAJA,EACI6G,QACCyP,GACCA,EAAK3O,WACL3oB,EAAsBH,EAAcE,cAAcE,aAErD+O,KAAIsoB,GAAQA,EAAKC,UACpBvoB,KAAIwoB,GAASA,EAAM53B,eACrBuM,MAAO,ECjUEsrB,GAAeA,KAE1B,MAAMtlB,EAAU8B,cAAapE,GAA6BA,EAAMsC,UAC1DF,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxDylB,IAA2B,OAALzlB,QAAK,IAALA,MAC1BlO,EAAaP,EAAqBC,aAAaS,OAI3CyzB,EAAUC,eACVxM,EAAc+C,MACZnN,KAAMgC,GAAiBN,KACzBmV,EAAoB3I,aAAa,IAAAvY,OAIhC9U,EAAsB,iCACvBwmB,EAA2B,OAAjBwP,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBvV,OAAO+F,QACpCyP,EAAc5I,aAAa,YAG3B6I,EAA2B,OAAXD,QAAW,IAAXA,OAAW,EAAXA,EAAaxV,OAAOwI,OACpCkN,EAA8B/R,mBAClC,IAIoB,OAAjB4R,QAAiB,IAAjBA,KAAmBvV,OAAO2V,gBAIN,OAAjBJ,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBvV,OAAO2V,gBAH1BP,EACEl0B,EAAqBC,YACrBD,EAAqBE,cAE7B,CAACg0B,EAAmBG,IAEhBK,EAAoBhJ,aAAa,IAAAvY,OAGhC9U,EAAsB,wCACvBs2B,EAA8BlS,mBAClC,KACmB,OAAjBiS,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmB5V,OAAO2V,kBAC1Bn2B,EAAqBC,eACvB,CAACm2B,IAEGE,EAA6BnS,mBAAQ,KACzC,MAAMoS,EAAiBC,iBAAO,IACzBn2B,KACAM,IAEL,OAA0B,OAAjBy1B,QAAiB,IAAjBA,KAAmB5V,OAAOiW,gBAC/BF,EAAeH,EAAkB5V,OAAOiW,gBACxCF,EAAeH,EAAkB5V,OAAOiW,gBACxCJ,IAAgCr2B,EAAqBG,iBACrD,uBACA,qBAAqB,GACxB,CAACi2B,EAAmBC,IAGjBvG,EAAyBC,qBAAWV,IACpCoE,EAAyBtP,mBAC7B,IACEoP,GAAuCzD,EAAwBvJ,IACjE,CAACA,EAASuJ,IAENpH,EAAYvE,mBAAQ,IAAM2L,EAAuBpH,WAAW,CAChEoH,IAEIxgB,EAAkB6U,mBAAQ,IAAM9T,EAAQf,iBAAiB,CAACe,IAE1DqmB,EAAmBpkB,uBACvB,SAAC0W,GAAsE,IAAtDjF,EAAmCrU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACtD,MAAM,QACJ6W,EAAO,gBACP4P,EAAe,eACfM,EAAc,mBACdhN,GAAqB,EAAI,kBACzBkN,EAAoB,CAAC,GACnB5S,EACE7hB,EAAOqkB,EACT,CAGEyC,SACAmN,gBAAiBz0B,EAAqBE,aACtC2kB,WAEF4P,EACAM,EACE,CACEzN,SACAmN,kBACAM,eACEp2B,EAA8Bo2B,IAC9B91B,EAAiC81B,IACjCA,GAEJ,CACEzN,SACAmN,mBAEJ,CACEnN,UAGAQ,EAAoB2B,GAAiBza,OAAOC,SAASmb,QACrDpC,EAAcL,GAA0B,CAC5CL,SACAQ,oBACAD,aAAcoN,EACdlN,qBACAH,cACAha,kBACAoZ,YACAxH,iBAGF,MAAM,GAANrM,OAAU+hB,aACR5N,IAAWjpB,EACP,IACAipB,IAAWjpB,EACX,uCACAipB,IAAWjpB,GAEXipB,IAAWjpB,GAEXipB,IAAWjpB,EAHX,8CAKA,WACJmC,IACD2S,OACCuP,kBAAQsF,GACJ,GAAE,IAAA7U,OACEyW,KAAY1B,UAAUF,EAAa,CACrC6B,YAAa,oBACbC,qBAAsB,OAGhC,GACA,CAAClC,EAAaha,EAAiBoZ,EAAWxH,IAGtC2V,EAAsBvkB,uBAC1B,WAAyC,OACvCokB,EAAiB32B,EADiB2P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACW,GACnD,CAACgnB,IAGGI,EAAsBxkB,uBAC1B,WAAyC,OACvCokB,EAAiB32B,EADiB2P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACG,GAC3C,CAACgnB,IAGGK,EAAezkB,uBACnB,WAAyC,OACvCokB,EAAiB32B,EADiB2P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACE,GAC1C,CAACgnB,IAGGM,EAAkB1kB,uBACtB,WAAyC,OACvCokB,EAAiB32B,EADiB2P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACM,GAC9C,CAACgnB,IAGGO,EAAsB3kB,uBAC1B,WAAyC,OACvCokB,EAAiB32B,EADiB2P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACW,GACnD,CAACgnB,IAGGQ,EAAkB5kB,uBACtB,WAAyC,OACvCokB,EAAiB32B,EADiB2P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACK,GAC7C,CAACgnB,IAGGS,EAAkB7kB,uBACtB,WAAyC,OACvCokB,EAAiB32B,EADiB2P,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACK,GAC7C,CAACgnB,IAGGU,EAAkB9kB,uBACtB,SACEiX,GAEI,IADJE,IAA2C/Z,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAE3C,MAAM8Z,EAAoB2B,GAAiBza,OAAOC,SAASmb,QACrDpC,EAAcL,GAA0B,CAC5CL,OAAQiN,EACRzM,oBACAD,eACAE,qBACAH,cACAha,kBACAoZ,YACAxH,iBAEF2U,EAAQwB,KAAK,GAADxiB,OACPnE,OAAOC,SAASoP,SAAQ,KAAAlL,OAAIyW,KAAY1B,UAAUF,EAAa,CAChE6B,YAAa,oBACbC,qBAAsB,OAG5B,GACA,CACEyK,EACA3M,EACAuM,EACAvmB,EACAoZ,EACAxH,IAIEoW,EAAqBnT,mBACzB,MACEsS,eAAgBH,EAChBH,gBAAiBE,EACjBnrB,aAAc4kB,EAAuB5kB,cAAgB,UAEvD,CACEorB,EACAD,EACAvG,IAIEyH,EAAqBpT,mBACzB,MACEgS,gBAAiBD,EACjBhrB,aAAc4kB,EAAuB5kB,cAAgB,UAEvD,CAACgrB,EAA6BpG,IAGhC,MAAO,CACLqH,kBACAT,mBACAQ,kBACAJ,sBACAC,eACAE,sBACAD,kBACAH,sBACAS,qBACAF,kBACApX,UAAW8P,EACXyH,qBACA9D,yBACD,EC1RY3gB,eAAe0kB,GAAarpB,GAAoC,IAAnC,YAAEoS,EAAW,SAAEE,GAAiBtS,EAC1E,a1B0ByB2E,iBAA2C,IAApC,YAAEyN,EAAW,SAAEE,GAAU/Q,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAM7D,aALuB0P,GAAI4B,IAAI,IAADnM,OAAK4L,EAAQ,SAAS,CAClDjB,QAAS,CACPmB,cAAc,UAAD9L,OAAY0L,OAGbrB,IAClB,C0BjCeuY,CAAY,CACvBlX,cACAE,YAEJ,CCLe3N,eAAe0kB,GAAarpB,GAAoC,IAAnC,YAAEoS,EAAW,SAAEE,GAAiBtS,EAC1E,a3BwC6B2E,iBAA2C,IAApC,YAAEyN,EAAW,SAAEE,GAAU/Q,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAMjE,aALuB0P,GAAI4B,IAAI,IAADnM,OAAK4L,EAAQ,SAAS,CAClDjB,QAAS,CACPmB,cAAc,UAAD9L,OAAY0L,OAGbrB,IAClB,C2B/CewY,CAAgB,CAC3BnX,cACAE,YAEJ,CC0BO,MAAMkX,GAAiBA,KAC5B,MAAOC,EAAwBC,GAA6B/S,sBAGrDrS,EAAiBqlB,GAAsBhT,sBACxC,eACJjS,EAAc,iBACdI,EAAgB,mBAChBZ,EAAkB,QAClBW,GACEnB,KAEJqT,qBAAU,KACJlP,sBAAYvD,IACdJ,IAAqBM,MAAMC,GACzBklB,EAAmBllB,IAEvB,GACC,CAACH,EAAiBJ,IACrB6S,qBAAU,KACJlP,sBAAY4hB,IACd5kB,IAAUL,MAAMC,GACdilB,EAA0BjlB,EAAS4O,QAEvC,GACC,CAACxO,EAAS4kB,IACb,MAAMG,GAAwB/hB,sBAAYvD,IAAoBA,GAEvDulB,EAAiBC,GAAuBnT,oBAAS,GAClDoT,EAAWC,gBAIX,KAAEC,EAAI,GAAEC,EAAE,iBAAEC,GAAqB5nB,OAEjC6P,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErC1Q,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxDooB,GAAYtJ,gBAAM9e,GAClBE,EAAU8B,cAAapE,GAA6BA,EAAMsC,UAC1DoQ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDK,EAAwB3O,cAC3BpE,KAA+BA,EAAMsC,QAAQyQ,wBAG1C0X,EAAuBC,kBAAO,GAC9BC,EAAuBD,kBAAO,GAC9BE,EAA4BF,kBAAO,GACnCG,EAAoBH,kBAAO,GAC3BI,EAAgBJ,kBAAO,GACvBK,EAAuBL,kBAAO,GAC9BM,EAAsBN,kBAAO,GAC7BO,EAAqBP,kBAAO,GAE5BvnB,EAAOiB,cAAapE,GAA6BA,EAAMmD,OACvD+nB,EAAYjY,cAAI9P,EAAM,SACtBgoB,EAAgBlY,cAAI9P,EAAM,aAC1B6T,EAAS/D,cAAI9P,EAAM,MACnBioB,EAAanY,cAAI9P,EAAM,UACvBkoB,EAAmBpY,cAAI9P,EAAM,kBAE7B,UAAE8O,GAAc2V,KAChBjN,EAAY1I,EAAU0I,UACtB1M,EAAOgE,EAAUhE,MAEfqd,UAAWC,GAA0B1Y,KACvCgL,EAAaD,KACbY,EAAyB,OAAVX,QAAU,IAAVA,OAAU,EAAVA,EAAYjvB,GAE3B48B,EAA2BpV,mBAAQ,MAGnC5D,GAEFgY,KAEEvc,GAEF0M,EAAU/rB,KAAOQ,EAAkBO,SAEjC+iB,KAEA8L,IAED+M,GAEDxY,GAED,CACDP,EACAgY,EACAe,EACA7Y,EACAiI,EACA6D,EACAvQ,EACA8E,IAwSF,OArSAoE,qBAAU,KACR,WACE,GAAI6S,IAAyBxX,EAC3B,IACE,MAAMiZ,QAAc3mB,IACd2mB,GACJtB,GR5IwBrX,EQ4IM2Y,ER3IjC,CACL1pB,KAAMlU,EAAYmU,wBAClBC,QAAS,CAAE6Q,qBQ2IP,CAAE,MAAOlC,GACPC,aAAiBD,EACnB,CRhJ4BkC,KQkJ/B,EAXD,EAWI,GACH,CAACkX,EAAsBxX,EAAa1N,EAAgBqlB,IAEvDhT,qBAAU,KACR,WACE,IACGwT,EAAqBlsB,UACrBysB,GACD1Y,GACAE,GACEmX,EACF,CACA,MAAM6B,EAAoB,CACxBC,eAAgBnsB,GAAoB,IAAII,MACxCkD,SAAU+mB,EACV9W,uBAAuB,EACvB6Y,KAAMC,gBAER,IACElB,EAAqBlsB,SAAU,EAC/B,MAAMqtB,QAAyBrC,GAAc,CAC3CjX,cACAE,aAEF,GAAMoZ,EAAkB,CACtB,MAAMC,ECjLF5oB,KAKf,IACIA,EACH8Q,YAAa9Q,EAAK8Q,YAAYhmB,gBD0KG+9B,CAAcF,GACrC3B,EAASrG,GAAUiI,IAEnB5B,EACEvG,GAAmB,IACd8H,EACHO,mBAAoBH,EAAiB7X,YACrCnR,SAAUgpB,EAAiBrY,MAC3BV,uBAAuB,IAG7B,CACF,CAAE,MAAOnC,GACP+Z,EAAqBlsB,SAAU,EAC/B0rB,EAASvG,GAAmB8H,IAC5B7a,aAAiBD,EACnB,CACF,CACD,EAvCD,EAuCI,GACH,CACD+Z,EACAnY,EACA2X,EACAzX,EACAwY,EACArB,IAGF1S,qBAAU,KACR,WACE,IACGyT,EAA0BnsB,SAC3BurB,IACCmB,EAED,IACEP,EAA0BnsB,SAAU,EACpC,MAAMytB,QAAkBhnB,IAClBgnB,GACJ/B,EACErG,GAAU,CACRoI,cAIR,CAAE,MAAOtb,GACPga,EAA0BnsB,SAAU,EACpCoS,aAAiBD,EACnB,CAEH,EArBD,EAqBI,GACH,CAACoZ,EAAsB9kB,EAAkBilB,EAAUgB,IAEtDhU,qBAAU,KACR,WACE,IACE,IACGsT,EAAqBhsB,UACrBuY,GACDxE,GACAE,GACEK,EACF,CACA0X,EAAqBhsB,SAAU,EAC/B,MAAM0tB,QAA6BC,GAAkB,CACnD5Z,cACAE,aAEE2D,kBAA4B,OAApB8V,QAAoB,IAApBA,OAAoB,EAApBA,EAAsBjY,gBAChCgW,GAAoB,GAEtBC,EAASrG,GAAUqI,IAEnBhC,EACEvG,GAAmB,CACjB1P,eAAmC,OAApBiY,QAAoB,IAApBA,OAAoB,EAApBA,EAAsBjY,gBAAiB,KAG5D,CACF,CAAE,MAAOtD,GACP6Z,EAAqBhsB,SAAU,EAC/BoS,aAAiBD,EACnB,CACD,EA7BD,EA6BI,GACH,CACD6Z,EACAjY,EACA2X,EACAzX,EACAsE,EACAjE,IAGFoE,qBAAU,KACR,WACE,IACG0T,EAAkBpsB,UAClB+rB,GACCU,GACAE,GACgB,OAAhBC,QAAgB,IAAhBA,KAAkBzpB,OAEpB,IACEipB,EAAkBpsB,SAAU,EAE5B,MAAM4tB,EAAWC,KACfjpB,GAAOI,wBACP,CACEzV,IAAKwlB,GAAcrQ,EAAKsQ,OACxB8Y,OAAQzY,GAAuB3Q,IAEjC,CACEqpB,sBAAsB,EACtBC,YAAY,EACZC,KAAMtB,EACNuB,WAAW,IAKfN,EAASO,GAAG,SAAS7nB,UACnB,IAEE,MAAM8nB,EAAeR,EAASS,WAC9B3C,EAASxG,GAAWkJ,IAEpB1C,EACEvG,GAAmB,CACjBxhB,MAAOyqB,IAGb,CAAE,MAAOjc,GACPia,EAAkBpsB,SAAU,EAC5BoS,aAAiBD,GAIjBuZ,EAASxG,GAAW,CAAC,IAErBwG,EACEvG,GAAmB,CACjBxhB,MAAO,CAAC,IAGd,IAEJ,CAAE,MAAOwO,GACPia,EAAkBpsB,SAAU,EAC5BoS,aAAiBD,GAIjBuZ,EAASxG,GAAW,CAAC,IAErBwG,EACEvG,GAAmB,CACjBxhB,MAAO,CAAC,IAGd,CAEH,EAnED,EAmEI,GACH,CACDyoB,EACAV,EACAK,EACAU,EACAE,EACAC,EACAloB,IAGFgU,qBAAU,KACR,WACE,GACE3E,GACAE,IACCoY,EAAcrsB,SACfsuB,cAAIzqB,EAAS,SACbyqB,cAAIzqB,EAAS,kBACbyqB,cAAIzqB,EAAS,aACbyqB,cAAIzqB,EAAS,SAEb,IACEwoB,EAAcrsB,SAAU,QAClBijB,GAAU,CACdlP,cACAoP,QAASve,GAAOC,SAChBoP,WACAD,OAAQ,CACNnQ,YAGN,CAAE,MAAOsO,GACPka,EAAcrsB,SAAU,EACxBoS,aAAiBD,EACnB,CAEH,EAzBD,EAyBI,GACH,CAAC4B,EAAasY,EAAexoB,EAASoQ,IAGzCyE,qBAAU,KACR,WACE,GAAW,OAAL/U,QAAK,IAALA,KAAgB,QAAOiB,GAAOK,UAAW,CAC7C,IAAKqnB,EAAqBtsB,QACxB,IACE8rB,EAAiBlnB,GAAOK,WACxBqnB,EAAqBtsB,SAAU,CACjC,CAAE,MAAOmS,GACPC,aAAiBD,EACnB,CAGF,IAAKoa,EAAoBvsB,SAAa6rB,GAAQY,EAC5C,IAEEZ,EAAG,WAAY9W,GAAc0X,IAAc,KAAM,CAC/CzX,MAAOyX,IAETF,EAAoBvsB,SAAU,CAChC,CAAE,MAAOmS,GACPC,aAAiBD,EACnB,CAEJ,CACD,EAvBD,EAuBI,GACH,CAACxO,EAAOkoB,EAAIY,EAAWH,EAAsBR,IAGhDpT,qBAAU,KACR,WACE,GAAW,OAAL/U,QAAK,IAALA,KAAc,MAAOiB,GAAOM,UAE7BsnB,EAAmBxsB,SAClB4rB,GACAa,GACgB,OAAhBG,QAAgB,IAAhBA,KAAkBzpB,OACpB,CACA,MAAMorB,EAAa,IACd7Y,GAA4BhR,GAC/BsQ,MAAOyX,GAET,IACEb,EAAK4C,KAAK5pB,GAAOM,SACjB0mB,EAAK6C,SAAS1Z,GAAc0X,IAC5Bb,EAAK8C,kBAAkBH,GACvB/B,EAAmBxsB,SAAU,CAC/B,CAAE,MAAOmS,GACPC,aAAiBD,EACnB,CACF,CAEH,EAtBD,EAsBI,GACH,CAACxO,EAAOioB,EAAMlnB,EAAM+nB,EAAWG,EAAkBJ,IAE7C,CAACO,EAA0BvB,EAAgB,EErYrCmD,OAxBShtB,IAA0B,IAAzB,SAAEhM,GAAiBgM,EAC1C,MAAOitB,EAAWpD,GAAmBL,KAC/B7W,EAAwB3O,cAC3BpE,IAAwB,IAAAstB,EAAA,OAAkB,QAAlBA,EAAKttB,EAAMsC,eAAO,IAAAgrB,OAAA,EAAbA,EAAeva,qBAAqB,IAIpE,OAAIsa,GAAapD,EACRljB,eAACwmB,KAAQ,CAACC,GAAG,kBAGjBvlB,sBAAY8K,IAA2BA,EAK1ChM,eAACY,GAAa,CACZG,iBAAkBulB,EAClBzlB,QAASxT,EACTwS,OAAO,sBAPFG,eAAC2c,GAA4B,GAQlC,ECES+J,OA9BartB,IAAyC,IAAxC,SAAEhM,EAAQ,cAAEs5B,GAAsBttB,EAC7D,MAAM,mBAAEkE,GAAuBR,MACxBY,EAAiBqlB,GAAsBhT,qBAa9C,OATAzS,IAAqBM,MAAMC,GACzBklB,EAAmBllB,KASnBkC,eAACY,GAAa,CACZG,gBAAiB4lB,GAAiBzlB,sBAAYvD,GAC9CmD,eACG6lB,IAAkBzlB,sBAAYvD,KAAqBA,EAEtDqD,cAAe3T,EACfwT,QACElD,EAAkBqC,eAACqmB,GAAe,CAAAh5B,SAAEA,IAA8B,KAEpEwS,OAAO,oBACP,ECZS+mB,OAfKvtB,IAAA,IAAC,UAAEwtB,KAAcC,GAAaztB,EAAA,OAChD2G,eAAC+mB,KAAK,CACJF,UAAWG,aAA2BH,EAAW,CAC/CI,cAAeA,IACbjnB,eAACY,GAAa,CACZG,iBAAiB,EACjBF,QAAS,KACThB,OAAO,sBAITinB,GACJ,EChBJ,MAAMzoB,GAAkBC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAAVH,CAAU,oDAK5B6C,GAAa7C,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAZH,CAAY,iEAMzB4oB,GAAgB5oB,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAVH,CAAU,aA+BjB6oB,I,eAAAA,GAlBS9tB,IAMV,IANW,UACvBuG,EAAS,QACTiB,EAAO,KACP/L,EAAI,UACJsyB,EAAS,OACTvnB,EAAS,UACHxG,EACN,OACE4G,gBAAC5B,GAAe,CACduB,UAAWA,EACX,iBAAAG,OAAgBF,EAAM,sBAAqBxS,SAAA,CAE3C2S,eAACmB,GAAU,CAACE,MAAO+lB,EAAWtyB,KAAMA,EAAM+K,OAAQA,IAClDG,eAACknB,GAAa,CAAA75B,SAAEwT,MACA,E,gDCvCf,MAAMwmB,GAAiB/oB,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAbH,CAAa,wHAK1BI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAIhDsQ,IACA,GAAIA,EAAM6oB,SACR,OAAOC,aAAGC,QAAAC,aAAA,yCAGZ,IAKSC,GAAerpB,aAAO+oB,IAAe7oB,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,gBAAtBH,CAAsB,oGACvCI,GAASA,EAAMC,MAAM2C,OAAOgmB,OAAO5oB,EAAM4oB,QAAQM,QAAQC,KAErDnpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAIpDZ,IACA,GAAIA,EAAM6oB,SACR,OAAOC,aAAGM,QAAAJ,aAAA,qCACChpB,GAASA,EAAMC,MAAM2C,OAAOimB,UAEzC,IAIEQ,GAA0BP,aAAGQ,QAAAN,aAAA,4GACbhpB,GAClBA,EAAMC,MAAM2C,OAAOgmB,OAAO5oB,EAAM4oB,QAAQW,MAAMJ,KAChCnpB,GACdA,EAAMC,MAAM2C,OAAOgmB,OAAO5oB,EAAM4oB,QAAQW,MAAMC,SACvCxpB,GAASA,EAAMC,MAAM2C,OAAOgmB,OAAO5oB,EAAM4oB,QAAQW,MAAME,KAGrDzpB,GAASA,EAAMC,MAAM2C,OAAOgmB,OAAO5oB,EAAM4oB,QAAQW,MAAME,KAIvDC,GAAuB9pB,aAAOqpB,IAAanpB,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAApBH,CAAoB,sGACtCI,GACdA,EAAMC,MAAM2C,OAAOgmB,OAAO5oB,EAAM4oB,QAAQM,QAAQM,SAElCxpB,GAASA,EAAMC,MAAM0pB,QAAQC,OAAO/oB,KAEnCb,GAASA,EAAMC,MAAM2C,OAAOgmB,OAAOY,OAAOK,SAEzD7pB,GACIA,EAAM6oB,SACDC,aAAGgB,QAAAd,aAAA,4CACQhpB,GAASA,EAAMC,MAAM2C,OAAOimB,WAErC7oB,EAAM+pB,SACRV,GAEAP,aAAGkB,QAAAhB,aAAA,6DAEJK,MAwDGY,OAjDAtvB,IAUR,IAKDuvB,GAfU,SACdH,GAAW,EAAK,SAChBI,GAAW,EAAI,OACfvB,EAAS,UAAS,SAClBj6B,EAAQ,UACRuS,EAAY,GAAE,SACd2nB,GAAW,EAAK,QAChBlL,EAAO,MACPyM,EAAQ,CAAC,EAAC,OACVjpB,GACDxG,EACC,OAAKiuB,GAAWj6B,GAAagvB,GAAYxc,GAMvC+oB,EADa,aAAXtB,EACcD,GAEAwB,EAAWT,GAAuBT,GAIlD3nB,eAAC4oB,EAAa,CACZH,SAAUA,EACVnB,OAAQA,EACR1nB,UAAWA,EACX2nB,SAAUA,EACVlL,QAASA,EACT,iBAAAtc,OAAgBF,EAAM,WACtBipB,MAAOA,EAAMz7B,SAEZA,KApBI,IAqBS,ECrGb,MAAM07B,GAAe,CCVb,IAA0B,sCCA1B,IAA0B,sCCA1B,IAA0B,sCCA1B,IAA0B,sCCA1B,IAA0B,sCCA1B,IAA0B,sCCA1B,IAA0B,sCCA1B,IAA0B,uCCMnCC,GAAc1qB,KAAOkD,IAAGhD,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,eAAVH,CAAU,SAC1BI,GACAA,EAAMuqB,cAAY,iGAmDPC,OA1CD7vB,IAUP,IAKD8vB,GAfS,QACbC,EAAO,aACPH,GAAe,EAAI,QACnBI,EAAUA,SAET,IACDhpB,EAAG,OACHR,EAAM,UACNypB,GAAY,KACTlpB,GACJ/G,EACC,OAAK+vB,GAAY/oB,GAAQR,GAKrBypB,GAAatV,kBAAQ3T,KACvB8oB,EAAe9oB,EAAIjI,KAAI,CAACoY,EAAG+Y,IAAK,GAAAxpB,OAAQyQ,EAAC,KAAAzQ,OAAIwpB,EAAQ,EAAC,OAAKC,KAAK,MAIhExpB,eAACgpB,GAAW,CACVzoB,IAAK6oB,EACLH,aAAcA,EACdI,QAASxf,GAAKwf,EAAQ,CAAExf,IAAGxJ,QAC3BA,IAAK2T,kBAAQ3T,GAAOA,EAAI,GAAKA,EAC7B,iBAAAN,OAAgBF,EAAM,UACtB4pB,OAAQN,EACRG,UAAWA,KACPlpB,KAjBC,IAkBL,ECpBSspB,OAnBOrwB,IAA4B,IAA3B,UAAEuG,EAAS,OAAEC,GAAQxG,EAC1C,OAAKwG,EAKHG,eAACkpB,GAAK,CACJtpB,UAAWA,EACXwpB,QAAQ,iBACR/oB,IAAKspB,iBAAOZ,IACZlpB,OAAM,GAAAE,OAAKF,EAAM,qBARZ,IASL,ECeS+pB,OApBKvwB,IAKN,IALO,QACnB+vB,EAAU,eAAc,UACxBxpB,EAAS,IACTS,EAAG,OACHR,EAAS,UACHxG,EACN,MAAOwwB,EAAUC,GAAe9Z,oBAAS,GACzC,OAAO6Z,IAAaxpB,EAClBL,eAAC0pB,GAAa,CAAC9pB,UAAWA,EAAWC,OAAM,GAAAE,OAAKF,EAAM,mBAEtDG,eAACkpB,GAAK,CACJE,QAASA,EACTxpB,UAAWA,EACXypB,QAASA,IAAMS,GAAY,GAC3BzpB,IAAKA,EACLR,OAAM,GAAAE,OAAKF,EAAM,kBAEpB,ECxBH,MAAMW,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAVH,CAAU,6JAIhBI,GAAK,eAAAqB,OAAmBrB,EAAMC,MAAM2C,OAAO4mB,UAEvCxpB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAI8N,SACrCrrB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAKrC8N,GAAa1rB,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAAZH,CAAY,kDAqBhB2rB,OATS5wB,IAA8C,IAA7C,UAAEuG,EAAS,OAAEC,EAAS,UAAiBxG,EAC9D,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,sBAC5B,OACEG,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAACgqB,GAAU,CAACl1B,KAAK,YAAY+K,OAAQC,KAC3B,EC1BhB,MAAMoqB,GAAe5rB,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAVH,CAAU,2EAMzB6rB,GAAoB7rB,aAAOsrB,IAAYprB,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAnBH,CAAmB,oFACjCI,GAAK,eAAAqB,OAAmBrB,EAAMC,MAAM2C,OAAO4mB,UAMjDkC,GAAwB9rB,aAAO2rB,IAAgBzrB,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAvBH,CAAuB,6BAI/C+rB,GAAkB/rB,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAVH,CAAU,mHACZI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAG1C5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAK/DC,GAAmBlsB,KAAO3E,KAAI6E,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAAXH,CAAW,mCACzBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAGrCC,GAAOpsB,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAXH,CAAW,sBACPI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtDkrB,GAAcrsB,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAARH,CAAQ,eAGtBssB,GAAWtsB,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAVH,CAAU,8HACVI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UACjDd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAGxB/rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OA8E/CqrB,OA/DUzxB,IAKX,IAAD0xB,EAAA,IALa,UACxBnrB,EAAS,WACTorB,EAAU,WACVC,EAAU,OACVprB,EAAS,UACHxG,EACN,MAAO6xB,EAAiBC,GAAsBnb,oBAAS,IACjD,WAAEsL,GAAeP,KAevB,MAAMqQ,EAAcJ,EAAWK,oBAC3BL,EAAWK,oBAAoBxwB,QAjCL,KAkC1BqwB,EACEF,EAAWK,oBACXC,mBAASN,EAAWK,oBAAqB,CACvCxwB,OArCsB,MAuC1B,KAEJ,OACEoF,gBAACiqB,GAAY,CAAA78B,SAAA,CACA,OAAV49B,QAAU,IAAVA,KAAYM,YACXvrB,eAACmqB,GAAiB,CAChBf,QAAmB,OAAV6B,QAAU,IAAVA,OAAU,EAAVA,EAAY78B,KACrBiS,IAAe,OAAV4qB,QAAU,IAAVA,OAAU,EAAVA,EAAYM,YACjB1rB,OAAM,GAAAE,OAAKF,EAAM,KAAAE,OAAIkrB,EAAWpjC,MAGlCmY,eAACoqB,GAAqB,CAACvqB,OAAQA,IAEjCI,gBAACoqB,GAAe,CAAAh9B,SAAA,CACd4S,gBAAA,UAAA5S,SAAA,CACE2S,eAAC0qB,GAAI,CAAC,wBAAsB,OAAMr9B,UACrB,OAAV49B,QAAU,IAAVA,OAAU,EAAVA,EAAY78B,OAAQ48B,EAAW7G,YAElCnkB,eAACwqB,GAAgB,CAACgB,SAAUR,EAAWhxB,UAAU3M,SAC9CqL,KAAOsyB,EAAWhxB,WAAWyxB,eAGlCzrB,eAAC2qB,GAAW,CAAAt9B,SAAE+9B,IACbJ,EAAWK,sBACoB,QAA9BN,EAAAC,EAAWK,2BAAmB,IAAAN,OAAA,EAA9BA,EAAgClwB,QA/DV,KAgEpBmF,eAAC4qB,GAAQ,CAACvO,QA7CpB,SAA0BxS,GACxBshB,GAAoBD,GACpB5P,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKF,EAAM,mBAChB6Q,MAAM,cAAD3Q,OACFmrB,EAEG,mCADA,qCAIV,EAkC8C79B,SAChC69B,EAA8B,OAAZ,iBAIf,EChHnB,MAAMQ,GAASptB,KAAOqtB,OAAMntB,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,eAAbH,CAAa,+DAyEbstB,OA1DMvyB,IAMP,IANQ,UACpBuG,EAAS,SACTisB,EAAQ,mBACRC,EAAkB,YAClBzd,EAAW,OACXxO,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mBACtB,WAAEyb,GAAeP,KACjBgR,EAAiBC,iBAAOH,EAAU,aAAaI,WAC9CC,EAAaC,GAAkBnc,oBAAS,GAa/C,MAAMoc,EACJlrB,sBAAY4qB,KAAwBI,EAChCH,EACAA,EAAeM,MAAM,EAAGP,GAE9B,OACE7rB,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CAChD++B,EAAgBH,UAAU7zB,KAAI,CAAC4yB,EAAYzB,KAC1C,MAAM0B,EAAa5c,EAAYC,MAC7Bge,GAAUA,EAAOzkC,KAAOmjC,EAAW/a,SAErC,OACEjQ,eAAC8qB,GAAgB,CAEfE,WAAYA,EACZC,WAAYA,GAFP1B,EAGL,IAGLroB,sBAAY4qB,IACbC,EAAelxB,SAAWixB,EAAqB,KAC7C9rB,eAAC0rB,GAAM,CAAAr+B,SACL2S,eAAC2oB,GAAM,CACLrB,OAAO,WACPjL,QAnCV,SACExS,GAEAsiB,GAAgBD,GAChB5Q,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKD,EAAU,oBACpB4Q,MAAM,cAAD3Q,OAAiBmsB,EAAgC,gBAAlB,kBAExC,EA2BUrsB,OAAM,GAAAE,OAAKD,EAAU,oBAAmBzS,SAEvC6+B,EAAW,GAAAnsB,OAAMgsB,EAAelxB,OAAM,aAAc,aAIvD,E,UC/EV,MAAM0xB,GAAgBjuB,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,eAAVH,CAAU,MAC1BkuB,GAAuBluB,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAVH,CAAU,0CAIjCmuB,GAAqBnuB,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAVH,CAAU,yIAEzBI,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAgBrE,MAAMmC,WAAgBC,YACpBC,YAAYluB,GACVmuB,MAAMnuB,GAAO,KAOfouB,QAAUC,IACRC,KAAKC,SAAS,CAAEF,QAAO,EAPvBC,KAAK/zB,MAAQ,CACX8zB,MAAM,GAERC,KAAKE,OAASC,IAAMC,WACtB,CAMAC,SACE,MAAM,UACJztB,EAAS,cACT0tB,EAAa,UACbC,EAAS,aACTC,EAAY,OACZ3tB,EAAM,QACN4tB,GACET,KAAKtuB,MACT,OAAK8uB,GAAiB3tB,GAAW4tB,EAK/BxtB,gBAACssB,GAAa,CAAC3sB,UAAWA,EAAW,iBAAAG,OAAgBF,EAAM,YAAWxS,SAAA,CACpE2S,eAACwsB,GAAoB,CACnBkB,IAAKV,KAAKE,OACVS,aAAc9jB,IACZmjB,KAAKF,SAAQ,GACbQ,EAAczjB,EAAE,EAElB+jB,aAAcA,IAAMZ,KAAKF,SAAQ,GAAOz/B,SAEvCogC,IAEHztB,eAAC6tB,KAAO,CACNX,OAAQF,KAAKE,OAAOx1B,QACpBq1B,KAAMC,KAAK/zB,MAAM8zB,KACjBQ,UAAWA,EAAUlgC,SAEpBqR,GACCsB,eAACysB,GAAkB,IAAK/tB,EAAKrR,SAAGmgC,SArB/B,IA0BX,EAGFd,GAAQoB,aAAe,CACrBR,cAAeA,OAGfC,UAAW,SAcEb,UChGR,MAAMqB,GAAezvB,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAATH,CAAS,8DAMxB2vB,GAAoB3vB,KAAO3E,KAAI6E,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAAXH,CAAW,mDACjCI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAK9ByD,GAAmB5vB,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAATH,CAAS,kGA4B1B8vB,OApBS/0B,IAAmC,IAAlC,YAAEgY,EAAW,YAAEhD,GAAahV,EACnD,OACE2G,eAAC+tB,GAAY,CAAA1gC,SACVgkB,EAAYjZ,KAAI,CAACi2B,EAAM9E,KAAW,IAAD+E,EAChC,MAAMC,GACiD,QAArDD,EAAAjgB,EAAYC,MAAKge,GAAUA,EAAOzkC,KAAOwmC,EAAKpe,gBAAO,IAAAqe,OAAA,EAArDA,EAA8D,OAC9DD,EAAKlK,UACP,OACElkB,gBAACiuB,GAAgB,CAAa,wBAAsB,OAAM7gC,SAAA,CACvDkhC,EAAU,IACXvuB,eAACiuB,GAAiB,CAACO,SAAUH,EAAKr0B,UAAU3M,SACzCqL,KAAO21B,EAAKr0B,WAAWyxB,cAHLlC,EAKJ,KAGV,ECzBnB,MAAMkF,GAAUnwB,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAVH,CAAU,sDAKpBowB,GAAepwB,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAAVH,CAAU,kUACTI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAI1C5rB,GACRA,EAAMiwB,WAAU,GAAA5uB,OACTrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIC,WACjE,SAQYxd,GAAUA,EAAMkwB,UAAY,UAAY,SAE7ClwB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aASzC0S,GAAevwB,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAAZH,CAAY,sEACtBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAE5Bxd,GAAUA,EAAMkwB,UAAY,SAAW,SAC1ClwB,GAAUA,EAAMkwB,UAAY,SAAW,YAuGpCE,OAnGOz1B,IAKf,IALgB,YACrBgY,EAAW,YACX0d,EAAW,sBACXC,EAAqB,UACrBJ,GAAY,GACbv1B,EACC,MAAM,UAAE6R,GAAc2V,KAChBzM,EAAalJ,EAAUhE,KACvBmH,GAAwB,OAAV+F,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,cAAe,GAEzC4B,EAAS5S,cAAYpE,GAASiT,cAAIjT,EAAO,cACxCg2B,EAAgBC,GAAqBlf,mBAASje,GAAcP,YAC5D29B,EAAuBC,GAA4Bpf,mBACxDje,GAAcJ,cAGV09B,EAAcA,CAACt5B,EAAQu5B,EAAczlB,KACzCA,EAAE0lB,iBACEx5B,IAAWhE,GAAcP,UAC3B09B,EAAkB,GAADnvB,OACZhO,GAAcP,WAASuO,OAAGuvB,EAAe,UAAY,KAG1DF,EAAyB,GAADrvB,OACnBhO,GAAcJ,cAAYoO,OAAGuvB,EAAe,UAAY,IAE/D,EAGF,OACEtvB,eAACyuB,GAAO,CAAAphC,SACLyE,GAA6BsG,KAAI,CAACo3B,EAAajG,KAC9C,MAAMkG,EAAqBpe,EAAYJ,QACrC+Z,GAAcA,EAAW0E,8BAAgCF,IAErDG,EAAU59B,GAAcy9B,GAExBI,EAAcH,EAAmB50B,OAEjCg1B,EACJF,IAAY59B,GAAcP,WAC1Bm+B,IAAY59B,GAAcJ,aAEtBm+B,EACJH,IAAY59B,GAAcP,UACtBy9B,EACAU,IAAY59B,GAAcJ,aAC1Bw9B,EACAQ,EAEAI,EACJ9vB,gBAACyuB,GAAY,CACXC,WAAYc,EAAmBO,MAAK3B,GAAQA,EAAKpe,SAAWA,IAC5D2e,UAAWA,EAEXvS,QAASd,GACPyT,EAAsBD,EAAaS,EAAajU,GAElDoS,aAAc9jB,GACZgmB,GAAiBR,EAAYt9B,GAAcy9B,IAAc,EAAM3lB,GAEjE+jB,aAAc/jB,GACZgmB,GAAiBR,EAAYt9B,GAAcy9B,IAAc,EAAO3lB,GAElE,cAAY,gBAAexc,SAAA,CAE3B2S,eAAC6uB,GAAY,CACXD,UAAWA,EACXhvB,UAAU,wBACV9K,KAAMg7B,IACL,IACFlB,EACC5uB,eAAA,QAAMJ,UAAU,uCAAsCvS,SACnDuiC,IAED,OArBCrG,GAwBT,OAAOqF,GAAagB,EAAc,EAChC5vB,eAAC0sB,GAAO,CACNa,UAAU,MACV1tB,OAAO,yBAEP4tB,QAASsC,EACTvC,aACExtB,eAACouB,GAAe,CACd/c,YAAaoe,EACbphB,YAAaA,KALZkb,GAUPwG,CACD,KAEK,E,8BC9Id,MAAME,GAAkB3xB,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAZH,CAAY,gBACzBI,GAASA,EAAMC,MAAM2C,OAAO4uB,MAAMC,cAEvCxI,GAAerpB,aAAOqqB,IAAOnqB,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAdH,CAAc,qBAyBpB8xB,I,MAAAA,GAdK/2B,IAAuD,IAAtD,UAAEuG,EAAS,QAAEyc,EAAO,OAAExc,EAAS,UAAiBxG,EACnE,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,UAC5B,OACEG,eAAC2nB,GAAY,CACXL,OAAO,WACP1nB,UAAWA,EACXyc,QAASA,EACTxc,OAAQC,EAAWzS,SAEnB2S,eAACiwB,GAAe,CAACn7B,KAAK,QAAQ+K,OAAQC,KACzB,ECtBnB,MAAMuwB,GAAcC,aAAiB7I,QAAAC,aAAA,klCAE/BhpB,IACA,MAAM6xB,EAAY,GAAAxwB,OAAMrB,EAAMC,MAAM0pB,QAAQC,OAAO/oB,GAAE,WAAAQ,OAAUrB,EAAMC,MAAM2C,OAAO4mB,QAElF,OAAOV,aAAGM,QAAAJ,aAAA,qCACE6I,EAAY,IAiCN7xB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YAuClDC,GAA6BnyB,cAAOjF,IAAA,IAAC,iBAAEq3B,KAAqBC,GAAMt3B,EAAA,OACtE2G,eAAC4wB,KAAoB,IAAKD,GAAQ,IAClCnyB,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAFiCH,CAEjC,4HAGmBI,GACjBA,EAAMgyB,iBAAmB,gBAAkB,aA6DhCG,OAnDD/2B,IAYP,IAZQ,WACbg3B,GAAa,EAAI,gBACjBC,EAAe,OACfC,EAASA,SAER,OACDC,EAASA,SAER,aACDzD,EAAY,cACZ0D,EAAgB,KAAI,OACpBrxB,GACD/F,EACC,OAAK0zB,GAAiB3tB,EAIpBI,gBAAA,OAAK,iBAAAF,OAAgBF,EAAM,UAASxS,SAAA,CAClC2S,eAACqwB,GAAW,IACZpwB,gBAACkxB,KAAc,CACbJ,gBAAiBA,EACjBC,OAAQA,EAGRC,OAAQA,IACNA,EAAO,CAAEj2B,KAAM,OAAQkyB,OAAQ,CAAErlC,GAAG,GAADkY,OAAKF,EAAM,aAEhDktB,MAAM,EAAK1/B,SAAA,CAEX4S,gBAACwwB,GAA0B,CAACC,mBAAoBQ,EAAc7jC,SAAA,CAC3D6jC,EACAJ,GAAc9wB,eAACowB,GAAW,CAAC/T,QAAS2U,EAAQnxB,OAAQA,OAEvDG,eAACoxB,KAAkB,CAAA/jC,SAAEmgC,UAnBlB,IAqBD,ECjIV,MAAM6D,GAAiB/yB,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAAVH,CAAU,yCAK3BgzB,GAAchzB,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAZH,CAAY,oCACrBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGrCqV,GAAgBjzB,aAAO,UAASE,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAhBH,CAAgB,wFAC1BI,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIuU,aAC/C9xB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAMhDkH,GAAkBlzB,aAAO,YAAWE,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAAlBH,CAAkB,4DAOpCmzB,GAAenzB,aAAO,SAAQE,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAfH,CAAe,oHAGdI,GAClBA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAO2a,IAAIwO,MACvB/rB,EAAMC,MAAM2C,OAAO2a,IAAIE,aAEpBzd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAKrCoH,GAAYpzB,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAVH,CAAU,4FACTI,GAAK,aAAAqB,OAAiBrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAEhD7rB,GAAK,GAAAqB,OAASrB,EAAMizB,MAAQ,SAAW,YAKjDC,GAActzB,KAAOuzB,KAAIrzB,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAXH,CAAW,4DA0GhBwzB,OApGUz4B,IAWlB,IAXmB,UACxBuG,EAAS,QACTmyB,EAAO,YACP1gB,EAAW,YACXhD,EAAW,sBACX2gB,EAAqB,wBACrBgD,EAAuB,sBACvBC,EAAqB,YACrBC,EAAW,cACXhB,EAAa,OACbrxB,EAAS,UACVxG,EACC,MAAO84B,EAAaC,GAAkBpiB,mBAAS,KACzC,WAAEsL,GAAeP,KACjBjb,EAAU,GAAAC,OAAMF,EAAM,sBAU5B,OACEI,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACuxB,GAAa,CACZ3xB,UAAWA,EACX,iBAAAG,OAAgBF,EAAM,8BACtBwc,QAASA,IAAM4V,EAAsBF,EAAQlqC,IAAIwF,SAEjD4S,gBAAA,QAAA5S,SAAA,CACE2S,eAACsxB,GAAW,CAACx8B,KAAK,UAAU+K,OAAO,aAAaD,UAAU,KAAM,IAAI,gBAIvD,IAAhBsyB,GACClyB,eAAC6wB,GAAK,CACJE,gBAAgB,mBAChBC,OAAQA,IAAMiB,EAAsB,IACpChB,OAAQ1V,GAxBhB,SAAqBA,EAAOwW,GAC1BzW,EAAW,CACTzR,EAAG0R,EACHzzB,MAAM,GAADiY,OAAKD,EAAU,SACpB4Q,MAAM,+BAAD3Q,OAAiCgyB,EAAQlqC,KAElD,CAkByByqC,CAAY/W,EAAOlK,GACpCmc,aACEvtB,gBAACoxB,GAAc,CAAAhkC,SAAA,CACb2S,eAAC8uB,GAAa,CACZzd,YAAaA,EACb0d,YAAagD,EACb/C,sBAAuBA,IAEzB/uB,gBAACyxB,GAAS,CAAArkC,SAAA,CACR2S,eAACsxB,GAAW,CAACx8B,KAAK,UAAU+K,OAAO,aAAaD,UAAU,KAAM,IAAI,aAGlEyR,EAAYJ,QACV+Z,GAAiD,KAAnCA,EAAWK,sBACzBxwB,OACH,OAGHmF,eAAC4rB,GAAY,CACXC,SAAUxa,EAAYJ,QACpB+Z,GAAiD,KAAnCA,EAAWK,sBAE3Bhd,YAAaA,EACbxO,OAAQC,IAEVE,eAAC0xB,GAAS,CAACC,OAAO,EAAKtkC,SAAC,oBACxB4S,gBAAC2xB,GAAW,CACVW,SAAUhX,IACRyW,EAAwBD,EAASI,EAAa5W,GAC9C6W,EAAe,GAAG,EAClB/kC,SAAA,CAEF2S,eAAA,SAAA3S,SACE2S,eAACwxB,GAAe,CACd9gB,MAAOyhB,EACPK,SAAUjX,GAAS6W,EAAe7W,EAAM2R,OAAOxc,OAC/C,iBAAA3Q,OAAgBF,EAAM,0BAG1BG,eAACyxB,GAAY,CACXlK,UAAW4K,EACXn3B,KAAK,SACL0V,MAAM,cACN,iBAAA3Q,OAAgBF,EAAM,mBAK9BqxB,cAAeA,GAAiB,KAChCrxB,OAAQC,MAGX,EChJP,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAAVH,CAAU,qCACjBI,GACPA,EAAM+zB,WACF/zB,EAAMg0B,YAAcrjC,GAClBqP,EAAMC,MAAM2C,OAAO2a,IAAI0W,MACvBj0B,EAAMC,MAAM2C,OAAO2a,IAAI2W,QACzBl0B,EAAMg0B,YAAcrjC,GACpBqP,EAAMC,MAAM2C,OAAO2a,IAAI0W,MACvBj0B,EAAMC,MAAM2C,OAAO2a,IAAI2W,UAGzBC,GAAQv0B,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAXH,CAAW,gCACRI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAEhD2kC,GAAQz0B,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAZH,CAAY,sCAsEX00B,OAtDiB35B,IAQG,IARF,UAC/BuG,EAAS,UACT8yB,EAAS,QACTO,EAAU,SAAQ,WAClBR,GAAa,EAAK,OAClB5yB,EAAS,SAAQ,KACjBrG,EAAI,MACJkX,GACMrX,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,8BAC5B,GAAc,IAAV6Q,EACF,OAAO,KAET,MAAMwiB,EAAgBC,KAAKC,IAAI1iB,GACzB2iB,EACJ3iB,EAAQ,EACM,WAAZuiB,EACEhzB,gBAAAoyB,YAAA,CAAAhlC,SAAA,CAAE,IACC2S,eAAC6yB,GAAK,CAAAxlC,SAAE6lC,OAETT,EACF,QAEA,SAEY,WAAZQ,EACFhzB,gBAAAoyB,YAAA,CAAAhlC,SAAA,CAAE,IACC2S,eAAC6yB,GAAK,CAAAxlC,SAAE6lC,OAETT,EACF,SAEA,QAGJ,OACExyB,gBAACO,GAAS,CACRZ,UAAWA,EACX,cAAaE,EACb4yB,UAAWA,EACXD,WAAYA,EAAWplC,SAAA,CAEtBgmC,EACY,WAAZJ,EAAuBz5B,EAAO,KAC/BwG,eAAC+yB,GAAK,CACJj+B,KAAI,eAAAiL,OACF2yB,IAAcrjC,GAA+B,KAAO,QAEtDwQ,OAAQC,MAEA,ECjFT,MAAMwzB,GAAkBA,CAAC95B,EAAoBkX,IACzC,SAATlX,EAA0B,GAARkX,EAAaA,EAEpB6iB,GACXC,GAEArW,cACE3T,OAAOmH,OAAO6iB,GACXviB,QAAOyO,KAAQ,OAADA,QAAC,IAADA,MAAGlmB,QACjBpB,KAAKq7B,GACJH,GAAgBG,EAAMj6B,KAAMi6B,EAAM/iB,UAGnC,SAASgjB,GACdF,GAEA,OAAItiB,iBAAOsiB,GACF,CACL,CACE9iB,MAAO,EACPlX,KAAM,SAKLm6B,GACLJ,GAAyB/pB,OAAOmH,OAAO6iB,IAE3C,CAEO,MAAMG,GAAsB,SACjCC,GAEoC,IADpCC,IAAUj5B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAEV,MAAMk5B,EAAgBX,KAAKY,MAAMH,EAAiB,IAC5CI,EAAWJ,EAAiB,GAC5BK,EAA0BJ,EAAaV,KAAKe,MAAMF,GAAYA,EACpE,OAAOG,kBAAQ,CACbL,GAAiB,EACb,CACEpjB,MAAOojB,EACPt6B,KAAM,QAER,KACJy6B,GAA2B,EACvB,CACEvjB,MAAOujB,EACPz6B,KAAM,SAER,MAER,EA0BO,SAAS46B,GACdC,GAEA,IAAKA,EAAWx5B,OAAQ,OAAO,KAG/B,MAAMy5B,EAA8B,CAAC,EAcrC,MAbC,CACCnlC,GAAgB1E,IAChB0E,GAAgB3E,mBAChB2E,GAAgBzE,OAChByE,GAAgBxE,SACqB2iB,SAAQinB,IAC7C,MAAMC,EAAcL,kBAClBE,EAAWpjB,QAAOyO,IAAC,IAAA+U,EAAA,QAAiB,QAAZA,EAAC/U,EAAE6U,UAAS,IAAAE,IAAXA,EAAaj7B,KAAK,IAACpB,KAAIsnB,GAAKA,EAAE6U,MAEnDC,EAAY35B,SAChBy5B,EAAQC,GAzCd,SACEG,GAEA,MAAMC,EAAoBD,EACvBt8B,KAAIoY,GAAiB,SAAXA,EAAEhX,KAA4B,GAAVgX,EAAEE,MAAaF,EAAEE,QAC/Cnb,MAAK,CAACq/B,EAAIC,IAAOD,EAAKC,IAEnBC,EAAc3B,KAAKY,MAAMY,EAAkB95B,OAAS,GACpDk6B,EAAoBJ,EAAkB95B,OAExC85B,EAAkB95B,OAAS,IAAM,GAChC85B,EAAkBG,EAAc,GAAKH,EAAkBG,IACxD,EACAH,EAAkBG,GAJlB,EAMJ,MAAO,CACLt7B,KAAMu7B,GAAoB,GAAK,OAAS,QACxCrkB,MACEqkB,GAAoB,GAChB5B,KAAKY,MAAMgB,EAAmB,IAC9B5B,KAAKe,MAAMa,GAErB,CAmB0BC,CAAwBR,GAC9C,IAEKF,CACT,CAEO,MAAMW,GAAoBA,CAC/Bv9B,EACAw9B,KAOA,GAAMx9B,GAAaw9B,EAAU,CAC3B,MAAMC,EACJ5B,GAAyB77B,GAAW67B,GAAyB2B,GAE/D,GAAMC,EAAc,CAAC,IAADC,EAClB,MAAMC,EAAa1B,GAAoBR,KAAKC,IAAI+B,IAC1C37B,EACJ25B,KAAKC,IAAI+B,IAAiB,GAAK,OAAU,QAC3C,MAAO,CACLzC,UACEyC,EAAe,EACX9lC,GACAA,GACNojC,YAAY,EACZj5B,OACAkX,OACwC,QAAtC0kB,EAACC,EAAW/mB,MAAKkC,GAAKA,EAAEhX,OAASA,WAAK,IAAA47B,OAAA,EAArCA,EAAuC1kB,QACvCykB,EAAe,GAAK,EAAI,GAE/B,CACF,CACA,OAAO,IAAI,EAGAG,GACXC,GAEOA,EAAMhmB,OAAMiB,GAAiB,IAAZA,EAAEE,QACtB6kB,EAAMtkB,QAAOT,GAAgB,UAAXA,EAAEhX,OACpB+7B,EAAMtkB,QAAOT,GAAKglB,mBAAShlB,EAAEE,QAAUF,EAAEE,MAAQ,IC3IjDlQ,GAAYlC,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAbH,CAAa,0HAGhBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAQtCnsB,GACZA,EAAMC,MAAM2C,OAAOm0B,MAAMjC,UAAU90B,EAAM61B,UAAUv9B,kBA4B1C0+B,I,eAAAA,GAjBcr8B,IAID,IAJE,UAC5BuG,EAAS,SACT20B,EAAQ,OACR10B,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,4BAC5B,OACEG,eAACQ,GAAS,CACRZ,UAAWA,EACX,cAAaE,EACby0B,SAAUA,EAAsClnC,SAE/CsoC,oBAAUC,qBAAWrB,KACZ,EC9BhB,MAAMsB,GAAkBv3B,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,eAAVH,CAAU,+CAI5Bw3B,GAAgBx3B,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAAXH,CAAW,oEAM3BI,GACsB,WAAlBA,EAAMu0B,QACDzL,aAAGC,QAAAC,aAAA,iFAMHF,aAAGM,QAAAJ,aAAA,qDAOdhpB,IACA,GAAsB,kBAAlBA,EAAMu0B,SAAiCv0B,EAAM61B,SAC/C,OAAO/M,aAAGQ,QAAAN,aAAA,iJAIChpB,EAAMC,MAAM2C,OAAOm0B,MAAMjC,UAChC90B,EAAM61B,UACNlzB,MACY3C,EAAMC,MAAM2C,OAAOm0B,MAAMjC,UACrC90B,EAAM61B,UACNv9B,gBAEN,IAGE++B,GAAOz3B,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAXH,CAAW,oBACTI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElD5L,GAAS3gB,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAXH,CAAW,4EACTI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAErCsQ,GACK,WAAlBA,EAAMu0B,SAA0C,kBAAlBv0B,EAAMu0B,QAChCv0B,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,QAClCd,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAGpCu2B,GAAK13B,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAXH,CAAW,4EACLI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAErCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAGtDw2B,GAAO33B,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAXH,CAAW,wBACTI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACpDZ,IACA,GACoB,kBAAlBA,EAAMu0B,SACY,uBAAlBv0B,EAAMu0B,QAEN,OAAOzL,aAAGgB,QAAAd,aAAA,mDAGZ,IAGEwO,GAAQ53B,aAAO00B,IAAwBx0B,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAA/BH,CAA+B,2CAC9BI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAEpDnsB,IACA,GAAmB,WAAfA,EAAMy3B,KACR,OAAO3O,aAAGkB,QAAAhB,aAAA,4CAGZ,IAGE0O,GAAe93B,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAXH,CAAW,yDAEjBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAmHzCwL,OA1Feh9B,IAOF,IAPG,UAC7BuG,EAAS,MACT21B,EAAK,MACLe,EAAK,QACLrD,EAAU,SAAQ,SAClBsB,EAAQ,OACR10B,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,6BACtB02B,IAA0BhB,GAAShC,GAAyBgC,GAClE,OACEt1B,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACpC,aAAZ4lC,GAA4BsB,EAC3Bv0B,eAAC01B,GAAoB,CAACnB,SAAUA,EAAU10B,OAAQC,IAChD,KACJE,eAAC61B,GAAe,CAAC5C,QAASA,EAAQ5lC,SAC/B8sB,gBAAMob,GACHhB,EACAv0B,eAAC81B,GAAa,CACZ7C,QAASA,EACTsB,SAAUA,EAAsClnC,SAEhD4S,gBAACm2B,GAAY,CAAA/oC,SAAA,CAAC,SAEC,kBAAZ4lC,EAA8B,KAC7BhzB,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAA,SAAM,wBAOdA,eAAC81B,GAAa,CAAC7C,QAASA,EAAQ5lC,SAC9B2S,eAACg2B,GAAE,CAAA3oC,SAAC,UAGNkoC,EAAMhmB,OAAMiB,GAAiB,IAAZA,EAAEE,UAAiBuiB,EAAQtT,WAAW,UACzD1f,gBAAC61B,GAAa,CACZ7C,QAASA,EACTsB,SAAUA,EAAsClnC,SAAA,CAEhD2S,eAAC+1B,GAAI,CAAA1oC,SAAC,MACN2S,eAACif,GAAM,CAACgU,QAASA,EAAQ5lC,SAAC,MAC1B2S,eAACi2B,GAAI,CAAChD,QAASA,EAAQ5lC,SACR,kBAAZ4lC,EAA8B,IAAM,YAIzCsC,EAAMn9B,KAAKo+B,IACT,MAAMC,EACQ,kBAAZxD,GACY,uBAAZA,EACEuD,EAAOh9B,KAAK2R,UAAU,EAAG,GAEzBlL,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACG,IACAuoC,qBACCW,EAAwB,GAAiB,WAAZtD,GAER,IAAjBuD,EAAO9lB,MADP8lB,EAAOh9B,KAAK2R,UAAU,EAAGqrB,EAAOh9B,KAAKqB,OAAS,GAG9C27B,EAAOh9B,SAInB,OACEyG,gBAAC61B,GAAa,CACZ7C,QAASA,EACTsB,SAAUA,EAAsClnC,SAAA,CAGhD2S,eAACif,GAAM,CAACgU,QAASA,EAAQ5lC,SAAEmpC,EAAO9lB,QAClC1Q,eAACi2B,GAAI,CAAChD,QAASA,EAAQ5lC,SAAEopC,MAAmB,GAAA12B,OAHpCw0B,EAAQ,KAAAx0B,OAAIy2B,EAAOh9B,MAIb,MAKvB2gB,gBAAMmc,GAAS,KACdt2B,eAACk2B,GAAK,IACAI,EACJH,KAAMlD,EACNz5B,KAAqB,SAAf88B,EAAM98B,KAAkB,IAAM,QAGpC,ECtMH,MAAMk9B,GAAWr9B,IAAuB,IAAtB,IAAEs9B,EAAG,QAAEC,GAASv9B,EACnCwR,EAAI,EACNgsB,EAAI,EACJrkB,EAAI,EAMN,OAJA3H,EAAI,KAAO8rB,EAAI,GAAKA,EAAI,GACxBE,EAAI,KAAOF,EAAI,GAAKA,EAAI,GACxBnkB,EAAI,KAAOmkB,EAAI,GAAKA,EAAI,GAEnBxc,gBAAMyc,GAGL,OAAN72B,QAAe8K,EAAC,MAAA9K,QAAM82B,EAAC,MAAA92B,QAAMyS,EAAC,KAFtB,QAANzS,QAAgB8K,EAAC,MAAA9K,QAAM82B,EAAC,MAAA92B,QAAMyS,EAAC,MAAAzS,OAAK62B,EAAO,IAEf,EAGnBE,GAAcjP,GACzBkP,GAAaz1B,OAAO01B,SAASttB,SAASme,GAClCkP,GAAaz1B,OAAO2a,IAAIqO,MACxByM,GAAaz1B,OAAO2a,IAAIC,UCrBxB+a,GAAoB,CACxB33B,GAAI,IACJC,GAAI,IACJ23B,GAAI,IACJC,GAAI,KACJC,IAAK,MAMDjb,GAAa,UACboO,GAAO,UAGP8M,GAAa,UACb5M,GAAQ,UACRH,GAAQ,UACRpO,GAAY,UAGZob,GAAY,UACZC,GAAU,UACVC,GAAQ,UACR5E,GAAU,UACV6E,GAAS,UACT1N,GAAS,UACT2N,GAAU,UACVC,GAAa,UACbC,GAAQ,UACRC,GAAU,UACVC,GAAe,UACfnF,GAAQ,UACRoF,GAAU,UACVC,GAAQ,UACRC,GAAa,UACbC,GAAQ,UACRC,GAAU,UACVC,GAAc,UA8UPrB,GAA6B,CACxCsB,YAAa9hB,oBAAU0gB,IAAoBzkB,GAAS,GAAAzS,OAAQyS,EAAC,QAC7DykB,qBACA5O,QAAS,CACPC,OAAQ,CACNhpB,GAAI,SACJC,GAAI,SACJ23B,GAAI,WAGR51B,OAAQ,CACN2a,IAAK,CACHC,aACAuO,SACAF,QACAiG,UAtXY,UAuXZ6G,cACAlb,cACAmO,SACAgN,aACAC,WACAC,SACA5E,WACA6E,UACA1N,UACA2N,WACAC,cACAC,SACAC,WACAC,gBACAnF,SACAoF,WACAC,SACAC,cACAC,SACAC,WACAC,gBAEFpB,SAAU,CACRQ,GACA5E,GACAgF,GACAE,GACAG,GACAG,GACAT,GACAK,GACArF,GACAoF,IAEF7P,OAAQhM,GACRoc,YAAa,CACXpQ,OAAQhM,IAEVqc,MAAO,CACLrc,aACAuO,SACAF,QACA8M,cACAlb,cACAmO,UAEFkO,WAAY,CACV1jC,KAAMy1B,IAERjD,OAAQ,CACNC,SAAU,CACRK,QAAS,CAAEC,GAAI0C,GAAMrC,OAAQuC,GAAOtC,GAAIsC,IACxCxC,MAAO,CAAEJ,GAAI0C,GAAMrC,OAAQuC,GAAOtC,GAAIsC,KAExCuM,SAAU,CACRpP,QAAS,CAAEC,GAAI0C,GAAMrC,OAAQhM,GAAWiM,GAAIjM,IAC5C+L,MAAO,CAAEJ,GAAIwP,GAAYnP,OAAQhM,GAAWiM,GAAIjM,KAElD0L,QAAS,CACPA,QAAS,CAAEC,GAAI1L,GAAY+L,OAAQhM,GAAWiM,GAAImC,IAClDrC,MAAO,CAAEJ,GAAIwP,GAAYnP,OAAQhM,GAAWiM,GAAIjM,KAElDuc,SAAU,CACR7Q,QAAS,CACPC,GAAI,cACJK,OAAQ,cACRC,GAAIjM,IAEN+L,MAAO,CAAEJ,GAAIwP,GAAYnP,OAAQ,cAAeC,GAAIjM,KAEtDgM,OAAQ,CACNwQ,UAAW,YACXnQ,OAAQ,cAGZoQ,KAAM,CACJ9Q,GAAI0C,IAENqO,SAAU,CACR9jC,KAAM21B,IAERgL,MAAO,CACLoD,KAAM3c,GACN4c,cAAe,CACbC,cAAevB,GACfwB,aAAc7c,GACd8c,cAAenB,GACfpsC,UAAWqsC,GACXpsC,mBAAoBssC,GACpBrsC,kBAAmBwsC,GACnB7nC,wBAAyB6nC,GACzB5nC,oCAAqCoiC,GACrCniC,2BAA4BonC,GAC5BlnC,gCAAiCsnC,GACjCrnC,2BAA4B2mC,GAC5B1mC,6BAA8BinC,GAC9BrsC,UAAW0wB,GACX+c,aAActB,GACduB,iBAAkBxB,GAClByB,cAAejB,GACfkB,yBAA0BrB,GAC1BsB,yBAA0BnB,GAC1BoB,UAAW3G,GACXznC,cAAeqsC,GACfgC,uBAAwB3B,GACxB4B,iBAAkB1P,GAClB2P,UAAWpC,IAEbqC,aAAc,CACZvyB,QAAS8wB,GACT0B,KAAM,CAAC7P,GAAQ5N,IACf0d,UAAW1d,GACX2d,UAAW/P,IAEbyJ,UAAW,CACT/oC,IAAK,CACH4W,MAAO6a,GACPllB,gBAAiBuzB,IAEnB//B,mBAAoB,CAClB6W,MAAO6a,GACPllB,gBAAiB+yB,IAEnBr/B,OAAQ,CACN2W,MAAOipB,GACPtzB,gBAAiBwgC,IAEnB7sC,QAAS,CACP0W,MAAOipB,GACPtzB,gBAAiB8gC,KAGrBiC,YAAa,CACXC,OAAQ,CACNC,KAAMtH,GACNuH,OAAQhe,KAGZie,aAAc,CACZC,OAAQzH,GACR,eAAgB8E,GAChB4C,KAAMtC,GACNuC,KAAMpe,IAERqe,kBAAmB,CACjBP,OAAQ,CACNC,KAAM,CACJnqC,KAAMooC,GACNroC,aAAcqoC,GACdtoC,OAAQynC,IAEV6C,OAAQhe,GACR0a,QAAS,CACP9mC,KAAM,IACND,aAAc,GACdD,OAAQ,OAId4qC,uBAAwB,CACtBC,uBAAwB1C,GACxB2C,iBAAkBpD,GAClBqD,wBAAyBzC,GACzB0C,kCAAmC9C,GACnC+C,WAAYhD,GACZiD,MAAOrD,GACPsD,sBAAuB/C,GACvBgD,kBAAmBjR,GACnBkR,cAAexQ,GACfyQ,aAAc9C,GACd+C,qBAAsB3D,GACtB4D,cAAe5D,IAEjB6D,UAAW,CACTC,IAAK3I,GACL4I,WAAY/D,GACZwC,OAAQ,CAAEC,KAAMzC,GAAO0C,OAAQhe,IAC/BqD,OAAQ,CACN0a,KAAMtH,GACNuH,OAAQhe,KAGZsf,aAAc,CACZp/B,KAAM2tB,GACN7iB,KAAMkxB,GACN4B,OAAQ,CAAEC,KAAM7B,GAAa8B,OAAQhe,IACrCqD,OAAQ,CACN0a,KAAMlQ,GACNmQ,OAAQhe,KAGZuf,YAAa,CACXv0B,KAAMkxB,GACNh8B,KAAMo7B,GACNwC,OAAQ,CAAEC,KAAM7B,GAAa8B,OAAQhe,IACrCqD,OAAQ,CACN0a,KAAMzC,GACN0C,OAAQhe,MAIdqL,SAAUgD,GACVmR,SAAU,CACR7C,KAAM3c,GACNyf,UAAWzf,GACX0f,OAAQ,CACN3T,MAAOsC,GACPsR,SAAUxE,GACVyE,cAAepF,GAAS,CAAEC,IAAKhE,GAAOiE,QAAS,QAGnDmF,SAAU,CACR7T,OAAQhM,GACRpnB,KAAMonB,IAER8f,gBAAiB,CACfnU,GAAI1L,GACJ0c,KAAM,CAAEjR,QAAS0C,GAAO0M,SAAU9a,GAAW2L,GAAIwP,KAEnD4E,SAAU,CACRj9B,OAAQkd,IAEVggB,UAAW7E,GACXviC,KAAMqnB,GACNggB,YAAa,CACXhE,GACAb,GACAG,GACAC,GACA3N,GACA8N,GACAN,GACAW,GACAV,GACA5E,GACAgF,GACAE,GACAG,GACAG,GACAT,GACAK,GACArF,GACAoF,IAEFqE,SAAU,CACRC,MAAO5R,GACP6R,KAAM7R,IAER8R,KAAM,CACJl7B,MAAO8a,GACP8L,MAAO,CACL5mB,MAAO6a,GACPsgB,WAAYnF,KAGhBnH,MAAO,CACLC,YAAajU,IAEfugB,QAAS,CACPD,WAAY9F,GAAS,CAAEC,IAAKrM,GAAOsM,QAAS,KAC5CpJ,aAAc,CACZgP,WAAYlS,GACZpC,OAAQqC,KAGZmS,UAAWxgB,GACXygB,eAAgB,CACd9U,GAAI0C,GACJvrB,OAAQ,CAAE6oB,GAAI4C,GAAOtC,GAAImC,IACzBsS,UAAWzgB,IAEb0gB,qBAAsB,CACpBC,MAAOtF,GACP,mBAAoBrb,IAEtB4gB,aAAc,CACZ,CAACztC,GAAiBC,WAAY8nC,GAC9B,CAAC/nC,GAAiBE,MA3oBJ,UA4oBd,CAACF,GAAiBG,IAAK86B,GACvB,CAACj7B,GAAiBI,YAAawoC,IAEjC8E,eAAgB,CACdhtC,KAAMqnC,GACNpnC,eAAgBs6B,GAChBr6B,KAAMgoC,IAER+E,cAAe,CACbC,MAAOpF,GACPqF,QAAShhB,GACT/U,QAAS2wB,IAEXqF,QAAS,CACPC,WAAYnhB,IAEdohB,MAAO,CACLrV,MAAOsC,IAETsO,KAAM,CACJl5B,KAAMuc,GACNggB,UAAW7E,GACXkG,OAAQrhB,IAEVshB,SAAUthB,GACVuhB,kBAAmB,CACjBnT,MAAO,CAAEzC,GAAIyC,IACboT,UAAW,CAAE7V,GAAI0C,IACjBoT,SAAU,CAAE9V,GAAI4C,GAAOtC,GAAImC,IAC3BsT,KAAM,CAAE/V,GAAI1L,GAAYgM,GAAImC,KAE9BuT,QAAS,CACPC,YAAapH,GAAS,CAAEC,IAAKpM,GAAMqM,QAAS,MAE9CmH,aAAczT,GACd0T,cAAe,CACb38B,MAAOipB,GACPpC,OAAQhM,IAEV+hB,kBAAmB,CACjBd,QAAS,CACPtV,GAAIwP,GACJlP,GAAIhM,IAEN/U,QAAS,CACPygB,GAAI4P,GACJtP,GAAI4P,KAGRmG,aAAc,CAAErF,KAAM3c,KAExBtd,MAAO,CACLC,QAAS,CACPzQ,KAAM,gBACNiR,MAAO,CACL83B,GAAI,SACJD,GAAI,SACJ33B,GAAI,SACJD,GAAI,SACJurB,GAAI,UAEN5rB,QAAS,CACPk/B,SAAU,IACVC,KAAM,IACNC,WAAY,IACZhC,MAAO,IACPiC,UAAW,IACX9+B,QAAS,IACT2I,KAAM,IACNo2B,OAAQ,IACRC,SAAU,IACV/+B,KAAM,IACNP,UAAW,IACXu/B,MAAO,MAGXz/B,OAAQ,CACN5Q,KAAM,gBACNiR,MAAO,CACL83B,GAAI,SACJD,GAAI,SACJ33B,GAAI,SACJD,GAAI,SACJurB,GAAI,UAEN5rB,QAAS,CACPu/B,SAAU,IACVt/B,UAAW,MAGf4zB,UAAW,CACT1kC,KAAM,gBACNiR,MAAO,CACL83B,GAAI,SACJD,GAAI,SACJ33B,GAAI,SACJD,GAAI,SACJurB,GAAI,UAEN5rB,QAAS,CACPo/B,WAAY,IACZhC,MAAO,IACP78B,QAAS,IACTC,KAAM,IACNP,UAAW,IACXu/B,MAAO,OAIbC,KAAM,CACJC,YAAa,SACbC,IAAK,SACLC,QAAS,QACTC,cAAe,SACfC,WAAY,QAEdC,OAAQ,CACNC,OAAQ,CACNrI,QAAS,CACPsI,KAAM,EACNC,QAAS,O,kCCpwBFC,OAbE/lC,IAAwD,IAAvD,UAAEuG,EAAS,SAAEy/B,EAAQ,OAAEx/B,EAAS,UAAiBxG,EACjE,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,cAC5B,OAAKw/B,EAKHr/B,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SAChDiyC,KAAOD,KALH,IAMD,EC8DV,MAAME,GAAejhC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAVH,CAAU,kFAOzBkhC,GAAclhC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAAVH,CAAU,wCAiDfmhC,I,YAAAA,GA5CEpmC,IAKiB,IALhB,UAChBuG,EAAY,oBAAmB,OAC/BC,EAAS,oBAAmB,QAC5BgB,EAAO,MACPlC,EAAQ,QACFtF,EACN,MAAM,WAAEiiB,GAAeP,KAWvB,OACE/a,eAACw/B,GAAW,CAAAnyC,SACV2S,eAAC0sB,GAAO,CACN9sB,UAAWA,EACX0tB,cAbN,SAAuBzjB,GACrBA,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKF,EAAM,KAAAE,OAAIc,EAAO,YAC3B6P,MAAO,sBAEX,EAOM7Q,OAAQA,EACR4tB,QACEztB,eAACsJ,GAAI,CACHxU,KAAK,OACL8K,UAAU,YACVyB,MACY,UAAV1C,EACIo4B,GAAaz1B,OAAO86B,SAASC,MAC7BtF,GAAaz1B,OAAO86B,SAASE,OAIvC9O,aACExtB,eAACu/B,GAAY,CAAAlyC,SACX2S,eAACo/B,GAAQ,CAACC,SAAUK,GAAgB7+B,GAAUhB,OAAQA,SAIhD,EC/GlB,MAAMW,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAAVH,CAAU,oBACbI,GACO,WAAlBA,EAAMu0B,QACFv0B,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,GAChCZ,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElC8U,GAAQrhC,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAATH,CAAS,2BAGnBI,GACsB,WAAlBA,EAAMu0B,QACDzL,aAAGC,QAAAC,aAAA,0CACOhpB,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,MAG5C+nB,aAAGM,QAAAJ,aAAA,oIACOhpB,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,WAUnDgd,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAAbH,CAAa,SACxBI,GACsB,WAAlBA,EAAMu0B,QACDzL,aAAGQ,QAAAN,aAAA,6CAIHF,aAAGgB,QAAAd,aAAA,+HAIOhpB,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,WAKnDqgC,GAAcvhC,KAAOwhC,OAAMthC,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,eAAbH,CAAa,6DAK3ByhC,GAAczhC,aAAO+3B,IAAsB73B,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,eAA7BH,CAA6B,oBAClCI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAM83B,KAElD6I,GAAS1hC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAAVH,CAAU,sEAMnB2hC,GAAmB3hC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,iDAAAyV,YAAA,eAATH,CAAS,mBAG5B4hC,GAAgB5hC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,eAATH,CAAS,8BAwFhB6hC,OA1EsB9mC,IAKF,IALG,UACpCuG,EAAS,UACT4zB,EAAS,QACTP,EAAU,SAAQ,OAClBpzB,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,qCAC5B,GAAIqR,iBAAOsiB,GACT,OAAO,KAGT,MAAM4M,EAAe1M,GAAgBF,GAErC,OACEvzB,gBAACO,GAAS,CAACyyB,QAASA,EAASrzB,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACzE4S,gBAACuc,GAAM,CAACyW,QAASA,EAAQ5lC,SAAA,CACvB4S,gBAAC4/B,GAAW,CAAAxyC,SAAA,CACV2S,eAAC2/B,GAAK,CAAC1M,QAASA,EAAQ5lC,SAAC,yBACZ,WAAZ4lC,EACCjzB,eAACy/B,GAAQ,CAAC5+B,QAAQ,aAAahB,OAAQC,IACrC,QAENE,eAACggC,GAAM,CAAA3yC,SACQ,WAAZ4lC,EACCmN,EAAa9xB,MACVmlB,GAAmD,IAAhBA,EAAM/iB,QAE1C1Q,eAAC+/B,GAAW,CACV9M,QAASA,EACTsC,MAAO6K,EACPvgC,OAAQC,IAGVE,eAAC+/B,GAAW,CACV9M,QAASA,EACTsC,MAAO,CAAC,CAAE/7B,KAAM,QAASkX,MAAO,IAChC7Q,OAAQC,IAIZE,eAACq2B,GAAqB,CACpBpD,QAASA,EACTsC,MAAO6K,EACPvgC,OAAQC,SAKhBE,eAAA,OAAA3S,SACE2S,eAACigC,GAAgB,CAAA5yC,SACb,CACA8B,GAAgB1E,IAChB0E,GAAgB3E,mBAChB2E,GAAgBzE,OAChByE,GAAgBxE,SACqByN,KAAIm8B,IACzC,MAAMgB,EAAQ/B,EAAUe,GACxB,OAASgB,EACPv1B,eAACkgC,GAAa,CAAA7yC,SACZ2S,eAACq2B,GAAqB,CACpBpD,QAAQ,WACRsC,MAAO,CAACA,GACRhB,SAAUA,EACV10B,OAAQC,KALQy0B,GAQlB,IAAI,UAIJ,ECpJhB,MAAM8L,GAAmB/hC,aAAO6hC,IAA6B3hC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAApCH,CAAoC,2CAMvDgiC,GAAYhiC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAATH,CAAS,oDAGZI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAoDzC0V,OAzCQlnC,IAKY,IALX,UACtBuG,EAAS,UACT4zB,EAAS,YACTgN,EAAW,OACX3gC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,qBAC5B,OAAOqR,iBAAOsiB,GAAa,KACzBxzB,eAAC0sB,GAAO,CACNY,cAAekT,EACfjT,UAAU,MACVC,aACExtB,eAACqgC,GAAgB,CAAC7M,UAAWA,EAAW3zB,OAAQC,IAElD2tB,QACEztB,eAACsgC,GAAS,CAAC1gC,UAAWA,EAAW,cAAaE,EAAWzS,SACrD,CACA8B,GAAgB1E,IAChB0E,GAAgB3E,mBAChB2E,GAAgBzE,OAChByE,GAAgBxE,SACqByN,KAAIm8B,IACzC,MAAMgB,EAAQ/B,EAAUe,GACxB,OAASgB,EACPv1B,eAAA,MAAA3S,SACE2S,eAACq2B,GAAqB,CACpBpD,QAAQ,gBACRsC,MAAO,CAACA,GACRhB,SAAUA,EACV10B,OAAQC,KALHy0B,GAQP,IAAI,MAId10B,OAAQC,GAEX,ECZY2gC,OA9CGpnC,IAOgB,IAPf,SACjBhM,EAAQ,UACRuS,EAAS,KACTxR,EAAI,OACJyR,EAAS,SAAQ,GACjB4mB,EAAE,KACFzrB,EAAO,WACD3B,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gBACrB6gC,EAASC,GAAc3wB,oBAAS,GACjC+Q,EAAUC,gBACV,WAAE1F,GAAeP,KAavB3K,qBAAU,KACJswB,IACF3f,EAAQwB,KAAKkE,GACbka,GAAW,GACb,GACC,CAACD,IAEJ,MAAME,EAAuB,QAAT5lC,EAAiB6lC,KAAUC,KAE/C,OACE9gC,eAAC4gC,EAAW,CACVhhC,UAAWA,EACX,cAAaE,EACbjY,GAAIuG,EACJiuB,QAzBJ,SAA0BxS,GACxBA,EAAEyS,UACFzS,EAAE0lB,iBACFjU,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAK3R,EAAI,UACdsiB,MAAM,0BAAD3Q,OAA4B0mB,KAEnCka,GAAW,EACb,EAiBIla,GAAIA,EAAGp5B,SAENA,GACW,E,6BCxClB,MAAMmT,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oBAAAyV,YAAA,gBAAVH,CAAU,qJACbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAG3CnsB,GACPg4B,GAAS,CACPC,IAAKj4B,EAAMC,MAAM2C,OAAO2a,IAAIC,UAC5B0a,QAAS,MAEEl4B,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAShD2yC,GAAyBC,aAAW,CACxCC,KAAM,CACJhO,QAAS,OACTiO,OAAQ,EACRC,eAAgB,kBAJWH,CAM5BI,MAEGC,GAAa,CACjBJ,KAAM,CACJK,MAAO,GACPC,OAAQ,GACRC,QAAS,GAEXC,WAAY,CACVD,QAAS,EACT,YAAa,CACXE,UAAW,qBACXrgC,MAAO01B,GAAaz1B,OAAO2a,IAAIob,WAC/B,aAAc,CACZh2B,MAAO01B,GAAaz1B,OAAO2a,IAAIob,WAC/BT,QAAS,GACT,aAAc,CACZ5/B,gBAAiB+/B,GAAaz1B,OAAO2a,IAAIsO,KACzCqM,QAAS,GACT1O,OAAQ,SAGZ,aAAc,CACZlxB,gBAAiB+/B,GAAaz1B,OAAO2a,IAAIwO,MACzCmM,QAAS,EACT1O,OAAQ,SAGZ,aAAc,CACZ7mB,MAAO01B,GAAaz1B,OAAO2a,IAAIqO,MAC/BsM,QAAS,GACT,aAAc,CACZ5/B,gBAAiB+/B,GAAaz1B,OAAO2a,IAAIsO,KACzCqM,QAAS,GACT1O,OAAQ,UAIdyZ,MAAO,CACLL,MAAO,GACPC,OAAQ,GACRK,UAAW,QAEbC,MAAO,CACL1qC,aAAc,GACd+wB,OAAO,eAADnoB,OAAiBg3B,GAAaz1B,OAAO2a,IAAIwO,OAC/CzzB,gBAAiB+/B,GAAaz1B,OAAO2a,IAAIwO,MACzCmM,QAAS,GAEXkL,QAAS,CAAC,EACVva,SAAU,CAAC,GAGPwa,GAAmBf,aAAWK,GAAXL,CAAuBgB,MAE1CC,GAA4BjB,aAChCtlB,gBAAM,CAAC,EAAG2lB,GAAY,CACpBI,WAAY,CACV,YAAa,CACX,WAAY,CACV,WAAY,CACV5gC,QAAS,YAKjB8gC,MAAO,CACL,WAAY,CACV9gC,QAAS,OACTQ,MAAO01B,GAAaz1B,OAAO2a,IAAIC,UAC/BgmB,WAAW,GAADniC,OAAKg3B,GAAan4B,MAAMC,QAAQzQ,KAAI,kCAC9C+zC,SAAU,aAhBgBnB,CAoBhCgB,MA0DaI,OA3CA/oC,IAUD,IAVE,UACduG,EAAS,SACT6oB,EAAQ,WACR4Z,GAAa,EAAK,aAClBC,EAAY,KACZl0C,EAAI,SACJokC,EAAQ,iBACR+P,GAAmB,EAAK,OACxB1iC,EAAS,SAAQ,eACjB2iC,EAAiB,SACXnpC,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,YACtB,WAAEyb,GAAeP,KAUvB,MAAM0nB,EAAgBF,EAClBN,GACAF,GACJ,OACE/hC,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAAC+gC,GAAsB,CACrB2B,QACE1iC,eAACyiC,EAAa,CACZjQ,SAhBV,SAAwB3oB,GACtByR,EAAW,CACTxzB,MAAM,GAADiY,OAAK3R,EAAI,WACdsiB,MAAM,cAAD3Q,OAAgB0oB,EAAW,WAAa,YAE/C+J,EAAS3oB,EACX,EAWUi4B,QAASrZ,EACT,iBAAA1oB,OAAgBD,EAAU,WAC1BynB,SAAU8a,IAGdv6C,MAAOw6C,EACPE,eAAgBA,KAER,EC7JhB,MAAMG,GAAQrkC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAVH,CAAU,sCAKlBskC,GAAatkC,aAAOmhC,IAASjhC,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,gBAAhBH,CAAgB,yBAsDpBukC,OA5CkBxpC,IAA8C,IAA7C,UAAEuG,EAAS,OAAEC,EAAS,UAAiBxG,EACvE,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,iCACtB,WAAEyb,GAAeP,MACjB,UAAE7P,EAAS,gBAAEoX,GAAoBzB,KACjChrB,EAAmBqV,EAAUrV,iBAE7BitC,EAAkBtlC,sBACtBulC,oBAASC,IACP1gB,EAAgB,CACd,CAAChvB,GAAaV,cAAeowC,GAC7B,GACD,KACH,IAaF,OACEhjC,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACoiC,GAAM,CACL3Z,SAAU5yB,EACVysC,aACEriC,gBAAC0iC,GAAK,CAAAt1C,SAAA,CAAC,8BAEL2S,eAAC4iC,GAAU,CAAC/hC,QAAQ,0BAGxBzS,KAAK,8BACLokC,SArBN,SAAwB3oB,GACtB,MAAMo5B,GAA2BptC,EACjCitC,EAAgBG,GAChB3nB,EAAW,CACTzR,IACA/hB,MAAO,+CACP4oB,MAAM,+BAAD3Q,OAAiCkjC,IAE1C,EAcMpjC,OAAQC,EACR0iC,eAAe,SAEb,EClDKU,OAdF7pC,IAA4D,IAA3D,OAAEU,EAAS,sBAAqB,OAAE8F,EAAM,UAAE7F,GAAWX,EACjE,OAAKwG,GAAW7F,EAKdgG,eAAA,QAAMwrB,SAAUxxB,EAAU3M,SAAEwM,GAAgB,CAAEE,SAAQC,gBAJ/C,IAImE,ECwB/DmpC,OArBU9pC,IAAoD,IAAnD,UAAEuG,EAAS,OAAEC,EAAS,SAAQ,KAAE7E,GAAa3B,EACrE,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,4BAC5B,OAAK2J,OAAOmH,OAAO/lB,GAA2B8e,SAAS1O,GAKrDgF,eAACsJ,GAAI,CACHxU,KACEkG,IAASpQ,EAA0BI,SAC/B,UACAgQ,IAASpQ,EAA0BG,GACnC,KACAiQ,EAAK9T,cAEX0Y,UAAWA,EACXC,OAAQC,IAbH,IAcL,E,UCzBN,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAVH,CAAU,+DAKtBkhC,GAAclhC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAAVH,CAAU,2BAGxB8kC,GAAW9kC,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAZH,CAAY,8BAClBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAC5Bxd,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAElD+jC,GAAe/kC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAAVH,CAAU,sBA6BhBglC,I,GAAAA,GAjBcjqC,IAKf,IALgB,SAC5BhM,EAAQ,UACRuS,EAAS,MACT3G,EAAQ,WAAU,OAClB4G,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,2BAC5B,OACEI,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD2S,eAACw/B,GAAW,CAAAnyC,SACV2S,eAACojC,GAAQ,CAACtuC,KAAMmE,EAAO4G,OAAQC,MAEjCE,eAACqjC,GAAY,CAAAh2C,SAAEA,MACL,EC7BhB,MAAMmT,GAAYlC,KAAOg/B,MAAK9+B,WAAA,CAAAxV,YAAA,mBAAAyV,YAAA,eAAZH,CAAY,sBAGxBilC,GAAWjlC,KAAOklC,GAAEhlC,WAAA,CAAAxV,YAAA,kBAAAyV,YAAA,eAATH,CAAS,8BAERI,GAASA,EAAMC,MAAM2C,OAAOg8B,MAAMrV,QAG9Cwb,GAAWnlC,KAAOolC,GAAEllC,WAAA,CAAAxV,YAAA,kBAAAyV,YAAA,eAATH,CAAS,2EAQpBqlC,GAAWrlC,KAAOslC,GAAEplC,WAAA,CAAAxV,YAAA,kBAAAyV,YAAA,eAATH,CAAS,mIAWpBulC,GAAevlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAAVH,CAAU,SAC3BI,IACA,GAAIA,EAAMolC,YACR,OAAOtc,aAAGC,QAAAC,aAAA,yCAGZ,IA0JWqc,OA7ID1qC,IAWA,IAXC,aACb2qC,GAAe,EAAI,QACnBC,EAAO,UACPrkC,EAAS,QACTskC,EAAU,GAAE,gBACZC,EAAkB,CAAC,EAAC,KACpB/5B,EAAO,GAAE,YACTg6B,EAAcA,MAAA,CAAS,IAAC,aACxBC,EAAe,CAAC,EAAC,aACjBC,GAAe,EAAK,OACpBzkC,EAAS,UACHxG,EAEN,MAAMkrC,EAAoBl1B,mBAAQ,IAAM60B,GAAS,CAACA,IAC5CM,EAAiBn1B,mBAAQ,IAAMjF,GAAM,CAACA,IACtCq6B,EAAuBp1B,mBAAQ,IAAMg1B,GAAc,CAACA,KAEpD,cACJK,EAAa,kBACbC,EAAiB,aACjBC,EAAY,KACZC,EAAI,WACJC,GACEC,oBACF,CACEb,QAASK,EACTn6B,KAAMo6B,EACNQ,eAAgBhB,EAChBiB,aAAcX,EACdD,aAAcI,EACdS,mBAAoBjsC,GACXk0B,IAAM9d,SACX,SACKpW,KACAkrC,KAEL,CAAClrC,EAAOkrC,KAIdgB,cACAC,cAGF,OAAI91B,kBAAQ40B,IAAY50B,kBAAQlF,GACvB,KAIPnK,gBAACO,GAAS,CACRZ,UAAWA,EACX,iBAAAG,OAAgBF,EAAM,aAClB6kC,IAAer3C,SAAA,CAEnB2S,eAAA,WAASJ,UAAU,iBAAgBvS,SAChC42C,GAAO,GAAAlkC,OAAOF,EAAM,YAEvBG,eAAA,SAAA3S,SACGu3C,EAAaxsC,KAAIitC,GAChBrlC,eAAA,SAAQqlC,EAAYC,sBAAqBj4C,SACtCg4C,EAAY36B,QAAQtS,KAEjBmnB,IAIA,MAAMukB,GAAex0B,kBAAQiQ,EAAOgmB,eAC9BC,EAAiBjmB,EAAO8N,OAAO,UACrC,OACErtB,eAACyjC,GAAQ,IACHlkB,EAAOkmB,eACTlmB,EAAOmmB,qBAAqB,CAG1B9lC,UAAY2f,EAAe3f,aAE9BvS,SAED2S,eAAC6jC,GAAY,CACXC,YAAaA,EACbznB,QAASxS,GACP87B,iBAAOpmB,EAAQ,gBAAiB,CAAE1V,IAAG0V,WACtClyB,SAEA22C,IAAiBzkB,EAAOylB,cACvBhlC,eAACsjC,GAAoB,CACnBrqC,MACEsmB,EAAOqmB,SACHrmB,EAAOsmB,aACL,cACA,aACF,WAENhmC,OAAQA,EAAOxS,SAEdm4C,IAGHA,KAGK,UAOvBxlC,eAAA,YAAW2kC,IAAmBt3C,SAC3Bw3C,EAAKzsC,KAAI0tC,IACRhB,EAAWgB,GAET9lC,eAACujC,GAAQ,IAAKuC,EAAI1B,YAAYA,EAAY0B,IAAKz4C,SAC5Cy4C,EAAIC,MAAM3tC,KAAI4tC,GAEXhmC,eAAC2jC,GAAQ,CACPtnB,QAASxS,GACP87B,iBAAOK,EAAKzmB,OAAQ,cAAe,CACjC1V,IACAi8B,IAAKA,EACLvmB,OAAQymB,EAAKzmB,YAGbymB,EAAKC,aAAa,CAGpBrmC,UAAYomC,EAAKzmB,OAAe3f,YAChCvS,SAED24C,EAAK3Y,OAAO,qBAQjB,ECxLhB,MAAM6Y,GAAc5nC,aAAOylC,IAAMvlC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAbH,CAAa,sWAEdI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAGhD7rB,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAKpD7rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAQ1C9/B,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAKxD7rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAO3Cd,GAAK,GAAAqB,OACfrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAGhD7rB,GAASA,EAAMC,MAAM05B,YAAYnB,KAqDzCiP,OAnCgB9sC,IAUjB,IAVkB,aAC9B2qC,GAAe,EAAI,UACnBpkC,EAAS,QACTskC,EAAO,cACPkC,EAAgB,GAAE,YAClBhC,EAAW,KACXiC,EAAI,aACJ/B,GAAe,EAAK,OACpBtY,EAAS,GAAE,OACXnsB,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,8BACtBwkC,EAAeh1B,mBACnB,MACE+2B,gBACApa,YAEF,CAACoa,EAAepa,IAElB,OAAa,OAAJqa,QAAI,IAAJA,KAAMxrC,OACbmF,eAACkmC,GAAW,CACVtmC,UAAWA,EACXskC,QAASA,EACT,cAAapkC,EACbsK,KAAMi8B,EACNxmC,OAAQC,EAERkkC,aAAcA,EACdI,YAAaA,EACbC,aAAcA,EACdC,aAAcA,IAEd,IAAI,ECtGH,MAAMgC,GAAuB,CAClC,oBACA,wBACAv/C,QAAO,CAACC,EAAQC,KAChBD,EAAOC,GAAOA,EAAIC,cACXF,IACN,CAAC,GAuBSu/C,IArB6B,CACxC,eACA,yBACA,uBACA,gBACA,0BACA,aACA,mBACA,QACA,wBACA,oBACA,oCACA,iBACAx/C,QAAO,CAACC,EAAQC,KAChBD,EAAOC,GAAOA,EACPD,IACN,CAAC,GAK2B,GCTzBwZ,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAVH,CAAU,sCAItBkoC,GAAOloC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAATH,CAAS,sCAIhBmoC,GAAWnoC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAATH,CAAS,uDAGbI,GAASA,EAAM8gB,QAEtB2K,GAAoB7rB,aAAOsrB,IAAYprB,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAAnBH,CAAmB,8DACjCI,GAAK,eAAAqB,OAAmBrB,EAAMC,MAAM2C,OAAO4mB,UAKjDwe,GAAkBpoC,KAAOqoC,GAAEnoC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAATH,CAAS,oCAClBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtDmnC,GAAmBtoC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,eAAVH,CAAU,yCAI7B8rB,GAAwB9rB,aAAO2rB,IAAgBzrB,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,eAAvBH,CAAuB,oBAG/CuoC,GAAkBvoC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAAXH,CAAW,6LACnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAErCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAE1B5rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAStDqnC,GAASxoC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAXH,CAAW,uBAGpByoC,GAAiBzoC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAATH,CAAS,sBAyIjB0oC,OA7Hc3tC,IAKf,IALgB,UAC5BuG,EAAS,KACTymC,EAAI,cACJY,EAAgBV,GAAe,OAC/B1mC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,6BACtB,UAAEqL,GAAc2V,KAChBzM,EAAalJ,EAAUhE,KACvBmH,GAAwB,OAAV+F,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,cAAe,GACzC64B,EAA8BA,CAClCC,EACA/qC,IAEA+qC,EAAkB74B,MAChBkD,GAAKA,EAAE3pB,KAAOuU,EAAKgrC,gBAGvB,IAAInmC,EACJ,IAAKqO,kBAAQ+2B,GAAO,CAClB,MAAOn/B,EAAMmgC,GAAax1B,oBACxBw0B,GACAiB,KAAOJ,EAA4B74B,EAAai5B,KAI5CC,EAAoBF,EAAUxsC,OAChCosC,EAAgB,EAChBA,EACEO,EAAqBtgC,EAAKmlB,MAAM,EAAGkb,GAAmBnvC,KAAImW,IAC9D,MAAM0c,EAAaic,EACjB74B,EACAE,GAEF,MAAO,CACLk5B,aAAcl5B,EAAE64B,cAAcM,WAC9Bla,aAAcjf,EAAEvlB,YAChBykC,QACEztB,eAACmqB,GAAiB,CAChBf,QAAS7a,EAAEvlB,YACXqX,IAAe,OAAV4qB,QAAU,IAAVA,OAAU,EAAVA,EAAYM,YACjB1rB,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAc,OAAVkrB,QAAU,IAAVA,OAAU,EAAVA,EAAYpjC,MAG1C,IAIG8/C,EAA0BN,EAAUxsC,OACtC,CACE4sC,aAAc,YACdz+C,YAAa,2BACbwkC,aACEvtB,gBAAA,OAAA5S,SAAA,CACE4S,gBAACymC,GAAe,CAAAr5C,SAAA,CAAC,aAEf2S,eAAA,SAAM,mBAGRA,eAAA,MAAA3S,SACGg6C,EAAUjvC,KAAI,CAACkvC,EAAG/d,IACjBvpB,eAAA,MAAA3S,SAAoCi6C,EAAEt+C,aAA7Bs+C,EAAEF,eAAiB7d,UAKpCkE,QACExtB,gBAAC2mC,GAAgB,CACf,iBAAA7mC,OAAgBD,EAAU,4BAA2BzS,SAAA,CAErD2S,eAACoqB,GAAqB,CAACvqB,OAAQC,IAC9BunC,EAAUxsC,OAAS,EAClBmF,eAAC6mC,GAAe,CAAAx5C,SAAEg6C,EAAUxsC,SAC1B,SAIV,KAGE+sC,EAAS1gC,EAAKmlB,MAAMkb,GAE1BtmC,EACEhB,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACwmC,GAAI,CAAAn5C,SACF8mC,kBAAQ,IAAIqT,EAAoBG,IAA0BvvC,KACzD,CAACkvC,EAAG/d,EAAOse,IACT7nC,eAACymC,GAAQ,CAAsBjnB,MAAOqoB,EAAUhtC,OAAS0uB,EAAMl8B,SAC7D2S,eAAC0sB,GAAO,CACNa,UAAU,SACVC,aAAc8Z,EAAE9Z,aAChB3tB,OAAQC,EACR2tB,QAAS6Z,EAAE7Z,WALA6Z,EAAEG,oBAWpBG,EAAO/sC,QACRmF,eAAC0sB,GAAO,CACNa,UAAU,SACVC,aACExtB,eAAC+mC,GAAc,CAAA15C,SACZu6C,EAAOxvC,KAAIkvC,GACVtnC,eAAA,MAA0B,wBAAsB,OAAM3S,SACnDi6C,EAAEt+C,aADIs+C,EAAEF,mBAMjBvnC,OAAQC,EACR2tB,QAASxtB,gBAAC6mC,GAAM,CAAAz5C,SAAA,CAAC,IAAEu6C,EAAO/sC,cAKpC,CAEA,OACEmF,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACtD4T,GACS,EC7IT,MA6CM6mC,GAAmB9pC,UAIO,IAJA,YACrCyN,EAAW,OACXC,EAAM,SACNC,GACiB+B,EACjB,GAAI,aAAchC,IAAWA,EAAO1W,SAAS6F,OAC3C,OAAOiP,aAAiB,gFAAD/J,OAC2D8U,KAAKC,UACnFpJ,KAON,aAHuBpB,GAAIsB,IAAI,IAAD7L,OAAK4L,EAAQ,wBAAwBD,EAAQ,CACzEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,IAAI,EAGT29B,GAAoB/pC,UAUZ,IAVmB,YACtCyN,EAAW,OACXC,EAAM,SACNC,GAODyF,EAQC,aAPuB9G,GAAIsB,IAAI,IAAD7L,OACxB4L,EAAQ,2BACZD,EACA,CACEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAGxBrB,IAAI,ECrEhB5J,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAVH,CAAU,MACtB0pC,GAAkB1pC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,gBAAVH,CAAU,yDAK5Bke,GAASle,KAAO2pC,GAAEzpC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAATH,CAAS,mGAEPI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAGlCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAErDgpC,GAAyB5pC,aAAOukC,IAAyBrkC,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,gBAAhCH,CAAgC,uBAGzDie,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAAVH,CAAU,yCACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAG1C6d,GAAY7pC,KAAOkT,EAAChT,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAARH,CAAQ,sCAIpB0d,GAAe1d,KAAOkT,EAAChT,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAARH,CAAQ,+EAClBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAC1Bxd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQkJ,OAKtDigC,GAAW9pC,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAZH,CAAY,mCAClBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAGrC4d,GAAmB/pC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAVH,CAAU,oHAUjBI,GAAK,eAAAqB,OAAmBrB,EAAM4f,MAAK,OAE/CgqB,GAAsBhqC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,gBAAVH,CAAU,2DAKhBI,GAClBA,EAAM6pC,qBACF7pC,EAAMC,MAAM2C,OAAO2a,IAAIic,MACvBx5B,EAAM8pC,YACN9pC,EAAMC,MAAM2C,OAAO2a,IAAIyb,QACvB,gBAGFiI,GAAQrhC,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,iBAAbH,CAAa,2CAIrBmqC,GAAcnqC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,iBAAVH,CAAU,yHACnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAK1Bxd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQo9B,QAGtDqM,GAAYpqC,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,iBAAZH,CAAY,kDACnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAIrCke,GAAYrqC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,iBAAXH,CAAW,mDACZI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAGhDw6C,GAActqC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,iBAAXH,CAAW,gCACdI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAEhDy6C,GAAUvqC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,iBAAXH,CAAW,gCACVI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAEhD06C,GAASxqC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,iBAAXH,CAAW,oEAKpByqC,GAAkBzqC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,iBAATH,CAAS,+BAK3B0qC,GAAU1qC,KAAOi/B,OAAM/+B,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,iBAAbH,CAAa,kEAClBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAE1Bxd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAItDypC,GAAiB3qC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,iBAAVH,CAAU,uGAO3BuwB,GAAevwB,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,iBAAZH,CAAY,6BACtBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGrCgtB,GAAc5qC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,iBAAXH,CAAW,4DAKzB6qC,GAAgB7qC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,iBAAXH,CAAW,yBAG3B8qC,GAAe9qC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,iBAAVH,CAAU,sCAIzB+qC,GAAsB/qC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,iBAAVH,CAAU,uFAMhCgrC,GAAchrC,aAAO,UAASE,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,iBAAhBH,CAAgB,0FACxBI,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAC5BrB,EAAM6qC,YACJ7qC,EAAMC,MAAM2C,OAAO2a,IAAIC,UACvBxd,EAAMC,MAAM2C,OAAO2a,IAAIuU,aAEX9xB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAKhDkf,GAAYlrC,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,iBAAZH,CAAY,oCACnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGrCutB,GAAanrC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,iBAAVH,CAAU,8FAQvBorC,GAAeprC,aAAO6kC,IAAiB3kC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,iBAAxBH,CAAwB,uCAKvCqrC,GAAgBrrC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,iBAAXH,CAAW,mEAChBI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAKhDw7C,GAAYtrC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,iBAAXH,CAAW,qCAEZI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU7zB,QAAQO,UAExDqqC,GAAevrC,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,iBAAjBH,CAAiB,qHAKzBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAC1Bzd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAIxDqqC,GAAaxrC,aAAO6nC,IAAuB3nC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,iBAA9BH,CAA8B,0tBAI/BI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAkB9B5rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YAIhC9xB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YAI5B9xB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YAMpC9xB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIyb,UAQhCh5B,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAgBrD7rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QA44BrCyf,OA11Be1wC,IAOhB,IAPiB,UAC7BuG,EAAS,KACTwK,EAAI,OACJvK,EAAS,SAAQ,WACjBmqC,GAAa,EAAI,aACjB1F,GAAe,EAAI,cACnB2F,GACM5wC,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,8BAEtB,WAAEyb,GAAeP,MAEjB,QAAEtJ,GAAYy4B,eACdC,EAAgB14B,IAAYxoB,EAAcE,aAE1CkS,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxD+uC,EAAsB,OAAL/uC,QAAK,IAALA,OAAK,EAALA,EAAqB,YAEtCsQ,EAAWtO,cAAYpE,GAASiT,cAAIjT,EAAO,8BAC3CwS,EAAcpO,cAAYpE,GAASiT,cAAIjT,EAAO,2BAE9C,gBACJqpB,EAAe,UACfpX,EAAS,uBACTyT,EAAsB,mBACtB8D,EAAkB,oBAClBV,GACElB,KACEzM,EAAa/E,mBAAQ,IAAMnE,EAAUhE,MAAM,CAACgE,IAC5CmD,EAAcgB,mBAAQ,KAAgB,OAAV+E,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,cAAe,IAAI,CAC/D+F,IAEI7e,EAAO8Z,mBAAQ,IAAMnE,EAAU5V,aAAaC,MAAM,CAAC2V,IAEnD+E,EAAS5S,cAAYpE,GAASiT,cAAIjT,EAAO,aAGzCoxC,EAAcC,6BAIZC,OAAQC,GAA2BC,uBAAY3C,GAAkB,CACvE4C,UAAWA,KAETL,EAAYM,kBAAkB,cAAc,EAE9CthB,QAAUuhB,GAAgBC,QAAQxgC,MAAMugC,MAElCL,OAAQO,GAA4BL,uBAAY1C,GAAmB,CACzE2C,UAAWA,KAETL,EAAYM,kBAAkB,cAAc,EAE9CthB,QAAUuhB,GAAgBC,QAAQxgC,MAAMugC,MAGnCG,EAAoB9Y,GAAyBjiB,mBAAS,IAEvDg7B,EAAyBxtC,uBAC7BQ,eACEugB,EACA0sB,EACA1vB,GAEI,IADJ2vB,EAAMtwC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GAEN2gB,EAAMe,UACN,MAAM0O,EAAa,CACjBmgB,SAAU5sB,EAASK,QAAU,GAC7BwsB,WAAY7sB,EAAS12B,GACrBwjD,cACE9sB,EAASA,WAAa3zB,EAA0BG,GAC5CwzB,EAAS+sB,IACT/sB,EAASgtB,UACfC,aAAcjtB,EAASA,SACvBmR,4BAA6Bwb,EAAS,GAAKD,EAC3CQ,wBAAyB,EACzBpgB,oBAAqB6f,EAASD,EAAmB,GACjDS,kBAAmBntB,EAASxoB,OAC5Bka,OAAQA,EACRjW,WAAW,IAAInB,MAAO6uC,YAElBiE,EAAc,IACfhtB,EACHqM,aACAvZ,QAAS8M,EAASK,QAAUnN,EAC5BK,UAAWyM,EAASzM,WAGtByJ,EAAMgU,iBACNib,EAAuB,CACrB/+B,cACAC,OAAQigC,EACRhgC,aAGF2P,EAAW,CACTzR,EAAG0R,EACHzzB,MAAO,6BACP4oB,MAAM,GAAD3Q,OACHmrC,EAAS,yBAA2B,WAAU,qBAAAnrC,OAC5BkrC,EAAgB,kBAAAlrC,OAAiBwe,EAAS12B,KAElE,GACA,CACE4jB,EACAgG,EACA9F,EACA2P,EACAqD,EACA1O,EACAu6B,IAIEoB,EAA0BpuC,uBAC9BQ,MACE6tC,EACAtwB,KAEAA,EAAMgU,iBACNub,EAAwB,CACtBr/B,cACAC,OAAQ,CACNogC,aAAcD,EAAmBC,cAEnCngC,YACA,GAEJ,CAACF,EAAaE,EAAUm/B,IAGpB9b,EAAwBxxB,uBAC5B,CACE+gB,EACA0sB,EACA1vB,KACI,IAADwwB,EACHxwB,EAAMe,UACN,MAAMuvB,EAAyC,QAAvBE,EAAGxtB,EAASlN,mBAAW,IAAA06B,OAAA,EAApBA,EAAsBz9B,MAC9C+f,GACCA,EAAKpe,SAAWA,GAChBoe,EAAKqB,8BAAgCub,GACrC5c,EAAK+c,aAAe7sB,EAAS12B,KAE7BgkD,EACFD,EAAwBC,EAAoBtwB,GAE5CyvB,EAAuBzsB,EAAU0sB,EAAkB1vB,EACrD,GAEF,CAACqwB,EAAyBZ,EAAwB/6B,IAG9C+hB,EAA0Bx0B,uBAC9B,CACE+gB,EACA4T,EACA5W,KAEAyvB,EAAuBzsB,EAAU4T,EAAa5W,GAAO,EAAK,GAE5D,CAACyvB,IAEGgB,EAAmBxuC,uBACvB1D,IAMO,IANN,EACC+P,EAAC,MACDnB,GAID5O,EACC+P,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKD,EAAU,qBACpB4Q,MAAM,WAAD3Q,OAAa2I,EAAMta,KAAI,WAAA2R,OAAU2I,EAAM4iC,MAC5C,GAEJ,CAACxrC,EAAYwb,IAGTiqB,EAAgB/nC,uBACpBwQ,IAMO,IACDi+B,EACFC,GARH,EACCriC,EAAC,OACD0V,GAIDvR,EAQKuR,EAAOqmB,SACLrmB,EAAOsmB,cACTqG,EAAuB,GACvBD,EAAW,aAEXC,EAAuB,CAAC,CAAErkD,GAAI03B,EAAO13B,GAAI43B,MAAM,IAC/CwsB,EAAW,cAGbC,EAAuB,CAAC,CAAErkD,GAAI03B,EAAO13B,GAAI43B,MAAM,IAC/CwsB,EAAW,YAGbpiC,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAM,4BAADiY,OAA8B0R,EAAO,KAAA1R,OAAIwf,EAAO13B,GAAE,gBACvD6oB,MAAM,WAAD3Q,OAAawf,EAAO13B,GAAE,eAAAkY,OAAcksC,KAE3C3pB,EAAgB,CACd,CAAChvB,GAAaG,eAAgB,CAC5B,CAACH,GAAaT,MAAOq5C,IAEvB,GAEJ,CAACz6B,EAAS6Q,EAAiBhH,IAGvB6wB,EAAyB3uC,uBAC7BkQ,IAMO,IANN,EACC7D,EAAC,MACDnB,GAIDgF,EACC7D,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAM,iDACN4oB,MAAM,cAAD3Q,OAAgB2I,EAAMta,KAAI,sBAC/B,GAEJ,CAACktB,IAGG8wB,EAA0B/8B,mBAAQ,IAC/B,CACL,CACEg9B,SAAU,WACV9G,gBACA/oB,OAAQ,OACR8vB,KAAMl7B,IAA6C,IAA5C,KAAE40B,GAAoC50B,EAC3C,MAAM,IACJk6B,EAAG,SACH/sB,EAAQ,MACRD,EAAK,qBACLiqB,EAAoB,SACpBtzC,EAAQ,WACRs3C,GACEvG,EAAKF,IAAI0G,SACPnvB,EAAe1lB,oBAAU4mB,GAAU3mB,cACnC2kC,EACJhe,IAAa3zB,EAA0BG,GACrCiV,eAAC6pC,GAAY,CACX,iBAAA9pC,OAAgBD,EAAU,KAAAC,OAAIkN,oBAC5B+4B,EAAKF,IAAI0G,SAASp+C,OAEpBA,KAAM0R,EACN2mB,GAAI1E,EAAoB,CACtBV,gBAAiBz0B,EAAqBG,YACtC4nB,oBAAoB,EACpBkN,kBAAmB,CACjB,CAACvuB,GAAaD,cAAgBk5C,EAAkB,CAACA,GAAN,MAE5Cl/C,SAEH2S,eAACooC,GAAQ,CAACtzC,KAAK,gBAAgB+K,OAAQC,MAEvCwrC,EACFrrC,gBAACkoC,GAAS,CACR,iBAAApoC,OAAgBD,EAAU,KAAAC,OAAIkN,oBAC5B+4B,EAAKF,IAAI0G,SAASp+C,OAEpB0N,KAAMwvC,EACNjvB,QAASxS,IACPmiC,EAAiB,CAAEniC,IAAGnB,MAAOs9B,EAAKF,IAAI0G,UAAW,EAEnDC,IAAI,sBACJvf,OAAO,SACP,8BAA4B,OAAM7/B,SAAA,CAElC2S,eAACooC,GAAQ,CAACtzC,KAAK,gBAAgB+K,OAAQC,IACvCE,eAAA,QAAMJ,UAAU,iBAAgBvS,SAAEi+C,OAElC,KACN,OACErrC,gBAACooC,GAAgB,CACfG,cAAevzC,EAAS4F,OACxB0tC,qBAAsBA,EACtBjqB,MAAOA,EACP,wBAAsB,OAAMjxB,SAAA,CAE5B2S,eAACsoC,GAAmB,CAClBE,cAAevzC,EAAS4F,OACxB0tC,qBAAsBA,EAAqBl7C,SAE3C2S,eAACmjC,GAAgB,CACfnoC,KACIsjB,GAASjB,IAAiBzyB,EAA0BE,MAClDF,EAA0BI,SAC1BqyB,EAENxd,OAAQC,MAGXy8B,IACgB,EAGvB38B,UAAW,gBAEb,CACEysC,SAAU,YACV9G,gBACA/oB,OAAQ,IACR8vB,KAAMp6B,IAA6C,IAA5C,KAAE8zB,GAAoC9zB,EAC3C,MAAM,SAAEqM,GAAaynB,EAAKF,IAAI0G,SAC9B,OACExsC,eAAC2oC,GAAS,CAAAt7C,SACPkxB,IAAa3zB,EAA0BG,GAAE,IAAAgV,OAClCimC,EAAKt1B,OACTs1B,EAAKt1B,OACC,EAGhB9Q,UAAW,aAEb,CACEysC,SAAU,OACV9G,gBACA/oB,OAAQ,QACR8vB,KAAM35B,IAA6C,IAA5C,KAAEqzB,GAAoCrzB,EAC3C,MAAM,UACJ6gB,EAAS,aACTkZ,EAAY,WACZH,EAAU,aACVI,EAAY,IACZrB,GACEtF,EAAKF,IAAI0G,SAMPp+C,EAAO43C,EAAKt1B,MAAMk8B,QAAQ,oBAAoB,CAACv0B,EAAO/G,IAC1Du7B,mBAAmBC,OAAOC,aAAa52B,SAAS7E,EAAO,QAGnD07B,EAA2B,OAAb/C,QAAa,IAAbA,OAAa,EAAbA,EAAe37B,MAAK2+B,GAAc,OAATA,EAAEplD,KAE/C,OACEoY,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACG2/C,EACC/sC,gBAAC+b,GAAY,CACX,iBAAAjc,OAAgBD,EAAU,KAAAC,OAAIkN,oBAAU7e,IACxC0N,KAAMwvC,EACNmB,IAAI,sBACJvf,OAAO,SACP,8BAA4B,OAAM7/B,SAAA,CAElC2S,eAAA,QAAA3S,SAAOe,IACP4R,eAACooC,GAAQ,CAACtzC,KAAK,gBAAgB+K,OAAQC,OAGzCE,eAAC2/B,GAAK,CAAC,wBAAsB,OAAMtyC,SAAEe,MAExB,OAAb67C,QAAa,IAAbA,KAAe37B,MAAK2+B,GAAc,OAATA,EAAEplD,OAC3BoY,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACGk/C,GAAcI,GAAgBD,EAC7BzsC,gBAACwoC,GAAW,CAAC,wBAAsB,OAAMp7C,SAAA,CACvC4S,gBAAA,QAAA5S,SAAA,CACGk/C,EAAW,KAAGI,KAEjB3sC,eAAC0oC,GAAS,CAAC5zC,KAAK,kBAAkB+K,OAAQC,IAC1CE,eAAA,QAAA3S,SAAOq/C,OAEP,KACJ1sC,eAACugC,GAAc,CACb/M,UAAWA,EACXgN,YAAc32B,GACZsiC,EAAuB,CAAEtiC,IAAGnB,MAAOs9B,EAAKF,IAAI0G,WAE9C3sC,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIimC,EAAKF,IAAI0G,SAAS3kD,WAIhD,EAGP+X,UAAW,SAEb,CACEysC,SAAU,cACV9G,gBACA/oB,OAAQ,WACR8vB,KAAMxsB,IAAA,IAAC,KAAEkmB,GAAoClmB,EAAA,OAC3C9f,eAAC4oC,GAAW,CAAAv7C,SAAE24C,EAAKt1B,OAAoB,EAEzC9Q,UAAW,eAEb,CACEysC,SAAU,YACV9G,gBACA/oB,OAAQ,UACR8vB,KAAMY,IAA6C,IAA5C,KAAElH,GAAoCkH,EAC3C,OACEltC,eAAC6oC,GAAO,CAAAx7C,SACN2S,eAACkjC,GAAI,CACHnpC,OACErB,KAAOstC,EAAKt1B,OAAOy8B,cAAcz0C,OAASyB,SAAS,EAAG,SAClD,OACA,UAENH,UAAWN,GAAgBssC,EAAKt1B,OAChC7Q,OAAQC,KAEF,EAGdF,UAAW,WAEb,CACEysC,SAAU,oBACV9G,gBACA/oB,OAAO,SACP8vB,KAAMc,IAAA,IAAC,KAAEpH,GAAoCoH,EAAA,OAC3CptC,eAAC8oC,GAAM,CAAAz7C,SAAEsoC,oBAAUqQ,EAAKt1B,QAAgB,EAE1C9Q,UAAW,UAEb,CACEysC,SAAWvG,GACT9f,cAAI8f,EAAK,YACL55B,cAAI45B,EAAK,qBAAqBjrC,OAC9BqR,cAAI45B,EAAK,YAAYjrC,OAC3BhT,GAAI,WACJ09C,gBACA/oB,OAAQ,WACR8vB,KAAMe,IAA6C,IAA5C,KAAErH,GAAoCqH,EAC3C,MAAM,UAAE9B,EAAS,SAAEt2C,GAAa+wC,EAAKF,IAAI0G,SACzC,OAASv3C,EAAS4F,OAChBmF,eAAA,MAAA3S,SACG4H,EACEmD,KAAIk1C,GAAaj/C,GAAgBi/C,KACjC/3C,OACA6C,KAAIm1C,GAEDvtC,eAAC+oC,GAAe,CAAA17C,SACd2S,eAACgpC,GAAO,CAAA37C,SAAEkgD,KAAkB,GAAAxtC,OADLwrC,EAAS,KAAAxrC,OAAIkN,oBAAUsgC,SAMtD,IAAI,EAEV3tC,UAAW,YAEb,CACEysC,SAAWvG,GACT9f,cAAI8f,EAAK,YACL55B,cAAI45B,EAAK,kCACT55B,cAAI45B,EAAK,yBACfj+C,GAAI,SACJ09C,gBACA/oB,OACEiG,EAAmBpB,kBACnBz0B,EAAqBG,YACjB,YACA,WACNu/C,KAAMkB,IAAuD,IAAtD,KAAExH,GAA8CwH,EACrD,MAAMnH,EAAOrgB,cAAIggB,EAAM,gBACnB95B,cAAI85B,EAAM,uBACV95B,cAAI85B,EAAM,cACd,OACEhmC,eAACgnC,GAAoB,CACnBX,KAAMA,EACNY,cAAe,EACfpnC,OAAQC,GACR,EAGNF,UAAW,UAEb,CACEysC,SAAWvG,GACT9f,cAAI8f,EAAK,YACL55B,cAAI45B,EAAK,wCACT55B,cAAI45B,EAAK,+BACfj+C,GAAI,eACJ09C,gBACA/oB,OACEiG,EAAmBpB,kBACnBz0B,EAAqBG,YACjB,YACA,iBACNu/C,KAAMmB,IAAuD,IAAtD,KAAEzH,GAA8CyH,EACrD,MAAMpH,EAAOrgB,cAAIggB,EAAM,gBACnB95B,cAAI85B,EAAM,6BACV95B,cAAI85B,EAAM,oBACd,OACEhmC,eAACgnC,GAAoB,CACnBX,KAAMA,EACNY,cAAe,EACfpnC,OAAQC,GACR,EAGNF,UAAW,gBAEb,CACEysC,SAAU,cACVzsC,UAAW,cACX4c,OAAQ,kBACR8vB,KAAMoB,IAMC,IANA,KACL1H,GAKD0H,EACC,OACEztC,gBAACopC,GAAmB,CAAAh8C,SAAA,CAClB4S,gBAACmpC,GAAY,CAAA/7C,SAAA,CACX2S,eAAC2tC,KAAc,CACblgB,QAAQ,QACRF,UAAU,MACVkP,QACEz8B,eAAC4tC,KAAO,CAAC/lD,GAAG,gBAAewF,SACzB2S,eAAC8uB,GAAa,CACZzd,YAAa20B,EAAKt1B,MAClBqe,YAAaiX,EAAKF,IAAI0G,SACtB5d,WAAW,EACXI,sBAAuBA,CACrB8W,EACA/vC,EACAwlB,KAEAyT,EAAsB8W,EAAK/vC,EAAQwlB,EAAM,MAIhDluB,SAED2S,eAAA,OAAA3S,SACE4S,gBAACqpC,GAAW,CACVC,aACGj6B,kBACC02B,EAAKt1B,MAAMO,QACTod,GACEA,EAAKpe,SAAWA,GACa,KAA7Boe,EAAKhD,uBAGZh+B,SAAA,CAED2S,eAACwpC,GAAS,CAAC10C,KAAK,cAAc,eAKpCkL,eAAC8xB,GAAgB,CACfC,QAASiU,EAAKF,IAAI0G,SAClBn7B,YAAa20B,EAAKt1B,MAClBrC,YAAaA,EACb6jB,YAAa6Y,IAAuB/E,EAAKF,IAAI0G,SAAS3kD,GACtDqpC,cACEjxB,gBAACwpC,GAAU,CAAAp8C,SAAA,CACT2S,eAAC0pC,GAAY,CACX1uC,KACErD,oBACEquC,EAAKF,IAAI0G,SAASjuB,UAClB3mB,gBAAkBhN,EAA0BE,MAC1CF,EAA0BI,SAC1Bg7C,EAAKF,IAAI0G,SAASjuB,SAExB1e,OAAQC,IAEVE,eAAC2pC,GAAa,CAAAt8C,SACX24C,EAAKF,IAAI0G,SAASjB,YAErBvrC,eAAC4pC,GAAS,CAAAv8C,SAAE24C,EAAKF,IAAI0G,SAASp+C,UAGlC6jC,sBAAwBpqC,GACtBoqC,EAAsBpqC,GAExBmnC,sBAAuBA,CACrB8W,EACA/vC,EACAwlB,KAEAyT,EAAsB8W,EAAK/vC,EAAQwlB,EAAM,EAE3CyW,wBAAyBA,CACvB8T,EACA3T,EACA5W,IACGyW,EAAwB8T,EAAK3T,EAAa5W,QAGnDtb,gBAACgpC,GAAc,CAAA57C,SAAA,CACZwgD,kBACCC,kBAAQ9H,EAAKt1B,OAAOiN,GAAQA,EAAK+R,+BACjCt3B,KAAK21C,IAA6B,IAADC,EAAAC,EACjC,MAAMne,GAGH,QAFDke,EAAAxkC,OAAO+L,QAAQxjB,IAAekf,QAC5Bnc,GAAQA,EAAK,KAAOi5C,EAAM,YAC3B,IAAAC,GAAK,QAALC,EAFDD,EAEI,UAAE,IAAAC,OAAL,EAFDA,EAES,KAAM,GACjB,OACEne,GACE9vB,eAAC0sB,GAAO,CACNa,UAAU,MACV1tB,OAAO,yBACPD,UAAU,eAEV6tB,QACExtB,gBAACipC,GAAW,CAAA77C,SAAA,CACV2S,eAAC6uB,GAAY,CAAC/5B,KAAMg7B,IAAe,IACnC9vB,eAACmpC,GAAa,CAAA97C,SAAE0gD,EAAM,QAG1BvgB,aACExtB,eAACouB,GAAe,CACd/c,YAAa20B,EAAKt1B,MAAMO,QACtBod,GACEA,EAAKqB,8BAAgCqe,EAAM,KAE/C1/B,YAAaA,KAbZ0/B,EAAM,GAiBd,IAGL/tC,eAAA,OAAKJ,UAAU,eAAcvS,SAC3B4S,gBAACipC,GAAW,CAAA77C,SAAA,CACV2S,eAAC6uB,GAAY,CAAC/5B,KAAK,UAAU+K,OAAQC,IACrCE,eAACmpC,GAAa,CAAA97C,SAEV24C,EAAKt1B,MAAMO,QACT+Z,GAAiD,KAAnCA,EAAWK,sBACzBxwB,mBAMQ,KAK7B,CACDkwC,EACAd,EACA5uC,EACA0mB,EACAiN,EACAuW,EACAyG,EACAG,EACA1pB,EAAmBpB,gBACnBvhB,EACAkyB,EACA/hB,EACA5B,IAGI6/B,EAAgC7+B,mBAAQ,IACrC,CACL,CACEg9B,SAAWvG,GACTA,EAAI6G,aACN9kD,GAAI,KACJ09C,gBACA/oB,OAAQ,sBACR8vB,KAAM6B,IAA6C,IAA5C,KAAEnI,GAAoCmI,EAC3C,MAAM,UAAE3a,EAAS,aAAEkZ,EAAY,aAAEC,GAAiB3G,EAAKF,IAAI0G,SAC3D,OACEvsC,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAC2/B,GAAK,CAAC,wBAAsB,OAAMtyC,SAChCs/C,GAAgBD,EACfzsC,gBAACwoC,GAAW,CAAC,wBAAsB,OAAMp7C,SAAA,CACvC2S,eAAA,QAAA3S,SAAOs/C,IACP3sC,eAAC0oC,GAAS,CAAC5zC,KAAK,kBAAkB+K,OAAQC,IAC1CE,eAAA,QAAA3S,SAAOq/C,OAEP,OAEN1sC,eAACugC,GAAc,CACb/M,UAAWA,EACXgN,YAAc32B,GACZsiC,EAAuB,CAAEtiC,IAAGnB,MAAOs9B,EAAKF,IAAI0G,WAE9C3sC,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIimC,EAAKF,IAAI0G,SAAS3kD,QAE5C,EAGP+X,UAAW,MAEb,CACEysC,SAAU,WACV9G,gBACA/oB,OAAQ,SACR8vB,KAAM8B,IAA6C,IAA5C,KAAEpI,GAAoCoI,EAC3C,OACEpuC,eAAC6oC,GAAO,CAAAx7C,SACN2S,eAACkjC,GAAI,CACHnpC,OACErB,KAAOstC,EAAKt1B,OAAOy8B,cAAcz0C,OAASyB,SAAS,EAAG,SAClD,OACA,UAENH,UAAWN,GAAgBssC,EAAKt1B,OAChC7Q,OAAQC,KAEF,EAGdF,UAAW,WAEb,CACEysC,SAAWvG,GACU,sBAAnBA,EAAIuI,WAAqC,EAAI,EAC/CxmD,GAAI,aACJ09C,gBACA/oB,OAAO,aACP8vB,KAAMgC,IAA6C,IAA5C,KAAEtI,GAAoCsI,EAC3C,OACEtuC,eAAA,QAAA3S,SAEIqJ,GACEsvC,EAAKF,IAAI0G,SAAS6B,aAKjB,EAGXzuC,UAAW,UAEb,CACEysC,SAAWvG,IAAuB,IAAAyI,EAAA,QACV,QAArBA,EAAAzI,EAAItnB,eAAe,UAAE,IAAA+vB,OAAA,EAArBA,EAAuBngD,OAAQ,kBAAkBlH,aAAa,EACjEW,GAAI,iBACJ09C,gBACA/oB,OAAO,yBACP8vB,KAAMkC,IAA6C,IAADC,EAAA,IAA3C,KAAEzI,GAAoCwI,EAC3C,MAAME,EAAkC,QAApBD,EAAGzI,EAAKF,IAAI0G,gBAAQ,IAAAiC,OAAA,EAAjBA,EAAmBjwB,eAAevN,QACvD1C,KAAOA,EAAEngB,OAGX,OAAqB,OAAdsgD,QAAc,IAAdA,KAAgB7zC,OACrBmF,eAAA,MAAA3S,SACGqhD,EAAet2C,KAAImW,GAEhBvO,eAAA,MAAA3S,SACGkhB,EAAE+8B,IACDrrC,gBAAC+b,GAAY,CACX,iBAAAjc,OAAgBD,EAAU,KAAAC,OAAIkN,oBAAUsB,EAAEngB,OAC1C0N,KAAMyS,EAAE+8B,IACRmB,IAAI,sBACJvf,OAAO,SACP,8BAA4B,OAAM7/B,SAAA,CAElC2S,eAAA,QAAA3S,SAAOkhB,EAAEngB,OACT4R,eAACooC,GAAQ,CAACtzC,KAAK,gBAAgB+K,OAAQC,OAGzCE,eAAA,QAAA3S,SAAOkhB,EAAEngB,QAbJmgB,EAAE1mB,QAoBjBmY,eAAA,QAAA3S,SAAM,mBACP,EAEHuS,UAAW,mBAEbqR,QAAOsO,GACa,OAAb0qB,QAAa,IAAbA,OAAa,EAAbA,EAAeh5B,QAAO09B,GAAOA,EAAI9mD,KAAO03B,EAAO8sB,cAEvD,CAACpC,EAAe5uC,EAAOkqC,EAAe4G,EAAwBrsC,IAE3DokC,EAAyB70B,mBAAQ,KACrC,MAAMu/B,EAAkBxC,EASxB,OARA8B,EAAkB5gC,SAAQqhC,IACxB,MAAME,EAA4B,OAAb5E,QAAa,IAAbA,OAAa,EAAbA,EAAe37B,MAClC2+B,GAAKA,EAAEplD,MAAQ8mD,EAAI9mD,IAAM8mD,EAAItC,YAE3BwC,GACFzC,EAAY0C,OAAOD,EAAaE,SAAU,EAAGJ,EAC/C,IAEKC,CAAe,GACrB,CAACV,EAAmB9B,EAAanC,IAE9B7D,EAAgB/2B,mBAAQ,KAC5B,MAAM60B,EAAU,GAgBhB,OAfK95B,EAAK4lB,MAAKgf,IAAM70B,gBAAM60B,EAAEjV,gBAC3BmK,EAAQ3hB,KAAK,eAEV6nB,GACHlG,EAAQ3hB,KAAK,eAGbE,EAAmBpB,kBAAoBz0B,EAAqBG,cAE5Dm3C,EAAQ3hB,KAAK,eACb2hB,EAAQ3hB,KAAK,eACb2hB,EAAQ3hB,KAAK,aACb2hB,EAAQ3hB,KAAK,YACb2hB,EAAQ3hB,KAAK,cAER2hB,CAAO,GACb,CAAC95B,EAAMggC,EAAgB3nB,IAE1B,OACEziB,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD4S,gBAACsc,GAAc,CAAAlvB,SAAA,CACZ28C,GACC/pC,gBAAC+nC,GAAe,CAAA36C,SAAA,CACd4S,gBAACuc,GAAM,CAAAnvB,SAAA,EACH88C,GAAiB,+BAA+B,UAEpDnqC,eAACkoC,GAAsB,OAG3BloC,eAAC8pC,GAAU,CACT5F,QAASA,EACTE,YAAc0B,IAAsB,CAClClmC,UAAWqvC,KAAW,CACpBC,OAAQpJ,EAAI0G,SAASluB,MAAQ,EAC7B6wB,iBAAkBrJ,EAAI0G,SAASv3C,SAAS4F,WAG5CurC,cAAeA,EACfC,KAAMj8B,EACNk6B,aAAcA,EACdtY,OAAQz2B,EACRsK,OAAQC,QAGF,EC3rChB,MAAMzB,GAAkBC,KAAO8wC,IAAG5wC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAVH,CAAU,sCAoEnB+wC,I,GAAAA,GAnDCh2C,IASF,IATG,UACfuG,EAAS,QACTiB,EAAO,SACP2xB,EAAQ,eACR8c,GAAiB,EAAK,eACtBC,GAAiB,EAAK,WACtBC,EAAU,WACVC,EAAU,OACV5vC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,YAE5B,GAAIsa,gBAAMtZ,KAAa2uC,IAAehd,IAAaid,EACjD,OAAO,KAaT,OACExvC,gBAAC5B,GAAe,CAACuB,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CAC7D2S,eAAC2oB,GAAM,CACLrB,OAAO,WACPC,SAAUgoB,EACV1nD,GAAE,GAAAkY,OAAKD,EAAU,aACjBuc,QAXN,SAAyBxS,GACvBA,EAAEyS,UACFkW,EAAS3oB,EAAG1iB,EACd,EASM0Y,OAAM,GAAAE,OAAKD,EAAU,aAAYzS,SAEhCoiD,IAEF5uC,EACDb,eAAC2oB,GAAM,CACLrB,OAAO,WACPC,SAAU+nB,EACVznD,GAAE,GAAAkY,OAAKD,EAAU,SACjBuc,QA1BN,SAAqBxS,GACnBA,EAAEyS,UACFkW,EAAS3oB,EAAG1iB,EACd,EAwBM0Y,OAAM,GAAAE,OAAKD,EAAU,SAAQzS,SAE5BmiD,MAEa,EC9DtB,MAAME,GAAkB,EAGlBlvC,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAVH,CAAU,0CAItBqxC,GAAerxC,aAAO+wC,IAAQ7wC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAfH,CAAe,sCAI9BsxC,GAAWtxC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAATH,CAAS,mCAIpBuxC,GAAqBvxC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAAVH,CAAU,mGAE1BI,GACPA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOimB,SACnB7oB,EAAMC,MAAM2C,OAAO2a,IAAIE,aAEdzd,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAGhD0hD,GAAcxxC,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAZH,CAAY,wCAI1ByxC,GAAazxC,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAbH,CAAa,yCAI5BI,IACA,GAAIA,EAAM+pB,SACR,OAAOjB,aAAGC,QAAAC,aAAA,mKAKQhpB,EAAMC,MAAM2C,OAAO2a,IAAIC,UAG3C,IAGE8zB,GAAe1xC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAATH,CAAS,8BAKxB2xC,GAAW3xC,aAAO0xC,IAAaxxC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAApBH,CAAoB,+BA4HtB4xC,OAvGW72C,IAQZ,IARa,UACzBuG,EAAS,YACTuwC,EAAW,SACX3d,EAAQ,KACRpkC,EAAI,cACJgiD,EAAgBV,GAAe,OAC/B7vC,EAAS,SAAQ,UACjBwwC,GACMh3C,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gBACtB,WAAEyb,GAAeP,KAEvB,SAASu1B,EAAcj7C,GACrB,OAAO89B,KAAKY,MAAM1+B,EAAO+6C,EAC3B,CAEA,MAAOG,GAAgBvgC,mBACrBwgC,gBACEC,gBAAMJ,EAAY,GAAIpD,GAAcA,IACpCmD,KAGGM,EAAmBC,GAAwB3gC,mBAChDsgC,EAAcH,IAqChB,MAAMb,EAAiBa,IAAgBE,EACjCd,EAAiC,IAAhBY,EACjBS,EAAkBF,EAAoBH,EAAa11C,OAAS,EAClE,OACEmF,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAAC2vC,GAAY,CACX9uC,QACEZ,gBAAC2vC,GAAQ,CAAAviD,SAAA,CACNkjD,EAAaG,GAAmBt4C,KAAImxB,GACnCvpB,eAACgwC,GAAY,CAAA3iD,SACX2S,eAAC+vC,GAAU,CACTloD,GAAE,GAAAkY,OAAKD,EAAU,UAAAC,OAASwpB,EAAQ,GAClCd,SAAUc,IAAU4mB,EACpB9zB,QAASxS,GA/CzB,SAAoB/P,GAMhB,IANiB,EACnB+P,EAAC,YACDgnC,GAID/2C,EACC+P,EAAEyS,UACFkW,EAAS,CAAE3oB,IAAGgnC,gBACdv1B,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAK3R,EAAI,gBACdsiB,MAAM,mBAAD3Q,OAAqB8wC,EAAc,IAE5C,CAiC8BC,CAAY,CAAEjnC,IAAGgnC,YAAatnB,IAASl8B,SAEpDk8B,EAAQ,KACE,QAAAxpB,OAPYwpB,MAU5BqnB,GAAmB5wC,eAACiwC,GAAQ,CAAA5iD,SAAE,cAGnCiiD,eAAgBA,EAChBC,eAAgBA,EAChBC,WACEvvC,gBAAC4vC,GAAkB,CAACtoB,SAAU+nB,EAAejiD,SAAA,CAC3C2S,eAAA,QAAMJ,UAAU,iBAAgBvS,SAAC,SACjC2S,eAAC8vC,GAAW,CAACh7C,KAAK,iBAAiB+K,OAAQC,OAG/C0yB,SAjDN,SACE3oB,EACA6oB,GAEA,IAAIme,EAEFA,EADEne,IAAcvrC,EACFgpD,EAAc,EAEdA,EAAc,EAE9BQ,EAAqBL,EAAcO,IACnCre,EAAS,CAAE3oB,IAAGgnC,gBACdv1B,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAK3R,EAAI,gBACdsiB,MAAM,gBAAD3Q,OAAkB2yB,EAAS,QAAA3yB,OAAO8wC,EAAc,IAEzD,EAiCMpB,WACExvC,gBAAC4vC,GAAkB,CAACtoB,SAAUgoB,EAAeliD,SAAA,CAC3C2S,eAAA,QAAMJ,UAAU,iBAAgBvS,SAAC,SAAY,IAC7C2S,eAAC8vC,GAAW,CAACh7C,KAAK,gBAAgB+K,OAAQC,OAG9CD,OAAQC,KAEA,ECtKhB,MAAM0c,GAASle,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAATH,CAAS,0HACLI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAGtD7rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAItDgnC,GAAWnoC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAATH,CAAS,uEAEPI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAI/DJ,GAAoB7rB,aAAOsrB,IAAYprB,WAAA,CAAAxV,YAAA,iDAAAyV,YAAA,gBAAnBH,CAAmB,8DACjCI,GAAK,gBAAAqB,OAAoBrB,EAAMC,MAAM2C,OAAO2a,IAAIC,aAKtDkO,GAAwB9rB,aAAO2rB,IAAgBzrB,WAAA,CAAAxV,YAAA,qDAAAyV,YAAA,gBAAvBH,CAAuB,oBAG/CosB,GAAOpsB,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAXH,CAAW,qDACTI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAGtDuxC,GAAYzyC,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,gBAARH,CAAQ,sBA4DX0oC,I,GAAAA,GAhDc3tC,IAKf,IALgB,UAC5BuG,EAAS,KACTymC,EAAI,OACJxmC,EAAS,SAAQ,OACjBb,GACM3F,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,6BACtB,UAAEqL,GAAc2V,KAChB3Z,EAAOgE,EAAUhE,KACjBmH,EAAkB,OAAJnH,QAAI,IAAJA,OAAI,EAAJA,EAAMmH,YAE1B,OACEpO,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACJ2R,EACDgB,eAACy/B,GAAQ,CAAC5+B,QAAoB,WAAX7B,EAAsB,SAAW,oBAE/C,OAAJqnC,QAAI,IAAJA,KAAMxrC,QAAuB,OAAXwT,QAAW,IAAXA,KAAaxT,OAChCmF,eAAA,MAAA3S,SACGg5C,EAAKjuC,KAAIkvC,IACR,MAAM0J,EJuFeC,EAC/BhmB,EACAimB,KAEA,MAAM,YAAEloD,EAAW,cAAEo+C,GAAkBnc,EACjCkmB,EAAeD,EAAY5iC,MAAK+F,GAAKA,EAAExsB,KAAOu/C,IACpD,OAAK+J,EAUE,IACFlmB,EACHmmB,aAAa,EACb7lB,YAAa4lB,EAAa5lB,YAC1Bkc,aAAc0J,EAAatpD,GAAG6/C,YAbvB,IACFzc,EACHmmB,aAAa,EACb7lB,YAAa,KACbkc,aAAgBL,EACZA,EAAcM,WACdz6B,oBAAUjkB,GAQjB,EI5GoCioD,CAAkB3J,EAAGj5B,GAChD,OACEpO,gBAACwmC,GAAQ,CAAAp5C,SAAA,CACN2jD,EAAmBI,YAClBpxC,eAACoqB,GAAqB,CACpBvqB,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIixC,EAAmBvJ,gBAG9CznC,eAACmqB,GAAiB,CAChBf,QAAS4nB,EAAmBhoD,YAC5BqX,IAAK2wC,EAAmBzlB,YACxB1rB,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIixC,EAAmBvJ,gBAGhDznC,eAAC0qB,GAAI,CAAC,wBAAsB,OAAMr9B,SAC/B2jD,EAAmBhoD,gBAbTgoD,EAAmBvJ,aAevB,MAKjBznC,eAAC+wC,GAAS,CAAA1jD,SAAC,sCAET,ECrGV,MAAMmT,GAAYlC,KAAOC,IAAGkpB,QAAAC,aAAA,gKACZhpB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIsO,OAK/B7rB,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OACvCsQ,GAASA,EAAMC,MAAMC,MAAMk0B,UAAUzzB,MAAMwrB,KAsB3C+d,OAbYvvC,IAIQ,IAJP,OAC1BwG,EAAS,SAAQ,UACjBD,EAAS,YACTm6B,GACM1gC,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,iBAC5B,OAAOsa,gBAAM4f,GAAe,KAC1B/5B,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACtD0sC,GAEJ,ECLH,MAAMsX,GAAoB/yC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,gBAAVH,CAAU,2EAGjBI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QACrD7rB,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAE/D+mB,GAAgBhzC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,gBAATH,CAAS,8DAKzBizC,GAAoBjzC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,gBAATH,CAAS,0CAIhBI,GAAK,GAAAqB,OACfrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAGjE/N,GAASle,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAATH,CAAS,oEAGTI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAEtDiyC,GAAanzC,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAARH,CAAQ,+EACVI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAEvCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAM83B,KACtCz4B,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAErDwyC,GAAoBpzC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,gBAATH,CAAS,+EAQ7BqzC,GAAiBrzC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,gBAAXH,CAAW,iFAEjBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAE3Cf,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAEhDwjD,GAAkBtzC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,gBAAXH,CAAW,8EACpBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAItDqyC,GAAWvzC,aAAO6kC,IAAiB3kC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAxBH,CAAwB,wBAGnCwzC,GAAsBxzC,KAAOyzC,QAAOvzC,WAAA,CAAAxV,YAAA,iDAAAyV,YAAA,gBAAdH,CAAc,mDAC3BI,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KAIjDmnB,GAAoB1zC,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,iBAATH,CAAS,kGAClBI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAEpCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KACtCnsB,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAGrDugC,GAAWnhC,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,iBAAZH,CAAY,oCAClBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGrC+1B,GAAY3zC,aAAO6hC,IAA6B3hC,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,iBAApCH,CAAoC,8BAoHvC4zC,OAxGmB74C,IAIA,IAAD84C,EAAA,IAJE,UACjCvyC,EAAS,KACTwK,EAAI,OACJvK,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,0CACtB,QAAE4R,GAAYy4B,eACdC,EAAgB14B,IAAYxoB,EAAcE,aAE1CipD,EAAgBjI,EAClB//B,EAAK6G,QACH0M,GACEhmB,oBAAUgmB,EAAKN,cAAczlB,gBAC7BhN,EAA0BG,KAE9Bqf,EACEioC,EAAsBlI,EACxB,CAACv/C,EAA0BG,IAC3B,CACEH,EAA0BE,MAC1BF,EAA0BI,SAC1BJ,EAA0BC,IAC1BD,EAA0BG,IAG1ByoC,GAKH,QAJD2e,EAAAC,EAAc9jC,MACZqP,GACEhmB,oBAAUgmB,EAAKN,cAAczlB,gBAC7BhN,EAA0BG,YAC7B,IAAAonD,OAAA,EAJDA,EAIG3e,YAAa,KAEZ8e,EAAuBA,CAC3B12B,EACA22B,IAEAA,EAAKjkC,MACF8O,GACCzlB,oBAAUylB,EAASC,cAAczlB,gBAAkBgkB,IAGzD,OACE3b,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACoxC,GAAiB,CAAAhkD,SAAA,CAChB2S,eAACsxC,GAAa,CAAAjkD,SACXglD,EACEphC,QAAOyO,KAAO4yB,EAAqB5yB,EAAG0yB,KACtCh6C,KAAKslB,IAAyB,IAAD80B,EAC5B,MAAMp1B,EAAWk1B,EAAqB50B,EAAa00B,GAE7C9oD,EACJo0B,IAAgB9yB,EAA0BC,IACtC,OACA6yB,IAAgB9yB,EAA0BE,MAC1C,SACA4yB,IAAgB9yB,EAA0BG,GAC1C,MACA,WAEA0nD,GAAoB,OAARr1B,QAAQ,IAARA,OAAQ,EAARA,EAAUQ,oBAAqB,GACjD,OACE3d,gBAACsxC,GAAiB,CAAAlkD,SAAA,CAChB4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL2S,eAAC6xC,GAAQ,CAAC72C,KAAM0iB,EAAa7d,OAAQC,IACpCxW,KAEH0W,eAACyxC,GAAU,CAAApkD,SAAiB,QAAjBmlD,EAAU,OAARp1B,QAAQ,IAARA,OAAQ,EAARA,EAAUS,aAAK,IAAA20B,IAAI,IAChCxyC,eAAA,MAAA3S,SACG2+B,iBAAOymB,EAAW,UAAUr6C,KAAIoa,GAE7BvS,gBAACyxC,GAAiB,CAAArkD,SAAA,CAChB2S,eAAC2xC,GAAc,CAAAtkD,SAAEmlB,EAAEqL,QACnB7d,eAAC4oC,GAAW,CAAC7O,YAAavnB,EAAEunB,cAC5B/5B,eAAC4xC,GAAe,CAAAvkD,SACbmlB,EAAEzc,SAAWvM,EAAwBG,KAClC,QACA6oB,EAAEzc,SACFvM,EAAwBC,kBACxB,oBACAmsC,qBAAWD,oBAAUnjB,EAAEzc,aATPyc,EAAEzc,cATV2nB,EAwBJ,MAI3BysB,EACClqC,gBAAC6xC,GAAmB,CAAAzkD,SAAA,CAClB4S,gBAAC+xC,GAAiB,CAAA3kD,SAAA,CAChB2S,eAACy/B,GAAQ,CAAC3qC,KAAK,OAAO8K,UAAU,cAAc,2BAGhDI,eAAA,KAAA3S,SAAIqyC,GAAgB,oBAEpB,QAEN1/B,eAACiyC,GAAS,CAACze,UAAWA,EAAWP,QAAQ,SAASpzB,OAAQC,MACtD,ECjMV,MAAM0c,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAAbH,CAAa,wEAKtBqhC,GAAQrhC,KAAOme,GAAEje,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAATH,CAAS,wGAGNI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAKtDkzC,GAASp0C,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAAXH,CAAW,4DACRI,GAAK,GAAAqB,OAChBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAI/DooB,GAAcr0C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAAVH,CAAU,0EAMxBwiC,GAAOxiC,KAAOkT,EAAChT,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAARH,CAAQ,8GAGNI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQs/B,SAG/C7/B,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAGvCisB,GAAW9pC,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAAZH,CAAY,yDAuFds0C,OA1EoBv5C,IAIrB,IAJsB,UAClCuG,EAAS,KACTwK,EAAI,OACJvK,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mCACtB,WAAEyb,GAAeP,KAiBvB,MAAM,WACJkC,EAAU,aACV41B,EAAY,eACZC,EAAc,iBACdC,EAAgB,gBAChBC,EAAe,OACfryB,GACEvW,EAEJ,OACEnK,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL4S,gBAAC0/B,GAAK,CAAC,wBAAsB,OAAMtyC,SAAA,CAC9BylD,GAAkBA,IAAmBphC,KACtC1R,eAAC0yC,GAAM,CAAArlD,SAAEylD,IACP,KACHC,OAEAC,GACD/yC,gBAAC6gC,GAAI,CACH,iBAAA/gC,OAAgBD,EAAU,sBAC1BhE,KAAMk3C,EACNnrD,GAAE,GAAAkY,OAAKD,EAAU,sBACjBuc,QAAUxS,KAtCpB,SAAwB/P,GAMpB,IANqB,EACvB+P,EAAC,IACDyhC,GAIDxxC,EACC+P,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKD,EAAU,4BACpB4Q,MAAM,iBAAD3Q,OAAmBurC,IAE5B,CA0BY2H,CAAgB,CAAEppC,IAAGyhC,IAAK0H,GAAkB,EAE9CvG,IAAI,sBACJvf,OAAO,SAAQ7/B,SAAA,CAEf2S,eAACooC,GAAQ,CAACtzC,KAAK,gBAAgB+K,OAAQC,IAAc,qBAK3DE,eAACkyC,GAAyB,CAAC9nC,KAAM6S,EAAYpd,OAAQC,IACrDG,gBAAC0yC,GAAW,CAAAtlD,SAAA,CACV2S,eAACkzC,GAA2B,CAC1Bl0C,OAAO,SACPqnC,KAAM1lB,EACN9gB,OAAM,GAAAE,OAAKD,EAAU,aAEvBE,eAACkzC,GAA2B,CAC1Bl0C,OAAO,eACPqnC,KAAMwM,EACNhzC,OAAM,GAAAE,OAAKD,EAAU,wBAGrB,EC5GH,MAAMqzC,GAAmB,WAMkB,IAADC,EAAA,IANhB,QAC/BnkC,EAAO,WACPC,GAAa,GAIdtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACH,MAAM,uBAAE+jB,EAAsB,UAAEzT,GAAc2V,MACxC,UAAEjN,GAAc1I,EAChBmoC,EAAez/B,EAAU7qB,gBAAkBf,EAAeI,QAE1DqjB,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAGtD,IAAI2nC,EACgB,YAAX,OAAPrkC,QAAO,IAAPA,OAAO,EAAPA,EAASjU,M7EmRX2jB,KAEA,MAAM40B,EAAiBlqC,eAAKsV,EAAwB,CAClDrrB,GAAajB,UACbiB,GAAaf,SACbe,GAAaW,QACbX,GAAad,SACbc,GAAaR,UACbQ,GAAaP,kBACbO,GAAaL,WACbK,GAAagB,UACbhB,GAAaK,UAiBf,MAAO,IAfgB,IAClB0V,eAAK/S,GAA8B,CACpChD,GAAahB,SACbgB,GAAab,kBACba,GAAaX,YACbW,GAAaD,aACbC,GAAaV,aACbU,GAAaN,kBACbM,GAAaJ,OACbI,GAAaF,gBACbE,GAAaH,QAEf,CAACG,GAAaZ,MAAO4D,GAA6BlB,WAAWC,KAC7D,CAAC/B,GAAaT,MAAOyD,GAA6BhB,aAAaC,SAI5Dg+C,EACJ,E6EjTKC,CACE70B,GAEgB,iBAAX,OAAP1P,QAAO,IAAPA,OAAO,EAAPA,EAASjU,M7EkTf2jB,KACqC,IAADO,EACpC,MAAO,IACFP,EACH,CAACrrB,GAAaF,iBAAkB,CAACxI,EAA0BG,IAC3D,CAACuI,GAAad,UAAWlE,GAAaI,KACtC,CAAC4E,GAAaV,eAAe,EAC7B,CAACU,GAAaP,mBAAoB,GAClC,CAACO,GAAahB,WACmB,QAA/B4sB,EAAAP,EAAuB1pB,gBAAQ,IAAAiqB,OAAA,EAA/BA,EAAiCjO,QAC/ByO,GACEA,IAAMnyB,EAAqBC,kBAC3BkyB,IAAMnyB,EAAqBE,0BAC1B,GACR,E6E/TKgmD,CAAoC90B,GACpCA,EAcN,OARI00B,IACFC,EAAoBI,eAAKJ,EAAmB,CAC1ChgD,GAAaN,kBACbM,GAAaP,kBACbO,GAAaR,aAIVmZ,oBACL,CAAC,aAAc,IAAKgD,KAAYqkC,KAChC,IRX4Bt1C,WAI4C,IAJrC,YACrCyN,EAAW,OACXC,EAAM,SACNC,GACetS,EAUf,aAPUiR,GAAIwD,KAAI,IAAA/N,OACZ4L,EAAQ,gCACZD,EACA,CACEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAGxBrB,IAAI,EQFhBupC,CAAiB,CACfloC,cACAE,WACAD,OAAQ4nC,IACPz1C,MAAKC,IACJw1C,EAAkB10B,OACf9gB,MAGT,CACE/G,UACI0U,KACAE,KACiB,QAAlBynC,EAACE,SAAiB,IAAAF,IAAjBA,EAAmBp+C,SAAS6F,SAC9BqU,EACFtB,sBAAsB,GAG5B,ECzEagmC,GAAqB,SAAC3kC,GAA0C,IAAvBC,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC9D,MAAM,QAAE6W,GAAYy4B,eAEdz+B,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,YAGhD,UAAET,EAAS,uBAAEyT,GAA2BkC,KAExCgzB,EACa,WAAjB5kC,EAAQjU,MACRkQ,EAAU0I,UAAU7qB,gBAAkBF,EAAaT,QAC/C,IACKu2B,EACHoT,QAAS,CAAEj8B,SAAUoV,EAAU0I,UAAU/rB,KAE3C82B,EAEN,OAAO1S,oBACL,CAAC,cAAe,IAAK4nC,EAAepiC,aACpC,IToD8BzT,WAI2B,IAJpB,YACvCyN,EAAW,OACXC,EAAM,SACNC,GACeqC,EAMf,aALmE1D,GAAIwD,KAAI,IAAA/N,OAErE4L,EAAQ,sCAAsCD,EAAQ,CAC1DhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,IAAI,ES7DhB0pC,CAAmB,CACjBroC,cACAE,WAEAD,OAAQ,IAAKmoC,EAAe39C,MAAO29C,EAAc7+C,aAErD,CACE+B,UACI0U,KACAE,KACAgT,EAAuB3pB,SAAS6F,QAClCqU,GAGR,EC1BM46B,GAAaxrC,aAAOyrC,IAAsBvrC,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAA7BH,CAA6B,sBAG1Cie,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAVH,CAAU,8CACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAG1CypB,GAA2Bz1C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAAVH,CAAU,sBAwH5B01C,OA9GK36C,IAA8C,IAAD46C,EAAA,IAA5C,UAAEr0C,EAAS,OAAEC,EAAS,UAAiBxG,EAC1D,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kBAEtB,gBAAEyiB,EAAe,UAAEpX,GAAc2V,KACjC1rB,EAAU+V,EAAU/V,SACpB,KAAEiV,EAAI,QAAE8pC,EAAO,WAAEC,EAAU,UAAEC,GAAcjB,MACzC/oC,KAAMiqC,GAAoBT,GAAmB,CACnD54C,KAAM,iBAIFs5C,EAAmBlqC,EACnB/O,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxD+uC,EAAsB,OAAL/uC,QAAK,IAALA,OAAK,EAALA,EAAqB,YACtCk5C,EAAiCllC,mBAAQ,KAC7C,IACGnO,sBAA4B,OAAhBozC,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBl2B,aAC9Bld,sBAAYmzC,GACb,CACA,MAAMG,EAAqBr2B,GAAiB,CAC1CC,UAAWk2B,EAAiBl2B,UAC5BC,eAAgB,KAChBC,MAAO,IAET,OAAKpd,sBAAYmzC,GAWVG,EAVEA,EAAmBp8C,KAAIulB,IAAI,IAC7BA,EACHtM,YAAagjC,EAAgBpjC,QAC1B+Z,GACCof,KACY,OAAVpf,QAAU,IAAVA,MAAYogB,cACJ,OAAVpgB,QAAU,IAAVA,OAAU,EAAVA,EAAYogB,cAAeztB,EAAK91B,QAK1C,CACA,OAAO,IAAI,GACV,CAACwsD,EAAiBjK,EAAgBkK,IAsBrC,OAnBAlkC,qBAAU,KACFkkC,IACJ34C,SAASrS,MV+DwB4oB,KAQxB,IARyB,QACtC/c,EAAO,eACP29C,EAAc,iBACdC,GAKD7gC,EACC,MAAMuiC,EAAoBtnD,EAAalC,GAAwB3B,MACzD8E,EACF0kD,GAAkB39C,IAAY7G,GAAaC,MAAQukD,IAAmBphC,KACpEohC,EACAC,EACN,OAAO1nC,GAAa,GAADtL,OAAI3R,EAAI,OAAA2R,OAAM00C,GAAoB,EU7EhCC,CAAwB,CACvCv/C,UACA29C,eAAgBwB,EAAiBxB,eACjCC,iBAAkBuB,EAAiBvB,mBAEvC,GACC,CAACuB,EAAkBn/C,EAASi/C,IAY7Bp0C,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACY,GAAa,CACZG,gBACEozC,GACAjzC,sBAAYozC,IACZhlC,kBAAQilC,GAEVzzC,cACEozC,IACEC,GAAcC,KAA8B,OAAhBE,QAAgB,IAAhBA,GAA2B,QAAXL,EAAhBK,EAAkBl2B,iBAAS,IAAA61B,GAA3BA,EAA6Bp5C,QAE7DmG,cACEhB,eAACN,GAAU,CACTC,KAAK,+DACLX,OAAO,QACPa,OAAQA,IAGZgB,QACIyzC,GAAoD,OAA9BC,QAA8B,IAA9BA,KAAgC15C,OACtDoF,gBAACS,GAAiB,CAAArT,SAAA,CAChB2S,eAACuc,GAAc,CAAAlvB,SACb2S,eAAC4yC,GAA0B,CACzBxoC,KAAMkqC,EACNz0C,OAAQC,MAGZE,eAAC8pC,GAAU,CACT1/B,KAAMmqC,EACN10C,OAAQC,IAEVE,eAAC+zC,GAAwB,CAAA1mD,SACvB2S,eAACkwC,GAAiB,CAChBC,YAA6B,OAAhBmE,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBj/C,KAC/Bg7C,UAA2B,OAAhBiE,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBjE,UAC7B7d,SA7ChB,SAAkC14B,GAA4C,IAA3C,YAAE+2C,GAAsC/2C,EACzEwoB,EAAgB,CACd,CAAChvB,GAAaG,eAAgB,CAC5B,CAACH,GAAaZ,MAAOm+C,KAGzBj1C,OAAO+4C,OAAO,CAAEC,IAAK,EAAGC,KAAM,EAAGC,SAAU,UAC7C,EAuCgB1mD,KAAK,iCACLyR,OAAQC,SAIZ,KAEND,OAAQC,KAEN,E,UClJV,MAAMU,GAAYlC,aAAOy2C,MAAOv2C,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAdH,CAAc,sCAoCjB02C,I,GAAAA,GArBO37C,IAMR,IANS,SACrBhM,EAAQ,UACRuS,EAAS,OACTq1C,GAAS,EAAK,cACdC,EAAgBA,KAAM,MAAI,OAC1Br1C,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mBAC5B,OACEG,eAACQ,GAAS,CACR20C,OAAO,OACPv1C,UAAWA,EACX,cAAaE,EACbs1C,QAASF,EACTG,KAAMJ,EAAO5nD,SAEZA,GACS,ECrCD,OAA0B,oCCA1B,OAA0B,4CCA1B,OAA0B,2CCSzC,MAAMioD,GAAch3C,KAAOi3C,MAAK/2C,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAZH,CAAY,mCAI1BqkC,GAAQrkC,KAAOxW,MAAK0W,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAZH,CAAY,yEAMpBk3C,GAAel3C,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAXH,CAAW,gJAU5Bg3C,IAIA52C,IACA,MAAM+2C,EAAU/2C,EAAMojC,QAClB4T,GACoB,UAApBh3C,EAAMi3C,UACNC,GACAC,GACJ,OAAOruB,aAAGC,QAAAC,aAAA,oDACU+tB,EAAO,IAIzBK,GAAcx3C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAVH,CAAU,6DAqDfy3C,I,MAAAA,GArCa18C,IAUd,IAVe,UAC3BuG,EAAS,SACT2nB,GAAW,EAAK,MAChBz/B,EAAK,KACLsG,EAAI,SACJokC,EAAQ,SACRqJ,GAAW,EAAK,OAChBh8B,EAAS,SAAQ,MACjB6Q,EAAK,UACLilC,EAAY,QACNt8C,EACN,OACE4G,gBAAC0iC,GAAK,CAAC/iC,UAAWA,EAAWo2C,QAASn2C,EAAQ,cAAaA,EAAOxS,SAAA,CAChE2S,eAACs1C,GAAW,CACV/tB,SAAUA,EACVua,QAASjG,EACT,iBAAA97B,OAAgBF,EAAM,iBACtBhY,GAAIgY,EACJzR,KAAMA,EACNokC,SAAUA,EACVx3B,KAAK,WACL0V,MAAOA,IAET1Q,eAACw1C,GAAY,CACX,eAAc3Z,EACd,gBAAetU,EACf,kBAAiB1nB,EACjBiiC,QAASjG,EACTtuB,KAAK,WACL0oC,UAAW,EACXN,UAAWA,IAEb31C,eAAC81C,GAAW,CAAC,iBAAA/1C,OAAgBF,EAAM,eAAcxS,SAAEvF,MAC7C,ECtFZ,MAAMwtD,GAAch3C,KAAOi3C,MAAK/2C,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAZH,CAAY,mCAI1BqkC,GAAQrkC,KAAOxW,MAAK0W,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAAZH,CAAY,qEAMpBk3C,GAAel3C,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAXH,CAAW,2KAO5Bg3C,IAGA52C,GACOA,EAAMojC,QACTta,aAAGC,QAAAC,aAAA,gFACShpB,GAAK,gBAAAqB,OAAoBrB,EAAMC,MAAM2C,OAAO2a,IAAIwO,SAC5C/rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIob,aAEhD7P,aAAGM,QAAAJ,aAAA,wDACahpB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIsO,SAIlDurB,GAAcx3C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAVH,CAAU,6DAkDf43C,I,GAAAA,GAnCU78C,IASX,IATY,UACxBuG,EAAS,SACT2nB,GAAW,EAAK,MAChBz/B,EAAK,KACLsG,EAAI,SACJokC,EAAQ,SACRqJ,EAAQ,OACRh8B,EAAS,SAAQ,MACjB6Q,GACMrX,EACN,OACE4G,gBAAC0iC,GAAK,CAAC/iC,UAAWA,EAAWo2C,QAASn2C,EAAQ,cAAaA,EAAOxS,SAAA,CAChE2S,eAACs1C,GAAW,CACV/tB,SAAUA,EACVua,QAASjG,EACT,iBAAA97B,OAAgBF,EAAM,iBACtBhY,GAAIgY,EACJzR,KAAMA,EACNokC,SAAUA,EACVx3B,KAAK,QACL0V,MAAOA,IAET1Q,eAACw1C,GAAY,CACX,eAAc3Z,EACd,gBAAetU,EACf,kBAAiB1nB,EACjBiiC,QAASjG,EACTtuB,KAAK,QACL0oC,UAAW,IAEbj2C,eAAC81C,GAAW,CAAC,iBAAA/1C,OAAgBF,EAAM,eAAcxS,SAAEvF,MAC7C,ECrEZ,MAAM0Y,GAAYlC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,eAATH,CAAS,SACvBI,IACA,GAAIA,EAAMwlC,QACR,OAAO1c,aAAGC,QAAAC,aAAA,+GAEwBhpB,EAAMwlC,QAG1C,IAGEiS,GAAoB73C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAVH,CAAU,gCAe9B83C,GAAa/8C,IAQL,IARM,UAClBuG,EAAS,QACTskC,EAAU,EAAC,KACX91C,EAAI,SACJokC,EAAQ,QACRvjB,EAAO,OACPpP,EAAS,SAAQ,KACjB7E,EAAO,YACD3B,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gBAC5B,OAAIyP,kBAAQL,GACH,KAIPjP,eAACQ,GAAS,CAAC0jC,QAASA,EAAStkC,UAAWA,EAAW,cAAaE,EAAWzS,SACxE4hB,EAAQ7W,KAAIwjC,IACX,MAAM,SAAErU,EAAQ,SAAEsU,EAAQ,MAAE/zC,EAAK,MAAE4oB,EAAK,SAAErjB,GAAauuC,EACjD/zC,EAAE,GAAAkY,OAAM3R,EAAI,KAAA2R,OAAI2Q,EAAMg3B,YAE5B,OACEznC,gBAAA,MAAA5S,SAAA,CACY,aAAT2N,EACCgF,eAAC+1C,GAAmB,CAClBxuB,SAAUA,EACVsU,SAAUA,EACV/zC,MAAOA,EACPsG,KAAMA,EACNokC,SAAW3oB,GACT2oB,EAAS,CAAE3oB,IAAG+xB,WAEhB/7B,OAAQhY,EACR6oB,MAAOA,IAGT1Q,eAACk2C,GAAgB,CACf3uB,SAAUA,EACVsU,SAAUA,EACV/zC,MAAOA,EACPsG,KAAMA,EACNokC,SAAW3oB,GACT2oB,EAAS,CAAE3oB,IAAG+xB,WAEhB/7B,OAAQhY,EACR6oB,MAAOA,IAGVrjB,GACC2S,eAACm2C,GAAiB,CAAA9oD,SAChB2S,eAACo2C,GAAU,CACThoD,KAAMA,EACNokC,SAAUA,EACVvjB,QAAS5hB,EACTwS,OAAQhY,EACRmT,KAAMA,QAjCLnT,EAqCJ,KAGC,EAIDuuD,UC3Ff,MAAMC,GAAoB/3C,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAAbH,CAAa,iGAG5BI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAC5Bzd,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAItD62C,GAA6Bh4C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mDAAAyV,YAAA,eAAVH,CAAU,MA8D9Bi4C,OA3Ccl9C,IAaf,IAbgB,QAC5B6qC,EAAU,EAAC,UACXtkC,EAAS,OACTZ,EAAM,KACN5Q,EAAI,QACJ6gB,EAAO,iBACPunC,EAAgB,oBAChBC,EAAsBA,SAErB,cACDC,GAAgB,EAAK,OACrB72C,EAAS,SAAQ,KACjB7E,EAAO,YACD3B,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kBAC5B,GAAIyP,kBAAQL,KAAaunC,EACvB,OAAO,KAGT,MAAMG,EAAc1nC,EAAQM,OAAMqnC,GAAKA,EAAE/a,WACzC,OACE57B,gBAACq2C,GAA0B,CAAC12C,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvE2R,EACDgB,eAACo2C,GAAU,CACTlS,QAASA,EACT1R,SAAUgkB,EACVvnC,QAASA,EACT7gB,KAAMA,EACNyR,OAAQC,EACR9E,KAAMA,IAEP07C,GACCz2C,gBAACo2C,GAAiB,CAChBh6B,QAASxS,GAAK4sC,EAAoB,CAAE5sC,IAAG8sC,aAAcA,IACrD,iBAAA52C,OAAgBF,EAAM,wBAAuBxS,SAAA,CAE5CspD,EAAc,WAAa,SAAS,YAGd,ECpEjC,MAAMn2C,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAAVH,CAAU,qBACZI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YAE1ChU,GAASle,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAATH,CAAS,wEAIPI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQkJ,OAGtD0uC,GAAkBv4C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAAVH,CAAU,kCAClBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAG1CwsB,GAAax4C,aAAOi4C,IAAqB/3C,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAA5BH,CAA4B,oCAChCI,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KAoExCksB,OAtDgB19C,IAOjB,IAPkB,UAC9BuG,EAAS,OACTZ,EAAM,KACNqnC,EAAI,KACJj4C,EAAI,kBACJ4oD,EAAiB,OACjBn3C,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,+BACtB,WAAEyb,GAAeP,KAqBvB,MAAMk8B,EAAc5Q,EAAKjuC,KAAIkvC,IACpB,CACL/f,WAAY+f,EAAEjF,WACdv6C,MAAOw/C,EAAEl5C,KACTytC,SAAUyL,EAAE3Y,WACZje,MAAO42B,EAAEz/C,OAIb,OACEoY,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD2S,eAACwc,GAAM,CAAAnvB,SAAE2R,IACTgB,eAAC62C,GAAe,CAAAxpD,SACd2S,eAAC82C,GAAU,CACT1oD,KAAMA,EACN6gB,QAASgoC,EACTT,iBAnCR,SAA0B18C,GAGe,IAHd,EACzB+P,EAAC,OACD+xB,GACoC9hC,EACpCwhB,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAK3R,EAAI,gBACdsiB,MAAM,GAAD3Q,OAAK67B,EAAO9zC,MAAK,aAAAiY,OAAY8J,EAAEqjB,OAAO4U,QAAU,KAAO,SAE9DkV,EACE3Q,EAAKjuC,KAAIkvC,IACA,IACFA,EACH3Y,WAAYiN,EAAOlrB,QAAU42B,EAAEz/C,GAAKgiB,EAAEqjB,OAAO4U,QAAUwF,EAAE3Y,eAIjE,EAmBQ9uB,OAAQC,QAGF,EC9DhB,MAAMo3C,GAAS54C,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAXH,CAAW,sCAwGX64C,OA3FuB99C,IAMJ,IANK,UACrCuG,EAAS,iBACTpK,EAAgB,OAChBqK,EAAS,SAAQ,gBACjByiB,EAAe,cACf80B,GACM/9C,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,8BACtB,WAAEyb,GAAeP,MAChBs8B,EAAoBC,GAAyBtnC,oBAAS,GACvDunC,EAAsC,OAAbH,QAAa,IAAbA,OAAa,EAAbA,EAAeG,uBACxCC,EAAe,CACnB,CACE3vD,GAAIF,EAAcC,WAAWC,GAC7Bw6C,WAAYgV,EACZ1oB,WAAYn5B,EAAiBkU,SAAS/hB,EAAcC,WAAWC,IAC/D4vD,YAAa,6BAEf,CACE5vD,GAAIF,EAAcI,YAAYF,GAC9Bw6C,WAAYgV,EACZ1oB,WAAYn5B,EAAiBkU,SAAS/hB,EAAcI,YAAYF,IAChE4vD,YAAa,+BAQbr/C,KAAIw+C,IAAM,IAADc,EACX,MAAO,IACFd,EACHxoD,KACE6R,gBAACi3C,GAAM,CAAA7pD,SAAA,CACJoJ,GAAsBmgD,EAAE/uD,IAAI,MACN,OAAtB0vD,QAAsB,IAAtBA,GAEA,QAFsBG,EAAtBH,EAAwBjpC,MACtBqpC,GAAmCA,EAAOC,kBAAoBhB,EAAE/uD,YAClE,IAAA6vD,OAFsB,EAAtBA,EAEEjkB,QAAS,EAAE,IACZ,IACFzzB,eAACy/B,GAAQ,CAAC5+B,QAAS+1C,EAAEa,YAAa53C,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAI62C,EAAE/uD,SAGlE,IAKGi7C,EAAkBzzB,mBACtB,IACE0zB,oBAAS8U,IACPv1B,EAAgB,CACd,CAAChvB,GAAaP,mBAAoB8kD,IAEpCP,GAAsB,EAAM,GAC3B,MACL,CAACh1B,IAsBH,OACEtiB,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAC+2C,GAAsB,CACrB/3C,OAAO,qBACPqnC,KAAMmR,EACNppD,KAAK,qBACL4oD,kBAzBN,SACEhU,GAEA,MAAM6U,EAA0B7U,EAC7B/xB,QAAQoD,GAAwCA,EAAEsa,aAClDv2B,KAAKoY,GAAwCA,EAAE3oB,KAElDyvD,GAAsB,GACtBxU,EAAgB+U,GAChBv8B,EAAW,CACTxzB,MAAO,kCACP4oB,MAAM,sCAAD3Q,OACHuP,kBAAQuoC,GACJ,gBACAA,EAAwBruB,KAAK,OAGvC,EASM3pB,OAAO,wBAEL,EC7BKi4C,OArEgBz+C,IAMG,IANF,UAC9BuG,EAAS,iBACTnK,EAAgB,OAChBoK,EAAS,SAAQ,gBACjByiB,EAAe,qBACfy1B,GACM1+C,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,8BACtB,WAAEyb,GAAeP,MAChBs8B,EAAoBC,GAAyBtnC,oBAAS,GAEvDwnC,EAAc,CAClBzoD,GAAsBC,MACtBD,GAAsBE,aACtBmJ,KAAI4mB,IACG,CACLn3B,GAAIm3B,EACJqjB,WAAYgV,EACZ1oB,WAAYl5B,EAAiBiU,SAASsV,GACtC5wB,KAAK,GAAD2R,OACFg4C,EACI7oD,GAAkC8vB,GAClCvoB,GAAsBuoB,QAO1B8jB,EAAkBzzB,mBACtB,IACE0zB,oBAASiV,IACP11B,EAAgB,CACd,CAAChvB,GAAab,mBAAoBulD,IAEpCV,GAAsB,EAAM,GAC3B,MACL,CAACh1B,IAmBH,OACEtiB,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAC+2C,GAAsB,CACrB/3C,OAAO,QACPqnC,KAAMmR,EACNppD,KAAK,oBACL4oD,kBAtBN,SAAsBhU,GACpB,MAAMgV,EAAehV,EAClB/xB,QAAQoD,GAAwCA,EAAEsa,aAClDv2B,KAAKoY,GAAwCA,EAAE3oB,KAElDyvD,GAAsB,GACtBxU,EAAgBkV,GAChB18B,EAAW,CACTxzB,MAAO,qCACP4oB,MAAM,gCAAD3Q,QAAmCuP,kBAAQ0oC,GAC5CxuC,OAAOmH,OAAO5hB,IACdipD,GACFxuB,KAAK,OAEX,EASM3pB,OAAO,uBAEL,ECuDKo4C,OA9GQ5+C,IAQW,IARV,UACtBuG,EAAS,WACTu0C,EAAU,UACVC,EAAS,WACT1+C,EAAU,OACVmK,EAAS,SAAQ,gBACjByiB,EAAe,cACf80B,GACM/9C,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,uBACtB,WAAEyb,GAAeP,MAChBs8B,EAAoBC,GAAyBtnC,oBAAS,IACvD,QAAEyB,GAAYy4B,eAIdgO,EAA6B,OAAbd,QAAa,IAAbA,OAAa,EAAbA,EAAec,cAC/BllC,GAAwB,OAAbokC,QAAa,IAAbA,OAAa,EAAbA,EAAepkC,WAAY,GAEtCwkC,EAAcxkC,EAAS5a,KAAKib,IAAyB,IAAD8kC,EACxD,MAAMC,EACJ/kC,EAAEvB,YAAcvoB,EAA8B,GAAE,KAAAwW,OAAQsT,EAAE+kC,WAAU,KACtE,MAAO,IACF/kC,EACHxrB,GAAIwrB,EAAEvB,UACNuwB,WAAYgV,EACZ1oB,WAAYj5B,EAAWgU,SAAS2J,EAAEvB,WAClC1jB,KACE6R,gBAAA,QAAM,wBAAsB,OAAM5S,SAAA,CAC/BgmB,EAAEglC,YACFD,EAAW,MACE,OAAbF,QAAa,IAAbA,GAEA,QAFaC,EAAbD,EAAe5pC,MACbC,GAA8BA,EAAEuD,YAAcuB,EAAEvB,mBAClD,IAAAqmC,OAFa,EAAbA,EAEE1kB,QAAS,EAAE,OAInB,IAKGqP,EAAkBzzB,mBACtB,IACE0zB,oBAASuV,IACPh2B,EAAgB,CACd,CAAChvB,GAAaX,aAAc2lD,IAE9BhB,GAAsB,EAAM,GAC3B,MACL,CAACh1B,IA0BH,OACEtiB,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACY,GAAa,CACZG,gBAAiBozC,EACjBrzC,cACE2Q,IAAYxoB,EAAcE,cACzBirD,IAAcphC,EAASnY,OAE1BmG,cAAe,KACfH,QACEb,eAAC+2C,GAAsB,CACrB/3C,OACEiB,gBAAAoyB,YAAA,CAAAhlC,SAAA,CAAE,gBACc,IACd2S,eAACy/B,GAAQ,CAAC5+B,QAAQ,gBAAgBhB,OAAQC,OAG9CumC,KAAMmR,EACNppD,KAAK,WACL4oD,kBAAmBhU,GA1C7B,SAAwBlpC,GAMpB,IANqB,YACvBy+C,EAAW,QACXvV,GAIDlpC,EACC,MAAMw+C,EAAoBtV,EACvB/xB,QAAQoD,GAAwCA,EAAEsa,aAClDv2B,KAAIib,GAAKA,EAAExrB,KACdyvD,GAAsB,GACtBxU,EAAgBwV,GAChBh9B,EAAW,CACTxzB,MAAO,4BACP4oB,MAAM,uBAAD3Q,QAA0BuP,kBAAQgpC,GACnCC,EACAA,EAAYtnC,QAAOoC,GAAKilC,EAAkB5uC,SAAS2J,EAAEvB,cAEtD1Z,KAAIib,GAAKA,EAAEglC,cACX7uB,KAAK,OAEZ,CAsBYgvB,CAAgB,CACdD,YAAavlC,EACbgwB,YAGJnjC,OAAO,aAGXA,OAAQC,KAEN,ECpHV,MAAMo3C,GAAS54C,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAXH,CAAW,sCAuIXm6C,OAzHmBp/C,IAMA,IANC,SACjCpE,EAAQ,UACR2K,EAAS,OACTC,EAAS,SAAQ,gBACjByiB,EAAe,cACf80B,GACM/9C,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kCACtB,WAAEyb,GAAeP,MAChBs8B,EAAoBC,GAAyBtnC,oBAAS,GACvD0oC,EAAiBzjD,EAASgc,QAAQyO,GACtClW,OAAOmH,OAAOpjB,GAAsBmc,SAASgW,KAEzCi5B,EAA6B,OAAbvB,QAAa,IAAbA,OAAa,EAAbA,EAAeuB,cAC/BC,EAAiC,OAAbD,QAAa,IAAbA,OAAa,EAAbA,EAAevgD,KAAIsnB,GAAKA,EAAE6tB,UAC9CiK,EAAe,CACnB,CACEC,YAAa,QACb5vD,GAAI8F,EAAwBC,OAE9B,CACE6pD,YAAa,gCACb5vD,GAAI8F,EAAwBM,sCAE9B,CACEwpD,YAAa,wBACb5vD,GAAI8F,EAAwBO,+BAU7B+iB,QACCyO,IACmB,OAAjBk5B,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBlvC,SAASgW,EAAE73B,MAC7B63B,EAAE73B,KAAO8F,EAAwBC,QACf,OAAjBgrD,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBtqC,MAAK2+B,GAAKA,EAAEttB,WAAW,gBAE/CvnB,KAAI4mB,IAAM,IAAD65B,EAAAC,EACR,MAAMC,EACJ/5B,EAAEn3B,KAAO8F,EAAwBC,MAC7BuvB,cACe,OAAbw7B,QAAa,IAAbA,GAKG,QALUE,EAAbF,EACI1nC,QAAQ1C,GACRpgB,EAA0BiK,KAAIwjC,GAAUA,EAAO/zC,KAAI6hB,SACjD6E,EAAEg/B,kBAEL,IAAAsL,OALU,EAAbA,EAMIzgD,KAAKmW,GAA8BA,EAAEklB,UACtC,GACQ,OAAbklB,QAAa,IAAbA,GAEC,QAFYG,EAAbH,EAAerqC,MACZC,GAA8BA,EAAEg/B,UAAYvuB,EAAEn3B,YAChD,IAAAixD,OAFY,EAAbA,EAEGrlB,QAAS,EAClB,MAAO,CACL5rC,GAAIm3B,EAAEn3B,GACNw6C,WAAYgV,EACZ1oB,WAAY15B,EAASyU,SAASsV,EAAEn3B,IAChCuG,KACE6R,gBAACi3C,GAAM,CAAA7pD,SAAA,CACJoJ,GAAsBuoB,EAAEn3B,IAAI,KAAGkxD,EAAa,IAAE,IAC/C/4C,eAACy/B,GAAQ,CACP5+B,QAASme,EAAEy4B,YACX53C,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIif,EAAEn3B,SAIlC,IAKCi7C,EAAkBzzB,mBACtB,IACE0zB,oBAASiV,IACP11B,EAAgB,CACd,CAAChvB,GAAahB,UAAW0lD,IAE3BV,GAAsB,EAAM,GAC3B,MACL,CAACh1B,IAyBH,OACEtiB,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAC+2C,GAAsB,CACrB/3C,OAAO,cACPqnC,KAAMmR,EACNppD,KAAK,wBACL4oD,kBAAmBhU,GA5BzB,SACEA,EACAgW,GAEA,MAAMhB,EAAehV,EAClB/xB,QAAQoD,GAAwCA,EAAEsa,aAClDv2B,KAAKoY,GAAwCA,EAAE3oB,KAElDyvD,GAAsB,GACtBxU,EAAgBmW,gBAAMjB,EAAcgB,IAEpC19B,EAAW,CACTxzB,MAAO,yCACP4oB,MAAM,oCAAD3Q,QAAuCuP,kBAAQ0oC,GAChDxuC,OAAOmH,OAAOhjB,GAAyBsjB,QACrC1C,IAAMA,EAAEoR,WAAW,aAErBq4B,GACFxuB,KAAK,OAEX,CAQoC0vB,CAAalW,EAAS0V,GACpD74C,OAAO,2BAEL,EC3BKs5C,OApGU9/C,IAQS,IARR,UACxBuG,EAAS,WACTu0C,EAAU,UACVC,EAAS,OACTv0C,EAAS,SAAQ,aACjBlK,EAAY,gBACZ2sB,EAAe,cACf80B,GACM/9C,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,uBACtB,WAAEyb,GAAeP,MAChBs8B,EAAoBC,GAAyBtnC,oBAAS,GACvDopC,EAAgC,OAAbhC,QAAa,IAAbA,OAAa,EAAbA,EAAegC,iBAClCC,GACY,OAAhBD,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkBhhD,KACfmW,GAA8BA,EAAEg+B,eAC9B,GAEDiL,EAAc6B,EAAiBjhD,KAAIyS,IAAM,IAADyuC,EAC5C,MAAO,CACLzxD,GAAIgjB,EACJw3B,WAAYgV,EACZ1oB,WAAwB,OAAZh5B,QAAY,IAAZA,OAAY,EAAZA,EAAc+T,SAASmB,GACnCzc,KACE6R,gBAAA,QAAM,wBAAsB,OAAM5S,SAAA,CAC/Bwd,EAAE,MACc,OAAhBuuC,QAAgB,IAAhBA,GAEA,QAFgBE,EAAhBF,EAAkB9qC,MAChBC,GAA8BA,EAAEg+B,aAAe1hC,WACjD,IAAAyuC,OAFgB,EAAhBA,EAEE7lB,QAAS,EAAE,OAInB,IAKGqP,EAAkBzzB,mBACtB,IACE0zB,oBAASwW,IACPj3B,EAAgB,CACd,CAAChvB,GAAaD,cAAekmD,IAE/BjC,GAAsB,EAAM,GAC3B,MACL,CAACh1B,IAwBH,OACEtiB,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACY,GAAa,CACZG,gBAAiBozC,EACjBrzC,cAAeszC,IAAciF,EAAiBx+C,OAC9CmG,cAAe,KACfH,QACEb,eAAC+2C,GAAsB,CACrB/3C,OACEiB,gBAAAoyB,YAAA,CAAAhlC,SAAA,CAAE,eACa,IACb2S,eAACy/B,GAAQ,CAAC5+B,QAAQ,eAAehB,OAAQC,OAG7CumC,KAAMmR,EACNppD,KAAK,eACL4oD,kBAAmBhU,GArC7B,SAA6BlpC,GAMzB,IAN0B,gBAC5B0/C,EAAe,QACfxW,GAIDlpC,EACC,MAAMy/C,EAAsBvW,EACzB/xB,QAAQoD,GAAwCA,EAAEsa,aAClDv2B,KAAIyS,GAAKA,EAAEhjB,KACdyvD,GAAsB,GACtBh8B,EAAW,CACTxzB,MAAO,gCACP4oB,MAAM,2BAAD3Q,QAA8BuP,kBAAQiqC,GACvCC,EACAA,EAAgBvoC,QAAOpG,GAAwB,OAAnB0uC,QAAmB,IAAnBA,OAAmB,EAAnBA,EAAqB7vC,SAASmB,MAC5D2e,KAAK,QAETsZ,EAAgByW,EAClB,CAmBYE,CAAqB,CACnBD,gBAAiBH,EACjBrW,YAGJnjC,OAAO,iBAGXA,OAAQC,KAEN,ECxGV,MAAMo3C,GAAS54C,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,eAAXH,CAAW,sCAqGXo7C,OAvFMrgD,IAMa,IANZ,UACpBuG,EAAS,OACT7J,EAAM,OACN8J,EAAS,SAAQ,gBACjByiB,EAAe,cACf80B,GACM/9C,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,0BACtB,WAAEyb,GAAeP,MAChBs8B,EAAoBC,GAAyBtnC,oBAAS,GACvD2pC,EAA4B,OAAbvC,QAAa,IAAbA,OAAa,EAAbA,EAAeuC,aAE9BnC,EAAe,CACnB,CACEC,YAAa,OACb5vD,GAAI2B,EAAwBG,MAE9B,CACE8tD,YAAa,cACb5vD,GAAI2B,EAAwBK,aAE9B,CACE4tD,YAAa,OACb5vD,GAAI2B,EAAwBE,OAK5B0O,KAAI4mB,IAAM,IAAD46B,EACX,MAAO,CACL/xD,GAAIm3B,EAAEn3B,GACNw6C,WAAYgV,EACZ1oB,WAAY54B,EAAO2T,SAASsV,EAAEn3B,IAC9BuG,KACE6R,gBAACi3C,GAAM,CAAA7pD,SAAA,CACJoJ,GAAsBuoB,EAAEn3B,IAAI,MAChB,OAAZ8xD,QAAY,IAAZA,GAAoE,QAAxDC,EAAZD,EAAcrrC,MAAMC,GAA8BA,EAAExY,SAAWipB,EAAEn3B,YAAG,IAAA+xD,OAAxD,EAAZA,EACGnmB,QAAS,EAAE,IACb,IACFzzB,eAACy/B,GAAQ,CAAC5+B,QAASme,EAAEy4B,YAAa53C,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIif,EAAEn3B,SAGlE,IAKGi7C,EAAkBzzB,mBACtB,IACE0zB,oBAAS8W,IACPv3B,EAAgB,CACd,CAAChvB,GAAaJ,QAAS2mD,IAEzBvC,GAAsB,EAAM,GAC3B,MACL,CAACh1B,IAmBH,OACEtiB,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAC+2C,GAAsB,CACrB/3C,OAAO,SACPqnC,KAAMmR,EACNppD,KAAK,SACL4oD,kBAtBN,SAAwBhU,GACtB,MAAM6W,EAAgB7W,EACnB/xB,QAAQoD,GAAwCA,EAAEsa,aAClDv2B,KAAKoY,GAAwCA,EAAE3oB,KAElDyvD,GAAsB,GACtBxU,EAAgB+W,GAChBv+B,EAAW,CACTxzB,MAAO,0BACP4oB,MAAM,qBAAD3Q,QAAwBuP,kBAAQuqC,GACjCrC,EAAYp/C,KAAIw+C,GAAKA,EAAE/uD,KACvBgyD,GACFrwB,KAAK,OAEX,EASM3pB,OAAO,YAEL,ECnGV,MAAMq3C,GAAS54C,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAXH,CAAW,sCAyHXw7C,OA3GWzgD,IAMQ,IANP,UACzBuG,EAAS,OACTC,EAAS,SAAQ,YACjB5J,EAAW,gBACXqsB,EAAe,cACf80B,GACM/9C,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,0BACtB,WAAEyb,GAAeP,MAChBs8B,EAAoBC,GAAyBtnC,oBAAS,GACvD+pC,EAAiC,OAAb3C,QAAa,IAAbA,OAAa,EAAbA,EAAe2C,kBACnCC,EAAwC,OAAjBD,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmB3hD,KAAImW,GAAKA,EAAE0rC,aAErDzC,EAAe,CACnB,CACEC,YAAa,cACb5vD,GAAIR,EAAwBC,aAE9B,CACEmwD,YAAa,oBACb5vD,GAAIR,EAAwBG,6BAE9B,CACEiwD,YAAa,sBACb5vD,GAAIR,EAAwBI,qBAE9B,CACEgwD,YAAa,2BACb5vD,GAAIR,EAAwBK,0BAE9B,CACE+vD,YAAa,mBACb5vD,GAAIR,EAAwBE,yBAW7B0pB,QAAOnX,IAAA,IAAC,GAAEjS,GAAIiS,EAAA,OAAyB,OAApBkgD,QAAoB,IAApBA,OAAoB,EAApBA,EAAsBtwC,SAAS7hB,EAAG,IACrDuQ,KAAI4mB,IAAM,IAADk7B,EACR,MAAO,CACLryD,GAAIm3B,EAAEn3B,GACNw6C,WAAYgV,EACZ1oB,WAAY14B,EAAYyT,SAASsV,EAAEn3B,IACnCuG,KACE6R,gBAACi3C,GAAM,CAAA7pD,SAAA,CACJoJ,GAAsBuoB,EAAEn3B,IAAI,MACX,OAAjBkyD,QAAiB,IAAjBA,GAEA,QAFiBG,EAAjBH,EAAmBzrC,MACjBC,GAA8BA,EAAE0rC,aAAej7B,EAAEn3B,YACnD,IAAAqyD,OAFiB,EAAjBA,EAEEzmB,QAAS,EAAE,IACZ,IACFzzB,eAACy/B,GAAQ,CACP5+B,QAASme,EAAEy4B,YACX53C,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIif,EAAEn3B,SAIlC,IAKCi7C,EAAkBzzB,mBACtB,IACE0zB,oBAASiV,IACP11B,EAAgB,CACd,CAAChvB,GAAaN,mBAAoBglD,IAEpCV,GAAsB,EAAM,GAC3B,MACL,CAACh1B,IAmBH,OACEtiB,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAC+2C,GAAsB,CACrB/3C,OAAO,SACPqnC,KAAMmR,EACNppD,KAAK,gBACL4oD,kBAtBN,SAAsBhU,GACpB,MAAMgV,EAAehV,EAClB/xB,QAAQoD,GAAwCA,EAAEsa,aAClDv2B,KAAKoY,GAAwCA,EAAE3oB,KAElDyvD,GAAsB,GACtBxU,EAAgBkV,GAChB18B,EAAW,CACTxzB,MAAO,iCACP4oB,MAAM,4BAAD3Q,QAA+BuP,kBAAQ0oC,GACxCxuC,OAAOmH,OAAOtpB,GACd2wD,GACFxuB,KAAK,OAEX,EASM3pB,OAAO,mBAEL,EC9GV,MAAMq3C,GAAS54C,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAXH,CAAW,sCAmIX67C,OApHgB9gD,IAOU,IAADy/C,EAAA,IAPR,SAC9B7jD,EAAQ,UACR2K,EAAS,aACTw6C,EAAY,OACZv6C,EAAS,SAAQ,gBACjByiB,EAAe,cACf80B,GACM/9C,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,4BACtB,WAAEyb,GAAeP,MAChBs8B,EAAoBC,GAAyBtnC,oBAAS,GACvD2oC,EAA6B,OAAbvB,QAAa,IAAbA,OAAa,EAAbA,EAAeuB,cAC/B0B,EAAsBplD,EAASgc,QAAQyO,GAC3ClW,OAAOmH,OAAOhjB,GAAyB+b,SAASgW,KAE5Ck5B,EAAiC,OAAbD,QAAa,IAAbA,OAAa,EAAbA,EAAevgD,KAAIsnB,GAAKA,EAAE6tB,UAC9CiK,EAAe,CACnB,CACEC,YAAa,kCACb5vD,GAAI0F,EAAqBC,iBACzB8sD,UAAWF,GAEb,CACE3C,YAAa,uCACb5vD,GAAI0F,EAAqBE,sBACzB6sD,UAAWF,GAEb,CACE3C,YAAa,uCACb5vD,GAAI0F,EAAqBG,kBACzB4sD,WAAYngC,gBACG,OAAbw+B,QAAa,IAAbA,GAGC,QAHYG,EAAbH,EAAerqC,MACZC,GACCA,EAAEg/B,UAAYhgD,EAAqBG,2BACtC,IAAAorD,OAHY,EAAbA,EAGGrlB,SAYNxiB,QAAO+N,GAAKA,EAAEs7B,YAA8B,OAAjB1B,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBlvC,SAASsV,EAAEn3B,OACzDuQ,KAAI4mB,IAAM,IAADu7B,EACR,MAAO,CACL1yD,GAAIm3B,EAAEn3B,GACNw6C,WAAYgV,EACZ1oB,WAAY15B,EAASyU,SAASsV,EAAEn3B,IAChCuG,KACE6R,gBAACi3C,GAAM,CAAA7pD,SAAA,CACJoJ,GAAsBuoB,EAAEn3B,IAAI,MACf,OAAb8wD,QAAa,IAAbA,GAEA,QAFa4B,EAAb5B,EAAerqC,MACbC,GAA8BA,EAAEg/B,UAAYvuB,EAAEn3B,YAChD,IAAA0yD,OAFa,EAAbA,EAEE9mB,QAAS,EAAE,IACZ,IACFzzB,eAACy/B,GAAQ,CACP5+B,QAASme,EAAEy4B,YACX53C,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIif,EAAEn3B,SAIlC,IAKCi7C,EAAkBzzB,mBACtB,IACE0zB,oBAASiV,IACP11B,EAAgB,CACd,CAAChvB,GAAahB,UAAW0lD,IAE3BV,GAAsB,EAAM,GAC3B,MACL,CAACh1B,IAuBH,OAAOk1B,EAAY38C,OACjBmF,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAC+2C,GAAsB,CACrB/3C,OAAO,qBACPqnC,KAAMmR,EACNppD,KAAK,qBACL4oD,kBAAmBhU,GA1BzB,SACEA,EACAgW,GAEA,MAAMhB,EAAehV,EAClB/xB,QAAQoD,GAAwCA,EAAEsa,aAClDv2B,KAAKoY,GAAwCA,EAAE3oB,KAElDyvD,GAAsB,GACtBxU,EAAgBmW,gBAAMjB,EAAcgB,IAEpC19B,EAAW,CACTxzB,MAAO,sCACP4oB,MAAM,iCAAD3Q,QAAoCuP,kBAAQ0oC,GAC7CxuC,OAAOmH,OAAOpjB,GACdyqD,GACFxuB,KAAK,OAEX,CASQ0vB,CAAalW,EAASqX,GAExBx6C,OAAO,yBAGT,IAAI,EClIV,MAAM6pC,GAAeprC,aAAO6kC,IAAiB3kC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAxBH,CAAwB,0BAGvC44C,GAAS54C,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAXH,CAAW,sCAuHXk8C,OAzGYnhD,IAMO,IANN,UAC1BuG,EAAS,OACTC,EAAS,SAAQ,gBACjByiB,EAAe,cACfnsB,EAAa,cACbihD,GACM/9C,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,2BACtB,WAAEyb,GAAeP,MAChBs8B,EAAoBC,GAAyBtnC,oBAAS,GACvDyqC,EAAkC,OAAbrD,QAAa,IAAbA,OAAa,EAAbA,EAAeqD,mBAOpCjD,EAAe,CACnB,CACEC,YAAa,QACb5vD,GAAI+C,EAA0BE,OAGhC,CACE2sD,YAAa,WACb5vD,GAAI+C,EAA0BI,UAEhC,CACEysD,YAAa,MACb5vD,GAAI+C,EAA0BC,KAEhC,CACE4sD,YAAa,eACb5vD,GAAI+C,EAA0BG,KAO/BkmB,QAAO+N,IAAK07B,OA5BoBlP,EA4BMxsB,EAAEn3B,GA3BvB,OAAlB4yD,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBnsC,MACjBC,GAA8BA,EAAEgQ,WAAaitB,IAFfA,KA4BW,IAC3CpzC,KAAI4mB,IAAM,IAAD27B,EACR,MAAO,CACL9yD,GAAIm3B,EAAEn3B,GACNw6C,WAAYgV,EACZ1oB,WAAYx4B,EAAcuT,SAASsV,EAAEn3B,IACrCuG,KACE6R,gBAACi3C,GAAM,CAAA7pD,SAAA,CACL2S,eAAC0pC,GAAY,CAAC1uC,KAAMgkB,EAAEn3B,GAAIgY,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIif,EAAEn3B,MACpD4O,GAAsBuoB,EAAEn3B,IAAI,MACV,OAAlB4yD,QAAkB,IAAlBA,GAEA,QAFkBE,EAAlBF,EAAoBnsC,MAClBC,GAA8BA,EAAEgQ,WAAaS,EAAEn3B,YACjD,IAAA8yD,OAFkB,EAAlBA,EAEElnB,QAAS,EAAE,IAEdzzB,eAACy/B,GAAQ,CACP5+B,QAASme,EAAEy4B,YACX53C,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIif,EAAEn3B,SAIlC,IAKCi7C,EAAkBzzB,mBACtB,IACE0zB,oBAASiV,IACP11B,EAAgB,CACd,CAAChvB,GAAaF,iBAAkB4kD,IAElCV,GAAsB,EAAM,GAC3B,MACL,CAACh1B,IAmBH,OACEtiB,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAC+2C,GAAsB,CACrB/3C,OAAO,YACPqnC,KAAMmR,EACNppD,KAAK,iBACL4oD,kBAtBN,SAAsBhU,GACpB,MAAMgV,EAAehV,EAClB/xB,QAAQoD,GAAwCA,EAAEsa,aAClDv2B,KAAKoY,GAAwCA,EAAE3oB,KAElDyvD,GAAsB,GACtBxU,EAAgBkV,GAChB18B,EAAW,CACTxzB,MAAO,kCACP4oB,MAAM,6BAAD3Q,QAAgCuP,kBAAQ0oC,GACzCxuC,OAAOmH,OAAO/lB,GACdotD,GACFxuB,KAAK,OAEX,EASM3pB,OAAO,oBAEL,ECzHV,MAAMW,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAAVH,CAAU,mCACZI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YACjC9xB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElD+vB,GAAgBt8C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAVH,CAAU,6BAK1Bu8C,GAAev8C,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAbH,CAAa,qGAElBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAK1C/N,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAVH,CAAU,wDAK3Bw8C,GAAQx8C,aAAO8xB,IAAY5xB,WAAA,CAAAxV,YAAA,oBAAAyV,YAAA,gBAAnBH,CAAmB,2CAI3BqhC,GAAQrhC,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,oBAAAyV,YAAA,gBAATH,CAAS,+BACNI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAGtDu7C,GAAaz8C,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAbH,CAAa,8FAEhBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAErCzd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QA+J5B0wB,OAnJI3hD,IAIe,IAJd,UAClBuG,EAAS,aACTq7C,EAAY,OACZp7C,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,iBACtB,WAAEyb,GAAeP,KACjB1C,EAAQC,gBAER,gBAAEgK,EAAe,UAAEpX,EAAS,mBAAEuX,GAAuB5B,MACnDzW,KAAMgtC,EAAa,WAAEjD,EAAU,UAAEC,GAAcjB,GAAiB,CACtElkC,QAAS,CAAEjU,KAAMynB,EAAmBpB,mBAEhC+4B,EAAezmC,GAAgBzI,EAAU0I,WACzCsnC,EAAkBhwC,EAAU/V,UAAY7G,GAAaQ,KACrDqsD,EACJ14B,EAAmBpB,kBAAoBz0B,EAAqBG,YA0B9D,OACEiT,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD4S,gBAACS,GAAiB,CAAArT,SAAA,CAChB4S,gBAAC46C,GAAY,CAAAxtD,SAAA,CACX2S,eAAC2/B,GAAK,CAAAtyC,SAAC,YACP2S,eAAC86C,GAAK,CAACz+B,QA7Bf,SACExS,GAEAA,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAM,4BACN4oB,MAAM,2BAAD3Q,OAA6BsY,EAAMizB,OAE1C2P,GACF,EAmB4Cp7C,OAAQC,OAE9CG,gBAACsc,GAAc,CAAAlvB,SAAA,CACZ+sD,EACCp6C,eAAC46C,GAAa,CAAAvtD,SACZ2S,eAAC85C,GAAiB,CAChB7jD,YAAaiV,EAAUjV,YACvB4J,OAAQC,EACRwiB,gBAAiBA,EACjB80B,cAAeA,MAGjB,MACHgD,GAAiBc,GAAoBC,EASlC,KARFn7C,eAAC46C,GAAa,CAAAvtD,SACZ2S,eAACm3C,GAAsB,CACrB3hD,iBAAkB0V,EAAU1V,iBAC5BqK,OAAQC,EACRwiB,gBAAiBA,EACjB80B,cAAeA,MAIrBp3C,eAAC46C,GAAa,CAAAvtD,SACZ2S,eAAC83C,GAAsB,CACrBriD,iBAAkByV,EAAUzV,iBAC5BoK,OAAQC,EACRwiB,gBAAiBA,EACjBy1B,qBAAsBoD,MAGxBA,EAUE,KATFn7C,eAAC46C,GAAa,CAAAvtD,SACZ2S,eAACm6C,GAAsB,CACrBllD,SAAUiW,EAAUjW,SACpBmlD,aAAcA,EACdv6C,OAAQC,EACRwiB,gBAAiBA,EACjB80B,cAAeA,MAIrBp3C,eAAC46C,GAAa,CAAAvtD,SACZ2S,eAACy4C,GAAyB,CACxBxjD,SAAUiW,EAAUjW,SACpB4K,OAAQC,EACRwiB,gBAAiBA,EACjB80B,cAAeA,MAGjB+D,EASE,KARFn7C,eAAC46C,GAAa,CAAAvtD,SACZ2S,eAACw6C,GAAkB,CACjB36C,OAAQC,EACRwiB,gBAAiBA,EACjBnsB,cAAe+U,EAAU/U,cACzBihD,cAAeA,MAIrBp3C,eAAC46C,GAAa,CAAAvtD,SACZ2S,eAAC05C,GAAY,CACX3jD,OAAQmV,EAAUnV,OAClB8J,OAAQC,EACRwiB,gBAAiBA,EACjB80B,cAAeA,MAGnBp3C,eAAC46C,GAAa,CAAAvtD,SACZ2S,eAACm5C,GAAgB,CACfhF,WAAYA,EACZC,UAAWA,EACXv0C,OAAQC,EACRnK,aAAcuV,EAAUvV,aACxB2sB,gBAAiBA,EACjB80B,cAAeA,MAGnBp3C,eAAC46C,GAAa,CAAAvtD,SACZ2S,eAACi4C,GAAc,CACbp4C,OAAQC,EACRq0C,WAAYA,EACZC,UAAWA,EACX1+C,WAAYwV,EAAUxV,WACtB4sB,gBAAiBA,EACjB80B,cAAeA,MAGnBp3C,eAAC+6C,GAAU,CACT1+B,QA1GV,SACExS,GAEAA,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAM,yBACN4oB,MAAM,wBAAD3Q,OAA0BsY,EAAMizB,OAEvC2P,GACF,EAiGU,iBAAAl7C,OAAgBD,EAAU,gBAAezS,SAC1C,gBAKK,EC3MhB,MAAM+tD,GAAU98C,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAZH,CAAY,kCACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGrCm/B,GAAU/8C,aAAOqqB,IAAOnqB,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAdH,CAAc,+GAEdI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAEjC5rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAIlDywB,GAAch9C,aAAO08C,IAAWx8C,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAlBH,CAAkB,aA2DvBi9C,OAjDoBliD,IAGrB,IAHsB,UAClCuG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,8BACtB,WAAEyb,GAAeP,MAChBygC,EAAwBC,GAA6BzrC,oBAAS,GAC/DqI,EAAQC,eAsBd,OACErY,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACo7C,GAAO,CAAC/zB,OAAO,WAAWjL,QAtB/B,SAAwBxS,GACtBA,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAM,qBACN4oB,MAAM,wBAAD3Q,OAA0BsY,EAAMizB,OAEvCmQ,GAA0B,EAC5B,EAcwD57C,OAAQC,EAAWzS,SAAA,CACrE2S,eAACo7C,GAAO,CAACtmD,KAAK,UAAU+K,OAAQC,IAAc,aAGhDE,eAACg1C,GAAa,CACZC,OAAQuG,EACRtG,cAlBN,SAAuBrrC,GACrBA,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAM,qBACN4oB,MAAM,yBAAD3Q,OAA2BsY,EAAMizB,OAExCmQ,GAA0B,EAC5B,EAWM57C,OAAQC,EAAWzS,SAEnB2S,eAACs7C,GAAW,CACVL,aAAcA,IAAMQ,GAA0B,GAC9C57C,OAAQC,QAGR,ECtDV,MAAM47C,GAAoB,CACxBtpD,GAAsBQ,aACtBR,GAAsBY,kBACtBZ,GAAsBe,MACtBf,GAAsBW,kBACtBX,GAAsBK,kBACtBL,GAAsBE,SACtBF,GAAsBgB,gBACtBhB,GAAsBc,OACtBd,GAAsBO,YACtBP,GAAsBiB,cAIlBsoD,GAAOr9C,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,oBAAAyV,YAAA,eAAbH,CAAa,2IAEVI,GACLg4B,GAAS,CAAEC,IAAKj4B,EAAMC,MAAM2C,OAAO2a,IAAIqO,MAAOsM,QAAS,OAS5DglB,GAAIt9C,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,iBAAAyV,YAAA,eAAZH,CAAY,mEAEXI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAIrC2/B,GAAev9C,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAbH,CAAa,4EAuJnBw9C,OA/IKA,KAClB,MACM,WAAExgC,GAAeP,MACjB,gBAAEuH,EAAe,UAAEpX,EAAS,mBAAEuX,GAAuB5B,MACrD,KAAEzW,GAAS+oC,GAAiB,CAChClkC,QAAS,CAAEjU,KAAMynB,EAAmBpB,mBAEhC06B,EAAiB,KACb,OAAJ3xC,QAAI,IAAJA,OAAI,EAAJA,EAAMuuC,cAAcvgD,KAAImW,GAAKA,EAAEg/B,YAAY,OACvC,OAAJnjC,QAAI,IAAJA,OAAI,EAAJA,EAAM2vC,kBAAkB3hD,KAAImW,GAAKA,EAAE0rC,eAAe,IAMlD+B,EAAuD3sC,mBAAQ,KACnE,MAAMroB,EAAyC,GAW/C,OAVAwiB,OAAO+L,QAAQlM,eAAK6B,EAAWwwC,KAAoBpuC,SAAQygC,IACzD,MAAO9mD,EAAKg1D,GAAclO,EAGtB/5B,kBAAQioC,GACVA,EAAW7jD,KAAKwd,GAAc5uB,EAAOu7B,KAAK,CAACt7B,EAAe2uB,MAE1D5uB,EAAOu7B,KAAK,CAACt7B,EAAeg1D,GAC9B,IAEKj1D,CAAM,GACZ,CAACkkB,IAEJ,SAASgxC,EACPj1D,EACAg1D,GAEA,GAAIh1D,IAAQmL,GAAsBO,YAAa,CAC7C,MAAMugB,EAAc,OAAJ9I,QAAI,IAAJA,OAAI,EAAJA,EAAM4I,SAAS1E,MAAK+E,GAAKA,EAAEvB,YAAcmqC,IACzD,OAAS/oC,EAAUA,EAAQmlC,YAAc4D,CAC3C,CACA,OACEh1D,IAAQmL,GAAsBK,mBAC9BgwB,EAAmBpB,kBAAoBz0B,EAAqBG,YAErDmC,GAAkC+sD,GAGzCxlD,GAAsBxP,IACtBwP,GAAsBwlD,IACtBA,CAEJ,CAyCA,MAAME,EAAehoB,kBACnB6nB,EAAqB5jD,KAAI21C,IACvB,MAAO9mD,EAAKg1D,GAAclO,EAG1B,IACGkO,GACAh1D,IAAQmL,GAAsBO,cAAgByX,IAC7CnjB,IAAQmL,GAAsBE,UAC9BrL,IAAQmL,GAAsBY,qBAC7B+oD,EAAeryC,SAASuyC,GAE3B,OAAO,KAET,MAAMG,EAAM,gBAAAr8C,OAAmB9Y,EAAG,KAAA8Y,OAAIk8C,GACtC,OACEh8C,gBAAC07C,GAAI,CAEH,cAAaS,EACb//B,QAASxS,GA1DjB,SAAoBxQ,GAQhB,IARiB,EACnBwQ,EAAC,IACD5iB,EAAG,MACHypB,GAKDrX,EACC,MAAMgjD,EAAenxC,EAAUjkB,GAC/Bq7B,EAAgB,CACd,CAACr7B,GAAM+sB,kBAAQqoC,GACXtyC,iBAAOsyC,GAAc38B,GAAKA,IAAMhP,IAChC,OAEN4K,EAAW,CACTzR,IACA/hB,MAAO,eACP4oB,MAAM,qBAAD3Q,OAAuB2Q,EAAK,kBAErC,CAuCU4rC,CAAY,CACVzyC,IACA5iB,IAAKA,EACLypB,MAAOurC,IAGX,wBACEh1D,IAAQmL,GAAsBO,YAAc,OAAS,KACtDtF,SAAA,CAEA6uD,EACCj1D,EACAg1D,GAEFj8C,eAAC47C,GAAC,CAAC9mD,KAAK,cAAc+K,OA3HX,mBA0GNu8C,EAkBA,KAKPG,EAAiBJ,EAAathD,OAClCmF,eAAC67C,GAAY,CACXx/B,QAASxS,GA3Db,SACEA,GAEAyY,EACEoxB,eACEz/B,GAA0B,CAAEL,UAAW1I,EAAU0I,YACjDjf,IAEFA,IAEF2mB,EAAW,CACTzR,IACA/hB,MAAO,6BACP4oB,MAAM,WAEV,CA4CkB8rC,CAAoB3yC,GAClC,cAAY,6BAA4Bxc,SAEzC,iBADK,8BAIJ,KAEJ,OAAO2S,eAAAqyB,YAAA,CAAAhlC,SAAG,IAAI8uD,EAAcI,IAAiB,EC3M/C,MAAM/7C,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAVH,CAAU,oBACbI,GAASA,EAAMC,MAAM+/B,KAAKK,aAyB1B0d,OAfYpjD,IAIb,IAJc,SAC1BhM,EAAQ,UACRuS,EAAS,OACTC,EAAS,UACHxG,EACN,OACE2G,eAACQ,GAAS,CACRZ,UAAWA,EACX,iBAAAG,OAAgBF,EAAM,sBAAqBxS,SAE1CA,GACS,ECPhB,MAAMqvD,GAAiBp+C,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAjBH,CAAiB,4EAE7BI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAI9Bxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAGvCwgC,GAAar+C,aAAO6oB,IAAgB3oB,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAvBH,CAAuB,sDAC3BI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQs/B,SAGtDqe,GAAUt+C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAVH,CAAU,qCAEVI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YAE1ChU,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAbH,CAAa,2KAIbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQs/B,SA0D7Cse,OAzCiBxjD,IAA8C,IAA7C,UAAEuG,EAAS,OAAEC,EAAS,UAAiBxG,EACtE,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gCACtB,oBAAEkiB,EAAmB,UAAE7W,GAAc2V,KACrC1rB,EAAU+V,EAAU/V,QACpB2nD,EAAgB/6B,EAAoB,CACxCpN,oBAAoB,EACpBkN,kBAAmB,CAAEvsB,aAAc,MACnC+rB,gBAAiBz0B,EAAqBE,eAGlCiwD,EAAmBpnB,oBACvBC,qBAAW,GAAD71B,OACL5K,IAAY7G,GAAaQ,KAAO,SAAWqG,EAAQ4K,OAAO,QAGjE,OACEC,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD4S,gBAAC28C,GAAO,CAAAvvD,SAAA,CACN4S,gBAACw8C,GAAkB,CAAApvD,SAAA,CACjB4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL2S,eAAC08C,GAAc,CACbtuD,KAAK,+BACLq4B,GAAIq2B,EACJj9C,OAAO,+BAA8BxS,SAErC2S,eAAC28C,GAAU,CACT7nD,KAAK,gBACL+L,QAASk8C,EACTl9C,OAAQC,MAGZE,eAACu7C,GAA0B,CAAC17C,OAAQC,IACpCE,eAAC87C,GAAW,OACJ,OAEZ97C,eAACg0C,GAAW,CAACn0C,OAAQC,QAEnB,ECjEKk9C,OAhBS3jD,IAGI,IAHH,UACvBuG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,sBACtBxE,EAAQgC,cAAapE,GAA6BA,EAAMoC,QAE9D,OAAY,OAALA,QAAK,IAALA,KAAQ,kBACb2E,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAC68C,GAAuB,CAACh9C,OAAQC,MAGnCE,eAACwmB,KAAQ,CAACC,GAAE,KACb,EC3BH,MAAMjmB,GAAYlC,KAAO2+C,MAAKz+C,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAZH,CAAY,gBACnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAuB5ByyB,OAbQ7jD,IAIK,IAJJ,UACtBuG,EAAS,QACTiB,EAAO,OACPhB,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,oBAC5B,OACEG,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAAA,MAAA3S,SAAKwT,GAAW,sCACN,ECCD0+B,I,MAAAA,GAfMlmC,IAKP,IALQ,UACpBuG,EAAS,QACTiB,EAAO,OACP7B,EAAM,OACNa,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kBAC5B,OACEI,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CAC9C2R,EAASgB,eAAA,UAAA3S,SAAS2R,IAAmB,KACvC6B,IACG,ECfV,MAAML,GAAYlC,aAAOihC,IAAa/gC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAApBH,CAAoB,0EACtBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QACpC5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAI/D4yB,GAAgB7+C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAVH,CAAU,gEAK5BI,GACIA,EAAMgyB,iBACDlJ,aAAGC,QAAAC,aAAA,sFACShpB,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAI9D/C,aAAGM,QAAAJ,aAAA,sDAMVnL,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAVH,CAAU,4BAG3Bw8C,GAAQx8C,aAAO8xB,IAAY5xB,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAnBH,CAAmB,wCA8ClB8+C,OA/BU/jD,IAOX,IAPY,UACxBuG,EAAS,QACTiB,EAAO,QACPkxB,EAAU,QAAO,OACjB/yB,EAAM,cACNq+C,EAAgBA,KAAM,MAAI,OAC1Bx9C,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,uBACtB6wB,IAAqB1xB,EACrBs+C,EAA6B,UAAZvrB,KAAyBsrB,EAC1CnsB,EACJR,GAAoB4sB,EAClBr9C,gBAACk9C,GAAa,CAACzsB,iBAAkBA,EAAiBrjC,SAAA,CAC/C2R,EACAs+C,EACCt9C,eAAC86C,GAAK,CAACz+B,QAASghC,EAAex9C,OAAQC,IACrC,QAEJ,KAEN,OACEE,eAACQ,GAAS,CACRZ,UAAWA,EACXiB,QAASb,eAACuc,GAAc,CAAAlvB,SAAEwT,IAC1B7B,OAAQkyB,EACRrxB,OAAQC,GACR,ECnEN,MAAM6oB,GAASrqB,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAbH,CAAa,kEAStBi/C,GAAiBj/C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAAVH,CAAU,oBAgDlBk/C,I,YAAAA,GA5BUnkD,IASX,IATY,UACxBuG,EAAS,eACT69C,EAAc,iBACdC,EAAmB,SAAQ,KAC3B3wB,EAAI,aACJ4wB,EAAY,cACZC,EAAgB,CAAC,QAAS,SAAQ,eAClCC,EAAc,OACdh+C,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,sBAC5B,OACEG,eAAC2tC,KAAc,CACblgB,QAASmwB,EACTrwB,UAAWmwB,EACXjhB,QAASz8B,eAACu9C,GAAc,CAAAlwD,SAAEowD,IAC1BK,SAAUH,EACVI,WAAW,EACXC,eAAe,YACfjxB,KAAMA,EAAK1/B,SAEX2S,eAAC2oB,GAAM,CAAC/oB,UAAWA,EAAW,iBAAAG,OAAgBD,EAAU,YAAWzS,SAChEwwD,KAEY,ECjDrB,MAAMI,GAAc3/C,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAZH,CAAY,oDACrBI,GACQ,SAAfA,EAAM5J,KACF4J,EAAMC,MAAM2C,OAAO2a,IAAIwO,MACvB/rB,EAAMC,MAAM2C,OAAO2a,IAAIC,YAElBxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAIvCojB,GAAejhC,aAAO8+C,IAAiB5+C,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAxBH,CAAwB,yBAKzCI,IACA,OAAQA,EAAMw/C,gBACZ,IAAK,MACH,OAAO12B,aAAGC,QAAAC,aAAA,kDAGZ,IAAK,SACH,OAAOF,aAAGM,QAAAJ,aAAA,+CAGZ,IAAK,OACH,OAAOF,aAAGQ,QAAAN,aAAA,iDAIZ,QACE,OAAOF,aAAGgB,QAAAd,aAAA,gDAGd,IAsFWy2B,OApEG9kD,IASgB,IATf,OACjB0B,EAAS,QAAO,UAChB6E,EAAS,QACTiB,EAAO,OACP7B,EAAM,KACNlK,EAAI,KACJ1G,EAAI,eACJ8vD,EAAiB,QAAO,OACxBr+C,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gBACrBu+C,EAAWC,GAAgBruC,oBAAS,IAErC,WAAEsL,GAAeP,KACjBujC,EAA2B,UAAXvjD,EAoBtB,OACEiF,eAACw9C,GAAgB,CACfG,aAXJ,SAAuBY,GACrBF,EAAaE,GAEbjjC,EAAW,CACTxzB,MAAM,GAADiY,OAAK3R,EAAI,eACdsiB,MAAO6tC,EAAW,QAAU,UAEhC,EAKId,eACEz9C,eAACu/B,GAAY,CACX1+B,QAASA,EACTkxB,QAASh3B,EACTiE,OAAQA,EACRq+C,cA1BR,SAAuBxzC,GACrBw0C,GAAa,GACb/iC,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAK3R,EAAI,eACdsiB,MAAO,6BAEX,EAoBQwtC,eAAgBA,EAChBr+C,OAAQC,IAGZ49C,iBAAkBQ,EAClBnxB,KAAMqxB,EACNv+C,OAAQC,EACR89C,cAAeU,EAAgB,CAAC,QAAS,SAAWvjD,EACpD8iD,eACE79C,eAACi+C,GAAW,CACVr+C,UAAWA,EACX,cAAaE,EACbhL,KACEoM,sBAAYpM,GACRwpD,EACE,OACA,kBACFxpD,KAIV,ECxHN,MAAMyqC,GAAejhC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAVH,CAAU,oBAChBI,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KAEjD2zB,GAAclgD,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAATH,CAAS,wFACZI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAEpCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KACtCnsB,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAGrDkpC,GAAW9pC,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,gBAAZH,CAAY,wCAIvBmgD,GAAYngD,KAAOkT,EAAChT,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,gBAARH,CAAQ,iHAIbI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,YAGrCisB,IA6DOsW,OAxCErlD,IAQW,IARV,OAChB0B,EAAS,QAAO,UAChB6E,EAAS,QACTiB,EAAO,OACP7B,EAAM,KACNu9B,EAAI,KACJnuC,EAAI,OACJyR,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,cAC5B,OACEG,eAACm+C,GAAS,CACRpjD,OAAQA,EACRiE,OACEkC,sBAAYlC,GAAUA,EAASgB,eAACw+C,GAAW,CAAAnxD,SAAE2R,IAE/C6B,QACEZ,gBAACs/B,GAAY,CAAAlyC,SAAA,CACX2S,eAACo/B,GAAQ,CAACC,SAAUx+B,EAAShB,OAAQA,IACpCsa,gBAAMoiB,GAAQ,KACbt8B,gBAACw+C,GAAS,CACR3iD,KAAMygC,EAAK+O,IACXmB,IAAI,sBACJvf,OAAO,SACP,iBAAAntB,OAAgBD,EAAU,KAAAC,OAAI3R,EAAI,oBAAmBf,SAAA,CAErD2S,eAACooC,GAAQ,CAACtzC,KAAK,gBAAgB+K,OAAQC,IACtCy8B,EAAK17B,cAKdzS,KAAMA,EACN0G,KAAK,OACL8K,UAAWA,EACXC,OAAQC,GACR,E,wKCrCS6+C,I,GAAAA,GAvCatlD,IAAiC,IAAhC,MAAEo8B,EAAK,SAAEpoC,GAAiBgM,EACrD,MAAMulD,EAASj7B,kBAAO,IACfoO,EAAS8sB,GAAc7uC,mBAC5B,MAGFI,qBAAU,KACR,GAAIqlB,EAAO,CACT,MAAMqpB,EAA8C,WAUlD,OARKF,EAAOlnD,UACVknD,EAAOlnD,SAAU,EACjB+9B,EAAMoI,QAAQkhB,QAAQC,MAAMvpB,EAAMoI,QAAS,CAAC7Q,KAAKiyB,QACjDxpB,EAAMoI,QAAQqhB,KAAK,IAGrBL,EAAW7xB,MAEL,sCAANjtB,OAA6C01B,EAAMlM,MAAK,WAC1D,EAEAkM,EAAM5oB,OAAO,CACXgxB,QAAS,CACPihB,YACAhoD,SAAS,IAGf,IACC,CAAC2+B,IAEJ,MAAM0pB,EACJ1pB,GACA95B,SAASyjD,eAAe,6BAADr/C,OAA8B01B,EAAMlM,QAE7D,OAAO41B,GAAQptB,IAAY7gB,iBAAO7jB,GAC9BgyD,IAASC,aAAajyD,EAAS0kC,GAAUotB,GACzC,IAAI,ECjBV,CACEI,KACAC,KACAC,KACAC,KACAC,KACAC,MACAtyC,SAAQuyC,IACRA,EAAiBC,KAAgB,IAGnC,MAAMzvB,GAAcC,aAAiB7I,QAAAC,aAAA,+xNA4BjBhpB,GAASA,EAAMC,MAAM2C,OAAOm0B,MAAM4F,UAAUE,aAG5C78B,GAASA,EAAMC,MAAM2C,OAAOm0B,MAAM4F,UAAUC,MAG5C58B,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAGhC/rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAI6b,eAMtCp5B,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QACpD7rB,GACbA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACbsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAG7Cf,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAOrCnsB,GACbA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAIbsQ,GACbA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACbsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAK3Cf,GACbA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACbsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAIjDd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAC5Bzd,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQC,YAsB3CR,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAkB3Cd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAWhDd,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAClD7rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAO1CsQ,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAU22B,GAAS,CACjDC,IAAKj4B,EAAMC,MAAM2C,OAAO2a,IAAIC,UAC5B0a,QAAS,SAEEl4B,GACbA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACbsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAE7Cd,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAoBrCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAK5C9/B,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIC,aAarDxd,GAASA,EAAMC,MAAM2C,OAAO4mB,SAW5C7pB,GAAkBC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAVH,CAAU,yUAUNgC,IAUtBosB,GAAUpuB,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iBAAAyV,YAAA,gBAAVH,CAAU,oDAEdI,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAiGtDw1B,OA9ED1mD,IAMc,IANb,MACbo8B,EAAQ,CAAC,EAAgB,UACzB71B,EAAS,iBACTogD,EAAgB,OAChBngD,EAAS,SAAQ,MACjBlB,GACMtF,EACN,MAAM4mD,EAAWt8B,iBAAO,OACjBu8B,EAAWC,GAAgBnwC,mBAAS,MACrCowC,EAAW5iD,uBAAYi4B,IAC3B0qB,EAAa1qB,EAAM,GAClB,KAEG,OAAEn5B,EAAM,GAAEzU,EAAE,eAAEw4D,GAAmB5qB,EACjC6qB,EAAcjxC,mBAAQ,ICvSfhW,KAAiB,IAAhB,OAAEiD,GAAQjD,EACxB,OAAOqiB,gBACL,CAAC,EACD,CACE6kC,QAAS,CACPxpD,SAAS,IAGbuF,EAEH,ED8RUkkD,CAAe,CAAElkD,YACvB,CAACA,IAkCJ,OAhCA8T,qBAAU,KACR,MAAMqwC,EAAgBv0C,cAAI+zC,EAAU,iBACpC,GACEQ,GACAA,EAAcC,aACdD,EAAcE,YAOd,OALIN,EACFI,EAAcC,cAEdD,EAAcE,cAET,IAAMF,EAAcE,aAC7B,GACC,CAACV,EAAUI,IAEdjwC,qBAAU,KACR,MAAMqwC,EAAgBv0C,cAAI+zC,EAAU,iBACpC,GAAIQ,IAAkBnxC,kBAAQgxC,GAAc,CAAC,IAADM,EAAAC,EAG1C,MAAMC,GAA+B,QAAjBF,EAAAN,EAAYS,aAAK,IAAAH,OAAA,EAAjBA,EAAoB,KAAMN,EAAYS,MACpDC,GAA+B,QAAjBH,EAAAP,EAAYW,aAAK,IAAAJ,OAAA,EAAjBA,EAAoB,KAAMP,EAAYW,MACtDH,GACFL,EAAcM,MAAM,GAAGG,YAAYJ,EAAYK,IAAKL,EAAYM,KAE9DJ,GACFP,EAAcQ,MAAM,GAAGC,YAAYF,EAAYG,IAAKH,EAAYI,IAEpE,IACC,CAACnB,EAAUK,IAGZrgD,gBAAC5B,GAAe,CAACuB,UAAWA,EAAUvS,SAAA,CACpC2S,eAACqwB,GAAW,IACZrwB,eAACqhD,KAAe,CACd,cAAaxhD,EACbyhD,WAAYxB,KACZj4D,GAAIA,EACJonB,QAASqxC,EACT5yB,IAAKuyB,EACLG,SAAUA,IAETJ,EACDhgD,eAAC2+C,GAAmB,CAAClpB,MAAOyqB,EAAU7yD,SACnC0kC,IAAO,IAAAwvB,EAAA,OACG,OAAPxvB,QAAO,IAAPA,GAAc,QAAPwvB,EAAPxvB,EAASktB,aAAK,IAAAsC,GAAdA,EAAgBtiB,OAChBj/B,eAAC0sB,GAAO,CAAAr/B,SACL8/B,IAAMq0B,aAAaxB,EAAkB,CACpCjuB,cAGF,IAAI,IAGV,OACY,EE9TP0vB,OAvBGpoD,IAKJ,IALK,UACjBuG,EAAS,OACTtD,EAAS,CAAC,EAAC,OACXuD,EAAS,SAAQ,UACjB+T,GACMva,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gBACtB,MAAE9G,EAAK,IAAEP,GAAQob,GACjB,OAAE7Z,GAAWuC,EAEnB,OACE2D,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD2S,eAACkjC,GAAI,CACHnpC,OAAQA,GAAUA,EAAOhB,MACzBiB,UAAWjB,EACX8G,OAAQC,IACR,SAEFE,eAACkjC,GAAI,CAACnpC,OAAQA,GAAUA,EAAOvB,IAAKwB,UAAWxB,EAAKqH,OAAQC,MACxD,EC1BV,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,eAAVH,CAAU,oBACbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElDrO,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,eAAbH,CAAa,wDAGXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtDiiD,GAAuBpjD,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,2DAAAyV,YAAA,eAAXH,CAAW,uCAKlCqjD,GAAiBrjD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qDAAAyV,YAAA,eAAVH,CAAU,MAkDlBsjD,OAzC4BvoD,IAER,IAFS,QAC1C04B,GACM14B,EACN,GAAY,OAAP04B,QAAO,IAAPA,MAASktB,MACZ,OAAO,KAET,MAAM,MACJvuC,EAAK,KACLlX,EAAI,UACJoa,EAAS,KACTxlB,GACE2jC,EAAQktB,MACNn/C,EAAU,GAAAC,OAAM3R,EAAI,0CAC1B,OACE6R,gBAACO,GAAS,CACRZ,UAAS,GAAAG,OAAK3R,EAAI,oDAClB,cAAa0R,EAAWzS,SAAA,CAExB4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL2S,eAAC0hD,GAAoB,CAAAr0D,SAClBsmB,GAAgBC,GAAU,GAAA7T,OAAM6T,EAAU5qB,aAAgB,KAE1D4qB,EAAU7a,OAAW6a,EAAUpb,IAChCwH,eAACyhD,GAAS,CACRnlD,OAAQ,CAAEvC,OAAQ,CAAEvB,IAAK,QAASO,MAAO,UACzC6a,UAAWA,EACX/T,OAAQC,IAER,QAENG,gBAAC0hD,GAAc,CAAAt0D,SAAA,CACb4S,gBAAA,QAAA5S,SAAA,CACGqjB,EACS,YAATlX,EAAqB,IAAM,MACtB,IAAI,UACHpL,OAED,EC3CT,MAAMyzD,GAAqBxoD,IAA6B,IAA5B,YAAEkyB,EAAW,MAAE+V,GAAOjoC,EACvD,MAAM,iDAAN0G,OAAwDuhC,EAAK,gBAAAvhC,OAAeuhC,EAAK,kCAAAvhC,OAAiCwrB,GAChH5B,iBAAOZ,IAAa,qBAAAhpB,OAAoBuhC,EAAK,aAAAvhC,OAAYuhC,EAAK,gBA0ErDwgB,GAA6BhoD,IAGnC,IAHoC,gBACzCioD,EAAe,aACfC,GACDloD,EACC,MAAO,IACFioD,EACHE,EAAGF,EAAgBE,EAAID,EACxB,EA4DUE,GAAeA,CAC1B/xD,EACAgyD,EACAxjD,EACAyjD,KAEA,SAASC,EAAgBp7D,GACvB,MAAe,SAARA,EACH,gCACQ,iBAARA,EACA,0CACA,uDACN,CAEA,OAAOuiB,OAAO+L,QAAQplB,GAAmBiI,KAAIsV,IAAmB,IAAjBzmB,EAAK+pB,GAAMtD,EACxD,MAAO,CACLrM,MAAOq1B,GAAS,CACdC,IACiB,cAAfyrB,EACIzjD,EAAM2C,OAAOm0B,MAAM8E,kBAAkBP,OAAOC,KAAKhzC,GAClC,sBAAfm7D,EACAzjD,EAAM2C,OAAO07B,eAAe/1C,GAC5B0X,EAAM2C,OAAOy7B,aAAa91C,GAChC2vC,QACiB,cAAfwrB,EACIzjD,EAAM2C,OAAOm0B,MAAM8E,kBAAkBP,OAAOpD,QAAQ3vC,GACpD,KAERa,MAAO,CACL+wC,KACiB,cAAfupB,EACIC,EAAgBp7D,GAChB0uC,oBAAU1uC,EAAIC,eACpBo7D,cAA8B,cAAfF,EAA6B,SAAW,SACvDH,EAAkB,cAAfG,EAA6B,GAAK,EACrCG,UAAW,QAEb/hC,KAAMxP,EAAM,GACZyV,GAAIzV,EAAM,GACX,GACD,EAGSwxC,GAAuBA,CAACC,EAAaL,IACzC,CACU,cAAfA,EACI,EACe,sBAAfA,EACA,EACA,OACD54C,OAAO+L,QAAQktC,GAAarqD,KAAIgZ,IAAmB,IAAjBnqB,EAAK+pB,GAAMI,EAC9C,OAAOJ,EAAM,EAAE,KAEjBzb,MAAK,CAACic,EAAGgB,IAAMhB,EAAIgB,IC9LVkwC,GAAiBA,CAC5Bt4C,EACAu4C,KAA0B,IAAAC,EAAA,OAE8B,QAF9BA,EAE1Bx4C,EAAKA,KAAKkE,MAAKu0C,GAAcA,EAAWz0D,OAASu0D,WAAO,IAAAC,OAAA,EAAxDA,EAA0DlyC,KAAK,EAEpDoyC,GAAoBA,CAC/B14C,EACAu4C,KAA0B,IAAAI,EAAA,OAE8B,QAF9BA,EAE1B34C,EAAKA,KAAKkE,MAAKu0C,GAAcA,EAAWz0D,OAASu0D,WAAO,IAAAI,OAAA,EAAxDA,EAA0D11C,QAAQ,EAmBvD21C,GAAuBA,CAClCL,EACAv4C,KAEA,GAAIlJ,sBAAYkJ,GACd,OAAO,KAET,MAAM64C,EA1CiBC,EACvB94C,EACAu4C,IAEAv4C,EAAKA,KAAKkE,MAAKu0C,GAAcA,EAAWz0D,OAASu0D,IAsCrCO,CAAU94C,EAAMu4C,GAE5B,OAAOzhD,sBAAY+hD,GAAO,KAAOA,CAAG,EAGzBE,GAA4BA,CACvCzrD,EACAw9B,KAEA,GAAIhkB,iBAAOxZ,IAAYwZ,iBAAOgkB,GAC5B,OAAO,KAET,MAAMmnB,EAAe3kD,EAAQgZ,MACvB0yC,EAAiC,YAAjB1rD,EAAQ8B,KACxB6pD,EAAgBnuB,EAASxkB,MAO/B,OAAO0yC,EAvCyBE,EAChC5rD,EACAw9B,IAEiB,IAAbA,EACK,MAGDx9B,EAAUw9B,GAAYA,EAgC1BouB,CACEnwB,KAAKe,MAAqB,IAAfmoB,GACXlpB,KAAKe,MAAsB,IAAhBmvB,IAEbhH,EAAegH,CAAa,EAGrBE,GAAeA,CAC1Bn5C,EACAmqB,IAEAnqB,EAAKhS,KAAI42C,IAAC,IACLA,EACH5kC,KAAM+pB,kBACJ6a,EAAE5kC,KAAKhS,KAAIuqD,IAAW,IAADa,EACnB,MAAMjuB,EAAwB,QAAnBiuB,EAAIb,EAAOt1C,gBAAQ,IAAAm2C,OAAA,EAAhBA,EACZjvB,GAEF,OAASgB,EACL,IACKotB,EAEHnpD,KAAM+7B,EAAM/7B,KACZkX,MAAO6kB,EAAM7kB,OAEf,IAAI,SAKH+yC,GAAmBA,CAC9Bd,EACAvI,EACAsJ,EACAC,KAEA,OAAQhB,GACN,IAAK,eACH,MAAO,WACT,IAAK,gBACH,MAAO,SACT,IAAK,aACH,MAAO,oBAET,QACE,OAAIvI,EACKuJ,EACH,gBACAD,EACA,mBACA,gBAEG,OAEb,EAGWE,GAA2BA,CACtClzC,EACAmzC,KAEA,MAAMC,GnG4LNC,EmG5LgCrzC,EnG8LzB8kB,mBAASuuB,IACU,kBAAhBA,GAA4C,aAAhBA,EACjCA,EACD,OALJA,MmG1LA,OAAIC,mBAASF,GACJA,EAEF3wB,KAAKe,MAAM2vB,EAA2B,IAAZC,EAAkBA,EAAU,EC4EhDtD,OAtMQnnD,IAAgD,IAA/C,KAAE+Q,EAAI,WAAEqoB,EAAU,OAAEkwB,EAAM,KAAEv0D,GAAaiL,EAC/D,MAAM4qD,EAAaC,kBAAQ95C,EAAM,CAAC,aAAc,CAAC,QAC3C+5C,EAAyB,cAAXxB,EACdyB,EAAeH,EAAW7rD,KAAI,CAACisD,EAA8B96B,KACjE,MAAM+6B,EAAY,CAChB1wC,UAAW,CACT7a,MAAOsrD,EAAO30C,UACdlX,IAAK6rD,EAAO10C,QACZ5mB,cAAiBs7D,EAAOvuD,SACpB9N,EAAeu8D,OACfv8D,EAAeC,OACnBe,YAAaq7D,EAAO9rD,WACpB1Q,GAAIw8D,EAAOvuD,UAEb0uD,EAAGj7B,GAGCk7B,EAAc/B,GAAe2B,EAAQ1B,GACrC+B,EDRmBC,EAC3Bv6C,EACAu4C,KAA0B,IAAAiC,EAAA,OAE8B,QAF9BA,EAE1Bx6C,EAAKA,KAAKkE,MAAKu0C,GAAcA,EAAWz0D,OAASu0D,WAAO,IAAAiC,OAAA,EAAxDA,EAA0DprD,IAAI,ECIzCmrD,CAAcN,EAAQ1B,GAEzC,IAAIkC,EAAYC,EAChB,GAAe,cAAXnC,EACF,GAAIzhD,sBAAYujD,GACdI,EAAa,KACbC,EAAsB,SACjB,CAELD,EAAcJ,EAAyB,GAGvC,MAAMM,EAAiBpxB,GACrB8wB,GACAxzC,QAAOozC,GAAUA,EAAO3zC,MAAQ,IAClCo0C,EAAsBC,EAAelqD,OACjCkqD,EACG3sD,KACCisD,GAAM,GAAAtkD,OACDskD,EAAO3zC,OAAK3Q,OAAGskD,EAAO7qD,KAAKwrD,OAAO,GAAG99D,iBAE3CsiC,KAAK,MACR,IACN,KACwB,YAAfk7B,GACTG,EAAuC,IAAzBJ,EACdK,EAAsBD,EAAWI,QAAQ,KAEzCJ,EAAaJ,EACbK,EAAsBL,GAGxB,MAAO,IACFH,EACHrC,EAAG4C,EACHrrD,KAAMkrD,EACNh0C,MAAOo0C,EACP12D,KACE+1D,GAAiB/0D,GAAqBhB,GAClCgB,GAAqBhB,GACrBunC,oBAAUvnC,GACjB,IAGG82D,EAAsBd,EAAahsD,KAAIisD,GAAUA,EAAOpC,IAKxD5gD,EhEpEwB8jD,EAAC7uB,EAAO7D,IACjC6D,EAGDA,EAAQ,EACH7D,EACHsE,GAAaz1B,OAAO2a,IAAI0W,MACxBoE,GAAaz1B,OAAO2a,IAAI2W,QAEvBH,EACHsE,GAAaz1B,OAAO2a,IAAI2W,QACxBmE,GAAaz1B,OAAO2a,IAAI0W,MATnBoE,GAAaz1B,OAAO2a,IAAIwO,MgEkEnB06B,CAFXD,EAAoBA,EAAoBrqD,OAAS,GACjDqqD,EAAoB,GACqBzyB,GAE5C,MAAO,CACLgD,MAAO,CACLz+B,gBAAiB,KACjBE,YAAa,EACb8D,KAAM,OACNkmC,OAAQ,CAAC,GAAI,EAAG,GAAI,GACpBK,OAAmB,cAAXohB,EAAyB,GAAK,IACtC75B,MAAO,CACLs8B,SAAU,YAKd97D,MAAO,CACLuvC,KAAM,IAER0nB,QAAS,CACPxpD,SAAS,GAEXkqD,MAAO,CACLoE,WAAYpB,EAAW7rD,KAAI,CAAC42C,EAAGzlB,IACZ,IAAVA,GAAeA,IAAU06B,EAAWppD,OAAS,EAChDhB,GAAgB,CACdE,OAAQ,MACRC,UAAqB,IAAVuvB,EAAcylB,EAAEt/B,UAAYs/B,EAAEr/B,UAE3C,KAEN21C,WAAY,IACZC,WAAY,IACZC,OAAQ,CAENzuD,SAAUyS,OAAOmH,OAAOxhB,IAAiBua,SAAStb,GAClD06B,MAAO,CACLznB,MAAO01B,GAAaz1B,OAAO2a,IAAIC,UAC/BgmB,WAAYnL,GAAan4B,MAAMk0B,UAAU1kC,KACzCq3D,WAAY1uB,GAAan4B,MAAMk0B,UAAU7zB,QAAQQ,MAEnDwiD,EAAG,IAEL34D,MAAO,CACLuvC,KAAM,MAER6sB,aAAa,EACbC,WAAW,EACXC,UAAW7uB,GAAaz1B,OAAO2a,IAAIC,UACnC2pC,UAAW,EACXC,kBAAmB,KACnBC,gBAAgB,GAElBhF,MAAO,CACLuE,WAAY,IACZU,cAAe,EACf7E,IAAK,EACLwE,WAAW,EACXD,aAAa,EACbF,OAAQ,CACNhB,EAAG,EACHvC,EAAG,EACHgE,MAAO,OACPlvD,SAAS,EACT+nD,UAAW,WACT,MAAM/sB,EAAU/E,KAChB,OAAI+E,EAAQm0B,OACQ,cAAXvD,EAAsB,GAAA5iD,OACtBgyB,EAAQrhB,MAAK,KACS,YAAzB0zC,EAAa,GAAG5qD,KAAkB,GAAAuG,OAC/BgyB,EAAQrhB,MAAK,KAChBqhB,EAAQrhB,MAEVqhB,EAAQo0B,QACHp0B,EAAQrhB,MAAMg3B,WAEhB,EACT,GAEFp+C,MAAO,CACLuvC,KAAM,OAGVutB,OAAQ,CACNrvD,SAAS,GAEXsvD,YAAa,CACXpnB,OAAQ,CACNqnB,WAAW,EACXjlD,QACAklD,UAAW,EACXtvD,QAAQ,EACRuvD,OAAQ,CACNv+B,MAAO,CACLw+B,KAAM,CAAEC,KAAM,GACdH,UAAW,IAGfvsB,OAAQ,CACNzR,OAAQ,EACRi+B,OAAQ,CACNv+B,MAAO,CACLM,OAAQ,KAIdo+B,YAAa,MAGjB9oB,QAAS,IACJhnC,GACH+vD,WAAY,SACVC,EACAC,EACA7H,GAEA,OAAO6C,GAA2B,CAChCC,gBAAkB/0B,KAAa+5B,YAAYF,EAAGC,EAAG7H,GACjD+C,aAAcpmD,OAAOorD,SAEzB,GAEF/nB,OAAQ,CACN,CACE7wC,KAAM,YACN4M,KAAM,OACNoP,KAAMg6C,IAGX,EC3KY6C,I,sDAAAA,iBA9BkB5tD,IAQL,IARM,UAChCuG,EAAS,KACTwK,EAAI,WACJqoB,GAAa,EAAK,KAClBrkC,EAAI,OACJu0D,EAAM,OACN9iD,EAAS,SAAQ,MACjBlB,GACMtF,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,iCAAAE,OAAgC3R,GAEtDqnC,EAAQpmB,mBAAQ,KACb,CACL/S,OAAQkkD,GAAe,CAAEp2C,OAAMqoB,aAAYkwB,SAAQv0D,SACnDvG,GAAG,+BAADkY,OAAiC3R,MAEpC,CAACgc,EAAMqoB,EAAYkwB,EAAQv0D,IAE9B,OACE4R,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAC+/C,GAAK,CACJtqB,MAAOA,EACP51B,OAAQC,EACRnB,MAAOA,EACPqhD,iBAAkBhgD,eAAC4hD,GAAkC,OAEnD,ICxBV,MAAMphD,GAAYlC,KAAOC,IAAGkpB,QAAAC,aAAA,gGAIVhpB,GAASA,EAAMC,MAAM+/B,KAAKE,MAGtCe,GAAQrhC,KAAOU,OAAM8oB,QAAAJ,aAAA,6IAERhpB,GAAK,aAAAqB,OAAiBrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAEjD7rB,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMC,KACtCZ,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQu/B,WAIrD0oB,GAAa5oD,KAAOC,IAAGypB,QAAAN,aAAA,4EAMvBy/B,GAAQ7oD,aAAO6/C,GAAP7/C,CAAiBkqB,QAAAd,aAAA,mCAIzBnL,GAAiBje,KAAOC,IAAGmqB,QAAAhB,aAAA,6BAClBhpB,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KAGjDu8B,GAAgB9oD,KAAOC,IAAG8oD,QAAA3/B,aAAA,0NAIbhpB,GAASA,EAAMC,MAAM+/B,KAAKE,MAWvC0oB,GAAahpD,KAAOC,IAAGgpD,QAAA7/B,aAAA,8EAKvB8/B,GAAelpD,KAAOC,IAAGkpD,QAAA//B,aAAA,4FACdhpB,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OACvCsQ,GAASA,EAAMC,MAAMC,MAAMk0B,UAAUzzB,MAAM83B,KACzCz4B,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU7zB,QAAQQ,OAC7Cf,GAASA,EAAMC,MAAMC,MAAMk0B,UAAUzzB,MAAM83B,KAGtDuwB,GAAYppD,KAAOC,IAAGopD,QAAAjgC,aAAA,+FACXhpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAIpD+8B,GAAWtpD,KAAOC,IAAGspD,QAAAngC,aAAA,yEAGZhpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAGlDi9B,GAAgBxpD,KAAOC,IAAGwpD,QAAArgC,aAAA,oDACfhpB,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU7zB,QAAQQ,OAGxDuoD,GAAgB1pD,KAAOC,IAAG0pD,QAAAvgC,aAAA,mGAQ1BoZ,GAAOxiC,aAAOmiC,GAAPniC,CAAiB4pD,QAAAxgC,aAAA,qIACnBhpB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAI9Bxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAKvC+Z,GAAQ53B,aAAO00B,GAAP10B,CAA+B6pD,QAAAzgC,aAAA,qDAC9BhpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAIlDu9B,GAAa9pD,KAAOC,IAAG8pD,QAAA3gC,aAAA,yEAGdhpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElDy9B,GAAmBhqD,KAAOU,OAAMupD,QAAA7gC,aAAA,0EAMhC8gC,GAAelqD,aAAO00B,GAAP10B,CAA+BmqD,QAAA/gC,aAAA,kCAG9CghC,GAAYpqD,aAAOqqD,GAAPrqD,CAAgCsqD,QAAAlhC,aAAA,iCA6KnCmhC,OAxJexvD,IAcI,IAdH,WAC7ByvD,EAAU,WACVC,EAAU,eACVrF,GAAiB,EAAK,aACtBtJ,GAAe,EAAK,SACpB4O,EAAQ,KACR56D,EAAI,cACJ66D,EAAa,kBACbC,EAAiB,wBACjBC,EAAuB,cACvB9F,EAAa,OACbxjD,EAAS,SAAQ,YACjBupD,EAAW,MACX14C,GACMrX,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,6BAAAE,OAA4B3R,GAClDi7D,EAAqB5F,GACzBr1D,EACAgsD,EACAsJ,GACA,GAEI4F,EAAsB7F,GAC1Br1D,EACAgsD,EACAsJ,GACA,GAOF,IAAI6F,EACJ,MAAMC,EAAmB,IAAI/tC,KAAK4tC,GAC9BG,IACFD,EAAY,KAEd,MAAM92B,EAAsB,kBAATrkC,GAAqC,eAATA,EAEzCq7D,EACJxpD,gBAACqnD,GAAU,CAAAj6D,SAAA,CACT2S,eAACwnD,GAAY,CAAAn6D,SACVu2D,GAAyBlzC,EAAO84C,KAEnCxpD,eAAC0nD,GAAS,CAAAr6D,SAAEg8D,OAIhB,OACEppD,gBAACO,GAAS,CAAAnT,SAAA,CACR4S,gBAAC0/B,GAAK,CAAAtyC,SAAA,CACH+7D,EAAY9/D,MACZ4nB,iBAAOk4C,EAAYM,aACpBx4C,iBAAOk4C,EAAYO,SAAW,KAC5B1pD,gBAACinD,GAAU,CAAA75D,SAAA,CACR6jB,iBAAOk4C,EAAYO,SAAW,KAC7B3pD,eAACmnD,GAAK,CACJtmD,QACEb,eAACuc,GAAc,CAAAlvB,SACb2S,eAACo/B,GAAQ,CACPC,SAAU+pB,EAAYO,QACtB9pD,OAAQC,MAId1R,KAAMA,EACNyR,OAAQC,IAGXoR,iBAAOk4C,EAAYM,YAAc,KAChC1pD,eAAC0+C,GAAQ,CACP79C,QAASuoD,EAAYM,WAAW7oD,QAChC7B,OAAQoqD,EAAYM,WAAW1qD,OAC/Bu9B,KAAM6sB,EAAYM,WAAWntB,KAC7BnuC,KAAMA,EACNyR,OAAQC,UAMlBG,gBAACmnD,GAAa,CAAA/5D,SAAA,CACZ2S,eAAA,OAAA3S,SACK27D,EACDhpD,eAAC8gC,GAAI,CAAC1yC,KAAM0R,EAAY2mB,GAAIuiC,EAAUnpD,OAAQC,EAAWzS,SACtDo8D,IAGHA,IAGDX,EACD9oD,eAACk2B,GAAK,CACJt2B,UAAU,0BACV8yB,UACEo2B,EAAa,EACTz5D,GACAA,GAENqhB,MACEkzC,GAAyBkF,EAAYU,GAEvChwD,KAAM+vD,EACN92B,WAAYA,IAGdzyB,eAAA,OAAA3S,SAAK,UAGT4S,gBAAC2nD,GAAQ,CAAAv6D,SAAA,CACP2S,eAACgoD,GAAa,CAAA36D,SAAE87D,IAChBnpD,eAAC8nD,GAAa,CAAAz6D,SACXu2D,GAAyBP,EAAemG,KAE3CxpD,eAACo/B,GAAQ,CACPC,SACW,iBAATjxC,GACU,mBAATA,IAA8BgsD,EAAa,SAAAr6C,OAC/BupD,GACTA,OAIVrpD,gBAACmoD,GAAU,CAAA/6D,SAAA,CACT4S,gBAACqoD,GAAgB,CAAAj7D,SAAA,CAAC,eAAa07D,KAC9B73C,iBAAOg4C,IAA4C,IAAtBA,EAC5BlpD,eAAA,OAAA3S,SAAK,OAEL2S,eAACwoD,GAAY,CACX91B,UACEw2B,EAAoB,EAChB75D,GACAA,GAEN4jC,QAAQ,OACRviB,MAAOw4C,EACPz2B,WAAYA,OAIlBzyB,eAAC0oD,GAAS,CACRt+C,KAAM6+C,EACNx2B,WAAYA,EACZkwB,OAAQv0D,EACRA,KAAMA,EACNyR,OAAQC,MAEA,EC7ODxD,OAhEC8N,IACd,MAAMw/C,EAAwBr2B,GAAyB/pB,OAAOmH,OAAOvG,IA6BrE,MAAO,CACLqrB,MAAO,CACL8L,OAAQ,GACRL,OAAQ,EACRlmC,KAAM,OAERimD,MAAO,CAAE4I,SAAS,GAClB9I,MAAO,CAAE8I,SAAS,GAClBxD,YAAa,CACXyD,IAAK,CACHC,WAAY,CACVhzD,SAAS,GAEXizD,SAAU,UACVxD,OAAQ,CACNv+B,MAAO,CACLlxB,SAAS,GAEXkzD,SAAU,CACRlzD,SAAS,MAKjBqvD,OAAQ,CAAErvD,SAAS,GACnB8mC,QAAS,CACP9mC,SAAS,GAEXzN,MAAO,CACLuvC,UAAM/9B,GAERmkC,OA3Dc,CACd9vC,GAAgB1E,IAChB0E,GAAgB3E,mBAChB2E,GAAgBzE,OAChByE,GAAgBxE,SAEfshC,UACA7zB,KAAIm8B,IACH,MAAMgB,EAAQnrB,EAAKmqB,GACb21B,EAAqB30B,EACP,UAAX,OAALA,QAAK,IAALA,OAAK,EAALA,EAAO/7B,MACS,GAAd+7B,EAAM7kB,MACN6kB,EAAM7kB,MACR,EACErP,EACJ01B,GAAaz1B,OAAOm0B,MAAMjC,UACxBe,GACAv9B,gBACJ,MAAO,CACL5I,KAAMmmC,EACN41B,YAAa9oD,EACbA,QACA+I,KAAQw/C,EACJ,CAACM,EAAmBN,GACpB,CAAC,MACN,IAmCJ,EC7BY3C,qBAxB0B5tD,IAM3B,IAN4B,UACxCuG,EAAS,KACTwK,EAAI,eACJi2C,GAAiB,EAAK,OACtBxgD,EAAS,SAAQ,MACjBlB,GACMtF,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mCAEtB41B,EAAQpmB,mBAAQ,KACb,CACL/S,OAAQkkD,GAAep2C,GACvBviB,GAAI,uCACJw4D,oBAED,CAACj2C,EAAMi2C,IAEV,OACErgD,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAC+/C,GAAK,CAACtqB,MAAOA,EAAO51B,OAAQC,EAAYnB,MAAOA,KAC5C,ICLV,MAAM6B,GAAYlC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,sDAAAyV,YAAA,gBAATH,CAAS,uLAIPI,GAASA,EAAMC,MAAM+/B,KAAKE,MACnClgC,GAAK,aAAAqB,OACCrB,EAAMC,MAAM+/B,KAAKC,YAAW,QAAA5+B,OAAOrB,EAAMC,MAAM+/B,KAAKE,IAAG,OAUrDlgC,GAAK,GAAAqB,OACfrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAGjE6/B,GAAc9rD,aAAOo3B,IAAqBl3B,WAAA,CAAAxV,YAAA,wDAAAyV,YAAA,gBAA5BH,CAA4B,cAG1CotB,GAASptB,KAAOqtB,OAAMntB,WAAA,CAAAxV,YAAA,mDAAAyV,YAAA,gBAAbH,CAAa,2BAGtB+rD,GAAU/rD,aAAO+3B,IAAsB73B,WAAA,CAAAxV,YAAA,oDAAAyV,YAAA,gBAA7BH,CAA6B,4JAevCgsD,GAAiBhsD,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,2DAAAyV,YAAA,gBAAbH,CAAa,8DACrBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAMlD+8B,GAAWtpD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qDAAAyV,YAAA,gBAAVH,CAAU,wCAIrBwpD,GAAgBxpD,aAAO+3B,IAAsB73B,WAAA,CAAAxV,YAAA,0DAAAyV,YAAA,gBAA7BH,CAA6B,oBACpCI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElDiW,GAAOxiC,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,iDAAAyV,YAAA,gBAAjBH,CAAiB,+EACnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAI9Bxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAIvCusC,GAAYpqD,aAAOqqD,IAAyBnqD,WAAA,CAAAxV,YAAA,sDAAAyV,YAAA,gBAAhCH,CAAgC,wBAiFnCisD,OAlEkClxD,IAQrB,IAADmxD,EAAAC,EAAA,IARuB,IAChDxuC,EAAG,UACHrc,EAAS,QACTlI,EAAO,SACPw9B,EAAQ,wBACRi0B,EAAuB,SACvB50B,EAAQ,OACR10B,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mDAAAE,OAAkDw0B,IACxE,oBAAExS,GAAwBlB,KAC1B6pC,EAAsD,QAA1CF,EAAG1H,GAAkBprD,EAAS,oBAAY,IAAA8yD,OAAA,EAAvCA,EAA0Cj2B,GACzDo2B,EAAmBzpD,sBAAYwpD,GACjCA,EACA/2B,GAAoBL,GAAgB,QAASo3B,EAAah6C,QACxDk6C,EAAwC,OAAhBD,QAAgB,IAAhBA,KAAkB9vD,OAC5Cy6B,GAA4Bq1B,GAC5B,KACEE,EAAgB3pD,sBAAYg0B,GAC9BA,EACwC,QADhCu1B,EACR3H,GAAkB5tB,EAAU,oBAAY,IAAAu1B,OAAA,EAAxCA,EAA2Cl2B,GACzCu2B,EAAoB5pD,sBAAY2pD,GAClCA,EACAl3B,GAAoBL,GAAgB,QAASu3B,EAAcn6C,QACzDq6C,EAA0C,OAAjBD,QAAiB,IAAjBA,KAAmBjwD,OAC9Cy6B,GAA4Bw1B,GAC5B,KACJ,OACE7qD,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD2S,eAACoqD,GAAW,CAAC71B,SAAUA,EAAU10B,OAAQC,IACzCE,eAAC8gC,GAAI,CACH1yC,KAAI,2CAAA2R,OAA6Cw0B,GACjD9N,GAAI1E,EAAoB,CACtBV,gBAAiBz0B,EAAqBG,cAExC8S,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIw0B,GAAWlnC,SAEpC2S,eAACqqD,GAAO,CACN/zB,MAAOrB,GAAkB01B,EAAkBG,GAC3C73B,QAAQ,SACRsC,MAAOq1B,EACPr2B,SAAUA,EACV10B,OAAQC,MAGZG,gBAAC2nD,GAAQ,CAAAv6D,SAAA,CACP2S,eAACsqD,GAAc,CAAAj9D,SAAE87D,IACjBnpD,eAAC8nD,GAAa,CACZ70B,QAAQ,qBACRsC,MAAOw1B,EACPlrD,OAAQC,OAGZE,eAAC0rB,GAAM,CAAAr+B,SACL2S,eAAC0oD,GAAS,CACRt+C,KAAMm5C,GAAatnC,EAAKsY,GACxB9B,YAAY,EACZkwB,OAAO,YACPv0D,KAAMmmC,EACN10B,OAAQC,QAGF,EC9JhB,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iDAAAyV,YAAA,eAAVH,CAAU,wBAGtB0sD,GAAoB1sD,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,yDAAAyV,YAAA,eAATH,CAAS,mBAI7B2sD,GAAc3sD,KAAO4sD,OAAM1sD,WAAA,CAAAxV,YAAA,mDAAAyV,YAAA,eAAbH,CAAa,iBAG3ByhD,GAAQzhD,aAAO6sD,IAAiC3sD,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,eAAxCH,CAAwC,iBAyDvC8sD,OA3C6B/xD,IAOhB,IAPiB,IAC3C4iB,EAAG,UACHrc,EAAS,QACTlI,EAAO,SACPw9B,EAAQ,wBACRi0B,EAAuB,OACvBtpD,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,oCACtB8qD,EAAmB7H,GACvBprD,EACA,aAEF,OACEuI,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD2S,eAACgrD,GAAiB,CAAA39D,SACd,CACA8B,GAAgB1E,IAChB0E,GAAgB3E,mBAChB2E,GAAgBzE,OAChByE,GAAgBxE,SACqByN,KAAIm8B,GACzCv0B,eAACuqD,GAAwC,CAEvCtuC,IAAKA,EACLvkB,QAASA,EACTw9B,SAAUA,EACVi0B,wBAAyBA,EACzB50B,SAAUA,EACV10B,OAAQC,GANHy0B,OAUXt0B,gBAACgrD,GAAW,CAAA59D,SAAA,CACV2S,eAAC+/C,GAAK,CAAC31C,KAAMugD,EAAkB9qD,OAAQC,IACvCE,eAAA,cAAYJ,UAAU,iBAAgBvS,SAAC,8CAI/B,ECvDhB,MAAMg9D,GAAU/rD,aAAO+3B,IAAsB73B,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,eAA7BH,CAA6B,yLAI9BI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAM83B,KAErCz4B,GAASA,EAAMC,MAAM+/B,KAAKE,MAWvC0rB,GAAiBhsD,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,qDAAAyV,YAAA,eAAbH,CAAa,8DACrBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAMlD+8B,GAAWtpD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,eAAVH,CAAU,wCAIrBwpD,GAAgBxpD,aAAO+3B,IAAsB73B,WAAA,CAAAxV,YAAA,oDAAAyV,YAAA,eAA7BH,CAA6B,oBACpCI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElDiW,GAAOxiC,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,eAAjBH,CAAiB,+EACnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAI9Bxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAIvCusC,GAAYpqD,aAAOqqD,IAAyBnqD,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,eAAhCH,CAAgC,sBAG5C8pD,GAAa9pD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iDAAAyV,YAAA,eAAVH,CAAU,sDAGdI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElDy9B,GAAmBhqD,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,uDAAAyV,YAAA,eAAbH,CAAa,iDAMhCkqD,GAAelqD,aAAO00B,IAAwBx0B,WAAA,CAAAxV,YAAA,mDAAAyV,YAAA,eAA/BH,CAA+B,yBA0FrC+sD,OA1E4BhyD,IASf,IATgB,IAC1C4iB,EAAG,UACHrc,EAAS,QACTlI,EAAO,MACP4zD,EAAK,WACLvC,EAAU,SACV7zB,EAAQ,wBACRi0B,EAAuB,OACvBtpD,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,oCACtB,oBAAEkiB,GAAwBlB,KAC1B0qC,EAAgB53B,GACpB+uB,GAAehrD,EAAS,cAEpB8zD,EAAc73B,GAClB+uB,GAAe4I,EAAO,cAExB,IAAIG,EACEv2B,IACJu2B,EAAiB93B,GACf+uB,GAAextB,EAAU,eAG7B,MAAMg0B,EAAoBj0B,GAAkBs2B,EAAeC,GAC3D,OACEvrD,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD2S,eAAA,OAAA3S,SACE2S,eAAC8gC,GAAI,CACH1yC,KAAK,gDACLq4B,GAAI1E,EAAoB,CACtBV,gBAAiBz0B,EAAqBG,cAExC8S,OAAQC,EAAWzS,SAEnB2S,eAACqqD,GAAO,CACN/zB,MAAOrB,GAAkBs2B,EAAeE,GACxCx4B,QAAQ,SACRsC,MAAOD,GAA4Bi2B,GACnC1rD,OAAQC,QAIX2rD,EACDxrD,gBAAC2nD,GAAQ,CAAAv6D,SAAA,CACP2S,eAACsqD,GAAc,CAAAj9D,SAAE87D,IACjBnpD,eAAC8nD,GAAa,CACZ70B,QAAQ,SACRsC,MAAOD,GAA4Bm2B,GACnC5rD,OAAQC,OAGV,KACJG,gBAACmoD,GAAU,CAAA/6D,SAAA,CACT4S,gBAACqoD,GAAgB,CAAAj7D,SAAA,CAAC,eAAa07D,KAC5BG,EACDlpD,eAACwoD,GAAY,IAAKU,EAAmBj2B,QAAQ,OAAOz5B,KAAK,KAEzDwG,eAAA,OAAA3S,SAAK,UAGT2S,eAAA,UAAA3S,SACE2S,eAAC0oD,GAAS,CACRt+C,KAAM6R,EACNwW,YAAY,EACZkwB,OAAO,YACPv0D,KAAK,YACLyR,OAAQC,QAGR,ECzJV,MAAM0c,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAbH,CAAa,2FAETI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAEpD7rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAGtD0oB,GAAa5oD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAAVH,CAAU,yDAKvBotD,GAAOptD,aAAOogD,IAASlgD,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAAhBH,CAAgB,yBAGvBie,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,eAAVH,CAAU,oBAClBI,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KAGjD8gC,GAAmBrtD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,eAAVH,CAAU,wEAK7BstD,GAAUttD,aAAO+sD,IAAmC7sD,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAA1CH,CAA0C,iCACxCI,GAAK,QAAAqB,OACXrB,EAAMC,MAAM+/B,KAAKC,YAAW,YAAA5+B,OAAWrB,EAAMC,MAAM+/B,KAAKE,IAAG,cAC5DlgC,GAAK,aAAAqB,OACCrB,EAAMC,MAAM+/B,KAAKC,YAAW,aAAA5+B,OAAYrB,EAAMC,MAAM+/B,KAAKE,IAAG,QAEvEitB,GAAWvtD,aAAO8sD,IAAoC5sD,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAA3CH,CAA2C,wBAsF7CwtD,OApEqBzyD,IAWR,IAXS,IACnC4iB,EAAG,UACHrc,EAAS,QACTlI,EAAO,MACP4zD,EAAK,WACLvC,EAAU,KACV36D,EAAI,SACJ8mC,EAAQ,wBACRi0B,EAAuB,OACvBtpD,EAAS,SAAQ,YACjBupD,GACM/vD,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,2BAC5B,OACEI,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACJ+7D,EAAY9/D,MACZ4nB,iBAAOk4C,EAAYM,aACpBx4C,iBAAOk4C,EAAYO,SAAW,KAC5B1pD,gBAACinD,GAAU,CAAA75D,SAAA,CACR6jB,iBAAOk4C,EAAYO,SAAW,KAC7B3pD,eAACm+C,GAAS,CACRt9C,QACEb,eAACuc,GAAc,CAAAlvB,SACb2S,eAACo/B,GAAQ,CACPC,SAAU+pB,EAAYO,QACtB9pD,OAAQC,MAId1R,KAAMA,EACNyR,OAAQC,IAGXoR,iBAAOk4C,EAAYM,YAAc,KAChC1pD,eAAC0rD,GAAI,CACH7qD,QAASuoD,EAAYM,WAAW7oD,QAChC7B,OAAQoqD,EAAYM,WAAW1qD,OAC/Bu9B,KAAM6sB,EAAYM,WAAWntB,KAC7BnuC,KAAMA,EACNyR,OAAQC,UAMlBG,gBAAC0rD,GAAgB,CAAAt+D,SAAA,CACf2S,eAAC4rD,GAAO,CACN3vC,IAAKA,EACLvkB,QAASA,EACT4zD,MAAOA,EACPvC,WAAYA,EACZ7zB,SAAUA,EACVi0B,wBAAyBA,EACzBtpD,OAAQC,IAEVE,eAAC6rD,GAAQ,CACP5vC,IAAKA,EACLvkB,QAASA,EACTw9B,SAAUA,EACVi0B,wBAAyBA,EACzBtpD,OAAQC,SAGR,E,UCvHH,MAAMisD,GAA4B,WAEL,IADlC78C,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAEV,MAAM6Q,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,YAEhD,UAAET,GAAc2V,MAChB,UAAEjN,EAAS,SAAE9d,EAAQ,OAAEsf,GAAWlK,GAChCnS,MAAO2W,EAAWlX,IAAKmX,GAAYiE,EAErClI,EAAS2D,mBACb,MACEK,YACAC,UACAyF,OAAQA,GAAU,KAClBtf,SAAUA,GAAY,QAExB,CAAC4Z,EAAWC,EAAS7Z,EAAUsf,IAGjC,OAAOnJ,oBACL,CAAC,sBAAuB,IAAKP,KAC7B,IzDqCqC1N,WAIe,IAJR,YAC9CyN,EAAW,OACXC,EAAM,SACNC,GACyB7R,EAQzB,aAPoDwQ,GAAIwD,KAAI,IAAA/N,OACtD4L,EAAQ,gBACZD,EACA,CACEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAGxBrB,IAAI,EyDhDhB4hD,CAA0B,CACxBvgD,cACAE,WACAD,YAEJ,CACE3U,UAAW0U,KAAiBE,GAAYuD,EACxCtB,sBAAsB,GAG5B,ECbMgvC,GAAUt+C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAVH,CAAU,iCACVI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QACnC5rB,GAASA,EAAMC,MAAM+/B,KAAKK,aAGjCktB,GAAc3tD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAVH,CAAU,sCAIxBotB,GAASptB,KAAOqtB,OAAMntB,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAbH,CAAa,+EAMtB4tD,GAAmB5tD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,gBAAVH,CAAU,sBA8QpB6tD,I,0CAAAA,GA1QgBA,KAC7B,MAAMrsD,EAAa,4BACb,oBAAEiiB,EAAmB,UAAE7W,GAAc2V,KACrCjN,EAAY1I,EAAU0I,UACtBwmC,EAAezmC,GAAgBC,GAC/B8vC,EhIuON9vC,IACYA,EAAU3a,QAAU7I,GgIxOTg8D,CAAkBx4C,GAInCy4C,EAAkBjS,EACpBkS,GAAuBj0D,OACvBi0D,GAAuBC,OAGrBC,EnKsC0CC,EAChD74C,EACA84C,KAGA,MAAMC,EACJvzD,GAAkB,CAChBE,KAAMsa,EAAU7a,MAChBQ,WAAYqa,EAAUpb,IACtBgB,KAAMpS,GAAgBc,OACnB,EACP,OAAI0rB,EAAU7qB,gBAAkBf,EAAeI,QACtC,cACEwrB,EAAU/rB,KAAOgB,EAAaF,UAChC,eACEirB,EAAU/rB,KAAOgB,EAAaH,UAChCgkE,EAAkB7jE,EAAaP,WAAWU,YACxC4qB,EAAU/rB,KAAOgB,EAAaP,UAChC,gBAEPsrB,EAAU/rB,KAAOgB,EAAaN,kBAC9BqrB,EAAU/rB,KAAOgB,EAAaL,kBAC9BorB,EAAU/rB,KAAOgB,EAAaJ,iBAEvBikE,EAAkB94C,EAAU/rB,IAAImB,YAGjC,YAAN+W,OAC2B,IAAzB4sD,EACI,MACyB,IAAzBA,EACA,OAAM,GAAA5sD,OACH4sD,EAAoB,SAE/B,EmKxE8BF,CAC5B74C,EAFcvW,cAAapE,GAA6BA,EAAMsC,UAGtDf,kBAGR4P,KAAMwiD,EACNzY,WAAY0Y,EACZzY,UAAW0Y,GACTf,MACGT,EAAO5zD,EAASw9B,GAAY7lB,mBACjC,IACEnO,sBAAY0rD,GACR,GACAA,EACGvgC,MAAMugC,EAAuB/xD,OAAS,GACtCkF,OAAO6sD,EAAuBvgC,MAAM,EAAG,KAChD,CAACugC,IAIGG,EAAe/J,GAAqB,eAAgBtrD,GACpDs1D,EAAuBhK,GAAqB,eAAgB9tB,GAC5D+3B,EAAoBjK,GAAqB,eAAgBsI,GACzD4B,EAAoB/J,GACxB4J,EACAC,GAEIG,EAA2BhK,GAC/B4J,EACAE,GAEIG,EAAoBl8C,iBAAO67C,GAC7BA,EACCA,EAAar8C,MACZ28C,EAA4Bn8C,iBAAO87C,GACrCA,EACCA,EAAqBt8C,MAGpB48C,EAAgBtK,GAAqB,gBAAiBtrD,GACtD61D,EAAwBvK,GAAqB,gBAAiB9tB,GAC9Ds4B,EAAqBxK,GAAqB,gBAAiBsI,GAC3DmC,EAAqBtK,GACzBmK,EACAC,GAEIG,EAA4BvK,GAChCmK,EACAE,GAEIG,EAAqBz8C,iBAAOo8C,GAC9BA,EACCA,EAAc58C,MACbk9C,EAA6B18C,iBAAOq8C,GACtCA,EACCA,EAAsB78C,MAGrBm9C,EAAiB7K,GAAqB,iBAAkBtrD,GACxDo2D,EAAyB9K,GAC7B,iBACA9tB,GAEI64B,EAAsB/K,GAAqB,iBAAkBsI,GAC7D0C,EAAsB7K,GAC1B0K,EACAC,GAEIG,EAA6B9K,GACjC0K,EACAE,GAEIG,EAAsBh9C,iBAAO28C,GAC/BA,EACCA,EAAen9C,MACdy9C,EAA8Bj9C,iBAAO48C,GACvCA,EACCA,EAAuBp9C,MAGtB09C,EAAiBpL,GAAqB,aAActrD,GACpD22D,EAAyBrL,GAAqB,aAAc9tB,GAC5Do5B,EAAsBtL,GAAqB,aAAcsI,GACzDiD,EAAsBpL,GAC1BiL,EACAC,GAEIG,EAA6BrL,GACjCiL,EACAE,GAEIG,EAAsBv9C,iBAAOk9C,GAC/BA,EACCA,EAAe19C,MACdg+C,EAA8Bx9C,iBAAOm9C,GACvCA,EACCA,EAAuB39C,MAEtBq4C,EAAoB,OAALuC,QAAK,IAALA,KAAO57C,UACxB7V,GAAgB,CACdE,OAAQ,MACRC,UAAWsxD,EAAM57C,YAEnB,GACEi/C,EAAqB5sC,EAAoB,CAC7CV,gBAAiBz0B,EAAqBG,cAGxC,OACEkT,gBAAC28C,GAAO,CAAAvvD,SAAA,CACN2S,eAACY,GAAa,CACZG,gBAAiB8rD,EACjB/rD,eACGgsD,GACAA,KACwB,OAAtBF,QAAsB,IAAtBA,KAAwB/xD,UAC1BnD,EAEHsJ,cACEhB,eAACN,GAAU,CACTC,KAAK,+DACLX,OAAO,QACPa,OAAQC,IAGZe,QAC0B,OAAtB+rD,QAAsB,IAAtBA,KAAwB/xD,OACxBoF,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE4S,gBAACgsD,GAAW,CAAA5+D,SAAA,CACV2S,eAAC6oD,GAAqB,CACpBE,WAAYA,EACZ3O,aAAcA,EACdhsD,KAAK,eACLsiB,MAAO08C,EACP/J,cAAegK,EACfvE,WAAYoE,EAEZhE,kBACEh4C,iBAAOi8C,GACHC,EACAD,EAEN/D,YAAaiD,EAAgBU,aAC7Bn5C,UAAWA,EACXq1C,cAAe2D,EACfzD,wBAAyBqD,EACzBxD,SAAU2F,IAEZ3uD,eAAC6oD,GAAqB,CACpBE,WAAYA,EACZ3O,aAAcA,EACdhsD,KAAK,gBACLsiB,MAAOi9C,EACPtK,cAAeuK,EACf9E,WAAY2E,EAEZvE,kBACEh4C,iBAAOw8C,GACHC,EACAD,EAENvE,wBAAyBqD,EACzBpD,YAAaiD,EAAgBiB,cAC7BtE,SAAUjnC,EAAoB,CAC5BF,kBAAmB,CACjB,CAACvuB,GAAaF,iBAAkB,CAC9BxI,EAA0BC,MAG9Bw2B,gBAAiBz0B,EAAqBE,eAExCm8D,cAAe2D,EACfh5C,UAAWA,IAEb5T,eAAC6oD,GAAqB,CACpBE,WAAYA,EACZrF,eAAgBA,EAChBtJ,aAAcA,EACdhsD,KAAK,iBACLsiB,MAAOw9C,EACP7K,cAAe8K,EACfrF,WAAYkF,EAEZ9E,kBACEh4C,iBAAO+8C,GACHC,EACAD,EAEN9E,wBAAyBqD,EACzBpD,YAAaiD,EAAgBwB,eAC7B7E,SAAUjnC,EAAoB,CAC5BF,kBAAmBu4B,EACf,CACE,CAAC9mD,GAAaF,iBAAkB,IAElC,CACE,CAACE,GAAaF,iBAAkB,CAC9BxI,EAA0BC,IAC1BD,EAA0BE,MAC1BF,EAA0BI,UAE5B,CAACsI,GAAaJ,QAAS,CAAC1J,EAAwBE,OAEtD23B,gBAAiBz0B,EAAqBE,eAExC8mB,UAAWA,EACXq1C,cAAe2D,IAEjB5sD,eAAC6oD,GAAqB,CACpBE,WAAYA,EACZ3O,aAAcA,EACdhsD,KAAK,aACLsiB,MAAO+9C,EACPpL,cAAeqL,EACf5F,WAAYyF,EAEZrF,kBACEh4C,iBAAOs9C,GACHC,EACAD,EAENrF,wBAAyBqD,EACzBpD,YAAaiD,EAAgBuC,WAC7B5F,SAAU2F,EACV/6C,UAAWA,EACXq1C,cAAe2D,OAGnB5sD,eAACksD,GAAgB,CAAA7+D,SACf2S,eAAC8rD,GAA2B,CAC1B7vC,IAAK2wC,EACLl1D,QAASA,EACT4zD,MAAOA,EACPvC,WAAYA,EACZ36D,KAAK,YACL8mC,SAAUA,EACVi0B,wBAAyBqD,EACzB3sD,OAAQC,EACRspD,YAAaiD,EAAgB74B,iBAIjC,OAGRxzB,eAAC0rB,GAAM,CAAAr+B,SACL2S,eAACk9C,GAAc,CAACr9C,OAAQC,QAElB,EC3Qd,MAAMU,GAAYlC,KAAOC,IAAGkpB,QAAAC,aAAA,8BAItBmnC,GAAkBvwD,aAAOylC,GAAPzlC,CAAawpB,QAAAJ,aAAA,+tFAiBjBhpB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAElC5rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAC7B5rB,GAAK,cAAAqB,OAAkBrB,EAAMC,MAAM2C,OAAO2a,IAAIuU,aAMjD9xB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YACjC9xB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAa3CnsB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAC1Bzd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAyC7Cf,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAI6yC,SAKlCpwD,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAC1Bxd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAS5Cd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAMhC5rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAK9B5rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIyb,UAQhCh5B,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YACrC9xB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGvBxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YAuBvC9xB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAC1Bxd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAShEuvD,GAAgBzwD,KAAO8C,KAAI4mB,QAAAN,aAAA,+IAGfhpB,GAAK,GAAAqB,OAChBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAK/DykC,GAAuB1wD,KAAOC,IAAGiqB,QAAAd,aAAA,qCAGjCunC,GAAW3wD,aAAO6kC,GAAP7kC,CAAwBoqB,QAAAhB,aAAA,mCAGnCwnC,GAAgB5wD,aAAOgL,GAAPhL,CAAY+oD,QAAA3/B,aAAA,yBACvBhpB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIic,QAErCi3B,GAAoB7wD,KAAOC,IAAGgpD,QAAA7/B,aAAA,sDAI9B0nC,GAAe9wD,KAAO+wD,GAAE5H,QAAA//B,aAAA,uEACbhpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAMtD8vD,GAAiBhxD,KAAOC,IAAGopD,QAAAjgC,aAAA,4BAG3B6nC,GAAsBjxD,aAAOywD,GAAPzwD,CAAqBupD,QAAAngC,aAAA,wBAG3C8nC,GAAalxD,aAAOgL,GAAPhL,CAAYypD,QAAArgC,aAAA,6BAGzB+nC,GAAwBnxD,KAAOC,IAAG0pD,QAAAvgC,aAAA,uJAKxBhpB,GAAK,gBAAAqB,OAAoBrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAI1DmlC,GAAcpxD,KAAOC,IAAG2pD,QAAAxgC,aAAA,oDACbhpB,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU7zB,QAAQQ,OAExDkwD,GAAcrxD,aAAOoxD,GAAPpxD,CAAmB6pD,QAAAzgC,aAAA,gCAyWxBkoC,OA7VwBv2D,IAIX,IAJY,UACtCuG,EAAS,OACTC,EAAS,SAAQ,KACjBuK,GACM/Q,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,6BACtB,UAAEqL,EAAS,gBAAEoX,GAAoBzB,KACjCxqB,EAAsBgZ,mBAAQ,IAAMnE,EAAU7U,qBAAqB,CACvE6U,IAEI2kD,EAAexgD,mBACnB,SAAAygD,EAAA,OACQ,OAAJ1lD,QAAI,IAAJA,GAAe,QAAX0lD,EAAJ1lD,EAAMgU,iBAAS,IAAA0xC,GAAfA,EAAiBj1D,OACfuP,EAAKgU,UACFnN,QAAOg8B,GAAKA,EAAE1uB,WAAa3zB,EAA0BG,KACrDqN,KAAIuQ,IAAE,IACFA,EACH2V,MAAO,EACPD,eAAgB,SAEpB,EAAE,GACR,CAACjU,IAGG2lD,EAAyBvyD,uBAC5BwyD,GACQC,iBAAOhwC,kBAAQ+vC,GAAoB,eAAez6D,MAAK,CAAC26D,EAAIC,IACjED,EAAGlnE,YAAY+lB,cAAcohD,EAAGnnE,gBAGpC,IAGIonE,EAA2B/gD,mBAC/B,IACE60C,kBACE16C,OAAOmH,OACL4F,oBACEphB,kBAAQ06D,EAAc,eACtB,CAACA,EAActjB,KAAU,CACvB8jB,QAASN,EACPF,EAAaz3D,KAAIuQ,GAAMA,EAAGgY,UAE5B1rB,SAAUgrB,kBAAQ4vC,EAAaz3D,KAAIuQ,GAAMA,EAAG1T,YAC5Cq7D,gBAAiBl8B,GACH,OAAZy7B,QAAY,IAAZA,OAAY,EAAZA,EACI5+C,QAAOtI,IAAO2G,kBAAQ3G,EAAG6qB,aAAerZ,gBAAMxR,EAAG6qB,aAClDp7B,KAAIuQ,GAAMA,EAAG6qB,aAElBq8B,eACAtjB,aACAgkB,UAAWR,EACTF,EAAaz3D,KAAIuQ,GAAMA,EAAGkqC,qBAKlC,CAAC,yBACD,CAAC,SAEL,CAACkd,EAAwBF,IAGrBW,EAAoBhzD,uBACxB1D,IAQO,IARN,EACC+P,EAAC,IACDi8B,EAAG,OACHvmB,GAKDzlB,EACC,MAAMyyC,EAAazG,EAAI0G,SAASD,WAChCjqB,EAAgB,CACd,CAAChvB,GAAaQ,sBAAwBuC,EAElCA,EAAoBqT,SAAS6iC,GAC7Bl2C,EAAoB4a,QAAOpG,GAAKA,IAAM0hC,IACtC,IAAIl2C,EAAqBk2C,GAHzB,CAACA,IAIL,GAEJ,CAACjqB,EAAiBjsB,IAGd6tC,EAAU70B,mBAAQ,KACtB,MAAMohD,EAA0B,CAC9B,CAAE5oE,GAAI,KAAMknD,SAAU,GACtB,CAAElnD,GAAI,WAAYknD,SAAU,GAC5B,CAAElnD,GAAI,aAAcknD,SAAU,GAC9B,CAAElnD,GAAI,iBAAkBknD,SAAU,KAEpC,MAAO,CACL,CACE1C,SAAWvG,GACTA,EAAIyG,YAAc,qBACpB/vB,OAAQ,YACR8vB,KAAMt+B,IAA6C,IAA5C,KAAEg4B,GAAoCh4B,EAC3C,OAAOhO,eAAC+uD,GAAa,CAAA1hE,SAAE24C,EAAKt1B,OAAsB,EAEpD9Q,UAAW,aACX/X,GAAI,aACJ6oE,YAAaF,GAEf,CACEnkB,SAAWvG,GACTA,EAAI+pB,aAAa5+C,QAAOtI,GAAsB,OAAhBA,EAAGgoD,WAAmB91D,OACtD2hB,OAAQ,WACR8vB,KAAM5+B,IAIC,IAJA,KACLs4B,GAGDt4B,EACC,OACEzN,gBAAC8uD,GAAa,CAAA1hE,SAAA,CACZ2S,eAACivD,GAAQ,CAACj0D,KAAMpQ,EAA0BG,KAC1CiV,eAAC0vD,GAAW,CAAAriE,SAAA,GAAA0S,OACNimC,EAAKt1B,MAAK,OAAA3Q,OAAMimC,EAAKF,IAAI0G,SAASqjB,aAAah1D,YAEvC,EAGpB+E,UAAW,UACX/X,GAAI,UACJ6oE,YAAaF,GAEf,CACEnkB,SAAWvG,GACPA,EAAIwqB,gBACF9mD,OAAOmH,OAAOm1B,EAAIwqB,iBAAiBvpE,QACjC,CAAC0sC,EAAO8B,IACNr0B,sBAAYq0B,GACR9B,EACAA,GACgB,SAAf8B,EAAM/7B,KAAgC,GAAd+7B,EAAM7kB,MAAa6kB,EAAM7kB,QACxD,GAEF,EACN8L,OAAQ,uBACR8vB,KAAMl7B,IAAA,IAAC,KACL40B,GAGD50B,EAAA,OACCpR,eAAC+uD,GAAa,CAAA1hE,SACZ2S,eAACugC,GAAc,CAAC/M,UAAWwS,EAAKF,IAAI0G,SAAS8jB,mBAC/B,EAElB1wD,UAAW,YACX/X,GAAI,YACJ6oE,YAAaF,GAEf,CACEnkB,SAAWvG,IACT,MAAM8qB,EAAkBxP,cACtBnhC,kBACE6lB,EAAI+pB,aAAaz3D,KAAIuQ,IAAE,IAAAkoD,EAAA,OACH,QADGA,EACrBloD,EAAGmoD,uBAAe,IAAAD,OAAA,EAAlBA,EAAoBz4D,KAAIoZ,GAAKA,EAAEu/C,YAAW,MAKhD,OAAOr4D,OAASe,KACZm3D,EAAkB/3D,KAAKsR,MAAMymD,GAAmB/3D,KAAKm4D,MACvD5pE,EACD,EAEHo1B,OAAQ,eACR8vB,KAAMp6B,IAAA,IAAC,KACL8zB,GAGD9zB,EAAA,OACClS,eAAC+uD,GAAa,CAAA1hE,SACZ4S,gBAAC+uD,GAAoB,CAAA3hE,SAAA,CACnB2S,eAAC0vD,GAAW,CAAAriE,SACT24C,EAAKt1B,MAAQ,GAAE,GAAA3Q,OACTozB,KAAKY,MAAMiS,EAAKt1B,MAAQ,KAAG,GAAA3Q,OAC3BimC,EAAKt1B,SAEbs1B,EAAKt1B,MAAQ,GAAE,2BAEJ,EAElB9Q,UAAW,cACX/X,GAAI,cACJ6oE,YAAaF,GAEf,CACEnkB,SAAWvG,GAA4BA,EAAI7wC,SAAS4F,OACpD2hB,OAAQ,WACR8vB,KAAM35B,IAIC,IAJA,KACLqzB,GAGDrzB,EACC,MAAMhT,EACJM,gBAACqvD,GAAc,CAAAjiE,SAAA,CACb2S,eAACkvD,GAAa,CAACp6D,KAAK,YACpBkL,eAAC2vD,GAAW,CAAC,8BAAA5vD,OAA6BimC,EAAKt1B,OAAQrjB,SACpD24C,EAAKt1B,WAIZ,OAASs1B,EAAKt1B,MACZ1Q,eAAC+uD,GAAa,CAAA1hE,SACZ2S,eAAC0sB,GAAO,CACNa,UAAU,MACVC,aACExtB,eAAA,MAAI,cAAY,mBAAkB3S,SAC/B2+B,iBACCxiB,OAAO+L,QACLpgB,kBAAQ6wC,EAAKF,IAAI0G,SAASv3C,UAAUyqB,GACjC,OAADA,QAAC,IAADA,KAAGhW,SAAS,SACR,QACC,OAADgW,QAAC,IAADA,KAAGhW,SAAS,UACZ,cACA,sBAGRG,GAAKA,EAAE,KACPzR,KAAI0nB,IAAA,IAAE74B,EAAKypB,GAAMoP,EAAA,OACjB7f,gBAACkvD,GAAiB,CAAA9hE,SAAA,CAChB2S,eAACovD,GAAY,CAAA/hE,SAAEpG,IACf+Y,eAAA,MAAA3S,SACE2S,eAAC2vD,GAAW,CAAAtiE,SAAEqjB,EAAM7V,aAHA5T,EAKJ,MAI1BwmC,QAAS9tB,EACTE,OAAM,eAAAE,OAAiBimC,EAAKF,IAAI0G,SAASD,gBAI7CvsC,eAAC+uD,GAAa,CAAA1hE,SAAEsS,GACjB,EAEHC,UAAW,WACX/X,GAAI,WACJ6oE,YAAaF,GAEf,CACEnkB,SAAWvG,IAAuB,IAAAmrB,EAAA,OAAmB,QAAnBA,EAAKnrB,EAAIuqB,QAAQ,UAAE,IAAAY,OAAA,EAAdA,EAAgBjoE,WAAW,EAClEwzB,OAAQ,YACR8vB,KAAMY,IAAA,IAAC,KACLlH,GAMDkH,EAAA,OACCltC,eAAC+uD,GAAa,CAAA1hE,SACZ2S,eAACgnC,GAAoB,CACnBX,KAAML,EAAKF,IAAI0G,SAAS6jB,QACxBppB,cAAe,EACfpnC,OAAQC,KAEI,EAElBF,UAAW,UACX/X,GAAI,UACJ6oE,YAAaF,GAEf,CACEnkB,SAAWvG,IAAuB,IAAAorB,EAAA,OAAqB,QAArBA,EAAKprB,EAAIyqB,UAAU,UAAE,IAAAW,OAAA,EAAhBA,EAAkBloE,WAAW,EACpEwzB,OAAQ,cACR8vB,KAAMc,IAAA,IAAC,KACLpH,GAMDoH,EAAA,OACCptC,eAAC+uD,GAAa,CAAA1hE,SACZ2S,eAACgnC,GAAoB,CACnBX,KAAML,EAAKF,IAAI0G,SAAS+jB,UACxBtpB,cAAe,EACfpnC,OAAQC,KAEI,EAElBF,UAAW,YACX/X,GAAI,YACJ6oE,YAAaF,GAEf,CACEnkB,SAAU,aACVC,KAAMe,IAAA,IAAC,KAAErH,GAAoCqH,EAAA,OAC3CrtC,eAACuvD,GAAmB,CAAAliE,SAClB2S,eAACwvD,GAAU,CACT16D,KACqB,OAAnBuB,QAAmB,IAAnBA,KAAqBqT,SAASs8B,EAAKt1B,OAC/B,kBACA,mBAGY,EAExB9Q,UAAW,WACX/X,GAAI,WACJm9C,eAAe,EACf0rB,YAAaF,GAEf,CACEnkB,SAAU,aACVC,KAAMkB,IAAA,IAAC,KACLxH,GAMDwH,EAAA,OACoB,OAAnBn3C,QAAmB,IAAnBA,KAAqBqT,SAASs8B,EAAKF,IAAI0G,SAASD,YAC9CvsC,eAACyvD,GAAqB,CAAApiE,SACpB2S,eAAC+pC,GAAqB,CACpB3/B,KAAM47B,EAAKF,IAAI0G,SAASqjB,aACxB5lB,cAAewmB,EACfzmB,YAAY,EACZ1F,cAAc,MAGhB,IAAI,EACV1kC,UAAW,eACX/X,GAAI,eACJm9C,eAAe,GAElB,GACA,CAACwrB,EAAmB1wD,EAAYzJ,IAEnC,OACE2J,eAACQ,GAAS,CAAAnT,SACR2S,eAAC6uD,GAAe,CACdjvD,UAAWA,EACXskC,QAASA,EACT,cAAapkC,EACbsK,KAAMgmD,EACNvwD,OAAQC,EACRkkC,cAAc,EACdM,cAAc,KAEN,EC3mBD,OAA0B,qCCOzC,MAAMna,GAAoB7rB,aAAOsrB,IAAYprB,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAAnBH,CAAmB,kFACjCI,GAAK,eAAAqB,OAAmBrB,EAAMC,MAAM2C,OAAO4mB,UAOjDipC,GAAU7yD,KAAO8yD,GAAE5yD,WAAA,CAAAxV,YAAA,oBAAAyV,YAAA,gBAATH,CAAS,6FACRI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAiD7C6xD,OAlCEh4D,IAMW,IANV,UAChBuG,EAAS,OACTC,EAAM,KACNqH,EAAI,QACJoqD,EAAO,SACPC,GACMl4D,EACN,OACE2G,eAAA,MACEJ,UAAaA,EAAS,GAAAG,OAAMH,EAAS,cAAe,YACpD,cAAaC,EAAOxS,SAEnBmkE,eAAKF,EAASC,GAAYrqD,EAAKrM,QAAQzC,KAAIw+C,IAC1C,MAAMx6C,EAAO8K,EAAKoH,MAAK+F,GAAKA,EAAExsB,KAAO+uD,IAErC,QACIx6C,GACA4D,eAAA,MAAA3S,SACE4S,gBAACkxD,GAAO,CAAA9jE,SAAA,CACN2S,eAACmqB,GAAiB,CAChB9pB,KAAS,OAAJjE,QAAI,IAAJA,OAAI,EAAJA,EAAMq1D,QAAS,KACpB7xD,UAAU,YACVwpB,QAAa,OAAJhtB,QAAI,IAAJA,OAAI,EAAJA,EAAMhO,OAEhBgO,EAAKhO,SAPDwoD,EAUV,KAGF,ECvCT,MAAMp2C,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAVH,CAAU,6CACbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAIlD6mC,GAAapzD,KAAOqzD,GAAEnzD,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,gBAATH,CAAS,uEAMtB6wD,GAAoB7wD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kDAAAyV,YAAA,gBAAVH,CAAU,wDAK9BszD,GAA2BtzD,aAAO6wD,IAAkB3wD,WAAA,CAAAxV,YAAA,yDAAAyV,YAAA,gBAAzBH,CAAyB,+BAGpDuzD,GAAOvzD,KAAO+wD,GAAE7wD,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAATH,CAAS,oJAGLI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAUtDsyD,GAAaxzD,KAAO8yD,GAAE5yD,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,gBAATH,CAAS,6FACXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAMtDuyD,GAAUzzD,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAAZH,CAAY,oDAKtB2zC,GAAY3zC,aAAOiiC,IAAe/hC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAtBH,CAAsB,oBAGlC0zD,GAAU1zD,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAATH,CAAS,oBAGnB0qC,GAAU1qC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAATH,CAAS,mEAsHV2zD,OApGsB54D,IAMT,IAAD64D,EAAA,IANW,UACpCtyD,EAAS,MACTq/C,EAAK,OACLp/C,EAAS,SAAQ,UACjBue,EAAS,KACTlX,GACM7N,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,qCACtBsyD,EAAmB/zC,EAAU9P,MAAKu4C,GAAKA,EAAEh/D,KAAOo3D,EAAM1gC,SAAS12B,KAC/DuqE,EAA0B,OAAhBD,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB3zC,eAC5BzoB,GAA2C,QAAlCm8D,EAAAG,eAAKpT,EAAM1gC,SAAS+zC,sBAAc,IAAAJ,OAAA,EAAlCA,EAAoCn8D,SAAU,GAE7D,OACEkK,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD4S,gBAACyxD,GAAU,CAAArkE,SAAA,CACT4S,gBAACkvD,GAAiB,CAAA9hE,SAAA,CAChB2S,eAAC6xD,GAAI,CAAAxkE,SAAC,WACN2S,eAAC8xD,GAAU,CAAAzkE,SAAE/C,EAAuByL,QAEnCkpD,EAAM1gC,SAAStpB,SAAS4F,OACzBoF,gBAACkvD,GAAiB,CAAA9hE,SAAA,CAChB2S,eAAC6xD,GAAI,CAACjyD,UAAU,iBAAgBvS,SAAC,aACjC2S,eAAC8xD,GAAU,CAAAzkE,SACT2S,eAAA,MAAA3S,SACG4xD,EAAM1gC,SAAStpB,SAASmD,KAAIsnB,GAC3Bzf,gBAAC+oC,GAAO,CAAA37C,SAAA,CACN2S,eAAC+xD,GAAO,CAACj9D,KAAK,mBAAmB+K,OAAQC,IACxCzR,GAAgBqxB,KAFLA,YAQpB,KACJ1f,eAAC4xD,GAAwB,CAAAvkE,SACpB4xD,EAAM1gC,SAASoC,OAAO9lB,QAAYqM,EACnCjH,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAC6xD,GAAI,CAAAxkE,SAAC,gBACN2S,eAACqxD,GAAQ,CACPnqD,KAAMA,EACNoqD,QAASrS,EAAM1gC,SAASoC,OAAOvoB,KAAI60C,GAAKA,EAAE7F,gBAC1CmqB,SAAU,OAIdvxD,eAAA,QAAA3S,SAAM,2CAGP4xD,EAAM1gC,SAASiV,UAChBvzB,gBAAC2xD,GAAwB,CAAAvkE,SAAA,CACvB2S,eAAC6xD,GAAI,CAAAxkE,SAAC,eACN2S,eAAC8xD,GAAU,CAAAzkE,SACT2S,eAACiyC,GAAS,CACRze,UAAWyrB,EAAM1gC,SAASiV,UAC1B3zB,OAAQC,SAIZ,QAENG,gBAACyxD,GAAU,CAAArkE,SAAA,CACN4xD,EAAM1gC,SAAS8vB,WAChBpuC,gBAACkvD,GAAiB,CAAA9hE,SAAA,CAChB2S,eAAC6xD,GAAI,CAAAxkE,SAAC,eACN2S,eAAC8xD,GAAU,CAAAzkE,SACR6e,cAAIxV,GAAoBuoD,EAAM1gC,SAAS8vB,iBAG1C,KACJruC,eAAC0xD,GAAU,CAAArkE,SACN4xD,EAAM1gC,SAASs0B,aAAah4C,QAAYqM,EACzCjH,gBAAC2xD,GAAwB,CAAAvkE,SAAA,CACvB2S,eAAC6xD,GAAI,CAAAxkE,SAAC,cACN2S,eAACqxD,GAAQ,CACPnqD,KAAMA,EACNoqD,QAASrS,EAAM1gC,SAASs0B,aAAaz6C,KAAI60C,GAAKA,EAAE7F,gBAChDmqB,SAAU,OAGZ,OAEI,OAAPa,QAAO,IAAPA,KAASv3D,OACVoF,gBAAC2xD,GAAwB,CAAAvkE,SAAA,CACvB2S,eAAC6xD,GAAI,CAAAxkE,SAAC,2BACN2S,eAAC8xD,GAAU,CAAAzkE,SACT2S,eAACgyD,GAAO,CAAA3kE,SACL+kE,EAAQh6D,KAAIyuD,GACX5mD,gBAAA,MAAA5S,SAAA,CACGw5D,EAAEtb,UAAU,KAAGsb,EAAEz4D,OADXy4D,EAAEh/D,aAOjB,UAEI,ECzKhB,MAAM2Y,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,eAAVH,CAAU,oCACbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAEtDgd,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,eAAbH,CAAa,wBAGtBi0D,GAAQj0D,aAAOsrB,IAAYprB,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAAnBH,CAAmB,8DACrBI,GAAK,eAAAqB,OAAmBrB,EAAMC,MAAM2C,OAAO4mB,UAKjDsqC,GAAYl0D,aAAO2rB,IAAgBzrB,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,eAAvBH,CAAuB,oBAGnC4kC,GAAO5kC,KAAO3E,KAAI6E,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAAXH,CAAW,sBAmDTm0D,OAxCwBp5D,IAIJ,IAADqlB,EAAA,IAJM,UACtC9e,EAAS,MACTq/C,EAAK,OACLp/C,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,wCACtB,UAAEqL,GAAc2V,KAChBE,EAAUk+B,EAAMl+B,QAEtB,GAAI7f,sBAAY6f,GACd,OAAO,KAGT,MAAM2xC,IAA6B,QAAdh0C,EAAAxT,EAAUhE,YAAI,IAAAwX,OAAA,EAAdA,EAAgBrQ,cAAe,IAAIC,MACtDkD,GAAKA,EAAE3pB,KAAOk5B,EAAQ9Q,SAElBtW,EAAOonB,EAAQgwC,WACf3zC,EAAW2D,EAAQ3D,SAEzB,OACEnd,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACpD+vB,EAAWpd,eAACwc,GAAM,CAAAnvB,SAAE/C,EAAuB8yB,KAAsB,KACpEnd,gBAAA,OAAA5S,SAAA,CACKqlE,EACD1yD,eAACuyD,GAAK,CACJnpC,QAASspC,EAAYtkE,KACrBiS,IAAKqyD,EAAYnnC,YACjB1rB,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAI2yD,EAAY7qE,MAGvCmY,eAACwyD,GAAS,CAAC3yD,OAAQC,IAElBnG,EACDqG,eAACkjC,GAAI,CAAC1X,SAAU7xB,EAAKtM,SAAEqL,KAAOiB,GAAMI,OAAO,iBACzC,UAEI,EC9BD44D,OA1BsBt5D,IAIF,IAJG,QACpC04B,EAAO,UACP3T,EAAS,KACTlX,GACM7N,EACN,MAAMyG,EAAa,mCACnB,IAAKiyB,EACH,OAAO,KAGT,MAAMktB,EAAQltB,EAAQktB,MACtB,OAASj5B,cAAIi5B,EAAMl+B,QAAS,UAC1B/gB,eAACiyD,GAA4B,CAC3BhT,MAAOA,EACP7gC,UAAWA,EACXve,OAAQC,EACRoH,KAAMA,IAGRlH,eAACyyD,GAA8B,CAC7BxT,MAAOA,EACPp/C,OAAQC,GAEX,EC8SYxD,OAvSAjD,IAKwB,IALvB,KACd+Q,EAAI,IACJ5R,EAAG,MACHO,EAAK,cACLhQ,GACMsQ,EACN,MAAMqW,EAAY3W,EACZ4W,EAAUjX,KAAOyoD,IAAI,CAACzoD,KAAOF,GAAME,SAAWS,cAE9C8qD,EAAaC,kBAAQ95C,EAAM,CAAC,aAAc,iBAC1CwoD,EAAe3O,EAAWhzC,QAAO+9B,KAAOA,EAAEsjB,gBAC1CO,EAAQ5C,iBAAOhM,EAAY,cAAc7rD,KAAI42C,GAAKA,EAAEzC,aACpDumB,EAAsBp6D,KAAOgX,GAAWqjD,UACxCC,EAAqBt6D,KAAOiX,GAASojD,UACrCl6C,EAAQngB,OAERumC,EAAS2zB,EAAax6D,KAAI,CAAC42C,EAAGzlB,KAClC,MAAM+oC,EAAgBtjB,EAAEsjB,cAClBW,EAAsCX,EACzCl6D,KAAI0uD,IAAM,IAADoM,EACR,MAAM7xD,EACJylD,EAAE/wD,SAAWhM,EAAsBK,OAC/B2sC,GAAaz1B,OAAO2a,IAAI6b,aACxBgvB,EAAE/wD,SAAWhM,EAAsBM,UACnC0sC,GAAaz1B,OAAO2a,IAAI2W,QAGvB,QAH8BsgC,EAC/Bn8B,GAAaz1B,OAAOm0B,MAAMjC,UACxBszB,EAAE/wD,eACH,IAAAm9D,OAAA,EAFDA,EAEGl8D,gBACT,MAAO,CAELunB,SAAUywB,EACVjuB,QAAS+lC,EACTzlD,QACA24B,OAAQ,CACNusB,UAAW,GACXX,UAAW7uB,GAAaz1B,OAAO2a,IAAIC,UACnCi3C,UAGErM,EAAE/wD,SAAW5G,GAAgBxE,QACzBosC,GAAaz1B,OAAO2a,IAAImc,YACxB/2B,GAGRmjD,EAAG9rD,KAAOouD,EAAE9tD,SAAS+5D,UACrB9Q,EAAG14B,EACJ,IAEF0C,UAYA,IAADmnC,EANCpjC,eACCsiC,GACAxL,GACEA,EAAE/wD,SAAW5G,GAAgBxE,SAC7Bm8D,EAAE/wD,SAAWhM,EAAsBM,aAGvC4oE,EAAkB1wC,KAAK,CACrB8wC,OAAQ,CACNC,UAAW,WACT,OAAO,CACT,GAEFt5B,OAAQ,CACNm5B,UAAW,eAGb3O,EAAG9rD,KAAOiX,GAASojD,UACnB9Q,EAAG14B,EACHloB,MAGG,QAHE+xD,EACHr8B,GAAaz1B,OAAOm0B,MAAMjC,UACxBrkC,GAAgBxE,gBACjB,IAAAyoE,OAAA,EAFDA,EAEGp8D,kBAIT,MAAMu8D,GAA0CvkB,EAAE8hB,iBAChD,IACC14D,KAAI0uD,IAAC,CAEJvoC,SAAUywB,EACVjuB,QAAS+lC,EACT9sB,OAAQ,CACNw5B,OAAO,OAADzzD,OACJ+mD,EAAE1pC,WAAarzB,EAAsBC,SAjH/C,yQAmHc88D,EAAE1pC,WAAarzB,EAAsBE,mBACrC68D,EAAE1pC,WAAarzB,EAAsBG,UAlHnD,yQAEA,yQAkH2B,MAIrBs6D,EAAG9rD,KAAOouD,EAAEiK,YAAYgC,UACxB9Q,EAAG14B,MAEJ0C,UAEGwnC,EAAuBR,EAAkB19D,MAAK,CAACm+D,EAAIC,KACvD,GAAID,EAAGlP,IAAMmP,EAAGnP,EAAG,CACjB,GACGkP,EAAG3yC,QAAmChrB,SACvC5G,GAAgBxE,QAEhB,OAAO,EACT,GACGgpE,EAAG5yC,QAAmChrB,SACvC5G,GAAgBxE,QAEhB,OAAQ,CACZ,CACA,OAAO+oE,EAAGlP,EAAImP,EAAGnP,CAAC,IAEpB,MAAO,CACLp6C,KAAM,IACDqpD,KACAvP,kBAAQqP,EAAqB,CAAC,KAAM,CAAC,SAE1CK,SAAU,IACVC,MAAOJ,EACJxiD,QAAO,CAAC+9B,EAAG8kB,IAAQA,EAAML,EAAqB54D,SAC9CzC,KAAI,CAAC42C,EAAG8kB,KAAS,IAADC,EACf,MAAO,CACLrjD,MAAoC,QAA/BqjD,EAAEN,EAAqBK,EAAM,UAAE,IAAAC,OAAA,EAA7BA,EAA+BvP,EACtCnjD,MAAO2tC,EAAE3tC,MACV,IAEN,IAGH,MAAO,CACLo0B,MAAO,CACL8L,OAAQ,IACRyyB,WAAY,IACZC,UAAW,GACXC,QAAS,CACPn9D,SAAS,EACTiE,KAAM,KAERm5D,OAAQ,QACRrrC,MAAO,CACLsrC,OAAQ,YACRlyB,WAAYnL,GAAan4B,MAAMC,QAAQzQ,KACvCq3D,WAAY1uB,GAAan4B,MAAMC,QAAQI,QAAQO,SAEjDxE,KAAM,SACNq5D,SAAU,KAEZjO,OAAQ,CACNrvD,SAAS,GAEXsvD,YAAa,CACXiO,OAAQ,CACNF,OAAQ,UACR7N,UAAW,EACXvsB,OAAQ,CAAEjjC,SAAS,EAAMwxB,OAAQ,EAAGirC,OAAQ,UAC5ChN,OAAQ,CACNv+B,MAAO,CACLlxB,SAAS,GAEXkzD,SAAU,CACRlzD,SAAS,IAGbw9D,gBAAgB,IAGpB56D,KAAM,CAAE66D,QAAQ,GAChBlrE,MAAO,CAAEuvC,KAAM,IACfooB,MAAO,CACL,CACEwT,qBAAsB,CACpBC,KAAM,QACNC,IAAK,QACLC,KAAM,OACNC,OAAQ,WAEVC,eAAe,EACfC,cAAeh+B,GAAaz1B,OAAO2a,IAAIsO,KACvCy7B,cAAe,EACfR,OAAQ,CAEN1G,UAAW,WACT,MAAMkW,EAAehoC,KAAKioC,KAAKC,sBAAsBC,KAAKnoC,MAC1D,OAAOnU,EAAM9e,OAAO,WAAai7D,EAC7B,sCACAA,CACN,EACAlsC,MAAO,CACLznB,MAAO01B,GAAaz1B,OAAO2a,IAAIC,UAC/BgmB,WAAW,GAADniC,OAAKg3B,GAAan4B,MAAMk0B,UAAU1kC,KAAI,eAChD+zC,SAAUpL,GAAan4B,MAAMk0B,UAAUzzB,MAAMC,KAGjDsmD,UAAW7uB,GAAaz1B,OAAO2a,IAAIC,UACnCqqC,UAAW,EACXpF,IAAK2R,EACL1R,IAAK4R,EACLoC,UACErsE,IAAkBf,EAAeI,QAC7B,CACE,CACEiZ,MAAO01B,GAAaz1B,OAAO2a,IAAIC,UAC/Bm5C,UAAW,YACXvtE,MAAO,CACLwtE,SAAU,EACVz8B,KAAM,eACNypB,cAAe,MACfkC,GAAI,EACJvC,GAAI,IAENvxC,MAAOoiD,EACPxxB,MAAO,EACPi0B,OAAQ,IAGZ,GACNC,iBAAiB,EACjB3P,UAAW,EACXC,kBAAmB,KACnB9qD,KAAM,YAGR,CACE4qD,UAAW7uB,GAAaz1B,OAAO2a,IAAIC,UACnCqqC,UAAW,EACXkP,UAAU,IAGd1U,MAAO,CACLsE,WAAYpB,EAAW7rD,KACrB42C,GAAC,4BAAAjvC,OAAgCivC,EAAEzC,WAAU,eAAAxsC,OAAcivC,EAAE5gD,QAE/D43D,cAAe,EACfR,OAAQ,CACNS,MAAO,QACPn9B,MAAO,CACLznB,MAAO01B,GAAaz1B,OAAO2a,IAAIC,YAInCw5C,UAAWzR,EAAW7rD,KAAI,CAAC42C,EAAGzlB,KAErB,CACLloB,MAFgBwxD,EAAM8C,QAAQ3mB,EAAEzC,YAGlB,IAAM,EACdxV,GAAaz1B,OAAO2a,IAAIuU,UACxBuG,GAAaz1B,OAAO2a,IAAIqO,MAC9B9J,KAAM+I,EAAQ,GACd9C,GAAI8C,EAAQ,QAGhB43B,IAAK,EACLC,IAAKwR,EAAa/3D,OA7RJ,GA6R2B+3D,EAAa/3D,OAAS,EAAI,EACnEm8B,UAAU,EACV4+B,UAAW,CACTC,mBAAoB9+B,GAAaz1B,OAAO2a,IAAIwO,MAC5CqrC,gBAAiB,GACjBC,eAAgB,EAChBC,sBAAuB,cACvBC,kBAAmB,EACnBl/D,SAAS,EACTm/D,SAAU,EACVC,WAAYp/B,GAAaz1B,OAAO2a,IAAIwO,MACpC2rC,qBAAsBr/B,GAAaz1B,OAAO2a,IAAIuU,UAC9C6lC,kBAAmB,GACnBC,iBAAkB,GAEpBC,WAAY,EACZzQ,kBAAmB,KACnBx8D,MAAO,CACLyN,SAAS,IAGb8mC,QAAS,IACJhnC,GACH+vD,WAAY,SACVC,EACAC,EACA7H,GAEA,OAAO6C,GAA2B,CAChCC,gBAAkB/0B,KAAa+5B,YAAYF,EAAGC,EAAG7H,GACjD+C,aAAcpmD,OAAOorD,SAEzB,GAEF/nB,SACD,ECzUH,MAAMz+B,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAAVH,CAAU,+GAETI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAI3Cf,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAEnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAqD/C+2D,OAxCSn9D,IAMI,IANH,UACvBuG,EAAS,KACTwK,EAAI,OACJvK,EAAS,SAAQ,UACjB+T,EAAS,KACT1M,GACM7N,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,uBACtB,cAAE9W,EAAa,IAAEyP,EAAG,MAAEO,GAAU6a,GAChC,UAAEwK,GAAchU,EAChBqrB,EAAQpmB,mBAAQ,KACb,CACL/S,OAAQkkD,GAAe,CACrBp2C,KAAMgU,EACNr1B,gBACAyP,MACAO,UAEFlR,GAAI,uBAEL,CAAC2Q,EAAKO,EAAOhQ,EAAeq1B,IAE/B,OACEpe,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAAC+/C,GAAK,CACJtqB,MAAOA,EACP71B,UAAWA,EACXC,OAAQC,EACRnB,MAAOo4B,GACPipB,iBACEhgD,eAAC2yD,GAA4B,CAC3BzrD,KAAMA,EACNkX,UAAWhU,EAAKgU,eAIZ,EC7DhB,MAAM5d,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAVH,CAAU,2DAKtBm4D,GAAan4D,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAVH,CAAU,2EACdI,GAASA,EAAMC,MAAM+/B,KAAKE,MAGtBlgC,GAAK,GAAAqB,OACfrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAIlD7rB,GAASA,EAAMC,MAAM+/B,KAAKE,MAGzC83B,GAAUp4D,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAATH,CAAS,sDAEEI,GAAK,UAAAqB,OAClBrB,EAAMi4D,aAAY,kCAG1BC,GAAat4D,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAATH,CAAS,0CAItBu4D,GAAgBv4D,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAATH,CAAS,0CAIzBw4D,GAASx4D,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAAXH,CAAW,iEACXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAM83B,KAE7Cz4B,IACP,OAAQA,EAAM1D,MACZ,KAAKjR,EAAsBM,UACzB,OAAOqU,EAAMC,MAAM2C,OAAO2a,IAAI2W,QAChC,KAAK7oC,EAAsBK,OACzB,OAAOsU,EAAMC,MAAM2C,OAAO2a,IAAI6b,aAChC,KAAK3oC,GAAgBxE,QACnB,OAAO+T,EAAMC,MAAM2C,OAAO2a,IAAImc,YAChC,QAEE,OAAO15B,EAAMC,MAAM2C,OAAOm0B,MAAMjC,UAC9B90B,EAAM1D,MACNhE,gBACN,IAIE+/D,GAAUz4D,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAZH,CAAY,wBAGtB04D,GAAc14D,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAATH,CAAS,+CAuEd24D,OAzDY59D,IAGC,IAHA,UAC1BuG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,0BAC5B,OACEI,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD2S,eAACy2D,GAAU,CAAAppE,SACT4S,gBAAA,MAAA5S,SAAA,CACE2S,eAACg3D,GAAW,CAAA3pE,SAAC,4BACb2S,eAACg3D,GAAW,CAAA3pE,SAAC,+CAGjB2S,eAACy2D,GAAU,CAAAppE,SACT2S,eAAC02D,GAAO,CAACC,aAAc,EAAEtpE,SACtB,CACC8B,GAAgB1E,IAChB0E,GAAgB3E,mBAChB2E,GAAgBzE,OAChBX,EAAsBM,UACtBN,EAAsBK,OACtB+E,GAAgBxE,SAChByN,KAAImW,GACJtO,gBAAC22D,GAAU,CAAAvpE,SAAA,CACT2S,eAAC82D,GAAM,CAAC97D,KAAMuT,EAAElhB,SAAC,WAChB/C,EAAuBikB,KAFTA,SAOvBvO,eAACy2D,GAAU,CAAAppE,SACT2S,eAAC02D,GAAO,CAACC,aAAc,EAAEtpE,SACtB,CACCtD,EAAsBI,cACtBJ,EAAsBC,SACtBD,EAAsBG,WACtBkO,KAAImW,GACJtO,gBAAC42D,GAAa,CAAAxpE,SAAA,CACZ2S,eAAC+2D,GAAO,CACNjiE,KACEyZ,IAAMxkB,EAAsBC,SACxB,+BACAukB,IAAMxkB,EAAsBG,UAC5B,gCACA,6BAEN2V,OAAQC,IAETxV,EAAuBikB,KAXNA,WAgBhB,ECnIT,MCoBD/N,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAVH,CAAU,kCACZI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAG1C4sC,GAAU54D,KAAO64D,WAAU34D,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAjBH,CAAiB,mBAG3B84D,GAAa94D,KAAO2+C,MAAKz+C,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAAZH,CAAY,oBAChBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAElD+3D,GAA0B/4D,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kDAAAyV,YAAA,gBAAVH,CAAU,2CAIpCg5D,GAAWh5D,aAAO24D,IAAmBz4D,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAA1BH,CAA0B,0BA4F5Bi5D,OAjFgBl+D,IAIH,IAJI,UAC9BuG,EAAS,KACTwK,EAAI,OACJvK,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,8BACtB23D,EAAW,sBACX/rD,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDtQ,EAAQgC,cAAapE,GAA6BA,EAAMoC,SACxD,UAAE6P,GAAc2V,KAChBzM,EAAalJ,EAAUhE,KACvBmH,EAAwB,OAAV+F,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,aACxBjE,KAAMqtD,EAAU,QAAEvjB,EAAO,UAAE3vB,GAActY,oBAC/C,qBACA,IDhEyBjO,WAAkD,IAA3C,YAAEyN,EAAW,WAAEisD,EAAU,SAAE/rD,GAAUtS,EAQvE,aAPuByR,GAAUgD,KAAK,IAAD/N,OAC/B4L,EAAQ,WACZkJ,KAAKC,UAAU4iD,GACf,CACEhtD,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAGxBrB,IAAI,ECyDhButD,CAAc,CACZlsD,cACAE,WACA+rD,WAAY,CAACF,MAEjB,CACEzgE,UAAW0U,KAAiBE,KAAkB,OAALtQ,QAAK,IAALA,KAAQ,kBAIrD,OACE2E,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD,OAALgO,QAAK,IAALA,KAAQ,eACP2E,eAACY,GAAa,CACZE,eAAgBsJ,EAChBvJ,QACEZ,gBAACo3D,GAAuB,CAAAhqE,SAAA,CACtB2S,eAACw2D,GAAe,CACdpsD,KAAMA,EACNwJ,UAAW1I,EAAU0I,UACrB/T,OAAQC,EACRoH,KAAMmH,IAERrO,eAACs3D,GAAQ,CAACz3D,OAAQC,OAGtBD,OAAQC,IAGVG,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACo3D,GAAU,CAAA/pE,SAAC,6DAGZ4S,gBAAA,UAAA5S,SAAA,CACE2S,eAACY,GAAa,CACZG,gBAAiBwjB,EACjBzjB,cAAeozC,KAAsB,OAAVujB,QAAU,IAAVA,KAAaD,IACxCx2D,cACEhB,eAACkpB,GAAK,CACJE,QAAQ,sBACR/oB,IAAKu3D,GACL/3D,OAAQA,IAGZgB,QACEb,eAACkpB,GAAK,CACJE,QAAQ,oBACR/oB,IAAe,OAAVo3D,QAAU,IAAVA,OAAU,EAAVA,EAAaD,GAClB33D,OAAQA,IAGZA,OAAQC,IAEVE,eAACk3D,GAAO,CAAA7pE,SAAC,6BAIL,ECvGhB,MAAMutD,GAAgBt8C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAVH,CAAU,yLAIhBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QASlC5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAGjEstC,GAAev5D,aAAOi9C,IAA2B/8C,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAlCH,CAAkC,iBAC3CI,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAE/DutC,GAAmBx5D,aAAOoB,IAAWlB,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAlBH,CAAkB,kGAC3BI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAsEjCytC,OAxDW1+D,IAA8C,IAAD2+D,EAAA,IAA5C,UAAEp4D,EAAS,OAAEC,EAAS,UAAiBxG,EAChE,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gBACtBxE,EAAQgC,cAAapE,GAA6BA,EAAMoC,SACxD,KAAE+O,EAAI,QAAE8pC,EAAO,UAAE3vB,EAAS,UAAE6vB,GAAcjB,GAAiB,CAC/DjkC,WAAiB,OAAL7T,QAAK,IAALA,OAAK,EAALA,EAAQ,eACpB4T,QAAS,CAAEjU,KAAM,iBAEbi9D,EAAe,OAAJ7tD,QAAI,IAAJA,GAAwC,QAApC4tD,EAAJ5tD,EAA+BgU,iBAAS,IAAA45C,OAApC,EAALA,EAA2Cn9D,OACrDq9D,EAAa7oD,mBAAQ,KACzB,GAAMjF,EACJ,MAAO,IACFA,EACHgU,UAAW8B,GAAmB9V,EAA8BgU,WAEhE,GACC,CAAChU,IAEJ,OACEpK,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACY,GAAa,CACZG,iBAAsB,OAAL1F,QAAK,IAALA,OAAK,EAALA,EAAQ,iBAAkBkpB,EAC3CzjB,eACO,OAALzF,QAAK,IAALA,OAAK,EAALA,EAAQ,kBAAmB64C,GAAYE,IAAchqC,GAEvDvJ,QACO,OAALxF,QAAK,IAALA,KAAQ,eACN4E,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE4S,gBAAC26C,GAAa,CAAAvtD,SAAA,CACZ2S,eAAC63D,GAAY,IACb73D,eAAC87C,GAAW,OAEbmc,EACCh4D,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACu3D,GAAsB,CACrBntD,KAAM8tD,IAERl4D,eAAC4vD,GAAuB,CACtBxlD,KAAM8tD,OAIVl4D,eAAC83D,GAAgB,CACfn4D,KAAM+/B,GAAgB,4BAK5B1/B,eAACu3D,GAAsB,IAG3B13D,OAAQC,KAEN,EC1GV,MAAMU,GAAYlC,KAAO2pC,GAAEzpC,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,gBAATH,CAAS,yEACVI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAElCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQu/B,WAoB5C25B,OATG9+D,IAAqD,IAApD,UAAEuG,EAAS,OAAEC,EAAS,SAAQ,MAAEvW,GAAc+P,EAC/D,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,eAC5B,OACEG,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACtD/D,GACS,ECbhB,MAAMk9C,GAAOloC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,eAATH,CAAS,8EAEYI,GAASA,EAAM05D,kBAG3CC,GAAmB/5D,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAVH,CAAU,yBAG7Bg6D,GAAmBh6D,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAVH,CAAU,yBAG7By0B,GAAQz0B,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAAZH,CAAY,+CACfI,GACPA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOimB,SACnB7oB,EAAMC,MAAM2C,OAAO87B,QAAQC,aAI7Bk7B,GAAej6D,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAAVH,CAAU,yCAMlBk6D,GAA4B,GA4G1BC,OAjGMp/D,IAMP,IANQ,UACpBuG,EAAS,YACT84D,EAAW,MACXC,EAAK,gBACLP,EAAkBI,GAAyB,OAC3C34D,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kBAItB+4D,EACJR,GAAmBI,GACfK,EAAyCroB,gBAC7CmoB,EACAC,IAEKE,EAAqBC,GAA0B/oD,mBACpDmjB,KAAKY,MAAM2kC,EAAcE,IAErBI,EAAe3pD,mBAAQ,IAAMwpD,EAAQC,IAAsB,CAC/DD,EACAC,IAwBF,GArBA1oD,qBAAU,KACR2oD,EAAuB5lC,KAAKY,MAAM2kC,EAAcE,GAA2B,GAC1E,CAACF,EAAaE,IAmBbtpD,kBAAQqpD,GACV,OAAO,KAGT,MAAMM,EACJj5D,eAACwmC,GAAI,CAAC4xB,gBAAiBA,EAAgB/qE,SACxB,OAAZ2rE,QAAY,IAAZA,OAAY,EAAZA,EAAc5gE,KAAI,CAACsnB,EAAG6J,IACrBvpB,eAAA,MAAA3S,SAAoCqyB,GAAC,GAAA3f,OAAzBD,EAAU,KAAAC,OAAIwpB,QAI1B+lB,EAAiBwpB,GAAuBD,EAAQh+D,OAAS,EACzD00C,EAAyC,IAAxBupB,EACjB73D,EACJ03D,EAAM99D,QAAU+9D,EACdK,EAEAj5D,eAACqvC,GAAO,CACNxuC,QAASb,eAACu4D,GAAY,CAAAlrE,SAAE4rE,IACxB3pB,eAAgBA,EAChBC,eAAgBA,EAChBC,WACExvC,eAACq4D,GAAgB,CAAAhrE,SACf2S,eAAC+yB,GAAK,CACJxL,SAAU+nB,EACVx6C,KAAK,iBACL+K,OAAQC,MAId0yB,SA/CN,SACE3oB,EACA6oB,GAOA,GALIA,IAAcvrC,GAChB4xE,EACED,EAAsBA,EAAsB,EAAIA,GAGhDpmC,IAAcvrC,EAAqB,CACrC,MAAM+xE,EAAeJ,EAAsB,EAC3CC,EACEG,GAAgBL,EAAQh+D,OAAS,EAAIg+D,EAAQh+D,OAAS,EAAIq+D,EAE9D,CACF,EAiCMzpB,WACEzvC,eAACs4D,GAAgB,CAAAjrE,SACf2S,eAAC+yB,GAAK,CACJxL,SAAUgoB,EACVz6C,KAAK,gBACL+K,OAAQC,MAIdD,OAAQC,IAId,OACEE,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SAChD4T,GACG,ECnIV,MAAMT,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAAVH,CAAU,6IAEZI,GAASA,EAAMy6D,UACnBz6D,GAAK,eAAAqB,OAAmBrB,EAAMC,MAAM2C,OAAO2a,IAAIC,aAQrD/a,GAAa7C,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAZH,CAAY,qDACpBI,GAASo4B,GAAYp4B,EAAMy6D,WAkCvBC,OAlBI//D,IAKL,IALM,YAClBggE,EAAW,WACXC,EAAU,UACV15D,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gBAC5B,OACEG,eAACQ,GAAS,CACRZ,UAAWA,EACXu5D,QAASE,EACT,cAAav5D,EAAWzS,SAExB2S,eAACmB,GAAU,CAACg4D,QAASE,EAAavkE,KAAMwkE,EAAYz5D,OAAQC,KAClD,EC7BT,MAAMy5D,GAA2BlgE,IAMX,IAADqlB,EAAA86C,EAAA,IANa,KACvCp9D,EAAI,MACJf,EAAK,mBACLmnB,EAAkB,mBAClBC,EAAkB,UAClBvX,GACM7R,EACN,OACqB,OAAlBopB,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBpB,mBACnBz0B,EAAqBE,eACZ,OAAToe,QAAS,IAATA,OAAS,EAATA,EAAW/V,WAAY7G,GAAaQ,OACpB,OAAlB2zB,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBpB,mBAAoBz0B,EAAqBC,cAK3C,OAAlB21B,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBnB,mBAClBn2B,EAAqBC,eACe,wBAAtCq3B,EAAmBb,eALZ,MAUc,OAAlBa,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBnB,mBACrBn2B,EAAqBE,iBACH,OAAlBo3B,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBb,kBAAmBtxB,MACrB,OAAlBmyB,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBnB,mBAClBn2B,EAAqBG,kBAEnB,OAALgQ,QAAK,IAALA,KAAQ,8BAII,OAAT6P,QAAS,IAATA,GAAe,QAANsuD,EAATtuD,EAAWhE,YAAI,IAAAsyD,OAAN,EAATA,EAAiBnrD,YAAYjW,KAAIic,GAAKA,EAAExsB,KAH/B,OAATqjB,QAAS,IAATA,GAAe,QAANwT,EAATxT,EAAWhE,YAAI,IAAAwX,OAAN,EAATA,EAAiBrQ,YACd4C,QAAOoD,GAAKA,EAAExsB,KAAOuU,EAAKvU,KAC1BuQ,KAAIic,GAAKA,EAAExsB,OACkC,EAAE,ECrBpD4xE,GAAkBn7D,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAVH,CAAU,+DAK5Bo7D,GAAkBp7D,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAVH,CAAU,uCAEjBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAGtD+/B,GAAclhC,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAbH,CAAa,wFAGdI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAO/oB,GAAE,WAAAQ,OAC9BrB,EAAM+pB,SAAW/pB,EAAMC,MAAM2C,OAAO2a,IAAIC,UAAY,iBAKpDy9C,GAAWr7D,aAAO86D,IAAW56D,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAlBH,CAAkB,iCAEtBI,GAAUA,EAAM3H,QAAU,EAAI,KAErCozB,GAAoB7rB,aAAOsrB,IAAYprB,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAnBH,CAAmB,0EACjCI,GAAK,eAAAqB,OAAmBrB,EAAMC,MAAM2C,OAAO4mB,UAI1CxpB,GAAUA,EAAM3H,QAAU,EAAI,KAGrCs4C,GAAU/wC,aAAOm6D,IAAaj6D,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAApBH,CAAoB,uBA6MrBs7D,OAjMMvgE,IAIP,IAJQ,UACpBuG,EAAS,OACTC,EAAS,SAAQ,kBACjBg6D,GAAoB,GACdxgE,EACN,MAAMgf,EAAQC,gBACR,UACJpN,EAAS,gBACToX,EAAe,mBACfE,EAAkB,mBAClBC,GACE5B,MACE,WAAEvF,GAAeP,KACjB3G,EAAalJ,EAAUhE,KACvB9K,EAAOiB,cAAapE,GAA6BiT,cAAIjT,EAAO,UAElE,IAAI6gE,EAMA,CACF19D,OACAf,MATYgC,cAAapE,GAA6BA,EAAMoC,QAU5D6P,aAEEmN,EAAM3M,OAAOwI,SAAWjpB,IAC1B6uE,EAA8B,IACzBA,EACHr3C,uBAGApK,EAAM3M,OAAOwI,SAAWjpB,IAC1B6uE,EAA8B,IACzBA,EACHt3C,mBAAoBA,IAGxB,MAAMu3C,EAAwBR,GAC5BO,GAKIE,IACFx3C,EAAmBnB,iBACiB,wBAAtCmB,EAAmBb,eACfs4C,EAAcv6B,GAAgB,yBAC9Bw6B,EAAwBx6B,GAAgB,2BAC9C,IAAKtrB,EAAY,OAAO,KACxB,MAAMhe,GACM,OAAVge,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,YAAYC,MAAK0Q,GAAKA,EAAEtS,QAAUxB,EAAU9U,iBACxD,OACI+jE,EACa,SAAjB/jE,EACI,EACAwa,oBACEwD,EAAW/F,aACVgG,GAAuCA,EAAExsB,KAAOuO,EAAavO,KAEhEuyE,EAAmBC,IACvB/3C,EAAgB,CACd,CAAChvB,GAAaO,eAAgBwmE,GAC9B,EAEE3B,EAAcyB,GAAwB,EAAIA,EAAuB,EAuCjEG,EAAgB1rD,GAASwF,EAAW/F,YAAajS,GAAMhE,KAC1DmW,IACC,MAAMgsD,EAAkBR,EAAsBrwD,SAAS6E,EAAE1mB,IACzD,OACEmY,eAAAqyB,YAAA,CAAAhlC,SACE2S,eAAC0sB,GAAO,CACNa,UAAU,SACVC,aACExtB,eAAC05D,GAAe,CAAArsE,SACbktE,EACGhsD,EAAEngB,KACF4rE,EACAC,EACAC,IAGRzsC,QACEztB,eAACw/B,GAAW,CACVnjB,QAAUxS,GAxDE2wD,EACxB3wD,EACAzN,KAEA,GAAI29D,EAAsBrwD,SAAStN,EAAKvU,IAAK,CAC3C,MAKM4yE,GALsBC,QACT,SAAjBtkE,GACEA,EAAavO,KAAOuU,EAAKvU,IACzBgyE,GACF9G,WAGE2H,QAAQt+D,GAAM22D,WAAa2H,QAAQt+D,EAAKvU,IAAIkrE,UAC1C4H,EAAaF,EAA0Br+D,EAAKvU,GAAG6/C,WAAa,OAElEpsB,EAAW,CACTzR,IACA/hB,MAAM,uBACN4oB,MAAM,WAAD3Q,OAAa46D,KAGpB9wD,EAAE0lB,iBACF6qC,EAAgBK,EAA0Br+D,EAAKsQ,MAAQ,OACzD,GAkCc8tD,CAAkB3wD,EAAG0E,GAGvBka,SACmB,SAAjBryB,GACAA,EAAavO,KAAO0mB,EAAE1mB,IACtB0yE,EACDltE,SAED2S,eAACmqB,GAAiB,CAChBf,QAAS7a,EAAEngB,KACXiS,IAAKkO,EAAEgd,YACP1rB,OAAM,iBAAAE,OAAmBwO,EAAE1mB,IAC3B,+BAAAkY,OAA8BwO,EAAE1mB,IAChCkP,QAASwjE,KAZNhsD,EAAE1mB,IAgBXgY,OAAM,iBAAAE,OAAmBkN,oBAAUsB,EAAEngB,UAEtC,IAKHwsE,EAAa,CACjB56D,eAAC0sB,GAAO,CACNa,UAAU,SACVC,aACExtB,eAAC05D,GAAe,CAAArsE,SACbwsE,IAAsBG,EACnB/rD,GAAoBmG,GACpB6lD,IAGRxsC,QACEztB,eAACw/B,GAAW,CACVnjB,QAASxS,GArEIA,KACfgwD,IACFv+C,EAAW,CACTzR,IACA/hB,MAAM,uBACN4oB,MAAM,4BAGR7G,EAAE0lB,iBACe,SAAjBn5B,GAA2BgkE,EAAgB,QAC7C,EA2DoBS,CAAYhxD,GAC1B4e,SAA2B,SAAjBryB,GAA2ByjE,EAErC,cAAY,qBAAoBxsE,SAEhC2S,eAAC25D,GAAQ,CACPN,YAAajlD,EAAWilD,YACxBC,WAAYllD,EAAWklD,WACvBz5D,OAAO,mBACP,cAAY,mBACZ9I,QAAS8iE,KARNzlD,EAAWgB,QAYpBvV,OAAM,GAAAE,OAAK9U,EAAsB,KAAA8U,OAAIkN,oBACnCgB,GAAoBmG,UAGrBkmD,GAGL,OACEt6D,eAACy5D,GAAe,CAAC75D,UAAW,iCAAiCvS,SAC3D2S,eAACqvC,GAAO,CACNqpB,YAAaA,EACbN,gBAAiBjX,cAAI,CAACyZ,EAAW//D,OAAQ29D,KACzCG,MAAOiC,KAEO,ECnQPvhE,OAAwD,IAAvD,KAAE+Q,EAAI,cAAE0wD,EAAa,kBAAEC,EAAiB,MAAEp8D,GAAOtF,EAC/D,MAAM2hE,EAAcr8D,EAAM2C,OAAOm0B,MAAM4F,WACjC,YAAE4/B,EAAW,WAAEC,GAAe9wD,EAEpC,IACI+wD,EADAl8B,EAAS,GAGb,IAAK3vB,kBAAQ2rD,GAAc,CACzB,MAAM5H,EAAS,CACb+H,OAAQ,SAAS7/C,GACfA,EAAMgU,iBACN,MAAM,OAAErC,GAAW3R,EACnBu/C,EAAc5tC,EAAOtR,SACvB,EACAy/C,SAAU,SAAS9/C,GACjBA,EAAMgU,iBACNurC,EAAc,KAChB,GAGIQ,EAAaJ,EAAW9iE,KAAI,CAACyS,EAAG0e,KAAW,IAADgyC,EAC9C,MAAO,CACL/W,EAAGj7B,EACH04B,GAAc,OAAXgZ,QAAW,IAAXA,GAA2B,QAAhBM,EAAXN,EAAW,GAAAl7D,OAAM8K,EAAE9R,eAAQ,IAAAwiE,OAAhB,EAAXA,EAA6BC,YAAa,KAC7C3/B,SAAUnmB,kBAAQ7K,EAAGkwD,GACtB,IAEGU,EAAWP,EAAW9iE,KAAI,CAACyS,EAAG0e,KAClC,MAAMviC,EAASklB,cAAI+uD,EAAY,GAADl7D,OAAK8K,EAAE9R,OAAS,CAAC,GAC/C,MAAO,CACLyrD,EAAGj7B,EAEH04B,EAAGzsB,mBAASxuC,EAAO00E,yBACf10E,EAAO00E,wBACP,KACJ7/B,SAAUnmB,kBAAQ7K,EAAGkwD,GACtB,IAGH97B,EAAS,CACP,CACE08B,kBAAkB,EAClBvtE,KAAM,wBACN4M,KAAM,SACNoP,KAAMkxD,EACNrc,MAAO,CACLoU,WAGJ,CACEsI,kBAAkB,EAClBvH,OAAQ,UACRhmE,KAAM,2BACNiT,MAAO25D,EAAYhhC,OAAOC,KAC1BD,OAAQ,CACNm5B,UAAW6H,EAAYhhC,OAAOC,KAC9B2rB,UAAWoV,EAAYhhC,OAAOC,MAEhCj/B,KAAM,OACN+lD,MAAO,EACP32C,KAAMqxD,EACNxc,MAAO,CACLoU,YAKN8H,EAAW/Z,cAAI,IAAIka,KAAeG,GAAUrjE,KAAI42C,GAAKA,EAAEiT,IACzD,CAEA,MAAO,CACLxsB,MAAO,CACL4+B,SAAU,KACVvrC,MAAO,CACLoZ,WAAYvjC,EAAMC,MAAMk0B,UAAU1kC,KAClC+zC,SAAU,KAGd74C,MAAO,CACLuvC,KAAM,IAERooB,MAAO,CACL,CACEoE,WAAY6V,EACZrV,UAAW,EACXC,kBAAmB,KACnBN,OAAQ,CACNvD,EAAG,GACH/f,WAAYvjC,EAAMC,MAAMk0B,UAAU1kC,KAClC0wD,UAAW,WACT,MAAM,GAAN/+C,OAAUlG,GAAgB,CACxBE,OAAQ,MACRC,UAAWgzB,KAAKtc,MAAM3X,QACtB,KAAAgH,OAAIlG,GAAgB,CACpBE,OAAQ,MACRC,UAAWgzB,KAAKtc,MAAMlY,MAE1B,GAEF2oD,KAAM,GACNC,IAAK,MAGTL,MAAO,CACL,CACEK,IAAK+Z,EACLnV,cAAe,EACf18D,MAAO,CACLuvC,KAAM,uBACN/P,MAAO,CACLoZ,WAAYvjC,EAAMC,MAAMC,QAAQzQ,KAChCq3D,WAAY9mD,EAAMC,MAAMC,QAAQI,QAAQkJ,KACxC9G,MAAO1C,EAAM2C,OAAO2a,IAAIC,aAI9B,CACEklC,IAAK+Z,EACLnV,cAAe,EACf18D,MAAO,CACLuvC,KAAM,2BACN/P,MAAO,CACLoZ,WAAYvjC,EAAMC,MAAMC,QAAQzQ,KAChCq3D,WAAY9mD,EAAMC,MAAMC,QAAQI,QAAQkJ,KACxC9G,MAAO1C,EAAM2C,OAAO2a,IAAIC,YAG5Bu5C,UAAU,IAGdrP,OAAQ,CACNH,MAAO,QACPlvD,SAAS,EACT6kE,aAAc,GACdC,UAAW,CACT35B,WAAYvjC,EAAMC,MAAMC,QAAQzQ,KAChCq3D,WAAY9mD,EAAMC,MAAMC,QAAQI,QAAQkJ,MAE1C2zD,OAAQ,aACRxZ,cAAe,SACfhhB,MAAO,EACPy6B,aAAc,EACdC,YAAa,EACbC,cAAe,EAEfC,aAAc,GAEhBr+B,QAAS,CACPs+B,QAAQ,EACRplE,SAAS,EACTD,SAAS,EACTE,gBAAiB,KACjBC,QAAQ,EACRC,YAAa,EACbC,aAAc,EACdC,SAAS,EACTwvD,WAAY,SAASC,EAAGC,EAAG7H,GACzB,OAAO6C,GAA2B,CAChCC,gBAAiB/0B,KAAK+5B,YAAYF,EAAGC,EAAG7H,GACxC+C,aAAcpmD,OAAOorD,SAEzB,EACAlI,UAAW,WACT,O9B1G2Bsd,E8B0GApvC,KAAKqvC,O9BzGhC,yFAANt8D,OAAgGlG,GAC9F,CACEE,OAAQ,MACRC,UAAWoiE,EAAU,GAAG5X,EAAEzrD,QAE7B,WAAAgH,OAAUlG,GAAgB,CACzBE,OAAQ,MACRC,UAAWoiE,EAAU,GAAG5X,EAAEhsD,MAC1B,6EAAAuH,OACAq8D,EAAU,GAAGna,EAAC,+GAAAliD,OAC8Fq8D,EAAU,GAAGna,EAAEgD,QAC3H,GACD,8BAbgCmX,K8B2G7B,GAEF/V,YAAa,CACXiW,KAAM,CACJC,cAAc,EACdviC,OAAQ,CACNw5B,OAAQ,UAEVhN,OAAQ,CACNv+B,MAAO,CACL2O,QAASj4B,EAAMqgC,OAAOC,OAAOrI,QAAQsI,KACrCqnB,UAAW,MACXiW,cAAe,GAEjBvS,SAAU,CACR3D,UAAW,CACTmW,SAAU,MAKlBl9C,OAAQ,CACNle,MAAO25D,EAAYz7C,OAAO0a,KAC1ByiC,eAAgB,KAChBC,cAAe,GACfnW,OAAQ,CACNv+B,MAAO,CACLlxB,SAAS,GAEXqkE,OAAQ,CACNjR,YAAa6Q,EAAYz7C,OAAO2a,OAChC74B,MAAO25D,EAAYz7C,OAAO0a,QAIhCgF,OAAQ,CACNy9B,eAAgB,KAChBzd,MAAO,CACLoU,OAAQ,CACN+H,OAAQ,WACNN,EAAc9tC,KAAKpR,SACrB,IAGJoe,OAAQ,CACNwsB,OAAQ,CACN4U,OAAQ,CACNjI,UAAW6H,EAAYhhC,OAAOC,KAC9B2rB,UAAWoV,EAAYhhC,OAAOE,YAMxC+E,SAEH,EC9KcgoB,qBA1Ce5tD,IAUvB,IAVwB,UAC7BuG,EAAS,KACTwK,EAAO,CAAC,EAAC,eACTi2C,GAAiB,EAAK,cACtBya,EAAgBA,SAEf,kBACDC,EAAiB,OACjBl7D,EAAS,SAAQ,MACjBlB,GACDtF,EACC,MAAMujE,EAAevtD,mBAAQ,KACpB,CACLjF,OACA0wD,gBACAC,oBACAp8D,WAED,CAACyL,EAAM0wD,EAAeC,EAAmBp8D,IAE5C,OACEqB,eAAC+/C,GAAK,CACJtqB,MAAO,CACLn5B,OAAQkkD,GAAeoc,GACvB/0E,GAAI,mBACJw4D,kBAEFzgD,UAAWA,EACXC,OAAM,GAAAE,OAAKF,EAAM,sBACjB,ICpCN,MAAMW,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAVH,CAAU,qCAyCbu+D,OA5BkBxjE,IAKnB,IALoB,SAChChM,EAAQ,UACRuS,EAAS,aACTk9D,EAAY,OACZj9D,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gCACtBk9D,EAAep5C,iBAAuB,OACrCq5C,EAAYC,GAAiBjtD,oBAAS,GAQ7C,OAPAI,qBAAU,KACJ4sD,GAAuC,OAAzBD,EAAarlE,UAC7BqlE,EAAarlE,QAAQwlE,UAAY,EACjCD,GAAc,GAChB,GACC,CAACH,IAGF98D,eAACQ,GAAS,CACRktB,IAAKqvC,EACLI,SAAUA,IAAMF,GAAc,GAC9Br9D,UAAWA,EACX,cAAaE,EAAWzS,SAEvBA,GACS,ECxBhB,MAAMmT,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAVH,CAAU,gCACXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAE9CgvE,GAAc9+D,aAAOylC,IAAMvlC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAAbH,CAAa,uCAO3BS,GAAeT,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAbH,CAAa,6HAEfI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAO/oB,GAAE,WAAAQ,OAAUrB,EAAMC,MAAM2C,OAAO4mB,UAM3DqX,GAAejhC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAVH,CAAU,sBA6LhB++D,OAzLOhkE,IAMf,IANgB,UACrBuG,EAAS,KACTymC,EAAO,GAAE,kBACT00B,EAAiB,OACjBl7D,EAAS,YACNO,GACJ/G,EACC,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,oBAE5B,IAAIqkC,EAAU,CACZ,CACEmI,SAAU,YACV7vB,OAAQ,aACR8vB,KAAMxyC,IAAA,IAAC,KAAEksC,GAAMlsC,EAAA,OACbkG,eAACkjC,GAAI,CACHnpC,OAAO,MACPC,UAAWgsC,EAAKF,IAAI0G,SAAS8wB,UAC7Bz9D,OAAQC,GACR,EAEJmR,OAAQA,CAAC4zB,EAAMh9C,EAAI01E,IACjB14B,EAAK5zB,QAAO60B,GAAOA,EAAIn1B,OAAO9oB,KAAQ01E,IACxC39D,UAAW,aAEb,CACEysC,SAAU,UACV7vB,OAAQ,QACR8vB,KAAMt+B,IAAe,IAAd,KAAEg4B,GAAMh4B,EACTgQ,EAAesN,mBAAS0a,EAAKt1B,MAAO,CACtC7V,OjF3C8B,KiF6ChC,MAAM2iE,EAAmBx3B,EAAKt1B,MAAM7V,OjF7CJ,GiFiEhC,OAlBAmjB,EACEhe,eAAA,QAAM,wBAAsB,OAAM3S,SAC/B24C,EAAKF,IAAI0G,SAASixB,MACjBz9D,eAAA,KACE,iBAAAD,OAAgBD,EAAU,KAAAC,OAAIkN,oBAAU+4B,EAAKt1B,QAC7C5U,KAAMkqC,EAAKF,IAAI0G,SAASixB,MACxBhxB,IAAI,sBACJvf,OAAO,SACP,8BAA4B,OAAM7/B,SAEjC2wB,IAGHhe,eAAA,QAAA3S,SAAO2wB,MAKNw/C,EACLx9D,eAAC0sB,GAAO,CACNa,UAAU,MACVC,aAAcxtB,eAACu/B,GAAY,CAAAlyC,SAAE24C,EAAKt1B,QAClC7Q,OAAQA,EACR4tB,QAASzP,IAGXA,CACD,EAEHpe,UAAW,SAEb,CACEysC,SAAU,SACV7vB,OAAQ,SACR8vB,KAAM5+B,IAAA,IAAC,KAAEs4B,GAAMt4B,EAAA,OACb1N,eAAA,QAAM,wBAAsB,OAAM3S,SAChC2S,eAACo/B,GAAQ,CACPC,SAAQ,GAAAt/B,OAAKimC,EAAKF,IAAI0G,SAASkxB,SAAQ,aAAA39D,OAAYimC,EAAKF,IAAI0G,SAASmxB,YACrE99D,OAAQC,KAEL,EAETF,UAAW,UAEb,CACEysC,SAAU,aACV7vB,OAAQ,SACR8vB,KAAMl7B,IAAA,IAAC,KAAE40B,GAAM50B,EAAA,OACbpR,eAAA,QAAM,wBAAsB,OAAM3S,SAAE24C,EAAKt1B,OAAa,EAExD9Q,UAAW,cAEb,CACEysC,SAAU,YACV7vB,OAAQ,YACR8vB,KAAMp6B,IAAA,IAAC,KAAE8zB,GAAM9zB,EAAA,OACblS,eAAA,QAAM,wBAAsB,OAAM3S,SAC/B6jB,iBAAO80B,EAAKF,IAAI0G,SAASoxB,eACtB,GACA53B,EAAKF,IAAI0G,SAASoxB,cAAcp0C,KAAK,OACpC,EAET5pB,UAAW,aAEb,CACEysC,SAAU,kBACV7vB,OAAQ,cACR5c,UAAW,aACX0sC,KAAM35B,IAAA,IAAC,KAAEqzB,GAAMrzB,EAAA,OACbwH,gBAAM6rB,EAAKt1B,OAAS,KAClBzQ,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACG24C,EAAKt1B,MAAMu0C,QAAQ,GAAG,IAAiB,IAAfjf,EAAKt1B,MAAc,KAAO,QAEtD,GAEL,CACE27B,SAAU,aACV7vB,OAAQ,OACR8vB,KAAMxsB,IAAe,IAAd,KAAEkmB,GAAMlmB,EACb,OACE9f,eAAA,QAAM,wBAAsB,OAAM3S,SAC/B24C,EAAKF,IAAI0G,SAASqxB,cACjB79D,eAAA,KACElE,KAAMkqC,EAAKF,IAAI0G,SAASqxB,cACxB3wC,OAAO,SACPuf,IAAI,sBACJ,8BAA4B,OAAMp/C,SAEjC24C,EAAKt1B,QAGR1Q,eAAA,QAAA3S,SAAO24C,EAAKt1B,SAET,EAGX9Q,UAAW,eAKf,MAAMwK,EAAO4hB,iBACXqa,EAAKjuC,KAAIkvC,IAAC,IACLA,EACHipB,UAAWr/C,iBAAOo2B,EAAEs2B,eAAiB,GAAKt2B,EAAEs2B,cAAcp0C,KAAK,UAEjE,CAAC,cAGH,OACExpB,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACtDiiB,kBAAQ+2B,GACPrmC,eAACN,GAAU,CACTC,KACEM,gBAAA,QAAA5S,SAAA,CAAM,uDACkD,IACtD2S,eAAA,KAAGlE,KAAK,iCAAgCzO,SAAC,eAAc,0DAI3D2R,OAAO,SACPa,OAAQC,IAGVG,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACjB,GAAY,CAAA1R,SACX2S,eAAA,OAAA3S,SAAK,UAEP2S,eAAC68D,GAAwB,CAACC,aAAc1yD,EAAKvP,OAAOxN,SAClD2S,eAACo9D,GAAW,CACVn5B,QAAQ,aACRC,QAASA,EACT95B,KAAMA,EACNvK,OAAQA,UAKN,EChNT,MCYMi+D,GAAiBA,CAC5BC,EACAtyD,EACAE,EACAvP,EACAiS,EACAnW,EACA0b,KAEA,MAAOxJ,EAAM4zD,GAAYhuD,mBAAS,KAG3BiuD,GAAoBjuD,mBACzBvX,GACEC,KAAO,IAAIG,MACRyB,QAAQlT,GAAgBe,OACxBgS,SAAS+jE,GAAkC92E,GAAgBe,UAK3Dg2E,GAAqBnuD,mBAC1BygC,gBnFVwC,ImFUJxD,IAC3B,CACLl0C,MAAOL,KAAOulE,GACXG,IAAInxB,EAAG7lD,GAAgBe,OACvBgR,cACHX,IAAKE,KAAOulE,GACTG,IAAInxB,EAAG7lD,GAAgBe,OACvBoS,MAAMnT,GAAgBe,OACtBgR,mBAIH+hE,EAAa7rD,mBAAQ,IAChBuE,E1LwByCyqD,EAACzqD,EAAW1b,KAChE,IAAIomE,EAAa,GACXpmE,GAAS0b,EAAU7qB,gBAAkBf,EAAeI,UACxDk2E,EAAarmE,GAA4BC,GAAO+Y,QAC9C1C,GAAKA,EAAExV,OAAS6a,EAAU7a,QAE5BulE,EAAWxvB,OARe,IAU5B,MAAMyvB,EAAkBA,CAACC,EAAIC,IAAOD,EAAGzlE,MAAMgW,cAAc0vD,EAAG1lE,OACxD2lE,EAAiBJ,EAAWzjE,OAC9BnC,KAAO4lE,EAAW/oE,KAAKgpE,GAAiB,GAAGxlE,OAAOoB,SAChD,EACA/S,GAAgBc,MAElBwQ,KAAOkb,EAAUpb,KAAK4lE,IAAI,EAAGh3E,GAAgBc,MAC3Cy2E,EAjBsB,EAiBoBL,EAAWzjE,OAC3D,IAAK,IAAIoyC,EAAI,EAAGA,EAAI0xB,EAAiB1xB,IAKnCqxB,EAAW/7C,KAAK,CACdxpB,MAAOL,KAAOgmE,GACXvkE,SAAS,EAAI,EAAI8yC,EAAG7lD,GAAgBe,OACpCgR,cACHX,IAAKE,KAAOgmE,GACTvkE,SAAS,EAAI8yC,EAAG7lD,GAAgBe,OAChCgR,gBAIP,OAAOmlE,EAAW/oE,KAAKgpE,EAAgB,E0LtDjCF,CAAuCzqD,EAAW1b,GAClDimE,GACH,CAACjmE,EAAO0b,EAAWuqD,KACf9d,EAAgBue,GAAsB5uD,mBAAS,OAC/C3F,EAAOw0D,GAAa7uD,mBAAS,MAC9B8uD,EAAezvD,mBAAQ,KACpB,CACL5D,cACAkE,QAASurD,EACN9iE,KAAIyuD,GAAKA,EAAEruD,MACXjD,OACA02B,UAAU,GACbvc,UAAWwrD,EAAW9iE,KAAIyuD,GAAKA,EAAE9tD,QAAOxD,OAAO,GAC/CoW,WACAvP,OACAlG,MAAkB,OAAXmY,QAAW,IAAXA,OAAW,EAAXA,EAAajW,KAAImW,GAAKA,EAAE7B,WAEhC,CAACjB,EAAarP,EAAMuP,EAAU0C,EAAa6sD,IAsC9C,OAnCA9qD,qBAAU,KACR,WACE,GAAI2tD,EACFa,GAAmB,GACnBZ,EAASD,QAET,IACE,IAAK1zD,EAAO,CACVu0D,GAAmB,GACnB,MAAMG,OD7Ec/gE,WAA8C,IAAvC,YAAEyN,EAAW,OAAEC,EAAM,SAAEC,GAAUtS,EACtE,MACI,UAAWqS,GACX,cAAeA,GACf,YAAaA,GACd6U,MAAMvM,QAAQtI,EAAOxV,cAQDoU,GAAIwD,KAAK,IAAD/N,OAAK4L,EAAQ,cAAcD,EAAQ,CAChEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,KATPN,aAAiB,wIAAD/J,OACmH8U,KAAKC,UAC3IpJ,IAOc,EC6DiBszD,CAAiB,CAC1CvzD,YAAaqzD,EAAarzD,YAC1BE,SAAUmzD,EAAanzD,SACvBD,OAAQ,CACNC,SAAUmzD,EAAanzD,SACvB+D,UAAWovD,EAAapvD,UACxBC,QAASmvD,EAAanvD,QACtBzZ,MAAO4oE,EAAa5oE,SAGlBgiE,ECxFH,EAAC9tD,EAAM8wD,KACpB,MAAMD,EAAc9lE,kBAClBiV,EAAKy6B,MACLmK,IAAC,IAAAiwB,EAAA,OACoE,QADpEA,EACC/D,EAAW5sD,MAAKu4C,GAAKA,EAAE9tD,OAASi2C,EAAEsuB,WAAazW,EAAEruD,IAAMw2C,EAAEsuB,mBAAU,IAAA2B,OAAA,EAAnEA,EAAqElmE,KAAK,IAE9E,MAAO,IACFqR,EACH6wD,YAAa1kD,oBAAU0kD,GAAa3/B,IAClC,MAAM4jC,EAAS5jC,EAAI/lC,MAAK,CAACm+D,EAAIC,KAC1BD,EAAG4J,WAAa,IAAIvuD,cAAc4kD,EAAG2J,aAElC6B,EAAoB7jC,EACvBljC,KAAIuQ,GAAMA,EAAGy2D,kBACbnuD,QAAO+N,KAAOA,IACdzpB,MAAK,CAACic,EAAGgB,IAAMhB,EAAIgB,IAEhBsiB,EAAc3B,KAAKY,MAAMorC,EAAkBtkE,OAAS,GAS1D,MAAO,CACL6gE,wBAT6ByD,EAAkBtkE,OAE7CskE,EAAkBtkE,OAAS,IAAM,GAChCskE,EAAkBrqC,EAAc,GAC/BqqC,EAAkBrqC,IACpB,EACAqqC,EAAkBrqC,GALlB,EASF0mC,UAAWlgC,EAAIzgC,OACfygC,IAAK4jC,EACN,IAEHhE,aAEH,EDsD8BmE,CAAUN,EAAc7D,GAC3C8C,EAAS9F,GACT0G,GAAmB,EACrB,CACF,CAAE,MAAO/0D,GACPg1D,EAAUh1D,GACV+0D,GAAmB,GACnBU,cAAUC,IACRA,EAAM1gB,WAAW,qBAAsBigB,GACvCh1D,aAAiBD,EAAE,GAEvB,CAEH,EA/BD,EA+BI,GACH,CAACk0D,EAAa7C,EAAY4D,EAAcz0D,IAEpC,CAACD,EAAMi2C,EAAgBh2C,EAAM,EEtGzBm1D,GAAc,CAEzB,QAEA,OAEA,cACA,iBACA,wBACA,6BAEA,YAEA,mBAEA,OAEA,KAEA,YACA,kBAkBWC,GAAkBD,GAAYz4E,QACzC,CAAC0Q,EAAKC,KAAO,IACRD,EACH,CAACE,oBAAUD,GAASE,eAAgBF,KAEtC,CAAC,GC/BGiJ,GAAiBrC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAAVH,CAAU,sIAOXI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAEhDo1C,GAASphE,KAAO4sD,OAAM1sD,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAbH,CAAa,oCAqGbqhE,OAhGetmE,IAAsC,IAArC,OAAEwG,EAAS,YAAanB,GAAOrF,EAC5D,MAAM,UACJuG,EAAS,YACT6L,EAAW,SACXE,EAAQ,YACRoyD,EAAW,KACX3hE,EAAI,YACJiS,EAAW,MACXnW,EAAK,UACL0b,GACElV,EACEoB,EAAU,GAAAC,OAAMF,EAAM,8BACrBk7D,EAAmB6E,GAAwB5vD,sBAC3C6vD,EAAexf,EAAgBh2C,GAASyzD,GAC7CC,EACAtyD,EACAE,EACAvP,EACAiS,EACAnW,EACA0b,GAGF,GAAIvJ,EACF,OAAO,KAKT,GAAI6G,iBAAOmvC,IAAmBA,EAC5B,OACErgD,eAACW,GAAc,CAAAtT,SACb2S,eAACG,GAAO,CAACN,OAAQA,MAKvB,MAAMigE,EAAcxwD,kBAAQuwD,EAAch7B,MAE1C,IAAIk7B,EAAS,GACRD,IACHC,EAAShF,EACL8E,EAAc5E,YAAYF,EAAkBhiE,OAAOuiC,IACnDrb,kBAAQzW,OAAOmH,OAAOkvD,EAAc5E,aAAa7iE,KAAIyS,GAAKA,EAAEywB,QAKlE,MAAM0kC,EACJ5jE,EAAK+Q,cAAczD,SAAS+1D,GAAgBQ,YAC5C7jE,EAAK+Q,cAAczD,SAAS+1D,GAAgBS,gBACxC,YACA,oBAEN,OACElgE,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SAChDyyE,EACC9/D,eAACN,GAAU,CACTC,KAAMqgE,EAAejgE,OAAO,kCAC5Bf,OAAO,QACPa,OAAQA,IAGVI,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE4S,gBAACy/D,GAAM,CAAAryE,SAAA,CACL2S,eAACmgE,GAAc,CACb/1D,KAAMy1D,EACNxf,eAAgBA,EAChBya,cAAe8E,EACf7E,kBAAmBA,EACnBl7D,OAAQC,IAEVE,eAAA,cAAYJ,UAAU,iBAAgBvS,SAAC,wBAGzC2S,eAACq9D,GAAa,CACZh3B,KAAM05B,EACNhF,kBAAmBA,EACnBl7D,OAAQC,QAIV,ECjGV,MAAM0mC,GAAOloC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAATH,CAAS,qHAOhBmoC,GAAWnoC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAATH,CAAS,6IAKXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAIlDu1C,GAAQ9hE,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAXH,CAAW,gCACRI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAiDvCiyE,OAvCgBhnE,IAIjB,IAJkB,UAC9BuG,EAAS,WACTqd,EAAU,OACVpd,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,6BAE5B,OACEG,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACwmC,GAAI,CAAAn5C,SACF,CACCzC,EAA0BE,MAC1BF,EAA0BI,SAC1BJ,EAA0BC,IAC1BD,EAA0BG,IAC1BqN,KAAKilB,IACL,MAAMD,EAAWH,EAAW3O,MAC1BkD,GAAK7Z,oBAAU6Z,EAAE6L,cAAczlB,gBAAkBylB,IAEnD,OACErd,eAACymC,GAAQ,CAAAp5C,SACN6T,sBAAYkc,GAAY,KACvBnd,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACmjC,GAAgB,CACfnoC,KAAMrD,oBAAUylB,EAASC,cAAczlB,cACvCiI,OAAQC,IAEVE,eAACogE,GAAK,CAAA/yE,SAAE+vB,EAASS,QACjB7d,eAAC4oC,GAAW,CAAC7O,YAAa3c,EAAS2c,kBAR1B1c,EAWJ,OAIb,EC7EK,OAA0B,oCCezC,MAAM7c,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAVH,CAAU,qBAGtBgiE,GAAmBhiE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAAVH,CAAU,2BACbI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAEhDi2C,GAAmBjiE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAAVH,CAAU,yKACTkiE,IASpB9tB,GAASp0C,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAATH,CAAS,6GACPI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAMhDqyE,GAAWniE,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAATH,CAAS,6KACTI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAErCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAOtD+sB,GAAgBjuB,aAAOouB,IAAQluB,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAfH,CAAe,oBAG/BihC,GAAejhC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAVH,CAAU,gEA4FhBoiE,OA/EUrnE,IAIX,IAJY,UACxBuG,EAAS,SACTyN,EAAQ,OACRxN,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,uBAGtB8gE,EAAiBh9C,iBAA2B,OAG3Ci9C,EAAaC,GAAY7wD,oBAAS,GAGnC8wD,EAAcA,KAAO,IAADC,EAAAC,EAAAC,EAAAC,EACxB,MAAMC,IACU,OAAdR,QAAc,IAAdA,MAAgBjpE,SAAyB,OAAdipE,QAAc,IAAdA,GAAuB,QAATI,EAAdJ,EAAgBjpE,eAAO,IAAAqpE,IAAvBA,EAAyBK,iBAC1B,QAAtBJ,EAAAL,EAAejpE,eAAO,IAAAspE,OAAA,EAAtBA,EAAwBK,eACF,QADaJ,EACnCN,EAAejpE,eAAO,IAAAupE,GAAe,QAAfC,EAAtBD,EAAwBG,qBAAa,IAAAF,OAAf,EAAtBA,EAAuCG,aAE7CR,EAASM,EAAQ,EAInB/wD,qBAAU,KACR0wD,IACAllE,OAAO0lE,iBAAiB,SAAUR,EAAY,GAC7C,IAGH1wD,qBACE,IAAM,KACJxU,OAAO2lE,oBAAoB,SAAUT,EAAY,GAEnD,IAGF,MAAM,eAAEU,EAAc,UAAExvD,EAAS,SAAED,GAAa1E,EAE1Co0D,EACJzhE,eAACygE,GAAQ,CACP/yC,IAAKizC,EACL,iBAAA5gE,OAAgBD,EAAU,uBAAsBzS,SAE/C0kB,IAAa3oB,EAAsBH,EAAcE,cAAcE,WAC5DD,EAAsBH,EAAcE,cAAcG,MAClDyoB,IAAa3oB,EAAsBH,EAAcC,SAASG,WAC1DD,EAAsBH,EAAcC,SAASI,MAC7C0oB,IAIR,OACEhS,eAACQ,GAAS,CACRZ,UAAWA,EACX,cAAaE,EACb,wBAAsB,OAAMzS,SAE5B2S,eAACsgE,GAAgB,CAAAjzE,SACf2S,eAACugE,GAAgB,CAAAlzE,SACf4S,gBAAA,OAAA5S,SAAA,CACGm0E,GAAkBxhE,eAAC0yC,GAAM,CAAArlD,SAAEm0E,IAC3BZ,EACC5gE,eAACusB,GAAa,CACZgB,UAAU,MACVC,aAAcxtB,eAACu/B,GAAY,CAAAlyC,SAAE2kB,IAC7BnS,OAAQC,EACR2tB,QAASg0C,IAGXA,UAKE,ECvHhB,MAAM3gC,GAAOxiC,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,gBAAjBH,CAAiB,gEAGjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAMvC1b,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAVH,CAAU,6GACZI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QACpC5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG9C7rB,GAASA,EAAMC,MAAM05B,YAAYnB,KAE3Bx4B,GAAK,oBAAAqB,OACRrB,EAAMC,MAAM+/B,KAAKC,YAAW,OAAA5+B,OAAMrB,EAAMC,MAAM+/B,KAAKE,IAAG,qCAAA7+B,OACvDrB,EAAMC,MAAM+/B,KAAKC,YAAW,OAAA5+B,OAAMrB,EAAMC,MAAM+/B,KAAKE,IAAG,QAAA7+B,OAAOrB,EAAMC,MAAM+/B,KAAKC,YAAW,mCAK5G+iC,GAAkBpjE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAVH,CAAU,0HAMXI,GAASA,EAAMC,MAAM05B,YAAYjB,MAIlDuqC,GAAiBrjE,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAbH,CAAa,8IACnBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAEnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAIrC9/B,GAASA,EAAMC,MAAM05B,YAAYnB,KAIlDma,GAAoB/yC,aAAOojE,IAAgBljE,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAvBH,CAAuB,kGACjCI,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAE9C7rB,GAASA,EAAMC,MAAM05B,YAAYnB,KACpCx4B,GAAK,GAAAqB,OAChBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAKjEq3C,GAAgBtjE,aAAOojE,IAAgBljE,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAAvBH,CAAuB,+CACtBI,GAASA,EAAMC,MAAM05B,YAAYnB,KACpCx4B,GAAK,GAAAqB,OAChBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QA6DxDs3C,OAlDMxoE,IAAwD,IAAvD,UAAEuG,EAAS,SAAEyN,EAAQ,OAAExN,EAAS,UAAiBxG,EACrE,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mBACtB,QAAE4R,EAAO,SAAEM,GAAa1E,GACxB,oBAAE0U,GAAwBlB,KAC1BihD,EAAY//C,EAAoB,CACpCtQ,QACEM,IAAa3oB,EAAsBH,EAAcE,cAAcE,WAC3DJ,EAAcE,aACd4oB,IAAa3oB,EAAsBH,EAAcC,SAASG,WAC1DJ,EAAcC,QACduoB,IAGR,OACEzR,eAAC8gC,GAAI,CACHlhC,UAAWA,EACXxR,KAAK,0BACLq4B,GAAIq7C,EACJjiE,OAAQC,EAAWzS,SAEnB4S,gBAACO,GAAS,CAAC,cAAaV,EAAWzS,SAAA,CACjC2S,eAAC0gE,GAAgB,CAACrzD,SAAUA,EAAUxN,OAAQC,IAC9CG,gBAACoxC,GAAiB,CAAAhkD,SAAA,CAChB2S,eAAC2hE,GAAc,CAAAt0E,SAAC,eAChB2S,eAACqgE,GAAsB,CACrBpjD,WAAY5P,EAAS4P,WACrBpd,OAAQC,OAGZG,gBAAC2hE,GAAa,CAAAv0E,SAAA,CACZ2S,eAAC2hE,GAAc,CAAAt0E,SAAC,WAChB2S,eAACgnC,GAAoB,CACnBX,KAAMh5B,EAASsT,OACfsmB,cAAe,EACfpnC,OAAQC,OAGZG,gBAACyhE,GAAe,CAAAr0E,SAAA,CACd2S,eAAC2hE,GAAc,CAAAt0E,SAAC,iBAChB2S,eAACgnC,GAAoB,CACnBX,KAAMh5B,EAAS00D,cACf96B,cAAe,EACfpnC,OAAQC,WAIT,EC7HX,MAAMkiE,GAAa1jE,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAbH,CAAa,qFACfI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAEnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAGtDyjC,GAAa3jE,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAATH,CAAS,6IAGLI,GAASA,EAAMC,MAAM05B,YAAYnB,KAG3Bx4B,GAAK,oBAAAqB,OACRrB,EAAMC,MAAM+/B,KAAKC,YAAW,OAAA5+B,OAAMrB,EAAMC,MAAM+/B,KAAKE,IAAG,qCAAA7+B,OACvDrB,EAAMC,MAAM+/B,KAAKC,YAAW,OAAA5+B,OAAMrB,EAAMC,MAAM+/B,KAAKE,IAAG,QAAA7+B,OAAOrB,EAAMC,MAAM+/B,KAAKC,YAAW,mCAO5GujC,GAAY5jE,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAATH,CAAS,wGAKJI,GAASA,EAAMC,MAAM05B,YAAYnB,KAIlDirC,GAAW7jE,aAAOujE,IAAarjE,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAApBH,CAAoB,+BA4CtB8jE,OA/Be/oE,IAIW,IAJV,UAC7BuG,EAAS,KACTymC,EAAI,OACJxmC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,6BAC5B,OAASwmC,EAAKxrC,OACZoF,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD2S,eAACgiE,GAAU,CAAA30E,SACT4S,gBAACgiE,GAAU,CAAA50E,SAAA,CACT2S,eAACkiE,GAAS,CAAA70E,SACR2S,eAAA,QAAMJ,UAAU,iBAAgBvS,SAAC,WAEnC2S,eAACkiE,GAAS,CAAA70E,SAAC,aACX2S,eAACkiE,GAAS,CAAA70E,SAAC,WACX2S,eAACkiE,GAAS,CAAA70E,SAAC,sBAGf2S,eAAA,OAAA3S,SACGg5C,EAAKjuC,KAAIyR,GACR7J,eAACmiE,GAAQ,CAEP90D,SAAUxD,EACVhK,OAAQC,GAAW,GAAAC,OAFXkN,oBAAUpD,EAAEmI,WAAU,KAAAjS,OAAI8J,EAAE4H,iBAO1C,IAAI,EC5DV,MAAMjR,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,gBAAVH,CAAU,uBAGtB0jE,GAAa1jE,KAAO2pC,GAAEzpC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAATH,CAAS,kFACXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAGnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAEtD6iE,GAAkB/jE,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAXH,CAAW,iEAClBI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAElCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAErDojE,GAAahkE,aAAO8jE,IAAsB5jE,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAA7BH,CAA6B,yBAG1Cy1C,GAA2Bz1C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAVH,CAAU,sBA4E5BikE,OAjEUlpE,IAIX,IAJY,UACxBuG,EAAS,OACTC,EAAS,SAAQ,cACjBu3C,GACM/9C,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gBACtB,gBAAEyiB,EAAe,UAAEpX,GAAc2V,KACjC1rB,EAAmB,OAAT+V,QAAS,IAATA,OAAS,EAATA,EAAW/V,QAS3B,MAAOqtE,EAAYC,GAAiB5wD,qBACrB,OAAbulC,QAAa,IAAbA,OAAa,EAAbA,EAAesrB,eAAgB,IAC/B74D,GAAKA,EAAE4H,UAAYC,OAGrB,OAAQ8wD,EAAW3nE,QAAW4nE,EAAc5nE,OAO1CmF,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD4S,gBAACS,GAAiB,CAACb,OAAQC,EAAWzS,SAAA,CACjCm1E,EAAW3nE,OACZoF,gBAAA,OAAA5S,SAAA,CACE2S,eAACgiE,GAAU,CAAA30E,SACT2S,eAACqiE,GAAe,CAAAh1E,SAAC,8BAEnB2S,eAACsiE,GAAU,CAACj8B,KAAMm8B,EAAY3iE,OAAQC,OAEtC,KACD2iE,EAAc5nE,OACfoF,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE4S,gBAAC+hE,GAAU,CAAA30E,SAAA,CACT2S,eAACqiE,GAAe,CAAAh1E,SAAA,WAAA0S,OACF61B,qBACVzgC,IAAY7G,GAAaQ,KAAO,SAAWqG,MAE5B,IAAI,IACrBstE,EAAc5nE,OAAO,eAEzBmF,eAACoiE,GAAqB,CAAC/7B,KAAMo8B,EAAe5iE,OAAQC,IACpDE,eAAC+zC,GAAwB,CAAA1mD,SACvB2S,eAACkwC,GAAiB,CAChBC,YAA0B,OAAbiH,QAAa,IAAbA,OAAa,EAAbA,EAAe/hD,KAC5Bg7C,UAAwB,OAAb+G,QAAa,IAAbA,OAAa,EAAbA,EAAe/G,UAC1BjiD,KAAK,wBACLokC,SA7Cd,SAAqB14B,GAA4C,IAA3C,YAAE+2C,GAAsC/2C,EAC5DwoB,EAAgB,CACd,CAAChvB,GAAaE,aAAc,CAAE,CAACF,GAAaZ,MAAOm+C,KAErDj1C,OAAO+4C,OAAO,CAAEC,IAAK,EAAGC,KAAM,EAAGC,SAAU,UAC7C,EAyCcj1C,OAAQC,SAIZ,UArCRE,eAACN,GAAU,CACTC,KAAK,+DACLX,OAAO,QACPa,OAAQA,GAqCX,E,6BCzGH,MAAMkzB,GAAQz0B,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAZH,CAAY,gBACfI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAc5Bk4C,I,GAAAA,GAXWjkE,GAEtBsB,eAAC4iE,KAAWD,kBAAiB,IAAKjkE,EAAKrR,SACrC2S,eAAC+yB,GAAK,CACJj+B,KAAM4J,EAAMmkE,UAAY,WAAa,aACrChjE,OAAO,yBCNf,MAAMijE,GAAiBxkE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAVH,CAAU,SAC7BI,IACA,GAAIA,EAAMqkE,gBACR,OAAOv7C,aAAGC,QAAAC,aAAA,uEAIZ,IAGEs7C,GAAc1kE,KAAOxW,MAAK0W,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAAZH,CAAY,iDACfI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAClCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAErD+jE,GAAgB3kE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAVH,CAAU,gCAwJjB2oD,qBAxHE5tD,IAwBH,IAxBI,SAChBwvB,GAAW,EAAK,UAChBjpB,EAAS,WACTgjE,EAAa,CAAED,sBAAmB,aAClCltD,EAAY,kBACZytD,EAAoB94D,IAAQA,EAAKtiB,OAAK,YACtCq7E,GAAc,EAAK,YACnBC,GAAc,EAAK,QACnBC,GAAU,EAAK,aACfC,GAAe,EAAI,MACnBx7E,EAAK,cACLy7E,EAAgB,IAAG,cACnBC,EAAgB,SAAQ,aACxBC,EAAe,WAAU,SACzBjxC,EAAYqJ,IAAqC,MAAI,cACrD6nC,EAAiB7nC,IAA4C,MAAI,eACjE8nC,EAAc,QACd10D,EAAO,YACP20D,EAAW,gBACXb,GAAkB,EAAK,OACvBljE,EAAS,SAAQ,MACjBlB,EAAK,MACL+R,EAAK,OACLmzD,EAAS,CAAC,GACJxqE,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,aACtBikE,EAAkBV,EAAcW,KAAkBC,KA2ClDC,EAAiB,IAzCF,CACnBvhC,QAAUwhC,IAAiC,IACtCA,EACHh8C,OAAQW,EAAQ,GAAA9oB,OACTpB,EAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUpB,EAAM2C,OAAO2a,IAAIsO,MACrD,EACJpzB,aAAc,EACdyqC,UAAW,OACXJ,QAAS,MAEX2iC,mBAAoBA,KAAA,CAAS,GAC7BC,KAAOF,IAAiC,IACnCA,EACHtiC,UAAW,EACX1Z,OAAO,GAADnoB,OAAKpB,EAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUpB,EAAM2C,OAAO2a,IAAIsO,MAC7DpzB,aAAc,EACdqqC,QAAS,IAEX5F,OAAQA,CACNsoC,EACAnuE,KAAqD,IAElDmuE,EACH1nC,WAAYzmC,EAAO44B,WACfhwB,EAAM2C,OAAO2a,IAAIob,WACjBthC,EAAO8sE,UACPlkE,EAAM2C,OAAOo6B,SAASE,OAAO3T,MAC7B,cACJ5mB,MAAO1C,EAAM2C,OAAO2a,IAAIC,YAE1BmoD,YAAcH,IAAiC,IAC1CA,EACH7iE,MAAO1C,EAAM2C,OAAOo6B,SAAS7C,OAE/ByrC,eAAiBJ,IACR,IACFA,EACHK,WAAY,mBAI2BV,GAE7C,OACE5jE,gBAAC6iE,GAAc,CACbC,gBAAiBA,EACjBnjE,UAAWA,EACX,cAAaE,EAAWzS,SAAA,CAExB2S,eAACgjE,GAAW,CACVpjE,UAAWmjE,EAAkB,GAAK,iBAClC/sB,QAASl2C,EAAWzS,SAEnBvF,IAEHkY,eAACijE,GAAa,CAAA51E,SACZ2S,eAAC8jE,EAAe,CACdU,mBAAmB,EACnB5B,WAAYA,EACZntD,aAAcA,EACdytD,kBAAmBA,EACnBuB,kBAAoB/zD,GAAa,OAAA3Q,OAAY2Q,GAC7C7oB,GAAIiY,EACJqjE,YAAaA,EACbE,QAASA,EACTC,aAAcA,EACdC,cAAeA,EACfC,cAAeA,EACfC,aAAcA,EACdr1E,KAAM0R,EACN0yB,SACEqJ,GAEAwnC,EACIK,EACExyD,iBAAO2qB,GACH,GACCA,GAEPrJ,EAASqJ,GAEf8nC,eAAgBA,EAChB10D,QAASA,EACT20D,YAAaA,EACbC,OAAQI,EACRvzD,MAAOA,QAGI,ICzKrB,MAAMlQ,GAAYlC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAXH,CAAW,qFAGZI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAyBzC65C,OAdMrrE,IAKP,IALQ,UACpBuG,EAAS,MACT9X,EAAK,MACL4oB,EAAK,OACL7Q,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mBAC5B,OACEG,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAY4Q,MAAOA,EAAMrjB,SACpEvF,GACS,ECVhB,MAAM0Y,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAVH,CAAU,oCAmFbqmE,OAvEStrE,IAIU,IAJT,UACvBuG,EAAS,QACTqP,EAAO,OACPpP,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,uBACtB,UAAEqL,EAAS,gBAAEoX,GAAoBzB,KACjC1rB,EAAU+V,EAAU/V,QACpBiB,EAAe8U,EAAU9U,aAY/B,MAAMohD,EAAcvoC,EAAQ7W,KAAIw+C,IACvB,CACL/a,SAAU1mC,IAAYyhD,EACtB9uD,MAAM,GAADiY,OAAKtJ,GAAsBmgD,IAChClmC,MAAM,GAAD3Q,OAAK62C,OAMR9T,EAAkBzzB,mBACtB,IACE0zB,oBAAS6hC,IACPtiD,EACE,CACEntB,QAASyvE,EACTxuE,aACEwuE,IAAmBt2E,GAAaQ,KAAO,OAASsH,IAEpD,EACD,GACA,MACL,CAACA,EAAcksB,IAGjB,OACEtiB,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAAC6kE,GAAQ,CACPpvD,aAAc+hC,EAAYlpC,MAAKsoC,GAAKA,EAAE/a,WACtCqnC,kBAvCN,SAA2B94D,GACzB,OACEpK,eAAC0kE,GAAY,CACX58E,MAAOsiB,EAAKtiB,MACZ4oB,MAAOtG,EAAKsG,MACZ7Q,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIqK,EAAKsG,QAGpC,EAgCM5oB,MAAM,WACN0qC,SAAWqJ,GACTiH,EAAgBjH,EAASnrB,OAE3BzB,QAASuoC,EACT33C,OAAQA,EACR6Q,MAAO8mC,EACJp/C,KAAIw+C,IACI,CACL/a,SAAU+a,EAAE/a,SACZ/zC,MAAO,MAAQ8uD,EAAE9uD,MACjB4oB,MAAOkmC,EAAElmC,UAGZpC,MAAKsoC,GAAKA,EAAE/a,WACfynC,cAAc,KAEN,EClFhB,MAAM9iE,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAVH,CAAU,oCAsCbwmE,OA3BkBzrE,IAGC,IAHA,UAChCuG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kCACtB,OAAEqU,GAAWg2B,gBACb,UAAEh/B,GAAc2V,KAChB1rB,EAAU+V,EAAU/V,QAEpB8Z,EAAU,CACd3gB,GAAaC,KACbD,GAAaK,QACbL,GAAaQ,MACbmiB,QAAO2lC,GACH1iC,IAAWjpB,GAAkB2rD,IAAMtoD,GAAaQ,MAC3CqG,IAAY7G,GAAaQ,OAKpC,OACEkR,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAAC2kE,GAAe,CAAC11D,QAASA,EAASpP,OAAQC,KACjC,ECzChB,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAAVH,CAAU,4GAGXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAGtDulE,GAAWzmE,aAAO6oB,IAAgB3oB,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAvBH,CAAuB,kEAQlC0mE,GAAuB1mE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kDAAAyV,YAAA,eAAVH,CAAU,qFA2ExB2mE,OA1DmB5rE,IAUA,IAVC,UACjCuG,EAAS,OACTC,EAAS,SAAQ,kBACjBqlE,EAAoB,CAClBt6E,EAA0BC,IAC1BD,EAA0BE,MAC1BF,EAA0BI,SAC1BJ,EAA0BG,IAC3B,gBACDo6E,GAAkB,GACZ9rE,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,iCAEtBod,EAAa,CACjB,CACEpc,QAAS,SACT/L,KAAM,QACNwlD,UAAW4qB,EAAkBx7D,SAAS9e,EAA0BE,QAElE,CACE+V,QAAS,WACT/L,KAAM,UACNwlD,UAAW4qB,EAAkBx7D,SAAS9e,EAA0BI,WAElE,CACE6V,QAAS,OACT/L,KAAM,MACNwlD,UAAW4qB,EAAkBx7D,SAAS9e,EAA0BC,MAElE,CACEgW,QAAS,MACT/L,KAAM,KACNwlD,UAAW4qB,EAAkBx7D,SAAS9e,EAA0BG,MAIpE,OACEkV,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACtD4vB,EACEhM,QAAOO,GAAKA,EAAE8oC,YACdliD,KAAIoZ,GACHxR,eAAC+kE,GAAQ,CACPlkE,QAAS2Q,EAAE3Q,QACX/L,KAAM0c,EAAE1c,KACR+K,OAAQC,GACH0R,EAAE1c,QAGZqwE,GACCllE,gBAAC+kE,GAAoB,CAAA33E,SAAA,CACnB2S,eAAC4oC,GAAW,CAAC7O,YAAa,IAAK,oBAIzB,ECvEhB,MAAM6iB,GAAUt+C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,gBAAVH,CAAU,wDACVI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YAI1C40C,GAAgB9mE,aAAO2mE,IAA0BzmE,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAjCH,CAAiC,oBACxCI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAUzzB,MAAMwrB,KAEpD+vB,GAAgBt8C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAVH,CAAU,gIA6EjB+mE,OA1DKhsE,IAA4D,IAA3D,UAAEuG,EAAS,OAAEC,EAAS,UAAiBxG,EAC1D,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,yBAEtB,KAAEuK,EAAI,QAAE8pC,EAAO,WAAEC,EAAU,UAAEC,GAAcjB,KAC3CiE,EAAiBhtC,EACjB+6D,EAA+B,OAAb/tB,QAAa,IAAbA,OAAa,EAAbA,EAAen6B,WAAW+S,MAAKgf,GACrDA,EAAEpxB,kBAAkBoS,MAAKzhB,IAAM4L,gBAAM5L,EAAEwrB,iBAGzC,OACE/5B,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAC48C,GAAO,CAAAvvD,SACN2S,eAACy8C,GAAkB,CAAC58C,OAAQC,EAAWzS,SACrC2S,eAACY,GAAa,CACZG,gBAAiBozC,GAAc7kC,kBAAqB,OAAb8nC,QAAa,IAAbA,OAAa,EAAbA,EAAesrB,cACtD5hE,cACEozC,IACEC,GAAcC,GAAa9kC,kBAAqB,OAAb8nC,QAAa,IAAbA,OAAa,EAAbA,EAAesrB,cAEtD1hE,cACEhB,eAACN,GAAU,CACTC,KAAK,+DACLX,OAAO,QACPa,OAAQA,IAGZgB,QACEZ,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAColE,GAAa,CACZD,gBAAiBA,EACjBtlE,OAAQC,EACRolE,kBAAmB,CACjBt6E,EAA0BE,MAC1BF,EAA0BI,SAC1BJ,EAA0BC,IAC1BD,EAA0BG,IAC1BkmB,QAAQoM,GACK,OAAb+5B,QAAa,IAAbA,OAAa,EAAbA,EAAen6B,WAAW3O,MACxBkD,GACE7Z,oBAAU6Z,EAAE6L,cAAczlB,gBAAkBylB,QAIpDpd,gBAAC26C,GAAa,CAAAvtD,SAAA,CACZ2S,eAAC8kE,GAAwB,CAACjlE,OAAQC,IAClCE,eAACu7C,GAA0B,CAAC17C,OAAQC,IACpCE,eAAC87C,GAAW,OAEd97C,eAACuiE,GAAS,CAAC1iE,OAAQC,EAAYs3C,cAAeA,cAMpD,ECvGK/9C,OAAwB,IAAvB,OAAEiD,EAAM,MAAEqC,GAAOtF,EAC/B,OAAOqiB,gBACL,CAAC,EACD,CACE+Z,MAAO,CACLz6B,KAAM,SACN8tB,MAAO,CACLoZ,WAAYvjC,EAAMC,MAAMk0B,UAAU1kC,OAGtC9E,MAAO,KACP23D,MAAO,CACLuE,OAAQ,CACN18B,MAAO,CACLznB,MAAO1C,EAAM2C,OAAOu3B,KAAKl5B,QAI/BohD,MAAO,CACLyE,OAAQ,CACN18B,MAAO,CACLznB,MAAO1C,EAAM2C,OAAOu3B,KAAKl5B,QAI/B0mD,YAAa,CACXiO,OAAQ,CACNiI,cAAc,EACdhW,UAAW,EACXvsB,OAAQ,CACNjjC,SAAS,EACTwvD,UAAW,EACXh+B,OAAQ,IACRi+B,OAAQ,CACNv+B,MAAO,CACLM,OAAQ,GACRg+B,UAAW,GAEb6U,OAAQ,CACN7yC,OAAQ,GACRg+B,UAAW,MAKnBtnB,OAAQ,CACN08B,kBAAkB,EAClBnV,OAAQ,CAAEv+B,MAAO,CAAEs+B,UAAW,OAIpCjqD,EAEH,ECfcgpE,OA7BYjsE,IAA0C,IAAzC,MAAEo8B,EAAK,UAAE71B,EAAS,OAAEC,EAAM,MAAElB,GAAOtF,EAC7D,OAAIiW,kBAAQmmB,KAAW51B,EACd,KAIPG,eAAC+/C,GAAK,CACJtqB,MAAO,IACFA,EACHn5B,OAAQkkD,GAAe,CACrBlkD,OAAQm5B,EAAMn5B,OACdqC,WAGJiB,UAAWA,EACXC,OAAM,GAAAE,OAAKF,EAAM,iBACjBlB,MAAOA,GACP,EC1BStF,OAAkD,IAG3DksE,GAHU,KAAEn7D,EAAI,aAAEo7D,EAAY,aAAEC,EAAY,MAAE9mE,GAAOtF,EACrDgsD,EAAa,GACbqgB,EAAa,GAGjBt7D,EAAKkD,SAAQ,CAACpU,EAAMqwB,KAClB,MAAM,SAAEo8C,EAAQ,QAAEC,EAAO,UAAEl2D,GAAcxW,EACzCwsE,EAAWnjD,KAAK,CACdiiC,EAAGj7B,EACH04B,EAAG2jB,EAAQj1D,OAAOg1D,EAAS,IAC3B9pC,SAAU4pC,IAAiB/1D,IAE7B21C,EAAW9iC,KAAK7S,GACZxW,EAAKwW,YAAc+1D,IACrBF,EAAqBK,EAAQC,eAAeF,EAAS,IACvD,IAGF,MAAM1mC,EAAS,CACb,CACE7wC,KAAM,oBACNgc,KAAMs7D,EACN1qE,KAAM,SAIV,MAAO,CACLy6B,MAAO,CACLqwC,YAAa,GACb7R,UAAW,GACXnrC,MAAO,CACLoZ,WAAYvjC,EAAMC,MAAMk0B,UAAU1kC,KAClCq3D,WAAY9mD,EAAMC,MAAMk0B,UAAU7zB,QAAQO,UAG9CyhD,MAAO,CACLoE,aACAG,OAAQ,CACN1G,UAAW,WACT,OAAOjlD,GAAgB,CAAEE,OAAQ,MAAOC,UAAWgzB,KAAKtc,OAC1D,EACAoY,MAAO,CACLqZ,SAAU,QAEZ8f,EAAG,IAEL4D,UAAW,EACXC,kBAAmB,MAErB/E,MAAO,CACLK,IAAK,IACL2kB,aAAc,GACdz8E,MAAO,CACLyN,SAAS,GAEXyuD,OAAQ,CACNwgB,KAAM,EACNjsE,OAAQ,WACR+uB,MAAO,CACLqZ,SAAU,QAEZqiB,GAAI,IAEN4Q,UAAW,CACT,CACE1kD,MAAO60D,EACPlQ,UAAW,WACX/zB,MAAO,EACPjgC,MAAO1C,EAAM2C,OAAOm0B,MAAMsE,YAAYC,OAAOE,OAC7CpyC,MAAO,CACLghC,MAAO,CACLm9C,cAAe,aAEjBptC,KAAM,eACNotB,MAAO,QACPzB,EAAG,EACHvC,EAAG,OAKXmE,OAAQ,CACNrvD,SAAS,GAEX8mC,QAAS,CACP9mC,SAAS,GAEXsvD,YAAa,CACXiW,KAAM,CACJC,cAAc,EACdviC,OAAQ,CACNw5B,OAAQ,SACRL,UAAWx0D,EAAM2C,OAAOm0B,MAAMsE,YAAYC,OAAOC,KACjD2rB,UAAWjnD,EAAM2C,OAAOm0B,MAAMsE,YAAYC,OAAOC,MAEnD54B,MAAO1C,EAAM2C,OAAOm0B,MAAMsE,YAAYC,OAAOC,KAC7CusB,OAAQ,CACNv+B,MAAO,CACL2O,QAASj4B,EAAMqgC,OAAOC,OAAOrI,QAAQsI,KACrCqnB,UAAW,MACXiW,cAAe,GAEjBvS,SAAU,CACR3D,UAAW,CACTmW,SAAU,MAKlBx9B,OAAQ,CACNy9B,eAAgB,KAChBzd,MAAO,CACLoU,OAAQ,CACN+H,OAAQ,WACNoK,EAAax4C,KAAKpR,SACpB,IAGJoe,OAAQ,CACNwsB,OAAQ,CACN4U,OAAQ,CACNjI,UAAWx0D,EAAM2C,OAAOm0B,MAAMsE,YAAYC,OAAOC,KACjD2rB,UAAWjnD,EAAM2C,OAAOm0B,MAAMsE,YAAYC,OAAOE,YAM3D+E,SAEH,ECpFcgoB,qBApCiB5tD,IAQzB,IAR0B,UAC/BuG,EAAS,KACTwK,EAAI,eACJi2C,EAAc,aACdolB,EAAY,aACZD,EAAY,OACZ3lE,EAAM,MACNlB,GACDtF,EACC,OAAIiW,kBAAQlF,IAAUo7D,GAAiB3lE,EAKrCG,eAACslE,GAAW,CACV7vC,MAAO,CACLn5B,OAAQkkD,GAAe,CAAEp2C,OAAMo7D,eAAcC,eAAc9mE,UAC3D9W,GAAI,qBACJw4D,kBAEFzgD,UAAWA,EACXC,OAAM,GAAAE,OAAKF,EAAM,uBACjBlB,MAAOA,IAZF,IAaL,I,UC3BN,MAAMunE,GAAgB5nE,aAAO6nE,MAAI3nE,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,eAAXH,CAAW,MAkBlB8nE,OAhBC/sE,IAAkC,IAAjC,SAAEhM,KAAa+S,GAAY/G,EAC1C,OAAKhM,EAIE2S,eAACkmE,GAAa,IAAK9lE,EAAU/S,SAAGA,IAH9B,IAGuD,E,UCPlE,MAAMg5E,GAAsB/nE,aAAOkC,MAAUhC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAAjBH,CAAiB,gBAsB9BgoE,OAlBOjtE,IAAgD,IAA/C,SAAEhM,EAAQ,MAAEk5E,GAAQ,KAASnmE,GAAY/G,EAC9D,OAAKhM,EAKH2S,eAACqmE,GAAmB,CAACE,MAAOA,KAAWnmE,EAAU/S,SAC9CA,IALI,IAMe,E,UCZ1B,MAAMm5E,GAAgBloE,aAAOmoE,MAAIjoE,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAXH,CAAW,MAclBooE,OAZCrtE,IAAkC,IAAjC,SAAEhM,KAAa+S,GAAY/G,EAC1C,OAAKhM,EAIE2S,eAACwmE,GAAa,IAAKpmE,EAAU/S,SAAGA,IAH9B,IAGuD,ECHlE,MAAMgR,GAAkBC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAVH,CAAU,sDAGjBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAE9C2Q,GAAeT,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAAbH,CAAa,0BAG5BqoE,GAAuBroE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,eAAVH,CAAU,uBAGjCsoE,GAActoE,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAXH,CAAW,uBAGzBuoE,GAAgCvoE,aAAO00B,IAAwBx0B,WAAA,CAAAxV,YAAA,oDAAAyV,YAAA,eAA/BH,CAA+B,2BAG/DwoE,GAAuBxoE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,eAAVH,CAAU,4CA+DxByoE,I,qBAAAA,GA1DY1tE,IAOpB,IAPqB,UAC1BuG,EAAS,OACTC,EAAM,KACN3G,EAAI,MACJo9B,EAAK,MACL5lB,KACGtQ,GACJ/G,EACC,GAAI2tE,gBAAMt2D,IAAUyJ,gBAAMzJ,KAAWxX,IAAS2G,EAC5C,OAAO,KAGT,MAAMonE,EAAiBv2D,EAAMu0C,QAAQ,GAErC,IAAIiiB,EACJ,IAAK/sD,gBAAMmc,KAAW0wC,gBAAM1wC,GAAQ,CAClC,MAAM6wC,EAAiB7wC,EAAM2uB,QAAQ,GAEnCiiB,EADY,IAAV5wC,EACa6wC,EAGbnnE,eAAC6mE,GAA6B,CAC5Bn0C,UACE4D,EAAQ,EACJjnC,GACAA,GAENqhB,MAAOy2D,EACP3tE,KAAK,IACLqG,OAAQA,IAIdqnE,EACEjnE,gBAAC6mE,GAAoB,CAAAz5E,SAAA,CAAC,IAAE65E,EAAa,MAEzC,CAEA,OACEjnE,gBAAC5B,GAAe,CACduB,UAAWA,EACX,iBAAAG,OAAgBF,EAAM,yBAAwBxS,SAAA,CAE9C4S,gBAAClB,GAAY,CAAA1R,SAAA,CAAC,gCAA8B6L,EAAK,OACjD+G,gBAAC0mE,GAAoB,CAAAt5E,SAAA,CACnB4S,gBAAC2mE,GAAW,CAAAv5E,SAAA,CAAE45E,EAAe,OAC5BC,OAEa,EC9EtB,MAmDME,GAAoB9oE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAVH,CAAU,SAChCI,GApDcA,KAChB,MAAMxH,EAAcwH,EAAMC,MAAM0pB,QAAQC,OAAO/oB,GACzC4qD,EAAczrD,EAAM2C,OAAS3C,EAAMC,MAAM2C,OAAOg3B,YAAYpQ,OAC5DY,EAAK,GAAA/oB,OAAM7I,EAAW,WAAA6I,OAAUoqD,GAChC3oB,EAAU,OAEhB,OAAQ9iC,EAAM7C,UACZ,IAAK,MACH,OAAO2rB,aAAGC,QAAAC,aAAA,oEACMoB,EACC0Y,GAEnB,IAAK,QACH,OAAOha,aAAGM,QAAAJ,aAAA,wEACQoB,EACC0Y,GAErB,IAAK,SACH,OAAOha,aAAGQ,QAAAN,aAAA,0EACSoB,EACC0Y,GAEtB,IAAK,OACH,OAAOha,aAAGgB,QAAAd,aAAA,sEACOoB,EACC0Y,GAEpB,IAAK,aACH,OAAOha,aAAGkB,QAAAhB,aAAA,+HACSoB,EACHA,EACI0Y,EACHA,GAEnB,IAAK,aACH,OAAOha,aAAG6/B,QAAA3/B,aAAA,+HACOoB,EACCA,EACA0Y,EACCA,GAErB,QAEE,OAAOha,aAAG+/B,QAAA7/B,aAAA,4DACEoB,EACC0Y,GAEjB,EAKW6lC,CAAU3oE,KAwCR4oE,OArCKjuE,IAA2D,IAA1D,SAAEhM,EAAQ,MAAEgU,EAAK,SAAExF,EAAQ,OAAEgE,KAAWO,GAAY/G,EACvE,IAAKhM,IAAawS,EAChB,OAAO,KAGT,MAAMnB,EAAQ,IACT0B,EACHiB,QACAxF,YAGF,OACEmE,eAAConE,GAAiB,IAAK1oE,EAAO,iBAAAqB,OAAgBF,EAAM,iBAAgBxS,SACjEA,GACiB,EC3DxB,MAAMgR,GAAkBC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAVH,CAAU,sCACjBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAG9C2Q,GAAeT,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAbH,CAAa,yCAEjBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAEtD+oC,GAA2BjpE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,gBAAVH,CAAU,qCAIrC8+D,GAAc9+D,aAAOylC,IAAMvlC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAbH,CAAa,uCAO3BkpE,GAAsBlpE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,gBAAVH,CAAU,oBACvBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KA+HzC48C,OA5HSpuE,IAOjB,IAPkB,UACvBuG,EAAS,KACT1G,EAAI,KACJmtC,EAAO,GAAE,SACTqhC,EAAWphC,GAAqBqhC,kBAAiB,OACjD9nE,EAAS,YACNO,GACJ/G,EACC,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,sBAEtB+nE,EACJF,IAAaphC,GAAqBqhC,kBAEpC,IAAI1mE,EACJ,GAAIqO,kBAAQ+2B,GACVplC,EAAiB2mE,EACf5nE,eAACN,GAAU,CACTC,KAAI,+DAAAI,OACF7G,EAAI,OAAA6G,OAAU7G,GAAS,GAAE,KAE3B8F,OAAO,SACPa,OAAQC,IAGVE,eAACN,GAAU,CACTC,KAAI,kEAAAI,OACF7G,EAAI,OAAA6G,OAAU7G,GAAS,GAAE,iDAE3B8F,OAAO,UACPa,OAAQC,QAGP,CACL,IAAIokC,EAAU,CACZ,CACEmI,SAAU,YACVzsC,UAAW,YACX4c,OAAQ,SACR8vB,KAAMxyC,IAAe,IAAd,KAAEksC,GAAMlsC,EACb,OACEkG,eAAA,QAAM,wBAAsB,OAAM3S,SAC/B24C,EAAKF,IAAI0G,SAASlB,IACjBtrC,eAAA,KACE,iBAAAD,OAAgBD,EAAU,KAAAC,OAAIkN,oBAAU+4B,EAAKt1B,QAC7C5U,KAAMkqC,EAAKF,IAAI0G,SAASlB,IACxBmB,IAAI,sBACJvf,OAAO,SACP,8BAA4B,OAAM7/B,SAEjC24C,EAAKt1B,QAGR1Q,eAAA,QAAA3S,SAAO24C,EAAKt1B,SAET,GAIb,CACE27B,SAAU,cACVzsC,UAAW,cACX4c,OAAQ,MAEV,CACE6vB,SAAU,QACVC,KAAMt+B,IAAA,IAAC,KAAEg4B,GAAMh4B,EAAA,OACbhO,eAAA,QAAM,wBAAsB,OAAM3S,SAAE24C,EAAKt1B,OAAa,EAExD9Q,UAAW,QACX4c,OAAQ,SAEV,CACE6vB,SAAU,QACVC,KAAM5+B,IAAA,IAAC,KAAEs4B,GAAMt4B,EAAA,OACb1N,eAAA,QAAM,wBAAsB,OAAM3S,SAAE24C,EAAKt1B,OAAa,EAExD9Q,UAAW,QACX4c,OAAQ,UAIZ,MAAMqrD,EACY,IAAhBxhC,EAAKxrC,OAAY,GAAAkF,OAAMsmC,EAAKxrC,OAAM,cAAAkF,OAAesmC,EAAKxrC,OAAM,YACxDmE,EAAM,GAAAe,OAAM8nE,EAAY,KAAA9nE,OAC5B6nE,EAAwB,OAAS,UAAS,iBAAA7nE,OAC5B7G,EAAI,OAAA6G,OAAU7G,GAAS,IAClC0uE,IACH1jC,EAAUn6B,iBAAOm6B,GAASxkB,GAAoB,gBAAfA,EAAE2sB,YAGnCprC,EACEhB,gBAACunE,GAAmB,CAAAn6E,SAAA,CAClB2S,eAACjB,GAAY,CAAA1R,SACX2S,eAACsnE,GAAW,CAACzrE,SAAS,SAASgE,OAAQC,EAAWzS,SAC/C2R,MAGLgB,eAACunE,GAAwB,CAAAl6E,SACvB2S,eAACo9D,GAAW,CACVn5B,QAASjlC,EACTklC,QAASA,EACT95B,KAAMi8B,EACNxmC,OAAQA,QAKlB,CAEA,OACEG,eAAC3B,GAAe,CAACuB,UAAWA,EAAW,cAAaE,EAAWzS,SAC5D4T,GACe,EClJf,MCMM68D,GAAiBA,CAC5BC,EACAtyD,EACAE,EACAvP,EACA8K,EACAwI,EACAC,KAEA,MAAOvF,EAAM4zD,GAAYhuD,mBAAS,KAI3BiuD,EAAkB6J,GAAuB93D,mBAC9CvX,GACEC,KAAO,IAAIG,MACRyB,QAAQ,OACRH,SAAS,GAAI,WAGb4tE,EAAgBC,GAAqBh4D,mBAC1CvX,GAAoBC,KAAO,IAAIG,MAAQyB,QAAQ,UAG1C+lD,EAAgBue,GAAsB5uD,oBAAS,IAC/Cy1D,EAAcwC,GAAmBj4D,mBAAS,KAC1C3F,EAAOw0D,GAAa7uD,mBAAS,MAC9B8uD,EAAezvD,mBAAQ,KACpB,CACL5D,cAEAkE,QAAWA,EACPjX,KAAOiX,GACJxV,SAAS,EAAG,QACZhB,cACH4uE,EAEJr4D,UAAaA,EACThX,KAAOgX,GACJvV,SAAS,EAAG,QACZhB,cACH8kE,EACJtyD,WACAvP,OACA8K,UAED,CACDuE,EACAs8D,EACA9J,EACAtyD,EACAvP,EACA8K,EACAwI,EACAC,IAwCF,OArCAS,qBAAU,KACR,WACE,GAAI2tD,EACFC,EAASD,EAAY3zD,MACrB69D,EAAgBlK,EAAY0H,mBAE5B,IACE,IAAKp7D,EAAO,CACVu0D,GAAmB,GACnB,MAAMG,ODxEgB/gE,WAA8C,IAAvC,YAAEyN,EAAW,OAAEC,EAAM,SAAEC,GAAUtS,EACxE,MAAM,cAAeqS,GAAa,YAAaA,SAOxBpB,GAAIwD,KAAK,IAAD/N,OAAK4L,EAAQ,sBAAsBD,EAAQ,CACxEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,KATPN,aAAiB,wGAAD/J,OACmF8U,KAAKC,UAC3GpJ,IAOc,EC6DiBw8D,CAAmB,CAC5Cz8D,YAAaqzD,EAAarzD,YAC1BE,SAAUmzD,EAAanzD,SACvBD,OAAQ,CACNC,SAAUmzD,EAAanzD,SACvB+D,UAAWovD,EAAapvD,UACxBC,QAASmvD,EAAanvD,QACtBzZ,MAAO4oE,EAAa53D,KAAK9O,KAAImW,GAAKA,EAAE7B,WAGxCsxD,EAASe,EAAaoJ,gBACtBF,EACE/7D,cAAImmD,eAAK0M,EAAaoJ,gBAAiB,cAEzCvJ,GAAmB,EACrB,CACF,CAAE,MAAO/0D,GACPg1D,EAAUh1D,GACV+0D,GAAmB,GACnBU,cAAUC,IACRA,EAAM1gB,WAAW,uBAAwBigB,GACzCh1D,aAAiBD,EAAE,GAEvB,CAEH,EAjCD,EAiCI,GACH,CAACk0D,EAAa1zD,EAAOy0D,IAEjB,CAAC2G,EAAcr7D,EAAMi2C,EAAgB4nB,EAAiB59D,EAAM,EC9E/D7J,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAAVH,CAAU,iBAGtB+nE,GAAsB/nE,aAAOgoE,IAAc9nE,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,eAArBH,CAAqB,sBAG3C8pE,GAAmB9pE,KAAO64D,WAAU34D,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,eAAjBH,CAAiB,4CAIpCw5D,GAAmBx5D,aAAOoB,IAAWlB,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,eAAlBH,CAAkB,sBA0K5B+pE,I,GAAAA,GAtKiBhvE,IAAsC,IAArC,OAAEwG,EAAS,YAAanB,GAAOrF,EAC9D,MAAM,UACJuG,EAAS,YACT6L,EAAW,SACXE,EAAQ,YACRoyD,EAAW,KACX3hE,EAAI,YACJiS,EAAW,UACXqB,EAAS,QACTC,GACEjR,GAEF+mE,EACA6C,EACAjoB,EACA4nB,EACA59D,GACEyzD,GACFC,EACAtyD,EACAE,EACAvP,EACAiS,EACAqB,EACAC,GAGF,GAAItF,EACF,OAAO,KAGT,GAAIg2C,EACF,OAAOrgD,eAACG,GAAO,CAACN,OAAQA,IAQ1B,IAIIoB,EAJAsnE,EAAsCD,EAAgB/4D,OAAMrW,GACvDA,EAAKsvE,cAAcj5D,OAAM1E,GAAKyE,kBAAQzE,EAAE49D,cAMjD,GAAIF,EAAqC,CAGvC,MAAMvI,EACJ5jE,EAAK+Q,cAAczD,SAAS+1D,GAAgBQ,YAC5C7jE,EAAK+Q,cAAczD,SAAS+1D,GAAgBS,gBACxC,YACA,oBAENj/D,EACEjB,eAAC83D,GAAgB,CACfn4D,KAAMqgE,EAAejgE,OACnB,uDAEFf,OAAO,QACPa,OAAQA,GAGd,KAAO,CACL,MAAM6oE,EAAoB93D,oBACxB03D,GACAt5B,GAAKA,EAAEt/B,YAAc+1D,IAEvB,GAAIiD,EAAoB,EACtB,OAAO,KAET,MAAMC,EAAuBL,EAAgBI,GACvCE,EAAuBN,EAAgBI,EAAoB,GAE3DG,EACJF,EAAqB/C,QAAQj1D,OAAOg4D,EAAqBhD,SAAS,IAC9DrvC,EACJuyC,EACAD,EAAqBhD,QAAQj1D,OAAOi4D,EAAqBjD,SAAS,IAE9DzN,ECvHK7+D,KAA4B,IAA3B,KAAE+Q,EAAI,YAAE8mC,GAAa73C,EAEnC,MAAMyvE,EAA2Bn6D,sBAC/BwlB,kBACE/pB,EAAKo+D,cAAcpwE,KAAIpR,IACrB,MAAM,SAAEyhF,EAAQ,OAAEx4D,GAAWjpB,EACvBoV,EAAO80C,EAAY5iC,MAAK+F,GAAKA,EAAExsB,KAAOooB,IAQ5C,OAAIiB,iBAAOu3D,KAAcrsE,EAChB,KAKFqsE,EAASrwE,KAAI4mB,IAAC,IAChBA,EACH4B,MAAOxkB,EAAKhO,QACX,OAQP26E,EACAC,GACEn3D,oBAAUi3D,GAA0Bv6D,GAAK2C,iBAAO3C,EAAEwrB,eAEtD,MAAO,IACF3vB,EACH4+D,yBACAD,4BAEH,ED+EsB1J,CAAU,CAC3Bj1D,KAAMu+D,EACNz3B,YAAa,IAAI7iC,EAAajS,MAG1B,uBAAE4sE,EAAsB,0BAAED,GAA8B7Q,EACxD+Q,EAAwBpvE,GAAgB,CAC5CE,OAAQ,MACRC,UAAWyrE,IAEPyD,EACJ55D,kBAAQ05D,IAA2B15D,kBAAQy5D,GAE7C9nE,EACEhB,gBAACkpE,WAAQ,CAAA97E,SAAA,CACP4S,gBAAA,UAAA5S,SAAA,CACE2S,eAACopE,GACC,CACAh/D,KAAMk+D,EAAgBj8C,MAAM,GAC5Bg0B,eAAgBA,EAGhBolB,aAAcA,EACdD,aAActsE,GAtEHA,KACnB+uE,EAAgB/uE,EAAK,EAqESssE,CAAatsE,GACnC2G,OAAQA,IAEVG,eAACooE,GAAgB,CAAA/6E,SACf2S,eAAC+mE,GAAkB,CACjB7tE,KAAM+vE,EACNv4D,MAAOm4D,EACPvyC,MAAOA,EACPz2B,OAAQA,SAIbqpE,EACClpE,eAAC83D,GAAgB,CACfn4D,KAAI,6EAAAI,OAA+EkpE,EAAqB,KACxGjqE,OAAO,QACPa,OAAQA,IAGVG,eAACqmE,GAAmB,CAAAh5E,SAClB4S,gBAACymE,GAAO,CAAAr5E,SAAA,CACN2S,eAAComE,GAAO,CAAA/4E,SACN2S,eAACynE,GAAe,CACdvuE,KAAM+vE,EACN5iC,KAAM2iC,EACNtB,SAAUphC,GAAqBqhC,kBAC/B9nE,OAAQA,MAGZG,eAAComE,GAAO,CAAA/4E,SACN2S,eAACynE,GAAe,CACdvuE,KAAM+vE,EACN5iC,KAAM0iC,EACNrB,SAAUphC,GAAqB+iC,qBAC/BxpE,OAAQA,aAQxB,CAEA,OACEG,eAACQ,GAAS,CAACZ,UAAWA,EAAW,iBAAAG,OAAgBF,EAAM,iBAAgBxS,SACpE4T,GACS,EE1LhB,MAAMulC,GAAOloC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAATH,CAAS,8CAIhBmoC,GAAWnoC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAATH,CAAS,yIAOPI,GAAK,GAAAqB,OACfrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAIjE++C,GAAO9hD,aAAGC,QAAAC,aAAA,wEAIGhpB,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAO4O,GAAE,WAAAn3B,OAC9BrB,EAAM+pB,SAAW/pB,EAAMC,MAAM2C,OAAO2a,IAAIC,UAAY,iBAE7Cxd,GAAUA,EAAM2jC,WAAa,MAAQ,MAG5CvB,GAAOxiC,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAAjBH,CAAiB,4FAC1BgrE,IAWEC,GAAcjrE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAAVH,CAAU,QAC1BgrE,IA+DWE,OA/COnwE,IAKmB,IALlB,UACrBuG,EAAS,aACT6pE,EAAY,KACZC,EAAI,OACJ7pE,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,oBAGtB8pE,EAAkBD,EAAK7uE,OACzB4uE,GAAkBC,EAAKp7D,MAAKC,GAAKA,EAAE1mB,KAAO4hF,IACxCA,EACAC,EAAK,GAAG7hF,GACV,KAEJ,OAAS6hF,EAAK7uE,OACZmF,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACwmC,GAAI,CAACojC,SAAUF,EAAK7uE,OAAOxN,SACzBq8E,EAAKtxE,KAAImW,GACRvO,eAACymC,GAAQ,CAAAp5C,SACNkhB,EAAE8zB,WACDriC,eAACupE,GAAW,CACV,iBAAAxpE,OAAgBD,EAAU,KAAAC,OAAIwO,EAAE1mB,GAAE,QAClC4gC,SAAUla,EAAE1mB,KAAO8hF,EACnBtnC,aAAc9zB,EAAE8zB,WAAWh1C,SAE1BkhB,EAAEjlB,QAGL0W,eAAC8gC,GAAI,CACHlhC,UAAU,aACV,iBAAAG,OAAgBD,EAAU,KAAAC,OAAIwO,EAAE1mB,GAAE,QAClC4gC,SAAUla,EAAE1mB,KAAO8hF,EACnBtnC,aAAc9zB,EAAE8zB,WAChBj0C,KAAI,GAAA2R,OAAKD,EAAU,KAAAC,OAAIwO,EAAE1mB,GAAE,QAC3B4+B,GAAIlY,EAAEnhB,KAAKC,SAEVkhB,EAAEjlB,SAlBMilB,EAAE1mB,UAyBrB,IAAI,EClGV,MAAM2Y,GAAYlC,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAbH,CAAa,sCACfI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAoBjCu/C,OATQxwE,IAAuD,IAAtD,UAAEuG,EAAS,QAAEiB,EAAO,OAAEhB,EAAS,UAAiBxG,EACtE,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,oBAC5B,OACEG,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD4S,gBAACw8C,GAAkB,CAAC58C,OAAQA,EAAOxS,SAAA,CAAEwT,EAAQ,QACnC,ECkBhB,MAAMipE,GAAuBxrE,aAAOurE,IAAerrE,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,gBAAtBH,CAAsB,sBAG7CyrE,GAAuBzrE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,gBAAVH,CAAU,+EAMjC0rE,GAAa1rE,aAAOkrE,IAAchrE,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAArBH,CAAqB,qEAGrBI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG/D0/C,GAAoB3rE,aAAO+pE,IAAwB7pE,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAA/BH,CAA+B,wCACnCI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAGhD4/C,GAAkB5rE,aAAOqhE,IAAsBnhE,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAA7BH,CAA6B,wCAC/BI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAiOvC6/C,I,GAAAA,GAvNU9wE,IAGG,IAHF,UACxBuG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,wBACtBhE,EAAWob,eAEX5b,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxDoQ,EAAcpO,cAAYpE,GAASiT,cAAIjT,EAAO,0BAC9C0S,EAAWtO,cAAYpE,GAASiT,cAAIjT,EAAO,8BAC3CmD,EAAOiB,cAAYpE,GAASiT,cAAIjT,EAAO,OAAQ,CAAC,MAChD,UAAEiS,EAAS,mBAAEuX,EAAkB,oBAAEV,GAAwBlB,KACzDQ,EAAkBoB,EAAmBpB,gBACrCjN,EAAa/E,mBAAQ,IAAMnE,EAAUhE,MAAM,CAACgE,IAC5Ck/D,EAAkB/6D,mBAAQ,IAAMnE,EAAU0I,WAAW,CAAC1I,IACtDI,EAAS,GAAAvL,OAAM5S,EAAalC,GAAwB3B,OAAKyW,OAC3DqU,EAAa,KAAOnG,GAAoBmG,GAAc,IAAErU,OAE1DqqE,GACU,OAAVh2D,QAAU,IAAVA,KAAY9B,YACZqB,GAAgBy2D,GACZ,MAAQA,EAAgBphF,YACxB,MACA6Q,GAAgB,CACdE,OAAQ,MACRC,UAAWowE,EAAgBrxE,QAE7B,MACAc,GAAgB,CAAEE,OAAQ,MAAOC,UAAWowE,EAAgB5xE,OAE5D6xE,EAA4B,OAALhvE,QAAK,IAALA,OAAK,EAALA,EAAQ,6BAC/BivE,EAA0B,OAALjvE,QAAK,IAALA,OAAK,EAALA,EAAQ,gBAC7BylB,EAAyB,OAALzlB,QAAK,IAALA,OAAK,EAALA,EAAQ,gCAC5BkvE,EAA0B,OAALlvE,QAAK,IAALA,OAAK,EAALA,EAAQ,iCAE7BmvE,EAAkBn7D,mBACtB,IACE,CACEziB,EAAqBC,YACrBD,EAAqBE,aACrBF,EAAqBG,YACrBH,EAAqBI,aACrBJ,EAAqBK,cACrBgkB,QAAO8gC,IACP,OAAQA,GACN,KAAKnlD,EAAqBK,aACxB,OAAOs9E,EACT,KAAK39E,EAAqBC,YACxB,OAAOi0B,EACT,KAAKl0B,EAAqBG,YACxB,OAAOs9E,EACT,KAAKz9E,EAAqBI,aACxB,OAAOs9E,EACT,QACE,OAAO,EACX,KAEJ,CACExpD,EACAwpD,EACAD,EACAE,IAIE1Q,IACJx4C,IAAoBz0B,EAAqBE,cACzCoe,EAAU/V,UAAY7G,GAAaQ,MAE/B27E,EAAsBp7D,mBAC1B,IACsC,SAApCoT,EAAmBrsB,aACL,OAAVge,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,YACZ,CACY,OAAV+F,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,YAAYC,MACtB0Q,GAAKA,EAAEtS,QAAU+V,EAAmBrsB,iBAG9C,CAACge,EAAYqO,IAQf,OAJArS,qBAAU,KACRzU,SAASrS,MlHb4ByoD,KACvC,MAAM24B,EAAex9E,EAA0B6kD,GACzC0C,EAAoBtnD,EAAalC,GAAwB3B,MAC/D,OAAO+hB,GAAa,GAADtL,OACZ2qE,EAAY,GAAA3qE,OAAM2qE,EAAY,OAAQ,IAAE3qE,OAAG00C,GACjD,EkHQkBk2B,CAAyBtpD,EAAgB,GACzD,CAACxlB,EAAUwlB,IAEF,OAALhmB,QAAK,IAALA,KAAQ,kBACb4E,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD2S,eAAC8pE,GAAoB,CACnBjpE,QACEZ,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE4S,gBAAC8pE,GAAoB,CAAA18E,SAAA,CACnB2S,eAACm4D,GAAS,CAAC7uE,MAAOgiB,EAAWzL,OAAQC,IACrCE,eAAC45D,GAAY,CAACC,kBAAmBA,OAEnC75D,eAACgqE,GAAU,CACTP,aAAcpoD,EACdqoD,KAAMc,EAAgBpyE,KAAI25C,IAAO,CAC/B3kD,KAAM20B,EAAoB,CACxBpN,mBACEo9B,IAAYnlD,EAAqBC,aAC7B8H,GAEN0sB,gBAAiB0wB,IAEnBzoD,MAAO4D,EAA0B6kD,GACjClqD,GAAIkqD,EACJ1P,YAAY,MAEdxiC,OAAO,2BAIbA,OAAQC,IAEVG,gBAACmiC,KAAM,CAAA/0C,SAAA,CACL2S,eAAC+mB,KAAK,CAAC6jD,OAAK,EAACx9E,KAAI,IAAA2S,OAAM9U,GAAyBoC,SAC9C2S,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SAChDyzB,EACC9gB,eAACmsD,GAAsB,IAEvBnsD,eAACqlE,GAAW,CAACxlE,OAAQC,QAK3BE,eAAC+mB,KAAK,CACJ35B,KAAI,IAAA2S,OAAM9U,EAAsB,KAAA8U,OAAInT,EAAqBC,aAAcQ,SAEvE2S,eAACmsD,GAAsB,MAIzBnsD,eAAC+mB,KAAK,CAAC6jD,OAAK,EAACx9E,KAAI,IAAA2S,OAAM9U,EAAsB,oBAAmBoC,SAC9D2S,eAACwmB,KAAQ,CACPC,GAAE,IAAA1mB,OAAM9U,EAAsB,KAAA8U,OAC5BnT,EAAqBE,cAAYiT,OAC9BnE,OAAOC,SAASmb,OAASpb,OAAOC,SAASmb,OAAS,QAK3DhX,eAAC+mB,KAAK,CAAC6jD,OAAK,EAACx9E,KAAI,IAAA2S,OAAM9U,EAAsB,gBAAeoC,SAC1D2S,eAACwmB,KAAQ,CACPC,GAAE,IAAA1mB,OAAM9U,EAAsB,KAAA8U,OAC5BnT,EAAqBC,aAAWkT,OAC7BnE,OAAOC,SAASmb,OAASpb,OAAOC,SAASmb,OAAS,QAI3DhX,eAAC+mB,KAAK,CACJ6jD,OAAK,EACLx9E,KAAI,IAAA2S,OAAM9U,EAAsB,KAAA8U,OAAInT,EAAqBE,cAAeO,SAExE2S,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACqlE,GAAW,CAACxlE,OAAQC,QAGzBE,eAAC+mB,KAAK,CACJ35B,KAAI,IAAA2S,OAAM9U,EAAsB,KAAA8U,OAAInT,EAAqBE,aAAY,aAAYO,SAEjF2S,eAACg9C,GAAe,CAACn9C,OAAO,gBAEzBwqE,EACCrqE,eAAC+mB,KAAK,CACJ35B,KAAI,IAAA2S,OAAM9U,EAAsB,KAAA8U,OAAInT,EAAqBG,aAAcM,SAEvE2S,eAAC+3D,GAAU,MAEX,KACHuS,EACCtqE,eAAC+mB,KAAK,CACJ35B,KAAI,IAAA2S,OAAM9U,EAAsB,KAAA8U,OAAInT,EAAqBI,cAAeK,SAExE2S,eAACkqE,GAAe,CACdtqE,UAAWA,EACXC,OAAQA,EACR4L,YAAaA,EACbE,SAAUA,EACVvP,KAAMA,EACNiS,YAAao8D,EACbvyE,MAAOgT,EAAUhT,MACjB0b,UAAW1I,EAAU0I,cAIzB5T,eAACwmB,KAAQ,CACPC,GAAE,IAAA1mB,OAAM9U,GAAsB8U,OAC1BnE,OAAOC,SAASmb,OAASpb,OAAOC,SAASmb,OAAS,OAIpD,OAAL3b,QAAK,IAALA,OAAK,EAALA,EAAQ,mCACP2E,eAAC+mB,KAAK,CACJ35B,KAAI,IAAA2S,OAAM9U,EAAsB,KAAA8U,OAAInT,EAAqBK,cAAeI,SAExE2S,eAACiqE,GAAiB,CAChBrqE,UAAWA,EACXC,OAAQA,EACR4L,YAAaA,EACbE,SAAUA,EACVvP,KAAMA,EACNiS,YAAao8D,EACb/6D,UAAWxE,EAAU0I,UAAU7a,MAC/B4W,QAASzE,EAAU0I,UAAUpb,cAOvCwH,eAACwmB,KAAQ,CAACC,GAAE,KACb,EClRH,MAAMkC,GAASrqB,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,eAAbH,CAAa,4IAEZI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAQ1CugD,GAAevsE,aAAOqqB,IAAOnqB,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,eAAdH,CAAc,6BAG7BwsE,GAAgBxsE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,eAAVH,CAAU,0CAChBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAG1CygD,GAAsBzsE,aAAOqqB,IAAOnqB,WAAA,CAAAxV,YAAA,sDAAAyV,YAAA,eAAdH,CAAc,6BAGtCI,IACA,GAAIA,EAAM+pB,SACR,OAAOjB,aAAGC,QAAAC,aAAA,gFACMhpB,EAAMC,MAAM2C,OAAO2a,IAAIsO,KAChB7rB,EAAMC,MAAM0pB,QAAQC,OAAO4O,GAAQx4B,EAAMC,MAAM2C,OAAO2a,IAAIE,WAEnF,IAGEgmD,GAAW7jE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,eAAVH,CAAU,gEAMrB0sE,GAAS1sE,aAAOsrB,IAAYprB,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,eAAnBH,CAAmB,4EAEtBI,GAAK,eAAAqB,OAAmBrB,EAAMC,MAAM2C,OAAO2a,IAAIC,aAKrDwO,GAAOpsB,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAAbH,CAAa,oDACXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAC3Cf,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAEpDogD,GAAc3sE,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,eAAZH,CAAY,uBAG1BqhC,GAAQrhC,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAARH,CAAQ,gCAIhBotB,GAASptB,KAAOqtB,OAAMntB,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,eAAbH,CAAa,qBACZI,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAE/D2gD,GAAgB5sE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,gBAAVH,CAAU,8BAI1Bq7D,GAAWr7D,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,gBAAZH,CAAY,kCAClBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGrC66C,GAAUz4D,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAZH,CAAY,iCACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YA4F5BivD,OA1EwB9xE,IASzB,IAAD+xE,EAAAC,EAAA,IAT2B,UACtCzrE,EAAS,SACT6oB,GAAW,EAAK,cAChB6iD,EAAa,kBACbC,EAAiB,OACjBC,EAAM,gBACNC,GAAkB,EAAK,kBACvBC,GAAoB,EAAI,OACxB7rE,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,sCACtB8rE,IAAgC,QAAZP,EAACI,EAAOtkE,YAAI,IAAAkkE,IAAXA,EAAa/8D,YAAYxT,QAE9C+wE,EACJ3rE,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE4S,gBAACkiE,GAAQ,CAAA90E,SAAA,CACP2S,eAACgrE,GAAM,CACL5hD,QAASoiD,EAAOp9E,KAChBiS,IAAKmrE,EAAOjgD,YACZ1rB,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIyrE,EAAO3jF,MAElCoY,gBAAA,OAAK,wBAAsB,OAAM5S,SAAA,CAC/B4S,gBAACyqB,GAAI,CAAAr9B,SAAA,CACFm+E,EAAOp9E,KACPq9E,EACCzrE,eAACirE,GAAW,CAACn2E,KAAK,mBAAmB+K,OAAQC,IAC3C,QAENE,eAAC2/B,GAAK,CAAAtyC,SAAEm+E,EAAOliF,cAGlBmiF,EAAkB,KAAOE,EACxB3rE,eAACsJ,GAAI,CAACxU,KAAK,mBAAmB+K,OAAQC,IACpC,QAIR,OACEG,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CAChDs+E,EACC3rE,eAAC6qE,GAAY,CACX,iBAAA9qE,OAAgBD,EAAU,KAAAC,OAAIyrE,EAAO3jF,GAAE,kBACvCw0B,QAASivD,EAAcj+E,SAEtBu+E,IAGH5rE,eAAC8qE,GAAa,CAAAz9E,SAAEu+E,IAEjBF,GAAqBC,EACpB3rE,eAAC0rB,GAAM,CAAAr+B,SACL4S,gBAAC8qE,GAAmB,CAClBtiD,SAAUA,EACVpM,QAASkvD,EACT,iBAAAxrE,OAAgBD,EAAU,KAAAC,OAAIyrE,EAAO3jF,GAAE,uBAAsBwF,SAAA,CAE7D4S,gBAACirE,GAAa,CAAA79E,SAAA,CACZ2S,eAAC25D,GAAQ,CAAC7kE,KAAK,OAAO+K,OAAQC,IAEjB,QAF+BurE,EAE1CG,EAAOtkE,YAAI,IAAAmkE,OAAA,EAAXA,EAAah9D,YAAY4C,QAAO1C,GAAKA,EAAE1mB,KAAO2jF,EAAO3jF,KAAIgT,OACzD,IAAI,oBAGRmF,eAAC+2D,GAAO,CACNjiE,KAAM2zB,EAAW,aAAe,cAChC5oB,OAAQC,SAIZ,OACA,EC3JV,MAAM2mC,GAAWnoC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,gBAATH,CAAS,+BAoEXutE,OAvC6BxyE,IAO9B,IAADyyE,EAAA,IAPgC,aAC3CC,EAAY,UACZnsE,EAAS,cACT0rE,EAAa,kBACbC,EAAiB,KACjBrkE,EAAI,OACJrH,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,4CACtBwO,EAAkB,OAAJnH,QAAI,IAAJA,GAAiB,QAAb4kE,EAAJ5kE,EAAMmH,mBAAW,IAAAy9D,OAAb,EAAJA,EAAmB76D,QACrC1C,GAAKA,EAAE1mB,MAAW,OAAJqf,QAAI,IAAJA,OAAI,EAAJA,EAAMsH,sBAEtB,OAAkB,OAAXH,QAAW,IAAXA,KAAaxT,OAClBmF,eAAA,MAAIJ,UAAWA,EAAW,cAAaE,EAAWzS,SAC/CghB,EAAYjW,KAAIw+C,GACf52C,eAACymC,GAAQ,CAAAp5C,SACP2S,eAACmrE,GAA8B,CAC7BK,OAAQ50B,EACRnuB,SAAUmuB,EAAE/uD,MAAmB,OAAZkkF,QAAY,IAAZA,OAAY,EAAZA,EAAclkF,IACjCyjF,cACEzhE,GAEAyhE,EAAc,CACZzhE,IACA2hE,OAAQ50B,EACRm1B,iBAGJR,kBACE1hE,GACG0hE,EAAkB,CAAE1hE,IAAG2hE,OAAQ50B,IACpC/2C,OAAQC,KAhBG82C,EAAE/uD,QAqBnB,IAAI,EChDV,MAGMmkF,GAAkB1tE,aAAOu+D,IAAyBr+D,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,gBAAhCH,CAAgC,sBAGlDkC,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAAVH,CAAU,0CACZI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YAG1ChU,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAAbH,CAAa,0DACZI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAC7B5rB,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG/D0hD,GAAsB3tE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kDAAAyV,YAAA,gBAAVH,CAAU,0CAIhC4tE,GAAY5tE,aAAOutE,IAAoCrtE,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAA3CH,CAA2C,oBAGvD6tE,GAAc7tE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAVH,CAAU,iEAEbI,GAAK,GAAAqB,OACfrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIC,aAG/DkwD,GAAqB9tE,aAAO4tE,IAAU1tE,WAAA,CAAAxV,YAAA,iDAAAyV,YAAA,gBAAjBH,CAAiB,uCAC5BI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YAG1CmsB,GAAar+C,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,gBAATH,CAAS,qDAKtB+tE,GAAiB/tE,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,gBAATH,CAAS,8BAK1BguE,GAAoBhuE,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,gBAAZH,CAAY,iCAC3BI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGrCqwD,GAAiBjuE,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,iBAAbH,CAAa,gDA2PrBkuE,OA9OoBnzE,IAIrB,IAAD64D,EAAA,IAJuB,UAClCtyD,EAAS,SACT6sE,EAAQ,OACR5sE,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kCACtB,gBAAEyiB,GAAoBzB,MAGpBzW,KAAMsiE,GAAqBj9D,MAC7B,WAAE6L,GAAeP,KACjBpP,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDvP,EAAOiB,cAAapE,GAA6BA,EAAMmD,OAEvDuwE,EAAmB,IACpBvwE,EACHuP,WACAzE,KAAMwlE,EACNjb,MAAO,GACPmb,YAAa,KACbC,SAAU,KACVC,wBAAwB,IAEnBt0C,EAAYu0C,GAAiB/8D,mBAElC,CAAC28D,KACIK,EAAwBC,GAA6Bj9D,mBAC1D,GAEIoT,EAAWC,eACXgnB,EAAcC,4BAEpB,SAASK,IAIPN,EAAYM,kBAAkB,uBAC9BN,EAAYM,kBAAkB,mBAC9BN,EAAYM,kBAAkB,iBAC9BN,EAAYM,kBAAkB,gBAC9BN,EAAYM,kBAAkB,CAAC,QAAS,CAAE3vC,KAAM,uBAClD,CAgCAgD,eAAestE,EAAat9D,GAQxB,IARyB,EAC3BnE,EAAC,OACD2hE,EAAM,aACNO,GAKD/9D,EAQC,MAAMk/D,EAAqB,IAAI10C,GAAYvnB,QACzCoD,GAAKA,EAAExsB,KAAOuU,EAAKvU,IAAMwsB,EAAExsB,KAAO2jF,EAAO3jF,KAErCoU,GACQ,OAAZ8vE,QAAY,IAAZA,OAAY,EAAZA,EAAclkF,MAAO2jF,EAAO3jF,GACxB,IAAIqlF,EAAmB7gD,MAAM,EAAG2gD,GAAyBxB,GACzD,IAAI0B,EAAoB1B,GAE9B7gC,IACAroB,EAAgB,CAAErM,WAAYu1D,EAAO3jF,KAAM,GAE3Cu7B,EACEtG,GAAkB,CAChB7gB,oBAAqBA,WAGnBqf,EAAW,CACfzR,IACA/hB,MAAO,+BACP4oB,MAAM,WAAD3Q,OAAayrE,EAAOp9E,cAErBktB,EAAW,CACfzR,IACA/hB,MAAO,eACP4oB,MAAM,kBAAD3Q,OAAoByrE,EAAOp9E,KAAI,MAAA2R,OAAKyrE,EAAO9+D,MAAK,OAEvD+/D,GACF,CAEA,SAASlB,EAAiB79D,GAQtB,IARuB,EACzB7D,EAAC,OACD2hE,EAAM,YACN2B,GAAc,GAKfz/D,EACC4N,EAAW,CACTzR,IACA/hB,MAAO,+BACP4oB,MAAM,8BAAD3Q,OAAgCyrE,EAAOp9E,QAE1C++E,GACFJ,GAAcrtD,GAAK,IAAIA,EAAG8rD,KAC1ByB,GAA0BvtD,GAAKA,EAAI,KAEnCqtD,GAAcK,GAAqB,IAC9BA,EAAkB/gD,MAAM,EAAG2gD,EAAyB,GACvDxB,IAGN,CAuBA,MAAO6B,EAA4BtB,GAAgBvzC,EAAWnM,OAC5D,GAGF,OACErsB,eAACgsE,GAAe,CAAClP,aAA8B,QAAlB5K,EAAEG,eAAK75B,UAAW,IAAA05B,OAAA,EAAhBA,EAAkBrqE,GAAGwF,SAClD4S,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD2S,eAACwc,GAAM,CAAAnvB,SACL2S,eAACmrE,GAA8B,CAC7BG,cACEzhE,GAnIZ7L,eAAgClE,GAM5B,IAN6B,EAC/B+P,EAAC,OACD2hE,GAID1xE,EAICwoB,EAAgB,CAAErM,WAAY,KAAM/O,KAAMwlE,IAAoB,GAC9D/hC,IACAvnB,EACEtG,GAAkB,CAChB7gB,oBAAqB,YAGnBqf,EAAW,CACfzR,IACA/hB,MAAO,+BACP4oB,MAAM,WAAD3Q,OAAayrE,EAAOp9E,cAErBktB,EAAW,CACfzR,IACA/hB,MAAO,eACP4oB,MAAM,kBAAD3Q,OAAoByrE,EAAOp9E,KAAI,MAAA2R,OAAKyrE,EAAO9+D,MAAK,OAEvD+/D,GACF,CAwGea,CAAkB,CAAEzjE,IAAG2hE,OAAQpvE,IACpCmvE,kBACE1hE,GACG0hE,EAAkB,CAAE1hE,IAAG2hE,OAAQmB,IACpCnB,OAAQmB,EACRjB,mBAAmB,EACnBD,iBAAiB,EACjB5rE,OAAQC,MAGX04B,EAAW39B,OAvPO,EAwPjBmF,eAAC28C,GAAU,CAAAtvD,SACRmrC,EAAWpgC,KAAI,CAACoa,EAAG+W,IAClBtpB,gBAACosE,GAAc,CAAAh/E,SAAA,CACb2S,eAACssE,GAAiB,CAACx3E,KAAK,aAAa+K,OAAQC,IAC7CE,eAACusE,GAAc,CACb,iBAAAxsE,OAAgByS,EAAE3qB,GAAE,2BACpBw0B,QAASxS,GAjDzB,SAA8BuH,GAQ1B,IAR2B,EAC7BvH,EAAC,OACD2hE,EAAM,MACNjiD,GAKDnY,EACCkK,EAAW,CACTzR,IACA/hB,MAAO,+BACP4oB,MAAM,+BAAD3Q,OAAiCyrE,EAAOp9E,QAE/C6+E,EAA4B1jD,EAAQA,EAAQ,EAAIA,GAChDwjD,GAAcK,GAAqB,IAC9BA,EAAkB/gD,MAAM,EAAG9C,GAC9BiiD,IAEJ,CA+BkB+B,CAAsB,CACpB1jE,IACA2hE,OAAQh5D,EACR+W,UAEHl8B,SAEAmlB,EAAEpkB,SAZcokB,EAAE3qB,QAiBzB,KACJoY,gBAACgsE,GAAmB,CAAA5+E,SAAA,CAClB2S,eAACksE,GAAS,CACRH,aAAcA,EACdT,cAAeA,EACfC,kBAAmBA,EACnBrkE,KAAgC,OAA1BmmE,QAA0B,IAA1BA,OAA0B,EAA1BA,EAA4BnmE,KAClCrH,OAAQC,IAEPisE,EACD/rE,eAACmsE,GAAW,CAAA9+E,SACV2S,eAACosE,GAAkB,CACjBd,cAAeA,EACfC,kBAAmBr5D,IAAA,IAAC,EAAErI,EAAC,OAAE2hE,GAAQt5D,EAAA,OAC/Bq5D,EAAkB,CAChB1hE,IACA2hE,SACA2B,aAAa,GACb,EAEJjmE,KAAkB,OAAZ6kE,QAAY,IAAZA,OAAY,EAAZA,EAAc7kE,KACpBrH,OAAQC,MAGV,YAGQ,EC3TtB,MAAMU,GAAYlC,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAbH,CAAa,mHAEfI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YAO1CuC,GAAQz0B,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAAZH,CAAY,8BACfI,GACPA,EAAM2jC,WACF3jC,EAAMC,MAAM2C,OAAO2a,IAAIwO,MACvB/rB,EAAMC,MAAM2C,OAAO2a,IAAIC,YAChBxd,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAuCzC2iD,OA1Bcn0E,IAOf,IAPgB,UAC5BuG,EAAS,QACTiB,EAAO,QACPwb,EAAO,SACPoM,GAAW,EAAK,WAChB4Z,GAAa,EAAK,OAClBxiC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,4BAC5B,OACEI,gBAACO,GAAS,CACRZ,UAAWA,EACX2nB,SAAU8a,EACVhmB,QAASA,EACT,cAAavc,EAAWzS,SAAA,CAEvBwT,EACDb,eAAC+yB,GAAK,CACJsP,WAAYA,EACZvtC,KAAM2zB,EAAW,WAAa,aAC9B5oB,OAAQC,MAEA,EC/ChB,MAAM2tE,GAAkBnvE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAAVH,CAAU,sCACxBI,GAASA,EAAMC,MAAM0pB,QAAQC,OAAOhpB,KAMjCZ,GAAUA,EAAMgvE,WAAa,KAAO,KA2ElCC,OA5DSt0E,IAUU,IAVT,SACvBhM,EAAQ,UACRuS,EAAS,WACT8tE,GAAa,EAAK,SAClBjlD,GAAW,EAAK,WAChB4Z,GAAa,EAAK,gBAClBurC,EAAe,iBACfC,EAAgB,OAChBhuE,EAAS,SAAQ,eACjBg+C,GACMxkD,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,sBACtBqtB,EAASvJ,iBAAO,MACtB,OACE1jB,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD2S,eAAA,OAAK0tB,IAAKR,EAAO7/B,SACf2S,eAACwtE,GAAoB,CACnB3sE,QAASg9C,EACTp1B,SAAUA,EACV4Z,WAAYA,EACZhmB,QAASwxD,EACThuE,OAAQC,MAIX2oB,EACCzoB,eAAC6tB,KAAO,CACNmD,OAAQ48C,EACRrgD,UAAU,eACVwwB,WAAW,EACXC,eAAe,QACfjxB,KAAMtE,EACNyE,OAAQA,EAAOx1B,QAAQrK,SAEtByM,IAAA,IAAC,UAAEyzB,EAAS,WAAEugD,EAAY/gD,KAAMghD,EAAK,OAAEC,KAAWtvE,GAAO5E,EAAA,OACxDmG,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACytE,GAAe,IAAK/uE,EAAOgvE,WAAYA,EAAWrgF,SAChDA,IAEFqgF,EAIC1tE,eAAC6wB,GAAK,CACJC,YAAY,EACZC,gBAAgB,0BAChBC,OAAQA,IAAM,KACdC,OAAQA,IAAM,KACdzD,aAAcxtB,eAAA,UACdH,OAAQC,IAER,OACH,IAGL,OACA,ECxEV,MAAMU,GAAYlC,KAAO8wC,IAAG5wC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAVH,CAAU,0EAEVI,GAAK,GAAAqB,OAChBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAI/D0jD,GAAiB3vE,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,gBAAXH,CAAW,2EACnBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAmD7C0vC,OAnCgB70E,IAMjB,IANkB,cAC9B80E,EAAa,UACbvuE,EAAS,cACTwuE,EAAa,iBACbP,EAAgB,OAChBhuE,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,6BACtBzD,EAAOiB,cAAapE,GAA6BA,EAAMmD,QACvD,UAAE8O,GAAc2V,MAChB,SAAEzS,GAAalD,EACfmjE,EAAcjgE,GAAYhS,EAEhC,OACE4D,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAAC2tE,GAAe,CACdD,YAAY,EACZjlD,SAA4B,6BAAlB0lD,EACVP,gBAAiBQ,EACjBP,iBAAkBA,EAClBhwB,eACE79C,eAACiuE,GAAc,CAAC,wBAAsB,OAAM5gF,SAC9B,OAAXghF,QAAW,IAAXA,OAAW,EAAXA,EAAajgF,OAEjBf,SAED2S,eAACwsE,GAA0B,CACzBC,SAAU2B,EACVvuE,OAAQC,OAGF,EC9DhB,MAIMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAVH,CAAU,uCAItBkoC,GAAOloC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAATH,CAAS,2BACTI,GAAK,GAAAqB,OACXohD,cAAI,CAAChuB,KAAKm7C,KAAK5vE,EAAM6vE,SATC,IADT,OAad9nC,GAAWnoC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAATH,CAAS,2GAYpBkwE,GAAoBlwE,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,gBAAbH,CAAa,mGAI5BI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAK9Bxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAGvCuO,GAAOpsB,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAXH,CAAW,2JACTI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAUlDvhB,GAAOhL,aAAO86D,IAAW56D,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAlBH,CAAkB,qBAkDhBmwE,OAjCWp1E,IAKE,IALD,UACzBuG,EAAS,YACTi7D,EAAW,MACX7kE,EAAK,OACL6J,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,yBAC5B,OACEG,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAACwmC,GAAI,CAAC+nC,SAAUv4E,EAAM6E,OAAOxN,SAC1B2I,EAAMoC,KAAImW,GACTvO,eAACymC,GAAQ,CAAAp5C,SACP4S,gBAACuuE,GAEC,CACAnyD,QAASxS,GAAKgxD,EAAY,CAAEhxD,IAAG3C,KAAMqH,IACrC,iBAAAxO,OAAgBwO,EAAE6G,OAAM,WAAU/nB,SAAA,CAGlC2S,eAACsJ,GAAI,CACH+vD,YAAa9qD,EAAE8qD,YACfC,WAAY/qD,EAAE+qD,WACdz5D,OAAQC,IAEVE,eAAC0qB,GAAI,CAAAr9B,SAAE4gB,GAAoBM,OAPtBA,EAAE6G,eAYL,EC3FhB,MAAMmqB,GAAejhC,aAAO8+C,IAAiB5+C,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAxBH,CAAwB,yCAKvC+8C,GAAU/8C,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAAXH,CAAW,oBACZI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAiEzC6jD,OAhDMr1E,IAKO,IALN,UACpBuG,EAAS,YACTi7D,EAAW,MACX7kE,EAAK,OACL6J,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,oBACrBu+C,EAAWC,GAAgBruC,oBAAS,GAc3C,OACEhQ,eAACw9C,GAAgB,CACf59C,UAAWA,EACX+9C,aAhBJ,SAAuBY,GACrBF,EAAaE,EACf,EAeId,eACEz9C,eAACu/B,GAAY,CACX1+B,QACEb,eAACyuE,GAAiB,CAChB5T,YAlBZ,SAAgB/gE,GAMZ,IANa,EACf+P,EAAC,KACD3C,GAIDpN,EACC+gE,EAAY,CAAEhxD,IAAG3C,SACjBm3C,GAAa,EACf,EAUYroD,MAAOA,EACP6J,OAAQC,IAGZD,OAAQC,IAGZ49C,iBAAiB,SACjB3wB,KAAMqxB,EACNv+C,OAAQC,EACR89C,cAAc,QACdC,eACE79C,eAACq7C,GAAO,CAAC,iBAAAt7C,OAAgBD,EAAU,YAAWzS,SAAC,oBAEjD,ECzDC,MAGDmT,GAAYlC,KAAO8wC,IAAG5wC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAAVH,CAAU,sCAItBkhC,GAAclhC,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAAbH,CAAa,kEAGdI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAO/oB,GAAE,WAAAQ,OAC9BrB,EAAM+pB,SAAW/pB,EAAMC,MAAM2C,OAAO2a,IAAIC,UAAY,iBAIpDmzB,GAAU/wC,aAAOm6D,IAAaj6D,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAApBH,CAAoB,uBAK9BgL,GAAOhL,aAAO86D,IAAW56D,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAlBH,CAAkB,qBAGzBqwE,GAAYrwE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAAVH,CAAU,uBAGtBkgD,GAAclgD,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAAbH,CAAa,sBAChBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtDmvE,GAAiBtwE,KAAOqzD,GAAEnzD,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAATH,CAAS,wBAG1B6wD,GAAoB7wD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,eAAVH,CAAU,+BAK9BuzD,GAAOvzD,KAAO+wD,GAAE7wD,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAATH,CAAS,4CACLI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAMtDgnC,GAAOloC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAATH,CAAS,mFAEJI,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAI1D7rB,GAAK,GAAAqB,OACXozB,KAAKm7C,KAAK5vE,EAAMmwE,WArDoB,OAwDrCC,GAAiBxwE,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAATH,CAAS,iEAK1BywE,GAAWzwE,aAAOowE,IAAalwE,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAApBH,CAAoB,uBAyHtB0wE,OAtGiB31E,IAOE,IAPD,UAC/BuG,EAAS,MACT5J,EAAK,OACL6J,EAAS,SAAQ,YAEjBg7D,EAAW,aACXoU,GACM51E,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,+BACtB,WAAEyb,GAAeP,KAiBvB,MAAMm0D,EAAiBt+D,oBACrB5a,GACAuY,GAAKA,EAAE6G,UAAuB,OAAZ65D,QAAY,IAAZA,OAAY,EAAZA,EAAc75D,UAG5BsjD,EAAcwW,GAAkB,EAAIA,EAAiB,EACrDC,EAAiBn5E,EAAM6E,OAAS29D,GACtC,OACEv4D,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD2S,eAACqvC,GAAO,CACNqpB,YAAaA,EACbC,MAAO3iE,EAAMoC,KAAI,CAACmW,EAAGgb,IACnBvpB,eAAC0sB,GAAO,CACNY,cACEzjB,GA7BZ,SAAsB/P,GAMlB,IANmB,EACrB+P,EAAC,KACD3C,GAIDpN,EACC+P,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAO,oCACP4oB,MAAM,WAAD3Q,OAAamH,EAAKgH,SAAQ,UAEnC,CAiBeof,CAAc,CAAEzjB,IAAG3C,KAAMqH,IAC9Bgf,UAAU,SACVC,aACEvtB,gBAAC0uE,GAAS,CAAC,wBAAsB,OAAMthF,SAAA,CACrC2S,eAACw+C,GAAW,CAAAnxD,SAAE4gB,GAAoBM,KACjCA,EAAEE,cACDzO,eAAC4uE,GAAc,CAAAvhF,SACb4S,gBAACkvD,GAAiB,CAAA9hE,SAAA,CAChB2S,eAAC6xD,GAAI,CAAAxkE,SAAC,eACN2S,eAAA,MAAA3S,SAAKkhB,EAAEE,cAAcrgB,YAGvB,KACJ4R,eAACwmC,GAAI,CACHqoC,WAAYtgE,EAAEF,YAAYxT,OAC1B,iBAAAkF,OAAgBD,EAAU,sBAAqBzS,SAE9C2+B,iBAAOzd,EAAEF,YAAa,QAAQjW,KAAI6yB,GACjCjrB,eAAC8uE,GAAc,CAEb,wBAAsB,OAAMzhF,SAE3B49B,EAAW78B,MAHP6e,oBAAUge,EAAW78B,cASpCq/B,QACEztB,eAACw/B,GAAW,CACVnjB,QAASxS,GAAKgxD,EAAY,CAAEhxD,IAAG3C,KAAMqH,IAErCka,SACIwmD,EACE1gE,EAAE6G,SAAW65D,EAAa75D,OAC1B85D,GAAkB,GAAKxW,IAAgBnvC,EAG7C,iBAAAxpB,OAAgBkN,oBAAUsB,EAAEL,UAAS,WAAU7gB,SAE/C2S,eAACsJ,GAAI,CACH+vD,YAAa9qD,EAAE8qD,YACfC,WAAY/qD,EAAE+qD,WACdz5D,OAAQC,KANLyO,EAAE6G,QAUXvV,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIkN,oBAAUsB,EAAEL,eAGzCkqD,gBACE+W,EAAiB3W,GAA4BxiE,EAAM6E,SAGtDs0E,EACCnvE,eAAC+uE,GAAQ,CAAClU,YAAaA,EAAa7kE,MAAOA,EAAO6J,OAAQC,IACxD,OACM,ECnLhB,MAAMsvE,GAAiB9wE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAVH,CAAU,6HAChBI,GAAK,GAAAqB,OACfrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QACnD7rB,GAAK,GAAAqB,OAChBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QACpD7rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAC7C9/B,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAIlDglB,GAAqBvxC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAVH,CAAU,kHAE1BI,GACPA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAO2a,IAAIwO,MACvB/rB,EAAMC,MAAM2C,OAAO2a,IAAIC,YAEdxd,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAIhD0hD,GAAcxxC,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAZH,CAAY,yBAG1B+wE,GAAc/wE,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAXH,CAAW,uBAkHhBgxE,OApGOj2E,IAOR,IAPS,UACrBuG,EAAS,WACTyiC,GAAa,EAAK,SAClB7P,EAAQ,iBACR+8C,EAAgB,OAChB1vE,EAAS,SAAQ,UACjB+T,GACMva,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,oBACtB,MAAE5G,GAAU2a,GAEZ,WAAE0H,GAAeP,KAEvB,GAAIzL,kBAAQigE,GACV,OAAO,KAGT,MAAMC,EAAiBtrB,kBAAQqrB,EAAkB,CAAC,SAAU,CAAC,QACvDE,EAAqB7+D,oBACzB4+D,GACCjhE,GAAkCA,EAAE1mB,KAAO+rB,EAAU/rB,KAmCxD,MAAMynD,EACJjN,GAAcotC,IAAuBD,EAAe30E,OAAS,EACzD00C,EAAiBlN,GAAqC,IAAvBotC,EAE/BC,EACJ1vE,eAACovE,GAAc,CAAA/hF,SACZ4L,IAAU7I,GACP,cACA6I,IAAU7I,GACV,gBACA,oBAGR,OACE4P,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACqvC,GAAO,CACNxuC,QAAS6uE,EACTpgC,eAAgBA,EAChBC,eAAgBA,EAChBC,WACEvvC,gBAAC4vC,GAAkB,CAACtoB,SAAU+nB,EAAejiD,SAAA,CAC3C2S,eAACqvE,GAAW,CAACzvE,UAAU,iBAAgBvS,SAAC,SACxC2S,eAAC8vC,GAAW,CAACh7C,KAAK,iBAAiB+K,OAAQC,OAG/C0yB,SAAUA,CAAC3oB,EAAqB6oB,IAzDtC,SAAuB54B,GAUnB,IAVoB,EACtB+P,EAAC,MACD0f,EAAK,UACLmJ,EAAS,WACT4rC,GAMDxkE,EACC,MAAM61E,EACJj9C,IAAcvrC,EACVm3E,EAAW/0C,EAAQ,GACnB+0C,EAAW/0C,EAAQ,GAEzBiJ,EAASm9C,GACTr0D,EAAW,CACTzR,IACA/hB,MAAO,8BACP4oB,MAAM,qBAAD3Q,OAAuB2yB,EAAS,eAAA3yB,OACnC4vE,EAAiB3mF,YAAW,MAAA+W,OACzBlG,GAAgB,CACnBE,OAAQ,aACRC,UAAW21E,EAAiB52E,QAC5B,KAAAgH,OAAIlG,GAAgB,CACpBE,OAAQ,aACRC,UAAW21E,EAAiBn3E,MAC5B,MAEN,CA4BQo3E,CAAe,CACb/lE,IACA0f,MAAOkmD,EACP/8C,YACA4rC,WAAYkR,IAGhB//B,WACExvC,gBAAC4vC,GAAkB,CAACtoB,SAAUgoB,EAAeliD,SAAA,CAC3C2S,eAAC8vC,GAAW,CAACh7C,KAAK,gBAAgB+K,OAAQC,IAC1CE,eAACqvE,GAAW,CAACzvE,UAAU,iBAAgBvS,SAAC,YAG5CwS,OAAQC,KAEN,E,0BCrJV,MAAMU,GAAYlC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAAXH,CAAW,kCAEdI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAuBzCglD,OAbgBx2E,IAIjB,IAJkB,UAC9BuG,EAAS,OACTC,EAAS,SAAQ,UACjB+T,GACMva,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,8BAC5B,OACEG,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACtDumB,EAAU5qB,aACD,EChBhB,MAAMwX,GAAYlC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAXH,CAAW,kCAEdI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElDilD,GAAaxxE,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,gBAAXH,CAAW,sBACbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAEtDuxC,GAAYzxE,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAXH,CAAW,oBA6Cd0xE,OAlCsB32E,IAIvB,IAJwB,UACpCuG,EAAS,OACTC,EAAS,SAAQ,UACjB+T,GACMva,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,sCACtB,QAAEvH,EAAO,YAAEtP,EAAaiQ,MAAOg3E,GAAgBr8D,GAC7CxJ,KAAMwO,GAA0Bb,KAClCm4D,EAAsC,OAArBt3D,QAAqB,IAArBA,OAAqB,EAArBA,EAAuB3F,OAAO3E,MAClDkE,GAAsBA,EAAEla,UAAYA,IAGjC63E,EAAS,GAAApwE,OACbkwE,IAAgB7/E,GACZ,cACA6/E,IAAgB7/E,GAChB,gBACA,kBAAiB,OAAA2P,OACjB/W,GAEN,OACEiX,gBAACO,GAAS,CACRZ,UAAWA,EACX,cAAaE,EACb,wBAAsB,OAAMzS,SAAA,CAE5B2S,eAAC8vE,GAAU,CAAAziF,SAAE8iF,IACVD,EACDlwE,eAAC+vE,GAAS,CAAA1iF,SAAE6iF,EAAeE,YACzB,OACM,ECrDhB,MAAMC,GAAwB/xE,aAAO8xB,IAAY5xB,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,gBAAnBH,CAAmB,4CAK3CotB,GAASptB,KAAOqtB,OAAMntB,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAbH,CAAa,4FACZI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIsO,OAChC7rB,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAK/DkH,GAAenzB,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAAbH,CAAa,0JAClBI,GACZA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOgmB,OAAOC,SAASK,QAAQC,GAC3CnpB,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQA,QAAQC,KAEvCnpB,GACPA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOgmB,OAAOC,SAASK,QAAQO,GAC3CzpB,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQA,QAAQO,KAEnCzpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAKhCnsB,GAClBA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOgmB,OAAOC,SAASU,MAAMJ,GACzCnpB,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQK,MAAMJ,KACrCnpB,GACPA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOgmB,OAAOC,SAASU,MAAME,GACzCzpB,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQK,MAAME,KA4CnCmoD,OA7Bcj3E,IAQf,IARgB,SAC5BhM,EAAQ,UACRuS,EAAS,iBACT2wE,GAAmB,EAAK,SACxBC,EAAQ,SACRj+C,EAAQ,iBACRk+C,GAAmB,EAAI,OACvB5wE,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,4BAC5B,OACEI,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD2S,eAACqwE,GAAqB,CAACh0D,QAASm0D,EAAU3wE,OAAQC,IACjDzS,EACAojF,EACCzwE,eAAC0rB,GAAM,CAAAr+B,SACL2S,eAACyxB,GAAY,CACXlK,SAAUgpD,EACVl0D,QAASkW,EACT,iBAAAxyB,OAAgBD,EAAU,kBAAiBzS,SAC5C,YAID,OACA,ECvDV,MAAMmT,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAVH,CAAU,uEACZI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QACpC5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAI/DmmD,GAAuBpyE,aAAOqyE,oBAAgBnyE,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAAvBH,CAAuB,ygDACrCI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAcpCZ,GAAK,GAAAqB,OAChBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAC1D7rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAexBxd,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAIjD7rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIob,aAMpC34B,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIob,aAC/B34B,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU7zB,QAAQw/B,QAI9C//B,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIsO,OAC7B7rB,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAQzD7rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG1D7rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAC5Bxd,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAQzCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAU7CnsB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAC1Bxd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAC7C9/B,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAI7CnsB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAW3B/rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIob,aAMjC34B,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIsO,OAI7B7rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAEnC5rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIsO,OAO5B7rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQw/B,QACjD//B,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAK5Bxd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAE/Cd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAG3Bxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAYlBxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAMxDzd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAgJ3By0D,OA1HWv3E,IAOZ,IAPa,UACzBuG,EAAS,SACT4wE,EAAQ,SACRj+C,EAAQ,oBACRs+C,EAAmB,OACnBhxE,EAAS,SAAQ,UACjB+T,GACMva,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,yBACtB,OAAEqU,GAAWg2B,gBACZ4mC,EAAkBC,GAAuB/gE,mBAE9C,CACAnoB,GAAI+rB,EAAU/rB,GACd8nB,QAASjX,KAAOkb,EAAUpb,IAAKE,KAAOuB,UAAU+2E,SAChDthE,UAAWhX,KAAOkb,EAAU7a,MAAOL,KAAOuB,UAAU+2E,SACpD/pF,IAAK,cAsCP,OACE+Y,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAACswE,GAAoB,CACnBE,SAAUA,EACVj+C,SAAUA,IAvChB,SAAsBz4B,GAMlB,IANmB,cACrBm3E,EAAa,UACbC,GAIDp3E,EACC,MAAMq3E,EAAeF,EAAc3iE,MAChCC,GAAkCA,EAAE1mB,KAAOqpF,EAAUrpF,MAM1C,OAAZspF,QAAY,IAAZA,OAAY,EAAZA,EAAc34E,OAAQ04E,EAAUvhE,QAAQxW,gBAC5B,OAAZg4E,QAAY,IAAZA,OAAY,EAAZA,EAAcp4E,SAAUm4E,EAAUxhE,UAAUvW,cAE5Co5B,EAAS4+C,GAET5+C,EAAS,IAIJzpC,EAAuBd,EAAeC,QAEzC8Q,MAAON,GACLC,KAAOw4E,EAAUxhE,WAAWpV,QAAQlT,IAEtCoR,IAAKC,GACHC,KAAOw4E,EAAUvhE,SAASpV,MAAMnT,KAIxC,CAOQgqF,CAAc,CACZH,cAAeJ,EACfK,UAAWJ,IAGfjxE,OAAQC,EAAWzS,SAEnB2S,eAAC0wE,GAAoB,CACnBW,OAAQ,EAERC,QAAS,IAAIz4E,MAAK,IAAIA,MAAOk6D,UAAY,OACzCvgC,SAAUxkB,IAA4D,IAA3D,UAAEkjE,GAAmDljE,EAC9D,MAAMmjE,EAAeN,EAAoBviE,MACtCC,GAAkCA,EAAE1mB,KAAOqpF,EAAUrpF,KAGpDqsB,IAAWjpB,GAKC,OAAZkmF,QAAY,IAAZA,OAAY,EAAZA,EAAc34E,OAAQ04E,EAAUvhE,QAAQxW,gBAC5B,OAAZg4E,QAAY,IAAZA,OAAY,EAAZA,EAAcp4E,SAAUm4E,EAAUxhE,UAAUvW,eAE5C43E,EAAoBG,GAGtBH,EAAoBG,EACtB,EAEFK,OAAQ,CAACT,GACTU,aAAa,EACbC,aAAcZ,EAAoBz4E,KAC/BwjC,IACC,MAAM,IAAEpjC,EAAG,MAAEO,EAAK,GAAElR,EAAE,cAAEkB,GAAkB6yC,EAE1C,MAAO,CACL9zC,MACEiB,IAAkBf,EAAeI,QAC/B4X,eAACgwE,GAA4B,CAC3BnwE,OAAQhY,EACR+rB,UAAWgoB,IAGb57B,eAAC6vE,GAAsB,CAAChwE,OAAQhY,EAAI+rB,UAAWgoB,IAEnD5qB,MAAOA,KAAA,CACLnpB,KAEA8nB,QAASjX,KAAOF,EAAKE,KAAOuB,UAAU+2E,SACtCthE,UAAWhX,KAAOK,EAAOL,KAAOuB,UAAU+2E,WAE5CriD,WAAYA,IAAMmiD,EAAiBjpF,KAAOA,EAC3C,IAGL6qC,UAAU,kBAGJ,EClShB,MAAM08C,GAAiB9wE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAVH,CAAU,6HAChBI,GAAK,GAAAqB,OACfrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QACnD7rB,GAAK,GAAAqB,OAChBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QACpD7rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAC7C9/B,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAIlDglB,GAAqBvxC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,gBAAVH,CAAU,+DAE1BI,GACPA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAO2a,IAAIwO,MACvB/rB,EAAMC,MAAM2C,OAAO2a,IAAIC,YAIzB4zB,GAAcxxC,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAZH,CAAY,yBAG1BozE,GAAkBpzE,aAAOmjD,IAAUjjD,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAjBH,CAAiB,2BAGnC+wE,GAAc/wE,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAXH,CAAW,uBAGzBqzE,GAAUrzE,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAXH,CAAW,2FA0JZszE,OA1IUv4E,IAMX,IANY,UACxBuG,EAAS,WACTyiC,GAAa,EAAK,UAClBzuB,EAAS,SACT4e,EAAQ,OACR3yB,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,uBACtB,WAAEyb,GAAeP,KAEvB,SAAS82D,EACPn/C,EACAo/C,GAEA,MAAMt4E,EAAOpS,GACP,MAAE2R,EAAK,IAAEP,GAAQs5E,EAGjBC,GACH34E,GAAkB,CACjBE,KAAMP,EACNQ,WAAYf,EACZgB,SAEA,IACDk5B,IAAcvrC,GAAuB,EAAI,GAa5C,MAAO,CAXcsR,GACnBC,KAAOK,GACJqlE,IAAI2T,EAAgBv4E,GACpBc,QAAQd,IAEMf,GACjBC,KAAOF,GACJ4lE,IAAI2T,EAAgBv4E,GACpBe,MAAMf,IAIb,CAsCA,MAKMw4E,IAL+B54E,GAAkB,CACrDE,KAAMsa,EAAU7a,MAChBQ,WAAYqa,EAAUpb,IACtBgB,KAAMpS,IAGN4Y,eAAC0xE,GAAe,CACdp1E,OAAQ,CAAEvC,OAAQ,CAAEvB,IAAK,OAAQO,MAAO,SACxC6a,UAAWA,EACX/T,OAAQC,IAGVE,eAACkjC,GAAI,CAACnpC,OAAO,OAAOC,UAAW4Z,EAAU7a,MAAO8G,OAAQC,KAGnDmyE,EAAWC,GAAWL,EAC3B1qF,EACAysB,GAEI07B,EACJjN,GACA4vC,GACEv5E,OACG4B,QAAQ,OACRnB,cAEP,OACE6G,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACqvC,GAAO,CACNxuC,QACEb,eAACovE,GAAc,CAAA/hF,SACb2S,eAAC2xE,GAAO,CAAAtkF,SAAE2kF,MAGd1iC,eAAgBjN,EAChBkN,eAAgBlN,EAChBmN,WACEvvC,gBAAC4vC,GAAkB,CAACtoB,SAAU+nB,EAAejiD,SAAA,CAC3C2S,eAACqvE,GAAW,CAACzvE,UAAU,iBAAgBvS,SAAC,SACxC2S,eAAC8vC,GAAW,CAACh7C,KAAK,iBAAiB+K,OAAQC,OAG/C0yB,SAAUA,CAAC3oB,EAAqB6oB,IA9EtC,SAA0B54B,GAQtB,IARuB,EACzB+P,EAAC,UACD6oB,EAAS,UACT9e,GAKD9Z,EAEC,GAAI44B,IAAcvrC,IAAwBmoD,EAAgB,CACxD,MAAM,cAAEvmD,GAAkB6qB,GACnBu+D,EAAcC,GAAcP,EACjCn/C,EACA9e,GAGF4e,EAAS,IACJ1pC,EAAuBC,GAC1BgQ,MAAOo5E,EACP35E,IAAK45E,IAEP92D,EAAW,CACTzR,IACA/hB,MAAO,8BACP4oB,MAAM,qBAAD3Q,OAAuB2yB,EAAS,MAAA3yB,OAAKlG,GAAgB,CACxDE,OAAQ,aACRC,UAAWm4E,IACX,KAAApyE,OAAIlG,GAAgB,CACpBE,OAAQ,aACRC,UAAWo4E,IACX,MAEN,CACF,CA6CQC,CAAkB,CAChBxoE,IACA6oB,YACA9e,cAGJ67B,WACExvC,gBAAC4vC,GAAkB,CAACtoB,SAAU8a,EAAWh1C,SAAA,CACvC2S,eAAC8vC,GAAW,CAACh7C,KAAK,gBAAgB+K,OAAQC,IAC1CE,eAACqvE,GAAW,CAACzvE,UAAU,iBAAgBvS,SAAC,YAG5CwS,OAAQC,KAEN,EC/KV,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAVH,CAAU,sCAItBg0E,GAAiBh0E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAAVH,CAAU,uCAChBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAGtD8yE,GAAiBj0E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAAVH,CAAU,mDAElBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAGlD2nD,GAASl0E,aAAOgxE,IAAc9wE,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAArBH,CAAqB,iBAG9Bm0E,GAAYn0E,aAAOszE,IAAiBpzE,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAxBH,CAAwB,iBAqK3Bo0E,OA3JkBr5E,IAMnB,IANoB,cAChC80E,EAAa,UACbvuE,EAAS,gBACTguE,EAAe,iBACf+E,EAAgB,OAChB9yE,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,0BACtB,WAAEyb,GAAeP,MACjB,OAAE7G,GAAWg2B,gBACb,UAAEh/B,EAAS,gBAAEoX,GAAoBzB,MACjC,UAAEjN,EAAS,MAAE1b,EAAK,QAAEI,EAAO,KAAE4O,GAASgE,GAErC0nE,EAAmBC,GAAwB7iE,oBAAS,GAErDxV,EAAkB6C,cACrBpE,GAA6BA,EAAMsC,QAAQf,mBAG5C4P,KAAM+H,EACNiiC,UAAW0+B,GACT76D,GAAkB,CAAEjd,KAAK,GAAD+E,OAAS,OAAJmH,QAAI,IAAJA,OAAI,EAAJA,EAAMkO,OAAM,SAASlO,SAEhD6rE,EAAmD1jE,mBACvD,IACQ,OAAJnI,QAAI,IAAJA,KAAMoL,WACE,OAAJpL,QAAI,IAAJA,KAAMiH,eACN2kE,GAA2C,OAAd3gE,QAAc,IAAdA,KAAgBtX,OAC3C8T,sBACEwD,EAAe/Z,KAAKoa,GAClBva,GAA4Bua,MAGhC,GACAta,EACFD,GAA4BC,GAC5B,GACF,IACN,CAACA,EAAO46E,EAAyB3gE,EAAgBjL,IAG7CqoE,EAAmBlgE,mBACvB,IACI/W,EACEy6E,EAAc9hE,QACXT,GAAkCA,EAAElY,UAAYA,IAEnD,IACN,CAACy6E,EAAez6E,IAGZu4E,EAAsBxhE,mBAAQ,IAC3B6E,IAAWjpB,EACd8nF,EACA,IACKA,EACHv4E,EAAgB3R,EAAaF,WAC7B6R,EAAgB3R,EAAaH,WAC7B8R,EAAgB3R,EAAaP,WAC7BkS,EAAgB3R,EAAaN,kBAC7BiS,EAAgB3R,EAAaL,kBAC7BgS,EAAgB3R,EAAaJ,oBAElC,CAACsqF,EAAev4E,EAAiB0Z,IAE9B8+D,EAAyBx1E,sBAC7BulC,oBAASmuC,IACP5uD,EAAgB,CAAE1O,UAAWs9D,IAC7B2B,GAAqB,EAAM,GAC1B,KACH,IAGF,SAASI,EAAgB/B,GACvB2B,GAAqB,GACrBG,EAAuB9B,EACzB,CAoCA,OAASt9D,EACP3T,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD2S,eAAC2tE,GAAe,CACdllD,SAA4B,cAAlB0lD,EACVP,gBAAiBA,EACjBC,iBAAkBA,IAAM8E,EAAiB,aACzC90B,eACE79C,eAACuyE,GAAc,CAAC,wBAAsB,OAAMllF,SACzCumB,EAAU5qB,cAGf6W,OAAQC,EAAWzS,SAEnB2S,eAAC4wE,GAAiB,CAChBJ,SAAU5C,EACVr7C,SAjDR,SAAmC2+C,GACjC,MAAM,IAAE14E,EAAG,MAAEO,EAAOlR,GAAIqrF,EAAkB,cAAEnqF,GAAkBmoF,EACxDiC,EAAc,CAClBrrF,MAAO,8BACP4oB,MAAM,IAAD3Q,OAAMlG,GAAgB,CACzBE,OAAQ,aACRC,UAAWjB,IACX,KAAAgH,OAAIlG,GAAgB,CACpBE,OAAQ,aACRC,UAAWxB,IACX,MAEJ,GAAIzP,IAAkBf,EAAeI,QAAS,CAC5C,MAAMgrF,EAAqBL,EAAczkE,MACtCkC,GAAkCA,EAAE3oB,KAAOqrF,IAE9C,GAAME,EAAoB,CACxB,MAAQpqF,YAAauP,GAAe66E,EAEpC93D,EAAW,IACN63D,EACHziE,MAAM,yCAAD3Q,OAA2CxH,EAAU,KAAAwH,OAAIozE,EAAYziE,QAE9E,CACF,MACE4K,EAAW,IACN63D,EACHziE,MAAM,kCAAD3Q,OAAoCmzE,EAAkB,KAAAnzE,OAAIozE,EAAYziE,SAG/E4R,EAAgB,CAAE1O,UAAWs9D,IAC7BtD,GACF,EAkBQiD,oBAAqBA,EACrBhxE,OAAQC,EACR8T,UAAWA,MAGf5T,eAACsyE,GAAc,CAAAjlF,SACXmc,OAAOmH,OAAO9nB,GAAc6gB,SAASkK,EAAU/rB,IAS/CmY,eAACyyE,GAAS,CACRpwC,WAAYuwC,EACZpgD,SAAUygD,EACVpzE,OAAQC,EACR8T,UAAWA,IAZb5T,eAACwyE,GAAM,CACLjD,iBAAkBA,EAClBltC,WAAYuwC,EACZpgD,SAAUygD,EACVpzE,OAAQC,EACR8T,UAAWA,SAYjB,IAAI,ECrLV,MAAMpT,GAAYlC,KAAO8wC,IAAG5wC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAAVH,CAAU,2BAGtBie,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAVH,CAAU,oEAK3B+0E,GAAmB/0E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAAVH,CAAU,wEAM7Bg1E,GAAmBh1E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAAVH,CAAU,+DAK7Bi1E,GAAcj1E,aAAO4vE,IAAuB1vE,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAA9BH,CAA8B,wBAG5Ck1E,GAAkBl1E,aAAOsC,IAAcpC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAArBH,CAAqB,iBAqL9Bm1E,OA3KUp6E,IAGgB,IAADq6E,EAAA,IAHd,UACxB9zE,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,uBACrBsuE,EAAewE,GAAoB3iE,mBAAwB,OAC5D,WAAEsL,GAAeP,KAEjB1f,EAAQgC,cAAapE,GAA6BA,EAAMoC,SACxD,oBACJ0mB,EAAmB,mBACnBU,EAAkB,UAClBvX,EAAS,gBACToX,GACEzB,MACE,KAAE3Z,GAASgE,EACXsJ,EAAc+C,KACd8yB,EAAcC,6BACZlgC,KAAMsiE,GAAqBj9D,MAC3BrF,KAAMuN,GAAqBP,KAC7B2J,EAAUC,eACV3I,EAAQC,aAAmC,YAC3Cq7D,EAAer7D,aAAa,IAAAvY,OAC5B9U,EAAsB,KAAA8U,OAAInT,EAAqBE,aAAY,cAE3DonB,EAAc,OAALmE,QAAK,IAALA,OAAK,EAALA,EAAO3M,OAAOwI,OACvBzC,EAAsB,OAAZkiE,QAAY,IAAZA,OAAY,EAAZA,EAAcjoE,OAAO+F,QAC/BwE,EAAa/K,EAAU+K,WAIvB29D,EAAqCvkE,mBAAQ,KACjD,GAAsB,OAAhBsI,QAAgB,IAAhBA,KAAkB9c,QACA,OAAhB8c,QAAgB,IAAhBA,KAAkB9c,QAAY2Z,EAAa,CAC/C,MAAOq/D,EAAkBC,GAAcjiE,oBACrC8F,GACCpJ,GAAqBA,EAAE6G,UAAsB,OAAXZ,QAAW,IAAXA,OAAW,EAAXA,EAAaY,UAElD,GAAMy+D,EACJ,MAAO,IAAIA,KAAqBC,EAEpC,CAEF,MAAO,EAAE,GACR,CAACn8D,EAAkBnD,IAEtB,GACEN,IAAWjpB,GACXipB,IAAWjpB,GACXipB,IAAWjpB,GACXipB,IAAWjpB,EAEX,OAAO,KAGT,MAAM8oF,GACC,OAAL14E,QAAK,IAALA,OAAK,EAALA,EAAQ,+BAA4C,OAAZu4E,QAAY,IAAZA,MAAc/4E,WAAYqM,EAC9D8sE,EAAyC,OAAhBtH,QAAgB,IAAhBA,GAA6B,QAAbgH,EAAhBhH,EAAkBr+D,mBAAW,IAAAqlE,OAAb,EAAhBA,EAA+B1jD,MAC3DzhB,KAA0C,OAADA,QAAC,IAADA,MAAGrH,QAG/C,SAAS2mE,EAAiBoG,GACxB34D,EAAW,CACTxzB,MAAOmsF,EACPvjE,MAAM,WAAD3Q,OAAaouE,IAAkB8F,EAAa,SAAW,UAE9DtB,EAAiBxE,IAAkB8F,EAAa,KAAOA,EACzD,CA4DA,OACEj0E,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAACy8C,GAAkB,CAAApvD,SACjB4S,gBAACsc,GAAc,CAAAlvB,SAAA,CACb4S,gBAACozE,GAAgB,CAAAhmF,SAAA,CACd2mF,EACCh0E,eAACuzE,GAAW,CACVpF,cAAeA,EACfC,cAAeA,KAjE3B9yD,EAAW,CACTxzB,MAgE6C,2BA/D7C4oB,MAAO,gBAETiiE,EAAiB,OA8DL9E,iBAAkBA,IAChBA,EAAiB,4BAEnBhuE,OAAQC,IAER,KACHi0E,EACC/zE,eAACwzE,GAAe,CACdzyE,gBAAiBuO,kBAAQskE,GACzB/yE,QACEb,eAACgvE,GAAuB,CACtBh5E,MAAO49E,EACP/zE,OAAQC,EACR+6D,YAhElB78D,eAA0BlE,GAMtB,IANuB,EACzB+P,EAAC,KACD3C,GAIDpN,EACC+P,EAAEyS,gBAOIhB,EAAW,CACfzR,IACA/hB,MAAM,gBAADiY,OAAkBmH,EAAKkO,QAC5B1E,MAAM,kBAAD3Q,OAAoBmH,EAAKgH,SAAQ,WAKxCoU,EAAgB,CAAEpb,OAAM+O,WAAYA,GAAc,OAAQ,GAGpDxE,GACJsP,EAAQ6rB,QACN7qB,EAAoB,CAClBV,gBAAiBoB,EAAmBpB,mBAO1CgpB,EAAYM,kBAAkB,gBAC9BN,EAAYM,kBAAkB,uBAC9BN,EAAYM,kBAAkB,mBAC9BN,EAAYM,kBAAkB,iBAC9BN,EAAYM,kBAAkB,CAAC,QAAS,CAAE3vC,KAAM,uBAClD,EAyBkBi0E,aAAc/nE,IAGlBrH,OAAQC,IAER,QAENE,eAACszE,GAAgB,CAAAjmF,SACf2S,eAAC0yE,GAAiB,CAChBvE,cAAeA,EACfP,gBAAiBA,KAlF3BtyD,EAAW,CACTxzB,MAiF+C,YAhF/C4oB,MAAO,uBAETiiE,EAAiB,OA+EPA,iBAAkBA,IAAM9E,EAAiB,aACzChuE,OAAQC,YAKN,ECjOhB,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAAVH,CAAU,8EAOtBszB,GAActzB,KAAOuzB,KAAIrzB,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAXH,CAAW,uEAOzBkzB,GAAkBlzB,aAAO,YAAWE,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAlBH,CAAkB,uEAK9BI,GAAK,aAAAqB,OAAiBrB,EAAMC,MAAM2C,OAAO2a,IAAIuU,aAGnDiB,GAAenzB,aAAO,SAAQE,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAAfH,CAAe,oHAGdI,GAClBA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAO2a,IAAIwO,MACvB/rB,EAAMC,MAAM2C,OAAO2a,IAAIE,aAEpBzd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAKrC4pD,GAAgB51E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAVH,CAAU,iEAM1B61E,GAAc71E,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAXH,CAAW,wDAMzB81E,GAAQ91E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAAVH,CAAU,sCAKlB+1E,GAAW/1E,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,eAAZH,CAAY,qBAIvBg2E,GAAch2E,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAXH,CAAW,sDAGdI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAyE7C80E,OAhEMl7E,IAIM,IAJL,OACpBwG,EAAM,qBACN20E,EAAoB,kBACpBC,GACMp7E,EACN,MAAOgN,EAASquE,GAAc1kE,mBAAS,KAChC2kE,EAAQC,GAAa5kE,mBAAS,IAC9B6kE,EAAQC,GAAa9kE,oBAAS,GAErC,OACE/P,gBAACO,GAAS,CAAAnT,SAAA,CACR4S,gBAACi0E,GAAa,CAAA7mF,SAAA,CACZ2S,eAACm0E,GAAW,CAAA9mF,SAAC,sBACb2S,eAACo0E,GAAK,CAAA/mF,SACHkzB,MAAMC,KAAK,CAAE3lB,OAAQ,IAAK,CAACk6E,EAAG9nC,IAAMA,EAAI,IAAG70C,KAAI48E,GAE5Ch1E,eAAA,OACEqc,QAASA,IAAMu4D,EAAUI,GACzB,iBAAAj1E,OAAgBF,EAAM,iBAAAE,OAAgBi1E,GAAe3nF,SAGrD2S,eAACq0E,GAAQ,CACPv/E,KAAMkgF,GAAgBL,EAAS,OAAS,cACxCtzE,MAAO01B,GAAaz1B,OAAO2a,IAAIE,WAC/Btc,OAAM,QAAAE,OAAUi1E,MALbA,UAYf/0E,gBAAC2xB,GAAW,CACVW,SAAUhX,IACRi5D,EAAqB,CACnBnuE,UACAsuE,OAAQA,EAAOjtC,WACfnsB,QACA05D,WAAYp1E,EACZuG,SAAUquE,IAEZC,EAAW,IACXE,EAAU,GACVE,GAAU,EAAK,EACfznF,SAAA,CAEF2S,eAAA,SAAA3S,SACE2S,eAACwxB,GAAe,CACd9gB,MAAOrK,EACPmsB,SAAUjX,GAASm5D,EAAWn5D,EAAM2R,OAAOxc,OAC3C,iBAAA3Q,OAAgBF,EAAM,0BAG1BG,eAACyxB,GAAY,CACXlK,UAAWlhB,GAAsB,IAAXsuE,EACtB35E,KAAK,SACL0V,MAAM,SACN,iBAAA3Q,OAAgBF,EAAM,gBAGzBg1E,GAAU70E,eAACs0E,GAAW,CAAAjnF,SAAC,mCACd,EC/HhB,MAAM6nF,GAAiB52E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAVH,CAAU,wFAQ3B62E,GAAa72E,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAATH,CAAS,6IAGXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAEnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAKtD42C,GAAc92E,KAAO+2E,OAAM72E,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAbH,CAAa,gDAM3Bg3E,GAAch3E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAVH,CAAU,+FAQxBi3E,GAAcj3E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAVH,CAAU,sFAQxBk3E,GAAoBl3E,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAATH,CAAS,iEAClBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAEnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAGtDi3C,GAAiBn3E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAVH,CAAU,iEAM3Bo3E,GAAUp3E,aAAO,QAAOE,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,gBAAdH,CAAc,yFACnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAiD5Bw5D,OAjCGt8E,IAOS,IAPR,MACjB/P,EAAK,kBACLmrF,EAAiB,gBACjBmB,EAAe,IACftqC,EAAG,aACHuqC,EAAY,qBACZrB,GACMn7E,EACN,OACE4G,gBAACi1E,GAAc,CAAA7nF,SAAA,CACb4S,gBAACw1E,GAAc,CAAApoF,SAAA,CACb2S,eAACm1E,GAAU,CAAA9nF,SAAE/D,IACZusF,EAAe71E,eAAC01E,GAAO,CAAAroF,SAAC,SAAiB,QAE5C2S,eAACo1E,GAAW,CAAC9rF,MAAOA,EAAO+W,IAAKirC,IAChCrrC,gBAACq1E,GAAW,CAAAjoF,SAAA,CACV4S,gBAACs1E,GAAW,CAAAloF,SAAA,CACV2S,eAACw1E,GAAiB,CAAAnoF,SAAEonF,IACpBz0E,eAACo/B,GAAQ,CACPC,SAAUu2C,EACV/1E,OAAM,GAAAE,OAAKzW,EAAK,0BAGpB0W,eAACu0E,GAAY,CACX10E,OAAQvW,EACRkrF,qBAAsBA,EACtBC,kBAAmBA,SAGR,E,UChGd,MCYM3W,GAaTA,CACFgY,EACA/X,KAYA,MAAO5pB,EAAY4hC,GAAiB/lE,oBAAS,IACtC3F,EAAO2rE,GAAYhmE,oBAAS,IAC5BgvB,EAAQi3C,GAAajmE,mBAA6C,IACnEvE,EAAsBpO,cAAYpE,GACtCiT,cAAIjT,EAAO,0BAEPsC,EAAU8B,cAAYpE,GAASiT,cAAIjT,EAAO,aAC1C0S,EAAmBtO,cAAYpE,GACnCiT,cAAIjT,EAAO,8BAEP4hB,EAAUve,GAAOC,SAiGvB,OA1DA6T,qBAAU,KACR,WACE,GAAKlP,sBAAY68D,GAIV,CACL,MAAMpG,EAAgBme,EAASI,YAAY99E,KACxCq9B,GAOaA,EAAM0gD,eAEtB,IACE,IAAK9rE,IAAU8pC,EAAY,CACzB4hC,GAAc,GACd,MAAMK,OD5Gap4E,WAII,IAJG,YACpCyN,EAAW,SACXE,EAAQ,OACRqzB,GACa3lC,EAOb,aANuByR,GAAUoB,IAAI,IAADnM,OAAK4L,EAAQ,SAAS,CACxDjB,QAAS,CACPmB,cAAc,UAAD9L,OAAY0L,IAE3BC,OAAQ,CAAE2qE,MAAOr3C,EAAOxV,KAAK,SAEfpf,IAAI,ECiG0CksE,CAClD,CACE7qE,cACAE,WACAqzB,OAAQ24B,IAGProD,kBAAQ8mE,IACXH,EACEzsE,OAAO+L,QAAQ6gE,GAAeh+E,KAAKq9B,IAI1B,CACL5tC,GAAI4tC,EAAM,GACV6V,IAAK7V,EAAM,QAKnBsgD,GAAc,EAChB,CACF,CAAE,MAAOnrC,GACPqrC,EAAU,IACVD,GAAS,GACTD,GAAc,GACdzW,cAAUC,IACRA,EAAM1gB,WAAW,qCAAsC,CACrDpzC,cACAE,WACAqzB,OAAQ24B,IAEV7tD,aAAiB8gC,EAAI,GAEzB,CACF,MApDEmrC,IAAgBhY,EAAY5pB,YAC5B6hC,IAAWjY,EAAY1zD,OACvB4rE,EAAUlY,EAAY/+B,OAmDzB,EAvDD,EAuDI,GACH,CAACvzB,EAAaE,IACV,CAAEqzB,SAAQmV,aAAY9pC,QAAOksE,aA/FpCv4E,eAA2B3E,GAKQ,IALP,WAC1B47E,EAAU,SACV7uE,EAAQ,OACRuuE,EAAM,QACNtuE,GACehN,EACf,MAAMw6C,EAAgB,CACpBpoC,cACAoP,UACAlP,WACAD,OAAQ,CACNnQ,UACA0gC,SAAU,CACRg5C,aACA7uE,WACAuuE,SACA6B,gBAAiBnwE,GAEnBsV,QAAS,CACPG,WAAY,gBACZ9hB,UAAWvB,GAAoB,IAAII,SAIzC,IACE8hB,GAAUk5B,EACZ,CAAE,OAAO,UAAE4iC,IACT97D,GAAU,IACLk5B,EACHnoC,OAAQ,IACHmoC,EAAcnoC,OACjBrB,MAAOosE,IAGb,CACF,EA4DkD,ECxH9CvB,GAAiB52E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAVH,CAAU,gEAM3BkC,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAAVH,CAAU,oGAUtBie,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAVH,CAAU,8DACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QACpC5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAK/DoV,GAAQrhC,aAAO65D,IAAU35D,WAAA,CAAAxV,YAAA,kBAAAyV,YAAA,eAAjBH,CAAiB,8CACZI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG/Du/C,GAAuBxrE,aAAOurE,IAAerrE,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAtBH,CAAsB,wCAK7Co4E,GAAap4E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,eAAVH,CAAU,iGAQvBi3E,GAAcj3E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,eAAVH,CAAU,sFAuGfq4E,OA/F2Ct9E,IAE/B,IAFgC,YACzD0kE,GACM1kE,EACN,MAAMu9E,GAAsB,OAAX7Y,QAAW,IAAXA,OAAW,EAAXA,EAAa8Y,iBAAkBC,IAC1C,OAAE93C,EAAM,MAAE30B,EAAK,aAAEksE,GAAiBzY,GAAe8Y,EAAU7Y,GAE3DyW,EAAuB16E,IAMK,IANJ,QAC5BuM,EAAO,OACPsuE,EAAM,WACNM,EAAU,SACV7uE,EAAQ,MACRmV,GACoBzhB,EACpByhB,EAAMgU,iBAENgnD,EAAa,CACXtB,aACA7uE,WACAuuE,SACAtuE,WACA,EAEJ,OACErG,eAACU,GAAiB,CAAArT,SAChB2S,eAACy8C,GAAkB,CAAApvD,SACjB4S,gBAACO,GAAS,CAAAnT,SAAA,CACR2S,eAACuc,GAAc,CAAAlvB,SACb4S,gBAACi1E,GAAc,CAAA7nF,SAAA,CACb2S,eAAC8pE,GAAoB,CACnBjpE,QAASb,eAAC2/B,GAAK,CAACr2C,MAAM,eAAeuW,OAAQ5U,IAC7C4U,OAAQ5U,IAEVgV,gBAACy2E,GAAU,CAAArpF,SAAA,CACT2S,eAACu1E,GAAW,CAAAloF,SACV2S,eAAA,KAAA3S,SAAIupF,EAASG,0BAEf/2E,eAACu0E,GAAY,CACX10E,OAAQ,YACR20E,qBAAsBA,EACtBC,kBAAkB,aAKxBpqE,EAqCEA,EACFrK,eAACuc,GAAc,CAAAlvB,SACb2S,eAACN,GAAU,CACTV,OAAQ,SACRW,KAAM,uDAGR,KA3CFK,eAACk1E,GAAc,CAAA7nF,SACZupF,EAASV,YAAY99E,KACnBisD,IACC,MAAM2yB,EAKUh4C,EAAO1wB,MAEnBmnB,IAMiB,OAALA,QAAK,IAALA,OAAK,EAALA,EAAO5tC,MAAOw8D,EAAO8xB,eAErC,OAAIa,EAEAh3E,eAACuc,GAAc,CAAAlvB,SACb2S,eAAC21E,GAAS,CACRrsF,MAAO+6D,EAAO/6D,MACdmrF,kBAAmBpwB,EAAOowB,kBAC1BmB,gBAAiBvxB,EAAOuxB,gBACxBtqC,IAAmB,OAAd0rC,QAAc,IAAdA,OAAc,EAAdA,EAAgB1rC,IACrBuqC,aAAcxxB,EAAOwxB,aACrBrB,qBAAsBA,KAPLwC,EAAenvF,IAYjC,IAAI,YAcL,EC5JxB,MAAM20B,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,gBAAbH,CAAa,qCAEXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtDqqE,GAAuBxrE,aAAOurE,IAAerrE,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAAtBH,CAAsB,uCAI7C6+C,GAAgB7+C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAAVH,CAAU,4GAEbI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAK/D0sD,GAAW34E,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAATH,CAAS,oCACXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAEtDmgC,GAAQrhC,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,gBAATH,CAAS,oEAENI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAE3Cf,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtDy3E,GAAmB54E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAVH,CAAU,6FACnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAM1C6sD,GAAsB74E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAVH,CAAU,sBAwDvB84E,OA9CM/9E,IAAyD,IAAxD,OAAE6a,EAAM,OAAErU,EAAS,UAAiBxG,EACxD,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mBACtByL,EAAYne,EAAa+mB,GAAUjpB,GAAe3B,MAClD8S,EAAOiB,cAAapE,GAA6BA,EAAMmD,QACvD,UAAE8O,GAAc2V,KAChBzM,EAAalJ,EAAUhE,KAE7B,OACElH,eAACY,GAAa,CACZG,gBAAiBmQ,iBAAOkD,GACxBvT,QACEZ,gBAAA,OAAK,cAAaH,EAAWzS,SAAA,CAC3B2S,eAAC8pE,GAAoB,CACnBjpE,QACEb,eAACm9C,GAAa,CAAC,wBAAsB,OAAM9vD,SACzC4S,gBAAA,UAAA5S,SAAA,CACE4S,gBAACg3E,GAAQ,CAAA5pF,SAAA,CAAC,OAAS,OAAJ+O,QAAI,IAAJA,OAAI,EAAJA,EAAkB,aAChC8U,iBAAOkD,GAAc,KACpBnU,gBAAC0/B,GAAK,CAAAtyC,SAAA,CACHie,EAAU,KAAG2C,GAAoBmG,WAM5CvU,OAAQC,IAEVE,eAACk3E,GAAgB,CAAA7pF,SACf4S,gBAACk3E,GAAmB,CAAA9pF,SAAA,CAClB2S,eAACwc,GAAM,CAAAnvB,SAAC,oEAIR2S,eAAA,KAAA3S,SAAG,2GAQXwS,OAAQC,GACR,EC1ESu3E,OApBOh+E,IAGM,IAHL,UACrBuG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mBAC5B,OACEG,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACN,GAAU,CACTC,KACEK,eAAAqyB,YAAA,CAAAhlC,SAAE,wEAIJ2R,OAAQgB,eAACsJ,GAAI,CAACxU,KAAK,OAAO+K,OAAQC,IAClCD,OAAQC,KAEN,EC0MKxD,OA5MAjD,IAkBY,IAADi+E,EAAA,IAlBV,UACdC,EAAS,KACTntE,EAAI,kBACJotE,EAAiB,aACjBhS,EAAY,YACZiS,EAAW,MACXnuF,EAAK,QACLouF,GAWDr+E,EACC,MAAM4qD,EAAaj4B,iBAAO5hB,EAAM,CAAC4kC,GAAKA,EAAEt/B,YAGlCioE,EAAY5gD,GAAaz1B,OAAO2a,IAAIE,WACpC8iB,EAA8C,CAClD,CACE70B,KAAM65C,EAAW7rD,KAAI42C,IACZ,CAELwV,EAAG9rD,KAAOs2C,EAAEt/B,WAAWqjD,UACvB9Q,EAAGjT,EAAEt+B,MACLhB,UAAWs/B,EAAEt/B,UACbC,QAAS9V,GAAgB,CACvBE,OAAQ,aACRC,UAAWg1C,EAAEr/B,UAEfioE,oBAAqB5oC,EAAE4oC,oBACvB59C,OAAQ,CACNm5B,UAAWnkB,EAAE4oC,oBACT7gD,GAAaz1B,OAAO2a,IAAIqO,MACxBqtD,EACJ/xB,UAAW+xB,EACXpxB,UAAW,EACXh+B,OAAQ7vB,KAAOs2C,EAAEt/B,WAAWmoE,OAC1BL,EACApwF,GAEE,EACA,OAIVgH,KAAM9E,EACN0R,KAAM,OACN44D,SAAU,IACVC,MAAO,CACL,CACEnjD,MAAOhY,KAAwC,QAAlC4+E,EAACrzB,EAAWA,EAAWppD,OAAS,UAAE,IAAAy8E,OAAA,EAAjCA,EAAmC5nE,WAAWqjD,WAE9D,CACEsC,UAAW,eAKbyiB,EAA4B,IAC7B7zB,EAAW7rD,KAAI42C,GAAKA,EAAEt+B,SAChB,OAAT6mE,QAAS,IAATA,OAAS,EAATA,EAAWQ,MAAO,GACT,OAATR,QAAS,IAATA,OAAS,EAATA,EAAWl9C,OAAQ,GAEf29C,EAAO72B,cAAI22B,GACXG,EAAO72B,cAAI02B,GAEjB,MAAO,CACLriD,MAAO,CACL8L,OAAQ,IACR22C,WAAY,GACZpvD,MAAO,CACLoZ,WAAYnL,GAAan4B,MAAMC,QAAQzQ,KACvCg3D,SAAU,YAGdnE,MAAO,CACLk3B,cAAe,CACbC,YAAY,cAADr4E,OAAgBkkD,EAAW,GAAGv0C,UAAS,QAAA3P,OAChDkkD,EAAWA,EAAWppD,OAAS,GAAG8U,UAGtC41C,WAAY,IACZD,WAAY,IACZtqD,KAAM,WACNy5D,qBAAsB,CAAE4jB,MAAO,SAC/BzyB,UAAW7uB,GAAaz1B,OAAO2a,IAAIC,UACnCspC,OAAQ,CACNJ,SAAU,QACVruD,SAAS,EACT+xB,MAAO,CACLznB,MAAO01B,GAAaz1B,OAAO2a,IAAIC,UAC/BgmB,WAAYnL,GAAan4B,MAAMk0B,UAAU1kC,MAE3C6zD,EAAG,IAELq2B,UAAWvhD,GAAaz1B,OAAO2a,IAAIC,WAErC6kC,MAAO,CACL,CACEo3B,cAAe,CACbC,YAAY,GAADr4E,OAAKzW,EAAK,UAAAyW,OAASozB,KAAKe,MAAM8jD,GAAQ,GAAE,QAAAj4E,OAAOozB,KAAKe,MAC7D+jD,GAAQ,KAGZ92B,IAAK62B,EACL52B,IAAK62B,EACLtyB,WAAW,EACXD,aAAa,EACbF,OAAQ,CACNhB,EAAG,EACHvC,GAAI,EACJgE,MAAO,OACPlvD,SAAS,EACT+nD,UAAW,WACT,M7F6L2Cy5B,EACrDb,EACAvxB,EACAD,EACAuxB,EACA/mE,KAEA,GAAgB,eAAZgnE,EACF,OAAKvxB,GAAYD,EAGF5wB,GACb3B,GAAoBjjB,EAAO+mE,IAC3Br/E,KAAImW,IAAC,IAAUA,EAAGmC,MAAOwjB,gBAAM3lB,EAAEmC,MAAO,OAEvCtY,KAAImW,GAAC,GAAAxO,OAAOwO,EAAEmC,OAAK3Q,OAAc,SAAXwO,EAAE/U,KAAkB,IAAM,OAChDgwB,KAAK,KAPC,GASX,OAAO28B,GAAWD,EAASx1C,EAAMg3B,WAAa,EAAE,E6F/M/B6wC,CACLb,EACA1qD,KAAKm5B,QACLn5B,KAAKk5B,OACLuxB,EACAzqD,KAAKtc,MAET,EACAoY,MAAO,CACLznB,MAAO01B,GAAaz1B,OAAO2a,IAAIC,UAC/BgmB,WAAYnL,GAAan4B,MAAMk0B,UAAU1kC,OAG7CgnE,UAAW,CACT,CACE/zD,MAAO01B,GAAaz1B,OAAO2a,IAAIwO,MAC/B4qC,UAAW,OACX/zB,MAAO,EACP5wB,MAAgB,OAAT6mE,QAAS,IAATA,OAAS,EAATA,EAAWiB,MAGtB9iB,UAAW,CACT,CACEr0D,MAAOq1B,GAAS,CACdC,IAAKI,GAAaz1B,OAAO2a,IAAI8N,OAC7B6M,QAAS,MAEXpW,KAAe,OAAT+2D,QAAS,IAATA,OAAS,EAATA,EAAWQ,IACjBtxD,GAAa,OAAT8wD,QAAS,IAATA,OAAS,EAATA,EAAWl9C,OAGnB/wC,MAAO,CAAEuvC,KAAM,QAGnButB,OAAQ,CACNrvD,SAAS,GAEXsvD,YAAa,CACXiW,KAAM,CACJC,cAAc,EACdl7D,MAAOs2E,EACPvjB,OAAQ,UACR7N,UAAW,EACXwD,WAAY,CACVhzD,SAAS,GAEXyvD,OAAQ,CACNv+B,MAAO,CACLs+B,UAAW,IAGftH,MAAO,CACLoU,OAAQ,CACNolB,MAAO,WACL,MAAM,QAAE9oE,EAAO,UAAED,GAAcsd,KAC/Bw4C,EAAa,CACX71D,UACAD,aAEJ,MAKRpmB,MAAO,CACLuvC,UAAM/9B,GAER+iC,QAAS,IACJhnC,GACH+vD,WAAY,SACVC,EACAC,EACA7H,GAEA,OAAO6C,GAA2B,CAChCC,gBAAkB/0B,KAAa+5B,YAAYF,EAAGC,EAAG7H,GACjD+C,aAAcpmD,OAAOorD,SAEzB,GAEF/nB,SACD,EC5HYy5C,OA/DgBr/E,IAWG,IAXF,UAC9BuG,EAAS,QACTlI,EAAO,KACP0S,EAAI,UACJmtE,EAAS,eACTl3B,GAAiB,EAAK,OACtBxgD,EAAS,SAAQ,MACjBvW,EAAK,QACLu0C,EAAO,YACP45C,EAAW,QACXC,GACMr+E,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,8BACtB,gBAAEyiB,GAAoBzB,KACtB22D,EAA2B,OAAP9/E,QAAO,IAAPA,OAAO,EAAPA,EAASgY,UAE7B+lB,EAAQpmB,mBAAQ,KAUb,CACL/S,OAAQkkD,GAAe,CACrB+2B,YACAntE,OACAo7D,aAZFpJ,IAEA95C,EAAgB,CACd3S,QAASjW,GAAgB0iE,EAAUzsD,SACnCD,UAAWhW,GAAgB0iE,EAAU1sD,WACrC4F,YAAazsB,EAAaX,MAC1B,EAOAsvF,oBACAC,cACAnuF,QACAouF,YAEF7vF,GAAI,2BACJw4D,oBAED,CACDk3B,EACAntE,EACAi2C,EACAo3B,EACAC,EACAF,EACAluF,EACAg5B,IAGF,OACEriB,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD2S,eAAC+/C,GAAK,CACJtqB,MAAOA,EACP71B,UAAWA,EACXC,OAAQC,EACRkgD,iBAAkBniB,IAEpB79B,eAAA,KAAGJ,UAAU,uCAAsCvS,SAAE/D,MACjD,ECvFV,MAAM+gE,GAAU/rD,aAAO+3B,IAAsB73B,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,gBAA7BH,CAA6B,+KAI9BI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAM83B,KAclDwhD,GAAqBr6E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kDAAAyV,YAAA,gBAAVH,CAAU,6DAK/Bs6E,GAAsBt6E,KAAOkU,EAAChU,WAAA,CAAAxV,YAAA,mDAAAyV,YAAA,gBAARH,CAAQ,oCACnBI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OACvCsQ,GAASA,EAAMC,MAAMC,MAAMk0B,UAAUzzB,MAAM83B,KA8C3C0hD,OAnCqBx/E,IAMR,IANS,UACnCuG,EAAS,OACTC,EAAS,SAAQ,QACjB63E,EAAO,QACPhgF,EAAO,YACP+/E,GACMp+E,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mCAC5B,OAAY,OAAPnI,QAAO,IAAPA,KAASgZ,MAKE,eAAZgnE,EAEA13E,eAACqqD,GAAO,CACNp3B,QAAQ,SACRsC,MAAOD,GACL3B,GAAoBj8B,EAAQgZ,MAAO+mE,IACnCr/E,KAAImW,IAAC,IAAUA,EAAGmC,MAAOwjB,gBAAM3lB,EAAEmC,MAAO,OAC1C7Q,OAAQC,IAMZG,gBAAC04E,GAAkB,CAAAtrF,SAAA,CACjB2S,eAAC44E,GAAmB,CAAAvrF,SACjBqK,EAAQgZ,MAAMu0C,QAAoB,cAAZyyB,EAA0B,EAAI,KACjC,SACH,cAAZA,EAA0B,QAAU,cApB3C13E,eAAC24E,GAAkB,CAAAtrF,SAAC,mCAqBD,ECnEzB,MAAMu6D,GAAWtpD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,eAAVH,CAAU,2EAGZI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAGlDw5E,GAAiBx6E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,eAAVH,CAAU,sDAElBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KA8CzCy5E,OAlCsB1/E,IAMT,IANU,UACpCuG,EAAS,OACTC,EAAS,SAAQ,QACjB63E,EAAO,SACPxiD,EAAQ,YACRuiD,GACMp+E,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,oCAC5B,OAAa,OAARq1B,QAAQ,IAARA,KAAUxkB,MAGC,eAAZgnE,EAEAz3E,gBAAC2nD,GAAQ,CAAAv6D,SAAA,CACP2S,eAAA,UAAA3S,SAAQ,sBAA0B,OAClC2S,eAACq2B,GAAqB,CACpBpD,QAAQ,SACRsC,MAAOD,GACL3B,GAAoBuB,EAASxkB,MAAO+mE,IACpCr/E,KAAImW,IAAC,IAAUA,EAAGmC,MAAOwjB,gBAAM3lB,EAAEmC,MAAO,OAC1C7Q,OAAQC,OAMdG,gBAAC64E,GAAc,CAAAzrF,SAAA,CAAC,oBACI,IACjB6nC,EAASxkB,MAAMu0C,QAAoB,cAAZyyB,EAA0B,EAAI,GAAI,IAC7C,cAAZA,EAA0B,QAAU,cApBhC13E,eAAC84E,GAAc,CAAAzrF,SAAC,6BAqBN,ECxCrB,MAAMmT,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAVH,CAAU,6DAGPI,GAAUA,EAAMw1C,QAAU,aAAe,kBAExD8kC,GAAoB16E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAAVH,CAAU,8EAM9Bke,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAbH,CAAa,wDAETI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG/D0uD,GAAa36E,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAATH,CAAS,iDACXI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAClCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YA4F5Cg6E,OAzES7/E,IAaI,IAbH,UACvBuG,EAAS,IACTqc,EAAG,UACHs7D,EAAS,QACT7/E,EAAO,YACPyhF,EAAW,QACXjlC,EAAO,WACPC,EAAU,SACVjf,EAAQ,OACRr1B,EAAS,SAAQ,QACjBg+B,EAAO,YACP45C,EAAW,QACXC,GACMr+E,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,qBAC5B,OACEI,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAYo0C,QAASA,EAAQ7mD,SAAA,CACzE2S,eAACwc,GAAM,CAAAnvB,SACL2S,eAACi5E,GAAU,CAAA5rF,SAAC,iBAEd2S,eAACY,GAAa,CACZG,gBAAiBozC,EACjBrzC,cAAeozC,GAAWilC,GAAeh/D,gBAAM8B,GAC/Cjb,cACEhB,eAACg5E,GAAiB,CAAA3rF,SAChB2S,eAACN,GAAU,CACTC,KACEu0C,EACE,wDAEAl0C,eAAAqyB,YAAA,CAAAhlC,SAAE,kGAMN2R,OAAQk1C,EAAU,SAAW,QAC7Br0C,OAAQA,MAIdgB,QACEqzC,GAAWilC,GAAeh/D,gBAAM8B,GAAO,KACrChc,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAC64E,GAA2B,CAC1BnB,QAASA,EACThgF,QAASA,EACT+/E,YAAaA,IAEfz3E,eAAC+4E,GAA4B,CAC3BrB,QAASA,EACTxiD,SAAUA,EACVuiD,YAAaA,IAEfz3E,eAAC04E,GAAsB,CACrBhhF,QAASA,EACT0S,KAAM6R,EACNs7D,UAAWA,EACX13E,OAAQC,EACRxW,MAAM,aACNu0C,QAASA,EACT45C,YAAaA,EACbC,QAASA,OAKjB73E,OAAQC,MAEA,EC3GhB,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,gBAAVH,CAAU,oBACbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElDrO,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,gBAAbH,CAAa,2BAGtB6wD,GAAoB7wD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,uDAAAyV,YAAA,gBAAVH,CAAU,wCAI9BuzD,GAAOvzD,KAAO+wD,GAAE7wD,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAATH,CAAS,sBACLI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAmD7C45E,OAzC2B//E,IAEP,IAFQ,QACzC04B,GACM14B,EACN,GAAY,OAAP04B,QAAO,IAAPA,MAASktB,MACZ,OAAO,KAET,MAAM,EAAEgD,EAAC,QAAEtyC,EAAO,YAAE8nE,EAAW,UAAE/nE,GAAcqiB,EAAQktB,MACjDn/C,EAAU,wCAEhB,OACEG,gBAACO,GAAS,CAACZ,UAAWE,EAAY,cAAaA,EAAWzS,SAAA,CACxD2S,eAACwc,GAAM,CAAAnvB,SACL2S,eAACyhD,GAAS,CACRnlD,OAAQ,CACNvC,OAAQ,CAAEvB,IAAK,aAAcO,MAAO,eAEtC6a,UAAW,CACTpb,IAAKmX,EACL5W,MAAO2W,GAET7P,OAAQC,MAGZE,eAAA,MAAA3S,SACE4S,gBAACkvD,GAAiB,CAAA9hE,SAAA,CAChB2S,eAAC6xD,GAAI,CAAAxkE,SAAC,2BACN2S,eAAA,MAAA3S,SACE2S,eAACq2B,GAAqB,CACpBpD,QAAQ,SACRsC,MAAOD,GACL3B,GAAoBsuB,EAAGw1B,IACvBr/E,KAAImW,IAAC,IAAUA,EAAGmC,MAAOwjB,gBAAM3lB,EAAEmC,MAAO,OAC1C7Q,OAAQC,aAKN,E,SCtEhB,SAASu5E,GAEPC,GACA,OAAOC,KAAEtgC,MACPqgC,EAASlhF,KAAIsY,GAAS6oE,KAAEC,QAAQ9oE,KAEpC,CAGA,MAAM+oE,GAAyB,IAAIC,OAAO,sBAG7BC,GAAYJ,KAAEK,SAASC,MAAM,iCAC7BC,GAAST,GAAgB,IAAI9hF,GAAc,SAC3CwiF,GAAeV,GAAgB7Z,IAC/Bwa,GAAwBX,G9DGD,CAClC,QACA,OACA,cACA,iBACA,wBACA,6BACA,YACA,mBACA,OACA,KACA,YACA,mB8DXIY,GAAUV,KAAE/iD,SACZ0jD,GAAeX,KAAEtgC,MAAM,CAAC6gC,GAAQP,KAAEY,SAClCC,GAAoBb,KAAEc,OAAO,CACjC3tE,MAAO6sE,KAAEK,SAASltE,QAClBS,cAAeosE,KAAEe,MAAMP,IACvBlyF,GAAIoyF,GACJxoB,MAAO8nB,KAAEK,SAAStuC,MAClBwhC,uBAAwByM,KAAEgB,UAC1BnsF,KAAMmrF,KAAEK,SACRY,QAASjB,KAAEe,MAAMf,KAAEz+E,aACnB2/E,YAAalB,KAAEK,SAASc,WACxBntE,KAAMysE,GACNzuD,YAAaguD,KAAEK,SAAStuC,MACxBshC,YAAa2M,KAAEK,SACf1yE,KAAMqyE,KAAEY,OACRjtE,YAAaqsE,KAAEY,OACf7wF,MAAOiwF,KAAEK,SACTe,aAAcT,KAEHU,GAAQR,GAIRS,GAAmBxB,GAAgBrhF,IACnC8iF,GAAyBvB,KAAEK,SAASj6D,WAAW,cACtDo7D,GAAoBxB,KAAEc,OAAO,CACjChhB,YAAasgB,GACbrgB,WAAYuhB,GACZG,UAAWzB,KAAEK,SAASC,MAAMJ,IAC5BhrE,cAAemsE,GACfK,uBAAwB1B,KAAE/iD,SAASkkD,WACnCnoE,eAAgBgnE,KACbK,SACA/0D,OACA61D,WACH5nE,iBAAkBymE,KACfK,SACA/0D,OACA61D,WACHQ,oBAAqB3B,KAAEgB,UACvBpsE,eAAgBorE,KAAEgB,UAClB/rE,mBAAoB+qE,KAAE/iD,SACtB2kD,gBAAiBL,GACjBM,iBAAkB7B,KAAEY,OACpB/kE,OAAQmkE,KAAEK,SAAS/0D,OACnBxW,YAAakrE,KAAEe,MAAMM,IACrBS,yBAA0B9B,KAAEe,MAAMf,KAAE/iD,UACpCtoB,SAAUqrE,KAAEK,SACZjuE,SAAU4tE,KAAE/iD,SACZlkB,WAAYinE,KAAEgB,YAEVe,GAAWP,GAAkB1xE,KAAK,CACtCgwD,aAAa,EACbC,YAAY,EACZ/mD,gBAAgB,EAChBO,kBAAkB,EAClB3E,gBAAgB,EAChBiH,QAAQ,EACR/G,aAAa,EACbH,UAAU,EACVvC,UAAU,EACV2G,YAAY,IA0BDipE,IAxBeD,GAASE,OAAO,CAC1CpmE,OAAQmkE,KAAEY,SAEqBY,GAC9B1xE,KAAK,CACJoF,eAAe,EACf2sE,kBAAkB,IAEnB1/D,MAAM4/D,IACNE,OAAO,CACNhtE,mBAAoB+qE,KAAEY,OACtBgB,gBAAiB5B,KAAEY,SAESY,GAC7B1xE,KAAK,CACJ8xE,iBAAiB,EACjBC,kBAAkB,IAEnB1/D,MAAM4/D,IACNE,OAAO,CACN/sE,cAAe8qE,KAAEY,OACjB3rE,mBAAoB+qE,KAAE/iD,SACtBtoB,SAAUqrE,KAAEY,SAEWY,GACxB1xE,KAAK,CACJ2xE,WAAW,EACXC,wBAAwB,EACxBC,qBAAqB,EACrBC,iBAAiB,EACjBC,kBAAkB,EAClBC,0BAA0B,IAE3B3/D,MAAM4/D,IACN5nC,KAAK,CAAErlC,aAAa,IACpBmtE,OAAO,CACNhtE,mBAAoB+qE,KAAE/iD,SAASkkD,WAC/BS,gBAAiBL,GAAuBJ,WACxCxsE,SAAUqrE,KAAEK,SAASc,cAMZe,GAASlC,KAAEc,OAAO,CAC7B71B,EAAG+0B,KAAE/iD,SACLyrB,EAAGs3B,KAAE/iD,WAUMklD,IARanC,KAAEc,OAAO,CACjCtC,IAAKwB,KAAE/iD,SACPgiD,IAAKe,KAAE/iD,SACP6D,KAAMk/C,KAAE/iD,WAKmB+iD,KAAEc,OAAO,CACpC1qE,QAAS4pE,KAAEK,SAASC,MAAMJ,IAC1B/pE,UAAW6pE,KAAEK,SAASC,MAAMJ,OAGjBkC,IADiBpC,KAAEe,MAAMoB,IACPH,GAAYC,OAAO,CAChDI,cAAerC,KAAEK,SAASc,WAC1BxsE,SAAUqrE,KAAEK,YAMDiC,IAJYtC,KAAEe,MAAMiB,IACJhC,KAAEe,MAAMqB,IAGXpC,KAAEl1B,OAC1Bk1B,KAAEK,SAASC,MAAMJ,IACjBF,KAAE/iD,SAASkkD,aAEAoB,GAAiBJ,GAAcF,OAAO,CACjD5D,oBAAqB2B,KAAEgB,UACvB7pE,MAAO6oE,KAAE/iD,SAASkkD,aAIPqB,IAFkBxC,KAAEe,MAAMwB,IACMvC,KAAEe,MAAMwB,GAAeE,YAC3CP,GAAO//D,MAAMggE,KACzBO,GAAkBF,GAAUP,OAAO,CAC9C5D,oBAAqB2B,KAAEgB,YASZ2B,IAPmBH,GAAUP,OAAO,CAC/CxpE,UAAWunE,KAAEtgC,MAAM,CAAC6gC,GAAQP,KAAEK,SAAS/0D,OAAQ00D,KAAEK,WACjDrsE,KAAMusE,GACN8B,cAAerC,KAAEK,WAIiBL,KAAEc,OAAO,CAC3CpqE,OAAQgqE,GACRvpE,MAAO6oE,KAAE/iD,SAASkkD,cAEPyB,GAA+BD,GACzCV,OAAO,CACNjuE,KAAM2sE,GACN0B,cAAerC,KAAEK,SACjBlpE,MAAO6oE,KAAE/iD,WAEV9a,MAAMq/D,GAAkB1xE,KAAK,CAAE+L,QAAQ,EAAMlH,UAAU,KACvDwN,MAAM0+D,GAAkB/wE,KAAK,CAAEoxE,aAAa,KAClC2B,GAAaV,GAAcF,OAAO,CAC7CpxE,KAAMmvE,KAAEe,MAAM4B,MAIHG,GAAqB9C,KAAEl1B,OAClCk1B,KAAEtgC,MAAM,CAAC6gC,GAAQP,KAAEK,WACnBL,KAAEe,MAAM6B,KCtJJG,IDwJ6BZ,GAAcF,OAAO,CACtDpxE,KAAMiyE,KAIgCJ,GAAgBT,OAAO,CAC7D/D,YAAa8B,KAAEgB,YC9JS74D,iBAAOlqB,KAqOpB+kF,GAAwB5pE,IAcX,IACpB6pE,GAfgC,SACpCxnF,EAAQ,KACRoV,EAAI,QACJjV,EAAO,MACPa,EAAK,eACLymF,EAAc,QACdnrB,GAQD3+C,EAEC,OAAQxd,GACN,KAAK7G,GAAaE,UAChBguF,EAAgB,SAChB,MACF,KAAKluF,GAAaG,QAChB+tF,EAAgB,gBAChB,MACF,KAAKluF,GAAaM,aAChB4tF,EAAgB,cAChB,MAEF,QACEA,EAAgB,OAGpB,MAAME,EA5GsCxqE,KAAA,IAAC,SAC7Cld,EAAQ,KACRoV,EAAI,QACJjV,EAAO,MACPa,GAMDkc,EAAA,OACCvD,sBACEwlB,kBACEn+B,EACGib,QAAO/J,GACC/R,IAAY7G,GAAaE,WAC3B0Y,EAAKiH,eACNjH,EAAKiH,iBAEV/V,KAAI8O,IACH,MAAMy1E,EAAwDxoD,kBAC5DjtB,EAAKm0E,yBAAyBjjF,KAC3B6X,IAAgD,IAAD2yC,EAC9C,MAAMlyC,EAAY,OAAJtG,QAAI,IAAJA,GAGb,QAHiBw4C,EAAJx4C,EAAMA,KAAKkE,MACtB+1C,GACCA,EAAOp0C,SAAWA,WACrB,IAAA2yC,OAHiB,EAAJA,EAGXlyC,MACGksE,EAAmB,OAAR5nF,QAAQ,IAARA,OAAQ,EAARA,EAAUsZ,MACxB+1C,GACCA,EAAOx8D,KAAOooB,IAOlB,IAAI2rE,EACJ,GAAIzhE,gBAAMjT,EAAK00E,eAAgB,CAC7B,MAAMxtE,EAAWpZ,EAASsZ,MACxBC,IAAC,IAAAsuE,EAAA,OACCtuE,EAAE1mB,MAKD,QALGg1F,EACJ7mF,EAAMsY,MACJC,GACEA,EAAEJ,gBACFI,EAAE8sE,yBAAyB3xE,SAASuG,YACvC,IAAA4sE,OAAA,EAJDA,EAIGruE,mBAAkB,IAEzBotE,GAAwB,OAARxtE,QAAQ,IAARA,OAAQ,EAARA,EAAUhgB,OAAQ,MACpC,MACEwtF,EAAgB10E,EAAK00E,cAIvB,OAAOzhE,gBAAMzJ,IAAUyJ,gBAAMyiE,GACzB,KACA,CACE3sE,SACAS,QACAnD,KAAM4M,gBAAc,OAARyiE,QAAQ,IAARA,OAAQ,EAARA,EAAUjC,cAClB,OACQ,OAARiC,QAAQ,IAARA,OAAQ,EAARA,EAAUjC,aACdF,YAAatgE,gBAAc,OAARyiE,QAAQ,IAARA,OAAQ,EAARA,EAAUnC,aACzB,OACAmC,EAASnC,YACbrlE,OAAQlO,EAAKkO,OACblH,SAAUhH,EAAKgH,SACf0tE,gBACD,KAKX,OAASe,EAAkB9hF,OAAS8hF,EAAoB,IAAI,KAGnE,EAiCgCG,CAA+B,CAC9D9nF,WACAoV,OACAjV,UACAa,UAEI+mF,EAAsBL,EAAyBzrE,QAAO1C,GAC1D+iD,EAAQ5nD,SAAS6E,EAAE0B,UAGf+sE,EAAqBC,kBAAcF,EAAqBP,GAK9D,OAAOrnF,IAAY7G,GAAaE,UAC5B0uF,kBACIT,EAAe5hF,OACbwO,eAAK2zE,EAAoBP,GACzBO,GACJ,CAACpnE,EAAGmI,KAAC,IAAAo/D,EAAA,OAAoC,QAApCA,EAAKnnF,EAAMsY,MAAKC,GAAKwP,IAAMxP,EAAE6G,gBAAO,IAAA+nE,OAAA,EAA/BA,EAAiCjvE,QAAQ,IAErD8uE,CAAkB,EA8FXI,GAAkBpnF,IAC7B,MAAMqnF,EAAmB9mE,oBAAUphB,kBAAQa,EAAO,aAAaA,GAEzDA,EAAM6E,OAAS,EACV7E,EAAMoC,KAAI,CAACmW,EAAGgb,KAAK,IACrBhb,EAEHL,SAAS,GAADnO,OAAKwO,EAAEL,UAAQnO,OAAKwpB,EAAK,KAAAxpB,OAAQwpB,EAAK,KAAM,QAGjDvzB,IAGT,OAAOsnF,uBAAa9zE,OAAOmH,OAAO0sE,GAAmB,EAAE,EAG5CE,GAAuBA,CAClCnzE,EACAozE,IAEOh0E,OAAOC,KAAKW,GAChB7U,OACA6C,KAAI2lB,IAAM,IAAD0/D,EACR,MAAM/tE,EAAYhX,KAAOqlB,GAAGhkB,OAAO,cAC7B4V,GAC8C,QAAlD8tE,EAAAD,EAAclvE,MAAKsoC,GAAKA,EAAElnC,YAAcA,WAAU,IAAA+tE,OAAA,EAAlDA,EAAoD9tE,UACpDjX,KAAOqlB,GACJqgD,IAAI,GAAIh3E,GACR2S,OAAO,cACZ,MAAO,CACL4V,UACAioE,oBAAqBl/E,OAASglF,SAAS/tE,GACvCD,UAAWA,EACXgB,MAAOtG,EAAK2T,GACb,IAIM4/D,GAA4BA,CACvCthB,EACAuhB,KAEA,GAAIzjE,gBAAMyjE,GAAoB,MAAO,GACrC,MAAMC,EAAgBjtE,oBACpByrD,GACArtB,GAAKA,EAAEt/B,YAAckuE,EAAkBluE,YAEnCouE,EAAgBltE,oBACpByrD,GACArtB,GACEA,EAAEt/B,YACFhX,KAAOklF,EAAkBluE,WACtBvV,SAAS,GAAI/S,GACb2S,OAAO,gBAEd,OAAOogB,gBAAM0jE,GACT1jE,gBAAM2jE,GACJ,GACA,CAACzhB,EAAOyhB,IACV,CAACzhB,EAAOyhB,GAAgBzhB,EAAOwhB,GAAe,ECxdvCE,GAA+B,SAC1C9uE,GAM+B,IAD/BC,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAEV,MAAM6Q,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDD,EAAS2D,mBACb,MACE5D,cACAkE,QAASV,EAAQU,QACjBhE,WACA2lD,QAASriD,EAAQqiD,WAEnB,CAAC7lD,EAAawD,EAAStD,IAGzB,OAAOM,oBACL,CAAC,0BAA2BP,IAC5B,IDqG4C1N,WAUrB,IAV4B,YACrDyN,EAAW,QACXkE,EAAO,SACPhE,EAAQ,QACR2lD,GAMD5jD,EACC,MAAM49B,EAAG,IAAAvrC,OAAO4L,EAAQ,wBAExB,IAAID,EAAiD,CACnDiE,QAAS/V,GAA0B+V,IAQrC,OANa,OAAP2hD,QAAO,IAAPA,KAASz2D,SACb6Q,EAAS,IACJA,EACH4lD,QAAgB,OAAPA,QAAO,IAAPA,OAAO,EAAPA,EAAS9nC,KAAK,OAGpBlf,GACJwD,KAAgBw9B,EAAK5/B,EAAQ,CAC5BhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,MAErC5N,MAAKC,GAAYkM,GAA6B6xE,GAAY/9E,KAC1DkgF,OAAMn0E,GAAKpM,QAAQsM,OAAOF,IAAG,EChIxBo0E,CAAiCvyE,IACvC,CACE3U,UAAW0U,KAAiBE,GAAYuD,EACxCtB,sBAAsB,GAG5B,ECZMswE,GAAY5/E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAVH,CAAU,8EAMtBke,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAbH,CAAa,0EAETI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAElD7rB,GAASA,EAAMC,MAAM+/B,KAAKE,MAEvCu/C,GAAc7/E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAVH,CAAU,uBAGxB06E,GAAoB16E,aAAOoC,IAAkBlC,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAAzBH,CAAyB,gFAM7CotB,GAASptB,KAAOqtB,OAAMntB,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAbH,CAAa,4FAOtB8/E,GAAY9/E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAVH,CAAU,gDAEjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAGrC4zD,GAAgB//E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAAVH,CAAU,kDAChBI,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,YAAAS,OAAWrB,EAAMC,MAAM2C,OAAO2a,IAAIwO,SAkKvD6zD,OAnJWjlF,IAOE,IAPD,UACzBuG,EAAS,uBACT2+E,EAAsB,OACtB1+E,EAAS,SAAQ,QACjByxD,EAAO,kBACPssB,EAAiB,cACjBJ,GACMnkF,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,wBACtBxE,EAAQgC,cAAapE,GAA6BA,EAAMoC,SACxD,gBAAEgnB,GAAoBxB,MAE1BzW,KAAMo0E,EACNtqC,QAASuqC,EACTtqC,WAAYuqC,EACZtqC,UAAWuqC,GACTZ,GACF,CACE/iF,KAAM,OACNs2D,QAASA,IAEVhiD,kBAAQgiD,IAILstB,EAA2CvvE,mBAAQ,IAErD8K,gBAAMqjE,IACNrjE,gBAAMqkE,IACNh1E,OAAOmH,OAAO6tE,GAAajvE,OAAMqG,GAAK1E,iBAAO0E,KAEtC,KAGF2nE,GAAqBiB,EAAahB,IACxC,CAACgB,EAAahB,KAGVtoD,EAAUx9B,GAAW2X,mBAAQ,IAC9B8K,gBAAMykE,IAAsBzkE,gBAAMyjE,GAC7B,GAEFD,GAA0BiB,EAAmBhB,IACnD,CAACgB,EAAmBhB,IAEjBnG,EAAcpoE,mBAAQ,KAC1B,GAAI8K,gBAAMykE,GACR,OAAO,EAET,MAAMC,EAAsBD,EACzBxmF,KAAI42C,GAAKA,EAAEt+B,QACXO,QAAO2E,IAAMuE,gBAAMvE,KACtB,OAAQurC,cAAI09B,IAAmC,EAAE,GAChD,CAACD,IAEEE,EAAsBzvE,mBAAQ,IAEhCovE,GACCE,IACExkE,gBAAMqkE,IACLh1E,OAAOmH,OAAO6tE,GAAajvE,OAAMqG,GAAK1E,iBAAO0E,OAElD,CAAC6oE,EAAoBE,EAAsBH,IACxCO,EAAmB1vE,mBAAQ,MAChB,OAAPiiD,QAAO,IAAPA,KAASz2D,SAAUqW,iBAAO0tE,IACjC,CAACA,EAAmBttB,IAGjB0tB,EAD0BN,GACqBH,EAE/CU,GAAoBD,GAAqBF,EACzCI,GAAqBF,GAAqBD,EAEhD,OACE9+E,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL2S,eAAA,MAAA3S,SAAI,eACJ2S,eAACy/B,GAAQ,CAAC5+B,QAAQ,kBAEpBb,eAACm+E,GAAW,CAAA9wF,SACRoxF,IAAuBQ,IAAoBC,EAiC3Cl/E,eAACk+E,GAAS,CAAA7wF,SACR2S,eAACk5E,GAAe,CACdj9D,IAAK2iE,EACLrH,UAAgB,OAALl8E,QAAK,IAALA,OAAK,EAALA,EAAQ,yBACnB3D,QAASA,EACTyhF,YAAa4F,EACb7qC,QAASuqC,EACTtqC,WAAYuqC,GAAyBH,EACrCrpD,SAAUA,EACVuiD,YAAaA,EACb53E,OAAQC,EACR+9B,QAAS79B,eAACo5E,GAAiC,IAC3C1B,QAAS,iBA5Cb13E,eAACg5E,GAAiB,CAAA3rF,SAChB2S,eAACN,GAAU,CACTC,KACEs/E,EACEj/E,eAAAqyB,YAAA,CAAAhlC,SAAE,sDAEF4S,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAA,KAAA3S,SAAG,6EAIH4S,gBAAA,KAAA5S,SAAA,CAAG,QACK,IACN2S,eAACygC,GAAS,CACRryC,KAAI,GAAA2R,OAAKD,EAAU,YACnB2mB,GAAIpE,EAAgB,CAClB1N,oBAAoB,IAEtB9U,OAAQC,EAAWzS,SACpB,SAEY,IAAI,8BAMzB2R,OAAO,QACPa,OAAQA,QAqBhBI,gBAACyrB,GAAM,CAAAr+B,SAAA,CACH2xF,IACDC,IAAoBC,EACnBj/E,gBAACm+E,GAAS,CAAA/wF,SAAA,CACR2S,eAACq+E,GAAa,CAAAhxF,SACZ2S,eAAA,QAAMJ,UAAU,iBAAgBvS,SAAC,0BAEnC2S,eAAA,SAAA3S,SAAO,sBACP2S,eAACy/B,GAAQ,CAAC5+B,QAAQ,0BANoB,KAS1Cb,eAACk9C,GAAc,CAACr9C,OAAQC,SAEtB,EC7NV,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,eAAVH,CAAU,oBACbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElDrO,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,eAAbH,CAAa,2BAGtB6wD,GAAoB7wD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wDAAAyV,YAAA,eAAVH,CAAU,wCAI9BuzD,GAAOvzD,KAAO+wD,GAAE7wD,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,eAATH,CAAS,sBACLI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UA+C7C2/E,OArC4B9lF,IAER,IAFS,QAC1C04B,GACM14B,EACN,GAAY,OAAP04B,QAAO,IAAPA,MAASktB,MACZ,OAAO,KAET,MAAM,EAAEuF,EAAC,QAAE70C,EAAO,UAAED,EAAS,cAAEksE,EAAa,KAAEruE,GAASwkB,EAAQktB,MACzDn/C,EAAU,yCAChB,OACEG,gBAACO,GAAS,CAACZ,UAAWE,EAAY,cAAaA,EAAWzS,SAAA,CACxD2S,eAACwc,GAAM,CAAAnvB,SACL2S,eAACyhD,GAAS,CACRnlD,OAAQ,CACNvC,OAAQ,CAAEvB,IAAK,aAAcO,MAAO,eAEtC6a,UAAW,CAAEpb,IAAKmX,EAAS5W,MAAO2W,GAClC7P,OAAQC,MAGZG,gBAAA,MAAA5S,SAAA,CACE4S,gBAACkvD,GAAiB,CAAA9hE,SAAA,CAChB2S,eAAC6xD,GAAI,CAAAxkE,SAAC,iBACN2S,eAAA,MAAI,wBAAsB,OAAM3S,SAAEuuF,OAEpC37E,gBAACkvD,GAAiB,CAAA9hE,SAAA,CAChB2S,eAAC6xD,GAAI,CAAAxkE,SAAC,cACN2S,eAAA,MAAA3S,SAAKkgB,OAEPtN,gBAACkvD,GAAiB,CAAA9hE,SAAA,CAChB2S,eAAC6xD,GAAI,CAAAxkE,SAAC,iCACN4S,gBAAA,MAAA5S,SAAA,CAAKm3D,EAAES,QAAQ,GAAG,eAGZ,EC5DT,MAAMm6B,GAAU9E,IACrB,GAAMA,EAAMz/E,OAAQ,CAClB,MAAMwkF,EAAc/E,EAAM/kF,OACpB+pF,EAAWnsD,KAAKY,MAAMsrD,EAAYxkF,OAAS,GACjD,OAAUy/E,EAAMz/E,OAAS,EACrBy/E,EAAMgF,IACLhF,EAAMgF,EAAW,GAAKhF,EAAMgF,IAAa,CAChD,GC6BIC,GAAQ,CACZ,SACA,SAAS,OAADx/E,OnQq0BR,ipBmQp0BsB,YAAAA,OnQs0BtB,isBmQr0B0B,YAAAA,OnQi0B1B,6qBmQh0BoB,KACpB,UACA,WACA,gBACA,SACA,SACA,WACA,iBAEI65B,GAAO,CACX7C,GAAaz1B,OAAO2a,IAAIub,MACxBT,GAAaz1B,OAAO2a,IAAI0W,MACxBoE,GAAaz1B,OAAO2a,IAAI4b,QACxBd,GAAaz1B,OAAO2a,IAAIgc,WACxBlB,GAAaz1B,OAAO2a,IAAIic,MACxBnB,GAAaz1B,OAAO2a,IAAIsb,QACxBR,GAAaz1B,OAAO2a,IAAI8N,OACxBgN,GAAaz1B,OAAO2a,IAAI2W,QACxBmE,GAAaz1B,OAAO2a,IAAI6b,aACxBf,GAAaz1B,OAAO2a,IAAImc,YACxBrB,GAAaz1B,OAAO2a,IAAI+b,MACxBjB,GAAaz1B,OAAO2a,IAAI2b,MACxBb,GAAaz1B,OAAO2a,IAAIkc,QACxBpB,GAAaz1B,OAAO2a,IAAI0b,WACxBZ,GAAaz1B,OAAO2a,IAAI8b,QACxBhB,GAAaz1B,OAAO2a,IAAIqb,UACxBP,GAAaz1B,OAAO2a,IAAIwb,OACxBV,GAAaz1B,OAAO2a,IAAIyb,SA4NXp7B,OAxKAjD,IAUY,IAVX,KACd+Q,EAAI,MACJ9gB,EAAK,UACLiuF,EAAS,QACTpiF,GAMDkE,EACC,MAAM4qD,EArDN75C,KAOA,MAAMo1E,EAAiBh2E,OAAOmH,OAC5B4F,oBAAUnM,GAAM,CAACiE,EAAa2D,KAAS,CACrCA,YACA3D,cACAoxE,oBAAqBL,GACnB/wE,EAAYjW,KAAImW,GAAKA,EAAEmC,cAI7B,OAAOub,kBAAQD,iBAAOwzD,EAAgB,wBAAwBpnF,KAC5D,CAAC8O,EAAMqiB,KACE,IACFriB,EACHw4E,UAAWn2D,EACXlb,YAAanH,EAAKmH,YAAYjW,KAAI4mB,IAAC,IAC9BA,EACH0gE,UAAWn2D,EACXvX,UAAW9K,EAAK8K,iBAIvB,EAyBkB2tE,CAA4Bv1E,EAAKA,MAC9Cw1E,EAAgBjxE,sBAAYs1C,EAAW7rD,KAAI42C,GAAKA,EAAE3gC,eAClDwxE,EAA0B5C,kBAAc2C,EAAe,QACvDE,EAAYt2E,OAAOC,KAAKo2E,GACxBE,EAAmBxoF,GAAa0Z,QAAO1D,GAC3CuyE,EAAUp2E,SAAS6D,KAEfyyE,EAA8BD,EA1BvB3nF,KAAI,CAACmV,EAAMgc,KAAK,CAC3Bhc,OACAimD,OAAQ+rB,GAAMh2D,GACd4pC,UAAWv5B,GAAKrQ,GAChBo9B,YAAa,QAuBf,MAAM1nB,EAAS8gD,EAAiB3nF,KAAImV,IAClC,MAAM8uD,EAASwjB,EAAwBtyE,GACjCjR,EAAS0jF,EAAY1xE,MAAKoR,GAAKA,EAAEnS,OAASA,IAChD,MAAO,CACLnf,KAAMmf,EACN1lB,GAAI0lB,EACJ4lD,UAAiB,OAAN72D,QAAM,IAANA,OAAM,EAANA,EAAQ62D,UACnB9xD,MAAa,OAAN/E,QAAM,IAANA,OAAM,EAANA,EAAQ62D,UACfn5B,OAAQ19B,GAAU,CAAC,EACnB8N,KAAMiyD,EAAOjkE,KAAIib,IAAC,CAChB1D,QAASvF,EAAKuF,QACdqqB,OAAQ19B,EACRoT,UAAWtF,EAAKsF,UAChBnC,KAAM8F,EAAE9F,KACRquE,cAAevoE,EAAEuoE,cACjBp3B,EAAGnxC,EAAE3C,MACLuxC,EAAG5uC,EAAEqsE,cAEP1kF,KAAM,UACP,IAGH,MAAO,CACLm9E,cAAe,CAAEC,YAAa9uF,GAC9BmsC,MAAO,CACL8L,OAAQ,IACRyyB,WAAY,IACZkkB,WAAY,GACZpvD,MAAO,CACLoZ,WAAYnL,GAAan4B,MAAMC,QAAQzQ,KACvCg3D,SAAU,YAGdnE,MAAO,CACL,CACEk3B,cAAe,CACbC,YAAa,kDAEf6H,OAAQ,GACR9+B,IAAK,EACLC,IAAK,EACLkE,WAAY,GACZM,UAAW7uB,GAAaz1B,OAAO2a,IAAIC,UACnCspC,OAAQ,CACNzrD,OAAQ,WACR+uB,MAAO,CACLznB,MAAO01B,GAAaz1B,OAAO2a,IAAIC,UAC/BgmB,WAAYnL,GAAan4B,MAAMk0B,UAAU1kC,MAE3C6zD,EAAG,IAEL6D,kBAAmB,KACnBwyB,UAAWvhD,GAAaz1B,OAAO2a,IAAIC,UACnCk5C,UAAW,CACT,CACE/zD,MAAO01B,GAAaz1B,OAAO2a,IAAIwO,MAC/B4qC,UAAW,OACX/zB,MAAO,EACP5wB,MAAgB,OAAT6mE,QAAS,IAATA,OAAS,EAATA,EAAWiB,MAGtB9iB,UAAW,CACT,CACEr0D,MAAOq1B,GAAS,CACdC,IAAKI,GAAaz1B,OAAO2a,IAAI8N,OAC7B6M,QAAS,MAEXpW,KAAe,OAAT+2D,QAAS,IAATA,OAAS,EAATA,EAAWQ,IACjBtxD,GAAa,OAAT8wD,QAAS,IAATA,OAAS,EAATA,EAAWl9C,SAKvB0mB,MAAO,CACL,CACE/lD,KAAM,WACNm9E,cAAe,CACbC,YAAY,2BAADr4E,OAA6B5K,IAE1CkwD,WAAYpB,EAAW7rD,KAAI42C,GAAKA,EAAEh9B,YAClCwzC,OAAQ,CACNS,MAAO,QACPlvD,SAAS,EACTivE,KAAM,EACNl9C,MAAO,CACLznB,MAAO01B,GAAaz1B,OAAO2a,IAAIC,UAC/BimB,SAAU,SACVD,WAAYnL,GAAan4B,MAAMk0B,UAAU1kC,KACzCm0D,UAAW,QACX29B,aAAc,QAEhBppF,SAAS,GAEXqqD,IAAK,EAGLC,IAAKD,cAAI,CAAC8C,EAAWppD,OAAS,EAAGslF,IACjCnpD,UAAU,EACV4+B,UAAW,CACTC,mBAAoB9+B,GAAaz1B,OAAO2a,IAAIwO,MAC5CqrC,gBAAiB,GACjBC,eAAgB,EAChBC,sBAAuB,cACvBC,kBAAmB,EACnBl/D,QAASktD,EAAWppD,OAlNL,GAmNfq7D,SAAU,EACVC,WAAYp/B,GAAaz1B,OAAO2a,IAAIwO,MACpC2rC,qBAAsBr/B,GAAaz1B,OAAO2a,IAAIuU,UAC9C6lC,kBAAmB,GACnBC,iBAAkB,GAEpBxQ,kBAAmB,KACnBx8D,MAAO,CAAEuvC,KAAM,QAGnButB,OAAQ,CACNrvD,SAAS,GAEXsvD,YAAa,CACX+5B,QAAS,CACPC,OAAQ,CAAEp+B,EAAG,IACbjoB,OAAQ,CAAEzR,OAAQ,GAClBi+B,OAAQ,CACNyD,SAAU,CACRrzB,QAAS,MAKjBttC,MAAO,CACLuvC,UAAM/9B,GAER+iC,QAAS,IACJhnC,GACH+vD,WAAY,SACVC,EACAC,EACA7H,GAEA,OAAO6C,GAA2B,CAChCC,gBAAkB/0B,KAAa+5B,YAAYF,EAAGC,EAAG7H,GACjD+C,aAAcpmD,OAAOorD,SAEzB,GAEF/nB,SACD,ECtOYqhD,OA/B0BjnF,IAQb,IARc,UACxCk+E,EAAS,UACT33E,EAAS,KACTwK,EAAI,QACJjV,EAAO,eACPkrD,EAAc,OACdxgD,EAAS,SAAQ,MACjBvW,GACM+P,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,yCACtB41B,EAAQpmB,mBAAQ,KACb,CACL/S,OAAQkkD,GAAe,CAAEp2C,OAAM9gB,QAAOiuF,YAAWpiF,YACjDtN,GAAI,uCACJw4D,oBAED,CAACj2C,EAAMmtE,EAAWl3B,EAAgBlrD,EAAS7L,IAE9C,OACE2W,gBAAA,UAAQL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACpD2S,eAAC+/C,GAAK,CACJtqB,MAAOA,EACP71B,UAAWA,EACXC,OAAQC,EACRkgD,iBAAkBhgD,eAACm/E,GAAkC,MAEvDn/E,eAAA,KAAGJ,UAAU,wCAAuCvS,SAAE/D,MAC/C,ECUEi3F,OAzCiBlnF,IAME,IAND,UAC/BuG,EAAS,sBACT4gF,EAAqB,eACrBC,EAAc,eACdC,EAAc,OACd7gF,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,+BAKtB8gF,EAJmBtxE,mBACvB,IAAMwC,oBAAU6uE,GAAgBnyE,GAAKA,EAAEJ,kBACvC,CAACuyE,IAEgC,GACnC,OACE1gF,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAA,SAAA3S,SACE2S,eAAC2kE,GAAe,CACd11D,QAAS,CACP3gB,GAAaO,KACbP,GAAaM,aACbN,GAAaE,UACbF,GAAaG,SACbwiB,QAAO2lC,GACHA,IAAMtoD,GAAaE,YACZmyF,EAAU9lF,OAEjB+7C,IAAMtoD,GAAaM,eACS,OAArB4xF,QAAqB,IAArBA,MAAuB3lF,QAE9B+7C,IAAMtoD,GAAaO,QACE,OAAd4xF,QAAc,IAAdA,MAAgB5lF,UAI7BgF,OAAQC,OAGR,ECpCV,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAAVH,CAAU,yCAItBke,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAbH,CAAa,sFAETI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAI/DyuD,GAAoB16E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,gBAAVH,CAAU,8EAM9BsiF,GAAetiF,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAATH,CAAS,sCAIxB26E,GAAa36E,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAXH,CAAW,iDACbI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAClCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAErD2hF,GAAWviF,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAATH,CAAS,sDAGTI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAEtDshF,GAAWxiF,aAAOiiF,IAAwB/hF,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAA/BH,CAA+B,0BAyGjCyiF,OAtFiB1nF,IAYJ,IAZK,UAC/BuG,EAAS,sBACT4gF,EAAqB,eACrBC,EAAc,eACdC,EAAc,UACdnJ,EAAS,KACTntE,EAAI,QACJjV,EAAO,YACPgkF,EAAW,QACXjlC,EAAO,WACPC,EAAU,OACVt0C,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gCAC5B,OACEI,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL4S,gBAAC2gF,GAAY,CAAAvzF,SAAA,CACX2S,eAACi5E,GAAU,CAAA5rF,SAAC,gBACZ2S,eAACy/B,GAAQ,CAAC5+B,QAAS,yBAErBb,eAAC6gF,GAAQ,CAAAxzF,SACN8sB,gBAAM/P,GAAQ,KACbpK,eAACyhD,GAAS,CACRnlD,OAAQ,CACNvC,OAAQ,CAAEhB,MAAO,aAAcP,IAAK,eAEtCob,UAAW,CACT7a,MAAOqR,EAAKsF,UACZlX,IAAK4R,EAAKuF,SAEZ9P,OAAQC,SAKhBE,eAAC8gF,GAAQ,CACPN,sBAAuBA,EACvBC,eAAgBA,EAChBC,eAAgBA,EAChB7gF,OAAQC,IAEVE,eAACY,GAAa,CACZG,gBAAiBozC,EACjBrzC,cAAeozC,GAAWilC,GAAeh/D,gBAAM/P,GAC/CpJ,cACEhB,eAACg5E,GAAiB,CAAA3rF,SAChB2S,eAACN,GAAU,CACTC,KACEu0C,EACE,wDAEAl0C,eAAAqyB,YAAA,CAAAhlC,SAAE,kGAMN2R,OAAQk1C,EAAU,SAAW,QAC7Br0C,OAAQA,MAIdgB,QACEqzC,GAAWilC,GAAeh/D,gBAAM/P,GAAQ,KACtCpK,eAACsgF,GAAgC,CAC/B/I,UAAWA,EACXntE,KAAMA,EACNjV,QAASA,EACT0K,OAAQC,EACRxW,MAAK,wCAAAyW,OAA0ClG,GAAgB,CAC7DE,OAAQ,aACRC,UAAWoQ,EAAKsF,YAChB,KAAA3P,OAAIlG,GAAgB,CACpBE,OAAQ,aACRC,UAAWoQ,EAAKsF,eAKxB7P,OAAQC,MAEA,ECzIhB,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,gBAAVH,CAAU,oBACbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElDrO,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,gBAAbH,CAAa,2BAGtB6wD,GAAoB7wD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sDAAAyV,YAAA,gBAAVH,CAAU,wCAI9BuzD,GAAOvzD,KAAO+wD,GAAE7wD,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,gBAATH,CAAS,sBACLI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UA4C7CwhF,OAlC0B3nF,IAEN,IAFO,QACxC04B,GACM14B,EACN,GAAY,OAAP04B,QAAO,IAAPA,MAASktB,MACZ,OAAO,KAET,MAAM,EAAEgD,EAAC,QAAEtyC,EAAO,UAAED,EAAS,oBAAEkoE,GAAwB7lD,EAAQktB,MACzDn/C,EAAU,uCAEhB,OACEG,gBAACO,GAAS,CAACZ,UAAWE,EAAY,cAAaA,EAAWzS,SAAA,CACxD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL2S,eAACyhD,GAAS,CACRnlD,OAAQ,CACNvC,OAAQ,CAAEvB,IAAK,aAAcO,MAAO,eAEtC6a,UAAW,CACTpb,IAAKmX,EACL5W,MAAO2W,GAET7P,OAAQC,IAET83E,GAAuB53E,eAAA,MAAA3S,SAAI,8BAE9B2S,eAAA,MAAA3S,SACE4S,gBAACkvD,GAAiB,CAAA9hE,SAAA,CAChB2S,eAAC6xD,GAAI,CAAAxkE,SAAC,iCACN4S,gBAAA,MAAA5S,SAAA,CAAK40D,EAAEgD,QAAQ,GAAG,cAGZ,EClDT,MAAMg8B,GAA8B,SACzChyE,GAMmD,IADnDC,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAEV,MAAM6Q,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDD,EAAS2D,mBACb,MACE5D,cACAkE,QAASV,EAAQU,QACjBhE,WACA3Q,KAAMiU,EAAQjU,KACds2D,QAASriD,EAAQqiD,WAEnB,CAAC7lD,EAAawD,EAAStD,IAGzB,OAAOM,oBACL,CAAC,yBAA0BP,IAC3B,IVsB2C1N,WAYA,IAZO,YACpDyN,EAAW,QACXkE,EAAO,SACPhE,EAAQ,KACR3Q,EAAI,QACJs2D,GAODx3D,EACC,MAAMwxC,EAAG,IAAAvrC,OAAO4L,EAAQ,mBAAA5L,OACtB/E,IAAS3S,EAAoC,iBAAI,UAAY,QAG/D,IAAIqjB,EAAiD,CACnDiE,QAAS/V,GAA0B+V,IASrC,MAPa,SAAT3U,GAA4B,OAAPs2D,QAAO,IAAPA,KAASz2D,SAChC6Q,EAAS,IACJA,EACH4lD,QAAgB,OAAPA,QAAO,IAAPA,OAAO,EAAPA,EAAS9nC,KAAK,OAId,SAATxuB,EACKsP,GACJwD,KAAgBw9B,EAAK5/B,EAAQ,CAC5BhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,MAErC5N,MAAKC,GAAYkM,GAA6B6xE,GAAY/9E,KAC1DkgF,OAAMn0E,GAAKpM,QAAQsM,OAAOF,KAExBS,GACJwD,KAAwBw9B,EAAK5/B,EAAQ,CACpChB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,MAErC5N,MAAKC,GACJkM,GAAqCoyE,GAAYt+E,KAElDkgF,OAAMn0E,GAAKpM,QAAQsM,OAAOF,IAAG,EUhExBq3E,CAAgCx1E,IACtC,CACE3U,UAAW0U,KAAiBE,GAAYuD,EACxCtB,sBAAsB,GAG5B,ECJMswE,GAAY5/E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAVH,CAAU,qEAKtBke,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAbH,CAAa,0EAETI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAElD7rB,GAASA,EAAMC,MAAM+/B,KAAKE,MAEvCu/C,GAAc7/E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAAVH,CAAU,uBAGxB06E,GAAoB16E,aAAOoC,IAAkBlC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAAzBH,CAAyB,gFAM7CotB,GAASptB,KAAOqtB,OAAMntB,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAbH,CAAa,4FAOtB8/E,GAAY9/E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAVH,CAAU,gDAEjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAGrC4zD,GAAgB//E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAVH,CAAU,kDAChBI,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,YAAAS,OAAWrB,EAAMC,MAAM2C,OAAO2a,IAAIwO,SAoPvD02D,OAhOc9nF,IAYK,IAZJ,sBAC5BmnF,EAAqB,eACrBC,EAAc,eACdC,EAAc,UACd9gF,EAAS,qBACToW,EAAoB,oBACpBorE,EAAmB,uBACnB7C,EAAsB,OACtB1+E,EAAS,SAAQ,QACjByxD,EAAO,kBACPssB,EAAiB,cACjBJ,GACMnkF,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,4BACtBxE,EAAQgC,cAAapE,GAA6BA,EAAMoC,SACxD,gBAAEgnB,EAAe,UAAEnX,GAAc2V,KAGjC1rB,EAAU+V,EAAU/V,QACpBsnF,EAAiBvxE,EAAUlV,OAG/BoU,KAAMo0E,EACNtqC,QAASuqC,EACTtqC,WAAYuqC,EACZtqC,UAAWuqC,GACTsC,GACF,CACEjmF,KAAM,OACNs2D,QAASA,IAEVhiD,kBAAQgiD,KAAan3C,gBAAMyjE,IAGxBgB,EAA2CvvE,mBAAQ,IAErD8K,gBAAMqjE,IACNrjE,gBAAMqkE,IACNh1E,OAAOmH,OAAO6tE,GAAajvE,OAAMqG,GAAK1E,iBAAO0E,KAEtC,KAGF2nE,GAAqBiB,EAA0BhB,IACrD,CAACgB,EAAahB,KAGVtoD,EAAUx9B,GAAW2X,mBAAQ,IAC9B8K,gBAAMykE,IAAsBzkE,gBAAMyjE,GAC7B,GAEFD,GAA0BiB,EAAmBhB,IACnD,CAACgB,EAAmBhB,KAErBxzE,KAAMi3E,EACNntC,QAASotC,EACTntC,WAAYotC,EACZntC,UAAWotC,GACTP,GACF,CACEtxE,QAASjX,KAAwB,OAAjBklF,QAAiB,IAAjBA,OAAiB,EAAjBA,EAAmBjuE,SAChCyuD,IAAI,EAAGh3E,GACP2S,OAAO,cACViB,KAAM3S,EAAkBE,oBAExBq1F,GAIE6D,EAAgDpyE,mBAAQ,KAC5D,GACE8K,gBAAMnE,IACNmE,gBAAMm3C,IACNn3C,gBAAMumE,IACNvmE,gBAAMknE,IACNlnE,gBAAMsiE,GAEN,OAAO,KAGT,MAAMiF,EAAYL,EACZM,EAAcpF,GAAsB,CACxCvnF,SAAUghB,EACVhgB,MAAO0qF,EACPt2E,KAAMs3E,EACNvsF,UACAsnF,iBACAnrB,YAGF,OAAIhiD,kBAAQqyE,GACH,KAGF,IACFD,EACHt3E,KAAMu3E,EACP,GACA,CACDjB,EACAW,EACArrE,EACA7gB,EACAsnF,EACAnrB,IAGIwtB,EAAsBzvE,mBAAQ,IAEhCovE,GACCE,IACExkE,gBAAMqkE,IACLh1E,OAAOmH,OAAO6tE,GAA0BjvE,OAAMqG,GAAK1E,iBAAO0E,OAE/D,CAAC6oE,EAAoBE,EAAsBH,IACxCO,EAAmB1vE,mBAAQ,MAChB,OAAPiiD,QAAO,IAAPA,KAASz2D,SAAUqW,iBAAO0tE,IACjC,CAACA,EAAmBttB,IACjBswB,EAAsBvyE,mBAAQ,IAEhCiyE,GACCE,GACEH,EAAkCj3E,KAAKmF,OAAMy/B,GAAK99B,iBAAO89B,EAAEt+B,UAE/D,CAAC2wE,EAAaC,EAAoBE,IAC/BK,EAAmBxyE,mBAAQ,IAAM6B,iBAAOuwE,IAAqB,CACjEA,IAKIzC,EADJN,GAAyB6C,GAC0BhD,EAE/CU,GACHD,GAAqBF,GAAuB8C,EACzC1C,GACHF,GAAqBD,GAAoB8C,EACtCC,EAAiBrD,GAAsB6C,EAE7C,OACErhF,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL2S,eAAA,MAAA3S,SAAI,cACJ2S,eAACy/B,GAAQ,CAAC5+B,QAAS,iBAErBb,eAACm+E,GAAW,CAAA9wF,SACRy0F,IAAmB7C,IAAoBC,EAiCvCj/E,gBAACi+E,GAAS,CAAA7wF,SAAA,CACR2S,eAACk5E,GAAe,CACdj9D,IAAK2iE,EACLrH,UAAgB,OAALl8E,QAAK,IAALA,OAAK,EAALA,EAAQ,wBACnB3D,QAASA,EACTyhF,YAAa4F,EACb7qC,QAASuqC,EACTtqC,WAAYuqC,GAAyBH,EACrCrpD,SAAUA,EACVr1B,OAAQC,EACR+9B,QAAS79B,eAACghF,GAAgC,IAC1CtJ,QAAS,cAEX13E,eAAC+gF,GAAuB,CACtBP,sBAAuBA,EACvBC,eAAgBA,EAChBC,eAAgBA,EAChBt2E,KAAMq3E,EACNlK,UAAgB,OAALl8E,QAAK,IAALA,OAAK,EAALA,EAAQ,wBACnBlG,QAASA,EACTgkF,YAAa0I,EACb3tC,QAASotC,GAAsBF,EAC/BjtC,WAAY6qC,EACZn/E,OAAQC,OAvDZE,eAACg5E,GAAiB,CAAA3rF,SAChB2S,eAACN,GAAU,CACTC,KACEs/E,EACEj/E,eAAAqyB,YAAA,CAAAhlC,SAAE,sDAEF4S,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAA,KAAA3S,SAAG,6EAIH4S,gBAAA,KAAA5S,SAAA,CAAG,QACK,IACN2S,eAACygC,GAAS,CACRryC,KAAI,GAAA2R,OAAKD,EAAU,YACnB2mB,GAAIpE,EAAgB,CAClB1N,oBAAoB,IAEtB9U,OAAQC,EAAWzS,SACpB,SAEY,IAAI,8BAMzB2R,OAAO,QACPa,OAAQA,QAgChBI,gBAACyrB,GAAM,CAAAr+B,SAAA,CACH2xF,IACDC,IAAoBC,EACnBj/E,gBAACm+E,GAAS,CAAA/wF,SAAA,CACR2S,eAACq+E,GAAa,CAAAhxF,SACZ2S,eAAA,QAAMJ,UAAU,iBAAgBvS,SAAC,0BAEnC2S,eAAA,SAAA3S,SAAO,sBACP2S,eAACy/B,GAAQ,CAAC5+B,QAAQ,0BANoB,KAS1Cb,eAACk9C,GAAc,CAACr9C,OAAQC,SAEtB,EC9SV,MAAMiiF,GAAqBnsF,GACzBsb,iBAAOtb,GACH,GACAo2B,iBACEp2B,EAAMwC,KAAImV,IACD,CACLzlB,MAAO0P,GAAU+V,GACjBmD,MAAOnD,EACPsuB,UAAU,MAGd,SAEFmmD,GAA4B9sF,GAChCgc,iBAAOhc,GACH,GACA82B,iBACE92B,EAAakD,KAAIqiF,IACR,CACL3yF,MAAO2yF,EACP/pE,MAAO+pE,EACP5+C,UAAU,MAGd,eAEFomD,GAAoBA,CACxBjsF,EACA0qF,IAEAxvE,iBAAOwvE,GACH,GACA10D,iBACEmI,kBACEn+B,EAAMoC,KAAIgd,IACR,MAAM8sE,EAAexB,EAAepyE,MAAKC,GAAKA,EAAE6G,SAAWA,IAC3D,OAAS8sE,EACL,CACEp6F,MAAOo6F,EAAah0E,SACpBwC,MAAO0E,EACPymB,UAAU,GAEZ,IAAI,KAGZ,SAIFr7B,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAVH,CAAU,0DAKtB6jF,GAAmB7jF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAVH,CAAU,qEAK7B0lE,GAAS1lE,aAAOumE,IAASrmE,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAhBH,CAAgB,sEAkKhB8jF,OAlJS/oF,IAMI,IANH,UACvBuG,EAAS,eACT6gF,EAAc,sBACdD,EAAqB,eACrBE,EAAc,OACd7gF,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,sBACtB,gBAAEyiB,EAAe,UAAEpX,GAAc2V,KACjCwhE,EAAuBn3E,EAAUhW,aACjCotF,EAAgBp3E,EAAUtV,MAC1B2sF,EAAgBr3E,EAAUlV,MAC1BwsF,EAAmBnzE,mBACvB,IAAMwC,oBAAU6uE,GAAgBnyE,GAAKA,EAAEJ,kBACvC,CAACuyE,IAEGC,EAAY6B,EAAiB,GAC7BC,EAA6BpzE,mBACjC,IACEmzE,EAAiBpqF,KAAIpC,GACnBA,EAAMib,QAAO1C,GAAKg0E,EAAc74E,SAAS6E,EAAE6G,UAAShd,KAAImW,GAAKA,EAAE6G,YAEnE,CAACotE,EAAkBD,IASfG,EAAiBrzE,mBAAQ,IAAM0yE,GAAkBtB,IAAiB,CACtEA,IAEIkC,EAAsBtzE,mBAAQ,IAAM0yE,GAAkBO,IAAgB,CAC1EA,IASIM,EAAwBvzE,mBAC5B,IAAM2yE,GAAyBxB,IAC/B,CAACA,IAEGqC,EAA6BxzE,mBACjC,IAAM2yE,GAAyBK,IAC/B,CAACA,KAoBIS,EAAmBC,GAAsB1zE,mBAC9C,IACEmzE,EAAiBpqF,KAAIpC,GACnBisF,GACEjsF,EAAMoC,KAAImW,GAAKA,EAAE6G,SACjBsrE,MAGN,CAAC8B,EAAkB9B,KAEdsC,EAAwBC,GAA2B5zE,mBACxD,IACEozE,EAA2BrqF,KAAI8qF,GAC7BjB,GAAkBiB,EAAiBxC,MAEvC,CAACA,EAAgB+B,IAGnB,OACEziF,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD4S,gBAACkiF,GAAgB,CAAA90F,SAAA,CACE,OAAdozF,QAAc,IAAdA,KAAgB5lF,OACjBmF,eAACgkE,GAAM,CACLn7C,UAAU,EACVw6C,SAAS,EACTv7E,MAAM,OACN87E,YAAY,YACZF,cAvEY7nC,IACpBvZ,EAAgB,CACd,CAAChvB,GAAaY,OAAQ2nC,EAASzjC,KAAIoY,GAAKA,EAAEE,SAC1C,EAqEMzB,QAASyzE,EACT3f,iBAAiB,EACjBryD,MAAOiyE,EACP9iF,OAAQC,IAER,KACoB,OAArB0gF,QAAqB,IAArBA,KAAuB3lF,OACxBmF,eAACgkE,GAAM,CACLn7C,UAAU,EACVw6C,SAAS,EACTv7E,MAAM,eACN87E,YAAY,oBACZF,cAvEmB7nC,IAC3BvZ,EAAgB,CACd,CAAChvB,GAAaU,eAAgB6nC,EAASzjC,KAAIoY,GAAKA,EAAEE,SAClD,EAqEMzB,QAAS2zE,EACT7f,iBAAiB,EACjBryD,MAAOmyE,EACPhjF,OAAQC,IAER,KACD6gF,EAAU9lF,OACXmF,eAACgkE,GAAM,CACLn7C,UAAU,EACVw6C,SAAS,EACTv7E,MAAM,YACN87E,YAAY,iBACZF,cA7DgB7nC,IACxBvZ,EAAgB,CACd,CAAChvB,GAAac,OAAQ,IACjBynC,EAASzjC,KAAIoY,GAAKA,EAAEE,WACpB+xE,EAA2B,KAEhC,EAwDMxzE,QAAS8zE,EACThgB,iBAAiB,EACjBryD,MAAOuyE,EACPpjF,OAAQC,IAER,KACJE,eAACgkE,GAAM,CACLn7C,UAAU,EACVw6C,SAAS,EACTv7E,MAAM,UACN87E,YAAY,eACZF,cAjFiB7nC,IACvBvZ,EAAgB,CACd,CAAChvB,GAAac,OAAQ,IACjBynC,EAASzjC,KAAIoY,GAAKA,EAAEE,WACpB+xE,EAA2B,KAEhC,EA4EIxzE,QAAS6zE,EACT/f,iBAAiB,EACjBryD,MAAOsyE,EACPnjF,OAAQC,QAGF,EC5NhB,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sDAAAyV,YAAA,gBAAVH,CAAU,oBACbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElDrO,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,mDAAAyV,YAAA,gBAAbH,CAAa,2BAGtB6wD,GAAoB7wD,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8DAAAyV,YAAA,gBAAVH,CAAU,wCAI9BuzD,GAAOvzD,KAAO+wD,GAAE7wD,WAAA,CAAAxV,YAAA,iDAAAyV,YAAA,gBAATH,CAAS,sBACLI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UA2C7C2jF,OAjCkC9pF,IAEd,IAFe,QAChD04B,GACM14B,EACN,GAAY,OAAP04B,QAAO,IAAPA,MAASktB,MACZ,OAAO,KAET,MAAM,EAAEgD,EAAC,QAAEtyC,EAAO,UAAED,GAAcqiB,EAAQktB,MACpCn/C,EAAU,+CAEhB,OACEG,gBAACO,GAAS,CAACZ,UAAWE,EAAY,cAAaA,EAAWzS,SAAA,CACxD2S,eAACwc,GAAM,CAAAnvB,SACL2S,eAACyhD,GAAS,CACRnlD,OAAQ,CACNvC,OAAQ,CAAEvB,IAAK,aAAcO,MAAO,eAEtC6a,UAAW,CACTpb,IAAKmX,EACL5W,MAAO2W,GAET7P,OAAQC,MAGZE,eAAA,MAAA3S,SACE4S,gBAACkvD,GAAiB,CAAA9hE,SAAA,CAChB2S,eAAC6xD,GAAI,CAAAxkE,SAAC,kCACN2S,eAAA,MAAA3S,SAAK40D,EAAEgD,QAAQ,YAGT,ECpDT,MAAMm+B,GAAsC,SACjDn0E,GAM+B,IAD/BC,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAEV,MAAM6Q,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDD,EAAS2D,mBACb,MACE5D,cACAkE,QAASV,EAAQU,QACjBhE,WACA2lD,QAASriD,EAAQqiD,WAEnB,CAAC7lD,EAAawD,EAAStD,IAGzB,OAAOM,oBACL,CAAC,iCAAkCP,IACnC,IduEmD1N,WAU5B,IAVmC,YAC5DyN,EAAW,QACXkE,EAAO,SACPhE,EAAQ,QACR2lD,GAMDtjD,EACC,MAAMs9B,EAAG,IAAAvrC,OAAO4L,EAAQ,+BAExB,IAAID,EAAiD,CACnDiE,QAAS/V,GAA0B+V,IAQrC,OANa,OAAP2hD,QAAO,IAAPA,KAASz2D,SACb6Q,EAAS,IACJA,EACH4lD,QAAgB,OAAPA,QAAO,IAAPA,OAAO,EAAPA,EAAS9nC,KAAK,OAGpBlf,GACJwD,KAAgBw9B,EAAK5/B,EAAQ,CAC5BhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,MAErC5N,MAAKC,GAAYkM,GAA6B6xE,GAAY/9E,KAC1DkgF,OAAMn0E,GAAKpM,QAAQsM,OAAOF,IAAG,EclGxBw5E,CAAwC33E,IAC9C,CACE3U,UAAW0U,KAAiBE,GAAYuD,EACxCtB,sBAAsB,GAG5B,ECZMswE,GAAY5/E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAVH,CAAU,8EAMtBke,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAbH,CAAa,0EAETI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAElD7rB,GAASA,EAAMC,MAAM+/B,KAAKE,MAEvCu/C,GAAc7/E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAAVH,CAAU,uBAGxB06E,GAAoB16E,aAAOoC,IAAkBlC,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,gBAAzBH,CAAyB,gFAM7CotB,GAASptB,KAAOqtB,OAAMntB,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAbH,CAAa,4FAOtB8/E,GAAY9/E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAVH,CAAU,gDAEjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAGrC4zD,GAAgB//E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAVH,CAAU,kDAChBI,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,YAAAS,OAAWrB,EAAMC,MAAM2C,OAAO2a,IAAIwO,SAwJvD64D,OAzIkBjqF,IAOC,IAPA,UAChCuG,EAAS,uBACT2+E,EAAsB,OACtB1+E,EAAS,SAAQ,QACjByxD,EAAO,kBACPssB,EAAiB,cACjBJ,GACMnkF,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,+BACtBxE,EAAQgC,cAAapE,GAA6BA,EAAMoC,SACxD,gBAAEgnB,GAAoBxB,MAG1BzW,KAAMo0E,EACNtqC,QAASuqC,EACTtqC,WAAYuqC,EACZtqC,UAAWuqC,GACTyE,GACF,CACEpoF,KAAM,OACNs2D,QAASA,IAEVhiD,kBAAQgiD,IAILstB,EAA2CvvE,mBAAQ,IAErD8K,gBAAMqjE,IACNrjE,gBAAMqkE,IACNh1E,OAAOmH,OAAO6tE,GAAajvE,OAAMqG,GAAK1E,iBAAO0E,KAEtC,KAGF2nE,GAAqBiB,EAAahB,IACxC,CAACgB,EAAahB,KAGVtoD,EAAUx9B,GAAW2X,mBAAQ,IAC9B8K,gBAAMykE,IAAsBzkE,gBAAMyjE,GAC7B,GAEFD,GAA0BiB,EAAmBhB,IACnD,CAACgB,EAAmBhB,IAEjBkB,EAAsBzvE,mBAAQ,IAEhCovE,GACCE,IACExkE,gBAAMqkE,IACLh1E,OAAOmH,OAAO6tE,GAAajvE,OAAMqG,GAAK1E,iBAAO0E,OAElD,CAAC6oE,EAAoBE,EAAsBH,IACxCO,EAAmB1vE,mBAAQ,MAChB,OAAPiiD,QAAO,IAAPA,KAASz2D,SAAUqW,iBAAO0tE,IACjC,CAACA,EAAmBttB,IAGjB0tB,EAD0BN,GACqBH,EAE/CU,GAAoBD,GAAqBF,EACzCI,GAAqBF,GAAqBD,EAEhD,OACE9+E,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL2S,eAAA,MAAA3S,SAAI,sBACJ2S,eAACy/B,GAAQ,CAAC5+B,QAAQ,yBAEpBb,eAACm+E,GAAW,CAAA9wF,SACRoxF,IAAuBQ,IAAoBC,EAiC3Cl/E,eAACk+E,GAAS,CAAA7wF,SACR2S,eAACk5E,GAAe,CACdj9D,IAAK2iE,EACLrH,UAAgB,OAALl8E,QAAK,IAALA,OAAK,EAALA,EAAQ,gCACnB3D,QAASA,EACTyhF,YAAa4F,EACb7qC,QAASuqC,EACTtqC,WAAYuqC,GAAyBH,EACrCrpD,SAAUA,EACVr1B,OAAQC,EACR+9B,QAAS79B,eAACmjF,GAAwC,IAClDzL,QAAS,wBA3Cb13E,eAACg5E,GAAiB,CAAA3rF,SAChB2S,eAACN,GAAU,CACTC,KACEs/E,EACEj/E,eAAAqyB,YAAA,CAAAhlC,SAAE,sDAEF4S,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAA,KAAA3S,SAAG,6EAIH4S,gBAAA,KAAA5S,SAAA,CAAG,QACK,IACN2S,eAACygC,GAAS,CACRryC,KAAI,GAAA2R,OAAKD,EAAU,YACnB2mB,GAAIpE,EAAgB,CAClB1N,oBAAoB,IAEtB9U,OAAQC,EAAWzS,SACpB,SAEY,IAAI,8BAMzB2R,OAAO,QACPa,OAAQA,QAoBhBI,gBAACyrB,GAAM,CAAAr+B,SAAA,CACH2xF,IACDC,IAAoBC,EACnBj/E,gBAACm+E,GAAS,CAAA/wF,SAAA,CACR2S,eAACq+E,GAAa,CAAAhxF,SACZ2S,eAAA,QAAMJ,UAAU,iBAAgBvS,SAAC,0BAEnC2S,eAAA,SAAA3S,SAAO,sBACP2S,eAACy/B,GAAQ,CAAC5+B,QAAQ,0BANoB,KAS1Cb,eAACk9C,GAAc,CAACr9C,OAAQC,SAEtB,EC5MH,MAAMyjF,GAA2B,WAGU,IAFhDC,IAAgB5oF,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAChBsU,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAEV,MAAM6Q,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAGhDD,EAAS2D,mBACb,MACEm0E,sBAEF,CAACA,IAGH,OAAOv3E,oBACL,CAAC,0BAA2B,IAAKP,KACjC,IhByIwC1N,WAUlB,IAVyB,YACjDyN,EAAW,OACXC,EAAM,SACNC,GAODyF,EAQC,aAPgD9G,GAAIwD,KAAI,IAAA/N,OAClD4L,EAAQ,UACZD,EACA,CACEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAGxBrB,IAAI,EgB1JhBq5E,CAA6B,CAC3Bh4E,cACAE,WACAD,YAEJ,CACE3U,UAAW0U,KAAiBE,GAAYuD,EACxCtB,sBAAsB,GAG5B,EC7Ba81E,GAA4B,WAEJ,IADnCx0E,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAEV,MAAM,WAAE+oF,GAAe5oE,KAEjBtP,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDD,EAAS2D,mBACb,MACE5D,cACAE,cAEF,CAACF,EAAaE,IAGhB,OAAOM,oBACL,CAAC,2BAA4BP,IAC7B,IjBgByC1N,WAMpB,IAN2B,YAClDyN,EAAW,SACXE,GAIDtS,EAIC,aAHuBiR,GAAI4B,IAAI,IAADnM,OAAK4L,EAAQ,yBAAyB,CAClEjB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,IAAI,EiB1BZw5E,CAA8Bl4E,IACpC,CACE3U,UAAW0U,KAAiBE,GAAYuD,EACxCtB,sBAAsB,EACtByb,QAAShf,GACAs5E,EAAW,CAChBlN,UAAWvqE,cAAI7B,EAAO,aACtBw5E,YAAa,CACXh8F,GAAG,gCACHgsD,cAAe3nC,cAAI7B,EAAO,iCAMtC,ECFMkS,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAVH,CAAU,gCACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QACpC5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAE/DoV,GAAQrhC,aAAO65D,IAAU35D,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAAjBH,CAAiB,wBAGzBwlF,GAAUxlF,aAAO8jF,IAAgB5jF,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,eAAvBH,CAAuB,wBACpBI,GAASA,EAAMC,MAAM+/B,KAAKE,MAEvCmlD,GAAezlF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAAVH,CAAU,+DAEfI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aACrCzd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAGrC05D,GAAQ1lF,aAAO8d,IAAiB5d,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAAxBH,CAAwB,uDAEzBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAC1B5rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAE/Cf,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIob,aAIzC4sD,GAAc3lF,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAARH,CAAQ,eA+Mb4lF,OArMM7qF,IAGa,IAHZ,UACpBuG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kBACtBhE,EAAWob,gBACX,UAAE/L,GAAc2V,KAChBnM,EAAoB2B,GAAiBxa,EAASmb,QAC9CmtE,EAAuBzvE,EAAkBhF,UACzC00E,EAAqB1vE,EAAkB/E,QAEvCtU,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxD2iB,EAAe7wB,EAAalC,GAAkB3B,OAGlD8gB,KAAMi6E,EACNnwC,QAASowC,EACTnwC,WAAYowC,GACVb,KACE9F,EAA8CvuE,mBAAQ,KAC1D,GAAM+0E,GAAwBD,EAC5B,MAAO,CACLx0E,QAASjX,KAAO0rF,GAAoBrqF,OAAO,cAC3C2V,UAAWhX,KAAOyrF,GAAsBpqF,OAAO,eAGnD,GAAkB,OAAdsqF,QAAc,IAAdA,KAAgBxpF,OAAQ,CAC1B,MAAM2pF,EAAsBH,EAAepzE,QAAO1C,GAChD7V,KAAO6V,EAAEoB,SAAS+tE,SAAShlF,UAE7B,OAA0B,OAAnB8rF,QAAmB,IAAnBA,OAAmB,EAAnBA,EAAqBC,KAC9B,IACC,CAACN,EAAsBC,EAAoBC,KAG5Cj6E,KAAMs6E,EACNxwC,QAASywC,EACTxwC,WAAYywC,GACVrB,MAGFn5E,KAAM4L,EACNk+B,QAAS2wC,EACT1wC,WAAY2wC,GACVr3E,KAGEs3E,EAEK11E,mBAAQ,IACb8K,gBAAMnE,GACD,KlBwMXA,IAEOA,EAAqB/E,QAC1B+9B,KAAOA,EAAE2rC,eAAiB9iF,GAAa6R,SAASslC,EAAE2rC,gBkBzM3CqK,CAA6BhvE,IACnC,CAACA,IAGEivE,EAAoD51E,mBAAQ,IAC5D8K,gBAAM4qE,IAA8B5qE,gBAAMuqE,GACrC,KlBuMiC5kE,KAQxB,IARyB,0BAC7CilE,EAAyB,sBACzBL,EAAqB,UACrBx5E,GAKD4U,EACC,MAAMlqB,EAAQsV,EAAUtV,MAClBV,EAAegW,EAAUhW,aACzBc,EAAQkV,EAAUlV,MAExB,IAAKJ,EAAMiF,SAAW7E,EAAM6E,SAAW3F,EAAa2F,OAClD,OAAOkqF,EAA0B3sF,KAAI42C,GAAKA,EAAEnnD,KAG9C,IAAIq9F,EAAqC,GACrCC,EAAsC,GAC1C,GAAMnvF,EAAM6E,OAAQ,CAClB,MAAOuqF,EAAwBC,GAA2BxzE,oBACxD6yE,GACAn2E,GAAKA,EAAEJ,iBACP/V,KAAIktF,GACJA,EACGr0E,QAAO1C,GAAKvY,EAAM0T,SAAS6E,EAAE6G,UAC7Bhd,KAAImW,GAAKA,EAAE8sE,6BAIhB6J,EAAsBjsC,mBAASmsC,GAC/BD,EAAuBlsC,mBAASosC,EAClC,CAEA,OAAON,EACJ9zE,QAAO+9B,IACN,IAAIhoD,GAAS,EAab,OAZM4O,EAAMiF,SACV7T,EAASA,GAAU4O,EAAM8T,SAAS4yE,GAAkBttC,EAAE2rC,gBAElDzlF,EAAa2F,QAAUm0C,EAAEyrC,cAC7BzzF,EAASA,GAAUkO,EAAawU,SAASslC,EAAEyrC,cAEvCyK,EAAoBrqF,SACxB7T,EAASA,GAAUk+F,EAAoBx7E,SAASslC,EAAEnnD,KAE9Cs9F,EAAqBtqF,SACzB7T,EAASA,GAAUm+F,EAAqBz7E,SAASslC,EAAEnnD,KAE9Cb,CAAM,IAEdoR,KAAI42C,GAAKA,EAAEnnD,IAAG,EkBxPR09F,CAA+B,CACpCR,4BACAL,wBACAx5E,eAED,CAAC65E,EAA2BL,EAAuBx5E,IAIhDu1E,EAAsCpxE,mBAAQ,IAC9C8K,gBAAM4qE,GACD,KlBmCX/uE,IAEA5C,eACE+gB,kBAAQne,EAAqB5d,KAAI42C,GAAKstC,GAAkBttC,EAAE2rC,kBkBpCnD6K,CAAsBT,IAC5B,CAACA,IAEEvE,EAA8CnxE,mBAAQ,IACtD8K,gBAAM4qE,GACD,KlBmCX/uE,IACkB5C,eAAK+gB,kBAAQne,EAAqB5d,KAAI42C,GAAKA,EAAEyrC,gBkBlCtDgL,CAAyBV,IAC/B,CAACA,IAOEW,EAA8Cr2E,mBAAQ,IAExD8K,gBAAMnE,IACNmE,gBAAMuqE,IACNxzE,iBAAO6zE,GAEA,KlByN4BY,EACvC3vE,EACA0uE,EACAK,KAEA,MAAMa,EAA8Bb,EAA0B3sF,KAAImW,GAAKA,EAAE1mB,KACnEg+F,EAAgBnB,EACnBtsF,KAAI8O,IACH,MAAMkH,EAAW4H,EAAqB1H,MACpC0gC,GAAKA,EAAEnnD,KAAOqf,EAAKsH,qBAEfs3E,EAAY5+E,EAAKm0E,yBAAyBpqE,QAAOppB,GACrD+9F,EAA4Bl8E,SAAS7hB,KAEjCqmB,EAAWhH,EAAKiH,gBACV,OAARC,QAAQ,IAARA,OAAQ,EAARA,EAAUhgB,OAAS8Y,EAAKsH,mBAA8Bk5B,WACrDxgC,EAAKgH,SACJ0tE,EAAgB10E,EAAKiH,eAAiBD,EAAW,KACvD,MAAO,IACFhH,EACH00E,gBACA1tE,WACAmtE,yBAA0ByK,EAC3B,IAEF70E,QAAO1C,KAAOA,EAAE8sE,yBAAyBxgF,SAC5C,OAAOuiF,GAAeyI,EAAc,EkBjP3BF,CACL3vE,EACA0uE,EACAK,IAED,CAAC/uE,EAAsB0uE,EAAuBK,IAE3CxG,EACJqG,GACAE,GACAP,EACInD,EACJuD,GACAE,GACAP,EAGFl0E,qBAAU,KACRzU,SAASrS,MCrMX+hB,GDqMwC2S,EAAa,GAClD,CAACA,EAAcniB,IAElB,MAAMkqF,EAA8B,OAAL1qF,QAAK,IAALA,KAAQ,sBACrC2E,eAACmhF,GAAoB,CACnBX,sBAAuBA,EACvBC,eAAgBA,EAChBC,eAAgBgF,EAChB1vE,qBAAsBA,EACtBorE,oBAAqBA,EACrB7C,uBAAwBA,EACxB1+E,OAAQC,EACRwxD,QAAS2zB,EACTrH,kBAAmBA,EACnBJ,cAAe6G,IAEf,KAEE2B,EAAsC,OAAL3qF,QAAK,IAALA,KACrC,8BAEA2E,eAACsjF,GAAwB,CACvB/E,uBAAwBA,EACxB1+E,OAAQC,EACRwxD,QAAS2zB,EACTrH,kBAAmBA,EACnBJ,cAAe6G,IAEf,KAEE4B,EAA+B,OAAL5qF,QAAK,IAALA,KAAQ,uBACtC2E,eAACs+E,GAAiB,CAChBC,uBAAwBA,EACxB1+E,OAAQC,EACRwxD,QAAS2zB,EACTrH,kBAAmBA,EACnBJ,cAAe6G,IAEf,KAEE6B,EAA8B,OAAL7qF,QAAK,IAALA,KAAO8qF,SACpClmF,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACG04F,EACAC,EACAC,KAGHjmF,eAACq3E,GAAa,CAACx3E,OAAQC,IAGnBsmF,EAA6B,OAAL/qF,QAAK,IAALA,KAAQ,yBACpC4E,gBAAC8jF,GAAY,CAAA12F,SAAA,CACX2S,eAACo/B,GAAQ,CAACC,SAAe,OAALhkC,QAAK,IAALA,OAAK,EAALA,EAAQ,2BAC5B4E,gBAACgkF,GAAW,CAAA52F,SAAA,CAAC,0EAC8D,IACzE2S,eAACgkF,GAAK,CAAC51F,KAAK,mBAAmByR,OAAQC,UAGzC,KAEJ,OACEG,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CAChD+4F,EACDnmF,gBAACsc,GAAc,CAAAlvB,SAAA,CACb2S,eAAC6pE,GAAc,CACbhpE,QAASb,eAAC2/B,GAAK,CAACr2C,MAAO00B,EAAcne,OAAQC,IAC7CD,OAAQC,IAEVG,gBAACw8C,GAAkB,CAAApvD,SAAA,CACjB2S,eAAC8jF,GAAO,CACNrD,eAAgBA,EAChBD,sBAAuBA,EACvBE,eAAgBgF,EAChB7lF,OAAQC,IAETomF,UAGD,EE9QV,MAAM1lF,GAAYlC,KAAOyzC,QAAOvzC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAAdH,CAAc,uDACpBI,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAO/oB,GAAE,WAAAQ,OAAUrB,EAAMC,MAAM2C,OAAO4mB,UAK3Dm+D,GAAgB/nF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAVH,CAAU,yCAI1B0sE,GAAS1sE,aAAOsrB,IAAYprB,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,gBAAnBH,CAAmB,8DAItBI,GAAK,eAAAqB,OAAmBrB,EAAMC,MAAM2C,OAAO4mB,UAEjDwC,GAAOpsB,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,mBAAAyV,YAAA,gBAAbH,CAAa,+EACTI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OACpCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMC,KACtCZ,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAqC5ConF,OAzBWjtF,IAKZ,IALa,UACzBuG,EAAS,SACTyN,EAAW,KAAI,OACfm+D,EAAM,OACN3rE,EAAS,UACHxG,EACN,MAAM,MAAEo4D,EAAK,KAAErjE,GAASo9E,EAExB,OACEvrE,gBAACO,GAAS,CAACZ,UAAWA,EAAW,iBAAAG,OAAgBF,EAAM,gBAAexS,SAAA,CACpE2S,eAACqmF,GAAa,CAAAh5F,SACZ2S,eAACgrE,GAAM,CACL5hD,QAAO,GAAArpB,OAAK3R,EAAI,UAChBiS,IAAKoxD,EACL5xD,OAAM,GAAAE,OAAKF,EAAM,oBAGrBI,gBAAA,OAAK,wBAAsB,OAAM5S,SAAA,CAC/B2S,eAAC0qB,GAAI,CAAAr9B,SAAEe,IACNif,OAEO,EC7CT,MCCMywD,GAAkBC,IAK7B,MAAO3zD,EAAM4zD,GAAYhuD,mBAAsC,OACxDqwC,EAAgBue,GAAsB5uD,oBAAkB,IACxD6Z,EAAU08D,GAAgBv2E,oBAAkB,IAE3C5F,KAAMsiE,GAAqBj9D,KAC7BhE,EAAcpO,cAAapE,GAC/BiT,cAAIjT,EAAO,0BAEPmD,EAAsBiB,cAAapE,GACvCiT,cAAIjT,EAAO,UAEP0S,EAAWtO,cAAapE,GAC5BiT,cAAIjT,EAAO,8BAEPutF,EAAgBn3E,mBAAQ,IACvBnO,sBAAYwrE,GAQV,GAPEtwE,EAAK+Q,cAAczD,SAAS,iBACf,OAAhBgjE,QAAgB,IAAhBA,KAAkBr+D,YAClBq+D,EAAiBr+D,YAAY4C,QAC1BoD,GAA2BA,EAAExsB,KAAOuU,EAAKvU,KAE5C,CAACuU,IAGN,CAACswE,EAAkBtwE,IAkCtB,OAhCAgU,qBAAU,KACR,WACE,GAAKlP,sBAAY68D,GAKf,IACE,IAAKl0C,IAAaw2B,GAAoBmmC,EAAc3rF,OAAQ,CAC1D+jE,GAAmB,GACnB,MAAMG,ODrCgB/gE,WAIC,IAJM,YACvCyN,EAAW,SACXE,EAAQ,MACRzV,GACamD,EAOb,aANuByR,GAAUoB,IAAI,IAADnM,OAAK4L,EAAQ,gBAAgB,CAC/DjB,QAAS,CACPmB,cAAc,UAAD9L,OAAY0L,IAE3BC,OAAQ,CAAExV,MAAOA,EAAMkC,KAAIgE,GAAQA,EAAKsQ,QAAO8c,KAAK,SAEtCpf,IAAI,EC0BiBq8E,CAAmB,CAC5Ch7E,cACAE,WACAzV,MAAOswF,IAEHtuB,ECxDH,EACb9tD,EACAlD,IAEOA,EAAK9O,KAAImW,IAEP,CACLnS,KAAMmS,EACN+8B,IAHUlhC,EAAKmE,EAAE7B,WDmDQ2yD,CAAUN,EAAcynB,GAC3CxoB,EAAS9F,GACT0G,GAAmB,EACrB,CACF,CAAE,MAAO/0D,GACPy1D,cAAUC,IACRA,EAAM1gB,WAAW,uBAAwB,CAAE3oD,MAAOswF,IAClD18E,aAAiBD,EAAE,IAErBm0D,EAAS,MACTuoB,GAAa,GACb3nB,GAAmB,EACrB,MAxBAA,IAAqBb,EAAY1d,gBACjCkmC,IAAexoB,EAAYl0C,UAC3Bm0C,EAASD,EAAY3zD,KAwBxB,EA5BD,EA4BI,GACH,CAACqB,EAAaE,EAAU66E,IAEpB,CAACp8E,EAAMi2C,EAAgBx2B,EAAS,EE9DnCrpB,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,eAAVH,CAAU,uBAGtBqC,GAAiBrC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAVH,CAAU,sCAI3BooF,GAAOpoF,aAAOgoF,IAAW9nF,WAAA,CAAAxV,YAAA,oBAAAyV,YAAA,eAAlBH,CAAkB,gCACfI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QACpC5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAE/Do8D,GAAUroF,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,eAATH,CAAS,oLAKFI,GAASA,EAAMC,MAAM05B,YAAY94B,KAGjCb,GAASA,EAAMC,MAAM05B,YAAYnB,KAIlD0vD,GAAetoF,KAAOkT,EAAChT,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAARH,CAAQ,oBACdI,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KAmGxCg8D,OArFKxtF,IAA2D,IAA1D,UAAEuG,EAAS,YAAEm+D,EAAW,OAAEl+D,EAAS,UAAiBxG,EACvE,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kBACrBinF,EAAiBzmC,EAAgBx2B,GAAYi0C,GAClDC,IAEI,WAAEziD,GAAeP,KAkBvB,IAAI9Z,EAuDJ,OApDEA,EADEo/C,EAEApgD,gBAACU,GAAc,CAAAtT,SAAA,CACb2S,eAAA,QAAA3S,SAAM,uBACN2S,eAACG,GAAO,CAACN,OAAQC,OAGZ+pB,EAEP7pB,eAACN,GAAU,CACTV,OAAO,SACPW,KAAK,oGACLE,OAAO,4BAGFqR,iBAAO41E,GACC9mF,eAAA,UACR8mF,EAAgBv3E,OAAMw3E,GAAUz3E,kBAAQy3E,EAAOz7C,OAEtDtrC,eAAA,KAAG,cAAY,yCAAwC3S,SAAC,+GAOxD2S,eAAC2mF,GAAO,CAAAt5F,SACLy5F,EAAgB1uF,KAAI2uF,GAEjB/mF,eAAA,MAAA3S,SACE2S,eAAC0mF,GAAI,CACHlb,OAAQub,EAAO3qF,KACfiR,SACE05E,EAAOz7C,IACLtrC,eAAC4mF,GAAY,CACX,+CAAA7mF,OAA8CgnF,EAAO3qF,KAAKsQ,MAAK,kBAC/D2P,QAAUxS,GAtD9B,SAA4B/P,GAMxB,IANyB,EAC3B+P,EAAC,OACDk9E,GAIDjtF,EACC+P,EAAE0lB,iBACFjU,EAAW,CACTzR,IACA/hB,MAAM,0BACN4oB,MAAM,6BAAD3Q,OAA+BgnF,EAAO3qF,KAAKhO,KAAI,iBAEtDwN,OAAOy5C,KAAK0xC,EAAOz7C,IAAK,SAC1B,CAyCsB07C,CAAoB,CAAEn9E,IAAGk9E,WAE3BjrF,KAAMirF,EAAOz7C,IAAIj+C,SAClB,wBAGC,QAdD05F,EAAO3qF,KAAKvU,QAyB7BmY,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAACU,GAAiB,CAAArT,SAAE4T,KACV,EC7HhB,MAAMsb,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAVH,CAAU,gCACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QACpC5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAE/DoV,GAAQrhC,aAAO65D,IAAU35D,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAjBH,CAAiB,8CACZI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG/Du/C,GAAuBxrE,aAAOurE,IAAerrE,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,gBAAtBH,CAAsB,yBAiCpC2oF,OAvBa5tF,IAA8C,IAA7C,UAAEuG,EAAS,OAAEC,EAAS,UAAiBxG,EAClE,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,0BAE5B,OACEG,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD4S,gBAACsc,GAAc,CAAAlvB,SAAA,CACb2S,eAAC8pE,GAAoB,CACnBjpE,QACEb,eAAC2/B,GAAK,CACJr2C,MAAO6D,EAAalC,GAAiB3B,MACrCuW,OAAQ5U,IAGZ4U,OAAQ5U,IAEV+U,eAACy8C,GAAkB,CAAApvD,SACjB2S,eAAC6mF,GAAW,CAAChnF,OAAQC,UAGrB,ECRKonF,OArBK7tF,IAA4D,IAA3D,UAAEuG,EAAS,OAAEC,EAAS,UAAiBxG,EAC1D,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,iBACtBhE,EAAWob,eACXkwE,EAAa9pF,cAChBpE,KAA+BiT,cAAIjT,EAAO,mBAQ7C,OAJAmX,qBAAU,KACRzU,SAASrS,MLhBsB89F,MACjC,MAAMC,EAAsBl6F,EAAalC,GACzC,OAAOogB,GAAaa,cAAIm7E,EAAqB,SAAS,EKcnCD,EAAqB,GACrC,CAACvrF,IAEGsrF,EACLnnF,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACinF,GAAmB,CAACpnF,OAAQC,MAG/BE,eAACwmB,KAAQ,CAACC,GAAE,KACb,ECZH,MAAMjK,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAbH,CAAa,4DAGTI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAOi3B,MAAMhO,QAEjEoV,GAAQrhC,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAATH,CAAS,uGAGNI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAC7Cf,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAIlDgoF,GAAehpF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAVH,CAAU,6GAGhBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACrCnsB,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAOi3B,MAAMhO,QAIjEw1B,GAAQzhD,aAAOiiC,IAAe/hC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAtBH,CAAsB,uDAO9By0B,GAAQz0B,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAZH,CAAY,+CACfI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAIrCqrE,GAAWjpF,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAjBH,CAAiB,wHASnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,YAGrC4W,IACOr0B,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAiIlCqrE,I,MAAAA,GApHenuF,IAKI,IALH,UAC7BuG,EAAS,iBACT6nF,EAAmB,GAAE,OACrB5nF,EAAS,SAAQ,YACjB6nF,EAAct2F,GAAYC,SACpBgI,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,+BACtB,WAAEyb,GAAeP,MACjB,UAAE7P,EAAS,oBAAE6W,GAAwBlB,KACrC1rB,EAAU+V,EAAU/V,QAmB1B,MAAM7L,EAAK,GAAAyW,OAAM41B,oBAAUxgC,EAAQjO,gBAAc6Y,OAC/C2nF,IAAgBt2F,GAAYC,QACxB,6BACA,6BAEAs2F,EACJD,IAAgBt2F,GAAYC,QACxB,qBACA,uBAEAu2F,EAAsBH,EACzBx2E,QAAQK,GACAA,EAAM2L,WAAW3O,MACrBkD,IAA0BlC,kBAAQkC,EAAEgiB,eAGxCp7B,KAAKkZ,IAA2B,IAADu2E,EAAAC,EAAAC,EAC9B,MAAMv0D,EApBV,SAAqBxlB,GAAgD,IAA/C,EAAE4oC,EAAC,IAAEoxC,GAAuCh6E,EAChE,OAAQ4oC,GAAIoxC,CACd,CAkBsBC,CAAa,CAC7BrxC,EAAQ,OAALtlC,QAAK,IAALA,GAEF,QAFOu2E,EAALv2E,EAAO2L,WAAW3O,MAClBkD,IAA0BlC,kBAAQkC,EAAEgiB,oBACtC,IAAAq0D,OAFO,EAALA,EAEAr0D,UACHw0D,IAAK,OAKP,GAAI92E,iBAAOsiB,GACT,OAAO,KAGT,MAAM00D,EAAiBx0D,GAAgBF,GACjC20D,EAA6D,QAA9CL,EAAGI,EAAe55E,MAAKoR,GAAgB,SAAXA,EAAElmB,cAAgB,IAAAsuF,OAAA,EAA3CA,EACpBp3E,MAEJ,GACEg3E,IAAgBt2F,GAAYC,SAC5B82F,GACAA,GAAmB,EAEnB,OAAO,KACT,GACET,IAAgBt2F,GAAYE,aAC1B62F,GAAmBA,EAAkB,GAEvC,OAAO,KAET,MAAMn/B,EAAWjnC,EAAoB,CACnCV,gBAAiBz0B,EAAqBG,cAGlCiS,EAAWsS,EAAMS,SAGlB,QAH0Bg2E,EAC3Bv+E,OAAOmH,OAAOvnB,GAAuBklB,MACnC0Q,GAAKA,EAAE31B,aAAeioB,EAAMS,kBAC7B,IAAAg2E,OAAA,EAFDA,EAEGz+F,MACHgoB,EAAMU,UACJo2E,EAAK,GAAAroF,OAAMuR,EAAMG,QAAO,KAAA1R,OAAIkN,oBAAUqE,EAAMU,YAClD,OACE/R,gBAACqnF,GAAY,CAAAj6F,SAAA,CACX4S,gBAACsnF,GAAQ,CAACn5F,KAAK,yBAAyBq4B,GAAIuiC,EAAS37D,SAAA,CACnD2S,eAAA,UAAQ,wBAAsB,OAAM3S,SAAE2R,IACtCgB,eAAC+yB,GAAK,CAACj+B,KAAK,mBAAmB+K,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIqoF,QAE1DpoF,eAACq2B,GAAqB,CAACd,MAAO2yD,EAAgBroF,OAAQC,IACtDE,eAAC+/C,GAAK,CACJvsB,UAAWA,EACXgN,YAAc32B,GAlFxB,SAA+B/P,GAM3B,IAN4B,EAC9B+P,EAAC,MACDyH,GAIDxX,EACCwhB,EAAW,CACTzR,IACA/hB,MAAM,kDACN4oB,MAAM,cAAD3Q,OAAgBuR,EAAMU,UAAS,sBAExC,CAuEYm6B,CAAuB,CAAEtiC,IAAGyH,cATf82E,EAYJ,IAGlBn3E,QAAOuzC,GAAKA,IACf,OACEvkD,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL2S,eAAC2/B,GAAK,CAAAtyC,SAAE/D,IACR0W,eAACy/B,GAAQ,CAAC5+B,QAAS8mF,OAEpBC,EAAoB/sF,OACnB+sF,EAEA5nF,eAACsnF,GAAY,CAAAj6F,SAAC,WAEZ,EClMV,MAAM8vD,GAAgB7+C,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAAbH,CAAa,mFAM7By0B,GAAQz0B,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,kBAAAyV,YAAA,eAAZH,CAAY,8BACfI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAG9BK,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAVH,CAAU,SACpCI,GACIA,EAAMu2C,OACDztB,aAAGC,QAAAC,aAAA,wFAMHF,aAAGM,QAAAJ,aAAA,qHA8DDkD,OA5CEvxB,IAMH,IANI,SAChBhM,EAAQ,UACRuS,EAAS,OACTZ,EAAM,cACNqpF,GAAgB,EAAK,OACrBxoF,EAAS,UACHxG,EACN,MAAO47C,EAAQqzC,GAAat4E,mBAASq4E,GAC/BvoF,EAAU,GAAAC,OAAMF,EAAM,cACtB,WAAEyb,GAAeP,KAYvB,OAAK1tB,GAAa2R,EAKhBiB,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACk9C,GAAa,CACZt1D,GAAE,GAAAkY,OAAKD,EAAU,WACjBuc,QAlBN,SAAkBxS,GAChBA,EAAEyS,UACFgsE,GAAWrzC,GACX35B,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKD,EAAU,UACpB4Q,MAAOukC,EAAS,QAAU,QAE9B,EAWM,iBAAAl1C,OAAgBD,EAAU,mBAAkBzS,SAAA,CAE3C2R,EACAi2C,EACCj1C,eAAC+yB,GAAK,CAACj+B,KAAK,WAAW+K,OAAQC,IAE/BE,eAAC+yB,GAAK,CAACj+B,KAAK,aAAa+K,OAAQC,OAGrCE,eAACuc,GAAc,CAAC04B,OAAQA,EAAO5nD,SAAEA,OAjB5B,IAkBD,EC3EV,MAAMmT,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAVH,CAAU,sIAINI,GAAK,GAAAqB,OAAOrB,EAAMC,MAAM2C,OAAO2a,IAAIqO,SAC1C5rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAEtDd,GACAA,EAAMC,MAAM2C,OAAO2a,IACF,cAAfvd,EAAM1D,KAAuB,QAAU,gBAGzC4hD,GAAUt+C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAVH,CAAU,sBA4CXiqF,OA7BalvF,IAQM,IARL,UAC3BuG,EAAS,QACTiB,EAAU,KAAI,cACdwnF,GAAgB,EAAK,OACrBrpF,EAAM,aACNwpF,GAAe,EAAK,OACpB3oF,EAAS,SAAQ,KACjB7E,EAAO5J,GAAYC,SACbgI,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,0BAEtBoB,EAAiBunF,EACrBxoF,eAAC4qB,GAAQ,CAACy9D,cAAeA,EAAerpF,OAAQA,EAAQa,OAAQC,EAAWzS,SACzE2S,eAAC48C,GAAO,CAAAvvD,SAAEwT,MAGZZ,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAA,UAAA3S,SAAS2R,IACR6B,EAAUb,eAAC48C,GAAO,CAAAvvD,SAAEwT,IAAqB,QAI9C,OACEb,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAY9E,KAAMA,EAAK3N,SAClE4T,GACS,ECjDhB,MAAMT,GAAYlC,aAAOiqF,IAAoB/pF,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAA3BH,CAA2B,sGACjCI,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAEtD7rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAIlD49D,GAAkBnqF,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAATH,CAAS,mEAO3BoqF,GAAapqF,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAZH,CAAY,qCAIzBqqF,GAAgBrqF,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAbH,CAAa,oDAGpBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElD+9D,GAAatqF,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAbH,CAAa,yDAK1B8hE,GAAQ9hE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAVH,CAAU,wCAyFTuqF,OA3EWxvF,IAMZ,IANa,UACzBuG,EAAS,QACTmR,EAAO,OACP/R,EAAM,YACN0oF,EAAW,OACX7nF,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,iBACtBipF,EAAet/E,OAAO+L,QAAQxE,GAASxb,OACvCwzF,EAAqBrB,IAAgBt2F,GAAYE,UAEvD,OACE0O,eAACQ,GAAS,CACRZ,UAAWA,EACXZ,OACEiB,gBAAC0oF,GAAa,CAAAt7F,SAAA,CACX2R,EACDiB,gBAAA,QAAA5S,SAAA,CAAM,IACF,IAAG,GAAA0S,OACD+oF,EAAajuF,OAAM,KAAAkF,OACrBgpF,EAAqB,MAAQ,WAAU,UAAAhpF,OACR,IAAxB+oF,EAAajuF,OAAe,GAAK,WAIhDgG,QACIioF,EAAajuF,OACbmF,eAAA,MAAA3S,SACGy7F,EAAa1wF,KAAK4wF,IACjB,MAAMC,EAAU,iBAAAlpF,OAAoBkN,oBAAU+7E,EAAE,KAc1CE,EAAiBh4F,GAAsB83F,EAAE,IAE/C,OACE/oF,gBAACwoF,GAAe,CAAAp7F,SAAA,CACd2S,eAAC0oF,GAAU,CACT5zF,KACEi0F,EAAqB,mBAAqB,eAE5ClpF,OAAQopF,IAEVhpF,gBAAA,OAAA5S,SAAA,CACE4S,gBAAC2oF,GAAU,CAAAv7F,SAAA,CACR67F,EAAe5/F,MAChB0W,eAACy/B,GAAQ,CAAC5+B,QAASooF,EAAYppF,OAAQopF,OAEzCjpF,eAACogE,GAAK,CAAA/yE,SACHuoC,qBAAWD,oBAAUllB,GAAqBu4E,EAAE,aAb7BC,EAgBJ,MAItB,KAENT,eAAgBM,EAAajuF,OAC7BgF,OAAQC,EACR9E,KAAM+tF,EAAqB33F,GAAYE,UAAYF,GAAYC,SAC/D,E,UCkDSiL,OApJAjD,IAAsC,IAArC,KAAE+Q,EAAI,QAAE2G,EAAO,MAAEpS,GAActF,EAC7C,MAAM4lC,EAASjT,iBACbjb,EAAQ3Y,KAAI4wF,IACV,MAAM3nF,EAAQ1C,EAAM2C,OAAOm0B,MAAMqD,cAAckwD,GAC/C,MAAO,CACL56F,KAAM8C,GAAsB83F,GAAG1/F,MAC/B+X,MAAOA,EACP24B,OAAQ,CACNm5B,UAAW9xD,EACXukD,UAAWvkD,GAEb+I,KAAMA,EAAKhS,KAAK42C,IACd,MAAMt+B,EAAQ,IAAKs+B,EAAEm6C,wBAAyBn6C,EAAEo6C,qBAC9CJ,GAEF,OAAO7uE,gBAAMzJ,GAAS,KAAOA,CAAK,IAErC,IAEH,QAGF,MAAO,CACL+kB,MAAO,CACL8L,OAAQ,IACRyyB,WAAY,EACZlrC,MAAO,CACLoZ,WAAYvjC,EAAMC,MAAMC,QAAQzQ,KAChC+zC,SAAU,GACVsjB,WAAY9mD,EAAMC,MAAMC,QAAQI,QAAQO,UAG5CyhD,MAAO,CACLoE,WAAYj7C,EAAKhS,KAAI42C,IACnB,MAAMq6C,EAAc3wF,KAAOs2C,EAAEh2C,SAAS6+E,OACpC7oC,EAAEp2C,WACFxR,GAEI2R,EAAQc,GAAgB,CAC5BE,OAAQ,OACRC,UAAWN,GAAgBs1C,EAAEh2C,WAEzBR,EAAMqB,GAAgB,CAC1BE,OAAQsvF,EAAc,KAAO,OAC7BrvF,UAAWN,GAAgBs1C,EAAEp2C,YAAc,IAAIC,QAEjD,MAAM,GAANkH,OAAUhH,EAAK,KAAAgH,OAAIvH,EAAG,IAExBotD,UAAWjnD,EAAM2C,OAAO2a,IAAIC,UAC5BspC,OAAQ,CACNzuD,SAAS,EACT+xB,MAAO,CACLznB,MAAO1C,EAAM2C,OAAO2a,IAAIC,UACxBgmB,WAAYvjC,EAAMC,MAAMk0B,UAAU1kC,KAClCq3D,WAAY9mD,EAAMC,MAAMk0B,UAAU7zB,QAAQQ,MAE5CwiD,EAAG,KAGPlB,MAAO,CACLyE,OAAQ,CACNzuD,SAAS,GAEXqqD,IAAK,IACLD,IAAK,EACLwE,WAAW,EACX+P,UAAWlsD,OAAO+L,QAAQplB,IAAmBiI,KAAI0B,IAAmB,IAAjB7S,EAAK+pB,GAAMlX,EAC5D,MAAO,CACLuH,MAAOq1B,GAAS,CACdC,IAAKh4B,EAAM2C,OAAOy7B,aAAa91C,GAC/B2vC,QAAS,KAEX9uC,MAAO,CACL+wC,KAAMlD,oBAAU1uC,EAAIC,eACpBo7D,cAAe,SACfL,GAAI,GAENzhC,KAAMxP,EAAM,GACZyV,GAEEx/B,IAAQqI,GAAiBC,UAAYyhB,EAAM,GAAK,EAAIA,EAAM,GAC7D,IAEHs4E,cAAe,CACbn5F,GAAkBT,WAAW,GAC7BS,GAAkBV,GAAG,GACrBU,GAAkBX,KAAK,GACvBW,GAAkBZ,UAAU,GAC5B,KAEFjG,MAAO,CACLyN,SAAS,IAGbqvD,OAAQ,CACNH,MAAO,QACPsjC,cAAc,EACdxyF,SAAS,EACT6kE,aAAc,GACdC,UAAW,CACTpW,WAAY9mD,EAAMC,MAAMC,QAAQI,QAAQO,SAE1Cs8D,OAAQ,aACRt6B,QAAS,EACTu6B,aAAc,EACdC,YAAa,EACb1Z,cAAe,UAEjB+D,YAAa,CACXiW,KAAM,CACJC,cAAc,EACdxS,WAAY,CACVhzD,SAAS,GAEXijC,OAAQ,CACNw5B,OAAQ,UAEVhN,OAAQ,CACNv+B,MAAO,CACL2O,QAAS,MAKjBttC,MAAO,CACLuvC,UAAM/9B,GAER+iC,QAAS,CACP/mC,SAAS,EACTC,SAAS,EACTC,gBAAiB,KACjBC,QAAQ,EACRC,YAAa,EACbC,aAAc,EACdC,SAAS,EACTwvD,WAAY,SAASC,EAAWC,EAAW7H,GACzC,OAAO6C,GAA2B,CAChCC,gBAAkB/0B,KAAa+5B,YAAYF,EAAGC,EAAG7H,GACjD+C,aAAcpmD,OAAOorD,SAEzB,EACAlI,UAAW,WACT,MnIfqCsd,KAC3C,MAAMotB,EAAaptB,EAAUn9B,OAAO7wC,KAC9Bq7F,EAAe,KAAKhuE,KAAK+tE,GAC3BA,EAAWr+E,UAAU,EAAGq+E,EAAW7zB,QAAQ,OAC3C6zB,EAEJ,MAAM,8EAANzpF,OAAqF0pF,EAAY,UAAA1pF,OAAS41B,oBACxGllB,GAAqB2rD,EAAUna,GAAG/6D,eACnC,WmIOYwiG,CAA+B18D,KAAaiyB,MACrD,GAEFhgB,SACD,EC5FYgoB,qBA1DwB5tD,IAOzB,IAP0B,UACtCuG,EAAS,KACTwK,EAAI,QACJ2G,EAAO,eACPsvC,GAAiB,EAAK,OACtBxgD,EAAS,SAAQ,MACjBlB,GACMtF,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,wCACtB,WAAEyb,GAAeP,KAsBvB,MAAM0a,EAAQpmB,mBAAQ,KACb,CACL/S,OAAQkkD,GAAe,CAAEp2C,OAAM2G,UAASpS,UACxC9W,GAAI,qCACJw4D,oBAED,CAACj2C,EAAMi2C,EAAgB1hD,IAE1B,OACEqB,eAAA,OACE2tB,aA3BJ,SAA0B9jB,GACxBA,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAO,qCACP4oB,MAAO,qBAEX,EAqBIkd,aApBJ,SAAyB/jB,GACvBA,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAO,qCACP4oB,MAAO,oBAEX,EAcI9Q,UAAWA,EACX,cAAaE,EAAWzS,SAExB2S,eAAC2pF,KAAa,CAAAt8F,SACZ2S,eAAC+/C,GAAK,CACJtqB,MAAOA,EACP71B,UAAWA,EACXC,OAAM,GAAAE,OAAKD,EAAU,uCACrBnB,MAAOA,OAGP,ICzDH,MAAMirF,GAAiBA,CAC5BC,EACAlnC,EACAmnC,KACmB,IAADC,EAAAC,EAClB,GAAe,cAAXrnC,EAAwB,CAM1B,MALsB,CACpB/yD,OAAQ,EACRC,aAAc,EACdC,KAAM,GAEyB,OAAZ+5F,QAAY,IAAZA,OAAY,EAAZA,EAA0B,YAAM,CACvD,CACA,GAAe,sBAAXlnC,EAAgC,CAClC,MAAMsnC,EAAwB,CAC5Bj6F,KAAM,KACNC,eAAgB,GAChBC,KAAM,MAER,GAAM45F,EAAQ,CAAC,IAADI,EACZ,MAAMC,EACQ,OAAZN,QAAY,IAAZA,GAAmC,QAAvBK,EAAZL,EAAkC,yBAAC,IAAAK,OAAvB,EAAZA,EAAsCJ,GAClCM,EAA8Bl5E,iBAAOi5E,GACvC,KACsB,OAAtBA,QAAsB,IAAtBA,OAAsB,EAAtBA,EAAiC,OACrC,OAAOj5E,iBAAOk5E,GACV,KACEA,GACFH,EAAsBG,IACtB,CACN,CACE,OAAO,CAEX,CAGA,MAAMC,EAAwB,uBAAX1nC,EAAkC,GAAK,EAGpD2nC,EACO,cAAX3nC,GACwB,QAApBonC,EAAAF,EAAalnC,UAAO,IAAAonC,GAAO,QAAPC,EAApBD,EAAsBQ,aAAK,IAAAP,OAAP,EAApBA,EAA6BQ,UAAW,CAAC,EACzCX,EAAalnC,GAEb8nC,EAAgB58C,kBAAQy8C,GAC3Br5E,QACEozC,GAA2D,kBAAdA,EAAO,KAEtDjsD,KAAKisD,GAEUA,EAAO,KAIzB,OAAOqmC,eAAKD,GAAiB,IAAMJ,GAAc,CAAC,EAGvCM,GAAsBA,CACjCtmC,EACA1iC,EACAipE,EACAC,EACAf,KAcA,MAAMrlC,EACe,wBAAnB9iC,EACI0iC,EAAOymC,WAAWD,GACJ,SAAdD,EAfN,WACE,MAAMG,EAAS1mC,EAAO2mC,aAAa5yF,KAAIyxF,GAC9BD,GAAeC,EAAcgB,EAAcf,KAGpD,GAAIiB,EAAOx7E,OAAMiB,GAAKU,iBAAOV,KAC3B,OAAO,KAET,MAAMy6E,EAAiBF,EAAO95E,QAAOi6E,GAAY,MAANA,IAC3C,OAAO/tE,cAAI8tE,IAAmBA,EAAepwF,QAAU,EACzD,CAMMswF,GACA9mC,EAAO2mC,aAAa18E,MAClBu7E,GAAgBA,EAAaztF,OAASwuF,EAAU/iG,KAElD+hG,GACEvlC,EAAO2mC,aAAa18E,MAClBu7E,GAAgBA,EAAaztF,OAASwuF,EAAU/iG,MAC7C,CAEHuU,KAAM,EACN3Q,UAAW,CACT8+F,MAAO,CACLa,MAAO,SACPZ,QAAS,CAAC,GAEZa,gBAAiB,CAAC,GAEpB1/F,mBAAoB,CAAC,EACrBD,UAAW,SACXE,kBAAmB,CACjBw/F,MAAO,CACLE,OAAQ,kBAEVC,iCAAkC,CAChCD,OAAQ,iBACRE,QAAS,CACP3tE,MAAO,IAGX,yBAA0B,CACxBytE,OAAQ,iBACRE,QAAS,CAAE,GAAI,IAEjBC,SAAU,CACRH,OAAQ,iBACRE,QAAS,CACP34B,MAAO,KAGX64B,WAAY,CACVJ,OAAQ,iBACRE,QAAS,CAAE,GAAI,KAEjBG,kBAAmB,CACjBL,OAAQ,iBACRE,QAAS,CAAE,GAAI,CAAE7hC,QAAS,GAAIiiC,OAAQ,GAAIx9F,KAAM,QAItDy8F,EACAf,GAEF,EACN,MAAO,CAACzlC,EAAOwnC,QAASpnC,EAAY,EAGzBqnC,GACX1hF,IAEA,GAAIlJ,sBAAYkJ,GACd,OAAOA,EAGT,MAAM2hF,EAAWC,iBAAO5hF,GAAM/R,GAC5B6Y,iBAAO7Y,KAET,OAAOke,oBAAUw1E,GAAU1zF,IAAM,IAC5BA,EAEH8wF,qBAAsB6C,iBAAO3zF,EAAO8wF,sBAAsBH,GAAK93E,iBAAO83E,QACrE,ECtJCxoF,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAVH,CAAU,uBAGtB2tF,GAAiB3tF,aAAOssB,IAASpsB,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAhBH,CAAgB,sDAOjC6+C,GAAgB7+C,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAAXH,CAAW,sDAClBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAgE7CysF,I,GAAAA,GAlDa7yF,IAOa,IAPZ,UAC3BuG,EAAS,KACTwK,EAAI,eACJi2C,GAAiB,EAAK,MACtBrvC,EAAK,OACL3Y,EAAM,OACNwH,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,0BACtBxE,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxD8wF,EAAa/hF,EAAK/R,EAAOxQ,IAE/B,GAAIqpB,iBAAOi7E,GACT,OAAO,KAGT,MAAMv5B,EAAek5B,GACnB1hF,GAGI65C,EAAaj4B,iBAAOxiB,OAAOmH,OAAOiiD,GAAe,WACjDw5B,EAA2B,OAAL/wF,QAAK,IAALA,OAAK,EAALA,EAAQ,0BAE9B0V,EAAUD,GACd,IACKtH,OAAO+L,QACR62E,EAAsBD,EAAW/C,oBAAsB,CAAC,MAEvD5/E,OAAO+L,QAAQ42E,EAAWhD,uBAE/Bn4E,GAGF,OAASD,EAAQlW,OACfmF,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAACisF,GAAc,CACbjtF,OAAQgB,eAACm9C,GAAa,CAAA9vD,SAAC,kBACvBwS,OAAQC,EAAWzS,SAEnB2S,eAACqsF,GAA8B,CAC7BjiF,KAAM65C,EACN5D,eAAgBA,EAChBtvC,QAASA,EACTlR,OAAQC,QAIZ,IAAI,ECnEV,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,eAAVH,CAAU,oEAKtBke,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,eAAbH,CAAa,6CAKtBguF,GAAUhuF,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAAXH,CAAW,kDACVI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAGhDm+F,GAAgBjuF,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,eAATH,CAAS,0BAClBI,GACTA,EAAM8tF,aAAe,EACjBr5D,KAAKm7C,KAAK5vE,EAAM8tF,aAAe,GAC/B9tF,EAAM8tF,eACL9tF,GAASA,EAAMC,MAAM+/B,KAAKE,MAE7B6tD,GAAoBnuF,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,oDAAAyV,YAAA,eAATH,CAAS,6DAK7BouF,GAAkBpuF,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,kDAAAyV,YAAA,eAAXH,CAAW,wCAI7BuwB,GAAevwB,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,eAAZH,CAAY,iFACtBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAOvCxd,IACA,GAAIA,EAAMiuF,aAAep7F,GAAsBI,aAC7C,OAAO61B,aAAGC,QAAAC,aAAA,kEAIZ,IAGEklE,GAAetuF,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,eAAXH,CAAW,gCACfI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAEhDijE,GAAW/yD,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,eAATH,CAAS,yBAKpBuuF,GAAavuF,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,eAATH,CAAS,2BAGtBy0B,GAAQz0B,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAAZH,CAAY,+CACfI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAIrCqrE,GAAWjpF,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,gBAAjBH,CAAiB,iHAQnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,YAGrC4W,IACOr0B,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAkIlC2wE,OAnHwBzzF,IAMzB,IAAD0uF,EAAA,IAN2B,YACtC12E,EAAW,UACXzR,EAAS,KACTwK,EAAI,YACJiE,EAAW,OACXxO,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,wCACtB,WAAEyb,GAAeP,MACjB,oBAAEgH,GAAwBlB,KAC1BksE,EAAqB53F,kBACzBkc,EACA,+BAEI27E,EAAmBxjF,OAAOmH,OAAOo8E,GAAoB97E,QACxDI,IACE/B,kBAAQ+B,KACXxW,OACImuD,EAAWjnC,EAAoB,CACnCtQ,QACErH,EAAK2H,WACL3oB,EAAsBH,EAAcE,cAAcE,WAC9CJ,EAAcE,aACdihB,EAAK2H,WACL3oB,EAAsBH,EAAcC,SAASG,WAC7CJ,EAAcC,QACdkhB,EAAKqH,UAEPO,GAGH,QAFD+1E,EAAAv+E,OAAOmH,OAAOvnB,GAAuBklB,MACnC0Q,GAAKA,EAAE31B,aAAe+gB,EAAK2H,kBAC5B,IAAAg2E,OAAA,EAFDA,EAEGz+F,QAAS8gB,EAAK4H,UAUnB,OACE/R,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD2S,eAACwc,GAAM,CAAAnvB,SACL4S,gBAACsnF,GAAQ,CAACn5F,KAAK,gCAAgCq4B,GAAIuiC,EAAS37D,SAAA,CACvD+c,EAAKo3D,eACNxhE,eAACssF,GAAO,CAAAj/F,SAAE+c,EAAKo3D,iBACb,KACJxhE,eAAA,QAAM,wBAAsB,OAAM3S,SAAE2kB,IACpChS,eAAC+yB,GAAK,CACJj+B,KAAK,mBACL+K,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIqK,EAAKqH,gBAIpCzR,eAACusF,GAAa,CAACC,aAAcQ,EAAiB3/F,SAC3C8mC,kBACC,IAAIriC,GAA8BP,GAAsBM,SAASuG,KAC9Du0F,IACC,MAAMM,EACJF,EACEJ,IAAep7F,GAAsBM,QAAU,GAAK86F,GAExD,OAA0B,OAAjBM,QAAiB,IAAjBA,KAAmBpyF,OAC1BmF,eAACysF,GAAiB,CAAAp/F,SAChB2S,eAAC0sB,GAAO,CACNe,QACExtB,gBAACysF,GAAe,CAAAr/F,SAAA,CACd2S,eAAC6uB,GAAY,CACX/5B,KAAM/C,GAAc46F,GACpBA,WAAYA,EACZ9sF,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAI4sF,KAE3B3sF,eAAC4sF,GAAY,CAAAv/F,SAAE4/F,EAAkBpyF,YAGrC2yB,aACExtB,eAACqxD,GAAQ,CAAAhkE,SACN8mC,kBACC/gB,eACE65E,EAAkB70F,KAAKoZ,IACrB,MAAMyZ,EAAa5c,EAAYC,MAC7BC,GAAKA,EAAE1mB,KAAO2pB,EAAEvB,SAElB,OAAiB,OAAVgb,QAAU,IAAVA,OAAU,EAAVA,EAAY78B,OAAQojB,EAAE2S,SAAS,MAIzC5uB,OACA6C,KAAKpP,GACJgX,eAAC6sF,GAAU,CAET,wBAAsB,OAAMx/F,SAE3BrE,GAHIikB,oBAAUjkB,QAQzBukC,UAAU,SACVD,cAAgBzjB,GAnElC,SAAuBA,EAAkC8iF,GACvDrxE,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKD,EAAU,KAAAC,OAAIkN,oBAAU0/E,GAAW,YAC7Cj8E,MAAM,gCAAD3Q,OAAkCqK,EAAKqH,UAEhD,CA8DoB6b,CAAczjB,EAAG8iF,GAEnB9sF,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAI4sF,MAvCLA,GA0CtB,IAAI,SAKN,EC/MhB,MAAMnwE,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAbH,CAAa,0EACTI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QACtD7rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAGtDgnE,GAAMnoE,aAAOwuF,IAA+BtuF,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAAtCH,CAAsC,uCAC/BI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG/D2iE,GAAsB5uF,KAAOyzC,QAAOvzC,WAAA,CAAAxV,YAAA,mDAAAyV,YAAA,eAAdH,CAAc,sDAC3BI,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KAIjDsiE,GAAsB7uF,aAAO8gC,IAAS5gC,WAAA,CAAAxV,YAAA,mDAAAyV,YAAA,eAAhBH,CAAgB,qBAGtC8uF,GAAmB9uF,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,eAAjBH,CAAiB,uDAEzBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OA4E7C4tF,OA9DqBh0F,IAKtB,IALuB,YACnCgY,EAAc,GAAE,UAChBzR,EAAS,KACTwK,EAAI,OACJvK,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,oCACtB,oBAAEkiB,EAAmB,UAAE7W,GAAc2V,KACrCzM,EAAalJ,EAAUhE,KACvBmH,GAAwB,OAAV+F,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,cAAe,GACzCi/E,EAAkBpiF,EAAU/V,QAC5Bo4F,EAAuBxrE,EAAoB,CAC/CV,gBAAiBz0B,EAAqBE,eAGxC,OACEmT,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD2S,eAACwc,GAAM,CAAAnvB,SAAC,oBACP+c,EAAKvP,SAAWyU,kBAAQ+B,GACvB8iB,kBACE/pB,EAAKhS,KAAK42C,IACR,MAAMw+C,EAAsBr8E,GAA0B,CACpDE,cACAC,MAAO09B,EACP75C,QAASm4F,IAGX,OAAOh+E,kBAAQk+E,GAAuB,KACpCxtF,eAACymE,GAAG,CACFp1D,YAAam8E,EACbpjF,KAAM4kC,EAEN3gC,YAAaA,EACbxO,OAAQC,GAFHkvC,EAAEv9B,QAIV,KAILxR,gBAACitF,GAAmB,CAAA7/F,SAAA,CAClB2S,eAACmtF,GAAmB,CAClB9tD,SACE,uEAEFx/B,OAAQC,IACP,IACHE,eAACotF,GAAgB,CACfh/F,KAAK,2CACLq4B,GAAI8mE,EAAqBlgG,SAC1B,sBAGD2S,eAACmtF,GAAmB,CAClB9tD,SAAU,wDACVx/B,OAAQC,SAIV,EClFV,MAAMyc,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,eAAVH,CAAU,2EAGxBI,GAASA,EAAMC,MAAM+/B,KAAKE,MAG7BpiB,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAbH,CAAa,yBAGtBmvF,GAAsBnvF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mDAAAyV,YAAA,eAAVH,CAAU,aAGhCovF,GAAuBpvF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oDAAAyV,YAAA,eAAVH,CAAU,aAGjCqvF,GAAUrvF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAAVH,CAAU,2EAGjBI,GAASA,EAAMC,MAAM+/B,KAAKE,MAG7BgvD,GAAoBtvF,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,iDAAAyV,YAAA,eAAXH,CAAW,sBACpBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtDwyC,GAAY3zC,aAAOkpF,IAAsBhpF,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,eAA7BH,CAA6B,8BAC3CqvF,IAIEE,GAAgBvvF,aAAO4tF,IAAoB1tF,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,eAA3BH,CAA2B,sBAwJlCwvF,OAvIqBz0F,IAUR,IAVS,YACnCgY,EAAc,GAAE,UAChBzR,EAAS,OACTZ,EAAM,MACNgS,EAAK,YACL02E,EAAW,OACXrvF,EAAM,qBACN01F,EAAoB,wBACpBC,EAAuB,OACvBnuF,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mCACtBouF,EAAiCD,EAAwB31F,EAAOxQ,IAChEwT,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxD6yF,EAA0B,OAAL7yF,QAAK,IAALA,OAAK,EAALA,EAAQ,sBAC7B+wF,EAA2B,OAAL/wF,QAAK,IAALA,OAAK,EAALA,EAAQ,2BAE9B,UAAE6P,GAAc2V,KAChBysE,EAAkBpiF,EAAU/V,SAE3Bg5F,EAAuBC,GAA0B,EACxB,OAA9BH,QAA8B,IAA9BA,OAA8B,EAA9BA,EAAgC7E,sBAAuB,CAAC,GAC1B,OAA9B6E,QAA8B,IAA9BA,OAA8B,EAA9BA,EAAgC9E,uBAAwB,CAAC,GACzD/wF,KAAI2Y,GACJ1H,eACEglF,iBAAOt9E,GAASi4E,IAAM7uE,gBAAM6uE,KAC5Bl4E,GAAiCtH,OAAO+L,QAAQxE,GAAUC,MAIxDs9E,EAAoBj/E,mBAAQ,IAC1B0+E,EACGA,EAAqBrrB,aAAazxD,QACtCK,IACC,MAAMk8E,EAAsBr8E,GAA0B,CACpDE,cACAC,QACAnc,QAASm4F,IAGX,IAAKh+E,kBAAQk+E,GAAsB,CAGjC,GACEA,EAAoBj+E,OAClBiC,GACElC,kBAAQkC,EAAEke,8BACVx9B,GAAewX,SAAS8H,EAAEke,+BAG9B,OAAOg4D,IAAgBt2F,GAAYE,UAIrC,MAAMi9F,EAAqCf,EAAoBv8E,QAC7DO,KACKA,EAAEke,6BACH19B,GAAgB0X,SAAS8H,EAAEke,8BAC7Bz9B,GAAgByX,SAAS8H,EAAEke,gCAG7B8+D,EACAC,GACE58E,oBAAU08E,GAAoC/8E,GAChDxf,GAAgB0X,SAAS8H,EAAEke,+BAE7B,OAAIg4D,IAAgBt2F,GAAYC,QACvBm9F,EAAkB3zF,OAAS4zF,EAAkB5zF,OAE7C4zF,EAAkB5zF,QAAU2zF,EAAkB3zF,MAEzD,CACA,OAAO,CAAK,IAIX,IACN,CAACwW,EAAaq2E,EAAa4F,EAAiBS,IAE/C,OACE9tF,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD2S,eAACwc,GAAM,CAAAnvB,SAAE2R,IACTiB,gBAACsc,GAAc,CAAAlvB,SAAA,CACb4S,gBAACwtF,GAAmB,CAAApgG,SAAA,CAClB4S,gBAAC0tF,GAAO,CAAAtgG,SAAA,CACN2S,eAAC6oF,GAAiB,CAChB7pF,OAAQgB,eAAC4tF,GAAiB,CAAAvgG,SAAC,mBAC3B0jB,QAASq9E,EACT1G,YAAaA,EACb7nF,OAAQC,IAETssF,EACCpsF,eAAC6oF,GAAiB,CAChB7pF,OAAQgB,eAAC4tF,GAAiB,CAAAvgG,SAAC,kBAC3B0jB,QAASo9E,EACTzG,YAAaA,EACb7nF,OAAQC,IAER,QAGLouF,EACCluF,eAACiyC,GAAS,CACRw1C,iBAAsC,OAApBsG,QAAoB,IAApBA,OAAoB,EAApBA,EAAsBrrB,aACxC7iE,OAAQC,EACR4nF,YAAaA,IAEb,QAEN1nF,eAAC0tF,GAAoB,CAAArgG,SAElB6gG,EACCluF,eAACqtF,GAA2B,CAC1Bh8E,YAAaA,EACbjH,KAAMkkF,IAGRtuF,eAACiyC,GAAS,CACRw1C,iBAAsC,OAApBsG,QAAoB,IAApBA,OAAoB,EAApBA,EAAsBrrB,aACxC7iE,OAAQC,EACR4nF,YAAaA,SAKrB1nF,eAAC6tF,GAAa,CACZzjF,KAAM4jF,EACNh9E,MAAOA,EACP3Y,OAAQA,EACRwH,OAAQC,MAEN,EC7MKzG,OAsBR,IAtBS,KACd+Q,EAAI,WACJskF,EAAU,eACVC,EAAc,MACdhwF,GAkBDtF,EACC,MAAMu1F,EAAY,CAChBjwF,EAAM2C,OAAO2a,IAAIsO,KACjB5rB,EAAM2C,OAAO2a,IAAIsb,QACjB54B,EAAM2C,OAAO2a,IAAI0W,OAEbsM,EAAShT,kBACb7hB,EAAKhS,KAAI,CAAC42C,EAAGzlB,KACJ,CACLn7B,KAAM4gD,EAAEhxB,aACRmsC,YAAaykC,EAAUrlE,GACvBloB,MAAOutF,EAAUrlE,GACjBnf,KAAM,CAAC4kC,EAAE/wB,YACTloB,OAAQi5C,EAAEj5C,YAKhB,MAAO,CACL0/B,MAAO,CACL8L,OAAQ,GACRL,OAAQ,EACRlmC,KAAM,OAERimD,MAAO,CAAE4I,SAAS,GAClB9I,MAAO,CAAE8I,SAAS,GAClBxD,YAAa,CACXyD,IAAK,CACH5yD,YAAa,EACbk9D,OAAQ,UACRrK,WAAY,CACV9D,MAAO,OACPkE,YAAa,EACb9oD,MAAO1C,EAAM2C,OAAO2a,IAAIC,UACxBnlB,SAAS,EACT+nD,UAAW,WACT,OAAQ9xB,KAAai1B,EAAI,EAAG,GAAAliD,OACpBitB,KAAai1B,EAAEgD,QAAQ,GAAE,OAEnC,EACAn8B,MAAO,CACL+lE,YAAa,SAGjB5vC,MAAO,CACLoU,OAAQ,CACNolB,MAAO,SAAS5uE,GACd6kF,EAAW,CAAE7kF,IAAGuyD,UAAWpvC,MAC7B,EACAsmC,UAAW,SAASzpD,GAClB8kF,EAAe,CAAE9kF,IAAGuyD,UAAWpvC,MACjC,IAGJg9B,SAAU,UACVxD,OAAQ,CACNv+B,MAAO,CACLlxB,SAAS,EACT+3F,YAAa,GACb3kC,YAAazzB,GAAS,CACpBC,IAAKI,GAAaz1B,OAAO2a,IAAIwO,MAC7BmM,QAAS,MAGbqzB,SAAU,CACRlzD,SAAS,MAKjBqvD,OAAQ,CAAErvD,SAAS,GACnB8mC,QAAS,CACP9mC,SAAS,GAEXzN,MAAO,CACLuvC,UAAM/9B,GAERmkC,SAEH,ECFcgoB,qBA3Ea5tD,IAMd,IANe,UAC3BuG,EAAS,KACTwK,EAAI,eACJi2C,GAAiB,EAAK,OACtBxgD,EAAS,SAAQ,MACjBlB,GACMtF,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,2BACtB,WAAEyb,GAAeP,KACjBgG,EAAUC,gBACV,oBAAEe,GAAwBlB,KAEhC,SAAS8tE,EAAc70F,GAMnB,IANoB,EACtB+P,EAAC,UACDuyD,GAIDtiE,EACCwhB,EAAW,CACTzR,IACA/hB,MAAO,wBACP4oB,MAAM,GAAD3Q,OAAKq8D,EAAUn9B,OAAO7wC,KAAI,iBAEnC,CAEA,SAASsgG,EAAU1gF,GAMf,IANgB,EAClBnE,EAAC,UACDuyD,GAIDpuD,EACCsN,EAAW,CACTzR,IACA/hB,MAAO,wBACP4oB,MAAM,GAAD3Q,OAAKq8D,EAAUn9B,OAAO7wC,KAAI,cAEjC2yB,EAAQwB,KACNR,EAAoB,CAClBV,gBAAiBz0B,EAAqBE,aACtC6nB,mBAAoBhgB,GACpBktB,kBAAmB,CACjB,CAACvuB,GAAaJ,QAAS,CAACkpE,EAAUn9B,OAAO8vD,YAAYh5F,QACrD,CAACzC,GAAaV,eAAe,KAIrC,CAEA,MAAM6iC,EAAQpmB,mBAAQ,KACb,CACL/S,OAAQkkD,GAAe,CACrBp2C,OACAskF,aACAC,iBACAhwF,UAEF9W,GAAI,wBACJw4D,oBAED,CAACj2C,EAAMi2C,EAAgB1hD,IAE1B,OACEqB,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAC+/C,GAAK,CACJtqB,MAAOA,EACP71B,UAAWA,EACXC,OAAM,GAAAE,OAAKD,EAAU,0BACrBnB,MAAOA,KAEL,IC/EV,MAAM6B,GAAYlC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAATH,CAAS,iKAMNI,GAASA,EAAMC,MAAM+/B,KAAKE,MAGzCmB,GAAczhC,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAATH,CAAS,8CACZI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OACvCsQ,GAASA,EAAMC,MAAMC,MAAMk0B,UAAUzzB,MAAMwrB,KAEpDokC,GAAW3wD,aAAO6kC,IAAiB3kC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAxBH,CAAwB,0BAGnC8uF,GAAmB9uF,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,eAAjBH,CAAiB,qHAM7BI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAC1Bzd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAIxDwqE,GAAoB3rE,aAAOsqC,IAAYpqC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAAnBH,CAAmB,uBAqD9B0wF,I,GAAAA,GAzCc31F,IAKM,IALL,cAC5B41F,EAAa,UACbrvF,EAAS,SACTgc,EAAQ,OACR/b,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,4BACtB,oBAAEkiB,GAAwBlB,KAC1BquE,EAAuBD,EAAch+E,QACzCO,IAAM2I,gBAAMyB,EAAS4B,wBAAwBhM,MAG/C,OAAS09E,EAAqBr0F,OAC5BmF,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACtD6hG,EAAqB92F,KAAK+2F,IACzB,MACEtxE,MAAO+rD,EAAQ,YACf7vC,GACEne,EAAS4B,wBAAwB2xE,GAC/B/hG,EAAO20B,EAAoB,CAC/BF,kBAAmB,CACjB,CAACvuB,GAAaJ,QAAS,CAAC0oB,EAAS7lB,QACjC,CAACzC,GAAaV,eAAe,EAC7B,CAACU,GAAaF,iBAAkB,CAAC+7F,IAEnC9tE,gBAAiBz0B,EAAqBE,eAExC,OACEkT,eAAC+/B,GAAW,CAAA1yC,SACV4S,gBAACmtF,GAAgB,CAACh/F,KAAM0R,EAAY2mB,GAAIr5B,EAAKC,SAAA,CAC3C2S,eAACivD,GAAQ,CAACj0D,KAAMm0F,IACfvlB,GAAY,EACb5pE,eAACiqE,GAAiB,CAAClwC,YAAaA,QACf,GAAAh6B,OALA6b,EAAS7lB,OAAM,KAAAgK,OAAIovF,GAM1B,MAIlB,IAAI,ECrFV,MAAMC,GAAS9wF,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,eAATH,CAAS,sDAEGI,GAAK,UAAAqB,OAAcrB,EAAM2wF,WAAU,YAGxDC,GAAiBhxF,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAATH,CAAS,yEAK1BixF,GAAuBjxF,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAAbH,CAAa,2EAM3BI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAEpDZ,IACA,GAAIA,EAAM07C,aACR,OAAO5yB,aAAGC,QAAAC,aAAA,kNAOQhpB,EAAM8wF,SAAWhmG,EAAwBG,KACnD+U,EAAMC,MAAM2C,OAAO2a,IAAIsO,KACvB7rB,EAAM8wF,SAAWhmG,EAAwBE,KACzCgV,EAAMC,MAAM2C,OAAO2a,IAAI0W,MACvBj0B,EAAMC,MAAM2C,OAAO2a,IAAIsb,QAGjC,IAGEk4D,GAAanxF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAVH,CAAU,iHAIbI,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIC,aAI/DwzE,GAAepxF,KAAO4sD,OAAM1sD,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAAbH,CAAa,eAI5BqxF,GAA4BrxF,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAATH,CAAS,2EAGxBI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG/D0uD,GAAa36E,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAXH,CAAW,qBACdI,GAAUA,EAAMmrD,QAAU,UAAY,WAgFvC+lC,OArEMv2F,IAKO,IALN,UACpBuG,EAAS,KACTwK,EAAI,aACJgwC,EAAY,OACZv6C,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kCACtBgwF,EAAoBz1C,EACtBhwC,EACAA,EAAK6G,QAAO+9B,GAAkB,SAAbA,EAAEj5C,SACvB,OACEkK,gBAACyvF,GAAY,CAAC9vF,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACzD+sD,EACCp6C,eAAC8vF,GAAmB,CAAC1lF,KAAMA,EAAMvK,OAAQC,IACvC,KACJG,gBAAA,cAAA5S,SAAA,CACE2S,eAACovF,GAAM,CAACC,WAAYQ,EAAkBh1F,OAAOxN,SAC1CwiG,EAAkBz3F,KAAI,CAAC42C,EAAGzlB,IACzBtpB,gBAACqvF,GAAc,CAAAjiG,SAAA,CACb2S,eAACuvF,GAAoB,CACnBn1C,aAAcA,EACdo1C,OAAQxgD,EAAEj5C,OAAO1I,SAEhB2hD,EAAEhxB,eAELhe,eAACgvF,GAAoB,CACnBC,cAAe,CACbrkG,EAA0BE,MAC1BF,EAA0BC,IAC1BD,EAA0BI,UAE5B4wB,SAAUozB,EACVnvC,OAAQC,IAEVG,gBAAA,OAAA5S,SAAA,CACE2S,eAAC2vF,GAAyB,CAAAtiG,SACxB2S,eAACi5E,GAAU,CAACpvB,SAAUtgC,EAAMl8B,SAAC,UAE/B2S,eAACgvF,GAAoB,CACnBC,cAAe,CAACrkG,EAA0BG,IAC1C6wB,SAAUozB,EACVnvC,OAAQC,SAvBOkvC,EAAEj5C,YA6B3BiK,eAACyvF,GAAU,CAAApiG,SACT2S,eAACilE,GAAyB,CACxBplE,OAAQC,EACRolE,kBAAmB9xD,eACjB6M,kBACE4vE,EAAkBz3F,KAAI42C,GACpBxlC,OAAOC,KAAKulC,EAAExxB,6BAIpB2nD,gBAAiB0qB,EAAkB7/D,MAAKgf,GACtCxlC,OAAOmH,OAAOq+B,EAAExxB,yBAAyBwS,MACvCzhB,IAAM4L,gBAAM5L,EAAEwrB,0BAMX,EC7InB,MAAMv5B,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAAVH,CAAU,iBAGtBke,GAASle,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAATH,CAAS,oIAGPI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAErCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAwC7CswF,I,MAAAA,GA5BgB12F,IAKH,IALI,UAC9BuG,EAAS,KACTwK,EAAI,eACJs5C,EAAc,OACd7jD,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kCACtBmwF,EAAc,2BAAAjwF,OACjB2jD,EAA4B,GAAX,UAEpB,OACEzjD,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CAAC,oBACY,IAClB2S,eAACy/B,GAAQ,CACP5+B,QACEmvF,EAIFnwF,OAAQC,OAGZE,eAAC4vF,GAAY,CAACxlF,KAAMA,EAAMgwC,cAAc,EAAMv6C,OAAQC,MAC5C,ECzBhB,MAAM0c,GAASle,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAATH,CAAS,kIAGPI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAErCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAGtDwwF,GAAW3xF,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAATH,CAAS,sCAIpB4xF,GAAe5xF,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAATH,CAAS,0EACXI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAO/oB,GAAE,WAAAQ,OAC9BrB,EAAM+pB,SAAW/pB,EAAMC,MAAM2C,OAAO2a,IAAIC,UAAY,iBAEzCxd,GACbA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQP,EAAM+pB,SAAW,OAAS,aAO1DqY,GAAOxiC,aAAOqqB,IAAOnqB,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAdH,CAAc,iEACVI,GACbA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQP,EAAM+pB,SAAW,WAAa,aAEvD/pB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAMvCg0E,GAA+B7xF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0DAAAyV,YAAA,eAAVH,CAAU,qCAIzC8xF,GAA0B9xF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qDAAAyV,YAAA,eAAVH,CAAU,oIAOpCI,GAA0C,aAAhCA,EAAM2xF,sBAAuC,EAAI,IAI3D3xF,GACgC,aAAhCA,EAAM2xF,sBACF,EACgC,aAAhC3xF,EAAM2xF,sBACN,EACA,IAKN3xF,IACA,GAAoC,aAAhCA,EAAM2xF,sBACR,OAAO3xF,EAAM0tF,oBACT5kE,aAAGC,QAAAC,aAAA,2IAOHF,aAAGM,QAAAJ,aAAA,8HAOT,IAGE4oE,GAAmBhyF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,eAAVH,CAAU,kEAEbI,GAClBA,EAAMC,MAAM2C,OAAOy7B,aAAar+B,EAAM6xF,yBAC3B7xF,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAGlDgD,GAAUvvB,aAAOk/C,IAAiBh/C,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAAxBH,CAAwB,6CAKlCkyF,GAAoBlyF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,eAAVH,CAAU,aAG9B6C,GAAa7C,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAAZH,CAAY,iCAEpBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAErCu0E,GAAcnyF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,gBAAVH,CAAU,2BAGxBoyF,GAAqBpyF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,gBAAVH,CAAU,+HAIrBI,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIC,aAGtDxd,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElD8lE,GAAaryF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAAVH,CAAU,mFAGjBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAC1CnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAC9BnsB,GAClBA,EAAMC,MAAM2C,OAAOy7B,aAAar+B,EAAM6xF,yBAkO3BK,OAvNmBv3F,IAKpB,IALqB,UACjCuG,EAAS,KACTwK,EAAI,eACJs5C,EAAc,OACd7jD,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kCACrBgxF,EAAYC,GAAiB9gF,mBAAwB,MACtD3U,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxD+wF,EAA2B,OAAL/wF,QAAK,IAALA,OAAK,EAALA,EAAQ,2BAC7Bg1F,EAAuBU,GAA4B/gF,mBACxDo8E,EAAsB,WAAa,aAE/B,WAAE9wE,GAAeP,KAEvB,SAASi2E,EACPnnF,EACAonF,GAEAF,EAAyBE,GACzB31E,EAAW,CACTzR,IACA/hB,MAAM,gCAADiY,OAAkCkxF,GACvCvgF,MAAM,WAEV,CAEA,GAAIyJ,gBAAM/P,GACR,OAAO,KAGT,MAAM8mF,EAAuC,aAA1Bb,EACfhnF,eAAKe,EAAMZ,OAAOmH,OAAO7f,KACC,WAA1Bu/F,EACAjmF,EAAKg/E,oBACLh/E,EAAK++E,qBAGHgI,GAE0B,aAA1Bd,EACFl8D,kBAAQ,CACNi4D,EACI,CACEt7F,GAAoBC,eACpBmgG,EAAUpgG,GAAoBC,iBAEhC,KACJq7F,EACI,CACEt7F,GAAoB3F,cACpB+lG,EAAUpgG,GAAoB3F,gBAEhC,KACJ,CACE2F,GAAoBE,eACpBkgG,EAAUpgG,GAAoBE,mBAGlCwY,OAAO+L,QAAQ27E,GAAW37F,MAAK,CAACic,EAAGgB,IAAMA,EAAE,GAAKhB,EAAE,MACpDP,QAAO+9B,IAAM70B,gBAAM60B,EAAE,MAEvB,SAASoiD,EAAkBf,EAA+BppG,GACxD,GAC4B,aAA1BopG,GACAppG,IAAQ6J,GAAoBC,eAE5B,OAAOG,GAAsBjK,GAAKqC,MAEpC,MAAM+nG,EAAU7nF,OAAOmH,QACpB1pB,IAAQ6J,GAAoB3F,cACrB,OAAJif,QAAI,IAAJA,OAAI,EAAJA,EAAMg/E,oBACF,OAAJh/E,QAAI,IAAJA,OAAI,EAAJA,EAAM++E,uBAAyB,CAAC,GACpCl4E,QAAQT,IAAsB2J,gBAAM3J,KAChC8gF,EAAiBD,EAAQpgF,QAC7BqM,GAASA,GAASA,GAASntB,GAAkBb,GAAiBE,MAAM,KAGhEyhG,EACJhqG,IAAQ6J,GAAoB3F,cAAgB,SAAW,WACzD,OACE8U,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACGuoC,qBAAWq7D,GAAWlxF,OACrB,KACAuxF,EAAez2F,OAAO6sC,WACtB,IACA2pD,EAAQx2F,OAAO6sC,WACf,qBAEF1nC,eAACmB,GAAU,CAACrM,KAAM,uBAGxB,CACA,SAASy8F,EAAej0E,GACtB,OACEtd,eAACywF,GAAW,CAAApjG,SACTuoC,qBAAWnlB,GAAqB6M,GAAOp2B,gBAG9C,CAEA,SAASomC,EAAcixB,GACrBjjC,EAAW,CACTxzB,MAAO,sBACP4oB,MAAM,GAAD3Q,OAAOw+C,EAAW,SAAW,MAAK,8BAE3C,CAEA,MAAMyxC,EAAc,uBAAAjwF,OACjB2jD,EAA4B,GAAX,UAGpB,OACEzjD,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CAAC,gBACQ,IACd2S,eAACy/B,GAAQ,CACP5+B,QACEmvF,EAIFnwF,OAAQC,OAGZE,eAAA,OAAK,aAAW,gCAA+B3S,SAC7C2S,eAACiwF,GAAQ,CAAA5iG,SACN8mC,kBAAQ,CACPi4D,EAAsB,WAAa,KACnCA,EAAsB,SAAW,KACjC,aACCh0F,KAAKo5F,IACN,MAAM/oE,EAAW+oE,IAAgBnB,EACjC,OACErwF,eAACkwF,GAAY,CAACznE,SAAUA,EAASp7B,SAC/B2S,eAAC8gC,GAAI,CACHxZ,OAAO,WACPmB,SAAUA,EACVpM,QACExS,GACGmnF,EAAiBnnF,EAAG2nF,GACzB3xF,OAAM,4BAAAE,OAA8ByxF,GAAcnkG,SAEjDuoC,qBAAW47D,MATuBA,EAWxB,QAKvBxxF,eAACmwF,GAA4B,CAAA9iG,SAC3B2S,eAACowF,GAAuB,CACtBhE,oBAAqBA,EACrBiE,sBAAuBA,EAAsBhjG,SAE5C8jG,EAA2B/4F,KAAI21C,IAC9B,MAAM9mD,EAAM8mD,EAAM,GACZzwB,EAAQywB,EAAM,GAEpB,OACE/tC,eAACswF,GAAgB,CACfC,sBAAuB9/E,GAAqB6M,GAAOjwB,SAGnD2S,eAAC6tB,GAAO,CAEN4vB,eACEz9C,eAACo9C,GAAgB,CACfv8C,QAAS0wF,EAAej0E,GACxBzd,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAI9Y,EAAG,sBAGhC8lC,KAAM8jE,IAAe5pG,EACrB02D,aAAcrwB,EACduwB,eACE79C,eAACwwF,GAAiB,CAChBn0E,QACExS,GAQiC,aAA1BwmF,EACHW,EAAiBnnF,EANnB5iB,IAAQ6J,GAAoBC,eACxB,WACA9J,IAAQ6J,GAAoB3F,cAC5B,SACA,YAGF,KAENq1C,YAAaA,IAAMswD,EAAc7pG,GACjCwqG,WAAYA,IAAMX,EAAc,MAChC,iBAAA/wF,OAAgB9Y,EAAG,wBAAuBoG,SAEzC+jG,EAAkBf,EAAuBppG,KAG9C4Y,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAI9Y,IAAM,GAAA8Y,OA/BvBD,EAAU,KAAAC,OAAI9Y,KAHnBA,EAoCY,QAK3B+Y,eAAC0wF,GAAkB,CAAArjG,SAChBmc,OAAOmH,OAAOrhB,IAAkB8I,KAAI4C,GACnCiF,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAC2wF,GAAU,CAACJ,sBAAuBv1F,IAClC46B,qBAAW56B,EAAK9T,wBAInB,ECjWV,MAAMsiD,GAAYlrC,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,eAAZH,CAAY,oCACnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGrCotB,GAAchrC,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAAbH,CAAa,0FACXI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAC1C5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAC9BrB,EAAMgzF,0BACFhzF,EAAMC,MAAM2C,OAAO2a,IAAIC,UACvBxd,EAAMC,MAAM2C,OAAO2a,IAAIuU,aAgFlBmhE,I,GAAAA,GA3DIt4F,IAOL,IAPM,YAClBgY,EAAW,UACXzR,EAAS,QACTmyB,EAAO,QACP6/D,EAAO,KACPxjG,EAAI,OACJyR,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,iBACrBo1C,EAAQqzC,GAAat4E,oBAAS,IAC/B,WAAEsL,GAAeP,KACjB3e,EAAOiB,cAAapE,GAA6BA,EAAMmD,OACvDs1F,IAA8BrgF,EAAY/C,MAC7CkD,GAA4BA,EAAEvB,SAAW7T,EAAKvU,KASjD,MAAMgqG,EAAiBxgF,EAAYxW,OAOnC,OALAuV,qBAAU,KAERk4E,GAAU,EAAM,GACf,CAACuJ,IAGF7xF,eAAC2tC,KAAc,CACblgB,QAAQ,QACRF,UAAU,MACVR,KAAMkoB,EACN6I,SAnBJ,SAAyB/wB,GACvBu7D,EAAUv7D,GACVzR,EAAW,CACTxzB,MAAOgY,EACP4Q,MAAM,GAAD3Q,OAAKgtB,EAAO,SAAW,SAAQ,qBAAAhtB,OAAoB3R,IAE5D,EAcIquC,QACEz8B,eAAC4tC,KAAO,CAAC/lD,GAAG,gBAAewF,SACzB2S,eAAC8uB,GAAa,CACZzd,YAAaA,EACb0d,YAAagD,EACb/C,sBAAuB4iE,EACvBhjE,WAAW,MAIjBmvB,WAAS,EAAA1wD,SAET4S,gBAACqpC,GAAW,CACV1pC,UAAWA,EACX,iBAAAG,OAAgBD,EAAU,YAC1B4xF,0BAA2BA,EAA0BrkG,SAAA,CAErD2S,eAACwpC,GAAS,CAAC10C,KAAK,YAAY+K,OAAQC,IAAc,YAGrC,EChErB,MAAM0c,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,gBAAbH,CAAa,yBAGtBqhC,GAAQrhC,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAATH,CAAS,6CACNI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAC7Cf,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAGlDwyF,GAAexzF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,gBAAVH,CAAU,sCAIzByzF,GAAezzF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,gBAAVH,CAAU,sCAIzB0zF,GAAmB1zF,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,iDAAAyV,YAAA,gBAATH,CAAS,uEAQ5B2zF,GAAW3zF,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,gBAATH,CAAS,0CACfI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAKrCg2E,GAAkB5zF,aAAOqqB,IAAOnqB,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,gBAAdH,CAAc,4FAI1BI,GACRA,EAAMgzF,0BAAyB,GAAA3xF,OACxBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIC,WACjE,MAGFi2E,GAAgB7zF,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,gBAAXH,CAAW,kGAChBI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAMhDygC,GAAevwB,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,gBAAZH,CAAY,2FAQ7BI,IACA,GACEA,EAAM5J,OAAS/C,GAAcR,GAAsBC,YACnDkN,EAAM5J,OAAS/C,GAAcR,GAAsBI,cAEnD,OAAO61B,aAAGC,QAAAC,aAAA,gCAGZ,IAGE4J,GAAchzB,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,gBAAZH,CAAY,gBACrBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAErCk2E,GAAqB9zF,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,mDAAAyV,YAAA,iBAAbH,CAAa,mEACrBI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAI/D8nE,GAAiB/zF,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,iBAATH,CAAS,sIAGfI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAEnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAItDswE,GAAaxxE,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,iBAAXH,CAAW,wBAGxBg0F,GAAeh0F,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,iBAARH,CAAQ,mDAClBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAIrC4mC,GAAW/yD,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,iBAATH,CAAS,yBAKpBuuF,GAAavuF,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,iBAATH,CAAS,2BAmRbi0F,OAvQsBl5F,IAKvB,IAADqlB,EAAA,IALyB,YACpCrN,EAAc,GAAE,UAChBzR,EAAS,OACTvH,EAAM,OACNwH,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,qCACrBqyB,EAAasgE,GAAkBxiF,oBAAS,GAEzCq6B,EAAcC,4BACdmoD,EAA2BhoD,uBAAY3C,GAAkB,CAC7D4C,UAAWA,KAETL,EAAYM,kBAAkB,cAAc,IAG1C+nD,EAA4BjoD,uBAAY1C,GAAmB,CAC/D2C,UAAWA,KAETL,EAAYM,kBAAkB,cAAc,KAI1C,WAAErvB,GAAeP,KACjB43E,EAAkB,kCAElBC,EAAkBvhF,EAAYJ,QACjCO,GAA4BA,EAAE45B,aAAeunD,IAE1CE,EAAmB7mE,iBACvB4mE,EAAgB3hF,QACbO,KAA8BA,EAAE6Z,sBAEnC,aAEIynE,EAAgB,CAAEh9F,SAAUuC,EAAOxQ,GAAIA,GAAIwQ,EAAOxQ,IAElD4jB,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDvP,EAAOiB,cAAapE,GAA6BA,EAAMmD,QACvD,UAAE8O,GAAc2V,KAChBxS,GAA4B,QAAdqQ,EAAAxT,EAAUhE,YAAI,IAAAwX,OAAA,EAAdA,EAAgBrQ,cAAe,GAGnDrQ,eAAe4zF,EACb7/D,EACAh8B,EACA8T,GAEAA,EAAEyS,UACFzS,EAAE0lB,iBAIF,MAAMsc,EAAqBx6B,EAAY/C,MACpCkD,GACCA,EAAEvB,SAAW7T,EAAKvU,IAClBiK,GAA6B4X,SAAS3T,IACtCyb,EAAEke,8BAAgC35B,IAGtC,GAAM81C,EACJ,IACE6mD,EAA0BnoD,OAAO,CAC/B9+B,cACAC,OAAQ,CACNogC,aAAcD,EAAmBC,cAEnCngC,aAEF2P,EAAW,CACTzR,IACA/hB,MAAO,2CACP4oB,MAAM,gBAAD3Q,OAAkB1H,EAAOrP,YAAW,qBAAA+W,OAAoBhK,IAEjE,CAAE,MAAO60C,GACPC,QAAQxgC,MAAMugC,EAChB,KACK,CACL,MAAMmoD,GAAiBvpF,OAAOmH,OAAOpf,IAAuBmY,SAC1D3T,GAGIi1B,EAAa,CACjB0E,4BAA6BqjE,EAAgB,GAAKh9F,EAClD01C,wBAAyB,EACzBpgB,oBAAqB0nE,EAAgBh9F,EAAS,GAC9Cs1C,cAAe,GACfD,WAAYunD,EACZnnD,aAAc,gBAGhB,IACEinD,EAAyBloD,OAAO,CAC9B9+B,cACAC,OAAQ,CACNxV,MAAO,CAACkG,EAAKsQ,OACbqlB,UACA/G,cAEFrf,aAEF2P,EAAW,CACTzR,IACA/hB,MAAO,2CACP4oB,MAAM,GAAD3Q,OAAKgzF,EAAgB,eAAiB,aAAY,KAAAhzF,OACrD1H,EAAOrP,YAAW,qBAAA+W,OACAhK,IAExB,CAAE,MAAO60C,GACPC,QAAQxgC,MAAMugC,EAChB,CACF,CACF,CAUA,OACE3qC,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL4S,gBAAC6xF,GAAY,CAAAzkG,SAAA,CACX2S,eAAC2/B,GAAK,CAAAtyC,SAAC,qBACP2S,eAACy/B,GAAQ,CAAC5+B,QAAQ,mBAAmBhB,OAAQC,OAE/CE,eAACsyF,GAAY,CAAAjlG,SACX2S,eAAA,MAAA3S,SAAKg/D,GAAgB,mCAEvBpsD,gBAAC8xF,GAAY,CAAA1kG,SAAA,CACX2S,eAACgyF,GAAgB,CAAA3kG,SACd8mC,kBACCriC,GAA6BsG,KAAI46F,IAC/B,MAAMC,EAAYL,EAAgB3hF,QAChCO,GAAKA,EAAEke,8BAAgCsjE,IAEnCtB,IAA8BuB,EAAU3kF,MAC3CkD,GAA4BA,EAAEvB,SAAW7T,EAAKvU,KAEjD,OAAOorG,EAAUp4F,OACfmF,eAACiyF,GAAQ,CAAA5kG,SACP2S,eAAC0sB,GAAO,CACNe,QACExtB,gBAACiyF,GAAe,CACd5qE,OAAO,WACPjL,QACExS,GACG+nF,EAAQkB,EAAeE,EAAanpF,GACzChK,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIizF,GACzBtB,0BAA2BA,EAA0BrkG,SAAA,CAErD2S,eAAC6uB,GAAY,CACX/5B,KACE/C,GACEihG,GAQJnzF,OAAQC,IAEVE,eAAA,QAAMJ,UAAU,iBAAgBvS,SAC7BsoC,oBAAUq9D,KAEbhzF,eAACmyF,GAAa,CAAA9kG,SAAE4lG,EAAUp4F,YAG9B2yB,aACExtB,eAACqxD,GAAQ,CAAAhkE,SACN8mC,kBACC/gB,eACE6/E,EAAU76F,KAAKoZ,IACb,MAAMyZ,EAAa5c,EAAYC,MAC5BC,GACCA,EAAE1mB,KAAO2pB,EAAEvB,SAEf,OAAiB,OAAVgb,QAAU,IAAVA,OAAU,EAAVA,EAAY78B,OAAQojB,EAAE2S,SAAS,MAIzC5uB,OACA6C,KAAKpP,GACJgX,eAAC6sF,GAAU,CAET,wBAAsB,OAAMx/F,SAE3BrE,GAHIikB,oBAAUjkB,QAQzBukC,UAAU,SACVD,cAAgBzjB,GApFpC,SAAuBA,EAAkC8iF,GACvDrxE,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKD,EAAU,KAAAC,OAAIkN,oBAAU0/E,GAAW,YAC7Cj8E,MAAM,sDAAD3Q,OAAwD4sF,IAEjE,CA+EsBr/D,CAAczjB,EAAGmpF,GAEnBnzF,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIizF,MA1DdA,GA6Db,IAAI,OAIdhzF,eAAC2xF,GAAU,CACTtgF,YAAauhF,EACb7gE,QAAS+gE,EACTlB,QAASA,EACTxjG,KAAM6e,oBAAU5U,EAAOrP,aACvB6W,OAAQC,IAEVE,eAAC8xB,GAAgB,CACfC,QAAS+gE,EACTzhF,YAAauhF,EACbvkF,YAAaA,EACb2gB,sBAAuB4iE,EACvB5/D,wBAAyB4/D,EACzB1/D,YAAaA,EACbD,sBAAwBpqC,GAAe2qG,IAAiB3qG,GACxDqpC,cACEjxB,gBAACoyF,GAAc,CAAAhlG,SAAA,CACb2S,eAAC8vE,GAAU,CAAC,wBAAsB,OAAMziF,SACrCgL,EAAOrP,cAEVgX,eAACyhD,GAAS,CACRnlD,OAAQ,CACNvC,OAAQ,CAAEhB,MAAO,OAAQP,IAAK,SAEhCqH,OAAQC,EACR8T,UAAWvb,eAOtBw6F,EAAiBh4F,OAChBoF,gBAAA,WAAA5S,SAAA,CACE4S,gBAACmyF,GAAkB,CAAA/kG,SAAA,CACjB2S,eAACsxB,GAAW,CAACx8B,KAAK,UAAU+K,OAAQC,IAAc,cACjD+yF,EAAiBh4F,OAAO,OAE3BmF,eAAC4rB,GAAY,CACXC,SAAUgnE,EACV/mE,mBAAoB,EACpBzd,YAAaA,EACbxO,OAAQC,OAGV,OACA,EC9YV,MAGMozF,GAAY50F,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAAZH,CAAY,iCACnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGrCsqB,GAAOloC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,mBAAAyV,YAAA,gBAATH,CAAS,8CAITI,GAAK,GAAAqB,OAAOozB,KAAKm7C,KAAK5vE,EAAMy0F,MAXV,OAczBrkB,GAAiBxwE,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAATH,CAAS,2BAuDjB80F,OA3CW/5F,IAKS,IALR,UACzBuG,EAAS,OACTZ,EAAM,MACNm0F,EAAQ,GAAE,OACVtzF,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,iBACtB,WAAEyb,GAAeP,KAWvB,OAASo4E,EAAMt4F,OACbmF,eAAC0sB,GAAO,CACN9sB,UAAWA,EACX0tB,cAZJ,SAAuBzjB,GACrBA,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAO,cACP4oB,MAAO,iCAEX,EAMI7Q,OAAQA,EACR4tB,QACExtB,gBAAA,OAAK,iBAAAF,OAAgBD,EAAU,YAAWzS,SAAA,CACvC2R,EACAgB,eAACkzF,GAAS,CAACp+F,KAAK,WAGrB04B,aACExtB,eAACwmC,GAAI,CAAC2sD,MAAOA,EAAMt4F,OAAOxN,SACvB8lG,EAAM/6F,KAAIhK,GACT4R,eAAC8uE,GAAc,CAAuB,wBAAsB,OAAMzhF,SAC/De,GADkB6e,oBAAU7e,QAMrCm/B,UAAU,WAEV,IAAI,ECtEV,MAAM/sB,GAAYlC,KAAO+0F,GAAE70F,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAATH,CAAS,8GACXI,GAASA,EAAMC,MAAM2C,OAAOy7B,aAAar+B,EAAM40F,aAoChDC,OApBWl6F,IAKZ,IALa,UACzBuG,EAAS,QACTiB,EAAO,MACPyc,EAAK,OACLzd,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,wBACtByzF,EAAY7iF,GAAqB6M,GAEvC,OACEtd,eAACQ,GAAS,CACRZ,UAAWA,EACX,cAAaE,EACbwzF,UAAWA,EAAUjmG,SAEpBwT,GAAWyyF,GACF,ECjChB,MAAM9sD,GAAOloC,KAAOqzD,GAAEnzD,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAATH,CAAS,wCAIhBk1F,GAAQl1F,KAAO+wD,GAAE7wD,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAATH,CAAS,wDAENI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAItDi0F,GAAcn1F,KAAO8yD,GAAE5yD,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAATH,CAAS,mEACZI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAMhDg/F,GAAmB9uF,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,gBAAjBH,CAAiB,qHAC/BI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAG9Bxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,YAIrCq3E,IACa90F,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAqCjDi0F,OAvBgBr6F,IAMH,IANI,UAC9BuG,EAAS,OACTZ,EAAM,KACN5R,EAAI,OACJyS,EAAS,SAAQ,MACjB6Q,GACMrX,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,8BAC5B,OACEG,eAACotF,GAAgB,CACfh/F,KAAM0R,EACN2mB,GAAIr5B,EACJwS,UAAWA,EACX,cAAaE,EAAWzS,SAExB4S,gBAACumC,GAAI,CAAAn5C,SAAA,CACH2S,eAACwzF,GAAK,CAAAnmG,SAAE2R,IACRgB,eAACyzF,GAAW,CAAApmG,SAAEqjB,QAEC,ECpDhB,MAIMijF,GAAiCA,CAC5CC,EACAC,KAEA,OAAQD,GACN,IAAK,iBACH,IAAI/xE,EAAoB,CACtB,CAACvuB,GAAahB,UAAW,CAAC/E,EAAqBC,kBAC/C,CAAC8F,GAAaV,eAAe,GAY/B,OAVMihG,IACJhyE,EAAoB,IACfA,EACH,CAACvuB,GAAaN,mBAAoB,CAChC3L,EAAwBC,YACxBD,EAAwBG,4BACxBH,EAAwBI,uBAIvB,CACLo6B,oBACAR,gBAAiBz0B,EAAqBE,cAE1C,IAAK,yBACH,MAAO,CACL+0B,kBAAmB,CACjB,CAACvuB,GAAahB,UAAW,CAAC/E,EAAqBC,kBAC/C,CAAC8F,GAAaV,eAAe,GAE/ByuB,gBAAiBz0B,EAAqBE,cAE1C,IAAK,wBACH,MAAO,CACL+0B,kBAAmB,CACjB,CAACvuB,GAAahB,UAAW,CAAC/E,EAAqBC,kBAC/C,CAAC8F,GAAaV,eAAe,EAC7B,CAACU,GAAaN,mBAAoB,CAChC3L,EAAwBG,4BACxBH,EAAwBI,sBAG5B45B,gBAAiBz0B,EAAqBE,cAE1C,IAAK,eACH,MAAO,CACL+0B,kBAAmB,CACjB,CAACvuB,GAAaJ,QAAS,CACrB1J,EAAwBK,YACxBL,EAAwBG,MAE1B,CAAC2J,GAAaV,eAAe,EAC7B,CAACU,GAAaN,mBAAoB,CAChC3L,EAAwBC,aAE1B,CAACgM,GAAaF,iBAAkB,CAC9BxI,EAA0BC,IAC1BD,EAA0BE,MAC1BF,EAA0BI,WAG9Bq2B,gBAAiBz0B,EAAqBE,cAE1C,IAAK,mBACH,MAAO,CACL+0B,kBAAmB,CACjB,CAACvuB,GAAaN,mBAAoB,CAChC3L,EAAwBI,qBAE1B,CAAC6L,GAAaV,eAAe,EAC7B,CAACU,GAAaF,iBAAkB,CAC9BxI,EAA0BC,IAC1BD,EAA0BE,MAC1BF,EAA0BI,WAG9Bq2B,gBAAiBz0B,EAAqBE,cAE1C,IAAK,8BACH,MAAO,CACL+0B,kBAAmB,CACjB,CAACvuB,GAAahB,UAAW,CAAC/E,EAAqBE,uBAC/C,CAAC6F,GAAaV,eAAe,GAE/ByuB,gBAAiBz0B,EAAqBE,cAE1C,IAAK,mBACH,MAAO,CACL+0B,kBAAmB,CACjB,CAACvuB,GAAahB,UAAW,CAAC/E,EAAqBG,mBAC/C,CAAC4F,GAAaV,eAAe,EAC7B,CAACU,GAAaF,iBAAkB,CAC9BxI,EAA0BE,MAC1BF,EAA0BI,WAG9Bq2B,gBAAiBz0B,EAAqBE,cAE1C,IAAK,yBACH,MAAO,CACL+0B,kBAAmB,CACjB,CAACvuB,GAAaN,mBAAoB,CAChC3L,EAAwBK,0BAE1B,CAAC4L,GAAaV,eAAe,EAC7B,CAACU,GAAaF,iBAAkB,CAC9BxI,EAA0BC,IAC1BD,EAA0BE,MAC1BF,EAA0BI,WAG9Bq2B,gBAAiBz0B,EAAqBE,cAE1C,QACE,MAAO,CAAC,EAEZ,E,OCvHF,MAAM0vB,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAbH,CAAa,yDAKtBqhC,GAAQrhC,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAATH,CAAS,oCACNI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAC7Cf,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAElDw0F,GAAOx1F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAVH,CAAU,gEAGPI,GAASA,EAAMC,MAAM+/B,KAAKE,MAEpCm1D,GAAgBz1F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAVH,CAAU,wHAChBI,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAIjE7rB,IACA,GAAMA,EAAMs1F,8BACV,OAAOxsE,aAAGC,QAAAC,aAAA,yGAKZ,IASEusE,GAAS31F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAVH,CAAU,kJAONI,GAAK,GAAAqB,OACfrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QA+IxD2pE,OAlIY76F,IAIQ,IAJP,UAC1BuG,EAAS,OACTC,EAAS,SAAQ,YACjBs0F,GACM96F,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,yBACtBxE,EAAQgC,cAAapE,GAA6BA,EAAMoC,SACxD,oBAAE0mB,GAAwBlB,KAC1BuzE,EAAkB,OAAL/4F,QAAK,IAALA,OAAK,EAALA,EAAQ,aACrB24F,EACJI,KACEj6E,gBAAMg6E,EAAYE,0BACjBl6E,gBAAMg6E,EAAYG,wBAEvB,OAAO9qF,OAAOmH,OAAOwjF,GAAa5kF,OAAMhB,GAAK4L,gBAAM5L,KAAM,KACvDtO,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL2S,eAAC2/B,GAAK,CAAAtyC,SAAC,mBACP2S,eAACy/B,GAAQ,CAAC5+B,QAAQ,sBAEpBZ,gBAAC6zF,GAAI,CAAAzmG,SAAA,CACF8sB,gBAAMg6E,EAAYI,gBAAkB,KACnCt0F,gBAAC8zF,GAAa,CACZC,8BAA+BA,EAA8B3mG,SAAA,CAE7D2S,eAAC0zF,GAAsB,CACrB10F,OAAO,mBACP5R,KAAM20B,EACJ4xE,GAA+B,iBAAkBS,IAEnD1jF,MAAOyjF,EAAYI,eACnB10F,OAAQC,IAETk0F,EACC/zF,gBAACg0F,GAAM,CAAA5mG,SAAA,CACJ8sB,gBAAMg6E,EAAYE,wBAA0B,KAC3Cr0F,eAAC0zF,GAAsB,CACrB10F,OAAO,YACP5R,KAAM20B,EACJ4xE,GAA+B,2BAEjCjjF,MAAOyjF,EAAYE,uBACnBx0F,OAAQC,IAGXqa,gBAAMg6E,EAAYG,uBAAyB,KAC1Ct0F,eAAC0zF,GAAsB,CACrB10F,OAAO,UACP5R,KAAM20B,EACJ4xE,GAA+B,0BAEjCjjF,MAAOyjF,EAAYG,sBACnBz0F,OAAQC,OAIZ,QAGPqa,gBAAMg6E,EAAYK,cAAgB,KACjCx0F,eAAC+zF,GAAa,CAAA1mG,SACZ2S,eAAC0zF,GAAsB,CACrB10F,OAAO,gBACP5R,KAAM20B,EACJ4xE,GAA+B,eAAgBS,IAEjD1jF,MAAOyjF,EAAYK,aACnB30F,OAAQC,MAIbqa,gBAAMg6E,EAAYM,6BAA+B,KAChDz0F,eAAC+zF,GAAa,CAAA1mG,SACZ2S,eAAC0zF,GAAsB,CACrB10F,OAAO,kCACP5R,KAAM20B,EACJ4xE,GACE,8BACAS,IAGJ1jF,MAAOyjF,EAAYM,4BACnB50F,OAAQC,MAIbqa,gBAAMg6E,EAAYO,kBAAoB,KACrC10F,eAAC+zF,GAAa,CAAA1mG,SACZ2S,eAAC0zF,GAAsB,CACrB10F,OAAO,2BACP5R,KAAM20B,EACJ4xE,GAA+B,mBAAoBS,IAErD1jF,MAAOyjF,EAAYO,iBACnB70F,OAAQC,MAIbqa,gBAAMg6E,EAAYQ,kBAAoB,KACrC30F,eAAC+zF,GAAa,CAAA1mG,SACZ2S,eAAC0zF,GAAsB,CACrB10F,OAAO,oBACP5R,KAAM20B,EACJ4xE,GAA+B,mBAAoBS,IAErD1jF,MAAOyjF,EAAYQ,iBACnB90F,OAAQC,MAIbqa,gBAAMg6E,EAAYS,wBAA0B,KAC3C50F,eAAC+zF,GAAa,CAAA1mG,SACZ2S,eAAC0zF,GAAsB,CACrB10F,OAAO,8BACP5R,KAAM20B,EACJ4xE,GACE,yBACAS,IAGJ1jF,MAAOyjF,EAAYS,uBACnB/0F,OAAQC,WAMnB,EChKH,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAVH,CAAU,yCACZI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAG1Cw/C,GAAuBxrE,aAAOurE,IAAerrE,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAtBH,CAAsB,sBAG7Cu2F,GAAkBv2F,aAAO65D,IAAU35D,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAjBH,CAAiB,iEACxBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAEnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAEtDszD,GAAexzF,KAAOwhC,OAAMthC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAAbH,CAAa,aAG5B6+C,GAAgB7+C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAVH,CAAU,mGAEbI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAK/DuqE,GAAYx2F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAVH,CAAU,wDAKtB+zF,GAAiB/zF,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAATH,CAAS,uJAEdI,GAAK,GAAAqB,OAChBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAEpD7rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAEnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAItDswE,GAAaxxE,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAXH,CAAW,wBAGxBy2F,GAAQz2F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,gBAAVH,CAAU,wEAMlB02F,GAAO12F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,gBAAVH,CAAU,mFASjB22F,GAAa32F,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,iBAAbH,CAAa,yCAI1B42F,GAAY52F,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,iBAAXH,CAAW,+DACZI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAIhD+mG,GAAwB72F,aAAOi1F,IAAkB/0F,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,iBAAzBH,CAAyB,sBACtCI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAEtDs1D,GAAOx1F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,iBAAVH,CAAU,4DAGPI,GAASA,EAAMC,MAAM+/B,KAAKE,MAEpCw2D,GAAS92F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,iBAAVH,CAAU,8FACTI,GAAK,mBAAAqB,OACErB,EAAMC,MAAM2C,OAAO2a,IAAIsO,KAAI,MAAAxqB,OAAKrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,KAAI,cAAAxqB,OAAarB,EAAMC,MAAM2C,OAAO2a,IAAIqO,MAAK,eAMrH+qE,GAAoB/2F,aAAOsyF,IAA0BpyF,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,iBAAjCH,CAAiC,0CAC3CI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAG1CgrE,GAAwBh3F,aAAOyxF,IAAuBvxF,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,iBAA9BH,CAA8B,yCAC5CI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAG1CirE,GAAoBj3F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,iBAAVH,CAAU,yDAM3BI,GAASA,EAAMC,MAAM+/B,KAAKE,MAE7BlT,GAASptB,KAAOqtB,OAAMntB,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,iBAAbH,CAAa,+EAMtBk3F,GAAel3F,KAAOi/B,OAAM/+B,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,iBAAbH,CAAa,gCACvBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAC1Bxd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UA+I7Ci2F,OAlIOp8F,IAOa,IAADq8F,EAAAC,EAAAC,EAAAC,EAAA,IAPX,UACrBj2F,EAAS,YACTyR,EAAc,GAAE,OAChBhZ,EAAM,qBACN01F,EAAoB,wBACpBC,EAAuB,OACvBnuF,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mBACtBxE,EAAQgC,cAAapE,GAA6BA,EAAMoC,SACxD,UAAE6P,GAAc2V,KAChBzM,EAAalJ,EAAUhE,KACvB4uF,EAAmBzmF,mBACvB,IAAM2N,GAA6B+wE,EAAqB9wE,aACxD,CAAC8wE,IAGGgI,IAGH,QAFDL,EAAAI,EAAiBxnF,MACf8O,GAAYA,EAASrnB,SAAWvM,EAAwBE,cACzD,IAAAgsG,OAAA,EAFDA,EAEGz3E,aAAc,GACjBgnC,QAAQ,GACJ+wC,EAA2C,OAAvBhI,QAAuB,IAAvBA,GAAoC,QAAb2H,EAAvB3H,EAA0B31F,EAAOxQ,WAAG,IAAA8tG,OAAb,EAAvBA,EAAsC58D,cAEhE,OAAS3kB,GAAgB4hF,EACvB/1F,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD2S,eAAC8pE,GAAoB,CACnBjpE,QACEZ,gBAACk9C,GAAa,CAAC,wBAAsB,OAAM9vD,SAAA,CACzC4S,gBAAC6xF,GAAY,CAAAzkG,SAAA,CACX2S,eAAC60F,GAAe,CACdvrG,MAAK,0BAAAyW,OAA4BkO,GAC/BmG,IAEFvU,OAAQC,IAEVG,gBAAC60F,GAAS,CAAAznG,SAAA,CACR4S,gBAACoyF,GAAc,CAAAhlG,SAAA,CACb2S,eAAC8vE,GAAU,CAAAziF,SAAEgL,EAAOrP,cACpBgX,eAACyhD,GAAS,CACRnlD,OAAQ,CAAEvC,OAAQ,CAAEhB,MAAO,OAAQP,IAAK,SACxCqH,OAAQC,EACR8T,UAAWvb,OAGf2H,eAACozF,GAAU,CACTp0F,OAAO,gBACPm0F,MAAO1yE,GACLstE,EAAqBrrB,cAEvB7iE,OAAQC,UAIdG,gBAAC80F,GAAK,CAAA1nG,SAAA,CACD2oG,EACD/1F,gBAAC+0F,GAAI,CAAA3nG,SAAA,CACH2S,eAACi1F,GAAU,CAAA5nG,SAAC,mBACZ2S,eAACm1F,GAAqB,CACpB73E,MAAO04E,EACPn2F,OAAQC,OAGV,KACDi2F,EACD91F,gBAAC+0F,GAAI,CAAA3nG,SAAA,CACH2S,eAACi1F,GAAU,CAAA5nG,SAAC,uBACZ2S,eAACk1F,GAAS,CAAA7nG,SAAE0oG,IACZ/1F,eAAA,QAAA3S,SAAM,SAEN,WAIVwS,OAAQC,IAEVG,gBAACw8C,GAAkB,CAAApvD,SAAA,CACjB4S,gBAAC6zF,GAAI,CAAAzmG,SAAA,CACH4S,gBAACm1F,GAAM,CAAA/nG,SAAA,CACL2S,eAACq1F,GAAiB,CAChBjrF,KAA6B,OAAvB4jF,QAAuB,IAAvBA,OAAuB,EAAvBA,EAA0B31F,EAAOxQ,IACvC67D,eAAgBrrD,EAAOY,QAAU7I,GACjCyP,OAAQC,IAEVE,eAACs1F,GAAqB,CACpBlrF,KAAM0rF,EACNpyC,eAAgBrrD,EAAOY,QAAU7I,GACjCyP,OAAQC,OAGZG,gBAACs1F,GAAiB,CAAAloG,SAAA,CACV,OAALgO,QAAK,IAALA,KAAQ,gCAAkC6V,iBAAOG,GAChDrR,eAACuyF,GAA4B,CAC3BlhF,YAAaA,EACbhZ,OAAQA,EACRwH,OAAQC,IAER,KACJE,eAACk0F,GAAkB,CACjBC,YAAa,IACRpG,EAAqBoG,YACxBQ,iBAAsC,OAApB5G,QAAoB,IAApBA,GAAmC,QAAf6H,EAApB7H,EAAsBp1C,qBAAa,IAAAi9C,GAEpD,QAFoDC,EAAnCD,EAAqCtnF,MACrD+1C,GAA6B,sBAAnBA,EAAO9W,iBAClB,IAAAsoD,OAFqC,EAApBA,EAEfpiE,OAEL5zB,OAAQC,UAIdE,eAAC0rB,GAAM,CAAAr+B,SACL2S,eAACk9C,GAAc,CACbr8C,QACExI,EAAOY,QAAU7I,IACf6P,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACw1F,GAAY,CAAAnoG,SAAC,0CAEE,IAAI,gFAM1BwS,OAAQC,YAKd,IAAI,EC9QH,MAAMm2F,GAAsB,WAAwB,IAAvB/mF,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC5C,MAAM,UAAEsQ,GAAc2V,KAChBxoB,EAAS6S,EAAU0I,UACnB1b,EAAQgT,EAAUhT,MAClBkd,EAASlK,EAAUkK,OAEnB3J,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAGhDD,EAAS2D,mBAAQ,KACrB,GAAMnX,GAAWG,EAAQ,CACvB,MAAMF,EAAUD,EAAMC,QAChBs3E,EAAqB7+D,oBACzBzY,GACCoW,GAAuBA,EAAEzY,WAAauC,EAAOxQ,KAUhD,MAAO,CACLquG,UARAzmB,EAAqB,EACjB,GACAje,eACEr5D,EAAQk0B,MAAMojD,GlTocmB,GkTlcjCr3E,KAAIoY,GAAKA,EAAE1a,WAIjBsf,SAEJ,CACA,MAAO,CACL8gF,UAAW,GACX9gF,OAAQ,GACT,GACA,CAACld,EAAOG,EAAQ+c,IAEnB,OAAOnJ,oBACL,CAAC,gBAAiBP,IAClB,I5QyB+B1N,WAIuB,IAJhB,YACxCyN,EAAW,OACXC,EAAM,SACNC,GACkBqC,EAMlB,aAL6D1D,GAAIwD,KAAI,IAAA/N,OAE/D4L,EAAQ,mCAAmCD,EAAQ,CACvDhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,IAAI,E4QlChB+rF,CAAoB,CAClB1qF,cACAE,WACAD,YAEJ,CACE3U,UACI0U,KACAE,KACAD,EAAOwqF,UAAUr7F,QACnBqU,KACEkG,GAGV,ECjCMghF,GAAe93F,aAAOwvF,IAA4BtvF,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAnCH,CAAmC,kDACxCI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAI1Cq+D,GAAgBrqF,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAATH,CAAS,2EAEdI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OACzCf,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAOi3B,MAAMhO,QAGjE8rE,GAAU/3F,aAAOwmE,IAAyBtmE,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAAhCH,CAAgC,yBA4KjCg4F,OAlKIj9F,IAA4D,IAA3D,UAAEuG,EAAS,OAAEC,EAAS,UAAiBxG,EACzD,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gBACtBhE,EAAWob,eAEX5b,EAAQgC,cAAapE,GAA6BA,EAAMoC,SACxD,gBAAE+mB,EAAe,UAAElX,GAAc2V,KACjCxoB,EAAS6S,EAAU0I,UACnBze,EAAU+V,EAAU/V,QACpBif,EAAalJ,EAAUhE,KACvBiH,EAA2B,OAAViG,QAAU,IAAVA,OAAU,EAAVA,EAAYjG,eAC7ByE,EAA6B,OAAVwB,QAAU,IAAVA,OAAU,EAAVA,EAAY9B,WAC/Bpa,EAAQgT,EAAUhT,MAClBq+F,EAAqB,OAALl7F,QAAK,IAALA,OAAK,EAALA,EAAQ,iBAMxBm7F,EAA0BroF,EAC5ByE,KAAsB1a,EACtB0a,GAEE,KACJxI,EACA8pC,QAASuiD,EACTlyE,UAAWmyE,GACTvjD,GAAiB,CACnBlkC,QAAS,CACPjU,KAAM,YAGJ+yF,EAAwB3jF,GAG5BA,KAAMusF,EACNziD,QAAS0iD,EACTryE,UAAWsyE,GACTZ,MAGF7rF,KAAMiqC,EACNH,QAAS4iD,EACTvyE,UAAWwyE,GACTnjD,GACF,CACE54C,KAAM,UAER3C,EAAOtP,gBAAkBf,EAAeI,SAQ1C,OAJAgoB,qBAAU,KACRzU,SAASrS,MJjGJ+hB,GAAale,EAAalC,GAAgB3B,MIiGV,GACpC,CAACuS,IAEG06F,EACLt2F,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACw8C,GAAkB,CAAApvD,SAAA,CACjB2S,eAACq2F,GAAO,CAACx2F,OAAQC,IAAe,OAElCE,eAACY,GAAa,CACZG,gBACEg2F,GACAL,GACAG,EAEF/1F,eACG6S,GAAgBtb,IACjBlD,IAAY7G,GAAaQ,OACxB0nG,GACDlnF,kBAAQqnF,IACRG,GACAL,GACAG,KACiB,OAAhBD,QAAgB,IAAhBA,KAAmBt+F,EAAOxQ,KAE7BmZ,cACEhB,eAACU,GAAiB,CAACb,OAAQC,EAAWzS,SAClCmpG,EAyBG7iF,GAAgBtb,IAAWlD,IAAY7G,GAAaQ,KAOvDkR,eAACN,GAAU,CACTC,KAAK,2DACLX,OAAO,QACPa,OAAQC,IATVE,eAACN,GAAU,CACTC,KAAK,iGACLX,OAAO,OACPa,OAAQC,IA5BVE,eAACN,GAAU,CACTC,KACEM,gBAAAoyB,YAAA,CAAAhlC,SAAA,CAAE,uFAE0B,IACf,OAAV+mB,QAAU,IAAVA,KAAYjG,eAAiB,KAC5BlO,gBAAAoyB,YAAA,CAAAhlC,SAAA,CAAE,6EAEmB,IACnB2S,eAACygC,GAAS,CACRryC,KAAK,sBACLq4B,GAAIrE,IACJviB,OAAO,sBAAqBxS,SAC7B,iBAEW,UAMpB2R,OAAO,SACPa,OAAQC,MAiBhBe,QACIktF,GAA0B4I,EAC1B12F,gBAACS,GAAiB,CAACb,OAAQC,EAAWzS,SAAA,CACpC2S,eAACy1F,GAAa,CACZpkF,YAAagjC,EACbh8C,OAAQA,EACR01F,qBAAsBA,EACtBC,wBAAyB2I,EACzB92F,OAAQC,IAEVE,eAACo2F,GAAY,CACX/kF,YAAaH,iBAAOmjC,GAAmB,GAAKA,EAC5Cr1C,OAAQgB,eAAC2oF,GAAa,CAAAt7F,SAAC,sBACvBq6F,YAAat2F,GAAYC,QACzB08F,qBAAsBA,EACtBC,wBAAyB2I,EACzB3lF,MAAO,CACL7gB,GAAkBX,KAAK,GACvBW,GAAkBZ,UAAU,IAE9B8I,OAAQA,EACRwH,OAAO,qBAETG,eAACo2F,GAAY,CACX/kF,YAAaH,iBAAOmjC,GAAmB,GAAKA,EAC5Cr1C,OAAQgB,eAAC2oF,GAAa,CAAAt7F,SAAC,wBACvBq6F,YAAat2F,GAAYE,UACzBy8F,qBAAsBA,EACtBC,wBAAyB2I,EACzB3lF,MAAO7gB,GAAkBT,WACzB2I,OAAQA,EACRwH,OAAO,wBAGT,KAENA,OAAO,qBAIXG,eAACwmB,KAAQ,CAACC,GAAE,KACb,ECrNI,MAAMq3C,GACXC,IAEA,MAAO3zD,EAAM4zD,GAAYhuD,mBAA2B,KAC7CqwC,EAAgBue,GAAsB5uD,oBAAkB,IACxD3F,EAAOw0D,GAAa7uD,mBAAgC,MACrDvE,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDmzD,EAAezvD,mBAAQ,KACpB,CACL5D,cACAE,cAED,CAACF,EAAaE,IA6BjB,OA3BAyE,qBAAU,KACR,WACE,GAAI2tD,EACFC,EAASD,QAET,IACE,IAAK1zD,EAAO,CACV,MAAM00D,OtRkC4B/gE,WAGI,IAHG,YACnDyN,EAAW,SACXE,GACU+B,EAQV,aAP6DpD,GAAI4B,IAAG,IAAAnM,OAE9D4L,EAAQ,0BAA0B,CACtCjB,QAAS,CACPmB,cAAc,UAAD9L,OAAY0L,OAGbrB,IAAI,EsR7CiB4sF,CACzBl4B,GAEFd,EAASe,EACX,CACF,CAAE,MAAOl1D,GACPg1D,EAAUh1D,GACVy1D,cAAUC,IACRA,EAAM1gB,WACJ,qCACAigB,GAEFh1D,aAAiBD,EAAE,GAEvB,CAEF+0D,GAAmB,EACpB,EAvBD,EAuBI,GACH,CAACb,EAAae,EAAcz0D,IAExB,CAACD,EAAMi2C,EAAgBh2C,EAAM,EC3ChCkS,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAVH,CAAU,8FACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAM1C9N,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAbH,CAAa,wEAKtBqhC,GAAQrhC,KAAOme,GAAEje,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAATH,CAAS,wGAGNI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAKtD49D,GAAc9+D,aAAOylC,IAAMvlC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAAbH,CAAa,uWAChBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAIjCsQ,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAOi3B,MAAMhO,QAErD7rB,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAOi3B,MAAMhO,QACpD7rB,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAOi3B,MAAMhO,QAGxD7rB,GAASA,EAAMC,MAAMC,MAAMk0B,UAAUzzB,MAAMwrB,KAMxCnsB,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAOi3B,MAAMhO,QAI1D7rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAOvCnsB,GAAK,GAAAqB,OACfrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAOi3B,MAAMhO,QAGnE23C,GAAY5jE,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAXH,CAAW,uBAGvBqC,GAAiBrC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAVH,CAAU,iHAQ3By1C,GAA2Bz1C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,eAAVH,CAAU,yCAmG5B24F,OAxFa59F,IAId,IAJe,UAC3BuG,EAAS,YACTm+D,EAAW,OACXl+D,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,sBAErBswC,EAAa+mD,GAAmBlnF,mBAAS,GAC1CmnF,EAAW,GAEXjzD,EAAU,CACd,CACEmI,SAAU,aACVC,KAAMxyC,IAAA,IAAC,KAAEksC,GAAmClsC,EAAA,OAC1CkG,eAAA,QAAM,wBAAsB,OAAM3S,SAAE24C,EAAKt1B,OAAa,EAExD8L,OAAQxc,eAACkiE,GAAS,CAAA70E,SAAC,QACnBuS,UAAW,cAEb,CACEysC,SAAU,cACVC,KAAMt+B,IAAA,IAAC,KAAEg4B,GAAmCh4B,EAAA,OAC1ChO,eAAA,QAAM,wBAAsB,OAAM3S,SAAE24C,EAAKt1B,OAAa,EAExD8L,OAAQxc,eAACkiE,GAAS,CAAA70E,SAAC,SACnBuS,UAAW,iBAIRwK,EAAMi2C,EAAgBh2C,GAASyzD,GAAeC,GAErD,GAAI1zD,IAAUD,EAAKvP,OACjB,OAAO,KAGT,IAaIoG,EAbAm2F,EAAgB,OAAJhtF,QAAI,IAAJA,OAAI,EAAJA,EAAMiiB,MACpB8jB,EAAcgnD,GACbhnD,EAAc,GAAKgnD,GA0CtB,OA7BEl2F,EADEiQ,iBAAOmvC,GAEPrgD,eAACW,GAAc,CAAAtT,SACb2S,eAACG,GAAO,CAACN,OAAQA,MAKnBI,gBAACsc,GAAc,CAAAlvB,SAAA,CACb2S,eAACwc,GAAM,CAAAnvB,SACL2S,eAAC2/B,GAAK,CAAAtyC,SAAC,4BAET2S,eAACo9D,GAAW,CAACl5B,QAASA,EAAS95B,KAAMgtF,EAAWv3F,OAAQA,IACxDG,eAAC+zC,GAAwB,CAAA1mD,SACvB2S,eAACkwC,GAAiB,CAChBC,YAAaA,EACbE,UACEjmC,EAAKvP,OAASs8F,EACV,EACAhkE,KAAKY,MAAM3pB,EAAKvP,OAASs8F,GAAY,EAE3C3kE,SA9BV,SAAkC9kB,GAA4C,IAA3C,YAAEmjC,GAAsCnjC,EACzEwpF,EAAgBrmD,GAChBumD,EAAgB,OAAJhtF,QAAI,IAAJA,OAAI,EAAJA,EAAMiiB,MAChBwkB,EAAcsmD,GACbtmD,EAAc,GAAKsmD,EAExB,EAyBU/oG,KAAK,kCACLyR,OAAQC,SAQhBE,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACU,GAAiB,CAACb,OAAQC,EAAWzS,SACnC4T,KAEC,ECrKH,MAAM68D,GACXC,IAEA,MAAO3zD,EAAM4zD,GAAYhuD,mBAAuB,KACzCqwC,EAAgBue,GAAsB5uD,oBAAkB,IACxD3F,EAAOw0D,GAAa7uD,mBAAgC,MACrDvE,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDmzD,EAAezvD,mBAAQ,KACpB,CACL5D,cACAE,cAED,CAACF,EAAaE,IAwBjB,OAtBAyE,qBAAU,KACR,WACE,GAAI2tD,EACFC,EAASD,QAET,IACE,IAAK1zD,EAAO,CACV,MAAM00D,OxRoBwB/gE,WAGI,IAHG,YAC/CyN,EAAW,SACXE,GACUqC,EAQV,aAPyD1D,GAAI4B,IAAG,IAAAnM,OAE1D4L,EAAQ,yBAAyB,CACrCjB,QAAS,CACPmB,cAAc,UAAD9L,OAAY0L,OAGbrB,IAAI,EwR/BiBitF,CAA2Bv4B,GACtDd,EAASe,EACX,CACF,CAAE,MAAOl1D,GACPg1D,EAAUh1D,GACVy1D,cAAUC,IACRA,EAAM1gB,WAAW,+BAAgCigB,GACjDh1D,aAAiBD,EAAE,GAEvB,CAEF+0D,GAAmB,EACpB,EAlBD,EAkBI,GACH,CAACb,EAAae,EAAcz0D,IAExB,CAACD,EAAMi2C,EAAgBh2C,EAAM,ECtChCkS,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,gBAAVH,CAAU,8FACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAM1C9N,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAbH,CAAa,wEAKtBqhC,GAAQrhC,KAAOme,GAAEje,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAATH,CAAS,wGAGNI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAKtD49D,GAAc9+D,aAAOylC,IAAMvlC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAAbH,CAAa,uWAChBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAIjCsQ,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAOi3B,MAAMhO,QAErD7rB,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAOi3B,MAAMhO,QACpD7rB,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAOi3B,MAAMhO,QAGxD7rB,GAASA,EAAMC,MAAMC,MAAMk0B,UAAUzzB,MAAMwrB,KAMxCnsB,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAOi3B,MAAMhO,QAI1D7rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAOvCnsB,GAAK,GAAAqB,OACfrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAOi3B,MAAMhO,QAGnEwpB,GAA2Bz1C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qDAAAyV,YAAA,gBAAVH,CAAU,yCAIrCqC,GAAiBrC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,gBAAVH,CAAU,iHAoGlBg5F,OAtFkBj+F,IAInB,IAJoB,UAChCuG,EAAS,OACTC,EAAS,SAAQ,YACjBk+D,GACM1kE,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,sBACrBswC,EAAa+mD,GAAmBlnF,mBAAS,IAEzC5F,EAAMi2C,EAAgBh2C,GAASyzD,GAAeC,GAC/Co5B,EAAW,GACXjzD,EAAU,CACd,CACE1nB,OAAQ,aACR8vB,KAAMxyC,IAAA,IAAC,KAAEksC,GAAmClsC,EAAA,OAC1CkG,eAAA,QAAM,wBAAsB,OAAM3S,SAAE24C,EAAKt1B,OAAa,EAExD27B,SAAU,iBACVzsC,UAAW,kBAEb,CACE4c,OAAQ,UACR8vB,KAAMt+B,IAAA,IAAC,KAAEg4B,GAAmCh4B,EAAA,OAC1ChO,eAAA,QAAM,wBAAsB,OAAM3S,SAAE24C,EAAKt1B,OAAa,EAExD27B,SAAU,cACVzsC,UAAW,gBAIf,GAAIyK,IAAUD,EAAKvP,OACjB,OAAO,KAGT,IAaIoG,EAbAm2F,EAAgB,OAAJhtF,QAAI,IAAJA,OAAI,EAAJA,EAAMiiB,MACpB8jB,EAAcgnD,GACbhnD,EAAc,GAAKgnD,GA0CtB,OA7BEl2F,EADEiQ,iBAAOmvC,GAEPrgD,eAACW,GAAc,CAAAtT,SACb2S,eAACG,GAAO,CAACN,OAAQA,MAKnBI,gBAACsc,GAAc,CAAAlvB,SAAA,CACb2S,eAACwc,GAAM,CAAAnvB,SACL2S,eAAC2/B,GAAK,CAAAtyC,SAAC,4BAET2S,eAACo9D,GAAW,CAACl5B,QAASA,EAAS95B,KAAMgtF,IACrCp3F,eAAC+zC,GAAwB,CAAA1mD,SACvB2S,eAACkwC,GAAiB,CAChBC,YAAaA,EACbE,UACEjmC,EAAKvP,OAASs8F,EACV,EACAhkE,KAAKY,MAAM3pB,EAAKvP,OAASs8F,GAAY,EAE3C3kE,SA9BV,SAAkC9kB,GAA4C,IAA3C,YAAEmjC,GAAsCnjC,EACzEwpF,EAAgBrmD,GAChBumD,EAAgB,OAAJhtF,QAAI,IAAJA,OAAI,EAAJA,EAAMiiB,MAChBwkB,EAAcsmD,GACbtmD,EAAc,GAAKsmD,EAExB,EAyBU/oG,KAAK,kCACLyR,OAAQC,SAQhBE,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACU,GAAiB,CAACb,OAAQC,EAAWzS,SACnC4T,KAEC,ECvJV,MAAMs2F,GAAyBj5F,aAAOi4C,IAAqB/3C,WAAA,CAAAxV,YAAA,uDAAAyV,YAAA,gBAA5BH,CAA4B,oCAC5CI,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KA+FxC2sE,OA9EsBn+F,IAUvB,IAVwB,UACpCuG,EAAS,QACTskC,EAAU,EAAC,OACXllC,EAAM,KACNqnC,EAAI,KACJj4C,EAAI,kBACJ4oD,EAAiB,cACjBN,GAAgB,EAAI,OACpB72C,EAAS,SAAQ,KACjB7E,EAAO,YACD3B,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,6BACtB,WAAEyb,GAAeP,KAwCvB,MAAMk8B,EAAc5Q,EAAKjuC,KAAIkvC,IACpB,CACL/f,WAAY+f,EAAEjF,WACdv6C,MAAOw/C,EAAEl5C,KACTytC,SAAUyL,EAAE3Y,WACZje,MAAO42B,EAAEz/C,OAIb,OACEmY,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACu3F,GAAsB,CACrB7gD,cAAeA,EACfxS,QAASA,EACTllC,OAAQA,EACR5Q,KAAMA,EACN6gB,QAASgoC,EACTR,oBAvDN,SAA4B38C,GAGgB,IAHf,EAC3B+P,EAAC,YACD8sC,GACuC78C,EACvCwhB,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAK3R,EAAI,cACdsiB,MAAM,uBAAD3Q,OAAyB42C,EAAc,KAAO,SAErDK,EACE3Q,EAAKjuC,KAAIkvC,IACA,IACFA,EACH3Y,WAAYgoB,MAIpB,EAuCMH,iBArCN,SAA0BxoC,GAGe,IAHd,EACzBnE,EAAC,OACD+xB,GACoC5tB,EACpCsN,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAK3R,EAAI,cACdsiB,MAAM,GAAD3Q,OAAK67B,EAAO9zC,MAAK,aAAAiY,OAAY8J,EAAEqjB,OAAO4U,QAAU,KAAO,SAE9DkV,EACE3Q,EAAKjuC,KAAIkvC,IACA,IACFA,EACH3Y,WAAYiN,EAAOlrB,QAAU42B,EAAEz/C,GAAKgiB,EAAEqjB,OAAO4U,QAAUwF,EAAE3Y,eAIjE,EAqBM9uB,OAAQC,EACR9E,KAAMA,KAEJ,ECnFV,MAAMwF,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,eAAVH,CAAU,kEACZI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAK1CmtE,GAAan5F,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,eAAbH,CAAa,gEACfI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OA2FrCspG,OAjFwBr+F,IAGzB,IAH0B,UACtCuG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,wCACtB,WAAEyb,GAAeP,KAEjBtP,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAIhD0+B,EAAcC,6BACZlgC,KAAMgC,GAAiBN,KACzB6rF,EAAuBltD,uBAAYj/B,GAAoB,CAC3Dk/B,UAAWA,KAETL,EAAYM,kBAAkB,gBAAgB,IAI5C6M,EAAe,CACnB,CACEppD,KAAK,OACLvG,GAAIyG,GAAaC,MAEnB,CACEH,KAAK,UACLvG,GAAIyG,GAAaK,UAKjByJ,KAAI4mB,IACC,CACLn3B,GAAIm3B,EAAEn3B,GACN8mC,WAAYviB,EAAaE,qBAAuB0S,EAAEn3B,GAClDuG,KAAM4wB,EAAE5wB,SAwBZ,OACE6R,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD4S,gBAACw3F,GAAU,CAAApqG,SAAA,CAAC,6BACiB,IAC3B2S,eAACy/B,GAAQ,CAAC5+B,QAAQ,iCAEpBb,eAACw3F,GAA4B,CAC3BnxD,KAAMmR,EACNppD,KAAK,4BACL4M,KAAK,QACL07C,eAAe,EACfM,kBA/BYhU,IAChB,MAAM40D,EAAc50D,EAAQ10B,MACzB+F,GACCA,EAAEsa,YAActa,EAAExsB,KAAOukB,EAAaE,qBAEtCsrF,IAGFD,EAAqBptD,OAAO,CAC1B9+B,cACAE,WACAD,OAAQW,mBAAS,CAAEC,mBAAoBsrF,EAAY/vG,IAAMukB,KAE3DkP,EAAW,CACTxzB,MAAO,mCACP4oB,MAAM,wCAAD3Q,OAA0C63F,EAAY/vG,MAE/D,MAgBY,EC9GhB,MAAM2Y,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAVH,CAAU,uBAGtBu5F,GAAYv5F,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAARH,CAAQ,+DACPI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAI/DupE,GAAOx1F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAVH,CAAU,0DAKjBw5F,GAAUx5F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAVH,CAAU,0DAKpBke,GAASle,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAATH,CAAS,wFAKPI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQkJ,OAmC7C4vF,OA1BkB1+F,IAA8C,IAA7C,UAAEuG,EAAS,OAAEC,EAAS,UAAiBxG,EACvE,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gCAC5B,OACEI,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD4S,gBAAC43F,GAAS,CAAAxqG,SAAA,CAAC,yGAEuB,IAChC2S,eAACoc,GAAgB,CAAChuB,KAAK,WAAWyR,OAAQC,IAAc,OAE1DG,gBAAC6zF,GAAI,CAAAzmG,SAAA,CACH4S,gBAAA,OAAA5S,SAAA,CACE2S,eAACwc,GAAM,CAAAnvB,SAAC,oCACR2S,eAAC03F,GAA8B,OAEjCz3F,gBAAA,OAAA5S,SAAA,CACE2S,eAACwc,GAAM,CAAAnvB,SAAC,+CACR4S,gBAAC63F,GAAO,CAAAzqG,SAAA,CACN2S,eAACi3F,GAAmB,IACpBj3F,eAACs3F,GAAwB,eAIrB,ECzDhB,MAAMU,GAAQ15F,aAAO43C,IAAiB13C,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAxBH,CAAwB,wCAIhCqkC,GAAQrkC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAXH,CAAW,uBAkCV25F,OArBU5+F,IAMX,IANY,UACxBuG,EAAS,UACTs4F,EAAS,oBACTC,EAAmB,SACnBjqF,EAAQ,OACRrO,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,uBAC5B,OACEG,eAACg4F,GAAK,CACJp4F,UAAWA,EACX9X,MAAOkY,eAAC2iC,GAAK,CAAAt1C,SAAC,yBACde,KAAI,GAAA2R,OAAKkN,oBAAUiB,GAAS,iBAC5BskB,SAAU2lE,EACVt8D,SAAUq8D,EACVr4F,OAAQC,EACR4Q,MAAM,gBACN,EC7BN,MAAM0nF,GAAaA,IAAMzuE,iBAAOngB,OAAOC,KAAKL,KACtCivF,GAAcA,IAAM1uE,iBAAOoN,GAAaz1B,OAAO66B,aAG/C37B,GAAYlC,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAbH,CAAa,2DAMzBg6F,GAAch6F,aAAO86D,IAAW56D,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAlBH,CAAkB,oBAGhCi6F,GAAcj6F,aAAO86D,IAAW56D,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAlBH,CAAkB,mFAmEvBk6F,I,SAAAA,GAlDWn/F,IAMZ,IANa,YACzBggE,EAAW,WACXC,EAAU,UACV15D,EAAS,aACT64F,EAAY,OACZ54F,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,yBACtB,WAAEyb,GAAeP,KAsBvB,OApBA3K,qBAAU,KACJc,iBAAOmoD,IAAgBnoD,iBAAOooD,IAChCm/B,EAAaL,KAAcC,KAC7B,GACC,CAACh/B,EAAaC,IAgBVpoD,iBAAOmoD,IAAgBnoD,iBAAOooD,GAAc,KACjDr5D,gBAACO,GAAS,CACRZ,UAAWA,EACX,cAAaE,EACbuc,QAlBJ,SAAwBxS,GACtBA,EAAEyS,UACFzS,EAAE0lB,iBACF,MAAMmpE,EAAcN,KACdO,EAAeN,KACrBI,EAAaC,EAAaC,GAE1Br9E,EAAW,CACTzR,IACA/hB,MAAO,sBACP4oB,MAAM,WAAD3Q,OAAa44F,EAAY,KAAA54F,OAAI24F,EAAW,UAEjD,EAM4BrrG,SAAA,CAExB2S,eAACs4F,GAAW,CACVj/B,YAAaA,EACbC,WAAYA,EACZz5D,OAAQC,IAEVE,eAACu4F,GAAW,CACVl/B,YAAatiC,GAAaz1B,OAAO2a,IAAIqO,MACrCgvC,WAAW,UACXz5D,OAAQC,MAGb,ECrEH,MAAM84F,GAAet6F,aAAOumE,IAASrmE,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAAhBH,CAAgB,aAG/Bu6F,GAAav6F,aAAOumE,IAASrmE,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAhBH,CAAgB,aAG7Bw6F,GAAex6F,aAAO8jC,IAAO5jC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAAdH,CAAc,+BAI7BqkC,GAAQrkC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAXH,CAAW,gEAQnBy6F,GAASz6F,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAXH,CAAW,gBACfI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIsO,OAErCioD,GAASl0E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAVH,CAAU,MACnB06F,GAAe16F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAAVH,CAAU,gEACdI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAOtDy5F,GAAgB36F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,eAAVH,CAAU,aAG1BojE,GAAkBpjE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,eAAVH,CAAU,qFAU9BI,IACA,GAAIA,EAAMw6F,UAAW,CACnB,MAAMC,EAAgB3xE,aAAGC,QAAAC,aAAA,2EAMzB,OAAIhpB,EAAM06F,WACD5xE,aAAGM,QAAAJ,aAAA,kFAGNyxE,GAGC3xE,aAAGQ,QAAAN,aAAA,sIACEhpB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GACjCZ,EAAMC,MAAM2C,OAAO2a,IAAIsO,KAGzB4uE,EAEN,KAGEE,GAAQ/6F,KAAOi/B,OAAM/+B,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAbH,CAAa,iFAChBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAI2W,UAG1Bl0B,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAItD85F,GAAkBzvE,IAAiB,CACvC6Y,QAAUwhC,IAAiC,IACtCA,EACHh8C,OAAO,GAADnoB,OAAKg3B,GAAa1O,QAAQC,OAAOhpB,GAAE,WAAAS,OACvC8pB,EAAWkN,GAAaz1B,OAAO2a,IAAI2W,QAAUmE,GAAaz1B,OAAO2a,IAAIsO,MAEvEpzB,aAAc,EACdyqC,UAAW,OACXJ,QAAS,IACT,SAAU,CACRtZ,OAAO,GAADnoB,OAAKg3B,GAAa1O,QAAQC,OAAOhpB,GAAE,WAAAS,OACvC8pB,EACIkN,GAAaz1B,OAAO2a,IAAI2W,QACxBmE,GAAaz1B,OAAO2a,IAAIsO,WAgMrBgvE,OAvKiBlgG,IAgBlB,IAhBmB,MAC/BnB,EAAK,OACL+a,EAAM,UACNrT,EAAS,cACT45F,EAAa,gBACbC,EAAe,UACfP,EAAS,eACT/qF,GAAiB,EAAK,cACtBurF,EAAa,gBACbC,EAAe,gBACfC,EAAe,QACf1mF,EAAO,SACPF,EAAQ,iBACRJ,EAAgB,OAChBva,EAAM,OACNwH,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,8BAOtBg6F,EAAsB1rF,EACxByE,KAAsB1a,EACtB0a,EAEEknF,EAAiB9mF,EAAS5a,KAAKib,IAC5B,CACLvrB,MAAOurB,EAAEglC,YACT3nC,MAAO2C,EAAEvB,UACT+pB,SAAUxoB,EAAEvB,aAAqB,OAAPoB,QAAO,IAAPA,OAAO,EAAPA,EAASpB,eAGjCioF,EAAkBD,EAAexrF,MACpC+E,GAA2DA,EAAEwoB,WAEhE,IAAIm+D,EACED,IACJC,EAAuB,IAClBD,EACHjyG,MAAM,YAADiY,OAAcg6F,EAAgBjyG,SAIvC,MAAMmyG,EAAehnF,EAAO7a,KAAKoa,IACxB,CACL1qB,MAAO0qB,EAAE49D,UACT1/D,MAAO8B,EAAEla,QACTujC,SAAUrpB,EAAEla,WAAiB,OAALJ,QAAK,IAALA,OAAK,EAALA,EAAOI,aAG7B4hG,EAAgBD,EAAa3rF,MAChCkE,GAA2DA,EAAEqpB,WAEhE,IAAIs+D,EACED,IACJC,EAAqB,IAChBD,EACHpyG,MAAM,UAADiY,OAAYm6F,EAAcpyG,SAInC,MAAMsyG,EAAiBlB,EACrBj5F,gBAACyhE,GAAe,CAAC03B,YAAY,EAAMF,UAAWA,EAAU7rG,SAAA,CACtD2S,eAAC44F,GAAY,CACX/vE,UAAU,EACVy6C,cAAc,EACdx7E,MAAM,iBACNy7E,cAAe,IACf/wC,SAAUmnE,EACV1qF,QAAS6qF,EACTl2B,YAAY,iBACZb,iBAAiB,EACjBryD,MAAOspF,GAAwB,KAC/Bn6F,OAAQC,EACR+jE,OAAQy1B,GAAeG,KAExBA,EACCz5F,eAACU,GAAiB,CAAArT,SAChB2S,eAACq5F,GAAK,CAAAhsG,SAAC,8BAEP,QAGN4S,gBAACyhE,GAAe,CAAC03B,YAAY,EAAMF,UAAWA,EAAU7rG,SAAA,CACtD2S,eAACg5F,GAAY,CAAA3rG,SAAC,YACd2S,eAACi5F,GAAa,CAAA5rG,UACJ,OAAP6lB,QAAO,IAAPA,OAAO,EAAPA,EAASmlC,cAAer4C,eAAC+4F,GAAM,CAAA1rG,SAAC,yBAKjCgtG,EAAenB,EACnBj5F,gBAACyhE,GAAe,CAAC03B,YAAY,EAAMF,UAAWA,EAAU7rG,SAAA,CACtD2S,eAAC64F,GAAU,CACThwE,UAAU,EACVy6C,cAAc,EACdx7E,MAAM,eACNy7E,cAAe,IACf/wC,SAAUknE,EACVzqF,QAASgrF,EACTr2B,YAAY,eACZb,iBAAiB,EACjBryD,MAAOypF,GAAsB,KAC7Bt6F,OAAQC,EACR+jE,OAAQy1B,GAAeE,KAExBA,EACCx5F,eAACU,GAAiB,CAAArT,SAChB2S,eAACq5F,GAAK,CAAAhsG,SAAC,4BAEP,QAGN4S,gBAACyhE,GAAe,CAAC03B,YAAY,EAAMF,UAAWA,EAAU7rG,SAAA,CACtD2S,eAACg5F,GAAY,CAAA3rG,SAAC,UACd2S,eAACi5F,GAAa,CAAA5rG,UACN,OAAL6K,QAAK,IAALA,OAAK,EAALA,EAAOk4E,YAAapwE,eAAC+4F,GAAM,CAAA1rG,SAAC,uBAKnC,OACE4S,gBAAA,OACEL,UAAWA,EACX,cAAaE,EACb,wBAAsB,OAAMzS,SAAA,CAE5B2S,eAAC0hE,GAAe,CAAC03B,YAAY,EAAOF,UAAWA,EAAU7rG,SACvD2S,eAAC84F,GAAY,CACXrwE,SAAUoxE,EACVx3D,YAAa62D,EACb52D,aAActiC,eAAC2iC,GAAK,CAAAt1C,SAAC,gBACrBe,KAAK,iBACLokC,SAAUonE,EACVr3D,kBAAkB,EAClB1iC,OAAQC,MAGX+5F,GAAyBC,EAAej/F,OAASu/F,EAAiB,KAClEP,EAAsBQ,EAAe,KACrCR,EACC75F,eAAC0hE,GAAe,CAAC03B,YAAY,EAAOF,UAAWA,EAAU7rG,SACvD4S,gBAACuyE,GAAM,CAAC0mB,UAAWA,EAAU7rG,SAAA,CAC3B4S,gBAAA,OAAA5S,SAAA,CACE2S,eAAC2iC,GAAK,CAAAt1C,UACG,OAANgL,QAAM,IAANA,OAAM,EAANA,EAAQY,SAAU7I,GACf,uBACA,kBAEN4P,eAACm+C,GAAS,CACRt9C,QAASwrD,GAAgB,2BACzBrtD,OAAO,sCACP5Q,KAAK,0BACLyR,OAAQC,OAGZE,eAAA,OAAA3S,UAAY,OAANgL,QAAM,IAANA,OAAM,EAANA,EAAQrP,cAAegX,eAAC+4F,GAAM,CAAA1rG,SAAC,qBAGvC,OACA,ECjSV,MAAM4wD,GAAc3/C,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,gBAAZH,CAAY,iCACrBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAwC5B6vE,OA3BCjhG,IAMF,IANG,UACfuG,EAAS,QACTiB,EAAO,SACPi9C,EAAQ,UACRM,EAAS,OACTv+C,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,aAC5B,OACEG,eAACw9C,GAAgB,CACfG,aAAcG,EACdL,eAAgBz9C,eAACu/B,GAAY,CAAC1+B,QAASA,EAAShB,OAAQC,IACxD49C,iBAAiB,MACjB3wB,KAAMqxB,EACNv+C,OAAQC,EACR89C,cAAc,QACdC,eACE79C,eAACi+C,GAAW,CACVr+C,UAAWA,EACX,iBAAAG,OAAgBD,EAAU,YAC1BhL,KAAK,yBAGT,EClCN,MAAMylG,GAAOj8F,aAAOihC,IAAa/gC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,eAApBH,CAAoB,6CACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QACpC5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG/DiwE,GAAel8F,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAATH,CAAS,mBAGxBm8F,GAAan8F,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAbH,CAAa,oEAIjBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KA6GzC6vE,I,MAAAA,GA9FSrhG,IAQV,IARW,UACvBuG,EAAS,UACTs5F,EAAS,WACTyB,EAAU,SACVC,EAAQ,OACRC,EAAM,SACN3sF,EAAQ,OACRrO,EAAS,UACHxG,EACN,MAAO+kD,EAAWC,GAAgBruC,oBAAS,IACrC,WAAEsL,GAAeP,KACjB+/E,EAAW7tF,oBAAUiB,GACrBpO,EAAU,GAAAC,OAAMF,EAAM,KAAAE,OAAI+6F,EAAQ,uBAqCxC,OACE96F,eAACs6F,GAAO,CACN16F,UAAWA,EACXiB,QACEb,eAACu6F,GAAI,CACH15F,QACEZ,gBAAA,MAAI,iBAAAF,OAAgBD,EAAU,YAAWzS,SAAA,CACvC2S,eAACw6F,GAAY,CAAAntG,SACX2S,eAACy6F,GAAU,CACTp+E,QApChB,SAAqBxS,GACnBw0C,GAAa,GACb/iC,EAAW,CACTxzB,MAAM,GAADiY,OAAK+6F,EAAQ,4BAClBpqF,MAAO,YAETmqF,EAAOhxF,EACT,EA8BgB,iBAAA9J,OAAgBD,EAAU,gBAAezS,SAC1C,WAIF6rG,EACCl5F,eAACw6F,GAAY,CAAAntG,SACX2S,eAACy6F,GAAU,CACTp+E,QApClB,SAAyBxS,GACvBw0C,GAAa,GACb/iC,EAAW,CACTxzB,MAAM,GAADiY,OAAK+6F,EAAQ,iCAClBpqF,MAAO,YAETiqF,EAAW9wF,EACb,EA8BkB,iBAAA9J,OAAgBD,EAAU,qBAAoBzS,SAC/C,gBAID,KACJ2S,eAACw6F,GAAY,CAAAntG,SACX2S,eAACy6F,GAAU,CACTp+E,QApChB,SAAuBxS,GACrBw0C,GAAa,GACb/iC,EAAW,CACTxzB,MAAM,GAADiY,OAAK+6F,EAAQ,8BAClBpqF,MAAO,YAETkqF,EAAS/wF,EACX,EA8BgB,iBAAA9J,OAAgBD,EAAU,kBAAiBzS,SAC5C,qBAMPwS,OAAQi7F,IAGZh9C,SAzEJ,SAAuBS,GACrBF,EAAaE,GACbjjC,EAAW,CACTxzB,MAAM,GAADiY,OAAK+6F,EAAQ,uBAClBpqF,MAAO6tC,EAAW,QAAU,UAEhC,EAoEIH,UAAWA,EACXv+C,OAAQC,GACR,ECpHN,MAAMi7F,GAAkBz8F,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,gBAATH,CAAS,wBAG3BuuF,GAAavuF,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAATH,CAAS,sCAItB08F,GAAmB18F,aAAOsrB,IAAYprB,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAAnBH,CAAmB,+EAEhCI,GAAK,eAAAqB,OAAmBrB,EAAMC,MAAM2C,OAAO2a,IAAIC,aAKvDxd,IACA,GAAIA,EAAMu8F,UACR,OAAOzzE,aAAGC,QAAAC,aAAA,sCAGZ,IAGEwzE,GAAyB58F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,gBAAVH,CAAU,qBAGrCI,IACA,GAAIA,EAAMu8F,UACR,OAAOzzE,aAAGM,QAAAJ,aAAA,sCAGZ,IAGEyzE,GAAiB78F,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAbH,CAAa,oDACrBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAC3Cf,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAEpDuwE,GAAkB98F,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,gBAARH,CAAQ,gCAI1B+8F,GAAS/8F,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAAXH,CAAW,8FAEfI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAI2W,UAMrC0oE,GAAeh9F,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAbH,CAAa,wNAKhBI,GAASA,EAAMC,MAAM0pB,QAAQC,OAAOhpB,KAOlCZ,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIsO,MAE5C8wE,IACY38F,GAAUA,EAAMw6F,UAAY,UAAY,WAKtDqC,GAAiBj9F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAVH,CAAU,iDAwElBk9F,OAnDaniG,IAMd,IANe,UAC3BuG,EAAS,UACTs5F,EAAS,mBACTuC,EAAkB,YAClBptF,EAAW,OACXxO,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,2BAC5B,OACEG,eAAC+6F,GAAe,CAACn7F,UAAWA,EAAW,cAAaE,EAAWzS,SAC5D2+B,iBAAO3d,GAAaE,GAAKA,EAAEngB,KAAKlH,gBAAekR,KAAI6yB,IAClD,MAAMhqB,EACJhB,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACg7F,GAAgB,CACf5xE,QAAS6B,EAAW78B,KACpB6sG,WAAYhwE,EAAWpjC,GACvBwY,IAAK4qB,EAAWM,YAChB1rB,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIkrB,EAAWpjC,MAEtCoY,gBAACi7F,GAAsB,CACrBD,UAAW,UAAUx/E,KAAKwP,EAAW3hC,MAAMpC,eAC3C,wBAAsB,OAAMmG,SAAA,CAE5B2S,eAACm7F,GAAc,CAAA9tG,SAAE49B,EAAW78B,OAC5B4R,eAACo7F,GAAe,CAAA/tG,SAAE49B,EAAW3hC,WAE/B0W,eAACq7F,GAAM,CAAAhuG,SAAC,cAGZ,OACE2S,eAAC6sF,GAAU,CAAAx/F,SACR6rG,EACCl5F,eAACs7F,GAAY,CACXpC,UAAWA,EACX78E,QAASxS,GACP4xF,GAAsBA,EAAmB,CAAE5xF,IAAGohB,eAEhD,wBAAAlrB,OAAuBkrB,EAAWve,MAAK,WAAUrf,SAEhD4T,IAGHjB,eAACu7F,GAAc,CAAAluG,SAAE4T,KAZJgqB,EAAWve,MAcf,KAGD,EChJtB,MAAMgvF,GAAWp9F,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAZH,CAAY,mBAGvBkC,GAAYlC,aAAOskE,KAAW1rB,QAAO14C,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAzBH,CAAyB,mCAEnCo9F,IAKFn/E,GAAiBje,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,gBAAXH,CAAW,oEAK5Bq9F,GAAkBr9F,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAXH,CAAW,aAiBpBs9F,OAbiBl9F,GAG5BsB,eAACQ,GAAS,IAAK9B,EAAKrR,SAClB4S,gBAACsc,GAAc,CAAAlvB,SAAA,CACb2S,eAAC27F,GAAe,CAAAtuG,SAAEqR,EAAMrR,WAExB2S,eAAC07F,GAAQ,CAAC5mG,KAAK,OAAO+K,OANT,mCCZrB,MAAMg8F,GACJxtF,GAEAA,EAAYjW,KAAIw+C,IAAC,CACf9uD,MAAO8uD,EAAElqC,MACTgE,MAAOkmC,EAAElqC,MACTmvB,UAAU,MAIRr7B,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAVH,CAAU,8BAChBI,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG/DoY,GAAQrkC,KAAOxW,MAAK0W,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAAZH,CAAY,6CA8GXw9F,OA5FUziG,IAOX,IAPY,cACxB0iG,EAAa,UACbn8F,EAAS,mBACTo8F,EAAkB,oBAClBC,EAAmB,YACnB5tF,EAAW,OACXxO,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,uBAC5B,OACEI,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD2S,eAAC2iC,GAAK,CAAAt1C,SAAC,qBACP2S,eAAC6kE,GAAQ,CACPjC,WAAY,CACVD,kBAAmBA,IAAM,KACzBzrB,OAAQ0kD,IAEV9zG,MAAM,mBACN+gC,UAAU,EACVu6C,aAAa,EACbC,SAAS,EACTC,cAAc,EACdC,cAAe,GACfG,cAAeu4B,EACft4B,eAAgBq4B,EAChB/sF,QAAS4sF,GAAcE,GACvBn4B,YAAY,yBACZb,iBAAiB,EACjBljE,OAAQC,EACR4Q,MAAOmrF,GAAcxtF,GACrBw1D,OAAQ,CACNjoC,OAAQA,CACNsoC,EACAnuE,KAAqD,IAElDmuE,EACH1nC,WAAYzmC,EAAO44B,WACfoI,GAAaz1B,OAAO2a,IAAIob,WACxBthC,EAAO8sE,UACP9rC,GAAaz1B,OAAOo6B,SAASE,OAAO3T,MACpC,cACJ5mB,MAAO01B,GAAaz1B,OAAO2a,IAAIC,UAC/BimB,SAAU,SACVX,QAAS,YAEX8iC,eAAiBJ,IACR,IACFA,EACHK,WAAY,aACZ23B,SAAU,gBACVC,UAAW,OACXC,UAAW,WAGfC,oBAAsBn4B,IACb,IACFA,EACHjxC,QAAS,UAGbqpE,gBAAkBp4B,IAAiC,IAC9CA,EACH/hC,SAAU,SACV9gC,MAAO01B,GAAaz1B,OAAO2a,IAAIC,UAC/BqgF,WAAY,EACZC,cAAe,EACfC,YAAa,EACbC,WAAY,WAEdC,WAAaz4B,IACJ,IACFA,EACH1nC,WAAY,OACZgF,QAAS,UACTk7D,WAAY,eAGhBE,iBAAmB14B,IAAiC,IAC/CA,EACH7iE,MAAO01B,GAAaz1B,OAAO2a,IAAIC,UAC/BslB,QAAS,QACT,SAAU,CACRxqC,gBAAiB+/B,GAAaz1B,OAAO2a,IAAI2W,QACzCvxB,MAAO01B,GAAaz1B,OAAO2a,IAAIqO,cAK7B,ECpIhB,MAAMuyE,GAAkBv+F,KAAOi3C,MAAK/2C,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAAZH,CAAY,gEAEjBI,GAASA,EAAMC,MAAM0pB,QAAQC,OAAO/oB,KACjDb,GAASA,EAAMC,MAAM2C,OAAO4mB,SAuCnB40E,I,GAAAA,GAxBGzjG,IAQJ,IARK,UACjBuG,EAAS,GACT/X,EAAE,OACFk1G,EAASA,KAAM,MAAI,SACnBvqE,EAAQ,YACRoxC,EAAW,MACXlzD,EAAK,OACL7Q,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,eAC5B,OACEG,eAAC68F,GAAe,CACdj9F,UAAWA,EACX,cAAaE,EACbjY,GAAIA,EACJk1G,OAAQA,EACRvqE,SAAUA,EACVoxC,YAAaA,EACb5oE,KAAK,OACL0V,MAAOA,GACP,EChBN,MAAMlQ,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAAVH,CAAU,sEACbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAKlDrO,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,eAAbH,CAAa,qIAETI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAM/D+vE,GAAUh8F,aAAOo8F,IAAgBl8F,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,eAAvBH,CAAuB,yBAGjC0+F,GAAc1+F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAVH,CAAU,6CAKxB2+F,GAAkB3+F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAVH,CAAU,aAG5BqkC,GAAQrkC,KAAOxW,MAAK0W,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAAZH,CAAY,sDAMpBgL,GAAOhL,aAAO86D,IAAW56D,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,eAAlBH,CAAkB,uCAIzB4+F,GAAc5+F,aAAOk6F,IAAkBh6F,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAzBH,CAAyB,uCAIvCosB,GAAOpsB,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,eAATH,CAAS,iDAELI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAGtD09F,GAAY7+F,aAAOw+F,IAAUt+F,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAAjBH,CAAiB,uCACvBI,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAC9BrB,EAAM0+F,iBACF1+F,EAAMC,MAAM2C,OAAO2a,IAAI2W,QACvBl0B,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAK3B8yE,GAAQ/+F,aAAOw9F,IAAiBt9F,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,gBAAxBH,CAAwB,6CAKlCI,IACA,GAAIA,EAAM4+F,oBACR,OAAO91E,aAAGC,QAAAC,aAAA,0DACEhpB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GACjCZ,EAAMC,MAAM2C,OAAO2a,IAAI2W,QAE/B,IAGE2qE,GAAcj/F,aAAOk9F,IAAoBh9F,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAA3BH,CAA2B,oEAQzC+6F,GAAQ/6F,KAAOi/B,OAAM/+B,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,gBAAbH,CAAa,iFAChBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAI2W,UAG1Bl0B,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UA6L7Cg+F,I,MAAAA,GA9IMnkG,IAkCP,IAlCQ,iBACpBokG,EAAgB,YAChBpkC,EAAW,WACXC,EAAU,QACVokC,EAAO,UACP99F,EAAS,MACT1H,EAAK,OACL+a,EAAM,iBACN0qF,EAAgB,cAChBnE,EAAa,gBACbC,EAAe,oBACf6D,EAAmB,iBACnBF,EAAgB,UAChBlE,EAAS,eACT/qF,EAAc,eACdyvF,EAAc,iBACdC,EAAgB,WAChBlD,EAAU,aACVlC,EAAY,mBACZuD,EAAkB,SAClBpB,EAAQ,OACRC,EAAM,mBACNY,EAAkB,cAClB/B,EAAa,gBACbC,EAAe,gBACfC,EAAe,oBACfqC,EAAmB,QACnB/oF,EAAO,SACPF,EAAQ,iBACRJ,EAAgB,OAChBva,EAAM,YACNgW,EAAW,SACXH,EAAQ,OACRrO,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kBAEtBi+F,EAAuBzuF,mBAC3B,IAAM0uF,uBAAaJ,EAAkBtvF,EAAa,UAClD,CAACA,EAAasvF,IAGhB,OACE19F,gBAACO,GAAS,CACR,kBAAgB,oBAChBZ,UAAWA,EACX,cAAaE,EAAWzS,SAAA,CAExB4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL4S,gBAAC+8F,GAAW,CAAC,wBAAsB,OAAM3vG,SAAA,CACtC6rG,EACCl5F,eAACk9F,GAAW,CACV7jC,YAAaA,EACbC,WAAYA,EACZm/B,aAAcA,EACd54F,OAAQC,IAGVE,eAACsJ,GAAI,CACH+vD,YAAaA,EACbC,WAAYA,EACZz5D,OAAQC,IAGXo5F,EACCj5F,gBAACg9F,GAAe,CAAA5vG,SAAA,CACd4S,gBAAC0iC,GAAK,CAACqT,QAAQ,kBAAiB3oD,SAAA,CAC9B2S,eAAA,QAAMJ,UAAU,iBAAgBvS,SAAC,cACjC2S,eAACm9F,GAAS,CACRC,iBAAkBA,EAClBv1G,GAAG,kBACHk1G,OAAQa,EACRprE,SAAUqrE,EACVj6B,YAAY,YACZ/jE,OAAQC,EACR4Q,MAAOxC,GAAY,QAGtBkvF,EACCp9F,eAACU,GAAiB,CAAArT,SAChB2S,eAACq5F,GAAK,CAAAhsG,SAAC,+BAEP,QAGN2S,eAAC0qB,GAAI,CAAAr9B,SAAE6gB,OAGVwvF,EACC19F,eAACs6F,GAAO,CACNpB,UAAWA,EACXyB,WAAYA,EACZC,SAAUA,EACVC,OAAQA,EACR3sF,SAAUA,EACVrO,OAAQC,IAER,QAENE,eAACu5F,GAAuB,CACtBrhG,MAAOA,EACP+a,OAAQA,EACRumF,cAAeA,EACfC,gBAAiBA,EACjBP,UAAWA,EACX/qF,eAAgBA,EAChBurF,cAAeA,EACfC,gBAAiBA,EACjBC,gBAAiBA,EACjB1mF,QAASA,EACTF,SAAUA,EACVJ,iBAAkBA,EAClBva,OAAQA,EACRwH,OAAQC,IAETo5F,EACCl5F,eAACq9F,GAAK,CACJtB,cAAe+B,EACfR,oBAAqBA,EACrBtB,mBAAoBA,EACpBC,oBAAqBA,EACrB5tF,YAAaovF,EACb59F,OAAQC,IAER,KACJE,eAACu9F,GAAW,CACVrE,UAAWA,EACXuC,mBAAoBA,EACpBptF,YAAa2d,iBAAO,IAAIyxE,KAAqBpvF,IAAcE,GACzDA,EAAEngB,KAAKlH,gBAET2Y,OAAQC,IAETo5F,GAAaoE,EACZt9F,eAACU,GAAiB,CAAArT,SAChB2S,eAACq5F,GAAK,CAAAhsG,SAAC,mCAEP,OACM,EC9QhB,MAAM2wG,GAAO1/F,KAAOuzB,KAAIrzB,WAAA,CAAAxV,YAAA,oBAAAyV,YAAA,cAAXH,CAAW,yEAMlB2/F,GAAe3/F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,cAAVH,CAAU,+DAQzB4/F,GAA0B5/F,aAAO2/F,IAAaz/F,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,cAApBH,CAAoB,kEAK9CqkC,GAAQrkC,KAAOxW,MAAK0W,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,cAAZH,CAAY,sDAMpBgL,GAAOhL,aAAOk6F,IAAkBh6F,WAAA,CAAAxV,YAAA,oBAAAyV,YAAA,cAAzBH,CAAyB,uCAIhC2+F,GAAkB3+F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,cAAVH,CAAU,aAG5B6+F,GAAY7+F,aAAOw+F,IAAUt+F,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,cAAjBH,CAAiB,0CACvBI,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAIjE7rB,IACA,GAAIA,EAAM0+F,iBACR,OAAO51E,aAAGC,QAAAC,aAAA,0DACEhpB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GACjCZ,EAAMC,MAAM2C,OAAO2a,IAAI2W,QAE/B,IAGEurE,GAAU7/F,aAAOi7F,IAAwB/6F,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,cAA/BH,CAA+B,aAGzC++F,GAAQ/+F,aAAOw9F,IAAiBt9F,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,cAAxBH,CAAwB,oBAGlCI,IACA,GAAIA,EAAM4+F,oBACR,OAAO91E,aAAGM,QAAAJ,aAAA,0DACEhpB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GACjCZ,EAAMC,MAAM2C,OAAO2a,IAAI2W,QAE/B,IAGE2qE,GAAcj/F,aAAOk9F,IAAoBh9F,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,cAA3BH,CAA2B,oEAQzC+6F,GAAQ/6F,KAAOi/B,OAAM/+B,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,eAAbH,CAAa,iFAChBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAI2W,UAG1Bl0B,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAuI7C4+F,OArGK/kG,IA2BN,IA3BO,iBACnBokG,EAAgB,YAChBpkC,EAAW,WACXC,EAAU,UACV15D,EAAS,MACT1H,EAAK,OACL+a,EAAM,iBACN0qF,EAAgB,cAChBnE,EAAa,gBACbC,EAAe,oBACf6D,EAAmB,iBACnBF,EAAgB,eAChBQ,EAAc,iBACdC,EAAgB,mBAChB7B,EAAkB,cAClBtC,EAAa,gBACbC,EAAe,aACflB,EAAY,gBACZmB,EAAe,oBACfqC,EAAmB,QACnB/oF,EAAO,SACPF,EAAQ,iBACRJ,EAAgB,OAChBva,EAAM,YACNgW,EAAW,SACXH,EAAQ,OACRrO,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kBAC5B,OACEI,gBAAC+9F,GAAI,CAACp+F,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CAClD2S,eAAA,UAAQJ,UAAU,iBAAgBvS,SAAC,sBACnC4S,gBAACg+F,GAAY,CAAA5wG,SAAA,CACX2S,eAACsJ,GAAI,CACH+vD,YAAaA,EACbC,WAAYA,EACZm/B,aAAcA,EACd54F,OAAQC,IAEVG,gBAACg9F,GAAe,CAAA5vG,SAAA,CACd4S,gBAAC0iC,GAAK,CAACqT,QAAQ,kBAAiB3oD,SAAA,CAC9B2S,eAAA,QAAMJ,UAAU,iBAAgBvS,SAAC,cACjC2S,eAACm9F,GAAS,CACRC,iBAAkBA,EAClBv1G,GAAG,kBACHk1G,OAAQa,EACRprE,SAAUqrE,EACVj6B,YAAY,YACZ/jE,OAAQC,EACR4Q,MAAOxC,GAAY,QAGtBkvF,EACCp9F,eAACU,GAAiB,CAAArT,SAChB2S,eAACq5F,GAAK,CAAAhsG,SAAC,+BAEP,WAGR2S,eAACi+F,GAAY,CAAA5wG,SACX2S,eAACm+F,GAAO,CACNjmG,MAAOA,EACP+a,OAAQA,EACRumF,cAAeA,EACfC,gBAAiBA,EACjBP,WAAW,EACXQ,cAAeA,EACfC,gBAAiBA,EACjBC,gBAAiBA,EACjB1mF,QAASA,EACTF,SAAUA,EACVJ,iBAAkBA,EAClBva,OAAQA,EACRwH,OAAQC,MAGZG,gBAACi+F,GAAuB,CAAA7wG,SAAA,CACtB2S,eAACq9F,GAAK,CACJtB,cAAe4B,EACfL,oBAAqBA,EACrBtB,mBAAoBA,EACpBC,oBAAqBA,EACrB5tF,YAAaovF,EACb59F,OAAQC,IAEVE,eAACu9F,GAAW,CACVlvF,YAAa2d,iBAAO,IAAIyxE,KAAqBpvF,IAAcE,GACzDA,EAAEngB,KAAKlH,gBAET2Y,OAAQC,IAETw9F,EACCt9F,eAACU,GAAiB,CAAArT,SAChB2S,eAACq5F,GAAK,CAAAhsG,SAAC,mCAEP,UAED,EChOX,MAAMmT,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,gBAAVH,CAAU,kEAKtB+/F,GAAU//F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,gBAAVH,CAAU,uHASpBqqB,GAASrqB,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,2CAAAyV,YAAA,gBAAbH,CAAa,+BAItBggG,GAAgBhgG,aAAOqqB,IAAOnqB,WAAA,CAAAxV,YAAA,kDAAAyV,YAAA,gBAAdH,CAAc,gBACzBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAErCoiF,GAAejgG,aAAOqqB,IAAOnqB,WAAA,CAAAxV,YAAA,iDAAAyV,YAAA,gBAAdH,CAAc,gBACxBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QA2C5B+zE,OA9B0BnlG,IAO3B,IAP4B,UACxCuG,EAAS,QACTiB,EAAO,KACPzS,EAAI,SACJoiF,EAAQ,UACRiuB,EAAS,OACT5+F,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,KAAAE,OAAI3R,EAAI,yCACpC,OACE6R,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD2S,eAAA,UAAA3S,SAASwT,IACTZ,gBAACo+F,GAAO,CAAAhxG,SAAA,CACN2S,eAACs+F,GAAa,CACZjiF,QAASoiF,EACT,iBAAA1+F,OAAgBD,EAAU,mBAAkBzS,SAC7C,QAGD2S,eAACu+F,GAAY,CACXliF,QAASm0D,EACT,iBAAAzwE,OAAgBD,EAAU,kBAAiBzS,SAC5C,YAIO,ECxDhB,MAAMm5C,GAAOloC,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAATH,CAAS,wBAGhBogG,GAAYpgG,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAARH,CAAQ,sCAEtBkoC,IAIEm4D,GAAWrgG,KAAOkU,EAAChU,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAARH,CAAQ,sBACRI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtD89F,GAAcj/F,KAAOkU,EAAChU,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAARH,CAAQ,sBACXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAsF7Cm/F,OAvEoBvlG,IASrB,IATsB,OAClC0B,EAAS,UAAS,iBAClB0iG,EAAgB,UAChB79F,EAAS,mBACTslB,EAAkB,eAClB25E,EAAc,mBACdC,EAAkB,SAClB5wF,EAAQ,OACRrO,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mCACtBk/F,EAA6B,YAAXhkG,EAClBikG,EAA2BvB,EAAiBxsF,QAChDO,IAAMqtF,EAAevwF,MAAK2wF,GAAKA,EAAEvyF,QAAU8E,EAAE9E,UAEzCrR,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxD6jG,EACC,OAAL7jG,QAAK,IAALA,OAAK,EAALA,EAAQ,sCAEV,OACE4E,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CAChD6xG,GAAkCzB,EAAiB5iG,OAClDoF,gBAACy+F,GAAS,CAAArxG,SAAA,CAGL,2BACsB,IACzB2S,eAACu9F,GAAW,CAAAlwG,SACT2xG,EAAyB5mG,KAAImW,GAAKA,EAAE7B,QAAO8c,KAAK,QACpC,IAAI,iDAC4B,IAC/CvpB,gBAAC0+F,GAAQ,CAAAtxG,SAAA,CAAE6gB,EAAS,UAEpB,KACD2wF,EAAehkG,OAChBoF,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACwmC,GAAI,CAAAn5C,SACFwxG,EAAezmG,KAAImW,GAClBvO,eAAA,MAAA3S,SAAKkhB,EAAE7B,YAGXzM,gBAACy+F,GAAS,CAAArxG,SAAA,CACPwxG,EAAehkG,OAAS,EAAI,MAAQ,KAAK,oCAC5BqqB,EAAmB,8BAA4B,IAC5D65E,EAAkB,WAAa,UAAU,oDAI5C,KACHG,GAAoD,OAAlBJ,QAAkB,IAAlBA,KAAoBjkG,OACrDoF,gBAACy+F,GAAS,CAAArxG,SAAA,CAGL,2BACsB,IACzB2S,eAACu9F,GAAW,CAAAlwG,SACTyxG,EAAmB1mG,KAAImW,GAAKA,EAAE7B,QAAO8c,KAAK,QAC9B,IAAI,qDACgC,IACnDvpB,gBAAC0+F,GAAQ,CAAAtxG,SAAA,CAAE6gB,EAAS,UAEpB,KACJlO,eAAC0+F,GAAS,CAAArxG,SACP0xG,EACG,aACA,iDAEF,EC/FV,MAAMviF,GAASle,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAATH,CAAS,2GACPI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAGnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQkJ,OAmI7Cg3F,OArGc9lG,IAWf,IAXgB,UAC5BuG,EAAS,aACTw/F,EAAY,KACZjpE,EAAI,eACJkpE,EAAc,yBACdC,EAAwB,eACxBC,EAAc,gBACdC,EAAe,0BACfC,EAAyB,gBACzBC,EAAe,OACf7/F,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,4BACtB8/F,EAAqB,gBAATxpE,EAElB,IAAIn3B,EAAQ4gG,EA8EZ,MA7EyB,wBAAT,OAAZR,QAAY,IAAZA,OAAY,EAAZA,EAAcv3G,KAChBmX,EAAS,iCACT4gG,EACE5/F,eAACw+F,GAAgC,CAC/B39F,QACEb,eAAC4+F,GAA0B,CACzB7jG,OAAO,SACP0iG,iBAAkB2B,EAAa3B,iBAC/Bv4E,mBAAoBk6E,EAAal6E,mBACjC25E,eAAgBO,EAAaP,eAC7B3wF,SAAUkxF,EAAalxF,SACvBrO,OAAQC,IAGZ1R,KAAMgxG,EAAav3G,GACnB2oF,SAAU+uB,EACVd,UAAWiB,EACX7/F,OAAQC,KAIS,gCAAT,OAAZs/F,QAAY,IAAZA,OAAY,EAAZA,EAAcv3G,KACO,gCAAT,OAAZu3G,QAAY,IAAZA,OAAY,EAAZA,EAAcv3G,KAEdmX,EAAS2gG,EACP3/F,eAAAqyB,YAAA,CAAAhlC,SAAE,+BAEF,oCAEFuyG,EACE5/F,eAAC4+F,GAA0B,CACzB7jG,OAAO,UACP0iG,iBAAkB2B,EAAa3B,iBAC/Bv4E,mBAAoBk6E,EAAal6E,mBACjC25E,eAAgBO,EAAaP,eAC7BC,mBAAoBM,EAAaN,mBACjC5wF,SAAUkxF,EAAalxF,SACvBrO,OAAQC,KAIS,oCAAT,OAAZs/F,QAAY,IAAZA,OAAY,EAAZA,EAAcv3G,KACA,OAAZu3G,QAAY,IAAZA,KAAcn0E,WAEhB20E,EACE5/F,eAACw+F,GAAgC,CAC/B39F,QAAO,mCAAAd,OACLq/F,EAAaS,OAAS,0BAA4B,mBAAkB,KAEtEzxG,KAAMgxG,EAAav3G,GACnB2oF,SAAU3mE,GACRy1F,EAAyB,CACvBz1F,IACAohB,WAAYm0E,EAAan0E,aAG7BwzE,UAAW50F,GACT41F,EAA0B,CACxB51F,IACAohB,WAAYm0E,EAAan0E,aAG7BprB,OAAQC,IAGkB,6BAAT,OAAZs/F,QAAY,IAAZA,OAAY,EAAZA,EAAcv3G,MACvB+3G,EACE5/F,eAACw+F,GAAgC,CAC/B39F,QAAQ,6CACRzS,KAAMgxG,EAAav3G,GACnB2oF,SAAU6uB,EACVZ,UAAWe,EACX3/F,OAAQC,KAMZG,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CAChD2R,EAASgB,eAACwc,GAAM,CAAAnvB,SAAE2R,IAAmB,KACrC4gG,IACG,ECxFV,MAAMp/F,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,gBAAVH,CAAU,uFAGbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAGlDtO,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAVH,CAAU,2DAK3BwhG,GAAgBxhG,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAVH,CAAU,mDAGpBI,GAAUA,EAAMihG,UAAY,aAAe,aAEjDluE,GAAenzB,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAbH,CAAa,mEAClBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAErCzd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAIrCi0E,GAAejgG,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAbH,CAAa,kFAGvBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAIrC4jF,GAAgBzhG,KAAO2uC,EAACzuC,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAARH,CAAQ,iDAEnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAGrCiB,GAASptB,KAAOqtB,OAAMntB,WAAA,CAAAxV,YAAA,mBAAAyV,YAAA,gBAAbH,CAAa,oCAEVI,GAAUA,EAAMw6F,UAAY,IAAM,WAI9C8G,GAAc,CAClBvC,iBAAkB,GAClBpkC,YAAa,KACbC,WAAY,KACZphE,MAAO,KACPshG,eAAe,EACfC,iBAAiB,EACjB6D,qBAAqB,EACrBF,kBAAkB,EAClBlqF,QAAS,KACTN,kBAAkB,EAClBvE,YAAa,GACbH,SAAU,KACV+xF,qBAAsB,IAg1BTC,OAlzBE7mG,IAIiB,IAAD8mG,EAAA,IAJf,UAChBvgG,EAAS,KACTsH,EAAI,OACJrH,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,eACtB,WAAEyb,GAAeP,KACjB4kF,EAAYzuF,iBAAOhK,GACnBk5F,EAAaT,EAAY,cAAgB,cACzCxxF,EAAqB,OAAJjH,QAAI,IAAJA,OAAI,EAAJA,EAAMiH,eACvB2E,EAAuB,OAAJ5L,QAAI,IAAJA,OAAI,EAAJA,EAAM4L,iBACzBP,EAAqB,OAAJrL,QAAI,IAAJA,OAAI,EAAJA,EAAMqL,eAGvB9G,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDtQ,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxDe,EAAOiB,cAAapE,GAA6BA,EAAMmD,OACvD8oB,EAAqB7nB,cACxBpE,GAA6BA,EAAMsC,QAAQ2pB,sBAItC9a,KAAMwO,GAA0Bb,MAChC3N,KAAM+H,GAAmB8F,GAC/B,CAAEjd,KAAK,GAAD+E,OAAS,OAAJmH,QAAI,IAAJA,OAAI,EAAJA,EAAMkO,OAAM,SAASlO,UAC1B,OAAJA,QAAI,IAAJA,MAAMoL,eAAmB,OAAJpL,QAAI,IAAJA,KAAMqL,kBAG7BnI,KAAM4L,EACNuO,UAAW87E,GACT5yF,KACEkwF,EACJ0C,IAAkCrqF,EAC9B,GACAA,GACE5L,KAAMgC,GAAiBN,KACzBgE,EAAuBD,KACvBuC,EAAiC,OAArBwG,QAAqB,IAArBA,OAAqB,EAArBA,EAAuB3F,OACnCF,EAAmB1D,mBACvB,IACE4C,GAAS,CACPE,iBACAC,YACAlL,UAEJ,CAACA,EAAMkL,EAAWD,IAEd+lF,IAAeyH,IAEH,OAAZvzF,QAAY,IAAZA,KAAcyL,eACZ,OAAJ3Q,QAAI,IAAJA,OAAI,EAAJA,EAAMkO,WAAuB,OAAZhJ,QAAY,IAAZA,OAAY,EAAZA,EAAcyL,gBAC3B,OAAJ3Q,QAAI,IAAJA,OAAI,EAAJA,EAAMkO,WAA+B,OAApBtF,QAAoB,IAApBA,OAAoB,EAApBA,EAAsBsF,UAGrCi1B,EAAcC,4BACdg2D,EAAqB71D,uBAAY18B,GAAY,CACjD28B,UAAWA,KAETL,EAAYM,kBAAkB,CAAC,SAAS,IAGtC41D,EAA2B91D,uBAAY58B,GAAoB,CAC/D68B,UAAW81D,IAETn2D,EAAYM,kBAAkB,CAAC,UAE/BN,EAAYM,kBAAkB,CAC5B,QACA,CAAE3vC,KAAK,GAAD+E,OAAS,OAAJmH,QAAI,IAAJA,OAAI,EAAJA,EAAMkO,OAAM,YAInBlO,GACJu5F,GAAeD,EAAYnyF,YAC7B,IAGEspF,EAAuBltD,uBAAYj/B,GAAoB,CAC3Dk/B,UAAWg2D,IACTr2D,EAAYs2D,aAAa,iBAAiB,IAAMD,GAAgB,KAKlEt2F,KAAMyI,EACNuhC,UAAWwsD,GACT7oF,KAKJ,SAAS8oF,EAAYC,GACnBC,GAAoBD,EAASrD,kBAC7BuD,GAAeF,EAASznC,aACxB4nC,GAAcH,EAASxnC,YACvB4nC,EAASJ,EAAS5oG,OAClBipG,EAAiBL,EAAStH,eAC1B4H,EAAmBN,EAASrH,iBAC5B4H,EAAuBP,EAASxD,qBAChCgE,EAAoBR,EAAS1D,kBAC7BmE,EAAWT,EAAS5tF,SACpBsuF,GAAoBV,EAASluF,kBAC7B6tF,GAAeK,EAASzyF,aACxBozF,GAAYX,EAAS5yF,UACrBwzF,GAAwBZ,EAASb,qBACnC,CAEA,MAAM0B,EA1INz6F,KAEO,CACLu2F,iBAAkBuC,GAAYvC,iBAC9BpkC,aAAiB,OAAJnyD,QAAI,IAAJA,OAAI,EAAJA,EAAMmyD,cAAe2mC,GAAY3mC,YAC9CC,YAAgB,OAAJpyD,QAAI,IAAJA,OAAI,EAAJA,EAAMoyD,aAAc0mC,GAAY1mC,WAC5CphE,MAAO8nG,GAAY9nG,MACnBshG,cAAewG,GAAYxG,cAC3BC,gBAAiBuG,GAAYvG,gBAC7B6D,oBAAqB0C,GAAY1C,oBACjCF,iBAAkB4C,GAAY5C,iBAC9BlqF,QAAS8sF,GAAY9sF,QACrBN,kBAAsB,OAAJ1L,QAAI,IAAJA,OAAI,EAAJA,EAAMoL,aAAc0tF,GAAYptF,iBAClDvE,aAAiB,OAAJnH,QAAI,IAAJA,OAAI,EAAJA,EAAMmH,cAAe2xF,GAAY3xF,YAC9CH,SAAUgD,iBAAOhK,GAAQ84F,GAAY9xF,SAAWD,GAAoB/G,GACpE+4F,qBAAsBD,GAAYC,uBA2Hd2B,CAAgB16F,IAC/Bk2F,EAAkBkE,GAAuBtxF,oBAAS,IAClDstF,EAAqB+D,GAA0BrxF,oBAAS,IACxDypF,EAAiB2H,GAAsBpxF,oBAAS,IAChDwpF,EAAe2H,GAAoBnxF,oBAAS,IAE5CgD,EAAU6uF,GAAe7xF,mBAAkC,KAC3DiD,EAAQ6uF,GAAa9xF,mBAAgC,KACrDkD,EAASquF,GAAcvxF,mBAC5B2xF,EAAczuF,UAEThb,EAAOgpG,GAAYlxF,mBACxB2xF,EAAczpG,QAETG,EAAQ0pG,IAAa/xF,mBAA4C,OACjE4C,GAAkB4uF,IAAuBxxF,mBAC9C2xF,EAAc/uF,mBAETwsF,GAAc4C,IAAmBhyF,mBAG9B,OACHkpF,GAAW+I,IAAgBjyF,mBAAS2vF,IACpCzxF,GAAUuzF,IAAezxF,mBAC9B2xF,EAAczzF,WAETorD,GAAY2nC,IAAiBjxF,mBAClC2xF,EAAcroC,aAETD,GAAa2nC,IAAkBhxF,mBACpC2xF,EAActoC,cAEThrD,GAAaoyF,IAAkBzwF,mBAEpC2xF,EAActzF,cACTovF,GAAkBsD,IAAuB/wF,mBAE9C2xF,EAAclE,mBACTwC,GAAsByB,IAA2B1xF,mBAEtD2xF,EAAc1B,sBAqJhB,SAASpC,GAAiBh0F,GACxBA,EAAEyS,UACFmlF,GAAY53F,EAAEqjB,OAAOxc,MACvB,CAEA,SAASktF,GAAe/zF,GACtBA,EAAEyS,UAEE8gF,GACFkE,GAAqBz3F,EAAEqjB,OAAOxc,OAEhC4K,EAAW,CACTxzB,MAAM,GAADiY,OAAKqgG,EAAU,cACpB1vF,MAAM,wBAAD3Q,OAA0B8J,EAAEqjB,OAAOxc,QAE5C,CAEA,SAAS+nF,GAAan/B,EAAoBD,GACxC4nC,GAAc3nC,GACd0nC,GAAe3nC,GACf/9C,EAAW,CACTxzB,MAAM,GAADiY,OAAKqgG,EAAU,SACpB1vF,MAAM,WAAD3Q,OAAas5D,EAAW,KAAAt5D,OAAIu5D,EAAU,UAE/C,CAEA,SAASogC,GAAc79D,GACrB,MAAM3jC,EAAQ+a,EAAO3E,MAClBkE,GAAsBA,EAAEla,UAAYujC,EAASnrB,QAQhD,GAJI8oF,GACF2H,GAAkBjpG,GAGdA,EAAO,CAEXgpG,EAAShpG,GAET,MAAMgqG,EAAervF,EAAaG,SAAS1E,MACxC+E,GAAwBA,EAAEvB,YAAc5Z,EAAM4Z,YAUjD,GARAyvF,EAAWW,GAAgB,MAEvBzI,GACF2H,GAAoBc,GAKhBA,EAAc,CAElB,MAAMC,EAAgBtvF,EAAaI,OAAOhC,QACvCuB,GAAsBA,EAAEV,aAA0B,OAAZowF,QAAY,IAAZA,OAAY,EAAZA,EAAcpwF,aAEvDgwF,EAAUK,EACZ,CAGA,MAAM1uF,EAAgBlD,GAAuBrY,EAAMC,SACnD,GAAMsb,EAAe,CACnB,MACMC,EADmBzb,GAA4BC,GACLoW,MAC9CC,GAAKA,EAAE1mB,KAAO4rB,EAAc3d,WAExB4d,GACJquF,GAAUruF,EAEd,CACA4H,EAAW,CACTxzB,MAAM,GAADiY,OAAKqgG,EAAU,UACpB1vF,MAAM,YAAD3Q,OAAc7H,EAAMk4E,UAAS,WAEtC,CACF,CAEA,SAASupB,GAAgB99D,GACvB,MAAM3oB,EAAUF,EAAS1E,MACtB+E,GAAwBA,EAAEvB,YAAc+pB,EAASnrB,QAQpD,GAJI+oF,GACF2H,GAAoBluF,GAGhBA,EAAS,CAEbquF,EAAWruF,GAGXguF,EAAS,MACTa,GAAU,MAGNvI,GACF2H,GAAiB,GAInB,MAAMiB,EAAiBvvF,EAAaI,OAAOhC,QACxCuB,GAAsBA,EAAEV,YAAcoB,EAAQpB,YAEjDgwF,EAAUM,GAEV9mF,EAAW,CACTxzB,MAAM,GAADiY,OAAKqgG,EAAU,YACpB1vF,MAAM,YAAD3Q,OAAcmT,EAAQmlC,YAAW,aAE1C,CACF,CAEA,SAASuhD,GAAgB/vF,GACvBA,EAAEyS,UACFklF,IAAqB5uF,IACrB0I,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,mBACpB1vF,MAAM,mBAAD3Q,OAAsB6S,GAA0B,MAAP,OAElD,CAEA,SAASqpF,GACPoG,GAEA,MAAMC,EAA0BnuE,kBAC9BkuE,EAAmBjqG,KAAIoY,IACrB,MAAM+xF,EAA2B9E,GAAiBnvF,MAChDC,GAAKA,EAAE7B,QAAU8D,EAAEE,QAErB,GAAI6xF,EACF,OAAOA,EAGT,MAAMC,EAAY7E,EAAiBrvF,MAChCC,GAAuCA,EAAE7B,QAAU8D,EAAEE,QAExD,OAAI8xF,GAIG,IAAI,KAGfzB,GAAoBuB,GACpBhnF,EAAW,CACTxzB,MAAM,GAADiY,OAAKqgG,EAAU,wBACpB1vF,MAAM,2BAAD3Q,OAA6BuiG,EAC/BlqG,KAAImW,GAAKA,EAAE7B,QACX8c,KAAK,OAEZ,CAEA,SAASwyE,GAAmBtrF,GAE1B,MAAM+xF,EAAgB,CACpB/1F,MAAOgE,EACP6a,YAAa5B,iBAAOZ,IACpB36B,KAAMsiB,EACN/E,WACA9jB,GAAI,KACJ4pE,MAAO,GACPmb,YAAa,KACbC,SAAU,KACVC,wBAAwB,EACxBv/D,KAAM,GACNJ,cAAe,CAAC,IAChB7jB,MAAO,WAETy3G,IAAoB2B,GAAsB,IACrCA,EACHD,KAEFnnF,EAAW,CACTxzB,MAAM,GAADiY,OAAKqgG,EAAU,uBACpB1vF,MAAM,2BAAD3Q,OAA6B2Q,IAEtC,CAgJA,SAASiyF,GAAS94F,GAChB,MAAM+4F,EAA8Bv0F,GAAY4C,QAC9C4xF,IACG5C,GAAqB3xF,MAAKw0F,GAAWA,EAAQp2F,QAAUm2F,EAASn2F,UAE/Dq2F,EAAiB,IAClBtF,MACAmF,GAGCrwF,GAAsB,OAALra,QAAK,IAALA,OAAK,EAALA,EAAOI,UAAW,KACnCwa,GAA0B,OAAPI,QAAO,IAAPA,OAAO,EAAPA,EAASpB,YAAa,KACzCQ,EAAaM,GAEnBovF,GAAgB,CACdn6G,GAAG,GAADkY,OAAKqgG,EAAU,mBACjBlyF,YACAuvF,oBACAoB,eAAgBkE,EAAe9xF,QAAO1C,IAAMA,EAAE1mB,KAC9Ci3G,mBAAoBmB,GACpB/6E,uBAGFq7E,EAAyBh2D,OAAO,CAC9B9+B,cACAE,WACAD,OAAQ,CACN2tD,YAAaA,GACbC,WAAYA,GACZ/mD,iBACAO,mBACA3E,iBAAsB,OAAJjH,QAAI,IAAJA,MAAMiH,gBACxBiH,QAAY,OAAJlO,QAAI,IAAJA,OAAI,EAAJA,EAAMkO,SAAU,KACxB/G,YAAa00F,EACb70F,SAAUA,GACVvC,WACA2G,gBAIJgJ,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,GACV1vF,MAAM,cAGJivF,EACFkB,EAAYb,KAEZe,GAAoBf,GAAYvC,kBAChCiE,GAAwB1B,GAAYC,sBACpCgC,IAAa,GAEjB,CAtgBA7xF,qBAAU,KAEJktF,GACF+D,GAAwB,IAAI5D,MAAqBpvF,IAAaxT,OAChE,GACC,CAAC4iG,GAAkBH,EAAqBjvF,KAG3C+B,qBAAU,KACR,GAAIwwF,EAAuB,CACzB,MAAM,QACJ1tF,EAAO,MACPhb,EAAK,OACLG,EAAM,SACN2a,EAAQ,OACRC,GACEP,GAAsB,CACxBE,oBACAC,eACAC,mBACAP,iBACApE,iBACA4E,qBAEFwuF,EAAWruF,GACXguF,EAAShpG,GACT6pG,GAAU1pG,GACVwpG,EAAY7uF,GACZ8uF,EAAU7uF,EACZ,IACC,CACDV,EACAO,EACAC,EACA5E,EACAyyF,EACA/tF,EACAD,KA4eF,MAAMowF,IACC,OAAL3nG,QAAK,IAALA,OAAK,EAALA,EAAQ,8BACH,OAAJ6L,QAAI,IAAJA,KAAMiH,mBACF,OAAJjH,QAAI,IAAJA,GAAmB,QAAfi5F,EAAJj5F,EAAMuH,qBAAa,IAAA0xF,OAAf,EAAJA,EAAqBt4G,MAAOuU,EAAKvU,MAC1B,OAAJqf,QAAI,IAAJA,MAAMmH,YAAYC,MAAKC,GAAKA,EAAE1mB,KAAOuU,EAAKvU,OAEhD,OACEoY,gBAACO,GAAS,CACR,kBAAiBm/F,EAAY,qBAAuB,oBACpD//F,UAAWA,EACX,cAAaE,EAAWzS,SAAA,CAExB4S,gBAACsc,GAAc,CAAAlvB,SAAA,CACZsyG,EACC3/F,eAACo+F,GAAW,CACVX,iBAAkBA,GAClBpkC,YAAaA,GACbC,WAAYA,GACZphE,MAAOA,EACP+a,OAAQA,EACR0qF,iBAAkBA,EAClBnE,cAAeA,EACfC,gBAAiBA,EACjB6D,oBAAqBA,EACrBF,iBAAkBA,EAClBQ,eAAgBA,GAChBC,iBAAkBA,GAClBpF,aAAcA,GACduD,mBAAoBA,GACpBtC,cAAeA,GACfC,gBAAiBA,GACjBsC,oBAAqBA,GACrBrC,gBAAiBA,GACjB1mF,QAASA,EACTF,SAAUA,EACVJ,iBAAkBA,GAClBva,OAAQA,EACRgW,YAAaA,GACbH,SAAUA,KAGZlO,eAACw9F,GAAY,CACXC,iBAAkBA,GAClBpkC,YAAaA,GACbC,WAAYA,GACZphE,MAAOA,EACP+a,OAAQA,EACRyqF,QAASsF,GACTrF,iBAAkBA,EAClBnE,cAAeA,EACfC,gBAAiBA,EACjB6D,oBAAqBA,EACrBF,iBAAkBA,EAClBlE,UAAWA,GACX/qF,iBAAsB,OAAJjH,QAAI,IAAJA,MAAMiH,gBACxByvF,eAAgBA,GAChBC,iBAAkBA,GAClBlD,WA/gBV,SAAoB9wF,GAClBA,EAAEyS,UACFukF,EAAYb,IACZ1kF,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,cACpB1vF,MAAM,oBAAD3Q,OAAsB4hG,EAAczzF,SAAQ,YAErD,EAwgBUuqF,aAAcA,GACduD,mBAAoBA,GACpBpB,SA3fV,SAAkB/wF,GAChBA,EAAEyS,UACF0lF,GAAgB,CACdn6G,GAAG,GAADkY,OAAKqgG,EAAU,kBAEnB9kF,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,gBACpB1vF,MAAM,qBAAD3Q,OAAuBmO,KAEhC,EAkfU2sF,OA7hBV,SAAgBhxF,GACdA,EAAEyS,UACF2lF,IAAa,GACb3mF,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,SACpB1vF,MAAM,mBAAD3Q,OAAqBmO,KAE9B,EAshBUutF,mBA5QV,SAA2B3hG,GAMvB,IANwB,EAC1B+P,EAAC,WACDohB,GAIDnxB,EACsCuU,GAAYC,MAC/CC,GAAKA,EAAE1mB,KAAOojC,EAAWpjC,MAIzBm6G,GAAgB,CACdn6G,GAAG,GAADkY,OAAKqgG,EAAU,uBACjBP,OAAQ50E,EAAWpjC,KAAOuU,EAAKvU,GAC/BojC,eAEF3P,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,uBACpB1vF,MAAM,qBAAD3Q,OAAuBkrB,EAAWve,UAIzCq0F,IAAoB2B,GAClBA,EAAmBzxF,QAAO1C,GAAKA,EAAE7B,QAAUue,EAAWve,SAG5D,EAiPUgtF,cAAeA,GACfC,gBAAiBA,GACjBC,gBAAiBA,GACjBqC,oBAAqBA,GACrB/oF,QAASA,EACTF,SAAUA,EACVJ,iBAAkBA,GAClBva,OAAQA,EACRgW,YAAaA,GACbH,SAAUA,KAGbgrF,GACCj5F,gBAAC6/F,GAAa,CAACH,UAAWA,EAAUtyG,SAAA,CAClC2S,eAACyxB,GAAY,CACXpV,QA1LZ,SAAkBxS,GAChBA,EAAEyS,UAEF,MAAMsmF,EAA8Bv0F,GAAY4C,QAC9C4xF,IACG5C,GAAqB3xF,MAAKw0F,GAAWA,EAAQp2F,QAAUm2F,EAASn2F,UAE/Dq2F,EAAiB,IAClBtF,MACAmF,GAEL,IAAIK,IAAc/0F,MAAc60F,EAAeloG,OAE3C+X,KACFqwF,EAAYA,KAAe/qG,GAGzB+qG,EACEtD,GACFqC,GAAgB,CACdn6G,GAAG,GAADkY,OAAKqgG,EAAU,WACjBlyF,YACAuvF,oBACAoB,eAAgBkE,EAAe9xF,QAAO1C,IAAMA,EAAE1mB,KAC9Cq9B,uBAEF5J,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,WACpB1vF,MAAM,0BAAD3Q,OAA4BmO,OAGnCy0F,GAAS94F,IAGXy3F,GAAqBpzF,IACrBmzF,GAAwB0B,EAAeloG,QACnC+X,KACFwuF,GAAoBluF,GACpBiuF,GAAkBjpG,IAGxB,EAiJY,iBAAA6H,OAAgBqgG,EAAU,kBAAiB/yG,SAE1CsyG,EAAY,cAAgB,iBAE/B3/F,eAACu+F,GAAY,CACXliF,QAhiBZ,SAAsBxS,GACpBA,EAAEyS,UACF2lF,GAAatC,GACbkB,EAAYc,GACZrmF,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,gBACpB1vF,MAAM,6BAAD3Q,OACY,gBAAfqgG,EAA+B,WAAauB,EAAczzF,WAGhE,EAshBY,iBAAAnO,OAAgBqgG,EAAU,kBAAiB/yG,SAC5C,cAID,QAEN4S,gBAACyrB,GAAM,CAACwtE,UAAWA,GAAU7rG,SAAA,CACpB,OAAJ6Z,QAAI,IAAJA,KAAMuH,cACPxO,gBAAC8/F,GAAa,CAAC,wBAAsB,OAAM1yG,SAAA,CAAC,eAC7B6Z,EAAKuH,cAAcrgB,QAEhC,KACHuxG,EAAY,KACX3/F,eAACi4F,GAAgB,CACfC,UAAWA,EACXC,oBA9OV,SAA6BtuF,GAC3BA,EAAEyS,UAEFq7E,EAAqBptD,OAAO,CAC1B9+B,cACAE,WACAD,OAAQW,mBACN,CACEwL,cAAmB,OAAJ3Q,QAAI,IAAJA,OAAI,EAAJA,EAAMkO,QAEvBhJ,KAGJkP,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,iBACpB1vF,MAAM,wBAAD3Q,OAA0BmO,GAAQ,aAE3C,EA6NUA,SAAUA,GACVrO,OAAQA,OAIXu/F,GACDp/F,eAAC6wB,GAAK,CACJE,gBAAgB,uBAChBC,OAtlBR,WACEgxE,GAAgB,MAChB1mF,EAAW,CACTxzB,MAAM,kBAADiY,OAAoBq/F,GAAY,UACrC1uF,MAAM,UAAD3Q,OAAYq/F,KAErB,EAilBQ5xE,aACExtB,eAACm/F,GAAoB,CACnBC,aAAcA,GACdjpE,KAAMiqE,EACNf,eAtiBZ,SAAwBx1F,GACtBA,EAAEyS,UACF0lF,GAAgB,MAChB1mF,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,uBACpB1vF,MAAM,mBAAD3Q,OAAqBmO,KAE9B,EA+hBYoxF,yBA5QZ,SAAiC5xF,GAM7B,IAN8B,EAChC7D,EAAC,WACDohB,GAIDvd,EACCs0F,GAAgB,MAChB1mF,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,8BACpB1vF,MAAM,mBAAD3Q,OAAqBkrB,EAAWve,QAEzC,EAgQY6yF,eA9HZ,SAAwB11F,GACtBm4F,GAAgB,MAChB1mF,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,kBACpB1vF,MAAM,wBAAD3Q,OAA0BmO,KAEnC,EAwHYsxF,gBA/hBZxhG,eACE6L,GAEAA,EAAEyS,UACIpV,IACJo5F,EAAmB/1D,OACjB,CACE9+B,cACAE,WACAD,OAAQ,CACN0J,OAAQlO,EAAKkO,SAGjB,CACEs1B,UAAWA,KAGLwtD,GAAepoF,GACjB6nF,EAAqBptD,OAAO,CAC1B9+B,cACAE,WACAD,OAAQ,IACHU,EACHyL,cAAe/H,EAAqBsF,SAG1C,IAINkG,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,wBACpB1vF,MAAM,oBAAD3Q,OAAsBmO,MAE7B8zF,GAAgB,MAEpB,EA2fYvC,0BAvSZ,SAAkCzxF,GAM9B,IAN+B,EACjCnE,EAAC,WACDohB,GAIDjd,EACC0zF,IAAwBhqG,GAAW,IAAIA,EAASuzB,KAEhDw1E,IAAeiC,GACbA,EAAmBzxF,QAAO1C,GAAKA,EAAE7B,QAAUue,EAAWve,UAGxDq0F,IAAoB2B,GAClBA,EAAmBzxF,QAAO1C,GAAKA,EAAE7B,QAAUue,EAAWve,UAExD4O,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,+BACpB1vF,MAAM,oBAAD3Q,OAAsBkrB,EAAWve,SAExCs1F,GAAgB,KAClB,EAkRYtC,gBA7OZ,SAAyB71F,GACvByR,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKqgG,EAAU,mBACpB1vF,MAAM,yBAAD3Q,OAA2BmO,MAElCy0F,GAAS94F,EACX,EAuOYhK,OAAQC,IAGZD,OAAQA,IAER,OACM,EC56BhB,MAGM2c,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAbH,CAAa,sEAKtBw1F,GAAOx1F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAVH,CAAU,iBAGjBooE,GAAUpoE,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAVH,CAAU,iKAXL,GAkBHI,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAKjE24E,GAAc5kG,aAAO4hG,IAAS1hG,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,gBAAhBH,CAAgB,gFAIhBI,GAAK,GAAAqB,OAChBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAwCxD44E,OA3BiB9pG,IAKlB,IALmB,UAC/BuG,EAAS,OACTZ,EAAM,MACNhJ,EAAK,OACL6J,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,+BAC5B,OACEI,gBAAC6zF,GAAI,CAACl0F,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD2R,EAASgB,eAACwc,GAAM,CAAAnvB,SAAE2R,IAAmB,KACrChJ,EAAMoC,KAAI,CAAC0tC,EAAKvc,IACfvpB,eAAC0mE,GAAO,CAAAr5E,SACLy4C,EAAI1tC,KAAK8O,GAENlH,eAACkjG,GAAW,CAEVh8F,KAAMA,EACNrH,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAQ,OAAJmH,QAAI,IAAJA,OAAI,EAAJA,EAAMkO,UAFtB,OAAJlO,QAAI,IAAJA,OAAI,EAAJA,EAAMkO,SAAU,kBAKzB,OAAArV,OATiBwpB,QAYlB,ECxDX,MAGM/oB,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAVH,CAAU,qBAGtBw1F,GAAOx1F,aAAO6kG,IAAwB3kG,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAA/BH,CAA+B,6BAKtC8kG,GAAa9kG,KAAO2pC,GAAEzpC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAATH,CAAS,6CACbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WA0E7C6kE,OAhEahqG,IAA8C,IAA7C,UAAEuG,EAAS,OAAEC,EAAS,UAAiBxG,EAClE,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,0BACtBzD,EAAOiB,cAAapE,GAA6BA,EAAMmD,QACrDgO,KAAM8F,GAAwBT,MAC9BrF,KAAM+F,EAAQ,QAAE+jC,EAAO,UAAE3vB,GAAcvV,GAC7C,CACEhU,KAAM,YACNmU,sBAAyC,OAAnBe,QAAmB,IAAnBA,OAAmB,EAAnBA,EAAqB7B,cAAe,CAACjS,MAGvD,OAAJA,QAAI,IAAJA,MAAMvU,MAEHy7G,EAAe3iB,GAAa9uE,oBACjC1B,GACC5B,GAAqBA,EAAEJ,iBAG1B,OACEnO,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAACY,GAAa,CACZG,gBAAiBwjB,EACjBzjB,cAAeozC,EACflzC,cACEhB,eAACN,GAAU,CACTC,KAAK,0CACLX,OAAO,QACPa,OAAQA,IAGZgB,QACEZ,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACKi2G,EACDtjG,eAAC8zF,GAAI,CACH90F,OACEgB,eAACojG,GAAU,CAACv7G,GAAG,mBAAkBwF,SAAC,4BAIpC2I,MAAOw6C,gBAAM8yD,EA7DR,GA8DLzjG,OAAQC,IAER,KACD6gF,EACD3gF,eAAC8zF,GAAI,CACH90F,OACEiB,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACojG,GAAU,CAACv7G,GAAG,qBAAoBwF,SAAC,sBAGpC2S,eAACojG,GAAU,CAACv7G,GAAG,oBAAmBwF,SAAC,kBAGvC2I,MAAOw6C,gBAAM,CAAC,QAASmwC,GA3ElB,GA4EL9gF,OAAQC,IAER,QAGRD,OAAQC,KAEA,EC9FhB,MAAMyjG,GAAkBjlG,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAVH,CAAU,oEACvBI,GAASA,EAAM2C,OAAS3C,EAAMC,MAAM2C,OAAOu3B,KAAKl5B,OAC5CjB,GACXA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMX,EAAMgoD,OACtChoD,EAAMC,MAAMC,MAAMC,QAAQQ,MAAME,KACnBb,GACbA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQP,EAAM8kG,SACxC9kG,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAIlCd,GACAA,EAAM+kG,aAAW,6CAgENC,OA1DGrqG,IAUX,IAVY,SACjBhM,EAAQ,UACRuS,EAAS,MACTyB,EAAK,UACLsiG,GAAY,EAAK,YACjBF,GAAc,EAAK,KACnB/8C,EAAI,OACJ7mD,EAAM,OACN2jG,KACGpjG,GACJ/G,EACC,IAAKhM,IAAawS,EAChB,OAAO,KAGT,MAAMnB,EAAQ,IACT0B,EACHR,YACAyB,QACA,cAAc,GAADtB,OAAKF,EAAM,eACxB4jG,cACA/8C,OACA88C,UAGF,OACExjG,eAACujG,GAAe,IAAK7kG,EAAKrR,SACvBs2G,EACC3jG,eAACsnE,GAAW,CAACzrE,SAAS,SAASgE,OAAQA,EAAOxS,SAC3CA,IAGHA,GAEc,ECpDtB,MAAM0R,GAAeT,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,eAAVH,CAAU,4FACdI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAElCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQ2kG,YA4D5C38C,qBAtDO5tD,IAYf,IAZgB,SACrBhM,EAAQ,UACRuS,EAAS,MACTyB,EAAK,UACLsiG,GAAY,EAAK,OACjB3kG,EAAM,YACNykG,GAAc,EAAK,KACnB/8C,EAAI,MACJ59B,EAAK,OACLjpB,EAAM,MACNlB,EAAK,OACL6kG,GACDnqG,EACC,OAAKhM,GAAa2R,GAAWa,EAK3BG,eAACjB,GAAY,CACX8kG,GAAE,IAAA9jG,OAAMf,GACR,iBAAAe,OAAgBF,EAAM,WACtBipB,MAAOA,EAAMz7B,SAEb2S,eAAC0jG,GAAS,CACR9jG,UAAWA,EACXyB,MAAOA,GAAS1C,EAAM2C,OAAOu3B,KAAK0E,OAClComE,UAAWA,EACXF,YAAaA,EACb/8C,KAAMA,EACN7mD,OAAQA,EACR2jG,OAAQA,GAAU,YAAYn2G,SAE7BA,MAlBE,IAoBQ,ICNJy2G,I,eAAAA,GAtCUzqG,IAA0B,IAAzB,QAAE0qG,EAAO,OAAElkG,GAAQxG,EAC3C,OAAK0qG,GAAYlkG,EAKfI,gBAAA,OAAA5S,SAAA,CACE2S,eAACwc,GAAM,CACLxd,OAAO,IACP0nD,KAAK,KACL59B,MAAO,CAAEk7E,aAAc,QACvBnkG,OAAQA,EACR2jG,OAAO,OAAMn2G,SACd,WAGD2S,eAAC0jG,GAAS,CACRh9C,KAAK,KACL59B,MAAO,CAAEk7E,aAAc,QACvBnkG,OAAM,GAAAE,OAAKF,EAAM,kBAAiBxS,SAEjC02G,IAEH/jG,eAAC0jG,GAAS,CACRh9C,KAAK,KACL59B,MAAO,CAAEk7E,aAAc,QACvBnkG,OAAM,GAAAE,OAAKF,EAAM,mBAAkBxS,SACpC,kDAzBI,IA4BD,E,UCxBV,MAAMmvB,GAASle,KAAOkzC,GAAE/pB,QAAAC,aAAA,uDACPhpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAGtDwkG,GAAkB3lG,KAAO6vB,GAAErG,QAAAJ,aAAA,iDAK3BwvB,GAAS54C,aAAO8jC,GAAP9jC,CAAc0pB,QAAAN,aAAA,wHASvBw8E,GAAkB5lG,aAAO8gC,GAAP9gC,CAAgBkqB,QAAAd,aAAA,oCAGlCgkC,GAAOptD,aAAOogD,GAAPpgD,CAAgBoqB,QAAAhB,aAAA,gCA4Fdy8E,OA9E2B9qG,IAOP,IAPQ,UACzCuG,EAAS,OACTZ,EAAM,SACNwzB,EAAQ,QACRvjB,EAAO,SACPm1F,EAAQ,OACRvkG,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,yCACtBwkG,EAAgBC,GAShBC,EAA6BC,IACjC,MAAM,YAAEx7G,EAAW,WAAEy7G,EAAU,aAAEC,GAAiBL,EAAcG,GAE1DG,EAAuBnzF,GACd,IAAbA,EAAE3W,OACE2W,EAAE,GACF,CAACA,EAAE6a,MAAM,GAAI,GAAG7C,KAAK,MAAOhY,EAAE6a,OAAO,GAAG,IAAI7C,KAC1ChY,EAAE3W,OAAS,EAAI,GAAK,SAE5B,MAAM,kBAANkF,OAAyB/W,EAAW,gCAAA+W,OAA+B4kG,EACjEF,GACD,4CAAA1kG,OAA2C4kG,EAC1CD,GACD,eAGH,OACEzkG,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CAC9C2R,EAASgB,eAACwc,GAAM,CAAAnvB,SAAE2R,IAAmB,KACxCgB,eAAA,MAAA3S,SACG4hB,EAAQ7W,KAAIwsG,GACX5kG,eAACikG,GAAe,CAAA52G,SACd2S,eAACk3C,GAAM,CACLzuB,WAAY27E,EAASQ,GACrBtiE,aACEriC,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACKg3G,EAAcO,GAAWC,kBAC1B7kG,eAACkkG,GAAe,CACd7kE,SACEglE,EAAcO,GAAWC,kBAE3BhlG,OAAQC,IAGVE,eAAA,KAAA3S,SAAIg3G,EAAcO,GAAW57G,cAE/BgX,eAAC0rD,GAAI,CACH3wD,OAAO,QACP8F,QAAS0jG,EAA0BK,GACnCx2G,KAAI,GAAA2R,OAAK6kG,EAAS,eAClB/kG,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAI6kG,QAI/Bx2G,KAAI,GAAA2R,OAAK6kG,EAAS,WAClBhlG,UAAS,GAAAG,OAAK6kG,EAAS,WACvB/kG,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAI6kG,GACzBpyE,SAAUA,KACRA,EAASoyE,EAAU,EAErBpiE,eAAe,MACfD,kBAAkB,KA9BAqiE,SAmCtB,EC1GV,MAAME,GAAqD,CACzDztG,GACAA,GACAA,GACAA,GACAA,GACAA,GACAA,GACAA,IAEW0tG,GAA4D,CACvE1tG,IAEW2tG,GAAqD,CAChE3tG,GACAA,IAIImlB,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAbH,CAAa,yBAGtB2mG,GAAkB3mG,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAAVH,CAAU,8DAK5B4mG,GAAS5mG,aAAO6lG,IAAkC3lG,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAzCH,CAAyC,0BA8EzC6mG,OAhEU9rG,IAOG,IAPF,UACxBuG,EAAS,eACTwlG,EAAc,gCACdC,EAA+B,SAC/BjB,EAAQ,gBACRkB,EAAe,OACfzlG,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,uBACtB0lG,EAAuCl2F,mBAC3C,IACEg2F,EACIC,EACER,GACAU,qBACEV,GACAxtG,IAEJ,CAACD,KACP,CAACguG,EAAiCC,IAG9BG,EAAwCp2F,mBAC5C,IACEg2F,EACIN,GACA,CAAC1tG,KACP,CAACguG,IAGH,OACEplG,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CAAC,QACD2S,eAAA,KAAA3S,SAAG,UAAS,0CAEnB4S,gBAACglG,GAAe,CAAA53G,SAAA,CACd2S,eAACklG,GAAM,CACLlmG,OAAO,SACPwzB,SAAU4yE,EACVn2F,QAASs2F,EACTnB,SAAU/6F,eAAK+6F,EAAUmB,GACzB1lG,OAAO,wCAETG,eAACmkG,GAAiC,CAChCnlG,OAAO,eACPwzB,SAAU4yE,EACVn2F,QAASw2F,EACTrB,SAAU/6F,eAAK+6F,EAAUqB,GACzB5lG,OAAO,8CAERwlG,EACCrlG,eAACmkG,GAAiC,CAChCnlG,OAAO,OACPwzB,SAAU4yE,EACVn2F,QAAS+1F,GACTZ,SAAU/6F,eAAK+6F,EAAUY,IACzBnlG,OAAO,sCAEP,UAEF,ECxGV,MAAM6lG,GAA2D,CAC/DruG,GACAA,GACAA,GACAA,IAIImlB,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAAbH,CAAa,yBAkCbqnG,OAtBYtsG,IAKC,IALA,UAC1BuG,EAAS,eACTwlG,EAAc,SACdhB,EAAQ,OACRvkG,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,yBAC5B,OACEI,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CAAC,QACD2S,eAAA,KAAA3S,SAAG,iBAAgB,0CAE1B2S,eAACmkG,GAAiC,CAChC3xE,SAAU4yE,EACVn2F,QAASy2F,GACTtB,SAAU/6F,eAAK+6F,EAAUsB,IACzB7lG,OAAO,+CAEL,ECtCV,MAAM+lG,GAAqD,CACzDvuG,IAIImlB,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,gBAAbH,CAAa,yBAkCbunG,OAtBMxsG,IAKO,IALN,UACpBuG,EAAS,eACTwlG,EAAc,SACdhB,EAAQ,OACRvkG,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kBAC5B,OACEI,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CAAC,QACD2S,eAAA,KAAA3S,SAAG,UAAS,0CAEnB2S,eAACmkG,GAAiC,CAChC3xE,SAAU4yE,EACVn2F,QAAS22F,GACTxB,SAAU/6F,eAAK+6F,EAAUwB,IACzB/lG,OAAO,wCAEL,ECnCV,MAAMimG,GAAyD,CAC7DzuG,IAIImlB,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAbH,CAAa,yBAkCbynG,OAtBU1sG,IAKG,IALF,UACxBuG,EAAS,eACTwlG,EAAc,SACdhB,EAAQ,OACRvkG,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,sBAC5B,OACEI,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CAAC,QACD2S,eAAA,KAAA3S,SAAG,cAAa,0CAEvB2S,eAACmkG,GAAiC,CAChC3xE,SAAU4yE,EACVn2F,QAAS62F,GACT1B,SAAU/6F,eAAK+6F,EAAU0B,IACzBjmG,OAAO,4CAEL,ECvCH,MAAMmmG,GAAwB5wF,IACnC,MAAMzJ,EAAmBtO,cACtBpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDF,EAAsBpO,cACzBpE,GAA6BA,EAAM0B,KAAKoR,kBAGrCk6F,EAAa52F,mBAAQ,KAClB,CACL5D,cACAE,WACAD,OAAQ,CACNw6F,QAAS,CAAC9wF,OAGb,CAAC3J,EAAa2J,EAAQzJ,IAEnBw6F,EAAsB92F,mBAAQ,KAC3B,CACL5D,cACAE,WACAD,OAAQ,CACN06F,aAAc,CACZhxF,SACAgvF,SAAU,CACRrqE,aAAa,EACbssE,UAAU,QAKjB,CAAC56F,EAAa2J,EAAQzJ,IAEnB0+B,EAAcC,4BAEdg8D,EAAYr6F,oBAChB,CAAC,0BAA2Bg6F,IAC5B,IlTgDsCjoG,WAIM,IAJC,YAC/CyN,EAAW,SACXE,EAAQ,OACRD,GAC0BgC,EAS1B,aARuBpD,GAAI4B,IAAI,IAADnM,OACxB4L,EAAQ,yBAAA5L,OAAwB2L,EAAOw6F,QAAQ18E,KAAK,MACxD,CACE9e,QAAS,CACPmB,cAAc,UAAD9L,OAAY0L,OAIfrB,IAAI,EkT7DZm8F,CAA2BN,IACjC,CACEr4F,sBAAsB,EACtB7W,UAAW0U,KAAiBE,KAAcyJ,IAIxCoxF,EAAgB/7D,wBACnBg8D,GlTwDmCzoG,WAII,IAJG,YAC7CyN,EAAW,SACXE,EAAQ,OACRD,GACsB0F,EAUtB,aATuB9G,GAAIwD,KAAK,IAAD/N,OACzB4L,EAAQ,yBAAA5L,OAAwB2L,EAAO06F,aAAahxF,QAGxD,IAAK1J,EAAO06F,aAAchxF,YAAQta,GAClC,CACE4P,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAGxBrB,IAAI,EkTrEhBs8F,CAAyB,IACpBP,EACHz6F,OAAQ,CACN06F,aAAc,CACZhxF,SACAgvF,SAAUqC,OAIlB,CACE/7D,UAAWg2D,IACTr2D,EAAYM,kBAAkB,2BAC9BN,EAAYs2D,aACV,2BACA,IAAMD,GACP,IAKP,MAAO,CAAE4F,YAAWE,gBAAe,E,wFC1BrC,MAAMhmG,GAAYlC,KAAOC,IAAGkpB,QAAAC,aAAA,0DAItBmG,GAAUvvB,KAAOC,IAAGupB,QAAAJ,aAAA,mDACNhpB,GAAUA,EAAM2jC,WAAa,OAAS,SAC7C3jC,GAAUA,EAAM2jC,WAAa,MAAQ,MAE5CskE,GAAWroG,aAAO8gC,GAAP9gC,CAAgB0pB,QAAAN,aAAA,8CAI3Bk/E,GAA8BtoG,KAAOC,IAAGiqB,QAAAd,aAAA,oCAGxCm/E,GAAQvoG,aAAO0wE,GAAP1wE,CAA+BoqB,QAAAhB,aAAA,gCAGvCo/E,GAAYxoG,KAAOC,IAAG8oD,QAAA3/B,aAAA,iDAItBq/E,GAAazoG,KAAOC,IAAGgpD,QAAA7/B,aAAA,qDAEZhpB,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAEhD+S,GAAa7C,aAAOgL,GAAPhL,CAAYmpD,QAAA//B,aAAA,yFAEpBhpB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAKrCm1C,GAAW/yD,KAAO0vB,GAAE25B,QAAAjgC,aAAA,4EAIbhpB,GAAK,GAAAqB,OACXozB,KAAKm7C,KAAK5vE,EAAMsoG,aANQ,OASzBl4B,GAAiBxwE,KAAO6vB,GAAE05B,QAAAngC,aAAA,oCAG1BsiD,GAAa1rE,aAAOkrE,GAAPlrE,CAAqBypD,QAAArgC,aAAA,+BAGlCu/E,GAAa3oG,KAAOC,IAAG0pD,QAAAvgC,aAAA,6BAGvBw/E,GAAoB5oG,KAAOC,IAAG2pD,QAAAxgC,aAAA,iGACrBhpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAGrCnsB,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAE/D48E,GAAiB7oG,aAAO8gC,GAAP9gC,CAAgB6pD,QAAAzgC,aAAA,sEAG5BhpB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAErC28E,GAAW9oG,KAAOC,IAAG8pD,QAAA3gC,aAAA,uDAIrB2/E,GAAkB/oG,KAAOC,IAAGgqD,QAAA7gC,aAAA,2GACfhpB,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAC1D7rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAI2W,UAG5Bl0B,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElDy8E,GAAsBhpG,KAAOC,IAAGkqD,QAAA/gC,aAAA,uDAIhC6/E,GAAajpG,KAAOgpB,OAAMshC,QAAAlhC,aAAA,4LAChBhpB,GACZA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOgmB,OAAOC,SAASK,QAAQC,GAC3CnpB,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQA,QAAQC,KAEvCnpB,GACPA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOgmB,OAAOC,SAASK,QAAQO,GAC3CzpB,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQA,QAAQO,KAI1BzpB,GAClBA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOgmB,OAAOC,SAASU,MAAMJ,GACzCnpB,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQK,MAAMJ,KACrCnpB,GACPA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOgmB,OAAOC,SAASU,MAAME,GACzCzpB,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQK,MAAME,KAEnCzpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAIlD28E,GAAYlpG,KAAOC,IAAGkpG,QAAA//E,aAAA,qDAKtBggF,GAAcppG,aAAOuyB,GAAPvyB,CAAaqpG,QAAAjgF,aAAA,sCAI3B2J,GAAiB/yB,KAAOC,IAAGqpG,QAAAlgF,aAAA,uDAK3BlL,GAASle,KAAOC,IAAGspG,QAAAngF,aAAA,oHAERhpB,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OACpCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAM63B,KAKjD4wE,GAAWxpG,KAAOC,IAAGwpG,QAAArgF,aAAA,wEAEVhpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAGtDuoG,GAAe1pG,KAAOgpB,OAAM2gF,QAAAvgF,aAAA,qGAClBhpB,GACZA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOgmB,OAAOC,SAASK,QAAQC,GAC3CnpB,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQA,QAAQC,KAEvCnpB,GACPA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOgmB,OAAOC,SAASK,QAAQO,GAC3CzpB,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQA,QAAQO,KACnCzpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAIlDq9E,GAAgB5pG,KAAOC,IAAG4pG,QAAAzgF,aAAA,mHACrBhpB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAOrC29E,GAAc9pG,KAAOC,IAAG8pG,QAAA3gF,aAAA,6FAIbhpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAE9Ck6G,GAAShqG,KAAOC,IAAGgqG,QAAA7gF,aAAA,qFAGdhpB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAIrC+9E,GAAalqG,KAAOC,IAAGkqG,QAAA/gF,aAAA,+BA2bdghF,OA/a0BrvG,IAG3B,IAADsvG,EAAAC,EAAAC,EAAA,IAH6B,UACxCjpG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,iCACtB,WAAEyb,GAAeP,MACf3Q,KAAMuN,GAAqBP,KAC7Bw8D,EAAevkE,mBAAQ,KACJ,OAAhBsI,QAAgB,IAAhBA,OAAgB,EAAhBA,EAAkB1G,QAAO/J,IAASA,EAAKiH,mBAAmB,IAChE,CAACwJ,IAEEnD,EAAco/D,EAAa,IAC1Bx/D,EAAYqE,GAAiBzI,mBAAwBwE,GACtDs0F,EAAyB,OAAV10F,QAAU,IAAVA,OAAU,EAAVA,EAAYgB,OAC3BkwF,EAA4B,OAAVlxF,QAAU,IAAVA,OAAU,EAAVA,EAAY9B,YAC5BlI,KAAMyI,GAAiBkF,MACvB3N,KAAM+H,GAAmB8F,GAC/B,CAAEjd,KAAK,GAAD+E,OAAK+oG,EAAY,SAAS5hG,KAAMkN,KAC3B,OAAVA,QAAU,IAAVA,KAAY7B,iBAETw2F,EAAqBx5F,gBAAMoI,EAAkB,CAAC,kBAAkB,IAChEtc,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxDgqG,EACC,OAALhqG,QAAK,IAALA,OAAK,EAALA,EAAQ,yCAMJgmB,EADWpK,eACgBhM,SAASG,MAAM,KAAK,IAC/C,gBAAEgX,GAAoBvB,MAEtB,UAAEylF,EAAS,cAAEE,GAAkBR,GAAqB8C,GACpDE,EAAgB35F,mBAAQ,SAAA45F,EAAAC,EAAA,OAAe,OAAT5C,QAAS,IAATA,GAAe,QAAN2C,EAAT3C,EAAWl8F,YAAI,IAAA6+F,GAAK,QAALC,EAAfD,EAAkB,UAAE,IAAAC,OAAX,EAATA,EAAsB9E,QAAQ,GAAE,CAClEkC,KAEK6C,EAAeC,GAAoBp5F,mBACxC,OAEKkiB,EAAasgE,GAAkBxiF,oBAAS,IACxCq5F,EAA2BC,GAAgCt5F,oBAChE,IAEKu5F,EAA2BC,GAAgCx5F,oBAChE,GAEIy5F,EAAYp6F,mBAAQ,MAClB25F,IAAkB93F,iBAAOi4F,KACtB3/F,OAAO+L,QAAQ4zF,GAAe55F,OAAMw+B,IACzC,MAAM9mD,EAAM8mD,EAAM,GAElB,OADcA,EAAM,OACDi7D,EAAc/hH,EAAI,KAIxC,CAAC+hH,EAAeG,IAEnB/4F,qBAAU,KACRg5F,EAAiB,KAAK,GACrB,CAACN,IAEJ14F,qBAAU,KACF44F,GACJI,EAAiBJ,EACnB,GACC,CAACA,IAEJ,MAAMj2F,EAAmBd,GAAS,CAChCE,iBACAC,UAAWS,EAAaI,OACxB/L,KAAMkN,KAGF,QAAElB,EAAO,MAAEhb,EAAK,OAAEG,GAAWqa,GAAsB,CACvDE,iBAA4B,OAAVwB,QAAU,IAAVA,OAAU,EAAVA,EAAY9B,WAC9BO,eACAC,iBAA4B,OAAVsB,QAAU,IAAVA,OAAU,EAAVA,EAAYtB,iBAC9BP,eAA0B,OAAV6B,QAAU,IAAVA,OAAU,EAAVA,EAAY7B,eAC5BpE,eAA0B,OAAViG,QAAU,IAAVA,OAAU,EAAVA,EAAYjG,eAC5B4E,qBAWF,SAASqyF,EAAeR,GACtBwE,EAAiB,IACZD,EACH,CAACvE,KAA0B,OAAbuE,QAAa,IAAbA,KAAgBvE,KAElC,CA6CA,MAAMp6B,EAAkBn7D,mBACtB,IACE,CACE/iB,EAAqBI,UACrBJ,EAAqBG,YACrBH,EAAqBE,KACrBF,EAAqBC,UACrB0kB,QAAO8gC,GACPA,IAAYzlD,EAAqBI,WAE7B24G,KAER,CAACA,IAGH,OACEplG,gBAACO,GAAS,CAACZ,UAAWA,EAAUvS,SAAA,CAC7B07G,EACC9oG,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACwnG,GAAS,CAAAn6G,SAAC,SACX2S,eAAA,OAAA3S,SAAK,6DACL2S,eAACygC,GAAS,CACRryC,KAAK,qBACLq4B,GAAIrE,EAAgB,CAClBf,gBAAiBp1B,EAAiBE,eACjCkB,SACJ,wBAKH4S,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACm4D,GAAS,CAAC7uE,MAAO,0BAA2BuW,OAAQA,IACrDG,eAAC2mG,GAAQ,CAACtnE,SAAUK,GAAgB,yBACpCz/B,gBAAC2mG,GAA2B,CAAAv5G,SAAA,CAC1B2S,eAAA,OAAA3S,SAAK,iBACL2S,eAAC6mG,GAAK,CACJ7wG,MAAO49E,EACP/Y,YAAa/gE,IAAA,IAAC,KAAEoN,GAA+BpN,EAAA,OAC7C2e,EAAcvR,EAAK,EAErB+nE,aAAc76D,IAEhBpU,eAAC0sB,GAAO,CACN9sB,UAAWA,EACX0tB,cAvGZ,SAAuBzjB,GACrByR,EAAW,CACTzR,IACA/hB,MAAO,cACP4oB,MAAM,iCAEV,EAkGY7Q,OAAQA,EACR4tB,QACExtB,gBAAC6mG,GAAS,CAAC,iBAAA/mG,OAAgBD,EAAU,gBAAezS,SAAA,CAClD2S,eAAA,KAAA3S,SAAI4gB,GAAoBmG,KACxBpU,eAAC+mG,GAAU,CAAA15G,SAAA,KAAA0S,OAAiB,OAAVqU,QAAU,IAAVA,GAAuB,QAAbu0F,EAAVv0F,EAAY/F,mBAAW,IAAAs6F,OAAb,EAAVA,EAAyB9tG,OAAM,OACjDmF,eAACmB,GAAU,CAACrM,KAAM,WAGtB04B,aACExtB,eAACqxD,GAAQ,CAAC21C,aAAwB,OAAV5yF,QAAU,IAAVA,GAAuB,QAAbw0F,EAAVx0F,EAAY/F,mBAAW,IAAAu6F,OAAb,EAAVA,EAAyB/tG,OAAOxN,SAC3C,OAAV+mB,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,YAAYjW,KAAI4mB,GAC3Bhf,eAAC8uE,GAAc,CAEb,wBAAsB,OAAMzhF,SAE3B2xB,EAAE5wB,MAHE6e,oBAAU+R,EAAE5wB,WAQzBm/B,UAAU,iBAKlBttB,gBAAC4tB,GAAO,CAACwU,WAAY0mE,EAAmB17G,SAAA,CACtC4S,gBAACinG,GAAiB,CAAA75G,SAAA,CACf6K,GACC+H,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAA,KAAA3S,SAAG,WACH2S,eAAConG,GAAQ,CAAA/5G,SAAE6K,EAAMk4E,eAGpBl9D,GACCjT,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAA,KAAA3S,SAAG,aACH2S,eAAConG,GAAQ,CAAA/5G,SAAE6lB,EAAQmlC,iBAGtBhgD,GACC4H,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAA,KAAA3S,SAAG,0BACH2S,eAAConG,GAAQ,CAAA/5G,SAAEgL,EAAOrP,iBAGtBgX,eAACmnG,GAAc,CACb9nE,SAAUK,GAAgB,wCAG9B1/B,eAACY,GAAa,CACZG,iBACGulG,EAAU/hF,WAAa+hF,EAAUnyD,aAClCjjC,iBAAOi4F,GAETroG,cACEwlG,EAAUpyD,WACC,OAAToyD,QAAS,IAATA,GAAe,QAANuC,EAATvC,EAAWl8F,YAAI,IAAAy+F,GAAfA,EAAiBhuG,SAAUqW,iBAAOi4F,GAEtCnoG,cACEhB,eAAC2pF,KAAa,CAAAt8F,SACZ2S,eAAC8jG,GAAgB,CACfC,QAAQ,8CACRlkG,OAAO,mCAIbgB,QACEZ,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACgqE,GAAU,CACTP,aAAcpoD,EACdzhB,UAAU,eACV8pE,KAAMc,EAAgBpyE,KAAI25C,IAAO,CAC/B3kD,KAAMg1B,EAAgB,CACpBf,gBAAiBp1B,EAAiBG,cAClCu1B,eAAgBowB,IAElBzoD,MAAOqD,EAA2BolD,GAClClqD,GAAIkqD,EACJ1P,YAAY,QAGhBriC,eAACinG,GAAU,CAAA55G,SACT4S,gBAACmiC,KAAM,CAAA/0C,SAAA,CACL2S,eAAC+mB,KAAK,CACJ6jD,OAAK,EACLx9E,KAAI,IAAA2S,OAAM9U,EAAgB,KAAA8U,OAAI9T,EAAiBG,cAAa,KAAA2T,OAAIzT,EAAqBG,aAAcY,SAEnG2S,eAAC2lG,GAAkB,CACjBP,eAAgBA,EAChBhB,SACE+E,EAEFtpG,OAAQC,MAGZG,gBAAC8mB,KAAK,CACJ35B,KAAI,IAAA2S,OAAM9U,EAAgB,KAAA8U,OAAI9T,EAAiBG,cAAa,KAAA2T,OAAIzT,EAAqBE,MAAOa,SAAA,CAE5F2S,eAAC6lG,GAAY,CACXT,eAAgBA,EAChBhB,SACE+E,EAEFtpG,OAAQC,IACP,OAELE,eAAC+mB,KAAK,CACJ35B,KAAI,IAAA2S,OAAM9U,EAAgB,KAAA8U,OAAI9T,EAAiBG,cAAa,KAAA2T,OAAIzT,EAAqBC,UAAWc,SAEhG2S,eAAC+lG,GAAgB,CACfX,eAAgBA,EAChBhB,SACE+E,EAEFtpG,OAAQC,MAGZE,eAAC+mB,KAAK,CACJ6jD,OAAK,EACLx9E,KAAI,IAAA2S,OAAM9U,EAAgB,KAAA8U,OAAI9T,EAAiBG,cAAa,MAAA2T,OAAKzT,EAAqBI,UAAS,MAAKW,SAEpG2S,eAACmlG,GAAgB,CACfC,eAAgBA,EAChBC,gCACEA,EAEFjB,SACE+E,EAEF7D,gBAAiBA,EACjBzlG,OAAQC,cAOpBD,OAAQC,IAEVG,gBAAA,UAAA5S,SAAA,CACE2S,eAACqnG,GAAe,CAAAh6G,UACZo8G,GAAazpG,eAAA,MAAA3S,SAAI,4BAErB2S,eAACsnG,GAAmB,CAAAj6G,SAClB2S,eAACunG,GAAU,CACThgF,SAAUkiF,EACVptF,QAASxS,GAvOrB,SAA2BA,GAEzB,GADAA,EAAE0lB,iBACI45E,EAAe,CAEnB,MAYM74G,EAA2E,CAC/E,kBACA,UACA,wBACA,YACA,2BAEIo5G,EAnBkE,CACtE,wBACA,uBACA,sBACA,mBACA,WACA,qBACA,eACA,cACA,iBAUsCn6F,OACtCu6E,KAAwB,OAAbqf,QAAa,IAAbA,KAAgBrf,MAE7Bwf,EAA6BI,GAE7B,MAAMC,EAA2Br5G,EAAwBif,OACvDu6E,KAAwB,OAAbqf,QAAa,IAAbA,KAAgBrf,MAE7B0f,EAA6BG,GAE7BA,GAA4BD,EACxBlX,GAAe,GACb2W,GAAiB3C,EAAcj8D,OAAO4+D,EAC9C,CACF,CAkM0BS,CAAkB//F,GAChC,iBAAA9J,OAAgBF,EAAM,gBAAexS,SACtC,yBAMN6kC,GACClyB,eAAC0nG,GAAW,CACV52E,YAAY,EACZC,gBAAgB,6DAChBvD,aACEvtB,gBAACoxB,GAAc,CAAAhkC,SAAA,CACb2S,eAACwc,GAAM,CAAAnvB,SAAC,uCACR2S,eAAC8nG,GAAQ,CAAAz6G,SAAA,wDAAA0S,OAELspG,GAA6BE,EACzB,oCACAF,EACA,iBACA,oBAAmB,0EAAAtpG,OAGvBspG,GAA6BE,EACzB,oCACAF,EACA,iBACA,oBAAmB,OAG3BppG,gBAAA,OAAA5S,SAAA,CACGg8G,GACCppG,gBAACmoG,GAAW,CAAA/6G,SAAA,CACV2S,eAACsoG,GAAM,CAAAj7G,SACJ,CACC,gBACA,4BACA,iBACA,wBACA+K,KAAI0xF,GACG9pF,eAACwoG,GAAU,CAAAn7G,SAAey8F,GAATA,OAG5B9pF,eAACsoG,GAAM,CAAAj7G,SACJ,CACC,eACA,iBACA,YACA,8BACA,gCACA+K,KAAI0xF,GACG9pF,eAACwoG,GAAU,CAAAn7G,SAAey8F,GAATA,UAK/Byf,GACCvpG,eAACooG,GAAW,CAAA/6G,SACV2S,eAACsoG,GAAM,CAAAj7G,SACJ,CACC,yBACA,WACA,oBACA,mCACA,cACA+K,KAAI0xF,GACG9pF,eAACwoG,GAAU,CAAAn7G,SAAey8F,GAATA,YAMlC7pF,gBAACqnG,GAAmB,CAAAj6G,SAAA,CAClB2S,eAACkoG,GAAa,CACZ7rF,QAASA,KACPmqF,EAAcj8D,OAAO4+D,GACrB3W,GAAe,EAAM,EACrBnlG,SACH,aAGD2S,eAACgoG,GAAY,CACX3rF,QAASA,IAAMm2E,GAAe,GAC9B,iBAAAzyF,OAAgBF,EAAM,gBAAexS,SACtC,kBAMP2jC,OAAQA,IAAMwhE,GAAe,GAC7B3yF,OAAQ,6BAGF,EC/mBhB,MAAM0c,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAVH,CAAU,gCACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QACpC5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAE/DoV,GAAQrhC,aAAO65D,IAAU35D,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAAjBH,CAAiB,wBAGzBurG,GAAOvrG,aAAOkrE,IAAchrE,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,eAArBH,CAAqB,qEAGfI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAqGtDu/E,OA5FMzwG,IAGa,IAHZ,UACpBuG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kBACtBhE,EAAWob,eACX5b,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxD0uG,EAA0B,OAAL1uG,QAAK,IAALA,OAAK,EAALA,EAAQ,2BAC7B2uG,EACC,OAAL3uG,QAAK,IAALA,OAAK,EAALA,EAAQ,gCAEJ,gBAAE+mB,GAAoBvB,KAKtBQ,EAAkBxlB,EAASoP,SAASG,MAAM,KAAK,GAGrDgF,qBAAU,KACRzU,SAASrS,MxTjDJ+hB,GAAale,EAAalC,GAAkB3B,MwTiDV,GACtC,CAACuS,IAEJ,MAAM2uE,EAAkBn7D,mBACtB,IACE,CACEpjB,EAAiBE,aACjBF,EAAiBG,cACjBH,EAAiBC,oBACjB+kB,QAAO8gC,IACP,OAAQA,GACN,KAAK9lD,EAAiBE,aACpB,OAAO49G,EACT,KAAK99G,EAAiBG,cACpB,OAAO49G,EACT,QACE,OAAO,EACX,KAEJ,CAACD,EAAoBC,IAGvB,OAAY,OAAL3uG,QAAK,IAALA,KAAQ,iBACb2E,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD4S,gBAACsc,GAAc,CAAAlvB,SAAA,CACb2S,eAAC6pE,GAAc,CACbhpE,QACEb,eAAC2/B,GAAK,CACJr2C,MAAO6D,EAAalC,GAAkB3B,MACtCuW,OAAQA,IAGZA,OAAQA,IAEVI,gBAACw8C,GAAkB,CAAApvD,SAAA,CACjB2S,eAAC6pG,GAAI,CACHpgC,aAAcpoD,EACdqoD,KAAMc,EAAgBpyE,KAAI25C,IAAO,CAC/BlqD,GAAIkqD,EACJ3kD,KAAMg1B,EAAgB,CACpBf,gBAAiB0wB,IAEnBzoD,MAAO+C,EAAsB0lD,OAE/BlyC,OAAQC,IAEVG,gBAACmiC,KAAM,CAAA/0C,SAAA,CACL2S,eAAC+mB,KAAK,CACJ35B,KAAI,IAAA2S,OAAM9U,EAAgB,KAAA8U,OAAI9T,EAAiBG,eAAgBiB,SAE/D2S,eAAC0oG,GAAyB,CAAC7oG,OAAQC,MAErCE,eAAC+mB,KAAK,CACJ6jD,OAAK,EACLx9E,KAAI,IAAA2S,OAAM9U,EAAgB,KAAA8U,OAAI9T,EAAiBC,oBAAqBmB,SAEpE2S,eAAC+3F,GAAwB,CAACl4F,OAAQC,MAEpCE,eAAC+mB,KAAK,CACJ35B,KAAI,IAAA2S,OAAM9U,EAAgB,MAAA8U,OAAK9T,EAAiBE,aAAY,MAAKkB,SAEjE2S,eAACqjG,GAAmB,CAACxjG,OAAQC,iBAOvCE,eAACwmB,KAAQ,CAACC,GAAE,KACb,ECvHH,MAAMjmB,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAVH,CAAU,6CACNI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAIhD+tF,GAAc3rG,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAATH,CAAS,gGAGdI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAUzzB,MAAMC,KAC/CZ,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAC1B5rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQs/B,SAItD2rE,GAAW5rG,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAZH,CAAY,sDAClBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIsO,OAarC4/E,GAAoB7rG,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAVH,CAAU,yDACdI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAKhD8/E,GAAkB9rG,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAAbH,CAAa,iKAC1BI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAG9Bxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAE5Bzd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtCf,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAKpC5rB,GAAK,eAAAqB,OAAmBrB,EAAMC,MAAM2C,OAAO2a,IAAIwO,SAI3D4/E,GAAa/rG,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAVH,CAAU,sDAGbI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAG1CyL,GAAerpB,aAAOqqB,IAAOnqB,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAAdH,CAAc,6CAEtBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAmI9BmuF,OA9HcjxG,IAMK,IANJ,UAC5BuG,EAAS,cACTuhB,EAAa,OACbthB,EAAS,SAAQ,KACjBzD,EAAI,eACJmuG,GACMlxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,8BACrB2qG,EAAoBC,GAA0Bz6F,oBAAS,IAEtD5F,KAAMsiE,GAAqBj9D,KAC7ByV,EAAqB7nB,cACxBpE,GAA6BA,EAAMsC,QAAQ2pB,sBAExC,WAAE5J,GAAeP,KACjBqI,EAAWC,eACXtC,EAAUC,gBACV,aAAEiB,GAAiBpB,KAEnB6pF,EAAiBvpF,IAAkBl2B,EAEzC,MAHqBs/G,EAInB,OACEvqG,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD2S,eAACygC,GAAS,CACRryC,KAAM,YACNq4B,GAAIxE,EAAa,CACftN,oBAAqB+1F,IACpBr9G,SAEH4S,gBAACgqG,GAAW,CAAA58G,SAAA,CACV2S,eAACkqG,GAAQ,CAACp1G,KAAK,QAAQ+K,OAAO,YAC7BqlB,SAmBX,SAASylF,EACP9gG,EACA6gG,EACAE,GAEAH,GAAuB,GAEnBG,GAAkC,OAAhBl+B,QAAgB,IAAhBA,KAAkBr+D,aACtC+U,EACEtG,GAAkB,CAChB7gB,oBAAqB,MAK3B8kB,EAAQwB,KACNN,EAAa,CACXtN,oBAAqB+1F,IAAmBE,KAI5C/gG,EAAEyS,UACFzS,EAAE0lB,iBACFjU,EAAW,CACTzR,IACA/hB,MAAO,kBACP4oB,MAAM,4BAEV,CAEA,OACEzQ,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD4S,gBAACgqG,GAAW,CAAA58G,SAAA,CACV4S,gBAAC0nB,GAAY,CACXL,OAAO,WACPjL,QAAUxS,GA/ClB,SACEA,EACAorC,GAEAw1D,EAAuBx1D,GACvB35B,EAAW,CACTzR,IACA/hB,MAAM,eACN4oB,MAAM,WAAD3Q,OAAak1C,EAAS,OAAS,WAExC,CAsCU41D,CAAgBhhG,GAAI2gG,GAEtB3qG,OAAM,eAAiBxS,SAAA,CAEvB2S,eAACkqG,GAAQ,CAACp1G,KAAK,QAAQ+K,OAAQ,YAC/BG,eAACkqG,GAAQ,CACPp1G,KAAM01G,EAAqB,WAAa,aACxC3qG,OAAQ,eAIXqlB,KAEFslF,EACCvqG,gBAACkqG,GAAiB,CAAA98G,SAAA,CAChB2S,eAACoqG,GAAe,CACdviH,GAAI,YACJw0B,QAAUxS,GACR8gG,EAAY9gG,EAAG6gG,GAAgB,GAChCr9G,SAED2S,eAACqqG,GAAU,CAAC,wBAAsB,OAAMh9G,SAAE+O,EAAKhO,SAEjD4R,eAACoqG,GAAe,CACdviH,GAAI,YACJw0B,QAAUxS,GACR8gG,EAAY9gG,EAAG6gG,GAAgB,GAChCr9G,SAED2S,eAACqqG,GAAU,CAAC,wBAAsB,OAAMh9G,SACvB,OAAdk9G,QAAc,IAAdA,OAAc,EAAdA,EAAgBn8G,YAIrB,OACM,E,8BCzLhB,MAAM08G,GAASxsG,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,gBAAZH,CAAY,gBAChBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIob,aAErC0zE,GAAczsG,aAAOkoC,MAAKhoC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAZH,CAAY,4YAuBjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YACrBxd,GAClBA,EAAMC,MAAM2C,OAAO2a,IAAIob,aAEd34B,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAMzBxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QACvB/rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIob,aAG3D2zE,GAAc1sG,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAjBH,CAAiB,2TAItBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQkJ,OAK1CzJ,GAAUA,EAAMusG,WAAa,SAAW,WAK7CvsG,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIob,YAGrCyzE,IACOpsG,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAIzCgvF,GAAiB5sG,KAAOkT,EAAChT,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAARH,CAAQ,2TAIhBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQkJ,OAK1CzJ,GAAUA,EAAMusG,WAAa,SAAW,WAK7CvsG,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIob,YAGrCyzE,IACOpsG,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAIzCivF,GAAY7sG,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAXH,CAAW,6BACZI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAGtD2rG,GAAW9sG,aAAO,QAAOE,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAdH,CAAc,mEACpBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIob,aAKrCg0E,GAAmB/sG,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAATH,CAAS,mFAM5BgtG,GAAuBhtG,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAATH,CAAS,4HAIpBI,GAAUA,EAAMusG,WAAa,SAAW,WAC/CvsG,GACPA,EAAMm9B,SACFn9B,EAAMC,MAAM2C,OAAO2a,IAAIob,WACvB34B,EAAMC,MAAM2C,OAAO2a,IAAIsO,OAGlB7rB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YACrBxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIob,aAEzC34B,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,WAIzC8uF,IAIAO,GAAcjtG,aAAOktG,MAAQhtG,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAfH,CAAe,wFACbI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAMhDghF,GAAgBA,CACpBt+G,EACAkO,KAOI6V,iBAAO7V,KAGJ6F,sBAAY/T,EAAaG,OAC5B4T,sBAAY/T,EAAaC,UAGzB8T,sBAAiB,OAAL7F,QAAK,IAALA,OAAK,EAALA,EAAQlO,EAAaC,SAE1B,OAALiO,QAAK,IAALA,OAAK,EAALA,EAAQlO,EAAaC,UAChB,OAALiO,QAAK,IAALA,MAAQlO,EAAaG,QA+Jdo+G,I,GAAAA,GAnJMryG,IAOO,IAPN,UACpBuG,EAAS,cACTuhB,EAAa,WACb8pF,EAAU,SACVhgG,EAAQ,OACRpL,EAAS,SAAQ,MACjB8rG,GACMtyG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mBACtB,mBACJ2iB,EAAkB,iBAClBZ,EAAgB,mBAChBa,EAAkB,UAClBvX,GACE2V,KACEzM,EAAalJ,EAAUhE,KACvB6R,EAAc7N,EAAUhT,MACxBmD,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxDuwG,EAAkBD,EACrB16F,QAAQiD,IACP,MACM23F,EAAYJ,GADLt+G,EAAa+mB,GACY7Y,GACtC,OAAI6Y,IAAWjpB,EACN4gH,KAAyB,OAAVz3F,QAAU,IAAVA,MAAY9B,eAAgByG,EAE7C8yF,CAAS,IAEjBzzG,KAAK8b,IACG,IAAK/mB,EAAa+mB,GAASA,aAEhC43F,GAAmBb,EACrBW,EAAgB36F,QACd5b,GAAQA,EAAK6e,SAAWjpB,GAAmBoK,EAAK6e,SAAWjpB,IAE7D2gH,GACFxzG,KAAIib,GAAKA,EAAEa,SAEb,OACElU,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAAC+qG,GAAW,CAAA19G,SACRu+G,EAMExzG,KAAI,CAAC/C,EAAMk0B,KAAW,IAADwiF,EAAAC,EACvB,MAAMC,EAAM,WAAAlsG,OAAc1K,EAAKjI,MACzB8+G,EAAYJ,EAAgBpiG,SAASrU,EAAK6e,QAC1C7mB,GAAYgI,EAAKhI,UAAY,IAAI4jB,QAAOyO,GAC5C+rF,GAAct+G,EAAauyB,GAAIrkB,KAE3BqQ,EACJyV,IAAkBl2B,EACdw3B,EACAtB,IAAkBl2B,EAClBu3B,EACA,KAEA2pF,EACJlsG,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACmrG,GAAS,CAAA99G,SACPgI,EAAK6e,SAAWjpB,EACfgV,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAC8qG,GAAM,CAACh2G,KAAK,SAAS+K,OAAQC,IAAc,IAAEzK,EAAK/L,SAGrD+L,EAAK/L,QAGH,OAAL+R,QAAK,IAALA,GAAkB,QAAb0wG,EAAL1wG,EAAO+wG,mBAAW,IAAAL,GAAlBA,EAAqB12G,EAAKjI,MACzB4S,eAACorG,GAAQ,CAACxrG,UAAU,WAAUvS,SAAC,UACxB,OAALgO,QAAK,IAALA,GAAW,QAAN2wG,EAAL3wG,EAAOgxG,YAAI,IAAAL,GAAXA,EAAc32G,EAAKjI,MACrB4S,eAACorG,GAAQ,CAACxrG,UAAU,WAAUvS,SAAC,UAC7B,QAGFi/G,EACJj3G,EAAK6e,SAAWjpB,EACd+U,eAACkrG,GAAc,CACbD,WAAYA,EACZnvG,KAAMQ,GAAOQ,kBAAkBzP,SAE9B8+G,IAGHnsG,eAACgrG,GAAW,CACVC,WAAYA,EACZ78G,KAAM69G,EACNxlF,GAAI7E,EAAiBvsB,EAAK6e,OAAQ,CAChCS,mBAAoBhgB,KAEtBkL,OAAQosG,EACRjxG,KAAK,MAAK3N,SAET8+G,IAIP,OACElsG,gBAAA,MAAA5S,SAAA,CACKk8B,EAAQvpB,eAACurG,GAAW,CAAClvE,OAAK,IAAM,KACnCr8B,eAACymC,KAAQ,CACPnf,QAAM,EACNilF,SAAO,EACP1wE,SAAU5wB,EAASvB,SAASrU,EAAKjI,MACjCo/G,gBAAgB,EAEhBjlF,UAAW2kF,EAAU7+G,SAEpBi/G,GAHIj3G,EAAK6e,QAKT7mB,EAASwN,OACVmF,eAACqrG,GAAgB,CAAAh+G,SACdA,EAAS+K,KAAIsnB,IACZ,MAAM+sF,EAAW,WAAA1sG,OAAc1K,EAAKjI,KAAI,KAAA2S,OAAI2f,GAC5C,OACE1f,eAACsrG,GAAoB,CAEnBL,WAAYA,EACZpvE,UAAgB,OAANnwB,QAAM,IAANA,OAAM,EAANA,EAAQ2V,mBAAoB3B,EAAEryB,SAExC2S,eAACgrG,GAAW,CACVC,WAAYA,EACZ78G,KAAMq+G,EACNhmF,GAAI7E,EAAiBvsB,EAAK6e,OAAQ,CAChCS,mBAAoBhgB,GACpB0sB,gBAAiB3B,IAEnB7f,OAAQ4sG,EACRzxG,KAAK,MAAK3N,SAETF,EAAauyB,GAAGp2B,SAddmjH,EAgBgB,MAI3B,OAtCGR,EAuCJ,OAIP,EC7UK,OAA0B,8CCgCzC,MAAMS,GAAepuG,aAAOy2C,MAAOv2C,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAAdH,CAAc,8GAIXI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAI3Cxd,GAASA,EAAMC,MAAM+/B,KAAKG,UAIjCxO,GAAcC,aAAiB7I,QAAAC,aAAA,iLAElBhpB,GACbA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAS1BouB,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,kBAAAyV,YAAA,gBAAbH,CAAa,gCAItBquG,GAAsBruG,KAAO8wC,IAAG5wC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAVH,CAAU,aAIhCsuG,GAAgBtuG,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAVH,CAAU,4EACbI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIwO,SACrD/rB,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIwO,SAK/DoiF,GAAavuG,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,gBAAbH,CAAa,yKAOdI,GAAUA,EAAMouG,WAAa,SAAW,MAMpD3iF,GAAoB7rB,aAAOsrB,IAAYprB,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAnBH,CAAmB,0DAIjCI,GAAK,eAAAqB,OAAmBrB,EAAMC,MAAM2C,OAAO2a,IAAIqO,SAGrDI,GAAOpsB,KAAO2pC,GAAEzpC,WAAA,CAAAxV,YAAA,gBAAAyV,YAAA,gBAATH,CAAS,4EACXI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAE1B5rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQs/B,SAKtD7S,GAASptB,KAAOqtB,OAAMntB,WAAA,CAAAxV,YAAA,kBAAAyV,YAAA,gBAAbH,CAAa,yBAGtByuG,GAAoBzuG,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAATH,CAAS,gCAG7B0uG,GAAwB1uG,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAATH,CAAS,+BAKjC2uG,GAAe3uG,KAAOkT,EAAChT,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,iBAARH,CAAQ,kDAOvB4uG,GAAqB5uG,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,iBAATH,CAAS,gFAGzBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAC5B5rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAEtD2tG,GAAmB7uG,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,iBAAZH,CAAY,mCAC1BI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIob,aAGrC+1E,GAAmB9uG,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,iBAARH,CAAQ,iCACtBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAIrC+iF,GAAc/uG,aAAO,OAAME,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,iBAAbH,CAAa,8BAK3BgvG,GAAchvG,KAAOkT,EAAChT,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,iBAARH,CAAQ,uHACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAM9B/rB,GAASA,EAAMC,MAAM2C,OAAOi7B,KAAKtU,MAAM5mB,QAClC3C,GAASA,EAAMC,MAAM2C,OAAOi7B,KAAKtU,MAAMuU,aAKnD+wE,GAAejvG,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,iBAAjBH,CAAiB,oBAGhCkvG,GAAUlvG,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,mBAAAyV,YAAA,iBAAZH,CAAY,oCACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAgL5BmjF,OA5KiCA,KAC9C,MAAM3tG,EAAa,UACb1D,EAAOiB,cAAapE,GAA6BiT,cAAIjT,EAAO,UAC5DoC,EAAQgC,cAAapE,GAA6BiT,cAAIjT,EAAO,YAC7D,SAAEgS,GAAagM,eACfkK,EAAgBnW,GAAwBC,GACxCy/F,EAAiBvpF,IAAkBl2B,GACnC,aAAEg3B,EAAY,UAAE/W,GAAc2V,MAC9B,SAAEzS,GAAalD,EACf+/F,IAAe78F,GACf,WAAEkN,GAAeP,KACjBgG,EAAUC,eAUhB,SAAS0sF,EAAWr0G,GAQhB,IARiB,EACnBwQ,EAAC,WACD8jG,EAAU,KACVvxG,GAKD/C,EACO+C,IACJ2kB,EAAQwB,KACNN,EAAa,CACXtN,oBAAqBg5F,KAIzB9jG,EAAEyS,UACFzS,EAAE0lB,iBACFjU,EAAW,CACTzR,IACA/hB,MAAO,qBACP4oB,MAAM,WAAD3Q,OAAa3D,EAAKhO,QAG7B,CAEA,MAAM,YAAEm9B,EAAW,KAAEn9B,GAASgO,EAE9B,OACE6D,gBAACysG,GAAY,CAACkB,QAAQ,YAAYz4D,OAAO,OAAM9nD,SAAA,CAC7C2S,eAACqwB,GAAW,IACZpwB,gBAACuc,GAAM,CAAAnvB,SAAA,CACL2S,eAACsqG,GAAoB,CACnBnpF,cAAeA,EACf/kB,KAAMA,EACNmuG,eAAgBn8F,IAElBpO,eAAC4sG,GAAa,CAAAv/G,SACZ4S,gBAAC4sG,GAAU,CACTxwF,QAASxS,GACP6jG,EAAY,CACV7jG,IACAzN,OACAuxG,WAAYjD,KAAoBt8F,IAGpC0+F,YAAY,EACZ,iBAAA/sG,OAAgBD,EAAU,SAAQzS,SAAA,CAElC2S,eAACmqB,GAAiB,CAChB9pB,IAAKkrB,EACLnC,QAAO,GAAArpB,OAAK3R,EAAI,UAChByR,OAAM,GAAAE,OAAK3R,EAAI,YAEjB4R,eAAC0qB,GAAI,CAAAr9B,SAAEe,SAGRggB,EACDpO,eAAC4sG,GAAa,CAAAv/G,SACZ4S,gBAAC4sG,GAAU,CACTxwF,QAASxS,GACP6jG,EAAY,CAAE7jG,IAAGzN,KAAMgS,EAAUu/F,WAAYjD,IAE/CoC,YAAY,EACZ,iBAAA/sG,OAAgBD,EAAU,cAAazS,SAAA,CAEvC2S,eAACmqB,GAAiB,CAChB9pB,IAAK+N,EAASmd,YACdnC,QAAO,GAAArpB,OAAKqO,EAAShgB,KAAI,UACzByR,OAAM,GAAAE,OAAKqO,EAAShgB,KAAI,YAE1B4R,eAAC0qB,GAAI,CAAAr9B,SAAE+gB,EAAShgB,YAGlB,QAEN4R,eAAC2sG,GAAmB,CAAAt/G,SAClB2S,eAAC0rG,GAAY,CACXvqF,cAAeA,EACfwqF,MAAO,CACL1gH,EACAA,EACAA,EACAA,EACAA,EACAA,EACAA,GAEFggB,SAAUA,EACVggG,WAAYA,MAGhBhrG,gBAACyrB,GAAM,CAAAr+B,SAAA,CACL2S,eAAC+sG,GAAiB,CAAC,aAAW,iBAAgB1/G,SAC5C2S,eAACgtG,GAAqB,CAAA3/G,SACpB4S,gBAACgtG,GAAY,CACXnxG,KAAK,oFACLjU,GAAG,+BACHw0B,QA1GZ,SAA6BxS,GAC3ByR,EAAW,CACTzR,IACA/hB,MAAQ+hB,EAAEgkG,cAA8BhmH,GACxC6oB,MAAO,gBAEX,EAqGY+7B,IAAI,sBACJvf,OAAO,SACP,cAAY,+BAA8B7/B,SAAA,CAE1C4S,gBAACitG,GAAkB,CAAA7/G,SAAA,CAAC,oBAElB2S,eAACmtG,GAAgB,CACfr4G,KAAK,gBACL+K,OAAO,oCAGXG,eAACotG,GAAgB,CAAA//G,SAAC,sEAOlB,OAALgO,QAAK,IAALA,KAAQ,iBACP4E,gBAACstG,GAAY,CACXn/G,KAAK,yBACLq4B,GAAE,YACF5mB,OAAO,wBAAuBxS,SAAA,CAE9B2S,eAACwtG,GAAO,CAAC14G,KAAK,QACdkL,eAAA,QAAMJ,UAAU,iBAAgBvS,SAC7BF,EAAalC,GAAkB3B,WAGlC,KAEJ0W,eAACygC,GAAS,CACRryC,KAAK,qBACLq4B,GAAIxE,EAAa,CACftN,mBAAoBwM,IAAkBl2B,IAExC4U,OAAO,oBAAmBxS,SAE1B2S,eAACqtG,GAAW,CAAChtG,IAAKytG,OAEpB7tG,gBAACqtG,GAAW,CACVxxG,KAAK,sEACL2wC,IAAI,sBACJvf,OAAO,SAAQ7/B,SAAA,CAChB,SACI,IAAIwL,MAAOk1G,cAAc,4BAGnB,EChTJC,OAfGA,KAChB,MAAM,gBAAE3rF,EAAe,gBAAEH,GAAoBrB,KACvCxlB,EAAQgC,cAAapE,GAA6BA,EAAMoC,QAE9D,OACE2E,eAACwmB,KAAQ,CACPC,GACO,OAALprB,QAAK,IAALA,KAAQ,gCACJgnB,EAAgB,CAAE1N,oBAAoB,IACtCuN,KAEN,ECrBS,OAA0B,iCCE1B7oB,OAA6B,IAA5B,OAAEiD,EAAS,CAAC,EAAC,MAAEqC,GAAOtF,EACpC,OAAOqiB,gBACL,CAAC,EACD,CACE+Z,MAAO,CACLz6B,KAAM,eACN8tB,MAAO,CACLoZ,WAAYvjC,EAAMC,MAAMk0B,UAAU1kC,KAClC+zC,SAAU,KAGd74C,MAAO,KACPu0C,QAAS,CACP9mC,SAAS,EACTD,SAAS,EACTE,gBAAiB,KACjBC,QAAQ,EACRC,YAAa,EACbC,aAAc,GAEhBkvD,YAAa,CACXpnB,OAAQ,CACN8qB,WAAY,CACVhzD,SAAS,MAKjBuF,EAEH,ECUc2xG,OA/BkB50G,IAK1B,IAL2B,UAChCuG,EAAS,OACTC,EAAS,SAAQ,MACjBlB,KACGD,GACJrF,EACC,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,wBACtB41B,EAAQvpB,cAAIxN,EAAO,QAAS,CAAC,GAC7BpC,EAAS4P,cAAIxN,EAAO,eAAgB,CAAC,GAE3C,OACEsB,eAAC+/C,GAAK,CACJtqB,MAAO,IACFA,EACHn5B,OAAQkkD,GAAe,CAAElkD,SAAQqC,WAEnCiB,UAAWA,EACXC,OAAQC,GACR,ECsESxD,OA/FAjD,IAAoD,IAAnD,KAAE+Q,EAAO,CAAC,EAAC,mBAAE8jG,EAAqB,CAAC,EAAC,MAAEvvG,GAAOtF,EAC3D,MAAM80G,EAAqB3kG,OAAOmH,OAAOvG,GACnCgkG,EAAqE,IAA/Cn+C,iBAAOk+C,EAAoB,SAAStzG,OAC1DyG,EAAS3C,EAAM2C,OAAOm0B,MAAM+E,uBAC5ByE,EAAS,IACVjT,iBAAOmiF,EAAoB,OAAO/1G,KAAI42C,IACvC,MAAMnnB,EAAKvmB,EAAO0tC,EAAE/nD,KACpB,MAAO,CACLmH,KAAM4gD,EAAEq/D,mBACRC,MAAM,EACNjtG,MAAOwmB,EACPkiC,WAAY,CACV1oD,MAAOy1B,GAAYjP,IAErBzd,KAAM,CAAC4kC,GACR,KAGL,MAAO,CACLvZ,MAAO,CACL3M,MAAO,CACLoZ,WAAYvjC,EAAMC,MAAMC,QAAQzQ,OAGpC9E,MAAO,KACPu0C,QAAS,CACPihB,UAAW,WACT,MrMD4Csd,KAClD,MAAM,mBACJiyC,EAAkB,aAClBE,EAAY,KACZngH,EAAI,YACJm9B,EAAW,MACX7a,EAAK,WACL89F,GACEpyC,EAEJ,IAAIqyC,EAAqB,GACrBC,mBAASH,IAAkC,IAAjBA,IAC5BE,EACEF,EAAe,EACXl/G,GACAA,IAGR,MAAMs/G,EAAkB9sD,GAAmB,CACzCt2B,cACA+V,MAAO,KAGT,MAAM,sGAANvhC,OAA6G4uG,GAAe5uG,OAAG3R,EAAI,+CAAA2R,OAA8CsuG,EAAkB,eAAAtuG,OAAcyuG,EAAWvpD,QAC1N,GACD,KAAAllD,OAAmB,IAAfyuG,EAAmB,KAAO,MAAK,OAAAzuG,OAAM2Q,EAAMu0C,QAAQ,GAAE,KAAAllD,OACxD2uG,mBAASH,GAAa,kBAAAxuG,OACA0uG,EAAkB,MAAA1uG,OAAKozB,KAAKC,IAAIm7E,GAActpD,QAC9D,GACD,aACD,GAAE,WqM7BK2pD,CAAqC,IACvC5hF,KAAKiyB,SACLivD,GAEP,GAEF9nD,OAAQ,CACNH,MAAO,QACPlvD,SAAS,EACT83G,iBAAkB,EAClBC,cAAe,EACfjzC,UAAW,CACT15B,SAAUxjC,EAAMC,MAAMC,QAAQQ,MAAMwrB,GACpC46B,WAAY9mD,EAAMC,MAAMC,QAAQI,QAAQO,QACxC0gF,kBAAcplF,GAEhBi0G,UAAW,IACXjzC,OAAQ,WACRt6B,QAAS,EACT8gB,cAAe,OAEjB+D,YAAa,CACXpnB,OAAQ,CACN8qB,WAAY,CACVhzD,SAAS,EACTD,SAAS,EACTk4G,cAAc,EACdlwD,UAAW,WACT,MAAMG,EAAQjyB,KAAKiyB,MAGnB,OAAIA,EAAM12B,OAAS,GACX,4DAANxoB,OAAmEk/C,EAAMvuC,MACvE,GAAE,QAAA3Q,OAAOk/C,EAAMvuC,MAAMu0C,QAAQ,GAAE,iBAE7B,qCAANllD,OACEk/C,EAAMovD,mBAAkB,uCAAAtuG,OACYk/C,EAAMvuC,MAAMu0C,QAChD,GACD,gBACH,EACAn8B,MAAO,CACLznB,MAAO1C,EAAM2C,OAAO2a,IAAIC,UACxB2yE,YAAa,UAInBogB,aAAc,CACZ3oD,WAAW,EACX4oD,QAAS,GACTC,QAASf,EAAsB,IAAM,IACrCgB,WAAW,EACXC,gBAAiB,CACfC,kBAAkB,EAClBC,sBAAuB,IACvBC,cAAe,IACfC,SAAU,GAEZz1E,OAAQ,CACN2sB,YAAa,EACbf,UAAWjnD,EAAM2C,OAAO4mB,OACxBq+B,UAAW,KAIjBtnB,SACD,ECrFH,MAAMz+B,GAAYlC,aAAO2vG,IAAkBzvG,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,eAAzBH,CAAyB,qdAwBtBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAErCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAS3Cd,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAErCsQ,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU7zB,QAAQQ,OA0EnDwnD,qBAjE4B5tD,IAYpC,IAZqC,UAC1CuG,EAAS,KACTwK,EAAO,CAAC,EAAC,eACTi2C,GAAiB,EAAK,yBACtBqvD,EAA2BA,SAE1B,mBACDxB,EAAqB,CAAC,EAAC,OACvBruG,EAAS,SAAQ,MACjBlB,EAAK,SACLgxG,KACGjxG,GACJrF,EACC,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mCACrBvD,EAAQszG,GAAa5/F,mBAC1BwwC,GAAe,CACbp2C,KAAM,GACNslG,2BACAxB,qBACAvvG,WAIEkxG,EAAexgG,mBAAQ,IACpBwF,KAAKC,UAAU4+B,eAAKtpC,EAAM,CAAC,oBACjC,CAACA,EAAK,GAADrK,OAAa,OAAR4vG,QAAQ,IAARA,OAAQ,EAARA,EAAUrmH,OAAKyW,OAAW,OAAR4vG,QAAQ,IAARA,OAAQ,EAARA,EAAUG,iBACnCC,EAAgB1gG,mBAAQ,IAAMwF,KAAKC,UAAUnW,IAAQ,CAACA,IACtDqxG,EAAqB3gG,mBAAQ,IAAMwF,KAAKC,UAAUo5F,IAAqB,CAC3EA,IAcF,OAXA99F,qBAAU,KACRw/F,EACEpvD,GAAe,CACbp2C,KAAMyK,KAAK1K,MAAM0lG,GACjBH,2BACAxB,mBAAoBr5F,KAAK1K,MAAM6lG,GAC/BrxG,MAAOkW,KAAK1K,MAAM4lG,KAErB,GACA,CAACF,EAAcE,EAAeC,IAG/BhwG,eAACQ,GAAS,CACRi1B,MAAO,CACLn5B,SACAzU,GAAI,gCACJw4D,kBAEFzgD,UAAWA,EACXC,OAAQC,EACRnB,MAAOA,GACP,ICvGN,MAAM6B,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,uDAAAyV,YAAA,gBAAVH,CAAU,4CAItBkhC,GAAclhC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yDAAAyV,YAAA,gBAAVH,CAAU,gFAQxB6C,GAAa7C,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,wDAAAyV,YAAA,gBAAZH,CAAY,sCAIzBw3C,GAAcx3C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yDAAAyV,YAAA,gBAAVH,CAAU,MACxBke,GAASle,KAAOme,GAAEje,WAAA,CAAAxV,YAAA,oDAAAyV,YAAA,gBAATH,CAAS,iJACPI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAEpCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAME,KACtCb,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAKrDyoB,GAAerpB,aAAOqqB,IAAOnqB,WAAA,CAAAxV,YAAA,0DAAAyV,YAAA,gBAAdH,CAAc,sBA4DpB2xG,OA/CmC52G,IAMpC,IANqC,UACjDuG,EAAS,UACTw0C,EAAS,oBACT87D,EAAmB,qBACnBC,EAAoB,OACpBtwG,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,iDAE5B,OACEI,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD2S,eAACw/B,GAAW,CAAAnyC,SACV2S,eAACmB,GAAU,CACTrM,KAAMs/C,EAAY,iBAAmB,UACrCv0C,OAAQA,MAGZI,gBAAC61C,GAAW,CAAAzoD,SAAA,CACV2S,eAACwc,GAAM,CAAAnvB,SAAE+mD,EAAY,SAAW,WAC/BA,EACCp0C,eAAA,KAAA3S,SAAG,iIAKH2S,eAAA,KAAA3S,SAAG,4GAML2S,eAAC2nB,GAAY,CACXkB,UAAU,EACVxM,QAASA,IACP+3B,EAAY87D,GAAoB,GAAQC,IAE1CtwG,OAAM,GAAAE,OAAKF,EAAM,kDAAAE,OACfq0C,EAAY,mBAAqB,aAChC/mD,SAEF+mD,EAAY,sBAAwB,qCAG/B,ECtFhB,MAAM5zC,GAAYlC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,eAAXH,CAAW,iOAGZI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAIlCsQ,GACZA,EAAMC,MAAM2C,OAAOm0B,MAAM+E,uBAAuB97B,EAAMg5E,WAiC7C04B,OAdoB/2G,IAKrB,IALsB,UAClCuG,EAAS,MACT9X,EAAK,QACL4vF,EAAO,OACP73E,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,iCAC5B,OACEG,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAY43E,QAASA,EAAQrqF,SACxEvF,GACS,E,UCvBhB,MAAM0Y,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,eAAVH,CAAU,sEAGLI,GAASA,EAAMC,MAAM05B,YAAY/4B,KAIlD0+F,GAAO1/F,KAAOuzB,KAAIrzB,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAAXH,CAAW,sBAGlBm5F,GAAan5F,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,gDAAAyV,YAAA,eAAbH,CAAa,yBAG1Bke,GAASle,KAAOme,GAAEje,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,eAATH,CAAS,iHACPI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAEpCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAME,KACtCb,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAIrDwyB,GAAYpzB,aAAOke,IAAOhe,WAAA,CAAAxV,YAAA,+CAAAyV,YAAA,eAAdH,CAAc,oCACjBI,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMC,KAGjD+wG,GAAO/xG,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,eAARH,CAAQ,yBAGfwkE,GAAiBxkE,aAAOumE,IAASrmE,WAAA,CAAAxV,YAAA,oDAAAyV,YAAA,eAAhBH,CAAgB,iBAC3BI,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAE/DkH,GAAenzB,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,kDAAAyV,YAAA,eAAbH,CAAa,0DAClBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAErCzd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAGrCw1E,GAAgBxhG,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mDAAAyV,YAAA,eAAVH,CAAU,4DAoHjBgyG,OA/F2Bj3G,IAM5B,IAN6B,UACzCuG,EAAS,KACTxR,EAAI,SACJmkC,EAAQ,QACRg+E,EAAO,OACP1wG,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,0CACtB,WAAEyb,GAAeP,MAEhBy1F,EAAwBC,GAA6BzgG,mBAC1DugG,EAAQ74B,SA+BV,MAAMg5B,EAAwBl2E,GAAuBlsB,MACnDstB,GAAUA,EAAOlrB,QAAU8/F,IAEvBvhG,EAAUurB,GAAuBpiC,KAAIsnB,IAClC,IACFA,EACHmc,SAAUnc,EAAEhP,SAA+B,OAArBggG,QAAqB,IAArBA,OAAqB,EAArBA,EAAuBhgG,WAIjD,OACE1Q,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD4S,gBAAC+9F,GAAI,CAAA3wG,SAAA,CACH4S,gBAACw3F,GAAU,CAAApqG,SAAA,CACT2S,eAACwc,GAAM,CAAAnvB,SAAC,qCACR2S,eAAC0xB,GAAS,CAAArkC,SAAC,kBACX2S,eAAA,KAAA3S,SAAIkjH,EAAQjnH,WAEd0W,eAACqwG,GAAI,CAAAhjH,SAAC,wGAIN2S,eAAC8iE,GAAc,CACbrtD,aAAcxG,EAAQX,MAAKsoC,GAAKA,EAAE/a,WAClCqnC,kBApDR,SAA2B94D,GACzB,OACEpK,eAACowG,GAA0B,CACzBtoH,MAAOsiB,EAAKtiB,MACZ4vF,QAASttE,EAAKsG,MACd7Q,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIqK,EAAKsG,QAGpC,EA6CQ5oB,MAAM,yBACN0qC,SAAWqJ,IACT40E,EAA0B50E,EAASnrB,MAAM,EAE3CzB,QAASA,EACTpP,OAAQA,EACR6Q,MAAOzB,EAAQX,MAAKsoC,GAAKA,EAAE/a,aAE7B77B,eAAC8/F,GAAa,CAAAzyG,SACZ2S,eAACyxB,GAAY,CACXpV,QAAUxS,IACRA,EAAE0lB,iBAvDd,SAA+Bz1B,GAQ3B,IAR4B,eAC9B62G,EAAc,SACdC,EAAQ,MACRtnH,GAKDwQ,EACCwhB,EAAW,CACTxzB,MAAM,GAADiY,OAAK6wG,EAAQ,qBAClBlgG,MAAM,mBAAD3Q,OAAqBzW,EAAK,iBAAAyW,OAAgB4wG,KAEjDp+E,EAAS,CACPjpC,QACAwmH,cAAea,GAEnB,CAuCYE,CAAuB,CACrBF,eAAgBH,EAChBI,SAAUxiH,EACV9E,MAAOinH,EAAQjnH,OACf,EAEJ,iBAAAyW,OAAgBF,EAAM,yCAAwCxS,SAC/D,wBAKK,ECnKhB,MAAMyjH,GAAkBxyG,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAATH,CAAS,2DAK3BwwE,GAAiBxwE,KAAO6vB,GAAE3vB,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAATH,CAAS,6GA+BjByyG,OApBG13G,IAAsC,IAArC,KAAEgtC,EAAI,OAAExmC,KAAWO,GAAY/G,EAChD,OAAKgtC,GAASxmC,EAKZG,eAAC8wG,GAAe,CAAC,iBAAA/wG,OAAgBF,EAAM,kBAAmBO,EAAU/S,SACjEg5C,EAAKjuC,KAAI,CAAC44G,EAAUznF,IACnBvpB,eAAC8uE,GAAc,CAAAzhF,SACZ2jH,GAAQ,GAAAjxG,OADaF,EAAM,qBAAAE,OAAoBwpB,QAN/C,IAUW,ECdtB,MAAMyiD,GAAkB1tE,aAAOu+D,IAAyBr+D,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAhCH,CAAgC,iDACvCI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAG9CuS,GAAiBrC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAVH,CAAU,iHAQ3B2yG,GAAe3yG,aAAOylC,IAAMvlC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAbH,CAAa,4NACnBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAItCnsB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAE/B5rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAO7C9/B,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAWpDitC,GAAmBx5D,aAAOoB,IAAWlB,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAlBH,CAAkB,0BAGxBA,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAAbH,CAAa,uEAOVA,aAAO6oB,IAAgB3oB,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAAvBH,CAAuB,iHA4J9B4yG,OA9IY73G,IAMpB,IANqB,UAC1BuG,EAAS,UACTs5F,EAAS,KACT7yD,EAAO,GAAE,YACT8qE,EAAW,OACXtxG,EAAS,UACVxG,EACC,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,2CAGtB,KAAEuK,EAAI,QAAE85B,GAAY70B,mBAAQ,KACzB,CACLjF,KAAM4hB,iBACJqa,EAAKjuC,KAAIkvC,IAAC,IACLA,EAEH8pE,YAAY,GAADrxG,OAAKlG,GAAgB,CAC9BE,OAAQ,OACRC,UAAWstC,EAAE1zB,UAAU7a,QACvB,OAAAgH,OAAMlG,GAAgB,CACtBE,OAAQ,UACRC,UAAWstC,EAAE1zB,UAAU7a,QACvB,KAAAgH,OAAIlG,GAAgB,CACpBE,OAAQ,UACRC,UAAWstC,EAAE1zB,UAAUpb,WAG3B,CAAC,UAAW,gBAEd0rC,QAAS,CACP,CACEmI,SAAU,qBACV7vB,OAAQ,iBACR8vB,KAAMxyC,IAAe,IAAd,KAAEksC,GAAMlsC,EAQb,OANEkG,eAACowG,GAA0B,CACzBtoH,MAAOk+C,EAAKt1B,MACZgnE,QAAS1xC,EAAKF,IAAI0G,SAASkrC,QAC3B73E,OAAM,GAAAE,OAAKD,EAAU,KAAAC,OAAIimC,EAAKF,IAAI0G,SAASkrC,UAGnC,EAYd93E,UAAW,sBAEb,CACEysC,SAAU,QACVC,KAAMt+B,IAAA,IAAC,KAAEg4B,GAAMh4B,EAAA,OACbhO,eAAA,QAAM,wBAAsB,OAAM3S,SAAE24C,EAAKt1B,OAAa,EAExD8L,OAAQ,QACR5c,UAAW,SAEb,CACEysC,SAAU,cACV7vB,OAAQ,YACR8vB,KAAM5+B,IAAe,IAAd,KAAEs4B,GAAMt4B,EACb,MAAM,UAAEkG,GAAcoyB,EAAKF,IAAI0G,SAC/B,OACExsC,eAAC+wG,GAAS,CACR1qE,KAAM,CACJxsC,GAAgB,CACdE,OAAQ,QACRC,UAAW4Z,EAAU7a,QAEvBiH,eAACyhD,GAAS,CACRnlD,OAAQ,CAAEvC,OAAQ,CAAEhB,MAAO,UAAWP,IAAK,YAC3Cob,UAAWA,EACX/T,OAAQC,KAGZD,OAAQC,GACR,EAGNF,UAAW,eAEb,CACEysC,SAAU,eACVC,KAAMl7B,IAAA,IAAC,KAAE40B,GAAM50B,EAAA,OACbpR,eAAA,QAAM,wBAAsB,OAAM3S,SAAE24C,EAAKt1B,OAAa,EAExD8L,OAAQ,QACR5c,UAAW,aAIhB,CAACymC,EAAM8qE,EAAarxG,IAEvB,OAAIo5F,EAEAl5F,eAACW,GAAc,CAAAtT,SACb2S,eAACG,GAAO,CAACN,OAAQA,MAKnByP,kBAAQ+2B,GAERrmC,eAAC83D,GAAgB,CACfn4D,KACEM,gBAAA,QAAA5S,SAAA,CAAM,iDAC4C,IAChD2S,eAAA,KAAGlE,KAAK,iCAAgCzO,SAAC,eAAc,0DAI3D2R,OAAO,SACPa,OAAQC,IAMZE,eAACgsE,GAAe,CACdpsE,UAAWA,EACXC,OAAQC,EACRg9D,aAAcz2B,EAAKxrC,OAAOxN,SAE1B2S,eAACixG,GAAY,CAAC/sE,QAASA,EAAS95B,KAAMA,EAAMvK,OAAQC,KACpC,ECnMtB,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAVH,CAAU,+FACZI,GAAK,GAAAqB,OACdrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIwO,SACpD/rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAErCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAGlD+xG,GAAoB/yG,aAAO4yG,IAAY1yG,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAAnBH,CAAmB,uBAiH9B2oD,qBA7GmB5tD,IAQ3B,IAR4B,UACjCuG,EAAS,MACTyK,EAAK,SACLinG,EAAW,GAAE,OACbzxG,EAAS,SAAQ,eACjB0xG,EAAc,MACd5yG,EAAK,KACLvQ,GACDiL,EACC,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,0BACtB,WAAEyb,GAAeP,MAChBy2F,EAAeC,GAAoBzhG,mBAAS,OAC5C0hG,EAAcC,GAAmB3hG,mBAAS,OAC1C4hG,EAAgBC,GAAqB7hG,oBAAS,GAE/C8hG,EAAsBj9F,KAAKC,UAAUw8F,GAsB3C,SAASS,EAAcC,GACrBH,GAAkB,GAClBF,EAAgB,MAChBF,EAAiB,MACjBn2F,EAAW,CACTxzB,MAAM,GAADiY,OAAK3R,EAAI,sCAAA2R,OACViyG,EAAuB,sBAAqB,iBAEhDthG,MAAO,WAEX,CAYA,IAAIkvF,EAoBJ,OA9DAxvF,qBAAU,KAENuhG,EADItnG,EACY,QAEA,UAClB,GACC,CAACA,EAAOynG,IAsCTlS,EADmB,SAAjB8R,EAEA1xG,eAACswG,GAAiC,CAChCliH,KAAMA,EACNmiH,QAASiB,EACTj/E,SAxCN,SAA0B0/E,GACxBV,EAAeU,EACjB,IA2CIjyG,eAACiwG,GAAyC,CACxC77D,UAA4B,YAAjBs9D,EACXvB,qBA3CN,WACEwB,EAAgB,QAChBr2F,EAAW,CACTxzB,MAAM,GAADiY,OAAK3R,EAAI,oDACdsiB,MAAO,WAEX,EAsCMw/F,oBAAqB6B,EACrBlyG,OAAQC,IAMZG,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACtDukH,EACC5xG,eAAC6wB,GAAK,CACJE,gBAAgB,wCAChBC,OAAQ+gF,EACRvkF,aAAcoyE,EACd//F,OAAQA,IAER,KACJG,eAACqxG,GAAiB,CAChBnY,WAAYhoF,iBAAOsgG,GACnBnrE,KAAMirE,EACNzxG,OAAQC,EACRqxG,YAAaZ,GA5CnB,SAAqBA,EAASK,GAC5BiB,GAAkB,GAClBF,EAAgB,QAChBF,EAAiBlB,GACjBj1F,EAAW,CACTxzB,MAAM,GAADiY,OAAK6wG,EAAQ,kDAClBlgG,MAAM,GAAD3Q,OAAKwwG,EAAQjnH,MAAK,aAE3B,CAoC8B6nH,CAAYZ,EAASniH,OAErC,ICvHhB,MAAM8jH,GAAgB74G,IAA8C,IAA7C,QAAE3B,EAAO,SAAEw9B,EAAQ,YAAEi9E,EAAc,IAAI94G,EAC5D,MAAM+4G,EAAoBj1F,cAAI3T,OAAOmH,OAAOjZ,IACtC26G,EAAqBl1F,cAAI3T,OAAOmH,OAAOukB,IAE7C,OAAO3e,oBAAU7e,GAAS,CAACgZ,EAAOzpB,KAChC,IAAIqrH,EAOA/D,EANAG,mBAAS0D,IAAsB1D,mBAASh+F,KAC1C4hG,EAAiBF,EACZ1hG,EAAQ0hG,EAAqB,IAC9B,GAKJ1D,mBAAS2D,IACT3D,mBAAS4D,IACT5D,mBAASx5E,EAASjuC,MAElBsnH,EAAe+D,EAAgBp9E,EAASjuC,GAAOorH,EAAsB,KAGvE,MAAMhE,EAAqBniG,cACzBsuB,GAAuBlsB,MAAKoR,GAAKA,EAAEhP,QAAUzpB,IAC7C,QACA,0BAEF,MAAO,CACLA,MACAonH,qBACA39F,MAAOg+F,mBAAS4D,GAAgBA,EAAe,KAC/CC,WAAYH,EACZ5D,WAAY99F,EACZ69F,eACA+C,SAAWhiG,kBAAQ6iG,GAaf,GAZAA,EACGlhG,QAAO+N,GAAKA,EAAE04D,UAAYzwF,IAC1BmR,KAAI4mB,IACI,IACFA,EACHqvF,qBACAz6F,UAAW,CACTpb,IAAKwmB,EAAEwzF,QACPz5G,MAAOimB,EAAEyzF,eAKtB,GACD,EC5CWz0G,eAAe00G,KAA8C,IAAdhnG,EAAM9Q,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACtE,MAAM,YACJ6Q,EAAW,QACXkE,EAAO,UACPD,EAAS,SACT/D,EAAQ,KACRvP,EAAI,SACJuzG,EAAQ,KACRzoG,EAAI,gBACJyrG,GACEjnG,EAEJ,OAAKinG,OChBsC30G,WAItC,IAJ6C,YAClDyN,EAAW,OACXC,EAAM,SACNC,GACDtS,EACC,MACI,UAAWqS,GACX,cAAeA,GACf,YAAaA,GACd6U,MAAMvM,QAAQtI,EAAOxV,cAQDoU,GAAIwD,KAAK,IAAD/N,OAAK4L,EAAQ,sBAAsBD,EAAQ,CACxEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,KATPN,aAAiB,0IAAD/J,OACqH8U,KAAKC,UAC7IpJ,IAOc,EDYLknG,CAA8B,CACzCnnG,cACAE,WACAD,OAAQ,CACNC,WACA+D,YACAC,UACAzZ,MAAOgR,EAAK9O,KAAImW,GAAKA,EAAE7B,QACvBijG,mBCjB+C3xG,WAIhD,IAJuD,YAC5DyN,EAAW,OACXC,EAAM,SACNC,GACD7R,EACC,MACI,cAAe4R,GACf,YAAaA,GACb,cAAeA,SAQIpB,GAAIwD,KAAK,IAAD/N,OACzB4L,EAAQ,iCACZD,EACA,CACEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAGxBrB,KAbPN,aAAiB,+FAAD/J,OAC0E8U,KAAKC,UAClGpJ,IAWc,ED7BLmnG,CAAwC,CACnDpnG,cACAE,WACAD,OAAQ,CACNC,SAAUwK,SAASxK,EAAU,IAC7B+D,UAAW7V,GAAgB,CACzBE,OAAQ,aACRC,UAAW0V,IAEbC,QAAS9V,GAAgB,CAAEE,OAAQ,aAAcC,UAAW2V,IAC5DwU,UAAW/nB,EAAKsQ,MAChBijG,aAgBR,CElCO,MAAM7xC,GAAiBA,CAC5BryD,EACAE,EACA0C,EACAjS,EACAuzG,EACA/7F,KAEA,MAAOxJ,EAAM4zD,GAAYhuD,sBAClBqwC,EAAgBue,GAAsB5uD,oBAAS,IAC/C3F,EAAOw0D,GAAa7uD,mBAAS,MAC9B3U,EAAQgC,cAAYpE,GAASA,EAAMoC,QAEnCs3G,EAAuB,OAALt3G,QAAK,IAALA,OAAK,EAALA,EAAQ,8BAC1BsU,EAAYiE,EACdA,EAAUpb,IACVE,OACG6B,MAAM,QACNR,SACD2V,EAAckE,EAChBA,EAAU7a,MACVL,OACG4B,QAAQ,QACRP,SA0DP,OAvDAqW,qBAAU,KACR,WACE,GAAM3E,GAAiBE,GAAc0C,EAAYxT,OAAQ,CACvD,IAAI6Q,EAAS,CACXD,cACAE,WACA+D,YACAC,UACAvT,OACA8K,KAAMmH,EACNskG,mBAGF,IACE/zC,GAAmB,GAEd1tD,iBAAOy+F,KACVjkG,EAAS,IAAKA,EAAQikG,aAGxB,MAAMmD,QAA4BC,GAAYrnG,GACxCsnG,QAA6BD,GAAY,IAC1CrnG,EACHgE,UAAWxV,GAAkBwV,GAC7BC,QAASzV,GAAkByV,KAEvBuoD,GHXAxgE,EGYJo7G,EHZa59E,EGab89E,EHZH,IACFt7G,EACHkuE,QAAS,IACJluE,EAAQkuE,QACXqtC,aAAcf,GAAc,CAC1Bx6G,QAASA,EAAQkuE,QAAQj1D,OACzBukB,SAAUA,EAAS0wC,QAAQj1D,UAG/B63D,cAAe9wE,EAAQ8wE,cAAcpwE,KAAI,CAACyS,EAAG0e,KACpC,IACF1e,EACHooG,aAAcf,GAAc,CAC1Bx6G,QAASmT,EAAE8F,OACXukB,cACoCp6B,IAAlCo6B,EAASszC,cAAcj/C,GACnB2L,EAASszC,cAAcj/C,GAAO5Y,OAC9B,CAAC,EACPwhG,YAAatnG,EAAE49D,iBGJfzK,EAAS9F,GACT0G,GAAmB,EACrB,CAAE,MAAO/0D,GACPg1D,EAAUh1D,GACVm0D,EAAS,MACTY,GAAmB,GACnBU,cAAUC,IACRA,EAAM1gB,WAAW,kCAAmCnzC,GACpD5B,aAAiBD,EAAE,GAEvB,CACF,CH1BS,IAACnS,EAASw9B,EG2BnB0pC,GAAmB,EACpB,EA1CD,EA0CI,GACH,CACDnzD,EACAE,EACAvP,EACAiS,EACAsB,EACAD,EACAigG,EACAgD,IAGK,CAACvoG,EAAMi2C,EAAgBh2C,EAAM,E,aC3EtC,MAAM7J,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,eAAVH,CAAU,mBAGtBihC,GAAejhC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAVH,CAAU,oBAChBI,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KAEjD2zB,GAAclgD,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAATH,CAAS,wFACZI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAEpCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KACtCnsB,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAGrDg0G,GAAkB50G,aAAO6/C,IAAU3/C,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAjBH,CAAiB,yBAGnCotD,GAAOptD,aAAOogD,IAASlgD,WAAA,CAAAxV,YAAA,mBAAAyV,YAAA,eAAhBH,CAAgB,yBAGvB8pC,GAAW9pC,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,eAAZH,CAAY,wCAIvBmgD,GAAYngD,KAAOkT,EAAChT,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,eAARH,CAAQ,iHAIbI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,YAGrCisB,IA+FO8e,OA/EW7tD,IAKZ,IAAD85G,EAAAC,EAAA,IALc,UACzBxzG,EAAS,OACTC,EAAS,SAAQ,eACjB8hB,EAAc,mBACd0xF,GACMh6G,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,iBACtB,WAAEyb,GAAeP,KASvB,MAAMu4F,EACe,yBAAnB3xF,GACmB,mBAAnBA,EACF,OACE1hB,gBAACO,GAAS,CAAAnT,SAAA,CACR2S,eAACkzG,GAAe,CACdn4G,OAAQu4G,EAAiB,QAAU,QACnCt0G,OACEgB,eAACw+C,GAAW,CAAAnxD,SACTimH,EAAc,iCAAAvzG,OAGU,uBAAnB4hB,EAA0C,MAAQ,KAAI,KAAA5hB,OACf,QADeozG,EACpDjiH,GAAsBywB,UAAe,IAAAwxF,OAAA,EAArCA,EAAuC7pH,MAAK,iBAGxDuX,QACEZ,gBAACs/B,GAAY,CAAAlyC,SAAA,CACX2S,eAACo/B,GAAQ,CACPC,SAAUgtB,GAAgB1qC,GAAgB4xF,IAAI16E,KAC9Ch5B,OAAQA,IAETwsD,GAAgB1qC,GAAgB4xF,IAAIh3E,KAAKxlC,SACxCkJ,gBAACw+C,GAAS,CACR3iD,KAAMuwD,GAAgB1qC,GAAgB4xF,IAAIh3E,KAAK+O,IAC/CjvB,QAjCd,SAA0BxS,GACxByR,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKF,EAAM,oBAChB6Q,MAAO,gBAEX,EA4Bc+7B,IAAI,sBACJvf,OAAO,SACP,iBAAAntB,OAAgBF,EAAM,KAAAE,OAAI4hB,EAAc,oBAAmBt0B,SAAA,CAE3D2S,eAACooC,GAAQ,CAACtzC,KAAK,gBAAgB+K,OAAQA,IAAU,mBAAAE,OAC7BssD,GAAgB1qC,GAAgB4xF,IAAIh3E,KAAK1D,YAKrEzqC,KAAMuzB,EACN9hB,OAAQA,IAEVG,eAAC0rD,GAAI,CACH7qD,QACqB,wBAAnB8gB,GAA6C0xF,EAEzChnD,GAAgB1qC,GAAgB6xF,KAAK36E,KADrCwzB,GAAgB1qC,GAAgB6xF,KAAKC,eAG3Cz0G,OAAM,OAAAe,OACe,uBAAnB4hB,EAA0C,MAAQ,KAAI,KAAA5hB,OACf,QADeqzG,EACpDliH,GAAsBywB,UAAe,IAAAyxF,OAAA,EAArCA,EAAuC9pH,MAAK,aAChDizC,KACE8vB,GAAgB1qC,GAAgB6xF,KAAKj3E,KAAKxlC,QACtC,IACKs1D,GAAgB1qC,GAAgB6xF,KAAKj3E,KACxC17B,QAAQ,mBAADd,OAAqBssD,GAAgB1qC,GAAgB6xF,KAAKj3E,KAAK1D,OAExE,KAENzqC,KAAMuzB,EACN9hB,OAAQC,MAEA,ECtHhB,MAAM4/D,GAASphE,KAAO4sD,OAAM1sD,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,eAAbH,CAAa,uBAGtB44D,GAAU54D,KAAO64D,WAAU34D,WAAA,CAAAxV,YAAA,8CAAAyV,YAAA,eAAjBH,CAAiB,oCAClBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtDkgC,GAAQrhC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4CAAAyV,YAAA,eAAVH,CAAU,mBA2HTo1G,OAvHmCr6G,IAI3C,IAADqlB,EAAA,IAJ6C,UACjD9e,EAAY,GAAE,OACdC,EAAS,YACNnB,GACJrF,EACC,MAAM,YAAEoS,EAAW,SAAEE,EAAQ,KAAEvP,EAAI,UAAEwX,GAAclV,GAC7C,UAAEwM,EAAS,mBAAEsX,GAAuB3B,KACpCxS,EAA4B,QAAjBqQ,EAAGxT,EAAUhE,YAAI,IAAAwX,OAAA,EAAdA,EAAgBrQ,YAC9BslG,EAAoBzoG,EAAU9U,cAAgB,OAC9CA,EACJ8U,EAAU9U,cAAsC,SAAtBu9G,EACtBtlG,EAAYC,MAAKC,GAAKA,EAAE7B,QAAUinG,IAClC,CACE9rH,GlQrBqB,ekQsBrBuG,KAAM,eACNm9B,YAAaqoF,IAGf9zG,EAAU,GAAAC,OAAMF,EAAM,2CACrBg0G,EAAgBC,GAAqB9jG,mBAAS,OAE9C+jG,EAA4B1zD,EAAgBh2C,GAASyzD,GAC1DryD,EACAE,EACA0C,EACAjS,EACAy3G,EACAjgG,GAGF,SAAS29F,EAAeyC,GACtBF,EAAkBE,EACpB,CAEA,GAAI3zD,GAAkBlmC,gBAAM45F,GAC1B,OACE/zG,eAACY,GAAa,CACZG,gBAAiBs/C,EACjBv/C,cAAeqZ,gBAAM45F,GACrB/yG,cACEhB,eAACN,GAAU,CACTC,KACEM,gBAAA,QAAA5S,SAAA,CAAM,uDAEJ2S,eAAA,KAAGlE,KAAK,iCAAgCzO,SAAC,eAAc,0DAI3D2R,OAAO,SACPa,OAAQC,MAOlB,IAAIm0G,EAAmB,GACnBC,EAAWH,EAA2BvrC,cAAcl6D,MACtDzD,GAAKA,EAAEoF,SAAW7T,EAAKvU,KAEpBynB,kBAAQ4kG,KACXD,EAAmBtlG,sBACjBnF,OAAOmH,OAAOzE,cAAIgoG,EAAU,eAAgB,CAAC,IAAI97G,KAC/Cu4G,GAAkBA,EAAeW,aAIvC,MAAM6C,EACkB,SAAtBR,EACII,EAA2BnuC,QAC3BmuC,EAA2BvrC,cAAcl6D,MACvCzD,GAAK8oG,IAAsB9oG,EAAEzO,QAE/B23G,EAA2BvrC,cAAcl6D,MACvCzD,GAAKA,EAAEoF,SAAW7T,EAAKvU,KAG/B,OACEmY,eAACU,GAAiB,CAAArT,SAChB4S,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACy/D,GAAM,CAAAryE,SAAA,CACL2S,eAACo0G,GAA2B,CAC1BhqG,KACIhU,EACE+9G,EAAiBlB,aACjBc,EAA2BnuC,QAAQqtC,aAEzC/E,mBAAoB93G,EACpBiqD,eAAgBA,EAChBxgD,OAAQC,EACRyxG,eAAgBA,EAChB5B,SAAUkE,IAEZ5zG,gBAAC0/B,GAAK,CAAAtyC,SAAA,CACJ2S,eAACk3D,GAAO,CAAA7pE,SAAC,yBACT2S,eAACknD,GAAU,CAACvlC,eAAgBa,EAAmBb,uBAGhDsyF,EAAiBp5G,OAClBmF,eAACq0G,GAAkB,CACjB/C,SAAU2C,EACV7lH,KAAK,gCACLmjH,eAAgBA,EAChB1xG,OAAQC,EACR+zG,eAAgBA,EAChBxpG,MAAOA,IAEP,SAEY,EC4CT/N,OAlLAjD,IAQR,IARS,KACd+Q,EAAI,cACJ0wD,EAAa,aACb2K,EAAY,MACZ9mE,EAAK,mBACLuvG,EAAkB,aAClB93G,EAAY,YACZk+G,GACDj7G,EACC,MAAMk7G,EAAiC,SAAjBn+G,EAChBi9D,EAAS,CACb+H,OAAQ,SAAS7/C,GACfA,EAAMgU,iBACN,MAAM,OAAErC,GAAW3R,EACnBu/C,EAAc5tC,EAAOtR,SACvB,EACAy/C,SAAU,SAAS9/C,GACjBA,EAAMgU,iBACNurC,EAAc,KAChB,GAGI05C,EAAWpqG,EAAKqqG,aAAar8G,KAAI,CAACmW,EAAGgb,KAAK,CAC9C04B,EAAG1zC,EAAEktB,YACL+oB,EAAGj7B,EACHsS,SAAUnmB,kBAAQ+vD,EAAcl3D,EAAErV,UAG9Bw7G,EAAiBtqG,EAAKuqG,WAAWv8G,KAAI,CAACmW,EAAGgb,KAAK,CAClD04B,EAAG1zC,EAAEktB,YACL+oB,EAAGj7B,EACHsS,SAAUnmB,kBAAQ+vD,EAAcl3D,EAAErV,UAG9B07G,EAAa,CACjBj5C,kBAAkB,EAClBvH,OAAQ,UACRhmE,KAAM,gCACN4M,KAAMu5G,EAAgB,OAAS,SAC/Bt1D,MAAO,CACLoU,UAEFjpD,KAAMoqG,EACN3sH,GAAI,QAGAgtH,EAAmB,CACvBl5C,kBAAkB,EAClBvH,OAAQ,UACRhmE,KAAK,GAAD2R,OAAuB,OAAlBmuG,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoB9/G,KAAI,6BACjC4M,KAAM,OACNikD,MAAO,CACLoU,UAEFjpD,KAAMsqG,EACN7sH,GAAI,eAGN,MAAO,CACL4tC,MAAO,CACL3M,MAAO,CACLoZ,WAAYvjC,EAAMC,MAAMC,QAAQzQ,KAChC+zC,SAAU,KAGd74C,MAAO,CACLuvC,KAAM,IAERooB,MAAO,CACL,CACEoE,WAAYj7C,EAAKuqG,WAAWv8G,KAAIic,GAAKA,EAAEnb,OACvC4sD,kBAAmB,KACnBF,UAAWjnD,EAAM2C,OAAO2a,IAAIC,UAC5BqqC,UAAW,EACXf,OAAQ,CACNvD,EAAG,GACHnD,UAAW,WAGT,MAAM,GAAN/+C,OAAUlG,GAAgB,CACxBE,OAAQ,MACRC,UAAWgzB,KAAKtc,QAEpB,EACAoY,MAAO,CACLoZ,WAAW,GAADniC,OAAKpB,EAAMC,MAAMk0B,UAAU1kC,KAAI,cACzCq3D,WAAY9mD,EAAMC,MAAMk0B,UAAU7zB,QAAQQ,SAKlDshD,MAAO,CACL,CACEiF,cAAe,EACf7E,IAAK,EACLC,IAAK,EACL93D,MAAO,CACLyN,SAAS,GAEXgvE,aAAc,EACdvgB,OAAQ,CACNzrD,OAAO,cACP+uB,MAAO,CACLoZ,WAAW,GAADniC,OAAKpB,EAAMC,MAAMk0B,UAAU1kC,KAAI,cACzCq3D,WAAY9mD,EAAMC,MAAMk0B,UAAU7zB,QAAQQ,SAKlD2mD,OAAQ,CACNH,MAAO,QACPlvD,SAAS,EACT6kE,aAAc,GACdC,UAAW,CACTpW,WAAY9mD,EAAMC,MAAMC,QAAQI,QAAQkJ,MAE1C2zD,OAAQ,aACRxZ,cAAe,SACfyZ,aAAc,EACdC,YAAa,EACbC,cAAe,EAEfC,aAAc,GAEhBr+B,QAAS,CACP9mC,SAAS,EACTD,SAAS,EACTE,gBAAiB,KACjBC,QAAQ,EACRC,YAAa,EACbC,aAAc,EACdC,SAAS,EACTwvD,WAAY,SAASC,EAAGC,EAAG7H,GACzB,OAAO6C,GAA2B,CAChCC,gBAAiB/0B,KAAK+5B,YAAYF,EAAGC,EAAG7H,GACxC+C,aAAcpmD,OAAOorD,SAEzB,EACAlI,UAAW,WACT,MnNtE6Bg2D,EAAC14C,EAAW8xC,KAC/C,MAAM6G,EAA0D,SAApC34C,EAAUn9B,OAAO8vD,YAAYlnG,GAGnDmtH,EAF4D,SAAtC54C,EAAUn9B,OAAO8vD,YAAY/zF,KAGrD,+CACA,gCACJ,MAAM,2FAAN+E,OAAkGlG,GAChG,CACEE,OAAQ,MACRC,UAAWoiE,EAAUxgD,WAExB,uBAAA7b,OACCg1G,EAAsB,eAAmC,OAAlB7G,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoB9/G,KAAI,2CAAA2R,OACvBi1G,EAAkB,MAAAj1G,OAAKq8D,EAAUna,EAAEgD,QAC3E,GACD,+BmNsDY6vD,CAAsB9nF,KAAKiyB,MAAOivD,EAC3C,GAEF7nD,YAAa,CACXiW,KAAM,CACJC,cAAc,EACd3W,UAAWjnD,EAAM2C,OAAO2a,IAAI6b,aAC5BkC,OAAQ,CACNjjC,SAAS,EACTy8D,OAAQ,SACRL,UAAWx0D,EAAM2C,OAAO2a,IAAI6b,aAC5B8tB,UAAWjnD,EAAM2C,OAAO2a,IAAI6b,aAC5B0uB,OAAQ,CACN4U,OAAQ,CACNjI,UAAWx0D,EAAM2C,OAAO2a,IAAI6b,aAC5B8tB,UAAWjnD,EAAM2C,OAAO2a,IAAI6b,iBAKpCvY,OAAQ,CACN4qC,YAAaxrD,EAAM2C,OAAO2a,IAAIwO,MAC9BkyC,cAAe,GACft7D,MAAO1C,EAAM2C,OAAO2a,IAAIwO,MACxB+7B,OAAQ,CACN4U,OAAQ,CACN/5D,MAAO1C,EAAM2C,OAAO2a,IAAIwO,MACxB0/B,YAAaxrD,EAAM2C,OAAO2a,IAAIwO,UAKtCwU,OAAQs1E,EACJ,CAACK,GACDN,EACA,CAACM,EAAYC,GACb,CAACA,GACN,EC/KH,MAAMI,GAAc32G,aAAOyhD,IAAMvhD,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAbH,CAAa,2DAGhBI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAUzzB,MAAMwrB,KA6D7Co8B,qBAxDiB5tD,IAczB,IAd0B,UAC/BuG,EAAS,KACTwK,EAAO,CAAC,EAAC,eACTi2C,GAAiB,EAAK,cACtBya,EAAgBA,SAEf,aACD2K,EAAY,OACZ5lE,EAAS,SAAQ,MACjBlB,EAAK,KACLvC,EAAI,mBACJ8xG,EAAkB,aAClB93G,EAAY,YACZk+G,GAAc,GACfj7G,EACC,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,uBACtBq1G,EAAc7lG,mBAAQ,KACnB,CACLjF,OACA0wD,gBACA2K,eACA9mE,QACAuvG,qBACA93G,eACAk+G,iBAED,CACDlqG,EACA0wD,EACA2K,EACA9mE,EACAuvG,EACA93G,EACAk+G,IAGF,OACEt0G,eAACi1G,GAAW,CACVx/E,MAAO,CACLn5B,OAAQkkD,GAAe00D,GACvBrtH,GAAI,qBACJw4D,kBAEFzgD,UAAWA,EACXC,OAAQC,GACR,ICtCC,MCNMq1G,GAAuB97G,IAY7B,IAZ8B,WACnC6V,GAAa,EAAI,gBACjBkmG,GAAkB,EAAI,SACtBzF,EAAQ,aACRv5G,EAAY,YACZiY,GAODhV,EACC,MAAMoS,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,YAGhD,UAAET,GAAc2V,KAChBnR,EAAYxE,EAAUwE,UAEtBC,EAAUzE,EAAUyE,QAC1B,IAAIjE,EAIA,CACFgE,YACAC,WAMF,OAJMggG,IACJjkG,EAAS,IAAKA,EAAQikG,aAGjB1jG,oBACL,CACE,iBACA,CAAEyD,YAAWC,UAAStB,cAAajY,eAAcu5G,cAEnD,IACMyF,EDrBwBp3G,WAIM,IAJC,YACvCyN,EAAW,OACXC,EAAM,SACNC,GACkB7R,EAIlB,aAHuBwQ,GAAIwD,KAAK,IAAD/N,OAAK4L,EAAQ,gBAAgBD,EAAQ,CAClEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,IAAI,ECcPirG,CAAmB,CACxB5pG,cACAE,WACAD,OAAQ,IACHA,EACHtV,eACAF,MAAOmY,EAAYjW,KAAImW,GAAKA,EAAE7B,WD3CE1O,WAIK,IAJE,YACjDyN,EAAW,OACXC,EAAM,SACNC,GAC2BtS,EAQ3B,aAPuBiR,GAAIwD,KAAK,IAAD/N,OACzB4L,EAAQ,2BACZD,EACA,CACEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAGxBrB,IAAI,ECmCPkrG,CAA6B,CAClC7pG,cACAE,WACAD,OAAQ,IACHA,EACHC,WACA+D,UAAW7V,GAAgB,CACzBE,OAAQ,aACRC,UAAW0R,EAAOgE,YAEpBC,QAAS9V,GAAgB,CACvBE,OAAQ,aACRC,UAAWtB,KAAOgT,EAAOiE,SAASyuD,IAAI,EAAGh3E,KAE3C+8B,UAAW/tB,MAKnB,CACEW,UACI0U,KACAE,KACAvV,KACW,OAAXiY,QAAW,IAAXA,MAAaxT,SACfqU,GAEL,EC/EGwwD,GAASphE,KAAO4sD,OAAM1sD,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAbH,CAAa,iBAGtB44D,GAAU54D,KAAO64D,WAAU34D,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,gBAAjBH,CAAiB,oCAClBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtDkgC,GAAQrhC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAVH,CAAU,mBAuHTi3G,OAnHwBl8G,IAKhC,IAADqlB,EAAA,IALkC,UACtC9e,EAAY,GAAE,aACdxJ,EAAY,OACZyJ,EAAS,SAAQ,KACjBzD,GACD/C,EACC,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gCACrB4lE,EAAcwC,GAAmBj4D,mBAAS,OAC1C6jG,EAAgBC,GAAqB9jG,mBAAS,MAC/C3U,EAAQgC,cAAYpE,GAASA,EAAMoC,QACnC+5G,EAAuB,OAAL/5G,QAAK,IAALA,OAAK,EAALA,EAAQ,+BAE1B,UAAE6P,EAAS,mBAAEsX,GAAuB3B,KACpCxS,EAA4B,QAAjBqQ,EAAGxT,EAAUhE,YAAI,IAAAwX,OAAA,EAAdA,EAAgBrQ,YAC9B6/F,EAAgC,OAAX7/F,QAAW,IAAXA,OAAW,EAAXA,EAAaC,MAAKC,GAAKA,EAAE7B,QAAUtW,KAG5DgU,KAAMorG,EACNjxF,UAAW87B,EAAc,QACzBnM,GACEihE,GAAqB,CACvBC,kBACAzF,SAAUkE,EACVz9G,eACAiY,gBASF,MAAMonG,EAAkBpmG,mBAAQ,IAC1BC,kBAAQkmG,GACH,IAED/vC,EACJ+vC,EAAkBb,WAAWrmG,MAAK0Q,GAAKA,EAAE9lB,OAASusE,IAAcp4D,SAChE4S,kBAAQu1F,EAAkBb,WAAWv8G,KAAIyS,GAAKA,EAAEwC,aAClDjV,KAAI4mB,IAAC,IACFA,EACHqvF,mBAAoBniG,cAClBsuB,GAAuBlsB,MAAKoR,GAAKA,EAAEhP,QAAUsO,EAAE04D,UAC/C,QACA,0BAEF9jE,UAAW,CACTpb,IAAKwmB,EAAEwzF,QACPz5G,MAAOimB,EAAEyzF,gBAGZ,CAAC+C,EAAmB/vC,IAEvB,OACExlE,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD4S,gBAACy/D,GAAM,CAAAryE,SAAA,CACL2S,eAACY,GAAa,CACZG,gBAAiBs/C,EACjBv/C,cAAeozC,GAAWhzC,sBAAYs0G,GACtCx0G,cACEhB,eAACN,GAAU,CACTC,KACEM,gBAAA,QAAA5S,SAAA,CAAM,iDAC4C,IAChD2S,eAAA,KAAGlE,KAAK,iCAAgCzO,SAAC,eAAc,0DAI3D2R,OAAO,SACPa,OAAQC,IAGZe,QACEb,eAAC01G,GAAgB,CACftrG,KAAMorG,EACNn1D,eAAgBA,EAChBya,cAAemN,EACfxC,aAAcA,EACd5lE,OAAQC,EACRouG,mBAAoBA,EACpB93G,aAAcA,EACdk+G,YAAac,IAGjBv1G,OAAQC,IAEVG,gBAAC0/B,GAAK,CAAAtyC,SAAA,CACJ2S,eAACk3D,GAAO,CACNt3D,UAAa61G,EAAgB56G,OAAS,KAAO,iBAAiBxN,SAC/D,mBAGD2S,eAACknD,GAAU,CAACvlC,eAAgBa,EAAmBb,uBAGhD8zF,EAAgB56G,OACjBmF,eAACq0G,GAAkB,CACjB/C,SAAUmE,EACVlE,eAxER,SAAwByC,GACtBF,EAAkBE,EACpB,EAuEQ5lH,KAAK,qBACLyR,OAAQC,EACRuK,MAAO6pC,EACP2/D,eAAgBA,IAEhB,OACA,ECjHV,MAAM8B,GAAsBr3G,aAAOkrE,IAAchrE,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAArBH,CAAqB,mBACrCI,GAASA,EAAMC,MAAM+/B,KAAKE,MA2EvBg3E,OAlESv8G,IAGI,IAHH,UACvBuG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,qBACtBhE,EAAWob,gBACX,mBAAEuL,EAAkB,oBAAEL,EAAmB,UAAEjX,GAAc2V,KACzDzqB,EAAeosB,EAAmBpsB,aAClCurB,EACJ91B,EAAiC22B,EAAmBb,gBAChDvlB,EAAOiB,cAAapE,GAA6BA,EAAMmD,OACvDqP,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDtQ,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxDw6G,EAA+B,OAALx6G,QAAK,IAALA,OAAK,EAALA,EAAQ,iCAElCy6G,EAAgBD,EAClBhqH,EACA6nD,eAAK7nD,EAAkC,CAAC,mBACtC69E,EAAOlgE,OAAOmH,OAAOmlG,GAAe19G,KAAIuqD,IACrC,CACL96D,GAAI86D,EACJv1D,KAAM+0B,EAAoB,CACxBd,gBAAiBn2B,EAAqBG,iBACtCs2B,eAAgBghC,IAElBr5D,MAAO0C,EAA6B22D,OAIxC,OACE1iD,gBAAA,OAAKL,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACjD2S,eAAC21G,GAAmB,CAClBlsC,aAAc9nD,EACd+nD,KAAMA,EACN7pE,OAAO,6BAETI,gBAACmiC,KAAM,CAAA/0C,SAAA,CACJwoH,EACC71G,eAAC+mB,KAAK,CACJ6jD,OAAK,EACLx9E,KAAI,IAAA2S,OAAM9U,EAAsB,KAAA8U,OAAI7U,EAAqBG,iBAAgB,KAAA0U,OAAIlU,EAAiCE,gBAAiBsB,SAE/H2S,eAACu1G,GAAuB,CAACn5G,KAAMA,EAAMhG,aAAcA,MAEnD,KACJ4J,eAAC+mB,KAAK,CACJ35B,KAAI,IAAA2S,OAAM9U,EAAsB,KAAA8U,OAAI7U,EAAqBG,iBAAgB,MAAA0U,OAAKlU,EAAiCC,qBAAoB,MAAKuB,SAExI2S,eAAC0zG,GAAkC,CACjCjoG,YAAaA,EACbE,SAAUA,EACV9P,SAAUA,EACVO,KAAMA,EACNwX,UAAW1I,EAAU0I,mBAIvB,EClGuB,CAAC,SAAU,eAAgB,QAAQ7sB,QAClE,CAACC,EAAQC,KACPD,EAAOC,GAAOA,EACPD,IAET,CAAC,GALI,MC4EM+uH,GAAsBA,CACjC3rG,EACAgyD,EACAwuB,EACAv8E,EACA2nG,KACI,IAADC,EACH,MAAMC,EAAa9rG,EAAKkE,MAAK0gC,GAAKA,EAAE68C,UAAYzvB,EAAUhuE,OAEpD+nH,EAAgC,OAAVD,QAAU,IAAVA,GAAwB,QAAdD,EAAVC,EAAYlrB,oBAAY,IAAAirB,OAAd,EAAVA,EACxB79G,KAAIisD,IAAW,IAAD+xD,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACd,MAAMC,EAAgC,OAAXroG,QAAW,IAAXA,OAAW,EAAXA,EAAaC,MAAKC,GAAKA,EAAE1mB,KAAOw8D,EAAOjoD,OAClE,MAAO,CACLhO,KAAwB,OAAlBsoH,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBtoH,KAC1BvG,GAAIw8D,EAAOjoD,KACXmvB,YAA+B,OAAlBmrF,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBnrF,YACjC+/D,OAAQ11D,qBAA2B,QAAjBwgF,EAAC/xD,EAAO54D,iBAAS,IAAA2qH,GAAO,QAAPC,EAAhBD,EAAkB7rB,aAAK,IAAA8rB,OAAP,EAAhBA,EAAyBjrB,QAAU,MACtDurB,MACoB,QAAjBL,EAACjyD,EAAO54D,iBAAS,IAAA6qH,GAAO,QAAPC,EAAhBD,EAAkB/rB,aAAK,IAAAgsB,GAAvBA,EAAyB/rB,SACzBhhF,OAAOmH,OAAuB,QAAjB6lG,EAACnyD,EAAO54D,iBAAS,IAAA+qH,GAAO,QAAPC,EAAhBD,EAAkBjsB,aAAK,IAAAksB,OAAP,EAAhBA,EAAyBjsB,SAAS3vF,OAC9CsiB,cAAI3T,OAAOmH,OAAO0zC,EAAO54D,UAAU8+F,MAAMC,UACzChhF,OAAOmH,OAAO0zC,EAAO54D,UAAU8+F,MAAMC,SAAS3vF,OAC9C,EACP,IAEFoW,QACCg8B,IACG+oE,GAA+B,SAAdprB,GAAwB39C,EAAEplD,KAAO+iG,EAAU/iG,OAC3DolD,EAAE7+C,OAGJwoH,EACJ14F,gBAAMi4F,EAAqB,WAA+B,OAAnBA,QAAmB,IAAnBA,OAAmB,EAAnBA,EAAqBt7G,SAAU,IACtE,EACIg8G,EAA0BzsG,EAAK6G,QAAO+9B,GAC1Ct2C,KAAOs2C,EAAE68C,SAASirB,eAAep+G,KAAiB,OAAVw9G,QAAU,IAAVA,OAAU,EAAVA,EAAYrqB,YAkBtD,O1N4KuC,SACvCkrB,EACAC,GAEI,IADJC,EAAcr8G,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAEjB,MAAM,sJAANmF,OAIIg3G,EACC3+G,KAAIgE,IACH,MAAMuyG,EAAkB9sD,GAAmB,CACzCt2B,YAAanvB,EAAKmvB,YAClB+V,MAAO,KAET,MAAM,sEAANvhC,OAC2D4uG,GAAe5uG,OAAG3D,EAAKhO,KAAI,OAAA2R,OAAM3D,EAAKkvF,OAAM,cAExG9hE,KAAK,IAAG,oGAAAzpB,OACkFi3G,EAAe/xD,QAC1G,GACD,mCAAAllD,OAEGk3G,EAAc,2FAAAl3G,OAC+Ek3G,EAAehyD,QACxG,GACD,yBACD,GAAE,+BAIZ,C0N3MSiyD,CACLf,EACAS,GAhBCZ,GAA8B,SAAdprB,GAA0BisB,EACvC15F,cACE05F,EAAwBz+G,KAAIisD,IAAW,IAAD8yD,EAAAC,EAAAC,EACpC,MAAMC,GACkD,QAAtDH,EAAA9yD,EAAO2mC,aAAa18E,MAAK2+B,GAAKA,EAAE7wC,OAASwuF,EAAU/iG,YAAG,IAAAsvH,GAAW,QAAXC,EAAtDD,EAAwD1rH,iBAAS,IAAA2rH,GACxD,QADwDC,EAAjED,EACI7sB,aAAK,IAAA8sB,OAD6C,EAAtDA,EACW7sB,UAAW,CAAC,EACzB,OAAS8sB,EACLn6F,cAAI3T,OAAOmH,OAAO2mG,IAChB9tG,OAAOmH,OAAO2mG,GAAcz8G,OAC9B,CAAC,KAELg8G,EAAwBh8G,OAC5B,EAML,EAgPG08G,GAAcA,CAClB51F,EACAsd,EAGA70B,IAE0B,wBAAnBuX,EACH,IACmB,cAAnBA,EACA,EAmBS,KAlBW,uBAAnBA,EACGwR,KAAKiuB,OACAnhC,kBACD7V,EAAKhS,KAAIyS,GACPoV,kBACEpV,EAAEmgF,aAAa5yF,KACb42C,GAAK46C,GAAe56C,EAAG,uBAAyB,SAM1D7b,KAAKiuB,OACAniB,EAAO7mC,KAAIoY,GACZ2iB,KAAKiuB,OACA5wC,EAAEpG,KAAKhS,KAAI42C,GAAsB,kBAATA,EAAE,GAAkBA,EAAE,GAAK,SAglBvD1yC,OA1kBAxC,IAOD,IAPE,KACdsQ,EAAI,MACJzL,EAAK,eACLgjB,EAAc,UACdipE,EAAS,YACTv8E,EAAW,mBACXglG,GACMv5G,EACN,GAAS,OAAJsQ,QAAI,IAAJA,MAAMvP,OACT,MAAO,CAAC,EAGV,MAAM28G,EAAW,CACfppH,KAAM8C,GAAiC,UAAE5H,MACzC0R,KAAM,OACNqG,MAAO1C,EAAM2C,OAAOm0B,MAAMqD,cAAcptC,UACxCsuC,OAAQ,CACNm5B,UAAWx0D,EAAM2C,OAAOm0B,MAAMqD,cAAcptC,UAC5Ck6D,UAAWjnD,EAAM2C,OAAOm0B,MAAMqD,cAAcptC,WAE9C0e,KACqB,wBAAnBuX,GAA+D,cAAnBA,EACxCvX,EAAKhS,KAAIisD,GACAsmC,GACLtmC,EACA1iC,EACAipE,EACA,eAGJ,GACNh0D,QAASj4B,EAAMqgC,OAAOC,OAAOrI,QAAQsI,KACrCqnB,UAAW,OAEPkxD,EAAW,CACfrpH,KAAM8C,GAAiC,UAAE5H,MACzC0R,KAAM,OACNqG,MAAO1C,EAAM2C,OAAOm0B,MAAMqD,cAAcrtC,UACxCuuC,OAAQ,CACNm5B,UAAWx0D,EAAM2C,OAAOm0B,MAAMqD,cAAcrtC,UAC5Cm6D,UAAWjnD,EAAM2C,OAAOm0B,MAAMqD,cAAcrtC,WAE9C2e,KACqB,wBAAnBuX,GACAA,IAAmBtxB,GACf+Z,EAAKhS,KAAIisD,GACAsmC,GACLtmC,EACA1iC,EACAipE,EACA,eAGJ,GACNh0D,QAASj4B,EAAMqgC,OAAOC,OAAOrI,QAAQsI,KACrC2qB,SAAS,EACTtD,UAAW,OAEPmxD,EAAe,IAChBD,EACHrpH,KAAK,GAAD2R,OAAK03G,EAASrpH,KAAI,WACtBuuE,cAAe,GACft7D,MAAO1C,EAAM2C,OAAO2a,IAAIwO,MACxBzvB,KAAM,SACNoP,KACEuX,IAAmBtxB,IAAmC,SAAdu6F,EACpCxgF,EAAKhS,KAAIisD,GACAsmC,GACLtmC,EACA1iC,EACA,OACA,eAGJ,IAEFg2F,EAAoB,CACxBvpH,KAAM8C,GAA0C,mBAAE5H,MAClD0R,KAAM,OACNqG,MAAO1C,EAAM2C,OAAOm0B,MAAMqD,cAAcntC,mBACxCquC,OAAQ,CACNm5B,UAAWx0D,EAAM2C,OAAOm0B,MAAMqD,cAAcntC,mBAC5Ci6D,UAAWjnD,EAAM2C,OAAOm0B,MAAMqD,cAAcntC,oBAE9Cye,KACqB,wBAAnBuX,GACmB,uBAAnBA,EACIvX,EAAKhS,KAAIisD,GACAsmC,GACLtmC,EACA1iC,EACAipE,EACA,wBAGJ,GACNh0D,QAASj4B,EAAMqgC,OAAOC,OAAOrI,QAAQsI,KACrC2qB,SAAS,EACTtD,UAAW,OAEPqxD,EAAwB,IACzBD,EACHvpH,KAAK,GAAD2R,OAAK43G,EAAkBvpH,KAAI,WAC/BuuE,cAAe,GACft7D,MAAO1C,EAAM2C,OAAO2a,IAAIwO,MACxBzvB,KAAM,SACNoP,KACqB,uBAAnBuX,GAAyD,SAAdipE,EACvCxgF,EAAKhS,KAAIisD,GACAsmC,GACLtmC,EACA1iC,EACA,OACA,wBAGJ,IAIFk2F,EAAwB,CAC5BzpH,KAAM8C,GAAyC,kBAAE5H,MACjD+X,MAAO1C,EAAM2C,OAAOm0B,MAAMqD,cAAcvoC,wBACxCypC,OAAQ,CACNm5B,UAAWx0D,EAAM2C,OAAOm0B,MAAMqD,cAAcvoC,wBAC5Cq1D,UAAWjnD,EAAM2C,OAAOm0B,MAAMqD,cAAcvoC,yBAE9C6Z,KACqB,sBAAnBuX,EACIvX,EAAKhS,KAAIisD,GACAsmC,GACLtmC,EACA1iC,EACAipE,EACA,oBACA,WAGe,wBAAnBjpE,EACAvX,EAAKhS,KAAIisD,GACAsmC,GACLtmC,EACA1iC,EACA,OACA,uBAGJ,GACNiV,QAASj4B,EAAMqgC,OAAOC,OAAOrI,QAAQsI,KACrClkC,KAAM,OACN6uD,SAAS,EACTtD,UAAW,OAIPuxD,EAAuB,IACxBD,EACHzpH,KAAK,GAAD2R,OAAK7O,GAAyC,kBAAE5H,MAAK,WACzDqzE,cAAe,GACft7D,MAAO1C,EAAM2C,OAAO2a,IAAIwO,MACxBzvB,KAAM,SACNoP,KACqB,sBAAnBuX,GAAwD,SAAdipE,EACtCxgF,EAAKhS,KAAIisD,GACAsmC,GACLtmC,EACA1iC,EACA,OACA,oBACA,WAGJ,IAEFo2F,EAAmC,CACvC3pH,KACE+C,GAAqE,oCAClE7H,MACL0R,KAAM,OACNqG,MAAO1C,EAAM2C,OAAOm0B,MAAMqD,cAActoC,oCACxCwpC,OAAQ,CACNm5B,UACEx0D,EAAM2C,OAAOm0B,MAAMqD,cAActoC,oCACnCo1D,UACEjnD,EAAM2C,OAAOm0B,MAAMqD,cAActoC,qCAErC4Z,KACqB,sBAAnBuX,EACIvX,EAAKhS,KAAIisD,GACAsmC,GACLtmC,EACA1iC,EACAipE,EACA,oBACA,uBAGJ,GACNh0D,QAASj4B,EAAMqgC,OAAOC,OAAOrI,QAAQsI,KACrC2qB,SAAS,GAELmuD,EAA2B,CAC/B5pH,KAAM+C,GAA4D,2BAAE7H,MACpE+X,MAAO1C,EAAM2C,OAAOm0B,MAAMqD,cAAcroC,2BACxCuK,KAAM,OACNg/B,OAAQ,CACNm5B,UAAWx0D,EAAM2C,OAAOm0B,MAAMqD,cAAcroC,2BAC5Cm1D,UAAWjnD,EAAM2C,OAAOm0B,MAAMqD,cAAcroC,4BAE9C2Z,KACqB,sBAAnBuX,EACIvX,EAAKhS,KAAIisD,GACAsmC,GACLtmC,EACA1iC,EACAipE,EACA,oBACA,4BAGJ,GACNh0D,QAASj4B,EAAMqgC,OAAOC,OAAOrI,QAAQsI,KACrC2qB,SAAS,GAELouD,EAAgC,CACpC7pH,KACE+C,GAAiE,gCAAE7H,MACrE0R,KAAM,OACNqG,MAAO1C,EAAM2C,OAAOm0B,MAAMqD,cAAcnoC,gCACxCqpC,OAAQ,CACNm5B,UACEx0D,EAAM2C,OAAOm0B,MAAMqD,cAAcnoC,gCACnCi1D,UACEjnD,EAAM2C,OAAOm0B,MAAMqD,cAAcnoC,iCAErCyZ,KACqB,sBAAnBuX,EACIvX,EAAKhS,KAAIisD,GACAsmC,GACLtmC,EACA1iC,EACAipE,EACA,oBACA,sCAGJ,GACNh0D,QAASj4B,EAAMqgC,OAAOC,OAAOrI,QAAQsI,KACrC2qB,SAAS,GAELquD,EAA0B,CAC9B9pH,KAAM+C,GAA4D,2BAAE7H,MACpE+X,MAAO1C,EAAM2C,OAAOm0B,MAAMqD,cAAcloC,2BACxCoK,KAAM,OACNg/B,OAAQ,CACNm5B,UAAWx0D,EAAM2C,OAAOm0B,MAAMqD,cAAcloC,2BAC5Cg1D,UAAWjnD,EAAM2C,OAAOm0B,MAAMqD,cAAcloC,4BAE9CwZ,KACqB,sBAAnBuX,EACIvX,EAAKhS,KAAIisD,GACAsmC,GACLtmC,EACA1iC,EACAipE,EACA,oBACA,cAGJ,GACNh0D,QAASj4B,EAAMqgC,OAAOC,OAAOrI,QAAQsI,KACrC2qB,SAAS,GAELsuD,EAA4B,CAChC/pH,KAAM+C,GAA8D,6BAAE7H,MACtE+X,MAAO1C,EAAM2C,OAAOm0B,MAAMqD,cAAcjoC,6BACxCmK,KAAM,OACNg/B,OAAQ,CACNm5B,UAAWx0D,EAAM2C,OAAOm0B,MAAMqD,cAAcjoC,6BAC5C+0D,UAAWjnD,EAAM2C,OAAOm0B,MAAMqD,cAAcjoC,8BAE9CuZ,KACqB,sBAAnBuX,EACIvX,EAAKhS,KAAIisD,GACAsmC,GACLtmC,EACA1iC,EACAipE,EACA,oBACA,gBAGJ,GACNh0D,QAASj4B,EAAMqgC,OAAOC,OAAOrI,QAAQsI,KACrC2qB,SAAS,GAGX,IAAI5qB,EACJ,OAAQtd,GACN,IAAK,oBACHsd,EAAS,CACP44E,EACAE,EACAC,EACAC,EACAC,EACAC,GAEgB,SAAdvtB,IACF3rD,EAAS,CAAC64E,KAAyB74E,IAIrCA,EAASA,EAAOhuB,QAAOT,GAAKyP,kBAAQzP,EAAEpG,MAAMmF,OAAMy/B,IAAM99B,iBAAO89B,OAC/D,MACF,IAAK,YACH/P,EAAS,CAACw4E,GACQ,SAAd7sB,IACF3rD,EAAS,CAACy4E,KAAiBz4E,IAE7B,MACF,IAAK,YACHA,EAAS,CAACu4E,GACQ,SAAd5sB,IACF3rD,EAAS,IAAIA,IAEf,MACF,IAAK,qBACHA,EAAS,CAAC04E,GACQ,SAAd/sB,IACF3rD,EAAS,CAAC24E,KAA0B34E,IAEtC,MACF,IAAK,sBACH,MAAMm5E,EAAa,CAACX,EAAUE,EAAmBE,GACjD54E,EAASo0E,EAAqB,IAAI+E,EAAYZ,GAAYY,EAI9D,MAAO,CACL3iF,MAAO,CACL8L,OAAQ,IACRD,MAAO,KACPwkC,YAAa,EACbh9C,MAAO,CACLoZ,WAAYvjC,EAAMC,MAAMC,QAAQzQ,KAChCq3D,WAAY9mD,EAAMC,MAAMC,QAAQI,QAAQO,UAG5CyhD,MAAO,CACLE,KAAM,GACNkE,WAAYj7C,EAAKhS,KAAI42C,IACnB,MAAMq6C,EAAc3wF,KAAOs2C,EAAEqpE,WAAWxgC,OACtC7oC,EAAE68C,QACFzkG,GAEI2R,EAAQc,GAAgB,CAC5BE,OAAQ,OACRC,UAAWN,GAAgBs1C,EAAEqpE,aAEzB7/G,EAAMqB,GAAgB,CAC1BE,OAAQsvF,EAAc,KAAO,OAC7BrvF,UAAWN,GAAgBs1C,EAAE68C,SAAW,IAAIhzF,QAE9C,MAAM,GAANkH,OAAUhH,EAAK,KAAAgH,OAAIvH,EAAG,IAExBotD,UAAWjnD,EAAM2C,OAAO2a,IAAIC,UAC5BspC,OAAQ,CACNzuD,SAAS,EACT+xB,MAAO,CACLznB,MAAO1C,EAAM2C,OAAO2a,IAAIC,UACxBgmB,WAAYvjC,EAAMC,MAAMk0B,UAAU1kC,KAClCq3D,WAAY9mD,EAAMC,MAAMk0B,UAAU7zB,QAAQQ,MAE5CwiD,EAAG,KAGPlB,MAAO,CACL,CACEI,IAAK,EACLC,IAAKm2D,GAAY51F,EAAgBsd,EAAQ70B,GACzCu7C,WAAW,EACXH,OAAQ,CACNzuD,QACqB,cAAnB4qB,GACmB,uBAAnBA,EACFm9B,UAAW,WACT,MAAM,GAAN/+C,OAAWitB,KAAatc,OAAK3Q,OACR,cAAnB4hB,EACI,KACmB,uBAAnBA,EACA,MACA,GAER,GAEF+zC,UACqB,wBAAnB/zC,EACIugC,GAAa/xD,GAAmBb,EAAkBqP,GAC/B,cAAnBgjB,EACAugC,GACEvyD,GACA2oH,EACA35G,EACA,aAEiB,sBAAnBgjB,EACAugC,GACEnyD,GACAwoH,EACA55G,EACA,qBAEF,CAAC,CAAC,GACR2qF,cACqB,wBAAnB3nE,EACI6gC,GAAqBryD,IACF,cAAnBwxB,EACA6gC,GAAqB7yD,GAAqB,aACvB,sBAAnBgyB,EACA6gC,GACEzyD,GACA,0BAEF+K,EACNxR,MAAO,CACLyN,SAAS,KAIfqvD,OAAQ,CACNH,MAAO,QACPlvD,SAAS,EACT6kE,aAAc,GACdC,UAAW,CACTpW,WAAY9mD,EAAMC,MAAMC,QAAQI,QAAQkJ,MAE1C2zD,OAAQ,aACRxZ,cAAe,SACfhhB,MAA0B,sBAAnB3f,EAAyC,IAAM,EACtDo6C,aAAc,EACdC,YAAa,EACbC,cAAe,EAEfC,aAAc,GAEhB7V,YAAa,CACXpnB,OAAQ,CACNo0B,OAAQ,CACNmlD,gBAAiB,WACf,MAAMC,EAAezrF,KAAazD,OAC5B,OAAE0V,GAAYjS,KAAayI,MAQjC,OAAIwJ,EAAO1vB,OAAOiB,GAAcA,EAAEq5C,WAChC5qB,EAAO3xB,SAASkD,IACVA,EAAE+Y,QAAUkvF,GACdjoG,EAAEkoG,YAAW,GAAO,EACtB,KAEK,GAILz5E,EAAO3wB,MAAMkC,GAAcA,EAAE+Y,QAAUkvF,IAAa5uD,SACpD5qB,EACGhuB,QAAQT,GAAcA,EAAE+Y,QAAUkvF,IAClClpG,OAAOiB,IAAeA,EAAEq5C,WAE3B5qB,EAAO3xB,SAASkD,IACVA,EAAE+Y,QAAUkvF,GACdjoG,EAAEkoG,YAAW,GAAM,EACrB,KAEK,IAGN1rF,KAAa0rF,YAAa1rF,KAAa68B,SAAS,IAC1C,EAGb,IAGJyS,KAAM,CACJC,cAAc,EACdxS,WAAY,CACV9D,MAAO,OACPlvD,SAAS,EACT+nD,UAAW,WACT,OAAQ9xB,KAAaiyB,MAAM11B,QAAUnf,EAAKvP,OAAS,EAC9CmyB,KAAai1B,EAAEgD,QAAQ,GACxB,IACN,EACAn8B,MAAO,CACLoZ,WAAYvjC,EAAMC,MAAMk0B,UAAU1kC,KAClC+zC,SAAU,OACVvL,QAASj4B,EAAMqgC,OAAOC,OAAOrI,QAAQsI,MAEvCojB,cAAe,SACfkC,EAAG,IAELxqB,OAAQ,CACNw5B,OAAQ,UAEVhN,OAAQ,CACNv+B,MAAO,CACL2O,QAASj4B,EAAMqgC,OAAOC,OAAOrI,QAAQsI,KACrCqnB,UAAW,MACXiW,cAAe,GAEjBvS,SAAU,CACR3D,UAAW,CACTmW,SAAU,OAMpBnzE,MAAO,CACLuvC,UAAM/9B,GAER+iC,QAAS,CACP/mC,SAAS,EACTC,SAAS,EACTC,gBAAiB,KACjBC,QAAQ,EACRC,YAAa,EACbC,aAAc,EACdC,SAAS,EACTwvD,WAAY,SAASC,EAAWC,EAAW7H,GACzC,OAAO6C,GAA2B,CAChCC,gBAAkB/0B,KAAa+5B,YAAYF,EAAGC,EAAG7H,GACjD+C,aAAcpmD,OAAOorD,SAEzB,EACAlI,UAAW,WACT,MAAMsd,EAAapvC,KAAaiyB,MAEhC,GACEt9B,IAAmBtxB,IACO,WAA1B+rE,EAAUn9B,OAAOjkC,MACH,SAAd4vF,EAEA,MAlzBiC+tB,EACzCvuG,EACAwgF,EACAxuB,EACAz6C,KACI,IAADi3F,EACH,MAAM/1D,EACoC,QAD1B+1D,EAAGxuG,EAChBkE,MAAK0gC,GAAKA,EAAE68C,UAAYzvB,EAAUhuE,cAAK,IAAAwqH,OAAA,EADvBA,EAEf5tB,aAAa/5E,QACb4nG,GAA6B,SAAdjuB,GAAwBiuB,EAAYz8G,QAAkB,OAATwuF,QAAS,IAATA,OAAS,EAATA,EAAW/iG,MAE3E,IAAIixH,EACAxvH,EACJ,OAAQ8yE,EAAUn9B,OAAO7wC,MACvB,IAAK,oBACH0qH,EAAc74F,kBACF,OAAV4iC,QAAU,IAAVA,OAAU,EAAVA,EAAYzqD,KAAIygH,IAAgB,IAADE,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAC7B,MAAMC,EAAY,CAChB,aACEhkF,oBACa,OAAXkjF,QAAW,IAAXA,GAA8B,QAAnBE,EAAXF,EAAajtH,yBAAiB,IAAAmtH,GAE7B,QAF6BC,EAA9BD,EACc,kBACb,IAAAC,OAFU,EAAXA,EAEG1tB,OAAOpkG,gBACP,OACP,oBACEyuC,oBACa,OAAXkjF,QAAW,IAAXA,GAA8B,QAAnBI,EAAXJ,EAAajtH,yBAAiB,IAAAqtH,GAE7B,QAF6BC,EAA9BD,EACqB,yBACpB,IAAAC,OAFU,EAAXA,EAEG5tB,OAAOpkG,gBACP,OACP,mCACEyuC,oBACa,OAAXkjF,QAAW,IAAXA,GAA8B,QAAnBM,EAAXN,EAAajtH,yBAAiB,IAAAutH,GAE7B,QAF6BC,EAA9BD,EACoC,wCACnC,IAAAC,OAFU,EAAXA,EAEG9tB,OAAOpkG,gBACP,OACP,WACEyuC,oBACa,OAAXkjF,QAAW,IAAXA,GAA8B,QAAnBQ,EAAXR,EAAajtH,yBAAiB,IAAAytH,GAE7B,QAF6BC,EAA9BD,EACY,gBACX,IAAAC,OAFU,EAAXA,EAEGhuB,OAAOpkG,gBACP,OACP,yBACEyuC,oBACa,OAAXkjF,QAAW,IAAXA,GAA8B,QAAnBU,EAAXV,EAAajtH,yBAAiB,IAAA2tH,GAE7B,QAF6BC,EAA9BD,EACE,iCACD,IAAAC,OAFU,EAAXA,EAEGluB,OAAOpkG,gBACP,QAET,MAA0B,wBAAnBy6B,EACQ,OAAXk3F,QAAW,IAAXA,GAA8B,QAAnBY,EAAXZ,EAAajtH,yBAAiB,IAAA6tH,GAAO,QAAPC,EAA9BD,EAAgCruB,aAAK,IAAAsuB,OAA1B,EAAXA,EAAuCpuB,OAAOpkG,cAC9CsiB,OAAO+L,QAAQokG,GAAWvhH,KAAIiB,IAAmB,IAAjBpS,EAAKypB,GAAMrX,EACzC,MAAM,GAAN0G,OAAU9Y,EAAG,MAAA8Y,OAAK2Q,EAAK,GACvB,KAGVpnB,EAAQ,oBACR,MACF,IAAK,aACHwvH,EAAc1lG,eACZ6M,kBACY,OAAV4iC,QAAU,IAAVA,OAAU,EAAVA,EAAYzqD,KAAIygH,IAAgB,IAADe,EAAAC,EAC7B,MAAMC,EAC4B,QADnBF,EACbf,EAA+B,yBAAC,IAAAe,GAAgB,QAAhBC,EAAhCD,EAA+C,kBAAC,IAAAC,OAAhB,EAAhCA,EAAkDruB,QACpD,OAASsuB,EAAYtwG,OAAOmH,OAAOmpG,GAAa,EAAE,KAEpDvkH,MAAK,CAACic,EAAGgB,IAAMhB,EAAE,GAAGzC,cAAcyD,EAAE,OAExClpB,EAAK,eAAAyW,OAAkB+4G,EAAYj+G,QACnC,MACF,IAAK,oBACHi+G,EAAc74F,kBACF,OAAV4iC,QAAU,IAAVA,OAAU,EAAVA,EAAYzqD,KAAIygH,IAAgB,IAADkB,EAAAC,EAC7B,MAAM31D,EAC4B,QADtB01D,EACVlB,EAA+B,yBAAC,IAAAkB,GAAuB,QAAvBC,EAAhCD,EAAsD,yBAAC,IAAAC,OAAvB,EAAhCA,EAAyDxuB,QAC3D,OAASnnC,EACL76C,OAAOmH,OAAO0zC,GAAQjsD,KAAI42C,GAAKA,EAAE5gD,OACjC,CAAC,uBAAuB,KAE9BmH,MAAK,CAACic,EAAGgB,IAAMhB,EAAE,GAAGzC,cAAcyD,EAAE,MACtClpB,EAAK,qBAAAyW,OACgB,yBAAnB+4G,EAAY,GACR,GAAE,KAAA/4G,OACG+4G,EAAYj+G,SAEvB,MACF,IAAK,mCACH,MAAMo/G,EAAgB98F,cACV,OAAV0lC,QAAU,IAAVA,OAAU,EAAVA,EAAYzqD,KAAIygH,IAAgB,IAADqB,EAAAC,EAAAC,EAC7B,OACkC,QAAhCF,EAAArB,EAA+B,yBAAC,IAAAqB,GAE/B,QAF+BC,EAAhCD,EACoC,wCACnC,IAAAC,GAAS,QAATC,EAFDD,EAEG3uB,eAAO,IAAA4uB,OAFsB,EAAhCA,EAEYv8F,QAAS,CAAC,KAI5Bi7F,EAAc,CACZmB,EAAgB,EAAC,GAAAl6G,OACVk6G,EAAa,YAAAl6G,OACI,IAAlBk6G,EAAsB,IAAM,GAAE,4BAEhC,mCAEN3wH,EAAQ,mCACR,MACF,IAAK,WACHwvH,EAAc1lG,eACZ6M,kBACY,OAAV4iC,QAAU,IAAVA,OAAU,EAAVA,EACIzqD,KAAIygH,IAAgB,IAADwB,EAAAC,EACnB,MAAMznD,EAAwC,QAAnCwnD,EAAGxB,EAA+B,yBAAC,IAAAwB,OAAA,EAAhCA,EACF,SAEZ,OAAY,OAALxnD,QAAK,IAALA,GAAc,QAATynD,EAALznD,EAAO24B,eAAO,IAAA8uB,OAAT,EAALA,EAAgBznD,KAAK,IAE7B5hD,QAAOT,KAAOA,MAEnBjb,MAAK,CAACic,EAAGgB,IAAMhB,EAAE,GAAGzC,cAAcyD,EAAE,MACtClpB,EAAK,cAAAyW,OAAiB+4G,EAAYj+G,QAClC,MACF,IAAK,yBACH,MAAO0/G,EAAeC,GAAiB3oG,oBACrCoO,kBACY,OAAV4iC,QAAU,IAAVA,OAAU,EAAVA,EAAYzqD,KAAIygH,IAAgB,IAAD4B,EAC7B,MAAMnJ,EAA2C,QAAnCmJ,EAAG5B,EAA+B,yBAAC,IAAA4B,OAAA,EAAhCA,EACf,0BAEF,OAAiB,OAARnJ,QAAQ,IAARA,KAAU9lB,QACfhiF,OAAO+L,QAAQ+7F,EAAS9lB,SAASj2F,MAAK,CAACic,EAAGgB,IAAMA,EAAE,GAAKhB,EAAE,KACzD,EAAE,MAGVy7B,GAAKA,EAAE,GAAK,KAOd6rE,GAJE,IACKyB,EACH,CAAC,sBAAuBC,EAAczzH,QAAO,CAAC24B,EAAGutB,IAAMA,EAAE,GAAKvtB,GAAG,OAC9D,GACwBtnB,KAC7BgM,GAAG,GAAArE,QAAiB,IAATqE,EAAI,IAAU6gD,QAAQ,GAAE,MAAAllD,OAAKqE,EAAI,MAE9C9a,EAAQ,yBAGZ,M1NEoDoxH,EACpDpxH,EACAwvH,EACA6B,IAEM,gUAAN56G,OAEwM46G,GAChM,QAAO,aAAA56G,OAAYzW,EAAK,UAAAyW,OAAS+4G,EACtC1gH,KACCulB,GAAI,4DAAA5d,OAC0D4d,EAAI,aAEnE6L,KAAK,IAAG,8B0NfJkxF,CACLpxH,EACAwvH,GAAe,GACd18C,EAAkB/6D,MACpB,EA6pBcs3G,CACLvuG,EACAwgF,EACAxuB,EACAz6C,GAIJ,GACEA,IAAmBtxB,IACC,wBAAnBsxB,GAC2B,cAA1By6C,EAAUn9B,OAAO7wC,KAEnB,OAAO2nH,GACL3rG,EACAgyD,EACAwuB,EACAv8E,EACc,SAAdu8E,GAAkD,WAA1BxuB,EAAUn9B,OAAOjkC,MAI7C,MAAM4/G,EAhrB2BC,EACvCz+C,EACAwuB,EACAxgF,EACAiE,EACAsT,KACI,IAADm5F,EACH,OAC0C,QAD1CA,EAAO1wG,EACJkE,MAAK0gC,GAAKA,EAAE68C,UAAYzvB,EAAUhuE,cAAK,IAAA0sH,OAAA,EADnCA,EAEH9vB,aAAa/5E,QAAO4nG,IAEH,SAAdjuB,GAC2B,WAA1BxuB,EAAUn9B,OAAOjkC,MACjB69G,EAAYz8G,OAASwuF,EAAU/iG,MACtB,OAAXwmB,QAAW,IAAXA,OAAW,EAAXA,EAAaC,MAAKge,GAAUA,EAAOzkC,KAAOgxH,EAAYz8G,UAIzDhE,KAAIozE,IAAW,IAADuvC,EACb,MAAMlxB,EAA0B,OAAXx7E,QAAW,IAAXA,OAAW,EAAXA,EAAaC,MAChCge,GAAUA,EAAOzkC,KAAO2jF,EAAOpvE,OAI3B4+G,EAAgBntE,kBAAQ,CAC5B,oBAAqB,oBACrB,aAAc,aACd,yBAA0B,yBAC1B,mCAAoC,mCACpC,WAAY,WACZ,YAAa,YACb,YAAa,YACb,oBAAqB,oBACrB,2BAA4B,oBAC5B,qBAAsB,qBACtB,sBAAuB,wBACtBv/B,MAAK2sG,GAAYA,EAAS,KAAO7+C,EAAUn9B,OAAO7wC,OAE/C8sH,EACJv5F,IAAmBtxB,IACA,wBAAnBsxB,EAEF,MAAO,CACL1R,OAAQu7D,EAAOpvE,KACfmvB,YAAyB,OAAZs+D,QAAY,IAAZA,OAAY,EAAZA,EAAct+D,YAC3Bn9B,KAAkB,OAAZy7F,QAAY,IAAZA,OAAY,EAAZA,EAAcz7F,KAEpBuzB,iBAEAw5F,kBAAmBD,EAA4B,OAAbF,QAAa,IAAbA,OAAa,EAAbA,EAAgB,GAAK,GAIvDtqG,MACqB,wBAAnBiR,EAC2B,uBAAV,OAAbq5F,QAAa,IAAbA,OAAa,EAAbA,EAAgB,IACdpxB,GACEpe,EACAn7E,GACA,SAEqB,wBAAV,OAAb2qH,QAAa,IAAbA,OAAa,EAAbA,EAAgB,IACV,OAANxvC,QAAM,IAANA,GAA0B,QAApBuvC,EAANvvC,EAAQ7/E,0BAAkB,IAAAovH,OAApB,EAANA,EAA4B3vB,MAC5BxB,GACEpe,EACa,OAAbwvC,QAAa,IAAbA,OAAa,EAAbA,EAAgB,GAChB,SAEJr5F,IAAmBtxB,IACN,OAAb2qH,QAAa,IAAbA,OAAa,EAAbA,EAAgB,MAAO3qH,GACrBu5F,GACEpe,EACAn7E,GACA,SAEFu5F,GACEpe,EACAn7E,GACa,OAAb2qH,QAAa,IAAbA,OAAa,EAAbA,EAAgB,IAEpBpxB,GAAepe,EAAQ7pD,GAC9B,GACD,EA8lBsBk5F,CAClBz+C,EACAwuB,EACAxgF,EACAiE,EACAsT,GAGF,M1NxvBoCy5F,EAAC/sG,EAAassG,IAClD,sUAAN56G,OAG6G46G,GACrG,QAAO,6BAAA56G,OAENsO,EAAY,GAAGsT,iBAAmBtxB,IACjCge,EAAY,GAAG8sG,mBACiB,wBAAlC9sG,EAAY,GAAGsT,eACXtT,EAAY,GAAG8sG,kBACfjqH,GAAsBmd,EAAY,GAAGsT,gBAAuB,MAAC,+BAAA5hB,OAGrEsO,EACCjW,KAAImW,IACH,MAAMogG,EAAkB9sD,GAAmB,CACzCt2B,YAAahd,EAAEgd,YACf+V,MAAO,KAUHjO,EACJ9kB,EAAEoT,iBAAmBtxB,IACG,cAAxBke,EAAE4sG,kBATuB5sG,IACN,IAAZA,EAAEmC,MACL,eACY,IAAZnC,EAAEmC,MACF,OACA,SAKA2qG,CAAmB9sG,GACnBA,EAAEoT,iBAAmBtxB,IACC,wBAArBke,EAAEoT,gBACuB,sBAAxBpT,EAAE4sG,kBACJ5sG,EAAEmC,MAAQ,KACR,OACAnC,EAAEmC,MAAQ,GACV,OACA,iBACAnC,EAAEmC,MACiB,wBAArBnC,EAAEoT,gBACsB,uBAAxBpT,EAAE4sG,kBAA0C,GAAAp7G,OACvC61B,qBAAWrnB,EAAEmC,MAAMxpB,gBAAc,GAAA6Y,OACjCwO,EAAEmC,MAAMu0C,QAAQ,GAAE,KAAAllD,OACE,uBAArBwO,EAAEoT,gBACsB,uBAAxBpT,EAAE4sG,kBACE,MACA,OAER,MAEN,MAAM,4DAANp7G,OAAmE4uG,GAAe5uG,OAAGwO,EAAEngB,KAAI,OAAA2R,OAAMszB,EAAY,cAE9G7J,KAAK,IAAG,0B0NksBA4xF,CAA6BR,EAAax+C,EAAU/6D,MAC7D,GAEF49B,SACD,EC/7BH,MAAMq8E,GAAmCh9G,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sDAAAyV,YAAA,gBAAVH,CAAU,sDAM7Ci9G,GAA0Bj9G,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6CAAAyV,YAAA,gBAAVH,CAAU,sBAIpCk9G,GAAiBl9G,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAATH,CAAS,yCAK1B6C,GAAa7C,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAZH,CAAY,kCACpBI,GAASA,EAAMC,MAAM2C,OAAOi3B,MAAMrc,YAmJ9B+qC,qBAnIW5tD,IASZ,IATa,UACzBuG,EAAS,KACTwK,EAAI,eACJi2C,GAAiB,EAAK,OACtBxgD,EAAS,SAAQ,eACjB8hB,EAAc,UACdipE,EAAS,MACTjsF,EAAK,mBACL00G,GAAqB,GACfh6G,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,yBACtB,UAAEqL,GAAc2V,MAChB,WAAEvF,GAAeP,KACjB1f,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxDe,EAAOiB,cAAapE,GAA6BiT,cAAIjT,EAAO,UAC5Dmb,EAAalJ,EAAUhE,KAiB7B,MAAM6yD,EAAwBR,GAAyB,CACrDn9D,OACAf,QACAmnB,mBAAoB,CAClBnB,gBAAiBn2B,EAAqBE,eACtCu2B,iBACAvrB,aAA4B,SAAdw0F,EAAuB,OAASA,EAAUl+E,OAE1DxB,cAEImD,EAAciB,kBAAQyqD,GACd,OAAV3lD,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,YACF,OAAV+F,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,YAAY4C,QAAO+N,GAAK+6C,EAAsBrwD,SAASsV,EAAEn3B,MAEnE4zH,EAAyBpsG,mBAAQ,IAEhB,sBAAnBsS,IACI,OAAJvX,QAAI,IAAJA,OAAI,EAAJA,EAAMmF,OAAMmsG,GAC4C,OAA/CA,EAAW5wB,WAA8B,sBAGnD,CAACnpE,EAAgBvX,IAEdqrB,EAAQpmB,mBAAQ,KACb,CACL/S,OAAQkkD,GAAe,CACrBp2C,KAAU,OAAJA,QAAI,IAAJA,OAAI,EAAJA,EAAM7U,MAAK,CAAComH,EAAIC,IAAOD,EAAG9vB,QAAQ98E,cAAc6sG,EAAG/vB,WACzDltF,QACAgjB,iBACAipE,YACAv8E,cACAglG,uBAEFxrH,GAAI,sBACJw4D,oBAED,CACDgzD,EACAzoB,EACAxgF,EACAi2C,EACAhyC,EACAsT,EACAhjB,IAGF,OACEqB,eAAA,OACE2tB,aAhEJ,SAA0B9jB,GACxBA,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAO,sBACP4oB,MAAO,qBAEX,EA0DIkd,aAzDJ,SAAyB/jB,GACvBA,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAO,sBACP4oB,MAAO,oBAEX,EAmDI9Q,UAAWA,EACX,cAAaE,EAAWzS,SAExB2S,eAAC2pF,KAAa,CAAAt8F,SACXouH,EACCx7G,gBAACq7G,GAAgC,CAAAjuH,SAAA,CAC/B4S,gBAACs7G,GAAuB,CAAAluH,SAAA,CACtB2S,eAACmB,GAAU,CAACrM,KAAK,SACjBkL,eAAA,QAAA3S,SAAM,uFAKR2S,eAACu7G,GAAuB,CAAAluH,SACtB4S,gBAAA,QAAA5S,SAAA,CAAM,0EAEO,IACX2S,eAACygC,GAAS,CACRryC,KAAK,sCACLq4B,GAAG,YAAWp5B,SACf,kBAEW,SAIhB2S,eAACu7G,GAAuB,CAAAluH,SACtB4S,gBAACu7G,GAAc,CAAAnuH,SAAA,CACb2S,eAAA,MAAA3S,SAAI,qCACJ2S,eAAA,MAAA3S,SAAI,2BACJ2S,eAAA,MAAA3S,SAAI,aACJ2S,eAAA,MAAA3S,SAAI,eACJ2S,eAAA,MAAA3S,SAAI,8BAKV2S,eAAC+/C,GAAK,CACJtqB,MAAOA,EACP71B,UAAWA,EACXC,OAAM,GAAAE,OAAKD,EAAU,wBACrBnB,MAAOA,OAIT,ICzLV,MAAMk9G,GAAWv9G,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAVH,CAAU,iJAGVI,GAAK,GAAAqB,OAAyB,GAAlBrB,EAAMo9G,UAAe,0BAChCp9G,GAAK,GAAAqB,OAAyB,GAAlBrB,EAAMo9G,UAAe,0BAChCp9G,GAAK,GAAAqB,OACjBrB,EAAMo9G,UAAS,aAAA/7G,OAAYrB,EAAMC,MAAM2C,OAAO2a,IAAIic,SAOnD6jF,GAAaz9G,KAAOi/B,OAAM/+B,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAbH,CAAa,oBAEjBI,GAAK,GAAAqB,OAAyB,IAAlBrB,EAAMo9G,UAAgB,QAgBlCE,OARS3iH,IAAoD,IAAnD,UAAEyiH,EAAS,WAAEG,GAAmB5iH,EACvD,OACE2G,eAAC67G,GAAQ,CAACC,UAAWA,EAAW,cAAY,iBAAgBzuH,SAC1D2S,eAAC+7G,GAAU,CAACD,UAAWA,EAAUzuH,SAAE4uH,KAC1B,ECtBf,MAAMz7G,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAVH,CAAU,mGAQtB49G,GAAgB59G,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAVH,CAAU,uDAGjBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElDsxF,GAAgB79G,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAVH,CAAU,gEACVI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAIhD8xF,GAAc99G,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAVH,CAAU,wFAERI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAKhD+xF,GAAW/9G,KAAOkU,EAAChU,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAARH,CAAQ,wEAERI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OACvCsQ,GAASA,EAAMC,MAAMC,MAAMk0B,UAAUzzB,MAAMC,KACzCZ,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU7zB,QAAQQ,OAsD/C68G,I,oCAAAA,GA3CcjjH,IAMf,IANgB,OAC5BwG,EAAS,SAAQ,UACjBD,EAAS,YACT28G,EAAW,KACXnyG,EAAI,UACJwgF,GACMvxF,EAEN,GAAoB,cAAhBkjH,GAA+C,uBAAhBA,EACjC,OAAO,KAET,MAAMC,EAA2B,cAAhBD,EAA8B,MAAQ,MACjD72C,EAAiB,OAAJt7D,QAAI,IAAJA,OAAI,EAAJA,EAAMhS,KAAIisD,GAC3BsmC,GAAoBtmC,EAAQk4D,EAAa3xB,EAAW2xB,KAEtD,GAAe,OAAV72C,QAAU,IAAVA,MAAY7qE,OAAQ,OAAO,KAChC,MAAM4hH,EAAiBx9F,OAAOymD,EAAW,GAAG,IAAIzgB,QAAQ,GAClDy3D,GACJh3C,EACGttE,KAAI42C,GAAK/vB,OAAO+vB,EAAE,MAClBjoD,QAAO,CAAC6tC,EAAYC,IAAeD,EAAKC,IAAM6wC,EAAW7qE,QAC5DoqD,QAAQ,GAEV,OACEhlD,gBAACO,GAAS,CAAAnT,SAAA,CACR4S,gBAACi8G,GAAa,CAAA7uH,SAAA,CACZ2S,eAACm8G,GAAa,CAAA9uH,SAAC,gBACf4S,gBAACm8G,GAAW,CAAA/uH,SAAA,CACV2S,eAACq8G,GAAQ,CAAAhvH,SAAEovH,IACVD,EAAS,eAGdv8G,gBAACi8G,GAAa,CAAA7uH,SAAA,CACZ2S,eAACm8G,GAAa,CAAA9uH,SAAC,oBACf4S,gBAACm8G,GAAW,CAAA/uH,SAAA,CACV2S,eAACq8G,GAAQ,CAAAhvH,SAAEqvH,IACVF,EAAS,iBAGJ,EC1DhB,MAAMh8G,GAAYlC,KAAOC,IAAGkpB,QAAAC,aAAA,0BAGtBi1F,GAAgBr+G,KAAOU,OAAM8oB,QAAAJ,aAAA,iIAClBhpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UACzCd,GAAK,aAAAqB,OAAiBrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG1DqyF,GAAat+G,aAAOiqF,GAAPjqF,CAA2B0pB,QAAAN,aAAA,oDAKxCm1F,GAAmBv+G,KAAOC,IAAGiqB,QAAAd,aAAA,qDAK7Bo1F,GAAsBx+G,KAAOC,IAAGmqB,QAAAhB,aAAA,wKAIhBhpB,GAAK,GAAAqB,OAAOrB,EAAMC,MAAM2C,OAAO2a,IAAIqO,SAC1C5rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAC5Cd,GAAK,iBAAAqB,OAEfrB,EAAMq+G,QACFr+G,EAAMC,MAAM2C,OAAO2a,IAAIob,WACvB34B,EAAMC,MAAM2C,OAAO2a,IAAIic,SAI3B8kF,GAAe1+G,aAAOmiC,GAAPniC,CAAiB+oD,QAAA3/B,aAAA,qLAKzBhpB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAC1Bzd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAIxDurE,GAAS1sE,aAAOsrB,GAAPtrB,CAAmBipD,QAAA7/B,aAAA,sFAItBhpB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO4mB,UAG3DizE,GAAiB78F,KAAOi/B,OAAMkqB,QAAA//B,aAAA,gCAG9Bu1F,GAA+B3+G,KAAOC,IAAGopD,QAAAjgC,aAAA,mHAKzBhpB,GAClBA,EAAMC,MAAM2C,OAAOm0B,MAAMqD,cAAcp6B,EAAMorF,UAE3CozB,GAAwB5+G,KAAOC,IAAGspD,QAAAngC,aAAA,oDAIlC20F,GAAW/9G,KAAOkU,EAACu1C,QAAArgC,aAAA,8FAERhpB,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OACvCsQ,GAASA,EAAMC,MAAMC,MAAMk0B,UAAUzzB,MAAMC,KACzCZ,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU7zB,QAAQQ,OAExD28G,GAAc99G,KAAOC,IAAG0pD,QAAAvgC,aAAA,kHACRhpB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAIvC5rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KA6XzCsyF,I,GAAAA,GAnWkC9jH,IAKf,IAADqlB,EAAA,IALiB,YAChD69F,EAAW,eACXa,EAAc,UACdxyB,EAAS,OACT/qF,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kDACtBxE,EAAQgC,cAAapE,GAA6BA,EAAMoC,SACxD,oBACJ0mB,EAAmB,oBACnBI,EAAmB,UACnBjX,GACE2V,KACEzM,EAA2B,QAAjBsK,EAAGxT,EAAUhE,YAAI,IAAAwX,OAAA,EAAdA,EAAgBrQ,YAAY4C,QAC7C+N,GAAmB,SAAd4rE,GAAwB5rE,EAAEn3B,KAAO+iG,EAAU/iG,KAElD,GACE00H,IAAgBlsH,IACV,OAALgL,QAAK,IAALA,MAAQ,8CACR+hH,EAED,OAAO,KAET,MAAMC,EAA+Dp9F,kBACnEm9F,EAAepyB,aACZ/5E,QAAOT,GAAmB,SAAdo6E,GAAwBp6E,EAAEpU,OAASwuF,EAAU/iG,KACzDuQ,KAAIoY,IAAC,IAAA8sG,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,MAAI,CACR,CACE71H,GAAI2oB,EAAEpU,KACN0tF,OAAQx5F,GAAwBO,6BAChCysB,MAA0B,QAArBggG,EAAE9sG,EAAE5kB,yBAAiB,IAAA0xH,OAAA,EAAnBA,EAAqB5xB,YAE9B,CACE7jG,GAAI2oB,EAAEpU,KACN0tF,OAAQx5F,GAAwBE,oCAChC8sB,MAA0B,QAArBigG,EAAE/sG,EAAE5kB,yBAAiB,IAAA2xH,OAAA,EAAnBA,EAAqB5xB,mBAE9B,CACE9jG,GAAI2oB,EAAEpU,KACN0tF,OAAQx5F,GAAwBG,2BAChC6sB,MAA0B,QAArBkgG,EAAEhtG,EAAE5kB,yBAAiB,IAAA4xH,OAAA,EAAnBA,EAAsB,2BAE/B,CACE31H,GAAI2oB,EAAEpU,KACN0tF,OAAQx5F,GAAwBK,gCAChC2sB,MAA0B,QAArBmgG,EAAEjtG,EAAE5kB,yBAAiB,IAAA6xH,OAAA,EAAnBA,EAAqBlyB,kCAE9B,CACE1jG,GAAI2oB,EAAEpU,KACN0tF,OAAQx5F,GAAwBM,2BAChC0sB,MAA0B,QAArBogG,EAAEltG,EAAE5kB,yBAAiB,IAAA8xH,OAAA,EAAnBA,EAAqBjyB,UAE/B,KACHx6E,QAAOnX,IAAA,IAAC,MAAEwjB,GAAOxjB,EAAA,MAAuB,UAAb,OAALwjB,QAAK,IAALA,OAAK,EAALA,EAAOguE,OAAiB,IAChD,IAAK+xB,EAA8BxiH,OAAQ,OAAO,KAsNlD,SAAS8iH,EACPxzB,EACAyzB,EACAxhH,GACC,IAADyhH,EAAAC,EAEA,MAAMC,EAKuB,OAAbH,QAAa,IAAbA,GAEf,QAF4BC,EAAbD,EAAetvG,MAC7B++B,IAAA,IAAC,OAAEy8C,GAAQz8C,EAAA,OAAKy8C,IAAWK,CAAsB,WAClD,IAAA0zB,GAAO,QAAPC,EAFeD,EAEbvgG,aAAK,IAAAwgG,OAFqB,EAAbA,EAENtyB,QAEV,IAAKuyB,EAAY,OAAO,KAExB,MAAMC,EACJ7zB,IACA75F,GAAwBE,oCAvO5B,SACEg7F,EACApvF,GAEA,OAAOoN,OAAO+L,QAAQi2E,GACnBj2F,MAAK,CAAC0oH,EAAIC,IAAOD,EAAG,GAAGt0D,QAAQ56C,cAAcmvG,EAAG,GAAGv0D,WACnDvxD,KAAI4V,IAAY,IAAV,CAAEwE,GAAExE,EACT,MAAMmwG,EAAiBp8F,EAAoB,CACzCtQ,QAASe,EAAEo5E,OACXj3E,oBAAoB,EACpBkN,kBAAmB,CACjB,CAACvuB,GAAaO,eAAgBuI,EAAKsQ,MACnC,CAACpZ,GAAaF,iBAAkB,CAACxI,EAA0BC,KAC3D,CAACyI,GAAad,UAAWlE,GAAaC,KACtC,CAAC+E,GAAaN,mBAAoB,MAGtC,OACEgN,eAACg9G,GAAY,CACX5uH,KAAM0R,EACN2mB,GAAI03F,EAEJ,wBAAsB,OAAM9wH,SAE3BmlB,EAAEm3C,SAHEw0D,EAIQ,GAGvB,CA4MQC,CAAgBL,EAA0C3hH,GAC1D+tF,IACA75F,GAAwBO,6BA7MhC,SACE26F,EACApvF,GAEA,OAAOoN,OAAO+L,QAAQi2E,GACnBj2F,MAAK,CAAC8oH,EAAIC,IAAOD,EAAG,GAAGtvG,cAAcuvG,EAAG,MACxClmH,KAAIsV,IAAiB,IAAf7lB,EAAIuG,GAAKsf,EACd,MAAM6wG,EAAgBx8F,EAAoB,CACxCtQ,QAAS5pB,EACT8sB,oBAAoB,EACpBkN,kBAAmB,CACjB,CAACvuB,GAAaO,eAAgBuI,EAAKsQ,MACnC,CAACpZ,GAAaN,mBAAoB,MAGtC,OACEgN,eAACg9G,GAAY,CACX5uH,KAAM0R,EACN2mB,GAAI83F,EAEJ,wBAAsB,OAAMlxH,SAE3Be,GAHImwH,EAIQ,GAGvB,CAoLQC,CAAeT,EAAsC3hH,GACrD+tF,IACA75F,GAAwBK,gCArLhC,SACE66F,EACApvF,GAEA,MAAMqiH,EAAwBt8F,EAAoB,CAChDN,kBAAmB,CACjB,CAACvuB,GAAaO,eAAgBuI,EAAKsQ,OAErCiV,eAAgBtxB,GAChBgxB,gBAAiBn2B,EAAqBE,iBAExC,OAAOoe,OAAO+L,QAAQi2E,GAASpzF,KAAIgZ,IAAY,IAAV,CAAEwE,GAAExE,EACvC,OACEpR,eAACg9G,GAAY,CACX5uH,KAAM0R,EACN2mB,GAAIg4F,EAAsBpxH,SAG1B4S,gBAACm8G,GAAW,CAAA/uH,SAAA,CACV2S,eAACi9G,GAA4B,CAC3BnzB,OAAQx5F,GAAwBK,gCAChC,wBAAsB,SAExBqP,eAAA,KAAA3S,SAEI8D,GACEb,GAAwBK,iCACxBrH,QAGN0W,eAACq8G,GAAQ,CAAAhvH,SAAEuoB,QAdR6oG,EAgBQ,GAGrB,CAmJQC,CACEX,EACA3hH,GAEF+tF,IACA75F,GAAwBG,2BAvJhC,SAAuB+6F,GACrB,MAAMmzB,EAAex8F,EAAoB,CACvCR,eAAgB91B,EAAiCC,qBACjDu1B,gBAAiBn2B,EAAqBG,mBAElCuzH,EAAkBp1G,OAAO+L,QAAQi2E,GACpCv6E,QAAOiB,IAAA,IAAE,CAAE0D,GAAE1D,EAAA,OAAK0D,EAAI,EAAG,IACzBrgB,MAAK,CAAComH,EAAIC,IAAOA,EAAG,GAAKD,EAAG,KAC5BvjH,KAAIua,IAAa,IAAXoL,EAAGnI,GAAEjD,EACV,MAAO,CACL1rB,IACQ,gCAAN82B,EACI,8BACAA,EACN8gG,IAAKjpG,EACN,IAECkpG,EACJ,EACAF,EAAgBxmH,KAAI0nB,IAAA,IAAC,IAAE74B,EAAG,IAAE43H,GAAK/+F,EAAA,OAAK++F,CAAG,IAAE93H,QAAO,CAACmpE,EAAIC,IAAOD,EAAKC,IASrE,OAPE3mD,OAAO+L,QAAQi2E,GAAS3wF,SAAW+jH,EAAgB/jH,OAC/C+jH,EACA,IACKA,EACH,CAAE33H,IAAK,sBAAuB43H,IAAKC,KAGd1mH,KAAI42C,GAE7BhvC,eAACg9G,GAAY,CAAC5uH,KAAM0R,EAAY2mB,GAAIk4F,EAAatxH,SAC/C4S,gBAACm8G,GAAW,CAAC,wBAAsB,OAAM/uH,SAAA,CACvC4S,gBAACo8G,GAAQ,CAAAhvH,SAAA,EAAW,IAAR2hD,EAAE6vE,KAAW55D,QAAQ,GAAG,OACnCjW,EAAE/nD,QAHgD03H,IAQ7D,CAkHQI,CAAchB,GACd5zB,IACA75F,GAAwBM,2BAnHhC,SACEiiE,EACAz2D,GAEA,OAAOy2D,EACJt9D,MAAK,CAACypH,EAAIC,IAAOD,EAAGjwG,cAAckwG,KAClC7mH,KAAIyS,IACH,MAAMq0G,EAAOr0G,EAAEnB,SAAS,KAAOmB,EAAEO,MAAM,KAAK,GAAKP,EAC3Cs0G,EAAYp9F,EAAoB,CACpCV,gBAAiBz0B,EAAqBG,YACtC4nB,oBAAoB,EACpBkN,kBAAmB,CACjB,CAACvuB,GAAaO,eAAgBuI,EAAKsQ,MACnC,CAACpZ,GAAaD,cAAe,CAAC6rH,GAC9B,CAAC5rH,GAAaN,mBAAoB,MAGtC,OACEgN,eAACg9G,GAAY,CACX5uH,KAAM0R,EACN2mB,GAAI04F,EAEJ,wBAAsB,OAAM9xH,SAE3Bwd,GAHIs0G,EAIQ,GAGvB,CAwFQC,CAAarB,EAAWlrD,MAAwBz2D,GAChD,GAEN,OAAO+tF,IACL75F,GAAwBK,gCACxBqP,eAAC88G,GAAmB,CAClBC,SAAS,EAAM1vH,SAGd2wH,EAAe,IAAE,GAAAj+G,OAFVoqF,EAAsB,KAAApqF,OAAI3D,EAAKvU,KAKzCmY,eAAC48G,GAAU,CACT/7G,QAASm9G,EAAe5lH,KAAI,CAAC42C,EAAGzlB,IACrBylB,EACPhvC,eAAC68G,GAAgB,CAAAxvH,SAGd2hD,GAAC,GAAAjvC,OAFMoqF,EAAsB,KAAApqF,OAAI3D,EAAKvU,GAAE,KAAAkY,OAAIwpB,IAI7C,OAENvqB,OACEiB,gBAACi9G,GAAqB,CAAA7vH,SAAA,CACpB2S,eAACi9G,GAA4B,CAACnzB,OAAQK,IACtCnqF,eAAA,KAAA3S,SAAA,GAAA0S,OAAO5O,GAAgCg5F,GAAwB7gG,YAGnEk/F,cAAc,EACdxtF,KAAM5J,GAAYE,WAGxB,CAIA,OACE2O,gBAACO,GAAS,CAAAnT,SAAA,CAKR2S,eAAC28G,GAAa,CAAAtvH,SAAC,8BACdmc,OAAO+L,QAAQjlB,IAAyB8H,KAAIo1C,IAAA,IAAE,CAAE53B,GAAE43B,EAAA,MACnC,SAAdo9C,EA/HN,SACET,EACAyzB,GAEA,MAAMyB,EAAiBzB,EACpB3sG,QAAOi8B,IAAA,IAAC,OAAE48C,GAAQ58C,EAAA,OAAK48C,IAAWK,CAAsB,IACxD/xF,KAAIg1C,IAAA,IAAC,GAAEvlD,GAAIulD,EAAA,OAAe,OAAVh5B,QAAU,IAAVA,OAAU,EAAVA,EAAY9F,MAAK0Q,GAAKA,EAAEn3B,KAAOA,GAAG,IAErD,OAAKw3H,EAAexkH,OAElBmF,eAAC48G,GAAU,CAET/7G,QAASw+G,EAAejnH,KAAI6yB,IAC1B,MAAMq0F,EAAuBn9F,EAAoB,CAC/CN,kBAAmB,CACjB,CAACvuB,GAAaO,eAA0B,OAAVo3B,QAAU,IAAVA,OAAU,EAAVA,EAAYve,OAE5CiV,eAAgBtxB,GAChBgxB,gBAAiBn2B,EAAqBE,iBAExC,OAAS6/B,EACPjrB,eAAC68G,GAAgB,CAAAxvH,SACf4S,gBAAC+8G,GAAY,CAAC5uH,KAAM0R,EAAY2mB,GAAI64F,EAAqBjyH,SAAA,CACvD2S,eAACgrE,GAAM,CACL5hD,QAAO,GAAArpB,OAAKkrB,EAAW78B,KAAI,UAC3BiS,IAAK4qB,EAAWM,YAChB1rB,OAAM,GAAAE,OAAKkrB,EAAW78B,KAAI,4BAE5B4R,eAACm7F,GAAc,CAAC,wBAAsB,OAAM9tG,SACzC49B,EAAW78B,OAEb,aAVkB68B,EAAWpjC,IAahC,IAAI,IAEVmX,OACEiB,gBAACi9G,GAAqB,CAAA7vH,SAAA,CACpB2S,eAACi9G,GAA4B,CAACnzB,OAAQK,IACtCnqF,eAAA,KAAA3S,SAAA,GAAA0S,OAAO5O,GAAgCg5F,GAAwB7gG,YAGnEk/F,cAAc,EACdxtF,KAAM5J,GAAYE,WAAU,GAAAyO,OAhCpBoqF,EAAsB,UAHC,IAsCrC,CAkFUo1B,CAAe3pG,EAAGynG,GAClBM,EAAiB/nG,EAAGynG,EAA+BzyB,EAAU,MAClE,6BAAA7qF,OARe,SAAd6qF,EAAuBA,EAAYA,EAAU/iG,IASrC,ECxdhB,MAAMi1H,GAAsBx+G,KAAOC,IAAGkpB,QAAAC,aAAA,wKAIhBhpB,GAAK,GAAAqB,OAAOrB,EAAMC,MAAM2C,OAAO2a,IAAIqO,SAC1C5rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAC5Cd,GAAK,iBAAAqB,OAEfrB,EAAMq+G,QACFr+G,EAAMC,MAAM2C,OAAO2a,IAAIob,WACvB34B,EAAMC,MAAM2C,OAAO2a,IAAIic,SA4ClBsnF,OAzC0BnmH,IAIP,IAADomH,EAAA,IAJS,eACxCrC,EAAc,UACdxyB,EAAS,OACT/qF,EAAS,UACHxG,EACN,MAAMqmH,EAA2B,OAAdtC,QAAc,IAAdA,OAAc,EAAdA,EAAgBpyB,aAAa18E,MAC9C+1C,GAAUA,EAAOjoD,OAASwuF,EAAU/iG,KAGtC,OAAIynB,kBAAkB,OAAVowG,QAAU,IAAVA,GAAqB,QAAXD,EAAVC,EAAYj0H,iBAAS,IAAAg0H,OAAX,EAAVA,EAAuBp0B,iBAC1B,KAIPrrF,eAAC88G,GAAmB,CAACC,SAAS,EAAM1vH,SAAA,GAAA0S,OAClC6qF,EAAUx8F,KAAI,8BAAA2R,OACayJ,OAAOmH,QACxB,OAAV+uG,QAAU,IAAVA,OAAU,EAAVA,EAAwB,UAAmB,kBAAK,CAAC,GACjDtnH,KAAI,CAACunH,EAAgBC,IACdp2G,OAAOC,MAAmB,OAAdk2G,QAAc,IAAdA,OAAc,EAAdA,EAA0B,UAAK,CAAC,GAChDvnH,KAAInR,GACI44H,oBAAkB,YAAR54H,EAAoB,qBAAuBA,KAE7DF,QAAO,CAAC0Q,EAAKqoH,EAAMv2F,EAAO+wD,IACnB,GAANv6E,OAAUtI,GAAGsI,OACD,IAAVwpB,GAAkC,IAAnBq2F,EACX,GACAr2F,IAAU+wD,EAAMz/E,OAAS,GACzB+kH,IACEp2G,OAAOmH,QACK,OAAV+uG,QAAU,IAAVA,OAAU,EAAVA,EAAwB,UAAmB,kBAAK,CAAC,GACjD7kH,OACA,EACJ,QACA,MAAIkF,OACP+/G,IACF,MACL,MAA0B,ECpChC,MAAMt/G,GAAYlC,KAAOyzC,QAAOvzC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAdH,CAAc,oJAIVI,GAAK,GAAAqB,OACpB22B,GAAS,CAAEC,IAAKj4B,EAAMC,MAAM2C,OAAO2a,IAAIuU,UAAWoG,QAAS,QAM/Cl4B,GAASA,EAAMC,MAAM+/B,KAAKE,MAIvClU,GAAOpsB,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAAbH,CAAa,0DACTI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OACpCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMC,KACtCZ,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAGrD6gH,GAAezhH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAVH,CAAU,0EAITI,GAClBA,EAAMC,MAAM2C,OAAOm0B,MAAMqD,cAAcp6B,EAAM0jD,aAAe,UAG1D49D,GAAsB1hH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,eAAVH,CAAU,4DAMhCq+G,GAAgBr+G,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAAbH,CAAa,4EAClBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UACzCd,GAAK,aAAAqB,OAAiBrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG1D01F,GAAmB3hH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAVH,CAAU,mCAK7B4hH,GAAa5hH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAVH,CAAU,wGAQvB4wD,GAAgB5wD,aAAO09G,IAAgBx9G,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAAvBH,CAAuB,yBAIvCs+G,GAAat+G,aAAOiqF,IAAoB/pF,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAA3BH,CAA2B,sCAKxCu+G,GAAmBv+G,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,eAAVH,CAAU,uCAK7B6hH,GAAmB7hH,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAXH,CAAW,oJACdI,GAASA,EAAMC,MAAM2C,OAAOy7B,aAAar+B,EAAM0hH,UAKpD1hH,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAGtDq9G,GAAsBx+G,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,gBAAVH,CAAU,iIAIhBI,GAAK,GAAAqB,OAAOrB,EAAMC,MAAM2C,OAAO2a,IAAIqO,SAC1C5rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAC5Cd,GAAK,iBAAAqB,OAEfrB,EAAMq+G,QACFr+G,EAAMC,MAAM2C,OAAO2a,IAAIob,WACvB34B,EAAMC,MAAM2C,OAAO2a,IAAIic,SAI3B8yC,GAAS1sE,aAAOsrB,IAAYprB,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAnBH,CAAmB,8DAItBI,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO4mB,UAG3DizE,GAAiB78F,KAAOi/B,OAAM/+B,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAbH,CAAa,uBAI9B0+G,GAAe1+G,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAjBH,CAAiB,qHAKzBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAC1Bzd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OA2P/C4gH,OAjPWhnH,IAKQ,IAADqlB,EAAA4hG,EAAAC,EAAAC,EAAArN,EAAAsN,EAAAC,EAAAC,EAAA,IALN,YACzBpE,EAAW,KACXnyG,EAAI,UACJwgF,EAAS,OACT/qF,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,yBACtB,oBAAEsiB,EAAmB,UAAEjX,EAAS,mBAAEsX,GAAuB3B,KACzDzkB,EAAOiB,cAAapE,GAA6BiT,cAAIjT,EAAO,UAC5DoC,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxD0+D,EAAwBR,GAAyB,CACrDn9D,OACAf,QACAmnB,mBAAoB,IACfA,EACHb,eAAgB46F,GAElBrxG,cAEI01G,EAAmC,QAAjBliG,EAAGxT,EAAUhE,YAAI,IAAAwX,OAAA,EAAdA,EAAgBrQ,YAAY4C,QACrD+N,GACE+6C,EAAsBrwD,SAASsV,EAAEn3B,MAClB,SAAd+iG,GAAwBA,EAAU/iG,KAAOm3B,EAAEn3B,MAE1Cu1H,EAAqB,OAAJhzG,QAAI,IAAJA,GAEtB,QAF0Bk2G,EAAJl2G,EAAM7U,MAAK,CAACic,EAAGgB,IACpCA,EAAEq5E,QAAQ98E,cAAcyC,EAAEq6E,kBAC3B,IAAAy0B,OAF0B,EAAJA,EAEnB,GACEO,EAAqE,OAAdzD,QAAc,IAAdA,KAAgBpyB,aACzE,IACKoyB,EACHpyB,aAA4B,OAAdoyB,QAAc,IAAdA,GAA4B,QAAdmD,EAAdnD,EAAgBpyB,oBAAY,IAAAu1B,OAAd,EAAdA,EAA8BtvG,QAAOu6D,KACxB,cAAhB+wC,IAAgC/wC,EAAO9/E,cAGpD,KAEJ,IAAKm1H,GAA8C,OAAlBD,QAAkB,IAAlBA,MAAoB/lH,OAAQ,OAAO,KAUpE,MAAMimH,EATN,SAAuBxjG,GAErB,QAAcxiB,IAAVwiB,GAAiC,OAAVA,EAC3B,OAAO9T,OAAOC,KAAKtZ,IACjBqZ,OAAOmH,OAAOxgB,IAAmBygB,WAAU/F,GACzCgG,kBAAQyM,EAAOzS,EAAE,GAAIA,EAAE,MAG7B,CACqBk2G,CACI,OAAvBF,QAAuB,IAAvBA,GAAmC,QAAZL,EAAvBK,EAAyB/1B,kBAAU,IAAA01B,OAAZ,EAAvBA,EAAsCjE,IAGxC,IAAKuE,EACH,OAAO,KAGT,MACEE,EACAC,GACEpvG,oBAAiC,OAAvBgvG,QAAuB,IAAvBA,OAAuB,EAAvBA,EAAyB71B,cAAck2B,IAAW,IAAAC,EAAA,MAC9C,cAAhB5E,EAC+C,SAAhB,QAA3B4E,EAAAD,EAAYz1H,UAAU8+F,aAAK,IAAA42B,OAAA,EAA3BA,EAAqC,OACrB,cAAhB5E,EACA2E,EAAYx1H,WAAuC,WAA1Bw1H,EAAYx1H,UACrB,sBAAhB6wH,EAEwD,WADtDpiG,gBAAM+mG,EAAYt1H,kBAAyB,QAC3Cs1H,EAAYt1H,kBAAyB,MAAU,QACjC,uBAAhB2wH,GAC4C,SAA5C2E,EAAYv1H,mBAA0B,KAClC,IAGJy1H,GACc,OAAlBR,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoB3vG,QAAO+N,GAClBgiG,EAAmB5oH,KAAIic,GAAKA,EAAEjY,OAAMsN,SAASsV,EAAEn3B,QAClD,GAEFw5H,GACc,OAAlBT,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoB3vG,QAAO+N,GAClBiiG,EAAiB7oH,KAAIic,GAAKA,EAAEjY,OAAMsN,SAASsV,EAAEn3B,QAChD,GACR,SAASy5H,EAAiB50G,GACxB,OAAOyV,EAAoB,CACzBN,kBAAmB,CACjB,CAACvuB,GAAaO,eAAgB6Y,GAEhCiV,eAAgB46F,EAChBl7F,gBAAiBn2B,EAAqBE,gBAE1C,CAEA,MAAMm2H,IAA+BT,GAA8B,SAAdl2B,EACrD,OACE3qF,gBAACO,GAAS,CAAAnT,SAAA,CACR4S,gBAACigH,GAAU,CAAA7yH,SAAA,GACN+zH,EAAgBvmH,QACjBmF,eAACkvD,GAAa,CAAC4sD,UAAW,GAAIG,WAAYmF,EAAgBvmH,SAE5DmF,eAACggH,GAAmB,CAAA3yH,SAClB2S,eAAC+/G,GAAY,CAAC39D,WAAYm6D,MAG5Bv8G,eAAC0qB,GAAI,CAAAr9B,SAAoC,QAApC8lH,EAAEjiH,GAAsBqrH,UAAY,IAAApJ,OAAA,EAAlCA,EAAoC7pH,QAC3C0W,eAACknD,GAAU,CAACvlC,eAAgB46F,OAE9Bt8G,gBAACggH,GAAgB,CAAA5yH,SAAA,CACdk0H,GACCthH,gBAAA,OAAA5S,SAAA,CACE2S,eAAC28G,GAAa,CAAAtvH,SAAC,iBACf2S,eAACmgH,GAAgB,CAACC,OAAQU,GAAgB,GAAGzzH,SAC1CyzH,OAINM,EAAgBhpH,KAAI6yB,IAAe,IAADu2F,EAAAC,EAAAC,EACjC,OACE1hH,eAAC88G,GAAmB,CAACC,SAAS,EAAM1vH,SAClC4S,gBAAC+8G,GAAY,CACX5uH,KAAM0R,EACN2mB,GAAI66F,EAAiBr2F,EAAWve,OAAOrf,SAAA,CAEvC2S,eAACgrE,GAAM,CACL5hD,QAAO,GAAArpB,OAAKkrB,EAAW78B,KAAI,UAC3BiS,IAAK4qB,EAAWM,YAChB1rB,OAAM,GAAAE,OAAKkrB,EAAW78B,KAAI,4BAE5B4R,eAACm7F,GAAc,CAAC,wBAAsB,OAAM9tG,SACzC49B,EAAW78B,OAEK,OAAlB4yH,QAAkB,IAAlBA,GACwC,QADtBQ,EAAlBR,EACG/vG,QAAOoD,GAAKA,EAAEjY,OAAS6uB,EAAWpjC,YAAG,IAAA25H,GAWtC,QAXsCC,EADxCD,EAEGppH,KAAIic,IAAC,IAAAstG,EAAAC,EAAA,OACLrF,IAAgBlsH,GACK,QADYsxH,EAC7BttG,EAAE5oB,UAAU8+F,aAAK,IAAAo3B,OAAA,EAAjBA,EAA2B,MAC3BpF,IAAgBlsH,GAChBgkB,EAAE3oB,UACF6wH,IAAgBlsH,GACY,QADauxH,EACzCvtG,EAAEzoB,kBAAyB,aAAC,IAAAg2H,OAAA,EAA5BA,EAA8Bt2B,OAC9BixB,IAAgBlsH,GAChBgkB,EAAE1oB,mBAA0B,MAC5B,EAAE,WACP,IAAA81H,GACuB,QADvBC,EAZFD,EAaGxwG,QAAOT,IAAM2J,gBAAM3J,YAAG,IAAAkxG,OAbP,EAAlBA,EAcGtpH,KACAoY,GAAC,KAAAzQ,OACM61B,qBACHiqF,oBAAWrvG,EAAsBk3B,oBA9BHzc,EAAWpjC,GAkC/B,MAGvBw5H,EAAcxmH,QAAwB,SAAd+vF,GACzB5qF,eAAC88G,GAAmB,CAACC,SAAS,EAAK1vH,SACjC4S,gBAAC+8G,GAAY,CACX5uH,KAAM0R,EACN2mB,GAAI66F,EAAiB12B,EAAUl+E,OAAOrf,SAAA,CAEtC2S,eAACgrE,GAAM,CACL5hD,QAAO,GAAArpB,OAAK6qF,EAAUx8F,KAAI,UAC1BiS,IAAKuqF,EAAUr/D,YACf1rB,OAAM,GAAAE,OAAK6qF,EAAUx8F,KAAI,4BAE3B4R,eAACm7F,GAAc,CAAC,wBAAsB,OAAM9tG,SACzCu9F,EAAUx8F,OAEI,OAAhB6yH,QAAgB,IAAhBA,GACuC,QADvBR,EAAhBQ,EACGhwG,QAAOoD,GAAKA,EAAEjY,OAASwuF,EAAU/iG,YAAG,IAAA44H,GAWrC,QAXqCC,EADvCD,EAEGroH,KAAIic,IAAC,IAAAwtG,EAAAC,EAAA,OACLvF,IAAgBlsH,GACK,QADYwxH,EAC7BxtG,EAAE5oB,UAAU8+F,aAAK,IAAAs3B,OAAA,EAAjBA,EAA2B,MAC3BtF,IAAgBlsH,GAChBgkB,EAAE3oB,WAAa,SACf6wH,IAAgBlsH,GACY,QADayxH,EACzCztG,EAAEzoB,kBAAyB,aAAC,IAAAk2H,OAAA,EAA5BA,EAA8Bx2B,OAC9BixB,IAAgBlsH,GAChBgkB,EAAE1oB,mBAA0B,MAC5B,EAAE,WACP,IAAA+0H,GACuB,QADvBC,EAZFD,EAaGzvG,QAAOT,IAAM2J,gBAAM3J,YAAG,IAAAmwG,OAbT,EAAhBA,EAcGvoH,KACAoY,GAAC,KAAAzQ,OACM61B,qBACHiqF,oBAAWrvG,EAAsBk3B,oBA9BJkjD,EAAU/iG,IAoCtC,SAAd+iG,GAAwC,cAAhB2xB,GACvBv8G,eAACw/G,GAAyB,CACxBjD,YAAaA,EACb3xB,UAAWA,EACXwyB,eAAgBA,EAChBv9G,OAAQC,MAGTuhH,EAAcxmH,QAAwB,SAAd+vF,GACzB5qF,eAAC48G,GAAU,CACT/7G,QAASwgH,EAAcjpH,KAAI6yB,GAEvBjrB,eAAC68G,GAAgB,CAAAxvH,SACf4S,gBAAC+8G,GAAY,CACX5uH,KAAM0R,EACN2mB,GAAI66F,EAAiBr2F,EAAWve,OAAOrf,SAAA,CAEvC2S,eAACgrE,GAAM,CACL5hD,QAAO,GAAArpB,OAAKkrB,EAAW78B,KAAI,UAC3BiS,IAAK4qB,EAAWM,YAChB1rB,OAAM,GAAAE,OAAKkrB,EAAW78B,KAAI,4BAE5B4R,eAACm7F,GAAc,CAAC,wBAAsB,OAAM9tG,SACzC49B,EAAW78B,WAXK68B,EAAWpjC,MAiBtCmX,OACEgB,eAAA,QAAA3S,SAAA,GAAA0S,OAAUshH,EAAcxmH,OAAM,wBAAAkF,OACH,IAAzBshH,EAAcxmH,OAAe,GAAK,OAGtC2tF,cAAc,EACdxtF,KAAM5J,GAAYC,UAGtB2O,eAACm9G,GAAiC,CAChCZ,YAAaA,EACb3xB,UAAWA,EACXwyB,eAAgBA,IAElBp9G,eAACs8G,GAAoB,CACnBC,YAAaA,EACb3xB,UAAWA,EACXxgF,KAAMA,SAGA,ECxWhB,MAAM21C,GAAQzhD,KAAO4sD,OAAM1sD,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,cAAbH,CAAa,mEAMrByjH,GAAmBzjH,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,cAAZH,CAAY,0CAGxBI,GAASA,EAAMC,MAAM2C,OAAOi3B,MAAMpc,aAIzCg5D,GAAa72E,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,cAAVH,CAAU,wJAMZI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OACzCf,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAI/Dy3F,GAAe1jH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,cAAVH,CAAU,yCAKzB2jH,GAAc3jH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,cAAVH,CAAU,0DAMxB4jH,GAAa5jH,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,cAAZH,CAAY,kDAEhBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAC7CnsB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGrCimG,GAAsB7jH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,cAAVH,CAAU,sCAIhC8jH,GAAmB9jH,aAAOkrE,IAAchrE,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,cAArBH,CAAqB,sBAC7BI,GAASA,EAAMC,MAAM+/B,KAAKE,MAErCz9B,GAAa7C,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,cAAZH,CAAY,gBACpBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAErC47C,GAAmBx5D,aAAOoB,IAAWlB,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,cAAlBH,CAAkB,8BAKrC+jH,GAAsB/jH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,eAAVH,CAAU,4EAKhC84D,GAAa94D,KAAO+0F,GAAE70F,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAATH,CAAS,8BACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QAC5B/rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KA0MzCo8B,qBA/LM5tD,IAMM,IAAD+5G,EAAA,IANJ,KACpBhpG,EAAI,eACJi2C,EAAc,MACdh2C,EAAK,aACLjU,EAAY,MACZuI,GACMtF,EACN,MAAMgC,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxDe,EAAOiB,cAAapE,GAA6BA,EAAMmD,QACvD,mBACJomB,EAAkB,oBAClBL,EAAmB,UACnBjX,EAAS,gBACToX,GACEzB,KACEE,EAAUC,eACVW,EAAiBa,EAAmBb,eACpCN,EAAkBmB,EAAmBnB,gBAErC04C,EAAwBR,GAAyB,CACrDn9D,OACAf,QACAmnB,mBAAoB,IACfA,EACHb,eAAgBA,GAElBzW,cAGIo3G,EACc,SAAjBlsH,KACO,OAALiF,QAAK,IAALA,OAAK,EAALA,EAAQ,gCACPsmB,IAAmBtxB,KACL,SAAjB+F,GACC2jE,EAAsBrwD,SAAStT,EAAavO,IAe1C06H,EACJ//F,EAAmBnB,kBAAoBn2B,EAAqBC,cACxDq3H,EAAuB,OAALnnH,QAAK,IAALA,OAAK,EAALA,EAAQ,kCAGhC+U,qBAAU,KAGe,wBAAnBuR,GAA6D,SAAjBvrB,GAZhDksB,EAAgB,CACd,CAAChvB,GAAaO,eAYE,SAIG,wBAAnB8tB,GACoB,mBAApBN,GA3BFohG,KAEA,MAAMC,EAAmBvgG,EAAoB,CAC3Cd,gBAAiBn2B,EAAqBE,eACtCu2B,eAAgB8gG,IAElB1hG,EAAQwB,KAAKmgG,EAAiB,EAuB5BC,CAAkB,YACpB,GACC,CAACthG,EAAiBM,EAAgBvrB,IAErC,MAAMwsH,EAA0B3xH,GAAoBmH,KAAIuqD,IAAW,IAADwwD,EAAAz0F,EAAAmkG,EAChE,MAAO,CACLv5H,MAAoC,QAA/B6pH,EAAEjiH,GAAsByxD,UAAO,IAAAwwD,OAAA,EAA7BA,EAA+B7pH,MACtC8D,KAAM+0B,EAAoB,CACxBd,gBACEA,IAAoBn2B,EAAqBE,eACrCF,EAAqBE,eACrBF,EAAqBC,cAC3Bw2B,eAAgBghC,IAElB96D,GAAI86D,EACJtgB,WACEsgB,IAAWtyD,MAEK,QAAdquB,EAAAxT,EAAUhE,YAAI,IAAAwX,GAAa,QAAbmkG,EAAdnkG,EAAgBrQ,mBAAW,IAAAw0G,GAA3BA,EAA6Bv0G,MAAK0Q,GAAKA,EAAEn3B,KAAOuU,EAAKvU,MAChD,OAALwT,QAAK,IAALA,KAAQ,mCAEb,IAGH,OAAOgP,EACLrK,eAAC2pF,KAAa,CAAAt8F,SACZ2S,eAAC8jG,GAAgB,CACfC,QAAS,wBACTlkG,OAAO,oBAIXI,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACGk1H,GACCviH,eAACoiH,GAAgB,CACf34C,aAAc9nD,EACd+nD,KAAMk5C,EACN/iH,OAAQ,0BAGXyiH,EACCtiH,eAACY,GAAa,CACZG,gBAAiBs/C,EACjBx/C,QACEZ,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE4S,gBAACoiH,GAAmB,CAAAh1H,SAAA,CAClB2S,eAAC0sB,GAAO,CACNc,aACEvtB,gBAAC+hH,GAAY,CAAA30H,SAAA,CACX2S,eAAA,QAAA3S,SAAM,aACN2S,eAACiiH,GAAW,CAAA50H,SACTg/D,GAAgB1qC,GAAgBmhG,QAAQ1qH,KAAIosG,GAEzCvkG,gBAAA,QAAA5S,SAAA,CACE2S,eAACkiH,GAAU,CACTptH,KAAMF,GAAwB4vG,GAAQ1vG,OAEvCF,GAAwB4vG,GAAQ3vG,cAJxB2vG,UAWrBj3E,UAAW,MACXE,QACEztB,eAAC+hH,GAAgB,CAACjtH,KAAK,iBAAiBuM,MAAM,SAEhDxB,OAAO,gCAEW,wBAAnB8hB,GACC3hB,eAACo3D,GAAU,CAAA/pE,SACRqyC,GAAgB,6BAGpB/d,IAAmBtxB,IAClB2P,eAACo3D,GAAU,CAAA/pE,SAAC,4DAKhB2S,eAAC+/C,GAAK,CAAA1yD,SACJ2S,eAAC+iH,GAAiB,CAChB34G,KAAMA,EACNi2C,eAAgBA,EAChB1+B,eAAgBA,EAChBipE,UAAWx0F,EACXi9G,mBAAyB,OAALh4G,QAAK,IAALA,OAAK,EAALA,EAAQ,kCAGhC4E,gBAACk1E,GAAU,CAAA9nF,SAAA,CAC6B,QAD7B+lH,EACRliH,GAAsBywB,UAAe,IAAAyxF,OAAA,EAArCA,EAAuC9pH,MACtB,SAAjB8M,EAAuB,KAAA2J,OAAQ3J,EAAahI,MAAI,GACjD4R,eAACknD,GAAU,CACTvlC,eAAgBA,EAChB0xF,oBAAoB,OAGvBmP,GACCxiH,eAACmiH,GAAmB,CAAA90H,SACjBu1H,EAAwBxqH,KAAIuqD,GAEzB3iD,eAACqgH,GAAiB,CAChBz1B,UAAWx0F,EACXmmH,YAAa55D,EAAO96D,GACpBuiB,KAAMA,GACDu4C,EAAO96D,aAU5BmY,eAAC83D,GAAgB,CACfn4D,KAAM+/B,GAAgB,yBACtB1gC,OAAQgB,eAACmB,GAAU,CAACrM,KAAM,SAC1B+K,OAAQ,4BAIf,IC3QI,MCLMmjH,GAEK,WAAgC,IAADtkG,EAAA,IAA9BvP,EAAoBvU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,GACxC,MAAM6Q,EAAsBpO,cACzBpE,GAA6BA,EAAM0B,KAAKoR,mBAErC,UAAEb,GAAc2V,KAChB/qB,EAAWoV,EAAUpV,SACrB6Z,EAAUzE,EAAUyE,QAEpBhE,EAAmBtO,cACtBpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,WAEhDyJ,EAAuB,QAAjBsJ,EAAGxT,EAAUhE,YAAI,IAAAwX,OAAA,EAAdA,EAAgBtJ,OACzB6tG,EAAgB5zG,mBAAQ,IAAMF,EAAqB/W,KAAImW,GAAKA,EAAE1mB,MAAK,CACvEsnB,IAEIzD,EAAS2D,mBACb,MACE5D,cACAE,WACAD,OAAU5V,EACN,CACEI,MAAO+sH,EACPtzG,UACAuzG,YAAaptH,EACbsf,UAEF,CACElf,MAAO+sH,EACPtzG,UACAyF,aAGR,CAAC3J,EAAakE,EAAS7Z,EAAUmtH,EAAet3G,EAAUyJ,IAG5D,OAAOnJ,oBACL,CAAC,iBAAkBP,IACnB,IDlCmC1N,WAIQ,IAJD,YAC5CyN,EAAW,SACXE,EAAQ,OACRD,GACarS,EAcb,aAbuDiR,GAAI4B,IAAG,IAAAnM,OAExD4L,EAAQ,kBAAkB,CAC9BjB,QAAS,CACPmB,cAAc,UAAD9L,OAAY0L,IAE3BC,OAAQ,CACNxV,MAAOwV,EAAOxV,MAAMszB,KAAK,KACzB7Z,QAASjE,EAAOiE,QAChByF,OAAQ1J,EAAO0J,OACf8tG,YAAax3G,EAAOw3G,gBAGR94G,IAAI,ECkBhB+4G,CAAwBz3G,GAAQ7N,MAAKulH,GACnCp3F,iBDHN5hB,KAEA,MAAMi5G,EAAmBA,CAAC3yG,EAAYzpB,IACpCA,EAAI2lD,QAAQ,QAAS,QACvB,OAAOxiC,EAAKhS,KAAI42C,IACP,IACFA,EACH87C,WAAY5N,kBAAQluC,EAAE87C,WAAYu4B,GAIlCr4B,aAAch8C,EAAEg8C,aAAa5yF,KAAI2yF,GACxB7N,kBACL,IACK6N,EACHn/F,kBAAmBsxF,kBACjB6N,EAAOn/F,kBACPy3H,IAGJA,QAIN,ECrBWC,CAA0BF,IAAc/+D,GAAUA,EAAOwnC,aAEpE,CACE90F,UACI0U,KAAiBE,KAAcs3G,EAAcpoH,UAAY8U,GAGnE,EC7BMm6D,GAAuBxrE,aAAOurE,IAAerrE,WAAA,CAAAxV,YAAA,yCAAAyV,YAAA,cAAtBH,CAAsB,gCAK7Cie,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,cAAVH,CAAU,8DACjBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QACpC5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAK/DoV,GAAQrhC,aAAO65D,IAAU35D,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,cAAjBH,CAAiB,4BAIzBilH,GAAgBjlH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,cAAVH,CAAU,+EAO1BklH,GAAoBllH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,cAAVH,CAAU,oBAI9BwzF,GAAexzF,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,cAAXH,CAAW,sCAI1BmlH,GAAYnlH,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,cAAXH,CAAW,wBAGvBkgD,GAAclgD,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,cAATH,CAAS,wFACZI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAEpCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KACtCnsB,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAGrDqgC,GAAejhC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,cAAVH,CAAU,oBAChBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAElDud,GAAW9pC,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,cAAZH,CAAY,wCAIvBmgD,GAAYngD,KAAOkT,EAAChT,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAARH,CAAQ,iHAIbI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,YAGrCisB,IAKF4hC,GAAa1rE,aAAOkrE,IAAchrE,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAArBH,CAAqB,mEAGrBI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAE/DmB,GAASptB,KAAOqtB,OAAMntB,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAbH,CAAa,4DAMtB6C,GAAa7C,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAZH,CAAY,gBACpBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGrC47C,GAAmBx5D,aAAOoB,IAAWlB,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,eAAlBH,CAAkB,8BAyP5BolH,OA9OUrqH,IAA8C,IAADqlB,EAAAmkG,EAAA,IAA5C,UAAEjjH,EAAS,OAAEC,EAAS,UAAiBxG,EAC/D,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,yBACtB,WAAEyb,GAAeP,KACjBlf,EAAWob,eAEX5b,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxDe,EAAOiB,cAAapE,GAA6BiT,cAAIjT,EAAO,WAC5D,UAAEiS,EAAS,mBAAEsX,EAAkB,oBAAEL,GAAwBtB,KACzDzM,EAAalJ,EAAUhE,KACvBy8G,EAAoBnhG,EAAmBpsB,cAE3CirB,gBAAiBuiG,EACjBjiG,eAAgBkiG,GACdrhG,EAGJpS,qBAAU,KACRzU,SAASrS,MFtG4Bq5D,KAA4B,IAADwwD,EAElE,MAAMoJ,EACO,wBAAX55D,EACIr3D,EAA0BJ,EAAqBC,eAClB,QADgCgoH,EAC7DjiH,GAAsByxD,UAAO,IAAAwwD,OAAA,EAA7BA,EAA+B7pH,MAC/Bw6H,EAAoB32H,EAAalC,GAAwB3B,MAC/D,OAAO+hB,GAAa,GAADtL,OACZw8G,EAAW,GAAAx8G,OAAMw8G,EAAW,OAAQ,IAAEx8G,OAAG+jH,GAC/C,EE6FkBC,CAAyBF,EAA2B,GACpE,CAAChoH,EAAUgoH,IAEd,MAAMztH,GACM,OAAVge,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,YAAYC,MAAK0Q,GAAKA,EAAEtS,QAAUi3G,MAAsB,OAChE5pD,EAAwBR,GAAyB,CACrDn9D,OACAf,QACAmnB,mBAAoBA,EACpBtX,eAIAd,KAAM45G,EACNz/F,UAAW0/F,EACX/vE,QAASgwE,GACPlB,GAA8B,OAAV5uG,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,aAC9B81G,EAAiC,OAAL9oH,QAAK,IAALA,OAAK,EAALA,EAAQ,mCAIpC+5G,IAGDwO,IAAgC14H,EAAqBE,gBACpDy4H,IAA+BxzH,IACjCuzH,IAAgC14H,EAAqBG,oBAC7C,OAALgQ,QAAK,IAALA,OAAK,EAALA,EAAQ,+BAEf,KACqB,SAAjBjF,EACEg/G,EACAr7C,EAAsBrwD,SAAStT,EAAavO,MAChDkyE,EAAsBrwD,SAAStN,EAAKvU,IACpC,CAEA,MAAMu8H,EAAgC,OAAVhwG,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,YAAYC,MAClDC,GAAKA,EAAE1mB,KAAOuU,EAAKvU,KAYrB,GAAMu8H,EACJ,OACEpkH,eAACwmB,KAAQ,CACPC,GAAItE,EAAoB,CACtBN,kBAAmB,CACjB,CAACvuB,GAAaO,eAAgBuwH,EAAoB13G,OAEpD2U,gBAAiBuiG,EACjBjiG,eAAgBkiG,KAK1B,CAEA,MAAMQ,IACE,OAALhpH,QAAK,IAALA,KAAQ,kCACM,QAAfqjB,EAACxT,EAAUhE,YAAI,IAAAwX,GAAa,QAAbmkG,EAAdnkG,EAAgBrQ,mBAAW,IAAAw0G,GAA3BA,EAA6Bv0G,MAAKC,GAAKA,EAAE1mB,KAAOuU,EAAKvU,MAClDy8H,EAA2B96G,OAAOmH,OAAOzlB,GAC5C+lB,QAAO8gC,GACNA,IAAY7mD,EAAqBG,kBAC7B84H,IAGL/rH,KAAI25C,IAAO,CACVlqD,GAAIkqD,EACJ1P,WACE0P,IAAY7mD,EAAqBG,kBACjCg5H,EACFj3H,KAAM+0B,EAAoB,CACxBd,gBAAiB0wB,IAEnBzoD,MAAOgC,EAA0BymD,OAWrC,MAAM7jC,EAAWkG,EAAanG,GAAoBmG,GAAc,KAC1DmwG,EAAcr2G,EAAQ,KAAAnO,OAAQmO,GAAa,GAE3CgjB,EACJjxB,gBAACsjH,GAAa,CAAAl2H,SAAA,CACZ2S,eAAC2/B,GAAK,CACJr2C,MACE2W,gBAAC6xF,GAAY,CAAAzkG,SAAA,CACX4S,gBAACwjH,GAAS,CAAAp2H,SAAA,CAAC,iBAERk3H,KAEHvkH,eAACm+C,GAAS,CACRpjD,OAAO,QACPiE,OAAQgB,eAACw+C,GAAW,CAAAnxD,SAAC,4BACrBwT,QACEZ,gBAACs/B,GAAY,CAAAlyC,SAAA,CACX2S,eAACo/B,GAAQ,CACPC,SAAUgtB,GAAgB,kBAC1BxsD,OAAQC,IAEVG,gBAACw+C,GAAS,CACR3iD,KAAK,oFACLugB,QA/BlB,SAA0BxS,GACxByR,EAAW,CACTzR,IACA/hB,MAAM,GAADiY,OAAKD,EAAU,oBACpB4Q,MAAO,gBAEX,EA0BkB+7B,IAAI,sBACJvf,OAAO,SACP,iBAAAntB,OAAgBD,EAAU,oBAAmBzS,SAAA,CAE7C2S,eAACooC,GAAQ,CAACtzC,KAAK,gBAAgB+K,OAAQC,IAAc,yCAK3D1R,KAAK,iBACLyR,OAAQC,OAIdD,OAAQ5U,IAEV+U,eAAC45D,GAAY,CAACC,kBAAmBu7C,OAIrC,OAAY,OAAL/5G,QAAK,IAALA,KAAQpQ,GACb+U,eAACU,GAAiB,CAAArT,SAChB4S,gBAACsc,GAAc,CAAC3c,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CAC5D2S,eAAC8pE,GAAoB,CACnBjpE,QAASqwB,EACTrxB,OAAQ5U,IAEVgV,gBAACujH,GAAiB,CAAAn2H,SAAA,CAChB2S,eAACgqE,GAAU,CACTP,aAAcm6C,EACdl6C,KAAM46C,EACNzkH,OAAO,0BAETI,gBAACmiC,KAAM,CAAA/0C,SAAA,CACJ82H,GACCnkH,eAAC+mB,KAAK,CACJ35B,KAAI,IAAA2S,OAAM9U,EAAsB,KAAA8U,OAAI7U,EAAqBG,kBAAmBgC,SAE3Eg3H,EACCrkH,eAAC83D,GAAgB,CACfn4D,KAAM+/B,GAAgB,yBACtB1gC,OAAQgB,eAACmB,GAAU,CAACrM,KAAM,SAC1B+K,OAAQ,0BAGVG,eAAC41G,GAAe,CAAC/1G,OAAQC,MAM/BE,eAAC+mB,KAAK,CACJ6jD,OAAK,EACLx9E,KAAI,IAAA2S,OAAM9U,EAAsB,wBAAuBoC,SAEvD2S,eAACwmB,KAAQ,CACPC,GAAE,IAAA1mB,OAAM9U,EAAsB,KAAA8U,OAC5B7U,EAAqBC,eAAa4U,OAC/BnE,OAAOC,SAASmb,OAASpb,OAAOC,SAASmb,OAAS,QAI3DhX,eAAC+mB,KAAK,CACJ6jD,OAAK,EACLx9E,KAAI,IAAA2S,OAAM9U,EAAsB,KAAA8U,OAAI7U,EAAqBC,eAAgBkC,SAEzE2S,eAACwkH,GAAY,CACXp6G,KAAM45G,EACN3jE,eAAgB4jE,EAChB55G,MAAO65G,EACP9tH,aAAcA,MAIlB4J,eAAC+mB,KAAK,CACJ35B,KAAI,IAAA2S,OAAM9U,EAAsB,KAAA8U,OAAI7U,EAAqBE,gBAAiBiC,SAE1E2S,eAACwkH,GAAY,CACXp6G,KAAM45G,EACN3jE,eAAgB4jE,EAChB55G,MAAO65G,EACP9tH,aAAcA,MAIlB4J,eAAC+mB,KAAK,CAAC35B,KAAI,IAAA2S,OAAM9U,GAAyBoC,SACxC2S,eAACwkH,GAAY,CACXp6G,KAAM45G,EACN3jE,eAAgB4jE,EAChB55G,MAAO65G,EACP9tH,aAAcA,SAIpB4J,eAAC0rB,GAAM,CAAAr+B,SACL2S,eAACk9C,GAAc,CAACr9C,OAAQC,cAMhCE,eAACwmB,KAAQ,CAACC,GAAE,KACb,E,cCnIYnqB,OArMAjD,IAA2C,IAA1C,KAAE+Q,EAAI,oBAAEgiF,GAA4B/yF,EAC9C4lC,EAA4B,CAC9B,CACE7wC,KAAM8C,GAAsBJ,GAAoBE,gBAAgB1H,MAChE+X,MACE01B,GAAaz1B,OAAOm0B,MAAMqD,cACxBhoC,GAAoBE,gBAExBgpC,OAAQ,CACNm5B,UACEp8B,GAAaz1B,OAAOm0B,MAAMqD,cACxBhoC,GAAoBE,gBAExB40D,UACE7uB,GAAaz1B,OAAOm0B,MAAMqD,cACxBhoC,GAAoBE,iBAG1BoZ,KAAMA,EAAKhS,KAAI42C,IACN,IAAKA,EAAGiT,EAAGjT,EAAE/V,kBAEtBrC,QAAS,MAoDb,OAhDIw1D,IACFntD,EAAS,IACJA,EACH,CACE7wC,KAAM8C,GAAsBJ,GAAoBC,gBAAgBzH,MAChE+X,MACE01B,GAAaz1B,OAAOm0B,MAAMqD,cACxBhoC,GAAoBC,gBAExBipC,OAAQ,CACNm5B,UACEp8B,GAAaz1B,OAAOm0B,MAAMqD,cACxBhoC,GAAoBC,gBAExB60D,UACE7uB,GAAaz1B,OAAOm0B,MAAMqD,cACxBhoC,GAAoBC,iBAG1BqZ,KAAMA,EAAKhS,KAAI42C,IACN,IAAKA,EAAGiT,EAAGjT,EAAEjW,kBAEtBw8B,OAAQ,GAEV,CACEnnE,KAAM8C,GAAsBJ,GAAoB3F,eAAe7B,MAC/D+X,MACE01B,GAAaz1B,OAAOm0B,MAAMqD,cACxBhoC,GAAoB3F,eAExB6uC,OAAQ,CACNm5B,UACEp8B,GAAaz1B,OAAOm0B,MAAMqD,cACxBhoC,GAAoB3F,eAExBy6D,UACE7uB,GAAaz1B,OAAOm0B,MAAMqD,cACxBhoC,GAAoB3F,gBAG1Bif,KAAMA,EAAKhS,KAAI42C,IACN,IAAKA,EAAGiT,EAAGjT,EAAEhW,iBAEtBpC,QAAS,OAKR,CACLnB,MAAO,CACL8L,OAAQ,IACRyyB,WAAY,EACZ8R,YAAa,EACb7R,UAAW,EACXwwD,cAAe,EACf37F,MAAO,CACLoZ,WAAYnL,GAAan4B,MAAMC,QAAQzQ,KACvCq3D,WAAY1uB,GAAan4B,MAAMC,QAAQI,QAAQO,UAGnDyhD,MAAO,CACLoE,WAAYj7C,EAAKhS,KAAI42C,IACnB,MAAM01E,EAAkB11E,EAAE/1C,QAAU7I,GAC9Bi5F,EAAc3wF,KAAOs2C,EAAEh2C,SAAS6+E,OACpC7oC,EAAEp2C,WACFxR,GAEI2R,EAAQc,GAAgB,CAC5BE,OAAQ,OACRC,UAAWN,GAAgBs1C,EAAEh2C,WAEzBR,EAAMqB,GAAgB,CAC1BE,OAAQsvF,EAAc,KAAO,OAC7BrvF,UAAWN,GAAgBs1C,EAAEp2C,YAAc,IAAIC,QAEjD,OAAO6rH,EAAkB,cAAa,GAAA3kH,OAAMhH,EAAK,KAAAgH,OAAIvH,EAAK,IAE5DotD,UAAW7uB,GAAaz1B,OAAO2a,IAAIC,UACnCspC,OAAQ,CACNzuD,SAAS,EACT+xB,MAAO,CACLznB,MAAO01B,GAAaz1B,OAAO2a,IAAIC,UAC/BgmB,WAAYnL,GAAan4B,MAAMk0B,UAAU1kC,KACzCq3D,WAAY1uB,GAAan4B,MAAMk0B,UAAU7zB,QAAQQ,MAEnDwiD,EAAG,KAGPlB,MAAO,CACLI,IAAK,EACLC,IAAK,IACLuE,WAAW,EACX+P,UAAWlsD,OAAO+L,QAAQplB,IAAmBiI,KAAI0B,IAAmB,IAAjB7S,EAAK+pB,GAAMlX,EAC5D,MAAO,CACLuH,MAAOq1B,GAAS,CACdC,IAAKI,GAAaz1B,OAAOy7B,aAAa91C,GACtC2vC,QAAS,KAEX9uC,MAAO,CACL+wC,KAAMlD,oBAAU1uC,EAAIC,eACpBo7D,cAAe,SACfL,GAAI,GAENzhC,KAAMxP,EAAM,GACZyV,GAEEx/B,IAAQqI,GAAiBC,UAAYyhB,EAAM,GAAK,EAAIA,EAAM,GAC7D,IAEHs4E,cAAe,CACbn5F,GAAkBT,WAAW,GAC7BS,GAAkBV,GAAG,GACrBU,GAAkBX,KAAK,GACvBW,GAAkBZ,UAAU,GAC5B,KAEFjG,MAAO,CACLyN,SAAS,IAGbqvD,OAAQ,CACNH,MAAO,QACPlvD,SAAS,EACT6kE,aAAc,GACdC,UAAW,CACTpW,WAAY1uB,GAAan4B,MAAMC,QAAQI,QAAQkJ,MAEjD2zD,OAAQ,aACRxZ,cAAe,SACfyZ,aAAc,EACdC,YAAa,EACbC,cAAe,GAEjB5V,YAAa,CACXiW,KAAM,CACJvS,WAAY,CACVhzD,SAAS,GAEXijC,OAAQ,CACNw5B,OAAQ,UAEVhN,OAAQ,CACNv+B,MAAO,CACL2O,QAAS,MAKjBttC,MAAO,CACLuvC,UAAM/9B,GAER+iC,QAAS,CACP/mC,SAAS,EACTC,SAAS,EACTC,gBAAiB,KACjBC,QAAQ,EACRC,YAAa,EACbC,aAAc,EACdC,SAAS,EACTwvD,WAAY,SAASC,EAAWC,EAAW7H,GACzC,OAAO6C,GAA2B,CAChCC,gBAAkB/0B,KAAa+5B,YAAYF,EAAGC,EAAG7H,GACjD+C,aAAcpmD,OAAOorD,SAEzB,EACAlI,UAAW,WACT,MrO3H8Bsd,KACpC,MAAMotB,EAAaptB,EAAUn9B,OAAO7wC,KAEpC,IAAIu2H,EAAcC,EAClB,GACEp7B,IACAt4F,GAAsBJ,GAAoBC,gBAAgBzH,MAE1Dq7H,EAAY,uCAAA5kH,OAA0C61B,qBACpDnlB,GAAqB2rD,EAAUrjC,qBAE5B,CACL,MAAM8rF,EACJr7B,IACAt4F,GAAsBJ,GAAoB3F,eAAe7B,MACrD8yE,EAAUpjC,aACVojC,EAAUnjC,cAEhB0rF,EAAY,GAAA5kH,OAAMypF,EAAU,MAAAzpF,OAAK61B,qBAC/BnlB,GAAqBo0G,KAEvB,MAAMC,EACJt7B,IACAt4F,GAAsBJ,GAAoB3F,eAAe7B,MACrD8yE,EAAUgtB,oBACVhtB,EAAU+sB,qBAChBy7B,EAAczwF,kBACZ3qB,OAAO+L,QAAQuvG,GAAa1sH,KAAI4V,IAAa,IAAX+P,EAAGnI,GAAE5H,EACrC,OAAOkD,iBAAO0E,GACV,KAAI,YAAA7V,OACQ41B,oBAAUC,qBAAW7X,IAAG,eAAAhe,OAAc61B,qBAChDnlB,GAAqBmF,IACtB,cAAa,KAEpB4T,KAAK,GACT,CAEA,MAAM,gGAANzpB,OACEq8D,EAAU7jE,WAAU,sCAAAwH,OAEpBq8D,EAAUxgD,SAAQ,oBAAA7b,OACD4kH,EAAY,eAAA5kH,OAC7B6kH,EAAW,OAAA7kH,OAAU6kH,EAAW,SAAU,GAAE,WqOiFjCG,CAAwB/3F,KAAaiyB,MAC9C,GAEFhgB,SACD,EC3IY+lF,OAhEW3rH,IAKZ,IALa,UACzBuG,EAAS,KACTwK,EAAI,eACJi2C,GAAiB,EAAK,OACtBxgD,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,yBACtB,WAAEyb,GAAeP,KACjB63C,EAAek5B,GACnB1hF,GAEI65C,EAAaj4B,iBAAOxiB,OAAOmH,OAAOiiD,GAAe,WAAWvmC,MAChE,EhY+b2C,GgY5bvChxB,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxD+wF,EAA2B,OAAL/wF,QAAK,IAALA,OAAK,EAALA,EAAQ,0BAsBpC,MAAMo6B,EAAQpmB,mBAAQ,KACb,CACL/S,OAAQkkD,GAAe,CAAEp2C,KAAM65C,EAAYmoC,wBAC3CvkG,GAAI,sBACJw4D,oBAED,CAAC+rC,EAAqBnoC,EAAY5D,IAErC,OACErgD,eAAA,OACE2tB,aA3BJ,SAA0B9jB,GACxBA,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAO,sBACP4oB,MAAO,qBAEX,EAqBIkd,aApBJ,SAAyB/jB,GACvBA,EAAEyS,UACFhB,EAAW,CACTzR,IACA/hB,MAAO,sBACP4oB,MAAO,oBAEX,EAcI9Q,UAAWA,EACX,cAAaE,EAAWzS,SAExB2S,eAAC2pF,KAAa,CAAAt8F,SACZ2S,eAAC+/C,GAAK,CACJtqB,MAAOA,EACP71B,UAAWA,EACXC,OAAM,GAAAE,OAAKD,EAAU,6BAGrB,EC5EV,MAAMmlH,GAAc3mH,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAbH,CAAa,6FAM3BqhC,GAAQrhC,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAATH,CAAS,+GAGNI,GAASA,EAAMC,MAAMC,MAAMC,UAE7BH,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtDgkH,GAAYnlH,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAAXH,CAAW,wBAGvB4mH,GAAmB5mH,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAATH,CAAS,oEAGjBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAGtD2lH,GAAoB7mH,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAbH,CAAa,yCAIjC8mH,GAAmB9mH,aAAOi1F,IAAkB/0F,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAzBH,CAAyB,sBACjCI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAEtDuhB,GAAQzhD,KAAO4sD,OAAM1sD,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAAbH,CAAa,2BAIrBkgD,GAAclgD,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAATH,CAAS,wFACZI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAEpCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KACtCnsB,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAGrDqgC,GAAejhC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAAVH,CAAU,oBAChBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KA8EzCw6F,OAnEMhsH,IAKa,IALZ,UACpBuG,EAAS,KACTwK,EAAI,OACJ/R,EAAM,OACNwH,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,gCACtBylH,EAAkBC,GAAWltH,OAAOmtH,aAAa97D,WAEjD+7D,EAAiB,OAAJr7G,QAAI,IAAJA,OAAI,EAAJA,EAAO/R,EAAOxQ,IACjC,OACEmY,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD4S,gBAACS,GAAiB,CAACb,OAAQC,EAAWzS,SAAA,CACpC4S,gBAACglH,GAAW,CAAA53H,SAAA,CACV2S,eAAA,UAAA3S,SACE4S,gBAAC0/B,GAAK,CAAAtyC,SAAA,CACJ2S,eAACyjH,GAAS,CAAAp2H,SAAC,kBACX2S,eAACyjH,GAAS,CAAAp2H,SACR2S,eAAC0+C,GAAQ,CACP79C,QAASykH,EAAgBzkH,QACzB7B,OAAQsmH,EAAgBtmH,OACxBu9B,KAAM+oF,EAAgB/oF,KACtBnuC,KAAM0R,EACND,OAAQC,MAGZE,eAACyjH,GAAS,CAAAp2H,SACR2S,eAACm+C,GAAS,CACRpjD,OAAO,QACPiE,OAAQgB,eAACw+C,GAAW,CAAAnxD,SAAC,qBACrBwT,QACEb,eAACu/B,GAAY,CAAAlyC,SACX2S,eAACo/B,GAAQ,CACPC,SAAUgtB,GAAgB,0BAC1BxsD,OAAQC,MAId1R,KAAK,iBACLyR,OAAQC,WAKb2lH,EACDxlH,gBAACilH,GAAgB,CAAA73H,SAAA,CACf2S,eAACmlH,GAAiB,CAAA93H,SAAC,kCAGnB2S,eAAColH,GAAgB,CACf9nG,MAAOmoG,EAAW1sF,cAClBl5B,OAAQC,OAGV,QAENG,gBAAC8/C,GAAK,CAAA1yD,SAAA,CACJ2S,eAACglH,GAAiB,CAAC56G,KAAMA,EAAMvK,OAAQC,IACvCE,eAAA,cAAYJ,UAAU,iBAAgBvS,SAAC,+BAKvC,E,UC5HH,MAAMq4H,GAAuB,WAAwB,IAAvBx2G,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC7C,MAAM6Q,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,YAEhD,UAAET,GAAc2V,KAChB/qB,EAAWoV,EAAUpV,SACrBsf,EAASlK,EAAUkK,OAEzB,OAAOnJ,oBACL,CAAC,iBAAkB,CAAEnW,WAAUsf,YAC/B,I5VwEgCpX,WAIwB,IAJjB,YACzCyN,EAAW,OACXC,EAAM,SACNC,GACmB+B,EASnB,aAR8DpD,GAAI4B,IAAG,IAAAnM,OAE/D4L,EAAQ,iCAAA5L,OAAgC2L,EAAO5V,UAAY,CAC/D4U,QAAS,CACPmB,cAAc,UAAD9L,OAAY0L,IAE3BC,OAAQ,CAAE0J,OAAQ1J,EAAO0J,WAEXhL,IAAI,E4VpFhBu7G,CAAqB,CACnBl6G,cACAE,WACAD,OAAQ,CAAE5V,WAAUsf,aAExB,CACEre,UAAW0U,KAAiBE,KAAc7V,GAAYoZ,EACtDtB,sBAAsB,GAG5B,ECvBMg4G,GAAiBtnH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,eAAVH,CAAU,sDAK3BunH,GAAevnH,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAXH,CAAW,+CACfI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAGhDouB,GAASle,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,eAATH,CAAS,uHAGPI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAWtDksD,GAAOptD,aAAOogD,IAASlgD,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,eAAhBH,CAAgB,sBAyCdwnH,OA/BOzsH,IAGmB,IAHlB,UACrBuG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,oBACtB,KAAEuK,EAAI,OAAE27G,EAAM,UAAExhG,GAAcmhG,KAC9Bt8D,EAAc48D,GAAiB3tH,OAAO4tH,cAAcv8D,WAE1D,OAAOq8D,GAAUxhG,EAAY,KAC3BvkB,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD2S,eAACU,GAAiB,CAACb,OAAQC,EAAWzS,SACpC4S,gBAAC2lH,GAAc,CAAAv4H,SAAA,CACb4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL2S,eAAA,QAAA3S,SAAM,mBACN2S,eAAC0rD,GAAI,CACH7qD,QAASuoD,EAAYvoD,QACrB7B,OAAQoqD,EAAYpqD,OACpBu9B,KAAM6sB,EAAY7sB,KAClBnuC,KAAM0R,EACND,OAAQC,OAGZG,gBAAA,OAAA5S,SAAA,CACE2S,eAAC6lH,GAAY,CAAAx4H,SAAM,OAAJ+c,QAAI,IAAJA,OAAI,EAAJA,EAAMsG,MAAMu0C,QAAQ,KAAkB,aAK9D,ECzDH,MAAMzkD,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAVH,CAAU,iBAGtBke,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAbH,CAAa,wEAKtBqhC,GAAQrhC,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAATH,CAAS,+GAGNI,GAASA,EAAMC,MAAMC,MAAMC,UAE7BH,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KACvCZ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtDgkH,GAAYnlH,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAXH,CAAW,wBAsDd4nH,OA1CW7sH,IAKS,IALR,UACzBuG,EAAS,KACTwK,EAAI,aACJgwC,EAAY,OACZv6C,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,kCACtBi2F,EAAmBzmF,mBACvB,IAAM2N,GAA6B5S,EAAK6S,aACxC,CAAC7S,IAEGg/C,GAAehP,EACjB4rE,GAAiB3tH,OACjB2tH,GAAiBz5D,QACnB45D,aAAaz8D,WAEf,OACEzpD,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD4S,gBAACuc,GAAM,CAAAnvB,SAAA,CACL2S,eAAA,UAAA3S,SACE4S,gBAAC0/B,GAAK,CAAAtyC,SAAA,CACJ4S,gBAACwjH,GAAS,CAAAp2H,SAAA,CAAE+sD,EAAe,SAAW,OAAO,eAC7Cp6C,eAAC0+C,GAAQ,CACP79C,QAASuoD,EAAYvoD,QACrB7B,OAAQoqD,EAAYpqD,OACpBu9B,KAAM6sB,EAAY7sB,KAClBnuC,KAAM0R,EACND,OAAQC,SAIbs6C,EAAep6C,eAAC8lH,GAAa,CAACjmH,OAAQC,IAAiB,QAE1DE,eAAC4vF,GAAY,CACXxlF,KAAM0rF,EACN17C,aAAcA,EACdv6C,OAAQC,MAEA,ECjDhB,MAAMq9C,GAAgB7+C,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAAVH,CAAU,+HAEbI,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAM/D0sD,GAAW34E,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAATH,CAAS,oCACXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAEtDmgC,GAAQrhC,KAAOshC,GAAEphC,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,eAATH,CAAS,oEAENI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAE3Cf,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtD4yF,GAAiB/zF,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,eAATH,CAAS,iHAGfI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAEnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAGtD4mH,GAAS9nH,aAAO80F,IAAW50F,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAlBH,CAAkB,yDAChBI,GAAK,GAAAqB,OACfrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAI/D6qE,GAAS92F,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAVH,CAAU,sGACHI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YAMhDo/D,GAAetxF,aAAO4nH,IAAkB1nH,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAzBH,CAAyB,6DACxBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAEvC5rB,GAAK,UAAAqB,OACNrB,EAAMC,MAAM+/B,KAAKC,YAAW,SAAA5+B,OAAQrB,EAAMC,MAAM+/B,KAAKC,YAAW,OAExE0nF,GAAqB/nH,aAAO+mH,IAAa7mH,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,eAApBH,CAAoB,8DACzBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAEvC5rB,GAAK,UAAAqB,OACNrB,EAAMC,MAAM+/B,KAAKC,YAAW,SAAA5+B,OAAQrB,EAAMC,MAAM+/B,KAAKC,YAAW,OAExE+wD,GAAepxF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,eAAVH,CAAU,qBACfI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAE1CoB,GAASptB,KAAOqtB,OAAMntB,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAbH,CAAa,oFACbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAC7CnsB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIwO,QA8H5B67F,OAhHUjtH,IAKS,IALR,WACxB+a,EAAU,UACVxU,EAAS,OACTC,EAAS,SAAQ,UACjB+T,GACMva,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,uBACtBzD,EAAOiB,cAAapE,GAA6BA,EAAMmD,OACvDg+C,IAAehmC,EAAW9B,YAC5BqB,GAAgBC,IAIlBxJ,KAAMusF,EACNziD,QAAS0iD,EACTryE,UAAWsyE,EACXziD,UAAWmyE,GACTtwB,MACE,KACJ7rF,EACA8pC,QAASsyE,EACTjiG,UAAWkiG,EACXryE,UAAWsyE,GACTvzE,GAAiB,CAAElkC,QAAS,CAAEjU,KAAM,YAClC2rH,EAAsBv8G,EAEtBw8G,EAA6B96B,GACjC6K,GAGF,OACE32F,eAAA,OAAKJ,UAAWA,EAAW,cAAaE,EAAWzS,SACjD4S,gBAACS,GAAiB,CAAArT,SAAA,CAChB4S,gBAAA,UAAA5S,SAAA,CACE2S,eAACm9C,GAAa,CAAC,wBAAsB,OAAM9vD,SACzC4S,gBAAA,UAAA5S,SAAA,CACE4S,gBAACg3E,GAAQ,CAAA5pF,SAAA,CAAC,OAAK+O,EAAK+oB,aACpBllB,gBAAC0/B,GAAK,CAAC,wBAAsB,OAAMtyC,SAAA,CAChC+sD,EAAe,SAAW,WAAW,aAAW,IAChDA,EACGxmC,EAAU5qB,YACVilB,GAAoBmG,WAI9BnU,gBAACoyF,GAAc,CAAAhlG,SAAA,CACb2S,eAACyhD,GAAS,CACRnlD,OAAQ,CAAEvC,OAAQ,CAAEhB,MAAO,OAAQP,IAAK,SACxCqH,OAAQC,EACR8T,UAAWA,IAEb5T,eAAComH,GAAM,CACLpnH,OAAQo7C,EAAe,gBAAkB,cACzC+4C,MACE/4C,EACI35B,GACoB,OAAlBkmG,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBjkD,cAEZ,OAAVtuD,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,YAAYjW,KAAImW,GAAKA,EAAEngB,OAEzCyR,OAAQC,UAIdG,gBAACm1F,GAAM,CAAA/nG,SAAA,CACL2S,eAAC0vF,GAAY,CAAAriG,SACX2S,eAACY,GAAa,CACZG,gBAAiB81F,EAEjB/1F,eACGs5C,GACDw8C,GACC2vB,GACCj3G,kBAAQs3G,GAEZ/lH,QACEb,eAACqmH,GAAkB,CACjBj8G,KAAMw8G,EACNvuH,OAAQub,EACR/T,OAAQC,IAGZD,OAAQC,MAGZE,eAAC0vF,GAAY,CAAAriG,SACX2S,eAACY,GAAa,CACZG,gBAAiB0lH,EACjB3lH,cACE0lH,GACCE,GACCp3G,kBAA0B,OAAlBq3G,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBjkD,cAEhC7hE,QACEb,eAAC4vF,GAAY,CACXxlF,KAAMu8G,EACNvsE,aAAcA,EACdv6C,OAAQC,IAGZD,OAAQC,SAIdE,eAAC0rB,GAAM,CAAAr+B,SACL2S,eAACk9C,GAAc,CAACr9C,OAAQC,UAGxB,ECxLV,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAVH,CAAU,uGAIbI,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAClCnsB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIsO,OAIhD87D,GAAgB/nF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAVH,CAAU,0DAK1B0sE,GAAS1sE,aAAOsrB,IAAYprB,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,gBAAnBH,CAAmB,0DAItBI,GAAK,gBAAAqB,OAAoBrB,EAAMC,MAAM2C,OAAO4mB,UAElDnpB,GAAeT,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAVH,CAAU,oFAMzBuoH,GAAqBvoH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAVH,CAAU,2HAKlBI,GAAK,GAAAqB,OACjBrB,EAAMmqB,SAAW,SAAW,EAAC,WAAA9oB,OAC9BrB,EAAMC,MAAM2C,OAAO2a,IAAIuU,aAIvBs2F,GAAuBxoH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAVH,CAAU,gEAKjC6C,GAAa7C,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,gBAAZH,CAAY,iDAKdI,GAASA,EAAMs1D,aACdt1D,GAASA,EAAMonE,cACtBpnE,GACPA,EAAMqoH,UACFroH,EAAMC,MAAM2C,OAAO2a,IAAIE,WACvBzd,EAAMC,MAAM2C,OAAO2a,IAAIC,YAEzB8qG,GAAiB1oH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAAVH,CAAU,6EACXI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAKhD28F,GAAc3oH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAVH,CAAU,iEAKxB4oH,GAAyB5oH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,sCAAAyV,YAAA,gBAAVH,CAAU,8DAGnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAEhD68F,GAAe7oH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,iBAAVH,CAAU,qHAGfI,GAAK,gBAAAqB,OAAoBrB,EAAMC,MAAM2C,OAAO2a,IAAIuU,aAK1DsQ,GAAOxiC,aAAOqqB,IAAOnqB,WAAA,CAAAxV,YAAA,oBAAAyV,YAAA,iBAAdH,CAAc,4FACVI,GACbA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQP,EAAM+pB,SAAW,WAAa,aAIvD/pB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAMvCirG,GAAa9oH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0BAAAyV,YAAA,iBAAVH,CAAU,+GACZI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAGvCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAEvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAkP7C4nH,OAvOYhuH,IAKb,IALc,UAC1BuG,EAAS,OACT4rE,EAAM,eACNnrB,GAAiB,EAAK,OACtBxgD,EAAS,UACHxG,EACN,MAAM,WAAEiiB,GAAeP,KACjBqI,EAAWC,eACXgnB,EAAcC,6BACd,gBAAEhoB,GAAoBzB,MAErBymG,EAAqBC,GAA0Bv3G,oBAAS,GACzD/T,EAAsBoB,cAAapE,GACvCiT,cAAIjT,EAAO,8CAEPiO,EAAa,OAANskE,QAAM,IAANA,OAAM,EAANA,EAAQtkE,KACfszE,EAAc,OAAJtzE,QAAI,IAAJA,OAAI,EAAJA,EAAMmH,YACtB,IAAKnH,GAAgB,OAAPszE,QAAO,IAAPA,MAAS3/E,OAAQ,OAAO,KAEtC,SAAS2sH,EACPC,GAEA,IAAKA,EAAgB,OAAO,EAC5B,MAAMC,EAAmBznG,kBACvBwnG,EAAervH,KAAIyS,IAAC,IAAA88G,EAAA,OAAK,OAAD98G,QAAC,IAADA,GAAO,QAAN88G,EAAD98G,EAAG3D,YAAI,IAAAygH,OAAN,EAADA,EAASt5G,cAAe,EAAE,KAEpD,OAAIiB,kBAAQo4G,GAA0BD,EAAe5sH,OAC9C4sH,EAAe5sH,OAAS2sH,EAAsBE,EACvD,CAEA1pH,eAAegzF,EACbnnF,EACA+9G,EACAC,GAEA,MAAMC,EAAiB,IAAI7rH,KAAwB4rH,GAC7CE,EAAcD,EAAeA,EAAejtH,OAAS,GAE3DuoB,EACEtG,GAAkB,CAChB7gB,oBAAqB6rH,KAIzBxlG,EAAgB,CAAErM,WAAY8xG,EAAYlgI,KAAM,GAKhDwiD,EAAYM,kBAAkB,uBAC9BN,EAAYM,kBAAkB,mBAC9BN,EAAYM,kBAAkB,iBAC9BN,EAAYM,kBAAkB,gBAC9BN,EAAYM,kBAAkB,CAAC,QAAS,CAAE3vC,KAAM,8BAU1CsgB,EAAW,CACfzR,IACA/hB,MAAO,eACP4oB,MAAM,kBAAD3Q,OAAoBgoH,EAAY35H,KAAI,MAAA2R,OAAKgoH,EAAYr7G,MAAK,MAEnE,CAuJA,OACEzM,gBAACO,GAAS,CAAAnT,SAAA,CACR4S,gBAAClB,GAAY,CAAA1R,SAAA,CACX2S,eAAA,OAAA3S,SAAM,mBACN2S,eAACy/B,GAAQ,CAAC5+B,QAAS,sBA7IzB,SAAwB4mH,GACtB,GAAmB,OAAdA,QAAc,IAAdA,MAAgBp5G,YAAYxT,OAAQ,OAAO,KAChD,MAAMwT,EAAco5G,EAAep5G,YAAY4C,QAC7C1C,GAAKA,EAAE1mB,KAAO4/H,EAAej5G,qBAEzBw5G,EAAqBR,EAAsBn5G,GACjD,OACEpO,gBAAC+mH,GAAc,CAAA35H,SAAA,CACb2S,eAAC8gC,GAAI,CACHxZ,OAAO,WACPmB,UAAU,EACVpM,QAAUxS,GACRmnF,EAAiBnnF,EAAG49G,EAAgB,CAACj8C,IAEvC3rE,OAAQA,EAAOxS,SAEf4S,gBAACgnH,GAAW,CAAA55H,SAAA,CACV2S,eAACmB,GAAU,CACTrM,KAAM,QACNk/D,WAAY,OACZ8R,YAAa,SACbihD,WAAW,IAEb/mH,eAAA,KAAA3S,SAAG,qBACH2S,eAAConH,GAAU,CAAA/5H,SAAEghB,EAAYxT,SACzBmF,eAACmB,GAAU,CACTrM,KAAM,mBACNk/D,WAAY,OACZ8R,YAAa,IACbihD,WAAW,SAIjB/mH,eAAC8gC,GAAI,CACHxZ,OAAO,WACPmB,UAAU,EACVpM,QAAUxS,GAhDlB,SACEA,EACAo+G,GAEA3sG,EAAW,CACTzR,IACA/hB,MAAM,2BACN4oB,MAAM,GAAD3Q,OAAKkoH,KAEZV,EAAuBU,EACzB,CAuCUpd,CAAgBhhG,GAAIy9G,GAEtBznH,OAAQA,EAAOxS,SAEf4S,gBAACknH,GAAY,CAAA95H,SAAA,CACX2S,eAACmB,GAAU,CACTrM,KAAM,UACNk/D,WAAY,OACZ8R,YAAa,SACbihD,WAAW,IAEb/mH,eAAA,KAAA3S,SAAG,sBACH2S,eAAConH,GAAU,CAAA/5H,SAAE26H,IACbhoH,eAACmB,GAAU,CACTrM,KAAMwyH,EAAsB,WAAa,aACzCtzD,WAAY,OACZ8R,YAAa,IACbihD,WAAW,WAMvB,CAmFKmB,CAAehhH,GACfogH,EAnFL,SAAwBG,GACtB,MAAMU,EAA4BV,EAAep5G,YAAY4C,QAC3D1C,GAAKA,EAAE1mB,KAAO4/H,EAAej5G,qBAE/B,OACExO,eAACknH,GAAsB,CAAA75H,SACpB86H,EAA0B/vH,KAAI,CAACyS,EAAGipD,KACjC,MAAMs0D,EAAW,OAADv9G,QAAC,IAADA,OAAC,EAADA,EAAG3D,KACbmH,EAAqB,OAAP+5G,QAAO,IAAPA,OAAO,EAAPA,EAAS/5G,YAAY4C,QACvC1C,GAAKA,EAAE1mB,MAAc,OAAPugI,QAAO,IAAPA,OAAO,EAAPA,EAAS55G,sBAEnB65G,EAAeb,EAAsBn5G,GAC3C,OACErO,eAACgnH,GAAc,CAAA35H,SACb2S,eAAC8gC,GAAI,CACHxZ,OAAO,WACPmB,UAAU,EACVpM,QAAUxS,GACRmnF,EACEnnF,EACA,EACW,OAAXwE,QAAW,IAAXA,KAAaxT,OAAS,CAAC2wE,EAAQ3gE,GAAK,CAAC2gE,IAGzC3rE,OAAQA,EAAOxS,SAEf4S,gBAAC4mH,GAAkB,CACjBh+F,SAAUirC,EAAMq0D,EAA0BttH,OAAS,EAAExN,SAAA,CAErD2S,eAACqmF,GAAa,CAAAh5F,SACZ2S,eAACgrE,GAAM,CACL5hD,QAAO,GAAArpB,OAAK8K,EAAEzc,KAAI,UAClBiS,IAAKwK,EAAE4mD,MACP5xD,OAAM,GAAAE,OAAKF,EAAM,qBAGrBI,gBAAC6mH,GAAoB,CAAC,wBAAsB,OAAMz5H,SAAA,CAChD2S,eAAA,KAAA3S,SAAIwd,EAAEzc,OACN4R,eAAA,OAAA3S,SAAMwd,EAAEvhB,QACP+kB,GAA0B,OAAXA,QAAW,IAAXA,KAAaxT,OAC3BoF,gBAACgnH,GAAW,CAAA55H,SAAA,CACV2S,eAACmB,GAAU,CACTrM,KAAM,QACNiyH,WAAW,EACX/yD,WAAY,IACZ8R,YAAa,WAEf9lE,eAAConH,GAAU,CAAA/5H,SAAEghB,EAAYxT,SACxBwtH,GAA0B,OAAXh6G,QAAW,IAAXA,OAAW,EAAXA,EAAaxT,QAC3BoF,gBAACgnH,GAAW,CAAA55H,SAAA,CACV2S,eAACmB,GAAU,CACTrM,KAAM,UACNk/D,WAAY,OACZ8R,YAAa,SACbihD,WAAW,IAEb/mH,eAAConH,GAAU,CAAA/5H,SAAEg7H,OAEb,QAEJ,QAENroH,eAACmB,GAAU,CACTrM,KAAM,mBACNk/D,WAAY,OACZ8R,YAAa,IACbihD,WAAW,UAIF,KAK3B,CAQ2BuB,CAAephH,GAAQ,OACpC,EC9ShB,MAAM1G,GAAYlC,KAAOyzC,QAAOvzC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAAdH,CAAc,yFAIVI,GAAK,GAAAqB,OACpB22B,GAAS,CAAEC,IAAKj4B,EAAMC,MAAM2C,OAAO2a,IAAIuU,UAAWoG,QAAS,QAG5DyvD,GAAgB/nF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAVH,CAAU,yCAI1B0sE,GAAS1sE,aAAOsrB,IAAYprB,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,gBAAnBH,CAAmB,8DAItBI,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAO/oB,GAAE,WAAAQ,OAAUrB,EAAMC,MAAM2C,OAAO4mB,UAE3DwC,GAAOpsB,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,mBAAAyV,YAAA,gBAAbH,CAAa,0DACTI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OACpCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMC,KACtCZ,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAErDygC,GAAQrhC,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,oBAAAyV,YAAA,gBAAXH,CAAW,+EACRI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAGtD+oH,GAAwBjqH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,gBAAVH,CAAU,mFAMlC4hH,GAAa5hH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAVH,CAAU,qFAMvBkqH,GAAelqH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAVH,CAAU,kFAMzBmqH,GAAgBnqH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAAVH,CAAU,uCAI1BoqF,GAAapqF,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,gBAAZH,CAAY,0BAGzBoqH,GAASpqH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,iBAAVH,CAAU,2LAIHI,GAAK,GAAAqB,OAAOrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAK9C7rB,GAAK,GAAAqB,OAAOrB,EAAMC,MAAM2C,OAAO2a,IAAIC,aAIxCysG,GAAiBrqH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,iBAAVH,CAAU,kNAIjBI,GAAK,6BAAAqB,OACYrB,EAAMC,MAAM2C,OAAO2a,IAAI8N,OAAM,KAAAhqB,OACxDrB,EAAMkqH,kBAAiB,WAAA7oH,OACfrB,EAAMC,MAAM2C,OAAO2a,IAAIqO,MAAK,KAAAvqB,OAAIrB,EAAMkqH,kBAC9C,IAAG,SAMQlqH,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAGlDg+F,GAAiBvqH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,iBAAVH,CAAU,gEAM3BwqH,GAASxqH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,iBAAVH,CAAU,gEAMnByqH,GAAoBzqH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,iBAAVH,CAAU,2DAM9B0qH,GAAmB1qH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,iBAAVH,CAAU,2GAElBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UACzCd,GAAK,aAAAqB,OAAiBrB,EAAMC,MAAM2C,OAAO2a,IAAIwO,SAI1Dw+F,GAAqB3qH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,iBAAVH,CAAU,kJACpBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KACvCnsB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAQtD0pH,GAAsB5qH,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,iBAAXH,CAAW,gCACtBI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAEhD+6H,GAAkB7qH,KAAOi/B,OAAM/+B,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,iBAAbH,CAAa,sDACpBI,GAASA,EAAMC,MAAMC,MAAMk0B,UAAU1kC,OAIhDg7H,GAAkB9qH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,iBAAVH,CAAU,gGACjBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQq/B,YAMtD+qF,GAAgB/qH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,iBAAVH,CAAU,mCAI1Bs+G,GAAat+G,aAAOiqF,IAAoB/pF,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,iBAA3BH,CAA2B,sCAIxCgrH,GAAmBhrH,aAAOouB,IAAQluB,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,iBAAfH,CAAe,6BAMlCwiC,GAAOxiC,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,mBAAAyV,YAAA,iBAAjBH,CAAiB,6FACnBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAG9Bxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAGhCxd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAC1Bzd,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OA0X/C8pH,OA7WWlwH,IAKQ,IAADmwH,EAAAC,EAAAC,EAAA,IALN,UACzB9pH,EAAS,eACTygD,GAAiB,EAAK,OACtBmrB,EAAM,OACN3rE,EAAS,UACHxG,EACN,MAAM,MAAEo4D,EAAK,KAAErjE,EAAI,MAAE9E,EAAK,QAAE+nG,EAAO,YAAEs4B,EAAc,IAAOn+C,EACpDnwE,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxD+wF,EAA2B,OAAL/wF,QAAK,IAALA,OAAK,EAALA,EAAQ,2BAE9B,oBAAE0mB,EAAmB,oBAAEI,GAAwBtB,MAC7CzW,KAAMgC,GAAiBN,KACzB89G,EAAiB59B,iBACrBI,EACa,OAAPiF,QAAO,IAAPA,GAAkB,QAAXm4B,EAAPn4B,EAAS3lG,iBAAS,IAAA89H,GAAK,QAALC,EAAlBD,EAAqB,UAAE,IAAAC,GAAvBA,EAAyB1zH,OACzBs7F,EACA39C,eAAK29C,EAAS,CAAC,cACjB39C,eAAK29C,EAASpgG,KACjBuf,IAAmC,IAAAq5G,EAAA,QAAU,QAALA,EAACr5G,EAAE,UAAE,IAAAq5G,GAAJA,EAAM9zH,OAAM,KAIhDqU,KAAMsiE,GAAqBj9D,MAGjCq6G,EACAC,GACE/5G,oBAAS,GAEPg6G,EAAeC,GAAgBr0F,qBAAWD,oBAAUs0F,IAIpDC,EAAoBl+F,iBAAO29F,EAAa,cAAc19F,UACtDk+F,EAAoBL,EACtBI,EACAA,EAAkB79F,MAAM,EALI,IAOzB+9F,EAAkB94B,GvWhMKD,IACvBx/E,oBACLg8B,kBAAQwjD,GACLpgF,QAAOmvG,GAAUA,EAAO,KAAOx1H,EAA0BG,KACzDqN,KAAIgoH,IACI,CACLn5H,IAAKm5H,EAAO,GACZ1vG,MAAO0vG,EAAO,QAGpBiK,GAGuB,cAApBA,EAAYpjI,KACqB,QAAhCojI,EAAY35G,MAAM,GAAG3a,QACF,cAApBs0H,EAAYpjI,KACqB,SAAhCojI,EAAY35G,MAAM,GAAG3a,QACS,SAAhCs0H,EAAY35G,MAAM,GAAG3a,QACW,iBAAhCs0H,EAAY35G,MAAM,GAAG3a,SuW8KkBu0H,CAAiBV,GACtD/5D,EAIL,QAJiB65D,EAAGzpG,kBACnB4tB,kBAAQ+7E,GAAgB34G,QACtBmvG,GAAUA,EAAO,KAAOx1H,EAA0BG,aAErD,IAAA2+H,OAAA,EAJoBA,EAIjB,GAEEa,EAAmB16D,EACrB5vC,kBAAQ4vC,EAAaz3D,KAAIwjB,GAAYA,EAAS+8C,SAC9C,GAEE6xD,GAAkC,OAAZ36D,QAAY,IAAZA,OAAY,EAAZA,EAAcz3D,KAAIuQ,GAAMA,EAAG5S,WAAW,GAE5DkmH,EAAamO,EAAiBvvH,OAAS0vH,EAAiB1vH,OAQ9D,SAAS4vH,EAAkBrK,GAEzB,OAAY,OAAL/kH,QAAK,IAALA,KAAQpQ,GACXk3B,EAAoB,CAClBN,kBAAmB,CACjB,CAACvuB,GAAaO,eAAgB23E,EAAO9+D,OAEvC2U,gBAAiBn2B,EAAqBE,eACtCu2B,eAAgBy+F,SAElBtlH,CACN,CAEA,OACEmF,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE4S,gBAACO,GAAS,CAACZ,UAAWA,EAAW,iBAAAG,OAAgBF,EAAM,gBAAexS,SAAA,CACpE4S,gBAACigH,GAAU,CAAC,wBAAsB,OAAM7yH,SAAA,CACtC4S,gBAAA,OAAA5S,SAAA,CACG4uH,EAAa,GACZj8G,eAACg8G,GAAe,CAACF,UAAW,GAAIG,WAAYA,IAE9Cj8G,eAACqmF,GAAa,CAAAh5F,SACZ2S,eAACgrE,GAAM,CACL5hD,QAAO,GAAArpB,OAAK3R,EAAI,UAChBiS,IAAKoxD,EACL5xD,OAAM,GAAAE,OAAKF,EAAM,uBAIvBI,gBAACuoH,GAAY,CAAAn7H,SAAA,CACX2S,eAAC0qB,GAAI,CAAAr9B,SAAEe,IACP4R,eAAC2/B,GAAK,CAAAtyC,SAAE/D,UAGX+2D,EACCrgD,eAACG,GAAO,CAACN,OAAQA,IAEjBI,gBAAA,OAAA5S,SAAA,CAGEwiE,GAAgBA,EAAah1D,OAAS,GACpCmF,eAAC48G,GAAU,CACT/7G,QAASgvD,EAAaz3D,KACnBuQ,IAGM,IAAD+hH,EACJ,MAAMC,EAIL,QAJeD,EAAGv8H,EAA0BmgB,MAC1CstB,IACc,OAANA,QAAM,IAANA,OAAM,EAANA,EAAQ/zC,MAAO8gB,EAAG5S,gBAE5B,IAAA20H,OAAA,EAJkBA,EAIT,KAEV,OAAO/hH,EAAGgwD,MAAMvgE,KAAIwyH,GAEhB5qH,eAAC8gC,GAAI,CACHra,GAAI1E,EAAoB,CACtBV,gBAAiBz0B,EAAqBG,YACtC4nB,oBAAoB,EACpBkN,kBAAmB,CACjB,CAACvuB,GAAaO,eAAgB23E,EAAO9+D,MACrC,CAACpZ,GAAahB,UAAWk4H,EACzB,CAACl3H,GAAab,mBAAoB,CAChC1D,GAAsBE,YACtBF,GAAsBC,UAI5BZ,KAAK,uBAAsBf,SAG3B2S,eAAC0sB,GAAO,CACNa,UAAU,MACVC,aAAco9F,EAASx8H,KACvByR,OAAQA,EACR4tB,QACEztB,eAAC0oH,GAAM,CAAAr7H,SACL4S,gBAAC6oH,GAAM,CAAAz7H,SAAA,CACL2S,eAAA,UAAA3S,SACGs9H,GAAcA,EAAWjhH,SAAS,SAC/B,UACU,OAAVihH,QAAU,IAAVA,KAAYjhH,SAAS,UACrB,gBACA,sBAELkhH,EAASx8H,aAhBb6e,oBAAU29G,EAASx8H,QAuB5B,IAGN4Q,OACEiB,gBAAA,QAAA5S,SAAA,CACE2S,eAAC0oF,GAAU,CAAC5zF,KAAK,OACjBmL,gBAAA,UAAA5S,SAAA,CAC+B,IAA5Bk9H,EAAiB1vH,OAAe,KAAO,MAAM,IAAE,IAC/C0vH,EAAiB1vH,OAAQ,UAIhC2tF,cAAc,EACd3oF,OAAM,0BACN7E,KAAM5J,GAAYE,aAGpBge,kBAAQ86G,IACRA,EACGn+F,UACA7zB,KAAKgoH,IACJ,MAAM,IAAEn5H,EAAG,MAAEypB,GAAU0vG,EAEvB,IAAK1vG,EAAM,GAAG3a,OACZ,OAAO,KAIT,GAAI2a,EAAM7V,OAAS,EAAG,CACpB,MAAM2yB,EACJvmC,IAAQoJ,GACJg8D,GAAgB,aAChBplE,IAAQoJ,GACRg8D,GAAgB,qBAChBplE,IAAQoJ,GACRg8D,GAAgB,aAChBplE,IAAQoJ,GACRg8D,GAAgB,sBAChB,GAEAw+D,EAAiBJ,EAAkBxjI,GACnC6jI,EACJ7qH,gBAACsoH,GAAqB,CAAAl7H,SAAA,CACpB4S,gBAAA,QAAA5S,SAAA,CACE2S,eAAA,KAAA3S,SAAI28H,EAAY/iI,KAAS,KAAG,IAC3B+iI,EAAYt5G,EAAM,GAAG3a,WAExBiK,eAACsJ,GAAI,CAACxU,KAAM,wBAGVi2H,EAAsBF,EAC1B7qH,eAAC8gC,GAAI,CAACra,GAAIokG,EAAgBz8H,KAAK,cAAaf,SACzCy9H,IAGHA,EAGF,OACE9qH,eAAC48G,GAAU,CACT59G,OACEgB,eAACspH,GAAgB,CACf/7F,UAAU,MACVC,aACExtB,eAACqpH,GAAa,CAAAh8H,SAAEmgC,IAElBC,QAASs9F,EACTlrH,OAAM,oBAAAE,OAAsB9Y,KAGhC4Y,OAAM,6BACN7E,KAAM5J,GAAYE,WAAU,oBAAAyO,OACH9Y,GAG/B,CACE,OAAO,IACT,KAEJqoB,kBAAQgiF,IACRtxF,eAAC48G,GAAU,CACT/7G,QAASywF,EAAel5F,KACrBgoH,IACC,IAAKA,EAAO1vG,MAAM,GAAG3a,OACnB,OAAO,KAET,GAAIqqH,EAAO1vG,MAAM7V,OAAS,EAAG,CAC3B,MAAM2yB,EACJ4yF,EAAOn5H,MAAQoJ,GACXg8D,GAAgB,aAChB+zD,EAAOn5H,MAAQoJ,GACfg8D,GAAgB,qBAChB+zD,EAAOn5H,MAAQoJ,GACfg8D,GAAgB,aAChB+zD,EAAOn5H,MAAQoJ,GACfg8D,GAAgB,sBAChB,GACAw+D,EAAiBJ,EAAkBrK,EAAOn5H,KAC1C6jI,EACJ9qH,eAACyoH,GAAa,CAAAp7H,SACZ2S,eAAC0sB,GAAO,CACNa,UAAU,MACVC,aACExtB,eAACqpH,GAAa,CAAAh8H,SAAEmgC,IAElBC,QACExtB,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAAC0oF,GAAU,CAAC5zF,KAAM,iBAClBkL,eAAA,KAAA3S,SAAI28H,EAAY5J,EAAOn5H,OAAS,KAAG,IAClC+iI,EAAY5J,EAAO1vG,MAAM,GAAG3a,WAGjC8J,OAAM,kBAAAE,OAAoBqgH,EAAOn5H,SAIvC,OAAS4jI,EACP7qH,eAAC8gC,GAAI,CACHra,GAAIokG,EACJz8H,KAAK,cAAaf,SAGjBy9H,GAFID,GAKPC,CAEJ,CACE,OAAO,IACT,IAGJ9rH,OACEiB,gBAAA,QAAA5S,SAAA,CACE2S,eAACkpH,GAAmB,CAAA77H,SACjBikG,EAAez2F,SACK,IAAG,iBAAAkF,OACRuxF,EAAez2F,OAAS,EAAI,IAAM,OAGxD2tF,cAAc,EACd3oF,OAAM,8BACN7E,KAAM5J,GAAYC,cAMzBgvD,GACCpgD,gBAAC8oH,GAAiB,CAAA17H,SAAA,CAChB4S,gBAAC+oH,GAAgB,CAAA37H,SAAA,CAAC,oBAEhB2S,eAACy/B,GAAQ,CAAC5+B,QAAQ,kBAAkBhB,OAAQA,OAE5CyP,kBAAQ66G,GAmCRnqH,eAACopH,GAAe,CAAA/7H,SAAC,sCAlCjB88H,EAAkB/xH,KAAI,CAACsoB,EAAM6I,IACnBpP,gBAAMuG,EAAK9B,QA8Bf,KA7BF5e,eAAC8gC,GAAI,CACHra,GAAI1E,EAAoB,CACtBtQ,QAASiP,EAAK9B,OACdjK,oBAAoB,EACpBkN,kBAAmB,CACjB,CAACvuB,GAAaO,eAAgB23E,EAAO9+D,MACrC,CAACpZ,GAAaP,mBAAoB,GAClC,CAACO,GAAad,UAAW4Z,EAAaE,oBAExC+U,gBAAiBz0B,EAAqBE,eAExCsB,KAAK,uBAAsBf,SAG3B4S,gBAAC0oH,GAAc,CAEbC,kBAAqC,IAAlBloG,EAAKsqG,WACxB,gCACA,wBAAsB,OAAM39H,SAAA,CAE5B4S,gBAAC4oH,GAAc,CAAAx7H,SAAA,CACb4S,gBAACkpH,GAAe,CAAA97H,SAAA,EACM,IAAlBqzB,EAAKsqG,YAAkB/lE,QAAQ,GAAG,OAErCvkC,EAAKuqG,YAERjrH,eAACsJ,GAAI,CAACxU,KAAM,uBAXP4rB,EAAK9B,SAYK,GAAA7e,OAfT2gB,EAAK9B,OAAM,KAAA7e,OAAIkN,oBAAUyT,EAAKuqG,UAAS,KAAAlrH,OAAIwpB,MAwB1DogG,EAAY9uH,OAzTS,GA0TpBmF,eAACipH,GAAkB,CACjB5sG,QAASA,IACP0tG,GAAiCD,GAClCz8H,SAECy8H,EAEE,OAF0B,IAAA/pH,OACtB4pH,EAAY9uH,OAhUF,EAgUkC,kBAO5DwlD,GACArgD,eAACqnH,GAAW,CAAC77C,OAAQ,IAAKA,EAAQtkE,KAnTxC,SAAiB+I,GAA4C,IAADi7G,EAI1D,OAAuD,QAAvDA,EAH8Bx8G,GAC5Bg+D,GAE2Bp+D,MAAK+F,GAAKA,EAAExsB,KAAOooB,WAAO,IAAAi7G,OAAA,EAAhDA,EAAkDhkH,IAC3D,CA8S8CikH,CAAQ3/C,EAAO3jF,SAExD,ECxkBA,MAAMujI,GAAqB,WAAwB,IAAvBl8G,IAAUtU,UAAAC,OAAA,QAAAC,IAAAF,UAAA,KAAAA,UAAA,GAC3C,MAAM6Q,EAAcpO,cACjBpE,GAA6BA,EAAM0B,KAAKoR,kBAErCJ,EAAWtO,cACdpE,GAA6BA,EAAM0B,KAAKS,WAAWuQ,YAEhD,UAAET,GAAc2V,KAChB/qB,EAAWoV,EAAUpV,SACrB4Z,EAAYxE,EAAUwE,UACtBC,EAAUzE,EAAUyE,QACpBzZ,EAAQgV,EAAUlW,SAClBogB,EAASlK,EAAUkK,OAEzB,OAAOnJ,oBACL,CAAC,cAAe,CAAE0D,UAAS7Z,WAAU4Z,YAAWxZ,QAAOkf,YACvD,IxWwCsCpX,WAInC,IAJ0C,YAC/CyN,EAAW,SACXE,EAAQ,OACRD,GACD5R,EAIC,aAHuBwQ,GAAIwD,KAAK,IAAD/N,OAAK4L,EAAQ,qBAAqBD,EAAQ,CACvEhB,QAAS,CAAEmB,cAAc,UAAD9L,OAAY0L,OAEtBrB,IAAI,EwW/ChBihH,CAA2B,CACzB5/G,cACAE,WACAD,OAAQ,CACNgE,YACAC,UACA7Z,WACA6V,WACAzV,QACAkf,YAEDvX,MAAKuM,GAAQA,EAAKu/G,eACvB,CACE5yH,UACI0U,KACAE,KACK,OAALzV,QAAK,IAALA,MAAO2E,WACP6U,KACAC,KACAyF,GACFlG,GAGR,ECnBM1O,GAAYlC,KAAOyzC,QAAOvzC,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,gBAAdH,CAAc,sBAG1Bie,GAAiBje,KAAOyzC,QAAOvzC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAdH,CAAc,0BAG/BgtH,GAAOhtH,KAAO0vB,GAAExvB,WAAA,CAAAxV,YAAA,iBAAAyV,YAAA,gBAATH,CAAS,+DAEbI,GAASA,EAAMC,MAAM+/B,KAAKE,MAG7B2sF,GAAmBjtH,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAATH,CAAS,yMAGjBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAGnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAGzCf,GAAK,GAAAqB,OACjBrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG/DihG,GAAmBltH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAVH,CAAU,sCAI7BmlH,GAAYnlH,KAAO8C,KAAI5C,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,gBAAXH,CAAW,wBAGvBmtH,GAAiBntH,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAjBH,CAAiB,+EAG7BI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIC,YAC5Bxd,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAE3CnsB,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aAGvCuvG,GAAiBptH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,gBAAVH,CAAU,4DAGhBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAEtD2B,GAAa7C,aAAOgL,IAAK9K,WAAA,CAAAxV,YAAA,uBAAAyV,YAAA,gBAAZH,CAAY,qCAIzBkgD,GAAclgD,KAAOkzC,GAAEhzC,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAATH,CAAS,wFACZI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAEpCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KACtCnsB,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAGrDqgC,GAAejhC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,iBAAVH,CAAU,oBAChBI,GAASA,EAAMC,MAAMC,MAAMI,OAAOK,MAAMwrB,KA6LxC8gG,OApKEtyH,IAGiB,IAADsvG,EAAAijB,EAAA,IAHf,UAChBhsH,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,cACtB8L,EAAWtO,cAAapE,GAC5BiT,cAAIjT,EAAO,8BAEPmD,EAAOiB,cAAapE,GAA6BA,EAAMmD,QACvD,UAAE8O,GAAc2V,KAChBzM,EAAalJ,EAAUhE,MAErBkD,KAAMgC,GAAiBN,KACzBQ,EAAiC,OAAZF,QAAY,IAAZA,OAAY,EAAZA,EAAcE,oBAEvClC,KAAM45G,EACNz/F,UAAWsnG,GACT7I,GAA8B,OAAV5uG,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,cAElCjE,KAAM0hH,EACNvnG,UAAWwnG,GACTX,KAEJ,GAAe,OAAVh3G,QAAU,IAAVA,GAAuB,QAAbu0F,EAAVv0F,EAAY/F,mBAAW,IAAAs6F,IAAvBA,EAAyB9tG,OAC5B,OAAO,KAET,MAAMmxH,EAAwChI,EACgB,QADA4H,EAC1D5H,EAAiBA,EAAiBnpH,OAAS,GAAGmwF,oBAAY,IAAA4gC,OAAA,EAA1DA,EAA4DxzH,KACzDozE,IAA8B,IAADygD,EAAAC,EAAAC,EAAAC,EAAArR,EAC5B,MAAO,CACL3zE,cAAqB,OAANokC,QAAM,IAANA,OAAM,EAANA,EAAQpvE,KACvBi1F,QAAS,CACP3lG,UAAW,CACT,CACEqK,QAAc,OAANy1E,QAAM,IAANA,OAAM,EAANA,EAAQ9/E,YAAa,KAC7BitE,MAAO,CAAC,MAGZ/sE,kBAAmB,CACjB,CACEmK,QAAc,OAANy1E,QAAM,IAANA,GAAyB,QAAnBygD,EAANzgD,EAAQ5/E,yBAAiB,IAAAqgI,GAAO,QAAPC,EAAzBD,EAA2B7gC,aAAK,IAAA8gC,OAA1B,EAANA,EAAkC5gC,SAAU,KACpD3yB,MAAO,CAAC,MAGZltE,UAAW,CACT,CACEsK,OAAc,OAANy1E,QAAM,IAANA,GAAiB,QAAX2gD,EAAN3gD,EAAQ//E,iBAAS,IAAA0gI,GAAO,QAAPC,EAAjBD,EAAmB5hC,aAAK,IAAA6hC,OAAlB,EAANA,EAA0BhhC,MAClCzyB,MAAO,CAAC,MAGZhtE,mBAAoB,CAClB,CACEoK,OAAc,OAANy1E,QAAM,IAANA,GAA0B,QAApBuvC,EAANvvC,EAAQ7/E,0BAAkB,IAAAovH,OAApB,EAANA,EAA4B3vB,MACpCzyB,MAAO,CAAC,MAGZ0zD,aACE7iH,OAAO+L,SAAc,OAANi2D,QAAM,IAANA,OAAM,EAANA,EAAQ6gD,eAAgB,CAAC,GAAGj0H,KACzC0B,IAAmB,IAAjB7S,EAAKypB,GAAM5W,EACX,MAAO,CACL/D,OAAQ9O,EACR0xE,MAAOjoD,EACR,KAEA,IAEV,IAGL,GAEE47G,EAAmBl4G,EAAW/F,YAAYjW,KAAI,CAACk0B,EAAQ/C,KAC3D,MAAMgjG,EAAiCP,EAAe/6G,QACnDu7G,IACc,OAAbA,QAAa,IAAbA,OAAa,EAAbA,EAAeplF,iBAAkB9a,EAAOzkC,KAGtC4kI,GAAsCX,GAAmB,IAAIx9G,MAChEo+G,GAAoCA,EAActwH,OAASkwB,EAAOzkC,MAChE,CAAEmrB,SAAU,GAAI5W,KAAM,GACrBuwH,EACJF,GAAyBA,EAAsBz5G,SAC3C1G,IAAuBhe,GAAaC,KAClC0xB,kBACEwsG,EAAsBz5G,SAAS5a,KAC5B8a,GAAiBA,EAAQ05G,SAG9BH,EAAsBz5G,SAAS5a,KAAK8a,IAC3B,CACL83G,WAAY93G,EAAQ83G,WACpBpsG,OAAQ1L,EAAQpB,UAChBm5G,SAAU/3G,EAAQmlC,gBAGxB,GACN,MAAO,IACF/rB,EACH+kE,QACEk7B,EAAe,IAAMA,EAAe,GAAGl7B,QACnCk7B,EAAe,GAAGl7B,QAClB,CAAC,EACP1lF,WACAg+G,YAAegD,GAA8C,GAC9D,IAGH,OACE1sH,gBAACO,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SAAA,CACvD4S,gBAACsrH,GAAgB,CAAAl+H,SAAA,CACf4S,gBAACurH,GAAgB,CAAAn+H,SAAA,CACf4S,gBAACwjH,GAAS,CAAC,wBAAsB,OAAMp2H,SAAA,CAAC,kBACtB4gB,GAAoBmG,MAEtCpU,eAACm+C,GAAS,CACRpjD,OAAO,QACPiE,OAAQgB,eAACw+C,GAAW,CAAAnxD,SAAC,kCACrBwT,QACEZ,gBAACs/B,GAAY,CAAAlyC,SAAA,CACX2S,eAAA,KAAA3S,SAAG,yKAKH4S,gBAAA,KAAA5S,SAAA,CAAG,SACM,IACP2S,eAACoc,GAAgB,CACfvb,QAAQ,kBACRzS,KAAK,YACLyR,OAAQC,IACP,IAAI,4EAMb1R,KAAK,YACLyR,OAAQC,OAGZG,gBAACwrH,GAAc,CAACr9H,KAAM,gBAAiBq4B,GAAI,YAAYp5B,SAAA,CACrD2S,eAAC0rH,GAAc,CAAAr+H,SAAC,kBAChB2S,eAACmB,GAAU,CAACrM,KAAM,oBAGtBkL,eAACuc,GAAc,CAAAlvB,SACb2S,eAACsrH,GAAI,CAAAj+H,SACFuhB,GAAS09G,EAAkBlwH,GAAMhE,KAAI,CAACozE,EAAQjiD,IAC7CvpB,eAAA,MAAA3S,SACE2S,eAACupH,GAAU,CACT/9C,OAAQA,EACRnrB,eACEwrE,GAAuBE,EAEzBlsH,OAAQ2rE,EAAO9+D,SANV6c,WAYL,EC7QT,MCmBDw6D,GAAezlF,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAVH,CAAU,4DAEfI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIE,aACrCzd,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAGrC05D,GAAQ1lF,aAAO8d,IAAiB5d,WAAA,CAAAxV,YAAA,sBAAAyV,YAAA,gBAAxBH,CAAwB,uDAEzBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAC1B5rB,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAE/Cf,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIob,aAIzC4sD,GAAc3lF,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,gBAARH,CAAQ,eAGtBstD,GAAUttD,aAAOgoH,IAAiB9nH,WAAA,CAAAxV,YAAA,wBAAAyV,YAAA,gBAAxBH,CAAwB,6DAExBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QACpC5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAG/D+gG,GAAOhtH,aAAOqtH,IAASntH,WAAA,CAAAxV,YAAA,qBAAAyV,YAAA,gBAAhBH,CAAgB,6DAEbI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QACpC5rB,GAAK,GAAAqB,OACVrB,EAAMC,MAAM0pB,QAAQC,OAAOhpB,GAAE,WAAAS,OAAUrB,EAAMC,MAAM2C,OAAO2a,IAAIsO,QAoDtDsiG,OA3CMxzH,IAAiD,IAAhD,OAAEwG,EAAS,UAAiBxG,EAChD,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,mBACtBhE,EAAWob,gBAEX,UAAE/L,GAAc2V,KAChBzM,EAAalJ,EAAUhE,KACvB0M,EAAY1I,EAAU0I,UACtBvY,EAAQgC,cAAapE,GAA6BA,EAAMoC,QAGxDyxH,GACE,OAALzxH,QAAK,IAALA,OAAK,EAALA,EAAQ,mBACI,OAAV+Y,QAAU,IAAVA,MAAY9B,aACbsB,EAAU7qB,gBAAkBF,EAAaT,QAO7C,OAJAgoB,qBAAU,KACRzU,SAASrS,MDzEJ+hB,GAAale,EAAalC,GAAmB3B,MCyEX,GACtC,CAACuS,IAGFoE,gBAAA,OAAK,cAAaH,EAAWzS,SAAA,CACnB,OAALgO,QAAK,IAALA,KAAQ,sBACT4E,gBAAC8jF,GAAY,CAAA12F,SAAA,CACX2S,eAACo/B,GAAQ,CAACC,SAAe,OAALhkC,QAAK,IAALA,OAAK,EAALA,EAAQ,wBAC5B4E,gBAACgkF,GAAW,CAAA52F,SAAA,CAAC,2EAEL2S,eAACgkF,GAAK,CAAC51F,KAAK,oBAAoByR,OAAQC,UAGhD,KACHgtH,EACC9sH,eAAC4rD,GAAO,CACNx3C,WAAYA,EACZvU,OAAQC,EACR8T,UAAWA,IAEX,KACJ5T,eAACsrH,GAAI,CAACzrH,OAAQC,MACV,EC5FV,MAAMU,GAAYlC,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,qCAAAyV,YAAA,gBAAVH,CAAU,iIAEZI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIqO,QAQ1C/N,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,0CAAAyV,YAAA,gBAAVH,CAAU,wBAG3Bke,GAASle,KAAOU,OAAMR,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAbH,CAAa,qCAEXI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQQ,OAEtDwkF,GAAc3lF,KAAO+U,EAAC7U,WAAA,CAAAxV,YAAA,uCAAAyV,YAAA,gBAARH,CAAQ,wBAqCbyuH,OA3BiB1zH,IAGJ,IAHK,UAC/BuG,EAAS,OACTC,EAAS,UACHxG,EACN,MAAMyG,EAAU,GAAAC,OAAMF,EAAM,+BAC5B,OACEG,eAACQ,GAAS,CAACZ,UAAWA,EAAW,cAAaE,EAAWzS,SACvD4S,gBAACsc,GAAc,CAAAlvB,SAAA,CACb2S,eAACwc,GAAM,CAAAnvB,SAAC,sBACR4S,gBAAA,KAAA5S,SAAA,CAAG,kCAED2S,eAAA,SACAA,eAAA,KAAGlE,KAAMQ,GAAOQ,kBAAkBzP,SAAEiP,GAAOQ,oBAAsB,OAEnEmD,gBAACgkF,GAAW,CAAA52F,SAAA,CAAC,0EAER,IACH2S,eAACoc,GAAgB,CACfhuB,KAAK,qCACLyR,OAAQC,WAIJ,ECrBhB,MAAMktH,GAAgB1uH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAVH,CAAU,mHAChBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIuU,YACrB9xB,GAASA,EAAMC,MAAM2C,OAAO4mB,SAGjDxpB,GAASA,EAAMC,MAAM+/B,KAAKG,UAEvBngC,GAASA,EAAMC,MAAM+/B,KAAKI,gBAG7BwnC,GAAgBhoE,KAAO2uH,KAAIzuH,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,gBAAXH,CAAW,gBACtBI,GAAK,WAAAqB,OACDrB,EAAMC,MAAM+/B,KAAKC,YAAW,UAAA5+B,OAASrB,EAAMC,MAAM+/B,KAAKE,IAAG,SAAA7+B,OAAQrB,EAAMC,MAAM+/B,KAAKK,WAAU,OAErGxiB,GAAiBje,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,gCAAAyV,YAAA,gBAAVH,CAAU,qBAI3B4uH,GAAyB5uH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,wCAAAyV,YAAA,gBAAVH,CAAU,qGAKzBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAIic,QAI1Ci1F,GAAe7uH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,gBAAVH,CAAU,wEACdI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAME,KACvCb,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAItD4uF,GAAkB9uH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAVH,CAAU,oCACjBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACrCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAGlDwiG,GAAmB/uH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAVH,CAAU,qEAClBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OACnCsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAC7C9/B,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAIlDguH,GAAmBhvH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,gBAAVH,CAAU,sEAO7BivH,GAAcjvH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,gBAAVH,CAAU,wBAIxB8rG,GAAkB9rG,aAAOmiC,IAAUjiC,WAAA,CAAAxV,YAAA,iCAAAyV,YAAA,gBAAjBH,CAAiB,oCACxBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQu/B,WAC7C9/B,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAGlDkuH,GAAqBlvH,KAAOgpB,OAAM9oB,WAAA,CAAAxV,YAAA,oCAAAyV,YAAA,iBAAbH,CAAa,4FACxBI,GACZA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOgmB,OAAOC,SAASK,QAAQC,GAC3CnpB,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQA,QAAQC,KAEvCnpB,GACPA,EAAM6oB,SACF7oB,EAAMC,MAAM2C,OAAOgmB,OAAOC,SAASK,QAAQO,GAC3CzpB,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQA,QAAQO,KACnCzpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMwrB,KAIlD4iG,GAAoBnvH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,mCAAAyV,YAAA,iBAAVH,CAAU,uEAgBpC,SAASovH,GAASr0H,GAAyC,IAAxC,kBAAEs0H,GAAmCt0H,EACtD,MAAM,OAAE6a,GAAWg2B,eAEnB,IACGh2B,IAAWjpB,GACVipB,IAAWjpB,GACXipB,IAAWjpB,KACZ0iI,EAED,OAAO3tH,eAACo3E,GAAY,CAACljE,OAAQA,EAAQrU,OAAO,cAG9C,OAAQqU,GACN,KAAKjpB,EACH,OAAO+U,eAACmqE,GAAgB,CAACtqE,OAAO,cAClC,KAAK5U,EACH,OAAO+U,eAACknF,GAAW,CAACrnF,OAAO,cAC7B,KAAK5U,EACH,OAAO+U,eAAC8pG,GAAY,CAACjqG,OAAO,cAC9B,KAAK5U,EACH,OAAO+U,eAACs2F,GAAU,CAACz2F,OAAO,cAC5B,KAAK5U,EACH,OAAO+U,eAAC22E,GAAQ,IAClB,KAAK1rF,EACH,OAAO+U,eAAC0jH,GAAgB,IAC1B,KAAKz4H,EACH,OAAO+U,eAACkkF,GAAY,CAACrkF,OAAO,cAC9B,KAAK5U,EACH,OAAO+U,eAAC6sH,GAAY,CAAChtH,OAAO,cAC9B,QACE,OAAOG,eAACwmB,KAAQ,CAACC,GAAG,MAE1B,CAuGemnG,OArGc9zH,IAEY,IAAD4kB,EAAA,IAFV,UAC5B9e,GACM9F,EACN,MACM,WAAEwhB,GAAeP,KACjBlf,EAAWob,eACX02G,EC9J4BE,MAAgB,IAADC,EACjD,MAAOC,EAAkBC,GAAuBh+G,oBAAS,GACnD5T,EAAOiB,cAAapE,GAA6BA,EAAMmD,OACvD6T,EAAa,OAAJ7T,QAAI,IAAJA,OAAI,EAAJA,EAAMvU,IACbuiB,KAAM8M,GAA0BzH,MAClC,UAAEvE,GAAc2V,KAEhBzM,EAAalJ,EAAUhE,KACvB+mH,EAAkC,OAAV75G,QAAU,IAAVA,OAAU,EAAVA,EAAY5F,mBACpC0/G,EAAsB7+G,mBAC1B,IAAgB,OAAV+E,QAAU,IAAVA,OAAU,EAAVA,EAAY/F,YAAYjW,KAAImW,GAAKA,EAAE1mB,MACzC,CAACusB,IAEG+5G,EAA4B9+G,mBAAQ,KACV,IAAD++G,EAA7B,GAAMl3G,EACJ,OAAgE,QAAhEk3G,EAAO1/G,GAAmCwI,UAAsB,IAAAk3G,OAAA,EAAzDA,EAA2Dh2H,KAChEmW,GAAKA,EAAE1mB,IAEX,GACC,CAACqvB,IAEEm3G,IACFJ,KACyB,OAAzBE,QAAyB,IAAzBA,MAA2BzkH,SAASukH,IAClCK,IAAmE,OAAzBH,QAAyB,IAAzBA,MAA2Bn+F,MACzEnoC,IAAE,IAAA0mI,EAAA,OACmB,OAAnBL,QAAmB,IAAnBA,OAAmB,EAAnBA,EAAqBxkH,SAAS7hB,MAAiB,OAAVusB,QAAU,IAAVA,GAAyB,QAAfm6G,EAAVn6G,EAAY3F,qBAAa,IAAA8/G,OAAf,EAAVA,EAA2B1mI,MAAOA,CAAE,KAEvE2mI,IAAoC,OAAnBN,QAAmB,IAAnBA,MAAqBxkH,SAASuG,IAC/Cw+G,GAA4B,OAAVr6G,QAAU,IAAVA,GAAyB,QAAf05G,EAAV15G,EAAY3F,qBAAa,IAAAq/G,OAAf,EAAVA,EAA2BjmI,MAAOooB,EAiB1D,OAdAG,qBAAU,KACR49G,EACEK,GACEC,GACAE,GACAC,EACH,GACA,CACDJ,EACAC,EACAG,EACAD,IAGKT,CAAgB,EDgHGF,IACpB,UAAE3iH,GAAc2V,KAChBE,EAAUC,eACV0tG,EAAmD,KAAzB,QAAdhwG,EAAAxT,EAAUhE,YAAI,IAAAwX,OAAA,EAAdA,EAAgBrQ,YAAYxT,QACxCQ,EAAQgC,cAAapE,GAA6BA,EAAMoC,QACxDszH,EAA0B,OAALtzH,QAAK,IAALA,OAAK,EAALA,EAAQ,4BAgBnC,OAVA+U,qBAAU,KACRkL,EAAW,CACTzR,EAAG,CACD7O,KAAM,aAERlT,MAAO,YACP4oB,MAAM,UACN,GACD,CAAC7U,IAEGqV,iBAAO7V,GAAS,KACrB2E,eAACgtH,GAAa,CAACptH,UAAWA,EAAW,cAzBpB,wBAyB4CvS,SAC1DshI,EACC1uH,gBAAAoyB,YAAA,CAAAhlC,SAAA,CACE2S,eAACytG,GAAO,IACRztG,eAACsmE,GAAa,CAAAj5E,SACZ4S,gBAACsc,GAAc,CAAAlvB,SAAA,CACb2S,eAACyzE,GAAgB,CAAC5zE,OAAO,cACxB6uH,GACCzuH,gBAACitH,GAAsB,CAAA7/H,SAAA,CACrB2S,eAACmtH,GAAY,CAAA9/H,SAAC,oBACd4S,gBAACmtH,GAAe,CAAA//H,SAAA,CAAC,oCACmB,IAClC2S,eAACoqG,GAAe,CACdh8G,KAAK,eACLq4B,GAAG,YACHzrB,KAAK,MAAK3N,SAEV2S,eAAA,QAAA3S,SAAM,sBAGV2S,eAACqtH,GAAgB,CAAAhgI,SAAC,yBAClB4S,gBAACqtH,GAAgB,CAAAjgI,SAAA,CACf2S,eAACutH,GAAW,CAAAlgI,SACV2S,eAACotH,GAAe,CAAA//H,SAAC,0BAEnB2S,eAACutH,GAAW,CAAAlgI,SACV2S,eAACotH,GAAe,CAAA//H,SAAC,yCAInB2S,eAACutH,GAAW,CAAAlgI,SACV2S,eAACotH,GAAe,CAAA//H,SAAC,kCAInB2S,eAACutH,GAAW,CAAAlgI,SACV2S,eAACotH,GAAe,CAAA//H,SAAC,gCAInB2S,eAACutH,GAAW,CAAAlgI,SACV2S,eAACotH,GAAe,CAAA//H,SAAC,8BAGrB2S,eAACwtH,GAAkB,CAACnxG,QAASA,IAAM0E,EAAQwB,KAAK,aAAal1B,SAAC,mBAKlE4S,gBAACmiC,KAAM,CAAA/0C,SAAA,CACL2S,eAAC+mB,KAAK,CAAC35B,KAAI,WAAaC,SACtB2S,eAAC0tH,GAAS,CAACC,kBAAmBA,MAEhC3tH,eAAC+mB,KAAK,CAAA15B,SACHsgI,EACC3tH,eAACguG,GAAS,IAEVhuG,eAACo3E,GAAY,CAACv3E,OAAO,2BAQjCG,eAACytH,GAAiB,CAAApgI,SAChB2S,eAAC+sH,GAAuB,OAI/B,EEnQH,MAAM6B,WAAyBjiG,YAC7BkiG,mBAAmBC,GAEb9hG,KAAKtuB,MAAM7C,SAASoP,WAAa6jH,EAAUjzH,SAASoP,UACtDrP,OAAOmzH,SAAS,EAAG,EAEvB,CAEA1hG,SACE,OAAOL,KAAKtuB,MAAMrR,QACpB,EAGa2hI,I,GAAAA,gBAAWJ,ICT1B,MAAMv+F,GAAcC,aAAiB7I,QAAAC,aAAA,szCAGbhpB,GAASA,EAAMC,MAAM2C,OAAOy8B,eAUvCr/B,GAASA,EAAMC,MAAM2C,OAAOu3B,KAAKl5B,OAC3BjB,GACbA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAEbsQ,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAiB/Cd,GAASA,EAAMC,MAAM2C,OAAOi7B,KAAKl7B,QAyB1C4tH,GAAkB3wH,KAAOC,IAAGC,WAAA,CAAAxV,YAAA,6BAAAyV,YAAA,eAAVH,CAAU,oBA2BnB4wH,OAvBG71H,IAAiD,IAAhD,SAAEhM,EAAQ,OAAEwS,EAAM,MAAElB,EAAQo4B,IAAc19B,EAC3D,OAAKhM,GAAawS,EAKhBG,eAACmvH,KAAa,CAACxwH,MAAOo4B,GAAa1pC,SACjC4S,gBAACgvH,GAAe,CAAC,iBAAAlvH,OAAgBF,EAAM,eAAcxS,SAAA,CACnD2S,eAACqwB,GAAW,IACXhjC,OAPE,IASS,EC5EpB,MAAMgR,GAAkBC,aAAO,OAAME,WAAA,CAAAxV,YAAA,+BAAAyV,YAAA,eAAbH,CAAa,0FA+BtB8wH,OAvBKA,KAClB,MAAM,WAAE9zG,GAAeP,KAUvB,OAPA3K,qBAAU,KACRkL,EAAW,CACTzR,EAAG,CAAE7O,KAAM,aACXlT,MAAO,YACP4oB,MAAM,gBACN,GACD,IAED1Q,eAAC3B,GAAe,CAAAhR,SACd2S,eAAC2pF,KAAa,CAAAt8F,SACZ2S,eAAC8jG,GAAgB,CACfC,QAAQ,2CACRlkG,OAAO,kCAGK,ECkFPwvH,OAzFMA,KACnB,MAAMtuG,EAAUC,gBACV,WAAE1F,GAAeP,MAChBu0G,EAAqBC,GAA0Bv/G,mBACpD,OAEK2W,EAAe6oG,GAAoBx/G,oBAAS,IAC5Cy/G,EAAcC,GAAmB1/G,oBAAS,GAC3CrV,EAAO0C,cAAapE,GAA6BA,EAAM0B,OACvDS,EAAiB,OAAJT,QAAI,IAAJA,OAAI,EAAJA,EAAMS,WACnBG,EAAU8B,cAAapE,GAA6BA,EAAMsC,UAC1Do0H,EAAyB,OAAPp0H,QAAO,IAAPA,OAAO,EAAPA,EAASQ,SAGjCqU,qBAAU,MAELq/G,GACD9oG,GACE2oG,GACAK,GACkB,yBAApBA,IAEAr0G,EAAW,CACTzR,EAAG,CACD7O,KAAM,QAERlT,MAAO,qBACP4oB,MAAM,eAAD3Q,OAAiBuvH,KAExBI,GAAgB,GAClB,GACC,CACD/oG,EACA8oG,EACAH,EACAK,EACAr0G,IAGF,MAUMs0G,EAAiB,CACrBC,OAAQz0H,EAAWy0H,OACnBC,SAAU10H,EAAW00H,SACrBC,SAAU30H,EAAW20H,SACrBC,YAAap0H,OAAOC,SAASo0H,OAC7BC,mBAf0BC,IAC1B,MAAMC,EACJD,GAAYA,EAASE,SACjBF,EAASE,SACTz0H,OAAOC,SAASoP,SACtB8V,EAAQwB,KAAK6tG,GACbZ,GAAiB,GACjBD,EAAuBa,EAAY,GAWrC,OACEpwH,eAACswH,KAAa,IAAKV,EAAcviI,SAC/B2S,eAAC2pF,KAAa,CAAAt8F,SACZ2S,eAACya,GAAiB,CAAAptB,SAChB2S,eAAC4uH,GAAgB,CAAAvhI,SACf2S,eAACkvH,GAAS,CAACrvH,OAAO,mBAAkBxS,SAClC4S,gBAACmiC,KAAM,CAAA/0C,SAAA,CACL2S,eAAC+mB,KAAK,CAAC6jD,OAAK,EAACx9E,KAAK,gBAAeC,SAC/B2S,eAACovH,GAAW,MAEdpvH,eAAC+mB,KAAK,CAAC35B,KAAK,YAAWC,SASrB2S,eAAC0mB,GAAmB,CAACC,cAAeA,EAAct5B,SAChD2S,eAAC4mB,GAAW,CAACC,UAAW+mG,qBAQxB,E,UCpGpB,MAAMvvH,GAAkBC,KAAOyzC,QAAOvzC,WAAA,CAAAxV,YAAA,8BAAAyV,YAAA,eAAdH,CAAc,gGAOhC+nE,GAAsB/nE,aAAOgoE,IAAc9nE,WAAA,CAAAxV,YAAA,kCAAAyV,YAAA,eAArBH,CAAqB,sBAG3C4nE,GAAgB5nE,aAAO8nE,IAAQ5nE,WAAA,CAAAxV,YAAA,4BAAAyV,YAAA,eAAfH,CAAe,wBAG/BqhC,GAAQrhC,KAAOme,GAAEje,WAAA,CAAAxV,YAAA,oBAAAyV,YAAA,eAATH,CAAS,6GACNI,GAASA,EAAMC,MAAMC,MAAMI,OAAO5Q,OAElCsQ,GAASA,EAAMC,MAAMC,MAAMI,OAAOC,QAAQC,YAKrDqxH,GAAajyH,KAAOuzB,KAAIrzB,WAAA,CAAAxV,YAAA,yBAAAyV,YAAA,eAAXH,CAAW,sBAGxBmzB,GAAenzB,KAAOi3C,MAAK/2C,WAAA,CAAAxV,YAAA,2BAAAyV,YAAA,eAAZH,CAAY,+WAIhBI,GAASA,EAAMC,MAAMC,MAAMC,QAAQzQ,OAGzCsQ,GAASA,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQA,QAAQC,KAE/CnpB,GAASA,EAAMC,MAAMC,MAAMC,QAAQQ,MAAMC,KAGtCZ,GAASA,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQA,QAAQM,SAEnDxpB,GAASA,EAAMC,MAAM0pB,QAAQC,OAAO/oB,KAEnCb,GAASA,EAAMC,MAAM2C,OAAOgmB,OAAOY,OAAOK,SAKrC7pB,GAASA,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQK,MAAMJ,KACrDnpB,GAASA,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQK,MAAMC,SACxDxpB,GAASA,EAAMC,MAAM2C,OAAOgmB,OAAOM,QAAQK,MAAME,KAGxDkxE,GAAQ/6F,KAAOi/B,OAAM/+B,WAAA,CAAAxV,YAAA,oBAAAyV,YAAA,eAAbH,CAAa,iFAChBI,GAASA,EAAMC,MAAM2C,OAAO2a,IAAI2W,UAG1Bl0B,GAASA,EAAMC,MAAMC,MAAMC,QAAQI,QAAQO,UAuG7CgxH,OA9FIn3H,IAA0B,IAAzB,SAAEk5B,GAAiBl5B,EACrC,MAAMyG,EAAa,eACZ2wH,EAAcC,GAAmB1gH,mBAAyB,MAE3D2gH,EAAuB3yH,eACrB4yH,OAEHlkH,QACAmkH,QAAQC,GAsBb,OACE9wH,eAAC3B,GAAe,CAAC,cAAayB,EAAWzS,SACvC4S,gBAAComE,GAAmB,CAAAh5E,SAAA,CAClB2S,eAAC0mE,GAAO,CAAAr5E,SACN2S,eAACkmE,GAAa,CAAA74E,SACZ4S,gBAAA,UAAA5S,SAAA,CACE2S,eAAC2/B,GAAK,CAAAtyC,SAAC,YACP4S,gBAAA,KAAA5S,SAAA,CAAG,iHAE+C,IAChD2S,eAAA,KAAGlE,KAAK,iCAAgCzO,SAAC,4BAErC,OAIN4S,gBAAA,KAAA5S,SAAA,CAAG,iEAC8D,IAC/D2S,eAAA,KAAGlE,KAAK,6BAA4BzO,SAAC,kCAEjC,cAMZ2S,eAAC0mE,GAAO,CAAAr5E,SACN2S,eAACkmE,GAAa,CAAA74E,SACZ4S,gBAACswH,GAAU,CACTh+F,SA1CZv0B,eAA4B6L,GAC1BA,EAAE0lB,iBACF,MACMwhG,EADW,IAAIC,SAASnnH,EAAEgkG,eACF3hG,IAAI,gBAC5B+kH,QAA4BN,EAAqBI,GACvD,GAAIE,EAAqB,CACvB,MAAMpB,EAASkB,EAAa5lH,UAAU4lH,EAAap7D,QAAQ,KAAO,GAClEpjC,EAASs9F,EACX,MACEa,EAAgBO,EAEpB,EAgCY,iBAAAlxH,OAAgBD,EAAU,YAAWzS,SAAA,CAErC4S,gBAAA,YAAA5S,SAAA,CACE2S,eAAA,SAAOJ,UAAU,iBAAiBo2C,QAAQ,eAAc3oD,SAAC,kBAGzD2S,eAAA,SACEwyB,SAzDhBx0B,eAA6B6L,GAC3B,IAAKqH,iBAAOu/G,GAAe,CACzB,MAAMS,QAAqBP,EAAqB9mH,EAAEqjB,OAAOxc,OACzDggH,EAAgBQ,EAClB,CACF,EAqDgBl2H,KAAK,OACL5M,KAAK,eACLvG,GAAG,eACH+7E,YAAY,kBACZutD,UAAQ,EACR,iBAAApxH,OAAgBD,EAAU,eAG7BoR,iBAAOu/G,IAAmBA,EAAe,KACxCzwH,eAACq5F,GAAK,CAAC,cAAY,QAAOhsG,SAAC,uCAI7B2S,eAACyxB,GAAY,CACXz2B,KAAK,SACL0V,MAAM,SACN,iBAAA3Q,OAAgBD,EAAU,wBAMpB,EC9DPsxH,OA7EEA,KACf,MACMv1H,EAAWob,eACXvC,EAAoB2B,GAAiBxa,EAASmb,SAC5Cg4B,EAAGqiF,GAAc38G,EACnB48G,EAAqBC,aAAaC,QAAQ,WACzCC,EAAmBC,GAAwB1hH,sBAC3C6/G,EAAQ8B,GAAa3hH,qBAEtBoT,EAAWC,eACXjoB,EAAaiC,cAChBpE,GAA6BA,EAAM0B,KAAKS,aAErCw2H,GAAiBtiH,kBAAkB,OAAVlU,QAAU,IAAVA,OAAU,EAAVA,EAAY00H,UAqD3C,OAnDA1/G,qBAAU,KAIR,MAAMyhH,EACJJ,GAAsBJ,GAAwBC,EAC1CO,IAKJN,aAAaO,QAAQ,SAAUD,GAE/BF,EAAUE,GACZ,GACC,CAACP,EAAoBD,EAAWI,IAEnCrhH,qBAAU,KACR,WACE,IAAKwhH,EACH,IACE,IAAIG,EAMJ,GAJMlC,IACJkC,OCjDqB/zH,iBACR8M,GAAUoB,IAAI,QAAS,CAC5CxB,QAAS,CAAEmB,cAAc,gBACzBH,OAAQ,CAAEmkH,aAEIzlH,KD4CoB4nH,CAAkBnC,IAG1CkC,EAAmB,CACrB,MAAME,EC7Da72H,KACtB,IAAKA,EAAW82H,WAAYvmH,SAAUwK,SAAS/a,EAAWvT,GAAI,MD4DlCsqI,CAAgBJ,GACnCz0H,EAAe,QAAQme,KAAKw2G,EAAiBlC,UAC/Cv5H,GACAA,GAGJ4sB,EhWzDmBhoB,KACtB,CACLJ,KAAMlU,EAAYqU,kBAClBD,QAAS,CAAEE,gBgWuDDg3H,CAAgB,IACXH,EACH30H,iBAGN,CACF,CAAE,MAAOuM,GACPy1D,cAAUC,IACRA,EAAM1gB,WAAW,sBAAuB,CAAEgxE,WAC1C/lH,aAAiBD,EAAE,GAEvB,CAEH,EA9BD,EA8BI,GACH,CAACgmH,EAAQ+B,IAGV5xH,eAACY,GAAa,CACZG,kBAAmB8uH,IAAW+B,EAC9B9wH,eAAgB+uH,EAChB7uH,cAAehB,eAACwwH,GAAU,CAACj+F,SAAUm/F,IACrC7wH,QAASb,eAACwmB,KAAQ,CAACC,GAAI,CAAExb,SAAS,OAClCpL,OAvEe,aAwEf,E,UE9DSwyH,OAxBYh5H,IAAyC,IAAxC,SAAEhM,EAAQ,cAAEs5B,GAAsBttB,EAC5D,MAAM,mBAAEkE,GAAuBR,MACxBY,EAAiBqlB,GAAsBhT,qBAW9C,OAPAzS,IAAqBM,MAAMC,GACzBklB,EAAmBllB,KAOnBkC,eAACY,GAAa,CACZG,gBAAiB4lB,GAAiBzlB,sBAAYvD,GAC9CkD,QACElD,EAAkBqC,eAACqmB,GAAe,CAAAh5B,SAAEA,IAA8B,KAEpEwS,OAAO,oBACP,EC0ESyyH,OAhFKA,KAClB,MAAMvxG,EAAUC,gBACV,WAAE1F,GAAeP,MAEhBw3G,EAAoBC,GAAyBxiH,mBAClD,OAEKy/G,EAAcC,GAAmB1/G,oBAAS,IAC1C2W,EAAe6oG,GAAoBx/G,oBAAS,GAC7CrV,EAAO0C,cAAapE,GAA6BA,EAAM0B,OACvDS,EAAiB,OAAJT,QAAI,IAAJA,OAAI,EAAJA,EAAMS,WACnBG,EAAU8B,cAAapE,GAA6BA,EAAMsC,UAC1Do0H,EAAyB,OAAPp0H,QAAO,IAAPA,OAAO,EAAPA,EAASQ,SAQjCqU,qBAAU,MAELq/G,GACD9oG,GACE4rG,GACA5C,GACkB,yBAApBA,IAEAr0G,EAAW,CACTzR,EAAG,CACD7O,KAAM,QAERlT,MAAO,oBACP4oB,MAAM,eAAD3Q,OAAiBwyH,KAExB7C,GAAgB,GAClB,GACC,CACD6C,EACA5rG,EACA8oG,EACAE,EACAr0G,IAGF,MAAM1d,EAAW,IAAI60H,YAAS,CAC5BC,OAAQt3H,EAAWs3H,OACnB5C,SAAU10H,EAAW00H,SACrBE,YAAY,GAADjwH,OAAKnE,OAAOC,SAASo0H,OAAM,mBACtC0C,OAAQ,CAAC,SAAU,UAAW,SAC9BC,MAAM,IAGR,OACE5yH,eAAC6yH,KAAQ,CAACj1H,SAAUA,EAAUk1H,mBAxCX90H,MAAO+0H,EAAgB3C,KAC1CrvG,EAAQ6rB,QAAQomF,yBAAc5C,EAAax0H,OAAOC,SAASo0H,SAC3DuC,EAAsBpC,GACtBZ,GAAiB,EAAK,EAqCyCniI,SAC7D2S,eAAC2pF,KAAa,CAAAt8F,SACZ2S,eAACya,GAAiB,CAAAptB,SAChB2S,eAAC4uH,GAAgB,CAAAvhI,SACf2S,eAACkvH,GAAS,CAACrvH,OAAO,mBAAkBxS,SAClC4S,gBAACmiC,KAAM,CAAA/0C,SAAA,CACL2S,eAAC+mB,KAAK,CAAC6jD,OAAK,EAACx9E,KAAK,kBAAiBC,SACjC2S,eAACizH,KAAa,MAEhBjzH,eAAC+mB,KAAK,CAAC35B,KAAK,gBAAeC,SACzB2S,eAACovH,GAAW,MAEdpvH,eAAC4mB,KAAW,CAACx5B,KAAK,YAAWC,SAC3B2S,eAACqyH,GAAkB,CAAC1rG,cAAeA,EAAct5B,SAC/C2S,eAAC4tH,GAAa,oBAQnB,EC1DA9yG,aAxBHo4G,KACV,MAAM93H,EAAaiC,cAChBpE,GAA6BA,EAAM0B,KAAKS,aAK3C,OAAIkU,kBAAkB,OAAVlU,QAAU,IAAVA,OAAU,EAAVA,EAAY00H,UAEpB9vH,eAACkvH,GAAS,CAACrvH,OAAO,mBAAkBxS,SAClC2S,eAAC+mB,KAAK,CAAA15B,SACJ2S,eAACoxH,GAAQ,QAMVh2H,EAAWkC,eAAiB9G,GACjCwJ,eAACqvH,GAAY,IAEbrvH,eAACsyH,GAAW,GACb,I,oECpBH,MAAMvxG,GAAUoyG,eAEVC,GAAsBt4G,KAA2B,CAAC,GAExDA,KAAY,CACVu4G,IAAqD/2H,GAAOO,WAC5Dy2H,QAAS,4BACTC,qBAAqB,EACrBC,YAAqD,aACrDC,aAAc,CACZ,IAAIC,KACJ,IAAIC,KAAe,CACjBC,uBAAwB94G,KAAoCiG,OAGhE8yG,eAAgB,GAKhBC,iBAAkB,MAGpB,MAAMzpF,GAAc,IAAI0pF,eAElBC,GAAQC,YAAYC,GAAad,IAEvC/lG,iBACErtB,eAACm0H,KAAa,CAACH,MAAOA,GAAM3mI,SAC1B2S,eAACo0H,uBAAmB,CAACC,OAAQhqF,GAAYh9C,SACvC2S,eAACs0H,KAAM,CAACvzG,QAASA,GAAQ1zB,SACvB2S,eAACkzH,GAAG,UAKVv3H,SAASyjD,eAAe,Q","file":"static/js/main.963ab58b.chunk.js","sourcesContent":["export const actionTypes = [\n \"STORE_AUTH_ACCESS_TOKEN\",\n \"STORE_AUTH_PARAMS\",\n \"STORE_FLAGS\",\n \"STORE_ORGANIZATION\",\n \"STORE_SESSION_LOGIN_TIMESTAMP\",\n \"STORE_SESSION_PARAMS\",\n \"STORE_SESSION_REFERRER\",\n \"STORE_SESSION_UUID\",\n \"STORE_USER\",\n \"TRACK_EVENT\"\n].reduce((result, key) => {\n result[key] = key.toLowerCase();\n return result;\n}, {});\n","import { actionTypes } from \"../constants/actionTypes\";\n\n/**\n * reducer for auth related state actions\n */\nexport default (state = {}, action = {}) => {\n switch (action.type) {\n case actionTypes.STORE_AUTH_ACCESS_TOKEN:\n return {\n ...state,\n ...action.payload\n };\n case actionTypes.STORE_AUTH_PARAMS:\n return {\n ...state,\n authParams: {\n ...state.authParams,\n ...action.payload.authParams\n }\n };\n default:\n return state;\n }\n};\n","import { snakeCase } from \"lodash\";\nimport * as ConstantsInterfaces from \"../interfaces/constants\";\nimport { FeatureTypes } from \"../interfaces/features\";\nimport {\n KanbanProjectHealthMetricsInterface,\n MetricsInterface,\n PeopleHealthMetricsInterface,\n SprintProjectHealthMetricsInterface\n} from \"../interfaces/metrics\";\nimport { Roles } from \"../interfaces/organization\";\n\nexport const breakpointTypes: ConstantsInterfaces.BreakpointTypesInterface = {\n XS: \"xs\",\n SM: \"sm\",\n MD: \"md\",\n LG: \"lg\",\n XL: \"xl\"\n};\n\nexport const responseTotalTypes: ConstantsInterfaces.ResponseTotalTypesInterface = {\n CALLOUT_TOTALS: \"calloutTotals\",\n OTHER_SPRINT_ITEMS_TOTALS: \"otherSprintItemsTotals\",\n PROJECT_TOTALS: \"projectTotals\",\n STATUS_TOTALS: \"statusTotals\",\n TYPES_OF_WORK_TOTALS: \"typesOfWorkTotals\",\n USER_TOTALS: \"userTotals\",\n WORK_ITEM_TYPE_TOTALS: \"workItemTypeTotals\"\n};\n\nexport const directionTypes: ConstantsInterfaces.DirectionTypesInterface = {\n NEXT: \"next\",\n PREV: \"prev\"\n};\n\nexport const momentUnitTypes: ConstantsInterfaces.MomentUnitTypesInterface = {\n HOURS: \"hours\",\n DAYS: \"days\",\n MONTHS: \"months\",\n WEEKS: \"weeks\",\n YEARS: \"years\"\n};\n\nexport const STRING_TRUNCATION_LENGTH = 30;\n\nexport const sprintMetadataWorkTypes: ConstantsInterfaces.SprintMetadataWorkTypesInterface = {\n SPRINT_WORK: \"SPRINT_WORK\",\n NOT_ATTACHED_TO_SPRINT: \"NOT_ATTACHED_TO_SPRINT\",\n PULL_REQUESTS_NOT_IN_SPRINT: \"PULL_REQUESTS_NOT_IN_SPRINT\",\n REMOVED_FROM_SPRINT: \"REMOVED_FROM_SPRINT\",\n COMPLETED_OUTSIDE_SPRINT: \"COMPLETED_OUTSIDE_SPRINT\"\n};\n\nexport const sprintOptions: ConstantsInterfaces.SprintOptionsInterface = {\n UNASSIGNED: { id: \"UNASSIGNED\", label: \"Unassigned\" },\n OTHER_TEAMS: { id: \"OTHER_TEAMS\", label: \"Other teams\" }\n};\n\nexport const textStringFormatTypes: ConstantsInterfaces.FormatTypes = {\n HTML: \"html\",\n MARKDOWN: \"markdown\"\n};\n\n// generic types of timerange metadata objects\nexport const timerangeTypes: ConstantsInterfaces.TimerangeTypesInterface = {\n CUSTOM: \"custom\",\n DAYS: \"days\",\n WEEKS: \"weeks\",\n SPRINTS: \"sprints\"\n};\n\n// named timeranges that correspond to specific date ranges relative to now\nexport const namedTimerangeIds: ConstantsInterfaces.TimerangeIdsInterface = {\n LAST_WEEK: \"last-week\",\n PREVIOUS_14_DAYS: \"previous-14-days\",\n PREVIOUS_30_DAYS: \"previous-30-days\",\n PREVIOUS_90_DAYS: \"previous-90-days\",\n THIS_WEEK: \"this-week\",\n YESTERDAY: \"yesterday\",\n TODAY: \"today\"\n};\n\n// all possible timerange ids, including generic timeranges constructed once the\n// user starts stepping back and forth\nexport const timerangeIds: ConstantsInterfaces.TimerangeIdsInterface = {\n ...namedTimerangeIds,\n CUSTOM: \"custom\",\n DAYS: \"days\",\n WEEKS: \"weeks\",\n SPRINTS: \"sprints\"\n};\n\n// metadata for generic timerange types\nexport const timerangeTypesMetadata: ConstantsInterfaces.TimerangeTypesMetadataInterface = {\n [timerangeTypes.CUSTOM]: {\n timerangeType: timerangeTypes.CUSTOM,\n id: timerangeIds.CUSTOM,\n displayName: \"Custom\"\n },\n [timerangeTypes.DAYS]: {\n timerangeType: timerangeTypes.DAYS,\n id: timerangeIds.DAYS,\n displayName: \"Days\"\n },\n [timerangeTypes.WEEKS]: {\n timerangeType: timerangeTypes.WEEKS,\n id: timerangeIds.WEEKS,\n displayName: \"Weeks\"\n },\n [timerangeTypes.SPRINTS]: {\n timerangeType: timerangeTypes.SPRINTS,\n id: timerangeIds.SPRINTS,\n displayName: \"Sprints\"\n }\n};\n\nexport const reservedEpics: ConstantsInterfaces.ReservedEpicsInterface = {\n NO_EPIC: \"work-not-tied-to-epic\",\n UNLINKED_PRS: \"unlinked-prs\"\n};\n\nexport const reservedEpicsMetadata: ConstantsInterfaces.ReservedEpicsMetadataInterface = {\n [reservedEpics.NO_EPIC]: {\n magicRowId: \"ISSUES_NOT_LINKED_TO_EPICS\",\n title: \"Work not tied to epic\"\n },\n [reservedEpics.UNLINKED_PRS]: {\n magicRowId: \"PULL_REQUESTS_NOT_LINKED_TO_JIRA\",\n title: \"PRs not linked to Jira\"\n }\n};\n\nexport const reservedProjects: ConstantsInterfaces.ReservedProjectsInterface = {\n NO_PROJECT: \"00000000-0000-0000-0000-000000000000\"\n};\n\nexport const workMetadataStatusTypes: ConstantsInterfaces.WorkMetadataStatusTypesInterface = {\n CLOSED_NOT_MERGED: \"CLOSED_NOT_MERGED\",\n DONE: \"DONE\",\n OPEN: \"OPEN\",\n DRAFT: \"DRAFT\",\n IN_PROGRESS: \"IN_PROGRESS\",\n TODO: \"TODO\"\n};\n\nexport const prActivityStatusTypes: ConstantsInterfaces.PrActivityStatusTypesInterface = {\n APPROVED: \"APPROVED\",\n CHANGES_REQUESTED: \"CHANGES_REQUESTED\",\n COMMENTED: \"COMMENTED\",\n COMMITS_ADDED: \"COMMITS_ADDED\",\n IN_PROGRESS: \"IN_PROGRESS\",\n MERGED: \"MERGED\",\n WITHDRAWN: \"CLOSED_NOT_MERGED\"\n};\n\nexport const prActivityStatusLabels: { [key: string]: string } = {\n [prActivityStatusTypes.APPROVED]: \"Approved\",\n [prActivityStatusTypes.CHANGES_REQUESTED]: \"Changed Requested\",\n [prActivityStatusTypes.COMMENTED]: \"Comment\",\n [prActivityStatusTypes.COMMITS_ADDED]: \"Code Update\",\n [prActivityStatusTypes.WITHDRAWN]: \"Withdrawn\",\n IN_PROGRESS: \"In-progress\",\n MERGED: \"Merged\",\n OPENED: \"PR Opened\",\n WAITING_FOR_REVIEW: \"Waiting for Review\",\n DEV: \"Dev\",\n REVIEW: \"Review\",\n RELEASE: \"Release\"\n};\n\nexport const workMetadataActivityResponseTypes: ConstantsInterfaces.WorkMetadataActivityResponseTypesInterface = {\n BUG: \"Bug\",\n ISSUE: \"Issue\",\n PR: \"Pull Request\",\n SUB_TASK: \"Sub-task\"\n};\n\nexport const workMetadataActivityTypes: ConstantsInterfaces.WorkMetadataActivityTypesInterface = {\n BUG: \"BUG\",\n ISSUE: \"ISSUE\",\n PR: \"PULL_REQUEST\",\n SUB_TASK: \"SUB_TASK\"\n};\n\nexport const pageIds: ConstantsInterfaces.PageIdsInterface = {\n START: \"start\",\n REPORTS: \"reports\",\n WORK_DEEP_DIVE: \"work-deep-dive\",\n EPIC_DETAILS: \"epic-details\",\n SETTINGS: \"settings\",\n RETROS: \"sprint-retros\",\n LABS: \"labs\",\n TEAM_DEEP_DIVE: \"team-deep-dive\",\n OVERVIEW: \"overview\",\n TEAM_HOME: \"team-home\"\n};\n\nexport const teamDeepDiveSections: ConstantsInterfaces.PageSectionsInterface = {\n PEOPLE_HEALTH: \"people-health\",\n HEALTH_METRICS: \"health-metrics\",\n MEETING_INSIGHTS: \"meeting-insights\"\n};\n\nexport const teamDeepDiveSectionLabels = {\n [teamDeepDiveSections.HEALTH_METRICS]: \"Health Metrics\",\n [teamDeepDiveSections.PEOPLE_HEALTH]: \"People Health\",\n [teamDeepDiveSections.MEETING_INSIGHTS]: \"Meeting Insights\"\n};\n\nexport const teamDeepDiveMeasurePathParams: ConstantsInterfaces.PageSectionsInterface = {\n OVERALL_TEAM_HEALTH: \"overall-team-health\",\n DEEP_WORK: \"deep-work\",\n ALWAYS_ON: \"always-on\",\n CHAT_INTERRUPTIONS: \"chat-interruptions\",\n CONTEXT_SWITCHING: \"context-switching\"\n};\n\nexport const meetingInsightsMeasurePathParams: ConstantsInterfaces.PageSectionsInterface = {\n MEETING_DISTRIBUTION: \"meeting-distribution\",\n MEETING_LENGTH: \"meeting-length\"\n};\n\nexport const meetingInsightsMeasureLabels = {\n [meetingInsightsMeasurePathParams.MEETING_DISTRIBUTION]:\n \"Meeting Distribution\",\n [meetingInsightsMeasurePathParams.MEETING_LENGTH]: \"Meeting Length\"\n};\n\nexport const overviewSections: ConstantsInterfaces.PageSectionsInterface = {\n DEEP_WORK: \"deep-work\"\n};\n\nexport const overviewSectionLabels = {\n [overviewSections.DEEP_WORK]: \"Deep Work\"\n};\n\nexport const settingsSections: ConstantsInterfaces.PageSectionsInterface = {\n PROJECTS_AND_REPOS: \"projects-and-repos\",\n TEAM_BUILDER: \"team-builder\",\n TEAM_SETTINGS: \"team-settings\"\n};\n\nexport const settingsSectionLabels = {\n [settingsSections.PROJECTS_AND_REPOS]: \"Projects & Repos\",\n [settingsSections.TEAM_BUILDER]: \"Team Builder\",\n [settingsSections.TEAM_SETTINGS]: \"Team Settings\"\n};\n\nexport const teamSettingsSections: ConstantsInterfaces.PageSectionsInterface = {\n CALENDAR: \"calendar\",\n CHAT: \"chat\",\n SOURCE_WORK: \"source-work\",\n JIRA_WORK: \"jira-work\"\n};\n\nexport const teamSettingsSectionsLabels = {\n [teamSettingsSections.CALENDAR]: \"Calendar\",\n [teamSettingsSections.CHAT]: \"Chat\",\n [teamSettingsSections.JIRA_WORK]: \"Jira Work\",\n [teamSettingsSections.SOURCE_WORK]: \"Source Work\"\n};\n\nexport const workDeepDiveSections: ConstantsInterfaces.PageSectionsInterface = {\n OPS_METRICS: \"operational-metrics\",\n PROJECT_WORK: \"project-work\",\n PR_WORKFLOW: \"pr-workflow\",\n PR_FREQUENCY: \"pr-frequency\",\n STORY_POINTS: \"story-points\"\n};\n\nexport const workDeepDiveSectionLabels = {\n [workDeepDiveSections.OPS_METRICS]: \"Operational Metrics\",\n [workDeepDiveSections.PROJECT_WORK]: \"Project Work\",\n [workDeepDiveSections.PR_WORKFLOW]: \"PR Workflow\",\n [workDeepDiveSections.PR_FREQUENCY]: \"PR Frequency\",\n [workDeepDiveSections.STORY_POINTS]: \"Story Points\"\n};\n\nexport const pageMetadata: ConstantsInterfaces.AppPagesInterface = {\n [pageIds.START]: { title: \"Dashboard\" },\n [pageIds.WORK_DEEP_DIVE]: {\n path: pageIds.WORK_DEEP_DIVE,\n title: \"Work Deep Dive\",\n children: [\n workDeepDiveSections.OPS_METRICS,\n workDeepDiveSections.PROJECT_WORK,\n workDeepDiveSections.PR_WORKFLOW\n ]\n },\n [workDeepDiveSections.OPS_METRICS]: {\n path: workDeepDiveSections.OPS_METRICS,\n title: workDeepDiveSectionLabels[workDeepDiveSections.OPS_METRICS],\n flag: \"project-explorer-ops-metrics\"\n },\n [workDeepDiveSections.PROJECT_WORK]: {\n path: workDeepDiveSections.PROJECT_WORK,\n title: workDeepDiveSectionLabels[workDeepDiveSections.PROJECT_WORK]\n },\n [workDeepDiveSections.PR_WORKFLOW]: {\n path: workDeepDiveSections.PR_WORKFLOW,\n title: workDeepDiveSectionLabels[workDeepDiveSections.PR_WORKFLOW]\n },\n [pageIds.EPIC_DETAILS]: { title: \"Epic\" },\n [pageIds.REPORTS]: {\n path: \"reports\",\n title: \"1:1 Reports\"\n },\n [pageIds.SETTINGS]: {\n path: \"settings\",\n title: \"Settings\"\n },\n [pageIds.RETROS]: {\n path: \"sprint-retros\",\n title: \"Sprint Retros\"\n },\n [pageIds.LABS]: {\n path: \"labs\",\n title: \"Labs\"\n },\n [pageIds.OVERVIEW]: {\n path: \"overview\",\n title: \"Organization Overview\",\n flag: \"uplevel-web\"\n },\n [pageIds.TEAM_HOME]: {\n path: \"team-home\",\n title: \"Team Home\"\n },\n [pageIds.TEAM_DEEP_DIVE]: {\n path: pageIds.TEAM_DEEP_DIVE,\n title: \"Team Deep Dive\",\n children: [\n teamDeepDiveSections.PEOPLE_HEALTH,\n teamDeepDiveSections.HEALTH_METRICS,\n teamDeepDiveSections.MEETING_INSIGHTS\n ]\n },\n [teamDeepDiveSections.PEOPLE_HEALTH]: {\n path: teamDeepDiveSections.PEOPLE_HEALTH,\n title: teamDeepDiveSectionLabels[teamDeepDiveSections.PEOPLE_HEALTH]\n },\n [teamDeepDiveSections.HEALTH_METRICS]: {\n path: teamDeepDiveSections.HEALTH_METRICS,\n title: teamDeepDiveSectionLabels[teamDeepDiveSections.HEALTH_METRICS]\n },\n [teamDeepDiveSections.MEETING_INSIGHTS]: {\n path: teamDeepDiveSections.MEETING_INSIGHTS,\n title: teamDeepDiveSectionLabels[teamDeepDiveSections.MEETING_INSIGHTS]\n }\n};\n\nexport const workItemCalloutTypes: ConstantsInterfaces.WorkItemCalloutTypesInterface = {\n ADDED_MID_SPRINT: \"ADDED_MID_SPRINT\",\n OPEN_MULTIPLE_SPRINTS: \"OPEN_MULTIPLE_SPRINTS\",\n NULL_STORY_POINTS: \"NULL_STORY_POINTS\"\n};\n\nexport const pullRequestCalloutTypes: ConstantsInterfaces.PullRequestCalloutTypesInterface = {\n STUCK: \"STUCK\",\n STALLED_PULL_REQUEST_NO_COMMENTS: \"STALLED_PULL_REQUEST_NO_COMMENTS\",\n STALLED_PULL_REQUEST_FEW_COMMENTS: \"STALLED_PULL_REQUEST_FEW_COMMENTS\",\n STALLED_PULL_REQUEST_MANY_COMMENTS: \"STALLED_PULL_REQUEST_MANY_COMMENTS\",\n STALLED_PULL_REQUEST_APPROVED_NOT_MERGED:\n \"STALLED_PULL_REQUEST_APPROVED_NOT_MERGED\",\n PULL_REQUEST_MERGED_WITHOUT_APPROVAL: \"PULL_REQUEST_MERGED_WITHOUT_APPROVAL\",\n LOW_COMPLEXITY_HIGH_COMMENTS: \"LOW_COMPLEXITY_HIGH_COMMENTS\"\n};\n\nexport const PullRequestStalledOptions = [\n {\n name: `Stuck: no comments`,\n id: pullRequestCalloutTypes.STALLED_PULL_REQUEST_NO_COMMENTS\n },\n {\n name: `Stuck: few comments`,\n id: pullRequestCalloutTypes.STALLED_PULL_REQUEST_FEW_COMMENTS\n },\n {\n name: `Stuck: many comments`,\n id: pullRequestCalloutTypes.STALLED_PULL_REQUEST_MANY_COMMENTS\n },\n {\n name: `Stuck: approved but not merged`,\n id: pullRequestCalloutTypes.STALLED_PULL_REQUEST_APPROVED_NOT_MERGED\n }\n];\n\nexport const calloutMetadata: ConstantsInterfaces.CalloutMetadataInterface = {\n ADDED_MID_SPRINT: \"This item was added mid-sprint\",\n OPEN_MULTIPLE_SPRINTS: \"Carry-over from previous sprint\",\n STALLED_PULL_REQUEST_NO_COMMENTS: \"This PR may be stuck and has no comments\",\n STALLED_PULL_REQUEST_FEW_COMMENTS:\n \"This PR may be stuck and has few comments\",\n STALLED_PULL_REQUEST_MANY_COMMENTS:\n \"This PR may be stuck and has many comments\",\n STALLED_PULL_REQUEST_APPROVED_NOT_MERGED:\n \"This PR may be stuck, pr was approved but is not yet merged\",\n PULL_REQUEST_MERGED_WITHOUT_APPROVAL: \"Merged without approval\",\n LOW_COMPLEXITY_HIGH_COMMENTS: \"Surprising comment activity\",\n NULL_STORY_POINTS: \"Unestimated story\"\n};\n\nexport const groupByTypes: ConstantsInterfaces.GroupByTypes = {\n EPIC: \"EPIC\",\n FLEX_TEAM: \"FLEX_TEAM\",\n MANAGER: \"MANAGER\",\n NONE: \"NONE\",\n PROJECT: \"PROJECT\",\n REPORT_GROUP: \"REPORT_GROUP\",\n ROLE: \"ROLE\",\n USER: \"USER\"\n};\n\nexport const ownerContributorTypes: ConstantsInterfaces.OwnerContributorTypes = {\n OWNER: \"OWNER\",\n CONTRIBUTOR: \"CONTRIBUTOR\"\n};\n\nexport const ownerContributorAlternativeLabels = {\n [ownerContributorTypes.OWNER]: \"Author\",\n [ownerContributorTypes.CONTRIBUTOR]: \"Reviewer(s)\"\n};\n\nexport const cycleTimeStages: ConstantsInterfaces.CycleTimeStageTypes = {\n DEV: \"DEV\",\n WAITING_FOR_REVIEW: \"WAITING_FOR_REVIEW\",\n REVIEW: \"REVIEW\",\n RELEASE: \"RELEASE\"\n};\n\nexport const cycleTimeStageLabels: {\n [key: string]: string;\n} = {\n DEV: \"Median First Commit to PR\",\n WAITING_FOR_REVIEW: \"Median Waiting for Review\",\n REVIEW: \"Median In Review\",\n RELEASE: \"Median Waiting for Release\"\n};\n\nexport const directionalityTypes: ConstantsInterfaces.DirectionalityTypesInterface = {\n POSITIVE: \"positive\",\n NEGATIVE: \"negative\"\n};\n\nexport const healthScoreTypes: ConstantsInterfaces.SprintHealthScoreTypesInterface = {\n EXCELLENT: \"EXCELLENT\",\n GOOD: \"GOOD\",\n OK: \"OK\",\n CONCERNING: \"CONCERNING\"\n};\n\nexport const alwaysOnScoreRanges = {\n NORMAL: [0, 2],\n ABOVE_NORMAL: [2, 4],\n HIGH: [4, 6]\n};\n\nexport const contextSwitchingScoreTypes = {\n LESS: \"LESS\",\n ABOUT_THE_SAME: \"ABOUT_THE_SAME\",\n MORE: \"MORE\"\n};\n\nexport const contextSwitchingScoreRanges = {\n LESS: [0, 0.33],\n ABOUT_THE_SAME: [0.33, 0.66],\n MORE: [0.66, 1]\n};\n\nexport const alwaysOnScoreTypes = {\n NORMAL: \"NORMAL\",\n ABOVE_NORMAL: \"ABOVE_NORMAL\",\n HIGH: \"HIGH\"\n};\n\nexport const healthScoreRanges: ConstantsInterfaces.SprintHealthScoreRangesInterface = {\n [healthScoreTypes.EXCELLENT]: [85, 101],\n [healthScoreTypes.GOOD]: [70, 85],\n [healthScoreTypes.OK]: [55, 70],\n [healthScoreTypes.CONCERNING]: [0, 55]\n};\n\nexport const PeopleHealthScoreRanges: ConstantsInterfaces.SprintHealthScoreRangesInterface = {\n [healthScoreTypes.EXCELLENT]: [80, 101],\n [healthScoreTypes.GOOD]: [60, 80],\n [healthScoreTypes.OK]: [40, 60],\n [healthScoreTypes.CONCERNING]: [0, 40]\n};\n\nexport const retrosSectionTypes: ConstantsInterfaces.RetrosSectionTypesInterface = {\n WENT_WELL: \"went-well\",\n LOOK_INTO: \"look-into\",\n STAYED_SAME: \"stayed-same\"\n};\n\nexport const SPRINT_HEALTH_CHART_NUM_SPRINTS = 6;\n\nexport const sprintStates: ConstantsInterfaces.SprintStatesInterface = {\n ACTIVE: \"active\",\n CLOSED: \"closed\",\n FUTURE: \"future\"\n};\n\nexport const Signals: ConstantsInterfaces.SignalsInterface = {\n ALWAYS_ON: \"ALWAYS_ON\",\n CONTEXT_SWITCHING: \"CONTEXT_SWITCHING\",\n DEEP_WORK: \"DEEP_WORK\",\n ISSUES_ADDED: \"ISSUES_ADDED\",\n ISSUES_CARRYOVER: \"ISSUES_CARRYOVER\",\n ISSUES_CLOSED: \"ISSUES_CLOSED\",\n ISSUES_WITH_DESCRIPTIONS: \"ISSUES_WITH_DESCRIPTIONS\",\n ISSUES_WITH_STORY_POINTS: \"ISSUES_WITH_STORY_POINTS\",\n JIRA_BUGS: \"JIRA_BUGS\",\n PRS_MERGED_NO_APPROVAL: \"PRS_MERGED_NO_APPROVAL\",\n PRS_NO_REVIEWERS: \"PRS_NO_REVIEWERS\",\n PRS_STUCK: \"PRS_STUCK\",\n SLACK_INTERRUPTIONS: \"SLACK_INTERRUPTIONS\",\n CHAT_INTERRUPTIONS: \"CHAT_INTERRUPTIONS\"\n};\n\nexport const contextSwitchingFactors: ConstantsInterfaces.SignalsInterface = {\n CONTEXT_SWITCHING_TOTAL: \"CONTEXT_SWITCHING_TOTAL\",\n CONTEXT_SWITCHING_TOP_PRIORITY_BUGS: \"CONTEXT_SWITCHING_TOP_PRIORITY_BUGS\",\n CONTEXT_SWITCHING_MEETINGS: \"CONTEXT_SWITCHING_MEETINGS\",\n CONTEXT_SWITCHING_SLACK_CHANNELS: \"CONTEXT_SWITCHING_SLACK_CHANNELS\",\n CONTEXT_SWITCHING_CHAT_CHANNELS: \"CONTEXT_SWITCHING_CHAT_CHANNELS\",\n CONTEXT_SWITCHING_PR_REPOS: \"CONTEXT_SWITCHING_PR_REPOS\",\n CONTEXT_SWITCHING_JIRA_EPICS: \"CONTEXT_SWITCHING_JIRA_EPICS\"\n};\n\nexport const overviewHealthTypes: ConstantsInterfaces.OverviewHealthTypes = {\n AVERAGE_HEALTH: \"averageHealth\",\n PROJECT_HEALTH: \"projectHealth\",\n PEOPLE_HEALTH: \"peopleHealth\"\n};\n\nexport const peopleHealthSignals: Array = [\n Signals.DEEP_WORK,\n Signals.CHAT_INTERRUPTIONS,\n Signals.CONTEXT_SWITCHING,\n Signals.ALWAYS_ON\n];\n\nexport const projectHealthSignals: Array = [\n Signals.ISSUES_ADDED,\n Signals.ISSUES_CARRYOVER,\n Signals.ISSUES_CLOSED,\n Signals.ISSUES_WITH_DESCRIPTIONS,\n Signals.ISSUES_WITH_STORY_POINTS,\n Signals.JIRA_BUGS,\n Signals.PRS_MERGED_NO_APPROVAL,\n Signals.PRS_NO_REVIEWERS,\n Signals.PRS_STUCK\n];\n\nexport const healthFactorsMetadata: ConstantsInterfaces.SprintHealthFactorsMetadata = {\n [overviewHealthTypes.AVERAGE_HEALTH]: { title: \"Average Sprint Health\" },\n [overviewHealthTypes.PROJECT_HEALTH]: { title: \"Project Health\" },\n [overviewHealthTypes.PEOPLE_HEALTH]: { title: \"People Health\" },\n OVERALL_TEAM_HEALTH: { title: \"Overall Team Health\" },\n [Signals.ALWAYS_ON]: { title: \"Always On\" },\n [Signals.CONTEXT_SWITCHING]: { title: \"Context Switching\" },\n [Signals.DEEP_WORK]: { title: \"Deep Work\" },\n [Signals.ISSUES_ADDED]: { title: \"Tickets Added\" },\n [Signals.ISSUES_CARRYOVER]: {\n title: \"Tickets Carried Over\"\n },\n [Signals.ISSUES_CLOSED]: { title: \"Tickets Closed\" },\n [Signals.ISSUES_WITH_DESCRIPTIONS]: {\n title: \"Tickets With Descriptions\"\n },\n [Signals.ISSUES_WITH_STORY_POINTS]: {\n title: \"Tickets With Story Points\"\n },\n [Signals.JIRA_BUGS]: { title: \"Bugs in Sprint\" },\n [Signals.PRS_MERGED_NO_APPROVAL]: {\n title: \"PRs Merged Without Approval\"\n },\n [Signals.PRS_NO_REVIEWERS]: { title: \"PRs Without Reviewers\" },\n [Signals.PRS_STUCK]: { title: \"Stuck PRs\" },\n [Signals.CHAT_INTERRUPTIONS]: { title: \"Chat Interruptions\" },\n MEETING_DISTRIBUTION: {\n title: \"Meeting Distribution\"\n },\n MEETING_LENGTH: { title: \"Meeting Length\" }\n};\n\nexport const contextSwitchingFactorsMetadata: ConstantsInterfaces.SprintHealthFactorsMetadata = {\n [contextSwitchingFactors.CONTEXT_SWITCHING_TOTAL]: {\n title: \"Context Switching\"\n },\n [contextSwitchingFactors.CONTEXT_SWITCHING_TOP_PRIORITY_BUGS]: {\n title: \"Top Priority Bugs\"\n },\n [contextSwitchingFactors.CONTEXT_SWITCHING_MEETINGS]: {\n title: \"Meetings with 2+ teams\"\n },\n [contextSwitchingFactors.CONTEXT_SWITCHING_CHAT_CHANNELS]: {\n title: \"Chat Channels with Interruptions\"\n },\n [contextSwitchingFactors.CONTEXT_SWITCHING_PR_REPOS]: { title: \"PR Repos\" },\n [contextSwitchingFactors.CONTEXT_SWITCHING_JIRA_EPICS]: {\n title: \"Jira Epics\"\n }\n};\n\nexport const signalTypes: ConstantsInterfaces.SignalTypes = {\n HEALTHY: \"healthy\",\n UNHEALTHY: \"unhealthy\"\n};\n\nexport const annotationStatusTypes: ConstantsInterfaces.AnnotationStatusTypesInterface = {\n CELEBRATE: \"CELEBRATE\",\n THUMBS_UP: \"THUMBS_UP\",\n QUESTION: \"QUESTION\",\n DISAPPOINTED: \"DISAPPOINTED\",\n ANGRY: \"ANGRY\",\n COMMENT: \"COMMENT\"\n};\n\nexport const orderedAnnotationStatusTypes: Array = [\n annotationStatusTypes.CELEBRATE,\n annotationStatusTypes.THUMBS_UP,\n annotationStatusTypes.DISAPPOINTED,\n annotationStatusTypes.ANGRY,\n annotationStatusTypes.QUESTION\n];\n\nexport const StatusIconMap = {\n [annotationStatusTypes.CELEBRATE]: \"party-horn\",\n [annotationStatusTypes.THUMBS_UP]: \"thumbs-up\",\n [annotationStatusTypes.QUESTION]: \"question\",\n [annotationStatusTypes.DISAPPOINTED]: \"disappointed\",\n [annotationStatusTypes.ANGRY]: \"angry\",\n [annotationStatusTypes.COMMENT]: \"comment\"\n};\n\nexport const positiveSignals = [\n annotationStatusTypes.CELEBRATE,\n annotationStatusTypes.THUMBS_UP\n];\n\nexport const negativeSignals = [\n annotationStatusTypes.ANGRY,\n annotationStatusTypes.DISAPPOINTED\n];\n\nexport const neutralSignals = [\n annotationStatusTypes.COMMENT,\n annotationStatusTypes.QUESTION\n];\n\nexport const SUPPORT_EMAIL_ADDRESS = \"support@uplevelteam.com\";\n\nexport const workItemsUrlParamKeys: ConstantsInterfaces.UrlParamKeysInterface = {\n ALL_USERS: \"allUsers\",\n CALLOUTS: \"callouts\",\n END_DATE: \"endDate\",\n GROUP_BY: \"groupBy\",\n OWNER_CONTRIBUTOR: \"ownerContributor\",\n PAGE: \"page\",\n PROJECT_IDS: \"projectIds\",\n SHOW_RELATED: \"showRelatedItems\",\n SORT: \"sort\",\n SPRINT_ID: \"sprintId\",\n SPRINT_WORK_OTHER: \"otherSprintItems\",\n SPRINT_WORK_TYPES: \"typesOfWork\",\n START_DATE: \"startDate\",\n STATUS: \"status\",\n USERS: \"users\",\n WORK_ITEM_TYPES: \"workItemTypes\",\n REPOSITORIES: \"repositories\"\n};\n\nexport const querystringParamsKeys: ConstantsInterfaces.UrlParamKeysInterface = {\n ...workItemsUrlParamKeys,\n BOARD_ID: \"boardId\",\n GROUPS_LIST: \"groupsList\",\n GROUP_DETAILS: \"groupDetails\",\n TIMERANGE_ID: \"timerangeId\",\n TEAM_ID: \"teamId\",\n TEAM_LEAD_ID: \"teamLeadId\",\n SELECTED_USER: \"selectedUser\",\n VISIBLE_REPOSITORIES: \"visibleRepositories\"\n};\n\nexport const urlParamKeys: ConstantsInterfaces.UrlParamKeysInterface = {\n ...querystringParamsKeys,\n BOARD: \"board\",\n REPORT_GROUPS: \"reportGroups\",\n EPIC_ID: \"epicId\",\n ROLES: \"roles\",\n // the current team\n TEAM: \"team\",\n // teams being filtered\n TEAMS: \"teams\",\n TEAM_LEAD: \"teamLead\",\n TENANT_ID: \"tenantId\",\n TIMERANGE: \"timerange\"\n};\n\nexport const urlArrayParams: Array = [\n urlParamKeys.CALLOUTS,\n urlParamKeys.CUSTOM_GROUPS,\n urlParamKeys.OWNER_CONTRIBUTOR,\n urlParamKeys.PROJECT_IDS,\n urlParamKeys.ROLES,\n urlParamKeys.SPRINT_WORK_OTHER,\n urlParamKeys.SPRINT_WORK_TYPES,\n urlParamKeys.STATUS,\n urlParamKeys.TEAMS,\n urlParamKeys.USERS,\n urlParamKeys.WORK_ITEM_TYPES,\n urlParamKeys.REPOSITORIES,\n urlParamKeys.VISIBLE_REPOSITORIES\n];\n\nexport const urlBooleanParams: Array = [urlParamKeys.SHOW_RELATED];\n\nexport const urlUuidParams: Array = [\n urlParamKeys.BOARD_ID,\n urlParamKeys.PROJECT_IDS,\n urlParamKeys.SPRINT_ID,\n urlParamKeys.TEAM_ID,\n urlParamKeys.TEAMS\n];\n\nexport const urlObjectParams: Array = [\n urlParamKeys.GROUP_DETAILS,\n urlParamKeys.GROUPS_LIST\n];\n\nexport const urlUserSettingsParams: { [key: string]: string } = {\n [urlParamKeys.GROUP_BY]: \"defaultJiraGroupBy\"\n};\n\n// params that could affect more than just the work-items, mostly the params set\n// from the global nav -- teams, zoomed in team lead, timerange/sprint related\n// values\nexport const urlGlobalParams: Array = [\n urlParamKeys.BOARD_ID,\n urlParamKeys.END_DATE,\n urlParamKeys.SPRINT_ID,\n urlParamKeys.START_DATE,\n urlParamKeys.TEAM_ID,\n urlParamKeys.TEAM_LEAD_ID,\n urlParamKeys.TIMERANGE_ID\n];\n\nexport const SOURCES = {\n CALENDAR: \"CALENDAR\",\n REPOSITORIES: \"REPOSITORIES\",\n JIRA: \"JIRA\",\n MESSAGING: \"MESSAGING\"\n};\n\nexport const SOURCES_DESCRIPTION_MAP = {\n [SOURCES.CALENDAR]: {\n displayText: \"Calendar\",\n icon: \"calendar\"\n },\n [SOURCES.REPOSITORIES]: {\n displayText: \"Repositories\",\n icon: \"code-merge\"\n },\n [SOURCES.MESSAGING]: {\n displayText: \"Messaging\",\n icon: \"comments-alt\"\n },\n [SOURCES.JIRA]: {\n displayText: \"Jira\",\n icon: \"jira\"\n }\n};\n\nexport const urlParamsBaseDefaultValues = {\n allUsers: [],\n callouts: [],\n reportGroups: [],\n groupBy: groupByTypes.EPIC,\n groupsList: { page: 0 },\n groupDetails: { page: 0, sort: [] },\n otherSprintItems: [],\n ownerContributor: [],\n projectIds: [],\n repositories: [],\n roles: [],\n showRelatedItems: false,\n sprintId: null,\n status: [],\n teams: [],\n typesOfWork: [],\n users: [],\n workItemTypes: [],\n selectedUser: null,\n visibleRepositories: []\n};\n\nexport const urlParamsSprintDefaultValues = {\n ...urlParamsBaseDefaultValues,\n typesOfWork: [\n sprintMetadataWorkTypes.SPRINT_WORK,\n sprintMetadataWorkTypes.PULL_REQUESTS_NOT_IN_SPRINT\n ]\n};\n\nexport const urlParamsKanbanDefaultValues = {\n ...urlParamsBaseDefaultValues,\n ownerContributor: [ownerContributorTypes.OWNER]\n};\n\nexport const authProviders: { [key: string]: string } = {\n OKTA: \"okta\",\n AUTH0: \"auth0\"\n};\n\nexport const urlParamsValuesLabels = {\n [groupByTypes.EPIC]: \"Epic\",\n [groupByTypes.FLEX_TEAM]: \"Flex Team\",\n [groupByTypes.NONE]: \"None\",\n [groupByTypes.MANAGER]: \"Manager\",\n [groupByTypes.PROJECT]: \"Project\",\n [groupByTypes.REPORT_GROUP]: \"Report Group\",\n [groupByTypes.ROLE]: \"Role\",\n [groupByTypes.USER]: \"Person\",\n [ownerContributorTypes.CONTRIBUTOR]: \"Contributor(s)\",\n [ownerContributorTypes.OWNER]: \"Owner\",\n [pullRequestCalloutTypes.LOW_COMPLEXITY_HIGH_COMMENTS]:\n \"Low complexity & highly discussed\",\n [pullRequestCalloutTypes.PULL_REQUEST_MERGED_WITHOUT_APPROVAL]:\n \"Merged without approval\",\n [pullRequestCalloutTypes.STUCK]: \"Stuck\",\n [workItemCalloutTypes.ADDED_MID_SPRINT]: \"Added mid-sprint\",\n [workItemCalloutTypes.OPEN_MULTIPLE_SPRINTS]: \"Carry-over\",\n [workItemCalloutTypes.NULL_STORY_POINTS]: \"Un-estimated work\",\n [sprintMetadataWorkTypes.NOT_ATTACHED_TO_SPRINT]: \"Other activity by my team\",\n [sprintMetadataWorkTypes.PULL_REQUESTS_NOT_IN_SPRINT]:\n reservedEpicsMetadata[reservedEpics.UNLINKED_PRS].title,\n [sprintMetadataWorkTypes.REMOVED_FROM_SPRINT]:\n \"Items removed from the sprint\",\n [sprintMetadataWorkTypes.SPRINT_WORK]: \"Sprint work\",\n [sprintMetadataWorkTypes.COMPLETED_OUTSIDE_SPRINT]:\n \"Items completed outside of the sprint\",\n [sprintOptions.OTHER_TEAMS.id]: sprintOptions.OTHER_TEAMS.label,\n [sprintOptions.UNASSIGNED.id]: sprintOptions.UNASSIGNED.label,\n [workItemsUrlParamKeys.SHOW_RELATED]: \"Show related items\",\n [workMetadataActivityTypes.BUG]: \"Bug\",\n [workMetadataActivityTypes.ISSUE]: \"Issue\",\n [workMetadataActivityTypes.PR]: \"PR\",\n [workMetadataActivityTypes.SUB_TASK]: \"Subtask\",\n [workMetadataStatusTypes.DONE]: \"Done\",\n [workMetadataStatusTypes.IN_PROGRESS]: \"In progress\",\n [workMetadataStatusTypes.OPEN]: \"To-do\"\n};\n\nexport const prComplexityLevels = {\n NOT_COMPLEX_TO_REVIEW: \"Low\",\n COMPLEX_TO_REVIEW: \"High\"\n};\n\n// *************************\n// CHART\n// *************************\nexport const chartToolTipConfig = {\n useHTML: true,\n enabled: true,\n backgroundColor: \"transparent\",\n shadow: false,\n borderWidth: 0,\n borderRadius: 0,\n outside: true\n};\n\nexport const iconStarRogue =\n \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUiIGhlaWdodD0iMTUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8IS0tISBGb250IEF3ZXNvbWUgUHJvIDYuMy4wIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlIChDb21tZXJjaWFsIExpY2Vuc2UpIENvcHlyaWdodCAyMDIzIEZvbnRpY29ucywgSW5jLiAtLT4KIDxnIGNsYXNzPSJsYXllciI+CiAgPHRpdGxlPkxheWVyIDE8L3RpdGxlPgogIDxwYXRoIGQ9Im03LjQ1LDAuNTNsMi4zNyw0LjQ4bDQuOTgsMC44NmwtMy41MywzLjYzbDAuNzIsNWwtNC41NSwtMi4yM2wtNC41MywyLjIzbDAuNzEsLTVsLTMuNTIsLTMuNjNsNC45OCwtMC44NmwyLjM2LC00LjQ4bDAuMDEsMHoiIGZpbGw9IiNmZmUxMTkiIGlkPSJzdmdfMSIvPgogPC9nPgo8L3N2Zz4=\";\nexport const iconPlusMagneto =\n \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8IS0tISBGb250IEF3ZXNvbWUgUHJvIDYuMy4wIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlIChDb21tZXJjaWFsIExpY2Vuc2UpIENvcHlyaWdodCAyMDIzIEZvbnRpY29ucywgSW5jLiAtLT4KIDxnIGNsYXNzPSJsYXllciI+CiAgPHRpdGxlPkxheWVyIDE8L3RpdGxlPgogIDxwYXRoIGQ9Im0wLjAxLDMuOTdsMy45NSwwbDAsLTMuOTZsNC4wNiwwbDAsMy45NmwzLjk2LDBsMCw0LjA2bC0zLjk2LDBsMCwzLjk2bC00LjA2LDBsMCwtMy45NmwtMy45NSwwbDAsLTQuMDZ6IiBmaWxsPSIjZTZiZWZmIiBpZD0ic3ZnXzMiLz4KIDwvZz4KPC9zdmc+\";\nexport const iconCrossProfessorX =\n \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8IS0tISBGb250IEF3ZXNvbWUgUHJvIDYuMy4wIGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlIChDb21tZXJjaWFsIExpY2Vuc2UpIENvcHlyaWdodCAyMDIzIEZvbnRpY29ucywgSW5jLiAtLT4KIDxnIGNsYXNzPSJsYXllciI+CiAgPHRpdGxlPkxheWVyIDE8L3RpdGxlPgogIDxwYXRoIGQ9Im0wLjA2LDRsMy45NSwwbDAsLTMuOTZsNC4wNiwwbDAsMy45NmwzLjk2LDBsMCw0LjA2bC0zLjk2LDBsMCwzLjk2bC00LjA2LDBsMCwtMy45NmwtMy45NSwwbDAsLTQuMDZ6IiBmaWxsPSIjODA4MDAwIiBpZD0ic3ZnXzMiIHRyYW5zZm9ybT0icm90YXRlKDQ1IDYuMDQwNjggNi4wMzQwNykiLz4KIDwvZz4KPC9zdmc+\";\n\nexport const customizationSettingsKeys: { [key: string]: FeatureTypes } = {\n TICKETS_ADDED_MID_SPRINT: \"ticketsAddedMidsprint\",\n TICKETS_REMOVED_MID_SPRINT: \"ticketsRemovedMidsprint\",\n TICKETS_NOT_COMPLETED: \"ticketsNotCompleted\",\n TICKETS_CLOSED: \"ticketsClosed\",\n TICKETS_CARRIED_OVER: \"ticketsCarriedOver\",\n JIRA_EPICS: \"jiraEpics\",\n SUBTASKS: \"subtasks\",\n TICKETS_DESCRIBED: \"ticketsDescribed\",\n STORY_POINTS: \"storyPoints\",\n BUGS_IN_SPRINT: \"bugsInSprint\",\n TOP_PRIORITY_BUGS: \"topPriorityBugs\",\n MEETINGS_WITH_MANY_TEAMS: \"meetingsWithManyTeams\",\n PR_REPOS: \"prRepos\",\n PRS_MERGED_NO_APPROVAL: \"prsMergedNoApproval\",\n PRS_MERGED_NO_REVIEWERS: \"prsMergedNoReviewers\",\n STUCK_PRS: \"stuckPrs\",\n CHAT_CHANNELS_INTERRUPTED: \"chatChannelsInterrupted\"\n};\n\nexport const sprintCustomizationSettingsKeys: Array = [\n customizationSettingsKeys.TICKETS_ADDED_MID_SPRINT,\n customizationSettingsKeys.TICKETS_ADDED_MID_SPRINT,\n customizationSettingsKeys.TICKETS_REMOVED_MID_SPRINT,\n customizationSettingsKeys.TICKETS_NOT_COMPLETED,\n customizationSettingsKeys.TICKETS_CLOSED,\n customizationSettingsKeys.TICKETS_CARRIED_OVER\n];\n\nexport const orderedRoles = [\n \"Dev\",\n \"Senior Dev\",\n \"Contractor\",\n \"Customer Engagement\",\n \"Design\",\n \"Front-line Manager\",\n \"Leadership\",\n \"Other\",\n \"Product Acceptance\",\n \"Product/Program\",\n \"QA\",\n \"Researcher\",\n \"Sales\",\n \"Science\",\n \"Support Dev\",\n \"Test Dev\"\n] as const;\n\nexport const roleTypes = orderedRoles.reduce(\n (acc, current) => ({\n ...acc,\n [snakeCase(current).toUpperCase()]: current\n }),\n {} as { [key: string]: Roles }\n);\n\nexport const managerRoles = [\n roleTypes.FRONT_LINE_MANAGER,\n roleTypes.LEADERSHIP\n];\n\nexport const teamAvatarIcons = [\n \"alicorn\",\n \"bat\",\n \"cat\",\n \"cat-space\",\n \"cow\",\n \"crow\",\n \"deer\",\n \"deer-rudolph\",\n \"dog\",\n \"dove\",\n \"dragon\",\n \"duck\",\n \"elephant\",\n \"fish\",\n \"frog\",\n \"ghost\",\n \"hippo\",\n \"honey-badger\",\n \"horse\",\n \"horse-head\",\n \"kiwi\",\n \"monkey\",\n \"narwhal\",\n \"otter\",\n \"pegasus\",\n \"pig\",\n \"rabbit\",\n \"rabbit-fast\",\n \"ram\",\n \"robot\",\n \"sheep\",\n \"skull\",\n \"skull-cow\",\n \"skull-crossbones\",\n \"snake\",\n \"snowman\",\n \"spider\",\n \"squirrel\",\n \"turtle\",\n \"unicorn\",\n \"whale\"\n] as const;\n\n// *************************\n// START METRICS CORRALLING WIP\n// *************************\n// trying to have one comprehensive place where all of the metrics live\nexport const metrics: MetricsInterface = {\n ALWAYS_ON: \"ALWAYS_ON\",\n CHAT_INTERRUPTIONS: \"CHAT_INTERRUPTIONS\",\n CONTEXT_SWITCHING: \"CONTEXT_SWITCHING\",\n // CONTEXT_SWITCHING_CHAT_CHANNELS: \"CONTEXT_SWITCHING_CHAT_CHANNELS\",\n // CONTEXT_SWITCHING_JIRA_EPICS: \"CONTEXT_SWITCHING_JIRA_EPICS\",\n // CONTEXT_SWITCHING_MEETINGS: \"CONTEXT_SWITCHING_MEETINGS\",\n // CONTEXT_SWITCHING_PR_REPOS: \"CONTEXT_SWITCHING_PR_REPOS\",\n // CONTEXT_SWITCHING_TOP_PRIORITY_BUGS: \"CONTEXT_SWITCHING_TOP_PRIORITY_BUGS\",\n // CONTEXT_SWITCHING_TOTAL: \"CONTEXT_SWITCHING_TOTAL\",\n DEEP_WORK: \"DEEP_WORK\",\n ISSUES_ADDED: \"ISSUES_ADDED\",\n ISSUES_CARRYOVER: \"ISSUES_CARRYOVER\",\n ISSUES_WITH_DESCRIPTIONS: \"ISSUES_WITH_DESCRIPTIONS\",\n ISSUES_WITH_STORY_POINTS: \"ISSUES_WITH_STORY_POINTS\",\n MEETING_DISTRIBUTION: \"MEETING_DISTRIBUTION\",\n MEETING_LENGTH: \"MEETING_LENGTH\",\n OVERALL_TEAM_HEALTH: \"OVERALL_TEAM_HEALTH\",\n PRS_MERGED_NO_APPROVAL: \"PRS_MERGED_NO_APPROVAL\",\n PRS_NO_REVIEWERS: \"PRS_NO_REVIEWERS\",\n PRS_STUCK: \"PRS_STUCK\",\n // these 5 are being added\n BUG_ALLOCATION: \"BUG_ALLOCATION\",\n COMPLETION_RATE: \"COMPLETION_RATE\",\n PR_COMPLEXITY: \"PR_COMPLEXITY\",\n PR_CYCLE_TIME: \"PR_CYCLE_TIME\",\n RELEASE_FREQUENCY: \"RELEASE_FREQUENCY\",\n SPRINT_COMPLETION_RATE: \"SPRINT_COMPLETION_RATE\",\n // these 3 are being deprecated/moved\n ISSUES_CLOSED: \"ISSUES_CLOSED\",\n JIRA_BUGS: \"JIRA_BUGS\",\n PR_FREQUENCY: \"PR_FREQUENCY\"\n};\n\nexport const peopleHealthMetrics: Array = [\n metrics.DEEP_WORK,\n metrics.CHAT_INTERRUPTIONS,\n metrics.CONTEXT_SWITCHING,\n // TODO: should the context switching sub metrics go in here??\n metrics.ALWAYS_ON\n];\n\nexport const sprintProjectHealthMetrics: Array = [\n metrics.ISSUES_ADDED,\n metrics.ISSUES_CARRYOVER,\n metrics.ISSUES_CLOSED,\n metrics.ISSUES_WITH_DESCRIPTIONS,\n metrics.ISSUES_WITH_STORY_POINTS,\n metrics.JIRA_BUGS,\n metrics.PRS_MERGED_NO_APPROVAL,\n metrics.PRS_NO_REVIEWERS,\n metrics.PRS_STUCK\n];\n\nexport const kanbanProjectHealthMetrics: Array = [\n metrics.ISSUES_CLOSED,\n metrics.ISSUES_WITH_DESCRIPTIONS,\n metrics.ISSUES_WITH_STORY_POINTS,\n metrics.JIRA_BUGS,\n metrics.PRS_MERGED_NO_APPROVAL,\n metrics.PRS_NO_REVIEWERS,\n metrics.PRS_STUCK\n];\n\n// *************************\n// END METRICS CORALLING WIP\n// *************************\n","export const momentUnitTypes = [\"DAYS\", \"MONTHS\", \"WEEKS\"].reduce(\n (result, key) => {\n result[key] = key.toLowerCase();\n return result;\n },\n {}\n);\n","import moment from \"moment\";\nimport { timerangeTypes } from \"../constants/constants\";\nimport { TimerangeMetadataInterface } from \"../interfaces/constants\";\nimport { BoardInterface } from \"../interfaces/sprint-metadata\";\nimport { getTimestampForDate } from \"./date\";\n\nexport const getSprintTimerangesForBoard = (\n board: BoardInterface\n): Array => {\n return board.sprints.map(sprint => {\n return {\n boardId: board.boardId,\n displayName: sprint.sprintName,\n id: sprint.sprintId,\n end: getTimestampForDate(\n moment.utc(sprint.completeAt || new Date().setMilliseconds(0))\n ),\n start: getTimestampForDate(moment.utc(sprint.startAt)),\n timerangeType: timerangeTypes.SPRINTS,\n state: sprint.state\n };\n });\n};\n","import moment from \"moment\";\n\nimport { momentUnitTypes } from \"../constants/date\";\nimport { timerangeIds, timerangeTypes } from \"../constants/constants\";\nimport { getSprintTimerangesForBoard } from \"./timeranges\";\n\n/**\n * get ISO timestamp for date\n * @param {Object} date\n */\nexport const getTimestampForDate = date => {\n return date.toISOString();\n};\n\nexport const getTimeDifference = ({ base, comparator, unit }) => {\n return moment(comparator).diff(moment(base), unit);\n};\n\nexport const createTimestamp = time => moment(time).toISOString();\n\nexport const createTimestampWithOffset = time => moment(time).toISOString(true);\n\nexport const formatTimestamp = ({\n format = \"ddd. MMM. Do h:mm A\",\n timestamp\n}) => {\n return moment(timestamp, moment.ISO_8601).format(format);\n};\n\nexport const getDateWeekBefore = date => {\n return moment(date)\n .subtract(7, \"days\")\n .format();\n};\n\nexport const getCurrentWeekTimerange = date => {\n return {\n start: getTimestampForDate(moment(date).startOf(momentUnitTypes.WEEKS)),\n end: getTimestampForDate(moment(date).endOf(momentUnitTypes.WEEKS))\n };\n};\n\nexport const getPreviousWeekTimerange = date => {\n return {\n start: getTimestampForDate(\n moment(date)\n .startOf(momentUnitTypes.WEEKS)\n .subtract(1, momentUnitTypes.WEEKS)\n ),\n end: getTimestampForDate(\n moment(date)\n .endOf(momentUnitTypes.WEEKS)\n .subtract(1, momentUnitTypes.WEEKS)\n )\n };\n};\n\nexport const getPreviousNumDaysTimerange = (days, date) => {\n return {\n start: getTimestampForDate(\n moment(date)\n .startOf(momentUnitTypes.DAYS)\n .subtract(days, momentUnitTypes.DAYS)\n ),\n end: getTimestampForDate(\n moment(date)\n .endOf(momentUnitTypes.DAYS)\n .subtract(1, momentUnitTypes.DAYS)\n )\n };\n};\n\nconst TIMERANGES_TO_DISPLAY = 6;\n\nexport const getChartTimerangesForBoardAndTimerange = (timerange, board) => {\n let timeranges = [];\n if (!!board && timerange.timerangeType === timerangeTypes.SPRINTS) {\n timeranges = getSprintTimerangesForBoard(board).filter(\n t => t.start <= timerange.start\n );\n timeranges.splice(TIMERANGES_TO_DISPLAY);\n }\n const timerangeSorter = (t1, t2) => t1.start.localeCompare(t2.start);\n const baselineDate = !!timeranges.length\n ? moment(timeranges.sort(timerangeSorter)[0].start).subtract(\n 1,\n momentUnitTypes.DAYS\n )\n : moment(timerange.end).add(1, momentUnitTypes.DAYS);\n const timerangesToAdd = TIMERANGES_TO_DISPLAY - timeranges.length;\n for (let i = 0; i < timerangesToAdd; i++) {\n // If the timerangeType is sprints but we don't have enough to show, add extra\n // timeranges of 2 week intervals occuring before the earliest sprint start date.\n // If the timerangeType is not sprints, create 6 intervals of 2 week days using the\n // timerange end date as the baseline.\n timeranges.push({\n start: moment(baselineDate)\n .subtract(2 + 2 * i, momentUnitTypes.WEEKS)\n .toISOString(),\n end: moment(baselineDate)\n .subtract(2 * i, momentUnitTypes.WEEKS)\n .toISOString()\n });\n }\n\n return timeranges.sort(timerangeSorter);\n};\n\nexport const getDisplayTextForPreviousTimerange = (\n timerange,\n timerangeMetadata\n) => {\n // adding a 1 here because display time difference is zero-based\n const timeDifferenceInDays =\n getTimeDifference({\n base: timerange.start,\n comparator: timerange.end,\n unit: momentUnitTypes.DAYS\n }) + 1;\n if (timerange.timerangeType === timerangeTypes.SPRINTS) {\n return \"Last Sprint\";\n } else if (timerange.id === timerangeIds.YESTERDAY) {\n return \"Previous Day\";\n } else if (timerange.id === timerangeIds.THIS_WEEK) {\n return timerangeMetadata[timerangeIds.LAST_WEEK].displayName;\n } else if (timerange.id === timerangeIds.LAST_WEEK) {\n return \"Previous Week\";\n } else if (\n timerange.id === timerangeIds.PREVIOUS_14_DAYS ||\n timerange.id === timerangeIds.PREVIOUS_30_DAYS ||\n timerange.id === timerangeIds.PREVIOUS_90_DAYS\n ) {\n return timerangeMetadata[timerange.id].displayName;\n } else {\n // \"custom\" | \"days\"\n return `Previous ${\n timeDifferenceInDays === 1\n ? \"Day\"\n : timeDifferenceInDays === 7\n ? \"Week\"\n : `${timeDifferenceInDays} Days`\n }`;\n }\n};\n","import { isMobile } from \"react-device-detect\";\n\n// constants\nimport { actionTypes } from \"../constants/actionTypes\";\nimport {\n timerangeIds,\n timerangeTypes,\n timerangeTypesMetadata\n} from \"../constants/constants\";\nimport {\n getCurrentWeekTimerange,\n getPreviousNumDaysTimerange,\n getPreviousWeekTimerange\n} from \"../utils/date\";\n\nconst namedTimeranges = {\n [timerangeIds.YESTERDAY]: {\n ...timerangeTypesMetadata[timerangeTypes.DAYS],\n ...getPreviousNumDaysTimerange(1),\n displayName: \"Yesterday\",\n id: timerangeIds.YESTERDAY\n },\n // this is a fake timerange meant only as a placeholder until the actual\n // timerange is set so that the ui can be unlocked.\n [timerangeIds.TODAY]: {\n ...timerangeTypesMetadata[timerangeTypes.DAYS],\n ...getPreviousNumDaysTimerange(),\n displayName: \"Today\",\n id: timerangeIds.TODAY\n },\n [timerangeIds.LAST_WEEK]: {\n ...timerangeTypesMetadata[timerangeTypes.WEEKS],\n ...getPreviousWeekTimerange(),\n displayName: \"Last Week\",\n id: timerangeIds.LAST_WEEK\n },\n [timerangeIds.THIS_WEEK]: {\n ...timerangeTypesMetadata[timerangeTypes.WEEKS],\n ...getCurrentWeekTimerange(),\n displayName: \"This Week\",\n id: timerangeIds.THIS_WEEK\n },\n [timerangeIds.PREVIOUS_14_DAYS]: {\n ...timerangeTypesMetadata[timerangeTypes.DAYS],\n ...getPreviousNumDaysTimerange(14),\n displayName: \"Previous 14 Days\",\n id: timerangeIds.PREVIOUS_14_DAYS\n },\n [timerangeIds.PREVIOUS_30_DAYS]: {\n ...timerangeTypesMetadata[timerangeTypes.DAYS],\n ...getPreviousNumDaysTimerange(30),\n displayName: \"Previous 30 Days\",\n id: timerangeIds.PREVIOUS_30_DAYS\n },\n [timerangeIds.PREVIOUS_90_DAYS]: {\n ...timerangeTypesMetadata[timerangeTypes.DAYS],\n ...getPreviousNumDaysTimerange(90),\n displayName: \"Previous 90 Days\",\n id: timerangeIds.PREVIOUS_90_DAYS\n }\n};\n\n/**\n * reducer for session related state actions\n */\nexport default (\n state = {\n deviceType: isMobile ? \"mobile\" : \"desktop\",\n referrer: document.referrer || window.location.href,\n username: \"unauthenticated-user\",\n namedTimeranges,\n organization: { parentsOfActiveTeam: [] }\n },\n action = {}\n) => {\n switch (action.type) {\n case actionTypes.STORE_SESSION_PARAMS:\n return {\n ...state,\n ...action.payload\n };\n case actionTypes.STORE_ORGANIZATION:\n return {\n ...state,\n organization: {\n ...state.organization,\n ...action.payload.organization\n }\n };\n default:\n return state;\n }\n};\n","import { combineReducers } from \"redux\";\n\nimport auth from \"./authReducer\";\nimport flags from \"./flagsReducer\";\nimport session from \"./sessionReducer\";\nimport user from \"./userReducer\";\n\nexport default combineReducers({\n auth,\n flags,\n session,\n user\n});\n","import { actionTypes } from \"../constants/actionTypes\";\n\n/**\n * reducer for chart related state actions\n */\nexport default (state = null, action = {}) => {\n switch (action.type) {\n case actionTypes.STORE_FLAGS:\n return state\n ? {\n ...state,\n ...action.payload.flags\n }\n : action.payload.flags;\n default:\n return state;\n }\n};\n","import { actionTypes } from \"../constants/actionTypes\";\n\n/**\n * reducer for user related state actions\n */\nexport default (state = {}, action = {}) => {\n switch (action.type) {\n case actionTypes.STORE_USER:\n return {\n ...state,\n ...action.payload.user\n };\n default:\n return state;\n }\n};\n","// note: env variables from the docker container MUST begin with REACT_APP_ in order\n// to be picked up here\nconst config = {\n FARS_URL: process.env.REACT_APP_FARS_URL || \"https://fart.uplevelteam.com\",\n BLUE_URL:\n process.env.REACT_APP_BLUE_SERVICE_URL ||\n \"https://staging.blue.uplevelteam.com\",\n LAUNCH_DARKLY_CLIENT_ID:\n process.env.REACT_APP_LAUNCH_DARKLY_CLIENT_ID || \"5d2d1807ff7d4306f6437cac\",\n HOTJAR_ID: process.env.REACT_APP_HOTJAR_ID,\n HEAP_ID: process.env.REACT_APP_HEAP_ID || 1370320208,\n SENTRY_DSN:\n process.env.SENTRY_DSN ||\n \"https://0dc2fa4719ef46fcac6bd0602d5259d8@o4504006232768512.ingest.sentry.io/4504006238142464\",\n ORG_DASHBOARD_URL:\n process.env.REACT_APP_ORG_DASHBOARD_URL ||\n \"https://staging.web-frontend.uplevelteam.com\"\n};\nexport default config;\n","import { useCallback } from \"react\";\n\n// constants\nimport { authProviders } from \"../constants/constants\";\n\n// hooks\nimport { useOktaAuth } from \"@okta/okta-react\";\nimport { useAuth0 } from \"@auth0/auth0-react\";\nimport { useSelector } from \"react-redux\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\nexport const useAuthProvider = (): {\n getAccessToken: () => Promise;\n getUser: () => Promise<{ [key: string]: string }>;\n getUserGivenName: () => Promise;\n getIsAuthenticated: () => Promise;\n isAuth0: boolean;\n} => {\n const okta = useOktaAuth();\n const auth0 = useAuth0();\n const authProvider = useSelector(\n (state: AppStateInterface) => state.auth.authParams.authProvider\n );\n const isAuth0 = authProvider === authProviders.AUTH0;\n\n const getIsAuthenticated = useCallback(() => {\n return (isAuth0\n ? Promise.resolve(auth0?.isAuthenticated)\n : okta?.oktaAuth.isAuthenticated()\n ).then((response: boolean) => response);\n }, [isAuth0, okta, auth0]);\n\n const getAccessToken = useCallback(async () => {\n return isAuth0\n ? await auth0?.getAccessTokenSilently()\n : await okta?.oktaAuth.getAccessToken();\n }, [isAuth0, okta, auth0]);\n\n const getUser = useCallback(async () => {\n return isAuth0 ? auth0?.user : await okta?.oktaAuth.getUser();\n }, [isAuth0, okta, auth0]);\n\n const getUserGivenName = useCallback(async () => {\n const user = await getUser();\n return user.given_name || user.name;\n }, [getUser]);\n\n return {\n getAccessToken,\n getUser,\n getUserGivenName,\n getIsAuthenticated,\n isAuth0\n };\n};\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// styled components\nconst StyledContainer = styled.div`\n font-family: ${props => props.theme.fonts.primary.name};\n text-align: center;\n`;\nconst StyledMaxWidthContainer = styled.div`\n margin: 0 auto;\n max-width: 40rem;\n`;\nconst StyledHeader = styled.header`\n font-family: ${props => props.theme.fonts.header.name};\n font-size: 10rem;\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n`;\nconst StyledBody = styled.div<{ hasHeader: boolean }>`\n font-size: ${props =>\n props.hasHeader\n ? props.theme.fonts.primary.sizes.sm\n : props.theme.fonts.primary.sizes.md};\n font-weight: ${props =>\n props.hasHeader\n ? props.theme.fonts.primary.weights.regular\n : props.theme.fonts.primary.weights.bold};\n`;\n\n// typescript props\ntype Props = {\n body: React.ReactNode;\n className?: string;\n header?: React.ReactNode;\n testId?: string;\n};\n\nconst EmptyState = ({ body, className, header, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-empty-state`;\n if (!body && !header) {\n return null;\n }\n\n return (\n \n \n {!!header && {header}}\n {body}\n \n \n );\n};\n\nexport default EmptyState;\n","export default __webpack_public_path__ + \"static/media/spinner.5ce2bcfa.svg\";","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\nimport spinner from \"../../images/spinner.svg\";\n\nconst StyledSpinner = styled.div``;\n\nconst Spinner = ({ testId, ...otherProps }) => {\n if (!testId) {\n return null;\n }\n\n // from https://codepen.io/aurer/pen/jEGbA\n return (\n \n \"spinner\"\n \n );\n};\n\nSpinner.propTypes = {\n testId: PropTypes.string.isRequired\n};\nexport default Spinner;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// styled components\nconst Container = styled.div<{ transition: \"fade-in\" }>`\n @keyframes fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n animation: ${props => `${props.transition} 1s linear`};\n`;\n\n// typescript props\ntype Props = {\n children: React.ReactNode;\n className?: string;\n testId?: string;\n transition?: \"fade-in\";\n};\n\nconst TransitionWrapper = ({\n children,\n className,\n testId = \"testId\",\n transition = \"fade-in\"\n}: Props) => {\n const thisTestId = `${testId}-transition-wrapper`;\n return (\n \n {children}\n \n );\n};\n\nexport default TransitionWrapper;\n","import { isUndefined } from \"lodash\";\nimport React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport Spinner from \"../Spinner/Spinner\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\n\n// styled components\nconst Container = styled.div`\n width: 100%;\n`;\nconst SpinnerWrapper = styled.div`\n align-items: center;\n display: flex;\n flex-flow: column nowrap;\n justify-content: center;\n min-height: 40rem;\n width: 100%;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n content: React.ReactNode;\n isNoDataState?: boolean;\n isSpinningState?: boolean;\n noDataContent?: React.ReactNode | null;\n testId?: string;\n};\n\nconst LoadingStates = ({\n className,\n content,\n isNoDataState = false,\n isSpinningState = false,\n noDataContent,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-loading-states`;\n\n let displayContent;\n if (isSpinningState) {\n displayContent = (\n \n \n \n );\n } else if (isNoDataState) {\n displayContent = (\n \n {isUndefined(noDataContent) ? (\n \n ) : (\n noDataContent\n )}\n \n );\n } else {\n displayContent = (\n {content}\n );\n }\n\n return (\n \n \n {displayContent}\n \n \n );\n};\n\nexport default LoadingStates;\n","export default __webpack_public_path__ + \"static/media/bug.333ba588.svg\";","export default __webpack_public_path__ + \"static/media/exclamation-triangle.3177652a.svg\";","export default __webpack_public_path__ + \"static/media/heart-break_wolverine.d230cf0f.svg\";","export default __webpack_public_path__ + \"static/media/issue.eed9098e.svg\";","export default __webpack_public_path__ + \"static/media/pr.0356e24c.svg\";","export default __webpack_public_path__ + \"static/media/pr-activity-chevron-approved.cb06831a.svg\";","export default __webpack_public_path__ + \"static/media/pr-activity-chevron-commented.ca61f530.svg\";","export default __webpack_public_path__ + \"static/media/pr-activity-chevron-update.740fef8e.svg\";","export default __webpack_public_path__ + \"static/media/Party Popper - Wolverine.3ceb0873.svg\";","export default __webpack_public_path__ + \"static/media/subtask.0c6c6833.svg\";","export default __webpack_public_path__ + \"static/media/Party Popper - Aurora.22bf1a41.svg\";","export default __webpack_public_path__ + \"static/media/heart-break_aurora.6b903e26.svg\";","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { IconDefinition, IconName } from \"@fortawesome/fontawesome-svg-core\";\n\nimport {\n faSlack as slack,\n faJira as jira\n} from \"@fortawesome/free-brands-svg-icons\";\n\nimport {\n faBookmark as bookmarkSaved,\n faCalendar as calendar,\n faCaretDown as triangleDown,\n faCaretLeft as triangleLeft,\n faCaretRight as triangleRight,\n faCaretUp as triangleUp,\n faCheck as check,\n faEdit as edit,\n faExclamationTriangle as warning,\n faHeadphones as headphones,\n faHome as house,\n faPlus as plus,\n faUsers as team,\n faUsersMedical as teamPlus,\n faCheckCircle as circleCheck,\n faArrowRight as lineArrowRight,\n faQuestion as question,\n faCog as cog,\n faUsers as users,\n faSitemap as sitemap,\n faStar as star,\n faAlicorn as alicorn,\n faBadgerHoney as honeyBadger,\n faBat as bat,\n faCat as cat,\n faCatSpace as catSpace,\n faCow as cow,\n faCrow as crow,\n faDeer as deer,\n faDeerRudolph as deerRudolph,\n faDog as dog,\n faDove as dove,\n faDragon as dragon,\n faDuck as duck,\n faElephant as elephant,\n faFish as fish,\n faFrog as frog,\n faGhost as ghost,\n faHippo as hippo,\n faHorse as horse,\n faHorseHead as horseHead,\n faKiwiBird as kiwi,\n faMonkey as monkey,\n faNarwhal as narwhal,\n faOtter as otter,\n faPegasus as pegasus,\n faPig as pig,\n faRabbit as rabbit,\n faRabbitFast as rabbitFast,\n faRam as ram,\n faRobot as robot,\n faSheep as sheep,\n faSkull as skull,\n faSkullCow as skullCow,\n faSkullCrossbones as skullCrossbones,\n faSnake as snake,\n faSnowman as snowman,\n faSpider as spider,\n faSquirrel as squirrel,\n faTurtle as turtle,\n faUnicorn as unicorn,\n faWhale as whale,\n faUserAlien as alien,\n faUserAstronaut as astronaut,\n faUserSecret as spy,\n faUserNinja as ninja,\n faUserCowboy as cowboy,\n faHeadVr as vr,\n faUserNurse as nurse,\n faUserMd as medicalWorker,\n faUserHardHat as builder,\n faEllipsisH as ellipsisHorizontal,\n faRandom as shuffle,\n faFlask as beaker,\n faLockAlt as lock,\n faExpandArrows as expandArrows,\n faCompressArrowsAlt as compressArrows\n} from \"@fortawesome/pro-solid-svg-icons\";\nimport {\n faTimes as close,\n faExclamationTriangle as warningOutlineOnly,\n faPaperPlane as paperAirplane,\n faComment as comment,\n faQuestionCircle as questionCircle,\n faUsersCog as usersCog,\n faArrowTrendDown as arrowTrendDown,\n faArrowTrendUp as arrowTrendUp\n} from \"@fortawesome/pro-light-svg-icons\";\n\nimport {\n faArrowLeft as lineArrowLeft,\n faBookmark as bookmarkUnsaved,\n faChevronDown as arrowDown,\n faChevronLeft as arrowLeft,\n faChevronRight as arrowRight,\n faChevronUp as arrowUp,\n faComments as chat,\n faCrosshairs as crosshairs,\n faExternalLinkAlt as externalLink,\n faInfoCircle as info,\n faSlidersH as sliders,\n faThumbsUp as thumbsUp,\n faAngry as angry,\n faEye as eye,\n faStar as starOutline,\n faRulerTriangle as rulerTriangle,\n faBook as book,\n faCodeMerge as codeMerge,\n faCommentsAlt as commentsAlt,\n faTimes as closeSolid\n} from \"@fortawesome/pro-regular-svg-icons\";\n\nimport {\n faSort as unsorted,\n faSortDown as sortedDesc,\n faSortUp as sortedAsc\n} from \"@fortawesome/pro-duotone-svg-icons\";\n\nimport bug from \"../../images/bug.svg\";\nimport exclamationTriangle from \"../../images/exclamation-triangle.svg\";\nimport disappointed from \"../../images/heart-break_wolverine.svg\";\nimport issue from \"../../images/issue.svg\";\nimport pr from \"../../images/pr.svg\";\nimport prActivityChevronApproved from \"../../images/pr-activity-chevron-approved.svg\";\nimport prActivityChevronCommented from \"../../images/pr-activity-chevron-commented.svg\";\nimport prActivityChevronUpdate from \"../../images/pr-activity-chevron-update.svg\";\nimport partyHorn from \"../../images/Party Popper - Wolverine.svg\";\nimport subtask from \"../../images/subtask.svg\";\nimport partyHornAurora from \"../../images/Party Popper - Aurora.svg\";\nimport disappointedAurora from \"../../images/heart-break_aurora.svg\";\nimport { pick } from \"lodash\";\nimport { teamAvatarIcons } from \"../../constants/constants\";\n\n// styled components\nconst StyledIcon = styled.span`\n color: ${props => props.color || props.theme.colors.icon};\n`;\nconst StyledIconImage = styled.img`\n display: inline-block;\n`;\n\n// typescript props\ntype FaIconsProps = {\n [key: string]: IconDefinition;\n};\ntype CustomIconsProps = {\n [key: string]: string;\n};\ntype Props = {\n className?: string;\n color?: string;\n icon: IconName | string;\n testId?: string;\n};\n\nexport const FA_ICONS: FaIconsProps = {\n \"arrow-down\": arrowDown,\n \"arrow-trend-down\": arrowTrendDown,\n \"arrow-left\": arrowLeft,\n \"arrow-right\": arrowRight,\n \"arrow-up\": arrowUp,\n \"arrow-trend-up\": arrowTrendUp,\n \"bookmark-saved\": bookmarkSaved,\n \"bookmark-unsaved\": bookmarkUnsaved,\n \"external-link\": externalLink,\n \"logo-slack\": slack,\n \"paper-airplane\": paperAirplane,\n \"question-circle\": questionCircle,\n \"users-cog\": usersCog,\n \"sorted-asc\": sortedAsc,\n \"sorted-desc\": sortedDesc,\n \"team-plus\": teamPlus,\n \"thumbs-up\": thumbsUp,\n \"triangle-down\": triangleDown,\n \"triangle-left\": triangleLeft,\n \"triangle-right\": triangleRight,\n \"triangle-up\": triangleUp,\n \"warning-outline-only\": warningOutlineOnly,\n \"circle-check\": circleCheck,\n \"line-arrow-left\": lineArrowLeft,\n \"line-arrow-right\": lineArrowRight,\n \"cat-space\": catSpace,\n \"honey-badger\": honeyBadger,\n \"deer-rudolph\": deerRudolph,\n \"horse-head\": horseHead,\n \"rabbit-fast\": rabbitFast,\n \"skull-cow\": skullCow,\n \"skull-crossbones\": skullCrossbones,\n \"medical-worker\": medicalWorker,\n \"ellipsis-horizontal\": ellipsisHorizontal,\n \"ruler-triangle\": rulerTriangle,\n \"code-merge\": codeMerge,\n \"comments-alt\": commentsAlt,\n \"close-solid\": closeSolid,\n \"expand-arrows\": expandArrows,\n \"compress-arrows\": compressArrows,\n alicorn,\n bat,\n cat,\n cow,\n crow,\n deer,\n dog,\n dove,\n dragon,\n duck,\n elephant,\n fish,\n frog,\n ghost,\n hippo,\n horse,\n kiwi,\n monkey,\n narwhal,\n otter,\n pegasus,\n pig,\n rabbit,\n ram,\n robot,\n sheep,\n skull,\n snake,\n snowman,\n spider,\n squirrel,\n turtle,\n unicorn,\n whale,\n question,\n comment,\n calendar,\n chat,\n check,\n close,\n crosshairs,\n edit,\n headphones,\n house,\n info,\n plus,\n sliders,\n angry,\n team,\n unsorted,\n warning,\n cog,\n eye,\n users,\n sitemap,\n star,\n starOutline,\n alien,\n astronaut,\n spy,\n ninja,\n cowboy,\n vr,\n nurse,\n builder,\n shuffle,\n book,\n jira,\n beaker,\n lock\n};\n\nexport const CUSTOM_ICONS: CustomIconsProps = {\n \"warning-outlined\": exclamationTriangle,\n bug,\n issue,\n pr,\n \"pr-activity-chevron-approved\": prActivityChevronApproved,\n \"pr-activity-chevron-commented\": prActivityChevronCommented,\n \"pr-activity-chevron-update\": prActivityChevronUpdate,\n subtask,\n \"party-horn\": partyHorn,\n \"party-horn-aurora\": partyHornAurora,\n disappointed,\n \"disappointed-aurora\": disappointedAurora\n};\n\nexport const TEAM_ICONS: FaIconsProps = pick(FA_ICONS, teamAvatarIcons);\n\nexport const PERSON_ICONS: FaIconsProps = pick(FA_ICONS, [\n \"alien\",\n \"astronaut\",\n \"builder\",\n \"cowboy\",\n \"medical-worker\",\n \"ninja\",\n \"nurse\",\n \"spy\",\n \"vr\"\n]);\n\nconst Icon = ({ color, className, icon, testId = \"testId\" }: Props) => {\n const customIconKeys = Object.keys(CUSTOM_ICONS);\n\n const iconKeys = [...Object.keys(FA_ICONS), ...customIconKeys];\n if (!iconKeys.includes(icon)) {\n return null;\n }\n\n return customIconKeys.includes(icon) ? (\n \n ) : (\n \n \n \n );\n};\n\nexport default Icon;\n","import axios, { AxiosError, AxiosResponse } from \"axios\";\nimport config from \"../env-config\";\nimport { captureException } from \"@sentry/react\";\nimport { ZodSchema } from \"zod\";\n\nexport const errorHandler = (e: AxiosError): Promise => {\n captureException(e);\n return Promise.reject(e);\n};\n\nexport const validationHandler = (\n schema: ZodSchema,\n responseToTest: AxiosResponse\n): Promise => {\n try {\n return Promise.resolve(schema.parse(responseToTest.data) as T);\n } catch (error) {\n captureException(error);\n if (process.env.NODE_ENV === \"development\") {\n console.error(error);\n }\n return Promise.reject(error);\n }\n};\n\n// blue endpoints\nconst api = axios.create({\n baseURL: `${config.BLUE_URL}/api`,\n headers: {\n \"Content-type\": \"application/json\"\n }\n});\napi.interceptors.response.use(r => r, errorHandler);\n\n// java-layer endpoints\nexport const legacyApi = axios.create({\n baseURL: `/api`,\n headers: {\n \"Content-type\": \"application/json\"\n }\n});\nlegacyApi.interceptors.response.use(r => r, errorHandler);\n\n// fars endpoints\nexport const farsApi = axios.create({\n baseURL: `${config.FARS_URL}/api`,\n headers: {\n \"Content-type\": \"application/json\"\n }\n});\nfarsApi.interceptors.response.use(r => r, errorHandler);\n\nexport default api;\n","import { pageIds } from \"../constants/constants\";\n\n// todo: update this when we land on a url scheme\nexport const parsePageIdFromPathname = (pathname: string): string => {\n const urlParams = pathname.substring(1).split(\"/\");\n if (\n !!urlParams[2] &&\n !!urlParams[1] &&\n urlParams[0] === pageIds.WORK_DEEP_DIVE\n ) {\n return pageIds.EPIC_DETAILS;\n } else if (!urlParams[0]) {\n return pageIds.START;\n }\n return urlParams[0];\n};\n\nexport const getPageTitle = (pageTitle?: string): string => {\n const baseTitle = \"Uplevel\";\n if (pageTitle) {\n return `${pageTitle} - ${baseTitle}`;\n }\n return baseTitle;\n};\n","import { AxiosResponse } from \"axios\";\nimport api from \"./api\";\n\n// constants\nimport { pageMetadata, pageIds } from \"../constants/constants\";\n\n// interfaces\nimport { JiraProjectDto } from \"../interfaces/project-tracking-models\";\nimport { Repository } from \"../interfaces/repository\";\nimport { UserSettingsInterface } from \"../interfaces/user-settings\";\n\n// utils\nimport { getPageTitle } from \"./router\";\n\n// typescript props\ntype BaseProps = {\n accessToken: string;\n tenantId: number;\n params?: {\n defaultTeamId: string;\n defaultJiraGroupBy: string;\n };\n};\n\nexport const getSettingsPageTitle = (): string => {\n return getPageTitle(pageMetadata[pageIds.SETTINGS].title);\n};\n\nexport const requestUserSettings = async ({\n accessToken,\n tenantId\n}: BaseProps): Promise => {\n const response: AxiosResponse = await api.get<\n UserSettingsInterface\n >(`/${tenantId}/user-settings`, {\n headers: {\n Authorization: `Bearer ${accessToken}`\n }\n });\n return response.data;\n};\n\nexport const updateUserSettings = async ({\n accessToken,\n params,\n tenantId\n}: BaseProps): Promise => {\n const response: AxiosResponse = await api.put<\n UserSettingsInterface\n >(`/${tenantId}/user-settings`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const requestEnabledRepositories = async ({\n accessToken,\n tenantId\n}: BaseProps): Promise> => {\n const response: AxiosResponse> = await api.get<\n Array\n >(`/${tenantId}/enabled-repositories`, {\n headers: {\n Authorization: `Bearer ${accessToken}`\n }\n });\n return response.data;\n};\n\nexport const requestEnabledJiraProjectsData = async ({\n accessToken,\n tenantId\n}: BaseProps): Promise> => {\n const response: AxiosResponse> = await api.get<\n Array\n >(`/${tenantId}/enabled-jira-projects`, {\n headers: {\n Authorization: `Bearer ${accessToken}`\n }\n });\n return response.data;\n};\n","import { defaults } from \"lodash\";\n\n// constants\nimport { groupByTypes } from \"../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useQuery } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport { requestUserSettings } from \"../utils/settings\";\n\nexport const useUserSettings = () => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const userHasUplevelAccount = useSelector(\n (state: AppStateInterface) => state.session.userHasUplevelAccount\n );\n\n return useQuery(\n \"user-settings\",\n () =>\n requestUserSettings({\n accessToken,\n tenantId\n }).then(userSettings =>\n // supply defaults after fetching user's settings\n defaults(userSettings, {\n defaultJiraGroupBy: groupByTypes.EPIC\n })\n ),\n {\n staleTime: Infinity,\n enabled: !!accessToken && !!tenantId && !!userHasUplevelAccount\n }\n );\n};\n","import crypto from \"crypto\";\nimport { partition, toPairs, kebabCase, set } from \"lodash\";\n\n// utils\nimport api from \"./api\";\nimport { workMetadataActivityTypes } from \"../constants/constants\";\n\n/**\n * create encrypted user key\n * @param {String} email\n */\nexport const createUserKey = email =>\n crypto\n .createHash(\"sha256\")\n .update(email.toLowerCase())\n .digest(\"hex\");\n\nexport const createFlagUserMetadata = user => ({\n tenant: kebabCase(user.tenantAlias.toLowerCase()),\n enabled_roles: user.enabled_roles || []\n});\n\nexport const createAnalyticsUserMetadata = user => {\n let metadata = {\n tenant: kebabCase(user.tenantAlias.toLowerCase())\n };\n (user.enabled_roles || []).forEach(role => set(metadata, role, true));\n return metadata;\n};\n\n/**\n * request authenticated user from level9\n * @param {Object} params\n */\nexport const requestUser = async ({ accessToken, tenantId } = {}) => {\n const response = await api.get(`/${tenantId}/user`, {\n headers: {\n Authorization: `Bearer ${accessToken}`\n }\n });\n return response.data;\n};\n\n/**\n * request user's team\n * @param {Object} params\n */\n// todo: remove this method once the dashboard container is removed\nexport const requestUserInfo = async ({ accessToken, tenantId } = {}) => {\n const response = await api.get(`/${tenantId}/user`, {\n headers: {\n Authorization: `Bearer ${accessToken}`\n }\n });\n return response.data;\n};\n\nexport const requestUserTileData = async ({\n accessToken,\n tenantId,\n params\n}) => {\n const response = await api.post(`/${tenantId}/user-tiles`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const requestUserAllocationsData = async ({\n accessToken,\n tenantId,\n params\n}) => {\n const response = await api.post(`/${tenantId}/user-allocations`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const getEmailsForUsers = users => users.map(u => u.email);\n\nexport const partitionSignals = signals => {\n return partition(\n toPairs(signals)\n .filter(signal => signal[0] !== workMetadataActivityTypes.PR)\n .map(signal => {\n return {\n key: signal[0],\n value: signal[1]\n };\n }),\n signalGroup =>\n // signalGroup.key === workMetadataActivityTypes.PR ||\n // FIXME: TS complaining about using the constants declared on alwaysOnRiskTypes, figure out why\n (signalGroup.key === \"DEEP_WORK\" &&\n signalGroup.value[0].status === \"LOW\") ||\n (signalGroup.key !== \"DEEP_WORK\" &&\n signalGroup.value[0].status === \"HIGH\") ||\n signalGroup.value[0].status === \"MORE\" ||\n signalGroup.value[0].status === \"ABOVE_NORMAL\"\n );\n};\n\nexport const requestOrgChart = async ({ accessToken, tenantId, params }) => {\n const response = await api.post(`/${tenantId}/org-chart/v2`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const requestFullOrganization = async ({ accessToken, tenantId }) => {\n const response = await api.get(`/${tenantId}/users/by-tenant-id`, {\n headers: {\n Authorization: `Bearer ${accessToken}`\n }\n });\n return response.data;\n};\n","// hooks\nimport { useSelector } from \"react-redux\";\nimport { useQuery, UseQueryResult } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport { requestFullOrganization } from \"../utils/user\";\nimport {\n UserReportWithMetadataInterface,\n UserReportWithUplevelRole\n} from \"../interfaces/user\";\n\nexport const useFullOrganizationData = (): UseQueryResult> => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const userHasUplevelAccount = useSelector(\n (state: AppStateInterface) => state.session.userHasUplevelAccount\n );\n\n // all members of organization\n return useQuery(\n \"full-organization\",\n () =>\n requestFullOrganization({\n accessToken,\n tenantId\n }) as Promise>,\n {\n enabled: !!accessToken && !!tenantId && !!userHasUplevelAccount,\n refetchOnWindowFocus: false\n }\n );\n};\n","import { AxiosResponse } from \"axios\";\nimport api from \"./api\";\nimport { TeamInterface, TeamSettingsInterface } from \"../interfaces/team\";\nimport {\n UserInterface,\n UserReportWithMetadataInterface\n} from \"../interfaces/user\";\nimport { flattenDeep } from \"lodash\";\n\n// typescript props\ntype BaseProps = {\n accessToken: string;\n tenantId: number;\n};\n\ntype RequestProps = BaseProps & {\n params: {\n users: Array;\n };\n};\n\ntype CreateUpdateProps = BaseProps & {\n params: {\n avatarColor: string;\n avatarIcon: string;\n defaultBoardId: string | null;\n defaultProjectId: string | null;\n isOrgChartTeam: boolean;\n teamId: string | null;\n teamMembers: Array<\n UserReportWithMetadataInterface | { email: string; id: null }\n >;\n teamName: string;\n tenantId: number;\n useSprints: boolean;\n };\n};\n\ntype DeleteProps = BaseProps & {\n params: {\n teamId: string;\n };\n};\n\ntype RequestCustomizationProps = BaseProps & {\n params: {\n teamIds: string[];\n };\n};\n\ntype SetCustomizationProps = BaseProps & {\n params: {\n teamSettings: TeamSettingsInterface;\n };\n};\n\nexport const requestTeams = async ({\n accessToken,\n tenantId,\n params\n}: RequestProps): Promise> => {\n const response: AxiosResponse> = await api.post<\n Array\n >(`/${tenantId}/teams/by-user-ids`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const createOrUpdateTeam = async ({\n accessToken,\n tenantId,\n params\n}: CreateUpdateProps): Promise => {\n const response: AxiosResponse = await api.post(\n `/${tenantId}/teams/create-or-update`,\n params,\n {\n headers: { Authorization: `Bearer ${accessToken}` }\n }\n );\n return response.data;\n};\n\nexport const deleteTeam = async ({\n accessToken,\n tenantId,\n params\n}: DeleteProps): Promise => {\n const response = await api.post(`/${tenantId}/teams/delete`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const requestTeamsCustomizations = async ({\n accessToken,\n tenantId,\n params\n}: RequestCustomizationProps): Promise => {\n const response = await api.get(\n `/${tenantId}/teams/customization/${params.teamIds.join(\",\")}`,\n {\n headers: {\n Authorization: `Bearer ${accessToken}`\n }\n }\n );\n return response.data;\n};\n\nexport const updateTeamCustomizations = async ({\n accessToken,\n tenantId,\n params\n}: SetCustomizationProps): Promise => {\n const response = await api.post(\n `/${tenantId}/teams/customization/${params.teamSettings.teamId}`,\n // note: the backend will reject objects that don't match the format of Record>\n // so we have to omit the teamId here\n { ...params.teamSettings, teamId: undefined },\n {\n headers: { Authorization: `Bearer ${accessToken}` }\n }\n );\n return response.data;\n};\n\nexport const getTeamNameFromTeam = (team: TeamInterface) => {\n if (team?.teamName) {\n return team.teamName;\n }\n\n if (team?.isOrgChartTeam) {\n const teamLead = team.teamMembers.find(\n t => t.id === team.orgChartTeamLeadId\n );\n return `${teamLead?.name}’s Team`;\n }\n\n if (!!team?.createdByUser) {\n return `Team created by ${team.createdByUser.name}`;\n }\n};\n\nexport const getFallbackOrgChartTeamFromTeams = (\n teams: Array,\n userIdToMatch?: number | null\n): TeamInterface | undefined =>\n teams?.find(\n (t: TeamInterface) =>\n t.isOrgChartTeam && t.orgChartTeamLeadId === userIdToMatch\n ) || teams?.find((t: TeamInterface) => t.isOrgChartTeam);\n\nexport const getFlattenedTeamMembersTreeForTeam = (\n team?: TeamInterface | null\n): Array =>\n (team?.teamMembers || []).concat(\n flattenDeep(\n team?.teamMembers.map((t: UserReportWithMetadataInterface) => {\n if (t.team) {\n return getFlattenedTeamMembersTreeForTeam(t.team);\n }\n return [];\n })\n )\n );\n\nexport const sortTeam = (\n teamMembers: Array,\n user: UserInterface\n): Array =>\n teamMembers.sort((u1, u2) => {\n // if one of the team members is the active user, they should be first in the list. otherwise sort alphabetically\n if (u1.id === user.id) return -1;\n if (u2.id === user.id) return 1;\n return u1.name.localeCompare(u2.name);\n });\n","import { isEmpty } from \"lodash\";\nimport { useMemo } from \"react\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useQuery } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport { requestTeams } from \"../utils/teams\";\n\ntype KeyProps = {\n type: \"own-teams\" | \"active-users-teams\";\n teamMembersToRequest: Array<{ email: string }>;\n};\nexport const useTeamsData = (options: KeyProps, canRequest = true) => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const teamMembersToRequest = options.teamMembersToRequest;\n const teamMemberEmails = useMemo(\n () =>\n isEmpty(teamMembersToRequest) ||\n !teamMembersToRequest.every(t => !!t.email)\n ? []\n : teamMembersToRequest.map(t => t.email),\n [teamMembersToRequest]\n );\n const params = useMemo(\n () => ({\n accessToken,\n tenantId,\n params: {\n users: teamMemberEmails as Array\n }\n }),\n [accessToken, teamMemberEmails, tenantId]\n );\n\n return useQuery(\n [\"teams\", { ...params, type: options.type }],\n () => requestTeams(params),\n {\n staleTime: Infinity,\n enabled:\n !!accessToken && !!tenantId && !!teamMemberEmails.length && canRequest\n }\n );\n};\n","// constants\nimport { timerangeIds } from \"../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useQuery } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport { requestOrgChart } from \"../utils/user\";\n\nexport const useOrganizationData = (canRequest = true) => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const userHasUplevelAccount = useSelector(\n (state: AppStateInterface) => state.session.userHasUplevelAccount\n );\n const namedTimeranges = useSelector(\n (state: AppStateInterface) => state.session.namedTimeranges\n );\n const { start: startDate, end: endDate } = namedTimeranges[\n timerangeIds.PREVIOUS_14_DAYS\n ];\n\n return useQuery(\n \"org-chart\",\n () =>\n requestOrgChart({\n accessToken,\n tenantId,\n params: {\n startDate,\n endDate,\n users: [], // the backend resource template requires this object to be non null\n tenantId\n }\n }),\n {\n staleTime: Infinity,\n enabled:\n !!accessToken && !!tenantId && !!userHasUplevelAccount && canRequest\n }\n );\n};\n","import { useEffect, useState } from \"react\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useTeamsData } from \"./useTeamsData\";\nimport { useOrganizationData } from \"./useOrganizationData\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\nimport { TeamInterface } from \"../interfaces/team\";\n\n// utils\nimport { getFallbackOrgChartTeamFromTeams } from \"../utils/teams\";\n\nexport const useOwnFallbackOrgChartTeam = () => {\n const [fallbackOrgChartTeam, setFallbackOrgChartTeam] = useState<\n TeamInterface\n >();\n\n // user\n const user = useSelector((state: AppStateInterface) => state.user);\n const userId = user?.id;\n\n // own teams\n const { data: ownOrgChartRootTeam } = useOrganizationData();\n const { data: ownTeams } = useTeamsData(\n {\n type: \"own-teams\",\n teamMembersToRequest: ownOrgChartRootTeam?.teamMembers || [user]\n },\n // wait to fetch teams until we have dependencies lined up\n !!userId\n );\n\n useEffect(() => {\n if (!!ownTeams?.length) {\n const team =\n ownOrgChartRootTeam ||\n getFallbackOrgChartTeamFromTeams(ownTeams, userId);\n setFallbackOrgChartTeam(team);\n }\n }, [ownTeams, userId]);\n\n return fallbackOrgChartTeam;\n};\n","import { AxiosResponse } from \"axios\";\nimport api from \"./api\";\nimport { inRange, isNull, isUndefined, partition, uniq } from \"lodash\";\n\n// constants\nimport { NIL } from \"uuid\";\nimport {\n groupByTypes,\n reservedEpics,\n reservedEpicsMetadata,\n healthScoreRanges,\n sprintStates,\n timerangeTypes\n} from \"../constants/constants\";\n\n// interfaces\nimport {\n BoardInterface,\n ProjectsAndBoardsResponse,\n SprintHealthInterface,\n SprintInterface,\n SprintSuccessInterface\n} from \"../interfaces/sprint-metadata\";\nimport { AnnotationsInterface } from \"../interfaces/annotations\";\nimport { GroupInterface, ProjectInterface } from \"../interfaces/work-items\";\nimport { TeamInterface } from \"../interfaces/team\";\nimport { getSprintTimerangesForBoard } from \"./timeranges\";\nimport { TimerangeMetadataInterface } from \"../interfaces/constants\";\n\n// typescript props\ntype BaseProps = {\n accessToken: string;\n tenantId: number;\n};\n\ntype JiraBoardsProps = BaseProps & {\n params: {\n endDate: string;\n projectIds: Array;\n startDate: string;\n tenantId: number;\n users: Array;\n };\n};\n\ntype SprintHealthProps = BaseProps & {\n params: {\n sprintIds: Array;\n teamId: string | null;\n };\n};\n\ntype SprintSuccessProps = BaseProps & {\n params: {\n sprintId: string;\n teamId: string;\n };\n};\n\nexport const requestSprintMetadata = async ({\n accessToken,\n params,\n tenantId\n}: JiraBoardsProps): Promise> => {\n const response: AxiosResponse> = await api.post<\n Array\n >(`/${tenantId}/project-explorer/sprint-metadata`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const requestProjectsAndBoards = async ({\n accessToken,\n tenantId\n}: BaseProps): Promise => {\n const response: AxiosResponse = await api.get<\n ProjectsAndBoardsResponse\n >(`/${tenantId}/projects-and-boards/get-all`, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const requestSprintHealth = async ({\n accessToken,\n params,\n tenantId\n}: SprintHealthProps): Promise => {\n const response: AxiosResponse = await api.post<\n SprintHealthInterface\n >(`/${tenantId}/project-explorer/sprint-health`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\nexport const requestSprintSuccess = async ({\n accessToken,\n params,\n tenantId\n}: SprintSuccessProps): Promise => {\n const response: AxiosResponse = await api.get<\n SprintSuccessInterface\n >(`/${tenantId}/sprint-success/v1/sprint-id/${params.sprintId}`, {\n headers: {\n Authorization: `Bearer ${accessToken}`\n },\n params: { teamId: params.teamId }\n });\n return response.data;\n};\n\nexport const getDefaultActiveSprint = (sprints?: Array) => {\n if (!sprints?.length) {\n return null;\n }\n return sprints.find(s => s.state === sprintStates.ACTIVE) || sprints[0];\n};\n\nexport const getSprintRangeString = (value: number) => {\n return Object.keys(healthScoreRanges)[\n Object.values(healthScoreRanges).findIndex(r => inRange(value, r[0], r[1]))\n ];\n};\n\nexport const filterSprintHealthFactorsToRange = (\n factors: Array<[string, number | null]>,\n range: Array\n): Array => {\n return factors\n .filter(e => !isNull(e[1]) && inRange(e[1], range[0], range[1]))\n .map(e => e[0]);\n};\n\nexport const filterAnnotationsForGroup = ({\n annotations,\n group,\n groupBy\n}: {\n annotations: Array;\n group: GroupInterface;\n groupBy: string;\n}) => {\n const filteredAnnotations = annotations.filter(a => {\n const selectAttribute =\n groupBy === groupByTypes.PROJECT ? \"projectId\" : \"epicId\";\n return a[selectAttribute] === group.groupId;\n });\n\n // do some extra filtering for magic rows\n if (group.groupId === NIL) {\n const [nilProjectId, uuidProjectId] = partition(\n filteredAnnotations,\n a => a.projectId === NIL\n );\n\n // annotations for unlinked PRS on the epics side and for work not tied to\n // project on the projects side will have nil project ids\n return group.magicRow ===\n reservedEpicsMetadata[reservedEpics.UNLINKED_PRS].magicRowId ||\n // this is hacky but apparently the work not tied to project group doesn't return a magic row id??\n group.groupName.toLowerCase() === \"work not tied to project\"\n ? nilProjectId\n : uuidProjectId;\n }\n\n return filteredAnnotations;\n};\n\nexport const getBoard = ({\n sprintMetadata,\n allBoards,\n boardId,\n team\n}: {\n sprintMetadata?: Array;\n allBoards?: Array;\n boardId?: string | null;\n team?: TeamInterface | null;\n}): BoardInterface | null | undefined => {\n if (!!team && !isUndefined(allBoards)) {\n const needsSprintMetadata = !!team?.useSprints && !team?.defaultBoardId;\n if (\n !needsSprintMetadata ||\n (needsSprintMetadata && !isUndefined(sprintMetadata))\n ) {\n const board =\n allBoards?.find((b: BoardInterface) => b.boardId === boardId) ||\n allBoards?.find(\n (b: BoardInterface) => b.boardId === team?.defaultBoardId\n ) ||\n sprintMetadata?.[0];\n\n if (!!team?.useSprints && !!board) {\n // remove sprints that don't have truthy start dates or have future status\n const filteredSprints = board.sprints.filter(\n (s: SprintInterface) => !!s.startAt && s.state !== sprintStates.FUTURE\n );\n return !!filteredSprints.length\n ? {\n ...board,\n sprints: filteredSprints\n }\n : null;\n }\n return null;\n }\n }\n};\n\nexport const getTeamSprintMetadata = ({\n shouldUseSprints,\n projectsData,\n defaultProjectId,\n defaultBoardId,\n isOrgChartTeam,\n derivedTeamBoard\n}: {\n shouldUseSprints: boolean;\n projectsData: {\n projects: Array;\n boards: Array;\n };\n defaultProjectId?: string;\n defaultBoardId?: string;\n isOrgChartTeam?: boolean;\n derivedTeamBoard?: BoardInterface | null;\n}) => {\n let projects: Array = [];\n let boards: Array = [];\n let board: BoardInterface | null = null;\n let project: ProjectInterface | null = null;\n let sprint: TimerangeMetadataInterface | null = null;\n\n if (shouldUseSprints) {\n const projectIdsWithBoards = uniq(\n projectsData.boards.map((b: BoardInterface) => b.projectId)\n );\n projects = projectsData.projects.filter((p: ProjectInterface) =>\n projectIdsWithBoards.includes(p.projectId)\n );\n boards = projectsData.boards;\n\n if (!!defaultProjectId) {\n const defaultProject = projects.find(\n (p: ProjectInterface) => p.projectId === defaultProjectId\n );\n if (!!defaultProject) {\n project = defaultProject;\n const defaultBoards = boards.filter(\n (b: BoardInterface) => b.projectId === defaultProjectId\n );\n if (!!defaultBoards.length) {\n boards = defaultBoards;\n }\n }\n }\n\n if (!!defaultBoardId || (isOrgChartTeam && !!derivedTeamBoard)) {\n const defaultBoard =\n isOrgChartTeam && !!derivedTeamBoard\n ? derivedTeamBoard\n : boards.find((b: BoardInterface) => b.boardId === defaultBoardId);\n if (!!defaultBoard) {\n board = defaultBoard;\n const defaultProject = projects.find(\n (p: ProjectInterface) => p.projectId === defaultBoard.projectId\n );\n if (!!defaultProject) {\n project = defaultProject;\n }\n const defaultSprint = getDefaultActiveSprint(defaultBoard.sprints);\n if (!!defaultSprint) {\n const sprintTimeranges = getSprintTimerangesForBoard(defaultBoard);\n const defaultSprintTimerange = sprintTimeranges.find(\n t => t.id === defaultSprint.sprintId\n );\n if (!!defaultSprintTimerange) {\n sprint = defaultSprintTimerange;\n }\n }\n }\n }\n }\n return { project, board, sprint, projects, boards };\n};\n\nexport const getIsSprintMode = (\n timerange: TimerangeMetadataInterface\n): boolean => timerange.timerangeType === timerangeTypes.SPRINTS;\n\nexport const getIsActiveSprint = (\n timerange: TimerangeMetadataInterface\n): boolean => timerange.state === sprintStates.ACTIVE;\n","import {\n isArray,\n isEmpty,\n isEqual,\n isNil,\n isNull,\n isUndefined,\n mapValues,\n pick\n} from \"lodash\";\nimport querystring from \"query-string\";\nimport shortUUID, { UUID } from \"short-uuid\";\nimport urlon from \"urlon\";\n\n// constants\nimport {\n groupByTypes,\n namedTimerangeIds,\n pageIds,\n timerangeIds,\n timerangeTypesMetadata,\n urlObjectParams,\n urlParamKeys,\n urlParamsBaseDefaultValues,\n urlParamsKanbanDefaultValues,\n urlParamsSprintDefaultValues,\n urlUserSettingsParams,\n urlUuidParams,\n workItemCalloutTypes,\n workMetadataActivityTypes\n} from \"../constants/constants\";\n\n// interfaces\nimport { TimerangeMetadataInterface } from \"../interfaces/constants\";\nimport { BoardInterface } from \"../interfaces/sprint-metadata\";\nimport { UserReportWithMetadataInterface } from \"../interfaces/user\";\nimport { TeamInterface } from \"../interfaces/team\";\nimport { QuerystringParamsInterface } from \"../interfaces/url-params\";\nimport { WorkItemsRequestParamsInterface } from \"../interfaces/work-items\";\n\n// utils\nimport { getEmailsForUsers } from \"./user\";\nimport { getDefaultActiveSprint, getIsSprintMode } from \"./sprints\";\nimport { getSprintTimerangesForBoard } from \"./timeranges\";\n\nconst uuidTranslator = shortUUID();\n\nexport const arrayifyUrlParam = (value: string) => {\n if (isArray(value)) {\n return value.sort();\n }\n return [value];\n};\n\nexport const getUrlParamsDefaultValues = ({\n pageId,\n timerange\n}: {\n pageId?: string;\n timerange?: TimerangeMetadataInterface;\n}) => {\n const base =\n !!timerange && getIsSprintMode(timerange)\n ? urlParamsSprintDefaultValues\n : urlParamsKanbanDefaultValues;\n return !!pageId && pageId === pageIds.OVERVIEW\n ? {\n ...base,\n groupBy: groupByTypes.ROLE\n }\n : base;\n};\n\nexport const getAllUsers = (activeTeam?: TeamInterface | null) =>\n (activeTeam?.teamMembers\n ? getEmailsForUsers(activeTeam.teamMembers)\n : urlParamsBaseDefaultValues.allUsers\n ).sort();\n\nexport const getBoardId = (board?: BoardInterface | null) =>\n board?.boardId || null;\n\nexport const getCallouts = (parsedQuerystring: any) =>\n arrayifyUrlParam(\n parsedQuerystring.callouts || urlParamsBaseDefaultValues.callouts\n );\n\nexport const getReportGroups = (parsedQuerystring: any) =>\n arrayifyUrlParam(\n parsedQuerystring.reportGroups || urlParamsBaseDefaultValues.reportGroups\n );\n\nexport const getGroupBy = ({\n defaultJiraGroupBy,\n parsedQuerystring,\n pageId\n}: {\n defaultJiraGroupBy?: string;\n parsedQuerystring: any;\n pageId?: string;\n}) =>\n // for overview section, ignore defaultJiraGroupBy from settings, because WDD values won't apply there\n parsedQuerystring.groupBy ||\n (!!pageId && pageId === pageIds.OVERVIEW ? null : defaultJiraGroupBy) ||\n getUrlParamsDefaultValues({ pageId }).groupBy;\n\nexport const getGroupDetails = (parsedQuerystring: any) =>\n parsedQuerystring.groupDetails || urlParamsBaseDefaultValues.groupDetails;\n\nexport const getGroupsList = (parsedQuerystring: any) =>\n parsedQuerystring.groupsList || urlParamsBaseDefaultValues.groupsList;\n\nexport const getOtherSprintItems = (parsedQuerystring: any) =>\n arrayifyUrlParam(\n parsedQuerystring.otherSprintItems ||\n urlParamsBaseDefaultValues.otherSprintItems\n );\n\nexport const getOwnerContributor = (\n parsedQuerystring: any,\n timerange: TimerangeMetadataInterface\n) =>\n arrayifyUrlParam(\n parsedQuerystring.ownerContributor ||\n getUrlParamsDefaultValues({ timerange }).ownerContributor\n );\n\nexport const getProjectIds = (parsedQuerystring: any) =>\n arrayifyUrlParam(\n parsedQuerystring.projectIds || urlParamsBaseDefaultValues.projectIds\n );\n\nexport const getRepositories = (parsedQuerystring: any) =>\n arrayifyUrlParam(\n parsedQuerystring.repositories || urlParamsBaseDefaultValues.repositories\n );\n\nexport const getRoles = (parsedQuerystring: any) =>\n arrayifyUrlParam(parsedQuerystring.roles || urlParamsBaseDefaultValues.roles);\n\nexport const getTeams = (parsedQuerystring: any) =>\n arrayifyUrlParam(parsedQuerystring.teams || urlParamsBaseDefaultValues.teams);\n\nexport const getVisibleRepositories = (parsedQuerystring: any) =>\n arrayifyUrlParam(\n parsedQuerystring.visibleRepositories ||\n urlParamsBaseDefaultValues.visibleRepositories\n );\n\nexport const getQuerystringParamsToSet = ({\n defaultTeam,\n namedTimeranges,\n pageId,\n paramsFromUi,\n parsedQuerystring,\n persistQuerystring,\n timerange,\n userSettings\n}: {\n defaultTeam: TeamInterface | null;\n namedTimeranges: { [key: string]: TimerangeMetadataInterface };\n pageId?: string;\n paramsFromUi: QuerystringParamsInterface;\n parsedQuerystring: any;\n persistQuerystring: Array | boolean;\n timerange: TimerangeMetadataInterface;\n userSettings?: { [key: string]: string };\n}) => {\n // deep clone because we may be deleting some attributes\n let paramsToSet = JSON.parse(\n JSON.stringify(\n !!persistQuerystring\n ? {\n ...(isArray(persistQuerystring) && !isEmpty(persistQuerystring)\n ? pick(parsedQuerystring, persistQuerystring)\n : parsedQuerystring),\n ...paramsFromUi\n }\n : paramsFromUi\n )\n );\n let defaultValues = getUrlParamsDefaultValues({ pageId, timerange });\n\n const paramsFromUiKeys = Object.keys(paramsFromUi);\n // do a merge for page specific attributes since they're objects and not primitives\n if (paramsFromUiKeys.includes(urlParamKeys.GROUPS_LIST)) {\n paramsToSet.groupsList = {\n ...defaultValues.groupsList,\n ...(!!parsedQuerystring.groupsList ? parsedQuerystring.groupslist : {}),\n ...paramsFromUi.groupsList\n };\n }\n if (paramsFromUiKeys.includes(urlParamKeys.GROUP_DETAILS)) {\n paramsToSet.groupDetails = {\n ...defaultValues.groupDetails,\n ...(!!parsedQuerystring.groupDetails\n ? parsedQuerystring.groupDetails\n : {}),\n ...paramsFromUi.groupDetails\n };\n }\n\n // if selected team is current default team, remove from qs\n if (paramsFromUiKeys.includes(urlParamKeys.TEAM)) {\n if (paramsFromUi.team?.teamId === defaultTeam?.teamId) {\n delete paramsToSet.teamId;\n } else {\n // otherwise, we want to add teamid to the querystring\n paramsToSet = {\n ...paramsToSet,\n teamId: paramsFromUi.team?.teamId\n };\n }\n // remove team from update params\n delete paramsToSet.team;\n }\n\n if (\n paramsFromUiKeys.includes(urlParamKeys.TIMERANGE) &&\n !!paramsFromUi.timerange\n ) {\n defaultValues = getUrlParamsDefaultValues({\n pageId,\n timerange: paramsFromUi.timerange\n });\n\n // if this is a static named timerange\n if (Object.values(timerangeIds).includes(paramsFromUi.timerange.id)) {\n const namedTimerange = namedTimeranges[paramsFromUi.timerange.id];\n\n // use the id from the static timerange\n paramsToSet = {\n ...paramsToSet,\n timerangeId: paramsFromUi.timerange.id\n };\n\n // if this is not one of the timeranges with a static start/end or if\n // it's one of the custom ones, add the start/end time from the update\n if (\n isEmpty(namedTimerange) ||\n paramsFromUi.timerange.start !== namedTimerange?.start ||\n paramsFromUi.timerange.end !== namedTimerange?.end\n ) {\n paramsToSet = {\n ...paramsToSet,\n endDate: paramsFromUi.timerange.end,\n startDate: paramsFromUi.timerange.start\n };\n }\n\n // remove the sprint id and board id from the querystring so they doesn't persist\n delete paramsToSet.sprintId;\n delete paramsToSet.boardId;\n } else {\n // if it's a sprint timerange, use both the sprint id and the board id\n paramsToSet = {\n ...paramsToSet,\n sprintId: paramsFromUi.timerange.id,\n boardId: paramsFromUi.timerange.boardId\n };\n // remove any static timerange values from the querystring so they don't persist\n delete paramsToSet.timerangeId;\n delete paramsToSet.endDate;\n delete paramsToSet.startDate;\n }\n\n // remove timerange from update params\n delete paramsToSet.timerange;\n }\n\n Object.entries(paramsToSet).forEach(([key, value]) => {\n if (!isUndefined(userSettings)) {\n const staticDefaultValue =\n defaultValues[key as keyof typeof urlParamsBaseDefaultValues];\n // if the key is one of the ones controlled by usersettings, try to use\n // the user's default as a comparator if available except when the pageid\n // is \"overview\", then the static default value\n const defaultValue = Object.keys(urlUserSettingsParams).includes(key)\n ? (!!pageId && pageId === pageIds.OVERVIEW\n ? null\n : userSettings[urlUserSettingsParams[key] as string]) ||\n staticDefaultValue\n : staticDefaultValue;\n // if the updated value matches the default value, remove it from the querystring\n if (isEqual(defaultValue, value)) {\n delete paramsToSet[key];\n }\n }\n\n // if the updated value is being set to null, remove it from the querystring\n if (isNull(value)) {\n delete paramsToSet[key];\n }\n\n // if we haven't already deleted the key as a default value\n if (Object.keys(paramsToSet).includes(key)) {\n // if the updated value is an object (currently groupsList and\n // groupDetails), stringify it before the whole querystring is stringified\n if (urlObjectParams.includes(key)) {\n paramsToSet[key] = urlon.stringify(value);\n }\n\n // if the key is a uuid property, shorten value before it gets stringified\n if (urlUuidParams.includes(key)) {\n paramsToSet[key] = isArray(value)\n ? value.map(v => uuidTranslator.fromUUID(v))\n : uuidTranslator.fromUUID(value as UUID);\n }\n }\n });\n return paramsToSet;\n};\n\nexport const getShowRelatedItems = (parsedQuerystring: any) =>\n isNil(parsedQuerystring.showRelatedItems)\n ? urlParamsBaseDefaultValues.showRelatedItems\n : parsedQuerystring.showRelatedItems;\n\nexport const getSprintId = (\n timerange: TimerangeMetadataInterface\n): string | null => (getIsSprintMode(timerange) ? timerange.id : null);\n\nexport const getSprintRetrosRequestParamsFromWorkItemsRequestParams = (\n workItemsRequestParams: WorkItemsRequestParamsInterface\n): WorkItemsRequestParamsInterface => {\n const paramsToRetain = pick(workItemsRequestParams, [\n urlParamKeys.ALL_USERS,\n urlParamKeys.END_DATE,\n urlParamKeys.EPIC_ID,\n urlParamKeys.GROUP_BY,\n urlParamKeys.SPRINT_ID,\n urlParamKeys.SPRINT_WORK_OTHER,\n urlParamKeys.START_DATE,\n urlParamKeys.TENANT_ID,\n urlParamKeys.TEAM_ID\n ]);\n const staticDefaults = {\n ...pick(urlParamsSprintDefaultValues, [\n urlParamKeys.CALLOUTS,\n urlParamKeys.OWNER_CONTRIBUTOR,\n urlParamKeys.PROJECT_IDS,\n urlParamKeys.REPOSITORIES,\n urlParamKeys.SHOW_RELATED,\n urlParamKeys.SPRINT_WORK_TYPES,\n urlParamKeys.STATUS,\n urlParamKeys.WORK_ITEM_TYPES,\n urlParamKeys.USERS\n ]),\n [urlParamKeys.PAGE]: urlParamsSprintDefaultValues.groupsList.page,\n [urlParamKeys.SORT]: urlParamsSprintDefaultValues.groupDetails.sort\n };\n return {\n ...staticDefaults,\n ...paramsToRetain\n } as WorkItemsRequestParamsInterface;\n};\n\nexport const getWorkItemsRequestParamsPRWorkflow = (\n workItemsRequestParams: WorkItemsRequestParamsInterface\n): WorkItemsRequestParamsInterface => {\n return {\n ...workItemsRequestParams,\n [urlParamKeys.WORK_ITEM_TYPES]: [workMetadataActivityTypes.PR],\n [urlParamKeys.GROUP_BY]: groupByTypes.NONE,\n [urlParamKeys.SHOW_RELATED]: false,\n [urlParamKeys.SPRINT_WORK_OTHER]: [],\n [urlParamKeys.CALLOUTS]:\n workItemsRequestParams.callouts?.filter(\n c =>\n c !== workItemCalloutTypes.ADDED_MID_SPRINT &&\n c !== workItemCalloutTypes.OPEN_MULTIPLE_SPRINTS\n ) || []\n };\n};\n\nexport const getStatus = (\n parsedQuerystring: any,\n timerange: TimerangeMetadataInterface\n) =>\n arrayifyUrlParam(\n parsedQuerystring.status || getUrlParamsDefaultValues({ timerange }).status\n );\n\nexport const getTeamId = (parsedQuerystring: any) =>\n parsedQuerystring.teamId || null;\n\nexport const getTeamLead = ({\n fullOrganizationData,\n teamLeadId\n}: {\n fullOrganizationData: Array | undefined;\n teamLeadId: number | null;\n}) =>\n !!fullOrganizationData && !!teamLeadId\n ? fullOrganizationData.find(\n (u: UserReportWithMetadataInterface) => u.id === teamLeadId\n ) || null\n : null;\n\nexport const getTeamLeadId = (parsedQuerystring: any) =>\n !!parsedQuerystring.teamLeadId\n ? parseInt(parsedQuerystring.teamLeadId, 10)\n : null;\n\nexport const getTimerange = ({\n allSprintTimeranges,\n board,\n endDate,\n namedTimeranges,\n startDate,\n team,\n timerangeId\n}: {\n allSprintTimeranges: Array;\n board: BoardInterface | null;\n endDate: string | null;\n namedTimeranges: { [key: string]: TimerangeMetadataInterface };\n startDate: string | null;\n team: TeamInterface | null;\n timerangeId: string | null;\n}): TimerangeMetadataInterface => {\n const previous14DaysMetadata = namedTimeranges[timerangeIds.PREVIOUS_14_DAYS];\n const foundSprint = allSprintTimeranges.find(\n (s: TimerangeMetadataInterface) => s.id === timerangeId\n );\n\n // if we can locate the url sprintid in available sprints, use that\n if (!!foundSprint) {\n return foundSprint;\n }\n // if the timerangeid is one of our known non-sprint ids\n else if (!!timerangeId && Object.values(timerangeIds).includes(timerangeId)) {\n const namedTimerange = namedTimeranges[timerangeId];\n // if it's a static timerange, use that\n if (!!namedTimerange) {\n return namedTimerange;\n } else if (!!startDate && !!endDate) {\n return {\n ...timerangeTypesMetadata[timerangeId],\n start: startDate,\n end: endDate\n };\n }\n }\n // line up all dependencies and make sure sprint metadata and projects data\n // and active board hooks are not loading and have data settled\n else if (!!team && !isUndefined(board)) {\n // make sure if a team says it uses sprints to have a board available\n // before trying to activate a sprint rather than trusting it on its\n // throne of lies\n if (\n team.useSprints &&\n // if a board is definitively not available it will return null\n !isNull(board)\n ) {\n const defaultSprint = getDefaultActiveSprint(board.sprints);\n // this is mostly just a belt and suspenders check for typescript\n // because default active sprint takes the first sprint in the array if\n // it can't find active, but just in case there's an empty array of\n // sprints on a board\n if (!!defaultSprint) {\n const sprintTimeranges = getSprintTimerangesForBoard(board);\n const defaultSprintTimerange = sprintTimeranges.find(\n t => t.id === defaultSprint.sprintId\n );\n\n // only do this if the active board does not match the current active timerange, because we've switched boards without affirmatively choosing\n // a new timerange so we need to use the default timerange for the\n // board\n if (!!defaultSprintTimerange) {\n return defaultSprintTimerange;\n }\n }\n } else {\n if (isNull(board)) {\n return previous14DaysMetadata;\n }\n }\n }\n\n // this is a fake timerange meant only as a placeholder until the actual\n // timerange is set so that the ui can be unlocked.\n return namedTimeranges[namedTimerangeIds.TODAY];\n};\n\nexport const getTypesOfWork = (\n parsedQuerystring: any,\n timerange: TimerangeMetadataInterface\n) =>\n arrayifyUrlParam(\n parsedQuerystring.typesOfWork ||\n getUrlParamsDefaultValues({ timerange }).typesOfWork\n );\n\nexport const getUsers = (parsedQuerystring: any) =>\n arrayifyUrlParam(parsedQuerystring.users || urlParamsBaseDefaultValues.users);\n\nexport const getWorkItemTypes = (parsedQuerystring: any) =>\n arrayifyUrlParam(\n parsedQuerystring.workItemTypes || urlParamsBaseDefaultValues.workItemTypes\n );\n\nexport const getSelectedUser = (parsedQuerystring: any) =>\n isNil(parsedQuerystring.selectedUser)\n ? urlParamsBaseDefaultValues.selectedUser\n : parsedQuerystring.selectedUser;\n\nexport const parseQuerystring = (qs: string) => {\n return mapValues(\n querystring.parse(qs, {\n arrayFormat: \"bracket-separator\",\n arrayFormatSeparator: \"|\",\n parseBooleans: true\n }),\n (value, key) => {\n if (!isNull(value) && urlUuidParams.includes(key)) {\n return isArray(value)\n ? (value as Array).map(v => uuidTranslator.toUUID(v))\n : uuidTranslator.toUUID(value as string);\n }\n if (urlObjectParams.includes(key)) {\n return urlon.parse(value);\n }\n return value;\n }\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { isUndefined } from \"lodash\";\n\n// hooks\nimport { useOrganizationData } from \"./useOrganizationData\";\nimport { useLocation } from \"react-router-dom\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\nimport {\n UserInterface,\n UserReportWithMetadataInterface\n} from \"../interfaces/user\";\n\n// utils\nimport { getFlattenedTeamMembersTreeForTeam } from \"../utils/teams\";\nimport { getTeamLeadId, parseQuerystring } from \"../utils/url-params\";\n\nexport const useActiveUser = () => {\n const [activeUser, setActiveUser] = useState<\n UserReportWithMetadataInterface | UserInterface | null\n >(null);\n const user = useSelector((state: AppStateInterface) => state.user);\n // we have to use the raw querystring here because this hook is used by the\n // url params hook and referencing it would set up a circular dependency\n const { search } = useLocation();\n const parsedQuerystring = useMemo(() => parseQuerystring(search), [\n search,\n parseQuerystring\n ]);\n const teamLeadId = getTeamLeadId(parsedQuerystring);\n\n // organization\n const { data: usersOrgChartRootTeam } = useOrganizationData();\n const flattenedUsersOrganization = useMemo(() => {\n if (!!usersOrgChartRootTeam) {\n return getFlattenedTeamMembersTreeForTeam(usersOrgChartRootTeam);\n }\n }, [usersOrgChartRootTeam]);\n const teamLead = useMemo(\n () => flattenedUsersOrganization?.find(t => t.id === teamLeadId),\n [flattenedUsersOrganization, teamLeadId]\n );\n\n useEffect(() => {\n if (!isUndefined(usersOrgChartRootTeam) && !isUndefined(user)) {\n setActiveUser(teamLead || user);\n } else {\n setActiveUser(null);\n }\n }, [usersOrgChartRootTeam, teamLead, user]);\n\n return activeUser;\n};\n","// hooks\nimport { useTeamsData } from \"./useTeamsData\";\nimport { useOwnFallbackOrgChartTeam } from \"./useOwnFallbackOrgChartTeam\";\nimport { useActiveUser } from \"./useActiveUser\";\n\n// interfaces\nimport { UserReportWithMetadataInterface } from \"../interfaces/user\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\nexport const useActiveUsersTeams = () => {\n // user's default and fallback org chart teams\n const user = useSelector((state: AppStateInterface) => state.user);\n const ownFallbackOrgChartTeam = useOwnFallbackOrgChartTeam();\n const activeUser = useActiveUser();\n // if an active user is selected from the global nav, use the team for that user.\n // if the root user is the team lead for the default org chart team,\n // use the default org team. otherwise, just request for the root user.\n const teamMembersToRequest =\n (activeUser as UserReportWithMetadataInterface)?.team?.teamMembers ||\n (ownFallbackOrgChartTeam?.orgChartTeamLeadId === user.id\n ? ownFallbackOrgChartTeam?.teamMembers\n : [user]);\n\n return useTeamsData(\n {\n type: \"active-users-teams\",\n teamMembersToRequest\n },\n // wait to fetch teams until we have dependencies lined up\n !!teamMembersToRequest\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { flattenDeep } from \"lodash\";\n\n// hooks\nimport { useUserSettings } from \"./useUserSettings\";\nimport { useOwnFallbackOrgChartTeam } from \"./useOwnFallbackOrgChartTeam\";\nimport { useActiveUser } from \"./useActiveUser\";\nimport { useActiveUsersTeams } from \"./useActiveUsersTeams\";\n\n// interfaces\nimport { TeamInterface } from \"../interfaces/team\";\nimport { UserReportWithMetadataInterface } from \"../interfaces/user\";\n\nconst getTeamMembersForTeam = (\n team: TeamInterface | null\n): Array =>\n (team?.teamMembers || []).concat(\n flattenDeep(\n team?.teamMembers.map((t: UserReportWithMetadataInterface) => {\n if (t.team) {\n return getTeamMembersForTeam(t.team);\n }\n return [];\n })\n )\n );\n\nexport const useDefaultTeam = () => {\n const [defaultTeam, setDefaultTeam] = useState(null);\n const ownFallbackOrgChartTeam = useOwnFallbackOrgChartTeam();\n const activeUser = useActiveUser();\n const activeUserId = activeUser?.id;\n const orgChartTeam =\n (activeUser as UserReportWithMetadataInterface)?.team ||\n ownFallbackOrgChartTeam;\n const { data: activeUsersTeams } = useActiveUsersTeams();\n const { data: userSettings } = useUserSettings();\n const ownDefaultTeamId = userSettings?.defaultTeamId;\n\n const settingsDefaultTeam: TeamInterface | undefined = useMemo(() => {\n if (!!activeUsersTeams?.length) {\n return activeUsersTeams.find(\n (t: TeamInterface) => t.teamId === ownDefaultTeamId\n );\n }\n }, [activeUsersTeams, ownDefaultTeamId]);\n\n useEffect(() => {\n if (!!activeUserId && !!activeUsersTeams?.length && !!orgChartTeam) {\n // 1. users own settings default team\n // 2. org chart team of the active users (zoomed in or logged in)\n // 3. users own fallback org chart team\n setDefaultTeam(\n settingsDefaultTeam || orgChartTeam || ownFallbackOrgChartTeam\n );\n } else {\n setDefaultTeam(null);\n }\n }, [activeUserId, settingsDefaultTeam, orgChartTeam, activeUsersTeams]);\n\n return defaultTeam;\n};\n","// hooks\nimport { useSelector } from \"react-redux\";\nimport { useQuery } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport { requestProjectsAndBoards } from \"../utils/sprints\";\n\nexport const useProjectsAndBoardsData = (canRequest = true) => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const userHasUplevelAccount = useSelector(\n (state: AppStateInterface) => state.session.userHasUplevelAccount\n );\n\n // all projects and boards\n return useQuery(\n \"projects-and-boards\",\n () =>\n requestProjectsAndBoards({\n accessToken,\n tenantId\n }),\n {\n enabled:\n !!accessToken && !!tenantId && !!userHasUplevelAccount && !!canRequest,\n refetchOnWindowFocus: false\n }\n );\n};\n","import { useMemo } from \"react\";\nimport { useSelector } from \"react-redux\";\n\n// constants\nimport { timerangeIds } from \"../constants/constants\";\n\n// hooks\nimport { useQuery } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport { requestSprintMetadata } from \"../utils/sprints\";\nimport { TeamInterface } from \"../interfaces/team\";\n\ntype KeyProps = {\n type: string;\n team: TeamInterface | null;\n};\nexport const useSprintMetadata = (options: KeyProps, canRequest = true) => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const session = useSelector((state: AppStateInterface) => state.session);\n const previous14DaysMetadata =\n session.namedTimeranges[timerangeIds.PREVIOUS_14_DAYS];\n const team = options.team;\n\n const teamMemberEmails = useMemo(\n () =>\n team?.useSprints && !!team?.teamMembers.length\n ? team.teamMembers.map(t => t.email)\n : [],\n [team]\n );\n\n const params = useMemo(\n () => ({\n accessToken,\n tenantId,\n params: {\n endDate: previous14DaysMetadata.end,\n projectIds: [],\n startDate: previous14DaysMetadata.start,\n tenantId,\n users: teamMemberEmails\n }\n }),\n [accessToken, previous14DaysMetadata, teamMemberEmails, tenantId]\n );\n\n return useQuery(\n [\"sprint-metadata\", { ...params, type: options.type }],\n () => requestSprintMetadata(params),\n {\n enabled:\n !!accessToken &&\n !!tenantId &&\n !!previous14DaysMetadata &&\n !!teamMemberEmails.length &&\n canRequest\n }\n );\n};\n","import { useMemo } from \"react\";\nimport { flattenDeep, isEmpty, isUndefined } from \"lodash\";\n\n// constants\nimport {\n namedTimerangeIds,\n pageIds,\n workDeepDiveSections\n} from \"../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useRouteMatch } from \"react-router\";\nimport { useUserSettings } from \"./useUserSettings\";\nimport { useFullOrganizationData } from \"./useFullOrganizationData\";\nimport { useActiveTeam } from \"./useActiveTeam\";\nimport { useProjectsAndBoardsData } from \"./useProjectsAndBoardsData\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\nimport { BoardInterface } from \"../interfaces/sprint-metadata\";\nimport { UrlParamsInterface } from \"../interfaces/url-params\";\nimport { TimerangeMetadataInterface } from \"../interfaces/constants\";\n\n// utils\nimport {\n getAllUsers,\n getBoardId,\n getCallouts,\n getGroupBy,\n getOwnerContributor,\n getProjectIds,\n getShowRelatedItems,\n getSprintId,\n getOtherSprintItems,\n getStatus,\n getTeamId,\n getTeamLead,\n getTeamLeadId,\n getTypesOfWork,\n getUsers,\n getWorkItemTypes,\n getGroupsList,\n getGroupDetails,\n getTimerange,\n parseQuerystring,\n getSelectedUser,\n getRepositories,\n getVisibleRepositories,\n getRoles,\n getReportGroups,\n getTeams,\n getUrlParamsDefaultValues\n} from \"../utils/url-params\";\nimport { getSprintTimerangesForBoard } from \"../utils/timeranges\";\nimport { useSprintMetadata } from \"./useSprintMetadata\";\nimport { getBoard } from \"../utils/sprints\";\n\nexport const useUrlParamsContextValues = (): UrlParamsInterface => {\n // hooks\n const { search } = window.location;\n const parsedQuerystring = useMemo(() => parseQuerystring(search), [search]);\n const match = useRouteMatch<{\n groupId?: string;\n }>(\n `/${pageIds.WORK_DEEP_DIVE}/${workDeepDiveSections.PROJECT_WORK}/:groupId`\n );\n const groupId = match?.params.groupId;\n const pageMatch = useRouteMatch<{\n pageId: string;\n }>(`/:pageId`);\n const pageId = pageMatch?.params.pageId;\n\n const activeTeam = useActiveTeam();\n const { data: projectsAndBoardsData } = useProjectsAndBoardsData();\n const { data: sprintMetadata } = useSprintMetadata(\n { type: \"active-team\", team: activeTeam },\n !!activeTeam?.useSprints && !activeTeam?.defaultBoardId\n );\n const { data: fullOrganizationData } = useFullOrganizationData();\n const { data: userSettings } = useUserSettings();\n const defaultJiraGroupBy = userSettings?.defaultJiraGroupBy;\n\n // selectors\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const session = useSelector((state: AppStateInterface) => state.session);\n const namedTimeranges = session.namedTimeranges;\n // this is a fake timerange meant only as a placeholder until the actual\n // timerange is set so that the ui can be unlocked.\n const today = namedTimeranges[namedTimerangeIds.TODAY];\n\n // variables\n const allBoards = projectsAndBoardsData?.boards;\n const querystringBoardId = parsedQuerystring.boardId as string | null;\n const activeBoard = useMemo(\n () =>\n getBoard({\n sprintMetadata,\n allBoards,\n boardId: querystringBoardId,\n team: activeTeam\n }),\n [activeTeam, allBoards, querystringBoardId, sprintMetadata]\n );\n const allSprintTimeranges: Array = useMemo(() => {\n return isEmpty(allBoards)\n ? []\n : flattenDeep(\n allBoards.map((b: BoardInterface) => getSprintTimerangesForBoard(b))\n );\n }, [allBoards]);\n\n return useMemo(() => {\n if (!!activeTeam && !isUndefined(activeBoard)) {\n const querystringTimerangeId = (parsedQuerystring.sprintId ||\n parsedQuerystring.timerangeId) as string | null;\n const timerange = getTimerange({\n allSprintTimeranges,\n board: activeBoard,\n endDate: parsedQuerystring.endDate as string | null,\n startDate: parsedQuerystring.startDate as string | null,\n timerangeId: querystringTimerangeId,\n namedTimeranges,\n team: activeTeam\n });\n const timerangeId = timerange.id;\n const endDate = timerange.end;\n const startDate = timerange.start;\n\n const sprintId = getSprintId(timerange);\n\n const allUsers = getAllUsers(activeTeam);\n const team = activeTeam;\n const teamId = getTeamId(activeTeam);\n const teamLeadId = getTeamLeadId(parsedQuerystring);\n const teamLead = getTeamLead({\n fullOrganizationData,\n teamLeadId\n });\n\n const board = activeBoard;\n const boardId = getBoardId(activeBoard);\n\n const groupBy = getGroupBy({\n defaultJiraGroupBy,\n parsedQuerystring,\n pageId\n });\n\n const reportGroups = getReportGroups(parsedQuerystring);\n\n const projectIds = getProjectIds(parsedQuerystring);\n\n const repositories = getRepositories(parsedQuerystring);\n\n const roles = getRoles(parsedQuerystring);\n\n const teams = getTeams(parsedQuerystring);\n\n const visibleRepositories = getVisibleRepositories(parsedQuerystring);\n\n const otherSprintItems = getOtherSprintItems(parsedQuerystring);\n\n const typesOfWork = getTypesOfWork(parsedQuerystring, timerange);\n\n const workItemTypes = getWorkItemTypes(parsedQuerystring);\n\n const callouts = getCallouts(parsedQuerystring);\n\n const ownerContributor = getOwnerContributor(\n parsedQuerystring,\n timerange\n );\n\n const groupsList = getGroupsList(parsedQuerystring);\n\n const groupDetails = getGroupDetails(parsedQuerystring);\n\n const showRelatedItems = getShowRelatedItems(parsedQuerystring);\n\n const status = getStatus(parsedQuerystring, timerange);\n\n const selectedUser = getSelectedUser(parsedQuerystring);\n\n return {\n allUsers,\n board,\n boardId,\n callouts,\n endDate,\n groupBy,\n groupDetails,\n groupsList,\n otherSprintItems,\n ownerContributor,\n projectIds,\n reportGroups,\n roles,\n showRelatedItems,\n sprintId,\n startDate,\n status,\n team,\n teamId,\n teamLeadId,\n teamLead,\n teams,\n tenantId,\n timerange,\n timerangeId,\n typesOfWork,\n workItemTypes,\n selectedUser,\n repositories,\n visibleRepositories\n };\n }\n return {\n ...getUrlParamsDefaultValues({ pageId }),\n allUsers: getAllUsers(activeTeam),\n board: activeBoard || null,\n boardId: getBoardId(activeBoard),\n endDate: today.end,\n startDate: today.start,\n team: activeTeam,\n teamId: getTeamId(parsedQuerystring),\n teamLeadId: getTeamLeadId(parsedQuerystring),\n teamLead: getTeamLead({\n fullOrganizationData,\n teamLeadId: getTeamLeadId(parsedQuerystring)\n }),\n users: getUsers(parsedQuerystring),\n tenantId,\n timerange: today,\n timerangeId: today.id\n };\n }, [\n activeBoard,\n activeTeam,\n allSprintTimeranges,\n defaultJiraGroupBy,\n fullOrganizationData,\n namedTimeranges,\n pageId,\n parsedQuerystring,\n tenantId,\n today\n ]);\n};\n","import querystring from \"query-string\";\nimport { useEffect, useMemo, useState } from \"react\";\n\n// hooks\nimport { useActiveUsersTeams } from \"./useActiveUsersTeams\";\nimport { useDefaultTeam } from \"./useDefaultTeam\";\nimport { useLocation } from \"react-router-dom\";\n\n// interfaces\nimport { TeamInterface } from \"../interfaces/team\";\n\n// utils\nimport { getTeamId, parseQuerystring } from \"../utils/url-params\";\n\nexport const useActiveTeam = (): TeamInterface | null => {\n const [activeTeam, setActiveTeam] = useState(null);\n // we have to use the raw querystring here because this hook is used by the\n // url params hook and referencing it would set up a circular dependency\n const { search } = useLocation();\n const parsedQuerystring = useMemo(() => parseQuerystring(search), [\n parseQuerystring,\n search\n ]);\n const querystringTeamId = getTeamId(parsedQuerystring);\n\n const defaultTeam = useDefaultTeam();\n const { data: activeUsersTeams } = useActiveUsersTeams();\n const querystringTeam = useMemo(\n () =>\n activeUsersTeams?.find(\n (t: TeamInterface) => t.teamId === querystringTeamId\n ),\n [activeUsersTeams, querystringTeamId]\n );\n\n useEffect(() => {\n // if teams for the zoomed in team lead or for the user are populated\n if (!!activeUsersTeams?.length && !!defaultTeam) {\n // if we located the querystring team\n if (!!querystringTeam) {\n setActiveTeam(querystringTeam);\n } else {\n setActiveTeam(defaultTeam);\n }\n } else {\n setActiveTeam(null);\n }\n }, [activeUsersTeams, defaultTeam, querystringTeam]);\n\n return activeTeam;\n};\n","import React, { createContext } from \"react\";\nimport { useUrlParamsContextValues } from \"../hooks/useUrlParamsContextValues\";\nimport { UrlParamsInterface } from \"../interfaces/url-params\";\n\nexport const UrlParamsContext = createContext(\n {} as UrlParamsInterface\n);\nexport const UrlParamsProvider = ({\n children\n}: {\n children: React.ReactNode;\n}) => {\n return (\n \n {children}\n \n );\n};\nexport const UrlParamsConsumer = UrlParamsContext.Consumer;\n","import { farsApi } from \"../utils/api\";\nimport * as Sentry from \"@sentry/react\";\n\nexport const sendEvent = async ({ accessToken, farsUrl, params, tenantId }) => {\n if (!farsUrl || !accessToken) {\n return null;\n }\n try {\n await farsApi.put(`/${tenantId}/submit`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n } catch (error) {\n Sentry.captureException(error);\n }\n};\n","import { useCallback, useContext, useEffect, useMemo, useState } from \"react\";\nimport config from \"../env-config\";\nimport { get, isNull, merge } from \"lodash\";\nimport { captureException } from \"@sentry/react\";\n\n// context\nimport { UrlParamsContext } from \"../context/url-params\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useLocation } from \"react-router-dom\";\n\n// interfaces\nimport { Event } from \"../interfaces/event\";\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport { getTimestampForDate } from \"../utils/date\";\nimport { sendEvent } from \"../utils/uplevelAnalytics\";\nimport { parsePageIdFromPathname } from \"../utils/router\";\n\nexport const useTracking = (): {\n trackEvent: (event: Event) => void;\n} => {\n // using raw context values here instead of useUrlParams because including\n // that here would set up an infinite loop/circular dependency amongst the\n // other hooks included in useUrlParams\n const urlParamsContextValues = useContext(UrlParamsContext);\n const [triggeredEvent, setTriggeredEvent] = useState(null);\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const session = useSelector((state: AppStateInterface) => state.session);\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const farsUrl = config.FARS_URL;\n const { pathname } = useLocation();\n const pageId = useMemo(() => {\n return parsePageIdFromPathname(pathname);\n }, [pathname]);\n const baseEventParams = useMemo(() => {\n return {\n accessToken,\n farsUrl,\n tenantId,\n params: {\n // replacing the old uifilterparams with the urlparams values -- these\n // should be pretty much the same values as before, minus maybe some\n // stray logic here and there, but since the point of including these in\n // the session info is to surface 'what is the ui set to?', i think this\n // should satisfy that.\n session: { ...session, uiFilterParams: urlParamsContextValues }\n }\n };\n }, [accessToken, farsUrl, tenantId, session, urlParamsContextValues]);\n\n const trackEvent = useCallback(\n (event: Event) => {\n setTriggeredEvent(event);\n },\n [setTriggeredEvent]\n );\n\n useEffect(() => {\n (async () => {\n if (!isNull(triggeredEvent)) {\n const label = get(triggeredEvent, \"label\");\n const isNoAccountPage = /no-uplevel-account/.test(label);\n try {\n sendEvent(\n merge(baseEventParams, {\n params: {\n uiEvent: {\n action: get(triggeredEvent, \"e.type\") || \"click\",\n category: \"web\",\n elementId: get(triggeredEvent, \"e.currentTarget.id\"),\n // omit the pageid on the no uplevel account event because it\n // isn't on its own route\n eventLabel: isNoAccountPage ? label : `${pageId}-${label}`,\n eventValue: get(triggeredEvent, \"value\"),\n page: isNoAccountPage\n ? \"user-with-no-uplevel-account\"\n : pageId,\n timestamp: getTimestampForDate(new Date())\n }\n }\n })\n );\n setTriggeredEvent(null);\n } catch (e) {\n setTriggeredEvent(null);\n }\n }\n })();\n }, [baseEventParams, pageId, triggeredEvent]);\n\n return { trackEvent };\n};\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Icon from \"../Icon/Icon\";\n\n// constants\nimport { SUPPORT_EMAIL_ADDRESS } from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// styled components\nconst ExternalLink = styled(Icon)`\n color: inherit;\n font-size: inherit;\n margin-left: 0.3em;\n`;\nconst Container = styled.a`\n align-items: baseline;\n display: inline-flex;\n\n && {\n color: ${props => props.theme.colors.all.wolverine};\n }\n\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n text-decoration: none;\n\n & ${ExternalLink} {\n color: inherit;\n }\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n content?: React.ReactNode;\n onClick?: (e: React.MouseEvent) => void;\n name: string;\n testId?: string;\n};\n\nconst SupportEmailLink = ({\n className,\n content = SUPPORT_EMAIL_ADDRESS,\n onClick,\n name,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-support-email-link`;\n const { trackEvent } = useTracking();\n\n function onClickLink(e: React.MouseEvent) {\n e.persist();\n trackEvent({\n e,\n label: `${name}-support-email-link`,\n value: `opening email to support from ${name}`\n });\n\n if (onClick) {\n onClick(e);\n }\n }\n\n return (\n \n {content} \n \n );\n};\n\nexport default SupportEmailLink;\n","import React, { ReactElement, useEffect } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport SupportEmailLink from \"../SupportEmailLink/SupportEmailLink\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// styled components\nconst Container = styled.div`\n align-items: center;\n display: flex;\n justify-content: center;\n height: 100vh;\n`;\nconst ContentWrapper = styled.div`\n max-width: 25rem;\n`;\nconst Header = styled.h1`\n font-size: 8rem;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n margin: 0;\n`;\nconst Body = styled.p`\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n margin: 0;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst UserWithNoUplevelAccountPage = ({\n className,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-user-with-no-account-page`;\n const { trackEvent } = useTracking();\n\n useEffect(() => {\n trackEvent({\n e: {\n type: \"page-load\"\n },\n label: \"user-with-no-uplevel-account-page-load\",\n value: `loaded`\n });\n }, []);\n\n return (\n \n \n
Hello!
\n \n It looks like you don’t have an Uplevel account. Please contact\n support to get an account.{\" \"}\n \n \n
\n
\n );\n};\n\nexport default UserWithNoUplevelAccountPage;\n","import { actionTypes } from \"../constants/actionTypes\";\n\n/**\n * return action to store access token in state\n * @param {String} authAccessToken\n */\nexport const storeAuthAccessToken = authAccessToken => {\n return {\n type: actionTypes.STORE_AUTH_ACCESS_TOKEN,\n payload: { authAccessToken }\n };\n};\n\n/**\n * return action to store auth params in state\n * @param {Object} authParams\n */\nexport const storeAuthParams = authParams => {\n return {\n type: actionTypes.STORE_AUTH_PARAMS,\n payload: { authParams }\n };\n};\n","import { actionTypes } from \"../constants/actionTypes\";\n\n/**\n * return action to store chart in state\n * @param {Object} flags\n */\nexport const storeFlags = flags => {\n return {\n type: actionTypes.STORE_FLAGS,\n payload: { flags }\n };\n};\n","import { actionTypes } from \"../constants/actionTypes\";\n\n/**\n * store session params\n * @param {Object} params\n */\nexport const storeSessionParams = params => {\n return {\n type: actionTypes.STORE_SESSION_PARAMS,\n payload: params\n };\n};\n\n/**\n * store session login timestamp\n * @param {String} loginTimestamp\n */\nexport const storeSessionLoginTimestamp = loginTimestamp => {\n return {\n type: actionTypes.STORE_SESSION_LOGIN_TIMESTAMP,\n payload: { loginTimestamp }\n };\n};\n\n/**\n * store session document referrer\n * @param {String} referrer\n */\nexport const storeSessionReferrer = referrer => {\n return {\n type: actionTypes.STORE_SESSION_REFERRER,\n payload: { referrer }\n };\n};\n\n/**\n * store session uuid\n * @param {String} uuid\n */\nexport const storeuuid = uuid => {\n return {\n type: actionTypes.STORE_SESSION_UUID,\n payload: { uuid }\n };\n};\n\n/**\n * store organization\n * @returns {{payload: {organization: *}, type: *}}\n */\nexport const storeOrganization = organization => {\n return {\n type: actionTypes.STORE_ORGANIZATION,\n payload: { organization }\n };\n};\n","import { actionTypes } from \"../constants/actionTypes\";\n\n/**\n * return action to store user in state\n * @param {Object} user\n */\nexport const storeUser = user => {\n return {\n type: actionTypes.STORE_USER,\n payload: { user }\n };\n};\n","import {\n flatten,\n flattenDeep,\n isEmpty,\n isNull,\n isUndefined,\n snakeCase,\n sum,\n uniq,\n sumBy,\n defaults,\n isFinite\n} from \"lodash\";\nimport { NIL as NIL_UUID } from \"uuid\";\n\n// constants\nimport {\n groupByTypes,\n pullRequestCalloutTypes,\n reservedEpics,\n reservedEpicsMetadata,\n sprintMetadataWorkTypes,\n urlParamsBaseDefaultValues,\n workMetadataActivityTypes,\n workMetadataStatusTypes\n} from \"../constants/constants\";\n\n// interfaces\nimport {\n BreakdownByActivityType,\n SprintProgressActivityInterface\n} from \"../interfaces/sprint-metadata\";\nimport {\n ActivityInterface,\n WorkItemLeveledInterface,\n WorkItemInterface,\n GroupInterface\n} from \"../interfaces/work-items\";\nimport { UrlParamsInterface } from \"../interfaces/url-params\";\n\nexport const getWorkItemsActivitiesTotals = (\n activities?: Array\n): Array => {\n if (!activities) {\n return [];\n }\n const totalWeight = sum(\n activities\n .filter(\n activity =>\n snakeCase(activity.activityType).toUpperCase() !==\n workMetadataActivityTypes.PR\n )\n .map(activity => activity.score)\n );\n\n return [\n workMetadataStatusTypes.OPEN,\n workMetadataStatusTypes.IN_PROGRESS,\n workMetadataStatusTypes.DONE\n ].map(categoryKey => {\n const breakdownByActivityType = activities.reduce(\n (accumulated: BreakdownByActivityType, current: ActivityInterface) => {\n const activityKey = snakeCase(current.activityType).toUpperCase();\n const item = current.breakdownByStatus.find(\n b => b.status === categoryKey\n );\n accumulated[activityKey] = defaults(item || {}, {\n score: 0,\n count: 0\n });\n return accumulated;\n },\n {}\n );\n const jiraItems = Object.entries(breakdownByActivityType)\n .filter(([k]) => k !== workMetadataActivityTypes.PR)\n .map(([, v]) => v);\n return {\n displayTitle:\n categoryKey === workMetadataStatusTypes.OPEN\n ? \"To-Do\"\n : categoryKey === workMetadataStatusTypes.DONE\n ? \"Done\"\n : \"In Progress\",\n status: categoryKey,\n breakdownByActivityType,\n percentage: (sumBy(jiraItems, \"score\") / totalWeight) * 100\n };\n });\n};\n\nexport const flattenWorkItems = ({\n workItems,\n rootWorkItemId,\n level\n}: {\n workItems: Array;\n rootWorkItemId: string | null;\n level: number;\n}): Array => {\n return flattenDeep(\n workItems.map(workItem => {\n return [\n {\n ...workItem,\n level,\n rootWorkItemId\n }\n ].concat(\n isEmpty(workItem.childWorkItems)\n ? []\n : flattenWorkItems({\n workItems: workItem.childWorkItems,\n rootWorkItemId: isNull(rootWorkItemId)\n ? workItem.id\n : rootWorkItemId,\n level: level + 1\n })\n );\n })\n );\n};\n\nexport const getWorkItemsRequestParamsCallouts = (callouts: Array) => {\n // replace \"stuck\" with the actual stalled values to request\n if (callouts.includes(pullRequestCalloutTypes.STUCK)) {\n return [\n ...callouts.filter(c => c !== pullRequestCalloutTypes.STUCK),\n ...Object.values(pullRequestCalloutTypes).filter(c =>\n c.startsWith(\"STALLED\")\n )\n ];\n }\n return callouts;\n};\n\nexport const getWorkItemsRequestParamsEpicId = ({\n groupBy,\n groupId\n}: {\n groupBy: string;\n groupId?: string;\n}) =>\n groupBy === groupByTypes.EPIC\n ? !!groupId\n ? Object.values(reservedEpics).includes(groupId)\n ? NIL_UUID\n : groupId\n : null\n : null;\n\nexport const getWorkItemsRequestParamsFromUrlParams = (\n urlParams: UrlParamsInterface,\n groupId?: string\n) => {\n // deep clone so we can delete values\n const workItemsRequestParams = JSON.parse(JSON.stringify(urlParams));\n const epicId = getWorkItemsRequestParamsEpicId({\n groupBy: workItemsRequestParams.groupBy,\n groupId\n });\n const usersToRequest =\n workItemsRequestParams.groupBy === groupByTypes.USER && !!groupId\n ? urlParams.team?.teamMembers\n .filter(m => m.id === Number(groupId))\n .map(m => m.email) || []\n : urlParams.selectedUser === null || urlParams.selectedUser === \"team\"\n ? []\n : [urlParams.selectedUser];\n\n if (isNull(workItemsRequestParams.sprintId)) {\n delete workItemsRequestParams.sprintId;\n delete workItemsRequestParams.otherSprintItems;\n delete workItemsRequestParams.typesOfWork;\n } else {\n workItemsRequestParams.otherSprintItems = getWorkItemsRequestParamsOtherSprintItems(\n {\n groupBy: workItemsRequestParams.groupBy,\n otherSprintItems: workItemsRequestParams.otherSprintItems,\n users: usersToRequest\n }\n );\n workItemsRequestParams.typesOfWork = getWorkItemsRequestParamsTypesOfWork({\n groupId,\n typesOfWork: workItemsRequestParams.typesOfWork\n });\n }\n if (!!epicId) {\n workItemsRequestParams.epicId = epicId;\n }\n if (isUndefined(groupId)) {\n workItemsRequestParams.page = workItemsRequestParams.groupsList.page;\n } else {\n workItemsRequestParams.page =\n workItemsRequestParams.groupDetails?.page ||\n urlParamsBaseDefaultValues.groupDetails.page;\n workItemsRequestParams.sort =\n workItemsRequestParams.groupDetails?.sort?.map(\n (column: { id: string; desc: boolean }) => {\n return {\n column:\n column.id === \"name\" &&\n workItemsRequestParams.epicId !== reservedEpics.UNLINKED_PRS\n ? \"displayId\"\n : column.id,\n order: column.desc ? \"DESC\" : \"ASC\"\n };\n }\n ) || urlParamsBaseDefaultValues.groupDetails.sort;\n }\n\n workItemsRequestParams.callouts = getWorkItemsRequestParamsCallouts(\n workItemsRequestParams.callouts\n );\n workItemsRequestParams.projectIds = getWorkItemsRequestParamsProjectIds({\n groupId,\n groupBy: workItemsRequestParams.groupBy,\n projectIds: workItemsRequestParams.projectIds\n });\n workItemsRequestParams.users = usersToRequest;\n workItemsRequestParams.workItemTypes = getWorkItemsRequestParamsWorkItemTypes(\n {\n groupId,\n workItemTypes: workItemsRequestParams.workItemTypes\n }\n );\n\n delete workItemsRequestParams.board;\n delete workItemsRequestParams.reportGroups;\n delete workItemsRequestParams.boardId;\n delete workItemsRequestParams.groupDetails;\n delete workItemsRequestParams.groupsList;\n delete workItemsRequestParams.roles;\n delete workItemsRequestParams.team;\n delete workItemsRequestParams.teams;\n delete workItemsRequestParams.teamLead;\n delete workItemsRequestParams.teamLeadId;\n delete workItemsRequestParams.timerange;\n delete workItemsRequestParams.timerangeId;\n delete workItemsRequestParams.visibleRepositories;\n\n return workItemsRequestParams;\n};\n\nexport const getWorkItemsRequestParamsOtherSprintItems = ({\n groupBy,\n otherSprintItems,\n users\n}: {\n groupBy: string;\n otherSprintItems: Array;\n users: Array;\n}) =>\n groupBy === groupByTypes.USER\n ? urlParamsBaseDefaultValues.otherSprintItems\n : isEmpty(users) && isEmpty(otherSprintItems)\n ? []\n : otherSprintItems;\n\nexport const getWorkItemsRequestParamsProjectIds = ({\n groupId,\n groupBy,\n projectIds\n}: {\n groupId?: string;\n groupBy: string;\n projectIds: Pick;\n}) =>\n !!groupId\n ? groupBy === groupByTypes.EPIC\n ? groupId === reservedEpics.UNLINKED_PRS\n ? [NIL_UUID]\n : projectIds\n : groupBy === groupByTypes.PROJECT\n ? [groupId]\n : projectIds\n : projectIds;\n\nexport const getWorkItemsRequestParamsTypesOfWork = ({\n groupId,\n typesOfWork\n}: {\n groupId?: string;\n typesOfWork: Pick;\n}) =>\n groupId === reservedEpics.UNLINKED_PRS\n ? [sprintMetadataWorkTypes.NOT_ATTACHED_TO_SPRINT]\n : typesOfWork;\n\nexport const getWorkItemsRequestParamsWorkItemTypes = ({\n groupId,\n workItemTypes\n}: {\n groupId?: string;\n workItemTypes: Pick;\n}) =>\n groupId === reservedEpics.UNLINKED_PRS\n ? urlParamsBaseDefaultValues.workItemTypes\n : workItemTypes;\n\nfunction mapWorkItemRecursive(\n workItem: WorkItemInterface,\n parents: Array\n): Array {\n if (workItem.workItem === \"PULL_REQUEST\")\n return [{ ...workItem, childWorkItems: parents }];\n if (!workItem.childWorkItems.length) return [];\n\n return flatten(\n workItem.childWorkItems.map(c =>\n mapWorkItemRecursive(c, [...parents, { ...workItem, childWorkItems: [] }])\n )\n );\n}\n\nexport const invertPRWorkItems = (\n workItems: Array\n): Array => {\n if (!workItems.length) return [];\n const workItemsById: Map = flatten(\n workItems.map(wi => mapWorkItemRecursive(wi, []))\n ).reduce>((workItemsById, pr) => {\n workItemsById.set(pr.id, {\n ...pr,\n childWorkItems: uniq(\n // the same PR can show up multiple times with different linked jira tickets, so here\n // we reduce to a single instance of the pr with jira tickets across all instances\n // as child items\n pr.childWorkItems.concat(workItemsById.get(pr.id)?.childWorkItems || [])\n )\n });\n return workItemsById;\n }, new Map());\n return Array.from(workItemsById.values());\n};\n\nexport const sanitizeValue = (\n valueToShow: number | string | null\n): number | string => {\n return isFinite(valueToShow) ||\n (typeof valueToShow === \"string\" && valueToShow !== \"Infinity\")\n ? (valueToShow as number | string)\n : \"N/A\";\n};\n\nexport const getTeamRosterFromGroupsList = (\n data: Array = []\n): Array =>\n uniq(\n flatten(\n data\n ?.filter(\n (epic: GroupInterface) =>\n epic.magicRow !==\n reservedEpicsMetadata[reservedEpics.UNLINKED_PRS].magicRowId\n )\n .map(epic => epic.owners)\n ).map(owner => owner.displayName)\n ).sort();\n","import { useCallback, useContext, useMemo } from \"react\";\nimport querystring from \"query-string\";\nimport { invert, isEmpty } from \"lodash\";\n\n// constants\nimport {\n teamDeepDiveMeasurePathParams,\n teamDeepDiveSections,\n meetingInsightsMeasurePathParams,\n pageIds,\n pageMetadata,\n workDeepDiveSections\n} from \"../constants/constants\";\n\n// context\nimport { UrlParamsContext } from \"../context/url-params\";\n\n// hooks\nimport { generatePath, useHistory, useRouteMatch } from \"react-router-dom\";\nimport { useSelector } from \"react-redux\";\nimport { useDefaultTeam } from \"./useDefaultTeam\";\nimport { useUserSettings } from \"./useUserSettings\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\nimport {\n PathHelperOptionsInterface,\n UrlParamsHookReturnInterface,\n UrlParamsInterface\n} from \"../interfaces/url-params\";\n\n// utils\nimport {\n getQuerystringParamsToSet,\n parseQuerystring\n} from \"../utils/url-params\";\nimport { getWorkItemsRequestParamsFromUrlParams } from \"../utils/work-items\";\n\nexport const useUrlParams = (): UrlParamsHookReturnInterface => {\n // selectors\n const session = useSelector((state: AppStateInterface) => state.session);\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const canViewOpsMetrics = !!flags?.[\n pageMetadata[workDeepDiveSections.OPS_METRICS].flag as string\n ];\n\n // hooks\n const history = useHistory();\n const defaultTeam = useDefaultTeam();\n const { data: userSettings } = useUserSettings();\n const matchWorkDeepDive = useRouteMatch<{\n pageId: string;\n selectedSection?: string;\n groupId?: string;\n }>(`/${pageIds.WORK_DEEP_DIVE}/:selectedSection?/:groupId?`);\n const groupId = matchWorkDeepDive?.params.groupId;\n const matchPageId = useRouteMatch<{\n pageId: string;\n }>(`/:pageId`);\n const currentPageId = matchPageId?.params.pageId;\n const selectedWorkDeepDiveSection = useMemo(\n () =>\n // TODO: this is kind of gross - we need to figure out a more\n // elegant way of defaulting the tabs wrt dynamic tabs from being flagged,\n // etc.\n !matchWorkDeepDive?.params.selectedSection\n ? canViewOpsMetrics\n ? workDeepDiveSections.OPS_METRICS\n : workDeepDiveSections.PROJECT_WORK\n : matchWorkDeepDive?.params.selectedSection,\n [canViewOpsMetrics, matchWorkDeepDive]\n );\n const matchTeamDeepDive = useRouteMatch<{\n selectedSection?: string;\n selectedMetric?: string;\n }>(`/${pageIds.TEAM_DEEP_DIVE}/:selectedSection?/:selectedMetric?`);\n const selectedTeamDeepDiveSection = useMemo(\n () =>\n matchTeamDeepDive?.params.selectedSection ||\n teamDeepDiveSections.PEOPLE_HEALTH,\n [matchTeamDeepDive]\n );\n const selectedTeamDeepDiveMetric = useMemo(() => {\n const invertedParams = invert({\n ...teamDeepDiveMeasurePathParams,\n ...meetingInsightsMeasurePathParams\n });\n return !!matchTeamDeepDive?.params.selectedMetric &&\n !!invertedParams[matchTeamDeepDive.params.selectedMetric]\n ? invertedParams[matchTeamDeepDive.params.selectedMetric]\n : selectedTeamDeepDiveSection === teamDeepDiveSections.MEETING_INSIGHTS\n ? \"MEETING_DISTRIBUTION\"\n : \"OVERALL_TEAM_HEALTH\";\n }, [matchTeamDeepDive, selectedTeamDeepDiveSection]);\n\n // variables\n const urlParamsContextValues = useContext(UrlParamsContext);\n const workItemsRequestParams = useMemo(\n () =>\n getWorkItemsRequestParamsFromUrlParams(urlParamsContextValues, groupId),\n [groupId, urlParamsContextValues]\n );\n const timerange = useMemo(() => urlParamsContextValues.timerange, [\n urlParamsContextValues\n ]);\n const namedTimeranges = useMemo(() => session.namedTimeranges, [session]);\n\n const getPathForPageId = useCallback(\n (pageId: string, options: PathHelperOptionsInterface = {}): string => {\n const {\n groupId,\n selectedSection,\n selectedMetric,\n persistQuerystring = true,\n querystringParams = {}\n } = options;\n const path = groupId\n ? {\n // todo: if group id ever lives on pages other than the project explorer's\n // todo: your-teams-data tab this will need to be reworked\n pageId,\n selectedSection: workDeepDiveSections.PROJECT_WORK,\n groupId\n }\n : selectedSection\n ? selectedMetric\n ? {\n pageId,\n selectedSection,\n selectedMetric:\n teamDeepDiveMeasurePathParams[selectedMetric] ||\n meetingInsightsMeasurePathParams[selectedMetric] ||\n selectedMetric\n }\n : {\n pageId,\n selectedSection\n }\n : {\n pageId\n };\n\n const parsedQuerystring = parseQuerystring(window.location.search);\n const paramsToSet = getQuerystringParamsToSet({\n pageId,\n parsedQuerystring,\n paramsFromUi: querystringParams,\n persistQuerystring,\n defaultTeam,\n namedTimeranges,\n timerange,\n userSettings\n });\n\n return `${generatePath(\n pageId === pageIds.START\n ? \"/\"\n : pageId === pageIds.WORK_DEEP_DIVE\n ? \"/:pageId/:selectedSection?/:groupId?\"\n : pageId === pageIds.TEAM_DEEP_DIVE\n ? \"/:pageId/:selectedSection?/:selectedMetric?\"\n : pageId === pageIds.SETTINGS\n ? \"/:pageId/:selectedSection?/:selectedMetric?\"\n : pageId === pageIds.OVERVIEW\n ? \"/:pageId/:selectedSection?/:selectedMetric?\"\n : \"/:pageId\",\n path\n )}${\n isEmpty(paramsToSet)\n ? \"\"\n : `?${querystring.stringify(paramsToSet, {\n arrayFormat: \"bracket-separator\",\n arrayFormatSeparator: \"|\"\n })}`\n }`;\n },\n [defaultTeam, namedTimeranges, timerange, userSettings]\n );\n\n const getWorkDeepDivePath = useCallback(\n (options: PathHelperOptionsInterface = {}): string =>\n getPathForPageId(pageIds.WORK_DEEP_DIVE, options),\n [getPathForPageId]\n );\n\n const getSprintRetrosPath = useCallback(\n (options: PathHelperOptionsInterface = {}): string =>\n getPathForPageId(pageIds.RETROS, options),\n [getPathForPageId]\n );\n\n const getStartPath = useCallback(\n (options: PathHelperOptionsInterface = {}): string =>\n getPathForPageId(pageIds.START, options),\n [getPathForPageId]\n );\n\n const getTeamHomePath = useCallback(\n (options: PathHelperOptionsInterface = {}): string =>\n getPathForPageId(pageIds.TEAM_HOME, options),\n [getPathForPageId]\n );\n\n const getTeamDeepDivePath = useCallback(\n (options: PathHelperOptionsInterface = {}): string =>\n getPathForPageId(pageIds.TEAM_DEEP_DIVE, options),\n [getPathForPageId]\n );\n\n const getSettingsPath = useCallback(\n (options: PathHelperOptionsInterface = {}): string =>\n getPathForPageId(pageIds.SETTINGS, options),\n [getPathForPageId]\n );\n\n const getOverviewPath = useCallback(\n (options: PathHelperOptionsInterface = {}): string =>\n getPathForPageId(pageIds.OVERVIEW, options),\n [getPathForPageId]\n );\n\n const updateUrlParams = useCallback(\n (\n paramsFromUi: Partial,\n persistQuerystring: Array | boolean = true\n ) => {\n const parsedQuerystring = parseQuerystring(window.location.search);\n const paramsToSet = getQuerystringParamsToSet({\n pageId: currentPageId,\n parsedQuerystring,\n paramsFromUi,\n persistQuerystring,\n defaultTeam,\n namedTimeranges,\n timerange,\n userSettings\n });\n history.push(\n `${window.location.pathname}?${querystring.stringify(paramsToSet, {\n arrayFormat: \"bracket-separator\",\n arrayFormatSeparator: \"|\"\n })}`\n );\n },\n [\n currentPageId,\n defaultTeam,\n history,\n namedTimeranges,\n timerange,\n userSettings\n ]\n );\n\n const teamDeepDiveParams = useMemo(\n () => ({\n selectedMetric: selectedTeamDeepDiveMetric,\n selectedSection: selectedTeamDeepDiveSection,\n selectedUser: urlParamsContextValues.selectedUser || \"team\"\n }),\n [\n selectedTeamDeepDiveMetric,\n selectedTeamDeepDiveSection,\n urlParamsContextValues\n ]\n );\n\n const workDeepDiveParams = useMemo(\n () => ({\n selectedSection: selectedWorkDeepDiveSection,\n selectedUser: urlParamsContextValues.selectedUser || \"team\"\n }),\n [selectedWorkDeepDiveSection, urlParamsContextValues]\n );\n\n return {\n getOverviewPath,\n getPathForPageId,\n getSettingsPath,\n getSprintRetrosPath,\n getStartPath,\n getTeamDeepDivePath,\n getTeamHomePath,\n getWorkDeepDivePath,\n teamDeepDiveParams,\n updateUrlParams,\n urlParams: urlParamsContextValues,\n workDeepDiveParams,\n workItemsRequestParams\n };\n};\n","// utils\nimport { requestUser } from \"../../utils/user\";\n\ntype Props = {\n accessToken: string;\n tenantId: number;\n};\nexport default async function fetchUserData({ accessToken, tenantId }: Props) {\n return await requestUser({\n accessToken,\n tenantId\n });\n}\n","// utils\nimport { requestUserInfo } from \"../../utils/user\";\n\ntype Props = {\n accessToken: string;\n tenantId: number;\n};\nexport default async function fetchUserData({ accessToken, tenantId }: Props) {\n return await requestUserInfo({\n accessToken,\n tenantId\n });\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport config from \"../env-config\";\nimport * as LDClient from \"launchdarkly-js-client-sdk\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { get, has, isEmpty, isNil, isUndefined } from \"lodash\";\nimport { captureException } from \"@sentry/react\";\n\n// actions\nimport { storeAuthAccessToken } from \"../actions/authActions\";\nimport { storeFlags } from \"../actions/flagActions\";\nimport { storeSessionParams } from \"../actions/sessionActions\";\nimport { storeUser } from \"../actions/userActions\";\n\n// constants\nimport { namedTimerangeIds } from \"../constants/constants\";\n\n// hooks\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useUserSettings } from \"./useUserSettings\";\nimport { useUrlParams } from \"./useUrlParams\";\nimport { useActiveUser } from \"./useActiveUser\";\nimport { useAuthProvider } from \"./useAuthProvider\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport fetchUserData from \"../components/DashboardPage/fetchUserData\";\nimport parseUserData from \"../components/DashboardPage/parseUserData\";\nimport fetchUserInfoData from \"../components/DashboardPage/fetchUserInfoData\";\nimport { getTimestampForDate } from \"../utils/date\";\nimport { sendEvent } from \"../utils/uplevelAnalytics\";\nimport {\n createAnalyticsUserMetadata,\n createUserKey,\n createFlagUserMetadata\n} from \"../utils/user\";\n\nexport const useInitialData = (): [boolean, boolean] => {\n const [authenticatedUserEmail, setAuthenticatedUserEmail] = useState<\n string\n >();\n const [isAuthenticated, setIsAuthenticated] = useState();\n const {\n getAccessToken,\n getUserGivenName,\n getIsAuthenticated,\n getUser\n } = useAuthProvider();\n\n useEffect(() => {\n if (isUndefined(isAuthenticated)) {\n getIsAuthenticated().then((response: boolean) =>\n setIsAuthenticated(response)\n );\n }\n }, [isAuthenticated, getIsAuthenticated]);\n useEffect(() => {\n if (isUndefined(authenticatedUserEmail)) {\n getUser().then((response: { [key: string]: string }) =>\n setAuthenticatedUserEmail(response.email)\n );\n }\n }, [getUser, authenticatedUserEmail]);\n const isFullyAuthenticated = !isUndefined(isAuthenticated) && isAuthenticated;\n\n const [hasInvalidRoles, _setHasInvalidRoles] = useState(false);\n const dispatch = useDispatch();\n\n // maybe hacky global ts variable?\n // https://mariusschulz.com/blog/declaring-global-variables-in-typescript\n const { heap, hj, initializeHotjar } = window as any;\n\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const hasFlags = !isNil(flags);\n const session = useSelector((state: AppStateInterface) => state.session);\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const userHasUplevelAccount = useSelector(\n (state: AppStateInterface) => !!state.session.userHasUplevelAccount\n );\n\n const hasRequestedUserInfo = useRef(false);\n const hasRequestedUserData = useRef(false);\n const hasRequestedUserGivenName = useRef(false);\n const hasRequestedFlags = useRef(false);\n const hasSentParams = useRef(false);\n const hasInitializedHotjar = useRef(false);\n const hasIdentifiedHotjar = useRef(false);\n const hasInitializedHeap = useRef(false);\n\n const user = useSelector((state: AppStateInterface) => state.user);\n const userEmail = get(user, \"email\");\n const userGivenName = get(user, \"givenName\");\n const userId = get(user, \"id\");\n const userLdHash = get(user, \"ldHash\");\n const userEnabledRoles = get(user, \"enabled_roles\");\n\n const { urlParams } = useUrlParams();\n const timerange = urlParams.timerange;\n const team = urlParams.team;\n\n const { isLoading: isLoadingUserSettings } = useUserSettings();\n const activeUser = useActiveUser();\n const activeUserId = activeUser?.id;\n\n const hasBaselineRenderingData = useMemo(() => {\n return (\n // wait until we have an access token for requests\n !!accessToken &&\n // wait until flags are available so we can reference flags.foo\n hasFlags &&\n // wait until team is available\n !!team &&\n // wait until timerange has been affirmatively changed from fake default\n timerange.id !== namedTimerangeIds.TODAY &&\n // wait until we have the tenant id for requests\n !!tenantId &&\n // wait until we have the baseline user info\n !!activeUserId &&\n // wait until we have fetched user settings\n !isLoadingUserSettings &&\n // wait until we have confirmation of uplevel account\n userHasUplevelAccount\n );\n }, [\n accessToken,\n hasFlags,\n isLoadingUserSettings,\n tenantId,\n timerange,\n activeUserId,\n team,\n userHasUplevelAccount\n ]);\n\n useEffect(() => {\n (async () => {\n if (isFullyAuthenticated && !accessToken) {\n try {\n const token = await getAccessToken();\n if (!!token) {\n dispatch(storeAuthAccessToken(token));\n }\n } catch (e) {\n captureException(e);\n }\n }\n })();\n }, [isFullyAuthenticated, accessToken, getAccessToken, dispatch]);\n\n useEffect(() => {\n (async () => {\n if (\n !hasRequestedUserData.current &&\n !userEmail &&\n accessToken &&\n tenantId &&\n !!authenticatedUserEmail\n ) {\n const baseSessionParams = {\n loginTimestamp: getTimestampForDate(new Date()),\n username: authenticatedUserEmail,\n userHasUplevelAccount: false,\n uuid: uuidv4()\n };\n try {\n hasRequestedUserData.current = true;\n const userDataResponse = await fetchUserData({\n accessToken,\n tenantId\n });\n if (!!userDataResponse) {\n const parsedUserData = parseUserData(userDataResponse);\n dispatch(storeUser(parsedUserData));\n // store session params with user email and session id\n dispatch(\n storeSessionParams({\n ...baseSessionParams,\n displayTenantAlias: userDataResponse.tenantAlias,\n username: userDataResponse.email,\n userHasUplevelAccount: true\n })\n );\n }\n } catch (e) {\n hasRequestedUserData.current = true;\n dispatch(storeSessionParams(baseSessionParams));\n captureException(e);\n }\n }\n })();\n }, [\n hasRequestedUserData,\n accessToken,\n dispatch,\n tenantId,\n userEmail,\n authenticatedUserEmail\n ]);\n\n useEffect(() => {\n (async () => {\n if (\n !hasRequestedUserGivenName.current &&\n isFullyAuthenticated &&\n !userGivenName\n ) {\n try {\n hasRequestedUserGivenName.current = true;\n const givenName = await getUserGivenName();\n if (!!givenName) {\n dispatch(\n storeUser({\n givenName\n })\n );\n }\n } catch (e) {\n hasRequestedUserGivenName.current = false;\n captureException(e);\n }\n }\n })();\n }, [isFullyAuthenticated, getUserGivenName, dispatch, userGivenName]);\n\n useEffect(() => {\n (async () => {\n try {\n if (\n !hasRequestedUserInfo.current &&\n !userId &&\n accessToken &&\n tenantId &&\n !!userHasUplevelAccount\n ) {\n hasRequestedUserInfo.current = true;\n const userInfoDataResponse = await fetchUserInfoData({\n accessToken,\n tenantId\n });\n if (isEmpty(userInfoDataResponse?.enabled_roles)) {\n _setHasInvalidRoles(true);\n }\n dispatch(storeUser(userInfoDataResponse));\n // store session params with user email and session id\n dispatch(\n storeSessionParams({\n enabled_roles: userInfoDataResponse?.enabled_roles || []\n })\n );\n }\n } catch (e) {\n hasRequestedUserInfo.current = false;\n captureException(e);\n }\n })();\n }, [\n hasRequestedUserInfo,\n accessToken,\n dispatch,\n tenantId,\n userId,\n userHasUplevelAccount\n ]);\n\n useEffect(() => {\n (async () => {\n if (\n !hasRequestedFlags.current &&\n !hasFlags &&\n !!userEmail &&\n !!userLdHash &&\n !!userEnabledRoles?.length\n ) {\n try {\n hasRequestedFlags.current = true;\n // initialize LD client\n const ldClient = LDClient.initialize(\n config.LAUNCH_DARKLY_CLIENT_ID,\n {\n key: createUserKey(user.email),\n custom: createFlagUserMetadata(user)\n },\n {\n allAttributesPrivate: true, // hide sent user attributes in LD ui\n fetchGoals: false, // don't make an extra request for analytics\n hash: userLdHash, // needed for secure mode\n useReport: true // send user attributes as REPORT request\n }\n );\n\n // make sure flags are ready to access\n ldClient.on(\"ready\", async () => {\n try {\n // request all flags from LD and store flags in state\n const fetchedFlags = ldClient.allFlags();\n dispatch(storeFlags(fetchedFlags));\n // store session params with flags\n dispatch(\n storeSessionParams({\n flags: fetchedFlags\n })\n );\n } catch (e) {\n hasRequestedFlags.current = false;\n captureException(e);\n\n // store empty object in state to replace the null\n // we initialized the flag state with\n dispatch(storeFlags({}));\n // store session params without flags\n dispatch(\n storeSessionParams({\n flags: {}\n })\n );\n }\n });\n } catch (e) {\n hasRequestedFlags.current = false;\n captureException(e);\n\n // store empty object in state to replace the null\n // we initialized the flag state with\n dispatch(storeFlags({}));\n // store session params without flags\n dispatch(\n storeSessionParams({\n flags: {}\n })\n );\n }\n }\n })();\n }, [\n hasRequestedFlags,\n dispatch,\n hasFlags,\n userEmail,\n userLdHash,\n userEnabledRoles,\n user\n ]);\n\n useEffect(() => {\n (async () => {\n if (\n accessToken &&\n tenantId &&\n !hasSentParams.current &&\n has(session, \"uuid\") &&\n has(session, \"enabled_roles\") &&\n has(session, \"username\") &&\n has(session, \"flags\")\n ) {\n try {\n hasSentParams.current = true;\n await sendEvent({\n accessToken,\n farsUrl: config.FARS_URL,\n tenantId,\n params: {\n session\n }\n });\n } catch (e) {\n hasSentParams.current = false;\n captureException(e);\n }\n }\n })();\n }, [accessToken, hasSentParams, session, tenantId]);\n\n // hotjar initialization\n useEffect(() => {\n (async () => {\n if (!!flags?.[\"hotjar\"] && !!config.HOTJAR_ID) {\n if (!hasInitializedHotjar.current) {\n try {\n initializeHotjar(config.HOTJAR_ID);\n hasInitializedHotjar.current = true;\n } catch (e) {\n captureException(e);\n }\n }\n\n if (!hasIdentifiedHotjar.current && !!hj && !!userEmail) {\n try {\n // TODO: add tenant and enabled_roles here when we have a clearer idea of what we want to pass\n hj(\"identify\", createUserKey(userEmail) || null, {\n email: userEmail\n });\n hasIdentifiedHotjar.current = true;\n } catch (e) {\n captureException(e);\n }\n }\n }\n })();\n }, [flags, hj, userEmail, hasInitializedHotjar, initializeHotjar]);\n\n // heap initialization\n useEffect(() => {\n (async () => {\n if (!!flags?.[\"heap\"] && !!config.HEAP_ID) {\n if (\n !hasInitializedHeap.current &&\n !!heap &&\n !!userEmail &&\n !!userEnabledRoles?.length\n ) {\n const heapConfig = {\n ...createAnalyticsUserMetadata(user),\n email: userEmail\n };\n try {\n heap.load(config.HEAP_ID);\n heap.identify(createUserKey(userEmail));\n heap.addUserProperties(heapConfig);\n hasInitializedHeap.current = true;\n } catch (e) {\n captureException(e);\n }\n }\n }\n })();\n }, [flags, heap, user, userEmail, userEnabledRoles, hasInitializedHeap]);\n\n return [hasBaselineRenderingData, hasInvalidRoles];\n};\n","export default (user: {\n email: string;\n ldHash: string;\n name: string;\n tenantAlias: string;\n}) => ({\n ...user,\n tenantAlias: user.tenantAlias.toLowerCase()\n});\n","import React from \"react\";\nimport { isUndefined } from \"lodash\";\n\n// components\nimport { Redirect } from \"react-router-dom\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport UserWithNoUplevelAccountPage from \"../UserWithNoUplevelAccountPage/UserWithNoUplevelAccountPage\";\n\n// hooks\nimport { useInitialData } from \"../../hooks/useInitialData\";\nimport { useSelector } from \"react-redux\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// typescript props\ntype Props = {\n children: React.ReactNode;\n};\n\nconst DataLoadWrapper = ({ children }: Props) => {\n const [uiIsReady, hasInvalidRoles] = useInitialData();\n const userHasUplevelAccount = useSelector(\n (state: AppStateInterface) => state.session?.userHasUplevelAccount\n );\n\n // if came back with invalid roles, bounce to the unknown user route\n if (uiIsReady && hasInvalidRoles) {\n return ;\n }\n\n if (!isUndefined(userHasUplevelAccount) && !userHasUplevelAccount) {\n return ;\n }\n\n return (\n \n );\n};\n\nexport default DataLoadWrapper;\n","import { isUndefined } from \"lodash\";\nimport React, { useState } from \"react\";\nimport { useAuthProvider } from \"../../hooks/useAuthProvider\";\nimport DataLoadWrapper from \"../DataLoadWrapper/DataLoadWrapper\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\n\n// typescript props\ntype Props = {\n children: React.ReactNode;\n hasRedirected: boolean;\n};\n\nconst Auth0UiReadyWrapper = ({ children, hasRedirected }: Props) => {\n const { getIsAuthenticated } = useAuthProvider();\n const [isAuthenticated, setIsAuthenticated] = useState();\n // using then notation because I want to make sure we have the latest accurate\n // result for isAuthenticated and I'm not sure if a useeffect would fire as\n // expected if getIsAuthenticated were just a dependency.\n getIsAuthenticated().then((response: boolean) =>\n setIsAuthenticated(response)\n );\n\n // wait with a spinner until getIsAuthenticated response fully resolves. if\n // authenticated, load the children with the data load wrapper, which has our\n // checks to make sure the data is loaded properly. if not authenticated,\n // attempt to load the child tree with the secure route in it to get it to hit\n // the login flow.\n return (\n {children} : null\n }\n testId=\"ui-ready-wrapper\"\n />\n );\n};\n\nexport default Auth0UiReadyWrapper;\n","import React from \"react\";\n\nimport { Route } from \"react-router-dom\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport { withAuthenticationRequired } from \"@auth0/auth0-react\";\n\n// typescript props\ntype Props = any;\n\n// this is copied from auth0's recommended react implementation\n// https://auth0.com/blog/complete-guide-to-react-user-authentication/\nconst SecureRoute = ({ component, ...args }: Props) => (\n (\n \n )\n })}\n {...args}\n />\n);\n\nexport default SecureRoute;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Icon from \"../Icon/Icon\";\n\n// styled components\nconst StyledContainer = styled.div`\n color: inherit;\n align-items: center;\n display: flex;\n`;\nconst StyledIcon = styled(Icon)`\n color: inherit;\n height: 100%;\n line-height: 1;\n margin-right: 0.5em;\n`;\nconst StyledContent = styled.div`\n flex: 1;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n content: React.ReactNode;\n icon: string;\n iconColor?: string;\n testId?: string;\n};\n\nconst ContentWithIcon = ({\n className,\n content,\n icon,\n iconColor,\n testId = \"testId\"\n}: Props) => {\n return (\n \n \n {content}\n \n );\n};\n\nexport default ContentWithIcon;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled, { css } from \"styled-components/macro\";\n\n// styled components\n// exporting to target in tests\nexport const UnstyledButton = styled.button`\n /* button resets */\n background: transparent;\n border: none;\n cursor: pointer;\n font-family: ${props => props.theme.fonts.primary.name}, \"Helvetica Neue\",\n \"Aria\", sans-serif;\n padding: 0;\n\n ${props => {\n if (props.disabled) {\n return css`\n cursor: inherit;\n `;\n }\n }}\n`;\n\n// FIXME: color is bg to avoid white on white until further button refactor\nexport const StyledButton = styled(UnstyledButton)`\n color: ${props => props.theme.colors.button[props.button].default.bg};\n transition: 0.2s all;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n letter-spacing: 0.1rem;\n text-transform: uppercase;\n\n ${props => {\n if (props.disabled) {\n return css`\n color: ${props => props.theme.colors.disabled};\n `;\n }\n }}\n`;\n\nconst hoverActiveButtonStyles = css`\n background-color: ${props =>\n props.theme.colors.button[props.button].hover.bg};\n border-color: ${props =>\n props.theme.colors.button[props.button].hover.border};\n color: ${props => props.theme.colors.button[props.button].hover.fg};\n\n & svg {\n color: ${props => props.theme.colors.button[props.button].hover.fg};\n }\n`;\n\nexport const StyledBorderedButton = styled(StyledButton)`\n border-color: ${props =>\n props.theme.colors.button[props.button].default.border};\n border-style: solid;\n border-width: ${props => props.theme.borders.widths.md};\n padding: 1.8rem 2.5rem;\n border-radius: ${props => props.theme.colors.button.border.radius};\n\n ${props => {\n if (props.disabled) {\n return css`\n border-color: ${props => props.theme.colors.disabled};\n `;\n } else if (props.isActive) {\n return hoverActiveButtonStyles;\n } else {\n return css`\n &&:hover {\n ${hoverActiveButtonStyles}\n }\n `;\n }\n }}\n`;\n\nconst Button = ({\n isActive = false,\n bordered = true,\n button = \"default\",\n children,\n className = \"\", // hacky getting ts to stop erroring\n disabled = false,\n onClick,\n style = {}, // hacky getting ts to stop erroring\n testId\n}) => {\n if (!button || !children || !onClick || !testId) {\n return null;\n }\n\n let DisplayButton;\n if (button === \"unstyled\") {\n DisplayButton = UnstyledButton;\n } else {\n DisplayButton = bordered ? StyledBorderedButton : StyledButton;\n }\n\n return (\n \n {children}\n \n );\n};\n\nButton.propTypes = {\n bordered: PropTypes.bool,\n button: PropTypes.oneOf([\"default\", \"reversed\", \"unstyled\"]),\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n id: PropTypes.string,\n isActive: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n style: PropTypes.object,\n testId: PropTypes.string.isRequired\n};\nexport default Button;\n","// avatar images\nimport avatar_01 from \"../images/avatar_01.svg\";\nimport avatar_02 from \"../images/avatar_02.svg\";\nimport avatar_03 from \"../images/avatar_03.svg\";\nimport avatar_04 from \"../images/avatar_04.svg\";\nimport avatar_05 from \"../images/avatar_05.svg\";\nimport avatar_06 from \"../images/avatar_06.svg\";\nimport avatar_07 from \"../images/avatar_07.svg\";\nimport avatar_08 from \"../images/avatar_08.svg\";\n\nexport const avatarImages = [\n avatar_01,\n avatar_02,\n avatar_03,\n avatar_04,\n avatar_05,\n avatar_06,\n avatar_07,\n avatar_08\n];\n","export default __webpack_public_path__ + \"static/media/avatar_01.89cb474b.svg\";","export default __webpack_public_path__ + \"static/media/avatar_02.958be763.svg\";","export default __webpack_public_path__ + \"static/media/avatar_03.ddec4df3.svg\";","export default __webpack_public_path__ + \"static/media/avatar_04.8852fe6a.svg\";","export default __webpack_public_path__ + \"static/media/avatar_05.c3f48810.svg\";","export default __webpack_public_path__ + \"static/media/avatar_06.080fc822.svg\";","export default __webpack_public_path__ + \"static/media/avatar_07.9adbcbbc.svg\";","export default __webpack_public_path__ + \"static/media/avatar_08.4be1c133.svg\";","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\nimport { isArray } from \"lodash\";\n\n// styled components\nconst StyledImage = styled.img`\n ${props =>\n props.isResponsive &&\n `\n height: auto;\n width: 100%;\n max-height: inherit;\n max-width: inherit;\n `}\n`;\n\nconst Image = ({\n altText,\n isResponsive = true,\n onError = () => {\n // do nothing\n },\n src,\n testId,\n useSrcset = false,\n ...otherProps\n}) => {\n if (!altText || !src || !testId) {\n return null;\n }\n\n let srcsetString;\n if (useSrcset && isArray(src)) {\n srcsetString = src.map((s, index) => `${s} ${index + 1}x`).join(\",\");\n }\n\n return (\n onError({ e, src })}\n src={isArray(src) ? src[0] : src}\n data-testid={`${testId}-image`}\n srcSet={srcsetString}\n useSrcset={useSrcset}\n {...otherProps}\n />\n );\n};\n\nImage.propTypes = {\n className: PropTypes.string,\n altText: PropTypes.string.isRequired,\n isResponsive: PropTypes.bool,\n onError: PropTypes.func,\n src: PropTypes.oneOfType([PropTypes.array, PropTypes.string]).isRequired,\n testId: PropTypes.string.isRequired\n};\nexport default Image;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { sample } from \"lodash\";\nimport { avatarImages } from \"../../constants/widgets\";\n\n// components\nimport Image from \"../Image/Image\";\n\nconst DefaultAvatar = ({ className, testId }) => {\n if (!testId) {\n return null;\n }\n\n return (\n \n );\n};\n\nDefaultAvatar.propTypes = {\n className: PropTypes.string,\n testId: PropTypes.string.isRequired\n};\nexport default DefaultAvatar;\n","import React, { useState } from \"react\";\n\n// components\nimport DefaultAvatar from \"../DefaultAvatar/DefaultAvatar\";\nimport Image from \"../Image/Image\";\n\n// typescript props\ntype Props = {\n altText?: string;\n className?: string;\n src: string | null;\n testId?: string;\n};\n\nconst SlackAvatar = ({\n altText = \"slack avatar\",\n className,\n src,\n testId = \"testId\"\n}: Props) => {\n const [hasError, setHasError] = useState(false);\n return hasError || !src ? (\n \n ) : (\n setHasError(true)}\n src={src}\n testId={`${testId}-slack-avatar`}\n />\n );\n};\n\nexport default SlackAvatar;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Icon from \"../Icon/Icon\";\n\n// styled components\nconst Container = styled.div`\n height: 3rem;\n width: 3rem;\n font-size: 2rem;\n border: ${props => `.2rem solid ${props.theme.colors.border}`};\n border-radius: 50% 50%;\n background: ${props => props.theme.colors.all.iceman};\n color: ${props => props.theme.colors.all.wolverine};\n display: inline-block;\n padding: 0.25rem;\n text-align: center;\n`;\nconst IconAvatar = styled(Icon)`\n font-size: inherit;\n height: auto;\n color: inherit;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst CrossTeamAvatar = ({ className, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-cross-team-avatar`;\n return (\n \n \n \n );\n};\n\nexport default CrossTeamAvatar;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport moment from \"moment\";\nimport { AnnotationsInterface } from \"../../interfaces/annotations\";\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\nimport CrossTeamAvatar from \"../CrossTeamAvatar/CrossTeamAvatar\";\nimport { UserReportInterface } from \"../../interfaces/user\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { truncate } from \"lodash\";\n\nconst CommentBlock = styled.div`\n align-items: center;\n display: flex;\n flex-direction: row;\n margin-top: 1.6rem;\n`;\nconst StyledSlackAvatar = styled(SlackAvatar)`\n border: ${props => `.2rem solid ${props.theme.colors.border}`};\n border-radius: 50% 50%;\n height: 3rem;\n width: 3rem;\n align-self: flex-start;\n`;\nconst StyledCrossTeamAvatar = styled(CrossTeamAvatar)`\n height: 3rem;\n width: 3rem;\n`;\nconst UserCommentText = styled.div`\n background-color: ${props => props.theme.colors.all.white};\n font-size: 1.3rem;\n border-radius: 1rem;\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n flex: 1;\n margin-left: 1.6rem;\n padding: 1.6rem;\n`;\nconst CommentTimestamp = styled.time`\n color: ${props => props.theme.colors.all.storm};\n margin-left: 1.6rem;\n`;\nconst Name = styled.span`\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst CommentText = styled.p`\n margin: 0;\n`;\nconst Expander = styled.div`\n font-family: ${props => props.theme.fonts.primary.name}, serif;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n color: ${props => props.theme.colors.all.storm};\n cursor: pointer;\n &:hover {\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n }\n margin-top: 0.8rem;\n`;\n\nconst MAXIMUM_CHARACTER_LIMIT = 140;\n\n// typescript props\ntype Props = {\n className?: string;\n annotation: AnnotationsInterface;\n teamMember?: UserReportInterface;\n testId?: string;\n};\n\nconst UserCommentBlock = ({\n className,\n annotation,\n teamMember,\n testId = \"testId\"\n}: Props) => {\n const [showFullComment, setShowFullComment] = useState(false);\n const { trackEvent } = useTracking();\n\n function onToggleExpander(e: React.MouseEvent) {\n setShowFullComment(!showFullComment);\n trackEvent({\n e,\n label: `${testId}-comment-toggle`,\n value: `clicked to ${\n !showFullComment\n ? \"show full text for large comment\"\n : \"hide full text for large comment\"\n }`\n });\n }\n\n const commentText = annotation.userDetailedComment\n ? annotation.userDetailedComment.length <= MAXIMUM_CHARACTER_LIMIT ||\n showFullComment\n ? annotation.userDetailedComment\n : truncate(annotation.userDetailedComment, {\n length: MAXIMUM_CHARACTER_LIMIT\n })\n : null;\n\n return (\n \n {teamMember?.slackAvatar ? (\n \n ) : (\n \n )}\n \n
\n \n {teamMember?.name || annotation.userEmail}\n \n \n {moment(annotation.timestamp).fromNow()}\n \n
\n {commentText}\n {annotation.userDetailedComment &&\n annotation.userDetailedComment?.length > MAXIMUM_CHARACTER_LIMIT && (\n \n {!showFullComment ? \"...more\" : \"hide\"}\n \n )}\n
\n
\n );\n};\n\nexport default UserCommentBlock;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isUndefined, sortBy } from \"lodash\";\n\n// components\nimport Button from \"../Button/Button\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interface\nimport { AnnotationsInterface } from \"../../interfaces/annotations\";\nimport { UserReportInterface } from \"../../interfaces/user\";\nimport UserCommentBlock from \"../UserCommentBlock/UserCommentBlock\";\n\n// styled components\nconst Footer = styled.footer`\n align-items: center;\n display: flex;\n justify-content: flex-end;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n comments: Array;\n maxVisibleComments?: number;\n teamMembers: Array;\n testId?: string;\n};\n\nconst CommentsList = ({\n className,\n comments,\n maxVisibleComments,\n teamMembers,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-comments-list`;\n const { trackEvent } = useTracking();\n const sortedComments = sortBy(comments, \"timestamp\").reverse();\n const [isCollapsed, setIsCollapsed] = useState(true);\n\n function onToggleCommentsLength(\n e: React.MouseEvent\n ) {\n setIsCollapsed(!isCollapsed);\n trackEvent({\n e,\n label: `${thisTestId}-comments-toggle`,\n value: `clicked to ${!isCollapsed ? \"show comments\" : \"hide comments\"}`\n });\n }\n\n const visibleComments =\n isUndefined(maxVisibleComments) || !isCollapsed\n ? sortedComments\n : sortedComments.slice(0, maxVisibleComments);\n\n return (\n
\n {visibleComments.reverse().map((annotation, index) => {\n const teamMember = teamMembers.find(\n member => member.id === annotation.userId\n );\n return (\n \n );\n })}\n {isUndefined(maxVisibleComments) ||\n sortedComments.length === maxVisibleComments ? null : (\n
\n \n {isCollapsed ? `${sortedComments.length} comments` : \"hide\"}\n \n
\n )}\n
\n );\n};\n\nexport default CommentsList;\n","import React, { Component } from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\nimport Overlay from \"react-bootstrap/Overlay\";\n\n// styled components\nconst StyledTooltip = styled.div``;\nconst StyledTooltipTrigger = styled.div`\n cursor: pointer;\n display: inline-block;\n`;\nconst StyledTooltipPopup = styled.div`\n background: #fff;\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n padding: 1rem;\n /* ludicrous zindex for popping above modal */\n z-index: 2000;\n\n & p {\n margin-bottom: 0;\n }\n\n & ul {\n list-style-type: initial;\n padding-left: 2rem;\n margin: 0;\n }\n`;\n\nclass Tooltip extends Component {\n constructor(props) {\n super(props);\n this.state = {\n show: false\n };\n this.target = React.createRef();\n }\n\n setShow = show => {\n this.setState({ show });\n };\n\n render() {\n const {\n className,\n onShowTooltip,\n placement,\n popupContent,\n testId,\n trigger\n } = this.props;\n if (!popupContent || !testId || !trigger) {\n return null;\n }\n\n return (\n \n {\n this.setShow(true);\n onShowTooltip(e);\n }}\n onMouseLeave={() => this.setShow(false)}\n >\n {trigger}\n \n \n {props => (\n {popupContent}\n )}\n \n \n );\n }\n}\n\nTooltip.defaultProps = {\n onShowTooltip: () => {\n // do nothing\n },\n placement: \"right\"\n};\n\nTooltip.propTypes = {\n className: PropTypes.string,\n placement: PropTypes.oneOf([\"top\", \"right\", \"bottom\", \"left\"]),\n popupContent: PropTypes.oneOfType([PropTypes.element, PropTypes.string])\n .isRequired,\n trigger: PropTypes.oneOfType([PropTypes.element, PropTypes.string])\n .isRequired,\n onShowTooltip: PropTypes.func,\n testId: PropTypes.string.isRequired\n};\n\nexport default Tooltip;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport moment from \"moment\";\n\nexport const ReactionList = styled.ul`\n list-style-type: none;\n padding-left: 0 !important;\n margin: 0;\n`;\n\nexport const ReactionTimestamp = styled.time`\n color: ${props => props.theme.colors.all.storm};\n text-align: right;\n padding-left: 1rem;\n`;\n\nexport const ReactionLineItem = styled.li`\n font-size: 1.1rem;\n list-style-type: none;\n margin: 0;\n display: \"flex\";\n justify-content: space-between;\n`;\n\nconst ReactionTooltip = ({ annotations, teamMembers }) => {\n return (\n \n {annotations.map((anno, index) => {\n const userName =\n teamMembers.find(member => member.id === anno.userId)?.[\"name\"] ||\n anno.userEmail;\n return (\n \n {userName}{\" \"}\n \n {moment(anno.timestamp).fromNow()}\n \n \n );\n })}\n \n );\n};\n\nexport default ReactionTooltip;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { useSelector } from \"react-redux\";\nimport { get } from \"lodash\";\nimport {\n orderedAnnotationStatusTypes,\n StatusIconMap\n} from \"../../constants/constants\";\n\nimport Icon from \"../Icon/Icon\";\nimport Tooltip from \"../Tooltip/Tooltip\";\n\nimport ReactionTooltip from \"./ReactionTooltip.js\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\nconst PillRow = styled.div`\n display: flex;\n flex-direction: row;\n padding: 0.25rem;\n`;\nconst ReactionPill = styled.div`\n background-color: ${props => props.theme.colors.all.white};\n display: flex;\n align-items: center;\n font-size: 1.1rem;\n border: ${props =>\n props.isSelected\n ? `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.wolverine}`\n : \"none\"};\n border-radius: 3rem;\n padding: 0.5rem 1rem;\n margin: 0.5rem 0.25rem;\n cursor: pointer;\n .reaction-pill-content {\n display: flex;\n justify-content: center;\n margin-right: ${props => (props.showCount ? \"0.25rem\" : \"0rem\")};\n & :hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n }\n }\n .reaction-count {\n font-size: 1.3rem;\n font-family: \"IBM Plex Mono\";\n }\n`;\n\nconst ReactionIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n width: 2rem;\n font-size: ${props => (props.showCount ? \"1.3rem\" : \"2rem\")};\n height: ${props => (props.showCount ? \"1.3rem\" : \"inherit\")};\n align-self: center;\n`;\n\nconst ReactionPills = ({\n annotations,\n contextItem,\n handleAnnotationClick,\n showCount = true\n}) => {\n const { urlParams } = useUrlParams();\n const activeTeam = urlParams.team;\n const teamMembers = activeTeam?.teamMembers || [];\n\n const userId = useSelector(state => get(state, \"user.id\"));\n const [hoverIconParty, setHoverIconParty] = useState(StatusIconMap.CELEBRATE);\n const [hoverIconDisappointed, setHoverIconDisappointed] = useState(\n StatusIconMap.DISAPPOINTED\n );\n // FIXME: this is a TERRIBLE hack to accomodate design wanting custom images on hover for some of these icons which are not available in current FontAwesome version. Remove once migrated to FontAwesome v6\n const handleHover = (status, isMouseEnter, e) => {\n e.preventDefault();\n if (status === StatusIconMap.CELEBRATE) {\n setHoverIconParty(\n `${StatusIconMap.CELEBRATE}${isMouseEnter ? \"-aurora\" : \"\"}`\n );\n } else {\n setHoverIconDisappointed(\n `${StatusIconMap.DISAPPOINTED}${isMouseEnter ? \"-aurora\" : \"\"}`\n );\n }\n };\n\n return (\n \n {orderedAnnotationStatusTypes.map((statusEntry, index) => {\n const annotationCheckins = annotations.filter(\n annotation => annotation.userAnnotationCheckinStatus === statusEntry\n );\n const iconKey = StatusIconMap[statusEntry];\n\n const statusCount = annotationCheckins.length;\n\n const isAuroraImage =\n iconKey === StatusIconMap.CELEBRATE ||\n iconKey === StatusIconMap.DISAPPOINTED;\n\n const iconToShow =\n iconKey === StatusIconMap.CELEBRATE\n ? hoverIconParty\n : iconKey === StatusIconMap.DISAPPOINTED\n ? hoverIconDisappointed\n : iconKey;\n\n const pillToDisplay = (\n anno.userId === userId)}\n showCount={showCount}\n key={index}\n onClick={event =>\n handleAnnotationClick(contextItem, statusEntry, event)\n }\n onMouseEnter={e =>\n isAuroraImage && handleHover(StatusIconMap[statusEntry], true, e)\n }\n onMouseLeave={e =>\n isAuroraImage && handleHover(StatusIconMap[statusEntry], false, e)\n }\n data-testid=\"reaction-pill\"\n >\n {\" \"}\n {showCount ? (\n \n {statusCount}\n \n ) : null}\n \n );\n return showCount && statusCount > 0 ? (\n \n }\n />\n ) : (\n pillToDisplay\n );\n })}\n \n );\n};\n\nexport default ReactionPills;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Button from \"../Button/Button\";\nimport Icon from \"../Icon/Icon\";\n\n// styled components\nconst StyledIconClose = styled(Icon)`\n color: ${props => props.theme.colors.modal.closeButton};\n`;\nconst StyledButton = styled(Button)`\n font-size: 2rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n onClick: (e: React.MouseEvent) => void;\n testId?: string;\n};\n\nconst CloseButton = ({ className, onClick, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-close`;\n return (\n \n \n \n );\n};\n\nexport default CloseButton;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled, { createGlobalStyle, css } from \"styled-components/macro\";\n\n// components\nimport BootstrapModal from \"react-bootstrap/Modal\";\nimport BootstrapModalBody from \"react-bootstrap/ModalBody\";\nimport BootstrapModalHeader from \"react-bootstrap/ModalHeader\";\nimport CloseButton from \"../CloseButton/CloseButton\";\n\nconst GlobalStyle = createGlobalStyle`\n .modal-dialog {\n ${props => {\n const borderString = `${props.theme.borders.widths.md} solid ${props.theme.colors.border}`;\n\n return css`\n border: ${borderString};\n `;\n }};\n max-width: 120rem;\n }\n\n .modal-content {\n border-radius: 0;\n }\n\n .meeting-classification-override-modal,\n .flexible-teams-modal {\n align-items: center;\n display: flex;\n height: 100vh;\n border: 0;\n margin: auto;\n max-width: 64rem;\n\n & .modal-header {\n padding: 2rem 2rem 0;\n }\n\n & .modal-body {\n padding: 0 2rem 2rem;\n }\n\n & .modal-content {\n border: 0;\n }\n }\n\n .annotation-modal .modal-content {\n background-color: ${props => props.theme.colors.all.lightJean};\n }\n\n .annotation-modal.modal-dialog {\n max-width: 79.2rem;\n border: none;\n .modal-body {\n padding: 3.2rem 2.4rem;\n }\n .modal-header {\n padding: 3.2rem 2.4rem 0 2.4rem;\n align-items: flex-end;\n }\n }\n\n .customization-modal.modal-dialog {\n max-width: 66rem;\n border: none;\n .modal-body {\n padding: 3.2rem 2.4rem;\n }\n .modal-header {\n padding: 3.2rem 2.4rem 0 2.4rem;\n align-items: flex-end;\n }\n }\n\n &.ui-filter-overlay-modal {\n display: none;\n }\n`;\n\n// styled components\n// FIXME: hacky fix for react - bootstrap passing non - dom\n// attributes through to actual dom\n// https://gitter.im/styled-components/styled-components?at=5941015fe531dbc905e05a93\n// prefer to fix this by fixing the styling here, maybe adding a wrapper so that\n// we're not styling the actual react-boostrap components? or maybe not having\n// to bespoke style them but using modal as-is?\nconst StyledBootstrapModalHeader = styled(({ hasHeaderContent, ...rest }) => (\n \n))`\n border: 0;\n display: flex;\n justify-content: ${props =>\n props.hasHeaderContent ? \"space-between\" : \"flex-end\"};\n padding-right: 1.5rem;\n padding-top: 3.2rem;\n padding-bottom: 0;\n\n &:empty {\n padding: 0;\n }\n`;\n\nconst Modal = ({\n allowClose = true,\n dialogClassName,\n onHide = () => {\n // do nothing\n },\n onShow = () => {\n // do nothing\n },\n popupContent,\n headerContent = null,\n testId\n}) => {\n if (!popupContent || !testId) {\n return null;\n }\n return (\n
\n \n \n onShow({ type: \"load\", target: { id: `${testId}-modal` } })\n }\n show={true}\n >\n \n {headerContent}\n {allowClose && }\n \n {popupContent}\n \n
\n );\n};\n\nModal.propTypes = {\n allowClose: PropTypes.bool,\n dialogClassName: PropTypes.string,\n onHide: PropTypes.func,\n onShow: PropTypes.func,\n popupContent: PropTypes.oneOfType([\n PropTypes.array,\n PropTypes.element,\n PropTypes.string\n ]).isRequired,\n testId: PropTypes.string.isRequired\n};\nexport default Modal;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport CommentsList from \"../CommentsList/CommentsList\";\nimport ReactionPills from \"./ReactionPills\";\nimport Icon from \"../Icon/Icon\";\nimport styled from \"styled-components/macro\";\nimport Modal from \"../Modal/Modal\";\nimport { useTracking } from \"../../hooks/useTracking\";\n\nconst ModalContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst CommentIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n margin-right: 0.8rem;\n`;\nconst CommentButton = styled(\"button\")`\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.lightJean}`};\n background-color: ${props => props.theme.colors.all.white};\n font-size: 1.1rem;\n padding: 0.5rem;\n margin-right: 1rem;\n`;\n\nconst CommentTextArea = styled(\"textarea\")`\n align-self: center;\n width: 100%;\n border: none;\n height: 11rem;\n`;\n\nconst SubmitButton = styled(\"input\")`\n max-width: 12rem;\n height: 3.2rem;\n background-color: ${props =>\n props.disabled\n ? props.theme.colors.all.storm\n : props.theme.colors.all.auroraTeal};\n align-self: flex-end;\n color: ${props => props.theme.colors.all.white};\n border: none;\n font-size: 1.3rem;\n`;\n\nconst Subheader = styled.div`\n border-bottom: ${props => `1px solid ${props.theme.colors.all.jean}`};\n font-size: 1.3rem;\n margin-top: ${props => `${!!props.write ? \"3.2rem\" : \"1.6rem\"}`};\n padding-bottom: 0.8rem;\n line-height: 1;\n`;\n\nconst CommentForm = styled.form`\n display: flex;\n flex-direction: column;\n padding-top: 0.8rem;\n`;\n\nconst AnnotationsModal = ({\n className,\n context,\n annotations,\n teamMembers,\n handleAnnotationClick,\n triggerWriteTextComment,\n setActiveIdToAnnotate,\n isModalOpen,\n headerContent,\n testId = \"testId\"\n}) => {\n const [textComment, setTextComment] = useState(\"\");\n const { trackEvent } = useTracking();\n const thisTestId = `${testId}-annotations-modal`;\n\n function onShowModal(event, context) {\n trackEvent({\n e: event,\n label: `${thisTestId}-open`,\n value: `opened annotation modal for ${context.id}`\n });\n }\n\n return (\n <>\n setActiveIdToAnnotate(context.id)}\n >\n \n {\" \"}\n Comment\n \n \n {isModalOpen === true && (\n setActiveIdToAnnotate(\"\")}\n onShow={event => onShowModal(event, annotations)}\n popupContent={\n \n \n \n {\" \"}\n Comments (\n {\n annotations.filter(\n annotation => annotation.userDetailedComment !== \"\"\n ).length\n }\n )\n \n annotation.userDetailedComment !== \"\"\n )}\n teamMembers={teamMembers}\n testId={thisTestId}\n />\n Write a comment\n {\n triggerWriteTextComment(context, textComment, event);\n setTextComment(\"\");\n }}\n >\n \n \n \n \n }\n headerContent={headerContent || null}\n testId={thisTestId}\n />\n )}\n \n );\n};\n\nAnnotationsModal.propTypes = {\n className: PropTypes.string,\n testId: PropTypes.string\n};\nexport default AnnotationsModal;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Icon from \"../Icon/Icon\";\n\n// constants\nimport { directionalityTypes } from \"../../constants/constants\";\n\n// styled components\nconst Container = styled.div<{ direction: string; isInverted: boolean }>`\n color: ${props =>\n props.isInverted\n ? props.direction === directionalityTypes.NEGATIVE\n ? props.theme.colors.all.petra\n : props.theme.colors.all.cyclops\n : props.direction === directionalityTypes.POSITIVE\n ? props.theme.colors.all.petra\n : props.theme.colors.all.cyclops};\n display: inline-block;\n`;\nconst Value = styled.span`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n`;\nconst Arrow = styled(Icon)`\n color: inherit;\n margin-left: 0.5em;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n direction: string;\n display?: \"number\" | \"text\";\n isInverted?: boolean;\n testId?: string;\n unit?: string;\n value: number;\n};\n\nconst ValueWithDirectionality = ({\n className,\n direction,\n display = \"number\",\n isInverted = false,\n testId = \"testId\",\n unit,\n value\n}: Props): ReactElement | null => {\n const thisTestId = `${testId}-value-with-directionality`;\n if (value === 0) {\n return null;\n }\n const absoluteValue = Math.abs(value);\n const displayValue =\n value > 0 ? (\n display === \"number\" ? (\n <>\n +{absoluteValue}\n \n ) : isInverted ? (\n \"Worse\"\n ) : (\n \"Better\"\n )\n ) : display === \"number\" ? (\n <>\n -{absoluteValue}\n \n ) : isInverted ? (\n \"Better\"\n ) : (\n \"Worse\"\n );\n\n return (\n \n {displayValue}\n {display === \"number\" ? unit : null}\n \n \n );\n};\n\nexport default ValueWithDirectionality;\n","import {\n CycleTimeInterface,\n CycleTimeStageInterface\n} from \"../interfaces/work-items\";\nimport { compact, isFinite, isNull, sum } from \"lodash\";\nimport { cycleTimeStages, directionalityTypes } from \"../constants/constants\";\nimport { CycleTimeStageTypes } from \"../interfaces/constants\";\nimport { CycleTimeUnit, OpMetricUnit } from \"../interfaces/ops-metrics\";\n\nexport const getValueInHours = (unit: OpMetricUnit, value: number): number =>\n unit === \"DAYS\" ? value * 24 : value;\n\nexport const getCycleTimeStageInHours = (\n cycleTime: Array\n): number =>\n sum(\n Object.values(cycleTime)\n .filter(c => !!c?.unit)\n .map((total: CycleTimeStageInterface) =>\n getValueInHours(total.unit, total.value)\n )\n );\nexport function rollupCycleTime(\n cycleTime: CycleTimeInterface\n): Array {\n if (isNull(cycleTime)) {\n return [\n {\n value: 0,\n unit: \"DAYS\"\n }\n ];\n }\n\n return splitCycleTimeHours(\n getCycleTimeStageInHours(Object.values(cycleTime))\n );\n}\n\nexport const splitCycleTimeHours = (\n cycleTimeHours: number,\n roundHours = true\n): Array => {\n const cycleTimeDays = Math.floor(cycleTimeHours / 24);\n const modHours = cycleTimeHours % 24;\n const cycleTimeRemainderHours = roundHours ? Math.round(modHours) : modHours;\n return compact([\n cycleTimeDays >= 0\n ? {\n value: cycleTimeDays,\n unit: \"DAYS\"\n }\n : null,\n cycleTimeRemainderHours >= 0\n ? {\n value: cycleTimeRemainderHours,\n unit: \"HOURS\"\n }\n : null\n ]);\n};\n\nfunction getMedianCycleStageTime(\n stageTimes: Array\n): CycleTimeStageInterface {\n const stageTimesInHours = stageTimes\n .map(s => (s.unit === \"DAYS\" ? s.value * 24 : s.value))\n .sort((v1, v2) => v1 - v2);\n\n const medianIndex = Math.floor(stageTimesInHours.length / 2);\n const medianStageHours = !stageTimesInHours.length\n ? 0\n : stageTimesInHours.length % 2 === 0\n ? (stageTimesInHours[medianIndex - 1] + stageTimesInHours[medianIndex]) /\n 2.0\n : stageTimesInHours[medianIndex];\n\n return {\n unit: medianStageHours >= 24 ? \"DAYS\" : \"HOURS\",\n value:\n medianStageHours >= 24\n ? Math.floor(medianStageHours / 24)\n : Math.round(medianStageHours)\n };\n}\n\nexport function getMedianCycleTime(\n cycleTimes: Array\n): CycleTimeInterface | null {\n if (!cycleTimes.length) return null;\n\n // build cycle time object\n const medians: CycleTimeInterface = {};\n ([\n cycleTimeStages.DEV,\n cycleTimeStages.WAITING_FOR_REVIEW,\n cycleTimeStages.REVIEW,\n cycleTimeStages.RELEASE\n ] as Array).forEach(stageKey => {\n const medianTimes = compact(\n cycleTimes.filter(c => !!c[stageKey]?.unit).map(c => c[stageKey])\n );\n if (!!medianTimes.length) {\n medians[stageKey] = getMedianCycleStageTime(medianTimes);\n }\n });\n return medians;\n}\n\nexport const getCycleTimeDelta = (\n current?: Array | null,\n previous?: Array | null\n):\n | (CycleTimeStageInterface & {\n direction: string;\n isInverted: boolean;\n })\n | null => {\n if (!!current && !!previous) {\n const deltaInHours =\n getCycleTimeStageInHours(current) - getCycleTimeStageInHours(previous);\n\n if (!!deltaInHours) {\n const splitDelta = splitCycleTimeHours(Math.abs(deltaInHours));\n const unit =\n Math.abs(deltaInHours) >= 24 ? \"DAYS\" : (\"HOURS\" as CycleTimeUnit);\n return {\n direction:\n deltaInHours < 0\n ? directionalityTypes.NEGATIVE\n : directionalityTypes.POSITIVE,\n isInverted: true,\n unit,\n value:\n (splitDelta.find(s => s.unit === unit)?.value as number) *\n (deltaInHours < 0 ? -1 : 1)\n };\n }\n }\n return null;\n};\n\nexport const filterTruthyCycleTimeValues = (\n stage: Array\n): Array => {\n return stage.every(s => s.value === 0)\n ? stage.filter(s => s.unit === \"HOURS\")\n : stage.filter(s => isFinite(s.value) && s.value > 0);\n};\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { startCase, capitalize } from \"lodash\";\n\n// interfaces\nimport { CycleTimeStageTypes } from \"../../interfaces/constants\";\n\n// styled components\nconst Container = styled.header<{\n stageKey: keyof CycleTimeStageTypes;\n}>`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n\n &::before {\n content: \"\";\n display: inline-block;\n height: 0.8em;\n margin-right: 0.8em;\n width: 0.8em;\n background: ${props =>\n props.theme.colors.chart.cycleTime[props.stageKey].backgroundColor};\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n stageKey: keyof CycleTimeStageTypes;\n testId?: string;\n};\n\nconst CycleTimeStageHeader = ({\n className,\n stageKey,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-cycle-time-stage-header`;\n return (\n \n {startCase(capitalize(stageKey))}\n \n );\n};\n\nexport default CycleTimeStageHeader;\n","import React, { ReactElement } from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { capitalize, isNil } from \"lodash\";\n\n// components\nimport ValueWithDirectionality from \"../ValueWithDirectionality/ValueWithDirectionality\";\n\n// interfaces\nimport { CycleTimeStageInterface } from \"../../interfaces/work-items\";\nimport { CycleTimeStageTypes } from \"../../interfaces/constants\";\nimport { getCycleTimeStageInHours } from \"../../utils/cycle-time\";\nimport CycleTimeStageHeader from \"../CycleTimeStageHeader/CycleTimeStageHeader\";\n\n// styled components\nconst ValuesContainer = styled.div<{ display: displayTypes }>`\n align-items: baseline;\n display: inline-flex;\n`;\nconst NumberAndUnit = styled.span<{\n display: displayTypes;\n stageKey?: keyof CycleTimeStageTypes;\n}>`\n white-space: nowrap;\n &:not(:only-of-type):first-of-type {\n ${props => {\n if (props.display === \"inline\") {\n return css`\n &::after {\n content: \", \";\n }\n `;\n } else {\n return css`\n margin-right: 0.25em;\n `;\n }\n }};\n }\n\n ${props => {\n if (props.display === \"breakoutBlock\" && !!props.stageKey) {\n return css`\n display: block;\n padding: 0.25rem 1rem;\n min-width: 4rem;\n color: ${props.theme.colors.chart.cycleTime[\n props.stageKey as keyof CycleTimeStageTypes\n ].color};\n background: ${props.theme.colors.chart.cycleTime[\n props.stageKey as keyof CycleTimeStageTypes\n ].backgroundColor};\n `;\n }\n }}\n`;\nconst Sign = styled.span`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst Number = styled.span<{ display: displayTypes }>`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n font-size: 1em;\n font-weight: ${props =>\n props.display === \"inline\" || props.display === \"breakoutBlock\"\n ? props.theme.fonts.primary.weights.regular\n : props.theme.fonts.primary.weights.bold};\n line-height: 1;\n`;\nconst NA = styled.span`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n font-size: 1em;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n line-height: 1;\n`;\nconst Unit = styled.span<{ display: displayTypes }>`\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n ${props => {\n if (\n props.display === \"breakoutBlock\" ||\n props.display === \"inlineAbbreviation\"\n ) {\n return css`\n text-transform: lowercase;\n `;\n }\n }};\n`;\nconst Delta = styled(ValueWithDirectionality)<{ mode: displayTypes }>`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n white-space: nowrap;\n ${props => {\n if (props.mode === \"inline\") {\n return css`\n margin-left: 0.5em;\n `;\n }\n }};\n`;\nconst MissingStage = styled.span`\n display: inline-block;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n line-height: 1.2;\n`;\n\n// typescript props\ntype displayTypes =\n | \"breakout\"\n | \"breakoutBlock\"\n | \"inline\"\n | \"inlineAbbreviation\"\n | \"rollup\";\ntype Props = {\n className?: string;\n stage: Array | null;\n delta?:\n | (CycleTimeStageInterface & {\n direction: string;\n isInverted?: boolean;\n })\n | null;\n display?: displayTypes;\n stageKey?: keyof CycleTimeStageTypes;\n testId?: string;\n};\n\nconst CycleTimeValueDisplay = ({\n className,\n stage,\n delta,\n display = \"inline\",\n stageKey,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-cycle-time-value-display`;\n const stageCycleTimeInHours = !!stage && getCycleTimeStageInHours(stage);\n return (\n
\n {display === \"breakout\" && !!stageKey ? (\n \n ) : null}\n \n {isNil(stage) ? (\n !!stageKey ? (\n \n \n No PRs\n {display === \"breakoutBlock\" ? null : (\n <>\n
\n in this stage\n \n )}\n
\n \n ) : (\n \n N/A\n \n )\n ) : stage.every(s => s.value === 0) && !display.startsWith(\"inline\") ? (\n \n <\n 1\n \n {display === \"breakoutBlock\" ? \"H\" : \"Hour\"}\n \n \n ) : (\n stage.map((number: CycleTimeStageInterface) => {\n const displayUnit =\n display === \"breakoutBlock\" ||\n display === \"inlineAbbreviation\" ? (\n number.unit.substring(0, 1)\n ) : (\n <>\n {\" \"}\n {capitalize(\n stageCycleTimeInHours < 1 && display !== \"inline\"\n ? number.unit.substring(0, number.unit.length - 1)\n : number.value === 1\n ? number.unit.substring(0, number.unit.length - 1)\n : number.unit\n )}\n \n );\n return (\n \n {number.value}\n {displayUnit}\n \n );\n })\n )}\n
\n {isNil(delta) ? null : (\n \n )}\n
\n );\n};\n\nexport default CycleTimeValueDisplay;\n","import { isNil } from \"lodash\";\nimport { currentTheme } from \"../themes/currentTheme\";\n\n/**\n * translate hex code to rgb(a) tuples for css\n * https://css-tricks.com/converting-color-spaces-in-javascript/\n *\n * @param {Object} parameters - hexcode parameters\n * @param {String} hex - hex code\n * @param {Number} opacity - desired opacity for rgba value\n *\n */\nexport const hexToRgb = ({ hex, opacity }) => {\n let r = 0,\n g = 0,\n b = 0;\n\n r = \"0x\" + hex[1] + hex[2];\n g = \"0x\" + hex[3] + hex[4];\n b = \"0x\" + hex[5] + hex[6];\n\n if (!isNil(opacity)) {\n return `rgba(${+r}, ${+g}, ${+b}, ${opacity})`;\n }\n return `rgb(${+r}, ${+g}, ${+b})`;\n};\n\nexport const bgToFgColor = bg =>\n currentTheme.colors.reversed.includes(bg)\n ? currentTheme.colors.all.white\n : currentTheme.colors.all.wolverine;\n\nexport const getColorForDelta = (delta, isInverted) => {\n if (!delta) {\n return currentTheme.colors.all.storm;\n }\n if (delta < 0) {\n return isInverted\n ? currentTheme.colors.all.petra\n : currentTheme.colors.all.cyclops;\n }\n return isInverted\n ? currentTheme.colors.all.cyclops\n : currentTheme.colors.all.petra;\n};\n","// my-theme.ts\nimport { DefaultTheme } from \"styled-components/macro\";\nimport { hexToRgb } from \"../utils/color\";\nimport { mapValues } from \"lodash\";\nimport { healthScoreTypes } from \"../constants/constants\";\nimport { CycleTimeStageTypes } from \"../interfaces/constants\";\n\n// VARIABLES\n// from bootstrap grid\nconst breakpointsValues = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1450\n};\n\n// COLORS\n\n// brand\nconst auroraTeal = \"#008080\";\nconst jean = \"#e2deda\";\nconst lightJean = \"#edeae8\";\nconst lightMarvel = \"#d7ffe1\";\nconst marvelMint = \"#aaffc3\";\nconst storm = \"#808080\";\nconst white = \"#ffffff\";\nconst wolverine = \"#111111\";\n\n// other\nconst archangel = \"#46f0f0\";\nconst banshee = \"#bcf60c\";\nconst beast = \"#4363d8\";\nconst cyclops = \"#e41e26\";\nconst gambit = \"#ffd8b1\";\nconst iceman = \"#cfe6ff\";\nconst jubilee = \"#fffac8\";\nconst juggernaut = \"#9a6324\";\nconst magma = \"#800000\";\nconst magneto = \"#e6beff\";\nconst nightcrawler = \"#000075\";\nconst petra = \"#3cb44b\";\nconst phoenix = \"#f58231\";\nconst pixie = \"#f032e6\";\nconst professorX = \"#808000\";\nconst rogue = \"#ffe119\";\nconst sunfire = \"#fabebe\";\nconst thunderbird = \"#911eb4\";\n\n// and extend them!\ndeclare module \"styled-components\" {\n export interface DefaultTheme {\n breakpoints: {\n sm: string;\n md: string;\n lg: string;\n xl: string;\n xxl: string;\n };\n breakpointsValues: {\n sm: number;\n md: number;\n lg: number;\n xl: number;\n xxl: number;\n };\n borders: {\n widths: {\n sm: string;\n md: string;\n lg: string;\n };\n };\n colors: {\n all: {\n [key: string]: string;\n };\n reversed: Array;\n border: string;\n borderedBox: {\n border: string;\n };\n brand: {\n wolverine: string;\n storm: string;\n jean: string;\n marvelMint: string;\n auroraTeal: string;\n white: string;\n };\n breadcrumb: {\n icon: string;\n };\n button: {\n disabled: {\n default: { bg: string; border: string; fg: string };\n hover: { bg: string; border: string; fg: string };\n };\n reversed: {\n default: { bg: string; border: string; fg: string };\n hover: { bg: string; border: string; fg: string };\n };\n default: {\n default: { bg: string; border: string; fg: string };\n hover: { bg: string; border: string; fg: string };\n };\n unstyled: {\n default: {\n bg: string;\n border: string;\n fg: string;\n };\n hover: { bg: string; border: string; fg: string };\n };\n border: {\n thickness: string;\n radius: string;\n };\n };\n card: {\n bg: string;\n };\n carousel: {\n icon: string;\n };\n chart: {\n text: string;\n deepWorkByIc: {\n warning: string;\n ramp: Array;\n scheduled: string;\n available: string;\n };\n cycleTime: {\n [key in keyof CycleTimeStageTypes]: {\n color: string;\n backgroundColor: string;\n };\n };\n storyPoints: {\n marker: {\n fill: string;\n stroke: string;\n };\n };\n alwaysOnRisk: {\n normal: string;\n \"above normal\": string;\n high: string;\n dash: string;\n };\n alwaysOnRiskTrend: {\n marker: {\n fill: {\n HIGH: string;\n ABOVE_NORMAL: string;\n NORMAL: string;\n };\n stroke: string;\n opacity: {\n HIGH: number;\n ABOVE_NORMAL: number;\n NORMAL: number;\n };\n };\n };\n meetingClassifications: {\n [key: string]: string;\n };\n prCadence: {\n prs: string;\n reviewTime: string;\n marker: { fill: string; stroke: string };\n column: {\n fill: string;\n stroke: string;\n };\n };\n deepWorkTime: {\n user: string;\n team: string;\n marker: { fill: string; stroke: string };\n column: {\n fill: string;\n stroke: string;\n };\n };\n meetingTime: {\n team: string;\n user: string;\n marker: { fill: string; stroke: string };\n column: {\n fill: string;\n stroke: string;\n };\n };\n healthFactors: {\n [key: string]: string;\n };\n };\n disabled: string;\n dropdown: {\n text: string;\n indicator: string;\n option: {\n hover: string;\n selected: string;\n selectedHover: string;\n };\n };\n expander: {\n border: string;\n icon: string;\n };\n featuredContent: {\n bg: string;\n text: { default: string; reversed: string; bg: string };\n };\n feedback: {\n header: string;\n };\n highlight: string;\n icon: string;\n avatarIcons: Array;\n iconInfo: {\n light: string;\n dark: string;\n };\n link: {\n color: string;\n hover: {\n color: string;\n background: string;\n };\n };\n modal: {\n closeButton: string;\n };\n overlay: {\n background: string;\n popupContent: {\n background: string;\n border: string;\n };\n };\n pipedList: string;\n recommendation: {\n bg: string;\n header: { bg: string; fg: string };\n subHeader: string;\n };\n scheduleOptionStatus: {\n ideal: string;\n \"minimal-conflict\": string;\n };\n signalHealth: {\n [key: string]: string;\n };\n relativeHealth: {\n [key: string]: string;\n };\n statusMessage: {\n focus: string;\n success: string;\n warning: string;\n };\n stepper: {\n indicators: string;\n };\n table: {\n hover: string;\n };\n text: {\n body: string;\n highlight: string;\n strong: string;\n };\n textFlag: string;\n texturedContainer: {\n white: { bg: string };\n lightGrey: { bg: string };\n darkGrey: { bg: string; fg: string };\n teal: { bg: string; fg: string };\n };\n tooltip: {\n popupShadow: string;\n };\n uiBackground: string;\n uplevelFooter: {\n color: string;\n border: string;\n };\n validationMessage: {\n success: {\n bg: string;\n fg: string;\n };\n warning: {\n bg: string;\n fg: string;\n };\n };\n widgetHeader: { text: string };\n };\n fonts: {\n primary: {\n name: string;\n sizes: {\n xl: string;\n lg: string;\n md: string;\n sm: string;\n xs: string;\n };\n weights: {\n hairline: number;\n thin: number;\n ultraLight: number;\n light: number;\n semiLight: number;\n regular: number;\n book: number;\n medium: number;\n demiBold: number;\n bold: number;\n extraBold: number;\n black: number;\n };\n };\n header: {\n name: string;\n sizes: {\n xl: string;\n lg: string;\n md: string;\n sm: string;\n xs: string;\n };\n weights: {\n demiBold: number;\n extraBold: number;\n };\n };\n subheader: {\n name: string;\n sizes: {\n xl: string;\n lg: string;\n md: string;\n sm: string;\n xs: string;\n };\n weights: {\n ultraLight: number;\n light: number;\n regular: number;\n bold: number;\n extraBold: number;\n black: number;\n };\n };\n };\n grid: {\n columnWidth: string;\n gap: string;\n sidebar: string;\n sidebarGutter: string;\n gridOffset: string;\n };\n charts: {\n series: {\n opacity: {\n full: number;\n partial: number;\n };\n };\n };\n }\n}\n\n// theme values\nexport const currentTheme: DefaultTheme = {\n breakpoints: mapValues(breakpointsValues, (b: number) => `${b}px`),\n breakpointsValues,\n borders: {\n widths: {\n sm: \"0.1rem\",\n md: \"0.3rem\",\n lg: \"0.5rem\"\n }\n },\n colors: {\n all: {\n wolverine,\n storm,\n jean,\n lightJean,\n marvelMint,\n auroraTeal,\n white,\n archangel,\n banshee,\n beast,\n cyclops,\n gambit,\n iceman,\n jubilee,\n juggernaut,\n magma,\n magneto,\n nightcrawler,\n petra,\n phoenix,\n pixie,\n professorX,\n rogue,\n sunfire,\n thunderbird\n },\n reversed: [\n beast,\n cyclops,\n magma,\n nightcrawler,\n professorX,\n thunderbird,\n juggernaut,\n pixie,\n petra,\n phoenix\n ],\n border: wolverine,\n borderedBox: {\n border: wolverine\n },\n brand: {\n wolverine,\n storm,\n jean,\n marvelMint,\n auroraTeal,\n white\n },\n breadcrumb: {\n icon: jean\n },\n button: {\n disabled: {\n default: { bg: jean, border: storm, fg: storm },\n hover: { bg: jean, border: storm, fg: storm }\n },\n reversed: {\n default: { bg: jean, border: wolverine, fg: wolverine },\n hover: { bg: marvelMint, border: wolverine, fg: wolverine }\n },\n default: {\n default: { bg: auroraTeal, border: wolverine, fg: white },\n hover: { bg: marvelMint, border: wolverine, fg: wolverine }\n },\n unstyled: {\n default: {\n bg: \"transparent\",\n border: \"transparent\",\n fg: wolverine\n },\n hover: { bg: marvelMint, border: \"transparent\", fg: wolverine }\n },\n border: {\n thickness: \"3px solid\",\n radius: \"15% / 50%\"\n }\n },\n card: {\n bg: jean\n },\n carousel: {\n icon: storm\n },\n chart: {\n text: wolverine,\n healthFactors: {\n averageHealth: beast,\n peopleHealth: auroraTeal,\n projectHealth: nightcrawler,\n ALWAYS_ON: phoenix,\n CHAT_INTERRUPTIONS: professorX,\n CONTEXT_SWITCHING: thunderbird,\n CONTEXT_SWITCHING_TOTAL: thunderbird,\n CONTEXT_SWITCHING_TOP_PRIORITY_BUGS: cyclops,\n CONTEXT_SWITCHING_MEETINGS: magneto,\n CONTEXT_SWITCHING_CHAT_CHANNELS: professorX,\n CONTEXT_SWITCHING_PR_REPOS: banshee,\n CONTEXT_SWITCHING_JIRA_EPICS: nightcrawler,\n DEEP_WORK: auroraTeal,\n ISSUES_ADDED: magma,\n ISSUES_CARRYOVER: juggernaut,\n ISSUES_CLOSED: sunfire,\n ISSUES_WITH_DESCRIPTIONS: pixie,\n ISSUES_WITH_STORY_POINTS: sunfire,\n JIRA_BUGS: cyclops,\n PEOPLE_HEALTH: beast,\n PRS_MERGED_NO_APPROVAL: magneto,\n PRS_NO_REVIEWERS: iceman,\n PRS_STUCK: archangel\n },\n deepWorkByIc: {\n warning: rogue,\n ramp: [iceman, auroraTeal],\n scheduled: auroraTeal,\n available: iceman\n },\n cycleTime: {\n DEV: {\n color: wolverine,\n backgroundColor: jean\n },\n WAITING_FOR_REVIEW: {\n color: wolverine,\n backgroundColor: iceman\n },\n REVIEW: {\n color: white,\n backgroundColor: beast\n },\n RELEASE: {\n color: white,\n backgroundColor: nightcrawler\n }\n },\n storyPoints: {\n marker: {\n fill: petra,\n stroke: wolverine\n }\n },\n alwaysOnRisk: {\n normal: petra,\n \"above normal\": gambit,\n high: phoenix,\n dash: wolverine\n },\n alwaysOnRiskTrend: {\n marker: {\n fill: {\n HIGH: rogue,\n ABOVE_NORMAL: rogue,\n NORMAL: marvelMint\n },\n stroke: wolverine,\n opacity: {\n HIGH: 0.25,\n ABOVE_NORMAL: 0.1,\n NORMAL: 0.45\n }\n }\n },\n meetingClassifications: {\n MANAGER_IC_ONE_ON_ONES: phoenix,\n BLOCKED_FOR_WORK: archangel,\n PRODUCT_RELEASE_REVIEWS: rogue,\n WORKING_SESSIONS_PROJECT_MEETINGS: nightcrawler,\n RECRUITING: magneto,\n SCRUM: gambit,\n SOCIAL_COMPANY_EVENTS: pixie,\n TRAINING_SESSIONS: iceman,\n OUT_OF_OFFICE: storm,\n OFFICE_HOURS: thunderbird,\n OTHER_MEETING_EVENTS: beast,\n NOT_A_MEETING: beast\n },\n prCadence: {\n prs: petra,\n reviewTime: beast,\n marker: { fill: beast, stroke: wolverine },\n column: {\n fill: petra,\n stroke: wolverine\n }\n },\n deepWorkTime: {\n user: iceman,\n team: thunderbird,\n marker: { fill: thunderbird, stroke: wolverine },\n column: {\n fill: iceman,\n stroke: wolverine\n }\n },\n meetingTime: {\n team: thunderbird,\n user: beast,\n marker: { fill: thunderbird, stroke: wolverine },\n column: {\n fill: beast,\n stroke: wolverine\n }\n }\n },\n disabled: jean,\n dropdown: {\n text: wolverine,\n indicator: wolverine,\n option: {\n hover: jean,\n selected: marvelMint,\n selectedHover: hexToRgb({ hex: petra, opacity: 0.25 })\n }\n },\n expander: {\n border: wolverine,\n icon: wolverine\n },\n featuredContent: {\n bg: auroraTeal,\n text: { default: white, reversed: wolverine, bg: marvelMint }\n },\n feedback: {\n header: wolverine\n },\n highlight: marvelMint,\n icon: auroraTeal,\n avatarIcons: [\n sunfire,\n archangel,\n gambit,\n jubilee,\n iceman,\n magneto,\n banshee,\n rogue,\n beast,\n cyclops,\n magma,\n nightcrawler,\n professorX,\n thunderbird,\n juggernaut,\n pixie,\n petra,\n phoenix\n ],\n iconInfo: {\n light: storm,\n dark: storm\n },\n link: {\n color: auroraTeal,\n hover: {\n color: wolverine,\n background: marvelMint\n }\n },\n modal: {\n closeButton: wolverine\n },\n overlay: {\n background: hexToRgb({ hex: white, opacity: 0.5 }),\n popupContent: {\n background: white,\n border: jean\n }\n },\n pipedList: wolverine,\n recommendation: {\n bg: jean,\n header: { bg: storm, fg: white },\n subHeader: auroraTeal\n },\n scheduleOptionStatus: {\n ideal: beast,\n \"minimal-conflict\": auroraTeal\n },\n signalHealth: {\n [healthScoreTypes.EXCELLENT]: marvelMint,\n [healthScoreTypes.GOOD]: lightMarvel,\n [healthScoreTypes.OK]: jean,\n [healthScoreTypes.CONCERNING]: rogue\n },\n relativeHealth: {\n LESS: marvelMint,\n ABOUT_THE_SAME: jean,\n MORE: rogue\n },\n statusMessage: {\n focus: nightcrawler,\n success: auroraTeal,\n warning: phoenix\n },\n stepper: {\n indicators: wolverine\n },\n table: {\n hover: jean\n },\n text: {\n body: wolverine,\n highlight: marvelMint,\n strong: wolverine\n },\n textFlag: wolverine,\n texturedContainer: {\n white: { bg: white },\n lightGrey: { bg: jean },\n darkGrey: { bg: storm, fg: white },\n teal: { bg: auroraTeal, fg: white }\n },\n tooltip: {\n popupShadow: hexToRgb({ hex: jean, opacity: 0.5 })\n },\n uiBackground: white,\n uplevelFooter: {\n color: white,\n border: wolverine\n },\n validationMessage: {\n success: {\n bg: marvelMint,\n fg: auroraTeal\n },\n warning: {\n bg: gambit,\n fg: phoenix\n }\n },\n widgetHeader: { text: wolverine }\n },\n fonts: {\n primary: {\n name: \"Real Text Pro\",\n sizes: {\n xl: \"5.5rem\",\n lg: \"3.6rem\",\n md: \"2.6rem\",\n sm: \"1.5rem\",\n xs: \"1.3rem\"\n },\n weights: {\n hairline: 100,\n thin: 150,\n ultraLight: 200,\n light: 300,\n semiLight: 350,\n regular: 400,\n book: 450,\n medium: 500,\n demiBold: 600,\n bold: 700,\n extraBold: 800,\n black: 900\n }\n },\n header: {\n name: \"Real Head Pro\",\n sizes: {\n xl: \"5.5rem\",\n lg: \"3.6rem\",\n md: \"2.6rem\",\n sm: \"1.5rem\",\n xs: \"1.3rem\"\n },\n weights: {\n demiBold: 600,\n extraBold: 800\n }\n },\n subheader: {\n name: \"IBM Plex Mono\",\n sizes: {\n xl: \"5.5rem\",\n lg: \"3.6rem\",\n md: \"2.6rem\",\n sm: \"1.5rem\",\n xs: \"1.3rem\"\n },\n weights: {\n ultraLight: 200,\n light: 300,\n regular: 400,\n bold: 700,\n extraBold: 800,\n black: 900\n }\n }\n },\n grid: {\n columnWidth: \"7.2rem\",\n gap: \"2.4rem\",\n sidebar: \"18rem\",\n sidebarGutter: \"2.8rem\",\n gridOffset: \"2rem\"\n },\n charts: {\n series: {\n opacity: {\n full: 1,\n partial: 0.2\n }\n }\n }\n};\n","import React from \"react\";\nimport parser from \"html-react-parser\";\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n htmlText: string;\n};\n\nconst HtmlText = ({ className, htmlText, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-html-text`;\n if (!htmlText) {\n return null;\n }\n\n return (\n
\n {parser(htmlText)}\n
\n );\n};\n\nexport default HtmlText;\n","import React from \"react\";\nimport Icon from \"../Icon/Icon\";\nimport Tooltip from \"../Tooltip/Tooltip\";\nimport styled from \"styled-components/macro\";\nimport { currentTheme } from \"../../themes/currentTheme\";\nimport InformationText from \"../../constants/informationText.json\";\nimport HtmlText from \"../HtmlText/HtmlText\";\nimport { useTracking } from \"../../hooks/useTracking\";\n\ntype Props = {\n className?: string;\n testId?: string;\n content:\n | \"date-range\"\n | \"people\"\n | \"owners\"\n | \"contributors\"\n | \"sprint-work\"\n | \"prs-not-in-sprint\"\n | \"other-activities\"\n | \"jira-projects\"\n | \"sprint-callout-added-mid-sprint\"\n | \"sprint-callout-open-multiple-sprints\"\n | \"work-items-callout-null-story-points\"\n | \"pr-callout-stuck-no-comments\"\n | \"pr-callout-stuck-few-comments\"\n | \"pr-callout-stuck-many-comments\"\n | \"pr-callout-stuck-not-merged\"\n | \"pr-callout-merged-no-approval\"\n | \"pr-callout-surprising\"\n | \"bug\"\n | \"pull-request\"\n | \"issue\"\n | \"sub-task\"\n | \"open\"\n | \"stuck\"\n | \"done\"\n | \"your-team\"\n | \"cycle-time\"\n | \"work-allocation\"\n | \"in-progress\"\n | \"settings-default-timerange\"\n | \"settings-default-group-by\"\n | \"removed-from-sprint\"\n | \"sprint-updates\"\n | \"retros-sprint-completion\"\n | \"retros-sprint-completion-final\"\n | \"retros-sprint-health\"\n | \"retros-sprint-health-final\"\n | \"retros-factor-always-on\"\n | \"retros-factor-context-switching\"\n | \"retros-factor-deep-work\"\n | \"retros-factor-issues-added\"\n | \"retros-factor-issues-carryover\"\n | \"retros-factor-issues-closed\"\n | \"retros-factor-issues-with-descriptions\"\n | \"retros-factor-issues-with-story-points\"\n | \"retros-factor-jira-bugs\"\n | \"retros-factor-prs-merged-no-approval\"\n | \"retros-factor-prs-no-reviewers\"\n | \"retros-factor-prs-stuck\"\n | \"retros-factor-chat-interruptions\"\n | \"sprint-reactions\"\n | \"cycle-time-healthy\"\n | \"cycle-time-unhealthy\"\n | \"retros-date-range\"\n | \"retros-people\"\n | \"direct-reports\"\n | \"sprint-options-unassigned\"\n | \"sprint-options-other-teams\"\n | \"show-related-items\"\n | \"repositories\"\n | \"completed-outside-sprint\"\n | \"deep-work\"\n | \"organization-overview\"\n | \"overview-by-group\"\n | \"overview-benchmark\"\n | \"release-frequency\";\n theme?: string;\n};\n\nconst PopupContent = styled.div`\n max-width: 40rem;\n word-wrap: anywhere;\n overflow-wrap: anywhere;\n font-size: 1.25rem;\n`;\n\nconst IconWrapper = styled.div`\n font-size: 1.1rem;\n margin-left: 1rem;\n`;\n\nconst InfoIcon = ({\n className = \"info-icon-trigger\",\n testId = \"info-icon-trigger\",\n content,\n theme = \"dark\"\n}: Props): React.ReactElement => {\n const { trackEvent } = useTracking();\n\n function onShowTooltip(e: React.MouseEvent) {\n e.persist();\n trackEvent({\n e,\n label: `${testId}-${content}-tooltip`,\n value: \"tooltip text shown\"\n });\n }\n\n return (\n \n \n }\n popupContent={\n \n \n \n }\n />\n \n );\n};\n\nexport default InfoIcon;\n","import React, { ReactElement } from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { isNull } from \"lodash\";\n\n// components\nimport CycleTimeValueDisplay from \"../CycleTimeValueDisplay/CycleTimeValueDisplay\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\n\n// constants\nimport { cycleTimeStages } from \"../../constants/constants\";\n\n// interfaces\nimport {\n CycleTimeInterface,\n CycleTimeStageInterface\n} from \"../../interfaces/work-items\";\n\n// utils\nimport { rollupCycleTime } from \"../../utils/cycle-time\";\nimport { CycleTimeStageTypes } from \"../../interfaces/constants\";\n\n// styled components\nconst Container = styled.div<{ display: string }>`\n font-size: ${props =>\n props.display === \"rollup\"\n ? props.theme.fonts.primary.sizes.sm\n : props.theme.fonts.primary.sizes.xs};\n`;\nconst Title = styled.h3<{ display: string }>`\n font-size: inherit;\n\n ${props => {\n if (props.display === \"rollup\") {\n return css`\n font-weight: ${props.theme.fonts.primary.weights.bold};\n `;\n } else {\n return css`\n font-weight: ${props.theme.fonts.primary.weights.regular};\n\n &::after {\n content: \":\";\n margin-right: 0.3em;\n }\n `;\n }\n }}\n`;\nconst Header = styled.header<{ display: \"rollup\" | \"inline\" }>`\n ${props => {\n if (props.display === \"rollup\") {\n return css`\n font-size: inherit;\n `;\n } else {\n return css`\n align-items: baseline;\n display: flex;\n font-size: inherit;\n font-weight: ${props.theme.fonts.primary.weights.regular};\n `;\n }\n }}\n`;\nconst HeaderGroup = styled.hgroup`\n align-items: baseline;\n display: flex;\n margin-bottom: 1.6rem;\n`;\nconst RollupValue = styled(CycleTimeValueDisplay)`\n font-size: ${props => props.theme.fonts.primary.sizes.xl};\n`;\nconst Values = styled.div`\n align-items: center;\n display: flex;\n line-height: 1;\n margin-bottom: 1em;\n`;\nconst BreakdownByStage = styled.ul`\n display: flex;\n`;\nconst BreakoutValue = styled.li`\n & + & {\n margin-left: 2rem;\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n cycleTime: CycleTimeInterface | null;\n display?: \"rollup\" | \"inline\";\n testId?: string;\n};\n\nconst WorkMetadataCycleTimeSummary = ({\n className,\n cycleTime,\n display = \"inline\",\n testId = \"testId\"\n}: Props): ReactElement | null => {\n const thisTestId = `${testId}-work-metadata-cycle-time-summary`;\n if (isNull(cycleTime)) {\n return null;\n }\n\n const rollupTotals = rollupCycleTime(cycleTime);\n\n return (\n \n
\n \n PR Median Cycle Time\n {display === \"rollup\" ? (\n \n ) : null}\n \n \n {display === \"rollup\" ? (\n rollupTotals.find(\n (total: CycleTimeStageInterface) => total.value !== 0\n ) ? (\n \n ) : (\n \n )\n ) : (\n \n )}\n \n
\n
\n \n {([\n cycleTimeStages.DEV,\n cycleTimeStages.WAITING_FOR_REVIEW,\n cycleTimeStages.REVIEW,\n cycleTimeStages.RELEASE\n ] as Array).map(stageKey => {\n const stage = cycleTime[stageKey];\n return !!stage ? (\n \n \n \n ) : null;\n })}\n \n
\n
\n );\n};\n\nexport default WorkMetadataCycleTimeSummary;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isNull } from \"lodash\";\n\n// components\nimport Tooltip from \"../Tooltip/Tooltip\";\nimport WorkMetadataCycleTimeSummary from \"../WorkMetadataCycleTimeSummary/WorkMetadataCycleTimeSummary\";\n\n// constants\nimport { cycleTimeStages } from \"../../constants/constants\";\n\n// interfaces\nimport { CycleTimeInterface } from \"../../interfaces/work-items\";\nimport CycleTimeValueDisplay from \"../CycleTimeValueDisplay/CycleTimeValueDisplay\";\nimport { CycleTimeStageTypes } from \"../../interfaces/constants\";\n\n// styled components\nconst CycleTimeSummary = styled(WorkMetadataCycleTimeSummary)`\n & ul {\n list-style-type: none;\n padding: 0;\n }\n`;\nconst StageList = styled.ul`\n align-items: center;\n display: flex;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n cycleTime: CycleTimeInterface | null;\n onMouseOver?: (e: React.MouseEvent) => void;\n testId?: string;\n};\n\nconst ChartCycleTime = ({\n className,\n cycleTime,\n onMouseOver,\n testId = \"testId\"\n}: Props): ReactElement | null => {\n const thisTestId = `${testId}-chart-cycle-time`;\n return isNull(cycleTime) ? null : (\n \n }\n trigger={\n \n {([\n cycleTimeStages.DEV,\n cycleTimeStages.WAITING_FOR_REVIEW,\n cycleTimeStages.REVIEW,\n cycleTimeStages.RELEASE\n ] as Array).map(stageKey => {\n const stage = cycleTime[stageKey];\n return !!stage ? (\n
  • \n \n
  • \n ) : null;\n })}\n
    \n }\n testId={thisTestId}\n />\n );\n};\n\nexport default ChartCycleTime;\n","import React, { useEffect, useState } from \"react\";\nimport { Link, NavLink } from \"react-router-dom\";\n\n// hooks\nimport { useHistory } from \"react-router-dom\";\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// typescript props\ntype Props = {\n children: React.ReactNode;\n className?: string;\n name: string;\n to: string;\n testId?: string;\n type?: \"default\" | \"nav\";\n};\n\nconst RouteLink = ({\n children,\n className,\n name,\n testId = \"testId\",\n to,\n type = \"default\"\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-route-link`;\n const [tracked, setTracked] = useState(false);\n const history = useHistory();\n const { trackEvent } = useTracking();\n\n function onClickRouteLink(e: React.MouseEvent) {\n e.persist();\n e.preventDefault();\n trackEvent({\n e,\n label: `${name}-click`,\n value: `followed route link to ${to}`\n });\n setTracked(true);\n }\n\n useEffect(() => {\n if (tracked) {\n history.push(to);\n setTracked(false);\n }\n }, [tracked]);\n\n const DisplayLink = type === \"nav\" ? NavLink : Link;\n\n return (\n \n {children}\n \n );\n};\n\nexport default RouteLink;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { currentTheme } from \"../../themes/currentTheme\";\n\n// components\nimport {\n FormControlLabel,\n Switch as MaterialUiSwitch,\n withStyles\n} from \"@material-ui/core\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { merge } from \"lodash\";\n\n// utils\nimport { hexToRgb } from \"../../utils/color\";\n\n// styled components\nconst Container = styled.div`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n\n & .MuiTypography-body1 {\n color: ${props =>\n hexToRgb({\n hex: props.theme.colors.all.wolverine,\n opacity: 1\n })} !important;\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-size: inherit;\n line-height: 1;\n margin: 0;\n }\n`;\n\n// TODO: update this styling along with upgrade to most recent @mui library (needs react 17)\nconst StyledFormControlLabel = withStyles({\n root: {\n display: \"flex\",\n margin: 0,\n justifyContent: \"space-between\"\n }\n})(FormControlLabel);\n\nconst baseStyles = {\n root: {\n width: 42,\n height: 26,\n padding: 0\n },\n switchBase: {\n padding: 1,\n \"&$checked\": {\n transform: \"translateX(1.6rem)\",\n color: currentTheme.colors.all.marvelMint,\n \"&$disabled\": {\n color: currentTheme.colors.all.marvelMint,\n opacity: 0.5,\n \"& + $track\": {\n backgroundColor: currentTheme.colors.all.jean,\n opacity: 0.5,\n border: \"none\"\n }\n },\n \"& + $track\": {\n backgroundColor: currentTheme.colors.all.storm,\n opacity: 1,\n border: \"none\"\n }\n },\n \"&$disabled\": {\n color: currentTheme.colors.all.white,\n opacity: 0.5,\n \"& + $track\": {\n backgroundColor: currentTheme.colors.all.jean,\n opacity: 0.5,\n border: \"none\"\n }\n }\n },\n thumb: {\n width: 24,\n height: 24,\n boxShadow: \"none\"\n },\n track: {\n borderRadius: 26 / 2,\n border: `.1rem solid ${currentTheme.colors.all.storm}`,\n backgroundColor: currentTheme.colors.all.storm,\n opacity: 1\n },\n checked: {},\n disabled: {}\n};\n\nconst HorizontalSwitch = withStyles(baseStyles)(MaterialUiSwitch);\n\nconst HorizontalSwitchWithLabel = withStyles(\n merge({}, baseStyles, {\n switchBase: {\n \"&$checked\": {\n \"& $thumb\": {\n \"&:before\": {\n content: '\"Yes\"'\n }\n }\n }\n },\n thumb: {\n \"&:before\": {\n content: '\"No\"',\n color: currentTheme.colors.all.wolverine,\n fontFamily: `${currentTheme.fonts.primary.name}, Arial, Helvetica, sans-serif`,\n fontSize: \"1.1rem\"\n }\n }\n })\n)(MaterialUiSwitch);\n\n// typescript props\ntype Props = {\n className?: string;\n isActive: boolean;\n isDisabled?: boolean;\n labelContent: React.ReactNode;\n name: string;\n onChange: (e: React.ChangeEvent) => void;\n showSwitchStatus?: boolean;\n testId?: string;\n labelPlacement?: \"end\" | \"start\" | \"top\" | \"bottom\";\n};\n\nconst Switch = ({\n className,\n isActive,\n isDisabled = false,\n labelContent,\n name,\n onChange,\n showSwitchStatus = false,\n testId = \"testId\",\n labelPlacement = \"start\"\n}: Props) => {\n const thisTestId = `${testId}-switch`;\n const { trackEvent } = useTracking();\n\n function onToggleSwitch(e: React.ChangeEvent) {\n trackEvent({\n label: `${name}-switch`,\n value: `changed to ${isActive ? \"inactive\" : \"active\"}`\n });\n onChange(e);\n }\n\n const DisplaySwitch = showSwitchStatus\n ? HorizontalSwitchWithLabel\n : HorizontalSwitch;\n return (\n \n \n }\n label={labelContent}\n labelPlacement={labelPlacement}\n />\n \n );\n};\n\nexport default Switch;\n","import React, { useCallback } from \"react\";\nimport { debounce } from \"lodash\";\n\n// components\nimport Switch from \"../Switch/Switch\";\n\n// constants\nimport { urlParamKeys } from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport styled from \"styled-components/macro\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\n\nconst Label = styled.div`\n display: flex;\n margin-left: 0.5rem;\n`;\n\nconst StyledInfo = styled(InfoIcon)`\n margin-left: 0.5rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst ShowRelatedItemsSelector = ({ className, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-show-related-items-selector`;\n const { trackEvent } = useTracking();\n const { urlParams, updateUrlParams } = useUrlParams();\n const showRelatedItems = urlParams.showRelatedItems;\n\n const debouncedToggle = useCallback(\n debounce(updated => {\n updateUrlParams({\n [urlParamKeys.SHOW_RELATED]: updated\n });\n }, 500),\n []\n );\n\n function onToggleStatus(e: React.ChangeEvent) {\n const updatedShowRelatedItems = !showRelatedItems;\n debouncedToggle(updatedShowRelatedItems);\n trackEvent({\n e,\n label: \"ui-filter-show-related-items-selector-change\",\n value: `changed showRelatedItems to ${updatedShowRelatedItems}`\n });\n }\n\n return (\n
    \n \n Show related issues and prs\n \n \n }\n name=\"show-related-items-selector\"\n onChange={onToggleStatus}\n testId={thisTestId}\n labelPlacement=\"end\"\n />\n
    \n );\n};\n\nexport default ShowRelatedItemsSelector;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\n// utils\nimport { formatTimestamp } from \"../../utils/date\";\n\nconst Time = ({ format = \"ddd. MMM. Do h:mm A\", testId, timestamp }) => {\n if (!testId || !timestamp) {\n return null;\n }\n\n return (\n \n );\n};\n\nTime.propTypes = {\n testId: PropTypes.string.isRequired,\n timestamp: PropTypes.string.isRequired\n};\nexport default Time;\n","import React from \"react\";\n\n// components\nimport Icon from \"../Icon/Icon\";\n\n// constants\nimport { workMetadataActivityTypes } from \"../../constants/constants\";\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n type: string;\n};\n\nconst WorkMetadataIcon = ({ className, testId = \"testId\", type }: Props) => {\n const thisTestId = `${testId}-work-metadata-type-icon`;\n if (!Object.values(workMetadataActivityTypes).includes(type)) {\n return null;\n }\n\n return (\n \n );\n};\n\nexport default WorkMetadataIcon;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Icon from \"../Icon/Icon\";\n\n// styled components\nconst Container = styled.div`\n align-items: center;\n display: flex;\n justify-items: flex-start;\n`;\nconst IconWrapper = styled.div`\n padding-right: 0.5rem;\n`;\nconst SortIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n`;\nconst ChildWrapper = styled.div`\n text-align: left;\n`;\n\n// typescript props\ntype Props = {\n children: React.ReactNode;\n className?: string;\n state: \"sorted-asc\" | \"sorted-desc\" | \"unsorted\";\n testId?: string;\n};\n\nconst SortableColumnHeader = ({\n children,\n className,\n state = \"unsorted\",\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-sortable-column-header`;\n return (\n \n \n \n \n {children}\n \n );\n};\n\nexport default SortableColumnHeader;\n","import React, { useMemo } from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport {\n useTable,\n useFilters,\n useSortBy,\n TableInstance,\n ColumnInstance\n} from \"react-table\";\nimport { get, invoke, isEmpty } from \"lodash\";\n\n// components\nimport SortableColumnHeader from \"../SortableColumnHeader/SortableColumnHeader\";\n\n// styled components\nconst Container = styled.table`\n text-align: left;\n`;\nconst StyledTr = styled.tr`\n &:hover {\n background: ${props => props.theme.colors.table.hover};\n }\n`;\nconst StyledTh = styled.th`\n padding-bottom: 1rem;\n padding-right: 1rem;\n\n &:last-child {\n padding-right: 0;\n }\n`;\nconst StyledTd = styled.td`\n line-height: 1em;\n padding-bottom: 0.5rem;\n padding-right: 1rem;\n padding-top: 0.5rem;\n vertical-align: top;\n\n &:last-child {\n padding-right: 0;\n }\n`;\nconst ClickWrapper = styled.div<{ isClickable: boolean }>`\n ${props => {\n if (props.isClickable) {\n return css`\n cursor: pointer;\n `;\n }\n }}\n`;\n\n// typescript props\ntype Props = TableInstance & {\n allowSorting?: boolean;\n caption?: string;\n className?: string;\n manuallySort?: boolean;\n testId?: string;\n};\n\nconst Table = ({\n allowSorting = true,\n caption,\n className,\n columns = [],\n controlledState = {},\n data = [],\n getRowProps = () => ({}),\n initialState = {},\n manuallySort = false,\n testId = \"testId\"\n}: Props) => {\n // react-table wants these memoized\n const reactTableColumns = useMemo(() => columns, [columns]);\n const reactTableData = useMemo(() => data, [data]);\n const memoizedInitialState = useMemo(() => initialState, [initialState]);\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow\n } = useTable(\n {\n columns: reactTableColumns,\n data: reactTableData,\n disableSortBy: !allowSorting,\n manualSortBy: manuallySort,\n initialState: memoizedInitialState,\n useControlledState: state => {\n return React.useMemo(\n () => ({\n ...state,\n ...controlledState\n }),\n [state, controlledState]\n );\n }\n },\n useFilters,\n useSortBy\n );\n\n if (isEmpty(columns) || isEmpty(data)) {\n return null;\n }\n\n return (\n \n \n {caption || `${testId} table`}\n \n \n {headerGroups.map(headerGroup => (\n \n {headerGroup.headers.map(\n (\n column: ColumnInstance & {\n onClickHeader?: (props?: any) => void;\n }\n ) => {\n const isClickable = !isEmpty(column.onClickHeader);\n const renderedHeader = column.render(\"Header\");\n return (\n \n \n invoke(column, \"onClickHeader\", { e, column })\n }\n >\n {allowSorting && !column.disableSortBy ? (\n \n {renderedHeader}\n \n ) : (\n renderedHeader\n )}\n \n \n );\n }\n )}\n \n ))}\n \n \n {rows.map(row => {\n prepareRow(row);\n return (\n \n {row.cells.map(cell => {\n return (\n \n invoke(cell.column, \"onClickCell\", {\n e,\n row: row,\n column: cell.column\n })\n }\n {...cell.getCellProps({\n // slightly sketchy fix for typescript error\n // https://github.com/tannerlinsley/react-table/issues/1612#issuecomment-728778889\n className: (cell.column as any).className\n })}\n >\n {cell.render(\"Cell\")}\n \n );\n })}\n \n );\n })}\n \n \n );\n};\n\nexport default Table;\n","import React, { useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Table from \"../Table/Table\";\n\n// interfaces\nimport {\n TableRowInterface,\n WorkItemLeveledInterface\n} from \"../../interfaces/work-items\";\nimport { ColumnInterface } from \"react-table\";\n\n// styled components\nconst IssuesTable = styled(Table)`\n width: 100%;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n\n & thead {\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n }\n\n & th {\n font-size: 1.1rem;\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n padding: 0 0.8rem 0.8rem 0;\n text-align: left;\n vertical-align: bottom;\n }\n\n & tbody {\n & tr + tr {\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n }\n }\n\n & td {\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n padding: 0.8rem;\n text-align: left;\n vertical-align: middle;\n }\n\n & td + td {\n border-left: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n }\n\n @media (min-width: ${props => props.theme.breakpoints.lg}) {\n font-size: inherit;\n }\n`;\n\n// typescript props\ntype Props = {\n allowSorting?: boolean;\n className?: string;\n columns: Array;\n getRowProps?: (row: TableRowInterface) => any;\n hiddenColumns?: Array;\n list?: WorkItemLeveledInterface[];\n manuallySort?: boolean;\n sortBy?: Array<{ id: string; desc: boolean }>;\n testId?: string;\n};\n\nconst WorkMetadataIssuesList = ({\n allowSorting = true,\n className,\n columns,\n hiddenColumns = [],\n getRowProps,\n list,\n manuallySort = false,\n sortBy = [],\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-work-metadata-issues-list`;\n const initialState = useMemo(\n () => ({\n hiddenColumns,\n sortBy\n }),\n [hiddenColumns, sortBy]\n );\n return !!list?.length ? (\n \n ) : null;\n};\n\nexport default WorkMetadataIssuesList;\n","export const storyPointsListTypes = [\n \"WITH_STORY_POINTS\",\n \"WITHOUT_STORY_POINTS\"\n].reduce((result, key) => {\n result[key] = key.toLowerCase();\n return result;\n}, {});\n\nexport const meetingClassificationTypes = [\n \"OFFICE_HOURS\",\n \"MANAGER_IC_ONE_ON_ONES\",\n \"OTHER_MEETING_EVENTS\",\n \"OUT_OF_OFFICE\",\n \"PRODUCT_RELEASE_REVIEWS\",\n \"RECRUITING\",\n \"BLOCKED_FOR_WORK\",\n \"SCRUM\",\n \"SOCIAL_COMPANY_EVENTS\",\n \"TRAINING_SESSIONS\",\n \"WORKING_SESSIONS_PROJECT_MEETINGS\",\n \"NOT_A_MEETING\"\n].reduce((result, key) => {\n result[key] = key;\n return result;\n}, {});\n\nexport const STRING_TRUNCATION_LENGTH = 30;\nexport const DEFAULT_NUM_WEEKS_DATA_RANGE = 12;\nexport const TEAM_AVERAGE_ID = \"team-average\";\nexport const MAX_NUM_AVATARS = 4;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { compact, isEmpty, partition } from \"lodash\";\n\n// components\nimport CrossTeamAvatar from \"../CrossTeamAvatar/CrossTeamAvatar\";\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\nimport Tooltip from \"../Tooltip/Tooltip\";\n\n// constants\nimport { MAX_NUM_AVATARS } from \"../../constants/components\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { TeamMemberInterface } from \"../../interfaces/work-items\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\n\n// styled components\nconst Container = styled.div`\n display: flex;\n align-items: center;\n`;\nconst List = styled.ul`\n display: flex;\n flex-flow: row wrap;\n`;\nconst ListItem = styled.li<{ order: number }>`\n margin-right: -1rem;\n position: relative;\n z-index: ${props => props.order};\n`;\nconst StyledSlackAvatar = styled(SlackAvatar)`\n border: ${props => `.2rem solid ${props.theme.colors.border}`};\n border-radius: 50% 50%;\n height: 3rem;\n width: 3rem;\n`;\nconst CrossteamHeader = styled.h5`\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst CrossTeamWrapper = styled.div`\n font-size: 1.6rem;\n position: relative;\n`;\nconst StyledCrossTeamAvatar = styled(CrossTeamAvatar)`\n font-size: 1em;\n`;\nconst CrossTeamNumber = styled.span`\n background: ${props => props.theme.colors.all.wolverine};\n border-radius: 50% 50%;\n color: ${props => props.theme.colors.all.white};\n font-size: 0.55em;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n height: 1.5em;\n padding: 0 0.25em;\n position: absolute;\n right: -0.5em;\n text-align: center;\n top: -0.25em;\n width: 1.5em;\n`;\nconst Extras = styled.span`\n margin-left: 2rem;\n`;\nconst ExtrasNameList = styled.ul`\n max-width: 20rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n list: Array;\n maxNumAvatars?: number;\n testId?: string;\n};\n\nconst WorkMetadataTeamList = ({\n className,\n list,\n maxNumAvatars = MAX_NUM_AVATARS,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-work-metadata-team-list`;\n const { urlParams } = useUrlParams();\n const activeTeam = urlParams.team;\n const teamMembers = activeTeam?.teamMembers || [];\n const findUserInActiveTeamMembers = (\n activeTeamMembers: Array,\n user: TeamMemberInterface\n ): UserReportWithMetadataInterface | undefined =>\n activeTeamMembers.find(\n a => a.id === user.uplevelUserId\n ) as UserReportWithMetadataInterface;\n\n let displayContent;\n if (!isEmpty(list)) {\n const [team, crossteam] = partition(\n list,\n l => !!findUserInActiveTeamMembers(teamMembers, l)\n );\n\n // in-team members\n const maxNumTeamAvatars = crossteam.length\n ? maxNumAvatars - 1\n : maxNumAvatars;\n const teamDisplayContent = team.slice(0, maxNumTeamAvatars).map(t => {\n const teamMember = findUserInActiveTeamMembers(\n teamMembers,\n t\n ) as UserReportWithMetadataInterface;\n return {\n teamMemberId: t.uplevelUserId.toString(),\n popupContent: t.displayName,\n trigger: (\n \n )\n };\n });\n\n // crossteam members\n const crossteamDisplayContent = crossteam.length\n ? {\n teamMemberId: \"crossteam\",\n displayName: \"Cross-Team Collaborators\",\n popupContent: (\n
    \n \n Cross-Team\n
    \n Collaborators\n
    \n
      \n {crossteam.map((l, index) => (\n
    • {l.displayName}
    • \n ))}\n
    \n
    \n ),\n trigger: (\n \n \n {crossteam.length > 1 ? (\n {crossteam.length}\n ) : null}\n \n )\n }\n : null;\n\n // extras\n const extras = team.slice(maxNumTeamAvatars);\n\n displayContent = (\n <>\n \n {compact([...teamDisplayContent, crossteamDisplayContent]).map(\n (l, index, fullArray) => (\n \n \n \n )\n )}\n \n {!!extras.length && (\n \n {extras.map(l => (\n
  • \n {l.displayName}\n
  • \n ))}\n \n }\n testId={thisTestId}\n trigger={+{extras.length}}\n />\n )}\n \n );\n }\n\n return (\n \n {displayContent}\n \n );\n};\n\nexport default WorkMetadataTeamList;\n","import { AxiosResponse } from \"axios\";\nimport api from \"./api\";\nimport { kebabCase } from \"lodash\";\nimport { NIL } from \"uuid\";\n\n// constants\nimport {\n groupByTypes,\n pageIds,\n pageMetadata,\n workDeepDiveSectionLabels\n} from \"../constants/constants\";\n\n// interfaces\nimport { OpMetricData } from \"../interfaces/ops-metrics\";\nimport { UserReportInterface } from \"../interfaces/user\";\nimport {\n EnhancedTeamMemberInterface,\n EpicDetailsInterface,\n GroupsListInterface,\n TeamMemberInterface,\n WorkItemsRequestParamsInterface\n} from \"../interfaces/work-items\";\nimport { AnnotationsInterface } from \"../interfaces/annotations\";\n\n// utils\nimport { getPageTitle } from \"./router\";\nimport { captureException } from \"@sentry/react\";\n\n// typescript props\ntype BaseProps = {\n accessToken: string;\n tenantId: number;\n};\ntype WorkItemsProps = BaseProps & {\n params: WorkItemsRequestParamsInterface;\n};\n\ntype OperationalMetricsParams = BaseProps & {\n params: {\n startDate: string;\n endDate: string;\n teamId: string | null;\n sprintId: string | null;\n };\n};\n\ntype AnnotationsProps = {\n accessToken: string;\n tenantId: number;\n params:\n | (WorkItemsRequestParamsInterface & { parentId?: string })\n | {\n users: Array;\n context: { [key: string]: any };\n annotation: { [key: string]: any };\n };\n};\n\nexport const requestWorkItems = async ({\n accessToken,\n params,\n tenantId\n}: WorkItemsProps): Promise => {\n const response: AxiosResponse<\n EpicDetailsInterface | GroupsListInterface\n > = await api.post(\n `/${tenantId}/project-explorer/work-items`,\n params,\n {\n headers: { Authorization: `Bearer ${accessToken}` }\n }\n );\n return response.data;\n};\n\nexport const requestOperationalMetrics = async ({\n accessToken,\n params,\n tenantId\n}: OperationalMetricsParams): Promise => {\n const response: AxiosResponse = await api.post(\n `/${tenantId}/ops-metrics`,\n params,\n {\n headers: { Authorization: `Bearer ${accessToken}` }\n }\n );\n return response.data;\n};\n\nexport const requestAnnotations = async ({\n accessToken,\n params,\n tenantId\n}: WorkItemsProps): Promise> => {\n const response: AxiosResponse> = await api.post<\n Array\n >(`/${tenantId}/project-explorer/user-annotations`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const writeAnnotations = async ({\n accessToken,\n params,\n tenantId\n}: AnnotationsProps): Promise => {\n if (\"allUsers\" in params && !params.allUsers.length) {\n return captureException(\n `Expected params with keys of \"allUsers\" as value type String[], but received ${JSON.stringify(\n params\n )}`\n );\n }\n const response = await api.put(`/${tenantId}/add-user-annotation`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const removeAnnotations = async ({\n accessToken,\n params,\n tenantId\n}: {\n accessToken: string;\n params: {\n annotationId: string;\n };\n tenantId: number;\n}): Promise => {\n const response = await api.put(\n `/${tenantId}/remove-user-annotation`,\n params,\n {\n headers: { Authorization: `Bearer ${accessToken}` }\n }\n );\n return response.data;\n};\n\nexport const getWorkDeepDivePageTitle = (section: string): string => {\n const sectionTitle = workDeepDiveSectionLabels[section];\n const workDeepDiveTitle = pageMetadata[pageIds.WORK_DEEP_DIVE].title;\n return getPageTitle(\n `${!!sectionTitle ? `${sectionTitle} - ` : \"\"}${workDeepDiveTitle}`\n );\n};\n\nexport const getEpicDetailsPageTitle = ({\n groupBy,\n workCategoryId,\n workCategoryName\n}: {\n groupBy: string;\n workCategoryId: string | null;\n workCategoryName: string;\n}): string => {\n const workDeepDiveTitle = pageMetadata[pageIds.WORK_DEEP_DIVE].title;\n const name =\n !!workCategoryId && groupBy === groupByTypes.EPIC && workCategoryId !== NIL\n ? workCategoryId\n : workCategoryName;\n return getPageTitle(`${name} - ${workDeepDiveTitle}`);\n};\n\nexport const addTeamAttributes = (\n teamMember: TeamMemberInterface,\n userDetails: Array\n): EnhancedTeamMemberInterface => {\n const { displayName, uplevelUserId } = teamMember;\n const inTeamMember = userDetails.find(u => u.id === uplevelUserId);\n if (!inTeamMember) {\n return {\n ...teamMember,\n isCrossTeam: true,\n slackAvatar: null,\n teamMemberId: !!uplevelUserId\n ? uplevelUserId.toString()\n : kebabCase(displayName)\n };\n }\n return {\n ...teamMember,\n isCrossTeam: false,\n slackAvatar: inTeamMember.slackAvatar,\n teamMemberId: inTeamMember.id.toString()\n };\n};\n","import React, { useState, useMemo, useCallback } from \"react\";\nimport styled from \"styled-components/macro\";\nimport classNames from \"classnames\";\nimport {\n countBy,\n get,\n has,\n isEmpty,\n isNil,\n kebabCase,\n snakeCase,\n startCase,\n toPairs\n} from \"lodash\";\nimport moment from \"moment\";\nimport Popover from \"react-bootstrap/Popover\";\nimport OverlayTrigger from \"react-bootstrap/OverlayTrigger\";\n\n// components\nimport AnnotationsModal from \"../Annotations/AnnotationsModal\";\nimport ChartCycleTime from \"../ChartCycleTime/ChartCycleTime\";\nimport Icon from \"../Icon/Icon\";\nimport ReactionPills from \"../Annotations/ReactionPills\";\nimport ReactionTooltip from \"../Annotations/ReactionTooltip\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport ShowRelatedItemsSelector from \"../ShowRelatedItemsSelector/ShowRelatedItemsSelector\";\nimport Time from \"../Time/Time\";\nimport Tooltip from \"../Tooltip/Tooltip\";\nimport WorkMetadataIcon from \"../WorkMetadataIcon/WorkMetadataIcon\";\nimport WorkMetadataIssuesList from \"../WorkMetadataIssuesList/WorkMetadataIssuesList\";\nimport WorkMetadataTeamList from \"../WorkMetadataTeamList/WorkMetadataTeamList\";\n\n// constants\nimport {\n calloutMetadata,\n reservedEpics,\n workMetadataActivityTypes,\n StatusIconMap,\n urlParamKeys,\n workDeepDiveSections,\n prComplexityLevels\n} from \"../../constants/constants\";\n\n// hooks\nimport { useParams } from \"react-router-dom\";\nimport { useSelector } from \"react-redux\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { useMutation, useQueryClient } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport {\n PrsByRepositoryRow,\n TableCellInterface,\n TableCellListColumnInterface,\n TableRowInterface,\n WorkItemInterface,\n WorkItemLeveledInterface\n} from \"../../interfaces/work-items\";\nimport { AnnotationsInterface } from \"../../interfaces/annotations\";\nimport { Column, ColumnInstance } from \"react-table\";\n\n// utils\nimport { createTimestamp } from \"../../utils/date\";\nimport {\n writeAnnotations,\n removeAnnotations\n} from \"../../utils/work-deep-dive\";\n\n// styled components\nconst Container = styled.div``;\nconst HeaderContainer = styled.div`\n display: flex;\n align-items: center;\n margin-bottom: 2rem;\n`;\nconst Header = styled.h2`\n padding-top: 1rem;\n font-family: ${props => props.theme.fonts.header.name}, Arial, Helvetica,\n sans-serif;\n font-size: 1.8rem;\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n`;\nconst StyledShowRelatedItems = styled(ShowRelatedItemsSelector)`\n margin-left: 1rem;\n`;\nconst ContentWrapper = styled.div`\n background: ${props => props.theme.colors.all.white};\n padding: 1.2rem 2rem;\n`;\nconst IssueLink = styled.a`\n align-items: center;\n display: flex;\n`;\nconst ExternalLink = styled.a`\n color: ${props => props.theme.colors.all.wolverine};\n font-weight: ${props => props.theme.fonts.primary.weights.book};\n align-items: center;\n display: flex;\n padding: 1rem 0;\n`;\nconst LinkIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.storm};\n margin-left: 0.8rem;\n`;\nconst IssueIconWrapper = styled.div<{\n hasCallouts: boolean;\n hasChildWithCallouts: boolean;\n level: number;\n}>`\n align-items: stretch;\n display: flex;\n height: 100%;\n justify-content: space-between;\n margin-right: 1rem;\n padding-left: ${props => `calc(2rem * ${props.level})`};\n`;\nconst IconBackgroundColor = styled.div<{\n hasCallouts: boolean;\n hasChildWithCallouts: boolean;\n}>`\n align-items: center;\n background-color: ${props =>\n props.hasChildWithCallouts\n ? props.theme.colors.all.rogue\n : props.hasCallouts\n ? props.theme.colors.all.jubilee\n : \"transparent\"};\n display: flex;\n`;\nconst Title = styled.header`\n line-height: 1.4;\n margin-bottom: 0.4rem;\n`;\nconst PrSubstatus = styled.div`\n color: ${props => props.theme.colors.all.wolverine};\n align-items: center;\n display: flex;\n font-size: 1.1.rem;\n font-style: italic;\n font-weight: ${props => props.theme.fonts.primary.weights.light};\n margin-bottom: 0.8rem;\n`;\nconst ArrowIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.storm};\n font-size: inherit;\n margin: 0 0.4rem;\n`;\nconst DisplayId = styled.span`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n white-space: nowrap;\n`;\nconst StoryPoints = styled.span`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n`;\nconst Updated = styled.span`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n`;\nconst Status = styled.span`\n display: inline-block;\n line-height: 1.4;\n text-transform: uppercase;\n`;\nconst CalloutListItem = styled.li`\n & + & {\n margin-top: 0.3rem;\n }\n`;\nconst Callout = styled.strong`\n color: ${props => props.theme.colors.all.wolverine};\n font-style: italic;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n line-height: 1.4;\n`;\n\nconst ReactionColumn = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n max-height: 7rem;\n flex-wrap: wrap-reverse;\n`;\nconst ReactionIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n width: 1.1rem;\n`;\nconst ReactionSet = styled.span`\n margin-bottom: 0.25rem;\n display: flex;\n align-items: center;\n`;\nconst ReactionCount = styled.span`\n margin-left: 0.5rem;\n`;\nconst ReactButtons = styled.div`\n display: flex;\n flex-direction: row;\n`;\nconst UserAnnotationsCell = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n`;\nconst ReactButton = styled(\"button\")<{ hasReaction: boolean }>`\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${\n !!props.hasReaction\n ? props.theme.colors.all.wolverine\n : props.theme.colors.all.lightJean\n }`};\n background-color: ${props => props.theme.colors.all.white};\n font-size: 1.1rem;\n padding: 0.8rem;\n margin-right: 0.8rem;\n`;\nconst ReactIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n margin-right: 0.8rem;\n`;\nconst WorkHeader = styled.div`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n font-size: 2rem;\n line-height: 1;\n`;\n\nconst WorkTypeIcon = styled(WorkMetadataIcon)`\n width: 1.3rem;\n margin-right: 0.8rem;\n`;\n\nconst WorkDisplayId = styled.span`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n font-size: 2rem;\n margin-right: 1.6rem;\n`;\n\nconst WorkTitle = styled.span`\n font-size: 2rem;\n font-weight: ${props => props.theme.fonts.subheader.weights.regular};\n`;\nconst InternalLink = styled(RouteLink)`\n align-items: center;\n display: flex;\n &,\n &:visited {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n text-decoration: none;\n }\n`;\nconst IssuesList = styled(WorkMetadataIssuesList)`\n border-spacing: 0;\n\n & th {\n background: ${props => props.theme.colors.all.white};\n\n &:last-child {\n padding-right: 0.8rem;\n }\n\n & div {\n white-space: nowrap;\n }\n\n & > div {\n line-height: 1;\n }\n }\n\n & tr {\n padding: 0;\n &:hover {\n background: ${props => props.theme.colors.all.lightJean};\n }\n\n &:hover {\n background: ${props => props.theme.colors.all.lightJean};\n\n &:not(.highlightedRow) {\n & td.activityType {\n background: ${props => props.theme.colors.all.lightJean};\n }\n }\n }\n\n &.highlightedRow {\n background: ${props => props.theme.colors.all.jubilee};\n\n & > .activityType {\n background: transparent;\n }\n }\n\n &.subRow {\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n }\n }\n\n & td {\n min-height: 4rem;\n\n &:first-child {\n border-left: none;\n }\n\n &:last-child {\n padding-right: 0.8rem;\n }\n\n &.activityType {\n background: ${props => props.theme.colors.all.white};\n height: 4rem;\n padding: 0;\n width: 5.6rem;\n }\n\n &.displayId {\n width: 6.4rem;\n }\n\n &.storyPoints {\n width: 6.4rem;\n }\n\n &.updated,\n &.status {\n width: 7.2rem;\n }\n\n &.callouts {\n width: 17.6rem;\n }\n\n &.owners {\n width: 5.6rem;\n }\n\n &.contributors {\n width: 9.6rem;\n }\n\n &.annotations {\n width: 24rem;\n & .reaction-set {\n padding: 0.25rem;\n }\n }\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n data: Array;\n testId?: string;\n showHeader?: boolean;\n manuallySort?: boolean;\n customColumns?: Array<{ id: string; position: number }>;\n};\n\nconst EpicDetailsIssuesList = ({\n className,\n data,\n testId = \"testId\",\n showHeader = true,\n manuallySort = true,\n customColumns\n}: Props) => {\n const thisTestId = `${testId}-epic-details-issues-list`;\n\n const { trackEvent } = useTracking();\n\n const { groupId } = useParams<{ groupId: string }>();\n const isUnlinkedPrs = groupId === reservedEpics.UNLINKED_PRS;\n\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const hasAnnotations = flags?.[\"annotations\"];\n\n const tenantId = useSelector(state => get(state, \"auth.authParams.tenantId\"));\n const accessToken = useSelector(state => get(state, \"auth.authAccessToken\"));\n\n const {\n updateUrlParams,\n urlParams,\n workItemsRequestParams,\n workDeepDiveParams,\n getWorkDeepDivePath\n } = useUrlParams();\n const activeTeam = useMemo(() => urlParams.team, [urlParams]);\n const teamMembers = useMemo(() => activeTeam?.teamMembers || [], [\n activeTeam\n ]);\n const sort = useMemo(() => urlParams.groupDetails.sort, [urlParams]);\n\n const userId = useSelector(state => get(state, \"user.id\"));\n\n // react-query hooks\n const queryClient = useQueryClient();\n // the result of useMutation is NOT stable but its attributes are, so it needs\n // to be deconstructed if intending to pass as a dependency\n // https://github.com/tannerlinsley/react-query/issues/1858\n const { mutate: writeAnnotationsMutate } = useMutation(writeAnnotations, {\n onSuccess: () => {\n // Invalidate annotations\n queryClient.invalidateQueries(\"annotations\");\n },\n onError: (err: string) => console.error(err)\n });\n const { mutate: removeAnnotationsMutate } = useMutation(removeAnnotations, {\n onSuccess: () => {\n // Invalidate annotations\n queryClient.invalidateQueries(\"annotations\");\n },\n onError: (err: string) => console.error(err)\n });\n\n const [activeIdToAnnotate, setActiveIdToAnnotate] = useState(\"\");\n\n const triggerWriteAnnotation = useCallback(\n async (\n workItem: WorkItemInterface,\n annotationStatus: string,\n event: React.SyntheticEvent,\n isText = false\n ) => {\n event.persist();\n const annotation = {\n parentId: workItem.epicId || \"\",\n workItemId: workItem.id,\n workItemAltId:\n workItem.workItem === workMetadataActivityTypes.PR\n ? workItem.url\n : workItem.displayId,\n workItemType: workItem.workItem,\n userAnnotationCheckinStatus: isText ? \"\" : annotationStatus,\n userAnnotationPainLevel: 0,\n userDetailedComment: isText ? annotationStatus : \"\",\n annotationContext: workItem.status,\n userId: userId,\n timestamp: new Date().toString()\n };\n const writeParams = {\n ...workItemsRequestParams,\n annotation,\n groupId: workItem.epicId || groupId,\n projectId: workItem.projectId\n };\n\n event.preventDefault();\n writeAnnotationsMutate({\n accessToken,\n params: writeParams,\n tenantId\n });\n\n trackEvent({\n e: event,\n label: \"write-work-item-annotation\",\n value: `${\n isText ? \"writing a text comment\" : \"reacting\"\n } with a value of ${annotationStatus} on work item ${workItem.id}`\n });\n },\n [\n accessToken,\n groupId,\n tenantId,\n trackEvent,\n workItemsRequestParams,\n userId,\n writeAnnotationsMutate\n ]\n );\n\n const triggerRemoveAnnotation = useCallback(\n async (\n existingAnnotation: AnnotationsInterface,\n event: React.SyntheticEvent\n ) => {\n event.preventDefault();\n removeAnnotationsMutate({\n accessToken,\n params: {\n annotationId: existingAnnotation.annotationId\n },\n tenantId\n });\n },\n [accessToken, tenantId, removeAnnotationsMutate]\n );\n\n const handleAnnotationClick = useCallback(\n (\n workItem: WorkItemLeveledInterface,\n annotationStatus: string,\n event: React.SyntheticEvent\n ) => {\n event.persist();\n const existingAnnotation = workItem.annotations?.find(\n (anno: AnnotationsInterface) =>\n anno.userId === userId &&\n anno.userAnnotationCheckinStatus === annotationStatus &&\n anno.workItemId === workItem.id\n );\n if (existingAnnotation) {\n triggerRemoveAnnotation(existingAnnotation, event);\n } else {\n triggerWriteAnnotation(workItem, annotationStatus, event);\n }\n },\n [triggerRemoveAnnotation, triggerWriteAnnotation, userId]\n );\n\n const triggerWriteTextComment = useCallback(\n (\n workItem: WorkItemInterface,\n textComment: string,\n event: React.SyntheticEvent\n ) => {\n triggerWriteAnnotation(workItem, textComment, event, true);\n },\n [triggerWriteAnnotation]\n );\n const onClickIssueLink = useCallback(\n ({\n e,\n issue\n }: {\n e: React.MouseEvent;\n issue: WorkItemLeveledInterface;\n }) => {\n e.persist();\n trackEvent({\n e,\n label: `${thisTestId}-issue-link-click`,\n value: `clicked ${issue.name}, url: ${issue.url}`\n });\n },\n [thisTestId, trackEvent]\n );\n\n const onClickHeader = useCallback(\n ({\n e,\n column\n }: {\n e: React.MouseEvent;\n column: ColumnInstance;\n }) => {\n let sortType,\n updatedSortedColumns: Array<{\n id: string;\n desc: boolean;\n }>;\n\n // order of sorting clicks is unsorted -> asc -> desc -> unsorted\n if (column.isSorted) {\n if (column.isSortedDesc) {\n updatedSortedColumns = [];\n sortType = \"unsorted\";\n } else {\n updatedSortedColumns = [{ id: column.id, desc: true }];\n sortType = \"sort-desc\";\n }\n } else {\n updatedSortedColumns = [{ id: column.id, desc: false }];\n sortType = \"sort-asc\";\n }\n\n e.persist();\n trackEvent({\n e,\n label: `epic-details-issues-list-${groupId}-${column.id}-header-sort`,\n value: `clicked ${column.id} header to ${sortType}`\n });\n updateUrlParams({\n [urlParamKeys.GROUP_DETAILS]: {\n [urlParamKeys.SORT]: updatedSortedColumns\n }\n });\n },\n [groupId, updateUrlParams, trackEvent]\n );\n\n const onShowCycleTimeTooltip = useCallback(\n ({\n e,\n issue\n }: {\n e: React.MouseEvent;\n issue: WorkItemInterface;\n }) => {\n e.persist();\n trackEvent({\n e,\n label: `epic-details-issues-list-cycle-time-mouse-over`,\n value: `mouse over ${issue.name} cycle time chart`\n });\n },\n [trackEvent]\n );\n\n const baseColumns: Array = useMemo(() => {\n return [\n {\n accessor: \"workItem\",\n onClickHeader,\n Header: \"Type\",\n Cell: ({ cell }: { cell: TableCellInterface }) => {\n const {\n url,\n workItem,\n level,\n hasChildWithCallouts,\n callouts,\n repository\n } = cell.row.original;\n const activityType = snakeCase(workItem).toUpperCase();\n const link =\n workItem === workMetadataActivityTypes.PR ? (\n \n \n \n ) : url ? (\n {\n onClickIssueLink({ e, issue: cell.row.original });\n }}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n data-heap-redact-attributes=\"href\"\n >\n \n {url}\n \n ) : null;\n return (\n \n \n \n \n {link}\n \n );\n },\n className: \"activityType\"\n },\n {\n accessor: \"displayId\",\n onClickHeader,\n Header: \"#\",\n Cell: ({ cell }: { cell: TableCellInterface }) => {\n const { workItem } = cell.row.original;\n return (\n \n {workItem === workMetadataActivityTypes.PR\n ? `#${cell.value}`\n : cell.value}\n \n );\n },\n className: \"displayId\"\n },\n {\n accessor: \"name\",\n onClickHeader,\n Header: \"Title\",\n Cell: ({ cell }: { cell: TableCellInterface }) => {\n const {\n cycleTime,\n originBranch,\n repository,\n targetBranch,\n url\n } = cell.row.original;\n // TODO: fixing a singular bug here (UL-5376), but if we see more\n // instances of this in other fields, we should probably investigate\n // unescaping unicode more universally at the ingestion level\n // adapted from here:\n // https://stackoverflow.com/questions/7885096/how-do-i-decode-a-string-with-escaped-unicode\n const name = cell.value.replace(/\\\\u([\\d\\w]{4})/gi, (match, group) =>\n decodeURIComponent(String.fromCharCode(parseInt(group, 16)))\n );\n\n const isPrDetails = customColumns?.find(i => i.id === \"id\");\n\n return (\n <>\n {isPrDetails ? (\n \n {name}\n \n
    \n ) : (\n {name}\n )}\n {!customColumns?.find(i => i.id === \"id\") && (\n <>\n {repository && targetBranch && originBranch ? (\n \n \n {repository}: {targetBranch}\n \n \n {originBranch}\n \n ) : null}\n ) =>\n onShowCycleTimeTooltip({ e, issue: cell.row.original })\n }\n testId={`${thisTestId}-${cell.row.original.id}`}\n />\n \n )}\n \n );\n },\n className: \"title\"\n },\n {\n accessor: \"storyPoints\",\n onClickHeader,\n Header: \"Stry Pts\",\n Cell: ({ cell }: { cell: TableCellInterface }) => (\n {cell.value}\n ),\n className: \"storyPoints\"\n },\n {\n accessor: \"updatedAt\",\n onClickHeader,\n Header: \"Updated\",\n Cell: ({ cell }: { cell: TableCellInterface }) => {\n return (\n \n \n \n );\n },\n className: \"updated\"\n },\n {\n accessor: \"statusDisplayText\",\n onClickHeader,\n Header: `Status`,\n Cell: ({ cell }: { cell: TableCellInterface }) => (\n {startCase(cell.value)}\n ),\n className: \"status\"\n },\n {\n accessor: (row: PrsByRepositoryRow | TableRowInterface) =>\n has(row, \"original\")\n ? get(row, \"original.callouts\").length\n : get(row, \"callouts\").length,\n id: \"callouts\",\n onClickHeader,\n Header: \"Callouts\",\n Cell: ({ cell }: { cell: TableCellInterface }) => {\n const { displayId, callouts } = cell.row.original;\n return !!callouts.length ? (\n
      \n {callouts\n .map(calloutId => calloutMetadata[calloutId] as string)\n .sort()\n .map(callout => {\n return (\n \n {callout}\n \n );\n })}\n
    \n ) : null;\n },\n className: \"callouts\"\n },\n {\n accessor: (row: PrsByRepositoryRow | TableRowInterface) =>\n has(row, \"original\")\n ? get(row, \"original.owners[0].displayName\")\n : get(row, \"owners[0].displayName\"),\n id: \"owners\",\n onClickHeader,\n Header:\n workDeepDiveParams.selectedSection ===\n workDeepDiveSections.PR_WORKFLOW\n ? \"Author(s)\"\n : \"Owner(s)\",\n Cell: ({ cell }: { cell: TableCellListColumnInterface }) => {\n const list = has(cell, \"row.original\")\n ? get(cell, \"row.original.owners\")\n : get(cell, \"row.owners\");\n return (\n \n );\n },\n className: \"owners\"\n },\n {\n accessor: (row: PrsByRepositoryRow | TableRowInterface) =>\n has(row, \"original\")\n ? get(row, \"original.contributors[0].displayName\")\n : get(row, \"contributors[0].displayName\"),\n id: \"contributors\",\n onClickHeader,\n Header:\n workDeepDiveParams.selectedSection ===\n workDeepDiveSections.PR_WORKFLOW\n ? \"Reviewers\"\n : \"Contributor(s)\",\n Cell: ({ cell }: { cell: TableCellListColumnInterface }) => {\n const list = has(cell, \"row.original\")\n ? get(cell, \"row.original.contributors\")\n : get(cell, \"row.contributors\");\n return (\n \n );\n },\n className: \"contributors\"\n },\n {\n accessor: \"annotations\",\n className: \"annotations\",\n Header: \"Retro Reactions\",\n Cell: ({\n cell\n }: {\n cell: TableCellInterface & {\n value: AnnotationsInterface[];\n };\n }) => {\n return (\n \n \n \n {\n handleAnnotationClick(row, status, event);\n }}\n />\n \n }\n >\n
    \n \n anno.userId === userId &&\n anno.userDetailedComment === \"\"\n )\n )\n }\n >\n \n React\n \n
    \n \n \n \n \n {cell.row.original.displayId}\n \n {cell.row.original.name}\n \n }\n setActiveIdToAnnotate={(id: string) =>\n setActiveIdToAnnotate(id)\n }\n handleAnnotationClick={(\n row: WorkItemLeveledInterface,\n status: string,\n event: React.SyntheticEvent\n ) => {\n handleAnnotationClick(row, status, event);\n }}\n triggerWriteTextComment={(\n row: WorkItemInterface,\n textComment: string,\n event: React.SyntheticEvent\n ) => triggerWriteTextComment(row, textComment, event)}\n />\n
    \n \n {toPairs(\n countBy(cell.value, item => item.userAnnotationCheckinStatus)\n ).map((entry: [string, number]) => {\n const iconToShow =\n Object.entries(StatusIconMap).filter(\n icon => icon[0] === entry[0]\n )?.[0]?.[1] || \"\";\n return (\n iconToShow && (\n \n {\" \"}\n {entry[1]}\n \n }\n popupContent={\n \n anno.userAnnotationCheckinStatus === entry[0]\n )}\n teamMembers={teamMembers}\n />\n }\n />\n )\n );\n })}\n
    \n \n \n \n {\n cell.value.filter(\n annotation => annotation.userDetailedComment !== \"\"\n ).length\n }\n \n \n
    \n
    \n
    \n );\n }\n }\n ];\n }, [\n activeIdToAnnotate,\n customColumns,\n flags,\n getWorkDeepDivePath,\n handleAnnotationClick,\n onClickHeader,\n onClickIssueLink,\n onShowCycleTimeTooltip,\n workDeepDiveParams.selectedSection,\n thisTestId,\n triggerWriteTextComment,\n userId,\n teamMembers\n ]);\n\n const additionalColumns: Array = useMemo(() => {\n return [\n {\n accessor: (row: PrsByRepositoryRow): string =>\n row.targetBranch as string,\n id: \"id\",\n onClickHeader,\n Header: \"Branch / Cycle Time\",\n Cell: ({ cell }: { cell: TableCellInterface }) => {\n const { cycleTime, originBranch, targetBranch } = cell.row.original;\n return (\n <>\n \n {targetBranch && originBranch ? (\n <PrSubstatus data-heap-redact-text=\"true\">\n <span>{targetBranch}</span>\n <ArrowIcon icon=\"line-arrow-left\" testId={thisTestId} />\n <span>{originBranch}</span>\n </PrSubstatus>\n ) : null}\n \n ) =>\n onShowCycleTimeTooltip({ e, issue: cell.row.original })\n }\n testId={`${thisTestId}-${cell.row.original.id}`}\n />\n \n );\n },\n className: \"id\"\n },\n {\n accessor: \"openedAt\",\n onClickHeader,\n Header: \"Opened\",\n Cell: ({ cell }: { cell: TableCellInterface }) => {\n return (\n \n \n \n );\n },\n className: \"updated\"\n },\n {\n accessor: (row: PrsByRepositoryRow): number =>\n row.complexity === \"COMPLEX_TO_REVIEW\" ? 1 : 0,\n id: \"complexity\",\n onClickHeader,\n Header: `Complexity`,\n Cell: ({ cell }: { cell: TableCellInterface }) => {\n return (\n \n {\n prComplexityLevels[\n cell.row.original.complexity as\n | \"NOT_COMPLEX_TO_REVIEW\"\n | \"COMPLEX_TO_REVIEW\"\n ]\n }\n \n );\n },\n className: \"status\"\n },\n {\n accessor: (row: PrsByRepositoryRow): string =>\n (row.childWorkItems[0]?.name || \"No Jira Ticket\").toLowerCase(),\n id: \"childWorkItems\",\n onClickHeader,\n Header: `Related Jira Ticket(s)`,\n Cell: ({ cell }: { cell: TableCellInterface }) => {\n const relatedTickets = cell.row.original?.childWorkItems.filter(\n t => !!t.name\n );\n\n return relatedTickets?.length ? (\n
      \n {relatedTickets.map(t => {\n return (\n
    • \n {t.url ? (\n \n {t.name}\n \n \n ) : (\n {t.name}\n )}\n
    • \n );\n })}\n
    \n ) : (\n No Jira Tickets\n );\n },\n className: \"related-ticket\"\n }\n ].filter(column => {\n return customColumns?.filter(col => col.id === column.accessor);\n });\n }, [customColumns, flags, onClickHeader, onShowCycleTimeTooltip, thisTestId]);\n\n const columns: Array = useMemo(() => {\n const combinedColumns = baseColumns;\n additionalColumns.forEach(col => {\n const columnToPush = customColumns?.find(\n i => i.id === (col.id || col.accessor)\n );\n if (columnToPush) {\n baseColumns.splice(columnToPush.position, 0, col);\n }\n });\n return combinedColumns;\n }, [additionalColumns, baseColumns, customColumns]);\n\n const hiddenColumns = useMemo(() => {\n const columns = [];\n if (!data.some(d => !isNil(d.storyPoints))) {\n columns.push(\"storyPoints\");\n }\n if (!hasAnnotations) {\n columns.push(\"annotations\");\n }\n if (\n workDeepDiveParams.selectedSection === workDeepDiveSections.PR_WORKFLOW\n ) {\n columns.push(\"storyPoints\");\n columns.push(\"annotations\");\n columns.push(\"displayId\");\n columns.push(\"workItem\");\n columns.push(\"updatedAt\");\n }\n return columns;\n }, [data, hasAnnotations, workDeepDiveParams]);\n\n return (\n \n \n {showHeader && (\n \n
    \n {!isUnlinkedPrs && \"Jira Tickets and Associated \"} PRs\n
    \n \n
    \n )}\n ({\n className: classNames({\n subRow: row.original.level > 0,\n highlightedRow: !!row.original.callouts.length\n })\n })}\n hiddenColumns={hiddenColumns}\n list={data}\n manuallySort={manuallySort}\n sortBy={sort}\n testId={thisTestId}\n />\n
    \n
    \n );\n};\n\nexport default EpicDetailsIssuesList;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isNil } from \"lodash\";\n\n// components\nimport Button from \"../Button/Button\";\n\n// constants\nimport { directionTypes } from \"../../constants/constants\";\n\n// styled components\nconst StyledContainer = styled.nav`\n align-items: center;\n display: flex;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n content: React.ReactNode;\n nextButton: React.ReactNode;\n prevButton: React.ReactNode;\n isNextDisabled: boolean;\n isPrevDisabled: boolean;\n onChange: (e: React.MouseEvent, direction: string) => void;\n testId?: string;\n};\n\nconst Stepper = ({\n className,\n content,\n onChange,\n isNextDisabled = false,\n isPrevDisabled = false,\n nextButton,\n prevButton,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-stepper`;\n\n if (isNil(content) || !nextButton || !onChange || !prevButton) {\n return null;\n }\n\n function onClickNext(e: React.MouseEvent) {\n e.persist();\n onChange(e, directionTypes.NEXT);\n }\n\n function onClickPrevious(e: React.MouseEvent) {\n e.persist();\n onChange(e, directionTypes.PREV);\n }\n\n return (\n \n \n {prevButton}\n \n {content}\n \n {nextButton}\n \n \n );\n};\n\nexport default Stepper;\n","import React, { useState } from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { chunk, times } from \"lodash\";\n\n// components\nimport Icon from \"../Icon/Icon\";\nimport Stepper from \"../Stepper/Stepper\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// constants\nimport { directionTypes } from \"../../constants/constants\";\nconst PAGE_SET_LENGTH = 5;\n\n// styled components\nconst Container = styled.div`\n display: flex;\n justify-content: center;\n`;\nconst ChunkStepper = styled(Stepper)`\n align-items: center;\n display: flex;\n`;\nconst PageList = styled.ul`\n display: flex;\n margin: 0 2.5rem;\n`;\nconst StepperIconWrapper = styled.div<{ disabled: boolean }>`\n align-items: center;\n color: ${props =>\n props.disabled\n ? props.theme.colors.disabled\n : props.theme.colors.all.auroraTeal};\n display: flex;\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n text-transform: uppercase;\n`;\nconst StepperIcon = styled(Icon)`\n color: currentColor;\n font-size: 3rem;\n`;\nconst PageButton = styled.button<{ isActive: boolean }>`\n background: transparent;\n border: 0;\n\n ${props => {\n if (props.isActive) {\n return css`\n &::after {\n content: \"\";\n display: block;\n height: 0.2rem;\n background: ${props.theme.colors.all.wolverine} !important;\n }\n `;\n }\n }}\n`;\nconst PageListItem = styled.li`\n & + & {\n margin-left: 1rem;\n }\n`;\nconst Ellipsis = styled(PageListItem)`\n margin-left: 0 !important;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n currentPage: number;\n onChange: ({\n e,\n updatedPage\n }: {\n e: React.MouseEvent;\n updatedPage: number;\n }) => void;\n name: string;\n pageSetLength?: number;\n finalPage: number;\n testId?: string;\n};\n\nconst PaginationStepper = ({\n className,\n currentPage,\n onChange,\n name,\n pageSetLength = PAGE_SET_LENGTH,\n testId = \"testId\",\n finalPage\n}: Props) => {\n const thisTestId = `${testId}-pagination`;\n const { trackEvent } = useTracking();\n\n function getChunkIndex(page: number) {\n return Math.floor(page / pageSetLength);\n }\n\n const [chunkedPages] = useState>>(\n chunk(\n times(finalPage + 1, (i: number) => i),\n pageSetLength\n )\n );\n const [currentChunkIndex, setCurrentChunkIndex] = useState(\n getChunkIndex(currentPage)\n );\n\n function onClickPage({\n e,\n updatedPage\n }: {\n e: React.MouseEvent;\n updatedPage: number;\n }) {\n e.persist();\n onChange({ e, updatedPage });\n trackEvent({\n e,\n label: `${name}-page-change`,\n value: `clicked on page ${updatedPage + 1}`\n });\n }\n function onChangeStepper(\n e: React.MouseEvent,\n direction: string\n ) {\n let updatedPage;\n if (direction === directionTypes.NEXT) {\n updatedPage = currentPage + 1;\n } else {\n updatedPage = currentPage - 1;\n }\n setCurrentChunkIndex(getChunkIndex(updatedPage));\n onChange({ e, updatedPage });\n trackEvent({\n e,\n label: `${name}-page-change`,\n value: `stepped page ${direction} to ${updatedPage + 1}`\n });\n }\n\n const isNextDisabled = currentPage === finalPage;\n const isPrevDisabled = currentPage === 0;\n const hasMorePageSets = currentChunkIndex < chunkedPages.length - 1;\n return (\n \n \n {chunkedPages[currentChunkIndex].map(index => (\n \n onClickPage({ e, updatedPage: index })}\n >\n {index + 1}\n \n \n ))}\n {hasMorePageSets && {\"\\u2026\"}}\n \n }\n isNextDisabled={isNextDisabled}\n isPrevDisabled={isPrevDisabled}\n nextButton={\n \n Next\n \n \n }\n onChange={onChangeStepper}\n prevButton={\n \n Back{\" \"}\n \n \n }\n testId={thisTestId}\n />\n \n );\n};\n\nexport default PaginationStepper;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport CrossTeamAvatar from \"../CrossTeamAvatar/CrossTeamAvatar\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { TeamMemberInterface } from \"../../interfaces/work-items\";\n\n// utils\nimport { addTeamAttributes } from \"../../utils/work-deep-dive\";\n\n// styled components\nconst Header = styled.h3`\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n display: flex;\n flex-direction: row;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n margin-bottom: 0;\n padding-bottom: 1rem;\n`;\nconst ListItem = styled.li`\n align-items: center;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n display: flex;\n padding: 1rem 0;\n`;\nconst StyledSlackAvatar = styled(SlackAvatar)`\n border: ${props => `0.2rem solid ${props.theme.colors.all.wolverine}`};\n border-radius: 50% 50%;\n height: 3rem;\n width: 3rem;\n`;\nconst StyledCrossTeamAvatar = styled(CrossTeamAvatar)`\n font-size: 1em;\n`;\nconst Name = styled.span`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin-left: 1rem;\n`;\nconst NoMembers = styled.p`\n margin-top: 2rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n list: Array;\n testId?: string;\n header: string;\n};\n\nconst WorkMetadataTeamList = ({\n className,\n list,\n testId = \"testId\",\n header\n}: Props) => {\n const thisTestId = `${testId}-work-metadata-team-list`;\n const { urlParams } = useUrlParams();\n const team = urlParams.team;\n const teamMembers = team?.teamMembers;\n\n return (\n
    \n
    \n {header}\n \n
    \n {!!list?.length && !!teamMembers?.length ? (\n
      \n {list.map(l => {\n const enhancedTeamMember = addTeamAttributes(l, teamMembers);\n return (\n \n {enhancedTeamMember.isCrossTeam ? (\n \n ) : (\n \n )}\n \n {enhancedTeamMember.displayName}\n \n \n );\n })}\n
    \n ) : (\n There are no members available.\n )}\n
    \n );\n};\n\nexport default WorkMetadataTeamList;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components\";\nimport { isNil } from \"lodash\";\n\nconst Container = styled.div`\n background: ${props => props.theme.colors.all.jean};\n border-radius: 40%;\n height: 2rem;\n width: 2rem;\n text-align: center;\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n font-size: ${props => props.theme.fonts.subheader.sizes.xs};\n`;\n\ntype Props = {\n testId?: string;\n className?: string;\n storyPoints?: number;\n};\n\nexport const StoryPoints = ({\n testId = \"testId\",\n className,\n storyPoints\n}: Props): ReactElement | null => {\n const thisTestId = `${testId}-story-points`;\n return isNil(storyPoints) ? null : (\n \n {storyPoints}\n \n );\n};\n\nexport default StoryPoints;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { capitalize, snakeCase, sortBy, startCase } from \"lodash\";\nimport InformationText from \"../../constants/informationText.json\";\n\n// components\nimport Icon from \"../Icon/Icon\";\nimport StoryPoints from \"../StoryPoints/StoryPoints\";\nimport WorkMetadataCycleTimeSummary from \"../WorkMetadataCycleTimeSummary/WorkMetadataCycleTimeSummary\";\nimport WorkMetadataIcon from \"../WorkMetadataIcon/WorkMetadataIcon\";\n\n// constants\nimport {\n reservedEpics,\n workMetadataActivityTypes,\n workMetadataStatusTypes\n} from \"../../constants/constants\";\n\n// hooks\nimport { useParams } from \"react-router-dom\";\n\n// interfaces\nimport { ActivityInterface } from \"../../interfaces/work-items\";\n\n// styled components\nconst ActivitiesWrapper = styled.div`\n align-items: flex-start;\n display: flex;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n`;\nconst AllIssuesList = styled.ul`\n display: grid;\n flex: 1;\n grid-template-columns: repeat(4, 1fr);\n`;\nconst AllIssuesListItem = styled.li`\n padding: 2rem;\n\n & + & {\n border-left: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n }\n`;\nconst Header = styled.h4`\n align-items: center;\n display: flex;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n`;\nconst IssueScore = styled.p`\n font-family: ${props => props.theme.fonts.subheader.name}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.header.sizes.xl};\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n`;\nconst BreakdownListItem = styled.li`\n align-items: center;\n display: flex;\n text-align: center;\n & + & {\n margin-top: 1rem;\n }\n`;\nconst BreakdownScore = styled.span`\n font-size: 2rem;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n margin-right: 1rem;\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n`;\nconst BreakdownStatus = styled.span`\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n text-transform: uppercase;\n margin-left: 1rem;\n`;\nconst TypeIcon = styled(WorkMetadataIcon)`\n margin-right: 2rem;\n`;\nconst UnlinkedPrsHelpText = styled.section`\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n max-width: 28rem;\n padding: 2rem 0;\n`;\nconst UnlinkedPrsHeader = styled.h4`\n font-family: ${props => props.theme.fonts.header.name}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n margin-bottom: 1rem;\n`;\nconst InfoIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n margin-right: 0.5rem;\n`;\nconst CycleTime = styled(WorkMetadataCycleTimeSummary)`\n margin: 3rem 0;\n width: 50%;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n data: Array;\n testId?: string;\n};\n\nconst WorkMetadataIssuesSummary = ({\n className,\n data,\n testId = \"testId\"\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-work-metadata-details-issues-summary`;\n const { groupId } = useParams<{ groupId: string }>();\n const isUnlinkedPrs = groupId === reservedEpics.UNLINKED_PRS;\n\n const workToDisplay = isUnlinkedPrs\n ? data.filter(\n item =>\n snakeCase(item.activityType).toUpperCase() ===\n workMetadataActivityTypes.PR\n )\n : data;\n const categoriesToDisplay = isUnlinkedPrs\n ? [workMetadataActivityTypes.PR]\n : [\n workMetadataActivityTypes.ISSUE,\n workMetadataActivityTypes.SUB_TASK,\n workMetadataActivityTypes.BUG,\n workMetadataActivityTypes.PR\n ];\n\n const cycleTime =\n workToDisplay.find(\n item =>\n snakeCase(item.activityType).toUpperCase() ===\n workMetadataActivityTypes.PR\n )?.cycleTime || null;\n\n const activityFromCategory = (\n category: string,\n work: Array\n ) =>\n work.find(\n (activity: ActivityInterface) =>\n snakeCase(activity.activityType).toUpperCase() === category\n );\n\n return (\n
    \n \n \n {categoriesToDisplay\n .filter(c => !!activityFromCategory(c, workToDisplay))\n .map((activityKey: string) => {\n const activity = activityFromCategory(activityKey, workToDisplay);\n\n const title =\n activityKey === workMetadataActivityTypes.BUG\n ? \"Bugs\"\n : activityKey === workMetadataActivityTypes.ISSUE\n ? \"Issues\"\n : activityKey === workMetadataActivityTypes.PR\n ? \"PRs\"\n : \"Subtasks\";\n\n const breakdown = activity?.breakdownByStatus || [];\n return (\n \n
    \n \n {title}\n
    \n {activity?.count ?? 0}\n
      \n {sortBy(breakdown, \"status\").map(b => {\n return (\n \n {b.count}\n \n \n {b.status === workMetadataStatusTypes.OPEN\n ? \"To do\"\n : b.status ===\n workMetadataStatusTypes.CLOSED_NOT_MERGED\n ? \"Closed/not merged\"\n : capitalize(startCase(b.status))}\n \n \n );\n })}\n
    \n
    \n );\n })}\n
    \n {isUnlinkedPrs ? (\n \n \n \n Link your PRs to Jira\n \n

    {InformationText[\"linking-prs\"]}

    \n
    \n ) : null}\n
    \n \n
    \n );\n};\n\nexport default WorkMetadataIssuesSummary;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { NIL } from \"uuid\";\n\n// components\nimport WorkMetadataDetailsTeamList from \"../WorkMetadataDetailsTeamList/WorkMetadataDetailsTeamList\";\nimport WorkMetadataIssuesSummary from \"../WorkMetadataIssuesSummary/WorkMetadataIssuesSummary\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { EpicDetailsInterface } from \"../../interfaces/work-items\";\nimport Icon from \"../Icon/Icon\";\n\n// styled components\nconst Header = styled.header`\n align-items: flex-start;\n display: flex;\n justify-content: space-between;\n`;\nconst Title = styled.h1`\n align-items: baseline;\n display: flex;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n font-size: 2rem;\n line-height: 1;\n margin-bottom: 2rem;\n`;\nconst EpicId = styled.span`\n border-right: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n margin-right: 1rem;\n padding-right: 1rem;\n`;\nconst TeamListRow = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 2rem;\n margin-top: 3rem;\n`;\nconst Link = styled.a`\n align-items: center;\n display: flex;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.medium};\n &,\n &:visited {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n }\n`;\nconst LinkIcon = styled(Icon)`\n color: inherit;\n font-size: 1.1rem;\n margin-right: 0.5rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n data: EpicDetailsInterface;\n testId?: string;\n};\n\nconst WorkMetadataDetailsSummary = ({\n className,\n data,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-work-metadata-details-summary`;\n const { trackEvent } = useTracking();\n\n function onClickEpicLink({\n e,\n url\n }: {\n e: React.MouseEvent;\n url: string;\n }) {\n e.persist();\n trackEvent({\n e,\n label: `${thisTestId}-view-in-jira-link-click`,\n value: `clicked, url: ${url}`\n });\n }\n\n const {\n activities,\n contributors,\n workCategoryId,\n workCategoryName,\n workCategoryUrl,\n owners\n } = data;\n\n return (\n
    \n
    \n \n {!!workCategoryId && workCategoryId !== NIL ? (\n <EpicId>{workCategoryId}</EpicId>\n ) : null}\n {workCategoryName}\n \n {!!workCategoryUrl && (\n ) => {\n onClickEpicLink({ e, url: workCategoryUrl });\n }}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n \n View in Jira\n \n )}\n
    \n \n \n \n \n \n
    \n );\n};\n\nexport default WorkMetadataDetailsSummary;\n","import { omit } from \"lodash\";\n\n// constants\nimport { timerangeTypes, urlParamKeys } from \"../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useQuery, UseQueryResult } from \"react-query\";\nimport { useUrlParams } from \"./useUrlParams\";\n\n// interfaces\nimport {\n EpicDetailsInterface,\n GroupsListInterface,\n WorkItemsRequestParamsInterface\n} from \"../interfaces/work-items\";\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport { requestWorkItems } from \"../utils/work-deep-dive\";\nimport {\n getSprintRetrosRequestParamsFromWorkItemsRequestParams,\n getWorkItemsRequestParamsPRWorkflow\n} from \"../utils/url-params\";\n\ntype KeyProps = {\n type: string;\n previous?: boolean;\n};\nexport const useWorkItemsData = ({\n options,\n canRequest = true\n}: {\n options?: KeyProps;\n canRequest?: boolean;\n} = {}): UseQueryResult => {\n const { workItemsRequestParams, urlParams } = useUrlParams();\n const { timerange } = urlParams;\n const isKanbanMode = timerange.timerangeType !== timerangeTypes.SPRINTS;\n\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n\n let dataRequestParams =\n options?.type === \"retros\"\n ? getSprintRetrosRequestParamsFromWorkItemsRequestParams(\n workItemsRequestParams\n )\n : options?.type === \"pr-workflow\"\n ? getWorkItemsRequestParamsPRWorkflow(workItemsRequestParams)\n : workItemsRequestParams;\n\n // if we are in kanban mode, there are some keys that shouldn't be passed\n // along to the work-items call, so filter those out -- since we're mixing\n // where we're building our request params between here and utils, do one\n // final sanity check here for now\n if (isKanbanMode) {\n dataRequestParams = omit(dataRequestParams, [\n urlParamKeys.SPRINT_WORK_TYPES,\n urlParamKeys.SPRINT_WORK_OTHER,\n urlParamKeys.SPRINT_ID\n ]) as WorkItemsRequestParamsInterface;\n }\n\n return useQuery(\n [\"work-items\", { ...options, ...dataRequestParams }],\n () =>\n requestWorkItems({\n accessToken,\n tenantId,\n params: dataRequestParams\n }).then(response =>\n !!dataRequestParams.epicId\n ? (response as EpicDetailsInterface)\n : (response as GroupsListInterface)\n ),\n {\n enabled:\n !!accessToken &&\n !!tenantId &&\n !!dataRequestParams?.allUsers.length &&\n canRequest,\n refetchOnWindowFocus: false\n }\n );\n};\n","// constants\nimport { timerangeIds } from \"../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useUrlParams } from \"./useUrlParams\";\nimport { useParams } from \"react-router-dom\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\nimport { useQuery } from \"react-query\";\n\n// utils\nimport { requestAnnotations } from \"../utils/work-deep-dive\";\n\ntype KeyProps = { type: string };\nexport const useAnnotationsData = (options: KeyProps, canRequest = true) => {\n const { groupId } = useParams<{ groupId: string }>();\n\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n\n const { urlParams, workItemsRequestParams } = useUrlParams();\n\n const requestParams =\n options.type === \"retros\" &&\n urlParams.timerange.timerangeType === timerangeIds.SPRINTS\n ? {\n ...workItemsRequestParams,\n context: { sprintId: urlParams.timerange.id }\n }\n : workItemsRequestParams;\n\n return useQuery(\n [\"annotations\", { ...requestParams, groupId }],\n () =>\n requestAnnotations({\n accessToken,\n tenantId,\n // annotations needs users to be not empty, but the project explorer uses empty in some cases, so override here\n params: { ...requestParams, users: requestParams.allUsers }\n }),\n {\n enabled:\n !!accessToken &&\n !!tenantId &&\n !!workItemsRequestParams.allUsers.length &&\n canRequest\n }\n );\n};\n","import React, { useEffect, useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, isUndefined } from \"lodash\";\n\n// components\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport EpicDetailsIssuesList from \"../EpicDetailsIssuesList/EpicDetailsIssuesList\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport PaginationStepper from \"../PaginationStepper/PaginationStepper\";\nimport WorkMetadataDetailsSummary from \"../WorkMetadataDetailsSummary/WorkMetadataDetailsSummary\";\n\n// hooks\nimport { useWorkItemsData } from \"../../hooks/useWorkItemsData\";\nimport { useAnnotationsData } from \"../../hooks/useAnnotationsData\";\nimport { useSelector } from \"react-redux\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { EpicDetailsInterface } from \"../../interfaces/work-items\";\n\n// utils\nimport { getEpicDetailsPageTitle } from \"../../utils/work-deep-dive\";\nimport { flattenWorkItems } from \"../../utils/work-items\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\nimport { urlParamKeys } from \"../../constants/constants\";\n\n// styled components\nconst IssuesList = styled(EpicDetailsIssuesList)`\n margin-top: 3rem;\n`;\nconst ContentWrapper = styled.div`\n background: ${props => props.theme.colors.all.white};\n padding: 1.2rem 2rem 2rem;\n`;\nconst PaginationStepperWrapper = styled.div`\n margin-top: 2rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst EpicDetails = ({ className, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-epic-details`;\n\n const { updateUrlParams, urlParams } = useUrlParams();\n const groupBy = urlParams.groupBy;\n const { data, isError, isFetching, isSuccess } = useWorkItemsData();\n const { data: annotationsData } = useAnnotationsData({\n type: \"epic-details\"\n });\n\n // FIXME: for some reason TS isn't understanding that this is an epicdetailsinterface coming out of useWorkItems\n const rawWorkItemsData = data as EpicDetailsInterface;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const hasAnnotations = flags?.[\"annotations\"];\n const flattenedAndAnnotatedWorkItems = useMemo(() => {\n if (\n !isUndefined(rawWorkItemsData?.workItems) &&\n !isUndefined(annotationsData)\n ) {\n const flattenedWorkItems = flattenWorkItems({\n workItems: rawWorkItemsData.workItems,\n rootWorkItemId: null,\n level: 0\n });\n if (!isUndefined(annotationsData)) {\n return flattenedWorkItems.map(item => ({\n ...item,\n annotations: annotationsData.filter(\n (annotation: Record) =>\n hasAnnotations &&\n !!annotation?.workItemId &&\n annotation?.workItemId === item.id\n )\n }));\n }\n return flattenedWorkItems;\n }\n return null;\n }, [annotationsData, hasAnnotations, rawWorkItemsData]);\n\n // page title change to add extra epic details\n useEffect(() => {\n if (!!rawWorkItemsData) {\n document.title = getEpicDetailsPageTitle({\n groupBy,\n workCategoryId: rawWorkItemsData.workCategoryId,\n workCategoryName: rawWorkItemsData.workCategoryName\n });\n }\n }, [rawWorkItemsData, groupBy, isSuccess]);\n\n function onChangePaginationStepper({ updatedPage }: { updatedPage: number }) {\n updateUrlParams({\n [urlParamKeys.GROUP_DETAILS]: {\n [urlParamKeys.PAGE]: updatedPage\n }\n });\n window.scroll({ top: 0, left: 0, behavior: \"smooth\" });\n }\n\n return (\n
    \n \n }\n content={\n !!rawWorkItemsData && !!flattenedAndAnnotatedWorkItems?.length ? (\n \n \n \n \n \n \n \n \n \n ) : null\n }\n testId={thisTestId}\n />\n
    \n );\n};\n\nexport default EpicDetails;\n","import React from \"react\";\nimport { Drawer } from \"@material-ui/core\";\nimport styled from \"styled-components/macro\";\n\n// styled components\nconst Container = styled(Drawer)`\n & .MuiDrawer-paper {\n width: 40rem;\n }\n`;\n\n// typescript props\ntype Props = {\n children: React.ReactNode;\n className?: string;\n isOpen?: boolean;\n onCloseDrawer?: (e: React.MouseEvent) => void;\n testId?: string;\n};\n\nconst ContextDrawer = ({\n children,\n className,\n isOpen = false,\n onCloseDrawer = () => null,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-context-drawer`;\n return (\n \n {children}\n \n );\n};\n\nexport default ContextDrawer;\n","export default __webpack_public_path__ + \"static/media/checked.9721ea25.svg\";","export default __webpack_public_path__ + \"static/media/unchecked-light.cadcb343.svg\";","export default __webpack_public_path__ + \"static/media/unchecked-dark.836785c0.svg\";","import React from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport checkedAsset from \"../../images/checked.svg\";\nimport uncheckedLightAsset from \"../../images/unchecked-light.svg\";\nimport uncheckedDarkAsset from \"../../images/unchecked-dark.svg\";\n\n// interfaces\nimport { RadioCheckboxOptionsInterface } from \"../../interfaces/controls\";\n// styled components\nconst HiddenInput = styled.input`\n margin-right: -1rem;\n opacity: 0;\n`;\nconst Label = styled.label`\n display: flex;\n align-items: flex-start;\n margin: 0;\n vertical-align: middle;\n`;\nconst DisplayInput = styled.span<{\n checked: boolean;\n variation: \"light\" | \"dark\";\n}>`\n flex: 0 0 2.45rem;\n height: 1.95rem;\n margin-right: 1rem;\n position: relative;\n z-index: 1;\n\n ${HiddenInput}:focus + & {\n outline: 5px auto -webkit-focus-ring-color;\n }\n\n ${props => {\n const bgImage = props.checked\n ? checkedAsset\n : props.variation === \"light\"\n ? uncheckedLightAsset\n : uncheckedDarkAsset;\n return css`\n background: url(${bgImage}) no-repeat;\n `;\n }};\n`;\nconst TextWrapper = styled.div`\n display: flex;\n flex: 1;\n flex-direction: row;\n line-height: 1.3;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n name: string;\n onChange: (e: React.ChangeEvent) => void;\n testId?: string;\n variation?: \"light\" | \"dark\";\n} & RadioCheckboxOptionsInterface;\n\nconst CustomCheckboxInput = ({\n className,\n disabled = false,\n label,\n name,\n onChange,\n selected = false,\n testId = \"testId\",\n value,\n variation = \"dark\"\n}: Props) => {\n return (\n \n );\n};\n\nexport default CustomCheckboxInput;\n","import React from \"react\";\nimport styled, { css } from \"styled-components/macro\";\n\n// interfaces\nimport { RadioCheckboxOptionsInterface } from \"../../interfaces/controls\";\n\n// styled components\nconst HiddenInput = styled.input`\n margin-right: -1rem;\n opacity: 0;\n`;\nconst Label = styled.label`\n display: flex;\n align-items: center;\n margin: 0;\n vertical-align: middle;\n`;\nconst DisplayInput = styled.span<{ checked: boolean }>`\n flex: 0 0 1.75rem;\n height: 1.75rem;\n margin-right: 1rem;\n position: relative;\n align-items: center;\n border-radius: 50%;\n ${HiddenInput}:focus + & {\n outline: 5px auto -webkit-focus-ring-color;\n }\n ${props => {\n return props.checked\n ? css`\n border: ${props => `0.2rem solid ${props.theme.colors.all.storm}`};\n background: ${props => props.theme.colors.all.marvelMint} no-repeat;\n `\n : css`\n background: ${props => props.theme.colors.all.jean} no-repeat;\n `;\n }};\n`;\nconst TextWrapper = styled.div`\n display: flex;\n flex: 1;\n flex-direction: row;\n line-height: 1.3;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n name: string;\n onChange: (e: React.ChangeEvent) => void;\n testId?: string;\n} & RadioCheckboxOptionsInterface;\n\nconst CustomRadioInput = ({\n className,\n disabled = false,\n label,\n name,\n onChange,\n selected,\n testId = \"testId\",\n value\n}: Props) => {\n return (\n \n );\n};\n\nexport default CustomRadioInput;\n","import React from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { isEmpty } from \"lodash\";\n\n// components\nimport CustomCheckboxInput from \"../CustomCheckboxInput/CustomCheckboxInput\";\n\n// interfaces\nimport {\n RadioCheckboxOptionsInterface,\n RadioCheckboxToggleHandlerInterface\n} from \"../../interfaces/controls\";\nimport CustomRadioInput from \"../CustomRadioInput/CustomRadioInput\";\n\n// styled components\nconst Container = styled.ul<{ columns: number | undefined }>`\n ${props => {\n if (props.columns) {\n return css`\n display: grid;\n grid-template-columns: repeat(${props.columns}, 1fr);\n gap: 0.5rem;\n `;\n }\n }}\n`;\nconst InputsListWrapper = styled.div`\n padding: 0.5rem 0 0 3.5rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n columns?: number | undefined;\n name: string;\n onChange: ({ e, option }: RadioCheckboxToggleHandlerInterface) => void;\n options: Array;\n testId?: string;\n type?: \"checkbox\" | \"radio\";\n};\n\nconst InputsList = ({\n className,\n columns = 1,\n name,\n onChange,\n options,\n testId = \"testId\",\n type = \"checkbox\"\n}: Props) => {\n const thisTestId = `${testId}-inputs-list`;\n if (isEmpty(options)) {\n return null;\n }\n\n return (\n \n {options.map(option => {\n const { disabled, selected, label, value, children } = option;\n const id = `${name}-${value.toString()}`;\n\n return (\n
  • \n {type === \"checkbox\" ? (\n ) =>\n onChange({ e, option })\n }\n testId={id}\n value={value}\n />\n ) : (\n ) =>\n onChange({ e, option })\n }\n testId={id}\n value={value}\n />\n )}\n {children && (\n \n \n \n )}\n
  • \n );\n })}\n
    \n );\n};\n\nexport default InputsList;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty } from \"lodash\";\n\n// components\nimport InputsList from \"../InputsList/InputsList\";\n\n// interfaces\nimport {\n RadioCheckboxOptionsInterface,\n RadioCheckboxToggleAllHandlerInterface,\n RadioCheckboxToggleHandlerInterface\n} from \"../../interfaces/controls\";\n\n// styled components\nconst AllSelectedToggle = styled.button`\n background: none;\n border: 0;\n color: ${props => props.theme.colors.all.auroraTeal};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n margin-top: 1rem;\n padding: 0;\n`;\nconst StyledSelectableInputsList = styled.div``;\n\n// typescript props\ntype Props = {\n className?: string;\n columns?: number;\n header?: React.ReactNode;\n name: string;\n onToggleAllSelected?: ({\n e,\n allSelected\n }: RadioCheckboxToggleAllHandlerInterface) => void;\n onToggleListItem: (params: RadioCheckboxToggleHandlerInterface) => void;\n options: Array;\n showSelectAll?: boolean;\n testId?: string;\n type?: \"checkbox\" | \"radio\";\n};\n\nconst SelectableInputsList = ({\n columns = 1,\n className,\n header,\n name,\n options,\n onToggleListItem,\n onToggleAllSelected = () => {\n // do nothing\n },\n showSelectAll = false,\n testId = \"testId\",\n type = \"checkbox\"\n}: Props) => {\n const thisTestId = `${testId}-checkbox-list`;\n if (isEmpty(options) || !onToggleListItem) {\n return null;\n }\n\n const allSelected = options.every(o => o.selected);\n return (\n \n {header}\n \n {showSelectAll && (\n onToggleAllSelected({ e, allSelected: !allSelected })}\n data-testid={`${testId}-all-selected-toggle`}\n >\n {allSelected ? \"Unselect\" : \"Select\"} all\n \n )}\n \n );\n};\n\nexport default SelectableInputsList;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport SelectableInputsList from \"../SelectableInputsList/SelectableInputsList\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { RadioCheckboxToggleHandlerInterface } from \"../../interfaces/controls\";\nimport { UiFilterSelectionStatusInterface } from \"../../interfaces/ui-filter\";\n\n// styled components\nconst Container = styled.div`\n background: ${props => props.theme.colors.all.lightJean};\n`;\nconst Header = styled.h4`\n align-items: center;\n display: flex;\n font-size: inherit;\n font-weight: ${props => props.theme.fonts.primary.weights.book};\n`;\n\nconst CheckboxWrapper = styled.div`\n background: ${props => props.theme.colors.all.white};\n padding: 2rem;\n`;\nconst Checkboxes = styled(SelectableInputsList)`\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n line-height: 1.8;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n header: React.ReactNode;\n list: Array;\n onUpdateSelection: (updated: Array) => void;\n name: string;\n testId?: string;\n};\n\nconst EpicFilterCheckboxList = ({\n className,\n header,\n list,\n name,\n onUpdateSelection,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-epic-filter-checkbox-list`;\n const { trackEvent } = useTracking();\n\n function onToggleSelection({\n e,\n option\n }: RadioCheckboxToggleHandlerInterface) {\n trackEvent({\n e,\n label: `${name}-epic-filter`,\n value: `${option.label} toggled ${e.target.checked ? \"on\" : \"off\"}`\n });\n onUpdateSelection(\n list.map(l => {\n return {\n ...l,\n isSelected: option.value === l.id ? e.target.checked : l.isSelected\n };\n })\n );\n }\n\n const listOptions = list.map(l => {\n return {\n disabled: !!l.isDisabled,\n label: l.name,\n selected: l.isSelected,\n value: l.id\n };\n });\n\n return (\n \n
    {header}
    \n \n \n \n
    \n );\n};\n\nexport default EpicFilterCheckboxList;\n","import React, { useMemo, useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { debounce, isEmpty } from \"lodash\";\n\n// components\nimport EpicFilterCheckboxList from \"../EpicFilterCheckboxList/EpicFilterCheckboxList\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\n\n// constants\nimport {\n sprintOptions,\n urlParamKeys,\n urlParamsValuesLabels\n} from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { UiFilterSelectionStatusInterface } from \"../../interfaces/ui-filter\";\nimport {\n EpicDetailsInterface,\n GroupsListInterface,\n ResponseTotalInterface\n} from \"../../interfaces/work-items\";\nimport {\n UrlParamsInterface,\n UrlParamsHookReturnInterface\n} from \"../../interfaces/url-params\";\n\n// styled components\nconst Option = styled.span`\n align-items: center;\n display: flex;\n`;\n\ntype Props = {\n className?: string;\n otherSprintItems: UrlParamsInterface[\"otherSprintItems\"];\n testId?: string;\n updateUrlParams: UrlParamsHookReturnInterface[\"updateUrlParams\"];\n workItemsData?: EpicDetailsInterface | GroupsListInterface;\n};\n\nexport const OtherSprintItemsFilter = ({\n className,\n otherSprintItems,\n testId = \"testId\",\n updateUrlParams,\n workItemsData\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-owner-contributor-filter`;\n const { trackEvent } = useTracking();\n const [areFiltersDisabled, setAreFiltersDisabled] = useState(false);\n const otherSprintItemsTotals = workItemsData?.otherSprintItemsTotals;\n const optionsList = ([\n {\n id: sprintOptions.UNASSIGNED.id,\n isDisabled: areFiltersDisabled,\n isSelected: otherSprintItems.includes(sprintOptions.UNASSIGNED.id),\n helpTextKey: \"sprint-options-unassigned\"\n },\n {\n id: sprintOptions.OTHER_TEAMS.id,\n isDisabled: areFiltersDisabled,\n isSelected: otherSprintItems.includes(sprintOptions.OTHER_TEAMS.id),\n helpTextKey: \"sprint-options-other-teams\"\n }\n ] as Array<{\n name: string;\n id: string;\n isDisabled: boolean;\n isSelected: boolean;\n helpTextKey: \"sprint-options-unassigned\" | \"sprint-options-other-teams\";\n }>).map(o => {\n return {\n ...o,\n name: (\n \n )\n };\n });\n\n // fixing ts error with this:\n // https://github.com/facebook/react/issues/19240#issuecomment-652945246\n const debouncedToggle = useMemo(\n () =>\n debounce(updatedOtherSprintItems => {\n updateUrlParams({\n [urlParamKeys.SPRINT_WORK_OTHER]: updatedOtherSprintItems\n });\n setAreFiltersDisabled(false);\n }, 500),\n [updateUrlParams]\n );\n\n function onToggleOtherSprintItems(\n updated: Array\n ) {\n const updatedOtherSprintItems = updated\n .filter((u: UiFilterSelectionStatusInterface) => u.isSelected)\n .map((s: UiFilterSelectionStatusInterface) => s.id);\n\n setAreFiltersDisabled(true);\n debouncedToggle(updatedOtherSprintItems);\n trackEvent({\n label: \"ui-filter-sprint-options-change\",\n value: `changed selected sprint options to ${\n isEmpty(updatedOtherSprintItems)\n ? \"none selected\"\n : updatedOtherSprintItems.join(\",\")\n }`\n });\n }\n\n return (\n
    \n \n
    \n );\n};\n\nexport default OtherSprintItemsFilter;\n","import React, { useMemo, useState } from \"react\";\nimport { isEmpty, debounce } from \"lodash\";\n\n// components\nimport EpicFilterCheckboxList from \"../EpicFilterCheckboxList/EpicFilterCheckboxList\";\n\n// constants\nimport {\n ownerContributorAlternativeLabels,\n ownerContributorTypes,\n urlParamKeys,\n urlParamsValuesLabels\n} from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { UiFilterSelectionStatusInterface } from \"../../interfaces/ui-filter\";\nimport {\n UrlParamsInterface,\n UrlParamsHookReturnInterface\n} from \"../../interfaces/url-params\";\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n ownerContributor: UrlParamsInterface[\"ownerContributor\"];\n updateUrlParams: UrlParamsHookReturnInterface[\"updateUrlParams\"];\n useAlternativeLabels: boolean;\n};\n\nconst OwnerContributorFilter = ({\n className,\n ownerContributor,\n testId = \"testId\",\n updateUrlParams,\n useAlternativeLabels\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-owner-contributor-filter`;\n const { trackEvent } = useTracking();\n const [areFiltersDisabled, setAreFiltersDisabled] = useState(false);\n\n const optionsList = [\n ownerContributorTypes.OWNER,\n ownerContributorTypes.CONTRIBUTOR\n ].map(m => {\n return {\n id: m,\n isDisabled: areFiltersDisabled,\n isSelected: ownerContributor.includes(m),\n name: `${\n useAlternativeLabels\n ? ownerContributorAlternativeLabels[m]\n : urlParamsValuesLabels[m]\n }`\n };\n });\n\n // fixing ts error with this:\n // https://github.com/facebook/react/issues/19240#issuecomment-652945246\n const debouncedToggle = useMemo(\n () =>\n debounce(updatedTypes => {\n updateUrlParams({\n [urlParamKeys.OWNER_CONTRIBUTOR]: updatedTypes\n });\n setAreFiltersDisabled(false);\n }, 500),\n [updateUrlParams]\n );\n\n function onToggleType(updated: Array) {\n const updatedTypes = updated\n .filter((u: UiFilterSelectionStatusInterface) => u.isSelected)\n .map((s: UiFilterSelectionStatusInterface) => s.id);\n\n setAreFiltersDisabled(true);\n debouncedToggle(updatedTypes);\n trackEvent({\n label: \"ui-filter-owner-contributor-change\",\n value: `changed owner-contributor to ${(isEmpty(updatedTypes)\n ? Object.values(ownerContributorTypes)\n : updatedTypes\n ).join(\",\")}`\n });\n }\n\n return (\n
    \n \n
    \n );\n};\n\nexport default OwnerContributorFilter;\n","import React, { useMemo, useState } from \"react\";\nimport { isEmpty, debounce } from \"lodash\";\n\n// components\nimport EpicFilterCheckboxList from \"../EpicFilterCheckboxList/EpicFilterCheckboxList\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\n\n// constants\nimport {\n reservedEpics,\n reservedProjects,\n urlParamKeys\n} from \"../../constants/constants\";\n\n// hooks\nimport { useParams } from \"react-router-dom\";\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { UiFilterSelectionStatusInterface } from \"../../interfaces/ui-filter\";\nimport {\n EpicDetailsInterface,\n GroupsListInterface,\n ProjectInterface,\n ResponseTotalInterface\n} from \"../../interfaces/work-items\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport {\n UrlParamsInterface,\n UrlParamsHookReturnInterface\n} from \"../../interfaces/url-params\";\n\n// typescript props\ntype Props = {\n className?: string;\n isFetching: boolean;\n isSuccess: boolean;\n projectIds: UrlParamsInterface[\"projectIds\"];\n testId?: string;\n updateUrlParams: UrlParamsHookReturnInterface[\"updateUrlParams\"];\n workItemsData?: EpicDetailsInterface | GroupsListInterface;\n};\n\nconst ProjectsFilter = ({\n className,\n isFetching,\n isSuccess,\n projectIds,\n testId = \"testId\",\n updateUrlParams,\n workItemsData\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-projects-selector`;\n const { trackEvent } = useTracking();\n const [areFiltersDisabled, setAreFiltersDisabled] = useState(false);\n const { groupId } = useParams<{\n groupId: string;\n }>();\n\n const projectTotals = workItemsData?.projectTotals;\n const projects = workItemsData?.projects || [];\n\n const optionsList = projects.map((p: ProjectInterface) => {\n const projectKey =\n p.projectId === reservedProjects.NO_PROJECT ? \"\" : ` (${p.projectKey})`;\n return {\n ...p,\n id: p.projectId,\n isDisabled: areFiltersDisabled,\n isSelected: projectIds.includes(p.projectId),\n name: (\n \n {p.projectName}\n {projectKey} (\n {projectTotals?.find(\n (t: ResponseTotalInterface) => t.projectId === p.projectId\n )?.total || 0}\n )\n \n )\n };\n });\n\n // fixing ts error with this:\n // https://github.com/facebook/react/issues/19240#issuecomment-652945246\n const debouncedToggle = useMemo(\n () =>\n debounce(updatedProjectIds => {\n updateUrlParams({\n [urlParamKeys.PROJECT_IDS]: updatedProjectIds\n });\n setAreFiltersDisabled(false);\n }, 500),\n [updateUrlParams]\n );\n\n function onToggleProject({\n allProjects,\n updated\n }: {\n allProjects: Array;\n updated: Array;\n }) {\n const updatedProjectIds = updated\n .filter((u: UiFilterSelectionStatusInterface) => u.isSelected)\n .map(p => p.id);\n setAreFiltersDisabled(true);\n debouncedToggle(updatedProjectIds);\n trackEvent({\n label: \"ui-filter-projects-change\",\n value: `changed projects to ${(isEmpty(updatedProjectIds)\n ? allProjects\n : allProjects.filter(p => updatedProjectIds.includes(p.projectId))\n )\n .map(p => p.projectName)\n .join(\",\")}`\n });\n }\n\n return (\n
    \n \n Jira Projects{\" \"}\n \n \n }\n list={optionsList}\n name=\"projects\"\n onUpdateSelection={updated =>\n onToggleProject({\n allProjects: projects,\n updated\n })\n }\n testId=\"projects\"\n />\n }\n testId={thisTestId}\n />\n
    \n );\n};\n\nexport default ProjectsFilter;\n","import React, { useMemo, useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, debounce, union, sum } from \"lodash\";\n\n// components\nimport EpicFilterCheckboxList from \"../EpicFilterCheckboxList/EpicFilterCheckboxList\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\n\n// constants\nimport {\n urlParamKeys,\n pullRequestCalloutTypes,\n workItemCalloutTypes,\n PullRequestStalledOptions,\n urlParamsValuesLabels\n} from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { UiFilterSelectionStatusInterface } from \"../../interfaces/ui-filter\";\nimport {\n EpicDetailsInterface,\n GroupsListInterface,\n ResponseTotalInterface\n} from \"../../interfaces/work-items\";\nimport {\n UrlParamsInterface,\n UrlParamsHookReturnInterface\n} from \"../../interfaces/url-params\";\n\n// styled components\nconst Option = styled.span`\n align-items: center;\n display: flex;\n`;\n\n// typescript props\ntype Props = {\n callouts: UrlParamsInterface[\"callouts\"];\n className?: string;\n testId?: string;\n updateUrlParams: UrlParamsHookReturnInterface[\"updateUrlParams\"];\n workItemsData?: EpicDetailsInterface | GroupsListInterface;\n};\n\nconst PullRequestCalloutsFilter = ({\n callouts,\n className,\n testId = \"testId\",\n updateUrlParams,\n workItemsData\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-pull-request-callouts-filter`;\n const { trackEvent } = useTracking();\n const [areFiltersDisabled, setAreFiltersDisabled] = useState(false);\n const sprintCallouts = callouts.filter((c: string) =>\n Object.values(workItemCalloutTypes).includes(c)\n );\n const calloutTotals = workItemsData?.calloutTotals;\n const enabledCalloutIds = calloutTotals?.map(c => c.callout) as string[];\n const optionsList = ([\n {\n helpTextKey: \"stuck\",\n id: pullRequestCalloutTypes.STUCK\n },\n {\n helpTextKey: \"pr-callout-merged-no-approval\",\n id: pullRequestCalloutTypes.PULL_REQUEST_MERGED_WITHOUT_APPROVAL\n },\n {\n helpTextKey: \"pr-callout-surprising\",\n id: pullRequestCalloutTypes.LOW_COMPLEXITY_HIGH_COMMENTS\n }\n ] as Array<{\n name: string;\n helpTextKey:\n | \"stuck\"\n | \"pr-callout-merged-no-approval\"\n | \"pr-callout-surprising\";\n id: string;\n }>)\n .filter(\n c =>\n enabledCalloutIds?.includes(c.id) ||\n (c.id === pullRequestCalloutTypes.STUCK &&\n enabledCalloutIds?.find(i => i.startsWith(\"STALLED\")))\n )\n .map(m => {\n const displayTotal =\n m.id === pullRequestCalloutTypes.STUCK\n ? sum(\n calloutTotals\n ?.filter((t: ResponseTotalInterface) =>\n PullRequestStalledOptions.map(option => option.id).includes(\n t.callout as string\n )\n )\n ?.map((t: ResponseTotalInterface) => t.total)\n ) || 0\n : calloutTotals?.find(\n (t: ResponseTotalInterface) => t.callout === m.id\n )?.total || 0;\n return {\n id: m.id,\n isDisabled: areFiltersDisabled,\n isSelected: callouts.includes(m.id),\n name: (\n \n )\n };\n });\n\n // fixing ts error with this:\n // https://github.com/facebook/react/issues/19240#issuecomment-652945246\n const debouncedToggle = useMemo(\n () =>\n debounce(updatedTypes => {\n updateUrlParams({\n [urlParamKeys.CALLOUTS]: updatedTypes\n });\n setAreFiltersDisabled(false);\n }, 500),\n [updateUrlParams]\n );\n\n function onToggleType(\n updated: Array,\n retainedCallouts: Array\n ) {\n const updatedTypes = updated\n .filter((u: UiFilterSelectionStatusInterface) => u.isSelected)\n .map((s: UiFilterSelectionStatusInterface) => s.id as string);\n\n setAreFiltersDisabled(true);\n debouncedToggle(union(updatedTypes, retainedCallouts));\n\n trackEvent({\n label: \"ui-filter-pull-request-callouts-change\",\n value: `changed pull request callouts to ${(isEmpty(updatedTypes)\n ? Object.values(pullRequestCalloutTypes).filter(\n t => !t.startsWith(\"STALLED\")\n )\n : updatedTypes\n ).join(\",\")}`\n });\n }\n\n return (\n
    \n onToggleType(updated, sprintCallouts)}\n testId=\"pull-request-callouts\"\n />\n
    \n );\n};\n\nexport default PullRequestCalloutsFilter;\n","import React, { useMemo, useState } from \"react\";\nimport { debounce, isEmpty } from \"lodash\";\n\n// components\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport EpicFilterCheckboxList from \"../EpicFilterCheckboxList/EpicFilterCheckboxList\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\n\n// constants\nimport { urlParamKeys } from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport {\n EpicDetailsInterface,\n GroupsListInterface,\n ResponseTotalInterface\n} from \"../../interfaces/work-items\";\nimport { UiFilterSelectionStatusInterface } from \"../../interfaces/ui-filter\";\nimport {\n UrlParamsInterface,\n UrlParamsHookReturnInterface\n} from \"../../interfaces/url-params\";\n\n// typescript props\ntype Props = {\n className?: string;\n isFetching: boolean;\n isSuccess: boolean;\n repositories: UrlParamsInterface[\"repositories\"];\n testId?: string;\n updateUrlParams: UrlParamsHookReturnInterface[\"updateUrlParams\"];\n workItemsData?: EpicDetailsInterface | GroupsListInterface;\n};\n\nconst RepositoryFilter = ({\n className,\n isFetching,\n isSuccess,\n testId = \"testId\",\n repositories,\n updateUrlParams,\n workItemsData\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-projects-selector`;\n const { trackEvent } = useTracking();\n const [areFiltersDisabled, setAreFiltersDisabled] = useState(false);\n const repositoryTotals = workItemsData?.repositoryTotals;\n const repositoriesList =\n repositoryTotals?.map(\n (t: ResponseTotalInterface) => t.repository as string\n ) || [];\n\n const optionsList = repositoriesList.map(r => {\n return {\n id: r,\n isDisabled: areFiltersDisabled,\n isSelected: repositories?.includes(r),\n name: (\n \n {r} (\n {repositoryTotals?.find(\n (t: ResponseTotalInterface) => t.repository === r\n )?.total || 0}\n )\n \n )\n };\n });\n\n // fixing ts error with this:\n // https://github.com/facebook/react/issues/19240#issuecomment-652945246\n const debouncedToggle = useMemo(\n () =>\n debounce(updatedRepositories => {\n updateUrlParams({\n [urlParamKeys.REPOSITORIES]: updatedRepositories\n });\n setAreFiltersDisabled(false);\n }, 500),\n [updateUrlParams]\n );\n\n function onToggleRepositories({\n allRepositories,\n updated\n }: {\n allRepositories: Array;\n updated: Array;\n }) {\n const updatedRepositories = updated\n .filter((u: UiFilterSelectionStatusInterface) => u.isSelected)\n .map(r => r.id);\n setAreFiltersDisabled(true);\n trackEvent({\n label: \"ui-filter-repositories-change\",\n value: `changed repositories to ${(isEmpty(updatedRepositories)\n ? allRepositories\n : allRepositories.filter(r => updatedRepositories?.includes(r))\n ).join(\",\")}`\n });\n debouncedToggle(updatedRepositories);\n }\n\n return (\n
    \n \n Repositories{\" \"}\n \n \n }\n list={optionsList}\n name=\"repositories\"\n onUpdateSelection={updated =>\n onToggleRepositories({\n allRepositories: repositoriesList,\n updated\n })\n }\n testId=\"repositories\"\n />\n }\n testId={thisTestId}\n />\n
    \n );\n};\n\nexport default RepositoryFilter;\n","import React, { useMemo, useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, debounce } from \"lodash\";\n\n// actions\n\n// components\nimport EpicFilterCheckboxList from \"../EpicFilterCheckboxList/EpicFilterCheckboxList\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\n\nimport { urlParamKeys, urlParamsValuesLabels } from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { UiFilterSelectionStatusInterface } from \"../../interfaces/ui-filter\";\nimport { workMetadataStatusTypes } from \"../../constants/constants\";\nimport {\n EpicDetailsInterface,\n GroupsListInterface,\n ResponseTotalInterface\n} from \"../../interfaces/work-items\";\nimport {\n UrlParamsHookReturnInterface,\n UrlParamsInterface\n} from \"../../interfaces/url-params\";\n\n// styled components\nconst Option = styled.span`\n align-items: center;\n display: flex;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n status: UrlParamsInterface[\"status\"];\n testId?: string;\n updateUrlParams: UrlParamsHookReturnInterface[\"updateUrlParams\"];\n workItemsData?: EpicDetailsInterface | GroupsListInterface;\n};\n\nconst StatusFilter = ({\n className,\n status,\n testId = \"testId\",\n updateUrlParams,\n workItemsData\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-types-of-work-filter`;\n const { trackEvent } = useTracking();\n const [areFiltersDisabled, setAreFiltersDisabled] = useState(false);\n const statusTotals = workItemsData?.statusTotals;\n\n const optionsList = ([\n {\n helpTextKey: \"open\",\n id: workMetadataStatusTypes.OPEN\n },\n {\n helpTextKey: \"in-progress\",\n id: workMetadataStatusTypes.IN_PROGRESS\n },\n {\n helpTextKey: \"done\",\n id: workMetadataStatusTypes.DONE\n }\n ] as Array<{\n id: string;\n helpTextKey: \"open\" | \"in-progress\" | \"done\";\n }>).map(m => {\n return {\n id: m.id,\n isDisabled: areFiltersDisabled,\n isSelected: status.includes(m.id),\n name: (\n \n )\n };\n });\n\n // fixing ts error with this:\n // https://github.com/facebook/react/issues/19240#issuecomment-652945246\n const debouncedToggle = useMemo(\n () =>\n debounce(updatedStatus => {\n updateUrlParams({\n [urlParamKeys.STATUS]: updatedStatus\n });\n setAreFiltersDisabled(false);\n }, 500),\n [updateUrlParams]\n );\n\n function onToggleStatus(updated: Array) {\n const updatedStatus = updated\n .filter((u: UiFilterSelectionStatusInterface) => u.isSelected)\n .map((s: UiFilterSelectionStatusInterface) => s.id);\n\n setAreFiltersDisabled(true);\n debouncedToggle(updatedStatus);\n trackEvent({\n label: \"ui-filter-status-change\",\n value: `changed status to ${(isEmpty(updatedStatus)\n ? optionsList.map(o => o.id)\n : updatedStatus\n ).join(\",\")}`\n });\n }\n\n return (\n
    \n \n
    \n );\n};\n\nexport default StatusFilter;\n","import React, { useMemo, useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, debounce } from \"lodash\";\n\n// components\nimport EpicFilterCheckboxList from \"../EpicFilterCheckboxList/EpicFilterCheckboxList\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\n\nimport { urlParamKeys, urlParamsValuesLabels } from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { UiFilterSelectionStatusInterface } from \"../../interfaces/ui-filter\";\nimport { sprintMetadataWorkTypes } from \"../../constants/constants\";\nimport {\n EpicDetailsInterface,\n GroupsListInterface,\n ResponseTotalInterface\n} from \"../../interfaces/work-items\";\nimport {\n UrlParamsHookReturnInterface,\n UrlParamsInterface\n} from \"../../interfaces/url-params\";\n\n// styled components\nconst Option = styled.span`\n align-items: center;\n display: flex;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n typesOfWork: UrlParamsInterface[\"typesOfWork\"];\n updateUrlParams: UrlParamsHookReturnInterface[\"updateUrlParams\"];\n workItemsData?: EpicDetailsInterface | GroupsListInterface;\n};\n\nconst TypesOfWorkFilter = ({\n className,\n testId = \"testId\",\n typesOfWork,\n updateUrlParams,\n workItemsData\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-types-of-work-filter`;\n const { trackEvent } = useTracking();\n const [areFiltersDisabled, setAreFiltersDisabled] = useState(false);\n const typesOfWorkTotals = workItemsData?.typesOfWorkTotals;\n const enabledTypeOfWorkIds = typesOfWorkTotals?.map(t => t.typeOfWork);\n\n const optionsList = ([\n {\n helpTextKey: \"sprint-work\",\n id: sprintMetadataWorkTypes.SPRINT_WORK\n },\n {\n helpTextKey: \"prs-not-in-sprint\",\n id: sprintMetadataWorkTypes.PULL_REQUESTS_NOT_IN_SPRINT\n },\n {\n helpTextKey: \"removed-from-sprint\",\n id: sprintMetadataWorkTypes.REMOVED_FROM_SPRINT\n },\n {\n helpTextKey: \"completed-outside-sprint\",\n id: sprintMetadataWorkTypes.COMPLETED_OUTSIDE_SPRINT\n },\n {\n helpTextKey: \"other-activities\",\n id: sprintMetadataWorkTypes.NOT_ATTACHED_TO_SPRINT\n }\n ] as Array<{\n helpTextKey:\n | \"sprint-work\"\n | \"prs-not-in-sprint\"\n | \"other-activities\"\n | \"removed-from-sprint\"\n | \"completed-outside-sprint\";\n id: string;\n }>)\n .filter(({ id }) => enabledTypeOfWorkIds?.includes(id))\n .map(m => {\n return {\n id: m.id,\n isDisabled: areFiltersDisabled,\n isSelected: typesOfWork.includes(m.id),\n name: (\n \n )\n };\n });\n\n // fixing ts error with this:\n // https://github.com/facebook/react/issues/19240#issuecomment-652945246\n const debouncedToggle = useMemo(\n () =>\n debounce(updatedTypes => {\n updateUrlParams({\n [urlParamKeys.SPRINT_WORK_TYPES]: updatedTypes\n });\n setAreFiltersDisabled(false);\n }, 500),\n [updateUrlParams]\n );\n\n function onToggleType(updated: Array) {\n const updatedTypes = updated\n .filter((u: UiFilterSelectionStatusInterface) => u.isSelected)\n .map((s: UiFilterSelectionStatusInterface) => s.id);\n\n setAreFiltersDisabled(true);\n debouncedToggle(updatedTypes);\n trackEvent({\n label: \"ui-filter-types-of-work-change\",\n value: `changed types of work to ${(isEmpty(updatedTypes)\n ? Object.values(sprintMetadataWorkTypes)\n : updatedTypes\n ).join(\",\")}`\n });\n }\n\n return (\n
    \n \n
    \n );\n};\n\nexport default TypesOfWorkFilter;\n","import React, { useMemo, useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, debounce, union, isNil } from \"lodash\";\n\n// actions\n\n// components\nimport EpicFilterCheckboxList from \"../EpicFilterCheckboxList/EpicFilterCheckboxList\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\n\n// constants\nimport {\n urlParamKeys,\n pullRequestCalloutTypes,\n workItemCalloutTypes,\n urlParamsValuesLabels\n} from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { UiFilterSelectionStatusInterface } from \"../../interfaces/ui-filter\";\nimport {\n EpicDetailsInterface,\n GroupsListInterface,\n ResponseTotalInterface\n} from \"../../interfaces/work-items\";\nimport {\n UrlParamsHookReturnInterface,\n UrlParamsInterface\n} from \"../../interfaces/url-params\";\n\n// styled components\nconst Option = styled.span`\n align-items: center;\n display: flex;\n`;\n\n// typescript props\ntype Props = {\n callouts: UrlParamsInterface[\"callouts\"];\n className?: string;\n isSprintMode: boolean;\n testId?: string;\n updateUrlParams: UrlParamsHookReturnInterface[\"updateUrlParams\"];\n workItemsData?: EpicDetailsInterface | GroupsListInterface;\n};\n\nconst WorkItemCalloutsFilter = ({\n callouts,\n className,\n isSprintMode,\n testId = \"testId\",\n updateUrlParams,\n workItemsData\n}: Props): React.ReactElement | null => {\n const thisTestId = `${testId}-sprint-callouts-filter`;\n const { trackEvent } = useTracking();\n const [areFiltersDisabled, setAreFiltersDisabled] = useState(false);\n const calloutTotals = workItemsData?.calloutTotals;\n const pullRequestCallouts = callouts.filter((c: string) =>\n Object.values(pullRequestCalloutTypes).includes(c)\n );\n const enabledCalloutIds = calloutTotals?.map(c => c.callout);\n const optionsList = ([\n {\n helpTextKey: \"sprint-callout-added-mid-sprint\",\n id: workItemCalloutTypes.ADDED_MID_SPRINT,\n isVisible: isSprintMode\n },\n {\n helpTextKey: \"sprint-callout-open-multiple-sprints\",\n id: workItemCalloutTypes.OPEN_MULTIPLE_SPRINTS,\n isVisible: isSprintMode\n },\n {\n helpTextKey: \"work-items-callout-null-story-points\",\n id: workItemCalloutTypes.NULL_STORY_POINTS,\n isVisible: !isNil(\n calloutTotals?.find(\n (t: ResponseTotalInterface) =>\n t.callout === workItemCalloutTypes.NULL_STORY_POINTS\n )?.total\n )\n }\n ] as Array<{\n name: string;\n helpTextKey:\n | \"sprint-callout-added-mid-sprint\"\n | \"sprint-callout-open-multiple-sprints\"\n | \"work-items-callout-null-story-points\";\n id: string;\n isVisible: boolean;\n }>)\n .filter(m => m.isVisible && enabledCalloutIds?.includes(m.id))\n .map(m => {\n return {\n id: m.id,\n isDisabled: areFiltersDisabled,\n isSelected: callouts.includes(m.id),\n name: (\n \n )\n };\n });\n\n // fixing ts error with this:\n // https://github.com/facebook/react/issues/19240#issuecomment-652945246\n const debouncedToggle = useMemo(\n () =>\n debounce(updatedTypes => {\n updateUrlParams({\n [urlParamKeys.CALLOUTS]: updatedTypes\n });\n setAreFiltersDisabled(false);\n }, 500),\n [updateUrlParams]\n );\n\n function onToggleType(\n updated: Array,\n retainedCallouts: Array\n ) {\n const updatedTypes = updated\n .filter((u: UiFilterSelectionStatusInterface) => u.isSelected)\n .map((s: UiFilterSelectionStatusInterface) => s.id as string);\n\n setAreFiltersDisabled(true);\n debouncedToggle(union(updatedTypes, retainedCallouts));\n\n trackEvent({\n label: \"ui-filter-work-item-callouts-change\",\n value: `changed work item callouts to ${(isEmpty(updatedTypes)\n ? Object.values(workItemCalloutTypes)\n : updatedTypes\n ).join(\",\")}`\n });\n }\n\n return optionsList.length ? (\n
    \n \n onToggleType(updated, pullRequestCallouts)\n }\n testId=\"work-item-callouts\"\n />\n
    \n ) : null;\n};\n\nexport default WorkItemCalloutsFilter;\n","import React, { useMemo, useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, debounce } from \"lodash\";\n\n// components\nimport EpicFilterCheckboxList from \"../EpicFilterCheckboxList/EpicFilterCheckboxList\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport WorkMetadataIcon from \"../WorkMetadataIcon/WorkMetadataIcon\";\n\n// constants\nimport {\n urlParamKeys,\n urlParamsValuesLabels,\n workMetadataActivityTypes\n} from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { UiFilterSelectionStatusInterface } from \"../../interfaces/ui-filter\";\nimport {\n EpicDetailsInterface,\n GroupsListInterface,\n ResponseTotalInterface\n} from \"../../interfaces/work-items\";\nimport {\n UrlParamsInterface,\n UrlParamsHookReturnInterface\n} from \"../../interfaces/url-params\";\n\n// styled components\nconst WorkTypeIcon = styled(WorkMetadataIcon)`\n margin-right: 0.5rem;\n`;\nconst Option = styled.span`\n align-items: center;\n display: flex;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n updateUrlParams: UrlParamsHookReturnInterface[\"updateUrlParams\"];\n workItemTypes: UrlParamsInterface[\"workItemTypes\"];\n workItemsData?: EpicDetailsInterface | GroupsListInterface;\n};\n\nconst WorkItemTypeFilter = ({\n className,\n testId = \"testId\",\n updateUrlParams,\n workItemTypes,\n workItemsData\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-work-item-type-filter`;\n const { trackEvent } = useTracking();\n const [areFiltersDisabled, setAreFiltersDisabled] = useState(false);\n const workItemTypeTotals = workItemsData?.workItemTypeTotals;\n\n const shouldDisplayWorkItemType = (workItemType: string) =>\n workItemTypeTotals?.find(\n (t: ResponseTotalInterface) => t.workItem === workItemType\n );\n\n const optionsList = ([\n {\n helpTextKey: \"issue\",\n id: workMetadataActivityTypes.ISSUE\n },\n\n {\n helpTextKey: \"sub-task\",\n id: workMetadataActivityTypes.SUB_TASK\n },\n {\n helpTextKey: \"bug\",\n id: workMetadataActivityTypes.BUG\n },\n {\n helpTextKey: \"pull-request\",\n id: workMetadataActivityTypes.PR\n }\n ] as Array<{\n name: string;\n helpTextKey: \"issue\" | \"sub-task\" | \"bug\" | \"pull-request\";\n id: string;\n }>)\n .filter(m => shouldDisplayWorkItemType(m.id))\n .map(m => {\n return {\n id: m.id,\n isDisabled: areFiltersDisabled,\n isSelected: workItemTypes.includes(m.id),\n name: (\n \n )\n };\n });\n\n // fixing ts error with this:\n // https://github.com/facebook/react/issues/19240#issuecomment-652945246\n const debouncedToggle = useMemo(\n () =>\n debounce(updatedTypes => {\n updateUrlParams({\n [urlParamKeys.WORK_ITEM_TYPES]: updatedTypes\n });\n setAreFiltersDisabled(false);\n }, 500),\n [updateUrlParams]\n );\n\n function onToggleType(updated: Array) {\n const updatedTypes = updated\n .filter((u: UiFilterSelectionStatusInterface) => u.isSelected)\n .map((s: UiFilterSelectionStatusInterface) => s.id);\n\n setAreFiltersDisabled(true);\n debouncedToggle(updatedTypes);\n trackEvent({\n label: \"ui-filter-work-item-type-change\",\n value: `changed work item type to ${(isEmpty(updatedTypes)\n ? Object.values(workMetadataActivityTypes)\n : updatedTypes\n ).join(\",\")}`\n });\n }\n\n return (\n
    \n \n
    \n );\n};\n\nexport default WorkItemTypeFilter;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport CloseButton from \"../CloseButton/CloseButton\";\nimport OtherSprintItemsFilter from \"../OtherSprintItemsFilter/OtherSprintItemsFilter\";\nimport OwnerContributorFilter from \"../OwnerContributorFilter/OwnerContributorFilter\";\nimport ProjectsFilter from \"../ProjectsFilter/ProjectsFilter\";\nimport PullRequestCalloutsFilter from \"../PullRequestCalloutsFilter/PullRequestCalloutsFilter\";\nimport RepositoryFilter from \"../RepositoryFilter/RepositoryFilter\";\nimport StatusFilter from \"../StatusFilter/StatusFilter\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\nimport TypesOfWorkFilter from \"../TypesOfWorkFilter/TypesOfWorkFilter\";\nimport WorkItemCalloutsFilter from \"../WorkItemCalloutsFilter/WorkItemCalloutsFilter\";\nimport WorkItemTypeFilter from \"../WorkItemTypeFilter/WorkItemTypeFilter\";\n\n// constants\nimport { groupByTypes, workDeepDiveSections } from \"../../constants/constants\";\n\n// hooks\nimport { useRouteMatch } from \"react-router-dom\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// utils\nimport { getIsSprintMode } from \"../../utils/sprints\";\nimport { useWorkItemsData } from \"../../hooks/useWorkItemsData\";\n\n// styled components\nconst Container = styled.div`\n background: ${props => props.theme.colors.all.lightJean};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst FilterWrapper = styled.div`\n & + & {\n margin-top: 2rem;\n }\n`;\nconst FilterHeader = styled.header`\n align-items: center;\n background: ${props => props.theme.colors.all.white};\n display: flex;\n justify-content: space-between;\n padding-left: 2rem;\n`;\nconst ContentWrapper = styled.div`\n display: flex;\n flex-flow: column nowrap;\n padding: 2rem;\n`;\nconst Close = styled(CloseButton)`\n font-size: 1.5rem;\n padding: 1.5rem 2rem;\n`;\nconst Title = styled.h4`\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin: 0;\n`;\nconst DoneButton = styled.button`\n align-self: flex-end;\n background: ${props => props.theme.colors.all.auroraTeal};\n border: 0;\n color: ${props => props.theme.colors.all.white};\n margin-top: 3rem;\n padding: 1rem 4rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n onClickClose: () => void;\n testId?: string;\n};\n\nconst EpicFilter = ({\n className,\n onClickClose,\n testId = \"testId\"\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-epic-filter`;\n const { trackEvent } = useTracking();\n const match = useRouteMatch();\n\n const { updateUrlParams, urlParams, workDeepDiveParams } = useUrlParams();\n const { data: workItemsData, isFetching, isSuccess } = useWorkItemsData({\n options: { type: workDeepDiveParams.selectedSection }\n });\n const isSprintMode = getIsSprintMode(urlParams.timerange);\n const isGroupedByUser = urlParams.groupBy === groupByTypes.USER;\n const isPRWorkflowTab =\n workDeepDiveParams.selectedSection === workDeepDiveSections.PR_WORKFLOW;\n\n function onClickCloseButton(\n e: React.MouseEvent\n ) {\n e.persist();\n trackEvent({\n e,\n label: `filter-bar-x-close-button`,\n value: `clicked x close at page ${match.url}`\n });\n onClickClose();\n }\n\n function onClickDoneButton(\n e: React.MouseEvent\n ) {\n e.persist();\n trackEvent({\n e,\n label: `filter-bar-done-button`,\n value: `clicked done at page ${match.url}`\n });\n onClickClose();\n }\n\n return (\n \n \n \n Filters\n \n \n \n {isSprintMode ? (\n \n \n \n ) : null}\n {isSprintMode && !isGroupedByUser && !isPRWorkflowTab ? (\n \n \n \n ) : null}\n \n \n \n {!isPRWorkflowTab ? (\n \n \n \n ) : null}\n \n \n \n {!isPRWorkflowTab ? (\n \n \n \n ) : null}\n \n \n \n \n \n \n \n \n \n \n Done\n \n \n \n \n );\n};\n\nexport default EpicFilter;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Button from \"../Button/Button\";\nimport ContextDrawer from \"../ContextDrawer/ContextDrawer\";\nimport EpicFilter from \"../EpicFilter/EpicFilter\";\nimport Icon from \"../Icon/Icon\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useRouteMatch } from \"react-router-dom\";\n\n// styled components\nconst Sliders = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n margin-right: 1rem;\n`;\nconst Trigger = styled(Button)`\n align-items: center;\n background: ${props => props.theme.colors.all.white};\n display: flex;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n justify-content: center;\n padding: 0.95rem 2rem;\n`;\nconst FilterPanel = styled(EpicFilter)`\n flex: 1;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst EpicFilterDrawerAndTrigger = ({\n className,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-filter-drawer-and-toggle`;\n const { trackEvent } = useTracking();\n const [epicFilterDrawerIsOpen, setEpicFilterDrawerIsOpen] = useState(false);\n const match = useRouteMatch();\n\n function onClickTrigger(e: React.MouseEvent) {\n e.persist();\n trackEvent({\n e,\n label: `filter-bar-trigger`,\n value: `clicked open at page ${match.url}`\n });\n setEpicFilterDrawerIsOpen(true);\n }\n\n function onCloseDrawer(e: React.MouseEvent) {\n e.persist();\n trackEvent({\n e,\n label: `filter-bar-unfocus`,\n value: `clicked close at page ${match.url}`\n });\n setEpicFilterDrawerIsOpen(false);\n }\n\n return (\n
    \n \n \n Filters\n \n \n setEpicFilterDrawerIsOpen(false)}\n testId={thisTestId}\n />\n \n
    \n );\n};\n\nexport default EpicFilterDrawerAndTrigger;\n","import React, { useMemo } from \"react\";\nimport { compact, isArray, omit, pick, reject } from \"lodash\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Icon from \"../Icon/Icon\";\n\n// hooks\nimport { useWorkItemsData } from \"../../hooks/useWorkItemsData\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { UrlParamsInterface } from \"../../interfaces/url-params\";\n\n// utils\nimport { hexToRgb } from \"../../utils/color\";\n\n// constants\nimport {\n ownerContributorAlternativeLabels,\n workDeepDiveSections,\n urlGlobalParams,\n urlParamsValuesLabels,\n workItemsUrlParamKeys\n} from \"../../constants/constants\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { getUrlParamsDefaultValues } from \"../../utils/url-params\";\nconst filterPillsParams = [\n workItemsUrlParamKeys.SHOW_RELATED,\n workItemsUrlParamKeys.SPRINT_WORK_TYPES,\n workItemsUrlParamKeys.USERS,\n workItemsUrlParamKeys.SPRINT_WORK_OTHER,\n workItemsUrlParamKeys.OWNER_CONTRIBUTOR,\n workItemsUrlParamKeys.CALLOUTS,\n workItemsUrlParamKeys.WORK_ITEM_TYPES,\n workItemsUrlParamKeys.STATUS,\n workItemsUrlParamKeys.PROJECT_IDS,\n workItemsUrlParamKeys.REPOSITORIES\n];\n\n// styled components\nconst Pill = styled.button`\n align-items: center;\n background: ${props => {\n return hexToRgb({ hex: props.theme.colors.all.white, opacity: 0.5 });\n }};\n border-radius: 5rem;\n border: 0;\n display: flex;\n font-size: 1.1rem;\n line-height: 1.4rem;\n padding: 0.5rem 0.8rem;\n`;\nconst X = styled(Icon)`\n align-items: center;\n color: ${props => props.theme.colors.all.wolverine};\n display: flex;\n margin-left: 0.8rem;\n`;\nconst ClearFilters = styled.button`\n background: 0;\n border: 0;\n font-size: 1.1rem;\n margin: 0;\n padding-bottom: 0.2rem;\n`;\n\nconst FilterPills = () => {\n const thisTestId = \"filter-pills\";\n const { trackEvent } = useTracking();\n const { updateUrlParams, urlParams, workDeepDiveParams } = useUrlParams();\n const { data } = useWorkItemsData({\n options: { type: workDeepDiveParams.selectedSection }\n });\n const enabledDataIds = [\n ...(data?.calloutTotals.map(t => t.callout) || []),\n ...(data?.typesOfWorkTotals.map(t => t.typeOfWork) || [])\n ];\n\n // pick the filter pill params off the url params, then make an entries array\n // of it. foreach through the entries, expanding any array values so that\n // each value of the array gets its own tuple with the key.\n const flattenedParamValues: Array> = useMemo(() => {\n const result: Array> = [];\n Object.entries(pick(urlParams, filterPillsParams)).forEach(entry => {\n const [key, paramValue] = entry as Array<\n string | boolean | Array\n >;\n if (isArray(paramValue)) {\n paramValue.map((v: string) => result.push([key as string, v]));\n } else {\n result.push([key as string, paramValue]);\n }\n });\n return result;\n }, [urlParams]);\n\n function getDisplayValue(\n key: keyof UrlParamsInterface,\n paramValue: string | boolean\n ) {\n if (key === workItemsUrlParamKeys.PROJECT_IDS) {\n const project = data?.projects.find(p => p.projectId === paramValue);\n return !!project ? project.projectName : paramValue;\n }\n if (\n key === workItemsUrlParamKeys.OWNER_CONTRIBUTOR &&\n workDeepDiveParams.selectedSection === workDeepDiveSections.PR_WORKFLOW\n ) {\n return ownerContributorAlternativeLabels[paramValue as string];\n }\n return (\n urlParamsValuesLabels[key] ||\n urlParamsValuesLabels[paramValue as string] ||\n paramValue\n );\n }\n\n function onClickPill({\n e,\n key,\n value\n }: {\n e: React.MouseEvent;\n key: keyof UrlParamsInterface;\n value: string | boolean;\n }) {\n const currentValue = urlParams[key];\n updateUrlParams({\n [key]: isArray(currentValue)\n ? reject(currentValue, c => c === value)\n : null\n });\n trackEvent({\n e,\n label: \"filter-pills\",\n value: `clicked to remove ${value} filter value`\n });\n }\n\n function onClickClearFilters(\n e: React.MouseEvent\n ) {\n updateUrlParams(\n omit(\n getUrlParamsDefaultValues({ timerange: urlParams.timerange }),\n urlGlobalParams\n ),\n urlGlobalParams\n );\n trackEvent({\n e,\n label: \"filter-pills-clear-filters\",\n value: `clicked`\n });\n }\n\n const displayPills = compact(\n flattenedParamValues.map(entry => {\n const [key, paramValue] = entry as Array<\n keyof UrlParamsInterface | string | boolean\n >;\n if (\n !paramValue ||\n (key === workItemsUrlParamKeys.PROJECT_IDS && !data) ||\n ((key === workItemsUrlParamKeys.CALLOUTS ||\n key === workItemsUrlParamKeys.SPRINT_WORK_TYPES) &&\n !enabledDataIds.includes(paramValue as string))\n ) {\n return null;\n }\n const pillId = `filter-pills-${key}-${paramValue}`;\n return (\n \n onClickPill({\n e,\n key: key as keyof UrlParamsInterface,\n value: paramValue\n })\n }\n data-heap-redact-text={\n key === workItemsUrlParamKeys.PROJECT_IDS ? \"true\" : null\n }\n >\n {getDisplayValue(\n key as keyof UrlParamsInterface,\n paramValue as string | boolean\n )}\n \n \n );\n })\n );\n\n const clearFilters = !!displayPills.length ? (\n onClickClearFilters(e)}\n data-testid=\"filter-pills-clear-filters\"\n key=\"filter-pills-clear-filters\"\n >\n Clear filters\n \n ) : null;\n\n return <>{[...displayPills, clearFilters]};\n};\n\nexport default FilterPills;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// styled components\nconst Container = styled.div`\n padding: 0 ${props => props.theme.grid.gridOffset};\n`;\n\n// typescript props\ntype Props = {\n children: React.ReactNode;\n className?: string;\n testId?: string;\n};\n\nconst UiCenteringWrapper = ({\n children,\n className,\n testId = \"testId\"\n}: Props) => {\n return (\n \n {children}\n \n );\n};\n\nexport default UiCenteringWrapper;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { capitalize, startCase } from \"lodash\";\n\n// components\nimport ContentWithIcon from \"../ContentWithIcon/ContentWithIcon\";\nimport EpicDetails from \"../EpicDetails/EpicDetails\";\nimport EpicFilterDrawerAndTrigger from \"../EpicFilterDrawerAndTrigger/EpicFilterDrawerAndTrigger\";\nimport FilterPills from \"../FilterPills/FilterPills\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport UiCenteringWrapper from \"../UiCenteringWrapper/UiCenteringWrapper\";\n\n// constants\nimport { groupByTypes, workDeepDiveSections } from \"../../constants/constants\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// styled components\nconst BreadcrumbLink = styled(RouteLink)`\n align-self: center;\n color: ${props => props.theme.colors.all.wolverine};\n\n &,\n &:visited {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n }\n`;\nconst Breadcrumb = styled(ContentWithIcon)`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.medium};\n margin-right: 3rem;\n`;\nconst Content = styled.div`\n margin-top: 2rem;\n background: ${props => props.theme.colors.all.lightJean};\n`;\nconst Header = styled.header`\n align-items: flex-end;\n display: flex;\n flex-flow: row wrap;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.medium};\n margin-bottom: 1rem;\n\n & > div,\n & > a,\n & > button {\n margin-right: 1rem;\n margin-bottom: 1rem;\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst EpicDetailsBaseTemplate = ({ className, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-epic-details-base-template`;\n const { getWorkDeepDivePath, urlParams } = useUrlParams();\n const groupBy = urlParams.groupBy;\n const epicsListPath = getWorkDeepDivePath({\n persistQuerystring: true,\n querystringParams: { groupDetails: null },\n selectedSection: workDeepDiveSections.PROJECT_WORK\n });\n\n const breadcrumbString = startCase(\n capitalize(\n `${groupBy === groupByTypes.USER ? \"PEOPLE\" : groupBy.concat(\"s\")}`\n )\n );\n return (\n
    \n \n \n
    \n \n \n \n \n \n
    {\" \"}\n
    \n \n
    \n
    \n );\n};\n\nexport default EpicDetailsBaseTemplate;\n","import React, { ReactElement } from \"react\";\n\n// components\nimport { Redirect } from \"react-router-dom\";\nimport EpicDetailsBaseTemplate from \"../EpicDetailsBaseTemplate/EpicDetailsBaseTemplate\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst EpicDetailsPage = ({\n className,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-epic-details-page`;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n\n return flags?.[\"work-deep-dive\"] ? (\n
    \n \n
    \n ) : (\n \n );\n};\n\nexport default EpicDetailsPage;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// styled components\nconst Container = styled.small`\n color: ${props => props.theme.colors.all.storm};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n content?: React.ReactNode;\n testId?: string;\n};\n\nconst DataDisclaimer = ({\n className,\n content,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-data-disclaimer`;\n return (\n \n {content || \"Uplevel data is refreshed daily.\"}\n \n );\n};\n\nexport default DataDisclaimer;\n","import React from \"react\";\n\n// typescript props\ntype Props = {\n className?: string;\n content: React.ReactNode;\n header?: React.ReactNode;\n testId?: string;\n};\n\nconst PopupContent = ({\n className,\n content,\n header,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-popup-content`;\n return (\n
    \n {!!header ?
    {header}
    : null}\n {content}\n
    \n );\n};\n\nexport default PopupContent;\n","import React from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport CloseButton from \"../CloseButton/CloseButton\";\nimport PopupContent from \"../PopupContent/PopupContent\";\n\n// styled components\nconst Container = styled(PopupContent)`\n background: ${props => props.theme.colors.all.white};\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n overflow-wrap: anywhere;\n word-wrap: anywhere;\n`;\nconst HeaderWrapper = styled.div<{ hasHeaderContent: boolean }>`\n align-items: center;\n display: flex;\n padding: 0.8rem 1.5rem;\n\n ${props => {\n if (props.hasHeaderContent) {\n return css`\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n justify-content: space-between;\n `;\n } else {\n return css`\n justify-content: flex-end;\n `;\n }\n }};\n`;\nconst ContentWrapper = styled.div`\n padding: 0.8rem 1.5rem;\n`;\nconst Close = styled(CloseButton)`\n font-size: inherit;\n margin-left: 1em;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n content: React.ReactNode;\n context?: \"click\" | \"hover\";\n header?: React.ReactNode;\n onCancelPopup?: (e: React.MouseEvent) => void;\n testId?: string;\n};\n\nconst InfoPopupContent = ({\n className,\n content,\n context = \"hover\",\n header,\n onCancelPopup = () => null,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-info-popup-content`;\n const hasHeaderContent = !!header;\n const hasCloseButton = context === \"click\" && !!onCancelPopup;\n const headerContent =\n hasHeaderContent || hasCloseButton ? (\n \n {header}\n {hasCloseButton ? (\n \n ) : null}\n \n ) : null;\n\n return (\n {content}}\n header={headerContent}\n testId={thisTestId}\n />\n );\n};\n\nexport default InfoPopupContent;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport OverlayTrigger from \"react-bootstrap/OverlayTrigger\";\n\n// hooks\nimport { PopupPlacements } from \"../../interfaces/controls\";\n\n// styled components\nconst Button = styled.button`\n background: 0;\n border: none;\n margin: 0;\n padding: 0;\n line-height: 1em;\n`;\n// this is mostly unnecessary but OverlayTrigger wants an element that can\n// accept refs\nconst OverlayWrapper = styled.div`\n display: block;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n overlayContent: React.ReactNode;\n overlayPlacement?: PopupPlacements;\n onToggleShow: (nextShow: boolean) => void;\n show: boolean;\n testId?: string;\n triggerAction?:\n | \"hover\"\n | \"click\"\n | \"focus\"\n | Array<\"hover\" | \"click\" | \"focus\">;\n triggerContent: React.ReactNode;\n};\n\nconst TriggeredOverlay = ({\n className,\n overlayContent,\n overlayPlacement = \"bottom\",\n show,\n onToggleShow,\n triggerAction = [\"hover\", \"focus\"],\n triggerContent,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-triggered-overlay`;\n return (\n {overlayContent}}\n onToggle={onToggleShow}\n rootClose={true}\n rootCloseEvent=\"mousedown\"\n show={show}\n >\n \n \n );\n};\n\nexport default TriggeredOverlay;\n","import React, { useState } from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { PopupPlacements } from \"../../interfaces/controls\";\n\n// components\nimport Icon from \"../Icon/Icon\";\nimport InfoPopupContent from \"../InfoPopupContent/InfoPopupContent\";\nimport TriggeredOverlay from \"../TriggeredOverlay/TriggeredOverlay\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { isUndefined } from \"lodash\";\n\n// styled components\nconst TriggerIcon = styled(Icon)<{ icon: string }>`\n color: ${props =>\n props.icon === \"info\"\n ? props.theme.colors.all.storm\n : props.theme.colors.all.wolverine};\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n }\n font-size: 1.2rem;\n`;\nconst PopupContent = styled(InfoPopupContent)<{\n popupPlacement: PopupPlacements;\n}>`\n max-width: 35rem;\n\n ${props => {\n switch (props.popupPlacement) {\n case \"top\":\n return css`\n margin-bottom: 1rem;\n `;\n case \"bottom\":\n return css`\n margin-top: 1rem;\n `;\n case \"left\":\n return css`\n margin-right: 1rem;\n `;\n\n default:\n return css`\n margin-left: 1rem;\n `;\n }\n }}\n`;\n\n// typescript props\ntype Actions = \"hover\" | \"click\";\ntype Icons = \"book\" | \"info\" | \"question-circle\";\ntype Props = {\n action?: Actions;\n className?: string;\n content: React.ReactNode;\n header?: React.ReactNode;\n icon?: Icons;\n name: string;\n popupPlacement?: PopupPlacements;\n testId?: string;\n};\n\nconst InfoPopup = ({\n action = \"hover\",\n className,\n content,\n header,\n icon,\n name,\n popupPlacement = \"right\",\n testId = \"testId\"\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-info-popup`;\n const [showPopup, setShowPopup] = useState(false);\n\n const { trackEvent } = useTracking();\n const isHoverAction = action === \"hover\";\n\n function onCancelPopup(e: React.MouseEvent) {\n setShowPopup(false);\n trackEvent({\n e,\n label: `${name}-info-popup`,\n value: \"canceled via close button\"\n });\n }\n\n function onTogglePopup(nextShow: boolean) {\n setShowPopup(nextShow);\n\n trackEvent({\n label: `${name}-info-popup`,\n value: nextShow ? \"shown\" : \"hidden\"\n });\n }\n\n return (\n \n }\n overlayPlacement={popupPlacement}\n show={showPopup}\n testId={thisTestId}\n triggerAction={isHoverAction ? [\"hover\", \"focus\"] : action}\n triggerContent={\n \n }\n />\n );\n};\n\nexport default InfoPopup;\n","import { isNil, isUndefined } from \"lodash\";\nimport React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport HtmlText from \"../HtmlText/HtmlText\";\nimport Icon from \"../Icon/Icon\";\nimport InfoPopup from \"../InfoPopup/InfoPopup\";\n\n// styled components\nconst PopupContent = styled.div`\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n`;\nconst PopupHeader = styled.h4`\n font-family: ${props => props.theme.fonts.header.name}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n margin: 0;\n`;\nconst LinkIcon = styled(Icon)`\n color: inherit;\n margin-right: 0.5rem;\n`;\nconst LearnLink = styled.a`\n align-items: center;\n display: flex;\n && {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n text-decoration: none;\n\n & ${LinkIcon} {\n color: inherit;\n }\n }\n`;\n\n// typescript props\ntype Actions = \"hover\" | \"click\";\ntype Props = {\n action?: Actions;\n className?: string;\n content: string;\n header?: React.ReactNode;\n link?: {\n content: React.ReactNode;\n url: string;\n } | null;\n name: string;\n testId?: string;\n};\n\nconst InfoBook = ({\n action = \"click\",\n className,\n content,\n header,\n link,\n name,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-info-book`;\n return (\n {header}\n }\n content={\n \n \n {isNil(link) ? null : (\n \n \n {link.content}\n \n )}\n \n }\n name={name}\n icon=\"book\"\n className={className}\n testId={thisTestId}\n />\n );\n};\n\nexport default InfoBook;\n","import { useEffect, useState, useRef } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {\n Chart,\n TooltipFormatterCallbackFunction,\n TooltipFormatterContextObject\n} from \"highcharts\";\nimport { isNull } from \"lodash\";\n\ninterface Props {\n chart: Chart | null;\n children(formatterContext: TooltipFormatterContextObject): JSX.Element | null;\n}\n\n// fully ganked from here: https://gist.github.com/dankremniov/a9a6b969e63dfc4f0f83e6f82b82eb4f\nconst ChartTooltipWrapper = ({ chart, children }: Props) => {\n const isInit = useRef(false);\n const [context, setContext] = useState(\n null\n );\n\n useEffect(() => {\n if (chart) {\n const formatter: TooltipFormatterCallbackFunction = function() {\n // Ensures that tooltip DOM container is rendered before React portal is created.\n if (!isInit.current) {\n isInit.current = true;\n chart.tooltip.refresh.apply(chart.tooltip, [this.point]);\n chart.tooltip.hide(0);\n }\n\n setContext(this);\n\n return `
    `;\n };\n\n chart.update({\n tooltip: {\n formatter,\n useHTML: true\n }\n });\n }\n }, [chart]);\n\n const node =\n chart &&\n document.getElementById(`highcharts-custom-tooltip-${chart.index}`);\n\n return node && context && !isNull(children)\n ? ReactDOM.createPortal(children(context), node)\n : null;\n};\n\nexport default ChartTooltipWrapper;\n","import React, {\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from \"react\";\nimport styled, {\n createGlobalStyle,\n DefaultTheme\n} from \"styled-components/macro\";\nimport { get, isEmpty } from \"lodash\";\n// highstock gives us the ability to add scrollbars on charts\nimport HighchartsStock from \"highcharts/highstock\";\nimport HighchartsMore from \"highcharts/highcharts-more\";\nimport HighchartsNetworkGraph from \"highcharts/modules/networkgraph\";\nimport HighchartsAccessibility from \"highcharts/modules/accessibility\";\nimport HighchartsHeatmap from \"highcharts/modules/heatmap\";\nimport HighchartsTilemap from \"highcharts/modules/tilemap\";\nimport HighchartsPatternFill from \"highcharts/modules/pattern-fill\";\nimport HighchartsReact from \"highcharts-react-official\";\nimport spinner from \"../../images/spinner.svg\";\n\n// components\nimport ChartTooltipWrapper from \"../ChartTooltipWrapper/ChartTooltipWrapper\";\n\n// config\nimport generateConfig from \"./config\";\n\n// utils\nimport { hexToRgb } from \"../../utils/color\";\n\n// init the module\n[\n HighchartsMore,\n HighchartsNetworkGraph,\n HighchartsHeatmap,\n HighchartsTilemap,\n HighchartsPatternFill,\n HighchartsAccessibility\n].forEach(highchartsModule => {\n highchartsModule(HighchartsStock);\n});\n\nconst GlobalStyle = createGlobalStyle`\n /*\n chart styles -- creating global styles because tooltip will be appended to body,\n outside the confines of the chart container\n */\n .highcharts-tooltip-container {\n position: fixed !important;\n }\n\n .colorKey {\n display: flex;\n align-items: center;\n\n &::before {\n content: \"\";\n display: inline-block;\n height: 2rem;\n margin-right: 1.5rem;\n width: 2rem;\n }\n\n &.colorKeyCircle {\n &::before {\n border-radius: 50%;\n }\n }\n\n &.reviewTimeColor::before {\n background: ${props => props.theme.colors.chart.prCadence.reviewTime};\n }\n &.prsColor::before {\n background: ${props => props.theme.colors.chart.prCadence.prs};\n }\n &.teamMeetingTimeColor::before {\n background: ${props => props.theme.colors.all.storm};\n }\n &.userMeetingTimeColor::before {\n background: ${props => props.theme.colors.all.nightcrawler};\n }\n }\n\n .chart-tooltip {\n background-color: #fff;\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n font-family: ${props =>\n props.theme.fonts.primary.name}, Arial, Helvetica, sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n padding: 1rem;\n position: relative;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n\n & p {\n max-width: 20rem;\n }\n\n & .fixed-width {\n font-family: ${props =>\n props.theme.fonts.primary.name}, Arial, Helvetica, sans-serif;\n }\n\n & .chart-tooltip-header {\n font-family: ${props =>\n props.theme.fonts.primary.name}, Arial, Helvetica, sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n margin-bottom: 1rem;\n }\n\n & .chart-tooltip-subheader {\n font-family: ${props =>\n props.theme.fonts.primary.name}, Arial, Helvetica, sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n }\n\n & .chart-tooltip-footer {\n color: ${props => props.theme.colors.all.auroraTeal};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.extraBold};\n }\n\n & .chart-slackAvatar {\n margin-right: 1.5rem;\n top: 0;\n }\n\n & ul {\n margin-top: 1rem;\n }\n\n & li {\n display: flex;\n }\n\n & dl div {\n align-items: baseline;\n display: flex;\n }\n\n & dt {\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin-right: .5rem;\n }\n\n & .negative::before,\n & .positive::before {\n display: inline-block;\n margin-right: 0.2rem;\n }\n & .positive::before {\n content: \"\\u2191\";\n }\n & .negative::before {\n content: \"\\u2193\";\n }\n\n &.meeting-time-chart-tooltip,\n &.pr-cadence-chart-tooltip {\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n & li {\n display: block;\n\n & + li {\n margin-top: .5rem;\n }\n }\n }\n\n &.people-health-chart-tooltip {\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n font-family: ${props => props.theme.fonts.primary.name};\n }\n\n &.sprint-health-chart-tooltip,\n &.sprint-health-factors-chart-tooltip,\n &.sprint-health-trend-analysis-chart-tooltip {\n background-color: #fff;\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${hexToRgb({\n hex: props.theme.colors.all.wolverine,\n opacity: 0.25\n })}`};\n font-family: ${props =>\n props.theme.fonts.primary.name}, Arial, Helvetica, sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n padding: 1.2rem;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n\n & .chart-tooltip-header {\n display: flex;\n font-weight: inherit;\n flex-flow: column nowrap;\n margin: 0;\n }\n\n & h2, & h3 {\n font-size: inherit;\n margin: 0;\n }\n\n & h3 {\n font-weight: inherit;\n order: 1;\n }\n\n & h2 {\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n order: 2;\n }\n\n & dl {\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.wolverine}`};\n margin-top: .4rem;\n padding-top: .4rem;\n }\n }\n }\n\n .chart-slackAvatar {\n position: relative;\n top: .5rem;\n left: -0.1rem;\n\n & .avatar {\n border-color: ${props => props.theme.colors.border};\n border-radius: 50%;\n border-style: solid;\n border-width: 0.2rem;\n height: inherit;\n width: inherit;\n }\n }\n`;\n\n// styled components\nconst StyledContainer = styled.div`\n /* highcharts classes */\n & .highcharts-loading {\n align-items: center;\n display: flex;\n justify-content: center;\n opacity: 0.6 !important;\n transition: 0.2s all;\n }\n & .highcharts-loading-inner {\n background-image: url(${spinner});\n background-position: 50% 50%;\n background-repeat: no-repeat;\n display: inline-block;\n height: 8rem;\n position: static !important;\n text-indent: -9999rem;\n width: 8rem;\n }\n`;\nconst Tooltip = styled.div`\n background-color: #fff;\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n padding: 1rem;\n`;\n\n// typescript props\ntype ChartConfig = {\n config: Highcharts.Options | Record;\n id: string;\n isFetchingData?: boolean;\n};\n\ntype Props = {\n chart?: ChartConfig;\n className?: string;\n testId?: string;\n tooltipComponent?: ReactElement;\n theme?: DefaultTheme;\n};\n\nconst Chart = ({\n chart = {} as ChartConfig,\n className,\n tooltipComponent,\n testId = \"testId\",\n theme\n}: Props): ReactElement => {\n const chartRef = useRef(null);\n const [highchart, setHighchart] = useState(null);\n const callback = useCallback(chart => {\n setHighchart(chart);\n }, []);\n\n const { config, id, isFetchingData } = chart;\n const finalConfig = useMemo(() => {\n return generateConfig({ config });\n }, [config]);\n\n useEffect(() => {\n const chartInstance = get(chartRef, \"current.chart\");\n if (\n chartInstance &&\n chartInstance.showLoading &&\n chartInstance.hideLoading\n ) {\n if (isFetchingData) {\n chartInstance.showLoading();\n } else {\n chartInstance.hideLoading();\n }\n return () => chartInstance.hideLoading();\n }\n }, [chartRef, isFetchingData]);\n\n useEffect(() => {\n const chartInstance = get(chartRef, \"current.chart\");\n if (chartInstance && !isEmpty(finalConfig)) {\n // this assumes 1 axis per dimension, that will be brittle for more complicated charts\n // axes can be a bare object or an array of objects, which is annoying\n const yAxisConfig = finalConfig.yAxis?.[0] || finalConfig.yAxis;\n const xAxisConfig = finalConfig.xAxis?.[0] || finalConfig.xAxis;\n if (yAxisConfig) {\n chartInstance.yAxis[0].setExtremes(yAxisConfig.min, yAxisConfig.max);\n }\n if (xAxisConfig) {\n chartInstance.xAxis[0].setExtremes(xAxisConfig.min, xAxisConfig.max);\n }\n }\n }, [chartRef, finalConfig]);\n\n return (\n \n \n \n {!!tooltipComponent ? (\n \n {context =>\n !!context?.point?.series ? (\n \n {React.cloneElement(tooltipComponent, {\n context\n })}\n \n ) : null\n }\n \n ) : null}\n \n );\n};\n\nexport default Chart;\n","import { merge } from \"lodash\";\n\nexport default ({ config }) => {\n return merge(\n {},\n {\n credits: {\n enabled: false\n }\n },\n config\n );\n};\n","import React from \"react\";\n\n// components\nimport Time from \"../Time/Time\";\n\n// interfaces\nimport { TimerangeInterface } from \"../../interfaces/date\";\n\n// typescript props\ntype Props = {\n className?: string;\n config?: { format?: TimerangeInterface };\n testId?: string;\n timerange: TimerangeInterface;\n};\n\nconst TimeRange = ({\n className,\n config = {},\n testId = \"testId\",\n timerange\n}: Props) => {\n const thisTestId = `${testId}-time-range`;\n const { start, end } = timerange;\n const { format } = config;\n\n return (\n
    \n \n –\n
    \n );\n};\n\nexport default TimeRange;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// interfaces\nimport TimeRange from \"../TimeRange/TimeRange\";\nimport { OperationalMetricsSparklinePoint } from \"../../interfaces/charts\";\nimport { getIsSprintMode } from \"../../utils/sprints\";\n\n// styled components\nconst Container = styled.div`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst Header = styled.header`\n align-items: baseline;\n display: flex;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst TimerangeDisplayName = styled.span`\n &:not(:empty) {\n margin-right: 1rem;\n }\n`;\nconst ValueContainer = styled.div``;\n\n// typescript props\ntype Props = {\n context?: {\n point: OperationalMetricsSparklinePoint;\n };\n};\n\nconst OperationalMetricsSparklineTooltip = ({\n context\n}: Props): ReactElement | null => {\n if (!context?.point) {\n return null;\n }\n const {\n value,\n unit,\n timerange,\n name\n } = context.point as OperationalMetricsSparklinePoint;\n const thisTestId = `${name}-operational-metrics-sparkline-tooltip`;\n return (\n \n
    \n \n {getIsSprintMode(timerange) ? `${timerange.displayName}` : \"\"}\n \n {!!timerange.start && !!timerange.end ? (\n \n ) : null}\n
    \n \n \n {value}\n {unit === \"PERCENT\" ? \"%\" : \"\"}\n {\" \"}\n — {name}\n \n \n );\n};\n\nexport default OperationalMetricsSparklineTooltip;\n","import {\n capitalize,\n compact,\n isNull,\n isNumber,\n round,\n sample,\n startCase\n} from \"lodash\";\nimport { avatarImages } from \"../constants/widgets\";\n\n// constants\nimport {\n directionalityTypes,\n overviewHealthTypes,\n healthFactorsMetadata,\n Signals\n} from \"../constants/constants\";\n\n// utils\nimport { formatTimestamp } from \"./date\";\nimport { getSprintRangeString } from \"../utils/sprints\";\nimport { hexToRgb } from \"../utils/color\";\nimport { filterTruthyCycleTimeValues, splitCycleTimeHours } from \"./cycle-time\";\n\nexport const getSlackAvatarHtml = ({ slackAvatar, width }) => {\n return `\"\"`;\n};\n\nexport const getMeetingClassificationsTooltipHtml = pointData => {\n const {\n classificationName,\n deltaPercent,\n name,\n slackAvatar,\n value,\n valueHours\n } = pointData;\n\n let indicatorDirection = \"\";\n if (isNumber(deltaPercent) && deltaPercent !== 0) {\n indicatorDirection =\n deltaPercent > 0\n ? directionalityTypes.POSITIVE\n : directionalityTypes.NEGATIVE;\n }\n\n const slackAvatarHtml = getSlackAvatarHtml({\n slackAvatar,\n width: 50\n });\n\n return `
    ${slackAvatarHtml}${name}
    ${classificationName}
    ${valueHours.toFixed(\n 1\n )} ${valueHours === 1 ? \"hr\" : \"hrs\"} | ${value.toFixed(1)}%${\n isNumber(deltaPercent)\n ? ` (${Math.abs(deltaPercent).toFixed(\n 1\n )}%)`\n : \"\"\n }
    `;\n};\n\nexport const getPrCadenceTooltip = pointData => {\n return `
    ${formatTimestamp(\n {\n format: \"M/D\",\n timestamp: pointData[0].x.start\n }\n )}–${formatTimestamp({\n format: \"M/D\",\n timestamp: pointData[0].x.end\n })}
    • Number PRs merged
      ${\n pointData[0].y\n } prs
    • Median review time (hrs)
      ${pointData[1].y.toFixed(\n 1\n )} hrs
    `;\n};\n\nexport const getMeetingTimeTooltip = (pointData, selectedTeamMember) => {\n const isTeamSeriesTooltip = pointData.series.userOptions.id === \"team\";\n const isLineSeriesTooltip = pointData.series.userOptions.type === \"line\";\n\n const colorKeyClassnames = isLineSeriesTooltip\n ? \"userMeetingTimeColor colorKey colorKeyCircle\"\n : \"teamMeetingTimeColor colorKey\";\n return `
    ${formatTimestamp(\n {\n format: \"M/D\",\n timestamp: pointData.category\n }\n )}
    • ${\n isTeamSeriesTooltip ? \"Team average\" : selectedTeamMember?.name\n } meeting time per day
      ${pointData.y.toFixed(\n 1\n )} hrs
    `;\n};\n\n// use this only when you're using outside: true since then the tooltip is positioned\n// to the scroll container and not inside the bounds of the chart\nexport const getAdjustedTooltipPosition = ({\n currentPosition,\n windowScroll\n}) => {\n return {\n ...currentPosition,\n y: currentPosition.y - windowScroll\n };\n};\n\nexport const getSprintHealthTooltip = pointData => {\n const seriesName = pointData.series.name;\n\n let overallScore, factorsList;\n if (\n seriesName ===\n healthFactorsMetadata[overviewHealthTypes.AVERAGE_HEALTH].title\n ) {\n overallScore = `Average of Team and Project Health: ${capitalize(\n getSprintRangeString(pointData.averageHealth)\n )}`;\n } else {\n const factorValue =\n seriesName ===\n healthFactorsMetadata[overviewHealthTypes.PEOPLE_HEALTH].title\n ? pointData.peopleHealth\n : pointData.projectHealth;\n\n overallScore = `${seriesName}: ${capitalize(\n getSprintRangeString(factorValue)\n )}`;\n const factorsData =\n seriesName ===\n healthFactorsMetadata[overviewHealthTypes.PEOPLE_HEALTH].title\n ? pointData.peopleHealthFactors\n : pointData.projectHealthFactors;\n factorsList = compact(\n Object.entries(factorsData).map(([k, v]) => {\n return isNull(v)\n ? null\n : `
    ${startCase(capitalize(k))}:
    ${capitalize(\n getSprintRangeString(v)\n )}
    `;\n })\n ).join(\"\");\n }\n\n return `

    ${\n pointData.sprintName\n } ${\n pointData.category\n }

    ${overallScore}

    ${\n factorsList ? `
    ${factorsList}
    ` : \"\"\n }
    `;\n};\n\nexport const getSprintHealthFactorsTooltip = pointData => {\n const seriesName = pointData.series.name;\n const strippedName = /\\(/.test(seriesName)\n ? seriesName.substring(0, seriesName.indexOf(\" (\"))\n : seriesName;\n\n return `
    ${strippedName}
    ${startCase(\n getSprintRangeString(pointData.y).toLowerCase()\n )}
    `;\n};\n\nexport const getPlotBands = (\n healthScoreRanges,\n scoreTypes,\n theme,\n metricType\n) => {\n function getAlwaysOnText(key) {\n return key === \"HIGH\"\n ? \"High
    60+ min avg. overtime\"\n : key === \"ABOVE_NORMAL\"\n ? \"Above Normal
    30-60 min avg. overtime\"\n : \"Sustainable
    Working Hours
    <30 min avg. overtime\";\n }\n\n return Object.entries(healthScoreRanges).map(([key, range]) => {\n return {\n color: hexToRgb({\n hex:\n metricType === \"ALWAYS_ON\"\n ? theme.colors.chart.alwaysOnRiskTrend.marker.fill[key]\n : metricType === \"CONTEXT_SWITCHING\"\n ? theme.colors.relativeHealth[key]\n : theme.colors.signalHealth[key],\n opacity:\n metricType === \"ALWAYS_ON\"\n ? theme.colors.chart.alwaysOnRiskTrend.marker.opacity[key]\n : 0.2\n }),\n label: {\n text:\n metricType === \"ALWAYS_ON\"\n ? getAlwaysOnText(key)\n : startCase(key.toLowerCase()),\n verticalAlign: metricType === \"ALWAYS_ON\" ? \"middle\" : \"bottom\",\n y: metricType === \"ALWAYS_ON\" ? 0 : -5,\n textAlign: \"left\"\n },\n from: range[0],\n to: range[1]\n };\n });\n};\n\nexport const getBandTickPositions = (scoreRanges, metricType) => {\n return [\n metricType === \"ALWAYS_ON\"\n ? 6\n : metricType === \"CONTEXT_SWITCHING\"\n ? 1\n : 101,\n ...Object.entries(scoreRanges).map(([key, range]) => {\n return range[0];\n })\n ].sort((a, b) => a - b);\n};\n\nexport const getPeopleHealthBucketTooltip = (teamMembers, seriesColor) => {\n return `
    \n
    \n
    \n
    \n ${\n (teamMembers[0].selectedMetric === Signals.CONTEXT_SWITCHING &&\n teamMembers[0].selectedSubMetric) ||\n teamMembers[0].selectedMetric === \"OVERALL_TEAM_HEALTH\"\n ? teamMembers[0].selectedSubMetric\n : healthFactorsMetadata[teamMembers[0].selectedMetric][\"title\"]\n }\n
    \n ${teamMembers\n .map(t => {\n const slackAvatarHtml = getSlackAvatarHtml({\n slackAvatar: t.slackAvatar,\n width: 35\n });\n\n const getAlwaysOnDisplay = t => {\n return t.value === 3\n ? \"Above Normal\"\n : t.value === 5\n ? \"High\"\n : \"Normal\";\n };\n const displayValue =\n t.selectedMetric === Signals.ALWAYS_ON ||\n t.selectedSubMetric === \"Always On\"\n ? getAlwaysOnDisplay(t)\n : t.selectedMetric === Signals.CONTEXT_SWITCHING ||\n (t.selectedMetric === \"OVERALL_TEAM_HEALTH\" &&\n t.selectedSubMetric === \"Context Switching\")\n ? t.value < 0.166\n ? \"Less\"\n : t.value > 0.5\n ? \"More\"\n : \"About the Same\"\n : !!t.value\n ? t.selectedMetric === \"OVERALL_TEAM_HEALTH\" &&\n t.selectedSubMetric === \"Chat Interruptions\"\n ? `${capitalize(t.value.toLowerCase())}`\n : `${t.value.toFixed(1)} ${\n t.selectedMetric === \"CHAT_INTERRUPTIONS\" ||\n t.selectedSubMetric === \"Chat Interruptions\"\n ? \"min\"\n : \"hrs\"\n }`\n : \"0.0\";\n\n return `${slackAvatarHtml}${t.name} - ${displayValue}`;\n })\n .join(\"\")}\n
    \n
    `;\n};\n\nexport const getPeopleHealthContextSwitchingTooltip = (\n title,\n itemsToShow,\n seriesColor\n) => {\n return `
    \n
    \n
    ${title}
    ${itemsToShow\n .map(\n item =>\n `${item}`\n )\n .join(\"\")}\n
    \n
    `;\n};\n\nexport const getDeepWorkTooltipDisplay = (\n displayRecords,\n currentAverage,\n rollingAverage = 0\n) => {\n return `
    \n
    \n
    Deep Work
    \n\n ${displayRecords\n .map(user => {\n const slackAvatarHtml = getSlackAvatarHtml({\n slackAvatar: user.slackAvatar,\n width: 35\n });\n return `\n ${slackAvatarHtml}${user.name} - ${user.bucket}`;\n })\n .join(\"\")}\n ${`Current Average Deep Work Time ${currentAverage.toFixed(\n 1\n )} hours/workday`}\n ${\n !!rollingAverage\n ? `Rolling Average Deep Work Time ${rollingAverage.toFixed(\n 1\n )} hours/workday`\n : \"\"\n }\n
    \n
    `;\n};\n\nexport const getOverviewTrendlineYAxisLabelFormatter = (\n measure,\n isFirst,\n isLast,\n isDaysScale,\n value\n) => {\n if (measure === \"cycle-time\") {\n if (!isFirst && !isLast) {\n return \"\";\n }\n const rollup = filterTruthyCycleTimeValues(\n splitCycleTimeHours(value, isDaysScale)\n ).map(t => ({ ...t, value: round(t.value, 1) }));\n return rollup\n .map(t => `${t.value}${t.unit === \"DAYS\" ? \"d\" : \"h\"}`)\n .join(\",\");\n }\n return isFirst || isLast ? value.toString() : \"\";\n};\n","import { compact, isNull, isString, isUndefined } from \"lodash\";\nimport { CycleTimeStageTypes } from \"../interfaces/constants\";\nimport {\n OpMetric,\n OpMetricData,\n OpMetricSprintRecord,\n OpMetricUnit,\n OpMetricValueTypes\n} from \"../interfaces/ops-metrics\";\nimport { CycleTimeInterface } from \"../interfaces/work-items\";\nimport { sanitizeValue } from \"./work-items\";\n\nexport const getCycleTimes = (\n data?: OpMetricData\n): Array => {\n if (!!data) {\n return data.map(sprintRecord => {\n return sprintRecord.data.find(\n dataRecord => dataRecord.name === \"cycleTime\"\n )?.metadata as CycleTimeInterface;\n });\n }\n return [];\n};\n\nexport const getMetric = (\n data: OpMetricSprintRecord,\n metric: OpMetricValueTypes\n): OpMetric | undefined =>\n data.data.find(dataRecord => dataRecord.name === metric);\n\nexport const getMetricValue = (\n data: OpMetricSprintRecord,\n metric: OpMetricValueTypes\n): OpMetric[\"value\"] | undefined =>\n data.data.find(dataRecord => dataRecord.name === metric)?.value;\n\nexport const getMetricMetadata = (\n data: OpMetricSprintRecord,\n metric: OpMetricValueTypes\n): CycleTimeInterface | undefined =>\n data.data.find(dataRecord => dataRecord.name === metric)?.metadata;\n\nexport const getMetricUnit = (\n data: OpMetricSprintRecord,\n metric: OpMetricValueTypes\n): OpMetricUnit | undefined =>\n data.data.find(dataRecord => dataRecord.name === metric)?.unit;\n\nexport const getPercentageDelta = (\n current: number,\n previous: number\n): number | null => {\n if (previous === 0) {\n return null;\n }\n\n return (current - previous) / previous;\n};\n\nexport const getOperationalMetric = (\n metric: OpMetricValueTypes,\n data?: OpMetricSprintRecord\n): OpMetric | null => {\n if (isUndefined(data)) {\n return null;\n }\n const raw = getMetric(data, metric);\n\n return isUndefined(raw) ? null : raw;\n};\n\nexport const getOperationalMetricDelta = (\n current: OpMetric | null,\n previous: OpMetric | null\n): number | null => {\n if (isNull(current) || isNull(previous)) {\n return null;\n }\n const currentValue = current.value as number;\n const unitIsPercent = current.unit === \"PERCENT\";\n const previousValue = previous.value as number;\n\n // doing multiply and rounding here because the math doesn't work out quite\n // right in the UI if you calculate with raw numbers and then multiply/round\n // after the fact for UI display. it's muddying things a bit but trying to err\n // on the side of math being truthful if you're trying to figure it out by\n // looking at UI values.\n return unitIsPercent\n ? getPercentageDelta(\n Math.round(currentValue * 100),\n Math.round(previousValue * 100)\n )\n : currentValue - previousValue;\n};\n\nexport const mapStageData = (\n data: OpMetricData,\n stageKey: keyof CycleTimeStageTypes\n): OpMetricData =>\n data.map(d => ({\n ...d,\n data: compact(\n d.data.map(metric => {\n const stage = (metric.metadata as CycleTimeInterface | undefined)?.[\n stageKey\n ];\n return !!stage\n ? {\n ...metric,\n // reassign the individual stage unit/value into the main cycleTime unit/value\n unit: stage.unit,\n value: stage.value\n }\n : null;\n })\n )\n }));\n\nexport const getMetricBoxUnit = (\n metric: Omit,\n isSprintMode: boolean,\n isActiveSprint: boolean,\n isPrevious: boolean\n): string => {\n switch (metric) {\n case \"releaseCount\":\n return \"Releases\";\n case \"bugAllocation\":\n return \"% Bugs\";\n case \"complexPrs\":\n return \"% High Complexity\";\n // completionRate\n default:\n if (isSprintMode) {\n return isPrevious\n ? \"% Actual Done\"\n : isActiveSprint\n ? \"% Projected Done\"\n : \"% Actual Done\";\n } else {\n return \"Done\";\n }\n }\n};\n\nexport const getMetricBoxDisplayValue = (\n value: string | number | null,\n isPercentage: boolean\n): string | number => {\n const sanitized = sanitizeValue(value);\n // \"N/A\"\n if (isString(sanitized)) {\n return sanitized;\n }\n return Math.round(isPercentage ? sanitized * 100 : sanitized);\n};\n","import { isUndefined, orderBy, startCase } from \"lodash\";\nimport { currentTheme } from \"../../themes/currentTheme\";\n\n// constants\nimport {\n chartToolTipConfig,\n cycleTimeStageLabels,\n cycleTimeStages,\n timerangeTypes\n} from \"../../constants/constants\";\n\n// interfaces\nimport {\n OpMetricData,\n OpMetricSprintRecord,\n OpMetricValueTypes\n} from \"../../interfaces/ops-metrics\";\nimport { PointEventsOptionsObject } from \"highcharts\";\n\n// utils\nimport { getAdjustedTooltipPosition } from \"../../utils/chart\";\nimport { splitCycleTimeHours } from \"../../utils/cycle-time\";\nimport { getColorForDelta } from \"../../utils/color\";\nimport { formatTimestamp } from \"../../utils/date\";\nimport { getMetricUnit, getMetricValue } from \"../../utils/operational-metrics\";\n\ntype Props = {\n data: OpMetricData;\n isInverted: boolean;\n metric: OpMetricValueTypes;\n name: OpMetricValueTypes | keyof typeof cycleTimeStages;\n};\n\nconst generateConfig = ({ data, isInverted, metric, name }: Props) => {\n const sortedData = orderBy(data, [\"startDate\"], [\"asc\"]);\n const isCycleTime = metric === \"cycleTime\";\n const dataToSeries = sortedData.map((record: OpMetricSprintRecord, index) => {\n const basePoint = {\n timerange: {\n start: record.startDate,\n end: record.endDate,\n timerangeType: !!record.sprintId\n ? timerangeTypes.SPRINT\n : timerangeTypes.CUSTOM,\n displayName: record.sprintName,\n id: record.sprintId\n },\n x: index\n };\n\n const metricValue = getMetricValue(record, metric);\n const metricUnit = getMetricUnit(record, metric);\n\n let pointValue, tooltipDisplayValue;\n if (metric === \"cycleTime\") {\n if (isUndefined(metricValue)) {\n pointValue = null;\n tooltipDisplayValue = null;\n } else {\n // convert to days\n pointValue = (metricValue as number) / 24;\n // convert to days,hours; discard any 0 values; create value/unit\n // string, join into string with comma if needed\n const positiveValues = splitCycleTimeHours(\n metricValue as number\n ).filter(record => record.value > 0);\n tooltipDisplayValue = positiveValues.length\n ? positiveValues\n .map(\n record =>\n `${record.value}${record.unit.charAt(0).toLowerCase()}`\n )\n .join(\", \")\n : \"0h\";\n }\n } else if (metricUnit === \"PERCENT\") {\n pointValue = (metricValue as number) * 100;\n tooltipDisplayValue = pointValue.toFixed(0);\n } else {\n pointValue = metricValue;\n tooltipDisplayValue = metricValue;\n }\n\n return {\n ...basePoint,\n y: pointValue,\n unit: metricUnit,\n value: tooltipDisplayValue,\n name:\n isCycleTime && !!cycleTimeStageLabels[name]\n ? cycleTimeStageLabels[name]\n : startCase(name)\n };\n });\n\n const dataToNumericSeries = dataToSeries.map(record => record.y);\n\n const seriesDelta =\n (dataToNumericSeries[dataToNumericSeries.length - 1] as number) -\n (dataToNumericSeries[0] as number);\n const color = getColorForDelta(seriesDelta, isInverted);\n\n return {\n chart: {\n backgroundColor: null,\n borderWidth: 0,\n type: \"line\",\n margin: [10, 0, 30, 0],\n height: metric === \"cycleTime\" ? 82 : 114,\n style: {\n overflow: \"visible\"\n }\n // small optimalization, saves 1-2 ms each sparkline\n // skipClone: true\n },\n title: {\n text: \"\"\n },\n credits: {\n enabled: false\n },\n xAxis: {\n categories: sortedData.map((d, index) => {\n return index === 0 || index === sortedData.length - 1\n ? formatTimestamp({\n format: \"MMM\",\n timestamp: index === 0 ? d.startDate : d.endDate\n })\n : \"\";\n }),\n maxPadding: 0.05,\n minPadding: 0.05,\n labels: {\n // don't show the xaxis labels if for the cycle time stages\n enabled: !Object.values(cycleTimeStages).includes(name),\n style: {\n color: currentTheme.colors.all.wolverine,\n fontFamily: currentTheme.fonts.subheader.name,\n fontWeight: currentTheme.fonts.subheader.weights.bold\n },\n y: 20\n },\n title: {\n text: null\n },\n startOnTick: false,\n endOnTick: false,\n lineColor: currentTheme.colors.all.wolverine,\n tickWidth: 0,\n tickmarkPlacement: \"on\",\n showFirstLabel: true\n },\n yAxis: {\n maxPadding: 0.02,\n gridLineWidth: 0,\n min: 0,\n endOnTick: true,\n startOnTick: false,\n labels: {\n x: 5,\n y: 5,\n align: \"left\",\n enabled: true,\n formatter: function() {\n const context = this as any;\n if (context.isLast) {\n return metric === \"cycleTime\"\n ? `${context.value}d`\n : dataToSeries[0].unit === \"PERCENT\"\n ? `${context.value}%`\n : context.value;\n }\n if (context.isFirst) {\n return context.value.toString();\n }\n return \"\";\n }\n },\n title: {\n text: null\n }\n },\n legend: {\n enabled: false\n },\n plotOptions: {\n series: {\n animation: false,\n color,\n lineWidth: 1,\n shadow: false,\n states: {\n hover: {\n halo: { size: 6 },\n lineWidth: 1\n }\n },\n marker: {\n radius: 2,\n states: {\n hover: {\n radius: 3\n }\n }\n },\n fillOpacity: 0.25\n }\n },\n tooltip: {\n ...chartToolTipConfig,\n positioner: function(\n w: number,\n h: number,\n point: PointEventsOptionsObject\n ) {\n return getAdjustedTooltipPosition({\n currentPosition: (this as any).getPosition(w, h, point),\n windowScroll: window.scrollY\n });\n }\n },\n series: [\n {\n name: \"sparkline\",\n type: \"line\",\n data: dataToSeries\n }\n ]\n };\n};\n\nexport default generateConfig;\n","import React, { ReactElement, useMemo } from \"react\";\nimport { DefaultTheme, withTheme } from \"styled-components/macro\";\n\n// components\nimport Chart from \"../Chart/Chart\";\nimport OperationalMetricsSparklineTooltip from \"../OperationalMetricsSparklineTooltip/OperationalMetricsSparklineTooltip\";\n\n// constantss\nimport { cycleTimeStages } from \"../../constants/constants\";\n\n// interfaces\nimport { OpMetricData, OpMetricValueTypes } from \"../../interfaces/ops-metrics\";\n\n// config\nimport generateConfig from \"./config\";\n\n// typescript props\ntype Props = {\n className?: string;\n data: OpMetricData;\n isInverted?: boolean;\n name: OpMetricValueTypes | keyof typeof cycleTimeStages;\n metric: OpMetricValueTypes;\n testId?: string;\n theme: DefaultTheme;\n};\n\nconst ChartOpsMetricsSparkline = ({\n className,\n data,\n isInverted = false,\n name,\n metric,\n testId = \"testId\",\n theme\n}: Props): ReactElement => {\n const thisTestId = `${testId}-chart-ops-metrics-sparkline-${name}`;\n\n const chart = useMemo(() => {\n return {\n config: generateConfig({ data, isInverted, metric, name }),\n id: `chart-ops-metrics-sparkline-${name}`\n };\n }, [data, isInverted, metric, name]);\n\n return (\n
    \n }\n />\n
    \n );\n};\n\nexport default withTheme(ChartOpsMetricsSparkline);\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { isNull } from \"lodash\";\n\n// components\nimport HtmlText from \"../HtmlText/HtmlText\";\nimport InfoBook from \"../InfoBook/InfoBook\";\nimport InfoPopup from \"../InfoPopup/InfoPopup\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport ValueWithDirectionality from \"../ValueWithDirectionality/ValueWithDirectionality\";\nimport ChartOpsMetricsSparkline from \"../ChartOpsMetricsSparkline/ChartOpsMetricsSparkline\";\n\n// constants\nimport { directionalityTypes } from \"../../constants/constants\";\n\n// interfaces\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\nimport {\n OperationalMetricsTextContent,\n OpMetricData,\n OpMetricValueTypes\n} from \"../../interfaces/ops-metrics\";\n\n// utils\nimport {\n getMetricBoxDisplayValue,\n getMetricBoxUnit\n} from \"../../utils/operational-metrics\";\n\nconst Container = styled.div`\n display: flex;\n width: 26.4rem;\n flex-direction: column;\n margin-right: ${props => props.theme.grid.gap};\n`;\n\nconst Title = styled.header`\n align-items: center;\n border-bottom: ${props => `1px solid ${props.theme.colors.all.jean}`};\n display: flex;\n font-size: ${props => props.theme.fonts.header.sizes.sm};\n font-weight: ${props => props.theme.fonts.header.weights.demiBold};\n margin-bottom: 1.6rem;\n`;\n\nconst InfoPopups = styled.div`\n align-items: center;\n display: flex;\n margin-left: 0.8rem;\n`;\n\nconst InfoI = styled(InfoPopup)`\n margin-right: 0.8rem;\n`;\n\nconst ContentWrapper = styled.div`\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n`;\n\nconst CurrentValues = styled.div`\n align-items: baseline;\n display: flex;\n flex-wrap: wrap;\n margin-bottom: ${props => props.theme.grid.gap};\n\n & > div {\n &:nth-of-type(1) {\n &:not(:last-of-type) {\n margin-right: 0.8rem;\n }\n }\n }\n`;\n\nconst ValueBlock = styled.div`\n display: flex;\n flex-direction: row;\n align-items: baseline;\n`;\nconst PrimaryValue = styled.div`\n font-family: ${props => props.theme.fonts.subheader.name};\n font-size: ${props => props.theme.fonts.subheader.sizes.xl};\n font-weight: ${props => props.theme.fonts.subheader.weights.bold};\n line-height: ${props => props.theme.fonts.subheader.sizes.xl};\n`;\n\nconst ValueUnit = styled.div`\n font-family: ${props => props.theme.fonts.primary.name};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n line-height: ${props => props.theme.fonts.primary.sizes.xs};\n white-space: nowrap;\n`;\n\nconst Previous = styled.div`\n align-items: baseline;\n display: flex;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\n\nconst PreviousValue = styled.div`\n font-family: ${props => props.theme.fonts.subheader.name};\n font-weight: ${props => props.theme.fonts.subheader.weights.bold};\n`;\n\nconst PreviousTitle = styled.div`\n white-space: nowrap;\n &::after {\n content: \":\";\n margin-right: 0.8rem;\n }\n`;\n\nconst Link = styled(RouteLink)`\n color: ${props => props.theme.colors.all.wolverine};\n\n &,\n &:visited {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n text-decoration: none;\n }\n`;\n\nconst Delta = styled(ValueWithDirectionality)`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n white-space: nowrap;\n`;\n\nconst Comparison = styled.div`\n align-items: baseline;\n display: flex;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst ComparisonHeader = styled.header`\n margin-right: 0.8rem;\n &::after {\n content: \": \";\n }\n`;\nconst OverallDelta = styled(ValueWithDirectionality)`\n white-space: nowrap;\n`;\nconst Sparkline = styled(ChartOpsMetricsSparkline)`\n margin-top: 1.6rem;\n`;\n\ntype Props = {\n deltaValue: number | null;\n firstMonth: string;\n isActiveSprint?: boolean;\n isSprintMode?: boolean;\n linkPath?: string;\n name: OpMetricValueTypes;\n opMetricsData: OpMetricData;\n overallDeltaValue: number | null;\n previousTimerangeHeader: React.ReactNode;\n previousValue: number | null;\n testId?: string;\n textContent: OperationalMetricsTextContent;\n timerange: TimerangeMetadataInterface;\n value: number | null;\n};\n\nconst OperationalMetricsBox = ({\n deltaValue,\n firstMonth,\n isActiveSprint = false,\n isSprintMode = false,\n linkPath,\n name,\n opMetricsData,\n overallDeltaValue,\n previousTimerangeHeader,\n previousValue,\n testId = \"testId\",\n textContent,\n value\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-operational-metrics-box-${name}`;\n const currentDisplayUnit = getMetricBoxUnit(\n name,\n isSprintMode,\n isActiveSprint,\n false\n );\n const previousDisplayUnit = getMetricBoxUnit(\n name,\n isSprintMode,\n isActiveSprint,\n true\n );\n\n // TODO: refactor this component so that we can pass in the entire metric\n // (value + unit) instead of deconstructing the value and then having to do\n // this logic to reconstruct. (maybe even bring in all the value/delta calcs\n // too. this component is kind of confusing.)\n let deltaUnit;\n const unitIsPercentage = /%/.test(currentDisplayUnit);\n if (unitIsPercentage) {\n deltaUnit = \"%\";\n }\n const isInverted = name === \"bugAllocation\" || name === \"complexPrs\";\n\n const valueAndUnitDisplayBlock = (\n \n \n {getMetricBoxDisplayValue(value, unitIsPercentage)}\n \n {currentDisplayUnit}\n \n );\n\n return (\n \n \n {textContent.title}\n {isNull(textContent.definition) &&\n isNull(textContent.summary) ? null : (\n <InfoPopups>\n {isNull(textContent.summary) ? null : (\n <InfoI\n content={\n <ContentWrapper>\n <HtmlText\n htmlText={textContent.summary}\n testId={thisTestId}\n />\n </ContentWrapper>\n }\n name={name}\n testId={thisTestId}\n />\n )}\n {isNull(textContent.definition) ? null : (\n <InfoBook\n content={textContent.definition.content}\n header={textContent.definition.header}\n link={textContent.definition.link}\n name={name}\n testId={thisTestId}\n />\n )}\n </InfoPopups>\n )}\n \n \n
    \n {!!linkPath ? (\n \n {valueAndUnitDisplayBlock}\n \n ) : (\n valueAndUnitDisplayBlock\n )}\n
    \n {!!deltaValue ? (\n 0\n ? directionalityTypes.POSITIVE\n : directionalityTypes.NEGATIVE\n }\n value={\n getMetricBoxDisplayValue(deltaValue, unitIsPercentage) as number\n }\n unit={deltaUnit}\n isInverted={isInverted}\n />\n ) : (\n
    --
    \n )}\n
    \n \n {previousTimerangeHeader}\n \n {getMetricBoxDisplayValue(previousValue, unitIsPercentage)}\n \n \n \n \n Compared to {firstMonth}\n {isNull(overallDeltaValue) || overallDeltaValue === 0 ? (\n
    --
    \n ) : (\n 0\n ? directionalityTypes.POSITIVE\n : directionalityTypes.NEGATIVE\n }\n display=\"text\"\n value={overallDeltaValue}\n isInverted={isInverted}\n />\n )}\n
    \n \n
    \n );\n};\n\nexport default OperationalMetricsBox;\n","import { currentTheme } from \"../../themes/currentTheme\";\n\n// constants\nimport { cycleTimeStages } from \"../../constants/constants\";\n\n// interfaces\nimport { CycleTimeInterface } from \"../../interfaces/work-items\";\nimport { CycleTimeStageTypes } from \"../../interfaces/constants\";\n\n// utils\nimport { getCycleTimeStageInHours } from \"../../utils/cycle-time\";\n\nconst config = (data: CycleTimeInterface) => {\n const totalCycleTimeInHours = getCycleTimeStageInHours(Object.values(data));\n const series = ([\n cycleTimeStages.DEV,\n cycleTimeStages.WAITING_FOR_REVIEW,\n cycleTimeStages.REVIEW,\n cycleTimeStages.RELEASE\n ] as Array)\n .reverse()\n .map(stageKey => {\n const stage = data[stageKey];\n const stageTimeInHours = !!stage\n ? stage?.unit === \"DAYS\"\n ? stage.value * 24\n : stage.value\n : 0;\n const color =\n currentTheme.colors.chart.cycleTime[\n stageKey as keyof CycleTimeStageTypes\n ].backgroundColor;\n return {\n name: stageKey,\n borderColor: color,\n color,\n data: !!totalCycleTimeInHours\n ? [stageTimeInHours / totalCycleTimeInHours]\n : [null]\n };\n });\n\n return {\n chart: {\n height: 48,\n margin: 0,\n type: \"bar\"\n },\n xAxis: { visible: false },\n yAxis: { visible: false },\n plotOptions: {\n bar: {\n dataLabels: {\n enabled: false\n },\n stacking: \"percent\",\n states: {\n hover: {\n enabled: false\n },\n inactive: {\n enabled: false\n }\n }\n }\n },\n legend: { enabled: false },\n tooltip: {\n enabled: false\n },\n title: {\n text: undefined\n },\n series\n };\n};\nexport default config;\n","import React, { useMemo } from \"react\";\nimport { DefaultTheme, withTheme } from \"styled-components/macro\";\n\n// components\nimport Chart from \"../Chart/Chart\";\n\n// config\nimport generateConfig from \"./config\";\n\n// interfaces\nimport { CycleTimeInterface } from \"../../interfaces/work-items\";\n\n// typescript props\ntype Props = {\n className?: string;\n data: CycleTimeInterface;\n isFetchingData?: boolean;\n testId?: string;\n theme: DefaultTheme;\n};\n\nconst ChartOperationalMetricsCycleTime = ({\n className,\n data,\n isFetchingData = false,\n testId = \"testId\",\n theme\n}: Props) => {\n const thisTestId = `${testId}-operational-metrics-cycle-time`;\n\n const chart = useMemo(() => {\n return {\n config: generateConfig(data),\n id: \"operational-metrics-cycle-time-chart\",\n isFetchingData\n };\n }, [data, isFetchingData]);\n\n return (\n
    \n \n
    \n );\n};\n\nexport default withTheme(ChartOperationalMetricsCycleTime);\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isUndefined } from \"lodash\";\n\n// components\nimport ChartOpsMetricsSparkline from \"../ChartOpsMetricsSparkline/ChartOpsMetricsSparkline\";\nimport CycleTimeStageHeader from \"../CycleTimeStageHeader/CycleTimeStageHeader\";\nimport CycleTimeValueDisplay from \"../CycleTimeValueDisplay/CycleTimeValueDisplay\";\nimport RouteLink from \"../RouteLink/RouteLink\";\n\n// constants\nimport { workDeepDiveSections } from \"../../constants/constants\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { CycleTimeStageTypes } from \"../../interfaces/constants\";\nimport {\n OpMetricData,\n OpMetricSprintRecord\n} from \"../../interfaces/ops-metrics\";\n\n// utils\nimport {\n getCycleTimeDelta,\n splitCycleTimeHours,\n getValueInHours,\n filterTruthyCycleTimeValues\n} from \"../../utils/cycle-time\";\nimport {\n getMetricMetadata,\n mapStageData\n} from \"../../utils/operational-metrics\";\n\n// styled components\nconst Container = styled.li`\n box-sizing: content-box;\n display: flex;\n flex-flow: column nowrap;\n padding: 0 calc(${props => props.theme.grid.gap} / 2);\n width: ${props =>\n `calc((2 * ${props.theme.grid.columnWidth}) + ${props.theme.grid.gap})`};\n\n &:first-child {\n padding-left: 0;\n }\n &:last-child {\n padding-right: 0;\n }\n\n & + & {\n border-left: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n }\n`;\nconst StageHeader = styled(CycleTimeStageHeader)`\n order: 3;\n`;\nconst Footer = styled.footer`\n margin-bottom: 0.8rem;\n`;\nconst Current = styled(CycleTimeValueDisplay)`\n align-items: baseline;\n display: flex;\n flex-wrap: wrap;\n font-size: 3.5rem;\n\n & > div {\n &:nth-of-type(1) {\n flex-wrap: wrap;\n &:not(:last-of-type) {\n margin-right: 0.8rem;\n }\n }\n }\n`;\nconst PreviousHeader = styled.header`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n &::after {\n content: \":\";\n margin-right: 0.8rem;\n }\n`;\nconst Previous = styled.div`\n align-items: baseline;\n display: flex;\n`;\nconst PreviousValue = styled(CycleTimeValueDisplay)`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst Link = styled(RouteLink)`\n color: ${props => props.theme.colors.all.wolverine};\n\n &,\n &:visited {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n text-decoration: none;\n }\n`;\nconst Sparkline = styled(ChartOpsMetricsSparkline)`\n margin: 1.6rem 0 0;\n`;\n\n// typescript props\ntype Props = {\n all: OpMetricData;\n className?: string;\n current: OpMetricSprintRecord;\n previous?: OpMetricSprintRecord;\n previousTimerangeHeader: React.ReactNode;\n stageKey: keyof CycleTimeStageTypes;\n testId?: string;\n};\n\nconst OperationalMetricsCycleTimeBreakoutStage = ({\n all,\n className,\n current,\n previous,\n previousTimerangeHeader,\n stageKey,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-operational-metrics-cycle-time-breakout-stage-${stageKey}`;\n const { getWorkDeepDivePath } = useUrlParams();\n const currentStage = getMetricMetadata(current, \"cycleTime\")?.[stageKey];\n const currentCycleTime = isUndefined(currentStage)\n ? currentStage\n : splitCycleTimeHours(getValueInHours(\"HOURS\", currentStage.value));\n const currentDisplayStage = !!currentCycleTime?.length\n ? filterTruthyCycleTimeValues(currentCycleTime)\n : null;\n const previousStage = isUndefined(previous)\n ? previous\n : getMetricMetadata(previous, \"cycleTime\")?.[stageKey];\n const previousCycleTime = isUndefined(previousStage)\n ? previousStage\n : splitCycleTimeHours(getValueInHours(\"HOURS\", previousStage.value));\n const previousDisplayStage = !!previousCycleTime?.length\n ? filterTruthyCycleTimeValues(previousCycleTime)\n : null;\n return (\n \n \n \n \n \n \n {previousTimerangeHeader}\n \n \n
    \n \n
    \n
    \n );\n};\n\nexport default OperationalMetricsCycleTimeBreakoutStage;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport ChartOperationalMetricsCycleTime from \"../ChartOperationalMetricsCycleTime/ChartOperationalMetricsCycleTime\";\nimport OperationalMetricsCycleTimeBreakoutStage from \"../OperationalMetricsCycleTimeBreakoutStage/OperationalMetricsCycleTimeBreakoutStage\";\n\n// constants\nimport { cycleTimeStages } from \"../../constants/constants\";\n\n// interfaces\nimport { CycleTimeStageTypes } from \"../../interfaces/constants\";\nimport { CycleTimeInterface } from \"../../interfaces/work-items\";\nimport {\n OpMetricData,\n OpMetricSprintRecord\n} from \"../../interfaces/ops-metrics\";\n\n// utils\nimport { getMetricMetadata } from \"../../utils/operational-metrics\";\n\n// styled components\nconst Container = styled.div`\n position: relative;\n`;\nconst BreakoutContainer = styled.ul`\n display: flex;\n`;\n\nconst ProgressBar = styled.figure`\n width: 100%;\n`;\nconst Chart = styled(ChartOperationalMetricsCycleTime)`\n width: 100%;\n`;\n\n// typescript props\ntype Props = {\n all: OpMetricData;\n className?: string;\n current: OpMetricSprintRecord;\n previous?: OpMetricSprintRecord;\n previousTimerangeHeader: React.ReactNode;\n testId?: string;\n};\n\nconst OperationalMetricsCycleTimeBreakout = ({\n all,\n className,\n current,\n previous,\n previousTimerangeHeader,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-ops-metrics-cycle-time-breakout`;\n const currentCycleTime = getMetricMetadata(\n current,\n \"cycleTime\"\n ) as CycleTimeInterface;\n return (\n \n \n {([\n cycleTimeStages.DEV,\n cycleTimeStages.WAITING_FOR_REVIEW,\n cycleTimeStages.REVIEW,\n cycleTimeStages.RELEASE\n ] as Array).map(stageKey => (\n \n ))}\n \n \n \n
    \n Operational metrics cycle time chart\n
    \n
    \n
    \n );\n};\n\nexport default OperationalMetricsCycleTimeBreakout;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport ChartOpsMetricsSparkline from \"../ChartOpsMetricsSparkline/ChartOpsMetricsSparkline\";\nimport CycleTimeValueDisplay from \"../CycleTimeValueDisplay/CycleTimeValueDisplay\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport ValueWithDirectionality from \"../ValueWithDirectionality/ValueWithDirectionality\";\n\n// constants\nimport { workDeepDiveSections } from \"../../constants/constants\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport {\n OpMetricData,\n OpMetricSprintRecord\n} from \"../../interfaces/ops-metrics\";\n\n// utils\nimport {\n filterTruthyCycleTimeValues,\n getCycleTimeDelta,\n splitCycleTimeHours\n} from \"../../utils/cycle-time\";\nimport { getMetricValue } from \"../../utils/operational-metrics\";\n\n// styled components\nconst Current = styled(CycleTimeValueDisplay)`\n align-items: baseline;\n display: flex;\n flex-wrap: wrap;\n font-size: ${props => props.theme.fonts.primary.sizes.xl};\n line-height: 1;\n margin-bottom: ${props => props.theme.grid.gap};\n\n & > div {\n &:nth-of-type(1) {\n flex-wrap: wrap;\n &:not(:last-of-type) {\n margin-right: 0.8rem;\n }\n }\n }\n`;\nconst PreviousHeader = styled.header`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n &::after {\n content: \":\";\n margin-right: 0.8rem;\n }\n`;\nconst Previous = styled.div`\n align-items: baseline;\n display: flex;\n`;\nconst PreviousValue = styled(CycleTimeValueDisplay)`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst Link = styled(RouteLink)`\n color: ${props => props.theme.colors.all.wolverine};\n\n &,\n &:visited {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n text-decoration: none;\n }\n`;\nconst Sparkline = styled(ChartOpsMetricsSparkline)`\n margin: 1.6rem 0;\n`;\nconst Comparison = styled.div`\n align-items: baseline;\n display: flex;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst ComparisonHeader = styled.header`\n margin-right: 0.8rem;\n &::after {\n content: \": \";\n }\n`;\nconst OverallDelta = styled(ValueWithDirectionality)`\n white-space: nowrap;\n`;\n\n// typescript props\ntype Props = {\n all: OpMetricData;\n className?: string;\n current: OpMetricSprintRecord;\n first: OpMetricSprintRecord;\n firstMonth: string;\n previous?: OpMetricSprintRecord;\n previousTimerangeHeader: React.ReactNode;\n testId?: string;\n};\n\nconst OperationalMetricsCycleTimeSummary = ({\n all,\n className,\n current,\n first,\n firstMonth,\n previous,\n previousTimerangeHeader,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-ops-metrics-cycle-time-summary`;\n const { getWorkDeepDivePath } = useUrlParams();\n const currentRollup = splitCycleTimeHours(\n getMetricValue(current, \"cycleTime\") as number\n );\n const firstRollup = splitCycleTimeHours(\n getMetricValue(first, \"cycleTime\") as number\n );\n let previousRollup;\n if (!!previous) {\n previousRollup = splitCycleTimeHours(\n getMetricValue(previous, \"cycleTime\") as number\n );\n }\n const overallDeltaValue = getCycleTimeDelta(currentRollup, firstRollup);\n return (\n
    \n
    \n \n \n \n
    \n {!!previousRollup ? (\n \n {previousTimerangeHeader}\n \n \n ) : null}\n \n Compared to {firstMonth}\n {!!overallDeltaValue ? (\n \n ) : (\n
    --
    \n )}\n
    \n
    \n \n
    \n
    \n );\n};\n\nexport default OperationalMetricsCycleTimeSummary;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isNull } from \"lodash\";\n\n// components\nimport HtmlText from \"../HtmlText/HtmlText\";\nimport InfoBook from \"../InfoBook/InfoBook\";\nimport InfoPopup from \"../InfoPopup/InfoPopup\";\nimport OperationalMetricsCycleTimeBreakout from \"../OperationalMetricsCycleTimeBreakout/OperationalMetricsCycleTimeBreakout\";\nimport OperationalMetricsCycleTimeSummary from \"../OperationalMetricsCycleTimeSummary/OperationalMetricsCycleTimeSummary\";\n\n// interfaces\nimport {\n OperationalMetricsTextContent,\n OpMetricData,\n OpMetricSprintRecord,\n OpMetricValueTypes\n} from \"../../interfaces/ops-metrics\";\n\n// styled components\nconst Header = styled.header`\n align-items: center;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n display: flex;\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n margin-bottom: 1rem;\n`;\nconst InfoPopups = styled.div`\n align-items: center;\n display: flex;\n margin-left: 0.8rem;\n`;\nconst Book = styled(InfoBook)`\n margin-left: 0.8rem;\n`;\nconst ContentWrapper = styled.div`\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n`;\n\nconst DisplayContainer = styled.div`\n align-items: flex-start;\n display: flex;\n justify-content: space-between;\n`;\nconst Summary = styled(OperationalMetricsCycleTimeSummary)`\n margin-right: ${props =>\n `calc(${props.theme.grid.columnWidth} + (2 * ${props.theme.grid.gap}) - 3px)`};\n width: ${props =>\n `calc((3 * ${props.theme.grid.columnWidth}) + (2 * ${props.theme.grid.gap}))`};\n`;\nconst Breakout = styled(OperationalMetricsCycleTimeBreakout)`\n margin-top: 0.5rem;\n`;\n\n// typescript props\ntype Props = {\n all: OpMetricData;\n className?: string;\n current: OpMetricSprintRecord;\n first: OpMetricSprintRecord;\n firstMonth: string;\n name: OpMetricValueTypes;\n previous?: OpMetricSprintRecord;\n previousTimerangeHeader: React.ReactNode;\n testId?: string;\n textContent: OperationalMetricsTextContent;\n};\n\nconst OperationalMetricsCycleTime = ({\n all,\n className,\n current,\n first,\n firstMonth,\n name,\n previous,\n previousTimerangeHeader,\n testId = \"testId\",\n textContent\n}: Props): ReactElement => {\n const thisTestId = `${testId}-ops-metrics-cycle-time`;\n return (\n
    \n
    \n {textContent.title}\n {isNull(textContent.definition) &&\n isNull(textContent.summary) ? null : (\n \n {isNull(textContent.summary) ? null : (\n \n \n \n }\n name={name}\n testId={thisTestId}\n />\n )}\n {isNull(textContent.definition) ? null : (\n \n )}\n \n )}\n
    \n \n \n \n \n
    \n );\n};\n\nexport default OperationalMetricsCycleTime;\n","import { useMemo } from \"react\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useQuery, UseQueryResult } from \"react-query\";\nimport { useUrlParams } from \"./useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport { requestOperationalMetrics } from \"../utils/work-deep-dive\";\nimport { OpMetricData } from \"../interfaces/ops-metrics\";\n\nexport const useOperationalMetricsData = (\n canRequest = true\n): UseQueryResult => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const { urlParams } = useUrlParams();\n const { timerange, sprintId, teamId } = urlParams;\n const { start: startDate, end: endDate } = timerange;\n\n const params = useMemo(\n () => ({\n startDate,\n endDate,\n teamId: teamId || null,\n sprintId: sprintId || null\n }),\n [startDate, endDate, sprintId, teamId]\n );\n\n return useQuery(\n [\"operational-metrics\", { ...params }],\n () =>\n requestOperationalMetrics({\n accessToken,\n tenantId,\n params\n }),\n {\n enabled: !!accessToken && !!tenantId && canRequest,\n refetchOnWindowFocus: false\n }\n );\n};\n","import React, { ReactElement, useMemo } from \"react\";\nimport { isNull, isUndefined } from \"lodash\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport DataDisclaimer from \"../DataDisclaimer/DataDisclaimer\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport OperationalMetricsBox from \"../OperationalMetricsBox/OperationalMetricsBox\";\nimport OperationalMetricsCycleTime from \"../OperationalMetricsCycleTime/OperationalMetricsCycleTime\";\n\n// constants\nimport {\n urlParamKeys,\n workDeepDiveSections,\n workMetadataActivityTypes,\n workMetadataStatusTypes\n} from \"../../constants/constants\";\nimport operationalMetricsText from \"../../constants/operationalMetricsText.json\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { useOperationalMetricsData } from \"../../hooks/useOperationalMetricsData\";\n\n// utils\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport {\n formatTimestamp,\n getDisplayTextForPreviousTimerange\n} from \"../../utils/date\";\nimport {\n getOperationalMetric,\n getOperationalMetricDelta\n} from \"../../utils/operational-metrics\";\nimport { getIsActiveSprint, getIsSprintMode } from \"../../utils/sprints\";\n\nconst Content = styled.div`\n background: ${props => props.theme.colors.all.white};\n padding: ${props => props.theme.grid.gridOffset};\n`;\n\nconst MetricBoxes = styled.div`\n display: flex;\n flex-direction: row;\n`;\nconst Footer = styled.footer`\n align-items: center;\n display: flex;\n justify-content: flex-end;\n margin-top: 4rem;\n`;\nconst CycleTimeWrapper = styled.div`\n margin-top: 5rem;\n`;\n\nconst OperationalMetricsPage = (): ReactElement => {\n const thisTestId = \"operational-metrics-page\";\n const { getWorkDeepDivePath, urlParams } = useUrlParams();\n const timerange = urlParams.timerange;\n const isSprintMode = getIsSprintMode(timerange);\n const isActiveSprint = getIsActiveSprint(timerange);\n // FIXME: fully own that there's a lot of duplication and changing stuff in\n // multiple places for this. we don't have the granular extracted text we need\n // yet, hopefully not too much longer.\n const informationText = isSprintMode\n ? operationalMetricsText.sprint\n : operationalMetricsText.kanban;\n\n const session = useSelector((state: AppStateInterface) => state.session);\n const displayPreviousHeader = getDisplayTextForPreviousTimerange(\n timerange,\n session.namedTimeranges\n );\n const {\n data: operationalMetricsData,\n isFetching: isFetchingOperationalMetricsData,\n isSuccess: isSuccessOperationalMetricsData\n } = useOperationalMetricsData();\n const [first, current, previous] = useMemo(\n () =>\n isUndefined(operationalMetricsData)\n ? []\n : operationalMetricsData\n .slice(operationalMetricsData.length - 1)\n .concat(operationalMetricsData.slice(0, 2)),\n [operationalMetricsData]\n );\n\n // release count\n const releaseCount = getOperationalMetric(\"releaseCount\", current);\n const previousReleaseCount = getOperationalMetric(\"releaseCount\", previous);\n const firstReleaseCount = getOperationalMetric(\"releaseCount\", first);\n const releaseCountDelta = getOperationalMetricDelta(\n releaseCount,\n previousReleaseCount\n );\n const overallReleaseCountDelta = getOperationalMetricDelta(\n releaseCount,\n firstReleaseCount\n );\n const releaseCountValue = isNull(releaseCount)\n ? releaseCount\n : (releaseCount.value as number);\n const previousReleaseCountValue = isNull(previousReleaseCount)\n ? previousReleaseCount\n : (previousReleaseCount.value as number);\n\n // bug allocation\n const bugAllocation = getOperationalMetric(\"bugAllocation\", current);\n const previousBugAllocation = getOperationalMetric(\"bugAllocation\", previous);\n const firstBugAllocation = getOperationalMetric(\"bugAllocation\", first);\n const bugAllocationDelta = getOperationalMetricDelta(\n bugAllocation,\n previousBugAllocation\n );\n const overallBugAllocationDelta = getOperationalMetricDelta(\n bugAllocation,\n firstBugAllocation\n );\n const bugAllocationValue = isNull(bugAllocation)\n ? bugAllocation\n : (bugAllocation.value as number);\n const previousBugAllocationValue = isNull(previousBugAllocation)\n ? previousBugAllocation\n : (previousBugAllocation.value as number);\n\n // completion rate\n const completionRate = getOperationalMetric(\"completionRate\", current);\n const previousCompletionRate = getOperationalMetric(\n \"completionRate\",\n previous\n );\n const firstCompletionRate = getOperationalMetric(\"completionRate\", first);\n const completionRateDelta = getOperationalMetricDelta(\n completionRate,\n previousCompletionRate\n );\n const overallCompletionRateDelta = getOperationalMetricDelta(\n completionRate,\n firstCompletionRate\n );\n const completionRateValue = isNull(completionRate)\n ? completionRate\n : (completionRate.value as number);\n const previousCompletionRateValue = isNull(previousCompletionRate)\n ? previousCompletionRate\n : (previousCompletionRate.value as number);\n\n // complex prs rate\n const complexPrsRate = getOperationalMetric(\"complexPrs\", current);\n const previousComplexPrsRate = getOperationalMetric(\"complexPrs\", previous);\n const firstComplexPrsRate = getOperationalMetric(\"complexPrs\", first);\n const complexPrsRateDelta = getOperationalMetricDelta(\n complexPrsRate,\n previousComplexPrsRate\n );\n const overallComplexPrsRateDelta = getOperationalMetricDelta(\n complexPrsRate,\n firstComplexPrsRate\n );\n const complexPrsRateValue = isNull(complexPrsRate)\n ? complexPrsRate\n : (complexPrsRate.value as number);\n const previousComplexPrsRateValue = isNull(previousComplexPrsRate)\n ? previousComplexPrsRate\n : (previousComplexPrsRate.value as number);\n\n const firstMonth = !!first?.startDate\n ? formatTimestamp({\n format: \"MMM\",\n timestamp: first.startDate\n })\n : \"\";\n const prWorkFlowLinkPath = getWorkDeepDivePath({\n selectedSection: workDeepDiveSections.PR_WORKFLOW\n });\n\n return (\n \n \n }\n content={\n !!operationalMetricsData?.length ? (\n <>\n \n \n \n \n \n \n \n \n \n \n ) : null\n }\n />\n
    \n \n
    \n
    \n );\n};\n\nexport default OperationalMetricsPage;\n","import React, { ReactElement, useCallback, useMemo } from \"react\";\nimport styled from \"styled-components\";\nimport moment from \"moment\";\n\nimport {\n uniqBy,\n flatten,\n isNil,\n groupBy,\n mapValues,\n orderBy,\n isUndefined,\n max,\n sortBy,\n isEmpty\n} from \"lodash\";\n\n// components\nimport ChartCycleTime from \"../ChartCycleTime/ChartCycleTime\";\nimport EpicDetailsIssuesList from \"../EpicDetailsIssuesList/EpicDetailsIssuesList\";\nimport Icon from \"../Icon/Icon\";\nimport Table from \"../Table/Table\";\nimport Tooltip from \"../Tooltip/Tooltip\";\nimport WorkMetadataIcon from \"../WorkMetadataIcon/WorkMetadataIcon\";\nimport WorkMetadataTeamList from \"../WorkMetadataTeamList/WorkMetadataTeamList\";\n\n// constants\nimport {\n momentUnitTypes,\n urlParamKeys,\n workMetadataActivityTypes\n} from \"../../constants/constants\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport {\n CycleTimeInterface,\n EpicDetailsInterface,\n TableCellInterface,\n TableRowInterface,\n TeamMemberInterface,\n PrsByRepositoryRow\n} from \"../../interfaces/work-items\";\n\n// utils\nimport { getMedianCycleTime } from \"../../utils/cycle-time\";\nimport { ColumnInterface } from \"react-table\";\n\n// styled components\nconst Container = styled.div`\n padding: 0 2rem;\n`;\n\nconst RepositoryTable = styled(Table)`\n border-collapse: separate;\n border-spacing: 0 3rem;\n\n & > thead tr {\n position: relative;\n top: 8rem;\n display: grid;\n grid-template-columns: repeat(8, 1fr);\n }\n & > tbody > tr {\n display: grid;\n grid-template-columns: repeat(8, 1fr);\n & td:last-child {\n grid-column: 1 / 9;\n }\n &:hover {\n background: ${props => props.theme.colors.all.white};\n }\n background: ${props => props.theme.colors.all.white};\n border-bottom: ${props => `3rem solid ${props.theme.colors.all.lightJean}`};\n z-index: 1;\n position: relative;\n }\n\n & th {\n background: ${props => props.theme.colors.all.lightJean};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n\n & div {\n white-space: nowrap;\n }\n\n & > div {\n line-height: 1;\n }\n }\n\n & td {\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n & td,\n & th {\n &.repository {\n width: 25rem;\n }\n &.openPRs {\n width: 15rem;\n }\n &.cycleTime {\n width: 22rem;\n }\n &.lastUpdated {\n width: 12rem;\n }\n &.callouts {\n width: 8rem;\n }\n &.authors {\n width: 15rem;\n }\n &.reviewers {\n width: 12rem;\n }\n &.expander {\n padding-left: 0;\n }\n &.detailsTable {\n padding-bottom: 0;\n\n & > div {\n padding: 0;\n }\n\n & a {\n &:visited {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.aurora};\n }\n }\n\n &:hover {\n color: ${props => props.theme.colors.all.wolverine};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n text-decoration: none;\n cursor: default;\n }\n & thead tr:first-of-type {\n margin-top: 1rem;\n top: -1rem;\n }\n & th {\n background: ${props => props.theme.colors.all.white};\n position: sticky;\n top: 0;\n font-size: 1.1rem;\n }\n & tr {\n background: ${props => props.theme.colors.all.white};\n border-bottom: 0;\n }\n & tbody > tr {\n &.highlightedRow {\n background: ${props => props.theme.colors.all.jubilee};\n\n & > .activityType {\n background: transparent;\n }\n }\n &:hover {\n cursor: default;\n background: ${props => props.theme.colors.all.lightJean};\n color: ${props => props.theme.colors.all.wolverine};\n &:not(.highlightedRow) {\n & td.activityType {\n background: ${props => props.theme.colors.all.lightJean};\n }\n }\n }\n padding: 0;\n position: relative;\n & td:last-child {\n grid-column: initial;\n }\n z-index: 1;\n\n .related-ticket {\n vertical-align: middle;\n\n & a {\n align-items: center;\n display: flex;\n justify-content: space-between;\n }\n }\n & td {\n min-height: 4rem;\n &:hover {\n color: ${props => props.theme.colors.all.wolverine};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n cursor: default;\n }\n }\n }\n }\n }\n`;\n\nconst CellContainer = styled.span`\n min-height: 6.4rem;\n padding: 0.8rem;\n border-right: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n display: flex;\n align-items: center;\n word-break: break-all;\n`;\nconst LastUpdatedContainer = styled.div`\n flex-direction: column;\n`;\nconst WorkIcon = styled(WorkMetadataIcon)`\n margin-right: 0.8rem;\n`;\nconst AlertTriangle = styled(Icon)`\n color: ${props => props.theme.colors.all.rogue};\n`;\nconst DefinitionWrapper = styled.div`\n align-items: baseline;\n display: flex;\n`;\nconst CalloutLabel = styled.dt`\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n\n &::after {\n content: \":\";\n }\n`;\nconst CalloutContent = styled.div`\n display: flex;\n`;\nconst ExpandIconContainer = styled(CellContainer)`\n border: 0;\n`;\nconst ExpandIcon = styled(Icon)`\n color: inherit;\n`;\nconst DetailsTableContainer = styled.div`\n width: 100%;\n display: flex;\n justify-content: center;\n padding: 2rem;\n border-top: ${props => `0.2rem solid ${props.theme.colors.all.jean}`};\n overflow: auto;\n max-height: 40rem;\n`;\nconst NumericText = styled.div`\n font-family: ${props => props.theme.fonts.subheader.name};\n font-weight: ${props => props.theme.fonts.subheader.weights.bold};\n`;\nconst NumCallouts = styled(NumericText)`\n margin-left: 1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n data?: EpicDetailsInterface;\n manualDateMillis?: number; // for snapshots since the current date will be changing\n};\n\nexport const PRRepositorySummaryList = ({\n className,\n testId = \"testId\",\n data\n}: Props): ReactElement => {\n const thisTestId = `${testId}-repository-summary-list`;\n const { urlParams, updateUrlParams } = useUrlParams();\n const visibleRepositories = useMemo(() => urlParams.visibleRepositories, [\n urlParams\n ]);\n const pullRequests = useMemo(\n () =>\n !!data?.workItems?.length\n ? data.workItems\n .filter(i => i.workItem === workMetadataActivityTypes.PR)\n .map(pr => ({\n ...pr,\n level: 0,\n rootWorkItemId: null\n }))\n : [],\n [data]\n );\n\n const memoizedGetTeamMembers = useCallback(\n (teamMembersArrays: Array>) => {\n return uniqBy(flatten(teamMembersArrays), \"displayName\").sort((m1, m2) =>\n m1.displayName.localeCompare(m2.displayName)\n );\n },\n []\n );\n\n const pullRequestsByRepository = useMemo(\n () =>\n orderBy(\n Object.values(\n mapValues(\n groupBy(pullRequests, \"repository\"),\n (pullRequests, repository) => ({\n authors: memoizedGetTeamMembers(\n pullRequests.map(pr => pr.owners)\n ),\n callouts: flatten(pullRequests.map(pr => pr.callouts)),\n medianCycleTime: getMedianCycleTime(\n pullRequests\n ?.filter(pr => !isEmpty(pr.cycleTime) && !isNil(pr.cycleTime))\n .map(pr => pr.cycleTime as CycleTimeInterface)\n ),\n pullRequests,\n repository,\n reviewers: memoizedGetTeamMembers(\n pullRequests.map(pr => pr.contributors)\n )\n })\n )\n ),\n [\"hoursSinceLastUpdated\"],\n [\"asc\"]\n ),\n [memoizedGetTeamMembers, pullRequests]\n );\n\n const onClickRollupCell = useCallback(\n ({\n e,\n row,\n column\n }: {\n e: React.MouseEvent;\n row: TableRowInterface;\n column: ColumnInterface;\n }) => {\n const repository = row.original.repository as string;\n updateUrlParams({\n [urlParamKeys.VISIBLE_REPOSITORIES]: !visibleRepositories\n ? [repository]\n : visibleRepositories.includes(repository)\n ? visibleRepositories.filter(r => r !== repository)\n : [...visibleRepositories, repository]\n });\n },\n [updateUrlParams, visibleRepositories]\n );\n\n const columns = useMemo(() => {\n const childTableCustomColumns = [\n { id: \"id\", position: 3 },\n { id: \"openedAt\", position: 4 },\n { id: \"complexity\", position: 9 },\n { id: \"childWorkItems\", position: 10 }\n ];\n return [\n {\n accessor: (row: PrsByRepositoryRow) =>\n row.repository || \"Unknown Repository\",\n Header: \"Repo name\",\n Cell: ({ cell }: { cell: TableCellInterface }) => {\n return {cell.value};\n },\n className: \"repository\",\n id: \"repository\",\n onClickCell: onClickRollupCell\n },\n {\n accessor: (row: PrsByRepositoryRow) =>\n row.pullRequests.filter(pr => pr.closedAt === null).length,\n Header: \"Open PRs\",\n Cell: ({\n cell\n }: {\n cell: { value: number; row: { original: PrsByRepositoryRow } };\n }) => {\n return (\n \n \n \n {`${cell.value} / ${cell.row.original.pullRequests.length}`}\n \n \n );\n },\n className: \"openPRs\",\n id: \"openPRs\",\n onClickCell: onClickRollupCell\n },\n {\n accessor: (row: PrsByRepositoryRow) =>\n !!row.medianCycleTime\n ? Object.values(row.medianCycleTime).reduce(\n (total, stage) =>\n isUndefined(stage)\n ? total\n : total +\n (stage.unit === \"DAYS\" ? stage.value * 24 : stage.value),\n 0\n )\n : 0,\n Header: \"PR Median Cycle Time\",\n Cell: ({\n cell\n }: {\n cell: { value: number; row: { original: PrsByRepositoryRow } };\n }) => (\n \n \n \n ),\n className: \"cycleTime\",\n id: \"cycleTime\",\n onClickCell: onClickRollupCell\n },\n {\n accessor: (row: PrsByRepositoryRow) => {\n const lastUpdatedDate = max(\n flatten(\n row.pullRequests.map(pr =>\n pr.activityHistory?.map(a => a.activityAt)\n )\n )\n );\n\n return moment().diff(\n !!lastUpdatedDate ? Date.parse(lastUpdatedDate) : Date.now(),\n momentUnitTypes.HOURS\n );\n },\n Header: \"Last Updated\",\n Cell: ({\n cell\n }: {\n cell: { value: number; row: { original: PrsByRepositoryRow } };\n }) => (\n \n \n \n {cell.value > 24\n ? `${Math.floor(cell.value / 24)}`\n : `${cell.value}`}\n \n {cell.value > 24 ? `days ago` : `hours ago`}\n \n \n ),\n className: \"lastUpdated\",\n id: \"lastUpdated\",\n onClickCell: onClickRollupCell\n },\n {\n accessor: (row: PrsByRepositoryRow) => row.callouts.length,\n Header: \"Callouts\",\n Cell: ({\n cell\n }: {\n cell: { value: Array; row: { original: PrsByRepositoryRow } };\n }) => {\n const body = (\n \n \n \n {cell.value}\n \n \n );\n return !!cell.value ? (\n \n \n {sortBy(\n Object.entries(\n groupBy(cell.row.original.callouts, c =>\n c?.includes(\"STUCK\")\n ? \"Stuck\"\n : c?.includes(\"MERGED\")\n ? \"No Approval\"\n : \"High Discussion\"\n )\n ),\n e => e[0]\n ).map(([key, value]) => (\n \n {key}\n
    \n {value.length}\n
    \n
    \n ))}\n \n }\n trigger={body}\n testId={`pr-callouts-${cell.row.original.repository}`}\n />\n
    \n ) : (\n {body}\n );\n },\n className: \"callouts\",\n id: \"callouts\",\n onClickCell: onClickRollupCell\n },\n {\n accessor: (row: PrsByRepositoryRow) => row.authors[0]?.displayName,\n Header: \"Author(s)\",\n Cell: ({\n cell\n }: {\n cell: {\n value: Array;\n row: { original: PrsByRepositoryRow };\n };\n }) => (\n \n \n \n ),\n className: \"authors\",\n id: \"authors\",\n onClickCell: onClickRollupCell\n },\n {\n accessor: (row: PrsByRepositoryRow) => row.reviewers[0]?.displayName,\n Header: \"Reviewer(s)\",\n Cell: ({\n cell\n }: {\n cell: {\n value: Array;\n row: { original: PrsByRepositoryRow };\n };\n }) => (\n \n \n \n ),\n className: \"reviewers\",\n id: \"reviewers\",\n onClickCell: onClickRollupCell\n },\n {\n accessor: \"repository\",\n Cell: ({ cell }: { cell: TableCellInterface }) => (\n \n \n \n ),\n className: \"expander\",\n id: \"expander\",\n disableSortBy: true,\n onClickCell: onClickRollupCell\n },\n {\n accessor: \"repository\",\n Cell: ({\n cell\n }: {\n cell: {\n value: string;\n row: { original: PrsByRepositoryRow };\n };\n }) =>\n visibleRepositories?.includes(cell.row.original.repository) ? (\n \n \n \n ) : null,\n className: \"detailsTable\",\n id: \"detailsTable\",\n disableSortBy: true\n }\n ];\n }, [onClickRollupCell, thisTestId, visibleRepositories]);\n\n return (\n \n \n \n );\n};\n\nexport default PRRepositorySummaryList;\n","export default __webpack_public_path__ + \"static/media/no-chart.9ef04f31.png\";","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\nimport { take } from \"lodash\";\n\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\n\nconst StyledSlackAvatar = styled(SlackAvatar)`\n border: ${props => `.2rem solid ${props.theme.colors.border}`};\n border-radius: 50% 50%;\n height: 3rem;\n width: 3rem;\n margin-right: 0.5rem;\n`;\n\nconst UserRow = styled.dd`\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n line-height: 1em;\n margin: 0;\n white-space: break-spaces;\n margin-bottom: 0.5rem;\n`;\n\ntype Props = {\n className?: string;\n testId?: string;\n team: UserReportWithMetadataInterface[];\n userIds: number[];\n rowCount?: number;\n};\n\nconst TeamList = ({\n className,\n testId,\n team,\n userIds,\n rowCount\n}: Props): ReactElement => {\n return (\n \n {take(userIds, rowCount || team.length).map(o => {\n const user = team.find(u => u.id === o);\n\n return (\n !!user && (\n
  • \n \n \n {user.name}\n \n
  • \n )\n );\n })}\n \n );\n};\n\nexport default TeamList;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport ChartCycleTime from \"../ChartCycleTime/ChartCycleTime\";\nimport Icon from \"../Icon/Icon\";\nimport TeamList from \"../TeamList/TeamList\";\n\n// constants\nimport {\n calloutMetadata,\n prActivityStatusLabels,\n prComplexityLevels\n} from \"../../constants/constants\";\n\n// interfaces\nimport { PrWorkflowChartStatusPoint } from \"../../interfaces/charts\";\nimport { WorkItemInterface } from \"../../interfaces/work-items\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\nimport { get, last } from \"lodash\";\n\n// styled components\nconst Container = styled.div`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n width: 40rem;\n display: flex;\n`;\nconst ColWrapper = styled.dl`\n align-items: flex-start;\n display: flex;\n flex-direction: column;\n flex: 1;\n`;\nconst DefinitionWrapper = styled.div`\n align-items: baseline;\n display: flex;\n margin-top: 1rem;\n`;\nconst DefinitionWrapperStacked = styled(DefinitionWrapper)`\n display: block !important;\n`;\nconst Term = styled.dt`\n align-items: baseline;\n display: flex;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n line-height: 1em;\n\n &::after {\n content: \":\";\n display: block;\n margin-right: 0.5em;\n margin-bottom: 0.5rem;\n }\n`;\nconst Definition = styled.dd`\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n line-height: 1em;\n margin: 0;\n white-space: break-spaces;\n margin-bottom: 0.5rem;\n`;\nconst Warning = styled(Icon)`\n height: 1em;\n line-height: 1em;\n margin-right: 0.5em;\n`;\nconst CycleTime = styled(ChartCycleTime)`\n margin: 1rem 0;\n`;\nconst Tickets = styled.ul`\n margin: 1rem 0;\n`;\nconst Callout = styled.li`\n align-items: flex-start;\n display: flex;\n\n & + & {\n margin-top: 0.5rem;\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n point: PrWorkflowChartStatusPoint;\n testId?: string;\n workItems: Array;\n team: UserReportWithMetadataInterface[] | undefined;\n};\n\nconst PrWorkflowChartStatusTooltip = ({\n className,\n point,\n testId = \"testId\",\n workItems,\n team\n}: Props): ReactElement => {\n const thisTestId = `${testId}-pr-workflow-chart-status-tooltip`;\n const invertedWorkItem = workItems.find(w => w.id === point.workItem.id);\n const related = invertedWorkItem?.childWorkItems;\n const status = last(point.workItem.statusHistory)?.status || \"\";\n\n return (\n \n \n \n Status\n {prActivityStatusLabels[status]}\n \n {!!point.workItem.callouts.length ? (\n \n Callouts\n \n
      \n {point.workItem.callouts.map(c => (\n \n \n {calloutMetadata[c]}\n \n ))}\n
    \n
    \n
    \n ) : null}\n \n {!!point.workItem.owners.length && !!team ? (\n <>\n Authored by\n i.uplevelUserId)}\n rowCount={3}\n />\n \n ) : (\n \"There are no assigned contributors\"\n )}\n \n {!!point.workItem.cycleTime ? (\n \n Cycle time\n \n \n \n \n ) : null}\n
    \n \n {!!point.workItem.complexity ? (\n \n Complexity\n \n {get(prComplexityLevels, point.workItem.complexity)}\n \n \n ) : null}\n \n {!!point.workItem.contributors.length && !!team ? (\n \n Reviewers\n i.uplevelUserId)}\n rowCount={3}\n />\n \n ) : null}\n \n {!!related?.length ? (\n \n Related Jira ticket(s)\n \n \n {related.map(w => (\n
  • \n {w.displayId}: {w.name}\n
  • \n ))}\n
    \n
    \n
    \n ) : null}\n
    \n
    \n );\n};\n\nexport default PrWorkflowChartStatusTooltip;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { get, isEmpty, isUndefined } from \"lodash\";\nimport moment from \"moment\";\n\n// components\nimport CrossTeamAvatar from \"../CrossTeamAvatar/CrossTeamAvatar\";\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { PrWorkflowChartActivityPoint } from \"../../interfaces/charts\";\nimport { prActivityStatusLabels } from \"../../constants/constants\";\n\n// styled components\nconst Container = styled.div`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n`;\nconst Header = styled.header`\n margin-bottom: 1em;\n`;\nconst Slack = styled(SlackAvatar)`\n border: ${props => `.2rem solid ${props.theme.colors.border}`};\n border-radius: 50% 50%;\n height: 3rem;\n width: 3rem;\n`;\nconst CrossTeam = styled(CrossTeamAvatar)`\n font-size: 1em;\n`;\nconst Time = styled.time`\n margin-left: 1em;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n point: PrWorkflowChartActivityPoint;\n testId?: string;\n};\n\nconst PrWorkflowChartActivityTooltip = ({\n className,\n point,\n testId = \"testId\"\n}: Props): ReactElement | null => {\n const thisTestId = `${testId}-pr-workflow-chart-activity-tooltip`;\n const { urlParams } = useUrlParams();\n const history = point.history;\n\n if (isUndefined(history)) {\n return null;\n }\n\n const relatedUser = (urlParams.team?.teamMembers || []).find(\n a => a.id === history.userId\n );\n const time = history.activityAt;\n const activity = history.activity;\n\n return (\n \n {!!activity ?
    {prActivityStatusLabels[activity]}
    : null}\n
    \n {!!relatedUser ? (\n \n ) : (\n \n )}\n {!!time ? (\n \n ) : null}\n
    \n
    \n );\n};\n\nexport default PrWorkflowChartActivityTooltip;\n","import React, { ReactElement } from \"react\";\nimport { has } from \"lodash\";\n\n// components\nimport PrWorkflowChartStatusTooltip from \"../PrWorkflowChartStatusTooltip/PrWorkflowChartStatusTooltip\";\n\n// interfaces\nimport {\n PrWorkflowChartActivityPoint,\n PrWorkflowChartStatusPoint\n} from \"../../interfaces/charts\";\nimport PrWorkflowChartActivityTooltip from \"../PrWorkflowChartActivityTooltip/PrWorkflowChartActivityTooltip\";\nimport { WorkItemInterface } from \"../../interfaces/work-items\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\n\n// typescript props\ntype Props = {\n context?: {\n point: PrWorkflowChartStatusPoint | PrWorkflowChartActivityPoint;\n };\n workItems: Array;\n team: UserReportWithMetadataInterface[] | undefined;\n};\n\nconst PrWorkflowChartSeriesTooltip = ({\n context,\n workItems,\n team\n}: Props): ReactElement | null => {\n const thisTestId = \"pr-workflow-chart-series-tooltip\";\n if (!context) {\n return null;\n }\n\n const point = context.point;\n return !!has(point.history, \"status\") ? (\n \n ) : (\n \n );\n};\n\nexport default PrWorkflowChartSeriesTooltip;\n","import { currentTheme } from \"../../themes/currentTheme\";\nimport { orderBy, some, uniqBy } from \"lodash\";\nimport moment from \"moment\";\n\n// interfaces\nimport {\n ActivityHistoryInterface,\n StatusHistoryInterface,\n WorkItemInterface\n} from \"../../interfaces/work-items\";\nimport {\n AxisLabelsFormatterContextObject,\n PointEventsOptionsObject\n} from \"highcharts\";\n\n// constants\nimport {\n chartToolTipConfig,\n cycleTimeStages,\n prActivityStatusTypes,\n timerangeTypes\n} from \"../../constants/constants\";\n\n// utils\nimport { getAdjustedTooltipPosition } from \"../../utils/chart\";\nimport { CycleTimeStageTypes } from \"../../interfaces/constants\";\nconst NUM_VISIBLE = 10;\n// svg in base64, pr-activity-chevron-* in /src/images\nconst chevronApproved =\n \"data:image/svg+xml;base64,PHN2ZwogIHdpZHRoPSIxMiIKICBoZWlnaHQ9IjE0IgogIHZpZXdCb3g9IjAgMCAxMiAxNCIKICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCj4KICA8cGF0aCBkPSJNMCAwSDhMMTIgN0w4IDE0SDBMNCA3TDAgMFoiIGZpbGw9IiMzY2I0NGIiIHN0cm9rZT0iIzExMTExMSIgLz4KPC9zdmc+Cg==\";\nconst chevronCommented =\n \"data:image/svg+xml;base64,PHN2ZwogIHdpZHRoPSIxMiIKICBoZWlnaHQ9IjE0IgogIHZpZXdCb3g9IjAgMCAxMiAxNCIKICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCj4KICA8cGF0aCBkPSJNMCAwSDhMMTIgN0w4IDE0SDBMNCA3TDAgMFoiIGZpbGw9IiNmMDMyZTYiIHN0cm9rZT0iIzExMTExMSIgLz4KPC9zdmc+Cg==\";\nconst chevronUpdate =\n \"data:image/svg+xml;base64,PHN2ZwogIHdpZHRoPSIxMiIKICBoZWlnaHQ9IjE0IgogIHZpZXdCb3g9IjAgMCAxMiAxNCIKICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCj4KICA8cGF0aCBkPSJNMCAwSDhMMTIgN0w4IDE0SDBMNCA3TDAgMFoiIGZpbGw9IiMwMDgwODAiIHN0cm9rZT0iIzExMTExMSIgLz4KPC9zdmc+Cg==\";\n\n// typescript props\ntype Props = {\n data: Array;\n timerangeType: string;\n end: string;\n start: string;\n};\n\ntype PointData = {\n // no need to push a marker or history for the fake termination points\n events?: Record;\n marker?: Record;\n workItem?: WorkItemInterface;\n history?: StatusHistoryInterface | ActivityHistoryInterface;\n x: number;\n y: number;\n color?: string;\n};\n\nconst config = ({\n data,\n end,\n start,\n timerangeType\n}: Props): Record => {\n const startDate = start;\n const endDate = moment.min([moment(end), moment()]).toISOString();\n\n const sortedData = orderBy(data, [\"repository\", \"originBranch\"]);\n const filteredData = sortedData.filter(d => !!d.statusHistory);\n const repos = uniqBy(sortedData, \"repository\").map(d => d.repository);\n const firstChartDateValue = moment(startDate).valueOf();\n const lastChartDateValue = moment(endDate).valueOf();\n const today = moment();\n\n const series = filteredData.map((d, index) => {\n const statusHistory = d.statusHistory as Array;\n const statusHistoryData: Array = statusHistory\n .map(h => {\n const color =\n h.status === prActivityStatusTypes.MERGED\n ? currentTheme.colors.all.nightcrawler\n : h.status === prActivityStatusTypes.WITHDRAWN\n ? currentTheme.colors.all.cyclops\n : currentTheme.colors.chart.cycleTime[\n h.status as keyof CycleTimeStageTypes\n ]?.backgroundColor;\n return {\n // pass along the main data object so it can be accessed from the tooltip\n workItem: d,\n history: h,\n color,\n marker: {\n lineWidth: 0.5,\n lineColor: currentTheme.colors.all.wolverine,\n fillColor:\n // note that we override the release color for the marker\n // since it happens at the end of the release cycle\n h.status === cycleTimeStages.RELEASE\n ? currentTheme.colors.all.thunderbird\n : color\n },\n // datetime axis needs to use epoch milliseconds\n x: moment(h.startAt).valueOf(),\n y: index\n };\n })\n .reverse();\n\n // if pr is still open (ie at least one of the the status history events is\n // not a terminating event), add a fake terminating point at the end date\n // of the chart, otherwise the line won't extend to the right properly\n if (\n !some(\n statusHistory,\n h =>\n h.status === cycleTimeStages.RELEASE ||\n h.status === prActivityStatusTypes.WITHDRAWN\n )\n ) {\n statusHistoryData.push({\n events: {\n mouseOver: function() {\n return false;\n }\n },\n marker: {\n fillColor: \"transparent\"\n },\n // datetime axis needs to use epoch milliseconds\n x: moment(endDate).valueOf(),\n y: index,\n color:\n currentTheme.colors.chart.cycleTime[\n cycleTimeStages.RELEASE as keyof CycleTimeStageTypes\n ]?.backgroundColor\n });\n }\n\n const activityHistoryData: Array = ((d.activityHistory ||\n []) as Array)\n .map(h => ({\n // pass along the main data object so it can be accessed from the tooltip\n workItem: d,\n history: h,\n marker: {\n symbol: `url(${\n h.activity === prActivityStatusTypes.APPROVED\n ? chevronApproved\n : h.activity === prActivityStatusTypes.CHANGES_REQUESTED ||\n h.activity === prActivityStatusTypes.COMMENTED\n ? chevronCommented\n : chevronUpdate\n })`\n },\n // datetime axis needs to use epoch milliseconds\n x: moment(h.activityAt).valueOf(),\n y: index\n }))\n .reverse();\n\n const orderedStatusHistory = statusHistoryData.sort((p1, p2) => {\n if (p1.x === p2.x) {\n if (\n (p1.history as StatusHistoryInterface).status ===\n cycleTimeStages.RELEASE\n )\n return 1;\n if (\n (p2.history as StatusHistoryInterface).status ===\n cycleTimeStages.RELEASE\n )\n return -1;\n }\n return p1.x - p2.x;\n });\n return {\n data: [\n ...orderedStatusHistory,\n ...orderBy(activityHistoryData, [\"x\"], [\"asc\"])\n ],\n zoneAxis: \"x\",\n zones: orderedStatusHistory\n .filter((d, idx) => idx < orderedStatusHistory.length)\n .map((d, idx) => {\n return {\n value: orderedStatusHistory[idx + 1]?.x,\n color: d.color\n };\n })\n };\n });\n\n return {\n chart: {\n height: 600,\n marginLeft: 200,\n marginTop: 25,\n panning: {\n enabled: true,\n type: \"x\"\n },\n panKey: \"shift\",\n style: {\n cursor: \"crosshair\",\n fontFamily: currentTheme.fonts.primary.name,\n fontWeight: currentTheme.fonts.primary.weights.regular\n },\n type: \"spline\",\n zoomType: \"x\"\n },\n legend: {\n enabled: false\n },\n plotOptions: {\n spline: {\n cursor: \"pointer\",\n lineWidth: 3,\n marker: { enabled: true, radius: 8, symbol: \"circle\" },\n states: {\n hover: {\n enabled: false\n },\n inactive: {\n enabled: false\n }\n },\n stickyTracking: false\n }\n },\n time: { useUTC: false },\n title: { text: \"\" },\n xAxis: [\n {\n dateTimeLabelFormats: {\n week: \"%m/%d\",\n day: \"%m/%d\",\n hour: \"%l%P\",\n minute: \"%l:%M%P\"\n },\n endDateOnTick: false,\n gridLineColor: currentTheme.colors.all.jean,\n gridLineWidth: 1,\n labels: {\n // replace today's date with the word \"today\" rather than the default format label\n formatter: function(this: AxisLabelsFormatterContextObject) {\n const defaultLabel = this.axis.defaultLabelFormatter.call(this);\n return today.format(\"MM/DD\") === defaultLabel\n ? '
    today
    '\n : defaultLabel;\n },\n style: {\n color: currentTheme.colors.all.wolverine,\n fontFamily: `${currentTheme.fonts.subheader.name}, monospace`,\n fontSize: currentTheme.fonts.subheader.sizes.sm\n }\n },\n lineColor: currentTheme.colors.all.wolverine,\n lineWidth: 1,\n min: firstChartDateValue,\n max: lastChartDateValue,\n plotLines:\n timerangeType === timerangeTypes.SPRINTS\n ? [\n {\n color: currentTheme.colors.all.wolverine,\n dashStyle: \"shortdash\",\n label: {\n rotation: 0,\n text: \"Sprint Start\",\n verticalAlign: \"top\",\n x: -2,\n y: -10\n },\n value: firstChartDateValue,\n width: 1,\n zIndex: 3\n }\n ]\n : [],\n startDateOnTick: false,\n tickWidth: 0,\n tickmarkPlacement: \"on\",\n type: \"datetime\"\n },\n // second x-axis to make wolverine line at the top of the chart\n {\n lineColor: currentTheme.colors.all.wolverine,\n lineWidth: 1,\n opposite: true\n }\n ],\n yAxis: {\n categories: sortedData.map(\n d => `${d.repository}
    ${d.name}`\n ),\n gridLineWidth: 0,\n labels: {\n align: \"right\",\n style: {\n color: currentTheme.colors.all.wolverine\n }\n },\n // alternate bands of grey/white based on chunked repo indices\n plotBands: sortedData.map((d, index) => {\n const repoIndex = repos.indexOf(d.repository as string);\n return {\n color:\n repoIndex % 2 === 0\n ? currentTheme.colors.all.lightJean\n : currentTheme.colors.all.white,\n from: index - 0.5,\n to: index + 1.5\n };\n }),\n min: 0,\n max: filteredData.length < NUM_VISIBLE ? filteredData.length - 1 : 9,\n reversed: true,\n scrollbar: {\n barBackgroundColor: currentTheme.colors.all.storm,\n barBorderRadius: 10,\n barBorderWidth: 0,\n buttonBackgroundColor: \"transparent\",\n buttonBorderWidth: 0,\n enabled: true,\n minWidth: 3,\n rifleColor: currentTheme.colors.all.storm,\n trackBackgroundColor: currentTheme.colors.all.lightJean,\n trackBorderRadius: 10,\n trackBorderWidth: 0\n },\n tickLength: 0,\n tickmarkPlacement: \"on\",\n title: {\n enabled: false\n }\n },\n tooltip: {\n ...chartToolTipConfig,\n positioner: function(\n w: number,\n h: number,\n point: PointEventsOptionsObject\n ) {\n return getAdjustedTooltipPosition({\n currentPosition: (this as any).getPosition(w, h, point),\n windowScroll: window.scrollY\n });\n }\n },\n series\n };\n};\n\nexport default config;\n","import React, { ReactElement, useMemo } from \"react\";\nimport { currentTheme } from \"../../themes/currentTheme\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Chart from \"../Chart/Chart\";\nimport PrWorkflowChartSeriesTooltip from \"../PrWorkflowChartSeriesTooltip/PrWorkflowChartSeriesTooltip\";\n\n// interfaces\nimport { EpicDetailsInterface } from \"../../interfaces/work-items\";\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\n\n// utils\nimport generateConfig from \"./config\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\n\n// styled components\nconst Container = styled.div`\n & .repository {\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n }\n\n & .todayLabel {\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n data: EpicDetailsInterface;\n testId?: string;\n timerange: TimerangeMetadataInterface;\n team: UserReportWithMetadataInterface[] | undefined;\n};\n\nconst ChartPrWorkflow = ({\n className,\n data,\n testId = \"testId\",\n timerange,\n team\n}: Props): ReactElement => {\n const thisTestId = `${testId}-chart-pr-timeline`;\n const { timerangeType, end, start } = timerange;\n const { workItems } = data;\n const chart = useMemo(() => {\n return {\n config: generateConfig({\n data: workItems,\n timerangeType,\n end,\n start\n }),\n id: \"pr-timeline-chart\"\n };\n }, [end, start, timerangeType, workItems]);\n\n return (\n \n \n }\n />\n \n );\n};\n\nexport default ChartPrWorkflow;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport {\n cycleTimeStages,\n prActivityStatusLabels,\n prActivityStatusTypes\n} from \"../../constants/constants\";\nimport { CycleTimeStageTypes } from \"../../interfaces/constants\";\n\n// components\nimport Icon from \"../Icon/Icon\";\n\n// styled components\nconst Container = styled.div`\n align-items: flex-start;\n display: flex;\n font-size: 1.1rem;\n`;\nconst KeySection = styled.div`\n padding: 0 ${props => props.theme.grid.gap};\n\n & + & {\n border-left: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n }\n\n &:last-child {\n padding: 0 0 0 ${props => props.theme.grid.gap};\n }\n`;\nconst KeyList = styled.ul<{ itemsPerLine: number }>`\n display: grid;\n grid-template-columns: ${props =>\n `repeat(${props.itemsPerLine}, minmax(min-content, auto))`};\n gap: 1rem;\n`;\nconst ChartEvent = styled.li`\n align-items: flex-start;\n display: flex;\n`;\nconst ChartActivity = styled.li`\n align-items: flex-start;\n display: flex;\n`;\nconst Bullet = styled.span<{ type: string }>`\n font-size: ${props => props.theme.fonts.primary.sizes.xl};\n line-height: 1rem;\n color: ${props => {\n switch (props.type) {\n case prActivityStatusTypes.WITHDRAWN:\n return props.theme.colors.all.cyclops;\n case prActivityStatusTypes.MERGED:\n return props.theme.colors.all.nightcrawler;\n case cycleTimeStages.RELEASE:\n return props.theme.colors.all.thunderbird;\n default:\n // case prActivityStatusTypes.OPENED:\n return props.theme.colors.chart.cycleTime[\n props.type as keyof CycleTimeStageTypes\n ].backgroundColor;\n }\n }};\n margin-right: 1rem;\n`;\nconst Chevron = styled(Icon)`\n margin-right: 1rem;\n`;\nconst Instruction = styled.li`\n font-style: italic;\n\n & + & {\n margin-top: 1rem;\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst PrWorkflowChartKey = ({\n className,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-pr-workflow-chart-key`;\n return (\n \n \n
      \n To Zoom: Click and Drag\n To Pan: Press \"Shift\", Click and Drag\n
    \n
    \n \n \n {[\n cycleTimeStages.DEV,\n cycleTimeStages.WAITING_FOR_REVIEW,\n cycleTimeStages.REVIEW,\n prActivityStatusTypes.WITHDRAWN,\n prActivityStatusTypes.MERGED,\n cycleTimeStages.RELEASE\n ].map(t => (\n \n •\n {prActivityStatusLabels[t as string]}\n \n ))}\n \n \n \n \n {[\n prActivityStatusTypes.COMMITS_ADDED,\n prActivityStatusTypes.APPROVED,\n prActivityStatusTypes.COMMENTED\n ].map(t => (\n \n \n {prActivityStatusLabels[t as string]}\n \n ))}\n \n \n
    \n );\n};\n\nexport default PrWorkflowChartKey;\n","// utils\nimport { legacyApi } from \"./api\";\n\nexport const requestCharts = async ({ accessToken, chartNames, tenantId }) => {\n const response = await legacyApi.post(\n `/${tenantId}/charts`,\n JSON.stringify(chartNames),\n {\n headers: { Authorization: `Bearer ${accessToken}` }\n }\n );\n return response.data;\n};\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport noChartImage from \"../ChartImage/no-chart.png\";\n\n// components\nimport ChartPrWorkflow from \"../ChartPrWorkflow/ChartPrWorkflow\";\nimport Image from \"../Image/Image\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport PrWorkflowChartKey from \"../PrWorkflowChartKey/PrWorkflowChartKey\";\n\n// hooks\nimport { useQuery } from \"react-query\";\nimport { useSelector } from \"react-redux\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// utils\nimport { requestCharts } from \"../../utils/file\";\nimport { EpicDetailsInterface } from \"../../interfaces/work-items\";\n\n// styled components\nconst Container = styled.div`\n background: ${props => props.theme.colors.all.white};\n padding: 2rem;\n`;\nconst Caption = styled.figcaption`\n display: none;\n`;\nconst Disclaimer = styled.small`\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n`;\nconst InteractiveChartWrapper = styled.div`\n display: flex;\n flex-flow: column nowrap;\n`;\nconst ChartKey = styled(PrWorkflowChartKey)`\n align-self: flex-end;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n data?: EpicDetailsInterface;\n testId?: string;\n};\n\nconst PrWorkflowChartWrapper = ({\n className,\n data,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-pr-workflow-chart-wrapper`;\n const chartKey = \"PullRequestActivity\";\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const { urlParams } = useUrlParams();\n const activeTeam = urlParams.team;\n const teamMembers = activeTeam?.teamMembers;\n const { data: legacyData, isError, isLoading } = useQuery(\n \"pr-workflow-chart\",\n () =>\n requestCharts({\n accessToken,\n tenantId,\n chartNames: [chartKey]\n }),\n {\n enabled: !!accessToken && !!tenantId && !flags?.[\"pr-workflow\"]\n }\n );\n\n return (\n \n {flags?.[\"pr-workflow\"] ? (\n \n \n \n \n }\n testId={thisTestId}\n />\n ) : (\n <>\n \n This chart is available for your organization team only.\n \n
    \n \n }\n content={\n \n }\n testId={thisTestId}\n />\n Pr Workflow chart\n
    \n \n )}\n
    \n );\n};\n\nexport default PrWorkflowChartWrapper;\n","import React, { useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport EpicFilterDrawerAndTrigger from \"../EpicFilterDrawerAndTrigger/EpicFilterDrawerAndTrigger\";\nimport FilterPills from \"../FilterPills/FilterPills\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport InformationText from \"../../constants/informationText.json\";\nimport { invertPRWorkItems } from \"../../utils/work-items\";\nimport PRRepositorySummaryList from \"../PRRepositorySummaryList/PRRepositorySummaryList\";\nimport PrWorkflowChartWrapper from \"../PrWorkflowChartWrapper/PrWorkflowChartWrapper\";\n\n// hooks\nimport { useWorkItemsData } from \"../../hooks/useWorkItemsData\";\n\n// interfaces\nimport { EpicDetailsInterface } from \"../../interfaces/work-items\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\n\n// styled components\nconst FilterWrapper = styled.div`\n align-items: flex-end;\n display: flex;\n flex-flow: row wrap;\n background: ${props => props.theme.colors.all.white};\n padding-left: 2rem;\n\n & > div,\n > button {\n margin-right: 1rem;\n margin-bottom: 1rem;\n }\n > button:not(:last-child) {\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n }\n`;\nconst StyledFilter = styled(EpicFilterDrawerAndTrigger)`\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n`;\nconst StyledEmptyState = styled(EmptyState)`\n background: ${props => props.theme.colors.all.white};\n padding-top: 5rem;\n padding-bottom: 30rem;\n > div {\n max-width: 50rem;\n }\n text-align: left;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\nexport const PRWorkflow = ({ className, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-pr-workflow`;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const { data, isError, isLoading, isSuccess } = useWorkItemsData({\n canRequest: flags?.[\"pr-workflow\"],\n options: { type: \"pr-workflow\" }\n });\n const hasData = (data as EpicDetailsInterface)?.workItems?.length;\n const parsedData = useMemo(() => {\n if (!!data) {\n return {\n ...data,\n workItems: invertPRWorkItems((data as EpicDetailsInterface).workItems)\n };\n }\n }, [data]);\n\n return (\n
    \n \n \n \n \n \n {hasData ? (\n <>\n \n \n \n ) : (\n \n )}\n \n ) : (\n \n )\n }\n testId={thisTestId}\n />\n
    \n );\n};\n\nexport default PRWorkflow;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// styled components\nconst Container = styled.h2`\n font-family: ${props => props.theme.fonts.header.name}, sans-serif;\n font-size: 2rem;\n font-weight: ${props => props.theme.fonts.header.weights.demiBold};\n margin: 0;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n title: React.ReactNode;\n};\n\nconst PageTitle = ({ className, testId = \"testId\", title }: Props) => {\n const thisTestId = `${testId}-page-title`;\n return (\n \n {title}\n \n );\n};\n\nexport default PageTitle;\n","import { chunk, isEmpty } from \"lodash\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { directionTypes } from \"../../constants/constants\";\n\n// components\nimport Icon from \"../Icon/Icon\";\nimport Stepper from \"../Stepper/Stepper\";\n\n// styled components\nconst List = styled.ul<{ numVisibleItems: number }>`\n display: grid;\n grid-template-columns: repeat(${props => props.numVisibleItems}, 1fr);\n justify-items: center;\n`;\nconst NextArrowWrapper = styled.div`\n padding: 0 0 0 2rem;\n`;\nconst PrevArrowWrapper = styled.div`\n padding: 0 2rem 0 0;\n`;\nconst Arrow = styled(Icon)<{ disabled: boolean }>`\n color: ${props =>\n props.disabled\n ? props.theme.colors.disabled\n : props.theme.colors.stepper.indicators};\n font-size: 2.5rem;\n line-height: 1;\n`;\nconst VisibleItems = styled.div`\n flex: 1;\n padding: 0;\n text-align: center;\n`;\n\nexport const DEFAULT_NUM_VISIBLE_ITEMS = 10;\n\n// typescript props\ntype Props = {\n className?: string;\n activeIndex: number;\n items: Array;\n numVisibleItems?: number;\n testId?: string;\n};\n\nconst PagedStepper = ({\n className,\n activeIndex,\n items,\n numVisibleItems = DEFAULT_NUM_VISIBLE_ITEMS,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-paged-stepper`;\n\n // adding this in case numVisibleItems of 0 is passed for some reason so that\n // we aren't dividing by 0\n const reconciledNumVisibleItems =\n numVisibleItems || DEFAULT_NUM_VISIBLE_ITEMS;\n const chunked: Array> = chunk(\n items,\n reconciledNumVisibleItems\n );\n const [currentVisibleIndex, setCurrentVisibleIndex] = useState(\n Math.floor(activeIndex / reconciledNumVisibleItems)\n );\n const currentChunk = useMemo(() => chunked[currentVisibleIndex], [\n chunked,\n currentVisibleIndex\n ]);\n\n useEffect(() => {\n setCurrentVisibleIndex(Math.floor(activeIndex / reconciledNumVisibleItems));\n }, [activeIndex, reconciledNumVisibleItems]);\n\n function onChange(\n e: React.MouseEvent,\n direction: string\n ) {\n if (direction === directionTypes.PREV) {\n setCurrentVisibleIndex(\n currentVisibleIndex ? currentVisibleIndex - 1 : currentVisibleIndex\n );\n }\n if (direction === directionTypes.NEXT) {\n const updatedIndex = currentVisibleIndex + 1;\n setCurrentVisibleIndex(\n updatedIndex >= chunked.length - 1 ? chunked.length - 1 : updatedIndex\n );\n }\n }\n\n if (isEmpty(items)) {\n return null;\n }\n\n const visibleItems = (\n \n {currentChunk?.map((c, index) => (\n
  • {c}
  • \n ))}\n
    \n );\n const isNextDisabled = currentVisibleIndex >= chunked.length - 1;\n const isPrevDisabled = currentVisibleIndex === 0;\n const displayContent =\n items.length <= reconciledNumVisibleItems ? (\n visibleItems\n ) : (\n {visibleItems}}\n isNextDisabled={isNextDisabled}\n isPrevDisabled={isPrevDisabled}\n nextButton={\n \n \n \n }\n onChange={onChange}\n prevButton={\n \n \n \n }\n testId={thisTestId}\n />\n );\n\n return (\n
    \n {displayContent}\n
    \n );\n};\n\nexport default PagedStepper;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { bgToFgColor } from \"../../utils/color\";\n\n// components\nimport Icon from \"../Icon/Icon\";\n\n// styled components\nconst Container = styled.div<{ bgColor: string }>`\n align-items: center;\n background: ${props => props.bgColor};\n border: ${props => `.2rem solid ${props.theme.colors.all.wolverine}`};\n border-radius: 50%;\n display: flex;\n height: 1em;\n justify-content: center;\n width: 1em;\n padding: 0.25em;\n`;\nconst StyledIcon = styled(Icon)<{ bgColor: string }>`\n color: ${props => bgToFgColor(props.bgColor)};\n font-size: 0.5em;\n\n & svg {\n color: inherit;\n }\n`;\n\n// typescript props\ntype Props = {\n avatarColor: string;\n avatarIcon: string;\n className?: string;\n testId?: string;\n};\n\nconst AvatarIcon = ({\n avatarColor,\n avatarIcon,\n className,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-avatar-icon`;\n return (\n \n \n \n );\n};\n\nexport default AvatarIcon;\n","import { UserInterface } from \"../interfaces/user\";\nimport * as LDClient from \"launchdarkly-js-client-sdk\";\nimport {\n teamDeepDiveSections,\n groupByTypes,\n workDeepDiveSections,\n Signals\n} from \"../constants/constants\";\nimport {\n TeamDeepDiveParams,\n WorkDeepDiveParams,\n UrlParamsInterface\n} from \"../interfaces/url-params\";\n\ntype Props = {\n user: UserInterface;\n flags: LDClient.LDFlagSet;\n teamDeepDiveParams?: TeamDeepDiveParams;\n workDeepDiveParams?: WorkDeepDiveParams;\n urlParams: UrlParamsInterface;\n};\nexport const getSelectableTeamMembers = ({\n user,\n flags,\n teamDeepDiveParams,\n workDeepDiveParams,\n urlParams\n}: Props): Array => {\n if (\n (workDeepDiveParams?.selectedSection ===\n workDeepDiveSections.PROJECT_WORK &&\n urlParams?.groupBy === groupByTypes.USER) ||\n workDeepDiveParams?.selectedSection === workDeepDiveSections.OPS_METRICS\n )\n return [];\n\n if (\n teamDeepDiveParams?.selectedSection ===\n teamDeepDiveSections.PEOPLE_HEALTH &&\n teamDeepDiveParams.selectedMetric === \"OVERALL_TEAM_HEALTH\"\n )\n return [];\n\n return (\n (((teamDeepDiveParams?.selectedSection ===\n teamDeepDiveSections.HEALTH_METRICS &&\n teamDeepDiveParams?.selectedMetric === Signals.ALWAYS_ON) ||\n teamDeepDiveParams?.selectedSection ===\n teamDeepDiveSections.MEETING_INSIGHTS) &&\n // TODO: confirm this is the flag result for the roles set and create flag for more generic use\n !flags?.[\"transparent-data-for-peers\"]\n ? urlParams?.team?.teamMembers\n .filter(u => u.id === user.id)\n .map(u => u.id)\n : urlParams?.team?.teamMembers.map(u => u.id)) || []\n );\n};\n","import React from \"react\";\nimport * as LDClient from \"launchdarkly-js-client-sdk\";\nimport Tooltip from \"../Tooltip/Tooltip\";\nimport { getTeamNameFromTeam, sortTeam } from \"../../utils/teams\";\nimport {\n teamDeepDiveSections,\n pageIds,\n urlParamKeys\n} from \"../../constants/constants\";\nimport { findIndex, get, kebabCase, min } from \"lodash\";\nimport {\n UserInterface,\n UserReportWithMetadataInterface\n} from \"../../interfaces/user\";\nimport PagedStepper, {\n DEFAULT_NUM_VISIBLE_ITEMS\n} from \"../PagedStepper/PagedStepper\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport styled from \"styled-components/macro\";\nimport AvatarIcon from \"../AvatarIcon/AvatarIcon\";\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { getSelectableTeamMembers } from \"../../utils/people-picker\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport InformationText from \"../../constants/informationText.json\";\nimport { useRouteMatch } from \"react-router-dom\";\nimport {\n TeamDeepDiveParams,\n WorkDeepDiveParams,\n UrlParamsInterface\n} from \"../../interfaces/url-params\";\n\nconst AvatarContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n`;\nconst AvatarHoverName = styled.div`\n font-size: 1.2rem;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\n\nconst IconWrapper = styled.button<{ isActive: boolean }>`\n background: none;\n border: 0;\n border-bottom: ${props =>\n `${props.theme.borders.widths.md} solid ${\n props.isActive ? props.theme.colors.all.wolverine : \"transparent\"\n }`};\n padding: 0 0 0.5rem;\n margin-left: 0.25rem;\n`;\nconst TeamIcon = styled(AvatarIcon)<{ enabled: boolean }>`\n font-size: 3rem;\n opacity: ${props => (props.enabled ? 1 : 0.5)};\n`;\nconst StyledSlackAvatar = styled(SlackAvatar)<{ enabled: boolean }>`\n border: ${props => `.2rem solid ${props.theme.colors.border}`};\n border-radius: 50% 50%;\n height: 3rem;\n width: 3rem;\n opacity: ${props => (props.enabled ? 1 : 0.5)};\n`;\n\nconst Stepper = styled(PagedStepper)`\n & ul {\n gap: 0.8rem;\n }\n`;\n\ntype Props = {\n className?: string;\n testId?: string;\n teamAvatarEnabled?: boolean;\n};\n\nconst PeoplePicker = ({\n className,\n testId = \"testId\",\n teamAvatarEnabled = true\n}: Props) => {\n const match = useRouteMatch<{ pageId?: string }>();\n const {\n urlParams,\n updateUrlParams,\n teamDeepDiveParams,\n workDeepDiveParams\n } = useUrlParams();\n const { trackEvent } = useTracking();\n const activeTeam = urlParams.team;\n const user = useSelector((state: AppStateInterface) => get(state, \"user\"));\n const flags = useSelector((state: AppStateInterface) => state.flags);\n let selectableTeamMembersParams: {\n user: UserInterface;\n flags: LDClient.LDFlagSet;\n teamDeepDiveParams?: TeamDeepDiveParams;\n workDeepDiveParams?: WorkDeepDiveParams;\n urlParams: UrlParamsInterface;\n } = {\n user,\n flags,\n urlParams\n };\n if (match.params.pageId === pageIds.WORK_DEEP_DIVE) {\n selectableTeamMembersParams = {\n ...selectableTeamMembersParams,\n workDeepDiveParams\n };\n }\n if (match.params.pageId === pageIds.TEAM_DEEP_DIVE) {\n selectableTeamMembersParams = {\n ...selectableTeamMembersParams,\n teamDeepDiveParams: teamDeepDiveParams\n };\n }\n const selectableTeamMembers = getSelectableTeamMembers(\n selectableTeamMembersParams\n );\n // we are only showing the privacy tooltip on the deep dive page (except with overall health). On the project explorer,\n // the selectable team members is dependent on groupBy, but content does not change, so we\n // do not want to display the privacy tooltip there.\n const showPrivacyTooltip =\n !!teamDeepDiveParams.selectedSection &&\n teamDeepDiveParams.selectedMetric !== \"OVERALL_TEAM_HEALTH\";\n const privacyText = InformationText[\"people-picker-privacy\"];\n const teamInsightDisclaimer = InformationText[\"team-insight-disclaimer\"];\n if (!activeTeam) return null;\n const selectedUser =\n activeTeam?.teamMembers.find(m => m.email === urlParams.selectedUser) ||\n \"team\";\n const foundTeamMemberIndex =\n selectedUser === \"team\"\n ? 0\n : findIndex(\n activeTeam.teamMembers,\n (u: UserReportWithMetadataInterface) => u.id === selectedUser.id\n );\n const setSelectedUser = (updatedSelectedUser: string) => {\n updateUrlParams({\n [urlParamKeys.SELECTED_USER]: updatedSelectedUser\n });\n };\n const activeIndex = foundTeamMemberIndex >= 0 ? foundTeamMemberIndex : 0;\n const handleAvatarClick = (\n e: React.MouseEvent,\n user: UserReportWithMetadataInterface\n ) => {\n if (selectableTeamMembers.includes(user.id)) {\n const isSelectingSameUser = Boolean(\n selectedUser !== \"team\" &&\n selectedUser.id === user.id &&\n teamAvatarEnabled\n ).valueOf();\n const selectedASpecificPerson = isSelectingSameUser\n ? false\n : Boolean(user).valueOf() && Boolean(user.id).valueOf();\n const whoClicked = selectedASpecificPerson ? user.id.toString() : \"team\";\n\n trackEvent({\n e,\n label: `people-picker-avatar`,\n value: `clicked ${whoClicked}`\n });\n\n e.preventDefault();\n setSelectedUser(selectedASpecificPerson ? user.email : \"team\");\n }\n };\n const onClickTeam = (e: React.MouseEvent) => {\n if (teamAvatarEnabled) {\n trackEvent({\n e,\n label: `people-picker-avatar`,\n value: `clicked the team avatar`\n });\n\n e.preventDefault();\n selectedUser !== \"team\" && setSelectedUser(\"team\");\n }\n };\n\n const peopleAvatars = sortTeam(activeTeam.teamMembers, user).map(\n (t: UserReportWithMetadataInterface): JSX.Element => {\n const personIsEnabled = selectableTeamMembers.includes(t.id);\n return (\n <>\n \n {personIsEnabled\n ? t.name\n : showPrivacyTooltip\n ? privacyText\n : teamInsightDisclaimer}\n \n }\n trigger={\n ) =>\n handleAvatarClick(e, t)\n }\n key={t.id}\n isActive={\n selectedUser !== \"team\" &&\n selectedUser.id === t.id &&\n personIsEnabled\n }\n >\n \n \n }\n testId={`people-picker-${kebabCase(t.name)}`}\n />\n \n );\n }\n );\n\n const avatarList = [\n \n {teamAvatarEnabled || !showPrivacyTooltip\n ? getTeamNameFromTeam(activeTeam)\n : privacyText}\n \n }\n trigger={\n onClickTeam(e)}\n isActive={selectedUser === \"team\" && teamAvatarEnabled}\n key={activeTeam.teamId}\n data-testid=\"team-select-button\"\n >\n \n \n }\n testId={`${pageIds.TEAM_DEEP_DIVE}-${kebabCase(\n getTeamNameFromTeam(activeTeam)\n )}`}\n />,\n ...peopleAvatars\n ];\n\n return (\n \n \n \n );\n};\n\nexport default PeoplePicker;\n","import { get, isEmpty, isEqual, isFinite, max } from \"lodash\";\nimport { formatTimestamp } from \"../../utils/date\";\nimport {\n getPrCadenceTooltip,\n getAdjustedTooltipPosition\n} from \"../../utils/chart\";\n\nexport default ({ data, onClickSeries, selectedDateRange, theme }) => {\n const chartColors = theme.colors.chart.prCadence;\n const { groupedRows, weekRanges } = data;\n\n let series = [];\n let yAxisMax;\n\n if (!isEmpty(groupedRows)) {\n const events = {\n select: function(event) {\n event.preventDefault();\n const { target } = event;\n onClickSeries(target.category);\n },\n unselect: function(event) {\n event.preventDefault();\n onClickSeries(null);\n }\n };\n\n const columnData = weekRanges.map((r, index) => {\n return {\n x: index,\n y: groupedRows?.[`${r.start}`]?.numMerged || null,\n selected: isEqual(r, selectedDateRange)\n };\n });\n const lineData = weekRanges.map((r, index) => {\n const result = get(groupedRows, `${r.start}`, {});\n return {\n x: index,\n // using isFinite because median could be 0\n y: isFinite(result.medianReviewTimeInHours)\n ? result.medianReviewTimeInHours\n : null,\n selected: isEqual(r, selectedDateRange)\n };\n });\n\n series = [\n {\n allowPointSelect: true,\n name: \"Number of PR's Merged\",\n type: \"column\",\n data: columnData,\n point: {\n events\n }\n },\n {\n allowPointSelect: true,\n cursor: \"pointer\",\n name: \"Median Review Time (hrs)\",\n color: chartColors.marker.fill,\n marker: {\n fillColor: chartColors.marker.fill,\n lineColor: chartColors.marker.fill\n },\n type: \"line\",\n yAxis: 1,\n data: lineData,\n point: {\n events\n }\n }\n ];\n\n yAxisMax = max([...columnData, ...lineData].map(d => d.y));\n }\n\n return {\n chart: {\n zoomType: \"xy\",\n style: {\n fontFamily: theme.fonts.subheader.name,\n fontSize: 15\n }\n },\n title: {\n text: \"\"\n },\n xAxis: [\n {\n categories: weekRanges,\n tickWidth: 3,\n tickmarkPlacement: \"on\",\n labels: {\n y: 30,\n fontFamily: theme.fonts.subheader.name,\n formatter: function() {\n return `${formatTimestamp({\n format: \"M/D\",\n timestamp: this.value.start\n })}-${formatTimestamp({\n format: \"M/D\",\n timestamp: this.value.end\n })}`;\n }\n },\n min: -0.5,\n max: 5.5\n }\n ],\n yAxis: [\n {\n max: yAxisMax,\n gridLineWidth: 3,\n title: {\n text: \"Number of PRs Merged\",\n style: {\n fontFamily: theme.fonts.primary.name,\n fontWeight: theme.fonts.primary.weights.book,\n color: theme.colors.all.wolverine\n }\n }\n },\n {\n max: yAxisMax,\n gridLineWidth: 3,\n title: {\n text: \"Median Review Time (hrs)\",\n style: {\n fontFamily: theme.fonts.primary.name,\n fontWeight: theme.fonts.primary.weights.book,\n color: theme.colors.all.wolverine\n }\n },\n opposite: true\n }\n ],\n legend: {\n align: \"right\",\n enabled: true,\n itemDistance: 30,\n itemStyle: {\n fontFamily: theme.fonts.primary.name,\n fontWeight: theme.fonts.primary.weights.book\n },\n layout: \"horizontal\",\n verticalAlign: \"bottom\",\n width: 0,\n symbolHeight: 8,\n symbolWidth: 8,\n symbolPadding: 8,\n // a bit odd, but radius here implicitly applies to just column type series and not line series\n symbolRadius: 0\n },\n tooltip: {\n shared: true,\n enabled: true,\n useHTML: true,\n backgroundColor: null,\n shadow: false,\n borderWidth: 0,\n borderRadius: 0,\n outside: true,\n positioner: function(w, h, point) {\n return getAdjustedTooltipPosition({\n currentPosition: this.getPosition(w, h, point),\n windowScroll: window.scrollY\n });\n },\n formatter: function() {\n return getPrCadenceTooltip(this.points);\n }\n },\n plotOptions: {\n line: {\n connectNulls: true,\n marker: {\n symbol: \"circle\"\n },\n states: {\n hover: {\n opacity: theme.charts.series.opacity.full,\n lineWidth: \"4px\",\n lineWidthPlus: 0\n },\n inactive: {\n animation: {\n duration: 0\n }\n }\n }\n },\n column: {\n color: chartColors.column.fill,\n pointPlacement: \"on\",\n maxPointWidth: 20,\n states: {\n hover: {\n enabled: false\n },\n select: {\n borderColor: chartColors.column.stroke,\n color: chartColors.column.fill\n }\n }\n },\n series: {\n pointPlacement: \"on\",\n point: {\n events: {\n select: function() {\n onClickSeries(this.category);\n }\n }\n },\n marker: {\n states: {\n select: {\n fillColor: chartColors.marker.fill,\n lineColor: chartColors.marker.stroke\n }\n }\n }\n }\n },\n series\n };\n};\n","import React, { useMemo } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { withTheme } from \"styled-components/macro\";\n\n// components\nimport Chart from \"../Chart/Chart\";\n\n// config\nimport generateConfig from \"./config\";\n\n// exporting for targeting in tests\nexport const ChartPrCadence = ({\n className,\n data = {},\n isFetchingData = false,\n onClickSeries = () => {\n // do nothing\n },\n selectedDateRange,\n testId = \"testId\",\n theme\n}) => {\n const configParams = useMemo(() => {\n return {\n data,\n onClickSeries,\n selectedDateRange,\n theme\n };\n }, [data, onClickSeries, selectedDateRange, theme]);\n\n return (\n \n );\n};\n\nChartPrCadence.propTypes = {\n data: PropTypes.array,\n isFetchingData: PropTypes.bool,\n onClickSeries: PropTypes.func.isRequired,\n selectedDateRange: PropTypes.object,\n testId: PropTypes.string,\n theme: PropTypes.object.isRequired\n};\n\nexport default withTheme(ChartPrCadence);\n","import React, { useEffect, useRef, useState } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// styled components\nconst Container = styled.div`\n max-height: 30rem;\n overflow: auto;\n`;\n\n// typescript props\ntype Props = {\n children: React.ReactNode;\n className?: string;\n resetTrigger: any;\n testId?: string;\n};\n\nconst ScrollContainerWithReset = ({\n children,\n className,\n resetTrigger,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-scroll-container-with-reset`;\n const containerRef = useRef(null);\n const [isScrolled, setIsScrolled] = useState(false);\n useEffect(() => {\n if (isScrolled && containerRef.current !== null) {\n containerRef.current.scrollTop = 0;\n setIsScrolled(false);\n }\n }, [resetTrigger]);\n\n return (\n setIsScrolled(true)}\n className={className}\n data-testid={thisTestId}\n >\n {children}\n \n );\n};\n\nexport default ScrollContainerWithReset;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, kebabCase, sortBy, truncate, isNull, isNil } from \"lodash\";\n\n// components\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport HtmlText from \"../HtmlText/HtmlText\";\nimport ScrollContainerWithReset from \"../ScrollContainerWithReset/ScrollContainerWithReset\";\nimport Table from \"../Table/Table\";\nimport Time from \"../Time/Time\";\nimport Tooltip from \"../Tooltip/Tooltip\";\n\n// constants\nimport { STRING_TRUNCATION_LENGTH } from \"../../constants/components\";\n\n// styled components\nconst Container = styled.div`\n font-family: ${props => props.theme.fonts.primary.name}, monospace;\n`;\nconst StyledTable = styled(Table)`\n width: 100%;\n\n & th.title {\n width: 25%;\n }\n`;\nconst StyledHeader = styled.header`\n align-items: center;\n border-bottom: ${props =>\n `${props.theme.borders.widths.md} solid ${props.theme.colors.border}`};\n display: flex;\n justify-content: space-between;\n margin-bottom: 2rem;\n padding-bottom: 1rem;\n`;\nconst PopupContent = styled.div`\n max-width: 20rem;\n`;\n\nconst PrCadenceList = ({\n className,\n list = [],\n selectedDateRange,\n testId = \"testId\",\n ...otherProps\n}) => {\n const thisTestId = `${testId}-pr-cadence-list`;\n\n let columns = [\n {\n accessor: \"mergedDtm\",\n Header: \"Merge date\",\n Cell: ({ cell }) => (\n \n ),\n filter: (rows, id, filterType) =>\n rows.filter(row => row.values[id] === filterType),\n className: \"mergeDate\"\n },\n {\n accessor: \"prTitle\",\n Header: \"Title\",\n Cell: ({ cell }) => {\n let displayTitle = truncate(cell.value, {\n length: STRING_TRUNCATION_LENGTH\n });\n const titleIsTruncated = cell.value.length > STRING_TRUNCATION_LENGTH;\n\n displayTitle = (\n \n {cell.row.original.prUrl ? (\n \n {displayTitle}\n \n ) : (\n {displayTitle}\n )}\n \n );\n\n return titleIsTruncated ? (\n {cell.value}}\n testId={testId}\n trigger={displayTitle}\n />\n ) : (\n displayTitle\n );\n },\n className: \"title\"\n },\n {\n accessor: \"branch\",\n Header: \"Branch\",\n Cell: ({ cell }) => (\n \n \n \n ),\n className: \"branch\"\n },\n {\n accessor: \"authorName\",\n Header: \"Author\",\n Cell: ({ cell }) => (\n {cell.value}\n ),\n className: \"authorName\"\n },\n {\n accessor: \"reviewers\",\n Header: \"Reviewers\",\n Cell: ({ cell }) => (\n \n {isNull(cell.row.original.reviewerNames)\n ? \"\"\n : cell.row.original.reviewerNames.join(\", \")}\n \n ),\n className: \"reviewers\"\n },\n {\n accessor: \"reviewTimeHours\",\n Header: \"Review Time\",\n className: \"reviewTime\",\n Cell: ({ cell }) =>\n isNil(cell.value) ? null : (\n <>\n {cell.value.toFixed(1)} {cell.value === 1 ? \"hr\" : \"hrs\"}\n \n )\n },\n {\n accessor: \"repository\",\n Header: \"Repo\",\n Cell: ({ cell }) => {\n return (\n \n {cell.row.original.repositoryUrl ? (\n \n {cell.value}\n \n ) : (\n {cell.value}\n )}\n \n );\n },\n className: \"repository\"\n }\n ];\n\n // constructing a string version for the accessor for proper sorting\n const data = sortBy(\n list.map(l => ({\n ...l,\n reviewers: isNull(l.reviewerNames) ? \"\" : l.reviewerNames.join(\", \")\n })),\n [\"mergedDtm\"]\n );\n\n return (\n \n {isEmpty(list) ? (\n \n It looks like we don’t have data for this team.{\" \"}\n Contact us if this is\n a mistake and we’ll get this fixed.\n \n }\n header=\"Uh oh.\"\n testId={thisTestId}\n />\n ) : (\n <>\n \n
    PRs
    \n
    \n \n \n \n \n )}\n
    \n );\n};\n\nPrCadenceList.propTypes = {\n className: PropTypes.string,\n list: PropTypes.array,\n selectedDateRange: PropTypes.shape({\n start: PropTypes.string.isRequired,\n end: PropTypes.string.isRequired\n }),\n testId: PropTypes.string.isRequired\n};\n\nexport default PrCadenceList;\n","import { captureException } from \"@sentry/react\";\nimport api from \"./api\";\n\nexport const requestPrCadence = async ({ accessToken, params, tenantId }) => {\n if (\n !(\"users\" in params) ||\n !(\"startDate\" in params) ||\n !(\"endDate\" in params) ||\n !Array.isArray(params.users)\n ) {\n return captureException(\n `Expected params with keys of \"users\" as value type String[], \"startDate\" as String, and \"endDate\" as value type String, but received ${JSON.stringify(\n params\n )}`\n );\n }\n const response = await api.post(`/${tenantId}/prcadence`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const requestPrCadence_privateic = async ({\n accessToken,\n params,\n tenantId\n}) => {\n if (\n !(\"startDate\" in params) ||\n !(\"endDate\" in params) ||\n !(\"userEmail\" in params)\n ) {\n return captureException(\n `Expected params with keys of \"userEmail\", \"startDate\" and \"endDate\" as String, but received ${JSON.stringify(\n params\n )}`\n );\n }\n const response = await api.post(`/${tenantId}/private-ic/prcadence`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport moment from \"moment\";\nimport { times } from \"lodash\";\n\n// utils\nimport parseData from \"./parser\";\nimport { getTimestampForDate } from \"../../utils/date\";\n\n// constants\nimport { DEFAULT_NUM_WEEKS_DATA_RANGE } from \"../../constants/components\";\nimport { momentUnitTypes } from \"../../constants/date\";\nimport { requestPrCadence } from \"../../utils/pr-cadence\";\nimport { getChartTimerangesForBoardAndTimerange } from \"../../utils/date\";\nimport { captureException, withScope } from \"@sentry/react\";\n\nexport const useBackingData = (\n manualState,\n accessToken,\n tenantId,\n user,\n teamMembers,\n board,\n timerange\n) => {\n const [data, _setData] = useState([]);\n // set the start date as the beginning of the current week\n // minus DEFAULT_NUM_WEEKS_DATA_RANGE - 1 weeks, eg 12 weeks ago\n const [defaultStartDate] = useState(\n getTimestampForDate(\n moment(new Date())\n .startOf(momentUnitTypes.WEEKS)\n .subtract(DEFAULT_NUM_WEEKS_DATA_RANGE - 1, momentUnitTypes.WEEKS)\n )\n );\n // create array of start/end timestamps for the range of weeks covering the fetched data.\n // using state here to it can be passed to useEffect without infinite looping.\n const [defaultWeekRanges] = useState(\n times(DEFAULT_NUM_WEEKS_DATA_RANGE, i => {\n return {\n start: moment(defaultStartDate)\n .add(i, momentUnitTypes.WEEKS)\n .toISOString(),\n end: moment(defaultStartDate)\n .add(i, momentUnitTypes.WEEKS)\n .endOf(momentUnitTypes.WEEKS)\n .toISOString()\n };\n })\n );\n const weekRanges = useMemo(() => {\n return !!timerange\n ? getChartTimerangesForBoardAndTimerange(timerange, board)\n : defaultWeekRanges;\n }, [board, timerange, defaultWeekRanges]);\n const [isFetchingData, _setIsFetchingData] = useState(null);\n const [error, _setError] = useState(null);\n const requestProps = useMemo(() => {\n return {\n accessToken,\n endDate: weekRanges\n .map(w => w.end)\n .sort()\n .reverse()[0],\n startDate: weekRanges.map(w => w.start).sort()[0],\n tenantId,\n user,\n users: teamMembers?.map(t => t.email)\n };\n }, [accessToken, user, tenantId, teamMembers, weekRanges]);\n\n // effect to fetch data when the request props change\n useEffect(() => {\n (async () => {\n if (manualState) {\n _setIsFetchingData(false);\n _setData(manualState);\n } else {\n try {\n if (!error) {\n _setIsFetchingData(true);\n const responseData = await requestPrCadence({\n accessToken: requestProps.accessToken,\n tenantId: requestProps.tenantId,\n params: {\n tenantId: requestProps.tenantId,\n startDate: requestProps.startDate,\n endDate: requestProps.endDate,\n users: requestProps.users\n }\n });\n const parsedData = parseData(responseData, weekRanges);\n _setData(parsedData);\n _setIsFetchingData(false);\n }\n } catch (e) {\n _setError(e);\n _setIsFetchingData(false);\n withScope(scope => {\n scope.setContext(\"request-pr-cadence\", requestProps);\n captureException(e);\n });\n }\n }\n })();\n }, [manualState, weekRanges, requestProps, error]);\n\n return [data, isFetchingData, error];\n};\n","import { groupBy, mapValues } from \"lodash\";\n\nexport default (data, weekRanges) => {\n const groupedRows = groupBy(\n data.rows,\n d =>\n weekRanges.find(w => w.start <= d.mergedDtm && w.end > d.mergedDtm)?.start\n );\n return {\n ...data,\n groupedRows: mapValues(groupedRows, prs => {\n const sorted = prs.sort((p1, p2) =>\n (p1.mergedDtm || \"\").localeCompare(p2.mergedDtm)\n );\n const reviewTimesSorted = prs\n .map(pr => pr.reviewTimeHours)\n .filter(m => !!m)\n .sort((a, b) => a - b);\n\n const medianIndex = Math.floor(reviewTimesSorted.length / 2);\n const medianReviewTimeHours = !reviewTimesSorted.length\n ? 0\n : reviewTimesSorted.length % 2 === 0\n ? (reviewTimesSorted[medianIndex - 1] +\n reviewTimesSorted[medianIndex]) /\n 2.0\n : reviewTimesSorted[medianIndex];\n\n return {\n medianReviewTimeInHours: medianReviewTimeHours,\n numMerged: prs.length,\n prs: sorted\n };\n }),\n weekRanges\n };\n};\n","import { snakeCase } from \"lodash\";\nimport { z } from \"zod\";\nimport { zLegacyRoles, zLegacyRolesSnakeCase } from \"../interfaces/zod-schema\";\n\nexport const legacyRoles = [\n // Uplevel\n \"admin\",\n // For ICs, and M1s with small teams. They should only see results about themselves.\n \"self\",\n // For M2s who don't also have a big team of ICs directly reporting to them. They should see content about themselves, and a rollup of their M1s (who have enough directs to receive team results)\n \"self-rollup\",\n \"self-smallteam\",\n \"self-smallteam-rollup\",\n \"self-smallteam-rollup-exec\",\n // For M1s with 5+ IC engineers in their team. Should get results about themselves, and about their team\n \"self-team\",\n // For M2s who also have a big team of ICs directly reporting to them.\n \"self-team-rollup\",\n // For users where we just want to show team rather than IC view.\n \"team\",\n // For individual ICs\n \"ic\",\n // For individual ICs who can only see their own data, not other team members.\n \"privateic\",\n \"privateic-exec\"\n] as const;\n\nexport const legacyRolesSnakeCase = [\n \"admin\",\n \"self\",\n \"self_rollup\",\n \"self_smallteam\",\n \"self_smallteam_rollup\",\n \"self_smallteam_rollup_exec\",\n \"self_team\",\n \"self_team_rollup\",\n \"team\",\n \"ic\",\n \"privateic\",\n \"privateic_exec\"\n] as const;\n\nexport const legacyRoleTypes = legacyRoles.reduce(\n (acc, current) => ({\n ...acc,\n [snakeCase(current).toUpperCase()]: current\n }),\n {} as { [key: string]: z.infer }\n);\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\nimport { flatten, isEmpty, isNull } from \"lodash\";\n\n// components\nimport ChartPrCadence from \"../ChartPrCadence/ChartPrCadence\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport PrCadenceList from \"../PrCadenceList/PrCadenceList\";\nimport Spinner from \"../Spinner/Spinner\";\n\n// utils\nimport { useBackingData } from \"./useBackingData\";\nimport { legacyRoleTypes } from \"../../constants/users\";\n\n// styled components\nconst SpinnerWrapper = styled.div`\n align-items: center;\n display: flex;\n flex-flow: column nowrap;\n justify-content: center;\n min-height: 30rem;\n width: 100%;\n background-color: ${props => props.theme.colors.all.white};\n`;\nconst Figure = styled.figure`\n margin-bottom: 3rem;\n width: 100%;\n`;\n\nconst PrCadenceChartWrapper = ({ testId = \"testId\", ...props }) => {\n const {\n className,\n accessToken,\n tenantId,\n manualState,\n user,\n teamMembers,\n board,\n timerange\n } = props;\n const thisTestId = `${testId}-pr-cadence-chart-wrapper`;\n const [selectedDateRange, setSelectedDateRange] = useState();\n const [prCadenceData, isFetchingData, error] = useBackingData(\n manualState,\n accessToken,\n tenantId,\n user,\n teamMembers,\n board,\n timerange\n );\n\n if (error) {\n return null;\n }\n\n // initial value of isFetchingData. After initial render, isFetchingData spinner\n // will be displayed as part of chart.\n if (isNull(isFetchingData) || isFetchingData) {\n return (\n \n \n \n );\n }\n\n const dataIsEmpty = isEmpty(prCadenceData.rows);\n\n let prList = [];\n if (!dataIsEmpty) {\n prList = selectedDateRange\n ? prCadenceData.groupedRows[selectedDateRange.start].prs\n : flatten(Object.values(prCadenceData.groupedRows).map(r => r.prs));\n }\n\n // we use the same component for both the ic private and team widgets. The data fetcher\n // uses this role check to determine as well\n const emptyStateRole =\n user.enabled_roles.includes(legacyRoleTypes.PRIVATEIC) ||\n user.enabled_roles.includes(legacyRoleTypes.PRIVATEIC_EXEC)\n ? \"You don't\"\n : \"Your team doesn't\";\n\n return (\n
    \n {dataIsEmpty ? (\n \n ) : (\n <>\n
    \n \n
    PR Cadence chart
    \n
    \n {/* todo: add this back when we get final data shape */}\n \n \n )}\n
    \n );\n};\n\nPrCadenceChartWrapper.propTypes = {\n accessToken: PropTypes.string.isRequired,\n className: PropTypes.string,\n tenantId: PropTypes.number.isRequired,\n testId: PropTypes.string.isRequired,\n user: PropTypes.object.isRequired,\n board: PropTypes.object,\n timerange: PropTypes.object\n};\n\nexport default PrCadenceChartWrapper;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isUndefined, snakeCase } from \"lodash\";\n\n// components\nimport WorkMetadataIcon from \"../WorkMetadataIcon/WorkMetadataIcon\";\n\n// interfaces\nimport { ActivityInterface } from \"../../interfaces/work-items\";\n\n// constants\nimport { workMetadataActivityTypes } from \"../../constants/constants\";\nimport StoryPoints from \"../StoryPoints/StoryPoints\";\n\n// styled components\nconst List = styled.ul`\n display: grid;\n gap: 0.5rem;\n grid-template-columns: repeat(4, 8rem);\n justify-items: start;\n justify-content: space-between;\n`;\nconst ListItem = styled.li`\n align-items: center;\n display: grid;\n gap: 0.5rem;\n grid-template-columns: repeat(3, 1fr);\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n align-items: center;\n justify-content: center;\n`;\nconst Score = styled.span`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n activities: Array;\n testId?: string;\n};\n\nconst WorkMetadataActivities = ({\n className,\n activities,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-work-metadata-activities`;\n\n return (\n
    \n \n {[\n workMetadataActivityTypes.ISSUE,\n workMetadataActivityTypes.SUB_TASK,\n workMetadataActivityTypes.BUG,\n workMetadataActivityTypes.PR\n ].map((activityType: string) => {\n const activity = activities.find(\n a => snakeCase(a.activityType).toUpperCase() === activityType\n );\n return (\n \n {isUndefined(activity) ? null : (\n <>\n \n {activity.count}\n \n \n )}\n \n );\n })}\n \n
    \n );\n};\n\nexport default WorkMetadataActivities;\n","export default __webpack_public_path__ + \"static/media/chevron.26f7a16c.svg\";","import React, { useState, useRef, useEffect } from \"react\";\nimport styled from \"styled-components/macro\";\nimport chevron from \"../../images/chevron.svg\";\n\n// components\nimport Tooltip from \"../Tooltip/Tooltip\";\n\n// interfaces\nimport { GroupInterface } from \"../../interfaces/work-items\";\nimport {\n reservedEpicsMetadata,\n reservedEpics\n} from \"../../constants/constants\";\n\n// styled components\nconst Container = styled.div`\n cursor: pointer;\n`;\nconst ChevronContainer = styled.div`\n background-color: ${props => props.theme.colors.all.white};\n`;\nconst MinHeightWrapper = styled.div`\n background-image: url(${chevron});\n background-position: 100% 50%;\n background-repeat: no-repeat;\n padding-right: 4rem;\n align-items: center;\n display: flex;\n height: 7rem;\n padding-left: 2rem;\n`;\nconst EpicId = styled.h4`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n font-size: 1.1rem;\n line-height: 1.8rem;\n margin-bottom: 0;\n text-transform: uppercase;\n`;\nconst EpicName = styled.h3`\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin: 0;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n`;\nconst StyledTooltip = styled(Tooltip)`\n line-height: 1;\n`;\nconst PopupContent = styled.div`\n max-width: 20rem;\n word-wrap: anywhere;\n overflow-wrap: anywhere;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n metadata: GroupInterface;\n testId?: string;\n};\n\nconst WorkMetadataEpic = ({\n className,\n metadata,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-work-metadata-epic`;\n\n // create an element ref to track the text content width for the title\n const textElementRef = useRef(null);\n\n // state to track whether a tooltip should appear on hover\n const [hoverStatus, setHover] = useState(false);\n\n // event to compare whether the text content is \"overflowing\" its container\n const compareSize = () => {\n const compare =\n textElementRef?.current && textElementRef?.current?.parentElement\n ? textElementRef.current?.scrollWidth >=\n textElementRef.current?.parentElement?.scrollWidth\n : false;\n setHover(compare);\n };\n\n // compare once and add resize listener on \"componentDidMount\" effect\n useEffect(() => {\n compareSize();\n window.addEventListener(\"resize\", compareSize);\n }, []);\n\n // remove resize listener again on \"componentWillUnmount\" effect\n useEffect(\n () => () => {\n window.removeEventListener(\"resize\", compareSize);\n },\n []\n );\n\n const { groupDisplayId, groupName, magicRow } = metadata;\n\n const displayGroupName = (\n \n {magicRow === reservedEpicsMetadata[reservedEpics.UNLINKED_PRS].magicRowId\n ? reservedEpicsMetadata[reservedEpics.UNLINKED_PRS].title\n : magicRow === reservedEpicsMetadata[reservedEpics.NO_EPIC].magicRowId\n ? reservedEpicsMetadata[reservedEpics.NO_EPIC].title\n : groupName}\n \n );\n\n return (\n \n \n \n
    \n {groupDisplayId && {groupDisplayId}}\n {hoverStatus ? (\n {groupName}}\n testId={thisTestId}\n trigger={displayGroupName}\n />\n ) : (\n displayGroupName\n )}\n
    \n
    \n
    \n \n );\n};\n\nexport default WorkMetadataEpic;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport RouteLink from \"../RouteLink/RouteLink\";\n\nimport WorkMetadataActivities from \"../WorkMetadataActivities/WorkMetadataActivities\";\nimport WorkMetadataEpic from \"../WorkMetadataEpic/WorkMetadataEpic\";\nimport WorkMetadataTeamList from \"../WorkMetadataTeamList/WorkMetadataTeamList\";\n\n// constants\nimport {\n reservedEpics,\n reservedEpicsMetadata\n} from \"../../constants/constants\";\n\n// interfaces\nimport { GroupInterface } from \"../../interfaces/work-items\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// styled components\nconst Link = styled(RouteLink)`\n display: block;\n && {\n color: ${props => props.theme.colors.all.wolverine};\n &:hover {\n text-decoration: none;\n }\n }\n`;\nconst Container = styled.div`\n background: ${props => props.theme.colors.all.white};\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n display: block;\n\n @media (min-width: ${props => props.theme.breakpoints.lg}) {\n display: grid;\n grid-template-columns: ${props =>\n `minmax(calc(2 * (${props.theme.grid.columnWidth} + ${props.theme.grid.gap})), 1fr)\n minmax(calc(3 * (${props.theme.grid.columnWidth} + ${props.theme.grid.gap}) + ${props.theme.grid.columnWidth}), 1fr)\n 1fr\n 1fr`};\n }\n`;\nconst MetadataWrapper = styled.div`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n padding: 0.5rem;\n\n @media (min-width: ${props => props.theme.breakpoints.xxl}) {\n padding: 0 0.75rem;\n }\n`;\nconst MetadataHeader = styled.header`\n font-family: ${props => props.theme.fonts.primary.name}, sans-serif;\n font-size: 1.1rem;\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n margin-right: 1.5rem;\n margin-left: 1.5rem;\n\n @media (min-width: ${props => props.theme.breakpoints.lg}) {\n display: none;\n }\n`;\nconst ActivitiesWrapper = styled(MetadataWrapper)`\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n\n @media (min-width: ${props => props.theme.breakpoints.lg}) {\n border-right: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n border-top: 0;\n justify-content: center;\n }\n`;\nconst OwnersWrapper = styled(MetadataWrapper)`\n @media (min-width: ${props => props.theme.breakpoints.lg}) {\n border-right: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n metadata: GroupInterface;\n testId?: string;\n};\n\nconst WorkMetadata = ({ className, metadata, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-work-metadata`;\n const { groupId, magicRow } = metadata;\n const { getWorkDeepDivePath } = useUrlParams();\n const groupPath = getWorkDeepDivePath({\n groupId:\n magicRow === reservedEpicsMetadata[reservedEpics.UNLINKED_PRS].magicRowId\n ? reservedEpics.UNLINKED_PRS\n : magicRow === reservedEpicsMetadata[reservedEpics.NO_EPIC].magicRowId\n ? reservedEpics.NO_EPIC\n : groupId\n });\n\n return (\n \n \n \n \n Activities\n \n \n \n Owners\n \n \n \n Contributors\n \n \n \n \n );\n};\n\nexport default WorkMetadata;\n","import { kebabCase } from \"lodash\";\nimport React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport WorkMetadata from \"../WorkMetadata/WorkMetadata\";\n\n// interfaces\nimport { GroupInterface } from \"../../interfaces/work-items\";\n\n// styled components\nconst ListHeader = styled.header`\n font-family: ${props => props.theme.fonts.primary.name}, sans-serif;\n font-size: 1.1rem;\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n margin-bottom: 1rem;\n`;\nconst ColHeaders = styled.ul`\n display: none;\n\n @media (min-width: ${props => props.theme.breakpoints.lg}) {\n align-items: end;\n display: grid;\n grid-template-columns: ${props =>\n `minmax(calc(2 * (${props.theme.grid.columnWidth} + ${props.theme.grid.gap})), 1fr)\n minmax(calc(3 * (${props.theme.grid.columnWidth} + ${props.theme.grid.gap}) + ${props.theme.grid.columnWidth}), 1fr)\n 1fr\n 1fr`};\n justify-items: center;\n word-break: break-word;\n }\n`;\nconst ColHeader = styled.li`\n display: flex;\n justify-content: center;\n justify-self: center;\n\n @media (min-width: ${props => props.theme.breakpoints.lg}) {\n text-align: center;\n }\n`;\nconst Metadata = styled(WorkMetadata)`\n & + & {\n margin-top: 0.4rem;\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n list: Array;\n testId?: string;\n};\n\nconst WorkMetadataEpicsList = ({\n className,\n list,\n testId = \"testId\"\n}: Props): React.ReactElement | null => {\n const thisTestId = `${testId}-work-metadata-epics-list`;\n return !!list.length ? (\n
    \n \n \n \n Epic\n \n Activity\n Owners\n Contributors\n \n \n
    \n {list.map(e => (\n \n ))}\n
    \n
    \n ) : null;\n};\n\nexport default WorkMetadataEpicsList;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { capitalize, isEmpty, partition } from \"lodash\";\nimport { NIL } from \"uuid\";\n\n// components\nimport PaginationStepper from \"../PaginationStepper/PaginationStepper\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\nimport WorkMetadataEpicsList from \"../WorkMetadataEpicsList/WorkMetadataEpicsList\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport EmptyState from \"../EmptyState/EmptyState\";\n\n// constants\nimport { groupByTypes, urlParamKeys } from \"../../constants/constants\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { useWorkItemsData } from \"../../hooks/useWorkItemsData\";\n\n// interfaces\nimport { GroupsListInterface } from \"../../interfaces/work-items\";\n\n// styled components\nconst Container = styled.div`\n min-height: 30rem;\n`;\nconst ListHeader = styled.h2`\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-size: 1.5rem;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n`;\nconst ListHeaderTitle = styled.span`\n font-family: ${props => props.theme.fonts.header.name}, Arial, Helvetica,\n sans-serif;\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n`;\nconst NoWorkEpic = styled(WorkMetadataEpicsList)`\n margin-bottom: 4rem;\n`;\nconst PaginationStepperWrapper = styled.div`\n margin-top: 2rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n workItemsData: GroupsListInterface;\n};\n\nexport const EpicsList = ({\n className,\n testId = \"testId\",\n workItemsData\n}: Props) => {\n const thisTestId = `${testId}-epics-list`;\n const { updateUrlParams, urlParams } = useUrlParams();\n const groupBy = urlParams?.groupBy;\n\n function onChangePage({ updatedPage }: { updatedPage: number }) {\n updateUrlParams({\n [urlParamKeys.GROUPS_LIST]: { [urlParamKeys.PAGE]: updatedPage }\n });\n window.scroll({ top: 0, left: 0, behavior: \"smooth\" });\n }\n\n const [noWorkEpic, standardEpics] = partition(\n workItemsData?.workMetadata || [],\n e => e.groupId === NIL\n );\n\n return !noWorkEpic.length && !standardEpics.length ? (\n \n ) : (\n \n \n {!!noWorkEpic.length ? (\n
    \n \n Items Unlinked to Epics\n \n \n
    \n ) : null}\n {!!standardEpics.length ? (\n <>\n \n \n {`Work by ${capitalize(\n groupBy === groupByTypes.USER ? \"PERSON\" : groupBy\n )}`}\n {\" \"}\n ({standardEpics.length} results)\n \n \n \n \n \n \n ) : null}\n
    \n
    \n );\n};\n\nexport default EpicsList;\n","import React from \"react\";\nimport { components } from \"react-select\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Icon from \"../Icon/Icon\";\n\n// styled components\nconst Arrow = styled(Icon)`\n color: ${props => props.theme.colors.all.storm};\n`;\n\nconst DropdownIndicator = props => {\n return (\n \n \n \n );\n};\n\nexport default DropdownIndicator;\n","import React from \"react\";\nimport styled, { css, DefaultTheme, withTheme } from \"styled-components/macro\";\nimport Select from \"react-select\";\nimport CreatableSelect from \"react-select/creatable\";\n\n// components\nimport DropdownIndicator from \"./DropdownIndicator\";\nimport { SelectOptionsInterface } from \"../../interfaces/controls\";\nimport { isNull } from \"lodash\";\n\n// styled components\nconst StyledDropdown = styled.div<{ shouldShowLabel?: boolean }>`\n ${props => {\n if (props.shouldShowLabel) {\n return css`\n align-items: baseline;\n display: flex;\n `;\n }\n }}\n`;\nconst StyledLabel = styled.label`\n font-family: ${props => props.theme.fonts.header.name}, sans-serif;\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n`;\nconst SelectWrapper = styled.div`\n flex-shrink: 0;\n flex-grow: 1;\n`;\n\n// typescript props\ntype Props = {\n bordered?: boolean;\n className?: string;\n components?: any;\n defaultValue?: SelectOptionsInterface;\n formatOptionLabel?: (data: any) => void;\n isClearable?: boolean;\n isCreatable?: boolean;\n isMulti?: boolean;\n isSearchable?: boolean;\n label: string;\n maxMenuHeight?: number;\n menuPlacement?: \"auto\" | \"bottom\" | \"top\";\n menuPosition?: \"absolute\" | \"fixed\";\n onChange?: (selected: SelectOptionsInterface) => void;\n onChangeMulti?: (selected: Array) => void;\n onCreateOption?: (value: string) => void;\n options: Array;\n placeholder?: string;\n shouldShowLabel?: boolean;\n styles?: any;\n testId?: string;\n theme: DefaultTheme;\n value?: SelectOptionsInterface | Array | null;\n};\n\nconst Dropdown = ({\n bordered = false,\n className,\n components = { DropdownIndicator },\n defaultValue,\n formatOptionLabel = data => data.label,\n isClearable = false,\n isCreatable = false,\n isMulti = false,\n isSearchable = true,\n label,\n maxMenuHeight = 300,\n menuPlacement = \"bottom\",\n menuPosition = \"absolute\",\n onChange = (selected: SelectOptionsInterface) => null,\n onChangeMulti = (selected: Array) => null,\n onCreateOption,\n options,\n placeholder,\n shouldShowLabel = false,\n testId = \"testId\",\n theme,\n value,\n styles = {}\n}: Props) => {\n const thisTestId = `${testId}-dropdown`;\n const SelectComponent = isCreatable ? CreatableSelect : Select;\n\n const defaultStyle = {\n control: (styleObj: Record) => ({\n ...styleObj,\n border: bordered\n ? `${theme.borders.widths.sm} solid ${theme.colors.all.jean}`\n : 0,\n borderRadius: 0,\n boxShadow: \"none\",\n padding: \"0\"\n }),\n indicatorSeparator: () => ({}),\n menu: (styleObj: Record) => ({\n ...styleObj,\n boxShadow: 0,\n border: `${theme.borders.widths.sm} solid ${theme.colors.all.jean}`,\n borderRadius: 0,\n padding: 0\n }),\n option: (\n styleObj: Record,\n status: { isFocused?: boolean; isSelected?: boolean }\n ) => ({\n ...styleObj,\n background: status.isSelected\n ? theme.colors.all.marvelMint\n : status.isFocused\n ? theme.colors.dropdown.option.hover\n : \"transparent\",\n color: theme.colors.all.wolverine\n }),\n singleValue: (styleObj: Record) => ({\n ...styleObj,\n color: theme.colors.dropdown.text\n }),\n valueContainer: (styleObj: Record) => {\n return {\n ...styleObj,\n alignItems: \"flex-start\"\n };\n }\n };\n const overrideStyles = { ...defaultStyle, ...styles };\n\n return (\n \n \n {label}\n \n \n `Add ${value}`}\n id={thisTestId}\n isClearable={isClearable}\n isMulti={isMulti}\n isSearchable={isSearchable}\n maxMenuHeight={maxMenuHeight}\n menuPlacement={menuPlacement}\n menuPosition={menuPosition}\n name={thisTestId}\n onChange={(\n selected: SelectOptionsInterface | Array\n ) =>\n isMulti\n ? onChangeMulti(\n isNull(selected)\n ? []\n : (selected as Array)\n )\n : onChange(selected as SelectOptionsInterface)\n }\n onCreateOption={onCreateOption}\n options={options}\n placeholder={placeholder}\n styles={overrideStyles}\n value={value}\n />\n \n \n );\n};\n\nexport default withTheme(Dropdown);\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// styled components\nconst Container = styled.span<{ value: string }>`\n align-items: center;\n display: inline-flex;\n font-family: ${props => props.theme.fonts.primary.name}, monospace;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n label: React.ReactNode;\n value: string;\n testId?: string;\n};\n\nconst GroupByLabel = ({\n className,\n label,\n value,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-group-by-label`;\n return (\n \n {label}\n \n );\n};\n\nexport default GroupByLabel;\n","import React, { useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { debounce } from \"lodash\";\nimport { currentTheme } from \"../../themes/currentTheme\";\n\n// components\nimport Dropdown from \"../Dropdown/Dropdown\";\nimport GroupByLabel from \"../GroupByLabel/GroupByLabel\";\n\n// constants\nimport { groupByTypes, urlParamsValuesLabels } from \"../../constants/constants\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { SelectOptionsInterface } from \"../../interfaces/controls\";\n\n// styled components\nconst Container = styled.div`\n position: relative;\n width: 16rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n options: Array;\n testId?: string;\n};\n\nconst GroupBySelector = ({\n className,\n options,\n testId = \"testId\"\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-group-by-selector`;\n const { urlParams, updateUrlParams } = useUrlParams();\n const groupBy = urlParams.groupBy;\n const selectedUser = urlParams.selectedUser;\n\n function formatOptionLabel(data: SelectOptionsInterface) {\n return (\n \n );\n }\n\n const optionsList = options.map(o => {\n return {\n selected: groupBy === o,\n label: `${urlParamsValuesLabels[o]}`,\n value: `${o}`\n };\n });\n\n // fixing ts error with this:\n // https://github.com/facebook/react/issues/19240#issuecomment-652945246\n const debouncedToggle = useMemo(\n () =>\n debounce(updatedGroupBy => {\n updateUrlParams(\n {\n groupBy: updatedGroupBy,\n selectedUser:\n updatedGroupBy === groupByTypes.USER ? \"team\" : selectedUser\n },\n true\n );\n }, 500),\n [selectedUser, updateUrlParams]\n );\n\n return (\n \n o.selected)}\n formatOptionLabel={formatOptionLabel}\n label=\"Group By\"\n onChange={(selected: SelectOptionsInterface) =>\n debouncedToggle(selected.value)\n }\n options={optionsList}\n testId={testId}\n value={optionsList\n .map(o => {\n return {\n selected: o.selected,\n label: \"by \" + o.label,\n value: o.value\n };\n })\n .find(o => o.selected)}\n isSearchable={false}\n />\n \n );\n};\n\nexport default GroupBySelector;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\n\n// constants\nimport { groupByTypes, pageIds } from \"../../constants/constants\";\n\n// hooks\nimport { useParams } from \"react-router-dom\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport GroupBySelector from \"../GroupBySelector/GroupBySelector\";\n\n// styled components\nconst Container = styled.div`\n position: relative;\n width: 16rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst WorkItemsGroupBySelector = ({\n className,\n testId = \"testId\"\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-work-items-group-by-selector`;\n const { pageId } = useParams<{ pageId: string }>();\n const { urlParams } = useUrlParams();\n const groupBy = urlParams.groupBy;\n\n const options = [\n groupByTypes.EPIC,\n groupByTypes.PROJECT,\n groupByTypes.USER\n ].filter(o => {\n if (pageId === pageIds.RETROS && o === groupByTypes.USER) {\n return groupBy === groupByTypes.USER;\n }\n return true;\n });\n\n return (\n \n \n \n );\n};\n\nexport default WorkItemsGroupBySelector;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport ContentWithIcon from \"../ContentWithIcon/ContentWithIcon\";\nimport { workMetadataActivityTypes } from \"../../constants/constants\";\nimport StoryPoints from \"../StoryPoints/StoryPoints\";\n\n// styled components\nconst Container = styled.div`\n display: flex;\n flex-flow: row wrap;\n font-family: ${props => props.theme.fonts.primary.name}, sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n justify-content: flex-start;\n`;\nconst Activity = styled(ContentWithIcon)`\n font-size: 1.1rem;\n white-space: nowrap;\n\n & + & {\n margin-left: 2rem;\n }\n`;\nconst StoryPointsContainer = styled.div`\n display: flex;\n > div {\n margin: 0 0.5rem 0 2rem;\n }\n font-size: 1.1rem;\n align-items: center;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n visibleActivities?: Array;\n showStoryPoints?: boolean;\n};\n\nconst WorkMetadataActivitiesKey = ({\n className,\n testId = \"testId\",\n visibleActivities = [\n workMetadataActivityTypes.BUG,\n workMetadataActivityTypes.ISSUE,\n workMetadataActivityTypes.SUB_TASK,\n workMetadataActivityTypes.PR\n ],\n showStoryPoints = true\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-work-metadata-activities-key`;\n\n const activities = [\n {\n content: \"Issues\",\n icon: \"issue\",\n isVisible: visibleActivities.includes(workMetadataActivityTypes.ISSUE)\n },\n {\n content: \"Subtasks\",\n icon: \"subtask\",\n isVisible: visibleActivities.includes(workMetadataActivityTypes.SUB_TASK)\n },\n {\n content: \"Bugs\",\n icon: \"bug\",\n isVisible: visibleActivities.includes(workMetadataActivityTypes.BUG)\n },\n {\n content: \"PRs\",\n icon: \"pr\",\n isVisible: visibleActivities.includes(workMetadataActivityTypes.PR)\n }\n ];\n\n return (\n \n {activities\n .filter(a => a.isVisible)\n .map(a => (\n \n ))}\n {showStoryPoints && (\n \n \n Story Points\n \n )}\n \n );\n};\n\nexport default WorkMetadataActivitiesKey;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { get, isEmpty, isNil, snakeCase } from \"lodash\";\n\n// components\nimport EpicFilterDrawerAndTrigger from \"../EpicFilterDrawerAndTrigger/EpicFilterDrawerAndTrigger\";\nimport EpicsList from \"../EpicsList/EpicsList\";\nimport FilterPills from \"../FilterPills/FilterPills\";\nimport WorkItemsGroupBySelector from \"../WorkItemsGroupBySelector/WorkItemsGroupBySelector\";\nimport UiCenteringWrapper from \"../UiCenteringWrapper/UiCenteringWrapper\";\nimport WorkMetadataActivitiesKey from \"../WorkMetadataActivitiesKey/WorkMetadataActivitiesKey\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport { useWorkItemsData } from \"../../hooks/useWorkItemsData\";\nimport { GroupsListInterface } from \"../../interfaces/work-items\";\nimport { workMetadataActivityTypes } from \"../../constants/constants\";\n\n// styled components\nconst Content = styled.div`\n background: ${props => props.theme.colors.all.lightJean};\n padding-top: 1.5rem;\n margin-top: 1rem;\n`;\nconst ActivitiesKey = styled(WorkMetadataActivitiesKey)`\n font-size: ${props => props.theme.fonts.subheader.sizes.xs};\n`;\nconst FilterWrapper = styled.div`\n align-items: flex-end;\n display: flex;\n flex-flow: row wrap;\n margin: 3rem 0;\n\n & > div,\n > button {\n margin-right: 1rem;\n margin-bottom: 1rem;\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst ProjectWork = ({ className, testId = \"testId\" }: Props): ReactElement => {\n const thisTestId = `${testId}-epics-base-template`;\n\n const { data, isError, isFetching, isSuccess } = useWorkItemsData();\n const workItemsData = (data as unknown) as GroupsListInterface;\n const showStoryPoints = workItemsData?.activities.some(d =>\n d.breakdownByStatus.some(t => !isNil(t.storyPoints))\n );\n\n return (\n
    \n \n \n \n }\n content={\n <>\n \n workItemsData?.activities.find(\n a =>\n snakeCase(a.activityType).toUpperCase() === activityType\n )\n )}\n />\n \n \n \n \n \n \n \n }\n />\n \n \n
    \n );\n};\n\nexport default ProjectWork;\n","import { merge } from \"lodash\";\n\nexport default ({ config, theme }) => {\n return merge(\n {},\n {\n chart: {\n type: \"spline\",\n style: {\n fontFamily: theme.fonts.subheader.name\n }\n },\n title: null,\n xAxis: {\n labels: {\n style: {\n color: theme.colors.text.body\n }\n }\n },\n yAxis: {\n labels: {\n style: {\n color: theme.colors.text.body\n }\n }\n },\n plotOptions: {\n spline: {\n connectNulls: true,\n lineWidth: 3,\n marker: {\n enabled: true,\n lineWidth: 3,\n radius: 7.5,\n states: {\n hover: {\n radius: 15,\n lineWidth: 4\n },\n select: {\n radius: 20,\n lineWidth: 4\n }\n }\n }\n },\n series: {\n allowPointSelect: true,\n states: { hover: { lineWidth: 3 } }\n }\n }\n },\n config\n );\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty } from \"lodash\";\n\n// components\nimport Chart from \"../Chart/Chart\";\n\n// config\nimport generateConfig from \"./config\";\n\n// exporting for targeting in tests\nexport const ChartSpline = ({ chart, className, testId, theme }) => {\n if (isEmpty(chart) || !testId) {\n return null;\n }\n\n return (\n \n );\n};\n\nChartSpline.propTypes = {\n chart: PropTypes.shape({\n config: PropTypes.object.isRequired,\n id: PropTypes.string.isRequired\n }),\n testId: PropTypes.string.isRequired\n};\n\nexport default ChartSpline;\n","import { formatTimestamp } from \"../../utils/date\";\n\nexport default ({ data, onSelectDate, selectedDate, theme }) => {\n let categories = [];\n let seriesData = [];\n let companyAverageData;\n\n data.forEach((date, index) => {\n const { measures, overall, startDate } = date;\n seriesData.push({\n x: index,\n y: overall.values[measures[0]],\n selected: selectedDate === startDate\n });\n categories.push(startDate);\n if (date.startDate === selectedDate) {\n companyAverageData = overall.baselineValues[measures[0]];\n }\n });\n\n const series = [\n {\n name: \"With story points\",\n data: seriesData,\n type: \"line\"\n }\n ];\n\n return {\n chart: {\n marginRight: 22,\n marginTop: 22,\n style: {\n fontFamily: theme.fonts.subheader.name,\n fontWeight: theme.fonts.subheader.weights.regular\n }\n },\n xAxis: {\n categories,\n labels: {\n formatter: function() {\n return formatTimestamp({ format: \"M/D\", timestamp: this.value });\n },\n style: {\n fontSize: \"14px\"\n },\n y: 40\n },\n tickWidth: 1,\n tickmarkPlacement: \"on\"\n },\n yAxis: {\n max: 100,\n tickInterval: 10,\n title: {\n enabled: false\n },\n labels: {\n step: 2,\n format: \"{value}%\",\n style: {\n fontSize: \"14px\"\n },\n x: -30\n },\n plotLines: [\n {\n value: companyAverageData,\n dashStyle: \"shortdot\",\n width: 2,\n color: theme.colors.chart.storyPoints.marker.stroke,\n label: {\n style: {\n textTransform: \"uppercase\"\n },\n text: \"Company Avg.\",\n align: \"right\",\n x: 0,\n y: 15\n }\n }\n ]\n },\n legend: {\n enabled: false\n },\n tooltip: {\n enabled: false\n },\n plotOptions: {\n line: {\n connectNulls: true,\n marker: {\n symbol: \"circle\",\n fillColor: theme.colors.chart.storyPoints.marker.fill,\n lineColor: theme.colors.chart.storyPoints.marker.fill\n },\n color: theme.colors.chart.storyPoints.marker.fill,\n states: {\n hover: {\n opacity: theme.charts.series.opacity.full,\n lineWidth: \"4px\",\n lineWidthPlus: 0\n },\n inactive: {\n animation: {\n duration: 0\n }\n }\n }\n },\n series: {\n pointPlacement: \"on\",\n point: {\n events: {\n select: function() {\n onSelectDate(this.category);\n }\n }\n },\n marker: {\n states: {\n select: {\n fillColor: theme.colors.chart.storyPoints.marker.fill,\n lineColor: theme.colors.chart.storyPoints.marker.stroke\n }\n }\n }\n }\n },\n series\n };\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { withTheme } from \"styled-components/macro\";\nimport { isEmpty } from \"lodash\";\n\n// components\nimport ChartSpline from \"../ChartSpline/ChartSpline\";\n\n// config\nimport generateConfig from \"./config\";\n\n// exporting for targeting in tests\nexport const ChartStoryPoints = ({\n className,\n data,\n isFetchingData,\n selectedDate,\n onSelectDate,\n testId,\n theme\n}) => {\n if (isEmpty(data) || !onSelectDate || !testId) {\n return null;\n }\n\n return (\n \n );\n};\n\nChartStoryPoints.propTypes = {\n data: PropTypes.array.isRequired,\n isFetchingData: PropTypes.bool,\n onSelectDate: PropTypes.func.isRequired,\n selectedDate: PropTypes.string,\n testId: PropTypes.string.isRequired,\n theme: PropTypes.object.isRequired\n};\n\nexport default withTheme(ChartStoryPoints);\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Col from \"react-bootstrap/Col\";\n\n// styled components\nconst StyledGridCol = styled(Col)``;\n\nconst GridCol = ({ children, ...otherProps }) => {\n if (!children) {\n return null;\n }\n\n return {children};\n};\n\nGridCol.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.array,\n PropTypes.element,\n PropTypes.string\n ]).isRequired\n};\n\nexport default GridCol;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Container from \"react-bootstrap/Container\";\n\n// styled components\nconst StyledGridContainer = styled(Container)`\n padding: 0;\n`;\n\nconst GridContainer = ({ children, fluid = true, ...otherProps }) => {\n if (!children) {\n return null;\n }\n\n return (\n \n {children}\n \n );\n};\n\nGridContainer.propTypes = {\n children: PropTypes.oneOfType([PropTypes.array, PropTypes.element])\n .isRequired,\n fluid: PropTypes.bool\n};\n\nexport default GridContainer;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Row from \"react-bootstrap/Row\";\n\n// styled components\nconst StyledGridRow = styled(Row)``;\n\nconst GridRow = ({ children, ...otherProps }) => {\n if (!children) {\n return null;\n }\n\n return {children};\n};\n\nGridRow.propTypes = {\n children: PropTypes.oneOfType([PropTypes.array, PropTypes.element]).isRequired\n};\n\nexport default GridRow;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\nimport { isNaN, isNil } from \"lodash\";\n\n// components\nimport ValueWithDirectionality from \"../ValueWithDirectionality/ValueWithDirectionality\";\n\n// constants\nimport { directionalityTypes } from \"../../constants/constants\";\n\n// styled components\nconst StyledContainer = styled.div`\n align-items: center;\n display: flex;\n font-family: ${props => props.theme.fonts.primary.name};\n`;\nconst StyledHeader = styled.header`\n margin-right: 0.5rem;\n`;\nconst StyledValueContainer = styled.div`\n padding: 0.5rem 0;\n`;\nconst StyledValue = styled.span`\n font-weight: bold;\n`;\nconst StyledValueWithDirectionality = styled(ValueWithDirectionality)`\n display: inline-block;\n`;\nconst StyledDeltaContainer = styled.div`\n display: inline-block;\n margin-left: 1rem;\n`;\n\nconst StoryPointsAverage = ({\n className,\n testId,\n date,\n delta,\n value,\n ...otherProps\n}) => {\n if (isNaN(value) || isNil(value) || !date || !testId) {\n return null;\n }\n\n const formattedValue = value.toFixed(1);\n\n let displayDelta;\n if (!isNil(delta) && !isNaN(delta)) {\n const formattedDelta = delta.toFixed(1);\n if (delta === 0) {\n displayDelta = formattedDelta;\n } else {\n displayDelta = (\n 0\n ? directionalityTypes.POSITIVE\n : directionalityTypes.NEGATIVE\n }\n value={formattedDelta}\n unit=\"%\"\n testId={testId}\n />\n );\n }\n displayDelta = (\n ({displayDelta})\n );\n }\n\n return (\n \n Tickets with story points on {date}:\n \n {formattedValue}%\n {displayDelta}\n \n \n );\n};\n\nStoryPointsAverage.propTypes = {\n className: PropTypes.string,\n value: PropTypes.number.isRequired,\n testId: PropTypes.string.isRequired\n};\n\nexport default StoryPointsAverage;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled, { css } from \"styled-components/macro\";\n\nconst getBorder = props => {\n const borderWidth = props.theme.borders.widths.md;\n const borderColor = props.color || props.theme.colors.borderedBox.border;\n const style = `${borderWidth} solid ${borderColor}`;\n const padding = \".5em\";\n\n switch (props.location) {\n case \"top\":\n return css`\n border-top: ${style};\n padding-top: ${padding};\n `;\n case \"right\":\n return css`\n border-right: ${style};\n padding-right: ${padding};\n `;\n case \"bottom\":\n return css`\n border-bottom: ${style};\n padding-bottom: ${padding};\n `;\n case \"left\":\n return css`\n border-left: ${style};\n padding-left: ${padding};\n `;\n case \"top-bottom\":\n return css`\n border-bottom: ${style};\n border-top: ${style};\n padding-bottom: ${padding};\n padding-top: ${padding};\n `;\n case \"left-right\":\n return css`\n border-left: ${style};\n border-right: ${style};\n padding-left: ${padding};\n padding-right: ${padding};\n `;\n default:\n // \"all\"\n return css`\n border: ${style};\n padding: ${padding};\n `;\n }\n};\n\n// styled components\nconst StyledBorderedBox = styled.div`\n ${props => getBorder(props)}\n`;\n\nconst BorderedBox = ({ children, color, location, testId, ...otherProps }) => {\n if (!children || !testId) {\n return null;\n }\n\n const props = {\n ...otherProps,\n color,\n location\n };\n\n return (\n \n {children}\n \n );\n};\n\nBorderedBox.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.array,\n PropTypes.element,\n PropTypes.string\n ]).isRequired,\n color: PropTypes.string,\n location: PropTypes.oneOf([\n \"top\",\n \"right\",\n \"bottom\",\n \"left\",\n \"top-bottom\",\n \"left-right\",\n \"all\"\n ]),\n testId: PropTypes.string.isRequired\n};\n\nexport default BorderedBox;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, kebabCase, reject } from \"lodash\";\n\n// components\nimport BorderedBox from \"../BorderedBox/BorderedBox\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport Table from \"../Table/Table\";\n\n// constants\nimport { storyPointsListTypes } from \"../../constants/components\";\n\n// styled components\nconst StyledContainer = styled.div`\n font-family: ${props => props.theme.fonts.primary.name};\n text-align: left;\n`;\nconst StyledHeader = styled.header`\n margin-bottom: 2rem;\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n`;\nconst StyledScrollingContainer = styled.div`\n max-height: 30rem;\n overflow: auto;\n`;\nconst StyledTable = styled(Table)`\n width: 100%;\n\n & th.title {\n width: 50%;\n }\n`;\nconst StyledListContainer = styled.div`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\n\nconst StoryPointsList = ({\n className,\n date,\n list = [],\n listType = storyPointsListTypes.WITH_STORY_POINTS,\n testId = \"testId\",\n ...otherProps\n}) => {\n const thisTestId = `${testId}-story-points-list`;\n\n const isWithStoryPointsList =\n listType === storyPointsListTypes.WITH_STORY_POINTS;\n\n let displayContent;\n if (isEmpty(list)) {\n displayContent = isWithStoryPointsList ? (\n \n ) : (\n \n );\n } else {\n let columns = [\n {\n accessor: \"displayId\",\n className: \"displayId\",\n Header: \"Ticket\",\n Cell: ({ cell }) => {\n return (\n \n {cell.row.original.url ? (\n \n {cell.value}\n \n ) : (\n {cell.value}\n )}\n \n );\n }\n },\n {\n accessor: \"storyPoints\",\n className: \"storyPoints\",\n Header: \"SP\"\n },\n {\n accessor: \"title\",\n Cell: ({ cell }) => (\n {cell.value}\n ),\n className: \"title\",\n Header: \"Title\"\n },\n {\n accessor: \"owner\",\n Cell: ({ cell }) => (\n {cell.value}\n ),\n className: \"owner\",\n Header: \"Owner\"\n }\n ];\n\n const ticketString =\n list.length === 1 ? `${list.length} Ticket` : `${list.length} Tickets`;\n const header = `${ticketString} ${\n isWithStoryPointsList ? \"With\" : \"Without\"\n } Story Points${date ? ` on ${date}` : \"\"}`;\n if (!isWithStoryPointsList) {\n columns = reject(columns, c => c.accessor === \"storyPoints\");\n }\n\n displayContent = (\n \n \n \n {header}\n \n \n \n \n \n \n );\n }\n\n return (\n \n {displayContent}\n \n );\n};\n\nStoryPointsList.propTypes = {\n className: PropTypes.string,\n date: PropTypes.string.isRequired,\n list: PropTypes.array,\n listType: PropTypes.oneOf(Object.values(storyPointsListTypes)).isRequired,\n testId: PropTypes.string.isRequired\n};\n\nexport default StoryPointsList;\n","import { captureException } from \"@sentry/react\";\nimport api from \"./api\";\n\nexport const requestStoryPoints = async ({ accessToken, params, tenantId }) => {\n if (!(\"startDate\" in params) || !(\"endDate\" in params)) {\n return captureException(\n `Expected params with keys of \"startDate\" as String, and \"endDate\" as value type String, but received ${JSON.stringify(\n params\n )}`\n );\n }\n const response = await api.post(`/${tenantId}/storypointsbyuser`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const requestStoryPoints_privateic = async ({\n accessToken,\n params,\n tenantId\n}) => {\n if (\n !(\"startDate\" in params) ||\n !(\"endDate\" in params) ||\n !(\"userEmail\" in params)\n ) {\n return captureException(\n `Expected params with keys of \"userEmail\", \"startDate\" and \"endDate\" as String, but received ${JSON.stringify(\n params\n )}`\n );\n }\n const response = await api.post(\n `/${tenantId}/private-ic/storypointsbyuser`,\n params,\n {\n headers: { Authorization: `Bearer ${accessToken}` }\n }\n );\n return response.data;\n};\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport { get, last } from \"lodash\";\nimport moment from \"moment\";\n\n// utils\nimport { getTimestampForDate } from \"../../utils/date\";\nimport { requestStoryPoints } from \"../../utils/story-points\";\nimport { captureException, withScope } from \"@sentry/react\";\n\nexport const useBackingData = (\n manualState,\n accessToken,\n tenantId,\n user,\n team,\n startDate,\n endDate\n) => {\n const [data, _setData] = useState([]);\n // not using the setters currently, because there's no changing\n // the date range\n // if startDate and endDate are undefined, use the last 2 weeks as the default\n const [defaultStartDate, setDefaultStartDate] = useState(\n getTimestampForDate(\n moment(new Date())\n .startOf(\"day\")\n .subtract(15, \"days\")\n )\n );\n const [defaultEndDate, setDefaultEndDate] = useState(\n getTimestampForDate(moment(new Date()).startOf(\"day\"))\n );\n\n const [isFetchingData, _setIsFetchingData] = useState(false);\n const [selectedDate, setSelectedDate] = useState(\"\");\n const [error, _setError] = useState(null);\n const requestProps = useMemo(() => {\n return {\n accessToken,\n // end date is inclusive on the backend, so we have to shift by 1 day\n endDate: !!endDate\n ? moment(endDate)\n .subtract(1, \"days\")\n .toISOString()\n : defaultEndDate,\n // for start date we go one day earlier to show day/day diffs\n startDate: !!startDate\n ? moment(startDate)\n .subtract(1, \"days\")\n .toISOString()\n : defaultStartDate,\n tenantId,\n user,\n team\n };\n }, [\n accessToken,\n defaultEndDate,\n defaultStartDate,\n tenantId,\n user,\n team,\n startDate,\n endDate\n ]);\n\n useEffect(() => {\n (async () => {\n if (manualState) {\n _setData(manualState.data);\n setSelectedDate(manualState.selectedDate);\n } else {\n try {\n if (!error) {\n _setIsFetchingData(true);\n const responseData = await requestStoryPoints({\n accessToken: requestProps.accessToken,\n tenantId: requestProps.tenantId,\n params: {\n tenantId: requestProps.tenantId,\n startDate: requestProps.startDate,\n endDate: requestProps.endDate,\n users: requestProps.team.map(t => t.email)\n }\n });\n _setData(responseData.responseByDate);\n setSelectedDate(\n get(last(responseData.responseByDate), \"startDate\")\n );\n _setIsFetchingData(false);\n }\n } catch (e) {\n _setError(e);\n _setIsFetchingData(false);\n withScope(scope => {\n scope.setContext(\"request-story-points\", requestProps);\n captureException(e);\n });\n }\n }\n })();\n }, [manualState, error, requestProps]);\n\n return [selectedDate, data, isFetchingData, setSelectedDate, error];\n};\n","import React, { Fragment } from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\nimport { findIndex, isEmpty } from \"lodash\";\n\n// components\nimport ChartStoryPoints from \"../ChartStoryPoints/ChartStoryPoints\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport GridCol from \"../GridCol/GridCol\";\nimport GridContainer from \"../GridContainer/GridContainer\";\nimport GridRow from \"../GridRow/GridRow\";\nimport Spinner from \"../Spinner/Spinner\";\nimport StoryPointsAverage from \"../StoryPointsAverage/StoryPointsAverage\";\nimport StoryPointsList from \"../StoryPointsList/StoryPointsList\";\n\n// constants\nimport { storyPointsListTypes } from \"../../constants/components\";\n\n// utils\nimport { formatTimestamp } from \"../../utils/date\";\nimport parseData from \"./parser\";\nimport { useBackingData } from \"./useBackingData\";\nimport { legacyRoleTypes } from \"../../constants/users\";\n\n// styled components\nconst Container = styled.div`\n width: 100%;\n`;\nconst StyledGridContainer = styled(GridContainer)`\n margin-top: 5rem;\n`;\nconst StyledFigCaption = styled.figcaption`\n display: flex;\n justify-content: flex-end;\n`;\nconst StyledEmptyState = styled(EmptyState)`\n margin-top: 5rem;\n`;\n\nconst StoryPointsChartWrapper = ({ testId = \"testId\", ...props }) => {\n const {\n className,\n accessToken,\n tenantId,\n manualState,\n user,\n teamMembers,\n startDate,\n endDate\n } = props;\n const [\n selectedDate,\n storyPointsData,\n isFetchingData,\n setSelectedDate,\n error\n ] = useBackingData(\n manualState,\n accessToken,\n tenantId,\n user,\n teamMembers,\n startDate,\n endDate\n );\n\n if (error) {\n return null;\n }\n\n if (isFetchingData) {\n return ;\n }\n\n const onSelectDate = date => {\n setSelectedDate(date);\n };\n\n // do a check up front to see if anyone on the team has tickets assigned.\n let teamHasNoAssignedTicketsForAllDates = storyPointsData.every(date => {\n return date.resultsByUser.every(r => isEmpty(r.metaData));\n });\n\n let displayContent;\n // if no one on the team has tickets assigned, skip all the date parsing and\n // just show an empty state message\n if (teamHasNoAssignedTicketsForAllDates) {\n // we use the same component for both the ic private and team widgets. The data fetcher\n // uses this role check to determine as well\n const emptyStateRole =\n user.enabled_roles.includes(legacyRoleTypes.PRIVATEIC) ||\n user.enabled_roles.includes(legacyRoleTypes.PRIVATEIC_EXEC)\n ? \"You don't\"\n : \"Your team doesn't\";\n\n displayContent = (\n \n );\n } else {\n const selectedDateIndex = findIndex(\n storyPointsData,\n d => d.startDate === selectedDate\n );\n if (selectedDateIndex < 0) {\n return null;\n }\n const selectedDateMetadata = storyPointsData[selectedDateIndex];\n const previousDateMetadata = storyPointsData[selectedDateIndex - 1];\n\n const average =\n selectedDateMetadata.overall.values[selectedDateMetadata.measures[0]];\n const delta =\n average -\n previousDateMetadata.overall.values[previousDateMetadata.measures[0]];\n\n const parsedData = parseData({\n data: selectedDateMetadata,\n userDetails: [...teamMembers, user]\n });\n\n const { ticketsWithStoryPoints, ticketsWithoutStoryPoints } = parsedData;\n const selectedDateFormatted = formatTimestamp({\n format: \"M/D\",\n timestamp: selectedDate\n });\n const teamHasNoAssignedTicketsForSelectedDate =\n isEmpty(ticketsWithStoryPoints) && isEmpty(ticketsWithoutStoryPoints);\n\n displayContent = (\n \n
    \n onSelectDate(date)}\n testId={testId}\n />\n \n \n \n
    \n {teamHasNoAssignedTicketsForSelectedDate ? (\n \n ) : (\n \n \n \n \n \n \n \n \n \n \n )}\n
    \n );\n }\n\n return (\n \n {displayContent}\n \n );\n};\n\nStoryPointsChartWrapper.propTypes = {\n accessToken: PropTypes.string.isRequired,\n className: PropTypes.string,\n tenantId: PropTypes.string.isRequired,\n testId: PropTypes.string.isRequired,\n user: PropTypes.object.isRequired,\n startDate: PropTypes.string,\n endDate: PropTypes.string\n};\n\nexport default StoryPointsChartWrapper;\n","import { compact, flattenDeep, isNull, partition } from \"lodash\";\n\nexport default ({ data, userDetails }) => {\n // create flat array of all tickets with owner names injected\n const allTicketsWithOwnerNames = flattenDeep(\n compact(\n data.resultsByUser.map(result => {\n const { metaData, userId } = result;\n const user = userDetails.find(u => u.id === userId);\n\n // if metadata is null, this user doesn't have any\n // tickets assigned, so return null for the entire user\n // so that they can be compacted out of the tickets array\n //\n // changing the team can call the parser before new data is fetched,\n // in this case user will be undefined and should return null\n if (isNull(metaData) || !user) {\n return null;\n }\n\n // map through every issue and inject the owner's name, then\n // return the mapped array\n return metaData.map(m => ({\n ...m,\n owner: user.name\n }));\n })\n )\n );\n\n // partition the tickets into 2 arrays based on whether story points is null\n // 0 is a valid story points value!!\n const [\n ticketsWithoutStoryPoints,\n ticketsWithStoryPoints\n ] = partition(allTicketsWithOwnerNames, t => isNull(t.storyPoints));\n\n return {\n ...data,\n ticketsWithStoryPoints,\n ticketsWithoutStoryPoints\n };\n};\n","import React from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport RouteLink from \"../RouteLink/RouteLink\";\n\n// styled components\nconst List = styled.ul<{ numItems: number }>`\n display: flex;\n justify-content: flex-start;\n`;\nconst ListItem = styled.li`\n align-items: flex-end;\n display: flex;\n justify-content: center;\n padding: 0 1rem 0 0;\n\n &:not(:nth-of-type(1)) {\n border-left: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n padding: 0 1rem;\n }\n`;\nconst Base = css<{\n isActive: boolean;\n isDisabled?: boolean;\n}>`\n border-bottom: ${props =>\n `${props.theme.borders.widths.lg} solid ${\n props.isActive ? props.theme.colors.all.wolverine : \"transparent\"\n }`};\n opacity: ${props => (props.isDisabled ? \"0.3\" : \"1\")};\n padding: 0 1.5rem;\n`;\nconst Link = styled(RouteLink)`\n ${Base}\n display: inline-block;\n && {\n color: inherit;\n\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n }\n`;\nconst Placeholder = styled.div`\n ${Base}\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n defaultTabId?: string;\n tabs: Array<{\n id: string;\n isDisabled?: boolean;\n path: string;\n title: React.ReactNode;\n }>;\n testId?: string;\n};\n\nconst RouteLinkTabs = ({\n className,\n defaultTabId,\n tabs,\n testId = \"testId\"\n}: Props): React.ReactElement | null => {\n const thisTestId = `${testId}-route-link-tabs`;\n // do a check to make sure the default tab id is actually in the tabs,\n // otherwise use the id of the first tab item\n const initialTabKey = !!tabs.length\n ? defaultTabId && !!tabs.find(t => t.id === defaultTabId)\n ? defaultTabId\n : tabs[0].id\n : null;\n\n return !!tabs.length ? (\n \n ) : null;\n};\n\nexport default RouteLinkTabs;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport UiCenteringWrapper from \"../UiCenteringWrapper/UiCenteringWrapper\";\n\n// styled components\nconst Container = styled.header`\n background: ${props => props.theme.colors.all.white};\n padding: 1.6rem 0;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n content: React.ReactNode;\n testId?: string;\n};\n\nconst TemplateHeader = ({ className, content, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-template-header`;\n return (\n \n {content} \n \n );\n};\n\nexport default TemplateHeader;\n","import React, { ReactElement, useEffect, useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { get } from \"lodash\";\n\n// components\nimport { Redirect, Route, Switch } from \"react-router-dom\";\nimport EpicDetailsPage from \"../EpicDetailsPage/EpicDetailsPage\";\nimport OperationalMetricsPage from \"../OperationalMetricsPage/OperationalMetricsPage\";\nimport PRWorkflow from \"../PRWorkflow/PRWorkflow\";\nimport PageTitle from \"../PageTitle/PageTitle\";\nimport PeoplePicker from \"../PeoplePicker/PeoplePicker\";\nimport PrCadenceChartWrapper from \"../PrCadenceChartWrapper/PrCadenceChartWrapper\";\nimport ProjectWork from \"../ProjectWork/ProjectWork\";\nimport StoryPointsChartWrapper from \"../StoryPointsChartWrapper/StoryPointsChartWrapper\";\nimport RouteLinkTabs from \"../RouteLinkTabs/RouteLinkTabs\";\nimport TemplateHeader from \"../TemplateHeader/TemplateHeader\";\n\n// constants\nimport {\n groupByTypes,\n pageIds,\n pageMetadata,\n urlGlobalParams,\n workDeepDiveSectionLabels,\n workDeepDiveSections\n} from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useLocation } from \"react-router-dom\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// utils\nimport { getWorkDeepDivePageTitle } from \"../../utils/work-deep-dive\";\nimport { getTeamNameFromTeam } from \"../../utils/teams\";\nimport { formatTimestamp } from \"../../utils/date\";\nimport { getIsSprintMode } from \"../../utils/sprints\";\n\n// styled components\nconst StyledTemplateHeader = styled(TemplateHeader)`\n border-bottom: 0;\n`;\nconst HeaderContentWrapper = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n width: 100%;\n`;\nconst StyledTabs = styled(RouteLinkTabs)`\n padding-bottom: 0.5rem;\n margin: 2rem 0 0.5rem 0;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n`;\n\nconst StyledStoryPoints = styled(StoryPointsChartWrapper)`\n background-color: ${props => props.theme.colors.all.white};\n padding: 2rem;\n`;\nconst StyledPRCadence = styled(PrCadenceChartWrapper)`\n background-color: ${props => props.theme.colors.all.white};\n padding: 2rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst WorkDeepDivePage = ({\n className,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-work-deep-dive-page`;\n const location = useLocation();\n\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const accessToken = useSelector(state => get(state, \"auth.authAccessToken\"));\n const tenantId = useSelector(state => get(state, \"auth.authParams.tenantId\"));\n const user = useSelector(state => get(state, \"user\", {}));\n const { urlParams, workDeepDiveParams, getWorkDeepDivePath } = useUrlParams();\n const selectedSection = workDeepDiveParams.selectedSection;\n const activeTeam = useMemo(() => urlParams.team, [urlParams]);\n const activeTimerange = useMemo(() => urlParams.timerange, [urlParams]);\n const pageTitle = `${pageMetadata[pageIds.WORK_DEEP_DIVE].title}${\n !!activeTeam ? \": \" + getTeamNameFromTeam(activeTeam) : \"\"\n }${\n activeTimerange &&\n activeTeam?.useSprints &&\n getIsSprintMode(activeTimerange)\n ? \" - \" + activeTimerange.displayName\n : \" - \" +\n formatTimestamp({\n format: \"M/D\",\n timestamp: activeTimerange.start\n }) +\n \" - \" +\n formatTimestamp({ format: \"M/D\", timestamp: activeTimerange.end })\n }`;\n const canViewPrWorkflowTab = flags?.[\"project-explorer-workflow\"];\n const canViewPrFrequency = flags?.[\"pr-frequency\"];\n const canViewOpsMetrics = flags?.[\"project-explorer-ops-metrics\"];\n const canViewStoryPoints = flags?.[\"project-explorer-story-points\"];\n\n const allowedSections = useMemo(\n () =>\n [\n workDeepDiveSections.OPS_METRICS,\n workDeepDiveSections.PROJECT_WORK,\n workDeepDiveSections.PR_WORKFLOW,\n workDeepDiveSections.PR_FREQUENCY,\n workDeepDiveSections.STORY_POINTS\n ].filter(section => {\n switch (section) {\n case workDeepDiveSections.STORY_POINTS:\n return canViewStoryPoints;\n case workDeepDiveSections.OPS_METRICS:\n return canViewOpsMetrics;\n case workDeepDiveSections.PR_WORKFLOW:\n return canViewPrWorkflowTab;\n case workDeepDiveSections.PR_FREQUENCY:\n return canViewPrFrequency;\n default:\n return true;\n }\n }),\n [\n canViewOpsMetrics,\n canViewPrFrequency,\n canViewPrWorkflowTab,\n canViewStoryPoints\n ]\n );\n\n const teamAvatarEnabled = !(\n selectedSection === workDeepDiveSections.PROJECT_WORK &&\n urlParams.groupBy === groupByTypes.USER\n );\n const selectedTeamMembers = useMemo(\n () =>\n workDeepDiveParams.selectedUser === \"team\"\n ? activeTeam?.teamMembers\n : [\n activeTeam?.teamMembers.find(\n m => m.email === workDeepDiveParams.selectedUser\n )\n ],\n [activeTeam, workDeepDiveParams]\n );\n\n // page title change\n useEffect(() => {\n document.title = getWorkDeepDivePageTitle(selectedSection);\n }, [location, selectedSection]);\n\n return flags?.[\"work-deep-dive\"] ? (\n
    \n \n \n \n \n \n ({\n path: getWorkDeepDivePath({\n persistQuerystring:\n section === workDeepDiveSections.OPS_METRICS\n ? urlGlobalParams\n : true,\n selectedSection: section\n }),\n title: workDeepDiveSectionLabels[section],\n id: section,\n isDisabled: false\n }))}\n testId=\"work-deep-dive-tabs\"\n />\n \n }\n testId={thisTestId}\n />\n \n \n
    \n {canViewOpsMetrics ? (\n \n ) : (\n \n )}\n
    \n
    \n\n \n \n \n\n {/* TODO: temp redirect until it seems like people are not bookmarking your-teams-work anymore */}\n \n \n \n\n {/* TODO: temp redirect until it seems like people are not bookmarking ops-metrics anymore */}\n \n \n \n\n \n
    \n \n
    \n \n \n \n \n {canViewPrWorkflowTab ? (\n \n \n \n ) : null}\n {canViewPrFrequency ? (\n \n \n \n ) : (\n \n )}\n {flags?.[\"project-explorer-story-points\"] && (\n \n \n \n )}\n
    \n
    \n ) : (\n \n );\n};\n\nexport default WorkDeepDivePage;\n","import React from \"react\";\nimport styled, { css } from \"styled-components/macro\";\n\n// components\nimport Icon from \"../Icon/Icon\";\n\n// interfaces\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\n\n// styled components\nconst Button = styled.button`\n align-items: center;\n background: ${props => props.theme.colors.all.white};\n border: 0;\n display: flex;\n justify-content: space-between;\n padding: 0.75rem 1rem;\n text-align: left;\n width: 100%;\n`;\nconst PersonButton = styled(Button)`\n align-items: flex-start;\n`;\nconst PersonWrapper = styled.div`\n background: ${props => props.theme.colors.all.white};\n padding: 0.75rem 1rem;\n`;\nconst DirectReportsButton = styled(Button)<{ isActive: boolean }>`\n padding: 0.5rem 1rem;\n\n ${props => {\n if (props.isActive) {\n return css`\n background: ${props.theme.colors.all.jean};\n box-shadow: inset -${props.theme.borders.widths.lg} 0 ${props.theme.colors.all.auroraTeal};\n `;\n }\n }}\n`;\nconst Metadata = styled.div`\n align-items: center;\n flex: 1;\n display: flex;\n padding-top: 0.5rem;\n`;\nconst Avatar = styled(SlackAvatar)`\n border-radius: 50%;\n border: ${props => `.2rem solid ${props.theme.colors.all.wolverine}`};\n height: 3rem;\n margin-right: 1rem;\n width: 3rem;\n`;\nconst Name = styled.header`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n line-height: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst InlineArrow = styled(Icon)`\n margin-left: 1rem;\n`;\nconst Title = styled.p`\n font-size: 1.1rem;\n margin: 0;\n`;\nconst Footer = styled.footer`\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n`;\nconst DirectReports = styled.div`\n flex: 1;\n font-size: 1.1rem;\n`;\nconst TeamIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n margin-right: 1rem;\n`;\nconst Chevron = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n font-size: 1.1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n isActive?: boolean;\n onClickPerson: (e: React.MouseEvent) => void;\n onClickReportsNav: (\n e: React.MouseEvent\n ) => void;\n person: UserReportWithMetadataInterface;\n showArrowInline?: boolean;\n showDirectReports?: boolean;\n testId?: string;\n};\n\nconst OrganizationNavigationMenuCard = ({\n className,\n isActive = false,\n onClickPerson,\n onClickReportsNav,\n person,\n showArrowInline = false,\n showDirectReports = true,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-organization-navigation-menu-card`;\n const hasDirectReports = !!person.team?.teamMembers.length;\n\n const personMetadata = (\n <>\n \n \n
    \n \n {person.name}\n {showArrowInline ? (\n \n ) : null}\n \n {person.title}\n
    \n
    \n {showArrowInline ? null : hasDirectReports ? (\n \n ) : null}\n \n );\n\n return (\n
    \n {hasDirectReports ? (\n \n {personMetadata}\n \n ) : (\n {personMetadata}\n )}\n {showDirectReports && hasDirectReports ? (\n
    \n \n \n \n {\n person.team?.teamMembers.filter(t => t.id !== person.id).length\n }{\" \"}\n Direct Reports\n \n \n \n
    \n ) : null}\n
    \n );\n};\n\nexport default OrganizationNavigationMenuCard;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport OrganizationNavigationMenuCard from \"../OrganizationNavigationMenuCard/OrganizationNavigationMenuCard\";\n\n// interfaces\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\nimport { TeamInterface } from \"../../interfaces/team\";\n\n// styled components\nconst ListItem = styled.li`\n & + & {\n margin-top: 0.5rem;\n }\n`;\n\n// typescript props\ntype Props = {\n activePerson?: UserReportWithMetadataInterface;\n className?: string;\n onClickPerson: ({\n e,\n person\n }: {\n e: React.MouseEvent;\n person: UserReportWithMetadataInterface;\n activePerson?: UserReportWithMetadataInterface;\n }) => void;\n onClickReportsNav: ({\n e,\n person\n }: {\n e: React.MouseEvent;\n person: UserReportWithMetadataInterface;\n }) => void;\n team?: TeamInterface;\n testId?: string;\n};\n\nconst OrganizationNavigationMenuCardsList = ({\n activePerson,\n className,\n onClickPerson,\n onClickReportsNav,\n team,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-organization-navigation-menu-cards-list`;\n const teamMembers = team?.teamMembers?.filter(\n t => t.id !== team?.orgChartTeamLeadId\n );\n return teamMembers?.length ? (\n
      \n {teamMembers.map(o => (\n \n \n ) =>\n onClickPerson({\n e,\n person: o,\n activePerson\n })\n }\n onClickReportsNav={(\n e: React.MouseEvent\n ) => onClickReportsNav({ e, person: o })}\n testId={thisTestId}\n />\n \n ))}\n
    \n ) : null;\n};\n\nexport default OrganizationNavigationMenuCardsList;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { last } from \"lodash\";\n\n// actions\nimport { storeOrganization } from \"../../actions/sessionActions\";\n\n// components\nimport Icon from \"../Icon/Icon\";\nimport OrganizationNavigationMenuCard from \"../OrganizationNavigationMenuCard/OrganizationNavigationMenuCard\";\nimport OrganizationNavigationMenuCardsList from \"../OrganizationNavigationMenuCardsList/OrganizationNavigationMenuCardsList\";\nimport ScrollContainerWithReset from \"../ScrollContainerWithReset/ScrollContainerWithReset\";\n\n// hooks\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useQueryClient } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport {\n UserInterface,\n UserReportWithMetadataInterface\n} from \"../../interfaces/user\";\nimport { useOrganizationData } from \"../../hooks/useOrganizationData\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// constants\nconst NUM_VISIBLE_LEVELS = 2;\n\n// styled components\nconst ScrollContainer = styled(ScrollContainerWithReset)`\n max-height: 70vh;\n`;\nconst Container = styled.div`\n background: ${props => props.theme.colors.all.lightJean};\n display: inline-block;\n`;\nconst Header = styled.header`\n background: ${props => props.theme.colors.all.white};\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n margin-bottom: 1rem;\n`;\nconst OrganizationWrapper = styled.div`\n display: flex;\n padding: 1rem 2rem 2rem;\n`;\nconst CardsList = styled(OrganizationNavigationMenuCardsList)`\n width: 26.4rem;\n`;\nconst LineWrapper = styled.div`\n align-items: flex-start;\n border-left: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.wolverine}`};\n margin-left: 1.25rem;\n`;\nconst SecondaryCardsList = styled(CardsList)`\n background: ${props => props.theme.colors.all.lightJean};\n padding: 0 1.25rem;\n`;\nconst Breadcrumb = styled.ul`\n align-items: center;\n display: flex;\n padding: 0 2rem;\n`;\nconst BreadcrumbItem = styled.li`\n & + & {\n margin-left: 1rem;\n }\n`;\nconst BreadcrumbChevron = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n font-size: 1.1rem;\n`;\nconst BreadcrumbName = styled.button`\n border: 0;\n background: none;\n font-size: 1.1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n onUpdate: () => void;\n testId?: string;\n};\n\nconst OrganizationNavigationMenu = ({\n className,\n onUpdate,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-organization-navigation-menu`;\n const { updateUrlParams } = useUrlParams();\n\n // organization\n const { data: orgChartRootTeam } = useOrganizationData();\n const { trackEvent } = useTracking();\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const user = useSelector((state: AppStateInterface) => state.user);\n // massaging the main user into UserReportWithMetadataInterface shape, ugh\n const userWithMetadata = {\n ...user,\n tenantId,\n team: orgChartRootTeam,\n image: \"\",\n slackHandle: null,\n slackUrl: null,\n include_in_team_roster: true\n };\n const [breadcrumb, setBreadcrumb] = useState<\n Array\n >([userWithMetadata]);\n const [currentBreadcrumbIndex, setCurrentBreadcrumbIndex] = useState(\n 0\n );\n const dispatch = useDispatch();\n const queryClient = useQueryClient();\n\n function invalidateQueries() {\n // this is a bit duplicative with ReportsCard, this should be\n // in a hook somewhere central, not a super good place until we're off the\n // legacy app completely\n queryClient.invalidateQueries(\"projects-and-boards\");\n queryClient.invalidateQueries(\"sprint-metadata\");\n queryClient.invalidateQueries(\"sprint-health\");\n queryClient.invalidateQueries(\"active-board\");\n queryClient.invalidateQueries([\"teams\", { type: \"active-users-teams\" }]);\n }\n\n async function onClickRootPerson({\n e,\n person\n }: {\n e: React.MouseEvent;\n person: UserInterface;\n }) {\n // invalidate the timerange before updating the active team so it can be\n // reset and not have the sprintid persisting in work-items calls\n // dispatch(storeUiFilterParams({ timerange: null }));\n updateUrlParams({ teamLeadId: null, team: orgChartRootTeam }, false);\n invalidateQueries();\n dispatch(\n storeOrganization({\n parentsOfActiveTeam: []\n })\n );\n await trackEvent({\n e,\n label: \"organization-navigation-menu\",\n value: `clicked ${person.name}`\n });\n await trackEvent({\n e,\n label: \"changed-user\",\n value: `updated app to ${person.name} (${person.email})`\n });\n onUpdate();\n }\n\n async function onClickPerson({\n e,\n person,\n activePerson\n }: {\n e: React.MouseEvent;\n person: UserReportWithMetadataInterface;\n activePerson?: UserReportWithMetadataInterface;\n }) {\n // The root user is never in the org chart.\n //\n // We are adding the person into the breadcrumb, so\n // we remove them first to avoid duplicate breadcrumbs.\n //\n // Duplicate breadcrumbs would otherwise occur if the person is\n // currently active in the menu cards.\n const filteredBreadcrumb = [...breadcrumb].filter(\n u => u.id !== user.id && u.id !== person.id\n );\n const parentsOfActiveTeam =\n activePerson?.id !== person.id\n ? [...filteredBreadcrumb.slice(0, currentBreadcrumbIndex), person]\n : [...filteredBreadcrumb, person];\n\n invalidateQueries();\n updateUrlParams({ teamLeadId: person.id }, false);\n\n dispatch(\n storeOrganization({\n parentsOfActiveTeam: parentsOfActiveTeam\n })\n );\n await trackEvent({\n e,\n label: \"organization-navigation-menu\",\n value: `clicked ${person.name}`\n });\n await trackEvent({\n e,\n label: \"changed-user\",\n value: `updated app to ${person.name} (${person.email})`\n });\n onUpdate();\n }\n\n function onClickReportsNav({\n e,\n person,\n updateLevel = false\n }: {\n e: React.MouseEvent;\n person: UserReportWithMetadataInterface;\n updateLevel?: boolean;\n }) {\n trackEvent({\n e,\n label: \"organization-navigation-menu\",\n value: `clicked direct reports for ${person.name}`\n });\n if (updateLevel) {\n setBreadcrumb(c => [...c, person]);\n setCurrentBreadcrumbIndex(c => c + 1);\n } else {\n setBreadcrumb(currentBreadcrumb => [\n ...currentBreadcrumb.slice(0, currentBreadcrumbIndex + 1),\n person\n ]);\n }\n }\n\n function onClickBreadcrumbItem({\n e,\n person,\n index\n }: {\n e: React.MouseEvent;\n person: UserReportWithMetadataInterface;\n index: number;\n }) {\n trackEvent({\n e,\n label: \"organization-navigation-menu\",\n value: `clicked breadcrumb item for ${person.name}`\n });\n setCurrentBreadcrumbIndex(!!index ? index - 1 : index);\n setBreadcrumb(currentBreadcrumb => [\n ...currentBreadcrumb.slice(0, index),\n person\n ]);\n }\n\n const [personWithDisplayedReports, activePerson] = breadcrumb.slice(\n -1 * NUM_VISIBLE_LEVELS\n );\n\n return (\n \n \n
    \n \n ) => onClickRootPerson({ e, person: user })}\n onClickReportsNav={(\n e: React.MouseEvent\n ) => onClickReportsNav({ e, person: userWithMetadata })}\n person={userWithMetadata}\n showDirectReports={false}\n showArrowInline={true}\n testId={thisTestId}\n />\n
    \n {breadcrumb.length > NUM_VISIBLE_LEVELS ? (\n \n {breadcrumb.map((b, index) => (\n \n \n \n onClickBreadcrumbItem({\n e,\n person: b,\n index\n })\n }\n >\n {b.name}\n \n \n ))}\n \n ) : null}\n \n \n {!!activePerson ? (\n \n \n onClickReportsNav({\n e,\n person,\n updateLevel: true\n })\n }\n team={activePerson?.team}\n testId={thisTestId}\n />\n \n ) : null}\n \n
    \n
    \n );\n};\n\nexport default OrganizationNavigationMenu;\n","import React from \"react\";\nimport styled, { css } from \"styled-components/macro\";\n\n// components\nimport Icon from \"../Icon/Icon\";\n\n// styled components\nconst Container = styled.button`\n align-items: baseline;\n background: ${props => props.theme.colors.all.lightJean};\n border: 0;\n display: flex;\n justify-content: space-between;\n padding: 0;\n width: 100%;\n`;\nconst Arrow = styled(Icon)<{ isDisabled: boolean }>`\n color: ${props =>\n props.isDisabled\n ? props.theme.colors.all.storm\n : props.theme.colors.all.wolverine};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n content: React.ReactNode;\n onClick: (e: React.MouseEvent) => void;\n isActive?: boolean;\n isDisabled?: boolean;\n testId?: string;\n};\n\nconst UiFilterPopupTrigger = ({\n className,\n content,\n onClick,\n isActive = false,\n isDisabled = false,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-ui-filter-popup-trigger`;\n return (\n \n {content}\n \n \n );\n};\n\nexport default UiFilterPopupTrigger;\n","import React, { useRef } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Modal from \"../Modal/Modal\";\nimport Overlay from \"react-bootstrap/Overlay\";\nimport UiFilterPopupTrigger from \"../UiFilterPopupTrigger/UiFilterPopupTrigger\";\n\n// styled components\nconst PositionedChild = styled.div<{ hasModalBg: boolean }>`\n top: -${props => props.theme.borders.widths.sm} !important;\n /*\n bumping this up a bit so that it either rises above the sidebar and the\n overlapping avatars in the work metadata team lists or rises above the modal\n bg if specified by props\n */\n z-index: ${props => (props.hasModalBg ? 1100 : 10)};\n`;\n\n// typescript props\ntype Props = {\n children: React.ReactNode;\n className?: string;\n hasModalBg?: boolean;\n isActive?: boolean;\n isDisabled?: boolean;\n onCancelOverlay: () => void;\n onTriggerOverlay: () => void;\n testId?: string;\n triggerContent: React.ReactNode;\n};\nconst UiFilterOverlay = ({\n children,\n className,\n hasModalBg = false,\n isActive = false,\n isDisabled = false,\n onCancelOverlay,\n onTriggerOverlay,\n testId = \"testId\",\n triggerContent\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-ui-filter-overlay`;\n const target = useRef(null);\n return (\n
    \n
    \n \n
    \n {/* this is a bit scorched-earth but i'm not sure why the prop change doesn't seem to be triggering the show/hide behavior in the overlay component anymore. this seems to solve the problem without tearing this component apart. */}\n {isActive ? (\n \n {({ placement, arrowProps, show: _show, popper, ...props }) => (\n <>\n \n {children}\n \n {hasModalBg ? (\n // inserting a fake modal here so we can have the ability to show\n // the screened modal bg while retaining the ability for the\n // overlay popup to be relatively positioned to its trigger\n null}\n onShow={() => null}\n popupContent={
    }\n testId={thisTestId}\n />\n ) : null}\n \n )}\n \n ) : null}\n
    \n );\n};\n\nexport default UiFilterOverlay;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport OrganizationNavigationMenu from \"../OrganizationNavigationMenu/OrganizationNavigationMenu\";\nimport UiFilterOverlay from \"../UiFilterOverlay/UiFilterOverlay\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// styled components\nconst Container = styled.nav`\n align-items: center;\n border-right: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n display: flex;\n padding-right: 2rem;\n`;\nconst TriggerWrapper = styled.span`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n margin-right: 1rem;\n &:after {\n content: \":\";\n }\n`;\n\n// typescript props\ntype Props = {\n activeOverlay: string | null;\n className?: string;\n onHideOverlay: () => void;\n onTriggerOverlay: () => void;\n testId?: string;\n};\n\nconst DirectorViewNavigation = ({\n activeOverlay,\n className,\n onHideOverlay,\n onTriggerOverlay,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-director-view-navigation`;\n const user = useSelector((state: AppStateInterface) => state.user);\n const { urlParams } = useUrlParams();\n const { teamLead } = urlParams;\n const displayUser = teamLead || user;\n\n return (\n \n \n {displayUser?.name}\n \n }\n >\n \n \n \n );\n};\n\nexport default DirectorViewNavigation;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { getTeamNameFromTeam } from \"../../utils/teams\";\nimport { min } from \"lodash\";\n\n// components\nimport AvatarIcon from \"../AvatarIcon/AvatarIcon\";\nimport { TeamInterface } from \"../../interfaces/team\";\n\nconst MAX_COLUMNS = 4;\nconst MAX_TEAMS_PER_COLUMN = 10;\n\n// styled components\nconst Container = styled.div`\n max-height: 36rem;\n overflow-y: auto;\n`;\nconst List = styled.ul<{ numTeams: number }>`\n columns: ${props =>\n `${min([Math.ceil(props.numTeams / MAX_TEAMS_PER_COLUMN), MAX_COLUMNS])}`};\n gap: 2rem;\n`;\nconst ListItem = styled.li`\n // this is some black wizardry for columns -- we will probably refine this\n // menu, so using some hackery to get this to look nice for now\n // https://stackoverflow.com/questions/5314726/css-multi-column-layout-of-list-items-doesnt-align-properly-in-chrome\n -webkit-column-break-inside: avoid;\n height: 2.4em;\n margin-bottom: 0.5em;\n &:after {\n content: \"\";\n display: block;\n }\n`;\nconst NameWrapperButton = styled.button`\n align-items: center;\n background: none;\n border: 0;\n color: ${props => props.theme.colors.all.wolverine};\n display: flex;\n flex: 1;\n\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n }\n`;\nconst Name = styled.span`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n margin-left: 0.5em;\n max-width: 20rem;\n text-align: left;\n // truncate really long team names\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n`;\nconst Icon = styled(AvatarIcon)`\n font-size: 3rem;\n`;\n// typescript props\ntype Props = {\n className?: string;\n onClickTeam: ({\n e,\n team\n }: {\n e: React.MouseEvent;\n team: TeamInterface;\n }) => void;\n teams: Array;\n testId?: string;\n};\n\nconst AllTeamsMenuPopup = ({\n className,\n onClickTeam,\n teams,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-all-teams-menu-popup`;\n return (\n \n \n {teams.map(t => (\n \n onClickTeam({ e, team: t })}\n data-testid={`${t.teamId}-button`}\n key={t.teamId}\n >\n \n {getTeamNameFromTeam(t)}\n \n \n ))}\n \n \n );\n};\n\nexport default AllTeamsMenuPopup;\n","import React, { ReactElement, useState } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport AllTeamsMenuPopup from \"../AllTeamsMenuPopup/AllTeamsMenuPopup\";\nimport InfoPopupContent from \"../InfoPopupContent/InfoPopupContent\";\nimport TriggeredOverlay from \"../TriggeredOverlay/TriggeredOverlay\";\n\n// interfaces\nimport { TeamInterface } from \"../../interfaces/team\";\n\n// styled components\nconst PopupContent = styled(InfoPopupContent)`\n margin-top: 0.8rem;\n margin-left: 3rem;\n`;\n\nconst Trigger = styled.span`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n onClickTeam: ({\n e,\n team\n }: {\n e: React.MouseEvent;\n team: TeamInterface;\n }) => void;\n teams: Array;\n testId?: string;\n};\n\nconst AllTeamsMenu = ({\n className,\n onClickTeam,\n teams,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-all-teams-menu`;\n const [showPopup, setShowPopup] = useState(false);\n function onTogglePopup(nextShow: boolean) {\n setShowPopup(nextShow);\n }\n function onClick({\n e,\n team\n }: {\n e: React.MouseEvent;\n team: TeamInterface;\n }) {\n onClickTeam({ e, team });\n setShowPopup(false);\n }\n return (\n \n }\n testId={thisTestId}\n />\n }\n overlayPlacement=\"bottom\"\n show={showPopup}\n testId={thisTestId}\n triggerAction=\"click\"\n triggerContent={\n view all teams\n }\n />\n );\n};\n\nexport default AllTeamsMenu;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { findIndex, kebabCase, min, sortBy } from \"lodash\";\n\n// components\nimport AvatarIcon from \"../AvatarIcon/AvatarIcon\";\nimport PagedStepper, {\n DEFAULT_NUM_VISIBLE_ITEMS\n} from \"../PagedStepper/PagedStepper\";\nimport Tooltip from \"../Tooltip/Tooltip\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { TeamInterface } from \"../../interfaces/team\";\n\n// utils\nimport { getTeamNameFromTeam } from \"../../utils/teams\";\nimport AllTeamsMenu from \"../AllTeamsMenu/AllTeamsMenu\";\n\nexport const MAX_TEAM_MEMBERS_PER_COLUMN = 15;\n\n// styled components\nconst Container = styled.nav`\n align-items: center;\n display: flex;\n`;\nconst IconWrapper = styled.button<{ isActive: boolean }>`\n background: none;\n border: 0;\n border-bottom: ${props =>\n `${props.theme.borders.widths.md} solid ${\n props.isActive ? props.theme.colors.all.wolverine : \"transparent\"\n }`};\n padding: 0 0 1rem;\n`;\nconst Stepper = styled(PagedStepper)`\n & ul {\n gap: 0.8rem;\n }\n`;\nconst Icon = styled(AvatarIcon)`\n font-size: 3rem;\n`;\nconst TeamPopup = styled.div`\n font-size: 1.1rem;\n`;\nconst PopupHeader = styled.header`\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst DefinitionList = styled.dl`\n margin-top: 0.8rem;\n`;\nconst DefinitionWrapper = styled.div`\n & + & {\n margin-top: 0.4rem;\n }\n`;\nconst Term = styled.dt`\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n\n &::after {\n content: \":\";\n }\n`;\nconst List = styled.ul<{ listLength: number }>`\n && {\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n padding: 0.8rem 0 0;\n margin-top: 0.8rem;\n }\n columns: ${props =>\n `${Math.ceil(props.listLength / MAX_TEAM_MEMBERS_PER_COLUMN)}`};\n gap: 2rem;\n`;\nconst StyledListItem = styled.li`\n list-style-type: none;\n max-width: 12rem;\n word-break: break-word;\n`;\nconst AllTeams = styled(AllTeamsMenu)`\n margin-left: 2rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n teams: Array;\n testId?: string;\n onClickTeam: ({\n e,\n team\n }: {\n e: React.MouseEvent;\n team: TeamInterface;\n }) => void;\n selectedTeam?: TeamInterface | null;\n};\n\nconst FlexibleTeamsNavigation = ({\n className,\n teams,\n testId = \"testId\",\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onClickTeam,\n selectedTeam\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-flexible-teams-navigation`;\n const { trackEvent } = useTracking();\n\n function onShowTooltip({\n e,\n team\n }: {\n e: React.MouseEvent;\n team: TeamInterface;\n }) {\n e.persist();\n trackEvent({\n e,\n label: \"flexible-teams-navigation-tooltip\",\n value: `hovered ${team.teamName} team`\n });\n }\n\n const foundTeamIndex = findIndex(\n teams,\n t => t.teamId === selectedTeam?.teamId\n );\n // substitute 0 if the found index returns -1 so that the paged stepper doesn't throw up\n const activeIndex = foundTeamIndex >= 0 ? foundTeamIndex : 0;\n const stepperIsPaged = teams.length > DEFAULT_NUM_VISIBLE_ITEMS;\n return (\n \n (\n \n ) => onShowTooltip({ e, team: t })}\n placement=\"bottom\"\n popupContent={\n \n {getTeamNameFromTeam(t)}\n {t.createdByUser ? (\n \n \n Created by\n
    {t.createdByUser.name}
    \n
    \n
    \n ) : null}\n \n {sortBy(t.teamMembers, \"name\").map(teamMember => (\n \n {teamMember.name}\n \n ))}\n \n
    \n }\n trigger={\n onClickTeam({ e, team: t })}\n // don't mark anything active if the team wasn't found in the teams list\n isActive={\n !!selectedTeam\n ? t.teamId === selectedTeam.teamId\n : foundTeamIndex >= 0 && activeIndex === index\n }\n key={t.teamId}\n data-testid={`${kebabCase(t.teamName)}-button`}\n >\n \n \n }\n testId={`${thisTestId}-${kebabCase(t.teamName)}`}\n />\n ))}\n numVisibleItems={\n stepperIsPaged ? DEFAULT_NUM_VISIBLE_ITEMS : teams.length\n }\n />\n {stepperIsPaged ? (\n \n ) : null}\n
    \n );\n};\n\nexport default FlexibleTeamsNavigation;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { findIndex, isEmpty, orderBy } from \"lodash\";\n\n// components\nimport Icon from \"../Icon/Icon\";\nimport Stepper from \"../Stepper/Stepper\";\n\n// constants\nimport { directionTypes, sprintStates } from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\n\n// utils\nimport { formatTimestamp } from \"../../utils/date\";\n\n// styled components\nconst StepperContent = styled.div`\n border-left: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n border-right: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n font-family: ${props => props.theme.fonts.primary.name}, sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n padding: 0.5rem 2rem;\n margin: 0;\n`;\nconst StepperIconWrapper = styled.div<{ disabled: boolean }>`\n align-items: center;\n color: ${props =>\n props.disabled\n ? props.theme.colors.all.storm\n : props.theme.colors.all.wolverine};\n display: flex;\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n padding: 0 1rem;\n text-transform: uppercase;\n`;\nconst StepperIcon = styled(Icon)`\n color: currentColor;\n`;\nconst StepperText = styled.span`\n margin: 0rem 1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n isDisabled: boolean;\n onChange: (timerange: TimerangeMetadataInterface) => void;\n steppableSprints: Array;\n testId?: string;\n timerange: TimerangeMetadataInterface;\n};\n\nconst SprintStepper = ({\n className,\n isDisabled = false,\n onChange,\n steppableSprints,\n testId = \"testId\",\n timerange\n}: Props) => {\n const thisTestId = `${testId}-sprint-stepper`;\n const { state } = timerange;\n\n const { trackEvent } = useTracking();\n\n if (isEmpty(steppableSprints)) {\n return null;\n }\n\n const orderedSprints = orderBy(steppableSprints, [\"start\"], [\"asc\"]);\n const currentSprintIndex = findIndex(\n orderedSprints,\n (t: TimerangeMetadataInterface) => t.id === timerange.id\n );\n\n function onChangeSprint({\n e,\n index,\n direction,\n timeranges\n }: {\n e: React.MouseEvent;\n index: number;\n direction: string;\n timeranges: Array;\n }) {\n const updatedTimerange =\n direction === directionTypes.PREV\n ? timeranges[index - 1]\n : timeranges[index + 1];\n\n onChange(updatedTimerange);\n trackEvent({\n e,\n label: \"ui-filter-time-range-change\",\n value: `stepped timerange ${direction} to sprint ${\n updatedTimerange.displayName\n } (${formatTimestamp({\n format: \"MM/DD/YYYY\",\n timestamp: updatedTimerange.start\n })}-${formatTimestamp({\n format: \"MM/DD/YYYY\",\n timestamp: updatedTimerange.end\n })})`\n });\n }\n\n const isNextDisabled =\n isDisabled || currentSprintIndex === orderedSprints.length - 1;\n const isPrevDisabled = isDisabled || currentSprintIndex === 0;\n\n const stepperContent = (\n \n {state === sprintStates.ACTIVE\n ? \"This Sprint\"\n : state === sprintStates.FUTURE\n ? \"Future Sprint\"\n : \"Previous Sprint\"}\n \n );\n return (\n
    \n \n Next\n \n \n }\n onChange={(e: React.MouseEvent, direction: string) =>\n onChangeSprint({\n e,\n index: currentSprintIndex,\n direction,\n timeranges: orderedSprints\n })\n }\n prevButton={\n \n \n Back\n \n }\n testId={thisTestId}\n />\n
    \n );\n};\n\nexport default SprintStepper;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// interfaces\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\n\n// styled components\nconst Container = styled.span`\n display: block;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n timerange: TimerangeMetadataInterface;\n};\n\nconst TimeRangeSelectorLabel = ({\n className,\n testId = \"testId\",\n timerange\n}: Props) => {\n const thisTestId = `${testId}-time-range-selector-label`;\n return (\n \n {timerange.displayName}\n \n );\n};\n\nexport default TimeRangeSelectorLabel;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// constants\nimport { sprintStates } from \"../../constants/constants\";\nimport { useProjectsAndBoardsData } from \"../../hooks/useProjectsAndBoardsData\";\n\n// interfaces\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\nimport { BoardInterface } from \"../../interfaces/sprint-metadata\";\n\n// styled components\nconst Container = styled.span`\n display: block;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst SprintName = styled.span`\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n`;\nconst BoardName = styled.span`\n display: block;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n timerange: TimerangeMetadataInterface;\n};\n\nconst TimeRangeSelectorSprintLabel = ({\n className,\n testId = \"testId\",\n timerange\n}: Props) => {\n const thisTestId = `${testId}-time-range-selector-sprint-label`;\n const { boardId, displayName, state: sprintState } = timerange;\n const { data: projectsAndBoardsData } = useProjectsAndBoardsData();\n const timerangeBoard = projectsAndBoardsData?.boards.find(\n (b: BoardInterface) => b.boardId === boardId\n );\n\n const labelText = `${\n sprintState === sprintStates.ACTIVE\n ? \"This Sprint\"\n : sprintState === sprintStates.FUTURE\n ? \"Future Sprint\"\n : \"Previous Sprint\"\n } - ${displayName}`;\n\n return (\n \n {labelText}\n {!!timerangeBoard ? (\n {timerangeBoard.boardName}\n ) : null}\n \n );\n};\n\nexport default TimeRangeSelectorSprintLabel;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport CloseButton from \"../CloseButton/CloseButton\";\n\n// styled components\nconst PositionedCloseButton = styled(CloseButton)`\n position: absolute;\n top: 2rem;\n right: 2rem;\n`;\nconst Footer = styled.footer`\n background: ${props => props.theme.colors.all.jean};\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n display: flex;\n justify-content: flex-end;\n padding: 2rem 1rem;\n`;\nconst SubmitButton = styled.button<{ disabled: boolean }>`\n background: ${props =>\n props.disabled\n ? props.theme.colors.button.disabled.default.bg\n : props.theme.colors.button.default.default.bg};\n border: 0;\n color: ${props =>\n props.disabled\n ? props.theme.colors.button.disabled.default.fg\n : props.theme.colors.button.default.default.fg};\n transition: 0.2s all;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n letter-spacing: 0.1rem;\n padding: 1rem 3rem;\n\n &:hover {\n background-color: ${props =>\n props.disabled\n ? props.theme.colors.button.disabled.hover.bg\n : props.theme.colors.button.default.hover.bg};\n color: ${props =>\n props.disabled\n ? props.theme.colors.button.disabled.hover.fg\n : props.theme.colors.button.default.hover.fg};\n }\n`;\n\n// typescript props\ntype Props = {\n children: React.ReactNode;\n className?: string;\n isSubmitDisabled?: boolean;\n onCancel: () => void;\n onSubmit: () => void;\n showApplyChanges?: boolean;\n testId?: string;\n};\n\nconst UiFilterPopupWrapper = ({\n children,\n className,\n isSubmitDisabled = false,\n onCancel,\n onSubmit,\n showApplyChanges = true,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-ui-filter-popup-wrapper`;\n return (\n
    \n \n {children}\n {showApplyChanges ? (\n
    \n \n Apply\n \n
    \n ) : null}\n
    \n );\n};\n\nexport default UiFilterPopupWrapper;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport \"react-date-range/dist/styles.css\";\nimport \"react-date-range/dist/theme/default.css\";\nimport moment from \"moment\";\n\n// components\nimport { DateRangePicker } from \"react-date-range\";\nimport TimeRangeSelectorLabel from \"../TimeRangeSelectorLabel/TimeRangeSelectorLabel\";\nimport TimeRangeSelectorSprintLabel from \"../TimeRangeSelectorSprintLabel/TimeRangeSelectorSprintLabel\";\nimport UiFilterPopupWrapper from \"../UiFilterPopupWrapper/UiFilterPopupWrapper\";\n\n// constants\nimport {\n momentUnitTypes,\n pageIds,\n timerangeTypes,\n timerangeTypesMetadata\n} from \"../../constants/constants\";\n\n// hooks\nimport { useParams } from \"react-router-dom\";\n\n// interfaces\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\nimport { getTimestampForDate } from \"../../utils/date\";\n\n// styled components\nconst Container = styled.div`\n background: ${props => props.theme.colors.all.white};\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n display: inline-block;\n position: relative;\n`;\nconst ReactDateRangePicker = styled(DateRangePicker)`\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n z-index: 1;\n\n // internal styles\n & .rdrInputRanges {\n display: none;\n }\n\n & .rdrCalendarWrapper,\n & .rdrDefinedRangesWrapper {\n font-size: inherit;\n }\n\n & .rdrDefinedRangesWrapper {\n border-right: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n color: ${props => props.theme.colors.all.wolverine};\n height: 52rem;\n overflow-y: auto;\n\n & button {\n color: inherit !important;\n }\n }\n\n & .rdrStaticRangeLabel {\n transition: 0.2s all;\n padding: 1rem 0.5rem 1rem 1rem;\n }\n\n & .rdrStaticRange {\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n\n &:hover {\n & .rdrStaticRangeLabel {\n background: ${props => props.theme.colors.all.marvelMint};\n }\n }\n }\n\n & .rdrStaticRangeSelected {\n background: ${props => props.theme.colors.all.marvelMint};\n font-weight: ${props => props.theme.fonts.subheader.weights.black};\n }\n\n & .rdrDateDisplayWrapper {\n background: ${props => props.theme.colors.all.jean};\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n }\n\n & .rdrDateDisplay {\n margin-right: 5rem;\n }\n\n & .rdrDateDisplayItem {\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n border-radius: 1.5em;\n box-shadow: none;\n color: ${props => props.theme.colors.all.wolverine};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n\n & input {\n color: inherit;\n }\n }\n\n & .rdrMonthAndYearWrapper {\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n }\n\n & .rdrMonthAndYearPickers select {\n &:hover {\n background-color: none !important;\n }\n }\n\n & .rdrMonthName {\n color: ${props => props.theme.colors.all.wolverine};\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n }\n\n & .rdrWeekDays {\n color: ${props => props.theme.colors.all.storm};\n }\n\n & .rdrWeekDay {\n color: inherit;\n }\n\n & .rdrSelected,\n & .rdrInRange,\n & .rdrStartEdge,\n & .rdrEndEdge {\n background: ${props => props.theme.colors.all.marvelMint};\n }\n\n & .rdrDay {\n &.rdrDayPassive {\n & span {\n color: ${props => props.theme.colors.all.jean} !important;\n }\n }\n &.rdrDayDisabled {\n background: ${props => props.theme.colors.all.white} !important;\n & span {\n color: ${props => props.theme.colors.all.jean} !important;\n }\n }\n }\n\n & .rdrDayToday {\n & .rdrDayNumber span {\n font-weight: ${props => props.theme.fonts.primary.weights.black};\n color: ${props => props.theme.colors.all.wolverine} !important;\n }\n }\n\n & .rdrDayNumber {\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n & span {\n color: ${props => props.theme.colors.all.wolverine} !important;\n }\n & span::after {\n background: ${props => props.theme.colors.all.wolverine} !important;\n }\n }\n\n & .rdrNextPrevButton {\n &,\n &:hover {\n background: none;\n }\n\n &.rdrPprevButton i {\n border-width: 8px 10px 8px 8px;\n border-color: transparent ${props => props.theme.colors.all.auroraTeal}\n transparent transparent;\n }\n &.rdrNextButton i {\n border-width: 8px 8px 8px 10px;\n border-color: transparent transparent transparent\n ${props => props.theme.colors.all.auroraTeal};\n }\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n onCancel: () => void;\n onSubmit: (selection: TimerangeMetadataInterface) => void;\n selectionTimeranges: Array;\n testId?: string;\n timerange: TimerangeMetadataInterface;\n};\n\ntype ReactDateRangeInterface = {\n id: string;\n endDate: Date;\n startDate: Date;\n key: string;\n};\n\nconst TimeRangeSelector = ({\n className,\n onCancel,\n onSubmit,\n selectionTimeranges,\n testId = \"testId\",\n timerange\n}: Props) => {\n const thisTestId = `${testId}-time-range-selector`;\n const { pageId } = useParams<{ pageId: string }>();\n const [currentSelection, setCurrentSelection] = useState<\n ReactDateRangeInterface\n >({\n id: timerange.id,\n endDate: moment(timerange.end, moment.ISO_8601).toDate(),\n startDate: moment(timerange.start, moment.ISO_8601).toDate(),\n key: \"selection\"\n });\n\n function onClickSubmit({\n allTimeranges,\n selection\n }: {\n allTimeranges: Array;\n selection: ReactDateRangeInterface;\n }) {\n const matchedRange = allTimeranges.find(\n (t: TimerangeMetadataInterface) => t.id === selection.id\n );\n\n // if this is a named timerange and the timerange hasn't been customized\n // by adjusting via the calendar picker\n if (\n matchedRange?.end === selection.endDate.toISOString() &&\n matchedRange?.start === selection.startDate.toISOString()\n ) {\n onSubmit(matchedRange);\n } else {\n onSubmit({\n // use the 'custom' metadata type since the selection either doesn't\n // exactly match a named date range anymore due to changed start/end dates\n // or a matching date range couldn't be found from the passed date ranges\n ...timerangeTypesMetadata[timerangeTypes.CUSTOM],\n // add timestamped start and end attributes\n start: getTimestampForDate(\n moment(selection.startDate).startOf(momentUnitTypes.DAYS)\n ),\n end: getTimestampForDate(\n moment(selection.endDate).endOf(momentUnitTypes.DAYS)\n )\n });\n }\n }\n\n return (\n \n \n onClickSubmit({\n allTimeranges: selectionTimeranges,\n selection: currentSelection\n })\n }\n testId={thisTestId}\n >\n {\n const matchedRange = selectionTimeranges.find(\n (t: TimerangeMetadataInterface) => t.id === selection.id\n );\n\n if (pageId === pageIds.RETROS) {\n // if this is a named timerange and the timerange hasn't been customized\n // by adjusting via the calendar picker -- otherwise, don't allow selection, because\n // retros page can't support custom timeranges right now\n if (\n matchedRange?.end === selection.endDate.toISOString() &&\n matchedRange?.start === selection.startDate.toISOString()\n ) {\n setCurrentSelection(selection);\n }\n } else {\n setCurrentSelection(selection);\n }\n }}\n ranges={[currentSelection]}\n showPreview={false}\n staticRanges={selectionTimeranges.map(\n (option: TimerangeMetadataInterface) => {\n const { end, start, id, timerangeType } = option;\n\n return {\n label:\n timerangeType === timerangeTypes.SPRINTS ? (\n \n ) : (\n \n ),\n range: () => ({\n id,\n // create date objects because that's what the library accepts\n endDate: moment(end, moment.ISO_8601).toDate(),\n startDate: moment(start, moment.ISO_8601).toDate()\n }),\n isSelected: () => currentSelection.id === id\n };\n }\n )}\n direction=\"horizontal\"\n />\n \n \n );\n};\n\nexport default TimeRangeSelector;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport moment from \"moment\";\n\n// components\nimport Icon from \"../Icon/Icon\";\nimport Stepper from \"../Stepper/Stepper\";\nimport Time from \"../Time/Time\";\nimport TimeRange from \"../TimeRange/TimeRange\";\n\n// constants\nimport {\n directionTypes,\n momentUnitTypes,\n timerangeTypesMetadata\n} from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\n\n// utils\nimport {\n formatTimestamp,\n getTimeDifference,\n getTimestampForDate\n} from \"../../utils/date\";\n\n// styled components\nconst StepperContent = styled.div`\n border-left: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n border-right: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n font-family: ${props => props.theme.fonts.primary.name}, sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n padding: 0.5rem 2rem;\n margin: 0;\n`;\nconst StepperIconWrapper = styled.div<{ disabled: boolean }>`\n align-items: center;\n color: ${props =>\n props.disabled\n ? props.theme.colors.all.storm\n : props.theme.colors.all.wolverine};\n display: flex;\n padding: 0 1rem;\n`;\nconst StepperIcon = styled(Icon)`\n color: currentColor;\n`;\nconst StyledTimeRange = styled(TimeRange)`\n display: inline-block;\n`;\nconst StepperText = styled.span`\n margin: 0rem 1rem;\n`;\nconst Clamped = styled.span`\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n display: -webkit-box;\n overflow: hidden;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n isDisabled: boolean;\n onChange: (timerange: TimerangeMetadataInterface) => void;\n testId?: string;\n timerange: TimerangeMetadataInterface;\n};\n\nconst TimerangeStepper = ({\n className,\n isDisabled = false,\n timerange,\n onChange,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-timerange-stepper`;\n const { trackEvent } = useTracking();\n\n function getUpdatedStartAndEnd(\n direction: string,\n initialTimerange: TimerangeMetadataInterface\n ) {\n const unit = momentUnitTypes.DAYS;\n const { start, end } = initialTimerange;\n // adding 1 here because the diff between two dates is basically 0-indexed,\n // ie, the diff between start/end for the same day is 0\n const changeInterval =\n (getTimeDifference({\n base: start,\n comparator: end,\n unit\n }) +\n 1) *\n (direction === directionTypes.PREV ? -1 : 1);\n\n const updatedStart = getTimestampForDate(\n moment(start)\n .add(changeInterval, unit)\n .startOf(unit)\n );\n const updatedEnd = getTimestampForDate(\n moment(end)\n .add(changeInterval, unit)\n .endOf(unit)\n );\n\n return [updatedStart, updatedEnd];\n }\n\n function onChangeTimerange({\n e,\n direction,\n timerange\n }: {\n e: React.MouseEvent;\n direction: string;\n timerange: TimerangeMetadataInterface;\n }) {\n // only change the time range if the direction is previous or if isNextDisabled is falsy\n if (direction === directionTypes.PREV || !isNextDisabled) {\n const { timerangeType } = timerange;\n const [updatedStart, updatedEnd] = getUpdatedStartAndEnd(\n direction,\n timerange\n );\n\n onChange({\n ...timerangeTypesMetadata[timerangeType],\n start: updatedStart,\n end: updatedEnd\n });\n trackEvent({\n e,\n label: \"ui-filter-time-range-change\",\n value: `stepped timerange ${direction} (${formatTimestamp({\n format: \"MM/DD/YYYY\",\n timestamp: updatedStart\n })}-${formatTimestamp({\n format: \"MM/DD/YYYY\",\n timestamp: updatedEnd\n })})`\n });\n }\n }\n\n const timerangeSpansMultipleDays = !!getTimeDifference({\n base: timerange.start,\n comparator: timerange.end,\n unit: momentUnitTypes.DAYS\n });\n const displayTime = timerangeSpansMultipleDays ? (\n \n ) : (\n
    \n );\n })}\n \n \n {\n triggerWriteFeedback({\n comment,\n rating: rating.toString(),\n event,\n widgetName: testId,\n question: descriptionHeader\n });\n setComment(\"\");\n setRating(0);\n setIsSent(true);\n }}\n >\n \n \n \n {isSent && Thank you for your feedback!}\n \n );\n};\n\nexport default FeedbackForm;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { FeedbackEventParams } from \"../../interfaces/labs\";\nimport HtmlText from \"../HtmlText/HtmlText\";\n\nimport FeedbackForm from \"../FeedbackForm/FeedbackForm\";\n\nconst FrameContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n padding: 2rem;\n`;\n\nconst ChartTitle = styled.h3`\n align-items: center;\n display: flex;\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n margin-bottom: 1rem;\n padding: 1rem 1rem 1rem 0;\n`;\n\nconst ChartIframe = styled.iframe`\n width: 100%;\n height: 500px;\n align-self: center;\n`;\n\nconst ChartFooter = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n margin-top: 2rem;\n width: 100%;\n`;\n\nconst Description = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 50%;\n align-items: flex-start;\n`;\n\nconst DescriptionHeader = styled.h4`\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n`;\n\nconst TitleContainer = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n`;\n\nconst NewFlag = styled(\"span\")`\n color: ${props => props.theme.colors.all.auroraTeal};\n display: flex;\n font-size: 1.25rem;\n margin-left: 0.25rem;\n align-self: flex-start;\n`;\n\ntype Props = {\n title: string;\n descriptionHeader: string;\n descriptionBody: string;\n url: string;\n displayIsNew: boolean;\n triggerWriteFeedback: (triggerArgs: FeedbackEventParams) => void;\n};\n\nconst LabsChart = ({\n title,\n descriptionHeader,\n descriptionBody,\n url,\n displayIsNew,\n triggerWriteFeedback\n}: Props): JSX.Element => {\n return (\n \n \n {title}\n {displayIsNew ? New! : null}\n \n \n \n \n {descriptionHeader}\n \n \n \n \n \n );\n};\n\nexport default LabsChart;\n","import { legacyApi } from \"./api\";\n\n// typescript props\ntype ReportsProps = {\n accessToken: string;\n tenantId: number;\n charts: string[];\n};\n\nexport const requestLabsData = async ({\n accessToken,\n tenantId,\n charts\n}: ReportsProps): Promise => {\n const response = await legacyApi.get(`/${tenantId}/labs`, {\n headers: {\n Authorization: `Bearer ${accessToken}`\n },\n params: { files: charts.join(\",\") }\n });\n return response.data;\n};\n","import { useEffect, useState } from \"react\";\nimport { requestLabsData } from \"../../utils/labs\";\nimport { sendEvent } from \"../../utils/uplevelAnalytics\";\nimport { useSelector } from \"react-redux\";\nimport { get, isEmpty, isUndefined } from \"lodash\";\nimport config from \"../../env-config\";\nimport { getTimestampForDate } from \"../../utils/date\";\nimport { FeedbackParams } from \"../../interfaces/labs\";\nimport { captureException, withScope } from \"@sentry/react\";\n\ntype Manifest = {\n experiments: {\n title: string;\n displayIsNew: boolean;\n externalPage: string;\n descriptionHeader: string;\n descriptionBody: string;\n feedbackId: string;\n }[];\n};\n\nexport const useBackingData: (\n manifest: Manifest,\n manualState?: {\n charts: Array<{ id: string; url: string }>;\n isFetching?: boolean;\n error?: boolean;\n sendFeedback?: (feedBackArgs: FeedbackParams) => Promise;\n }\n) => {\n charts: Array<{ id: string; url: string }>;\n isFetching: boolean;\n error: boolean;\n sendFeedback: (feedBackArgs: FeedbackParams) => Promise;\n} = (\n manifest: Manifest,\n manualState?: {\n charts: Array<{ id: string; url: string }>;\n isFetching?: boolean;\n error?: boolean;\n sendFeedback?: (feedBackArgs: FeedbackParams) => Promise;\n }\n): {\n charts: Array<{ id: string; url: string }>;\n isFetching: boolean;\n error: boolean;\n sendFeedback: (feedBackArgs: FeedbackParams) => Promise;\n} => {\n const [isFetching, setIsFetching] = useState(false);\n const [error, setError] = useState(false);\n const [charts, setCharts] = useState>([]);\n const accessToken: string = useSelector(state =>\n get(state, \"auth.authAccessToken\")\n );\n const session = useSelector(state => get(state, \"session\"));\n const tenantId: number = useSelector(state =>\n get(state, \"auth.authParams.tenantId\")\n );\n const farsUrl = config.FARS_URL;\n\n async function sendFeedback({\n widgetName,\n question,\n rating,\n comment\n }: FeedbackParams): Promise {\n const requestParams = {\n accessToken,\n farsUrl,\n tenantId,\n params: {\n session,\n feedback: {\n widgetName,\n question,\n rating,\n enteredFeedback: comment\n },\n uiEvent: {\n eventLabel: \"labs-feedback\",\n timestamp: getTimestampForDate(new Date())\n }\n }\n };\n try {\n sendEvent(requestParams);\n } catch ({ errorType }) {\n sendEvent({\n ...requestParams,\n params: {\n ...requestParams.params,\n error: errorType\n }\n });\n }\n }\n\n useEffect(() => {\n (async () => {\n if (!isUndefined(manualState)) {\n setIsFetching(!!manualState.isFetching);\n setError(!!manualState.error);\n setCharts(manualState.charts);\n } else {\n const requestCharts = manifest.experiments.map(\n (chart: {\n title: string;\n displayIsNew: boolean;\n externalPage: string;\n descriptionHeader: string;\n descriptionBody: string;\n feedbackId: string;\n }): string => chart.externalPage\n );\n try {\n if (!error && !isFetching) {\n setIsFetching(true);\n const fetchedCharts: Record = await requestLabsData(\n {\n accessToken,\n tenantId,\n charts: requestCharts\n }\n );\n if (!isEmpty(fetchedCharts)) {\n setCharts(\n Object.entries(fetchedCharts).map((chart: [string, string]): {\n id: string;\n url: string;\n } => {\n return {\n id: chart[0],\n url: chart[1]\n };\n })\n );\n }\n setIsFetching(false);\n }\n } catch (err) {\n setCharts([]);\n setError(true);\n setIsFetching(false);\n withScope(scope => {\n scope.setContext(\"request-enabled-jira-projects-data\", {\n accessToken,\n tenantId,\n charts: requestCharts\n });\n captureException(err);\n });\n }\n }\n })();\n }, [accessToken, tenantId]);\n return { charts, isFetching, error, sendFeedback };\n};\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\nimport UiCenteringWrapper from \"../../components/UiCenteringWrapper/UiCenteringWrapper\";\nimport PageTitle from \"../../components/PageTitle/PageTitle\";\nimport TemplateHeader from \"../../components/TemplateHeader/TemplateHeader\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport LabsChart from \"./LabsChart\";\nimport FeedbackForm from \"../FeedbackForm/FeedbackForm\";\nimport MANIFESTJSON from \"../../labs.json\";\nimport { useBackingData } from \"./useBackingData\";\nimport { pageIds } from \"../../constants/constants\";\nimport { FeedbackEventParams } from \"../../interfaces/labs\";\n\ntype ManifestChart = {\n title: string;\n displayIsNew: boolean;\n externalPage: string;\n descriptionHeader: string;\n descriptionBody: string;\n feedbackId: string;\n};\n\ntype Props = {\n manualState?: {\n charts: Array<{ id: string; url: string }>;\n isFetching?: boolean;\n error?: boolean;\n manualManifest?: {\n labsHeaderDescription: string;\n experiments: ManifestChart[];\n };\n };\n};\n\nconst FrameContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n`;\n\nconst Container = styled.div`\n padding: 2rem 0;\n ul,\n ol,\n dl {\n list-style-type: initial;\n padding: 0px 0px 0px 40px;\n margin: 0px 0px 10px;\n }\n`;\nconst ContentWrapper = styled.div`\n background: ${props => props.theme.colors.all.white};\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n width: 100%;\n margin-bottom: 2rem;\n`;\n\nconst Title = styled(PageTitle)`\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n padding-bottom: 0.8rem;\n`;\nconst StyledTemplateHeader = styled(TemplateHeader)`\n margin-bottom: 2rem;\n font-size: 2rem;\n`;\n\nconst HeaderBody = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n width: 100%;\n padding: 1rem 2rem;\n`;\n\nconst Description = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 50%;\n align-items: flex-start;\n`;\n\nconst LabsPage: ({ manualState }: Props) => JSX.Element = ({\n manualState\n}: Props): JSX.Element => {\n const MANIFEST = manualState?.manualManifest || MANIFESTJSON;\n const { charts, error, sendFeedback } = useBackingData(MANIFEST, manualState);\n\n const triggerWriteFeedback = ({\n comment,\n rating,\n widgetName,\n question,\n event\n }: FeedbackEventParams): void => {\n event.preventDefault();\n\n sendFeedback({\n widgetName,\n question,\n rating,\n comment\n });\n };\n return (\n \n \n \n \n \n }\n testId={pageIds.LABS}\n />\n \n \n

    {MANIFEST.labsHeaderDescription}

    \n
    \n \n
    \n
    \n
    \n {!error ? (\n \n {MANIFEST.experiments.map(\n (record: ManifestChart): JSX.Element | null => {\n const chartToDisplay:\n | {\n id: string;\n url: string;\n }\n | undefined = charts.find(\n (\n chart:\n | {\n id: string;\n url: string;\n }\n | undefined\n ): boolean => chart?.id === record.externalPage\n );\n if (chartToDisplay) {\n return (\n \n \n \n );\n }\n return null;\n }\n )}\n \n ) : error ? (\n \n \n \n ) : null}\n
    \n
    \n
    \n );\n};\n\nexport default LabsPage;\n","import React, { ReactElement } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport TemplateHeader from \"../TemplateHeader/TemplateHeader\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// utils\nimport { getTeamNameFromTeam } from \"../../utils/teams\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport { isNull } from \"lodash\";\nimport { pageIds, pageMetadata } from \"../../constants/constants\";\n\n// styled components\nconst Header = styled.header`\n font-size: 2rem;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst StyledTemplateHeader = styled(TemplateHeader)`\n border-bottom: 0;\n padding-bottom: 0;\n`;\nconst HeaderWrapper = styled.div`\n align-items: flex-end;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n display: flex;\n justify-content: space-between;\n padding-bottom: 1rem;\n`;\nconst Greeting = styled.h4`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n`;\nconst Title = styled.h3`\n font-size: 2rem;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n font-size: 2rem;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst ContentContainer = styled.div`\n background: ${props => props.theme.colors.all.white};\n align-items: center;\n display: flex;\n justify-content: center;\n min-height: 40rem;\n`;\nconst ContentWidthWrapper = styled.div`\n max-width: 30rem;\n`;\n\n// typescript props\ntype Props = {\n pageId?: string;\n testId?: string;\n};\n\nconst NoAccessPage = ({ pageId, testId = \"testId\" }: Props): ReactElement => {\n const thisTestId = `${testId}-no-access-page`;\n const pageTitle = pageMetadata[pageId || pageIds.START].title;\n const user = useSelector((state: AppStateInterface) => state.user);\n const { urlParams } = useUrlParams();\n const activeTeam = urlParams.team;\n\n return (\n \n \n
    \n Hi, {user?.[\"givenName\"]}\n {isNull(activeTeam) ? null : (\n \n {pageTitle}: {getTeamNameFromTeam(activeTeam)}\n \n )}\n
    \n \n }\n testId={thisTestId}\n />\n \n \n
    \n Looks like you don’t have access to this team’s\n data.\n
    \n

    \n If you think this is an error, have the team’s owner add\n you to the team to see the data.\n

    \n
    \n
    \n \n }\n testId={thisTestId}\n />\n );\n};\n\nexport default NoAccessPage;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport Icon from \"../Icon/Icon\";\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst NoPermissions = ({\n className,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-no-permissions`;\n return (\n
    \n \n Sorry, you currently don’t have permissions to view this data.\n \n }\n header={}\n testId={thisTestId}\n />\n
    \n );\n};\n\nexport default NoPermissions;\n","import { currentTheme } from \"../../themes/currentTheme\";\nimport moment from \"moment\";\nimport { sortBy, min, max, round } from \"lodash\";\n\n// constants\nimport { chartToolTipConfig, momentUnitTypes } from \"../../constants/constants\";\n\n// interfaces\nimport { TooltipPositionerPointObject } from \"highcharts\";\nimport { Benchmark, OrgByTimeItems } from \"../../interfaces/organization\";\nimport { OrgByTimePoint } from \"../../interfaces/charts\";\nimport { UrlParamsInterface } from \"../../interfaces/url-params\";\n\n// utils\nimport {\n getAdjustedTooltipPosition,\n getOverviewTrendlineYAxisLabelFormatter\n} from \"../../utils/chart\";\nimport { hexToRgb } from \"../../utils/color\";\nimport { formatTimestamp } from \"../../utils/date\";\nimport {\n filterTruthyCycleTimeValues,\n splitCycleTimeHours\n} from \"../../utils/cycle-time\";\n\nconst config = ({\n benchmark,\n data,\n selectedStartDate,\n onSelectDate,\n isDaysScale,\n title,\n measure\n}: {\n benchmark?: Benchmark;\n selectedStartDate?: UrlParamsInterface[\"startDate\"];\n data: OrgByTimeItems;\n onSelectDate: (\n pointData: Pick\n ) => void;\n isDaysScale?: boolean;\n title: string;\n measure: \"deep-work\" | \"cycle-time\" | \"release-frequency\";\n}): Highcharts.Options => {\n const sortedData = sortBy(data, [d => d.startDate]);\n // making this the same color as deep work but since this isn't deep work,\n // trying not to confuse the issue by using the health factors definition\n const mainColor = currentTheme.colors.all.auroraTeal;\n const series: Array = [\n {\n data: sortedData.map(d => {\n return {\n // datetime axis needs to use epoch milliseconds\n x: moment(d.startDate).valueOf(),\n y: d.value,\n startDate: d.startDate,\n endDate: formatTimestamp({\n format: \"YYYY-MM-DD\",\n timestamp: d.endDate\n }),\n includesFutureDates: d.includesFutureDates,\n marker: {\n fillColor: d.includesFutureDates\n ? currentTheme.colors.all.white\n : mainColor,\n lineColor: mainColor,\n lineWidth: 2,\n radius: moment(d.startDate).isSame(\n selectedStartDate,\n momentUnitTypes.DAYS\n )\n ? 8\n : 4\n }\n } as OrgByTimePoint;\n }),\n name: title,\n type: \"line\",\n zoneAxis: \"x\",\n zones: [\n {\n value: moment(sortedData[sortedData.length - 2]?.startDate).valueOf()\n },\n {\n dashStyle: \"ShortDot\"\n }\n ]\n }\n ];\n const yAxisValuesWithBenchmarks = [\n ...sortedData.map(d => d.value),\n benchmark?.low || 1,\n benchmark?.high || 0\n ];\n const yMin = min(yAxisValuesWithBenchmarks);\n const yMax = max(yAxisValuesWithBenchmarks);\n\n return {\n chart: {\n height: 500,\n spacingTop: 20,\n style: {\n fontFamily: currentTheme.fonts.primary.name,\n overflow: \"visible\"\n }\n },\n xAxis: {\n accessibility: {\n description: `Dates from ${sortedData[0].startDate} to ${\n sortedData[sortedData.length - 1].endDate\n }`\n },\n minPadding: 0.05,\n maxPadding: 0.05,\n type: \"datetime\",\n dateTimeLabelFormats: { month: \"%b %Y\" },\n lineColor: currentTheme.colors.all.wolverine,\n labels: {\n overflow: \"allow\",\n enabled: true,\n style: {\n color: currentTheme.colors.all.wolverine,\n fontFamily: currentTheme.fonts.subheader.name\n },\n y: 30\n },\n tickColor: currentTheme.colors.all.wolverine\n },\n yAxis: [\n {\n accessibility: {\n description: `${title} from ${Math.round(yMin || 0)} to ${Math.round(\n yMax || 0\n )}`\n },\n min: yMin,\n max: yMax,\n endOnTick: true,\n startOnTick: true,\n labels: {\n x: 0,\n y: -5,\n align: \"left\",\n enabled: true,\n formatter: function() {\n return getOverviewTrendlineYAxisLabelFormatter(\n measure,\n this.isFirst,\n this.isLast,\n isDaysScale,\n this.value\n );\n },\n style: {\n color: currentTheme.colors.all.wolverine,\n fontFamily: currentTheme.fonts.subheader.name\n }\n },\n plotLines: [\n {\n color: currentTheme.colors.all.storm,\n dashStyle: \"Dash\",\n width: 2,\n value: benchmark?.mid\n }\n ],\n plotBands: [\n {\n color: hexToRgb({\n hex: currentTheme.colors.all.iceman,\n opacity: 0.25\n }),\n from: benchmark?.low,\n to: benchmark?.high\n }\n ],\n title: { text: null }\n }\n ],\n legend: {\n enabled: false\n },\n plotOptions: {\n line: {\n connectNulls: true,\n color: mainColor,\n cursor: \"pointer\",\n lineWidth: 2,\n dataLabels: {\n enabled: false\n },\n states: {\n hover: {\n lineWidth: 2\n }\n },\n point: {\n events: {\n click: function() {\n const { endDate, startDate } = this as any;\n onSelectDate({\n endDate,\n startDate\n });\n }\n }\n }\n }\n },\n title: {\n text: undefined\n },\n tooltip: {\n ...chartToolTipConfig,\n positioner: function(\n w: number,\n h: number,\n point: TooltipPositionerPointObject\n ) {\n return getAdjustedTooltipPosition({\n currentPosition: (this as any).getPosition(w, h, point),\n windowScroll: window.scrollY\n });\n }\n },\n series\n };\n};\n\nexport default config;\n","import React, { useMemo } from \"react\";\n\n// components\nimport Chart from \"../Chart/Chart\";\n\n// config\nimport generateConfig from \"./config\";\n\n// constants\nimport { timerangeIds } from \"../../constants/constants\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport {\n Benchmark,\n OrgByTimeItem,\n OrgByTimeItems\n} from \"../../interfaces/organization\";\nimport { OrgByTimePoint } from \"../../interfaces/charts\";\n\n// utils\nimport { createTimestamp } from \"../../utils/date\";\n\n// typescript props\ntype Props = {\n benchmark?: Benchmark;\n className?: string;\n current?: OrgByTimeItem;\n data: OrgByTimeItems;\n isFetchingData?: boolean;\n testId?: string;\n title: string;\n tooltip: React.ReactElement;\n isDaysScale?: boolean;\n measure: \"deep-work\" | \"cycle-time\" | \"release-frequency\";\n};\n\nconst ChartOverviewTrendline = ({\n className,\n current,\n data,\n benchmark,\n isFetchingData = false,\n testId = \"testId\",\n title,\n tooltip,\n isDaysScale,\n measure\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-chart-overview-trendline`;\n const { updateUrlParams } = useUrlParams();\n const selectedStartDate = current?.startDate;\n\n const chart = useMemo(() => {\n const onSelectDate = (\n pointData: Pick\n ) => {\n updateUrlParams({\n endDate: createTimestamp(pointData.endDate),\n startDate: createTimestamp(pointData.startDate),\n timerangeId: timerangeIds.DAYS\n });\n };\n return {\n config: generateConfig({\n benchmark,\n data,\n onSelectDate,\n selectedStartDate,\n isDaysScale,\n title,\n measure\n }),\n id: \"overview-trendline-chart\",\n isFetchingData\n };\n }, [\n benchmark,\n data,\n isFetchingData,\n isDaysScale,\n measure,\n selectedStartDate,\n title,\n updateUrlParams\n ]);\n\n return (\n
    \n \n

    {title}

    \n
    \n );\n};\n\nexport default ChartOverviewTrendline;\n","import React, { ReactElement } from \"react\";\nimport { OrgByTimeBlock } from \"../../interfaces/organization\";\nimport {\n filterTruthyCycleTimeValues,\n splitCycleTimeHours\n} from \"../../utils/cycle-time\";\nimport { round } from \"lodash\";\nimport styled from \"styled-components/macro\";\nimport CycleTimeValueDisplay from \"../CycleTimeValueDisplay/CycleTimeValueDisplay\";\n\n// styled components\nconst Current = styled(CycleTimeValueDisplay)`\n align-items: baseline;\n display: flex;\n flex-wrap: wrap;\n font-size: ${props => props.theme.fonts.primary.sizes.xl};\n margin-left: 1rem;\n\n & > div > span {\n align-items: baseline;\n display: flex;\n gap: 2rem;\n\n & > span {\n line-height: inherit;\n }\n }\n`;\n\nconst SelectedPeriodText = styled.div`\n display: flex;\n align-items: baseline;\n margin: 1rem 0 0 1rem;\n`;\nconst SelectedPeriodValue = styled.b`\n font-family: ${props => props.theme.fonts.subheader.name};\n font-size: ${props => props.theme.fonts.subheader.sizes.xl};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n measure: \"deep-work\" | \"cycle-time\" | \"release-frequency\";\n current?: OrgByTimeBlock;\n isDaysScale?: boolean;\n};\nconst OverviewSummaryCurrentValue = ({\n className,\n testId = \"testId\",\n measure,\n current,\n isDaysScale\n}: Props): ReactElement => {\n const thisTestId = `${testId}-overview-summary-current-value`;\n if (!current?.value)\n return (\n No data for the period selected\n );\n\n if (measure === \"cycle-time\") {\n return (\n ({ ...t, value: round(t.value, 1) }))}\n testId={thisTestId}\n />\n );\n }\n\n return (\n \n \n {current.value.toFixed(measure === \"deep-work\" ? 1 : 0)}\n \n  {measure === \"deep-work\" ? \"Hours\" : \"Releases\"}\n \n );\n};\n\nexport default OverviewSummaryCurrentValue;\n","import React, { ReactElement } from \"react\";\nimport { OrgByTimeBlock } from \"../../interfaces/organization\";\nimport CycleTimeValueDisplay from \"../CycleTimeValueDisplay/CycleTimeValueDisplay\";\nimport {\n filterTruthyCycleTimeValues,\n splitCycleTimeHours\n} from \"../../utils/cycle-time\";\nimport { round } from \"lodash\";\nimport styled from \"styled-components/macro\";\n// styled components\n\nconst Previous = styled.div`\n align-items: baseline;\n display: flex;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n margin: 0 0 3rem 1rem;\n`;\nconst Previous14Days = styled.div`\n display: flex;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n margin: 0 0 3rem 1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n measure: \"deep-work\" | \"cycle-time\" | \"release-frequency\";\n previous?: OrgByTimeBlock;\n isDaysScale?: boolean;\n};\nconst OverviewSummaryPreviousValue = ({\n className,\n testId = \"testId\",\n measure,\n previous,\n isDaysScale\n}: Props): ReactElement => {\n const thisTestId = `${testId}-overview-summary-previous-value`;\n if (!previous?.value)\n return Previous 14 Days: No Data;\n\n if (measure === \"cycle-time\") {\n return (\n \n
    Previous 14 Days:
     \n ({ ...t, value: round(t.value, 1) }))}\n testId={thisTestId}\n />\n
    \n );\n }\n return (\n \n Previous 14 Days:{\" \"}\n {previous.value.toFixed(measure === \"deep-work\" ? 1 : 0)}{\" \"}\n {measure === \"deep-work\" ? \"Hours\" : \"Releases\"}\n \n );\n};\n\nexport default OverviewSummaryPreviousValue;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isNil } from \"lodash\";\n\n// components\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\n\n// constants\n\n// interfaces\nimport {\n Benchmark,\n OrgByTimeItem,\n OrgByTimeItems\n} from \"../../interfaces/organization\";\nimport ChartOverviewTrendline from \"../ChartOverviewTrendline/ChartOverviewTrendline\";\nimport OverviewSummaryCurrentValue from \"../OverviewSummaryCurrentValue/OverviewSummaryCurrentValue\";\nimport OverviewSummaryPreviousValue from \"../OverviewSummaryPreviousValue/OverviewSummaryPreviousValue\";\n\n// styled components\nconst Container = styled.div<{ isError: boolean }>`\n display: flex;\n flex-direction: column;\n justify-content: ${props => (props.isError ? \"flex-start\" : \"space-between\")};\n`;\nconst EmptyStateWrapper = styled.div`\n align-items: center;\n display: flex;\n justify-content: center;\n min-height: 60rem;\n`;\nconst Header = styled.header`\n display: flex;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n align-items: center;\n`;\nconst HeaderText = styled.h4`\n font-family: ${props => props.theme.fonts.header.name}, sans-serif;\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n all: OrgByTimeItems | null;\n benchmark?: Benchmark;\n current?: OrgByTimeItem;\n isEmptyData: boolean;\n isError: boolean;\n isFetching: boolean;\n previous?: OrgByTimeItem;\n testId?: string;\n tooltip: React.ReactElement;\n isDaysScale?: boolean;\n measure: \"deep-work\" | \"cycle-time\" | \"release-frequency\";\n};\n\nconst OverviewSummary = ({\n className,\n all,\n benchmark,\n current,\n isEmptyData,\n isError,\n isFetching,\n previous,\n testId = \"testId\",\n tooltip,\n isDaysScale,\n measure\n}: Props): ReactElement => {\n const thisTestId = `${testId}-overview-summary`;\n return (\n \n
    \n 1 yr Trend\n
    \n \n \n There doesn’t seem to be any data for this date range\n with the filters that are applied.\n \n )\n }\n header={isError ? \"Uh Oh!\" : \"Hmmm.\"}\n testId={testId}\n />\n \n }\n content={\n isError || isEmptyData || isNil(all) ? null : (\n <>\n \n \n \n \n )\n }\n testId={thisTestId}\n />\n
    \n );\n};\n\nexport default OverviewSummary;\n","import moment from \"moment\";\nimport React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { momentUnitTypes } from \"../../constants/constants\";\n\n// components\nimport TimeRange from \"../TimeRange/TimeRange\";\n\n// interfaces\nimport { OrgCycleTimeByTimePoint } from \"../../interfaces/charts\";\n\n// utils\nimport { createTimestamp } from \"../../utils/date\";\nimport CycleTimeValueDisplay from \"../CycleTimeValueDisplay/CycleTimeValueDisplay\";\nimport {\n filterTruthyCycleTimeValues,\n splitCycleTimeHours\n} from \"../../utils/cycle-time\";\nimport { round } from \"lodash\";\n\n// styled components\nconst Container = styled.div`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst Header = styled.header`\n margin-bottom: 1.6rem;\n`;\nconst DefinitionWrapper = styled.div`\n align-items: baseline;\n display: flex;\n`;\nconst Term = styled.dt`\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n`;\n\n// typescript props\ntype Props = {\n context?: {\n point?: OrgCycleTimeByTimePoint;\n };\n};\n\nconst OverviewCycleTimeTrendlineTooltip = ({\n context\n}: Props): ReactElement | null => {\n if (!context?.point) {\n return null;\n }\n const { y, endDate, isDaysScale, startDate } = context.point;\n const thisTestId = `overview-cycle-time-trendline-tooltip`;\n\n return (\n \n
    \n \n
    \n
    \n \n Median cycle time: \n
    \n ({ ...t, value: round(t.value, 1) }))}\n testId={thisTestId}\n />\n
    \n
    \n
    \n
    \n );\n};\n\nexport default OverviewCycleTimeTrendlineTooltip;\n","import { Primitive, z, ZodLiteral } from \"zod\";\nimport { orderedRoles, teamAvatarIcons } from \"../constants/constants\";\nimport { legacyRoles, legacyRolesSnakeCase } from \"../constants/users\";\n\n// start borrowed code from https://tsplay.dev/mxaRKW\ntype MappedZodLiterals = {\n -readonly [K in keyof T]: ZodLiteral;\n};\n\nfunction createManyUnion<\n A extends Readonly<[Primitive, Primitive, ...Primitive[]]>\n>(literals: A) {\n return z.union(\n literals.map(value => z.literal(value)) as MappedZodLiterals\n );\n}\n// end borrowed code\n\nconst orgShortIsoFormatRegex = new RegExp(/^\\d{4}-\\d{2}-\\d{2}/);\n\n//---------- start globals ----------//\nexport const zHexColor = z.string().regex(/^#?([0-9a-f]{6}|[0-9a-f]{3})$/);\nexport const zRoles = createManyUnion([...orderedRoles, \"None\"]);\nexport const zLegacyRoles = createManyUnion(legacyRoles);\nexport const zLegacyRolesSnakeCase = createManyUnion(legacyRolesSnakeCase);\n//---------- end globals ----------//\n\n//---------- start user ----------//\nconst zUserId = z.number();\nconst zUplevelRole = z.union([zRoles, z.null()]);\nconst allUserAttributes = z.object({\n email: z.string().email(),\n enabled_roles: z.array(zLegacyRoles),\n id: zUserId,\n image: z.string().url(),\n include_in_team_roster: z.boolean(),\n name: z.string(),\n reports: z.array(z.undefined()),\n reportGroup: z.string().nullable(),\n role: zLegacyRolesSnakeCase,\n slackAvatar: z.string().url(),\n slackHandle: z.string(),\n team: z.null(),\n tenantAlias: z.null(),\n title: z.string(),\n uplevel_role: zUplevelRole\n});\nexport const zUser = allUserAttributes;\n//---------- end user ----------//\n\n//---------- start teams ----------//\nexport const zTeamAvatarIcons = createManyUnion(teamAvatarIcons);\nexport const zTruthyOrgChartVersion = z.string().startsWith(\"bootstrap_\");\nconst allTeamAttributes = z.object({\n avatarColor: zHexColor,\n avatarIcon: zTeamAvatarIcons,\n createdAt: z.string().regex(orgShortIsoFormatRegex),\n createdByUser: zUser,\n createdByUplevelUserId: z.number().nullable(),\n defaultBoardId: z\n .string()\n .uuid()\n .nullable(),\n defaultProjectId: z\n .string()\n .uuid()\n .nullable(),\n includeInExecCharts: z.boolean(),\n isOrgChartTeam: z.boolean(),\n orgChartTeamLeadId: z.number(),\n orgChartVersion: zTruthyOrgChartVersion,\n orgChartVertical: z.null(),\n teamId: z.string().uuid(),\n teamMembers: z.array(zUser),\n teamMemberUplevelUserIds: z.array(z.number()),\n teamName: z.string(),\n tenantId: z.number(),\n useSprints: z.boolean()\n});\nconst baseTeam = allTeamAttributes.pick({\n avatarColor: true,\n avatarIcon: true,\n defaultBoardId: true,\n defaultProjectId: true,\n isOrgChartTeam: true,\n teamId: true,\n teamMembers: true,\n teamName: true,\n tenantId: true,\n useSprints: true\n});\nexport const zNewFlexTeam = baseTeam.extend({\n teamId: z.null()\n});\nexport const zExistingFlexTeam = allTeamAttributes\n .pick({\n createdByUser: true,\n orgChartVertical: true\n })\n .merge(baseTeam)\n .extend({\n orgChartTeamLeadId: z.null(),\n orgChartVersion: z.null()\n });\nexport const zExistingOrgTeam = allTeamAttributes\n .pick({\n orgChartVersion: true,\n orgChartVertical: true\n })\n .merge(baseTeam)\n .extend({\n createdByUser: z.null(),\n orgChartTeamLeadId: z.number(),\n teamName: z.null()\n });\nexport const zSimpleTeam = allTeamAttributes\n .pick({\n createdAt: true,\n createdByUplevelUserId: true,\n includeInExecCharts: true,\n orgChartVersion: true,\n orgChartVertical: true,\n teamMemberUplevelUserIds: true\n })\n .merge(baseTeam)\n .omit({ teamMembers: true })\n .extend({\n orgChartTeamLeadId: z.number().nullable(),\n orgChartVersion: zTruthyOrgChartVersion.nullable(),\n teamName: z.string().nullable()\n });\n\n//---------- end teams ----------//\n\n//---------- start charts ----------//\nexport const zPoint = z.object({\n x: z.number(),\n y: z.number()\n});\nexport const zBenchmark = z.object({\n low: z.number(),\n mid: z.number(),\n high: z.number()\n});\n//---------- end charts ----------//\n\n//---------- start organization ----------//\nexport const zOrgTimeRange = z.object({\n endDate: z.string().regex(orgShortIsoFormatRegex),\n startDate: z.string().regex(orgShortIsoFormatRegex)\n});\nexport const zOrgTimeRanges = z.array(zOrgTimeRange);\nexport const zSimpleTeamItem = zSimpleTeam.extend({\n teamLeadsName: z.string().nullable(),\n teamName: z.string()\n});\nexport const zOrgTeams = z.array(zSimpleTeam);\nexport const zOrgTeamItems = z.array(zSimpleTeamItem);\n\n// by time\nexport const zOrgByTime = z.record(\n z.string().regex(orgShortIsoFormatRegex),\n z.number().nullable()\n);\nexport const zOrgByTimeItem = zOrgTimeRange.extend({\n includesFutureDates: z.boolean(),\n value: z.number().nullable()\n});\nexport const zOrgByTimeItems = z.array(zOrgByTimeItem);\nexport const zOrgByTimeHighlightDataPoints = z.array(zOrgByTimeItem.optional());\nexport const zOrgPoint = zPoint.merge(zOrgTimeRange);\nexport const zOrgByTimePoint = zOrgPoint.extend({\n includesFutureDates: z.boolean()\n});\nexport const zOrgByGroupPoint = zOrgPoint.extend({\n groupName: z.union([zRoles, z.string().uuid(), z.string()]),\n role: zRoles,\n teamLeadsName: z.string()\n});\n\n// by user\nexport const zOrgByUserDataRecord = z.object({\n userId: zUserId,\n value: z.number().nullable()\n});\nexport const zOrgByUserDataRecordExtended = zOrgByUserDataRecord\n .extend({\n role: zUplevelRole,\n teamLeadsName: z.string(),\n value: z.number()\n })\n .merge(allTeamAttributes.pick({ teamId: true, teamName: true }))\n .merge(allUserAttributes.pick({ reportGroup: true }));\nexport const zOrgByUser = zOrgTimeRange.extend({\n data: z.array(zOrgByUserDataRecord)\n});\n\n// deep work\nexport const zOrgDeepWorkGroups = z.record(\n z.union([zRoles, z.string()]),\n z.array(zOrgByUserDataRecordExtended)\n);\nexport const zOrgDeepWorkByGroup = zOrgTimeRange.extend({\n data: zOrgDeepWorkGroups\n});\n\n// cycle time\nexport const zOrgCycleTimeByTimePoint = zOrgByTimePoint.extend({\n isDaysScale: z.boolean()\n});\n//---------- end organization ----------//\n","import api, { validationHandler } from \"./api\";\nimport moment from \"moment\";\n\nimport {\n compact,\n findIndex,\n flattenDeep,\n groupBy as lodashGroupBy,\n invert,\n isNil,\n partition,\n union,\n uniq,\n pick,\n mapKeys,\n groupBy,\n mapValues,\n flattenDepth\n} from \"lodash\";\n\n// interfaces\nimport {\n OrgByTime,\n OrgByTimeItems,\n OrgByTimePoints,\n OrgDeepWorkByUser,\n OrgDeepWorkByUserDataRecord,\n OrgDeepWorkByUserDataRecordWithNulls,\n OrgDeepWorkGroups,\n OrgTeamItems,\n OrgTeams,\n OrgTimeRange,\n OrgTimeRanges\n} from \"../interfaces/organization\";\nimport { UserReportWithUplevelRole } from \"../interfaces/user\";\nimport { UrlParamsInterface } from \"../interfaces/url-params\";\nimport { AxiosResponse } from \"axios\";\nimport { zOrgByTime, zOrgByUser } from \"../interfaces/zod-schema\";\n\n// utils\nimport { createTimestampWithOffset } from \"./date\";\n\n// constants\nimport {\n groupByTypes,\n managerRoles,\n momentUnitTypes,\n namedTimerangeIds,\n roleTypes\n} from \"../constants/constants\";\nconst invertedRoleTypes = invert(roleTypes);\n\nexport const requestOrganizationTimeRanges = async ({\n accessToken,\n tenantId\n}: {\n accessToken: string;\n tenantId: number;\n}): Promise => {\n const response = await api.get(`/${tenantId}/org/time-ranges/year`, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const requestOrganizationDeepWorkData = async ({\n accessToken,\n endDate,\n tenantId,\n type,\n userIds\n}: {\n accessToken: string;\n endDate?: string;\n tenantId: number;\n type: \"year\" | typeof namedTimerangeIds[\"PREVIOUS_14_DAYS\"];\n userIds?: Array;\n}): Promise => {\n const url = `/${tenantId}/org/deep-work/${\n type === namedTimerangeIds[\"PREVIOUS_14_DAYS\"] ? \"by-user\" : \"year\"\n }`;\n\n let params: { endDate?: string; userIds?: string } = {\n endDate: createTimestampWithOffset(endDate)\n };\n if (type === \"year\" && !!userIds?.length) {\n params = {\n ...params,\n userIds: userIds?.join(\",\")\n };\n }\n\n if (type === \"year\") {\n return api\n .post(url, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n })\n .then(response => validationHandler(zOrgByTime, response))\n .catch(e => Promise.reject(e));\n }\n return api\n .post(url, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n })\n .then(response =>\n validationHandler(zOrgByUser, response)\n )\n .catch(e => Promise.reject(e));\n};\n\nexport const requestOrganizationReleaseFrequencyData = async ({\n accessToken,\n endDate,\n tenantId,\n userIds\n}: {\n accessToken: string;\n endDate?: string;\n tenantId: number;\n userIds?: Array;\n}): Promise => {\n const url = `/${tenantId}/org/release-frequency/year`;\n\n let params: { endDate?: string; userIds?: string } = {\n endDate: createTimestampWithOffset(endDate)\n };\n if (!!userIds?.length) {\n params = {\n ...params,\n userIds: userIds?.join(\",\")\n };\n }\n return api\n .post(url, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n })\n .then(response => validationHandler(zOrgByTime, response))\n .catch(e => Promise.reject(e));\n};\n\nexport const requestOrganizationCycleTimeData = async ({\n accessToken,\n endDate,\n tenantId,\n userIds\n}: {\n accessToken: string;\n endDate?: string;\n tenantId: number;\n userIds?: Array;\n}): Promise => {\n const url = `/${tenantId}/org/cycle-time/year`;\n\n let params: { endDate?: string; userIds?: string } = {\n endDate: createTimestampWithOffset(endDate)\n };\n if (!!userIds?.length) {\n params = {\n ...params,\n userIds: userIds?.join(\",\")\n };\n }\n return api\n .post(url, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n })\n .then(response => validationHandler(zOrgByTime, response))\n .catch(e => Promise.reject(e));\n};\n\nexport const requestOrganizationTeamsData = async ({\n accessToken,\n params,\n tenantId\n}: {\n accessToken: string;\n params: {\n includeFlexTeams: boolean;\n };\n tenantId: number;\n}): Promise => {\n const response: AxiosResponse = await api.post(\n `/${tenantId}/teams`,\n params,\n {\n headers: { Authorization: `Bearer ${accessToken}` }\n }\n );\n return response.data;\n};\n\nexport const getRoleTypesFromUsers = (\n fullOrganizationData: UserReportWithUplevelRole[]\n): Array =>\n uniq(\n compact(fullOrganizationData.map(d => invertedRoleTypes[d.uplevel_role]))\n );\n\nexport const getReportGroupsFromUsers = (\n fullOrganizationData: UserReportWithUplevelRole[]\n): Array => uniq(compact(fullOrganizationData.map(d => d.reportGroup)));\n\nexport const getFilteredTeamMembersMetadata = ({\n allUsers,\n data,\n groupBy,\n teams\n}: {\n allUsers: UserReportWithUplevelRole[];\n data: OrgDeepWorkByUser;\n groupBy: string;\n teams: OrgTeamItems;\n}): Array =>\n flattenDeep(\n compact(\n teams\n .filter(team => {\n return groupBy === groupByTypes.FLEX_TEAM\n ? !team.isOrgChartTeam\n : team.isOrgChartTeam;\n })\n .map(team => {\n const teamMembersValues: Array = compact(\n team.teamMemberUplevelUserIds.map(\n (userId): OrgDeepWorkByUserDataRecord | null => {\n const value = data?.data.find(\n (record: OrgDeepWorkByUserDataRecordWithNulls): boolean =>\n record.userId === userId\n )?.value;\n const userData = allUsers?.find(\n (record: UserReportWithUplevelRole): boolean =>\n record.id === userId\n );\n\n // if this team is a flex team and we couldn't assign a team\n // lead to it before, find this user's org chart team, get their\n // managers id and then use it to find the manager's user\n // metadata\n let teamLeadsName;\n if (isNil(team.teamLeadsName)) {\n const teamLead = allUsers.find(\n t =>\n t.id ===\n teams.find(\n t =>\n t.isOrgChartTeam &&\n t.teamMemberUplevelUserIds.includes(userId)\n )?.orgChartTeamLeadId\n );\n teamLeadsName = teamLead?.name || \"None\";\n } else {\n teamLeadsName = team.teamLeadsName;\n }\n\n // filter out falsy values\n return isNil(value) || isNil(userData)\n ? null\n : {\n userId,\n value,\n role: isNil(userData?.uplevel_role)\n ? \"None\"\n : userData?.uplevel_role,\n reportGroup: isNil(userData?.reportGroup)\n ? \"None\"\n : userData.reportGroup,\n teamId: team.teamId,\n teamName: team.teamName,\n teamLeadsName\n };\n }\n )\n );\n // filter out teams where all values are null\n return !!teamMembersValues.length ? teamMembersValues : null;\n })\n )\n );\n\nexport const getOrgDeepWorkByGroup = ({\n allUsers,\n data,\n groupBy,\n teams,\n urlParamsTeams,\n userIds\n}: {\n allUsers: UserReportWithUplevelRole[];\n userIds: Array;\n teams: OrgTeamItems;\n data: OrgDeepWorkByUser;\n groupBy: UrlParamsInterface[\"groupBy\"];\n urlParamsTeams: UrlParamsInterface[\"teams\"];\n}): OrgDeepWorkGroups => {\n let groupProperty;\n switch (groupBy) {\n case groupByTypes.FLEX_TEAM:\n groupProperty = \"teamId\";\n break;\n case groupByTypes.MANAGER:\n groupProperty = \"teamLeadsName\";\n break;\n case groupByTypes.REPORT_GROUP:\n groupProperty = \"reportGroup\";\n break;\n // groupByTypes.ROLE\n default:\n groupProperty = \"role\";\n break;\n }\n const truthyTeamMemberMetadata = getFilteredTeamMembersMetadata({\n allUsers,\n data,\n groupBy,\n teams\n });\n const filteredTeamMembers = truthyTeamMemberMetadata.filter(t =>\n userIds.includes(t.userId)\n );\n\n const groupedTeamMembers = lodashGroupBy(filteredTeamMembers, groupProperty);\n\n // if the grouping is by flex team, use the urlParamsTeams array to filter\n // only the matching uuids out of the grouped teams, and then remap the keys\n // with the flex team's name\n return groupBy === groupByTypes.FLEX_TEAM\n ? mapKeys(\n !!urlParamsTeams.length\n ? pick(groupedTeamMembers, urlParamsTeams)\n : groupedTeamMembers,\n (v, k) => teams.find(t => k === t.teamId)?.teamName\n )\n : groupedTeamMembers;\n};\n\nexport const getOrganizationIcTeamMembers = (\n fullOrganizationData: Array\n): Array => {\n return fullOrganizationData.filter(\n d => !!d.uplevel_role && !managerRoles.includes(d.uplevel_role)\n );\n};\n\nexport const getFilteredOrganizationUserIds = ({\n organizationIcTeamMembers,\n organizationTeamsData,\n urlParams\n}: {\n organizationIcTeamMembers: Array;\n organizationTeamsData: OrgTeams;\n urlParams: UrlParamsInterface;\n}): Array => {\n const roles = urlParams.roles;\n const reportGroups = urlParams.reportGroups;\n const teams = urlParams.teams;\n\n if (!roles.length && !teams.length && !reportGroups.length) {\n return organizationIcTeamMembers.map(d => d.id);\n }\n\n let unionOrgTeamUserIds: Array = [];\n let unionFlexTeamUserIds: Array = [];\n if (!!teams.length) {\n const [filteredOrgTeamUserIds, filteredFlexTeamUserIds] = partition(\n organizationTeamsData,\n t => t.isOrgChartTeam\n ).map(teamsList =>\n teamsList\n .filter(t => teams.includes(t.teamId))\n .map(t => t.teamMemberUplevelUserIds)\n );\n\n // pass the arrays of userids as arguments\n unionOrgTeamUserIds = union(...filteredOrgTeamUserIds);\n unionFlexTeamUserIds = union(...filteredFlexTeamUserIds);\n }\n\n return organizationIcTeamMembers\n .filter(d => {\n let result = true;\n if (!!roles.length) {\n result = result && roles.includes(invertedRoleTypes[d.uplevel_role]);\n }\n if (!!reportGroups.length && d.reportGroup) {\n result = result && reportGroups.includes(d.reportGroup);\n }\n if (!!unionOrgTeamUserIds.length) {\n result = result && unionOrgTeamUserIds.includes(d.id);\n }\n if (!!unionFlexTeamUserIds.length) {\n result = result && unionFlexTeamUserIds.includes(d.id);\n }\n return result;\n })\n .map(d => d.id);\n};\n\nexport const getExtendedTeamsWithNames = (\n fullOrganizationData: Array,\n organizationTeamsData: OrgTeams,\n organizationIcTeamMembers: Array\n): OrgTeamItems => {\n const organizationIcTeamMemberIds = organizationIcTeamMembers.map(t => t.id);\n const extendedTeams = organizationTeamsData\n .map(team => {\n const teamLead = fullOrganizationData.find(\n d => d.id === team.orgChartTeamLeadId\n );\n const icUserIds = team.teamMemberUplevelUserIds.filter(id =>\n organizationIcTeamMemberIds.includes(id)\n );\n const teamName = team.isOrgChartTeam\n ? teamLead?.name || (team.orgChartTeamLeadId as number).toString()\n : (team.teamName as string);\n const teamLeadsName = team.isOrgChartTeam ? teamName : null;\n return {\n ...team,\n teamLeadsName,\n teamName,\n teamMemberUplevelUserIds: icUserIds\n };\n })\n .filter(t => !!t.teamMemberUplevelUserIds.length);\n return dedupTeamNames(extendedTeams);\n};\n\nexport const dedupTeamNames = (teams: OrgTeamItems): OrgTeamItems => {\n const dedupedTeamNames = mapValues(groupBy(teams, \"teamName\"), teams => {\n // if more than one team is grouped, the name is duplicate\n if (teams.length > 1) {\n return teams.map((t, index) => ({\n ...t,\n // for each duped name past the first, append \" (num)\" to the name\n teamName: `${t.teamName}${!!index ? ` (${index})` : \"\"}`\n }));\n }\n return teams;\n });\n // re-flatten teams into array\n return flattenDepth(Object.values(dedupedTeamNames), 1);\n};\n\nexport const getMappedSummaryData = (\n data: OrgByTime,\n orgTimeRanges: OrgTimeRanges\n): OrgByTimeItems => {\n return Object.keys(data)\n .sort()\n .map(k => {\n const startDate = moment(k).format(\"YYYY-MM-DD\");\n const endDate =\n orgTimeRanges.find(o => o.startDate === startDate)?.endDate ||\n moment(k)\n .add(14, momentUnitTypes.DAYS)\n .format(\"YYYY-MM-DD\");\n return {\n endDate,\n includesFutureDates: moment().isBefore(endDate),\n startDate: startDate,\n value: data[k]\n };\n });\n};\n\nexport const getDisplayTrendlinePoints = (\n points: OrgByTimeItems,\n selectedTimeRange?: OrgTimeRange\n): OrgByTimePoints => {\n if (isNil(selectedTimeRange)) return [];\n const selectedIndex = findIndex(\n points,\n d => d.startDate === selectedTimeRange.startDate\n );\n const previousIndex = findIndex(\n points,\n d =>\n d.startDate ===\n moment(selectedTimeRange.startDate)\n .subtract(14, momentUnitTypes.DAYS)\n .format(\"YYYY-MM-DD\")\n );\n return isNil(selectedIndex)\n ? isNil(previousIndex)\n ? []\n : [points[previousIndex]]\n : [points[previousIndex], points[selectedIndex]];\n};\n","import { useMemo } from \"react\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useQuery, UseQueryResult } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\nimport { OrgByTime } from \"../interfaces/organization\";\n\n// utils\nimport { requestOrganizationCycleTimeData } from \"../utils/organization-data\";\n\nexport const useOrganizationCycleTimeData = (\n options: {\n endDate?: string;\n type: \"year\";\n userIds?: Array;\n },\n canRequest = true\n): UseQueryResult => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const params = useMemo(\n () => ({\n accessToken,\n endDate: options.endDate,\n tenantId,\n userIds: options.userIds\n }),\n [accessToken, options, tenantId]\n );\n\n return useQuery(\n [\"organization-cycle-time\", params],\n () => requestOrganizationCycleTimeData(params),\n {\n enabled: !!accessToken && !!tenantId && canRequest,\n refetchOnWindowFocus: false\n }\n );\n};\n","import React, { ReactElement, useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, isNil, isNull, min } from \"lodash\";\n\n// components\nimport DataDisclaimer from \"../DataDisclaimer/DataDisclaimer\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\nimport OverviewSummary from \"../OverviewSummary/OverviewSummary\";\nimport OverviewCycleTimeTrendlineTooltip from \"../OverviewCycleTimeTrendlineTooltip/OverviewCycleTimeTrendlineTooltip\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useOrganizationCycleTimeData } from \"../../hooks/useOrganizationCycleTimeData\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport {\n OrgByTimeItems,\n OrgTimeRange,\n OrgTimeRanges\n} from \"../../interfaces/organization\";\n\n// utils\nimport {\n getMappedSummaryData,\n getDisplayTrendlinePoints\n} from \"../../utils/organization-data\";\n\n// styled components\nconst ChartGrid = styled.div`\n display: grid;\n grid-template-columns: 1fr;\n grid-gap: 1rem;\n min-height: inherit;\n`;\nconst Header = styled.header`\n display: flex;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n align-items: center;\n margin-bottom: ${props => props.theme.grid.gap};\n`;\nconst MainContent = styled.div`\n min-height: 70rem;\n`;\nconst EmptyStateWrapper = styled(TransitionWrapper)`\n align-items: center;\n display: flex;\n justify-content: center;\n min-height: inherit;\n`;\nconst Footer = styled.footer`\n align-items: center;\n justify-content: flex-end;\n display: flex;\n gap: 10rem;\n margin-bottom: 1rem;\n`;\nconst Benchmark = styled.div`\n align-items: center;\n color: ${props => props.theme.colors.all.storm};\n display: flex;\n`;\nconst BenchmarkLine = styled.div`\n border-top: ${props =>\n `${props.theme.borders.widths.sm} dashed ${props.theme.colors.all.storm}`};\n width: 3rem;\n margin-right: 1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n isFetchingOverviewData: boolean;\n testId?: string;\n userIds: Array | null;\n selectedTimeRange?: OrgTimeRange;\n orgTimeRanges?: OrgTimeRanges;\n};\n\nconst OverviewCycleTime = ({\n className,\n isFetchingOverviewData,\n testId = \"testId\",\n userIds,\n selectedTimeRange,\n orgTimeRanges\n}: Props): ReactElement => {\n const thisTestId = `${testId}-overview-cycle-time`;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const { getOverviewPath } = useUrlParams();\n const {\n data: summaryData,\n isError: isErrorSummaryData,\n isFetching: isFetchingSummaryData,\n isSuccess: isSuccessSummaryData\n } = useOrganizationCycleTimeData(\n {\n type: \"year\",\n userIds: userIds as Array\n },\n !isEmpty(userIds)\n );\n\n // create a sorted array of dates with extended metadata\n const mappedSummaryData: OrgByTimeItems | null = useMemo(() => {\n if (\n isNil(orgTimeRanges) ||\n isNil(summaryData) ||\n Object.values(summaryData).every(v => isNull(v))\n ) {\n return null;\n }\n\n return getMappedSummaryData(summaryData, orgTimeRanges);\n }, [summaryData, orgTimeRanges]);\n\n // get the current and previous trendline points to select for data display\n const [previous, current] = useMemo(() => {\n if (isNil(mappedSummaryData) || isNil(selectedTimeRange)) {\n return [];\n }\n return getDisplayTrendlinePoints(mappedSummaryData, selectedTimeRange);\n }, [mappedSummaryData, selectedTimeRange]);\n\n const isDaysScale = useMemo(() => {\n if (isNil(mappedSummaryData)) {\n return false;\n }\n const truthyValuesInHours = mappedSummaryData\n .map(d => d.value)\n .filter(v => !isNil(v)) as Array;\n return (min(truthyValuesInHours) as number) >= 24;\n }, [mappedSummaryData]);\n\n const hasNoRawSummaryData = useMemo(() => {\n return (\n isErrorSummaryData ||\n (isSuccessSummaryData &&\n (isNil(summaryData) ||\n Object.values(summaryData).every(v => isNull(v))))\n );\n }, [isErrorSummaryData, isSuccessSummaryData, summaryData]);\n const hasNoSummaryData = useMemo(() => {\n return !userIds?.length || isNull(mappedSummaryData);\n }, [mappedSummaryData, userIds]);\n\n const isFetchingRawChartsData = isFetchingSummaryData;\n const isFetchingAnyData = isFetchingRawChartsData || isFetchingOverviewData;\n\n const hasNoFetchedData = !isFetchingAnyData && hasNoRawSummaryData;\n const hasNoFilteredData = !isFetchingAnyData && hasNoSummaryData;\n\n return (\n
    \n
    \n

    Cycle Time

    \n \n
    \n \n {!isErrorSummaryData && (hasNoFetchedData || hasNoFilteredData) ? (\n \n There doesn’t seem to be any data available.\n ) : (\n <>\n

    \n There doesn’t seem to be any data for the filters\n that are applied.\n

    \n

    \n Click{\" \"}\n \n here\n {\" \"}\n to reset all filters.\n

    \n \n )\n }\n header=\"Hmmm.\"\n testId={testId}\n />\n
    \n ) : (\n \n }\n measure={\"cycle-time\"}\n />\n \n )}\n
    \n
    \n {!isFetchingAnyData &&\n (hasNoFetchedData || hasNoFilteredData) ? null : (\n \n \n visible dashed line\n \n Uplevel Benchmark\n \n \n )}\n \n
    \n
    \n );\n};\n\nexport default OverviewCycleTime;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { OrgByGroupPoint } from \"../../interfaces/charts\";\nimport TimeRange from \"../TimeRange/TimeRange\";\n\n// styled components\nconst Container = styled.div`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst Header = styled.header`\n margin-bottom: 1.6rem;\n`;\nconst DefinitionWrapper = styled.div`\n align-items: baseline;\n display: flex;\n`;\nconst Term = styled.dt`\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n`;\n\n// typescript props\ntype Props = {\n context?: {\n point?: OrgByGroupPoint;\n };\n};\n\nconst OverviewDeepWorkScatterplotTooltip = ({\n context\n}: Props): ReactElement | null => {\n if (!context?.point) {\n return null;\n }\n const { x, endDate, startDate, teamLeadsName, role } = context.point;\n const thisTestId = `overview-deep-work-scatterplot-tooltip`;\n return (\n \n
    \n \n
    \n
    \n \n Manager: \n
    {teamLeadsName}
    \n
    \n \n Role: \n
    {role}
    \n
    \n \n Average daily deep work: \n
    {x.toFixed(1)}h
    \n
    \n
    \n
    \n );\n};\n\nexport default OverviewDeepWorkScatterplotTooltip;\n","export const median = (array: Array): number | undefined => {\n if (!!array.length) {\n const sortedArray = array.sort();\n const midpoint = Math.floor(sortedArray.length / 2);\n return !!(array.length % 2)\n ? array[midpoint]\n : (array[midpoint - 1] + array[midpoint]) / 2;\n }\n};\n","import { currentTheme } from \"../../themes/currentTheme\";\nimport {\n flattenDeep,\n groupBy as lodashGroupBy,\n mapValues,\n min,\n reverse,\n sortBy\n} from \"lodash\";\n\n// interfaces\nimport {\n Benchmark,\n OrgDeepWorkByGroup,\n OrgDeepWorkByUserDataRecord\n} from \"../../interfaces/organization\";\nimport { TooltipPositionerPointObject } from \"highcharts\";\n\n// utils\nimport { median } from \"../../utils/math\";\nimport { getAdjustedTooltipPosition } from \"../../utils/chart\";\n\n// constants\nimport {\n chartToolTipConfig,\n groupByTypes,\n iconCrossProfessorX,\n iconPlusMagneto,\n iconStarRogue,\n orderedRoles\n} from \"../../constants/constants\";\nimport { hexToRgb } from \"../../utils/color\";\n\nconst NUM_VISIBLE_ROWS = 10;\n// NB, these are mimicking tableau functionality, we may decide to move these\n// out if other charts need that style\nconst icons = [\n \"circle\",\n \"square\",\n `url(${iconPlusMagneto})`,\n `url(${iconCrossProfessorX})`,\n `url(${iconStarRogue})`,\n \"diamond\",\n \"triangle\",\n \"triangle-down\",\n \"circle\",\n \"square\",\n \"triangle\",\n \"triangle-down\"\n];\nconst ramp = [\n currentTheme.colors.all.beast,\n currentTheme.colors.all.petra,\n currentTheme.colors.all.magneto,\n currentTheme.colors.all.professorX,\n currentTheme.colors.all.rogue,\n currentTheme.colors.all.banshee,\n currentTheme.colors.all.iceman,\n currentTheme.colors.all.cyclops,\n currentTheme.colors.all.nightcrawler,\n currentTheme.colors.all.thunderbird,\n currentTheme.colors.all.pixie,\n currentTheme.colors.all.magma,\n currentTheme.colors.all.sunfire,\n currentTheme.colors.all.juggernaut,\n currentTheme.colors.all.phoenix,\n currentTheme.colors.all.archangel,\n currentTheme.colors.all.gambit,\n currentTheme.colors.all.jubilee\n];\n\n// types\ntype ExtendedUserRecord = OrgDeepWorkByUserDataRecord & {\n sortOrder: number;\n groupName: string;\n};\n\nexport const mapAndSortDataByMedianValue = (\n data: Record>\n): Array<{\n sortOrder: number;\n groupName: string;\n teamMembers: Array;\n medianDeepWorkValue: number;\n}> => {\n const mappedTeamData = Object.values(\n mapValues(data, (teamMembers, groupName) => ({\n groupName,\n teamMembers,\n medianDeepWorkValue: median(\n teamMembers.map(t => t.value as number)\n ) as number\n }))\n );\n return reverse(sortBy(mappedTeamData, \"medianDeepWorkValue\")).map(\n (team, index) => {\n return {\n ...team,\n sortOrder: index,\n teamMembers: team.teamMembers.map(m => ({\n ...m,\n sortOrder: index,\n groupName: team.groupName\n }))\n };\n }\n );\n};\n\nexport const makeRolesConfig = (\n roles: Array\n): Array => {\n return roles.map((role, index) => ({\n role,\n symbol: icons[index],\n fillColor: ramp[index],\n fillOpacity: 0.75\n }));\n};\n\nconst config = ({\n data,\n title,\n benchmark,\n groupBy\n}: {\n data: OrgDeepWorkByGroup;\n title: string;\n groupBy: typeof groupByTypes[keyof typeof groupByTypes];\n benchmark?: Benchmark;\n}): Highcharts.Options => {\n const sortedData = mapAndSortDataByMedianValue(data.data);\n const allDataPoints = flattenDeep(sortedData.map(d => d.teamMembers));\n const dataPointsGroupedByRole = lodashGroupBy(allDataPoints, \"role\");\n const dataRoles = Object.keys(dataPointsGroupedByRole);\n const orderedDataRoles = orderedRoles.filter(role =>\n dataRoles.includes(role)\n );\n const rolesConfig = makeRolesConfig(orderedDataRoles);\n const series = orderedDataRoles.map(role => {\n const points = dataPointsGroupedByRole[role];\n const config = rolesConfig.find(c => c.role === role);\n return {\n name: role,\n id: role,\n fillColor: config?.fillColor,\n color: config?.fillColor,\n marker: config || {},\n data: points.map(p => ({\n endDate: data.endDate,\n marker: config,\n startDate: data.startDate,\n role: p.role,\n teamLeadsName: p.teamLeadsName,\n x: p.value,\n y: p.sortOrder\n })),\n type: \"scatter\"\n } as Highcharts.SeriesOptionsType;\n });\n\n return {\n accessibility: { description: title },\n chart: {\n height: 600,\n marginLeft: 125,\n spacingTop: 20,\n style: {\n fontFamily: currentTheme.fonts.primary.name,\n overflow: \"visible\"\n }\n },\n xAxis: [\n {\n accessibility: {\n description: \"Average daily hours of deep work from 0h to 9h\"\n },\n offset: 20,\n min: 0,\n max: 9,\n maxPadding: 0.1,\n lineColor: currentTheme.colors.all.wolverine,\n labels: {\n format: \"{value}h\",\n style: {\n color: currentTheme.colors.all.wolverine,\n fontFamily: currentTheme.fonts.subheader.name\n },\n y: 30\n },\n tickmarkPlacement: \"on\",\n tickColor: currentTheme.colors.all.wolverine,\n plotLines: [\n {\n color: currentTheme.colors.all.storm,\n dashStyle: \"Dash\",\n width: 2,\n value: benchmark?.mid\n }\n ],\n plotBands: [\n {\n color: hexToRgb({\n hex: currentTheme.colors.all.iceman,\n opacity: 0.25\n }),\n from: benchmark?.low,\n to: benchmark?.high\n }\n ]\n }\n ],\n yAxis: [\n {\n type: \"category\",\n accessibility: {\n description: `Team members grouped by ${groupBy}`\n },\n categories: sortedData.map(d => d.groupName),\n labels: {\n align: \"right\",\n enabled: true,\n step: 1,\n style: {\n color: currentTheme.colors.all.wolverine,\n fontSize: \"1.1rem\",\n fontFamily: currentTheme.fonts.subheader.name,\n textAlign: \"right\",\n textOverflow: \"wrap\"\n },\n useHTML: true\n },\n min: 0,\n // min and max are 0 indexed so this will show up to NUM_VISIBLE_ROWS\n // rows before we start scrolling\n max: min([sortedData.length - 1, NUM_VISIBLE_ROWS - 1]),\n reversed: true,\n scrollbar: {\n barBackgroundColor: currentTheme.colors.all.storm,\n barBorderRadius: 10,\n barBorderWidth: 0,\n buttonBackgroundColor: \"transparent\",\n buttonBorderWidth: 0,\n enabled: sortedData.length > NUM_VISIBLE_ROWS,\n minWidth: 3,\n rifleColor: currentTheme.colors.all.storm,\n trackBackgroundColor: currentTheme.colors.all.lightJean,\n trackBorderRadius: 10,\n trackBorderWidth: 0\n },\n tickmarkPlacement: \"on\",\n title: { text: null }\n }\n ],\n legend: {\n enabled: false\n },\n plotOptions: {\n scatter: {\n jitter: { y: 0.1 },\n marker: { radius: 5 },\n states: {\n inactive: {\n opacity: 1\n }\n }\n }\n },\n title: {\n text: undefined\n },\n tooltip: {\n ...chartToolTipConfig,\n positioner: function(\n w: number,\n h: number,\n point: TooltipPositionerPointObject\n ) {\n return getAdjustedTooltipPosition({\n currentPosition: (this as any).getPosition(w, h, point),\n windowScroll: window.scrollY\n });\n }\n },\n series\n };\n};\n\nexport default config;\n","import React, { ReactElement, useMemo } from \"react\";\n\n// components\nimport Chart from \"../Chart/Chart\";\nimport OverviewDeepWorkScatterplotTooltip from \"../OverviewDeepWorkScatterplotTooltip/OverviewDeepWorkScatterplotTooltip\";\n\n// config\nimport generateConfig from \"./config\";\n\n// interfaces\nimport { Benchmark, OrgDeepWorkByGroup } from \"../../interfaces/organization\";\nimport { groupByTypes } from \"../../constants/constants\";\n\n// typescript props\ntype Props = {\n benchmark?: Benchmark;\n className?: string;\n data: OrgDeepWorkByGroup;\n groupBy: typeof groupByTypes[keyof typeof groupByTypes];\n isFetchingData?: boolean;\n testId?: string;\n title: string;\n};\n\nconst ChartOverviewDeepWorkScatterplot = ({\n benchmark,\n className,\n data,\n groupBy,\n isFetchingData,\n testId = \"testId\",\n title\n}: Props): ReactElement => {\n const thisTestId = `${testId}-chart-overview-deep-work-scatterplot`;\n const chart = useMemo(() => {\n return {\n config: generateConfig({ data, title, benchmark, groupBy }),\n id: \"overview-deep-work-scatterplot-chart\",\n isFetchingData\n };\n }, [data, benchmark, isFetchingData, groupBy, title]);\n\n return (\n
    \n }\n />\n

    {title}

    \n
    \n );\n};\n\nexport default ChartOverviewDeepWorkScatterplot;\n","import React, { useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport GroupBySelector from \"../GroupBySelector/GroupBySelector\";\n\n// constants\nimport { groupByTypes } from \"../../constants/constants\";\nimport { SimpleTeamInterface } from \"../../interfaces/team\";\nimport { groupBy, partition } from \"lodash\";\n\n// typescript props\ntype Props = {\n className?: string;\n availableReportGroups: Array | null;\n availableRoles: Array | null;\n availableTeams: Array | null;\n testId?: string;\n};\n\nconst OverviewGroupBySelector = ({\n className,\n availableReportGroups,\n availableRoles,\n availableTeams,\n testId = \"testId\"\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-overview-group-by-selector`;\n const partitionedTeams = useMemo(\n () => partition(availableTeams, t => t.isOrgChartTeam),\n [availableTeams]\n );\n const flexTeams = partitionedTeams[1];\n return (\n
    \n \n
    \n );\n};\n\nexport default OverviewGroupBySelector;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isNil } from \"lodash\";\n\n// components\nimport ChartOverviewDeepWorkScatterplot from \"../ChartOverviewDeepWorkScatterplot/ChartOverviewDeepWorkScatterplot\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport OverviewGroupBySelector from \"../OverviewGroupBySelector/OverviewGroupBySelector\";\nimport TimeRange from \"../TimeRange/TimeRange\";\n\n// interfaces\nimport {\n Benchmark,\n OrgDeepWorkByGroup,\n OrgTeamItems\n} from \"../../interfaces/organization\";\nimport { formatTimestamp } from \"../../utils/date\";\n\n// styled components\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n`;\nconst Header = styled.header`\n display: flex;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n align-items: center;\n justify-content: space-between;\n`;\nconst EmptyStateWrapper = styled.div`\n align-items: center;\n display: flex;\n justify-content: center;\n min-height: 51rem;\n`;\nconst PrimaryTitle = styled.h4`\n align-items: center;\n display: flex;\n`;\nconst HeaderText = styled.span`\n font-family: ${props => props.theme.fonts.header.name}, sans-serif;\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n`;\nconst Subtitle = styled.h4`\n align-items: center;\n display: flex;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n`;\nconst Selector = styled(OverviewGroupBySelector)`\n align-self: flex-end;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n availableReportGroups: Array | null;\n availableRoles: Array | null;\n availableTeams: OrgTeamItems | null;\n benchmark?: Benchmark;\n data: OrgDeepWorkByGroup | null;\n groupBy: string;\n isEmptyData: boolean;\n isError: boolean;\n isFetching: boolean;\n testId?: string;\n};\n\nconst OverviewDeepWorkByGroup = ({\n className,\n availableReportGroups,\n availableRoles,\n availableTeams,\n benchmark,\n data,\n groupBy,\n isEmptyData,\n isError,\n isFetching,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-overview-deep-work-by-group`;\n return (\n \n
    \n \n Daily Trend\n \n \n \n {isNil(data) ? null : (\n \n )}\n \n
    \n \n \n \n There doesn’t seem to be any data for this date range\n with the filters that are applied.\n \n )\n }\n header={isError ? \"Uh Oh!\" : \"Hmmm.\"}\n testId={testId}\n />\n \n }\n content={\n isError || isEmptyData || isNil(data) ? null : (\n \n )\n }\n testId={thisTestId}\n />\n
    \n );\n};\n\nexport default OverviewDeepWorkByGroup;\n","import moment from \"moment\";\nimport React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { momentUnitTypes } from \"../../constants/constants\";\n\n// components\nimport TimeRange from \"../TimeRange/TimeRange\";\n\n// interfaces\nimport { OrgByTimePoint } from \"../../interfaces/charts\";\n\n// utils\nimport { createTimestamp } from \"../../utils/date\";\n\n// styled components\nconst Container = styled.div`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst Header = styled.header`\n margin-bottom: 1.6rem;\n`;\nconst DefinitionWrapper = styled.div`\n align-items: baseline;\n display: flex;\n`;\nconst Term = styled.dt`\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n`;\n\n// typescript props\ntype Props = {\n context?: {\n point?: OrgByTimePoint;\n };\n};\n\nconst OverviewDeepWorkTrendlineTooltip = ({\n context\n}: Props): ReactElement | null => {\n if (!context?.point) {\n return null;\n }\n const { y, endDate, startDate, includesFutureDates } = context.point;\n const thisTestId = `overview-deep-work-trendline-tooltip`;\n\n return (\n \n
    \n \n {includesFutureDates && As currently scheduled}\n
    \n
    \n \n Average daily deep work: \n
    {y.toFixed(1)}h
    \n
    \n
    \n
    \n );\n};\n\nexport default OverviewDeepWorkTrendlineTooltip;\n","import { useMemo } from \"react\";\n\n// constants\nimport { namedTimerangeIds } from \"../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useQuery, UseQueryResult } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\nimport { OrgByTime, OrgDeepWorkByUser } from \"../interfaces/organization\";\n\n// utils\nimport { requestOrganizationDeepWorkData } from \"../utils/organization-data\";\n\nexport const useOrganizationDeepWorkData = (\n options: {\n endDate?: string;\n type: \"year\" | typeof namedTimerangeIds.PREVIOUS_14_DAYS;\n userIds?: Array;\n },\n canRequest = true\n): UseQueryResult => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const params = useMemo(\n () => ({\n accessToken,\n endDate: options.endDate,\n tenantId,\n type: options.type,\n userIds: options.userIds\n }),\n [accessToken, options, tenantId]\n );\n\n return useQuery(\n [\"organization-deep-work\", params],\n () => requestOrganizationDeepWorkData(params),\n {\n enabled: !!accessToken && !!tenantId && canRequest,\n refetchOnWindowFocus: false\n }\n );\n};\n","import React, { useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, isNil, isNull } from \"lodash\";\n\n// components\nimport DataDisclaimer from \"../DataDisclaimer/DataDisclaimer\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport OverviewDeepWorkByGroup from \"../OverviewDeepWorkByGroup/OverviewDeepWorkByGroup\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\nimport OverviewSummary from \"../OverviewSummary/OverviewSummary\";\nimport OverviewDeepWorkTrendlineTooltip from \"../OverviewDeepWorkTrendlineTooltip/OverviewDeepWorkTrendlineTooltip\";\n\n// constants\nimport { momentUnitTypes, namedTimerangeIds } from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useOrganizationDeepWorkData } from \"../../hooks/useOrganizationDeepWorkData\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport {\n OrgDeepWorkByGroup,\n OrgByTime,\n OrgByTimeItems,\n OrgDeepWorkByUser,\n OrgTimeRange,\n OrgTimeRanges,\n OrgTeamItems,\n Roles\n} from \"../../interfaces/organization\";\nimport { UserReportWithUplevelRole } from \"../../interfaces/user\";\n\n// utils\nimport {\n getOrgDeepWorkByGroup,\n getMappedSummaryData,\n getDisplayTrendlinePoints\n} from \"../../utils/organization-data\";\nimport moment from \"moment\";\n\n// styled components\nconst ChartGrid = styled.div`\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n grid-gap: 1rem;\n`;\nconst Header = styled.header`\n display: flex;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n align-items: center;\n margin-bottom: ${props => props.theme.grid.gap};\n`;\nconst MainContent = styled.div`\n min-height: 70rem;\n`;\nconst EmptyStateWrapper = styled(TransitionWrapper)`\n align-items: center;\n display: flex;\n justify-content: center;\n min-height: inherit;\n`;\nconst Footer = styled.footer`\n align-items: center;\n justify-content: flex-end;\n display: flex;\n gap: 10rem;\n margin-bottom: 1rem;\n`;\nconst Benchmark = styled.div`\n align-items: center;\n color: ${props => props.theme.colors.all.storm};\n display: flex;\n`;\nconst BenchmarkLine = styled.div`\n border-top: ${props =>\n `${props.theme.borders.widths.sm} dashed ${props.theme.colors.all.storm}`};\n width: 3rem;\n margin-right: 1rem;\n`;\n\n// typescript props\ntype Props = {\n availableReportGroups: Array | null;\n availableRoles: Array | null;\n availableTeams: OrgTeamItems | null;\n className?: string;\n fullOrganizationData?: Array;\n isErrorOverviewData: boolean;\n isFetchingOverviewData: boolean;\n testId?: string;\n userIds: Array | null;\n selectedTimeRange?: OrgTimeRange;\n orgTimeRanges?: OrgTimeRanges;\n};\n\nconst OverviewDeepWorkPage = ({\n availableReportGroups,\n availableRoles,\n availableTeams,\n className,\n fullOrganizationData,\n isErrorOverviewData,\n isFetchingOverviewData,\n testId = \"testId\",\n userIds,\n selectedTimeRange,\n orgTimeRanges\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-overview-deep-work-page`;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const { getOverviewPath, urlParams } = useUrlParams();\n // TODO: if we decide to move the filter reset link somewhere else, probably\n // move this to a prop instead of having the urlparams hook\n const groupBy = urlParams.groupBy;\n const urlParamsTeams = urlParams.teams;\n\n const {\n data: summaryData,\n isError: isErrorSummaryData,\n isFetching: isFetchingSummaryData,\n isSuccess: isSuccessSummaryData\n } = useOrganizationDeepWorkData(\n {\n type: \"year\",\n userIds: userIds as Array\n },\n !isEmpty(userIds) && !isNil(selectedTimeRange)\n );\n // create a sorted array of dates with extended metadata\n const mappedSummaryData: OrgByTimeItems | null = useMemo(() => {\n if (\n isNil(orgTimeRanges) ||\n isNil(summaryData) ||\n Object.values(summaryData).every(v => isNull(v))\n ) {\n return null;\n }\n\n return getMappedSummaryData(summaryData as OrgByTime, orgTimeRanges);\n }, [summaryData, orgTimeRanges]);\n\n // get the current and previous trendline points to select for data display\n const [previous, current] = useMemo(() => {\n if (isNil(mappedSummaryData) || isNil(selectedTimeRange)) {\n return [];\n }\n return getDisplayTrendlinePoints(mappedSummaryData, selectedTimeRange);\n }, [mappedSummaryData, selectedTimeRange]);\n const {\n data: byGroupData,\n isError: isErrorByGroupData,\n isFetching: isFetchingByGroupData,\n isSuccess: isSuccessByGroupData\n } = useOrganizationDeepWorkData(\n {\n endDate: moment(selectedTimeRange?.endDate)\n .add(1, momentUnitTypes.DAYS)\n .format(\"YYYY-MM-DD\"),\n type: namedTimerangeIds.PREVIOUS_14_DAYS\n },\n !!selectedTimeRange\n );\n\n // group by-user data based on selected groupBy\n const groupedByGroupData: OrgDeepWorkByGroup | null = useMemo(() => {\n if (\n isNil(fullOrganizationData) ||\n isNil(userIds) ||\n isNil(availableTeams) ||\n isNil(byGroupData) ||\n isNil(urlParamsTeams)\n ) {\n return null;\n }\n\n const typedData = byGroupData as OrgDeepWorkByUser;\n const groupedData = getOrgDeepWorkByGroup({\n allUsers: fullOrganizationData,\n teams: availableTeams,\n data: typedData,\n groupBy,\n urlParamsTeams,\n userIds\n });\n\n if (isEmpty(groupedData)) {\n return null;\n }\n\n return {\n ...typedData,\n data: groupedData\n };\n }, [\n availableTeams,\n byGroupData,\n fullOrganizationData,\n groupBy,\n urlParamsTeams,\n userIds\n ]);\n\n const hasNoRawSummaryData = useMemo(() => {\n return (\n isErrorSummaryData ||\n (isSuccessSummaryData &&\n (isNil(summaryData) ||\n Object.values(summaryData as OrgByTime).every(v => isNull(v))))\n );\n }, [isErrorSummaryData, isSuccessSummaryData, summaryData]);\n const hasNoSummaryData = useMemo(() => {\n return !userIds?.length || isNull(mappedSummaryData);\n }, [mappedSummaryData, userIds]);\n const hasNoRawByGroupData = useMemo(() => {\n return (\n isErrorByGroupData ||\n (isSuccessByGroupData &&\n (byGroupData as OrgDeepWorkByUser).data.every(d => isNull(d.value)))\n );\n }, [byGroupData, isErrorByGroupData, isSuccessByGroupData]);\n const hasNoByGroupData = useMemo(() => isNull(groupedByGroupData), [\n groupedByGroupData\n ]);\n\n const isFetchingRawChartsData =\n isFetchingSummaryData || isFetchingByGroupData;\n const isFetchingAnyData = isFetchingRawChartsData || isFetchingOverviewData;\n\n const hasNoFetchedData =\n !isFetchingAnyData && hasNoRawSummaryData && hasNoRawByGroupData;\n const hasNoFilteredData =\n !isFetchingAnyData && hasNoSummaryData && hasNoByGroupData;\n const isErrorAllData = isErrorSummaryData && isErrorByGroupData;\n\n return (\n
    \n
    \n

    Deep Work

    \n \n
    \n \n {!isErrorAllData && (hasNoFetchedData || hasNoFilteredData) ? (\n \n There doesn’t seem to be any data available.\n ) : (\n <>\n

    \n There doesn’t seem to be any data for the filters\n that are applied.\n

    \n

    \n Click{\" \"}\n \n here\n {\" \"}\n to reset all filters.\n

    \n \n )\n }\n header=\"Hmmm.\"\n testId={testId}\n />\n
    \n ) : (\n \n }\n measure={\"deep-work\"}\n />\n \n \n )}\n
    \n
    \n {!isFetchingAnyData &&\n (hasNoFetchedData || hasNoFilteredData) ? null : (\n \n \n visible dashed line\n \n Uplevel Benchmark\n \n \n )}\n \n
    \n
    \n );\n};\n\nexport default OverviewDeepWorkPage;\n","import React, { ReactElement, useEffect, useMemo, useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { compact, isNull, partition, sortBy } from \"lodash\";\n\n// components\nimport Dropdown from \"../Dropdown/Dropdown\";\n\n// constants\nimport { roleTypes, urlParamKeys } from \"../../constants/constants\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { SelectOptionsInterface } from \"../../interfaces/controls\";\nimport { SimpleTeam } from \"../../interfaces/team\";\n\n// utils\nconst createRoleOptions = (roles: Array | null) =>\n isNull(roles)\n ? []\n : sortBy(\n roles.map(role => {\n return {\n label: roleTypes[role],\n value: role,\n selected: false\n };\n }),\n \"label\"\n );\nconst createReportGroupOptions = (reportGroups: Array | null) =>\n isNull(reportGroups)\n ? []\n : sortBy(\n reportGroups.map(reportGroup => {\n return {\n label: reportGroup,\n value: reportGroup,\n selected: false\n };\n }),\n \"reportGroup\"\n );\nconst createTeamOptions = (\n teams: Array,\n availableTeams: Array | null\n) =>\n isNull(availableTeams)\n ? []\n : sortBy(\n compact(\n teams.map(teamId => {\n const teamMetadata = availableTeams.find(t => t.teamId === teamId);\n return !!teamMetadata\n ? {\n label: teamMetadata.teamName,\n value: teamId,\n selected: false\n }\n : null;\n })\n ),\n \"label\"\n );\n\n// styled components\nconst Container = styled.div`\n display: flex;\n flex-flow: column nowrap;\n padding: 1rem 0;\n`;\nconst FiltersContainer = styled.div`\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n grid-gap: 1rem;\n`;\nconst Select = styled(Dropdown)`\n align-items: stretch;\n flex: 1;\n display: flex;\n flex-flow: column nowrap;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n availableRoles: Array | null;\n availableReportGroups: Array | null;\n availableTeams: Array | null;\n testId?: string;\n};\n\nconst OverviewFilters = ({\n className,\n availableRoles,\n availableReportGroups,\n availableTeams,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-overview-filters`;\n const { updateUrlParams, urlParams } = useUrlParams();\n const selectedReportGroups = urlParams.reportGroups;\n const selectedRoles = urlParams.roles;\n const selectedTeams = urlParams.teams;\n const partitionedTeams = useMemo(\n () => partition(availableTeams, t => t.isOrgChartTeam),\n [availableTeams]\n );\n const flexTeams = partitionedTeams[1];\n const selectedPartitionedTeamIds = useMemo(\n () =>\n partitionedTeams.map(teams =>\n teams.filter(t => selectedTeams.includes(t.teamId)).map(t => t.teamId)\n ),\n [partitionedTeams, selectedTeams]\n );\n\n // ROLES\n const onChangeRole = (selected: Array) => {\n updateUrlParams({\n [urlParamKeys.ROLES]: selected.map(s => s.value)\n });\n };\n const allRoleOptions = useMemo(() => createRoleOptions(availableRoles), [\n availableRoles\n ]);\n const selectedRoleOptions = useMemo(() => createRoleOptions(selectedRoles), [\n selectedRoles\n ]);\n\n // REPORT GROUPS\n const onChangeReportGroup = (selected: Array) => {\n updateUrlParams({\n [urlParamKeys.REPORT_GROUPS]: selected.map(s => s.value)\n });\n };\n const allReportGroupOptions = useMemo(\n () => createReportGroupOptions(availableReportGroups),\n [availableReportGroups]\n );\n const selectedReportGroupOptions = useMemo(\n () => createReportGroupOptions(selectedReportGroups),\n [selectedReportGroups]\n );\n\n // TEAMS\n const onChangeOrgTeam = (selected: Array) => {\n updateUrlParams({\n [urlParamKeys.TEAMS]: [\n ...selected.map(s => s.value),\n ...selectedPartitionedTeamIds[1]\n ]\n });\n };\n const onChangeFlexTeam = (selected: Array) => {\n updateUrlParams({\n [urlParamKeys.TEAMS]: [\n ...selected.map(s => s.value),\n ...selectedPartitionedTeamIds[0]\n ]\n });\n };\n const [allOrgTeamOptions, allFlexTeamOptions] = useMemo(\n () =>\n partitionedTeams.map(teams =>\n createTeamOptions(\n teams.map(t => t.teamId),\n availableTeams\n )\n ),\n [partitionedTeams, availableTeams]\n );\n const [selectedOrgTeamOptions, selectedFlexTeamOptions] = useMemo(\n () =>\n selectedPartitionedTeamIds.map(selectedTeamIds =>\n createTeamOptions(selectedTeamIds, availableTeams)\n ),\n [availableTeams, selectedPartitionedTeamIds]\n );\n\n return (\n \n \n {!!availableRoles?.length ? (\n \n ) : null}\n {!!availableReportGroups?.length ? (\n \n ) : null}\n {!!flexTeams.length ? (\n \n ) : null}\n \n \n \n );\n};\n\nexport default OverviewFilters;\n","import moment from \"moment\";\nimport React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { momentUnitTypes } from \"../../constants/constants\";\n\n// components\nimport TimeRange from \"../TimeRange/TimeRange\";\n\n// interfaces\nimport { OrgByTimePoint } from \"../../interfaces/charts\";\n\n// utils\nimport { createTimestamp } from \"../../utils/date\";\n\n// styled components\nconst Container = styled.div`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst Header = styled.header`\n margin-bottom: 1.6rem;\n`;\nconst DefinitionWrapper = styled.div`\n align-items: baseline;\n display: flex;\n`;\nconst Term = styled.dt`\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n`;\n\n// typescript props\ntype Props = {\n context?: {\n point?: OrgByTimePoint;\n };\n};\n\nconst OverviewReleaseFrequencyTrendlineTooltip = ({\n context\n}: Props): ReactElement | null => {\n if (!context?.point) {\n return null;\n }\n const { y, endDate, startDate } = context.point;\n const thisTestId = `overview-release-frequency-trendline-tooltip`;\n\n return (\n \n
    \n \n
    \n
    \n \n Total number of releases: \n
    {y.toFixed(0)}
    \n
    \n
    \n
    \n );\n};\n\nexport default OverviewReleaseFrequencyTrendlineTooltip;\n","import { useMemo } from \"react\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useQuery, UseQueryResult } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\nimport { OrgByTime } from \"../interfaces/organization\";\n\n// utils\nimport { requestOrganizationReleaseFrequencyData } from \"../utils/organization-data\";\n\nexport const useOrganizationReleaseFrequencyData = (\n options: {\n endDate?: string;\n type: \"year\";\n userIds?: Array;\n },\n canRequest = true\n): UseQueryResult => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const params = useMemo(\n () => ({\n accessToken,\n endDate: options.endDate,\n tenantId,\n userIds: options.userIds\n }),\n [accessToken, options, tenantId]\n );\n\n return useQuery(\n [\"organization-release-frequency\", params],\n () => requestOrganizationReleaseFrequencyData(params),\n {\n enabled: !!accessToken && !!tenantId && canRequest,\n refetchOnWindowFocus: false\n }\n );\n};\n","import React, { useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, isNil, isNull } from \"lodash\";\n\n// components\nimport DataDisclaimer from \"../DataDisclaimer/DataDisclaimer\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\nimport OverviewSummary from \"../OverviewSummary/OverviewSummary\";\nimport OverviewReleaseFrequencyTrendlineTooltip from \"../OverviewReleaseFrequencyTrendlineTooltip/OverviewReleaseFrequencyTrendlineTooltip\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { useOrganizationReleaseFrequencyData } from \"../../hooks/useOrganizationReleaseFrequencyData\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport {\n OrgByTimeItems,\n OrgTimeRange,\n OrgTimeRanges\n} from \"../../interfaces/organization\";\n\n// utils\nimport {\n getMappedSummaryData,\n getDisplayTrendlinePoints\n} from \"../../utils/organization-data\";\n\n// styled components\nconst ChartGrid = styled.div`\n display: grid;\n grid-template-columns: 1fr;\n grid-gap: 1rem;\n min-height: inherit;\n`;\nconst Header = styled.header`\n display: flex;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n align-items: center;\n margin-bottom: ${props => props.theme.grid.gap};\n`;\nconst MainContent = styled.div`\n min-height: 70rem;\n`;\nconst EmptyStateWrapper = styled(TransitionWrapper)`\n align-items: center;\n display: flex;\n justify-content: center;\n min-height: inherit;\n`;\nconst Footer = styled.footer`\n align-items: center;\n justify-content: flex-end;\n display: flex;\n gap: 10rem;\n margin-bottom: 1rem;\n`;\nconst Benchmark = styled.div`\n align-items: center;\n color: ${props => props.theme.colors.all.storm};\n display: flex;\n`;\nconst BenchmarkLine = styled.div`\n border-top: ${props =>\n `${props.theme.borders.widths.sm} dashed ${props.theme.colors.all.storm}`};\n width: 3rem;\n margin-right: 1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n isFetchingOverviewData: boolean;\n testId?: string;\n userIds: Array | null;\n selectedTimeRange?: OrgTimeRange;\n orgTimeRanges?: OrgTimeRanges;\n};\n\nconst OverviewReleaseFrequency = ({\n className,\n isFetchingOverviewData,\n testId = \"testId\",\n userIds,\n selectedTimeRange,\n orgTimeRanges\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-overview-release-frequency`;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const { getOverviewPath } = useUrlParams();\n\n const {\n data: summaryData,\n isError: isErrorSummaryData,\n isFetching: isFetchingSummaryData,\n isSuccess: isSuccessSummaryData\n } = useOrganizationReleaseFrequencyData(\n {\n type: \"year\",\n userIds: userIds as Array\n },\n !isEmpty(userIds)\n );\n\n // create a sorted array of dates with extended metadata\n const mappedSummaryData: OrgByTimeItems | null = useMemo(() => {\n if (\n isNil(orgTimeRanges) ||\n isNil(summaryData) ||\n Object.values(summaryData).every(v => isNull(v))\n ) {\n return null;\n }\n\n return getMappedSummaryData(summaryData, orgTimeRanges);\n }, [summaryData, orgTimeRanges]);\n\n // get the current and previous trendline points to select for data display\n const [previous, current] = useMemo(() => {\n if (isNil(mappedSummaryData) || isNil(selectedTimeRange)) {\n return [];\n }\n return getDisplayTrendlinePoints(mappedSummaryData, selectedTimeRange);\n }, [mappedSummaryData, selectedTimeRange]);\n\n const hasNoRawSummaryData = useMemo(() => {\n return (\n isErrorSummaryData ||\n (isSuccessSummaryData &&\n (isNil(summaryData) ||\n Object.values(summaryData).every(v => isNull(v))))\n );\n }, [isErrorSummaryData, isSuccessSummaryData, summaryData]);\n const hasNoSummaryData = useMemo(() => {\n return !userIds?.length || isNull(mappedSummaryData);\n }, [mappedSummaryData, userIds]);\n\n const isFetchingRawChartsData = isFetchingSummaryData;\n const isFetchingAnyData = isFetchingRawChartsData || isFetchingOverviewData;\n\n const hasNoFetchedData = !isFetchingAnyData && hasNoRawSummaryData;\n const hasNoFilteredData = !isFetchingAnyData && hasNoSummaryData;\n\n return (\n
    \n
    \n

    Release Frequency

    \n \n
    \n \n {!isErrorSummaryData && (hasNoFetchedData || hasNoFilteredData) ? (\n \n There doesn’t seem to be any data available.\n ) : (\n <>\n

    \n There doesn’t seem to be any data for the filters\n that are applied.\n

    \n

    \n Click{\" \"}\n \n here\n {\" \"}\n to reset all filters.\n

    \n \n )\n }\n header=\"Hmmm.\"\n testId={testId}\n />\n
    \n ) : (\n \n }\n measure={\"release-frequency\"}\n />\n \n )}\n
    \n
    \n {!isFetchingAnyData &&\n (hasNoFetchedData || hasNoFilteredData) ? null : (\n \n \n visible dashed line\n \n Uplevel Benchmark\n \n \n )}\n \n
    \n
    \n );\n};\n\nexport default OverviewReleaseFrequency;\n","import { useMemo } from \"react\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useQuery, UseQueryResult } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\nimport { SimpleTeamInterface } from \"../interfaces/team\";\n\n// utils\nimport { requestOrganizationTeamsData } from \"../utils/organization-data\";\n\nexport const useOrganizationTeamsData = (\n includeFlexTeams = true,\n canRequest = true\n): UseQueryResult> => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n\n const params = useMemo(\n () => ({\n includeFlexTeams\n }),\n [includeFlexTeams]\n );\n\n return useQuery(\n [\"organization-teams-data\", { ...params }],\n () =>\n requestOrganizationTeamsData({\n accessToken,\n tenantId,\n params\n }),\n {\n enabled: !!accessToken && !!tenantId && canRequest,\n refetchOnWindowFocus: false\n }\n );\n};\n","import { get } from \"lodash\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useTracking } from \"./useTracking\";\nimport { useQuery, UseQueryResult } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\nimport { OrgTimeRanges } from \"../interfaces/organization\";\n\n// utils\nimport { requestOrganizationTimeRanges } from \"../utils/organization-data\";\nimport { useMemo } from \"react\";\n\nexport const useOrganizationTimeRanges = (\n canRequest = true\n): UseQueryResult => {\n const { trackError } = useTracking();\n\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const params = useMemo(\n () => ({\n accessToken,\n tenantId\n }),\n [accessToken, tenantId]\n );\n\n return useQuery(\n [\"organization-time-ranges\", params],\n () => requestOrganizationTimeRanges(params),\n {\n enabled: !!accessToken && !!tenantId && canRequest,\n refetchOnWindowFocus: false,\n onError: error => {\n return trackError({\n errorType: get(error, \"errorType\"),\n errorParams: {\n id: `fetch-organization-timeranges`,\n requestParams: get(error, \"errorParams.requestParams\")\n }\n });\n }\n }\n );\n};\n","import React, { useEffect, useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isNil, isNull } from \"lodash\";\nimport moment from \"moment\";\n\n// components\nimport NoPermissions from \"../NoPermissions/NoPermissions\";\nimport OverviewCycleTime from \"../OverviewCycleTime/OverviewCycleTime\";\nimport OverviewDeepWorkPage from \"../OverviewDeepWorkPage/OverviewDeepWorkPage\";\nimport OverviewFilters from \"../OverviewFilters/OverviewFilters\";\nimport OverviewReleaseFrequency from \"../OverviewReleaseFrequency/OverviewReleaseFrequency\";\nimport PageTitle from \"../PageTitle/PageTitle\";\nimport TemplateHeader from \"../TemplateHeader/TemplateHeader\";\nimport UiCenteringWrapper from \"../UiCenteringWrapper/UiCenteringWrapper\";\n\n// constants\nimport { pageIds, pageMetadata } from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useLocation } from \"react-router-dom\";\nimport { useOrganizationTeamsData } from \"../../hooks/useOrganizationTeamsData\";\nimport { useOrganizationTimeRanges } from \"../../hooks/useOrganizationTimeRanges\";\nimport { useFullOrganizationData } from \"../../hooks/useFullOrganizationData\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { UserReportWithUplevelRole } from \"../../interfaces/user\";\nimport {\n OrgTeamItems,\n OrgTimeRange,\n Roles\n} from \"../../interfaces/organization\";\n\n// utils\nimport { getOverviewPageTitle } from \"../../utils/overview\";\nimport {\n getFilteredOrganizationUserIds,\n getRoleTypesFromUsers,\n getExtendedTeamsWithNames,\n getOrganizationIcTeamMembers,\n getReportGroupsFromUsers\n} from \"../../utils/organization-data\";\nimport { parseQuerystring } from \"../../utils/url-params\";\nimport SupportEmailLink from \"../SupportEmailLink/SupportEmailLink\";\nimport HtmlText from \"../HtmlText/HtmlText\";\n\n// styled components\nconst ContentWrapper = styled.div`\n background: ${props => props.theme.colors.all.white};\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n`;\nconst Title = styled(PageTitle)`\n margin-right: 1rem;\n`;\nconst Filters = styled(OverviewFilters)`\n margin-bottom: ${props => props.theme.grid.gap};\n`;\nconst MessageBlock = styled.div`\n margin-bottom: 2rem;\n background: ${props => props.theme.colors.all.auroraTeal};\n color: ${props => props.theme.colors.all.white};\n padding: 2rem;\n`;\nconst Email = styled(SupportEmailLink)`\n && {\n color: ${props => props.theme.colors.all.white};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n &:hover {\n color: ${props => props.theme.colors.all.marvelMint};\n }\n }\n`;\nconst SupportText = styled.p`\n margin: 0;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst OverviewPage = ({\n className,\n testId = \"testId\"\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-overview-page`;\n const location = useLocation();\n const { urlParams } = useUrlParams();\n const parsedQuerystring = parseQuerystring(location.search);\n const querystringStartDate = parsedQuerystring.startDate;\n const querystringEndDate = parsedQuerystring.endDate;\n\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const displayTitle = pageMetadata[pageIds.OVERVIEW].title;\n\n const {\n data: timeRangesData,\n isError: isErrorOrganizationTimeRanges,\n isFetching: isFetchingOrganizationTimeRanges\n } = useOrganizationTimeRanges();\n const selectedTimeRange: OrgTimeRange | undefined = useMemo(() => {\n if (!!querystringEndDate && !!querystringStartDate) {\n return {\n endDate: moment(querystringEndDate).format(\"YYYY-MM-DD\"),\n startDate: moment(querystringStartDate).format(\"YYYY-MM-DD\")\n };\n }\n if (timeRangesData?.length) {\n const nonFutureTimeRanges = timeRangesData.filter(t =>\n moment(t.endDate).isBefore(moment())\n );\n return nonFutureTimeRanges?.pop();\n }\n }, [querystringStartDate, querystringEndDate, timeRangesData]);\n\n const {\n data: organizationTeamsData,\n isError: isErrorOrganizationTeamsData,\n isFetching: isFetchingOrganizationTeamsData\n } = useOrganizationTeamsData();\n\n const {\n data: fullOrganizationData,\n isError: isErrorFullOrganizationData,\n isFetching: isFetchingFullOrganizationData\n } = useFullOrganizationData();\n\n // build a subset of fullOrganizationData with leadership roles filtered out\n const organizationIcTeamMembers: Array<\n UserReportWithUplevelRole\n > | null = useMemo(() => {\n if (isNil(fullOrganizationData)) {\n return null;\n }\n return getOrganizationIcTeamMembers(fullOrganizationData);\n }, [fullOrganizationData]);\n\n // build a list of userIds filtered based on the current url params\n const filteredOrganizationUserIds: Array | null = useMemo(() => {\n if (isNil(organizationIcTeamMembers) || isNil(organizationTeamsData)) {\n return null;\n }\n return getFilteredOrganizationUserIds({\n organizationIcTeamMembers,\n organizationTeamsData,\n urlParams\n });\n }, [organizationIcTeamMembers, organizationTeamsData, urlParams]);\n\n // pull a list of all the roles from the ic only team members to use in the\n // filter dropdown.\n const availableRoles: Array | null = useMemo(() => {\n if (isNil(organizationIcTeamMembers)) {\n return null;\n }\n return getRoleTypesFromUsers(organizationIcTeamMembers);\n }, [organizationIcTeamMembers]);\n\n const availableReportGroups: Array | null = useMemo(() => {\n if (isNil(organizationIcTeamMembers)) {\n return null;\n }\n return getReportGroupsFromUsers(organizationIcTeamMembers);\n }, [organizationIcTeamMembers]);\n\n // org chart teams don't have names, because\n // they use the name of their team lead\n // instead. populate all the org chart teams\n // with their team lead's name to use in the\n // filter dropdown.\n const extendedTeamsWithNames: OrgTeamItems | null = useMemo(() => {\n if (\n isNil(fullOrganizationData) ||\n isNil(organizationTeamsData) ||\n isNull(organizationIcTeamMembers)\n ) {\n return null;\n }\n return getExtendedTeamsWithNames(\n fullOrganizationData,\n organizationTeamsData,\n organizationIcTeamMembers\n );\n }, [fullOrganizationData, organizationTeamsData, organizationIcTeamMembers]);\n\n const isFetchingOverviewData =\n isFetchingOrganizationTeamsData ||\n isFetchingFullOrganizationData ||\n isFetchingOrganizationTimeRanges;\n const isErrorOverviewData =\n isErrorOrganizationTeamsData ||\n isErrorFullOrganizationData ||\n isErrorOrganizationTimeRanges;\n\n // page title change\n useEffect(() => {\n document.title = getOverviewPageTitle(displayTitle);\n }, [displayTitle, location]);\n\n const deepWorkDisplayContent = flags?.[\"overview-deep-work\"] ? (\n \n ) : null;\n\n const releaseFrequencyDisplayContent = flags?.[\n \"overview-release-frequency\"\n ] ? (\n \n ) : null;\n\n const cycleTimeDisplayContent = flags?.[\"overview-cycle-time\"] ? (\n \n ) : null;\n\n const overviewDisplayContent = flags?.overview ? (\n <>\n {deepWorkDisplayContent}\n {releaseFrequencyDisplayContent}\n {cycleTimeDisplayContent}\n \n ) : (\n \n );\n\n const overviewPageMessage = !!flags?.[\"overview-page-message\"] ? (\n \n \n \n If you have questions, please don’t hesitate to reach out to us at{\" \"}\n \n \n \n ) : null;\n\n return (\n
    \n {overviewPageMessage}\n \n }\n testId={thisTestId}\n />\n \n \n {overviewDisplayContent}\n \n \n
    \n );\n};\n\nexport default OverviewPage;\n","import { getPageTitle } from \"./router\";\n\nexport const getOverviewPageTitle = (title: string): string =>\n getPageTitle(title);\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\nimport { UserReportInterface } from \"../../interfaces/user\";\n\n// styled components\nconst Container = styled.section`\n border: ${props =>\n `${props.theme.borders.widths.md} solid ${props.theme.colors.border}`};\n display: flex;\n padding: 1rem;\n width: 25rem;\n`;\nconst AvatarWrapper = styled.div`\n margin-right: 1rem;\n max-width: 9.9rem;\n`;\nconst Avatar = styled(SlackAvatar)`\n border-radius: 50%;\n height: 6.3rem;\n width: 6.3rem;\n border: ${props => `.2rem solid ${props.theme.colors.border}`};\n`;\nconst Name = styled.header`\n font-family: ${props => props.theme.fonts.header.name}, serif;\n font-size: ${props => props.theme.fonts.header.sizes.sm};\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n margin-bottom: 0.5rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n metadata?: React.ReactNode;\n person: UserReportInterface;\n testId?: string;\n};\n\nexport const PersonCard = ({\n className,\n metadata = null,\n person,\n testId = \"testId\"\n}: Props) => {\n const { image, name } = person;\n\n return (\n \n \n \n \n
    \n {name}\n {metadata}\n
    \n
    \n );\n};\n\nexport default PersonCard;\n","import { get } from \"lodash\";\nimport { legacyApi } from \"./api\";\n\n// constants\nimport { pageIds, pageMetadata } from \"../constants/constants\";\n\n// utils\nimport { getPageTitle } from \"./router\";\n\n// typescript props\ntype ReportsProps = {\n accessToken: string;\n tenantId: number;\n users: Array<{ email: string }>;\n};\n\nexport const getReportsPageTitle = () => {\n const reportsPageMetadata = pageMetadata[pageIds.REPORTS];\n return getPageTitle(get(reportsPageMetadata, \"title\"));\n};\n\nexport const requestReportsList = async ({\n accessToken,\n tenantId,\n users\n}: ReportsProps): Promise => {\n const response = await legacyApi.get(`/${tenantId}/1-on-1-pdfs`, {\n headers: {\n Authorization: `Bearer ${accessToken}`\n },\n params: { users: users.map(user => user.email).join(\",\") }\n });\n return response.data;\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport { get, isUndefined } from \"lodash\";\nimport { captureException, withScope } from \"@sentry/react\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useOrganizationData } from \"../../hooks/useOrganizationData\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { UserInterface, UserReportInterface } from \"../../interfaces/user\";\nimport { ListInterface } from \"../../interfaces/reports-list\";\n\n// utils\nimport parseData from \"./parser\";\nimport { requestReportsList } from \"../../utils/reports\";\n\nexport const useBackingData = (manualState?: {\n data: Array;\n isFetchingData?: boolean;\n hasError?: boolean;\n}): [Array | null, boolean, boolean] => {\n const [data, _setData] = useState | null>(null);\n const [isFetchingData, _setIsFetchingData] = useState(false);\n const [hasError, _setHasError] = useState(false);\n\n const { data: orgChartRootTeam } = useOrganizationData();\n const accessToken = useSelector((state: AppStateInterface) =>\n get(state, \"auth.authAccessToken\")\n );\n const user: UserInterface = useSelector((state: AppStateInterface) =>\n get(state, \"user\")\n );\n const tenantId = useSelector((state: AppStateInterface) =>\n get(state, \"auth.authParams.tenantId\")\n );\n const reportingTeam = useMemo(() => {\n if (!isUndefined(orgChartRootTeam)) {\n return user.enabled_roles.includes(\"manager-self\") &&\n !!orgChartRootTeam?.teamMembers\n ? orgChartRootTeam.teamMembers.filter(\n (u: UserReportInterface) => u.id !== user.id\n )\n : [user];\n }\n return [];\n }, [orgChartRootTeam, user]);\n\n useEffect(() => {\n (async () => {\n if (!isUndefined(manualState)) {\n _setIsFetchingData(!!manualState.isFetchingData);\n _setHasError(!!manualState.hasError);\n _setData(manualState.data);\n } else {\n try {\n if (!hasError && !isFetchingData && !!reportingTeam.length) {\n _setIsFetchingData(true);\n const responseData = await requestReportsList({\n accessToken,\n tenantId,\n users: reportingTeam\n });\n const parsedData = parseData(responseData, reportingTeam);\n _setData(parsedData);\n _setIsFetchingData(false);\n }\n } catch (e) {\n withScope(scope => {\n scope.setContext(\"request-reports-list\", { users: reportingTeam });\n captureException(e);\n });\n _setData(null);\n _setHasError(true);\n _setIsFetchingData(false);\n }\n }\n })();\n }, [accessToken, tenantId, reportingTeam]);\n\n return [data, isFetchingData, hasError];\n};\n","// interfaces\nimport {\n ListInterface,\n ListResponseInterface\n} from \"../../interfaces/reports-list\";\nimport { UserReportInterface } from \"../../interfaces/user\";\n\nexport default (\n data: ListResponseInterface,\n team: Array\n): Array => {\n return team.map(t => {\n const url = data[t.email];\n return {\n user: t,\n url\n };\n });\n};\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, isNull } from \"lodash\";\n\n// components\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport PersonCard from \"../PersonCard/PersonCard\";\nimport Spinner from \"../Spinner/Spinner\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\n\n// hooks\nimport { useBackingData } from \"./useBackingData\";\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { ListInterface } from \"../../interfaces/reports-list\";\n\n// styled components\nconst Container = styled.div`\n min-height: 40rem;\n`;\nconst SpinnerWrapper = styled.div`\n align-items: center;\n display: flex;\n`;\nconst Card = styled(PersonCard)`\n background: ${props => props.theme.colors.all.white};\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n`;\nconst Reports = styled.ul`\n display: grid;\n gap: 2rem;\n grid-template-columns: 25rem;\n\n @media (min-width: ${props => props.theme.breakpoints.md}) {\n grid-template-columns: repeat(2, 25rem);\n }\n @media (min-width: ${props => props.theme.breakpoints.lg}) {\n grid-template-columns: repeat(3, 25rem);\n }\n`;\nconst DownloadLink = styled.a`\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n manualState?: {\n data: Array;\n isFetchingData?: boolean;\n hasError?: boolean;\n };\n testId?: string;\n};\n\nconst ReportsList = ({ className, manualState, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-reports-list`;\n const [reportsListData, isFetchingData, hasError] = useBackingData(\n manualState\n );\n const { trackEvent } = useTracking();\n\n function onClickDownloadLink({\n e,\n report\n }: {\n e: React.MouseEvent;\n report: ListInterface;\n }) {\n e.preventDefault();\n trackEvent({\n e,\n label: `1-1-download-link-click`,\n value: `clicked download link for ${report.user.name} 1:1 report`\n });\n window.open(report.url, \"_blank\");\n }\n\n let displayContent;\n\n if (isFetchingData) {\n displayContent = (\n \n Loading reports...\n \n \n );\n } else if (hasError) {\n displayContent = (\n \n );\n } else if (isNull(reportsListData)) {\n displayContent =
    ;\n } else if (reportsListData.every(report => isEmpty(report.url))) {\n displayContent = (\n

    \n No 1:1 reports are available at this time. These reports are generated\n weekly, so please check back later.\n

    \n );\n } else {\n displayContent = (\n \n {reportsListData.map(report => {\n return (\n
  • \n ) =>\n onClickDownloadLink({ e, report })\n }\n href={report.url}\n >\n Download 1:1 report\n \n ) : null\n }\n />\n
  • \n );\n })}\n
    \n );\n }\n\n return (\n \n {displayContent}\n \n );\n};\n\nexport default ReportsList;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport ReportsList from \"../ReportsList/ReportsList\";\nimport PageTitle from \"../../components/PageTitle/PageTitle\";\nimport TemplateHeader from \"../../components/TemplateHeader/TemplateHeader\";\nimport UiCenteringWrapper from \"../../components/UiCenteringWrapper/UiCenteringWrapper\";\n\n// constants\nimport { pageIds, pageMetadata } from \"../../constants/constants\";\n\n// styled components\nconst ContentWrapper = styled.div`\n background: ${props => props.theme.colors.all.white};\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n`;\nconst Title = styled(PageTitle)`\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n padding-bottom: 0.8rem;\n`;\nconst StyledTemplateHeader = styled(TemplateHeader)`\n margin-bottom: 2rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst ReportsBaseTemplate = ({ className, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-reports-base-template`;\n\n return (\n
    \n \n \n }\n testId={pageIds.REPORTS}\n />\n \n \n \n \n
    \n );\n};\n\nexport default ReportsBaseTemplate;\n","import React, { ReactElement, useEffect } from \"react\";\nimport { get } from \"lodash\";\n\n// components\nimport { Redirect } from \"react-router-dom\";\nimport ReportsBaseTemplate from \"../ReportsBaseTemplate/ReportsBaseTemplate\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useLocation } from \"react-router-dom\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// utils\nimport { getReportsPageTitle } from \"../../utils/reports\";\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst ReportsPage = ({ className, testId = \"testId\" }: Props): ReactElement => {\n const thisTestId = `${testId}-reports-page`;\n const location = useLocation();\n const hasReports = useSelector(\n (state: AppStateInterface) => !!get(state, \"flags.reports\")\n );\n\n // page title change\n useEffect(() => {\n document.title = getReportsPageTitle();\n }, [location]);\n\n return hasReports ? (\n
    \n \n
    \n ) : (\n \n );\n};\n\nexport default ReportsPage;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, isNull, kebabCase, startCase } from \"lodash\";\n\n// components\nimport ChartCycleTime from \"../ChartCycleTime/ChartCycleTime\";\nimport CycleTimeValueDisplay from \"../CycleTimeValueDisplay/CycleTimeValueDisplay\";\nimport Icon from \"../Icon/Icon\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport RouteLink from \"../RouteLink/RouteLink\";\n\n// constants\nimport {\n workDeepDiveSections,\n reservedEpicsMetadata,\n signalTypes\n} from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { ActivityInterface, GroupInterface } from \"../../interfaces/work-items\";\n\n// utils\nimport { rollupCycleTime } from \"../../utils/cycle-time\";\n\n//styled components\nconst Header = styled.header`\n align-items: flex-start;\n display: flex;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.brand.jean}`};\n`;\nconst Title = styled.h3`\n align-items: baseline;\n display: flex;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n line-height: 1;\n margin-bottom: 1rem;\n`;\nconst CycleTimeRow = styled.div`\n align-items: baseline;\n display: flex;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.brand.jean}`};\n padding-top: 1rem;\n padding-bottom: 1rem;\n`;\nconst Chart = styled(ChartCycleTime)`\n font-size: 1.1rem;\n\n &:not(:empty) {\n margin-left: 1rem;\n }\n`;\nconst Arrow = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n line-height: 1;\n margin-left: 1rem;\n`;\nconst EpicLink = styled(RouteLink)`\n align-items: center;\n display: flex;\n flex: 2;\n\n && {\n color: inherit;\n\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n text-decoration: none;\n\n & ${Arrow} {\n color: ${props => props.theme.colors.all.auroraTeal};\n }\n }\n }\n`;\n\ntype Props = {\n className?: string;\n groupedWorkItems?: GroupInterface[];\n testId?: string;\n sectionType?: string;\n};\n\nconst CycleTimeByGroupTable = ({\n className,\n groupedWorkItems = [],\n testId = \"testId\",\n sectionType = signalTypes.HEALTHY\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-cycle-time-by-group-table`;\n const { trackEvent } = useTracking();\n const { urlParams, getWorkDeepDivePath } = useUrlParams();\n const groupBy = urlParams.groupBy;\n\n function onShowCycleTimeTooltip({\n e,\n group\n }: {\n e: React.MouseEvent;\n group: GroupInterface;\n }) {\n trackEvent({\n e,\n label: `cycle-time-by-group-table-cycle-time-mouse-over`,\n value: `mouse over ${group.groupName} cycle time chart`\n });\n }\n\n function getOrDefault({ o, def }: { o: any | undefined; def: any }) {\n return !o ? def : o;\n }\n const title = `${startCase(groupBy.toLowerCase())}${\n sectionType === signalTypes.HEALTHY\n ? \"s with Shorter Cycle Times\"\n : \"s with Longer Cycle Times\"\n }`;\n const infoText =\n sectionType === signalTypes.HEALTHY\n ? \"cycle-time-healthy\"\n : \"cycle-time-unhealthy\";\n\n const cycleTimesInSection = groupedWorkItems\n .filter((group: GroupInterface) => {\n return group.activities.find(\n (a: ActivityInterface) => !isEmpty(a.cycleTime)\n );\n })\n .map((group: GroupInterface) => {\n const cycleTime = getOrDefault({\n o: group?.activities.find(\n (a: ActivityInterface) => !isEmpty(a.cycleTime)\n )?.cycleTime,\n def: null\n });\n\n // filter out cycle times we have no data for, but\n // allow display of cycle times that are all 0 values\n if (isNull(cycleTime)) {\n return null;\n }\n\n const totalCycleTime = rollupCycleTime(cycleTime);\n const daysInCycleTime = totalCycleTime.find(c => c.unit === \"DAYS\")\n ?.value;\n\n if (\n sectionType === signalTypes.HEALTHY &&\n daysInCycleTime &&\n daysInCycleTime >= 3\n )\n return null;\n if (\n sectionType === signalTypes.UNHEALTHY &&\n (!daysInCycleTime || daysInCycleTime < 3)\n )\n return null;\n\n const linkPath = getWorkDeepDivePath({\n selectedSection: workDeepDiveSections.PR_WORKFLOW\n });\n\n const header = !!group.magicRow\n ? Object.values(reservedEpicsMetadata).find(\n m => m.magicRowId === group.magicRow\n )?.title\n : group.groupName;\n const rowId = `${group.groupId}-${kebabCase(group.groupName)}`;\n return (\n \n \n
    {header}
    \n \n
    \n \n ) =>\n onShowCycleTimeTooltip({ e, group })\n }\n />\n
    \n );\n })\n .filter(x => x);\n return (\n
    \n
    \n {title}\n \n
    \n {cycleTimesInSection.length ? (\n cycleTimesInSection\n ) : (\n None\n )}\n
    \n );\n};\n\nexport default CycleTimeByGroupTable;\n","import React, { useState } from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport Icon from \"../Icon/Icon\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// styled components\nconst HeaderWrapper = styled.header`\n align-items: center;\n cursor: pointer;\n display: flex;\n justify-content: space-between;\n`;\nconst Arrow = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n font-size: 1em;\n`;\nexport const ContentWrapper = styled.div<{ isOpen: boolean }>`\n ${props => {\n if (props.isOpen) {\n return css`\n height: auto;\n opacity: 1;\n overflow: visible;\n `;\n } else {\n return css`\n height: 0;\n opacity: 0; // to make invisible for tests\n overflow: hidden;\n `;\n }\n }}\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n children: React.ReactNode;\n defaultIsOpen?: boolean;\n header: React.ReactNode;\n testId?: string;\n};\n\nconst Expander = ({\n children,\n className,\n header,\n defaultIsOpen = false,\n testId = \"testId\"\n}: Props) => {\n const [isOpen, setIsOpen] = useState(defaultIsOpen);\n const thisTestId = `${testId}-expander`;\n const { trackEvent } = useTracking();\n\n function onToggle(e: React.MouseEvent) {\n e.persist();\n setIsOpen(!isOpen);\n trackEvent({\n e,\n label: `${thisTestId}-click`,\n value: isOpen ? \"close\" : \"open\"\n });\n }\n\n if (!children || !header) {\n return null;\n }\n\n return (\n
    \n \n {header}\n {isOpen ? (\n \n ) : (\n \n )}\n \n {children}\n
    \n );\n};\n\nexport default Expander;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Expander from \"../Expander/Expander\";\n\n// constants\nimport { signalTypes } from \"../../constants/constants\";\n\n// styled components\nconst Container = styled.div<{ type?: string }>`\n display: flex;\n flex-direction: column;\n padding: 1rem;\n background-color: ${props => `${props.theme.colors.all.white}`};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n box-shadow: inset 5px 0px\n ${props =>\n props.theme.colors.all[\n props.type === \"unhealthy\" ? \"rogue\" : \"marvelMint\"\n ]};\n`;\nconst Content = styled.div`\n margin-top: 1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n content?: React.ReactNode;\n defaultIsOpen?: boolean;\n header: React.ReactNode;\n isExpandable?: boolean;\n testId?: string;\n type?: string;\n};\n\nconst SignalTypeContainer = ({\n className,\n content = null,\n defaultIsOpen = false,\n header,\n isExpandable = false,\n testId = \"testId\",\n type = signalTypes.HEALTHY\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-signal-type-container`;\n\n const displayContent = isExpandable ? (\n \n {content}\n \n ) : (\n <>\n
    {header}
    \n {content ? {content} : null}\n \n );\n\n return (\n \n {displayContent}\n \n );\n};\n\nexport default SignalTypeContainer;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { capitalize, kebabCase, startCase } from \"lodash\";\n\n// components\nimport Icon from \"../Icon/Icon\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport SignalTypeContainer from \"../SignalTypeContainer/SignalTypeContainer\";\n\n// constants\nimport { signalTypes, healthFactorsMetadata } from \"../../constants/constants\";\nimport { getSprintRangeString } from \"../../utils/sprints\";\n\n// styled components\nconst Container = styled(SignalTypeContainer)`\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n border-left-color: transparent;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n padding-bottom: 0.5rem;\n padding-top: 0.5rem;\n`;\nconst FactorsListItem = styled.li`\n align-items: flex-start;\n display: flex;\n & + & {\n margin-top: 0.5rem;\n }\n`;\nconst InlineIcon = styled(Icon)`\n margin-right: 0.5rem;\n height: 1em;\n`;\nconst FactorsHeader = styled.header`\n align-items: center;\n display: flex;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst FactorName = styled.header`\n align-items: baseline;\n display: flex;\n font-weight: bold;\n`;\nconst Score = styled.div`\n align-items: baseline;\n display: flex;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n factors: { [key: string]: number };\n header: React.ReactNode;\n sectionType: string;\n testId?: string;\n};\n\nconst RetrosFactorsList = ({\n className,\n factors,\n header,\n sectionType,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-factors-list`;\n const factorsArray = Object.entries(factors).sort();\n const isUnhealthyFactors = sectionType === signalTypes.UNHEALTHY;\n\n return (\n \n {header}\n \n :{\" \"}\n {`${factorsArray.length} ${\n isUnhealthyFactors ? \"low\" : \"positive\"\n } score${factorsArray.length === 1 ? \"\" : \"s\"}`}\n \n \n }\n content={\n !!factorsArray.length ? (\n
      \n {factorsArray.map((f: [string, number]) => {\n const factorSlug = `retros-factor-${kebabCase(f[0])}` as\n | \"retros-factor-always-on\"\n | \"retros-factor-context-switching\"\n | \"retros-factor-deep-work\"\n | \"retros-factor-issues-added\"\n | \"retros-factor-issues-carryover\"\n | \"retros-factor-issues-closed\"\n | \"retros-factor-issues-with-descriptions\"\n | \"retros-factor-issues-with-story-points\"\n | \"retros-factor-jira-bugs\"\n | \"retros-factor-prs-merged-no-approval\"\n | \"retros-factor-prs-no-reviewers\"\n | \"retros-factor-prs-stuck\"\n | \"retros-factor-chat-interruptions\";\n const factorMetadata = healthFactorsMetadata[f[0]];\n\n return (\n \n \n
      \n \n {factorMetadata.title}\n \n \n \n {capitalize(startCase(getSprintRangeString(f[1])))}\n \n
      \n
      \n );\n })}\n
    \n ) : null\n }\n isExpandable={!!factorsArray.length}\n testId={thisTestId}\n type={isUnhealthyFactors ? signalTypes.UNHEALTHY : signalTypes.HEALTHY}\n />\n );\n};\n\nexport default RetrosFactorsList;\n","import { isNil, sortBy, startCase } from \"lodash\";\nimport moment from \"moment\";\nimport { DefaultTheme } from \"styled-components/macro\";\n\n// constants\nimport {\n momentUnitTypes,\n healthFactorsMetadata,\n healthScoreRanges,\n healthScoreTypes\n} from \"../../constants/constants\";\n\n// interfaces\nimport { SprintHealthDataPointInterface } from \"../../interfaces/sprint-metadata\";\n\n// utils\nimport {\n getAdjustedTooltipPosition,\n getSprintHealthFactorsTooltip\n} from \"../../utils/chart\";\nimport { hexToRgb } from \"../../utils/color\";\nimport { createTimestamp, formatTimestamp } from \"../../utils/date\";\n\n// typescript props\ntype Props = {\n data: Array;\n factors: Array;\n theme: DefaultTheme;\n};\n\nconst config = ({ data, factors, theme }: Props) => {\n const series = sortBy(\n factors.map(f => {\n const color = theme.colors.chart.healthFactors[f];\n return {\n name: healthFactorsMetadata[f].title,\n color: color,\n marker: {\n fillColor: color,\n lineColor: color\n },\n data: data.map((d: SprintHealthDataPointInterface) => {\n const value = { ...d.projectHealthFactors, ...d.peopleHealthFactors }[\n f\n ];\n return isNil(value) ? null : value;\n })\n };\n }),\n \"name\"\n );\n\n return {\n chart: {\n height: 200,\n marginLeft: 0,\n style: {\n fontFamily: theme.fonts.primary.name,\n fontSize: 11,\n fontWeight: theme.fonts.primary.weights.regular\n }\n },\n xAxis: {\n categories: data.map(d => {\n const isSameMonth = moment(d.startAt).isSame(\n d.completeAt,\n momentUnitTypes.MONTHS\n );\n const start = formatTimestamp({\n format: \"M/DD\",\n timestamp: createTimestamp(d.startAt)\n });\n const end = formatTimestamp({\n format: isSameMonth ? \"DD\" : \"M/DD\",\n timestamp: createTimestamp(d.completeAt || new Date())\n });\n return `${start}-${end}`;\n }),\n lineColor: theme.colors.all.wolverine,\n labels: {\n enabled: true,\n style: {\n color: theme.colors.all.wolverine,\n fontFamily: theme.fonts.subheader.name,\n fontWeight: theme.fonts.subheader.weights.bold\n },\n y: 20\n }\n },\n yAxis: {\n labels: {\n enabled: false\n },\n max: 105,\n min: 0,\n endOnTick: false,\n plotBands: Object.entries(healthScoreRanges).map(([key, range]) => {\n return {\n color: hexToRgb({\n hex: theme.colors.signalHealth[key],\n opacity: 0.2\n }),\n label: {\n text: startCase(key.toLowerCase()),\n verticalAlign: \"bottom\",\n y: -5\n },\n from: range[0],\n to:\n // to adjust for the ranges in constants being exclusive, restrict the top band to 100\n key === healthScoreTypes.EXCELLENT ? range[1] - 1 : range[1]\n };\n }),\n tickPositions: [\n healthScoreRanges.CONCERNING[0],\n healthScoreRanges.OK[0],\n healthScoreRanges.GOOD[0],\n healthScoreRanges.EXCELLENT[0],\n 100\n ],\n title: {\n enabled: false\n }\n },\n legend: {\n align: \"right\",\n alignColumns: true,\n enabled: true,\n itemDistance: 30,\n itemStyle: {\n fontWeight: theme.fonts.primary.weights.regular\n },\n layout: \"horizontal\",\n padding: 0,\n symbolHeight: 8,\n symbolWidth: 8,\n verticalAlign: \"bottom\"\n },\n plotOptions: {\n line: {\n connectNulls: true,\n dataLabels: {\n enabled: false\n },\n marker: {\n symbol: \"circle\"\n },\n states: {\n hover: {\n opacity: 1\n }\n }\n }\n },\n title: {\n text: undefined\n },\n tooltip: {\n useHTML: true,\n enabled: true,\n backgroundColor: null,\n shadow: false,\n borderWidth: 0,\n borderRadius: 0,\n outside: true,\n positioner: function(w: number, h: number, point: any) {\n return getAdjustedTooltipPosition({\n currentPosition: (this as any).getPosition(w, h, point),\n windowScroll: window.scrollY\n });\n },\n formatter: function() {\n return getSprintHealthFactorsTooltip((this as any).point);\n }\n },\n series\n };\n};\nexport default config;\n","import React, { useMemo } from \"react\";\nimport { DefaultTheme, withTheme } from \"styled-components/macro\";\n\n// components\nimport Chart from \"../Chart/Chart\";\nimport { ErrorBoundary } from \"@sentry/react\";\n\n// config\nimport generateConfig from \"./config\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { SprintHealthDataPointInterface } from \"../../interfaces/sprint-metadata\";\n\n// typescript props\ntype Props = {\n className?: string;\n data: Array;\n factors: Array;\n isFetchingData?: boolean;\n testId?: string;\n theme: DefaultTheme;\n};\n\nconst ChartSprintHealthTrendAnalysis = ({\n className,\n data,\n factors,\n isFetchingData = false,\n testId = \"testId\",\n theme\n}: Props) => {\n const thisTestId = `${testId}-chart-sprint-health-trend-analysis`;\n const { trackEvent } = useTracking();\n\n // TODO: update this to an event for showing tooltip when this\n // bug gets fixed:\n // https://github.com/highcharts/highcharts/issues/13868\n function onChartMouseOver(e: React.MouseEvent) {\n e.persist();\n trackEvent({\n e,\n label: \"chart-sprint-health-trend-analysis\",\n value: \"chart moused over\"\n });\n }\n function onChartMouseOut(e: React.MouseEvent) {\n e.persist();\n trackEvent({\n e,\n label: \"chart-sprint-health-trend-analysis\",\n value: \"chart moused out\"\n });\n }\n\n const chart = useMemo(() => {\n return {\n config: generateConfig({ data, factors, theme }),\n id: \"sprint-health-trend-analysis-chart\",\n isFetchingData\n };\n }, [data, isFetchingData, theme]);\n\n return (\n \n \n \n \n
    \n );\n};\n\nexport default withTheme(ChartSprintHealthTrendAnalysis);\n","import {\n DeepDiveDataRecord,\n PeopleMetrics,\n SelectablePeopleMetrics,\n UserDeepDiveData,\n ContextSwitchingRecord\n} from \"../interfaces/team-deep-dive\";\nimport {\n sum,\n toPairs,\n mean,\n isNull,\n omitBy,\n isUndefined,\n mapValues\n} from \"lodash\";\nimport { UserReportWithMetadataInterface } from \"../interfaces/user\";\nimport {\n FilteredSprintHealthInterface,\n SprintHealthDataPointInterface,\n SprintHealthInterface\n} from \"../interfaces/sprint-metadata\";\n\nexport const getPersonScore = (\n personRecord: UserDeepDiveData,\n metric: PeopleMetrics,\n factor?: keyof ContextSwitchingRecord\n): number | null => {\n if (metric === \"ALWAYS_ON\") {\n const alwaysOnIndex = {\n NORMAL: 1,\n ABOVE_NORMAL: 3,\n HIGH: 5\n };\n return alwaysOnIndex[personRecord?.[\"ALWAYS_ON\"]] || 1;\n }\n if (metric === \"CONTEXT_SWITCHING\") {\n const contextSwitchingIndex = {\n LESS: 0.165,\n ABOUT_THE_SAME: 0.5,\n MORE: 0.825\n };\n if (!!factor) {\n const contextSwitchingFactor =\n personRecord?.[\"CONTEXT_SWITCHING\"]?.[factor];\n const contextSwitchingFactorScore = isNull(contextSwitchingFactor)\n ? null\n : contextSwitchingFactor?.[\"bucket\"];\n return isNull(contextSwitchingFactorScore)\n ? null\n : !!contextSwitchingFactorScore\n ? contextSwitchingIndex[contextSwitchingFactorScore] || 0\n : 0;\n } else {\n return 0;\n }\n }\n\n // Slack interruptions are returned as decimal of an hour; convert to minutes if necessary\n const multiplier = metric === \"CHAT_INTERRUPTIONS\" ? 60 : 1;\n // get the mean for the metrics with days as a subdivision\n\n const metricToCalculate =\n metric === \"DEEP_WORK\"\n ? personRecord[metric]?.HOURS?.DETAILS || {}\n : personRecord[metric];\n\n const numbersToMean = toPairs(metricToCalculate)\n .filter(\n (record: [string, string | number]) => typeof record[1] === \"number\"\n )\n .map((record: [string, string | number]): number => {\n // explicitly cast as number, TS doesn't recognize the prior type filtering\n const value = record[1] as number;\n return value;\n });\n\n return mean(numbersToMean || []) * multiplier || 0;\n};\n\nexport const getNumberDataSeries = (\n record: DeepDiveDataRecord,\n selectedMetric: SelectablePeopleMetrics,\n chartView: UserReportWithMetadataInterface | \"team\",\n metricSeries: PeopleMetrics,\n factor?: keyof ContextSwitchingRecord\n) => {\n function getAveragePeopleScoresOfPresent(): number | null {\n const scores = record.peopleScores.map(personRecord => {\n return getPersonScore(personRecord, metricSeries, factor);\n });\n\n if (scores.every(s => isNull(s))) {\n return null;\n }\n const filteredScores = scores.filter(it => it != null);\n return sum(filteredScores) / (filteredScores.length || 1);\n }\n\n const metricValue =\n selectedMetric === \"OVERALL_TEAM_HEALTH\"\n ? record.teamScores[metricSeries]\n : chartView === \"team\"\n ? getAveragePeopleScoresOfPresent()\n : record.peopleScores.find(\n personRecord => personRecord.user === chartView.id\n )\n ? getPersonScore(\n record.peopleScores.find(\n personRecord => personRecord.user === chartView.id\n ) || {\n // some record are not returned in the response, so rather than have an undefined key, we hydrate all possible keys here and provide falsy values instead\n user: 0,\n DEEP_WORK: {\n HOURS: {\n TOTAL: \"NORMAL\",\n DETAILS: {}\n },\n CALLOUT_DETAILS: {}\n },\n CHAT_INTERRUPTIONS: {},\n ALWAYS_ON: \"NORMAL\",\n CONTEXT_SWITCHING: {\n TOTAL: {\n bucket: \"ABOUT_THE_SAME\"\n },\n CHAT_CHANNELS_WITH_INTERRUPTIONS: {\n bucket: \"ABOUT_THE_SAME\",\n details: {\n count: 0\n }\n },\n \"MEETINGS_WITH_2+_TEAMS\": {\n bucket: \"ABOUT_THE_SAME\",\n details: { \"\": 0 }\n },\n PR_REPOS: {\n bucket: \"ABOUT_THE_SAME\",\n details: {\n repos: []\n }\n },\n JIRA_EPICS: {\n bucket: \"ABOUT_THE_SAME\",\n details: { \"\": \"\" }\n },\n TOP_PRIORITY_BUGS: {\n bucket: \"ABOUT_THE_SAME\",\n details: { \"\": { summary: \"\", parent: \"\", name: \"\" } }\n }\n }\n },\n metricSeries,\n factor\n )\n : 0;\n return [record.dateEnd, metricValue];\n};\n\nexport const getFilteredSprintHealthData = (\n data?: SprintHealthInterface\n): FilteredSprintHealthInterface | undefined => {\n if (isUndefined(data)) {\n return data;\n }\n // filter any null sprints\n const filtered = omitBy(data, sprint =>\n isNull(sprint)\n ) as FilteredSprintHealthInterface;\n return mapValues(filtered, sprint => ({\n ...sprint,\n // filter any null factors from projectHealthFactors\n projectHealthFactors: omitBy(sprint.projectHealthFactors, f => isNull(f))\n }));\n};\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isNull, sortBy } from \"lodash\";\n\n// components\nimport Expander from \"../Expander/Expander\";\nimport ChartSprintHealthTrendAnalysis from \"../ChartSprintHealthTrendAnalysis/ChartSprintHealthTrendAnalysis\";\n\n// interfaces\nimport {\n FilteredSprintHealthInterface,\n SprintHealthDataPointInterface,\n SprintHealthInterface\n} from \"../../interfaces/sprint-metadata\";\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\n\n// utils\nimport { filterSprintHealthFactorsToRange } from \"../../utils/sprints\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { getFilteredSprintHealthData } from \"../../utils/health-metrics\";\n\n// styled components\nconst Container = styled.div`\n font-size: 1.1rem;\n`;\nconst StyledExpander = styled(Expander)`\n font-size: inherit;\n\n & header {\n display: inline-flex;\n }\n`;\nconst HeaderWrapper = styled.span`\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n margin-right: 1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n data: SprintHealthInterface;\n isFetchingData?: boolean;\n range: Array;\n sprint: TimerangeMetadataInterface;\n testId?: string;\n};\n\nconst RetrosTrendAnalysis = ({\n className,\n data,\n isFetchingData = false,\n range,\n sprint,\n testId = \"testId\"\n}: Props): React.ReactElement | null => {\n const thisTestId = `${testId}-retros-trend-analysis`;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const thisSprint = data[sprint.id];\n\n if (isNull(thisSprint)) {\n return null;\n }\n\n const filteredData = getFilteredSprintHealthData(\n data\n ) as FilteredSprintHealthInterface;\n\n const sortedData = sortBy(Object.values(filteredData), \"startAt\");\n const hasPeopleHealthData = flags?.[\"people-health-insights\"];\n\n const factors = filterSprintHealthFactorsToRange(\n [\n ...Object.entries(\n hasPeopleHealthData ? thisSprint.peopleHealthFactors : {}\n ),\n ...Object.entries(thisSprint.projectHealthFactors)\n ],\n range\n );\n\n return !!factors.length ? (\n \n Health Trends}\n testId={thisTestId}\n >\n \n \n \n ) : null;\n};\n\nexport default RetrosTrendAnalysis;\n","import React from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { compact, groupBy, isEmpty, kebabCase, uniq } from \"lodash\";\n\n// constants\nimport {\n annotationStatusTypes,\n orderedAnnotationStatusTypes,\n pageIds,\n reservedEpics,\n reservedEpicsMetadata,\n StatusIconMap\n} from \"../../constants/constants\";\n\n// components\nimport Icon from \"../Icon/Icon\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport Tooltip from \"../Tooltip/Tooltip\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { AnnotationsInterface } from \"../../interfaces/annotations\";\nimport { GroupInterface } from \"../../interfaces/work-items\";\nimport { UserReportInterface } from \"../../interfaces/user\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// styled components\nconst Container = styled.div`\n align-items: center;\n display: flex;\n justify-content: space-between;\n`;\nconst Header = styled.header`\n align-items: center;\n display: flex;\n flex: 1;\n`;\nconst GroupId = styled.span`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n margin-right: 1rem;\n`;\nconst ReactionsList = styled.ul<{ numListItems: number }>`\n columns: ${props =>\n props.numListItems > 3\n ? Math.ceil(props.numListItems / 2)\n : props.numListItems};\n gap: ${props => props.theme.grid.gap};\n`;\nconst ReactionsListItem = styled.li`\n align-items: flex-end;\n display: flex;\n margin-bottom: 0.5rem;\n`;\nconst ReactionWrapper = styled.span`\n align-items: baseline;\n display: flex;\n`;\nconst ReactionIcon = styled(Icon)<{ statusType: string }>`\n color: ${props => props.theme.colors.all.wolverine};\n display: inline-block;\n height: 1em;\n margin-right: 0.5rem;\n width: 1em;\n\n // TODO: remove this adjustment when we get FA6 disappointed face in\n ${props => {\n if (props.statusType === annotationStatusTypes.DISAPPOINTED) {\n return css`\n position: relative;\n top: 0.2rem;\n `;\n }\n }}\n`;\nconst NumReactions = styled.span`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n`;\nconst TeamList = styled.ul`\n && {\n padding-left: 0;\n }\n`;\nconst TeamMember = styled.li`\n list-style-type: none;\n`;\nconst Arrow = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n line-height: 1;\n margin-left: 1rem;\n`;\nconst EpicLink = styled(RouteLink)`\n align-items: center;\n display: flex;\n\n && {\n color: inherit;\n\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n text-decoration: none;\n\n & ${Arrow} {\n color: ${props => props.theme.colors.all.auroraTeal};\n }\n }\n }\n`;\n\n// typescript props\ntype Props = {\n annotations?: Array;\n className?: string;\n data: GroupInterface;\n teamMembers: Array;\n testId?: string;\n};\n\nconst WorkMetadataReactionsRollupRow = ({\n annotations,\n className,\n data,\n teamMembers,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-work-metadata-reactions-rollup-row`;\n const { trackEvent } = useTracking();\n const { getWorkDeepDivePath } = useUrlParams();\n const groupedAnnotations = groupBy(\n annotations,\n \"userAnnotationCheckinStatus\"\n );\n const numReactionIcons = Object.values(groupedAnnotations).filter(\n (annotations: Array | undefined) =>\n !isEmpty(annotations)\n ).length;\n const linkPath = getWorkDeepDivePath({\n groupId:\n data.magicRow ===\n reservedEpicsMetadata[reservedEpics.UNLINKED_PRS].magicRowId\n ? reservedEpics.UNLINKED_PRS\n : data.magicRow ===\n reservedEpicsMetadata[reservedEpics.NO_EPIC].magicRowId\n ? reservedEpics.NO_EPIC\n : data.groupId\n });\n const groupName =\n Object.values(reservedEpicsMetadata).find(\n m => m.magicRowId === data.magicRow\n )?.title || data.groupName;\n\n function onShowTooltip(e: React.MouseEvent, statusType: string) {\n trackEvent({\n e,\n label: `${thisTestId}-${kebabCase(statusType)}-tooltip`,\n value: `list of annotators shown for ${data.groupId}`\n });\n }\n\n return (\n \n
    \n \n {!!data.groupDisplayId ? (\n {data.groupDisplayId}\n ) : null}\n {groupName}\n \n \n
    \n \n {compact(\n [...orderedAnnotationStatusTypes, annotationStatusTypes.COMMENT].map(\n (statusType: string) => {\n const statusAnnotations =\n groupedAnnotations[\n statusType === annotationStatusTypes.COMMENT ? \"\" : statusType\n ];\n return !!statusAnnotations?.length ? (\n \n \n \n {statusAnnotations.length}\n \n }\n popupContent={\n \n {compact(\n uniq(\n statusAnnotations.map((a: AnnotationsInterface) => {\n const teamMember = teamMembers.find(\n t => t.id === a.userId\n );\n return teamMember?.name || a.userEmail;\n })\n )\n )\n .sort()\n .map((displayName: string) => (\n \n {displayName}\n \n ))}\n \n }\n placement=\"bottom\"\n onShowTooltip={(e: React.MouseEvent) =>\n onShowTooltip(e, statusType)\n }\n testId={`${thisTestId}-${statusType}`}\n />\n \n ) : null;\n }\n )\n )}\n \n
    \n );\n};\n\nexport default WorkMetadataReactionsRollupRow;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { compact, isEmpty } from \"lodash\";\n\n// components\nimport HtmlText from \"../HtmlText/HtmlText\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport WorkMetadataReactionsRollupRow from \"../WorkMetadataReactionsRollupRow/WorkMetadataReactionsRollupRow\";\n\n// constants\nimport { workDeepDiveSections } from \"../../constants/constants\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AnnotationsInterface } from \"../../interfaces/annotations\";\nimport { GroupInterface } from \"../../interfaces/work-items\";\n\n// utils\nimport { filterAnnotationsForGroup } from \"../../utils/sprints\";\n\n// styled components\nconst Header = styled.header`\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n padding-bottom: 1rem;\n`;\nconst Row = styled(WorkMetadataReactionsRollupRow)`\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n padding: 1rem 0;\n`;\nconst NoReactionsHelpText = styled.section`\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n font-style: italic;\n margin-top: 2rem;\n`;\nconst NoReactionsHtmlText = styled(HtmlText)`\n display: inline;\n`;\nconst WorkDeepDiveLink = styled(RouteLink)`\n display: inline;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n && {\n color: inherit;\n }\n`;\n\n// typescript props\ntype Props = {\n annotations?: Array;\n className?: string;\n data: Array;\n testId?: string;\n};\n\nconst WorkMetadataReactionsRollup = ({\n annotations = [],\n className,\n data,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-work-metadata-reactions-rollup`;\n const { getWorkDeepDivePath, urlParams } = useUrlParams();\n const activeTeam = urlParams.team;\n const teamMembers = activeTeam?.teamMembers || [];\n const selectedGroupBy = urlParams.groupBy;\n const workDeepDiveLinkPath = getWorkDeepDivePath({\n selectedSection: workDeepDiveSections.PROJECT_WORK\n });\n\n return (\n
    \n
    Retro Reactions
    \n {data.length && !isEmpty(annotations) ? (\n compact(\n data.map((d: GroupInterface) => {\n const annotationsForGroup = filterAnnotationsForGroup({\n annotations,\n group: d,\n groupBy: selectedGroupBy\n });\n\n return isEmpty(annotationsForGroup) ? null : (\n \n );\n })\n )\n ) : (\n \n {\" \"}\n \n Project Work page\n \n \n \n )}\n
    \n );\n};\n\nexport default WorkMetadataReactionsRollup;\n","import React, { ReactElement, useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, isNil, partition, pick, pickBy } from \"lodash\";\n\n// components\nimport CycleTimeByGroupTable from \"../CycleTimeByGroupTable/CycleTimeByGroupTable\";\nimport RetrosFactorsList from \"../RetrosFactorsList/RetrosFactorsList\";\nimport RetrosTrendAnalysis from \"../RetrosTrendAnalysis/RetrosTrendAnalysis\";\nimport WorkMetadataReactionsRollup from \"../WorkMetadataReactionsRollup/WorkMetadataReactionsRollup\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { SprintHealthInterface } from \"../../interfaces/sprint-metadata\";\nimport { GroupInterface } from \"../../interfaces/work-items\";\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\n\n// utils\nimport {\n filterAnnotationsForGroup,\n filterSprintHealthFactorsToRange\n} from \"../../utils/sprints\";\nimport { AnnotationsInterface } from \"../../interfaces/annotations\";\nimport {\n negativeSignals,\n neutralSignals,\n positiveSignals,\n signalTypes\n} from \"../../constants/constants\";\nimport { GroupsListInterface } from \"../../interfaces/work-items\";\n\n// styled components\nconst ContentWrapper = styled.div`\n align-items: start;\n display: grid;\n gap: ${props => props.theme.grid.gap};\n grid-template-columns: 1fr 1fr;\n`;\nconst Header = styled.header`\n margin-bottom: 2rem;\n`;\nconst FactorsAndCycleTime = styled.div`\n flex: 1;\n`;\nconst ReactionsOrCycleTime = styled.div`\n flex: 1;\n`;\nconst Factors = styled.div`\n align-items: start;\n display: grid;\n gap: ${props => props.theme.grid.gap};\n grid-template-columns: 1fr 1fr;\n`;\nconst FactorsListHeader = styled.span`\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst CycleTime = styled(CycleTimeByGroupTable)`\n ${Factors} + & {\n margin-top: 5rem;\n }\n`;\nconst TrendAnalysis = styled(RetrosTrendAnalysis)`\n margin-top: 5rem;\n`;\n\n// typescript props\ntype Props = {\n annotations?: Array;\n className?: string;\n sectionType: string;\n sprintHealthFactorsData: SprintHealthInterface;\n sprintCompletionData?: GroupsListInterface;\n header: React.ReactNode;\n range: Array;\n sprint: TimerangeMetadataInterface;\n testId?: string;\n};\n\nconst RetrosRangeFactorsContainer = ({\n annotations = [],\n className,\n header,\n range,\n sectionType,\n sprint,\n sprintCompletionData,\n sprintHealthFactorsData,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-retros-range-factors-container`;\n const currentSprintHealthFactorsData = sprintHealthFactorsData[sprint.id];\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const hasRetrosReactions = flags?.[\"retros-annotations\"];\n const hasPeopleHealthData = flags?.[\"people-health-insights\"];\n\n const { urlParams } = useUrlParams();\n const selectedGroupBy = urlParams.groupBy;\n\n const [filteredPeopleFactors, filteredProjectFactors] = [\n currentSprintHealthFactorsData?.peopleHealthFactors || {},\n currentSprintHealthFactorsData?.projectHealthFactors || {}\n ].map(factors =>\n pick(\n pickBy(factors, f => !isNil(f)),\n filterSprintHealthFactorsToRange(Object.entries(factors), range)\n )\n ) as Array<{ [key: string]: number }>;\n\n const filteredWorkItems = useMemo(() => {\n if (!!sprintCompletionData) {\n return sprintCompletionData.workMetadata.filter(\n (group: GroupInterface) => {\n const annotationsForGroup = filterAnnotationsForGroup({\n annotations,\n group,\n groupBy: selectedGroupBy\n });\n\n if (!isEmpty(annotationsForGroup)) {\n // if every annotation for this group is a comment or question and there are no other reactions,\n // bucket it as unhealthy / look into\n if (\n annotationsForGroup.every(\n a =>\n isEmpty(a.userAnnotationCheckinStatus) ||\n neutralSignals.includes(a.userAnnotationCheckinStatus)\n )\n ) {\n return sectionType === signalTypes.UNHEALTHY;\n }\n\n // otherwise, proceed with bucketing logic based on which one has more non-comment reactions\n const annotationsWithNonNeutralReactions = annotationsForGroup.filter(\n a =>\n (!!a.userAnnotationCheckinStatus &&\n positiveSignals.includes(a.userAnnotationCheckinStatus)) ||\n negativeSignals.includes(a.userAnnotationCheckinStatus)\n );\n const [\n positiveReactions,\n negativeReactions\n ] = partition(annotationsWithNonNeutralReactions, a =>\n positiveSignals.includes(a.userAnnotationCheckinStatus)\n );\n if (sectionType === signalTypes.HEALTHY) {\n return positiveReactions.length > negativeReactions.length;\n } else {\n return negativeReactions.length >= positiveReactions.length;\n }\n }\n return false;\n }\n );\n }\n return [];\n }, [annotations, sectionType, selectedGroupBy, sprintCompletionData]);\n\n return (\n
    \n
    {header}
    \n \n \n \n Project Health}\n factors={filteredProjectFactors}\n sectionType={sectionType}\n testId={thisTestId}\n />\n {hasPeopleHealthData ? (\n People Health}\n factors={filteredPeopleFactors}\n sectionType={sectionType}\n testId={thisTestId}\n />\n ) : null}\n \n {/* if annotations are turned on, cycle time is in left column */}\n {hasRetrosReactions ? (\n \n ) : null}\n \n \n {/* if annotations are turned off, cycle time replaces them in right column */}\n {hasRetrosReactions ? (\n \n ) : (\n \n )}\n \n \n \n
    \n );\n};\n\nexport default RetrosRangeFactorsContainer;\n","import { color } from \"highcharts\";\nimport { reverse } from \"lodash\";\nimport { DefaultTheme } from \"styled-components/macro\";\nimport { SprintProgressActivityInterface } from \"../../interfaces/sprint-metadata\";\nimport { currentTheme } from \"../../themes/currentTheme\";\nimport { hexToRgb } from \"../../utils/color\";\n\nexport default ({\n data,\n onBarClick,\n onBarMouseOver,\n theme\n}: {\n data: Array;\n onBarClick: ({\n e,\n pointData\n }: {\n e: React.MouseEvent;\n pointData: any;\n }) => void;\n onBarMouseOver: ({\n e,\n pointData\n }: {\n e: React.MouseEvent;\n pointData: any;\n }) => void;\n theme: DefaultTheme;\n}) => {\n const colorRamp = [\n theme.colors.all.jean,\n theme.colors.all.banshee,\n theme.colors.all.petra\n ];\n const series = reverse(\n data.map((d, index) => {\n return {\n name: d.displayTitle,\n borderColor: colorRamp[index],\n color: colorRamp[index],\n data: [d.percentage],\n status: d.status\n };\n })\n );\n\n return {\n chart: {\n height: 60,\n margin: 0,\n type: \"bar\"\n },\n xAxis: { visible: false },\n yAxis: { visible: false },\n plotOptions: {\n bar: {\n borderWidth: 1,\n cursor: \"pointer\",\n dataLabels: {\n align: \"left\",\n borderColor: 0,\n color: theme.colors.all.wolverine,\n enabled: true,\n formatter: function() {\n return (this as any).y > 0.0\n ? `${(this as any).y.toFixed(0)}%`\n : ``;\n },\n style: {\n textOutline: \"none\"\n }\n },\n point: {\n events: {\n click: function(e: React.MouseEvent) {\n onBarClick({ e, pointData: this });\n },\n mouseOver: function(e: React.MouseEvent) {\n onBarMouseOver({ e, pointData: this });\n }\n }\n },\n stacking: \"percent\",\n states: {\n hover: {\n enabled: true,\n brightness: -0.2,\n borderColor: hexToRgb({\n hex: currentTheme.colors.all.storm,\n opacity: 0.5\n })\n },\n inactive: {\n enabled: false\n }\n }\n }\n },\n legend: { enabled: false },\n tooltip: {\n enabled: false\n },\n title: {\n text: undefined\n },\n series\n };\n};\n","import React, { useMemo } from \"react\";\nimport { DefaultTheme, withTheme } from \"styled-components/macro\";\nimport {\n workDeepDiveSections,\n urlParamKeys,\n urlGlobalParams\n} from \"../../constants/constants\";\n\n// components\nimport Chart from \"../Chart/Chart\";\n\n// config\nimport generateConfig from \"./config\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useHistory } from \"react-router-dom\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { SprintProgressActivityInterface } from \"../../interfaces/sprint-metadata\";\n\n// typescript props\ntype Props = {\n className?: string;\n data: Array;\n isFetchingData?: boolean;\n testId?: string;\n theme: DefaultTheme;\n};\n\nconst ChartSprintProgress = ({\n className,\n data,\n isFetchingData = false,\n testId = \"testId\",\n theme\n}: Props) => {\n const thisTestId = `${testId}-chart-sprint-progress`;\n const { trackEvent } = useTracking();\n const history = useHistory();\n const { getWorkDeepDivePath } = useUrlParams();\n\n function onBarMouseOver({\n e,\n pointData\n }: {\n e: React.MouseEvent;\n pointData: any;\n }) {\n trackEvent({\n e,\n label: \"chart-sprint-progress\",\n value: `${pointData.series.name} moused over`\n });\n }\n\n function onBarClick({\n e,\n pointData\n }: {\n e: React.MouseEvent;\n pointData: any;\n }) {\n trackEvent({\n e,\n label: \"chart-sprint-progress\",\n value: `${pointData.series.name} clicked`\n });\n history.push(\n getWorkDeepDivePath({\n selectedSection: workDeepDiveSections.PROJECT_WORK,\n persistQuerystring: urlGlobalParams,\n querystringParams: {\n [urlParamKeys.STATUS]: [pointData.series.userOptions.status],\n [urlParamKeys.SHOW_RELATED]: false\n }\n })\n );\n }\n\n const chart = useMemo(() => {\n return {\n config: generateConfig({\n data,\n onBarClick,\n onBarMouseOver,\n theme\n }),\n id: \"sprint-progress-chart\",\n isFetchingData\n };\n }, [data, isFetchingData, theme]);\n\n return (\n
    \n \n
    \n );\n};\n\nexport default withTheme(ChartSprintProgress);\n","import { isNil } from \"lodash\";\nimport React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport StoryPoints from \"../StoryPoints/StoryPoints\";\nimport WorkMetadataIcon from \"../WorkMetadataIcon/WorkMetadataIcon\";\n\n// constants\nimport {\n urlParamKeys,\n workDeepDiveSections,\n workMetadataActivityTypes\n} from \"../../constants/constants\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { SprintProgressActivityInterface } from \"../../interfaces/sprint-metadata\";\n\n// styled components\nconst Container = styled.ul`\n display: inline-grid;\n flex: 1;\n grid-template-columns: repeat(2, min-content);\n grid-template-rows: 2rem;\n grid-auto-rows: 2rem;\n column-gap: calc(${props => props.theme.grid.gap} / 2);\n row-gap: 0.5rem;\n`;\nconst RollupValue = styled.li`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n font-size: ${props => props.theme.fonts.subheader.sizes.xs};\n`;\nconst WorkIcon = styled(WorkMetadataIcon)`\n margin-right: 0.8rem;\n`;\nconst WorkDeepDiveLink = styled(RouteLink)`\n align-items: center;\n display: flex;\n\n &,\n &:visited {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n text-decoration: none;\n }\n`;\nconst StyledStoryPoints = styled(StoryPoints)`\n margin-left: 1rem;\n`;\n// typescript props\ntype ValueOf = T[keyof T];\ntype Props = {\n activityTypes: Array>;\n category: SprintProgressActivityInterface;\n className?: string;\n testId?: string;\n};\n\nconst WorkProgressBreakout = ({\n activityTypes,\n className,\n category,\n testId = \"testId\"\n}: Props): ReactElement | null => {\n const thisTestId = `${testId}-work-progress-breakout`;\n const { getWorkDeepDivePath } = useUrlParams();\n const activitiesWithValues = activityTypes.filter(\n a => !isNil(category.breakdownByActivityType[a])\n );\n\n return !!activitiesWithValues.length ? (\n \n {activitiesWithValues.map((activityTypeKey: string) => {\n const {\n count: numItems,\n storyPoints\n } = category.breakdownByActivityType[activityTypeKey];\n const path = getWorkDeepDivePath({\n querystringParams: {\n [urlParamKeys.STATUS]: [category.status],\n [urlParamKeys.SHOW_RELATED]: false,\n [urlParamKeys.WORK_ITEM_TYPES]: [activityTypeKey]\n },\n selectedSection: workDeepDiveSections.PROJECT_WORK\n });\n return (\n \n \n \n {numItems || 0}\n \n \n \n );\n })}\n \n ) : null;\n};\n\nexport default WorkProgressBreakout;\n","import React, { ReactElement } from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { isNil, uniq, flatten } from \"lodash\";\n\n// components\nimport ChartSprintProgress from \"../ChartSprintProgress/ChartSprintProgress\";\nimport WorkMetadataActivitiesKey from \"../WorkMetadataActivitiesKey/WorkMetadataActivitiesKey\";\nimport WorkProgressBreakout from \"../WorkProgressBreakout/WorkProgressBreakout\";\n\n// constants\nimport {\n workMetadataActivityTypes,\n workMetadataStatusTypes\n} from \"../../constants/constants\";\n\n// interfaces\nimport { SprintProgressActivityInterface } from \"../../interfaces/sprint-metadata\";\n\nconst Rollup = styled.ul<{ numColumns: number }>`\n display: grid;\n grid-template-columns: ${props => `repeat(${props.numColumns}, 1fr)`};\n gap: 4rem;\n`;\nconst RollupCategory = styled.li`\n display: flex;\n flex-flow: column nowrap;\n justify-content: space-between;\n`;\nconst RollupCategoryHeader = styled.header<{\n isSprintMode: boolean;\n rollup: string;\n}>`\n align-items: center;\n display: flex;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n margin-bottom: 1rem;\n ${props => {\n if (props.isSprintMode) {\n return css`\n &::before {\n content: \"\";\n display: block;\n height: 1.5rem;\n margin-right: 1rem;\n width: 1.5rem;\n background: ${props.rollup === workMetadataStatusTypes.OPEN\n ? props.theme.colors.all.jean\n : props.rollup === workMetadataStatusTypes.DONE\n ? props.theme.colors.all.petra\n : props.theme.colors.all.banshee};\n }\n `;\n }\n }};\n`;\nconst KeyWrapper = styled.div`\n align-items: center;\n display: flex;\n justify-content: flex-end;\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.wolverine}`};\n margin-top: 2.2rem;\n padding-top: 1rem;\n`;\nconst ChartWrapper = styled.figure`\n margin: 0;\n`;\n\nconst SecondaryActivitiesHeader = styled.h4`\n margin: 2rem 0 1rem 0;\n padding: 0;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n padding-bottom: 1rem;\n`;\nconst HeaderText = styled.span<{ visible: boolean }>`\n visibility: ${props => (props.visible ? \"visible\" : \"hidden\")};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n data: Array;\n isSprintMode: boolean;\n testId?: string;\n};\n\nconst WorkProgress = ({\n className,\n data,\n isSprintMode,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-sprint-progress-with-breakout`;\n const displayCategories = isSprintMode\n ? data\n : data.filter(d => d.status !== \"OPEN\");\n return (\n \n {isSprintMode ? (\n \n ) : null}\n
    \n \n {displayCategories.map((d, index) => (\n \n \n {d.displayTitle}\n \n \n
    \n \n PRs\n \n \n
    \n
    \n ))}\n
    \n \n \n Object.keys(d.breakdownByActivityType)\n )\n )\n )}\n showStoryPoints={displayCategories.some(d =>\n Object.values(d.breakdownByActivityType).some(\n t => !isNil(t.storyPoints)\n )\n )}\n />\n \n
    \n
    \n );\n};\n\nexport default WorkProgress;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport WorkProgress from \"../WorkProgress/WorkProgress\";\n\n// hooks\nimport { SprintProgressActivityInterface } from \"../../interfaces/sprint-metadata\";\n\n// styled components\nconst Container = styled.div`\n width: 100%;\n`;\nconst Header = styled.h3`\n align-items: center;\n display: flex;\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n margin-bottom: 1.3rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n data: Array;\n isActiveSprint?: boolean;\n testId?: string;\n};\n\nconst RetrosSprintCompletion = ({\n className,\n data,\n isActiveSprint,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-sprint-progress-chart-wrapper`;\n const tooltipContent = `retros-sprint-completion${\n !isActiveSprint ? \"-final\" : \"\"\n }`;\n return (\n \n
    \n Sprint Completion{\" \"}\n \n
    \n \n
    \n );\n};\n\nexport default RetrosSprintCompletion;\n","import React, { useState } from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { capitalize, compact, isNil, pick } from \"lodash\";\n\n// components\nimport Button from \"../Button/Button\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport Icon from \"../Icon/Icon\";\nimport InfoPopupContent from \"../InfoPopupContent/InfoPopupContent\";\nimport TriggeredOverlay from \"../TriggeredOverlay/TriggeredOverlay\";\n\n// constants\nimport {\n overviewHealthTypes,\n healthFactorsMetadata,\n healthScoreRanges,\n healthScoreTypes\n} from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { SprintHealthDataPointInterface } from \"../../interfaces/sprint-metadata\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// utils\nimport { getSprintRangeString } from \"../../utils/sprints\";\n\n// styled\nconst Header = styled.h3`\n align-items: center;\n display: flex;\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n margin-bottom: 2rem;\n`;\nconst LinkList = styled.ul`\n align-items: center;\n display: flex;\n`;\nconst LinkListItem = styled.li<{ isActive: boolean }>`\n border-bottom: ${props =>\n `${props.theme.borders.widths.md} solid ${\n props.isActive ? props.theme.colors.all.wolverine : \"transparent\"\n }`};\n font-weight: ${props =>\n props.theme.fonts.primary.weights[props.isActive ? \"bold\" : \"regular\"]};\n padding: 0;\n\n & + & {\n margin-left: 2rem;\n }\n`;\nconst Link = styled(Button)<{ isActive: boolean }>`\n font-weight: ${props =>\n props.theme.fonts.primary.weights[props.isActive ? \"demiBold\" : \"regular\"]};\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n & > span {\n color: inherit;\n }\n }\n`;\nconst SprintHealthFactorsContainer = styled.div`\n margin-top: 1rem;\n height: 12.8rem;\n`;\nconst SprintHealthFactorsGrid = styled.div<{\n hasPeopleHealthData: boolean;\n sprintHealthFactorSet: string;\n}>`\n display: grid;\n gap: 0.5rem;\n grid-template-columns: repeat(\n ${props => (props.sprintHealthFactorSet === \"projects\" ? 3 : 2)},\n 1fr\n );\n grid-template-rows: repeat(\n ${props =>\n props.sprintHealthFactorSet === \"projects\"\n ? 3\n : props.sprintHealthFactorSet === \"overview\"\n ? 1\n : 2},\n 1fr\n );\n grid-auto-flow: column;\n\n ${props => {\n if (props.sprintHealthFactorSet === \"overview\") {\n return props.hasPeopleHealthData\n ? css`\n grid-auto-flow: row;\n\n & div:first-child {\n grid-column: 1 / 3;\n }\n `\n : css`\n grid-auto-flow: row;\n\n & div {\n grid-column: 1 / 3;\n }\n `;\n }\n }}\n`;\nconst SprintHealthPill = styled.div<{ sprintHealthScoreType: string }>`\n display: flex;\n background-color: ${props =>\n props.theme.colors.signalHealth[props.sprintHealthScoreType]};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n height: 3rem;\n`;\nconst Overlay = styled(TriggeredOverlay)`\n align-items: center;\n display: flex;\n flex: 1;\n`;\nconst HealthPillWrapper = styled.div`\n flex: 1;\n`;\nconst StyledIcon = styled(Icon)`\n margin-left: 1rem;\n color: ${props => props.theme.colors.all.wolverine};\n`;\nconst TooltipText = styled.div`\n white-space: pre-wrap;\n`;\nconst SprintHealthFooter = styled.div`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.wolverine}`};\n padding-top: 1rem;\n margin-top: auto;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst FooterPill = styled.div<{ sprintHealthScoreType: string }>`\n margin-left: 1rem;\n margin-right: 1rem;\n height: ${props => props.theme.fonts.primary.sizes.xs};\n width: ${props => props.theme.fonts.primary.sizes.xs};\n background-color: ${props =>\n props.theme.colors.signalHealth[props.sprintHealthScoreType]};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n data?: SprintHealthDataPointInterface | null;\n isActiveSprint?: boolean;\n testId?: string;\n};\n\nconst RetrosSprintHealthFactors = ({\n className,\n data,\n isActiveSprint,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-retros-sprint-health-factors`;\n const [activePill, setActivePill] = useState(null);\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const hasPeopleHealthData = flags?.[\"people-health-insights\"];\n const [sprintHealthFactorSet, setSprintHealthFactorSet] = useState(\n hasPeopleHealthData ? \"overview\" : \"projects\"\n );\n const { trackEvent } = useTracking();\n\n function onClickFactorSet(\n e: React.MouseEvent,\n factorSet: string\n ) {\n setSprintHealthFactorSet(factorSet);\n trackEvent({\n e,\n label: `retros-sprint-health-factors-${factorSet}`,\n value: `clicked`\n });\n }\n\n if (isNil(data)) {\n return null;\n }\n\n const chartData = (sprintHealthFactorSet === \"overview\"\n ? pick(data, Object.values(overviewHealthTypes))\n : sprintHealthFactorSet === \"people\"\n ? data.peopleHealthFactors\n : data.projectHealthFactors) as {\n [key: string]: number;\n };\n const sortedAndFilteredChartData: Array> = (sprintHealthFactorSet === \"overview\"\n ? compact([\n hasPeopleHealthData\n ? [\n overviewHealthTypes.AVERAGE_HEALTH,\n chartData[overviewHealthTypes.AVERAGE_HEALTH]\n ]\n : null,\n hasPeopleHealthData\n ? [\n overviewHealthTypes.PEOPLE_HEALTH,\n chartData[overviewHealthTypes.PEOPLE_HEALTH]\n ]\n : null,\n [\n overviewHealthTypes.PROJECT_HEALTH,\n chartData[overviewHealthTypes.PROJECT_HEALTH]\n ]\n ])\n : Object.entries(chartData).sort((a, b) => b[1] - a[1])\n ).filter(d => !isNil(d[1]));\n\n function getHealthPillText(sprintHealthFactorSet: string, key: string) {\n if (\n sprintHealthFactorSet !== \"overview\" ||\n key === overviewHealthTypes.AVERAGE_HEALTH\n )\n return healthFactorsMetadata[key].title;\n\n const signals = Object.values(\n (key === overviewHealthTypes.PEOPLE_HEALTH\n ? data?.peopleHealthFactors\n : data?.projectHealthFactors) || {}\n ).filter((s: number | null) => !isNil(s));\n const healthySignals = signals.filter(\n score => score && score >= healthScoreRanges[healthScoreTypes.GOOD][0]\n );\n\n const factorSet =\n key === overviewHealthTypes.PEOPLE_HEALTH ? \"people\" : \"projects\";\n return (\n <>\n {capitalize(factorSet).concat(\n \" (\",\n healthySignals.length.toString(),\n \"/\",\n signals.length.toString(),\n \" healthy signals)\"\n )}\n \n \n );\n }\n function getTooltipText(score: number) {\n return (\n \n {capitalize(getSprintRangeString(score).toLowerCase())}\n \n );\n }\n\n function onShowTooltip(nextShow: boolean) {\n trackEvent({\n label: \"retro-sprint-health\",\n value: `${!!nextShow ? \"showed\" : \"hid\"} sprint health from hover`\n });\n }\n\n const tooltipContent = `retros-sprint-health${\n !isActiveSprint ? \"-final\" : \"\"\n }`;\n\n return (\n
    \n
    \n Sprint Health{\" \"}\n \n
    \n \n \n \n {sortedAndFilteredChartData.map(entry => {\n const key = entry[0] as string;\n const score = entry[1] as number;\n\n return (\n \n \n }\n show={activePill === key}\n onToggleShow={onShowTooltip}\n triggerContent={\n \n ) => {\n const factorSet =\n key === overviewHealthTypes.AVERAGE_HEALTH\n ? \"overview\"\n : key === overviewHealthTypes.PEOPLE_HEALTH\n ? \"people\"\n : \"projects\";\n return sprintHealthFactorSet === \"overview\"\n ? onClickFactorSet(e, factorSet)\n : null;\n }}\n onMouseOver={() => setActivePill(key)}\n onMouseOut={() => setActivePill(null)}\n data-testid={`${key}-health-pill-wrapper`}\n >\n {getHealthPillText(sprintHealthFactorSet, key)}\n \n }\n testId={`${thisTestId}-${key}`}\n />\n \n );\n })}\n \n \n \n {Object.values(healthScoreTypes).map(type => (\n <>\n \n {capitalize(type.toLowerCase())}\n \n ))}\n \n
    \n );\n};\n\nexport default RetrosSprintHealthFactors;\n","import React, { useEffect } from \"react\";\nimport styled, { css } from \"styled-components/macro\";\n\n// components\nimport Icon from \"../Icon/Icon\";\nimport OverlayTrigger from \"react-bootstrap/OverlayTrigger\";\nimport Popover from \"react-bootstrap/Popover\";\nimport ReactionPills from \"../Annotations/ReactionPills\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interface\nimport { AnnotationsInterface } from \"../../interfaces/annotations\";\nimport { useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// styled components\nconst ReactIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n margin-right: 0.5rem;\n`;\nconst ReactButton = styled.button<{ userHasSelectedAnnotation: boolean }>`\n background-color: ${props => props.theme.colors.all.white};\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${\n props.userHasSelectedAnnotation\n ? props.theme.colors.all.wolverine\n : props.theme.colors.all.lightJean\n }`};\n font-size: 1.1rem;\n margin-right: 0.5rem;\n padding: 0.5rem;\n`;\n\n// typescript props\ntype Props = {\n annotations: Array;\n className?: string;\n context: any;\n onReact: (\n context: any,\n status: string,\n e: React.MouseEvent\n ) => void;\n name: string;\n testId?: string;\n};\n\nconst QuickReact = ({\n annotations,\n className,\n context,\n onReact,\n name,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-quick-react`;\n const [isOpen, setIsOpen] = useState(false);\n const { trackEvent } = useTracking();\n const user = useSelector((state: AppStateInterface) => state.user);\n const userHasSelectedAnnotation = !!annotations.find(\n (a: AnnotationsInterface) => a.userId === user.id\n );\n function onToggleOverlay(show: any) {\n setIsOpen(show);\n trackEvent({\n label: thisTestId,\n value: `${show ? \"opened\" : \"closed\"} quick react for ${name}`\n });\n }\n const numAnnotations = annotations.length;\n\n useEffect(() => {\n // close the menu on any change to annotations coming in, either added or removed\n setIsOpen(false);\n }, [numAnnotations]);\n\n return (\n \n \n \n }\n rootClose\n >\n \n \n React\n \n \n );\n};\n\nexport default QuickReact;\n","import React, { useState } from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { compact, kebabCase, sortBy, startCase, get, uniq } from \"lodash\";\nimport informationText from \"../../constants/informationText.json\";\n\n// components\nimport AnnotationsModal from \"../Annotations/AnnotationsModal\";\nimport Button from \"../Button/Button\";\nimport CommentsList from \"../CommentsList/CommentsList\";\nimport Icon from \"../Icon/Icon\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport QuickReact from \"../QuickReact/QuickReact\";\nimport TimeRange from \"../TimeRange/TimeRange\";\nimport Tooltip from \"../Tooltip/Tooltip\";\n\n// constants\nimport {\n annotationStatusTypes,\n orderedAnnotationStatusTypes,\n StatusIconMap\n} from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useMutation, useQueryClient } from \"react-query\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AnnotationsInterface } from \"../../interfaces/annotations\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\n\n// utils\nimport {\n removeAnnotations,\n writeAnnotations\n} from \"../../utils/work-deep-dive\";\n\n// styled components\nconst Header = styled.header`\n margin-bottom: 2rem;\n`;\nconst Title = styled.h3`\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n margin: 0;\n`;\nconst TitleWrapper = styled.div`\n align-items: center;\n display: flex;\n`;\nconst ReactionsRow = styled.div`\n align-items: center;\n display: flex;\n`;\nconst ReactionsSummary = styled.ul`\n align-items: center;\n display: flex;\n\n &:not(:empty) {\n margin-right: 3rem;\n }\n`;\nconst Reaction = styled.li`\n color: ${props => props.theme.colors.all.wolverine};\n & + & {\n margin-left: 1.5rem;\n }\n`;\nconst ReactionTrigger = styled(Button)<{ userHasSelectedAnnotation: boolean }>`\n align-items: center;\n display: flex;\n padding: 0.4rem 1.6rem;\n border: ${props =>\n props.userHasSelectedAnnotation\n ? `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.wolverine}`\n : \"0\"};\n border-radius: 1.6rem;\n`;\nconst ReactionTotal = styled.span`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n font-size: 2.4rem;\n line-height: 1;\n margin-bottom: 0;\n margin-left: 0.5rem;\n`;\nconst ReactionIcon = styled(Icon)<{ icon: string }>`\n color: inherit;\n font-size: 1.6rem;\n height: 1em;\n width: 1em;\n position: relative;\n top: -0.2rem;\n\n ${props => {\n if (\n props.icon === StatusIconMap[annotationStatusTypes.CELEBRATE] ||\n props.icon === StatusIconMap[annotationStatusTypes.DISAPPOINTED]\n ) {\n return css`\n top: 0;\n `;\n }\n }}\n`;\nconst CommentIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n`;\nconst CommentsListHeader = styled.header`\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n margin-bottom: 1.6rem;\n padding-bottom: 0.5rem;\n`;\nconst SprintMetadata = styled.h4`\n align-items: center;\n display: flex;\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin: 0 1rem 0 0;\n padding-right: 1rem;\n`;\nconst SprintName = styled.span`\n margin-right: 1rem;\n`;\nconst CallToAction = styled.p`\n color: ${props => props.theme.colors.all.storm};\n font-size: 80%;\n margin: 0.5rem 0 1rem;\n`;\nconst TeamList = styled.ul`\n && {\n padding-left: 0;\n }\n`;\nconst TeamMember = styled.li`\n list-style-type: none;\n`;\n\n// typescript props\ntype Props = {\n annotations?: Array;\n className?: string;\n sprint: TimerangeMetadataInterface;\n testId?: string;\n};\n\nconst RetrosSprintReactionsSummary = ({\n annotations = [],\n className,\n sprint,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-retros-sprint-reactions-summary`;\n const [isModalOpen, setIsModalOpen] = useState(false);\n // react-query hooks\n const queryClient = useQueryClient();\n const writeAnnotationsMutation = useMutation(writeAnnotations, {\n onSuccess: () => {\n // Invalidate annotations\n queryClient.invalidateQueries(\"annotations\");\n }\n });\n const removeAnnotationsMutation = useMutation(removeAnnotations, {\n onSuccess: () => {\n // Invalidate annotations\n queryClient.invalidateQueries(\"annotations\");\n }\n });\n\n const { trackEvent } = useTracking();\n const retroReactionId = \"retros-sprint-reactions-summary\";\n\n const sprintReactions = annotations.filter(\n (a: AnnotationsInterface) => a.workItemId === retroReactionId\n );\n const commentReactions = sortBy(\n sprintReactions.filter(\n (a: AnnotationsInterface) => !!a.userDetailedComment\n ),\n \"timestamp\"\n );\n const sprintContext = { sprintId: sprint.id, id: sprint.id };\n\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const user = useSelector((state: AppStateInterface) => state.user);\n const { urlParams } = useUrlParams();\n const teamMembers = urlParams.team?.teamMembers || [];\n\n // TODO: this is all mostly copy-pasta from EpicDetailsIssuesList -- figure out extracting these into a hook\n async function onReact(\n context: { [key: string]: string },\n status: string,\n e: React.SyntheticEvent\n ) {\n e.persist();\n e.preventDefault();\n\n // only do this check for existing annotations for emoji reactions, not\n // existing comments\n const existingAnnotation = annotations.find(\n (a: AnnotationsInterface) =>\n a.userId === user.id &&\n orderedAnnotationStatusTypes.includes(status) &&\n a.userAnnotationCheckinStatus === status\n );\n\n if (!!existingAnnotation) {\n try {\n removeAnnotationsMutation.mutate({\n accessToken,\n params: {\n annotationId: existingAnnotation.annotationId\n },\n tenantId\n });\n trackEvent({\n e,\n label: \"retros-sprint-reactions-summary-reaction\",\n value: `unreacted to ${sprint.displayName} with a value of ${status}`\n });\n } catch (err) {\n console.error(err);\n }\n } else {\n const isTextComment = !Object.values(annotationStatusTypes).includes(\n status\n );\n\n const annotation = {\n userAnnotationCheckinStatus: isTextComment ? \"\" : status,\n userAnnotationPainLevel: 0,\n userDetailedComment: isTextComment ? status : \"\",\n workItemAltId: \"\",\n workItemId: retroReactionId,\n workItemType: \"UI Component\"\n };\n\n try {\n writeAnnotationsMutation.mutate({\n accessToken,\n params: {\n users: [user.email],\n context,\n annotation\n },\n tenantId\n });\n trackEvent({\n e,\n label: \"retros-sprint-reactions-summary-reaction\",\n value: `${isTextComment ? \"commented on\" : \"reacted to\"} ${\n sprint.displayName\n } with a value of ${status}`\n });\n } catch (err) {\n console.error(err);\n }\n }\n }\n\n function onShowTooltip(e: React.MouseEvent, statusType: string) {\n trackEvent({\n e,\n label: `${thisTestId}-${kebabCase(statusType)}-tooltip`,\n value: `list of annotators shown for sprint summary status ${statusType}`\n });\n }\n\n return (\n
    \n
    \n \n Sprint Reactions\n \n \n \n {informationText[\"retros-sprint-reactions-cta\"]}\n \n \n \n {compact(\n orderedAnnotationStatusTypes.map(reactionKey => {\n const reactions = sprintReactions.filter(\n a => a.userAnnotationCheckinStatus === reactionKey\n );\n const userHasSelectedAnnotation = !!reactions.find(\n (a: AnnotationsInterface) => a.userId === user.id\n );\n return reactions.length ? (\n \n \n ) => onReact(sprintContext, reactionKey, e)}\n testId={`${thisTestId}-${reactionKey}`}\n userHasSelectedAnnotation={userHasSelectedAnnotation}\n >\n \n \n {startCase(reactionKey)}\n \n {reactions.length}\n \n }\n popupContent={\n \n {compact(\n uniq(\n reactions.map((a: AnnotationsInterface) => {\n const teamMember = teamMembers.find(\n (t: UserReportWithMetadataInterface) =>\n t.id === a.userId\n );\n return teamMember?.name || a.userEmail;\n })\n )\n )\n .sort()\n .map((displayName: string) => (\n \n {displayName}\n \n ))}\n \n }\n placement=\"bottom\"\n onShowTooltip={(e: React.MouseEvent) =>\n onShowTooltip(e, reactionKey)\n }\n testId={`${thisTestId}-${reactionKey}`}\n />\n \n ) : null;\n })\n )}\n \n \n setIsModalOpen(!!id)}\n headerContent={\n \n \n {sprint.displayName}\n \n \n \n }\n />\n \n
    \n {commentReactions.length ? (\n
    \n \n Comments (\n {commentReactions.length})\n \n \n
    \n ) : null}\n
    \n );\n};\n\nexport default RetrosSprintReactionsSummary;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { kebabCase } from \"lodash\";\n\n// components\nimport Icon from \"../Icon/Icon\";\nimport Tooltip from \"../Tooltip/Tooltip\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\nconst MAX_MEMBERS_PER_COLUMN = 10;\n\n// styled components\nconst StyledEye = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n margin-left: 1rem;\n`;\nconst List = styled.ul<{ names: number }>`\n && {\n padding-left: 0;\n }\n columns: ${props => `${Math.ceil(props.names / MAX_MEMBERS_PER_COLUMN)}`};\n gap: 2rem;\n`;\nconst StyledListItem = styled.li`\n list-style-type: none;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n header: React.ReactNode;\n names?: Array;\n testId?: string;\n};\n\nexport const TeamRoster = ({\n className,\n header,\n names = [],\n testId = \"testId\"\n}: Props): ReactElement | null => {\n const thisTestId = `${testId}-team-roster`;\n const { trackEvent } = useTracking();\n\n function onShowTooltip(e: React.MouseEvent) {\n e.persist();\n trackEvent({\n e,\n label: \"team-roster\",\n value: \"showed team roster from hover\"\n });\n }\n\n return !!names.length ? (\n \n {header}\n {}\n \n }\n popupContent={\n \n {names.map(name => (\n \n {name}\n \n ))}\n \n }\n placement=\"bottom\"\n />\n ) : null;\n};\n\nexport default TeamRoster;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// utils\nimport { getSprintRangeString } from \"../../utils/sprints\";\n\n// styled components\nconst Container = styled.em<{ scoreType: string }>`\n background: ${props => props.theme.colors.signalHealth[props.scoreType]};\n display: inline-block;\n font-size: 1.1rem;\n font-style: normal;\n line-height: 1.8;\n padding: 0 0.8rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n content?: React.ReactNode;\n score: number;\n testId?: string;\n};\n\nconst SignalHealthColor = ({\n className,\n content,\n score,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-signal-health-color`;\n const scoreType = getSprintRangeString(score);\n\n return (\n \n {content || scoreType}\n \n );\n};\n\nexport default SignalHealthColor;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport RouteLink from \"../RouteLink/RouteLink\";\n\n// styled components\nconst List = styled.dl`\n align-items: baseline;\n display: flex;\n`;\nconst Total = styled.dt`\n flex: 1;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n order: 2;\n white-space: nowrap;\n`;\nconst TotalNumber = styled.dd`\n font-family: ${props => props.theme.fonts.subheader.name};\n font-weight: 700;\n margin: 0;\n order: 1;\n width: 2.4em;\n`;\nconst WorkDeepDiveLink = styled(RouteLink)`\n color: ${props => props.theme.colors.all.wolverine};\n\n &:visited {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n cursor: \"pointer\";\n text-decoration: none;\n\n & ${Total} {\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n }\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n header: React.ReactNode;\n path: string;\n testId?: string;\n value: number;\n};\n\nconst SprintUpdatesTableItem = ({\n className,\n header,\n path,\n testId = \"testId\",\n value\n}: Props): ReactElement => {\n const thisTestId = `${testId}-sprint-updates-table-item`;\n return (\n \n \n {header}\n {value}\n \n \n );\n};\n\nexport default SprintUpdatesTableItem;\n","// constants\nimport {\n pageIds,\n pageMetadata,\n sprintMetadataWorkTypes,\n urlParamKeys,\n workDeepDiveSections,\n workItemCalloutTypes,\n workMetadataActivityTypes,\n workMetadataStatusTypes\n} from \"../constants/constants\";\nimport { PathHelperOptionsInterface } from \"../interfaces/url-params\";\nimport { RetroTotalsInterface } from \"../interfaces/work-items\";\n\n// utils\nimport { getPageTitle } from \"./router\";\n\nexport const getRetrosPageTitle = (): string => {\n return getPageTitle(pageMetadata[pageIds.RETROS].title);\n};\n\nexport const getSprintUpdateTablePathParams = (\n itemKey: keyof RetroTotalsInterface,\n isStrict?: boolean\n): PathHelperOptionsInterface => {\n switch (itemKey) {\n case \"addedMidSprint\":\n let querystringParams = {\n [urlParamKeys.CALLOUTS]: [workItemCalloutTypes.ADDED_MID_SPRINT],\n [urlParamKeys.SHOW_RELATED]: false\n };\n if (!!isStrict) {\n querystringParams = {\n ...querystringParams,\n [urlParamKeys.SPRINT_WORK_TYPES]: [\n sprintMetadataWorkTypes.SPRINT_WORK,\n sprintMetadataWorkTypes.PULL_REQUESTS_NOT_IN_SPRINT,\n sprintMetadataWorkTypes.REMOVED_FROM_SPRINT\n ]\n };\n }\n return {\n querystringParams,\n selectedSection: workDeepDiveSections.PROJECT_WORK\n };\n case \"addedMidSprintInSprint\":\n return {\n querystringParams: {\n [urlParamKeys.CALLOUTS]: [workItemCalloutTypes.ADDED_MID_SPRINT],\n [urlParamKeys.SHOW_RELATED]: false\n },\n selectedSection: workDeepDiveSections.PROJECT_WORK\n };\n case \"addedMidSprintRemoved\":\n return {\n querystringParams: {\n [urlParamKeys.CALLOUTS]: [workItemCalloutTypes.ADDED_MID_SPRINT],\n [urlParamKeys.SHOW_RELATED]: false,\n [urlParamKeys.SPRINT_WORK_TYPES]: [\n sprintMetadataWorkTypes.PULL_REQUESTS_NOT_IN_SPRINT,\n sprintMetadataWorkTypes.REMOVED_FROM_SPRINT\n ]\n },\n selectedSection: workDeepDiveSections.PROJECT_WORK\n };\n case \"notCompleted\":\n return {\n querystringParams: {\n [urlParamKeys.STATUS]: [\n workMetadataStatusTypes.IN_PROGRESS,\n workMetadataStatusTypes.OPEN\n ],\n [urlParamKeys.SHOW_RELATED]: false,\n [urlParamKeys.SPRINT_WORK_TYPES]: [\n sprintMetadataWorkTypes.SPRINT_WORK\n ],\n [urlParamKeys.WORK_ITEM_TYPES]: [\n workMetadataActivityTypes.BUG,\n workMetadataActivityTypes.ISSUE,\n workMetadataActivityTypes.SUB_TASK\n ]\n },\n selectedSection: workDeepDiveSections.PROJECT_WORK\n };\n case \"removedMidSprint\":\n return {\n querystringParams: {\n [urlParamKeys.SPRINT_WORK_TYPES]: [\n sprintMetadataWorkTypes.REMOVED_FROM_SPRINT\n ],\n [urlParamKeys.SHOW_RELATED]: false,\n [urlParamKeys.WORK_ITEM_TYPES]: [\n workMetadataActivityTypes.BUG,\n workMetadataActivityTypes.ISSUE,\n workMetadataActivityTypes.SUB_TASK\n ]\n },\n selectedSection: workDeepDiveSections.PROJECT_WORK\n };\n case \"carryOverFromPreviousSprint\":\n return {\n querystringParams: {\n [urlParamKeys.CALLOUTS]: [workItemCalloutTypes.OPEN_MULTIPLE_SPRINTS],\n [urlParamKeys.SHOW_RELATED]: false\n },\n selectedSection: workDeepDiveSections.PROJECT_WORK\n };\n case \"unestimatedItems\":\n return {\n querystringParams: {\n [urlParamKeys.CALLOUTS]: [workItemCalloutTypes.NULL_STORY_POINTS],\n [urlParamKeys.SHOW_RELATED]: false,\n [urlParamKeys.WORK_ITEM_TYPES]: [\n workMetadataActivityTypes.ISSUE,\n workMetadataActivityTypes.SUB_TASK\n ]\n },\n selectedSection: workDeepDiveSections.PROJECT_WORK\n };\n case \"completedOutsideSprint\":\n return {\n querystringParams: {\n [urlParamKeys.SPRINT_WORK_TYPES]: [\n sprintMetadataWorkTypes.COMPLETED_OUTSIDE_SPRINT\n ],\n [urlParamKeys.SHOW_RELATED]: false,\n [urlParamKeys.WORK_ITEM_TYPES]: [\n workMetadataActivityTypes.BUG,\n workMetadataActivityTypes.ISSUE,\n workMetadataActivityTypes.SUB_TASK\n ]\n },\n selectedSection: workDeepDiveSections.PROJECT_WORK\n };\n default:\n return {};\n break;\n }\n};\n","import React, { ReactElement } from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { isNil } from \"lodash\";\n\n// components\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport SprintUpdatesTableItem from \"../SprintUpdatesTableItem/SprintUpdatesTableItem\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { RetroTotalsInterface } from \"../../interfaces/work-items\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { getSprintUpdateTablePathParams } from \"../../utils/retros\";\n\n// styled components\nconst Header = styled.header`\n display: flex;\n margin-bottom: 2rem;\n align-items: center;\n`;\nconst Title = styled.h3`\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n`;\nconst Grid = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n column-gap: ${props => props.theme.grid.gap};\n`;\nconst ValuesWrapper = styled.div<{ canShowAddedMidSprintBreakout?: boolean }>`\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n margin-top: 1rem;\n padding-top: 1rem;\n\n ${props => {\n if (!!props.canShowAddedMidSprintBreakout) {\n return css`\n grid-area: 1/1/3/2;\n display: grid;\n grid-template-columns: 1fr;\n `;\n }\n }}\n\n &:nth-of-type(-n + 2) {\n border: none;\n margin-top: 0;\n padding-top: 0;\n }\n`;\nconst Nested = styled.div`\n align-items: center;\n display: flex;\n justify-content: flex-start;\n padding-left: 2.5em;\n\n & a + a {\n border-left: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n margin-left: 0.8em;\n padding-left: 0.8em;\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n retroTotals: RetroTotalsInterface;\n};\n\nconst SprintUpdatesTable = ({\n className,\n testId = \"testId\",\n retroTotals\n}: Props): ReactElement | null => {\n const thisTestId = `${testId}-sprint-updates-table`;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const { getWorkDeepDivePath } = useUrlParams();\n const isStrictUi = flags?.[\"strict-ui\"];\n const canShowAddedMidSprintBreakout =\n isStrictUi &&\n (!isNil(retroTotals.addedMidSprintInSprint) ||\n !isNil(retroTotals.addedMidSprintRemoved));\n\n return Object.values(retroTotals).every(t => isNil(t)) ? null : (\n
    \n
    \n Sprint Updates\n \n
    \n \n {isNil(retroTotals.addedMidSprint) ? null : (\n \n \n {canShowAddedMidSprintBreakout ? (\n \n {isNil(retroTotals.addedMidSprintInSprint) ? null : (\n \n )}\n {isNil(retroTotals.addedMidSprintRemoved) ? null : (\n \n )}\n \n ) : null}\n \n )}\n {isNil(retroTotals.notCompleted) ? null : (\n \n \n \n )}\n {isNil(retroTotals.carryOverFromPreviousSprint) ? null : (\n \n \n \n )}\n {isNil(retroTotals.removedMidSprint) ? null : (\n \n \n \n )}\n {isNil(retroTotals.unestimatedItems) ? null : (\n \n \n \n )}\n {isNil(retroTotals.completedOutsideSprint) ? null : (\n \n \n \n )}\n \n
    \n );\n};\n\nexport default SprintUpdatesTable;\n","import React, { ReactElement, useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isNull } from \"lodash\";\n\n// components\nimport PageTitle from \"../PageTitle/PageTitle\";\nimport RetrosSprintCompletion from \"../RetrosSprintCompletion/RetrosSprintCompletion\";\nimport RetrosSprintHealthFactors from \"../RetrosSprintHealthFactors/RetrosSprintHealthFactors\";\nimport RetrosSprintReactionsSummary from \"../RetrosSprintReactionsSummary/RetrosSprintReactionsSummary\";\nimport TeamRoster from \"../TeamRoster/TeamRoster\";\nimport TemplateHeader from \"../TemplateHeader/TemplateHeader\";\nimport SignalHealthColor from \"../SignalHealthColor/SignalHealthColor\";\nimport SprintUpdatesTable from \"../SprintUpdatesTable/SprintUpdatesTable\";\nimport TimeRange from \"../TimeRange/TimeRange\";\nimport UiCenteringWrapper from \"../UiCenteringWrapper/UiCenteringWrapper\";\n\n// constants\nimport {\n sprintStates,\n workMetadataStatusTypes\n} from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AnnotationsInterface } from \"../../interfaces/annotations\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { SprintHealthInterface } from \"../../interfaces/sprint-metadata\";\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\nimport { GroupsListInterface } from \"../../interfaces/work-items\";\n\n// utils\nimport { getTeamNameFromTeam } from \"../../utils/teams\";\nimport {\n getTeamRosterFromGroupsList,\n getWorkItemsActivitiesTotals\n} from \"../../utils/work-items\";\nimport DataDisclaimer from \"../DataDisclaimer/DataDisclaimer\";\n\n// styled components\nconst Container = styled.div`\n background: ${props => props.theme.colors.all.white};\n padding-bottom: 2rem;\n`;\nconst StyledTemplateHeader = styled(TemplateHeader)`\n border-bottom: 0;\n`;\nconst StyledPageTitle = styled(PageTitle)`\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n`;\nconst TitleWrapper = styled.hgroup`\n flex: 1;\n`;\nconst HeaderWrapper = styled.div`\n align-items: flex-end;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n display: flex;\n margin-bottom: 0.5rem;\n padding-bottom: 1rem;\n`;\nconst SubHeader = styled.div`\n align-items: center;\n display: flex;\n margin-top: 1.5rem;\n`;\nconst SprintMetadata = styled.h4`\n align-items: center;\n border-right: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n display: flex;\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin: 0 1rem 0 0;\n padding-right: 1rem;\n`;\nconst SprintName = styled.span`\n margin-right: 1rem;\n`;\nconst Stats = styled.div`\n align-items: baseline;\n display: flex;\n justify-content: flex-end;\n flex: 1;\n`;\nconst Stat = styled.div`\n align-items: baseline;\n display: flex;\n line-height: 1.8rem;\n\n & + & {\n margin-left: 1rem;\n }\n`;\nconst StatHeader = styled.header`\n font-size: 1.3rem;\n margin-right: 1rem;\n`;\nconst StatValue = styled.span`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n font-size: 2rem;\n font-weight: 700;\n`;\nconst SprintHealthStatValue = styled(SignalHealthColor)`\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n`;\nconst Grid = styled.div`\n display: grid;\n grid-template-columns: 1fr;\n column-gap: ${props => props.theme.grid.gap};\n`;\nconst Charts = styled.div`\n background: ${props =>\n `linear-gradient(${props.theme.colors.all.jean}, ${props.theme.colors.all.jean} 20.2rem, ${props.theme.colors.all.white} 20.2rem)`};\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0.1rem;\n margin-bottom: 3rem;\n`;\nconst SprintHealthChart = styled(RetrosSprintHealthFactors)`\n background: ${props => props.theme.colors.all.white};\n padding-right: 1.2rem;\n`;\nconst SprintCompletionChart = styled(RetrosSprintCompletion)`\n background: ${props => props.theme.colors.all.white};\n padding-left: 1.2rem;\n`;\nconst ReactionsAndStats = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n /* TODO: uncomment this when sprint reactions are in for real */\n /* grid-template-columns: ${props =>\n `calc(8 * ${props.theme.grid.columnWidth} + 7 * ${props.theme.grid.gap}) calc(4 * ${props.theme.grid.columnWidth} + 3 * ${props.theme.grid.gap})`}; */\n gap: ${props => props.theme.grid.gap};\n`;\nconst Footer = styled.footer`\n align-items: center;\n display: flex;\n justify-content: flex-end;\n margin-top: 2rem;\n`;\nconst ActiveSprint = styled.strong`\n color: ${props => props.theme.colors.all.wolverine};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n`;\n\n// typescript props\ntype Props = {\n annotations?: Array | null;\n className?: string;\n sprint: TimerangeMetadataInterface;\n sprintCompletionData: GroupsListInterface;\n sprintHealthFactorsData: SprintHealthInterface;\n testId?: string;\n};\n\nconst RetrosSummary = ({\n className,\n annotations = [],\n sprint,\n sprintCompletionData,\n sprintHealthFactorsData,\n testId = \"testId\"\n}: Props): ReactElement | null => {\n const thisTestId = `${testId}-retros-summary`;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const { urlParams } = useUrlParams();\n const activeTeam = urlParams.team;\n const activitiesTotals = useMemo(\n () => getWorkItemsActivitiesTotals(sprintCompletionData.activities),\n [sprintCompletionData]\n );\n\n const sprintCompletionPercentage = (\n activitiesTotals.find(\n activity => activity.status === workMetadataStatusTypes.DONE\n )?.percentage || 0\n ).toFixed(0);\n const sprintHealthScore = sprintHealthFactorsData?.[sprint.id]?.averageHealth;\n\n return !!activeTeam && !!sprintHealthScore ? (\n \n \n \n \n \n \n {sprint.displayName}\n \n \n \n \n \n \n {!!sprintHealthScore ? (\n \n Sprint Health:\n \n \n ) : null}\n {!!sprintCompletionPercentage ? (\n \n Sprint Completion:\n {sprintCompletionPercentage}\n %\n \n ) : null}\n \n \n }\n testId={thisTestId}\n />\n \n \n \n \n \n \n \n {flags?.[\"retros-annotations-summary\"] && !isNull(annotations) ? (\n \n ) : null}\n record.callout === \"NULL_STORY_POINTS\"\n )?.total\n }}\n testId={thisTestId}\n />\n \n \n
    \n \n \n Note: this sprint is currently active\n {\" \"}\n and data will change as progress is made. Uplevel data is\n refreshed daily.\n \n )\n }\n testId={thisTestId}\n />\n
    \n
    \n
    \n ) : null;\n};\n\nexport default RetrosSummary;\n","import { useMemo } from \"react\";\nimport { findIndex, take } from \"lodash\";\n\n// constants\nimport { SPRINT_HEALTH_CHART_NUM_SPRINTS } from \"../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useQuery } from \"react-query\";\nimport { useUrlParams } from \"./useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\nimport { SprintInterface } from \"../interfaces/sprint-metadata\";\n\n// utils\nimport { requestSprintHealth } from \"../utils/sprints\";\n\nexport const useSprintHealthData = (canRequest = true) => {\n const { urlParams } = useUrlParams();\n const sprint = urlParams.timerange;\n const board = urlParams.board;\n const teamId = urlParams.teamId;\n\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n\n const params = useMemo(() => {\n if (!!board && !!sprint) {\n const sprints = board.sprints;\n const currentSprintIndex = findIndex(\n sprints,\n (t: SprintInterface) => t.sprintId === sprint.id\n );\n const sprintIds =\n currentSprintIndex < 0\n ? []\n : take(\n sprints.slice(currentSprintIndex),\n SPRINT_HEALTH_CHART_NUM_SPRINTS\n ).map(s => s.sprintId);\n\n return {\n sprintIds,\n teamId\n };\n }\n return {\n sprintIds: [],\n teamId: \"\"\n };\n }, [board, sprint, teamId]);\n\n return useQuery(\n [\"sprint-health\", params],\n () =>\n requestSprintHealth({\n accessToken,\n tenantId,\n params\n }),\n {\n enabled:\n !!accessToken &&\n !!tenantId &&\n !!params.sprintIds.length &&\n canRequest &&\n !!teamId\n }\n );\n};\n","import React, { ReactElement, useEffect } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, isNull } from \"lodash\";\n\n// components\nimport { Redirect } from \"react-router-dom\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport WorkItemsGroupBySelector from \"../WorkItemsGroupBySelector/WorkItemsGroupBySelector\";\nimport RetrosRangeFactorsContainer from \"../RetrosRangeFactorsContainer/RetrosRangeFactorsContainer\";\nimport RetrosSummary from \"../RetrosSummary/RetrosSummary\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\nimport UiCenteringWrapper from \"../UiCenteringWrapper/UiCenteringWrapper\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\n\n// constants\nimport {\n groupByTypes,\n signalTypes,\n healthScoreRanges,\n timerangeTypes\n} from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useLocation } from \"react-router-dom\";\nimport { useSprintHealthData } from \"../../hooks/useSprintHealthData\";\nimport { useWorkItemsData } from \"../../hooks/useWorkItemsData\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\n\n// utils\nimport { getRetrosPageTitle } from \"../../utils/retros\";\nimport { useAnnotationsData } from \"../../hooks/useAnnotationsData\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { GroupsListInterface } from \"../../interfaces/work-items\";\nimport { getIsSprintMode } from \"../../utils/sprints\";\nimport RouteLink from \"../RouteLink/RouteLink\";\n\n// styled components\nconst RangeFactors = styled(RetrosRangeFactorsContainer)`\n background: ${props => props.theme.colors.all.white};\n margin-top: 3rem;\n padding: 2rem;\n`;\nconst FactorsHeader = styled.h3`\n font-size: 2rem;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.brand.jean}`};\n padding-bottom: 1rem;\n`;\nconst GroupBy = styled(WorkItemsGroupBySelector)`\n margin-bottom: 2rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst RetrosPage = ({ className, testId = \"testId\" }: Props): ReactElement => {\n const thisTestId = `${testId}-retros-page`;\n const location = useLocation();\n\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const { getSettingsPath, urlParams } = useUrlParams();\n const sprint = urlParams.timerange as TimerangeMetadataInterface;\n const groupBy = urlParams.groupBy;\n const activeTeam = urlParams.team;\n const isOrgChartTeam = activeTeam?.isOrgChartTeam;\n const shouldUseSprints = activeTeam?.useSprints;\n const board = urlParams.board;\n const canViewRetros = flags?.[\"sprint-retros\"];\n // org chart teams have their useSprints attribute set to true by default but\n // if we attempt to find a board for the team and come up empty, then we\n // should assume that the team doesn't *actually* use sprints and the cake is\n // a lie. this is the same logic as in the toggle for the sprints on the team\n // cards.\n const teamActuallyUsesSprints = isOrgChartTeam\n ? shouldUseSprints && !!board\n : shouldUseSprints;\n\n const {\n data,\n isError: isErrorSprintCompletionData,\n isLoading: isLoadingSprintCompletionData\n } = useWorkItemsData({\n options: {\n type: \"retros\"\n }\n });\n const sprintCompletionData = (data as unknown) as GroupsListInterface;\n\n const {\n data: sprintHealthData,\n isError: isErrorSprintHealthData,\n isLoading: isLoadingSprintHealthData\n } = useSprintHealthData();\n\n const {\n data: annotationsData,\n isError: isErrorAnnotationsData,\n isLoading: isLoadingAnnotationsData\n } = useAnnotationsData(\n {\n type: \"retros\"\n },\n sprint.timerangeType === timerangeTypes.SPRINTS\n );\n\n // page title change\n useEffect(() => {\n document.title = getRetrosPageTitle();\n }, [location]);\n\n return canViewRetros ? (\n
    \n \n {\" \"}\n \n \n {!teamActuallyUsesSprints ? (\n \n It looks like this team does not have an active sprint for\n the selected time period.{\" \"}\n {activeTeam?.isOrgChartTeam ? null : (\n <>\n If you believe this is an error, please ensure a Sprint\n is assigned in the{\" \"}\n \n Team Builder\n \n .\n \n )}\n \n }\n header=\"Hello!\"\n testId={thisTestId}\n />\n ) : !getIsSprintMode(sprint) || groupBy === groupByTypes.USER ? (\n \n ) : (\n \n )}\n \n }\n content={\n !!sprintCompletionData && !!sprintHealthData ? (\n \n \n Things going well}\n sectionType={signalTypes.HEALTHY}\n sprintCompletionData={sprintCompletionData}\n sprintHealthFactorsData={sprintHealthData}\n range={[\n healthScoreRanges.GOOD[0],\n healthScoreRanges.EXCELLENT[1]\n ]}\n sprint={sprint}\n testId=\"retros-went-well\"\n />\n Things to look into}\n sectionType={signalTypes.UNHEALTHY}\n sprintCompletionData={sprintCompletionData}\n sprintHealthFactorsData={sprintHealthData}\n range={healthScoreRanges.CONCERNING}\n sprint={sprint}\n testId=\"retros-look-into\"\n />\n \n ) : null\n }\n testId=\"sprint-retros\"\n />\n
    \n ) : (\n \n );\n};\n\nexport default RetrosPage;\n","import { useEffect, useMemo, useState } from \"react\";\n\nimport { ErrorInterface } from \"../../interfaces/error\";\nimport { JiraProjectDto } from \"../../interfaces/project-tracking-models\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { requestEnabledJiraProjectsData } from \"../../utils/settings\";\nimport { captureException, withScope } from \"@sentry/react\";\n\nexport const useBackingData = (\n manualState?: JiraProjectDto[]\n): [JiraProjectDto[], boolean, ErrorInterface | null] => {\n const [data, _setData] = useState([]);\n const [isFetchingData, _setIsFetchingData] = useState(true);\n const [error, _setError] = useState(null);\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const requestProps = useMemo(() => {\n return {\n accessToken,\n tenantId\n };\n }, [accessToken, tenantId]);\n\n useEffect(() => {\n (async () => {\n if (manualState) {\n _setData(manualState);\n } else {\n try {\n if (!error) {\n const responseData = await requestEnabledJiraProjectsData(\n requestProps\n );\n _setData(responseData);\n }\n } catch (e) {\n _setError(e);\n withScope(scope => {\n scope.setContext(\n \"request-enabled-jira-projects-data\",\n requestProps\n );\n captureException(e);\n });\n }\n }\n _setIsFetchingData(false);\n })();\n }, [manualState, requestProps, error]);\n\n return [data, isFetchingData, error];\n};\n","import TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\nimport React, { useState } from \"react\";\n\nimport styled from \"styled-components/macro\";\nimport Table from \"../Table/Table\";\nimport { useBackingData } from \"./useBackingData\";\nimport { isNull } from \"lodash\";\nimport Spinner from \"../Spinner/Spinner\";\nimport { JiraProjectDto } from \"../../interfaces/project-tracking-models\";\nimport PaginationStepper from \"../PaginationStepper/PaginationStepper\";\n\n// styled components\nconst ContentWrapper = styled.div`\n background: ${props => props.theme.colors.all.white};\n padding: 1.2rem 2rem 2rem;\n height: 62rem;\n display: flex;\n flex-direction: column;\n`;\nconst Header = styled.header`\n align-items: flex-start;\n display: flex;\n justify-content: space-between;\n`;\nconst Title = styled.h1`\n align-items: baseline;\n display: flex;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n font-size: 2rem;\n line-height: 1;\n margin-bottom: 2rem;\n`;\nconst StyledTable = styled(Table)`\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n width: 100%;\n padding-bottom: 1rem;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.brand.jean}`};\n & thead {\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.brand.jean}`};\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.brand.jean}`};\n }\n & th {\n font-size: ${props => props.theme.fonts.subheader.sizes.xs};\n padding: 0.5rem 0 0.5rem 1rem;\n text-align: left;\n }\n & tbody {\n & tr + tr {\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.brand.jean}`};\n }\n }\n & td {\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n padding-right: 0;\n padding-left: 1rem;\n text-align: left;\n vertical-align: middle;\n }\n & td + td {\n border-left: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.brand.jean}`};\n }\n`;\nconst ColHeader = styled.span`\n font-size: 1.3rem;\n`;\nconst SpinnerWrapper = styled.div`\n align-items: center;\n display: flex;\n flex-flow: column nowrap;\n justify-content: center;\n min-height: 30rem;\n width: 100%;\n`;\nconst PaginationStepperWrapper = styled.div`\n margin-bottom: 2rem;\n margin-top: auto;\n`;\n\ntype Props = {\n className?: string;\n manualState?: JiraProjectDto[];\n testId?: string;\n};\n\nconst EnabledJiraProjects = ({\n className,\n manualState,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-settings-jiraprj`;\n\n const [currentPage, _setCurrentPage] = useState(0);\n const pageSize = 15;\n\n const columns = [\n {\n accessor: \"projectKey\",\n Cell: ({ cell }: { cell: { value: string } }) => (\n {cell.value}\n ),\n Header: Key,\n className: \"projectKey\"\n },\n {\n accessor: \"projectName\",\n Cell: ({ cell }: { cell: { value: string } }) => (\n {cell.value}\n ),\n Header: Name,\n className: \"projectName\"\n }\n ];\n\n const [data, isFetchingData, error] = useBackingData(manualState);\n\n if (error || !data.length) {\n return null;\n }\n\n let tableData = data?.slice(\n currentPage * pageSize,\n (currentPage + 1) * pageSize\n );\n\n function onChangePaginationStepper({ updatedPage }: { updatedPage: number }) {\n _setCurrentPage(updatedPage);\n tableData = data?.slice(\n updatedPage * pageSize,\n (updatedPage + 1) * pageSize\n );\n }\n\n let displayContent;\n if (isNull(isFetchingData)) {\n displayContent = (\n \n \n \n );\n } else {\n displayContent = (\n \n
    \n Enabled Jira Projects\n
    \n \n \n \n \n
    \n );\n }\n\n return (\n
    \n \n {displayContent}\n \n
    \n );\n};\n\nexport default EnabledJiraProjects;\n","import { useEffect, useMemo, useState } from \"react\";\n\nimport { ErrorInterface } from \"../../interfaces/error\";\nimport { Repository } from \"../../interfaces/repository\";\nimport { requestEnabledRepositories } from \"../../utils/settings\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { captureException, withScope } from \"@sentry/react\";\n\nexport const useBackingData = (\n manualState?: Repository[]\n): [Repository[], boolean, ErrorInterface | null] => {\n const [data, _setData] = useState([]);\n const [isFetchingData, _setIsFetchingData] = useState(true);\n const [error, _setError] = useState(null);\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const requestProps = useMemo(() => {\n return {\n accessToken,\n tenantId\n };\n }, [accessToken, tenantId]);\n\n useEffect(() => {\n (async () => {\n if (manualState) {\n _setData(manualState);\n } else {\n try {\n if (!error) {\n const responseData = await requestEnabledRepositories(requestProps);\n _setData(responseData);\n }\n } catch (e) {\n _setError(e);\n withScope(scope => {\n scope.setContext(\"request-enabled-repositories\", requestProps);\n captureException(e);\n });\n }\n }\n _setIsFetchingData(false);\n })();\n }, [manualState, requestProps, error]);\n\n return [data, isFetchingData, error];\n};\n","import TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\nimport React, { useState } from \"react\";\n\nimport styled from \"styled-components/macro\";\nimport Table from \"../Table/Table\";\nimport { isNull } from \"lodash\";\nimport Spinner from \"../Spinner/Spinner\";\nimport { useBackingData } from \"./useBackingData\";\nimport { Repository } from \"../../interfaces/repository\";\nimport PaginationStepper from \"../PaginationStepper/PaginationStepper\";\n\n// styled components\nconst ContentWrapper = styled.div`\n background: ${props => props.theme.colors.all.white};\n padding: 1.2rem 2rem 2rem;\n height: 62rem;\n display: flex;\n flex-direction: column;\n`;\nconst Header = styled.header`\n align-items: flex-start;\n display: flex;\n justify-content: space-between;\n`;\nconst Title = styled.h1`\n align-items: baseline;\n display: flex;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n font-size: 2rem;\n line-height: 1;\n margin-bottom: 2rem;\n`;\nconst StyledTable = styled(Table)`\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n width: 100%;\n padding-bottom: 1rem;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.brand.jean}`};\n & thead {\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.brand.jean}`};\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.brand.jean}`};\n }\n & th {\n font-size: ${props => props.theme.fonts.subheader.sizes.xs};\n padding: 0.5rem 0 0.5rem 1rem;\n text-align: left;\n }\n & tbody {\n & tr + tr {\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.brand.jean}`};\n }\n }\n & td {\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n padding-right: 0;\n padding-left: 1rem;\n text-align: left;\n vertical-align: middle;\n }\n & td + td {\n border-left: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.brand.jean}`};\n }\n`;\nconst PaginationStepperWrapper = styled.div`\n margin-bottom: 2rem;\n margin-top: auto;\n`;\nconst SpinnerWrapper = styled.div`\n align-items: center;\n display: flex;\n flex-flow: column nowrap;\n justify-content: center;\n min-height: 30rem;\n width: 100%;\n`;\n\ntype Props = {\n className?: string;\n manualState?: Repository[];\n testId?: string;\n};\nconst EnabledRepositoriesTable = ({\n className,\n testId = \"testId\",\n manualState\n}: Props) => {\n const thisTestId = `${testId}-settings-jiraprj`;\n const [currentPage, _setCurrentPage] = useState(0);\n\n const [data, isFetchingData, error] = useBackingData(manualState);\n const pageSize = 15;\n const columns = [\n {\n Header: \"Repository\",\n Cell: ({ cell }: { cell: { value: string } }) => (\n {cell.value}\n ),\n accessor: \"repositoryName\",\n className: \"repositoryName\"\n },\n {\n Header: \"Project\",\n Cell: ({ cell }: { cell: { value: string } }) => (\n {cell.value}\n ),\n accessor: \"projectName\",\n className: \"projectName\"\n }\n ];\n\n if (error || !data.length) {\n return null;\n }\n\n let tableData = data?.slice(\n currentPage * pageSize,\n (currentPage + 1) * pageSize\n );\n\n function onChangePaginationStepper({ updatedPage }: { updatedPage: number }) {\n _setCurrentPage(updatedPage);\n tableData = data?.slice(\n updatedPage * pageSize,\n (updatedPage + 1) * pageSize\n );\n }\n\n let displayContent;\n if (isNull(isFetchingData)) {\n displayContent = (\n \n \n \n );\n } else {\n displayContent = (\n \n
    \n Enabled Repositories \n
    \n \n \n \n \n
    \n );\n }\n\n return (\n
    \n \n {displayContent}\n \n
    \n );\n};\n\nexport default EnabledRepositoriesTable;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport SelectableInputsList from \"../SelectableInputsList/SelectableInputsList\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport {\n RadioCheckboxToggleAllHandlerInterface,\n RadioCheckboxToggleHandlerInterface\n} from \"../../interfaces/controls\";\nimport { UiFilterSelectionStatusInterface } from \"../../interfaces/ui-filter\";\n\n// styled components\nconst StyledSelectableInputs = styled(SelectableInputsList)`\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n line-height: 1.8;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n columns?: number;\n header?: React.ReactNode;\n list: Array;\n onUpdateSelection: (updated: Array) => void;\n name: string;\n showSelectAll?: boolean;\n testId?: string;\n type?: \"checkbox\" | \"radio\";\n};\n\nconst UiFilterSelectableInputsList = ({\n className,\n columns = 1,\n header,\n list,\n name,\n onUpdateSelection,\n showSelectAll = true,\n testId = \"testId\",\n type = \"checkbox\"\n}: Props) => {\n const thisTestId = `${testId}-ui-filter-checkbox-list`;\n const { trackEvent } = useTracking();\n\n function onToggleAllSelected({\n e,\n allSelected\n }: RadioCheckboxToggleAllHandlerInterface) {\n trackEvent({\n e,\n label: `${name}-ui-filter`,\n value: `all options toggled ${allSelected ? \"on\" : \"off\"}`\n });\n onUpdateSelection(\n list.map(l => {\n return {\n ...l,\n isSelected: allSelected\n };\n })\n );\n }\n\n function onToggleSelection({\n e,\n option\n }: RadioCheckboxToggleHandlerInterface) {\n trackEvent({\n e,\n label: `${name}-ui-filter`,\n value: `${option.label} toggled ${e.target.checked ? \"on\" : \"off\"}`\n });\n onUpdateSelection(\n list.map(l => {\n return {\n ...l,\n isSelected: option.value === l.id ? e.target.checked : l.isSelected\n };\n })\n );\n }\n\n const listOptions = list.map(l => {\n return {\n disabled: !!l.isDisabled,\n label: l.name,\n selected: l.isSelected,\n value: l.id\n };\n });\n\n return (\n
    \n \n
    \n );\n};\n\nexport default UiFilterSelectableInputsList;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { defaults } from \"lodash\";\n\n// components\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport UiFilterSelectableInputsList from \"../UiFilterSelectableInputsList/UiFilterSelectableInputsList\";\n\n// constants\nimport { groupByTypes } from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useQueryClient, useMutation } from \"react-query\";\nimport { useUserSettings } from \"../../hooks/useUserSettings\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { UiFilterSelectionStatusInterface } from \"../../interfaces/ui-filter\";\n\n// utils\nimport { updateUserSettings } from \"../../utils/settings\";\n\n// styled components\n\nconst Container = styled.div`\n background: ${props => props.theme.colors.all.white};\n padding: 1rem;\n margin-top: 1rem;\n min-width: 30rem;\n`;\nconst FormHeader = styled.header`\n font-family: ${props => props.theme.fonts.primary.name}, monospace;\n margin-bottom: 1rem;\n display: flex;\n`;\n\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst SettingsDefaultGroupBySelector = ({\n className,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-settings-default-group-by-selector`;\n const { trackEvent } = useTracking();\n\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n\n // react-query hooks\n const queryClient = useQueryClient();\n const { data: userSettings } = useUserSettings();\n const userSettingsMutation = useMutation(updateUserSettings, {\n onSuccess: () => {\n // Invalidate and refetch\n queryClient.invalidateQueries(\"user-settings\");\n }\n });\n\n const optionsList = ([\n {\n name: `Epic`,\n id: groupByTypes.EPIC\n },\n {\n name: `Project`,\n id: groupByTypes.PROJECT\n }\n ] as Array<{\n name: string;\n id: string;\n }>).map(m => {\n return {\n id: m.id,\n isSelected: userSettings.defaultJiraGroupBy === m.id,\n name: m.name\n };\n });\n\n const onChange = (updated: Array) => {\n const updatedType = updated.find(\n (u: UiFilterSelectionStatusInterface) =>\n u.isSelected && u.id !== userSettings.defaultJiraGroupBy\n );\n if (updatedType) {\n // send direct api request, mutation will invalidate and refetch settings\n // and useeffect will set groupby from settings\n userSettingsMutation.mutate({\n accessToken,\n tenantId,\n params: defaults({ defaultJiraGroupBy: updatedType.id }, userSettings)\n });\n trackEvent({\n label: \"settings-default-group-by-change\",\n value: `settings-default-group-by changed to ${updatedType.id}`\n });\n }\n };\n\n return (\n \n \n Aggregate Jira content by:{\" \"}\n \n \n \n \n );\n};\n\nexport default SettingsDefaultGroupBySelector;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport EnabledJiraProjects from \"../EnabledJiraProjects/EnabledJiraProjects\";\nimport EnabledRepositoriesTable from \"../EnabledRepositoriesTable/EnabledRepositoriesTable\";\nimport SettingsDefaultGroupBySelector from \"../SettingsDefaultGroupBySelector/SettingsDefaultGroupBySelector\";\nimport SupportEmailLink from \"../SupportEmailLink/SupportEmailLink\";\n\n// styled components\nconst Container = styled.div`\n padding-top: 3rem;\n`;\nconst IntroText = styled.p`\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n margin-bottom: 1rem;\n padding-bottom: 1rem;\n`;\nconst Grid = styled.div`\n display: grid;\n grid-template-columns: 1fr 2fr;\n gap: 0rem;\n`;\nconst Subgrid = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 3rem;\n`;\nconst Header = styled.h4`\n margin-top: 1rem;\n align-items: center;\n display: flex;\n font-size: inherit;\n font-weight: ${props => props.theme.fonts.primary.weights.book};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst SettingsProjectsAndRepos = ({ className, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-settings-projects-and-repos`;\n return (\n \n \n Projects and Repositories are enabled in the Uplevel Connector Hub and\n can be added by reaching out to{\" \"}\n .\n \n \n
    \n
    Change how content is displayed
    \n \n
    \n
    \n
    Data your organization provides to Uplevel
    \n \n \n \n \n
    \n
    \n
    \n );\n};\n\nexport default SettingsProjectsAndRepos;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { kebabCase } from \"lodash\";\n\n// components\nimport CustomRadioInput from \"../CustomRadioInput/CustomRadioInput\";\n\n// styled components\nconst Radio = styled(CustomRadioInput)`\n align-items: center;\n cursor: pointer;\n`;\nconst Label = styled.span`\n font-size: 1.1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n isDefault: boolean;\n onChangeDefaultTeam: (e: React.ChangeEvent) => void;\n teamName: string;\n testId?: string;\n};\n\nconst DefaultTeamRadio = ({\n className,\n isDefault,\n onChangeDefaultTeam,\n teamName,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-default-team-radio`;\n return (\n Make my default team}\n name={`${kebabCase(teamName)}-default-team`}\n onChange={onChangeDefaultTeam}\n selected={isDefault}\n testId={thisTestId}\n value=\"default-team\"\n />\n );\n};\n\nexport default DefaultTeamRadio;\n","import React, { useEffect } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isNull, sample } from \"lodash\";\nimport { currentTheme } from \"../../themes/currentTheme\";\n\n// components\nimport AvatarIcon from \"../AvatarIcon/AvatarIcon\";\nimport { TEAM_ICONS } from \"../Icon/Icon\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// utils\nconst createIcon = () => sample(Object.keys(TEAM_ICONS)) as string;\nconst createColor = () => sample(currentTheme.colors.avatarIcons) as string;\n\n// styled components\nconst Container = styled.button`\n border: 0;\n background: none;\n padding: 0;\n position: relative;\n`;\nconst DisplayIcon = styled(AvatarIcon)`\n font-size: 1em;\n`;\nconst ShuffleIcon = styled(AvatarIcon)`\n border-width: 0.1rem;\n bottom: 0;\n right: -0.5rem;\n font-size: 0.5em;\n position: absolute;\n`;\n\n// typescript props\ntype Props = {\n avatarColor: string | null;\n avatarIcon: string | null;\n className?: string;\n onCreateIcon: (avatarIcon: string, avatarColor: string) => void;\n testId?: string;\n};\n\nconst AvatarIconCreator = ({\n avatarColor,\n avatarIcon,\n className,\n onCreateIcon,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-avatar-icon-creator`;\n const { trackEvent } = useTracking();\n\n useEffect(() => {\n if (isNull(avatarColor) && isNull(avatarIcon)) {\n onCreateIcon(createIcon(), createColor());\n }\n }, [avatarColor, avatarIcon]);\n\n function onClickCreator(e: React.MouseEvent) {\n e.persist();\n e.preventDefault();\n const updatedIcon = createIcon();\n const updatedColor = createColor();\n onCreateIcon(updatedIcon, updatedColor);\n\n trackEvent({\n e,\n label: \"avatar-icon-creator\",\n value: `created ${updatedColor} ${updatedIcon} icon`\n });\n }\n\n return isNull(avatarColor) && isNull(avatarIcon) ? null : (\n \n \n \n \n );\n};\n\nexport default AvatarIconCreator;\n","import React from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { currentTheme } from \"../../themes/currentTheme\";\nimport informationText from \"../../constants/informationText.json\";\n\n// components\nimport Dropdown from \"../Dropdown/Dropdown\";\nimport InfoPopup from \"../InfoPopup/InfoPopup\";\nimport Switch from \"../Switch/Switch\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\n\n// constants\nimport { sprintStates } from \"../../constants/constants\";\n\n// interfaces\nimport { SelectOptionsInterface } from \"../../interfaces/controls\";\nimport { BoardInterface } from \"../../interfaces/sprint-metadata\";\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\nimport { ProjectInterface } from \"../../interfaces/work-items\";\n\n// styled components\nconst ProjectInput = styled(Dropdown)`\n flex: 1;\n`;\nconst BoardInput = styled(Dropdown)`\n flex: 1;\n`;\nconst StyledSwitch = styled(Switch)`\n font-size: inherit;\n flex: 1;\n`;\nconst Label = styled.span`\n font-size: inherit;\n margin-right: 1rem;\n\n &::after {\n content: \":\";\n }\n`;\nconst NoData = styled.span`\n color: ${props => props.theme.colors.all.jean};\n`;\nconst Sprint = styled.div<{ isEditing: boolean }>``;\nconst MetadataType = styled.div`\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin-right: 0.5rem;\n\n &::after {\n content: \":\";\n }\n`;\nconst MetadataValue = styled.div`\n flex: 1;\n`;\nconst MetadataWrapper = styled.div<{ isDropdown: boolean; isEditing: boolean }>`\n padding: 0.4rem 0;\n\n align-items: baseline;\n display: flex;\n\n & + & {\n margin-top: 0.8rem;\n }\n\n ${props => {\n if (props.isEditing) {\n const updatedMargin = css`\n & + & {\n margin-top: 0.4rem;\n }\n `;\n\n if (props.isDropdown) {\n return css`\n display: block;\n padding: 0;\n ${updatedMargin}\n `;\n }\n return css`\n border: ${props.theme.borders.widths.sm} solid\n ${props.theme.colors.all.jean};\n padding-left: 0.8rem;\n padding-right: 0.8rem;\n ${updatedMargin}\n `;\n }\n }}\n`;\nconst Error = styled.strong`\n color: ${props => props.theme.colors.all.cyclops};\n display: block;\n font-size: 1.1rem;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin-top: 0.4rem;\n`;\n\nconst getInputStyles = (hasError: boolean) => ({\n control: (styleObj: Record) => ({\n ...styleObj,\n border: `${currentTheme.borders.widths.sm} solid ${\n hasError ? currentTheme.colors.all.cyclops : currentTheme.colors.all.jean\n }`,\n borderRadius: 0,\n boxShadow: \"none\",\n padding: \"0\",\n \":hover\": {\n border: `${currentTheme.borders.widths.sm} solid ${\n hasError\n ? currentTheme.colors.all.cyclops\n : currentTheme.colors.all.jean\n }`\n }\n })\n});\n\n// typescript props\ntype Props = {\n board: BoardInterface | null;\n boards: Array;\n className?: string;\n hasBoardError: boolean;\n hasProjectError: boolean;\n isEditing: boolean;\n isOrgChartTeam?: boolean;\n onSelectBoard: (selected: SelectOptionsInterface) => void;\n onSelectProject: (selected: SelectOptionsInterface) => void;\n onToggleSprints: (e: React.ChangeEvent) => void;\n project: ProjectInterface | null;\n projects: Array;\n testId?: string;\n shouldUseSprints: boolean;\n sprint: TimerangeMetadataInterface | null;\n};\n\nconst SprintsMetadataSelector = ({\n board,\n boards,\n className,\n hasBoardError,\n hasProjectError,\n isEditing,\n isOrgChartTeam = false,\n onSelectBoard,\n onSelectProject,\n onToggleSprints,\n project,\n projects,\n shouldUseSprints,\n sprint,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-sprints-metadata-selector`;\n // org chart teams have their useSprints attribute set to true by default but\n // if we attempt to find a board for the team and come up empty, then we\n // shouldn't show the 'use sprints' toggle as being active/yes and then show\n // no sprint data, so reconciling this with this somewhat janky workaround.\n // when we are able to edit the sprint data for an org chart team, maybe this\n // becomes unnecessary?\n const actuallyUsesSprints = isOrgChartTeam\n ? shouldUseSprints && !!board\n : shouldUseSprints;\n\n const projectOptions = projects.map((p: ProjectInterface) => {\n return {\n label: p.projectName,\n value: p.projectId,\n selected: p.projectId === project?.projectId\n };\n });\n const selectedProject = projectOptions.find(\n (p: { value: string; label: string; selected: boolean }) => p.selected\n );\n let selectedProjectValue;\n if (!!selectedProject) {\n selectedProjectValue = {\n ...selectedProject,\n label: `Project: ${selectedProject.label}`\n };\n }\n\n const boardOptions = boards.map((b: BoardInterface) => {\n return {\n label: b.boardName,\n value: b.boardId,\n selected: b.boardId === board?.boardId\n };\n });\n const selectedBoard = boardOptions.find(\n (b: { value: string; label: string; selected: boolean }) => b.selected\n );\n let selectedBoardValue;\n if (!!selectedBoard) {\n selectedBoardValue = {\n ...selectedBoard,\n label: `Board: ${selectedBoard.label}`\n };\n }\n\n const displayProject = isEditing ? (\n \n \n {hasProjectError ? (\n \n Please choose a Project\n \n ) : null}\n \n ) : (\n \n Project\n \n {project?.projectName || no Jira project}\n \n \n );\n\n const displayBoard = isEditing ? (\n \n \n {hasBoardError ? (\n \n Please choose a Board\n \n ) : null}\n \n ) : (\n \n Board\n \n {board?.boardName || no Jira board}\n \n \n );\n\n return (\n \n \n Use Sprints}\n name=\"sprints-toggle\"\n onChange={onToggleSprints}\n showSwitchStatus={true}\n testId={thisTestId}\n />\n \n {actuallyUsesSprints && !!projectOptions.length ? displayProject : null}\n {actuallyUsesSprints ? displayBoard : null}\n {actuallyUsesSprints ? (\n \n \n
    \n \n \n
    \n
    {sprint?.displayName || No sprint}
    \n
    \n
    \n ) : null}\n \n );\n};\n\nexport default SprintsMetadataSelector;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Icon from \"../Icon/Icon\";\nimport PopupContent from \"../PopupContent/PopupContent\";\nimport TriggeredOverlay from \"../TriggeredOverlay/TriggeredOverlay\";\n\n// styled components\nconst TriggerIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.storm};\n font-size: 1.2rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n content: React.ReactNode;\n onToggle: (nextShow: boolean) => void;\n showPopup: boolean;\n testId?: string;\n};\n\nconst DotMenu = ({\n className,\n content,\n onToggle,\n showPopup,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-dot-menu`;\n return (\n }\n overlayPlacement=\"top\"\n show={showPopup}\n testId={thisTestId}\n triggerAction=\"click\"\n triggerContent={\n \n }\n />\n );\n};\n\nexport default DotMenu;\n","import { kebabCase } from \"lodash\";\nimport React, { useState } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport DotMenu from \"../DotMenu/DotMenu\";\nimport PopupContent from \"../PopupContent/PopupContent\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// styled components\nconst Menu = styled(PopupContent)`\n background: ${props => props.theme.colors.all.white};\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n padding: 1rem;\n`;\nconst MenuListItem = styled.li`\n display: flex;\n`;\nconst MenuButton = styled.button`\n background: none;\n border: 0;\n flex: 1;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n text-align: left;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n isEditing: boolean;\n onClearAll: (e: React.MouseEvent) => void;\n onDelete: (e: React.MouseEvent) => void;\n onEdit: (e: React.MouseEvent) => void;\n teamName: string;\n testId?: string;\n};\n\nconst TeamCardDotMenu = ({\n className,\n isEditing,\n onClearAll,\n onDelete,\n onEdit,\n teamName,\n testId = \"testId\"\n}: Props) => {\n const [showPopup, setShowPopup] = useState(false);\n const { trackEvent } = useTracking();\n const nameSlug = kebabCase(teamName);\n const thisTestId = `${testId}-${nameSlug}-team-card-dot-menu`;\n\n function onTogglePopup(nextShow: boolean) {\n setShowPopup(nextShow);\n trackEvent({\n label: `${nameSlug}-team-card-dot-menu`,\n value: nextShow ? \"shown\" : \"hidden\"\n });\n }\n\n function onClickEdit(e: React.MouseEvent) {\n setShowPopup(false);\n trackEvent({\n label: `${nameSlug}-team-card-dot-menu-edit`,\n value: \"clicked\"\n });\n onEdit(e);\n }\n\n function onClickClearAll(e: React.MouseEvent) {\n setShowPopup(false);\n trackEvent({\n label: `${nameSlug}-team-card-dot-menu-clear-all`,\n value: \"clicked\"\n });\n onClearAll(e);\n }\n\n function onClickDelete(e: React.MouseEvent) {\n setShowPopup(false);\n trackEvent({\n label: `${nameSlug}-team-card-dot-menu-delete`,\n value: \"clicked\"\n });\n onDelete(e);\n }\n\n return (\n \n \n \n Edit\n \n \n {isEditing ? (\n \n \n Clear All\n \n \n ) : null}\n \n \n Delete Team\n \n \n \n }\n testId={nameSlug}\n />\n }\n onToggle={onTogglePopup}\n showPopup={showPopup}\n testId={thisTestId}\n />\n );\n};\n\nexport default TeamCardDotMenu;\n","import React from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { sortBy } from \"lodash\";\n\n// components\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\n\n// interfaces\nimport {\n NewUser,\n UserReportWithMetadataInterface\n} from \"../../interfaces/user\";\n\n// styled components\nconst TeamMembersList = styled.ul`\n overflow-y: scroll;\n`;\nconst TeamMember = styled.li`\n align-items: center;\n display: flex;\n`;\nconst TeamMemberAvatar = styled(SlackAvatar)<{ isPending: boolean }>`\n border-radius: 50%;\n border: ${props => `.2rem solid ${props.theme.colors.all.wolverine}`};\n height: 3rem;\n margin-right: 1rem;\n width: 3rem;\n\n ${props => {\n if (props.isPending) {\n return css`\n opacity: 0.5;\n `;\n }\n }}\n`;\nconst TeamMemberNameAndTitle = styled.div<{ isPending: boolean }>`\n flex-grow: 1;\n\n ${props => {\n if (props.isPending) {\n return css`\n opacity: 0.5;\n `;\n }\n }}\n`;\nconst TeamMemberName = styled.header`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n line-height: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst TeamMemberTitle = styled.p`\n font-size: 1.1rem;\n margin: 0;\n`;\nconst Remove = styled.span`\n align-self: flex-end;\n color: ${props => props.theme.colors.all.cyclops};\n font-size: 1.1rem;\n bottom: 1rem;\n right: 1rem;\n visibility: hidden;\n`;\nconst RemoveButton = styled.button<{ isEditing: boolean }>`\n align-items: center;\n background: transparent;\n border-color: transparent;\n border-style: solid;\n border-width: ${props => props.theme.borders.widths.sm};\n display: flex;\n flex: 1;\n padding: 0.4rem 0.25rem;\n text-align: left;\n\n &:hover {\n border-color: ${props => props.theme.colors.all.jean};\n\n & ${Remove} {\n visibility: ${props => (props.isEditing ? \"visible\" : \"hidden\")};\n }\n }\n`;\n\nconst SpacingWrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 0.4rem 0.25rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n isEditing?: boolean;\n onRemoveTeamMember?: ({\n e,\n teamMember\n }: {\n e: React.MouseEvent;\n teamMember: UserReportWithMetadataInterface | NewUser;\n }) => void;\n teamMembers: Array;\n testId?: string;\n};\n\nconst TeamCardTeamMembers = ({\n className,\n isEditing,\n onRemoveTeamMember,\n teamMembers,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-team-card-team-members`;\n return (\n \n {sortBy(teamMembers, t => t.name.toLowerCase()).map(teamMember => {\n const displayContent = (\n <>\n \n \n {teamMember.name}\n {teamMember.title}\n \n remove\n \n );\n return (\n \n {isEditing ? (\n \n onRemoveTeamMember && onRemoveTeamMember({ e, teamMember })\n }\n data-testid={`remove-${teamMember.email}-button`}\n >\n {displayContent}\n \n ) : (\n {displayContent}\n )}\n \n );\n })}\n \n );\n};\n\nexport default TeamCardTeamMembers;\n","import React from \"react\";\nimport { components } from \"react-select\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Icon from \"../Icon/Icon\";\n\n// styled components\nconst PlusIcon = styled(Icon)`\n display: none;\n`;\nconst Container = styled(components.Option)`\n &:hover {\n & ${PlusIcon} {\n display: block;\n }\n }\n`;\nconst ContentWrapper = styled.span`\n align-items: center;\n display: flex;\n justify-content: space-between;\n`;\nconst ChildrenWrapper = styled.span`\n flex: 1;\n`;\n\nconst TeamMembersAdderOption = (props: any) => {\n const thisTestId = \"team-members-adder-option\";\n return (\n \n \n {props.children}\n\n \n \n \n );\n};\n\nexport default TeamMembersAdderOption;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { currentTheme } from \"../../themes/currentTheme\";\n\n// components\nimport Dropdown from \"../Dropdown/Dropdown\";\nimport TeamMembersAdderOption from \"../TeamMembersAdderOption/TeamMembersAdderOption\";\n\n// interfaces\nimport {\n NewUser,\n UserReportWithMetadataInterface\n} from \"../../interfaces/user\";\nimport { SelectOptionsInterface } from \"../../interfaces/controls\";\n\n// utils\nconst createOptions = (\n teamMembers: Array\n) =>\n teamMembers.map(o => ({\n label: o.email,\n value: o.email,\n selected: false\n }));\n\n// styled components\nconst Container = styled.div`\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n padding: 1rem;\n`;\nconst Label = styled.label`\n font-size: 1.1rem;\n\n &::after {\n content: \":\";\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n addablePeople: Array;\n onCreateTeamMember: (value: string) => void;\n onUpdateTeamMembers: (selected: Array) => void;\n teamMembers: Array;\n testId?: string;\n};\n\nconst TeamMembersAdder = ({\n addablePeople,\n className,\n onCreateTeamMember,\n onUpdateTeamMembers,\n teamMembers,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-team-members-adder`;\n return (\n \n \n null,\n Option: TeamMembersAdderOption\n }}\n label=\"Add Team Members\"\n bordered={true}\n isCreatable={true}\n isMulti={true}\n isSearchable={true}\n maxMenuHeight={60}\n onChangeMulti={onUpdateTeamMembers}\n onCreateOption={onCreateTeamMember}\n options={createOptions(addablePeople)}\n placeholder=\"jsmith@uplevelteam.com\"\n shouldShowLabel={false}\n testId={thisTestId}\n value={createOptions(teamMembers)}\n styles={{\n option: (\n styleObj: Record,\n status: { isFocused?: boolean; isSelected?: boolean }\n ) => ({\n ...styleObj,\n background: status.isSelected\n ? currentTheme.colors.all.marvelMint\n : status.isFocused\n ? currentTheme.colors.dropdown.option.hover\n : \"transparent\",\n color: currentTheme.colors.all.wolverine,\n fontSize: \"1.1rem\",\n padding: \"0 .5rem\"\n }),\n valueContainer: (styleObj: Record) => {\n return {\n ...styleObj,\n alignItems: \"flex-start\",\n flexFlow: \"column nowrap\",\n maxHeight: \"5rem\",\n overflowY: \"scroll\"\n };\n },\n multiValueContainer: (styleObj: Record) => {\n return {\n ...styleObj,\n display: \"block\"\n };\n },\n multiValueLabel: (styleObj: Record) => ({\n ...styleObj,\n fontSize: \"1.1rem\",\n color: currentTheme.colors.all.wolverine,\n paddingTop: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n whiteSpace: \"normal\"\n }),\n multiValue: (styleObj: Record) => {\n return {\n ...styleObj,\n background: \"none\",\n padding: \".2rem 0\",\n whiteSpace: \"break-word\"\n };\n },\n multiValueRemove: (styleObj: Record) => ({\n ...styleObj,\n color: currentTheme.colors.all.wolverine,\n padding: \".1rem\",\n \":hover\": {\n backgroundColor: currentTheme.colors.all.cyclops,\n color: currentTheme.colors.all.white\n }\n })\n }}\n />\n \n );\n};\n\nexport default TeamMembersAdder;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\n\n// styled components\nconst StyledTextInput = styled.input`\n border: 0;\n border-bottom: ${props => props.theme.borders.widths.md} solid\n ${props => props.theme.colors.border};\n padding: 2rem 0 0.1em;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n id?: string;\n onBlur?: (e: React.FocusEvent) => void;\n onChange: (e: React.ChangeEvent) => void;\n placeholder?: string;\n value: string;\n testId?: string;\n};\n\nconst TextInput = ({\n className,\n id,\n onBlur = () => null,\n onChange,\n placeholder,\n value,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-text-input`;\n return (\n \n );\n};\n\nexport default TextInput;\n","import React, { useMemo } from \"react\";\nimport { differenceBy, sortBy } from \"lodash\";\nimport styled, { css } from \"styled-components/macro\";\n\n// components\nimport AvatarIcon from \"../AvatarIcon/AvatarIcon\";\nimport AvatarIconCreator from \"../AvatarIconCreator/AvatarIconCreator\";\nimport SprintsMetadataSelector from \"../SprintsMetadataSelector/SprintsMetadataSelector\";\nimport TeamCardDotMenu from \"../TeamCardDotMenu/TeamCardDotMenu\";\nimport TeamCardTeamMembers from \"../TeamCardTeamMembers/TeamCardTeamMembers\";\nimport TeamMembersAdder from \"../TeamMembersAdder/TeamMembersAdder\";\nimport TextInput from \"../TextInput/TextInput\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\n\n// hooks\n\n// interfaces\nimport { BoardInterface } from \"../../interfaces/sprint-metadata\";\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\nimport { ProjectInterface } from \"../../interfaces/work-items\";\nimport {\n NewUser,\n UserReportWithMetadataInterface\n} from \"../../interfaces/user\";\nimport { SelectOptionsInterface } from \"../../interfaces/controls\";\n\n// styled components\nconst Container = styled.div`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n display: flex;\n flex-flow: column nowrap;\n min-height: 0;\n`;\nconst Header = styled.header`\n align-items: flex-start;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n display: flex;\n justify-content: space-between;\n margin-bottom: 0.4rem;\n padding-bottom: 0.4rem;\n`;\nconst DotMenu = styled(TeamCardDotMenu)`\n margin-left: 0.8rem;\n`;\nconst NameWrapper = styled.div`\n align-items: center;\n display: flex;\n flex: 1;\n`;\nconst TeamNameWrapper = styled.div`\n flex: 1;\n`;\nconst Label = styled.label`\n align-items: center;\n display: flex;\n flex: 1;\n margin: 0;\n`;\nconst Icon = styled(AvatarIcon)`\n font-size: 3rem;\n margin-right: 1rem;\n`;\nconst IconCreator = styled(AvatarIconCreator)`\n font-size: 3rem;\n margin-right: 1rem;\n`;\nconst Name = styled.h3`\n font-size: inherit;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n margin: 0;\n`;\nconst NameInput = styled(TextInput)<{ hasTeamNameError: boolean }>`\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${\n props.hasTeamNameError\n ? props.theme.colors.all.cyclops\n : props.theme.colors.all.jean\n }`};\n flex: 1;\n padding: 0.8rem;\n`;\nconst Adder = styled(TeamMembersAdder)<{ hasTeamMembersError: boolean }>`\n flex: 1;\n margin-top: 0.4rem;\n width: 100%;\n\n ${props => {\n if (props.hasTeamMembersError) {\n return css`\n border: ${props.theme.borders.widths.sm} solid\n ${props.theme.colors.all.cyclops};\n `;\n }\n }}\n`;\nconst TeamMembers = styled(TeamCardTeamMembers)`\n overflow-y: scroll;\n width: 100%;\n\n &:not(:empty) {\n margin-top: 1.6rem;\n }\n`;\nconst Error = styled.strong`\n color: ${props => props.theme.colors.all.cyclops};\n display: block;\n font-size: 1.1rem;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin-top: 0.4rem;\n`;\n\n// typescript props\ntype Props = {\n addedTeamMembers: Array;\n avatarColor: string;\n avatarIcon: string;\n board: BoardInterface | null;\n boards: Array;\n canEdit: boolean;\n className?: string;\n fullOrganization: Array;\n hasBoardError: boolean;\n hasProjectError: boolean;\n hasTeamMembersError: boolean;\n hasTeamNameError: boolean;\n isEditing: boolean;\n isOrgChartTeam: boolean;\n onBlurTeamName: (e: React.FocusEvent) => void;\n onChangeTeamName: (e: React.ChangeEvent) => void;\n onClearAll: (e: React.MouseEvent) => void;\n onCreateIcon: (avatarIcon: string, avatarColor: string) => void;\n onCreateTeamMember: (value: string) => void;\n onDelete: (e: React.MouseEvent) => void;\n onEdit: (e: React.MouseEvent) => void;\n onRemoveTeamMember: ({\n e,\n teamMember\n }: {\n e: React.MouseEvent;\n teamMember: UserReportWithMetadataInterface | NewUser;\n }) => void;\n onSelectBoard: (selected: SelectOptionsInterface) => void;\n onSelectProject: (selected: SelectOptionsInterface) => void;\n onToggleSprints: (e: React.ChangeEvent) => void;\n onUpdateTeamMembers: (selected: Array) => void;\n project: ProjectInterface | null;\n projects: Array;\n shouldUseSprints: boolean;\n sprint: TimerangeMetadataInterface | null;\n teamMembers: Array;\n teamName: string;\n testId?: string;\n};\n\nconst ExistingTeam = ({\n addedTeamMembers,\n avatarColor,\n avatarIcon,\n canEdit,\n className,\n board,\n boards,\n fullOrganization,\n hasBoardError,\n hasProjectError,\n hasTeamMembersError,\n hasTeamNameError,\n isEditing,\n isOrgChartTeam,\n onBlurTeamName,\n onChangeTeamName,\n onClearAll,\n onCreateIcon,\n onCreateTeamMember,\n onDelete,\n onEdit,\n onRemoveTeamMember,\n onSelectBoard,\n onSelectProject,\n onToggleSprints,\n onUpdateTeamMembers,\n project,\n projects,\n shouldUseSprints,\n sprint,\n teamMembers,\n teamName,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-existing-team`;\n // filter existing team members out of the org options so that they can't be chosen\n const filteredOrganization = useMemo(\n () => differenceBy(fullOrganization, teamMembers, \"email\"),\n [teamMembers, fullOrganization]\n );\n\n return (\n \n
    \n \n {isEditing ? (\n \n ) : (\n \n )}\n {isEditing ? (\n \n \n {hasTeamNameError ? (\n \n Please enter a Team Name\n \n ) : null}\n \n ) : (\n {teamName}\n )}\n \n {canEdit ? (\n \n ) : null}\n
    \n \n {isEditing ? (\n \n ) : null}\n \n t.name.toLowerCase()\n )}\n testId={thisTestId}\n />\n {isEditing && hasTeamMembersError ? (\n \n Add members to create a Team\n \n ) : null}\n \n );\n};\n\nexport default ExistingTeam;\n","import React from \"react\";\nimport styled, { css } from \"styled-components/macro\";\nimport { sortBy } from \"lodash\";\n\n// components\nimport AvatarIconCreator from \"../AvatarIconCreator/AvatarIconCreator\";\nimport SprintsMetadataSelector from \"../SprintsMetadataSelector/SprintsMetadataSelector\";\nimport TeamCardTeamMembers from \"../TeamCardTeamMembers/TeamCardTeamMembers\";\nimport TeamMembersAdder from \"../TeamMembersAdder/TeamMembersAdder\";\nimport TextInput from \"../TextInput/TextInput\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\n\n// interfaces\nimport { BoardInterface } from \"../../interfaces/sprint-metadata\";\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\nimport { ProjectInterface } from \"../../interfaces/work-items\";\nimport {\n NewUser,\n UserReportWithMetadataInterface\n} from \"../../interfaces/user\";\nimport { SelectOptionsInterface } from \"../../interfaces/controls\";\n\n// styled components\nconst Form = styled.form`\n display: flex;\n flex-flow: column nowrap;\n font-size: 1.1rem;\n min-height: 0;\n`;\nconst FieldWrapper = styled.div`\n align-items: center;\n display: flex;\n\n & + & {\n margin-top: 0.4rem;\n }\n`;\nconst TeamMembersFieldWrapper = styled(FieldWrapper)`\n align-items: flex-start;\n flex-flow: column nowrap;\n min-height: 0;\n`;\nconst Label = styled.label`\n align-items: center;\n display: flex;\n flex: 1;\n margin: 0;\n`;\nconst Icon = styled(AvatarIconCreator)`\n font-size: 3rem;\n margin-right: 1rem;\n`;\nconst TeamNameWrapper = styled.div`\n flex: 1;\n`;\nconst NameInput = styled(TextInput)<{ hasTeamNameError: boolean }>`\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n flex: 1;\n padding: 0.8rem;\n\n ${props => {\n if (props.hasTeamNameError) {\n return css`\n border: ${props.theme.borders.widths.sm} solid\n ${props.theme.colors.all.cyclops};\n `;\n }\n }}\n`;\nconst Sprints = styled(SprintsMetadataSelector)`\n flex: 1;\n`;\nconst Adder = styled(TeamMembersAdder)<{ hasTeamMembersError: boolean }>`\n width: 100%;\n\n ${props => {\n if (props.hasTeamMembersError) {\n return css`\n border: ${props.theme.borders.widths.sm} solid\n ${props.theme.colors.all.cyclops};\n `;\n }\n }}\n`;\nconst TeamMembers = styled(TeamCardTeamMembers)`\n overflow-y: scroll;\n width: 100%;\n\n &:not(:empty) {\n margin-top: 1.6rem;\n }\n`;\nconst Error = styled.strong`\n color: ${props => props.theme.colors.all.cyclops};\n display: block;\n font-size: 1.1rem;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin-top: 0.4rem;\n`;\n\n// typescript props\ntype Props = {\n addedTeamMembers: Array;\n avatarColor: string | null;\n avatarIcon: string | null;\n board: BoardInterface | null;\n boards: Array;\n className?: string;\n fullOrganization: Array;\n hasBoardError: boolean;\n hasProjectError: boolean;\n hasTeamMembersError: boolean;\n hasTeamNameError: boolean;\n onBlurTeamName: (e: React.FocusEvent) => void;\n onChangeTeamName: (e: React.ChangeEvent) => void;\n onCreateIcon: (avatarIcon: string, avatarColor: string) => void;\n onCreateTeamMember: (value: string) => void;\n onSelectBoard: (selected: SelectOptionsInterface) => void;\n onSelectProject: (selected: SelectOptionsInterface) => void;\n onToggleSprints: (e: React.ChangeEvent) => void;\n onUpdateTeamMembers: (selected: Array) => void;\n project: ProjectInterface | null;\n projects: Array;\n shouldUseSprints: boolean;\n sprint: TimerangeMetadataInterface | null;\n teamMembers: Array;\n teamName: string | null;\n testId?: string;\n};\n\nconst NewTeamForm = ({\n addedTeamMembers,\n avatarColor,\n avatarIcon,\n className,\n board,\n boards,\n fullOrganization,\n hasBoardError,\n hasProjectError,\n hasTeamMembersError,\n hasTeamNameError,\n onBlurTeamName,\n onChangeTeamName,\n onCreateTeamMember,\n onSelectBoard,\n onSelectProject,\n onCreateIcon,\n onToggleSprints,\n onUpdateTeamMembers,\n project,\n projects,\n shouldUseSprints,\n sprint,\n teamMembers,\n teamName,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-new-team-form`;\n return (\n
    \n Create a new team\n \n \n \n \n {hasTeamNameError ? (\n \n Please enter a Team Name\n \n ) : null}\n \n \n \n \n \n \n \n \n t.name.toLowerCase()\n )}\n testId={thisTestId}\n />\n {hasTeamMembersError ? (\n \n Add members to create a Team\n \n ) : null}\n \n
    \n );\n};\n\nexport default NewTeamForm;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// styled components\nconst Container = styled.div`\n align-items: flex-start;\n display: flex;\n flex-flow: column nowrap;\n`;\nconst Buttons = styled.div`\n align-self: center;\n align-items: center;\n display: flex;\n flex: 1;\n justify-content: space-between;\n margin-top: 3rem;\n width: 25%;\n`;\nconst Button = styled.button`\n background: none;\n border: 0;\n`;\nconst ConfirmButton = styled(Button)`\n color: ${props => props.theme.colors.all.auroraTeal};\n`;\nconst CancelButton = styled(Button)`\n color: ${props => props.theme.colors.all.storm};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n content: React.ReactNode;\n name: string;\n onCancel: (e: React.MouseEvent) => void;\n onConfirm: (e: React.MouseEvent) => void;\n testId?: string;\n};\n\nconst TeamCardConfirmationModalContent = ({\n className,\n content,\n name,\n onCancel,\n onConfirm,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-${name}-team-card-confirmation-modal-content`;\n return (\n \n
    {content}
    \n \n \n Yes\n \n \n No\n \n \n
    \n );\n};\n\nexport default TeamCardConfirmationModalContent;\n","import React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components/macro\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// interfaces\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\n\n// styled components\nconst List = styled.ul`\n margin-top: 1.6rem;\n`;\nconst Paragraph = styled.p`\n & + &,\n ${List} + & {\n margin-top: 1.6rem;\n }\n`;\nconst TeamName = styled.b`\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst TeamMembers = styled.b`\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\n\n// typescript props\ntype Props = {\n action?: \"confirm\" | \"verify\";\n addedTeamMembers: Array;\n className?: string;\n displayTenantAlias: string;\n newTeamMembers: Array;\n removedTeamMembers?: Array;\n teamName: string;\n testId?: string;\n};\n\nconst TeamCardSubmitModalContent = ({\n action = \"confirm\",\n addedTeamMembers,\n className,\n displayTenantAlias,\n newTeamMembers,\n removedTeamMembers,\n teamName,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-team-card-submit-modal-content`;\n const isConfirmAction = action === \"confirm\";\n const filteredAddedTeamMembers = addedTeamMembers.filter(\n a => !newTeamMembers.find(n => n.email === a.email)\n );\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const canReceiveEmailNotifications =\n flags?.[\"flexible-teams-email-notifications\"];\n\n return (\n
    \n {canReceiveEmailNotifications && !!addedTeamMembers.length ? (\n \n {/* FIXME: need to change back to \"has been/will be\" when we're sending automated emails.\n https://uplevelteam.atlassian.net/browse/TEAM-439\n */}\n An email will be sent to{\" \"}\n \n {filteredAddedTeamMembers.map(t => t.email).join(\", \")}\n {\" \"}\n letting them know that they have been added to{\" \"}\n {teamName}.\n \n ) : null}\n {!!newTeamMembers.length ? (\n <>\n \n {newTeamMembers.map(t => (\n
  • {t.email}
  • \n ))}\n
    \n \n {newTeamMembers.length > 1 ? \"are\" : \"is\"} not in the Uplevel\n database for {displayTenantAlias}. Our Customer Success team{\" \"}\n {isConfirmAction ? \"has been\" : \"will be\"} notified and will add\n them once confirmed.\n \n \n ) : null}\n {canReceiveEmailNotifications && !!removedTeamMembers?.length ? (\n \n {/* FIXME: need to change back to \"has been/will be\" when we're sending automated emails.\n https://uplevelteam.atlassian.net/browse/TEAM-439\n */}\n An email will be sent to{\" \"}\n \n {removedTeamMembers.map(t => t.email).join(\", \")}\n {\" \"}\n letting them know that they have been removed from{\" \"}\n {teamName}.\n \n ) : null}\n \n {isConfirmAction\n ? \"Thank You!\"\n : \"Are you sure you want to create this team?\"}\n \n
    \n );\n};\n\nexport default TeamCardSubmitModalContent;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\n\n// components\nimport TeamCardConfirmationModalContent from \"../TeamCardConfirmationModalContent/TeamCardConfirmationModalContent\";\nimport TeamCardSubmitModalContent from \"../TeamCardSubmitModalContent/TeamCardSubmitModalContent\";\n\n// styled components\nconst Header = styled.h3`\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Arial,\n Helvetica, sans-serif;\n font-size: 2rem;\n font-weight: ${props => props.theme.fonts.primary.weights.book};\n margin-bottom: 2.4rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n displayModal: { id: string; [key: string]: any };\n mode: string;\n onCancelDelete: (e: React.MouseEvent) => void;\n onCancelRemoveTeamMember: ({\n e,\n teamMember\n }: {\n e: React.MouseEvent;\n teamMember: UserReportWithMetadataInterface;\n }) => void;\n onCancelSubmit: (e: React.MouseEvent) => void;\n onConfirmDelete: (e: React.MouseEvent) => void;\n onConfirmRemoveTeamMember: ({\n e,\n teamMember\n }: {\n e: React.MouseEvent;\n teamMember: UserReportWithMetadataInterface;\n }) => void;\n onConfirmSubmit: (e: React.MouseEvent) => void;\n testId?: string;\n};\n\nconst TeamCardModalContent = ({\n className,\n displayModal,\n mode,\n onCancelDelete,\n onCancelRemoveTeamMember,\n onCancelSubmit,\n onConfirmDelete,\n onConfirmRemoveTeamMember,\n onConfirmSubmit,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-team-card-modal-content`;\n const isNewTeam = mode === \"create-team\";\n\n let header, modalContent;\n if (displayModal?.id === \"create-team-submit\") {\n header = \"You are about to create a team\";\n modalContent = (\n \n }\n name={displayModal.id}\n onCancel={onCancelSubmit}\n onConfirm={onConfirmSubmit}\n testId={thisTestId}\n />\n );\n } else if (\n displayModal?.id === \"create-team-confirm-submit\" ||\n displayModal?.id === \"update-team-confirm-submit\"\n ) {\n header = isNewTeam ? (\n <>You’ve created a team\n ) : (\n \"Your team changes have been saved\"\n );\n modalContent = (\n \n );\n } else if (\n displayModal?.id === \"update-team-remove-team-member\" &&\n !!displayModal?.teamMember\n ) {\n modalContent = (\n \n onCancelRemoveTeamMember({\n e,\n teamMember: displayModal.teamMember\n })\n }\n onConfirm={e =>\n onConfirmRemoveTeamMember({\n e,\n teamMember: displayModal.teamMember\n })\n }\n testId={thisTestId}\n />\n );\n } else if (displayModal?.id === \"update-team-delete-team\") {\n modalContent = (\n \n );\n }\n\n return (\n
    \n {header ?
    {header}
    : null}\n {modalContent}\n
    \n );\n};\n\nexport default TeamCardModalContent;\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { compact, defaults, isNull, sample, uniq } from \"lodash\";\n\n// components\nimport DefaultTeamRadio from \"../DefaultTeamRadio/DefaultTeamRadio\";\nimport ExistingTeam from \"../ExistingTeam/ExistingTeam\";\nimport Modal from \"../Modal/Modal\";\nimport NewTeamForm from \"../NewTeamForm/NewTeamForm\";\nimport TeamCardModalContent from \"../TeamCardModalContent/TeamCardModalContent\";\n\n// constants\nimport { avatarImages } from \"../../constants/widgets\";\n\n// hooks\nimport { useFullOrganizationData } from \"../../hooks/useFullOrganizationData\";\nimport { useMutation, useQueryClient } from \"react-query\";\nimport { useOwnFallbackOrgChartTeam } from \"../../hooks/useOwnFallbackOrgChartTeam\";\nimport { useProjectsAndBoardsData } from \"../../hooks/useProjectsAndBoardsData\";\nimport { useSelector } from \"react-redux\";\nimport { useSprintMetadata } from \"../../hooks/useSprintMetadata\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { useUserSettings } from \"../../hooks/useUserSettings\";\n\n// interfaces\nimport { TeamInterface } from \"../../interfaces/team\";\nimport { BoardInterface } from \"../../interfaces/sprint-metadata\";\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\nimport { ProjectInterface } from \"../../interfaces/work-items\";\nimport {\n NewUser,\n UserReportWithMetadataInterface\n} from \"../../interfaces/user\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { SelectOptionsInterface } from \"../../interfaces/controls\";\n\n// utils\nimport {\n getBoard,\n getDefaultActiveSprint,\n getTeamSprintMetadata\n} from \"../../utils/sprints\";\nimport {\n createOrUpdateTeam,\n deleteTeam,\n getTeamNameFromTeam\n} from \"../../utils/teams\";\nimport { updateUserSettings } from \"../../utils/settings\";\nimport { getSprintTimerangesForBoard } from \"../../utils/timeranges\";\n\n// styled components\nconst Container = styled.div`\n display: flex;\n flex-flow: column nowrap;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n justify-content: space-between;\n`;\nconst ContentWrapper = styled.div`\n display: flex;\n flex-flow: column nowrap;\n overflow: hidden;\n`;\nconst ButtonWrapper = styled.div<{ isNewTeam: boolean }>`\n align-items: baseline;\n display: flex;\n margin: ${props => (props.isNewTeam ? \"2.4rem 0 0\" : \"2.4rem 0\")};\n`;\nconst SubmitButton = styled.button`\n background: ${props => props.theme.colors.all.auroraTeal};\n border: 0;\n color: ${props => props.theme.colors.all.white};\n padding: 1rem 4rem;\n margin: 0;\n`;\nconst CancelButton = styled.button`\n background: transparent;\n border: 0;\n color: ${props => props.theme.colors.all.auroraTeal};\n font-size: 1.1rem;\n margin-left: 2rem;\n`;\nconst CreatedByName = styled.i`\n margin-top: auto;\n color: ${props => props.theme.colors.all.storm};\n font-size: 1.1rem;\n`;\nconst Footer = styled.footer<{ isEditing: boolean }>`\n &:not(:empty) {\n margin-top: ${props => (props.isEditing ? \"0\" : \"2.4rem\")};\n }\n`;\n\nconst RESET_STATE = {\n addedTeamMembers: [],\n avatarColor: null,\n avatarIcon: null,\n board: null,\n hasBoardError: false,\n hasProjectError: false,\n hasTeamMembersError: false,\n hasTeamNameError: false,\n project: null,\n shouldUseSprints: false,\n teamMembers: [],\n teamName: null,\n tmpRemoveTeamMembers: []\n};\n\nconst getInitialState = (\n team: TeamInterface | null\n): { [key: string]: any } => {\n return {\n addedTeamMembers: RESET_STATE.addedTeamMembers,\n avatarColor: team?.avatarColor || RESET_STATE.avatarColor,\n avatarIcon: team?.avatarIcon || RESET_STATE.avatarIcon,\n board: RESET_STATE.board,\n hasBoardError: RESET_STATE.hasBoardError,\n hasProjectError: RESET_STATE.hasProjectError,\n hasTeamMembersError: RESET_STATE.hasTeamMembersError,\n hasTeamNameError: RESET_STATE.hasTeamNameError,\n project: RESET_STATE.project,\n shouldUseSprints: team?.useSprints || RESET_STATE.shouldUseSprints,\n teamMembers: team?.teamMembers || RESET_STATE.teamMembers,\n teamName: isNull(team) ? RESET_STATE.teamName : getTeamNameFromTeam(team),\n tmpRemoveTeamMembers: RESET_STATE.tmpRemoveTeamMembers\n };\n};\n\n// typescript props\ntype Props = {\n className?: string;\n team: TeamInterface | null;\n testId?: string;\n};\n\nconst TeamCard = ({\n className,\n team,\n testId = \"testId\"\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-team-card`;\n const { trackEvent } = useTracking();\n const isNewTeam = isNull(team);\n const modePrefix = isNewTeam ? \"create-team\" : \"update-team\";\n const isOrgChartTeam = team?.isOrgChartTeam;\n const defaultProjectId = team?.defaultProjectId;\n const defaultBoardId = team?.defaultBoardId;\n\n // SELECTORS\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const user = useSelector((state: AppStateInterface) => state.user);\n const displayTenantAlias = useSelector(\n (state: AppStateInterface) => state.session.displayTenantAlias\n );\n\n // HOOKS\n const { data: projectsAndBoardsData } = useProjectsAndBoardsData();\n const { data: sprintMetadata } = useSprintMetadata(\n { type: `${team?.teamId}-team`, team },\n !!team?.useSprints && !team?.defaultBoardId\n );\n const {\n data: fullOrganizationData,\n isLoading: isLoadingFullOrganizationData\n } = useFullOrganizationData();\n const fullOrganization: Array =\n isLoadingFullOrganizationData || !fullOrganizationData\n ? []\n : fullOrganizationData;\n const { data: userSettings } = useUserSettings();\n const fallbackOrgChartTeam = useOwnFallbackOrgChartTeam();\n const allBoards = projectsAndBoardsData?.boards;\n const derivedTeamBoard = useMemo(\n () =>\n getBoard({\n sprintMetadata,\n allBoards,\n team\n }),\n [team, allBoards, sprintMetadata]\n );\n const isDefault = !!(isNewTeam\n ? false\n : !!userSettings?.defaultTeamId\n ? team?.teamId === userSettings?.defaultTeamId\n : team?.teamId === fallbackOrgChartTeam?.teamId);\n\n // react-query hooks\n const queryClient = useQueryClient();\n const deleteTeamMutation = useMutation(deleteTeam, {\n onSuccess: () => {\n // Invalidate and refetch all teams queries\n queryClient.invalidateQueries([\"teams\"]);\n }\n });\n const createUpdateTeamMutation = useMutation(createOrUpdateTeam, {\n onSuccess: updatedTeam => {\n // Invalidate and refetch all teams queries\n queryClient.invalidateQueries([\"teams\"]);\n // invalidate the board for this team in case the team members changed\n queryClient.invalidateQueries([\n \"board\",\n { type: `${team?.teamId}-team` }\n ]);\n // for existing teams, set updated team in state until refetched. for null\n // create team, let the state reset.\n if (!!team) {\n setTeamMembers(updatedTeam.teamMembers);\n }\n }\n });\n const userSettingsMutation = useMutation(updateUserSettings, {\n onSuccess: updatedSettings => {\n queryClient.setQueryData(\"user-settings\", () => updatedSettings);\n }\n });\n\n const {\n data: projectsData,\n isSuccess: isSuccessProjectsData\n } = useProjectsAndBoardsData();\n\n // STATE VALUES\n // this component should probably just use the reducer for all\n // the state values, consider refactoring\n function updateState(newState: { [key: string]: any }) {\n setAddedTeamMembers(newState.addedTeamMembers);\n setAvatarColor(newState.avatarColor);\n setAvatarIcon(newState.avatarIcon);\n setBoard(newState.board);\n setHasBoardError(newState.hasBoardError);\n setHasProjectError(newState.hasProjectError);\n setHasTeamMembersError(newState.hasTeamMembersError);\n setHasTeamNameError(newState.hasTeamNameError);\n setProject(newState.project);\n setShouldUseSprints(newState.shouldUseSprints);\n setTeamMembers(newState.teamMembers);\n setTeamName(newState.teamName);\n setTmpRemoveTeamMembers(newState.tmpRemoveTeamMembers);\n }\n\n const INITIAL_STATE = getInitialState(team);\n const [hasTeamNameError, setHasTeamNameError] = useState(false);\n const [hasTeamMembersError, setHasTeamMembersError] = useState(false);\n const [hasProjectError, setHasProjectError] = useState(false);\n const [hasBoardError, setHasBoardError] = useState(false);\n\n const [projects, setProjects] = useState>([]);\n const [boards, setBoards] = useState>([]);\n const [project, setProject] = useState(\n INITIAL_STATE.project\n );\n const [board, setBoard] = useState(\n INITIAL_STATE.board\n );\n const [sprint, setSprint] = useState(null);\n const [shouldUseSprints, setShouldUseSprints] = useState(\n INITIAL_STATE.shouldUseSprints\n );\n const [displayModal, setDisplayModal] = useState<{\n id: string;\n [key: string]: any;\n } | null>(null);\n const [isEditing, setIsEditing] = useState(isNewTeam);\n const [teamName, setTeamName] = useState(\n INITIAL_STATE.teamName\n );\n const [avatarIcon, setAvatarIcon] = useState(\n INITIAL_STATE.avatarIcon\n );\n const [avatarColor, setAvatarColor] = useState(\n INITIAL_STATE.avatarColor\n );\n const [teamMembers, setTeamMembers] = useState<\n Array\n >(INITIAL_STATE.teamMembers);\n const [addedTeamMembers, setAddedTeamMembers] = useState<\n Array\n >(INITIAL_STATE.addedTeamMembers);\n const [tmpRemoveTeamMembers, setTmpRemoveTeamMembers] = useState<\n Array\n >(INITIAL_STATE.tmpRemoveTeamMembers);\n\n // USE EFFECTS\n\n // checking if the team has any team members in order to show\n // error ui after attempted submit\n useEffect(() => {\n // don't update this unless there's already an error showing\n if (hasTeamMembersError) {\n setHasTeamMembersError(![...addedTeamMembers, ...teamMembers].length);\n }\n }, [addedTeamMembers, hasTeamMembersError, teamMembers]);\n\n // set state values from projects data request\n useEffect(() => {\n if (isSuccessProjectsData) {\n const {\n project,\n board,\n sprint,\n projects,\n boards\n } = getTeamSprintMetadata({\n shouldUseSprints,\n projectsData,\n defaultProjectId,\n defaultBoardId,\n isOrgChartTeam,\n derivedTeamBoard\n });\n setProject(project);\n setBoard(board);\n setSprint(sprint);\n setProjects(projects);\n setBoards(boards);\n }\n }, [\n defaultBoardId,\n defaultProjectId,\n derivedTeamBoard,\n isOrgChartTeam,\n isSuccessProjectsData,\n projectsData,\n shouldUseSprints\n ]);\n\n // HANDLERS\n function onCancelModal() {\n setDisplayModal(null);\n trackEvent({\n label: `flexible-teams-${displayModal}-modal`,\n value: `closed ${displayModal}`\n });\n }\n\n function onEdit(e: React.MouseEvent) {\n e.persist();\n setIsEditing(true);\n trackEvent({\n e,\n label: `${modePrefix}-edit`,\n value: `clicked to edit ${teamName}`\n });\n }\n\n function onClearAll(e: React.MouseEvent) {\n e.persist();\n updateState(RESET_STATE);\n trackEvent({\n e,\n label: `${modePrefix}-clear-all`,\n value: `clicked to clear ${INITIAL_STATE.teamName} values`\n });\n }\n\n function onCancelEdit(e: React.MouseEvent) {\n e.persist();\n setIsEditing(isNewTeam);\n updateState(INITIAL_STATE);\n trackEvent({\n e,\n label: `${modePrefix}-cancel-edit`,\n value: `clicked to cancel editing ${\n modePrefix === \"create-team\" ? \"new team\" : INITIAL_STATE.teamName\n }`\n });\n }\n\n function onDelete(e: React.MouseEvent) {\n e.persist();\n setDisplayModal({\n id: `${modePrefix}-delete-team`\n });\n trackEvent({\n e,\n label: `${modePrefix}-delete-team`,\n value: `clicked to delete ${teamName}`\n });\n }\n\n function onCancelDelete(e: React.MouseEvent) {\n e.persist();\n setDisplayModal(null);\n trackEvent({\n e,\n label: `${modePrefix}-cancel-delete-team`,\n value: `canceled delete ${teamName}`\n });\n }\n\n async function onConfirmDelete(\n e: React.MouseEvent\n ) {\n e.persist();\n if (!!team) {\n deleteTeamMutation.mutate(\n {\n accessToken,\n tenantId,\n params: {\n teamId: team.teamId\n }\n },\n {\n onSuccess: () => {\n // check to see if the team was default, if so, default to the\n // fallback org chart team\n if (isDefault && !!fallbackOrgChartTeam) {\n userSettingsMutation.mutate({\n accessToken,\n tenantId,\n params: {\n ...userSettings,\n defaultTeamId: fallbackOrgChartTeam.teamId\n }\n });\n }\n }\n }\n );\n trackEvent({\n e,\n label: `${modePrefix}-confirm-delete-team`,\n value: `confirmed delete ${teamName}`\n });\n setDisplayModal(null);\n }\n }\n\n function onChangeTeamName(e: React.ChangeEvent) {\n e.persist();\n setTeamName(e.target.value);\n }\n\n function onBlurTeamName(e: React.FocusEvent) {\n e.persist();\n // don't update this unless there's already an error showing\n if (hasTeamNameError) {\n setHasTeamNameError(!e.target.value);\n }\n trackEvent({\n label: `${modePrefix}-team-name`,\n value: `updated team name to ${e.target.value}`\n });\n }\n\n function onCreateIcon(avatarIcon: string, avatarColor: string) {\n setAvatarIcon(avatarIcon);\n setAvatarColor(avatarColor);\n trackEvent({\n label: `${modePrefix}-icon`,\n value: `created ${avatarColor} ${avatarIcon} icon`\n });\n }\n\n function onSelectBoard(selected: SelectOptionsInterface) {\n const board = boards.find(\n (b: BoardInterface) => b.boardId === selected.value\n );\n\n // don't update this unless there's already an error showing\n if (hasBoardError) {\n setHasBoardError(!board);\n }\n\n if (!!board) {\n // set board\n setBoard(board);\n // backfill project for the board\n const boardProject = projectsData.projects.find(\n (p: ProjectInterface) => p.projectId === board.projectId\n );\n setProject(boardProject || null);\n\n if (hasProjectError) {\n setHasProjectError(!boardProject);\n }\n\n // if we backfilled a project successfully, update the boards dropdown to\n // filter to that project, otherwise leave them alone\n if (!!boardProject) {\n // update boards dropdown to the boards available for the project\n const updatedBoards = projectsData.boards.filter(\n (b: BoardInterface) => b.projectId === boardProject?.projectId\n );\n setBoards(updatedBoards);\n }\n\n // try to find a default sprint for the selected board\n const defaultSprint = getDefaultActiveSprint(board.sprints);\n if (!!defaultSprint) {\n const sprintTimeranges = getSprintTimerangesForBoard(board);\n const defaultSprintTimerange = sprintTimeranges.find(\n t => t.id === defaultSprint.sprintId\n );\n if (!!defaultSprintTimerange) {\n setSprint(defaultSprintTimerange);\n }\n }\n trackEvent({\n label: `${modePrefix}-board`,\n value: `selected ${board.boardName} board`\n });\n }\n }\n\n function onSelectProject(selected: SelectOptionsInterface) {\n const project = projects.find(\n (p: ProjectInterface) => p.projectId === selected.value\n );\n\n // don't update this unless there's already an error showing\n if (hasProjectError) {\n setHasProjectError(!project);\n }\n\n if (!!project) {\n // set project\n setProject(project);\n\n // null out board and sprint\n setBoard(null);\n setSprint(null);\n\n // don't update this unless there's already an error showing\n if (hasBoardError) {\n setHasBoardError(false);\n }\n\n // update boards dropdown to the boards available for the project\n const filteredBoards = projectsData.boards.filter(\n (b: BoardInterface) => b.projectId === project.projectId\n );\n setBoards(filteredBoards);\n\n trackEvent({\n label: `${modePrefix}-project`,\n value: `selected ${project.projectName} project`\n });\n }\n }\n\n function onToggleSprints(e: React.ChangeEvent) {\n e.persist();\n setShouldUseSprints(!shouldUseSprints);\n trackEvent({\n e,\n label: `${modePrefix}-sprints-toggle`,\n value: `toggled sprints ${!shouldUseSprints ? \"on\" : \"off\"}`\n });\n }\n\n function onUpdateTeamMembers(\n updatedTeamMembers: Array\n ) {\n const teamMembersWithMetadata = compact(\n updatedTeamMembers.map(s => {\n const currentlyAddedTeamMember = addedTeamMembers.find(\n t => t.email === s.value\n );\n if (currentlyAddedTeamMember) {\n return currentlyAddedTeamMember;\n }\n\n const orgMember = fullOrganization.find(\n (t: UserReportWithMetadataInterface) => t.email === s.value\n );\n if (orgMember) {\n return orgMember;\n }\n\n return null;\n })\n );\n setAddedTeamMembers(teamMembersWithMetadata);\n trackEvent({\n label: `${modePrefix}-update-team-members`,\n value: `updated team members to ${teamMembersWithMetadata\n .map(t => t.email)\n .join(\",\")}`\n });\n }\n\n function onCreateTeamMember(value: string) {\n // create a fake user for team members not in the org\n const newTeamMember = {\n email: value,\n slackAvatar: sample(avatarImages) as string,\n name: value,\n tenantId,\n id: null,\n image: \"\",\n slackHandle: null,\n slackUrl: null,\n include_in_team_roster: true,\n role: \"\",\n enabled_roles: [\"\"],\n title: \"Pending\"\n };\n setAddedTeamMembers(currentTeamMembers => [\n ...currentTeamMembers,\n newTeamMember\n ]);\n trackEvent({\n label: `${modePrefix}-create-team-member`,\n value: `created new team member ${value}`\n });\n }\n\n function onRemoveTeamMember({\n e,\n teamMember\n }: {\n e: React.MouseEvent;\n teamMember: UserReportWithMetadataInterface | NewUser;\n }) {\n const isRemovingExistingTeamMember = teamMembers.find(\n t => t.id === teamMember.id\n );\n\n if (isRemovingExistingTeamMember) {\n setDisplayModal({\n id: `${modePrefix}-remove-team-member`,\n isSelf: teamMember.id === user.id,\n teamMember\n });\n trackEvent({\n e,\n label: `${modePrefix}-remove-team-member`,\n value: `clicked to remove ${teamMember.email}`\n });\n } else {\n // remove team member from added team members list\n setAddedTeamMembers(currentTeamMembers =>\n currentTeamMembers.filter(t => t.email !== teamMember.email)\n );\n }\n }\n\n function onConfirmRemoveTeamMember({\n e,\n teamMember\n }: {\n e: React.MouseEvent;\n teamMember: UserReportWithMetadataInterface;\n }) {\n setTmpRemoveTeamMembers(current => [...current, teamMember]);\n // remove team member from current saved team members list\n setTeamMembers(currentTeamMembers =>\n currentTeamMembers.filter(t => t.email !== teamMember.email)\n );\n // remove team member from added team members list\n setAddedTeamMembers(currentTeamMembers =>\n currentTeamMembers.filter(t => t.email !== teamMember.email)\n );\n trackEvent({\n e,\n label: `${modePrefix}-confirm-remove-team-member`,\n value: `confirmed remove ${teamMember.email}`\n });\n setDisplayModal(null);\n }\n\n function onCancelRemoveTeamMember({\n e,\n teamMember\n }: {\n e: React.MouseEvent;\n teamMember: UserReportWithMetadataInterface;\n }) {\n setDisplayModal(null);\n trackEvent({\n e,\n label: `${modePrefix}-cancel-remove-team-member`,\n value: `canceled remove ${teamMember.email}`\n });\n }\n\n function onChangeDefaultTeam(e: React.ChangeEvent) {\n e.persist();\n // send direct api request, mutation will invalidate and refetch settings\n userSettingsMutation.mutate({\n accessToken,\n tenantId,\n params: defaults(\n {\n defaultTeamId: team?.teamId\n },\n userSettings\n )\n });\n trackEvent({\n e,\n label: `${modePrefix}-default-team`,\n value: `checked to make team ${teamName} default`\n });\n }\n\n function onConfirmSubmit(e: React.MouseEvent) {\n trackEvent({\n e,\n label: `${modePrefix}-confirm-submit`,\n value: `confirmed create team ${teamName}`\n });\n doSubmit(e);\n }\n\n function onSubmit(e: React.MouseEvent) {\n e.persist();\n\n const filteredExistingTeamMembers = teamMembers.filter(\n existing =>\n !tmpRemoveTeamMembers.find(removed => removed.email === existing.email)\n );\n const allTeamMembers = [\n ...addedTeamMembers,\n ...filteredExistingTeamMembers\n ];\n let canSubmit = !!teamName && !!allTeamMembers.length;\n\n if (shouldUseSprints) {\n canSubmit = canSubmit && !!board;\n }\n\n if (canSubmit) {\n if (isNewTeam) {\n setDisplayModal({\n id: `${modePrefix}-submit`,\n teamName,\n addedTeamMembers,\n newTeamMembers: allTeamMembers.filter(t => !t.id),\n displayTenantAlias\n });\n trackEvent({\n e,\n label: `${modePrefix}-submit`,\n value: `clicked to create team ${teamName}`\n });\n } else {\n doSubmit(e);\n }\n } else {\n setHasTeamNameError(!teamName);\n setHasTeamMembersError(!allTeamMembers.length);\n if (shouldUseSprints) {\n setHasProjectError(!project);\n setHasBoardError(!board);\n }\n }\n }\n\n function doSubmit(e: React.MouseEvent) {\n const filteredExistingTeamMembers = teamMembers.filter(\n existing =>\n !tmpRemoveTeamMembers.find(removed => removed.email === existing.email)\n );\n const allTeamMembers = [\n ...addedTeamMembers,\n ...filteredExistingTeamMembers\n ];\n\n const defaultBoardId = board?.boardId || null;\n const defaultProjectId = project?.projectId || null;\n const useSprints = shouldUseSprints;\n\n setDisplayModal({\n id: `${modePrefix}-confirm-submit`,\n teamName,\n addedTeamMembers,\n newTeamMembers: allTeamMembers.filter(t => !t.id),\n removedTeamMembers: tmpRemoveTeamMembers,\n displayTenantAlias\n });\n\n createUpdateTeamMutation.mutate({\n accessToken,\n tenantId,\n params: {\n avatarColor: avatarColor as string,\n avatarIcon: avatarIcon as string,\n defaultBoardId,\n defaultProjectId,\n isOrgChartTeam: !!team?.isOrgChartTeam,\n teamId: team?.teamId || null,\n teamMembers: allTeamMembers,\n teamName: teamName as string,\n tenantId,\n useSprints\n }\n });\n\n trackEvent({\n e,\n label: `${modePrefix}`,\n value: `completed`\n });\n\n if (isNewTeam) {\n updateState(RESET_STATE);\n } else {\n setAddedTeamMembers(RESET_STATE.addedTeamMembers);\n setTmpRemoveTeamMembers(RESET_STATE.tmpRemoveTeamMembers);\n setIsEditing(false);\n }\n }\n\n function onCancelSubmit(e: React.MouseEvent) {\n setDisplayModal(null);\n trackEvent({\n e,\n label: `${modePrefix}-cancel-submit`,\n value: `canceled create team ${teamName}`\n });\n }\n\n const canEditExistingTeam =\n flags?.[\"flexible-teams-editing\"] &&\n !team?.isOrgChartTeam &&\n (team?.createdByUser?.id === user.id ||\n !!team?.teamMembers.find(t => t.id === user.id));\n\n return (\n \n \n {isNewTeam ? (\n \n ) : (\n \n )}\n {isEditing ? (\n \n \n {isNewTeam ? \"Create Team\" : \"Save Changes\"}\n \n \n Cancel\n \n \n ) : null}\n \n
    \n {!!team?.createdByUser ? (\n \n Created by: {team.createdByUser.name}\n \n ) : null}\n {isNewTeam ? null : (\n \n )}\n
    \n {!!displayModal ? (\n \n }\n testId={testId}\n />\n ) : null}\n \n );\n};\n\nexport default TeamCard;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport TeamCard from \"../TeamCard/TeamCard\";\n\n// interfaces\nimport { TeamInterface } from \"../../interfaces/team\";\n\n// constants\nconst COLS_PER_ROW = 4;\n\n// styled components\nconst Header = styled.header`\n display: grid;\n grid-template-columns: 1fr 3fr;\n margin-bottom: 1.8rem;\n`;\nconst Grid = styled.div`\n width: 100%;\n`;\nconst GridRow = styled.div`\n display: grid;\n grid-template-columns: repeat(${COLS_PER_ROW}, 1fr);\n grid-template-rows: 50rem;\n grid-auto-rows: 50rem;\n\n & + & {\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n margin-top: 1.6rem;\n padding-top: 1.6rem;\n }\n`;\nconst TeamCardCol = styled(TeamCard)`\n padding-right: 1rem;\n\n &:not(:last-child) {\n border-right: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n margin-right: 1rem;\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n header?: React.ReactNode;\n teams: Array>;\n testId?: string;\n};\n\nconst SettingsTeamBuilderGrid = ({\n className,\n header,\n teams,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-settings-team-builder-grid`;\n return (\n \n {header ?
    {header}
    : null}\n {teams.map((row, index) => (\n \n {row.map((team: TeamInterface | null) => {\n return (\n \n );\n })}\n \n ))}\n
    \n );\n};\n\nexport default SettingsTeamBuilderGrid;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport { chunk, isNull, isUndefined, partition } from \"lodash\";\n\n// components\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport SettingsTeamBuilderGrid from \"../SettingsTeamBuilderGrid/SettingsTeamBuilderGrid\";\n\n// hooks\nimport { useTeamsData } from \"../../hooks/useTeamsData\";\nimport { useSelector } from \"react-redux\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { TeamInterface } from \"../../interfaces/team\";\nimport { useOrganizationData } from \"../../hooks/useOrganizationData\";\n\n// constants\nconst COLS_PER_ROW = 4;\n\n// styled components\nconst Container = styled.div`\n padding: 3rem 0;\n`;\nconst Grid = styled(SettingsTeamBuilderGrid)`\n & + & {\n margin-top: 5rem;\n }\n`;\nconst CardHeader = styled.h2`\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n margin: 0;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst SettingsTeamBuilder = ({ className, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-settings-team-builder`;\n const user = useSelector((state: AppStateInterface) => state.user);\n const { data: ownOrgChartRootTeam } = useOrganizationData();\n const { data: ownTeams, isError, isLoading } = useTeamsData(\n {\n type: \"own-teams\",\n teamMembersToRequest: ownOrgChartRootTeam?.teamMembers || [user]\n },\n // wait to fetch teams until we have dependencies lined up\n !!user?.id\n );\n const [orgChartTeams, flexTeams] = partition(\n ownTeams,\n (t: TeamInterface) => t.isOrgChartTeam\n );\n\n return (\n \n \n }\n content={\n <>\n {!!orgChartTeams ? (\n \n Your Organization Teams\n \n }\n teams={chunk(orgChartTeams, COLS_PER_ROW)}\n testId={thisTestId}\n />\n ) : null}\n {!!flexTeams ? (\n \n \n Create a new team\n \n Your Teams\n \n }\n teams={chunk([null, ...flexTeams], COLS_PER_ROW)}\n testId={thisTestId}\n />\n ) : null}\n \n }\n testId={thisTestId}\n />\n \n );\n};\n\nexport default SettingsTeamBuilder;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport BorderedBox from \"../BorderedBox/BorderedBox\";\n\n// styled components\nconst StyledTextBlock = styled.div`\n color: ${props => props.color || props.theme.colors.text.body};\n font-size: ${props =>\n props.theme.fonts.primary.sizes[props.size] ||\n props.theme.fonts.primary.sizes.md};\n font-weight: ${props =>\n props.theme.fonts.primary.weights[props.weight] ||\n props.theme.fonts.primary.weights.regular};\n margin: 0;\n padding: 0;\n\n ${props =>\n props.isUppercase &&\n `\n text-transform: uppercase;\n `}\n`;\n\nconst TextBlock = ({\n children,\n className,\n color,\n hasBorder = false,\n isUppercase = false,\n size,\n testId,\n weight,\n ...otherProps\n}) => {\n if (!children || !testId) {\n return null;\n }\n\n const props = {\n ...otherProps,\n className,\n color,\n \"data-testid\": `${testId}-text-block`,\n isUppercase,\n size,\n weight\n };\n\n return (\n \n {hasBorder ? (\n \n {children}\n \n ) : (\n children\n )}\n \n );\n};\n\nTextBlock.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.array,\n PropTypes.element,\n PropTypes.string\n ]).isRequired,\n color: PropTypes.string,\n hasBorder: PropTypes.bool,\n isUppercase: PropTypes.bool,\n size: PropTypes.oneOf([\"lg\", \"md\", \"sm\", \"xs\"]),\n testId: PropTypes.string.isRequired,\n weight: PropTypes.oneOf([\n \"extraLight\",\n \"light\",\n \"regular\",\n \"bold\",\n \"extraBold\",\n \"black\"\n ])\n};\nexport default TextBlock;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled, { withTheme } from \"styled-components/macro\";\n\n// components\nimport TextBlock from \"../TextBlock/TextBlock\";\n\n// styled components\nconst StyledHeader = styled.div`\n font-family: ${props => props.theme.fonts.header.name}, \"Helvetica Neue\",\n \"Aria\", sans-serif;\n font-weight: ${props => props.theme.fonts.header.weights.extrabold};\n margin: 0;\n padding: 0;\n`;\n\n// exporting to target in tests\nexport const Header = ({\n children,\n className,\n color,\n hasBorder = false,\n header,\n isUppercase = false,\n size,\n style,\n testId,\n theme,\n weight\n}) => {\n if (!children || !header || !testId) {\n return null;\n }\n\n return (\n \n \n {children}\n \n \n );\n};\n\nHeader.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.array,\n PropTypes.element,\n PropTypes.string\n ]).isRequired,\n className: PropTypes.string,\n color: PropTypes.string,\n hasBorder: PropTypes.bool,\n isUppercase: PropTypes.bool,\n header: PropTypes.oneOf([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"]).isRequired,\n size: PropTypes.string,\n style: PropTypes.object,\n testId: PropTypes.string.isRequired,\n weight: PropTypes.string\n};\nexport default withTheme(Header);\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\n// components\nimport Header from \"../Header/Header\";\nimport TextBlock from \"../TextBlock/TextBlock\";\n\nconst ErrorLevelMedium = ({ message, testId }) => {\n if (!message || !testId) {\n return null;\n }\n\n return (\n
    \n \n Yikes.\n \n \n {message}\n \n \n We’ve noted it and are investigating!\n \n
    \n );\n};\n\nErrorLevelMedium.propTypes = {\n message: PropTypes.string.isRequired,\n testId: PropTypes.string.isRequired\n};\nexport default ErrorLevelMedium;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components\";\nimport sourceFeatureMap from \"../../constants/sourceFeatureMap.json\";\n\n// components\nimport HtmlText from \"../HtmlText/HtmlText\";\nimport InfoBook from \"../InfoBook/InfoBook\";\nimport Switch from \"../Switch/Switch\";\n\n// interfaces\nimport { FeatureTypes } from \"../../interfaces/features\";\nimport { TeamCustomizationSettingsInterface } from \"../../interfaces/user-settings\";\n\nconst Header = styled.h4`\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n margin-bottom: 2rem;\n`;\nconst SwitchContainer = styled.li`\n & + & {\n margin-top: 1rem;\n }\n`;\nconst Option = styled(Switch)`\n & .MuiTypography-root {\n margin-left: 1rem;\n }\n\n & label {\n justify-content: flex-start;\n }\n`;\nconst HtmlDisplayName = styled(HtmlText)`\n display: inline-block;\n`;\nconst Book = styled(InfoBook)`\n margin-left: 1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n header?: React.ReactNode;\n onChange: (optionKey: keyof TeamCustomizationSettingsInterface) => void;\n options: Array;\n settings: Partial;\n testId?: string;\n};\n\nconst TeamCustomizationSettingsSwitches = ({\n className,\n header,\n onChange,\n options,\n settings,\n testId = \"testId\"\n}: Props): ReactElement | null => {\n const thisTestId = `${testId}-team-customization-settings-switches`;\n const featureConfig = sourceFeatureMap as {\n [key in FeatureTypes]: {\n displayName: string;\n switchDisplayName?: string;\n visibility: Array;\n contribution: Array;\n };\n };\n\n const getSourceContributionText = (source: FeatureTypes) => {\n const { displayName, visibility, contribution } = featureConfig[source];\n // format the array of strings to a prettified single string human readabable english, such that items are comma seperated except the last item, which gets an \"and\" seperation\n const arrayToPrettyString = (a: string[]) =>\n a.length === 1\n ? a[0]\n : [a.slice(0, -1).join(\", \"), a.slice(-1)[0]].join(\n a.length < 2 ? \"\" : \" and \"\n );\n return `Turning off ${displayName} will remove it from ${arrayToPrettyString(\n visibility\n )} and no longer count toward your ${arrayToPrettyString(\n contribution\n )} score`;\n };\n\n return (\n
    \n {!!header ?
    {header}
    : null}\n
      \n {options.map(optionKey => (\n \n \n {!!featureConfig[optionKey].switchDisplayName ? (\n \n ) : (\n {featureConfig[optionKey].displayName}\n )}\n \n \n }\n name={`${optionKey}-toggle`}\n className={`${optionKey}-toggle`}\n testId={`${thisTestId}-${optionKey}`}\n onChange={() => {\n onChange(optionKey);\n }}\n labelPlacement=\"end\"\n showSwitchStatus={true}\n />\n \n ))}\n
    \n
    \n );\n};\n\nexport default TeamCustomizationSettingsSwitches;\n","import React, { ReactElement, useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { difference, pick } from \"lodash\";\n\n// components\nimport TeamCustomizationSettingsSwitches from \"../TeamCustomizationSettingsSwitches/TeamCustomizationSettingsSwitches\";\n\n// interfaces\nimport { TeamCustomizationSettingsInterface } from \"../../interfaces/user-settings\";\nimport { FeatureTypes } from \"../../interfaces/features\";\n\n// constants\nimport {\n customizationSettingsKeys,\n sprintCustomizationSettingsKeys\n} from \"../../constants/constants\";\nconst jiraCustomizationSettingsKeys: Array = [\n customizationSettingsKeys.JIRA_EPICS,\n customizationSettingsKeys.SUBTASKS,\n customizationSettingsKeys.TICKETS_ADDED_MID_SPRINT,\n customizationSettingsKeys.TICKETS_REMOVED_MID_SPRINT,\n customizationSettingsKeys.TICKETS_CLOSED,\n customizationSettingsKeys.TICKETS_DESCRIBED,\n customizationSettingsKeys.TICKETS_NOT_COMPLETED,\n customizationSettingsKeys.TICKETS_CARRIED_OVER\n];\nexport const storyPointsCustomizationSettingsKeys: Array = [\n customizationSettingsKeys.STORY_POINTS\n];\nexport const bugsCustomizationSettingsKeys: Array = [\n customizationSettingsKeys.BUGS_IN_SPRINT,\n customizationSettingsKeys.TOP_PRIORITY_BUGS\n];\n\n// styled components\nconst Header = styled.header`\n margin-bottom: 2rem;\n`;\nconst SettingsWrapper = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n row-gap: 6rem;\n`;\nconst Issues = styled(TeamCustomizationSettingsSwitches)`\n grid-row: 1 / span 2;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n onChangeSwitch: (optionKey: keyof TeamCustomizationSettingsInterface) => void;\n showHealthFactorsCustomizations: boolean;\n settings: Partial | null;\n teamUsesSprints: boolean;\n testId?: string;\n};\n\nconst JiraWorkSettings = ({\n className,\n onChangeSwitch,\n showHealthFactorsCustomizations,\n settings,\n teamUsesSprints,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-jira-work-settings`;\n const jiraOptionsKeys: Array = useMemo(\n () =>\n showHealthFactorsCustomizations\n ? teamUsesSprints\n ? jiraCustomizationSettingsKeys\n : difference(\n jiraCustomizationSettingsKeys,\n sprintCustomizationSettingsKeys\n )\n : [customizationSettingsKeys.SUBTASKS],\n [showHealthFactorsCustomizations, teamUsesSprints]\n );\n\n const storyOptionsKeys: Array = useMemo(\n () =>\n showHealthFactorsCustomizations\n ? storyPointsCustomizationSettingsKeys\n : [customizationSettingsKeys.STORY_POINTS],\n [showHealthFactorsCustomizations]\n );\n\n return (\n
    \n
    \n With Jira, my team wants to see Insights on...\n
    \n \n \n \n {showHealthFactorsCustomizations ? (\n \n ) : null}\n \n
    \n );\n};\n\nexport default JiraWorkSettings;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { pick } from \"lodash\";\n\n// components\nimport TeamCustomizationSettingsSwitches from \"../TeamCustomizationSettingsSwitches/TeamCustomizationSettingsSwitches\";\n\n// interfaces\nimport { TeamCustomizationSettingsInterface } from \"../../interfaces/user-settings\";\nimport { FeatureTypes } from \"../../interfaces/features\";\n\n// constants\nimport { customizationSettingsKeys } from \"../../constants/constants\";\nconst sourceCodeCustomizationSettingsKeys: Array = [\n customizationSettingsKeys.PR_REPOS,\n customizationSettingsKeys.PRS_MERGED_NO_APPROVAL,\n customizationSettingsKeys.PRS_MERGED_NO_REVIEWERS,\n customizationSettingsKeys.STUCK_PRS\n];\n\n// styled components\nconst Header = styled.header`\n margin-bottom: 2rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n onChangeSwitch: (optionKey: keyof TeamCustomizationSettingsInterface) => void;\n settings: Partial | null;\n testId?: string;\n};\n\nconst SourceCodeSettings = ({\n className,\n onChangeSwitch,\n settings,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-source-code-settings`;\n return (\n
    \n
    \n With source code, my team wants to see Insights on...\n
    \n \n
    \n );\n};\n\nexport default SourceCodeSettings;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { pick } from \"lodash\";\n\n// components\nimport TeamCustomizationSettingsSwitches from \"../TeamCustomizationSettingsSwitches/TeamCustomizationSettingsSwitches\";\n\n// interfaces\nimport { TeamCustomizationSettingsInterface } from \"../../interfaces/user-settings\";\nimport { FeatureTypes } from \"../../interfaces/features\";\n\n// constants\nimport { customizationSettingsKeys } from \"../../constants/constants\";\nconst chatCustomizationSettingsKeys: Array = [\n customizationSettingsKeys.CHAT_CHANNELS_INTERRUPTED\n];\n\n// styled components\nconst Header = styled.header`\n margin-bottom: 2rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n onChangeSwitch: (optionKey: keyof TeamCustomizationSettingsInterface) => void;\n settings: Partial | null;\n testId?: string;\n};\n\nconst ChatSettings = ({\n className,\n onChangeSwitch,\n settings,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-chat-settings`;\n return (\n
    \n
    \n With chat, my team wants to see Insights on...\n
    \n \n
    \n );\n};\n\nexport default ChatSettings;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { pick } from \"lodash\";\n\n// components\nimport TeamCustomizationSettingsSwitches from \"../TeamCustomizationSettingsSwitches/TeamCustomizationSettingsSwitches\";\n\n// interfaces\nimport { TeamCustomizationSettingsInterface } from \"../../interfaces/user-settings\";\nimport { FeatureTypes } from \"../../interfaces/features\";\n\n// constants\nimport { customizationSettingsKeys } from \"../../constants/constants\";\nconst calendarCustomizationSettingsKeys: Array = [\n customizationSettingsKeys.MEETINGS_WITH_MANY_TEAMS\n];\n\n// styled components\nconst Header = styled.header`\n margin-bottom: 2rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n onChangeSwitch: (optionKey: keyof TeamCustomizationSettingsInterface) => void;\n settings: Partial | null;\n testId?: string;\n};\n\nconst CalendarSettings = ({\n className,\n onChangeSwitch,\n settings,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-calendar-settings`;\n return (\n
    \n
    \n With calendar, my team wants to see Insights on...\n
    \n \n
    \n );\n};\n\nexport default CalendarSettings;\n","import { useMemo } from \"react\";\nimport { useQuery, useMutation, useQueryClient } from \"react-query\";\nimport { useSelector } from \"react-redux\";\nimport {\n requestTeamsCustomizations,\n updateTeamCustomizations\n} from \"../utils/teams\";\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\nexport const useCustomizationData = (teamId: string) => {\n const tenantId: number = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const accessToken: string = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n\n const teamParams = useMemo(() => {\n return {\n accessToken,\n tenantId,\n params: {\n teamIds: [teamId]\n }\n };\n }, [accessToken, teamId, tenantId]);\n\n const customizationParams = useMemo(() => {\n return {\n accessToken,\n tenantId,\n params: {\n teamSettings: {\n teamId,\n settings: {\n storyPoints: true,\n subtasks: true\n }\n }\n }\n };\n }, [accessToken, teamId, tenantId]);\n\n const queryClient = useQueryClient();\n\n const queryData = useQuery(\n [\"team-customization-data\", teamParams],\n () => requestTeamsCustomizations(teamParams),\n {\n refetchOnWindowFocus: false,\n enabled: !!accessToken && !!tenantId && !!teamId\n }\n );\n\n const queryMutation = useMutation(\n (newSettings: any) =>\n updateTeamCustomizations({\n ...customizationParams,\n params: {\n teamSettings: {\n teamId,\n settings: newSettings\n }\n }\n }),\n {\n onSuccess: updatedSettings => {\n queryClient.invalidateQueries(\"team-customization-data\");\n queryClient.setQueryData(\n \"team-customization-data\",\n () => updatedSettings\n );\n }\n }\n );\n\n return { queryData, queryMutation };\n};\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { isNull, kebabCase, every } from \"lodash\";\nimport { Route, Switch, useLocation } from \"react-router-dom\";\n\n// components\nimport PageTitle from \"../PageTitle/PageTitle\";\nimport Icon from \"../Icon/Icon\";\nimport InformationText from \"../../constants/informationText.json\";\nimport HtmlText from \"../HtmlText/HtmlText\";\nimport ErrorLevelMedium from \"../ErrorLevels/ErrorLevelMedium\";\nimport { ErrorBoundary } from \"@sentry/react\";\nimport FlexibleTeamsNavigation from \"../FlexibleTeamsNavigation/FlexibleTeamsNavigation\";\nimport JiraWorkSettings from \"../JiraWorkSettings/JiraWorkSettings\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport SourceCodeSettings from \"../SourceCodeSettings/SourceCodeSettings\";\nimport ChatSettings from \"../ChatSettings/ChatSettings\";\nimport CalendarSettings from \"../CalendarSettings/CalendarSettings\";\nimport RouteLinkTabs from \"../RouteLinkTabs/RouteLinkTabs\";\nimport Tooltip from \"../Tooltip/Tooltip\";\nimport Modal from \"../Modal/Modal\";\nimport RouteLink from \"../RouteLink/RouteLink\";\n\n// constants\nimport {\n pageIds,\n settingsSections,\n teamSettingsSections,\n teamSettingsSectionsLabels\n} from \"../../constants/constants\";\n\n// hooks\nimport { useActiveUsersTeams } from \"../../hooks/useActiveUsersTeams\";\nimport { useCustomizationData } from \"../../hooks/useCustomizationData\";\nimport { useProjectsAndBoardsData } from \"../../hooks/useProjectsAndBoardsData\";\nimport { useSprintMetadata } from \"../../hooks/useSprintMetadata\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// interfaces\nimport { TeamInterface } from \"../../interfaces/team\";\nimport { TeamCustomizationSettingsInterface } from \"../../interfaces/user-settings\";\n\n// utils\nimport { getBoard, getTeamSprintMetadata } from \"../../utils/sprints\";\nimport { getTeamNameFromTeam } from \"../../utils/teams\";\n\n// styled components\nconst Container = styled.div`\n min-height: 40rem;\n margin: 3rem 0 2rem 0;\n`;\nconst Overlay = styled.div<{ isDisabled: boolean }>`\n pointer-events: ${props => (props.isDisabled ? \"none\" : \"auto\")};\n opacity: ${props => (props.isDisabled ? \"0.5\" : \"1\")};\n`;\nconst InfoText = styled(HtmlText)`\n width: 60rem;\n margin: 1rem 0;\n`;\nconst InternalTeamPickerContainer = styled.div`\n margin: 3rem 0 1rem 0;\n`;\nconst Teams = styled(FlexibleTeamsNavigation)`\n padding-top: 1rem;\n`;\nconst TeamTitle = styled.div`\n display: flex;\n margin-top: 3rem;\n`;\nconst TeamLength = styled.div`\n margin-left: 1rem;\n font-family: ${props => props.theme.fonts.subheader.name};\n`;\nconst StyledIcon = styled(Icon)`\n margin-left: 1rem;\n color: ${props => props.theme.colors.all.wolverine};\n display: flex;\n align-items: center;\n`;\nconst MAX_MEMBERS_PER_COLUMN = 10;\nconst TeamList = styled.ul<{ rosterLength: number }>`\n && {\n padding-left: 0;\n }\n columns: ${props =>\n `${Math.ceil(props.rosterLength / MAX_MEMBERS_PER_COLUMN)}`};\n gap: 2rem;\n`;\nconst StyledListItem = styled.li`\n list-style-type: none;\n`;\nconst StyledTabs = styled(RouteLinkTabs)`\n margin-top: 1rem;\n`;\nconst TabContent = styled.div`\n margin: 3rem 0;\n`;\nconst TeamJiraContainer = styled.div`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n display: flex;\n padding: 1rem 0 1rem 0;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n`;\nconst DisclaimerText = styled(HtmlText)`\n margin-left: auto;\n font-style: italic;\n color: ${props => props.theme.colors.all.storm};\n`;\nconst JiraItem = styled.div`\n margin-left: 1rem;\n margin-right: 2rem;\n`;\nconst SaveChangesText = styled.div`\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n color: ${props => props.theme.colors.all.cyclops};\n min-height: 2rem;\n margin: 1rem 0;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst SaveButtonContainer = styled.div`\n display: flex;\n padding: 2rem 0 3rem 0;\n`;\nconst SaveButton = styled.button<{ disabled: boolean }>`\n background: ${props =>\n props.disabled\n ? props.theme.colors.button.disabled.default.bg\n : props.theme.colors.button.default.default.bg};\n border: 0;\n color: ${props =>\n props.disabled\n ? props.theme.colors.button.disabled.default.fg\n : props.theme.colors.button.default.default.fg};\n margin-left: auto;\n\n &:hover {\n background-color: ${props =>\n props.disabled\n ? props.theme.colors.button.disabled.hover.bg\n : props.theme.colors.button.default.hover.bg};\n color: ${props =>\n props.disabled\n ? props.theme.colors.button.disabled.hover.fg\n : props.theme.colors.button.default.hover.fg};\n }\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n padding: 1rem 3rem;\n`;\n\nconst LargeText = styled.div`\n font-size: 10rem;\n font-weight: bold;\n`;\n\nconst StyledModal = styled(Modal)`\n width: 20rem !important;\n`;\n\nconst ModalContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst Header = styled.div`\n margin-top: -2rem;\n font-family: ${props => props.theme.fonts.header.name};\n font-size: ${props => props.theme.fonts.header.sizes.lg};\n padding-bottom: 2rem;\n line-height: 1;\n`;\n\nconst BodyText = styled.div`\n padding: 1rem 0;\n font-family: ${props => props.theme.fonts.primary.name};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\n\nconst GoBackButton = styled.button`\n background: ${props =>\n props.disabled\n ? props.theme.colors.button.disabled.default.bg\n : props.theme.colors.button.default.default.bg};\n border: 0;\n color: ${props =>\n props.disabled\n ? props.theme.colors.button.disabled.default.fg\n : props.theme.colors.button.default.default.fg};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n padding: 1rem 3rem;\n`;\n\nconst TurnOffButton = styled.div`\n color: ${props => props.theme.colors.all.storm};\n align-self: flex-end;\n cursor: pointer;\n margin-left: auto;\n padding: 1rem 3rem;\n`;\n\nconst FactorLists = styled.div`\n padding: 1rem 0;\n display: flex;\n flex-direction: row;\n font-family: ${props => props.theme.fonts.primary.name};\n`;\nconst Column = styled.div`\n display: flex;\n flex-direction: column;\n color: ${props => props.theme.colors.all.storm};\n width: 50%;\n`;\n\nconst FactorItem = styled.div`\n margin-top: 1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\ntype LocalSettings = Partial;\n\nexport const TeamCustomizationSettings = ({\n className,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-team-customization-settings`;\n const { trackEvent } = useTracking();\n const { data: activeUsersTeams } = useActiveUsersTeams();\n const displayTeams = useMemo(() => {\n return activeUsersTeams?.filter(team => !team.isOrgChartTeam) || [];\n }, [activeUsersTeams]);\n // need to get the default team before using it as the useState default, forces the calculation rather than waiting inside useState to potentially have a falsy value (if not fulfilled)\n const defaultTeam = displayTeams[0];\n const [activeTeam, setActiveTeam] = useState(defaultTeam);\n const activeTeamId = activeTeam?.teamId;\n const teamUsesSprints = activeTeam?.useSprints;\n const { data: projectsData } = useProjectsAndBoardsData();\n const { data: sprintMetadata } = useSprintMetadata(\n { type: `${activeTeamId}-team`, team: activeTeam },\n !activeTeam?.defaultBoardId\n );\n const userHasNoFlexTeams = every(activeUsersTeams, [\"isOrgChartTeam\", true]);\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const showHealthFactorsCustomizations =\n flags?.[\"health-factors-customization-settings\"];\n // FIXME: we are really close to refactoring our routing to use react router 6\n // nested routing, so rather than set up a whole new thing for settings in\n // urlParams that's going to get ripped out, doing this slightly jank thing\n // here for now\n const location = useLocation();\n const selectedSection = location.pathname.split(\"/\")[3];\n const { getSettingsPath } = useUrlParams();\n\n const { queryData, queryMutation } = useCustomizationData(activeTeamId);\n const savedSettings = useMemo(() => queryData?.data?.[0]?.settings, [\n queryData\n ]);\n const [settingsLocal, setSettingsLocal] = useState(\n null\n );\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [allProjectFactorsDisabled, setAllProjectFactorsDisabled] = useState(\n false\n );\n const [allContextFactorsDisabled, setAllContextFactorsDisabled] = useState(\n false\n );\n const isSavable = useMemo(() => {\n if (!!savedSettings && !isNull(settingsLocal)) {\n return Object.entries(settingsLocal).every(entry => {\n const key = entry[0] as keyof LocalSettings;\n const value = entry[1];\n return value === !!savedSettings[key];\n });\n }\n return true;\n }, [savedSettings, settingsLocal]);\n\n useEffect(() => {\n setSettingsLocal(null);\n }, [activeTeamId]);\n\n useEffect(() => {\n if (!!savedSettings) {\n setSettingsLocal(savedSettings);\n }\n }, [savedSettings]);\n\n const derivedTeamBoard = getBoard({\n sprintMetadata,\n allBoards: projectsData.boards,\n team: activeTeam\n });\n\n const { project, board, sprint } = getTeamSprintMetadata({\n shouldUseSprints: activeTeam?.useSprints,\n projectsData,\n defaultProjectId: activeTeam?.defaultProjectId,\n defaultBoardId: activeTeam?.defaultBoardId,\n isOrgChartTeam: activeTeam?.isOrgChartTeam,\n derivedTeamBoard\n });\n\n function onShowTooltip(e: React.MouseEvent) {\n trackEvent({\n e,\n label: \"team-roster\",\n value: `showed team roster from hover`\n });\n }\n\n function onChangeSwitch(optionKey: keyof TeamCustomizationSettingsInterface) {\n setSettingsLocal({\n ...settingsLocal,\n [optionKey]: !settingsLocal?.[optionKey]\n });\n }\n function handleReturnToTeamBuilder(e: any) {\n e.preventDefault();\n window.location.reload();\n }\n\n function handleSaveChanges(e: any) {\n e.preventDefault();\n if (!!settingsLocal) {\n // subfactors factors of Project Health, if all are disabled, warn the user\n const projectFactors: Array = [\n \"ticketsAddedMidsprint\",\n \"prsMergedNoReviewers\",\n \"prsMergedNoApproval\",\n \"ticketsDescribed\",\n \"stuckPrs\",\n \"ticketsCarriedOver\",\n \"bugsInSprint\",\n \"storyPoints\",\n \"ticketsClosed\"\n ];\n // likewise as above for Context Switching\n const contextSwitchingFactors: Array = [\n \"topPriorityBugs\",\n \"prRepos\",\n \"meetingsWithManyTeams\",\n \"jiraEpics\",\n \"chatChannelsInterrupted\"\n ];\n const projectsDisabled = projectFactors.every(\n factor => !settingsLocal?.[factor]\n );\n setAllProjectFactorsDisabled(projectsDisabled);\n\n const contextSwitchingDisabled = contextSwitchingFactors.every(\n factor => !settingsLocal?.[factor]\n );\n setAllContextFactorsDisabled(contextSwitchingDisabled);\n\n contextSwitchingDisabled || projectsDisabled\n ? setIsModalOpen(true)\n : !!settingsLocal && queryMutation.mutate(settingsLocal);\n }\n }\n\n const allowedSections = useMemo(\n () =>\n [\n teamSettingsSections.JIRA_WORK,\n teamSettingsSections.SOURCE_WORK,\n teamSettingsSections.CHAT,\n teamSettingsSections.CALENDAR\n ].filter(section =>\n section === teamSettingsSections.JIRA_WORK\n ? true\n : showHealthFactorsCustomizations\n ),\n [showHealthFactorsCustomizations]\n );\n\n return (\n \n {userHasNoFlexTeams ? (\n <>\n Hey!\n
    To customize metrics please create a flex team under the
    \n \n Team Builder Tab\n \n \n ) : (\n <>\n \n \n \n
    Choose Team:
    \n \n setActiveTeam(team)\n }\n selectedTeam={activeTeam}\n />\n \n {getTeamNameFromTeam(activeTeam)}\n {` (${activeTeam?.teamMembers?.length})`}\n \n \n }\n popupContent={\n \n {activeTeam?.teamMembers.map(m => (\n \n {m.name}\n \n ))}\n \n }\n placement=\"bottom\"\n />\n
    \n \n )}\n \n \n {board && (\n <>\n Board:\n {board.boardName}\n \n )}\n {project && (\n <>\n Project:\n {project.projectName}\n \n )}\n {sprint && (\n <>\n Recent Active Sprint:\n {sprint.displayName}\n \n )}\n \n \n \n \n \n }\n content={\n <>\n ({\n path: getSettingsPath({\n selectedSection: settingsSections.TEAM_SETTINGS,\n selectedMetric: section\n }),\n title: teamSettingsSectionsLabels[section],\n id: section,\n isDisabled: false\n }))}\n />\n \n \n \n \n \n \n {\" \"}\n \n \n \n \n \n \n \n \n \n \n }\n testId={thisTestId}\n />\n
    \n \n {!isSavable && changes must be saved}\n \n \n handleSaveChanges(e)}\n data-testid={`${testId}-save-button`}\n >\n Save Changes\n \n \n
    \n
    \n {isModalOpen && (\n \n
    Are you sure you want to do this?!
    \n \n {`You have turned off all all the factors that make up ${\n allProjectFactorsDisabled && allContextFactorsDisabled\n ? \"Project Health, Context Switching\"\n : allProjectFactorsDisabled\n ? \"Project Health\"\n : \"Context Switching\"\n }. If you continue you will no longer get insights on\n ${\n allProjectFactorsDisabled && allContextFactorsDisabled\n ? \"Project Health, Context Switching\"\n : allProjectFactorsDisabled\n ? \"Project Health\"\n : \"Context Switching\"\n }.`}\n \n
    \n {allProjectFactorsDisabled && (\n \n \n {[\n \"Tickets Added\",\n \"Tickets With Descriptions\",\n \"Tickets Closed\",\n \"Tickets Carried Over\"\n ].map(factor => {\n return {factor};\n })}\n \n \n {[\n \"Story Points\",\n \"Bugs in Sprint\",\n \"Stuck PRs\",\n \"PRs Merged Without Approval\",\n \"PRs Merged Without Reviewers\"\n ].map(factor => {\n return {factor};\n })}\n \n \n )}\n {allContextFactorsDisabled && (\n \n \n {[\n \"Meetings with 2+ Teams\",\n \"PR Repos\",\n \"Top Priority Bugs\",\n \"Chat Channels with Interruptions\",\n \"Jira Epics\"\n ].map(factor => {\n return {factor};\n })}\n \n \n )}\n
    \n \n {\n queryMutation.mutate(settingsLocal);\n setIsModalOpen(false);\n }}\n >\n Turn Off\n \n setIsModalOpen(false)}\n data-testid={`${testId}-save-button`}\n >\n Go Back\n \n \n \n }\n onHide={() => setIsModalOpen(false)}\n testId={\"settings-warning-modal\"}\n />\n )}\n
    \n );\n};\n\nexport default TeamCustomizationSettings;\n","import React, { useEffect, useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport { Redirect, Route, Switch } from \"react-router-dom\";\nimport PageTitle from \"../PageTitle/PageTitle\";\nimport SettingsProjectsAndRepos from \"../SettingsProjectsAndRepos/SettingsProjectsAndRepos\";\nimport SettingsTeamBuilder from \"../SettingsTeamBuilder/SettingsTeamBuilder\";\nimport RouteLinkTabs from \"../RouteLinkTabs/RouteLinkTabs\";\nimport TeamCustomizationSettings from \"../TeamCustomizationSettings/TeamCustomizationSettings\";\nimport TemplateHeader from \"../TemplateHeader/TemplateHeader\";\nimport UiCenteringWrapper from \"../UiCenteringWrapper/UiCenteringWrapper\";\n\n// constants\nimport {\n pageIds,\n pageMetadata,\n settingsSectionLabels,\n settingsSections\n} from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useLocation } from \"react-router-dom\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// utils\nimport { getSettingsPageTitle } from \"../../utils/settings\";\n\n// styled components\nconst ContentWrapper = styled.div`\n background: ${props => props.theme.colors.all.white};\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n`;\nconst Title = styled(PageTitle)`\n margin-right: 1rem;\n`;\nconst Tabs = styled(RouteLinkTabs)`\n padding-bottom: 0.5rem;\n margin: 2rem 0 0.5rem 0;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst SettingsPage = ({\n className,\n testId = \"testId\"\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-settings-page`;\n const location = useLocation();\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const canViewTeamBuilder = flags?.[\"flexible-teams-settings\"];\n const canViewTeamCustomizationSettings =\n flags?.[\"team-customization-settings\"];\n\n const { getSettingsPath } = useUrlParams();\n // FIXME: we are really close to refactoring our routing to use react router 6\n // nested routing, so rather than set up a whole new thing for settings in\n // urlParams that's going to get ripped out, doing this slightly jank thing\n // here for now\n const selectedSection = location.pathname.split(\"/\")[2];\n\n // page title change\n useEffect(() => {\n document.title = getSettingsPageTitle();\n }, [location]);\n\n const allowedSections = useMemo(\n () =>\n [\n settingsSections.TEAM_BUILDER,\n settingsSections.TEAM_SETTINGS,\n settingsSections.PROJECTS_AND_REPOS\n ].filter(section => {\n switch (section) {\n case settingsSections.TEAM_BUILDER:\n return canViewTeamBuilder;\n case settingsSections.TEAM_SETTINGS:\n return canViewTeamCustomizationSettings;\n default:\n return true;\n }\n }),\n [canViewTeamBuilder, canViewTeamCustomizationSettings]\n );\n\n return flags?.[\"settings-page\"] ? (\n
    \n \n \n }\n testId={testId}\n />\n \n ({\n id: section,\n path: getSettingsPath({\n selectedSection: section\n }),\n title: settingsSectionLabels[section]\n }))}\n testId={thisTestId}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n ) : (\n \n );\n};\n\nexport default SettingsPage;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// actions\nimport { storeOrganization } from \"../../actions/sessionActions\";\n\n// components\nimport Button from \"../Button/Button\";\nimport Icon from \"../Icon/Icon\";\nimport RouteLink from \"../RouteLink/RouteLink\";\n\n// hooks\nimport { useHistory } from \"react-router-dom\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useOrganizationData } from \"../../hooks/useOrganizationData\";\n\n// interfaces\nimport { UserInterface, UserReportInterface } from \"../../interfaces/user\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { pageIds } from \"../../constants/constants\";\n\n// styled components\nconst Container = styled.div`\n background-color: ${props => props.theme.colors.all.wolverine};\n position: relative;\n`;\n\nconst TenantAlias = styled.h3`\n align-items: baseline;\n display: flex;\n font-size: ${props => props.theme.fonts.subheader.sizes.sm};\n color: ${props => props.theme.colors.all.white};\n font-weight: ${props => props.theme.fonts.primary.weights.medium};\n line-height: 1.8;\n`;\n\nconst HomeIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.jean};\n font-size: 1.1rem;\n margin-right: 0.75rem;\n`;\n\ntype Props = {\n className?: string;\n currentPageId?: string;\n testId?: string;\n user: UserInterface;\n activeTeamLead?: UserReportInterface | null;\n};\n\nconst DropDownContainer = styled.div`\n background-color: ${props => props.theme.colors.all.white};\n position: absolute;\n z-index: 100;\n`;\n\nconst StyledRouteLink = styled.button`\n color: ${props => props.theme.colors.all.wolverine};\n &,\n &:visited {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n }\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n border: 0;\n background-color: ${props => props.theme.colors.all.white};\n margin-left: 0.5rem;\n text-align: left;\n\n & + & {\n border-top: ${props => `.2rem solid ${props.theme.colors.all.storm}`};\n }\n`;\n\nconst StyledName = styled.div`\n padding: 0.5rem 0;\n margin: 0 0.5rem;\n font-color: ${props => props.theme.colors.all.wolverine};\n`;\n\nconst StyledButton = styled(Button)`\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n }\n margin-right: 0.5rem;\n`;\n\nconst HomeLinkWithDropDown = ({\n className,\n currentPageId,\n testId = \"testId\",\n user,\n activeTeamLead\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-home-link-with-drop-down`;\n const [homeDropDownIsOpen, _setHomeDropDownIsOpen] = useState(false);\n // organization\n const { data: orgChartRootTeam } = useOrganizationData();\n const displayTenantAlias = useSelector(\n (state: AppStateInterface) => state.session.displayTenantAlias\n );\n const { trackEvent } = useTracking();\n const dispatch = useDispatch();\n const history = useHistory();\n const { getStartPath } = useUrlParams();\n const isZoomedIn = !!activeTeamLead;\n const isOverviewPage = currentPageId === pageIds.OVERVIEW;\n\n if (!isZoomedIn) {\n return (\n \n \n \n \n {displayTenantAlias}\n \n \n \n );\n }\n\n function onClickDropdown(\n e: React.MouseEvent,\n isOpen: boolean\n ) {\n _setHomeDropDownIsOpen(isOpen);\n trackEvent({\n e,\n label: `homeDropDown`,\n value: `clicked ${isOpen ? \"open\" : \"closed\"}`\n });\n }\n\n function onClickHome(\n e: React.MouseEvent,\n isOverviewPage: boolean,\n isLoggedInUser: boolean\n ) {\n _setHomeDropDownIsOpen(false);\n\n if (isLoggedInUser && orgChartRootTeam?.teamMembers) {\n dispatch(\n storeOrganization({\n parentsOfActiveTeam: []\n })\n );\n }\n\n history.push(\n getStartPath({\n persistQuerystring: !isOverviewPage && !isLoggedInUser\n })\n );\n\n e.persist();\n e.preventDefault();\n trackEvent({\n e,\n label: \"home-link-click\",\n value: `followed route link to /`\n });\n }\n\n return (\n \n \n ) =>\n onClickDropdown(e, !homeDropDownIsOpen)\n }\n testId={`homeDropDown`}\n >\n \n \n \n\n {displayTenantAlias}\n \n {homeDropDownIsOpen ? (\n \n ) =>\n onClickHome(e, isOverviewPage, true)\n }\n >\n {user.name}\n \n ) =>\n onClickHome(e, isOverviewPage, false)\n }\n >\n \n {activeTeamLead?.name}\n \n \n \n ) : null}\n \n );\n};\n\nexport default HomeLinkWithDropDown;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isNull, isUndefined } from \"lodash\";\nimport config from \"../../env-config\";\n\n// components\nimport { Divider, List, ListItem } from \"@material-ui/core\";\nimport Icon from \"../Icon/Icon\";\nimport RouteLink from \"../RouteLink/RouteLink\";\n\n// constants\nimport {\n pageIds,\n pageMetadata,\n urlGlobalParams\n} from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport * as LDClient from \"launchdarkly-js-client-sdk\";\nimport { PageMetadataInterface } from \"../../interfaces/constants\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { parsePageIdFromPathname } from \"../../utils/router\";\n\n// styled components\nconst Beaker = styled(Icon)`\n color: ${props => props.theme.colors.all.marvelMint};\n`;\nconst SidebarList = styled(List)`\n & .MuiList-root {\n display: flex;\n flex-flow: column nowrap;\n }\n\n & .MuiList-padding {\n padding: 0;\n }\n\n & .MuiButton-label {\n text-align: left;\n color: white;\n font-size: 1rem;\n }\n\n & .MuiListItem-button {\n align-items: stretch;\n display: flex;\n flex-flow: column nowrap;\n padding: 0;\n\n &:hover {\n color: ${props => props.theme.colors.all.wolverine};\n background-color: ${props =>\n props.theme.colors.all.marvelMint} !important;\n & .LinkFlag {\n color: ${props => props.theme.colors.all.wolverine};\n }\n }\n }\n\n & .Mui-selected {\n background-color: ${props => props.theme.colors.all.storm} !important;\n box-shadow: inset -4px 0px ${props => props.theme.colors.all.marvelMint};\n }\n`;\nconst SidebarLink = styled(RouteLink)<{ isZoomedIn: boolean }>`\n display: inline-flex;\n align-items: baseline;\n justify-content: space-between;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.book};\n color: inherit !important;\n padding-top: 0.8rem;\n padding-right: 1.2rem;\n padding-bottom: 0.8rem;\n padding-left: ${props => (props.isZoomedIn ? \"1.6rem\" : \"0.8rem\")};\n text-decoration: none !important;\n text-transform: capitalize;\n\n &.active {\n color: ${props => props.theme.colors.all.marvelMint};\n }\n &:hover {\n & ${Beaker} {\n color: ${props => props.theme.colors.all.wolverine};\n }\n }\n`;\nconst UplevelWebLink = styled.a<{ isZoomedIn: boolean }>`\n display: inline-flex;\n align-items: baseline;\n justify-content: space-between;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.book};\n color: inherit !important;\n padding-top: 0.8rem;\n padding-right: 1.2rem;\n padding-bottom: 0.8rem;\n padding-left: ${props => (props.isZoomedIn ? \"1.6rem\" : \"0.8rem\")};\n text-decoration: none !important;\n text-transform: capitalize;\n\n &.active {\n color: ${props => props.theme.colors.all.marvelMint};\n }\n &:hover {\n & ${Beaker} {\n color: ${props => props.theme.colors.all.wolverine};\n }\n }\n`;\nconst LinkTitle = styled.span`\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n flex: 1;\n`;\nconst LinkFlag = styled(\"span\")`\n color: ${props => props.theme.colors.all.marvelMint};\n font-size: 1rem;\n font-style: italic;\n margin-right: 1rem;\n`;\nconst LinkChildrenList = styled.ul`\n list-style-type: disc;\n list-style-position: inside;\n margin-left: 0;\n padding-left: 0;\n`;\nconst LinkChildrenListItem = styled.li<{\n isZoomedIn: boolean;\n selected: boolean;\n}>`\n padding-left: ${props => (props.isZoomedIn ? \"1.6rem\" : \"0.8rem\")};\n color: ${props =>\n props.selected\n ? props.theme.colors.all.marvelMint\n : props.theme.colors.all.jean};\n\n &:hover {\n color: ${props => props.theme.colors.all.wolverine};\n background-color: ${props => props.theme.colors.all.marvelMint} !important;\n & .LinkFlag {\n color: ${props => props.theme.colors.all.wolverine};\n }\n }\n\n & ${SidebarLink} {\n padding: 0;\n }\n`;\nconst ListDivider = styled(Divider)`\n background-color: ${props => props.theme.colors.all.storm} !important;\n height: 0.1rem !important;\n margin: 0.8rem !important;\n`;\n\n// utils\nconst pageIsAllowed = (\n pageMetadata: PageMetadataInterface,\n flags: LDClient.LDFlagSet | null\n): boolean => {\n // if flags is null, they haven't resolved yet in state. return false until\n // they do.\n // TODO: this situation is being reflected in sentry errors but\n // it's unclear how it's occurring because we literally do a check for whether\n // flags are null in order to ungate the UI. this needs more investigation!!\n if (isNull(flags)) {\n return false;\n }\n return isUndefined(pageMetadata.flag)\n ? isUndefined(pageMetadata.path)\n ? false\n : // if we're not flagging a defined path, it should be safe to always display\n isUndefined(flags?.[pageMetadata.path])\n ? true\n : flags?.[pageMetadata.path]\n : !!flags?.[pageMetadata.flag];\n};\n\ntype Props = {\n className?: string;\n currentPageId: string;\n pages: Array;\n pathname: string;\n isZoomedIn: boolean;\n testId?: string;\n};\n\nconst SidebarLinks = ({\n className,\n currentPageId,\n isZoomedIn,\n pathname,\n testId = \"testId\",\n pages\n}: Props): ReactElement => {\n const thisTestId = `${testId}-sidebar-links`;\n const {\n teamDeepDiveParams,\n getPathForPageId,\n workDeepDiveParams,\n urlParams\n } = useUrlParams();\n const activeTeam = urlParams.team;\n const activeBoard = urlParams.board;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const allowedFeatures = pages\n .filter((pageId: string) => {\n const page = pageMetadata[pageId];\n const isAllowed = pageIsAllowed(page, flags);\n if (pageId === pageIds.RETROS) {\n return isAllowed && !!activeTeam?.useSprints && !!activeBoard;\n }\n return isAllowed;\n })\n .map((pageId: string) => {\n return { ...pageMetadata[pageId], pageId };\n });\n const enabledFeatures = (isZoomedIn\n ? allowedFeatures.filter(\n page => page.pageId !== pageIds.REPORTS && page.pageId !== pageIds.LABS\n )\n : allowedFeatures\n ).map(p => p.pageId);\n\n return (\n
    \n \n {(allowedFeatures as Array<{\n pageId: string;\n path: string;\n title: string;\n children?: Array;\n flag?: string;\n }>).map((page, index) => {\n const linkId = `sidebar-${page.path}`;\n const isEnabled = enabledFeatures.includes(page.pageId);\n const children = (page.children || []).filter(c =>\n pageIsAllowed(pageMetadata[c], flags)\n );\n const params =\n currentPageId === pageIds.WORK_DEEP_DIVE\n ? workDeepDiveParams\n : currentPageId === pageIds.TEAM_DEEP_DIVE\n ? teamDeepDiveParams\n : null;\n\n const linkContent = (\n <>\n \n {page.pageId === pageIds.LABS ? (\n <>\n {page.title}\n \n ) : (\n page.title\n )}\n \n {flags?.newFeatures?.[page.path] ? (\n New! \n ) : flags?.beta?.[page.path] ? (\n Beta \n ) : null}\n \n );\n const linkWrapper =\n page.pageId === pageIds.OVERVIEW ? (\n \n {linkContent}\n \n ) : (\n \n {linkContent}\n \n );\n\n return (\n
  • \n {!!index ? : null}\n \n {linkWrapper}\n \n {!!children.length ? (\n \n {children.map(c => {\n const childLinkId = `sidebar-${page.path}-${c}`;\n return (\n \n \n {pageMetadata[c].title}\n \n \n );\n })}\n \n ) : null}\n
  • \n );\n })}\n
    \n
    \n );\n};\n\nexport default SidebarLinks;\n","export default __webpack_public_path__ + \"static/media/Horz_Color-Rev_Lg.b8db758e.png\";","import React from \"react\";\nimport styled, { createGlobalStyle } from \"styled-components/macro\";\nimport { get } from \"lodash\";\n\n// components\nimport { Drawer } from \"@material-ui/core\";\nimport HomeLinkWithDropDown from \"../HomeLinkWithDropdown/HomeLinkWithDropDown\";\nimport Icon from \"../Icon/Icon\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport SidebarLinks from \"../SidebarLinks/SidebarLinks\";\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\nimport UplevelLogoWords from \"../../images/Horz_Color-Rev_Lg.png\";\n\n// constants\nimport { pageIds, pageMetadata } from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { useHistory, useLocation } from \"react-router-dom\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport {\n UserInterface,\n UserReportWithMetadataInterface\n} from \"../../interfaces/user\";\n\n// utils\nimport { parsePageIdFromPathname } from \"../../utils/router\";\n\nconst StyledDrawer = styled(Drawer)`\n z-index: 1;\n\n & .MuiDrawer-paper {\n background-color: ${props => props.theme.colors.all.wolverine};\n border: none;\n color: white;\n padding: 0.8rem 0 0;\n width: ${props => props.theme.grid.sidebar};\n }\n`;\n\nconst GlobalStyle = createGlobalStyle`\n .teamPopup {\n font-family: ${props =>\n props.theme.fonts.primary.name}, Arial, Helvetica, sans-serif;\n font-size: 1.1rem;\n padding: .25rem 0;\n }\n .teamMember {\n line-height: 1.2;\n }\n`;\n\nconst Header = styled.header`\n padding: 0 1.2rem 0 0.8rem;\n`;\n\nconst SidebarLinksWrapper = styled.nav`\n flex: 1;\n`;\n\nconst BorderWrapper = styled.div`\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.storm}`};\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.storm}`};\n display: flex;\n flex-flow: column nowrap;\n`;\n\nconst UserButton = styled.button<{ isTeamLead: boolean }>`\n align-items: center;\n background: 0;\n border: 0;\n display: flex;\n flex-direction: row;\n padding-bottom: 1.6rem;\n padding-left: ${props => (props.isTeamLead ? \"0.8rem\" : \"0\")};\n padding-right: 0;\n padding-top: 1.6rem;\n text-align: left;\n`;\n\nconst StyledSlackAvatar = styled(SlackAvatar)`\n height: 3rem;\n width: 3rem;\n border-radius: 50%;\n border: ${props => `.2rem solid ${props.theme.colors.all.white}`};\n`;\n\nconst Name = styled.h2`\n color: ${props => props.theme.colors.all.white};\n flex: 1;\n font-weight: ${props => props.theme.fonts.primary.weights.medium};\n font-size: 1.2rem;\n margin-left: 0.75rem;\n`;\n\nconst Footer = styled.footer`\n padding: 0 0 1rem 0;\n`;\nconst ResourceLinksList = styled.ul`\n margin: 0 2rem 5rem 0.8rem;\n`;\nconst ResourceLinksListItem = styled.li`\n & + & {\n margin-top: 1.5rem;\n }\n`;\nconst ResourceLink = styled.a`\n display: block;\n\n &:hover {\n text-decoration: none;\n }\n`;\nconst ResourceLinkHeader = styled.h3`\n align-items: baseline;\n display: flex;\n color: ${props => props.theme.colors.all.white};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n`;\nconst ResourceLinkIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.marvelMint};\n margin-left: 0.8rem;\n`;\nconst ResourceLinkText = styled.p`\n color: ${props => props.theme.colors.all.white};\n font-size: 1.2rem;\n`;\n\nconst UplevelLogo = styled(\"img\")`\n width: 140px;\n height: auto;\n`;\n\nconst PrivacyLink = styled.a`\n color: ${props => props.theme.colors.all.storm};\n display: block;\n font-size: 1rem;\n margin-left: 1.2rem;\n\n &:hover {\n color: ${props => props.theme.colors.link.hover.color};\n background: ${props => props.theme.colors.link.hover.background};\n text-decoration: none;\n }\n`;\n\nconst SettingsLink = styled(RouteLink)`\n display: block;\n`;\nconst CogIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.white};\n padding-left: 1.2rem;\n`;\n\nexport const Sidebar: React.FunctionComponent = () => {\n const thisTestId = \"sidebar\";\n const user = useSelector((state: AppStateInterface) => get(state, \"user\"));\n const flags = useSelector((state: AppStateInterface) => get(state, \"flags\"));\n const { pathname } = useLocation();\n const currentPageId = parsePageIdFromPathname(pathname);\n const isOverviewPage = currentPageId === pageIds.OVERVIEW;\n const { getStartPath, urlParams } = useUrlParams();\n const { teamLead } = urlParams;\n const isZoomedIn = !!teamLead;\n const { trackEvent } = useTracking();\n const history = useHistory();\n\n function onClickResourceLink(e: React.MouseEvent) {\n trackEvent({\n e,\n label: (e.currentTarget as HTMLElement).id,\n value: \"link clicked\"\n });\n }\n\n function onClickUser({\n e,\n resetState,\n user\n }: {\n e: React.MouseEvent;\n resetState: boolean;\n user: UserReportWithMetadataInterface | UserInterface | null;\n }) {\n if (!!user) {\n history.push(\n getStartPath({\n persistQuerystring: !resetState\n })\n );\n\n e.persist();\n e.preventDefault();\n trackEvent({\n e,\n label: \"sidebar-user-click\",\n value: `clicked ${user.name}`\n });\n }\n }\n\n const { slackAvatar, name } = user;\n\n return (\n \n \n
    \n \n \n \n onClickUser({\n e,\n user,\n resetState: isOverviewPage || !!teamLead\n })\n }\n isTeamLead={false}\n data-testid={`${thisTestId}-user`}\n >\n \n {name}\n \n \n {!!teamLead ? (\n \n \n onClickUser({ e, user: teamLead, resetState: isOverviewPage })\n }\n isTeamLead={true}\n data-testid={`${thisTestId}-team-lead`}\n >\n \n {teamLead.name}\n \n \n ) : null}\n
    \n \n \n \n
    \n \n \n \n \n Uplevel Resources\n \n \n \n Get the most out of the product with advice from our team.\n \n \n \n \n\n {flags?.[\"settings-page\"] ? (\n \n \n \n {pageMetadata[pageIds.SETTINGS].title}\n \n \n ) : null}\n\n \n \n \n \n © {new Date().getFullYear()} | Privacy Policy\n \n
    \n
    \n );\n};\n\nexport default Sidebar;\n","import React, { ReactElement } from \"react\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { Redirect } from \"react-router-dom\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\nconst StartPage = (): ReactElement => {\n const { getOverviewPath, getTeamHomePath } = useUrlParams();\n const flags = useSelector((state: AppStateInterface) => state.flags);\n\n return (\n \n );\n};\n\nexport default StartPage;\n","export default __webpack_public_path__ + \"static/media/team.7e3bfa2a.png\";","import { merge } from \"lodash\";\n\nexport default ({ config = {}, theme }) => {\n return merge(\n {},\n {\n chart: {\n type: \"packedbubble\",\n style: {\n fontFamily: theme.fonts.subheader.name,\n fontSize: 15\n }\n },\n title: null,\n tooltip: {\n enabled: true,\n useHTML: true,\n backgroundColor: null,\n shadow: false,\n borderWidth: 0,\n borderRadius: 0\n },\n plotOptions: {\n series: {\n dataLabels: {\n enabled: true\n }\n }\n }\n },\n config\n );\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { get } from \"lodash\";\n\n// components\nimport Chart from \"../Chart/Chart\";\n\n// config\nimport generateConfig from \"./config\";\n\n// exporting for targeting in tests\nexport const ChartPackedBubble = ({\n className,\n testId = \"testId\",\n theme,\n ...props\n}) => {\n const thisTestId = `${testId}-packed-bubble-chart`;\n const chart = get(props, \"chart\", {});\n const config = get(props, \"chart.config\", {});\n\n return (\n \n );\n};\n\nChartPackedBubble.propTypes = {\n chart: PropTypes.shape({\n config: PropTypes.object.isRequired,\n id: PropTypes.string.isRequired\n }),\n testId: PropTypes.string.isRequired,\n theme: PropTypes.object.isRequired\n};\n\nexport default ChartPackedBubble;\n","import { getMeetingClassificationsTooltipHtml } from \"../../utils/chart\";\nimport { sortBy, uniqBy } from \"lodash\";\nimport { bgToFgColor } from \"../../utils/color\";\n\nconst config = ({ data = {}, selectedTeamMember = {}, theme }) => {\n const allClassifications = Object.values(data);\n const allValuesAreTheSame = uniqBy(allClassifications, \"value\").length === 1;\n const colors = theme.colors.chart.meetingClassifications;\n const series = [\n ...sortBy(allClassifications, \"key\").map(d => {\n const bg = colors[d.key];\n return {\n name: d.classificationName,\n clip: false,\n color: bg,\n dataLabels: {\n color: bgToFgColor(bg)\n },\n data: [d]\n };\n })\n ];\n return {\n chart: {\n style: {\n fontFamily: theme.fonts.primary.name\n }\n },\n title: null,\n tooltip: {\n formatter: function() {\n return getMeetingClassificationsTooltipHtml({\n ...this.point,\n ...selectedTeamMember\n });\n }\n },\n legend: {\n align: \"right\",\n enabled: true,\n itemMarginBottom: 5,\n itemMarginTop: 5,\n itemStyle: {\n fontSize: theme.fonts.primary.sizes.xs,\n fontWeight: theme.fonts.primary.weights.regular,\n textOverflow: undefined\n },\n itemWidth: 175,\n layout: \"vertical\",\n padding: 3,\n verticalAlign: \"top\"\n },\n plotOptions: {\n series: {\n dataLabels: {\n enabled: true,\n useHTML: true,\n allowOverlap: true,\n formatter: function() {\n const point = this.point;\n\n // radius was determined by finding width of largest non-wrapping text manually\n if (point.radius < 61) {\n return `
    ${point.value.toFixed(1)}%
    `;\n }\n return `
    ${\n point.classificationName\n }
    ${point.value.toFixed(\n 1\n )}%
    `;\n },\n style: {\n color: theme.colors.all.wolverine,\n textOutline: \"none\"\n }\n }\n },\n packedbubble: {\n animation: false,\n minSize: 35,\n maxSize: allValuesAreTheSame ? 100 : 200,\n draggable: false,\n layoutAlgorithm: {\n enableSimulation: false,\n gravitationalConstant: 0.02,\n maxIterations: 300,\n maxSpeed: 2\n },\n marker: {\n fillOpacity: 1,\n lineColor: theme.colors.border,\n lineWidth: 2\n }\n }\n },\n series\n };\n};\nexport default config;\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled, { withTheme } from \"styled-components/macro\";\nimport { isEmpty, omit } from \"lodash\";\n\n// components\nimport ChartPackedBubble from \"../ChartPackedBubble/ChartPackedBubble\";\n\n// config\nimport generateConfig from \"./config\";\n\n// styled components\nconst Container = styled(ChartPackedBubble)`\n width: 100%;\n\n & g {\n cursor: pointer;\n }\n\n & .highcharts-legend {\n & .highcharts-point {\n stroke-width: 0;\n }\n }\n\n & .marker {\n cursor: pointer;\n display: flex;\n flex-flow: column nowrap;\n align-content: center;\n\n & header {\n line-height: 1;\n order: 2;\n text-align: center;\n white-space: initial;\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin-top: 0.5rem;\n\n & span {\n margin: 0 auto;\n }\n }\n\n & .value {\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n font-size: 3rem;\n font-weight: ${props => props.theme.fonts.subheader.weights.bold};\n line-height: 1;\n text-align: center;\n order: 1;\n }\n }\n`;\n\n// exporting for targeting in tests\nexport const ChartMeetingClassifications = ({\n className,\n data = {},\n isFetchingData = false,\n onSelectClassificationId = () => {\n // do nothing\n },\n selectedTeamMember = {},\n testId = \"testId\",\n theme,\n override,\n ...props\n}) => {\n const thisTestId = `${testId}-meeting-classifications-chart`;\n const [config, setConfig] = useState(\n generateConfig({\n data: [],\n onSelectClassificationId,\n selectedTeamMember,\n theme\n })\n );\n\n const memoizedData = useMemo(() => {\n return JSON.stringify(omit(data, [\"NOT_A_MEETING\"]));\n }, [data, `${override?.title}${override?.overrideLabel}`]);\n const memoizedTheme = useMemo(() => JSON.stringify(theme), [theme]);\n const memoizedTeamMember = useMemo(() => JSON.stringify(selectedTeamMember), [\n selectedTeamMember\n ]);\n\n useEffect(() => {\n setConfig(\n generateConfig({\n data: JSON.parse(memoizedData),\n onSelectClassificationId,\n selectedTeamMember: JSON.parse(memoizedTeamMember),\n theme: JSON.parse(memoizedTheme)\n })\n );\n }, [memoizedData, memoizedTheme, memoizedTeamMember]);\n\n return (\n \n );\n};\n\nChartMeetingClassifications.propTypes = {\n data: PropTypes.object,\n isFetchingData: PropTypes.bool,\n onSelectClassificationId: PropTypes.func,\n selectedTeamMember: PropTypes.object,\n testId: PropTypes.string,\n theme: PropTypes.object.isRequired\n};\n\nexport default withTheme(ChartMeetingClassifications);\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Button from \"../Button/Button\";\nimport Icon from \"../Icon/Icon\";\n\n// styled components\nconst Container = styled.div`\n display: flex;\n padding: 0 5rem 5rem 3rem;\n`;\nconst IconWrapper = styled.div`\n flex: 0 0 15rem;\n text-align: center;\n && {\n padding-left: 2rem;\n padding-right: 6rem;\n }\n`;\nconst StyledIcon = styled(Icon)`\n font-size: 12rem;\n line-height: 1.3;\n`;\nconst TextWrapper = styled.div``;\nconst Header = styled.h1`\n font-family: ${props => props.theme.fonts.header.name}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.header.sizes.md};\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n letter-spacing: 0.1rem;\n margin-bottom: 2rem;\n text-transform: uppercase;\n`;\nconst StyledButton = styled(Button)`\n margin-top: 2rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n isSuccess: boolean;\n onClickConfirmation: (isConfirmationButton?: boolean) => void;\n onClickResumeEditing: () => void;\n testId?: string;\n};\n\nconst MeetingClassificationOverrideConfirmation = ({\n className,\n isSuccess,\n onClickConfirmation,\n onClickResumeEditing,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-meeting-classification-override-confirmation`;\n\n return (\n \n \n \n \n \n
    {isSuccess ? \"Super!\" : \"Yikes!\"}
    \n {isSuccess ? (\n

    \n Meeting type has been updated for your team. Deep work and meeting\n trends will reflect the change in tomorrow’s report.\n

    \n ) : (\n

    \n Well that’s not good. Something went wrong there. Please click\n the button below to try that again.\n

    \n )}\n\n \n isSuccess ? onClickConfirmation(true) : onClickResumeEditing()\n }\n testId={`${testId}-meeting-classification-override-confirmation-${\n isSuccess ? \"back-to-meetings\" : \"try-again\"\n }`}\n >\n {isSuccess ? \"Back to my meetings\" : \"Back to edit classification\"}\n \n
    \n
    \n );\n};\n\nexport default MeetingClassificationOverrideConfirmation;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// styled components\nconst Container = styled.span<{ measure: string }>`\n align-items: center;\n display: inline-flex;\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n\n &::before {\n background: ${props =>\n props.theme.colors.chart.meetingClassifications[props.measure]};\n border-radius: 50%;\n content: \"\";\n display: inline-block;\n height: 1.5rem;\n margin-right: 1rem;\n width: 1.5rem;\n flex: 0 0 1.5rem;\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n label: React.ReactNode;\n measure: string;\n testId?: string;\n};\n\nconst MeetingClassificationLabel = ({\n className,\n label,\n measure,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-meeting-classification-label`;\n return (\n \n {label}\n \n );\n};\n\nexport default MeetingClassificationLabel;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Dropdown from \"../Dropdown/Dropdown\";\nimport MeetingClassificationLabel from \"../MeetingClassificationLabel/MeetingClassificationLabel\";\n\n// constants\nimport meetingClassifications from \"../../constants/meetingClassifications.json\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { SelectOptionsInterface } from \"../../interfaces/controls\";\nimport { MeetingInterface } from \"../../interfaces/meeting\";\n\n// styled components\nconst Container = styled.div`\n padding: 0 2rem 3rem;\n\n @media (min-width: ${props => props.theme.breakpoints.sm}) {\n padding: 0 8rem 3rem;\n }\n`;\nconst Form = styled.form`\n max-width: 48rem;\n`;\nconst FormHeader = styled.header`\n margin-bottom: 3rem;\n`;\nconst Header = styled.h1`\n font-family: ${props => props.theme.fonts.header.name}, \"Helvetica Neue\",\n \"Aria\", sans-serif;\n font-size: ${props => props.theme.fonts.header.sizes.md};\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n margin: 0 0 2rem;\n padding: 0;\n`;\nconst Subheader = styled(Header)`\n font-size: ${props => props.theme.fonts.header.sizes.sm};\n margin: 0 0 1rem;\n`;\nconst Text = styled.p`\n margin-bottom: 2rem;\n`;\nconst StyledDropdown = styled(Dropdown)`\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n`;\nconst SubmitButton = styled.button`\n background: ${props => props.theme.colors.all.auroraTeal};\n border: 0;\n color: ${props => props.theme.colors.all.white};\n padding: 1rem 4rem;\n`;\nconst ButtonWrapper = styled.div`\n display: flex;\n justify-content: flex-end;\n margin-top: 4rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n onSubmit: ({\n title,\n overrideLabel\n }: {\n title: string;\n overrideLabel: string;\n }) => void;\n meeting: MeetingInterface;\n name: string;\n testId?: string;\n};\n\nconst MeetingClassificationOverrideForm = ({\n className,\n name,\n onSubmit,\n meeting,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-meeting-classification-override-form`;\n const { trackEvent } = useTracking();\n\n const [selectedClassification, setSelectedClassification] = useState(\n meeting.measure\n );\n\n function formatOptionLabel(data: SelectOptionsInterface) {\n return (\n \n );\n }\n function onSubmitClassification({\n classification,\n listName,\n title\n }: {\n classification: string;\n listName: string;\n title: string;\n }) {\n trackEvent({\n label: `${listName}-meeting-override`,\n value: `changed meeting ${title} to new type ${classification}`\n });\n onSubmit({\n title,\n overrideLabel: classification\n });\n }\n\n const currentClassification = meetingClassifications.find(\n option => option.value === selectedClassification\n );\n const options = meetingClassifications.map(c => {\n return {\n ...c,\n selected: c.value === currentClassification?.value\n };\n });\n\n return (\n \n
    \n \n
    Edit Your Meeting Classification
    \n Meeting title\n

    {meeting.title}

    \n
    \n \n Please choose the new classification that most closely matches your\n meeting type from the dropdown.\n \n o.selected)}\n formatOptionLabel={formatOptionLabel}\n label=\"Meeting classification\"\n onChange={(selected: SelectOptionsInterface) => {\n setSelectedClassification(selected.value);\n }}\n options={options}\n testId={testId}\n value={options.find(o => o.selected)}\n />\n \n ) => {\n e.preventDefault();\n onSubmitClassification({\n classification: selectedClassification,\n listName: name,\n title: meeting.title\n });\n }}\n data-testid={`${testId}-submit-updated-classification-button`}\n >\n Let’s go\n \n \n \n
    \n );\n};\n\nexport default MeetingClassificationOverrideForm;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\n\n// styled components\nconst StyledPipedList = styled.ul`\n align-items: center;\n display: flex;\n list-style-type: none;\n`;\nconst StyledListItem = styled.li`\n flex: 0 0 auto;\n\n & + & {\n border-left-width: 0.2rem;\n border-left-style: solid;\n margin-left: 1em;\n padding-left: 1em;\n }\n`;\n\nconst PipedList = ({ list, testId, ...otherProps }) => {\n if (!list || !testId) {\n return null;\n }\n\n return (\n \n {list.map((listItem, index) => (\n \n {listItem}\n \n ))}\n \n );\n};\n\nPipedList.propTypes = {\n list: PropTypes.array.isRequired,\n testId: PropTypes.string.isRequired\n};\nexport default PipedList;\n","import React, { useMemo } from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty, sortBy } from \"lodash\";\n\n// components\nimport ContentWithIcon from \"../ContentWithIcon/ContentWithIcon\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport MeetingClassificationLabel from \"../MeetingClassificationLabel/MeetingClassificationLabel\";\nimport PipedList from \"../PipedList/PipedList\";\nimport ScrollContainerWithReset from \"../ScrollContainerWithReset/ScrollContainerWithReset\";\nimport Spinner from \"../Spinner/Spinner\";\nimport Table from \"../Table/Table\";\nimport TimeRange from \"../TimeRange/TimeRange\";\n\n// utils\nimport { formatTimestamp } from \"../../utils/date\";\n\n// styled components\nconst ScrollContainer = styled(ScrollContainerWithReset)`\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n`;\nconst SpinnerWrapper = styled.div`\n align-items: center;\n display: flex;\n flex-flow: column nowrap;\n justify-content: center;\n min-height: 50rem;\n width: 100%;\n`;\nconst MeetingTable = styled(Table)`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n width: 100%;\n\n & th {\n background: ${props => props.theme.colors.all.white};\n font-size: 1.1rem;\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n padding-bottom: 1rem;\n position: sticky;\n top: 0;\n }\n\n & td {\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n vertical-align: middle;\n\n &.classificationName {\n width: 25%;\n }\n &.title {\n width: 30%;\n }\n }\n`;\nconst StyledEmptyState = styled(EmptyState)`\n text-transform: none;\n`;\nconst EditButton = styled.button`\n background: none;\n border: 0;\n display: flex;\n text-align: left;\n width: 100%;\n`;\nconst LabelWithIcon = styled(ContentWithIcon)`\n display: flex;\n justify-content: space-between;\n width: 100%;\n\n & > div {\n order: 1;\n margin-right: 1rem;\n }\n & > span {\n order: 2;\n }\n`;\n\nexport const MeetingList = ({\n className,\n isEditing,\n list = [],\n onClickEdit,\n testId = \"testId\"\n}) => {\n const thisTestId = `${testId}-meeting-classifications-meetings-list`;\n\n // memoing these to see if it will help with perf\n const { data, columns } = useMemo(() => {\n return {\n data: sortBy(\n list.map(l => ({\n ...l,\n // constructing a string version for the accessor for proper sorting\n dateAndTime: `${formatTimestamp({\n format: \"M/DD\",\n timestamp: l.timerange.start\n })} | ${formatTimestamp({\n format: \"HH:mm a\",\n timestamp: l.timerange.start\n })}-${formatTimestamp({\n format: \"HH:mm a\",\n timestamp: l.timerange.end\n })}`\n })),\n [\"measure\", \"dateAndTime\"]\n ),\n columns: [\n {\n accessor: \"classificationName\",\n Header: \"Classification\",\n Cell: ({ cell }) => {\n const label = (\n \n );\n return label;\n // todo: re-enable this when the backend is fixed to support overrides\n // return (\n // onClickEdit(cell.row.original)}>\n // \n // \n // );\n },\n className: \"classificationName\"\n },\n {\n accessor: \"title\",\n Cell: ({ cell }) => (\n {cell.value}\n ),\n Header: \"Title\",\n className: \"title\"\n },\n {\n accessor: \"dateAndTime\",\n Header: \"Date/Time\",\n Cell: ({ cell }) => {\n const { timerange } = cell.row.original;\n return (\n \n ]}\n testId={thisTestId}\n />\n );\n },\n className: \"dateAndTime\"\n },\n {\n accessor: \"meetingOwner\",\n Cell: ({ cell }) => (\n {cell.value}\n ),\n Header: \"Owner\",\n className: \"owner\"\n }\n ]\n };\n }, [list, onClickEdit, thisTestId]);\n\n if (isEditing) {\n return (\n \n \n \n );\n }\n\n if (isEmpty(list)) {\n return (\n \n It looks like we don’t have data for you.{\" \"}\n
    Contact us if this is a\n mistake and we’ll get this fixed.\n \n }\n header=\"Uh oh.\"\n testId={thisTestId}\n />\n );\n }\n\n return (\n \n \n \n );\n};\n\nMeetingList.propTypes = {\n className: PropTypes.string,\n isEditing: PropTypes.bool.isRequired,\n list: PropTypes.array,\n onClickEdit: PropTypes.func.isRequired,\n testId: PropTypes.string\n};\n\nexport default MeetingList;\n","import React, { useEffect, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled, { withTheme } from \"styled-components/macro\";\nimport { isNull } from \"lodash\";\n\n// components\nimport MeetingClassificationOverrideConfirmation from \"../MeetingClassificationOverrideConfirmation/MeetingClassificationOverrideConfirmation\";\nimport MeetingClassificationOverrideForm from \"../MeetingClassificationOverrideForm/MeetingClassificationOverrideForm\";\nimport MeetingList from \"../MeetingList/MeetingList\";\nimport Modal from \"../Modal/Modal\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// styled components\nconst Container = styled.div`\n border-top: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.storm}`};\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n padding-top: 1rem;\n`;\nconst StyledMeetingList = styled(MeetingList)`\n max-height: 50rem;\n`;\n\nexport const MeetingListSummary = ({\n className,\n error,\n meetings = [],\n testId = \"testId\",\n handleOverride,\n theme,\n name\n}) => {\n const thisTestId = `${testId}-meeting-list-summary`;\n const { trackEvent } = useTracking();\n const [meetingToEdit, setMeetingToEdit] = useState(null);\n const [modalDisplay, setModalDisplay] = useState(null);\n const [modalIsVisible, setModalIsVisible] = useState(false);\n // slightly jank comparator for useEffect dependency array\n const meetingsStringified = JSON.stringify(meetings);\n\n useEffect(() => {\n if (!!error) {\n setModalDisplay(\"error\");\n } else {\n setModalDisplay(\"success\");\n }\n }, [error, meetingsStringified]);\n\n function onSubmitOverride(overrideParams) {\n handleOverride(overrideParams);\n }\n\n function onClickResumeEditing() {\n setModalDisplay(\"form\");\n trackEvent({\n label: `${name}-meeting-classification-override__resume-editing`,\n value: \"clicked\"\n });\n }\n\n function onCancelModal(isConfirmationButton) {\n setModalIsVisible(false);\n setModalDisplay(null);\n setMeetingToEdit(null);\n trackEvent({\n label: `${name}-meeting-classification-override__${\n !!isConfirmationButton ? \"confirmation-button\" : `modal-x-close`\n }`,\n value: \"clicked\"\n });\n }\n\n function onClickEdit(meeting, listName) {\n setModalIsVisible(true);\n setModalDisplay(\"form\");\n setMeetingToEdit(meeting);\n trackEvent({\n label: `${listName}-meeting-classification-override__meeting-name`,\n value: `${meeting.title} clicked`\n });\n }\n\n let modalContent;\n if (modalDisplay === \"form\") {\n modalContent = (\n \n );\n } else {\n modalContent = (\n \n );\n }\n\n return (\n \n {modalIsVisible ? (\n \n ) : null}\n onClickEdit(meeting, name)}\n />\n \n );\n};\n\nMeetingListSummary.propTypes = {\n className: PropTypes.string,\n meetings: PropTypes.array,\n name: PropTypes.string.isRequired,\n onCancelOverrideSuccessMessageTrigger: PropTypes.func,\n overrideOption: PropTypes.object,\n shouldTriggerOverrideSuccessMessage: PropTypes.bool,\n testId: PropTypes.string.isRequired\n};\n\nexport default withTheme(MeetingListSummary);\n","import { get, isEmpty, isNumber, mapValues, sum } from \"lodash\";\nimport meetingClassifications from \"../../constants/meetingClassifications.json\";\n\nconst mapUserValues = ({ current, previous, allMeetings = [] }) => {\n const currentTotalHours = sum(Object.values(current));\n const previousTotalHours = sum(Object.values(previous));\n\n return mapValues(current, (value, key) => {\n let valuePercent;\n if (isNumber(currentTotalHours) && isNumber(value)) {\n valuePercent = !!currentTotalHours\n ? (value / currentTotalHours) * 100\n : 0;\n }\n\n let deltaPercent;\n if (\n isNumber(previousTotalHours) &&\n isNumber(valuePercent) &&\n isNumber(previous[key])\n ) {\n deltaPercent = valuePercent - (previous[key] / previousTotalHours) * 100;\n }\n\n const classificationName = get(\n meetingClassifications.find(c => c.value === key),\n \"label\",\n \"Unknown classification\"\n );\n return {\n key,\n classificationName,\n value: isNumber(valuePercent) ? valuePercent : null,\n totalHours: currentTotalHours,\n valueHours: value,\n deltaPercent,\n meetings: !isEmpty(allMeetings)\n ? allMeetings\n .filter(m => m.measure === key)\n .map(m => {\n return {\n ...m,\n classificationName,\n timerange: {\n end: m.endTime,\n start: m.startTime\n }\n };\n })\n : []\n };\n });\n};\n\nexport default (current, previous) => {\n return {\n ...current,\n overall: {\n ...current.overall,\n mappedValues: mapUserValues({\n current: current.overall.values,\n previous: previous.overall.values\n })\n },\n resultsByUser: current.resultsByUser.map((r, index) => {\n return {\n ...r,\n mappedValues: mapUserValues({\n current: r.values,\n previous:\n previous.resultsByUser[index] !== undefined\n ? previous.resultsByUser[index].values\n : {},\n allMeetings: r.metaData\n })\n };\n })\n };\n};\n","// utils\nimport { formatTimestamp } from \"../../utils/date\";\nimport {\n requestMeetingClassifications,\n requestMeetingClassifications_privateic\n} from \"../../utils/meeting-classifications\";\n\nexport default async function fetchMeetingClassificationsData(params = {}) {\n const {\n accessToken,\n endDate,\n startDate,\n tenantId,\n user,\n override,\n team,\n canViewFullTeam\n } = params;\n\n if (!canViewFullTeam) {\n return await requestMeetingClassifications_privateic({\n accessToken,\n tenantId,\n params: {\n tenantId: parseInt(tenantId, 10),\n startDate: formatTimestamp({\n format: \"YYYY-MM-DD\",\n timestamp: startDate\n }),\n endDate: formatTimestamp({ format: \"YYYY-MM-DD\", timestamp: endDate }),\n userEmail: user.email,\n override\n }\n });\n } else {\n return await requestMeetingClassifications({\n accessToken,\n tenantId,\n params: {\n tenantId,\n startDate,\n endDate,\n users: team.map(t => t.email),\n override\n }\n });\n }\n}\n","import { captureException } from \"@sentry/react\";\nimport api from \"./api\";\n\nexport const requestMeetingClassifications = async ({\n accessToken,\n params,\n tenantId\n}) => {\n if (\n !(\"users\" in params) ||\n !(\"startDate\" in params) ||\n !(\"endDate\" in params) ||\n !Array.isArray(params.users)\n ) {\n return captureException(\n `Expected params with keys of \"userIds\" as value type String[], \"startDate\" as String, and \"endDate\" as value type String, but received ${JSON.stringify(\n params\n )}`\n );\n }\n const response = await api.post(`/${tenantId}/meetingclassifier`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n\nexport const requestMeetingClassifications_privateic = async ({\n accessToken,\n params,\n tenantId\n}) => {\n if (\n !(\"startDate\" in params) ||\n !(\"endDate\" in params) ||\n !(\"userEmail\" in params)\n ) {\n return captureException(\n `Expected params with keys of \"userEmail\", \"startDate\" and \"endDate\" as String, but received ${JSON.stringify(\n params\n )}`\n );\n }\n const response = await api.post(\n `/${tenantId}/private-ic/meetingclassifier`,\n params,\n {\n headers: { Authorization: `Bearer ${accessToken}` }\n }\n );\n return response.data;\n};\n","import { useEffect, useState } from \"react\";\nimport moment from \"moment\";\nimport { isNull } from \"lodash\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\n\n// utils\nimport parseData from \"./parser\";\nimport dataFetcher from \"./fetchMeetingClassificationsData\";\nimport { getDateWeekBefore } from \"../../utils/date\";\nimport { captureException, withScope } from \"@sentry/react\";\n\nexport const useBackingData = (\n accessToken,\n tenantId,\n teamMembers,\n user,\n override,\n timerange\n) => {\n const [data, _setData] = useState();\n const [isFetchingData, _setIsFetchingData] = useState(false);\n const [error, _setError] = useState(null);\n const flags = useSelector(state => state.flags);\n // TODO: confirm this is the flag result for the roles set and create flag for more generic use\n const canViewFullTeam = flags?.[\"transparent-data-for-peers\"];\n const endDate = !!timerange\n ? timerange.end\n : moment()\n .endOf(\"week\")\n .format();\n const startDate = !!timerange\n ? timerange.start\n : moment()\n .startOf(\"week\")\n .format();\n\n // effect to fetch data when the request props change\n useEffect(() => {\n (async () => {\n if (!!accessToken && !!tenantId && !!teamMembers.length) {\n let params = {\n accessToken,\n tenantId,\n startDate,\n endDate,\n user,\n team: teamMembers,\n canViewFullTeam\n };\n\n try {\n _setIsFetchingData(true);\n\n if (!isNull(override)) {\n params = { ...params, override };\n }\n\n const responseDataCurrent = await dataFetcher(params);\n const responseDataPrevious = await dataFetcher({\n ...params,\n startDate: getDateWeekBefore(startDate),\n endDate: getDateWeekBefore(endDate)\n });\n const parsedData = parseData(\n responseDataCurrent,\n responseDataPrevious\n );\n _setData(parsedData);\n _setIsFetchingData(false);\n } catch (e) {\n _setError(e);\n _setData(null);\n _setIsFetchingData(false);\n withScope(scope => {\n scope.setContext(\"request-meeting-classifications\", params);\n captureException(e);\n });\n }\n }\n _setIsFetchingData(false);\n })();\n }, [\n accessToken,\n tenantId,\n user,\n teamMembers,\n endDate,\n startDate,\n override,\n canViewFullTeam\n ]);\n\n return [data, isFetchingData, error];\n};\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport HtmlText from \"../HtmlText/HtmlText\";\nimport Icon from \"../Icon/Icon\";\nimport InfoBook from \"../InfoBook/InfoBook\";\nimport InfoPopup from \"../InfoPopup/InfoPopup\";\n\n// constants\nimport informationText from \"../../constants/peopleHealthUnderstandability.json\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { SelectablePeopleMetrics } from \"../../interfaces/team-deep-dive\";\nimport { healthFactorsMetadata } from \"../../constants/constants\";\n\nconst Container = styled.div`\n display: flex;\n`;\nconst PopupContent = styled.div`\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n`;\nconst PopupHeader = styled.h4`\n font-family: ${props => props.theme.fonts.header.name}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n margin: 0;\n`;\nconst StyledInfoPopup = styled(InfoPopup)`\n margin-left: 0.8rem;\n`;\nconst Book = styled(InfoBook)`\n margin-left: 0.8rem;\n`;\nconst LinkIcon = styled(Icon)`\n color: inherit;\n margin-right: 0.5rem;\n`;\nconst LearnLink = styled.a`\n align-items: center;\n display: flex;\n && {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n text-decoration: none;\n\n & ${LinkIcon} {\n color: inherit;\n }\n }\n`;\n\ntype Props = {\n className?: string;\n testId?: string;\n selectedMetric:\n | SelectablePeopleMetrics\n | \"MEETING_DISTRIBUTION\"\n | \"MEETING_LENGTH\";\n canSeeAlwaysOnData?: boolean;\n};\n\nexport const InfoPopups = ({\n className,\n testId = \"testId\",\n selectedMetric,\n canSeeAlwaysOnData\n}: Props) => {\n const thisTestId = `${testId}-info-popups`;\n const { trackEvent } = useTracking();\n function onClickLearnLink(e: React.MouseEvent) {\n trackEvent({\n e,\n label: `${testId}-learn-more-link`,\n value: \"link clicked\"\n });\n }\n\n const isMeetingPopup =\n selectedMetric === \"MEETING_DISTRIBUTION\" ||\n selectedMetric === \"MEETING_LENGTH\";\n return (\n \n \n {isMeetingPopup\n ? `Who can see this chart?`\n : `Why ${\n selectedMetric === \"CHAT_INTERRUPTIONS\" ? \"are\" : \"is\"\n } ${healthFactorsMetadata[selectedMetric]?.title} important?`}\n \n }\n content={\n \n \n {informationText[selectedMetric].why.link.enabled && (\n \n \n {`Read more about ${informationText[selectedMetric].why.link.text}`}\n \n )}\n \n }\n name={selectedMetric}\n testId={testId}\n />\n \n \n );\n};\n\nexport default InfoPopups;\n","import React, { useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\nimport { flattenDeep, get, isEmpty, isNil } from \"lodash\";\nimport teamAverageImage from \"../../images/team.png\";\n\n// components\nimport ChartMeetingClassifications from \"../ChartMeetingClassifications/ChartMeetingClassifications\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport MeetingListSummary from \"../MeetingListSummary/MeetingListSummary\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { useBackingData } from \"./useBackingData\";\n\n// utils\n\n// constants\nimport { TEAM_AVERAGE_ID } from \"../../constants/components\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\nimport InfoPopups from \"../InfoPopups/InfoPopups\";\nimport { meetingInsightsMeasurePathParams } from \"../../constants/constants\";\n\n// styled components\nconst Figure = styled.figure`\n min-height: 40rem;\n`;\nconst Caption = styled.figcaption`\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst Title = styled.div`\n display: flex;\n`;\n\nexport const MeetingClassificationsChartWrapper = ({\n className = \"\",\n testId = \"testId\",\n ...props\n}) => {\n const { accessToken, tenantId, user, timerange } = props;\n const { urlParams, teamDeepDiveParams } = useUrlParams();\n const teamMembers = urlParams.team?.teamMembers;\n const selectedUserValue = urlParams.selectedUser || \"team\";\n const selectedUser =\n urlParams.selectedUser && selectedUserValue !== \"team\"\n ? teamMembers.find(t => t.email === selectedUserValue)\n : {\n id: TEAM_AVERAGE_ID,\n name: \"Team Average\",\n slackAvatar: teamAverageImage\n };\n\n const thisTestId = `${testId}-meeting-classifications-chart-wrapper`;\n const [overrideOption, setOverrideOption] = useState(null);\n\n const [meetingClassificationsData, isFetchingData, error] = useBackingData(\n accessToken,\n tenantId,\n teamMembers,\n user,\n overrideOption,\n timerange\n );\n\n function handleOverride(newValue) {\n setOverrideOption(newValue);\n }\n\n if (isFetchingData || isNil(meetingClassificationsData)) {\n return (\n \n It looks like we don’t have data for this team.\n Contact us if this\n is a mistake and we’ll get this fixed.\n \n }\n header=\"Uh oh.\"\n testId={thisTestId}\n />\n }\n />\n );\n }\n\n let selfDataMeetings = [];\n let selfData = meetingClassificationsData.resultsByUser.find(\n r => r.userId === user.id\n );\n if (!isEmpty(selfData)) {\n selfDataMeetings = flattenDeep(\n Object.values(get(selfData, \"mappedValues\", {})).map(\n classification => classification.meetings\n )\n );\n }\n const selectedUserData =\n selectedUserValue === \"team\"\n ? meetingClassificationsData.overall\n : meetingClassificationsData.resultsByUser.find(\n r => selectedUserValue === r.user\n ) ||\n meetingClassificationsData.resultsByUser.find(\n r => r.userId === user.id\n );\n\n return (\n \n
    \n
    \n \n \n <Caption>Meeting Distribution</Caption>\n <InfoPopups selectedMetric={teamDeepDiveParams.selectedMetric} />\n \n
    \n {!!selfDataMeetings.length ? (\n \n ) : null}\n
    \n
    \n );\n};\n\nMeetingClassificationsChartWrapper.propTypes = {\n className: PropTypes.string,\n testId: PropTypes.string,\n user: PropTypes.object.isRequired,\n timerange: PropTypes.object\n};\nexport default MeetingClassificationsChartWrapper;\n","import moment from \"moment\";\nimport { compact, isEmpty, isEqual, max } from \"lodash\";\nimport { momentUnitTypes } from \"../../constants/constants\";\n\n// utils\nimport {\n getMeetingTimeTooltip,\n getAdjustedTooltipPosition\n} from \"../../utils/chart\";\nimport { formatTimestamp } from \"../../utils/date\";\n\nconst config = ({\n data,\n onClickSeries,\n selectedDate,\n theme,\n selectedTeamMember,\n selectedUser,\n canViewTeam\n}) => {\n const isViewingTeam = selectedUser === \"team\";\n const events = {\n select: function(event) {\n event.preventDefault();\n const { target } = event;\n onClickSeries(target.category);\n },\n unselect: function(event) {\n event.preventDefault();\n onClickSeries(null);\n }\n };\n\n const teamData = data.teamAverages.map((t, index) => ({\n y: t.meetingTime,\n x: index,\n selected: isEqual(selectedDate, t.date)\n }));\n\n const individualData = data.userValues.map((t, index) => ({\n y: t.meetingTime,\n x: index,\n selected: isEqual(selectedDate, t.date)\n }));\n\n const teamConfig = {\n allowPointSelect: true,\n cursor: \"pointer\",\n name: \"Team Time in Meetings per day\",\n type: isViewingTeam ? \"line\" : \"column\",\n point: {\n events\n },\n data: teamData,\n id: \"team\"\n };\n\n const individualConfig = {\n allowPointSelect: true,\n cursor: \"pointer\",\n name: `${selectedTeamMember?.name} Time in Meetings per day`,\n type: \"line\",\n point: {\n events\n },\n data: individualData,\n id: \"team-member\"\n };\n\n return {\n chart: {\n style: {\n fontFamily: theme.fonts.primary.name,\n fontSize: 15\n }\n },\n title: {\n text: \"\"\n },\n xAxis: [\n {\n categories: data.userValues.map(u => u.date),\n tickmarkPlacement: \"on\",\n lineColor: theme.colors.all.wolverine,\n lineWidth: 2,\n labels: {\n y: 24,\n formatter: function() {\n // the axis should display Monday-Friday ranges, instead of Sunday-Saturday as reflected by\n // the actual data, which has the weekend meetings already stripped out.\n return `${formatTimestamp({\n format: \"M/D\",\n timestamp: this.value\n })}`;\n },\n style: {\n fontFamily: `${theme.fonts.subheader.name},monospace`,\n fontWeight: theme.fonts.subheader.weights.bold\n }\n }\n }\n ],\n yAxis: [\n {\n gridLineWidth: 2,\n min: 0,\n max: 9,\n title: {\n enabled: false\n },\n tickInterval: 2,\n labels: {\n format: `{value} hrs`,\n style: {\n fontFamily: `${theme.fonts.subheader.name},monospace`,\n fontWeight: theme.fonts.subheader.weights.bold\n }\n }\n }\n ],\n legend: {\n align: \"right\",\n enabled: true,\n itemDistance: 30,\n itemStyle: {\n fontWeight: theme.fonts.primary.weights.book\n },\n layout: \"horizontal\",\n verticalAlign: \"bottom\",\n symbolHeight: 8,\n symbolWidth: 8,\n symbolPadding: 8,\n // a bit odd, but radius here implicitly applies to just column type series and not line series\n symbolRadius: 0\n },\n tooltip: {\n enabled: true,\n useHTML: true,\n backgroundColor: null,\n shadow: false,\n borderWidth: 0,\n borderRadius: 0,\n outside: true,\n positioner: function(w, h, point) {\n return getAdjustedTooltipPosition({\n currentPosition: this.getPosition(w, h, point),\n windowScroll: window.scrollY\n });\n },\n formatter: function() {\n return getMeetingTimeTooltip(this.point, selectedTeamMember);\n }\n },\n plotOptions: {\n line: {\n connectNulls: true,\n lineColor: theme.colors.all.nightcrawler,\n marker: {\n enabled: true,\n symbol: \"circle\",\n fillColor: theme.colors.all.nightcrawler,\n lineColor: theme.colors.all.nightcrawler,\n states: {\n select: {\n fillColor: theme.colors.all.nightcrawler,\n lineColor: theme.colors.all.nightcrawler\n }\n }\n }\n },\n column: {\n borderColor: theme.colors.all.storm,\n maxPointWidth: 20,\n color: theme.colors.all.storm,\n states: {\n select: {\n color: theme.colors.all.storm,\n borderColor: theme.colors.all.storm\n }\n }\n }\n },\n series: isViewingTeam\n ? [teamConfig]\n : canViewTeam\n ? [teamConfig, individualConfig]\n : [individualConfig]\n };\n};\nexport default config;\n","import React, { useMemo } from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled, { withTheme } from \"styled-components/macro\";\n\n// components\nimport Chart from \"../Chart/Chart\";\n\n// config\nimport generateConfig from \"./config\";\nimport { useSelector } from \"react-redux\";\n\n// styled components\nconst StyledChart = styled(Chart)`\n & .axisTitle {\n text-transform: uppercase;\n font-size: ${props => props.theme.fonts.subheader.sizes.xs};\n }\n`;\n\n// exporting for targeting in tests\nexport const ChartMeetingTime = ({\n className,\n data = {},\n isFetchingData = false,\n onClickSeries = () => {\n // do nothing\n },\n selectedDate,\n testId = \"testId\",\n theme,\n user,\n selectedTeamMember,\n selectedUser,\n canViewTeam = true\n}) => {\n const thisTestId = `${testId}-meeting-time-chart`;\n const configProps = useMemo(() => {\n return {\n data,\n onClickSeries,\n selectedDate,\n theme,\n selectedTeamMember,\n selectedUser,\n canViewTeam\n };\n }, [\n data,\n onClickSeries,\n selectedDate,\n theme,\n selectedTeamMember,\n selectedUser,\n canViewTeam\n ]);\n\n return (\n \n );\n};\n\nChartMeetingTime.propTypes = {\n data: PropTypes.object,\n isFetchingData: PropTypes.bool,\n testId: PropTypes.string,\n theme: PropTypes.object.isRequired\n};\n\nexport default withTheme(ChartMeetingTime);\n","import api from \"./api\";\n\n// typescript props\ntype BaseParams = {\n startDate: string;\n endDate: string;\n override?: { title: string; overrideLabel: string };\n};\n\ntype MeetingTimeParams = {\n accessToken: string;\n tenantId: number;\n params: BaseParams & {\n selectedUser: string;\n users: Array;\n };\n};\n\ntype MeetingTimePrivateIcParams = {\n accessToken: string;\n tenantId: number;\n params: BaseParams & {\n tenantId: number;\n userEmail: string;\n };\n};\n\nexport const requestMeetingTime_privateic = async ({\n accessToken,\n params,\n tenantId\n}: MeetingTimePrivateIcParams): Promise => {\n const response = await api.post(\n `/${tenantId}/private-ic/meetingtime`,\n params,\n {\n headers: { Authorization: `Bearer ${accessToken}` }\n }\n );\n return response.data;\n};\n\nexport const requestMeetingTime = async ({\n accessToken,\n params,\n tenantId\n}: MeetingTimeParams): Promise => {\n const response = await api.post(`/${tenantId}/meetingtime`, params, {\n headers: { Authorization: `Bearer ${accessToken}` }\n });\n return response.data;\n};\n","import moment from \"moment\";\n\n// constants\nimport { momentUnitTypes } from \"../constants/constants\";\n\n// hooks\nimport { useUrlParams } from \"./useUrlParams\";\nimport { useQuery } from \"react-query\";\nimport { useSelector } from \"react-redux\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport { formatTimestamp } from \"../utils/date\";\nimport {\n requestMeetingTime,\n requestMeetingTime_privateic\n} from \"../utils/meeting-time\";\nimport { UserReportWithMetadataInterface } from \"../interfaces/user\";\n\nexport const useMeetingLengthData = ({\n canRequest = true,\n canViewTeamData = true,\n override,\n selectedUser,\n teamMembers\n}: {\n canRequest: boolean;\n canViewTeamData: boolean;\n override: { title: string; overrideLabel: string } | null;\n selectedUser: string;\n teamMembers: Array;\n}) => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n\n const { urlParams } = useUrlParams();\n const startDate = urlParams.startDate;\n // adding a day to make end date inclusive\n const endDate = urlParams.endDate;\n let params: {\n startDate: string;\n endDate: string;\n override?: { title: string; overrideLabel: string };\n } = {\n startDate,\n endDate\n };\n if (!!override) {\n params = { ...params, override };\n }\n\n return useQuery(\n [\n \"meeting-length\",\n { startDate, endDate, teamMembers, selectedUser, override }\n ],\n () => {\n if (canViewTeamData) {\n return requestMeetingTime({\n accessToken,\n tenantId,\n params: {\n ...params,\n selectedUser,\n users: teamMembers.map(t => t.email)\n }\n });\n } else {\n return requestMeetingTime_privateic({\n accessToken,\n tenantId,\n params: {\n ...params,\n tenantId,\n startDate: formatTimestamp({\n format: \"YYYY-MM-DD\",\n timestamp: params.startDate\n }),\n endDate: formatTimestamp({\n format: \"YYYY-MM-DD\",\n timestamp: moment(params.endDate).add(1, momentUnitTypes.DAYS)\n }),\n userEmail: selectedUser\n }\n });\n }\n },\n {\n enabled:\n !!accessToken &&\n !!tenantId &&\n !!selectedUser &&\n !!teamMembers?.length &&\n canRequest\n }\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled from \"styled-components/macro\";\nimport { flatten, get, isEmpty, isUndefined } from \"lodash\";\n\n// components\nimport ChartMeetingTime from \"../ChartMeetingTime/ChartMeetingTime\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport MeetingListSummary from \"../MeetingListSummary/MeetingListSummary\";\n\n// constants\nimport meetingClassifications from \"../../constants/meetingClassifications.json\";\n\n// utils\nimport { useMeetingLengthData } from \"../../hooks/useMeetingLengthData\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { useSelector } from \"react-redux\";\nimport ChartMeetingClassifications from \"../ChartMeetingClassifications/ChartMeetingClassifications\";\nimport InfoPopups from \"../InfoPopups/InfoPopups\";\n\n// styled components\nconst Figure = styled.figure`\n width: 100%;\n`;\nconst Caption = styled.figcaption`\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst Title = styled.div`\n display: flex;\n`;\n\nexport const MeetingTimeChartWrapper = ({\n className = \"\",\n selectedUser,\n testId = \"testId\",\n user\n}) => {\n const thisTestId = `${testId}-meeting-time-chart-wrapper`;\n const [selectedDate, setSelectedDate] = useState(null);\n const [overrideOption, setOverrideOption] = useState(null);\n const flags = useSelector(state => state.flags);\n const canViewTeamData = flags?.[\"transparent-data-for-peers\"];\n\n const { urlParams, teamDeepDiveParams } = useUrlParams();\n const teamMembers = urlParams.team?.teamMembers;\n const selectedTeamMember = teamMembers?.find(t => t.email === selectedUser);\n\n const {\n data: meetingLengthData,\n isLoading: isFetchingData,\n isError\n } = useMeetingLengthData({\n canViewTeamData,\n override: overrideOption,\n selectedUser,\n teamMembers\n });\n\n function handleOverride(newValue) {\n setOverrideOption(newValue);\n }\n\n // memoing this guy in case creating the empty array in the component here\n // was causing unnecessary rerenders\n const meetingTimeList = useMemo(() => {\n if (isEmpty(meetingLengthData)) {\n return [];\n }\n return (selectedDate\n ? meetingLengthData.userValues.find(m => m.date === selectedDate).metadata\n : flatten(meetingLengthData.userValues.map(r => r.metadata))\n ).map(m => ({\n ...m,\n classificationName: get(\n meetingClassifications.find(c => c.value === m.measure),\n \"label\",\n \"Unknown classification\"\n ),\n timerange: {\n end: m.endTime,\n start: m.startTime\n }\n }));\n }, [meetingLengthData, selectedDate]);\n\n return (\n
    \n
    \n \n It looks like we don’t have data for you.{\" \"}\n Contact us if\n this is a mistake and we’ll get this fixed.\n \n }\n header=\"Uh oh.\"\n testId={thisTestId}\n />\n }\n content={\n \n }\n testId={thisTestId}\n />\n \n <Caption\n className={!!meetingTimeList.length ? null : \"visuallyHidden\"}\n >\n Meeting Length\n </Caption>\n <InfoPopups selectedMetric={teamDeepDiveParams.selectedMetric} />\n \n
    \n {!!meetingTimeList.length ? (\n \n ) : null}\n
    \n );\n};\n\nMeetingTimeChartWrapper.propTypes = {\n className: PropTypes.string,\n testId: PropTypes.string,\n user: PropTypes.object.isRequired\n};\nexport default MeetingTimeChartWrapper;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { Route, Switch, useLocation } from \"react-router-dom\";\n\n// components\nimport MeetingClassificationsChartWrapper from \"../MeetingClassificationsChartWrapper/MeetingClassificationsChartWrapper\";\nimport MeetingTimeChartWrapper from \"../MeetingTimeChartWrapper/MeetingTimeChartWrapper\";\nimport RouteLinkTabs from \"../RouteLinkTabs/RouteLinkTabs\";\n\n// constants\nimport {\n teamDeepDiveSections,\n meetingInsightsMeasureLabels,\n meetingInsightsMeasurePathParams,\n pageIds\n} from \"../../constants/constants\";\n\n// hooks\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { omit } from \"lodash\";\n\n// styled components\nconst MeetingInsightsTabs = styled(RouteLinkTabs)`\n margin: ${props => props.theme.grid.gap} 0;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst MeetingInsights = ({\n className,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-meeting-insights`;\n const location = useLocation();\n const { teamDeepDiveParams, getTeamDeepDivePath, urlParams } = useUrlParams();\n const selectedUser = teamDeepDiveParams.selectedUser;\n const selectedMetric =\n meetingInsightsMeasurePathParams[teamDeepDiveParams.selectedMetric];\n const user = useSelector((state: AppStateInterface) => state.user);\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const canViewMeetingLengthTab = flags?.[\"team-deep-dive-meeting-length\"];\n\n const displayParams = canViewMeetingLengthTab\n ? meetingInsightsMeasurePathParams\n : omit(meetingInsightsMeasurePathParams, [\"MEETING_LENGTH\"]);\n const tabs = Object.values(displayParams).map(metric => {\n return {\n id: metric,\n path: getTeamDeepDivePath({\n selectedSection: teamDeepDiveSections.MEETING_INSIGHTS,\n selectedMetric: metric\n }),\n title: meetingInsightsMeasureLabels[metric]\n };\n });\n\n return (\n
    \n \n \n {canViewMeetingLengthTab ? (\n \n \n \n ) : null}\n \n \n \n \n
    \n );\n};\n\nexport default MeetingInsights;\n","export const alwaysOnRiskTypes = [\"NORMAL\", \"ABOVE_NORMAL\", \"HIGH\"].reduce(\n (result, key) => {\n result[key] = key;\n return result;\n },\n {}\n);\n","import moment from \"moment\";\nimport { DefaultTheme } from \"styled-components/macro\";\nimport {\n flatten,\n toPairs,\n uniq,\n sum,\n sumBy,\n capitalize,\n partition,\n startCase,\n isNull\n} from \"lodash\";\n\n// constants\nimport {\n momentUnitTypes,\n healthFactorsMetadata,\n healthScoreRanges,\n healthScoreTypes,\n alwaysOnScoreRanges,\n contextSwitchingScoreRanges,\n contextSwitchingScoreTypes,\n contextSwitchingFactorsMetadata,\n Signals\n} from \"../../constants/constants\";\n\nimport { alwaysOnRiskTypes } from \"../../constants/charts\";\nimport {\n getPeopleHealthBucketTooltip,\n getPeopleHealthContextSwitchingTooltip,\n getDeepWorkTooltipDisplay\n} from \"../../utils/chart\";\n\n// interfaces\nimport {\n DeepDiveData,\n PeopleMetrics,\n SelectablePeopleMetrics,\n ContextSwitchingRecord,\n BucketTypes\n} from \"../../interfaces/team-deep-dive\";\n\n// utils\nimport {\n getAdjustedTooltipPosition,\n getPlotBands,\n getBandTickPositions\n} from \"../../utils/chart\";\nimport { createTimestamp, formatTimestamp } from \"../../utils/date\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\nimport {\n getNumberDataSeries,\n getPersonScore\n} from \"../../utils/health-metrics\";\n\n// typescript props\ntype Props = {\n data?: DeepDiveData;\n theme: DefaultTheme;\n selectedMetric: SelectablePeopleMetrics;\n chartView: UserReportWithMetadataInterface | \"team\";\n teamMembers: UserReportWithMetadataInterface[] | undefined;\n canSeeAlwaysOnData: boolean;\n};\ntype PrReposType = {\n bucket: BucketTypes;\n details: {\n repos: Array;\n };\n};\ntype MeetingsType = {\n bucket: BucketTypes;\n details: Record;\n};\n\nexport const getDeepWorkTooltips = (\n data: DeepDiveData,\n pointData: { name: string; series: { name: string; type: string } },\n chartView: UserReportWithMetadataInterface | \"team\",\n teamMembers: UserReportWithMetadataInterface[] | undefined,\n showFullTeam: boolean\n) => {\n const dateRecord = data.find(d => d.dateEnd === pointData.name);\n\n const teamDeepWorkBuckets = dateRecord?.peopleScores\n ?.map(record => {\n const userMetadataRecord = teamMembers?.find(t => t.id === record.user);\n return {\n name: userMetadataRecord?.name,\n id: record.user,\n slackAvatar: userMetadataRecord?.slackAvatar,\n bucket: capitalize(record.DEEP_WORK?.HOURS?.TOTAL) || \"N/A\",\n hours:\n !!record.DEEP_WORK?.HOURS?.DETAILS &&\n !!Object.values(record.DEEP_WORK?.HOURS?.DETAILS).length\n ? sum(Object.values(record.DEEP_WORK.HOURS.DETAILS)) /\n Object.values(record.DEEP_WORK.HOURS.DETAILS).length\n : 0\n };\n })\n .filter(\n i =>\n (showFullTeam || (chartView !== \"team\" && i.id === chartView.id)) &&\n !!i.name\n );\n\n const currentAverageDeepWorkTime =\n sumBy(teamDeepWorkBuckets, \"hours\") / (teamDeepWorkBuckets?.length || 1) ||\n 0;\n const rollingAverageRecordSet = data.filter(d =>\n moment(d.dateEnd).isSameOrBefore(moment(dateRecord?.dateEnd))\n );\n\n const rollingAverageDeepWorkTime =\n !showFullTeam && chartView !== \"team\" && !!rollingAverageRecordSet\n ? sum(\n rollingAverageRecordSet.map(record => {\n const hoursDetails =\n record.peopleScores.find(i => i.user === chartView.id)?.DEEP_WORK\n ?.HOURS?.DETAILS || {};\n return !!hoursDetails\n ? sum(Object.values(hoursDetails)) /\n Object.values(hoursDetails).length\n : 0;\n })\n ) / rollingAverageRecordSet.length\n : 0;\n\n return getDeepWorkTooltipDisplay(\n teamDeepWorkBuckets,\n currentAverageDeepWorkTime,\n rollingAverageDeepWorkTime\n );\n};\n\nexport const getContextSwitchingTooltips = (\n data: DeepDiveData,\n chartView: UserReportWithMetadataInterface | \"team\",\n pointData: { name: string; series: { name: string; type: string } },\n selectedMetric?: string\n) => {\n const dataRecord = data\n .find(d => d.dateEnd === pointData.name)\n ?.peopleScores.filter(\n scoreRecord => chartView === \"team\" || scoreRecord.user === chartView?.id\n );\n let itemsToShow;\n let title;\n switch (pointData.series.name) {\n case \"Context Switching\":\n itemsToShow = flatten(\n dataRecord?.map(scoreRecord => {\n const bucketMap = {\n \"Jira Epics\":\n startCase(\n scoreRecord?.CONTEXT_SWITCHING?.[\n \"JIRA_EPICS\"\n ]?.bucket.toLowerCase()\n ) || \"None\",\n \"Top Priority Bugs\":\n startCase(\n scoreRecord?.CONTEXT_SWITCHING?.[\n \"TOP_PRIORITY_BUGS\"\n ]?.bucket.toLowerCase()\n ) || \"None\",\n \"Chat Channels with Interruptions\":\n startCase(\n scoreRecord?.CONTEXT_SWITCHING?.[\n \"CHAT_CHANNELS_WITH_INTERRUPTIONS\"\n ]?.bucket.toLowerCase()\n ) || \"None\",\n \"PR Repos\":\n startCase(\n scoreRecord?.CONTEXT_SWITCHING?.[\n \"PR_REPOS\"\n ]?.bucket.toLowerCase()\n ) || \"None\",\n \"Meetings with 2+ Teams\":\n startCase(\n scoreRecord?.CONTEXT_SWITCHING?.[\n \"MEETINGS_WITH_2+_TEAMS\"\n ]?.bucket.toLowerCase()\n ) || \"None\"\n };\n return selectedMetric === \"OVERALL_TEAM_HEALTH\"\n ? scoreRecord?.CONTEXT_SWITCHING?.TOTAL?.bucket.toLowerCase()\n : Object.entries(bucketMap).map(([key, value]) => {\n return `${key}: ${value}`;\n });\n })\n );\n title = \"Context Switching\";\n break;\n case \"Jira Epics\":\n itemsToShow = uniq(\n flatten(\n dataRecord?.map(scoreRecord => {\n const theRecord =\n scoreRecord[\"CONTEXT_SWITCHING\"]?.[\"JIRA_EPICS\"]?.details;\n return !!theRecord ? Object.values(theRecord) : [];\n })\n ).sort((a, b) => a[0].localeCompare(b[0]))\n );\n title = `Jira Epic - ${itemsToShow.length}`;\n break;\n case \"Top Priority Bugs\":\n itemsToShow = flatten(\n dataRecord?.map(scoreRecord => {\n const record =\n scoreRecord[\"CONTEXT_SWITCHING\"]?.[\"TOP_PRIORITY_BUGS\"]?.details;\n return !!record\n ? Object.values(record).map(d => d.name)\n : [\"No Top Priority Bugs\"];\n })\n ).sort((a, b) => a[0].localeCompare(b[0]));\n title = `Top Priority Bugs ${\n itemsToShow[0] === \"No Top Priority Bugs\"\n ? \"\"\n : `- ${itemsToShow.length}`\n }`;\n break;\n case \"Chat Channels with Interruptions\":\n const totalChannels = sum(\n dataRecord?.map(scoreRecord => {\n return (\n scoreRecord[\"CONTEXT_SWITCHING\"]?.[\n \"CHAT_CHANNELS_WITH_INTERRUPTIONS\"\n ]?.details?.count || 0\n );\n })\n );\n itemsToShow = [\n totalChannels > 0\n ? `${totalChannels} channel${\n totalChannels === 1 ? \"s\" : \"\"\n } with more Interruptions`\n : \"Few Channels impacted your team\"\n ];\n title = \"Chat Channels with Interruptions\";\n break;\n case \"PR Repos\":\n itemsToShow = uniq(\n flatten(\n dataRecord\n ?.map(scoreRecord => {\n const repos = scoreRecord[\"CONTEXT_SWITCHING\"]?.[\n \"PR_REPOS\"\n ] as PrReposType;\n return repos?.details?.repos;\n })\n .filter(s => !!s)\n )\n ).sort((a, b) => a[0].localeCompare(b[0]));\n title = `PR Repos - ${itemsToShow.length}`;\n break;\n case \"Meetings with 2+ teams\":\n const [namedMeetings, otherMeetings] = partition(\n flatten(\n dataRecord?.map(scoreRecord => {\n const meetings = scoreRecord[\"CONTEXT_SWITCHING\"]?.[\n \"MEETINGS_WITH_2+_TEAMS\"\n ] as MeetingsType;\n return !!meetings?.details\n ? Object.entries(meetings.details).sort((a, b) => b[1] - a[1])\n : [];\n })\n ),\n i => i[1] > 0.1\n );\n const combinedMeetings: [string, number][] =\n [\n ...namedMeetings,\n [`Other Meeting Types`, otherMeetings.reduce((c, i) => i[1] + c, 0)]\n ] || [];\n itemsToShow = combinedMeetings.map(\n cat => `${(cat[1] * 100).toFixed(0)}% ${cat[0]}`\n );\n title = \"Meetings with 2+ Teams\";\n break;\n }\n return getPeopleHealthContextSwitchingTooltip(\n title,\n itemsToShow || [],\n (pointData as any).color\n );\n};\n\nexport const getUserRecordsForTooltips = (\n pointData: { name: string; series: { name: string; type: string } },\n chartView: UserReportWithMetadataInterface | \"team\",\n data: DeepDiveData,\n teamMembers: UserReportWithMetadataInterface[] | undefined,\n selectedMetric: SelectablePeopleMetrics\n) => {\n return data\n .find(d => d.dateEnd === pointData.name)\n ?.peopleScores.filter(scoreRecord => {\n const theRecord =\n (chartView === \"team\" ||\n pointData.series.type === \"column\" ||\n scoreRecord.user === chartView.id) &&\n teamMembers?.find(member => member.id === scoreRecord.user);\n\n return theRecord;\n })\n .map(person => {\n const personRecord = teamMembers?.find(\n member => member.id === person.user\n );\n\n // the data points only have display names at this point, so they need to be mapped back to the actual metric name for lookup if context switching\n const nameMetricMap = toPairs({\n \"Top Priority Bugs\": \"TOP_PRIORITY_BUGS\",\n \"Jira Epics\": \"JIRA_EPICS\",\n \"Meetings with 2+ teams\": \"MEETINGS_WITH_2+_TEAMS\",\n \"Chat Channels with Interruptions\": \"CHAT_CHANNELS_WITH_INTERRUPTIONS\",\n \"PR Repos\": \"PR_REPOS\",\n \"Deep Work\": \"DEEP_WORK\",\n \"Always On\": \"ALWAYS_ON\",\n \"Context Switching\": \"CONTEXT_SWITCHING\",\n \"Context Switching (Team)\": \"CONTEXT_SWITCHING\",\n \"Chat Interruptions\": \"CHAT_INTERRUPTIONS\",\n \"Overall Team Health\": \"OVERALL_TEAM_HEALTH\"\n }).find(keyPairs => keyPairs[0] === pointData.series.name);\n\n const hasSubMetric =\n selectedMetric === Signals.CONTEXT_SWITCHING ||\n selectedMetric === \"OVERALL_TEAM_HEALTH\";\n\n return {\n userId: person.user,\n slackAvatar: personRecord?.slackAvatar,\n name: personRecord?.name,\n // this is the canonical metric being viewed, ie the tab that is selected displaying the chart\n selectedMetric,\n // this is the value of the actual series that the hover is on, eg: \"Top Priority Bugs\" on Context Switching chart\n selectedSubMetric: hasSubMetric ? nameMetricMap?.[0] : \"\",\n // value when on Context Switching is just the subMetric, but on PeopleHealth, we need to know whether to display either a standard other metric OR the \"Toral\" submetric value from Context Switching\n // it is indeed as confusing as it sounds\n // nb getPersonScore is called slightly different in each case, but thankfully is polymorphic enough to handle all cases\n value:\n selectedMetric === \"OVERALL_TEAM_HEALTH\"\n ? nameMetricMap?.[1] === \"CONTEXT_SWITCHING\"\n ? getPersonScore(\n person,\n Signals.CONTEXT_SWITCHING as PeopleMetrics,\n \"TOTAL\"\n )\n : nameMetricMap?.[1] === \"CHAT_INTERRUPTIONS\"\n ? person?.CHAT_INTERRUPTIONS?.TOTAL\n : getPersonScore(\n person,\n nameMetricMap?.[1] as PeopleMetrics,\n \"TOTAL\"\n )\n : selectedMetric === Signals.CONTEXT_SWITCHING\n ? nameMetricMap?.[1] === Signals.CONTEXT_SWITCHING\n ? getPersonScore(\n person,\n Signals.CONTEXT_SWITCHING as PeopleMetrics,\n \"TOTAL\"\n )\n : getPersonScore(\n person,\n Signals.CONTEXT_SWITCHING as PeopleMetrics,\n nameMetricMap?.[1] as keyof ContextSwitchingRecord\n )\n : getPersonScore(person, selectedMetric as PeopleMetrics)\n };\n });\n};\n\nconst getYAxisMax = (\n selectedMetric: SelectablePeopleMetrics,\n series: {\n data: (string | number | null)[][];\n }[],\n data: DeepDiveData\n) => {\n return selectedMetric === \"OVERALL_TEAM_HEALTH\"\n ? 101\n : selectedMetric === \"DEEP_WORK\"\n ? 9 // 9 hours is the max for deep work\n : (selectedMetric === \"CHAT_INTERRUPTIONS\" // keep scale consistent for interruptions across all users\n ? Math.max(\n ...flatten(\n data.map(r =>\n flatten(\n r.peopleScores.map(\n d => getPersonScore(d, \"CHAT_INTERRUPTIONS\") || 0\n )\n )\n )\n )\n )\n : Math.max(\n ...series.map(s =>\n Math.max(\n ...s.data.map(d => (typeof d[1] === \"number\" ? d[1] : 1))\n )\n )\n )) * 1.2;\n};\n\nconst config = ({\n data,\n theme,\n selectedMetric,\n chartView,\n teamMembers,\n canSeeAlwaysOnData\n}: Props) => {\n if (!data?.length) {\n return {};\n }\n\n const alwaysOn = {\n name: healthFactorsMetadata[\"ALWAYS_ON\"].title,\n type: \"line\",\n color: theme.colors.chart.healthFactors.ALWAYS_ON,\n marker: {\n fillColor: theme.colors.chart.healthFactors.ALWAYS_ON,\n lineColor: theme.colors.chart.healthFactors.ALWAYS_ON\n },\n data:\n selectedMetric === \"OVERALL_TEAM_HEALTH\" || selectedMetric === \"ALWAYS_ON\"\n ? data.map(record => {\n return getNumberDataSeries(\n record,\n selectedMetric,\n chartView,\n \"ALWAYS_ON\"\n );\n })\n : [],\n opacity: theme.charts.series.opacity.full,\n lineWidth: \"2px\"\n };\n const deepWork = {\n name: healthFactorsMetadata[\"DEEP_WORK\"].title,\n type: \"line\",\n color: theme.colors.chart.healthFactors.DEEP_WORK,\n marker: {\n fillColor: theme.colors.chart.healthFactors.DEEP_WORK,\n lineColor: theme.colors.chart.healthFactors.DEEP_WORK\n },\n data:\n selectedMetric === \"OVERALL_TEAM_HEALTH\" ||\n selectedMetric === Signals.DEEP_WORK\n ? data.map(record => {\n return getNumberDataSeries(\n record,\n selectedMetric,\n chartView,\n \"DEEP_WORK\"\n );\n })\n : [],\n opacity: theme.charts.series.opacity.full,\n visible: true,\n lineWidth: \"2px\"\n };\n const deepWorkTeam = {\n ...deepWork,\n name: `${deepWork.name} (Team)`,\n maxPointWidth: 20,\n color: theme.colors.all.storm,\n type: \"column\",\n data:\n selectedMetric === Signals.DEEP_WORK && chartView !== \"team\"\n ? data.map(record => {\n return getNumberDataSeries(\n record,\n selectedMetric,\n \"team\",\n \"DEEP_WORK\"\n );\n })\n : []\n };\n const chatInterruptions = {\n name: healthFactorsMetadata[\"CHAT_INTERRUPTIONS\"].title,\n type: \"line\",\n color: theme.colors.chart.healthFactors.CHAT_INTERRUPTIONS,\n marker: {\n fillColor: theme.colors.chart.healthFactors.CHAT_INTERRUPTIONS,\n lineColor: theme.colors.chart.healthFactors.CHAT_INTERRUPTIONS\n },\n data:\n selectedMetric === \"OVERALL_TEAM_HEALTH\" ||\n selectedMetric === \"CHAT_INTERRUPTIONS\"\n ? data.map(record => {\n return getNumberDataSeries(\n record,\n selectedMetric,\n chartView,\n \"CHAT_INTERRUPTIONS\"\n );\n })\n : [],\n opacity: theme.charts.series.opacity.full,\n visible: true,\n lineWidth: \"2px\"\n };\n const chatInterruptionsTeam = {\n ...chatInterruptions,\n name: `${chatInterruptions.name} (Team)`,\n maxPointWidth: 20,\n color: theme.colors.all.storm,\n type: \"column\",\n data:\n selectedMetric === \"CHAT_INTERRUPTIONS\" && chartView !== \"team\"\n ? data.map(record => {\n return getNumberDataSeries(\n record,\n selectedMetric,\n \"team\",\n \"CHAT_INTERRUPTIONS\"\n );\n })\n : []\n };\n\n // context switching factors\n const contextSwitchingTotal = {\n name: healthFactorsMetadata[\"CONTEXT_SWITCHING\"].title,\n color: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_TOTAL,\n marker: {\n fillColor: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_TOTAL,\n lineColor: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_TOTAL\n },\n data:\n selectedMetric === \"CONTEXT_SWITCHING\"\n ? data.map(record => {\n return getNumberDataSeries(\n record,\n selectedMetric,\n chartView,\n \"CONTEXT_SWITCHING\",\n \"TOTAL\"\n );\n })\n : selectedMetric === \"OVERALL_TEAM_HEALTH\"\n ? data.map(record => {\n return getNumberDataSeries(\n record,\n selectedMetric,\n \"team\",\n \"CONTEXT_SWITCHING\"\n );\n })\n : [],\n opacity: theme.charts.series.opacity.full,\n type: \"line\",\n visible: true,\n lineWidth: \"4px\"\n };\n\n // series existing specifically to show the team average when on ic view of Context Switching, is the average of previous metric series\n const contextSwitchingTeam = {\n ...contextSwitchingTotal,\n name: `${healthFactorsMetadata[\"CONTEXT_SWITCHING\"].title} (Team)`,\n maxPointWidth: 20,\n color: theme.colors.all.storm,\n type: \"column\",\n data:\n selectedMetric === \"CONTEXT_SWITCHING\" && chartView !== \"team\"\n ? data.map(record => {\n return getNumberDataSeries(\n record,\n selectedMetric,\n \"team\",\n \"CONTEXT_SWITCHING\",\n \"TOTAL\"\n );\n })\n : []\n };\n const contextSwitchingJiraP1BugTickets = {\n name:\n contextSwitchingFactorsMetadata[\"CONTEXT_SWITCHING_TOP_PRIORITY_BUGS\"]\n .title,\n type: \"line\",\n color: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_TOP_PRIORITY_BUGS,\n marker: {\n fillColor:\n theme.colors.chart.healthFactors.CONTEXT_SWITCHING_TOP_PRIORITY_BUGS,\n lineColor:\n theme.colors.chart.healthFactors.CONTEXT_SWITCHING_TOP_PRIORITY_BUGS\n },\n data:\n selectedMetric === \"CONTEXT_SWITCHING\"\n ? data.map(record => {\n return getNumberDataSeries(\n record,\n selectedMetric,\n chartView,\n \"CONTEXT_SWITCHING\",\n \"TOP_PRIORITY_BUGS\"\n );\n })\n : [],\n opacity: theme.charts.series.opacity.full,\n visible: true\n };\n const contextSwitchingMeetings = {\n name: contextSwitchingFactorsMetadata[\"CONTEXT_SWITCHING_MEETINGS\"].title,\n color: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_MEETINGS,\n type: \"line\",\n marker: {\n fillColor: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_MEETINGS,\n lineColor: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_MEETINGS\n },\n data:\n selectedMetric === \"CONTEXT_SWITCHING\"\n ? data.map(record => {\n return getNumberDataSeries(\n record,\n selectedMetric,\n chartView,\n \"CONTEXT_SWITCHING\",\n \"MEETINGS_WITH_2+_TEAMS\"\n );\n })\n : [],\n opacity: theme.charts.series.opacity.full,\n visible: true\n };\n const contextSwitchingSlackChannels = {\n name:\n contextSwitchingFactorsMetadata[\"CONTEXT_SWITCHING_CHAT_CHANNELS\"].title,\n type: \"line\",\n color: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_CHAT_CHANNELS,\n marker: {\n fillColor:\n theme.colors.chart.healthFactors.CONTEXT_SWITCHING_CHAT_CHANNELS,\n lineColor:\n theme.colors.chart.healthFactors.CONTEXT_SWITCHING_CHAT_CHANNELS\n },\n data:\n selectedMetric === \"CONTEXT_SWITCHING\"\n ? data.map(record => {\n return getNumberDataSeries(\n record,\n selectedMetric,\n chartView,\n \"CONTEXT_SWITCHING\",\n \"CHAT_CHANNELS_WITH_INTERRUPTIONS\"\n );\n })\n : [],\n opacity: theme.charts.series.opacity.full,\n visible: true\n };\n const contextSwitchingPRRepos = {\n name: contextSwitchingFactorsMetadata[\"CONTEXT_SWITCHING_PR_REPOS\"].title,\n color: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_PR_REPOS,\n type: \"line\",\n marker: {\n fillColor: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_PR_REPOS,\n lineColor: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_PR_REPOS\n },\n data:\n selectedMetric === \"CONTEXT_SWITCHING\"\n ? data.map(record => {\n return getNumberDataSeries(\n record,\n selectedMetric,\n chartView,\n \"CONTEXT_SWITCHING\",\n \"PR_REPOS\"\n );\n })\n : [],\n opacity: theme.charts.series.opacity.full,\n visible: true\n };\n const contextSwitchingJiraEpics = {\n name: contextSwitchingFactorsMetadata[\"CONTEXT_SWITCHING_JIRA_EPICS\"].title,\n color: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_JIRA_EPICS,\n type: \"line\",\n marker: {\n fillColor: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_JIRA_EPICS,\n lineColor: theme.colors.chart.healthFactors.CONTEXT_SWITCHING_JIRA_EPICS\n },\n data:\n selectedMetric === \"CONTEXT_SWITCHING\"\n ? data.map(record => {\n return getNumberDataSeries(\n record,\n selectedMetric,\n chartView,\n \"CONTEXT_SWITCHING\",\n \"JIRA_EPICS\"\n );\n })\n : [],\n opacity: theme.charts.series.opacity.full,\n visible: true\n };\n\n let series;\n switch (selectedMetric) {\n case \"CONTEXT_SWITCHING\":\n series = [\n contextSwitchingTotal,\n contextSwitchingJiraP1BugTickets,\n contextSwitchingMeetings,\n contextSwitchingSlackChannels,\n contextSwitchingPRRepos,\n contextSwitchingJiraEpics\n ];\n if (chartView !== \"team\") {\n series = [contextSwitchingTeam, ...series];\n }\n // filter out nulls that bubbled up into the series -- for customizations,\n // this should result in an empty array for the series\n series = series.filter(s => flatten(s.data).every(d => !isNull(d)));\n break;\n case \"DEEP_WORK\":\n series = [deepWork];\n if (chartView !== \"team\") {\n series = [deepWorkTeam, ...series];\n }\n break;\n case \"ALWAYS_ON\":\n series = [alwaysOn];\n if (chartView !== \"team\") {\n series = [...series];\n }\n break;\n case \"CHAT_INTERRUPTIONS\":\n series = [chatInterruptions];\n if (chartView !== \"team\") {\n series = [chatInterruptionsTeam, ...series];\n }\n break;\n case \"OVERALL_TEAM_HEALTH\":\n const baseSeries = [deepWork, chatInterruptions, contextSwitchingTotal];\n series = canSeeAlwaysOnData ? [...baseSeries, alwaysOn] : baseSeries;\n break;\n }\n\n return {\n chart: {\n height: 350,\n width: 1126,\n marginRight: 0,\n style: {\n fontFamily: theme.fonts.primary.name,\n fontWeight: theme.fonts.primary.weights.regular\n }\n },\n xAxis: {\n min: -0.4,\n categories: data.map(d => {\n const isSameMonth = moment(d.dateStart).isSame(\n d.dateEnd,\n momentUnitTypes.MONTHS\n );\n const start = formatTimestamp({\n format: \"M/DD\",\n timestamp: createTimestamp(d.dateStart)\n });\n const end = formatTimestamp({\n format: isSameMonth ? \"DD\" : \"M/DD\",\n timestamp: createTimestamp(d.dateEnd || new Date())\n });\n return `${start}-${end}`;\n }),\n lineColor: theme.colors.all.wolverine,\n labels: {\n enabled: true,\n style: {\n color: theme.colors.all.wolverine,\n fontFamily: theme.fonts.subheader.name,\n fontWeight: theme.fonts.subheader.weights.bold\n },\n y: 20\n }\n },\n yAxis: [\n {\n min: 0,\n max: getYAxisMax(selectedMetric, series, data),\n endOnTick: true,\n labels: {\n enabled:\n selectedMetric === \"DEEP_WORK\" ||\n selectedMetric === \"CHAT_INTERRUPTIONS\",\n formatter: function() {\n return `${(this as any).value}${\n selectedMetric === \"DEEP_WORK\"\n ? \"hr\"\n : selectedMetric === \"CHAT_INTERRUPTIONS\"\n ? \"min\"\n : \"\"\n }`;\n }\n },\n plotBands:\n selectedMetric === \"OVERALL_TEAM_HEALTH\"\n ? getPlotBands(healthScoreRanges, healthScoreTypes, theme)\n : selectedMetric === \"ALWAYS_ON\"\n ? getPlotBands(\n alwaysOnScoreRanges,\n alwaysOnRiskTypes,\n theme,\n \"ALWAYS_ON\"\n )\n : selectedMetric === \"CONTEXT_SWITCHING\"\n ? getPlotBands(\n contextSwitchingScoreRanges,\n contextSwitchingScoreTypes,\n theme,\n \"CONTEXT_SWITCHING\"\n )\n : [{}],\n tickPositions:\n selectedMetric === \"OVERALL_TEAM_HEALTH\"\n ? getBandTickPositions(healthScoreRanges)\n : selectedMetric === \"ALWAYS_ON\"\n ? getBandTickPositions(alwaysOnScoreRanges, \"ALWAYS_ON\")\n : selectedMetric === \"CONTEXT_SWITCHING\"\n ? getBandTickPositions(\n contextSwitchingScoreRanges,\n \"CONTEXT_SWITCHING\"\n )\n : undefined,\n title: {\n enabled: false\n }\n }\n ],\n legend: {\n align: \"right\",\n enabled: true,\n itemDistance: 30,\n itemStyle: {\n fontWeight: theme.fonts.primary.weights.book\n },\n layout: \"horizontal\",\n verticalAlign: \"bottom\",\n width: selectedMetric === \"CONTEXT_SWITCHING\" ? 500 : 0,\n symbolHeight: 8,\n symbolWidth: 8,\n symbolPadding: 8,\n // a bit odd, but radius here implicitly applies to just column type series and not line series\n symbolRadius: 0\n },\n plotOptions: {\n series: {\n events: {\n legendItemClick: function() {\n const seriesIndex = (this as any).index;\n const { series } = (this as any).chart;\n\n type Series = {\n visible: boolean;\n index: number;\n setVisible: (arg0: boolean, arg1: boolean) => void;\n };\n // if every series is visible, then for each series, if it is not the one being clicked, hide it\n if (series.every((s: Series) => s.visible)) {\n series.forEach((s: Series) => {\n if (s.index !== seriesIndex) {\n s.setVisible(false, true);\n }\n });\n return false;\n } else {\n // if the series clicked is visible, but the other series are not, then show all series\n if (\n series.find((s: Series) => s.index === seriesIndex).visible &&\n series\n .filter((s: Series) => s.index !== seriesIndex)\n .every((s: Series) => !s.visible)\n ) {\n series.forEach((s: Series) => {\n if (s.index !== seriesIndex) {\n s.setVisible(true, true);\n }\n });\n return false;\n } else {\n // in all other cases, set the visibility of the series clicked to the opposite of what it is currently\n (this as any).setVisible(!(this as any).visible, true);\n return false;\n }\n }\n }\n }\n },\n line: {\n connectNulls: true,\n dataLabels: {\n align: \"left\",\n enabled: false,\n formatter: function() {\n return (this as any).point.index === data.length - 1\n ? (this as any).y.toFixed(0)\n : null;\n },\n style: {\n fontFamily: theme.fonts.subheader.name,\n fontSize: \"10px\",\n opacity: theme.charts.series.opacity.full\n },\n verticalAlign: \"middle\",\n x: 10\n },\n marker: {\n symbol: \"circle\"\n },\n states: {\n hover: {\n opacity: theme.charts.series.opacity.full,\n lineWidth: \"4px\",\n lineWidthPlus: 0\n },\n inactive: {\n animation: {\n duration: 0\n }\n }\n }\n }\n },\n title: {\n text: undefined\n },\n tooltip: {\n useHTML: true,\n enabled: true,\n backgroundColor: null,\n shadow: false,\n borderWidth: 0,\n borderRadius: 0,\n outside: true,\n positioner: function(w: number, h: number, point: any) {\n return getAdjustedTooltipPosition({\n currentPosition: (this as any).getPosition(w, h, point),\n windowScroll: window.scrollY\n });\n },\n formatter: function() {\n const pointData = (this as any).point;\n\n if (\n selectedMetric === Signals.CONTEXT_SWITCHING &&\n pointData.series.type !== \"column\" &&\n chartView !== \"team\"\n ) {\n return getContextSwitchingTooltips(\n data,\n chartView,\n pointData,\n selectedMetric\n );\n }\n\n if (\n selectedMetric === Signals.DEEP_WORK ||\n (selectedMetric === \"OVERALL_TEAM_HEALTH\" &&\n pointData.series.name === \"Deep Work\")\n ) {\n return getDeepWorkTooltips(\n data,\n pointData,\n chartView,\n teamMembers,\n chartView === \"team\" || pointData.series.type === \"column\"\n );\n }\n\n const userRecords = getUserRecordsForTooltips(\n pointData,\n chartView,\n data,\n teamMembers,\n selectedMetric\n );\n\n return getPeopleHealthBucketTooltip(userRecords, pointData.color);\n }\n },\n series\n };\n};\n\nexport default config;\n","import React, { useMemo } from \"react\";\nimport { DefaultTheme, withTheme } from \"styled-components/macro\";\nimport styled from \"styled-components\";\n\n// components\nimport Chart from \"../Chart/Chart\";\nimport { ErrorBoundary } from \"@sentry/react\";\nimport Icon from \"../Icon/Icon\";\nimport RouteLink from \"../RouteLink/RouteLink\";\n\n// config\nimport generateConfig from \"./config\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport {\n DeepDiveData,\n SelectablePeopleMetrics\n} from \"../../interfaces/team-deep-dive\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { get, isEmpty } from \"lodash\";\nimport { getSelectableTeamMembers } from \"../../utils/people-picker\";\nimport { teamDeepDiveSections } from \"../../constants/constants\";\n\nconst ContextSwitchingWarningContainer = styled.div`\n display: flex;\n flex-direction: column;\n padding: 1rem;\n`;\n\nconst WarningContainerSection = styled.div`\n margin-top: 1rem;\n`;\n\nconst SubfactorsList = styled.ul`\n list-style: inside;\n margin-left: 1rem;\n`;\n\nconst StyledIcon = styled(Icon)`\n color: ${props => props.theme.colors.brand.wolverine};\n margin-right: 1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n data?: DeepDiveData;\n isFetchingData?: boolean;\n testId?: string;\n theme: DefaultTheme;\n selectedMetric: SelectablePeopleMetrics;\n chartView: UserReportWithMetadataInterface | \"team\";\n canSeeAlwaysOnData?: boolean;\n};\n\nconst ChartPeopleHealth = ({\n className,\n data,\n isFetchingData = false,\n testId = \"testId\",\n selectedMetric,\n chartView,\n theme,\n canSeeAlwaysOnData = false\n}: Props) => {\n const thisTestId = `${testId}-chart-people-health`;\n const { urlParams } = useUrlParams();\n const { trackEvent } = useTracking();\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const user = useSelector((state: AppStateInterface) => get(state, \"user\"));\n const activeTeam = urlParams.team;\n function onChartMouseOver(e: React.MouseEvent) {\n e.persist();\n trackEvent({\n e,\n label: \"chart-people-health\",\n value: \"chart moused over\"\n });\n }\n function onChartMouseOut(e: React.MouseEvent) {\n e.persist();\n trackEvent({\n e,\n label: \"chart-people-health\",\n value: \"chart moused out\"\n });\n }\n const selectableTeamMembers = getSelectableTeamMembers({\n user,\n flags,\n teamDeepDiveParams: {\n selectedSection: teamDeepDiveSections.HEALTH_METRICS,\n selectedMetric,\n selectedUser: chartView === \"team\" ? \"team\" : chartView.email\n },\n urlParams\n });\n const teamMembers = isEmpty(selectableTeamMembers)\n ? activeTeam?.teamMembers\n : activeTeam?.teamMembers.filter(m => selectableTeamMembers.includes(m.id));\n\n const isNullContextSwitching = useMemo(() => {\n return (\n selectedMetric === \"CONTEXT_SWITCHING\" &&\n data?.every(timeRecord => {\n return timeRecord.teamScores[\"CONTEXT_SWITCHING\"] === null;\n })\n );\n }, [selectedMetric, data]);\n\n const chart = useMemo(() => {\n return {\n config: generateConfig({\n data: data?.sort((d1, d2) => d1.dateEnd.localeCompare(d2.dateEnd)),\n theme,\n selectedMetric,\n chartView,\n teamMembers,\n canSeeAlwaysOnData\n }),\n id: \"sprint-health-chart\",\n isFetchingData\n };\n }, [\n canSeeAlwaysOnData,\n chartView,\n data,\n isFetchingData,\n teamMembers,\n selectedMetric,\n theme\n ]);\n\n return (\n \n \n {isNullContextSwitching ? (\n \n \n \n \n Someone on your team turned off all the metrics that make up\n Context Switching.\n \n \n \n \n To get this metric back, turn on any of all of the following\n factors in{\" \"}\n \n Team Settings\n \n :\n \n \n \n \n
  • Chat Channels with Interruptions
  • \n
  • Meetings with 2+ Teams
  • \n
  • PR Repos
  • \n
  • Jira Epics
  • \n
  • Top Priority Bugs
  • \n
    \n
    \n
    \n ) : (\n \n )}\n
    \n \n );\n};\n\nexport default withTheme(ChartPeopleHealth);\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\n\nconst Triangle = styled.div<{ baseWidth: number }>`\n width: 0;\n height: 0;\n border-left: ${props => `${props.baseWidth * 0.6}px solid transparent`};\n border-right: ${props => `${props.baseWidth * 0.6}px solid transparent`};\n border-bottom: ${props =>\n `${props.baseWidth}px solid ${props.theme.colors.all.rogue}`};\n position: absolute;\n display: flex;\n justify-content: center;\n align-self: start;\n`;\n\nconst AlertCount = styled.strong<{ baseWidth: number }>`\n /* needsto be proportional to the base width to fit correctly in the triangle */\n font-size: ${props => `${props.baseWidth * 0.75}px`};\n`;\n\ntype Props = {\n baseWidth: number; // baseWidth is the bottom (base) width of the triangle in pixels\n alertCount: number;\n};\n\nconst WarningTriangle = ({ baseWidth, alertCount }: Props): JSX.Element => {\n return (\n \n {alertCount}\n \n );\n};\n\nexport default WarningTriangle;\n","import React from \"react\";\nimport { DeepDiveData, PeopleMetrics } from \"../../interfaces/team-deep-dive\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\nimport styled from \"styled-components/macro\";\nimport { getNumberDataSeries } from \"../../utils/health-metrics\";\n\n// styled components\n\nconst Container = styled.div`\n margin-top: 1rem;\n display: grid;\n gap: 0.5rem;\n grid-template-columns: 1fr 1fr;\n height: 8rem;\n width: 100%;\n`;\nconst DataAndHeader = styled.div`\n display: flex;\n flex-direction: column;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst HeaderSection = styled.div`\n background-color: ${props => props.theme.colors.all.white};\n padding: 0.5rem;\n margin-bottom: 0.25rem;\n`;\nconst DataSection = styled.div`\n padding: 0 0.5rem;\n background-color: ${props => props.theme.colors.all.white};\n height: 100%;\n display: flex;\n align-items: center;\n`;\nconst DataText = styled.b`\n margin-right: 0.5rem;\n font-family: ${props => props.theme.fonts.subheader.name};\n font-size: ${props => props.theme.fonts.subheader.sizes.sm};\n font-weight: ${props => props.theme.fonts.subheader.weights.bold};\n`;\n\ntype Props = {\n testId?: string;\n className?: string;\n metricTitle: PeopleMetrics;\n data?: DeepDiveData;\n chartView: UserReportWithMetadataInterface | \"team\";\n};\n\nconst MetricCalloutDetails = ({\n testId = \"testId\",\n className,\n metricTitle,\n data,\n chartView\n}: Props) => {\n // details for context switching to come in the future when available\n if (metricTitle !== \"DEEP_WORK\" && metricTitle !== \"CHAT_INTERRUPTIONS\") {\n return null;\n }\n const timeUnit = metricTitle === \"DEEP_WORK\" ? \"hrs\" : \"min\";\n const seriesData = data?.map(record =>\n getNumberDataSeries(record, metricTitle, chartView, metricTitle)\n );\n if (!seriesData?.length) return null;\n const thisSprintData = Number(seriesData[0][1]).toFixed(1);\n const rollingAverageData = (\n seriesData\n .map(d => Number(d[1]))\n .reduce((v1: number, v2: number) => v1 + v2) / seriesData.length\n ).toFixed(1);\n\n return (\n \n \n This sprint\n \n {thisSprintData}\n {timeUnit} / day\n \n \n \n Rolling average\n \n {rollingAverageData}\n {timeUnit} / day\n \n \n \n );\n};\n\nexport default MetricCalloutDetails;\n","import React from \"react\";\nimport {\n BucketTypes,\n DeepDiveDataRecord,\n JiraP1Bugs,\n PeopleMetrics\n} from \"../../interfaces/team-deep-dive\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport styled from \"styled-components\";\nimport { flatten } from \"lodash\";\nimport {\n contextSwitchingFactors,\n contextSwitchingFactorsMetadata,\n teamDeepDiveSections,\n groupByTypes,\n meetingInsightsMeasurePathParams,\n workDeepDiveSections,\n Signals,\n signalTypes,\n urlParamKeys,\n workMetadataActivityTypes\n} from \"../../constants/constants\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport SignalTypeContainer from \"../SignalTypeContainer/SignalTypeContainer\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\n\nconst Container = styled.div`\n width: 100%;\n`;\nconst SectionHeader = styled.header`\n font-family: ${props => props.theme.fonts.primary.name}, serif;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n border-bottom: ${props => `1px solid ${props.theme.colors.all.jean}`};\n margin: 1.9rem 0 1rem 0;\n`;\nconst SignalType = styled(SignalTypeContainer)`\n margin-bottom: 0.5rem;\n width: 100%;\n`;\n\nconst SignalInDropdown = styled.div`\n margin-top: 0.5rem;\n padding: 0.5rem;\n`;\n\nconst SignalNotInDropdown = styled.div<{ healthy: boolean }>`\n margin-bottom: 0.5rem;\n width: 100%;\n padding: 1rem 0 1rem 1rem;\n background-color: ${props => `${props.theme.colors.all.white}`};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n box-shadow: ${props =>\n `inset 5px 0px ${\n props.healthy\n ? props.theme.colors.all.marvelMint\n : props.theme.colors.all.rogue\n }`};\n`;\n\nconst DeepDiveLink = styled(RouteLink)`\n align-items: center;\n display: flex;\n &,\n &:visited {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n text-decoration: none;\n }\n`;\nconst Avatar = styled(SlackAvatar)`\n border-radius: 50%;\n height: 3.5rem;\n width: 3.5rem;\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.border}`};\n`;\n\nconst TeamMemberName = styled.strong`\n margin-left: 1rem;\n`;\nconst ContextSwitchingFactorCircle = styled.div<{ factor: string }>`\n height: 1rem;\n width: 1rem;\n margin-right: 1rem;\n border-radius: 50%;\n background-color: ${props =>\n props.theme.colors.chart.healthFactors[props.factor]};\n`;\nconst ContextSwitchingTitle = styled.div`\n display: flex;\n align-items: center;\n`;\nconst DataText = styled.b`\n margin-right: 1rem;\n font-family: ${props => props.theme.fonts.subheader.name};\n font-size: ${props => props.theme.fonts.subheader.sizes.sm};\n font-weight: ${props => props.theme.fonts.subheader.weights.bold};\n`;\nconst DataSection = styled.div`\n background-color: ${props => props.theme.colors.all.white};\n height: 100%;\n display: flex;\n align-items: center;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\n\n// using an internal type to make parsing simpler as the original type has the user id in a separate node\ntype ContextSwitchingDetailsType = {\n id: number;\n factor: string;\n score: {\n bucket: BucketTypes;\n details:\n | Record\n | Record\n | Record\n | {\n repos: Array;\n };\n } | null;\n};\ntype Props = {\n testId?: string;\n className?: string;\n metricTitle: PeopleMetrics;\n mostRecentData?: DeepDiveDataRecord;\n chartView: UserReportWithMetadataInterface | \"team\";\n};\n\nexport const MetricTileContextSwitchingDetails = ({\n metricTitle,\n mostRecentData,\n chartView,\n testId = \"testId\"\n}: Props): JSX.Element | null => {\n const thisTestId = `${testId}-metric-callout-tile-context-switching-details`;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const {\n getWorkDeepDivePath,\n getTeamDeepDivePath,\n urlParams\n } = useUrlParams();\n const activeTeam = urlParams.team?.teamMembers.filter(\n m => chartView === \"team\" || m.id === chartView.id\n );\n if (\n metricTitle !== Signals.CONTEXT_SWITCHING ||\n !flags?.[\"team-deep-dive-context-switching-details\"] ||\n !mostRecentData\n ) {\n return null;\n }\n const unhealthyContextSwitchingData: ContextSwitchingDetailsType[] = flatten(\n mostRecentData.peopleScores\n .filter(s => chartView === \"team\" || s.user === chartView.id)\n .map(s => [\n {\n id: s.user,\n factor: contextSwitchingFactors.CONTEXT_SWITCHING_JIRA_EPICS,\n score: s.CONTEXT_SWITCHING?.JIRA_EPICS\n },\n {\n id: s.user,\n factor: contextSwitchingFactors.CONTEXT_SWITCHING_TOP_PRIORITY_BUGS,\n score: s.CONTEXT_SWITCHING?.TOP_PRIORITY_BUGS\n },\n {\n id: s.user,\n factor: contextSwitchingFactors.CONTEXT_SWITCHING_MEETINGS,\n score: s.CONTEXT_SWITCHING?.[\"MEETINGS_WITH_2+_TEAMS\"]\n },\n {\n id: s.user,\n factor: contextSwitchingFactors.CONTEXT_SWITCHING_CHAT_CHANNELS,\n score: s.CONTEXT_SWITCHING?.CHAT_CHANNELS_WITH_INTERRUPTIONS\n },\n {\n id: s.user,\n factor: contextSwitchingFactors.CONTEXT_SWITCHING_PR_REPOS,\n score: s.CONTEXT_SWITCHING?.PR_REPOS\n }\n ])\n ).filter(({ score }) => score?.bucket === \"MORE\");\n if (!unhealthyContextSwitchingData.length) return null;\n\n function parseJiraP1Bugs(\n details: Record,\n user: UserReportWithMetadataInterface\n ) {\n return Object.entries(details)\n .sort((b1, b2) => b1[1].summary.localeCompare(b2[1].summary))\n .map(([, b]) => {\n const jiraP1BugsPath = getWorkDeepDivePath({\n groupId: b.parent,\n persistQuerystring: false,\n querystringParams: {\n [urlParamKeys.SELECTED_USER]: user.email,\n [urlParamKeys.WORK_ITEM_TYPES]: [workMetadataActivityTypes.BUG],\n [urlParamKeys.GROUP_BY]: groupByTypes.EPIC,\n [urlParamKeys.SPRINT_WORK_TYPES]: []\n }\n });\n return (\n \n {b.summary}\n \n );\n });\n }\n function parseJiraEpics(\n details: Record,\n user: UserReportWithMetadataInterface\n ) {\n return Object.entries(details)\n .sort((e1, e2) => e1[1].localeCompare(e2[1]))\n .map(([id, name]) => {\n const jiraEpicsPath = getWorkDeepDivePath({\n groupId: id,\n persistQuerystring: false,\n querystringParams: {\n [urlParamKeys.SELECTED_USER]: user.email,\n [urlParamKeys.SPRINT_WORK_TYPES]: []\n }\n });\n return (\n \n {name}\n \n );\n });\n }\n function parseSlackChannelInterruptions(\n details: Record,\n user: UserReportWithMetadataInterface\n ) {\n const chatInterruptionsPath = getTeamDeepDivePath({\n querystringParams: {\n [urlParamKeys.SELECTED_USER]: user.email\n },\n selectedMetric: Signals.CHAT_INTERRUPTIONS,\n selectedSection: teamDeepDiveSections.HEALTH_METRICS\n });\n return Object.entries(details).map(([, v]) => {\n return (\n \n \n \n \n {\n contextSwitchingFactorsMetadata[\n contextSwitchingFactors.CONTEXT_SWITCHING_CHAT_CHANNELS\n ].title\n }\n \n {v}\n \n \n );\n });\n }\n function parseMeetings(details: Record) {\n const meetingsPath = getTeamDeepDivePath({\n selectedMetric: meetingInsightsMeasurePathParams.MEETING_DISTRIBUTION,\n selectedSection: teamDeepDiveSections.MEETING_INSIGHTS\n });\n const topMeetingTypes = Object.entries(details)\n .filter(([, v]) => v > 0.1)\n .sort((d1, d2) => d2[1] - d1[1])\n .map(([k, v]) => {\n return {\n key:\n k === \"UNSPECIFIED_WORKING_SESSION\"\n ? \"Unspecified Working Session\"\n : k,\n val: v\n };\n });\n const remainingMeetingPct =\n 1 -\n topMeetingTypes.map(({ key, val }) => val).reduce((m1, m2) => m1 + m2);\n const meetingTypesToDisplay =\n Object.entries(details).length === topMeetingTypes.length\n ? topMeetingTypes\n : [\n ...topMeetingTypes,\n { key: \"Other Meeting Types\", val: remainingMeetingPct }\n ];\n\n return meetingTypesToDisplay.map(d => {\n return (\n \n \n {(d.val * 100).toFixed(0)}%\n {d.key}\n \n \n );\n });\n }\n function parsePRRepos(\n repos: Array,\n user: UserReportWithMetadataInterface\n ) {\n return repos\n .sort((r1, r2) => r1.localeCompare(r2))\n .map(r => {\n const repo = r.includes(\"/\") ? r.split(\"/\")[1] : r;\n const reposPath = getWorkDeepDivePath({\n selectedSection: workDeepDiveSections.PR_WORKFLOW,\n persistQuerystring: true,\n querystringParams: {\n [urlParamKeys.SELECTED_USER]: user.email,\n [urlParamKeys.REPOSITORIES]: [repo],\n [urlParamKeys.SPRINT_WORK_TYPES]: []\n }\n });\n return (\n \n {r}\n \n );\n });\n }\n\n // if we are viewing for the team, the contents will be the people with more context switching in\n // each category\n\n function getTeamDetails(\n contextSwitchingFactor: string,\n unhealthyData: ContextSwitchingDetailsType[]\n ) {\n const unhealthyUsers = unhealthyData\n .filter(({ factor }) => factor === contextSwitchingFactor)\n .map(({ id }) => activeTeam?.find(m => m.id === id));\n\n if (!unhealthyUsers.length) return null;\n return (\n {\n const contextSwitchingPath = getTeamDeepDivePath({\n querystringParams: {\n [urlParamKeys.SELECTED_USER]: teamMember?.email\n },\n selectedMetric: Signals.CONTEXT_SWITCHING,\n selectedSection: teamDeepDiveSections.HEALTH_METRICS\n });\n return !!teamMember ? (\n \n \n \n \n {teamMember.name}\n \n {\": More\"}\n \n \n ) : null;\n })}\n header={\n \n \n {`${contextSwitchingFactorsMetadata[contextSwitchingFactor].title}`}\n \n }\n isExpandable={true}\n type={signalTypes.UNHEALTHY}\n />\n );\n }\n\n function getPersonDetails(\n contextSwitchingFactor: string,\n unhealthyData: ContextSwitchingDetailsType[],\n user: UserReportWithMetadataInterface\n ) {\n // if we are viewing for an individual, the contents will be the details of the category\n const detailData:\n | Record\n | Record\n | Record\n | { repos: Array }\n | undefined = unhealthyData?.find(\n ({ factor }) => factor === contextSwitchingFactor\n )?.score?.details;\n\n if (!detailData) return null;\n\n const detailListData =\n contextSwitchingFactor ===\n contextSwitchingFactors.CONTEXT_SWITCHING_TOP_PRIORITY_BUGS\n ? parseJiraP1Bugs(detailData as Record, user)\n : contextSwitchingFactor ===\n contextSwitchingFactors.CONTEXT_SWITCHING_JIRA_EPICS\n ? parseJiraEpics(detailData as Record, user)\n : contextSwitchingFactor ===\n contextSwitchingFactors.CONTEXT_SWITCHING_CHAT_CHANNELS\n ? parseSlackChannelInterruptions(\n detailData as Record,\n user\n )\n : contextSwitchingFactor ===\n contextSwitchingFactors.CONTEXT_SWITCHING_MEETINGS\n ? parseMeetings(detailData as Record)\n : contextSwitchingFactor ===\n contextSwitchingFactors.CONTEXT_SWITCHING_PR_REPOS\n ? parsePRRepos(detailData.repos as Array, user)\n : [];\n\n return contextSwitchingFactor ===\n contextSwitchingFactors.CONTEXT_SWITCHING_CHAT_CHANNELS ? (\n \n {detailListData[0]}\n \n ) : (\n {\n return !!d ? (\n \n {d}\n \n ) : null;\n })}\n header={\n \n \n {`${contextSwitchingFactorsMetadata[contextSwitchingFactor].title}`}\n \n }\n isExpandable={true}\n type={signalTypes.UNHEALTHY}\n />\n );\n }\n\n // note: if you don't have the key on the container then an odd bug occurs where data for a person stays in\n // the list when toggling a different person or the team\n return (\n \n Context Switching Factors\n {Object.entries(contextSwitchingFactors).map(([, v]) =>\n chartView === \"team\"\n ? getTeamDetails(v, unhealthyContextSwitchingData)\n : getPersonDetails(v, unhealthyContextSwitchingData, chartView)\n )}\n \n );\n};\n\nexport default MetricTileContextSwitchingDetails;\n","import React from \"react\";\nimport { isEmpty, lowerCase } from \"lodash\";\nimport styled from \"styled-components\";\nimport {\n DeepDiveDataRecord,\n PeopleMetrics\n} from \"../../interfaces/team-deep-dive\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\ntype Props = {\n testId?: string;\n className?: string;\n metricTitle: PeopleMetrics;\n mostRecentData?: DeepDiveDataRecord;\n chartView: UserReportWithMetadataInterface;\n};\n\nconst SignalNotInDropdown = styled.div<{ healthy: boolean }>`\n margin-bottom: 0.5rem;\n width: 100%;\n padding: 1rem 0 1rem 1rem;\n background-color: ${props => `${props.theme.colors.all.white}`};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n box-shadow: ${props =>\n `inset 5px 0px ${\n props.healthy\n ? props.theme.colors.all.marvelMint\n : props.theme.colors.all.rogue\n }`};\n`;\nexport const MetricTileDeepWorkDetails = ({\n mostRecentData,\n chartView,\n testId = \"testId\"\n}: Props): JSX.Element | null => {\n const userScores = mostRecentData?.peopleScores.find(\n record => record.user === chartView.id\n );\n\n if (isEmpty(userScores?.DEEP_WORK?.CALLOUT_DETAILS)) {\n return null;\n }\n\n return (\n {`${\n chartView.name\n } has low deep work due to ${Object.values(\n userScores?.[\"DEEP_WORK\"][\"CALLOUT_DETAILS\"] || {}\n ).map((submetricValue, submetricIndex) => {\n return Object.keys(submetricValue?.[\"DETAILS\"] || {})\n .map(key => {\n return lowerCase(key === \"MINUTES\" ? \"CHAT_INTERRUPTIONS\" : key);\n })\n .reduce((acc, curr, index, array) => {\n return `${acc}${\n index === 0 && submetricIndex === 0\n ? \"\"\n : index === array.length - 1 &&\n submetricIndex ===\n Object.values(\n userScores?.[\"DEEP_WORK\"][\"CALLOUT_DETAILS\"] || {}\n ).length -\n 1\n ? \" and \"\n : \", \"\n }${curr}`;\n }, \"\");\n })}.`}\n );\n};\n\nexport default MetricTileDeepWorkDetails;\n","import React from \"react\";\nimport { inRange, partition, lowerCase, capitalize, isNil, get } from \"lodash\";\nimport styled from \"styled-components/macro\";\nimport {\n DeepDiveData,\n PeopleMetrics,\n DeepDiveDataRecord\n} from \"../../interfaces/team-deep-dive\";\nimport SignalTypeContainer from \"../SignalTypeContainer/SignalTypeContainer\";\nimport WarningTriangle from \"../WarningTriangle/WarningTriangle\";\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\nimport { hexToRgb } from \"../../utils/color\";\nimport {\n teamDeepDiveSections,\n healthFactorsMetadata,\n healthScoreRanges,\n Signals,\n signalTypes,\n urlParamKeys\n} from \"../../constants/constants\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\nimport InfoPopups from \"../InfoPopups/InfoPopups\";\nimport MetricCalloutDetails from \"../MetricCalloutDetails/MetricCalloutDetails\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport MetricTileContextSwitchingDetails from \"../MetricTileContextSwitchingDetails/MetricTileContextSwitchingDetails\";\nimport MetricTileDeepWorkDetails from \"../MetricTileDeepWorkDetails/MetricTileDeepWorkDetails\";\nimport { getSelectableTeamMembers } from \"../../utils/people-picker\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\nconst Container = styled.section`\n display: flex;\n flex-direction: column;\n padding: 1.6rem;\n background-color: ${props =>\n `${hexToRgb({ hex: props.theme.colors.all.lightJean, opacity: 0.5 })}`};\n width: 26.4rem;\n flex-wrap: wrap;\n margin-bottom: auto;\n\n & + & {\n margin-left: ${props => props.theme.grid.gap};\n }\n`;\n\nconst Name = styled.header`\n font-family: ${props => props.theme.fonts.header.name}, serif;\n font-size: ${props => props.theme.fonts.header.sizes.sm};\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n`;\n\nconst MetricCircle = styled.div<{ metricType: string }>`\n height: 1.75rem;\n width: 1.75rem;\n border-radius: 50%;\n background-color: ${props =>\n props.theme.colors.chart.healthFactors[props.metricType] || \"white\"};\n`;\n\nconst MetricCircleWrapper = styled.div`\n margin-right: 1rem;\n margin-left: 0.5rem;\n max-width: 9.9rem;\n`;\n\nconst SectionHeader = styled.header`\n font-family: ${props => props.theme.fonts.primary.name}, serif;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n border-bottom: ${props => `1px solid ${props.theme.colors.all.jean}`};\n`;\n\nconst SectionContainer = styled.div`\n margin-top: 1.5rem;\n width: 100%;\n`;\n\nconst TileHeader = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n padding-bottom: 1rem;\n align-items: center;\n`;\n\nconst AlertTriangle = styled(WarningTriangle)`\n margin-top: -0.5rem;\n`;\n\nconst SignalType = styled(SignalTypeContainer)`\n margin-bottom: 0.5rem;\n width: 100%;\n`;\n\nconst SignalInDropdown = styled.div`\n margin-top: 0.5rem;\n padding: 0.5rem;\n`;\n\nconst SignalDefinition = styled.span<{ signal: string }>`\n background-color: ${props => props.theme.colors.signalHealth[props.signal]};\n margin: 1rem 0;\n padding: 0 0.5rem;\n border-radius: 3px;\n display: inline-flex;\n font-family: ${props => props.theme.fonts.primary.name}, serif;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\n\nconst SignalNotInDropdown = styled.div<{ healthy: boolean }>`\n margin-bottom: 0.5rem;\n width: 100%;\n padding: 1rem 0 1rem 1rem;\n background-color: ${props => `${props.theme.colors.all.white}`};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n box-shadow: ${props =>\n `inset 5px 0px ${\n props.healthy\n ? props.theme.colors.all.marvelMint\n : props.theme.colors.all.rogue\n }`};\n`;\n\nconst Avatar = styled(SlackAvatar)`\n border-radius: 50%;\n height: 3.5rem;\n width: 3.5rem;\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.border}`};\n`;\n\nconst TeamMemberName = styled.strong`\n margin-left: 1rem;\n`;\n\nconst DeepDiveLink = styled(RouteLink)`\n align-items: center;\n display: flex;\n &,\n &:visited {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n text-decoration: none;\n }\n`;\ntype Props = {\n metricTitle: PeopleMetrics;\n data?: DeepDiveData;\n chartView: UserReportWithMetadataInterface | \"team\";\n testId?: string;\n};\nconst MetricCalloutTile = ({\n metricTitle,\n data,\n chartView,\n testId = \"testId\"\n}: Props): JSX.Element | null => {\n const thisTestId = `${testId}-metric-callout-tile`;\n const { getTeamDeepDivePath, urlParams, teamDeepDiveParams } = useUrlParams();\n const user = useSelector((state: AppStateInterface) => get(state, \"user\"));\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const selectableTeamMembers = getSelectableTeamMembers({\n user,\n flags,\n teamDeepDiveParams: {\n ...teamDeepDiveParams,\n selectedMetric: metricTitle\n },\n urlParams\n });\n const visibleTeamMembers = urlParams.team?.teamMembers.filter(\n m =>\n selectableTeamMembers.includes(m.id) &&\n (chartView === \"team\" || chartView.id === m.id)\n );\n const mostRecentData = data?.sort((a, b) =>\n b.dateEnd.localeCompare(a.dateEnd)\n )?.[0];\n const sanitizedMostRecentData: DeepDiveDataRecord | null = !!mostRecentData?.peopleScores\n ? {\n ...mostRecentData,\n peopleScores: mostRecentData?.peopleScores?.filter(person => {\n return !(metricTitle === \"ALWAYS_ON\" && !person.ALWAYS_ON);\n })\n }\n : null;\n\n if (!sanitizedMostRecentData || !visibleTeamMembers?.length) return null;\n function scoreToSignal(score?: number | undefined | null) {\n // truthy checks of score return false when score is 0, so we check explicitly for undefined\n if (score === undefined || score === null) return undefined;\n return Object.keys(healthScoreRanges)[\n Object.values(healthScoreRanges).findIndex(r =>\n inRange(score, r[0], r[1])\n )\n ];\n }\n const metricSignal = scoreToSignal(\n sanitizedMostRecentData?.teamScores?.[metricTitle]\n );\n\n if (!metricSignal) {\n return null;\n }\n\n const [\n unhealthyPeopleIds,\n healthyPeopleIds\n ] = partition(sanitizedMostRecentData?.peopleScores, peopleScore =>\n metricTitle === \"DEEP_WORK\"\n ? peopleScore.DEEP_WORK.HOURS?.[\"TOTAL\"] === \"LOW\"\n : metricTitle === \"ALWAYS_ON\"\n ? peopleScore.ALWAYS_ON && peopleScore.ALWAYS_ON !== \"NORMAL\"\n : metricTitle === \"CONTEXT_SWITCHING\"\n ? (!isNil(peopleScore.CONTEXT_SWITCHING[\"TOTAL\"]) &&\n peopleScore.CONTEXT_SWITCHING[\"TOTAL\"][\"bucket\"]) === \"MORE\"\n : metricTitle === \"CHAT_INTERRUPTIONS\"\n ? peopleScore.CHAT_INTERRUPTIONS[\"TOTAL\"] === \"HIGH\"\n : true\n );\n\n const unhealthyPeople =\n visibleTeamMembers?.filter(m => {\n return unhealthyPeopleIds.map(u => u.user).includes(m.id);\n }) || [];\n\n const healthyPeople =\n visibleTeamMembers?.filter(m => {\n return healthyPeopleIds.map(u => u.user).includes(m.id);\n }) || [];\n function getPathFromEmail(email: string) {\n return getTeamDeepDivePath({\n querystringParams: {\n [urlParamKeys.SELECTED_USER]: email\n },\n selectedMetric: metricTitle,\n selectedSection: teamDeepDiveSections.HEALTH_METRICS\n });\n }\n\n const shouldShowTeamMetricSignal = !!metricSignal && chartView === \"team\";\n return (\n \n \n {!!unhealthyPeople.length && (\n \n )}\n \n \n \n\n {healthFactorsMetadata[metricTitle]?.title}\n \n \n \n {shouldShowTeamMetricSignal && (\n
    \n Health Score\n \n {metricSignal}\n \n
    \n )}\n {unhealthyPeople.map(teamMember => {\n return (\n \n \n \n \n {teamMember.name}\n \n {unhealthyPeopleIds\n ?.filter(u => u.user === teamMember.id)\n ?.map(u =>\n metricTitle === Signals.DEEP_WORK\n ? u.DEEP_WORK.HOURS?.[\"TOTAL\"]\n : metricTitle === Signals.ALWAYS_ON\n ? u.ALWAYS_ON\n : metricTitle === Signals.CONTEXT_SWITCHING\n ? u.CONTEXT_SWITCHING[\"TOTAL\"]?.bucket\n : metricTitle === Signals.CHAT_INTERRUPTIONS\n ? u.CHAT_INTERRUPTIONS[\"TOTAL\"]\n : \"\"\n )\n ?.filter(s => !isNil(s))\n ?.map(\n s =>\n `: ${capitalize(\n lowerCase((s as string | number).toString())\n )}`\n )}\n \n \n );\n })}\n {!!healthyPeople.length && chartView !== \"team\" && (\n \n \n \n \n {chartView.name}\n \n {healthyPeopleIds\n ?.filter(u => u.user === chartView.id)\n ?.map(u =>\n metricTitle === Signals.DEEP_WORK\n ? u.DEEP_WORK.HOURS?.[\"TOTAL\"]\n : metricTitle === Signals.ALWAYS_ON\n ? u.ALWAYS_ON || \"Normal\"\n : metricTitle === Signals.CONTEXT_SWITCHING\n ? u.CONTEXT_SWITCHING[\"TOTAL\"]?.bucket\n : metricTitle === Signals.CHAT_INTERRUPTIONS\n ? u.CHAT_INTERRUPTIONS[\"TOTAL\"]\n : \"\"\n )\n ?.filter(s => !isNil(s))\n ?.map(\n s =>\n `: ${capitalize(\n lowerCase((s as string | number).toString())\n )}`\n )}\n \n \n )}\n {chartView !== \"team\" && metricTitle === \"DEEP_WORK\" && (\n \n )}\n {!!healthyPeople.length && chartView === \"team\" && (\n {\n return (\n \n \n \n \n {teamMember.name}\n \n \n \n );\n })}\n header={\n {`${healthyPeople.length} Healthy Team Member${\n healthyPeople.length === 1 ? \"\" : \"s\"\n }`}\n }\n isExpandable={true}\n type={signalTypes.HEALTHY}\n />\n )}\n \n \n
    \n
    \n );\n};\n\nexport default MetricCalloutTile;\n","import React, { useEffect } from \"react\";\nimport styled, { withTheme } from \"styled-components/macro\";\nimport ChartPeopleHealth from \"../ChartPeopleHealth/ChartPeopleHealth\";\nimport MetricCalloutTile from \"../MetricCalloutTile/MetricCalloutTile\";\nimport {\n DeepDiveData,\n PeopleMetrics,\n SelectablePeopleMetrics\n} from \"../../interfaces/team-deep-dive\";\nimport ErrorLevelMedium from \"../ErrorLevels/ErrorLevelMedium\";\nimport { ErrorBoundary } from \"@sentry/react\";\nimport {\n healthFactorsMetadata,\n peopleHealthSignals,\n Signals,\n SOURCES_DESCRIPTION_MAP,\n teamDeepDiveSections,\n urlParamKeys\n} from \"../../constants/constants\";\nimport { UserReportWithMetadataInterface } from \"../../interfaces/user\";\nimport RouteLinkTabs from \"../RouteLinkTabs/RouteLinkTabs\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport Icon from \"../Icon/Icon\";\nimport Tooltip from \"../Tooltip/Tooltip\";\nimport informationText from \"../../constants/peopleHealthUnderstandability.json\";\nimport InfoPopups from \"../InfoPopups/InfoPopups\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { useHistory } from \"react-router-dom\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport { getSelectableTeamMembers } from \"../../utils/people-picker\";\nimport InformationText from \"../../constants/informationText.json\";\n\nconst Chart = styled.figure`\n display: flex;\n justify-content: flex-start;\n margin-bottom: 0.5rem;\n`;\n\nconst StyledMetricIcon = styled(Icon)`\n font-size: 1.1rem;\n &:hover {\n color: ${props => props.theme.colors.brand.auroraTeal};\n }\n`;\n\nconst ChartTitle = styled.div`\n position: relative;\n margin-bottom: 4.5rem;\n display: flex;\n flex-direction: row;\n align-items: center;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n padding-bottom: 1.6rem;\n`;\n\nconst TooltipPopup = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst SourcesList = styled.div`\n display: flex;\n flex-direction: column;\n margin-left: 1rem;\n`;\n\nconst SourceIcon = styled(Icon)`\n margin-right: 0.8rem;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n color: ${props => props.theme.colors.all.wolverine};\n`;\n\nconst MetricTileContainer = styled.div`\n display: flex;\n flex-direction: row;\n`;\nconst PeopleHealthTabs = styled(RouteLinkTabs)`\n padding-top: ${props => props.theme.grid.gap};\n`;\nconst StyledIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n`;\nconst StyledEmptyState = styled(EmptyState)`\n > div {\n max-width: 100rem;\n }\n`;\nconst DisclaimerContainer = styled.div`\n display: flex;\n justify-content: space-between;\n flex-direction: row-reverse;\n`;\nconst Disclaimer = styled.em`\n color: ${props => props.theme.colors.all.storm};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\n\ntype Props = {\n data?: DeepDiveData;\n isFetchingData: boolean;\n error: boolean;\n theme: any;\n selectedUser: UserReportWithMetadataInterface | \"team\";\n};\n\nconst PeopleHealth = ({\n data,\n isFetchingData,\n error,\n selectedUser,\n theme\n}: Props): JSX.Element => {\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const user = useSelector((state: AppStateInterface) => state.user);\n const {\n teamDeepDiveParams,\n getTeamDeepDivePath,\n urlParams,\n updateUrlParams\n } = useUrlParams();\n const history = useHistory();\n const selectedMetric = teamDeepDiveParams.selectedMetric as SelectablePeopleMetrics;\n const selectedSection = teamDeepDiveParams.selectedSection as string;\n\n const selectableTeamMembers = getSelectableTeamMembers({\n user,\n flags,\n teamDeepDiveParams: {\n ...teamDeepDiveParams,\n selectedMetric: selectedMetric\n },\n urlParams\n });\n\n const canViewSelectedData =\n (selectedUser === \"team\" &&\n (flags?.[\"transparent-data-for-peers\"] ||\n selectedMetric !== Signals.ALWAYS_ON)) ||\n (selectedUser !== \"team\" &&\n selectableTeamMembers.includes(selectedUser.id));\n const setSelectedMetric = (\n updatedSelectedMetric: SelectablePeopleMetrics\n ) => {\n const teamDeepDivePath = getTeamDeepDivePath({\n selectedSection: teamDeepDiveSections.HEALTH_METRICS,\n selectedMetric: updatedSelectedMetric\n });\n history.push(teamDeepDivePath);\n };\n const setSelectedUser = (updatedSelectedUser: string) => {\n updateUrlParams({\n [urlParamKeys.SELECTED_USER]: updatedSelectedUser\n });\n };\n const showTabs =\n teamDeepDiveParams.selectedSection !== teamDeepDiveSections.PEOPLE_HEALTH;\n const showMetricTiles = flags?.[\"team-deep-dive-metric-callouts\"];\n\n // FIXME: replace these with true redirects\n useEffect(() => {\n // If one person is selected, the People Health metric no longer applies. It applies to teams.\n // Move players to Deep Work if they are in People Health when they select an individual.\n if (selectedMetric === \"OVERALL_TEAM_HEALTH\" && selectedUser !== \"team\") {\n setSelectedUser(\"team\");\n }\n\n if (\n selectedMetric === \"OVERALL_TEAM_HEALTH\" &&\n selectedSection === \"health-metrics\"\n ) {\n setSelectedMetric(\"DEEP_WORK\");\n }\n }, [selectedSection, selectedMetric, selectedUser]);\n\n const selectableMetricOptions = peopleHealthSignals.map(metric => {\n return {\n title: healthFactorsMetadata[metric]?.title,\n path: getTeamDeepDivePath({\n selectedSection:\n selectedSection === teamDeepDiveSections.HEALTH_METRICS\n ? teamDeepDiveSections.HEALTH_METRICS\n : teamDeepDiveSections.PEOPLE_HEALTH,\n selectedMetric: metric\n }),\n id: metric,\n isDisabled:\n metric === Signals.ALWAYS_ON &&\n !(\n urlParams.team?.teamMembers?.find(m => m.id === user.id) ||\n flags?.[\"team-deep-dive-metric-callouts\"]\n )\n };\n });\n\n return error ? (\n \n \n \n ) : (\n <>\n {showTabs && (\n \n )}\n {canViewSelectedData ? (\n \n \n \n Sources:\n \n {informationText[selectedMetric].sources.map(source => {\n return (\n \n \n {SOURCES_DESCRIPTION_MAP[source].displayText}\n \n );\n })}\n \n \n }\n placement={\"top\"}\n trigger={\n \n }\n testId=\"people-health-ruler-tooltip\"\n />\n {selectedMetric === \"OVERALL_TEAM_HEALTH\" && (\n \n {InformationText[\"team-insight-disclaimer\"]}\n \n )}\n {selectedMetric === Signals.ALWAYS_ON && (\n \n This insight is available for managers and yourself.\n \n )}\n \n \n \n \n \n {healthFactorsMetadata[selectedMetric]?.title}\n {selectedUser !== \"team\" ? `: ${selectedUser.name}` : ``}\n \n \n {showMetricTiles && (\n \n {selectableMetricOptions.map(metric => {\n return (\n \n );\n })}\n \n )}\n \n }\n />\n ) : (\n }\n testId={\"always-on-empty-state\"}\n />\n )}\n \n );\n};\n\nexport default withTheme(PeopleHealth);\n","import { AxiosResponse } from \"axios\";\nimport api from \"./api\";\nimport {\n teamDeepDiveSectionLabels,\n teamDeepDiveSections,\n healthFactorsMetadata,\n pageIds,\n pageMetadata\n} from \"../constants/constants\";\nimport { getPageTitle } from \"./router\";\nimport {\n DeepDiveData,\n PeopleMetrics,\n RawDeepDiveData,\n UserDeepDiveData\n} from \"../interfaces/team-deep-dive\";\nimport { mapKeys } from \"lodash\";\n\n// typescript props\ntype RequestProps = {\n accessToken: string;\n tenantId: number;\n params: {\n users: number[];\n endDate: string;\n endSprintId?: string;\n teamId?: string;\n };\n};\n\nexport const requestTeamDeepDiveData = async ({\n accessToken,\n tenantId,\n params\n}: RequestProps): Promise => {\n const response: AxiosResponse = await api.get<\n RawDeepDiveData\n >(`/${tenantId}/health/people`, {\n headers: {\n Authorization: `Bearer ${accessToken}`\n },\n params: {\n users: params.users.join(\",\"),\n endDate: params.endDate,\n teamId: params.teamId,\n endSprintId: params.endSprintId\n }\n });\n return response.data;\n};\n\nexport const getTeamDeepDivePageTitle = (metric: string): string => {\n // this is the OVERALL_TEAM_HEALTH TDD metric, not the TDD section\n const metricTitle =\n metric === \"OVERALL_TEAM_HEALTH\"\n ? teamDeepDiveSectionLabels[teamDeepDiveSections.PEOPLE_HEALTH]\n : healthFactorsMetadata[metric]?.title;\n const teamDeepDiveTitle = pageMetadata[pageIds.TEAM_DEEP_DIVE].title;\n return getPageTitle(\n `${!!metricTitle ? `${metricTitle} - ` : \"\"}${teamDeepDiveTitle}`\n );\n};\n\nexport const transformTeamDeepDiveData = (\n data: RawDeepDiveData\n): DeepDiveData => {\n const transformHandler = (value: any, key: string) =>\n key.replace(/SLACK/, \"CHAT\");\n return data.map(d => {\n return {\n ...d,\n teamScores: mapKeys(d.teamScores, transformHandler) as Record<\n PeopleMetrics,\n number\n >,\n peopleScores: d.peopleScores.map(scores => {\n return mapKeys(\n {\n ...scores,\n CONTEXT_SWITCHING: mapKeys(\n scores.CONTEXT_SWITCHING,\n transformHandler\n )\n },\n transformHandler\n );\n }) as Array\n };\n });\n};\n","import { useMemo } from \"react\";\nimport { sortBy } from \"lodash\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useQuery } from \"react-query\";\nimport { useUrlParams } from \"./useUrlParams\";\n\n// interfaces\nimport { DeepDiveData } from \"../interfaces/team-deep-dive\";\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport {\n requestTeamDeepDiveData,\n transformTeamDeepDiveData\n} from \"../utils/team-deep-dive\";\nimport { UserReportWithMetadataInterface } from \"../interfaces/user\";\n\ninterface HookValues {\n data?: DeepDiveData;\n isLoading: boolean;\n isError: boolean;\n}\n\nexport const useTeamDeepDiveData: (\n teamMembersToRequest?: Array\n) => HookValues = (teamMembersToRequest = []) => {\n const accessToken: string = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const { urlParams } = useUrlParams();\n const sprintId = urlParams.sprintId;\n const endDate = urlParams.endDate;\n\n const tenantId: number = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const teamId = urlParams.team?.teamId;\n const teamMemberIds = useMemo(() => teamMembersToRequest.map(t => t.id), [\n teamMembersToRequest\n ]);\n const params = useMemo(\n () => ({\n accessToken,\n tenantId,\n params: !!sprintId\n ? {\n users: teamMemberIds,\n endDate,\n endSprintId: sprintId,\n teamId\n }\n : {\n users: teamMemberIds,\n endDate,\n teamId\n }\n }),\n [accessToken, endDate, sprintId, teamMemberIds, tenantId, teamId]\n );\n\n return useQuery(\n [\"team-deep-dive\", params],\n () =>\n // TODO: remove this temporary transform on the fetched data once the backend sends updated keys\n requestTeamDeepDiveData(params).then(fetchedData =>\n sortBy(transformTeamDeepDiveData(fetchedData), record => record.dateEnd)\n ),\n {\n enabled:\n !!accessToken && !!tenantId && !!teamMemberIds.length && !!endDate\n }\n );\n};\n","import React, { useEffect } from \"react\";\nimport styled from \"styled-components/macro\";\nimport informationText from \"../../constants/informationText.json\";\nimport { get } from \"lodash\";\n\n// components\nimport DataDisclaimer from \"../DataDisclaimer/DataDisclaimer\";\nimport HtmlText from \"../HtmlText/HtmlText\";\nimport Icon from \"../Icon/Icon\";\nimport InfoPopup from \"../InfoPopup/InfoPopup\";\nimport MeetingInsights from \"../MeetingInsights/MeetingInsights\";\nimport PageTitle from \"../PageTitle/PageTitle\";\nimport PeopleHealth from \"../PeopleHealth/PeopleHealth\";\nimport PeoplePicker from \"../PeoplePicker/PeoplePicker\";\nimport RouteLinkTabs from \"../RouteLinkTabs/RouteLinkTabs\";\nimport TemplateHeader from \"../TemplateHeader/TemplateHeader\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\n\n// constants\nimport {\n teamDeepDiveSectionLabels,\n teamDeepDiveSections,\n pageIds,\n Signals,\n urlParamKeys\n} from \"../../constants/constants\";\n\n// hooks\nimport { Redirect, Route, Switch, useLocation } from \"react-router-dom\";\nimport { useSelector } from \"react-redux\";\nimport { useTeamDeepDiveData } from \"../../hooks/useTeamDeepDiveData\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// utils\nimport { getSelectableTeamMembers } from \"../../utils/people-picker\";\nimport { getTeamNameFromTeam } from \"../../utils/teams\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport EmptyState from \"../EmptyState/EmptyState\";\nimport InformationText from \"../../constants/informationText.json\";\nimport { getTeamDeepDivePageTitle } from \"../../utils/team-deep-dive\";\n\n// styled components\nconst StyledTemplateHeader = styled(TemplateHeader)`\n font-size: 2rem;\n width: 100%;\n`;\n\nconst ContentWrapper = styled.div`\n background: ${props => props.theme.colors.all.white};\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n width: 100%;\n margin-bottom: 2rem;\n`;\n\nconst Title = styled(PageTitle)`\n padding-bottom: 0.8rem;\n`;\n\nconst HeaderContent = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n width: 100%;\n`;\n\nconst SubRouteContainer = styled.div`\n margin: 0 2rem;\n`;\n\nconst TitleWrapper = styled.span`\n align-items: center;\n display: flex;\n`;\nconst TitleText = styled.span`\n margin-right: 1rem;\n`;\nconst PopupHeader = styled.h4`\n font-family: ${props => props.theme.fonts.header.name}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n margin: 0;\n`;\nconst PopupContent = styled.div`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\nconst LinkIcon = styled(Icon)`\n color: inherit;\n margin-right: 0.5rem;\n`;\nconst LearnLink = styled.a`\n align-items: center;\n display: flex;\n && {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n text-decoration: none;\n\n & ${LinkIcon} {\n color: inherit;\n }\n }\n`;\nconst StyledTabs = styled(RouteLinkTabs)`\n padding-bottom: 0.5rem;\n margin-bottom: 0.5rem;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n`;\nconst Footer = styled.footer`\n display: flex;\n justify-content: flex-end;\n margin: 1.6rem 0;\n`;\n\nconst StyledIcon = styled(Icon)`\n color: ${props => props.theme.colors.all.wolverine};\n`;\n\nconst StyledEmptyState = styled(EmptyState)`\n > div {\n max-width: 100rem;\n }\n`;\n\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst TeamDeepDivePage = ({ className, testId = \"testId\" }: Props) => {\n const thisTestId = `${testId}-team-deep-dive-page`;\n const { trackEvent } = useTracking();\n const location = useLocation();\n\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const user = useSelector((state: AppStateInterface) => get(state, \"user\"));\n const { urlParams, teamDeepDiveParams, getTeamDeepDivePath } = useUrlParams();\n const activeTeam = urlParams.team;\n const selectedUserEmail = teamDeepDiveParams.selectedUser;\n const {\n selectedSection: teamDeepDiveSelectedSection,\n selectedMetric: teamDeepDiveSelectedMetric\n } = teamDeepDiveParams;\n\n // page title change\n useEffect(() => {\n document.title = getTeamDeepDivePageTitle(teamDeepDiveSelectedMetric);\n }, [location, teamDeepDiveSelectedMetric]);\n\n const selectedUser =\n activeTeam?.teamMembers.find(m => m.email === selectedUserEmail) || \"team\";\n const selectableTeamMembers = getSelectableTeamMembers({\n user,\n flags,\n teamDeepDiveParams: teamDeepDiveParams,\n urlParams\n });\n\n const {\n data: peopleHealthData,\n isLoading: isFetchingPeopleHealthData,\n isError: errorPeopleHealthData\n } = useTeamDeepDiveData(activeTeam?.teamMembers);\n const canViewMeetingInsightsTab = flags?.[\"team-deep-dive-meeting-insights\"];\n\n // don't show team avatar if on either meeting-insights tabs (meeting\n // distribution or meeting length) or always on tab\n const canViewTeamData =\n //FIXME: confirm this is the flag result for the roles set and create/rename flag for more generic use\n !(\n (teamDeepDiveSelectedSection === teamDeepDiveSections.HEALTH_METRICS &&\n teamDeepDiveSelectedMetric === Signals.ALWAYS_ON) ||\n teamDeepDiveSelectedSection === teamDeepDiveSections.MEETING_INSIGHTS\n ) || flags?.[\"transparent-data-for-peers\"];\n\n if (\n !(selectedUser === \"team\"\n ? canViewTeamData\n : selectableTeamMembers.includes(selectedUser.id)) &&\n selectableTeamMembers.includes(user.id)\n ) {\n // match the user to a team member via the userid\n const userFromTeamMembers = activeTeam?.teamMembers.find(\n t => t.id === user.id\n );\n // FIXME: we can't show team for meeting distribution, for example, because\n // we can only show the individual user If the visible team members change\n // and the selected user is no longer visible, default to showing the root\n // user If the visible team members change and the team is selected but no\n // longer visible, also show the root user Rules for when to reset the user\n // can be found at\n // https://www.notion.so/People-Picker-Privacy-Rules-71740ac7fd34442e802abdba4e8c4931\n //\n // redirect to the team members email, which is what we're using for the url\n // params for consistency (rather than the current user's email address)\n if (!!userFromTeamMembers) {\n return (\n \n );\n }\n }\n\n const meetingInsightsDisabled =\n !flags?.[\"transparent-data-for-peers\"] &&\n !urlParams.team?.teamMembers?.find(t => t.id === user.id);\n const selectableSectionOptions = Object.values(teamDeepDiveSections)\n .filter(section =>\n section === teamDeepDiveSections.MEETING_INSIGHTS\n ? canViewMeetingInsightsTab\n : true\n )\n .map(section => ({\n id: section,\n isDisabled:\n section === teamDeepDiveSections.MEETING_INSIGHTS &&\n meetingInsightsDisabled,\n path: getTeamDeepDivePath({\n selectedSection: section\n }),\n title: teamDeepDiveSectionLabels[section]\n }));\n\n function onClickLearnLink(e: React.MouseEvent) {\n trackEvent({\n e,\n label: `${thisTestId}-learn-more-link`,\n value: \"link clicked\"\n });\n }\n\n const teamName = activeTeam ? getTeamNameFromTeam(activeTeam) : null;\n const titleSuffix = teamName ? `: ${teamName}` : \"\";\n\n const headerContent = (\n \n \n \n Team Deep Dive\n {titleSuffix}\n \n What is Team Deep Dive?}\n content={\n \n \n \n \n Learn more about Uplevel metrics\n \n \n }\n name=\"team-deep-dive\"\n testId={thisTestId}\n />\n \n }\n testId={pageIds.TEAM_DEEP_DIVE}\n />\n \n \n );\n\n return flags?.[pageIds.TEAM_DEEP_DIVE] ? (\n \n \n \n \n \n \n {canViewMeetingInsightsTab && (\n \n {meetingInsightsDisabled ? (\n }\n testId={\"always-on-empty-state\"}\n />\n ) : (\n \n )}\n \n )}\n\n {/* TODO: temp redirect until it seems like people are not bookmarking overall-team-health anymore */}\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n
    \n \n
    \n
    \n
    \n
    \n ) : (\n \n );\n};\n\nexport default TeamDeepDivePage;\n","import { startCase } from \"lodash\";\nimport moment from \"moment\";\nimport { currentTheme } from \"../../themes/currentTheme\";\n\n// constants\nimport {\n momentUnitTypes,\n overviewHealthTypes,\n healthFactorsMetadata,\n healthScoreRanges,\n healthScoreTypes,\n sprintStates\n} from \"../../constants/constants\";\n\n// interfaces\nimport { SprintHealthDataPointInterface } from \"../../interfaces/sprint-metadata\";\n\n// utils\nimport {\n getAdjustedTooltipPosition,\n getSprintHealthTooltip\n} from \"../../utils/chart\";\nimport { hexToRgb } from \"../../utils/color\";\nimport { createTimestamp, formatTimestamp } from \"../../utils/date\";\n\n// typescript props\ntype Props = {\n data: Array;\n hasPeopleHealthData: boolean;\n};\n\ntype SeriesData = {\n name: string;\n color: string;\n marker: {\n fillColor: string;\n lineColor: string;\n };\n data: Array;\n opacity?: number;\n zIndex?: number;\n};\n\nconst config = ({ data, hasPeopleHealthData }: Props) => {\n let series: Array = [\n {\n name: healthFactorsMetadata[overviewHealthTypes.PROJECT_HEALTH].title,\n color:\n currentTheme.colors.chart.healthFactors[\n overviewHealthTypes.PROJECT_HEALTH\n ],\n marker: {\n fillColor:\n currentTheme.colors.chart.healthFactors[\n overviewHealthTypes.PROJECT_HEALTH\n ],\n lineColor:\n currentTheme.colors.chart.healthFactors[\n overviewHealthTypes.PROJECT_HEALTH\n ]\n },\n data: data.map(d => {\n return { ...d, y: d.projectHealth };\n }),\n opacity: 0.75\n }\n ];\n\n if (hasPeopleHealthData) {\n series = [\n ...series,\n {\n name: healthFactorsMetadata[overviewHealthTypes.AVERAGE_HEALTH].title,\n color:\n currentTheme.colors.chart.healthFactors[\n overviewHealthTypes.AVERAGE_HEALTH\n ],\n marker: {\n fillColor:\n currentTheme.colors.chart.healthFactors[\n overviewHealthTypes.AVERAGE_HEALTH\n ],\n lineColor:\n currentTheme.colors.chart.healthFactors[\n overviewHealthTypes.AVERAGE_HEALTH\n ]\n },\n data: data.map(d => {\n return { ...d, y: d.averageHealth };\n }),\n zIndex: 1\n },\n {\n name: healthFactorsMetadata[overviewHealthTypes.PEOPLE_HEALTH].title,\n color:\n currentTheme.colors.chart.healthFactors[\n overviewHealthTypes.PEOPLE_HEALTH\n ],\n marker: {\n fillColor:\n currentTheme.colors.chart.healthFactors[\n overviewHealthTypes.PEOPLE_HEALTH\n ],\n lineColor:\n currentTheme.colors.chart.healthFactors[\n overviewHealthTypes.PEOPLE_HEALTH\n ]\n },\n data: data.map(d => {\n return { ...d, y: d.peopleHealth };\n }),\n opacity: 0.75\n }\n ];\n }\n\n return {\n chart: {\n height: 250,\n marginLeft: 0,\n marginRight: 0,\n marginTop: 0,\n spacingBottom: 0,\n style: {\n fontFamily: currentTheme.fonts.primary.name,\n fontWeight: currentTheme.fonts.primary.weights.regular\n }\n },\n xAxis: {\n categories: data.map(d => {\n const isCurrentSprint = d.state === sprintStates.ACTIVE;\n const isSameMonth = moment(d.startAt).isSame(\n d.completeAt,\n momentUnitTypes.MONTHS\n );\n const start = formatTimestamp({\n format: \"M/DD\",\n timestamp: createTimestamp(d.startAt)\n });\n const end = formatTimestamp({\n format: isSameMonth ? \"DD\" : \"M/DD\",\n timestamp: createTimestamp(d.completeAt || new Date())\n });\n return isCurrentSprint ? \"this Sprint\" : `${start}-${end}`;\n }),\n lineColor: currentTheme.colors.all.wolverine,\n labels: {\n enabled: true,\n style: {\n color: currentTheme.colors.all.wolverine,\n fontFamily: currentTheme.fonts.subheader.name,\n fontWeight: currentTheme.fonts.subheader.weights.bold\n },\n y: 20\n }\n },\n yAxis: {\n min: 0,\n max: 105,\n endOnTick: false,\n plotBands: Object.entries(healthScoreRanges).map(([key, range]) => {\n return {\n color: hexToRgb({\n hex: currentTheme.colors.signalHealth[key],\n opacity: 0.2\n }),\n label: {\n text: startCase(key.toLowerCase()),\n verticalAlign: \"bottom\",\n y: -5\n },\n from: range[0],\n to:\n // to adjust for the ranges in constants being exclusive, restrict the top band to 100\n key === healthScoreTypes.EXCELLENT ? range[1] - 1 : range[1]\n };\n }),\n tickPositions: [\n healthScoreRanges.CONCERNING[0],\n healthScoreRanges.OK[0],\n healthScoreRanges.GOOD[0],\n healthScoreRanges.EXCELLENT[0],\n 100\n ],\n title: {\n enabled: false\n }\n },\n legend: {\n align: \"right\",\n enabled: true,\n itemDistance: 30,\n itemStyle: {\n fontWeight: currentTheme.fonts.primary.weights.book\n },\n layout: \"horizontal\",\n verticalAlign: \"bottom\",\n symbolHeight: 8,\n symbolWidth: 8,\n symbolPadding: 8\n },\n plotOptions: {\n line: {\n dataLabels: {\n enabled: false\n },\n marker: {\n symbol: \"circle\"\n },\n states: {\n hover: {\n opacity: 1\n }\n }\n }\n },\n title: {\n text: undefined\n },\n tooltip: {\n useHTML: true,\n enabled: true,\n backgroundColor: null,\n shadow: false,\n borderWidth: 0,\n borderRadius: 0,\n outside: true,\n positioner: function(w: number, h: number, point: any) {\n return getAdjustedTooltipPosition({\n currentPosition: (this as any).getPosition(w, h, point),\n windowScroll: window.scrollY\n });\n },\n formatter: function() {\n return getSprintHealthTooltip((this as any).point);\n }\n },\n series\n };\n};\nexport default config;\n","import React, { useMemo } from \"react\";\nimport { DefaultTheme } from \"styled-components/macro\";\nimport { isNull, sortBy } from \"lodash\";\n\n// components\nimport Chart from \"../Chart/Chart\";\nimport { ErrorBoundary } from \"@sentry/react\";\n\n// config\nimport generateConfig from \"./config\";\n\n// constants\nimport { SPRINT_HEALTH_CHART_NUM_SPRINTS } from \"../../constants/constants\";\n\n// hooks\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useSelector } from \"react-redux\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport {\n FilteredSprintHealthInterface,\n SprintHealthDataPointInterface,\n SprintHealthInterface\n} from \"../../interfaces/sprint-metadata\";\nimport { getFilteredSprintHealthData } from \"../../utils/health-metrics\";\n\n// typescript props\ntype Props = {\n className?: string;\n data: SprintHealthInterface;\n isFetchingData?: boolean;\n testId?: string;\n};\n\nconst ChartSprintHealth = ({\n className,\n data,\n isFetchingData = false,\n testId = \"testId\"\n}: Props) => {\n const thisTestId = `${testId}-chart-sprint-health`;\n const { trackEvent } = useTracking();\n const filteredData = getFilteredSprintHealthData(\n data\n ) as FilteredSprintHealthInterface;\n const sortedData = sortBy(Object.values(filteredData), \"startAt\").slice(\n 0,\n SPRINT_HEALTH_CHART_NUM_SPRINTS\n );\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const hasPeopleHealthData = flags?.[\"people-health-insights\"];\n\n // TODO: update this to an event for showing tooltip when this\n // bug gets fixed:\n // https://github.com/highcharts/highcharts/issues/13868\n function onChartMouseOver(e: React.MouseEvent) {\n e.persist();\n trackEvent({\n e,\n label: \"chart-sprint-health\",\n value: \"chart moused over\"\n });\n }\n function onChartMouseOut(e: React.MouseEvent) {\n e.persist();\n trackEvent({\n e,\n label: \"chart-sprint-health\",\n value: \"chart moused out\"\n });\n }\n\n const chart = useMemo(() => {\n return {\n config: generateConfig({ data: sortedData, hasPeopleHealthData }),\n id: \"sprint-health-chart\",\n isFetchingData\n };\n }, [hasPeopleHealthData, sortedData, isFetchingData]);\n\n return (\n \n \n \n \n \n );\n};\n\nexport default ChartSprintHealth;\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport healthText from \"../../constants/healthText.json\";\n\n// compomemts\nimport ChartSprintHealth from \"../ChartSprintHealth/ChartSprintHealth\";\nimport InfoPopup from \"../InfoPopup/InfoPopup\";\nimport InfoBook from \"../InfoBook/InfoBook\";\nimport SignalHealthColor from \"../SignalHealthColor/SignalHealthColor\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\nimport HtmlText from \"../HtmlText/HtmlText\";\n\n// interfaces\nimport { SprintHealthInterface } from \"../../interfaces/sprint-metadata\";\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\n\nimport informationText from \"../../constants/informationText.json\";\n\n// styled components\nconst ChartHeader = styled.header`\n align-items: flex-start;\n display: flex;\n justify-content: space-between;\n margin-bottom: 1.1rem;\n`;\nconst Title = styled.h3`\n align-items: center;\n display: flex;\n font-family: ${props => props.theme.fonts.primary}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst TitleText = styled.span`\n margin-right: 1rem;\n`;\nconst HealthScoreTitle = styled.h4`\n align-items: center;\n display: flex;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n line-height: 1;\n`;\nconst HealthScoreHeader = styled.header`\n font-size: 1.3rem;\n margin-right: 1rem;\n`;\nconst HealthScoreValue = styled(SignalHealthColor)`\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n`;\nconst Chart = styled.figure`\n margin-bottom: 0.5rem;\n`;\n\nconst PopupHeader = styled.h4`\n font-family: ${props => props.theme.fonts.header.name}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n margin: 0;\n`;\nconst PopupContent = styled.div`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n data: SprintHealthInterface;\n sprint: TimerangeMetadataInterface;\n testId?: string;\n};\n\nconst SprintHealth = ({\n className,\n data,\n sprint,\n testId = \"testId\"\n}: Props): React.ReactElement => {\n const thisTestId = `${testId}-sprint-health-chart-wrapper`;\n const bookTextContent = healthText.sprint.sprintHealth.definition;\n\n const sprintData = data?.[sprint.id];\n return (\n
    \n \n \n
    \n \n <TitleText>Sprint Health</TitleText>\n <TitleText>\n <InfoBook\n content={bookTextContent.content}\n header={bookTextContent.header}\n link={bookTextContent.link}\n name={thisTestId}\n testId={thisTestId}\n />\n </TitleText>\n <TitleText>\n <InfoPopup\n action=\"click\"\n header={<PopupHeader>Who is included?</PopupHeader>}\n content={\n <PopupContent>\n <HtmlText\n htmlText={informationText[\"sprint-who-is-included\"]}\n testId={thisTestId}\n />\n </PopupContent>\n }\n name=\"team-deep-dive\"\n testId={thisTestId}\n />\n </TitleText>\n \n
    \n {!!sprintData ? (\n \n \n Current Sprint’s Health:\n \n \n \n ) : null}\n
    \n \n \n
    \n Sprint Health chart\n
    \n
    \n
    \n
    \n );\n};\n\nexport default SprintHealth;\n","// hooks\nimport { useSelector } from \"react-redux\";\nimport { useUrlParams } from \"./useUrlParams\";\nimport { useQuery } from \"react-query\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport { requestSprintSuccess } from \"../utils/sprints\";\n\nexport const useSprintSuccessData = (canRequest = true) => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const { urlParams } = useUrlParams();\n const sprintId = urlParams.sprintId as string;\n const teamId = urlParams.teamId as string;\n\n return useQuery(\n [\"sprint-success\", { sprintId, teamId }],\n () =>\n requestSprintSuccess({\n accessToken,\n tenantId,\n params: { sprintId, teamId }\n }),\n {\n enabled: !!accessToken && !!tenantId && !!sprintId && canRequest,\n refetchOnWindowFocus: false\n }\n );\n};\n","import React from \"react\";\nimport styled from \"styled-components/macro\";\nimport workProgressText from \"../../constants/workProgressText.json\";\n\n// components\nimport InfoBook from \"../InfoBook/InfoBook\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\n\n// hooks\nimport { useSprintSuccessData } from \"../../hooks/useSprintSuccessData\";\n\n// styled components\nconst SuccessContent = styled.div`\n align-items: baseline;\n display: flex;\n line-height: 1;\n`;\nconst SuccessValue = styled.span`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n font-size: 2rem;\n`;\nconst Header = styled.h4`\n align-items: center;\n display: flex;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin-right: 0.5rem;\n\n &::after {\n content: \":\";\n }\n\n & > div {\n margin: 0.5rem;\n }\n`;\nconst Book = styled(InfoBook)`\n margin: 0 0.5rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst SprintSuccess = ({\n className,\n testId = \"testId\"\n}: Props): React.ReactElement | null => {\n const thisTestId = `${testId}-sprint-success`;\n const { data, isIdle, isLoading } = useSprintSuccessData();\n const textContent = workProgressText.sprint.projectedDone.definition;\n\n return isIdle || isLoading ? null : (\n
    \n \n \n
    \n Projected done\n \n
    \n
    \n {data?.value.toFixed(0)}%\n
    \n
    \n
    \n
    \n );\n};\n\nexport default SprintSuccess;\n","import React, { ReactElement, useMemo } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport InfoBook from \"../InfoBook/InfoBook\";\nimport SprintSuccess from \"../SprintSuccess/SprintSuccess\";\nimport WorkProgress from \"../WorkProgress/WorkProgress\";\n\n// constants\nimport workProgressText from \"../../constants/workProgressText.json\";\n\n// interfaces\nimport { getWorkItemsActivitiesTotals } from \"../../utils/work-items\";\nimport { GroupsListInterface } from \"../../interfaces/work-items\";\n\n// styled components\nconst Container = styled.div`\n width: 100%;\n`;\nconst Header = styled.header`\n align-items: flex-start;\n display: flex;\n justify-content: space-between;\n`;\nconst Title = styled.h3`\n align-items: center;\n display: flex;\n font-family: ${props => props.theme.fonts.primary}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst TitleText = styled.span`\n margin-right: 1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n data: GroupsListInterface;\n isSprintMode: boolean;\n testId?: string;\n};\n\nconst StartWorkProgress = ({\n className,\n data,\n isSprintMode,\n testId = \"testId\"\n}: Props): ReactElement | null => {\n const thisTestId = `${testId}-sprint-progress-chart-wrapper`;\n const activitiesTotals = useMemo(\n () => getWorkItemsActivitiesTotals(data.activities),\n [data]\n );\n const textContent = (isSprintMode\n ? workProgressText.sprint\n : workProgressText.kanban\n ).workProgress.definition;\n\n return (\n \n
    \n
    \n \n <TitleText>{isSprintMode ? \"Sprint\" : \"Work\"} Progress</TitleText>\n <InfoBook\n content={textContent.content}\n header={textContent.header}\n link={textContent.link}\n name={thisTestId}\n testId={thisTestId}\n />\n \n
    \n {isSprintMode ? : null}\n
    \n \n
    \n );\n};\n\nexport default StartWorkProgress;\n","import React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components/macro\";\nimport { isEmpty } from \"lodash\";\n\n// components\nimport DataDisclaimer from \"../DataDisclaimer/DataDisclaimer\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\nimport SprintHealth from \"../SprintHealth/SprintHealth\";\nimport StartWorkProgress from \"../StartWorkProgress/StartWorkProgress\";\nimport TeamRoster from \"../TeamRoster/TeamRoster\";\nimport TimeRange from \"../TimeRange/TimeRange\";\nimport TransitionWrapper from \"../TransitionWrapper/TransitionWrapper\";\n\n// hooks\nimport { useWorkItemsData } from \"../../hooks/useWorkItemsData\";\nimport { useSprintHealthData } from \"../../hooks/useSprintHealthData\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { GroupsListInterface } from \"../../interfaces/work-items\";\nimport { SprintHealthInterface } from \"../../interfaces/sprint-metadata\";\nimport { TeamInterface } from \"../../interfaces/team\";\nimport { TimerangeMetadataInterface } from \"../../interfaces/constants\";\n\n// utils\nimport { getTeamRosterFromGroupsList } from \"../../utils/work-items\";\nimport { getFilteredSprintHealthData } from \"../../utils/health-metrics\";\nimport { getTeamNameFromTeam } from \"../../utils/teams\";\nimport { timerangeTypes } from \"../../constants/constants\";\nimport { getIsSprintMode } from \"../../utils/sprints\";\n\n// styled components\nconst HeaderWrapper = styled.div`\n align-items: flex-end;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n display: flex;\n justify-content: space-between;\n margin-bottom: 1rem;\n padding-bottom: 1rem;\n`;\nconst Greeting = styled.h4`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n`;\nconst Title = styled.h3`\n font-size: 2rem;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n font-size: 2rem;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst SprintMetadata = styled.h4`\n align-items: center;\n display: flex;\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin-bottom: 0;\n`;\nconst Roster = styled(TeamRoster)`\n border-left: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n margin-left: 1rem;\n padding-left: 1rem;\n`;\nconst Charts = styled.div`\n background-color: ${props => props.theme.colors.all.lightJean};\n display: grid;\n grid-template-columns: 1fr 1fr;\n grid-gap: 0.1rem;\n margin-top: 2rem;\n`;\nconst WorkProgress = styled(StartWorkProgress)`\n background-color: ${props => props.theme.colors.all.white};\n padding-left: 1.5rem;\n max-width: ${props =>\n `calc(6*${props.theme.grid.columnWidth} + 5*${props.theme.grid.columnWidth})`};\n`;\nconst StyledSprintHealth = styled(SprintHealth)`\n background-color: ${props => props.theme.colors.all.white};\n padding-right: 1.5rem;\n max-width: ${props =>\n `calc(6*${props.theme.grid.columnWidth} + 5*${props.theme.grid.columnWidth})`};\n`;\nconst ChartWrapper = styled.div`\n background: ${props => props.theme.colors.all.white};\n`;\nconst Footer = styled.footer`\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n color: ${props => props.theme.colors.all.storm};\n display: flex;\n justify-content: flex-end;\n margin-top: 1rem;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n activeTeam: TeamInterface;\n testId?: string;\n timerange: TimerangeMetadataInterface;\n};\n\nconst StartPageSummary = ({\n activeTeam,\n className,\n testId = \"testId\",\n timerange\n}: Props): JSX.Element | null => {\n const thisTestId = `${testId}-start-page-summary`;\n const user = useSelector((state: AppStateInterface) => state.user);\n const isSprintMode = activeTeam.useSprints\n ? getIsSprintMode(timerange)\n : false;\n\n const {\n data: sprintHealthData,\n isError: isErrorSprintHealthData,\n isLoading: isLoadingSprintHealthData,\n isSuccess: isSuccessSprintHealthData\n } = useSprintHealthData();\n const {\n data,\n isError: isErrorWorkCompletionData,\n isLoading: isLoadingWorkCompletionData,\n isSuccess: isSuccessWorkCompletionData\n } = useWorkItemsData({ options: { type: \"retros\" } });\n const workCompletionData = (data as unknown) as GroupsListInterface;\n\n const customizedSprintHealthData = getFilteredSprintHealthData(\n sprintHealthData\n );\n\n return (\n
    \n \n
    \n \n
    \n Hi, {user.givenName}\n \n {isSprintMode ? \"Sprint\" : \"Workflow\"} Insights:{\" \"}\n {isSprintMode\n ? timerange.displayName\n : getTeamNameFromTeam(activeTeam)}\n \n
    \n
    \n \n \n t.name)\n }\n testId={thisTestId}\n />\n \n
    \n \n \n \n }\n testId={thisTestId}\n />\n \n \n \n }\n testId={thisTestId}\n />\n \n \n
    \n \n
    \n
    \n
    \n );\n};\n\nexport default StartPageSummary;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { flatten, isEmpty, get } from \"lodash\";\n\n// actions\nimport { storeOrganization } from \"../../actions/sessionActions\";\n\n// components\nimport Button from \"../Button/Button\";\nimport Icon from \"../Icon/Icon\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\n\n// hooks\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useQueryClient } from \"react-query\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport {\n UserReportInterface,\n UserReportWithMetadataInterface\n} from \"../../interfaces/user\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { TeamInterface } from \"../../interfaces/team\";\n\n// styled components\nconst Container = styled.div`\n padding: 1rem;\n display: flex;\n flex-direction: column;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n background-color: ${props => props.theme.colors.all.jean};\n width: 26.4rem;\n`;\n\nconst AvatarWrapper = styled.div`\n margin-left: 1rem;\n margin-right: 1rem;\n max-width: 9.9rem;\n`;\nconst Avatar = styled(SlackAvatar)`\n border-radius: 50%;\n height: 3rem;\n width: 3rem;\n border: ${props => `0.2rem solid ${props.theme.colors.border}`};\n`;\nconst StyledHeader = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n margin-bottom: 1rem;\n`;\nconst StyledReporteePill = styled.div<{ bordered: boolean }>`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n position: relative;\n border-bottom: ${props =>\n `${props.bordered ? \"0.2rem\" : 0} solid ${\n props.theme.colors.all.lightJean\n }`};\n padding-bottom: 0.5rem;\n`;\nconst ReporteeNameAndTitle = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n`;\nconst StyledIcon = styled(Icon)<{\n marginLeft: string;\n marginRight: string;\n lineArrow: boolean;\n}>`\n margin-left: ${props => props.marginLeft};\n margin-right: ${props => props.marginRight};\n color: ${props =>\n props.lineArrow\n ? props.theme.colors.all.auroraTeal\n : props.theme.colors.all.wolverine};\n`;\nconst ReportsWrapper = styled.div`\n background-color: ${props => props.theme.colors.all.white};\n padding: 0.5rem;\n display: flex;\n flex-direction: column;\n`;\nconst ReportsText = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n`;\nconst ReportsWrapperExpanded = styled.div`\n display: flex;\n flex-direction: column;\n background-color: ${props => props.theme.colors.all.white};\n`;\nconst TotalOrgText = styled.div`\n margin-top: 0.5rem;\n padding-top: 0.5rem;\n border-top: ${props => `0.2rem solid ${props.theme.colors.all.lightJean}`};\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n`;\nconst Link = styled(Button)<{ isActive: boolean }>`\n font-weight: ${props =>\n props.theme.fonts.primary.weights[props.isActive ? \"demiBold\" : \"regular\"]};\n text-align: left;\n\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n & > span {\n color: inherit !important;\n }\n }\n`;\nconst NumberText = styled.div`\n font-family: ${props => props.theme.fonts.subheader.name};\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n position: \"relative\";\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n person: UserReportWithMetadataInterface;\n isFetchingData?: boolean;\n testId?: string;\n};\n\nexport const ReportsCard = ({\n className,\n person,\n isFetchingData = false,\n testId = \"testId\"\n}: Props) => {\n const { trackEvent } = useTracking();\n const dispatch = useDispatch();\n const queryClient = useQueryClient();\n const { updateUrlParams } = useUrlParams();\n\n const [reportsDropdownOpen, setReportsDropdownOpen] = useState(false);\n const parentsOfActiveTeam = useSelector((state: AppStateInterface) =>\n get(state, \"session.organization.parentsOfActiveTeam\")\n );\n const team = person?.team;\n const reports = team?.teamMembers;\n if (!team || !reports?.length) return null;\n\n function getTotalReportsLength(\n currentReports?: Array\n ): number {\n if (!currentReports) return 0;\n const reportsOfReports = flatten(\n currentReports.map(r => r?.team?.teamMembers || [])\n );\n if (isEmpty(reportsOfReports)) return currentReports.length;\n return currentReports.length + getTotalReportsLength(reportsOfReports);\n }\n\n async function onClickFactorSet(\n e: React.MouseEvent,\n newActiveTeam: TeamInterface,\n parentsToAdd: Array\n ) {\n const updatedParents = [...parentsOfActiveTeam, ...parentsToAdd];\n const updatedUser = updatedParents[updatedParents.length - 1];\n\n dispatch(\n storeOrganization({\n parentsOfActiveTeam: updatedParents\n })\n );\n\n updateUrlParams({ teamLeadId: updatedUser.id }, false);\n\n // this is a bit duplicative with OrganiationNavigationMenu, this should be\n // in a hook somewhere central, not a super good place until we're off the\n // legacy app completely\n queryClient.invalidateQueries(\"projects-and-boards\");\n queryClient.invalidateQueries(\"sprint-metadata\");\n queryClient.invalidateQueries(\"sprint-health\");\n queryClient.invalidateQueries(\"active-board\");\n queryClient.invalidateQueries([\"teams\", { type: \"active-users-teams\" }]);\n\n // TODO: investigate why only one of these events is firing, despite similar\n // events in OrganizationNavigationMenu -- something about the component\n // getting unmounted?\n // await trackEvent({\n // e,\n // label: `team-roster-set`,\n // value: `clicked roster for ${updatedUser.name}`\n // });\n await trackEvent({\n e,\n label: \"changed-user\",\n value: `updated app to ${updatedUser.name} (${updatedUser.email})`\n });\n }\n\n function onClickDropdown(\n e: React.MouseEvent,\n dropdownOpen: boolean\n ) {\n trackEvent({\n e,\n label: `reports-dropdown-clicked`,\n value: `${dropdownOpen}`\n });\n setReportsDropdownOpen(dropdownOpen);\n }\n\n function getReportsText(currentReports?: TeamInterface) {\n if (!currentReports?.teamMembers.length) return null;\n const teamMembers = currentReports.teamMembers.filter(\n t => t.id !== currentReports.orgChartTeamLeadId\n );\n const totalReportsLength = getTotalReportsLength(teamMembers);\n return (\n \n ) =>\n onClickFactorSet(e, currentReports, [person])\n }\n testId={testId}\n >\n \n \n Direct Reports: \n {teamMembers.length}\n \n \n \n ) =>\n onClickDropdown(e, !reportsDropdownOpen)\n }\n testId={testId}\n >\n \n \n Total Employees: \n {totalReportsLength}\n \n \n \n \n );\n }\n function getReportsList(currentReports: TeamInterface) {\n const currentReportsTeamMembers = currentReports.teamMembers.filter(\n t => t.id !== currentReports.orgChartTeamLeadId\n );\n return (\n \n {currentReportsTeamMembers.map((r, idx) => {\n const newTeam = r?.team;\n const teamMembers = newTeam?.teamMembers.filter(\n t => t.id !== newTeam?.orgChartTeamLeadId\n );\n const totalReports = getTotalReportsLength(teamMembers);\n return (\n \n ) =>\n onClickFactorSet(\n e,\n !!newTeam ? newTeam : currentReports,\n teamMembers?.length ? [person, r] : [person]\n )\n }\n testId={testId}\n >\n \n \n \n \n \n {r.name}\n
    {r.title}
    \n {teamMembers && teamMembers?.length ? (\n \n \n {teamMembers.length}\n {totalReports > teamMembers?.length ? (\n \n \n {totalReports}\n \n ) : null}\n \n ) : null}\n
    \n \n \n \n
    \n );\n })}\n
    \n );\n }\n return (\n \n \n
    {\"Management Org\"}
    \n \n
    \n {getReportsText(team)}\n {reportsDropdownOpen ? getReportsList(team) : null}\n
    \n );\n};\n\nexport default ReportsCard;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport {\n isEmpty,\n toPairs,\n flatten,\n startCase,\n capitalize,\n sortBy,\n isNil,\n omit,\n omitBy,\n kebabCase\n} from \"lodash\";\nimport { useSelector } from \"react-redux\";\n\n// components\nimport SignalTypeContainer from \"../SignalTypeContainer/SignalTypeContainer\";\nimport SlackAvatar from \"../SlackAvatar/SlackAvatar\";\nimport Spinner from \"../Spinner/Spinner\";\nimport Icon from \"../Icon/Icon\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport Tooltip from \"../Tooltip/Tooltip\";\nimport InfoIcon from \"../InfoIcon/InfoIcon\";\nimport WarningTriangle from \"../WarningTriangle/WarningTriangle\";\n\n// types\nimport {\n UserReportWithMetadataInterface,\n Signal,\n PullRequestSignals\n} from \"../../interfaces/user\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// constants\nimport {\n PullRequestStalledOptions,\n workMetadataActivityTypes,\n pageIds,\n Signals,\n signalTypes,\n urlParamKeys,\n teamDeepDiveSections,\n workDeepDiveSections,\n peopleHealthSignals,\n ownerContributorTypes\n} from \"../../constants/constants\";\n\nimport informationText from \"../../constants/informationText.json\";\n\nimport { hexToRgb } from \"../../utils/color\";\nimport ReportsCard from \"../ReportsCard/ReportsCard\";\nimport { partitionSignals } from \"../../utils/user\";\nimport { TeamInterface } from \"../../interfaces/team\";\nimport { useOrganizationData } from \"../../hooks/useOrganizationData\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { getFlattenedTeamMembersTreeForTeam } from \"../../utils/teams\";\nimport { useUserSettings } from \"../../hooks/useUserSettings\";\n\n// styled components\nconst Container = styled.section`\n display: flex;\n flex-direction: column;\n padding: 1rem;\n background-color: ${props =>\n `${hexToRgb({ hex: props.theme.colors.all.lightJean, opacity: 0.5 })}`};\n width: 26.4rem;\n`;\nconst AvatarWrapper = styled.div`\n margin-right: 1rem;\n max-width: 9.9rem;\n`;\nconst Avatar = styled(SlackAvatar)`\n border-radius: 50%;\n height: 6.3rem;\n width: 6.3rem;\n border: ${props =>\n `${props.theme.borders.widths.md} solid ${props.theme.colors.border}`};\n`;\nconst Name = styled.header`\n font-family: ${props => props.theme.fonts.header.name}, serif;\n font-size: ${props => props.theme.fonts.header.sizes.sm};\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n`;\nconst Title = styled.span`\n font-family: ${props => props.theme.fonts.primary.name}, serif;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin-bottom: 0.5rem;\n`;\nconst SignalContainerHeader = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n cursor: pointer;\n`;\nconst TileHeader = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n padding-bottom: 1rem;\n`;\nconst NameAndTitle = styled.div`\n display: flex;\n flex-direction: column;\n align-items: start;\n justify-content: center;\n`;\nconst HealthySignal = styled.div`\n margin-top: 0.5rem;\n padding: 0.5rem;\n`;\nconst InlineIcon = styled(Icon)`\n margin-right: 0.5rem;\n`;\nconst PrPill = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n background-color: ${props => `${props.theme.colors.all.jean}`};\n border-radius: 16px;\n padding: 0.5rem 0.75rem;\n margin-top: 0.5rem;\n cursor: pointer;\n color: ${props => `${props.theme.colors.all.wolverine}`};\n max-width: 20rem;\n`;\n\nconst AllocationPill = styled.div<{ allocationPercent: number }>`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n background: ${props =>\n `linear-gradient(to right, ${props.theme.colors.all.iceman} ${\n props.allocationPercent\n }%, 0%, ${props.theme.colors.all.white} ${props.allocationPercent -\n 100}%);`};\n border-radius: 16px;\n padding: 0.5rem 0.75rem;\n margin-top: 0.5rem;\n cursor: pointer;\n max-width: 25rem;\n font-family: ${props => props.theme.fonts.primary.name}, serif;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\n\nconst AllocationText = styled.div`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst PrText = styled.div`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst AllocationSection = styled.div`\n margin-top: 1.5rem;\n display: flex;\n flex-direction: column;\n`;\n\nconst AllocationHeader = styled.div`\n display: inline-flex;\n font-family: ${props => props.theme.fonts.primary.name}, serif;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n border-bottom: ${props => `1px solid ${props.theme.colors.all.storm}`};\n width: 100%;\n`;\n\nconst AllocationExpander = styled.div`\n font-family: ${props => props.theme.fonts.primary.name}, serif;\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n align-self: flex-end;\n cursor: pointer;\n &:hover {\n text-decoration: underline;\n }\n margin-top: 0.8rem;\n`;\nconst HealthySignalsValue = styled.span`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n`;\nconst AllocationValue = styled.strong`\n font-family: ${props => props.theme.fonts.subheader.name}, monospace;\n margin-right: 0.6154em;\n`;\n\nconst NoAllocationMsg = styled.div`\n font-family: ${props => props.theme.fonts.primary.name}, serif;\n font-weight: ${props => props.theme.fonts.primary.weights.semiLight};\n font-style: italic;\n font-size: 1.1rem;\n padding-top: 1rem;\n`;\n\nconst SignalTooltip = styled.div`\n font-size: 1.1rem;\n width: 40rem;\n`;\nconst SignalType = styled(SignalTypeContainer)`\n margin-bottom: 0.5rem;\n width: 100%;\n`;\nconst UnhealthyTooltip = styled(Tooltip)`\n // TODO: revisit our tooltips and see if the inline-block on the trigger is needed\n & > div {\n display: block;\n }\n`;\nconst Link = styled(RouteLink)`\n color: ${props => props.theme.colors.all.wolverine};\n\n &:visited {\n color: ${props => props.theme.colors.all.wolverine};\n }\n &:hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n text-decoration: none;\n }\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n person: UserReportWithMetadataInterface;\n isFetchingData?: boolean;\n testId?: string;\n};\n\nexport const PersonTile = ({\n className,\n isFetchingData = false,\n person,\n testId = \"testId\"\n}: Props): React.ReactElement => {\n const { image, name, title, signals, allocations = [] } = person;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const hasPeopleHealthData = flags?.[\"people-health-insights\"];\n\n const { getWorkDeepDivePath, getTeamDeepDivePath } = useUrlParams();\n const { data: userSettings } = useUserSettings();\n const displaySignals = omitBy(\n hasPeopleHealthData\n ? !!signals?.ALWAYS_ON?.[0]?.status\n ? signals\n : omit(signals, [\"ALWAYS_ON\"])\n : omit(signals, peopleHealthSignals),\n (s: Signal | PullRequestSignals | []) => !s[0]?.status\n );\n\n // organization\n const { data: orgChartRootTeam } = useOrganizationData();\n\n const [\n isShowingExpandedAllocations,\n setIsShowingExpandedAllocations\n ] = useState(false);\n\n const prettyPrint = (str: string) => capitalize(startCase(str));\n\n const NUM_ALLOCATIONS_TO_SHOW = 3;\n\n const sortedAllocations = sortBy(allocations, \"allocation\").reverse();\n const allocationsToShow = isShowingExpandedAllocations\n ? sortedAllocations\n : sortedAllocations.slice(0, NUM_ALLOCATIONS_TO_SHOW);\n\n const [unhealthySignals, healthySignals] = partitionSignals(displaySignals);\n const pullRequests = flatten(\n toPairs(displaySignals).filter(\n signal => signal[0] === workMetadataActivityTypes.PR\n )\n )?.[1] as PullRequestSignals;\n\n const pullRequestItems = pullRequests\n ? flatten(pullRequests.map(category => category.items))\n : [];\n\n const pullRequestStatuses = pullRequests?.map(pr => pr.status) || [];\n\n const alertCount = unhealthySignals.length + pullRequestItems.length;\n function getTeam(userId: number): TeamInterface | undefined {\n const flattenedOrganization = getFlattenedTeamMembersTreeForTeam(\n orgChartRootTeam\n );\n return flattenedOrganization.find(u => u.id === userId)?.team;\n }\n\n function getSignalEndpoint(signal: string): string | undefined {\n // No link for you if your Feature Flag is off!\n return flags?.[pageIds.TEAM_DEEP_DIVE]\n ? getTeamDeepDivePath({\n querystringParams: {\n [urlParamKeys.SELECTED_USER]: person.email\n },\n selectedSection: teamDeepDiveSections.HEALTH_METRICS,\n selectedMetric: signal\n })\n : undefined;\n }\n\n return (\n <>\n \n \n
    \n {alertCount > 0 && (\n \n )}\n \n \n \n
    \n \n {name}\n {title}\n \n
    \n {isFetchingData ? (\n \n ) : (\n
    \n {// the pr's are each in their own seperate \"item\" within a signal, so we are flattening them together to treat them equally when mapping to render.\n // Better to do it here so we still have them together as \"unhealthy\" for the counts to display before\n pullRequests && pullRequests.length > 0 && (\n ;\n }) => {\n const statusName = PullRequestStalledOptions.find(\n (option: { name: string; id: string }) => {\n return option?.id === pr.status;\n }\n )?.[\"name\"];\n // TODO: make this text lookup less hack\n return pr.items.map(prRecord => {\n return (\n \n \n \n \n {statusName && statusName.includes(\"Stuck\")\n ? \"Stuck: \"\n : statusName?.includes(\"MERGED\")\n ? \"No Approval: \"\n : \"High Discussion: \"}\n \n {prRecord.name}\n \n \n }\n />\n \n );\n });\n }\n )}\n header={\n \n \n \n {pullRequestItems.length === 1 ? \"PR\" : \"PRs\"}:{\" \"}\n {pullRequestItems.length}{\" \"}\n \n \n }\n isExpandable={true}\n testId={`person-tile-pr-callouts`}\n type={signalTypes.UNHEALTHY}\n />\n )}\n {!isEmpty(unhealthySignals) &&\n unhealthySignals\n .reverse()\n .map((signal: { key: string; value: Signal }) => {\n const { key, value } = signal;\n\n if (!value[0].status) {\n return null;\n }\n\n // other healthy signals are easy, we can just pretty print the key and follow it up with it's relevant item status\n if (value.length > 0) {\n const popupContent =\n key === Signals.ALWAYS_ON\n ? informationText[\"always-on\"]\n : key === Signals.CONTEXT_SWITCHING\n ? informationText[\"context-switching\"]\n : key === Signals.DEEP_WORK\n ? informationText[\"deep-work\"]\n : key === Signals.CHAT_INTERRUPTIONS\n ? informationText[\"chat-interruptions\"]\n : \"\";\n\n const signalEndpoint = getSignalEndpoint(key);\n const signalContents = (\n \n \n {prettyPrint(key)} -{\" \"}\n {prettyPrint(value[0].status)}\n \n \n \n );\n const signalTypeTrigger = !!signalEndpoint ? (\n \n {signalContents}\n \n ) : (\n signalContents\n );\n\n return (\n {popupContent}\n }\n trigger={signalTypeTrigger}\n testId={`unhealthy-signal-${key}`}\n />\n }\n testId={`people-tile-other-callouts`}\n type={signalTypes.UNHEALTHY}\n key={`unhealthy-signal-${key}`}\n />\n );\n } else {\n return null;\n }\n })}\n {!isEmpty(healthySignals) && (\n {\n if (!signal.value[0].status) {\n return null;\n }\n if (signal.value.length > 0) {\n const popupContent =\n signal.key === Signals.ALWAYS_ON\n ? informationText[\"always-on\"]\n : signal.key === Signals.CONTEXT_SWITCHING\n ? informationText[\"context-switching\"]\n : signal.key === Signals.DEEP_WORK\n ? informationText[\"deep-work\"]\n : signal.key === Signals.CHAT_INTERRUPTIONS\n ? informationText[\"chat-interruptions\"]\n : \"\";\n const signalEndpoint = getSignalEndpoint(signal.key);\n const signalContents = (\n \n {popupContent}\n }\n trigger={\n <>\n \n {prettyPrint(signal.key)} -{\" \"}\n {prettyPrint(signal.value[0].status)}\n \n }\n testId={`healthy-signal-${signal.key}`}\n />\n \n );\n return !!signalEndpoint ? (\n \n {signalContents}\n \n ) : (\n signalContents\n );\n } else {\n return null;\n }\n }\n )}\n header={\n \n \n {healthySignals.length}\n {\" \"}\n {`Healthy Signal${healthySignals.length > 1 ? \"s\" : \"\"}`}\n \n }\n isExpandable={true}\n testId={`people-tile-healthy-signals`}\n type={signalTypes.HEALTHY}\n />\n )}\n
    \n )}\n {// flags?.[\"work-allocation\"] && todo: confirm that this flag is no longer needed\n !isFetchingData && (\n \n \n Work Allocation %\n \n \n {!isEmpty(allocationsToShow) ? (\n allocationsToShow.map((epic, index) => {\n return !isNil(epic.epicId) ? (\n \n \n \n \n {(epic.allocation * 100).toFixed(0)}%\n \n {epic.epicName}\n \n \n \n \n ) : null;\n })\n ) : (\n \n No work allocation data available\n \n )}\n {allocations.length > NUM_ALLOCATIONS_TO_SHOW && (\n \n setIsShowingExpandedAllocations(!isShowingExpandedAllocations)\n }\n >\n {!isShowingExpandedAllocations\n ? `+${allocations.length - NUM_ALLOCATIONS_TO_SHOW} more`\n : \"hide\"}\n \n )}\n \n )}\n
    \n {!isFetchingData && (\n \n )}\n \n );\n};\n\nexport default PersonTile;\n","import { useSelector } from \"react-redux\";\n\n// hooks\nimport { useQuery } from \"react-query\";\nimport { useUrlParams } from \"./useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport { requestUserAllocationsData } from \"../utils/user\";\n\nexport const useAllocationsData = (canRequest = true) => {\n const accessToken = useSelector(\n (state: AppStateInterface) => state.auth.authAccessToken\n );\n const tenantId = useSelector(\n (state: AppStateInterface) => state.auth.authParams.tenantId\n );\n const { urlParams } = useUrlParams();\n const sprintId = urlParams.sprintId;\n const startDate = urlParams.startDate;\n const endDate = urlParams.endDate;\n const users = urlParams.allUsers;\n const teamId = urlParams.teamId;\n\n return useQuery(\n [\"allocations\", { endDate, sprintId, startDate, users, teamId }],\n () =>\n requestUserAllocationsData({\n accessToken,\n tenantId,\n params: {\n startDate,\n endDate,\n sprintId,\n tenantId,\n users,\n teamId\n }\n }).then(data => data.allocations),\n {\n enabled:\n !!accessToken &&\n !!tenantId &&\n !!users?.length &&\n !!startDate &&\n !!endDate &&\n !!teamId &&\n canRequest\n }\n );\n};\n","import React from \"react\";\nimport { get, flatten } from \"lodash\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport Icon from \"../Icon/Icon\";\nimport InfoPopup from \"../InfoPopup/InfoPopup\";\nimport PersonTile from \"../PersonTile/PersonTile\";\nimport RouteLink from \"../RouteLink/RouteLink\";\nimport SupportEmailLink from \"../SupportEmailLink/SupportEmailLink\";\n\n// constants\nimport { groupByTypes } from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useAllocationsData } from \"../../hooks/useAllocationsData\";\nimport { useUserSettings } from \"../../hooks/useUserSettings\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport { useTeamDeepDiveData } from \"../../hooks/useTeamDeepDiveData\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport {\n UserReportWithMetadataInterface,\n Allocations\n} from \"../../interfaces/user\";\n\n// utils\nimport { getTeamNameFromTeam, sortTeam } from \"../../utils/teams\";\nimport { UserDeepDiveData } from \"../../interfaces/team-deep-dive\";\n\n// styled components\nconst Container = styled.section`\n margin-top: 3rem;\n`;\nconst ContentWrapper = styled.section`\n padding-bottom: 2rem;\n`;\nconst Team = styled.ul`\n display: grid;\n gap: ${props => props.theme.grid.gap};\n grid-template-columns: repeat(4, 1fr);\n`;\nconst StyledTextHeader = styled.h4`\n align-items: flex-end;\n display: flex;\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n font-size: 2rem;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n justify-content: space-between;\n padding-bottom: 1rem;\n border-bottom: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n margin-bottom: 2rem;\n`;\nconst TitleTextWrapper = styled.div`\n align-items: center;\n display: flex;\n`;\nconst TitleText = styled.span`\n margin-right: 1rem;\n`;\nconst CreateTeamLink = styled(RouteLink)`\n margin-left: auto;\n display: flex;\n color: ${props => props.theme.colors.all.wolverine};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n &.hover {\n color: ${props => props.theme.colors.all.auroraTeal};\n }\n`;\nconst CreateTeamText = styled.div`\n color: inherit;\n vertical-align: baseline;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n`;\nconst StyledIcon = styled(Icon)`\n margin-left: 1rem;\n color: inherit;\n`;\nconst PopupHeader = styled.h4`\n font-family: ${props => props.theme.fonts.header.name}, Arial, Helvetica,\n sans-serif;\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n margin: 0;\n`;\nconst PopupContent = styled.div`\n font-size: ${props => props.theme.fonts.header.sizes.xs};\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\ntype Signal = {\n status: string | null | number;\n items: string[] | { [key: string]: string }[];\n};\n\ntype UserTileData = {\n uplevelUserId: number;\n signals: {\n ALWAYS_ON: Signal[];\n CHAT_INTERRUPTIONS: Signal[];\n CONTEXT_SWITCHING: Signal[];\n PULL_REQUEST: Signal[];\n DEEP_WORK: Signal[];\n };\n};\n\nconst YourTeam = ({\n className,\n testId = \"testId\"\n}: Props): JSX.Element | null => {\n const thisTestId = `${testId}-your-team`;\n const tenantId = useSelector((state: AppStateInterface) =>\n get(state, \"auth.authParams.tenantId\")\n );\n const user = useSelector((state: AppStateInterface) => state.user);\n const { urlParams } = useUrlParams();\n const activeTeam = urlParams.team;\n\n const { data: userSettings } = useUserSettings();\n const defaultJiraGroupBy = userSettings?.defaultJiraGroupBy;\n const {\n data: peopleHealthData,\n isLoading: isFetchingTilesData\n } = useTeamDeepDiveData(activeTeam?.teamMembers);\n const {\n data: allocationsData,\n isLoading: isFetchingAllocationsData\n } = useAllocationsData();\n\n if (!activeTeam?.teamMembers?.length) {\n return null;\n }\n const teamHealthData: UserTileData[] | [] = !!peopleHealthData\n ? peopleHealthData[peopleHealthData.length - 1].peopleScores?.map(\n (person: UserDeepDiveData) => {\n return {\n uplevelUserId: person?.user,\n signals: {\n ALWAYS_ON: [\n {\n status: person?.ALWAYS_ON || null,\n items: [\"\"]\n }\n ],\n CONTEXT_SWITCHING: [\n {\n status: person?.CONTEXT_SWITCHING?.TOTAL?.bucket || null,\n items: [\"\"]\n }\n ],\n DEEP_WORK: [\n {\n status: person?.DEEP_WORK?.HOURS?.TOTAL,\n items: [\"\"]\n }\n ],\n CHAT_INTERRUPTIONS: [\n {\n status: person?.CHAT_INTERRUPTIONS?.TOTAL,\n items: [\"\"]\n }\n ],\n PULL_REQUEST:\n Object.entries(person?.PULL_REQUEST || {}).map(\n ([key, value]) => {\n return {\n status: key,\n items: value\n };\n }\n ) || []\n }\n };\n }\n )\n : [];\n // for user tiles, adjoining the signals and allocations with their user for more logical grouping\n const teamWithMetadata = activeTeam.teamMembers.map((member, index) => {\n const memberTileData: UserTileData[] = teamHealthData.filter(\n (memberSignals: { uplevelUserId: number }) =>\n memberSignals?.uplevelUserId === member.id\n );\n\n const memberAllocationsData: Allocations = (allocationsData || []).find(\n (allocationSet: { user: number }) => allocationSet.user === member.id\n ) || { projects: [], user: 0 };\n const flattenedAllocations =\n memberAllocationsData && memberAllocationsData.projects\n ? defaultJiraGroupBy === groupByTypes.EPIC\n ? flatten(\n memberAllocationsData.projects.map(\n (project: any) => project.epics\n )\n )\n : memberAllocationsData.projects.map((project: any) => {\n return {\n allocation: project.allocation,\n epicId: project.projectId,\n epicName: project.projectName\n };\n })\n : [];\n return {\n ...member,\n signals:\n memberTileData[0] && memberTileData[0].signals\n ? memberTileData[0].signals\n : {},\n tenantId,\n allocations: !!flattenedAllocations ? flattenedAllocations : []\n };\n }) as UserReportWithMetadataInterface[];\n\n return (\n \n \n \n \n Team Insights: {getTeamNameFromTeam(activeTeam)}\n \n Whose info am I seeing below?}\n content={\n \n

    \n We’re pulling project allocation, callouts, and insights\n for people on your team—this does not include cross\n collaborators or other people on your sprint.\n

    \n

    \n Please{\" \"}\n {\" \"}\n if there are any changes to your team that are not reflected\n below.\n

    \n
    \n }\n name=\"your-team\"\n testId={thisTestId}\n />\n
    \n \n create a team\n \n \n
    \n \n \n {sortTeam(teamWithMetadata, user).map((person, index) => (\n
  • \n \n
  • \n ))}\n
    \n
    \n
    \n );\n};\n\nexport default YourTeam;\n","// constants\nimport { pageIds, pageMetadata } from \"../constants/constants\";\n\n// utils\nimport { getPageTitle } from \"./router\";\n\nexport const getTeamHomePageTitle = (): string => {\n return getPageTitle(pageMetadata[pageIds.TEAM_HOME].title);\n};\n","import React, { ReactElement, useEffect } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport HtmlText from \"../HtmlText/HtmlText\";\nimport StartPageSummary from \"../StartPageSummary/StartPageSummary\";\nimport SupportEmailLink from \"../SupportEmailLink/SupportEmailLink\";\nimport YourTeam from \"../YourTeam/YourTeam\";\n\n// constants\nimport { timerangeIds } from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useLocation } from \"react-router\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport { TeamInterface } from \"../../interfaces/team\";\n\n// utils\nimport { getTeamHomePageTitle } from \"../../utils/team-home\";\n\n// styled components\nconst MessageBlock = styled.div`\n margin-top: 2rem;\n background: ${props => props.theme.colors.all.auroraTeal};\n color: ${props => props.theme.colors.all.white};\n padding: 2rem;\n`;\nconst Email = styled(SupportEmailLink)`\n && {\n color: ${props => props.theme.colors.all.white};\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n &:hover {\n color: ${props => props.theme.colors.all.marvelMint};\n }\n }\n`;\nconst SupportText = styled.p`\n margin: 0;\n`;\nconst Summary = styled(StartPageSummary)`\n margin-top: 2rem;\n background: ${props => props.theme.colors.all.white};\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n padding: 2rem;\n`;\nconst Team = styled(YourTeam)`\n margin-top: 2rem;\n background: ${props => props.theme.colors.all.white};\n border: ${props =>\n `${props.theme.borders.widths.sm} solid ${props.theme.colors.all.jean}`};\n padding: 2rem;\n`;\n\n// typescript props\ntype Props = {\n testId?: string;\n};\n\nconst TeamHomePage = ({ testId = \"testId\" }: Props): ReactElement => {\n const thisTestId = `${testId}-team-home-page`;\n const location = useLocation();\n\n const { urlParams } = useUrlParams();\n const activeTeam = urlParams.team;\n const timerange = urlParams.timerange;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n\n // TODO: remove this logic block when kanban v1 is released\n const shouldShowSummary =\n (flags?.[\"kanban-mode\"] as boolean) ||\n (!!activeTeam?.useSprints &&\n timerange.timerangeType === timerangeIds.SPRINTS);\n\n // page title change\n useEffect(() => {\n document.title = getTeamHomePageTitle();\n }, [location]);\n\n return (\n
    \n {!!flags?.[\"start-page-message\"] ? (\n \n \n \n If you have questions, please don’t hesitate to reach out to\n us at \n \n \n ) : null}\n {shouldShowSummary ? (\n \n ) : null}\n \n
    \n );\n};\n\nexport default TeamHomePage;\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport SupportEmailLink from \"../SupportEmailLink/SupportEmailLink\";\n\n// utils\nimport config from \"../../env-config\";\n\n// styled components\nconst Container = styled.div`\n align-items: center;\n background: ${props => props.theme.colors.all.white};\n display: grid;\n justify-items: center;\n margin: 0;\n max-width: 60rem;\n min-height: 40rem;\n padding: 5rem;\n`;\nconst ContentWrapper = styled.div`\n text-align: center;\n`;\nconst Header = styled.header`\n font-size: 4rem;\n font-weight: ${props => props.theme.fonts.primary.weights.bold};\n`;\nconst SupportText = styled.p`\n margin: 5rem 0 0 0;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n testId?: string;\n};\n\nconst NoAccessClientDashboard = ({\n className,\n testId = \"testId\"\n}: Props): ReactElement => {\n const thisTestId = `${testId}-no-access-client-dashboard`;\n return (\n \n \n
    We’ve moved!
    \n

    \n The Uplevel Dashboard is now at\n
    \n {config.ORG_DASHBOARD_URL}.\n

    \n \n If you have questions, please don’t hesitate to reach out to us\n at{\" \"}\n \n \n
    \n
    \n );\n};\n\nexport default NoAccessClientDashboard;\n","import React, { useEffect } from \"react\";\nimport styled from \"styled-components/macro\";\n\n// components\nimport {\n Redirect,\n Route,\n Switch,\n useParams,\n useHistory\n} from \"react-router-dom\";\nimport WorkDeepDivePage from \"../WorkDeepDivePage/WorkDeepDivePage\";\nimport GlobalNavigation from \"../GlobalNavigation/GlobalNavigation\";\nimport LabsPage from \"../LabsPage/LabsPage\";\nimport NoAccessPage from \"../NoAccessPage/NoAccessPage\";\nimport OverviewPage from \"../OverviewPage/OverviewPage\";\nimport ReportsPage from \"../ReportsPage/ReportsPage\";\nimport RetrosPage from \"../RetrosPage/RetrosPage\";\nimport SettingsPage from \"../SettingsPage/SettingsPage\";\nimport Sidebar from \"../Sidebar/Sidebar\";\nimport StartPage from \"../StartPage/StartPage\";\nimport TeamDeepDivePage from \"../TeamDeepDive/TeamDeepDivePage\";\nimport RouteLink from \"../RouteLink/RouteLink\";\n\n// constants\nimport { pageIds } from \"../../constants/constants\";\n\n// hooks\nimport { useLocation } from \"react-router-dom\";\nimport { useTracking } from \"../../hooks/useTracking\";\nimport { useCanAccessTeamData } from \"../../hooks/useCanAccessTeamData\";\nimport { useUrlParams } from \"../../hooks/useUrlParams\";\nimport TeamHomePage from \"../TeamHomePage/TeamHomePage\";\nimport { useSelector } from \"react-redux\";\nimport { AppStateInterface } from \"../../interfaces/app-state\";\nimport NoAccessClientDashboard from \"../NoAccessClientDashboard/NoAccessClientDashboard\";\nimport { isNull } from \"lodash\";\n\n// styled components\nconst PageContainer = styled.div`\n background: ${props => props.theme.colors.all.lightJean};\n border-top: 1rem solid ${props => props.theme.colors.border};\n display: grid;\n grid-template-columns:\n ${props => props.theme.grid.sidebar}\n 1fr;\n gap: ${props => props.theme.grid.sidebarGutter};\n min-height: 100vh;\n`;\nconst GridContainer = styled.main`\n width: ${props =>\n `calc(12*${props.theme.grid.columnWidth} + 11*${props.theme.grid.gap} + 2*${props.theme.grid.gridOffset})`};\n`;\nconst ContentWrapper = styled.div`\n padding: 2rem 0;\n`;\n\nconst NoTeamWarningContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 2rem;\n background: ${props => props.theme.colors.all.rogue}40;\n margin-bottom: 2rem;\n`;\n\nconst WarningTitle = styled.div`\n font-family: ${props => props.theme.fonts.primary.name};\n font-size: ${props => props.theme.fonts.primary.sizes.md};\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n padding-bottom: 1rem;\n`;\n\nconst WarningBodyText = styled.div`\n font-family: ${props => props.theme.fonts.primary.name};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n`;\n\nconst WarningSubheader = styled.div`\n font-family: ${props => props.theme.fonts.primary.name};\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n padding-top: 2rem;\n`;\n\nconst WarningStepsList = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n padding-top: 1rem;\n`;\n\nconst WarningStep = styled.div`\n margin-right: 2rem;\n`;\n\nconst StyledRouteLink = styled(RouteLink)`\n font-weight: ${props => props.theme.fonts.primary.weights.demiBold};\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n`;\n\nconst SettingsLinkButton = styled.button`\n background: ${props =>\n props.disabled\n ? props.theme.colors.button.disabled.default.bg\n : props.theme.colors.button.default.default.bg};\n border: 0;\n color: ${props =>\n props.disabled\n ? props.theme.colors.button.disabled.default.fg\n : props.theme.colors.button.default.default.fg};\n font-size: ${props => props.theme.fonts.primary.sizes.xs};\n padding: 1rem 3rem;\n align-self: flex-end;\n`;\nconst NoAccessContainer = styled.div`\n align-items: center;\n display: grid;\n justify-items: center;\n width: 100vw;\n`;\n\n// typescript props\ntype Props = {\n className?: string;\n};\ntype MainPagesProps = {\n canAccessTeamData: boolean;\n};\n\n// helper component for rendering routes\nfunction MainPages({ canAccessTeamData }: MainPagesProps) {\n const { pageId } = useParams<{ pageId: string }>();\n\n if (\n (pageId === pageIds.WORK_DEEP_DIVE ||\n pageId === pageIds.RETROS ||\n pageId === pageIds.TEAM_DEEP_DIVE) &&\n !canAccessTeamData\n ) {\n return ;\n }\n\n switch (pageId) {\n case pageIds.WORK_DEEP_DIVE:\n return ;\n case pageIds.REPORTS:\n return ;\n case pageIds.SETTINGS:\n return ;\n case pageIds.RETROS:\n return ;\n case pageIds.LABS:\n return ;\n case pageIds.TEAM_DEEP_DIVE:\n return ;\n case pageIds.OVERVIEW:\n return ;\n case pageIds.TEAM_HOME:\n return ;\n default:\n return ;\n }\n}\n\nexport const DashboardPage = ({\n className\n}: Props): React.ReactElement | null => {\n const thisTestId = \"client-dashboard-page\";\n const { trackEvent } = useTracking();\n const location = useLocation();\n const canAccessTeamData = useCanAccessTeamData();\n const { urlParams } = useUrlParams();\n const history = useHistory();\n const hasNoTeam = urlParams.team?.teamMembers.length === 1;\n const flags = useSelector((state: AppStateInterface) => state.flags);\n const canAccessDashboard = flags?.[\"uplevel-client-dashboard\"];\n\n // todo: add browser forward/back event back in here\n\n // page load event\n // asnider: beware adding trackEvent in the dependency array causes an infinite loop\n useEffect(() => {\n trackEvent({\n e: {\n type: \"page-load\"\n },\n label: \"page-load\",\n value: `loaded`\n });\n }, [location]);\n\n return isNull(flags) ? null : (\n \n {canAccessDashboard ? (\n <>\n \n \n \n \n {hasNoTeam && (\n \n Build your Team\n \n Please go create your team in the{\" \"}\n \n Team Builder\n \n \n How to create a team\n \n \n 1 - Add a team name\n \n \n \n 2 - Select whether you use sprints\n \n \n \n \n 3 - Assign the Jira Project\n \n \n \n \n 4 - Assign the Jira Board\n \n \n \n 5 - Add Team Members\n \n \n history.push(\"/settings\")}>\n Get Started\n \n \n )}\n \n \n \n \n \n {canAccessTeamData ? (\n \n ) : (\n \n )}\n \n \n \n \n \n ) : (\n \n \n \n )}\n \n );\n};\n\nexport default DashboardPage;\n","import { useEffect, useMemo, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\n\n// hooks\nimport { useOrganizationData } from \"./useOrganizationData\";\nimport { useUrlParams } from \"./useUrlParams\";\n\n// interfaces\nimport { AppStateInterface } from \"../interfaces/app-state\";\n\n// utils\nimport { getFlattenedTeamMembersTreeForTeam } from \"../utils/teams\";\n\nexport const useCanAccessTeamData = (): boolean => {\n const [isAccessibleTeam, setIsAccessibleTeam] = useState(false);\n const user = useSelector((state: AppStateInterface) => state.user);\n const userId = user?.id;\n const { data: usersOrgChartRootTeam } = useOrganizationData();\n const { urlParams } = useUrlParams();\n\n const activeTeam = urlParams.team;\n const activeTeamsTeamLeadId = activeTeam?.orgChartTeamLeadId;\n const activeTeamMemberIds = useMemo(\n () => activeTeam?.teamMembers.map(t => t.id),\n [activeTeam]\n );\n const organizationTeamMemberIds = useMemo(() => {\n if (!!usersOrgChartRootTeam) {\n return getFlattenedTeamMembersTreeForTeam(usersOrgChartRootTeam)?.map(\n t => t.id\n );\n }\n }, [usersOrgChartRootTeam]);\n\n const orgChartTeamLeadIsInUsersOrganization =\n !!activeTeamsTeamLeadId &&\n !!organizationTeamMemberIds?.includes(activeTeamsTeamLeadId);\n const containsTeamMemberInUsersOrganization = !!organizationTeamMemberIds?.some(\n id =>\n activeTeamMemberIds?.includes(id) || activeTeam?.createdByUser?.id === id\n );\n const userIsOnTeam = !!activeTeamMemberIds?.includes(userId);\n const userCreatedTeam = activeTeam?.createdByUser?.id === userId;\n\n // allow access if the team meets one of these criteria, otherwise do not allow access\n useEffect(() => {\n setIsAccessibleTeam(\n orgChartTeamLeadIsInUsersOrganization ||\n containsTeamMemberInUsersOrganization ||\n userIsOnTeam ||\n userCreatedTeam\n );\n }, [\n orgChartTeamLeadIsInUsersOrganization,\n containsTeamMemberInUsersOrganization,\n userCreatedTeam,\n userIsOnTeam\n ]);\n\n return isAccessibleTeam;\n};\n","// from https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/guides/scroll-restoration.md\nimport { Component } from \"react\";\nimport { withRouter } from \"react-router-dom\";\n\nclass ScrollManagement extends Component {\n componentDidUpdate(prevProps) {\n // if we changed pages, scroll back to the top of the page\n if (this.props.location.pathname !== prevProps.location.pathname) {\n window.scrollTo(0, 0);\n }\n }\n\n render() {\n return this.props.children;\n }\n}\n\nexport default withRouter(ScrollManagement);\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport styled, {\n createGlobalStyle,\n ThemeProvider\n} from \"styled-components/macro\";\nimport { currentTheme } from \"../../themes/currentTheme\";\n\nconst GlobalStyle = createGlobalStyle`\n html {\n box-sizing: border-box;\n background-color: ${props => props.theme.colors.uiBackground};\n font-size: 10px;\n }\n\n *, *:before, *:after {\n box-sizing: inherit;\n }\n\n body {\n background: transparent;\n color: ${props => props.theme.colors.text.body};\n font-family: ${props =>\n props.theme.fonts.primary.name}, Arial, Helvetica, sans-serif;\n font-size: 1.5rem;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n\n // i don't know what this is exactly or where it comes from but sometimes\n // after the okta flow has resolved, we get this empty iframe that covers\n // the entire ui and makes it so that you can't interact with it until you\n // reload the page. i haven't seen it on the auth0 flow so eventually okta\n // will go away but hopefully it's not important. 😬\n & > iframe {\n z-index: -1 !important;\n }\n }\n\n a {\n &,\n &:hover,\n &:active,\n &:visited {\n color: ${props => props.theme.colors.link.color};\n }\n }\n\n ul, ol, dl {\n list-style-type: none;\n margin: 0;\n padding: 0;\n }\n\n /*\n this is repeated in a couple of places un-DRY-ly.\n todo: figure out the best way to propagate this with styled components\n */\n .visuallyHidden {\n /* https://snook.ca/archives/html_and_css/hiding-content-for-accessibility */\n position: absolute !important;\n height: 1px;\n width: 1px;\n overflow: hidden;\n clip: rect(1px, 1px, 1px, 1px);\n }\n`;\n\n// styled components\nconst StyledUplevelUi = styled.div`\n margin: 0 auto;\n`;\n\nconst UplevelUi = ({ children, testId, theme = currentTheme }) => {\n if (!children || !testId) {\n return null;\n }\n\n return (\n \n \n \n {children}\n \n \n );\n};\nUplevelUi.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.array,\n PropTypes.element,\n PropTypes.string\n ]).isRequired,\n testId: PropTypes.string.isRequired,\n theme: PropTypes.object\n};\nexport default UplevelUi;\n","import React, { Component, useEffect } from \"react\";\nimport ErrorLevelMedium from \"../../components/ErrorLevels/ErrorLevelMedium\";\nimport { ErrorBoundary } from \"@sentry/react\";\nimport styled from \"styled-components/macro\";\nimport { useTracking } from \"../../hooks/useTracking\";\n\nconst StyledContainer = styled(\"div\")`\n display: flex;\n height: 100%;\n width: 100%;\n align-items: center;\n justify-content: space-around;\n`;\n\nconst UnknownUser = () => {\n const { trackEvent } = useTracking();\n\n // BEWARE: adding trackEvent to dependency array will result in infinite loop\n useEffect(() => {\n trackEvent({\n e: { type: \"page-load\" },\n label: \"page-load\",\n value: `unknown-user`\n });\n }, []);\n return (\n \n \n \n \n \n );\n};\n\nexport default UnknownUser;\n","import React, { useEffect, useState } from \"react\";\n\n// components\nimport { Auth0Provider } from \"@auth0/auth0-react\";\nimport { Route, Switch } from \"react-router-dom\";\nimport Auth0UiReadyWrapper from \"../Auth0UiReadyWrapper/Auth0UiReadyWrapper\";\nimport SecureRoute from \"../SecureRoute/SecureRoute\";\nimport DashboardPage from \"../DashboardPage/DashboardPage\";\nimport { ErrorBoundary } from \"@sentry/react\";\nimport ScrollManagement from \"../ScrollManagement/ScrollManagement\";\nimport UplevelUi from \"../UplevelUi/UplevelUi\";\n\n// containers\nimport UnknownUser from \"../../containers/UnknownUser/UnknownUser\";\n\n// context\nimport { UrlParamsProvider } from \"../../context/url-params\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\nconst Auth0Wrapper = () => {\n const history = useHistory();\n const { trackEvent } = useTracking();\n const [preAuth0RedirectUrl, setPreAuth0RedirectUrl] = useState(\n null\n );\n const [hasRedirected, setHasRedirected] = useState(false);\n const [hasSentEvent, setHasSentEvent] = useState(false);\n const auth = useSelector((state: AppStateInterface) => state.auth);\n const authParams = auth?.authParams;\n const session = useSelector((state: AppStateInterface) => state.session);\n const sessionUsername = session?.username;\n\n // fire analytics event when fully populated session params are available on auth0 redirect\n useEffect(() => {\n if (\n !hasSentEvent &&\n hasRedirected &&\n !!preAuth0RedirectUrl &&\n !!sessionUsername &&\n sessionUsername !== \"unauthenticated-user\"\n ) {\n trackEvent({\n e: {\n type: \"auth\"\n },\n label: \"auth0-login-return\",\n value: `returned to ${preAuth0RedirectUrl}`\n });\n setHasSentEvent(true);\n }\n }, [\n hasRedirected,\n hasSentEvent,\n preAuth0RedirectUrl,\n sessionUsername,\n trackEvent\n ]);\n\n const onRedirectCallback = (appState: any) => {\n const originalUri =\n appState && appState.returnTo\n ? appState.returnTo\n : window.location.pathname;\n history.push(originalUri);\n setHasRedirected(true);\n setPreAuth0RedirectUrl(originalUri);\n };\n\n const providerConfig = {\n domain: authParams.domain as string,\n clientId: authParams.clientId,\n audience: authParams.audience,\n redirectUri: window.location.origin,\n onRedirectCallback\n };\n\n return (\n \n \n \n \n \n \n \n \n \n \n {/*\n the way auth0 recommends building the secure route (here:\n https://auth0.com/blog/complete-guide-to-react-user-authentication/)\n makes it so that the component passed to it doesn't seem to\n be stably mounted, which means our initial data load needs\n to be outside it so that everything doesn't get reinitialized\n every time the hook is run\n */}\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default Auth0Wrapper;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components/macro\";\nimport { isNull } from \"lodash\";\nimport * as yup from \"yup\";\n\n// components\nimport GridCol from \"../GridCol/GridCol\";\nimport GridContainer from \"../GridContainer/GridContainer\";\nimport GridRow from \"../GridRow/GridRow\";\n\n// styled components\nconst StyledContainer = styled.section`\n align-items: center;\n display: flex;\n flex-flow: column wrap;\n height: 100vh;\n justify-content: center;\n`;\nconst StyledGridContainer = styled(GridContainer)`\n max-width: 50rem;\n`;\nconst StyledGridCol = styled(GridCol)`\n text-align: center;\n`;\nconst Title = styled.h1`\n font-family: ${props => props.theme.fonts.header.name}, Arial, Helvetica,\n sans-serif;\n font-weight: ${props => props.theme.fonts.header.weights.extraBold};\n padding: 0;\n font-size: 5rem;\n margin-bottom: 2rem;\n`;\nconst StyledForm = styled.form`\n margin-top: 2rem;\n`;\nconst SubmitButton = styled.input`\n background: transparent;\n border: none;\n cursor: pointer;\n font-family: ${props => props.theme.fonts.primary.name}, Arial, Helvetica,\n sans-serif;\n padding: 0;\n color: ${props => props.theme.colors.button.default.default.bg};\n transition: 0.2s all;\n font-size: ${props => props.theme.fonts.primary.sizes.sm};\n letter-spacing: 0.1rem;\n text-transform: uppercase;\n border-color: ${props => props.theme.colors.button.default.default.border};\n border-style: solid;\n border-width: ${props => props.theme.borders.widths.md};\n padding: 1.8rem 2.5rem;\n border-radius: ${props => props.theme.colors.button.border.radius};\n\n margin-top: 2rem;\n\n &&:hover {\n background-color: ${props => props.theme.colors.button.default.hover.bg};\n border-color: ${props => props.theme.colors.button.default.hover.border};\n color: ${props => props.theme.colors.button.default.hover.fg};\n }\n`;\nconst Error = styled.strong`\n color: ${props => props.theme.colors.all.cyclops};\n display: block;\n font-size: 1.1rem;\n font-weight: ${props => props.theme.fonts.primary.weights.regular};\n margin-top: 0.4rem;\n`;\n\n// typescript props\ntype Props = {\n onSubmit: (domain: string) => void;\n};\n\nconst DomainForm = ({ onSubmit }: Props) => {\n const thisTestId = \"domain-form\";\n const [emailIsValid, setEmailIsValid] = useState(null);\n\n const validateEmailAddress = async (valueToValidate: string) =>\n await yup\n .string()\n .email()\n .isValid(valueToValidate);\n\n async function onChangeInput(e: React.ChangeEvent) {\n if (!isNull(emailIsValid)) {\n const inputIsValid = await validateEmailAddress(e.target.value);\n setEmailIsValid(inputIsValid);\n }\n }\n\n async function onSubmitForm(e: React.FormEvent) {\n e.preventDefault();\n const formData = new FormData(e.currentTarget);\n const emailAddress = formData.get(\"emailAddress\") as string;\n const emailAddressIsValid = await validateEmailAddress(emailAddress);\n if (emailAddressIsValid) {\n const domain = emailAddress.substring(emailAddress.indexOf(\"@\") + 1);\n onSubmit(domain);\n } else {\n setEmailIsValid(emailAddressIsValid);\n }\n }\n\n return (\n \n \n \n \n
    \n Welcome\n

    \n Existing customers, please login with your corporate email. If\n you are having trouble logging in, please email{\" \"}\n \n support@uplevelteam.com\n \n .\n

    \n\n

    \n If you are not a customer and are interested in access, please{\" \"}\n \n click here to schedule a demo\n \n .\n

    \n
    \n
    \n
    \n \n \n \n
    \n \n \n
    \n {isNull(emailIsValid) || !!emailIsValid ? null : (\n \n Please enter a valid email address\n \n )}\n \n \n
    \n
    \n
    \n
    \n );\n};\n\nexport default DomainForm;\n","import React, { useEffect, useState } from \"react\";\nimport { isEmpty } from \"lodash\";\nimport { captureException, withScope } from \"@sentry/react\";\n\n// actions\nimport { storeAuthParams } from \"../../actions/authActions\";\n\n// components\nimport { Redirect, useLocation } from \"react-router-dom\";\nimport DomainForm from \"../DomainForm/DomainForm\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\n\n// constants\nimport { authProviders } from \"../../constants/constants\";\n\n// hooks\nimport { useDispatch, useSelector } from \"react-redux\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\n// utils\nimport { requestAuthParams, parseAuthParams } from \"../../utils/auth\";\nimport { parseQuerystring } from \"../../utils/url-params\";\n\nconst AuthPage = () => {\n const thisTestId = \"auth-page\";\n const location = useLocation();\n const parsedQuerystring = parseQuerystring(location.search);\n const { d: urlDomain } = parsedQuerystring;\n const localStorageDomain = localStorage.getItem(\"domain\");\n const [userEnteredDomain, setUserEnteredDomain] = useState();\n const [domain, setDomain] = useState();\n\n const dispatch = useDispatch();\n const authParams = useSelector(\n (state: AppStateInterface) => state.auth.authParams\n );\n const hasAuthParams = !isEmpty(authParams?.clientId);\n\n useEffect(() => {\n // figure out what domain to use -- userEnteredDomain and\n // urlDomain *should* be mutually exclusive as putting the domain in the\n // querystring bypasses the domain form.\n const reconciledDomain =\n userEnteredDomain || (urlDomain as string) || localStorageDomain;\n if (!!reconciledDomain) {\n // cache the reconciled domain in localstorage -- fully aware this could\n // be the same domain that already exists in localstorage, but it seemed more\n // straightforward to include that in the logic and mostly harmless to\n // re-set the same value\n localStorage.setItem(\"domain\", reconciledDomain);\n // and a state variable to trigger the auth params fetch\n setDomain(reconciledDomain);\n }\n }, [localStorageDomain, urlDomain, userEnteredDomain]);\n\n useEffect(() => {\n (async () => {\n if (!hasAuthParams) {\n try {\n let fetchedAuthParams;\n\n if (!!domain) {\n fetchedAuthParams = await requestAuthParams(domain);\n }\n\n if (fetchedAuthParams) {\n const parsedAuthParams = parseAuthParams(fetchedAuthParams);\n const authProvider = /auth0/.test(parsedAuthParams.audience)\n ? authProviders.AUTH0\n : authProviders.OKTA;\n // authParams are used in App.tsx to pass to the auth\n // provider and trigger display of the actual routes\n dispatch(\n storeAuthParams({\n ...parsedAuthParams,\n authProvider\n })\n );\n }\n } catch (e) {\n withScope(scope => {\n scope.setContext(\"request-auth-params\", { domain });\n captureException(e);\n });\n }\n }\n })();\n }, [domain, hasAuthParams]);\n\n return (\n }\n content={}\n testId={thisTestId}\n />\n );\n};\n\nexport default AuthPage;\n","// utils\nimport { legacyApi } from \"./api\";\n\n/**\n * parse auth params\n * @param {Object} params\n */\nexport const parseAuthParams = authParams => {\n return { ...authParams.attributes, tenantId: parseInt(authParams.id, 10) };\n};\n\n/**\n * request params needed for authentication from level9\n * @param {String} queryParam\n */\nexport const requestAuthParams = async domain => {\n const response = await legacyApi.get(\"/0/id\", {\n headers: { Authorization: `Bearer allow` },\n params: { domain }\n });\n return response.data;\n};\n","import { isUndefined } from \"lodash\";\nimport React, { useState } from \"react\";\nimport { useAuthProvider } from \"../../hooks/useAuthProvider\";\nimport DataLoadWrapper from \"../DataLoadWrapper/DataLoadWrapper\";\nimport LoadingStates from \"../LoadingStates/LoadingStates\";\n\n// typescript props\ntype Props = {\n children: React.ReactNode;\n hasRedirected: boolean;\n};\n\nconst OktaUiReadyWrapper = ({ children, hasRedirected }: Props) => {\n const { getIsAuthenticated } = useAuthProvider();\n const [isAuthenticated, setIsAuthenticated] = useState();\n // using then notation because I want to make sure we have the latest accurate\n // result for isAuthenticated and I'm not sure if a useeffect would fire as\n // expected if getIsAuthenticated were just a dependency.\n getIsAuthenticated().then((response: boolean) =>\n setIsAuthenticated(response)\n );\n\n // wait with a spinner until getIsAuthenticated response fully resolves. if\n // authenticated, load the children with the data load wrapper, which has our\n // checks to make sure the data is loaded properly.\n return (\n {children} : null\n }\n testId=\"ui-ready-wrapper\"\n />\n );\n};\n\nexport default OktaUiReadyWrapper;\n","import React, { useEffect, useState } from \"react\";\n\n// components\nimport { Security, LoginCallback, SecureRoute } from \"@okta/okta-react\";\nimport { OktaAuth, toRelativeUrl } from \"@okta/okta-auth-js\";\n// components\nimport { Route, Switch, useHistory } from \"react-router-dom\";\nimport DashboardPage from \"../DashboardPage/DashboardPage\";\nimport { ErrorBoundary } from \"@sentry/react\";\nimport ScrollManagement from \"../ScrollManagement/ScrollManagement\";\nimport OktaUiReadyWrapper from \"../OktaUiReadyWrapper/OktaUiReadyWrapper\";\nimport UplevelUi from \"../UplevelUi/UplevelUi\";\n\n// containers\nimport UnknownUser from \"../../containers/UnknownUser/UnknownUser\";\n\n// context\nimport { UrlParamsProvider } from \"../../context/url-params\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\nimport { useTracking } from \"../../hooks/useTracking\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\nconst OktaWrapper = () => {\n const history = useHistory();\n const { trackEvent } = useTracking();\n\n const [preOktaRedirectUrl, setPreOktaRedirectUrl] = useState(\n null\n );\n const [hasSentEvent, setHasSentEvent] = useState(false);\n const [hasRedirected, setHasRedirected] = useState(false);\n const auth = useSelector((state: AppStateInterface) => state.auth);\n const authParams = auth?.authParams;\n const session = useSelector((state: AppStateInterface) => state.session);\n const sessionUsername = session?.username;\n\n const onOktaReturn = async (_oktaAuth: any, originalUri: string) => {\n history.replace(toRelativeUrl(originalUri, window.location.origin));\n setPreOktaRedirectUrl(originalUri);\n setHasRedirected(true);\n };\n // fire analytics event when fully populated session params are available on okta redirect\n useEffect(() => {\n if (\n !hasSentEvent &&\n hasRedirected &&\n !!preOktaRedirectUrl &&\n !!sessionUsername &&\n sessionUsername !== \"unauthenticated-user\"\n ) {\n trackEvent({\n e: {\n type: \"auth\"\n },\n label: \"okta-login-return\",\n value: `returned to ${preOktaRedirectUrl}`\n });\n setHasSentEvent(true);\n }\n }, [\n preOktaRedirectUrl,\n hasRedirected,\n hasSentEvent,\n sessionUsername,\n trackEvent\n ]);\n\n const oktaAuth = new OktaAuth({\n issuer: authParams.issuer,\n clientId: authParams.clientId,\n redirectUri: `${window.location.origin}/login/callback`,\n scopes: [\"openid\", \"profile\", \"email\"],\n pkce: true\n });\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default OktaWrapper;\n","import React from \"react\";\nimport { isEmpty } from \"lodash\";\nimport * as Sentry from \"@sentry/react\";\n\n// components\nimport { Route } from \"react-router-dom\";\nimport Auth0Wrapper from \"../Auth0Wrapper/Auth0Wrapper\";\nimport AuthPage from \"../AuthPage/AuthPage\";\nimport OktaWrapper from \"../OktaWrapper/OktaWrapper\";\nimport UplevelUi from \"../UplevelUi/UplevelUi\";\n\n// constants\nimport { authProviders } from \"../../constants/constants\";\n\n// hooks\nimport { useSelector } from \"react-redux\";\n\n// interfaces\nimport { AppStateInterface } from \"../../interfaces/app-state\";\n\nconst App = () => {\n const authParams = useSelector(\n (state: AppStateInterface) => state.auth.authParams\n );\n\n // return just the minimal route needed to authenticate if no auth params are\n // in state\n if (isEmpty(authParams?.clientId)) {\n return (\n \n \n \n \n \n );\n }\n\n return authParams.authProvider === authProviders.AUTH0 ? (\n \n ) : (\n \n );\n};\n\nexport default Sentry.withProfiler(App);\n","import React from \"react\";\nimport { render } from \"react-dom\";\nimport rootReducer from \"./reducers/rootReducer\";\nimport { createStore } from \"redux\";\nimport { Provider as ReduxProvider } from \"react-redux\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport config from \"./env-config\";\n\n// components\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport App from \"./components/App/App\";\nimport { QueryClient, QueryClientProvider } from \"react-query\";\n\nimport \"./index.css\";\n\n// sentry\nimport * as Sentry from \"@sentry/react\";\nimport { BrowserTracing } from \"@sentry/tracing\";\nimport { ExtraErrorData } from \"@sentry/integrations\";\nimport { createBrowserHistory } from \"history\";\n\nconst history = createBrowserHistory();\n\nconst sentryReduxEnhancer = Sentry.createReduxEnhancer({});\n\nSentry.init({\n dsn: process.env.NODE_ENV === \"development\" ? null : config.SENTRY_DSN,\n release: \"client-dashboard@\" + process.env.REACT_APP_VERSION,\n autoSessionTracking: true,\n environment: process.env.NODE_ENV === \"production\" ? \"production\" : \"staging\",\n integrations: [\n new ExtraErrorData(),\n new BrowserTracing({\n routingInstrumentation: Sentry.reactRouterV5Instrumentation(history)\n })\n ],\n normalizeDepth: 10, // increase depth for Redux state debugging\n\n // Set tracesSampleRate to 1.0 to capture 100%\n // of transactions for performance monitoring.\n // We recommend adjusting this value in production\n tracesSampleRate: 0.75\n});\n\nconst queryClient = new QueryClient();\n\nconst store = createStore(rootReducer, sentryReduxEnhancer);\n\nrender(\n \n \n \n \n \n \n ,\n\n document.getElementById(\"root\")\n);\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\n// serviceWorker.unregister();\n"],"sourceRoot":""}