{"version":3,"sources":["components/deactivate-dates-input/styles.module.css","assets/Forsidebilde_BifrostBooking.svg","assets/logo-dark@2x.png","assets/select-company.png","contexts/ConfirmContext.js","components/confirmation-dialog/styles.js","components/confirmation-dialog/ConfirmationDialog.jsx","providers/ConfirmProvide.js","reducers/activityAndAccommodation.js","constants/activityAndAccommodationActionTypes.js","constants/userSettings.js","reducers/userSettings.js","reducers/businessOwner.js","constants/businessOwner.js","reducers/index.js","config.js","components/private-route/PrivateRoute.jsx","components/auth-layout/styles.js","components/auth-layout/AuthLayout.jsx","components/logo/Logo.jsx","components/circular-loader/styles.js","components/circular-loader/CircularLoader.jsx","components/input/styles.js","components/input/SimpleInput.jsx","components/input/Input.jsx","translations/index.js","translations/English.js","translations/Norwegian.js","components/textarea-input/styles.js","components/textarea-input/TextareaInput.jsx","components/line-on-sides-link/LineOnSidesLink.jsx","graphql/mutations/auth.js","graphql/mutations/business-owner.js","graphql/queries/business-owner.js","actions/businessOwner.js","constants/base.js","components/app-header/styles.js","components/app-header/AppHeader.jsx","components/vertical-tabs/VerticalTabs.jsx","components/tabs-menu/styles.js","components/tabs-menu/TabsMenu.jsx","components/tabs-panel/TabsPanel.jsx","components/pagination/styles.js","components/pagination/Pagination.jsx","pages/create-activity/constants.js","utils/validators.js","components/general-create/validate.js","components/general-create/styles.js","components/custom-date-range-picker/styles.js","utils/book-accommodation/getIsHalf.js","components/custom-date-range-picker/customDateRangePicker.jsx","components/form-action-buttons/styles.js","utils/book-accommodation/availableDates.js","components/deactivate-dates-input/index.jsx","components/general-create/GeneralCreate.jsx","components/general-create/accommodation/validate.js","components/general-create/accommodation/AccommodationGeneralCreate.jsx","components/general-create/validateSecondLanguage.js","components/general-create/GeneralCreateSecondLanguage.jsx","components/general-create/accommodation/validateSecondLanguage.js","components/general-create/accommodation/AccommodationGeneralCreateSecondLanguage.jsx","components/description-create/validate.js","components/description-create/styles.js","components/description-create/DescriptionCreate.jsx","components/description-create/accommodation/validate.js","components/description-create/accommodation/AccommodationDescriptionCreate.jsx","components/schedule-create/styles.js","components/schedule-create/ScheduleCreate.jsx","components/multi-select/styles.js","components/multi-select/MultiSelectField.jsx","components/dropdown-icon-button/styles.js","components/dropdown-icon-button/DropdownIconButton.jsx","components/radio-buttons-group/styles.js","components/radio-buttons-group/RadioButtonsGroup.jsx","components/form-action-buttons/FormActionButtons.jsx","components/dnd-upload-image/styles.js","components/dnd-upload-image/DndUploadImage.jsx","components/chips-input/styles.js","components/chips-input/ChipsInput.jsx","components/chips-input/AsyncChipsInput.jsx","components/single-date-picker/styles.js","components/single-date-picker/SingleDatePicker.jsx","components/radio-btn-tabs-menu/styles.js","components/radio-btn-tabs-menu/RadioBtnTabsMenu.jsx","components/schedule-date/validate.js","theme.js","components/schedule-date/styles.js","components/schedule-date/ScheduleDate.jsx","components/schedule-date-time/validate.js","components/schedule-date-time/styles.js","components/schedule-date-time/ScheduleDateTime.jsx","components/schedule-pass/styles.js","components/schedule-pass/SchedulePass.jsx","components/popover-wrapper/styles.js","components/popover-wrapper/PopoverWrapper.jsx","components/drop-down/styles.js","components/drop-down/DropDown.jsx","components/autocomplete-dropdown/styles.js","components/autocomplete-dropdown/AutocompleteDropdown.jsx","components/checkbox-buttons-group/styles.js","components/checkbox-buttons-group/CheckboxButtonsGroup.jsx","components/expansion-panel-wrapper/styles.js","components/expansion-panel-wrapper/ExpansionPanelWrapper.jsx","components/simple-expansion-panel/styles.js","components/simple-expansion-panel/SimpleExpansionPanel.jsx","components/text-icon-button/styles.js","components/text-icon-button/TextIconButton.jsx","components/schedule-days-time-duration/styles.js","components/schedule-days-time-duration/ScheduleDaysTimeDuration.jsx","components/time-duration/styles.js","components/time-duration/validate.js","components/time-duration/TimeDuration.jsx","components/time-picker/styles.js","components/time-picker/TimePicker.jsx","components/prices-create/styles.js","components/prices-create/PricesCreate.jsx","components/prices-create/accommodation/AccommodationPricesCreate.jsx","components/prices-daily/validate.js","components/prices-daily/PricesDaily.jsx","components/categories-prices/styles.js","components/categories-prices/CategoriesPrices.jsx","components/price-per-day/validate.js","components/price-per-day/styles.js","components/price-per-day/PricePerDay.jsx","components/currency-input-wrapper/styles.js","components/currency-input-wrapper/CurrencyInputWrapper.jsx","components/prices-fixed/styles.js","components/prices-fixed/PricesFixed.jsx","components/prices-fixed/validate.js","components/prices-fixed/DailyPricesFixed.jsx","components/prices-equal/validate.js","components/prices-equal/styles.js","components/prices-equal/PricesEqual.jsx","components/prices-daily-schedule/validate.js","components/prices-daily-schedule/PricesDailySchedule.jsx","components/prices-category-section/validate.js","components/prices-category-section/styles.js","components/prices-category-section/PricesCategorySection.jsx","components/fee-category-section/styles.js","components/fee-category-section/feeCategorySection.jsx","components/fee-tax-create/validate.js","components/fee-tax-create/styles.js","components/fee-tax-create/CreateFee.jsx","actions/activityAndAccommodation.js","components/add-ons/validate.js","components/add-ons/styles.js","components/add-ons/AddOns.jsx","components/add-ons-fields/styles.js","components/add-ons-fields/AddOnsFields.jsx","graphql/queries/accommodations.js","components/related-accommodations/styles.js","components/related-accommodations/accommodation/RelatedAccommodations.jsx","graphql/queries/activities.js","components/related-accommodations/activity/RelatedActivities.jsx","components/integration/validate.js","components/integration/styles.js","components/integration/Integration.jsx","utils/book-accommodation/prepareParticipants.js","utils/accommodations-and-activities/prepareAccommodationAndActivityData.js","utils/accommodations-and-activities/transformReceivedDeactivationDates.js","utils/accommodations-and-activities/prepareReceivedActivityData.js","pages/widget/constants.js","pages/create-accommodation/constants.js","utils/accommodations-and-activities/prepareReceivedAccommodationData.js","utils/form-localization/formLocalization.jsx","utils/prices/formatter.js","pages/book-activity/components/number-of-participants/styles.js","pages/book-activity/components/number-of-participants/NumberOfParticipants.jsx","pages/book-activity/components/add-ons-list/styles.js","pages/book-activity/components/add-ons-list/AddOnsList.jsx","components/book-dialog/accommodation/validate.js","components/book-dialog/styles.js","components/book-dialog/accommodation/BookAccommodationDialog.jsx","utils/book-activity/prepareParticipants.js","utils/book-activity/availableDates.js","utils/book-activity/maxParticipants.js","components/book-dialog/activity/validate.js","components/book-dialog/activity/BookActivityDialog.jsx","components/book-info-list/styles.js","components/book-info-list/BookInfoList.jsx","graphql/queries/activities-bookings.js","components/update-activity-wrapper/UpdateActivityWrapper.jsx","components/update-accommodation-wrapper/UpdateAccommodationWrapper.js","utils/book-accommodation-and-activity/prepareReceivedDataMethods.js","utils/book-accommodation/prepareReceivedBookedAccoomodationData.js","graphql/queries/accommodations-bookings.js","graphql/mutations/accommodations-bookings.js","utils/book-accommodation-and-activity/currency.js","utils/book-accommodation-and-activity/totalPrice.js","utils/book-accommodation-and-activity/prepareBookDataMethods.js","utils/book-accommodation/prepareBookAccommodationData.js","pages/book-activity/components/guest-information/styles.js","pages/book-activity/components/guest-information/GuestInformation.jsx","pages/book-activity/components/booking-summary/styles.js","pages/book-activity/components/booking-summary/BookingSummary.jsx","components/icons/TrashIcon.jsx","components/icons/EditIcon.jsx","pages/book-activity/components/book-related-field/styles.js","pages/book-activity/components/book-related-field/BookRelatedField.jsx","pages/book-accommodation/validate.js","pages/book-accommodation/styles.js","pages/book-accommodation/BookAccommodation.jsx","components/update-accommodation-booking-wrapper/styles.js","components/update-accommodation-booking-wrapper/UpdateAccommodationBookingWrapper.jsx","utils/book-activity/prepareReceivedBookedActivityData.js","graphql/mutations/activities-bookings.js","pages/book-activity/components/start-time-and-duration-radio-buttons-group/styles.js","pages/book-activity/components/start-time-and-duration-radio-buttons-group/StartTimeAndDurationRadioButtonsGroup.jsx","utils/book-activity/prepareBookActivityData.js","pages/book-activity/validate.js","pages/book-activity/styles.js","pages/book-activity/BookActivity.jsx","components/update-activity-booking-wrapper/styles.js","components/update-activity-booking-wrapper/UpdateActivityBookingWrapper.jsx","components/simple-pie-chart/SimplePieChart.jsx","components/custom-chart-legend/styles.js","components/custom-chart-legend/CustomChartLegend.jsx","components/select-drop-down/styles.js","components/select-drop-down/SelectDropDown.jsx","components/guests-details-information/GuestsDetailsInformation.jsx","components/bullet-points/BulletPoints.jsx","actions/userSettings.js","components/trekksoft-categories-mapping/styles.js","components/trekksoft-categories-mapping/TrekkSoftCategotiesMapping.jsx","components/integrations-input-fields/styles.js","components/integrations-input-fields/IntegrationsSettingsInputFields.jsx","components/integrations-settings/validate.js","components/integrations-settings/styles.js","components/integrations-settings/IntegrationsSettings.jsx","components/payments-input-fields/styles.js","components/payments-input-fields/PaymentsInputFields.jsx","components/payments-settings/validate.js","components/payments-settings/styles.js","components/payments-settings/PaymentsSettings.jsx","components/custom-multi-select/styles.js","components/custom-multi-select/CustomMultiSelect.jsx","components/custom-color-picker/styles.js","components/custom-color-picker/CustomColorPicker.jsx","components/select-company-img-box/styles.js","components/select-company-img-box/SelectCompanyImgBox.jsx","utils/bookings/prepareBookingsData.js","components/booking-price-total/styles.js","components/booking-price-total/BookingPriceDetails.jsx","components/upcoming-accommodation-info-popup/styles.js","components/upcoming-accommodation-info-popup/UpcomingAccommodationPopup.jsx","graphql/mutations/booking.js","components/upcoming-activities-info-popup/styles.js","components/upcoming-activities-info-popup/UpcomingActivitiesPopup.jsx","components/business-owner-form/validate.js","components/business-owner-form/styles.js","components/business-owner-form/BusinessOwnerForm.jsx","components/userForm/validate.js","components/userForm/styles.js","components/userForm/UserForm.jsx","components/custom-date-range-picker-activity/styles.js","components/custom-date-range-picker-activity/CustomDateRangePickerActivity.jsx","custom-hooks/useField.js","custom-hooks/useForm.js","pages/sign-in/styles.js","pages/sign-in/index.js","pages/sign-in/SignIn.jsx","pages/reset-password/styles.js","pages/reset-password/index.js","pages/reset-password/ResetPassword.jsx","graphql/mutations/token.js","pages/create-new-password/styles.js","pages/create-new-password/index.js","pages/create-new-password/CreateNewPassword.jsx","utils/accommodations-and-activities/prepareActivityData.js","utils/accommodations-and-activities/activityNextStepAvailableHander.js","utils/accommodations-and-activities/activityDiscardChangesHandler.js","utils/accommodations-and-activities/addOnsLanguagesHandler.js","graphql/mutations/activity.js","pages/create-activity/styles.js","utils/files/handleFIles.js","pages/create-activity/index.js","pages/create-activity/CreateActivity.jsx","utils/accommodations-and-activities/activityFormDoneHandler.js","graphql/mutations/accommodation.js","utils/accommodations-and-activities/prepareAccommodationData.js","utils/accommodations-and-activities/accommodationNextStepAvailableHandler.js","pages/create-accommodation/styles.js","pages/create-accommodation/index.js","pages/create-accommodation/CreateAccommodation.js","utils/accommodations-and-activities/mandatoryFeeLanguageHandler.js","utils/accommodations-and-activities/accommodationDiscardChangesHandler.js","utils/accommodations-and-activities/generalAndDescriptionFormsHandler.js","utils/accommodations-and-activities/accommodationFormDoneHandler.js","pages/accommodations-and-activities/components/schedule-dates/ScheduleDates.jsx","pages/accommodations-and-activities/components/accommodations-list/styles.js","pages/accommodations-and-activities/components/accommodations-list/AccommodationsList.jsx","pages/accommodations-and-activities/components/activities-list/styles.js","pages/accommodations-and-activities/components/activities-list/ActivitiesList.jsx","pages/accommodations-and-activities/styles.js","constants/entity-tabs.js","pages/accommodations-and-activities/constants/entity-values.js","components/buttons/OutlinedButton.js","pages/accommodations-and-activities/components/ToolBar/styles.js","pages/accommodations-and-activities/components/ToolBar/index.jsx","pages/accommodations-and-activities/components/EntityTabBar/styles.js","pages/accommodations-and-activities/components/EntityTabComponent/styles.js","pages/accommodations-and-activities/components/EntityTabComponent/index.js","pages/accommodations-and-activities/components/EntityTabBar/index.js","graphql/queries/accommodations-activities-overview.js","pages/accommodations-and-activities/hooks/useOverview.js","pages/accommodations-and-activities/hooks/useEntityTabs.js","pages/accommodations-and-activities/index.js","pages/accommodations-and-activities/AccommodationsAndActivities.jsx","pages/book-activities-list/components/activities-list/styles.js","pages/book-activities-list/components/activities-list/ActivitiesList.jsx","pages/book-activities-list/styles.js","pages/book-activities-list/BookActivitiesList.jsx","pages/book-activity-manual/validate.js","pages/book-activity-manual/ManualBookActivity.jsx","pages/book-accommodations-list/components/accommodations-list/styles.js","pages/book-accommodations-list/components/accommodations-list/AccommodationsList.jsx","pages/book-accommodations-list/styles.js","pages/book-accommodations-list/BookAccommodationsList.jsx","components/booking-details-dialog/styles.js","components/booking-details-dialog/NotesForm/index.js","components/booking-details-dialog/BookingDetailsDialog.jsx","components/list-popover/styles.js","components/list-popover/ListPopover.jsx","components/number-icon/styles.js","components/number-icon/NumberIcon.jsx","graphql/queries/bookings.js","pages/bookings-list/components/current-bookings-list/styles.js","hooks/useSyncDialodContent.js","pages/bookings-list/components/current-bookings-list/CurrentBookingsListTable.jsx","components/handled-status-cell/styles.js","components/handled-status-cell/handledCell.jsx","pages/bookings-list/components/cancelled-bookings-list/styles.js","pages/bookings-list/components/cancelled-bookings-list/CancelledBookingsListTable.jsx","pages/bookings-list/components/history-bookings-list/styles.js","pages/bookings-list/components/history-bookings-list/HistoryBoookingListTable.jsx","pages/bookings-list/styles.js","pages/bookings-list/BookingsList.jsx","pages/bookings-list/index.js","pages/book-accommodation-manual/validate.js","pages/book-accommodation-manual/ManualBookAccommodation.jsx","graphql/queries/statistics.js","pages/statistics/components/statistics-charts-tabs/constants.js","pages/statistics/components/statistics-charts-tabs/styles.js","utils/statistics/prepareStatisticsData.js","pages/statistics/components/statistics-charts-tabs/StatisticsChartsTabs.jsx","pages/statistics/components/statistics-bookings-list/styles.js","pages/statistics/components/statistics-bookings-list/StatisticsBookingsList.jsx","pages/statistics/styles.js","pages/statistics/Statistics.jsx","graphql/mutations/settings.js","graphql/queries/settings.js","utils/prepareUserSettingsData.js","components/google-analytics-form/styles.js","components/google-analytics-form/GoogleAnalyticsForm.jsx","components/email-settings-form/constants.js","components/email-settings-form/styles.js","components/email-settings-form/EmailSettingsForm.jsx","pages/user-settings/styles.js","pages/user-settings/SettingsPage.jsx","pages/overview-calendar/components/calendar-general-row/styles.js","pages/overview-calendar/components/calendar-general-row/CalendarGeneralRow.jsx","pages/overview-calendar/components/overview-calendar-header/styles.js","pages/overview-calendar/components/overview-calendar-header/OverviewCalendarHeader.jsx","utils/datesMethods.js","pages/overview-calendar/styles.js","pages/overview-calendar/ActivitiesOverviewCalendar.jsx","pages/overview-calendar/AccommodationsOverviewCalendar.jsx","graphql/queries/overview.js","pages/overview/components/upcoming-accommodations/styles.js","pages/overview/components/upcoming-accommodations/UpcomingAccommodations.jsx","pages/overview/components/upcoming-activities/styles.js","pages/overview/components/upcoming-activities/UpcomingActivities.jsx","pages/overview/styles.js","pages/overview/components/ToolbarTabs/styles.js","pages/overview/components/ToolbarTabs/index.jsx","pages/overview/Overview.jsx","pages/widget-settings/components/instructions/styles.js","pages/widget-settings/components/instructions/Instructions.jsx","pages/widget-settings/components/widget-form/validate.js","pages/widget-settings/components/widget-form/styles.js","pages/widget-settings/components/widget-form/WidgetForm.jsx","graphql/queries/widget.js","graphql/mutations/widget.js","constants/widget.js","utils/widget/generateWidgetButton.js","pages/widget-settings/styles.js","pages/widget-settings/WidgetSettings.jsx","utils/widget/prepareReceivedData.js","utils/widget/getDataToStore.js","pages/business-owners/styles.js","pages/business-owners/BusinessOwners.jsx","pages/users/styles.js","pages/users/Table.jsx","pages/users/constants.js","pages/users/Users.jsx","pages/test-widget/TestWidget.jsx","pages/payments-instruction/styles.js","pages/payments-instruction/StripeInstruction.jsx","pages/payments-instruction/PayPalInstruction.jsx","pages/widget/components/booking-information/styles.js","pages/widget/components/booking-information/BookingInformation.jsx","constants/participants.js","pages/widget/components/checkout/styles.js","pages/widget/components/header/styles.js","pages/widget/components/header/Header.jsx","pages/widget/components/menu/styles.js","custom-hooks/useWindowSize.js","pages/widget/components/menu/Menu.jsx","pages/widget/components/product-short-info/styles.js","pages/widget/components/product-short-info/ProductShortInfo.jsx","pages/widget/components/general-accommodations-list/styles.js","pages/widget/components/general-accommodations-list/GeneralAccommodationsList.jsx","pages/widget/components/general-activities-list/styles.js","pages/widget/components/general-activities-list/GeneralActivitiesList.jsx","pages/widget/components/product-info/styles.js","pages/widget/components/product-info/ProductInfo.jsx","pages/widget/components/visiters/styles.js","pages/widget/components/visiters/Visiters.jsx","pages/widget/components/date-and-guests/validate.js","pages/widget/components/date-and-guests/styles.js","pages/widget/components/widget-loader/WidgetLoader.js","pages/widget/components/date-and-guests/DateAndGuests.jsx","pages/widget/components/add-ons/styles.js","pages/widget/components/add-ons/AddOns.jsx","pages/widget/components/mandatory-fees/styles.js","pages/widget/components/mandatory-fees/MandatoryFees.jsx","pages/widget/components/activities-list/styles.js","pages/widget/components/activities-list/ActivitiesList.jsx","utils/widget/getTotalPrice.jsx","pages/widget/components/footer/styles.js","pages/widget/components/footer/Footer.jsx","pages/widget/components/related-product-dialog/activity-dialog/validate.js","pages/widget/components/related-product-dialog/styles.js","pages/widget/components/related-product-dialog/activity-dialog/ActivityDialog.jsx","pages/widget/components/related-product-dialog/accommodation-dialog/validate.js","pages/widget/components/related-product-dialog/accommodation-dialog/AccommodationDialog.jsx","pages/widget/components/related-products/styles.js","pages/widget/components/related-products/Products.jsx","graphql/mutations/booking-payment.js","utils/widget/getAvailablePaymentsTypes.js","pages/widget/components/booking-confirm-dialog/styles.js","pages/widget/components/booking-confirm-dialog/BookingConfirmDialog.jsx","pages/widget/components/payment/validate.js","pages/widget/components/payment/styles.js","pages/widget/components/payment/Payment.jsx","pages/widget/styles.js","pages/widget/Widget.jsx","pages/widget/components/checkout/Checkout.jsx","pages/widget/hooks/useAccommodationsInfiniteQuery.js","pages/widget/hooks/useActivitiesInfiniteQuery.js","widgetTheme.js","pages/booking-details/styles.js","pages/booking-details/BookingDetails.jsx","routes.js","App.js","i18n.js","serviceWorker.js","index.js"],"names":["module","exports","createContext","useStyles","makeStyles","theme","paper","backgroundColor","border","boxSizing","borderRadius","minWidth","maxWidth","breakpoints","down","contentRoot","padding","contentTextRoot","fontSize","lineHeight","fontWeight","color","margin","title","actionsRoot","borderTop","marginTop","cancelBtnRoot","baseUI","marginRight","actionBtnRoot","boxShadow","closeBtn","position","top","right","closeIcon","ConfirmationDialog","open","options","onClose","onCancel","onConfirm","classes","useTranslation","t","description","warningText","confirmationText","cancellationText","translate","Dialog","IconButton","className","onClick","DialogTitle","id","root","disableTypography","DialogContent","DialogContentText","DialogActions","Button","variant","autoFocus","ConfirmProvider","children","useState","setOptions","resolveReject","setResolveReject","resolve","reject","confirm","useCallback","Promise","handleClose","handleCancel","handleConfirm","ConfirmContext","Provider","value","length","initialState","deletedAddOns","deletedMandatoryFees","deletedRelatedAccommodations","deletedRelatedActivities","deletedIntegrations","activityReducer","state","action","type","Set","concat","parseInt","AVAILABLE_PAYMENT_SYSTEMS","deletedPaymentsSettings","deletedIntegrationsSettings","deletedTrekksoftCategories","userSettingsReducer","paymentSystem","integrationPlatform","selectedBusinessOwner","availableBusinessOwners","businessOwnerReducer","businessOwner","businessOwners","rootReducer","combineReducers","form","formReducer","activityAndAccommodation","activityAndAccommodationReducer","userSettings","STAGE_API","STAGE_WIDGET_CSS_LINK","STAGE_WIDGET_JS_LINK","STAGE_WIDGET_LINK","URI","DOMAIN","WIDGET_LINK","process","REACT_APP_IS_STAGE_BUILD","PrivateRoute","Component","component","rest","render","props","background","height","width","display","justifyContent","alignItems","flexDirection","authBox","header","content","marginBottom","imageWrapper","image","marginLeft","contentMain","footer","borderBottomRightRadius","borderBottomLeftRadius","textAlign","AuthLayout","src","AuthBoxImage","alt","Typography","Logo","classNames","LogoImage","loaderWrapper","zIndex","loaderItem","CircularLoader","isLoading","loaderClassName","CircularProgress","disableShrink","label","textTransform","letterSpacing","inputRoot","inputCheckbox","paddingBottom","inputRootFocused","error","input","disabledInput","disabledLabel","SimpleInput","errors","errorText","style","otherProps","showErrors","InputLabel","htmlFor","disabled","InputBase","focused","FormHelperText","Input","isHiddenErrorMsg","maxLength","isOnlyNumber","isPhoneNumber","labelClass","inputClass","mask","placeholder","meta","touched","submitFailed","inputProps","onChange","e","target","test","replace","TRANSLATIONS","English","titleAndDescription","overview","generalInfo","whatToBring","additionalInfo","cancellation","included","notIncluded","bedDetails","fee","titleIsRequired","overviewIsRequired","cancellationIsRequired","cancellationHelpMessage","includedHelpMessage","Norwegian","textarea","resize","outline","minHeight","maxHeight","autoSizeTextarea","TextareaInput","isTranslateError","language","isAutosize","TextareaAutosize","rowsMax","resetPasswordLink","flex","LineOnSidesLink","path","to","SIGNIN_MUTATION","gql","RESET_PASSWORD_MUTATION","LOG_OUT","UPDATE_BUSINESS_OWNER","CREATE_BUSINESS_OWNER","DELETE_BUSINESS_OWNER","UPDATE_BUSINESS_OWNER_USER","CURRENT_BUSINESS_OWNER_INFO","BUSINESS_OWNER","EXISTING_BUSINESS_OWNERS","setCurrentBusinessOwner","LOCALES_OBJ","Norway","PAYPAL_LOCALES_OBJ","INTEGRATIONS_CONSTANTS","Trekksoft","Expedia","Airbnb","Citybreak","TripAdvisor","INTEGRATIONS_NAMES","TREKKSOFT","BOOKING","EXPEDIA","AIRBNB","CITYBREAK","TRIPADVISOR","WEEK_DAYS","USER_TYPE","leftSection","logo","navigation","drawerNavigation","spacing","navigationItems","listStyle","navigationItem","cursor","wordWrap","whiteSpace","navigationItemLink","activeNavigationLink","headerActions","createNewBtn","btnTitle","paddingRight","createNewIcon","fill","btnActionWrapper","borderRight","menu","businessOwnerNameWrapper","languageSelectorWrapper","businessOwnerSelectorWrapper","paddingTop","businessOwnerSelectorNotifySettings","logOutBtn","logOutBtnTitle","businessOwnerName","selectedItem","getAllCompanies","data","map","owner","index","searchInfo","firstName","lastName","companyName","email","phoneNumber","referencePrefix","isNotify","MenuLink","activeOnlyWhenExact","match","useRouteMatch","exact","connect","dispatch","setBusinessOwner","item","setAvailableBusinessOwners","i18n","history","useHistory","React","setValue","isSuperUser","setIsSuperUser","isBO","setIsBO","anchorEl","setAnchorEl","useMutation","logOut","updateBusinessOwner","useQuery","refetchBO","refetch","enqueueSnackbar","useSnackbar","setLoading","drawerOpen","setDrawerOpen","selectedLanguage","isNotification","setNotifyValue","onChangeNotif","isNewNotif","newBOData","result","find","obj","isSuperuser","__typename","variables","then","a","async","changeLanguage","languageValue","localStorage","setItem","changeBusinessOwner","newValue","selectedbusinessOw","JSON","stringify","selectedBO","handleOpenMenu","event","currentTarget","useEffect","setBusinessOwnerFromStorage","listOfBusinessOwners","getItem","parse","businessOwnerIndex","findIndex","selectedBusinessOw","currentBusinessOwner","userType","AppBar","Hidden","mdUp","aria-label","smDown","keepMounted","Boolean","MenuItem","selected","location","pathname","push","search","items","Drawer","anchor","tabs","palette","divider","tabPanel","TabPanel","other","role","hidden","aria-labelledby","indicatorColor","orientation","container","indicator","tabLabel","errorIcon","doneIcon","customLabel","tabIsFilled","selectedLabel","tabIsAvailable","tabStyles","wrapper","activeTab","isDoneTab","change","tabClasses","isAllPreviousValid","isValid","isAvailable","tab","Tab","key","name","TabsPanel","paginationContainer","page","itemRoot","itemEllipsis","itemSelected","Pagination","amount","total","shape","hideNextButton","hidePrevButton","renderItem","ellipsis","moment","tz","setDefault","AVAILABLE_LANGUAGES","SCHEDULE_DAYS","Mon","Tue","Wed","Thu","Fri","Sat","Sun","SCHEDULE_SECTION","CATEGORIES","PLATFORMS","INITIAL_ACTIVITY_FORM_DATA","generalForm","activityType","productCode","coverPhoto","descriptionForm","scheduleDateForm","availability","startDate","endDate","days","cutoffPeriod","cutoffPeriodTimeType","scheduleDateTimeForm","daysArray","uuid","startTimeAndDuration","startTime","duration","timeType","schedulePassForm","pricesFixedForm","pricesDailyForm","pricesEqualForm","categories","participant","USD","EUR","NOK","pricesDailyScheduleForm","addOnsForm","addOns","relatedAccommodationsForm","relatedAccommodations","integrationForm","integrations","ACTIVITY_FORMS_ORDER","0","1","2","ACTIVITY_FORMS_NUMBERS","scheduleForm","pricesForm","ACTIVITY_SCHEDULE_FORMS_NUMBERS","ACTIVITY_PRICES_FORMS_NUMBERS","emailValidationRegex","passwordRegex","numberRegex","isEmail","errorMessage","isRequired","isNumber","toString","isRequiredFieldTrueInObject","Object","keys","filter","field","isValidLength","isValidPassword","isValidUploadedImageSize","file","size","isValidUploadedImageFormat","indexOf","isFieldInArray","array","arrayFieldName","isRequiredCurrency","validate","values","minParticipants","maxParticipants","startingPoint","inputIndent","row","column","spaceBetween","datePickerWrapper","helpIcon","timePicker","labelWithHelpIcon","chipsHelpIcon","activityTypeWrapper","colorPaletteWrapper","colorPalette","editIconWrapper","bottom","helpIconColor","secondLabel","datesLabel","fromTo","customInputDate","calendarIcon","dateRangeDivider","hiddenDateRangePicker","left","focus","errorInput","errorOpenedPicker","checkboxRoot","checked","disabledCheckbox","checkboxIcon","ClearButton","textDecoration","dayHalfAvailable","dayLeftDisable","dayRightDisable","getIsHalf","disabledDates","calendarDay","date","isSame","isAvailableForCheckOut","isAvailableForCheckIn","disableLeft","disableRight","CustomDateRangePicker","isStartDateRenderMonth","minimumNights","availableRange","changeMonthsCallback","containerClassName","initialFocus","dateRangePickerClass","inputClassName","isOutsideRange","numberOfMonths","isHideDatesLabel","labelTypographyVariant","daySize","secondLabelClass","widget","updateBooking","statistics","accomodationDialog","endDatePlusOneDay","add","startDateFocusId","setFocus","isHiddenNextButton","setHiddenNextButton","firstDisabledDate","setFirstDisabledDate","setRender","renderMonth","setRenderMonth","setTimeout","firstDisabledDateAfterSelectedDate","selectedStartDate","selectedEndDate","onChangeHandler","useMediaQuery","isBlockedDay","itemDate","isSameDate","deactivationBooking","isSameOrAfterDate","isSameOrAfter","isBlockedDayByDisabledDates","isBetween","daysOfWeek","dayOfDate","format","includes","setChecked","isDisabledDates","setIsDisabledDates","disabledDateslist","setDisabledDateslist","startOf","endOf","dates","clone","diff","locale","text","verticalSpacing","noBorder","customArrowIcon","readOnly","startDateId","endDateId","displayFormat","onDatesChange","onPrevMonthClick","onNextMonthClick","currentDate","endAvailableDate","navNext","focusedInput","onFocusChange","initialVisibleMonth","isDayBlocked","some","disabledDate","isBlocked","isAfter","isTheSameDisabledDate","isBlockedDayAfterSelectedStartDate","renderMonthElement","month","renderDayContents","day","_locale","_weekdaysMin","hideKeyboardShortcutsPanel","FormGroup","FormControlLabel","labelPlacement","control","Checkbox","icon","checkedIcon","actionBtnDisabled","borderColor","saveButton","getDisabledDates","initialDates","bookedDates","accommodations","getRange","fromDate","toDate","range","i","getAvailableRangeDates","accommodation","Wrapper","styled","div","Label","Section","DatePickerWrapper","CloseIconWrapper","DeactivateDatesInput","bookDates","buttonClasses","useContext","renderDates","setRenderedDates","Array","isArray","handleChangeDate","newDate","handleDeleteDateRange","undefined","isCanceled","catch","activeDates","currentId","dateValue","wrapperClassName","inputStyles","reduce","acc","cancelBtnDisabled","reduxForm","destroyOnUnmount","forceUnregisterOnUnmount","touchOnBlur","initialValues","handleSubmit","isUpdate","setSubmitButton","languages","addLanguage","deleteLanguage","selectLanguage","availableLanguages","x","availableItems","notAvailableToDeleteItems","list","addItem","deleteItem","selectItem","onSubmit","Field","DndUploadImage","RadioButtonsGroup","cancelPath","actionLabel","guests","minNights","colorHandler","openColorPicker","setOpenColorPicker","TimePicker","ChipsInput","editIcon","defaultColor","CustomColorPicker","save","ScheduleCreate","selectedTabIndex","getPricesData","borderBottom","addBtn","MultipleSelectField","notAvailableItem","isAvailableToDelete","stopPropagation","onDeleteHandler","click","baseStyles","circleIcon","labelText","menuItemStyles","menuListStyles","iconButtonStyles","DropdownIconButton","baseClasses","menuItemClasses","menuListClasses","iconButtonClasses","onClickHandler","radioBtnLabelChecked","formControlLabelStyles","radioBtnStyles","isId","checkboxTitleField","radioGroupRootClass","wrapperClass","formControlLabelClasses","radioBtnSClasses","isSelected","RadioGroup","updatedItem","Radio","FormActionButtons","isDisabledAction","cancelCallback","integration","pathName","historyState","tabNumber","defaultZone","imageZone","imageIcon","opacity","browseWord","imageBlock","backgroundSize","backgroundRepeat","backgroundPosition","baseIcon","editBtnLabel","deleteIcon","drag","errorMsg","isDelete","errorClass","setDrag","dropRef","createRef","dragCounter","handleDrag","preventDefault","handleDragIn","dataTransfer","handleDragOut","handleDrop","files","reader","FileReader","onload","imageEvent","readAsDataURL","clearData","current","addEventListener","removeEventListener","ref","accept","backgroundImage","autocompleteStyles","endAdornment","tag","chipStyles","deleteChipIcon","autocompleteClasses","chipClasses","Autocomplete","multiple","freeSolo","renderTags","getTagProps","option","Chip","renderInput","params","TextField","fullWidth","query","queryName","optionLabel","remove","setOpen","businessOwnerId","ownerId","loading","getOption","onOpen","deletedItems","getOptionSelected","getOptionLabel","InputProps","Fragment","inputLabel","selectedDate","calendarButton","CalendarImage","viewBox","xmlns","fillRule","clipRule","d","SingleDatePicker","onChangeCallback","closeCalendarCallback","isInput","cutoffData","inputLabelClass","customInputClass","isWidgetSearch","isFocused","dateRender","isIcon","useTheme","isBlockDayByCutoffPeriodWithoutTime","dateWithTime","set","hour","minute","nowCutoffDate","isSameOrBefore","isBlockDayByCutoffPeriod","isDisabledDate","get","every","isBlockDayByCutoffPeriodWithTime","onDateChange","labelName","labelInstruction","checkedLabel","rootCheckbox","radioGroup","RadioBtnTabsMenu","activeSubTab","selectedTab","subTabs","subTab","instruction","createMuiTheme","primary","main","secondary","typography","fontFamily","h1","h2","h3","body1","body2","button","overrides","MuiCssBaseline","MuiTableRow","head","flexWrap","cutOffField","cutOffTypeField","cutOffFieldWrapper","checkboxWrapper","changeFieldValue","getFormCategoriesByDayName","existedDay","Form","SubmissionError","newDaysArray","fixedPricesDays","MultiDatePickerCalendar","DropDown","CheckboxButtonsGroup","daysArrayErrors","forEach","dayIndex","daysErrors","timeArrayErrors","startTimeAndDurationFormatted","time","timeIndex","timeErrors","_error","buttonsGroup","panels","getFormCategoriesById","newDays","hasOwnProperty","getAllSelectedDays","selectedDays","FieldArray","ExpansionPanelWrapper","isAddDeleteActions","disabledItemIndex","fields","getTitle","join","getExpansionPanelTitle","tabName","tabNameAll","disabledDays","popover","pointerEvents","PopoverWrapper","handlePopoverClose","aria-owns","aria-haspopup","onMouseEnter","onMouseLeave","Popover","anchorOrigin","vertical","horizontal","transformOrigin","disableRestoreFocus","selectRoot","selectRootDisabled","transform","inputRootDisabled","menuList","menuItemRoot","disabledMenuItem","inputBaseClass","selectRootClass","selectIconClass","FormControl","Select","displayEmpty","MenuProps","AutocompleteDropdown","inputValue","setInputValue","filterOptions","createFilterOptions","onInputChange","newInputValue","disableClearable","formControlLabelRoot","checkboxLabel","isDisabledChange","isChecked","copyList","keyName","el","heading","subTitleLink","launchIcon","rootExpanded","rootSummary","expandMoreIconRoot","order","expandMoreIcon","headerContentWrapper","panelSummaryContent","panelDetailsRoot","SubTitleLink","getSubTitleLink","Link","href","link","removeAll","isHiddenAddNewButton","deleteDescription","expanded","setExpanded","getAll","firstField","fieldCopy","fieldObj","Accordion","isExpanded","fieldId","onExpandHandler","AccordionSummary","expandIcon","aria-controls","AccordionDetails","panel","panelSummary","panelSummaryExpanded","panelDetails","SimpleExpansionPanel","defaultExpanded","firstDefaultExpanded","titleTypographyVariant","panelDetailsClass","itemsRef","useRef","slice","idx","isOpened","scrollIntoView","behavior","startIcon","TextIconButton","rowIcon","ScheduleDaysTimeDuration","TimeDuration","timeDurationRow","mrrginLeft","timePickerWrapper","inputWrapper","dropDownWrapper","itemIndex","sizeSmall","onDeleteFieldHandler","customTimePicker","scheduleIcon","utils","MomentUtils","clearable","ampm","invalidDateMessage","passPrices","passFixedPrices","PricesCreate","isOpen","scheduleTabIndex","DAILY_PRICES","AccommodationPricesCreate","PRICES","categoryArrayErrors","category","categoryIndex","categoryErrors","getAvailableCategoriesNames","CategoriesPrices","availableCategories","currencyField","dropDownField","deleteBtn","getParticipantList","firstFieldCopy","CurrencyInputWrapper","prices","currencyRow","dailyCurrencyRow","paddingLeft","paddingBlockStart","dailyCurrencyField","w","anyTouched","dayErrors","categoriesWrapper","pricesCategoryForm","multiSelectWrapper","imgContainer","MandatoryFeesFields","additionalLanguage","secondLanguage","mandatoryFees","mandatoryFeesArrayErrors","mandatoryFeesErrors","mandatoryFeesForm","languagesLength","isCreated","addOnsArrayErrors","addOnsErrors","deleteAddOns","AddOnsFields","ACCOMMODATIONS_TITLES","ACCOMMODATIONS_WITH_BOOKINGS","ACCOMMODATIONS","WIDGET_ACCOMMODATIONS","BOOK_DATES","ACCOMMODATION","deleteRelatedAccommodations","AsyncChipsInput","ACTIVITIES_TITLES","ACTIVITIES_WITH_BOOKINGS","ACTIVITIES","WIDGET_ACTIVITIES","ACTIVITY","ACTIVITIES_AVAILABLE_PARTICIPANTS","relatedActivities","deleteRelatedActivities","integrationsArrayErrors","integrationsErrors","platform","titleOnPlatform","deleteIntegrations","isAccommodation","getParticipants","currency","previousParticipants","participants","pricesType","currencyValue","_setPreviousParticipantValue","dailyPrices","start","end","subtract","dailyPrice","theSameParticipant","getAddOns","getPreparedPricesCurrency","secondLanguageFields","idObj","photo","fieldName","parseFloat","split","getCurrencyValue","foundElement","price","getIntegrations","getPricesFixedForm","categoriesPrices","getPricesCategoryForm","transformReceivedDeactivationDates","startKey","endkey","getReceivedActivityData","getGeneralInfo","firstPrice","norwegianFields","titleNo","overviewNo","priceType","checkInAfter","checkInTime","checkOutBefore","checkOutTime","getAccommodationPrices","platforms","schedule","getSchedule","getPrices","secondLanguageForms","_getSecondLanguagesForm","deactivatedDates","activitybookingSet","getReceivedActivityBookingsDates","receivedAvailableParticipantsData","activities","availableParticipantsPerDate","whatToBringNo","additionalInfoNo","cancellationNo","includedNo","notIncludedNo","scheduleProperties","icalendar","parse_calendar","properties","scheduleComponents","components","scheduleType","_getScheduleDateForm","_getScheduleDateTimeForm","_getSchedulePassForm","VEVENT","START_DATE","END_DATE","DAYS","b","CUTOFF_PERIOD","CUTOFF_PERIOD_TIME_TYPE","_getStartTimeAndDuration","getNoDaysPricedFixedForm","_getPricesDailyForm","_getPricesDailyScheduleForm","_getUniquePricesDays","dayPrices","_getUniqueMultiplePricesDays","pricesDays","_isSameArrays","START_TIME","DURATION_","TIME_TYPE","uniqueDaysArray","from","array1","array2","element","PRICES_PER_DAY","INITIAL_ACCOMMODATION_FORM_DATA","relatedActivitiesForm","ACCOMMODATION_FORMS_NUMBERS","ACCOMMODATION_FORMS_ORDER","ACCOMMODATION_PRICES_FORMS_NUMBERS","getReceivedAccommodationData","addOn","mandatoryFee","getActivityPrices","activitypriceSet","guestsNumber","accommodationbookingSet","curr","bedDetailsNo","getFormByCurrentLanguage","form1","form2","currencyFormatter","Intl","NumberFormat","sectionIndent","flexFlow","inputField","Errors","errorClassName","errorSplit","errorLength","staticError","number","NumberOfParticipants","itemCurrency","formattedCurrencyValue","addOnsItem","addOnsTitle","addOnsInfo","addOnsDescription","addOnsPrice","addOnsInput","currencyWrapper","descriptionCurrency","mobileDescriptionCurrency","titleCurrency","itemTitleWrapper","currencyInputWrapper","Currency","isWidget","AddOnsList","titleClass","addOnItemClass","addOnDescClass","addOnTitle","participantsArrayErrors","isValidParticipants","availableParticipants","seatsLeft","totalParticipants","overflow","overflowX","infoItem","infoIcon","listInfo","sectionTitle","smallSectionTitle","participantsErrorMsg","radioGroupRoot","bookRelatedAccommodationForm","changeFormFieldValue","onUpdate","isInitial","setIsInitial","accommodationId","setAccommodationId","setAccommodation","isUpdatedParticipants","setIsUpdatedParticipants","skip","fetchPolicy","notifyOnNetworkStatusChange","startPeriod","endPeriod","bookDatesLoading","bookDatesData","bookDatesRefetch","receivedAccommodation","accommodationData","setParticipants","setAddOns","setMandatoryFees","setMaxParticipants","selectedAccommodationId","previousAddOns","addOnsList","theSameAddOn","originalId","previousMandatoryFees","mandatoryFeesList","theSameMandatoryFee","scroll","generalFormNorwegian","confirmWrapper","activity","bookActivityForm","selectedCurrency","startingDate","multiDates","_setParticipant","_setFixedParticipant","updatedParticipants","getAvailableDaysOfWeekList","availableParticipantsData","initialStartingDate","bookedDayName","isDisabled","scheduleItem","timesLength","dateData","getListOfStartTimeAndDuration","startTimeAndDurationList","formattedSelectedDate","dayOfSelectedDate","seatsLeftObj","getDefaultStartTime","defaultStartTime","existedStartTime","getListOfStartTimeAndDurationByCutoffPeriod","listOfStartTimeAndDuration","extendMoment","Moment","getMaxParticipants","bookRelatedActivityForm","newSelectedStartTime","selectedStartTime","numberOfBookedParticipants","accumulator","getAvailableParticipantsForStartTime","bookedData","bookForm","getMaxParticipantsActivitySeveralDays","bookedRange","overlaps","adjacent","bookedPlaces","activityId","setActivityId","setActivity","listStartTimeAndDuration","setListStartTimeAndDuration","setAvailableParticipantsData","isAvailableParticipantsLoading","refetchParticipantsData","receivedActivity","activityData","handleListStartTimeAndDurationField","selectedActivityId","handleMultiDateAvailableSeats","changeMonthHandler","formattedStartDate","pricesDailyItem","INFO_LIST_FIELDS","INFO_ARRAY_FIELDS","_getPricesInfo","_getPricePerDay","BookInfoList","isWithoutDescriptionForm","isOverview","isImage","descForm","descFormNorwegian","itemField","fieldValue","trim","checkoutValue","ACTIVITY_BOOKING","useParams","networkStatus","isCopy","window","cloneElement","initialData","scheduleActiveSubTabNumber","pricesActiveSubTabNumber","endingDate","getReceivedParticipant","relatedParticipants","participantName","existedParticipant","activityParticipant","getReceivedAddOns","originalAddOn","descriptionNo","addOnCount","getReceivedMandatoryFees","originalMandatoryFee","mandatoryFeeCount","getReceivedSchedule","getReceivedBookedAccommodationData","payment","payments","pricesObj","accommodationParticipants","getAccommodationParticipants","guestFirstName","guestLastName","phone","guestPhoneNumber","guestEmail","pay","paymentId","bookedAddOns","bookedMandatoryFees","_getReceivedRelatedActivities","relatedActivitiesBookings","activityParticipants","getActivityParticipants","ACCOMMODATION_BOOKING","CREATE_ACCOMMODATION_BOOKING","UPDATE_ACCOMMODATION_BOOKING","getListOfAvailableCurrencies","availableCurrencies","listOfAvailableCurrencies","getSummeryPriceForActivitySeveralDays","summery","getTotalPrice","relatedItems","activityMultiDates","isParticipants","getTotalFixedPricesPerDay","getTotalRelatedItems","toFixed","itemTotal","pricesTypes","nights","bookItem","totalPrice","originalIdObj","addOnId","getMandatoryFees","mandatoryFeeId","getGuests","getStartingDate","getPreparedBookAccommodationData","bookAccommodationForm","stripeToken","payPalOrderId","bookAccommodation","adminPlatform","paymentIdObj","paymentType","accommodationBooking","_getActivitiesBooking","_getDeletedActivityBookings","deletedActivityBookings","activitiesBookings","guestInfoRow","guestInfoField","GuestInformation","summeryWrapper","summaryTitle","summaryActivityName","summaryActivityInfo","summaryPricesList","summaryPricesItem","summaryCurrency","summaryPrice","summaryTotal","summaryTotalPriceBlock","summaryTotalPrice","addOnsSummaryWrapper","mandatoryFeesSummaryWrapper","relatedItem","AddOnsComponent","filledAddOns","MandatoryFeesComponent","filledMandatoryFees","BookingSummary","bookActivity","generalSectionTitle","isActivitySummary","isShow","isAddOnsSummary","getTotalFixedSummaryPrice","bookedItem","relatedAddOns","relatedMandatoryFees","dateStr","getActivitySummaryDate","isAccommodationDailyPrice","pluralNights","isMandatoryFeesSummary","TrashIcon","EditIcon","info","actions","iconButton","BookRelatedField","editCallBack","deleteCallBack","disableTouchRipple","disableFocusRipple","isMaxParticipantsErrors","leftSide","rightSide","bookWrapper","currencyInput","accommodationsTitle","paymentWrapper","paymentField","disableInputFocus","setDeletedRelatedActivity","setRelatedItem","isOpenBookDialog","setOpenBookDialog","listOfCurrencies","setListOfCurrencies","createAccommodationBooking","updateAccommodationBooking","isSmallScreen","isMediumScreen","innerWidth","windowWidth","setWindowWidth","useLayoutEffect","updateSize","setListOfAvailableCurrencies","submit","graphQLErrors","message","deleteRelatedItem","deleteItemIndex","syncErrors","errorsLength","smallInputIndent","mediumInputIndent","activitiesTitle","activitiesButtons","deletedActivitiesIds","relatedFieldWrapper","MandatoryFees","getBookRelatedField","accommodationBookingId","accommodationsBookings","getReceivedBookedActivityData","_getReceivedRelatedAccommodations","relatedAccommodationBooking","CREATE_ACTIVITY_BOOKING","UPDATE_ACTIVITY_BOOKING","labelWrapper","seats","capitalize","StartTimeAndDurationRadioButtonsGroup","startTimeClass","getPreparedBookActivityData","activityBooking","_getAccommodationBooking","_getDeletedAccommodationBookings","deletedAccommodationBooking","setDeletedRelatedAccommodations","createActivityBooking","updateActivityBooking","deleteRelatedAccommodation","effectiveEndingDate","v","bookedDate","smallCalendar","mediumCalendar","calendar","activityBookingId","SimplePieChart","colorsInfo","cx","cy","labelLine","outerRadius","dataKey","chartLegend","legendTitle","legendIcon","legendItem","itemName","listIcon","descriptionWrapper","CustomChartLegend","legendData","titleDescription","helpText","legendColors","List","ListItem","ListItemIcon","ListItemText","selectInput","SelectDropDown","selectClass","GuestsDetailsInformation","guestsInfo","BulletPoints","newItem","bringItem","deleteTrekksoftCategory","categoriesMappingWrapper","inputRow","TREKKSOFT_CATEGORIES","HORN_CATEGORIES","trekkSoftCategoriesMapping","trekSoftCategoriesMapping","deleteCategoriesInfo","categoryOnTrekksoft","merchantName","formWrapper","IntegrationsInputFields","apiClientId","apiClientSecret","username","password","integrationSettingsForm","isDirty","isDirtyCategoriesForm","deleteIntegrationInfo","deleteIntegrationSettings","getAvailableIntegrationPlatforms","createdPlatforms","currentPlatform","onDeleteTrekSoftCategoriesHandler","isDisabledPlatform","PAYMENTS_INPUT_FIElDS","PayPal","Stripe","payOnArrival","PaymentsInputFields","paymentSystemDetails","isSecretKey","paymentsArrayErrors","paymentsErrors","clientId","clientSecret","publishableKey","secretKey","up","paymentsForm","deletePaymentInfo","getAvailablePaymentsSystem","createdPayments","currentPayment","chips","chip","MultiSelect","renderValue","onMouseDown","onDelete","colorPickerWrapper","pickerRef","handleClickOutside","contains","document","onColorChange","hex","box","SelectCompanyBox","SelectCompany","BookedAddOns","guestsSumSeats","guestsSum","actualGuestsNumber","guestsDetailsInformation","getAccommodationBookingSchedule","booking","isParticipantInfo","getActivityBookingTotalInfo","isRelated","totalInfo","guestsTotal","addOnsTotal","mandatoryFeesTotal","relatedBookings","addOnPrice","count","guest","severalDaysTotal","severalDaysTotalCurrency","guestPrice","isCanceledWithMain","relatedData","getAccommodationBookingTotalInfo","nightsNumber","mandatoryFeePrice","getGuestsPrice","listItem","priceDetails","unitTitle","summarySubheader","totalContainer","totalPriceContainer","subheader","PriceDetails","ListSubheader","BookingPriceDetailsPanel","elevation","unitIcon","UpcomingAccommodationDialog","referenceNumber","BookingPriceDetails","CANCEL_ACTIVITY_BOOKING","CANCEL_ACCOMMODATION_BOOKING","HANDLE_ACTIVITY_BOOKING","HANDLE_ACCOMMODATION_BOOKING","ACCOMMODATION_BOOKING_NOTES","ACTIVITY_BOOKING_NOTES","participantsItem","actionsRootOnlyView","actionIcon","actionsWrapper","UpcomingActivitiesDialog","isOnlyView","cancelActivityBooking","activityBookings","bookTime","closestEvent","ids","actionsBtns","inlineInputs","inlineSwitch","inlineSwitchLabel","checkbox","selectBOButton","wrapperInitialFocus","getDates","stopDate","dateArray","arr","flag","dayOfWeek","defaultValue","validations","setErrors","formData","getFormData","errorMessages","validation","setError","addField","submitted","setSubmitted","formValid","passwordIcon","SignIn","signIn","loginForm","useForm","passwordField","emailField","showPassword","setShowPassword","useField","InputAdornment","autoComplete","sentEmailWrapper","backLogin","ResetPassword","isSentEmail","setIsSentEmail","onError","onCompleted","resetPassword","resetPasswordForm","CHECK_TOKEN","tokeExpiredWrapper","CreateNewPassword","isReset","isConfirm","token","tokenExpired","setTokenExpired","updatePassword","checkToken","isResetPassword","isConfirmPassword","createNewPasswordForm","confirmPasswordField","confirmPassword","valueToConfirm","getPreparedDataToCreateActivity","forms","scheduleActiveSubTab","pricesActiveSubTab","_getGeneralForm","relatedForm","_getRelatedForm","photoObj","ownerIdObj","scheduleFormName","scheduleDetails","_getScheduleDetails","pricesActiveSubTabIsOpen","pricesFormName","priceForm","_getPreparedPrices","deletedAddOnsObj","deletedRelatedAccommodationsObj","deletedRelatedAccommodation","deletedPlatformsObj","deletedPlatforms","deactivationPeriods","_getGeneralInfoSecondLanguage","_getDescriptionInfoSecondLanguage","activityOnPlatforms","generalFormValues","isPrivate","startTimes","categoryPrices","generalFormSecondLanguage","newSecondLanguageObject","isNextStepAvailable","newActiveTab","savedForms","newActiveTabCopy","formName","priceTabName","addOnsSecondLanguageForm","secondLanguageFormName","isDiscardChanges","initialFormData","dynamicInitialData","formValues","savedFormValues","secondLanguageFormValues","secondLanguageSavedFormValues","discardChanges","initializeForm","setActiveTab","isError","newInitializedForm","addAddOnsLanguage","newLanguage","updateFormErrors","setSavedForms","init","deleteAddOnsLanguage","deletedLanguage","submitForm","CREATE_ACTIVITY","DELETE_ACTIVITY","UPDATE_ACTIVITY","contentBox","getFileByUrl","url","fetch","blob","filename","pop","File","CreateActivity","destroyForm","destroy","initialize","updateSyncErrors","clearDeletedFields","createActivity","updateActivity","setInitialFormData","setIsLoading","setIsUpdate","isVisitedPrices","setIsVisitedPrices","isSaveUnsavedChanges","setIsSaveUnsavedChanges","setDynamicInitialData","setLanguages","setSelectedLanguage","setScheduleActiveSubTab","setPricesActiveSubTab","destroySecondLanguageForms","scheduleTab","pricesTabIndex","pricesTab","newInitialFormData","initializeForms","initialFormsData","replacePhotosToFiles","onCreateActivityHandler","activePricesForm","autoHideDuration","promises","all","onDiscardChangesHandler","isDiscardSection","activeFormName","isCurrentStepAvailable","scheduleSectionIndex","pricesSectionIndex","discardSection","deletedItem","updatedLanguages","deleteFormLanguage","general","onChangeActivityTypeHandler","savedFormsCopy","getPropsForTabsWithLanguages","submitButton","onGeneralAndDescFormSubmitHandler","currentFormName","secondFormName","isSetPriceActiveSubTab","generalFormProps","getGeneralCreateTab","descriptionFormProps","getDescriptionCreateTab","pricesSubTab","unshift","getPricesSubTabs","formNameSecondLanguage","isActivityFormDone","DELETE_ACCOMMODATION","CREATE_ACCOMMODATION","UPDATE_ACCOMMODATION","getPreparedDataToCreateAccommodation","_getPrices","deletedMandatoryFeesObj","deletedRelatedActivitiesObj","accommodationOnPlatform","_getPricesPerDay","mandatoryFeesSecondLanguageForm","CreateAccommodation","createAccommodation","updateAccommodation","cancelAccommodationBooking","setColor","useMemo","removeOldDeactivationBookings","deleteMandatoryFeesLanguage","confirmActivityType","showSnackbarToFillAllField","_forms","onGeneralAndDescFormsHandler","addMandatoryFeesLanguage","isAccommodationFormDone","ScheduleDates","startDateFormatted","endDateFormatted","table","tableCell","headTableCell","imgCell","nameCell","availabilityCell","scheduleCell","productCodeCell","guestsCell","tableHead","tableRow","AccommodationsList","deleteCallback","setPage","deleteAccommodation","TableContainer","Table","TableHead","TableRow","cellClassName","align","headingsConfig","TableCell","TableBody","scope","numberOfAccommodationsPages","accommodationsActivitiesOverview","startingPointCell","ActivitiesList","numberOfActivitiesPages","bookingsTotalTitle","tabContentWrapper","TabsRoot","EntityTabs","CreateEntityRoutes","CreateButtonContent","OutlinedButton","Toolbar","ToolbarLeft","ToolbarRight","ToolbarTitle","ToolBar","tabsWrapper","textColorInherit","TabItemTitle","TabItemQuantity","BookingsTotalNumbersWrapper","BookingsItem","BookingsItemCaption","EntityTabComponent","available","expired","EntityTabBar","onChangeTab","VerticalTabs","tabIndex","ACCOMMODATIONS_ACTIVITIES_OVERVIEW","DefaultOverview","useOverview","useEntityTabs","useLocation","setTab","handleChangeTab","newTab","Tabs","AccommodationsAndActivities","isOwnerSelected","participantsCell","activityTypeCell","buttonRoot","toolbar","toolbarTitle","listWrapper","BookActivitiesList","locationCell","BookAccommodationList","notesLabel","NotesForm","refetchParams","isActivity","refetchQueries","updateAccommodationBookingNotes","updateActivityBookingNotes","loadingActivity","notesForm","activityBookingNotes","activityNotes","note","accommodationBookingNotes","bookingNotes","noteField","multiline","rows","CancelledInfo","cancellationTime","isHandled","BookingsDetailsDialog","bookingTotal","isEditCancelBtns","cancelBooking","isNotesEditMode","setNotesEditMode","presetNotes","setPresetNotes","trekksoftId","expediaReferenceNumber","bookingType","getActivityBookingSchedule","creationTime","newNote","listContainer","ListPopover","PaperProps","numberIcon","verticalAlign","NumberIcon","ALL_BOOKINGS","ACCOMMODATIONS_BOOKINGS","ACTIVITIES_BOOKINGS","orderIcon","arrowCell","referenceCell","unitCell","unitContent","guestsContent","cellText","checkInCell","checkOutCell","platformCell","addOnsCell","notesCell","disabledArea","useSyncDialogContent","setDialogContent","prev","allBookings","queriesConfig","bookingsQueryType","dialogContent","setOrder","orderBy","setOrderBy","QUERY","createSortHandler","property","handleRequestSort","sortBy","sortDirection","TableSortLabel","active","direction","hideSortIcon","openInfoDialog","o","InfoOutlined","numberOfBookingsPages","pages","Math","min","totalBookingsNumber","formControl","mutationsConfig","Activity","Accommodation","HandledCell","isHandledBooking","setIsHandled","handleBooking","handleOpen","cancellationTimeCell","statusCell","handledStatus","handled","notHandled","cancelledBookingsQueryVariablesConfig","isHistory","toolbarLeft","toolbarFilter","filterTitle","customTabRoot","toolbarSwitchers","toolbarRight","tabsRoot","customTabWrapper","tabItemTitle","textColorInheritCustom","searchField","verticalTabProps","BookingList","handledBookings","setHandledBookings","setSearchField","setSearch","historyQuery","setHistoryQuery","sortedBy","currentQuery","setCurrentQuery","onKeyDown","keyCode","STATISTICS","OVERALL_CAPACITY_COLORS","capacityBooked","capacityAvailable","noData","PLATFORMS_COLORS","Airnbnb","TrekkSoft","Widget","leftPanel","tabTitle","statisticTab","chartWrapper","preparePlatformsLegend","bookingsPerPlatform","prepareOverallLegendForAccommodation","prepareOverallLegendForOpenActivity","prepareOverallLegendForPrivateActivity","prepareBookingsPerAccommodationData","bookingsInfo","preparedData","numberOfBookedSlots","status","accommodationTitle","prepareBookingsPerOpenActivityData","bookedParticipants","activityTitle","prepareBookingsPerPrivateActivityData","StatisticsChartsTab","overallLegendData","platformsLegendData","overallInfo","overallSum","actualOverallValue","tableWrapper","tableTitle","slotsNumberCell","StatisticsBookingsList","statisticsType","bookingsData","accommodationStatistics","headings","privateActivitiesStatistics","openActivitiesStatistics","statisticsPeriod","statisticsDate","statisticsPeriodRange","periodInput","periodValues","getPeriodRange","statisticsData","accommodationsBookingsStatistic","activitiesBookingsStatistic","private","accommodationBookings","bookingPerActivity","bookedSlots","prepareReceivedStatisticsData","CREATE_PAYMENT_SETTING","UPDATE_PAYMENT_SETTING","CREATE_INTEGRATIONS_SETTINGS","UPDATE_INTEGRATIONS_SETTINGS","CREATE_GOOGLE_ANALYTICS_SETTINGS","UPDATE_GOOGLE_ANALYTICS_SETTINGS","SET_EMAIL_TEMPLATE","USER_SETTINGS","USER_SETTINGS_WITHOUT_SECRET_KEYS","getPayPalSettings","payPalSettings","getPayOnArrivalSettings","getStripeSettings","stripeSettings","prepareAllPaymentsSettingsData","getTrekkSoftSettings","integrationsForm","trekkSoftSettings","getExpediaSettings","expediaSettings","getBookingSettings","prepareCategoriesMappingData","preparedCategoriesMappingData","googleAnalyticsId","EMAIL_BODY","EMAIL_INFO","bookingName","bookingDetailsLink","bookingCancelLink","termsAndConditionsLink","emailSettingsWrapper","emailSettings","actionButtons","resetButton","borderLeft","infoList","subject","body","Width","resetDeletedIntegrationSettings","isUpdatePayments","setIsUpdatePayments","isUpdateIntegrations","setIsUpdateIntegrations","isUpdateGoogleAnalytics","setIsUpdateGoogleAnalytics","isInitializedForm","setIsInitializedForm","createPaymentsSettings","updatePaymentsSettings","createIntegrationsSettings","updateIntegrationsSettings","createGoogleAnalyticsSettings","updateGoogleAnalyticsSettings","setEmailTemplate","paymentsData","payOnArrivalPossibility","getReceivedPaymentsData","integrationsData","trekksoftSettings","bookingSettings","getReceivedIntegrationsData","trekksoftCategoriesMapping","getTrekkSoftCategoriesMapping","googleAnalyticsSettings","savedForm","googleAnalyticsForm","emailSettingsForm","emailTemplates","dataToStore","deletedSettings","deletedPayments","getDeletedPaymentsSettings","deletedPayPalSettingsId","deletedStripeSettingsId","deletedPayOnArrivalSettingsId","keepSubmitSucceeded","paymentsSubmit","getDeletedIntegrationsSettings","categoriesMapping","deletedTrekksoftSettingsId","deletedExpediaSettingsId","deletedBookingSettingsId","integrationsSubmit","googleAnalyticsSettingsId","googleAnalyticsSettingsSubmit","emailSettingsSubmit","generalRow","tableName","columnWrapper","sameDay","selectedDay","CalendarGeneralRow","rangeList","isSameDay","isSelectedDay","backAction","backButtonTitle","backIcon","headerTitle","rangeWrapper","todayTitle","rangeIcon","rangeDates","disabledRangeIcon","datePickerButton","OverviewCalendarHeader","changeWeekCallback","setSelectedDate","isPreviousWeekButton","newStartDate","previousWeek","anchorDirection","getRangeList","calendarWrapper","bookingRow","bookingTitleWrapper","bookingTitleBlock","bookingAccommodationTitleBgWrapper","bookingTitle","textOverflow","bookingTime","bookingParticipantsRow","participantsColumn","participantsHover","noParticipants","WebkitBoxAlign","participantsStart","borderTopRightRadius","transition","participantsHalfStart","participantsHalfDate","participantsMid","participantsEnd","borderTopLeftRadius","participantsHalfEnd","activeProduct","bookingsList","bookingImage","flexShrink","bookingTitleText","bookingProductCode","wrapperTitle","activityparticipants","activitynoParticipants","guestName","isActivityAvailable","availableDates","rangeItem","availableDays","rangeDate","rangeDay","BookingsList","Tooltip","arrow","BookingDay","cancelActivityBookings","isRefetch","DateNoTimeRow","rangeActivities","rangeActivity","TimesList","timeId","setRangeDates","setActivitiesBookings","setRangeList","bookings","activityBookingsForPeriod","isWithoutBookings","existedBookingIndex","scheduleData","existedActivities","existedActivityTimeIndex","getCalendarActivitiesBookings","isAccommodationUnActive","bookingFromDate","bookingEndDate","DatesListWithoutBookings","isInit","isProgress","isUnActive","previousItem","isUnActivePreviousItem","nextItem","isUnActiveNextItem","isStart","isMid","isEnd","BookingsDatesList","participantColors","setParticipantColors","newParticipantColors","bgColor","lastIndex","isStartDate","isEndDate","isMidDate","isHalfDate","isNextDayStart","isPreviousDayEnd","participantColor","textColor","substring","openDialog","setAccommodationsBookings","getCalendarAccommodationsBookings","OVERVIEW","UPCOMING_ACCOMMODATIONS","UPCOMING_ACTIVITIES","checkInCheckOutCell","UpcomingAccommodations","upcomingPeriod","closestEventsPeriod","accommodationCancellationHandler","startTimeCell","durationCell","UpcomingActivities","activityCancellationHandler","getActivityBookingsGuestsNumber","horizontalTabs","accommodationOverviewTab","activityOverviewTab","numberTitle","tabDescription","seeMoreOption","viewSwitchers","calendarTitle","backToolbar","backButtonText","ToolbarWrapper","TabsMap","ToolbarTabs","a11yProps","setUpcomingPeriod","upcomingPeriodForActivities","setUpcomingPeriodForActivities","overviewType","newBookingsNumber","currentBookingsNumber","bookingsWhichStartToday","arrivalGuestsNumber","bookingsWhichEndToday","departureGuestsNumber","canceledBookingsNumber","instructionsWrapper","instructionItem","instructionText","listNumberMark","linkText","Instructions","privacyPolicy","termsAndConditions","panelTitle","formPanel","inputFields","photoUpload","photoError","unitSelectWrapper","languagesSelect","selectedUnitId","WIDGET_SETTINGS","CREATE_WIDGET_SETTINGS","UPDATE_WIDGET_SETTINGS","WIDGET_CLICK_HANDLER","MENU","FOOTER_MENU","STRIPE","PAYPAL","generateWidgetButton","productId","itemType","attributes","toLowerCase","widgetAttrs","codePanel","switchers","widgetForm","unitType","setUnitType","setSelectedUnitId","setAccommodations","setActivities","createWidgetSettings","updateWidgetSettings","refetchWidgetSettings","userSettingsLoading","userSettingsData","businessOwnerLoading","businessOwnerData","NetworkStatus","widgetData","receivedData","prepareReceivedWidgetData","unitsData","prepareUnitsDataForSelect","isPaymentsSettings","isMessage","widgetSettingSubmit","businessOwnerIdObj","widgetSettings","getDataToStore","onCopy","allItems","copyButtonCode","val","PaddingBottom","emailCell","phoneCell","companyCell","businessOwnerForm","createBusinessOwner","deleteBusinessOwner","selectBusinessOwner","go","Notify","onSubmitHandler","numberOfOwnersPages","businessOwnersOverview","loader","EmployeesTable","openEditUser","deleteUserHandler","onPageChangeHandler","TABLE_HEAD","user","usersForm","createUser","deleteUser","updateUser","showUserError","updateUserHandler","createUserHandler","TestWidget","widgetButton","setWidgetButton","script","createElement","appendChild","dangerouslySetInnerHTML","__html","paragraph","StripeInstruction","PayPalInstruction","locationIcon","locationText","infoDatesTitle","datesItem","infoValue","datesWrapper","BookingInformation","descriptionFormNorwegian","checkIn","checkOut","currentLanguageGeneralForm","PLURAL_PARTICIPANTS","Adult","Children","Senior","Teen","Infant","Universal","Person","overflowY","sectionTitleIndent","accommodationCheckout","checkoutInfo","listTitle","participantRow","bookingColumn","totalRow","titleSection","dropdowns","cancelIcon","currencySelectRoot","cancel","selectIcon","dropdownInputBase","SHORT_LANGUAGES_OBJ","FULL_LANGUAGES_OBJ","Eng","Nor","initialAvailableCurrencies","initialSelectedCurrency","setInitialSelectedCurrency","initialSelectedLanguage","setInitialSelectedLanguage","initialAvailableLanguages","isWidgetForm","endIcon","defaultMenu","scrollbarWidth","tabsFixed","tabLabelWrapper","tabsIndicator","dateRange","dateRangeInput","searchDate","searchLabel","searchInput","guestsField","searchBtn","guestsSelectRoot","guestsInputBase","guestsLabel","useWindowSize","setSize","innerHeight","numberOfGuests","searchOptions","changeWidgetFormFieldValue","changeSearchFormFieldValue","isFilter","disabledSteps","isProductsMenu","currentIndex","setIndex","lastSubmittedFormIndex","isAccommodationBooking","isOpenEndDatePicker","setIsOpenEndDatePicker","endDateRender","setEndDateRender","isDoneSection","newIndex","Number","isInteger","fixed","tabProps","isDisabledSearch","detailsItem","detailsInfo","detailsIcon","titleBlock","arrowRightIcon","pricePerDayWrapper","pricePerDayTitle","infoWrapper","DailyPrices","isMultipleDays","isAvailableEmptyPrice","isPricePerDay","getPrice","isLastItem","Prices","initialCurrency","ProductShortInfo","isPrices","isBedDetails","isRightArrow","selectProduct","onSelectHandler","afterElement","GeneralAccommodationsList","fetchData","perPage","onEnter","GeneralActivitiesList","ProductInfo","product","isZoomed","itemColumn","currencyColumn","Visitors","itemClass","setIsZoomed","handleFocus","handleBlur","onFocus","onBlur","productData","startTimeLabel","startTimeWrapper","WidgetLoader","startBookingsDate","receivedProduct","activityDisabledDates","calendarFirstDate","setCalendarFirstDate","bottomRef","availableParticipantsLoading","setParticipantsAndStartTimes","createdParticipants","getAccommodationAvailableRangeDates","getAccommodationDisabledDates","getActivityAvailableRangeDates","getActivityDisabledDates","addOnWrapperClass","addOnTitleClass","receivedAddOns","createdAddOns","setmandatoryFees","receivedmandattoryFees","createdmandatoryFees","mandatoryFeess","titleWrapper","selectedIcon","selectCallback","getWidgetTotalPrice","selectedActivities","pricesTypeObj","confirmPayment","privacy","Height","buttonsWrapper","cancelBtn","totalBtn","next","stepNumber","withoutTotal","cancelButton","confirmButton","confirmCallback","isHideConfirmButton","isLastStep","isSelectedProduct","isHiddenNavigation","menuIndex","isPrivacy","redirectTo","activityIndex","errorsCopy","editSection","editItem","availabilityTitle","availabilityLabel","visitItem","visitTitleClass","visitorsWrapperClass","stopSubmitForm","stopSubmit","untouchFormFields","untouch","closeDialogCallback","reduxActivity","setIsSelected","cancelActivity","isRemove","accommodationIndex","reduxAccommodations","reduxAccommodation","previousSelectedIndex","setPreviousSelectedIndex","setMaxGuests","previousIndex","cancelAccommodation","filterSection","selectDropDown","isOpenProductDialog","setIsOpenProductDialog","selectedProduct","setSelectedProduct","relatedProducts","createdRelatedProducts","closeProductDialog","UPDATE_BOOKING_PAYMENT","getAvailablePaymentsTypes","settingsData","paymentsTypes","buttonWrapper","BookingConfirmDialog","aria-describedby","address","city","zip","creditCard","expirationDate","year","currentYear","isValidExpirationDate","cvv","checkoutWrapper","checkoutList","fieldFullWidth","shortField","longField","expirationDateField","cvvField","userSection","radioButtons","expansionPanelDetailsRoot","emptyExpansionPanelDetailsRoot","expansionPanelRoot","expPanelSummaryRoot","expPanelSummaryExpanded","emptyExpPanelSummaryExpanded","expPanelSummaryContent","expLabel","UserInformation","BillingInformation","CreditCardInformation","isSubmit","setIsSubmit","submitCallback","setIsInit","_paymentType","MemoStripePayment","MemoPayPalPayment","memo","onSuccess","details","layout","tagline","stripe","loadStripe","CardElementWrapper","useStripe","elements","useElements","cardElement","getElement","CardElement","createPaymentMethod","card","paymentMethod","base","resetWidgetForm","reset","wrapperRef","setTotalPrice","payPalData","setPayPalData","stripeData","setStripeData","setClientSecret","setActivityBookingId","setAccommodationBookingId","handleEventMessage","handleStripeAuth","updateBookingPayment","setIsSubmitCallback","removeEvent","ReactDOM","unmountComponentAtNode","getElementById","parent","submitProductCallback","startSubmit","ev","msg","isPaid","str_auth","res","updateResult","success","update","submitAccommodationBooking","submitActivityBooking","addStripeAuthIframe","nextActionUrl","cssText","textContent","onclick","iframe","setAttribute","orderID","accommodationBookingIdLocal","splitErrMessage","activityForm","activityBookingIdLocal","noItemMsg","AVAILABLE_CURRENCIES","Participants","receivedAccommodationId","receivedActivityId","setActivityDisabledDates","setProductId","setReceivedActivity","setReceivedAccommodation","setMenuIndex","productsMenuIndex","setProductsMenuIndex","setLastSubmittedFormIndex","isProductsList","setIsProductsList","setInitialAvailableCurrencies","setDisabledStep","devicePixelRatio","zoomLevel","setZoomLevel","settingsLoading","useLazyQuery","accData","newAccommodations","fetchMore","requestedPage","numberOfAccommodationPerPage","accommodationsPage","fetchAccommodationsData","useAccommodationsInfiniteQuery","isAccommodationsLoading","accommodationsPerPage","newActivities","numberOfActivityPerPage","activitiesPage","fetchActivitiesData","useActivitiesInfiniteQuery","isActivitiesLoading","activitiesPerPage","isActivitiesAccommodationsLoading","accommodationLoading","activityLoading","unstable_batchedUpdates","getDisabledSteps","flat","cancelWidgetBooking","ReactGA","getNextStepIncludeDisabled","newMenuIndex","isBack","firstDisabledIndex","secondDisabledIndex","getNextTabName","nextStep","remoteSubmitForm","addOnsLength","relatedActivitiesLength","relatedAccommodationsLength","availableSections","handleZoomChange","currentZoom","timeout","zoom","clearTimeout","section","getConfirmButtonText","diffTime","abs","diffDays","ceil","pluralNigts","getTotalParticipantPrice","AddOns","isStatic","products","isAddOns","deletedAddOn","productIndex","GeneralCheckout","RelatedCheckout","_addOns","_mandatoryFees","deletedProductIndex","Total","isSummary","widgetTheme","h4","bookingDetails","bookingNumber","BookingDetails","setBooking","setProduct","setCurrency","setIsAccommodationBooking","setCanceled","bookingCancelation","setBookingCancelation","cancellationPolicy","setCancellationPolicy","setCancellationNo","cancelationAction","accommodationError","activityError","bookingData","getAccommodationPricesType","getGeneralActivityInfo","ThemeProvider","float","Routes","UpdateAccommodationBookingWrapper","UpdateActivityBookingWrapper","BookActivity","ManualBookActivity","UpdateActivityWrapper","BookAccommodation","ManualBookAccommodation","UpdateAccommodationWrapper","AccommodationsAndActivitiesPage","ActivitiesOverviewCalendar","AccommodationsOverviewCalendar","Overview","Statistics","SettingsPage","WidgetSettings","BusinessOwners","Users","fragmentMatcher","IntrospectionFragmentMatcher","introspectionQueryResultData","__schema","types","store","createStore","client","ApolloClient","ApolloLink","networkError","locations","console","log","createUploadLink","uri","credentials","HttpLink","cache","InMemoryCache","App","updateLocale","week","dow","documentElement","setProperty","CssBaseline","ConfirmProvide","maxSnack","i18nWrapper","defaultLanguage","use","XHR","LanguageDetector","debug","lng","fallbackLng","keySeparator","interpolation","escapeValue","formatSeparator","react","wait","useSuspense","ns","defaultNS","resources","translations","translationEng","translationNor","hostname","I18nextProvider","navigator","serviceWorker","ready","registration","unregister"],"mappings":"yFACAA,EAAOC,QAAU,CAAC,mBAAqB,mCAAmC,iBAAmB,iCAAiC,YAAc,4BAA4B,YAAc,8B,oBCDtLD,EAAOC,QAAU,IAA0B,yD,kBCA3CD,EAAOC,QAAU,sgT,kBCAjBD,EAAOC,QAAU,siH,0ruDCEFC,4B,gHCAFC,EAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5CC,MAAM,aACJC,gBAAiB,OACjBC,OAAQ,oBACRC,UAAW,aACXC,aAAc,MACdC,SAAU,QACVC,SAAU,SACTP,EAAMQ,YAAYC,KAAK,MAAO,CAC7BH,SAAU,MACVC,SAAU,QAIdG,YAAa,CACXC,QAAS,aAEXC,gBAAiB,CACfC,SAAU,OACVC,WAAY,OACZC,WAAY,SACZC,MAAO,OACPL,QAAS,IACTM,OAAQ,KAEVC,MAAO,CACLL,SAAU,OACVE,WAAY,MACZD,WAAY,OACZE,MAAO,OACPL,QAAS,eAEXQ,YAAa,CACXC,UAAW,oBACXC,UAAW,OACXV,QAAS,aAEXW,cAAe,CACbnB,OAAO,aAAD,OAAeH,EAAMuB,OAAOP,OAClCX,aAAc,MACdQ,SAAU,OACVC,WAAY,OACZC,WAAY,IACZC,MAAOhB,EAAMuB,OAAOP,MACpBL,QAAS,WACTL,SAAU,OACVkB,YAAa,OAEfC,cAAe,CACbC,UAAW,OACXvB,OAAO,aAAD,OAAeH,EAAMuB,OAAOP,OAClCX,aAAc,MACdH,gBAAiBF,EAAMuB,OAAOP,MAC9BA,MAAO,UACPH,SAAU,OACVC,WAAY,OACZC,WAAY,IACZJ,QAAS,WACTL,SAAU,OACV,UAAW,CACTJ,gBAAiBF,EAAMuB,OAAOP,MAC9BA,MAAO,YAGXW,SAAU,CACRC,SAAU,WACVC,IAAK,EACLC,MAAO,EACPnB,QAAS,QAEXoB,UAAW,CACTlB,SAAU,OACVG,MAAO,YCaIgB,EAxEY,SAAC,GAMrB,IALLC,EAKI,EALJA,KACAC,EAII,EAJJA,QACAC,EAGI,EAHJA,QACAC,EAEI,EAFJA,SACAC,EACI,EADJA,UAEMC,EAAUxC,IADZ,EAEQyC,cAALC,EAFH,oBAKFtB,EAMEgB,EANFhB,MACAuB,EAKEP,EALFO,YACAC,EAIER,EAJFQ,YACAC,EAGET,EAHFS,iBACAC,EAEEV,EAFFU,iBACAC,EACEX,EADFW,UAGF,OACE,kBAACC,EAAA,EAAD,CAAQb,KAAMA,EAAMK,QAAS,CAAErC,MAAOqC,EAAQrC,QAC5C,kBAAC8C,EAAA,EAAD,CAAYC,UAAWV,EAAQX,SAAUsB,QAASd,GAChD,kBAAC,IAAD,CAAkBa,UAAWV,EAAQP,aAEtCb,GACC,kBAACgC,EAAA,EAAD,CACEC,GAAG,qBACHb,QAAS,CAAEc,KAAMd,EAAQpB,OACzBmC,mBAAmB,GAElBb,EAAEtB,IAGP,kBAACoC,EAAA,EAAD,CAAehB,QAAS,CAAEc,KAAMd,EAAQ5B,cACtC,kBAAC6C,EAAA,EAAD,CACEJ,GAAG,2BACHb,QAAS,CAAEc,KAAMd,EAAQ1B,kBAExBiC,EAAYL,EAAEC,GAAeA,GAE/BC,GACC,kBAACa,EAAA,EAAD,CACEJ,GAAG,2BACHb,QAAS,CAAEc,KAAMd,EAAQ1B,kBAExBiC,EAAYL,EAAEE,GAAeA,IAIpC,kBAACc,EAAA,EAAD,CAAelB,QAAS,CAAEc,KAAMd,EAAQnB,cACrCyB,GACC,kBAACa,EAAA,EAAD,CACER,QAASb,EACTsB,QAAQ,WACRpB,QAAS,CAAEc,KAAMd,EAAQhB,gBAExBkB,EAAEI,IAGP,kBAACa,EAAA,EAAD,CACER,QAASZ,EACTqB,QAAQ,WACRpB,QAAS,CAAEc,KAAMd,EAAQb,eACzBkC,WAAS,GAERnB,EAAEG,OClCEiB,EA1CS,SAAC,GAAkB,IAAhBC,EAAe,EAAfA,SAAe,EACVC,mBAAS,IADC,mBACjC5B,EADiC,KACxB6B,EADwB,OAEED,mBAAS,IAFX,mBAEjCE,EAFiC,KAElBC,EAFkB,mBAGdD,EAHc,GAGjCE,EAHiC,KAGxBC,EAHwB,KAKlCC,EAAUC,uBAAY,WAAmB,IAAlBnC,EAAiB,uDAAP,GACrC,OAAO,IAAIoC,SAAQ,SAACJ,EAASC,GAC3BJ,EAAW7B,GACX+B,EAAiB,CAACC,EAASC,SAE5B,IAEGI,EAAcF,uBAAY,WAC9BJ,EAAiB,MAChB,IAEGO,EAAeH,uBAAY,WAC/BF,IACAI,MACC,CAACJ,EAAQI,IAENE,EAAgBJ,uBAAY,WAChCH,IACAK,MACC,CAACL,EAASK,IAEb,OACE,kBAAC,WAAD,KACE,kBAACG,EAAeC,SAAhB,CAAyBC,MAAOR,GAC7BP,GAEH,kBAAC,EAAD,CACE5B,KAA+B,IAAzB+B,EAAca,OACpB3C,QAASA,EACTC,QAASoC,EACTnC,SAAUoC,EACVnC,UAAWoC,M,2BC9BbK,EAAe,CACnBC,cAAe,GACfC,qBAAsB,GACtBC,6BAA8B,GAC9BC,yBAA0B,GAC1BC,oBAAqB,IAiERC,EA9DS,WAAmC,IAAlCC,EAAiC,uDAAzBP,EAAcQ,EAAW,uCACxD,OAAQA,EAAOC,MACb,ICfyB,uBDgBvB,OAAO,eACFF,EADL,CAEEN,cAAe,GACfC,qBAAsB,GACtBC,6BAA8B,GAC9BC,yBAA0B,GAC1BC,oBAAqB,KAGzB,IC9B4B,iBD+B1B,OAAO,eACFE,EADL,CAEEN,cAAc,YACT,IAAIS,IAAIH,EAAMN,cAAcU,OAAOC,SAASJ,EAAOnC,SAI5D,ICrCmC,wBDsCjC,OAAO,eACFkC,EADL,CAEEL,qBAAqB,YAChB,IAAIQ,IAAIH,EAAML,qBAAqBS,OAAOC,SAASJ,EAAOnC,SAInE,IC5CkC,gCD6ChC,OAAO,eACFkC,EADL,CAEEJ,6BAA6B,YACxB,IAAIO,IACLH,EAAMJ,6BAA6BQ,OAAOC,SAASJ,EAAOnC,SAKlE,ICrD8B,4BDsD5B,OAAO,eACFkC,EADL,CAEEH,yBAAyB,YACpB,IAAIM,IAAIH,EAAMH,yBAAyBO,OAAOC,SAASJ,EAAOnC,SAIvE,IC5DwB,sBD6DtB,OAAO,eACFkC,EADL,CAEEF,oBAAoB,YACf,IAAIK,IAAIH,EAAMF,oBAAoBM,OAAOC,SAASJ,EAAOnC,SAIlE,QACE,OAAO,eACFkC,KE1EEM,EAA4B,CAAC,SAAU,SAAU,kBCOxDb,EAAe,CACnBc,wBAAyB,GACzBC,4BAA6B,GAC7BC,2BAA4B,IAmDfC,EAhDa,WAAmC,IAAlCV,EAAiC,uDAAzBP,EAAcQ,EAAW,uCAC5D,MDbiC,wBCa7BA,EAAOC,KAEA,eACFF,EADL,CAEEO,wBAAwB,YACnB,IAAIJ,IACLH,EAAMO,wBAAwBH,OAAO,CACnCtC,GAAImC,EAAOnC,GACX6C,cAAeV,EAAOU,oBDpBO,gCC0B9BV,EAAOC,KAEP,eACFF,EADL,CAEEQ,4BAA4B,YACvB,IAAIL,IACLH,EAAMQ,4BAA4BJ,OAAO,CACvCtC,GAAImC,EAAOnC,GACX8C,oBAAqBX,EAAOW,0BDhCxC,uCCsCWX,EAAOC,KACT,eACFF,EADL,CAEEQ,4BAA6B,KDxCQ,gCC0C9BP,EAAOC,KACT,eACFF,EADL,CAEES,2BAA2B,YACtB,IAAIN,IAAIH,EAAMS,2BAA2BL,OAAOH,EAAOnC,QAIvD,eACFkC,ICnDHP,EAAe,CACnBoB,sBAAuB,GACvBC,wBAAyB,IAeZC,EAZc,WAAmC,IAAlCf,EAAiC,uDAAzBP,EAAcQ,EAAW,uCAC7D,MCXyB,uBDWrBA,EAAOC,KAEA,eAAKF,EAAZ,CAAmBa,sBAAuBZ,EAAOe,gBCZjB,kCDczBf,EAAOC,KACT,eAAKF,EAAZ,CAAmBc,wBAAyBb,EAAOgB,iBAG9CjB,GELMkB,EAPKC,YAAgB,CAClCC,KAAMC,IACNC,yBAA0BC,EAC1BC,aAAcd,EACdM,cAAeD,I,sFCKXU,GAAY,+CACZC,GACJ,wEACIC,GACJ,wEACIC,GACJ,uDAWEC,GAAMJ,GACNK,GAPiB,yBAUjBC,GAAcH,GAGZI,oEAAYC,0BACdJ,GAAMJ,GACNK,GA3BiB,mCA4BAH,GACCD,GAClBK,GAAcH,KAEdC,GA3Ca,yCA4CbC,GA7CgB,iCAKlB,8EAFA,8EA6CEC,GAzCF,8D,aCmBaG,I,OARM,SAAC,GAAD,IAAcC,EAAd,EAAGC,UAAyBC,EAA5B,qCACnB,kBAAC,IAAD,iBACMA,EADN,CAEE7D,SAAU,GACV8D,OAAQ,SAAAC,GAAK,OAAI,kBAACJ,EAAcI,EAAQF,EAAK7D,gB,qBCvBpC/D,GAAYC,aAAY,SAAAC,GAAK,MAAI,CAC5CoD,KAAK,aACHyE,WAAY,UACZC,OAAQ,OACRC,MAAO,OACPC,QAAS,OACTC,eAAgB,SAChBC,WAAY,UACXlI,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OACPI,cAAe,WAGnBC,QAAQ,aACNL,MAAO,IACP1H,aAAc,EACdyH,OAAQ,IACR5H,gBAAiB,QAChBF,EAAMQ,YAAYC,KAAK,MAAO,CAC9BsH,MAAO,MACPI,cAAe,WAGlBE,OAAQ,CACNN,MAAO,OACPD,OAAQ,IAEVQ,QAAS,CACPN,QAAS,OACTO,aAAc,IAGhBC,aAAa,aACXT,MAAO,IACPD,OAAQ,IACRE,QAAS,OACTE,WAAY,SACZD,eAAgB,SAChBE,cAAe,UACdnI,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OAGXU,MAAM,aACJV,MAAO,QACPD,OAAQ,QACRY,WAAY,QACX1I,EAAMQ,YAAYC,KAAK,MAAO,CAC7BuH,QAAS,SAGbW,YAAY,aACVZ,MAAO,OACPpH,QAAS,UACRX,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,SAIXa,OAAO,aACL1I,gBAAiB,UACjB4H,OAAQ,GACR9G,MAAO,UACPgH,QAAS,OACTE,WAAY,SACZD,eAAgB,SAChBY,wBAAyB,EACzBC,uBAAwB,GACvB9I,EAAMQ,YAAYC,KAAK,MAAO,CAC7BqH,OAAQ,GACRiB,UAAW,eCtCFC,GAzBI,SAAC,GAAkB,IAAhBnF,EAAe,EAAfA,SACdvB,EAAUxC,KAEhB,OACE,yBAAKkD,UAAWV,EAAQc,MACtB,yBAAKJ,UAAWV,EAAQ8F,SACtB,yBAAKpF,UAAWV,EAAQ+F,QACtB,kBAAC,GAAD,OAEF,yBAAKrF,UAAWV,EAAQgG,SACtB,yBAAKtF,UAAWV,EAAQkG,cACtB,yBAAKS,IAAKC,KAAclG,UAAWV,EAAQmG,MAAOU,IAAI,UAExD,yBAAKnG,UAAWV,EAAQqG,aAAc9E,IAExC,yBAAKb,UAAWV,EAAQsG,QACtB,kBAACQ,EAAA,EAAD,CAAY1F,QAAQ,SAApB,uCACsC,0D,wCCnB1C5D,GAAYC,YAAW,CAC3BqD,KAAM,CACJ4E,QAAS,OACTF,OAAQ,QAEVW,MAAO,CACLX,OAAQ,sBAcGuB,GAVF,SAAC,GAAmB,IAAjBrG,EAAgB,EAAhBA,UACRV,EAAUxC,KAEhB,OACE,yBAAKkD,UAAWsG,KAAWhH,EAAQc,KAAMJ,IACvC,yBAAKiG,IAAKM,KAAWvG,UAAWV,EAAQmG,MAAOU,IAAI,W,WCpB5CrJ,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5CwJ,cAAe,CACbC,OAAQ,OACR5H,IAAK,IACLmG,QAAS,OACTC,eAAgB,SAChBC,WAAY,SACZhI,gBAAiB,2BACjB0B,SAAU,WACVmG,MAAO,OACPD,OAAQ,QAEV4B,WAAY,CACV1I,MAAOhB,EAAMuB,OAAOP,WCST2I,GAjBQ,SAAC,GAA+C,IAA7CC,EAA4C,EAA5CA,UAAW5G,EAAiC,EAAjCA,UAAW6G,EAAsB,EAAtBA,gBACxCvH,EAAUxC,KAEhB,OAAI8J,EAEA,yBAAK5G,UAAWsG,KAAWhH,EAAQkH,cAAexG,IAChD,kBAAC8G,GAAA,EAAD,CACEC,eAAa,EACbzH,QAAS,CAAEc,KAAMkG,KAAWhH,EAAQoH,WAAYG,OAMjD,M,gCCnBI/J,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5CoD,KAAM,CACJ4E,QAAS,OACTG,cAAe,SACfJ,MAAO,QAETiC,MAAO,CACLzB,aAAc,MACdvH,MAAO,UACPiJ,cAAe,YACfpJ,SAAU,OACVC,WAAY,OACZoJ,cAAe,WAEjBC,UAAW,CACT9J,aAAc,MACdF,OAAQ,oBACR,UAAW,CACTA,OAAO,aAAD,OAAeH,EAAMuB,OAAOP,SAGtCoJ,cAAe,CACbrC,MAAO,OACPsC,cAAe,QAEjBC,iBAAkB,CAChB5I,UAAU,iBAAD,OAAmB1B,EAAMuB,OAAOP,OACzCb,OAAO,aAAD,OAAeH,EAAMuB,OAAOP,QAEpCuJ,MAAO,CACL7I,UAAW,OACXvB,OAAQ,oBACR,UAAW,CACTA,OAAQ,sBAGZqK,MAAO,CACL7J,QAAS,WACTE,SAAU,OACVC,WAAY,QAEd2J,cAAe,CACbvK,gBAAiB,UACjBc,MAAO,WAET0J,cAAe,CACb1J,MAAO,0BCGI2J,GA1CK,SAAA/C,GASdA,EAPF4C,MAF0B,IAG1BR,EAMEpC,EANFoC,MACAhH,EAKE4E,EALF5E,UACA4H,EAIEhD,EAJFgD,OACAC,EAGEjD,EAHFiD,UACAC,EAEElD,EAFFkD,MACGC,EARsB,aASvBnD,EATuB,4DAWrBtF,EAAUxC,KAEVkL,IAAeJ,EAAO/F,OAE5B,OACE,yBAAK7B,UAAWsG,KAAWhH,EAAQc,KAAMJ,GAAY8H,MAAOA,GAC1D,kBAACG,GAAA,EAAD,CACEjI,UAAWV,EAAQ0H,MACnBkB,QAAO,UAAKlB,EAAL,UACPmB,SAAUJ,EAAWI,SACrB7I,QAAS,CACP6I,SAAU7I,EAAQoI,gBAGnBV,GAEH,kBAACoB,GAAA,EAAD,eACE9I,QAAS,CACPc,KAAMkG,KAAWhH,EAAQ6H,UAAT,eAAuB7H,EAAQiI,MAAQS,IACvDK,QAAS/B,KAAW,eAAGhH,EAAQgI,kBAAoBU,IACnDR,MAAOlI,EAAQkI,MACfW,SAAU7I,EAAQmI,eAEpBtH,GAAE,UAAK6G,EAAL,WACEe,IAELF,GAAa,kBAACS,GAAA,EAAD,CAAgBf,OAAK,GAAEM,KC+C5BU,GAnFD,SAAA3D,GAAU,IAEpB4C,EAaE5C,EAbF4C,MACAR,EAYEpC,EAZFoC,MACAwB,EAWE5D,EAXF4D,iBACAC,EAUE7D,EAVF6D,UACAC,EASE9D,EATF8D,aACAC,EAQE/D,EARF+D,cACA3I,EAOE4E,EAPF5E,UACA4I,EAMEhE,EANFgE,WACAC,EAKEjE,EALFiE,WACAC,EAIElE,EAJFkE,KACAC,EAGEnE,EAHFmE,YAZmB,EAejBnE,EAFFoE,KAAQC,EAbW,EAaXA,QAAS1B,EAbE,EAaFA,MAAO2B,EAbL,EAaKA,aACrBnB,EAdgB,aAejBnD,EAfiB,mJAgBftF,EAAUxC,KAhBK,EAiBTyC,cAALC,EAjBc,oBAsCrB,OACE,yBAAKQ,UAAWsG,KAAWhH,EAAQc,KAAMJ,IACtCgH,GACC,kBAACiB,GAAA,EAAD,CACEjI,UAAWsG,KAAWhH,EAAQ0H,MAAO4B,GACrCV,QAAO,UAAKlB,EAAL,UACPmB,SAAUJ,EAAWI,SACrB7I,QAAS,CACP6I,SAAU7I,EAAQoI,gBAGnBlI,EAAEwH,IAGP,kBAACoB,GAAA,EAAD,eACE9I,QAAS,CACPc,KAAMkG,KACJhH,EAAQ6H,UADM,eAGX7H,EAAQiI,OACN2B,GAAiBD,IAAYT,IAAsBjB,GAExDsB,GAEFR,QAAS/I,EAAQgI,iBACjBE,MAAOlI,EAAQkI,MACfW,SAAU7I,EAAQmI,eAEpB0B,WAAY,CACVL,KAAMA,EACNL,UAAWC,EAAeD,EAAY,KAExCtI,GAAE,UAAK6G,EAAL,UACF+B,YAAavJ,EAAEuJ,IACXvB,EACAO,EArBN,CAsBEqB,SAvDkB,SAAAC,GAAM,IACpBzH,EAAUyH,EAAEC,OAAZ1H,MAER,GAAI+G,GAAiB/G,EAAO,CAE1B,IADY,aAEL2H,KAAK3H,KACTA,EAAMC,OAAS,GAAuB,IAAjBD,EAAMC,QAA6B,MAAbD,EAAM,IAElD,YAEG,GAAI8G,EAET,YADAlB,EAAM4B,SAASxH,EAAM4H,QAAQ,MAAO,KAItChC,EAAM4B,SAASxH,QAyCX4G,IAAqBS,GAAWC,IAAiB3B,GACjD,kBAACe,GAAA,EAAD,CAAgBf,OAAK,GAAE/H,EAAE+H,M,oBCpFpBkC,GAAe,CAC1BC,QCJkC,CAClCxL,MAAO,QACPuB,YAAa,cACbkK,oBAAqB,wBACrBC,SAAU,WACVC,YAAa,eACbC,YAAa,gBACbC,eAAgB,kBAChBC,aAAc,4BACdC,SAAU,WACVC,YAAa,eACbC,WAAY,cACZC,IAAK,MAELC,gBAAiB,oBACjBC,mBAAoB,uBACpBC,uBAAwB,wCACxBC,wBAAwB,gOACxBC,oBAAoB,4GACpB,2BAA4B,4BDd5BC,UELoC,CACpCxM,MAAO,SACPuB,YAAa,cACbkK,oBAAqB,4BACrBC,SAAU,WACVC,YAAa,gBACbC,YAAa,wBACbC,eAAgB,sBAChBC,aAAc,2BACdC,SAAU,YACVC,YAAa,iBACbC,WAAY,YACZC,IAAK,UAELC,gBAAiB,uBACjBC,mBAAoB,yBACpBC,uBAAwB,yCACxBC,wBAAwB,qPAGxBC,oBAAoB,6IAEpB,2BAA4B,8CCpBjB3N,GAAYC,YAAW,CAClCqD,KAAM,CACJ4E,QAAS,OACTG,cAAe,SACfJ,MAAO,QAETiC,MAAO,CACLzB,aAAc,MACdvH,MAAO,UACPiJ,cAAe,YACfpJ,SAAU,OACVC,WAAY,OACZoJ,cAAe,WAEjByD,SAAU,CACRC,OAAQ,WACRC,QAAS,OACTnM,UAAW,OACXf,QAAS,WACTE,SAAU,OACVC,WAAY,OACZgN,UAAW,OACXC,UAAW,QACX1N,aAAc,MACdF,OAAQ,oBACR,UAAW,CACTA,OAAQ,qBAEV,iBAAkB,CAChBa,MAAO,WAET,UAAW,CACTU,UAAW,uCACXvB,OAAQ,sBAGZoK,MAAO,CACLpK,OAAQ,oBACR,UAAW,CACTA,OAAQ,qBAEV,UAAW,CACTuB,UAAW,OACXvB,OAAQ,sBAGZ6N,iBAAkB,CAChBD,UAAW,UCIAE,GAzCO,SAAC,GAUhB,IAAD,EATJzD,EASI,EATJA,MACAR,EAQI,EARJA,MACAkE,EAOI,EAPJA,iBACAC,EAMI,EANJA,SACAnL,EAKI,EALJA,UACA+I,EAII,EAJJA,YACAqC,EAGI,EAHJA,WAGI,IAFJpC,KAAQC,EAEJ,EAFIA,QAAS1B,EAEb,EAFaA,MACdQ,EACC,8GACEzI,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIJ,OACE,yBAAKQ,UAAWsG,KAAWhH,EAAQc,KAAMJ,IACvC,kBAACiI,GAAA,EAAD,CAAYjI,UAAWV,EAAQ0H,MAAOkB,QAAO,UAAKlB,EAAL,WACzB,kBAAVA,EAAqBxH,EAAEwH,GAASA,GAG1C,kBAACqE,GAAA,EAAD,eACElL,GAAE,UAAK6G,EAAL,UACF+B,YAAavJ,EAAEuJ,GACf/I,UAAWsG,KAAWhH,EAAQqL,UAAT,mBAClBrL,EAAQiI,MAAQ0B,GAAW1B,GADT,cAElBjI,EAAQ0L,iBAAmBI,GAFT,IAIrBE,QAAS,GACL9D,EACAO,IAGLkB,GAAW1B,GACV,kBAACe,GAAA,EAAD,CAAgBf,OAAK,GACC/H,EAAnB0L,EAAqBzB,GAAa0B,GAAU5D,GAAYA,MCxC7DzK,GAAYC,YAAW,CAC3BwO,kBAAmB,CACjBvG,QAAS,OACTD,MAAO,OACP/G,MAAO,UACPiH,eAAgB,SAChBC,WAAY,SACZa,UAAW,SACX,WAAY,CACVT,QAAS,KACTlH,UAAW,oBACXH,OAAQ,aACRuN,KAAM,YAER,UAAW,CACTlG,QAAS,KACTlH,UAAW,oBACXH,OAAQ,aACRuN,KAAM,eAiBGC,GAZS,SAAC,GAAwB,IAAtBC,EAAqB,EAArBA,KAAM7K,EAAe,EAAfA,SACzBvB,EAAUxC,KAEhB,OACE,kBAAC,IAAD,CAAM6O,GAAID,GACR,kBAACtF,EAAA,EAAD,CAAYpG,UAAWV,EAAQiM,kBAAmB7K,QAAQ,SACvDG,K,wuBCjCF,IAAM+K,GAAkBC,KAAH,MAYfC,GAA0BD,KAAH,MAQvBE,GAAUF,KAAH,M,4lCCpBb,IAAMG,GAAwBH,KAAH,MAoBrBI,GAAwBJ,KAAH,MAQrBK,GAAwBL,KAAH,MAQrBM,GAA6BN,KAAH,M,6nCCpChC,IAAMO,GAA8BP,KAAH,MAY3BQ,GAAiBR,KAAH,MA8BdS,GAA2BT,KAAH,MCvCxBU,GAA0B,SAAAlJ,GACrC,MAAO,CAAEd,KrBNgB,qBqBMUc,kBCN/BmJ,GAAc,CAClB9C,QAAS,KACT+C,OAAQ,MAGJC,GAAqB,CACzBhD,QAAS,QACT+C,OAAQ,SAGJE,GAAyB,CAC7BC,UAAW,YACX,cAAe,UACfC,QAAS,UACTC,OAAQ,SACRC,UAAW,YACXC,YAAa,eAGTC,GAAqB,CACzBC,UAAW,YACXC,QAAS,UACTC,QAAS,UACTC,OAAQ,SACRC,UAAW,YACXC,YAAa,eAGTC,GAAY,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAEvDC,GACM,WCyHG3Q,GAtJGC,aAAW,SAAAC,GAAK,MAAK,CACrCqI,OAAQ,CACNL,QAAS,OACTG,cAAe,MACfqG,KAAM,WACN1G,OAAQ,GACR5H,gBAAiB,OACjB+H,eAAgB,gBAChBvG,UAAW,uBAEbgP,YAAa,CACX1I,QAAS,OACTE,WAAY,UAEdyI,KAAM,CACJ7I,OAAQ,kBACRzG,UAAW,OAEbuP,WAAY,CACV5I,QAAS,QAEX6I,iBAAkB,CAChB9I,MAAO,IACPpH,QAASX,EAAM8Q,QAAQ,IAEzBC,gBAAgB,aACdpQ,QAAS,aACTqQ,UAAW,OACXhJ,QAAS,OACTE,WAAY,UACXlI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfD,WAAY,eAGhB+I,eAAe,aACbpQ,SAAU,OACVqQ,OAAQ,UACR,qBAAsB,CACpB1P,YAAa,IAEf2P,SAAU,aACVC,WAAY,UACXpR,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,eAGb0Q,mBAAoB,CAClBrJ,QAAS,eACThH,MAAO,WAETsQ,qBAAsB,CACpBtQ,MAAO,UACPD,WAAY,QAEdwQ,cAAc,aACZvJ,QAAS,OACTlG,MAAO,EACPoG,WAAY,UACXlI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfD,WAAY,eAGhBsJ,aAAa,aACXxJ,QAAS,OACTE,WAAY,UACXlI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,kBAGb8Q,SAAU,CACRC,aAAc,OACd1Q,MAAO,WAET2Q,cAAe,CACbC,KAAM,UACN7J,MAAO,OACPD,OAAQ,OACRtG,YAAa,OAEfqQ,iBAAiB,aACf7J,QAAS,OACT8J,YAAa,oBACb/J,MAAO,QACPD,OAAQ,QACP9H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BN,OAAQ,SAGZ4R,KAAM,CACJrQ,UACE,yGACFE,SAAU,WACVC,IAAK,MACL3B,gBAAiB,OACjB6H,MAAO,QACPD,OAAQ,QAEVkK,yBAA0B,CACxBjK,MAAO,QACPC,QAAS,OACT8J,YAAa,oBACb7J,eAAgB,UAElBgK,wBAAwB,aACtBlK,MAAO,QACPC,QAAS,OACT8J,YAAa,qBACZ9R,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BqR,YAAa,OACbnR,QAAS,kBAGbuR,6BAA6B,aAC3BnK,MAAO,yBACPC,QAAS,OACTG,cAAe,SACfxH,QAAS,WACTsH,eAAgB,SAChBkK,WAAY,kBACXnS,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,kBAGbyR,oCAAqC,CACnCrK,MAAO,QACPC,QAAS,OACTG,cAAe,SACfxH,QAAS,WACTmR,YAAa,oBACb7J,eAAgB,UAElBoK,UAAW,CACTtK,MAAO,QACPpH,QAAS,aAEX2R,eAAgB,CACdZ,aAAc,OACd1Q,MAAO,WAETuR,kBAAmB,CACjBxR,WAAY,OACZF,SAAU,QAEZ2R,aAAc,CACZtS,gBAAiB,0BCnHfuS,GAAkB,SAAAC,GACtB,OAAOA,EAAKC,KAAI,SAACC,EAAOC,GACtB,IAAMC,EAAU,UAAMF,EAAMG,UAAZ,YAAyBH,EAAMI,SAA/B,YAA2CJ,EAAMK,YAAjD,YAAgEL,EAAMM,MAAtE,iBACdN,EAAMO,YADQ,YACOP,EAAMQ,gBADb,YACgCR,EAAMS,UACtD,OAAO,aACLzO,MAAOiO,EACPC,WAAYA,GACTF,OAqXT,SAASU,GAAT,GAAuD,IAAnCtJ,EAAkC,EAAlCA,MAAO2E,EAA2B,EAA3BA,GAAI4E,EAAuB,EAAvBA,oBACvBC,EAAQC,YAAc,CAC1B/E,KAAMC,EACN+E,MAAOH,IAGHjR,EAAUxC,KAEhB,OACE,wBAAIkD,UAAWV,EAAQ2O,gBACrB,kBAAC,IAAD,CACEjO,UAAWsG,KAAWhH,EAAQ+O,mBAAT,eAClB/O,EAAQgP,qBAAuBkC,IAElC7E,GAAIA,GAEH3E,IAKT,IAQe2J,gBARS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,kBAEI,SAAAuN,GAAQ,MAAK,CACtCC,iBAAkB,SAAAC,GAAI,OAAIF,EAASrE,GAAwBuE,KAC3DC,2BAA4B,SAAAD,GAAI,OAAIF,EH7a7B,CAAErO,KrBT2B,gCqBSUe,eG6a0BwN,QAG3DH,EA7Yf,YAA6C,IAAD,EAAvB3Q,EAAuB,EAAvBA,UAAc4E,EAAS,8BACpCtF,EAAUxC,KAD0B,EAExByC,cAFwB,mBAEnCC,EAFmC,KAEhCwR,EAFgC,KAGpCC,EAAUC,cACR7N,EAAgEuB,EAAhEvB,cAAewN,EAAiDjM,EAAjDiM,iBAAkBE,EAA+BnM,EAA/BmM,2BAJC,EAKhBI,IAAMrQ,SAAS,MALC,mBAKnCc,EALmC,KAK5BwP,EAL4B,OAMJD,IAAMrQ,UAAS,GANX,mBAMnCuQ,EANmC,KAMtBC,EANsB,OAOlBH,IAAMrQ,UAAS,GAPG,mBAOnCyQ,EAPmC,KAO7BC,EAP6B,OAQVL,IAAMrQ,SAAS,MARL,mBAQnC2Q,EARmC,KAQzBC,EARyB,OASzBC,YAAY5F,IAAtB6F,EATmC,sBAUZD,YAAYxF,IAAnC0F,EAVmC,sBAWLC,YAASzF,IAAtCqD,EAXkC,EAWlCA,KAAeqC,EAXmB,EAW5BC,QACNC,EAAoBC,wBAApBD,gBAZkC,EAaZd,IAAMrQ,UAAS,GAbH,mBAa1BqR,GAb0B,aAcNhB,IAAMrQ,UAAS,GAdT,mBAcnCsR,EAdmC,KAcvBC,EAduB,KAgBpCC,GAAmBtB,EAAK7F,SACxBoH,MAAkB,OAAClP,QAAD,IAACA,OAAD,YAACA,EAAeH,6BAAhB,aAAC,EAAsCmN,UAjBrB,GAkBJc,IAAMrQ,UAAS,GAlBX,qBAkBtB0R,IAlBsB,aAoBpCC,GAAgB,SAAAC,GACpB,IAAMC,EAAS,eACVtP,EAAcH,sBADJ,CAEbmN,SAAUqC,IAGZ7B,EAAiB8B,GACjB,IAAMC,EAASlD,EAAKpM,eAAeuP,MAAK,SAAAC,GACtC,OAAOA,EAAI3S,KAAOwS,EAAUxS,MAG1ByS,IACFA,EAAOvC,SAAWqC,EAClB3B,EAA2BrB,EAAKpM,wBAG3BqP,EAAUI,mBACVJ,EAAUvC,uBACVuC,EAAUK,WAEjBnB,EAAoB,CAClBoB,UAAW,CAAE5P,cAAesP,KAC3BO,MAAK,qBAAAC,EAAAC,OAAA,mEAAAD,EAAA,MACApB,KADA,OAENS,GAAeE,GACfP,GAAW,GACXF,EAAgBzS,EAAE,4CAA6C,CAC7DkB,QAAS,YALL,yCAUJ2S,GAAiB,SAAAC,GACrBC,aAAaC,QAAQ,WAAYF,GACjCtC,EAAKqC,eAAeC,IAEhBG,GAAsB,SAAAC,GAC1B,IAAMC,EAAqBtQ,EAAcF,wBAAwBuQ,GACjEH,aAAaC,QACX,wBACAI,KAAKC,UAAUF,IAEjBvC,EAASsC,GACT,IAAMI,EAAazQ,EAAcF,wBAAwBuQ,GACzDlB,GAAesB,EAAWzD,UAC1BQ,EAAiB,eACZiD,KAIDC,GAAiB,SAAAC,GACrBtC,EAAYsC,EAAMC,gBAGd1S,GAAc,WAClBmQ,EAAY,OAGdP,IAAM+C,WAAU,WACdC,GAA4B9Q,EAAcF,2BACzC,IAEH,IAAMgR,GAA8B,SAAAC,GAClC,IAAIlR,EAAwBqQ,aAAac,QAAQ,yBACjD,GAAInR,EAAuB,CACzBA,EAAwB0Q,KAAKU,MAAMpR,GACnC,IAAMqR,EAAqBH,EAAqBI,WAC9C,SAAA1D,GAAI,OAAIA,EAAK3Q,KAAL,UAAe+C,EAAsB/C,OAE/C,GAAIoU,GAAsB,EAAG,CAC3BnD,EAAS1O,SAAS6R,IAClB,IAAME,EAAqBL,EAAqBG,GAChD/B,GAAeiC,EAAmBpE,UAClCQ,EAAiB,eAAKuD,EAAqBG,QAoBjD,OAfApD,IAAM+C,WAAU,WACVxE,IACEA,EAAKgF,qBAAqB3B,aAC5BoB,GAA4BzE,EAAKpM,gBACjCkO,GAAQ,GACRF,GAAe,GACfP,EAA2BrB,EAAKpM,kBAEhCkO,EAAQ9B,EAAKgF,qBAAqBC,WAAalH,IAC/C6D,GAAe,GACfT,EAAiBnB,EAAKgF,0BAGzB,CAAChF,IAGF,kBAACkF,GAAA,EAAD,CAAQ5U,UAAWsG,KAAWhH,EAAQ+F,OAAQrF,GAAYpB,SAAS,UACjE,kBAACiW,GAAA,EAAD,CAAQC,MAAI,GACV,kBAAC/U,EAAA,EAAD,CAAYgV,aAAW,OAAO9U,QAAS,kBAAMoS,GAAc,KACzD,kBAAC,KAAD,QAGJ,kBAAC,GAAD,CAAMrS,UAAWV,EAAQqO,OACzB,kBAACkH,GAAA,EAAD,CAAQG,QAAM,GACZ,yBAAKhV,UAAWV,EAAQsO,YACtB,wBAAI5N,UAAWV,EAAQyO,iBACrB,kBAACuC,GAAD,CACE3E,GAAG,IACH3E,MAAK,UAAKxH,EAAE,aACZ+Q,qBAAqB,IAEvB,kBAACD,GAAD,CAAU3E,GAAG,iBAAiB3E,MAAK,UAAKxH,EAAE,eAC1C,kBAAC8Q,GAAD,CACE3E,GAAG,iCACH3E,MAAK,UAAKxH,EAAE,kCAEd,kBAAC8Q,GAAD,CAAU3E,GAAG,cAAc3E,MAAK,UAAKxH,EAAE,iBACvC,kBAAC8Q,GAAD,CAAU3E,GAAG,mBAAmB3E,MAAK,UAAKxH,EAAE,aAC5C,kBAAC8Q,GAAD,CAAU3E,GAAG,YAAY3E,MAAK,UAAKxH,EAAE,eACpCkQ,GAAQ2B,GACP,kBAACf,GAAD,CACE3E,GAAG,mBACH3E,MAAK,UAAKxH,EAAE,sBAGfkQ,GAAQ6B,GAAQ,kBAACjB,GAAD,CAAU3E,GAAG,SAAS3E,MAAK,UAAKxH,EAAE,cAGvD,yBAAKQ,UAAWV,EAAQiP,eACtB,yBAAKvO,UAAWV,EAAQuP,kBACtB,kBAACpO,EAAA,EAAD,CAAQT,UAAWV,EAAQkP,aAAcvO,QAAS8T,IAChD,kBAAC,KAAD,CAAsB/T,UAAWV,EAAQqP,gBACzC,kBAACvI,EAAA,EAAD,CAAYpG,UAAWV,EAAQmP,UAC5BjP,EAAE,gBAGP,kBAAC,KAAD,CACEW,GAAG,cACHsR,SAAUA,EACVwD,aAAW,EACXhW,KAAMiW,QAAQzD,GACdtS,QAASoC,IAET,kBAAC4T,GAAA,EAAD,CACEC,SACgC,2BAA9BnE,EAAQoE,SAASC,SAEnBhW,QAAS,CAAE8V,SAAU9V,EAAQkQ,cAC7BvP,QAAS,WACPgR,EAAQsE,KAAK,4BAGd/V,EAAE,kBAEL,kBAAC2V,GAAA,EAAD,CACEC,SAAwC,uBAA9BnE,EAAQoE,SAASC,SAC3BhW,QAAS,CAAE8V,SAAU9V,EAAQkQ,cAC7BvP,QAAS,WACPgR,EAAQsE,KAAK,wBAGd/V,EAAE,eAIRkQ,IAAS2B,GACR,yBAAKrR,UAAWV,EAAQ0P,0BACtB,kBAAC5I,EAAA,EAAD,CAAYpG,UAAWV,EAAQiQ,mBAC5BlM,EAAcH,sBAAsB6M,UAAW,IAC/C1M,EAAcH,sBAAsB8M,WAI1CN,GAAQ2B,GACP,yBAAKrR,UAAWV,EAAQ4P,8BACtB,kBAAC9I,EAAA,EAAD,CAAYpG,UAAWV,EAAQiQ,mBAC5BlM,EAAcH,sBAAsB6M,UAAW,IAC/C1M,EAAcH,sBAAsB8M,UAEvC,kBAAC,GAAD,CACEpO,MAAOA,EACPoF,MAAO,cACPwO,OAAQ,aACRpM,SAAUqK,GACVgC,MAAOhG,GAAgBpM,EAAcF,4BAI1CuM,IAAS6B,GAAQF,IAChB,yBAAKrR,UAAWV,EAAQ2P,yBACtB,kBAAC,GAAD,CACErN,MAAO2Q,GACPnJ,SAAUqJ,GACVgD,MAAO,CACL,CAAE7T,OAAO,EAAMoF,MAAO,aACtB,CAAEpF,OAAO,EAAOoF,MAAO,kBAK/B,yBAAKhH,UAAWV,EAAQ2P,yBACtB,kBAAC,GAAD,CACErN,MAAO0Q,GACPlJ,SAAUiK,GACVoC,MAAO,CACL,CAAE7T,MAAO,UAAWoF,MAAO,WAC3B,CAAEpF,MAAO,SAAUoF,MAAO,mBAMpC,kBAAC0O,GAAA,EAAD,CACEC,OAAO,OACP1W,KAAMmT,EACNjT,QAAS,kBAAMkT,GAAc,KAE7B,6BACE,kBAACtS,EAAA,EAAD,CAAYgV,aAAW,OAAO9U,QAAS,kBAAMoS,GAAc,KACzD,kBAAC,KAAD,OAEF,yBAAKrS,UAAWV,EAAQsO,YACtB,wBAAI5N,UAAWV,EAAQyO,iBACrB,kBAACuC,GAAD,CACE3E,GAAG,IACH3E,MAAK,UAAKxH,EAAE,aACZ+Q,qBAAqB,IAEvB,kBAACD,GAAD,CAAU3E,GAAG,iBAAiB3E,MAAK,UAAKxH,EAAE,eAC1C,kBAAC8Q,GAAD,CACE3E,GAAG,iCACH3E,MAAK,UAAKxH,EAAE,kCAEd,kBAAC8Q,GAAD,CAAU3E,GAAG,cAAc3E,MAAK,UAAKxH,EAAE,iBACvC,kBAAC8Q,GAAD,CAAU3E,GAAG,mBAAmB3E,MAAK,UAAKxH,EAAE,aAC5C,kBAAC8Q,GAAD,CAAU3E,GAAG,YAAY3E,MAAK,UAAKxH,EAAE,eACpCkQ,GAAQ2B,GACP,kBAACf,GAAD,CACE3E,GAAG,mBACH3E,MAAK,UAAKxH,EAAE,sBAGfkQ,GAAQ6B,GAAQ,kBAACjB,GAAD,CAAU3E,GAAG,SAAS3E,MAAK,UAAKxH,EAAE,cAGvD,yBAAKQ,UAAWV,EAAQiP,eACtB,yBAAKvO,UAAWV,EAAQuP,kBACtB,kBAACpO,EAAA,EAAD,CAAQT,UAAWV,EAAQkP,aAAcvO,QAAS8T,IAChD,kBAAC,KAAD,CAAsB/T,UAAWV,EAAQqP,gBACzC,kBAACvI,EAAA,EAAD,CAAYpG,UAAWV,EAAQmP,UAC5BjP,EAAE,gBAGP,kBAAC,KAAD,CACEW,GAAG,cACHsR,SAAUA,EACVwD,aAAW,EACXhW,KAAMiW,QAAQzD,GACdtS,QAASoC,IAET,kBAAC4T,GAAA,EAAD,CACEC,SACgC,2BAA9BnE,EAAQoE,SAASC,SAEnBhW,QAAS,CAAE8V,SAAU9V,EAAQkQ,cAC7BvP,QAAS,WACPgR,EAAQsE,KAAK,4BAGd/V,EAAE,kBAEL,kBAAC2V,GAAA,EAAD,CACEC,SAAwC,uBAA9BnE,EAAQoE,SAASC,SAC3BhW,QAAS,CAAE8V,SAAU9V,EAAQkQ,cAC7BvP,QAAS,WACPgR,EAAQsE,KAAK,wBAGd/V,EAAE,eAIRkQ,IAAS2B,GACR,yBAAKrR,UAAWV,EAAQ0P,0BACtB,kBAAC5I,EAAA,EAAD,CAAYpG,UAAWV,EAAQiQ,mBAC5BlM,EAAcH,sBAAsB6M,UAAW,IAC/C1M,EAAcH,sBAAsB8M,WAI1CN,GAAQ2B,GACP,yBAAKrR,UAAWV,EAAQ4P,8BACtB,kBAAC9I,EAAA,EAAD,CAAYpG,UAAWV,EAAQiQ,mBAC5BlM,EAAcH,sBAAsB6M,UAAW,IAC/C1M,EAAcH,sBAAsB8M,UAEvC,kBAAC,GAAD,CACEpO,MAAOA,EACPoF,MAAO,cACPwO,OAAQ,aACRpM,SAAUqK,GACVgC,MAAOhG,GAAgBpM,EAAcF,4BAI1CuM,IAAS6B,GAAQF,IAChB,yBAAKrR,UAAWV,EAAQ2P,yBACtB,kBAAC,GAAD,CACErN,MAAO2Q,GACPnJ,SAAUqJ,GACVgD,MAAO,CACL,CAAE7T,OAAO,EAAMoF,MAAO,aACtB,CAAEpF,OAAO,EAAOoF,MAAO,kBAK/B,yBAAKhH,UAAWV,EAAQ2P,yBACtB,kBAAC,GAAD,CACErN,MAAO0Q,GACPlJ,SAAUiK,GACVoC,MAAO,CACL,CAAE7T,MAAO,UAAWoF,MAAO,WAC3B,CAAEpF,MAAO,SAAUoF,MAAO,oBAOtC,6BACE,kBAACvG,EAAA,EAAD,CACET,UAAWV,EAAQ+P,UACnBpP,QAAS,kBACP2R,IAASsB,MAAK,WACZrC,EAAiB,IACjBE,EAA2B,IAC3BE,EAAQsE,KAAK,eAIjB,kBAACnP,EAAA,EAAD,CAAYpG,UAAWV,EAAQgQ,gBAC5B9P,EAAE,kB,WC9YT1C,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACrC4Y,KAAM,CACJ7Q,MAAO,OACP+J,YAAY,aAAD,OAAe9R,EAAM6Y,QAAQC,SACxC1Y,UAAW,cAEb2Y,SAAU,CACRvK,KAAM,OAIH,SAASwK,GAASpR,GACvB,IAAMtF,EAAUxC,KACR+D,EAAgD+D,EAAhD/D,SAAUe,EAAsCgD,EAAtChD,MAAO5B,EAA+B4E,EAA/B5E,UAAW6P,EAAoBjL,EAApBiL,MAAUoG,EAFhB,aAE0BrR,EAF1B,0CAI9B,OACE,kBAACwB,EAAA,EAAD,eACE3B,UAAU,MACVzE,UAAWsG,KAAWhH,EAAQyW,SAAU/V,GACxCkW,KAAK,WACLC,OAAQvU,IAAUiO,EAClB1P,GAAE,4BAAuB0P,GACzBuG,kBAAA,uBAAiCvG,IAC7BoG,GAEHrU,IAAUiO,GAAShP,GAKX,mBAA+C,IAA5CA,EAA2C,EAA3CA,SAAUuI,EAAiC,EAAjCA,SAAUxH,EAAuB,EAAvBA,MAAO5B,EAAgB,EAAhBA,UACrCV,EAAUxC,KAEhB,OACE,kBAAC,KAAD,CACEuZ,eAAe,UACfC,YAAY,WACZ1U,MAAOA,EACPwH,SAAUA,EACV2L,aAAW,wBACX/U,UAAWsG,KAAWhH,EAAQsW,KAAM5V,IAEnCa,I,gCC/CM/D,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5CuZ,UAAU,aACRjZ,SAAU,QACVwN,UAAW,OACXpM,UAAW,8BACV1B,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BuH,QAAS,SAGbwR,UAAW,CACTtZ,gBAAiB,WAEnBgB,MAAO,CACLP,QAAS,aAEX8Y,SAAU,CACRzR,QAAS,OACTE,WAAY,SACZH,MAAO,OACPkC,cAAe,WAEjByP,UAAW,CACT7Y,SAAU,OACVG,MAAO,MACPQ,YAAa,QAEfmY,SAAU,CACR3Y,MAAO,UACPH,SAAU,OACVW,YAAa,QAEfoY,YAAa,CACX5R,QAAS,OACTE,WAAY,UAEd2R,YAAa,CACX7Y,MAAO,WAET8Y,cAAe,CACb/Y,WAAY,MACZC,MAAO,WAET+Y,eAAgB,CACd7I,OAAQ,qBACRlQ,MAAO,0BAIEgZ,GAAYja,YAAW,CAClCka,QAAS,CACP/R,WAAY,cAEd9E,KAAM,CACJvC,SAAU,OACVC,WAAY,OACZC,WAAY,SACZC,MAAO,UACPL,QAAS,iBACTM,OAAQ,UACR8H,UAAW,OACX+E,UAAW,OACXoD,OAAQ,eAEVkH,SAAU,CACRlY,gBAAiB,UACjBa,WAAY,MACZC,MAAO,UACPkQ,OAAQ,aCQGyC,gBANS,SAAAtO,GACtB,OAAO,eACFA,EAAMoB,QAI2B,KAAzBkN,EAhEE,SAAC,GAAmD,IAAjDuG,EAAgD,EAAhDA,UAAWhZ,EAAqC,EAArCA,MAAOiZ,EAA8B,EAA9BA,UAAWvB,EAAmB,EAAnBA,KAAMwB,EAAa,EAAbA,OAC/C9X,EAAUxC,KACVua,EAAaL,KAF+C,EAGtDzX,cAALC,EAH2D,oBAK9D8X,GAAqB,EAWzB,OATA1B,EAAKjG,KAAI,SAAAmB,GACPA,EAAKyG,QAAUJ,EAAUrG,GACzBA,EAAK0G,aAAc,EACdF,IAAoBxG,EAAK0G,aAAc,GACvC1G,EAAKyG,UACRD,GAAqB,MAKvB,yBAAKtX,UAAWV,EAAQiX,WACtB,kBAACnQ,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAEtB,IAGL,kBAAC,KAAD,CACEkL,SAAUgO,EACVd,YAAY,WACZ1U,MAAOsV,EACP5X,QAAS,CAAEkX,UAAWlX,EAAQkX,YAE7BZ,EAAKjG,KAAI,SAAC8H,EAAK5H,GAAN,OACR,kBAAC6H,GAAA,EAAD,CACEC,IAAK9H,EACL7P,UAAWsG,KAAW,eACnBhH,EAAQyX,eAAiBU,EAAID,cAEhCxQ,MACE,yBACEhH,UAAWsG,KACThH,EAAQsX,YADW,eAGhBtX,EAAQuX,YAAcY,EAAIF,SAHV,eAKhBjY,EAAQwX,cAAgBjH,IAAUqH,KAGtCO,EAAIF,SACH,kBAAC,KAAD,CAAUjY,QAAS,CAAEc,KAAMd,EAAQqX,YAEpCnX,EAAEiY,EAAIG,OAGXtY,QAAS+X,YC9CNQ,GAfG,SAAC,GAAyB,IAAvBjC,EAAsB,EAAtBA,KAAMsB,EAAgB,EAAhBA,UACzB,OACE,6BACGtB,EAAKjG,KAAI,SAAC8H,EAAK5H,GACd,GAAIqH,IAAcrH,EAChB,OACE,yBAAK8H,IAAK9H,EAAOsG,OAAQe,IAAcrH,GACpC4H,EAAIhT,gB,sBC4BJ3H,GAnCGC,YAAW,CAC3BwZ,UAAW,CACTxR,MAAO,OACPC,QAAS,OACTE,WAAY,SACZD,eAAgB,iBAElB6S,oBAAqB,CACnB9S,QAAS,OACTE,WAAY,SACZD,eAAgB,iBAElB8S,KAAM,CACJvZ,YAAa,QAEfwZ,SAAU,CACR7a,OAAQ,oBACRD,gBAAiB,OACjBc,MAAO,UACPH,SAAU,OACVP,SAAU,OACVwH,OAAQ,OACRhH,WAAY,QAEdma,aAAc,CACZja,MAAO,UACPd,gBAAiB,OACjBC,OAAQ,GAEV+a,aAAc,CACZhb,gBAAiB,qBACjBc,MAAO,UCeIma,GAvCI,SAAC,GAAiC,IAA/BC,EAA8B,EAA9BA,OAAQC,EAAsB,EAAtBA,MAAUzT,EAAY,mCAC5CtF,EAAUxC,KADkC,EAEtCyC,cAALC,EAF2C,oBAIlD,OACE,yBAAKQ,UAAWV,EAAQiX,WACtB,kBAACnQ,EAAA,EAAD,CAAY1F,QAAQ,SACjBlB,EAAE,WADL,IACiB,2BAAI4Y,GADrB,IACkC5Y,EAAE,MADpC,IAC2C,2BAAI6Y,GAD/C,IAC2D7Y,EAAE,UAE7D,yBAAKQ,UAAWV,EAAQwY,uBACnBO,GACD,oCACE,kBAACjS,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQyY,MAC5CvY,EAAE,SAEL,kBAAC,KAAD,eACEkB,QAAQ,WACR4X,MAAM,UACNC,gBAAgB,EAChBC,gBAAgB,EAChBC,WAAY,SAAA3H,GAAI,OACd,kBAAC,KAAD,eACExR,QAAS,CACPc,KAAMd,EAAQ0Y,SACdU,SAAUpZ,EAAQ2Y,aAClB7C,SAAU9V,EAAQ4Y,eAEhBpH,MAGJlM,Q,wCCpClB+T,IAAOC,GAAGC,WAAW,OAEd,IACMC,GAAsB,CAAC,UAAW,aAIlCC,GAAgB,CAC3BC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,GAGMC,GACC,EADDA,GAED,EAFCA,GAGL,EAGKC,GAAa,CACxB,QACA,WACA,SACA,OACA,SACA,aAGWC,GAAY,CAAC,UAAW,YAAa,WAErCC,GAA6B,CACxCC,YAAa,CACXC,aAAc,OACdC,YAAa,GACbC,WAAY,IAEdC,gBAAiB,GACjBC,iBAAkB,CAChBC,aAAc,CACZC,UAAWvB,MACXwB,QAAS,MAEXC,KAAMrB,GACNsB,aAAc,EACdC,qBAAsB,QAExBC,qBAAsB,CACpBN,aAAc,CACZC,UAAWvB,MACXwB,QAAS,MAEXE,aAAc,EACdC,qBAAsB,UACtBE,UAAW,CACT,CACEra,GAAIsa,OACJL,KAAMrB,GACN2B,qBAAsB,CACpB,CACEC,UAAWhC,MACXiC,SAAU,KACVC,SAAU,aAMpBC,iBAAkB,CAChBb,aAAc,CACZC,UAAWvB,MACXwB,QAAS,OAGbY,gBAAiB,CACfX,KAAM,IAERY,gBAAiB,CACfZ,KAAM,IAERa,gBAAiB,CACfC,WAAY,CACV,CACEC,YAAa,QACbC,IAAK,IACLC,IAAK,IACLC,IAAK,OAIXC,wBAAyB,CACvBf,UAAW,IAEbgB,WAAY,CACVC,OAAQ,IAKVC,0BAA2B,CACzBC,sBAAuB,IAEzBC,gBAAiB,CACfC,aAAc,KAILC,GAAuB,CAClC,cACA,kBACA,CACEC,EAAG,mBACHC,EAAG,uBACHC,EAAG,oBAEL,CACEF,EAAG,CACDA,EAAG,kBACHC,EAAG,kBACHC,EAAG,mBAELD,EAAG,CACDD,EAAG,kBACHC,EAAG,0BACHC,EAAG,mBAELA,EAAG,CACDF,EAAG,kBACHC,EAAG,oBAGP,aACA,4BACA,mBAGWE,GAAyB,CACpCvC,YAAa,EACbI,gBAAiB,EACjBoC,aAAc,EACdC,WAAY,EACZZ,WAAY,EACZE,0BAA2B,EAC3BE,gBAAiB,GAINS,GAAkC,CAC7CrC,iBAAkB,EAClBO,qBAAsB,EACtBO,iBAAkB,GAGPwB,GAAgC,CAC3CP,EAAG,CACDhB,gBAAiB,EACjBC,gBAAiB,EACjBC,gBAAiB,GAEnBe,EAAG,CACDjB,gBAAiB,EACjBQ,wBAAyB,EACzBN,gBAAiB,GAEnBgB,EAAG,CACDlB,gBAAiB,EACjBE,gBAAiB,I,uCCzKfsB,GAAuB,0JAEvBC,GAAgB,8FAEhBC,GAAc,WAIPC,GAAU,SAAC9a,EAAO+a,GAC7B,OAAQJ,GAAqBhT,KAAK3H,IAAU+a,GAGjCC,GAAa,SAAChb,EAAO+a,GAChC,OAAc,IAAV/a,IACCA,GACGA,EAAMC,QAAU8a,EADLA,IAIRE,GAAW,SAACjb,EAAO+a,GAC9B,OAAc,IAAV/a,IACCA,GACG6a,GAAYlT,KAAK3H,EAAMkb,aAAeH,EAD3BA,IAIRI,GAA8B,SAACnb,EAAO+a,GACjD,OACGK,OAAOC,KAAKrb,GAAOsb,QAAO,SAAAC,GAAK,OAAIvb,EAAMub,MAAQtb,QAAU8a,GA+BnDS,GAAgB,SAACxb,EAAOC,EAAQ8a,GAC3C,OAAO/a,EAAMC,OAASA,GAAU8a,GAiBrBU,GAAkB,SAACzb,EAAO+a,GACrC,OAAQH,GAAcjT,KAAK3H,IAAU+a,GAO1BW,GAA2B,SAAC1b,EAAO+a,GAC9C,QAAK/a,EAAM2b,OACJ3b,EAAM2b,KAAKC,KAhFI,KAgFsBb,IAGjCc,GAA6B,SAAC7b,EAAO+a,GAChD,QAAK/a,EAAM2b,UACNP,OAAOC,KAAKrb,EAAM2b,MAAM1b,SAAWD,EAAM2b,KAAKhb,QAEjDX,EAAM2b,KAAKhb,KAAKmb,QAAQ,OAAS,GACjC9b,EAAM2b,KAAKhb,KAAKmb,QAAQ,QAAU,GAClC9b,EAAM2b,KAAKhb,KAAKmb,QAAQ,OAAS,GACjCf,KAISgB,GAAiB,SAACR,EAAOS,EAAOC,GAC3C,OAAOD,EAAMV,QAAO,SAAApM,GAAI,OAAIA,EAAK+M,KAAoBV,KAAOtb,OAAS,GAG1Dic,GAAqB,SAAAX,GAChC,QAAIA,EAAM/B,MAAO+B,EAAM/B,IAAIvZ,QAAwB,MAAdsb,EAAM/B,KAA6B,MAAd+B,EAAM/B,SAE5D+B,EAAM9B,MAAO8B,EAAM9B,IAAIxZ,QAAwB,MAAdsb,EAAM9B,KAA6B,MAAd8B,EAAM9B,QAE5D8B,EAAM7B,MAAO6B,EAAM7B,IAAIzZ,QAAwB,MAAdsb,EAAM7B,KAA6B,MAAd6B,EAAM7B,OCrDnDyC,GAlDE,SAAAC,GACf,IAAMpW,EAAS,GA8Cf,OA5CIoW,EAAOlE,WACL8C,GAAWoB,EAAOlE,WAAWrU,OAAS,IAAI,GAC5CmC,EAAOkS,WAAa,0BACXwD,GAAyBU,EAAOlE,YAAc,IAAI,GAC3DlS,EAAOkS,WAAa,oCACX2D,GAA2BO,EAAOlE,YAAc,IAAI,KAC7DlS,EAAOkS,WAAP,yHAGFlS,EAAOkS,WAAa,0BAGlB8C,GAAWoB,EAAO9f,OAAS,IAAI,KACjC0J,EAAO1J,MAAQ,qBAGb0e,GAAWoB,EAAOC,iBAAmB,IAAI,GAC3CrW,EAAOqW,gBAAkB,qCAChBpB,GAASmB,EAAOC,iBAAmB,IAAI,GAChDrW,EAAOqW,gBAAkB,4CAChBb,GAAcY,EAAOC,iBAAmB,GAAI,GAAG,KACxDrW,EAAOqW,gBACL,uDAGArB,GAAWoB,EAAOE,iBAAmB,IAAI,GAC3CtW,EAAOsW,gBAAkB,qCAChBrB,GAASmB,EAAOE,iBAAmB,IAAI,GAChDtW,EAAOsW,gBAAkB,4CAChBd,GAAcY,EAAOE,iBAAmB,GAAI,GAAG,GACxDtW,EAAOsW,gBACL,sDAEFF,EAAOC,iBACPvb,SAASsb,EAAOC,iBAAmBvb,SAASsb,EAAOE,mBAEnDtW,EAAOsW,gBACL,sEAGAtB,GAAWoB,EAAOG,eAAiB,IAAI,KACzCvW,EAAOuW,cAAgB,8BAGlBvW,GCrDI9K,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5Cia,QAAQ,aACNhZ,OAAQ,UACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BuH,QAAS,OACTG,cAAe,SACdD,WAAY,SACbD,eAAgB,SAChBtH,QAAS,WAGbO,MAAO,CACLD,OAAQ,YAEVmgB,YAAY,aACV7Y,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAE9BE,QAAS,oBACTuH,WAAY,gBAGhBmZ,IAAI,aACFrZ,QAAS,OACTC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfD,WAAY,gBAIhBoZ,OAAO,aACLvZ,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPG,WAAY,gBAKhBqZ,aAAa,aACXvZ,QAAS,OACTC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,sBAIZugB,kBAAkB,aAChBzZ,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,QAGX0Z,SAAS,aACP5gB,SAAU,OACVQ,UAAW,OACXL,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BuH,QAAS,SAGb0Z,WAAW,aACT3Z,MAAO,mBACPQ,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,kBACP9G,OAAQ,sBAGZ0gB,kBAAmB,CACjB3Z,QAAS,OACTpG,SAAU,YAEZggB,cAAe,CACbhgB,SAAU,WACVf,SAAU,OACVgB,IAAK,OACL6G,WAAY,OAEdmZ,oBAAoB,aAClB7Z,QAAS,OACTC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,WAGnB2Z,oBAAoB,aAClB/Z,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BiI,WAAY,MACZH,aAAc,SAGlBwZ,aAAc,CACZngB,SAAU,WACVmG,MAAO,QACPD,OAAQ,OACRzH,aAAc,MACdH,gBAAiB,WAEnB8hB,gBAAiB,CACfpgB,SAAU,WACVqgB,OAAQ,IACRngB,MAAO,IACP,UAAW,CACToP,OAAQ,WAEVrJ,WAAY,UACZC,OAAQ,QAIVoa,cAAc,CACZtgB,SAAU,WACVX,OAAQ,qB,8HClHCnB,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5CuZ,UAAU,aACRhR,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,SAGlB0R,QAAQ,aACNrY,SAAU,WACVmG,MAAO,OACP+F,UAAW,QACV9N,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BqN,UAAW,SAGf9D,MAAM,aACJhC,QAAS,QACTO,aAAc,EACdvH,MAAO,UACPiJ,cAAe,YACfpJ,SAAU,GACVC,WAAY,OACZoJ,cAAe,WACdlK,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,EACV0H,aAAc,IAGlB4Z,YAAY,aACVna,QAAS,OACTE,WAAY,WACZD,eAAgB,gBAChBM,aAAc,OACdvH,MAAO,UACPF,WAAY,OACZoJ,cAAe,WACdlK,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,SAGlB6Z,WAAW,aACTpa,QAAS,OACTiC,cAAe,QACdjK,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,WAGnBka,OAAO,aACL7gB,YAAa,OACbT,WAAY,KACXf,EAAMQ,YAAYC,KAAK,MAAQ,CAC9Be,YAAa,QAGjB8gB,gBAAgB,aACdta,QAAS,OACTE,WAAY,SACZhI,gBAAiB,UACjBC,OAAQ,oBACRE,aAAc,MACdD,UAAW,aACX2H,MAAO,OACPmJ,OAAQ,UACRrQ,SAAU,OACVC,WAAY,OACZH,QAAS,WACTiB,SAAU,WACV6H,OAAQ,IACR,UAAW,CACTtJ,OAAQ,sBAETH,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,OACVF,QAAS,WACToH,MAAO,SAGXwa,aAAa,aACX1hB,SAAU,OACVW,YAAa,MACbH,UAAW,QACVrB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,OACVW,YAAa,QAGjBghB,iBAAiB,aACfvhB,OAAQ,SACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,UAGZwhB,sBAAsB,aACpB7gB,SAAU,WACVC,IAAK,OACL6gB,KAAM,KACL1iB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BoB,IAAK,SAGT8gB,MAAO,CACLjhB,UAAW,uCACXvB,OAAQ,qBAEVyiB,WAAY,CACVziB,OAAQ,oBACRuB,UAAW,OACX,UAAW,CACTvB,OAAQ,sBAGZoK,MAAO,CACLlJ,UAAW,QAEbwhB,kBAAmB,CACjBjhB,SAAU,WACV6H,OAAQ,GAGVqZ,aAAc,GACdC,QAAS,CACP/hB,MAAO,WAETgiB,iBAAkB,CAChBhiB,MAAO,UACPd,gBAAiB,WAEnB+iB,aAAa,aACXjiB,MAAOhB,EAAMuB,OAAOP,MACpBH,SAAU,QACTb,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,SAIdqiB,YAAY,aACVhZ,cAAe,SACfD,cAAe,YACf5I,UAAW,OACXN,WAAY,OACZF,SAAU,OACVsiB,eAAgB,YAChBvhB,SAAU,WACV6H,OAAQ,EACR3H,MAAO,IACPmgB,OAAQ,IACRzgB,YAAa,OACb+G,aAAc,SACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,OACViB,MAAO,OACNN,YAAa,OACb+G,aAAc,UAInB6a,iBAAkB,CAChB,WAAY,CACV9a,QAAS,KACT1G,SAAU,WACVmG,MAAO,MACPD,OAAQ,OACRjG,IAAK,EACLogB,OAAQ,EACRpa,WAAY,UACZ4B,OAAQ,GAEV,UAAW,CACTA,OAAQ,EACR7H,SAAU,aAGdyhB,eAAgB,CACd,WAAY,CACVX,MAAO,EACPT,QAAS,IAGbqB,gBAAiB,CACf,WAAY,CACVxhB,OAAQ,EACRmgB,QAAS,QCtLFsB,GAAY,SAACC,EAAeC,GAAiB,IAAD,GAExC,OAAbD,QAAa,IAAbA,OAAA,EAAAA,EAAe3N,MAAK,gBAAG6N,EAAH,EAAGA,KAAH,OAClB/H,KAAO8H,GAAaE,OAAOD,EAAM,YAC9B,GAHCE,EAD+C,EAC/CA,uBAAwBC,EADuB,EACvBA,sBAKhC,MAAO,CACLC,aAAcF,GAA0BC,EACxCE,aAAcH,IAA2BC,IC8d9BG,GA/ce,SAAC,GAyBxB,IAxBL7gB,EAwBI,EAxBJA,GACA8gB,EAuBI,EAvBJA,uBACAzZ,EAsBI,EAtBJA,MACA0Z,EAqBI,EArBJA,cACAC,EAoBI,EApBJA,eACAX,EAmBI,EAnBJA,cACAY,EAkBI,EAlBJA,qBACApa,EAiBI,EAjBJA,MACAhH,EAgBI,EAhBJA,UACAqhB,EAeI,EAfJA,mBACAC,EAcI,EAdJA,aACAC,EAaI,EAbJA,qBACAC,EAYI,EAZJA,eACAC,EAWI,EAXJA,eACAC,EAUI,EAVJA,eACAC,EASI,EATJA,iBACAC,EAQI,EARJA,uBACAC,EAOI,EAPJA,QACAC,EAMI,EANJA,iBAMI,IALJ9Y,KAAQC,EAKJ,EALIA,QAAS1B,EAKb,EALaA,MAAO2B,EAKpB,EALoBA,aACxB6Y,EAII,EAJJA,OACAC,EAGI,EAHJA,cACAC,EAEI,EAFJA,WACAC,EACI,EADJA,mBAEM5iB,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAIE8S,EAJF,KAI0BnH,SAExBgP,EAAUgH,EAAiBA,EAAehH,QAAU,KACpDgI,EAAoBhI,EAAUxB,KAAOwB,GAASiI,IAAI,EAAG,QAAU,KAC/DC,EAAgB,oBAAgBliB,GAAMsa,KAAK,KAR7C,EAUsBtJ,IAAMrQ,SAASwgB,GAAgB,MAVrD,mBAUG3B,EAVH,KAUU2C,EAVV,OAW8CnR,IAAMrQ,UAAS,GAX7D,mBAWGyhB,EAXH,KAWuBC,EAXvB,OAY8CrR,IAAMrQ,SAAS,MAZ7D,mBAYG2hB,EAZH,KAYsBC,EAZtB,QAcwBvR,IAAMrQ,UAAS,GAdvC,qBAcG6D,GAdH,MAcWge,GAdX,SAekCxR,IAAMrQ,SAC1CmgB,GAA0BzZ,EAAM5F,MAAMsY,UAClC1S,EAAM5F,MAAMsY,UACZvB,QAlBF,qBAeGiK,GAfH,MAegBC,GAfhB,MAqBJ1R,IAAM+C,WAAU,WACdyO,IAAWhe,IACXme,YAAW,WACTH,GAAUhe,MACT,KACF,CAAC2N,IAEJ,IAAIyQ,GAAqCN,EAEnCO,GAAoBxb,EAAM5F,MAAMsY,UAChC+I,GAAkBzb,EAAM5F,MAAMuY,QAI9B+I,IAFgBC,cAAc,SAACnmB,GAAD,OAAWA,EAAMQ,YAAYC,KAAK,SAE9C,SAACyc,EAAWC,GAClCuI,EAAqB,MAEhB/J,KAAOuB,GAAWyG,OAAOqC,GAAmB,OAKjDxb,EAAM4B,SAAS,CAAE8Q,YAAWC,YAJ1B3S,EAAM4B,SAAS,CAAE8Q,YAAWC,QAAS,SA0EnCiJ,GAAe,SAAA1C,GACnB,GAAIF,GAjD8B,SAACA,EAAeE,GAClD,OAAOF,EAAc3N,MAAK,SAAA/B,GACxB,IAAMuS,EAAW1K,KAAO7H,EAAK4P,KAAM,cAC7B4C,EAAa3K,KAAO0K,GAAU1C,OAAOD,EAAM,OAEjD,GAAI4C,GAAcxS,EAAKyS,oBAAqB,OAAO,EAEnD,GAAIP,KAAsBC,GAAiB,CACzC,IAAMO,EAAoB7K,KAAO+H,GAAM+C,cAAcT,IAErD,IAAKlS,EAAK8P,wBAA0B0C,GAAcE,EAChD,OAAO,EAIX,GAAIF,EAAY,CAId,GAH4B9C,EAActD,QAAO,SAAApM,GAAI,OACnD6H,KAAO7H,EAAK4P,KAAM,cAAcC,OAAO0C,EAAU,UAE3BxhB,OAAS,EAC/B,OAAO,EAGT,WAAIsf,QAAJ,IAAIA,OAAJ,EAAIA,EAAgBjH,aAEhBvB,KAAO7H,EAAK4P,KAAM,cAAcC,OAC9BQ,EAAejH,UACf,QAEFvB,KAAO7H,EAAK4P,KAAM,cAAcC,OAC9BQ,EAAehH,QACf,QAEFxB,KAAO7H,EAAK4P,KAAM,cAAcC,OAAOhI,OAAU,QAEjD,OAAO,EAKb,OACG7H,EAAK+P,wBACL/P,EAAK8P,wBACN0C,KAOiBI,CAA4BlD,EAAeE,GAE5D,OAAO,EAIX,IAAKS,EAAgB,OAAO,EAE5B,GAAIA,EAAehH,SAAsC,SAA3BgH,EAAehH,SAQ3C,GAPkBxB,KAAO+H,GAAMiD,UAC7BxC,EAAejH,UACfiH,EAAehH,QACf,MACA,MAGa,CACb,IAAKgH,EAAeyC,WAAW/hB,OAAQ,OAAO,EAC9C,IAAMgiB,EAAYlL,KAAO+H,GAAMoD,OAAO,OACtC,OAAQ3C,EAAeyC,WAAWG,SAASF,SAQ7C,GALsBlL,KAAO+H,GAAM+C,cACjCtC,EAAejH,UACf,OAGiB,CACjB,IAAKiH,EAAeyC,WAAW/hB,OAAQ,OAAO,EAC9C,IAAMgiB,EAAYlL,KAAO+H,GAAMoD,OAAO,OACtC,OAAQ3C,EAAeyC,WAAWG,SAASF,GAI/C,OAAO,GArJL,GAwL0B1S,IAAMrQ,UAAS,GAxLzC,qBAwLGif,GAxLH,MAwLYiE,GAxLZ,SAoM0C7S,IAAMrQ,UAAS,GApMzD,qBAoMGmjB,GApMH,MAoMoBC,GApMpB,SAqM8C/S,IAAMrQ,SAAS,IArM7D,qBAqMGqjB,GArMH,MAqMsBC,GArMtB,MA2NJ,OApBAjT,IAAM+C,WAAU,WACd,IAAMgG,EAAYvB,KAAOiK,IAAayB,QAAQ,SACxClK,EAAUxB,KAAOiK,IACpBR,IAAI,EAAG,SACPkC,MAAM,SAEHC,EAAQ,GAKd,IAJkBnB,GAAalJ,IAEhBqK,EAAMhP,KAAK2E,EAAUsK,SAE7BtK,EAAUkI,IAAI,EAAG,QAAQqC,KAAKtK,GAAW,GAAG,CAC/BiJ,GAAalJ,IAChBqK,EAAMhP,KAAK2E,EAAUsK,SAGtCJ,GAAqBG,GACrBL,IAAmB,KAClB,CAAC/C,EAAgBX,EAAeoC,KAE9BqB,GAGH,yBAAKjkB,UAAWsG,KAAWhH,EAAQiX,UAAW8K,IAC5C,yBAAKrhB,UAAWsG,KAAWhH,EAAQ2X,QAASjX,IACzCshB,EACC,2BAAOthB,UAAWsG,KAAWhH,EAAQ6f,YAAa2C,IAChD,kBAAC1b,EAAA,EAAD,CACE1F,QAASkhB,GAAkD,MAE1DpiB,EAAEwH,IAGL,yBAAKhH,UAAWV,EAAQ8f,YACtB,kBAAChZ,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ+f,QAC5C7X,EAAM5F,QAAU+f,EAAhB,UAAsCniB,EAAE,kBAAxC,KAA0D,KAG7D,kBAAC4G,EAAA,EAAD,CAAY1F,QAAQ,SACjB8G,EAAM5F,OACL,oCACG4F,EAAM5F,MAAMsY,WACXvB,KAAOnR,EAAM5F,MAAMsY,WAChBwK,OAAOlY,GAAY8F,IACnBwR,OAAO,eAAgB,IAJ9B,SAKI,IACDtc,EAAM5F,MAAMuY,SACXxB,KAAOnR,EAAM5F,MAAMuY,SAChBuK,OAAOlY,GAAY8F,IACnBwR,OAAO,mBAOtB,2BAAO5b,QAASma,EAAkBriB,UAAWV,EAAQ0H,OAClDxH,EAAEwH,IAIP,2BACEkB,QAASma,EACTpiB,QAAS,kBAAMqiB,EAASD,IACxBriB,UAAWsG,KACThH,EAAQggB,gBADW,eAGhBhgB,EAAQqgB,MAAQA,GAHA,eAMhBrgB,EAAQsgB,YAAc3W,GAAWC,IAAiB3B,GAErDia,IAGF,kBAAC,KAAD,CAAexhB,UAAWV,EAAQigB,eACjC/X,EAAM5F,MAAMsY,UACXvB,KAAOnR,EAAM5F,MAAMsY,WAChBwK,OAAOlY,GAAY8F,IACnBwR,OAAO,eAEV,6BAAMtkB,EAAE,eAEV,0BAAMQ,UAAWV,EAAQkgB,kBAAzB,KACChY,EAAM5F,MAAMuY,QACXxB,KAAOnR,EAAM5F,MAAMuY,SAChBuK,OAAOlY,GAAY8F,IACnBwR,OAAO,eAEV,6BAAMtkB,EAAE,eAIV8hB,IAAiBrY,GAAWC,IAAiB3B,GAC7C,kBAACe,GAAA,EAAD,CAAgBtI,UAAWV,EAAQiI,MAAOA,OAAK,GAC3B,kBAAVA,EACJ/H,EAAE+H,EAAMod,KAAMpd,EAAM0L,WACpBzT,EAAE+H,IAIV,yBACEvH,UAAWsG,KACThH,EAAQmgB,sBACR8B,GAEFzZ,MAAO,CAAErB,OAAQ,KAEhB9B,IACC,kBAAC,mBAAD,CACEigB,gBAAiB,EACjBC,UAAU,EACVC,gBAAiB,6BAAM,IACvBC,UAAU,EACVC,YAAa3C,EACb4C,UAAU,UACVC,cAAc,cACdhL,UAAW1S,EAAM5F,MAAMsY,UACvBC,QAAS3S,EAAM5F,MAAMuY,QACrBgL,cAAe,YAA6B,IAA1BjL,EAAyB,EAAzBA,UAAWC,EAAc,EAAdA,QAC3B+I,GAAgBhJ,EAAWC,IAE7BiL,iBAnRoB,SAAA1E,GAC9BmC,GAAenC,GACf8B,GAAoB,GAChBpB,GAAsBA,EAAqBV,IAiRrC2E,iBA9QoB,SAAA3E,GAC9BmC,GAAenC,GACf,IAAM4E,EAAc3M,OACd4M,EAAmB5M,KAAO2M,GAAalD,IAAI,GAAI,KAE9BzJ,KAAO+H,GAC3B2D,QAAQ,SACR1D,OAAO4E,EAAiBlB,QAAQ,WAEf7B,GAAoB,GACpCpB,GAAsBA,EAAqBV,IAqQrCQ,cAAeA,EACfsE,QAASjD,EAAqB,6BAAM,IAAY,GAChDkD,aAAc9F,EACd+F,cAAe,SAAAD,GACbnD,EAASmD,GAAgBnE,GAAgB,OAE3CG,eAAgBA,EAChBkE,oBAAqB,kBAAM/C,IAC3BgD,aAAc,SAAAlF,GACZ,QAASyD,GAAkB0B,MAAK,SAAAC,GAC9B,IAAMC,EAAYD,EAAanF,OAAOD,EAAM,OAC5C,OAtL2B,SAACA,EAAMkF,GAChD,GAAI5C,KAAsBC,GAAiB,CACzC,GAAI2C,GAAgBjN,KAAO+H,GAAMsF,QAAQhD,GAAmB,OAAQ,CAClE,GACEb,GACAxJ,KAAO+H,GAAM+C,cAActB,EAAmB,OAE9C,OAAOyD,EAET,IAAMK,EAAwBlD,GAC1BpK,KAAOoK,IAAoCpC,OAAOD,EAAM,OACxD,KAKJ,OAJKqC,IAAuCkD,IAC1ClD,GAAqCrC,EACrCgC,EAAqBhC,KAEhB,EAGT,GACEqC,IACApK,KAAO+H,GAAM+C,cAAcV,GAAoC,OAE/D,OAAO,OAEAA,IACTL,EAAqB,MAGvB,OAAOkD,EAyJcM,CAAmCxF,EAAMqF,OAGpDrE,eAAgBA,GAAkC,EAClDG,QAASA,GAAoB,GAG7BsE,mBAAoB,gBAAGC,EAAH,EAAGA,MAAH,OAClBzN,KAAOyN,GACJ1B,OAAOlY,GAAY8F,IACnBwR,OAAO,cAEZuC,kBAAmB,SAAAC,GAAQ,IAAD,EAEtBA,EAAIC,QAAQC,aADW,WAArBlU,EACyB,CACzB,QACA,KACA,KACA,KACA,KACA,KACA,SAGyB,CACzB,KACA,KACA,KACA,KACA,KACA,KACA,MAnBoB,MAuBciO,GACpCC,EACA8F,GAFMxF,EAvBgB,EAuBhBA,YAAaC,EAvBG,EAuBHA,aAKrB,OACE,yBACE/gB,UAAWsG,MAAU,mBAClBhH,EAAQ8gB,iBAAmBU,GAAeC,GADxB,cAElBzhB,EAAQ+gB,eAAiBS,GAFP,cAGlBxhB,EAAQghB,gBAAkBS,GAHR,KAMrB,6BAAMuF,EAAIxC,OAAO,QAIvB2C,4BAA4B,IAG/BnF,GAAgB9Z,EAAM5F,MAAMsY,WAC3B,kBAACzZ,EAAA,EAAD,CACET,UAAWV,EAAQ4gB,YACnBjgB,QAAS,WAxMnBijB,GAAgB,KAAM,MACtBZ,EAAShB,GAAgB,QAqMjB,eAUHA,IAAiBrY,GAAWC,IAAiB3B,GAC5C,kBAACe,GAAA,EAAD,CAAgBtI,UAAWV,EAAQugB,kBAAmBtY,OAAK,GACvC,kBAAVA,EACJ/H,EAAE+H,EAAMod,KAAMpd,EAAM0L,WACpBzT,EAAE+H,MAKVwa,IAAWC,IAAkBC,IAAeC,GAC5C,kBAACwE,GAAA,EAAD,CAAW3R,aAAW,YACpB,kBAAC4R,GAAA,EAAD,CACE3f,MAAOxH,EAAE,0BACTonB,eAAe,MACfC,QACE,kBAACC,GAAA,EAAD,CACEC,KACE,kBAAC,KAAD,CAA0B/mB,UAAWV,EAAQ2gB,eAE/C+G,YAAa,kBAAC,KAAD,CAAchnB,UAAWV,EAAQ2gB,eAC9CF,SAAUvY,EAAM5F,MAAMuY,QACtB/Q,SA3OgB,WAC5B4a,IAAYjE,IACZvY,EAAM4B,SAAS,CAAE8Q,UAAWvB,OAAUwB,QAAS,QA0OnChS,UAAWX,EAAM5F,MAAMuY,QACvBnc,MAAM,UACNsB,QAAS,CACPc,KAAMd,EAAQwgB,aACdC,QAASzgB,EAAQygB,QACjB5X,SAAU7I,EAAQ0gB,wBAhNL,M,qBC3QlBljB,GAAYC,aAAW,SAAAC,GAAK,MAAG,CAC1Cia,QAAQ,aACNjS,QAAS,OACTC,eAAgB,WAChByJ,aAAa,QACZ1R,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BwH,eAAgB,WAIpB3G,cAAe,CACbnB,OAAQ,oBACRE,aAAc,MACdQ,SAAU,OACVC,WAAY,OACZC,WAAY,IACZC,MAAO,UACPL,QAAS,WACTL,SAAU,OACVkB,YAAa,QAEfC,cAAe,CACbC,UAAW,OACXvB,OAAQ,oBACRE,aAAc,MACdH,gBAAiB,UACjBc,MAAO,UACPH,SAAU,OACVC,WAAY,OACZC,WAAY,IACZJ,QAAS,WACTL,SAAU,OACV,UAAW,CACTJ,gBAAiB,UACjBc,MAAO,YAGXipB,kBAAmB,CACjBC,YAAa,oBAEfC,WAAY,CACV3oB,YAAa,Y,qBCzCX4oB,GAAmB,SAAC7C,EAAO8C,GAAkB,IAAD,MAC5CC,EAAW,iBAAG/C,QAAH,IAAGA,OAAH,YAAGA,EAAOgD,sBAAV,uBAAG,EAAwB,UAA3B,aAAG,EAA4BD,mBAA/B,QAA8C,GAc7D,OAZID,IACFC,EAAcA,EAAYpK,QAAO,SAAApM,GAE/B,OADa6H,KAAO7H,EAAK4P,KAAM,cAClBiD,UACX0D,EAAanN,UACbmN,EAAalN,QACb,MACA,UAKCmN,GAGF,SAASE,GAAStN,EAAWC,GAKlC,IAL2D,IAAhB5X,EAAe,uDAAR,OAC9CklB,EAAW9O,KAAOuB,GAClBwN,EAAS/O,KAAOwB,GAChBsK,EAAOiD,EAAOjD,KAAKgD,EAAUllB,GAC7BolB,EAAQ,GACHC,EAAI,EAAGA,GAAKnD,EAAMmD,IACzBD,EAAMpS,KAAKoD,KAAOuB,GAAWkI,IAAIwF,EAAGrlB,IAEtC,OAAOolB,EAGT,IAAME,GAAyB,SAAAC,GAAa,sBAAK,CAC/C5N,UAAS,iBAAE4N,QAAF,IAAEA,OAAF,YAAEA,EAAenO,mBAAjB,uBAAE,EAA4BM,oBAA9B,aAAE,EAA0CC,iBAA5C,QAAyD,KAClEC,QAAO,iBAAE2N,QAAF,IAAEA,OAAF,YAAEA,EAAenO,mBAAjB,uBAAE,EAA4BM,oBAA9B,aAAE,EAA0CE,eAA5C,QAAuD,KAC9DyJ,WAAY,K,m9BCtBd,IAAMmE,GAAUC,KAAOC,IAAV,MAOPC,GAAQF,KAAOhhB,MAAV,MAWLmhB,GAAUH,KAAOC,IAAV,MAmBPG,GAAoBJ,KAAOC,IAAV,MAKjBI,GAAmBL,KAAOC,IAAV,MA6HPK,GArHc,SAAC,GAIvB,IAAD,IAHJ9gB,MAAS5F,EAGL,EAHKA,MAAOwH,EAGZ,EAHYA,SAChBpC,EAEI,EAFJA,MACAuhB,EACI,EADJA,UAEMC,EAAgB1rB,KAChBsE,EAAU+P,IAAMsX,WAAW/mB,GAF7B,EAIoCZ,mBAAS,IAJ7C,mBAIG4nB,EAJH,KAIgBC,EAJhB,KAMJzU,qBAAU,WACRyU,EACEC,MAAMC,QAAQjnB,KAAd,OAAwBA,QAAxB,IAAwBA,OAAxB,EAAwBA,EAAOC,QAC3BD,EACA,CAAC,CAAEzB,GAAI,UAAYsa,KAAK,SAE7B,CAAC7Y,IAEJ,IAAMknB,EAAmB,SAAA3oB,GAAE,OAAI,SAAA4oB,GAC7B3f,EACEsf,EAAY/Y,KAAI,SAAA+Q,GAAI,OAAKvgB,IAAOugB,EAAKvgB,GAAZ,eAAsBugB,EAAtB,GAA+BqI,GAAYrI,QAQlEsI,EAAwB,SAAC,GAAD,IAAG7oB,EAAH,EAAGA,GAAI+Z,EAAP,EAAOA,UAAWC,EAAlB,EAAkBA,QAAlB,OAAgC,WAC5D/Y,EAAQ,CACNlD,MAAO,4BACPuB,YACEya,GAAaC,EAAb,UACOD,GACDvB,KAAOuB,GAAW4J,OAAO,iBAF/B,cAEqD3J,GAC/CxB,KAAOwB,GAAS2J,OAAO,uBACzBmF,EACNrpB,iBAAkB,OAClBD,iBAAkB,WAEjBuT,MAAK,WACJ9J,EACEsf,EAAY/Y,KAAI,SAAA+Q,GAAI,OAClBA,EAAKvgB,KAAOA,EAAZ,eAAsBugB,EAAtB,CAA4BwI,YAAY,IAASxI,SAItDyI,OAAM,iBAsBLC,EAAcV,EAAYxL,QAAO,qBAAGgM,cAE1C,OACE,kBAACnB,GAAD,KACE,kBAACG,GAAD,KAAQlhB,GAER,kBAACmhB,GAAD,KACGiB,EAAYzZ,KAAI,gBA1BG0Z,EA0BAlpB,EAAH,EAAGA,GAAOmpB,EAAV,8BACf,kBAAClB,GAAD,CAAmBzQ,IAAKxX,GACtB,kBAAC,GAAD,CACEA,GAAIA,EACJqH,MAAO,CAAE5F,MAAO0nB,EAAWlgB,SAAU0f,EAAiB3oB,IACtD6I,KAAM,CAAEC,SAAS,EAAM1B,OAAO,EAAO2B,cAAc,GACnDgZ,oBAAkB,EAClBb,mBAAoB/hB,KAAQ+hB,mBAC5BrhB,UAAWV,KAAQiqB,iBACnB/H,eAAgBliB,KAAQkqB,YACxBhJ,eApCc6I,EAoCmBlpB,EApCV,OACjCuoB,QADiC,IACjCA,OADiC,EACjCA,EACIe,QAAO,SAACC,EAAD,GAAkD,IAA1CvpB,EAAyC,EAAzCA,GAAI+Z,EAAqC,EAArCA,UAAWC,EAA0B,EAA1BA,QAAS+O,EAAiB,EAAjBA,WACvC,OAAIhP,GAAaC,IAAY+O,GAAc/oB,IAAOkpB,EAC1C,GAAN,mBACKK,GADL,YAEKlC,GAAStN,EAAWvB,KAAOwB,IAAUxK,KAAI,SAAA+Q,GAAI,MAAK,CACnDA,aAKCgJ,IACN,IACFjnB,QACU,OAAT8lB,QAAS,IAATA,OAAA,EAAAA,EAAWrL,QAAO,qBAAGqG,yBACnB,OAuBE,kBAAC8E,GAAD,KACE,kBAACtoB,EAAA,EAAD,CACE+H,MAAO,CAAEnK,QAAS,GAClBsC,QAAS+oB,EAAsB,aAAE7oB,MAAOmpB,KAExC,kBAAC,KAAD,YAMR,kBAAC7oB,EAAA,EAAD,CACEC,QAAQ,WACRpB,QAAS,CACPc,KAAMooB,EAAclqB,cACpB6J,SAAUqgB,EAAcmB,mBAE1BxhB,SAAUihB,EAAYvnB,QAAU,GAChC5B,QAnFmB,WACzBmJ,EAAS,GAAD,mBAAKsf,GAAL,CAAkB,CAAEvoB,GAAI,UAAYsa,KAAK,SAmF3C3S,MAAO,CAAEzJ,UAAW,IARtB,UCAOurB,gBAAU,CACvBnmB,KAAM,cACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,cA7IoB,CACpBpQ,aAAc,OACdC,YAAa,KAqIA+P,EAlIO,SAAC,GAMhB,IALLK,EAKI,EALJA,aACAC,EAII,EAJJA,SACAC,EAGI,EAHJA,gBACA5B,EAEI,EAFJA,UACGxgB,EACC,0EAEFqiB,EAKEriB,EALFqiB,UACA9X,EAIEvK,EAJFuK,iBACA+X,EAGEtiB,EAHFsiB,YACAC,EAEEviB,EAFFuiB,eACAC,EACExiB,EADFwiB,eANE,EAQQhrB,cAALC,EARH,oBAUEF,EAAUxC,KACV0tB,EAAqB,YAAI1R,IAAqBoE,QAClD,SAAAuN,GAAC,OAAKL,EAAUrG,SAAS0G,MAG3B,OACE,yBAAKzqB,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,YAEL,kBAAC,GAAD,CACEkrB,eAAgBF,EAChBG,0BAA2B,CVvDH,WUwDxBC,KAAMR,EACN5a,aAAc8C,EACduY,QAASR,EACTS,WAAYR,EACZS,WAAYR,IAEd,0BAAMS,SAAUf,GACd,yBAAKjqB,UAAWV,EAAQ+e,KACtB,yBAAKre,UAAWV,EAAQgf,QACtB,kBAAC2M,GAAA,EAAD,CACEjrB,UAAWV,EAAQ8e,YACnBxG,KAAK,aACL5Q,MAAM,gBACNvC,UAAWymB,MAGf,yBAAKlrB,UAAWV,EAAQgf,QACtB,kBAAC2M,GAAA,EAAD,CACErT,KAAK,QACL7O,YAAY,QACZ/I,UAAWV,EAAQ8e,YACnBpX,MAAM,UACNvC,UAAW8D,KAEZ2hB,GACC,kBAACe,GAAA,EAAD,CACErT,KAAK,cACLzP,UAAQ,EACRY,YAAY,eACZ/I,UAAWV,EAAQ8e,YACnBpX,MAAM,eACNvC,UAAW8D,KAGf,yBAAKvI,UAAWV,EAAQuf,qBACtB,kBAACoM,GAAA,EAAD,CACErT,KAAK,eACL5Q,MAAO,gBACP4jB,KAAM,CAAC,OAAQ,WACfnmB,UAAW0mB,KAGb,kBAAC,GAAD,CAAgBxG,KAAK,2BACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,eAMrC,yBAAKze,UAAWV,EAAQ+e,KACtB,yBAAKre,UAAWV,EAAQgf,QACtB,kBAAC2M,GAAA,EAAD,CACErT,KAAK,kBACLlP,cAAc,EACdD,UAAW,EACXM,YAAY,yBACZ/I,UAAWV,EAAQ8e,YACnBpX,MAAM,gCACNvC,UAAW8D,MAGf,yBAAKvI,UAAWV,EAAQgf,QACtB,kBAAC2M,GAAA,EAAD,CACErT,KAAK,kBACLlP,cAAc,EACdD,UAAW,EACXM,YAAY,yBACZ/I,UAAWV,EAAQ8e,YACnBpX,MAAM,gCACNvC,UAAW8D,OAIjB,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,gBACL7O,YAAY,iBACZ/I,UAAWV,EAAQ8e,YACnBpX,MAAM,mBACNvC,UAAW8D,KAGb,yBAAKvI,UAAWV,EAAQ+e,IAAKvW,MAAO,CAAEvC,aAAc,KAClD,kBAAC0lB,GAAA,EAAD,CACErT,KAAK,mBACL5Q,MAAM,mBACNvC,UAAW6jB,GACXC,UAAWA,KAIf,kBAAC,GAAD,CACE6C,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,S,qBChHLnM,GApCE,SAAAC,GACf,IAAMpW,EAAS,GAgCf,OA9BIoW,EAAOlE,WACL8C,GAAWoB,EAAOlE,WAAWrU,OAAS,IAAI,GAC5CmC,EAAOkS,WAAa,0BACXwD,GAAyBU,EAAOlE,YAAc,IAAI,GAC3DlS,EAAOkS,WAAa,oCACX2D,GAA2BO,EAAOlE,YAAc,IAAI,KAC7DlS,EAAOkS,WAAP,yHAGFlS,EAAOkS,WAAa,0BAGlB8C,GAAWoB,EAAO9f,OAAS,IAAI,KACjC0J,EAAO1J,MAAQ,qBAGb2e,GAASmB,EAAOsN,QAAQ,KAC1B1jB,EAAO0jB,OAAS,uBAGd1O,GAAWoB,EAAO3I,UAAY,IAAI,KACpCzN,EAAOyN,SAAW,wBAGhBuH,GAAW,GAAD,OAAIoB,EAAOuN,WAAa,KAAM,GAC1C3jB,EAAO2jB,UAAY,sBACVvN,EAAOuN,UAAY,IAC5B3jB,EAAO2jB,UAAY,mBAGd3jB,GCiNMgiB,gBAAU,CACvBnmB,KAAM,cACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,cA9NoB,CACpBnQ,YAAa,GACb7b,MAAO,KAsNM4rB,EAnNoB,SAAC,GAQ7B,IAPLK,EAOI,EAPJA,aACAC,EAMI,EANJA,SACAC,EAKI,EALJA,gBACA5B,EAII,EAJJA,UACAiD,EAGI,EAHJA,aACAxtB,EAEI,EAFJA,MACG+J,EACC,iGAEFqiB,EAKEriB,EALFqiB,UACA9X,EAIEvK,EAJFuK,iBACA+X,EAGEtiB,EAHFsiB,YACAC,EAEEviB,EAFFuiB,eACAC,EACExiB,EADFwiB,eANE,EAQQhrB,cAALC,EARH,oBAUEF,EAAUxC,KACV0tB,EAAqB,YAAI1R,IAAqBoE,QAClD,SAAAuN,GAAC,OAAKL,EAAUrG,SAAS0G,MAZvB,EAc0CtZ,IAAMrQ,UAAS,GAdzD,mBAcG2qB,EAdH,KAcoBC,EAdpB,KAgBJ,OACE,yBAAK1rB,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,YAEL,kBAAC,GAAD,CACEkrB,eAAgBF,EAChBG,0BAA2B,CZhEH,WYiExBC,KAAMR,EACN5a,aAAc8C,EACduY,QAASR,EACTS,WAAYR,EACZS,WAAYR,IAEd,0BAAMS,SAAUf,GACd,yBAAKjqB,UAAWV,EAAQ+e,KACtB,yBAAKre,UAAWV,EAAQgf,QACtB,kBAAC2M,GAAA,EAAD,CACEjrB,UAAWV,EAAQ8e,YACnBxG,KAAK,aACL5Q,MAAM,gBACNvC,UAAWymB,MAGf,yBAAKlrB,UAAWV,EAAQgf,QACtB,kBAAC2M,GAAA,EAAD,CACErT,KAAK,QACL7O,YAAY,QACZ/I,UAAWV,EAAQ8e,YACnBpX,MAAM,UACNvC,UAAW8D,KAEZ2hB,GACC,kBAACe,GAAA,EAAD,CACErT,KAAK,cACLzP,UAAQ,EACRY,YAAY,eACZ/I,UAAWV,EAAQ8e,YACnBpX,MAAM,eACNvC,UAAW8D,KAGf,kBAAC0iB,GAAA,EAAD,CACEviB,cAAc,EACdD,UAAW,EACXmP,KAAK,SACL7O,YAAY,SACZ/B,MAAM,WACNhH,UAAWV,EAAQ8e,YACnB3Z,UAAW8D,OAIjB,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,WACL7O,YAAY,WACZ/B,MAAM,aACNhH,UAAWV,EAAQ8e,YACnB3Z,UAAW8D,KAGb,yBAAKvI,UAAWV,EAAQ+e,KACtB,yBAAKre,UAAWsG,KAAWhH,EAAQgf,OAAQhf,EAAQif,eACjD,yBAAKve,UAAWV,EAAQkf,mBACtB,kBAACyM,GAAA,EAAD,CACErT,KAAK,eACL5Q,MAAM,eACNvC,UAAWuc,MAIf,kBAAC,GAAD,CAAgB2D,KAAK,mFACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAIjC,yBAAKze,UAAWsG,KAAWhH,EAAQgf,OAAQhf,EAAQif,eACjD,kBAAC0M,GAAA,EAAD,CACErT,KAAK,eACL5Q,MAAM,mBACNwB,kBAAkB,EAClBxI,UAAWV,EAAQof,WACnBja,UAAWknB,KAGb,kBAACV,GAAA,EAAD,CACErT,KAAK,iBACL5Q,MAAM,qBACNwB,kBAAkB,EAClBxI,UAAWV,EAAQof,WACnBja,UAAWknB,OAKjB,yBAAK3rB,UAAWV,EAAQif,aAAczW,MAAO,CAAEvC,aAAc,KAC3D,kBAAC0lB,GAAA,EAAD,CACErT,KAAK,mBACL5Q,MAAM,mBACNvC,UAAW6jB,GACXC,UAAWA,KAIf,kBAAC0C,GAAA,EAAD,CACErT,KAAK,aACLzX,GAAG,aACHH,UAAWV,EAAQ8e,YACnBpX,MACE,yBAAKhH,UAAWV,EAAQqf,mBACtB,8BAAOnf,EAAEiK,GAAa6I,GAAkBnI,aACxC,kBAAC,GAAD,CACEwa,KAAI,UAAKnlB,EACPiK,GAAa6I,GAAkB7H,uBAGjC,kBAAC,KAAD,CAAUzK,UAAWV,EAAQsf,kBAInC7V,YAAW,2BACXN,UAAU,MACVhE,UAAWmnB,KAGb,yBAAK5rB,UAAWV,EAAQ+e,KACtB,yBAAKre,UAAWV,EAAQgf,QACtB,kBAAC2M,GAAA,EAAD,CACErT,KAAK,YACLlP,cAAc,EACdD,UAAW,EACXM,YAAY,mBACZ/I,UAAWV,EAAQ8e,YACnBpX,MAAM,0BACNvC,UAAW8D,MAGf,yBAAKvI,UAAWsG,KAAWhH,EAAQgf,OAAQhf,EAAQif,eACjD,yBAAKve,UAAWV,EAAQwf,qBACtB,kBAAC1Y,EAAA,EAAD,CACE1F,QAAQ,KACRoH,MAAO,CACLvC,aAAc,MACd0B,cAAe,cAGhBzH,EAAE,wBAEL,yBACEQ,UAAWV,EAAQyf,aACnBjX,MAAO,CAAE5K,gBAAiBc,IAE1B,yBACEiC,QAAS,kBAAMyrB,GAAmB,IAClC1rB,UAAWV,EAAQ0f,iBAEnB,kBAAC,KAAD,CAAUhf,UAAWV,EAAQusB,YAE9BJ,GACC,kBAACR,GAAA,EAAD,CACErT,KAAK,QACLzY,QAASusB,EACTI,aAAc9tB,EACdoL,SAAUoiB,EACV/mB,UAAWsnB,OAKnB,yBAAK/rB,UAAWsG,KAAWhH,EAAQgf,SACjC,kBAAC,GAAD,CAAgBqG,KAAK,2GACjB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQ4f,oBAKvC,kBAAC,GAAD,CACEkM,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,SCnOLnM,GAVE,SAAAC,GACf,IAAMpW,EAAS,GAMf,OAJIgV,GAAWoB,EAAM,OAAa,IAAI,KACpCpW,EAAM,MAAY6B,GAAY,UAAkBY,iBAG3CzC,GC8DMgiB,gBAAU,CACvBnmB,KAAK,cACLomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,aALa6L,EAxDqB,SAAC,GAO/B,EANJoC,KAMI,EALJhB,SAKK,IAJLf,EAII,EAJJA,aACAE,EAGI,EAHJA,gBACAD,EAEI,EAFJA,SACGniB,EACC,gFAEFqiB,EAKEriB,EALFqiB,UACA9X,EAIEvK,EAJFuK,iBACA+X,EAGEtiB,EAHFsiB,YACAC,EAEEviB,EAFFuiB,eACAC,EACExiB,EADFwiB,eANE,EAQQhrB,cAALC,EARH,oBAUEF,EAAUxC,KACV0tB,EAAqB,YAAI1R,IAAqBoE,QAClD,SAAAuN,GAAC,OAAKL,EAAUrG,SAAS0G,MAG3B,OACE,yBAAKzqB,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,YAEL,kBAAC,GAAD,CACEkrB,eAAgBF,EAChBG,0BAA2B,Cd1CH,Wc2CxBC,KAAMR,EACN5a,aAAc8C,EACduY,QAASR,EACTS,WAAYR,EACZS,WAAYR,IAEd,0BAAMS,SAAUf,GACd,kBAACgB,GAAA,EAAD,CACErT,KAAI,QACJzO,WAAY,CAAEV,UAAW,KACzBzB,MAAK,UAAKyC,GAAa6I,GAAkBpU,MAApC,MACL6K,YAAW,UAAKU,GAAa6I,GAAkBpU,OAC/C8B,UAAWV,EAAQ8e,YACnB3Z,UAAW8D,KAEb,kBAAC,GAAD,CACE6iB,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,SCpDLnM,GAVE,SAAAC,GACf,IAAMpW,EAAS,GAMf,OAJIgV,GAAWoB,EAAM,OAAa,IAAI,KACpCpW,EAAM,MAAY6B,GAAY,UAAkBY,iBAG3CzC,GCuFMgiB,gBAAU,CACvBnmB,KAAK,cACLomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,aALa6L,EA1EkC,SAAC,GAO5C,EANJoC,KAMI,EALJhB,SAKK,IAJLf,EAII,EAJJA,aACAE,EAGI,EAHJA,gBACAD,EAEI,EAFJA,SACGniB,EACC,gFAEFqiB,EAKEriB,EALFqiB,UACA9X,EAIEvK,EAJFuK,iBACA+X,EAGEtiB,EAHFsiB,YACAC,EAEEviB,EAFFuiB,eACAC,EACExiB,EADFwiB,eANE,EAQQhrB,cAALC,EARH,oBAUEF,EAAUxC,KACV0tB,EAAqB,YAAI1R,IAAqBoE,QAClD,SAAAuN,GAAC,OAAKL,EAAUrG,SAAS0G,MAG3B,OACE,yBAAKzqB,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,YAEL,kBAAC,GAAD,CACEkrB,eAAgBF,EAChBG,0BAA2B,ChBjDH,WgBkDxBC,KAAMR,EACN5a,aAAc8C,EACduY,QAASR,EACTS,WAAYR,EACZS,WAAYR,IAEd,0BAAMS,SAAUf,GACd,kBAACgB,GAAA,EAAD,CACErT,KAAI,QACJzO,WAAY,CAAEV,UAAW,KACzBzB,MAAK,UAAKyC,GAAa6I,GAAkBpU,MAApC,MACL6K,YAAW,UAAKU,GAAa6I,GAAkBpU,OAC/C8B,UAAWV,EAAQ8e,YACnB3Z,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,aACLzX,GAAG,aACHH,UAAWV,EAAQ8e,YACnBpX,MACE,yBAAKhH,UAAWV,EAAQqf,mBACtB,8BAAOlV,GAAa6I,GAAkBnI,YACtC,kBAAC,GAAD,CACEwa,KAAI,UAAKlb,GAAa6I,GAAkB7H,sBAExC,kBAAC,KAAD,CAAUzK,UAAWV,EAAQsf,kBAInC7V,YAAW,4CACXN,UAAU,MACVhE,UAAWmnB,KAEb,kBAAC,GAAD,CACER,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,SC5ELnM,GAdE,SAAAC,GACf,IAAMpW,EAAS,GAUf,OARIgV,GAAWoB,EAAM,UAAgB,IAAI,KACvCpW,EAAM,SAAe,sBAGnBgV,GAAWoB,EAAM,cAAoB,IAAI,KAC3CpW,EAAM,aAAmB,0BAGpBA,GCXI9K,GAAYC,aAAW,SAAAC,GAAK,MAAI,CAC3Cia,QAAQ,aACNhZ,OAAQ,UACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAO,uBAGXC,MAAM,aACJD,OAAQ,YACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BuH,QAAS,OACTG,cAAe,SACdD,WAAY,SACbD,eAAgB,WAGpBmZ,YAAY,aACV7Y,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAE9BE,QAAS,oBACTuH,WAAY,gBAGhByZ,kBAAmB,CACjB3Z,QAAS,OACTpG,SAAU,YAEZ6f,SAAU,CACR7f,SAAU,WACVf,SAAU,OACVgB,IAAK,OACL6G,WAAY,WCmIDkkB,gBAAU,CACvBnmB,KAAM,kBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,aALa6L,EA9IW,SAAC,GAKpB,IAJLK,EAII,EAJJA,aACAE,EAGI,EAHJA,gBACAD,EAEI,EAFJA,SACGniB,EACC,8DAEFqiB,EAKEriB,EALFqiB,UACA9X,EAIEvK,EAJFuK,iBACA+X,EAGEtiB,EAHFsiB,YACAC,EAEEviB,EAFFuiB,eACAC,EACExiB,EADFwiB,eANE,EAQQhrB,cAALC,EARH,oBAUEF,EAAUxC,KAEhB,OACE,yBAAKkD,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,gBAEL,kBAAC,GAAD,CACEkrB,eAAgB,GAChBC,0BAA2B,CnB1CH,WmB2CxBC,KAAMR,EACN5a,aAAc8C,EACduY,QAASR,EACTS,WAAYR,EACZS,WAAYR,IAEd,0BAAMS,SAAUf,GACd,kBAACgB,GAAA,EAAD,CACErT,KAAI,WACJ5X,UAAWV,EAAQ8e,YACnBpX,MAAK,UAAKyC,GAAa6I,GAAkBzI,YAApC,MACLd,YAAW,UAAKU,GAAa6I,GAAkBzI,aAC/CpB,UAAU,OACVhE,UAAWwG,GACXC,kBAAkB,EAClBC,SAAUmH,IAEZ,kBAAC2Y,GAAA,EAAD,CACErT,KAAI,cACJzX,GAAI,cACJH,UAAWV,EAAQ8e,YACnBpX,MACE,yBAAKhH,UAAWV,EAAQqf,mBACtB,8BAAOnf,EAAEiK,GAAa6I,GAAkBxI,cACxC,kBAAC,GAAD,CACE6a,KAAI,UAAKlb,GAAa6I,GAAkB7H,sBAExC,kBAAC,KAAD,CAAUzK,UAAWV,EAAQmf,aAInC1V,YACEU,GAAa6I,GAAkB,4BAEjC7J,UAAU,OACVhE,UAAWmnB,KAEb,kBAACX,GAAA,EAAD,CACErT,KAAI,iBACJ5X,UAAWV,EAAQ8e,YACnBpX,MAAK,UAAKyC,GAAa6I,GAAkBvI,gBACzChB,YAAW,UAAKU,GAAa6I,GAAkBvI,gBAC/CtB,UAAU,OACVhE,UAAWwG,GACXC,kBAAkB,EAClBC,SAAUmH,IAEZ,kBAAC2Y,GAAA,EAAD,CACErT,KAAI,eACJ5X,UAAWV,EAAQ8e,YACnBpX,MACE,yBAAKhH,UAAWV,EAAQqf,mBACtB,8BAAOnf,EAAEiK,GAAa6I,GAAkBtI,cAAxC,MACA,kBAAC,GAAD,CACE2a,KAAI,UAAKlb,GAAa6I,GAAkB9H,0BAExC,kBAAC,KAAD,CAAUxK,UAAWV,EAAQmf,aAInC1V,YAAW,UAAKU,GAAa6I,GAAkBtI,cAC/CvB,UAAU,OACVhE,UAAWwG,GACXC,kBAAkB,EAClBC,SAAUmH,IAEZ,kBAAC2Y,GAAA,EAAD,CACErT,KAAI,WACJzX,GAAI,WACJH,UAAWV,EAAQ8e,YACnBpX,MACE,yBAAKhH,UAAWV,EAAQqf,mBACtB,8BAAOnf,EAAEiK,GAAa6I,GAAkBrI,WACxC,kBAAC,GAAD,CACE0a,KAAI,UAAKlb,GAAa6I,GAAkB7H,sBAExC,kBAAC,KAAD,CAAUzK,UAAWV,EAAQmf,aAInC1V,YACEU,GAAa6I,GAAkB,4BAEjC7J,UAAU,OACVhE,UAAWmnB,KAEb,kBAACX,GAAA,EAAD,CACErT,KAAI,cACJzX,GAAI,cACJH,UAAWV,EAAQ8e,YACnBpX,MACE,yBAAKhH,UAAWV,EAAQqf,mBACtB,8BAAOnf,EAAEiK,GAAa6I,GAAkBpI,cACxC,kBAAC,GAAD,CACEya,KAAI,UAAKlb,GAAa6I,GAAkB7H,sBAExC,kBAAC,KAAD,CAAUzK,UAAWV,EAAQmf,aAInC1V,YACEU,GAAa6I,GAAkB,4BAEjC7J,UAAU,OACVhE,UAAWmnB,KAEb,kBAAC,GAAD,CACER,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,SC7ILnM,GAfE,SAAAC,GACf,IAAMpW,EAAS,GAWf,OATIgV,GAAWoB,EAAM,UAAgB,IAAI,KACvCpW,EAAM,SAAe,sBAGnBgV,GAAWoB,EAAM,cAAoB,IAAI,KAC3CpW,EAAM,aAAmB,0BAIpBA,GCmIMgiB,gBAAU,CACvBnmB,KAAM,kBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,aALa6L,EA1HwB,SAAC,GAKjC,IAJLK,EAII,EAJJA,aACAE,EAGI,EAHJA,gBACAD,EAEI,EAFJA,SACGniB,EACC,8DAEFqiB,EAKEriB,EALFqiB,UACA9X,EAIEvK,EAJFuK,iBACA+X,EAGEtiB,EAHFsiB,YACAC,EAEEviB,EAFFuiB,eACAC,EACExiB,EADFwiB,eANE,EAQQhrB,cAALC,EARH,oBAUEF,EAAUxC,KAEhB,OACE,yBAAKkD,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,gBAEL,kBAAC,GAAD,CACEkrB,eAAgB,GAChBC,0BAA2B,CrB1CH,WqB2CxBC,KAAMR,EACN5a,aAAc8C,EACduY,QAASR,EACTS,WAAYR,EACZS,WAAYR,IAEd,0BAAMS,SAAUf,GACd,kBAACgB,GAAA,EAAD,CACErT,KAAI,WACJ5X,UAAWV,EAAQ8e,YACnBpX,MAAK,UAAKyC,GAAa6I,GAAkBzI,YAApC,MACLd,YAAW,UAAKU,GAAa6I,GAAkBzI,aAC/CpB,UAAU,OACVhE,UAAWwG,GACXC,kBAAkB,EAClBC,SAAUmH,IAEZ,kBAAC2Y,GAAA,EAAD,CACErT,KAAI,iBACJ5X,UAAWV,EAAQ8e,YACnBpX,MAAK,UAAKyC,GAAa6I,GAAkBvI,gBACzChB,YAAW,UAAKU,GAAa6I,GAAkBvI,gBAC/CtB,UAAU,OACVhE,UAAWwG,GACXC,kBAAkB,EAClBC,SAAUmH,IAEZ,kBAAC2Y,GAAA,EAAD,CACErT,KAAI,eACJ5X,UAAWV,EAAQ8e,YACnBpX,MACE,yBAAKhH,UAAWV,EAAQqf,mBACtB,8BAAOnf,EAAEiK,GAAa6I,GAAkBtI,cAAxC,MACA,kBAAC,GAAD,CACE2a,KAAI,UAAKlb,GAAa6I,GAAkB9H,0BAExC,kBAAC,KAAD,CAAUxK,UAAWV,EAAQmf,aAInC1V,YAAW,UAAKU,GAAa6I,GAAkBtI,cAC/CvB,UAAU,OACVhE,UAAWwG,GACXC,kBAAkB,EAClBC,SAAUmH,IAEZ,kBAAC2Y,GAAA,EAAD,CACErT,KAAI,WACJzX,GAAI,WACJH,UAAWV,EAAQ8e,YACnBpX,MACE,yBAAKhH,UAAWV,EAAQqf,mBACtB,8BAAOnf,EAAEiK,GAAa6I,GAAkBrI,WACxC,kBAAC,GAAD,CACE0a,KAAI,UAAKlb,GAAa6I,GAAkB7H,sBAExC,kBAAC,KAAD,CAAUzK,UAAWV,EAAQmf,aAInC1V,YACEU,GAAa6I,GAAkB,4BAEjC7J,UAAU,OACVhE,UAAWmnB,KAEb,kBAACX,GAAA,EAAD,CACErT,KAAI,cACJzX,GAAI,cACJH,UAAWV,EAAQ8e,YACnBpX,MACE,yBAAKhH,UAAWV,EAAQqf,mBACtB,8BAAOnf,EAAEiK,GAAa6I,GAAkBpI,cACxC,kBAAC,GAAD,CACEya,KAAI,UAAKlb,GAAa6I,GAAkB7H,sBAExC,kBAAC,KAAD,CAAUzK,UAAWV,EAAQmf,aAInC1V,YACEU,GAAa6I,GAAkB,4BAEjC7J,UAAU,OACVhE,UAAWmnB,KAEb,kBAAC,GAAD,CACER,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,SCxIPptB,GAAYC,YAAW,CAClCka,QAAS,CACPhZ,OAAQ,iBCkDGguB,GA3CQ,SAAC,GAMjB,IALLC,EAKI,EALJA,iBACAlB,EAII,EAJJA,SACAmB,EAGI,EAHJA,cACAhC,EAEI,EAFJA,gBACAD,EACI,EADJA,SAEM5qB,EAAUxC,KAEhB,OACE,yBAAKkD,UAAWV,EAAQ2X,SACrBiV,IAAqB3S,IACpB,kBAAC,GAAD,CACEyR,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,qBACrCmO,cAAe,SAAAnO,GAAM,OAAImO,EAAcnO,EAAQ,oBAC/CgM,cAAetQ,GAA0B,iBACzCyQ,gBAAiBA,EACjBD,SAAUA,IAGbgC,IAAqB3S,IACpB,kBAAC,GAAD,CACEyR,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,yBACrCmO,cAAe,SAAAnO,GAAM,OACnBmO,EAAcnO,EAAQ,4BAExBgM,cAAetQ,GAA0B,qBACzCyQ,gBAAiBA,EACjBD,SAAUA,IAGbgC,IAAqB3S,IACpB,kBAAC,GAAD,CACEyR,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,qBACrCgM,cAAetQ,GAA0B,iBACzCyQ,gBAAiBA,EACjBD,SAAUA,MC7CPptB,GAAYC,YAAW,CAClCka,QAAS,CACPjS,QAAS,OACTE,WAAY,SACZxG,UAAW,kBACX6G,aAAc,QAEhBuL,KAAM,CACJ9L,QAAS,OACTE,WAAY,SACZvH,QAAS,cACTyuB,aAAc,wBACdvuB,SAAU,OACVC,WAAY,OACZE,MAAO,UACPQ,YAAa,OACb,UAAW,CACT0P,OAAQ,YAGZkH,SAAU,CACRpX,MAAO,UACPD,WAAY,MACZquB,aAAc,oBACd,UAAW,CACTle,OAAQ,YAGZvP,SAAU,CACRX,MAAO,UACPH,SAAU,OACV6H,WAAY,MACZ,UAAW,CACTwI,OAAQ,YAGZme,OAAQ,CACNruB,MAAO,UACPH,SAAU,OACV,UAAW,CACTqQ,OAAQ,cCqBCoe,GApDa,SAAC,GAStB,IARL9c,EAQI,EARJA,aACAob,EAOI,EAPJA,KACAF,EAMI,EANJA,eACAC,EAKI,EALJA,0BACAE,EAII,EAJJA,QACAC,EAGI,EAHJA,WACAC,EAEI,EAFJA,WACA/qB,EACI,EADJA,UAEMV,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAeJ,OACE,yBAAKQ,UAAWsG,KAAWhH,EAAQ2X,QAASjX,IACzC4qB,EAAKjb,KAAI,SAACmB,EAAMjB,GAAP,OACR,yBACE8H,IAAK9H,EACL5P,QAAS,kBAAM8qB,EAAWja,IAC1B9Q,UAAWsG,KAAWhH,EAAQwR,KAAT,eAClBxR,EAAQ8V,SAAW5F,IAAiBsB,KAGtCA,EArBmB,SAAAA,GAC1B,OAAQ6Z,EAA0BzN,QAChC,SAAAqP,GAAgB,OAAIA,IAAqBzb,KACzCjP,OAmBK2qB,CAAoB1b,IACnB,kBAAC,KAAD,CACE9Q,UAAWV,EAAQX,SACnBsB,QAAS,SAAAoJ,GAAC,OAnBE,SAACA,EAAGyH,GAC1BzH,EAAEojB,kBACF3B,EAAWha,GAiBa4b,CAAgBrjB,EAAGyH,UAKxC4Z,EAAe7oB,OAAS,GACvB,kBAAC,GAAD,CAAoB+oB,KAAMF,EAAgBiC,MAAO9B,GAC9CrrB,EAAE,mBCtDAotB,GAAa7vB,YAAW,CACnCka,QAAS,CACPhZ,OAAQ,eAEV4uB,WAAY,CACV9nB,MAAO,OACPD,OAAQ,OACRtG,YAAa,OAEfsuB,UAAW,CACTvnB,aAAc,OACd1H,SAAU,UAIDkvB,GAAiBhwB,YAAW,CACvCqD,KAAM,CACJpC,MAAO,UACP,UAAW,CACTA,MAAO,cAKAgvB,GAAiBjwB,YAAW,CACvC6tB,KAAM,CACJjtB,QAAS,EACTR,OAAQ,oBACRE,aAAc,MACdqB,UAAW,iCACXpB,SAAU,WAID2vB,GAAmBlwB,YAAW,CACzCqD,KAAM,CACJsF,WAAY,QACZ7H,SAAU,OACVG,MAAO,aCsBIkvB,GAhDY,SAAC,GAA+B,IAA7BtC,EAA4B,EAA5BA,KAAM+B,EAAsB,EAAtBA,MAAO9rB,EAAe,EAAfA,SACnCssB,EAAcP,KACdQ,EAAkBL,KAClBM,EAAkBL,KAClBM,EAAoBL,KAJ8B,EAMxB9b,IAAMrQ,SAAS,MANS,mBAMjD2Q,EANiD,KAMvCC,EANuC,KAoBxD,OACE,yBAAK1R,UAAWmtB,EAAYlW,SAC1B,kBAACxW,EAAA,EAAD,CAAQnB,QAASguB,EAAmBrtB,QAdlB,SAAA+T,GACpBtC,EAAYsC,EAAMC,iBAcd,kBAAC,KAAD,CAAsBjU,UAAWmtB,EAAYN,aAC7C,0BAAM7sB,UAAWmtB,EAAYL,WAAYjsB,IAE3C,kBAAC,KAAD,CACEV,GAAG,cACHb,QAAS+tB,EACT5b,SAAUA,EACVwD,aAAW,EACXhW,KAAMiW,QAAQzD,GACdtS,QApBiB,WACrBuS,EAAY,QAqBPkZ,EAAKjb,KAAI,SAACmB,EAAMjB,GAAP,OACR,kBAACsF,GAAA,EAAD,CACE7V,QAAS8tB,EACTzV,IAAK9H,EACL5P,QAAS,kBAtBI,SAAA6Q,GACrB6b,EAAM7b,GAqBiByc,CAAezc,KAE7BA,S,sBCpDAhU,GAAYC,YAAW,CAClCka,QAAS,CACP1R,aAAc,QAEhByB,MAAO,CACLzB,aAAc,MACdvH,MAAO,UACPiJ,cAAe,YACfpJ,SAAU,GACVC,WAAY,QAEd0vB,qBAAsB,CACpBxvB,MAAO,UACPD,WAAY,OAIH0vB,GAAyB1wB,YAAW,CAC/CqD,KAAM,CACJ5B,YAAa,QAEfwI,MAAO,CACLhJ,MAAO,aAIE0vB,GAAiB3wB,aAAW,SAAAC,GAAK,MAAK,CACjDoD,KAAM,CACJpC,MAAOhB,EAAMuB,OAAOP,MACpBH,SAAU,IAEZkiB,QAAS,CACP/hB,MAAOhB,EAAMuB,OAAOP,WC+CTmtB,GAvEW,SAAC,GASpB,IARL3jB,EAQI,EARJA,MACAR,EAOI,EAPJA,MACA4jB,EAMI,EANJA,KACA+C,EAKI,EALJA,KACAC,EAII,EAJJA,mBACAC,EAGI,EAHJA,oBACAjlB,EAEI,EAFJA,WACAklB,EACI,EADJA,aAEMxuB,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAGEuuB,EAA0BN,KAC1BO,EAAmBN,KAEnBO,EAAa,SAAAnd,GACjB,OAAI6c,EACK7c,EAAK3Q,KAAOqH,EAAM5F,MAAMzB,GAG1B2Q,IAAStJ,EAAM5F,OAcxB,OACE,yBAAK5B,UAAWsG,KAAWhH,EAAQ2X,QAAS6W,IACzC9mB,GAAS,yBAAKhH,UAAWV,EAAQ0H,OAAQxH,EAAEwH,IAC5C,kBAACknB,GAAA,EAAD,CACEnZ,aAAW,WACX6C,KAAK,WACLyG,KAAG,EACHzc,MAAO+rB,EAAOnmB,EAAM5F,MAAMzB,IAAM,KAAOqH,EAAM5F,MAC7CwH,SAnBkB,SAAAC,GACtB,GAAIskB,EAAJ,CACE,IAAMQ,EAAcvD,EAAK/X,MAAK,SAAA/B,GAAI,OAAIA,EAAK3Q,KAAOkJ,EAAEC,OAAO1H,SAC3D4F,EAAM4B,SAAS+kB,QAKjB3mB,EAAM4B,SAASC,EAAEC,OAAO1H,QAYpBtC,QAAS,CAAEc,KAAMytB,IAEhBjD,EAAKjb,KAAI,SAACmB,EAAMjB,GAAP,OACR,kBAAC8W,GAAA,EAAD,CACErnB,QAASyuB,EACTpW,IAAK9H,EACLjO,MAAO+rB,EAAO7c,EAAK3Q,GAAK2Q,EACxB+V,QAAS,kBAACuH,GAAA,EAAD,CAAOpwB,MAAM,UAAUsB,QAAS0uB,IACzChnB,MACE,yBACEhH,UAAWsG,KAAW,eAEjBhH,EAAQkuB,qBAAuBS,EAAWnd,IAE7ClI,IAGDglB,EAAqB9c,EAAK8c,GAAsBpuB,EAAEsR,IAGvD8V,eAAe,cCqCZyH,GAhGW,SAAC,GASpB,IARLjD,EAQI,EARJA,WACAC,EAOI,EAPJA,YACAiD,EAMI,EANJA,iBACA7qB,EAKI,EALJA,KACA8qB,EAII,EAJJA,eACApE,EAGI,EAHJA,gBACAqE,EAEI,EAFJA,YACAtE,EACI,EADJA,SAEM5qB,EAAUxC,KACVmU,EAAUC,cACV9P,EAAU+P,IAAMsX,WAAW/mB,GAH7B,EAIQnC,cAALC,EAJH,oBAMEivB,EAAWxd,EAAQoE,SAASC,SAE9BoZ,EAAe,GArBqB,mCAuBpCtD,IACEqD,EAAS/Q,QAAQ,mBAAqB,EACxCgR,EAAe,CACbrsB,MAAO,CACLssB,UA1BiB,IA6BZF,EAAS/Q,QAAQ,eAAiB,IAC3CgR,EAAe,CACbrsB,MAAO,CACLssB,UA/Ba,MAwDrB,OACE,yBAAK3uB,UAAWV,EAAQ2X,SACtB,kBAACxW,EAAA,EAAD,CACEC,QAAQ,WACRT,QAvBkB,WACtBmB,EAAQ,CACNlD,MAAO,mCACPyB,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACAub,IAAarD,GAAcmD,EAC7BA,IAGFtd,EAAQsE,KAAR,aACED,SAAU8V,GACPsD,OAGNvF,OAAM,gBAQL7pB,QAAS,CACPc,KAAMd,EAAQhB,gBAGfkB,EAAE,YAEHgvB,GAAetE,GACf,kBAACzpB,EAAA,EAAD,CACE8B,KAAK,SACL7B,QAAQ,YACRV,UAAWV,EAAQ6nB,WACnB7nB,QAAS,CACPc,KAAMd,EAAQb,cACd0J,SAAU7I,EAAQ2nB,mBAEpBhnB,QAAS,kBAAMkqB,GAAmBA,EAAgB,UAEjD3qB,EAAE,SAGP,kBAACiB,EAAA,EAAD,CACE8B,KAAK,SACL7B,QAAQ,YACRyH,SAAUmmB,EACVhvB,QAAS,CACPc,KAAMd,EAAQb,cACd0J,SAAU7I,EAAQ2nB,mBAEpBxjB,KAAMA,EACNxD,QAAS,kBAAMkqB,GAAmBA,EAAgB,UAEjD3qB,EAAE6rB,M,yCCtGEvuB,GAAYC,YAAW,CAClCiK,MAAO,CACLzB,aAAc,MACd0B,cAAe,aAEjB2nB,YAAa,CACX5pB,QAAS,OACTC,eAAgB,SAChBC,WAAY,SACZH,MAAO,OACPD,OAAQ,QACR5H,gBAAiB,OACjBC,OAAQ,uBACRE,aAAc,MACdD,UAAW,aACXwB,SAAU,YAEZiwB,UAAW,CACT1xB,OAAQ,qBAEVmI,QAAS,CACPS,UAAW,UAEb+oB,UAAW,CACT9wB,MAAO,UACP+wB,QAAS,MACTlxB,SAAU,OACV0H,aAAc,OAEhB9F,YAAa,CACXzB,MAAO,UACPT,SAAU,QACVO,WAAY,QAEdkxB,WAAY,CACVhxB,MAAO,UACPmiB,eAAgB,YAChBpiB,WAAY,MACZ,UAAW,CACTmQ,OAAQ,YAGZ1G,MAAO,CACLxC,QAAS,QAEXiqB,WAAY,CACVjqB,QAAS,OACTC,eAAgB,WAChBC,WAAY,WACZH,MAAO,OACPD,OAAQ,OACRoqB,eAAgB,UAChBC,iBAAkB,YAClBC,mBAAoB,UAEtBC,SAAU,CACRrxB,MAAO,QACP6G,WAAY,UACZhH,SAAU,OACVF,QAAS,MACTuQ,OAAQ,WAEVohB,aAAc,CACZxqB,OAAQ,QAEVyqB,WAAY,CACV7pB,WAAY,OAEd8pB,KAAM,CACJzqB,MAAO,OACPD,OAAQ,OACR5H,gBAAiB,UACjB6xB,QAAS,GACTnwB,SAAU,WACVC,IAAK,EACL6gB,KAAM,GAERnY,MAAO,CACLpK,OAAQ,qBAEVsyB,SAAU,CACRlqB,aAAc,QAEhBiB,cAAe,CACbtJ,gBAAiB,aCuINguB,GA5MQ,SAAC,GAOjB,IANL1jB,EAMI,EANJA,MACAR,EAKI,EALJA,MACAhH,EAII,EAJJA,UACA0vB,EAGI,EAHJA,SACAC,EAEI,EAFJA,WAEI,IADJ3mB,KAAQC,EACJ,EADIA,QAAS1B,EACb,EADaA,MAEXjI,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIE4B,EAAU+P,IAAMsX,WAAW/mB,GAJ7B,EAMoByP,IAAMrQ,UAAS,GANnC,mBAMG0uB,EANH,KAMSI,EANT,OAO4Bze,IAAMrQ,UAAS,GAP3C,mBAOG8F,EAPH,KAOcuL,EAPd,KASE0d,EAAU1e,IAAM2e,YAClBC,EAAc,EAEZC,EAAa,SAAA3mB,GACjBA,EAAE4mB,iBACF5mB,EAAEojB,mBAGEyD,EAAe,SAAA7mB,GACnBA,EAAE4mB,iBACF5mB,EAAEojB,kBAEFsD,IAEI1mB,EAAE8mB,aAAa1a,OAASpM,EAAE8mB,aAAa1a,MAAM5T,OAAS,GACxD+tB,GAAQ,IAINQ,EAAgB,SAAA/mB,GACpBA,EAAE4mB,iBACF5mB,EAAEojB,kBAIkB,MAFpBsD,GAGEH,GAAQ,IAINS,EAAa,SAAAhnB,GAOjB,GANA8I,GAAW,GACX9I,EAAE4mB,iBACF5mB,EAAEojB,kBAEFmD,GAAQ,GAEJvmB,EAAE8mB,aAAaG,OAASjnB,EAAE8mB,aAAaG,MAAMzuB,OAAS,EAAG,CAC3D,IAAI0uB,EAAS,IAAIC,WACXjT,EAAOlU,EAAE8mB,aAAaG,MAAM,GAElCC,EAAOE,OAAS,SAAAC,GACdve,GAAW,GACX+Q,EAAgB,CACd3F,KAAMA,EACN9X,MAAOirB,EAAWpnB,OAAOsJ,UAI7B2d,EAAOI,cAActnB,EAAE8mB,aAAaG,MAAM,IAC1CjnB,EAAE8mB,aAAaS,YACfb,EAAc,OAEd5d,GAAW,IAuBfhB,IAAM+C,WAAU,WACd,IAAM+T,EAAM4H,EAAQgB,QAOpB,OALA5I,EAAI6I,iBAAiB,YAAaZ,GAClCjI,EAAI6I,iBAAiB,YAAaV,GAClCnI,EAAI6I,iBAAiB,WAAYd,GACjC/H,EAAI6I,iBAAiB,OAAQT,GAEtB,WACLpI,EAAI8I,oBAAoB,YAAab,GACrCjI,EAAI8I,oBAAoB,YAAaX,GACrCnI,EAAI8I,oBAAoB,WAAYf,GACpC/H,EAAI8I,oBAAoB,OAAQV,MAIjC,IAEH,IAAMnN,EAAkB,SAAApQ,GACtBtL,EAAM4B,SAAS0J,IAkBjB,OACE,yBAAK9S,UAAWA,GACd,kBAACoG,EAAA,EAAD,CAAYpG,UAAWV,EAAQ0H,MAAOtG,QAAQ,MAC3ClB,EAAEwH,IAGL,yBACEhH,UAAWsG,KACThH,EAAQsvB,YADW,eAGhBtvB,EAAQuvB,UAAYrnB,EAAM5F,MAAM6D,OAAS+B,EAAM5F,MAAM6D,MAAM5D,QAH3C,eAKhBvC,EAAQiI,MAAQ0B,GAAW1B,IAEhCypB,IAAKnB,GAEL,kBAAC,GAAD,CACEjpB,UAAWA,EACX5G,UAAWV,EAAQkH,gBAEpBgpB,GAAQ,yBAAKxvB,UAAWV,EAAQkwB,MAAO,IACxC,2BACEpmB,SA9EY,SAAAC,GAClB,GAAKA,EAAEC,OAAOgnB,MAAMzuB,OAApB,CAEAsQ,GAAW,GAEX,IAAIoe,EAAS,IAAIC,WACXjT,EAAOlU,EAAEC,OAAOgnB,MAAM,GAE5BC,EAAOE,OAAS,SAAAC,GACdve,GAAW,GACX+Q,EAAgB,CACd3F,KAAMA,EACN9X,MAAOirB,EAAWpnB,OAAOsJ,UAI7B2d,EAAOI,cAActnB,EAAEC,OAAOgnB,MAAM,MA+D9BW,OAAO,oBACPjxB,UAAWV,EAAQkI,MACnBrH,GAAE,2BAAsBqH,EAAMoQ,MAC9BrV,KAAK,SAENiF,EAAM5F,MAAM6D,OAAS+B,EAAM5F,MAAM6D,MAAM5D,OACtC,yBACEiG,MAAO,CAAEopB,gBAAgB,OAAD,OAAS1pB,EAAM5F,MAAM6D,MAArB,MACxBzF,UAAWV,EAAQ2vB,YAEnB,2BACE/mB,QAAO,2BAAsBV,EAAMoQ,MACnC5X,UAAWV,EAAQgwB,cAEnB,kBAAC,KAAD,CAAUtvB,UAAWV,EAAQ+vB,YAE9BK,GACC,kBAAC,KAAD,CACEzvB,QAxDM,WAClBmB,EAAQ,CACNlD,MAAO,sCACPyB,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,kBACJgQ,EAAgB,CACd3F,KAAM,GACN9X,MAAO,UAGV0jB,OAAM,gBA6CGnpB,UAAWsG,KAAWhH,EAAQ+vB,SAAU/vB,EAAQiwB,eAKtD,yBAAKvvB,UAAWV,EAAQgG,SACtB,kBAAC,KAAD,CAAkBtF,UAAWV,EAAQwvB,YACrC,kBAAC1oB,EAAA,EAAD,CAAYpG,UAAWV,EAAQG,YAAaiB,QAAQ,SACjDlB,EAAE,qBAAsB,IACzB,2BACE0I,QAAO,2BAAsBV,EAAMoQ,MACnC5X,UAAWV,EAAQ0vB,YAElBxvB,EAAE,WACI,IACRA,EAAE,gCAMVyJ,GAAW1B,GACV,kBAACe,GAAA,EAAD,CACEf,OAAK,EACLjI,QAAS,CAAEc,KAAMkG,KAAWhH,EAAQmwB,SAAUE,KAE7CnwB,EAAE+H,M,iCCpNA4pB,GAAqBp0B,YAAW,CAC3CqD,KAAM,CACJlD,gBAAiB,QACjBG,aAAc,MACdF,OAAQ,oBACR,UAAW,CACTA,OAAQ,sBAGZkL,QAAS,CACPnL,gBAAiB,QACjBwB,UAAW,uCACXvB,OAAQ,qBAEVgK,UAAW,CACT0D,QAAS,OACTnM,UAAW,OACXxB,gBAAiB,mBACjBS,QAAS,eACTR,OAAQ,IACRE,aAAc,MACd,WAAY,CACVF,OAAQ,GAEV,UAAW,CACTA,OAAQ,GAEV,UAAW,CACTA,OAAQ,IACRD,gBAAiB,QACjB,WAAY,CACVC,OAAQ,KAIdqK,MAAO,CACLtK,gBAAiB,QACjBG,aAAc,MACdM,QAAS,sBACTE,SAAU,OACVC,WAAY,OACZX,OAAQ,KAEVi0B,aAAc,CACZpsB,QAAS,QAEXqsB,IAAK,CACHvsB,OAAQ,OACR3H,OAAQ,OACRE,aAAc,MACdH,gBAAiB,UACjBW,SAAU,OACVC,WAAY,OACZE,MAAO,OACPL,QAAS,cAIA2zB,GAAav0B,YAAW,CACnCiK,MAAO,CACLrJ,QAAS,aAEX4xB,WAAY,CACV/wB,YAAa,kBAIJ1B,GAAYC,YAAW,CAClCqD,KAAM,CACJ4E,QAAS,OACTG,cAAe,SACfJ,MAAO,QAETiC,MAAO,CACLzB,aAAc,EACdvH,MAAO,UACPiJ,cAAe,YACfpJ,SAAU,GACVC,WAAY,OACZoJ,cAAe,WAEjBnI,UAAW,CACTiG,QAAS,QAEXusB,eAAgB,CACdxsB,MAAO,OACPD,OAAQ,OACR9G,MAAO,QAETuJ,MAAO,CACLpK,OAAQ,oBACR,UAAW,CACTA,OAAQ,sBAGZF,MAAO,CACLC,gBAAiB,OACjBwB,UAAW,gCACXrB,aAAc,SCnBHuuB,GAnEI,SAAC,GAQb,IAPLpkB,EAOI,EAPJA,MACArH,EAMI,EANJA,GACA6G,EAKI,EALJA,MACA+B,EAII,EAJJA,YACAN,EAGI,EAHJA,UACAzI,EAEI,EAFJA,UAEI,IADJgJ,KAAQC,EACJ,EADIA,QAAS1B,EACb,EADaA,MAEXjI,EAAUxC,KACV00B,EAAsBL,KACtBM,EAAcH,KAHhB,EAIQ/xB,cAALC,EAJH,oBAUJ,OACE,yBAAKQ,UAAWsG,KAAWhH,EAAQc,KAAMJ,IACvC,kBAACiI,GAAA,EAAD,CAAYjI,UAAWV,EAAQ0H,MAAOkB,QAAO,UAAK/H,EAAL,WAC1C6G,GAGH,kBAAC0qB,GAAA,EAAD,CACEC,UAAQ,EACRxxB,GAAE,UAAKA,EAAL,UACFH,UAAWsG,KAAW,eACnBhH,EAAQiI,MAAQ0B,GAAW1B,IAE9BjI,QAASkyB,EACTtyB,QAAS,GACT0yB,UAAQ,EACR7yB,UAAW,yBAAKiB,UAAWV,EAAQP,WAAY,IAC/C8yB,WAAY,SAACjwB,EAAOkwB,GAAR,OACVlwB,EAAM+N,KAAI,SAACoiB,EAAQliB,GAAT,OACR,kBAACmiB,GAAA,EAAD,eACE1yB,QAASmyB,EACT/wB,QAAQ,WACRsG,MAAO+qB,EACPxC,WAAY,kBAAC,KAAD,CAAWvvB,UAAWV,EAAQiyB,kBACtCO,EAAY,CAAEjiB,gBAIxBoiB,YAAa,SAAAC,GAAM,OACjB,kBAACC,GAAA,EAAD,iBACMD,EADN,CAEE/xB,GAAE,UAAKA,EAAL,UACFgJ,WAAU,eACL+oB,EAAO/oB,WADF,CAERV,UAAWA,IAEb/H,QAAQ,SACRqI,YAAavJ,EAAEuJ,GACfqpB,WAAS,MAGbxwB,MAAO4F,EAAM5F,MACbwH,SA7CkB,SAACC,EAAGzH,GAC1B4F,EAAM4B,SAASxH,MA+CZqH,GAAW1B,GAAS,kBAACe,GAAA,EAAD,CAAgBf,OAAK,GAAEA,KC+DnCoJ,gBAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EAzHS,SAAC,GAYlB,IAXLnJ,EAWI,EAXJA,MACAR,EAUI,EAVJA,MACA+B,EASI,EATJA,YACAN,EAQI,EARJA,UACAzI,EAOI,EAPJA,UACAqyB,EAMI,EANJA,MACAC,EAKI,EALJA,UACAC,EAII,EAJJA,YACAC,EAGI,EAHJA,OACAnvB,EAEI,EAFJA,cAEI,IADJ2F,KAAQC,EACJ,EADIA,QAAS1B,EACb,EADaA,MAEXjI,EAAUxC,KACV00B,EAAsBL,KACtBM,EAAcH,KAHhB,EAIc/xB,cAJd,mBAIGC,EAJH,KAME8S,EANF,KAM0BnH,SAN1B,EAQoBgG,IAAMrQ,UAAS,GARnC,mBAQG7B,EARH,KAQSwzB,EART,OAS0BthB,IAAMrQ,SAAS,IATzC,mBASG5B,EATH,KASY6B,EATZ,OAW+B+Q,YAASugB,EAAO,CACjDpf,UAAW,CACTyf,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,MAJlCyyB,EAXJ,EAWIA,QAASljB,EAXb,EAWaA,KAAMsC,EAXnB,EAWmBA,QAQvBb,IAAM+C,WAAU,WACT0e,GAAS7xB,EAAW2O,EAAK4iB,IAAc,MAC3C,CAAC5iB,IAEJyB,IAAM+C,WAAU,WACdlC,MACC,IAEH,IAAM6gB,EAAY,SAAAd,GAChB,MAA4B,WAArBzf,GAAiCyf,EAAO,GAAD,OAAIQ,EAAJ,OAC1CR,EAAO,GAAD,OAAIQ,EAAJ,OACNR,EAAOQ,IAGb,OACE,yBAAKvyB,UAAWsG,KAAWhH,EAAQc,KAAMJ,IACvC,kBAACiI,GAAA,EAAD,CAAYjI,UAAWV,EAAQ0H,MAAOkB,QAAO,UAAKlB,EAAL,WAC1CxH,EAAEwH,IAGL,kBAAC0qB,GAAA,EAAD,CACEC,UAAQ,EACRxxB,GAAG,oBACHH,UAAWsG,KAAW,eACnBhH,EAAQiI,MAAQ0B,GAAW1B,IAE9BjI,QAASkyB,EACTvyB,KAAMA,EACN6zB,OAAQ,WACNL,GAAQ,IAEVtzB,QAAS,WACPszB,GAAQ,IAEVrpB,SAAU,SAAC4K,EAAOpS,GAChB,IAAMmxB,EAAevrB,EAAM5F,MAAMsb,QAAO,SAAAuN,GAAC,OAAK7oB,EAAMmiB,SAAS0G,MACzDsI,EAAalxB,QAAQ2wB,EAAOO,EAAa,IAC7CvrB,EAAM4B,SAASxH,IAEjBA,MAAO4F,EAAM5F,MACboxB,kBAAmB,SAACjB,EAAQnwB,GAAT,MAAmB,UAAGmwB,EAAO5xB,MAAV,UAAsByB,EAAMzB,KAClE8yB,eAAgB,SAAAlB,GAAM,OAAIc,EAAUd,IACpC7yB,QAASA,EACT0zB,QAASA,EACT7zB,UAAW,yBAAKiB,UAAWV,EAAQP,WAAY,IAC/C8yB,WAAY,SAACjwB,EAAOkwB,GAAR,OACVlwB,EAAM+N,KAAI,SAACoiB,EAAQliB,GAAT,OACR,kBAACmiB,GAAA,EAAD,eACE1yB,QAASmyB,EACT/wB,QAAQ,WACRsG,MAAO6rB,EAAUd,GACjBxC,WAAY,kBAAC,KAAD,CAAWvvB,UAAWV,EAAQiyB,kBACtCO,EAAY,CAAEjiB,gBAIxBoiB,YAAa,SAAAC,GAAM,OACjB,kBAACC,GAAA,EAAD,iBACMD,EADN,CAEExxB,QAAQ,SACRqI,YAAavJ,EAAEuJ,GACfqpB,WAAS,EACTjpB,WAAU,eACL+oB,EAAO/oB,WADF,CAERV,UAAWA,IAEbyqB,WAAU,eACLhB,EAAOgB,WADF,CAER9B,aACE,kBAAC,IAAM+B,SAAP,KACGP,EACC,kBAAC9rB,GAAA,EAAD,CAAkB9I,MAAM,UAAUwf,KAAM,KACtC,KACH0U,EAAOgB,WAAW9B,sBAQ9BnoB,GAAW1B,GAAS,kBAACe,GAAA,EAAD,CAAgBf,OAAK,GAAEA,O,SChIrCzK,GAAYC,YAAW,CAClCka,QAAS,CACPrY,SAAU,WACV2G,aAAc,OACbkB,OAAQ,MAEXO,MAAO,CACLhC,QAAS,OACTE,WAAY,WACZD,eAAgB,gBAChBM,aAAc,EACdvH,MAAO,UACPH,SAAU,GACVC,WAAY,OACZoJ,cAAe,WAEjBksB,WAAY,CACVpuB,QAAS,QACTO,aAAc,EACdvH,MAAO,UACPiJ,cAAe,YACfpJ,SAAU,GACVC,WAAY,OACZoJ,cAAe,WAEjBuY,sBAAuB,CACrB7gB,SAAU,SACVC,IAAK,OACL6gB,KAAM,KAERJ,gBAAiB,CACfta,QAAS,OACTE,WAAY,SACZhI,gBAAiB,UACjBC,OAAQ,oBACRE,aAAc,MACdD,UAAW,aACX2H,MAAO,OACPmJ,OAAQ,UACRrQ,SAAU,OACVC,WAAY,OACZH,QAAS,WACTiB,SAAU,WACV6H,OAAQ,IACR,UAAW,CACTtJ,OAAQ,sBAGZk2B,aAAc,CACZpsB,cAAe,QAEjBsY,aAAc,CACZ1hB,SAAU,OACVW,YAAa,OAEfmhB,MAAO,CACLjhB,UAAW,uCACXvB,OAAQ,qBAEVyiB,WAAY,CACVziB,OAAQ,oBACRuB,UAAW,OACX,UAAW,CACTvB,OAAQ,sBAGZoK,MAAO,CACLlJ,UAAW,QAEbi1B,eAAgB,CACd10B,SAAU,WACV6H,OAAQ,IACRyH,OAAQ,UACRlQ,MAAO,aC1DLu1B,GAAgB,SAAC,GAAD,IAAG3kB,EAAH,EAAGA,KAAH,OACpB,yBACE7J,MAAM,KACND,OAAO,KACP0uB,QAAQ,YACR5kB,KAAK,OACL6kB,MAAM,8BAEN,0BACEC,SAAS,UACTC,SAAS,UACTC,EAAE,uuBACFhlB,KAAMA,GAAQ,cA+YLilB,GA1YU,SAAC,GAyBnB,IAxBL1zB,EAwBI,EAxBJA,GACA8gB,EAuBI,EAvBJA,uBACAzZ,EAsBI,EAtBJA,MACAR,EAqBI,EArBJA,MACAhH,EAoBI,EApBJA,UACAmhB,EAmBI,EAnBJA,eACAX,EAkBI,EAlBJA,cACAY,EAiBI,EAjBJA,qBACA0S,EAgBI,EAhBJA,iBACAC,EAeI,EAfJA,sBACAC,EAcI,EAdJA,QACAtS,EAaI,EAbJA,eACAE,EAYI,EAZJA,uBACAqS,EAWI,EAXJA,WACApS,EAUI,EAVJA,QACAjZ,EASI,EATJA,WACAsrB,EAQI,EARJA,gBACAC,EAOI,EAPJA,iBACAC,EAMI,EANJA,eACArrB,EAKI,EALJA,YACAsrB,EAII,EAJJA,UACAC,EAGI,EAHJA,WACAC,EAEI,EAFJA,OAEI,IADJvrB,KAAQC,EACJ,EADIA,QAAS1B,EACb,EADaA,MAAO2B,EACpB,EADoBA,aAElBlM,EAAQw3B,eACRl1B,EAAUxC,KAFZ,EAGcyC,cAHd,mBAGGC,EAHH,KAKE8S,EALF,KAK0BnH,SAL1B,EAOsBgG,IAAMrQ,UAAS,GAPrC,mBAOG6e,EAPH,KAOU2C,EAPV,OAQ8CnR,IAAMrQ,UAAS,GAR7D,mBAQGyhB,EARH,KAQuBC,EARvB,OAUwBrR,IAAMrQ,UAAS,GAVvC,mBAUG6D,EAVH,KAUWge,EAVX,OAWkCxR,IAAMrQ,SAC1CmgB,GAA0BzZ,EAAM5F,MAAQ4F,EAAM5F,MAAQ+W,QAZpD,mBAWGiK,EAXH,KAWgBC,GAXhB,KAeJ1R,IAAM+C,WAAU,WACW,mBAAdmgB,IACT/R,EAAS+R,GAELC,GACFzR,GAAeyR,MAGlB,CAACD,IAEJljB,IAAM+C,WAAU,WACdyO,GAAWhe,GACXme,YAAW,WACTH,EAAUhe,QAEX,CAAC2N,IASkB6Q,cAAc,SAACnmB,GAAD,OAAWA,EAAMQ,YAAYC,KAAK,SALtE,IA0BMg3B,GAAsC,SAC1Cpa,EACAC,EACAsL,EACAlF,GAEA,IAAKrG,EAAc,OAAOuL,EAE1B,IAAM8O,EAAe/b,KAAO+H,GAAMiU,IAAI,CACpCC,KAAM,EACNC,OAAQ,IAEJC,EAAgBnc,OAASyJ,IAAI/H,EAAcC,GAEjD,QAAI3B,KAAO+b,GAAcK,eAAeD,EAAe,QA+BnDE,GAA2B,SAACtU,EAAMkF,GACtC,GAAIA,EAAc,OAAOA,EAEzB,GAAIqO,EAAY,CACd,IAAM7Z,EAAO6Z,EAAW7Z,KAClBI,EAAYyZ,EAAWzZ,UAEvBH,EAAe3X,SAASuxB,EAAW5Z,cACnCC,EAAuB2Z,EAAW3Z,qBAExC,GAAIF,GAOF,GANmBqa,GACjBpa,EACAC,EACAsL,EACAlF,GAEc,OAAO,OAClB,GAAIlG,EAAW,CACpB,IAAIya,GAAiB,EA6BrB,GA3BAza,EAAU7K,KAAI,SAAAmB,GACZ,IAAMsJ,EAAOtJ,EAAKsJ,KACZM,EAAuB5J,EAAK4J,qBAI9BN,EAFYzB,KAAO+H,GAAMoD,OAAO,UAG9BpJ,EAAqB7Y,OApDM,SACvCwY,EACAC,EACAI,EACAgG,GAaA,QAX8BhG,EAAqB/K,KAAI,SAAAmB,GACrD,IAAM6J,EAAYhC,KAAO7H,EAAK6J,UAAW,SACnC+Z,EAAe/b,KAAO+H,GAAMiU,IAAI,CACpCC,KAAMja,EAAUua,IAAI,QACpBL,OAAQla,EAAUua,IAAI,YAElBJ,EAAgBnc,OAASyJ,IAAI/H,EAAcC,GAEjD,OADmB3B,KAAO+b,GAAcjQ,KAAKqQ,IACxB,KAGGK,OAAM,SAAAvzB,GAAK,OAAIA,KAoCZwzB,CACjB/a,EACAC,EACAI,EACAgG,KAEcuU,GAAiB,GAEdR,GACjBpa,EACAC,EACAsL,EACAlF,KAEcuU,GAAiB,OAKnCA,EAAgB,OAAO,GAI/B,OAAOrP,GAwCT,OACE,yBAAK5lB,UAAWsG,KAAWhH,EAAQ2X,QAASjX,IACzCu0B,EACC,2BAAOrsB,QAAS/H,GAAU,cACxB,kBAAC,KAAD,CAAeH,UAAWV,EAAQg0B,kBAGpC,oCACGU,EACC,2BACE9rB,QAAS/H,GAAU,aACnBH,UAAWsG,KAAWhH,EAAQ8zB,WAAYc,IAEzC10B,EAAEwH,IAGL,2BAAOhH,UAAWsG,KAAWhH,EAAQ0H,MAAO4B,IAC1C,kBAACxC,EAAA,EAAD,CACE1F,QAASkhB,GAAkD,MAE1DpiB,EAAEwH,IAEL,kBAACZ,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ+zB,cAC5C7rB,EAAM5F,OACL+W,KAAOnR,EAAM5F,OACV8iB,OAAOlY,GAAY8F,IACnBwR,OAAO,iBAKjBkQ,GACC,2BACE9rB,QAAS/H,GAAU,aACnBH,UAAWsG,KACThH,EAAQggB,gBADW,eAGhBhgB,EAAQqgB,OAAQ,GAHA,eAMhBrgB,EAAQsgB,YAAc3W,GAAWC,IAAiB3B,GAErD4sB,IAGDC,EACC,oCACG5sB,EAAM5F,MACL,6BACG+W,KAAOnR,EAAM5F,OACX8iB,OAAOlY,GAAY8F,IACnBwR,OAAO,gBAGZ,6BAAoBtkB,EAAduJ,GAAiC,SAEzC,kBAAC,GAAD,CAAe6F,KAAM5R,EAAMuB,OAAOP,SAGpC,oCACE,kBAAC,KAAD,CAAegC,UAAWV,EAAQigB,eAEjC/X,EAAM5F,MACL,6BACG+W,KAAOnR,EAAM5F,OACX8iB,OAAOlY,GAAY8F,IACnBwR,OAAO,gBAGZ,6BAAMtkB,EAAE,YAStB,yBACEQ,UAAWsG,KAAWhH,EAAQmgB,sBAAT,eAClB,oBAAsBuU,KAGxBrvB,GACC,kBAAC,oBAAD,CACEigB,gBAAiB,EACjBG,UAAU,EACV5kB,GAAIA,GAAU,aACd+kB,cAAc,cACdxE,KAAMlZ,EAAM5F,OAAS,KACrByzB,aAAc,SAAA3U,IA7PA,SAAAA,GACtBlZ,EAAM4B,SAASsX,GACXoT,GAAkBA,EAAiBpT,GA4P7BwC,CAAgBxC,IAElB0E,iBAzPsB,SAAA1E,GAC9BmC,GAAenC,GACf8B,GAAoB,GAChBpB,GAAsBA,EAAqBV,IAuPvC2E,iBApPsB,SAAA3E,GAC9BmC,GAAenC,GACf,IAAM4E,EAAc3M,OACd4M,EAAmB5M,KAAO2M,GAAalD,IAAI,GAAI,KAE9BzJ,KAAO+H,GAC3B2D,QAAQ,SACR1D,OAAO4E,EAAiBlB,QAAQ,WAEf7B,GAAoB,GACpCpB,GAAsBA,EAAqBV,IA2OvC8E,QAASjD,EAAqB,6BAAM,IAAY,GAChDla,SAAS2rB,GAAUrU,EACnB+F,cAAe,YAAkB,IAAfrd,EAAc,EAAdA,SACXA,GAAW0rB,GAAuBA,IACnCC,GAAS1R,EAASja,IAExBsd,oBAAqB,kBAAM/C,GAC3BgD,aAAc,SAAAlF,GACZ,IAAMkF,EA5IG,SAAAlF,GACnB,GACEF,GACAA,EAAcuD,SAASpL,KAAO+H,GAAMoD,OAAO,eAE3C,OAAO,EAGT,IAAK3C,EAAgB,OAAO,EAE5B,GAAIA,EAAehH,SAAsC,SAA3BgH,EAAehH,SAQ3C,GAPkBxB,KAAO+H,GAAMiD,UAC7BxC,EAAejH,UACfiH,EAAehH,QACf,MACA,MAGa,CACb,IAAM0J,EAAYlL,KAAO+H,GAAMoD,OAAO,OACtC,OAAQ3C,EAAeyC,WAAWG,SAASF,SAQ7C,GALsBlL,KAAO+H,GAAM+C,cACjCtC,EAAejH,UACf,OAGiB,CACjB,IAAM2J,EAAYlL,KAAO+H,GAAMoD,OAAO,OACtC,OAAQ3C,EAAeyC,WAAWG,SAASF,GAI/C,OAAO,EA0GwBT,CAAa1C,GAClC,OAAOsU,GAAyBtU,EAAMkF,IAExC/D,QAASA,GAAoB,GAC7BH,eAAgBA,EAGhByE,mBAAoB,gBAAGC,EAAH,EAAGA,MAAH,OAClBzN,KAAOyN,GACJ1B,OAAOlY,GAAY8F,IACnBwR,OAAO,cAEZuC,kBAAmB,SAAAC,GAAQ,IAAD,EAEtBA,EAAIC,QAAQC,aADW,WAArBlU,EACyB,CACzB,QACA,KACA,KACA,KACA,KACA,KACA,SAGyB,CACzB,KACA,KACA,KACA,KACA,KACA,KACA,MAnBoB,MAuBciO,GACpCC,EACA8F,GAFMxF,EAvBgB,EAuBhBA,YAAaC,EAvBG,EAuBHA,aAKrB,OACE,yBACE/gB,UAAWsG,MAAU,mBAClBhH,EAAQ8gB,iBAAmBU,GAAeC,GADxB,cAElBzhB,EAAQ+gB,eAAiBS,GAFP,cAGlBxhB,EAAQghB,gBAAkBS,GAHR,KAMrB,6BAAMuF,EAAIxC,OAAO,QAIvB2C,4BAA4B,MAKhCxd,GAAWC,IAAiB3B,GAC5B,kBAACe,GAAA,EAAD,CACEtI,UAAWsG,KAAW,eAAGhH,EAAQiI,MAAQysB,IACzCzsB,OAAK,GAEJ/H,EAAE+H,MClaAzK,GAAYC,aAAW,SAAAC,GAAK,MAAI,CAC3CuZ,UAAU,aACRjZ,SAAU,QACVoB,UAAW,6BACXf,QAAS,iBACRX,EAAMQ,YAAYC,KAAK,MAAO,IAMjCS,MAAO,CACLP,QAAS,YAEXqJ,MAAO,CACLzB,aAAc,QAEhB+vB,UAAW,CACTz3B,SAAU,OACVC,WAAY,OACZC,WAAY,SACZC,MAAO,UACPuH,aAAc,OAEhBgwB,iBAAkB,CAChB13B,SAAU,OACVC,WAAY,OACZC,WAAY,SACZC,MAAO,WAETw3B,aAAc,CACZx3B,MAAO,UACPD,WAAY,OAEd03B,aAAc,CACZz3B,MAAO,WAET+hB,QAAS,CACP/hB,MAAO,WAET03B,WAAW,eAER14B,EAAMQ,YAAYC,KAAK,MAAO,CAC5BsH,MAAO,OACRI,cAAc,YCwBLwwB,GA5DU,SAAC,GAA+C,IAA7C/f,EAA4C,EAA5CA,KAAMsB,EAAsC,EAAtCA,UAAW0e,EAA2B,EAA3BA,aAAcxe,EAAa,EAAbA,OACnD9X,EAAUxC,KADsD,EAE1DyC,cAALC,EAF+D,oBAIhEq2B,EAAcjgB,EAAKsB,GACnB4e,EAAUD,EAAYC,QAE5B,SAAIA,IAAWA,EAAQj0B,SAEnB,yBAAK7B,UAAWV,EAAQiX,WACtB,kBAACnQ,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAEq2B,EAAYje,OAGjB,kBAACsW,GAAA,EAAD,CACEnZ,aAAW,WACX6C,KAAK,WACLhW,MAAOg0B,EACPxsB,SAAUgO,EACVpX,UAAWV,EAAQo2B,YAGlBI,EAAQnmB,KAAI,SAAComB,EAAQlmB,GAAT,OACX,kBAAC8W,GAAA,EAAD,CACE3mB,UAAWV,EAAQ0H,MACnB2Q,IAAK9H,EACLgX,QACE,kBAACuH,GAAA,EAAD,CACEpwB,MAAM,UACNsB,QAAS,CACPc,KAAMd,EAAQm2B,aACd1V,QAASzgB,EAAQygB,WAIvBne,MAAOiO,EACP7I,MACE,6BACE,kBAACZ,EAAA,EAAD,CACEpG,UAAWsG,KAAWhH,EAAQg2B,UAAT,eAClBh2B,EAAQk2B,aAAe3lB,IAAU+lB,KAGnCp2B,EAAEu2B,EAAO73B,QAEZ,kBAACkI,EAAA,EAAD,CAAYpG,UAAWV,EAAQi2B,kBAC5B/1B,EAAEu2B,EAAOC,uB,6BCzCfjY,GAdE,SAAAC,GACf,IAAMpW,EAAS,GAUf,OARIiV,GAASmB,EAAO3D,cAAc,KAChCzS,EAAOyS,aAAe,oCAGpB0C,GAA4BiB,EAAO5D,MAAQ,IAAI,KACjDxS,EAAOwS,KAAO,2BAGTxS,G,UCkDM5K,GA7DDi5B,aAAe,CAC3BpgB,QAAS,CACPqgB,QAAS,CACPC,KAAM,WAERC,UAAW,CACTD,KAAM,WAER5uB,MAAO,CACL4uB,KAAM,YAGVE,WAAY,CACVC,WAAY,YACZC,GAAI,CACF14B,SAAU,GACVE,WAAY,KAEdy4B,GAAI,CACF34B,SAAU,GACVE,WAAY,KAEd04B,GAAI,CACF54B,SAAU,GACVE,WAAY,KAEd24B,MAAO,CACL74B,SAAU,GACVG,MAAO,WAET24B,MAAO,CACL94B,SAAU,GACVE,WAAY,KAEd64B,OAAQ,CACN3vB,cAAe,aACflJ,WAAY,MAGhB84B,UAAW,CACTC,eAAgB,CACd,UAAW,CACT,eAAgB,CACdl4B,SAAU,cAIhBm4B,YAAa,CACX32B,KAAM,CACJgsB,aAAc,oBACd,eAAgB,CACdjvB,OAAQ,IAGZ65B,KAAM,CACJ75B,OAAQ,OCtDHL,GAAaC,aAAW,SAACC,GAAD,MAAY,CAC/CqhB,IAAI,aACFrZ,QAAS,OACTC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACflH,OAAQ,wBAGZqgB,OAAO,aACLtZ,QAAS,OACTC,eAAgB,gBAChBF,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGXyZ,kBAAkB,aAChBzZ,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPkyB,SAAU,SAGdxY,SAAS,aACP5gB,SAAU,OACVQ,UAAW,OACXL,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPkyB,SAAU,SAGdC,YAAY,aACVlyB,QAAS,OACTC,eAAgB,gBAChBF,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGXoyB,gBAAgB,aACdpyB,MAAO,QACP1G,UAAW,QACVrB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPW,WAAY,SAGhB0xB,mBAAmB,aACjB54B,YAAa,QACZxB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BiI,WAAY,SAGhBoQ,QAAS,CACPhR,OAAQ,MACRS,aAAc,OACdrI,gBAAiB,WAEnBm6B,gBAAiB,CACfp5B,OAAQ,iBAEV6hB,aAAc,GACdC,QAAS,CACP/hB,MAAO,WAETgiB,iBAAkB,CAChBhiB,MAAO,UACPd,gBAAiB,WAEnB+iB,aAAc,CACZjiB,MAAOhB,EAAMuB,OAAOP,MACpBH,SAAU,YCpDRmsB,GAAgB,CACpB/P,aAAc,CACZC,UAAWvB,OACXwB,QAAS,MAEXC,KAAMrB,GACNsB,aAAc,EACdC,qBAAsB,QA4ITsP,gBAAU,CACvBnmB,KAAM,mBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,kBANaJ,CAOZjZ,aAjBqB,SAAAtO,GAAK,MAAK,CAChC2Y,gBAAiB3Y,EAAMoB,KAAKuX,oBAGH,SAAApK,GAAQ,MAAK,CACtC0mB,iBAAkB,SAAC7zB,EAAM0Z,EAAOvb,GAC9BgP,EAASwG,aAAO3T,EAAM0Z,EAAOvb,QAW9B+O,EAhJkB,SAAC,GAOf,IANLqa,EAMI,EANJA,SACAf,EAKI,EALJA,aACAkC,EAII,EAJJA,cACAhC,EAGI,EAHJA,gBACAD,EAEI,EAFJA,SACGtlB,EACC,yFACEtF,EAAUxC,KAERke,EAAsCpW,EAAtCoW,gBAAiBsc,EAAqB1yB,EAArB0yB,iBAEnBC,EAA6B,SAAAjR,GACjC,IAAMkR,EAAaxc,EAAgBgD,OAAO5D,KAAKvH,MAC7C,SAAA/B,GAAI,OAAIA,EAAKwV,MAAQA,KAGvB,OAAIkR,EAAmBA,EAAWtc,WAE3B,CACL,CACEC,YAAa,QACbC,IAAK,IACLC,IAAK,IACLC,IAAK,OA0CX,OACE,6BACE,kBAACmc,GAAA,EAAD,CAAMzM,SAAUf,GAvCL,SAAAjM,GACb,IAAMpW,EAASmW,GAASC,GAExB,GAAIhB,OAAOC,KAAKrV,GAAQ/F,OACtB,MAAM,IAAI61B,KAAgB9vB,GAG5B,IAAMwS,EAAO4D,EAAO5D,KAEdud,EAAe3a,OAAOC,KAAK7C,GAC9B8C,QAAO,SAAAvF,GAAG,OAAIyC,EAAKzC,MACnBhI,KAAI,SAAAwN,GAAK,MAAK,CACbhd,GAAIsa,OACJ6L,IAAKnJ,EACLjC,WAAYqc,EAA2Bpa,OAGrCya,EAAkBD,EAAahoB,KAAI,SAAAmB,GACvC,IAAMoK,EAAapK,EAAKoK,WACxB,MAAO,CACL/a,GAAIsa,OACJL,KAAM,CAACtJ,EAAKwV,KACZlL,IAAMF,GAAcA,EAAW,GAAX,KAAyB,IAC7CG,IAAMH,GAAcA,EAAW,GAAX,KAAyB,IAC7CI,IAAMJ,GAAcA,EAAW,GAAX,KAAyB,QAIjDoc,EAAiB,kBAAmB,OAAQM,GAC5CN,EAAiB,kBAAmB,OAAQK,GAC5CxL,EAAc,CACZ/R,KAAMud,IAGR3M,EAAShN,OAML,yBAAKhe,UAAWV,EAAQ+e,KACtB,yBAAKre,UAAWV,EAAQgf,QACtB,yBAAKte,UAAWV,EAAQkf,mBACtB,kBAACyM,GAAA,EAAD,CACErT,KAAK,eACL5Q,MAAM,eACNvC,UAAWuc,IAAyB6W,MAGxC,kBAAC,GAAD,CAAgBlT,KAAK,mFACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAGjC,yBAAKze,UAAWV,EAAQgf,QACtB,yBAAKte,UAAWV,EAAQ43B,aACtB,yBAAKl3B,UAAWV,EAAQ83B,oBACtB,kBAACnM,GAAA,EAAD,CACErT,KAAK,eACLlP,cAAc,EACdD,UAAW,EACXM,YAAY,SACZ/B,MAAM,gBACNvC,UAAW8D,MAIf,kBAAC,GAAD,CAAgBoc,KAAK,2BACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAIjC,yBAAKze,UAAWV,EAAQ63B,iBACtB,kBAAClM,GAAA,EAAD,CACErT,KAAK,uBACLgT,KAAM,CAAC,UAAW,QAAS,OAAQ,SACnCnmB,UAAWqzB,QAMnB,kBAAC7M,GAAA,EAAD,CAAOjrB,UAAWV,EAAQ+e,IACxBzG,KAAK,OACL1Z,MAAM,gBACNuG,UAAWszB,KAEb,yBAAK/3B,UAAWV,EAAQwW,SAAU,IAClC,kBAAC,GAAD,CACEsV,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,U,UC3ELnM,GA3EE,SAAAC,GACf,IAAMpW,EAAS,GAUf,GARIiV,GAASmB,EAAO3D,cAAc,KAChCzS,EAAOyS,aAAe,oCAOpB2D,EAAOxD,WAAawD,EAAOxD,UAAU3Y,OAAQ,CAC/C,IAAMm2B,EAAkB,GAExBha,EAAOxD,UAAUyd,SAAQ,SAAC3R,EAAK4R,GAC7B,IAAMC,EAAa,GAOnB,GALIpb,GAA4BuJ,EAAIlM,MAAQ,IAAI,KAC9C+d,EAAW/d,KAAO,0BAClB4d,EAAgBE,GAAYC,GAG1B7R,EAAI5L,sBAAwB4L,EAAI5L,qBAAqB7Y,OAAQ,CAC/D,IAAMu2B,EAAkB,GAElBC,EAAgC/R,EAAI5L,qBAAqB/K,KAC7D,SAAAmB,GAAI,sBACCA,EADD,CAEF6J,UAAWhC,KAAO7H,EAAK6J,WAAWmJ,OAAO,SACzClJ,SAAUlY,SAASoO,EAAK8J,eAI5B0L,EAAI5L,qBAAqBud,SAAQ,SAACK,EAAMC,GACtC,IAAMC,EAAa,GACf3b,GAASyb,EAAK1d,UAAU,KAC1B4d,EAAW5d,SAAW,uBACtBwd,EAAgBG,GAAaC,GAGPH,EAA8Bnb,QACpD,SAAApM,GAAI,OACFA,EAAK6J,YAAchC,KAAO2f,EAAK3d,WAAWmJ,OAAO,UACjDhT,EAAK8J,WAAalY,SAAS41B,EAAK1d,WAChC9J,EAAK+J,WAAayd,EAAKzd,YAGPhZ,OAAS,IAC3B22B,EAAW7d,UAAY,QACvB6d,EAAW5d,SAAW,QACtB4d,EAAW3d,SAAW,QACtBud,EAAgBG,GAAaC,EAC7BJ,EAAe,OAAf,eACKA,EAAe,OADpB,eAEGG,EAAY,qDAKfH,EAAgBv2B,QAAUu2B,EAAe,UAC3CD,EAAWzd,qBAAuB0d,EAClCJ,EAAgBE,GAAYC,OAK9BH,EAAgBn2B,SAClB+F,EAAO4S,UAAYwd,EACnBpwB,EAAO4S,UAAP,eAAwBwd,EAAxB,CAAyCS,OAAO,eAAMT,MAI1D,OAAOpwB,GC1EI9K,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5CqhB,IAAI,aACFrZ,QAAS,OACTC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfJ,MAAO,OACP9G,OAAQ,qBAGZqgB,OAAO,aACLtZ,QAAS,OACTC,eAAgB,gBAChBF,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,QAGXyZ,kBAAkB,aAChBzZ,MAAO,QACPQ,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGX0Z,SAAS,aACP5gB,SAAU,OACVQ,UAAW,OACXL,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAChC0H,cAAe,WAGjB+xB,YAAY,aACVlyB,QAAS,OACTC,eAAgB,gBAChBF,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGXoyB,gBAAgB,aACdpyB,MAAO,QACP1G,UAAW,QACVrB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGXqyB,mBAAmB,aACjB54B,YAAa,QACZxB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9Be,YAAa,MAGjBsX,QAAQ,aACNhR,OAAQ,MACR5H,gBAAiB,UACjBqI,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,SAGlBmzB,aAAa,aACX3zB,MAAO,QACPQ,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGX4zB,OAAO,aACLpzB,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,aC1CdykB,GAAgB,CACpB/P,aAAc,CACZC,UAAWvB,OACXwB,QAAS,MAEXE,aAAc,EACdC,qBAAsB,UACtBE,UAAW,CACT,CACEra,GAAIsa,OACJL,KAAMrB,GACN2B,qBAAsB,CACpB,CACEC,UAAWhC,OACXiC,SAAU,KACVC,SAAU,aA6ML+O,gBAAU,CACvBnmB,KAAM,uBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,kBANaJ,CAOZjZ,aAlBqB,SAAAtO,GAAK,MAAK,CAChCkY,qBAAsBlY,EAAMoB,KAAK8W,qBACjCgB,wBAAyBlZ,EAAMoB,KAAK8X,4BAGX,SAAA3K,GAAQ,MAAK,CACtC0mB,iBAAkB,SAAC7zB,EAAM0Z,EAAOvb,GAC9BgP,EAASwG,aAAO3T,EAAM0Z,EAAOvb,QAW9B+O,EA7MsB,SAAC,GAOnB,IANLqa,EAMI,EANJA,SACAf,EAKI,EALJA,aACAkC,EAII,EAJJA,cACAhC,EAGI,EAHJA,gBACAD,EAEI,EAFJA,SACGtlB,EACC,yFACEtF,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAKF+a,EAGE3V,EAHF2V,qBACAgB,EAEE3W,EAFF2W,wBACA+b,EACE1yB,EADF0yB,iBASIsB,EAAwB,SAAA9nB,GAC5B,IAAMwV,EAAM/K,EAAwByC,OAAOxD,UAAU3H,MACnD,SAAAyT,GAAG,OAAIA,EAAInmB,KAAO2Q,EAAK3Q,MAGzB,GAAImmB,EACF,OAAOA,EAAIpL,WAGb,IAAMV,EAAYe,EAAwByC,OAAOxD,UAC3Cqe,EAAU7b,OAAOC,KAAKnM,EAAKsJ,MAAM8C,QAAO,SAAAC,GAAK,OAAIrM,EAAKsJ,KAAK+C,MAEjE,IAAK,IAAIyK,KAAKpN,EACZ,GAAIA,EAAUse,eAAelR,GAAI,CAC/B,IAAM9W,EAAO0J,EAAUoN,GAIvB,GAHiB9W,EAAKsJ,KAAK8C,QACzB,SAACoJ,EAAKzW,GAAN,OAAgByW,IAAQuS,EAAQhpB,MAErBhO,SAAWg3B,EAAQh3B,OAC9B,OAAOiP,EAAKoK,WAKlB,MAAO,CACL,CACEC,YAAa,QACbC,IAAK,IACLC,IAAK,IACLC,IAAK,OAmBLyd,EAAqB,WACzB,IAAMve,EAAS,YAAOD,EAAqByD,OAAOxD,WAC9Cwe,EAAe,GAMnB,OAJAxe,EAAU7K,KAAI,SAAAmB,GAAI,OAChBkoB,EAAazjB,KAAb,MAAAyjB,EAAY,YAAShc,OAAOC,KAAKnM,EAAKsJ,MAAM8C,QAAO,SAAAvF,GAAG,OAAI7G,EAAKsJ,KAAKzC,WAG/DqhB,GAoCT,OACE,6BACE,kBAACvB,GAAA,EAAD,CAAMzM,SAAUf,GAnCL,SAAAjM,GACb,IAAMpW,EAASmW,GAASC,GAExB,GAAIhB,OAAOC,KAAKrV,GAAQ/F,OACtB,MAAM,IAAI61B,KAAgB9vB,GAG5B,IAAIwS,EAAO4D,EAAOxD,UAAU7K,KAAI,SAAAmB,GAAI,MAAK,CACvC3Q,GAAI2Q,EAAK3Q,GACTia,KAAM4C,OAAOC,KAAKnM,EAAKsJ,MAAM8C,QAAO,SAAAC,GAAK,OAAIrM,EAAKsJ,KAAK+C,MACvDjC,WAAY0d,EAAsB9nB,OAG9B8mB,EAAkBxd,EAAKzK,KAAI,SAAAmB,GAC/B,IAAMoK,EAAapK,EAAKoK,WACxB,MAAO,CACL/a,GAAIsa,OACJL,KAAMtJ,EAAKsJ,KACXgB,IAAMF,GAAcA,EAAW,GAAX,KAAyB,IAC7CG,IAAMH,GAAcA,EAAW,GAAX,KAAyB,IAC7CI,IAAMJ,GAAcA,EAAW,GAAX,KAAyB,QAIjDoc,EAAiB,kBAAmB,OAAQM,GAC5CN,EAAiB,0BAA2B,YAAald,GACzD+R,EAAc,CACZ3R,UAAWJ,IAGb4Q,EAAShN,OAML,yBAAKhe,UAAWV,EAAQ+e,KACtB,yBAAKre,UAAWV,EAAQgf,QACtB,yBAAKte,UAAWV,EAAQkf,mBACtB,kBAACyM,GAAA,EAAD,CACErT,KAAK,eACL5Q,MAAM,eACNvC,UAAWuc,MAGf,kBAAC,GAAD,CAAgB2D,KAAK,mFACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAGjC,yBAAKze,UAAWV,EAAQgf,QACtB,yBAAKte,UAAWV,EAAQ43B,aACtB,yBAAKl3B,UAAWV,EAAQ83B,oBACtB,kBAACnM,GAAA,EAAD,CACErT,KAAK,eACLlP,cAAc,EACdD,UAAW,EACXM,YAAY,SACZ/B,MAAM,gBACNvC,UAAW8D,MAIf,kBAAC,GAAD,CAAgBoc,KAAK,2BACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAGjC,yBAAKze,UAAWV,EAAQ63B,iBACtB,kBAAClM,GAAA,EAAD,CACErT,KAAK,uBACLgT,KAAM,CAAC,UAAW,QAAS,OAAQ,SACnCnmB,UAAWqzB,QAMnB,kBAACmB,GAAA,EAAD,CACErhB,KAAK,YACLnT,UAAWy0B,GACXC,oBAAoB,EACpBC,kBAAmB,EACnBhX,IA1Ga,SAACiX,EAAQl5B,GAC5Bk5B,EAAO9jB,KAAK,CACV6E,KAAMrB,GACN2B,qBAAsB,CACpB,CACEC,UAAWhC,OACXiC,SAAU,KACVC,SAAU,UAGd1a,GAAIA,KAiGAm5B,SAAU,SAAAxoB,GAAI,OApJS,SAAAA,GAC7B,OAAOkM,OAAOC,KAAKnM,EAAKsJ,MACrB8C,QAAO,SAAAvF,GAAG,OAAI7G,EAAKsJ,KAAKzC,MACxBhI,KAAI,SAAAgI,GAAG,OAAInY,EAAEmY,MACb4hB,KAAK,MAgJgBC,CAAuB1oB,IACzC2oB,QAAQ,WACRC,WAAW,gBACX74B,SAAU,SAACsc,EAAOtN,GAAR,OACR,kBAAC,GAAD,CACEsN,MAAOA,EACPtN,MAAOA,EACP8pB,aAAcZ,SAKpB,kBAAC,GAAD,CACE3N,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,UCvOPptB,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5CqhB,IAAI,aACFrZ,QAAS,OACTC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACf8xB,SAAU,OACVlyB,MAAO,OACPpH,QAAQ,kBAGZ6gB,kBAAkB,aAChBzZ,MAAO,QACPQ,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGX0Z,SAAU,CACR5gB,SAAU,OACVQ,UAAW,OACXL,MAAO,eCTLgsB,GAAgB,CACpB/P,aAAc,CACZC,UAAWvB,OACXwB,QAAS,OAoDEyP,gBAAU,CACvBnmB,KAAM,mBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,kBALaJ,CAMZjZ,YAAQ,MAZgB,SAAAC,GAAQ,MAAK,CACtC0mB,iBAAkB,SAAC7zB,EAAM0Z,EAAOvb,GAC9BgP,EAASwG,aAAO3T,EAAM0Z,EAAOvb,QAU9B+O,EAtDkB,SAAC,GAMf,IALLqa,EAKI,EALJA,SACAf,EAII,EAJJA,aACAE,EAGI,EAHJA,gBACAD,EAEI,EAFJA,SACAoN,EACI,EADJA,iBAEMh4B,EAAUxC,KAShB,OACE,6BACE,0BAAMkuB,SAAUf,GATL,SAAAjM,GACbsZ,EAAiB,kBAAmB,MAAO,KAC3CA,EAAiB,kBAAmB,MAAO,KAC3CA,EAAiB,kBAAmB,MAAO,KAC3CtM,EAAShN,OAML,yBAAKhe,UAAWV,EAAQ+e,KACtB,yBAAKre,UAAWV,EAAQkf,mBACtB,kBAACyM,GAAA,EAAD,CACErT,KAAK,eACL5Q,MAAM,eACNvC,UAAWuc,MAGf,kBAAC,GAAD,CAAgB2D,KAAK,mFACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAGjC,kBAAC,GAAD,CACE2M,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,U,WCvDPptB,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5C48B,QAAS,CACPC,cAAe,QAEjB58B,MAAO,CACLU,QAASX,EAAM8Q,QAAQ,GACvBvQ,SAAU,SAEZsD,SAAU,CACRmE,QAAS,eACT,UAAW,CACTkJ,OAAQ,gBC+CC4rB,GApDQ,SAAC,GAAwB,IAAtBj5B,EAAqB,EAArBA,SAAU8jB,EAAW,EAAXA,KAC5BrlB,EAAUxC,KAD6B,EAEjCyC,cAALC,EAFsC,sBAGb2R,IAAMrQ,SAAS,MAHF,mBAGtC2Q,EAHsC,KAG5BC,EAH4B,KASvCqoB,EAAqB,WACzBroB,EAAY,OAGRzS,EAAOiW,QAAQzD,GAErB,OACE,6BACE,yBACEzR,UAAWV,EAAQuB,SACnBm5B,YAAW/6B,EAAO,kCAA+BgqB,EACjDgR,gBAAc,OACdC,aAhBoB,SAAAlmB,GACxBtC,EAAYsC,EAAMC,gBAgBdkmB,aAAcJ,GAEbl5B,GAGH,kBAACu5B,GAAA,EAAD,CACEj6B,GAAG,qBACHH,UAAWV,EAAQs6B,QACnBt6B,QAAS,CACPrC,MAAOqC,EAAQrC,OAEjBgC,KAAMA,EACNwS,SAAUA,EACV4oB,aAAc,CACZC,SAAU,SACVC,WAAY,UAEdC,gBAAiB,CACfF,SAAU,MACVC,WAAY,UAEdp7B,QAAS46B,EACTU,qBAAmB,GAEnB,kBAACr0B,EAAA,EAAD,eAAgB5G,EAAEmlB,Q,sBCpDb7nB,GAAYC,YAAW,CAClCka,QAAS,CAEPrY,SAAU,UAEZ87B,WAAY,CAEV/8B,QAAS,qBACTK,MAAO,OACP,UAAW,CACTd,gBAAiB,gBAGrBy9B,mBAAoB,CAClB38B,MAAO,sBACPb,OAAQ,gBAEV6J,MAAO,CACLzB,aAAc,EACdvH,MAAO,UACPiJ,cAAe,YACfpJ,SAAU,GACVC,WAAY,OACZoJ,cAAe,UACftI,SAAU,SACVg8B,UAAW,OAEX,gBAAiB,CACf58B,MAAO,YAGXmJ,UAAW,CAEThK,OAAQ,oBACRE,aAAc,MACdW,MAAO,UACPH,SAAU,OACV,UAAW,CACTV,OAAQ,sBAGZ09B,kBAAmB,CACjB19B,OAAQ,oBACR,UAAW,CACTA,OAAQ,sBAGZ29B,SAAU,CACR39B,OAAQ,oBACRQ,QAAS,IACTL,SAAU,QACVoB,UAAW,iCACXrB,aAAc,OAEhB09B,aAAc,CACZ/8B,MAAO,UACP,UAAW,CACTA,MAAO,YAGXuJ,MAAO,CACL7I,UAAW,OACXvB,OAAQ,oBACR,UAAW,CACTA,OAAQ,sBAGZ69B,iBAAkB,CAChBh2B,QAAS,UC8BE8yB,GAvFE,SAAC,GAaX,IAZLtwB,EAYI,EAZJA,MACAgB,EAWI,EAXJA,iBACAoiB,EAUI,EAVJA,KACAzN,EASI,EATJA,MACAnd,EAQI,EARJA,UACAgH,EAOI,EAPJA,MACA+B,EAMI,EANJA,YACAkyB,EAKI,EALJA,eACAC,EAII,EAJJA,gBACAC,EAGI,EAHJA,gBAGI,IAFJhzB,gBAEI,aADJa,KAAQC,EACJ,EADIA,QAAS1B,EACb,EADaA,MAAO2B,EACpB,EADoBA,aAElB5J,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAIE8S,EAJF,KAI0BnH,SAE9B,OACE,kBAACiwB,GAAA,EAAD,CACEp7B,UAAWsG,KAAWhH,EAAQ2X,QAASjX,GACvCmI,SAAUA,GAETnB,GACC,kBAACiB,GAAA,EAAD,CACEjI,UAAWV,EAAQ0H,MACnBkB,QAAO,UAAKlB,EAAL,mBACP1H,QAAS,CACP6I,SAAU7I,EAAQoI,gBAGnBlI,EAAEwH,IAGP,kBAACq0B,GAAA,EAAD,CACEz5B,MAAO4F,EAAM5F,MACbwH,SAAU5B,EAAM4B,SAChB9J,QAAS,CACPc,KAAMkG,KAAWhH,EAAQo7B,WAAYQ,GACrCnU,KAAMoU,EACNhzB,SAAU7I,EAAQq7B,oBAEpBW,cAAY,EACZC,UAAW,CACTj8B,QAAS,CACPsrB,KAAMtrB,EAAQw7B,WAGlBtzB,MACE,kBAACY,GAAA,EAAD,CACE9I,QAAS,CACPc,KAAMkG,KAAWhH,EAAQ6H,UAAW8zB,EAApB,eACb37B,EAAQiI,OAAS0B,GAAWC,IAAiB3B,IAEhDY,SAAU7I,EAAQu7B,sBAKvB9xB,GACC,kBAACoM,GAAA,EAAD,CAAUvT,MAAM,GAAGuG,UAAQ,EAACnI,UAAWV,EAAQ07B,kBAC5Cx7B,EAAEuJ,IAGN6hB,EAAKjb,KAAI,SAACmB,EAAMjB,GAAP,OACR,kBAACsF,GAAA,EAAD,CACEwC,IAAK9H,EACLjO,MAAOub,EAAQrM,EAAI,GAASA,EAC5BxR,QAAS,CAAEc,KAAMd,EAAQy7B,eAExB5d,EACwB,WAArB7K,GACA0K,OAAOC,KAAKnM,EAAI,WAAejP,OAC7BiP,EAAI,UAAcqM,GAClBrM,EAAKqM,GACP3d,EAAEsR,SAIVtI,IAAqBS,GAAWC,IAAiB3B,GACjD,kBAACe,GAAA,EAAD,CAAgBf,OAAK,GAAE/H,EAAE+H,M,WC3ElBzK,GAjBGC,YAAW,CAC3BoK,UAAW,CACT,YAAa,CACXhK,OAAQ,GAEV,UAAW,CACT,YAAa,CACXivB,aAAc,mCAIpB5kB,MAAO,CACL3J,SAAU,OACVG,MAAO,aC4BIw9B,GAnCc,SAAC,GAA+C,IAA7CpyB,EAA4C,EAA5CA,SAAUxH,EAAkC,EAAlCA,MAAO6T,EAA2B,EAA3BA,MAAOzO,EAAoB,EAApBA,MAAOwO,EAAa,EAAbA,OACvDlW,EAAUxC,KAD0D,EAGtCqU,IAAMrQ,SAAS,IAHuB,mBAGnE26B,EAHmE,KAGvDC,EAHuD,KAKpEC,EAAgBC,aAAoB,CACxC/nB,UAAW,SAAAke,GAAM,OAAIA,EAAOvc,MAG9B,OACE,kBAACkc,GAAA,EAAD,CACEpyB,QAAS,CAAE6H,UAAW7H,EAAQ6H,UAAWK,MAAOlI,EAAQkI,OACxD5F,MAAO6T,EAAM5T,SAAWD,GAAmB,IAAVA,GAAe6T,EAAM7T,GAASA,EAC/DwH,SAAU,SAAC4K,EAAON,GAChBtK,EAASsK,EAAS9R,QAEpB65B,WAAYA,EACZI,cAAe,SAAC7nB,EAAO8nB,GACrBJ,EAAcI,IAEhB58B,QAASuW,EACTwd,eAAgB,SAAAlB,GACd,OAAKA,EACEA,EAAO/qB,GADM,IAGtB20B,cAAeA,EACfx7B,GAAG,oBACH47B,kBAAgB,EAChB9J,YAAa,SAAAC,GAAM,OACjB,kBAACC,GAAA,EAAD,eAAWppB,YAAY,kBAAqBmpB,QCnCvCp1B,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5Cia,QAAS,CACP1R,aAAc,QAEhByB,MAAO,CACLhC,QAAS,QACTO,aAAc,MACdvH,MAAO,UACPH,SAAU,GACVE,WAAY,MACZD,WAAY,QAEdk+B,qBAAsB,CACpBx9B,YAAa,QAEfshB,aAAc,GACdC,QAAS,CACP/hB,MAAO,WAETgiB,iBAAkB,CAChBhiB,MAAO,UACPd,gBAAiB,WAEnB+iB,aAAc,CACZjiB,MAAOhB,EAAMuB,OAAOP,MACpBH,SAAU,QAEZo+B,cAAe,CACbj3B,QAAS,OACTpG,SAAU,YAEZuJ,SAAU,CACRnK,MAAO,eC+DI+5B,GAnFc,SAAC,GASvB,IARLvwB,EAQI,EARJA,MACAtJ,EAOI,EAPJA,MACAy7B,EAMI,EANJA,aACAuC,EAKI,EALJA,iBACAl8B,EAII,EAJJA,UACAgH,EAGI,EAHJA,MACA4yB,EAEI,EAFJA,QAEI,IADJ5wB,KAAQC,EACJ,EADIA,QAAS1B,EACb,EADaA,MAEXjI,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIE0jB,EAAkB,SAAA7Z,GACtB,IAAI6yB,EAAJ,CAEA,IAAMprB,EAAOzH,EAAEC,OAAO1H,MAChBu6B,EAAY9yB,EAAEC,OAAOyW,QACrBqc,EAAQ,eAAQ50B,EAAM5F,OAE5Bw6B,EAAStrB,GAAQqrB,EAEjB30B,EAAM4B,SAASgzB,KAWjB,OACE,yBAAKp8B,UAAWsG,KAAWhH,EAAQ2X,QAASjX,IAC1C,2BAAOA,UAAWV,EAAQ0H,OAAQxH,EAAEtB,IAEpC,kBAACwoB,GAAA,EAAD,CAAW3R,aAAW,WAAWsJ,KAAG,GACjCrB,OAAOC,KAAKzV,EAAM5F,OAAO+N,KAAI,SAAC0sB,EAASxsB,GAAV,OAC5B,kBAAC8W,GAAA,EAAD,CACErnB,QAAS,CACPc,KAAMd,EAAQ08B,qBACd7zB,SAAU7I,EAAQ6I,UAEpBwP,IAAK9H,EACLjO,MAAOy6B,EACPl0B,UArBUm0B,EAqBWD,EArBPz6B,EAqBgB4F,EAAM5F,MAAMy6B,KApB7C1C,KAEIA,EAAa9mB,MACpB,SAAA/B,GAAI,QAAMlP,GAASs6B,IAAqBprB,IAASwrB,MAkB3CzV,QACE,kBAACC,GAAA,EAAD,CACE/G,QAASvY,EAAM5F,MAAMy6B,GACrBjzB,SAAU8Z,EACV6D,KACE,kBAAC,KAAD,CAA0B/mB,UAAWV,EAAQ2gB,eAE/C+G,YAAa,kBAAC,KAAD,CAAchnB,UAAWV,EAAQ2gB,eAC9CjiB,MAAM,UACNsB,QAAS,CACPc,KAAMd,EAAQwgB,aACdC,QAASzgB,EAAQygB,QACjB5X,SAAU7I,EAAQ0gB,oBAIxBhZ,MACE,yBAAKhH,UAAWV,EAAQ28B,eACrBj1B,EACoB,kBAAVA,EACLxH,EAAEwH,GACFA,EACFxH,EAAE68B,GACLzC,GAAWA,GAGhBhT,eAAe,QAhDN,IAAC0V,EAAI16B,MAqDnBqH,GAAW1B,GAAS,kBAACe,GAAA,EAAD,CAAgBf,OAAK,GAAE/H,EAAE+H,M,sFCzFvCzK,GAAYC,aAAW,SAAAC,GAAK,MAAG,CAC1Cia,QAAS,CACP1R,aAAc,OAEhB8Y,IAAK,CACHrZ,QAAS,OACTC,eAAgB,iBAElByzB,aAAa,aACX3zB,MAAO,QACPQ,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BiI,WAAY,SAGhB62B,QAAS,CACPx+B,WAAY,MACZC,MAAO,WAETw+B,aAAc,CACZx3B,QAAS,OACTE,WAAY,SACZlH,MAAO,WAETy+B,WAAY,CACV5+B,SAAU,OACV6H,WAAY,OAEdtF,KAAM,CACJmF,aAAc,MACd7G,UAAW,OACXvB,OAAQ,oBACRE,aAAc,EACd,WAAY,CACV2H,QAAS,QAEX,eAAgB,CACdO,aAAc,SAGlBm3B,aAAc,CACZz+B,OAAQ,qBACR,eAAgB,CACdsH,aAAc,oBAGlBo3B,YAAa,CACXh/B,QAAS,gBACTmN,UAAW,mBAEb8xB,mBAAoB,CAClBC,MAAO,MAETC,eAAgB,CACdj/B,SAAU,OACVG,MAAO,WAETuxB,WAAY,CACV1xB,SAAU,OACVG,MAAO,WAET++B,qBAAsB,CACpB/3B,QAAS,OACTE,WAAY,SACZD,eAAgB,gBAChBF,MAAO,OACPW,WAAY,QAEds3B,oBAAqB,CACnB/+B,OAAQ,oBAEVg/B,iBAAkB,CAChBt/B,QAAS,iBAEX4J,MAAO,CACLpK,OAAQ,yBCvDN+/B,GAAe,SAAC,GAAwC,IAAtCC,EAAqC,EAArCA,gBAAiB9D,EAAoB,EAApBA,OAAQxpB,EAAY,EAAZA,MAAY,EAC/CtQ,cAALC,EADoD,oBAErDF,EAAUxC,KAEhB,IAAKqgC,EAAiB,OAAO,KAE7B,IAAMX,EAAeW,EAAgB9D,EAAOnE,IAAIrlB,IAChD,OAAK2sB,EAGH,kBAACY,GAAA,EAAD,CACEn9B,QAAS,SAAAoJ,GAAC,OAAIA,EAAEojB,mBAChB4Q,KAAMb,EAAac,KACnB58B,QAAS,QACT4I,OAAO,SACPtJ,UAAWV,EAAQk9B,cAElBh9B,EAAEg9B,EAAat+B,OAPlB,IAO0B,kBAAC,KAAD,CAAY8B,UAAWV,EAAQm9B,cAVjC,MAqLbvD,GAtKe,SAAC,GAexB,IAdLr4B,EAcI,EAdJA,SACAs4B,EAaI,EAbJA,mBACAC,EAYI,EAZJA,kBACAE,EAWI,EAXJA,SACA6D,EAUI,EAVJA,gBACA9D,EASI,EATJA,OACAjX,EAQI,EARJA,IACAoQ,EAOI,EAPJA,OACA+K,EAMI,EANJA,UACAC,EAKI,EALJA,qBACAC,EAII,EAJJA,kBACAz0B,EAGI,EAHJA,KACAywB,EAEI,EAFJA,QACAC,EACI,EADJA,WAEMp6B,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAGE4B,EAAU+P,IAAMsX,WAAW/mB,GACzB6F,EAAwByB,EAAxBzB,MAAO2B,EAAiBF,EAAjBE,aAJX,EAM4BiI,IAAMrQ,SAAS,IAN3C,mBAMG48B,EANH,KAMaC,EANb,KAQJxsB,IAAM+C,WAAU,WACd,GAAImlB,EAAOuE,SAAS/7B,OAAQ,CAC1B,IAAMg8B,EAAaxE,EAAOnE,IAAI,GAC9ByI,EAAY,eAAKD,EAAN,eAAiBG,EAAW19B,IAAK,QAE7C,IA2DH,OACE,yBAAKH,UAAWV,EAAQ2X,SACrBkiB,GACC,yBAAKn5B,UAAWsG,KAAWhH,EAAQ+e,IAAK/e,EAAQo5B,gBAC5C8E,GACA,kBAAC,GAAD,CACEzW,KAAM,kBAAC,KAAD,MACNpC,KAAMnlB,EAAE,WACRmtB,MA7DS,WACnB,IAAMxsB,EAAKsa,OACXkjB,EAAY,eAAKD,EAAN,eAAiBv9B,GAAK,KACjCiiB,EAAIiX,EAAQl5B,OAwCRk5B,EAAOx3B,OAAS,EAAIu3B,KACfC,EAAOx3B,aAAgConB,IAAtBmQ,IAqBlB,kBAAC,GAAD,CACErS,KAAM,kBAAC,KAAD,MACNpC,KAAMnlB,EAAE,cACRmtB,MA9Ce,WACzBvrB,EAAQ,CACNlD,MAAM,GAAD,OAAKsB,EAAE,mCAAP,YAA6CA,EAAEk6B,GAA/C,KACLj6B,YAAag+B,EACb99B,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJ,GAA0B,IAAtBkmB,GAA2BA,EAAmB,CAChD,IAAM0E,EAAYzE,EAAOnE,IAAIkE,GAC7BC,EAAOkE,YACPlE,EAAO9jB,KAAKuoB,QAERP,GAAWA,IACflE,EAAOkE,eAGVpU,OAAM,mBAmCNkQ,EAAO1pB,KAAI,SAACwN,EAAOtN,GAClB,IAAMkuB,EAAW1E,EAAOnE,IAAIrlB,GAE5B,OACE,kBAACmuB,GAAA,EAAD,CACErmB,IAAG,UAAK9H,EAAL,YAAckuB,EAAS59B,IAC1Bu9B,SAAUA,EAASK,EAAS59B,MAAO,EACnCiJ,SAAU,SAAC4K,EAAOiqB,GAAR,OArFI,SAACA,EAAYC,GACnCP,EAAY,eAAKD,EAAN,eAAiBQ,EAAUD,KAqF5BE,CAAgBF,EAAYF,EAAS59B,KAEvCb,QAAS,CACPc,KAAMkG,KAAWhH,EAAQc,KAAT,eACbd,EAAQiI,MAAQ2B,GAAgB3B,GAASA,EAAMsI,KAElD6tB,SAAUp+B,EAAQo9B,eAGpB,kBAAC0B,GAAA,EAAD,CACE9+B,QAAS,CACPc,KAAMd,EAAQq9B,YACdr3B,QAAShG,EAAQ09B,oBACjBqB,WAAY/+B,EAAQs9B,oBAEtByB,WAAY,kBAAC,KAAD,CAAgBr+B,UAAWV,EAAQw9B,iBAC/CwB,gBAAc,kBACdn+B,GAAG,kBAEH,yBAAKH,UAAWV,EAAQy9B,sBACtB,6BACE,kBAAC32B,EAAA,EAAD,CAAY1F,QAAS,QAASV,UAAWV,EAAQi9B,SAC9C/8B,EAAE85B,EAASD,EAAOnE,IAAIrlB,MAEzB,kBAAC,GAAD,CACEwpB,OAAQA,EACRxpB,MAAOA,EACPstB,gBAAiBA,OA7D5BhE,IACDE,EAAOx3B,OAAS,KACXw3B,EAAOx3B,aAAgConB,IAAtBmQ,IA+DZ,kBAACr5B,EAAA,EAAD,CACEgV,aAAW,SACX9U,QAAS,SAAAoJ,GAAC,OA7GJ,SAACA,EAAGwG,GAC1BxG,EAAEojB,kBAEFrrB,EAAQ,CACNlD,MAAM,GAAD,OAAKsB,EAAE,mCAAP,YAA6CA,EAAEi6B,GAA/C,KACLh6B,YAAag+B,EACb99B,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACAsf,GAAQA,EAAO6G,EAAOnE,IAAIrlB,IAC9BwpB,EAAO7G,OAAO3iB,MAEfsZ,OAAM,eAgGqBuD,CAAgBrjB,EAAGwG,KAEjC,kBAAC,KAAD,CAAmB7P,UAAWV,EAAQiwB,gBAK9C,kBAACgP,GAAA,EAAD,CAAkBj/B,QAAS,CAAEc,KAAMd,EAAQ29B,mBACxCp8B,EAASsc,EAAOtN,EAAO7G,EAAM+0B,UClJ7BjhC,GAtDGC,YAAW,CAC3BmB,MAAO,CACLH,WAAY,QAEdygC,MAAO,CACL7gC,QAAS,IACTM,OAAQ,eACRS,UAAW,OACXN,UAAW,oBACX,gBAAiB,CACff,aAAc,KAEhB,eAAgB,CACdA,aAAc,IACd+uB,aAAc,qBAEhB,WAAY,CACVpnB,QAAS,SAGby5B,aAAc,CACZ3zB,UAAW,kBACXnN,QAAS,KAEXq/B,oBAAqB,CACnB/+B,OAAQ,KAEVygC,qBAAsB,CACpBzgC,OAAQ,gBAEVogC,WAAY,CACV1gC,QAAS,IACTM,OAAQ,KAEV8oB,KAAM,CACJlpB,SAAU,OACVG,MAAO,WAET2gC,aAAc,CACZhhC,QAAS,aACTwH,cAAe,UAEjBM,MAAO,CACLV,MAAO,QACPD,OAAQ,QACRoqB,eAAgB,QAChBC,iBAAkB,YAClBC,mBAAoB,SACpB/xB,aAAc,MACdH,gBAAiB,UACjBqI,aAAc,UC4DHq5B,GAjGc,SAAC,GAMvB,IALLhU,EAKI,EALJA,KACAiU,EAII,EAJJA,gBACAC,EAGI,EAHJA,qBACAC,EAEI,EAFJA,uBACAC,EACI,EADJA,kBAEM1/B,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIEy/B,EAAW9tB,IAAM+tB,OAAO,IAuB9B,OAJA/tB,IAAM+C,WAAU,WACd+qB,EAASpO,QAAUoO,EAASpO,QAAQsO,MAAM,EAAGvU,EAAK/oB,UACjD,IAGD,6BACG+oB,EAAKjb,KAAI,SAACmB,EAAMjB,GAAP,OACR,kBAACmuB,GAAA,EAAD,CACErmB,IAAK7G,EAAK5S,MACVoB,QAAS,CAAEc,KAAMd,EAAQk/B,OACzBK,mBACEC,GAAyBjvB,IAAegvB,EAE1C7N,IAAK,SAAAsL,GAAE,OAAK2C,EAASpO,QAAQhhB,GAASysB,IAEtC,kBAAC8B,GAAA,EAAD,CACE9+B,QAAS,CACPc,KAAMd,EAAQm/B,aACdn5B,QAAShG,EAAQ09B,oBACjBqB,WAAY/+B,EAAQ++B,WACpBX,SAAUp+B,EAAQo/B,sBAEpBL,WAAY,kBAAC,KAAD,CAAgB/+B,QAAS,CAAEc,KAAMd,EAAQynB,QACrDuX,gBAAc,kBACdn+B,GAAG,iBACHF,QAAS,kBA1CI,SAAAm/B,GACrB,IAAMpO,EAAMiO,EAASpO,QAAQuO,GAExBpO,IAAOA,EAAIqO,UAKhBrO,EAAIqO,UAAW,EAEfvc,YAAW,WACTkO,EAAIsO,eAAe,CACjBC,SAAU,aAEX,MAVDvO,EAAIqO,UAAW,EAsCMC,CAAezvB,KAE9B,kBAACzJ,EAAA,EAAD,CACE1F,QACEq+B,GAAsB,QAExBz/B,QAAS,CAAEc,KAAMd,EAAQpB,QAExBsB,EAAEsR,EAAK5S,SAGZ,kBAACqgC,GAAA,EAAD,CACEj/B,QAAS,CACPc,KAAMkG,KAAWhH,EAAQq/B,aAAcK,MAGxB,kBAAfluB,EAAK5S,OACU,aAAf4S,EAAK5S,OACU,iBAAf4S,EAAK5S,QACL,kBAAC,GAAD,CAAc4S,KAAMA,EAAKrR,YAAYmF,MAAM/D,WAG7B,aAAfiQ,EAAK5S,OAAwB4S,EAAKrL,OACjC,yBACEzF,UAAWV,EAAQmG,MACnBqC,MAAO,CACLopB,gBAAgB,OAAD,OAASpgB,EAAKrL,MAAd,OAGhB,IAGW,kBAAfqL,EAAK5S,OACW,aAAf4S,EAAK5S,OACU,iBAAf4S,EAAK5S,OACL4S,EAAKrR,mBCtGN3C,GAAYC,aAAW,SAAAC,GAAK,MAAI,CAC3CoD,KAAM,CACJzC,QAAS,QACTE,SAAU,OACVC,WAAY,OACZE,MAAO,UACP,UAAU,aACRd,gBAAiB,SACjBF,EAAMQ,YAAYC,KAAK,MAAO,CAC9ByH,WAAY,YAIhBs6B,UAAW,CACT3hC,SAAU,OACVG,MAAO,eCDIyhC,GAVQ,SAAC,GAA2B,IAAzB9a,EAAwB,EAAxBA,KAAMoC,EAAkB,EAAlBA,KAAM4F,EAAY,EAAZA,MAC9BrtB,EAAUxC,KAEhB,OACE,kBAAC2D,EAAA,EAAD,CAAQ++B,UAAWzY,EAAMznB,QAASA,EAASW,QAAS0sB,GACjDhI,ICTM7nB,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5CqhB,IAAI,aACFrZ,QAAS,OACTC,eAAgB,gBAChBM,aAAc,OACd8B,cAAe,OACf+kB,aAAc,oBACd,eAAgB,CACdA,aAAc,EACd7mB,aAAc,EACd8B,cAAe,IAEhBrK,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfD,WAAY,eAGhBw6B,QAAQ,aACN16B,QAAS,OACTC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BwH,eAAgB,aAChBF,MAAO,SAGX7G,MAAM,aACJH,WAAY,IACZwH,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,MACd1H,SAAU,SAGdoZ,QAAS,CACPlS,MAAO,QAET+Q,QAAQ,aACNvQ,aAAc,OACdT,OAAQ,MACR5H,gBAAiB,WAChBF,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,SAGlBgqB,WAAW,aACT1xB,SAAU,OACVQ,UAAW,QACVrB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BY,UAAW,OACXR,SAAU,aChBD8hC,GAzBkB,SAAC,GAA6B,IAA3BxiB,EAA0B,EAA1BA,MAAOwc,EAAmB,EAAnBA,aACnCr6B,EAAUxC,KAD4C,EAEhDyC,cAALC,EAFqD,oBAI5D,OACE,yBAAKQ,UAAWV,EAAQ2X,SACtB,kBAACgU,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,SACJjf,MAAM,gBACNy7B,aAAcA,EACdl1B,UAAWszB,KAEb,yBAAK/3B,UAAWV,EAAQwW,SAAU,IAClC,kBAAC1P,EAAA,EAAD,CAAYpG,UAAWV,EAAQpB,MAAOwC,QAAQ,SAC3ClB,EAAE,0BAEL,kBAACy5B,GAAA,EAAD,CACErhB,KAAI,UAAKuF,EAAL,yBACJic,kBAAmB,EACnB30B,UAAWm7B,OC3BN9iC,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5CqhB,IAAI,aACFrZ,QAAS,OACTC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfD,WAAY,eAGhB26B,gBAAgB,aACdx4B,cAAe,OACf9B,aAAc,OACd6mB,aAAc,oBACd,eAAgB,CACd/kB,cAAe,EACf9B,aAAc,EACdpI,OAAQ,IAETH,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B4J,cAAe,OACf9B,aAAc,SAGlBgqB,WAAW,aACT1xB,SAAU,OACVQ,UAAW,OACXL,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BY,UAAW,OACXR,SAAU,SAGd66B,aAAa,aACX3zB,MAAO,QACPQ,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPQ,aAAc,OACdu6B,WAAa,SAGjBC,kBAAkB,aAChBh7B,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPQ,aAAc,SAGlBy6B,aAAa,aACXj7B,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPQ,aAAc,SAGlB06B,gBAAgB,aACdl7B,MAAO,QACP1G,UAAW,QACVrB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACP1G,UAAW,aCNF0f,GArDE,SAAAC,GACf,IAAMpW,EAAS,GAEf,GAAIoW,EAAOxD,WAAawD,EAAOxD,UAAU3Y,OAAQ,CAC/C,IAAMm2B,EAAkB,GAExBha,EAAOxD,UAAUyd,SAAQ,SAAC3R,EAAK4R,GAC7B,IAAMC,EAAa,GAEnB,GAAI7R,EAAI5L,sBAAwB4L,EAAI5L,qBAAqB7Y,OAAQ,CAC/D,IAAMu2B,EAAkB,GAEc9R,EAAI5L,qBAAqB/K,KAC7D,SAAAmB,GAAI,sBACCA,EADD,CAEF6J,UAAWhC,KAAO7H,EAAK6J,WAAWmJ,OAAO,cAIfnU,KAAI,SAACmB,EAAMovB,GACvC,IAAM1H,EAAa,GAEf1nB,EAAK6J,WAAgC,iBAAnB7J,EAAK6J,YACzB6d,EAAW7d,UAAY,sBACvByd,EAAgB8H,GAAa1H,MAIjClS,EAAI5L,qBAAqBud,SAAQ,SAACK,EAAMC,GACtC,IAAMC,EAAa,GAEfzb,GAA4Bub,EAAK3d,WAAa,IAAI,KACpD6d,EAAW7d,UAAY,mBACvByd,EAAgBG,GAAaC,OAI7BJ,EAAgBv2B,QAAUu2B,EAAe,UAC3CD,EAAWzd,qBAAuB0d,EAClCJ,EAAgBE,GAAYC,OAK9BH,EAAgBn2B,SAClB+F,EAAO4S,UAAYwd,EACnBpwB,EAAO4S,UAAP,eAAwBwd,EAAxB,CAAyCS,OAAO,eAAMT,MAI1D,OAAOpwB,GC2EMgiB,gBAAU,CACvBnmB,KAAM,uBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,aALa6L,EA7GM,SAAC,GAIf,IAHLyP,EAGI,EAHJA,OACAD,EAEI,EAFJA,kBAEI,IADJpwB,KAAQE,EACJ,EADIA,aAAc3B,EAClB,EADkBA,MAEhBjI,EAAUxC,KACVsE,EAAU+P,IAAMsX,WAAW/mB,GAF7B,EAGQnC,cAALC,EAHH,oBAuCJ,OACE,6BACE,yBAAKQ,UAAWsG,KAAWhH,EAAQ+e,IAAK/e,EAAQo5B,eAC9C,kBAAC,GAAD,CACE3R,KAAM,kBAAC,KAAD,MACNpC,KAAMnlB,EAAE,WACRmtB,MAxCkB,WACxB0M,EAAO9jB,KAAK,CAAEoF,UAAWhC,OAAUiC,SAAU,KAAMC,SAAU,aA0CxDwe,EAAOx3B,OAAS,GACf,kBAAC,GAAD,CACEklB,KAAM,kBAAC,KAAD,MACNpC,KAAMnlB,EAAE,cACRmtB,MA/BgB,WACxBvrB,EAAQ,CACNlD,MAAO,uCACPyB,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJ,GAA0B,IAAtBkmB,GAA2BA,EAAmB,CAChD,IAAM0E,EAAYzE,EAAOnE,IAAIkE,GAC7BC,EAAOkE,YACPlE,EAAO9jB,KAAKuoB,QAEZzE,EAAOkE,eAGVpU,OAAM,mBAqBNkQ,EAAO1pB,KAAI,SAACwN,EAAOtN,GAAR,OACV,yBAAK8H,IAAK9H,EAAO7P,UAAWV,EAAQugC,iBAClC,yBAAK7/B,UAAWsG,KAAWhH,EAAQ+e,MACjC,yBAAKre,UAAWV,EAAQygC,mBACtB,kBAAC9U,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,cACJnW,MAAM,eACNvC,UAAWknB,MAGf,kBAACV,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,aACJzU,cAAc,EACdD,UAAW,EACXM,YAAY,WACZP,iBAAkBjB,GAASA,EAAMsI,GACjC7I,MAAM,WACNhH,UAAWV,EAAQ0gC,aACnBv7B,UAAW8D,KAEb,yBAAKvI,UAAWV,EAAQ2gC,iBACtB,kBAAChV,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,aACJ3U,kBAAkB,EAClBoiB,KAAM,CAAC,UAAW,QAAS,OAAQ,SACnCnmB,UAAWqzB,MAGduB,EAAOx3B,OAAS,GACf,kBAAC9B,EAAA,EAAD,CACET,QAAS,CAAE6gC,UAAW7gC,EAAQiwB,YAC9B/R,KAAK,QACLzI,aAAW,SACX9U,QAAS,kBAjFM,SAAA4P,GAC3BzO,EAAQ,CACNlD,MAAO,2DACPyB,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJmmB,EAAO7G,OAAO3iB,MAEfsZ,OAAM,eAwEkBiX,CAAqBvwB,KAEpC,kBAAC,KAAD,QAIL3G,GAAgB3B,GAASA,EAAMsI,IAC9B,kBAACvH,GAAA,EAAD,CAAgBf,OAAK,GAAE/H,EAAE+H,EAAMsI,a,mDCtH9B/S,GAAYC,YAAW,CAClCqD,KAAM,CACJ4E,QAAS,OACTG,cAAe,SACfJ,MAAO,QAETiC,MAAO,CACLzB,aAAc,EACdvH,MAAO,UACPiJ,cAAe,YACfpJ,SAAU,GACVC,WAAY,OACZoJ,cAAe,WAEjBm5B,iBAAkB,CAChB55B,OAAQ,IACR7H,SAAU,WACVvB,aAAc,EACdF,OAAQ,oBACR,UAAW,CACTA,OAAQ,sBAGZmjC,aAAc,CACZ1hC,SAAU,WACVf,SAAU,OACV6hB,KAAM,OACN7gB,IAAK,OAEP0I,MAAO,CACLpK,OAAQ,oBACR,UAAW,CACTA,OAAQ,wBCkCCwuB,GAnDI,SAAC,GAMb,IALLnkB,EAKI,EALJA,MAKI,IAJJwB,KAAQC,EAIJ,EAJIA,QAAS1B,EAIb,EAJaA,MAAO2B,EAIpB,EAJoBA,aACxBlC,EAGI,EAHJA,MACAwB,EAEI,EAFJA,iBACAxI,EACI,EADJA,UAEMV,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAQJ,OACE,yBAAKQ,UAAWsG,KAAWhH,EAAQc,KAAMJ,IACvC,kBAACiI,GAAA,EAAD,CACEjI,UAAWV,EAAQ0H,MACnBkB,QAAO,UAAKlB,EAAL,UACP1H,QAAS,CACP6I,SAAU7I,EAAQoI,gBAGnBlI,EAAEwH,IAGL,yBACEhH,UAAWsG,KAAW,qBAAsBhH,EAAQ+gC,iBAA/B,eAClB/gC,EAAQiI,OAAS2B,GAAgBD,IAAY1B,KAGhD,kBAAC,KAAD,CAAyBg5B,MAAOC,MAC9B,kBAAC,KAAD,CACEC,WAAW,EACXC,MAAM,EACN15B,MAAOA,EACPpF,MAAO4F,EAAM5F,MACbwH,SA3Bc,SAAAsX,GACtBlZ,EAAM4B,SAASsX,IA2BPigB,oBAAoB,KAGxB,kBAAC,KAAD,CAAc3gC,UAAWV,EAAQghC,iBAGjC93B,IAAqBS,GAAWC,IAAiB3B,GACjD,kBAACe,GAAA,EAAD,CAAgBf,OAAK,GAAEA,KC5DlBzK,GAAYC,YAAW,CAClCka,QAAS,CACPhZ,OAAQ,eAEV2iC,WAAY,CACV3iC,OAAQ,UAGV4iC,gBAAiB,CACf5iC,OAAQ,eAEVC,MAAO,CACLqH,aAAc,UC2GHu7B,GAxGM,SAAC,GAOf,IANLC,EAMI,EANJA,OACA7U,EAKI,EALJA,iBACA8U,EAII,EAJJA,iBACAhW,EAGI,EAHJA,SACAb,EAEI,EAFJA,gBACAD,EACI,EADJA,SAEM5qB,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIEyhC,EACU,EADVA,EAEW,EAFXA,EAGU,EAOhB,OAJIF,GACF7U,IAGE8U,IAAqBznB,GAErB,yBAAKvZ,UAAWV,EAAQ2X,SACrBiV,IAAqB+U,GACpB,kBAAC,GAAD,CACEjW,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,oBACrCmM,gBAAiBA,EACjBD,SAAUA,IAGbgC,IAAqB+U,GACpB,kBAAC,GAAD,CACEjW,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,oBACrCmM,gBAAiBA,EACjBD,SAAUA,IAGbgC,IAAqB+U,GACpB,kBAAC,GAAD,CACEjW,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,oBACrCmM,gBAAiBA,EACjBD,SAAUA,KAOhB8W,IAAqBznB,GAErB,yBAAKvZ,UAAWV,EAAQ2X,SACrBiV,IAAqB+U,GACpB,kBAAC,GAAD,CACEjW,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,oBACrCmM,gBAAiBA,EACjBD,SAAUA,IAGbgC,IAAqB+U,GACpB,kBAAC,GAAD,CACEjW,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,4BACrCmM,gBAAiBA,EACjBD,SAAUA,IAGbgC,IAAqB+U,GACpB,kBAAC,GAAD,CACEjW,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,oBACrCmM,gBAAiBA,EACjBD,SAAUA,KAQlB,6BACGgC,IAAqB+U,GACpB,yBAAKjhC,UAAWV,EAAQuhC,iBACtB,kBAAC,GAAD,CACE7V,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,oBACrCmM,gBAAiBA,EACjBD,SAAUA,KAIfgC,IAAqB+U,GACpB,yBAAKjhC,UAAWV,EAAQshC,YACtB,kBAACx6B,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,WAEL,kBAAC,GAAD,CACEwrB,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,oBACrCmM,gBAAiBA,EACjBD,SAAUA,OClEPgX,GAzCmB,SAAC,GAK5B,IAJLhV,EAII,EAJJA,iBACAlB,EAGI,EAHJA,SACAb,EAEI,EAFJA,gBACAD,EACI,EADJA,SAEM5qB,EAAUxC,KAEVqkC,EACS,EADTA,EAEY,EAFZA,EAGS,EAGf,OACE,yBAAKnhC,UAAWV,EAAQ2X,SACrBiV,IAAqBiV,GACpB,kBAAC,GAAD,CACEnW,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,oBACrCmM,gBAAiBA,EACjBD,SAAUA,IAGbgC,IAAqBiV,GACpB,kBAAC,GAAD,CACEnW,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,uBACrCmM,gBAAiBA,EACjBD,SAAUA,IAGbgC,IAAqBiV,GACpB,kBAAC,GAAD,CACEnW,SAAU,SAAAhN,GAAM,OAAIgN,EAAShN,EAAQ,oBACrCmM,gBAAiBA,EACjBD,SAAUA,MCmBLnM,GArDE,SAAAC,GACf,IAAMpW,EAAS,GAEf,GAAIoW,EAAO5D,MAAQ4D,EAAO5D,KAAKvY,OAAQ,CACrC,IAAMuY,EAAO4D,EAAO5D,KACd4d,EAAkB,GAExB5d,EAAK6d,SAAQ,SAAC3R,EAAK4R,GACjB,IAAMC,EAAa,GAEbiJ,EAAsB,GAE5B9a,EAAIpL,WAAW+c,SAAQ,SAACoJ,EAAUC,GAChC,IAAMC,EAAiB,GAEnB3kB,GAAWykB,EAASlmB,aAAe,IAAI,IACzComB,EAAc,YAAkB,uBAChCH,EAAoBE,GAAiBC,GAErC5jB,GAAe0jB,EAASlmB,YAAamL,EAAIpL,WAAY,iBAErDqmB,EAAc,YAAkB,0BAChCH,EAAoBE,GAAiBC,GAGnCzjB,GAAmBujB,KACrBE,EAAc,IAAU,QACxBA,EAAc,IAAU,QACxBA,EAAc,IAAU,QACxBH,EAAmB,OAAnB,eACKA,EAAmB,OADxB,eAEGE,EACC,0EAEJF,EAAoBE,GAAiBC,OAIrCH,EAAoBv/B,QAAUu/B,EAAmB,UACnDjJ,EAAU,WAAiBiJ,EAC3BpJ,EAAgBE,GAAYC,MAI5BH,EAAgBn2B,SAClB+F,EAAOwS,KAAO4d,EACdpwB,EAAOwS,KAAP,eAAmB4d,EAAnB,CAAoCS,OAAO,eAAMT,MAIrD,OAAOpwB,GCSMgiB,gBAAU,CACvBnmB,KAAM,kBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,cAzDoB,CACpB5P,KAAM,KAkDOwP,CAOZjZ,aAXqB,SAAAtO,GAAK,MAAK,CAChC2Y,gBAAiB3Y,EAAMoB,KAAKuX,mBAUF,KAAzBrK,EAtDiB,SAAC,GAMd,IALLsZ,EAKI,EALJA,aACAjP,EAII,EAJJA,gBACAmP,EAGI,EAHJA,gBACAD,EAEI,EAFJA,SAGMsX,EAA8B,SAAA3xB,GAClC,IACMqL,EADI,YAAOF,EAAgBgD,OAAO5D,MAChBvK,GAAOqL,WAAWvL,KAAI,SAAAmB,GAAI,OAAIA,EAAKqK,eAC3D,OAAO3B,GAAW0D,QAAO,SAAAuN,GAAC,OAAKvP,EAAW6I,SAAS0G,OAGrD,OACE,6BACE,0BAAMO,SAAUf,GACd,kBAACgP,GAAA,EAAD,CACErhB,KAAK,OACLnT,UAAWy0B,GACXC,oBAAoB,EACpBG,SAAU,SAAAxoB,GAAI,OAAIA,EAAKwV,KACvBzlB,SAAU,SAACsc,EAAOtN,GAAR,OACR,kBAACopB,GAAA,EAAD,CACErhB,KAAI,UAAKuF,EAAL,eACJ1Y,UAAWg9B,GACXC,oBAAqBF,EAA4B3xB,GACjD4pB,QAAQ,QACRC,WAAW,kBAKjB,kBAAC,GAAD,CACEtO,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,UCpDPptB,GAAYC,aAAW,SAACC,GAAD,MAAY,CAC9Cia,QAAS,CACPlS,MAAO,QAETsZ,IAAI,aACFrZ,QAAS,OACTC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfD,WAAY,eAGhBy8B,cAAc,aACZ58B,MAAO,oBACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,kBACPQ,aAAc,SAGlBkZ,SAAS,aACP5gB,SAAU,OACVQ,UAAW,OACXL,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BY,UAAW,SAGfujC,cAAc,aACZr8B,aAAc,OACdR,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGX2zB,aAAa,aACX3zB,MAAO,QACPQ,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGXwqB,WAAY,CACV1xB,SAAU,OACVG,MAAO,WAET6jC,UAAU,aACR/8B,OAAQ,OACRnH,QAAS,IACTU,UAAW,QACVrB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BY,UAAW,SAGfgjC,SAAS,aACPh6B,cAAe,OACf9B,aAAc,OACd6mB,aAAc,oBACd,eAAgB,CACd/kB,cAAe,IACf9B,aAAc,IACdpI,OAAQ,MAETH,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,aC2FE08B,GApIU,SAAC,GAQnB,IAPLpI,EAOI,EAPJA,OACAqI,EAMI,EANJA,oBAMI,IALJ14B,KAAQE,EAKJ,EALIA,aAAc3B,EAKlB,EALkBA,MACtBkyB,EAII,EAJJA,QACAC,EAGI,EAHJA,WAIMp6B,EAAUxC,KACVsE,EAAU+P,IAAMsX,WAAW/mB,GAF7B,EAGQnC,cAALC,EAHH,oBA0CEsiC,EAAqB,SAAAjyB,GACzB,IAAMsL,EAAcke,EAAOnE,IAAIrlB,GAAOsL,YACtC,OAAIA,EAAmB,CAAEA,GAAR,mBAAwBumB,IAClCA,GAGT,OACE,yBAAK1hC,UAAWV,EAAQ2X,SACtB,yBAAKjX,UAAWsG,KAAWhH,EAAQ+e,IAAK/e,EAAQo5B,eAC7CW,EAAOx3B,OAAS2X,GAAW3X,QAC1B,kBAAC,GAAD,CACEklB,KAAM,kBAAC,KAAD,MACNpC,KAAMnlB,EAAE,WACRmtB,MAlDW,WACnB0M,EAAO9jB,KAAK,CACV4F,YAAa,GACbC,IAAK,IACLC,IAAK,IACLC,IAAK,SAgDF+d,EAAOx3B,OAAS,GACf,kBAAC,GAAD,CACEklB,KAAM,kBAAC,KAAD,MACNpC,KAAMnlB,EAAE,cACRmtB,MAlCiB,WACzBvrB,EAAQ,CACNlD,MAAM,GAAD,OAAKsB,EAAE,mCAAP,YAA6CA,EAAEk6B,GAA/C,KACL/5B,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJ,IAAM6uB,EAAiB1I,EAAOnE,IAAI,GAClCmE,EAAOkE,YACPlE,EAAO9jB,KAAKwsB,MAEb5Y,OAAM,mBA4BNkQ,EAAO1pB,KAAI,SAACwN,EAAOtN,GAAR,OACV,yBAAK8H,IAAK9H,EAAO7P,UAAWV,EAAQ+hC,UAClC,yBAAKrhC,UAAWsG,KAAWhH,EAAQ+e,MACjC,kBAAC4M,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,gBACJnd,UAAWV,EAAQsiC,cACnBhX,KAAMkX,EAAmBjyB,GACzB7I,MAAM,WACN+B,YAAY,kBACZtE,UAAWqzB,KAEZuB,EAAOx3B,OAAS,GACf,kBAAC9B,EAAA,EAAD,CACEC,UAAWV,EAAQuiC,UACnB9sB,aAAW,SACX9U,QAAS,SAAAoJ,GAAC,OApEA,SAACA,EAAGwG,GAC1BxG,EAAEojB,kBAEFrrB,EAAQ,CACNlD,MAAM,GAAD,OAAKsB,EAAE,mCAAP,YAA6CA,EAAEi6B,GAA/C,KACL95B,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJmmB,EAAO7G,OAAO3iB,MAEfsZ,OAAM,eAyDiBuD,CAAgBrjB,EAAGwG,KAEjC,kBAAC,KAAD,CAAmB7P,UAAWV,EAAQiwB,eAK5C,yBAAKvvB,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC,GAAD,CAAgBrd,KAAK,sJACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAGhCvV,GAAgB3B,GAASA,EAAMsI,IAC9B,kBAACvH,GAAA,EAAD,CAAgBf,OAAK,GAAE/H,EAAE+H,EAAMsI,WClH5BkO,GAhCE,SAAAC,GACf,IAAMpW,EAAS,GAEf,GAAIoW,EAAO5D,MAAQ4D,EAAO5D,KAAKvY,OAAQ,CACrC,IAAMuY,EAAO4D,EAAO5D,KACd+d,EAAa,GAEnB/d,EAAK6d,SAAQ,SAAC3R,EAAK4R,GACbpa,GAAmBwI,KACrB6R,EAAWD,GAAY,CACrB9c,IAAK,QACLC,IAAK,QACLC,IAAK,aAKP6c,EAAWt2B,SACb+F,EAAOwS,KAAP,eACK+d,EADL,CAEEM,OAAO,eACFN,EAAWxoB,KACZ,iBAAM,6DAOhB,OAAO/H,GC5BI9K,GAAYC,aAAW,SAACC,GAAD,MAAY,CAC9CilC,OAAO,aACLl9B,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGXsZ,IAAI,aACFrZ,QAAS,OACTC,eAAgB,gBAChBF,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfD,WAAY,WAGhBy8B,cAAc,aACZpkC,SAAU,SACTP,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BF,SAAU,OACVU,OAAQ,cAGZwgB,SAAS,aACP5gB,SAAU,OACVQ,UAAW,OACXL,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,OACVQ,UAAW,aCoDFurB,gBAAU,CACvBnmB,KAAM,kBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,cAvEoB,CACpB5P,KAAM,KAgEOwP,CAOZjZ,aAXqB,SAAAtO,GAAK,MAAK,CAChC2Y,gBAAiB3Y,EAAMoB,KAAKuX,mBAUF,KAAzBrK,EApEiB,SAAC,GAAiD,IAA/CsZ,EAA8C,EAA9CA,aAAcE,EAAgC,EAAhCA,gBAAiBD,EAAe,EAAfA,SAC9C5qB,EAAUxC,KADmD,EAEvDyC,cAALC,EAF4D,oBAInE,OACE,6BACE,0BAAMwrB,SAAUf,GACd,kBAACgP,GAAA,EAAD,CACErhB,KAAK,OACLnT,UAAWy0B,GACXC,oBAAoB,EACpBG,SAAU,SAAAxoB,GAAI,OAAIA,EAAKwV,KACvBzlB,SAAU,SAACsc,EAAOtN,EAAO7G,GAAf,OACR,yBAAKhJ,UAAWV,EAAQ2iC,QACtB,yBAAKjiC,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC,GAAD,CAAgBrd,KAAK,oIACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAGhCzV,EAAKE,cAAgBF,EAAKzB,OAASyB,EAAKzB,MAAMsI,IAC7C,kBAACvH,GAAA,EAAD,CAAgBf,OAAK,GAAE/H,EAAEwJ,EAAKzB,MAAMsI,SAK5C,kBAAC,GAAD,CACEub,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,UCvEPptB,GAAYC,YAAW,CAClCqD,KAAM,CACJ4E,QAAS,OACTG,cAAe,SACfJ,MAAO,QAETiC,MAAO,CACLzB,aAAc,EACdvH,MAAO,UACPiJ,cAAe,YACfpJ,SAAU,GACVC,WAAY,OACZoJ,cAAe,WAEjBI,iBAAkB,CAChB5I,UAAW,uCACXvB,OAAQ,qBAEVqK,MAAO,CACLqD,QAAS,EACTlN,QAAS,WACTE,SAAU,OACVC,WAAY,OACZT,aAAc,MACdF,OAAQ,oBACR,UAAW,CACTA,OAAQ,qBAEV,UAAW,CACTuB,UAAW,uCACXvB,OAAQ,sBAGZoK,MAAO,CACL7I,UAAW,OACXvB,OAAQ,oBACR,UAAW,CACTA,OAAQ,qBAEV,UAAW,CACTuB,UAAW,OACXvB,OAAQ,sBAGZsK,cAAe,CACbvK,gBAAiB,UACjBc,MAAO,WAET0J,cAAe,CACb1J,MAAO,aCIIgkC,GA9Cc,SAAC,GAOvB,IANLx6B,EAMI,EANJA,MACAR,EAKI,EALJA,MACAwB,EAII,EAJJA,iBACAxI,EAGI,EAHJA,UAGI,IAFJgJ,KAAQC,EAEJ,EAFIA,QAAS1B,EAEb,EAFaA,MACdQ,EACC,wEACEzI,EAAUxC,KAEhB,OACE,yBAAKkD,UAAWsG,KAAWhH,EAAQc,KAAMJ,IACvC,kBAACiI,GAAA,EAAD,CACEjI,UAAWV,EAAQ0H,MACnBkB,QAAO,UAAKlB,EAAL,mBACPmB,SAAUJ,EAAWI,SACrB7I,QAAS,CACP6I,SAAU7I,EAAQoI,gBAGnBV,GAEH,yCACEhH,UAAWsG,KAAWhH,EAAQkI,MAAT,eAClBlI,EAAQiI,MAAQ0B,GAAW1B,IAE9BhF,KAAK,UACDiF,KAYJgB,GAAoBS,GAAW1B,GAC/B,kBAACe,GAAA,EAAD,CAAgBf,OAAK,GAAEA,KC/ClBzK,GAAYC,aAAW,SAACC,GAAD,oBAClCqhB,IAAI,aACFrZ,QAAS,OACTC,eAAgB,gBAChBF,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfJ,MAAO,SAGXm9B,YAAa,CACX76B,cAAe,OACf9B,aAAc,OACd6mB,aAAc,qBAIhB+V,iBAAiB,aACfn9B,QAAS,QACTD,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfJ,MAAO,SAGX48B,cAAc,aACZ58B,MAAO,oBACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,kBACNq9B,YAAY,OACZC,kBAAmB,OACnB3zB,aAAc,SAInB4zB,mBAAmB,aACjBv9B,MAAO,oBACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,kBACPsC,cAAe,oBAGnBoX,SAAS,aACP5gB,SAAU,OACVQ,UAAW,OACXL,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B2kC,YAAY,SAIhBG,EAAG,CACDx9B,MAAO,OACPpH,QAASX,EAAM8Q,QAAQ,KArDS,mBA+DhC9I,QAAS,OACTC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,eCUNykB,gBAAU,CACvBnmB,KAAM,kBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,SCjFsB,SAAAC,GACtB,IAAMpW,EAAS,GAUf,OARIkW,GAAmBE,KACrBpW,EAAM,IAAU,QAChBA,EAAM,IAAU,QAChBA,EAAM,IAAU,QAChBA,EAAM,OACJ,yEAGGA,GDuEPoiB,cAnEoB,CACpB5O,IAAK,IACLC,IAAK,IACLC,IAAK,MA0DQsO,EAvDK,SAAC,GAMd,IALLK,EAKI,EALJA,aACA1iB,EAII,EAJJA,MACAi7B,EAGI,EAHJA,WACArY,EAEI,EAFJA,gBACAD,EACI,EADJA,SAEM5qB,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIJ,OACE,6BACE,0BAAMwrB,SAAUf,GACd,yBAAKjqB,UAAWV,EAAQ4iC,aACtB,yBAAKliC,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAI,MACJ5Q,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,MACJ5Q,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,MACJ5Q,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC,GAAD,CAAgBrd,KAAK,sJACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAGhC+jB,GAAcj7B,GACb,kBAACe,GAAA,EAAD,CAAgBf,OAAK,GAAE/H,EAAE+H,KAG7B,kBAAC,GAAD,CACE6jB,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,SEcLN,gBAAU,CACvBnmB,KAAM,kBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,SD1E2B,SAAAC,GAC3B,IAAMpW,EAAS,GAEf,GAAIoW,EAAO5D,MAAQ4D,EAAO5D,KAAKvY,OAAQ,CACrC,IAAMuY,EAAO4D,EAAO5D,KACd4d,EAAkB,GAExB5d,EAAK6d,SAAQ,SAAC3R,EAAK4R,GACjB,IAAMuK,EAAY,GAEd3kB,GAAmBwI,KACrBmc,EAAS,IAAU,QACnBA,EAAS,IAAU,QACnBA,EAAS,IAAU,QACnBA,EAAS,MACP,wEACFzK,EAAgBE,GAAYuK,MAI5BzK,EAAgBn2B,SAClB+F,EAAOwS,KAAO4d,EACdpwB,EAAOwS,KAAP,eAAmB4d,EAAnB,CAAoCS,OAAO,eAAMT,KACjDpwB,EAAM,OAAN,eAAwBowB,IAI5B,OAAOpwB,GCgDPoiB,cAzEoB,CACpB5P,KAAM,KAkEOwP,EA/DU,SAAC,GAMnB,IALLK,EAKI,EALJA,aACA1iB,EAII,EAJJA,MACAi7B,EAGI,EAHJA,WACArY,EAEI,EAFJA,gBACAD,EACI,EADJA,SAEM5qB,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIJ,OACE,yBAAKQ,UAAWV,EAAQijC,GACtB,0BAAMvX,SAAUf,GACd,kBAACgP,GAAA,EAAD,CACErhB,KAAK,OACLnT,UAAWy0B,GACXC,oBAAoB,EACpBG,SAAU,SAAAxoB,GAAI,OAAIA,EAAKsJ,KAAKzK,KAAI,SAAAmB,GAAI,OAAItR,EAAEsR,MAAOyoB,KAAK,OACtD14B,SAAU,SAACsc,EAAOiiB,GAAR,OACR,yBAAKp/B,UAAWV,EAAQ6iC,kBACtB,yBAAKniC,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQgjC,mBACnB79B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQgjC,mBACnB79B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQgjC,mBACnB79B,UAAWu9B,KAEb,kBAAC,GAAD,CAAgBrd,KAAK,sJACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAGhC+jB,GAAcj7B,GAASA,EAAM63B,IAC5B,kBAAC92B,GAAA,EAAD,CAAgBf,OAAK,GAAE/H,EAAE+H,EAAM63B,GAAK73B,YAK5C,kBAAC,GAAD,CACE6jB,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,SC7BLnM,GA3CE,SAAAC,GACf,IAAMpW,EAAS,GACTw5B,EAAsB,GAsC5B,OApCIpjB,EAAO9C,YAAc8C,EAAO9C,WAAWrZ,QACzCmc,EAAO9C,WAAW+c,SAAQ,SAACoJ,EAAUC,GACnC,IAAMC,EAAiB,GAEnB3kB,GAAWykB,EAASlmB,aAAe,IAAI,IACzComB,EAAc,YAAkB,uBAChCH,EAAoBE,GAAiBC,GAErC5jB,GAAe0jB,EAASlmB,YAAa6C,EAAO9C,WAAY,iBAExDqmB,EAAc,YAAkB,0BAChCH,EAAoBE,GAAiBC,GAGnCzjB,GAAmBujB,KACrBE,EAAc,IAAU,QACxBA,EAAc,IAAU,QACxBA,EAAc,IAAU,QACxBH,EAAmB,OAAnB,eACKA,EAAmB,OADxB,eAEGE,EACC,0EAEJF,EAAoBE,GAAiBC,OAKvCH,EAAoBv/B,QAAUu/B,EAAmB,UACnDx5B,EAAOsT,WAAakmB,EACpBx5B,EAAOsT,WAAP,eACKkmB,EADL,CAEE3I,OAAQ2I,EAAmB,UAIxBx5B,GC5CI9K,GAAYC,aAAW,SAACC,GAAD,MAAY,CAC9CyG,KAAK,aACHsB,MAAO,QACPpH,QAAS,YACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPpH,QAAS,cACTqH,QAAS,OACTG,cAAe,WAGnBk0B,OAAO,aACLhyB,cAAe,OACf9B,aAAc,OACd6mB,aAAc,oBACdpnB,QAAS,OACTG,cAAe,OACdnI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPI,cAAe,eC4CNykB,gBAAU,CACvBnmB,KAAM,kBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,cA3DoB,CACpB9O,WAAY,CACV,CACEtD,KAAM,QACNwD,IAAK,IACLC,IAAK,IACLC,IAAK,QA+CIsO,CAOZjZ,aAXqB,SAAAtO,GAAK,MAAK,CAChC4Y,gBAAiB5Y,EAAMoB,KAAKwX,mBAUF,KAAzBtK,EAjDiB,SAAC,GAKd,IAJLsZ,EAII,EAJJA,aACAhP,EAGI,EAHJA,gBACAkP,EAEI,EAFJA,gBACAD,EACI,EADJA,SAEM5qB,EAAUxC,KAShB,OACE,6BACE,0BAAMkuB,SAAUf,EAAcjqB,UAAYV,EAAQmE,MAChD,yBAAKzD,UAAYV,EAAQ+5B,QACvB,kBAACJ,GAAA,EAAD,CACErhB,KAAK,aACLnT,UAAWg9B,GACXC,oBAd0B,WAClC,IAAMxmB,EAAaD,EAAgB+C,OAAO9C,WAAWvL,KACnD,SAAAmB,GAAI,OAAIA,EAAKqK,eAEf,OAAO3B,GAAW0D,QAAO,SAAAuN,GAAC,OAAKvP,EAAW6I,SAAS0G,MAUtB+W,GACrB/H,QAAQ,QACRC,WAAW,gBAGf,kBAAC,GAAD,CACEtO,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,UCKLnM,GArDE,SAAAC,GACf,IAAMpW,EAAS,GAEf,GAAIoW,EAAOxD,WAAawD,EAAOxD,UAAU3Y,OAAQ,CAC/C,IAAM2Y,EAAYwD,EAAOxD,UACnBwd,EAAkB,GAExBxd,EAAUyd,SAAQ,SAAC3R,EAAK4R,GACtB,IAAMC,EAAa,GAEbiJ,EAAsB,GAE5B9a,EAAIpL,WAAW+c,SAAQ,SAACoJ,EAAUC,GAChC,IAAMC,EAAiB,GAEnB3kB,GAAWykB,EAASlmB,aAAe,IAAI,IACzComB,EAAc,YAAkB,uBAChCH,EAAoBE,GAAiBC,GAErC5jB,GAAe0jB,EAASlmB,YAAamL,EAAIpL,WAAY,iBAErDqmB,EAAc,YAAkB,0BAChCH,EAAoBE,GAAiBC,GAGnCzjB,GAAmBujB,KACrBE,EAAc,IAAU,QACxBA,EAAc,IAAU,QACxBA,EAAc,IAAU,QACxBH,EAAmB,OAAnB,eACKA,EAAmB,OADxB,eAEGE,EACC,0EAEJF,EAAoBE,GAAiBC,OAIrCH,EAAoBv/B,QAAUu/B,EAAmB,UACnDjJ,EAAU,WAAiBiJ,EAC3BpJ,EAAgBE,GAAYC,MAI5BH,EAAgBn2B,SAClB+F,EAAO4S,UAAYwd,EACnBpwB,EAAO4S,UAAP,eAAwBwd,EAAxB,CAAyCS,OAAO,eAAMT,MAI1D,OAAOpwB,GCYMgiB,gBAAU,CACvBnmB,KAAM,0BACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,cA3DoB,CACpBxP,UAAW,KAoDEoP,CAOZjZ,aAXqB,SAAAtO,GAAK,MAAK,CAChCkZ,wBAAyBlZ,EAAMoB,KAAK8X,2BAUV,KAAzB5K,EAxDyB,SAAC,GAMtB,IALLsZ,EAKI,EALJA,aACA1O,EAII,EAJJA,wBACA4O,EAGI,EAHJA,gBACAD,EAEI,EAFJA,SACAgC,EACI,EADJA,iBACI,EACQ3sB,cAALC,EADH,oBAGEgiC,EAA8B,SAAA3xB,GAClC,IACMqL,EADI,YAAOK,EAAwByC,OAAOxD,WACxB3K,GAAOqL,WAAWvL,KAAI,SAAAmB,GAAI,OAAIA,EAAKqK,eAC3D,OAAO3B,GAAW0D,QAAO,SAAAuN,GAAC,OAAKvP,EAAW6I,SAAS0G,OAGrD,OACE,6BACE,0BAAMO,SAAUf,GACd,kBAACgP,GAAA,EAAD,CACErhB,KAAK,YACLnT,UAAWy0B,GACXC,oBAAoB,EACpBG,SAAU,SAAAxoB,GAAI,OAAIA,EAAKsJ,KAAKzK,KAAI,SAAAmB,GAAI,OAAItR,EAAEsR,MAAOyoB,KAAK,OACtD14B,SAAU,SAACsc,EAAOtN,GAAR,OACR,kBAACopB,GAAA,EAAD,CACErhB,KAAI,UAAKuF,EAAL,eACJ1Y,UAAWg9B,GACXC,oBAAqBF,EAA4B3xB,GACjDqc,iBAAkBA,EAClBuN,QAAQ,QACRC,WAAW,kBAIjB,kBAAC,GAAD,CACEtO,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,UCXLnM,GAxCE,SAAAC,GACf,IAAMpW,EAAS,GAEf,GAAIoW,EAAO9C,WAAY,CACrB,IAAMkmB,EAAsB,GAE5BpjB,EAAO9C,WAAW+c,SAAQ,SAACoJ,EAAUC,GACnC,IAAMC,EAAiB,GAEnB3kB,GAAWykB,EAASlmB,aAAe,IAAI,IACzComB,EAAc,YAAkB,uBAChCH,EAAoBE,GAAiBC,GAErC5jB,GAAe0jB,EAASlmB,YAAa6C,EAAO9C,WAAY,iBAExDqmB,EAAc,YAAkB,0BAChCH,EAAoBE,GAAiBC,GAGnCzjB,GAAmBujB,KACrBE,EAAc,IAAU,QACxBA,EAAc,IAAU,QACxBA,EAAc,IAAU,QACxBH,EAAmB,OAAnB,eACKA,EAAmB,OADxB,eAEGE,EACC,0EAEJF,EAAoBE,GAAiBC,OAIrCH,EAAoBv/B,QAAUu/B,EAAmB,UACnDx5B,EAAM,WAAiBw5B,GAI3B,OAAOx5B,GCzCI9K,GAAYC,aAAW,SAACC,GAAD,MAAY,CAC9Cia,QAAQ,aACNhZ,OAAQ,UACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,WAGZogB,IAAI,aACFrZ,QAAS,OACTC,eAAgB,gBAChBF,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfD,WAAY,WAGhBw9B,kBAAkB,aAChB39B,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,cAGZ0jC,cAAc,aACZ58B,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACP9G,OAAQ,cAGZ2jC,cAAc,aACZr8B,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,SAGlBkZ,SAAS,aACP5gB,SAAU,OACVQ,UAAW,OACXL,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,OACVQ,UAAW,aCpBX2rB,GAAgB,CACpB9O,WAAY,CACV,CACE/a,GAAIsa,OACJU,YAAa,QACbC,IAAK,IACLC,IAAK,IACLC,IAAK,OAyGIsO,gBAAU,CACvBnmB,KAAM,qBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,kBANaJ,CAOZjZ,aAXqB,SAAAtO,GAAK,MAAK,CAChCsgC,mBAAoBtgC,EAAMoB,KAAKk/B,sBAUL,KAAzBhyB,EA3G2B,SAAC,GAKxB,IAJLsZ,EAII,EAJJA,aACA0Y,EAGI,EAHJA,mBACAxY,EAEI,EAFJA,gBACAD,EACI,EADJA,SAEM5qB,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAcEgiC,EAA8B,WAClC,IAAMtmB,EAAaynB,EAAmB3kB,OAAO9C,WAAWvL,KACtD,SAAAmB,GAAI,OAAIA,EAAKqK,eAEf,OAAO3B,GAAW0D,QAAO,SAAAuN,GAAC,OAAKvP,EAAW6I,SAAS0G,OAG/CqX,EAAqB,SAAAjyB,GACzB,IAAMsL,EAAcwnB,EAAmB3kB,OAAO9C,WAAWrL,GAAOsL,YAChE,OAAIA,EAAmB,CAAEA,GAAR,mBAAwBqmB,MAClCA,KAGT,OACE,yBAAKxhC,UAAWV,EAAQ2X,SACtB,0BAAM+T,SAAUf,GACd,kBAACgP,GAAA,EAAD,CACErhB,KAAK,aACLnT,UAAWy0B,GACXE,kBAAmB,EACnBD,oBAAoB,EACpB/W,IA/Ba,SAACiX,EAAQl5B,GAC5Bk5B,EAAO9jB,KAAK,CACVpV,GAAIA,EACJgb,YAAa,GACbC,IAAK,IACLC,IAAK,IACLC,IAAK,OA0BDge,SAAU,SAAAxoB,GAAI,OAAIA,EAAKqK,aACvBse,QAAQ,QACRC,WAAW,aACX74B,SAAU,SAACsc,EAAOtN,EAAO7G,GAAf,OACR,yBAAKhJ,UAAWV,EAAQojC,mBACtB,kBAACzX,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,gBACJnd,UAAWV,EAAQsiC,cACnBhX,KAAMkX,EAAmBjyB,GACzB7I,MAAM,WACNvC,UAAWqzB,KAEb,yBAAK93B,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC,GAAD,CAAgBrd,KAAK,sJACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAGhCzV,EAAKE,cAAgBF,EAAKzB,OAASyB,EAAKzB,MAAMsI,IAC7C,kBAACvH,GAAA,EAAD,CAAgBf,OAAK,GAAE/H,EAAEwJ,EAAKzB,MAAMsI,SAK5C,kBAAC,GAAD,CACEub,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,UC1HPptB,GAAYC,aAAW,SAAAC,GAAK,MAAI,CAC3Cia,QAAQ,aACNlS,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAO,IAIjC4gB,IAAI,aACFrZ,QAAS,OACTC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,WAGnBjH,MAAM,aACJF,MAAO,OACPF,WAAY,OACZC,WAAY,MACZwH,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,SAMdugB,YAAY,aACV7Y,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,SAGlBo8B,cAAc,aACZ58B,MAAO,oBACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,kBACPs9B,kBAAmB,SAGvB5jB,SAAS,aACP5gB,SAAU,OACVQ,UAAW,QACVrB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,OACVQ,UAAW,SAGfukC,mBAAmB,aACjBvkC,UAAW,SACVrB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BY,UAAW,MAGfwkC,aAAa,aACXt9B,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,aC8DLu9B,GAnGa,SAAC,GAKtB,IAJL3lB,EAII,EAJJA,MACAtN,EAGI,EAHJA,MAGI,IAFJ7G,KAAQzB,EAEJ,EAFIA,MAAO2B,EAEX,EAFWA,aACZnB,EACC,yCACEzI,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAKF4qB,EAKEriB,EALFqiB,UACA9X,EAIEvK,EAJFuK,iBACA+X,EAGEtiB,EAHFsiB,YACAC,EAEEviB,EAFFuiB,eACAC,EACExiB,EADFwiB,eAGIwY,E/FjCwB,Y+FkC5BzwB,EAAA,WAA4CA,GAAqB,GAEnE,OACE,yBAAKtS,UAAWV,EAAQ2X,SACtB,kBAAC,GAAD,CACEyT,eAAgB,GAChBC,0BAA2B,C/FxCH,W+FyCxBC,KAAMR,EACN5a,aAAc8C,EACduY,QAASR,EACTS,WAAYR,EACZS,WAAYR,EACZvqB,UAAWV,EAAQsjC,qBAErB,kBAACx8B,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQpB,OAC5CsB,EAAEiK,GAAa6I,GAAkB3I,sBAEpC,kBAACshB,GAAA,EAAD,CACErT,KAAI,UAAKuF,GAAL,OAAa4lB,EAAb,UACJt+B,UAAW8D,GACXvI,UAAWV,EAAQ8e,YACnBrV,YAAW,UAAKU,GAAa6I,GAAkBpU,OAC/C8I,MAAK,UAAKyC,GAAa6I,GAAkBpU,MAApC,MACLuK,UAAU,QAEZ,kBAACwiB,GAAA,EAAD,CACErT,KAAI,UAAKuF,GAAL,OAAa4lB,EAAb,gBACJ/iC,UAAWV,EAAQ8e,YACnBrV,YAAW,UAAKU,GAAa6I,GAAkB7S,aAC/CuH,MAAK,UAAKyC,GAAa6I,GAAkB7S,aACzCgJ,UAAU,OACVhE,UAAWwG,MAEX83B,GACA,oCAEE,6BACE,kBAAC38B,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQpB,OAC5CsB,EAAE,WAEL,yBAAKQ,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC,GAAD,CAAgBrd,KAAK,sJACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAGhCvV,GACC3B,GACAA,EAAK,QACLA,EAAK,OAAWsI,IACd,kBAACvH,GAAA,EAAD,CAAgBf,OAAK,GAClB/H,EAAE+H,EAAK,OAAWsI,SC3CtBkO,GA3DE,SAACC,EAAQpZ,GACxB,IAAMgD,EAAS,GAEPwiB,EAAcxlB,EAAdwlB,UACF4Y,EAAiB5Y,EAAUA,EAAUvoB,OAAS,GAEpD,GAAImc,EAAOilB,eAAiBjlB,EAAOilB,cAAcphC,OAAQ,CACvD,IAAMohC,EAAgBjlB,EAAOilB,cACvBC,EAA2B,GAEjCD,EAAchL,SAAQ,SAACnnB,EAAMovB,GAC3B,IAAIiD,EAAsB,GAEtB/Y,EAAUvoB,OAAS,IAElBiP,EAAKkyB,KACNpmB,GAAW9L,EAAKkyB,GAAgB9kC,OAAS,IAAI,KAE3CilC,EAAmB,eAClBH,EAAiB,CAChB9kC,MAAOuL,GAAau5B,GAAgB34B,kBAGxC64B,EAAyBhD,GAAaiD,IAMtCvmB,GAAW9L,EAAK5S,OAAS,IAAI,KAC/BilC,EAAoBjlC,MAAQ,oBAC5BilC,EAAoBjD,GAAaiD,GAG/BrlB,GAAmBhN,KACrBqyB,EAAmB,IAAU,QAC7BA,EAAmB,IAAU,QAC7BA,EAAmB,IAAU,QAC7BD,EAAwB,OAAxB,eACKA,EAAwB,OAD7B,eAEGhD,EACC,0EAEJgD,EAAyBhD,GAAaiD,MAItCD,EAAyBrhC,SAC3B+F,EAAOq7B,cAAgBC,EACvBt7B,EAAOq7B,cAAP,eACKC,EADL,CAEEzK,OAAO,eAAMyK,MAKnB,OAAOt7B,GC9DI9K,GAAYC,YAAW,CAClCka,QAAS,CACPhZ,OAAQ,eAEV2iC,WAAY,CACV3iC,OAAQ,UAGV4iC,gBAAiB,CACf5iC,OAAQ,eAEVC,MAAO,CACLqH,aAAc,UCqHHqkB,gBAAU,CACvBnmB,KAAM,oBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,cAnHoB,CACpBiZ,cAAe,KA4GFrZ,CAOZjZ,aAfqB,SAAAtO,GAAK,MAAK,CAChC+gC,kBAAmB/gC,EAAMoB,KAAK2/B,sBAGL,SAAAxyB,GAAQ,MAAK,CACtC5O,qBAAsB,SAAA7B,GAAE,OAAIyQ,ECnHD,SAAAzQ,GAC3B,MAAO,CAAEoC,KtIb4B,wBsIaUpC,MDkHV6B,CAAqB7B,QAUzDwQ,EAhHmB,SAAC,GAAgE,IAA9DsZ,EAA6D,EAA7DA,aAAcE,EAA+C,EAA/CA,gBAAiBD,EAA8B,EAA9BA,SAAaniB,EAAiB,8DAC9EzI,EAAUxC,KACRmV,EAAoBC,wBAApBD,gBAF4E,EAGxE1S,cAALC,EAH6E,oBAK5E4qB,EAAyEriB,EAAzEqiB,UAAW9X,EAA8DvK,EAA9DuK,iBAAkBtQ,EAA4C+F,EAA5C/F,qBAAsBohC,EAAsBr7B,EAAtBq7B,kBAwD3D,OACE,yBAAKpjC,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,kBAGL,0BAAMwrB,SAxBkB,SAAApmB,GAC1B,GAAIwlB,EAAUvoB,OAAS,EAAG,CACxB,IAAM+F,EAASmW,GAASqlB,EAAkBplB,OAAQjW,GAE9CiV,OAAOC,KAAKrV,GAAQ/F,QACtBoQ,EACEzS,EACE,0FAEF,CACEkB,QAAS,YAKjBupB,EAAarlB,KAUT,kBAACq0B,GAAA,EAAD,CACErhB,KAAK,gBACLnT,UAAWy0B,GACXC,oBAAoB,EACpB/W,IAzDa,SAACiX,EAAQl5B,GAAQ,IAC5BiqB,EAAcriB,EAAdqiB,UACFiZ,EAAkBjZ,EAAUvoB,OAC5BmhC,EAAiB5Y,EAAUiZ,EAAkB,GAE/C3zB,EAAO,CACTvP,GAAIA,EACJjC,MAAO,GACPuB,YAAa,GACb2b,IAAK,IACLC,IAAK,IACLC,IAAK,KAGH+nB,EAAkB,IACpB3zB,EAAKszB,GAAkB,CACrB9kC,MAAO,GACPuB,YAAa,KAIjB45B,EAAO9jB,KAAK7F,IAqCN8iB,OAlCgB,SAAA1hB,GAClBA,EAAKwyB,WAAWthC,EAAqB8O,EAAK3Q,KAkCxCm5B,SAAU,SAAAxoB,GAAI,OAnEL,SAAAA,GACf,MlG7B4B,YkG6BxBwB,EACExB,EAAKwB,GAA0BxB,EAAKwB,GAAkBpU,MACnD,GAEF4S,EAAK5S,MA8DYo7B,CAASxoB,IAC3B2oB,QAAQ,gBACRC,WAAW,qBACX74B,SAAU,SAACsc,EAAOtN,EAAO7G,GAAf,OACR,kBAAC,GAAD,eACEmU,MAAOA,EACPtN,MAAOA,EACP7G,KAAMA,GACFjB,OAIV,kBAAC,GAAD,CACEqjB,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,UExCLnM,GAnEE,SAACC,EAAQpZ,GACxB,IAAMgD,EAAS,GAEPwiB,EAAcxlB,EAAdwlB,UACF4Y,EAAiB5Y,EAAUA,EAAUvoB,OAAS,GAEpD,GAAImc,EAAOvC,QAAUuC,EAAOvC,OAAO5Z,OAAQ,CACzC,IAAM4Z,EAASuC,EAAOvC,OAChB8nB,EAAoB,GAE1B9nB,EAAOwc,SAAQ,SAACnnB,EAAMovB,GACpB,IAAIsD,EAAe,GAEfpZ,EAAUvoB,OAAS,IAElBiP,EAAKkyB,KACNpmB,GAAW9L,EAAKkyB,GAAgB9kC,OAAS,IAAI,KAE7CslC,EAAY,eACTR,EAAiB,CAChB9kC,MAAOuL,GAAau5B,GAAgB34B,kBAGxCk5B,EAAkBrD,GAAasD,IAI/B1yB,EAAKgJ,aACHwD,GAAyBxM,EAAKgJ,YAAc,IAAI,IAClD0pB,EAAa1pB,WAAa,oCAC1BypB,EAAkBrD,GAAasD,GACtB/lB,GAA2B3M,EAAKgJ,YAAc,IAAI,KAC3D0pB,EAAa1pB,WAAb,wHACAypB,EAAkBrD,GAAasD,IAI/B5mB,GAAW9L,EAAK5S,OAAS,IAAI,KAC/BslC,EAAatlC,MAAQ,oBACrBqlC,EAAkBrD,GAAasD,GAG7B1lB,GAAmBhN,KACrB0yB,EAAY,IAAU,QACtBA,EAAY,IAAU,QACtBA,EAAY,IAAU,QACtBD,EAAiB,OAAjB,eACKA,EAAiB,OADtB,eAEGrD,EACC,0EAEJqD,EAAkBrD,GAAasD,MAI/BD,EAAkB1hC,SACpB+F,EAAO6T,OAAS8nB,EAChB37B,EAAO6T,OAAP,eACK8nB,EADL,CAEE9K,OAAO,eAAM8K,MAKnB,OAAO37B,GCvEI9K,GAAYC,aAAW,SAAAC,GAAK,MAAG,CAC1Cia,QAAS,CACPhZ,OAAQ,UAGVC,MAAM,aACJD,OAAQ,YACRjB,EAAMQ,YAAYC,KAAK,MAAO,CAC9BsI,UAAW,eC0HA6jB,gBAAU,CACvBnmB,KAAM,aACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,cApHoB,CACpBvO,OAAQ,KA6GKmO,CAOZjZ,aAfqB,SAAAtO,GAAK,MAAK,CAChCmZ,WAAYnZ,EAAMoB,KAAK+X,eAGE,SAAA5K,GAAQ,MAAK,CACtC6yB,aAAc,SAAAtjC,GAAE,OAAIyQ,EHxHD,SAAAzQ,GACnB,MAAO,CAAEoC,KtIVqB,iBsIUUpC,MGuHXsjC,CAAatjC,QAUzCwQ,EAjHY,SAAC,GAAgE,IAA9DsZ,EAA6D,EAA7DA,aAAcE,EAA+C,EAA/CA,gBAAiBD,EAA8B,EAA9BA,SAAaniB,EAAiB,8DACvEzI,EAAUxC,KACRmV,EAAoBC,wBAApBD,gBAFqE,EAGjE1S,cAALC,EAHsE,oBAKrE4qB,EAA0DriB,EAA1DqiB,UAAW9X,EAA+CvK,EAA/CuK,iBAAkBmxB,EAA6B17B,EAA7B07B,aAAcjoB,EAAezT,EAAfyT,WAyDnD,OACE,yBAAKxb,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,YAGL,0BAAMwrB,SAxBkB,SAAApmB,GAC1B,GAAIwlB,EAAUvoB,OAAS,EAAG,CACxB,IAAM+F,EAASmW,GAASvC,EAAWwC,OAAQjW,GAEvCiV,OAAOC,KAAKrV,GAAQ/F,QACtBoQ,EACEzS,EACE,0FAEF,CACEkB,QAAS,YAKjBupB,EAAarlB,KAUT,kBAACq0B,GAAA,EAAD,CACErhB,KAAK,SACLnT,UAAWy0B,GACXC,oBAAoB,EACpB/W,IA1Da,SAACiX,EAAQl5B,GAAQ,IAC5BiqB,EAAcriB,EAAdqiB,UACFiZ,EAAkBjZ,EAAUvoB,OAC5BmhC,EAAiB5Y,EAAUiZ,EAAkB,GAE/C3zB,EAAO,CACTvP,GAAIA,EACJjC,MAAO,GACPuB,YAAa,GACbqa,WAAY,GACZsB,IAAK,IACLC,IAAK,IACLC,IAAK,KAGH+nB,EAAkB,IACpB3zB,EAAKszB,GAAkB,CACrB9kC,MAAO,GACPuB,YAAa,KAIjB45B,EAAO9jB,KAAK7F,IAqCN8iB,OAlCgB,SAAA1hB,GAClBA,EAAKwyB,WAAWG,EAAa3yB,EAAK3Q,KAkChCm5B,SAAU,SAAAxoB,GAAI,OApEL,SAAAA,GACf,MtG7B4B,YsG6BxBwB,EACExB,EAAKwB,GAA0BxB,EAAKwB,GAAkBpU,MACnD,GAEF4S,EAAK5S,MA+DYo7B,CAASxoB,IAC3B2oB,QAAQ,SACRC,WAAW,cACX74B,SAAU,SAACsc,EAAOtN,EAAO7G,GAAf,OACR,kBAAC,GAAD,eACEmU,MAAOA,EACPtN,MAAOA,EACP7G,KAAMA,GACFjB,OAIV,kBAAC,GAAD,CACEqjB,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,UCnHPptB,GAAYC,aAAW,SAAAC,GAAK,MAAI,CAC3Cia,QAAQ,aACNlS,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAO,IAIjC4gB,IAAI,aACFrZ,QAAS,OACTC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,WAGnBjH,MAAM,aACJF,MAAO,OACPF,WAAY,OACZC,WAAY,MACZwH,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,SAMdugB,YAAY,aACV7Y,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,SAGlBo8B,cAAc,aACZ58B,MAAO,oBACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,kBACPs9B,kBAAmB,SAGvB5jB,SAAS,aACP5gB,SAAU,OACVQ,UAAW,QACVrB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,OACVQ,UAAW,SAGfukC,mBAAmB,aACjBvkC,UAAW,SACVrB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BY,UAAW,MAGfwkC,aAAa,aACXt9B,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,aCsELm+B,GA1GM,SAAC,GAKf,IAJLvmB,EAII,EAJJA,MACAtN,EAGI,EAHJA,MAGI,IAFJ7G,KAAQzB,EAEJ,EAFIA,MAAO2B,EAEX,EAFWA,aACZnB,EACC,yCACEzI,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAKF4qB,EAKEriB,EALFqiB,UACA9X,EAIEvK,EAJFuK,iBACA+X,EAGEtiB,EAHFsiB,YACAC,EAEEviB,EAFFuiB,eACAC,EACExiB,EADFwiB,eAGIwY,ExGlCwB,YwGmC5BzwB,EAAA,WAA4CA,GAAqB,GAEnE,OACE,yBAAKtS,UAAWV,EAAQ2X,SACtB,kBAAC,GAAD,CACEyT,eAAgB,GAChBC,0BAA2B,CxGzCH,WwG0CxBC,KAAMR,EACN5a,aAAc8C,EACduY,QAASR,EACTS,WAAYR,EACZS,WAAYR,EACZvqB,UAAWV,EAAQsjC,qBAErB,kBAACx8B,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQpB,OAC5CsB,EAAEiK,GAAa6I,GAAkB3I,sBAEpC,kBAACshB,GAAA,EAAD,CACErT,KAAI,UAAKuF,GAAL,OAAa4lB,EAAb,UACJt+B,UAAW8D,GACXvI,UAAWV,EAAQ8e,YACnBrV,YAAW,UAAKU,GAAa6I,GAAkBpU,OAC/C8I,MAAK,UAAKyC,GAAa6I,GAAkBpU,MAApC,MACLuK,UAAU,QAEZ,kBAACwiB,GAAA,EAAD,CACErT,KAAI,UAAKuF,GAAL,OAAa4lB,EAAb,gBACJ/iC,UAAWV,EAAQ8e,YACnBrV,YAAW,UAAKU,GAAa6I,GAAkB7S,aAC/CuH,MAAK,UAAKyC,GAAa6I,GAAkB7S,aACzCgJ,UAAU,OACVhE,UAAWwG,MAEX83B,GACA,oCACE,yBAAK/iC,UAAWV,EAAQujC,cACtB,kBAAC5X,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,eACJnW,MAAM,cACN0oB,UAAU,EACVjrB,UAAWymB,MAGf,6BACE,kBAAC9kB,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQpB,OAC5CsB,EAAE,WAEL,yBAAKQ,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC/W,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,QACJnW,MAAM,MACNwB,kBAAkB,EAClBxI,UAAWV,EAAQqiC,cACnBl9B,UAAWu9B,KAEb,kBAAC,GAAD,CAAgBrd,KAAK,sJACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAGhCvV,GACC3B,GACAA,EAAK,QACLA,EAAK,OAAWsI,IACd,kBAACvH,GAAA,EAAD,CAAgBf,OAAK,GAClB/H,EAAE+H,EAAK,OAAWsI,S,usNCpH9B,IAAM8zB,GAAwB93B,KAAH,MAarB+3B,GAA+B/3B,KAAH,MAuG5Bg4B,GAAiBh4B,KAAH,MAqCdi4B,GAAwBj4B,KAAH,MAwDrBk4B,GAAal4B,KAAH,MAsBVm4B,GAAgBn4B,KAAH,MCtOb/O,GAAYC,aAAW,SAACC,GAAD,MAAY,CAC9Cia,QAAQ,aACNhZ,OAAQ,UACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,sBACRiH,WAAY,gBAGhBhH,MAAM,aACJD,OAAQ,YACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BuH,QAAS,OACTG,cAAe,SACdD,WAAY,SACbD,eAAgB,WAGpBmZ,YAAY,aACV7Y,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,aC2CLqkB,gBAAU,CACvBnmB,KAAM,4BACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,cAxDoB,CACpBrO,sBAAuB,KAkDViO,CAMZjZ,YAAQ,MAVgB,SAAAC,GAAQ,MAAK,CACtCqzB,4BAA6B,SAAA9jC,GAAE,OAAIyQ,ER9CD,SAAAzQ,GAClC,MAAO,CAAEoC,KtIhB2B,gCsIgBUpC,MQ6CF8jC,CAA4B9jC,QASvEwQ,EArD2B,SAAC,GAKxB,IAJLsZ,EAII,EAJJA,aACAE,EAGI,EAHJA,gBACAD,EAEI,EAFJA,SAGQ+Z,EADJ,8DACIA,4BACF3kC,EAAUxC,KAFZ,EAGQyC,cAALC,EAHH,oBASJ,OACE,yBAAKQ,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,2BAEL,0BAAMwrB,SAAUf,GACd,kBAACgB,GAAA,EAAD,CACErT,KAAI,wBACJ5X,UAAWV,EAAQ8e,YACnBrV,YAAY,iBACZN,UAAU,MACV4pB,MAAOsR,GACPrR,UAAU,iBACVC,YAAY,QACZC,OAlBgB,SAAA1hB,GAClBA,EAAKwyB,WAAWW,EAA4BnzB,EAAK3Q,KAkB/CsE,UAAWy/B,KAGb,kBAAC,GAAD,CACE9Y,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,U,uqLCrDb,IAAMia,GAAoBt4B,KAAH,MAajBu4B,GAA2Bv4B,KAAH,MAkExBw4B,GAAax4B,KAAH,MAqCVy4B,GAAoBz4B,KAAH,MA2DjB04B,GAAW14B,KAAH,MAiGR24B,GAAoC34B,KAAH,MChN/B+d,gBAAU,CACvBnmB,KAAM,wBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,cAxDoB,CACpBya,kBAAmB,KAkDN7a,CAMZjZ,YAAQ,MAVgB,SAAAC,GAAQ,MAAK,CACtC8zB,wBAAyB,SAAAvkC,GAAE,OAAIyQ,EV1CD,SAAAzQ,GAC9B,MAAO,CAAEoC,KtInBuB,4BsImBUpC,MUyCFukC,CAAwBvkC,QAS/DwQ,EArDuB,SAAC,GAKpB,IAJLsZ,EAII,EAJJA,aACAE,EAGI,EAHJA,gBACAD,EAEI,EAFJA,SAGQwa,EADJ,8DACIA,wBACFplC,EAAUxC,KAFZ,EAGQyC,cAALC,EAHH,oBASJ,OACE,yBAAKQ,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,uBAEL,0BAAMwrB,SAAUf,GACd,kBAACgB,GAAA,EAAD,CACErT,KAAI,oBACJ5X,UAAWV,EAAQ8e,YACnBrV,YAAY,aACZN,UAAU,MACV4pB,MAAO8R,GACP7R,UAAU,aACVC,YAAY,QACZC,OAlBgB,SAAA1hB,GAClBA,EAAKwyB,WAAWoB,EAAwB5zB,EAAK3Q,KAkB3CsE,UAAWy/B,KAGb,kBAAC,GAAD,CACE9Y,WAAW,iCACXC,YAAY,OACZlB,gBAAiBA,EACjBD,SAAUA,UCnBLnM,GAlCE,SAAAC,GACf,IAAMpW,EAAS,GAEf,GAAIoW,EAAOnC,cAAgBmC,EAAOnC,aAAaha,OAAQ,CACrD,IAAMga,EAAemC,EAAOnC,aACtB8oB,EAA0B,GAEhC9oB,EAAaoc,SAAQ,SAACnnB,EAAMjB,GAC1B,IAAM+0B,EAAqB,GAEvBhoB,GAAW9L,EAAK+zB,UAAU,KAC5BD,EAAkB,SAAe,uBACjCD,EAAwB90B,GAAS+0B,GAG/BhoB,GAAW9L,EAAKg0B,iBAAmB,IAAI,KACzCF,EAAkB,gBAChB,uCACFD,EAAwB90B,GAAS+0B,MAIjCD,EAAwB9iC,SAC1B+F,EAAOiU,aAAe8oB,EACtB/8B,EAAOiU,aAAP,eACK8oB,EADL,CAEElM,OAAO,eAAMkM,MAKnB,OAAO/8B,GC9BI9K,GAAYC,aAAW,SAACC,GAAD,MAAY,CAC9Cia,QAAQ,aACNhZ,OAAQ,UACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,SACR8G,MAAO,SAGX7G,MAAM,aACJD,OAAQ,YACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,WACR8H,UAAW,WAGfsY,IAAK,CACHrZ,QAAS,OACTC,eAAgB,gBAChBF,MAAO,OACPkyB,SAAU,QAEZzvB,MAAM,aACJzC,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPQ,aAAc,aC2ELqkB,gBAAU,CACvBnmB,KAAM,kBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,cAvFoB,CACpBnO,aAAc,KAgFD+N,CAOZjZ,YAAQ,MAXgB,SAAAC,GAAQ,MAAK,CACtCm0B,mBAAoB,SAAA5kC,GAAE,OAAIyQ,Eb3ED,SAAAzQ,GACzB,MAAO,CAAEoC,KtItBiB,sBsIsBUpC,Ma0ED4kC,CAAmB5kC,QAUrDwQ,EApFiB,SAAC,GAKd,IAJLsZ,EAII,EAJJA,aACA8a,EAGI,EAHJA,mBACAC,EAEI,EAFJA,gBACA7a,EACI,EADJA,gBAEM7qB,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAgBJ,OACE,yBAAKQ,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,gBAEL,0BAAMwrB,SAAUf,GACd,kBAACgP,GAAA,EAAD,CACErhB,KAAK,eACLnT,UAAWy0B,GACXC,oBAAoB,EACpB/W,IAtBa,SAACiX,EAAQl5B,GAC5Bk5B,EAAO9jB,KAAK,CACVpV,GAAIA,EACJ0kC,SAAU,GACVC,gBAAiB,MAmBbtS,OAfgB,SAAA1hB,GAClBA,EAAKwyB,WAAWyB,EAAmBj0B,EAAK3Q,KAetCm5B,SAAU,SAAAxoB,GAAI,OAAIA,EAAK+zB,UACvBpL,QAAQ,cACRC,WAAW,mBACX74B,SAAU,SAAAsc,GAAK,OACb,yBAAKnd,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,aACJnd,UAAWV,EAAQkI,MACnBojB,KAAMnR,GACNzS,MAAM,aACNvC,UAAWqzB,KAEb,kBAAC7M,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,oBACJnd,UAAWV,EAAQkI,MACnB2B,WAAY,CAAEV,UAAW,KACzBM,YACEi8B,EAAkB,oBAAsB,eAE1Ch+B,MACEg+B,EACI,kCACA,6BAENvgC,UAAW8D,SAKnB,kBAAC,GAAD,CACE6iB,WAAW,iCACXC,YAAY,OACZmD,aAAW,EACXrE,gBAAiBA,U,yCCtFrB8a,GAAkB,SACtBnd,EACAod,EACAC,EACA5gB,GAEA,IAAI6gB,EAAe,GAEnB,GAZmB,oBAYftd,EAAcud,WAA6B,CAC7C,IAAMpD,EAASna,EAAa,gBAe5B,OAdAsd,EAAa7vB,KAAK,CAChBpV,GAAG,GAAD,OAAK+kC,EAAL,YAAiBjD,EAAOiD,IAC1B/pB,YAAa,GACbiqB,aAAc,EACdF,SAAUA,EACVI,cAAerD,EAAOiD,GACtB5pB,IAAK2mB,EAAO3mB,IACZD,IAAK4mB,EAAO5mB,IACZD,IAAK6mB,EAAO7mB,MAEdgqB,EAAeG,GACbH,EACAD,GAKJ,GA7BmB,oBA6Bfrd,EAAcud,YAChB,GAAI9gB,GAASA,EAAMrK,WAAaqK,EAAMpK,QAAS,CAM7C,IALA,IAAMqrB,EAAc1d,EAAc9M,gBAAgBZ,KAC5CqrB,EAAQlhB,EAAMrK,UACdwrB,EAAM/sB,KAAO4L,EAAMpK,SAASwrB,SAAS,EAAG,KAC1C/jC,EAAQ,EAJiC,WAOvC8e,GAIJ,IAAM4F,EAAM5F,EAAKoD,OAAO,OACxB0hB,EAAYvN,SAAQ,SAAA2N,GACdA,EAAWtf,MAAQA,GAAOsf,EAAWV,KACvCtjC,IAAUgkC,EAAWV,QAPrBxkB,EAAO/H,KAAO8sB,GAClB/kB,EAAKqU,eAAe2Q,GACpBhlB,EAAK0B,IAAI,EAAG,QACX,EAHG1B,GAYN0kB,EAAa7vB,KAAK,CAChBpV,GAAG,GAAD,OAAK+kC,EAAL,YAAiBtjC,GACnBuZ,YAAa,GACbiqB,aAAc,EACdF,SAAUA,EACVI,cAAe1jC,EACf0Z,IAAkB,QAAb4pB,EAAqBtjC,EAAQ,EAClCyZ,IAAkB,QAAb6pB,EAAqBtjC,EAAQ,EAClCwZ,IAAkB,QAAb8pB,EAAqBtjC,EAAQ,UAInBkmB,EAAa,mBAAkB5M,WACvC+c,SAAQ,SAAAnnB,GACjBs0B,EAAa7vB,KAAK,CAChBpV,GAAG,GAAD,OAAK2Q,EAAKqK,YAAV,YAAyB+pB,EAAzB,YAAqCp0B,EAAKo0B,IAC5C/pB,YAAarK,EAAKqK,YAClBiqB,aAAc,EACdF,SAAUA,EACVI,cAAex0B,EAAKo0B,GACpB5pB,IAAKxK,EAAKwK,IACVD,IAAKvK,EAAKuK,IACVD,IAAKtK,EAAKsK,SAUhB,OALAgqB,EAAeG,GACbH,EACAD,IAMEI,GAA+B,SAACH,EAAcD,GAClD,OAAOC,EAAaz1B,KAAI,SAAAmB,GACtB,IAAM+0B,IAAqBV,GACvBA,EAAqBtyB,MACnB,SAAAsI,GAAW,OAAIA,EAAYA,cAAgBrK,EAAKqK,eAGtD,OAAI0qB,EACK,eACF/0B,EADL,CAEEs0B,aAAcS,EAAmBT,eAG9Bt0B,MCjGLg1B,GAAY,SAAC5b,EAAU1O,EAAYwnB,GACvC,OAAOxnB,EAAWC,OAAO9L,KAAI,SAAAmB,GAC3B,IAIoB,EAKb,EARHmxB,EAAS8D,GAA0Bj1B,GACnCk1B,EAAuB,GAEvBhD,GACkB,kCALF,MAMSlyB,EAAKkyB,GAAgB9kC,OAD5B,mCALF,MAOe4S,EAAKkyB,GAAgBvjC,aAFtDumC,EAAoB,IAKA,kCAVF,MAWS,MADP,mCAVF,MAYe,MAFjCA,EAAoB,GAMtB,IAAMC,EAAQ/b,GAAYpZ,EAAKwyB,UAAY,CAAEnjC,GAAIuC,SAASoO,EAAK3Q,KAAQ,GAEvE,OAAO,eACF8lC,EADL,CAEE/nC,MAAO4S,EAAK5S,MACZuB,YAAaqR,EAAKrR,YAClBymC,MACEp1B,EAAKgJ,WAAWyD,MAAQzM,EAAKgJ,WAAWrU,MACpCqL,EAAKgJ,WAAWyD,MAAQzM,EAAKgJ,WAAWrU,MACxC,MACHugC,EARL,CASE/D,OAAQA,QAoCR8D,GAA4B,SAAAj1B,GAChC,IAAImxB,EAAS,GAab,MAXA,CAAC,MAAO,MAAO,OAAOtyB,KAAI,SAAAw2B,GACpBr1B,EAAKq1B,IAAcr1B,EAAKq1B,GAAWtkC,SACb,cAApBiP,EAAKq1B,KAA4Br1B,EAAKq1B,GAAa,KACvDlE,EAAO1sB,KAAK,CACV4F,YAAarK,EAAKqK,YAClB+pB,SAAUiB,EACVvkC,MAAOwkC,WAAWt1B,EAAKq1B,GAAWE,MAAM,KAAK9M,KAAK,WAKjD0I,GAGHqE,GAAmB,SAACrE,EAAQiD,GAChC,IAAMqB,EAAetE,EAAOpvB,MAC1B,SAAA2zB,GAAK,OAAIA,EAAMtB,SAASA,WAAaA,KAEvC,OAAIqB,EAAqBA,EAAa3kC,MAAMkb,WACrC,KAGH2pB,GAAkB,SAACvc,EAAUtO,GACjC,OAAOA,EAAgBC,aAAalM,KAAI,SAAAmB,GACtC,IAAMm1B,EAAQ/b,GAAYpZ,EAAKwyB,UAAY,CAAEnjC,GAAIuC,SAASoO,EAAK3Q,KAAQ,GAEvE,OAAO,eACF8lC,EADL,CAEEpB,SAAUl4B,GAAuBmE,EAAK+zB,WAAa/zB,EAAK+zB,SACxDC,gBAAiBh0B,EAAKg0B,sBAKtB4B,GAAqB,SAAAh3B,GACzB,IAAMi3B,EAAmB,GAezB,OAbAj3B,EAAKuyB,OAAOtyB,KAAI,SAAAmB,GACd61B,EAAiB71B,EAAKqK,YAAYA,aAAe,SAAjD,eACKwrB,EAAiB71B,EAAKqK,YAAYA,aAAe,SADtD,eAEGrK,EAAKo0B,SAASA,SAAWp0B,EAAKlP,MAAMkb,gBAItBE,OAAOC,KAAK0pB,GAAkBh3B,KAAI,SAAAwN,GAAK,MAAK,CAC7D/B,IAAKurB,EAAiBxpB,GAAjB,KAAkC,IACvC9B,IAAKsrB,EAAiBxpB,GAAjB,KAAkC,IACvC7B,IAAKqrB,EAAiBxpB,GAAjB,KAAkC,QAGvB,IAGdypB,GAAwB,SAAAl3B,GAC5B,IAAMi3B,EAAmB,GASzB,OAPAj3B,EAAKuyB,OAAOtyB,KAAI,SAAAmB,GACd61B,EAAiB71B,EAAKqK,YAAYA,aAAe,SAAjD,eACKwrB,EAAiB71B,EAAKqK,YAAYA,aAAe,SADtD,eAEGrK,EAAKo0B,SAASA,SAAWp0B,EAAKlP,MAAMkb,gBAIlC,CACL5B,WAAY8B,OAAOC,KAAK0pB,GAAkBh3B,KAAI,SAAAwN,GAAK,MAAK,CACtDhd,GAAIsa,OACJU,YAAagC,EACb/B,IAAKurB,EAAiBxpB,GAAjB,KAAkC,IACvC9B,IAAKsrB,EAAiBxpB,GAAjB,KAAkC,IACvC7B,IAAKqrB,EAAiBxpB,GAAjB,KAAkC,U,oBC3IhC0pB,GAAqC,SAChDtiB,GAGI,IAFJuiB,EAEG,uDAFQ,WACXC,EACG,uDADM,SAET,OAAOxiB,EACJrH,QACC,gBAAGqG,EAAH,EAAGA,oBAAqB2F,EAAxB,EAAwBA,WAAxB,OACE3F,IAAwB2F,KAE3BvZ,KAAI,gBAAe8X,EAAf,EAAIqf,GAA+Bpf,EAAnC,EAA0Bqf,GAA1B,MAAqD,CACxD5mC,GADG,EAA2CA,GAE9C+Z,UAAWvB,KAAO8O,GAClBtN,QAASxB,KAAO+O,QCOTsf,GAA0B,SAAAt3B,GACrC,IAAMiK,EAAcstB,GAAev3B,GAAMiK,YAEnCI,EAAkB,CACtBnQ,SAAU8F,EAAK9F,SACfE,YAAa4F,EAAK5F,YAClBC,eAAgB2F,EAAK3F,eACrBC,aAAc0F,EAAK1F,aACnBC,SAAUyF,EAAKzF,SACfC,YAAawF,EAAKxF,aAGdsR,EAAa,CACjBC,OAAQ/L,EAAK+L,OAAO9L,KAAI,SAAAmB,GAAI,MAAK,CAC/B3Q,GAAIuC,SAASoO,EAAK3Q,IAClBjC,MAAO4S,EAAK5S,MACZuB,YAAaqR,EAAKrR,YAClBqa,WAAY,CACVrU,MAAOqL,EAAKo1B,OAEd9qB,IAAKkrB,GAAiBx1B,EAAKmxB,OAAQ,OACnC5mB,IAAKirB,GAAiBx1B,EAAKmxB,OAAQ,OACnC3mB,IAAKgrB,GAAiBx1B,EAAKmxB,OAAQ,OACnCqB,WAAW,OAIT5nB,EAA4B,CAChCC,sBAAuBjM,EAAKiM,sBAAsBhM,KAAI,SAAAmB,GACpD,IAAMo2B,EAAap2B,EAAKmxB,OAAO,GAEzBkF,EAAkB,GACpBr2B,EAAKs2B,UAASD,EAAgBjpC,MAAQ4S,EAAKs2B,SAC3Ct2B,EAAKu2B,aAAYF,EAAgBv9B,SAAWkH,EAAKu2B,YAErD,IAAIC,ECzDW,kBDiEf,OANIJ,EAAW/rB,YAAYA,YACzBmsB,EC3DgB,qBD4DPJ,EAAW5gB,MACpBghB,EC5Da,mBD+DR,CACLnnC,GAAIuC,SAASoO,EAAK3Q,IAClBjC,MAAO4S,EAAK5S,MACZ0L,SAAUkH,EAAKlH,SACfc,UAAWy8B,EACXjB,MAAOp1B,EAAKo1B,MACZqB,aAAc5uB,KAAO7H,EAAK02B,YAAa,YACvCC,eAAgB9uB,KAAO7H,EAAK42B,aAAc,YAC1CrC,WAAYiC,EACZhE,WAAW,EACXrB,OAAQ0F,GAAuB72B,QAK/B8K,EAAkB,CACtBC,aAAcnM,EAAKk4B,UAAUj4B,KAAI,SAAAmB,GAAI,MAAK,CACxC3Q,GAAIuC,SAASoO,EAAK3Q,IAClB0kC,SAAU53B,GAAmB6D,EAAK+zB,WAAa/zB,EAAK+zB,SACpDC,gBAAiBh0B,EAAKg0B,gBACtBxB,WAAW,OAITuE,EAAWC,GAAYp4B,GAEvBuyB,EAAS8F,GAAUr4B,GAEnBs4B,EAAsBC,GAAwBv4B,EAAM8L,GAE1D,OAAO,aACL7B,cACAI,kBACAyB,aACAE,4BACAE,mBACGisB,EANL,GAOK5F,EAPL,GAQK+F,IAIMf,GAAiB,SAAAv3B,GAC5B,MAAO,CACLiK,YAAa,CACXxZ,GAAIuC,SAASgN,EAAKvP,IAClBjC,MAAOwR,EAAKxR,MACZ4b,WAAY,CACVrU,MAAOiK,EAAKw2B,OAEdrsB,YAAanK,EAAKmK,YAClBD,aAAclK,EAAKqxB,OAAS,OAAS,UACrC9iB,gBAAiBvO,EAAKuO,gBAAgBnB,WACtCoB,gBAAiBxO,EAAKwO,gBAAgBpB,WACtCqB,cAAezO,EAAKyO,cACpB+pB,iBAAkBrB,GAChBn3B,EAAKy4B,mBACL,eACA,iBAMKC,GAAmC,SAAAC,GAC9C,OAAKA,EAAkCC,WAAWzmC,OAQ3C,CACLymC,WAAY,CACV,CACEC,6BANJF,EAAkCC,WAAW,GAC1CC,6BAKoE54B,KACjE,SAAAmB,GAAI,sBACCA,EADD,CAEF6J,UACE7J,EAAK6J,WACLhC,KAAO7H,EAAK6J,UAAW,cAAcmJ,OAAO,oBAf/CukB,GAuBLJ,GAA0B,SAACv4B,EAAM8L,GAAgB,IAAD,EAE9CwsB,GAAmB,yCADF,aAEc,IADZ,wCADF,aAGkB,IAFhB,GA6BzB,OAxBIt4B,EAAK03B,UACPY,EAAoB,eAAD,OAPE,cAOkC,CACrD9pC,MAAOwR,EAAK03B,SAGdY,EAAoB,mBAAD,OAXE,cAWsC,CACzDp+B,SAAU8F,EAAK23B,WACfv9B,YAAa4F,EAAK84B,cAClBz+B,eAAgB2F,EAAK+4B,iBACrBz+B,aAAc0F,EAAKg5B,eACnBz+B,SAAUyF,EAAKi5B,WACfz+B,YAAawF,EAAKk5B,eAGpBptB,EAAWC,OAASD,EAAWC,OAAO9L,KAAI,SAACmB,EAAMjB,GAAP,sBACrCiB,EADqC,eApBrB,YAsBD,CAChB3Q,GAAIuC,SAASoO,EAAK3Q,IAClBjC,MAAOwR,EAAK+L,OAAO5L,GAAZ,QACPpQ,YAAaiQ,EAAK+L,OAAO5L,GAAZ,qBAKZm4B,GAGIF,GAAc,SAAAp4B,GACzB,IAAMm5B,EAAqBC,KAAUC,eAAer5B,EAAKm4B,UAAUmB,WAC7DC,EAAqBH,KAAUC,eAAer5B,EAAKm4B,UAAUqB,WAEnE,OAAQx5B,EAAKy5B,cACX,IAAK,mBACH,OAAO,eACJ,mBAAqBC,GACpBP,EACAI,IAIN,IAAK,uBACH,OAAO,eACJ,uBAAyBI,GACxBR,EACAI,IAIN,QACE,OAAO,eACJ,mBAAqBK,GAAqBT,MAM7CO,GAAuB,SAACP,EAAoBI,GAChD,OAAKJ,GAAuBI,GAAuBA,EAAmBM,OAG/D,CACLtvB,aAAc,CACZC,UAC6C,SAA3C2uB,EAAmBW,WAAW,GAAG5nC,MAC7B,KACA+W,KAAOkwB,EAAmBW,WAAW,GAAG5nC,MAAO,cACrDuY,QAC2C,SAAzC0uB,EAAmBY,SAAS,GAAG7nC,MAC3B,KACA+W,KAAOkwB,EAAmBY,SAAS,GAAG7nC,MAAO,eAErDwY,KAAK,eACArB,GADD,GAECkwB,EAAmBM,OAAO,GAAGP,WAAWU,KAAKjgB,QAC9C,SAACtW,EAAGw2B,GAAJ,OAAYx2B,EAAEw2B,EAAE/nC,QAAS,EAAOuR,IAChC,KAGJkH,aAAcwuB,EAAmBe,cAAc,GAAGhoC,MAClD0Y,qBAAsBuuB,EAAmBgB,wBAAwB,GAAGjoC,OArB7D,IAyBLynC,GAA2B,SAACR,EAAoBI,GACpD,OAAKJ,GAAuBI,GAAuBA,EAAmBM,OAG/D,CACLtvB,aAAc,CACZC,UAC6C,SAA3C2uB,EAAmBW,WAAW,GAAG5nC,MAC7B,KACA+W,KAAOkwB,EAAmBW,WAAW,GAAG5nC,MAAO,cACrDuY,QAC2C,SAAzC0uB,EAAmBY,SAAS,GAAG7nC,MAC3B,KACA+W,KAAOkwB,EAAmBY,SAAS,GAAG7nC,MAAO,eAErD4Y,UAAWyuB,EAAmBM,OAAO55B,KAAI,SAAAmB,GAAI,MAAK,CAChD3Q,GAAIsa,OACJL,KAAK,eACArB,GADD,GAECjI,EAAKk4B,WAAWU,KAAKjgB,QAAO,SAACtW,EAAGw2B,GAAJ,OAAYx2B,EAAEw2B,EAAE/nC,QAAS,EAAOuR,IAAI,KAErEuH,qBAAsBovB,GAAyBh5B,EAAKk4B,gBAEtD3uB,aAAcwuB,EAAmBe,cAAc,GAAGhoC,MAClD0Y,qBAAsBuuB,EAAmBgB,wBAAwB,GAAGjoC,OAtB7D,IA0BL0nC,GAAuB,SAAAT,GAC3B,OAAKA,EAEE,CACL5uB,aAAc,CACZC,UAC6C,SAA3C2uB,EAAmBW,WAAW,GAAG5nC,MAC7B,KACA+W,KAAOkwB,EAAmBW,WAAW,GAAG5nC,MAAO,cACrDuY,QAC2C,SAAzC0uB,EAAmBY,SAAS,GAAG7nC,MAC3B,KACA+W,KAAOkwB,EAAmBY,SAAS,GAAG7nC,MAAO,gBAXvB,IAgBrBmmC,GAAY,SAAAr4B,GACvB,OAAQA,EAAKy5B,cACX,IAAK,mBAAqB,IAAD,EACvB,OAAO,EAAP,iBACG,kBAAoBY,GAAyBr6B,IADhD,cAEG,kBAAoBk3B,GAAsBl3B,IAF7C,EAKF,QAAU,IAAD,EACP,OAAO,EAAP,iBACG,kBAAoBg3B,GAAmBh3B,IAD1C,cAEG,kBAAoBs6B,GAAoBt6B,IAF3C,cAGG,0BAA4Bu6B,GAA4Bv6B,IAH3D,cAIG,kBAAoBk3B,GAAsBl3B,IAJ7C,IAUAs6B,GAAsB,SAAAt6B,GAG1B,MAAO,CACL0K,KAHiB8vB,GAAqBx6B,EAAKuyB,QAG1BtyB,KAAI,SAAA2W,GACnB,IAAM6jB,EAAYz6B,EAAKuyB,OAAO/kB,QAAO,SAAAspB,GACnC,GAAIA,EAAMpsB,MACU0uB,KACfC,eAAevC,EAAMpsB,MACrB8uB,WAAWK,OAAO,GAAGP,WAAWU,KAAK/5B,KAAI,SAAAmB,GAAI,OAAIA,EAAKlP,SAE3CmiB,SAASuC,GAAM,OAAO,KAIlCqgB,EAAmB,GASzB,OAPAwD,EAAUx6B,KAAI,SAAAmB,GACZ61B,EAAiB71B,EAAKqK,YAAYA,aAAe,SAAjD,eACKwrB,EAAiB71B,EAAKqK,YAAYA,aAAe,SADtD,eAEGrK,EAAKo0B,SAASA,SAAWp0B,EAAKlP,MAAMkb,gBAIlC,CACL3c,GAAIsa,OACJ6L,IAAKA,EACLpL,WAAY8B,OAAOC,KAAK0pB,GAAkBh3B,KAAI,SAAAwN,GAAK,MAAK,CACtDhC,YAAagC,EACb/B,IAAKurB,EAAiBxpB,GAAjB,KAAkC,IACvC9B,IAAKsrB,EAAiBxpB,GAAjB,KAAkC,IACvC7B,IAAKqrB,EAAiBxpB,GAAjB,KAAkC,cAO3C8sB,GAA8B,SAAAv6B,GAGlC,MAAO,CACL8K,UAHwB4vB,GAA6B16B,EAAKuyB,QAG7BtyB,KAAI,SAAA2W,GAC/B,IAAM6jB,EAAYz6B,EAAKuyB,OAAO/kB,QAAO,SAAAspB,GACnC,GAAIA,EAAMpsB,KAAM,CACd,IAAMiwB,EAAavB,KAChBC,eAAevC,EAAMpsB,MACrB8uB,WAAWK,OAAO55B,KAAI,SAAAmB,GAAI,OACzBA,EAAKk4B,WAAWU,KAAK/5B,KAAI,SAAA2W,GAAG,OAAIA,EAAI1kB,YAGxC,IAAK,IAAIgmB,KAAKyiB,EACZ,GAAIA,EAAWvR,eAAelR,IACxB0iB,GAAcD,EAAWziB,GAAItB,GAAM,OAAO,MAMhDqgB,EAAmB,GASzB,OAPAwD,EAAUx6B,KAAI,SAAAmB,GACZ61B,EAAiB71B,EAAKqK,YAAYA,aAAe,SAAjD,eACKwrB,EAAiB71B,EAAKqK,YAAYA,aAAe,SADtD,eAEGrK,EAAKo0B,SAASA,SAAWp0B,EAAKlP,MAAMkb,gBAIlC,CACL3c,GAAIsa,OACJL,KAAMkM,EACNpL,WAAY8B,OAAOC,KAAK0pB,GAAkBh3B,KAAI,SAAAwN,GAAK,MAAK,CACtDhC,YAAagC,EACb/B,IAAKurB,EAAiBxpB,GAAjB,KAAkC,IACvC9B,IAAKsrB,EAAiBxpB,GAAjB,KAAkC,IACvC7B,IAAKqrB,EAAiBxpB,GAAjB,KAAkC,cAO3CupB,GAAqB,SAAAh3B,GAGzB,MAAO,CACL0K,KAHiBgwB,GAA6B16B,EAAKuyB,QAGlCtyB,KAAI,SAAA2W,GACnB,IAAM6jB,EAAYz6B,EAAKuyB,OAAO/kB,QAAO,SAAAspB,GACnC,GAAIA,EAAMpsB,KAAM,CACd,IAAMiwB,EAAavB,KAChBC,eAAevC,EAAMpsB,MACrB8uB,WAAWK,OAAO55B,KAAI,SAAAmB,GAAI,OACzBA,EAAKk4B,WAAWU,KAAK/5B,KAAI,SAAA2W,GAAG,OAAIA,EAAI1kB,YAGxC,IAAK,IAAIgmB,KAAKyiB,EACZ,GAAIA,EAAWvR,eAAelR,IACxB0iB,GAAcD,EAAWziB,GAAItB,GAAM,OAAO,MAMhDqgB,EAAmB,GAEzBwD,EAAUx6B,KAAI,SAAAmB,GACZ61B,EAAiB71B,EAAKqK,YAAYA,aAAe,SAAjD,eACKwrB,EAAiB71B,EAAKqK,YAAYA,aAAe,SADtD,eAEGrK,EAAKo0B,SAASA,SAAWp0B,EAAKlP,MAAMkb,gBAIzC,IAAM5B,EACJ8B,OAAOC,KAAK0pB,GAAkBh3B,KAAI,SAAAwN,GAAK,MAAK,CAC1ChC,YAAagC,EACb/B,IAAKurB,EAAiBxpB,GAAjB,KAAkC,IACvC9B,IAAKsrB,EAAiBxpB,GAAjB,KAAkC,IACvC7B,IAAKqrB,EAAiBxpB,GAAjB,KAAkC,SAClC,GAET,MAAO,CACLhd,GAAIsa,OACJL,KAAMkM,EACNlL,IAAMF,EAAWrZ,QAAUqZ,EAAW,GAAX,KAAyB,IACpDG,IAAMH,EAAWrZ,QAAUqZ,EAAW,GAAX,KAAyB,IACpDI,IAAMJ,EAAWrZ,QAAUqZ,EAAW,GAAX,KAAyB,UAMtD4uB,GAA2B,SAAAd,GAC/B,OAAKA,GAAeA,EAAWuB,WACxBvB,EAAWuB,WAAW56B,KAAI,SAACmB,EAAMjB,GAAP,MAAkB,CACjD8K,UAAWhC,KAAO7H,EAAKlP,MAAO,YAC9BgZ,SAAUlY,SAASsmC,EAAWwB,UAAU36B,GAAOjO,OAC/CiZ,SAAUmuB,EAAWyB,UAAU56B,GAAOjO,UAJU,IAQ9CsoC,GAAuB,SAAAjI,GAC3B,IAAMznB,EAAYynB,EACftyB,KAAI,SAAAmB,GACH,OAAIA,EAAKsJ,KACA0uB,KACJC,eAAej4B,EAAKsJ,MACpB8uB,WAAWK,OAAO,GAAGP,WAAWU,KAAK/5B,KAAI,SAAA2W,GAAG,OAAIA,EAAI1kB,SAElD,MAERsb,QAAO,SAAApM,GAAI,OAAIA,EAAKjP,UAEjB6oC,EAAkB9hB,MAAM+hB,KAC5B,IAAInoC,IAAIgY,EAAU7K,IAAIiE,KAAKC,YAC3BD,KAAKU,OAGH8F,EAAO,GAIX,OAFAswB,EAAgB/6B,KAAI,SAAAmB,GAAI,OAAKsJ,EAAI,sBAAOA,GAAP,YAAgBtJ,OAE1C,YAAI,IAAItO,IAAI4X,KAGfgwB,GAA+B,SAAAnI,GACnC,IAAMznB,EAAYynB,EACftyB,KAAI,SAAAmB,GACH,OAAIA,EAAKsJ,KACA0uB,KACJC,eAAej4B,EAAKsJ,MACpB8uB,WAAWK,OAAO55B,KAAI,SAAAmB,GAAI,OACzBA,EAAKk4B,WAAWU,KAAK/5B,KAAI,SAAA2W,GAAG,OAAIA,EAAI1kB,YAGnC,MAERsb,QAAO,SAAApM,GAAI,OAAIA,EAAKjP,UAEjB6oC,EAAkB9hB,MAAM+hB,KAC5B,IAAInoC,IAAIgY,EAAU7K,IAAIiE,KAAKC,YAC3BD,KAAKU,OAGH8F,EAAO,GAIX,OAFAswB,EAAgB/6B,KAAI,SAAAmB,GAAI,OAAKsJ,EAAI,sBAAOA,GAAP,YAAgBtJ,OAE1C,YAAI,IAAItO,IAAI4X,KAGfkwB,GAAgB,SAACM,EAAQC,GAC7B,OACED,EAAO/oC,SAAWgpC,EAAOhpC,QACzB+oC,EAAOzV,OAAM,SAAC2V,EAASj7B,GAAV,OAAoBi7B,IAAYD,EAAOh7B,OEhfxD8I,IAAOC,GAAGC,WAAW,OAEd,IAEMkyB,GAAiB,CAC5B3vB,IAAK,IACLC,IAAK,IACLC,IAAK,KAGM0vB,GAAkC,CAC7CrxB,YAAa,CACXE,YAAa,GACbC,WAAY,GACZG,aAAc,CACZC,UAAWvB,MACXwB,QAAS,MAEXotB,aAAc5uB,MACd8uB,eAAgB9uB,MAChBxO,WAAY,GACZohB,UAAW,EACX2c,iBAAkB,CAAC,CAAE/nC,GAAIsa,KAAK,MAC9Bzc,MAAO,IAET+b,gBAAiB,GACjBgB,gBAAiB,CACfK,IAAK,IACLC,IAAK,IACLC,IAAK,KAEPqnB,mBAAoB,CAClBznB,WAAY,CACV,CACE/a,GAAIsa,OACJU,YAAa,QACbC,IAAK,IACLC,IAAK,IACLC,IAAK,OAIXN,gBAAiB,CACfZ,KAAM5M,GAAUmC,KAAI,SAAA2W,GAAG,oBACrBnmB,GAAIsa,OACJ6L,IAAKA,GACFykB,QAGPvvB,WAAY,CACVC,OAAQ,IAEV2nB,kBAAmB,CACjBH,cAAe,IAEjBgI,sBAAuB,CACrBxG,kBAAmB,IAErB7oB,gBAAiB,CACfC,aAAc,KAILqvB,GAA8B,CACzCvxB,YAAa,EACbI,gBAAiB,EACjBqC,WAAY,EACZZ,WAAY,EACZ4nB,kBAAmB,EACnB6H,sBAAuB,EACvBrvB,gBAAiB,GAINuvB,GAA4B,CACvC,cACA,kBACA,CACEpvB,EAAG,kBACHC,EAAG,qBACHC,EAAG,mBAEL,aACA,oBACA,wBACA,mBAGWmvB,GAAqC,CAChDrwB,gBAAiB,EACjB4nB,mBAAoB,EACpB3nB,gBAAiB,GCjFNqwB,GAA+B,SAAA37B,GAC1C,IAAMiK,EAAcstB,GAAev3B,GAAMiK,YAEnCI,EAAkB,CACtBnQ,SAAU8F,EAAK9F,SACfG,eAAgB2F,EAAK3F,eACrBE,SAAUyF,EAAKzF,SACfC,YAAawF,EAAKxF,YAClBF,aAAc0F,EAAK1F,cAGfi4B,EAAS8F,GAAUr4B,GAEnB8L,EAAa,CACjBC,OAAQ/L,EAAK47B,MAAM37B,KAAI,SAAAmB,GAAI,MAAK,CAC9B3Q,GAAIuC,SAASoO,EAAK3Q,IAClBjC,MAAO4S,EAAK5S,MACZuB,YAAaqR,EAAKrR,YAClBqa,WAAY,CACVrU,MAAOqL,EAAKo1B,OAEd9qB,IAAKkrB,GAAiBx1B,EAAKmxB,OAAQ,OACnC5mB,IAAKirB,GAAiBx1B,EAAKmxB,OAAQ,OACnC3mB,IAAKgrB,GAAiBx1B,EAAKmxB,OAAQ,OACnCqB,WAAW,OAITF,EAAoB,CACxBH,cAAevzB,EAAK67B,aAAa57B,KAAI,SAAAmB,GAAI,MAAK,CAC5C3Q,GAAIuC,SAASoO,EAAK3Q,IAClBjC,MAAO4S,EAAK5S,MACZuB,YAAaqR,EAAKrR,YAElB2b,IAAKkrB,GAAiBx1B,EAAKmxB,OAAQ,OACnC5mB,IAAKirB,GAAiBx1B,EAAKmxB,OAAQ,OACnC3mB,IAAKgrB,GAAiBx1B,EAAKmxB,OAAQ,OACnCqB,WAAW,OAIT2H,EAAwB,CAC5BxG,kBAAmB/0B,EAAK+0B,kBAAkB90B,KAAI,SAAAmB,GAC5C,IAAMq2B,EAAkB,GAIxB,OAHIr2B,EAAKs2B,UAASD,EAAgBjpC,MAAQ4S,EAAKs2B,SAC3Ct2B,EAAKu2B,aAAYF,EAAgBv9B,SAAWkH,EAAKu2B,YAE9C,CACLlnC,GAAIuC,SAASoO,EAAK3Q,IAClBjC,MAAO4S,EAAK5S,MACZ0L,SAAUkH,EAAKlH,SACfc,UAAWy8B,EACXjB,MAAOp1B,EAAKo1B,MACZiD,aAAcr4B,EAAKq4B,aACnB9D,WAAYv0B,EAAKu0B,WACjB/B,WAAW,EACXrB,OAAQuJ,GAAkB,CACxBvJ,OAAQnxB,EAAK26B,iBACbtC,aAAcr4B,EAAKq4B,oBAMrBvtB,EAAkB,CACtBC,aAAcnM,EAAKk4B,UAAUj4B,KAAI,SAAAmB,GAAI,MAAK,CACxC3Q,GAAIuC,SAASoO,EAAK3Q,IAClB0kC,SAAU53B,GAAmB6D,EAAK+zB,WAAa/zB,EAAK+zB,SACpDC,gBAAiBh0B,EAAKg0B,gBACtBxB,WAAW,OAIT0E,EAAsBC,GAAwBv4B,EAAM8L,EAAW4nB,GAErE,OAAO,aACLzpB,cACAI,mBACGkoB,EAHL,CAIEzmB,aACA4nB,oBACA6H,wBACArvB,mBACGosB,IAIMf,GAAiB,SAAAv3B,GAC5B,MAAO,CACLiK,YAAa,CACXxZ,GAAIuC,SAASgN,EAAKvP,IAClB0Z,YAAanK,EAAKmK,YAClB3b,MAAOwR,EAAKxR,MACZ4b,WAAY,CACVrU,MAAOiK,EAAKw2B,OAEd5a,OAAQ5oB,SAASgN,EAAKg8B,cACtBr2B,SAAU3F,EAAK2F,SACf4E,aAAc,CACZC,UAAWvB,KAAOjJ,EAAK+X,SAAU,cACjCtN,QACGzK,EAAKgY,QAA0B,SAAhBhY,EAAKgY,OAEjB/O,KAAOjJ,EAAKgY,OAAQ,cADpB,MAGR6f,aAAc5uB,KAAOjJ,EAAK83B,YAAa,YACvCC,eAAgB9uB,KAAOjJ,EAAKg4B,aAAc,YAC1Cv9B,WAAYuF,EAAKvF,WACjBohB,UAAW7b,EAAK6b,WAAa,EAC7BvtB,MAAQ0R,EAAK1R,MACbkqC,iBAAkBrB,GAChBn3B,EAAKi8B,4BAMP3wB,GAAkB,SAAAtL,GAAS,IAAD,IACxBuyB,EAASz0B,GAAUic,QAAO,SAACC,EAAKkiB,GAAN,OAAiBliB,EAAIkiB,GAAQ,GAAKliB,IAAM,IAExE,iBAAIha,EAAKuyB,cAAT,uBAAI,EAAc,UAAlB,aAAI,EAAkB3b,MACpB5W,EAAKuyB,OAAOhK,SAAQ,SAAAuO,GACdvE,EAAOuE,EAAMlgB,KACf2b,EAAOuE,EAAMlgB,KAAKkgB,EAAMtB,SAASA,UAAYsB,EAAM5kC,MAEnDqgC,EAAOuE,EAAMlgB,KAAb,eACGkgB,EAAMtB,SAASA,SAAWsB,EAAM5kC,UAclC,CACLwY,KAAM4C,OAAOC,KAAKglB,GAAQtyB,KAAI,SAAA62B,GAC5B,MAAO,CACLrmC,GAAIsa,OACJ6L,IAAKkgB,EACLprB,IAAK,UAAG6mB,EAAOuE,GAAP,MAA0B,IAClCnrB,IAAK,UAAG4mB,EAAOuE,GAAP,MAA0B,IAClClrB,IAAK,UAAG2mB,EAAOuE,GAAP,MAA0B,UAhB/B,CACLpsB,KAAM5M,GAAUmC,KAAI,SAAA2W,GAAG,oBACrBnmB,GAAIsa,OACJ6L,IAAKA,GACFykB,SAkBEhD,GAAY,SAAAr4B,GACvB,MAAO,CACLqL,gBAAiB2rB,GAAmBh3B,GACpCizB,mBAAoBiE,GAAsBl3B,GAC1CsL,gBAAiBA,GAAgBtL,KAI/Bu4B,GAA0B,SAACv4B,EAAM8L,EAAW4nB,GAAuB,IAAD,EAEhE4E,GAAmB,yCADF,aAEc,IADZ,wCADF,aAGkB,IAFhB,GAsCzB,OAjCIt4B,EAAK03B,UACPY,EAAoB,eAAD,OAPE,cAOkC,CACrD9pC,MAAOwR,EAAK03B,QACZj9B,WAAYuF,EAAKm8B,cAGnB7D,EAAoB,mBAAD,OAZE,cAYsC,CACzDp+B,SAAU8F,EAAK23B,WACft9B,eAAgB2F,EAAK+4B,iBACrBx+B,SAAUyF,EAAKi5B,WACfz+B,YAAawF,EAAKk5B,cAClB5+B,aAAc0F,EAAKg5B,gBAGrBltB,EAAWC,OAASD,EAAWC,OAAO9L,KAAI,SAACmB,EAAMjB,GAAP,sBACrCiB,EADqC,eApBrB,YAsBD,CAChB3Q,GAAIuC,SAASoO,EAAK3Q,IAClBjC,MAAOwR,EAAK47B,MAAMz7B,GAAX,QACPpQ,YAAaiQ,EAAK47B,MAAMz7B,GAAX,oBAIjBuzB,EAAkBH,cAAgBG,EAAkBH,cAActzB,KAAI,SAACmB,EAAMjB,GAAP,sBACjEiB,EADiE,eA7BjD,YA+BD,CAChB3Q,GAAIuC,SAASoO,EAAK3Q,IAClBjC,MAAOwR,EAAK67B,aAAa17B,GAAlB,QACPpQ,YAAaiQ,EAAK67B,aAAa17B,GAAlB,qBAKZm4B,GCxNH8D,GAA2B,SAACx5B,EAAkBy5B,EAAOC,GACzD,MAAyB,WAArB15B,GAAiC05B,GAAShvB,OAAOC,KAAK+uB,GAAOnqC,OAAS,EACjEmqC,EAGFD,GCLHE,GAAoB,SAAArqC,GACxB,IAKMsjC,EALU,IAAIgH,KAAKC,aAAa,QAAS,CAC7CrkC,MAAO,WACPo9B,SAAU,QAGephB,OAAOliB,GAAO4H,QAAQ,IAAK,IAEtD,MAAiB,QAAb07B,EAA2BtjC,EAExBsjC,GCgBMpoC,GAxBGC,YAAW,CAC3BqvC,cAAe,CACb7mC,aAAc,QAEhB6Y,YAAa,CACX7Y,aAAc,QAEhB6/B,aAAc,CACZpgC,QAAS,OACTC,eAAgB,gBAChBonC,SAAU,OACV9mC,aAAc,QAEhB4V,YAAa,CACXpW,MAAO,SAETunC,WAAY,CACV/mC,aAAc,QAEhBgC,MAAO,CACLtJ,OAAQ,kBCRNsuC,GAAS,SAAC,GAA6C,IAA3CrjC,EAA0C,EAA1CA,aAAc3B,EAA4B,EAA5BA,MAAOilC,EAAqB,EAArBA,eAC/BltC,EAAUxC,KAD0C,EAE9CyC,cAALC,EAFmD,oBAI1D,IAAK0J,IAAiB3B,EAAO,OAAO,KAIpC,GAFuD,IAAnCA,EAAMmW,QAAQ,iBAEjB,CACf,IAAM+uB,EAAallC,EAAM8+B,MAAM,KACzBqG,EAAcD,EAAW5qC,OACzB8qC,EAAcF,EAAWtN,MAAM,GAAI,GAAG5F,KAAK,KACjD,OACE,kBAACjxB,GAAA,EAAD,CACEtI,UAAWsG,KAAWhH,EAAQiI,MAAOilC,GACrCjlC,OAAK,GAEJ/H,EAAEmtC,EAAa,CAAEC,OAAQH,EAAWC,EAAc,MAKzD,OACE,kBAACpkC,GAAA,EAAD,CAAgBtI,UAAWsG,KAAWhH,EAAQiI,MAAOilC,GAAiBjlC,OAAK,GACxE/H,EAAE+H,KA0DMslC,GArDc,SAAC,GAOvB,IANLxT,EAMI,EANJA,OACAn7B,EAKI,EALJA,MACA8B,EAII,EAJJA,UACAwsC,EAGI,EAHJA,eACAtH,EAEI,EAFJA,SAEI,IADJl8B,KAAQE,EACJ,EADIA,aAAc3B,EAClB,EADkBA,MAEhBjI,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIJ,OACE,6BACGtB,GACC,kBAACkI,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQ8e,aACzC5e,EAAEtB,IAGP,yBAAK8B,UAAWsG,KAAWhH,EAAQ8lC,aAAcplC,IAC9Cq5B,EAAO1pB,KAAI,SAACwN,EAAOtN,GAClB,IAAMiB,EAAOuoB,EAAOnE,IAAIrlB,GAClBi9B,EAAe5H,GAAYp0B,EAAKo0B,SAChC6H,EAAyBd,GAAkBn7B,EAAKg8B,IAElD9lC,EAAK,GAIT,OAHI8J,EAAKqK,YAAYtZ,SAAQmF,EAAK,UAAMxH,EAAEsR,EAAKqK,aAAb,aAClCnU,GAAK,UAAO8lC,EAAP,YAAuBC,GAG1B,yBAAKp1B,IAAK7G,EAAK3Q,GAAIH,UAAWV,EAAQ6b,aACpC,kBAAC8P,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,iBACJzU,cAAc,EACdD,UAAW,EACXD,kBAAkB,EAClBxI,UAAWV,EAAQgtC,WACnBtlC,MAAOA,EACPvC,UAAW8D,UAOrB,kBAAC,GAAD,CACEhB,MAAOA,EACP2B,aAAcA,EACdsjC,eAAgBA,MCmCT1vC,GA3HGC,aAAW,SAAAC,GAAK,YAAK,CACrCovC,cAAe,CACb7mC,aAAc,QAEhB6Y,YAAY,aACV7Y,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,oBACRiH,WAAY,SACZa,UAAW,SACXsB,cAAe,SAGnB2lC,WAAW,aACThoC,QAAS,OACTC,eAAgB,gBAChBC,WAAY,SACZmC,cAAe,OACf9B,aAAc,OACd6mB,aAAc,oBACd,eAAgB,CACd7mB,aAAc,IAEfvI,EAAMQ,YAAYC,KAAK,MAAQ,IAKlCyoC,OAAK,GACHnhC,MAAO,QACPD,OAAQ,QACRoqB,eAAgB,QAChBC,iBAAkB,YAClBC,mBAAoB,SACpB/xB,aAAc,MACdY,OAAQ,cAPL,cAQFjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,QACPD,OAAQ,QACR7G,OAAQ,eAXP,cAaFjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,QACP9G,OAAQ,gBAfP,GAkBLgvC,YAAY,aACVlvC,WAAY,OACZwH,aAAc,OACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC/B2kC,YAAa,SAGhB8K,WAAW,aACTloC,QAAS,OACTC,eAAgB,gBAChBC,WAAY,UACXlI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfF,eAAgB,WAGpBkoC,kBAAkB,aAChBpoC,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPgB,UAAW,SACXpI,QAAS,WAGbyvC,YAAa,CACXvvC,SAAU,OACVE,WAAY,QAEdsvC,YAAY,aACVtoC,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGXuoC,gBAAiB,CACftvC,MAAOhB,EAAM6Y,QAAQ8O,KAAKuR,QAC1Bn4B,WAAY,OACZS,YAAa,QAEf0mC,SAAU,CACRrnC,SAAU,QAEZ0vC,oBAAoB,aAClB/uC,YAAa,QACZxB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BuH,QAAS,SAGbwoC,0BAA0B,eAEvBxwC,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BuH,QAAS,UAIbyoC,cAAc,aACZzoC,QAAS,OACTU,WAAY,OACZpI,SAAU,eACTN,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BuH,QAAS,UAGb0oC,iBAAkB,CAChB1oC,QAAS,OACTC,eAAgB,iBAElB0oC,qBAAqB,aACnB3oC,QAAS,OACTE,WAAY,WACZ5H,SAAU,eACTN,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,eC1GfyoC,GAAW,SAAC,GAAkC,IAAhCC,EAA+B,EAA/BA,SAAU/8B,EAAqB,EAArBA,KAAMo0B,EAAe,EAAfA,SAC5B5lC,EAAUxC,KAEhB,OACE,oCACG+wC,EACC,kBAACznC,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQguC,iBAC1C,0BAAMttC,UAAWV,EAAQ4lC,UAAWA,GAAiB,IACpD+G,GAAkBn7B,EAAKo0B,KAG1B,kBAAC9+B,EAAA,EAAD,CAAY1F,QAAQ,MACjBwkC,EAAU,IACX,0BAAMllC,UAAWV,EAAQ8tC,aACtBnB,GAAkBn7B,EAAKo0B,QAkHrB4I,GA1GI,SAAC,GAUb,IATLzU,EASI,EATJA,OACAn7B,EAQI,EARJA,MACAgnC,EAOI,EAPJA,SACA6I,EAMI,EANJA,WACAC,EAKI,EALJA,eACAlgB,EAII,EAJJA,aACAmgB,EAGI,EAHJA,eACAC,EAEI,EAFJA,WACAL,EACI,EADJA,SAEMvuC,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAIE8S,EAJF,KAI0BnH,SAE9B,OAAKkuB,EAAOx3B,OAGV,yBAAK7B,UAAWsG,KAAWhH,EAAQ8sC,cAAete,IAC/C5vB,GACC,kBAACkI,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQ8e,aACzC5e,EAAEtB,IAGP,6BACGm7B,EAAO1pB,KAAI,SAACwN,EAAOtN,GAClB,IAAMiB,EAAOuoB,EAAOnE,IAAIrlB,GAClBpM,EAAOqoC,GACXx5B,EACAxB,EACAA,EAAI,WAEN,OACE,yBACE6G,IAAK7G,EAAK3Q,GAEVH,UAAWsG,KAAWhH,EAAQ0tC,WAAYgB,IAEzCl9B,EAAKgJ,WAAWrU,OACf,yBACEzF,UAAWV,EAAQ4mC,MACnBp+B,MAAO,CACLopB,gBAAgB,OAAD,OAASpgB,EAAKgJ,WAAWrU,MAAzB,QAIrB,yBAAKqC,MAAO,CAAE/C,MAAO,SAClBtB,EAAKhE,aACJ,yBAAKO,UAAWV,EAAQouC,kBACtB,kBAACtnC,EAAA,EAAD,CACE1F,QAAQ,QACRV,UAAWsG,KAAWhH,EAAQ2tC,YAAac,IAE1CtqC,EAAKvF,OAER,yBAAK8B,UAAWV,EAAQmuC,eACtB,kBAAC,GAAD,CACEI,SAAUA,EACV3I,SAAUA,EACVp0B,KAAMA,MAKd,yBAAK9Q,UAAWV,EAAQ4tC,YACtB,kBAAC9mC,EAAA,EAAD,CACE1F,QAAS+C,EAAKhE,YAAc,QAAU,KACtCO,UAAWsG,KACThH,EAAQ6tC,kBACRc,EACAC,IAGDzqC,EAAKhE,YAAcgE,EAAKhE,YAAcgE,EAAKvF,OAE9C,yBAAK8B,UAAWV,EAAQquC,sBACtB,yBACE3tC,UAAWsG,KAAWhH,EAAQiuC,oBAAT,eAClBjuC,EAAQkuC,2BAA6B/pC,EAAKhE,eAG7C,kBAAC,GAAD,CACEouC,SAAUA,EACV3I,SAAUA,EACVp0B,KAAMA,KAGV,kBAACma,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,UACJzU,cAAc,EACdD,UAAW,EACXzI,UAAWV,EAAQ+tC,YACnB5oC,UAAW8D,cA7EJ,MCmBdwV,GApEE,SAAAC,GACf,IAAMpW,EAAS,GAkBf,GAhBIiV,GAASmB,EAAO8J,eAAe,KACjClgB,EAAOkgB,cAAgB,6BAGpB9J,EAAOuG,OAAUvG,EAAOuG,MAAMrK,WAAc8D,EAAOuG,MAAMpK,QAG5DxB,KAAOqF,EAAOuG,MAAMpK,SAASsK,KAAKzG,EAAOuG,MAAMrK,UAAW,QAC1D8D,EAAOuN,YAEP3jB,EAAO2c,MAAQ,CACbI,KAAM,2CACN1R,UAAW,CAAE25B,OAAQ5uB,EAAOuN,aAP9B3jB,EAAO2c,MAAQ,qBAWbvG,EAAOonB,cAAgBpnB,EAAOonB,aAAavjC,OAAQ,CACrD,IAAIssC,EAA0B,GAC1BC,GAAsB,EAE1BpwB,EAAOonB,aAAanN,SAAQ,SAACnnB,EAAMjB,GAC7BiB,EAAKs0B,cAAgB1iC,SAASoO,EAAKs0B,cAAgB,IACrDgJ,GAAsB,GAGxBD,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG9CgJ,IACHxmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAQ,yDAKd,IACG7wB,EAAOw9B,cACRpnB,EAAOonB,cACPpnB,EAAOonB,aAAavjC,OACpB,CACA,IAAMwsC,EAAwBrwB,EAAOrD,UACjCqD,EAAOrD,UAAU2zB,UACjBtwB,EAAOE,gBACLiwB,EAA0B,GAC5BI,EAAoB,EAExBvwB,EAAOonB,aAAanN,SAAQ,SAACnnB,EAAMjB,GAC7BiB,EAAKs0B,cAAgBt0B,EAAKs0B,aAAavjC,SACzC0sC,GAAqB7rC,SAASoO,EAAKs0B,eAErC+I,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG/CmJ,EAAoBF,IACtBzmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAO,0CAAD,OAAuC4V,MAKnD,OAAOzmC,GClEI9K,GAAYC,YAAW,CAClCE,MAAO,CACLC,gBAAiB,OACjBC,OAAQ,oBACRC,UAAW,aACXC,aAAc,MACd0H,MAAO,QACPxH,SAAU,QACVuH,OAAQ,QACR0pC,SAAU,UAEZ9wC,YAAa,CACX+wC,UAAW,SACX9wC,QAAS,YACTmH,OAAQ,QACR,gBAAiB,CACfqK,WAAY,QAGhBvR,gBAAiB,CACfC,SAAU,OACVC,WAAY,OACZC,WAAY,SACZC,MAAO,OACPL,QAAS,IACTM,OAAQ,KAEVC,MAAO,CACL8G,QAAS,OACTE,WAAY,SACZrH,SAAU,OACVE,WAAY,MACZD,WAAY,OACZE,MAAO,OACPL,QAAS,kBAEXQ,YAAa,CACXC,UAAW,oBACXT,QAAS,aAEXW,cAAe,CACbnB,OAAQ,oBACRE,aAAc,MACdQ,SAAU,OACVC,WAAY,OACZC,WAAY,IACZC,MAAO,UACPL,QAAS,WACTL,SAAU,OACVkB,YAAa,OAEfC,cAAe,CACbC,UAAW,OACXvB,OAAQ,oBACRE,aAAc,MACdH,gBAAiB,UACjBc,MAAO,UACPH,SAAU,OACVC,WAAY,OACZC,WAAY,IACZJ,QAAS,WACTL,SAAU,OACV,UAAW,CACTJ,gBAAiB,UACjBc,MAAO,YAGXW,SAAU,CACRC,SAAU,WACVC,IAAK,EACLC,MAAO,EACPnB,QAAS,QAEXoB,UAAW,CACTlB,SAAU,OACVG,MAAO,QAET0wC,SAAU,CACR1pC,QAAS,OACTE,WAAY,SACZK,aAAc,MACd,eAAgB,CACdA,aAAc,IAGlBopC,SAAU,CACR9wC,SAAU,OACVW,YAAa,QAEfowC,SAAU,CACRrpC,aAAc,QAEhB6Y,YAAa,CACX7Y,aAAc,QAEhBspC,aAAc,CACZ9wC,WAAY,OACZwH,aAAc,QAEhBupC,kBAAmB,CACjB/wC,WAAY,OACZwH,aAAc,OAEhBsB,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,mBAEVsgC,aAAc,CACZ7/B,aAAc,OAEhBwpC,qBAAsB,CACpB9wC,OAAQ,gBAEV+wC,eAAgB,CACd7pC,cAAe,UAEjBsZ,SAAU,CACR5gB,SAAU,OACV6H,WAAY,OAEdwoC,WAAY,CACVrwC,SAAU,UCgQC+rB,gBAAU,CACvBnmB,KAAM,+BACNomB,kBAAkB,EAClBE,aAAa,EACbhM,YACAiM,cApVoB,CACpBob,aAAc,GACd3pB,OAAQ,GACRwnB,cAAe,KA4UFrZ,CAMZjZ,aAlBqB,SAAAtO,GACtB,MAAO,CACL4sC,6BAA8B5sC,EAAMoB,KAAKwrC,iCAIlB,SAAAr+B,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,+BAAgC+F,EAAOvb,QAUxD+O,EA3U6B,SAAC,GAY1B,IAXL1R,EAWI,EAXJA,KACA0zB,EAUI,EAVJA,QACAvzB,EASI,EATJA,SACAC,EAQI,EARJA,UACA8vC,EAOI,EAPJA,SACAzzB,EAMI,EANJA,0BACAwpB,EAKI,EALJA,SACA+J,EAII,EAJJA,6BACAC,EAGI,EAHJA,qBACAjlB,EAEI,EAFJA,aACAD,EACI,EADJA,cAEM1qB,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAIE8S,EAJF,KAI0BnH,SAExBkc,EAAe2C,EAAczF,MAC7BrK,EAAYmN,EAAeA,EAAanN,UAAYvB,OAPtD,EAS8BxH,IAAMrQ,WAAWkpB,EAAc9rB,OAT7D,mBASGkxC,EATH,KAScC,EATd,OAU0Cl+B,IAAMrQ,SAAS,MAVzD,mBAUGwuC,EAVH,KAUoBC,EAVpB,OAWsCp+B,IAAMrQ,SAAS,MAXrD,mBAWGgnB,EAXH,KAWkB0nB,EAXlB,OAYsDr+B,IAAMrQ,UAC9D,GAbE,mBAYG2uC,EAZH,KAY0BC,EAZ1B,OAgBsB59B,YAASkyB,GAAe,CAChD2L,MAAOL,EACPM,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTq8B,gBAAiBA,EACjB5c,gBAAiBC,KANbC,EAhBJ,EAgBIA,QAASljB,EAhBb,EAgBaA,KAhBb,EA8BAoC,YAASiyB,GAAY,CACvB4L,MAAOL,EACPM,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTq8B,gBAAiBA,EACjB5c,gBAAiBC,EACjBmd,YAAan3B,KAAOuB,GACjBmK,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAOuB,GAAWkI,IAAI,EAAG,WACxCkC,MAAM,SACNR,OAAO,iBAfHksB,EA3BP,EA2BFpd,QACMqd,EA5BJ,EA4BFvgC,KACSwgC,GA7BP,EA6BFl+B,QAiBFb,IAAM+C,WAAU,WACd,GAAIxE,GAAQA,EAAK6X,eAAe1lB,OAAQ,CACtC,IAAMsuC,EAAwBzgC,EAAK6X,eAAe,GAC5C6oB,EAAoB/E,GACxB8E,GAGEA,EAAsBlO,OAAO,GAAG9mB,YAAYA,YAC9Ci1B,EAAiB,WArED,qBAsEPD,EAAsBlO,OAAO,GAAG3b,IACzC8pB,EAAiB,WAtEJ,kBAwEbA,EAAiB,WA1EJ,kBA6EfC,GAAgBD,GAChBE,GAAUF,GACVG,GAAiBH,GACjBI,GAAmBJ,GAEnBlB,EACE,YACAkB,EAAkBz2B,YAAY4R,WAG3B6jB,IACHF,EAAqB,QAASkB,EAAkBz2B,YAAYzb,OAC5DgxC,EAAqB,aAAckB,EAAiB,YACpDlB,EAAqB,QAAS,OAGhCG,GAAa,GACbG,EAAiBY,MAElB,CAAC1gC,IAEJyB,IAAM+C,WAAU,WACd,IAAMu8B,EACJxB,EAA6BjxB,OAAO8J,cAElC2oB,GACFlB,EAAmBkB,KAEpB,CAACxB,EAA6BjxB,OAAO8J,gBAExC3W,IAAM+C,WAAU,WACT+6B,GAAiCnnB,GACtCuoB,GAAgBvoB,KACf,CAACmnB,EAA6BjxB,OAAOuG,QAExC,IAYM8rB,GAAkB,SAAAvoB,GACtB4nB,GAA0BD,GAE1B,IAAMtK,EACJ8J,EAA6BjxB,OAAOonB,cAAgB,GAChD7gB,EAAQ0qB,EAA6BjxB,OAAOuG,MAElD,GAAIA,GAASA,EAAMrK,WAAaqK,EAAMpK,QAAS,CAC7C,IAAMirB,EAAeH,GACnBnd,EACAod,EACAC,EACA5gB,GAEF2qB,EAAqB,eAAgB9J,QAErC8J,EAAqB,eAAgB,KAInCoB,GAAY,SAAAxoB,GAChB,IAAM4oB,EAAiBzB,EAA6BjxB,OAAOvC,QAAU,GAE/Dk1B,EAAa7oB,EAActM,WAAWC,OAAO9L,KAAI,SAAAmB,GACrD,IAAM8/B,EAAeF,EAAe79B,MAAK,SAAAy4B,GAAK,OAAIA,EAAMnrC,KAAO2Q,EAAK3Q,MACpE,OAAO,eACF2Q,EADL,CAEElP,MAAOgvC,EAAeA,EAAahvC,MAAQ,EAC3CivC,WAAYD,EAAeA,EAAaC,WAAa,UAIzD3B,EAAqB,SAAUyB,IAG3BJ,GAAmB,SAAAzoB,GACvB,IAAMgpB,EAAwB7B,EAA6BjxB,OAAOilB,eAAiB,GAC7E8N,EAAoBjpB,EAAcsb,kBAAkBH,cAActzB,KAAI,SAAAmB,GAC1E,IAAMkgC,EAAsBF,EAAsBj+B,MAAK,SAAA04B,GAAY,OAAIA,EAAaprC,KAAO2Q,EAAK3Q,MAChG,OAAO,eACF2Q,EADL,CAEElP,MAAOovC,EAAsBA,EAAoBpvC,MAAQ,EACzDivC,WAAYG,EAAsBA,EAAoBH,WAAa,UAGvE3B,EAAqB,gBAAiB6B,IAGlCP,GAAqB,SAAA1oB,GACzBonB,EAAqB,kBAAmBpnB,EAAcnO,YAAY2R,SAgBpE,OACE,kBAACxrB,EAAA,EAAD,CAAQb,KAAMA,EAAMgyC,OAAO,QAAQ3xC,QAAS,CAAErC,MAAOqC,EAAQrC,QAC3D,kBAAC,GAAD,CACE2J,UAAWgsB,GAAWod,EACtBnpC,gBAAiBvH,EAAQuH,kBAG3B,kBAAC9G,EAAA,EAAD,CAAYC,UAAWV,EAAQX,SAAUsB,QAASb,GAChD,kBAAC,IAAD,CAAkBY,UAAWV,EAAQP,aAGvC,kBAACmB,EAAA,EAAD,CACEC,GAAG,qBACHb,QAAS,CAAEc,KAAMd,EAAQpB,OACzBmC,mBAAmB,GAElBynB,EACGgkB,GACEx5B,EACAwV,EAAcnO,YACdmO,EAAc,0BACd5pB,MACFsB,EAAE,sBACN,kBAAC,GAAD,CAAgBmlB,KAAK,2EACnB,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAIjC,0BACEuM,SAAUf,GAAa,SAAAnZ,GAAI,OACvBkZ,EAAc9rB,MAAQixC,EAASr+B,GA3ClB,SAAAA,GACrB,IAAMogC,EAAuBppB,EAAc,yBACrCqf,EAAkB,GAEpB+J,IACF/J,EAAe,MAAY+J,EAAqBhzC,OAElDmB,EAAU,eACLyR,EADI,CAEPpG,UAAWy8B,KAkCkCgK,CAAergC,OAG1D,kBAACxQ,EAAA,EAAD,CAAehB,QAAS,CAAEc,KAAMd,EAAQ5B,cACrCoqB,GACC,yBAAK9nB,UAAWV,EAAQsvC,UACtB,yBAAK5uC,UAAWV,EAAQovC,UACtB,kBAAC,KAAD,CAAwBpvC,QAAS,CAAEc,KAAMd,EAAQqvC,YACjD,kBAACvoC,EAAA,EAAD,CAAY1F,QAAQ,SACjBonB,EAAcnO,YAAYtE,WAG/B,yBAAKrV,UAAWV,EAAQovC,UACtB,kBAAC,KAAD,CAAmBpvC,QAAS,CAAEc,KAAMd,EAAQqvC,YAC5C,kBAACvoC,EAAA,EAAD,CAAY1F,QAAQ,SACjBonB,EAAcnO,YAAY2R,OAD7B,IACsC9rB,EAAE,aAK9C,kBAACyrB,GAAA,EAAD,CACErT,KAAK,gBACL5X,UAAWV,EAAQ8e,YACnBwM,KAAMlP,EAA0BC,sBAChCwB,MAAM,QACNnW,MAAM,kBACNvC,UAAWqzB,KAEZhQ,GACC,oCACE,kBAACmD,GAAA,EAAD,CACErT,KAAK,QACLuJ,eAAgB0G,GAAuBC,GACvCtH,cAAe4G,GAAiB6oB,EAAe5oB,GAC/CjG,qBA7Ia,SAAAV,GACzBwvB,GAAiB,CACfZ,gBAAiBA,EACjBQ,YAAan3B,KAAO+H,GACjB2D,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAO+H,GAAM0B,IAAI,EAAG,WACnCkC,MAAM,SACNR,OAAO,iBAsIA9jB,UAAWV,EAAQ8e,YACnBpX,MAAM,iBACN6a,QAAS,GACTpd,UAAWuc,GACXC,yBAA0BoG,MAEzB4nB,EAA6BjxB,OAAOonB,aAAavjC,QAClD,oCACE,kBAACuE,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQuvC,cAC5CrvC,EAAE,UADL,MAGA,kBAACy5B,GAAA,EAAD,CACErhB,KAAK,eACL5X,UAAWV,EAAQ8lC,aACnBoH,eAAgBltC,EAAQyvC,qBACxBU,sBAAuBA,EACvBhrC,UAAWooC,GACX3H,SAAUA,OAKb+J,EAA6BjxB,OAAOilB,cAAcphC,SAElDotC,EAA6BjxB,OAAOvC,OAAO5Z,QAC5C,oCACE,kBAACuE,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQuvC,cAC5CrvC,EAAE,YAEL,kBAACy5B,GAAA,EAAD,CACErhB,KAAK,SACLstB,SAAUA,EACVzgC,UAAWqpC,GACXG,eAAgB3uC,EAAQ4uC,gBAQpC,kBAAC1tC,EAAA,EAAD,CAAelB,QAAS,CAAEc,KAAMd,EAAQnB,cACtC,kBAACsC,EAAA,EAAD,CACER,QAASb,EACTsB,QAAQ,WACRpB,QAAS,CAAEc,KAAMd,EAAQhB,gBAExBkB,EAAE,WAEL,kBAACiB,EAAA,EAAD,CACE8B,KAAK,SACL7B,QAAQ,WACRpB,QAAS,CAAEc,KAAMd,EAAQb,eACzBkC,WAAS,GAERnB,EAAE,gBChWTylC,GAAkB,SACtBmM,EACAC,EACA3B,EACAD,EACAvK,EACAC,GAEA,GAAKiM,EAAL,CAEA,IAAME,EAAmBpM,GAAYmM,EAAiBrzB,OAAOknB,SACzDqM,EAAeF,EAAiBrzB,OAAOuzB,aACrCC,EAAaH,EAAiBrzB,OAAOwzB,WACrCvP,EAASmP,EAASA,EAAS/L,YAC3BA,EAAa+L,EAAQ,WACrBjI,EAAeiI,EAAQ,aAEvBhM,EAAe,GASrB,GANAsK,GAA0BD,IAErB8B,GAAgBC,IACnBD,EAAeC,EAAWt3B,YAGvBq3B,IAAiBC,EACpB,OAAKvP,EAAO/mB,YASZu2B,GACExP,EACAmD,EACAkM,EACAnM,GAEKC,IAdLsM,GACEzP,EACAmD,EACAkM,EACAnM,GAEKC,GAwHX,GA/JkB,oBA+JdC,EAA4B,CAC9B,IAAM/e,EAAM2b,EAAO7nB,KAAKvH,MACtB,SAAA/B,GAAI,OAAIA,EAAKwV,MAAQ3N,KAAO44B,GAAcztB,OAAO,UAEnD2tB,GAAgBnrB,EAAK8e,EAAckM,EAAkBnM,QAChD,GAnKgB,4BAmKZE,EAAiC,CAC1C,IAAM/e,EAAM2b,EAAOznB,UAAU3H,MAAK,SAAA/B,GAAI,OACpCA,EAAKsJ,KAAK2J,SAASpL,KAAO44B,GAAcztB,OAAO,WAEjD2tB,GAAgBnrB,EAAK8e,EAAckM,EAAkBnM,QAChD,GAvKW,oBAuKPE,EACToM,GACExP,EACAmD,EACAkM,EACAnM,QAEG,GA7KW,oBA6KPE,EAA4B,CACrC,IAAMv0B,EACa,qBAAjBq4B,EACIlH,EACAA,EAAO7nB,KAAKvH,MAAK,SAAA/B,GAAI,OACnBA,EAAKsJ,KAAK2J,SAASpL,KAAO44B,GAAcztB,OAAO,WAGvD4tB,GACE5gC,EACAs0B,EACAkM,EACAnM,GAIJ,OAAOC,IAYHqM,GAAkB,SACtB3gC,EACAs0B,EACAkM,EACAnM,GAEA,GAAKr0B,EAAL,CACAA,EAAKoK,WAAWvL,KAAI,SAAAmB,GAClBs0B,EAAa7vB,KAAK,CAChBpV,GAAG,GAAD,OAAK2Q,EAAKqK,YAAV,YAAyBm2B,EAAzB,YAA6CxgC,EAAKwgC,IACpDn2B,YAAarK,EAAKqK,YAClBiqB,aAAc,EACdF,SAAUoM,EACVhM,cAAex0B,EAAKwgC,GACpBh2B,IAAKxK,EAAKwK,IACVD,IAAKvK,EAAKuK,IACVD,IAAKtK,EAAKsK,SAId,IAAMu2B,EAAsBpM,GAC1BH,EACAD,GAGFC,EAAavjC,OAAS,EACtBujC,EAAa7vB,KAAb,MAAA6vB,EAAY,YAASuM,MAGjBD,GAAuB,SAC3BzP,EACAmD,EACAF,EACAC,EACA/qB,GAEIA,EACFgrB,EAAa7vB,KAAK,CAChBpV,GAAG,GAAD,OAAK+kC,EAAL,YAAiBjD,EAAO/mB,WAAW,GAAGgqB,IACxC/pB,YAAa8mB,EAAO/mB,WAAW,GAAGC,YAClCiqB,aAAc,EACdF,SAAUA,EACVI,cAAerD,EAAO/mB,WAAW,GAAGgqB,GACpC5pB,IAAK2mB,EAAO/mB,WAAW,GAAGI,IAAMlB,EAChCiB,IAAK4mB,EAAO/mB,WAAW,GAAGG,IAAMjB,EAChCgB,IAAK6mB,EAAO/mB,WAAW,GAAGE,IAAMhB,IAGlCgrB,EAAa7vB,KAAK,CAChBpV,GAAG,GAAD,OAAK+kC,EAAL,YAAiBjD,EAAOiD,IAC1B/pB,YAAa,GACbiqB,aAAc,EACdF,SAAUA,EACVI,cAAerD,EAAOiD,GACtB5pB,IAAK2mB,EAAO3mB,IACZD,IAAK4mB,EAAO5mB,IACZD,IAAK6mB,EAAO7mB,MAGhB,IAAMu2B,EAAsBpM,GAC1BH,EACAD,GAKF,OAFAC,EAAavjC,OAAS,EACtBujC,EAAa7vB,KAAb,MAAA6vB,EAAY,YAASuM,IACdvM,GAGHG,GAA+B,SAACH,EAAcD,GAClD,OAAOC,EAAaz1B,KAAI,SAAAmB,GACtB,IAAM+0B,IAAqBV,GACvBA,EAAqBtyB,MACnB,SAAAsI,GAAW,OAAIA,EAAYA,cAAgBrK,EAAKqK,eAGtD,OAAI0qB,EACK,eACF/0B,EADL,CAEEs0B,aAAcS,EAAmBT,eAG9Bt0B,MC3RL+W,GAAyB,SAAAupB,GAC7B,IAAKA,EACH,MAAO,CACLl3B,UAAW,KACXC,QAAS,KACTyJ,WAAY,IAIhB,IAAMikB,EACJuJ,EAAQ,kBACRA,EAAQ,qBAEV,IAAKvJ,EACH,MAAO,CACL3tB,UAAW,KACXC,QAAS,KACTyJ,WAAY,IAIhB,IAAMA,EAAa,GAEnB,GAAIwtB,EAAQ,iBAA8B,CACxC,IAAMh3B,EAAOw3B,GAA2B/J,EAASztB,MACjDwJ,EAAWrO,KAAX,MAAAqO,EAAU,YAASxJ,SACVg3B,EAAQ,sBACjBvJ,EAASrtB,UAAU7K,KAAI,SAAAmB,GACrB,IAAMsJ,EAAOw3B,GAA2B9gC,EAAKsJ,MAC7CwJ,EAAWrO,KAAX,MAAAqO,EAAU,YAASxJ,OAIvB,IAAMH,EAAe4tB,EAAS5tB,cAAgB,GAE9C,MAAO,CACLC,UAAWD,EAAaC,UACxBC,QAASF,EAAaE,QACtByJ,WAAYA,IAIVguB,GAA6B,SAAAx3B,GACjC,OAAO4C,OAAOC,KAAK7C,GAAQ,IACxB8C,QAAO,SAAAC,GAAK,OAAI/C,EAAK+C,MACrBxN,KAAI,SAAAmB,GAAI,OAAIA,MAGXsW,GAAmB,SACvByqB,EACAC,EACAV,GAEA,IAAM7I,EAA+BsJ,EACjCA,EAA0BvJ,WAAW,GAAGC,6BACxC,GAEEV,EAAWuJ,GAAYA,EAAQ,qBAErC,OAAO7I,EACJrrB,QAAO,SAAApM,GACN,GAAIghC,GAAuBhhC,EAAK4P,KAAM,CACpC,GAAIoxB,EAAoB53B,WAAa43B,EAAoB33B,SAErDxB,KAAO7H,EAAK4P,KAAM,cAAciD,UAC9BmuB,EAAoB53B,UACpB43B,EAAoB33B,QACpB,MACA,MAGF,OAAO,EAGX,GACExB,KAAOm5B,GAAqBnxB,OAAOhI,KAAO7H,EAAK4P,KAAM,eAErD,OAAO,EAGX,GAAI5P,EAAK6J,YAAc7J,EAAKu9B,sBAAuB,CACjD,IAAM0D,EAAgBp5B,KAAO7H,EAAK4P,KAAM,cAAcoD,OAAO,OACzDkuB,GAAa,EAuBjB,OArBInK,GAEFA,EAASrtB,UAAU7K,KAAI,SAAAsiC,GAGrB,GAFaL,GAA2BK,EAAa73B,MAE5C2J,SAASguB,GAAgB,CAChC,IAAMG,EAAcD,EAAav3B,qBAAqB7Y,OACtD,GAAIqwC,EAAc,EACO3J,EAA6BrrB,QAClD,SAAAi1B,GAAQ,OACNA,EAASzxB,OAAS5P,EAAK4P,OACtByxB,EAAS9D,yBAEKxsC,SAAWqwC,IAC5BF,GAAa,OAOhBA,EAET,OAAQlhC,EAAK6J,YAAc7J,EAAKu9B,yBAEjC1+B,KAAI,SAAAmB,GAAI,OAAIA,EAAK4P,SAGhB0xB,GAAgC,SACpC7J,EACA6I,EACAC,GAEA,IAAKD,EAAU,MAAO,GAEtB,IAAMvJ,EAAWuJ,EAAQ,qBACnB/d,EAAege,EAAiBrzB,OAAOuzB,cAAgB,KACvDc,EAA2B,GAC3BC,EAAwBjf,EAC1B1a,KAAO0a,GAAcvP,OAAO,cAC5B,KAEEuqB,EAAwB9F,EAC3BrrB,QAAO,SAAApM,GAAI,OAAIA,EAAK4P,OAAS4xB,KAC7B3iC,KAAI,SAAAmB,GACH,OAAO,eACFA,EADL,CAEE6J,UAAWhC,KAAO7H,EAAK6J,UAAW,YAAYmJ,OAAO,cAI3D,OAAK+jB,GAELA,EAASrtB,UAAU7K,KAAI,SAAAmB,GACrB,IAAMsJ,EAAOw3B,GAA2B9gC,EAAKsJ,MACvCm4B,EAAoB55B,KAAO0a,GAAcvP,OAAO,OAElDuP,GAAgBjZ,EAAK2J,SAASwuB,IAChCzhC,EAAK4J,qBAAqB/K,KAAI,SAAAmB,GAC5B,IAAM6J,EAAYhC,KAAO7H,EAAK6J,WAAWmJ,OAAO,SAE1C0uB,EAAenE,EAAsBx7B,MACzC,SAAA/B,GAAI,OAAIA,EAAK6J,YAAcA,KAGvB2zB,EAAYkE,EACdA,EAAanE,sBACb+C,EAASz3B,YAAYuE,gBAEzBm0B,EAAyB98B,KAAK,CAC5BpV,GAAG,GAAD,OAAKwa,EAAL,YAAkB7J,EAAK8J,SAAvB,YAAmC9J,EAAK+J,UAC1CF,UAAWA,EACX2zB,UAAW5rC,SAAS4rC,GACpBpwB,gBAAiBkzB,EAASz3B,YAAYuE,gBACtCtD,SAAU9J,EAAK8J,SACfC,SAAU/J,EAAK+J,iBAMhBw3B,GA9Be,IAiClBI,GAAsB,SAACJ,EAA0BhB,GACrD,IAAM12B,EAAY02B,EAAiBrzB,OAAOrD,UACtC+3B,EAAmB,KAEvB,IAAKL,EAAyBxwC,OAC5B,OAAO6wC,EAKT,GAFAA,EAAmBL,EAAyB,GAExC13B,EAAW,CACb,IAAMg4B,EAAmBN,EAAyBx/B,MAChD,SAAA/B,GAAI,OAAIA,EAAK3Q,KAAOwa,EAAUxa,MAE5BwyC,IAAkBD,EAAmBC,GAG3C,OAAOD,GAGHE,GAA8C,SAClDxB,EACAyB,EACAtB,GAEA,IAAMtd,EAAamd,EAASA,EAASjI,cAErC,IACG0J,IACAA,EAA2BhxC,SAC3BoyB,IACAsd,EAED,OAAOsB,EAGT,IAAMx4B,EAAe3X,SAASuxB,EAAW5Z,cACnCC,EAAuB2Z,EAAW3Z,qBAExC,OAAOu4B,EACJljC,KAAI,SAAAmB,GACH,IAAM6J,EAAYhC,KAAO7H,EAAK6J,UAAW,SACnC+Z,EAAe/b,KAAO44B,GAAc5c,IAAI,CAC5CC,KAAMja,EAAUua,IAAI,QACpBL,OAAQla,EAAUua,IAAI,YAElBJ,EAAgBnc,OAASyJ,IAAI/H,EAAcC,GAGjD,QAFmB3B,KAAO+b,GAAcjQ,KAAKqQ,IAE3B,IAIXhkB,KAERoM,QAAO,SAAApM,GAAI,OAAIA,M,UCjOd6H,GAASm6B,wBAAaC,MAEtBC,GAAqB,SACzB1E,EACAtkB,EACAipB,EACApB,EACAqB,GAEA,IACGlpB,IACAA,EAAcunB,eACd0B,EAAwBj1B,OAAOuzB,eAC/BM,EAED,OAAOvD,EAGT,IAAMiD,EAAe54B,GACnBs6B,EAAwBj1B,OAAOuzB,cAC/BztB,OAAO,cAET,GACEnL,GAAOs6B,EAAwBj1B,OAAOuzB,cAAc5wB,OAClDqJ,EAAcunB,aACd,OAEF,CACA,IAAMjJ,EAAauJ,EAA0BvJ,WAE7C,GAAIA,EAAWzmC,OAAQ,CACrB,IAAM0mC,EACJD,EAAW,GAAGC,8BAAgC,GAC1C4K,EACJD,GAAwBD,EAAwBj1B,OAAOrD,UACnDA,EAAYw4B,EACdx6B,GAAOw6B,EAAkBx4B,UAAW,SAASmJ,OAAO,YACpD,KAQJ,GANoBykB,EAA6B11B,MAC/C,SAAA/B,GAAI,OACFA,EAAK4P,OAAS6wB,IACbzgC,EAAK6J,YAAcA,IAAe7J,EAAK6J,YAAcA,MAGvC,CACjB,IAAMy4B,EAA6BppB,EAAcob,aAAa3b,QAC5D,SAAC4pB,EAAal4B,GAAd,OACEk4B,GAAe3wC,SAASyY,EAAW,eAAqB,KAC1D,GAGF,OAAOzY,SAAS4rC,GAAa8E,IAKnC,OAAO9E,GAGHgF,GAAuC,SAC3CT,EACAU,EACAC,EACA3B,GAEA,OAAK0B,GAAeA,EAAW54B,UAExBk4B,EAA2BljC,KAAI,SAAAmB,GACpC,GAAIA,EAAK3Q,KAAOozC,EAAW54B,UAAUxa,GAAI,CACvC,IAAM+d,EAAkB80B,GACtBliC,EAAKw9B,UACLiF,EACAC,EACA3B,EACA/gC,GAEF,OAAO,eACFA,EADL,CAEEoN,gBAAiBA,EACjBowB,UAAW5rC,SAASwb,KAIxB,OAAOpN,KAlBwC+hC,GAsB7CY,GAAwC,SAC5ClL,EACAruB,EACAC,EACAo5B,GAEA,IAAIlF,EAAwB,KAe5B,GAbA9F,EAA6BtQ,SAAQ,SAAAnnB,GAClB6H,GAAO7H,EAAK4P,KAAM,cACtBiD,UAAUzJ,EAAWC,EAAS,OAAQ,QACnB,OAA1Bk0B,EACEA,EAAwBv9B,EAAKu9B,wBAC/BA,EAAwBv9B,EAAKu9B,uBAG/BA,EAAwBv9B,EAAKu9B,0BAK/BkF,GAAcA,EAAW/B,WAAY,CACvC,IAAMkC,EAAc/6B,GAAOgP,MACzB4rB,EAAW/B,WAAWt3B,UACtBq5B,EAAW/B,WAAWr3B,SAQlBw5B,EALgBh7B,GAAOgP,MAC3BhP,GAAOA,GAAOuB,GAAW4J,OAAO,cAAe,cAC/CnL,GAAOA,GAAOwB,GAAS2J,OAAO,cAAe,eAGhB6vB,SAASD,EAAa,CAAEE,UAAU,IAE3DC,EAAeN,EAAWnO,aAAa3b,QAC3C,SAACC,EAAK5W,GAAN,OAAc4W,EAAMhnB,SAASoQ,EAAIsyB,gBACjC,GAGF,GAAIuO,EAEF,OADKtF,IAAuBA,EAAwB,GAC7CA,EAAwBwF,EAInC,OAAOxF,GCrEMtwB,GA/DE,SAAAC,GAAW,IAAD,EACnBpW,EAAS,GAef,GAbIiV,GAASmB,EAAOozB,UAAU,KAC5BxpC,EAAOwpC,SAAW,wBANK,qBAUvBpzB,EAAOmrB,cACNnrB,EAAOuzB,eACP,UAACvzB,EAAOwzB,kBAAR,aAAC,EAAmBt3B,aAAa,OAAC8D,QAAD,IAACA,OAAD,EAACA,EAAQwzB,WAAWr3B,WAEtDvS,EAAO2pC,aAAe,4BACtB3pC,EAAO4pC,WAAa,6BAGlBxzB,EAAOonB,cAAgBpnB,EAAOonB,aAAavjC,OAAQ,CACrD,IAAIssC,EAA0B,GAC1BC,GAAsB,EAE1BpwB,EAAOonB,aAAanN,SAAQ,SAACnnB,EAAMjB,GAC7BiB,EAAKs0B,cAAgB1iC,SAASoO,EAAKs0B,cAAgB,IACrDgJ,GAAsB,GAGxBD,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG9CgJ,IACHxmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAQ,yDAKd,IACG7wB,EAAOw9B,cACRpnB,EAAOonB,cACPpnB,EAAOonB,aAAavjC,OACpB,CACA,IAAMwsC,EAAwBrwB,EAAOE,gBAC/BiwB,EAA0B,GAC5BI,EAAoB,EAExBvwB,EAAOonB,aAAanN,SAAQ,SAACnnB,EAAMjB,GAC7BiB,EAAKs0B,cAAgBt0B,EAAKs0B,aAAavjC,SACzC0sC,GAAqB7rC,SAASoO,EAAKs0B,eAErC+I,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG/CmJ,EAAoBF,IACtBzmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAO,0CAAD,OAAuC4V,MAKnD,OAAOzmC,GCmfMgiB,gBAAU,CACvBnmB,KAAM,0BACNomB,kBAAkB,EAClBE,aAAa,EACbhM,YACAiM,cA7foB,CACpBob,aAAc,GACd3pB,OAAQ,KAsfKmO,CAMZjZ,aAlBqB,SAAAtO,GACtB,MAAO,CACL4wC,wBAAyB5wC,EAAMoB,KAAKwvC,4BAIb,SAAAriC,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,0BAA2B+F,EAAOvb,QAUnD+O,EArfwB,SAAC,GAYrB,IAXL1R,EAWI,EAXJA,KACA0zB,EAUI,EAVJA,QACAvzB,EASI,EATJA,SACAC,EAQI,EARJA,UACA8vC,EAOI,EAPJA,SACAlE,EAMI,EANJA,sBACA/F,EAKI,EALJA,SACA+N,EAII,EAJJA,wBACA/D,EAGI,EAHJA,qBACAjlB,EAEI,EAFJA,aACAD,EACI,EADJA,cAEM1qB,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAIE8S,EAJF,KAI0BnH,SAJ1B,EAM8BgG,IAAMrQ,WAAWkpB,EAAc9rB,OAN7D,mBAMGkxC,EANH,KAMcC,EANd,OAOgCl+B,IAAMrQ,SAAS,MAP/C,mBAOGgzC,EAPH,KAOeC,EAPf,OAQ4B5iC,IAAMrQ,SAAS,MAR3C,mBAQGswC,EARH,KAQa4C,EARb,OASsD7iC,IAAMrQ,UAC9D,GAVE,mBASG2uC,EATH,KAS0BC,EAT1B,OAeAv+B,IAAMrQ,SAAS,IAff,mBAaFmzC,EAbE,KAcFC,EAdE,OAmBA/iC,IAAMrQ,SAAS,MAnBf,mBAiBF+wC,EAjBE,KAkBFsC,EAlBE,KAqBErC,GACJ9nB,GAAiBA,EAAcunB,aAC3BvnB,EAAcunB,aACdvnB,GAAiBA,EAAcwnB,WAC/BxnB,EAAcwnB,WAAWt3B,UACzBvB,OA1BF,GA4BsB7G,YAASyyB,GAAU,CAC3CoL,MAAOmE,EACPlE,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACT6gC,WAAYA,EACZphB,gBAAiBC,KANbC,GA5BJ,GA4BIA,QAASljB,GA5Bb,GA4BaA,KA5Bb,GA0CAoC,YAAS0yB,GAAmC,CAC9CmL,MAAOmE,EACPlE,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACT6gC,WAAYA,EACZphB,gBAAiBC,EACjBmd,YAAan3B,KAAOm5B,IACjBztB,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAOm5B,IAAqB1vB,IAAI,EAAG,WAClDkC,MAAM,SACNR,OAAO,iBAfHswB,GAvCP,GAuCFxhB,QACMyV,GAxCJ,GAwCF34B,KACS2kC,GAzCP,GAyCFriC,QAiBFb,IAAM+C,WAAU,WACd,GAAKm0B,GAAL,CAEA,IAAMwJ,EAA4BzJ,GAChCC,IAGF8L,EAA6BtC,MAC5B,CAACxJ,KAEJl3B,IAAM+C,WAAU,WACd,GAAIxE,IAAQA,GAAK44B,WAAWzmC,OAAQ,CAClC,IAAMyyC,EAAmB5kC,GAAK44B,WAAW,GACnCiM,EAAevN,GAAwBsN,GAE7CC,EAAY,WAAiB7kC,GAAK44B,WAAW,GAAhB,WAC7BiM,EAAY,aAAmB7kC,GAAK44B,WAAW,GAAhB,aAE1B8G,GAQHoF,GAAoCD,GACpClE,GAAgBkE,KARhBrF,EAAqB,QAASqF,EAAa56B,YAAYzb,OACvDgxC,EAAuC,aAAc,MACrDA,EAAqB,kBAAmB,MACxCA,EAAqB,eAAgB,IACrCA,EAAqB,aAAcqF,EAAY,YAC/CL,EAA4B,KAM9B1D,GAAmB+D,EAAY,YAAgBr2B,iBAE/CoyB,GAAUiE,GAxGW,qBA0GjBA,EAAapL,eACViG,GACHiB,GAAgBkE,IAIpBlF,GAAa,GACb2E,EAAYO,MAEb,CAAC7kC,KAEJyB,IAAM+C,WAAU,WACd,IAAMugC,EAAqBxB,EAAwBj1B,OAAOozB,SAEtDqD,GACFV,EAAcU,KAEf,CAACxB,EAAwBj1B,OAAOozB,WAEnCjgC,IAAM+C,WAAU,WACO++B,EAAwBj1B,OAAOuzB,eAGlDiD,GAAoCpD,GACpCf,GAAgBe,MAEjB,CAAC6B,EAAwBj1B,OAAOuzB,eAEnCpgC,IAAM+C,WAAU,WACK++B,EAAwBj1B,OAAOwzB,aAEhDkD,GAA8BtD,GAC9Bf,GAAgBe,MAEjB,CACDA,EACAS,EACAoB,EAAwBj1B,OAAOwzB,aAGjCrgC,IAAM+C,WAAU,WACd,IAAMyG,EAAYs4B,EAAwBj1B,OAAOrD,UAE7CA,GACF61B,GAAmB71B,EAAU2zB,aAE9B,CAAC2E,EAAwBj1B,OAAOrD,YAEnC,IAAM61B,GAAqB,SAAAlC,GACzB,IAAMpwB,EAAkB80B,GACtB1E,EACAtkB,EACAipB,EACApB,GAGF3C,EAAqB,kBAAmBhxB,IAGpCy2B,GAAqB,SAAAj0B,GACzB2zB,GAAwB,CACtBP,WAAYpxC,SAASoxC,GACrBhE,YAAan3B,KAAO+H,GACjB2D,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAO+H,GAAM0B,IAAI,EAAG,WACnCkC,MAAM,SACNR,OAAO,iBAIRusB,GAAkB,SAAAe,GACtB,IAAMjM,EACJ8N,EAAwBj1B,OAAOonB,cAAgB,GAC3CA,EAAeH,GACnBmM,EACA6B,EACAvD,EACAD,EACAvK,EACAC,GAGF+J,EAAqB,eAAgB9J,IAGjCkL,GAAY,SAAAc,GAChB,IAAMV,EAAiBuC,EAAwBj1B,OAAOvC,QAAU,GAE1Dk1B,EAAaS,EAAS51B,WAAWC,OAAO9L,KAAI,SAAAmB,GAChD,IAAM8/B,EAAeF,EAAe79B,MAAK,SAAAy4B,GAAK,OAAIA,EAAMnrC,KAAO2Q,EAAK3Q,MACpE,OAAO,eACF2Q,EADL,CAEElP,MAAOgvC,EAAeA,EAAahvC,MAAQ,EAC3CivC,WAAYD,EAAeA,EAAaC,WAAa,UAIzD3B,EAAqB,SAAUyB,IAG3B+D,GAAgC,SAAAtD,GACpC,GAAKA,GAAa6B,EAAwBj1B,OAAOwzB,WAAjD,CAEA,IAAMt3B,EAAY+4B,EAAwBj1B,OAAOwzB,WAAWt3B,UACtDC,EAAU84B,EAAwBj1B,OAAOwzB,WAAWr3B,QAE1D,GAAKD,GAAcC,EAAnB,CAEA,IAAMouB,EAA+BsJ,EACjCA,EAA0BvJ,WAAW,GAAGC,6BACxC,GAEE8F,EAAwBoF,GAC5BlL,EACAruB,EACAC,EACA6P,GAIAwmB,GAD4B,OAA1BnC,EACiBA,EAEA+C,EAASz3B,YAAYuE,oBAItCs2B,GAAsC,SAAApD,GAC1C,GAAKA,EAAL,CAEA,IAAMG,EAAe0B,EAAwBj1B,OAAOuzB,aAC9ChJ,EAA+BsJ,EACjCA,EAA0BvJ,WAAW,GAAGC,6BACxC,GACAsK,EAA6BT,GAC/B7J,EACA6I,EACA6B,GAEFJ,EAA6BD,GAC3BxB,EACAyB,EACAtB,GAEF,IAAM4B,EAAoBV,GACxBI,EACAI,GAEF/D,EAAqB,YAAaiE,GAE7BA,EAWH3C,GAAmB2C,EAAkB7E,YAVrCkC,GAAmBY,EAASz3B,YAAYuE,iBACxCqqB,EAA6B54B,KAAI,SAAAmB,GAC/B,IAAM8jC,EAAqBrD,EACvB54B,KAAO44B,GAAcztB,OAAO,cAC5B,GACChT,EAAK6J,WAAa7J,EAAK4P,OAASk0B,GACnCpE,GAAmB1/B,EAAKu9B,2BAO9B6F,EAA4BrB,KA2BxBl5B,GAAcy3B,EAChBtF,GACEx5B,EACA8+B,EAASz3B,YACTy3B,EAAS,0BAEX,GAEJ,OACE,kBAACtxC,EAAA,EAAD,CAAQb,KAAMA,EAAMgyC,OAAO,QAAQ3xC,QAAS,CAAErC,MAAOqC,EAAQrC,QAC3D,kBAAC,GAAD,CACE2J,UAAWgsB,IAAWwhB,GACtBvtC,gBAAiBvH,EAAQuH,kBAG3B,kBAAC9G,EAAA,EAAD,CAAYC,UAAWV,EAAQX,SAAUsB,QAASb,GAChD,kBAAC,IAAD,CAAkBY,UAAWV,EAAQP,aAGvC,kBAACmB,EAAA,EAAD,CACEC,GAAG,qBACHb,QAAS,CAAEc,KAAMd,EAAQpB,OACzBmC,mBAAmB,GAElB+wC,EAAWz3B,GAAYzb,MAAQsB,EAAE,iBAClC,kBAAC,GAAD,CACEmlB,KAAI,2EAEJ,kBAAC,KAAD,CAAU3kB,UAAWV,EAAQmf,aAIjC,0BACEuM,SAAUf,GAAa,SAAAnZ,GAAI,OACvBkZ,EAAc9rB,MAAQixC,EAASr+B,GA/ClB,SAAAA,GACrB,IAAMogC,EAAuBE,EAAS,yBAChCjK,EAAkB,GAEpB+J,IACF/J,EAAe,MAAY+J,EAAqBhzC,OAElDmB,EAAU,eACLyR,EADI,CAEPpG,UAAWy8B,KAsCkCgK,CAAergC,OAG1D,kBAACxQ,EAAA,EAAD,CAAehB,QAAS,CAAEc,KAAMd,EAAQ5B,cACrC0zC,GACC,yBAAKpxC,UAAWV,EAAQsvC,UACtB,yBAAK5uC,UAAWV,EAAQovC,UACtB,kBAAC,KAAD,CAAwBpvC,QAAS,CAAEc,KAAMd,EAAQqvC,YACjD,kBAACvoC,EAAA,EAAD,CAAY1F,QAAQ,SACjB0wC,EAASz3B,YAAYwE,gBAGzB80B,EAAwBj1B,OAAOE,iBAAmB,GACjD,yBAAKle,UAAWV,EAAQovC,UACtB,kBAAC,KAAD,CAAmBpvC,QAAS,CAAEc,KAAMd,EAAQqvC,YAC5C,kBAACvoC,EAAA,EAAD,CAAY1F,QAAQ,SACjBuyC,EAAwBj1B,OAAOE,gBAAiB,IAChD1e,EAAE,mBAOb,kBAACyrB,GAAA,EAAD,CACErT,KAAK,WACL5X,UAAWV,EAAQ8e,YACnBwM,KAAMqgB,EAAsBxG,kBAC5BtnB,MAAM,QACNnW,MAAM,aACNvC,UAAWqzB,KAGZsZ,GACC,oCA/WuB,qBAgXpBA,EAASjI,cACR,kBAACle,GAAA,EAAD,CACErT,KAAK,aACL5Q,MAAM,kBACNma,eAAgB0G,GAAuBupB,GACvC5wB,cAAe4G,GACbyqB,EACA7nB,GAAiBA,EAAcwnB,WAC/BJ,GAEFhwB,qBAAsBuzB,GACtB3gB,SAAS,EACTtS,eAAgB,EAChBG,QAAS,GACTpd,UAAWozB,GACX5D,WAAYmd,EAASA,EAASjI,cAC9BloB,0BACK+I,IAAiBA,EAAcwnB,cAhYlB,yBAqYrBJ,EAASjI,cACR,kBAACle,GAAA,EAAD,CACErT,KAAK,eACL5Q,MAAM,kBACNma,eAAgB0G,GAAuBupB,GACvC5wB,cAAe4G,GACbyqB,EACA7nB,GAAiBA,EAAcunB,aAC/BH,GAEFhwB,qBAAsBuzB,GACtB3gB,SAAS,EACTtS,eAAgB,EAChBG,QAAS,GACTpd,UAAWovB,GACXI,WAAYmd,EAASA,EAASjI,cAC9BloB,0BACK+I,IAAiBA,EAAcunB,kBAKrC0B,EAAwBj1B,OAAOonB,aAAavjC,QAC7C,oCACE,kBAACuE,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQuvC,cAC5CrvC,EAAE,UADL,MAGA,kBAACy5B,GAAA,EAAD,CACErhB,KAAK,eACL5X,UAAWV,EAAQ8lC,aACnBoH,eAAgBltC,EAAQyvC,qBACxBU,sBAAuBA,EACvBhrC,UAAWooC,GACX3H,SAAUA,KAtaM,yBA2arBkM,EAASjI,gBACN8K,EAAyBpyC,QACzB,oCACE,kBAACuE,EAAA,EAAD,CACE1F,QAAQ,QACRV,UAAWV,EAAQwvC,mBAElBtvC,EAAE,0BAEL,kBAACyrB,GAAA,EAAD,CACErT,KAAK,YACLgT,KAnKXqpB,EACJtkC,KAAI,SAAAmB,GACH,OAAO,eACFA,EADL,CAEE5S,MAAM,GAAD,OAAK4S,EAAK6J,UAAV,mBAAyB7J,EAAK8J,SAA9B,YAA0Cpb,EAAEsR,EAAK+J,gBAGzDqC,QAAO,SAAApM,GAAI,OAAIA,EAAKw9B,aA6JL7pC,UAAW0mB,GACXwC,MAAM,EACNC,mBAAmB,QACnBC,oBAAqBvuB,EAAQ0vC,oBAKlCiE,EAAwBj1B,OAAOvC,OAAO5Z,QACvC,oCACE,kBAACuE,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQuvC,cAC5CrvC,EAAE,YAEL,kBAACy5B,GAAA,EAAD,CACErhB,KAAK,SACLstB,SAAUA,EACV+I,eAAgB3uC,EAAQ4uC,WACxBzpC,UAAWqpC,QAQvB,kBAACttC,EAAA,EAAD,CAAelB,QAAS,CAAEc,KAAMd,EAAQnB,cACtC,kBAACsC,EAAA,EAAD,CACER,QAASb,EACTsB,QAAQ,WACRpB,QAAS,CAAEc,KAAMd,EAAQhB,gBAExBkB,EAAE,WAEL,kBAACiB,EAAA,EAAD,CACE8B,KAAK,SACL7B,QAAQ,WACRpB,QAAS,CAAEc,KAAMd,EAAQb,eACzBkC,WAAS,GAERnB,EAAE,gBC5gBA1C,GAjBGC,YAAW,CAC3BypC,MAAO,CACLzoC,WAAY,OACZF,SAAU,QAEZg3C,gBAAiB,CACftvC,aAAc,MACd,eAAgB,CACdA,aAAc,IAGlBiiC,YAAa,CACXxiC,QAAS,QACTO,aAAc,SCFZuvC,GAAmB,CACvB,CAAE52C,MAAO,WAAYif,MAAO,YAC5B,CAAEjf,MAAO,UACT,CAAEA,MAAO,uBAAwBif,MAAO,eACxC,CAAEjf,MAAO,gBAAiBif,MAAO,eACjC,CAAEjf,MAAO,kBAAmBif,MAAO,kBACnC,CAAEjf,MAAO,4BAA6Bif,MAAO,gBAC7C,CAAEjf,MAAO,cAAeif,MAAO,cAC/B,CAAEjf,MAAO,WAAYif,MAAO,YAC5B,CAAEjf,MAAO,eAAgBif,MAAO,gBAG5B43B,GAAoB,CACxB,cACA,aACA,WACA,eA6IIC,GAAiB,SAAC5D,EAAUlM,GAChC,IAAM5lC,EAAUxC,KAD6B,EAEjCyC,cAALC,EAFsC,oBAGvCyiC,EAASmP,EAASA,EAAS/L,YAC3BL,GAAmBoM,EAASjI,aAElC,OAAQiI,EAAS/L,YACf,IAAK,kBACH,GAA8B,qBAA1B+L,EAASjI,cAAuCnE,EAAiB,CACnE,IAAMpjC,EAAQqqC,GAAkBhK,EAAOiD,IACvC,OACE,kBAAC9+B,EAAA,EAAD,CAAY1F,QAAQ,SACjBwkC,EADH,IACa,0BAAMllC,UAAWV,EAAQknC,OAAQ5kC,IAG1C,IAAD,EACL,OACE,oCACGqgC,QADH,IACGA,OADH,YACGA,EAAQ7nB,YADX,aACG,EAAczK,KAAI,SAACmB,EAAMjB,GAAP,OACjB,yBAAK8H,IAAK9H,EAAO7P,UAAWV,EAAQu1C,iBAClC,kBAACzuC,EAAA,EAAD,CAAY1F,QAAQ,SACjBoQ,EAAKsJ,KAAKzK,KACT,SAAC2W,EAAKzW,GAAN,gBAAmBA,EAAQ,IAAM,GAAjC,YAAuCrQ,EAAE8mB,QAG7C,kBAAClgB,EAAA,EAAD,CAAY1F,QAAQ,SACjBwkC,EAAU,IACX,0BAAMllC,UAAWV,EAAQknC,OACtByF,GAAkBn7B,EAAKo0B,WASxC,IAAK,kBAAoB,IAAD,EACtB,OACE,oCACGjD,QADH,IACGA,OADH,YACGA,EAAQ7nB,YADX,aACG,EAAczK,KAAI,SAACmB,EAAMjB,GACxB,OACE,yBAAK8H,IAAK9H,EAAO7P,UAAWV,EAAQu1C,iBAClC,kBAACzuC,EAAA,EAAD,CAAY1F,QAAQ,SAASlB,EAAEsR,EAAKwV,MACnCxV,EAAKoK,YACJpK,EAAKoK,WAAWvL,KAAI,SAAC0xB,EAAUxxB,GAC7B,IAAMjO,EAAQqqC,GAAkB5K,EAAS6D,IACzC,OACE,kBAAC9+B,EAAA,EAAD,CAAY1F,QAAQ,QAAQiX,IAAK9H,GAC9Bq1B,EAAU,IACX,0BAAMllC,UAAWV,EAAQknC,OAAQ5kC,GAFnC,QAEmD,IACvB,cAAzBy/B,EAASlmB,YACLkmB,EAASlmB,YAAc3b,EAAE,UAC1BA,EAAE6hC,EAASlmB,kBAIrBrK,EAAKoK,YAAcpK,EAAKwV,KACxB,yBAAK3O,IAAK9H,GApEJ,SAACiB,EAAMo0B,GAC7B,IAAM5lC,EAAUxC,KACV8E,EAAQqqC,GAAkBn7B,EAAKo0B,IACrC,OACE,kBAAC9+B,EAAA,EAAD,CAAY1F,QAAQ,SACjBwkC,EADH,IACa,0BAAMllC,UAAWV,EAAQknC,OAAQ5kC,IA+DdqzC,CAAgBnkC,EAAMo0B,SAQtD,IAAK,0BAA4B,IAAD,EAC9B,OACE,oCACGjD,QADH,IACGA,OADH,YACGA,EAAQznB,iBADX,aACG,EAAmB7K,KAAI,SAACmB,EAAMjB,GAC7B,OACE,yBAAK8H,IAAK9H,EAAO7P,UAAWV,EAAQu1C,iBAClC,kBAACzuC,EAAA,EAAD,CAAY1F,QAAQ,SACjBoQ,EAAKsJ,KAAKzK,KACT,SAAC2W,EAAKzW,GAAN,gBAAmBA,EAAQ,IAAM,GAAjC,YAAuCrQ,EAAE8mB,QAG5CxV,EAAKoK,WAAWvL,KAAI,SAAC0xB,EAAUxxB,GAC9B,IAAMjO,EAAQqqC,GAAkB5K,EAAS6D,IACzC,OACE,kBAAC9+B,EAAA,EAAD,CAAY1F,QAAQ,QAAQiX,IAAK9H,GAC9Bq1B,EADH,IACa,0BAAMllC,UAAWV,EAAQknC,OAAQ5kC,GAAc,IAD5D,OAEI,IACwB,cAAzBy/B,EAASlmB,YACLkmB,EAASlmB,YAAc3b,EAAE,UAC1BA,EAAE6hC,EAASlmB,sBAUjC,IAAK,qBACL,IAAK,kBAAoB,IAAD,EACtB,OACE,oCACG8mB,QADH,IACGA,OADH,YACGA,EAAQ/mB,kBADX,aACG,EAAoBvL,KAAI,SAACmB,EAAMjB,GAC9B,IAAMjO,EAAQqqC,GAAkBn7B,EAAKo0B,IACrC,OACE,kBAAC9+B,EAAA,EAAD,CAAY1F,QAAQ,QAAQiX,IAAK9H,GAC9Bq1B,EADH,IACa,0BAAMllC,UAAWV,EAAQknC,OAAQ5kC,GAD9C,QAC8D,IACtC,cAArBkP,EAAKqK,YACDrK,EAAKqK,YAAc3b,EAAE,UACtBA,EAAEsR,EAAKqK,oBAUZ+5B,GA9PM,SAAC,GAUf,IATL9D,EASI,EATJA,SACA+D,EAQI,EARJA,yBACAjQ,EAOI,EAPJA,SACArG,EAMI,EANJA,gBACAC,EAKI,EALJA,qBACAsW,EAII,EAJJA,WACAC,EAGI,EAHJA,QACAtW,EAEI,EAFJA,uBACAC,EACI,EADJA,kBAEM1/B,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAIE8S,EAJF,KAI0BnH,SACxByf,EAAO,GAEP0qB,EAAWlE,EAASr3B,gBACpBw7B,EAAoBnE,EAAS,6BAC7Bz3B,EAAcy3B,EAASz3B,YACvBu3B,EAAuBE,EAAS,yBAiGtC,OA/FA0D,GAAiBnlC,KAAI,SAAAmB,GACnB,IAAMq1B,EAAYr1B,EAAKqM,MACnBq4B,EACmB,WAArBljC,GAAiC8+B,EAAS,GAAD,OAAIjL,EAAJ,OACrCiL,EAAS,GAAD,OAAIjL,EAAJ,OACRiL,EAASjL,GAEVqP,GAAcA,EAAU3zC,SAC3B2zC,EAAYpE,EAASjL,IAGvB,IAAIsP,EAAaN,EACbK,EACA1J,GAAyBx5B,EAAkBgjC,EAAUC,GACnDzkC,EAAKqM,OA8BX,GA3BKs4B,GAAeA,EAAW5zC,SAC7B4zC,EAAaN,EACTK,EACA1J,GAAyB,UAAWwJ,EAAUC,GAC5CzkC,EAAKqM,QAIM,gBAAfrM,EAAK5S,QACPu3C,EAAaN,EACTK,EACA1J,GACEx5B,EACAqH,EACAu3B,GACApgC,EAAKqM,OACNgpB,EAAUtkC,SACb4zC,EAAaN,EACTK,EACA1J,GACE,UACAnyB,EACAu3B,GACApgC,EAAKqM,SAII,aAAfrM,EAAK5S,OAAyBk3C,EAIlC,GAAmB,WAAftkC,EAAK5S,MACPu3C,EAAaT,GAAe5D,EAAUlM,GAEtCta,EAAKrV,KAAK,CACRrX,MAAO4S,EAAK5S,MACZuB,YAAag2C,SAGf,GAAIA,GAAcA,EAAW5zC,OAAQ,CACnC,GAAIkzC,GAAkBhxB,SAASjT,EAAKqM,OAClCs4B,EAAaA,EAAWlc,KAAK,WAG7B,KADAkc,EAAaA,EAAWC,QACR7zC,OAAQ,OAG1B,GAAmB,gBAAfiP,EAAKqM,MAAyB,CAChC,IAAMqqB,EAAc7uB,KAAO88B,EAAY,YAAY3xB,OAAO,SACpD6xB,EAAgBR,EAClB/D,EAAQ,aACRA,EAASr3B,gBAAT,aACE2tB,EAAe/uB,KAAOg9B,EAAe,YAAY7xB,OACrD,SAEF2xB,EACE,oCACE,0BAAMz1C,UAAWV,EAAQkoC,aACtBhoC,EAAE,YADL,KACoBgoC,GAEpB,8BACGhoC,EAAE,aADL,KACqBkoC,IAM3B+N,EAAa,kBAACrvC,EAAA,EAAD,CAAY1F,QAAQ,SAAS+0C,GAE1C7qB,EAAKrV,KAAK,CACRrX,MAAO4S,EAAK5S,MACZuH,MAAO4vC,EAAU17B,EAAYG,WAAWrU,MAAQ,KAChDhG,YAAag2C,QAOnB,kBAAC,GAAD,CACE7qB,KAAMA,EACNiU,gBAAiBA,EACjBC,qBAAsBA,EACtBC,uBAAwBA,EACxBC,kBAAmBA,K,o3GCzJlB,IAAM4W,GAAmB/pC,KAAH,MC4Hd8E,gBAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EA5Ge,SAAC,GAAiC,IAA/B9P,EAA8B,EAA9BA,SAAUwC,EAAoB,EAApBA,cACjClD,EAAO01C,cAAP11C,GACFiB,EAAU+P,IAAMsX,WAAW/mB,GAC3BuP,EAAUC,cAH6C,EAKJY,YAASyyB,GAAU,CAC1EtxB,UAAW,CACT6gC,WAAY3zC,EACZuyB,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,IAExC0vC,6BAA6B,IAPvBjd,EALqD,EAKrDA,QAASrrB,EAL4C,EAK5CA,MAAOmI,EALqC,EAKrCA,KAAMsC,EAL+B,EAK/BA,QAAS8jC,EALsB,EAKtBA,cAUvC3kC,IAAM+C,WAAU,WACdlC,MACC,IAEH,IAAM+jC,EAAS,WACb,OAAOC,OAAO3gC,SAASgoB,KAAK7nB,OAAO,UAAY,GAGjD,GAAIod,GAA6B,IAAlBkjB,EACb,OACE,yBAAKhuC,MAAO,CAAEhD,OAAQ,SACnBqM,IAAM8kC,aAAap1C,EAAU,CAC5B+xB,SAAS,EACTmjB,OAAQA,IACRxtB,UAAW,MAMnB,GAAIhhB,IAAUmI,EAAK44B,WAAWzmC,OAa5B,OAXEwB,GACAA,EAAcH,sBAAsB41B,eAAe,OAEnD13B,EAAQ,CACNlD,MAAO,2BACPyB,iBAAkB,SAEjBuT,MAAK,kBAAMjC,EAAQsE,KAAK,qCACxB4T,OAAM,eAIT,yBAAKrhB,MAAO,CAAEhD,OAAQ,SACnBqM,IAAM8kC,aAAap1C,EAAU,CAC5B+xB,SAAS,EACTmjB,OAAQA,IACRxtB,UAAW,MAMnB,IAAM6oB,EAAW1hC,EAAK44B,WAAW,GAC3B4N,EAAclP,GAAwBoK,GAEtC+E,EACJ95B,GAAgC+0B,EAASjI,cACvCiN,EACF95B,GAA8B65B,GAC5B/E,EAAS/L,YAKb,OAFI+L,EAASrQ,QAAQqV,IAGnB,yBAAKtuC,MAAO,CAAEhD,OAAQ,SACnBqM,IAAM8kC,aAAap1C,EAAU,CAC5B6O,KAAMwmC,EACNC,6BACAC,2BACAxjB,SAAS,EACTmjB,OAAQA,IACRxtB,WACU,OAAR6oB,QAAQ,IAARA,OAAA,EAAAA,EAAUjJ,mBAAmB1e,QAC3B,SACEC,EADF,GAGM,IADF6nB,EACC,EADDA,aAAc8E,EACb,EADaA,WAAYntB,EACzB,EADyBA,WAAY3F,EACrC,EADqCA,oBAExC,OAAIguB,GAAgB8E,IAAentB,EAC3B,GAAN,mBACKQ,GADL,YAEKlC,GAAS+pB,EAAc8E,GAAY1mC,KAAI,SAAA+Q,GAAI,MAAK,CACjDA,OACA6C,4BAKCmG,IAET,MACG,SCcA/Y,gBAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EApHoB,SAAC,GAAiC,IAAD,MAA9B9P,EAA8B,EAA9BA,SAAUwC,EAAoB,EAApBA,cACtClD,EAAO01C,cAAP11C,GACFiB,EAAU+P,IAAMsX,WAAW/mB,GAC3BuP,EAAUC,cAHkD,EAKTY,YACvDkyB,GACA,CACE/wB,UAAW,CACTq8B,gBAAiBnvC,EACjBuyB,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,IAExC0vC,6BAA6B,IATzBjd,EAL0D,EAK1DA,QAASrrB,EALiD,EAKjDA,MAAOmI,EAL0C,EAK1CA,KAAMsC,EALoC,EAKpCA,QAAS8jC,EAL2B,EAK3BA,cAajCvtB,EAAYzW,YAASiyB,GAAY,CACrC9wB,UAAW,CACTq8B,gBAAiBnvC,EACjBuyB,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,GACtC2vC,YAAan3B,OACV0L,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,OAASyJ,IAAI,EAAG,WAC/BkC,MAAM,SACNR,OAAO,eAEZ+rB,6BAA6B,IAG/B1+B,IAAM+C,WAAU,WACdlC,IACAuW,EAAUvW,YACT,IAEH,IAAM+jC,EAAS,WACb,OAAOC,OAAO3gC,SAASgoB,KAAK7nB,OAAO,UAAY,GAGjD,GACEod,GACArK,EAAUqK,SACQ,IAAlBkjB,GAC4B,IAA5BvtB,EAAUutB,cAEV,OACE,yBAAKhuC,MAAO,CAAEhD,OAAQ,SACnBqM,IAAM8kC,aAAap1C,EAAU,CAC5B+xB,SAAS,EACTmjB,OAAQA,IACRxtB,UAAW,MAMnB,GAAIhhB,IAAUmI,EAAK6X,eAAe1lB,OAahC,OAXEwB,GACAA,EAAcH,sBAAsB41B,eAAe,OAEnD13B,EAAQ,CACNlD,MAAO,gCACPyB,iBAAkB,SAEjBuT,MAAK,kBAAMjC,EAAQsE,KAAK,qCACxB4T,OAAM,eAIT,yBAAKrhB,MAAO,CAAEhD,OAAQ,SACnBqM,IAAM8kC,aAAap1C,EAAU,CAC5B+xB,SAAS,EACTmjB,OAAQA,IACRxtB,UAAW,MAMnB,IAAMT,EAAgBpY,EAAK6X,eAAe,GACpC2uB,EAAc7K,GAA6BvjB,GAC7CsuB,EACFhL,GAAmCrwB,gBAYrC,OAVI+M,EAAcma,OAAO,GAAG9mB,YAAYA,cACtCi7B,EACEhL,GAAmCzI,oBAGnC7a,EAAcma,OAAO,GAAG3b,MAC1B8vB,EACEhL,GAAmCpwB,iBAIrC,yBAAKlT,MAAO,CAAEhD,OAAQ,SACnBqM,IAAM8kC,aAAap1C,EAAU,CAC5B6O,KAAMwmC,EACNE,2BACAxjB,SAAS,EACTmjB,OAAQA,IACRxtB,WAAW,UAAAA,EAAU7Y,YAAV,yBAAgB6X,sBAAhB,yBAAiC,UAAjC,eAAqCD,cAAe,SCrHjEgvB,GAAyB,SAC7BlR,EACAF,EACAqR,GAEA,OAAOnR,EACJz1B,KAAI,SAAAwL,GACH,IAAMq7B,EAAkBr7B,EAAYA,YAAY,GAC5CA,EAAYA,YAAY,GAAGA,YAC3B,KAEEs7B,EAAqBF,EAAoB1jC,MAC7C,SAAA6jC,GACE,OAAIF,IAAoBE,EAAoBv7B,aACnCu7B,KAMb,QAAKD,GAEE,eACFA,EADL,CAEErR,aAAa,GAAD,OAAKjqB,EAAYuwB,mBAGhCxuB,QAAO,SAAApM,GAAI,OAAIA,MAGd6lC,GAAoB,SAAAl7B,GACxB,OAAOA,EAAO9L,KAAI,SAAAmB,GAChB,IAAM8lC,EAAgB9lC,EAAKw6B,MAAM,GAC7BrJ,EAAS,CACX3mB,IAAK,IACLD,IAAK,IACLD,IAAK,KAEHw7B,EAAc3U,QAChB2U,EAAc3U,OAAOtyB,KAAI,SAAAmB,GACvBmxB,EAAOnxB,EAAKo0B,SAASA,UAAYp0B,EAAKlP,SAG1C,IAAIulC,EAAkB,GAStB,OARIyP,EAAcxP,UAChBD,EAAkB,CAChBz8B,UAAW,CACTxM,MAAO04C,EAAcxP,QACrB3nC,YAAam3C,EAAcC,iBAI1B,aACLhG,WAAYnuC,SAASoO,EAAK3Q,IAC1BA,GAAIuC,SAASk0C,EAAcz2C,IAC3BjC,MAAO04C,EAAc14C,MACrBuB,YAAam3C,EAAcn3C,aACxB0nC,EALL,GAMKlF,EANL,CAOErgC,MAAOkP,EAAKgmC,iBAKZC,GAA2B,SAAA9T,GAC/B,cAAOA,QAAP,IAAOA,OAAP,EAAOA,EAAetzB,KAAI,SAAAmB,GACxB,IAAMkmC,EAAuBlmC,EAAKy6B,aAAa,GAC3CtJ,EAAS,CACX3mB,IAAK,IACLD,IAAK,IACLD,IAAK,KAEH47B,EAAqB/U,QACvB+U,EAAqB/U,OAAOtyB,KAAI,SAAAmB,GAC9BmxB,EAAOnxB,EAAKo0B,SAASA,UAAYp0B,EAAKlP,SAG1C,IAAIulC,EAAkB,GAStB,OARI6P,EAAqB5P,UACvBD,EAAkB,CAChBz8B,UAAW,CACTxM,MAAO84C,EAAqB5P,QAC5B3nC,YAAau3C,EAAqBH,iBAIjC,aACLhG,WAAYnuC,SAASoO,EAAK3Q,IAC1BA,GAAIuC,SAASs0C,EAAqB72C,IAClCjC,MAAO84C,EAAqB94C,MAC5BuB,YAAau3C,EAAqBv3C,aAC/B0nC,EALL,GAMKlF,EANL,CAOErgC,MAAOkP,EAAKmmC,wBAMZC,GAAsB,SAAArP,GAC1B,IAAKA,EAAU,MAAO,GAEtB,IAAMn4B,EAAOo5B,KAAUC,eAAelB,GAAUqB,WAAWK,OAAO,GAC/DP,WAEGruB,EAAY,CAChBA,UAAWhC,KAAOjJ,EAAK66B,WAAW,GAAG3oC,MAAO,YAAYkiB,OAAO,SAC/DlJ,SAAUlL,EAAK86B,UAAU,GAAG5oC,MAC5BiZ,SAAUnL,EAAK+6B,UAAU,GAAG7oC,OAG9B,MAAO,CACL+Y,UAAU,aACRxa,GAAG,GAAD,OAAKwa,EAAUA,UAAf,YAA4BA,EAAUC,SAAtC,YAAkDD,EAAUE,WAC3DF,KCpGHw8B,GAAqC,SAAAznC,GACzC,IAAM0nC,EAAU1nC,EAAK2nC,SAAS,GACxBnS,EAAWkS,EAAQlS,SAASA,SAE5BoS,EAAY3P,GAAuBj4B,EAAKoY,eAC1CA,EAAa,eACZpY,EAAKoY,cADO,GAEZwvB,GAGDxvB,EAAcma,OAAO,GAAG9mB,YAAYA,YACtC2M,EAAa,WAdO,qBAeXA,EAAcma,OAAO,GAAG3b,IACjCwB,EAAa,WAfI,kBAiBjBA,EAAa,WAnBI,kBAsBnB,IAAMvD,EAAQ,CACZrK,UAAWvB,KAAOjJ,EAAK+X,SAAU,cACjCtN,QAASxB,KAAOjJ,EAAKgY,OAAQ,eAGzB6vB,EAA4BC,GAChC1vB,EACAod,EACA,KACA3gB,GAGF,MAAO,CACLpkB,GAAIuC,SAASgN,EAAKvP,IAClBmvC,gBAAiB5sC,SAASgN,EAAKoY,cAAc3nB,IAC7C4P,UAAWL,EAAK+nC,eAChBznC,SAAUN,EAAKgoC,cACfC,MAAOjoC,EAAKkoC,iBACZ1nC,MAAOR,EAAKmoC,WACZhT,SAAUn1B,EAAKm1B,SACfiT,IAAK,CACH,kBAAkB,GAEpBvzB,MAAOA,EACPrG,gBAAiBxO,EAAKoY,cAAc4jB,aACpCxG,SAAUA,EACV6S,UAAWr1C,SAAS00C,EAAQj3C,IAC5Bsb,OAAQk7B,GAAkBjnC,EAAKsoC,cAC/B/U,cAAe8T,GAAyBrnC,EAAKuoC,qBAC7C7S,aAAckR,GACZ5mC,EAAK4b,OACL4Z,EACAqS,GAEFjP,WAAY4P,GACVxoC,EAAKyoC,0BACLjT,KAKAgT,GAAgC,SAACC,EAA2BjT,GAChE,OAAOiT,EAA0BxoC,KAAI,SAAAmB,GACnC,IAAMsmC,EAAUtmC,EAAKumC,SAAS,GACxB9F,EAAezgC,EAAKygC,aACtB54B,KAAO7H,EAAKygC,aAAc,cAC1B,KACE8E,EAAavlC,EAAKulC,WACpB19B,KAAO7H,EAAKulC,WAAY,cACxB,KAEEiB,EAAY9L,GAAkB16B,EAAKsgC,UACnCA,EAAQ,eACTtgC,EAAKsgC,SADI,GAETkG,GAMCc,EAAuBC,GAC3BjH,EALsB,CACtBpzB,OAAQ,CAAEknB,SAAUA,EAAUqM,aAAcA,KAM5C,eACA,GAGIpK,EAAkB,GACpBr2B,EAAKsgC,SAAShK,UAChBD,EAAgBjpC,MAAQ4S,EAAKsgC,SAAShK,SAGxC,IAAM7iB,EAAQ,GAYd,OAVIgtB,GAAgB8E,GAClB9xB,EAAMitB,WAAa,CACjBt3B,UAAWq3B,EACXp3B,QAASk8B,GAEX9xB,EAAMgtB,aAAe,MAErBhtB,EAAMgtB,aAAeA,EAGhB,aACLpxC,GAAIuC,SAASoO,EAAK3Q,IAClBixC,SAAU1uC,SAASoO,EAAKsgC,SAASjxC,IACjCjC,MAAO4S,EAAKsgC,SAASlzC,MACrBwM,UAAWy8B,EACXtC,SAAU/zB,EAAK+zB,SACfK,SAAUA,EACV6S,UAAWr1C,SAAS00C,EAAQj3C,IAC5Bsb,OAAQk7B,GAAkB7lC,EAAKknC,cAC/B/U,cAAc8T,GAAyBjmC,EAAKmnC,qBAC5C7S,aAAckR,GACZxlC,EAAKwa,OACL4Z,EACAkT,IAEClB,GAAoBpmC,EAAK+2B,UAf9B,GAgBKtjB,O,g1GCrIF,IAAM+zB,GAAwBzsC,KAAH,M,+oCCA3B,IAAM0sC,GAA+B1sC,KAAH,MAgB5B2sC,GAA+B3sC,KAAH,MClBnC4sC,IDkCiC5sC,KAAH,MClCC,SAAAo2B,GACnC,IAAMyW,EAAsB,CAC1Bp9B,KAAK,EACLD,KAAK,EACLD,KAAK,GAEDu9B,EAA4B,GAclC,OAZA1W,EAAOtyB,KAAI,SAAAmB,GACLs1B,WAAWt1B,EAAKlP,OAAS,IAC3B82C,EAAoB5nC,EAAKo0B,SAASA,WAAY,MAIlDloB,OAAOC,KAAKy7B,GAAqB/oC,KAAI,SAAAgI,GAC/B+gC,EAAoB/gC,IACtBghC,EAA0BpjC,KAAKoC,MAI5BghC,ICpBHC,GAAwC,SAACpH,EAAYqH,GACzD,OAAIrH,GAAcA,EAAWt3B,WAAas3B,EAAWr3B,QAE5C0+B,GADUrH,EAAWr3B,QAAQsK,KAAK+sB,EAAWt3B,UAAW,QAAU,GAIpE2+B,GAGHC,GAAgB,SACpB1H,EACA7sB,EACA6gB,EACA3pB,EACAwnB,EACA8V,EACA7T,EACA8T,GAEA,IAAI3gC,EAAQ,EAuDZ,OArDA+sB,EAAaz1B,KAAI,SAAAmB,GACf,GAAKA,EAAKs0B,cAAiB1iC,SAASoO,EAAKs0B,cACzC,IACGgM,EAASnG,uBAAyBmG,EAASpM,kBACpB,oBAAxBoM,EAAS/L,WAEThtB,GAASvH,EAAKo0B,QACT,GACmB,oBAAxBkM,EAAS/L,YACe,uBAAxB+L,EAAS/L,WAET,GAAI9gB,GAASA,EAAMrK,WAAaqK,EAAMpK,QAAS,CAC7C,IAAM8+B,EAAyC,uBAAxB7H,EAAS/L,WAChChtB,GAAS6gC,GACP30B,EACAzT,EAAKo0B,GACLp0B,EACAmoC,EACA7H,EAASpM,gBACToM,EAAS/L,iBAGXhtB,GAAS+tB,WAAWt1B,EAAKo0B,SAG3B7sB,GAASvH,EAAKo0B,GAAYxiC,SAASoO,EAAKs0B,iBAIvCgM,EAASpM,kBACZ3sB,EAAQugC,GAAsCI,EAAoB3gC,IAGhEoD,GACFA,EAAO9L,KAAI,SAAAmB,GACJA,EAAKlP,OAAUc,SAASoO,EAAKlP,SAClCyW,GAAS3V,SAASoO,EAAKlP,OAASkP,EAAKo0B,OAIrCjC,GACFA,EAActzB,KAAI,SAAAmB,GACXA,EAAKo0B,KACV7sB,GAAS+tB,WAAWt1B,EAAKo0B,QAI7B7sB,GAAS8gC,GACPJ,EACA7T,EACAkM,EAASpM,iBAGJoB,WAAW/tB,EAAM+gC,QAAQ,KAG5BD,GAAuB,SAAC1jC,EAAOyvB,GACnC,IAAI7sB,EAAQ,EAyDZ,OAvDA5C,EAAM9F,KAAI,SAAAmB,GACR,IAAIuoC,EAAY,EACXvoC,EAAKs0B,eACVt0B,EAAKs0B,aAAaz1B,KAAI,SAAAwL,GACpB,GAAKA,EAAYiqB,cAAiB1iC,SAASyY,EAAYiqB,cAEvD,IACGt0B,EAAKgX,eAAkBhX,EAAKq4B,cACT,oBAApBr4B,EAAKu0B,WAGA,GACe,oBAApBv0B,EAAKu0B,YACe,uBAApBv0B,EAAKu0B,WAEL,GAAIv0B,EAAKyT,OAASzT,EAAKyT,MAAMrK,WAAapJ,EAAKyT,MAAMpK,QAAS,CAC5D,IAAM8+B,EAAqC,uBAApBnoC,EAAKu0B,WAC5BgU,GAAaH,GACXpoC,EAAKyT,MACLpJ,EAAY+pB,GACZ/pB,EACA89B,EACAnoC,EAAKgX,cACLhX,EAAKu0B,iBAGPgU,GAAajT,WAAWjrB,EAAY+pB,SAGtCmU,GAAal+B,EAAY+pB,GAAYxiC,SAASyY,EAAYiqB,mBAnB1DiU,GAAal+B,EAAY+pB,MAuBxBp0B,EAAKk0B,gBAMR3sB,GAASghC,EALThhC,GAASugC,GACP9nC,EAAK0gC,WACL6H,GAMCvoC,EAAK2K,SACV3K,EAAK2K,OAAO9L,KAAI,SAAAmB,GACTA,EAAKlP,OAAUc,SAASoO,EAAKlP,SAClCyW,GAAS3V,SAASoO,EAAKlP,OAASkP,EAAKo0B,OAGlCp0B,EAAKmyB,eACVnyB,EAAKmyB,cAActzB,KAAI,SAAAmB,GACfA,EAAKo0B,KACX7sB,GAAS+tB,WAAYt1B,EAAKo0B,aAIvBkB,WAAW/tB,EAAM+gC,QAAQ,KAG5BF,GAA4B,SAAC30B,EAAOiiB,EAAO11B,EAAMmoC,EAAgBjU,EAAiBsU,GACtF,IACMC,EAASh1B,EAAMpK,QAAQsK,KAAKF,EAAMrK,UAAW,QAC7CkrB,EAAe6T,EAAiBnoC,EAAKs0B,aAAe,EAC1D,OAAIJ,GAHiB,oBAGEsU,EAEhBlT,WAAW,GAAD,OAAI1jC,SAAS62C,GAAUnT,WAAWI,GAASpB,IADnDgB,WAAW,GAAD,OAAI1jC,SAAS,GAAK0jC,WAAWI,GAASpB,KC3IrDU,GAAY,SAAC0T,EAAUtU,GAC3B,OAAKsU,EAAS/9B,QAAW+9B,EAAS/9B,OAAO5Z,OAElC,CACL4Z,OAAQ+9B,EAAS/9B,OACd9L,KAAI,SAAAmB,GACH,GAAKA,EAAKlP,OAAUc,SAASoO,EAAKlP,OAAlC,CACA,IAAM63C,EAAU,UAAM3oC,EAAKlP,MAAQkP,EAAKo0B,IAClCwU,EAAgB5oC,EAAK+/B,WAAa,CAAE1wC,GAAI2Q,EAAK+/B,YAAe,GAClE,OAAO,eACF6I,EADL,CAEEC,QAAS7oC,EAAK3Q,GACd+kC,SAAUA,EACV4R,WAAYp0C,SAASoO,EAAKlP,OAC1B63C,WAAYrT,WAAWqT,EAAWpT,MAAM,KAAK9M,KAAK,WAGrDrc,QAAO,SAAApM,GAAI,OAAIA,MAhBoC,IAoBpD8oC,GAAmB,SAACJ,EAAUtU,GAClC,OAAKsU,EAASvW,eAAkBuW,EAASvW,cAAcphC,OAEhD,CACLohC,cAAeuW,EAASvW,cACrBtzB,KAAI,SAAAmB,GAEH,IAAM2oC,EAAU,UAAM3oC,EAAKo0B,IACrBwU,EAAgB5oC,EAAK+/B,WAAa,CAAE1wC,GAAI2Q,EAAK+/B,YAAe,GAClE,OAAO,eACF6I,EADL,CAEEG,eAAgB/oC,EAAK3Q,GACrB+kC,SAAUA,EACV+R,kBAAmBv0C,SAAS,GAC5B+2C,WAAYrT,WAAWqT,EAAWpT,MAAM,KAAK9M,KAAK,UAGrDrc,QAAO,SAAApM,GAAI,OAAIA,MAhBkD,IAoBlEgpC,GAAY,SAACN,EAAUnU,EAAYH,EAAUF,GACjD,OAAKwU,EAASpU,cAAiBoU,EAASpU,aAAavjC,OAE9C,CACLypB,OAAQkuB,EAASpU,aACdz1B,KAAI,SAAAmB,GACH,GAAKA,EAAKs0B,cAAiB1iC,SAASoO,EAAKs0B,cAAzC,CACA,IAAIqU,EAAU,UAAM3oC,EAAKs0B,aAAet0B,EAAKo0B,IAC7C,IACGsU,EAASlK,iBAAmBtK,IACd,oBAAfK,EAEAoU,EAAU,UAAM3oC,EAAKo0B,SAChB,GACU,oBAAfG,GACe,uBAAfA,EAEA,GACEmU,EAASj1B,OACTi1B,EAASj1B,MAAMrK,WACfs/B,EAASj1B,MAAMpK,QACf,CACA,IAAM8+B,EAAgC,uBAAf5T,EACvBoU,EAAU,UAAMP,GACdM,EAASj1B,MACTzT,EAAKo0B,GACLp0B,EACAmoC,EACAjU,EACAK,SAGFoU,EAAa3oC,EAAKo0B,GAGtB,MAAO,CACL/pB,YAAarK,EAAKqK,YAClBuwB,aAAchpC,SAASoO,EAAKs0B,cAC5BqU,WAAYrT,WAAWqT,EAAWpT,MAAM,KAAK9M,KAAK,UAGrDrc,QAAO,SAAApM,GAAI,OAAIA,MAxCgD,IA4ChEipC,GAAkB,SAAAP,GACtB,OAAKA,EAASjI,cAAiBiI,EAAShI,WACnCgI,EAASjI,aAML,CACLA,aAAc54B,KAAO6gC,EAASjI,cAAcztB,OAAO,eAN9C,CACLytB,aAAc54B,KAAO6gC,EAAShI,WAAWt3B,WAAW4J,OAAO,cAC3DuyB,WAAYmD,EAAShI,WAAWr3B,QAAUxB,KAAO6gC,EAAShI,WAAWr3B,SAAS2J,OAAO,cAAgB,MAJ9C,IAYvDgkB,GAAc,SAAA0R,GAClB,OAAKA,EAAS7+B,UAEP,CACLktB,SAAU,CACRltB,UAAWhC,KAAO6gC,EAAS7+B,UAAUA,UAAW,SAASmJ,OACvD,cAEFlJ,SAAUlY,SAAS82C,EAAS7+B,UAAUC,UACtCC,SAAU2+B,EAAS7+B,UAAUE,WARD,IC3F5Bm/B,GAAmC,SACvClyB,EACAmyB,EACA/3C,EACA2rC,EACAqM,EACAC,GAEA,IAAMC,EAAoBH,EAAsBj8B,OAC1Cq8B,EAAgBD,EAAkBvV,SACpCuV,EAAkBvV,SAClB,cACEA,EAAWgJ,EAAW,SAAWwM,EACjCpU,EAAQmU,EAAkBj6C,GAAK,CAAEA,GAAIi6C,EAAkBj6C,IAAO,GAC9Dm6C,EAAeF,EAAkBrC,UACnC,CAAE53C,GAAIi6C,EAAkBrC,WACxB,GAEAwC,EAAc,OAIlB,OAHIL,IAAaK,EAAc,UAC3BJ,IAAeI,EAAc,UAE1B,aACLC,qBAAqB,eAChBvU,EADe,CAElBqJ,gBAAiBxnB,EAAcnO,YAAYxZ,GAC3Cs3C,eAAgB2C,EAAkBrqC,UAClC2nC,cAAe0C,EAAkBpqC,SACjC4nC,iBAAkBwC,EAAkBzC,MACpCE,WAAYuC,EAAkBlqC,MAC9B20B,SAAUA,EACVpd,SAAU9O,KAAOyhC,EAAkB71B,MAAMrK,WAAW4J,OAAO,cAC3D4D,OAAQ/O,KAAOyhC,EAAkB71B,MAAMpK,SAAS2J,OAAO,cACvDszB,QAAQ,eACHkD,EADE,CAELC,YAAaA,EACbL,YAAaA,EACbC,cAAeA,EACfjV,SAAUkV,EAAkBlV,SAC5BuU,WAAYX,GACVhxB,EACAsyB,EAAkB71B,MAClB61B,EAAkBhV,aAClBgV,EAAkB3+B,OAClB2+B,EAAkBnX,cAClBmX,EAAkB9R,WAClB8R,EAAkBlV,aAGnBY,GAAUsU,EAAmBA,EAAkBlV,UA1BhC,GA2Bf0U,GAAiBQ,EAAmBA,EAAkBlV,UA3BvC,GA4Bf4U,GACDM,EACAtyB,EAAcud,WACd+U,EAAkBlV,UAClB,KAGDuV,GAAsBL,EAAmBvM,GApC9C,GAqCK6M,GAA4Bx4C,KAI7Bw4C,GAA8B,SAAAx4C,GAClC,OAAKA,GAA6BA,EAAyBL,OAIpD,CACL84C,wBAAyBz4C,GAJlB,IAQLu4C,GAAwB,SAACL,EAAmBvM,GAChD,IAAMvF,EAAa8R,EAAkB9R,WAAWprB,QAC9C,SAAApM,GAAI,OAAK+8B,GAAY/8B,EAAKmd,aAAgB4f,KAG5C,OAAKvF,EAAWzmC,OAET,CACL+4C,mBAAoBtS,EAAW34B,KAAI,SAAAmB,GACjC,IAAMm1B,EAAQn1B,EAAK3Q,KAAO0tC,EAAW,CAAE1tC,GAAI2Q,EAAK3Q,IAAO,GACjDm6C,EACJxpC,EAAKinC,YAAclK,EAAW,CAAE1tC,GAAI2Q,EAAKinC,WAAc,GACnDjE,EAAajG,EAAW/8B,EAAK3Q,GAAK2Q,EAAKsgC,SAC7C,OAAO,eACFnL,EADL,CAEE6N,WAAYA,EACZjP,SAAUgJ,EAAW,SAAW,cAChCuJ,QAAQ,eACHkD,EADE,CAELC,YAAa,OACbrV,SAAUkV,EAAkBlV,SAC5BuU,WAAYN,GAAqB,CAACroC,GAAOspC,EAAkBlV,aAE1D6U,GAAgBjpC,GAVrB,GAWKg3B,GAAYh3B,GAXjB,GAYKg1B,GAAUh1B,EAAMspC,EAAkBlV,UAZvC,GAaK0U,GAAiB9oC,EAAMspC,EAAkBlV,UAb9C,GAcK4U,GAAUhpC,EAAMA,EAAKu0B,WAAY+U,EAAkBlV,eAtB7B,ICpDlBpoC,GAtCGC,aAAW,SAAAC,GAAK,MAAK,CACrCovC,cAAc,aACZ7mC,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,SAGlB6Y,YAAY,aACV7Y,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,OACf68B,YAAa,SAGhByY,aAAa,aACX71C,QAAS,OACTC,eAAgB,gBAChBM,aAAc,OACd,eAAgB,CACdA,aAAc,IAEfvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfI,aAAc,OACd5H,QAAS,cAGbm9C,eAAe,aACb/1C,MAAO,QACPQ,aAAc,GACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPQ,aAAc,OACb5H,QAAS,kBCuBDo9C,GAhDU,WACvB,IAAMz7C,EAAUxC,KADa,EAEjByC,cAALC,EAFsB,oBAI7B,OACE,yBAAKQ,UAAWV,EAAQ8sC,eACtB,kBAAChmC,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQ8e,aACzC5e,EAAE,sBAEL,yBAAKQ,UAAWV,EAAQu7C,cACtB,kBAAC5vB,GAAA,EAAD,CACErT,KAAK,YACL7O,YAAY,aACZ/I,UAAWV,EAAQw7C,eACnB9zC,MAAM,eACNvC,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,WACL7O,YAAY,YACZ/I,UAAWV,EAAQw7C,eACnB9zC,MAAM,cACNvC,UAAW8D,MAGf,yBAAKvI,UAAWV,EAAQu7C,cACtB,kBAAC5vB,GAAA,EAAD,CACErT,KAAK,QACL7O,YAAY,QACZ/I,UAAWV,EAAQw7C,eACnB9zC,MAAM,UACN0B,cAAc,EACdC,eAAe,EACfF,UAAW,GACXhE,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,QACL7O,YAAY,QACZ/I,UAAWV,EAAQw7C,eACnB9zC,MAAM,UACNvC,UAAW8D,QCoBNzL,GArEGC,YAAW,CAC3BqvC,cAAe,CACb7mC,aAAc,QAEhB6Y,YAAa,CACX7Y,aAAc,QAEhBy1C,eAAgB,CACdz1C,aAAc,QAEhB01C,aAAc,CACZj9C,MAAO,UACPuH,aAAc,OACd2B,cAAe,UACfD,cAAe,aAEjBi0C,oBAAqB,CACnB31C,aAAc,MACdxH,WAAY,QAEdo9C,oBAAqB,CACnB51C,aAAc,OAEhB61C,kBAAmB,GACnBC,kBAAmB,CACjBr2C,QAAS,OACTC,eAAgB,gBAChBC,WAAY,WACZvH,QAAS,QACTuJ,cAAe,UACf9I,UAAW,oBACX,eAAgB,CACdguB,aAAc,sBAGlBkvB,gBAAiB,CACfz9C,SAAU,QAEZ09C,aAAc,CACZ19C,SAAU,OACVE,WAAY,QAEdy9C,aAAc,CACZx2C,QAAS,OACTC,eAAgB,gBAChBoC,cAAe,OACf+kB,aAAc,qBAEhBqvB,uBAAwB,CACtBv0C,cAAe,WAEjBw0C,kBAAmB,CACjB79C,SAAU,OACVE,WAAY,QAEd49C,qBAAsB,CACpBp2C,aAAc,QAEhBq2C,4BAA6B,CAC3Br2C,aAAc,QAEhBs2C,YAAa,CACXt2C,aAAc,OACd,eAAgB,CACdA,aAAc,MC/Cdu2C,GAAkB,SAAC,GAA0B,IAAxBrgC,EAAuB,EAAvBA,OAAQypB,EAAe,EAAfA,SAC3B5lC,EAAUxC,KADgC,EAE9ByC,cAF8B,mBAEzCC,EAFyC,KAI1C8S,EAJ0C,KAIlBnH,SAE9B,IAAKsQ,IAAWA,EAAO5Z,OAAQ,OAAO,KAEtC,IAAMk6C,EAAetgC,EAAOyB,QAC1B,SAAApM,GAAI,OAAIA,EAAKlP,OAASc,SAASoO,EAAKlP,UAGtC,OAAKm6C,GAAiBA,EAAal6C,OAGjC,yBAAK7B,UAAWV,EAAQ8e,aACtB,kBAAChY,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQ27C,cACzCz7C,EAAE,YAEJic,EAAO9L,KAAI,SAACmB,EAAMjB,GACjB,GAAKiB,EAAKlP,OAAUc,SAASoO,EAAKlP,OAAlC,CACA,IAAM4kC,EAAQyF,GAAkBn7B,EAAKo0B,IAC/B7sB,EAAQ4zB,GAAkBvpC,SAASoO,EAAKlP,OAASkP,EAAKo0B,IACtDzhC,EAAOqoC,GACXx5B,EACAxB,EACAA,EAAI,WAEN,OACE,yBAAK6G,IAAK9H,EAAO7P,UAAWV,EAAQq8C,sBAClC,kBAACv1C,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ47C,qBAC5Cz3C,EAAKvF,MADR,WACkBgnC,EADlB,IAC6BsB,GAE7B,yBAAKxmC,UAAWV,EAAQ87C,mBACtB,yBAAKp7C,UAAWV,EAAQ+7C,mBACtB,kBAACj1C,EAAA,EAAD,CAAY1F,QAAQ,MACjBwkC,EAAU,IACX,0BAAMllC,UAAWV,EAAQi8C,cAAe/U,GAF1C,QAE0D,IACvD11B,EAAKlP,OAER,kBAACwE,EAAA,EAAD,CAAY1F,QAAQ,MACjBwkC,EAAU,IACX,0BAAMllC,UAAWV,EAAQi8C,cAAeljC,YA9BN,MAyC9C2jC,GAAyB,SAAC,GAAiC,IAA/B/Y,EAA8B,EAA9BA,cAAeiC,EAAe,EAAfA,SACzC5lC,EAAUxC,KAD8C,EAE5CyC,cAF4C,mBAEvDC,EAFuD,KAIxD8S,EAJwD,KAIhCnH,SAE9B,IAAK83B,IAAkBA,EAAcphC,OAAQ,OAAO,KAEpD,IAAMo6C,EAAsBhZ,EAAc/lB,QACxC,SAAApM,GAAI,OAAIA,GAAQA,EAAKo0B,IAAakB,WAAWt1B,EAAKo0B,OAGpD,OAAK+W,GAAwBA,EAAoBp6C,OAG/C,yBAAK7B,UAAWV,EAAQ8e,aACtB,kBAAChY,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQ27C,cACzCz7C,EAAE,mBAEJyjC,EAActzB,KAAI,SAACmB,EAAMjB,GACxB,GAAKiB,EAAKo0B,IAAcxiC,SAASoO,EAAKo0B,IAAtC,CACA,IAAMsB,EAAQyF,GAAkBn7B,EAAKo0B,IAC/BzhC,EAAOqoC,GACXx5B,EACAxB,EACAA,EAAI,WAEN,OACE,yBAAK6G,IAAK9H,EAAO7P,UAAWV,EAAQq8C,sBAClC,kBAACv1C,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ47C,qBAC5Cz3C,EAAKvF,MADR,WACkBgnC,EADlB,IAC6BsB,GAE7B,yBAAKxmC,UAAWV,EAAQ87C,mBACtB,yBAAKp7C,UAAWV,EAAQ+7C,mBACtB,kBAACj1C,EAAA,EAAD,CAAY1F,QAAQ,OAEpB,kBAAC0F,EAAA,EAAD,CAAY1F,QAAQ,MACjBwkC,EAAU,IACX,0BAAMllC,UAAWV,EAAQi8C,cAAe/U,YA1BQ,MAmcnD0V,GA7ZQ,SAAC,GAKjB,IAJL9K,EAII,EAJJA,SACA+K,EAGI,EAHJA,aACApD,EAEI,EAFJA,aACAqD,EACI,EADJA,oBAEM98C,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAIE8S,EAJF,KAI0BnH,SA6CxBkxC,EAAoB,WACxB,IAAIC,GAAS,EAOb,OALAH,EAAa/W,aAAaz1B,KAAI,SAAAmB,GACvBA,EAAKs0B,cAAiB1iC,SAASoO,EAAKs0B,gBACzCkX,GAAS,MAGJA,GAGHC,EAAkB,WACtB,IAAID,GAAS,EAOb,OALAH,EAAa1gC,OAAO9L,KAAI,SAAAmB,GACjBA,EAAKlP,OAAUc,SAASoO,EAAKlP,SAClC06C,GAAS,MAGJA,GAUHE,EAA4B,SAChCC,EACA3rC,EACA01B,EACAyS,GAEA,GACEwD,EAAWl4B,OACXk4B,EAAWl4B,MAAMrK,WACjBuiC,EAAWl4B,MAAMpK,QACjB,CACA,IAAM+qB,EAAWiX,EAAajX,SACxB3gB,EAAQk4B,EAAWl4B,MACnBg1B,EAASh1B,EAAMpK,QAAQsK,KAAKF,EAAMrK,UAAW,QAC7CkrB,EAAe6T,EAAiBnoC,EAAKs0B,aAAe,EAC1D,OAAO6G,GACLvpC,SAAS62C,GAAUzoC,EAAKo0B,GAAYE,GAGtC,OAAOoB,GAGX,IAAK6V,MAAwBE,MAAsBxD,EAAal3C,OAC9D,OAAO,KAGT,IAAMg6C,EAAc9C,EAAal3C,OAASk3C,EAAa,GAAK,KACtD2D,EAAgB,GAChBC,EAAuB,GAa7B,OAZId,GACF9C,EAAappC,KAAI,SAAAmB,GAAI,OAAI4rC,EAAcnnC,KAAd,MAAAmnC,EAAa,YAAS5rC,EAAK2K,YAElDogC,GACJ9C,EAAa9gB,SAAQ,SAAAnnB,GACfA,EAAKmyB,cACP0Z,EAAqBpnC,KAArB,MAAAonC,EAAoB,YAAS7rC,EAAKmyB,gBAElC0Z,EAAqBpnC,KAAK,SAK5B,yBAAKvV,UAAWV,EAAQ07C,gBACtB,kBAAC50C,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQ8e,aACzC5e,EAAE,oBAEJ68C,KACC,yBAAKr8C,UAAWV,EAAQ8e,aACtB,kBAAChY,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQ27C,cACzCz7C,EAAE48C,IAEL,kBAACh2C,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ47C,qBAE3CpP,GACEx5B,EACA8+B,EAASz3B,YACTy3B,EAAS,0BACTlzC,OAGN,kBAACkI,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ67C,qBApIxB,WAC7B,GACEgB,EAAa53B,OACb43B,EAAa53B,MAAMrK,WACnBiiC,EAAa53B,MAAMpK,QACnB,CACA,IAAMD,EAAYvB,KAAOwjC,EAAa53B,MAAMrK,WACzCwK,OAAOlY,GAAY8F,IACnBwR,OAAO,gBACJ3J,EAAUxB,KAAOwjC,EAAa53B,MAAMpK,SACvCuK,OAAOlY,GAAY8F,IACnBwR,OAAO,gBACJ0jB,EAAc7uB,KAAOy4B,EAASz3B,YAAY4tB,cAAczjB,OAC5D,SAEI4jB,EAAe/uB,KAAOy4B,EAASz3B,YAAY8tB,gBAAgB3jB,OAC/D,SAGF,MAAM,GAAN,OAAU5J,EAAV,mBAAyBC,EAAzB,mBAAsC3a,EAAE,YAAxC,aAAwDgoC,EAAxD,aAAwEhoC,EACtE,aADF,aAEMkoC,GAGR,IAAM6J,EAAe4K,EAAa5K,aAC5B52B,EAAYwhC,EAAaxhC,UAC3BiiC,EAAO,GAcX,OAZIrL,IACFqL,EAAO,UAAMjkC,KAAOwjC,EAAa5K,cAC9B7sB,OAAOlY,GAAY8F,IACnBwR,OAAO,kBAGRnJ,IACFiiC,EAAO,UAAMA,EAAN,mBAAmBp9C,EAAE,cAArB,aAAuCmb,EAAUA,UAAjD,mBACLA,EAAUC,SADL,YAEHpb,EAAEmb,EAAUE,YAGX+hC,EA6FEC,IAEH,yBAAK78C,UAAWV,EAAQ87C,mBACrBe,EAAa/W,aAAaz1B,KAAI,SAAAmB,GAC7B,GAAKA,EAAKs0B,cAAiB1iC,SAASoO,EAAKs0B,cAAzC,CACA,IAAMoB,EAAQyF,GAAkBn7B,EAAKw0B,eAC/BwX,EACJ1L,EAASnG,uBAhQJ,oBAiQLmG,EAAS/L,WACPkW,EAAeuB,EACfhsC,EAAKw0B,cACLx0B,EAAKw0B,cAAgB5iC,SAASoO,EAAKs0B,cACjCmU,EACJ4C,EAAa53B,OAAS43B,EAAa53B,MAAMpK,QACrCgiC,EAAa53B,MAAMpK,QAAQsK,KACzB03B,EAAa53B,MAAMrK,UACnB,QAEF,EACA6iC,EAA4Bv9C,EAAb+5C,EAAS,EAAM,SAAc,SAkBlD,MAhB0B,oBAAxBnI,EAAS/L,YACe,uBAAxB+L,EAAS/L,aAETkW,EAAeiB,EACbL,EACArrC,EACA01B,EACwB,uBAAxB4K,EAAS/L,aAGbkW,EAAetP,GACb2M,GACEuD,EAAa3K,WACb+J,IAIF,yBAAK5jC,IAAK7G,EAAK3Q,GAAIH,UAAWV,EAAQ+7C,mBACnCyB,EACC,kBAAC12C,EAAA,EAAD,CAAY1F,QAAQ,SACjBoQ,EAAKs0B,aADR,IACuB5lC,EAAEsR,EAAKqK,cAAgB3b,EAAE,UAAW,MACtD+5C,GACD,4CACKA,EADL,IACcwD,IAKlB,oCAC2B,oBAAxB3L,EAAS/L,WACR,kBAACj/B,EAAA,EAAD,CAAY1F,QAAQ,SAClB,0BAAMV,UAAWV,EAAQg8C,iBACtBxqC,EAAKo0B,UACA,IACPsB,EAAO,MACL+S,GACD,4CACKA,EADL,IACcwD,IAKlB,kBAAC32C,EAAA,EAAD,CAAY1F,QAAQ,SAClB,0BAAMV,UAAWV,EAAQg8C,iBACtBxqC,EAAKo0B,UACA,IACPsB,EAJH,SAIa11B,EAAKs0B,aAAc,IAC7B5lC,EAAEsR,EAAKqK,cAAgB3b,EAAE,UAAW,MAClC+5C,GACD,4CACKA,EADL,IACcwD,KAOxB,kBAAC32C,EAAA,EAAD,CAAY1F,QAAQ,SACjBoQ,EAAKo0B,SAAU,IAChB,0BAAMllC,UAAWV,EAAQi8C,cAAeA,WApJ3B,WAAO,IAAD,EAC/Be,GAAS,EAGb,OAFe,OAAZH,QAAY,IAAZA,OAAA,YAAAA,EAAclZ,qBAAd,eAA6BphC,QAAS,IACvCy6C,GAAS,GACJA,EAwJJU,IACC,kBAAC,GAAD,CACE/Z,cAAekZ,EAAalZ,cAC5BiC,SAAUiX,EAAajX,WAI1BqX,KACC,kBAAC,GAAD,CACE9gC,OAAQ0gC,EAAa1gC,OACrBypB,SAAUiX,EAAajX,aAIxB6T,EAAal3C,QACd,oCACE,yBAAK7B,UAAWV,EAAQ8e,aACtB,kBAAChY,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQ27C,cACzCY,EAAYt3B,MAAQ/kB,EAAE,iBAAmBA,EAAE,eAG7Cu5C,EAAappC,KAAI,SAACksC,EAAahsC,GAAd,OAChB,yBAAK8H,IAAK9H,EAAO7P,UAAWV,EAAQu8C,aAClC,kBAACz1C,EAAA,EAAD,CACE1F,QAAQ,QACRV,UAAWV,EAAQ47C,qBAEG,WAArB5oC,GACD0K,OAAOC,KAAK4+B,EAAW,WAAeh6C,OAClCg6C,EAAW,UAAc39C,MACzB29C,EAAY39C,OAElB,kBAACkI,EAAA,EAAD,CACE1F,QAAQ,QACRV,UAAWV,EAAQ67C,qBAElBU,EAAYt3B,OACX,oCACG5L,KAAOkjC,EAAYt3B,MAAMrK,WACvBwK,OAAOlY,GAAY8F,IACnBwR,OAAO,gBAAiB,IAH7B,SAII,IACDnL,KAAOkjC,EAAYt3B,MAAMpK,SACvBuK,OAAOlY,GAAY8F,IACnBwR,OAAO,iBAGb+3B,EAAYtK,cACX,oCACG54B,KAAOkjC,EAAYtK,cACjB7sB,OAAOlY,GAAY8F,IACnBwR,OAAO,gBAAiB,IAC1B+3B,EAAYlhC,WACX,oCACG,UACAkhC,EAAYlhC,UAAUA,UAFzB,UAEsC,IACnCkhC,EAAYlhC,UAAUC,SAAU,IAChCpb,EAAEq8C,EAAYlhC,UAAUE,aAMnC,yBAAK7a,UAAWV,EAAQ87C,mBACrBS,EAAYzW,aAAaz1B,KAAI,SAAAmB,GAC5B,GAAKA,EAAKs0B,cAAiB1iC,SAASoO,EAAKs0B,cAAzC,CAEA,IAAMoB,EAAQyF,GACZn7B,EAAKqrC,EAAajX,WAEd4X,EACJjB,EAAY/zB,eAxZb,oBAyZC+zB,EAAYxW,WACVkW,EAAeuB,EACfhsC,EAAKqrC,EAAajX,UAClBp0B,EAAKqrC,EAAajX,UAClBxiC,SAASoO,EAAKs0B,cACZmU,EAASsC,EAAYt3B,MACvBs3B,EAAYt3B,MAAMpK,QAAQsK,KACxBo3B,EAAYt3B,MAAMrK,UAClB,QAEF,EACE6iC,EAA4Bv9C,EAAb+5C,EAAS,EAAM,SAAc,SAkBlD,MAhB6B,oBAA3BsC,EAAYxW,YACe,uBAA3BwW,EAAYxW,aAEZkW,EAAeiB,EACbX,EACA/qC,EACA01B,EAC2B,uBAA3BqV,EAAYxW,aAGhBkW,EAAetP,GACb2M,GACEiD,EAAYrK,WACZ+J,IAIF,yBAAK5jC,IAAK7G,EAAK3Q,GAAIH,UAAWV,EAAQ+7C,mBACnCyB,EACC,kBAAC12C,EAAA,EAAD,CAAY1F,QAAQ,MACjBoQ,EAAKs0B,aAAc,IACnB5lC,EAAEsR,EAAKqK,cAAgB3b,EAAE,UAAW,MAClC+5C,GACD,4CACKA,EADL,IACcwD,IAKlB,kBAAC32C,EAAA,EAAD,CAAY1F,QAAQ,MACjBy7C,EAAajX,SAAU,IACxB,0BAAMllC,UAAWV,EAAQi8C,cACtB/U,GACK,IAJV,QAKK11B,EAAKs0B,aAAc,IACrB5lC,EAAEsR,EAAKqK,cAAgB3b,EAAE,UAAW,MAClC+5C,GACD,4CACKA,EADL,IACcwD,IAKpB,kBAAC32C,EAAA,EAAD,CAAY1F,QAAQ,MACjBy7C,EAAajX,SAAU,IACxB,0BAAMllC,UAAWV,EAAQi8C,cACtBA,eAWnB,kBAAC,GAAD,CACAtY,cAAe0Z,EACfzX,SAAUiX,EAAajX,WAGvB,kBAAC,GAAD,CACEzpB,OAAQihC,EACRxX,SAAUiX,EAAajX,YAK7B,yBAAKllC,UAAWV,EAAQk8C,cACtB,kBAACp1C,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQvB,YACzCyB,EAAE,UAEL,kBAAC4G,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQm8C,wBACzCU,EAAajX,SAAU,IACxB,0BAAMllC,UAAWV,EAAQo8C,mBACtBzP,GACC6M,GACE1H,EACA+K,EAAa53B,MACb43B,EAAa/W,aACb+W,EAAa1gC,OACb0gC,EAAalZ,cACb8V,EACAoD,EAAajX,SACbiX,EAAa3K,kBC/fdyL,GAXG,kBAChB,yBAAKl4C,MAAO,GAAID,OAAQ,GAAI0uB,QAAQ,YAAY5kB,KAAK,QACnD,0BACE8kB,SAAS,UACTC,SAAS,UACTC,EAAE,gdACFhlB,KAAK,cCKIsuC,GAXE,kBACf,yBAAKn4C,MAAO,GAAID,OAAQ,GAAI0uB,QAAQ,YAAY5kB,KAAK,QACnD,0BACE8kB,SAAS,UACTC,SAAS,UACTC,EAAE,sfACFhlB,KAAK,cCNE9R,GAAYC,YAAW,CAClCka,QAAS,CACPjS,QAAS,OACTC,eAAgB,gBAChBC,WAAY,SACZvH,QAAS,YACTR,OAAQ,oBACRE,aAAc,MACdkI,aAAc,MACd,eAAgB,CACdA,aAAc,IAGlB43C,KAAM,CACJp4C,MAAO,SAET7G,MAAO,CACLH,WAAY,OACZwH,aAAc,OAEhB63C,QAAS,CACPp4C,QAAS,OACTC,eAAgB,iBAElBo4C,WAAY,CACVr/C,MAAO,aC4DIs/C,GA5EU,SAAC,GAAoE,IAAlEp/C,EAAiE,EAAjEA,MAAOud,EAA0D,EAA1DA,OAAQwnB,EAAkD,EAAlDA,cAAesa,EAAmC,EAAnCA,aAAcC,EAAqB,EAArBA,eAChEl+C,EAAUxC,KAD2E,EAEzEyC,cAFyE,mBAIrF+S,GAJqF,UAI7DnH,UAE9B,OACE,yBAAKnL,UAAWV,EAAQ2X,SACtB,yBAAKjX,UAAWV,EAAQ69C,MACtB,kBAAC/2C,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQpB,OAC5CA,GAEFud,KAAYA,EAAO5Z,QAClB,kBAACuE,EAAA,EAAD,CAAY1F,QAAQ,SACjB+a,EACEyB,QAAO,SAAApM,GAAI,OAAIA,EAAKlP,OAASc,SAASoO,EAAKlP,UAC3C+N,KACC,SAAAmB,GAAI,gBACCA,EAAKlP,MADN,aAEAkqC,GACEx5B,EACAxB,EACAA,EAAI,WACJ5S,MANF,QASLq7B,KAAK,aAId,yBAAKv5B,UAAWV,EAAQ69C,MACtB,kBAAC/2C,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQpB,OAC5CA,GAEF+kC,KAAmBA,EAAcphC,QAChC,kBAACuE,EAAA,EAAD,CAAY1F,QAAQ,SACjBuiC,EACE/lB,QAAO,SAAApM,GAAI,OAAIA,EAAKlP,OAASc,SAASoO,EAAKlP,UAC3C+N,KACC,SAAAmB,GAAI,gBACCA,EAAKlP,MADN,aAEAkqC,GACEx5B,EACAxB,EACAA,EAAI,WACJ5S,MANF,QASLq7B,KAAK,aAId,yBAAKv5B,UAAWV,EAAQ89C,SACtB,kBAACr9C,EAAA,EAAD,CACEE,QAASs9C,EACTv9C,UAAWV,EAAQ+9C,WACnBI,oBAAoB,EACpBC,oBAAoB,EACpB3oC,aAAW,QAEX,kBAAC,GAAD,OAEF,kBAAChV,EAAA,EAAD,CACEE,QAASu9C,EACTx9C,UAAWV,EAAQ+9C,WACnBI,oBAAoB,EACpBC,oBAAoB,EACpB3oC,aAAW,UAEX,kBAAC,GAAD,UCMKgJ,GAnFE,SAAAC,GACf,IAAMpW,EAAS,GAcf,GAZKoW,EAAOuG,OAAUvG,EAAOuG,MAAMrK,WAAc8D,EAAOuG,MAAMpK,QAG5DxB,KAAOqF,EAAOuG,MAAMpK,SAASsK,KAAKzG,EAAOuG,MAAMrK,UAAW,QAC1D8D,EAAOuN,YAEP3jB,EAAO2c,MAAQ,CACbI,KAAM,2CACN1R,UAAW,CAAE25B,OAAQ5uB,EAAOuN,aAP9B3jB,EAAO2c,MAAQ,qBAWbvG,EAAOonB,cAAgBpnB,EAAOonB,aAAavjC,OAAQ,CACrD,IAAIssC,EAA0B,GAC1BC,GAAsB,EAE1BpwB,EAAOonB,aAAanN,SAAQ,SAACnnB,EAAMjB,GAC7BiB,EAAKs0B,cAAgB1iC,SAASoO,EAAKs0B,cAAgB,IACrDgJ,GAAsB,GAGxBD,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG9CgJ,IACHxmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAQ,yDAKd,IACG7wB,EAAOw9B,cACRpnB,EAAOonB,cACPpnB,EAAOonB,aAAavjC,OACpB,CACA,IAAMwsC,EAAwBrwB,EAAOrD,UACjCqD,EAAOrD,UAAU2zB,UACjBtwB,EAAOE,gBACLiwB,EAA0B,GAC5BI,EAAoB,EAExBvwB,EAAOonB,aAAanN,SAAQ,SAACnnB,EAAMjB,GAC7BiB,EAAKs0B,cAAgBt0B,EAAKs0B,aAAavjC,SACzC0sC,GAAqB7rC,SAASoO,EAAKs0B,eAErC+I,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG/CmJ,EAAoBF,IACtBzmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAO,0CAAD,OAAuC4V,KAE/CzmC,EAAO+1C,yBAA0B,GAsBrC,OAlBI/gC,GAAWoB,EAAOjO,WAAa,IAAI,KACrCnI,EAAOmI,UAAY,0BAGjB6M,GAAWoB,EAAOhO,UAAY,IAAI,KACpCpI,EAAOoI,SAAW,yBAGhB4M,GAAWoB,EAAO25B,OAAS,IAAI,KACjC/vC,EAAO+vC,MAAQ,qBAGb/6B,GAAWoB,EAAO9N,OAAS,IAAI,GACjCtI,EAAOsI,MAAQ,oBACNwM,GAAQsB,EAAO9N,OAAS,IAAI,KACrCtI,EAAOsI,MAAQ,iBAGVtI,GCuEM9K,GAxJGC,aAAW,SAAAC,GAAK,gBAChCoD,KAAK,aACH4E,QAAS,OACTD,MAAO,OACP+F,UAAW,qBACV9N,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfD,WAAa,WAGjB04C,SAAS,aACPtgD,SAAU,QACVyH,MAAO,QACPrG,UAAW,6BACXf,QAAS,aACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPzH,SAAU,OACVoB,UAAW,OACXf,QAAS,cAGbkgD,UAAU,aACR94C,MAAO,OACPC,QAAS,OACTC,eAAgB,UACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,cAGbmgD,YAAY,aACV/4C,MAAO,QACPpH,QAAS,eACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPpH,QAAS,gBAGbI,WAAY,CACVA,WAAY,QAEd8b,YAAa,CACX9b,WAAY,OACZkJ,cAAe,YACfC,cAAe,UACf3B,aAAc,OAEhB2gC,MAAO,CACLhX,eAAgB,UAChBC,iBAAkB,YAClBC,mBAAoB,SACpBrqB,MAAO,OACPD,OAAQ,QACR3H,OAAQ,oBACRD,gBAAiB,UACjBqI,aAAc,QAEhBqpC,SAAU,CACR3wC,OAAQ,UAEVywC,SAAU,CACR1pC,QAAS,OACTE,WAAY,UAEdypC,SAAU,CACR9wC,SAAU,OACVW,YAAa,QAEfoL,SAAU,CACRrE,aAAc,QAEhBsB,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,mBAEV0B,cAAe,CACb5H,SAAU,SAEZwtC,cAAc,aACZ7mC,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAO,CAC7B2kC,YAAa,SAKjBhkB,YAAY,aACV7Y,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAO,CAC7B2kC,YAAa,SAGjB2b,cAAc,aACZh5C,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC9BsH,MAAO,MACPpH,QAAS,cAGZqgD,oBAAoB,aAClBz4C,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsI,UAAW,WAGfk4C,eAAe,aACb7xB,aAAc,oBACd/kB,cAAe,OACf9B,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAO,CAC9B2kC,YAAa,SAGhBgV,QAAS,CACP7xC,aAAc,QAGhB24C,aAAc,CACZ34C,aAAc,GAEhB2oC,WAAW,aACTrwC,SAAU,QACTb,EAAMQ,YAAYC,KAAK,MAAO,CAC9BsI,UAAW,SAGdkoC,eAAe,aACblpC,MAAO,sBACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,mBACPpH,QAAS,SAGbwgD,kBAAmB,CACjBz/C,UAAW,kBACXsG,QAAS,SAvIqB,2CA2I7BhI,EAAMQ,YAAYC,KAAK,MAAO,CAC7B2kC,YAAa,UA5Ie,iCAgJd,CAChBr9B,MAAO,OACPq9B,YAAa,SAlJiB,KCqtBnBxY,gBAAU,CACvBnmB,KAAM,wBACNomB,kBAAkB,EAClBE,aAAa,EACbhM,YACAiM,cAjqBoB,CACpB9L,gBAAiB,EACjBgnB,SAAU,MACVE,aAAc,GACd3pB,OAAQ,GACRwnB,cAAe,GACfqF,WAAY,GACZwP,IAAK,CACH,kBAAkB,GAEpBvsB,UAAW,IAkpBE3B,CAMZjZ,aAnBqB,SAAAtO,GACtB,MAAO,CACL43C,sBAAuB53C,EAAMoB,KAAKw2C,sBAClC52C,cAAehB,EAAMgB,kBAIE,SAAAuN,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,wBAAyB+F,EAAOvb,QAUjD+O,EAjpBuB,SAAC,GAOpB,IANLspC,EAMI,EANJA,sBACA/K,EAKI,EALJA,qBACAjlB,EAII,EAJJA,aACAspB,EAGI,EAHJA,WACArpB,EAEI,EAFJA,SACA7mB,EACI,EADJA,cAEM/D,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAEMwR,EAFN,KAGI7Q,EAAO01C,cAAP11C,GACF8Q,EAAUC,cACRe,EAAoBC,wBAApBD,gBACF7Q,EAAU+P,IAAMsX,WAAW/mB,GAE3B4Q,EAAmBtB,EAAK7F,SACxBwnB,EACJtvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,GAEhCmvC,EAAkB2K,EAAsBj8B,OAAOsxB,gBAC/CjoB,EAAeksB,EAAaA,EAAWhvB,MAAQ,KAC/CrK,EAAYmN,EAAeA,EAAanN,UAAYvB,OAftD,EAiB0DxH,IAAMrQ,SAClE,IAlBE,mBAiBGoB,EAjBH,KAiB6Bk8C,EAjB7B,OAoBkCjtC,IAAMrQ,SAAS,MApBjD,mBAoBG+6C,EApBH,KAoBgBwC,EApBhB,OAqB0CltC,IAAMrQ,UAAS,GArBzD,mBAqBGw9C,EArBH,KAqBqBC,EArBrB,OAsB4BptC,IAAMrQ,SAAS,MAtB3C,mBAsBG8F,EAtBH,KAsBcuL,EAtBd,OAuBsChB,IAAMrQ,SAAS,MAvBrD,mBAuBGgnB,EAvBH,KAuBkB0nB,EAvBlB,OAwBsDr+B,IAAMrQ,UAC9D,GAzBE,mBAwBG2uC,EAxBH,KAwB0BC,GAxB1B,QA2B4Cv+B,IAAMrQ,SAAS,IA3B3D,qBA2BG09C,GA3BH,MA2BqBC,GA3BrB,SA6BiC9sC,YACnC4mC,IADKmG,GA7BH,wBAgCiC/sC,YACnC6mC,IADKmG,GAhCH,wBAoCsB7sC,YAASkyB,GAAe,CAChD4L,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTq8B,gBAAiBA,GAAmB5sC,SAASvC,GAC7CuyB,gBAAiBC,KALbC,GApCJ,GAoCIA,QAASljB,GApCb,GAoCaA,KASXkvC,GAAgBz7B,cAAc,SAACnmB,GAAD,OAAWA,EAAMQ,YAAYC,KAAK,SAChEohD,GAAiB17B,cAAc,SAACnmB,GAAD,OAAWA,EAAMQ,YAAYC,KAAK,SA9CnE,GA+CkC0T,IAAMrQ,SAASk1C,OAAO8I,YA/CxD,qBA+CGC,GA/CH,MA+CgBC,GA/ChB,MAiDJ7tC,IAAM8tC,iBAAgB,WACpB,IAAMC,EAAa,WACjBF,GAAehJ,OAAO8I,aAIxB,OAFA9I,OAAOllB,iBAAiB,SAAUouB,GAClCA,IACO,kBAAMlJ,OAAOjlB,oBAAoB,SAAUmuB,MACjD,IAxDC,OAgEAptC,YAASiyB,GAAY,CACvB6L,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTq8B,gBAAiBA,GAAmB5sC,SAASvC,GAC7CuyB,gBAAiBC,EACjBmd,YAAan3B,KAAOuB,GACjBmK,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAOuB,GAAWkI,IAAI,EAAG,WACxCkC,MAAM,SACNR,OAAO,iBAdHksB,GA7DP,GA6DFpd,QACMqd,GA9DJ,GA8DFvgC,KACSwgC,GA/DP,GA+DFl+B,QAgBFb,IAAM+C,WAAU,WACd,GAAIxE,IAAQA,GAAK6X,gBAAkB7X,GAAK6X,eAAe1lB,OAAQ,CAC7D,IAAMsuC,EAAwBzgC,GAAK6X,eAAe,GAC5C6oB,EAAoB/E,GACxB8E,GAGEA,EAAsBlO,OAAO,GAAG9mB,YAAYA,YAC9Ci1B,EAAiB,WAjGD,qBAkGPD,EAAsBlO,OAAO,GAAG3b,IACzC8pB,EAAiB,WAlGJ,kBAoGbA,EAAiB,WAtGJ,kBAyGflB,EACE,YACAkB,EAAkBz2B,YAAY4R,WAGhC4zB,GAA6BhP,GAC7BK,GAAmBJ,GACnBC,GAAgBD,GAChBE,GAAUF,GACVG,GAAiBH,GAEjBZ,EAAiBY,MAElB,CAAC1gC,KAEJyB,IAAM+C,WAAU,WACT+lC,GAA0BnyB,GAC/BuoB,GAAgBvoB,KACf,CACDmyB,EAAsBj8B,OAAOknB,SAC7B+U,EAAsBj8B,OAAOuG,QAG/B,IAYM46B,GAA+B,SAAAhP,GACnC,IAAMwI,EAA4BF,GAChCtI,EAAsBlO,QAElBqP,EAAmB2I,EAAsBj8B,OAAOknB,SAEtDuZ,GAAoB9F,GAEfA,EAA0B50B,SAASutB,IACtCpC,EAAqB,WAAYyJ,EAA0B,KAIzDtI,GAAkB,SAAAvoB,GACtB4nB,IAA0BD,GAE1B,IAAMvK,EAAW+U,EAAsBj8B,OAAOknB,SACxC3gB,EAAQ01B,EAAsBj8B,OAAOuG,MACrC4gB,EACJ8U,EAAsBj8B,OAAOonB,cAAgB,GAE/C,GAAI7gB,GAASA,EAAMrK,WAAaqK,EAAMpK,QAAS,CAC7C,IAAMirB,EAAeH,GACnBnd,EACAod,EACAC,EACA5gB,GAEF2qB,EAAqB,eAAgB9J,QAErC8J,EAAqB,eAAgB,KAInCoB,GAAY,SAAAxoB,GAChB,IAAM4oB,EAAiBuJ,EAAsBj8B,OAAOvC,QAAU,GAExDk1B,EAAa7oB,EAActM,WAAWC,OAAO9L,KAAI,SAAAmB,GACrD,IAAM8/B,EAAeF,EAAe79B,MAAK,SAAAy4B,GAAK,OAAIA,EAAMnrC,KAAO2Q,EAAK3Q,MACpE,OAAO,eACF2Q,EADL,CAEElP,MAAOgvC,EAAeA,EAAahvC,MAAQ,EAC3CivC,WAAYD,EAAeA,EAAaC,WAAa,UAIzD3B,EAAqB,SAAUyB,IAG3BJ,GAAmB,SAAAzoB,GACvB,IAAMgpB,EAAwBmJ,EAAsBj8B,OAAOilB,eAAiB,GAEtE8N,EAAoBjpB,EAAcsb,kBAAkBH,cAActzB,KAAI,SAAAmB,GAC1E,IAAMkgC,EAAsBF,EAAsBj+B,MAAK,SAAA04B,GAAY,OAAIA,EAAaprC,KAAO2Q,EAAK3Q,MAChG,OAAO,eACF2Q,EADL,CAEElP,MAAOovC,EAAsBA,EAAoBpvC,MAAQ,EACzDivC,WAAYG,EAAsBA,EAAoBH,WAAa,UAIvE3B,EAAqB,gBAAiB6B,IAIlCP,GAAqB,SAAA1oB,GACzBonB,EAAqB,kBAAmBpnB,EAAcnO,YAAY2R,SA8B9D8zB,GAAS,WACbjtC,GAAW,GAEX,IAAIzC,EAAOsqC,GACTlyB,EACAmyB,EACA/3C,GAGEgoB,EACFy0B,GAA2B,CAAE1rC,UAAWvD,IAAQwD,MAC9C,WACEjB,EACEzS,EAAE,uDACF,CACEkB,QAAS,YAGbuQ,EAAQsE,KAAK,CACXD,SAAU,sBAGd,SAAC/N,GAAW,IAAD,IACT4K,GAAW,GAEb,IAAMwK,GACC,OAALpV,QAAK,IAALA,OAAA,YAAAA,EAAO83C,qBAAP,yBAAuB,UAAvB,eAA2BC,UAC3B9/C,EAAE,uBAEJyS,EAAgB0K,EAAc,CAC5Bjc,QAAS,aAKbg+C,GAA2B,CAAEzrC,UAAWvD,IAAQwD,MAC9C,WACEjB,EAAgBzS,EAAE,8CAA+C,CAC/DkB,QAAS,YAEXuQ,EAAQsE,KAAK,CACXD,SAAU,uBAGd,SAAC/N,GAAW,IAAD,IACT4K,GAAW,GAEb,IAAMwK,GACC,OAALpV,QAAK,IAALA,OAAA,YAAAA,EAAO83C,qBAAP,yBAAuB,UAAvB,eAA2BC,UAC3B9/C,EAAE,uBAEJyS,EAAgB0K,EAAc,CAC5Bjc,QAAS,cAkEX6+C,GAAoB,SAACz0B,EAAY00B,GACrCp+C,EAAQ,CACNlD,MAAO,sCACPyB,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJ,IAAMo1B,EAAa2R,EAAsBj8B,OAAOsqB,WAChD4G,EAAqB,aAAD,YACf5G,EAAWprB,QAAO,SAACpM,EAAMjB,GAAP,OAAiBA,IAAU2vC,OAG9C10B,EAAW3qB,IACbi+C,EAA0B,GAAD,mBACpBl8C,GADoB,CAEvB4oB,EAAW3qB,SAIhBgpB,OAAM,gBA6BLxP,GAAcmO,EAChBgkB,GACEx5B,EACAwV,EAAcnO,YACdmO,EAAc,0BAEhB,GACE/N,GAAkB+N,EACpBgkB,GACEx5B,EACAwV,EAAc/N,gBACd+N,EAAc,8BAEhB,GAEJ,OACE,oCACE,kBAAC,GAAD,MAECA,GAAiBw2B,GAChB,kBAAC,GAAD,CACEr/C,KAAMq/C,EACN3rB,QAASA,EACTvzB,SAlIsB,WAC5BgC,EAAQ,CACNlD,MAAO,2BACPuB,YAAaD,EAAE,oCACfG,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,kBAAMqrC,GAAkB,MAC7Bp1B,OAAM,gBA2HH9pB,UAxHmB,SAAA+xC,GACzBmN,GAAkB,GAClBrP,EAAqB,aAAD,sBACf+K,EAAsBj8B,OAAOsqB,YADd,CAElB8I,MAqHIjC,SAjHsB,SAAAiC,GAC5BmN,GAAkB,GAClBrP,EAAqB,aAAD,YACf+K,EAAsBj8B,OAAOsqB,WAAW34B,KAAI,SAACmB,EAAMjB,GACpD,OAAIA,IAAUuhC,EAASvhC,MACduhC,EAEFtgC,QA2GLm6B,sBAAuBnjB,EAAcmjB,sBACrC/F,SAAU+U,EAAsBj8B,OAAOknB,SACvClb,cACE6xB,GAAe,CACbzW,aAAc,GACd3pB,OAAQ,GACRwnB,cAAe,MAKvB,kBAAC,GAAD,CACEr8B,UAAWgsB,IAAWod,IAAoBppC,EAC1CC,gBAAiBvH,EAAQuH,gBACzB7G,UAAWV,EAAQkH,gBAGpBshB,GACC,yBAAK9nB,UAAWV,EAAQc,MACtB,yBAAKJ,UAAWV,EAAQs+C,UACtB,kBAACx3C,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQua,cAC/Cra,EAAE,gBADL,KACwBsoB,EAAcnO,YAAYE,aAGlD,yBACE7Z,UAAWV,EAAQ4mC,MACnBp+B,MAAO,CACLopB,gBAAgB,OAAD,OAASpJ,EAAcnO,YAAYG,WAAWrU,MAA9C,OAGhB,IAGH,kBAACW,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQvB,YACzC4b,GAAYzb,OAGf,yBAAK8B,UAAWV,EAAQsvC,UACtB,yBAAK5uC,UAAWV,EAAQovC,UACtB,kBAAC,KAAD,CAAwBpvC,QAAS,CAAEc,KAAMd,EAAQqvC,YACjD,kBAACvoC,EAAA,EAAD,CAAY1F,QAAQ,SACjBonB,EAAcnO,YAAYtE,WAG/B,yBAAKrV,UAAWV,EAAQovC,UACtB,kBAAC,KAAD,CAAmBpvC,QAAS,CAAEc,KAAMd,EAAQqvC,YAC5C,kBAACvoC,EAAA,EAAD,CAAY1F,QAAQ,SACjBonB,EAAcnO,YAAY2R,OAD7B,IACsC9rB,EAAE,YAGzCma,GAAYxP,cAAgBwP,GAAYxP,WAAWtI,QAClD,yBAAK7B,UAAWV,EAAQovC,UACtB,kBAAC,KAAD,CAAmBpvC,QAAS,CAAEc,KAAMd,EAAQqvC,YAC5C,kBAACvoC,EAAA,EAAD,CAAY1F,QAAQ,SACjBiZ,GAAYxP,WAAWovB,KAAK,eAMrC,kBAACnzB,EAAA,EAAD,CAAY1F,QAAQ,QAAQpB,QAAS,CAAEc,KAAMd,EAAQsK,WAClDmQ,GAAgBnQ,UAGnB,kBAAC,GAAD,CACEwnC,SAAUtpB,EACVod,SAAU+U,EAAsBj8B,OAAOknB,SACvCrG,iBAAiB,KAIrB,yBAAK7+B,UAAWV,EAAQu+C,WACtB,0BACE7yB,SApSiB,SAAApmB,GAC3B,GAAIq1C,EAAsBwF,WAAY,CACpC,IAAMA,EAAaxF,EAAsBwF,WACnCC,EAAe1iC,OAAOC,KAAKwiC,GAAY59C,OAE7C,GAAI49C,EAAW9B,yBAA4C,IAAjB+B,EAAoB,CAC5D,IACMjT,EADQgT,EAAWra,aAAX,OACWiB,MAAM,KACzBqG,EAAcD,EAAW5qC,OAC/BoQ,EACEzS,EAAE,+CAA2C,CAC3CotC,OAAQH,EAAWC,EAAc,KAEnC,CACEhsC,QAAS,iBAIbuR,EAAgBzS,EAAE,0CAA2C,CAC3DkB,QAAS,YAKfupB,EAAam1B,GAAbn1B,CAAqBrlB,IA6QX5E,UAAWV,EAAQw+C,aAEnB,kBAAC13C,EAAA,EAAD,CACE1F,QAAQ,KACRV,UAAWsG,KAAWhH,EAAQvB,WAAYuB,EAAQ8e,cAG9C5e,EADH0qB,EACK,+BACA,uBAGR,kBAACe,GAAA,EAAD,CACErT,KAAK,WACL5X,UAAWsG,KACThH,EAAQy+C,cACRz+C,EAAQ8sC,eAEVxhB,KAAM4zB,GACNx3C,MAAM,kBACNvC,UAAWqzB,KAkBb,kBAAC7M,GAAA,EAAD,CACErT,KAAK,QACL4I,cAAe4G,GAAiB6oB,GAAe5oB,GAC/CjG,qBA9Za,SAAAV,GACzBwvB,GAAiB,CACfZ,gBAAiBA,GAAmB5sC,SAASvC,GAC7C2vC,YAAan3B,KAAO+H,GACjB2D,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAO+H,GAAM0B,IAAI,EAAG,WACnCkC,MAAM,SACNR,OAAO,iBAuZA9jB,UAAW4+C,GAAgBt/C,EAAQqgD,iBAAmBd,GAAiBv/C,EAAQsgD,kBAAoBtgD,EAAQ8e,YAC3GoD,eAAgBliB,EAAQ6+C,kBACxBn3C,MAAM,iBACNsa,aAAa,YACbC,qBAAqB,wBAGrBG,eAAgBq9B,GAAc,KAAO,EAA8B,EACnEl9B,QAASk9B,GAAc,IAAM,GAAK,GAClCt6C,UAAWuc,GACXgB,eAAa,EACbf,yBAA0BoG,MAGzB4yB,EAAsBj8B,OAAOonB,aAAavjC,QAC3C,kBAACo3B,GAAA,EAAD,CACErhB,KAAK,eACL1Z,MAAM,qBACNuxC,sBAAuBA,EACvBhrC,UAAWooC,OAIZoN,EAAsBj8B,OAAOvC,OAAO5Z,QACrC,kBAACo3B,GAAA,EAAD,CACErhB,KAAK,SACL1Z,MAAM,UACNgnC,SAAU+U,EAAsBj8B,OAAOknB,SACvCzgC,UAAWqpC,GACXG,eAAgB3uC,EAAQ2uC,eACxBC,WAAY5uC,EAAQ4uC,aAOxB,yBAAKluC,UAAWV,EAAQ8sC,eACtB,kBAAChmC,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQugD,iBACzCrgD,EAAE,eAEL,yBAAKQ,UAAWV,EAAQwgD,mBACtB,kBAAC,GAAD,CACE/4B,KAAM,kBAAC,KAAD,MACNpC,KAAMnlB,EAAE,QACRmtB,MAAO,WACL0xB,EAAe,MACfE,GAAkB,QAGnBtE,EAAsBj8B,OAAOsqB,WAAWzmC,QACzC,kBAAC,GAAD,CACEklB,KAAM,kBAAC,KAAD,MACNpC,KAAMnlB,EAAE,cACRmtB,MA7NU,WAC5BvrB,EAAQ,CACNlD,MAAO,sCACPyB,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJ,IAAMo1B,EAAa2R,EAAsBj8B,OAAOsqB,WAC1CyX,EAAuB,GAE7BzX,EAAW34B,KAAI,SAAAmb,GACTA,EAAW3qB,IACb4/C,EAAqBxqC,KAAKuV,EAAW3qB,OAIzCi+C,EAA0B,GAAD,mBACpBl8C,GACA69C,IAGL7Q,EAAqB,aAAc,OAEpC/lB,OAAM,qBA0MM8wB,EAAsBj8B,OAAOsqB,WAAWzmC,QACzC,yBAAK7B,UAAWV,EAAQ0gD,qBApRZ,WAC1B,IAAM1X,EAAa2R,EAAsBj8B,OAAOsqB,WAEhD,OACE,6BACGA,EAAW34B,KAAI,SAACmB,EAAMjB,GAAP,OACd,kBAAC,GAAD,CACE8H,IAAK9H,EACL3R,MACE4tC,GACEx5B,EACAxB,EACAA,EAAI,WACJ5S,MAEJud,OAAQ3K,EAAK2K,OACbwnB,cAAenyB,EAAKmvC,cACpBzC,eAAgB,kBAAM+B,GAAkBzuC,EAAMjB,IAC9C0tC,aAAc,WACZc,EAAe,eAAKvtC,EAAN,CAAYjB,MAAOA,KACjC0uC,GAAkB,UAiQX2B,KAKP,kBAAC,GAAD,MAEA,yBAAKlgD,UAAWV,EAAQ2+C,gBACtB,kBAAC73C,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQ83C,SACzC53C,EAAE,YAEL,kBAACyrB,GAAA,EAAD,CACErT,KAAK,MACL5X,UAAWV,EAAQ4+C,aACnBhiB,kBAAkB,EAClBvC,aAAc,CAAC,kBACfl1B,UAAWszB,MAIf,kBAAC,GAAD,CACEghB,aAAckB,EAAsBj8B,OAAOsqB,WAC3C8I,SAAUtpB,EACVq0B,aAAclC,EAAsBj8B,OACpCo+B,oBAAoB,kBAGtB,kBAAC,GAAD,CACEhxB,WAAYlB,EAAW,iBAAmB,kBAC1CmB,YAAanB,EAAW,SAAW,iBCprBpCptB,GAVGC,YAAW,CAC3B8J,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,mBAEV0B,cAAe,CACb5H,SAAU,WCoEC+R,gBAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAKrB,KAFasN,EA3D2B,SAAC,GAAuB,IAArBtN,EAAoB,EAApBA,cACrC/D,EAAUxC,KACRqD,EAAO01C,cAAP11C,GACFiB,EAAU+P,IAAMsX,WAAW/mB,GAC3BuP,EAAUC,cAJ+C,EAM9BY,YAASwmC,GAAuB,CAC/D1I,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTktC,uBAAwBz9C,SAASvC,GACjCuyB,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,MAPlCyyB,EANuD,EAMvDA,QAASrrB,EAN8C,EAM9CA,MAAOmI,EANuC,EAMvCA,KAWxB,GAAIkjB,IAAYvvB,EAAcH,sBAAsB41B,eAAe,MACjE,OACE,oCACE,kBAAC,GAAD,MAEA,kBAAC,GAAD,CACElyB,WAAW,EACXC,gBAAiBvH,EAAQuH,gBACzB7G,UAAWV,EAAQkH,iBAM3B,GAAIe,IAAUmI,EAAK0wC,uBAAuBv+C,OAQxC,OAPAT,EAAQ,CACNlD,MAAO,wCACPyB,iBAAkB,SAEjBuT,MAAK,kBAAMjC,EAAQsE,KAAK,oBACxB4T,OAAM,eAEF,yBAAKrhB,MAAO,CAAEhD,OAAQ,SAAW,IAG1C,IAAMyuC,EAAa3gB,EACf,KACAukB,GAAmCznC,EAAK0wC,uBAAuB,IAEnE,OACE,kBAAC,GAAD,CACEp2B,cAAeupB,EACfA,WAAYA,EACZrpB,UAAU,OClDVm2B,GAAgC,SAAA3wC,GACpC,IAAM0nC,EAAU1nC,EAAK2nC,SAAS,GACxBnS,EAAWkS,EAAQlS,SAASA,SAE5BqM,EAAe7hC,EAAK6hC,aACtB54B,KAAOjJ,EAAK6hC,aAAc,cAC1B,KAEE8E,EAAa3mC,EAAK2mC,WACpB19B,KAAOjJ,EAAK2mC,WAAY,cACxB,KAEEiB,EAAY9L,GAAkB97B,EAAK0hC,UACnCA,EAAQ,eACT1hC,EAAK0hC,SADI,GAETkG,GAMCc,EAAuBC,GAC3BjH,EALsB,CACtBpzB,OAAQ,CAAEknB,SAAUA,EAAUqM,aAAcA,KAM5C,eACA,GAGIhtB,EAAQ,GAYd,OAVIgtB,GAAgB8E,GAClB9xB,EAAMitB,WAAa,CACjBt3B,UAAWq3B,EACXp3B,QAASk8B,GAEX9xB,EAAMgtB,aAAeA,GAErBhtB,EAAMgtB,aAAeA,EAGhB,aACLpxC,GAAIuC,SAASgN,EAAKvP,IAClB2zC,WAAYpxC,SAASgN,EAAK0hC,SAASjxC,IACnC4P,UAAWL,EAAK+nC,eAChBznC,SAAUN,EAAKgoC,cACfC,MAAOjoC,EAAKkoC,iBACZ1nC,MAAOR,EAAKmoC,WACZhT,SAAUn1B,EAAKm1B,SACfiT,IAAK,CACH,kBAAkB,GAEpB5S,SAAUA,EACV6S,UAAWr1C,SAAS00C,EAAQj3C,IAC5Bsb,OAAQk7B,GAAkBjnC,EAAKsoC,cAC/B5S,aAAckR,GACZ5mC,EAAK4b,OACL4Z,EACAkT,IAEClB,GAAoBxnC,EAAKm4B,UAnB9B,CAoBEtgB,eAAgB+4B,GACd5wC,EAAK6wC,4BACLrb,IAEC3gB,IAID+7B,GAAoC,SACxCC,EACArb,GAEA,OAAOqb,EAA4B5wC,KAAI,SAAAmB,GACrC,IAAMsmC,EAAUtmC,EAAKumC,SAAS,GAExBC,EAAY3P,GAAuB72B,EAAKgX,eAC1CA,EAAa,eACZhX,EAAKgX,cADO,GAEZwvB,GAGDxvB,EAAcma,OAAO,GAAG9mB,YAAYA,YACtC2M,EAAa,WArFK,qBAsFTA,EAAcma,OAAO,GAAG3b,IACjCwB,EAAa,WAtFE,kBAwFfA,EAAa,WA1FE,kBA6FjB,IAAMvD,EAAQ,CACZrK,UAAWvB,KAAO7H,EAAK2W,SAAU,cACjCtN,QAASxB,KAAO7H,EAAK4W,OAAQ,eAGzB6vB,EAA4BC,GAChC1vB,EACAod,EACA,KACA3gB,GAGI4iB,EAAkB,GAKxB,OAJIr2B,EAAKgX,cAAcsf,UACrBD,EAAgBjpC,MAAQ4S,EAAKgX,cAAcsf,SAGtC,CACLjnC,GAAIuC,SAASoO,EAAK3Q,IAClB2nB,cAAeplB,SAASoO,EAAKgX,cAAc3nB,IAC3CklC,WAAYvd,EAAcud,WAC1BnnC,MAAO4S,EAAKgX,cAAc5pB,MAC1BwM,UAAWy8B,EACXtC,SAAU/zB,EAAK+zB,SACfK,SAAUA,EACV6S,UAAWr1C,SAAS00C,EAAQj3C,IAC5BokB,MAAOA,EACP9I,OAAQk7B,GAAkB7lC,EAAKknC,cAC/B/U,cAAc8T,GAAyBjmC,EAAKmnC,qBAC5C7S,aAAckR,GACZxlC,EAAKwa,OACL4Z,EACAqS,Q,+2BCxID,IAAMiJ,GAA0B30C,KAAH,MAgBvB40C,GAA0B50C,KAAH,MChBvB/O,GAAYC,YAAW,CAClCka,QAAS,CACP1R,aAAc,QAEhByB,MAAO,CACLzB,aAAc,OACdvH,MAAO,UACPH,SAAU,GACVC,WAAY,QAEd43B,WAAY,CACV1wB,QAAS,OACTG,cAAe,UAEjBu7C,aAAc,CACZ17C,QAAS,OACTC,eAAgB,gBAChBC,WAAY,YAEdozB,KAAM,CACJvzB,MAAO,OAET47C,MAAO,CACL57C,MAAO,MACPgB,UAAW,SACX/H,MAAO,UACP8G,OAAQ,QAEV8V,SAAU,CACR7V,MAAO,MACPgB,UAAW,QACX/H,MAAO,QAETwvB,qBAAsB,CACpBxvB,MAAO,UACPD,WAAY,KAEd6iD,WAAY,CACV35C,cAAe,gBAINwmB,GAAyB1wB,YAAW,CAC/CqD,KAAM,CACJ5B,YAAa,EACb4tB,aAAc,oBACdzuB,QAAS,SAEXqJ,MAAO,CACLjC,MAAO,OACP/G,MAAO,aAIE0vB,GAAiB3wB,aAAW,SAAAC,GAAK,MAAK,CACjDoD,KAAM,CACJpC,MAAOhB,EAAMuB,OAAOP,MACpBH,SAAU,IAEZkiB,QAAS,CACP/hB,MAAOhB,EAAMuB,OAAOP,WCgCT6iD,GAnF+B,SAAC,GAOxC,IANLr5C,EAMI,EANJA,MACAR,EAKI,EALJA,MACA4jB,EAII,EAJJA,KACA5qB,EAGI,EAHJA,UACA4I,EAEI,EAFJA,WACAk4C,EACI,EADJA,eAEMxhD,EAAUxC,KACVixB,EAA0BN,KAC1BO,EAAmBN,KAHrB,EAIQnuB,cAALC,EAJH,oBAMJ,IAAKorB,IAASA,EAAK/oB,OAAQ,OAAO,KAQlC,OACE,yBAAK7B,UAAWsG,KAAWhH,EAAQ2X,QAASjX,IAC1C,yBAAKA,UAAWsG,KAAWhH,EAAQ0H,MAAO4B,IAAcpJ,EAAEwH,IAC1D,kBAACknB,GAAA,EAAD,CACEnZ,aAAW,WACX6C,KAAK,WACLyG,KAAG,EACHzc,MAAO4F,EAAM5F,MAAMzB,IAAM,KACzBiJ,SAdkB,SAAAC,GACtB,IAAM8kB,EAAcvD,EAAK/X,MAAK,SAAA/B,GAAI,OAAIA,EAAK3Q,KAAOkJ,EAAEC,OAAO1H,SAE3D4F,EAAM4B,SAAS+kB,IAYXnuB,UAAWV,EAAQo2B,YAElB9K,EAAKjb,KAAI,SAACmB,EAAMjB,GACf,OAAKiB,EAAKw9B,UAER,kBAAC3nB,GAAA,EAAD,CACErnB,QAASyuB,EACTpW,IAAK9H,EACLjO,MAAOkP,EAAK3Q,GACZ0mB,QAAS,kBAACuH,GAAA,EAAD,CAAOpwB,MAAM,UAAUsB,QAAS0uB,IACzChnB,MACE,yBAAKhH,UAAWV,EAAQohD,cACtB,kBAACt6C,EAAA,EAAD,CACE1F,QAAQ,KACRV,UAAWsG,KACThH,EAAQg5B,KADW,eAGhBh5B,EAAQkuB,qBACP1c,EAAK3Q,KAAOqH,EAAM5F,MAAMzB,IAE5B2gD,IAGDhwC,EAAK6J,WAER,kBAACvU,EAAA,EAAD,CACE1F,QAAQ,QACRV,UAAWsG,KAAWhH,EAAQqhD,MAAT,eAClBrhD,EAAQkuB,qBAAuB1c,EAAK3Q,KAAOqH,EAAM5F,MAAMzB,MAGzD2Q,EAAKw9B,UANR,IAMoB9uC,EAAE,eAEtB,kBAAC4G,EAAA,EAAD,CACE1F,QAAQ,QACRpB,QAAS,CAAEc,KAAMd,EAAQsb,WAExB9J,EAAK8J,SAAU,IAChB,0BAAM5a,UAAWV,EAAQshD,YACtBphD,EAAEsR,EAAK+J,aAKhB+L,eAAe,QAzCS,WC9BhCm6B,GAA8B,SAClC3P,EACAC,EACApN,EACA4J,EACAqM,EACAC,GAEA,IAAMgC,EAAe9K,EAAiBrzB,OAChCq8B,EAAgB8B,EAAatX,SAC/BsX,EAAatX,SACb,cACEA,EAAWgJ,EAAW,SAAWwM,EACjCpU,EAAQkW,EAAah8C,GAAK,CAAEA,GAAIg8C,EAAah8C,IAAO,GACpDm6C,EAAe6B,EAAapE,UAC9B,CAAE53C,GAAIg8C,EAAapE,WACnB,GAEAwC,EAAc,OAIlB,OAHIL,IAAaK,EAAc,UAC3BJ,IAAeI,EAAc,UAE1B,aACLyG,gBAAgB,eACX/a,EADU,CAEb6N,WAAY1C,EAASz3B,YAAYxZ,GACjCs3C,eAAgB0E,EAAapsC,UAC7B2nC,cAAeyE,EAAansC,SAC5B4nC,iBAAkBuE,EAAaxE,MAC/BE,WAAYsE,EAAajsC,MACzB20B,SAAUA,EACVuS,QAAQ,eACHkD,EADE,CAELC,YAAaA,EACbL,YAAaA,EACbC,cAAeA,EACfjV,SAAUiX,EAAajX,SACvBuU,WAAYX,GACV1H,EACA+K,EAAa53B,MACb43B,EAAa/W,aACb+W,EAAa1gC,OACb,KACA0gC,EAAa50B,eACb40B,EAAajX,aAGd6U,GAAgBoC,EAAcA,EAAa3K,YAxBjC,GAyBV1J,GAAYqU,GAzBF,GA0BVrW,GAAUqW,EAAcA,EAAajX,UA1B3B,GA2BV4U,GAAUqC,EAAc/K,EAAS/L,WAAY8W,EAAajX,YAE5D+b,GAAyB9E,EAActO,GA9B5C,GA+BKqT,GAAiCjd,KAIlCgd,GAA2B,SAAC9E,EAActO,GAC9C,IAAKsO,EAAa50B,eAAe1lB,OAAQ,MAAO,GAEhD,IAAM0lB,EAAiBsmB,EACnBsO,EAAa50B,eAAerK,QAAO,SAAApM,GAAI,OAAIA,EAAKmd,cAChDkuB,EAAa50B,eAEjB,IAAKA,EAAe1lB,OAAQ,MAAO,GAEnC,IAAMimB,EAAgBP,EAAe,GAC/B0e,EAAQne,EAAc3nB,KAAO0tC,EAAW,CAAE1tC,GAAI2nB,EAAc3nB,IAAO,GACnEm6C,EACJxyB,EAAciwB,YAAclK,EAAW,CAAE1tC,GAAI2nB,EAAciwB,WAAc,GACrEzI,EAAkBzB,EACpB/lB,EAAc3nB,GACd2nB,EAAcA,cAElB,MAAO,CACL0yB,qBAAqB,eAChBvU,EADe,CAElBqJ,gBAAiBA,EACjBzK,SAAUgJ,EAAW,SAAW,cAChCpmB,SAAU9O,KAAOmP,EAAcvD,MAAMrK,WAAW4J,OAAO,cACvD4D,OAAQ/O,KAAOmP,EAAcvD,MAAMpK,SAAS2J,OAAO,cACnDszB,QAAQ,eACHkD,EADE,CAELC,YAAa,OACbrV,SAAUiX,EAAajX,SACvBuU,WAAYN,GACVgD,EAAa50B,eACb40B,EAAajX,aAGdY,GAAUhe,EAAeq0B,EAAajX,UAfvB,GAgBf0U,GAAiB9xB,EAAeq0B,EAAajX,UAhB9B,GAiBf4U,GACDhyB,EACAA,EAAcud,WACd8W,EAAajX,UACb,MAMFgc,GAAmC,SAAAjd,GACvC,OAAKA,GAAgCA,EAA4BpiC,OAI1D,CACLs/C,4BAA6Bld,GAJtB,IC/BIlmB,GAlFE,SAAAC,GAAW,IAAD,EAgDuB,EA/C1CpW,EAAS,GAEf,GAAIoW,EAAOonB,cAAgBpnB,EAAOonB,aAAavjC,OAAQ,CACrD,IAAIssC,EAA0B,GAC1BC,GAAsB,EAE1BpwB,EAAOonB,aAAanN,SAAQ,SAACnnB,EAAMjB,GAC7BiB,EAAKs0B,cAAgB1iC,SAASoO,EAAKs0B,cAAgB,IACrDgJ,GAAsB,GAGxBD,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG9CgJ,IACHxmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAQ,4DAKd,IACG7wB,EAAOw9B,cACRpnB,EAAOonB,cACPpnB,EAAOonB,aAAavjC,OACpB,CACA,IAAMwsC,EAAwBrwB,EAAOE,gBAC/BiwB,EAA0B,GAC5BI,EAAoB,EAExBvwB,EAAOonB,aAAanN,SAAQ,SAACnnB,EAAMjB,GAC7BiB,EAAKs0B,cAAgBt0B,EAAKs0B,aAAavjC,SACzC0sC,GAAqB7rC,SAASoO,EAAKs0B,eAErC+I,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG/CmJ,EAAoBF,IACtBzmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAO,gDAAD,OAA6C4V,KAErDzmC,EAAO+1C,yBAA0B,GA9CZ,qBAkDrB3/B,EAAOmrB,cACL,UAACnrB,EAAOwzB,kBAAR,aAAC,EAAmBt3B,aACtBtS,EAAO2pC,aAAe,6BArDD,qBAwDvBvzB,EAAOmrB,cACNnrB,EAAOuzB,eACP,UAACvzB,EAAOwzB,kBAAR,aAAC,EAAmBt3B,aAAa,OAAC8D,QAAD,IAACA,OAAD,EAACA,EAAQwzB,WAAWr3B,WAEtDvS,EAAO2pC,aAAe,4BACtB3pC,EAAO4pC,WAAa,6BAqBtB,OAlBI50B,GAAWoB,EAAOjO,WAAa,IAAI,KACrCnI,EAAOmI,UAAY,0BAGjB6M,GAAWoB,EAAOhO,UAAY,IAAI,KACpCpI,EAAOoI,SAAW,yBAGhB4M,GAAWoB,EAAO25B,OAAS,IAAI,KACjC/vC,EAAO+vC,MAAQ,qBAGb/6B,GAAWoB,EAAO9N,OAAS,IAAI,GACjCtI,EAAOsI,MAAQ,oBACNwM,GAAQsB,EAAO9N,OAAS,IAAI,KACrCtI,EAAOsI,MAAQ,iBAGVtI,GCgEM9K,GAlJGC,aAAW,SAAAC,GAAK,gBAChCoD,KAAK,aACH4E,QAAS,OACTD,MAAO,OACP+F,UAAW,qBACV9N,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfD,WAAa,WAGjB04C,SAAS,aACPtgD,SAAU,QACVyH,MAAO,QACPrG,UAAW,6BACXf,QAAS,aACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPzH,SAAU,OACVoB,UAAW,OACXf,QAAS,cAGbkgD,UAAU,aACR94C,MAAO,OACPC,QAAS,OACTC,eAAgB,UACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,cAGbmgD,YAAY,aACV/4C,MAAO,QACPpH,QAAS,eACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAIXhH,WAAY,CACVA,WAAY,QAEd8b,YAAa,CACX9b,WAAY,OACZkJ,cAAe,YACfC,cAAe,UACf3B,aAAc,OAEhB2gC,MAAO,CACLhX,eAAgB,UAChBC,iBAAkB,YAClBC,mBAAoB,SACpBrqB,MAAO,OACPD,OAAQ,QACR3H,OAAQ,oBACRD,gBAAiB,UACjBqI,aAAc,QAEhBqpC,SAAU,CACR3wC,OAAQ,UAEVywC,SAAU,CACR1pC,QAAS,OACTE,WAAY,UAEdypC,SAAU,CACR9wC,SAAU,OACVW,YAAa,QAEfoL,SAAU,CACRrE,aAAc,QAEhBsB,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,mBAEV0B,cAAe,CACb5H,SAAU,SAEZwtC,cAAc,aACZ7mC,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAO,CAC7B2kC,YAAa,SAIjBhkB,YAAa,CACX7Y,aAAc,QAEhBw4C,cAAc,aACZh5C,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC9BsH,MAAO,MACPpH,QAAS,cAGZqgD,oBAAoB,aAClBz4C,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAO,IAIjCwgD,eAAe,aACb7xB,aAAc,oBACd/kB,cAAe,OACf9B,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAO,CAC9B2kC,YAAa,SAGhBgV,QAAS,CACP7xC,aAAc,QAGhB24C,aAAc,CACZ34C,aAAc,GAEhB2oC,WAAW,aACTrwC,SAAU,QACTb,EAAMQ,YAAYC,KAAK,MAAO,IAIjCwwC,eAAe,aACblpC,MAAO,sBACN/H,EAAMQ,YAAYC,KAAK,MAAQ,IAIlC0gD,kBAAmB,CACjBz/C,UAAW,kBACXsG,QAAS,qBAlIqB,2CAqI7BhI,EAAMQ,YAAYC,KAAK,MAAO,CAC7B2kC,YAAa,UAtIe,8BAyIjB,CACbr9B,MAAO,OACPq9B,YAAa,SA3IiB,KCizBnBxY,gBAAU,CACvBnmB,KAAM,mBACNomB,kBAAkB,EAClBE,aAAa,EACbhM,YACAiM,cA9uBoB,CACpB9L,gBAAiB,EACjBgnB,SAAU,MACVE,aAAc,GACd3pB,OAAQ,GACRwnB,cAAe,GACf1b,eAAgB,GAChBuwB,IAAK,CACH,kBAAkB,GAEpB3O,aAAc,OA+tBDvf,CAMZjZ,aAnBqB,SAAAtO,GACtB,MAAO,CACLgvC,iBAAkBhvC,EAAMoB,KAAK4tC,iBAC7BhuC,cAAehB,EAAMgB,kBAIE,SAAAuN,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,mBAAoB+F,EAAOvb,QAU5C+O,EA9tBkB,SAAC,GAOf,IANL0gC,EAMI,EANJA,iBACAnC,EAKI,EALJA,qBACAjlB,EAII,EAJJA,aACAspB,EAGI,EAHJA,WACArpB,EAEI,EAFJA,SACA7mB,EACI,EADJA,cAEM/D,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAEMwR,EAFN,KAGI7Q,EAAO01C,cAAP11C,GACF8Q,EAAUC,cACRe,EAAoBC,wBAApBD,gBACF7Q,EAAU+P,IAAMsX,WAAW/mB,GAE3B4Q,EAAmBtB,EAAK7F,SACxBwnB,EACJtvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,GAEhC2zC,EAAazC,EAAiBrzB,OAAO81B,WAErChC,EACJyB,GAAcA,EAAWhC,aACrBgC,EAAWhC,aACXgC,GAAcA,EAAW/B,WACzB+B,EAAW/B,WAAWt3B,UACtBvB,OApBF,EAyBAxH,IAAMrQ,SAAS,IAzBf,mBAuBFmB,EAvBE,KAwBFm/C,EAxBE,OA0BkCjwC,IAAMrQ,SAAS,MA1BjD,mBA0BG+6C,EA1BH,KA0BgBwC,EA1BhB,OA2B0CltC,IAAMrQ,UAAS,GA3BzD,mBA2BGw9C,EA3BH,KA2BqBC,EA3BrB,OA4B4BptC,IAAMrQ,SAAS,MA5B3C,mBA4BG8F,EA5BH,KA4BcuL,EA5Bd,OA6B4BhB,IAAMrQ,SAAS,MA7B3C,mBA6BGswC,EA7BH,KA6Ba4C,EA7Bb,OA8BsD7iC,IAAMrQ,UAC9D,GA/BE,mBA8BG2uC,EA9BH,KA8B0BC,EA9B1B,QAoCAv+B,IAAMrQ,SAAS,IApCf,qBAkCFmzC,GAlCE,MAmCFC,GAnCE,SAqC4C/iC,IAAMrQ,SAAS,IArC3D,qBAqCG09C,GArCH,MAqCqBC,GArCrB,SAyCAttC,IAAMrQ,SAAS,MAzCf,qBAuCF+wC,GAvCE,MAwCFsC,GAxCE,SA2C4BxiC,YAAY6uC,IAArCa,GA3CH,wBA4C4B1vC,YAAY8uC,IAArCa,GA5CH,wBA8CsBxvC,YAASyyB,GAAU,CAC3CqL,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACT6gC,WAAYA,GAAcpxC,SAASvC,GACnCuyB,gBAAiBC,KALbC,GA9CJ,GA8CIA,QAASljB,GA9Cb,GA8CaA,KASXkvC,GAAgBz7B,cAAc,SAACnmB,GAAD,OAAWA,EAAMQ,YAAYC,KAAK,SAChEohD,GAAiB17B,cAAc,SAACnmB,GAAD,OAAWA,EAAMQ,YAAYC,KAAK,SAxDnE,GAyDkC0T,IAAMrQ,SAASk1C,OAAO8I,YAzDxD,qBAyDGC,GAzDH,MAyDgBC,GAzDhB,MA2DJ7tC,IAAM8tC,iBAAgB,WACpB,IAAMC,EAAa,WACjBF,GAAehJ,OAAO8I,aAIxB,OAFA9I,OAAOllB,iBAAiB,SAAUouB,GAClCA,IACO,kBAAMlJ,OAAOjlB,oBAAoB,SAAUmuB,MACjD,IAlEC,OAwEAptC,YAAS0yB,GAAmC,CAC9CoL,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACT6gC,WAAYA,GAAcpxC,SAASvC,GACnCuyB,gBAAiBC,EACjBmd,YAAan3B,KAAOm5B,GACjBztB,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAOm5B,GAAqB1vB,IAAI,EAAG,WAClDkC,MAAM,SACNR,OAAO,iBAdHswB,GArEP,GAqEFxhB,QACMyV,GAtEJ,GAsEF34B,KACS2kC,GAvEP,GAuEFriC,QAgBFb,IAAM+C,WAAU,WACd,GAAKm0B,GAAL,CAEA,IAAMwJ,EAA4BzJ,GAChCC,IAGF8L,GAA6BtC,MAC5B,CAACxJ,KAEJl3B,IAAM+C,WAAU,WACd,GAAIxE,IAAQA,GAAK44B,YAAc54B,GAAK44B,WAAWzmC,OAAQ,CACrD,IAAMyyC,EAAmB5kC,GAAK44B,WAAW,GACnCiM,EAAevN,GAAwBsN,GAE7CC,EAAY,WAAiBD,EAAgB,WAC7CC,EAAY,aAAmBD,EAAgB,aAE/CpF,EAAqB,eAAgBqF,EAAY,cAE7ChB,IACFiB,GAAoCD,GACpClE,GAAgBkE,IAGlB4K,GAA6B7K,GAC7B9D,GAAmB+D,EAAY,YAAgBr2B,iBAE/C81B,EAAYO,GACZjE,GAAUiE,GA7HW,qBA+HjBA,EAAapL,cACfkH,GAAgBkE,MAGnB,CAAC7kC,KAEJyB,IAAM+C,WAAU,WACd,IAAMkxB,EAAeiM,EAAiBrzB,OAAOonB,aACzCA,GAAgBA,EAAavjC,QAC/BwuC,GAAgBe,KAEjB,CAACC,EAAiBrzB,OAAOknB,WAE5B/zB,IAAM+C,WAAU,WACKm9B,EAAiBrzB,OAAOwzB,aAEzCkD,GAA8BtD,GAC9Bf,GAAgBe,MAEjB,CAACA,EAAUS,GAA2BR,EAAiBrzB,OAAOwzB,aAEjErgC,IAAM+C,WAAU,WACOm9B,EAAiBrzB,OAAOuzB,eAG3CiD,GAAoCpD,GACpCf,GAAgBe,MAEjB,CAACC,EAAiBrzB,OAAOuzB,eAE5BpgC,IAAM+C,WAAU,WACd,IAAMyG,EAAY02B,EAAiBrzB,OAAOrD,UAEtCA,GACFu0B,EAAqB,kBAAmBv0B,EAAU2zB,aAEnD,CAAC+C,EAAiBrzB,OAAOrD,YAE5B,IAAMwkC,GAA+B,SAAA7K,GACnC,IAAMqE,EAA4BF,GAChCnE,EAAiBrS,QAEbqP,EAAmBD,EAAiBrzB,OAAOknB,SAEjDuZ,GAAoB9F,GAEfA,EAA0B50B,SAASutB,IACtCpC,EAAqB,WAAYyJ,EAA0B,KAIzDjE,GAAgC,SAAAtD,GACpC,GAAKA,GAAaC,EAAiBrzB,OAAOwzB,WAA1C,CAEA,IAAMt3B,EAAYm3B,EAAiBrzB,OAAOwzB,WAAWt3B,UAC/CC,EAAUk3B,EAAiBrzB,OAAOwzB,WAAWr3B,QAEnD,GAAKD,GAAcC,EAAnB,CAEA,IAAMouB,EAA+BsJ,GACjCA,GAA0BvJ,WAAW,GAAGC,6BACxC,GAEE8F,EAAwBoF,GAC5BlL,EACAruB,EACAC,EACAo5B,GAIA/C,GAD4B,OAA1BnC,EACiBA,EAEA+C,EAASz3B,YAAYuE,oBAItCs2B,GAAsC,SAAApD,GAC1C,GAAKA,EAAL,CAEA,IAAMG,EAAeF,EAAiBrzB,OAAOuzB,aACvChJ,EAA+BsJ,GACjCA,GAA0BvJ,WAAW,GAAGC,6BACxC,GACAsK,EAA6BT,GAC/B7J,EACA6I,EACAC,GAEFwB,EAA6BD,GAC3BxB,EACAyB,EACAtB,GAEF,IAAI4B,EAAoBV,GACtBI,EACAxB,GAGG8B,GAWH3C,GAAmB2C,EAAkB7E,WAErCuE,EAA6BS,GAC3BT,EACAU,EACAlC,EACAQ,MAhBFrB,GAAmBY,EAASz3B,YAAYuE,iBACxCqqB,EAA6B54B,KAAI,SAAAmB,GAC/B,IAAM8jC,EAAqBrD,EACvB54B,KAAO44B,GAAcztB,OAAO,cAC5B,GACChT,EAAK6J,WAAa7J,EAAK4P,OAASk0B,GACnCpE,GAAmB1/B,EAAKu9B,2BAc9B8E,EAAoBV,GAClBI,EACAxB,GAGFnC,EAAqB,YAAaiE,GAClCe,GAA4BrB,KAGxBxC,GAAkB,SAAAe,GACtB,IAAMjM,EAAuBkM,EAAiBrzB,OAAOonB,cAAgB,GAC/DA,EAAeH,GACnBmM,EACAC,EACA3B,EACAD,EACA4B,EAAiBrzB,OAAOknB,SACxBC,GAGF+J,EAAqB,eAAgB9J,IAGjCkL,GAAY,SAAAc,GAChB,IAAMV,EAAiBW,EAAiBrzB,OAAOvC,QAAU,GAEnDk1B,EAAaS,EAAS51B,WAAWC,OAAO9L,KAAI,SAAAmB,GAChD,IAAM8/B,EAAeF,EAAe79B,MAAK,SAAAy4B,GAAK,OAAIA,EAAMnrC,KAAO2Q,EAAK3Q,MACpE,OAAO,eACF2Q,EADL,CAEElP,MAAOgvC,EAAeA,EAAahvC,MAAQ,EAC3CivC,WAAYD,EAAeA,EAAaC,WAAa,UAIzD3B,EAAqB,SAAUyB,IAG3BH,GAAqB,SAAAlC,GACzB,IAAMpwB,EAAkB80B,GACtB1E,EACAiF,EACAlC,EACAQ,IAGF3C,EAAqB,kBAAmBhxB,IAGpCy2B,GAAqB,SAAAj0B,GACzB2zB,GAAwB,CACtBP,WAAYA,GAAcpxC,SAASvC,GACnC2vC,YAAan3B,KAAO+H,GACjB2D,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAO+H,GAAM0B,IAAI,EAAG,WACnCkC,MAAM,SACNR,OAAO,iBAIRs7B,GAAS,WACbjtC,GAAW,GAEX,IAAMzC,EAAOqxC,GACX3P,EACAC,EACApvC,GAGEioB,EACFo3B,GAAsB,CAAEruC,UAAWvD,IAAQwD,MACzC,WAEEjB,EAAgBzS,EAAE,kDAAmD,CACnEkB,QAAS,YAEXuQ,EAAQsE,KAAK,CACXD,SAAU,sBAGd,WACEnD,GAAW,GACXF,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,aAKf2gD,GAAsB,CAAEpuC,UAAWvD,IAAQwD,MACzC,WAEEjB,EAAgBzS,EAAE,yCAA0C,CAC1DkB,QAAS,YAEXuQ,EAAQsE,KAAK,CACXD,SAAU,mBAGd,WACEnD,GAAW,GACXF,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,cAkCb6gD,GAA6B,SAAAz2B,GACjC1pB,EAAQ,CACNlD,MAAO,sCACPyB,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJg8B,EAAqB,iBAAkB,IAEnCpkB,EAAW3qB,IACbihD,EAAgC,GAAD,mBAC1Bn/C,GAD0B,CAE7B6oB,EAAW3qB,SAIhBgpB,OAAM,gBA2DL7B,GAAa,SACjBuqB,GACI,IAAD,MAED,OAAJniC,SAAI,IAAJA,IAAA,UAAAA,GAAM44B,kBAAN,mBAAmB,UAAnB,mBAAuBH,0BAAvB,SAA2C1e,QACzC,SAACC,EAAD,GAAoD,IAA5C2sB,EAA2C,EAA3CA,WAAY9E,EAA+B,EAA/BA,aAClB,IADiD,EAAjBroB,WACf,CACf,IAAMs4B,EAAsBnL,GAAc9E,EAC1C,MAAM,GAAN,mBACK7nB,GADL,YAEKlC,GAAS+pB,EAAciQ,GAAqB7xC,KAAI,SAAA8xC,GAAC,OAAIA,EAAE39B,OAAO,mBAGrE,IAAMykB,EAA+BsJ,EACrCA,EAA0BvJ,WAAW,GAAGC,6BACxC,GACA,OAAO7e,EAAIxM,QAAO,SAAAwkC,GAAU,OAAKnZ,EAA6BxkB,SAAS29B,QAEzE,KAIF,OACE,oCACE,kBAAC,GAAD,MAECtQ,GAAYkN,GACX,kBAAC,GAAD,CACEr/C,KAAMq/C,EACN3rB,QAASA,EACTvzB,SAtF2B,WACjCgC,EAAQ,CACNlD,MAAO,2BACPuB,YAAaD,EAAE,oCACfG,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,kBAAMqrC,GAAkB,MAC7Bp1B,OAAM,gBA+EH9pB,UA/GwB,SAAAyoB,GAC9By2B,GAAkB,GAClBrP,EAAqB,iBAAkB,CAACpnB,KA8GlCqnB,SA5C2B,SAAArnB,GACjCy2B,GAAkB,GAClBrP,EAAqB,iBAAD,YACfmC,EAAiBrzB,OAAOuJ,eAAe5X,KAAI,SAAAmB,GAC5C,OAAIA,EAAKgX,gBAAkBA,EAAcA,cAChCA,EAEFhX,QAsCL4K,0BAA2B01B,EAAS11B,0BACpCwpB,SAAUmM,EAAiBrzB,OAAOknB,SAClClb,cACE6xB,GAAe,CACbzW,aAAc,GACd3pB,OAAQ,GACRwnB,cAAe,MAMvB,kBAAC,GAAD,CACEr8B,UAAWgsB,IAAWwhB,IAAkCxtC,EACxDC,gBAAiBvH,EAAQuH,gBACzB7G,UAAWV,EAAQkH,gBAGpB4qC,GACC,yBAAKpxC,UAAWV,EAAQc,MACtB,yBAAKJ,UAAWV,EAAQs+C,UACtB,kBAACx3C,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQua,cAC/Cra,EAAE,gBADL,KACwB4xC,EAASz3B,YAAYE,aAG7C,yBACE7Z,UAAWV,EAAQ4mC,MACnBp+B,MAAO,CACLopB,gBAAgB,OAAD,OAASkgB,EAASz3B,YAAYG,WAAWrU,MAAzC,OAGhB,IAGH,kBAACW,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQvB,YAExC+tC,GACEx5B,EACA8+B,EAASz3B,YACTy3B,EAAS,0BACTlzC,OAIN,yBAAK8B,UAAWV,EAAQsvC,UACtB,yBAAK5uC,UAAWV,EAAQovC,UACtB,kBAAC,KAAD,CAAwBpvC,QAAS,CAAEc,KAAMd,EAAQqvC,YACjD,kBAACvoC,EAAA,EAAD,CAAY1F,QAAQ,SACjB0wC,EAASz3B,YAAYwE,iBAK5B,kBAAC/X,EAAA,EAAD,CAAY1F,QAAQ,QAAQpB,QAAS,CAAEc,KAAMd,EAAQsK,WAEjDkiC,GACEx5B,EACA8+B,EAASz3B,YACTy3B,EAAS,8BACTxnC,UAIN,kBAAC,GAAD,CACEwnC,SAAUA,EACVlM,SAAUmM,EAAiBrzB,OAAOknB,SAClCrG,iBAAiB,KAIrB,yBAAK7+B,UAAWV,EAAQu+C,WACtB,0BACE7yB,SAtJiB,SAAApmB,GAC3B,GAAIysC,EAAiBoO,WAAY,CAC/B,IAAMA,EAAapO,EAAiBoO,WAC9BC,EAAe1iC,OAAOC,KAAKwiC,GAAY59C,OAEdgwC,IAC/BA,GAA0BvJ,WAAW,GAAGC,6BAA6BrrB,QACrE,SAAApM,GAAI,OAAIA,EAAKoJ,UAAYm3B,EAAiBn3B,aAI1C,GAAIulC,EAAW9B,yBAA4C,IAAjB+B,EAAoB,CAC5D,IACMjT,EADQgT,EAAWra,aAAX,OACWiB,MAAM,KACzBqG,EAAcD,EAAW5qC,OAC/BoQ,EACEzS,EAAE,+CAA2C,CAC3CotC,OAAQH,EAAWC,EAAc,KAEnC,CACEhsC,QAAS,iBAIbuR,EAAgBzS,EAAE,0CAA2C,CAC3DkB,QAAS,YAKfupB,EAAam1B,GAAbn1B,CAAqBrlB,IAyHX5E,UAAWV,EAAQw+C,aAEnB,kBAAC13C,EAAA,EAAD,CACE1F,QAAQ,KACRV,UAAWsG,KAAWhH,EAAQvB,WAAYuB,EAAQ8e,cAEtC5e,EAAX0qB,EAAa,0BAA+B,kBAG/C,kBAACe,GAAA,EAAD,CACErT,KAAK,WACL5X,UAAWsG,KACThH,EAAQy+C,cACRz+C,EAAQ8sC,eAEVxhB,KAAM4zB,GACNx3C,MAAM,kBACNvC,UAAWqzB,KAvkBQ,qBA0kBJsZ,EAASjI,cACR,kBAACle,GAAA,EAAD,CACErT,KAAK,aACL5Q,MAAM,kBAENhH,UAAW4+C,GAAgBt/C,EAAQqiD,cAAgB9C,GAAiBv/C,EAAQsiD,eAAiBtiD,EAAQuiD,SACrGrhC,cAAe4G,GACbyqB,GACA0B,GAAcA,EAAW/B,WACzBJ,GACA3uC,OAAO6kB,IACTlG,qBAAsBuzB,GAGtBjzB,eAAgBq9B,GAAc,KAAO,EAA8B,EACnEl9B,QAASk9B,GAAc,IAAM,GAAK,GAClCz9B,aAAa,YACbC,qBAAqB,wBACrBC,eAAgBliB,EAAQ6+C,kBACxB15C,UAAWozB,GACX5D,WAAYmd,EAASA,EAASjI,cAC9BloB,0BACKsyB,IAAcA,EAAW/B,cA/lB5B,yBAomBrBJ,EAASjI,cACR,kBAACle,GAAA,EAAD,CACErT,KAAK,eACL5Q,MAAM,kBACNma,eAAgB0G,GAAuBupB,GACvC5wB,cAAe4G,GACbyqB,GACA0B,GAAcA,EAAWhC,aACzBH,GACA3uC,OAAO6kB,IACTlG,qBAAsBuzB,GACtBjzB,eAAgB,EAChBG,QAAS,GACTpd,UAAWovB,GACXI,WAAYmd,EAASA,EAASjI,cAC9BloB,0BACKsyB,IAAcA,EAAWhC,gBApnBZ,yBAynBrBH,EAASjI,cACR,kBAACle,GAAA,EAAD,CACErT,KAAK,YACL5Q,MAAM,wBACNhH,UAAWV,EAAQ8sC,cACnBxhB,KAAMqpB,GACNxvC,UAAWo8C,OAIZxP,EAAiBrzB,OAAOonB,aAAavjC,QACtC,kBAACo3B,GAAA,EAAD,CACErhB,KAAK,eACL1Z,MAAM,2BACNuxC,sBAAuBA,EACvBhrC,UAAWooC,OAIZwE,EAAiBrzB,OAAOvC,OAAO5Z,QAChC,kBAACo3B,GAAA,EAAD,CACErhB,KAAK,SACL1Z,MAAM,UACNgnC,SAAUmM,EAAiBrzB,OAAOknB,SAClCzgC,UAAWqpC,GACXG,eAAgB3uC,EAAQ2uC,eACxBC,WAAY5uC,EAAQ4uC,aAIxB,yBAAKluC,UAAWV,EAAQ8sC,eACtB,kBAAChmC,EAAA,EAAD,CACE1F,QAAQ,KACRV,UAAWV,EAAQ0+C,qBAElBx+C,EAAE,mBAEH6xC,EAAiBrzB,OAAOuJ,eAAe1lB,QACvC,kBAAC,GAAD,CACEklB,KAAM,kBAAC,KAAD,MACNpC,KAAMnlB,EAAE,QACRmtB,MAAO,WACL0xB,EAAe,MACfE,GAAkB,QAIrBlN,EAAiBrzB,OAAOuJ,eAAe1lB,QAnU5B,WAC1B,IAAMimB,EAAgBupB,EAAiBrzB,OAAOuJ,eAAe,GAC7D,OACE,kBAAC,GAAD,CACErpB,MACE4tC,GACEx5B,EACAwV,EACAA,EAAa,WACb5pB,MAEJud,OAAQqM,EAAcrM,OACtBwnB,cAAenb,EAAcmb,cAC7Bua,eAAgB,kBAAM+D,GAA2Bz5B,IACjDy1B,aAAc,WACZc,EAAev2B,GACfy2B,GAAkB,MAoTV2B,IAGJ,kBAAC,GAAD,MAEA,yBAAKlgD,UAAWV,EAAQ2+C,gBACtB,kBAAC73C,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQ83C,SACzC53C,EAAE,YAEL,kBAACyrB,GAAA,EAAD,CACErT,KAAK,MACL5X,UAAWV,EAAQ4+C,aACnBvkB,aAAc,CAAC,kBACfuC,kBAAkB,EAClBz3B,UAAWszB,MAIf,kBAAC,GAAD,CACEghB,aAAc1H,EAAiBrzB,OAAOuJ,eACtC6pB,SAAUA,EACV+K,aAAc9K,EAAiBrzB,OAC/Bo+B,oBAAoB,aAGtB,kBAAC,GAAD,CACEhxB,WAAYlB,EAAW,iBAAmB,cAC1CmB,YAAanB,EAAW,SAAW,iBChxBpCptB,GAVGC,YAAW,CAC3B8J,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,mBAEV0B,cAAe,CACb5H,SAAU,WCoEC+R,gBAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EA3DsB,SAAC,GAAuB,IAArBtN,EAAoB,EAApBA,cAChC/D,EAAUxC,KACRqD,EAAO01C,cAAP11C,GACFiB,EAAU+P,IAAMsX,WAAW/mB,GAC3BuP,EAAUC,cAJ0C,EAMzBY,YAAS8jC,GAAkB,CAC1DhG,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACT6uC,kBAAmBp/C,SAASvC,GAC5BuyB,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,MAPlCyyB,EANkD,EAMlDA,QAASrrB,EANyC,EAMzCA,MAAOmI,EANkC,EAMlCA,KAWxB,GAAIkjB,IAAYvvB,EAAcH,sBAAsB41B,eAAe,MACjE,OACE,oCACE,kBAAC,GAAD,MAEA,kBAAC,GAAD,CACElyB,WAAW,EACXC,gBAAiBvH,EAAQuH,gBACzB7G,UAAWV,EAAQkH,iBAM3B,GAAIe,IAAUmI,EAAKkrC,mBAAmB/4C,OAQpC,OAPAT,EAAQ,CACNlD,MAAO,mCACPyB,iBAAkB,SAEjBuT,MAAK,kBAAMjC,EAAQsE,KAAK,oBACxB4T,OAAM,eAEF,yBAAKrhB,MAAO,CAAEhD,OAAQ,SAAW,IAG1C,IAAMyuC,EAAa3gB,EACf,KACAytB,GAA8B3wC,EAAKkrC,mBAAmB,IAE1D,OACE,kBAAC,GAAD,CACE5wB,cAAeupB,EACfA,WAAYA,EACZrpB,UAAU,O,UC5CD63B,GApBQ,SAAC,GAA0B,IAAxBryC,EAAuB,EAAvBA,KAAMsyC,EAAiB,EAAjBA,WAC9B,OACE,kBAAC,KAAD,CAAUj9C,MAAO,IAAKD,OAAQ,KAC5B,kBAAC,KAAD,CACE4K,KAAMA,EACNuyC,GAAI,IACJC,GAAI,IACJC,WAAW,EACXC,YAAa,GACbxzC,KAAK,UACLyzC,QAAQ,SAEP3yC,EAAKC,KAAI,SAACmB,EAAMjB,GAAP,OACR,kBAAC,KAAD,CAAM8H,IAAG,eAAU9H,GAASjB,KAAMozC,EAAWlxC,EAAK8G,c,iECsB7C9a,GApCGC,aAAW,SAAAC,GAAK,MAAK,CACrCslD,YAAa,CACXv9C,MAAO,QACPpH,QAAS,QAEX4kD,YAAa,CACX1kD,SAAU,OACVE,WAAY,QAEdykD,WAAY,CACVjlD,SAAU,mBAEZklD,WAAY,CACV5kD,SAAU,OACVF,QAAS,MACT,qBAAsB,CACpByuB,aAAc,sBAGlBs2B,SAAU,CACR39C,MAAO,SAET49C,SAAU,CACRrlD,SAAU,QAEZslD,mBAAoB,CAClB59C,QAAS,OACTG,cAAe,OAEjByZ,cAAe,CACb/gB,SAAU,OACVgB,IAAK,OACL6G,WAAY,WCkCDm9C,GArDW,SAAC,GAMpB,IALLC,EAKI,EALJA,WACAP,EAII,EAJJA,YACAQ,EAGI,EAHJA,iBACAC,EAEI,EAFJA,SACAC,EACI,EADJA,aAEM3jD,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIJ,OACE,yBAAKQ,UAAWV,EAAQgjD,aACrBC,GACC,kBAACn8C,EAAA,EAAD,CAAYpG,UAAWV,EAAQijD,aAAcA,GAE9CQ,GACC,yBAAK/iD,UAAWV,EAAQsjD,oBACtB,kBAACx8C,EAAA,EAAD,KAAa5G,EAAEujD,IACdC,GACC,kBAAC,GAAD,CAAgBr+B,KAAMnlB,EAAEwjD,IACtB,kBAAC,KAAD,CAAUhjD,UAAWV,EAAQsf,kBAKrC,kBAACskC,GAAA,EAAD,CAAMz+C,UAAU,MAAMzE,UAAWV,EAAQc,KAAM2U,aAAW,YACvD+tC,EAAWnzC,KAAI,SAACmB,EAAMjB,GACrB,OACE,kBAACszC,GAAA,EAAD,CAAUxrC,IAAK9H,EAAO7P,UAAWV,EAAQmjD,YACvC,kBAACW,GAAA,EAAD,CAAcpjD,UAAWV,EAAQqjD,UAChB,WAAd7xC,EAAK8G,MACJ,kBAAC,KAAD,CACE9P,MAAO,CACL8G,KAAMq0C,EAAanyC,EAAK8G,UAKhC,kBAACyrC,GAAA,EAAD,CACErjD,UAAWV,EAAQojD,SACnBxsB,QAAS12B,EAAEsR,EAAKyxC,eAEH,WAAdzxC,EAAK8G,MACJ,kBAACyrC,GAAA,EAAD,CAAcntB,QAAO,UAAKplB,EAAKlP,MAAV,cC3CtB9E,GAbGC,YAAW,CAC3BumD,YAAa,CACXzlD,SAAU,OACVG,MAAO,UACP,YAAa,CACXb,OAAQ,SAGZ69B,iBAAkB,CAChBh2B,QAAS,UCiDEu+C,GAnDQ,SAAC,GAMjB,IALLn6C,EAKI,EALJA,SACAxH,EAII,EAJJA,MACA6T,EAGI,EAHJA,MACA+tC,EAEI,EAFJA,YACAz6C,EACI,EADJA,YAEMzJ,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,sBAGoB2R,IAAMrQ,UAAS,GAHnC,mBAGG7B,EAHH,KAGSwzB,EAHT,KAaJ,OACE,kBAAC4I,GAAA,EAAD,CACEp8B,KAAMA,EACNE,QAXgB,WAClBszB,GAAQ,IAWNK,OARe,WACjBL,GAAQ,IAQN6I,cAAY,EACZ15B,MAAOA,EACPwH,SAAU,SAAA4K,GACR5K,EAAS4K,EAAM1K,OAAO1H,QAExB5B,UAAWsG,KAAWhH,EAAQgkD,YAAaE,IAE1Cz6C,GACC,kBAACoM,GAAA,EAAD,CAAUvT,MAAM,GAAGuG,UAAQ,EAACnI,UAAWV,EAAQ07B,kBAC5Cx7B,EAAEuJ,IAGN0M,EAAM9F,KAAI,SAACmB,EAAMjB,GAChB,OACE,kBAACsF,GAAA,EAAD,CACErN,MAAOgJ,EAAKlP,QAAUA,EAAQ,CAAE1E,gBAAiB,WAAc,GAC/Dya,IAAK9H,EACLjO,MAAOkP,EAAKlP,OAEXpC,EAAEsR,EAAK9J,aClCLy8C,GAfkB,SAAC,GAAoB,IAAlBC,EAAiB,EAAjBA,WAAiB,EACvCnkD,cAALC,EAD4C,oBAGnD,OACE,6BACGkkD,EACE/zC,KAAI,SAAA2b,GACH,MAAM,GAAN,OAAUA,EAAOogB,aAAa5uB,WAA9B,6CACuBtd,EAAE8rB,EAAOnQ,YAAY,GAAGA,iBAEhDoe,KAAK,cCECoqB,GAbM,SAAC,GAAc,IAC5BC,EAD2B,EAAX9yC,KACDu1B,MAAM,MAC3B,OACE,wBAAIv+B,MAAO,CAAE7J,OAAQ,MAClB2lD,EAAQj0C,KAAI,SAACk0C,EAAWh0C,GAAZ,OACX,wBAAI8H,IAAK9H,EAAO/H,MAAO,CAAEnK,QAAS,QAASE,SAAU,SAClDgmD,QCWEC,GAA0B,SAAA3jD,GACrC,MAAO,CAAEoC,KnNfgC,8BmNeGpC,OClBjCrD,GAAYC,aAAW,SAAAC,GAAK,MAAG,CAC1C+mD,yBAA0B,CACxB50C,WAAY,OACZpK,MAAO,QAET7G,MAAO,CACLD,OAAQ,YAEVuJ,MAAM,aACJ2H,WAAY,OACZpK,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGXi/C,SAAS,aACPh/C,QAAS,OACTiyB,SAAU,OACVhyB,eAAgB,gBAChBF,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,aCPPk/C,GAAuB,CAC3B,QACA,SACA,QACA,SACA,WACA,UACA,QACA,SACA,WACA,SAGWC,GAAkB,CAC7B,QACA,WACA,SACA,OACA,SACA,aAyEat6B,gBAAU,CACvBnmB,KAAM,6BACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,cArGoB,CACpBm6B,2BAA4B,KA+Ffv6B,CAMZjZ,aAVqB,SAAAtO,GAAK,MAAK,CAChC+hD,0BAA2B/hD,EAAMoB,KAAK0gD,+BALb,SAAAvzC,GAAQ,MAAK,CACtCyzC,qBAAsB,SAAAlkD,GAAE,OAAIyQ,EAASkzC,GAAwB3jD,QAa5DwQ,EA5EgC,SAAC,GAG7B,IAFL0zC,EAEI,EAFJA,qBACAD,EACI,EADJA,0BAEM9kD,EAAUxC,KAsBhB,OACE,yBAAKkD,UAAWV,EAAQykD,0BACtB,kBAAC39C,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OAA5C,qCAGA,kBAAC+6B,GAAA,EAAD,CACErhB,KAAK,6BACLnT,UAAWy0B,GACXC,oBAAoB,EACpB/W,IA7Be,SAACiX,EAAQl5B,GAC5Bk5B,EAAO9jB,KAAK,CACVpV,GAAIA,EACJmkD,oBAAqB,GACrBjjB,SAAU,MA0BR7O,OAtBkB,SAAA1hB,GAClBA,EAAKwyB,WAAW+gB,EAAqBvzC,EAAK3Q,KAsB1Co9B,UAnBqB,WAEvB6mB,EAA0BpmC,OAAOmmC,2BACxBx0C,KAAI,SAAAmB,GACTA,EAAKwyB,WAAW+gB,EAAqBvzC,EAAK3Q,QAgB5Cm5B,SAAU,SAAAxoB,GAAI,OAAIA,EAAKwzC,qBACvBzjD,SAAU,SAAAsc,GAAK,OACb,yBAAKnd,UAAWV,EAAQ0kD,UACtB,kBAAC/4B,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,wBACJnd,UAAWV,EAAQkI,MACnBojB,KAAMq5B,GACNj9C,MAAM,8BACNvC,UAAWqzB,KAEb,kBAAC7M,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,aACJnd,UAAWV,EAAQkI,MACnBojB,KAAMs5B,GACNl9C,MAAM,yBACNvC,UAAWqzB,cCzFZh7B,GAAYC,aAAW,SAAAC,GAAK,MAAI,CAC3CwK,MAAM,aACJ2H,WAAY,OACZpK,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGXw/C,aAAc,CACZx/C,MAAO,QAETi/C,SAAS,aACPh/C,QAAS,OACTiyB,SAAU,OACVhyB,eAAgB,gBAChBF,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGXy/C,YAAa,CACXz/C,MAAO,YC4CI0/C,GAzDiB,SAAC,GAAoC,IAAlCtnC,EAAiC,EAAjCA,MAAOla,EAA0B,EAA1BA,oBAClC3D,EAAUxC,KAEhB,OACE,yBAAKkD,UAAWV,EAAQ0kD,UvNLH,cuNMlB/gD,GACC,yBAAKjD,UAAWV,EAAQklD,aACtB,kBAACv5B,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,iBACJnd,UAAWV,EAAQilD,aACnBx7C,YAAY,gBACZ/B,MAAM,kBACNvC,UAAW8D,KAEb,yBAAKvI,UAAWV,EAAQ0kD,UACtB,kBAAC/4B,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,gBACJnd,UAAWV,EAAQkI,MACnBuB,YAAY,gBACZ/B,MAAM,kBACNvC,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,oBACJnd,UAAWV,EAAQkI,MACnBuB,YAAY,oBACZ/B,MAAM,sBACNvC,UAAW8D,QvN3BF,YuNgCftF,GvN/Be,YuN+BoBA,IACnC,yBAAKjD,UAAWV,EAAQ0kD,UACtB,kBAAC/4B,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,aACJnd,UAAWV,EAAQkI,MACnBuB,YAAY,WACZ/B,MAAM,aACNvC,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,aACJnd,UAAWV,EAAQkI,MACnBuB,YAAY,WACZ/B,MAAM,aACNzE,KAAM,WACNkC,UAAW8D,MvNhDE,cuNqDlBtF,GAAqC,kBAAC,GAAD,Q,UCX7B8a,GAjDE,SAAAC,GACf,IAAMpW,EAAS,GAEf,GAAIoW,EAAOnC,cAAgBmC,EAAOnC,aAAaha,OAAQ,CACrD,IAAMga,EAAemC,EAAOnC,aACtB8oB,EAA0B,GAEhC9oB,EAAaoc,SAAQ,SAACnnB,EAAMjB,GAC1B,IAAM+0B,EAAqB,GACM,cAA7B9zB,EAAK7N,sBACH2Z,GAAW9L,EAAKyzC,cAAc,KAChC3f,EAAkB,aAAmB,4BACrCD,EAAwB90B,GAAS+0B,GAE/BhoB,GAAW9L,EAAK4zC,aAAe,IAAI,KACrC9f,EAAkB,YAAkB,wBACpCD,EAAwB90B,GAAS+0B,GAE/BhoB,GAAW9L,EAAK6zC,iBAAmB,IAAI,KACzC/f,EAAkB,gBAAsB,4BACxCD,EAAwB90B,GAAS+0B,IAIN,YAA7B9zB,EAAK7N,qBACwB,YAA7B6N,EAAK7N,sBAED2Z,GAAW9L,EAAK8zC,UAAU,KAC5BhgB,EAAkB,SAAe,uBACjCD,EAAwB90B,GAAS+0B,GAE/BhoB,GAAW9L,EAAK+zC,UAAY,IAAI,KAClCjgB,EAAkB,SAAe,uBACjCD,EAAwB90B,GAAS+0B,OAInCD,EAAwB9iC,SAC1B+F,EAAOiU,aAAe8oB,EACtB/8B,EAAOiU,aAAP,eACK8oB,EADL,CAEElM,OAAO,eAAMkM,MAKnB,OAAO/8B,GC9CI9K,GAAYC,aAAW,SAAAC,GAAK,MAAG,CAC1Cia,QAAS,CACPhZ,OAAQ,UAEVC,MAAM,aACJD,OAAQ,YACPjB,EAAMQ,YAAYC,KAAK,MAAO,CAC7BwH,eAAgB,SAChBD,QAAS,SAGbqZ,IAAI,aACFrZ,QAAS,OACTG,cAAe,SACfF,eAAgB,gBAChBF,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OACPC,QAAS,OACTG,cAAe,WAGnBqC,MAAM,aACJH,cAAe,OACftC,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OACPC,QAAS,aCFTyU,GAAY,CAAC,YAAa,UAAW,WAuI5BmQ,gBAAU,CACvBnmB,KAAM,0BACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,cAjJoB,CACpBnO,aAAc,KA0ID+N,CAOZjZ,aAdqB,SAAAtO,GAAK,MAAK,CAChCyiD,wBAAyBziD,EAAMoB,KAAKqhD,wBACpCX,2BAA4B9hD,EAAMoB,KAAK0gD,2BACvCY,QAASA,aAAQ,0BAARA,CAAmC1iD,GAC5C2iD,sBAAuBD,aAAQ,6BAARA,CAAsC1iD,OAVpC,SAAAuO,GAAQ,MAAK,CACtCq0C,sBAAuB,SAAC9kD,EAAI2Q,GAAL,OACrBF,EP5IqC,SAACzQ,EAAI8C,GAC5C,MAAO,CAAEV,KnNVgC,8BmNUGpC,KAAI8C,uBO2IrCiiD,CAA0B/kD,EAAI2Q,KACzCuzC,qBAAsB,SAAAlkD,GAAE,OAAIyQ,EAASkzC,GAAwB3jD,QAiB5DwQ,EA5IkB,SAAC,GAQf,IAPLsZ,EAOI,EAPJA,aACAg7B,EAMI,EANJA,sBACAZ,EAKI,EALJA,qBACAS,EAII,EAJJA,wBACAX,EAGI,EAHJA,2BACAY,EAEI,EAFJA,QACAC,EACI,EADJA,sBAEM1lD,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIEqc,EAAeipC,EAAwB9mC,OAAOnC,aAE9CspC,EAAmC,SAAAt1C,GACvC,IAAMu1C,EAAmBN,EAAwB9mC,OAAOnC,aAAalM,KACnE,SAAAmB,GAAI,OAAIA,EAAK7N,uBAEToiD,EACJP,EAAwB9mC,OAAOnC,aAAahM,GAAO5M,oBAErD,OAAIoiD,EACI,CACJA,GADF,mBAEK5rC,GAAUyD,QAAO,SAAAuN,GAAC,OAAK26B,EAAiBrhC,SAAS0G,QAEjDhR,GAAUyD,QAAO,SAAAuN,GAAC,OAAK26B,EAAiBrhC,SAAS0G,OAUpD66B,EAAoC,WAEtCnB,EAA2BnmC,OAAOmmC,2BACzBx0C,KAAI,SAAAmB,GACTA,EAAKwyB,WAAW+gB,EAAqBvzC,EAAK3Q,QAiB5ColD,EAAqB,SAAAxnB,GACzB,OAAOA,GAAYA,EAAS59B,IAAM,GAGpC,OACE,yBAAKH,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,iBAEL,0BAAMwrB,SAAUf,GACd,kBAACgP,GAAA,EAAD,CACErhB,KAAK,eACLnT,UAAWy0B,GACXC,oBAAoB,EACpB/W,IA1Ca,SAACiX,EAAQl5B,GAC5Bk5B,EAAO9jB,KAAK,CACVpV,GAAIA,EACJ8C,oBAAqB,MAwCjBuvB,OA5BgB,SAAA1hB,GACtBm0C,EAAsBn0C,EAAK3Q,GAAI2Q,EAAK7N,qBACpCqiD,KA2BM/nB,UAxBmB,WACzB,IAAM/O,EAAcs2B,EAAwB9mC,OAAOnC,aAAa,GAC5D2S,EAAYruB,KACd8kD,EAAsBz2B,EAAYruB,GAAIquB,EAAYvrB,qBAClDqiD,MAqBI9nB,qBAAsB3hB,EAAaha,QAAU4X,GAAU5X,OACvDy3B,SAAU,SAAAxoB,GAAI,OAAIA,EAAK7N,qBACvBw2B,QAAQ,cACRC,WAAW,mBACX74B,SAAU,SAACsc,EAAOtN,EAAO7G,EAAM+0B,GAArB,OACR,yBAAK/9B,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,wBACJnd,UAAWV,EAAQkI,MACnBojB,KAAMu6B,EAAiCt1C,GACvC7I,MAAM,yBACN+B,YAAY,8BACZZ,SAAUo9C,EAAmBxnB,GAC7Bt5B,UAAWqzB,K1N3GF,c0N6GViG,EAAS96B,qBACR,kBAAC,GAAD,CACEka,MAAOA,EACPla,oBAAoB,c1N/Gf,Y0NkHR86B,EAAS96B,qBACR,kBAAC,GAAD,CACEka,MAAOA,EACPla,oBAAoB,Y1NpHf,Y0NuHR86B,EAAS96B,qBACR,kBAAC,GAAD,CACEka,MAAOA,EACPla,oBAAoB,gBAM9B,kBAAC,GAAD,CACEqrB,kBAAmBy2B,IAAYC,EAC/B55B,WAAW,YACXC,YAAY,eC3ITvuB,GAAYC,aAAW,SAAAC,GAAK,MAAI,CAC3CwK,MAAM,aACJ2H,WAAY,OACZpK,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGXi/C,SAAS,aACPh/C,QAAS,OACTC,eAAgB,gBAChBF,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPI,cAAe,eCTfqgD,GAAwB,CAC5BC,OAAQ,CACN,CACE7tC,KAAM,WACN7O,YAAa,YACb/B,MAAO,eAET,CACE4Q,KAAM,eACN7O,YAAa,gBACb/B,MAAO,oBAGX0+C,OAAQ,CACN,CACE9tC,KAAM,iBACN7O,YAAa,kBACb/B,MAAO,qBAET,CACE4Q,KAAM,YACN7O,YAAa,eACb/B,MAAO,iBAGX2+C,aAAc,CACZ,CACE/tC,KAAM,0BACN1Z,MAAO,oBA6CE0nD,GAzCa,SAAC,GAA0C,IAAxCzoC,EAAuC,EAAvCA,MAASna,EAA8B,EAA9BA,cAAeknB,EAAe,EAAfA,SAC/C5qB,EAAUxC,KAChB,OACE,yBAAKkD,UAAWV,EAAQ0kD,UACrBhhD,GACmB,iBAAlBA,GACAwiD,GAAsBxiD,GAAe2M,KACnC,SAACk2C,EAAsBh2C,GACrB,IAAMi2C,EAA4C,cAA9BD,EAAqBjuC,KACzC,OACE,kBAACqT,GAAA,EAAD,CACEtT,IAAK9H,EACL+H,KAAI,UAAKuF,EAAL,YAAc0oC,EAAqBjuC,MACvC5X,UAAWV,EAAQkI,MACnBuB,YAAa88C,EAAqB98C,YAClC/B,MAAO6+C,EAAqB7+C,MAC5BvC,UAAW8D,GACXJ,SAAW+hB,GAAY47B,OAKhC9iD,GACmB,iBAAlBA,GACAwiD,GAAsBxiD,GAAe2M,KACnC,SAACk2C,EAAsBh2C,GACrB,OACE,kBAACob,GAAA,EAAD,CACEtT,IAAK9H,EACL+H,KAAI,UAAKuF,EAAL,YAAc0oC,EAAqBjuC,MACvC5Q,MAAO6+C,EAAqB3nD,MAC5B0sB,KAAM,CAAC,MAAO,MACdnmB,UAAW0mB,UC1BZpN,GA5CC,SAACC,GACf,IAAMpW,EAAS,GAEf,GAAIoW,EAAOq5B,UAAYr5B,EAAOq5B,SAASx1C,OAAQ,CAC7C,IAAMw1C,EAAWr5B,EAAOq5B,SAClB0O,EAAsB,GAE5B1O,EAASpf,SAAQ,SAACnnB,EAAMjB,GACtB,IAAMm2C,EAAiB,GACjB97B,EAAWpZ,EAAKwyB,UACK,WAAvBxyB,EAAK9N,eACH4Z,GAAW9L,EAAKm1C,UAAU,KAC5BD,EAAc,SAAe,wBAC7BD,EAAoBl2C,GAASm2C,GAG3BppC,GAAW9L,EAAKo1C,cAAgB,IAAI,KACtCF,EAAc,aAAmB,4BACjCD,EAAoBl2C,GAASm2C,IAEC,WAAvBl1C,EAAK9N,gBACV4Z,GAAW9L,EAAKq1C,gBAAgB,KAClCH,EAAc,eAAqB,8BACnCD,EAAoBl2C,GAASm2C,IAGzB97B,GAAYtN,GAAW9L,EAAKs1C,WAAa,IAAI,KACjDJ,EAAc,UAAgB,2BAC9BD,EAAoBl2C,GAASm2C,OAI/BD,EAAoBlkD,SACtB+F,EAAOyvC,SAAW0O,EAClBn+C,EAAOyvC,SAAP,eACK0O,EADL,CAEEttB,OAAO,eAAMstB,MAKnB,OAAOn+C,GCzCI9K,GAAYC,aAAW,SAACC,GAAD,MAAY,CAC9Cia,QAAQ,aACNhZ,OAAQ,UACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,SACR8G,MAAO,SAGX7G,MAAM,aACJD,OAAQ,YACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsI,UAAW,WAIfsY,IAAI,aACFrZ,QAAS,OACTG,cAAe,SACfF,eAAgB,gBAChBF,MAAO,QACN/H,EAAMQ,YAAY6oD,GAAG,MAAQ,CAC5BlhD,cAAe,SACfJ,MAAO,SAGXyC,MAAM,aACJxC,QAAQ,OACRqC,cAAe,OACftC,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B4J,cAAe,OACflC,cAAe,SACfJ,MAAO,aCoGE6kB,gBAAU,CACvBnmB,KAAM,eACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,cAnHoB,CACpBqtB,SAAU,KA4GGztB,CAOZjZ,aAZqB,SAAAtO,GAAK,MAAK,CAChCikD,aAAcjkD,EAAMoB,KAAK6iD,aACzBvB,QAASA,aAAQ,eAARA,CAAwB1iD,OANR,SAAAuO,GAAQ,MAAK,CACtC21C,kBAAmB,SAACpmD,EAAI2Q,GAAL,OAAcF,EZvHF,SAACzQ,EAAI6C,GACpC,MAAO,CAAET,KnNPwB,sBmNOGpC,KAAI6C,iBYsHEujD,CAAkBpmD,EAAI2Q,QAe/DH,EAhHc,SAAC,GAMX,IALLsZ,EAKI,EALJA,aACAs8B,EAII,EAJJA,kBACAD,EAGI,EAHJA,aACAvB,EAEI,EAFJA,QACA76B,EACI,EADJA,SAEM5qB,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIE63C,EAAWiP,EAAatoC,OAAOq5B,SAC/BmP,EAA6B,SAAA32C,GACjC,IAAM42C,EAAkBH,EAAatoC,OAAOq5B,SAAS1nC,KACnD,SAAAmB,GAAI,OAAIA,EAAK9N,iBAET0jD,EAAiBJ,EAAatoC,OAAOq5B,SAASxnC,GAAO7M,cAC3D,OAAI0jD,EACI,CACJA,GADF,mBAEK/jD,EAA0Bua,QAAO,SAAAuN,GAAC,OAAKg8B,EAAgB1iC,SAAS0G,QAEhE9nB,EAA0Bua,QAAO,SAAAuN,GAAC,OAAKg8B,EAAgB1iC,SAAS0G,OAazE,OACE,yBAAKzqB,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,aAEL,0BAAMwrB,SAAUf,GACd,kBAACgP,GAAA,EAAD,CACErhB,KAAK,WACLnT,UAAWy0B,GACXuE,kBAAkB,oGAClBhE,QAAQ,UACRC,WAAW,eACXP,oBAAoB,EACpBjP,SAAUA,EACVsT,qBACE6Z,EAASx1C,QAAUc,EAA0Bd,OAE/CugB,IA5Ba,SAACiX,EAAQl5B,GAC5Bk5B,EAAO9jB,KAAK,CACVpV,GAAIA,EACJ6C,cAAe,MA0BXwvB,OAtBgB,SAAA1hB,GAClBA,EAAKwyB,WAAWijB,EAAkBz1C,EAAK3Q,GAAI2Q,EAAK9N,gBAsB9Cs2B,SAAU,SAAAxoB,GAAI,OAAIA,EAAK9N,eACvBm6B,gBAAiB,SAAArsB,GAAI,OAClBA,EAAK9N,e/N9EY,mB+N8EK8N,EAAK9N,cAExB,CACE9E,MAAO,wBACPo/B,K/NhFW,W+NiFTxsB,EAAK9N,cACD,sBACA,uBANR,MASNnC,SAAU,SAACsc,EAAOtN,EAAO7G,EAAM+0B,GAArB,OACR,yBAAK/9B,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,kBACJnd,UAAWV,EAAQkI,MACnBojB,KAAM47B,EAA2B32C,GACjC7I,MAAM,mBACN+B,YAAY,wBACZtE,UAAWqzB,K/N/FG,W+NiGfiG,EAAS/6B,eACR,kBAAC,GAAD,CAAqBma,MAAOA,EAAOna,cAAc,W/NjGpC,W+NmGd+6B,EAAS/6B,eACR,kBAAC,GAAD,CAAqBma,MAAOA,EAAOna,cAAc,SAChDknB,SAAU6T,EAAS/6B,eAAkB+6B,EAASuF,gBAMvD,kBAAC,GAAD,CACEhV,kBAAmBy2B,EACnB35B,WAAW,YACXC,YAAY,eCpHTvuB,GAAYC,aAAW,SAAAC,GAAK,MAAG,CAC1Cia,QAAQ,aACNlS,MAAO,OACPsC,cAAe,OACf9B,aAAc,OACd6mB,aAAc,qBACbpvB,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,QAGX21B,WAAY,CACV31B,MAAO,OACPD,OAAQ,OACRnH,QAAS,IACTK,MAAO,OACP,UAAW,CACTd,gBAAiB,YAGrB8J,MAAO,CACLzB,aAAc,EACdvH,MAAO,UACPiJ,cAAe,YACfpJ,SAAU,GACVC,WAAY,OACZoJ,cAAe,WAEjBC,UAAW,CACTpC,MAAO,OACP5H,OAAQ,oBACRE,aAAc,MACdW,MAAO,UACPH,SAAU,OACV,UAAW,CACTV,OAAQ,sBAGZ29B,SAAU,CACR39B,OAAQ,oBACRQ,QAAS,IACTL,SAAU,QACVoB,UAAW,iCACXrB,aAAc,OAEhB09B,aAAc,CACZ/8B,MAAO,UACP,UAAW,CACTA,MAAO,YAGXuJ,MAAO,CACL7I,UAAW,OACXvB,OAAQ,oBACR,UAAW,CACTA,OAAQ,sBAGZwpD,MAAO,CACL3hD,QAAS,OACTiyB,SAAU,QAEZ2vB,KAAM,CACJ5oD,MAAO,UACPd,gBAAiB,UACjBG,aAAc,MACdY,OAAQ,GAEVszB,eAAgB,CACdxsB,MAAO,OACPD,OAAQ,OACR9G,MAAO,YCuBI6oD,GAhFK,SAAC,GAQd,IAPLr/C,EAOI,EAPJA,MACAgB,EAMI,EANJA,iBACAoiB,EAKI,EALJA,KACAzN,EAII,EAJJA,MACAnd,EAGI,EAHJA,UACAgH,EAEI,EAFJA,MAEI,IADJgC,KAAQC,EACJ,EADIA,QAAS1B,EACb,EADaA,MAAO2B,EACpB,EADoBA,aAElB5J,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIJ,OACE,yBAAKQ,UAAWsG,KAAWhH,EAAQ2X,QAASjX,IACzCgH,GACC,kBAACiB,GAAA,EAAD,CACEjI,UAAWV,EAAQ0H,MACnBkB,QAAO,UAAKlB,EAAL,mBACP1H,QAAS,CACP6I,SAAU7I,EAAQoI,gBAGnBV,GAGL,kBAACq0B,GAAA,EAAD,CACE1J,UAAQ,EACR/vB,MAAO4F,EAAM5F,MACbwH,SAAU5B,EAAM4B,SAChB9J,QAAS,CACPc,KAAMd,EAAQo7B,YAEhBosB,YAAa,SAAA1xC,GAAQ,OACnB,yBAAKpV,UAAWV,EAAQqnD,OACrBvxC,EAASzF,KAAI,SAAA/N,GAAK,OACjB,kBAACowB,GAAA,EAAD,CACEra,IAAK/V,EACLmlD,YAAa,SAAA19C,GAAC,OAAIA,EAAEojB,mBACpBzlB,MAAOpF,EACP5B,UAAWV,EAAQsnD,KACnBI,SAAU,kBACRx/C,EAAM4B,SAAS5B,EAAM5F,MAAMsb,QAAO,SAAApM,GAAI,OAAIA,IAASlP,OAErD2tB,WAAY,kBAAC,KAAD,CAAWvvB,UAAWV,EAAQiyB,wBAKlDgK,UAAW,CACTj8B,QAAS,CACPsrB,KAAMtrB,EAAQw7B,WAGlBtzB,MACE,kBAACY,GAAA,EAAD,CACE9I,QAAS,CACPc,KAAMkG,KAAWhH,EAAQ6H,UAAT,eACb7H,EAAQiI,OAAS0B,GAAWC,IAAiB3B,QAMrDqjB,EAAKjb,KAAI,SAACmB,EAAMjB,GAAP,OACR,kBAACsF,GAAA,EAAD,CACEwC,IAAK9H,EACLjO,MAAOub,EAAQrM,EAAI,GAASA,EAC5BxR,QAAS,CAAEc,KAAMd,EAAQy7B,eAExB5d,EAAQrM,EAAKqM,GAASrM,QAI3BtI,IAAqBS,GAAWC,IAAiB3B,GACjD,kBAACe,GAAA,EAAD,CAAgBf,OAAK,GAAE/H,EAAE+H,M,UCjDlBzK,GAtCGC,YAAW,CAC3B+hB,oBAAqB,CACnB/Z,MAAO,QACPD,OAAQ,QACRY,WAAY,QAEdqZ,aAAc,CACZngB,SAAU,WACVmG,MAAO,QACPD,OAAQ,QACRzH,aAAc,MACdH,gBAAiB,WAEnByB,SAAU,CACRC,SAAU,WACVC,IAAK,QACLC,MAAO,QACPjB,SAAU,OACVF,QAAS,QAEXoB,UAAW,CACTlB,SAAU,OACVG,MAAO,QAETipD,mBAAoB,CAClBxgD,OAAQ,IACR5H,IAAK,QACL6gB,KAAM,OACNxiB,gBAAiB,OACjB0B,SAAU,YAEZihB,kBAAmB,CACjBjhB,SAAU,WACV6H,OAAQ,EACRxI,OAAQ,kBCgBG8tB,GA3CW,SAAC,GAIpB,IAHLvkB,EAGI,EAHJA,MACArI,EAEI,EAFJA,QAEI,IADJ6J,KAAQC,EACJ,EADIA,QAAS1B,EACb,EADaA,MAAO2B,EACpB,EADoBA,aAElB5J,EAAUxC,KAEVoqD,EAAYhoB,iBAAO,MAKnBioB,EAAqB,SAACnzC,GACtBkzC,EAAUr2B,UAAYq2B,EAAUr2B,QAAQu2B,SAASpzC,EAAM1K,SACzDnK,GAAQ,IAWZ,OAPA+U,qBAAU,WAER,OADAmzC,SAASv2B,iBAAiB,YAAaq2B,GAChC,WACLE,SAASt2B,oBAAoB,YAAao2B,MAE3C,IAGD,yBAAKnnD,UAAWV,EAAQ2nD,mBAAmBj2B,IAAKk2B,GAC9C,kBAACnnD,EAAA,EAAD,CAAYC,UAAWV,EAAQX,SAAUsB,QAAS,kBAAMd,GAAQ,KAC9D,kBAAC,IAAD,CAAkBa,UAAWV,EAAQP,aAEvC,kBAAC,gBAAD,CACEf,MAAOwJ,EAAM5F,MACbwH,SAAU,SAAApL,GAAK,OAxBC,SAAAA,GACpBwJ,EAAM4B,SAASpL,GAuBQspD,CAActpD,EAAMupD,SAEvCt+C,GAAWC,IAAiB3B,GAC5B,kBAACe,GAAA,EAAD,CAAgBtI,UAAWV,EAAQugB,kBAAmBtY,OAAK,GACxDA,K,qBCxBIzK,GAnBGC,YAAW,CAC3BqD,KAAM,CACJxB,SAAU,WACVmG,MAAO,OACPD,OAAQ,OACRE,QAAS,OACTE,WAAY,SACZD,eAAgB,UAElBuiD,IAAK,CACHzhD,UAAW,UAEb4e,KAAM,CACJ3mB,MAAO,UACPK,UAAW,OACXd,SAAU,WCUCkqD,GAlBU,WACvB,IAAMnoD,EAAUxC,KADa,EAEjByC,cAALC,EAFsB,oBAI7B,OACE,yBAAKQ,UAAWV,EAAQc,MACtB,yBAAKJ,UAAWV,EAAQkoD,KACtB,yBAAKvhD,IAAKyhD,KAAevhD,IAAI,mBAC7B,kBAACC,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQqlB,MAC5CnlB,EACC,yE,WCZCmoD,GAAe,SAAAlsC,GAC1B,OAAsB,IAAlBA,EAAO5Z,OACF4Z,EACJ9L,KAAI,SAAA27B,GACH,MAAM,GAAN,OAAUA,EAAMwL,WAAhB,cAAgCxL,EAAMA,MAAM,GAAGptC,UAEhDq7B,KAAK,YAEH,UAcIquB,GAAiB,SAAAlE,GAC5B,IACE,OAAOA,EACJ/zC,KAAI,SAAA2b,GAAM,OAAIA,EAAOogB,gBACrBjiB,QACC,SAACo+B,EAAWC,GAAZ,OAAmCD,EAAYC,KAEnD,SACA,OAAO,IAIEC,GAA2B,SAACrE,EAAYlkD,GACnD,MAAM,GAAN,OAAUkkD,EACP/zC,KAAI,SAAA2b,GACH,MAAM,GAAN,OAAUA,EAAOogB,aAAa5uB,WAA9B,6CAC2Btd,EAAE8rB,EAAOnQ,YAAY,GAAGA,iBAEpDoe,KAAK,cAGGyuB,GAAkC,SAAAC,GAC7C,MAAM,GAAN,OAAUA,EAAQxgC,SAAlB,aAA+B9O,KAC7BsvC,EAAQngC,cAAc0f,YACtB,cACA1jB,OAAO,SAHT,cAGuBmkC,EAAQvgC,OAH/B,aAG0C/O,KACxCsvC,EAAQngC,cAAc4f,aACtB,cACA5jB,OAAO,WA0BEokC,GAAoB,SAAAxE,GAC/B,IACE,MAAoD,KAA7CA,EAAW,GAAGvoC,YAAY,GAAGA,YACpC,SACA,OAAO,IAIEgtC,GAA8B,SAACz4C,EAAM04C,GAAe,IAAD,IAC9D,GAAK14C,GAASsN,OAAOC,KAAKvN,GAAM7N,OAAhC,CAIA,IAAMwmD,EAAY,CAChBhwC,MAAO,EACP6sB,SAAQ,OAAEx1B,QAAF,IAAEA,OAAF,YAAEA,EAAM2nC,SAAS,UAAjB,uBAAE,EAAmBnS,gBAArB,aAAE,EAA6BA,SACvC3iC,KAAM,WACNrE,MAAOwR,EAAK0hC,SAASlzC,MACrBoqD,YAAa,GACbC,YAAa,GACbC,mBAAoB,GACpBC,gBAAiB,IAiEnB,GA9DA/4C,EAAKsoC,aAAa/f,SAAQ,SAAAqT,GACxB,IAAMod,EAAapd,EAAMmO,WAAanO,EAAMwL,WAC5CuR,EAAUE,YAAYhzC,KAAK,CACzBrX,MAAOotC,EAAMA,MAAM,GAAGptC,MACtByqD,MAAOrd,EAAMwL,WACbz+B,MAAOizB,EAAMmO,WACbiP,WAAYA,EAAWtP,QAAQ,KAEjCiP,EAAUhwC,OAASizB,EAAMmO,cAc3B/pC,EAAK4b,OAAO2M,SAAQ,SAAA2wB,GAIlB,GAFiC,qBAA/Bl5C,EAAK0hC,SAASjI,cAEaz5B,EAAK2mC,WAAY,CAC5C,IAAM7E,EAAa,CACjBt3B,UAAWvB,KAAOjJ,EAAK6hC,aAAc,cACrCp3B,QAASxB,KAAOjJ,EAAK2mC,WAAY,eAE7BwS,EAAmBjQ,GACvBpH,EACAoX,EAAMnP,YAEFqP,EAA2B7c,GAAkB4c,GAC7CE,EACyB,oBAA7Br5C,EAAK0hC,SAAS/L,WACVujB,EAAMnP,WACNmP,EAAMnP,WAAamP,EAAMld,aAC/B2c,EAAUC,YAAY/yC,KAAK,CACzB4F,YAAaytC,EAAMztC,YAAY,GAAGA,YAClCwtC,MAAOC,EAAMld,aACbrzB,MAAOywC,EACPC,WAAYA,EAAW3P,QAAQ,KAEjCiP,EAAUhwC,OAASwwC,MACd,CACL,IAAME,EACyB,oBAA7Br5C,EAAK0hC,SAAS/L,WACVujB,EAAMnP,WACNmP,EAAMnP,WAAamP,EAAMld,aAC/B2c,EAAUC,YAAY/yC,KAAK,CACzB4F,YAAaytC,EAAMztC,YAAY,GAAGA,YAClCwtC,MAAOC,EAAMld,aACbrzB,MAAOuwC,EAAMnP,WACbsP,WAAYA,EAAW3P,QAAQ,KAEjCiP,EAAUhwC,OAASuwC,EAAMnP,eAK3B/pC,EAAK6wC,6BACL7wC,EAAK6wC,4BAA4B1+C,UAC/B6N,EAAKwZ,YAAcxZ,EAAKs5C,oBAC1B,CACA,IAAMC,EAAcv5C,EAAK6wC,4BAA4B,GAChD0I,EAAY//B,aAAc+/B,EAAYD,oBACzCX,EAAUI,gBAAgBlzC,KACxB2zC,GAAiCD,GAAa,IAGlDZ,EAAUI,gBAAgBxwB,SAAQ,SAAAgwB,GAChCI,EAAUhwC,OAAS4vC,EAAQ5vC,SAM/B,OAFK+vC,IAAWC,EAAUhwC,MAAQgwC,EAAUhwC,MAAM+gC,QAAQ,IAEnDiP,IAaIa,GAAmC,SAACx5C,EAAM04C,GAAe,IAAD,MACnE,GAAK14C,GAASsN,OAAOC,KAAKvN,GAAM7N,OAAhC,CAGA,IAAMqY,EAAYvB,KAAOjJ,EAAK+X,SAAU,cAClCtN,EAAUxB,KAAOjJ,EAAKgY,OAAQ,cAC9ByhC,EAAezmD,SAASyX,EAAQsK,KAAKvK,EAAW,SAEhDmuC,EAAY,CAChBhwC,MAAO,EACPna,MAAOwR,EAAKoY,cAAc5pB,MAC1BirD,aAAcA,EACd5mD,KAAM,gBACN2iC,SAAQ,OAAEx1B,QAAF,IAAEA,OAAF,YAAEA,EAAM2nC,SAAS,UAAjB,uBAAE,EAAmBnS,gBAArB,aAAE,EAA6BA,SACvCojB,YAAa,GACbC,YAAa,GACbC,mBAAmB,GACnBC,gBAAiB,IA4DnB,OAzDA/4C,EAAKsoC,aAAa/f,SAAQ,SAAAqT,GACxB,IAAMod,EAAapd,EAAMmO,WAAanO,EAAMwL,WAC5CuR,EAAUE,YAAYhzC,KAAK,CACzBrX,MAAOotC,EAAMA,MAAM,GAAGptC,MACtByqD,MAAOrd,EAAMwL,WACbz+B,MAAOizB,EAAMmO,WACbiP,WAAYA,EAAWtP,QAAQ,KAEjCiP,EAAUhwC,OAASizB,EAAMmO,cAG3B,UAAA/pC,EAAKuoC,2BAAL,SAA0BhgB,SAAQ,SAAAsT,GAChC,IAAM6d,EAAoB7d,EAAakO,WAAalO,EAAa0L,kBACjEoR,EAAUG,mBAAmBjzC,KAAK,CAChCrX,MAAOqtC,EAAaA,aAAa,GAAGrtC,MACpCyqD,MAAOpd,EAAa0L,kBACpB5+B,MAAOkzB,EAAakO,WACpB2P,kBAAmBA,EAAkBhQ,QAAQ,KAE/CiP,EAAUhwC,OAASkzB,EAAakO,cAGlC/pC,EAAK4b,OAAO2M,SAAQ,SAAA2wB,GAClB,IAAMG,EArDa,SAAC9mB,EAAQ2mB,EAAOO,EAAc9wC,GACnD,OAAI4pB,GAAUA,EAAOpgC,QAAUogC,EAAO,GAAG3b,IAChCsiC,EAAMnP,WACJmP,EAAMztC,YAAY,GAAGA,aAAeytC,EAAMnP,WAC5CmP,EAAMnP,YAAcmP,EAAMld,aAAeyd,IAExCP,EAAMnP,YAAcphC,GAAS8wC,EA+ClBE,CACjB35C,EAAKoY,cAAcma,OACnB2mB,EACAO,EACAd,EAAUhwC,OAEZgwC,EAAUC,YAAY/yC,KAAK,CACzB4F,YAAaytC,EAAMztC,YAAY,GAAGA,YAClCwtC,MAAOC,EAAMld,aACbrzB,MAAOuwC,EAAMnP,YAAc4O,EAAUhwC,MACrC0wC,WAAYA,EAAW3P,QAAQ,KAEjCiP,EAAUhwC,OAASuwC,EAAMnP,YAAc4O,EAAUhwC,SAIjD3I,EAAKyoC,2BACLzoC,EAAKyoC,0BAA0Bt2C,UAC7B6N,EAAKwZ,YAAcxZ,EAAKs5C,sBAE1Bt5C,EAAKyoC,0BAA0BlgB,SAAQ,SAAAgwB,GAChCA,EAAQ/+B,aAAc++B,EAAQe,oBACjCX,EAAUI,gBAAgBlzC,KACxB4yC,GAA4BF,GAAS,OAI3CI,EAAUI,gBAAgBxwB,SAAQ,SAAAgwB,GAChCI,EAAUhwC,OAAS4vC,EAAQ5vC,UAI1B+vC,IAAWC,EAAUhwC,MAAQgwC,EAAUhwC,MAAM+gC,QAAQ,IAEnDiP,ICxNMvrD,GA3DGC,YAAW,CAC3ByhC,MAAO,CACLrhC,OAAQ,OACRQ,QAAS,YAEX4+B,QAAS,CACPx+B,WAAY,QAEdurD,SAAU,CACRtrD,MAAO,UACPH,SAAU,OACVsR,WAAY,MACZpR,WAAY,UACZquB,aAAc,QAEhB6Q,iBAAkB,CAChBt/B,QAAS,EACTqH,QAAS,SAEXukD,aAAc,CACZjsD,SAAU,QACV0H,QAAS,OACTE,WAAY,UAEdskD,UAAW,CACT7rD,QAAS,WACTI,WAAY,QAEd0rD,iBAAkB,CAChB3rD,WAAY,OACZD,SAAU,OACVE,WAAY,OACZkJ,cAAe,aAEjBoR,MAAO,CACLta,WAAY,OACZF,SAAU,QAEZ6rD,eAAgB,CACd1kD,QAAS,OACT1H,SAAU,QACV6R,WAAY,QAEdw6C,oBAAqB,CACnBvnB,YAAa,OACbjzB,WAAY,OACZnK,QAAS,OACTE,WAAY,YAEd0kD,UAAW,CACT5kD,QAAS,OACTE,WAAY,YAEdggC,SAAU,CACR7mC,UAAW,MACXR,SAAU,UC5CRgsD,GAAe,SAAC,GAA0C,IAAxCN,EAAuC,EAAvCA,aAAcjqD,EAAyB,EAAzBA,QAAS8oD,EAAgB,EAAhBA,UAAgB,EACjD7oD,cAALC,EADsD,oBAG7D,OACE,kBAAC++B,GAAA,EAAD,CAAkBj/B,QAAS,CAAEc,KAAMd,EAAQ29B,mBACxCmrB,GAAmC,aAAtBmB,EAAahnD,MACzB,yBAAKvC,UAAWV,EAAQgf,QACtB,kBAACwrC,GAAA,EAAD,CAAe9pD,UAAWV,EAAQmqD,kBAC/BjqD,EAAE,eAEL,kBAAC4G,EAAA,EAAD,CAAYpG,UAAWV,EAAQkqD,WAC5BD,EAAarrD,QAInBkqD,GAAmC,kBAAtBmB,EAAahnD,MACzB,yBAAKvC,UAAWV,EAAQgf,QACtB,kBAACwrC,GAAA,EAAD,CAAe9pD,UAAWV,EAAQmqD,kBAC/BjqD,EAAE,kBAEL,kBAAC4G,EAAA,EAAD,CAAYpG,UAAWV,EAAQkqD,WAC5BD,EAAarrD,QAInBqrD,EAAajB,aACZiB,EAAajB,YAAY34C,KAAI,SAACi5C,EAAO/4C,GACnC,OACE,kBAACszC,GAAA,EAAD,CAAUxrC,IAAK9H,EAAO7P,UAAWV,EAAQgqD,UACvC,yBAAKtpD,UAAWV,EAAQiqD,cACtB,kBAACnjD,EAAA,EAAD,CAAYpG,UAAWV,EAAQ4lC,UAC5BqkB,EAAarkB,UAEhB,kBAAC9+B,EAAA,EAAD,CAAY0B,MAAO,CAAE/J,WAAY,OAAQJ,QAAS,YAAlD,UACMirD,EAAMG,aAEXH,GAASA,EAAMztC,aACd,kBAAC/U,EAAA,EAAD,UACKwiD,EAAMD,MADX,IACmBnpD,EAAEopD,EAAMztC,cAG5BytC,GAA+B,KAAtBA,EAAMztC,aACd,kBAAC/U,EAAA,EAAD,UACKwiD,EAAMD,MAAO,IAChB,0BAAM7gD,MAAO,CAAEb,cAAe,cAC3BzH,EAAE,YAIR+pD,EAAaJ,cACZ,kBAAC/iD,EAAA,EAAD,CAAY0B,MAAO,CAAEs6B,YAAa,QAAlC,KACKmnB,EAAaJ,aAAc,IAC7BI,EAAaJ,aAAe,EAAI3pD,EAAE,UAAYA,EAAE,WAIvD,kBAAC4G,EAAA,EAAD,CACEpG,UAAWV,EAAQ4lC,SACnBp9B,MAAO,CAAEs6B,YAAa,SAErBmnB,EAAarkB,UAEhB,kBAAC9+B,EAAA,EAAD,CAAY0B,MAAO,CAAEs6B,YAAa,MAAOrkC,WAAY,SAClD6qD,EAAMvwC,WAKoB,IAApCkxC,EAAahB,YAAY1mD,QACxB,kBAACioD,GAAA,EAAD,CAAe9pD,UAAWV,EAAQmqD,kBAC/BjqD,EAAE,YAG8B,IAApC+pD,EAAahB,YAAY1mD,QACxB0nD,EAAahB,YAAY54C,KAAI,SAAC27B,EAAOz7B,GACnC,OACE,kBAACszC,GAAA,EAAD,CAAUxrC,IAAK9H,EAAO7P,UAAWV,EAAQgqD,UACvC,yBAAKtpD,UAAWV,EAAQiqD,cACtB,kBAACnjD,EAAA,EAAD,CAAYpG,UAAWV,EAAQ4lC,UAC5BqkB,EAAarkB,UAEhB,kBAAC9+B,EAAA,EAAD,CACEpG,UAAWV,EAAQ+Y,MACnBvQ,MAAO,CAAEnK,QAAS,YAFpB,UAIM2tC,EAAMod,aAEZ,kBAACtiD,EAAA,EAAD,UACKklC,EAAMqd,MADX,IACmBrd,EAAMptC,QAG3B,kBAACkI,EAAA,EAAD,CACEpG,UAAWV,EAAQ4lC,SACnBp9B,MAAO,CAAEs6B,YAAa,SAErBmnB,EAAarkB,UAEhB,kBAAC9+B,EAAA,EAAD,CACEpG,UAAWV,EAAQ+Y,MACnBvQ,MAAO,CAAEs6B,YAAa,QAErBkJ,EAAMjzB,WAMtBkxC,GAAgB3gC,MAAMC,QAAQ0gC,EAAaf,qBAAkE,IAA3Ce,EAAaf,mBAAmB3mD,QAC3F,kBAACioD,GAAA,EAAD,CAAe9pD,UAAWV,EAAQmqD,kBAC/BjqD,EAAE,mBAGqC,IAA3C+pD,EAAaf,mBAAmB3mD,QAC/B0nD,EAAaf,mBAAmB74C,KAAI,SAAC47B,EAAc17B,GACjD,OACE,kBAACszC,GAAA,EAAD,CAAUxrC,IAAK9H,EAAO7P,UAAWV,EAAQgqD,UACvC,yBAAKtpD,UAAWV,EAAQiqD,cACtB,kBAACnjD,EAAA,EAAD,CAAYpG,UAAWV,EAAQ4lC,UAC5BqkB,EAAarkB,UAEhB,kBAAC9+B,EAAA,EAAD,CACEpG,UAAWV,EAAQ+Y,MACnBvQ,MAAO,CAAEnK,QAAS,aAGpB,kBAACyI,EAAA,EAAD,KACEmlC,EAAartC,QAGjB,kBAACkI,EAAA,EAAD,CACEpG,UAAWV,EAAQ4lC,SACnBp9B,MAAO,CAAEs6B,YAAa,SAErBmnB,EAAarkB,UAEhB,kBAAC9+B,EAAA,EAAD,CACEpG,UAAWV,EAAQ+Y,MACnBvQ,MAAO,CAAEs6B,YAAa,QAErBmJ,EAAalzB,aAsFf0xC,GA7EkB,SAAC,GAAsB,IAApBR,EAAmB,EAAnBA,aAC5BjqD,EAAUxC,KADqC,EAEzCyC,cAALC,EAF8C,sBAGrB2R,IAAMrQ,UAAS,GAHM,mBAG9C48B,EAH8C,KAGpCC,EAHoC,KAK/C8qB,EACJc,EAAad,iBACbc,EAAapR,2BACb,GAEF,OACE,yBAAKn4C,UAAWV,EAAQc,MACtB,kBAAC49B,GAAA,EAAD,CACEgsB,UAAW,EACXtsB,SAAUA,EACVt0B,SAAU,SAAC4K,EAAOiqB,GAAR,OAAuBN,EAAYM,KAE7C,kBAACG,GAAA,EAAD,CACEC,WAAY,kBAAC,KAAD,MACZ/+B,QAAS,CAAEc,KAAMd,EAAQk/B,OACzBF,gBAAc,kBACdn+B,GAAG,kBAEH,yBAAKH,UAAWV,EAAQgf,QACtB,kBAAClY,EAAA,EAAD,CAAYpG,UAAWV,EAAQi9B,SAC5B/8B,EAAE,qBAEHk+B,GACA,yBAAK19B,UAAWV,EAAQsqD,WACtB,kBAACxjD,EAAA,EAAD,CAAYpG,UAAWV,EAAQ4lC,UAC5BqkB,EAAarkB,UAEhB,kBAAC9+B,EAAA,EAAD,CACE0B,MAAO,CAAEs6B,YAAa,OACtBpiC,UAAWV,EAAQ+Y,OAElBkxC,EAAalxC,UAMxB,kBAAC,GAAD,CAAckxC,aAAcA,EAAcjqD,QAASA,IAClDmpD,GACCA,EAAgB94C,KAAI,SAACs4C,EAASp4C,GAC5B,OACE,kBAAC,GAAD,CACE8H,IAAK9H,EACL05C,aAActB,EACd3oD,QAASA,EACT8oD,WAAW,OAInB,kBAACjF,GAAA,EAAD,CACEr7C,MAAO,CAAE5K,gBAAiB,UAAWiS,WAAY,GACjDnP,UAAWV,EAAQgqD,UAEnB,yBAAKtpD,UAAWV,EAAQoqD,gBACtB,kBAACtjD,EAAA,EAAD,CAAYpG,UAAWV,EAAQ+Y,OAAQ7Y,EAAE,WAE3C,yBAAKQ,UAAWV,EAAQqqD,qBACtB,kBAACvjD,EAAA,EAAD,CAAYpG,UAAWV,EAAQ4lC,UAC5BqkB,EAAarkB,UAEhB,kBAAC9+B,EAAA,EAAD,CACE0B,MAAO,CAAEs6B,YAAa,OACtBpiC,UAAWV,EAAQ+Y,OAElBkxC,EAAalxC,YCxIbvb,GA5FGC,YAAW,CAC3BE,MAAO,CACLC,gBAAiB,OACjBC,OAAQ,oBACRC,UAAW,aACXC,aAAc,MACd0H,MAAO,QACPgG,UAAW,SAEb3K,KAAM,CACJzC,QAAS,OAEXisD,UAAW,CACT5rD,MAAO,UACPH,SAAU,OACVe,SAAU,WACVd,WAAY,OACZqR,WAAY,MACZpR,WAAY,QAEdurD,SAAU,CACRtrD,MAAO,UACPH,SAAU,OACVsR,WAAY,MACZpR,WAAY,UACZ,qBAAsB,CACpBquB,aAAc,sBAGlBo9B,UAAW,CACT7rD,QAAS,eACTqH,QAAS,OACTE,WAAY,SACZpH,WAAY,OACZD,SAAU,QAEZK,MAAO,CACLJ,WAAY,OACZD,SAAU,OACVE,WAAY,OACZJ,QAAS,kBAEXssD,SAAU,CACRv7C,aAAc,QAEhB/P,SAAU,CACRC,SAAU,WACVC,IAAK,EACLC,MAAO,EACPnB,QAAS,QAEXW,cAAe,CACbnB,OAAQ,oBACRE,aAAc,MACdQ,SAAU,OACVC,WAAY,OACZC,WAAY,IACZC,MAAO,UACPL,QAAS,WACTL,SAAU,OACVkB,YAAa,OACb,qBAAsB,CACpBA,YAAa,SAGjBC,cAAe,CACbC,UAAW,OACXvB,OAAQ,oBACRE,aAAc,MACdH,gBAAiB,UACjBc,MAAO,UACPH,SAAU,OACVC,WAAY,OACZC,WAAY,IACZJ,QAAS,WACTL,SAAU,OACV,UAAW,CACTJ,gBAAiB,UACjBc,MAAO,YAGXe,UAAW,CACTlB,SAAU,OACVG,MAAO,QAETG,YAAa,CACXE,UAAW,OACXD,UAAW,oBACX6G,eAAgB,aAChBm9B,YAAa,UCiCF8nB,GAlGqB,SAAC,GAM9B,IALLjrD,EAKI,EALJA,KACAgpD,EAII,EAJJA,QACA9oD,EAGI,EAHJA,QACAkZ,EAEI,EAFJA,MACAjZ,EACI,EADJA,SAEME,EAAUxC,KACVmU,EAAUC,cAFZ,EAGQ3R,cAALC,EAHH,oBAKJ,OAAoC,IAAhCwd,OAAOC,KAAKgrC,GAASpmD,OAChB,KAGP,kBAAC/B,EAAA,EAAD,CAAQb,KAAMA,EAAMK,QAAS,CAAErC,MAAOqC,EAAQrC,QAC5C,kBAAC8C,EAAA,EAAD,CAAYC,UAAWV,EAAQX,SAAUsB,QAASd,GAChD,kBAAC,IAAD,CAAkBa,UAAWV,EAAQP,aAEvC,kBAACmB,EAAA,EAAD,CACEC,GAAG,qBACHb,QAAS,CAAEc,KAAMd,EAAQpB,OACzBmC,mBAAmB,GAElB4nD,EAAQkC,gBALX,WAK+BlC,EAAQxQ,eAAgB,IACpDwQ,EAAQvQ,eAEX,kBAACx3C,EAAA,EAAD,CACEC,GAAG,qBACHb,QAAS,CAAEc,KAAMd,EAAQkqD,WACzBnpD,mBAAmB,GAElB4nD,EAAQngC,cAAc5pB,OAEzB,kBAACoC,EAAA,EAAD,CAAehB,QAAS,CAAEc,KAAMd,EAAQ5B,cACtC,kBAACwlD,GAAA,EAAD,CAAMljD,UAAWV,EAAQc,MACvB,kBAAC0pD,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,qBAEL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAC1B1B,GAAeK,EAAQ38B,QACvB48B,GAAkBD,EAAQ38B,SACzB,oCACG,IADH,IAEG,kBAAC,GAAD,CAA0Bo4B,WAAYuE,EAAQ38B,SAFjD,MAMJ,kBAACw+B,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,uBAEL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAC1BtB,GAAgCC,IAGnC,kBAAC6B,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,aAEL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAAWrB,EAAQpjB,WAC9CojB,EAAQ/+B,YAAc7Q,GACtB,kBAAC+xC,GAAD,CAA0Bb,aAAclxC,MAI9C,kBAAC7X,EAAA,EAAD,CAAelB,QAAS,CAAEc,KAAMd,EAAQnB,cACtC,kBAACsC,EAAA,EAAD,CACEC,QAAQ,YACRpB,QAAS,CAAEc,KAAMd,EAAQb,eACzBwB,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFxb,EAAQsE,KAAR,mCAAyC0yC,EAAQ9nD,GAAjD,YAGDX,EAAE,SAEL,kBAACiB,EAAA,EAAD,CACEC,QAAQ,WACRT,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFttB,IACAC,EAAS6oD,IAEX3oD,QAAS,CAAEc,KAAMd,EAAQhB,gBAExBkB,EAAE,yBAEL,kBAACiB,EAAA,EAAD,CACEC,QAAQ,WACRT,QAASd,EACTG,QAAS,CAAEc,KAAMd,EAAQhB,gBAExBkB,EAAE,Y,08CCnHN,IAAM6qD,GAA0Bx+C,KAAH,MAQvBy+C,GAA+Bz+C,KAAH,MAQ5B0+C,GAA0B1+C,KAAH,MAQvB2+C,GAA+B3+C,KAAH,MAQ5B4+C,GAA8B5+C,KAAH,MAQ3B6+C,GAAyB7+C,KAAH,MC0FpB/O,GAlIGC,aAAW,SAAAC,GAAK,MAAG,CACnCC,MAAO,CACLC,gBAAiB,OACjBC,OAAQ,oBACRC,UAAW,aACXC,aAAc,MACd0H,MAAO,QACPgG,UAAW,SAEb3K,KAAM,CACJzC,QAAS,OAEXisD,UAAW,CACT5rD,MAAO,UACPH,SAAU,OACVe,SAAU,WACVd,WAAY,OACZqR,WAAY,MACZpR,WAAY,QAEdurD,SAAU,CACRtrD,MAAO,UACPH,SAAU,OACVsR,WAAY,MACZ9H,cAAe,OACftJ,WAAY,UACZ,qBAAsB,CACpBquB,aAAc,sBAGlBu+B,iBAAkB,CAChBv+B,aAAc,OACdvuB,SAAU,OACVsR,WAAY,MACZ,eAAgB,CACdid,aAAc,sBAGlBoqB,gBAAiB,CACfzxC,MAAO,QACP2J,aAAc,QAEhB86C,UAAW,CACT7rD,QAAS,eACTqH,QAAS,OACTE,WAAY,SACZpH,WAAY,OACZD,SAAU,QAEZK,MAAO,CACLJ,WAAY,OACZD,SAAU,OACVE,WAAY,OACZJ,QAAS,kBAEXssD,SAAU,CACRv7C,aAAc,QAEhB/P,SAAU,CACRC,SAAU,WACVC,IAAK,EACLC,MAAO,EACPnB,QAAS,QAEXW,cAAc,aACZnB,OAAQ,oBACRE,aAAc,MACdQ,SAAU,OACVC,WAAY,OACZC,WAAY,IACZC,MAAO,UACPL,QAAS,WACTL,SAAU,OACVW,OAAQ,GACPjB,EAAMQ,YAAYC,KAAK,MAAO,CAC7BY,UAAW,OACXf,SAAU,UAGdmB,cAAc,aACZC,UAAW,OACXvB,OAAQ,oBACRE,aAAc,MACdH,gBAAiB,UACjBc,MAAO,UACPH,SAAU,OACVC,WAAY,OACZC,WAAY,IACZJ,QAAS,WACTL,SAAU,OACV,UAAW,CACTJ,gBAAiB,UACjBc,MAAO,YAEPhB,EAAMQ,YAAYC,KAAK,MAAO,CAC9BY,UAAW,SAGfU,UAAW,CACTlB,SAAU,OACVG,MAAO,QAETG,YAAY,aACV6G,QAAS,OACT3G,UAAW,OACXD,UAAW,oBACX6G,eAAgB,gBAChBtH,QAAS,YACRX,EAAMQ,YAAYC,KAAK,MAAO,CAC9B0H,cAAe,SACdD,WAAY,SACZvH,QAAS,WACTU,UAAW,SAGfusD,oBAAqB,CACnB3lD,eAAgB,YAElB4lD,WAAY,CACV38C,OAAQ,UACRrQ,SAAU,QAEZguB,SAAU,CACRrtB,YAAa,OAEfssD,eAAgB,CACd9lD,QAAS,OACTU,WAAY,YCiEDqlD,GAtKkB,SAAC,GAM3B,IALL9rD,EAKI,EALJA,KACAmyC,EAII,EAJJA,SACAjyC,EAGI,EAHJA,QACAC,EAEI,EAFJA,SACA4rD,EACI,EADJA,WAEM1rD,EAAUxC,KACVmU,EAAUC,cAFZ,EAGQ3R,cAALC,EAHH,oBAIE4B,EAAU+P,IAAMsX,WAAW/mB,GACzBuQ,EAAoBC,wBAApBD,gBALJ,EAO4BN,YAAY04C,IAArCY,EAPH,oBASEpjB,EAAWuJ,EAASvJ,SACpBqjB,EAAmB9Z,EAAS8Z,kBAAoB9Z,EAAShM,aACzD+lB,EAAW/Z,EAASga,cAAgB,CACxClxC,UAAWk3B,EAASG,aACpB52B,UAAWktB,GAAYA,EAASltB,UAChCC,SAAUitB,GAAYA,EAASjtB,SAC/BC,SAAUgtB,GAAYA,EAAShtB,UAGjC,GAAqC,IAAjCmC,OAAOC,KAAKm0B,GAAUvvC,OACxB,OAAO,KAkBT,OACE,kBAAC/B,EAAA,EAAD,CAAQb,KAAMA,EAAMK,QAAS,CAAErC,MAAOqC,EAAQrC,QAC5C,kBAAC8C,EAAA,EAAD,CAAYC,UAAWV,EAAQX,SAAUsB,QAASd,GAChD,kBAAC,IAAD,CAAkBa,UAAWV,EAAQP,aAEvC,kBAACmB,EAAA,EAAD,CACEC,GAAG,qBACHb,QAAS,CAAEc,KAAMd,EAAQpB,OACzBmC,mBAAmB,GAElB+wC,EAASv3B,YALZ,WAK4Bu3B,EAASlzC,OAErC,kBAACoC,EAAA,EAAD,CAAehB,QAAS,CAAEc,KAAMd,EAAQ5B,cACtC,kBAACwlD,GAAA,EAAD,CAAMljD,UAAWV,EAAQc,MACvB,kBAAC0pD,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,kBAEL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAC1BlY,EAASrQ,OAASvhC,EAAE,QAAUA,EAAE,YAEnC,kBAACsqD,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,iBAEL,kBAAC0jD,GAAA,EAAD,KACGgI,GACCA,EAAiBv7C,KAAI,SAACs4C,EAASp4C,GAC7B,OACE,kBAACszC,GAAA,EAAD,CAAUxrC,IAAK9H,EAAO7P,UAAWV,EAAQqrD,kBACvC,kBAACvkD,EAAA,EAAD,CAAYpG,UAAWV,EAAQk3C,iBAC5ByR,EAAQxQ,eADX,IAC4BwQ,EAAQvQ,eAEpC,kBAACtxC,EAAA,EAAD,CAAYpG,UAAWV,EAAQk3C,iBAC5ByR,EAAQpjB,UAEX,kBAACz+B,EAAA,EAAD,KAAawhD,GAAeK,EAAQ38B,SACpC,yBAAKtrB,UAAWV,EAAQwrD,gBACtB,kBAAC,KAAD,CACE7qD,QAAS,kBACPgR,EAAQsE,KAAR,+BAC0B0yC,EAAQ9nD,GADlC,WAIFH,UAAWsG,KACThH,EAAQurD,WACRvrD,EAAQusB,YAGZ,kBAAC,IAAD,CACE5rB,QAAS,kBA/DKE,EA+D6B8nD,EAAQ9nD,QA9DvEiB,EAAQ,CACNlD,MAAM,kBACNyB,iBAAkB,iBAClBC,iBAAkB,SACjBsT,MAAK,WACN+3C,EAAsB,CAAEh4C,UAAW,CAAEo4C,IAAK,CAAC3oD,SAASvC,OAAU+S,MAAK,WACjEjB,EAAgBzS,EAAE,+CAAgD,CAChEkB,QAAS,YAEXvB,GAAQ,SAVsB,IAAAgB,GAgEdH,UAAWV,EAAQurD,mBAM7BK,GAC6B,IAA5BA,EAAiBrpD,QAChB,kBAACshD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQqrD,kBAA7B,WAGN,kBAACb,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,eAEL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAC1B6B,EAASjxC,UAAT,UAAwBixC,EAASjxC,WAAc,SAC/CixC,EAASxwC,UAAT,YAA0BwwC,EAASxwC,WAAc,IAEpD,kBAACmvC,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,aAEL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAC1B6B,EAASvwC,SAAWuwC,EAASvwC,SAAW,SAD3C,IACiDuwC,EAAStwC,YAI9D,kBAACra,EAAA,EAAD,CACElB,QAAS,CACPc,KAAMkG,KAAWhH,EAAQnB,YAAT,eACbmB,EAAQsrD,oBAAsBI,OAIjCA,GACA,6BACE,kBAACvqD,EAAA,EAAD,CACEC,QAAQ,YACRpB,QAAS,CAAEc,KAAMd,EAAQb,eACzBwB,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFxb,EAAQsE,KAAR,sBAEI67B,EAASA,SAAWA,EAASA,SAASjxC,GAAKixC,EAASjxC,OAKzDX,EAAE,SAEL,kBAACiB,EAAA,EAAD,CACEC,QAAQ,WACRT,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFrtB,EAASgyC,IAEXtpC,MAAO,CAAEpC,WAAY,OACrBpG,QAAS,CAAEc,KAAMd,EAAQhB,gBAExBkB,EAAE,2BAIT,kBAACiB,EAAA,EAAD,CACEC,QAAQ,WACRT,QAASd,EACTG,QAAS,CAAEc,KAAMd,EAAQhB,gBAExBkB,EAAE,YCxJEue,GA/BE,SAAAC,GACf,IAAMpW,EAAS,GA2Bf,OAzBIgV,GAAWoB,EAAOjO,WAAa,IAAI,KACrCnI,EAAOmI,UAAY,0BAGjB6M,GAAWoB,EAAOhO,UAAY,IAAI,KACpCpI,EAAOoI,SAAW,yBAGhB4M,GAAWoB,EAAO9N,OAAS,IAAI,GACjCtI,EAAOsI,MAAQ,oBACNwM,GAAQsB,EAAO9N,MAAO,2BAC/BtI,EAAOsI,MAAQ,yBAGb0M,GAAWoB,EAAO7N,aAAe,IAAI,KACvCvI,EAAOuI,YAAc,qBAEnByM,GAAWoB,EAAO/N,aAAe,IAAI,GACvCrI,EAAOqI,YAAc,2BAEpBmN,GAAcY,EAAO/N,YAzBM,GAyBgC,KAE5DrI,EAAOqI,YAAc,sDAGhBrI,GCiEM9K,GA/FGC,aAAW,SAAAC,GAAK,MAAI,CACpCC,MAAM,aACJC,gBAAiB,OACjBC,OAAQ,oBACRC,UAAW,aACXC,aAAc,MACd0H,MAAO,QACPgG,UAAW,SACV/N,EAAMQ,YAAYC,KAAK,MAAQ,IAKlCsB,UAAW,CACTlB,SAAU,OACVG,MAAO,QAETW,SAAU,CACRC,SAAU,WACVC,IAAK,EACLC,MAAO,EACPnB,QAAS,QAEXO,MAAO,CACLL,SAAU,OACVwJ,cAAe,OACf1J,QAAS,iBACTI,WAAY,QAEdyJ,MAAM,aACJzC,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPsC,cAAe,SAInBm9C,YAAa,CACX7mD,QAAS,YAEX2tD,YAAa,CACXjtD,UAAW,OACX8Q,WAAY,OACZ9H,cAAe,OACfjJ,UAAW,qBAEbmtD,aAAa,aACXvmD,QAAS,OACTqC,cAAe,OACfpC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAO,CAC7B0H,cAAc,SACdkC,cAAe,MAGnBmkD,aAAc,CACZxmD,QAAS,OACTnH,SAAU,OACVsH,cAAe,OAEjBsmD,kBAAmB,CACjBtmD,cAAe,cACf8B,cAAe,YACfvB,WAAY,MACZ1H,MAAO,UACPF,WAAY,OACZyH,aAAc,MACd2B,cAAe,UACfrJ,SAAU,QAEZugB,YAAa,CACX/W,cAAe,QAEjBqkD,SAAU,CACRztD,OAAQ,gBAEVwgB,SAAU,CACR7f,SAAU,WACVf,SAAU,OACVgB,IAAK,OACL6G,WAAY,OAEdimD,eAAgB,CACdxuD,OAAQ,oBACRE,aAAc,MACdQ,SAAU,OACVC,WAAY,OACZC,WAAY,IACZC,MAAO,UACPL,QAAS,WACTL,SAAU,OACVkB,YAAa,YC0FForB,gBAAU,CACvBnmB,KAAM,oBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,cApKoB,CACpBja,UAAW,GACXC,SAAU,GACVG,YAAa,GACbF,YAAa,GACbG,gBAAiB,GACjBF,MAAO,GACPG,SAAU,IA8JV0N,aANa6L,CAOZjZ,YAAQ,KAARA,EArJuB,SAAC,GAA+C,IAA7CsZ,EAA4C,EAA5CA,aAAchrB,EAA8B,EAA9BA,KAAME,EAAwB,EAAxBA,QAAS+qB,EAAe,EAAfA,SAClD5qB,EAAUxC,KADuD,EAE3DyC,cAALC,EAFgE,sBAIzCsB,oBAAS,GAJgC,gCAM7CA,mBAAS,SANoC,6BAgBvE,OACE,kBAAChB,EAAA,EAAD,CAAQb,KAAMA,EAAMK,QAAS,CAAErC,MAAOqC,EAAQrC,QAC5C,kBAAC8C,EAAA,EAAD,CAAYC,UAAWV,EAAQX,SAAUsB,QAASd,GAChD,kBAAC,IAAD,CAAkBa,UAAWV,EAAQP,aAEvC,kBAACmB,EAAA,EAAD,CACEC,GAAG,qBACHb,QAAS,CAAEc,KAAMd,EAAQpB,OACzBmC,mBAAmB,GAElBb,EAAE,mBAEL,yBAAKQ,UAAWV,EAAQklD,aACtB,0BAAMx5B,SAAUf,GAcd,yBAAKjqB,UAAWV,EAAQisD,cACtB,kBAACtgC,GAAA,EAAD,CACEjrB,UAAWV,EAAQkI,MACnBoQ,KAAK,YACL5Q,MAAM,eACN+B,YAAY,aACZtE,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,WACL5Q,MAAM,cACNhH,UAAWV,EAAQkI,MACnBuB,YAAY,YACZtE,UAAW8D,MAGf,yBAAKvI,UAAWV,EAAQisD,cACtB,kBAACtgC,GAAA,EAAD,CACEjrB,UAAWV,EAAQkI,MACnBoQ,KAAK,QACLzP,WAAY+hB,EACZljB,MAAM,UACN+B,YAAY,QACZtE,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,cACL5Q,MAAM,UACNhH,UAAWV,EAAQkI,MACnBkB,cAAc,EACdC,eAAe,EACfF,UAAW,GACXM,YAAY,QACZtE,UAAW8D,OAGb2hB,GACA,kBAACe,GAAA,EAAD,CACErT,KAAK,cACL5Q,MAAM,iBACN+B,YAAY,eACZtE,UAAW8D,GACXvI,UAAWV,EAAQ8e,cAGtB8L,GACC,yBAAKlqB,UAAWV,EAAQisD,cACtB,kBAACtgC,GAAA,EAAD,CACEjrB,UAAWV,EAAQkI,MACnBoQ,KAAK,cACL5Q,MAAM,iBACN+B,YAAY,eACZtE,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACEjrB,UAAWV,EAAQkI,MACnBoQ,KAAK,kBACL5Q,MAAM,qBACNmB,UAAU,EACVY,YAAY,mBACZtE,UAAW8D,MAIjB,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,WACL5X,UAAWV,EAAQosD,SACnBjnD,UAAWszB,KAEb,kBAACt3B,EAAA,EAAD,CACEC,QAAQ,WACRT,QAASgqB,EACTjqB,UAAWV,EAAQqsD,gBAElBnsD,EAAE,0BAYL,yBAAKQ,UAAWV,EAAQgsD,aACtB,kBAAC,GAAD,CACElgC,WAAW,mBACXmD,eAAgBpvB,EAChBksB,YAAanB,EAAW,OAAS,mBCpJhCnM,GAxBE,SAAAC,GACf,IAAMpW,EAAS,GAoBf,OAlBIgV,GAAWoB,EAAOjO,WAAa,IAAI,KACrCnI,EAAOmI,UAAY,0BAGjB6M,GAAWoB,EAAOhO,UAAY,IAAI,KACpCpI,EAAOoI,SAAW,yBAGhB4M,GAAWoB,EAAO9N,OAAS,IAAI,GACjCtI,EAAOsI,MAAQ,oBACNwM,GAAQsB,EAAO9N,MAAO,2BAC/BtI,EAAOsI,MAAQ,yBAGb0M,GAAWoB,EAAO7N,aAAe,IAAI,KACvCvI,EAAOuI,YAAc,qBAGhBvI,GCsEM9K,GA1FGC,aAAW,SAAAC,GAAK,MAAK,CACrCC,MAAO,CACLC,gBAAiB,OACjBC,OAAQ,oBACRC,UAAW,aACXC,aAAc,MACd0H,MAAO,QACPgG,UAAW,SAEbhM,UAAW,CACTlB,SAAU,OACVG,MAAO,QAETW,SAAU,CACRC,SAAU,WACVC,IAAK,EACLC,MAAO,EACPnB,QAAS,QAEXO,MAAO,CACLL,SAAU,OACVwJ,cAAe,OACf1J,QAAS,iBACTI,WAAY,QAEdyJ,MAAM,aACJzC,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7B4J,cAAe,OACftC,MAAO,SAGXy/C,YAAa,CACX7mD,QAAS,YAEX2tD,YAAa,CACXjtD,UAAW,OACX8Q,WAAY,OACZ9H,cAAe,OACfjJ,UAAW,qBAEbmtD,aAAa,aACXvmD,QAAS,OACTqC,cAAe,OACfpC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAO,CAC9B0H,cAAe,SACfkC,cAAe,MAGlBmkD,aAAc,CACZxmD,QAAS,OACTnH,SAAU,OACVsH,cAAe,OAEjBsmD,kBAAmB,CACjBtmD,cAAe,cACf8B,cAAe,YACfvB,WAAY,MACZ1H,MAAO,UACPF,WAAY,OACZyH,aAAc,MACd2B,cAAe,UACfrJ,SAAU,QAEZugB,YAAa,CACX/W,cAAe,QAEjBqkD,SAAU,CACRztD,OAAQ,gBAEVwgB,SAAU,CACR7f,SAAU,WACVf,SAAU,OACVgB,IAAK,OACL6G,WAAY,OAEdimD,eAAgB,CACdxuD,OAAQ,oBACRE,aAAc,MACdQ,SAAU,OACVC,WAAY,OACZC,WAAY,IACZC,MAAO,UACPL,QAAS,WACTL,SAAU,OACVkB,YAAa,YCYForB,gBAAU,CACvBnmB,KAAM,YACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,cA3FoB,CACpBja,UAAW,GACXC,SAAU,GACVG,YAAa,GACbF,YAAa,GACbG,gBAAiB,GACjBF,MAAO,GACPG,SAAU,IAqFV0N,aANa6L,CAOZjZ,YAAQ,KAARA,EAnFc,SAAA/L,GAAU,IACjBqlB,EAA0CrlB,EAA1CqlB,aAAchrB,EAA4B2F,EAA5B3F,KAAME,EAAsByF,EAAtBzF,QAAS+qB,EAAatlB,EAAbslB,SAE/B5qB,EAAUxC,KAHQ,EAIZyC,cAALC,EAJiB,oBAMxB,OACE,kBAACM,EAAA,EAAD,CAAQb,KAAMA,EAAMK,QAAS,CAAErC,MAAOqC,EAAQrC,QAC5C,kBAAC8C,EAAA,EAAD,CAAYC,UAAWV,EAAQX,SAAUsB,QAASd,GAChD,kBAAC,IAAD,CAAkBa,UAAWV,EAAQP,aAEvC,kBAACmB,EAAA,EAAD,CACEC,GAAG,qBACHb,QAAS,CAAEc,KAAMd,EAAQpB,OACzBmC,mBAAmB,GAElBb,EAAE,SAEL,yBAAKQ,UAAWV,EAAQklD,aACtB,0BAAMx5B,SAAUf,GACd,yBAAKjqB,UAAWV,EAAQisD,cACtB,kBAACtgC,GAAA,EAAD,CACEjrB,UAAWV,EAAQkI,MACnBoQ,KAAK,YACL5Q,MAAM,eACN+B,YAAY,aACZtE,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,WACL5Q,MAAM,cACNhH,UAAWV,EAAQkI,MACnBuB,YAAY,YACZtE,UAAW8D,MAGf,yBAAKvI,UAAWV,EAAQisD,cACtB,kBAACtgC,GAAA,EAAD,CACEjrB,UAAWV,EAAQkI,MACnBoQ,KAAK,QACLzP,WAAY+hB,EACZljB,MAAM,UACN+B,YAAY,QACZtE,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,cACL5Q,MAAM,UACNhH,UAAWV,EAAQkI,MACnBkB,cAAc,EACdC,eAAe,EACfF,UAAW,GACXM,YAAY,QACZtE,UAAW8D,MAGf,yBAAKvI,UAAWV,EAAQisD,cACtB,kBAACtgC,GAAA,EAAD,CACErT,KAAK,WACL5X,UAAWV,EAAQosD,SACnBjnD,UAAWszB,MAGf,yBAAK/3B,UAAWV,EAAQgsD,aACtB,kBAAC,GAAD,CACElgC,WAAW,SACXmD,eAAgBpvB,EAChBksB,YAAanB,EAAW,OAAS,mBC1FlCptB,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5CuZ,UAAW,CACThR,aAAc,QAEhB0R,QAAQ,aACNrY,SAAU,WACVkM,UAAW,QACV9N,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BqN,UAAW,SAGf8gD,oBAAqB,CACnBvkD,cAAe,QAEjBL,MAAM,aACJhC,QAAS,QACTO,aAAc,EACdvH,MAAO,UACPiJ,cAAe,YACfpJ,SAAU,GACVC,WAAY,OACZoJ,cAAe,WACdlK,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,IAGdshB,YAAY,aACVna,QAAS,OACTE,WAAY,WACZD,eAAgB,gBAChBM,aAAc,OACdvH,MAAO,UACPF,WAAY,OACZoJ,cAAe,WACdlK,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,QAGlB6Z,WAAW,aACTpa,QAAS,OACTiC,cAAe,QACdjK,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,WAGnBka,OAAO,aACL7gB,YAAa,OACbT,WAAY,KACXf,EAAMQ,YAAYC,KAAK,MAAQ,CAC9Be,YAAa,QAGjB8gB,gBAAgB,aACdta,QAAS,OACTE,WAAY,SACZhI,gBAAiB,UACjBC,OAAQ,oBACRE,aAAc,MACdD,UAAW,aACX2H,MAAO,OACPmJ,OAAQ,UACRrQ,SAAU,OACVC,WAAY,OACZH,QAAS,WACTiB,SAAU,WACV6H,OAAQ,IACR,UAAW,CACTtJ,OAAQ,sBAETH,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,aAIb4hB,aAAa,aACX1hB,SAAU,OACVW,YAAa,MACbH,UAAW,QACVrB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,OACVW,YAAa,QAGjBghB,iBAAiB,aACfvhB,OAAQ,SACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,UAGZwhB,sBAAsB,aACpB7gB,SAAU,WACVC,IAAK,OACL6gB,KAAM,KACL1iB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BoB,IAAK,SAGT8gB,MAAO,CACLjhB,UAAW,uCACXvB,OAAQ,qBAEVyiB,WAAY,CACVziB,OAAQ,oBACRuB,UAAW,OACX,UAAW,CACTvB,OAAQ,sBAGZoK,MAAM,aACJlJ,UAAW,QACVrB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BY,UAAW,SAGfwhB,kBAAkB,aAChBjhB,SAAU,WACV6H,OAAQ,EACRxI,OAAQ,oBACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,oBAGZ6hB,aAAc,GACdC,QAAS,CACP/hB,MAAO,WAETgiB,iBAAkB,CAChBhiB,MAAO,UACPd,gBAAiB,WAEnB+iB,aAAa,aACXjiB,MAAOhB,EAAMuB,OAAOP,MACpBH,SAAU,QACTb,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,SAGdqiB,YAAY,aACVhZ,cAAe,SACfD,cAAe,YACf5I,UAAW,OACXN,WAAY,OACZF,SAAU,OACVsiB,eAAgB,YAChBvhB,SAAU,WACVE,MAAO,IACPmgB,OAAQ,KACPjiB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,aCwUDg6B,GA7ciB,SAAC,GAoB1B,IAnBL5W,EAmBI,EAnBJA,uBACAQ,EAkBI,EAlBJA,eACAD,EAiBI,EAjBJA,eACAha,EAgBI,EAhBJA,MACAR,EAeI,EAfJA,MACAhH,EAcI,EAdJA,UACA8hB,EAaI,EAbJA,iBACAX,EAYI,EAZJA,eACAX,EAWI,EAXJA,cACAY,EAUI,EAVJA,qBACAG,EASI,EATJA,qBACAyS,EAQI,EARJA,QACAtS,EAOI,EAPJA,eACAC,EAMI,EANJA,iBACAC,EAKI,EALJA,uBACAqS,EAII,EAJJA,WACApS,EAGI,EAHJA,QACAP,EAEI,EAFJA,aAEI,IADJtY,KAAQC,EACJ,EADIA,QAAS1B,EACb,EADaA,MAAO2B,EACpB,EADoBA,aAElB5J,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAIE8S,EAJF,KAI0BnH,SAJ1B,EAMsBgG,IAAMrQ,SAASwgB,GAAgB,MANrD,mBAMG3B,EANH,KAMU2C,EANV,OAO8CnR,IAAMrQ,UAAS,GAP7D,mBAOGyhB,EAPH,KAOuBC,EAPvB,OASwBrR,IAAMrQ,UAAS,GATvC,mBASG6D,EATH,KASWge,EATX,OAWkCxR,IAAMrQ,SAC1CmgB,GAA0BzZ,EAAM5F,MAAMsY,UAClC1S,EAAM5F,MAAMsY,UACZvB,QAdF,mBAWGiK,EAXH,KAWgBC,EAXhB,KAiBJ1R,IAAM+C,WAAU,WACdyO,GAAWhe,GACXme,YAAW,WACTH,EAAUhe,QAEX,CAAC2N,IAYJ,IAAM4Q,EAAkB,SAAChJ,EAAWC,GAC7BA,IAAWxB,KAAOuB,GAAWyG,OAAOxG,EAAS,OAKhC0xC,EAAS3xC,EAAWC,GACP0L,MAAK,SAAAnF,GAAI,OAAI0C,GAAa1C,MAGrDlZ,EAAM4B,SAAS,CAAE8Q,YAAWC,QAASD,IAGrC1S,EAAM4B,SAAS,CAAE8Q,YAAWC,YAX5B3S,EAAM4B,SAAS,CAAE8Q,YAAWC,QAASD,KAkCrCua,GADgBtR,cAAc,SAACnmB,GAAD,OAAWA,EAAMQ,YAAYC,KAAK,SAC1B,SAC1C4c,EACAC,EACAsL,EACAlF,GAEA,IAAKrG,EAAc,OAAOuL,EAE1B,IAAM8O,EAAe/b,KAAO+H,GAAMiU,IAAI,CACpCC,KAAM,EACNC,OAAQ,IAEJC,EAAgBnc,OAASyJ,IAAI/H,EAAcC,GAEjD,QAAI3B,KAAO+b,GAAcK,eAAeD,EAAe,SA+BzD,SAAS+2B,EAAS3xC,EAAW4xC,GAI3B,IAHA,IAAMC,EAAY,GACdzmC,EAAc3M,KAAOuB,GACrBC,EAAUxB,KAAOmzC,GACdxmC,GAAenL,GACpB4xC,EAAUx2C,KAAKoD,KAAO2M,GAAaxB,OAAO,eAC1CwB,EAAc3M,KAAO2M,GAAalD,IAAI,EAAG,QAE3C,OAAO2pC,EAGT,IAAM/2B,EAA2B,SAACtU,EAAMkF,GACtC,GAAIA,EAAc,OAAOA,EAEzB,GAAIqO,EAAY,CACd,IAAM7Z,EAAO6Z,EAAW7Z,KAClBI,EAAYyZ,EAAWzZ,UAEvBH,EAAe3X,SAASuxB,EAAW5Z,cACnCC,EAAuB2Z,EAAW3Z,qBAExC,GAAIF,GAOF,GANmBqa,EACjBpa,EACAC,EACAsL,EACAlF,GAEc,OAAO,OAClB,GAAIlG,EAAW,CACpB,IAAIya,GAAiB,EA6BrB,GA3BAza,EAAU7K,KAAI,SAAAmB,GACZ,IAAMsJ,EAAOtJ,EAAKsJ,KACZM,EAAuB5J,EAAK4J,qBAI9BN,EAFYzB,KAAO+H,GAAMoD,OAAO,UAG9BpJ,EAAqB7Y,OA/DM,SACvCwY,EACAC,EACAI,EACAgG,GAaA,QAX8BhG,EAAqB/K,KAAI,SAAAmB,GACrD,IAAM6J,EAAYhC,KAAO7H,EAAK6J,UAAW,SACnC+Z,EAAe/b,KAAO+H,GAAMiU,IAAI,CACpCC,KAAMja,EAAUua,IAAI,QACpBL,OAAQla,EAAUua,IAAI,YAElBJ,EAAgBnc,OAASyJ,IAAI/H,EAAcC,GAEjD,OADmB3B,KAAO+b,GAAcjQ,KAAKqQ,IACxB,KAGGK,OAAM,SAAAvzB,GAAK,OAAIA,KA+CZwzB,CACjB/a,EACAC,EACAI,EACAgG,KAEcuU,GAAiB,GAEdR,EACjBpa,EACAC,EACAsL,EACAlF,KAEcuU,GAAiB,OAKnCA,EAAgB,OAAO,GAI/B,OAAOrP,GAGHxC,GAAe,SAAA1C,GACnB,GACEF,GACAA,EAAcuD,SAASpL,KAAO+H,GAAMoD,OAAO,eAE3C,OAAO,EAGT,GAAItc,EAAM5F,MAAMsY,YAAc1S,EAAM5F,MAAMuY,QAAS,CACjD,IAAM6xC,EAAMH,EAASrkD,EAAM5F,MAAMsY,UAAWwG,GACxCurC,GAAO,EAkBX,GAhBAD,EAAI/zB,SAAQ,SAACqE,EAAIxrB,GACf,IAAMo7C,EAAYvzC,KAAO2jB,GAAIxY,OAAO,OAEhC3C,KACF,OAACA,QAAD,IAACA,OAAD,EAACA,EAAgByC,WAAWG,SAASmoC,MAErCD,GAAO,MAIXzrC,EAAcyX,SAAQ,SAAAqE,GAChB3jB,KAAO2jB,GAAI3Y,UAAUnc,EAAM5F,MAAMsY,UAAWwG,EAAM,MAAO,QAC3DurC,GAAO,MAIPA,EACF,OAAO,EAIX,IAAK9qC,EAAgB,OAAO,EAE5B,GAAIA,EAAehH,SAAsC,SAA3BgH,EAAehH,SAQ3C,GAPkBxB,KAAO+H,GAAMiD,UAC7BxC,EAAejH,UACfiH,EAAehH,QACf,MACA,MAGa,CACb,IAAM0J,EAAYlL,KAAO+H,GAAMoD,OAAO,OACtC,OAAQ3C,EAAeyC,WAAWG,SAASF,SAQ7C,GALsBlL,KAAO+H,GAAM+C,cACjCtC,EAAejH,UACf,OAGiB,CACjB,IAAM2J,EAAYlL,KAAO+H,GAAMoD,OAAO,OACtC,OAAQ3C,EAAeyC,WAAWG,SAASF,GAI/C,OAAO,GAQT,OACE,yBAAK7jB,UAAWV,EAAQiX,WACtB,yBACEvW,UAAWsG,KACThH,EAAQ2X,QACRjX,EACAshB,EAAehiB,EAAQssD,oBAAsB,KAG9CtqC,EACC,2BAAOthB,UAAWsG,KAAWhH,EAAQ6f,YAAa2C,IAChD,kBAAC1b,EAAA,EAAD,CACE1F,QAASkhB,GAAkD,MAE1DpiB,EAAEwH,IAEL,yBAAKhH,UAAWV,EAAQ8f,YACtB,kBAAChZ,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ+f,QAC5C7X,EAAM5F,QAAU+f,EAAhB,UAAsCniB,EAAE,kBAAxC,KAA0D,KAE7D,kBAAC4G,EAAA,EAAD,CAAY1F,QAAQ,SACjB8G,EAAM5F,OACL,oCACG4F,EAAM5F,MAAMsY,WACXvB,KAAOnR,EAAM5F,MAAMsY,WAChBwK,OAAOlY,GAAY8F,IACnBwR,OAAO,eAAgB,IAJ9B,SAKI,IACDtc,EAAM5F,MAAMuY,SACXxB,KAAOnR,EAAM5F,MAAMuY,SAChBuK,OAAOlY,GAAY8F,IACnBwR,OAAO,mBAOtB,2BAAO5b,QAAQ,YAAYlI,UAAWV,EAAQ0H,OAC3CxH,EAAEwH,IAIP,2BACEkB,QAAQ,YACRjI,QAAS,kBAAMqiB,EAAS,cACxBtiB,UAAWsG,KACThH,EAAQggB,gBADW,eAGhBhgB,EAAQqgB,MAAQA,GAHA,eAMhBrgB,EAAQsgB,YAAc3W,GAAWC,IAAiB3B,GAErDia,IAGF,kBAAC,KAAD,CAAexhB,UAAWV,EAAQigB,eAEjC/X,EAAM5F,MAAMsY,UACXvB,KAAOnR,EAAM5F,MAAMsY,WAChBwK,OAAOlY,GAAY8F,IACnBwR,OAAO,eAEV,6BAAMtkB,EAAE,eAEV,0BAAMQ,UAAWV,EAAQkgB,kBAAzB,KACChY,EAAM5F,MAAMuY,QACXxB,KAAOnR,EAAM5F,MAAMuY,SAChBuK,OAAOlY,GAAY8F,IACnBwR,OAAO,eAEV,6BAAMtkB,EAAE,eAIV8hB,IAAiBrY,GAAWC,IAAiB3B,GAC7C,kBAACe,GAAA,EAAD,CAAgBtI,UAAWV,EAAQiI,MAAOA,OAAK,GAC5C/H,EAAE+H,IAIP,yBACEvH,UAAWsG,KACThH,EAAQmgB,sBACR8B,IAGD5c,GACC,kBAAC,mBAAD,CACEigB,gBAAiB,EACjBG,UAAU,EACVF,UAAU,EACVC,gBAAiB,6BAAM,IACvBE,YAAY,YACZC,UAAU,UACVC,cAAc,cACdhL,UAAW1S,EAAM5F,MAAMsY,UACvBC,QAAS3S,EAAM5F,MAAMuY,QACrBgL,cAAe,YAA6B,IAA1BjL,EAAyB,EAAzBA,UAAWC,EAAc,EAAdA,QAC3B+I,EAAgBhJ,EAAWC,IAE7B+G,cAAe,EACfkE,iBA5SoB,SAAA1E,GAC9BmC,EAAenC,GACf8B,GAAoB,GAChBpB,GAAsBA,EAAqBV,IA0SrC2E,iBAvSoB,SAAA3E,GAC9BmC,EAAenC,GACf,IAAM4E,EAAc3M,OACd4M,EAAmB5M,KAAO2M,GAAalD,IAAI,GAAI,KAE9BzJ,KAAO+H,GAC3B2D,QAAQ,SACR1D,OAAO4E,EAAiBlB,QAAQ,WAEf7B,GAAoB,GACpCpB,GAAsBA,EAAqBV,IA8RrC8E,QAASjD,EAAqB,6BAAM,IAAY,GAChDoD,oBAAqB,kBAAM/C,GAC3BnB,eAAgBA,EAChBgE,aAAc9F,EACd+F,cAAe,SAAAD,GACbnD,EAASmD,GAAgBnE,GAAgB,OAE3CsE,aAAc,SAAAlF,GACZ,IAAMqF,EAAY3C,GAAa1C,GAC/B,OAAOsU,EAAyBtU,EAAMqF,IAExClE,QAASA,GAAoB,GAC7BH,eAAgBA,GAAkC,EAGlDyE,mBAAoB,gBAAGC,EAAH,EAAGA,MAAH,OAClBzN,KAAOyN,GACJ1B,OAAOlY,GAAY8F,IACnBwR,OAAO,cAEZuC,kBAAmB,SAAAC,GAAQ,IAAD,EAEtBA,EAAIC,QAAQC,aADW,WAArBlU,EACyB,CACzB,QACA,KACA,KACA,KACA,KACA,KACA,SAGyB,CACzB,KACA,KACA,KACA,KACA,KACA,KACA,MAnBoB,MAuBciO,GACpCC,EACA8F,GAFMxF,EAvBgB,EAuBhBA,YAAaC,EAvBG,EAuBHA,aAKrB,OACE,yBACE/gB,UAAWsG,MAAU,mBAClBhH,EAAQ8gB,iBAAmBU,GAAeC,GADxB,cAElBzhB,EAAQ+gB,eAAiBS,GAFP,cAGlBxhB,EAAQghB,gBAAkBS,GAHR,KAMrB,6BAAMuF,EAAIxC,OAAO,QAIvB2C,4BAA4B,IAG/BnF,GAAgB9Z,EAAM5F,MAAMsY,WAC3B,kBAACzZ,EAAA,EAAD,CACET,UAAWV,EAAQ4gB,YACnBjgB,QAAS,WA/KnBijB,EAAgB,KAAM,MACtBZ,EAAShB,GAAgB,QA4KjB,eAWHA,IAAiBrY,GAAWC,IAAiB3B,GAC5C,kBAACe,GAAA,EAAD,CACEtI,UAAWsG,KAAW,eAAGhH,EAAQiI,MAAQysB,IACzCzsB,OAAK,GAEJ/H,EAAE+H,OCpdA,YAACqQ,EAAMnU,EAAP,GAAqD,IAAtC0oD,EAAqC,EAArCA,aAAqC,IAAvBC,mBAAuB,MAAT,GAAS,IACvCj7C,IAAMrQ,SAASqrD,GADwB,mBAC1DvqD,EAD0D,KACnDwP,EADmD,OAErCD,IAAMrQ,SAAS,IAFsB,mBAE1D8G,EAF0D,KAElDykD,EAFkD,KAwB3DlvC,EAAQ,CACZvF,OACAhW,QACAgG,SACAmW,SAxBe,WACf,IAAMuuC,EAAW7oD,EAAK8oD,cAElBC,EAAgBJ,EAAYz8C,KAAI,SAAA88C,GAAU,OAC5CA,EAAWH,EAAU10C,MASvB,OANA40C,EAAgBA,EAActvC,QAAO,SAAAuS,GAAQ,QAAMA,KAEnD48B,EAAUG,GAEkC,IAAzBA,EAAc3qD,QAcjC6qD,SATe,SAAAj9B,GACf48B,EAAU,CAAC58B,KASXrmB,SAAU,SAAAC,GACR+H,EAAS/H,EAAEC,OAAO1H,OAClByqD,EAAU,MAMd,OAFA5oD,EAAKkpD,SAASxvC,GAEPA,GCtCM,eAAmB,IAAhB6N,EAAe,EAAfA,SAAe,EACC7Z,IAAMrQ,UAAS,GADhB,mBAC1B8rD,EAD0B,KACfC,EADe,KAGzBxzB,EAAS,GAETkzB,EAAc,WAClB,OAAOlzB,EAAO5P,QAAO,SAAC6iC,EAAUnvC,GAG9B,OAFAmvC,EAASnvC,EAAMvF,MAAQuF,EAAMvb,MAEtB0qD,IACN,KAgBL,MAAO,CACLriC,aAAc,SAAA5gB,GACZA,EAAE4mB,iBACF,IAAM68B,EAfiBzzB,EACY1pB,KAAI,SAAAwN,GACvC,OAAOA,EAAMY,cAGeoX,OAAM,SAAA5d,GAClC,OAAmB,IAAZA,KAWP,OADAs1C,GAAa,GACN7hC,EAASuhC,IAAeO,IAEjCH,SAAU,SAAAxvC,GAAK,OAAIkc,EAAO9jB,KAAK4H,IAC/BovC,cACAK,cCfW9vD,GApBGC,aAAW,SAAAC,GAAK,MAAK,CACrCia,QAAS,CACP5Y,UAAW,IAEbH,MAAO,CACLqH,aAAc,IAEhBqxB,OAAQ,CACN7xB,MAAO,OACP1G,UAAW,GACXkH,aAAcvI,EAAM8Q,QAAQ,IAE9BsQ,YAAa,CACX7Y,aAAcvI,EAAM8Q,QAAQ,IAE9Bi/C,aAAc,CACZlvD,SAAU,QChBCmvD,GCsBA,WACb,IAAM1tD,EAAUxC,KADG,GAGHoU,cAECS,YAAY/F,KAAtBqhD,EALY,oBAObC,EAAYC,GAAQ,CACxBniC,SAAU,SAACshC,EAAUQ,GACdA,GAELG,EAAO,CACLh6C,UAAW,CAAE/C,MAAOo8C,EAASp8C,MAAO20C,SAAUyH,EAASzH,YACtD3xC,MACD,WACE8iC,OAAO3gC,SAAWlR,MAGpB,WACEipD,EAAcV,SACZ,oDAEFW,EAAWX,SAAS,UAtBT,EA4BqBv7C,IAAMrQ,UAAS,GA5BpC,mBA4BZwsD,EA5BY,KA4BEC,EA5BF,KAiCbF,EAAaG,GAAS,QAASN,EAAW,CAC9Cf,aAAc,GACdC,YAAa,CACX,SAAAE,GAAQ,OAAI1vC,GAAW0vC,EAASp8C,MAAO,sBACvC,SAAAo8C,GAAQ,OAAI5vC,GAAQ4vC,EAASp8C,MAAO,qBAIlCk9C,EAAgBI,GAAS,WAAYN,EAAW,CACpDf,aAAc,GACdC,YAAa,CACX,SAAAE,GAAQ,OAAI1vC,GAAW0vC,EAASzH,SAAU,yBAC1C,SAAAyH,GAAQ,OACNjvC,GACEivC,EAASzH,SACT,sHAKR,OACE,yBAAK7kD,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAYpG,UAAWV,EAAQpB,MAAOwC,QAAQ,MAA9C,SAGA,0BAAMsqB,SAAUkiC,EAAUjjC,cACxB,kBAAC,GAAD,CACElhB,YAAY,QACZ/I,UAAWV,EAAQ8e,YACnBpX,MAAM,QACNpF,MAAOyrD,EAAWzrD,MAClBwH,SAAUikD,EAAWjkD,SACrBxB,OAAQylD,EAAWzlD,OACnBC,UAAWwlD,EAAWzlD,OAAO,KAE/B,kBAAC,GAAD,CACErF,KAAM+qD,EAAe,OAAS,WAC9BvkD,YAAY,WACZ/B,MAAM,WACNoqB,aACE,kBAACq8B,EAAA,EAAD,CAAgB7uD,SAAS,OACvB,kBAACmB,EAAA,EAAD,CAAYE,QA7CI,WAC1BstD,GAAiBD,KA6CJA,EACC,kBAAC,KAAD,CAAYttD,UAAWV,EAAQytD,eAE/B,kBAAC,KAAD,CAAe/sD,UAAWV,EAAQytD,iBAK1CnrD,MAAOwrD,EAAcxrD,MACrBwH,SAAUgkD,EAAchkD,SACxBxB,OAAQwlD,EAAcxlD,OACtBC,UAAWulD,EAAcxlD,OAAO,GAChC8lD,aAAa,iBAEf,kBAACjtD,EAAA,EAAD,CACE8B,KAAK,SACLvC,UAAWV,EAAQs3B,OACnBl2B,QAAQ,YACR1C,MAAM,WAJR,UASF,kBAAC,GAAD,CAAiB0N,KAAK,mBAAtB,qBChGS5O,GAxBGC,aAAW,SAAAC,GAAK,MAAK,CACrCia,QAAS,CACP5Y,UAAW,IAEbH,MAAO,CACLqH,aAAc,GACdlH,UAAW,IAEb+f,YAAa,CACX/f,UAAW,IAEbu4B,OAAQ,CACN7xB,MAAO,OACP1G,UAAW,GACXkH,aAAcvI,EAAM8Q,QAAQ,IAE9B6/C,iBAAkB,CAChBtvD,UAAW,KAEbuvD,UAAW,CACTvvD,UAAW,YCpBAwvD,GCUO,WACpB,IAAMvuD,EAAUxC,KADU,EAGYqU,IAAMrQ,UAAS,GAH3B,mBAGnBgtD,EAHmB,KAGNC,EAHM,OAKFp8C,YAAY7F,GAAyB,CAC3DkiD,QAAS,WACPX,EAAWX,SAAS,wCAEtBuB,YAAa,WACXF,GAAe,MALZG,EALmB,oBAcpBC,EAAoBhB,GAAQ,CAChCniC,SAAU,SAACshC,EAAUQ,GACdA,GAELoB,EAAc,CACZj7C,UAAW,CAAE/C,MAAOo8C,EAASp8C,YAK7Bm9C,EAAaG,GAAS,QAASW,EAAmB,CACtDhC,aAAc,GACdC,YAAa,CACX,SAAAE,GAAQ,OAAI1vC,GAAW0vC,EAASp8C,MAAO,sBACvC,SAAAo8C,GAAQ,OAAI5vC,GAAQ4vC,EAASp8C,MAAO,qBAIxC,OAAQ49C,EA+BN,yBAAK9tD,UAAWV,EAAQquD,kBACtB,kBAACvnD,EAAA,EAAD,CAAYpG,UAAWV,EAAQpB,MAAOwC,QAAQ,MAA9C,+BAGA,kBAAC0F,EAAA,EAAD,mDAC8CinD,EAAWzrD,MADzD,+CAIA,yBAAK5B,UAAWV,EAAQsuD,WACtB,kBAAC,GAAD,CAAiBliD,KAAK,UAAtB,oBAvCJ,yBAAK1L,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAYpG,UAAWV,EAAQpB,MAAOwC,QAAQ,MAA9C,kBAGA,kBAAC0F,EAAA,EAAD,CAAY1F,QAAQ,SAApB,2HAIA,0BAAMsqB,SAAUmjC,EAAkBlkC,cAChC,kBAAC,GAAD,CACElhB,YAAY,QACZ/I,UAAWV,EAAQ8e,YACnBpX,MAAM,QACNpF,MAAOyrD,EAAWzrD,MAClBwH,SAAUikD,EAAWjkD,SACrBxB,OAAQylD,EAAWzlD,OACnBC,UAAWwlD,EAAWzlD,OAAO,KAE/B,kBAACnH,EAAA,EAAD,CACE8B,KAAK,SACLvC,UAAWV,EAAQs3B,OACnBl2B,QAAQ,YACR1C,MAAM,WAJR,UASF,kBAAC,GAAD,CAAiB0N,KAAK,UAAtB,mB,uXCtEC,IAAM0iD,GAAcviD,KAAH,MCyBT/O,GAzBGC,aAAW,SAAAC,GAAK,MAAK,CACrCia,QAAS,CACP5Y,UAAW,IAEbgwD,mBAAoB,CAClBvpD,OAAQ,OACRE,QAAS,OACTE,WAAY,UAEdhH,MAAO,CACLqH,aAAc,IAEhB6Y,YAAa,CACX/f,UAAW,IAEbu4B,OAAQ,CACN7xB,MAAO,OACP1G,UAAW,GACXkH,aAAcvI,EAAM8Q,QAAQ,IAE9B8/C,UAAW,CACTvvD,UAAW,YCrBAiwD,GCmBW,SAAC,GAA4B,IAA1BC,EAAyB,EAAzBA,QAASC,EAAgB,EAAhBA,UAC9BlvD,EAAUxC,KADoC,EAG9B+4C,cAAd11C,EAH4C,EAG5CA,GAAIsuD,EAHwC,EAGxCA,MACNx9C,EAAUC,cACRe,EAAoBC,wBAApBD,gBAL4C,EAMZd,IAAMrQ,SAAS,MANH,mBAM7C4tD,EAN6C,KAM/BC,EAN+B,OAQ3Bh9C,YAAY3F,IAA9B4iD,EAR6C,sBAS/Bj9C,YAAYy8C,IAA1BS,EAT6C,oBAWpD19C,IAAM+C,WAAU,WACd26C,EAAW,CACT57C,UAAW,CACT9S,GAAIA,EACJsuD,MAAOA,EACPK,gBAAiBP,EACjBQ,kBAAmBP,KAEpBt7C,MACD,kBAAMy7C,GAAgB,MACtB,kBAAMA,GAAgB,QAEvB,IAEH,IAAMK,EAAwB7B,GAAQ,CACpCniC,SAAU,SAACshC,EAAUQ,GACdA,GAEL8B,EAAe,CACb37C,UAAW,CACT9S,GAAIA,EACJ0kD,SAAUyH,EAASzH,SACnB4J,MAAOA,EACPK,gBAAiBP,EACjBQ,kBAAmBP,KAEpBt7C,MACD,WAIEjB,EAHYu8C,EACR,8CACA,4CACiB,CACnB9tD,QAAS,YAEXuQ,EAAQsE,KAAK,aAEf,kBAAMo5C,GAAgB,SAKtBvB,EAAgBI,GAAS,WAAYwB,EAAuB,CAChE7C,aAAc,GACdC,YAAa,CACX,SAAAE,GAAQ,OAAI1vC,GAAW0vC,EAASzH,SAAU,yBAC1C,SAAAyH,GAAQ,OACNjvC,GACEivC,EAASzH,SACT,sHAKFoK,EAAuBzB,GAC3B,kBACAwB,EACA,CACE7C,aAAc,GACdC,YAAa,CACX,SAAAE,GAAQ,OACN1vC,GAAW0vC,EAAS4C,gBAAiB,iCACvC,SAAA5C,GAAQ,O9NXkB1qD,E8NatB0qD,EAAS4C,gB9NboBC,E8Nc7B/B,EAAcxrD,M9Nd+B+a,E8Ne7C,uD9NdH/a,IAAUutD,GAAkBxyC,EADJ,IAAC/a,EAAOutD,EAAgBxyC,M8NqBvD,OAAqB,OAAjB+xC,IAIAA,EAEA,yBAAK1uD,UAAWV,EAAQ+uD,oBACtB,6BACE,kBAACjoD,EAAA,EAAD,CAAY1F,QAAQ,MAApB,qCAGA,yBAAKV,UAAWV,EAAQsuD,WACtB,kBAAC,GAAD,CAAiBliD,KAAK,UAAtB,qBAQR,yBAAK1L,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAYpG,UAAWV,EAAQpB,MAAOwC,QAAQ,MAA9C,uBAIA,0BAAMsqB,SAAUgkC,EAAsB/kC,cACpC,kBAAC,GAAD,CACE1nB,KAAK,WACLwG,YAAY,WACZ/B,MAAM,WACNpF,MAAOwrD,EAAcxrD,MACrBwH,SAAUgkD,EAAchkD,SACxBxB,OAAQwlD,EAAcxlD,OACtBC,UAAWulD,EAAcxlD,OAAO,GAChC8lD,aAAa,iBAEf,kBAAC,GAAD,CACE1tD,UAAWV,EAAQ8e,YACnB7b,KAAK,WACLwG,YAAY,mBACZ/B,MAAM,mBACNpF,MAAOqtD,EAAqBrtD,MAC5BwH,SAAU6lD,EAAqB7lD,SAC/BxB,OAAQqnD,EAAqBrnD,OAC7BC,UAAWonD,EAAqBrnD,OAAO,GACvC8lD,aAAa,iBAEf,kBAACjtD,EAAA,EAAD,CACE8B,KAAK,SACLvC,UAAWV,EAAQs3B,OACnBl2B,QAAQ,YACR1C,MAAM,WAJR,cCzIKoxD,GAAkC,SAC7CC,EACAC,EACAC,EACAnlC,EACAF,EACAnoB,EACAE,EACAE,EACA4zC,GACI,IAAD,QACG1S,EAAkBjZ,EAAUvoB,OAC9BmhC,GAAiB,EACjBK,EAAkB,IAAGL,EAAiB5Y,EAAUiZ,EAAkB,IAEtE,IAAM1pB,EAAc61C,GAAgBH,GAC9Bt1C,EAAe,eAAQs1C,EAAK,gBAAoBrxC,QAChDpC,EAAe,eAAQyzC,EAAK,gBAAoBrxC,QAChDxC,EAAU,eAAQ6zC,EAAK,WAAerxC,QACtCyxC,EAAcC,GAAgBL,GAE9BM,EAAWh2C,EAAYG,WAAWyD,KACpC,CAAE2oB,MAAOvsB,EAAYG,WAAWyD,MAChC,GAEEqyC,EAAa,CACjBl9B,gBACE28B,EAAMhsD,cAAcH,sBAAsByvB,SAC1C08B,EAAMhsD,cAAcH,sBAAsB/C,WAGvCwZ,EAAYG,kBACZH,EAAYC,aAEnB,IAAMi2C,EACJ/zC,GAAqBI,GAAuBC,cAC1CmzC,GAEEnzC,EAAY,eAAQkzC,EAAMQ,GAAkB7xC,QAC9C8xC,EAAkBC,GAAoB5zC,GAEtC6zC,EAA2BT,EACkB,SAA7CF,EAAK,YAAgBrxC,OAAOpE,cAC9Bo2C,IAEF,IAAMC,EACJn0C,GAAqBI,GAAuBE,YAC1CkzC,GACAU,GACEE,EAAS,eAAQb,EAAMY,GAAgBjyC,QACzCikB,EAASkuB,GAAmBD,EAAWJ,GAEvCr0C,EAASqqB,GAAU5b,EAAU1O,EAAYwnB,GACzCnnB,EAAe4qB,GAAgBvc,EAAUtO,GAEzCw0C,EAAmBruD,EAAcF,OACjC,CACEE,cAAeA,GAEjB,GACAsuD,EAAkCpuD,EAA6BJ,OAC/D,CAAEyuD,4BAA6BruD,GAC/B,GACAsuD,EAAsBpuD,EAAoBN,OAC1C,CAAE2uD,iBAAkBruD,GACpB,GAEEsuD,GAAsB,UAAA92C,EAAY82C,2BAAZ,eAAiC5uD,QACzD+R,KAAKU,MAAMV,KAAKC,UAAU8F,EAAY82C,sBAAsBvzC,QAAO,gBAAG4yB,EAAH,EAAGA,YAAaC,EAAhB,EAAgBA,UAAhB,QACjED,KAAiBC,KACnB,GAiBJ,cAfOp2B,EAAY82C,oBAEf1a,WACKp8B,EAAYxZ,GACnBwZ,EAAYE,YAAc,GAC1B4B,EAASA,EAAO9L,KAAI,SAAA27B,GAAK,sBAAUA,EAAV,CAAiBnrC,GAAI,UAC9C0b,EAAeA,EAAalM,KAAI,SAAA6e,GAAW,sBACtCA,EADsC,CAEzCruB,GAAI,UAENiwD,EAAmB,GACnBC,EAAkC,GAClCE,EAAsB,IAGjB,eACFZ,EADL,GAEKC,EAFL,CAGExe,SAAS,aACPjI,aAAc0mB,EACdxqB,WAAY4qB,GAETt2C,EAJG,GAKH+2C,GAA8BrB,EAAOrsB,GALlC,GAOHjpB,EAPG,GAQH42C,GAAkCtB,EAAOrsB,GARtC,CAUN6E,SAAU,CACRpgB,SAAU9O,IAAM,UAACwD,EAAalC,oBAAd,aAAC,EAA2BC,WAAW4J,OACrD,cAEF4D,QAAQ,UAAAvL,EAAalC,oBAAb,eAA2BE,SAC/BxB,IAAM,UAACwD,EAAalC,oBAAd,aAAC,EAA2BE,SAAS2J,OAAO,cAClD,KACJzJ,aAAc3X,SAASyZ,EAAa9B,cACpCC,qBAAsB6B,EAAa7B,qBACnCw1C,gBAAiBA,GAGnB7tB,OAAQA,EACR2uB,oBAAqB/0C,GAClB4zC,GAELh0C,OAAQA,GACL20C,EA9BL,GA+BKC,EA/BL,GAgCKE,EAhCL,CAiCEE,yBAIEjB,GAAkB,SAAAH,GAAU,IAAD,mBAE1BA,EAAK,YAAgBrxC,QADlBkqB,EADuB,EACvBA,iBAAqB2oB,EADE,qCAK/B,OAAO,eACFA,EADL,CAEE9vB,OAA2C,SAAnC8vB,EAAkBj3C,aAC1Bk3C,UAA8C,SAAnCD,EAAkBj3C,aAC7BqE,gBAAiBvb,SAASmuD,EAAkB5yC,iBAC5CC,gBAAiBxb,SAASmuD,EAAkB3yC,iBAC5CuyC,oBAAmB,iBAAEvoB,QAAF,IAAEA,OAAF,EAAEA,EAAkBv4B,KACrC,gBAAGuK,EAAH,EAAGA,UAAWC,EAAd,EAAcA,QAASha,EAAvB,EAAuBA,GAAI+oB,EAA3B,EAA2BA,WAA3B,MAA6C,CAC3C/oB,KACA2vC,YAAW,OAAE51B,QAAF,IAAEA,OAAF,EAAEA,EAAW4J,OAAO,cAC/BisB,UAAS,OAAE51B,QAAF,IAAEA,OAAF,EAAEA,EAAS2J,OAAO,cAC3BoF,wBALe,QAOd,MAIHwmC,GAAkB,SAAAL,GACtB,MAAO,CACL1zC,sBAAuB0zC,EAAK,0BAE1BrxC,OAAOrC,sBAAsBhM,KAAI,SAAAmB,GAAI,OAAIpO,SAASoO,EAAK3Q,SAIvD4vD,GAAsB,SAAA5zC,GAC1B,IAAI2zC,EAAkB,GAqBtB,OAnBI3zC,EAAa/B,KACf01C,EAAgBv6C,KAAK,CACnB6E,KAAM4C,OAAOC,KAAKd,EAAa/B,MAC5B8C,QAAO,SAAAC,GAAK,OAAIhB,EAAa/B,KAAK+C,MAClCxN,KAAI,SAAAmB,GAAI,OAAIA,OAERqL,EAAa3B,YACtBs1C,EAAkB3zC,EAAa3B,UAAU7K,KAAI,SAAAmB,GAAI,MAAK,CACpDsJ,KAAM4C,OAAOC,KAAKnM,EAAKsJ,MACpB8C,QAAO,SAAAC,GAAK,OAAIrM,EAAKsJ,KAAK+C,MAC1BxN,KAAI,SAAAmB,GAAI,OAAIA,KACfigD,WAAYjgD,EAAK4J,qBAAqB/K,KAAI,SAAAmB,GAAI,sBACzCA,EADyC,CAE5C8J,SAAUlY,SAASoO,EAAK8J,UACxBD,UAAWhC,IAAO7H,EAAK6J,WAAWmJ,OAAO,wBAKxCgsC,GAGHK,GAAqB,SAACD,EAAWJ,GACrC,GAAII,EAAU91C,MAAQ81C,EAAU91C,KAAKvY,OACnC,OAAOquD,EAAU91C,KAAKzK,KAAI,SAAAmB,GACxB,IAAIkgD,EAAiB,GAErB,OAAIlgD,EAAKgoB,eAAe,eACtBhoB,EAAKoK,WAAWvL,KAAI,SAAAmB,GAClBkgD,EAAc,sBACTA,GADS,YAETjrB,GAA0Bj1B,QAG1B,CACL+2B,SAAU,CACR,CACEztB,KAAM,CAACtJ,EAAKwV,OAGhB2b,OAAQ+uB,IAGH,CACLnpB,SAAU,CACR,CACEztB,KAAMtJ,EAAKsJ,OAGf6nB,OAAQ8D,GAA0Bj1B,OAInC,GAAIo/C,EAAU11C,UACnB,OAAO01C,EAAU11C,UAAU7K,KAAI,SAAAmB,GAC7B,IAAIkgD,EAAiB,GAOrB,OANAlgD,EAAKoK,WAAWvL,KAAI,SAAAmB,GAClBkgD,EAAc,sBACTA,GADS,YAETjrB,GAA0Bj1B,QAG1B,CACL+2B,SAAU,CACR,CACEztB,KAAMtJ,EAAKsJ,OAGf6nB,OAAQ+uB,MAGP,GAAId,EAAUh1C,WAAY,CAC/B,IAAI2sB,EAAWioB,EAAgBngD,KAAI,SAAAmB,GAAI,MAAK,CAC1CsJ,KAAMtJ,EAAKsJ,SAET42C,EAAiB,GAIrB,OAHAd,EAAUh1C,WAAWvL,KAAI,SAAAmB,GACvBkgD,EAAc,sBAAOA,GAAP,YAA0BjrB,GAA0Bj1B,QAE7D,CACL,CACE+2B,SAAUA,EACV5F,OAAQ+uB,IAIZ,IAAI52C,EAAO,GAIX,OAHA01C,EAAgBngD,KAAI,SAAAmB,GAClBsJ,EAAK7E,KAAL,MAAA6E,EAAI,YAAStJ,EAAKsJ,UAEb,CACL,CACEytB,SAAU,CACR,CACEztB,KAAMA,IAGV6nB,OAAQ8D,GAA0BmqB,MAMpCQ,GAAgC,SAACrB,EAAOrsB,GAG5C,IAAKA,EAAgB,OAAO,8BAFR,MAEmC,MAEvD,IAAMiuB,EAAyB,eAC1B5B,EAAM,eAAD,OAAgBrsB,IAAkBhlB,QAG5C,OAAO,8BARa,MASOizC,EAA0B/yD,QAIjDyyD,GAAoC,SAACtB,EAAOrsB,GAChD,IAEqB,EAArB,IAAKA,EACH,OAAO,EAAP,mCAHkB,MAIY,MAD9B,mCAHkB,MAKe,MAFjC,sCAHkB,MAMkB,MAHpC,oCAHkB,MAOgB,MAJlC,gCAHkB,MAQY,IAL9B,mCAHkB,MASe,IANjC,EAUF,IAAMiuB,EAAyB,eAC1B5B,EAAM,mBAAD,OAAoBrsB,IAAkBhlB,QAE1CkzC,EAA0B,GAQhC,OANAl0C,OAAOC,KAAKg0C,GAA2BthD,KACrC,SAAAwN,GAAK,OACF+zC,EAAwB,GAAD,OAAI/zC,GAAJ,OApBR,OAqBd8zC,EAA0B9zC,MAGzB+zC,GCnTIC,GAAsB,SACjC9B,EACAjlC,EACAgnC,EACAC,EACA/B,EACAC,GAKA,IAHA,IAAI+B,EAAmBF,EACjBx3C,EAAey1C,EAAK,YAAgBrxC,OAAOpE,aAE1C03C,EAAmB,GAAG,CAC3B,IAAIC,EAAWz1C,GAAqBw1C,EAAmB,GAEvD,GAAwB,kBAAbC,EAAuB,CAGhC,GAAwB,kBAFxBA,EAAWA,EAASjC,IAGlB,GAAqB,SAAjB11C,EAAyB,CAC3B,IAAIo2C,EAA2BT,EAE/BgC,EAAWA,IADXvB,QAGAuB,EAAWA,EAAShC,OAEjB,CACL,IAAIS,EAA2BT,EACV,SAAjB31C,GACFo2C,IAEF,IAAMwB,EACJ11C,GAAqBI,GAAuBE,YAC1CkzC,GACAU,GACJ,IACoB,oBAAjBwB,GACkB,4BAAjBA,KACDnC,EAAK,gBAAoBrxC,OAAO5D,KAAKvY,SACrCwtD,EAAK,wBAA4BrxC,OAAOxD,UAAU3Y,OAEnD,OAAO,EAIX,GAAiB,qBAAb0vD,IAAoCF,EAAU,iBAChD,OAAO,EAET,GACEhC,EAAMkC,KACLlC,EAAMkC,GAAU9R,aAAe4R,EAAWE,IAE3C,OAAO,MACJ,CACL,IAAMluB,EAAkBjZ,EAAUvoB,OAC5BmhC,EAAiB5Y,EAAUiZ,EAAkB,GAEnD,GAAIA,EAAkB,GAAkB,eAAbkuB,EAA2B,CACpD,IAAME,EAA2BpC,EAAMkC,GAAUvzC,OACjD,IAAK,IAAI4J,KAAK6pC,EAAyBh2C,OAAQ,CAC7C,GAAKg2C,EAAyBh2C,OAAOqd,eAAelR,GAEpD,IADe6pC,EAAyBh2C,OAAOmM,GAAGob,GACtC9kC,MAAO,OAAO,GAI9B,GACEmlC,EAAkB,IACJ,gBAAbkuB,GAA2C,oBAAbA,GAC/B,CACA,IAAMG,EAAsB,UAAMH,EAAN,YAAkBvuB,GAC9C,GACEK,EAAkB,GAClBgsB,EAAMqC,KACLrC,EAAMqC,GAAwBjS,aAC5BziC,OAAOC,KAAKo0C,EAAWK,IAAyB7vD,QAEnD,OAAO,EAIX,GACEwtD,EAAMkC,KACLlC,EAAMkC,GAAU9R,aAAe4R,EAAWE,IAE3C,OAAO,EAEXD,IAGF,OAAO,GCvFIK,GAAmB,SAC9BtC,EACAkC,EACAr6C,EACAk6C,EACAC,EACAO,EACAC,EACAznC,GACI,IAAD,EAEG0nC,EAAal+C,KAAKC,WAAU,UAAAw7C,EAAMkC,UAAN,eAAiBvzC,SAAU,IAEvD+zC,EAAkBn+C,KAAKC,UAAUw9C,EAAWE,IAC5CluB,EAAkBjZ,EAAUvoB,OAElC,GACEwhC,EAAkB,IACJ,gBAAbkuB,GAA2C,oBAAbA,GAC/B,CACA,IAAMvuB,EAAiB5Y,EAAUiZ,EAAkB,GAC7CquB,EAAsB,UAAMH,EAAN,YAAkBvuB,GAExCgvB,EAA2Bp+C,KAAKC,UACpCw7C,EAAMqC,GAAwB1zC,QAE1Bi0C,EAAgCr+C,KAAKC,UACzCw9C,EAAWK,IAGb,GACEx6C,IAAck6C,GACdY,IAA6BC,EAE7B,OAAO,EAIX,MAAiB,eAAbV,GACEr6C,IAAck6C,GAAgBU,IAAeC,KAC1CA,IAAoB1C,EAAMkC,GAAUvzC,OAAOvC,OAAO5Z,QAM1C,sBAAb0vD,GACEr6C,IAAck6C,GAAgBU,IAAeC,KAC1CA,IAAoB1C,EAAMkC,GAAUvzC,OAAOilB,cAAcphC,UAOnD,gBAAb0vD,IACAF,EAAWE,IACXr6C,IAAck6C,GAGZ/B,EAAMkC,GAAUvzC,OAAOpE,eAAiBy3C,EAAWE,GAAU33C,iBAO/D1C,IAAck6C,GACdU,IAAeC,IACfA,KAGgB,oBAAbR,GACc,4BAAbA,GACFO,IAAel+C,KAAKC,UAAUg+C,EAAmBN,MAU1CW,GAAiB,SAC5B9nC,EACAmnC,EACAY,EACAd,EACAQ,EACAD,EACAR,EACAl6C,EACAk7C,GAEA,IAAIC,GAAU,EACRhvB,EAAkBjZ,EAAUvoB,OAC5BmhC,EAAiB5Y,EAAUiZ,EAAkB,GAC7CgsB,EAAQ,CAACkC,GASf,IAAK,IAAI3pC,KANPyb,EAAkB,IACJ,gBAAbkuB,GAA2C,oBAAbA,IAE/BlC,EAAM95C,KAAN,UAAcg8C,EAAd,YAA0BvuB,IAGdqsB,EACZ,GAAKA,EAAMv2B,eAAelR,GAA1B,CACA,IAAM2pC,EAAWlC,EAAMznC,GACnB0qC,EAAqB,GAMvBH,EACEZ,EAJW,oBAAbA,GACa,4BAAbA,EAIEF,EAAWE,IAAaM,EAAmBN,GAG7Ce,EACEjB,EAAWE,IAAaK,EAAgBL,IAAa,KAIpDF,EAAWE,IAAaH,GAAgBl6C,IAAWm7C,GAAU,GAGnD,eAAbd,GACAH,GAAgBl6C,GAChBmsB,EAAkB,GAElBivB,EAAmB72C,OAAO9L,KAAI,SAAAmB,GACvBA,EAAKkyB,IAAoBlyB,EAAKkyB,GAAgB9kC,QACjDm0D,GAAU,OAIXhB,EAAWE,IAAaH,GAAgBl6C,IAAWm7C,GAAU,GAEnD,sBAAbd,GACAH,GAAgBl6C,GAChBmsB,EAAkB,GAElBivB,EAAmBrvB,cAActzB,KAAI,SAAAmB,GAC9BA,EAAKkyB,IAAoBlyB,EAAKkyB,GAAgB9kC,QACjDm0D,GAAU,MAMbA,GAASD,EAAahB,IC9JhBmB,GAAoB,SAC/BlD,EACAmD,EACAtjB,EACAujB,EACAC,EACArB,GAEA,IAAI51C,EAAM,YAAO4zC,EAAM7zC,WAAWwC,OAAOvC,QAgBzCyzB,EAAqB,aAAc,SAfnCzzB,EAASA,EAAO9L,KAAI,SAAAmB,GAClB,OAAKA,EAAK0hD,GAYH1hD,EAXE,eACFA,EADL,eAEG0hD,EAAc,CACbt0D,MAAO,GACPuB,YAAa,GACb2b,IAAK,IACLC,IAAK,IACLC,IAAK,WAOT+zC,EAAK,WAAerxC,OAAOvC,OAAO5Z,SACpC4wD,EAAiB,aAAc,CAC7BE,KAAM,UAERD,EAAc,eACTrB,EADQ,CAEX71C,WAAY,CACVC,OAAQA,QAMHm3C,GAAuB,SAClCvD,EACAwD,EACA3jB,EACAh4B,EACAk7C,EACAM,EACArB,EACAoB,EACAK,GAEA,IAAIr3C,EAAM,YAAO4zC,EAAM7zC,WAAWwC,OAAOvC,QAOzCyzB,EAAqB,aAAc,SANnCzzB,EAASA,EAAO9L,KAAI,SAAAmB,GAClB,OAAO,eACFA,EADL,eAEG+hD,EAAkB,WAInBxD,EAAK,WAAerxC,OAAOvC,OAAO5Z,SAChCqV,IAAcgF,GAAuBV,YACvC42C,EAAal7C,GAEfw7C,EAAc,eACTrB,EADQ,CAEX71C,WAAY,CACVC,OAAQA,MAGZq3C,EAAW,gB,w3CCnER,IAAMC,GAAkBlnD,KAAH,MAoBfmnD,GAAkBnnD,KAAH,MAQfonD,GAAkBpnD,KAAH,MC5Bf/O,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5CoD,KAAK,aACH0K,UAAW,oBACX/F,MAAO,OACPC,QAAS,QACRhI,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OACPI,cAAe,WAGnBG,QAAQ,aACNP,MAAO,OACPC,QAAS,OACTC,eAAgB,UACfjI,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,SAMXmuD,WAAW,aACTnuD,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,SAKX8B,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,uBCjCCquD,GAAe,SAAMC,GAAN,kBAAAjgD,EAAAC,OAAA,+DAAAD,EAAA,YAAAA,EAAA,MACAkgD,MAAM,GAAD,OAAID,EAAJ,sBADL,0BACiCE,OADjC,kDACpBA,EADoB,OAEpBC,EAAWH,EAAI/sB,MAAM,KAAKmtB,MAFN,kBAGnB,IAAIC,KAAK,CAACH,GAAOC,IAHE,sCCEbG,GC4hCA/iD,aAhCS,SAAAtO,GACtB,OAAO,eACFA,EAAMoB,KADX,CAEEJ,cAAehB,EAAMgB,cACrBtB,cAAeM,EAAMsB,yBAAyB5B,cAC9CE,6BACEI,EAAMsB,yBAAyB1B,6BACjCE,oBAAqBE,EAAMsB,yBAAyBxB,yBAI7B,SAAAyO,GAAQ,MAAK,CACtCs+B,qBAAsB,SAACzrC,EAAM0Z,EAAOvb,GAClCgP,EAASwG,aAAO3T,EAAM0Z,EAAOvb,KAE/B+xD,YAAa,SAAAtE,GACXz+C,EAASgjD,KAAO,WAAP,cAAWvE,MAEtB8C,eAAgB,SAAC1uD,EAAMiM,GACrBkB,EAASijD,aAAWpwD,EAAMiM,KAE5B+iD,iBAAkB,SAAChvD,EAAM41B,GACvBzoB,EAASkjD,aAAiBrwD,EAAM41B,KAElCy5B,WAAY,SAAArvD,GACVmN,EAASwuC,aAAO37C,KAElBswD,mBAAoB,WAClBnjD,ErI5/BK,CAAErO,KtIzBkB,6B2QyhCdoO,EA39BQ,SAAC,GAQjB,IAPLjB,EAOI,EAPJA,KACAymC,EAMI,EANJA,2BACAC,EAKI,EALJA,yBACAxjB,EAII,EAJJA,QACAmjB,EAGI,EAHJA,OACAxtB,EAEI,EAFJA,UACG3jB,EACC,gHACEtF,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAGEyR,EAAUC,cACRe,EAAoBC,wBAApBD,gBACF7Q,EAAU+P,IAAMsX,WAAW/mB,GAL7B,EAOqBiQ,YAAYohD,IAA9BiB,EAPH,sBAQqBriD,YAAYshD,IAA9BgB,EARH,sBAS4BtiD,YAAY04C,IAArCY,EATH,oBAYF/b,EASEtqC,EATFsqC,qBACAykB,EAQE/uD,EARF+uD,YACAxB,EAOEvtD,EAPFutD,eACAM,EAME7tD,EANF6tD,iBACAK,EAKEluD,EALFkuD,WACA/wD,EAIE6C,EAJF7C,cACAE,EAGE2C,EAHF3C,6BACAE,EAEEyC,EAFFzC,oBACA4xD,EACEnvD,EADFmvD,mBApBE,EAuB0C5iD,IAAMrQ,SAAN,eACzC4Y,KAxBD,mBAuBGk4C,EAvBH,KAuBoBsC,EAvBpB,OA2B8B/iD,IAAMrQ,UAAS,GA3B7C,mBA2BG8F,EA3BH,KA2BcutD,EA3Bd,OA4B4BhjD,IAAMrQ,UAAS,GA5B3C,mBA4BGopB,EA5BH,KA4BakqC,EA5Bb,OA6B0CjjD,IAAMrQ,UAAS,GA7BzD,mBA6BGuzD,EA7BH,KA6BoBC,GA7BpB,QA8BoDnjD,IAAMrQ,UAAS,GA9BnE,qBA8BGyzD,GA9BH,MA8ByBC,GA9BzB,SAgCgCrjD,IAAMrQ,SAAS,IAhC/C,qBAgCGuwD,GAhCH,MAgCeqB,GAhCf,SAiCgDvhD,IAAMrQ,SAAS,IAjC/D,qBAiCG+wD,GAjCH,MAiCuB4C,GAjCvB,SAmC8BtjD,IAAMrQ,SAAS,CxOzGnB,YwOsE1B,qBAmCGspB,GAnCH,MAmCcsqC,GAnCd,SAoC4CvjD,IAAMrQ,SxO1GxB,WwOsE1B,qBAoCGwR,GApCH,MAoCqBqiD,GApCrB,SAwC8BxjD,IAAMrQ,SACtCob,GAAuBvC,aAzCrB,qBAwCGzC,GAxCH,MAwCck7C,GAxCd,SA2CoDjhD,IAAMrQ,SAAS,GA3CnE,qBA2CGwuD,GA3CH,MA2CyBsF,GA3CzB,SA4CgDzjD,IAAMrQ,SAAS,GA5C/D,qBA4CGyuD,GA5CH,MA4CuBsF,GA5CvB,MA8CJ1jD,IAAM+C,WAAU,WAKd,GAJA4gD,KACAf,IACAW,GAAa,CxOvHe,YwOwH5BR,EAAmB,eAAKx6C,KACpBkZ,EACFuhC,GAAa,OADf,CAIA,GAAIzkD,EAAM,CACR0kD,GAAY,GACZE,IAAmB,GACnB,IAAMS,EACJj5C,GAAqBI,GAAuBC,cAC1Cg6B,GAEEv8B,EAAelK,EAAI,YAAgBkK,aACrCo7C,EACe,SAAjBp7C,EACIw8B,EAA2B,EAC3BA,EACc,qBAAhB2e,IAEAC,EADmB,SAAjBp7C,EACe,EAEb21C,GACe,EAEA,GAIvBmD,GAAc,eACThjD,EADQ,CAEXqlD,YAAaA,EACbE,UACEn5C,GAAqBI,GAAuBE,YAC1C+5B,GACA6e,MAENJ,GAAwBze,GACxB0e,GAAsBze,QAEtBsc,GAAc,CACZqC,YAAa,mBACbE,UAAW,oBAGf,IAAIC,EAAkB,eACjBx7C,GADiB,GAEjBhK,GAELwkD,EAAmBgB,GACnBC,GAAgBD,GAChBf,GAAa,MACZ,CAACvhC,IAEJ,IAAMuiC,GAAkB,SAAAC,GAEpBA,EAAiB,0BACjBA,EAAiB,yBAAyBl3D,OAE1Cw2D,GAAa,GAAD,mBAAKtqC,IAAL,CAAgB,eAG9BpN,OAAOC,KAAKm4C,GAAkBzlD,KAAI,SAAAwN,GAChCs1C,EAAiBt1C,EAAO,IACxBg1C,EAAeh1C,EAAOi4C,EAAiBj4C,QAIrC23C,GAA6B,WAEjCnB,EADc,CAAC,wBAAyB,+BAIpC0B,GAAuB,SAAM3lD,GAAN,0BAAAyD,EAAAC,OAAA,oDACrB1D,EAAK+L,OADgB,+CAEL/L,EAAK+L,OAFA,sEAEd6vB,EAFc,SAGZpF,OAAgC,kBAAhBoF,EAAMpF,MAHV,4EAAA/yB,EAAA,MAIHggD,GAAa7nB,EAAMpF,QAJhB,QAIvBoF,EAAMpF,MAJiB,uRAQtBx2B,EAAKw2B,MARiB,qCAAA/yB,EAAA,MASNggD,GACjBvuD,EAAK,YAAgBoZ,OAAOlE,WAAWrU,QAVhB,QASzBiK,EAAKw2B,MAToB,wCAcpBx2B,GAdoB,4EAiBvB4lD,GAA0B,iCAAAniD,EAAAC,OAAA,mDACxB4hD,EACyC,SAA7CpwD,EAAK,YAAgBoZ,OAAOpE,aACxB21C,GAAqB,EACrBA,KAJwB,QAMxBgG,EACJ3wD,EACEkX,GAAqBI,GAAuBE,YAC1CkzC,IACA0F,WAVwB,IAa1BO,OAb0B,EAa1BA,EAAkB9V,YAbQ,uBAc5BxtC,EACEzS,EACE,uEAEF,CACEkB,QAAS,OACT80D,iBAAkB,MApBM,6BA0B9BrB,GAAa,GAETzkD,EAAO0/C,GACTxqD,EACA0qD,GACAC,GACAnlC,GACAF,EACAnoB,EACAE,EACAE,EACA4zC,IAGE7rB,GAAa6rB,EAxCa,wBAyCtB0f,EAAW/lD,EAAK+gD,oBAAoB9gD,KAAI,gBAAGxP,EAAH,EAAGA,GAAH,OAC1C,OAAFA,QAAE,IAAFA,OAAA,EAAAA,EAAI4jB,SAAS,YACTziB,QAAQJ,UACR+pD,EAAsB,CACpBh4C,UAAW,CACTo4C,IAAK,CAAClrD,SA9CY,aAAAgT,EAAA,MAmDtB7R,QAAQo0D,IAAID,IAnDU,eAqD5BxB,EAAe,CACbhhD,UAAU,eACLvD,EADI,CAGP+gD,oBAAqB/gD,EAAK+gD,oBACvBvzC,QAAO,qBAAGgM,cACVvZ,KAAI,cAAGxP,GAAH,qCAER+S,MACD,WACEjB,EAAgBzS,EAAE,0CAA2C,CAC3DkB,QAAS,YAEXuQ,EAAQsE,KAAK,CACXD,SAAU,iCACVjT,MAAO,CAAEssB,UxOlRS,QwOqRtB,WACE1c,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,UAEXyzD,GAAa,MA3EW,+BAiF1Bpe,EAjF0B,qCAAA5iC,EAAA,MAkFfkiD,GAAqB3lD,IAlFN,QAkF5BA,EAlF4B,eAqF9BskD,EAAe,CACb/gD,UAAU,eACLvD,EADI,CAGP+gD,oBAAqB/gD,EAAK+gD,oBACvBvzC,QAAO,qBAAGgM,cACVvZ,KAAI,cAAGxP,GAAH,qCAER+S,MACD,WACEjB,EACEzS,EAAE,kCAAD,OAAmCu2C,EAAS,SAAW,YACxD,CACEr1C,QAAS,YAGbuQ,EAAQsE,KAAK,CACXD,SAAU,iCACVjT,MAAO,CAAEssB,UxOrTW,QwOwTxB,WACE1c,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,UAEXyzD,GAAa,MA9Ga,uCA0L1BwB,GAA0B,SAC9BpE,EACAH,EACAwE,GAEAx0D,EAAQ,CACNlD,MAAO,2BACPuB,YAAaD,EAAE,iDACfG,iBAAkB,OAClBC,iBAAkB,YAEjBsT,MAAK,WACJshD,IAAwB,GACxB1B,EAAWvB,GP5TmB,SACpClC,EACAn4C,EACAo4C,EACAC,GAEA,IAAIsG,EAAiB,GAErB,GAAI3+C,IAAcgF,GAAuBC,aACvC05C,EAAiB/5C,GAAqB5E,GAAWo4C,QAC5C,GAAIp4C,IAAcgF,GAAuBE,WAAY,CAC1D,IAAM44C,EACyC,SAA7C3F,EAAK,YAAgBrxC,OAAOpE,aACxB21C,EAAqB,EACrBA,EACNsG,EACE/5C,GAAqB5E,GAAWo4C,GAAsB0F,QAExDa,EAAiB/5C,GAAqB5E,GAGxC,OAAIm4C,EAAMwG,GAAgBpW,WO0SjBqW,CACClxD,EACAsS,GACAo4C,GACAC,KAQF4B,GACEvsD,EACAwlB,GACAgnC,EACAC,GACA/B,GACAC,IAGF6C,GAAahB,GAEbn/C,EACEzS,EACE,kFAEF,CACEkB,QAAS,OACT80D,iBAAkB,MAIxBhB,IAAwB,IA1BtBA,IAAwB,MA4B3BrrC,OAAM,WACDysC,EN7OkB,SAC5B1+C,EACAk6C,EACAwD,EACAC,EACAzC,EACAb,EACAY,EACAd,EACAO,EACAC,GAEA,GAAI36C,IAAcgF,GAAuBC,aAAc,CACrD,IAAMo1C,EAAWF,EAAW0D,YAC5BH,EAAwBv4C,GAAgCk1C,IACxDY,EACEZ,EACAF,EAAWE,IAAaK,EAAgBL,IAAa,IAIzD,GAAIr6C,IAAcgF,GAAuBE,WAAY,CACnD,IAAMm1C,EAAWF,EAAW4D,UACtBc,EACJ15C,GAAgCg1C,EAAW0D,aACzCiB,EACF15C,GAA8By5C,GAAsBxE,GAEP,SAA3CF,EAAU,YAAgBz3C,cAAyBo8C,IAEvDnB,EAAsBmB,GAMpB7D,EACEZ,EAJW,oBAAbA,GACa,4BAAbA,EAIEF,EAAWE,IAAaM,EAAmBN,GAK3CF,EAAWE,IAAaK,EAAgBL,IAAa,IAK3Da,EAAahB,GM8LL6E,CACE/+C,GACAk6C,EACAwD,GACAC,GACAzC,GACAb,EACAY,EACAd,GACAO,EACAC,IAIJK,GACE9nC,GACAmnC,EACAY,EACAd,GACAQ,GACAD,EACAR,EACAl6C,GACAk7C,QAKF/nC,GAAc,SAAAu5B,GAClB8Q,GAAa,GAAD,mBAAKtqC,IAAL,CAAgBw5B,KAC5B2O,GACE3tD,EACAg/C,EACA1U,EACAujB,EACAC,GACArB,KAIE/mC,GAAiB,SAAA4rC,GACrB90D,EAAQ,CACNlD,MAAO,4CACPuB,YAAaD,EAAE,2DACfG,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJshD,IAAwB,GAExB,IACM2B,EADa,YAAO/rC,IACalN,QACrC,SAAApM,GAAI,OAAIA,IAASolD,KAEnBvB,GxOtfwB,WwOufxBD,GAAayB,GAEbvD,GACEhuD,EACAsxD,EACAhnB,EACAh4B,GACAk7C,GACAM,GACArB,GACAoB,EACAK,GAEFsD,GAAmBF,GAEnB1B,IAAwB,MAEzBrrC,OAAM,gBAGLoB,GAAiB,SAAAzZ,GACrB6jD,GAAoB7jD,IAGhBslD,GAAqB,SAAAvD,GAAoB,IAAD,EACtCwD,EAAO,sBAAkBxD,GACzBpzD,EAAW,0BAAsBozD,GAEvCc,EAAY,CAAC0C,EAAS52D,IACtBizD,GAAc,eACTrB,IADQ,mBAEVgF,EAAU,IAFA,cAGV52D,EAAc,IAHJ,MAOT62D,GAA8B,SAAAC,GAClC,IAAMvB,EACyC,SAA7CpwD,EAAK,YAAgBoZ,OAAOpE,aAA0B,EAAI,EAC5Di7C,GAAsB,GACtBnC,GAAc,eACT6D,EADQ,CAEXtB,UACEn5C,GAAqBI,GAAuBE,YAC1CkzC,IACA0F,OAIFwB,GAA+B,WACnC,MAAO,CACLlkD,iBAAkBA,GAClB8X,UAAWA,GACXC,YAAaA,GACbC,eAAgBA,GAChBC,eAAgBA,KAxehB,GA4eoCpZ,IAAMrQ,SAAS,IA5enD,qBA4eG21D,GA5eH,MA4eiBtsC,GA5ejB,MA8eEusC,GAAoC,SACxCrzB,EACAL,EACA2zB,EACAC,GAEA,IAAMvH,EAAQ,CAACsH,GACXJ,EAAc,eAAQlF,IACtBwF,GAAyB,EAI7B,IAAK,IAAIjvC,KAFLyb,EAAkB,GAAGgsB,EAAM95C,KAAN,UAAcohD,EAAd,YAAiC3zB,IAE5CqsB,EACZ,GAAKA,EAAMv2B,eAAelR,GAA1B,CAEA,IAAM2pC,EAAWlC,EAAMznC,GACjBnkB,EAAI,eAAQmB,EAAM2sD,IAExB,IAAK9tD,IAASA,EAAKua,QAAUva,EAAKg8C,WAShC,YARAxtC,EACEzS,EACE,0FAEF,CACEkB,QAAS,YAME,gBAAb6wD,IACEF,GAAWE,GACTF,GAAWE,GAAU33C,eAAiBnW,EAAKua,OAAOpE,eACpDi9C,GAAyB,GAG3BjF,EAAgBL,GAAU33C,eAAiBnW,EAAKua,OAAOpE,eAEvDi9C,GAAyB,IAI7BN,EAAc,eACTA,EADS,eAEXhF,EAFW,eAEK9tD,EAAKua,UAItB64C,GAA0BxC,GAAmBE,GAC/C+B,GAA4BC,GAI1BM,GAA0BxC,IAAoBE,GAChDnzD,EAAQ,CACNlD,MAAO,qDACPuB,YACE,mEACFE,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJojD,GAA4BC,GAC5BnE,GAAal2C,GAAuB06C,OAErCztC,OAAM,gBAIXupC,GAAc,eACT6D,IAGgB,SAAjBE,IAA4BlC,IAC9Be,KAEmB,SAAjBmB,IAA4BlC,IAC9BnC,GAAal2C,GAAuB06C,MAqIlChhD,GAAO,CACX,CACEgC,KAAM,UACN25C,SAAU,cACV9sD,UArIwB,WAC1B,IAAM4+B,EAAkBjZ,GAAUvoB,OAC5BmhC,EAAiB5Y,GAAUiZ,EAAkB,GAE7CyzB,EAAgB,aACpB9rC,SAAU,kBACR0rC,GACErzB,EACAL,EACA,cACA,qBAEDwzB,MAGL,OACE,6BACE,yBAAKrgD,OxOtpBmB,YwOspBX7D,IACX,kBAAC,GAAD,iBACMwkD,EADN,CAEE5sC,SAAUA,EACVC,gBAAiBA,GACjB5B,UAAWA,MAGd8a,EAAkB,GACjB,yBAAKltB,OxO/pBiB,YwO+pBT7D,IACX,kBAAC,GAAD,iBACMwkD,EADN,CAEErzD,KAAI,sBAAiBu/B,GACrB9Y,SAAUA,EACVC,gBAAiBA,QAsGd4sC,IAEb,CACEn/C,KAAM,cACN25C,SAAU,kBACV9sD,UAnG4B,WAC9B,IAAM4+B,EAAkBjZ,GAAUvoB,OAC5BmhC,EAAiB5Y,GAAUiZ,EAAkB,GAE7C2zB,EAAoB,aACxBhsC,SAAU,kBACR0rC,GACErzB,EACAL,EACA,kBACA,kBAEDwzB,MAGL,OACE,6BACE,yBAAKrgD,OxO7rBmB,YwO6rBX7D,IACX,kBAAC,GAAD,iBACM0kD,EADN,CAEE9sC,SAAUA,EACVC,gBAAiBA,OAGpBkZ,EAAkB,GACjB,yBAAKltB,OxOrsBiB,YwOqsBT7D,IACX,kBAAC,GAAD,iBACM0kD,EADN,CAEE9sC,SAAUA,EACVzmB,KAAI,0BAAqBu/B,GACzB7Y,gBAAiBA,QAqEd8sC,IAEb,CACEr/C,KAAM,WACN25C,SAAU,eACV9sD,UACE,kBAAC,GAAD,CACEumB,SAAU,SAAChN,EAAQuzC,GAAc,IAAD,EACxB33C,EAAehV,EAAK,YAAgBoZ,OAAOpE,aAC3Cm7C,EACJj5C,GAAqB5E,IAAWo4C,IAC9B0F,EACe,SAAjBp7C,EACI21C,GAAqB,EACrBA,GACc,qBAAhBwF,GAUFF,GAREG,EADmB,SAAjBp7C,EACe,EAEb21C,GACe,EAEA,GAKvBmD,GAAc,eACTrB,IADQ,mBAEVE,EAFU,eAEMvzC,IAFN,4BAGE+2C,GAHF,0BAKTj5C,GAAqBI,GAAuBE,YAC1CkzC,IACA0F,IAPO,KASQ,SAAjByB,IAA4BlC,KAC9Be,KACAhB,IAAmB,IAEA,SAAjBmC,IAA4BlC,KAC9BnC,GAAal2C,GAAuBE,YACpCk4C,IAAmB,KAGvBnoC,cAAe,SAACnO,EAAQuzC,GACtBkD,GAAsB,eACjB5C,GADgB,eAElBN,EAAWvzC,MAGhBkO,iBAAkBojC,GAClBplC,SAAUA,EACVC,gBAAiBA,KAGrB2L,QAAS,CACP,CACE53B,MAAO,gBACP83B,YAAa,sBAEf,CACE93B,MAAO,cACP83B,YAAa,6BAEf,CACE93B,MAAO,OACP83B,YAAa,yBAInB,CACEpe,KAAM,SACN25C,SAAU,aACV9sD,UACE,kBAAC,GAAD,CACEumB,SAAU,SAAChN,EAAQuzC,GAAc,IAAD,EACxB2F,EACyC,SAA7CtyD,EAAK,YAAgBoZ,OAAOpE,aACxB21C,GAAqB,EACrBA,GACNmD,GAAc,eACTrB,IADQ,mBAEVE,EAFU,eAEMvzC,IAFN,0BAITlC,GAAqB5E,IAAWo4C,IAC9B4H,IALO,KAQQ,SAAjBT,IAA4BlC,IAC9Be,KAEmB,SAAjBmB,IAA4BlC,IAC9BnC,GAAal2C,GAAuBV,aAGxCulB,OACEn8B,EAAK,aACwC,SAA7CA,EAAK,YAAgBoZ,OAAOpE,aAE9BonB,iBAAkBsuB,GAClBpjC,iBAAkBqjC,GAClBrlC,SAAUA,EACVC,gBAAiBA,KAGrB2L,QAvKqB,WACvB,IAAIA,EAAU,GAEVw5B,KAAyB/1C,GAC3Buc,EAAU,CACR,CACE53B,MAAO,eACP83B,YAAa,iDAEf,CACE93B,MAAO,eACP83B,YAAa,uDAGRs5B,KAAyB/1C,KAClCuc,EAAU,CACR,CACE53B,MAAO,gCACP83B,YACE,+DAEJ,CACE93B,MAAO,eACP83B,YAAa,wDAKnB,IAAMrc,EAAW,eAAQ/U,EAAK,aAqB9B,OAnBE+U,GACAA,EAAYqE,QACwB,YAApCrE,EAAYqE,OAAOpE,eAEf01C,KAAyB/1C,KAC3Buc,EAAU,CACR,CACE53B,MAAO,uBACP83B,YAAa,8CAKnBF,EAAQqhC,QAAQ,CACdj5D,MAAO,cACP83B,YAAa,kCAIVF,EAsHIshC,IAEX,CACEx/C,KAAM,UACN25C,SAAU,aACV9sD,UACE,kBAAC,GAAD,iBACM+xD,KADN,CAEExrC,SAAU,SAAAhN,GACR00C,GAAc,eAAKrB,GAAN,CAAkB71C,WAAW,eAAMwC,MAC3B,SAAjBy4C,IAA4BlC,IAC9Be,KAEmB,SAAjBmB,IAA4BlC,IAC9BnC,GAAal2C,GAAuBR,4BAGxCyO,gBAAiBA,GACjBD,SAAUA,MAIhB,CACEtS,KAAM,yBACN25C,SAAU,4BACV9sD,UACE,kBAAC,GAAD,CACEumB,SAAU,SAAAhN,GACR00C,GAAc,eACTrB,GADQ,CAEX31C,0BAA0B,eAAMsC,MAEb,SAAjBy4C,IAA4BlC,IAC9Be,KAEmB,SAAjBmB,IAA4BlC,IAC9BnC,GAAal2C,GAAuBN,kBAGxCuO,gBAAiBA,GACjBD,SAAUA,KAIhB,CACEtS,KAAM,cACN25C,SAAU,kBACV9sD,UACE,kBAAC,GAAD,CACEumB,SAAU,SAAAhN,GACR00C,GAAc,eACTrB,GADQ,CAEXz1C,gBAAgB,eAAMoC,MAEH,SAAjBy4C,IAA4BlC,IAC9Be,MAEJnrC,gBAAiBA,OAsBzB,OACE,oCACE,kBAAC,GAAD,MACA,kBAAC,GAAD,CACEvjB,UAAWA,EACXC,gBAAiBvH,EAAQuH,kBAE3B,yBAAK7G,UAAWV,EAAQc,MACtB,kBAAC,GAAD,CACE8W,UAAWA,GACXhZ,MACEgsB,IAAa6rB,EACT,gBACAA,EACA,gBACA,sBAEN5+B,UAAW,SAAAM,GACT,OCz9BsB,SAChC85C,EACAnnC,EACAilC,EACAgC,EACAn6C,EACAo4C,EACAC,GAEA,IAAiB,gBAAbgC,GAA2C,oBAAbA,IAC5BnnC,EAAUvoB,OAAS,EAAG,CACxB,IAAMw1D,EAAsB,UAAM9F,EAAN,cAC5B,IACGlC,EAAMgI,IACPhI,EAAMgI,GAAwB5X,aAC7B4R,EAAWgG,KACXr6C,OAAOC,KAAKo0C,EAAWgG,IAAyBx1D,OAEjD,OAAO,EAKb,GAAiB,iBAAb0vD,EAA6B,CAC/B,IAAM1B,EACJ/zC,GAAqBI,GAAuBC,cAC1CmzC,GAEJ,QAAK+B,EAAW0D,gBAEb1F,EAAMQ,IACPR,EAAMQ,GAAkBpQ,aACvB4R,EAAWxB,IAOhB,GAAiB,eAAb0B,EAA2B,CAC7B,IAAKlC,EAAK,YAAiB,OAAO,EAClC,IAAI2F,EAC2C,SAA7C3F,EAAK,YAAgBrxC,OAAOpE,aACxB21C,EAAqB,EACrBA,EACAU,EACJn0C,GAAqBI,GAAuBE,YAC1CkzC,GACA0F,GAcJ,OAZE34C,GAAgCvB,mBAAqBw0C,IAGnD0F,EAD+C,SAA7C3F,EAAK,YAAgBrxC,OAAOpE,aACb,EAEb21C,EACe,EAEA,KAIlB8B,EAAW4D,cAEb5F,EAAMY,IACPZ,EAAMY,GAAgBxQ,aACrB4R,EAAWpB,IAOhB,SAAKZ,EAAMkC,IAAalC,EAAMkC,GAAU9R,aAAe4R,EAAWE,IDg5BjD+F,CACL7/C,EAAI85C,SACJnnC,GACAxlB,EACAysD,GACAn6C,EACAo4C,GACAC,KAGJ35C,KAAMA,GACNwB,OAjqByB,SAACpD,EAAOo9C,GACvC,IACGD,GACCvsD,EACAwlB,GACAgnC,EACAC,GACA/B,GACAC,IAYF,OATAt9C,EACEzS,EACE,kFAEF,CACEkB,QAAS,OACT80D,iBAAkB,OAGf,EAET,IAAIjE,EAAWz1C,GAAqB5E,IAEpC,GAAIA,KAAcgF,GAAuBC,aACvCo1C,EAAWA,EAASjC,SACf,GAAIp4C,KAAcgF,GAAuBE,WAC9C,GACExX,EAAM+U,aACoC,SAA1C/U,EAAM+U,YAAYqE,OAAOpE,aACzB,CACA,IAAIo2C,EAA2BT,GAC/BS,IACAuB,EAAWA,EAASjC,IAAsBU,QAE1CuB,EAAWA,EAASjC,IAAsBC,KNzMlB,SAC9Br4C,EACAk6C,EACA9B,EACAC,EACA8B,GAEA,GAAIn6C,IAAck6C,EAAc,OAAO,EAEvC,GACEl6C,IAAcgF,GAAuBC,cACrCk1C,EAAW0D,aACX1D,EAAW0D,cACTj5C,GAAqB5E,GAAWo4C,GAElC,OAAO,EAGT,GAAI+B,GAAcA,EAAU,YAAiB,CAC3C,IAAI2D,EACyC,SAA3C3D,EAAU,YAAgBz3C,aACtB21C,EAAqB,EACrBA,EAiBN,GAf+B,qBAA3B8B,EAAW0D,cAQTC,EAND3D,EAAU,aACgC,SAA3CA,EAAU,YAAgBz3C,cAItB21C,EACe,EAHF,GAWnBr4C,IAAcgF,GAAuBE,YACrCi1C,EAAW4D,WACX5D,EAAW4D,YACTn5C,GAAqB5E,GAAWo4C,GAAsB0F,GAExD,OAAO,EAIX,OAAO,EM6JHY,CACE1+C,GACAk6C,EACA9B,GACAC,GACA8B,IAQFM,GACE/sD,EACA2sD,EACAr6C,GACAk6C,EACAC,GACAO,EACAC,GACAznC,IAGFurC,GAAwBpE,EAAUH,GAAc,GAIlDgB,GAAahB,GApBXuE,GAAwBpE,EAAUH,GAAc,MAonB9C,kBAAC,GAAD,CACEl6C,UAAWA,GACX0e,aAjDF1e,KAAcgF,GAAuBC,aAChCmzC,GACEp4C,KAAcgF,GAAuBE,WACvCmzC,QADF,EAgDD35C,KAAMA,GACNwB,OA5C4B,SAAA/N,GAC9B6N,KAAcgF,GAAuBC,aACvCy4C,GAAwBlyD,SAAS2G,EAAEC,OAAO1H,QACjCsV,KAAcgF,GAAuBE,YAC9Cy4C,GAAsBnyD,SAAS2G,EAAEC,OAAO1H,WA2CtC,yBAAK5B,UAAWV,EAAQgG,SACtB,yBAAKtF,UAAWV,EAAQ4zD,YACtB,kBAAC,GAAD,CAAWt9C,KAAMA,GAAMsB,UAAWA,Y,4qDEp/BvC,IAAMqgD,GAAuB1rD,KAAH,MAQpB2rD,GAAuB3rD,KAAH,MAsBpB4rD,GAAuB5rD,KAAH,MClBpB6rD,GAAuC,SAClDrI,EACAE,EACAnlC,EACAF,EACAnoB,EACAC,EACAE,EACAC,EACA4zC,GAEA,IAAM1S,EAAkBjZ,EAAUvoB,OAC9BmhC,GAAiB,EACjBK,EAAkB,IAAGL,EAAiB5Y,EAAUiZ,EAAkB,IAEtE,IAAM1pB,EAAc61C,GAAgBH,GAC9Bt1C,EAAe,eAAQs1C,EAAK,gBAAoBrxC,QAChDpC,EAAe,eAAQyzC,EAAK,gBAAoBrxC,QAChDxC,EAAU,eAAQ6zC,EAAK,WAAerxC,QACtColB,EAAiB,eAAQisB,EAAK,kBAAsBrxC,QACpDyxC,EAAcC,GAAgBL,GAEhC5zC,EAASqqB,GAAU5b,EAAU1O,EAAYwnB,GACzCC,EzHCmB,SAAC/Y,EAAUkZ,EAAmBJ,GACrD,OAAOI,EAAkBH,cAActzB,KAAI,SAAAmB,GACzC,IAIoB,EAKb,EARHmxB,EAAS8D,GAA0Bj1B,GACnCk1B,EAAuB,GAEvBhD,GACkB,kCALF,MAMSlyB,EAAKkyB,GAAgB9kC,OAD5B,mCALF,MAOe4S,EAAKkyB,GAAgBvjC,aAFtDumC,EAAoB,IAKA,kCAVF,MAWS,MADP,mCAVF,MAYe,MAFjCA,EAAoB,GAMtB,IAAMC,EAAQ/b,GAAYpZ,EAAKwyB,UAAY,CAAEnjC,GAAIuC,SAASoO,EAAK3Q,KAAQ,GAEvE,OAAO,eACF8lC,EADL,CAEE/nC,MAAO4S,EAAK5S,MACZuB,YAAaqR,EAAKrR,aAEfumC,EALL,CAME/D,OAAQA,OyH3BQ2X,CAAiB1vB,EAAUkZ,EAAmBJ,GAC9DnnB,EAAe4qB,GAAgBvc,EAAUtO,GACvCg0C,EAAa,CACjBl9B,gBACE28B,EAAMhsD,cAAcH,sBAAsByvB,SAC1C08B,EAAMhsD,cAAcH,sBAAsB/C,IAGxC8vD,EACJ9kB,GAA0BD,GAA4B9uB,YACpDmzC,GAEEnzC,EAAU,eAAQizC,EAAMY,GAAgBjyC,QACxCikB,EAAS01B,GAAWv7C,GAEpBuzC,EAAWN,EAAK,YAAgBrxC,OAAOlE,WAAWyD,KACpD,CAAE2oB,MAAOmpB,EAAK,YAAgBrxC,OAAOlE,WAAWyD,MAChD,UAEG5D,EAAYG,kBACZH,EAAYC,aAEnB,IAAIw2C,EAAmBruD,EAAcF,OACjC,CACEE,cAAeA,GAEjB,GAEA61D,EAA0B51D,EAAqBH,OACjD,CACAG,qBAAsBA,GAEtB,GAEE61D,EAA8B31D,EAAyBL,OACvD,CAAEK,yBAA0BA,GAC5B,GAEAquD,EAAsBpuD,EAAoBN,OAC1C,CAAE2uD,iBAAkBruD,GACpB,GAEEsuD,EAAsB78C,KAAKU,MAC/BV,KAAKC,UAAU8F,EAAY82C,sBAC3BvzC,QAAO,gBAAG4yB,EAAH,EAAGA,YAAaC,EAAhB,EAAgBA,UAAhB,QAAkCD,KAAiBC,KAmB5D,cAjBOp2B,EAAY82C,oBAEf1a,WACKp8B,EAAYxZ,GACnBwZ,EAAYE,YAAc,GAC1B4B,EAASA,EAAO9L,KAAI,SAAA27B,GAAK,sBAAUA,EAAV,CAAiBnrC,GAAI,UAC9C8iC,EAAgBA,EAActzB,KAAI,SAAA47B,GAAY,sBAAUA,EAAV,CAAwBprC,GAAI,UAC1E0b,EAAeA,EAAalM,KAAI,SAAA6e,GAAW,sBACtCA,EADsC,CAEzCruB,GAAI,UAENiwD,EAAmB,GACnBwH,EAA0B,GAC1BC,EAA8B,GAC9BtH,EAAsB,IAGjB,eACFZ,EADL,GAEKC,EAFL,CAGE9nC,cAAc,eACTnO,EADQ,GAER+2C,GAA8BrB,EAAOrsB,GAF7B,GAGRjpB,EAHQ,GAIR42C,GAAkCtB,EAAOrsB,GAJjC,GAKRysB,EALQ,CAMXxtB,OAAQA,EACR61B,wBAAyBj8C,IAE3BJ,OAAQA,GACL20C,EAbL,CAcEntB,cAAeA,GACZ20B,EAfL,GAgBKC,EAhBL,GAiBKtH,EAjBL,CAkBEE,yBAIEjB,GAAkB,SAAAH,GACtB,IAAMwB,EAAiB,eAAQxB,EAAK,YAAgBrxC,QAC9CioB,EAAQ4qB,EAAkB1wD,GAAK,CAAEA,GAAI0wD,EAAkB1wD,IAAO,GAEpE,OAAO,eACF8lC,EADL,CAEE/nC,MAAO2yD,EAAkB3yD,MACzB2b,YAAag3C,EAAkBh3C,YAC/B6xB,aAAchpC,SAASmuD,EAAkBvlC,QACzCjW,SAAUw7C,EAAkBx7C,SAC5BoS,SAAU9O,IAAOk4C,EAAkB52C,aAAaC,WAAW4J,OACzD,cAEF4D,OAAQmpC,EAAkB52C,aAAaE,QACnCxB,IAAOk4C,EAAkB52C,aAAaE,SAAS2J,OAAO,cACtD,KACJ0jB,YAAa7uB,IAAOk4C,EAAkBtpB,cAAczjB,OAAO,cAC3D4jB,aAAc/uB,IAAOk4C,EAAkBppB,gBAAgB3jB,OAAO,cAC9D3Z,WAAY0mD,EAAkB1mD,WAC9BohB,UAAWslC,EAAkBtlC,UAC7BvtB,MAAM6yD,EAAkB7yD,MACxByyD,oBAAqBI,EAAkB3oB,iBAAiBv4B,KACtD,gBAAGuK,EAAH,EAAGA,UAAWC,EAAd,EAAcA,QAASha,EAAvB,EAAuBA,GAAI+oB,EAA3B,EAA2BA,WAA3B,MAA6C,CAC3C/oB,KACA2vC,YAAW,OAAE51B,QAAF,IAAEA,OAAF,EAAEA,EAAW4J,OAAO,cAC/BisB,UAAS,OAAE51B,QAAF,IAAEA,OAAF,EAAEA,EAAS2J,OAAO,cAC3BoF,oBAMFwnC,GAAgC,SAACrB,EAAOrsB,GAAoB,IAAD,IAG/D,IAAKA,EACH,OAAO,EAAP,gCAHkB,MAIS,MAD3B,kCAHkB,MAKc,MAFhC,EAKF,IAAMiuB,EAAyB,eAC1B5B,EAAM,eAAD,OAAgBrsB,IAAkBhlB,QAG5C,OAAO,EAAP,gCAZoB,MAaOizC,EAA0B/yD,OADrD,kCAZoB,MAcY+yD,EAA0B9mD,YAF1D,GAMIwmD,GAAoC,SAACtB,EAAOrsB,GAChD,IAEqB,EAArB,IAAKA,EACH,OAAO,EAAP,mCAHkB,MAIY,MAD9B,sCAHkB,MAKkB,MAFpC,gCAHkB,MAMY,IAH9B,mCAHkB,MAOe,IAJjC,EAQF,IAAMiuB,EAAyB,eAC1B5B,EAAM,mBAAD,OAAoBrsB,IAAkBhlB,QAE1CkzC,EAA0B,GAQhC,OANAl0C,OAAOC,KAAKg0C,GAA2BthD,KACrC,SAAAwN,GAAK,OACF+zC,EAAwB,GAAD,OAAI/zC,GAAJ,OAlBR,OAmBd8zC,EAA0B9zC,MAGzB+zC,GAGHxB,GAAkB,SAAAL,GACtB,MAAO,CACL5qB,kBAAmB4qB,EAAK,sBAEtBrxC,OAAOymB,kBAAkB90B,KAAI,SAAAmB,GAAI,OAAIpO,SAASoO,EAAK3Q,SAmBnDw3D,GAAa,SAAAv7C,GACjB,GAAIA,EAAWlB,WAAY,CACzB,IAAI81C,EAAiB,GAIrB,OAHA50C,EAAWlB,WAAWvL,KAAI,SAAAmB,GACxBkgD,EAAc,sBAAOA,GAAP,YAA0BjrB,GAA0Bj1B,QAE7DkgD,EACF,OAAI50C,EAAWhC,KAtBC,SAAAA,GACvB,IAAM6nB,EAAS,GAWf,OATA7nB,EAAK6d,SAAQ,SAAA3R,GACXyf,GAA0Bzf,GAAK2R,SAAQ,SAAAuO,GACrCvE,EAAO1sB,KAAP,eACKixB,EADL,CAEElgB,IAAKA,EAAIA,aAKR2b,EAWE81B,CAAiB37C,EAAWhC,MAE5B2rB,GAA0B3pB,ICnOxB+0C,GAAsB,SACjC9B,EACAjlC,EACAgnC,EACAC,EACA9B,GAIA,IAFA,IAAI+B,EAAmBF,EAEhBE,EAAmB,GAAG,CAC3B,IAAIC,EAAWpmB,GAA0BmmB,EAAmB,GAEpC,kBAAbC,IACTA,EAAWA,EAAShC,IAGtB,IAAMlsB,EAAkBjZ,EAAUvoB,OAC5BmhC,EAAiB5Y,EAAUiZ,EAAkB,GAEnD,GAAIA,EAAkB,GAAkB,eAAbkuB,EAA2B,CACpD,IAAME,EAA2BpC,EAAMkC,GAAUvzC,OACjD,IAAK,IAAI4J,KAAK6pC,EAAyBh2C,OAAQ,CAC7C,GAAKg2C,EAAyBh2C,OAAOqd,eAAelR,GAEpD,IADe6pC,EAAyBh2C,OAAOmM,GAAGob,GACtC9kC,MAAO,OAAO,GAI9B,GAAImlC,EAAkB,GAAkB,sBAAbkuB,EAAkC,CAC3D,IAAMyG,EAAkC3I,EAAMkC,GAAUvzC,OACxD,IAAK,IAAI4J,KAAKowC,EAAgC/0B,cAAe,CAC3D,GAAK+0B,EAAgC/0B,cAAcnK,eAAelR,GAElE,IADsBowC,EAAgC/0B,cAAcrb,GAAGob,GACpD9kC,MAAO,OAAO,GAIrC,GACEmlC,EAAkB,IACJ,gBAAbkuB,GAA2C,oBAAbA,GAC/B,CACA,IAAMG,EAAsB,UAAMH,EAAN,YAAkBvuB,GAC9C,GACEK,EAAkB,GAClBgsB,EAAMqC,KACLrC,EAAMqC,GAAwBjS,aAC5BziC,OAAOC,KAAKo0C,EAAWK,IAAyB7vD,QAEnD,OAAO,EAIX,GACEwtD,EAAMkC,KACLlC,EAAMkC,GAAU9R,aAAe4R,EAAWE,IAE3C,OAAO,EAGTD,IAGF,OAAO,GCjEIx0D,GAAYC,aAAW,SAAAC,GAAK,MAAG,CAC1CoD,KAAK,aACH0K,UAAW,oBACX/F,MAAO,OACPC,QAAS,QACRhI,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OACPI,cAAe,SACfspC,UAAW,WAGfnpC,QAAQ,aACNP,MAAO,OACPC,QAAS,OACTC,eAAgB,UACfjI,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OACPI,cAAe,WAGnB+tD,WAAW,aACTnuD,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,SAIX8B,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,uBC7BGmzD,GCg5BAtnD,aAjCS,SAAAtO,GACtB,OAAO,eACFA,EAAMoB,KADX,CAEEJ,cAAehB,EAAMgB,cACrBtB,cAAeM,EAAMsB,yBAAyB5B,cAC9CC,qBAAsBK,EAAMsB,yBAAyB3B,qBACrDE,yBACEG,EAAMsB,yBAAyBzB,yBACjCC,oBAAqBE,EAAMsB,yBAAyBxB,yBAI7B,SAAAyO,GAAQ,MAAK,CACtC+iD,YAAa,SAAAtE,GACXz+C,EAASgjD,KAAO,WAAP,cAAWvE,MAEtByD,WAAY,SAAArvD,GACVmN,EAASwuC,aAAO37C,KAElByrC,qBAAsB,SAACzrC,EAAM0Z,EAAOvb,GAClCgP,EAASwG,aAAO3T,EAAM0Z,EAAOvb,KAE/B6wD,iBAAkB,SAAChvD,EAAM41B,GACvBzoB,EAASkjD,aAAiBrwD,EAAM41B,KAElC84B,eAAgB,SAAC1uD,EAAMiM,GACrBkB,EAASijD,aAAWpwD,EAAMiM,KAE5BqkD,mBAAoB,WAClBnjD,E5Ih3BK,CAAErO,KtIzBkB,6BkR64BdoO,EAt0Ba,SAAC,GAOtB,IAAD,EANJjB,EAMI,EANJA,KACA0mC,EAKI,EALJA,yBACAxjB,EAII,EAJJA,QACAmjB,EAGI,EAHJA,OACAxtB,EAEI,EAFJA,UACG3jB,EACC,mFACEtF,EAAUxC,KACVmU,EAAUC,cAFZ,EAGQ3R,cAALC,EAHH,oBAIIyS,EAAoBC,wBAApBD,gBACF7Q,EAAU+P,IAAMsX,WAAW/mB,GAL7B,EAO0BiQ,YAAY6lD,IAAnCU,EAPH,sBAQ0BvmD,YAAY8lD,IAAnCU,EARH,sBASiCxmD,YACnC24C,IADK8N,EATH,sBAa8BjnD,IAAMrQ,UAAS,GAb7C,mBAaG8F,EAbH,KAacutD,EAbd,OAc4BhjD,IAAMrQ,UAAS,GAd3C,mBAcGopB,EAdH,KAcakqC,EAdb,OAesBjjD,IAAMrQ,UAAS,GAAlCuzD,EAfH,sBAgBoDljD,IAAMrQ,UAAS,GAhBnE,mBAgBGyzD,EAhBH,KAgByBC,EAhBzB,OAkB8BrjD,IAAMrQ,SAAS,GAlB7C,mBAkBGoW,EAlBH,KAkBck7C,EAlBd,OAmB2BjhD,IAAMrQ,SAAS,GAnB1C,uBAoBgDqQ,IAAMrQ,SAAS,IApB/D,mBAoBGyuD,EApBH,KAoBuBsF,EApBvB,OAsB4C1jD,IAAMrQ,S/OpGxB,W+O8E1B,oBAsBGwR,GAtBH,MAsBqBqiD,GAtBrB,SAyB8BxjD,IAAMrQ,SAAS,C/OvGnB,Y+O8E1B,qBAyBGspB,GAzBH,MAyBcsqC,GAzBd,SA2B0CvjD,IAAMrQ,SAAN,eACzCkqC,KA5BD,qBA2BG4mB,GA3BH,MA2BoBsC,GA3BpB,SA8BgC/iD,IAAMrQ,SAAS,IA9B/C,qBA8BGuwD,GA9BH,MA8BeqB,GA9Bf,SAgCsBvhD,IAAMrQ,SAxCZ,WAQhB,qBAgCG9C,GAhCH,MAgCUq6D,GAhCV,SAiCgClnD,IAAMrQ,SAAS,IAjC/C,qBAoCFqxD,IApCE,YA8CAvtD,EAVFutD,gBACAwB,GASE/uD,EATF+uD,YACAb,GAQEluD,EARFkuD,WACA/wD,GAOE6C,EAPF7C,cACAC,GAME4C,EANF5C,qBACAktC,GAKEtqC,EALFsqC,qBACAujB,GAIE7tD,EAJF6tD,iBACAvwD,GAGE0C,EAHF1C,yBACAC,GAEEyC,EAFFzC,oBACA4xD,GACEnvD,EADFmvD,mBAGF5iD,IAAM+C,WAAU,WAMd,GALA4gD,KACAf,KACAW,GAAa,C/OjIe,Y+OkI5BR,GAAmB,eAAKlpB,KAEpBpY,EACFuhC,GAAa,OADf,CAKIzkD,IACF0kD,GAAY,GACZ1B,GAAc,eACThjD,EADQ,CAEXulD,UACE9pB,GAA0BD,GAA4B9uB,YACpDg6B,MAGNye,EAAsBze,IAGxB,IAAI8e,EAAkB,eACjBlqB,GADiB,GAEjBt7B,GAGLwkD,GAAmBgB,GACnBC,GAAgBD,GAChBf,GAAa,MACZ,CAACvhC,IAEJ,IAAMsiC,GAAqB/jD,IAAMmnD,SAAQ,iCACpCttB,GADoC,GAEpCt7B,KACD,CAACA,IAELyB,IAAM+C,WAAU,WAAO,IAAD,GACpB,OAAIghD,SAAJ,IAAIA,QAAJ,YAAIA,GAAoBv7C,mBAAxB,aAAI,EAAiC3b,QACnCq6D,GAASnD,GAAmBv7C,YAAY3b,SAEzC,QAACk3D,SAAD,IAACA,QAAD,YAACA,GAAoBv7C,mBAArB,aAAC,EAAiC3b,QAErC,IAAMm3D,GAAkB,SAAAC,GAEpBA,EAAiB,0BACjBA,EAAiB,yBAAyBl3D,OAE1Cw2D,GAAa,GAAD,mBAAKtqC,IAAL,CAAgB,eAG9BpN,OAAOC,KAAKm4C,GAAkBzlD,KAAI,SAAAwN,GAChCs1C,GAAiBt1C,EAAO,IACxBg1C,GAAeh1C,EAAOi4C,EAAiBj4C,QAIrC23C,GAA6B,WAEjCnB,GADc,CAAC,wBAAyB,+BAIpC0B,GAAuB,SAAM3lD,GAAN,0BAAAyD,EAAAC,OAAA,oDACrB1D,EAAK+L,OADgB,+CAEL/L,EAAK+L,OAFA,sEAEd6vB,EAFc,SAGZpF,OAAgC,kBAAhBoF,EAAMpF,MAHV,4EAAA/yB,EAAA,MAIHggD,GAAa7nB,EAAMpF,QAJhB,QAIvBoF,EAAMpF,MAJiB,uRAQtBx2B,EAAKw2B,MARiB,qCAAA/yB,EAAA,MASNggD,GACjBvuD,EAAK,YAAgBoZ,OAAOlE,WAAWrU,QAVhB,QASzBiK,EAAKw2B,MAToB,wCAcpBx2B,GAdoB,4EAiBvB4lD,GAA0B,6BAAAniD,EAAAC,OAAA,oDAE5BxO,EACEumC,GAA0BD,GAA4B9uB,YACpDmzC,IAIe9P,WARS,uBAS5BxtC,EACEzS,EACE,uEAEF,CACEkB,QAAS,OACT80D,iBAAkB,MAfM,6BAqB9BrB,GAAa,GAETzkD,EAAOgoD,GACT9yD,EACA2qD,EACAnlC,GACAF,EACAnoB,GACAC,GACAE,GACAC,GACA4zC,IAGE7rB,GAAa6rB,EAnCa,wBAoCtBwiB,EAAgC7oD,EAAK+gD,oBAAoB9gD,KAC7D,gBAAGxP,EAAH,EAAGA,GAAH,OACI,OAAFA,QAAE,IAAFA,OAAA,EAAAA,EAAI4jB,SAAS,YACTziB,QAAQJ,UACRk3D,EAA2B,CAAEnlD,UAAW,CAAE9S,WAxCtB,aAAAgT,EAAA,MA2CtB7R,QAAQo0D,IAAI6C,IA3CU,eA6C5BJ,EAAoB,CAClBllD,UAAU,eACLvD,EADI,CAEP+gD,oBAAqB/gD,EAAK+gD,oBACvBvzC,QAAO,qBAAGgM,cACVvZ,KAAI,cAAGxP,GAAH,qCAER+S,MACD,WACEjB,EAAgBzS,EAAE,+CAAgD,CAChEkB,QAAS,YAEXuQ,EAAQsE,KAAK,CACXD,SAAU,iCACVjT,MAAO,CAAEssB,UzHvQa,QyH0Q1B,WACE1c,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,UAEXyzD,GAAa,MAlEW,+BAwE1Bpe,EAxE0B,qCAAA5iC,EAAA,MAwELkiD,GAAqB3lD,IAxEhB,QAwElBA,EAxEkB,eA0E9BwoD,EAAoB,CAClBjlD,UAAU,eACLvD,EADI,CAGP+gD,oBAAqB/gD,EAAK+gD,oBACvBvzC,QAAO,qBAAGgM,cACVvZ,KAAI,cAAGxP,GAAH,qCAER+S,MACD,WACEjB,EACEzS,EAAE,uCAAD,OAEGu2C,EAAS,SAAW,YAGxB,CACEr1C,QAAS,YAGbuQ,EAAQsE,KAAK,CACXD,SAAU,iCACVjT,MAAO,CAAEssB,UzH5Se,QyH+S5B,WACE1c,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,UAEXyzD,GAAa,MAvGa,uCA4G1B7pC,GAAiB,SAAA4rC,GACrB90D,EAAQ,CACNlD,MAAO,4CACPuB,YAAaD,EAAE,2DACfG,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJshD,GAAwB,GAExB,IACM2B,EADa,YAAO/rC,IACalN,QACrC,SAAApM,GAAI,OAAIA,IAASolD,KAEnBvB,G/OxUwB,W+OyUxBD,GAAayB,GAEbvD,GACEhuD,EACAsxD,EACAhnB,GACAh4B,EACAk7C,EACAM,GACArB,GACAoB,EACAK,ICjTiC,SACzCzD,EACAwD,EACA3jB,EACAh4B,EACAk7C,EACAM,EACArB,EACAoB,EACAK,GAEA,IAAI7vB,EAAa,YAAOosB,EAAMpsB,cAAcjlB,OAAOilB,eAOnDiM,EAAqB,gBAAiB,gBANtCjM,EAAgBA,EAActzB,KAAI,SAAAmB,GAChC,OAAO,eACFA,EADL,eAEG+hD,EAAkB,WAInBxD,EAAK,cAAkBrxC,OAAOilB,cAAcphC,SAC1CqV,IAAcgF,GAAuBknB,mBACvCgvB,EAAal7C,GAEfw7C,EAAc,eACTrB,EADQ,CAEXjuB,kBAAmB,CACjBH,cAAeA,MAGnB6vB,EAAW,sBDsRP0F,CACE5zD,EACAsxD,EACAhnB,GACAh4B,EACAk7C,EACAM,GACArB,GACAoB,EACAK,IAEFsD,GAAmBF,GAEnB1B,GAAwB,MAEzBrrC,OAAM,gBAGLitC,GAAqB,SAAAvD,GAAoB,IAAD,EACtCwD,EAAO,sBAAkBxD,GACzBpzD,EAAW,0BAAsBozD,GAEvCc,GAAY,CAAC0C,EAAS52D,IACtBizD,GAAc,eACTrB,IADQ,mBAEVgF,EAAU,IAFA,cAGV52D,EAAc,IAHJ,MA6DTk2D,GAA0B,SAC9BpE,EACAH,EACAwE,GAEAx0D,EAAQ,CACNlD,MAAO,2BACPuB,YAAaD,EAAE,iDACfG,iBAAkB,OAClBC,iBAAkB,YAEjBsT,MAAK,WACJshD,GAAwB,GACxB1B,GAAWvB,GHtXmB,SACpClC,EACAn4C,EACAq4C,GAUA,OAAIF,EANAn4C,IAAcg0B,GAA4B9uB,WAC3B+uB,GAA0Bj0B,GAAWq4C,GAErCpkB,GAA0Bj0B,IAGnBuoC,WG2WfqW,CAAuBlxD,EAAOsS,EAAWq4C,IAM5C4B,GACEvsD,EACAwlB,GACAgnC,EACAC,GACA9B,GAGF6C,EAAahB,GAEbn/C,EACEzS,EACE,kFAEF,CACEkB,QAAS,OACT80D,iBAAkB,MAKxBhB,GAAwB,IA1BtBA,GAAwB,MA4B3BrrC,OAAM,WACDysC,EEpckB,SAC5B1+C,EACAk6C,EACAyD,EACAzC,EACAD,EACAd,EACAO,GAEA,GAAI16C,IAAcg0B,GAA4B9uB,WAAY,CACxD,IAAMm1C,EAAWF,EAAW4D,UAC5BJ,EAAsBzpB,GAAmCmmB,IAEzDY,EACEZ,EACAF,EAAWE,IAAaK,EAAgBL,IAAa,IAIzDa,EAAahB,GFkbL6E,CACE/+C,EACAk6C,EACAyD,EACAzC,EACAD,GACAd,GACAO,IAIJM,GACE9nC,GACAmnC,EACAY,GACAd,GACA,GACAO,GACAR,EACAl6C,EACAk7C,OAKFkE,GAA8B,SAAAC,GAClC,IAAMvB,EACyC,SAA7CpwD,EAAK,YAAgBoZ,OAAOpE,aAA0B,EAAI,EAC5Di7C,EAAsB,GACtBnC,GAAc,eACT6D,EADQ,CAEXtB,UACE9pB,GAA0BD,GAA4B9uB,YACpD44C,OAKFyD,GAAsB,SAAClC,EAAgBK,GAC3Cx1D,EAAQ,CACNlD,MAAO,qDACPuB,YACE,mEACFE,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJojD,GAA4BC,GAC5BnE,EAAalnB,GAA4B0rB,OAE1CztC,OAAM,gBAGLuvC,GAA6B,WACjCzmD,EACEzS,EACE,0FAEF,CACEkB,QAAS,aArcX,GA0coCyQ,IAAMrQ,SAAS,IA1cnD,qBA0cG21D,GA1cH,MA0ciBtsC,GA1cjB,MA4cEusC,GAAoC,SACxCrzB,EACAL,EACA2zB,EACAC,GAEA,IAAML,EGriBkC,SAC1ClH,EACAuC,EACAP,EACAhuB,EACAL,EACA4zB,EACAD,EACAtC,EACAE,EACA+B,EACAoC,EACAD,GAEA,IAAME,EAAS,CAAChC,GACZJ,EAAc,eAAQlF,GACtBwF,GAAyB,EAI7B,IAAK,IAAIjvC,KAFLyb,EAAkB,GAAGs1B,EAAOpjD,KAAP,UAAeohD,EAAf,YAAkC3zB,IAE7C21B,EACZ,GAAKA,EAAO7/B,eAAelR,GAA3B,CAEA,IAAM2pC,EAAWoH,EAAO/wC,GAClBnkB,EAAI,eAAQ4rD,EAAMkC,IAExB,IAAK9tD,IAASA,EAAKua,QAAUva,EAAKg8C,WAEhC,OADAiZ,KACO,EAGQ,gBAAbnH,IACEF,EAAWE,GACTF,EAAWE,GAAU33C,eAAiBnW,EAAKua,OAAOpE,eACpDi9C,GAAyB,GAG3BjF,EAAgBL,GAAU33C,eAAiBnW,EAAKua,OAAOpE,eAEvDi9C,GAAyB,IAI7BN,EAAc,eACTA,EADS,eAEXhF,EAFW,eAEK9tD,EAAKua,UAI1B,OAAI64C,GAA0BxC,GAAmBE,GAC/C+B,EAA4BC,EAAgBK,IACrC,GAGLC,GAA0BxC,IAAoBE,GAChDkE,EAAoBlC,EAAgBK,IAC7B,GAGFL,EH0ekBqC,CACrBh0D,EACAgtD,GACAP,GACAhuB,EACAL,EACA4zB,EACAD,EACAtC,EACAE,EACA+B,GACAoC,GACAD,IAGGlC,IAIL7D,GAAc,eACT6D,IAGgB,SAAjBE,IAA4BlC,GAC9Be,KAEmB,SAAjBmB,IAA4BlC,GAC9BnC,EAAalnB,GAA4B0rB,MAIvCJ,GAA+B,WACnC,MAAO,CACLlkD,iBAAkBA,GAClB8X,UAAWA,GACXC,YAAa,SAAAu5B,GACX8Q,GAAa,GAAD,mBAAKtqC,IAAL,CAAgBw5B,KAC5B2O,GACE3tD,EACAg/C,EACA1U,GACAujB,GACAC,GACArB,KAGJ/mC,eAAgBA,GAChBC,eAAgB,SAAAzZ,GAAI,OAAI6jD,GAAoB7jD,MAwG1C8E,GAAO,CACX,CACEgC,KAAM,UACN25C,SAAU,cACV9sD,UApFwB,WAC1B,IAAM4+B,EAAkBjZ,GAAUvoB,OAC5BmhC,EAAiB5Y,GAAUiZ,EAAkB,GAE7CyzB,EAAgB,aACpB9rC,SAAU,kBACR0rC,GACErzB,EACAL,EACA,cACA,qBAEDwzB,MAGL,OACE,6BACE,yBAAKrgD,O/OxnBmB,Y+OwnBX7D,IACX,kBAAC,GAAD,iBACMwkD,EADN,CAEE9sC,cAAeghB,GAAgCrxB,YAC/CuQ,SAAUA,EACVlsB,MAAOA,GACPwtB,aAAc6sC,GACdluC,gBAAiBA,GACjB5B,UAAWA,MAGd8a,EAAkB,GACjB,yBAAKltB,O/OpoBiB,Y+OooBT7D,IACX,kBAAC,GAAD,iBACMwkD,EADN,CAEErzD,KAAI,sBAAiBu/B,GACrB9Y,SAAUA,EACVC,gBAAiBA,QAkDd4sC,IAEb,CACEn/C,KAAM,cACN25C,SAAU,kBACV9sD,UA/C4B,WAC9B,IAAM4+B,EAAkBjZ,GAAUvoB,OAC5BmhC,EAAiB5Y,GAAUiZ,EAAkB,GAE7C2zB,EAAoB,aACxBhsC,SAAU,kBACR0rC,GACErzB,EACAL,EACA,kBACA,gBAEDwzB,MAGL,OACE,6BACE,yBAAKrgD,O/OlqBmB,Y+OkqBX7D,IACX,kBAAC,GAAD,iBACM0kD,EADN,CAEE9sC,SAAUA,EACVC,gBAAiBA,OAGpBkZ,EAAkB,GACjB,yBAAKltB,O/O1qBiB,Y+O0qBT7D,IACX,kBAAC,GAAD,iBACM0kD,EADN,CAEE9sC,SAAUA,EACVzmB,KAAI,0BAAqBu/B,GACzB7Y,gBAAiBA,QAiBd8sC,IAEb,CACEr/C,KAAM,SACN25C,SAAU,aACV9sD,UACE,kBAAC,GAAD,CACEumB,SAAU,SAAChN,EAAQuzC,GAAc,IAAD,EAC9BmB,GAAc,eACTrB,IADQ,mBAEVE,EAFU,eAEMvzC,IAFN,0BAGAuzC,GAHA,KAKQ,SAAjBkF,IAA4BlC,GAC9Be,KAEmB,SAAjBmB,IAA4BlC,GAC9BnC,EAAalnB,GAA4B1vB,aAG7C0Q,iBAAkBqjC,EAClBrlC,SAAUA,EACVC,gBAAiBA,KAGrB2L,QAAS,CACP,CACE53B,MAAO,eACP83B,YAAa,6CAEf,CACE93B,MAAO,mBACP83B,YAAa,kCAEf,CACE93B,MAAO,eACP83B,YAAa,yBAInB,CACEpe,KAAM,UACN25C,SAAU,aACV9sD,UACE,kBAAC,GAAD,iBACM+xD,KADN,CAEExrC,SAAU,SAAAhN,GACR00C,GAAc,eAAKrB,GAAN,CAAkB71C,WAAW,eAAMwC,MAC3B,SAAjBy4C,IAA4BlC,GAC9Be,KAEmB,SAAjBmB,IAA4BlC,GAC9BnC,EAAalnB,GAA4B9H,oBAG7ClZ,SAAUA,EACVC,gBAAiBA,OAIvB,CACEvS,KAAM,gBACN25C,SAAU,oBACV9sD,UACE,kBAAC,GAAD,iBA5KG,CACL6N,iBAAkBA,GAClB8X,UAAWA,GACXC,YAAa,SAAAu5B,GACX8Q,GAAa,GAAD,mBAAKtqC,IAAL,CAAgBw5B,KC3lBI,SACtCyL,EACAmD,EACAtjB,EACAujB,EACAC,EACArB,GAEA,IAAIpuB,EAAa,YAAOosB,EAAMjsB,kBAAkBplB,OAAOilB,eAgBvDiM,EAAqB,oBAAqB,gBAf1CjM,EAAgBA,EAActzB,KAAI,SAAAmB,GAChC,OAAKA,EAAK0hD,GAYH1hD,EAXE,eACFA,EADL,eAEG0hD,EAAc,CACbt0D,MAAO,GACPuB,YAAa,GACb2b,IAAK,IACLC,IAAK,IACLC,IAAK,WAOT+zC,EAAK,kBAAsBrxC,OAAOilB,cAAcphC,SAClD4wD,EAAiB,oBAAqB,CACpCE,KAAM,UAERD,EAAc,eACTrB,EADQ,CAEXjuB,kBAAmB,CACjBH,cAAeA,OD4jBf41B,CACEj0D,EACAg/C,EACA1U,GACAujB,GACAC,GACArB,KAGJ/mC,eAAgBA,GAChBC,eAAgB,SAAAzZ,GAAI,OAAI6jD,GAAoB7jD,KA6J1C,CAEAka,SAAU,SAAAhN,GACR00C,GAAc,eAAKrB,GAAN,CAAkBjuB,kBAAkB,eAAMplB,MAClC,SAAjBy4C,IAA4BlC,GAC9Be,KAEmB,SAAjBmB,IAA4BlC,GAC9BnC,EAAalnB,GAA4BD,wBAG7C9gB,gBAAiBA,GACjBD,SAAUA,MAKd,CACEtS,KAAM,qBACN25C,SAAU,wBACV9sD,UACE,kBAAC,GAAD,CACEumB,SAAU,SAAAhN,GACR00C,GAAc,eACTrB,GADQ,CAEXpmB,sBAAsB,eAAMjtB,MAET,SAAjBy4C,IAA4BlC,GAC9Be,KAEmB,SAAjBmB,IAA4BlC,GAC9BnC,EAAalnB,GAA4BtvB,kBAG7CsO,SAAUA,EACVC,gBAAiBA,MAIvB,CACEvS,KAAM,cACN25C,SAAU,kBACV9sD,UACE,kBAAC,GAAD,CACEugC,iBAAiB,EACjBha,SAAU,SAAAhN,GACR00C,GAAc,eACTrB,GADQ,CAEXz1C,gBAAgB,eAAMoC,MAEH,SAAjBy4C,IAA4BlC,GAC9Be,MAEJnrC,gBAAiBA,OAMzB,OACE,oCACE,kBAAC,GAAD,MACA,kBAAC,GAAD,CACEvjB,UAAWA,EACXC,gBAAiBvH,EAAQuH,kBAE3B,yBAAK7G,UAAWV,EAAQc,MACtB,kBAAC,GAAD,CACE8W,UAAWA,EACXhZ,MACEgsB,IAAa6rB,EACT,qBACAA,EACA,qBACA,2BAEN5+B,UAAW,SAAAM,GACT,OI70B2B,SACrC85C,EACAnnC,EACAilC,EACAgC,EACAn6C,EACAo4C,EACAC,GAEA,IAAiB,gBAAbgC,GAA2C,oBAAbA,IAC5BnnC,EAAUvoB,OAAS,EAAG,CACxB,IAAMw1D,EAAsB,UAAM9F,EAAN,cAC5B,IACGlC,EAAMgI,IACPhI,EAAMgI,GAAwB5X,aAC7B4R,EAAWgG,KACXr6C,OAAOC,KAAKo0C,EAAWgG,IAAyBx1D,OAEjD,OAAO,EAKb,GAAiB,eAAb0vD,EAA2B,CAC7B,IAAKlC,EAAK,YAAiB,OAAO,EAClC,IAAKgC,EAAW4D,UAAW,OAAO,EAClC,IAAMhF,EACJ9kB,GAA0BD,GAA4B9uB,YACpDmzC,GAEJ,SACGF,EAAMY,IACPZ,EAAMY,GAAgBxQ,aACrB4R,EAAWpB,IAOhB,SAAKZ,EAAMkC,IAAalC,EAAMkC,GAAU9R,aAAe4R,EAAWE,IJqyBjDuH,CACLrhD,EAAI85C,SACJnnC,GACAxlB,EACAysD,GACAn6C,EACAo4C,EACAC,IAGJ35C,KAAMA,GACNwB,OApeyB,SAACpD,EAAOo9C,GACvC,IACGD,GACCvsD,EACAwlB,GACAgnC,EACAC,GACA9B,GAYF,OATAt9C,EACEzS,EACE,kFAEF,CACEkB,QAAS,OACT80D,iBAAkB,OAGf,EAGT,IAAIjE,EAAWpmB,GAA0Bj0B,GAErCA,IAAcg0B,GAA4B9uB,aAC5Cm1C,EAAWA,EAAShC,IE5YM,SAC9Br4C,EACAk6C,EACA7B,EACA8B,GAEA,OAAIn6C,IAAck6C,MAGhBl6C,IAAcg0B,GAA4B9uB,aAC1Ci1C,EAAW4D,WACX5D,EAAW4D,YACT9pB,GAA0Bj0B,GAAWq4C,UAJzC,GFwYIqG,CAAiB1+C,EAAWk6C,EAAc7B,EAAoB8B,IAE9DsE,GAAwBpE,EAAUH,GAAc,GAKhDO,GACE/sD,EACA2sD,EACAr6C,EACAk6C,EACAC,GACAO,EACA,GACAxnC,IAGFurC,GAAwBpE,EAAUH,GAAc,GAIlDgB,EAAahB,MAobT,kBAAC,GAAD,CACEl6C,UAAWA,EACX0e,aAAc25B,EACd35C,KAAMA,GACNwB,OAAQ,SAAA/N,GAAC,OAAIwrD,EAAsBnyD,SAAS2G,EAAEC,OAAO1H,WAGvD,yBAAK5B,UAAWV,EAAQgG,SACtB,yBAAKtF,UAAWV,EAAQ4zD,YACtB,kBAAC,GAAD,CAAWt9C,KAAMA,GAAMsB,UAAWA,W,qBKzzB/B6hD,GAzCO,SAAC,GAAc,IAAZjoD,EAAW,EAAXA,KAAW,EAChBvR,cADgB,mBAG5B+S,GAH4B,UAGJnH,UAE9B,GAAI2F,EAAM,CACR,IAAIoJ,EAAY,GACZC,EAAU,GAEd,GAAIrJ,EAAK+2B,SAAU,CACjB,IAAMgB,EAAqBC,KAAUC,eAAej4B,EAAK+2B,UACtDmB,WACH9uB,EAAY2uB,EAAmBW,WAAW,GAAG5nC,MAC7CuY,EAAU0uB,EAAmBY,SAAS,GAAG7nC,WAEzCsY,EAAYpJ,EAAK2W,SACjBtN,EAAUrJ,EAAK4W,OAGjB,IAAMsxC,EAAqBrgD,KAAOuB,EAAW,cAC1CwK,OAAOlY,GAAY8F,IACnBwR,OAAO,eACJm1C,EAAmB9+C,EACrBxB,KAAOwB,EAAS,cACbuK,OAAOlY,GAAY8F,IACnBwR,OAAO,eACV3J,EAEJ,OAAKA,GAAuB,SAAZA,EAOV,GAAN,OAAU6+C,EAAV,cAAkCC,GAL9B,yBAAKnxD,MAAO,CAAE9C,QAAS,OAAQE,WAAY,WACxC8zD,EADH,IACuB,0BAAMlxD,MAAO,CAAEpC,WAAY,SAA3B,WAO7B,OAAO,M,kEC0CM5I,GArFGC,aAAW,SAAAC,GAAK,MAAI,CACpCuZ,UAAW,CACTzR,OAAQ,OACRE,QAAS,OACTG,cAAe,SACfF,eAAgB,gBAChBupC,SAAU,UAEZ0qB,MAAM,aACJn0D,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BgxC,UAAW,OACXlP,SAAU,SACVv6B,QAAS,QACTD,MAAO,SAGXw3B,QAAS,CACPv+B,MAAO,UACPD,WAAY,OACZkJ,cAAe,aAEjBzB,aAAc,CACZT,MAAO,GACPD,OAAQ,IAEVW,MAAO,CACLV,MAAO,OACPD,OAAQ,OACR3H,OAAQ,gCACRC,UAAW,aACXC,aAAc,GAEhB87D,UAAW,CACTt7D,SAAU,OACVV,OAAQ,OACRQ,QAAS,QACTK,MAAO,WAETo7D,cAAe,CACb/xD,cAAe,OACf8H,WAAY,GAEdkqD,QAAS,CACPt0D,MAAO,GACPq9B,YAAa,IAEfk3B,SAAU,CACRv0D,MAAO,IACPq9B,YAAa,IAEfm3B,iBAAkB,CAChBx0D,MAAO,IACPq9B,YAAa,GACbpkC,MAAO,WAETw7D,aAAc,CACZz0D,MAAO,IACPq9B,YAAa,IAEfq3B,gBAAiB,CACf10D,MAAO,IACPq9B,YAAa,IAEfs3B,WAAY,CACV30D,MAAO,IACPq9B,YAAa,IAEfib,WAAY,CACV1/C,QAAS,mBACT,UAAW,CACTT,gBAAiB,gBAGrBy8D,UAAW,CACTh8D,QAAS,IAEXi8D,SAAU,CACR1rD,OAAQ,UACR,UAAW,CACThR,gBAAiB,gBC+LR28D,OArNf,YAA0D,IAA5BC,EAA2B,EAA3BA,eAAgBnnC,EAAW,EAAXA,QACtCrzB,EAAUxC,KADuC,EAE3CyC,cAALC,EAFgD,oBAGjDyR,EAAUC,cACV9P,EAAU+P,IAAMsX,WAAW/mB,GACzBuQ,EAAoBC,wBAApBD,gBAL+C,EAO/Bd,IAAMrQ,SAAS,GAPgB,mBAOhDiX,EAPgD,KAO1CgiD,EAP0C,OAS7BjoD,YAAS+xB,GAAgB,CACjD5wB,UAAW,CACTyf,gBAAiBC,EACjB5a,KAAMA,KAHFrI,EAT+C,EAS/CA,KAAMsC,EATyC,EASzCA,QATyC,EAezBL,YAAY4lD,IAAnCyC,EAfgD,oBAsDvD,OArCA7oD,IAAM+C,WAAU,WACdlC,MACC,IAoCD,kBAACioD,GAAA,EAAD,CAAgBx1D,UAAU,MAAMnF,QAAS,CAAEc,KAAMd,EAAQiX,YACvD,kBAAC2jD,GAAA,EAAD,CAAOl6D,UAAWV,EAAQ45D,MAAOnkD,aAAW,gBAC1C,kBAAColD,GAAA,EAAD,CAAWn6D,UAAWV,EAAQq6D,WAC5B,kBAACS,GAAA,EAAD,KAtFa,SAAA96D,GACrB,MAAO,CACL,CAAE0H,MAAO,QAASqzD,cAAe/6D,EAAQ+5D,QAASiB,MAAO,QACzD,CACEtzD,MAAO,qBACPqzD,cAAe/6D,EAAQg6D,SACvBgB,MAAO,QAET,CACEtzD,MAAO,SACPqzD,cAAe/6D,EAAQi6D,iBACvBe,MAAO,QAET,CACEtzD,MAAO,eACPqzD,cAAe/6D,EAAQk6D,aACvBc,MAAO,QAET,CACEtzD,MAAO,eACPqzD,cAAe/6D,EAAQm6D,gBACvBa,MAAO,QAET,CAAEtzD,MAAO,SAAUqzD,cAAe/6D,EAAQo6D,WAAYY,MAAO,QAC7D,CAAEtzD,MAAO,UAAWszD,MAAO,UA+DlBC,CAAej7D,GAASqQ,KAAI,SAAA4sB,GAAO,OAClC,kBAACi+B,GAAA,EAAD,CACE7iD,IAAK4kB,EAAQv1B,MACbszD,MAAO/9B,EAAQ+9B,MACft6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQ85D,cACR78B,EAAQ89B,gBAGV,kBAACj0D,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQi9B,SACzC/8B,EAAE+8B,EAAQv1B,cAOrB,kBAACyzD,GAAA,EAAD,KACG/qD,GACCA,EAAK6X,gBACL7X,EAAK6X,eAAe5X,KAAI,SAAAmY,GAAa,OACnC,kBAACsyC,GAAA,EAAD,CACEziD,IAAKmQ,EAAc3nB,GACnBb,QAAS,CAAEc,KAAMd,EAAQs6D,UACzB35D,QAAS,kBACPgR,EAAQsE,KAAR,0BAAgCuS,EAAc3nB,OAGhD,kBAACq6D,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQ+5D,SACjD50D,UAAU,KACVi2D,MAAM,OAEN,yBAAK16D,UAAWV,EAAQkG,cACrBsiB,EAAcoe,OACb,yBACEjgC,IAAK6hB,EAAcoe,MACnB//B,IAAI,GACJnG,UAAWV,EAAQmG,UAM3B,kBAAC+0D,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQg6D,UACjDgB,MAAM,QAELxyC,EAAc5pB,OAEjB,kBAACs8D,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQi6D,kBAEVe,MAAM,QAELxyC,EAAc7N,aACb,kBAAC7T,EAAA,EAAD,CAAYpI,MAAM,WAAWwB,EAAE,WAE/B,kBAAC4G,EAAA,EAAD,CAAYpI,MAAM,WAAWwB,EAAE,gBAGnC,kBAACg7D,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQk6D,cAEVc,MAAM,QAEN,kBAAC,GAAD,CAAexpD,KAAMgX,KAEvB,kBAAC0yC,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQm6D,iBAEVa,MAAM,QAELxyC,EAAcjO,aAEjB,kBAAC2gD,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQo6D,YACjDY,MAAM,QAELxyC,EAAc4jB,cAEjB,kBAAC8uB,GAAA,EAAD,CAAWx6D,UAAWV,EAAQ65D,UAAWmB,MAAM,SAC7C,yBAAKxyD,MAAO,CAAE9C,QAAS,cAAe0J,aAAc,SAClD,kBAAC3O,EAAA,EAAD,CACEE,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFxb,EAAQsE,KAAR,0BACqBuS,EAAc3nB,GADnC,WAIFH,UAAWV,EAAQ+9C,WACnBI,oBAAoB,EACpBC,oBAAoB,EACpB3oC,aAAW,QAEX,kBAAC,KAAD,CACEjN,MAAO,CACL9J,MAAO,UACP+G,MAAO,OACPD,OAAQ,WAId,kBAAC/E,EAAA,EAAD,CACEE,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFxb,EAAQsE,KAAR,0BAAgCuS,EAAc3nB,MAEhDH,UAAWV,EAAQ+9C,WACnBI,oBAAoB,EACpBC,oBAAoB,EACpB3oC,aAAW,QAEX,kBAAC,GAAD,OAEF,kBAAChV,EAAA,EAAD,CACEE,QAAS,SAAAoJ,GAjKL,IAAAyH,EAkKFzH,EAAEojB,kBAjKtBrrB,EAAQ,CACNlD,MAAO,wBACPuB,YAAY,GAAD,QAHSqR,EAmKcgX,GAhKb5pB,MAAV,mBAAqB4S,EAAK+I,aACrCla,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,kBACJ8mD,EAAoB,CAAE/mD,UAAW,CAAE9S,GAAI2Q,EAAK3Q,MAAQ+S,MAAK,WACvD4mD,IACA7nD,EAAgBzS,EAAE,2CAA4C,CAC5DkB,QAAS,YAEPgP,EAAK6X,eAAe1lB,QAAU,GAAKkW,GACrC/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,IAEf/F,EAAQ,CAAE+F,eAIfoR,OAAM,gBA8ISs0B,oBAAoB,EACpBC,oBAAoB,EACpB19C,UAAWV,EAAQ+9C,WACnBtoC,aAAW,UAEX,kBAAC,GAAD,eASfrF,GACC,kBAAC,GAAD,CACEqI,KAAMA,EAAO,EACb4wC,MAAOj5C,EAAKirD,4BACZvxD,SA7JoB,SAACC,EAAG0O,GAC9B/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,IA0JTK,OAAQ1I,EAAK6X,eAAe1lB,OAC5BwW,MAAO3I,EAAKkrD,iCAAiCrzC,eAAelP,UCnLvDvb,GArFGC,aAAW,SAAAC,GAAK,MAAG,CACnCuZ,UAAW,CACTzR,OAAQ,OACRE,QAAS,OACTG,cAAe,SACfF,eAAgB,gBAChBupC,SAAU,UAEZ0qB,MAAM,aACJn0D,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BgxC,UAAW,OACXlP,SAAU,SACVv6B,QAAS,QACTD,MAAO,SAGXw3B,QAAS,CACPv+B,MAAO,UACPD,WAAY,OACZkJ,cAAe,aAEjBzB,aAAc,CACZT,MAAO,GACPD,OAAQ,IAEVW,MAAO,CACLV,MAAO,OACPD,OAAQ,OACR3H,OAAQ,gCACRC,UAAW,aACXC,aAAc,GAEhB87D,UAAW,CACTt7D,SAAU,OACVV,OAAQ,OACRQ,QAAS,QACTK,MAAO,WAETo7D,cAAe,CACb/xD,cAAe,OACf8H,WAAY,GAEdkqD,QAAS,CACPt0D,MAAO,GACPq9B,YAAa,IAEfk3B,SAAU,CACRv0D,MAAO,IACPq9B,YAAa,IAEfm3B,iBAAkB,CAChBx0D,MAAO,GACPq9B,YAAa,GACbpkC,MAAO,WAETw7D,aAAc,CACZz0D,MAAO,IACPq9B,YAAa,IAEfq3B,gBAAiB,CACf10D,MAAO,IACPq9B,YAAa,IAEfy4B,kBAAmB,CACjB91D,MAAO,IACPq9B,YAAa,IAEfib,WAAY,CACV1/C,QAAS,mBACT,UAAW,CACTT,gBAAiB,gBAGrBy8D,UAAW,CACTh8D,QAAS,IAEXi8D,SAAU,CACR1rD,OAAQ,UACR,UAAW,CACThR,gBAAiB,gBCgMR49D,OAlNf,YAAsD,IAA5BhB,EAA2B,EAA3BA,eAAgBnnC,EAAW,EAAXA,QAClCrzB,EAAUxC,KADmC,EAEvCyC,cAALC,EAF4C,oBAG7CyR,EAAUC,cACV9P,EAAU+P,IAAMsX,WAAW/mB,GACzBuQ,EAAoBC,wBAApBD,gBAL2C,EAO3Bd,IAAMrQ,SAAS,GAPY,mBAO5CiX,EAP4C,KAOtCgiD,EAPsC,OASzBjoD,YAASuyB,GAAY,CAC7CpxB,UAAW,CACTyf,gBAAiBC,EACjB5a,KAAMA,KAHFrI,EAT2C,EAS3CA,KAAMsC,EATqC,EASrCA,QATqC,EAerBL,YAAYqhD,IAAnCgH,EAf4C,oBAsDnD,OArCA7oD,IAAM+C,WAAU,WACdlC,MACC,IAoCD,kBAACioD,GAAA,EAAD,CAAgBx1D,UAAU,MAAMnF,QAAS,CAAEc,KAAMd,EAAQiX,YACvD,kBAAC2jD,GAAA,EAAD,CAAOl6D,UAAWV,EAAQ45D,MAAOnkD,aAAW,gBAC1C,kBAAColD,GAAA,EAAD,CAAWn6D,UAAWV,EAAQq6D,WAC5B,kBAACS,GAAA,EAAD,KA1Fa,SAAA96D,GACrB,MAAO,CACL,CAAE0H,MAAO,QAASszD,MAAO,OAAQD,cAAe/6D,EAAQ+5D,SACxD,CACEryD,MAAO,gBACPqzD,cAAe/6D,EAAQg6D,SACvBgB,MAAO,QAET,CACEtzD,MAAO,SACPqzD,cAAe/6D,EAAQi6D,iBACvBe,MAAO,QAET,CACEtzD,MAAO,eACPqzD,cAAe/6D,EAAQk6D,aACvBc,MAAO,QAET,CACEtzD,MAAO,eACPqzD,cAAe/6D,EAAQm6D,gBACvBa,MAAO,QAET,CACEtzD,MAAO,iBACPqzD,cAAe/6D,EAAQu7D,kBACvBP,MAAO,QAET,CAAEtzD,MAAO,UAAWszD,MAAO,UA+DlBC,CAAej7D,GAASqQ,KAAI,SAAA4sB,GAAO,OAClC,kBAACi+B,GAAA,EAAD,CACE7iD,IAAK4kB,EAAQv1B,MACbszD,MAAO/9B,EAAQ+9B,MACft6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQ85D,cACR78B,EAAQ89B,gBAGV,kBAACj0D,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQi9B,SACzC/8B,EAAE+8B,EAAQv1B,cAMrB,kBAACyzD,GAAA,EAAD,KACG/qD,GACCA,EAAK44B,YACL54B,EAAK44B,WAAW34B,KAAI,SAAAyhC,GAAQ,OAC1B,kBAACgpB,GAAA,EAAD,CACEziD,IAAKy5B,EAASjxC,GACdb,QAAS,CAAEc,KAAMd,EAAQs6D,UACzB35D,QAAS,kBAAMgR,EAAQsE,KAAR,sBAA4B67B,EAASjxC,OAEpD,kBAACq6D,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQ+5D,SACjD50D,UAAU,KACVi2D,MAAM,OAEN,yBAAK16D,UAAWV,EAAQkG,cACrB4rC,EAASlL,OACR,yBACEjgC,IAAKmrC,EAASlL,MACd//B,IAAI,GACJnG,UAAWV,EAAQmG,UAK3B,kBAAC+0D,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQg6D,UACjDgB,MAAM,QAELlpB,EAASlzC,OAEZ,kBAACs8D,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQi6D,kBAEVe,MAAM,QAELlpB,EAASn3B,aACR,kBAAC7T,EAAA,EAAD,CAAYpI,MAAM,WAAWwB,EAAE,WAE/B,kBAAC4G,EAAA,EAAD,CAAYpI,MAAM,WAAWwB,EAAE,gBAGnC,kBAACg7D,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQk6D,cAEVc,MAAM,QAEN,kBAAC,GAAD,CAAexpD,KAAMsgC,KAEvB,kBAACopB,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQm6D,iBAEVa,MAAM,QAELlpB,EAASv3B,aAEZ,kBAAC2gD,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQu7D,mBAEVP,MAAM,QAELlpB,EAASjzB,eAEZ,kBAACq8C,GAAA,EAAD,CAAWx6D,UAAWV,EAAQ65D,UAAWmB,MAAM,SAC7C,yBAAKxyD,MAAO,CAAE9C,QAAS,cAAe0J,aAAc,SAClD,kBAAC3O,EAAA,EAAD,CACEE,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFxb,EAAQsE,KAAR,sBAA4B67B,EAASjxC,GAArC,WAEFH,UAAWV,EAAQ+9C,WACnBI,oBAAoB,EACpBC,oBAAoB,EACpB3oC,aAAW,QAEX,kBAAC,KAAD,CACEjN,MAAO,CACL9J,MAAO,UACP+G,MAAO,OACPD,OAAQ,WAId,kBAAC/E,EAAA,EAAD,CACEE,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFxb,EAAQsE,KAAR,sBAA4B67B,EAASjxC,MAEvCH,UAAWV,EAAQ+9C,WACnBI,oBAAoB,EACpBC,oBAAoB,EACpB3oC,aAAW,QAEX,kBAAC,GAAD,OAEF,kBAAChV,EAAA,EAAD,CACEE,QAAS,SAAAoJ,GA9JL,IAAAyH,EA+JFzH,EAAEojB,kBA9JtBrrB,EAAQ,CACNlD,MAAO,mBACPuB,YAAY,GAAD,QAHSqR,EAgKcsgC,GA7JblzC,MAAV,mBAAqB4S,EAAK+I,aACrCla,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,kBACJ8mD,EAAoB,CAAE/mD,UAAW,CAAE9S,GAAI2Q,EAAK3Q,MAAQ+S,MAAK,WACvD4mD,IACA7nD,EAAgBzS,EAAE,sCAAuC,CACvDkB,QAAS,YAEPgP,EAAK44B,WAAWzmC,QAAU,GAAKkW,GACjC/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,IAEf/F,EAAQ,CAAE+F,eAIfoR,OAAM,gBA2ISs0B,oBAAoB,EACpBC,oBAAoB,EACpB19C,UAAWV,EAAQ+9C,WACnBtoC,aAAW,UAEX,kBAAC,GAAD,eASfrF,GACC,kBAAC,GAAD,CACEqI,KAAMA,EAAO,EACb4wC,MAAOj5C,EAAKqrD,wBACZ3xD,SA1JoB,SAACC,EAAG0O,GAC9B/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,IAuJTK,OAAQ1I,EAAK44B,WAAWzmC,OACxBwW,MAAO3I,EAAKkrD,iCAAiCtyB,WAAWjwB,U,qLCtQlE,I,MAAMvb,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACrCoD,KAAK,aACH4E,QAAS,OACTG,cAAe,SACfJ,MAAO,OACPD,OAAQ,QACP9H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,WAKnB61D,mBAAmB,aACjB9zD,cAAe,UACfnJ,WAAY,OACZD,WAAY,OACZyH,aAAcvI,EAAM8Q,QAAQ,IAC3B9Q,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,SAIdo9D,kBAAkB,aAChBt9D,QAAS,uBACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,sBACTS,UAAW,0BAMJ88D,GAAWlzC,KAAOC,IAAV,MASNnrB,MC9CFq+D,GACI,EADJA,GAEC,ECADC,IAAkB,qBAC5BD,GAA2B,0BADC,eAE5BA,GAAwB,sBAFI,IAKlBE,IAAmB,qBAC7BF,GAA2B,qBADE,eAE7BA,GAAwB,gBAFK,ICH1Br+D,GAAYC,aAAW,iBAAO,CAClCqD,KAAM,CACJvC,SAAU,OACVE,WAAY,OACZJ,QAAS,gBAmBE29D,GAfQ,SAAC,GAAqC,IAAnCz6D,EAAkC,EAAlCA,SAAUvB,EAAwB,EAAxBA,QAAYsF,EAAY,uCAClDxE,EAAStD,KAATsD,KAER,OACE,kBAACK,EAAA,EAAD,eACEC,QAAQ,WACR1C,MAAM,UACNsB,QAAO,aAAIc,QAASd,IAChBsF,GAEH/D,I,0sCCnBA,IAAM06D,GAAUvzC,KAAOC,IAAV,MAaPuzC,GAAcxzC,KAAOC,IAAV,MAeXwzC,GAAezzC,KAAOC,IAAV,MAeZyzC,GAAe1zC,aAAO5hB,IAAP4hB,CAAH,MCRV2zC,GAzBC,SAAC,GAAa,IAAXlkD,EAAU,EAAVA,IACXxG,EAAUC,cADW,EAEf3R,cAALC,EAFoB,oBAQ3B,OACE,kBAAC+7D,GAAD,KACE,kBAACC,GAAD,KACE,kBAACE,GAAD,CAAch7D,QAAQ,MACnBlB,EAAE,iCAIP,kBAACi8D,GAAD,KACE,kBAAC,GAAD,CAAgBx7D,QAbK,WACzBgR,EAAQsE,KAAK6lD,GAAmB3jD,MAazBjY,EAAE67D,GAAoB5jD,QCGlB3a,GAhCGC,aAAY,SAAAC,GAAK,MAAK,CACtC4+D,YAAY,aACVpwD,KAAM,aACLxO,EAAMQ,YAAYC,KAAK,MAAO,CAC7B+N,KAAM,cAIVpL,KAAK,aACHzC,QAAS,YACTyuB,aAAc,oBACdhvB,UAAW,cACVJ,EAAMQ,YAAYC,KAAK,MAAO,IAKjCwZ,QAAS,CACP/R,WAAY,cAGdkQ,SAAU,CACRlY,gBAAiB,UACjBc,MAAO,sBAGT69D,iBAAkB,CAChB9sC,QAAS,EACT/wB,MAAO,e,mxBC3BX,IAAM89D,GAAe9zC,aAAO5hB,IAAP4hB,CAAH,MAMZ+zC,GAAkB/zC,aAAO5hB,IAAP4hB,CAAH,MAOfg0C,GAA8Bh0C,KAAOC,IAAV,MAM3Bg0C,GAAej0C,KAAOC,IAAV,MAMZi0C,GAAsBl0C,KAAOC,IAAV,MCmBVk0C,GAnCY,SAAC,GAAmC,IAAjCj+D,EAAgC,EAAhCA,MAAOkX,EAAyB,EAAzBA,SAAUxL,EAAe,EAAfA,SAAe,EAChDrK,cAALC,EADqD,sBAGtBoK,GAAY,GAA1CyO,EAHoD,EAGpDA,MAAO+jD,EAH6C,EAG7CA,UAAWC,EAHkC,EAGlCA,QACpBr+D,EAAQoX,EAAW,UAAY,UAErC,OACE,oCACE,kBAAC0mD,GAAD,CAAcp7D,QAAQ,SAASxC,GAE/B,kBAAC69D,GAAD,CAAiB/9D,MAAOA,GAAQqa,GAEhC,kBAAC2jD,GAAD,KACE,kBAACC,GAAD,KACE,kBAAC71D,EAAA,EAAD,CAAYpI,MAAOA,EAAO0C,QAAQ,MAC/B07D,GAGH,kBAACF,GAAD,CAAqBx7D,QAAQ,MAAMlB,EAAE,YAGvC,kBAACy8D,GAAD,KACE,kBAAC71D,EAAA,EAAD,CAAYpI,MAAOA,EAAO0C,QAAQ,MAC/B27D,GAGH,kBAACH,GAAD,CAAqBx7D,QAAQ,MAC1BlB,EAAE,mBCxBf,IA+Be88D,GA/BM,SAAC,GAAgC,IAA9B7kD,EAA6B,EAA7BA,IAAK8kD,EAAwB,EAAxBA,YAAa3mD,EAAW,EAAXA,KAAW,EAO/C9Y,KALF8+D,EAFiD,EAEjDA,YACAx7D,EAHiD,EAGjDA,KACA6W,EAJiD,EAIjDA,QACA7B,EALiD,EAKjDA,SACAymD,EANiD,EAMjDA,iBANiD,EASvCt8D,cAALC,EAT4C,oBAWnD,OACE,kBAACg9D,GAAD,CAAcx8D,UAAW47D,EAAaxyD,SAAUmzD,EAAa36D,MAAO6V,GACjE7B,EAAKjG,KAAI,gBApBGE,EAoBA3R,EAAH,EAAGA,MAAO0L,EAAV,EAAUA,SAAU6yD,EAApB,EAAoBA,SAApB,OACR,kBAAC/kD,GAAA,EAAD,eACEC,IAAKzZ,EACLoB,QAAS,CAAEc,OAAM6W,UAAS7B,WAAUymD,oBACpC70D,MACE,kBAAC,GAAD,CACE9I,MAAOsB,EAAEtB,GACTkX,SAAUqC,IAAQglD,EAClB7yD,SAAUA,KA3Bf,CACLzJ,GAAG,gBAAD,OAFa0P,EA+BK,GA5BpB,gBAAgB,qBAAhB,OAAsCA,W,wYCTnC,IAAM6sD,GAAqC7wD,KAAH,MCEzC8wD,GAAkB,CACtBp1C,eAAgB,GAChB+gB,WAAY,IAcCs0B,GAXK,SAAAlqC,GAAoB,IAAD,EACV5gB,YAAS4qD,GAAoC,CACtEzpD,UAAW,CAAEyf,qBADPhjB,EAD6B,EAC7BA,KAAS9K,EADoB,yBAKrC,OAAO,aACLgF,UAAc,OAAJ8F,QAAI,IAAJA,OAAA,EAAAA,EAAMkrD,mCAAoC+B,IACjD/3D,ICeQi4D,GA1BO,SAAC,GAA2B,IAAzB7qD,EAAwB,EAAxBA,QAASpI,EAAe,EAAfA,SACxBvH,EAAUy6D,cAAVz6D,MADuC,EAGzBvB,oBAAc,OAALuB,QAAK,IAALA,OAAA,EAAAA,EAAOssB,YAAawsC,IAHJ,mBAGxC1jD,EAHwC,KAGnCslD,EAHmC,KAuB/C,MAAO,CAAEtlD,MAAKulD,gBAlBU,SAAChpD,EAAOipD,GAC9BF,EAAOE,GACPjrD,KAgB6BkrD,KAblB,CACX,CACEh/D,MAAO,iBACP0L,SAAUA,EAAS2d,eACnBk1C,SAAUtB,IAEZ,CACEj9D,MAAO,aACP0L,SAAUA,EAAS0+B,WACnBm0B,SAAUtB,OCtBDgC,GCqEAxsD,aAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EAzDqB,SAAC,GAAuB,IAArBtN,EAAoB,EAApBA,cAC/B/D,EAAUxC,KAEVsgE,EAAkBloD,QAAQ7R,EAAcH,sBAAsB/C,IAE9DuyB,EACJrvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,GAPmB,EAS3By8D,GAAYlqC,GAAlC9oB,EATiD,EASjDA,SAAUoI,EATuC,EASvCA,QATuC,EAUlB6qD,GAAc,CAAEjzD,WAAUoI,YAAzDyF,EAViD,EAUjDA,IAAKulD,EAV4C,EAU5CA,gBAAiBE,EAV2B,EAU3BA,KAE9B,OACE,yBAAKl9D,UAAWV,EAAQc,MACtB,kBAAC,GAAD,MAECg9D,GACC,oCACE,kBAAC,GAAD,CAAS3lD,IAAKA,IAEd,kBAACyjD,GAAD,KACE,kBAAC,GAAD,CAAczjD,IAAKA,EAAK8kD,YAAaS,EAAiBpnD,KAAMsnD,IAE5D,kBAAClnD,GAAD,CACEhW,UAAWV,EAAQ27D,kBACnBr5D,MAAO6V,EACP5H,MAAOsrD,IAEP,kBAAC,GAAD,CACExoC,QAASD,EACTonC,eAAgB9nD,KAIpB,kBAACgE,GAAD,CACEhW,UAAWV,EAAQ27D,kBACnBr5D,MAAO6V,EACP5H,MAAOsrD,IAEP,kBAAC,GAAD,CACExoC,QAASD,EACTonC,eAAgB9nD,QAOxBorD,GAAmB,kBAAC,GAAD,UC+BZtgE,GA3FGC,aAAW,SAAAC,GAAK,MAAG,CACnCuZ,UAAW,CACTzR,OAAQ,OACRE,QAAS,OACTG,cAAe,SACfF,eAAgB,gBAChBupC,SAAU,UAEZ0qB,MAAM,aACJn0D,MAAO,OACPypC,SAAU,UACTxxC,EAAMQ,YAAYC,KAAK,MAAO,CAC7BgxC,UAAW,SACXlP,SAAU,SACVv6B,QAAS,QACTD,MAAO,SAGXw3B,QAAS,CACPv+B,MAAO,UACPD,WAAY,OACZkJ,cAAe,aAEjBzB,aAAc,CACZT,MAAO,GACPD,OAAQ,IAEVW,MAAO,CACLV,MAAO,OACPD,OAAQ,OACR3H,OAAQ,gCACRC,UAAW,aACXC,aAAc,GAEhB87D,UAAW,CACTt7D,SAAU,OACVV,OAAQ,OACRQ,QAAS,QACTK,MAAO,WAETo7D,cAAe,CACb/xD,cAAe,OACf8H,WAAY,GAEdkqD,QAAS,CACPt0D,MAAO,GACPq9B,YAAa,IAEfk3B,SAAU,CACRv0D,MAAO,IACPq9B,YAAa,IAEfi7B,iBAAkB,CAChBt4D,MAAO,GACPq9B,YAAa,IAEfk7B,iBAAkB,CAChBv4D,MAAO,GACPq9B,YAAa,IAEfq3B,gBAAiB,CACf10D,MAAO,GACPq9B,YAAa,IAEfy4B,kBAAmB,CACjB91D,MAAO,IACPq9B,YAAa,IAEfib,WAAY,CACV1/C,QAAS,mBACT,UAAW,CACTT,gBAAiB,gBAGrBy8D,UAAW,CACTh8D,QAAS,IAEXi8D,SAAU,CACR1rD,OAAQ,UACR,UAAW,CACThR,gBAAiB,YAGrBqgE,WAAY,CACV1/D,SAAU,OACVE,WAAY,OACZJ,QAAS,WACTa,YAAa,YC8HjB,IAIemS,gBAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EAnKf,YAA4C,IAAlBtN,EAAiB,EAAjBA,cAClB/D,EAAUxC,KACVmU,EAAUC,cAFyB,EAG7B3R,cAALC,EAHkC,sBAKjB2R,IAAMrQ,SAAS,GALE,mBAKlCiX,EALkC,KAK5BgiD,EAL4B,OAOfjoD,YAASuyB,GAAY,CAC7CpxB,UAAW,CACT8E,KAAMA,EACN2a,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,MALlCuP,EAPiC,EAOjCA,KAAMsC,EAP2B,EAO3BA,QAoBd,OAXAb,IAAM+C,WAAU,WACdlC,MACC,IAUD,kBAACioD,GAAA,EAAD,CAAgBx1D,UAAU,MAAMnF,QAAS,CAAEc,KAAMd,EAAQiX,YACvD,kBAAC2jD,GAAA,EAAD,CAAOl6D,UAAWV,EAAQ45D,MAAOnkD,aAAW,gBAC1C,kBAAColD,GAAA,EAAD,CAAWn6D,UAAWV,EAAQq6D,WAC5B,kBAACS,GAAA,EAAD,KA/Da,SAAA96D,GACrB,MAAO,CACL,CAAE0H,MAAO,QAASszD,MAAO,OAAQD,cAAe/6D,EAAQ+5D,SACxD,CACEryD,MAAO,WACPqzD,cAAe/6D,EAAQg6D,SACvBgB,MAAO,QAET,CACEtzD,MAAO,iCACPqzD,cAAe/6D,EAAQ+9D,iBACvB/C,MAAO,QAET,CACEtzD,MAAO,gBACPqzD,cAAe/6D,EAAQg+D,iBACvBhD,MAAO,QAET,CACEtzD,MAAO,eACPqzD,cAAe/6D,EAAQm6D,gBACvBa,MAAO,QAET,CACEtzD,MAAO,iBACPqzD,cAAe/6D,EAAQu7D,kBACvBP,MAAO,QAET,CAAEtzD,MAAO,GAAIszD,MAAO,UAoCXC,CAAej7D,GAASqQ,KAAI,SAAA4sB,GAAO,OAClC,kBAACi+B,GAAA,EAAD,CACE7iD,IAAK4kB,EAAQv1B,MACbszD,MAAO/9B,EAAQ+9B,MACft6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQ85D,cACR78B,EAAQ89B,gBAGV,kBAACj0D,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQi9B,SACzC/8B,EAAE+8B,EAAQv1B,cAMrB,kBAACyzD,GAAA,EAAD,KACG/qD,GACCA,EAAK44B,YACL54B,EAAK44B,WAAW34B,KAAI,SAAAyhC,GAAQ,OAC1B,kBAACgpB,GAAA,EAAD,CACEziD,IAAKy5B,EAASjxC,GACdb,QAAS,CAAEc,KAAMd,EAAQs6D,UACzB35D,QAAS,kBAAMgR,EAAQsE,KAAR,sBAA4B67B,EAASjxC,GAArC,YAEf,kBAACq6D,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQ+5D,SACjD50D,UAAU,KACVi2D,MAAM,OAEN,yBAAK16D,UAAWV,EAAQkG,cACrB4rC,EAASlL,OACR,yBACEjgC,IAAKmrC,EAASlL,MACd//B,IAAI,GACJnG,UAAWV,EAAQmG,UAK3B,kBAAC+0D,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQg6D,UACjDgB,MAAM,QAELlpB,EAASlzC,OAEZ,kBAACs8D,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQ+9D,kBAEV/C,MAAM,QAELlpB,EAASnzB,gBAPZ,IAO8BmzB,EAASlzB,iBAEvC,kBAACs8C,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQg+D,kBAEVhD,MAAM,QAELlpB,EAASrQ,OAASvhC,EAAE,QAAUA,EAAE,YAEnC,kBAACg7D,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQm6D,iBAEVa,MAAM,QAELlpB,EAASv3B,aAEZ,kBAAC2gD,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQu7D,mBAEVP,MAAM,QAELlpB,EAASjzB,eAeZ,kBAACq8C,GAAA,EAAD,CAAWx6D,UAAWV,EAAQ65D,UAAWmB,MAAM,QAC7C,kBAAC75D,EAAA,EAAD,CACER,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFxb,EAAQsE,KAAR,sBAA4B67B,EAASjxC,GAArC,WAEFO,QAAQ,WACR1C,MAAM,UACNsB,QAAS,CAAEc,KAAMd,EAAQi+D,aAExB/9D,EAAE,gBAQhBkQ,GACC,kBAAC,GAAD,CACEqI,KAAMA,EAAO,EACb4wC,MAAOj5C,EAAKqrD,wBACZ3xD,SAlIoB,SAACC,EAAG0O,GAC9B/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,IA+HTK,OAAQ1I,EAAK44B,WAAWzmC,OACxBwW,MAAO3I,EAAKkrD,iCAAiCtyB,WAAWjwB,YCtLnDvb,GAxBGC,YAAW,CAC3BqD,KAAM,CACJ4E,QAAS,OACTG,cAAe,SACfJ,MAAO,OACPD,OAAQ,QAEV04D,QAAS,CACPx4D,QAAS,OACTE,WAAY,SACZknB,aAAc,oBACdhvB,UAAW,aACX0N,UAAW,OACXnN,QAAS,UAEX8/D,aAAc,CACZ1/D,WAAY,QAEd2/D,YAAa,CACX54D,OAAQ,OACRnH,QAAS,oBCUEggE,GArBY,WACzB,IAAMr+D,EAAUxC,KADe,EAEnByC,cAALC,EAFwB,oBAI/B,OACE,yBAAKQ,UAAWV,EAAQc,MACtB,kBAAC,GAAD,MAEA,yBAAKJ,UAAWV,EAAQk+D,SACtB,kBAACp3D,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQm+D,cACzCj+D,EAAE,mBAIP,yBAAKQ,UAAWV,EAAQo+D,aACtB,kBAAC,GAAD,SCfO3/C,GAXE,SAAAC,GAAW,IAAD,IACnBpW,EAAS,GAOf,OALKoW,EAAOuzB,eAAgB,UAACvzB,EAAOwzB,kBAAR,aAAC,EAAmBt3B,aAAa,OAAC8D,QAAD,IAACA,OAAD,YAACA,EAAQwzB,kBAAT,aAAC,EAAoBr3B,WAChFvS,EAAO4pC,WAAa,qBACpB5pC,EAAO2pC,aAAe,6BAGjB3pC,GC+hBMgiB,gBAAU,CACvBnmB,KAAM,mBACNomB,kBAAkB,EAClBE,aAAa,EACbhM,YACAiM,cAnfoB,CACpB9L,gBAAiB,EACjBgnB,SAAU,MACVE,aAAc,GACd3pB,OAAQ,GACR8L,eAAgB,GAChBuwB,IAAK,CACH,kBAAkB,GAEpB3O,aAAc,OAqeDvf,CAMZjZ,aAnBqB,SAAAtO,GACtB,MAAO,CACLgvC,iBAAkBhvC,EAAMoB,KAAK4tC,iBAC7BhuC,cAAehB,EAAMgB,kBAIE,SAAAuN,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,mBAAoB+F,EAAOvb,QAU5C+O,EApekB,SAAC,GAOf,IANL0gC,EAMI,EANJA,iBACAnC,EAKI,EALJA,qBACAjlB,EAII,EAJJA,aACAspB,EAGI,EAHJA,WACArpB,EAEI,EAFJA,SACA7mB,EACI,EADJA,cAEM/D,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAEMwR,EAFN,KAGI7Q,EAAO01C,cAAP11C,GACF8Q,EAAUC,cACRe,EAAoBC,wBAApBD,gBAEFK,EAAmBtB,EAAK7F,SACxBwnB,EAAUtvB,EAAcH,sBAAsB/C,GAE9C2zC,EAAazC,EAAiBrzB,OAAO81B,WAErChC,EACJyB,GAAcA,EAAWhC,aAAegC,EAAWhC,aAAe54B,OAbhE,EAemCxH,IAAMrQ,SAAS,IAA/CmB,EAfH,sBAgB4BkP,IAAMrQ,SAAS,MAhB3C,mBAgBG8F,EAhBH,KAgBcuL,EAhBd,OAiB4BhB,IAAMrQ,SAAS,MAjB3C,mBAiBGswC,EAjBH,KAiBa4C,EAjBb,OAkBsD7iC,IAAMrQ,UAC9D,GAnBE,mBAkBG2uC,EAlBH,KAkB0BC,EAlB1B,OAwBAv+B,IAAMrQ,SAAS,MAxBf,mBAsBF+wC,EAtBE,KAuBFsC,EAvBE,OA0B4BxiC,YAAY6uC,IAArCa,EA1BH,sBA2B4B1vC,YAAY8uC,IAArCa,EA3BH,sBA6BsBxvC,YAASyyB,GAAU,CAC3CqL,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACT6gC,WAAYA,GAAcpxC,SAASvC,GACnCuyB,gBAAiBC,KALbC,EA7BJ,EA6BIA,QAASljB,EA7Bb,EA6BaA,KA7Bb,EA0CAoC,YAAS0yB,GAAmC,CAC9CoL,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACT6gC,WAAYA,GAAcpxC,SAASvC,GACnCuyB,gBAAiBC,EACjBmd,YAAan3B,KAAOm5B,GACjBztB,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAOm5B,GAAqB1vB,IAAI,EAAG,WAClDkC,MAAM,SACNR,OAAO,iBAdHswB,EAvCP,EAuCFxhB,QACMyV,GAxCJ,EAwCF34B,KACS2kC,GAzCP,EAyCFriC,QAgBFb,IAAM+C,WAAU,WACd,GAAKm0B,GAAL,CAEAA,GAAkCC,WAAWrQ,SAAQ,SAAAvoB,GACnDA,EAAK64B,6BAA+B74B,EAAK64B,6BAA6B54B,KACpE,SAAAy1B,GAAY,sBACPA,EADO,CAEViJ,sBAAuB,UAK7B,IAAMwD,EAA4BzJ,GAChCC,IAGF8L,EAA6BtC,MAC5B,CAACxJ,KAEJl3B,IAAM+C,WAAU,WACd,GAAIxE,GAAQA,EAAK44B,YAAc54B,EAAK44B,WAAWzmC,OAAQ,CACrD,IAAMyyC,EAAmB5kC,EAAK44B,WAAW,GACnCiM,EAAevN,GAAwBsN,GAE7CC,EAAY,WAAiBD,EAAgB,WAC7CC,EAAY,aAAmBD,EAAgB,aAE/CpF,EAAqB,eAAgBqF,EAAY,cAE7ChB,IACFiB,GAAoCD,GACpClE,GAAgBkE,IAGlB4K,GAA6B7K,GAC7B9D,GAAmB+D,EAAY,YAAgBr2B,iBAE/C81B,EAAYO,GACZjE,GAAUiE,GAxGW,qBA0GjBA,EAAapL,cACfkH,GAAgBkE,MAGnB,CAAC7kC,IAEJyB,IAAM+C,WAAU,WACd,IAAMkxB,EAAeiM,EAAiBrzB,OAAOonB,aACzCA,GAAgBA,EAAavjC,QAC/BwuC,GAAgBe,KAEjB,CAACC,EAAiBrzB,OAAOknB,WAE5B/zB,IAAM+C,WAAU,WACKm9B,EAAiBrzB,OAAOwzB,YAEzCnB,GAAgBe,KAEjB,CAACC,EAAiBrzB,OAAOwzB,aAE5BrgC,IAAM+C,WAAU,WACOm9B,EAAiBrzB,OAAOuzB,eAG3CiD,GAAoCpD,GACpCf,GAAgBe,MAEjB,CAACC,EAAiBrzB,OAAOuzB,eAE5BpgC,IAAM+C,WAAU,WACd,IAAMyG,EAAY02B,EAAiBrzB,OAAOrD,UAEtCA,GACFu0B,EAAqB,kBAAmBv0B,EAAU2zB,aAEnD,CAAC+C,EAAiBrzB,OAAOrD,YAE5B,IAAMwkC,GAA+B,SAAA7K,GACnC,IAAMqE,EAA4BF,GAChCnE,EAAiBrS,QAEbqP,EAAmBD,EAAiBrzB,OAAOknB,SAE5CyT,EAA0B50B,SAASutB,IACtCpC,EAAqB,WAAYyJ,EAA0B,KAIzDnE,GAAsC,SAAApD,GAC1C,GAAKA,EAAL,CAEA,IAAMG,EAAeF,EAAiBrzB,OAAOuzB,aACvChJ,EAA+BsJ,EACjCA,EAA0BvJ,WAAW,GAAGC,6BACxC,GACAsK,EAA6BT,GAC/B7J,EACA6I,EACAC,GAEFwB,EAA6BD,GAC3BxB,EACAyB,EACAtB,GAEF,IAAI4B,EAAoBV,GACtBI,EACAxB,GAGG8B,GAWH3C,GAAmB2C,EAAkB7E,WAErCuE,EAA6BS,GAC3BT,EACAU,EACAlC,EACAQ,KAhBFrB,GAAmBY,EAASz3B,YAAYuE,iBACxCqqB,EAA6B54B,KAAI,SAAAmB,GAC/B,IAAM8jC,EAAqBrD,EACvB54B,KAAO44B,GAAcztB,OAAO,cAC5B,GACChT,EAAK6J,WAAa7J,EAAK4P,OAASk0B,GACnCpE,GAAmB1/B,EAAKu9B,2BAc9B8E,EAAoBV,GAClBI,EACAxB,GAGFnC,EAAqB,YAAaiE,KAG9B9C,GAAkB,SAAAe,GACtB,IAAMjM,EAAuBkM,EAAiBrzB,OAAOonB,cAAgB,GAC/DA,EAAeH,GACnBmM,EACAC,EACA3B,EACAD,EACA4B,EAAiBrzB,OAAOknB,SACxBC,GAGF+J,EAAqB,eAAgB9J,IAGjCkL,GAAY,SAAAc,GAChB,IAAMV,EAAiBW,EAAiBrzB,OAAOvC,QAAU,GAEnDk1B,EAAaS,EAAS51B,WAAWC,OAAO9L,KAAI,SAAAmB,GAChD,IAAM8/B,EAAeF,EAAe79B,MAAK,SAAAy4B,GAAK,OAAIA,EAAMnrC,KAAO2Q,EAAK3Q,MACpE,OAAO,eACF2Q,EADL,CAEElP,MAAOgvC,EAAeA,EAAahvC,MAAQ,EAC3CivC,WAAYD,EAAeA,EAAaC,WAAa,UAIzD3B,EAAqB,SAAUyB,IAG3BH,GAAqB,SAAAlC,GACzB,IAAMpwB,EAAkB80B,GACtB1E,EACAiF,EACAlC,EACAQ,GAGF3C,EAAqB,kBAAmBhxB,IAGpCy2B,GAAqB,SAAAj0B,GACzB2zB,GAAwB,CACtBP,WAAYA,GAAcpxC,SAASvC,GACnC2vC,YAAan3B,KAAO+H,GACjB2D,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAO+H,GAAM0B,IAAI,EAAG,WACnCkC,MAAM,SACNR,OAAO,iBAIRs7B,GAAS,WACbjtC,GAAW,GAGTk/B,EAAiBrzB,OAAOonB,cACxBiM,EAAiBrzB,OAAOonB,aAAavjC,SAErCwvC,EAAiBrzB,OAAOonB,aAAe,CAAC,eAEjCiM,EAAiBrzB,OAAOonB,aAAa,GAFL,CAGnCA,aAAciM,EAAiBrzB,OAAOE,oBAK5C,IAAMxO,EAAOqxC,GACX3P,EACAC,EACApvC,GAGEioB,EACFo3B,EAAsB,CAAEruC,UAAWvD,IAAQwD,MACzC,WACEjB,EAAgBzS,EAAE,kDAAmD,CACnEkB,QAAS,YAEXuQ,EAAQsE,KAAK,CACXD,SAAU,sBAGd,WACEnD,GAAW,GACXF,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,aAKf2gD,EAAsB,CAAEpuC,UAAWvD,IAAQwD,MACzC,WACEjB,EAAgBzS,EAAE,yCAA0C,CAC1DkB,QAAS,YAEXuQ,EAAQsE,KAAK,CACXD,SAAU,mBAGd,WACEnD,GAAW,GACXF,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,cAkCnB,OACE,oCACE,kBAAC,GAAD,MAEA,kBAAC,GAAD,CACEkG,UAAWgsB,GAAWwhB,GAAkCxtC,EACxDC,gBAAiBvH,EAAQuH,gBACzB7G,UAAWV,EAAQkH,gBAGpB4qC,GACC,yBAAKpxC,UAAWV,EAAQc,MACtB,yBAAKJ,UAAWV,EAAQs+C,UACtB,kBAACx3C,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQua,cAC/Cra,EAAE,gBADL,KACwB4xC,EAASz3B,YAAYE,aAG7C,yBACE7Z,UAAWV,EAAQ4mC,MACnBp+B,MAAO,CACLopB,gBAAgB,OAAD,OAASkgB,EAASz3B,YAAYG,WAAWrU,MAAzC,OAGhB,IAGH,kBAACW,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQvB,YAExC+tC,GACEx5B,EACA8+B,EAASz3B,YACTy3B,EAAS,0BACTlzC,OAIN,yBAAK8B,UAAWV,EAAQsvC,UACtB,yBAAK5uC,UAAWV,EAAQovC,UACtB,kBAAC,KAAD,CAAwBpvC,QAAS,CAAEc,KAAMd,EAAQqvC,YACjD,kBAACvoC,EAAA,EAAD,CAAY1F,QAAQ,SACjB0wC,EAASz3B,YAAYwE,iBAK5B,kBAAC/X,EAAA,EAAD,CAAY1F,QAAQ,QAAQpB,QAAS,CAAEc,KAAMd,EAAQsK,WAEjDkiC,GACEx5B,EACA8+B,EAASz3B,YACTy3B,EAAS,8BACTxnC,UAIN,kBAAC,GAAD,CACEwnC,SAAUA,EACVlM,SAAUmM,EAAiBrzB,OAAOknB,SAClCrG,iBAAiB,KAIrB,yBAAK7+B,UAAWV,EAAQu+C,WACtB,0BACE7yB,SA3FiB,SAAApmB,GAC3B,GAAIysC,EAAiBoO,WAAY,CAC/B,IAAMA,EAAapO,EAAiBoO,WAC9BC,EAAe1iC,OAAOC,KAAKwiC,GAAY59C,OAE7C,GAAI49C,EAAW9B,yBAA4C,IAAjB+B,EAAoB,CAC5D,IACMjT,EADQgT,EAAWra,aAAX,OACWiB,MAAM,KACzBqG,EAAcD,EAAW5qC,OAC/BoQ,EACEzS,EAAE,+CAA2C,CAC3CotC,OAAQH,EAAWC,EAAc,KAEnC,CACEhsC,QAAS,iBAIbuR,EAAgBzS,EAAE,0CAA2C,CAC3DkB,QAAS,YAKfupB,EAAam1B,GAAbn1B,CAAqBrlB,IAoEX5E,UAAWV,EAAQw+C,aAEnB,kBAAC13C,EAAA,EAAD,CACE1F,QAAQ,KACRV,UAAWsG,KAAWhH,EAAQvB,WAAYuB,EAAQ8e,cAEtC5e,EAAX0qB,EAAa,0BAA+B,kBA/Z1B,qBAkapBknB,EAASjI,cACR,kBAACle,GAAA,EAAD,CACErT,KAAK,aACL5Q,MAAM,kBACNma,eAAgB0G,GAAuBupB,GACvC5wB,cAAe4G,GACbyqB,EACA,KACAT,GAEFhwB,qBAAsBuzB,GACtBjzB,eAAgB,EAChBG,QAAS,GACTP,aAAa,YACb7c,UAAWozB,GACXtW,qBAAqB,wBACrBC,eAAgBliB,EAAQ6+C,kBACxBlqB,WAAYmd,EAASA,EAASjI,gBAlbZ,yBAsbrBiI,EAASjI,cACR,kBAACle,GAAA,EAAD,CACErT,KAAK,eACL5Q,MAAM,kBACNma,eAAgB0G,GAAuBupB,GACvC5wB,cAAe4G,GACbyqB,EACA,KACAT,GAEFhwB,qBAAsBuzB,GACtBjzB,eAAgB,EAChBG,QAAS,GACTpd,UAAWovB,GACXI,WAAYmd,EAASA,EAASjI,gBAIlC,kBAAC,GAAD,CACE/d,WAAYlB,EAAW,iBAAmB,cAC1CmB,YAAanB,EAAW,SAAW,iBCvbpCptB,GAvFGC,aAAW,SAAAC,GAAK,MAAG,CACnCuZ,UAAW,CACTzR,OAAQ,OACRE,QAAS,OACTG,cAAe,SACfF,eAAgB,gBAChBupC,SAAU,UAEZ0qB,MAAM,aACJn0D,MAAO,OACPypC,SAAU,UACTxxC,EAAMQ,YAAYC,KAAK,MAAO,CAC7BgxC,UAAW,SACXlP,SAAU,SACVv6B,QAAQ,QACRD,MAAO,SAGXw3B,QAAS,CACPv+B,MAAO,UACPD,WAAY,OACZkJ,cAAe,aAEjBzB,aAAc,CACZT,MAAO,GACPD,OAAQ,IAEVW,MAAO,CACLV,MAAO,OACPD,OAAQ,OACR3H,OAAQ,gCACRC,UAAW,aACXC,aAAc,GAEhB87D,UAAW,CACTt7D,SAAU,OACVV,OAAQ,OACRQ,QAAS,QACTK,MAAO,WAETo7D,cAAe,CACb/xD,cAAe,OACf8H,WAAY,GAEdkqD,QAAS,CACPt0D,MAAO,GACPq9B,YAAa,IAEfk3B,SAAU,CACRv0D,MAAO,IACPq9B,YAAa,IAEfq3B,gBAAiB,CACf10D,MAAO,GACPq9B,YAAa,IAEfw7B,aAAc,CACZ74D,MAAO,IACPq9B,YAAa,IAEfs3B,WAAY,CACV30D,MAAO,GACPq9B,YAAa,IAEfib,WAAY,CACV1/C,QAAS,mBACT,UAAW,CACTT,gBAAiB,gBAGrBy8D,UAAW,CACTh8D,QAAS,IAEXi8D,SAAU,CACR1rD,OAAQ,UACR,UAAW,CACThR,gBAAiB,YAGrBqgE,WAAY,CACV1/D,SAAU,OACVE,WAAY,OACZJ,QAAS,WACTa,YAAa,YCqHjB,IAIemS,gBAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EA3Jf,YAAgD,IAAlBtN,EAAiB,EAAjBA,cACtB/D,EAAUxC,KACVmU,EAAUC,cAF6B,EAGjC3R,cAALC,EAHsC,sBAKrB2R,IAAMrQ,SAAS,GALM,mBAKtCiX,EALsC,KAKhCgiD,EALgC,OAOnBjoD,YAAS+xB,GAAgB,CACjD5wB,UAAW,CACT8E,KAAMA,EACN2a,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,MALlCuP,EAPqC,EAOrCA,KAAMsC,EAP+B,EAO/BA,QAoBd,OAXAb,IAAM+C,WAAU,WACdlC,MACC,IAUD,kBAACioD,GAAA,EAAD,CAAgBx1D,UAAU,MAAMnF,QAAS,CAAEc,KAAMd,EAAQiX,YACvD,kBAAC2jD,GAAA,EAAD,CAAOl6D,UAAWV,EAAQ45D,MAAOnkD,aAAW,gBAC1C,kBAAColD,GAAA,EAAD,CAAWn6D,UAAWV,EAAQq6D,WAC5B,kBAACS,GAAA,EAAD,KA1Da,SAAA96D,GACrB,MAAO,CACL,CAAE0H,MAAO,QAASszD,MAAO,OAAQD,cAAe/6D,EAAQ+5D,SACxD,CACEryD,MAAO,gBACPqzD,cAAe/6D,EAAQg6D,SACvBgB,MAAO,QAET,CACEtzD,MAAO,eACPqzD,cAAe/6D,EAAQm6D,gBACvBa,MAAO,QAET,CACEtzD,MAAO,WACPqzD,cAAe/6D,EAAQs+D,aACvBtD,MAAO,QAET,CACEtzD,MAAO,SACPqzD,cAAe/6D,EAAQo6D,WACvBY,MAAO,QAET,CAAEtzD,MAAO,GAAIszD,MAAO,UAoCXC,CAAej7D,GAASqQ,KAAI,SAAA4sB,GAAO,OAClC,kBAACi+B,GAAA,EAAD,CACE7iD,IAAK4kB,EAAQv1B,MACbszD,MAAO/9B,EAAQ+9B,MACft6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQ85D,cACR78B,EAAQ89B,gBAGV,kBAACj0D,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQi9B,SACzC/8B,EAAE+8B,EAAQv1B,cAMrB,kBAACyzD,GAAA,EAAD,KACG/qD,GACCA,EAAK6X,gBACL7X,EAAK6X,eAAe5X,KAAI,SAAAmY,GAAa,OACnC,kBAACsyC,GAAA,EAAD,CACEziD,IAAKmQ,EAAc3nB,GACnBb,QAAS,CAAEc,KAAMd,EAAQs6D,UACzB35D,QAAS,kBACPgR,EAAQsE,KAAR,0BAAgCuS,EAAc3nB,GAA9C,YAGF,kBAACq6D,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQ+5D,SACjD50D,UAAU,KACVi2D,MAAM,OAEN,yBAAK16D,UAAWV,EAAQkG,cACrBsiB,EAAcoe,OACb,yBACEjgC,IAAK6hB,EAAcoe,MACnB//B,IAAI,GACJnG,UAAWV,EAAQmG,UAK3B,kBAAC+0D,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQg6D,UACjDgB,MAAM,QAELxyC,EAAc5pB,OAEjB,kBAACs8D,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQm6D,iBAEVa,MAAM,QAELxyC,EAAcjO,aAEjB,kBAAC2gD,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQs+D,cAEVtD,MAAM,QAELxyC,EAAczS,UAEjB,kBAACmlD,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQo6D,YACjDY,MAAM,QAELxyC,EAAc4jB,cAiBjB,kBAAC8uB,GAAA,EAAD,CAAWx6D,UAAWV,EAAQ65D,UAAWmB,MAAM,QAC7C,kBAAC75D,EAAA,EAAD,CACER,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFxb,EAAQsE,KAAR,0BAAgCuS,EAAc3nB,GAA9C,WAEFO,QAAQ,WACR1C,MAAM,UACNsB,QAAS,CAAEc,KAAMd,EAAQi+D,aAExB/9D,EAAE,gBAQhBkQ,GACC,kBAAC,GAAD,CACEqI,KAAMA,EAAO,EACb4wC,MAAOj5C,EAAKirD,4BACZvxD,SA1HoB,SAACC,EAAG0O,GAC9B/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,IAuHTK,OAAQ1I,EAAK6X,eAAe1lB,OAC5BwW,MAAO3I,EAAKkrD,iCAAiCrzC,eAAelP,YCjKvDvb,GAhCGC,aAAW,SAAAC,GAAK,MAAG,CACnCoD,KAAM,CACJ4E,QAAS,OACTG,cAAe,SACfJ,MAAO,OACPD,OAAQ,QAEV04D,QAAQ,aACNx4D,QAAS,OACTE,WAAY,SACZknB,aAAc,oBACdhvB,UAAW,aACX0N,UAAW,OACXnN,QAAS,UACRX,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsI,UAAW,SACXb,WAAY,WAGhBu4D,aAAa,aACX1/D,WAAY,QACXf,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsI,UAAW,SACXb,WAAY,WAGhBw4D,YAAa,CACX54D,OAAQ,OACRnH,QAAS,sBCEEkgE,GArBe,WAC5B,IAAMv+D,EAAUxC,KADkB,EAEtByC,cAALC,EAF2B,oBAIlC,OACE,yBAAKQ,UAAWV,EAAQc,MACtB,kBAAC,GAAD,MAEA,yBAAKJ,UAAWV,EAAQk+D,SACtB,kBAACp3D,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQm+D,cACzCj+D,EAAE,wBAIP,yBAAKQ,UAAWV,EAAQo+D,aACtB,kBAAC,GAAD,S,+FCwFO5gE,GAhHGC,YAAW,CAC3BE,MAAO,CACLC,gBAAiB,OACjBC,OAAQ,oBACRC,UAAW,aACXC,aAAc,MACd0H,MAAO,QACPgG,UAAW,SAEb3K,KAAM,CACJzC,QAAS,OAEXisD,UAAW,CACT5rD,MAAO,UACPH,SAAU,OACVe,SAAU,WACVd,WAAY,OACZqR,WAAY,MACZpR,WAAY,QAEd+/D,WAAY,CACV1/D,UAAW,oBACX4G,QAAS,OACTE,WAAY,SAEZ,oBAAqB,CACnB1G,YAAa,KAGjB8qD,SAAU,CACRtrD,MAAO,UACPH,SAAU,OACVsR,WAAY,MACZpR,WAAY,UACZquB,aAAc,qBAEhBo9B,UAAW,CACT7rD,QAAS,eACTqH,QAAS,OACTE,WAAY,SACZpH,WAAY,OACZD,SAAU,QAEZK,MAAO,CACLJ,WAAY,OACZD,SAAU,OACVE,WAAY,OACZJ,QAAS,kBAEXssD,SAAU,CACRr7C,KAAM,UACNF,aAAc,QAEhB/P,SAAU,CACRC,SAAU,WACVC,IAAK,EACLC,MAAO,EACPnB,QAAS,QAEXc,cAAe,CACbC,UAAW,OACXvB,OAAQ,oBACRE,aAAc,MACdH,gBAAiB,UACjBc,MAAO,UACPH,SAAU,OACVC,WAAY,OACZC,WAAY,IACZJ,QAAS,WACTL,SAAU,OACVkB,YAAa,MACb,UAAW,CACTtB,gBAAiB,UACjBc,MAAO,YAGXM,cAAe,CACbnB,OAAQ,oBACRE,aAAc,MACdQ,SAAU,OACVC,WAAY,OACZC,WAAY,IACZC,MAAO,UACPL,QAAS,WACTL,SAAU,OACVkB,YAAa,QAEfO,UAAW,CACTlB,SAAU,OACVG,MAAO,QAETN,YAAa,CACXC,QAAS,WACT,uBAAwB,CACtBoH,MAAO,OAET,6BAA8B,CAC5BF,WAAY,UACZxH,aAAc,OAEhB,6BAA8B,CAC5BH,gBAAiB,UACjB6xB,QAAS,IACT1xB,aAAc,QAGlBc,YAAa,CACXE,UAAW,OACXD,UAAW,uBCSA2/D,GA5GG,SAAC,GAQZ,IAPL59D,EAOI,EAPJA,GAOI,IANJgsD,oBAMI,MANW,GAMX,EALJ/sD,EAKI,EALJA,SACAC,EAII,EAJJA,UACA2+D,EAGI,EAHJA,cACAC,EAEI,EAFJA,WACA3uB,EACI,EADJA,gBACI,EACQ/vC,cAALC,EADH,oBAEIyS,EAAoBC,wBAApBD,gBAFJ,EAImDN,YACrD84C,GACA,CACEyT,eAAgB,CAACF,KAPjB,mBAIGG,EAJH,KAIsCvrC,EAJtC,KAIsCA,QAJtC,EAaAjhB,YAAY+4C,GAAwB,CACtCwT,eAAgB,CAACF,KAdf,mBAWFI,EAXE,KAYSC,EAZT,KAYAzrC,QAKE0rC,EAAYnR,GAAQ,CACxBniC,SAAU,SAACshC,EAAUQ,GACdA,IAEJmR,EACGG,EAA2B,CACzBnrD,UAAW,CACT9S,KACAo+D,qBAAsB,CAAEC,cAAelS,EAASmS,SAGpDN,EAAgC,CAChClrD,UAAW,CACT9S,KACAu+D,0BAA2B,CACzBpvB,kBACAqvB,aAAcrS,EAASmS,UAM5BvrD,MAAK,WACJ9T,GAAYA,IACZC,EAAUitD,EAASmS,SAEpBt1C,OAAM,WACLlX,EAAgBzS,EAAE,sCAAuC,CACvDkB,QAAS,kBAMbk+D,EAAYpR,GAAS,OAAQ8Q,EAAW,CAC5CnS,eACAC,YAAa,CACX,SAAAE,GAAQ,OACNlvC,GAAckvC,EAASmS,KAAM,IAAK,sCAIxC,OACE,0BAAMzzC,SAAUszC,EAAUr0C,aAAcniB,MAAO,CAAE/C,MAAO,SACtD,kBAAC,GAAD,CACEgE,YAAavJ,EAAE,SACfoC,MAAOg9D,EAAUh9D,MACjBwH,SAAUw1D,EAAUx1D,SACpBxB,OAAQg3D,EAAUh3D,OAClBC,UAAW+2D,EAAUh3D,OAAO,GAC5BE,MAAO,CAAE/C,MAAO,QAChBqtB,WAAS,EACTysC,WAAS,EACTC,KAAM,EACN32D,SAAUyqB,GAAWyrC,IAGvB,yBAAKv2D,MAAO,CAAEzJ,UAAW,OAAQ2G,QAAS,SACxC,kBAACvE,EAAA,EAAD,CACE8B,KAAK,SACL7B,QAAQ,YACR1C,MAAM,UACNmK,SACEy2D,EAAUh9D,QAAUuqD,GACnByS,EAAUh3D,QAAUg3D,EAAUh3D,OAAO/F,QACtC+wB,GACAyrC,EAEFv2D,MAAO,CAAEtJ,YAAa,SAErBgB,EAAE,WAGF2sD,GACD,kBAAC1rD,EAAA,EAAD,CAAQC,QAAQ,WAAW1C,MAAM,YAAYiC,QAASb,GACnDI,EAAE,cCnETu/D,GAAgB,SAAC,GAA4C,IAA1CC,EAAyC,EAAzCA,iBAAkBC,EAAuB,EAAvBA,UAAW5mD,EAAY,EAAZA,MAC9C/Y,EAAUxC,KADgD,EAEpDyC,cAALC,EAFyD,oBAIhE,OACE,kBAAC0jD,GAAA,EAAD,CAAMljD,UAAWV,EAAQc,MACvB,kBAAC0pD,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,mBAEL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAA7B,UACM3wC,KAAOqmD,GAAkBl7C,OAAO,cADtC,MAEGnL,KAAOqmD,GAAkBl7C,OAAO,UAEnC,kBAACgmC,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAAYpqD,EAAE,WAChD,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAC1B2V,GAAaz/D,EAAE,YACdy/D,GAAaz/D,EAAE,gBAEnB,kBAAC4qD,GAAD,CAA0Bb,aAAclxC,MA2Q/B6mD,GAtQe,SAAC,GAQxB,IAAD,EAPJjgE,EAOI,EAPJA,KACAgpD,EAMI,EANJA,QACA9oD,EAKI,EALJA,QACAggE,EAII,EAJJA,aACAC,EAGI,EAHJA,iBACAC,EAEI,EAFJA,cACArB,EACI,EADJA,cAEM1+D,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAGEyR,EAAUC,cACV9P,EAAU+P,IAAMsX,WAAW/mB,GACzBuQ,EAAoBC,wBAApBD,gBALJ,EAOwCnR,oBAAS,GAPjD,mBAOGw+D,EAPH,KAOoBC,EAPpB,OAQkCz+D,mBACpCmnD,EAAQ0W,cAAgB1W,EAAQuW,eAT9B,mBAQGgB,EARH,KAQgBC,EARhB,KAYJvrD,qBAAU,WACRurD,EAAexX,EAAQ0W,cAAgB1W,EAAQuW,iBAC9C,CAACvW,IAdA,MAgBiCt2C,YACnC24C,IADK8N,EAhBH,oBAoBJ,GAAoC,IAAhCp7C,OAAOC,KAAKgrC,GAASpmD,OACvB,OAAO,KAGT,IhFjFiCohC,EgFsGjC,OACE,kBAACnjC,EAAA,EAAD,CAAQb,KAAMA,EAAMK,QAAS,CAAErC,MAAOqC,EAAQrC,QAC5C,kBAAC8C,EAAA,EAAD,CAAYC,UAAWV,EAAQX,SAAUsB,QAASd,GAChD,kBAAC,IAAD,CAAkBa,UAAWV,EAAQP,aAGtCkpD,GACC,kBAAC/nD,EAAA,EAAD,CACEC,GAAG,qBACHb,QAAS,CAAEc,KAAMd,EAAQpB,OACzBmC,mBAAmB,GAElB4nD,EAAQyX,aAAezX,EAAQ0X,uBAC5B1X,EAAQyX,aAAezX,EAAQ0X,uBAC/B1X,EAAQkC,gBAAiB,IAP/B,UAQKlC,EAAQxQ,eARb,IAQ8BwQ,EAAQvQ,eAIxC,kBAACx3C,EAAA,EAAD,CACEC,GAAG,qBACHb,QAAS,CAAEc,KAAMd,EAAQkqD,WACzBnpD,mBAAmB,GApGL,aAsGb4nD,EAAQ2X,aACP,kBAAC,KAAD,CACE5/D,UAAWV,EAAQ2qD,WAzGJ,kBA6GlBhC,EAAQ2X,aACP,kBAAC,KAAD,CAAkB5/D,UAAWV,EAAQ2qD,WA7GzB,aAgHbhC,EAAQ2X,aAAiC3X,EAAQ7W,SAASlzC,MAjHxC,kBAmHlB+pD,EAAQ2X,aACP3X,EAAQngC,cAAc5pB,OAG1B,kBAACoC,EAAA,EAAD,CAAehB,QAAS,CAAEc,KAAMd,EAAQ5B,cACtC,kBAACwlD,GAAA,EAAD,CAAMljD,UAAWV,EAAQc,MACvB,kBAAC0pD,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,qBAGL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAC1B1B,GAAeK,EAAQ38B,QAEvB48B,GAAkBD,EAAQ38B,SAA1B,YACMy8B,GAAyBE,EAAQ38B,OAAQ9rB,GAD/C,MAIH,kBAACsqD,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,uBAGL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAxIZ,kBAyIdrB,EAAQ2X,aACP5X,GAAgCC,GAzIxB,aA2ITA,EAAQ2X,ahFzHqB,SAAA3X,GACxC,IAAKA,EAAQ1W,aACX,MAAO,SAGT,IAAMr3B,EAAY+tC,EAAQ1W,aACpBp3B,EAAU8tC,EAAQ5R,WAClB7O,EAAcygB,EAAQzgB,YAAR,UACb7uB,KAAOsvC,EAAQzgB,aAAa1jB,OAAO,UACtC,SAEE4jB,EAAeugB,EAAQvgB,aAAR,UACd/uB,KAAOsvC,EAAQvgB,cAAc5jB,OAAO,cADtB,kBAEjBnL,KAAOsvC,EAAQvgB,cAAc5jB,OAAO,UACpC,SAEJ,OAAI5J,GAAaC,EACT,GAAN,OAAUD,EAAV,cAAyBC,GAGrB,GAAN,OAAUD,EAAV,aAAwBstB,EAAxB,cAAyCE,GgFsG7Bm4B,CAA2B5X,IAG/B,kBAAC6B,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,aAGL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAAWrB,EAAQpjB,UAEhD,kBAACilB,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,YAGL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAC1B3B,GAAaM,EAAQjQ,eAGxB,kBAAC8R,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,mBAGL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,WhFzLJrmB,EgF0LFglB,EAAQhQ,oBhFzLlCrvB,MAAMC,QAAQoa,IAA2C,IAAzBA,EAAcphC,OAC1CohC,EACJtzB,KAAI,SAAA47B,GACH,MAAM,GAAN,OAAUA,EAAaA,aAAa,GAAGrtC,UAExCq7B,KAAK,YAEH,WgFqLC,kBAACuwB,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,eAEL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAC1BrB,EAAQxQ,gBAGX,kBAACqS,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,cAGL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAC1BrB,EAAQvQ,eAGX,kBAACoS,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,UAGL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAC1BrB,EAAQrQ,kBAGX,kBAACkS,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,UAGL,kBAAC2jD,GAAA,EAAD,CAAUnjD,UAAWV,EAAQgqD,UAAWrB,EAAQpQ,YAEhD,kBAACiS,GAAA,EAAD,CAAe9pD,UAAWV,EAAQsqD,WAC/BpqD,EAAE,iBAGL,kBAAC2jD,GAAA,EAAD,CACEnjD,UAAWV,EAAQgqD,SACnBxhD,MAAQmgD,EAAQ/+B,WAAwC,GAA3B,CAAEkD,aAAc,SAE5C67B,EAAQ6X,eAGT7X,EAAQ/+B,YAAci2C,GACtB,kBAAC/U,GAAD,CAA0Bb,aAAc4V,IAG1C,kBAACrV,GAAA,EAAD,CACE9pD,UAAWsG,KAAWhH,EAAQsqD,UAAWtqD,EAAQw+D,aAEjD,6BAAMt+D,EAAE,WAEN8/D,KAAqBE,GACrB,kBAACz/D,EAAA,EAAD,CACEE,QAAS,kBAAMs/D,GAAiB,IAChCz3D,MAAO,CAAEnK,QAAS,QAElB,kBAAC,KAAD,CAAUE,SAAS,YAKzB,kBAACslD,GAAA,EAAD,CACEnjD,UAAWV,EAAQgqD,SACnBxhD,MAAO,CAAEskB,aAAc,SAEtBkzC,IAAoBE,EACnB,kBAAC,GAAD,CACEr/D,GAAI8nD,EAAQ9nD,GACZmvC,gBAAe,OAAE2Y,QAAF,IAAEA,OAAF,YAAEA,EAASngC,qBAAX,aAAE,EAAwB3nB,GACzCgsD,aAAcqT,EACdpgE,SAAU,kBAAMmgE,GAAiB,IACjClgE,UAAW,SAAA0gE,GAAO,OAAIN,EAAeM,IACrC/B,cAAeA,EACfC,WAAmC,wBAAvBhW,EAAQj1C,aAGtBwsD,IAKLvX,EAAQ/+B,YAAci2C,GACrB,kBAAC,GAAD,CACEF,UAAWhX,EAAQgX,UACnBD,iBAAkB/W,EAAQ+W,iBAC1B3mD,MAAO8mD,KAKb,kBAAC3+D,EAAA,EAAD,CAAelB,QAAS,CAAEc,KAAMd,EAAQnB,cACrCihE,GACC,6BACE,kBAAC3+D,EAAA,EAAD,CACEC,QAAQ,WACRT,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFxb,EAAQsE,KAAR,mCAAyC0yC,EAAQ9nD,GAAjD,WAEFb,QAAS,CAAEc,KAAMd,EAAQb,gBAExBe,EAAE,SAEL,kBAACiB,EAAA,EAAD,CACEC,QAAQ,WACRT,QAAS,kBAnNoB6Q,EAmNmBm3C,OAlN1D7mD,EAAQ,CACNlD,MAAM,GAAD,OAAKsB,EAAE,kBAAP,KACLE,YAAY,GAAD,OACToR,EAAKqnC,0BAA0Bt2C,SAAWiP,EAAKs3C,UAC3C5oD,EAAE,yDACF,IAENC,YAAY,GAAD,OAAKqR,EAAK2W,SAAV,mBAAwB3W,EAAK4W,OAA7B,mBAAyC5W,EAAK2mC,eAA9C,YAAgE3mC,EAAK4mC,cAArE,mBAAwF5mC,EAAKgX,cAAc5pB,OACtHyB,iBAAkBH,EAAE,kBACpBI,iBAAkBJ,EAAE,UACnB0T,MAAK,WACNklD,EAA2B,CAAEnlD,UAAW,CAAE9S,GAAI2Q,EAAK3Q,MAAQ+S,MAAK,WAC9DjB,EAAgBzS,EAAE,oDAAqD,CACrEkB,QAAS,YAEX2+D,UAhBmC,IAAAvuD,GAoN7BxR,QAAS,CAAEc,KAAMd,EAAQhB,gBAExBkB,EAAE,0BAIT,kBAACiB,EAAA,EAAD,CACEC,QAAQ,WACRT,QAASd,EACTG,QAAS,CAAEc,KAAMd,EAAQhB,gBAExBkB,EAAE,YChUA1C,GAAYC,YAAW,CAClC68B,QAAS,CACPC,cAAe,QAEjBh5B,SAAU,CACRmE,QAAS,SACT,UAAW,CACTkJ,OAAQ,YAGZ8xD,cAAe,CACb9iE,gBAAiB,aC0CN+iE,GAjDK,SAAC,GAAkC,IAAhCp/D,EAA+B,EAA/BA,SAAU+pB,EAAqB,EAArBA,KAAMrtB,EAAe,EAAfA,SAC/B+B,EAAUxC,KADoC,EAEpBqU,IAAMrQ,SAAS,MAFK,mBAE7C2Q,EAF6C,KAEnCC,EAFmC,KAQ9CqoB,EAAqB,WACzBroB,EAAY,OAGRzS,EAAOiW,QAAQzD,GAErB,OACE,yBAAK3J,MAAO,CAAE9C,QAAS,WACrB,yBACEhF,UAAWV,EAAQuB,SACnBm5B,YAAW/6B,EAAO,kCAA+BgqB,EACjDgR,gBAAc,OACdC,aAhBoB,SAAAlmB,GACxBtC,EAAYsC,EAAMC,gBAgBdkmB,aAAcJ,GAEbl5B,GAGH,kBAACu5B,GAAA,EAAD,CACEj6B,GAAG,qBACHH,UAAWV,EAAQs6B,QACnB36B,KAAMA,EACNwS,SAAUA,EACV4oB,aAAc,CACZC,SAAU,SACVC,WAAY,UAEdC,gBAAiB,CACfF,SAAU,MACVC,WAAY,UAEdp7B,QAAS46B,EACTU,qBAAmB,EACnBylC,WAAY,CAAEp4D,MAAO,CAAEvK,cAEvB,yBAAKyC,UAAWV,EAAQ0gE,eAAgBp1C,MC9BjC9tB,GAjBGC,YAAW,CAC3BojE,WAAY,CACVr7D,OAAQ,OACRC,MAAO,OACP1H,aAAc,MACd+iE,cAAe,SACfljE,gBAAiB,UACjB8H,QAAS,cACTC,eAAgB,SAChBC,WAAY,SACZ,UAAW,CACTlH,MAAO,UACPd,gBAAiB,cCJRmjE,GANI,SAAC,GAAgB,IAAdzzB,EAAa,EAAbA,OACdttC,EAAUxC,KAEhB,OAAO,yBAAKkD,UAAWV,EAAQ6gE,YAAxB,IAAsCvzB,I,2gTCJxC,IAAM0zB,GAAez0D,KAAH,MAuNZ00D,GAA0B10D,KAAH,MAgIvB20D,GAAsB30D,KAAH,MCpMjB/O,GApJGC,aAAW,SAAAC,GAAK,MAAG,CACnCuZ,UAAW,CACTzR,OAAQ,OACRE,QAAS,OACTG,cAAe,SACfF,eAAgB,gBAChBupC,SAAU,SACVnnC,cAAe,QAEjB8xD,UAAW,CACTt7D,SAAU,OACVV,OAAQ,OACRa,MAAO,UACPL,QAAS,GAEXu7D,MAAM,aACJn0D,MAAO,OACPypC,SAAU,UACTxxC,EAAMQ,YAAYC,KAAK,MAAO,CAC7BgxC,UAAW,SACXlP,SAAU,SACVv6B,QAAS,QACTD,MAAO,SAGXw3B,QAAS,CACPv+B,MAAO,UACPD,WAAY,OACZF,SAAU,OACVy4B,WAAY,YACZrvB,cAAe,YACfmH,WAAY,UAEdqyD,UAAW,CACT15C,KAAM,CACJ/hB,QAAS,SAGb07D,UAAW,CACT/iE,QAAS,IACToH,MAAO,iBACP9G,OAAQ,KAEVq7D,SAAU,CACRv0D,MAAO,QACPhH,WAAY,OACZqkC,YAAa,EACb1zB,aAAc,QAEhBiyD,cAAe,CACbrjE,SAAU,QACV8kC,YAAa,QAEfw+B,SAAU,CACR17D,WAAY,SACZH,MAAO,QACPoJ,SAAU,aACVO,aAAc,QAEhBu7C,SAAU,CACRr7C,KAAM,UACNwxD,cAAe,SACf5hE,YAAa,QAEfqiE,YAAa,CACX77D,QAAS,OACTE,WAAY,UAEd47D,cAAe,CACb97D,QAAS,OACTE,WAAY,UAEdw0D,WAAY,CACVx0D,WAAY,SACZH,MAAO,QACP2J,aAAc,QAEhBqyD,SAAU,CACR/7D,QAAS,OACTF,OAAQ,OACRI,WAAY,UAEd87D,YAAa,CACXj8D,MAAO,QAETs4C,WAAY,CACV1/C,QAAS,mBACT,UAAW,CACTT,gBAAiB,gBAGrBgB,MAAO,CACL8G,QAAS,UAEXjG,UAAW,CACTlB,SAAU,QAEZojE,aAAc,CACZl8D,MAAO,OACPq9B,YAAa,MACb1zB,aAAc,QAEhBwyD,aAAc,CACZn8D,MAAO,OACPq9B,YAAa,QAEf++B,WAAY,CACVp8D,MAAO,QACPq9B,YAAa,OACb1zB,aAAc,QAEhB0yD,UAAW,CACTr8D,MAAO,QACPq9B,YAAa,OACb1zB,aAAc,QAEhBw/B,WAAY,CACVlpC,QAAS,SACT0J,aAAc,QAEhBkc,KAAM,CACJjtB,QAAS,OACTM,OAAQ,IACRJ,SAAU,OACVG,MAAO,WAET47D,SAAU,CACR1rD,OAAQ,UACR,UAAW,CACThR,gBAAiB,YAIrBmkE,aAAc,CACZziE,SAAU,WACV,WAAY,CACV0G,QAAS,KACT1G,SAAU,WACVC,IAAK,EACL6gB,KAAM,EACN5a,OAAQ,OACRC,MAAO,OACPF,WAAY,QACZkqB,QAAS,S,WC/IFuyC,GAAuB,SAAC5xD,EAAM6xD,GACzCrtD,qBAAU,WACRqtD,GAAiB,SAAAC,GACA,IAAD,EAAd,cAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAMrhE,MACG,OAAJuP,QAAI,IAAJA,OAAA,YAAAA,EAAM+xD,mBAAN,eAAmB5uD,MAAK,qBAAG1S,KAAgBqhE,EAAKrhE,QAGlD,QAER,CAACuP,KCgDAgyD,GAAgB,CACpBD,YAAanB,GACb1lB,mBAAoB4lB,GACpBpgB,uBAAwBmgB,IA8iB1B,IAIe5vD,gBAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EA3ef,YAII,IAHFgxD,EAGC,EAHDA,kBACAt+D,EAEC,EAFDA,cACAmS,EACC,EADDA,OAEMlW,EAAUxC,KADf,EAEWyC,cAALC,EAFN,oBAIK4B,EAAU+P,IAAMsX,WAAW/mB,GAC3BuP,EAAUC,cACRe,EAAoBC,wBAApBD,gBANP,EAQuBd,IAAMrQ,UAAS,GARtC,mBAQM7B,EARN,KAQYwzB,EARZ,OASyCthB,IAAMrQ,SAAS,IATxD,mBASM8gE,EATN,KASqBL,EATrB,OAoByBpwD,IAAMrQ,SAAS,QApBxC,mBAoBM+7B,EApBN,KAoBaglC,EApBb,OAqB6B1wD,IAAMrQ,SAAS,iBArB5C,mBAqBMghE,EArBN,KAqBeC,EArBf,OAuBoCpwD,YACnC24C,IADK8N,EAvBN,sBA0B+BzmD,YAAY04C,IAArCY,EA1BN,oBA4BK+W,EAAQN,GAAcC,GA5B3B,EA8BuBxwD,IAAMrQ,SAAS,GA9BtC,mBA8BMiX,EA9BN,KA8BYgiD,EA9BZ,KAgCK9mD,EAAY,CAChB8E,KAAMA,EACN+pD,QAAmB,QAAVjlC,EAAkBilC,EAAlB,WAAgCA,GACzCpvC,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,GACtCqV,OAAQA,GAAU,IAtCnB,EAyCyB1D,YAASkwD,EAAO,CAAE/uD,cAApCvD,EAzCP,EAyCOA,KAAMsC,EAzCb,EAyCaA,QAEdsvD,GAAqB5xD,EAAM6xD,GAE3B,IA4EMU,EAAoB,SAAAC,GAAQ,OAAI,SAAAluD,IALZ,SAACA,EAAOkuD,GAEhCL,EADcC,IAAYI,GAAsB,QAAVrlC,EACrB,OAAS,OAC1BklC,EAAWG,GAGXC,CAAkBnuD,EAAOkuD,KAa3B,OAVA/wD,IAAM+C,WAAU,gBACC+U,IAAXzT,GACJukD,EAAQ,KACP,CAACvkD,IAEJrE,IAAM+C,WAAU,WACd6lD,EAAQ,GACR/nD,MACC,CAAC2vD,EAAmB3vD,IAGrB,kBAACioD,GAAA,EAAD,CAAgBx1D,UAAU,MAAMnF,QAAS,CAAEc,KAAMd,EAAQiX,YACvD,kBAAC2jD,GAAA,EAAD,CAAOl6D,UAAWV,EAAQ45D,MAAOnkD,aAAW,gBAC1C,kBAAColD,GAAA,EAAD,CAAWn6D,UAAWV,EAAQq6D,WAC5B,kBAACS,GAAA,EAAD,KAnNa,SAAA96D,GACrB,MAAO,CACL,CACE0H,MAAO,wBACPszD,MAAO,OACP8H,OAAQ,gBACR/H,cAAe/6D,EAAQqhE,eAEzB,CACE35D,MAAO,eACPo7D,OAAQ,mBACR/H,cAAe/6D,EAAQg6D,SACvBgB,MAAO,QAET,CACEtzD,MAAO,4BACPo7D,OAAQ,QACR/H,cAAe/6D,EAAQshE,SACvBtG,MAAO,QAET,CACEtzD,MAAO,gBACPo7D,OAAQ,SACR/H,cAAe/6D,EAAQo6D,YAEzB,CACE1yD,MAAO,WACPo7D,OAAQ,gBACR/H,cAAe/6D,EAAQ0hE,YACvB1G,MAAO,QAET,CACEtzD,MAAO,GACPqzD,cAAe/6D,EAAQohE,UACvBpG,MAAO,OACP8H,OAAQ,IAEV,CACEp7D,MAAO,YACPo7D,OAAQ,iBACR/H,cAAe/6D,EAAQ2hE,aACvB3G,MAAO,QAET,CACEtzD,MAAO,WACPo7D,OAAQ,WACR/H,cAAe/6D,EAAQ4hE,aACvB5G,MAAO,QAET,CACEtzD,MAAO,UACPqzD,cAAe/6D,EAAQ6hE,WACvBiB,OAAQ,GACR9H,MAAO,QAET,CACEtzD,MAAO,QACPqzD,cAAe/6D,EAAQ8hE,UACvBgB,OAAQ,GACR9H,MAAO,QAET,CAAEtzD,MAAO,UAAWo7D,OAAQ,GAAI9H,MAAO,UAuJ9BC,CAAej7D,GAASqQ,KAAI,SAAA4sB,GAAO,OAClC,kBAACi+B,GAAA,EAAD,CACE7iD,IAAK4kB,EAAQv1B,MACbszD,MAAO/9B,EAAQ+9B,MACfxyD,MAAO,CAAET,cAAe,IACxBrH,UAAWsG,KAAWhH,EAAQ65D,UAAW58B,EAAQ89B,eACjDgI,cAAeP,IAAYvlC,EAAQv1B,OAAQ61B,GAE3C,kBAACylC,GAAA,EAAD,CACEC,OAAQT,IAAYvlC,EAAQ6lC,QAAsB,KAAZN,EACtCU,UAAWV,IAAYvlC,EAAQ6lC,OAASvlC,EAAQ,MAChD58B,QAASgiE,EAAkB1lC,EAAQ6lC,QACnCpiE,UAAWV,EAAQi9B,QACnBp0B,SAA6B,KAAnBo0B,EAAQ6lC,OAClBK,aAAiC,KAAnBlmC,EAAQ6lC,QAErB5iE,EAAE+8B,EAAQv1B,cAMrB,kBAACyzD,GAAA,EAAD,KACG/qD,GACCA,EAAKiyD,IACLjyD,EAAKiyD,GAAmBhyD,KAAI,SAAAs4C,GAAO,OACjC,kBAACmS,GAAA,EAAD,CACEziD,IAAKswC,EAAQ9nD,GACbb,QAAS,CAAEc,KAAMd,EAAQs6D,UACzB35D,QAAS,SAAAoJ,GACH4+C,EAAQ1kC,sBAEZla,EAAEojB,kBAjKK,SAAAw7B,GACrBx1B,GAAQ,GACR8uC,EAAiBtZ,GAgKHya,CAAeza,KAEjBjoD,UAAWsG,KAAW,eACnBhH,EAAQ+hE,aAAepZ,EAAQ1kC,uBAGlC,kBAACi3C,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQqhE,eAEVrG,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KACG6hD,EAAQyX,aAAezX,EAAQ0X,uBAC5B1X,EAAQyX,aAAezX,EAAQ0X,uBAC/B1X,EAAQkC,iBAEd,kBAAC/jD,EAAA,EAAD,KAAa6hD,EAAQ6X,eAEvB,kBAACtF,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQg6D,UACjDgB,MAAM,QAEN,kBAACl0D,EAAA,EAAD,CAAYpG,UAAWV,EAAQg6D,UAC5BrR,EAAQ1kC,oBACL,uBADH,UAEM0kC,EAAQxQ,eAFd,YAEgCwQ,EAAQvQ,iBAG7C,kBAAC8iB,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQshE,UACjDtG,MAAM,QAEN,yBAAKt6D,UAAWV,EAAQuhE,aAxNpB,aAyND5Y,EAAQ2X,aACP,kBAAC,KAAD,CACE/hE,SAAS,QACTmC,UAAWV,EAAQ2qD,WA7NhB,kBAiONhC,EAAQ2X,aACP,kBAAC,KAAD,CACE/hE,SAAS,QACTmC,UAAWV,EAAQ2qD,WAIvB,kBAAC7jD,EAAA,EAAD,CAAYpG,UAAWV,EAAQpB,OAxOxB,kBAyOJ+pD,EAAQ2X,aACP3X,EAAQngC,cAAc5pB,MAzOxB,aA2OC+pD,EAAQ2X,aACP3X,EAAQ7W,SAASlzC,SAIzB,kBAACs8D,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQo6D,YACjDY,MAAM,QAEN,yBAAKt6D,UAAWV,EAAQwhE,eACK,IAA1B7Y,EAAQ38B,OAAOzpB,QAAf,SAC0B,IAA1BomD,EAAQ38B,OAAOzpB,QAAgBomD,EAAQ38B,OAAOzpB,QAAU,GACvD,kBAACuE,EAAA,EAAD,CAAYpG,UAAWV,EAAQyhE,UAC5BnZ,GAAeK,EAAQ38B,QACvB48B,GAAkBD,EAAQ38B,SAA1B,YACMy8B,GAAyBE,EAAQ38B,OAAQ9rB,GAD/C,MAIsB,IAA1ByoD,EAAQ38B,OAAOzpB,QAAgBomD,EAAQ38B,OAAOzpB,OAAS,GACtD,kBAACuE,EAAA,EAAD,CAAYpG,UAAWV,EAAQyhE,UAC5BnZ,GAAeK,EAAQ38B,QAD1B,KAEGy8B,GACCE,EAAQ38B,OAAO6T,MAAM,EAAG,GACxB3/B,GAJJ,OAUyB,IAA1ByoD,EAAQ38B,OAAOzpB,QACdomD,EAAQ38B,QACR28B,EAAQ38B,OAAOzpB,OAAS,GACtB,kBAAC,GAAD,CACE+oB,KACE,wBAAI5qB,UAAWV,EAAQsrB,MACpBq9B,EAAQ38B,OAAO6T,MAAM,GAAGxvB,KAAI,SAACi5C,EAAO/4C,GACnC,OACE,wBAAI8H,IAAK9H,GACN+4C,EAAMld,aADT,KACyB,IACtBkd,EAAMztC,YAAY,GAAGA,kBAOhC,kBAAC,GAAD,CAAYyxB,OAAQqb,EAAQ38B,OAAOzpB,OAAS,OAKtD,kBAAC24D,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQ0hE,aACjD1G,MAAM,QAlSG,kBAoSRrS,EAAQ2X,aAAR,UACI3X,EAAQxgC,SADZ,YACwB9O,KACrBsvC,EAAQngC,cAAc0f,YACtB,cACA1jB,OAAO,UAvSP,aAySHmkC,EAAQ2X,aACP3X,EAAQzgB,aADT,UAEI7uB,KAAOsvC,EAAQ1W,cAAcztB,OAAO,cAFxC,mCAGInL,KAAOsvC,EAAQzgB,aAAa1jB,OAAO,UA5SpC,aA6SHmkC,EAAQ2X,cACN3X,EAAQzgB,aACTygB,EAAQ1W,cAFT,UAGI54B,KAAOsvC,EAAQ1W,cAAcztB,OAAO,eAhTrC,aAiTHmkC,EAAQ2X,cACN3X,EAAQzgB,cACRygB,EAAQ1W,cAFV,UAKH,kBAACipB,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,WAC9BmB,MAAM,QAEN,kBAAC,KAAD,CACExyD,MAAO,CAAE8G,KAAM,SAAU7J,MAAO,OAAQD,OAAQ,WAGpD,kBAAC01D,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQ2hE,cAEV3G,MAAM,QAtUG,kBAwURrS,EAAQ2X,aAAR,UACI3X,EAAQvgC,OADZ,YACsB/O,KACnBsvC,EAAQngC,cAAc4f,aACtB,cACA5jB,OAAO,UA3UP,aA4UHmkC,EAAQ2X,aACP3X,EAAQvgB,cADT,UAEI/uB,KAAOsvC,EAAQvgB,cAAc5jB,OAAO,cAFxC,mCAGInL,KAAOsvC,EAAQvgB,cAAc5jB,OAAO,SAHxC,KA5UG,aAgVHmkC,EAAQ2X,cACN3X,EAAQvgB,eACRugB,EAAQ5R,YACT,SAnVE,aAoVH4R,EAAQ2X,aACP3X,EAAQ5R,YADT,UAEI19B,KAAOsvC,EAAQ5R,YAAYvyB,OAAO,gBAEzC,kBAAC02C,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQ4hE,cAEV5G,MAAM,QAEL96D,EAAEyoD,EAAQpjB,WAGb,kBAAC21B,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,GACxBrH,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQ6hE,YACjD7G,MAAM,QAELrS,EAAQjQ,aAAan2C,QAAU,GAC9B,kBAACuE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ4uC,YAC5ByZ,GAAaM,EAAQjQ,eAGzBiQ,EAAQjQ,aAAan2C,OAAS,GAC7B,kBAACuE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ4uC,YAC5ByZ,GAAaM,EAAQjQ,aAAa7Y,MAAM,EAAG,IAD9C,QAKD8oB,EAAQjQ,aAAan2C,OAAS,GAC7B,kBAAC,GAAD,CACE+oB,KACE,wBAAI5qB,UAAWV,EAAQsrB,MACpBq9B,EAAQjQ,aAAa7Y,MAAM,GAAGxvB,KAAI,SAACgzD,EAAG9yD,GACrC,OACE,wBAAI8H,IAAK9H,GACN8yD,EAAE7rB,WADL,MACoB6rB,EAAEr3B,MAAM,GAAGptC,YAOvC,kBAAC,GAAD,CAAY0uC,OAAQqb,EAAQjQ,aAAan2C,OAAS,MAKxD,kBAAC24D,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,GACxBrH,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQ8hE,WACjD9G,MAAM,QAEN,kBAAC,GAAD,CACE/8D,SAAU,IACVqtB,KACE,yBAAK5qB,UAAWV,EAAQsrB,KAAM9iB,MAAO,CAAExK,SAAU,MAC9C2qD,EAAQ0W,cACP1W,EAAQuW,eACR,4BAIN,kBAACoE,GAAA,EAAD,QAIJ,kBAACpI,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWV,EAAQ65D,UACnBmB,MAAM,SAEN,yBAAKxyD,MAAO,CAAE9C,QAAS,cAAe0J,aAAc,SAClD,kBAAC3O,EAAA,EAAD,CACEC,UAAWV,EAAQ+9C,WACnBI,oBAAoB,EACpBC,oBAAoB,EACpB3oC,aAAW,OACX9U,QAAS,SAAAoJ,GACPA,EAAEojB,kBACEw7B,EAAQngC,cACV7W,EAAQsE,KAAR,mCAC8B0yC,EAAQ9nD,GADtC,UAIA8Q,EAAQsE,KAAR,+BAC0B0yC,EAAQ9nD,GADlC,YAMJ,kBAAC,GAAD,OAEF,kBAACJ,EAAA,EAAD,CACEE,QArbK,kBAsbHgoD,EAAQ2X,YACJ,SAAAv2D,GAnYe,IAAAyH,EAoYbzH,EAAEojB,kBAnY5BrrB,EAAQ,CACNlD,MAAM,kBACNwB,YAAY,GAAD,QAH0BoR,EAqYoBm3C,GAjYlD9P,0BAA0Bt2C,SAAWiP,EAAKs3C,UAC3C,wDACA,IAEN3oD,YAAY,GAAD,OAAKqR,EAAK2W,SAAV,mBAAwB3W,EAAK4W,OAA7B,mBAAyC5W,EAAK2mC,eAA9C,YAAgE3mC,EAAK4mC,cAArE,mBAAwF5mC,EAAKgX,cAAc5pB,OACtHyB,iBAAkB,iBAClBC,iBAAkB,OAClBC,WAAW,IACVqT,MAAK,kBACNklD,EAA2B,CAAEnlD,UAAW,CAAE9S,GAAI2Q,EAAK3Q,MAAQ+S,MAAK,WAC9DjB,EAAgBzS,EAAE,oDAAqD,CACrEkB,QAAS,YAGPgP,EAAKiyD,GAAmB9/D,QAAU,GAAKkW,GACzC/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,IAEf/F,EAAQ,CAAE+F,gBA+WQ,SAAA1O,GA1WU,IAAAyH,EA2WRzH,EAAEojB,kBA1W5BrrB,EAAQ,CACNlD,MAAM,kBACNwB,YAAY,GAAD,QAHqBoR,EA4WoBm3C,GAxW7C1H,4BAA4B1+C,SAAWiP,EAAKs3C,UAC7C,wDACA,IAEN3oD,YAAY,GAAD,OAAKqR,EAAKygC,aAAezgC,EAAKygC,aAAe,IAA7C,mBACTzgC,EAAK42B,aACD/uB,KAAO7H,EAAK42B,aAAc,cAAc5jB,OAAO,YAC/C,IAHK,2BAKPhT,EAAK2mC,eALE,YAKgB3mC,EAAK4mC,cALrB,mBAKwC5mC,EAAKsgC,SAASlzC,OACjEyB,iBAAkB,iBAClBC,iBAAkB,OAClBC,WAAW,IACVqT,MAAK,kBACN+3C,EAAsB,CAAEh4C,UAAW,CAAEo4C,IAAK,CAACv6C,EAAK3Q,OAAS+S,MAAK,WAC5DjB,EAAgBzS,EAAE,+CAAgD,CAChEkB,QAAS,YAGPgP,EAAKiyD,GAAmB9/D,QAAU,GAAKkW,GACzC/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,IAEf/F,EAAQ,CAAE+F,gBAkVE0lC,oBAAoB,EACpBC,oBAAoB,EACpB19C,UAAWV,EAAQ+9C,WACnBtoC,aAAW,UAEX,kBAAC,IAAD,CAAkB/U,UAAWV,EAAQP,mBAOjD,kBAAC,GAAD,CACEI,QAtbM,WACdszB,GAAQ,IAsbAxzB,KAAMA,EACNgpD,QAAS2Z,EACTzC,aA/cU,aAgdRyC,EAAchC,YACVzX,GAA4ByZ,GAC5B1Y,GAAiC0Y,GAEvC5D,cAAe,CAAE3rC,MAAO2vC,EAAO/uD,iBAKpCvD,GAAQA,EAAKiyD,IACZ,kBAAC,GAAD,CACE5pD,KAAMA,EAAO,EACb4wC,MAAOj5C,EAAKmzD,sBAAsBC,MAAMnB,GACxCvpD,OAAU2qD,KAAKC,IAAItzD,EAAKmzD,sBAAsBI,oBAAoBtB,GAC7C,IAAZ5pD,EAAO,IAChBM,MACE3I,EAAKmzD,sBAAsBI,oBAAoBtB,GAEjDv4D,SA/WoB,SAACC,EAAG0O,GAC9B/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,UC1OJjb,GAdGC,YAAW,CAC3BmmE,YAAa,CACX5lE,SAAU,OACV0H,QAAS,UAEXs+C,YAAa,CACXzlD,SAAU,OACVG,MAAO,UACP,YAAa,CACXb,OAAQ,WCIRgmE,GAAkB,CACtBC,SAAU7Y,GACV8Y,cAAe7Y,IAiDF8Y,OA9Cf,YAA8D,IAAvCrb,EAAsC,EAAtCA,QAASsb,EAA6B,EAA7BA,iBAAkBvxD,EAAW,EAAXA,QAC1C1S,EAAUxC,KAD2C,EAE/CyC,cAALC,EAFoD,sBAIzB2R,IAAMrQ,SAASyiE,GAJU,mBAIpDtE,EAJoD,KAIzCuE,EAJyC,OAKnCryD,IAAMrQ,UAAS,GALoB,mBAKpD7B,EALoD,KAK9CwzB,EAL8C,OAOnC9gB,YAAYwxD,GAAgBlb,EAAQ2X,cAArD6D,EAPoD,oBA2B3D,OACE,kBAACroC,GAAA,EAAD,CAAap7B,UAAWV,EAAQ4jE,aAC9B,kBAAC7nC,GAAA,EAAD,CACEz5B,MAAOq9D,EACPhgE,KAAMA,EACNE,QAAS,SAAAkK,GAAC,OAvBI,SAAAA,GAClBA,EAAEojB,kBACFgG,GAAQ,GAqBUlxB,CAAY8H,IAC1BypB,OAAQ,SAAAzpB,GAAC,OAnBI,SAAAA,GACjBA,EAAEojB,kBACFgG,GAAQ,GAiBSixC,CAAWr6D,IACxBrJ,UAAWV,EAAQgkD,YACnBl6C,SAAU,SAAA4K,GAhBkB,IAAC7T,EAAIyB,EAAJzB,EAiBD8nD,EAAQ9nD,GAjBHyB,EAiBOoS,EAAM1K,OAAO1H,MAhBzD4hE,EAAa5hE,GACbqmD,EAAQgX,UAAYr9D,EACpB6hE,EAAc,CAAExwD,UAAW,CAAE9S,GAAIA,EAAI8+D,UAAWr9D,KAC7CsR,MAAK,kBAAMlB,OACXmX,UAeC,kBAAChU,GAAA,EAAD,CAAUvT,OAAO,GAAOpC,EAAE,YAC1B,kBAAC2V,GAAA,EAAD,CAAUvT,OAAO,GAAQpC,EAAE,mBC4EpB1C,GAtIGC,aAAW,SAAAC,GAAK,MAAG,CACnCuZ,UAAW,CACTvR,QAAS,OACTG,cAAe,SACfF,eAAgB,gBAChBupC,SAAU,UAGZ0qB,MAAM,aACJn0D,MAAO,OACPypC,SAAU,UACTxxC,EAAMQ,YAAYC,KAAK,MAAO,CAC7BgxC,UAAW,SACXlP,SAAU,SACVv6B,QAAQ,QACRD,MAAO,SAGXo0D,UAAW,CACTt7D,SAAU,OACVV,OAAQ,OACRa,MAAO,UACPL,QAAS,GAEX4+B,QAAS,CACPv+B,MAAO,UACPD,WAAY,OACZF,SAAU,OACVy4B,WAAY,YACZrvB,cAAe,YACfmH,WAAY,UAEduyD,cAAe,CACb57D,MAAO,QACPq9B,YAAa,OACb1zB,aAAc,KAEhBkyD,SAAU,CACR17D,WAAY,SACZ5H,SAAU,QACVoR,aAAc,OACdP,SAAU,cAEZ0yD,YAAa,CACX77D,QAAS,OACTE,WAAY,UAEd+kD,SAAU,CACRr7C,KAAM,UACN5J,QAAS,SACTo7D,cAAe,SACf5hE,YAAa,QAEfN,MAAO,CACL8G,QAAS,UAEXk8D,aAAc,CACZn8D,MAAO,OACPq9B,YAAa,QAEfk3B,SAAU,CACRv0D,MAAO,QACP2J,aAAc,OACd3Q,WAAY,QAEd27D,WAAY,CACV10D,QAAS,OACTE,WAAY,SACZwJ,aAAc,OACd3J,MAAO,SAETg8D,SAAU,CACR/7D,QAAS,OACTE,WAAY,SACZJ,OAAQ,OACRtG,YAAa,QAEfiiE,UAAW,CACT15C,KAAM,CACJ/hB,QAAS,SAGb2+D,qBAAsB,CACpB5+D,MAAO,QACPq9B,YAAa,QAGfwhC,WAAW,aACT7+D,MAAO,QACP/G,MAAO,oBACNokC,YAAa,QACbplC,EAAMQ,YAAYC,KAAM,CACvBsH,MAAO,QACPq9B,YAAa,SAGjB8gC,YAAa,CACX5lE,SAAU,OACV0H,QAAS,UAEXs+C,YAAa,CACXzlD,SAAU,OACVG,MAAO,UACP,YAAa,CACXb,OAAQ,SAGZytB,KAAM,CACJjtB,QAAS,OACTM,OAAQ,IACRJ,SAAU,OACVG,MAAO,WAET47D,SAAU,CACR1rD,OAAQ,UACR,UAAW,CACThR,gBAAiB,YAGrBmkE,aAAc,CACZziE,SAAU,WACV,WAAY,CACV0G,QAAS,KACT1G,SAAU,WACVC,IAAK,EACL6gB,KAAM,EACN5a,OAAQ,OACRC,MAAO,OACPF,WAAY,QACZkqB,QAAS,SC8Qf,IAIepe,gBAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EAhSf,YAA+E,IAAzCkzD,EAAwC,EAAxCA,cAAexgE,EAAyB,EAAzBA,cAAemS,EAAU,EAAVA,OAC5DlW,EAAUxC,KAD4D,EAEhEyC,cAALC,EAFqE,sBAIpD2R,IAAMrQ,UAAS,GAJqC,mBAIrE7B,EAJqE,KAI/DwzB,EAJ+D,OAKlCthB,IAAMrQ,SAAS,IALmB,mBAKrE8gE,EALqE,KAKtDL,EALsD,OAMlDpwD,IAAMrQ,SAAS,QANmC,mBAMrE+7B,EANqE,KAM9DglC,EAN8D,OAO9C1wD,IAAMrQ,SAAS,iBAP+B,mBAOrEghE,EAPqE,KAO5DC,EAP4D,OAQpD5wD,IAAMrQ,SAAS,GARqC,mBAQrEiX,EARqE,KAQ/DgiD,EAR+D,KAmBtE9mD,EAAS,eAhG6B,SAAC8E,EAAM8kB,EAAOilC,GAC1D,MAAO,CACLpM,IAAK,CACHxsC,YAAY,EACZnR,KAAMA,EACN+pD,QAAmB,QAAVjlC,EAAkBilC,EAAlB,WAAgCA,IAE3CgC,QAAS,CACP56C,YAAY,EACZ+1C,WAAW,EACXlnD,KAAMA,EACN+pD,QAAmB,QAAVjlC,EAAkBilC,EAAlB,WAAgCA,IAE3CiC,WAAY,CACV76C,YAAY,EACZ+1C,WAAW,EACXlnD,KAAMA,EACN+pD,QAAmB,QAAVjlC,EAAkBilC,EAAlB,WAAgCA,KAgFxCkC,CAAsCjsD,EAAM8kB,EAAOilC,GACpD+B,GAFW,CAIbruD,OAAQA,GAAU,GAClBkd,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,KA1BoC,EA6BlD2R,YAASwuD,GAAc,CAC/CrtD,cADMvD,EA7BoE,EA6BpEA,KAAMsC,EA7B8D,EA6B9DA,QAIdsvD,GAAqB5xD,EAAM6xD,GAE3B,IAaMU,EAAoB,SAAAC,GAAQ,OAAI,SAAAluD,IANZ,SAACA,EAAOkuD,GAEhCL,EADcC,IAAYI,GAAsB,QAAVrlC,EACrB,OAAS,OAC1BklC,EAAWG,GAIXC,CAAkBnuD,EAAOkuD,KAa3B,OAVA/wD,IAAM+C,WAAU,gBACC+U,IAAXzT,GACJukD,EAAQ,KACP,CAACvkD,IAEJrE,IAAM+C,WAAU,WACd6lD,EAAQ,GACR/nD,MACC,CAAC6xD,EAAe7xD,IAGjB,kBAACioD,GAAA,EAAD,CAAgBx1D,UAAU,MAAMnF,QAAS,CAAEc,KAAMd,EAAQiX,YACvD,kBAAC2jD,GAAA,EAAD,CAAOl6D,UAAWV,EAAQ45D,MAAOnkD,aAAW,gBAC1C,kBAAColD,GAAA,EAAD,CAAWn6D,UAAWV,EAAQq6D,WAC5B,kBAACS,GAAA,EAAD,KAtHa,SAAA96D,GACrB,MAAO,CACL,CACE0H,MAAO,wBACPszD,MAAO,OACP8H,OAAQ,gBACR/H,cAAe/6D,EAAQqhE,eAEzB,CACE35D,MAAO,eACPo7D,OAAQ,mBACR/H,cAAe/6D,EAAQg6D,SACvBgB,MAAO,QAET,CACEtzD,MAAO,4BACPo7D,OAAQ,QACR/H,cAAe/6D,EAAQshE,SACvBtG,MAAO,QAET,CACEtzD,MAAO,gBACPo7D,OAAQ,SACR/H,cAAe/6D,EAAQo6D,YAEzB,CACE1yD,MAAO,WACPo7D,OAAQ,WACR/H,cAAe/6D,EAAQ4hE,aACvB5G,MAAO,QAET,CACEtzD,MAAO,iBACPqzD,cAAe/6D,EAAQqkE,qBACvBvB,OAAQ,oBACR9H,MAAO,QAET,CACEtzD,MAAO,QACPqzD,cAAe/6D,EAAQ8hE,UACvBgB,OAAQ,GACR9H,MAAO,QAET,CACEtzD,MAAO,SACPqzD,cAAe/6D,EAAQskE,WACvBxB,OAAQ,GACR9H,MAAO,UAwEAC,CAAej7D,GAASqQ,KAAI,SAAA4sB,GAAO,OAClC,kBAACi+B,GAAA,EAAD,CACE7iD,IAAK4kB,EAAQv1B,MACbszD,MAAO/9B,EAAQ+9B,MACfxyD,MAAO,CAAET,cAAe,IACxBrH,UAAWsG,KAAWhH,EAAQ65D,UAAW58B,EAAQ89B,eACjDgI,cAAeP,IAAYvlC,EAAQv1B,OAAQ61B,GAE3C,kBAACylC,GAAA,EAAD,CACEC,OAAQT,IAAYvlC,EAAQ6lC,QAAsB,KAAZN,EACtCU,UAAWV,IAAYvlC,EAAQ6lC,OAASvlC,EAAQ,MAChD58B,QAASgiE,EAAkB1lC,EAAQ6lC,QACnCpiE,UAAWV,EAAQi9B,QACnBp0B,SAA6B,KAAnBo0B,EAAQ6lC,OAClBK,aAAiC,KAAnBlmC,EAAQ6lC,QAErB5iE,EAAE+8B,EAAQv1B,cAMrB,kBAACyzD,GAAA,EAAD,KACG/qD,GACCA,EAAK+xD,aACL/xD,EAAK+xD,YAAY9xD,KAAI,SAAAs4C,GAAO,OAC1B,kBAACmS,GAAA,EAAD,CACEziD,IAAKswC,EAAQ9nD,GACbb,QAAS,CAAEc,KAAMd,EAAQs6D,UACzB35D,QAAS,SAAAoJ,GACH4+C,EAAQ1kC,sBACZla,EAAEojB,kBAxFK,SAAAw7B,GACrBx1B,GAAQ,GACR8uC,EAAiBtZ,GAuFHya,CAAeza,KAEjBjoD,UAAWsG,KAAW,eACnBhH,EAAQ+hE,aAAepZ,EAAQ1kC,uBAGlC,kBAACi3C,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQqhE,eAEVrG,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KACG6hD,EAAQyX,aAAezX,EAAQ0X,uBAC5B1X,EAAQyX,aAAezX,EAAQ0X,uBAC/B1X,EAAQkC,iBAEd,kBAAC/jD,EAAA,EAAD,KAAa6hD,EAAQ6X,eAEvB,kBAACtF,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQg6D,UACjDgB,MAAM,QAEN,kBAACl0D,EAAA,EAAD,CAAYpG,UAAWV,EAAQg6D,UAC5BrR,EAAQ1kC,oBACL,uBADH,UAEM0kC,EAAQxQ,eAFd,YAEgCwQ,EAAQvQ,iBAG7C,kBAAC8iB,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQshE,UACjDtG,MAAM,QAEN,yBAAKt6D,UAAWV,EAAQuhE,aA9LpB,aA+LD5Y,EAAQ2X,aACP,kBAAC,KAAD,CACE/hE,SAAS,QACTmC,UAAWV,EAAQ2qD,WAnMhB,kBAsMNhC,EAAQ2X,aACP,kBAAC,KAAD,CACE/hE,SAAS,QACTmC,UAAWV,EAAQ2qD,WAGvB,kBAAC7jD,EAAA,EAAD,CAAYpG,UAAWV,EAAQpB,OA5MxB,kBA6MJ+pD,EAAQ2X,aACP3X,EAAQngC,cAAc5pB,MA7MxB,aA+MC+pD,EAAQ2X,aACP3X,EAAQ7W,SAASlzC,SAIzB,kBAACs8D,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQo6D,YACjDY,MAAM,QAEqB,IAA1BrS,EAAQ38B,OAAOzpB,QAAf,SAC0B,IAA1BomD,EAAQ38B,OAAOzpB,QAAgBomD,EAAQ38B,OAAOzpB,QAAU,GACvD,kBAACuE,EAAA,EAAD,CAAYpG,UAAWV,EAAQyhE,UAC5BnZ,GAAeK,EAAQ38B,QACvB48B,GAAkBD,EAAQ38B,SAA1B,YACMy8B,GAAyBE,EAAQ38B,OAAQ9rB,GAD/C,MAIsB,IAA1ByoD,EAAQ38B,OAAOzpB,QAAgBomD,EAAQ38B,OAAOzpB,OAAS,GACtD,kBAACuE,EAAA,EAAD,CAAYpG,UAAWV,EAAQyhE,UAC5BnZ,GAAeK,EAAQ38B,QAD1B,KAEGy8B,GAAyBE,EAAQ38B,OAAO6T,MAAM,EAAG,GAAI3/B,GAFxD,OAOyB,IAA1ByoD,EAAQ38B,OAAOzpB,QACdomD,EAAQ38B,QACR28B,EAAQ38B,OAAOzpB,OAAS,GACtB,kBAAC,GAAD,CACE+oB,KACE,wBAAI5qB,UAAWV,EAAQsrB,MACpBq9B,EAAQ38B,OAAO6T,MAAM,GAAGxvB,KAAI,SAACi5C,EAAO/4C,GACnC,OACE,wBAAI8H,IAAK9H,GACN+4C,EAAMld,aADT,KACyB,IACtBkd,EAAMztC,YAAY,GAAGA,kBAOhC,kBAAC,GAAD,CAAYyxB,OAAQqb,EAAQ38B,OAAOzpB,OAAS,MAIpD,kBAAC24D,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQ4hE,cAEV5G,MAAM,QAEL96D,EAAEyoD,EAAQpjB,WAEb,kBAAC21B,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQqkE,sBAEVrJ,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KACGuS,KAAOsvC,EAAQ+W,kBAAkBl7C,OAAO,eAE3C,kBAAC1d,EAAA,EAAD,KACGuS,KAAOsvC,EAAQ+W,kBAAkBl7C,OAAO,WAI7C,kBAAC02C,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,GACxBrH,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQ8hE,WACjD9G,MAAM,QAEN,kBAAC,GAAD,CACE/8D,SAAU,IACVqtB,KACE,yBAAK5qB,UAAWV,EAAQsrB,KAAM9iB,MAAO,CAAExK,SAAU,MAC9C2qD,EAAQ0W,cACP1W,EAAQuW,eACR,4BAIN,kBAACoE,GAAA,EAAD,QAIJ,kBAACpI,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQskE,YACjDtJ,MAAM,SAEN,kBAAC,GAAD,CACErS,QAASA,EACTj2C,QAASA,EACTuxD,iBAAkBtb,EAAQgX,iBAKpC,kBAAC,GAAD,CACE9/D,QAnPM,WACdszB,GAAQ,IAmPAxzB,KAAMA,EACNgpD,QAAS2Z,EACTzC,aA3TU,aA4TRyC,EAAchC,YACVzX,GAA4ByZ,GAC5B1Y,GAAiC0Y,GAEvC5D,cAAe,CAAE3rC,MAAOiuC,GAAcrtD,iBAI3CvD,GAAQA,EAAK+xD,aACZ,kBAAC,GAAD,CACE1pD,KAAMA,EAAO,EACb4wC,MAAOj5C,EAAKmzD,sBAAsBC,MAAMrB,YACxCrpD,OAAU2qD,KAAKC,IAAItzD,EAAKmzD,sBAAsBI,oBAAoBxB,YAC5C,IAAZ1pD,EAAO,IACjBM,MAAO3I,EAAKmzD,sBAAsBI,oBAAoBxB,YACtDr4D,SAlPoB,SAACC,EAAG0O,GAC9B/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,UCpDJjb,GAtGGC,aAAW,SAAAC,GAAK,MAAI,CACpCuZ,UAAW,CACTvR,QAAS,OACTG,cAAe,SACfF,eAAgB,gBAChBupC,SAAU,UAEZ0qB,MAAM,aACJn0D,MAAO,OACPypC,SAAU,UACTxxC,EAAMQ,YAAYC,KAAK,MAAO,CAC7BgxC,UAAW,SACXlP,SAAU,SACVv6B,QAAS,QACTD,MAAO,SAGXo0D,UAAW,CACTt7D,SAAU,OACVV,OAAQ,OACRa,MAAO,UACPL,QAAS,GAEX4+B,QAAS,CACPv+B,MAAO,UACPD,WAAY,OACZF,SAAU,OACVy4B,WAAY,YACZrvB,cAAe,YACfmH,WAAY,UAEduyD,cAAe,CACb57D,MAAO,QACPq9B,YAAa,OACb1zB,aAAc,QAEhBkyD,SAAU,CACR17D,WAAY,SACZH,MAAO,QACPoJ,SAAU,aACVO,aAAc,QAEhBmyD,YAAa,CACX77D,QAAS,OACTE,WAAY,UAEd+kD,SAAU,CACRr7C,KAAM,UACN5J,QAAS,SACTo7D,cAAe,SACf5hE,YAAa,QAEfN,MAAO,CACL8G,QAAS,UAEXk8D,aAAc,CACZn8D,MAAO,OACPq9B,YAAa,QAEfk3B,SAAU,CACRv0D,MAAO,QACP2J,aAAc,OACd3Q,WAAY,QAEd27D,WAAY,CACVx0D,WAAY,SACZH,MAAO,QACPq9B,YAAa,QAEf2+B,SAAU,CACR/7D,QAAS,OACTE,WAAY,SACZJ,OAAQ,OACRtG,YAAa,QAEfosB,KAAM,CACJjtB,QAAS,OACTM,OAAQ,IACRJ,SAAU,OACVG,MAAO,WAET47D,SAAU,CACR1rD,OAAQ,UACR,UAAW,CACThR,gBAAiB,YAGrBmkE,aAAc,CACZziE,SAAU,WACV,WAAY,CACV0G,QAAS,KACT1G,SAAU,WACVC,IAAK,EACL6gB,KAAM,EACN5a,OAAQ,OACRC,MAAO,OACPF,WAAY,QACZkqB,QAAS,SCxDT2yC,GAAgB,CACpBD,YAAanB,GACb1lB,mBAAoB4lB,GACpBpgB,uBAAwBmgB,IAyT1B,IAIe5vD,gBAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EA/Qf,YAII,IAHFgxD,EAGC,EAHDA,kBACAt+D,EAEC,EAFDA,cACAmS,EACC,EADDA,OAEMlW,EAAUxC,KADf,EAEWyC,cAALC,EAFN,sBAIuB2R,IAAMrQ,UAAS,GAJtC,mBAIM7B,EAJN,KAIYwzB,EAJZ,OAKyCthB,IAAMrQ,SAAS,IALxD,mBAKM8gE,EALN,KAKqBL,EALrB,OAMyBpwD,IAAMrQ,SAAS,QANxC,mBAMM+7B,EANN,KAMaglC,EANb,OAO6B1wD,IAAMrQ,SAAS,iBAP5C,mBAOMghE,EAPN,KAOeC,EAPf,KASKC,EAAQN,GAAcC,GAT3B,EAWuBxwD,IAAMrQ,SAAS,GAXtC,mBAWMiX,EAXN,KAWYgiD,EAXZ,KAaK9mD,EAAY,CAChBgxD,WAAW,EACXlsD,KAAMA,EACN+pD,QAAmB,QAAVjlC,EAAkBilC,EAAlB,WAAgCA,GACzCpvC,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,GACtCqV,OAAQA,GAAU,IApBnB,EAuByB1D,YAASkwD,EAAO,CACxC/uD,cADMvD,EAvBP,EAuBOA,KAAMsC,EAvBb,EAuBaA,QAIdsvD,GAAqB5xD,EAAM6xD,GAE3B,IAsBMU,EAAoB,SAAAC,GAAQ,OAAI,SAAAluD,IANZ,SAACA,EAAOkuD,GAEhCL,EADcC,IAAYI,GAAsB,QAAVrlC,EACrB,OAAS,OAC1BklC,EAAWG,GAIXC,CAAkBnuD,EAAOkuD,KAa3B,OAVA/wD,IAAM+C,WAAU,gBACC+U,IAAXzT,GACJukD,EAAQ,KACP,CAACvkD,IAEJrE,IAAM+C,WAAU,WACd6lD,EAAQ,GACR/nD,MACC,CAAC2vD,EAAmB3vD,IAGrB,kBAACioD,GAAA,EAAD,CAAgBx1D,UAAU,MAAMnF,QAAS,CAAEc,KAAMd,EAAQiX,YACvD,kBAAC2jD,GAAA,EAAD,CAAOl6D,UAAWV,EAAQ45D,MAAOnkD,aAAW,gBAC1C,kBAAColD,GAAA,EAAD,CAAWn6D,UAAWV,EAAQq6D,WAC5B,kBAACS,GAAA,EAAD,KAjHa,SAAA96D,GACrB,MAAO,CACL,CACE0H,MAAO,wBACPszD,MAAO,OACP8H,OAAQ,gBACR/H,cAAe/6D,EAAQqhE,eAEzB,CACE35D,MAAO,eACPo7D,OAAQ,mBACR/H,cAAe/6D,EAAQg6D,SACvBgB,MAAO,QAET,CACEtzD,MAAO,4BACPo7D,OAAQ,QACR/H,cAAe/6D,EAAQshE,SACvBtG,MAAO,QAET,CACEtzD,MAAO,gBACPo7D,OAAQ,SACR/H,cAAe/6D,EAAQo6D,YAEzB,CACE1yD,MAAO,QACPqzD,cAAe/6D,EAAQ8hE,UACvBgB,OAAQ,GACR9H,MAAO,QAET,CACEtzD,MAAO,WACPo7D,OAAQ,WACR/H,cAAe/6D,EAAQ4hE,aACvB5G,MAAO,UA+EAC,CAAej7D,GAASqQ,KAAI,SAAA4sB,GAAO,OAClC,kBAACi+B,GAAA,EAAD,CACE7iD,IAAK4kB,EAAQv1B,MACbszD,MAAO/9B,EAAQ+9B,MACfxyD,MAAO,CAAET,cAAe,IACxBrH,UAAWsG,KAAWhH,EAAQ65D,UAAW58B,EAAQ89B,eACjDgI,cAAeP,IAAYvlC,EAAQv1B,OAAQ61B,GAE3C,kBAACylC,GAAA,EAAD,CACEC,OAAQT,IAAYvlC,EAAQ6lC,OAC5BI,UAAWV,IAAYvlC,EAAQ6lC,OAASvlC,EAAQ,MAChD58B,QAASgiE,EAAkB1lC,EAAQ6lC,QACnCpiE,UAAWV,EAAQi9B,QACnBkmC,aAAiC,KAAnBlmC,EAAQ6lC,QAErB5iE,EAAE+8B,EAAQv1B,cAMrB,kBAACyzD,GAAA,EAAD,KACG/qD,GACCA,EAAKiyD,IACLjyD,EAAKiyD,GAAmBhyD,KAAI,SAAAs4C,GAAO,OACjC,kBAACmS,GAAA,EAAD,CACEziD,IAAKswC,EAAQ9nD,GACbb,QAAS,CAAEc,KAAMd,EAAQs6D,UACzB35D,QAAS,SAAAoJ,GACH4+C,EAAQ1kC,sBAEZla,EAAEojB,kBAxEK,SAAAw7B,GACrBx1B,GAAQ,GACR8uC,EAAiBtZ,GAuEHya,CAAeza,KAEjBjoD,UAAWsG,KAAW,eACnBhH,EAAQ+hE,aAAepZ,EAAQ1kC,uBAGlC,kBAACi3C,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQqhE,eAEVrG,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KACG6hD,EAAQyX,aAAezX,EAAQ0X,uBAC5B1X,EAAQyX,aAAezX,EAAQ0X,uBAC/B1X,EAAQkC,iBAEd,kBAAC/jD,EAAA,EAAD,KAAa6hD,EAAQ6X,eAEvB,kBAACtF,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQg6D,UACjDgB,MAAM,QAEN,kBAACl0D,EAAA,EAAD,CAAYpG,UAAWV,EAAQg6D,UAC5BrR,EAAQ1kC,oBACL,uBADH,UAEM0kC,EAAQxQ,eAFd,YAEgCwQ,EAAQvQ,iBAG7C,kBAAC8iB,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQshE,UACjDtG,MAAM,QAEN,yBAAKt6D,UAAWV,EAAQuhE,aAzLpB,aA0LD5Y,EAAQ2X,aACP,kBAAC,KAAD,CACE/hE,SAAS,QACTmC,UAAWV,EAAQ2qD,WA9LhB,kBAiMNhC,EAAQ2X,aACP,kBAAC,KAAD,CACE/hE,SAAS,QACTmC,UAAWV,EAAQ2qD,WAGvB,kBAAC7jD,EAAA,EAAD,CAAYpG,UAAWV,EAAQpB,OAvMxB,kBAwMJ+pD,EAAQ2X,aACP3X,EAAQngC,cAAc5pB,MAxMxB,aA0MC+pD,EAAQ2X,aACP3X,EAAQ7W,SAASlzC,SAIzB,kBAACs8D,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQo6D,YACjDY,MAAM,QAEqB,IAA1BrS,EAAQ38B,OAAOzpB,QAAf,SAC0B,IAA1BomD,EAAQ38B,OAAOzpB,QAAgBomD,EAAQ38B,OAAOzpB,QAAU,GACvD,kBAACuE,EAAA,EAAD,CAAYpG,UAAWV,EAAQyhE,UAC5BnZ,GAAeK,EAAQ38B,QACvB48B,GAAkBD,EAAQ38B,SAA1B,YACMy8B,GAAyBE,EAAQ38B,OAAQ9rB,GAD/C,MAIsB,IAA1ByoD,EAAQ38B,OAAOzpB,QAAgBomD,EAAQ38B,OAAOzpB,OAAS,GACtD,kBAACuE,EAAA,EAAD,CAAYpG,UAAWV,EAAQyhE,UAC5BnZ,GAAeK,EAAQ38B,QAD1B,KAEGy8B,GAAyBE,EAAQ38B,OAAO6T,MAAM,EAAG,GAAI3/B,GAFxD,OAOyB,IAA1ByoD,EAAQ38B,OAAOzpB,QACdomD,EAAQ38B,QACR28B,EAAQ38B,OAAOzpB,OAAS,GACtB,kBAAC,GAAD,CACE+oB,KACE,wBAAI5qB,UAAWV,EAAQsrB,MACpBq9B,EAAQ38B,OAAO6T,MAAM,GAAGxvB,KAAI,SAACi5C,EAAO/4C,GACnC,OACE,wBAAI8H,IAAK9H,GACN+4C,EAAMld,aADT,KACyB,IACtBkd,EAAMztC,YAAY,GAAGA,kBAOhC,kBAAC,GAAD,CAAYyxB,OAAQqb,EAAQ38B,OAAOzpB,OAAS,MAKpD,kBAAC24D,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,GACxBrH,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQ8hE,WACjD9G,MAAM,QAEN,kBAAC,GAAD,CACE/8D,SAAU,IACVqtB,KACE,yBAAK5qB,UAAWV,EAAQsrB,KAAM9iB,MAAO,CAAExK,SAAU,MAC9C2qD,EAAQ0W,cACP1W,EAAQuW,eACR,4BAIN,kBAACoE,GAAA,EAAD,QAIJ,kBAACpI,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQ4hE,cAEV5G,MAAM,SAEL96D,EAAEyoD,EAAQpjB,eAInB,kBAAC,GAAD,CACE1lC,QAzMM,WACdszB,GAAQ,IAyMAxzB,KAAMA,EACNgpD,QAAS2Z,EACTzC,aA5RU,aA6RRyC,EAAchC,YACVzX,GAA4ByZ,GAC5B1Y,GAAiC0Y,GAEvC5D,cAAe,CAAE3rC,MAAO2vC,EAAO/uD,iBAIpCvD,GAAQA,EAAKiyD,IACZ,kBAAC,GAAD,CACE5pD,KAAMA,EAAO,EACb4wC,MAAOj5C,EAAKmzD,sBAAsBC,MAAMnB,GACxCvpD,OAAU2qD,KAAKC,IAAItzD,EAAKmzD,sBAAsBI,oBAAoBtB,GAC7C,IAAZ5pD,EAAO,IAChBM,MACE3I,EAAKmzD,sBAAsBI,oBAAoBtB,GAEjDv4D,SA1NoB,SAACC,EAAG0O,GAC9B/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,UC0DJjb,GAlMGC,aAAW,SAAAC,GAAK,MAAK,CACrCoD,KAAM,CACJ4E,QAAS,OACTG,cAAe,SACfJ,MAAO,OACPD,OAAQ,QAEVmS,QAAS,CACPnS,OAAQ,QAEV04D,QAAQ,aACNx4D,QAAS,OACTE,WAAY,SACZxG,UAAW,sBACXtB,UAAW,aACXmI,aAAc,MACduF,UAAW,QACV9N,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACf2F,UAAW,OACX/F,MAAO,SAGXm/D,YAAY,aACVl/D,QAAS,OACTE,WAAY,SACZ5H,SAAU,QACVwH,OAAQ,OACRgK,YAAa,oBACb1R,UAAW,aACXY,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACP+J,YAAa,SACbK,WAAY,SAIhBsuD,aAAa,aACX9/D,QAAS,YACTI,WAAY,OACZF,SAAU,OACVC,WAAY,OACZE,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,OACVF,QAAS,YACToH,MAAO,OACPgB,UAAW,WAGfo+D,cAAe,CACbj/D,WAAY,SACZF,QAAS,OACTF,OAAQ,QAEVo+D,YAAa,CACXvlE,QAAS,kBACTL,SAAU,OACV0H,QAAS,UAEXs+C,YAAa,CACXzlD,SAAU,OACVG,MAAO,UACP,YAAa,CACXb,OAAQ,SAGZinE,YAAY,aACVzmE,QAAS,YACTL,SAAU,OACVO,SAAU,OACVuQ,WAAY,UACXpR,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,cAGbyX,SAAU,CACRlY,gBAAiB,UACjBa,WAAY,QAEdsmE,cAAe,CACb1mE,QAAS,WACTyuB,aAAc,oBACdhvB,UAAW,aACXS,SAAU,OACVP,SAAU,kBAEZgnE,iBAAiB,aACfn/D,cAAe,MACf7H,SAAU,QACVwR,YAAa,qBACZ9R,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BH,SAAU,QACVyH,MAAO,OACPqnB,aAAc,oBACdhuB,UAAW,oBACX0Q,YAAa,SACbK,WAAY,OACZjK,WAAY,SACZF,QAAS,OACTC,eAAgB,WAGpBs4D,WAAY,CACV1/D,SAAU,OACVE,WAAY,OACZJ,QAAS,WACT+H,WAAY,QAEd6+D,aAAa,aACXz/D,OAAQ,OACRC,MAAO,OACPC,QAAS,OACTE,WAAY,SACZD,eAAgB,WAChByJ,aAAc,QACb1R,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BwH,eAAgB,SAChBmnB,aAAc,oBACdhuB,UAAW,oBACX+Q,WAAY,OACZ9H,cAAe,SAGnBm9D,SAAU,CACRh5D,KAAM,WACNtO,gBAAiBF,EAAM6Y,QAAQhR,WAAW5H,MAC1C6H,OAAQ,qBAEV8Q,KAAK,aACHpK,KAAM,aACLxO,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B+N,KAAM,cAGVi5D,iBAAkB,CAChBv/D,WAAY,UAEdw/D,aAAc,CACZ3mE,WAAY,OACZD,WAAY,OACZyH,aAAc,GACdvH,MAAO,WAETi9D,kBAAkB,aAChBt9D,QAAS,uBACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,wBAGbgnE,uBAAwB,CACtB51C,QAAS,EACT/wB,MAAO,WAET4mE,YAAY,aACV7/D,MAAO,QACP,uBAAwB,CACtB5H,OAAQ,oBACRE,aAAc,MACd,UAAW,CACTF,OAAQ,qBAEV,gBAAiB,CACfA,OAAQ,oBACRuB,UAAU,iBAAD,OAAmB1B,EAAMuB,OAAOP,SAG7C,wBAAyB,CACvBL,QAAS,mBACTE,SAAU,OACVC,WAAY,QAEd,iCAAkC,CAChC4Q,aAAc,QAEhB,wBAAyB,CACvB/Q,QAAS,GAEX,qCAAsC,CACpCR,OAAQ,IAETH,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPqnB,aAAc,oBACdhuB,UAAW,oBACX+Q,WAAY,OACZ9H,cAAe,OACfpC,eAAgB,eCpKtB,SAAS4/D,GAAiBh1D,GACxB,MAAO,CACL1P,GAAG,gBAAD,OAAkB0P,GACpB,gBAAgB,qBAAhB,OAAsCA,IAI1C,IC/Bei1D,GDqQAn0D,aAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EAlOK,SAAC,GAAiC,IAA/B0E,EAA8B,EAA9BA,SAAUhS,EAAoB,EAApBA,cACzB/D,EAAUxC,KADmC,EAEvCyC,cAALC,EAF4C,oBAG7CyR,EAAUC,cAHmC,EAKzBC,IAAMrQ,SAC9BuU,EAAShT,MAAQgT,EAAShT,MAAMssB,UAAY,GANK,mBAK5C/sB,EAL4C,KAKrCwP,EALqC,OAQLD,IAAMrQ,SAAS,OARV,mBAQ5CikE,EAR4C,KAQ3BC,EAR2B,OASb7zD,IAAMrQ,cAASmoB,GATF,mBAS5C27C,EAT4C,KAS/BK,EAT+B,OAUvB9zD,IAAMrQ,cAASmoB,GAVQ,mBAU5CzT,EAV4C,KAUpC0vD,EAVoC,OAeX/zD,IAAMrQ,SAAS,eAfJ,mBAe5CqkE,EAf4C,KAe9BC,EAf8B,OAgBXj0D,IAAMrQ,SAC5CuU,EAAShT,MAAQgT,EAAShT,MAAMgjE,SAAW,eAjBM,mBAgB5CC,EAhB4C,KAgB9BC,EAhB8B,KA8BnD,OACE,yBAAKvlE,UAAWV,EAAQc,MACtB,kBAAC,GAAD,OAEEiD,EAAcH,sBAAsB/C,IAAM,kBAAC,GAAD,MAE3CkD,EAAcH,sBAAsB/C,IACnC,yBAAKH,UAAWV,EAAQ2X,SACtB,yBAAKjX,UAAWV,EAAQk+D,SACtB,yBAAKx9D,UAAWV,EAAQ4kE,aACtB,kBAAC99D,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQm+D,cACzCj+D,EAAE,cAGP,yBAAKQ,UAAWV,EAAQglE,kBACtB,kBAAC,KAAD,CACEjuD,eAAe,UACfzU,MAAOA,EACPwH,SApCO,SAAC4K,EAAON,GAC3BtC,EAASsC,KAqCG,kBAACgE,GAAA,EAAD,eACEpY,QAAS,CACPc,KAAMd,EAAQ+kE,cACdptD,QAAS3X,EAAQmlE,iBACjBrvD,SAAU9V,EAAQ8V,SAClBymD,iBAAkBv8D,EAAQqlE,wBAE5B39D,MAAOxH,EAAE,YACLqlE,GA9DI,KAgEV,kBAACntD,GAAA,EAAD,eACEpY,QAAS,CACPc,KAAMd,EAAQ+kE,cACdptD,QAAS3X,EAAQmlE,iBACjBrvD,SAAU9V,EAAQ8V,SAClBymD,iBAAkBv8D,EAAQqlE,wBAE5B39D,MAAOxH,EAAE,aACLqlE,GAvEM,KAyEZ,kBAACntD,GAAA,EAAD,eACEpY,QAAS,CACPc,KAAMd,EAAQ+kE,cACdptD,QAAS3X,EAAQmlE,iBACjBrvD,SAAU9V,EAAQ8V,SAClBymD,iBAAkBv8D,EAAQqlE,wBAE5B39D,MAAOxH,EAAE,YACLqlE,GAlFI,OAsFd,yBAAK7kE,UAAWV,EAAQ6kE,eACtB,kBAAC/9D,EAAA,EAAD,CAAYpG,UAAWV,EAAQ8kE,aAC5B5kE,EAAE,aADL,KAGA,kBAAC47B,GAAA,EAAD,CAAap7B,UAAWV,EAAQ4jE,aAzFlB,IA0FXthE,GACC,kBAAC,GAAD,CACEA,MAAOmjE,EACP37D,SAAU47D,EACVvvD,MAAO,CACL,CACE7T,MAAO,MACPoF,MAAO,gBAET,CACEpF,MAAO,UACPoF,MAAO,WAET,CACEpF,MAAO,aACPoF,MAAO,gBAGXhH,UAAWV,EAAQgkD,cA5GX,IA+GX1hD,GACC,kBAAC,GAAD,CACEA,MAlHM,IAmHJA,EAA8B0jE,EAAeH,EAE/C/7D,SArHM,IAsHJxH,EACI2jE,EACAH,EAENplE,UAAWV,EAAQgkD,YACnB7tC,MAAO,CACL,CACE7T,MAAO,cACPoF,MAAO,gBAET,CACEpF,MAAO,yBACPoF,MAAO,kBAET,CACEpF,MAAO,qBACPoF,MAAO,mBAOnB,6BACE,kBAACmrB,GAAA,EAAD,CACE7yB,QAAS,CACPc,KAAMd,EAAQslE,aAEhB77D,YAAY,YACZrI,QAAQ,WACRkB,MAAOgjE,EACPx7D,SA7HY,SAAAC,GACxB47D,EAAe57D,EAAEC,OAAO1H,QA6HZ4jE,UA1HW,SAAAn8D,GACL,KAAdA,EAAEo8D,SACJP,EAAUN,IAyHA1xC,WAAY,CACV9B,aACE,kBAACq8B,EAAA,EAAD,CACE7uD,SAAS,MACTqB,QAAS,kBAAMilE,EAAUN,KAEzB,kBAAC7kE,EAAA,EAAD,KACE,kBAAC,KAAD,YAOZ,yBAAKC,UAAWV,EAAQilE,cACtB,kBAAC9jE,EAAA,EAAD,CACER,QAAS,WACPgR,EAAQsE,KAAR,oBAEF7U,QAAQ,WACR1C,MAAM,UACNsB,QAAS,CAAEc,KAAMd,EAAQi+D,aAExB/9D,EAAE,uBAEL,kBAACiB,EAAA,EAAD,CACER,QAAS,WACPgR,EAAQsE,KAAR,gBAEF7U,QAAQ,WACR1C,MAAM,UACNsB,QAAS,CAAEc,KAAMd,EAAQi+D,aAExB/9D,EAAE,oBAIT,yBAAKQ,UAAWV,EAAQklE,UACtB,kBAACxuD,GAAD,CACEhW,UAAWV,EAAQ27D,kBACnBr5D,MAAOA,EACPiO,MAhMY,GAkMZ,kBAAC,GAAD,CACE8xD,kBAAmB2D,EACnB9vD,OAAQA,KAGZ,kBAACQ,GAAD,CACEhW,UAAWV,EAAQ27D,kBACnBr5D,MAAOA,EACPiO,MAzMc,GA2Md,kBAAC,GAAD,CACEg0D,cAAekB,EACfvvD,OAAQA,KAGZ,kBAACQ,GAAD,CACEhW,UAAWV,EAAQ27D,kBACnBr5D,MAAOA,EACPiO,MAlNY,GAoNZ,kBAAC,GAAD,CACE8xD,kBAAmBwD,EACnB3vD,OAAQA,WE/OTuI,GAVE,SAAAC,GACf,IAAMpW,EAAS,GAMf,OAJKoW,EAAOuG,OAAUvG,EAAOuG,MAAMrK,WAAc8D,EAAOuG,MAAMpK,UAC5DvS,EAAO2c,MAAQ,sBAGV3c,GCgaMgiB,gBAAU,CACvBnmB,KAAM,wBACNomB,kBAAkB,EAClBE,aAAa,EACbhM,YACAiM,cAhYoB,CACpB9L,gBAAiB,EACjBgnB,SAAU,MACVE,aAAc,GACd3pB,OAAQ,GACR6sB,WAAY,GACZwP,IAAK,CACH,kBAAkB,KAoXPluB,CAMZjZ,aAnBqB,SAAAtO,GACtB,MAAO,CACL43C,sBAAuB53C,EAAMoB,KAAKw2C,sBAClC52C,cAAehB,EAAMgB,kBAIE,SAAAuN,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,wBAAyB+F,EAAOvb,QAUjD+O,EAnXuB,SAAC,GAOpB,IANLspC,EAMI,EANJA,sBACA/K,EAKI,EALJA,qBACAjlB,EAII,EAJJA,aACAspB,EAGI,EAHJA,WACArpB,EAEI,EAFJA,SACA7mB,EACI,EADJA,cAEM/D,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAEMwR,EAFN,KAGI7Q,EAAO01C,cAAP11C,GACF8Q,EAAUC,cACRe,EAAoBC,wBAApBD,gBAEFK,EAAmBtB,EAAK7F,SACxBwnB,EAAUtvB,EAAcH,sBAAsB/C,GAE9CmvC,EAAkB2K,EAAsBj8B,OAAOsxB,gBAC/CjoB,EAAeksB,EAAaA,EAAWhvB,MAAQ,KAC/CrK,EAAYmN,EAAeA,EAAanN,UAAYvB,OAZtD,EAc4BxH,IAAMrQ,SAAS,MAd3C,mBAcG8F,EAdH,KAccuL,EAdd,OAesChB,IAAMrQ,SAAS,MAfrD,mBAeGgnB,EAfH,KAekB0nB,EAflB,OAgBsDr+B,IAAMrQ,UAC9D,GAjBE,mBAgBG2uC,EAhBH,KAgB0BC,EAhB1B,OAoBiC/9B,YACnC4mC,IADKmG,EApBH,sBAuBiC/sC,YACnC6mC,IADKmG,EAvBH,sBA0BsB7sC,YAASkyB,GAAe,CAChD4L,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTq8B,gBAAiBA,GAAmB5sC,SAASvC,GAC7CuyB,gBAAiBC,KALbC,EA1BJ,EA0BIA,QAASljB,EA1Bb,EA0BaA,KA1Bb,EAsCAoC,YAASiyB,GAAY,CACvB6L,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTq8B,gBAAiBA,GAAmB5sC,SAASvC,GAC7CuyB,gBAAiBC,EACjBmd,YAAan3B,KAAOuB,GACjBmK,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAOuB,GAAWkI,IAAI,EAAG,WACxCkC,MAAM,SACNR,OAAO,iBAdHksB,EAnCP,EAmCFpd,QACMqd,EApCJ,EAoCFvgC,KACSwgC,EArCP,EAqCFl+B,QAgBFb,IAAM+C,WAAU,WACd,GAAIxE,GAAQA,EAAK6X,gBAAkB7X,EAAK6X,eAAe1lB,OAAQ,CAC7D,IAAMsuC,EAAwBzgC,EAAK6X,eAAe,GAC5C6oB,EAAoB/E,GACxB8E,GAGEA,EAAsBlO,OAAO,GAAG9mB,YAAYA,YAC9Ci1B,EAAiB,WAtED,qBAwEhBA,EAAiB,WAzEJ,kBA4Ef+O,EAA6BhP,GAC7BK,GAAmBJ,GACnBC,EAAgBD,GAChBE,EAAUF,GAEVZ,EAAiBY,MAElB,CAAC1gC,IAEJyB,IAAM+C,WAAU,WACT+lC,GAA0BnyB,GAC/BuoB,EAAgBvoB,KACf,CAACmyB,EAAsBj8B,OAAOknB,WAEjC,IAYMia,EAA+B,SAAAhP,GACnC,IAAMwI,EAA4BF,GAChCtI,EAAsBlO,QAElBqP,EAAmB2I,EAAsBj8B,OAAOknB,SAEjDyT,EAA0B50B,SAASutB,IACtCpC,EAAqB,WAAYyJ,EAA0B,KAIzDtI,EAAkB,SAAAvoB,GACtB4nB,GAA0BD,GAE1B,IAAMvK,EAAW+U,EAAsBj8B,OAAOknB,SACxCC,EACJ8U,EAAsBj8B,OAAOonB,cAAgB,GACzCA,EAAeH,GACnBnd,EACAod,EACAC,GAGF+J,EAAqB,eAAgB9J,IAGjCkL,EAAY,SAAAxoB,GAChB,IAAM4oB,EAAiBuJ,EAAsBj8B,OAAOvC,QAAU,GAExDk1B,EAAa7oB,EAActM,WAAWC,OAAO9L,KAAI,SAAAmB,GACrD,IAAM8/B,EAAeF,EAAe79B,MAAK,SAAAy4B,GAAK,OAAIA,EAAMnrC,KAAO2Q,EAAK3Q,MACpE,OAAO,eACF2Q,EADL,CAEElP,MAAOgvC,EAAeA,EAAahvC,MAAQ,EAC3CivC,WAAYD,EAAeA,EAAaC,WAAa,UAIzD3B,EAAqB,SAAUyB,IAG3BH,GAAqB,SAAA1oB,GACzBonB,EAAqB,kBAAmBpnB,EAAcnO,YAAY2R,SA8B9D8zB,GAAS,WACbjtC,GAAW,GAGT8nC,EAAsBj8B,OAAOonB,cAC7B6U,EAAsBj8B,OAAOonB,aAAavjC,SAE1Co4C,EAAsBj8B,OAAOonB,aAAe,CAAC,eAEtC6U,EAAsBj8B,OAAOonB,aAAa,GAFL,CAGxCA,aAAc6U,EAAsBj8B,OAAOE,oBAKjD,IAAIxO,EAAOsqC,GACTlyB,EACAmyB,EACA,IAGE/vB,EACFy0B,EAA2B,CAAE1rC,UAAWvD,IAAQwD,MAC9C,WACEjB,EACEzS,EAAE,uDACF,CACEkB,QAAS,YAGbuQ,EAAQsE,KAAK,CACXD,SAAU,sBAGd,WACEnD,GAAW,GACXF,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,aAKfg+C,EAA2B,CAAEzrC,UAAWvD,IAAQwD,MAC9C,WACEjB,EAAgBzS,EAAE,8CAA+C,CAC/DkB,QAAS,YAEXuQ,EAAQsE,KAAK,CACXD,SAAU,uBAGd,WACEnD,GAAW,GACXF,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,cAObiZ,GAAcmO,EAChBgkB,GACEx5B,EACAwV,EAAcnO,YACdmO,EAAc,0BAEhB,GACE/N,GAAkB+N,EACpBgkB,GACEx5B,EACAwV,EAAc/N,gBACd+N,EAAc,8BAEhB,GAEJ,OACE,oCACE,kBAAC,GAAD,MAEA,kBAAC,GAAD,CACElhB,UAAWgsB,GAAWod,GAAoBppC,EAC1CC,gBAAiBvH,EAAQuH,gBACzB7G,UAAWV,EAAQkH,gBAGpBshB,GACC,yBAAK9nB,UAAWV,EAAQc,MACtB,yBAAKJ,UAAWV,EAAQs+C,UACtB,kBAACx3C,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQua,cAC/Cra,EAAE,gBADL,KACwBsoB,EAAcnO,YAAYE,aAGlD,yBACE7Z,UAAWV,EAAQ4mC,MACnBp+B,MAAO,CACLopB,gBAAgB,OAAD,OAASpJ,EAAcnO,YAAYG,WAAWrU,MAA9C,OAGhB,IAGH,kBAACW,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQvB,YACzC4b,GAAYzb,OAGf,yBAAK8B,UAAWV,EAAQsvC,UACtB,yBAAK5uC,UAAWV,EAAQovC,UACtB,kBAAC,KAAD,CAAwBpvC,QAAS,CAAEc,KAAMd,EAAQqvC,YACjD,kBAACvoC,EAAA,EAAD,CAAY1F,QAAQ,SACjBonB,EAAcnO,YAAYtE,WAG/B,yBAAKrV,UAAWV,EAAQovC,UACtB,kBAAC,KAAD,CAAmBpvC,QAAS,CAAEc,KAAMd,EAAQqvC,YAC5C,kBAACvoC,EAAA,EAAD,CAAY1F,QAAQ,SACjBonB,EAAcnO,YAAY2R,OAD7B,IACsC9rB,EAAE,YAGzCma,GAAYxP,cAAgBwP,GAAYxP,WAAWtI,QAClD,yBAAK7B,UAAWV,EAAQovC,UACtB,kBAAC,KAAD,CAAmBpvC,QAAS,CAAEc,KAAMd,EAAQqvC,YAC5C,kBAACvoC,EAAA,EAAD,CAAY1F,QAAQ,SACjBiZ,GAAYxP,WAAWovB,KAAK,eAMrC,kBAACnzB,EAAA,EAAD,CAAY1F,QAAQ,QAAQpB,QAAS,CAAEc,KAAMd,EAAQsK,WAClDmQ,GAAgBnQ,UAGnB,kBAAC,GAAD,CACEwnC,SAAUtpB,EACVod,SAAU+U,EAAsBj8B,OAAOknB,SACvCrG,iBAAiB,KAIrB,yBAAK7+B,UAAWV,EAAQu+C,WACtB,0BACE7yB,SAzKiB,SAAApmB,GAC3B,GAAIq1C,EAAsBwF,WAAY,CACpC,IAAMA,EAAaxF,EAAsBwF,WACnCC,EAAe1iC,OAAOC,KAAKwiC,GAAY59C,OAE7C,GAAI49C,EAAW9B,yBAA4C,IAAjB+B,EAAoB,CAC5D,IACMjT,EADQgT,EAAWra,aAAX,OACWiB,MAAM,KACzBqG,EAAcD,EAAW5qC,OAC/BoQ,EACEzS,EAAE,+CAA2C,CAC3CotC,OAAQH,EAAWC,EAAc,KAEnC,CACEhsC,QAAS,iBAIbuR,EAAgBzS,EAAE,0CAA2C,CAC3DkB,QAAS,YAKfupB,EAAam1B,GAAbn1B,CAAqBrlB,IAkJX5E,UAAWV,EAAQw+C,aAEnB,kBAAC13C,EAAA,EAAD,CACE1F,QAAQ,KACRV,UAAWsG,KAAWhH,EAAQvB,WAAYuB,EAAQ8e,cAG9C5e,EADH0qB,EACK,+BACA,uBAGR,kBAACe,GAAA,EAAD,CACErT,KAAK,QACLuJ,eAAgB0G,GAAuBC,GACvCtH,cAAe4G,GAAiB6oB,EAAe5oB,GAC/CjG,qBAlPa,SAAAV,GACzBwvB,EAAiB,CACfZ,gBAAiBA,GAAmB5sC,SAASvC,GAC7C2vC,YAAan3B,KAAO+H,GACjB2D,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAO+H,GAAM0B,IAAI,EAAG,WACnCkC,MAAM,SACNR,OAAO,iBA2OA9jB,UAAWV,EAAQ8e,YACnBoD,eAAgBliB,EAAQ6+C,kBACxBn3C,MAAM,iBACNsa,aAAa,YACbC,qBAAqB,wBACrBM,QAAS,GACTpd,UAAWuc,GACXgB,eAAa,IAGf,kBAAC,GAAD,CACEoJ,WAAYlB,EAAW,iBAAmB,kBAC1CmB,YAAanB,EAAW,SAAW,iB,s6CC9Y5C,IAAMw7C,GAAa75D,KAAH,MCFV85D,GAA0B,CACrCC,eAAgB,UAChBC,kBAAmB,UACnBC,OAAQ,WAGGC,GAAmB,CAC9B,cAAe,UACf,aAAc,UACd,cAAe,UACfC,QAAS,UACTC,UAAW,UACX,cAAe,UACfC,OAAQ,WCyCKppE,GApDGC,aAAW,SAAAC,GAAK,MAAK,CACrCmpE,UAAU,aACR36D,KAAM,MACNsD,YAAa,qBACZ9R,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B+N,KAAM,WACNsD,YAAa,OACbsd,aAAc,sBAGlBg6C,SAAS,aACPvoE,SAAU,GACVmH,QAAS,SACTo9B,YAAa,OACbpkC,MAAO,UACPD,WAAY,QACXf,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,GACVukC,YAAa,SAGjBikC,aAAa,aACXrhE,QAAS,OACTG,cAAe,MACfinB,aAAc,qBACbpvB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,WAGnBm9C,YAAY,aACVv9C,MAAO,QACPpH,QAAS,QACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPpH,QAAS,SAGb4kD,YAAY,aACV1kD,SAAU,OACVE,WAAY,QACXf,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,SAGdyoE,aAAa,aACXn3D,WAAY,QACXnS,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0R,WAAY,aCyCZo3D,GAAyB,SAAAC,GAC7B,IAAM1jB,EAAa,GACnB,OAAK0jB,GAGLA,EAAoBvuC,SAAQ,SAAAnnB,GAC1BgyC,EAAWvtC,KAAK,CACdqC,KAAM9G,EAAK+zB,SACXjjC,MAAOkP,EAAK01D,oBACZjkB,YAAazxC,EAAK+zB,cAGfie,GATE,IAYL2jB,GAAuC,SAAA/2D,GAC3C,MAAO,CACL,CACEkI,KAAM,iBACNhW,MAAO8N,EAAKk2D,eACZrjB,YAAa,gBAEf,CACE3qC,KAAM,oBACNhW,MAAO8N,EAAKm2D,kBACZtjB,YAAa,qBAKbmkB,GAAsC,SAAAh3D,GAC1C,MAAO,CACL,CACEkI,KAAM,iBACNhW,MAAO8N,EAAKk2D,eACZrjB,YAAa,gBAEf,CACE3qC,KAAM,oBACNhW,MAAO8N,EAAKm2D,kBACZtjB,YAAa,qBAKbokB,GAAyC,SAAAj3D,GAC7C,MAAO,CACL,CACEkI,KAAM,iBACNhW,MAAO8N,EAAKk2D,eACZrjB,YAAa,gBAEf,CACE3qC,KAAM,oBACNhW,MAAO8N,EAAKm2D,kBACZtjB,YAAa,qBAKbqkB,GAAsC,SAAAC,GAC1C,IAAMC,EAAe,GAQrB,OAPAD,EAAa5uC,SAAQ,SAAAnnB,GACnBg2D,EAAavxD,KAAK,CAChB8C,MAAOvH,EAAKi2D,oBACZC,OAAQl2D,EAAKk2D,OACb9oE,MAAO4S,EAAKm2D,wBAGTH,GAGHI,GAAqC,SAAAL,GACzC,IAAMC,EAAe,GAQrB,OAPAD,EAAa5uC,SAAQ,SAAAnnB,GACnBg2D,EAAavxD,KAAK,CAChB8C,MAAOvH,EAAKq2D,mBAAqBzkE,SAASoO,EAAKq2D,oBAAsB,EACrEH,OAAQl2D,EAAKk2D,OACb9oE,MAAO4S,EAAKs2D,mBAGTN,GAGHO,GAAwC,SAAAR,GAC5C,IAAMC,EAAe,GAQrB,OAPAD,EAAa5uC,SAAQ,SAAAnnB,GACnBg2D,EAAavxD,KAAK,CAChB8C,MAAOvH,EAAKi2D,oBAAsBrkE,SAASoO,EAAKi2D,qBAAuB,EACvEC,OAAQl2D,EAAKk2D,OACb9oE,MAAO4S,EAAKs2D,mBAGTN,GCrHMQ,GAvDa,SAAC,GAMtB,IALLjvD,EAKI,EALJA,MACAkvD,EAII,EAJJA,kBACAC,EAGI,EAHJA,oBACA/nE,EAEI,EAFJA,YACAujD,EACI,EADJA,SAEM1jD,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAUJ,OANuD+nE,EDjBpD53D,KAAI,SAAA83D,GAAW,OAAIA,EAAY7lE,SAC/B6nB,QACC,SAACi+C,EAAYC,GAAb,OAAoCD,EAAaC,MCkBnDJ,EAAkBhyD,KAAK,CAAEqC,KAAM,SAAUhW,MAAO,MAIhD,yBAAK5B,UAAWV,EAAQ6mE,WACtB,yBAAKnmE,UAAWV,EAAQgnE,cACtB,kBAAClgE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ8mE,UAC5B5mE,EAAE,qBAEL,yBAAKQ,UAAWV,EAAQ+mE,cACtB,kBAAC,GAAD,CACE32D,KAAM63D,EACNvlB,WAAY2jB,KAEd,kBAAC,GAAD,CACE7iB,WAAYykB,EACZtkB,aAAc0iB,GACdpjB,YAAW,UAAKlqC,GAChB0qC,iBAAkBtjD,EAClBujD,SAAUA,MAIgB,IAA/BwkB,EAAoB3lE,QACnB,yBAAK7B,UAAWV,EAAQgnE,cACtB,kBAAClgE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ8mE,UAAW5mE,EAAE,cAC5C,yBAAKQ,UAAWV,EAAQ+mE,cACtB,kBAAC,GAAD,CACE32D,KAAM83D,EACNxlB,WAAY+jB,KAEd,kBAAC,GAAD,CACEjjB,WAAY0kB,EACZvkB,aAAc8iB,SC4BbjpE,GAnFGC,aAAW,SAAAC,GAAK,MAAK,CACrCm8D,UAAU,aACRt7D,SAAU,OACVV,OAAQ,OACRa,MAAO,UACPL,QAAS,GACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,SAGd+7D,SAAS,aACP90D,OAAQ,QACP9H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BqH,OAAQ,SAGZ60D,UAAU,aACR70D,OAAQ,QACP9H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BqH,OAAQ,SAGZ8iE,aAAa,aACXjqE,QAAS,sBACToH,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,wBAGbu7D,MAAM,aACJn0D,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,OACVwJ,cAAe,SAGnBwgE,WAAW,aACThqE,SAAU,OACVE,WAAY,OACZsJ,cAAe,QACdrK,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,OACVwJ,cAAe,SAGnBk1B,QAAQ,aACNv+B,MAAO,UACPb,OAAQ,OACRQ,QAAS,EACTI,WAAY,OACZF,SAAU,OACVy4B,WAAY,YACZpvB,cAAe,UACfD,cAAe,aACdjK,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,MACVqJ,cAAe,WAGnB05D,SAAS,aACP77D,MAAO,QACP2J,aAAc,QACb1R,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,QACP2J,aAAc,SAGlB86C,UAAU,aACRzrD,WAAY,QACXf,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,SAGdiqE,gBAAgB,aACd/iE,MAAO,QACP2J,aAAc,QACb1R,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACP2J,aAAc,aC2CLq5D,GA7DgB,SAAC,GAIzB,IAHLF,EAGI,EAHJA,WACAG,EAEI,EAFJA,eACAC,EACI,EADJA,aAEM3oE,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIJ,OACE,yBAAKQ,UAAWV,EAAQsoE,cACtB,kBAACxhE,EAAA,EAAD,CAAYpG,UAAWV,EAAQuoE,WAAYnnE,QAAQ,MAChDlB,EAAEqoE,IAEL,kBAAC3N,GAAA,EAAD,CAAOl6D,UAAWV,EAAQ45D,MAAOnkD,aAAW,gBAC1C,kBAAColD,GAAA,EAAD,CAAWn6D,UAAWV,EAAQq6D,WAC5B,kBAACS,GAAA,EAAD,KA9Da,SAAA96D,GACrB,MAAO,CACL4oE,wBAAyB,CACvBC,SAAU,CACR,CACEnhE,MAAO,qBACPszD,MAAO,OACPD,cAAe/6D,EAAQshE,UAEzB,CACE55D,MAAO,eACPszD,MAAO,QACPD,cAAe/6D,EAAQwoE,mBAI7BM,4BAA6B,CAC3BD,SAAU,CACR,CACEnhE,MAAO,gBACPszD,MAAO,OACPD,cAAe/6D,EAAQshE,UAEzB,CACE55D,MAAO,eACPszD,MAAO,QACPD,cAAe/6D,EAAQwoE,mBAI7BO,yBAA0B,CACxBF,SAAU,CACR,CACEnhE,MAAO,gBACPszD,MAAO,OACPD,cAAe/6D,EAAQshE,UAEzB,CACE55D,MAAO,eACPszD,MAAO,QACPD,cAAe/6D,EAAQwoE,oBAuBpBvN,CAAej7D,GAAS0oE,GAAgBG,SAASx4D,KAAI,SAAA4sB,GAAO,OAC3D,kBAACi+B,GAAA,EAAD,CACE7iD,IAAK4kB,EAAQv1B,MACbszD,MAAO/9B,EAAQ+9B,MACfxyD,MAAO,CAAET,cAAe,GACxBrH,UAAWsG,KAAWhH,EAAQi9B,QAASA,EAAQ89B,gBAE9C76D,EAAE+8B,EAAQv1B,aAKnB,kBAACyzD,GAAA,EAAD,KACGwN,GACCA,EAAat4D,KAAI,SAACs4C,EAASp4C,GAAV,OACf,kBAACuqD,GAAA,EAAD,CAAUziD,IAAK9H,EAAOvQ,QAAS,CAAEc,KAAMd,EAAQs6D,WAC7C,kBAACY,GAAA,EAAD,CACEx6D,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQshE,UACjDtG,MAAM,QAEN,kBAACl0D,EAAA,EAAD,CAAYpG,UAAWV,EAAQkqD,WAC5BvB,EAAQ/pD,QAGb,kBAACs8D,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQwoE,iBAEVxN,MAAM,SAEN,kBAACl0D,EAAA,EAAD,KACsB,OAAnB6hD,EAAQ+e,OACL/e,EAAQ5vC,MACR7Y,EAAEyoD,EAAQ+e,kBC2BnBlqE,GAzIGC,aAAW,SAAAC,GAAK,gBAChCoD,KAAK,aACH4E,QAAS,OACTG,cAAe,SACfJ,MAAO,OACPD,OAAQ,QACP9H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGXy4D,QAAQ,aACNx4D,QAAS,OACTE,WAAY,SACZxG,UAAW,sBACXtB,UAAW,aACXmI,aAAc,MACduF,UAAW,QACV9N,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACd2F,UAAW,SAGhBo5D,YAAY,aACVl/D,QAAS,OACTE,WAAY,SACZ5H,SAAU,QACVwH,OAAQ,OACRgK,YAAa,oBACb1R,UAAW,aACXY,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BH,SAAU,OACVwR,YAAa,OACbsd,aAAc,oBACdnnB,eAAgB,WAGpBs/D,aAAa,aACXz/D,OAAQ,OACRC,MAAO,OACPC,QAAS,OACTE,WAAY,SACZD,eAAgB,WAChByJ,aAAc,QACb1R,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACP2J,aAAc,OACdzJ,eAAgB,eAGpBw4D,aAAa,aACX9/D,QAAS,sBACTI,WAAY,OACZF,SAAU,OACVC,WAAY,OACZE,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,YACTE,SAAU,SAGd2mE,SAAS,aACPz/D,MAAO,QACP7H,gBAAiBF,EAAM6Y,QAAQhR,WAAW5H,MAC1C+H,QAAS,QACRhI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGX6Q,KAAK,aACHpK,KAAM,aACLxO,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B+N,KAAM,aAGV64D,cAAc,aACZ1mE,QAAS,IACTP,UAAW,cACVJ,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,YACTE,SAAU,OACV4wC,UAAW,OACXzpC,QAAS,SAIbwZ,kBAAkB,aAChBzZ,MAAO,QACPgG,UAAW,QACV/N,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,SAGX0/D,iBAAkB,CAChBv/D,WAAY,SACZrH,SAAU,QAEZymE,iBAAiB,aACfn/D,cAAe,MACf7H,SAAU,QACV4H,WAAY,SACZ4J,YAAa,qBACZ9R,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BH,SAAU,OACVwR,YAAa,OACbsd,aAAc,oBACbnnB,eAAgB,kBAGrB0/D,uBAAwB,CACtB51C,QAAS,EACT/wB,MAAO,WAETwjB,eAAgB,CACdrkB,OAAQ,mBAGViY,SAAU,CACRlY,gBAAiB,UACjBc,MAAO,qBACPD,WAAY,SAxHkB,iCA0Hd,CAChBJ,QAAS,MA3HqB,qCA8H9BqH,QAAS,OACTG,cAAe,MAEfF,eAAgB,UACfjI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfJ,MAAO,UApIqB,KCwBlC,SAAS8/D,GAAiBh1D,GACxB,MAAO,CACL1P,GAAG,gBAAD,OAAkB0P,GACpB,gBAAgB,qBAAhB,OAAsCA,IAG1C,IAAMma,GAAgB,CACpBs+C,iBAAkB,CAChBpuD,UAAWvB,OAASgtB,SAAS,EAAG,SAChCxrB,QAASxB,SAiNEiR,gBAAU,CACvBnmB,KAAM,iBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,kBALaJ,CAMZjZ,aAbqB,SAAAtO,GACtB,OAAO,eACFA,EAAMoB,KADX,CAEEJ,cAAehB,EAAMgB,kBAUG,KAAzBsN,EAhNgB,SAAA/L,GACjB,IAAMtF,EAAUxC,KADU,EAEdyC,cAALC,EAFmB,oBAGlB+oE,EAAkC3jE,EAAlC2jE,eAAgBllE,EAAkBuB,EAAlBvB,cAHE,EAKA8N,IAAMrQ,SAAS,GALf,mBAKnBc,EALmB,KAKZwP,EALY,KAUpBo3D,EL1CsB,SAAAC,GAC5B,IAAMC,EAAe,CACnB54B,YAAa24B,EAAYvuD,UAAU4J,OAAO,eAS5C,OANK2kD,EAAYtuD,QAGfuuD,EAAa34B,UAAY04B,EAAYtuD,QAAQ2J,OAAO,cAFpD4kD,EAAa34B,UAAYp3B,OAASmL,OAAO,cAKpC4kD,EK+BuBC,CAC5BJ,EAAevqD,OAAOsqD,kBAXE,EAcAx2D,YAAS4zD,GAAY,CAC7CzyD,UAAU,eACLu1D,EADI,CAEP91C,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,OALlCuP,EAdkB,EAclBA,KAAMsC,EAdY,EAcZA,QAQR42D,ELxCqC,SAAAl5D,GAC3C,IAAKA,EAAM,MAAO,GAElB,IAAMo3D,EAAe,CACnBoB,wBAAyB,GACzBG,yBAA0B,GAC1BD,4BAA6B,IAGzBF,EAA0Bx4D,EAAKm5D,gCAC/BR,EAA2B34D,EAAKo5D,4BAA4B7pE,KAC5DmpE,EAA8B14D,EAAKo5D,4BAA4BC,QAoDrE,OAlDIb,IACFpB,EAAaoB,wBAAwB7vD,MACnC6vD,EAAwBnB,oBAE1BD,EAAaoB,wBAAwBV,oBAAsBjB,GACzD2B,EAAwB1B,qBAG1BM,EAAaoB,wBAAwBX,kBAAoBd,GACvDyB,GAGFpB,EAAaoB,wBAAwBrB,aAAeD,GAClDsB,EAAwBc,wBAIxBX,IACFvB,EAAauB,yBAAyBhwD,MACpCgwD,EAAyBlB,mBAE3BL,EAAauB,yBAAyBb,oBAAsBjB,GAC1D8B,EAAyB7B,qBAG3BM,EAAauB,yBAAyBd,kBAAoBb,GACxD2B,GAGFvB,EAAauB,yBAAyBxB,aAAeK,GACnDmB,EAAyBY,qBAIzBb,IACFtB,EAAasB,4BAA4B/vD,MACvC+vD,EAA4Bc,YAE9BpC,EAAasB,4BAA4BZ,oBAAsBjB,GAC7D6B,EAA4B5B,qBAG9BM,EAAasB,4BAA4Bb,kBAAoBZ,GAC3DyB,GAGFtB,EAAasB,4BAA4BvB,aAAeQ,GACtDe,EAA4Ba,qBAGzBnC,EKvBgBqC,CAA8Bz5D,GAMrD,OAJAyB,IAAM+C,WAAU,WACdlC,MACC,CAACu2D,IAGF,yBAAKvoE,UAAWV,EAAQc,MACtB,kBAAC,GAAD,OACEiD,EAAcH,sBAAsB/C,IAAM,kBAAC,GAAD,MAC3CkD,EAAcH,sBAAsB/C,IACnC,yBAAKH,UAAWV,EAAQk+D,SACtB,yBAAKx9D,UAAWV,EAAQ4kE,aACtB,kBAAC99D,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQm+D,cACzCj+D,EAAE,gBAGP,yBAAKQ,UAAWV,EAAQglE,kBACtB,kBAAC,KAAD,CACEjuD,eAAe,UACfzU,MAAOA,EACPwH,SArCS,SAAC4K,EAAON,GAC3BtC,EAASsC,IAqCC4C,YAAY,aACZ5V,QAAQ,cAER,kBAACgX,GAAA,EAAD,eACEpY,QAAS,CACPc,KAAMd,EAAQ+kE,cACdptD,QAAS3X,EAAQmlE,iBACjBrvD,SAAU9V,EAAQ8V,SAClBymD,iBAAkBv8D,EAAQqlE,wBAE5B39D,MAAOxH,EAAE,mBACLqlE,GA3DiB,KA6DvB,kBAACntD,GAAA,EAAD,eACEpY,QAAS,CACPc,KAAMd,EAAQ+kE,cACdptD,QAAS3X,EAAQmlE,iBACjBrvD,SAAU9V,EAAQ8V,SAClBymD,iBAAkBv8D,EAAQqlE,wBAE5B39D,MAAOxH,EAAE,oBACLqlE,GApEmB,KAsEzB,kBAACntD,GAAA,EAAD,eACEpY,QAAS,CACPc,KAAMd,EAAQ+kE,cACdptD,QAAS3X,EAAQmlE,iBACjBrvD,SAAU9V,EAAQ8V,SAClBymD,iBAAkBv8D,EAAQqlE,wBAE5B39D,MAAOxH,EAAE,uBACLqlE,GA7EsB,OAiFhC,yBAAK7kE,UAAWV,EAAQkf,mBACtB,kBAACyM,GAAA,EAAD,CACErT,KAAK,mBACL4J,eAAgBliB,EAAQkiB,eACxBxhB,UAAWV,EAAQkf,kBACnB0C,cAAe,EACfC,eAAgB,CACdhH,QAASxB,OACTuB,UAAWvB,KAAO,cAAcmL,OAAO,cACvCF,WAAY,IAEdnC,eAAgB,kBAAM,GACtBhd,UAAWuc,GACXiB,YAAU,MAKjB5e,EAAcH,sBAAsB/C,IACnC,yBAAKH,UAAWV,EAAQgG,SACtB,yBAAKtF,UAAWV,EAAQklE,UACtB,kBAACxuD,GAAD,CACEhW,UAAWV,EAAQ27D,kBACnBr5D,MAAOA,EACPiO,MA3GuB,GA6GtB+4D,GAAkBA,EAAeV,yBAChC,kBAAC,GAAD,CACE7vD,MAAOuwD,EAAeV,wBAAwB7vD,MAC9C5Y,YAAY,mBACZujD,SAAS,2EACTukB,kBACEqB,EAAeV,wBAAwBX,kBAEzCC,oBACEoB,EAAeV,wBAAwBV,uBAK/C,kBAACxxD,GAAD,CACEhW,UAAWV,EAAQ27D,kBACnBr5D,MAAOA,EACPiO,MA7HyB,GA+HxB+4D,GAAkBA,EAAeP,0BAChC,kBAAC,GAAD,CACEhwD,MAAOuwD,EAAeP,yBAAyBhwD,MAC/C5Y,YAAY,8CACZujD,SAAS,0EACTukB,kBACEqB,EAAeP,yBAAyBd,kBAE1CC,oBACEoB,EAAeP,yBAAyBb,uBAKhD,kBAACxxD,GAAD,CACEhW,UAAWV,EAAQ27D,kBACnBr5D,MAAOA,EACPiO,MA/I4B,GAiJ3B+4D,GAAkBA,EAAeR,6BAChC,kBAAC,GAAD,CACE/vD,MAAOuwD,EAAeR,4BAA4B/vD,MAClD5Y,YAAY,mBACZujD,SAAS,kHACTukB,kBACEqB,EAAeR,4BAA4Bb,kBAE7CC,oBACEoB,EAAeR,4BACZZ,wBA7Jc,IAmK1B5lE,GACCgnE,EAAeV,yBACb,kBAAC,GAAD,CACED,aACEW,EAAeV,wBAAwBrB,aAEzCmB,eAAe,0BACfH,WAAW,wBAzKY,IA4K5BjmE,GACCgnE,EAAeP,0BACb,kBAAC,GAAD,CACEJ,aACEW,EAAeP,yBAAyBxB,aAE1CmB,eAAe,2BACfH,WAAW,yBAlLe,IAqL/BjmE,GACCgnE,EAAeR,6BACb,kBAAC,GAAD,CACEH,aACEW,EAAeR,4BAA4BvB,aAE7CmB,eAAe,8BACfH,WAAW,kC,slHClOpB,IAAMuB,GAAyBv9D,KAAH,MAkBtBw9D,GAAyBx9D,KAAH,MAwBtBy9D,GAA+Bz9D,KAAH,MAkB5B09D,GAA+B19D,KAAH,MA0B5B29D,GAAmC39D,KAAH,MAchC49D,GAAmC59D,KAAH,MAgBhC69D,GAAqB79D,KAAH,M,0pECpHxB,IAAM89D,GAAgB99D,KAAH,MAgDb+9D,GAAoC/9D,KAAH,MC5CxCg+D,GAAoB,SAAC3/C,EAAUo8B,GACnC,IAAMwjB,EAAiB,GAYvB,OAVAxjB,EAAajP,SAASpf,SAAQ,SAAAnnB,GAC5B,GrVH0B,WqVGtBA,EAAK9N,cAAkC,CACzC,IAAMijC,EAAQ/b,GAAYpZ,EAAKwyB,UAAY,CAAEnjC,GAAIuC,SAASoO,EAAK3Q,KAAQ,GACvE2pE,EAAev0D,KAAf,eACK0wB,EADL,CAEEggB,SAAUn1C,EAAKm1C,SACfC,aAAcp1C,EAAKo1C,oBAIlB4jB,GAGHC,GAA0B,SAAAzjB,GAC9B,IAAIX,EAAe,KAOnB,OALAW,EAAajP,SAASpf,SAAQ,SAAAnnB,GrVnBF,mBqVoBtBA,EAAK9N,gBACP2iD,GAAe,MAGZA,GAGHqkB,GAAoB,SAAC9/C,EAAUo8B,GACnC,IAAM2jB,EAAiB,GAYvB,OAVA3jB,EAAajP,SAASpf,SAAQ,SAAAnnB,GAC5B,GrV7ByB,WqV6BrBA,EAAK9N,cAAiC,CACxC,IAAMijC,EAAQ/b,GAAYpZ,EAAKwyB,UAAY,CAAEnjC,GAAIuC,SAASoO,EAAK3Q,KAAQ,GACvE8pE,EAAe10D,KAAf,eACK0wB,EADL,CAEEkgB,eAAgBr1C,EAAKq1C,eACrBC,UAAWt1C,EAAKs1C,iBAIf6jB,GAEIC,GAAiC,SAAChgD,EAAUxa,GACvD,MAAO,CACLo6D,eAAgBD,GAAkB3/C,EAAUxa,GAC5Cu6D,eAAgBD,GAAkB9/C,EAAUxa,GAC5Ci2C,aAAcokB,GAAwBr6D,KA4F7By6D,GAAuB,SAACjgD,EAAUkgD,GAC7C,IAAIC,EAAoB,GAaxB,OAZAD,EAAiBvuD,aAAaoc,SAAQ,SAAAnnB,GACpC,GAAiC,cAA7BA,EAAK7N,oBAAqC,CAC5C,IAAMgjC,EAAQ/b,GAAYpZ,EAAKwyB,UAAY,CAAEnjC,GAAIuC,SAASoO,EAAK3Q,KAAQ,GAEvEkqE,EAAiB,eACZpkC,EADY,CAEfye,YAAa5zC,EAAK4zC,YAClBC,gBAAiB7zC,EAAK6zC,gBACtBJ,aAAczzC,EAAKyzC,mBAIlB8lB,GAGIC,GAAqB,SAACpgD,EAAUkgD,GAC3C,IAAIG,EAAkB,GAWtB,OAVAH,EAAiBvuD,aAAaoc,SAAQ,SAAAnnB,GACpC,GAAiC,YAA7BA,EAAK7N,oBAAmC,CAC1C,IAAMgjC,EAAQ/b,GAAYpZ,EAAKwyB,UAAY,CAAEnjC,GAAIuC,SAASoO,EAAK3Q,KAAQ,GACvEoqE,EAAe,eACVtkC,EADU,CAEb2e,SAAU9zC,EAAK8zC,SACfC,SAAU/zC,EAAK+zC,eAId0lB,GAGIC,GAAqB,SAACtgD,EAAUkgD,GAC3C,IAAIG,EAAkB,GAWtB,OAVAH,EAAiBvuD,aAAaoc,SAAQ,SAAAnnB,GACpC,GAAiC,YAA7BA,EAAK7N,oBAAmC,CAC1C,IAAMgjC,EAAQ/b,GAAYpZ,EAAKwyB,UAAY,CAAEnjC,GAAIuC,SAASoO,EAAK3Q,KAAQ,GACvEoqE,EAAe,eACVtkC,EADU,CAEb2e,SAAU9zC,EAAK8zC,SACfC,SAAU/zC,EAAK+zC,eAId0lB,GAgCIE,GAA+B,SAACvgD,EAAUxa,GACrD,IAAMg7D,EAAgC,GAWtC,OAVIh7D,EAAKsO,OAAOmmC,4BACdz0C,EAAKsO,OAAOmmC,2BAA2BlsB,SAAQ,SAAAnnB,GAC7C,IAAMm1B,EAAQ/b,GAAYpZ,EAAKwyB,UAAY,CAAEnjC,GAAIuC,SAASoO,EAAK3Q,KAAQ,GACvEuqE,EAA8Bn1D,KAA9B,eACK0wB,EADL,CAEE5E,SAAUvwB,EAAKuwB,SACfijB,oBAAqBxzC,EAAKwzC,0BAIzBomB,GCtOI5tE,GAAYC,aAAW,SAAAC,GAAK,MAAG,CAC1Cia,QAAS,CACPhZ,OAAQ,UAEVC,MAAM,aACJD,OAAQ,YACRjB,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsI,UAAW,WAIdsY,IAAK,CACHrZ,QAAS,OACTC,eAAgB,gBAChBF,MAAO,QAETyC,MAAM,aACJzC,MAAO,OACPQ,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPpH,QAAS,sBCyBAisB,gBAAU,CACvBnmB,KAAM,sBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,cA1CoB,CACpB7pB,GAAI,GACJwqE,kBAAmB,KAmCN/gD,CAMZjZ,aAVqB,SAAAtO,GAAK,MAAK,CAChC0iD,QAASA,aAAQ,sBAARA,CAA+B1iD,MASvCsO,EAtCyB,SAAC,GAA+B,IAA7BsZ,EAA4B,EAA5BA,aAAc86B,EAAc,EAAdA,QACrCzlD,EAAUxC,KADyC,EAE7CyC,cAALC,EAFkD,oBAIzD,OACE,yBAAKQ,UAAWV,EAAQ2X,SACtB,kBAAC7Q,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,8BAEL,0BAAMwrB,SAAUf,GACd,kBAACgB,GAAA,EAAD,CACErT,KAAK,oBACL5X,UAAWV,EAAQkI,MACnB2B,WAAY,CAAEV,UAAW,KACzBM,YAAY,+BACZ/B,MAAM,iCACNvC,UAAW8D,KAEb,kBAAC,GAAD,CACE+lB,kBAAmBy2B,EACnB35B,WAAW,IACXC,YAAY,eCrCTu/C,GAAU,oyBA+BVC,GAAa,CACxBjzD,KAAM,0DACNkzD,YAAa,+CACbC,mBAAoB,8BACpBC,kBAAmB,+BACnBC,uBAAwB,kCACxBh7D,YAAa,wBCnCFnT,GAAYC,aAAW,SAAAC,GAAK,MAAI,CAC3Cia,QAAQ,aACNjS,QAAS,OACTF,OAAQ,QACP9H,EAAMQ,YAAYC,KAAK,MAAO,CAC7B0H,cAAe,SACfJ,MAAO,SAGXmmE,qBAAqB,aACnBlmE,QAAS,OACTC,eAAgB,SAChBF,MAAO,qBACPoK,WAAY,OACZ5J,aAAe,QACdvI,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OACPQ,aAAe,QAGnB4lE,cAAc,aACZpmE,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,SAIX7G,MAAM,aACJD,OAAQ,YACPjB,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsI,UAAW,WAGfsY,IAAK,CACHrZ,QAAS,OACTC,eAAgB,gBAChBF,MAAO,QAETyC,MAAM,aACJzC,MAAO,OACPQ,aAAc,QACbvI,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OACNpH,QAAS,sBAGdytE,cAAc,aACZpmE,QAAS,OACTC,eAAgB,iBACfjI,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OACNpH,QAAS,sBAGd0tE,YAAa,CACXluE,OAAQ,oBACRE,aAAc,MACdQ,SAAU,OACVC,WAAY,OACZC,WAAY,IACZC,MAAO,UACPL,QAAS,WACTL,SAAU,OACVkB,YAAa,QAGf2+C,KAAK,aACHp4C,MAAO,QACPpH,QAAS,cACT2tE,WAAY,qBACXtuE,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OACPsC,cAAe,SAInBkkE,SAAS,aACP1mE,WAAY,UACZ1H,OAAQ,oBACRE,aAAc,MACdmxC,SAAU,SACV7wC,QAAS,YACToH,MAAO,SACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,SAIX2pC,SAAU,CACR1wC,MAAO,UACPC,OAAQ,WACR,eAAgB,CACdA,OAAQ,QCjFR+rB,GAAgB,CACpB7pB,GAAI,GACJqrE,QFc2B,eEb3BC,KAAMb,IAuFOhhD,gBAAU,CACvBnmB,KAAM,oBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,kBALaJ,CAMZjZ,aAhBqB,SAAAtO,GAAK,MAAK,CAChC0iD,QAASA,aAAQ,oBAARA,CAA6B1iD,OAGb,SAAAuO,GAAQ,MAAK,CACtC0mB,iBAAkB,SAACna,EAAOvb,GACxBgP,EAASwG,aAAO,oBAAqB+F,EAAOvb,QAU7C+O,EA1FuB,SAAC,GAAiD,IAA/CsZ,EAA8C,EAA9CA,aAAc86B,EAAgC,EAAhCA,QAASztB,EAAuB,EAAvBA,iBAC5Ch4B,EAAUxC,KADyD,EAE7DyC,cAALC,EAFkE,oBASzE,OACE,yBAAKQ,UAAWV,EAAQ2X,SACtB,yBAAKjX,UAAWV,EAAQ4rE,sBACtB,yBAAKlrE,UAAWV,EAAQ6rE,eACtB,kBAAC/kE,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,mBAEL,0BAAMwrB,SAAUf,GACd,kBAACgB,GAAA,EAAD,CACErT,KAAK,UACL5X,UAAWV,EAAQkI,MACnB2B,WAAY,CAAEV,UAAW,KACzBM,YAAY,UACZ/B,MAAM,YACNvC,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,OACL5X,UAAWV,EAAQkI,MACnBiB,UAAU,OACVq2D,KAAM,EACNxzD,QAAS,IACTvC,YAAY,OACZ/B,MAAM,SACNoE,YAAY,EACZ3G,UAAWwG,KAEb,yBAAKjL,UAAWV,EAAQ8rE,eACtB,kBAAC3qE,EAAA,EAAD,CACE8B,KAAK,SACL7B,QAAQ,WACRpB,QAAS,CACPc,KAAMd,EAAQ+rE,aAEhBprE,QAvCU,WACtBq3B,EAAiB,UFKQ,gBEJzBA,EAAiB,OAAQszC,MAuCZprE,EAAE,gBAGL,kBAAC,GAAD,CACE8uB,kBAAmBy2B,EACnB35B,WAAW,IACXC,YAAY,aAOtB,yBAAKrrB,UAAWV,EAAQ69C,MACtB,kBAAC/2C,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,SAEL,yBAAKQ,UAAWV,EAAQisE,UACrBvuD,OAAOC,KAAK4tD,IAAYl7D,KAAI,SAAAgI,GAAG,OAC9B,uBAAG3X,UAAWV,EAAQovC,UACpB,sCAAQ/2B,EAAR,MADF,MACyBnY,EAAEqrE,GAAWlzD,IADtC,eCyBG7a,GA1GGC,aAAW,SAAAC,GAAK,MAAK,CACrCoD,KAAM,CACJ4E,QAAS,OACTG,cAAe,SACfJ,MAAO,OACPD,OAAQ,QAEV04D,QAAQ,aACNx4D,QAAS,OACTE,WAAY,SACZxG,UAAW,sBACXtB,UAAW,aACXmI,aAAc,MACduF,UAAW,QACV9N,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACf2F,UAAW,SAGfo5D,YAAY,aACVl/D,QAAS,OACTE,WAAY,SACZ5H,SAAU,QACVwH,OAAQ,OACRgK,YAAa,oBACb1R,UAAW,aACXY,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BH,SAAU,OACVwR,YAAa,OACbsd,aAAc,oBACdnnB,eAAe,WAGnBw4D,aAAa,aACX9/D,QAAS,YACTI,WAAY,OACZF,SAAU,OACVC,WAAY,OACZE,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,WACTE,SAAU,SAGdwmE,cAAc,aACZrmE,MAAO,UACPL,QAAS,YACTyuB,aAAc,oBACdhvB,UAAW,aACXS,SAAU,OACVP,SAAU,kBACTN,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,YACTE,SAAU,OACV4wC,UAAW,OACXzpC,QAAS,SAIbs/D,iBAAiB,aACfn/D,cAAe,MACfumE,MAAO,SACN1uE,EAAMQ,YAAYC,KAAK,MAAQ,CAC5BsH,MAAO,OACPE,eAAgB,WAItBu/D,SAAU,CACRh5D,KAAM,WACNtO,gBAAiBF,EAAM6Y,QAAQhR,WAAW5H,MAC1C+H,QAAS,QAGX4Q,KAAK,aACHpK,KAAM,aACLxO,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B+N,KAAM,aAMVlG,QAAS,CACPP,MAAO,OACPD,OAAQ,OACRE,QAAS,OACTC,eAAgB,UAElBmQ,SAAU,CACRlY,gBAAiB,UACjBa,WAAY,QAEdyI,cAAe,CACb5H,SAAU,SAEZiI,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,mBAEV2S,IAAK,CACHla,SAAU,aCnDd,SAASsnE,GAAiBh1D,GACxB,MAAO,CACL1P,GAAG,gBAAD,OAAkB0P,GACpB,gBAAgB,qBAAhB,OAAsCA,IAI1C,IAggBec,gBAVS,SAAAtO,GACtB,MAAO,CACLgB,cAAehB,EAAMgB,cACrB8gD,2BAA4B9hD,EAAMoB,KAAK0gD,2BACvCvhD,wBAAyBP,EAAMwB,aAAajB,wBAC5CC,4BAA6BR,EAAMwB,aAAahB,4BAChDC,2BAA4BT,EAAMwB,aAAaf,+BAfxB,SAAA8N,GAAQ,MAAK,CACtCuhD,eAAgB,SAAC1uD,EAAMiM,GACrBkB,EAASijD,aAAWpwD,EAAMiM,KAE5Bi8D,gCAAiC,WAC/B/6D,EzI9hBK,CAAErO,KnNZT,2C4VwjBaoO,EA3fM,SAAC,GAAkB,IAAb/L,EAAY,mBAC/BtF,EAAUxC,KADqB,EAEzByC,cAALC,EAF8B,oBAInC2yD,EAOEvtD,EAPFutD,eACAvvD,EAMEgC,EANFhC,wBACAC,EAKE+B,EALF/B,4BACAC,EAIE8B,EAJF9B,2BACAqhD,EAGEv/C,EAHFu/C,2BACA9gD,EAEEuB,EAFFvB,cACAsoE,EACE/mE,EADF+mE,gCAGM15D,EAAoBC,wBAApBD,gBAb6B,EAeIH,YAAS63D,GAAe,CAC/D12D,UAAW,CACTyf,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,IAExCyvC,YAAa,eACbC,6BAA6B,IAPvBngC,EAf6B,EAe7BA,KAAMsC,EAfuB,EAevBA,QAAS8jC,EAfc,EAedA,cAfc,EAyBX3kC,IAAMrQ,SAAS,GAzBJ,mBAyB9Bc,EAzB8B,KAyBvBwP,EAzBuB,OA0BDD,IAAMrQ,SAAS,IA1Bd,mBA0B9BuwD,EA1B8B,KA0BlBqB,EA1BkB,OA2BHvhD,IAAMrQ,UAAS,GA3BZ,mBA2B9B8F,EA3B8B,KA2BnButD,EA3BmB,OA4BWhjD,IAAMrQ,UAAS,GA5B1B,mBA4B9B8qE,EA5B8B,KA4BZC,EA5BY,OA6BmB16D,IAAMrQ,UAAS,GA7BlC,mBA6B9BgrE,EA7B8B,KA6BRC,EA7BQ,OA8ByB56D,IAAMrQ,UAClE,GA/BmC,mBA8B9BkrE,EA9B8B,KA8BLC,EA9BK,OAiCa96D,IAAMrQ,UAAS,GAjC5B,mBAiC9BorE,EAjC8B,KAiCXC,EAjCW,OAmCJx6D,YAAYy3D,IAAtCgD,EAnC8B,uBAoCJz6D,YAAY03D,IAAtCgD,GApC8B,wBAqCA16D,YACnC23D,IADKgD,GArC8B,wBAwCA36D,YACnC43D,IADKgD,GAxC8B,wBA4CG56D,YACtC63D,IADKgD,GA5C8B,wBA+CG76D,YACtC83D,IADKgD,GA/C8B,wBAmDV96D,YAAY+3D,IAAhCgD,GAnD8B,qBAqDrCv7D,IAAM+C,WAAU,WACd,GAAIxE,GAA0B,IAAlBomC,EAAqB,CAC/Bqe,GAAa,GACb,IAAMwY,EPnD2B,SAAAj9D,GACrC,IAAM2nC,EAAW,GAkCjB,OAhCI3nC,EAAKo6D,gBACPzyB,EAAS9hC,KAAK,CACZpV,GAAIuP,EAAKo6D,eAAe3pE,GAAKuC,SAASgN,EAAKo6D,eAAe3pE,IAAM,EAChE8lD,SAAUv2C,EAAKo6D,eAAe7jB,SAC9BjjD,cAAe,SACfkjD,aAAcx2C,EAAKo6D,eAAe5jB,aAClC5iB,WAAW,IAIX5zB,EAAKu6D,gBACP5yB,EAAS9hC,KAAK,CACZpV,GAAIuP,EAAKu6D,eAAe9pE,GAAKuC,SAASgN,EAAKu6D,eAAe9pE,IAAM,EAChE6C,cAAe,SACfmjD,eAAgBz2C,EAAKu6D,eAAe9jB,eACpCC,UAAW12C,EAAKu6D,eAAe7jB,UAC/B9iB,WAAW,IAIX5zB,EAAKk9D,yBACPv1B,EAAS9hC,KAAK,CACZpV,GAAIuP,EAAKk9D,wBAAwBzsE,GAC7BuC,SAASgN,EAAKk9D,wBAAwBzsE,IACtC,EACJ6C,cAAe,iBACfsgC,WAAW,EACXspC,wBAAyBl9D,EAAKk9D,wBAAwBjnB,aAClD,MACA,OAGDtO,EOgBkBw1B,CAAwBn9D,GACvCo9D,EPd+B,SAAAp9D,GACzC,IAAMmM,EAAe,GAgCrB,OA/BInM,EAAKq9D,mBACPlxD,EAAatG,KAAK,CAChBpV,GAAIuP,EAAKq9D,kBAAkB5sE,GAAKuC,SAASgN,EAAKq9D,kBAAkB5sE,IAAM,EACtEukD,YAAah1C,EAAKq9D,kBAAkBroB,YACpCzhD,oBAAqB,YACrB0hD,gBAAiBj1C,EAAKq9D,kBAAkBpoB,gBACxCJ,aAAc70C,EAAKq9D,kBAAkBxoB,aACrCjhB,WAAW,IAIX5zB,EAAK66D,iBACP1uD,EAAatG,KAAK,CAChBpV,GAAIuP,EAAK66D,gBAAgBpqE,GAAKuC,SAASgN,EAAK66D,gBAAgBpqE,IAAM,EAClEykD,SAAUl1C,EAAK66D,gBAAgB3lB,SAC/BC,SAAUn1C,EAAK66D,gBAAgB1lB,SAC/B5hD,oBAAqB,UACrBqgC,WAAW,IAIX5zB,EAAKs9D,iBACPnxD,EAAatG,KAAK,CAChBpV,GAAIuP,EAAKs9D,gBAAgB7sE,GAAKuC,SAASgN,EAAKs9D,gBAAgB7sE,IAAM,EAClEykD,SAAUl1C,EAAKs9D,gBAAgBpoB,SAC/BC,SAAUn1C,EAAKs9D,gBAAgBnoB,SAC/B5hD,oBAAqB,UACrBqgC,WAAW,IAIRznB,EOnBsBoxD,CAA4Bv9D,GAC/Cw9D,EPoEiC,SAAAx9D,GAC3C,IAAMy0C,EAA6B,GAWnC,OAVIz0C,EAAKw9D,4BACPx9D,EAAKw9D,2BAA2Bj1C,SAAQ,SAAAnnB,GACtCqzC,EAA2B5uC,KAAK,CAC9BpV,GAAI2Q,EAAK3Q,GAAKuC,SAASoO,EAAK3Q,IAAM,EAClCkhC,SAAUvwB,EAAKuwB,SACfijB,oBAAqBxzC,EAAKwzC,oBAC1BhhB,WAAW,OAIV6gB,EOhFgCgpB,CAA8Bz9D,GAEjEm8D,IAAsBc,EAAa9qE,QACnCkqE,IAA0Be,EAAiBjrE,QAC3CoqE,IAA6Bv8D,EAAK09D,yBAElC,IAAMC,EAAY,CAChB/mB,aAAc,CAAEjP,SAAUs1B,GAC1B7nB,wBAAyB,CACvBjpC,aAAcixD,GAEhB3oB,2BAA4B,CAC1BA,2BAA4B+oB,GAE9BI,oBAAoB,eAAM59D,EAAK09D,0BAG7BG,EAAoB,KAEpB79D,EAAK89D,gBAAkB99D,EAAK89D,eAAe3rE,SAC7C0rE,EAAoB79D,EAAK89D,eAAe,GACxCH,EAAUE,kBAAoBA,GAGhC7a,EAAc2a,GAEd,IAAIrjD,EAAgB,CAClBs8B,aAAc,CACZjP,SACEs1B,GAAgBA,EAAa9qE,OACzB8qE,EACA,CACE,CACExsE,GAAIsa,OACJzX,cAAe,MAI3B8hD,wBAAyB,CACvBjpC,aACEixD,GAAoBA,EAAiBjrE,OACjCirE,EACA,CACE,CACE3sE,GAAIsa,OACJxX,oBAAqB,MAIjCkhD,2BAA4B,CAC1BA,2BAA4B+oB,GAE9BI,oBAAoB,eAAM59D,EAAK09D,0BAG7BG,IACFvjD,EAAcujD,kBAAoBA,GAGpCpY,GAAgBnrC,GAChBmiD,GAAqB,MAEtB,CAACz8D,IAEJ,IAAMylD,GAAkB,SAAAC,GACtBp4C,OAAOC,KAAKm4C,GAAkBzlD,KAAI,SAAAwN,GAChCg1C,EAAeh1C,EAAOi4C,EAAiBj4C,QAqO3C,OACE,oCACE,yBAAKnd,UAAWV,EAAQc,MACtB,kBAAC,GAAD,MACA,kBAAC,GAAD,CACEwG,UAAWA,EACX5G,UAAWV,EAAQkH,cACnBK,gBAAiBvH,EAAQuH,mBAEzBxD,EAAcH,sBAAsB/C,IAAM,kBAAC,GAAD,MAC3CkD,EAAcH,sBAAsB/C,IACnC,yBAAKH,UAAWV,EAAQk+D,SACtB,yBAAKx9D,UAAWV,EAAQ4kE,aACtB,kBAAC99D,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQm+D,cACzCj+D,EAAE,cAGP,yBAAKQ,UAAWV,EAAQglE,kBACtB,kBAAC,KAAD,CACEjuD,eAAe,UACfzU,MAAOA,EACPwH,SAtPO,SAAC4K,EAAON,GAC3BtC,EAASsC,IAsPG4C,YAAY,aACX5V,QAAQ,cAET,kBAACgX,GAAA,EAAD,eACEpY,QAAS,CACPc,KAAMd,EAAQ+kE,cACdptD,QAAS3X,EAAQmlE,iBACjBrvD,SAAU9V,EAAQ8V,SAClBymD,iBAAkBv8D,EAAQqlE,wBAE5B39D,MAAOxH,EAAE,aACLqlE,GAvYK,KAyYX,kBAACntD,GAAA,EAAD,eACEpY,QAAS,CACPc,KAAMd,EAAQ+kE,cACdptD,QAAS3X,EAAQmlE,iBACjBrvD,SAAU9V,EAAQ8V,SAClBymD,iBAAkBv8D,EAAQqlE,wBAE5B39D,MAAOxH,EAAE,iBACLqlE,GAhZS,KAkZf,kBAACntD,GAAA,EAAD,eACEpY,QAAS,CACPc,KAAMd,EAAQ+kE,cACdptD,QAAS3X,EAAQmlE,iBACjBrvD,SAAU9V,EAAQ8V,SAClBymD,iBAAkBv8D,EAAQqlE,wBAE5B39D,MAAOxH,EAAE,qBACLqlE,GA1ZS,KA4Zf,kBAACntD,GAAA,EAAD,eACEpY,QAAS,CACPc,KAAMd,EAAQ+kE,cACdptD,QAAS3X,EAAQmlE,iBACjBrvD,SAAU9V,EAAQ8V,SAClBymD,iBAAkBv8D,EAAQqlE,wBAE5B39D,MAAOxH,EAAE,uBACLqlE,GApaS,QA0atBxhE,EAAcH,sBAAsB/C,IAAM+rE,GACzC,yBAAKlsE,UAAWV,EAAQgG,SACtB,kBAAC0Q,GAAD,CACEpU,MAAOA,EACPiO,MA/aa,EAgbb7P,UAAWV,EAAQmY,KAEnB,kBAAC,GAAD,CACEuT,SAAU,SAAAhN,GACR00C,EAAc,eACTrB,EADQ,CAEX/K,aAAa,eAAMtoC,MA7Sd,SAAAA,GACrB,GAAI4tD,EAAkB,CACpB,IAAM6B,EAAcvD,GAClB0B,EACA5tD,GAEI0vD,EPnJ8B,SAAAh+D,GACxC,IAAMi+D,EAAkB,CACtBloB,OAAQ,GACRC,OAAQ,GACR,iBAAkB,IAOpB,OAJAh2C,EAAKuoB,SAAQ,SAAAnnB,GACX68D,EAAgB78D,EAAK9N,eAAeuS,KAAKzE,EAAK3Q,OAGzCwtE,EOwIqBC,CACtBhrE,GAEFypE,GAAuB,CACrBp5D,UAAU,eACLw6D,EADI,CAEP/6C,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,GACtC0tE,wBAAyBH,EAAgBjoB,OACzCqoB,wBAAyBJ,EAAgBhoB,OACzCqoB,8BAA+BL,EAAgB,sBAGlDx6D,MAAK,WACJjB,EAAgBzS,EAAE,2CAA4C,CAC5DkB,QAAS,YAEXyxD,EAAe,eAAgBn0C,GAAQ,EAAO,CAC5CgwD,qBAAqB,WAIpB,CACL,IAAMP,EAAcvD,GAClB0B,EACA5tD,GAEFouD,EAAuB,CACrBn5D,UAAU,eACLw6D,EADI,CAEP/6C,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,OAEvC+S,MAAK,WACNjB,EAAgBzS,EAAE,yCAA0C,CAC1DkB,QAAS,YAEXyxD,EAAe,eAAgBn0C,GAAQ,EAAO,CAC5CgwD,qBAAqB,QAiQbC,CAAejwD,OAIrB,kBAAChI,GAAD,CACEpU,MAAOA,EACPiO,MA7biB,EA8bjB7P,UAAWV,EAAQmY,KAEnB,kBAAC,GAAD,CACEuT,SAAU,SAAAhN,GACR00C,EAAc,eACTrB,EADQ,CAEXvM,wBAAwB,eAAM9mC,MAxQrB,SAAAA,GAGzB,GAFAm2C,GAAa,GAET2X,EAAsB,CACxB,IAAMiB,EAAoB5C,GACxB2B,EACA9tD,GAGIusD,EAAkBD,GAAmBwB,EAAsB9tD,GAC3DgvD,EAAkBxC,GAAmBsB,EAAsB9tD,GAC3D0vD,EPtDkC,SAAAh+D,GAC5C,IAAM7M,EAA8B,CAClC+J,UAAW,KACXC,QAAS,KACTM,QAAS,MAOX,OAJAuC,EAAKuoB,SAAQ,SAAAnnB,GACXjO,EAA4BiO,EAAK7N,qBAAuB6N,EAAK3Q,MAGxD0C,EO2CqBqrE,CACtBrrE,GAEFkqE,EAAkBoB,kBAAoB1D,GACpCqB,EACA3nB,GAGF,IAAIlxC,EAAY,CACdyf,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,GACtCiuE,2BAA4BV,EAAgB9gE,UAC5C9J,2BAA4BA,EAC5BurE,yBAA0BX,EAAgB7gE,QAC1CyhE,yBAA0BZ,EAAgBvgE,QAC1Co9D,gBAAiBA,EACjByC,gBAAiBA,IAGdU,EAAgB9gE,WAAa8gE,EAAgB9gE,WAAa,IAC7DqG,EAAS,kBAAwB85D,GAGnCR,GAA2B,CACzBt5D,UAAWA,IAEVC,MAAK,WACJjB,EAAgBzS,EAAE,2CAA4C,CAC5DkB,QAAS,YAEXsR,EAAQ,CACN0gB,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,KAExCwrE,OAEDxiD,OAAM,WACLlX,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,UAEXyzD,GAAa,GACbwX,WAEC,CACL,IAAMoB,EAAoB5C,GACxB2B,EACA9tD,GAGIusD,EAAkBD,GAAmBwB,EAAsB9tD,GAC3DgvD,EAAkBxC,GAAmBsB,EAAsB9tD,GAEjE+uD,EAAkBoB,kBAAoB1D,GACpCqB,EACA3nB,GAEFmoB,GAA2B,CACzBr5D,UAAW,CACTyf,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,GACtC4sE,kBAAmBA,EACnBxC,gBAAiBA,EACjByC,gBAAiBA,KAGlB95D,MAAK,WACJjB,EAAgBzS,EAAE,yCAA0C,CAC1DkB,QAAS,YAEXsR,EAAQ,CACN0gB,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,KAExCwrE,OAEDxiD,OAAM,WACLlX,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,UAEXyzD,GAAa,GACbwX,QA2KQ4C,CAAmBvwD,OAIzB,kBAAChI,GAAD,CACEpU,MAAOA,EACPiO,MA3cqB,EA4crB7P,UAAWV,EAAQmY,KAEnB,kBAAC,GAAD,CACEuT,SAAU,SAAAhN,GACR00C,EAAc,eACTrB,EADQ,CAEXic,oBAAoB,eAAMtvD,MAnLN,SAAAA,GAChCguD,EACFS,GAA8B,CAC5Bx5D,UAAW,CACTu7D,0BAA2BxwD,EAAO7d,GAClCwqE,kBAAmB3sD,EAAO2sD,kBAC1Bj4C,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,MAEvC+S,MAAK,WACNjB,EAAgBzS,EAAE,2CAA4C,CAC5DkB,QAAS,YAEXyxD,EAAe,sBAAuBn0C,GAAQ,EAAO,CACnDgwD,qBAAqB,OAIzBxB,GAA8B,CAC5Bv5D,UAAW,CACT03D,kBAAmB3sD,EAAO2sD,mBAAqB,GAC/Cj4C,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,MAEvC+S,MAAK,WACNjB,EAAgBzS,EAAE,yCAA0C,CAC1DkB,QAAS,YAEXyxD,EAAe,sBAAuBn0C,GAAQ,EAAO,CACnDgwD,qBAAqB,OAsJbS,CAA8BzwD,OAKpC,kBAAChI,GAAD,CAAUpU,MAAOA,EAAOiO,MAxdZ,GAydV,kBAAC,GAAD,CACEmb,SAAU,SAAAhN,GACR00C,EAAc,eACTrB,EADQ,CAEXkc,kBAAkB,eAAMvvD,MA1Jd,SAAAA,GAC1B0uD,GAAiB,CACfz5D,UAAW,CACTu4D,QAASxtD,EAAOwtD,QAChBC,KAAMztD,EAAOytD,KACb94C,QACEtvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,MAGvC+S,MAAK,YAAc,EAAXxD,KACEg9D,iBAAiB1F,QACxB/0D,EAAgBzS,EAAE,2CAA4C,CAC5DkB,QAAS,YAEXyxD,EAAe,oBAAqBn0C,GAAQ,EAAO,CACjDgwD,qBAAqB,KAGvB/7D,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,UAGbyzD,GAAa,MAEdhrC,OAAM,WACLlX,EAAgBzS,EAAE,iCAAkC,CAClDkB,QAAS,aAiIDguE,CAAoB1wD,a,WClevBlhB,GA1DGC,aAAW,SAACC,GAAD,MAAY,CACvC2xE,WAAY,CACV3pE,QAAS,OACTrH,QAAS,cACTyuB,aAAc,qBAMhBwiD,UAAU,aACRtxE,SAAU,QACVK,QAAS,UACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BH,SAAU,QACVK,QAAS,uBAIbkxE,cAAe,CACb7pE,QAAS,OACTC,eAAgB,gBAChBF,MAAO,QAGTuZ,OAAO,aACLvZ,MAAO,OACPgB,UAAW,SACXkB,cAAe,cACdjK,EAAMQ,YAAYC,KAAK,MAAQ,CAC5BE,QAAS,QACT+H,WAAY,SAKlBopE,QAAQ,aACN9wE,MAAO,UACPD,WAAY,OACZquB,aAAc,oBACd7mB,aAAc,SACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,IACd6mB,aAAc,SAGlB2iD,YAAY,aACV/wE,MAAO,UACPD,WAAY,OACZquB,aAAc,oBACd7mB,aAAc,SACbvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,IACd6mB,aAAc,aCNL4iD,GAtCY,SAAC,GAAwC,IAAtCC,EAAqC,EAArCA,UAAW/wE,EAA0B,EAA1BA,MAAOm1B,EAAmB,EAAnBA,aACxC/zB,EAAUxC,KADiD,EAE/CyC,cAF+C,mBAE1DC,EAF0D,KAI3D8S,EAJ2D,KAInCnH,SAE9B,OACE,yBAAKnL,UAAWV,EAAQqvE,YACtB,kBAACvoE,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQsvE,WACzCpvE,EAAEtB,IAEL,yBAAK8B,UAAWV,EAAQuvE,eACrBI,EAAUt/D,KAAI,SAACmB,EAAMjB,GAAW,IAAD,EACxByW,EAAM3N,KAAO7H,EAAKwV,IAAK,QAC1B5B,OAAOlY,GAAY8F,IACnBwR,OAAO,QACJorD,EAAYv2D,OAASgI,OAAO7P,EAAK4P,KAAM,OACvCyuD,IAAgB97C,GAClB1a,KAAO0a,GAAc1S,OAAO7P,EAAK4P,KAAM,OAE3C,OACE,kBAACta,EAAA,EAAD,CACEuR,IAAK9H,EACLnP,QAAQ,QACRV,UAAWsG,KAAWhH,EAAQgf,QAAT,mBAClBhf,EAAQwvE,QAAUI,GADA,cAElB5vE,EAAQyvE,aAAeG,GAAaC,GAFlB,KAHvB,UAQM7oD,EARN,YAQaxV,EAAK87B,e,+DCoFf9vC,GAxHGC,aAAW,SAACC,GAAD,YAAY,CACvCqI,OAAO,aACLL,QAAS,OACTtG,UAAW,sBACXf,QAAS,UACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfxH,QAAS,WAGbyxE,WAAW,aACTpqE,QAAS,OACTE,WAAY,SACZvH,QAAS,iBACTe,UAAW,uBACV1B,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,iBACTe,UAAW,OACX0tB,aAAc,oBACdnnB,eAAgB,WAGpBoqE,gBAAiB,CACfrxE,MAAO,WAETsxE,SAAU,CACRzxE,SAAU,OACVG,MAAO,WAETuxE,YAAY,aACVjE,WAAY,oBACZjuE,aAAc,EACdW,MAAO,UACP0H,WAAY,MACZ08B,YAAa,OACbrkC,WAAY,QACXf,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsI,UAAW,SACXhB,MAAO,OACPE,eAAgB,SAChBD,QAAS,OACTsmE,WAAY,SACZ58D,aAAc,SAIlB8gE,aAAa,aACXxqE,QAAS,OACTE,WAAY,SACZk9B,YAAa,QACZplC,EAAMQ,YAAYC,KAAK,MAAQ,CAE9B0H,cAAe,SACfD,WAAY,SACZD,eAAgB,WAGpB2xB,OAAO,aACLz5B,OAAQ,oBACRE,aAAc,MACdM,QAAS,YACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,WACTU,UAAW,OACXkH,aAAc,SAGlBkqE,WAAY,CACVzxE,MAAO,UACPD,WAAY,QAEd4pB,MAAM,aACJ3iB,QAAS,OACTE,WAAY,SACZQ,WAAY,QACX1I,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BiI,WAAY,SAGhBgqE,UAAW,CACT7xE,SAAU,OACVV,OAAQ,iBACRE,aAAc,OACdM,QAAS,MACTuQ,OAAQ,WAEVyhE,WAAY,CACV1xE,OAAQ,UAEV2xE,kBAAmB,CACjB1hE,OAAQ,eAEV2hE,kBAAgB,GACdtqE,aAAc,IACdG,WAAY,OACZ9G,SAAU,YAHI,cAIb5B,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BiI,WAAY,SALA,cAQd,uBAAwB,CACtB9G,SAAU,WACVC,IAAK,SAVO,cAYd,qBAAsB,CACpBqP,OAAQ,YAbI,GAiBhBsQ,kBAAmB,CACjB5f,SAAU,WACV,6BAA6B,eAC1B5B,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BiiB,KAAM,kBACN5gB,MAAO,SCgCAgxE,GAnIgB,SAAC,GAOzB,IANL51D,EAMI,EANJA,UACAC,EAKI,EALJA,QACA41D,EAII,EAJJA,mBACAtT,EAGI,EAHJA,SACAppC,EAEI,EAFJA,aACA28C,EACI,EADJA,gBAEM1wE,EAAUxC,KACVmU,EAAUC,cAFZ,EAGc3R,cAHd,mBAGGC,EAHH,KAKE8S,EALF,KAK0BnH,SAExB8kE,EAAuB,WAC3B,OAAQt3D,OAASgL,UAAUzJ,EAAWC,EAAS,MAAO,OAkCxD,OACE,yBAAKna,UAAWV,EAAQ+F,QACtB,yBAAKrF,UAAWV,EAAQ8vE,YACtB,kBAAC3uE,EAAA,EAAD,CACE++B,UAAW,kBAAC,KAAD,CAAuBx/B,UAAWV,EAAQgwE,WACrDrvE,QAAS,WACPgR,EAAQsE,KAAK,CACXD,SAAU,IACVjT,MAAO,CACLssB,UAAW8tC,OAKjB,kBAACr2D,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ+vE,iBAC5C7vE,EAAE,UAGP,kBAAC4G,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQiwE,aACzC/vE,EAAE,cAGP,yBAAKQ,UAAWV,EAAQkwE,cACtB,kBAAC/uE,EAAA,EAAD,CACEC,QAAQ,WACRV,UAAWV,EAAQs3B,OACnB32B,QAjCe,WACrB8vE,EAAmB,CACjB71D,UAAWvB,OAAS0L,QAAQ,WAC5BlK,QAASxB,OAAS2L,MAAM,eAgCpB,kBAACle,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQmwE,YAC5CjwE,EAAE,WAGP,yBAAKQ,UAAWV,EAAQqoB,OACtB,kBAAC,KAAD,CACE3nB,UAAWsG,KAAWhH,EAAQowE,UAAT,eAClBpwE,EAAQswE,mBAAqBK,MAEhChwE,QAAS,kBAAMgwE,KApDJ,WACnB,IAAMC,EAAev3D,KAAOuB,GAAWyrB,SAAS,EAAG,OACnDoqC,EAAmB,CACjB71D,UAAWg2D,EACX/1D,QAASxB,KAAOwB,GAASwrB,SAAS,EAAG,SAgDUwqC,MAE3C,kBAAC/pE,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQqwE,YAC5Ch3D,KAAOuB,GACLwK,OAAOlY,GAAY8F,IACnBwR,OAAO,gBAAiB,IAH7B,SAII,IACDnL,KAAOwB,GACLuK,OAAOlY,GAAY8F,IACnBwR,OAAO,iBAEZ,kBAAC,KAAD,CACE9jB,UAAWV,EAAQowE,UACnBzvE,QAzEO,WACf,IAAMiwE,EAAev3D,KAAOuB,GAAWkI,IAAI,EAAG,OAC9C2tD,EAAmB,CACjB71D,UAAWg2D,EACX/1D,QAASxB,KAAOwB,GAASiI,IAAI,EAAG,YAuE3B,yBAAKpiB,UAAWV,EAAQkf,mBACrB,kBAAC,GAAD,CACEre,GAAG,iBACHyX,KAAK,kBACL5Q,MAAM,aACNgtB,SAAS,EACTtS,eAAgB,EAChBG,QAAS,GACTuS,gBAAgB,EAChBrrB,YAAY,cACZ/I,UAAWV,EAAQuwE,iBACnBO,gBAAgB,QAChB5oE,MAAO,CACL5F,MAAOyxB,EACPjqB,SAjGgB,SAAAxH,GAC9BouE,EAAgBpuE,GAChBmuE,EAAmB,CACjB71D,UAAWvB,KAAO/W,GAAOyiB,QAAQ,WACjClK,QAASxB,KAAO/W,GAAO0iB,MAAM,eA+FnBtb,KAAM,CACJC,QAAS,KACT1B,MAAO,KACP2B,aAAc,MAEhBqrB,QAAQ,SC3IlB87C,GAAe,SAACn2D,EAAWC,GAI/B,IAHA,IAAIK,EAAY,GACZkG,EAAOxG,EAEJvB,KAAO+H,GAAMqU,eAAe5a,EAAS,QAAQ,CAClD,IAAMmM,EAAM3N,KAAO+H,GAAMoD,OAAO,QAC1B8oB,EAASj0B,KAAO+H,GAAMoD,OAAO,KAEnCtJ,EAAUjF,KAAK,CACb+Q,IAAKA,EACLsmB,OAAQA,EACRlsB,KAAMA,IAERA,EAAO/H,KAAO+H,GAAM0B,IAAI,EAAG,OAG7B,OAAO5H,GCydM1d,GAxeGC,aAAW,SAAAC,GAAK,oBAAI,CACpCia,QAAQ,aACNnS,OAAQ,OACRC,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAO,IAIjC6yE,gBAAgB,aACdxrE,OAAQ,sBACP9H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BqH,OAAQ,OACRC,MAAO,OACP0pC,UAAW,YAIfogC,cAAe,CACb7pE,QAAS,OACTC,eAAgB,gBAChBF,MAAO,SAETuZ,OAAQ,CACNvZ,MAAO,OACPgB,UAAW,UAGbwqE,WAAY,CACVvrE,QAAS,QAEXwrE,oBAAoB,aAClBxrE,QAAS,OACTrH,QAAS,QACTT,gBAAiB,WAChBF,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,sBAIX0rE,kBAAkB,aAChB1rE,MAAO,QACPzH,SAAU,QACV0H,QAAS,OACXkJ,OAAQ,WACLlR,EAAMQ,YAAYC,KAAK,MAAO,CAC9BH,SAAU,UAGbozE,mCAAoC,CAClC1rE,QAAS,OACTE,WAAY,SACZtG,SAAU,WACVsP,OAAQ,UACRlQ,MAAO,SACPouB,aAAc,oBACd,eAAgB,CACdA,aAAc,KAEhB,YAAY,aACVrnB,MAAO,QACPO,QAAS,KACTN,QAAS,QACTpG,SAAU,WACVqgB,OAAQ,OACRna,OAAQ,MACRD,WAAY,WACX7H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,sBAGX,uBAAwB,CACtBO,QAAS,KACTN,QAAS,SAGb2rE,cAAY,GACVpzE,SAAU,QACVI,QAAS,SACT6wC,SAAU,SACVxpC,QAAS,eACT4rE,aAAc,WACdxiE,WAAY,SAEZ5C,KAAM,WARI,wBASD,QATC,cAUTxO,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,QACP6rE,aAAc,SAZN,GAeZC,YAAY,aACVvzE,SAAU,QACVK,QAAS,kBACRX,EAAMQ,YAAYC,KAAK,MAAO,CAC7BH,SAAU,UAGdwzE,uBAAwB,CACtB1kD,aAAc,qBACdxtB,SAAU,WACV,eAAgB,CACdwtB,aAAc,KAEhB,YAAa,CACXrnB,MAAO,QACPO,QAAS,KACTN,QAAS,QACTpG,SAAU,WACVqgB,OAAQ,OACRna,OAAQ,MACRD,WAAY,SAEd,uBAAwB,CACtBS,QAAS,KACTN,QAAS,SAGb+rE,mBAAoB,CAClBzF,WAAY,qBAEdlmC,cAAY,GACVpgC,QAAS,OACTC,eAAgB,gBAChBH,OAAQ,OACR9G,MAAO,OACPd,gBAAiB,UACjBe,OAAQ,WACRN,QAAS,SACTN,aAAc,MACdmxC,SAAU,SACVzoC,UAAW,QAVD,wBAWD,QAXC,+BAYM,UAZN,2BAaE,UAbF,wBAcD,4BAdC,0BAeC,QAfD,uBAgBF,cAhBE,0BAiBC,gCAjBD,2BAkBE,QAlBF,cAmBT/I,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,QACPgB,UAAW,WArBH,GAyBZirE,kBAAmB,CACjB9iE,OAAQ,WAEV+iE,gBAAc,GACZnsE,OAAQ,OACRD,WACE,iFACF5G,OAAQ,WACRd,OAAQ,oBACRE,aAAc,MACdmxC,SAAU,SACV5vC,SAAU,WACViH,wBAAyB,EACzBb,QAAS,OACTksE,eAAgB,SAChBhsE,WAAY,SACZvH,QAAS,2BACTmN,UAAW,QAdC,uBAeJ,cAfI,uBAgBJ,gCAhBI,2BAiBA,QAjBA,cAkBX9N,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,QACPgB,UAAW,SACX9H,OAAQ,aArBE,GAyBdkzE,kBAAkB,aAChBriE,YAAa,OACb7Q,OAAQ,oBACRmzE,qBAAsB,EACtBvrE,wBAAyB,EACzBb,QAAS,OACTksE,eAAgB,SAChBhsE,WAAY,SACZvH,QAAS,2BACToH,MAAO,OACP+F,UAAW,OACXhG,OAAQ,aACR3H,OAAQ,+BACRk0E,WAAY,QACXr0E,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,QACPgB,UAAW,SACX9H,OAAQ,aAIZqzE,sBAAsB,aACpB9iC,SAAU,UACV4iC,qBAAsB,EACtBvrE,wBAAyB,EACzB5H,OAAQ,oBACRW,SAAU,WACVoG,QAAS,OACTksE,eAAgB,SAChBhsE,WAAY,SACZvH,QAAS,2BACTmN,UAAW,OACXhG,OAAQ,aACR1G,UAAW,+BACXizE,WAAY,QACXr0E,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,QACPgB,UAAW,SACX9H,OAAQ,aAIZszE,qBAAqB,aACnB/iC,SAAU,UACV4iC,qBAAsB,EACtBvrE,wBAAyB,EACzB5H,OAAQ,oBACRW,SAAU,YACT5B,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,QACPgB,UAAW,SACX9H,OAAQ,aAIZuzE,gBAAgB,aACdxsE,QAAS,OACTksE,eAAgB,SAChBhsE,WAAY,SACZvH,QAAS,2BACToH,MAAO,OACP+F,UAAW,OACXhG,OAAQ,aACRusE,WAAY,OACZnjE,OAAQ,UACRsgC,SAAU,UACV1/B,YAAa,OACbw8D,WAAY,OACZrtE,OAAQ,cACRZ,aAAc,EACduB,SAAU,YAET5B,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,QACPgB,UAAW,WAIf0rE,gBAAgB,aACdnG,WAAY,OACZrtE,OAAQ,oBACRZ,aAAc,MACdq0E,oBAAqB,EACrB5rE,uBAAwB,EACxBd,QAAS,OACTksE,eAAgB,SAChBhsE,WAAY,SACZvH,QAAS,2BACToH,MAAO,OACP+F,UAAW,OACXhG,OAAQ,aACR3H,OAAQ,+BACRk0E,WAAY,QACXr0E,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,QACPgB,UAAW,SACX9H,OAAQ,WACRN,QAAS,aACTN,aAAc,QAGlBs0E,oBAAoB,aAClBp0E,SAAS,QACTixC,SAAU,UACVnxC,aAAc,EACd+zE,qBAAsB,MACtBvrE,wBAAyB,MACzB1I,OAAO,MACPc,OAAQ,mBACRW,SAAU,WACVoG,QAAS,OACTksE,eAAgB,SAChBhsE,WAAY,SACZvH,QAAS,2BACTmN,UAAW,OACXhG,OAAQ,aACR1G,UAAW,+BACXizE,WAAY,QACXr0E,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,QACPgB,UAAW,SACX9H,OAAQ,WAERZ,aAAc,QAIlBu0E,cAAc,aACZ9sE,OAAQ,OACR3H,OAAQ,EACR0H,WAAY,QACZ5G,OAAQ,iBACPjB,EAAMQ,YAAYC,KAAK,MAAQ,CAE9BQ,OAAQ,aAGZ4zE,aAAa,aACX/sE,OAAQ,OACR0pC,SAAU,QACTxxC,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OACPypC,SAAU,YAIdnpC,OAAQ,CACNL,QAAS,OACTtG,UAAW,sBACXf,QAAS,UAEXyxE,WAAY,CACVpqE,QAAS,OACTE,WAAY,SACZvH,QAAS,iBACTe,UAAW,uBAEb2wE,gBAAiB,CACfrxE,MAAO,WAETsxE,SAAU,CACRzxE,SAAU,OACVG,MAAO,WAETuxE,YAAa,CACXjE,WAAY,oBACZjuE,aAAc,EACdW,MAAO,UACP0H,WAAY,MACZ08B,YAAa,QAEfotC,aAAc,CACZxqE,QAAS,OACTE,WAAY,SACZk9B,YAAa,QAEfxL,OAAQ,CACNz5B,OAAQ,oBACRE,aAAc,MACdM,QAAS,YAEX8xE,WAAY,CACVzxE,MAAO,UACPD,WAAY,QAEd4pB,MAAO,CACL3iB,QAAS,OACTE,WAAY,SACZQ,WAAY,QAEdgqE,UAAW,CACT7xE,SAAU,OACVV,OAAQ,iBACRE,aAAc,OACdM,QAAS,MACTuQ,OAAQ,WAEVyhE,WAAY,CACV1xE,OAAQ,UAEV4I,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,mBAEV0B,cAAe,CACb5H,SAAU,SAGZkzE,aAAc,CACZtzE,YAAa,SACbuG,MAAO,SACPD,OAAQ,SACRzH,aAAc,MACdmxC,SAAU,SACVujC,WAAY,GAGdC,iBAAiB,CACf/zE,OAAQ,EACRN,QAAS,EACTE,SAAU,UACVC,WAAY,WACZE,MAAO,kBACP4yE,aAAc,WACd5rE,QAAS,eACTzH,SAAU,QACVwH,MAAO,OACPqJ,WAAY,SACZogC,SAAU,SACVzoC,UAAW,OACXhI,WAAY,OAGdk0E,mBAAmB,CACnBh0E,OAAQ,EACRN,QAAS,EACTE,SAAU,WACVqJ,cAAe,QACfpJ,WAAY,UACZE,MAAO,qBACP4yE,aAAc,WACd5rE,QAAS,eACTzH,SAAU,QACVwH,MAAO,OACPqJ,WAAY,SACZogC,SAAU,SACVzoC,UAAW,QAEXmsE,aAAa,CACXltE,QAAS,OACTG,cAAc,SACdY,UAAW,SACXd,eAAgB,UAGlBktE,sBAAoB,GAClBntE,QAAS,OACTC,eAAgB,gBAChBH,OAAQ,OACR9G,MAAO,OACPd,gBAAiB,UACjBe,OAAQ,WACRN,QAAS,SACTN,aAAc,MACdmxC,SAAU,SACVzoC,UAAW,QAVO,wBAWT,QAXS,+BAYF,UAZE,2BAaN,UAbM,wBAcT,4BAdS,0BAeP,QAfO,uBAgBV,cAhBU,0BAiBP,gCAjBO,2BAkBN,QAlBM,cAmBjB/I,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,QACPgB,UAAW,WArBK,GAwBpBqsE,wBAAsB,GACpBttE,OAAQ,OACRD,WACE,iFACF5G,OAAQ,WACRd,OAAQ,oBACRE,aAAc,MACdmxC,SAAU,SACV5vC,SAAU,WACViH,wBAAyB,EACzBb,QAAS,OACTksE,eAAgB,SAChBhsE,WAAY,SACZvH,QAAS,2BACTmN,UAAW,QAdS,uBAeZ,cAfY,uBAgBZ,gCAhBY,2BAiBR,QAjBQ,cAkBnB9N,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,QACPgB,UAAW,WApBO,GAuBtBssE,UAAW,CACTx0E,SAAU,OACVG,MAAO,QACPD,WAAY,MACZ0I,OAAQ,IACRmqE,aAAc,WACdpiC,SAAU,SACVxpC,QAAS,cACT,qBAAsB,IACtB,qBAAsB,gBCncpBstE,GAAsB,SAACC,EAAgBC,EAAWC,GACtD,IAAMv4D,EAAYq4D,EAAer4D,UAC3BC,EAAUo4D,EAAep4D,QACzBu4D,EAAYF,EAAU9xD,KACtBiyD,EAAWh6D,KAAO65D,EAAUlsD,IAAK,QAAQxC,OAAO,OAEtD,OAAI5J,GAAaC,EAEbxB,KAAO+5D,GAAW/uD,UAAUzJ,EAAWC,EAAS,MAAO,OACvDs4D,EAAcE,GAIdz4D,EAEAvB,KAAO+5D,GAAWjvD,cAAcvJ,EAAW,QAC3Cu4D,EAAcE,GAIdx4D,EAEAxB,KAAO+5D,GAAW39C,eAAe5a,EAAS,QAC1Cs4D,EAAcE,QAHlB,GAQIC,GAAe,SAAC,GAAgD,IAA9Ch4B,EAA6C,EAA7CA,mBAAoBq0B,EAAyB,EAAzBA,UAAWj9D,EAAc,EAAdA,QAC/C1S,EAAUxC,KAEhB,OAAK89C,GAAuBA,EAAmB/4C,OAG7C,yBAAK7B,UAAWV,EAAQuyE,cAAxB,OACGj3B,QADH,IACGA,OADH,EACGA,EAAoBjrC,KAAI,SAAAs4C,GAAO,OAC9B,yBAAKtwC,IAAKswC,EAAQ9nD,IAChB,yBACEH,UAAWsG,KACThH,EAAQixE,WACRjxE,EAAQkxE,sBAGV,kBAACqC,GAAA,EAAD,CAAS30E,MAAK,UAAK+pD,EAAQpuC,YAAb,mBAA8BouC,EAAQ/pD,OAAS40E,OAAK,GAChE,kBAAC1sE,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQqxE,cAC5C1oB,EAAQpuC,YADX,WAC2BouC,EAAQ/pD,SAKvC,kBAAC,GAAD,CACE+pD,QAASA,EACT3f,WAAY2f,EAAQ3f,WACpB2mC,UAAWA,EACXj9D,QAASA,SAvB2C,MA+B1D+gE,GAAa,SAAC,GAAiD,IAA/C3hC,EAA8C,EAA9CA,SAAU55B,EAAoC,EAApCA,YAAaywC,EAAuB,EAAvBA,QAASj2C,EAAc,EAAdA,QAC9C1S,EAAUxC,KADkD,EAEtDyC,cAALC,EAF2D,oBAG5D4B,EAAU+P,IAAMsX,WAAW/mB,GACzBuQ,EAAoBC,wBAApBD,gBAJ0D,EAMjCN,YAAY04C,IAAtC2oB,EAN2D,sBAQ1C7hE,IAAMrQ,UAAS,GAR2B,mBAQ3D7B,EAR2D,KAQrDwzB,EARqD,OASxBthB,IAAMrQ,SAAS,IATS,mBAS3D8gE,EAT2D,KAS5CL,EAT4C,KAkClE,OAAInwB,EAEA,oCACE,kBAAChrC,EAAA,EAAD,CACE1F,QAAQ,QACRT,QAAS,WACPshE,EAAiBnwB,GACjB3e,GAAQ,IAEVzyB,UAAWsG,KACThH,EAAQ6yE,qBACR7yE,EAAQ0xE,oBAGV,8BACGppB,GAAexW,EAAS9lB,QAD3B,IACqC8lB,EAASlzB,iBAE7CkzB,EAAS0f,WAAa,oCAGzB,kBAAC,GAAD,CACE1f,SAAUwwB,EACVziE,QAAS,SAAA8zE,GACPxgD,GAAQ,GACiB,mBAAdwgD,GAA2BA,GAAWjhE,KAEnD/S,KAAMA,EACNG,SAlD4B,SAAA0R,GAAS,IAAD,EACpCo6C,EAAgB,UAAGp6C,EAAKs0B,oBAAR,aAAG,EACvBz1B,KAAI,SAAAs4C,GACJ,OAAOvlD,SAASulD,EAAQ9nD,OAE1BiB,EAAQ,CACNlD,MAAM,GAAD,OAAKsB,EAAE,yBAAP,KACLC,YAAY,aAAD,OAAeqR,EAAK5S,MAApB,mBAA+B4S,EAAK+I,aAC/Cla,iBAAkBH,EAAE,yBACpBI,iBAAkBJ,EAAE,UACnB0T,MAAK,kBACN8/D,EAAuB,CACrB//D,UAAW,CAAEo4C,IAAKH,KACjBh4C,MAAK,WACNuf,GAAQ,GACRxgB,EAAgBzS,EAAE,uCAAwC,CACxDkB,QAAS,YAEXsR,cAsCFwF,EAEA,kBAACpR,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ6yE,sBAC7C,mCAASlqB,EAAQ/pC,iBAChB+pC,EAAQ6I,WAAa,oCAM1B,kBAAC1qD,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ8yE,wBAC5C,MAKDc,GAAgB,SAAC,GAOhB,IANLjE,EAMI,EANJA,UACA3mC,EAKI,EALJA,WACAT,EAII,EAJJA,SACAztB,EAGI,EAHJA,KACA6tC,EAEI,EAFJA,QACAj2C,EACI,EADJA,QAEM1S,EAAUxC,KAEhB,OACE,yBACEkD,UAAWsG,KAAWhH,EAAQixE,WAAYjxE,EAAQwxE,yBAElD,kBAAC1qE,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQuxE,aAA/C,kBAHF,OAMG5B,QANH,IAMGA,OANH,EAMGA,EAAWt/D,KAAI,SAACmB,EAAMjB,GACrB,IAAMsjE,EACJ7qC,GACAA,EAAWprB,QAAO,SAAAk0B,GAChB,IAAMG,EAAe54B,KAAOy4B,EAASG,aAAc,cAEnD,GAAIH,EAASiF,WAAY,CACvB,IAAMA,EAAa19B,KAAOy4B,EAASiF,WAAY,cAC/C,OAAIvlC,EAAK4P,KAAKiD,UAAU4tB,EAAc8E,EAAY,OAAQ,MACjDjF,EAEF,KAIT,OADoBz4B,KAAO44B,GAAc5wB,OAAO7P,EAAK4P,KAAM,OACnC0wB,EACjB,QAGLA,EACF+hC,GAAmBA,EAAgBtxE,OAArC,eACSsxE,EAAgB,IACrB,KAEF/hC,IACFA,EAAS9lB,OAAS,GAClB8lB,EAAShM,aAAe,GACxB+tC,EAAgBl7C,SAAQ,SAAAm7C,GAAkB,IAAD,GACvC,EAAAhiC,EAAS9lB,QAAO/V,KAAhB,oBAAwB69D,EAAc9nD,SACtC8lB,EAAShM,aAAa7vB,KAAK69D,OAI/B,IAAM57D,GACH45B,GAAYkhC,GAAoBzqC,EAAS5tB,aAAcnJ,EAAMsJ,GAEhE,OACE,yBACEzC,IAAK9H,EACL7P,UAAWsG,KAAWhH,EAAQgf,OAAQhf,EAAQyxE,qBAE9C,kBAAC,GAAD,CACE3/B,SAAUA,EACV55B,YAAaA,EACbywC,QAASA,EACTj2C,QAASA,UASjBqhE,GAAY,SAAC,GAAqC,IA2Bf,EA3BpBprB,EAAkC,EAAlCA,QAASgnB,EAAyB,EAAzBA,UAAWj9D,EAAc,EAAdA,QACjC1S,EAAUxC,KACVwrC,EAAU,OAAG2f,QAAH,IAAGA,OAAH,EAAGA,EAAS3f,WACtBT,EAAWogB,EAAQpgB,SAWzB,MAVkC,qBAAvBA,EAASrtB,YAClBqtB,EAASrtB,UAAY,IAIW,qBAAvBytC,EAAQ3f,aAEf2f,EAAQ3f,WAAY,IAGlBT,EAASztB,KAEX,kBAAC,GAAD,CACE60D,UAAWA,EACX3mC,WAAYA,EACZT,SAAUA,EACVztB,KAAMytB,EAASztB,KACf6tC,QAASA,EACTj2C,QAASA,IAKX4W,MAAMC,QAAQgf,EAASrtB,WAEvB,8CACGqtB,EAASrtB,iBADZ,aACG,EAAoB7K,KAAI,SAAC2W,EAAKzW,GAC7B,IAAM6K,EAAuB4L,EAAI5L,sBAAwB,GACzD,OAAKA,EAAqB7Y,OAexB,yBAAK8V,IAAK9H,GACP6K,EAAqB/K,KAAI,SAAC2oB,EAAMzoB,GAC/B,IAAMyjE,EAAM,UAAM36D,KAAO2f,EAAK3d,WAAWmJ,OAAO,SAApC,YAAgDwU,EAAK1d,SAArD,YAAiE0d,EAAKzd,UAClF,OACE,yBACElD,IAAK9H,EACL7P,UAAWsG,KACThH,EAAQixE,WACRjxE,EAAQwxE,yBAGV,kBAAC1qE,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQuxE,aAC5Cl4D,KAAO2f,EAAK3d,WAAWmJ,OAAO,SADjC,WAC8CwU,EAAK1d,SADnD,IAC8D0d,EAAKzd,UAElEo0D,EAAUt/D,KAAI,SAACmB,EAAMjB,GACpB,IAAMuhC,EAAQ,OAAG9I,QAAH,IAAGA,OAAH,EAAGA,EAAYz1B,MAAK,SAAAu+B,GAChC,IAAKA,IAAavJ,EAAS1nC,GACzB,OAAO,EAET,IAAMoxC,EAAe54B,KAAOy4B,EAASG,aAAc,cAEnD,OADmB54B,KAAO44B,GAAc5wB,OAAO7P,EAAK4P,KAAM,QACrC0wB,EAASvJ,SAAS1nC,KAAOmzE,KAE1C97D,GAAe45B,GAAYkhC,GAAoBzqC,EAAS5tB,aAAcnJ,EAAMwV,EAAIlM,MACtF,OACE,yBACEzC,IAAK9H,EACL7P,UAAWsG,KACThH,EAAQgf,OACRhf,EAAQyxE,qBAGV,kBAAC,GAAD,CACE9oB,QAASA,EACT7W,SAAUA,EACV55B,YAAaA,EACbxF,QAASA,aAjDvB,yBAAK2F,IAAK9H,GACR,kBAAC,GAAD,CACEo/D,UAAWA,EACX3mC,WAAYA,EACZT,SAAUA,EACVztB,KAAMkM,EAAIlM,KACV6tC,QAASA,EACTj2C,QAASA,SAyDlB,MAgFMrB,gBAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EA9EoB,SAAC,GAAuB,IAArBtN,EAAoB,EAApBA,cAC9B/D,EAAUxC,KADwC,EAGpBqU,IAAMrQ,SAAS,CACjDoZ,UAAWvB,OAAS0L,QAAQ,WAC5BlK,QAASxB,OAAS2L,MAAM,aAL8B,mBAGjDqrD,EAHiD,KAGrC4D,EAHqC,OAOJpiE,IAAMrQ,SAAS,MAPX,mBAOjD85C,EAPiD,KAO7B44B,EAP6B,OAQtBriE,IAAMrQ,SACtCuvE,GAAaV,EAAWz1D,UAAWy1D,EAAWx1D,UATQ,mBAQjD80D,EARiD,KAQtCwE,EARsC,OAWhB3yE,mBAAS,MAXO,mBAWjDuyB,EAXiD,KAWnC28C,EAXmC,OAarBl+D,YAASsyB,GAA0B,CACpEwL,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACT68B,YAAan3B,KAAOg3D,EAAWz1D,WAAW4J,OAAO,cACjDisB,UAAWp3B,KAAOg3D,EAAWx1D,SAAS2J,OAAO,cAC7C4O,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,MARlCyyB,EAbgD,EAahDA,QAASljB,EAbuC,EAavCA,KAAMsC,EAbiC,EAajCA,QAYvBb,IAAM+C,WAAU,WACTxE,IAEL+jE,EAAapD,GAAaV,EAAWz1D,UAAWy1D,EAAWx1D,UAC3Dq5D,E7HrGyC,SAAAlrC,GAC3C,IAAMorC,EAAW,GACX94B,EAAqB,GA0H3B,OAxHAtS,EAAW34B,KAAI,SAAAmB,GACb,GAA0B,qBAAtBA,EAAKq4B,aAET,GAAIr4B,EAAK6iE,0BAA0B9xE,OACjC+4C,EAAmBrlC,KAAnB,MAAAqlC,EAAkB,YAAS9pC,EAAK6iE,gCAC3B,CACL,IAAM9rC,EAAWC,GAAYh3B,GAC7B8pC,EAAmBrlC,KAAK,CACtBpV,GAAI2Q,EAAK3Q,GACTjC,MAAO4S,EAAK5S,MACZ2b,YAAa/I,EAAK+I,YAClBsvB,aAAcr4B,EAAKq4B,aACnBtB,SAAUA,EAAS7qB,OAAOC,KAAK4qB,GAAU,IACzC3pB,gBAAiBpN,EAAKoN,gBACtB4yC,UAAWhgD,EAAKggD,UAChB8iB,mBAAmB,QAKzBh5B,EAAmBjrC,KAAI,SAAAmB,GACrB,GAAIA,EAAK8iE,kBAAT,CACE,GAA0B,qBAAtB9iE,EAAKq4B,aAAqC,OAC9CuqC,EAASn+D,KAAKzE,QAIhB,GAAKA,EAAKygC,aAAV,CAEA,IAAMsiC,EAAsBH,EAASl/D,WACnC,SAAAyzC,GAAO,OACLA,EAAQ3f,YACR2f,EAAQ3f,WAAWz1B,MACjB,SAAAu+B,GAAQ,OAAIA,EAASA,SAASjxC,KAAO2Q,EAAKsgC,SAASjxC,SAGnD2zE,EAAe58B,GAAoBpmC,EAAK+2B,UAE9C,GAAIgsC,GAAuB,EAAG,CAC5B,IA+BmC,EA/B7BE,EAAoBL,EAASG,GAAqBvrC,WAElD0rC,EAA2BD,EAAkBv/D,WAAU,SAAA48B,GAC3D,QAAK0iC,IACA1iC,EAASvJ,WAkBZuJ,EAASG,eAAiBzgC,EAAKygC,eAC/BuiC,EAAan5D,WACby2B,EAASvJ,SAAS1nC,KAAO2zE,EAAan5D,UAAUxa,KAEzCixC,EApBLA,EAASG,eAAiBzgC,EAAKygC,cAC9BH,EAASiF,YACTvlC,EAAKulC,WAMNjF,EAASG,eAAiBzgC,EAAKygC,cAC/BH,EAASiF,aAAevlC,EAAKulC,YAEtBjF,EAPAA,MAqBb,OAAI4iC,GAA4B,GAC9BD,EAAkBC,GAA0B5uC,aAAa7vB,KAAKzE,QAC9D,EAAAijE,EAAkBC,GAA0B1oD,QAAO/V,KAAnD,oBAA2DzE,EAAKwa,eAIlEyoD,EAAkBx+D,KAAlB,eACKzE,EAAKsgC,SADV,GAEKtgC,EAFL,CAGEsgC,SAAS,eAAMtgC,EAAKsgC,UACpBG,aAAczgC,EAAKygC,aACnB1J,SAAUisC,EAAeA,EAAan5D,UAAY,GAClDyqB,aAAc,CAACt0B,GACfwa,OAAO,YAAKxa,EAAKwa,QACjB+rB,SAAS,YAAKvmC,EAAKumC,UACnBW,aAAa,YAAKlnC,EAAKknC,iBAM3B,IAAMnQ,EAAWC,GAAYh3B,EAAKsgC,UAElCsiC,EAASn+D,KAAK,CACZpV,GAAI2Q,EAAK3Q,GACTjC,MAAO4S,EAAKsgC,SAASlzC,MACrBktD,aAAct6C,EAAKsgC,SAASga,aAC5BvxC,YAAa/I,EAAKsgC,SAASv3B,YAC3BqE,gBAAiBpN,EAAKsgC,SAASlzB,gBAC/B4yC,UAAWhgD,EAAKsgC,SAAS0f,UACzB/vB,OAAQjwB,EAAKsgC,SAASrQ,OACtBqQ,SAAS,eAAMtgC,EAAKsgC,UACpBvJ,SAAUA,EAAS7qB,OAAOC,KAAK4qB,GAAU,IACzCS,WAAY,CAAC,eAENx3B,EAAKsgC,SAFA,GAGLtgC,EAHK,CAIRsgC,SAAS,eAAMtgC,EAAKsgC,UACpBG,aAAczgC,EAAKygC,aACnB1J,SAAUisC,EAAeA,EAAan5D,UAAY,GAClDyqB,aAAc,CAACt0B,GACfwa,OAAO,YAAKxa,EAAKwa,QACjB+rB,SAAS,YAAKvmC,EAAKumC,UACnBW,aAAa,YAAKlnC,EAAKknC,uBAOxB07B,E6HvBiBO,CAA8BvkE,EAAK44B,gBACxD,CAAC54B,IAMJ,OACE,yBAAK1P,UAAWV,EAAQ2X,SACtB,kBAAC,GAAD,MAEA,kBAAC,GAAD,CACErQ,UAAWgsB,EACX/rB,gBAAiBvH,EAAQuH,gBACzB7G,UAAWV,EAAQkH,gBAGrB,kBAAC,GAAD,CACE0T,UAAWy1D,EAAWz1D,UACtBC,QAASw1D,EAAWx1D,QACpB41D,mBAjBa,SAAApoD,GACjB4rD,EAAc5rD,IAiBV80C,SAhXqB,EAiXrBppC,aAAcA,EACd28C,gBAAiBA,IAGnB,yBAAKhwE,UAAWV,EAAQgxE,iBACtB,kBAAC,GAAD,CACErB,UAAWA,EACX/wE,MAAM,aACNm1B,aAAcA,IAIZ,kBAAC,GAAD,CACEunB,mBAAoBA,EACpBq0B,UAAWA,EACXj9D,QAASA,SCpYjBkiE,GAA0B,SAACjsB,EAAS3hC,GACxC,IAAM6tD,EACJlsB,EAAQxgC,UAAY9O,KAAOsvC,EAAQxgC,SAAU,cACzC2sD,EAAiBnsB,EAAQvgC,QAAU/O,KAAOsvC,EAAQvgC,OAAQ,cAChE,OAAIysD,GAAmBC,GACbz7D,KAAO2N,EAAI5F,MAAMiD,UACvBwwD,EACAC,EACA,MACA,MAGAD,GACMx7D,KAAO2N,EAAI5F,MAAM+C,cAAc0wD,EAAiB,QAEtDC,IACMz7D,KAAO2N,EAAI5F,MAAMqU,eAAeq/C,EAAgB,QAKtDxB,GAAe,SAAC,GAAqD,IAAnDxyB,EAAkD,EAAlDA,uBAAwB6uB,EAA0B,EAA1BA,UAAWj9D,EAAe,EAAfA,QACnD1S,EAAUxC,KACVmU,EAAUC,cAEhB,OAAKkvC,GAA2BA,EAAuBv+C,OAErD,yBAAK7B,UAAWV,EAAQuyE,cACrBzxB,EAAuBzwC,KAAI,SAACs4C,GAC3B,OACE,yBACEtwC,IAAKswC,EAAQ9nD,GACbH,UAAWsG,KACThH,EAAQixE,WACRjxE,EAAQoxE,qCAGV,yBAAK1wE,UAAWV,EAAQmxE,mBACxB,kBAACoC,GAAA,EAAD,CAAS30E,MAAK,iBAAK+pD,QAAL,IAAKA,OAAL,EAAKA,EAASpuC,YAAd,qBAA+BouC,QAA/B,IAA+BA,OAA/B,EAA+BA,EAAS/pD,OAAS40E,OAAK,GAC1D,kBAAC1sE,EAAA,EAAD,CACE1F,QAAQ,QACRV,UAAWV,EAAQqxE,aACnB1wE,QAAS,WACPgR,EAAQsE,KAAR,0BAAgC0yC,EAAQ9nD,OAIxC,yBACE8F,IAAG,OAAEgiD,QAAF,IAAEA,OAAF,EAAEA,EAAS/hB,MACd//B,IAAI,eACJnG,UAAWV,EAAQwyE,eAIvB,0BAAMpxE,QAAQ,QAAQV,UAAWV,EAAQ4yE,cACvC,0BAAMlyE,UAAWV,EAAQ0yE,kBAAzB,OAA4C/pB,QAA5C,IAA4CA,OAA5C,EAA4CA,EAAS/pD,OACrD,0BAAM8B,UAAWV,EAAQ2yE,oBAAzB,OACGhqB,QADH,IACGA,OADH,EACGA,EAASpuC,iBAO1B,kBAAC,GAAD,CACEouC,QAASA,EACTgnB,UAAWA,EACXj9D,QAASA,SA1CiD,MAmDlEqiE,GAA2B,SAAC,GAA4B,IAA1BpF,EAAyB,EAAzBA,UAAWhnB,EAAc,EAAdA,QACvC3oD,EAAUxC,KACZw3E,GAAS,EACTC,GAAa,EAEjB,OACE,yBAAKv0E,UAAWV,EAAQuvE,eACrBI,EAAUt/D,KAAI,SAACmB,EAAMjB,GACpB,IAAM2kE,EAAaN,GAAwBjsB,EAASn3C,GAC9C2jE,EAAexF,EAAUp/D,EAAQ,GACjC6kE,IAAyBD,GAC3BP,GAAwBjsB,EAASwsB,GAE/BE,EAAW1F,EAAUp/D,EAAQ,GAC7B+kE,GAAqBD,GACvBT,GAAwBjsB,EAAS0sB,GAG/BE,EAAUP,GAAUE,GAAcI,EAClCE,EACJP,IACCM,GACDD,GACA/kE,GACAA,EAAQo/D,EAAUptE,OAAS,EACvBkzE,EACJR,IAAeM,IAAYC,GAASJ,EAOtC,OALIF,IACFF,GAAS,EACTC,GAAa,GAIb,yBACE58D,IAAK9H,EACL7P,UAAWsG,KAAWhH,EAAQgf,OAAQhf,EAAQyxE,qBAE9C,kBAAC3qE,EAAA,EAAD,CACE1F,QAAQ,QACRV,UAAWsG,KACThH,EAAQ2xE,eADW,eAEhB3xE,EAAQ6xE,kBAAoB0D,GAFZ,eAIhBv1E,EAAQkyE,gBAAkBsD,GAJV,eAMhBx1E,EAAQmyE,gBAAkBsD,GANV,eAOhBz1E,EAAQsyE,eAAiB4C,KAG7B,WASTQ,GAAoB,SAAC,GAAqC,IAAnC/sB,EAAkC,EAAlCA,QAASgnB,EAAyB,EAAzBA,UAAWj9D,EAAc,EAAdA,QACzC1S,EAAUxC,KAEVyqB,EAAiB0gC,EAAQ1gC,eAH8B,EAIrCpW,IAAMrQ,UAAS,GAJsB,mBAItD7B,EAJsD,KAIhDwzB,EAJgD,OAKnBthB,IAAMrQ,SAAS,IALI,mBAKtD8gE,EALsD,KAKvCL,EALuC,OAMXpwD,IAAMrQ,SAAS,IANJ,mBAMtDm0E,EANsD,KAMnCC,EANmC,KAsB7D,OAVAhhE,qBAAU,WACR,GAAIqT,EAAgB,CAClB,IAAM4tD,EAAuB,GAC7B5tD,EAAe0Q,SAAQ,SAAAnQ,GACrBqtD,EAAqBrtD,EAAc3nB,IAAM2nB,EAAc9pB,SAEzDk3E,EAAqBC,MAEtB,CAAC5tD,IAECA,EAKH,yBAAKvnB,UAAWV,EAAQuvE,eACrBI,EAAUt/D,KAAI,SAACmB,EAAMjB,GACpB,IA+DsBulE,EA/DhBC,EAAYpG,EAAUptE,OAAS,EAE/B2yE,EAAaN,GAAwBjsB,EAASn3C,GAC9C2jE,EAAexF,EAAUp/D,EAAQ,GACjC6kE,IAAyBD,GAC3BP,GAAwBjsB,EAASwsB,GAE/BE,EAAW1F,EAAUp/D,EAAQ,GAC7B+kE,GAAqBD,GACvBT,GAAwBjsB,EAAS0sB,GAG/BW,EAAc/tD,EAAe1U,MAAK,SAAAiV,GACtC,OAAOnP,KAAOmP,EAAcL,SAAU,cAAc9G,OAClD7P,EAAK4P,KACL,UAGE60D,EAAYhuD,EAAe1U,MAAK,SAAAiV,GACpC,OAAOnP,KAAOmP,EAAcJ,OAAQ,cAAc/G,OAChD7P,EAAK4P,KACL,UAGE80D,GACHF,IACAC,GACDhuD,EAAe1U,MAAK,SAAAiV,GAClB,IAAML,EAAW9O,KAAOmP,EAAcL,SAAU,cAC1CC,EAAS/O,KAAOmP,EAAcJ,OAAQ,cAC5C,OAAO/O,KAAO7H,EAAK4P,MAAMiD,UAAU8D,EAAUC,EAAQ,MAAO,SAE1D+tD,EAAaH,GAAeC,EAC5BztD,EAAgBwtD,GAAeE,GAAaD,EAE5CG,GACH5tD,GACDmnD,EAAUp/D,EAAQ,IAClB0X,EAAe1U,MAAK,SAAAiV,GAClB,OAAOnP,KAAOmP,EAAcL,SAAU,cAAc9G,OAClDsuD,EAAUp/D,EAAQ,GAAG6Q,KACrB,UAIAi1D,GACH7tD,GACDmnD,EAAUp/D,EAAQ,IAClB0X,EAAe1U,MAAK,SAAAiV,GAClB,OAAOnP,KAAOmP,EAAcJ,OAAQ,cAAc/G,OAChDsuD,EAAUp/D,EAAQ,GAAG6Q,KACrB,UAyBAk1D,EAAmB9tD,EAAgBmtD,EAAkBntD,EAAc3nB,IAAM,KACzE01E,GAdgBT,EAcSQ,KANL,IALdlzE,SAAS0yE,EAAQU,UAAU,EAAG,GAAI,IAKV,IAJxBpzE,SAAS0yE,EAAQU,UAAU,EAAG,GAAI,IAIA,IAHlCpzE,SAAS0yE,EAAQU,UAAU,EAAG,GAAI,KAGO,IAE/B,IAAM,OATL,OAgBvB,OACE,yBACEn+D,IAAK9H,EACL7P,UAAWsG,KAAWhH,EAAQgf,OAAQhf,EAAQyxE,qBAE7CuE,GAAeE,GAAaD,EAC3B,kBAACnvE,EAAA,EAAD,CACE1F,QAAQ,QACRT,QAAS,kBAjCE,SAAA6nB,GACjB2K,GAAQ,GACR8uC,EAAiB,eACZz5C,EADW,CAEd3nB,GAAI2nB,EAAc3nB,MA6BC41E,CAAWjuD,IAC1B9nB,UAAWsG,KACThH,EAAQ8lC,aACR9lC,EAAQ0xE,kBAFW,eAIhB1xE,EAAQgyE,sBAAwBgE,IAAgBG,GAJhC,eAMhBn2E,EAAQiyE,qBAAuBkE,GANf,eAOhBn2E,EAAQkyE,gBAAkBgE,GAPV,eAQhBl2E,EAAQqyE,oBAAsB4D,IAAcE,IAEjD3tE,MAAO,CAAE5K,gBAAiB04E,KAE1BN,IAAgBzlE,IAChB,0BACA7P,UAAWsG,KACThH,EAAQ+yE,WAEVvqE,MAAO,CAAE9J,MAAO63E,IAJhB,UAMMjuB,GAAe9/B,EAAcwD,QANnC,YAOIxD,EAAc4jB,cAElB,6BACQ5jB,EAAc2vB,eAAkB,IAAM3vB,EAAc4vB,gBAM9D,kBAACtxC,EAAA,EAAD,CACE1F,QAAQ,QACRV,UAAWsG,KACThH,EAAQ2xE,eADW,eAGhB3xE,EAAQ6xE,mBACLuD,GACAE,GACA/kE,IAAUwlE,IACTK,GACFd,KACGc,IAAmBC,KACnBA,GAAoB9lE,IAAUwlE,IAC5BK,IAAmB7lE,IAXV,eAchBvQ,EAAQkyE,gBACPkD,GACAE,IACCe,IACAD,GACD7lE,GACAA,IAAUwlE,GApBK,eAuBhB/1E,EAAQmyE,iBACLmD,GACAF,IACCiB,GACFjB,KACGgB,IAAmBC,KACnBD,GAAkB7lE,IAChB8lE,GAAoB9lE,IAAUwlE,IA9BrB,eAgChB/1E,EAAQsyE,eAAiB4C,KAG7B,SAMX,kBAAC,GAAD,CACEpV,kBAAkB,EAClBjgE,QAzLU,WACdszB,GAAQ,GACRzgB,KAwLI/S,KAAMA,EACNgpD,QAAS2Z,EACTzC,aAAcjW,GAAiC0Y,GAC/C5D,cAAe,CAAE3rC,MAAOuR,IACxBy7B,cAAe,WACbrtD,IACAygB,GAAQ,OAhLP,kBAAC,GAAD,CAA0Bw8C,UAAWA,EAAWhnB,QAASA,KAwQrDt3C,gBAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EAjFwB,SAAC,GAAuB,IAAD,EAApBtN,EAAoB,EAApBA,cAClC/D,EAAUxC,KAD4C,EAGxBqU,IAAMrQ,SAAS,CACjDoZ,UAAWvB,OAAS0L,QAAQ,WAC5BlK,QAASxB,OAAS2L,MAAM,aALkC,mBAGrDqrD,EAHqD,KAGzC4D,EAHyC,OAOApiE,IAAMrQ,SAChE,MAR0D,mBAOrDs/C,EAPqD,KAO7B41B,EAP6B,OAU1B7kE,IAAMrQ,SACtCuvE,GAAaV,EAAWz1D,UAAWy1D,EAAWx1D,UAXY,mBAUrD80D,EAVqD,KAU1CwE,EAV0C,OAapB3yE,mBAAS,MAbW,mBAarDuyB,EAbqD,KAavC28C,EAbuC,OAezBl+D,YAAS8xB,GAA8B,CACxEgM,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACT68B,YAAan3B,KAAOg3D,EAAWz1D,WAAW4J,OAAO,cACjDisB,UAAWp3B,KAAOg3D,EAAWx1D,SAAS2J,OAAO,cAC7C4O,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,MARlCyyB,EAfoD,EAepDA,QAASljB,EAf2C,EAe3CA,KAAMsC,EAfqC,EAerCA,QAYvBb,IAAM+C,WAAU,WACTxE,IAEL+jE,EAAapD,GAAaV,EAAWz1D,UAAWy1D,EAAWx1D,UAC3D67D,E9HK6C,SAAAzuD,GAC/C,IAAMmsD,EAAW,GACXtzB,EAAyB,GA4F/B,OA1FA74B,EAAe5X,KAAI,SAAAmB,GACbA,EAAKk4D,sBAAsBnnE,OAC7Bu+C,EAAuB7qC,KAAvB,MAAA6qC,EAAsB,YAAStvC,EAAKk4D,wBAEpC5oB,EAAuB7qC,KAAK,CAC1BpV,GAAI2Q,EAAK3Q,GACTjC,MAAO4S,EAAK5S,MACZgoC,MAAMp1B,EAAKo1B,MACXrsB,YAAa/I,EAAK+I,YAClB4N,SAAU3W,EAAK2W,SACfC,OAAQ5W,EAAK4W,OACbksD,mBAAmB,OAKzBxzB,EAAuBzwC,KAAI,SAAAmB,GACzB,GAAIA,EAAK8iE,kBACPF,EAASn+D,KAAKzE,OADhB,CAIA,IAAM+iE,EAAsBH,EAASl/D,WACnC,SAAAyzC,GAAO,OACLA,EAAQ1gC,gBACR0gC,EAAQ1gC,eAAe1U,MACrB,SAAAiV,GAAa,OACXA,EAAcA,cAAc3nB,KAAO2Q,EAAKgX,cAAc3nB,SAG1D0zE,GAAuB,EACzBH,EAASG,GAAqBtsD,eAAehS,KAA7C,eACKzE,EAAKgX,cADV,CAEE3nB,GAAI2Q,EAAK3Q,GACTs3C,eAAgB3mC,EAAK2mC,eACrBC,cAAe5mC,EAAK4mC,cACpBE,iBAAkB9mC,EAAK8mC,iBACvBC,WAAW/mC,EAAK+mC,WAChBhT,SAAU/zB,EAAK+zB,SACf85B,aAAa7tD,EAAK6tD,aAClBiB,YAAa9uD,EAAK8uD,YAClBE,aAAchvD,EAAKgvD,aACnB3V,gBAAiBr5C,EAAKq5C,gBACtBriC,cAAc,eAAMhX,EAAKgX,eACzBL,SAAU3W,EAAK2W,SACfC,OAAQ5W,EAAK4W,OACb0gC,UAAWt3C,EAAKs3C,UAChB98B,OAAO,YAAKxa,EAAKwa,QACjB+rB,SAAS,YAAKvmC,EAAKumC,UACnBW,aAAa,YAAKlnC,EAAKknC,cACvBC,oBAAoB,YAAKnnC,EAAKmnC,qBAC9BE,0BAA0B,YAAKrnC,EAAKqnC,8BAKtCu7B,EAASn+D,KAAK,CACZpV,GAAI2Q,EAAKgX,cAAc3nB,GACvBjC,MAAO4S,EAAKgX,cAAc5pB,MAC1BgoC,MAAOp1B,EAAKgX,cAAcoe,MAC1BrsB,YAAa/I,EAAKgX,cAAcjO,YAChC4N,SAAU3W,EAAKgX,cAAcL,SAC7BC,OAAQ5W,EAAKgX,cAAcJ,OAC3BH,eAAgB,CAAC,eAEVzW,EAAKgX,cAFI,CAGZ3nB,GAAI2Q,EAAK3Q,GACT2nB,cAAc,eAAMhX,EAAKgX,eACzBL,SAAU3W,EAAK2W,SACfC,OAAQ5W,EAAK4W,OACb+vB,eAAgB3mC,EAAK2mC,eACrBC,cAAe5mC,EAAK4mC,cACpBE,iBAAkB9mC,EAAK8mC,iBACvBC,WAAW/mC,EAAK+mC,WAChBhT,SAAU/zB,EAAK+zB,SACf+6B,YAAa9uD,EAAK8uD,YAClBjB,aAAa7tD,EAAK6tD,aAClBmB,aAAchvD,EAAKgvD,aACnB3V,gBAAiBr5C,EAAKq5C,gBACtB/B,UAAWt3C,EAAKs3C,UAChB98B,OAAO,YAAKxa,EAAKwa,QACjB+rB,SAAS,YAAKvmC,EAAKumC,UACnBW,aAAa,YAAKlnC,EAAKknC,cACvBC,oBAAoB,YAAKnnC,EAAKmnC,qBAC9BE,0BAA0B,YAAKrnC,EAAKqnC,oCAOvCu7B,E8HlGHuC,CAAkCvmE,EAAK6X,oBAExC,CAAC7X,IAMJ,OACE,yBAAK1P,UAAWV,EAAQ2X,SACtB,kBAAC,GAAD,MAEA,kBAAC,GAAD,CACErQ,UAAWgsB,EACX/rB,gBAAiBvH,EAAQuH,gBACzB7G,UAAWV,EAAQkH,gBAGrB,kBAAC,GAAD,CACE0T,UAAWy1D,EAAWz1D,UACtBC,QAASw1D,EAAWx1D,QACpB41D,mBAjBa,SAAApoD,GACjB4rD,EAAc5rD,IAiBV80C,SA7YwB,EA8YxBppC,aAAcA,EACd28C,gBAAiBA,IAGnB,yBAAKhwE,UAAWV,EAAQgxE,iBACtB,kBAAC,GAAD,CACErB,UAAWA,EACX/wE,MAAM,iBACNm1B,aAAcA,IAGhB,kBAAC,GAAD,CACE+sB,uBAAwBA,EACxB6uB,UAAWA,EACXj9D,QAASA,EACT8V,cAAa,OAAEpY,QAAF,IAAEA,OAAF,YAAEA,EAAM6X,sBAAR,aAAE,EAAuB,U,8lGCvbzC,IAAM2uD,GAAWrqE,KAAH,MAqBRsqE,GAA0BtqE,KAAH,MAqFvBuqE,GAAsBvqE,KAAH,MCGjB/O,GA7GGC,aAAW,SAAAC,GAAK,MAAI,CACpCuZ,UAAW,CACTzR,OAAQ,OACRC,MAAO,OACPC,QAAS,OACTG,cAAe,SACfF,eAAgB,gBAChBupC,SAAU,SACVrxC,OAAQ,oBACRE,aAAc,OAEhB87D,UAAW,CACTt7D,SAAU,OACVV,OAAQ,OACRa,MAAO,UACPL,QAAS,GAEXu7D,MAAM,aACJn0D,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BgxC,UAAW,OACXlP,SAAU,SACVv6B,QAAS,QACTD,MAAO,SAGXs4C,WAAY,CACV1/C,QAAS,mBACT,UAAW,CACTT,gBAAiB,gBAGrBq/B,QAAS,CACPv+B,MAAO,UACPD,WAAY,OACZF,SAAU,OACVy4B,WAAY,YACZrvB,cAAe,aAEjBqyD,SAAU,CACRv0D,MAAO,QACPhH,WAAY,OACZqkC,YAAa,OACb1zB,aAAc,QAEhBiyD,cAAe,CACb57D,MAAO,QACPq9B,YAAa,QAEfs3B,WAAY,CACV30D,MAAO,QACPhH,WAAY,OACZqkC,YAAa,OACb1zB,aAAc,QAEhByyD,WAAY,CACVp8D,MAAO,QACPhH,WAAY,OACZqkC,YAAa,OACb1zB,aAAc,QAEhB0yD,UAAW,CACTr8D,MAAO,QACPhH,WAAY,OACZqkC,YAAa,OACb1zB,aAAc,QAEhBkyD,SAAU,CACR17D,WAAY,SACZH,MAAO,QACPq9B,YAAa,OACbj0B,SAAU,aACVO,aAAc,QAEhB3P,UAAW,CACTlB,SAAU,QAEZw4E,oBAAqB,CACnBtxE,MAAO,QACPq9B,YAAa,OACb1zB,aAAc,QAEhBkrD,SAAU,CACR1rD,OAAQ,UACR,UAAW,CACThR,gBAAiB,YAGrB0tB,KAAM,CACJjtB,QAAS,OACTM,OAAQ,IACRJ,SAAU,OACVG,MAAO,WAETqjE,aAAc,CACZziE,SAAU,WACV,WAAY,CACV0G,QAAS,KACT1G,SAAU,WACVC,IAAK,EACL6gB,KAAM,EACN5a,OAAQ,OACRC,MAAO,OACPF,WAAY,QACZkqB,QAAS,SC+TAunD,OAhVf,YAA8D,IAA5B3jD,EAA2B,EAA3BA,QAAS4jD,EAAkB,EAAlBA,eACnCj3E,EAAUxC,KACVmU,EAAUC,cAF2C,EAG/C3R,cAALC,EAHoD,sBAKnC2R,IAAMrQ,UAAS,GALoB,mBAKpD7B,EALoD,KAK9CwzB,EAL8C,OAMjCthB,IAAMrQ,SAAS,OANkB,mBAMpD+7B,EANoD,KAM7CglC,EAN6C,OAO7B1wD,IAAMrQ,SAAS,sBAPc,mBAOpDghE,EAPoD,KAO3CC,EAP2C,OASjB5wD,IAAMrQ,SAAS,IATE,mBASpD8gE,EAToD,KASrCL,EATqC,KAUnDtvD,EAAoBC,wBAApBD,gBAVmD,EAYjCH,YAASqkE,GAAyB,CAC1DljE,UAAW,CACTyf,gBAAiBC,EACjBmvC,QAAmB,QAAVjlC,EAAkBilC,EAAlB,WAAgCA,GACzC0U,oBAAqBD,GAEvB3mC,YAAa,WACbC,6BAA6B,IAPvBngC,EAZmD,EAYnDA,KAAMsC,EAZ6C,EAY7CA,QAUR5Q,EAAU+P,IAAMsX,WAAW/mB,GAtB0B,EAuBtBiQ,YACnC24C,IADK8N,EAvBoD,oBAyCrD6J,EAAoB,SAAAC,GAAQ,OAAI,SAAAluD,IANZ,SAACA,EAAOkuD,GAEhCL,EADcC,IAAYI,GAAsB,QAAVrlC,EACrB,OAAS,OAC1BklC,EAAWG,GAIXC,CAAkBnuD,EAAOkuD,KAErBuU,EAAmC,SAAA3lE,GACvC1P,EAAQ,CACNlD,MAAM,GAAD,OAAKsB,EAAE,kBAAP,KACLE,YAAY,GAAD,OACToR,EAAKqnC,0BAA0Bt2C,SAAWiP,EAAKs3C,UAC3C5oD,EAAE,yDACF,IAENC,YAAY,GAAD,OAAKqR,EAAK2W,SAAV,mBAAwB3W,EAAK4W,OAA7B,mBAAyC5W,EAAK2mC,eAA9C,YAAgE3mC,EAAK4mC,cAArE,mBAAwF5mC,EAAKgX,cAAc5pB,OACtHyB,iBAAkBH,EAAE,kBACpBI,iBAAkBJ,EAAE,UACnB0T,MAAK,kBACNklD,EAA2B,CAAEnlD,UAAW,CAAE9S,GAAI2Q,EAAK3Q,MAAQ+S,MAAK,WAC9DjB,EAAgBzS,EAAE,oDAAqD,CACrEkB,QAAS,YAEXsR,WAIN,OACE,kBAACioD,GAAA,EAAD,CAAgBx1D,UAAU,MAAMnF,QAAS,CAAEc,KAAMd,EAAQiX,YACvD,kBAAC2jD,GAAA,EAAD,CAAOl6D,UAAWV,EAAQ45D,MAAOnkD,aAAW,gBAC1C,kBAAColD,GAAA,EAAD,KACE,kBAACC,GAAA,EAAD,KAtHa,SAAA96D,GACrB,MAAO,CACL,CACE0H,MAAO,wBACPszD,MAAO,OACPD,cAAe/6D,EAAQqhE,eAEzB,CACE35D,MAAO,eACPqzD,cAAe/6D,EAAQg6D,SACvBgB,MAAO,QAET,CACEtzD,MAAO,qBACPqzD,cAAe/6D,EAAQshE,SACvBtG,MAAO,QAET,CACEtzD,MAAO,gBACPo7D,OAAQ,SACR/H,cAAe/6D,EAAQo6D,YAEzB,CACE1yD,MAAO,4BACPszD,MAAO,OACP8H,OAAQ,qBACR/H,cAAe/6D,EAAQ+2E,qBAEzB,CACErvE,MAAO,WACPo7D,OAAQ,WACR/H,cAAe/6D,EAAQ4hE,aACvB5G,MAAO,QAET,CACEtzD,MAAO,UACPqzD,cAAe/6D,EAAQ6hE,WACvBiB,OAAQ,GACR9H,MAAO,QAET,CACEtzD,MAAO,QACPqzD,cAAe/6D,EAAQ8hE,UACvBgB,OAAQ,GACR9H,MAAO,QAET,CAAEtzD,MAAO,UAAWszD,MAAO,UAyElBC,CAAej7D,GAASqQ,KAAI,SAAA4sB,GAAO,OAClC,kBAACi+B,GAAA,EAAD,CACE7iD,IAAK4kB,EAAQv1B,MACbszD,MAAO/9B,EAAQ+9B,MACfxyD,MAAO,CAAEnK,QAAS,QAClBqC,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQi9B,QACRA,EAAQ89B,gBAGV,kBAACiI,GAAA,EAAD,CACEC,OAAQT,IAAYvlC,EAAQ6lC,QAAsB,KAAZN,EACtCU,UAAWV,IAAYvlC,EAAQ6lC,OAASvlC,EAAQ,MAChD58B,QAASgiE,EAAkB1lC,EAAQ6lC,QACnCpiE,UAAWV,EAAQi9B,QACnBp0B,UAAWo0B,EAAQ6lC,OACnBK,cAAelmC,EAAQ6lC,QAEtB5iE,EAAE+8B,EAAQv1B,cAMrB,kBAACyzD,GAAA,EAAD,KACG/qD,GACCA,EAAK0wC,wBACL1wC,EAAK0wC,uBAAuBzwC,KAAI,SAACs4C,EAASp4C,GACxC,OACE,kBAACuqD,GAAA,EAAD,CACEziD,IAAK9H,EACLvQ,QAAS,CAAEc,KAAMd,EAAQs6D,UACzB35D,QAAS,SAAAoJ,GACH4+C,EAAQ1kC,sBAEZla,EAAEojB,kBA3EG,SAAAw7B,GACrBx1B,GAAQ,GACR8uC,EAAiBtZ,GA0EDya,CAAeza,KAEjBjoD,UAAWsG,KAAW,eACnBhH,EAAQ+hE,aAAepZ,EAAQ1kC,uBAGlC,kBAACi3C,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQqhE,eAEVrG,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KAAa6hD,EAAQkC,iBACrB,kBAAC/jD,EAAA,EAAD,KAAa6hD,EAAQ6X,eAEvB,kBAACtF,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQg6D,UACjDgB,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KACG6hD,EAAQ1kC,oBACL,uBADH,UAEM0kC,EAAQxQ,eAFd,YAEgCwQ,EAAQvQ,iBAG7C,kBAAC8iB,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQshE,UACjDtG,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KAAa6hD,EAAQngC,cAAc5pB,QAErC,kBAACs8D,GAAA,EAAD,CACEx6D,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQo6D,YAEVY,MAAM,QAEN,yBAAKt6D,UAAWV,EAAQwhE,eACK,IAA1B7Y,EAAQ38B,OAAOzpB,QAAf,SAC0B,IAA1BomD,EAAQ38B,OAAOzpB,QACdomD,EAAQ38B,OAAOzpB,QAAU,GACvB,kBAACuE,EAAA,EAAD,CAAYpG,UAAWV,EAAQyhE,UAC5BnZ,GAAeK,EAAQ38B,QACvB48B,GAAkBD,EAAQ38B,SAA1B,YACMy8B,GACHE,EAAQ38B,OACR9rB,GAHH,MAOoB,IAA1ByoD,EAAQ38B,OAAOzpB,QACdomD,EAAQ38B,OAAOzpB,OAAS,GACtB,kBAACuE,EAAA,EAAD,CAAYpG,UAAWV,EAAQyhE,UAC5BnZ,GAAeK,EAAQ38B,QAD1B,KAEGy8B,GACCE,EAAQ38B,OAAO6T,MAAM,EAAG,GACxB3/B,GAJJ,OAUuB,IAA1ByoD,EAAQ38B,OAAOzpB,QACdomD,EAAQ38B,QACR28B,EAAQ38B,OAAOzpB,OAAS,GACtB,kBAAC,GAAD,CACE+oB,KACE,wBAAI5qB,UAAWV,EAAQsrB,MACpBq9B,EAAQ38B,OAAO6T,MAAM,GAAGxvB,KAAI,SAACi5C,EAAO/4C,GACnC,OACE,wBAAI8H,IAAK9H,GACN+4C,EAAMld,aADT,KACyB,IACtBkd,EAAMztC,YAAY,GAAGA,kBAOhC,kBAACklD,WAAD,CAAYzzB,OAAQqb,EAAQ38B,OAAOzpB,OAAS,OAKtD,kBAAC24D,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQ+2E,qBAEV/b,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KACG6hD,EAAQmD,aAAa1qC,KACrB,KAC+B,aAA/BunC,EAAQmD,aAAap3C,MAClB2E,KACEsvC,EAAQngC,cAAc0f,YACtB,cACA1jB,OAAO,SACTnL,KACEsvC,EAAQngC,cAAc4f,aACtB,cACA5jB,OAAO,SACZ,WACAtkB,EAAEyoD,EAAQmD,aAAap3C,SAG5B,kBAACwmD,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQ4hE,cAEV5G,MAAM,QAEL96D,EAAEyoD,EAAQpjB,WAEb,kBAAC21B,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,GACxBrH,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQ6hE,YAEV7G,MAAM,QAELrS,EAAQjQ,aAAan2C,QAAU,GAC9B,kBAACuE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ4uC,YAC5ByZ,GAAaM,EAAQjQ,eAGzBiQ,EAAQjQ,aAAan2C,OAAS,GAC7B,kBAACuE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ4uC,YAC5ByZ,GAAaM,EAAQjQ,aAAa7Y,MAAM,EAAG,IAD9C,QAKD8oB,EAAQjQ,aAAan2C,OAAS,GAC7B,kBAAC,GAAD,CACE+oB,KACE,wBAAI5qB,UAAWV,EAAQsrB,MACpBq9B,EAAQjQ,aAAa7Y,MAAM,GAAGxvB,KAAI,SAACgzD,EAAG9yD,GACrC,OACE,wBAAI8H,IAAK9H,GACN8yD,EAAE7rB,WADL,MACoB6rB,EAAEr3B,MAAM,GAAGptC,YAOvC,kBAACmiE,WAAD,CAAYzzB,OAAQqb,EAAQjQ,aAAan2C,OAAS,MAIxD,kBAAC24D,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,GACxBrH,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQ8hE,WACjD9G,MAAM,QAEN,kBAAC,GAAD,CACE/8D,SAAU,IACVqtB,KACE,yBAAK5qB,UAAWV,EAAQsrB,KAAM9iB,MAAO,CAAExK,SAAU,MAC9C2qD,EAAQ0W,cACP1W,EAAQuW,eACR,4BAIN,kBAACoE,GAAA,EAAD,QAGJ,kBAACpI,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWV,EAAQ65D,UACnBmB,MAAM,SAEN,yBACExyD,MAAO,CAAE9C,QAAS,cAAe0J,aAAc,SAE/C,kBAAC3O,EAAA,EAAD,CACEC,UAAWV,EAAQ+9C,WACnBI,oBAAoB,EACpBC,oBAAoB,EACpB3oC,aAAW,OACX9U,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFxb,EAAQsE,KAAR,mCAC8B0yC,EAAQ9nD,GADtC,YAKF,kBAAC,GAAD,OAEF,kBAACJ,EAAA,EAAD,CACE09C,oBAAoB,EACpBC,oBAAoB,EACpB19C,UAAWV,EAAQ+9C,WACnBtoC,aAAW,SACX9U,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFgqD,EAAiCxuB,KAGnC,kBAAC,IAAD,CAAkBjoD,UAAWV,EAAQP,mBAOnD,kBAAC,GAAD,CACEI,QAzSM,WACdszB,GAAQ,IAySAw1B,QAAS2Z,EACTvpD,MAAO6wC,GAAiC0Y,GACxCxiE,SAAUq3E,EACVx3E,KAAMA,QC5UHnC,GAlFGC,aAAW,SAAAC,GAAK,MAAG,CACnCuZ,UAAU,aACRzR,OAAQ,OACRC,MAAO,OACPC,QAAS,OACTG,cAAe,SACfF,eAAgB,gBAChBupC,SAAU,SACVrxC,OAAQ,oBACRE,aAAc,OACbL,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,WAInBg0D,UAAW,CACTt7D,SAAU,OACVV,OAAQ,OACRa,MAAO,UACPL,QAAS,GAEXu7D,MAAM,aACJn0D,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BgxC,UAAW,OACXlP,SAAU,SACVv6B,QAAS,QACTD,MAAO,SAGXs4C,WAAY,CACV1/C,QAAS,mBACT,UAAW,CACTT,gBAAiB,gBAGrBq/B,QAAS,CACPv+B,MAAO,UACPD,WAAY,OACZF,SAAU,OACVy4B,WAAY,YACZrvB,cAAe,aAEjBwyD,gBAAiB,CACf10D,MAAO,OACPq9B,YAAa,QAEfw+B,SAAU,CACR17D,WAAY,SACZH,MAAO,QACPq9B,YAAa,OACbj0B,SAAU,aACVO,aAAc,QAGhB3P,UAAW,CACTlB,SAAU,QAEZy/D,iBAAkB,CAChBv4D,MAAO,QACPq9B,YAAa,QAEfs0C,cAAe,CACb3xE,MAAO,QACPq9B,YAAa,QAEfu0C,aAAc,CACZ5xE,MAAO,QACPq9B,YAAa,QAEfi7B,iBAAkB,CAChBt4D,MAAO,QACPq9B,YAAa,QAEfw3B,SAAU,CACR1rD,OAAQ,UACR,UAAW,CACThR,gBAAiB,gBCkNR05E,OA/Nf,YAA0D,IAA5BjkD,EAA2B,EAA3BA,QAAS4jD,EAAkB,EAAlBA,eAC/Bj3E,EAAUxC,KACVmU,EAAUC,cAFuC,EAG3C3R,cAALC,EAHgD,oBAI/CyS,EAAoBC,wBAApBD,gBACF7Q,EAAU+P,IAAMsX,WAAW/mB,GALsB,EAO/ByP,IAAMrQ,UAAS,GAPgB,mBAOhD7B,EAPgD,KAO1CwzB,EAP0C,OAQbthB,IAAMrQ,SAAS,IARF,mBAQhD8gE,EARgD,KAQjCL,EARiC,OAStB5vD,YAAY04C,IAAtC2oB,EATgD,sBAU7BlhE,YAASskE,GAAqB,CACtDnjE,UAAW,CACTyf,gBAAiBC,EACjB6jD,oBAAqBD,GAEvB3mC,YAAa,WACbC,6BAA6B,IANvBngC,EAV+C,EAU/CA,KAAMsC,EAVyC,EAUzCA,QASR7S,EAAU,SAAA8zE,GACdxgD,GAAQ,GACiB,mBAAdwgD,GAA2BA,GAAWjhE,KAiB7C6kE,EAA8B,SAAA/lE,GAClC,IAAMo6C,EAAmBp6C,EAAKo6C,iBAAiBv7C,KAAI,SAAAs4C,GACjD,OAAOvlD,SAASulD,EAAQ9nD,OAE1BiB,EAAQ,CACNlD,MAAM,GAAD,OAAKsB,EAAE,yBAAP,KACLC,YAAY,aAAD,OAAeqR,EAAK5S,MAApB,mBAA+B4S,EAAK+I,aAC/Cla,iBAAkBH,EAAE,yBACpBI,iBAAkBJ,EAAE,UACnB0T,MAAK,kBACN8/D,EAAuB,CACrB//D,UAAW,CAAEo4C,IAAKH,KACjBh4C,MAAK,WACNjB,EAAgBzS,EAAE,uCAAwC,CACxDkB,QAAS,YAEXvB,IACA6S,WAIN,OACE,kBAACioD,GAAA,EAAD,CAAgBx1D,UAAU,MAAMnF,QAAS,CAAEc,KAAMd,EAAQiX,YACvD,kBAAC2jD,GAAA,EAAD,CAAOl6D,UAAWV,EAAQ45D,MAAOnkD,aAAW,gBAC1C,kBAAColD,GAAA,EAAD,KACE,kBAACC,GAAA,EAAD,KAnGa,SAAA96D,GACrB,MAAO,CACL,CACE0H,MAAO,eACPszD,MAAO,OACPD,cAAe/6D,EAAQm6D,iBAEzB,CACEzyD,MAAO,gBACPqzD,cAAe/6D,EAAQshE,SACvBtG,MAAO,QAET,CACEtzD,MAAO,gBACPqzD,cAAe/6D,EAAQg+D,iBACvBhD,MAAO,QAET,CACEtzD,MAAO,iCACPszD,MAAO,OACPD,cAAe/6D,EAAQ+9D,kBAEzB,CACEr2D,MAAO,aACPszD,MAAO,OACPD,cAAe/6D,EAAQo3E,eAEzB,CACE1vE,MAAO,WACPszD,MAAO,OACPD,cAAe/6D,EAAQq3E,cAEzB,CAAE3vE,MAAO,UAAWszD,MAAO,UAoElBC,CAAej7D,GAASqQ,KAAI,SAAA4sB,GAAO,OAClC,kBAACi+B,GAAA,EAAD,CACE7iD,IAAK4kB,EAAQv1B,MACbszD,MAAO/9B,EAAQ+9B,MACfxyD,MAAO,CAAEnK,QAAS,QAClBqC,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQi9B,QACRA,EAAQ89B,gBAGT76D,EAAE+8B,EAAQv1B,aAKnB,kBAACyzD,GAAA,EAAD,KACG/qD,GACCA,EAAK44B,YACL54B,EAAK44B,WAAW34B,KAAI,SAACyhC,EAAUvhC,GAC7B,OACE,kBAACuqD,GAAA,EAAD,CACEziD,IAAK9H,EACLvQ,QAAS,CAAEc,KAAMd,EAAQs6D,UACzB35D,QAAS,SAAAoJ,GAjEF,IAAA4+C,EAkEL5+C,EAAEojB,kBAlEGw7B,EAmEU7W,EAlE/B3e,GAAQ,GACR8uC,EAAiBtZ,KAoEH,kBAACuS,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQm6D,iBAEVa,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KAAagrC,EAASv3B,cAExB,kBAAC2gD,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQshE,UACjDtG,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KACGgrC,EAAS7tB,oBACN,uBACA6tB,EAASlzC,QAGjB,kBAACs8D,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQg+D,kBAEVhD,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KACGgrC,EAASrQ,OAASvhC,EAAE,QAAUA,EAAE,aAGrC,kBAACg7D,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQ+9D,kBAEV/C,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KA1GsB,SAAAgrC,GACtC,IAAI9lB,EAAS,EAMb,OAJA8lB,EAAS8Z,iBAAiBv7C,KAAI,SAAAs4C,GAC5B38B,GAAUs8B,GAAeK,EAAQ38B,WAG5BA,EAoGYwrD,CAAgC1lC,GADnC,IAEGA,EAASlzB,kBAGd,kBAACs8C,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQo3E,eAEVpc,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KACGgrC,EAASga,aAAalxC,UAAtB,UACMk3B,EAASga,aAAalxC,WACzB,SACHk3B,EAASga,aAAazwC,UAAtB,YACQhC,KACHy4B,EAASga,aAAazwC,UACtB,cACAmJ,OAAO,UACT,KAGR,kBAAC02C,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQq3E,cAEVrc,MAAM,QAEN,kBAACl0D,EAAA,EAAD,KACGgrC,EAASga,aAAaxwC,SACnBw2B,EAASga,aAAaxwC,SACtB,SAAK,IACRpb,EAAE4xC,EAASga,aAAavwC,YAG7B,kBAAC2/C,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWV,EAAQ65D,UACnBmB,MAAM,SAEN,yBACExyD,MAAO,CAAE9C,QAAS,cAAe0J,aAAc,SAE/C,kBAAC3O,EAAA,EAAD,CACEC,UAAWV,EAAQ+9C,WACnBI,oBAAoB,EACpBC,oBAAoB,EACpB3oC,aAAW,OACX9U,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFxb,EAAQsE,KAAR,sBAA4B67B,EAASjxC,OAGvC,kBAAC,GAAD,OAEF,kBAACJ,EAAA,EAAD,CACE09C,oBAAoB,EACpBC,oBAAoB,EACpB19C,UAAWV,EAAQ+9C,WACnBtoC,aAAW,SACX9U,QAAS,SAAAoJ,GACPA,EAAEojB,kBACFoqD,EAA4BzlC,KAG9B,kBAAC,IAAD,CAAkBpxC,UAAWV,EAAQP,mBAOnD,kBAAC,GAAD,CACEqyC,SAAUwwB,EACVziE,QAASA,EACTF,KAAMA,EACNG,SAAUy3E,QCpGP/5E,GApLGC,aAAW,SAACC,GAAD,MAAY,CACvCoD,KAAK,aACH4E,QAAS,OACTG,cAAe,SACfJ,MAAO,OACPD,OAAQ,QACP9H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BgxC,UAAW,WAGf+uB,QAAS,CACPx4D,QAAS,OACTE,WAAY,SACZxG,UAAW,sBACXtB,UAAW,aACXmI,aAAc,MACduF,UAAW,QAEbo5D,YAAY,aACVl/D,QAAS,OACTE,WAAY,SACZ5H,SAAU,QACVwH,OAAQ,OACRgK,YAAa,oBACb1R,UAAW,aACXY,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BH,SAAU,UAGdmgE,aAAa,aACX9/D,QAAS,YACTI,WAAY,OACZF,SAAU,OACVC,WAAY,OACZE,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,WACTE,SAAU,SAGdwmE,cAAe,CACbrmE,MAAO,UACPL,QAAS,WACTyuB,aAAc,oBACdhvB,UAAW,aACXS,SAAU,OACVP,SAAU,kBAEZknE,SAAU,CACRh5D,KAAM,WACNtO,gBAAiBF,EAAM6Y,QAAQhR,WAAW5H,MAC1C+H,QAAS,QAEX4Q,KAAK,aACHpK,KAAM,aACLxO,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B+N,KAAM,cAGVi5D,iBAAkB,CAChBv/D,WAAY,cAEd6xE,eAAe,aACb/xE,QAAS,OACTG,cAAe,MACfF,eAAgB,gBAChBtH,QAAS,aACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACfxH,QAAS,SAGbs9D,kBAAkB,aAChBt9D,QAAS,YACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,aAGbq5E,yBAAyB,aACvBjyE,MAAO,QACPD,OAAQ,QACR3H,OAAQ,oBACRE,aAAc,MACdM,QAAS,aACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPQ,aAAc,OACdT,OAAQ,SAIZmyE,oBAAoB,aAClBlyE,MAAO,QACPD,OAAQ,QACR3H,OAAQ,oBACRE,aAAc,MACdM,QAAS,aACRX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPQ,aAAc,OACdT,OAAQ,SAGZoyE,YAAa,CACXnyE,MAAO,QACPD,OAAQ,OACRjH,SAAU,OACVE,WAAY,OACZC,MAAO,WAETm5E,eAAgB,CACdhoE,WAAY,QAEdioE,cAAe,CACbjoE,WAAY,OACZnR,MAAO,UACP+G,MAAO,OACP,UAAW,CACTmJ,OAAQ,YAGZ25D,WAAY,CACVhqE,SAAU,OACVE,WAAY,OACZ2Q,aAAc,OACdI,YAAa,oBACbtQ,YAAa,QAEf64E,cAAe,CACbryE,QAAS,OACT,UAAW,CACTkJ,OAAQ,WAEV3I,aAAc,OACdL,WAAY,UAEdqa,aAAc,CACZ6iB,YAAa,OACb1zB,aAAc,OACdE,KAAM,WAER0oE,cAAe,CACbt5E,MAAO,WAETu5E,YAAY,aACVn1C,YAAa,OACbp9B,QAAS,OACTE,WAAY,UACXlI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B2kC,YAAa,SAGjBktC,SAAU,CACR5gE,aAAc,OACdE,KAAM,WAERgoB,OAAQ,CACNj5B,QAAS,EACTmH,OAAQ,OACR,UAAW,CACT5H,gBAAiB,SAGrBkY,SAAU,CACRlY,gBAAiB,UACjBa,WAAY,QAEd4mE,uBAAwB,CACtB51C,QAAS,EACT/wB,MAAO,WAETw5E,eAAgB,CACdx5E,MAAO,UACPokC,YAAa,MACb1zB,aAAc,OACdI,YAAa,yB,gOC/KjB,IAAMhS,GAAYC,aAAW,iBAAO,CAClCqD,KAAM,CACJpC,MAAO,UACPL,QAAS,WACTyuB,aAAc,oBACdhvB,UAAW,aACXS,SAAU,OACVP,SAAU,kBAGZ2Z,QAAS,CAAE/R,WAAY,cACvBkQ,SAAU,CAAElY,gBAAiB,UAAWa,WAAY,QACpD89D,iBAAkB,CAAE9sC,QAAS,EAAG/wB,MAAO,eAG5By5E,GAAiBzvD,KAAOC,IAAV,MAWZnrB,MChBf,IAAM46E,GAAU,CAAC,iBAAkB,cAsBpBC,GApBK,SAAC,GAA0B,IAAxBlgE,EAAuB,EAAvBA,IAAK8kD,EAAkB,EAAlBA,YAAkB,EAChCh9D,cAALC,EADqC,sBAEU1C,KAA9CsD,EAFoC,EAEpCA,KAAM6W,EAF8B,EAE9BA,QAAS7B,EAFqB,EAErBA,SAAUymD,EAFW,EAEXA,iBAEjC,OACE,kBAAC4b,GAAD,KACE,kBAAC,KAAD,CAAMphE,eAAe,UAAUzU,MAAO6V,EAAKrO,SAAUmzD,GAClDmb,GAAQ/nE,KAAI,SAAC8pB,EAAS5pB,GAAV,OACX,kBAAC6H,GAAA,EAAD,eACEC,IAAK8hB,EACLn6B,QAAS,CAAEc,OAAM6W,UAAS7B,WAAUymD,oBACpC70D,MAAK,UAAKxH,EAAEi6B,KApBxB,SAAmB5pB,GACjB,MAAO,CACL1P,GAAG,gBAAD,OAAkB0P,GACpB,gBAAgB,qBAAhB,OAAsCA,IAkB1B+nE,CAAU/nE,WC0TXc,gBAJS,SAAAtO,GAAK,MAAK,CAChCgB,cAAehB,EAAMgB,iBAGiB,KAAzBsN,EAxTE,SAAC,GAAiC,IAAD,EAA9B0E,EAA8B,EAA9BA,SAAUhS,EAAoB,EAApBA,cACtB/D,EAAUxC,KACVmU,EAAUC,cAFgC,EAGpC3R,cAALC,EAHyC,sBAK1BsB,oBAAS,UAAAuU,EAAShT,aAAT,eAAgBssB,YAAa,GALZ,mBAKzClX,EALyC,KAKpCslD,EALoC,OAMJj8D,mBAAS,SANL,mBAMzCy1E,EANyC,KAMzBsB,EANyB,OAU5C/2E,mBAAS,SAVmC,mBAQ9Cg3E,EAR8C,KAS9CC,EAT8C,KAY1CC,EAf8B,IAgBlCvgE,EACI,iCACA,6BAf0C,EAiBtB3F,YAASokE,GAAU,CAC3CjjE,UAAW,CACTyf,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,IAExCyvC,YAAa,WACbC,6BAA6B,IAPvBngC,EAjBwC,EAiBxCA,KAAMsC,EAjBkC,EAiBlCA,QAuBd,OACE,yBAAKhS,UAAWV,EAAQc,MACtB,kBAAC,GAAD,OACEiD,EAAcH,sBAAsB/C,IAAM,kBAAC,GAAD,MAE3CkD,EAAcH,sBAAsB/C,IACnC,yBAAKH,UAAWV,EAAQk+D,SACtB,yBAAKx9D,UAAWV,EAAQ4kE,aACtB,kBAAC99D,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQm+D,cACzCj+D,EAAE,cAIP,kBAAC,GAAD,CAAaiY,IAAKA,EAAK8kD,YA1BP,SAACvoD,EAAOipD,GAC9BF,EAAOE,GACPjrD,QA4BG3O,EAAcH,sBAAsB/C,IAAMuP,GACzC,yBAAK1P,UAAWV,EAAQgG,SACtB,yBAAKtF,UAAWV,EAAQy3E,gBACtB,yBACE/2E,UAhEwB,IAiEtByX,EACInY,EAAQ03E,yBACR13E,EAAQ23E,qBAGd,kBAAC7wE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ43E,aAC5BxnE,EAAKsoE,GAAcC,mBAEtB,kBAAC7xE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ63E,gBAC5B33E,EAAE,uBAEL,kBAAC4G,EAAA,EAAD,CACEpG,UAAWV,EAAQ83E,cACnBn3E,QAAS,WACPgR,EAAQsE,KAAK,CACXD,SAAU,iBACVjT,MAAO,CACLssB,UAtFF,EAuFE02C,SAnFgB,IAoFd5tD,EAtFS,yBACJ,0BA4FZjY,EAAE,cAGP,yBACEQ,UA/FwB,IAgGtByX,EACInY,EAAQ03E,yBACR13E,EAAQ23E,qBAGd,kBAAC7wE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ43E,aAC5BxnE,EAAKsoE,GAAcE,uBAEtB,kBAAC9xE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ63E,gBAC5B33E,EAAE,oBAEL,kBAAC4G,EAAA,EAAD,CACEpG,UAAWV,EAAQ83E,cACnBn3E,QAAS,WACPgR,EAAQsE,KAAK,CACXD,SAAU,iBACVjT,MAAO,CACLssB,UArHF,EAsHE02C,SAlHgB,IAmHd5tD,EArHS,yBACJ,0BA2HZjY,EAAE,cAGP,yBACEQ,UA9HwB,IA+HtByX,EACInY,EAAQ03E,yBACR13E,EAAQ23E,qBAGd,kBAAC7wE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ43E,aAC5BxnE,EAAKsoE,GAAcG,wBAChBzoE,EAAKsoE,GAAcG,wBACnB,GAEN,kBAAC/xE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ63E,gBAC5B33E,EAAE,iCAEL,kBAAC4G,EAAA,EAAD,CAAYpG,UAAWV,EAAQ43E,aAC5BxnE,EAAKsoE,GAAcI,oBAChB1oE,EAAKsoE,GAAcI,oBACnB,GAEN,kBAAChyE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ63E,gBAC5B33E,EAAE,wCAlJmB,IAqJzBiY,GACC,yBAAKzX,UAAWV,EAAQ03E,0BACtB,kBAAC5wE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ43E,aAC5BxnE,EAAKsoE,GAAcK,sBAChB3oE,EAAKsoE,GAAcK,sBACnB,GAEN,kBAACjyE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ63E,gBAC5B33E,EAAE,kCAEL,kBAAC4G,EAAA,EAAD,CAAYpG,UAAWV,EAAQ43E,aAC5BxnE,EAAKsoE,GAAcM,sBAChB5oE,EAAKsoE,GAAcM,sBACnB,GAEN,kBAAClyE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ63E,gBAC5B33E,EAAE,0CAIT,yBACEQ,UA1KwB,IA2KtByX,EACInY,EAAQ03E,yBACR13E,EAAQ23E,qBAGd,kBAAC7wE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ43E,aAC5BxnE,EAAKsoE,GAAcO,wBAGtB,kBAACnyE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ63E,gBAC5B33E,EAAE,2BAGL,kBAAC4G,EAAA,EAAD,CACEpG,UAAWV,EAAQ83E,cACnBn3E,QAAS,WACPgR,EAAQsE,KAAK,CACXD,SAAU,iBACVjT,MAAO,CACLssB,UAjMD,EAkMC02C,SAAU,mBAKf7lE,EAAE,eAKT,kBAACwW,GAAD,CACEhW,UAAWV,EAAQ27D,kBACnBr5D,MAAO6V,EACP5H,MA5M0B,GA8M1B,6BACE,yBAAK7P,UAAWV,EAAQ+3E,eACtB,kBAACjxE,EAAA,EAAD,CAAYpG,UAAWV,EAAQuoE,YAC5BroE,EAAE,4BAEL,kBAAC,GAAD,CACEoC,MAAO20E,EACPntE,SAlLmB,SAAAsK,GACjCmkE,EAAkBnkE,IAkLJ1T,UAAWV,EAAQgkD,YACnB7tC,MAAO,CACL,CACE7T,MAAO,QACPoF,MAAO,SAET,CACEpF,MAAO,OACPoF,MAAO,UAET,CACEpF,MAAO,QACPoF,MAAO,cAIb,kBAACvG,EAAA,EAAD,CACEnB,QAAS,CAAEc,KAAMd,EAAQs3B,QACzB32B,QAAS,kBACPgR,EAAQsE,KAAR,uCAGF,kBAAC,KAAD,CACE1X,SAAS,QACTmC,UAAWV,EAAQigB,eAErB,kBAACnZ,EAAA,EAAD,CAAYpG,UAAWV,EAAQg4E,eAC5B93E,EAAE,oBAIT,kBAAC,GAAD,CACEmzB,QACEtvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,GAEtCo2E,eAAgBA,MAItB,kBAACvgE,GAAD,CACEhW,UAAWV,EAAQ27D,kBACnBr5D,MAAO6V,EACP5H,MAhQsB,GAkQtB,6BACE,yBAAK7P,UAAWV,EAAQ+3E,eACtB,kBAACjxE,EAAA,EAAD,CAAYpG,UAAWV,EAAQuoE,YAC5BroE,EAAE,wBAEL,kBAAC,GAAD,CACEoC,MAAOk2E,EACP1uE,SAnOgC,SAAAsK,GAC9CqkE,EAA+BrkE,IAmOjB1T,UAAWV,EAAQgkD,YACnB7tC,MAAO,CACL,CACE7T,MAAO,QACPoF,MAAO,SAET,CACEpF,MAAO,OACPoF,MAAO,UAET,CACEpF,MAAO,QACPoF,MAAO,cAIb,kBAACvG,EAAA,EAAD,CACEnB,QAAS,CAAEc,KAAMd,EAAQs3B,QACzB32B,QAAS,kBAAMgR,EAAQsE,KAAR,mCAEf,kBAAC,KAAD,CACE1X,SAAS,QACTmC,UAAWV,EAAQigB,eAErB,kBAACnZ,EAAA,EAAD,CAAYpG,UAAWV,EAAQg4E,eAC5B93E,EAAE,oBAIT,kBAAC,GAAD,CACE+2E,eAAgBuB,EAChBnlD,QACEtvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,Y,UCrRvCrD,GA/CGC,aAAW,SAAAC,GAAK,MAAI,CACpCw7E,oBAAoB,aAClBrpE,WAAY,QACXnS,EAAMQ,YAAYC,KAAM,CACvBsH,MAAO,QACPpH,QAAS,wBAIb86E,gBAAgB,aACdzzE,QAAS,OACTE,WAAY,aACZvH,QAAS,YACRX,EAAMQ,YAAYC,KAAM,CAEvBsH,MAAO,UAGX2zE,gBAAgB,aACd1zE,QAAS,OACTrH,QAAS,WACTuH,WAAY,UACXlI,EAAMQ,YAAYC,KAAM,CACvBsH,MAAO,OAEPE,eAAgB,WAIpB0zE,eAAgB,CACdr7E,SAAU,OACVwN,UAAW,OACX7F,eAAgB,SAChBC,WAAY,SACZhI,gBAAiB,UACjBc,MAAO,UACPX,aAAc,MACd2H,QAAS,QAEX4zE,SAAU,CACR17E,gBAAiB,UACjBS,QAAS,OACT+H,WAAY,YCODmzE,GA1CM,WACnB,IAAMv5E,EAAUxC,KADS,EAEbyC,cAALC,EAFkB,oBAIzB,OACE,yBAAKQ,UAAWV,EAAQk5E,qBACtB,kBAACpyE,EAAA,EAAD,CACE0B,MAAO,CAAET,cAAe,OAAQtJ,WAAY,OAAQF,SAAU,SAE7D2B,EAAE,gBAEL,yBAAKQ,UAAWV,EAAQm5E,iBACtB,yBAAKz4E,UAAWV,EAAQq5E,gBAAxB,KACA,kBAACvyE,EAAA,EAAD,CAAYpG,UAAWV,EAAQo5E,iBAC5Bl5E,EACC,4HAIN,yBAAKQ,UAAWV,EAAQm5E,iBACtB,yBAAKz4E,UAAWV,EAAQq5E,gBAAxB,KACA,kBAACvyE,EAAA,EAAD,CAAYpG,UAAWV,EAAQo5E,iBAC5Bl5E,EACC,wIAIN,kBAAC4G,EAAA,EAAD,CAAYpG,UAAWV,EAAQs5E,UAA/B,uBACmBx0E,GADnB,iBAGA,yBAAKpE,UAAWV,EAAQm5E,iBACtB,yBAAKz4E,UAAWV,EAAQq5E,gBAAxB,KACA,kBAACvyE,EAAA,EAAD,CAAYpG,UAAWV,EAAQo5E,iBAC5Bl5E,EACC,iJCVGue,GA3BE,SAAAC,GACf,IAAMpW,EAAS,GAuBf,OArBIgV,GAAWoB,EAAO86D,eAAiB,IAAI,KACzClxE,EAAOkxE,cAAgB,8BAGrBl8D,GAAWoB,EAAO+6D,oBAAsB,IAAI,KAC9CnxE,EAAOmxE,mBAAqB,oCAG1B/6D,EAAOlE,aACLwD,GAAyBU,EAAOlE,YAAc,IAAI,GACpDlS,EAAOkS,WAAa,oCACX2D,GAA2BO,EAAOlE,YAAc,IAAI,KAC7DlS,EAAOkS,WAAP,0HAIAkE,EAAOoM,WACuB,IAA5BpM,EAAOoM,UAAUvoB,SACnB+F,EAAOwiB,UAAY,gCAGhBxiB,GC6EM9K,GAzGGC,aAAW,SAAAC,GAAK,MAAI,CACpCg8E,WAAY,CACVn7E,SAAU,OACVE,WAAY,OACZD,WAAY,QAEdm7E,UAAU,aACR9pE,WAAY,OACZizB,YAAa,SACZplC,EAAMQ,YAAYC,KAAK,MAAO,CAC7B2kC,YAAa,OACbj9B,cAAe,SACfH,QAAS,OACTqC,cAAe,SAGnB6xE,YAAY,aACVl0E,QAAS,OACTG,cAAe,MACfgK,WAAY,OACZ9H,cAAe,QACdrK,EAAMQ,YAAYC,KAAK,MAAO,CAC7B0H,cAAe,SACfH,QAAS,OACTD,MAAO,QAGXo0E,YAAa,CACXp0E,MAAO,SAETq0E,WAAY,CACV7zE,aAAc,GAEhBuZ,oBAAoB,aAClB/Z,MAAO,QACPW,WAAY,QACX1I,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OACPW,WAAY,MACZrH,UAAW,SAGf0gB,aAAc,CACZngB,SAAU,WACVmG,MAAO,QACPD,OAAQ,QACRzH,aAAc,MACdH,gBAAiB,WAEnB8hB,gBAAgB,aACdpgB,SAAU,WACVqgB,OAAQ,IACRngB,MAAO,IACP,UAAW,CACToP,OAAQ,WAEVrJ,WAAY,UACZC,OAAQ,QACP9H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BqH,OAAQ,OACRC,MAAO,SAKX8mB,SAAS,aACP7tB,MAAO,QACPH,SAAU,OACVF,QAAS,OACRX,EAAMQ,YAAYC,KAAK,MAAO,CAC7BqH,OAAQ,OACRC,MAAO,SAKXs0E,kBAAmB,CACjBlqE,WAAY,QAEdmqE,gBAAiB,CACft0E,QAAS,QACTD,MAAO,QAETi7B,aAAa,aACXj7B,MAAO,OACPC,QAAS,OACTC,eAAgB,gBAChBoC,cAAe,QACdrK,EAAMQ,YAAYC,KAAK,MAAO,CAC7B0H,cAAe,SACfH,QAAS,OACTD,MAAO,SAIXyC,MAAM,aACJzC,MAAO,OACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7B4J,cAAe,OACftC,MAAO,OACP2J,aAAc,aCoBLkb,gBAAU,CACvBnmB,KAAM,aACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,cA1GoB,CACpBhsB,MAAO,GACP8b,WAAY,CACVrU,MAAO,IAET2kB,UAAW,GACXmvD,eAAgB,GAChBT,cAAe,GACfC,mBAAoB,IAmGpBh7D,aANa6L,CAOZjZ,aAXqB,SAAAtO,GAAK,MAAK,CAChC0iD,QAASA,aAAQ,aAARA,CAAsB1iD,MAU9BsO,EAjGwB,SAAC,GAAoD,IAAlDsZ,EAAiD,EAAjDA,aAAcuB,EAAmC,EAAnCA,aAAcxtB,EAAqB,EAArBA,MAAO+mD,EAAc,EAAdA,QACzDzlD,EAAUxC,KAD6D,EAEjEyC,cAALC,EAFsE,sBAI/B2R,IAAMrQ,UAAS,GAJgB,mBAItE2qB,EAJsE,KAIrDC,EAJqD,KAK7E,OACE,yBAAK1rB,UAAWV,EAAQ25E,WACtB,kBAAC7yE,EAAA,EAAD,CAAYpG,UAAWV,EAAQ05E,YAC5Bx5E,EAAE,oBAEL,0BAAMwrB,SAAUf,GACd,yBAAKjqB,UAAWV,EAAQ45E,aACtB,yBAAKl5E,UAAWV,EAAQ65E,aACtB,kBAACluD,GAAA,EAAD,CACErT,KAAK,aACL5Q,MAAM,WACNvC,UAAWymB,GACXyE,WAAYrwB,EAAQ85E,WACpB1pD,UAAU,KAGd,yBAAK1vB,UAAWV,EAAQwf,qBACtB,kBAAC1Y,EAAA,EAAD,CACE1F,QAAQ,KACRoH,MAAO,CACLvC,aAAc,MACd0B,cAAe,cAGhBzH,EAAE,iBAEL,yBACEQ,UAAWV,EAAQyf,aACnBjX,MAAO,CAAE5K,gBAAiBc,IAE1B,yBACEiC,QAAS,kBAAMyrB,GAAmB,IAClC1rB,UAAWV,EAAQ0f,iBAEnB,kBAAC,KAAD,CAAUhf,UAAWV,EAAQusB,YAE9BJ,GACC,kBAACR,GAAA,EAAD,CACErT,KAAK,QACLzY,QAASusB,EACTI,aAAc9tB,EACdoL,SAAUoiB,EACV/mB,UAAWsnB,QAMrB,yBAAK/rB,UAAWV,EAAQ0gC,cACtB,kBAAC/U,GAAA,EAAD,CACErT,KAAK,gBACL5X,UAAWV,EAAQkI,MACnBuB,YAAavJ,EAAE,kBACfwH,MAAOxH,EAAE,kBAAoB,KAC7BiF,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,qBACL5X,UAAWV,EAAQkI,MACnBuB,YAAavJ,EAAE,sBACfwH,MAAOxH,EAAE,sBAAwB,KACjCiF,UAAW8D,MAIf,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,YACLgT,KAAM,CAAC,UAAW,aAClBnmB,UAAWoiD,KAGb,kBAAC,GAAD,CACEv4B,kBAAmBy2B,EACnB35B,WAAW,IACXC,YAAY,e,8bC7Gf,IAAMmuD,GAAkB3tE,KAAH,M,qkBCArB,IAAM4tE,GAAyB5tE,KAAH,MAWtB6tE,GAAyB7tE,KAAH,MCD7B8tE,GAAoB,+CAVA,sBAUA,wCAEpBC,GAAO,CACX,CACE17E,MAAO,mBAET,CACEA,MAAO,sBAET,CACEA,MAAO,yBAET,CACEA,MAAO,YAET,CACEA,MAAO,YAIL27E,GAAc,CAClB,CACE37E,MAAO,mBAET,CACEA,MAAO,WAET,CACEA,MAAO,cAET,CACEA,MAAO,YAET,CACEA,MAAO,YAgBL47E,GAAS,uBACTC,GAAS,kBCnDFC,GAAuB,SAAC,GAU9B,IAAD,EATJtnD,EASI,EATJA,gBACA10B,EAQI,EARJA,MACA2sE,EAOI,EAPJA,kBACAvgD,EAMI,EANJA,UACAzc,EAKI,EALJA,KACAssE,EAII,EAJJA,UACAC,EAGI,EAHJA,SACApB,EAEI,EAFJA,cACAC,EACI,EADJA,mBAEMoB,GAAU,GACdh6E,GDvBqB,sBCsBP,cDpBgB,8BCsBDuyB,GAFf,cDjBa,kBCoBD10B,GAHZ,cDhB2B,gCCqBvC2sE,GAAqBA,EAAkB9oE,OAAS8oE,EAAoB,MALxD,cDfiB,sBCqBDvgD,EAAUvoB,OAASuoB,EAAY,MAN/C,cDdY,iBCqBDzc,GAPX,cDbsB,2BCqBDmrE,GARrB,cDZ4B,iCCqBDC,GAT3B,wBAULY,IAVK,GAahB,GAAIO,EAAU,CACZ,IAAM33E,EAAO23E,EAASE,cACtBD,EAAW,aAAD,OAAc53E,EAAd,QAA2B03E,EAGvC,IAAII,EAAc,GAOlB,OALAr9D,OAAOC,KAAKk9D,GAAYliD,SAAQ,SAAAtgB,GAC9B,IAAM/V,EAAQu4E,EAAWxiE,GACzB0iE,GAAW,UAAO1iE,EAAP,aAAe/V,EAAf,SAGP,WAAN,OAAkBy4E,EAAlB,uBCsFav9E,GApIGC,aAAW,SAACC,GAAD,MAAY,CACvCoD,KAAM,CACJ4E,QAAS,OACTG,cAAe,SACfJ,MAAO,OACPD,OAAQ,QAGV04D,QAAQ,aACNx4D,QAAS,OACTE,WAAY,SACZxG,UAAW,sBACXtB,UAAW,aACX0N,UAAW,QACV9N,EAAMQ,YAAYC,KAAK,MAAO,CAC7B0H,cAAe,SACf2F,UAAW,SAGfo5D,YAAY,aACVl/D,QAAS,OACTE,WAAY,SACZ5H,SAAU,QACVwH,OAAQ,OACR1H,UAAW,aACXY,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BH,SAAU,QACV4H,WAAa,SACbD,eAAe,WAGnBw4D,aAAa,aACX9/D,QAAS,YACTI,WAAY,OACZF,SAAU,OACVC,WAAY,OACZE,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,WACTE,SAAU,OACVkI,UAAW,WAGfT,QAAQ,aACNN,QAAS,OACTD,MAAO,OACPD,OAAQ,OACRK,cAAe,OACdnI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACdxH,QAAS,YAId28E,UAAU,aACR38E,QAAS,OACTL,SAAU,QACVC,SAAU,QACVuR,YAAa,qBACZ9R,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BH,SAAU,OACVC,SAAU,OACVuR,YAAa,OACbsd,aAAc,sBAGlB4sD,WAAY,CACVn7E,SAAU,OACVE,WAAY,OACZD,WAAY,QAEdy8E,UAAU,aACRv1E,QAAS,OACTD,MAAO,OACPoK,WAAY,OACZ9H,cAAe,QACdrK,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0R,WAAY,OACZ9H,cAAe,OACftC,MAAO,SAGXs/D,cAAc,aACZt/D,MAAO,MACPD,OAAQ,OACRgG,UAAW,OACXzN,aAAc,MACdW,MAAO,UACPb,OAAQ,oBACRU,SAAU,QACTb,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,MACPlH,SAAU,SAGduX,SAAU,CACRlY,gBAAiB,UACjBc,MAAO,WAETymE,iBAAkB,CAChB9mE,QAAS,GAEXiY,KAAM,CACJ9Q,OAAQ,OACRgG,UAAW,OACX/F,MAAO,QAETw4D,WAAW,aACTx4D,MAAO,OACPlH,SAAU,OACVE,WAAY,QACXf,EAAMQ,YAAYC,KAAK,MAAO,CAC5BsH,MAAO,SAGZs0E,kBAAkB,aAChBlqE,WAAY,QACXnS,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0R,WAAY,SAGhBm0C,YAAa,CACXv+C,MAAO,QAGT8B,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,uBCrFZ,SAAS+/D,GAAiBh1D,GACxB,MAAO,CACL1P,GAAG,gBAAD,OAAkB0P,GACpB,gBAAgB,qBAAhB,OAAsCA,IAI1C,I,wBAoUec,gBAZS,SAAAtO,GACtB,MAAO,CACLm4E,WAAYn4E,EAAMoB,KAAK+2E,WACvBn3E,cAAehB,EAAMgB,kBAGE,SAAAuN,GAAQ,MAAK,CACtCuhD,eAAgB,SAAC1uD,EAAMiM,GACrBkB,EAASijD,aAAWpwD,EAAMiM,QAIfiB,EA5TM,SAAC,GAAkB,IAAb/L,EAAY,mBAC/BtF,EAAUxC,KADqB,EAEzByC,cAALC,EAF8B,oBAG7B2yD,EAAkCvtD,EAAlCutD,eAAgB9uD,EAAkBuB,EAAlBvB,cAHa,EAKX8N,IAAMrQ,SAAS,GALJ,mBAK9Bc,EAL8B,KAKvBwP,EALuB,OAMXD,IAAMrQ,SARZ,WAEiB,mBAM9B9C,EAN8B,KAMvBq6D,EANuB,OAOHlnD,IAAMrQ,UAAS,GAPZ,mBAO9B8F,EAP8B,KAOnButD,EAPmB,OAQDhjD,IAAMrQ,SAAS,IARd,mBAQ9BuwD,EAR8B,KAQlBqB,EARkB,OASLvhD,IAAMrQ,SAAS,iBATV,mBAS9B25E,EAT8B,KASpBC,EAToB,OAULvpE,IAAMrQ,UAAS,GAVV,mBAU9BopB,EAV8B,KAUpBkqC,EAVoB,OAWOjjD,IAAMrQ,SAAS,IAXtB,mBAW9By4E,EAX8B,KAWdoB,EAXc,OAaOxpE,IAAMrQ,SAAS,IAbtB,mBAa9BymB,EAb8B,KAadqzD,EAbc,OAcDzpE,IAAMrQ,SAAS,IAdd,mBAc9BwnC,EAd8B,KAclBuyC,EAdkB,KAgB7B5oE,EAAoBC,wBAApBD,gBAhB6B,GAiBNN,YAAY8nE,IAApCqB,GAjB8B,wBAkBNnpE,YAAY+nE,IAApCqB,GAlB8B,wBAoB2BjpE,YAC9D0nE,GACA,CACEvmE,UAAW,CACTyf,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,IAExCyvC,YAAa,WACbC,6BAA6B,IATzBngC,GApB6B,GAoB7BA,KAAesrE,GApBc,GAoBvBhpE,QAAgC8jC,GApBT,GAoBSA,cApBT,GAiC4BhkC,YAC/D63D,GACA,CACE12D,UAAW,CACTyf,gBACErvB,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,IAExCyvC,YAAa,WACbC,6BAA6B,IAThBorC,GAjCoB,GAiC7BroD,QAAoCsoD,GAjCP,GAiCCxrE,KAjCD,GA8C8BoC,YACjE1F,GACA,CACEwjC,YAAa,WACbC,6BAA6B,IAJhBsrC,GA9CoB,GA8C7BvoD,QAAqCwoD,GA9CR,GA8CE1rE,KAYvCyB,IAAM+C,WAAU,WACd,GAAIxE,GAAM,CACR,GAAIomC,KAAkBulC,IAAcrpE,QAAS,OAC7CmiD,GAAa,GACb,IAAMmnB,EC1H6B,SAAAC,GACvC,IAAKA,EACH,MAAO,CACLv9E,MAAO,GACP8b,WAAY,CACVrU,MAAO,IAET2kB,UAAW,GACXmvD,eAAgB,GAChBT,cAAe,GACfC,mBAAoB,IAIxB,IAAM3uD,EAAY,YAAImxD,EAAanxD,WAAWza,KAAI,SAAAmB,GAChD,MAAa,WAATA,EACK,YAEFA,KAGT,MAAO,CACLgJ,WAAY,CAAErU,MAAO81E,EAAar1C,OAClCloC,MAAOu9E,EAAav9E,MACpBmC,GAAIo7E,EAAap7E,GACjBiqB,UAAWmxD,EAAanxD,UAAYA,EAAY,GAChD0uD,cAAeyC,EAAazC,cAC5BC,mBAAoBwC,EAAaxC,oBD+FZyC,CAA0B9rE,GAAKqS,QAC5C05D,EC5F6B,SAAA/rE,GACvC,IAAM6X,EAAiB,GACjB+gB,EAAa,GACnB,OAAK54B,GAILA,EAAK6X,eAAe0Q,SAAQ,SAAAnQ,GAC1BP,EAAehS,KAAK,CAClB3T,MAAOkmB,EAAc3nB,GACrB6G,MAAO8gB,EAAc5pB,WAIzBwR,EAAK44B,WAAWrQ,SAAQ,SAAAmZ,GACtB9I,EAAW/yB,KAAK,CACd3T,MAAOwvC,EAASjxC,GAChB6G,MAAOoqC,EAASlzC,WAGb,CACLqpB,eAAgBA,EAChB+gB,WAAYA,IAlBL,GDwFaozC,CAA0BhsE,IAE5CgjD,EAAc,eACT4oB,EADQ,CAEXt9E,MAAOs9E,EAAWt9E,OArEJ,aAwEhBo2D,IAAcknB,EAAWn7E,IAEzB,IAAI6pB,EAAgB,CAClBwwD,WAAYc,GAGdjjB,EAASijB,EAAWt9E,MAAQs9E,EAAWt9E,MA9EvB,WA+EhB48E,EAAkBa,EAAUl0D,gBAC5BszD,EAAcY,EAAUnzC,YAExB6sB,GAAgBnrC,MAEjB,CAACta,KAEJ,IAAMisE,GAAqB,SAAAC,GACzB,IAAKV,GAAiBpR,iBAAmBoR,GAAiBjR,eAAgB,CACxE,IAAM2C,EAA0BsO,GAAiBtO,wBACjD,SAAIA,IAA2BA,EAAwBjnB,gBAInDi2B,GACF3pE,EACEzS,EACE,gFAEF,CACEkB,QAAS,WAKR,GAGT,OAAO,GAGHm7E,GAAsB,SAAA79D,GAC1B,IAAMyvD,EEzKoB,SAAC/9D,EAAMgjB,GACnC,IAAMi9B,EAAWjgD,EAAKoK,WAAWyD,KAAO,CAAE2oB,MAAOx2B,EAAKoK,WAAWyD,MAAS,GACpE0oB,EAAQv2B,EAAKvP,GAAK,CAAEA,GAAIuC,SAASgN,EAAKvP,KAAQ,GAC9C27E,EAAqBppD,EACvB,CAAEA,gBAAiBA,GACnB,GACJ,OAAO,eACFi9B,EADL,CAEEosB,eAAe,eACV91C,EADS,CAEZjoC,MAAO0R,EAAK1R,MACZosB,UAAW1a,EAAK0a,UAChB0uD,cAAeppE,EAAKopE,cACpBC,mBAAoBrpE,EAAKqpE,oBACtB+C,KF2JeE,CAClBh+D,EACA3a,EAAcH,sBAAsByvB,SAClCtvB,EAAcH,sBAAsB/C,IAExCg0D,GAAa,GACTjqC,EACF6wD,GAAqB,CAAE9nE,UAAWw6D,IAAev6D,MAAK,WACpDjB,EAAgBzS,EAAE,kDAAmD,CACnEkB,QAAS,YAEXs6E,QAGFF,GAAqB,CAAE7nE,UAAWw6D,IAAev6D,MAAK,WACpDjB,EAAgBzS,EAAE,kDAAmD,CACnEkB,QAAS,YAEXs6E,SAKA7lB,GAAkB,SAAAC,GACtBp4C,OAAOC,KAAKm4C,GAAkBzlD,KAAI,SAAAwN,GAChCg1C,EAAeh1C,EAAOi4C,EAAiBj4C,QAiD3C,OACE,yBAAKnd,UAAWV,EAAQc,MACtB,kBAAC,GAAD,MACA,kBAAC,GAAD,CACEwG,UAAWq0E,IAAuBE,IAAwBv0E,EAC1DC,gBAAiBvH,EAAQuH,mBAEzBxD,EAAcH,sBAAsB/C,IAAM,kBAAC,GAAD,MAC3CkD,EAAcH,sBAAsB/C,IACnC,yBAAKH,UAAWV,EAAQk+D,SACtB,yBAAKx9D,UAAWV,EAAQ4kE,aACtB,kBAAC99D,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQm+D,cACzCj+D,EAAE,aAKV6D,EAAcH,sBAAsB/C,IACnC,yBAAKH,UAAWV,EAAQgG,SACtB,yBAAKtF,UAAWV,EAAQg7E,WACtB,kBAACl0E,EAAA,EAAD,CAAYpG,UAAWV,EAAQ05E,YAAax5E,EAAE,SAC9C,yBAAKQ,UAAWV,EAAQi7E,WACtB,kBAAC,KAAD,CACEj7E,QAAS,CAAEc,KAAMd,EAAQsW,MACzBS,eAAe,YACfzU,MAAOA,EACPwH,SA3JO,SAAC4K,EAAON,GAC3BtC,EAASsC,KA4JG,kBAACgE,GAAA,EAAD,eACEpY,QAAS,CACPc,KAAMd,EAAQ+kE,cACdptD,QAAS3X,EAAQmlE,iBACjBrvD,SAAU9V,EAAQ8V,SAClBymD,iBAAkBv8D,EAAQqlE,wBAE5B39D,MAAOxH,EAAE,iBACLqlE,GAnOK,KAqOX,kBAACntD,GAAA,EAAD,eACEpY,QAAS,CACPc,KAAMd,EAAQ+kE,cACdptD,QAAS3X,EAAQmlE,iBACjBrvD,SAAU9V,EAAQ8V,SAClBymD,iBAAkBv8D,EAAQqlE,wBAE5B39D,MAAOxH,EAAE,kBACLqlE,GA5OM,OAiPhB,kBAAC,mBAAD,CACEoX,OAAQ,WACDN,IAAmB,IACxB1pE,EAAgBzS,EAAE,UAAW,CAC3BkB,QAAS,aAGbikB,KAvGW,WACrB,GAAKu2D,IAAqBS,IAAmB,IAAWtqB,EAAxD,CACA,IAAM6qB,EApJiB,IAoJNt6E,EAEX8wB,EACJrvB,GAAiBA,EAAcH,sBAC3BG,EAAcH,sBAAsByvB,SACpCtvB,EAAcH,sBAAsB/C,GACpC,KAEAwqE,EACJyQ,IAAqBA,GAAkBhO,wBACnCgO,GAAkBhO,wBAAwBzC,kBAC1C,KAEN,GAAIuR,EACF,OAAOlC,GAAqB,CAC1BtnD,gBAAiBA,EACjB10B,MAAOqzD,EAAWrzD,OA9JJ,UA+Jd2sE,kBAAmBA,EACnBvgD,UAAWinC,EAAWjnC,UACtBzc,KAAM0jD,EAAWv3C,WAAWrU,MAC5BszE,mBAAoB1nB,EAAW0nB,mBAC/BD,cAAeznB,EAAWynB,gBAI9B,IAAMoB,EAzKwB,aA0K5BO,GAA2CyB,EA3KV,gBACL,WA8K9B,OAAOlC,GAAqB,CAC1BtnD,gBAAiBA,EACjB10B,MAAOqzD,EAAWrzD,OA9KF,UA+KhB2sE,kBAAmBA,EACnBvgD,UAAWinC,EAAWjnC,UACtBzc,KAAM0jD,EAAWv3C,WAAWrU,MAC5BszE,mBAAoB1nB,EAAW0nB,mBAC/BD,cAAeznB,EAAWynB,cAC1BmB,UAAWV,EACXW,SAAUA,KA8DIiC,IAEN,kBAAC17E,EAAA,EAAD,CACE0H,SA3PY,IA4PTvG,IAAkC23E,IAClCloB,EAEH3wD,QAAQ,WACR1C,MAAM,UACNiC,QAAS,kBAAM07E,IAAmB,IAClCr8E,QAAS,CAAEc,KAAMd,EAAQi+D,aAExB/9D,EAAE,uBAIP,kBAACwW,GAAD,CAAUpU,MAAOA,EAAOiO,MAzQT,GA0Qb,kBAAC,GAAD,OAGF,kBAACmG,GAAD,CAAUpU,MAAOA,EAAOiO,MA5QR,GA6Qd,yBAAK7P,UAAWV,EAAQ+5E,mBACtB,kBAAC,GAAD,CACEjwE,SAAUsxE,EACVlzE,MAAO,CACL5F,MAAO64E,EACPrxE,SAAU,SAAAgzE,GACR1B,EAAY0B,GACZzB,EAAkB,MAGtB/vD,KAAM,CAAC,gBAAiB,eAEE,IAA1BrD,EAAe1lB,QAAsC,IAAtBymC,EAAWzmC,SAC1C,kBAAC,GAAD,CACE7B,UAAWV,EAAQgkD,YACnB1hD,MAAO23E,EACPxwE,YAAY,SACZK,SAAUuxE,EACVllE,MA7RmB,kBA8RjBglE,EACIlzD,EACA+gB,KAKZ,kBAAC,GAAD,QAGH54B,IACC,kBAAC,GAAD,CACE1R,MAAOA,EACPwtB,aAAc6sC,EACdrtC,SAAU,SAAAhN,GAAM,OAAI69D,GAAoB79D,WGnJvClhB,GA9MGC,aAAW,SAAAC,GAAK,MAAK,CACrCoD,KAAM,CACJ4E,QAAS,OACTG,cAAe,SACfJ,MAAO,OACPD,OAAQ,QAGV04D,QAAQ,aACNx4D,QAAS,OACTE,WAAY,SACZxG,UAAW,sBACXtB,UAAW,aACXmI,aAAc,MACduF,UAAW,QACV9N,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B0H,cAAe,SACf2F,UAAW,SAGfo5D,YAAY,aACVl/D,QAAS,OACTE,WAAY,SACZ5H,SAAU,QACVwH,OAAQ,OACRgK,YAAa,oBACb1R,UAAW,aACXY,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BH,SAAU,OACVwR,YAAa,OACbsd,aAAc,sBAGlBqxC,aAAa,aACX9/D,QAAS,sBACTI,WAAY,OACZF,SAAU,OACVC,WAAY,OACZE,MAAO,WACNhB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BE,QAAS,YACTE,SAAU,SAGd0/D,WAAW,aACT1/D,SAAU,OACVE,WAAY,OACZJ,QAAS,WACT+H,WAAY,QACX1I,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,OACVF,QAAS,YACT4H,aAAe,SAInBg/D,aAAa,aACXz/D,OAAQ,OACRC,MAAO,OACPC,QAAS,OACTE,WAAY,SACZD,eAAgB,WAChByJ,aAAc,QACb1R,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BwH,eAAgB,SAChByJ,aAAc,OACd2tE,cAAgB,SAGpB7X,SAAU,CACRh5D,KAAM,WACNtO,gBAAiBF,EAAM6Y,QAAQhR,WAAW5H,MAC1C+H,QAAS,QAIXuR,UAAW,CACTvR,QAAS,OACTrH,QAAS,OACTwH,cAAe,SACfF,eAAgB,gBAChBupC,SAAU,UAMZ2qB,UAAW,CACTt7D,SAAU,OACVV,OAAQ,OACRa,MAAO,UACPL,QAAS,GAEXu7D,MAAM,aACJn0D,MAAO,OACPypC,SAAU,UACTxxC,EAAMQ,YAAYC,KAAK,MAAO,CAC7BgxC,UAAW,SACXlP,SAAU,SACVv6B,QAAS,QACTD,MAAO,SAGXw3B,QAAQ,aACNv+B,MAAO,UACPD,WAAY,OACZF,SAAU,OACVy4B,WAAY,YACZrvB,cAAe,aACdjK,EAAMQ,YAAYC,KAAK,MAAO,CAC7BI,SAAU,SAGd4iE,UAAW,CACT15C,KAAM,CACJ/hB,QAAS,SAGb07D,UAAW,CACT/iE,QAAS,IACToH,MAAO,iBACP9G,OAAQ,KAEVq7D,SAAU,CACRv0D,MAAO,QACPhH,WAAY,OACZqkC,YAAa,GACb1zB,aAAc,QAGhB4tE,UAAW,CACTv3E,MAAO,QACP2J,aAAc,OACd0zB,YAAa,GAEfib,WAAY,CACV1/C,QAAS,mBACT,UAAW,CACTT,gBAAiB,gBAGrBgB,MAAO,CACL8G,QAAS,UAEXjG,UAAW,CACTlB,SAAU,QAEZojE,aAAc,CACZl8D,MAAO,OACPq9B,YAAa,MACb1zB,aAAc,QAEhB6tE,UAAW,CACTx3E,MAAO,QACP2J,aAAc,QAEhB8tE,YAAa,CACXz3E,MAAO,QACP2J,aAAc,QAEhBkrD,SAAU,CACR90D,OAAQ,OACRoJ,OAAQ,UACR,UAAW,CACThR,gBAAiB,YAIrB2J,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,mBAGV60D,UAAU,eACP38D,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B,sBAAuB,GAGzB,sBAAuB,GAGvB,sBAAuB,GAGvB,sBAAuB,GAGvB,sBAAuB,CACxBiR,aAAc,QAEb,sBAAuB,GAIvB,sBAAuB,SCsOZiC,gBAdS,SAAAtO,GAAK,MAAK,CAChCo6E,kBAAmBp6E,EAAMoB,KAAKg5E,sBAGL,SAAA7rE,GAAQ,MAAK,CACtCuhD,eAAgB,SAAC1uD,EAAMiM,GACrBkB,EAASijD,aAAWpwD,EAAMiM,KAE5B+iD,iBAAkB,SAAAp5B,GAChBzoB,EAASkjD,aAAiB,oBAAqBz6B,KAEjDxoB,iBAAkB,SAAAC,GAAI,OAAIF,EAASrE,GAAwBuE,QAG9CH,EAhWQ,SAAC,GAIjB,IAHLwhD,EAGI,EAHJA,eACAM,EAEI,EAFJA,iBACA5hD,EACI,EADJA,iBAEMvR,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAGE4B,EAAU+P,IAAMsX,WAAW/mB,GAC3BuP,EAAUC,cAERe,EAAoBC,wBAApBD,gBANJ,EAQ0BN,YAAY1F,IAAnCywE,EARH,sBAS0B/qE,YAAYzF,IAAnCywE,EATH,sBAU0BhrE,YAAYxF,IAAnC0F,EAVH,sBAYoBV,IAAMrQ,SAAS,GAZnC,mBAYGiX,EAZH,KAYSgiD,EAZT,OAaoB5oD,IAAMrQ,UAAS,GAbnC,mBAaG7B,EAbH,KAaSwzB,EAbT,OAc4BthB,IAAMrQ,UAAS,GAd3C,mBAcGopB,EAdH,KAcakqC,EAdb,OAe0BjjD,IAAMrQ,UAAS,GAfzC,mBAeG8xB,EAfH,KAeYzgB,EAfZ,OAiBsBL,YAASxF,GAA0B,CAC3DsjC,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACT8E,KAAMA,KAJFrI,EAjBJ,EAiBIA,KAAMsC,EAjBV,EAiBUA,QA0CR4qE,EAAsB,SAAAltE,GAC1B6D,aAAaC,QAAQ,wBAAyBI,KAAKC,UAAUnE,IAC7DmB,EAAiBnB,GACjBoT,YAAW,kBAAM7R,EAAQ4rE,OAAM,OAsD3B1nB,EAAkB,SAAAC,GACtBp4C,OAAOC,KAAKm4C,GAAkBzlD,KAAI,SAAAwN,GAChCg1C,EAAeh1C,EAAOi4C,EAAiBj4C,QAoC3C,OACE,yBAAKnd,UAAWV,EAAQc,MACtB,kBAAC,GAAD,CACEwG,UAAWgsB,EACX/rB,gBAAiBvH,EAAQuH,kBAE3B,kBAAC,GAAD,MACA,yBAAK7G,UAAWV,EAAQk+D,SACtB,yBAAKx9D,UAAWV,EAAQ4kE,aACtB,kBAAC99D,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQm+D,cACzCj+D,EAAE,qBAGP,yBAAKQ,UAAWV,EAAQilE,cACtB,kBAAC9jE,EAAA,EAAD,CACEC,QAAQ,WACR1C,MAAM,UACNsB,QAAS,CAAEc,KAAMd,EAAQi+D,YACzBt9D,QAAS,SAAAoJ,GACPA,EAAEojB,kBApIZ0oC,EAAgB,CACdsnB,kBAAmB,CACjBG,oBAAqB,CACnB,yBAAyB,GAE3BvsE,SAAU,CACRysE,QAAQ,MAId1oB,GAAY,GACZ3hC,GAAQ,KA6HCjzB,EAAE,yBAIT,yBAAKQ,UAAWV,EAAQklE,UACtB,kBAACvK,GAAA,EAAD,CAAgBx1D,UAAU,MAAMnF,QAAS,CAAEc,KAAMd,EAAQiX,YACvD,kBAAC2jD,GAAA,EAAD,CAAOl6D,UAAWV,EAAQ45D,MAAOnkD,aAAW,gBAC1C,kBAAColD,GAAA,EAAD,CAAWn6D,UAAWV,EAAQq6D,WAC5B,kBAACS,GAAA,EAAD,KAjOS,SAAA96D,GACrB,MAAO,CACL,CACE0H,MAAO,OACPszD,MAAO,OACPD,cAAe/6D,EAAQg6D,UAEzB,CACEtyD,MAAO,QACPqzD,cAAe/6D,EAAQg9E,UACvBhiB,MAAO,QAET,CACEtzD,MAAO,QACPqzD,cAAe/6D,EAAQshE,SACvBtG,MAAO,QAET,CACEtzD,MAAO,eACPszD,MAAO,OACPD,cAAe/6D,EAAQo6D,YAEzB,CACE1yD,MAAO,mBACPqzD,cAAe/6D,EAAQ0hE,YACvB1G,MAAO,QAET,CACEtzD,MAAO,qBACPqzD,cAAe/6D,EAAQ0hE,YACvB1G,MAAO,QAET,CAAEtzD,MAAO,UAAWszD,MAAO,UAkMdC,CAAej7D,GAASqQ,KAAI,SAAA4sB,GAAO,OAClC,kBAACi+B,GAAA,EAAD,CACE7iD,IAAK4kB,EAAQv1B,MACbszD,MAAO/9B,EAAQ+9B,MACfxyD,MAAO,CAAET,cAAe,IACxBrH,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQi9B,QACRA,EAAQ89B,gBAGT76D,EAAE+8B,EAAQv1B,aAKnB,kBAACyzD,GAAA,EAAD,KACG/qD,GACCA,EAAKpM,gBACLoM,EAAKpM,eAAeqM,KAAI,SAAAtM,GAAa,OACnC,kBAAC+2D,GAAA,EAAD,CACEziD,IAAKtU,EAAclD,GACnBb,QAAS,CAAEc,KAAMd,EAAQs6D,WAEzB,kBAACY,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQg6D,UAEVgB,MAAM,QAELj3D,EAAc0M,UARjB,IAQ6B1M,EAAc2M,UAE3C,kBAACwqD,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQg9E,WAEVhiB,MAAM,QAELj3D,EAAc6M,OAEjB,kBAACsqD,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQi9E,WAEVjiB,MAAM,QAELj3D,EAAc8M,aAEjB,kBAACqqD,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQk9E,aAEVliB,MAAM,QAELj3D,EAAc4M,aAEjB,kBAACuqD,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQqhE,eAEVrG,MAAM,QAELj3D,EAAc+M,iBAEjB,kBAACoqD,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQk9E,aAEVliB,MAAM,QAELj3D,EAAcgN,SAAW,KAAO,OAEnC,kBAACmqD,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWV,EAAQ65D,UACnBmB,MAAM,SAEN,yBACExyD,MAAO,CAAE9C,QAAS,cAAe0J,aAAc,SAE/C,kBAAC3O,EAAA,EAAD,CACEC,UAAWV,EAAQ+9C,WACnBI,oBAAoB,EACpBC,oBAAoB,EACpB3oC,aAAW,OACX9U,QAAS,SAAAoJ,GACPA,EAAEojB,kBACF2nC,GAAY,GApQf,SAAA/wD,GACrBovB,GAAQ,GACR0iC,EAAgB,CACdsnB,kBAAkB,eACbp5E,EADY,CAEfu5E,oBAAqB,CACnB,yBAAyB,GAE3BvsE,SAAU,CACRysE,QAAqB,OAAbz5E,QAAa,IAAbA,OAAA,EAAAA,EAAegN,YAAY,OA4PjBqyD,CAAer/D,KAGjB,kBAAC,GAAD,OAEF,kBAACtD,EAAA,EAAD,CACE09C,oBAAoB,EACpBC,oBAAoB,EACpB19C,UAAWV,EAAQ+9C,WACnBtoC,aAAW,SACX9U,QAAS,SAAAoJ,GA9KE,IAAAyH,EA+KTzH,EAAEojB,kBA9K1BrrB,EAAQ,CACNlD,MAAM,yBACNuB,YAAY,GAAD,QAHoBqR,EAgLkBzN,GA7K5B0M,UAAV,YAAuBe,EAAKd,UACvCrQ,iBAAkB,SAClBC,iBAAkB,SACjBsT,MAAK,kBACNypE,EAAoB,CAAE1pE,UAAW,CAAEyf,gBAAiB5hB,EAAK3Q,MAAQ+S,MAC/D,WACEjB,EAAgBzS,EAAE,4CAA6C,CAC7DkB,QAAS,YAEPgP,EAAKpM,eAAezB,QAAU,GAAKkW,GACrC/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,IAEf/F,EAAQ,CAAE+F,iBAiKI,kBAAC,GAAD,aAMX9Y,GACC,kBAAC,GAAD,CACEirB,SAAUA,EACV/qB,QA/PO,WACrBszB,GAAQ,IA+PMxzB,KAAMA,EACN+rB,SAAU,SAAAhN,IAvPF,SAAAA,GACtB,IAAMtO,EAAI,eAAQsO,GAClBtO,EAAKW,SAAWX,EAAKW,SAASysE,cACvBptE,EAAKktE,2BACLltE,EAAKU,gBAEP8Z,UA8BIxa,EAAKsD,WACZnB,EAAoB,CAClBoB,UAAW,CAAE5P,cAAeqM,KAC3BwD,MAAK,WACNf,GAAW,GACXyqE,EAAoB5+D,GACpB/L,EAAgBzS,EAAE,4CAA6C,CAC7DkB,QAAS,YAEXsR,IACAygB,GAAQ,OAvCViqD,EAAoB,CAClBzpE,UAAW,CAAE5P,cAAeqM,KAE3BwD,MAAK,SAAAxD,GACJyC,GAAW,GACXF,EAAgBzS,EAAE,4CAA6C,CAC7DkB,QAAS,YAEXsR,IACAygB,GAAQ,GACRmqD,EAAoB,eACf5+D,EADc,CAEjB7d,GAAIuP,EAAKA,KAAKgtE,oBAAoBv8E,SAGrCgpB,OAAM,SAAA5hB,GAGH,0DADAA,EAAM+3C,QAORrtC,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,UALT+xD,EAAiB,CAAEviD,MAAO,oCA6NlB6sE,CAAgB/+D,QAOzBtO,GACC,kBAAC,GAAD,CACEqI,KAAMA,EAAO,EACb4wC,MAAOj5C,EAAKstE,oBACZ5zE,SAjLgB,SAACC,EAAG0O,GAC9B/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,IA8KLK,OAAQ1I,EAAKpM,eAAezB,OAC5BwW,MAAO3I,EAAKutE,uBAAuB5kE,cCtQlCvb,GA7IGC,aAAW,SAAAC,GAAK,MAAK,CACrCoD,KAAM,CACJ4E,QAAS,OACTG,cAAe,SACfJ,MAAO,OACPD,OAAQ,QAEV04D,QAAS,CACPx4D,QAAS,OACTE,WAAY,SACZxG,UAAW,sBACXtB,UAAW,aACXmI,aAAc,MACduF,UAAW,QAEbo5D,YAAa,CACXl/D,QAAS,OACTE,WAAY,SACZ5H,SAAU,QACVwH,OAAQ,OACRgK,YAAa,oBACb1R,UAAW,aACXY,MAAO,WAETy/D,aAAc,CACZ9/D,QAAS,sBACTI,WAAY,OACZF,SAAU,OACVC,WAAY,OACZE,MAAO,WAETu/D,WAAY,CACV1/D,SAAU,OACVE,WAAY,OACZJ,QAAS,WACT+H,WAAY,QAEd6+D,aAAc,CACZz/D,OAAQ,OACRC,MAAO,OACPC,QAAS,OACTE,WAAY,SACZD,eAAgB,WAChByJ,aAAc,QAEhB81D,SAAU,CACRh5D,KAAM,WACNtO,gBAAiBF,EAAM6Y,QAAQhR,WAAW5H,MAC1C+H,QAAS,QAEXuR,UAAW,CACTvR,QAAS,OACTrH,QAAS,OACTwH,cAAe,SACfF,eAAgB,gBAChBupC,SAAU,OACVzpC,MAAO,OACPD,OAAQ,QAEVq0D,UAAW,CACTt7D,SAAU,OACVV,OAAQ,OACRa,MAAO,UACPL,QAAS,GAEXu7D,MAAM,aACJn0D,MAAO,QACN/H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BgxC,UAAW,SACXzpC,QAAS,UAGbu3B,QAAS,CACPv+B,MAAO,UACPD,WAAY,OACZF,SAAU,OACVy4B,WAAY,YACZrvB,cAAe,aAEjBw5D,UAAW,CACT15C,KAAM,CACJ/hB,QAAS,SAGb07D,UAAW,CACT/iE,QAAS,IACToH,MAAO,iBACP9G,OAAQ,KAEVq7D,SAAU,CACRv0D,MAAO,QACPhH,WAAY,OACZqkC,YAAa,GACb1zB,aAAc,QAEhB4tE,UAAW,CACTv3E,MAAO,QACP2J,aAAc,OACd0zB,YAAa,GAEfib,WAAY,CACV1/C,QAAS,mBACT,UAAW,CACTT,gBAAiB,gBAGrBgB,MAAO,CACL8G,QAAS,UAEXjG,UAAW,CACTlB,SAAU,QAEZojE,aAAc,CACZl8D,MAAO,OACPq9B,YAAa,MACb1zB,aAAc,QAEhB6tE,UAAW,CACTx3E,MAAO,QACP2J,aAAc,QAEhB8tE,YAAa,CACXz3E,MAAO,QACP2J,aAAc,QAEhBkrD,SAAU,CACR90D,OAAQ,OACRoJ,OAAQ,UACR,UAAW,CACThR,gBAAiB,YAGrBggF,OAAQ,CACNz2E,OAAQ,SAEVI,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,uBCEGq4E,GAxHQ,SAAAv4E,GAAU,IAE7B8K,EAKE9K,EALF8K,KACA0tE,EAIEx4E,EAJFw4E,aACAC,EAGEz4E,EAHFy4E,kBACAtlE,EAEEnT,EAFFmT,KACAulE,EACE14E,EADF04E,oBAN4B,EAQEnsE,IAAMrQ,UAAS,GARjB,mBAQbszD,GARa,WASxB90D,EAAUxC,KATc,EAUlByC,cAALC,EAVuB,oBAY9B,OACE,kBAACy6D,GAAA,EAAD,CAAgBx1D,UAAU,MAAMnF,QAAS,CAAEc,KAAMd,EAAQiX,YACvD,kBAAC2jD,GAAA,EAAD,CAAOl6D,UAAWV,EAAQ45D,MAAOnkD,aAAW,gBAC1C,kBAAColD,GAAA,EAAD,KACE,kBAACC,GAAA,EAAD,KCrCgB,SAAA96D,GACxB,MAAO,CACL,CACE0H,MAAO,OACPszD,MAAO,OACPD,cAAe/6D,EAAQg6D,UAEzB,CACEtyD,MAAO,QACPqzD,cAAe/6D,EAAQg9E,UACvBhiB,MAAO,QAET,CACEtzD,MAAO,QACPqzD,cAAe/6D,EAAQshE,SACvBtG,MAAO,QAET,CACEtzD,MAAO,qBACPqzD,cAAe/6D,EAAQshE,SACvBtG,MAAO,QAET,CAAEtzD,MAAO,UAAWszD,MAAO,UDgBlBijB,CAAWj+E,GAASqQ,KAAI,SAAA4sB,GAAO,OAC9B,kBAACi+B,GAAA,EAAD,CACE7iD,IAAK4kB,EAAQv1B,MACbszD,MAAO/9B,EAAQ+9B,MACfxyD,MAAO,CAAET,cAAe,IACxBrH,UAAWsG,KACThH,EAAQ65D,UACR75D,EAAQi9B,QACRA,EAAQ89B,gBAGT76D,EAAE+8B,EAAQv1B,aAKnB,kBAACyzD,GAAA,EAAD,KACG/qD,GACCA,EAAKpM,gBACLoM,EAAKpM,eAAeqM,KAAI,SAAA6tE,GAAI,OAC1B,kBAACpjB,GAAA,EAAD,CAAUziD,IAAK6lE,EAAKr9E,GAAIb,QAAS,CAAEc,KAAMd,EAAQs6D,WAC/C,kBAACY,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQg6D,UACjDgB,MAAM,QAELkjB,EAAKztE,UALR,IAKoBytE,EAAKxtE,UAEzB,kBAACwqD,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQg9E,WACjDhiB,MAAM,QAELkjB,EAAKttE,OAER,kBAACsqD,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQi9E,WACjDjiB,MAAM,QAELkjB,EAAKrtE,aAGR,kBAACqqD,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWsG,KAAWhH,EAAQ65D,UAAW75D,EAAQi9E,WACjDjiB,MAAM,QAENkjB,EAAKntE,SAAW,KAAO,OAIzB,kBAACmqD,GAAA,EAAD,CACE1yD,MAAO,CAAET,cAAe,EAAG8H,WAAY,GACvCnP,UAAWV,EAAQ65D,UACnBmB,MAAM,SAEN,yBAAKxyD,MAAO,CAAE9C,QAAS,cAAe0J,aAAc,SAClD,kBAAC3O,EAAA,EAAD,CACEC,UAAWV,EAAQ+9C,WACnBI,oBAAoB,EACpBC,oBAAoB,EACpB3oC,aAAW,OACX9U,QAAS,SAAAoJ,GACPA,EAAEojB,kBACF2nC,GAAY,GACZgpB,EAAaI,KAGf,kBAAC,GAAD,OAEF,kBAACz9E,EAAA,EAAD,CACE09C,oBAAoB,EACpBC,oBAAoB,EACpB19C,UAAWV,EAAQ+9C,WACnBtoC,aAAW,SACX9U,QAAS,SAAAoJ,GACPA,EAAEojB,kBACF4wD,EAAkBG,KAGpB,kBAAC,GAAD,eASf9tE,GACC,kBAAC,GAAD,CACEqI,KAAMA,EAAO,EACb4wC,MAAOj5C,EAAKstE,oBACZ5zE,SAAU,SAACC,EAAG0O,GAAJ,OAAaulE,EAAoBvlE,IAC3CK,OAAQ1I,EAAKpM,eAAezB,OAC5BwW,MAAO3I,EAAKutE,uBAAuB5kE,UEqH9B1H,gBAdS,SAAAtO,GAAK,MAAK,CAChCo7E,UAAWp7E,EAAMoB,KAAKg6E,UACtBp6E,cAAehB,EAAMgB,kBAGI,SAAAuN,GAAQ,MAAK,CACtCuhD,eAAgB,SAAC1uD,EAAMiM,GACrBkB,EAASijD,aAAWpwD,EAAMiM,KAE5B+iD,iBAAkB,SAAAp5B,GAChBzoB,EAASkjD,aAAiB,YAAaz6B,QAI5B1oB,EAjOD,SAAA/L,GAAU,IACdutD,EAAoDvtD,EAApDutD,eAAgB9uD,EAAoCuB,EAApCvB,cAAeovD,EAAqB7tD,EAArB6tD,iBAEjCnzD,EAAUxC,KAHK,EAITyC,cAALC,EAJc,oBAKf4B,EAAU+P,IAAMsX,WAAW/mB,GACzBuQ,EAAoBC,wBAApBD,gBANa,EAQSd,IAAMrQ,UAAS,GARxB,mBAQd8xB,EARc,KAQLzgB,EARK,OASGhB,IAAMrQ,UAAS,GATlB,mBASd7B,EATc,KASRwzB,EATQ,OAUWthB,IAAMrQ,UAAS,GAV1B,mBAUdopB,EAVc,KAUJkqC,EAVI,OAWGjjD,IAAMrQ,SAAS,GAXlB,mBAWdiX,EAXc,KAWRgiD,EAXQ,OAaApoD,YAAY1F,IAA1ByxE,EAbc,sBAcA/rE,YAAYzF,IAA1ByxE,EAdc,sBAeAhsE,YAAYxF,IAA1ByxE,EAfc,sBAgBK9rE,YAASxF,GAA0B,CAC3DsjC,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACT8E,KAAMA,KAJFrI,EAhBa,EAgBbA,KAAMsC,EAhBO,EAgBPA,QAQRmjD,EAAkB,SAAAC,GACtBp4C,OAAOC,KAAKm4C,GAAkBn9B,SAAQ,SAAA9a,GACpCg1C,EAAeh1C,EAAOi4C,EAAiBj4C,QA4DrC0gE,EAAgB,SAAAt2E,GAElBA,GACkB,0DAAlBA,EAAM+3C,QAENmT,EAAiB,CAAEviD,MAAO,iCAI5B+B,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,WAgEb,OACE,yBAAKV,UAAWV,EAAQc,MACtB,kBAAC,GAAD,MAEA,kBAAC,GAAD,CACEwG,UAAWgsB,EACX5yB,UAAWV,EAAQ49E,OACnBr2E,gBAAiBvH,EAAQuH,kBAG3B,yBAAK7G,UAAWV,EAAQk+D,SACtB,yBAAKx9D,UAAWV,EAAQ4kE,aACtB,kBAAC99D,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQm+D,cACzCj+D,EAAE,WAGP,yBAAKQ,UAAWV,EAAQilE,cACtB,kBAAC9jE,EAAA,EAAD,CACEC,QAAQ,WACR1C,MAAM,UACNsB,QAAS,CAAEc,KAAMd,EAAQi+D,YACzBt9D,QAAS,SAAAoJ,GACPA,EAAEojB,kBAvJZ0oC,EAAgB,CACdsoB,UAAW,CACTptE,SAAU,CACRysE,QAAQ,MAKd1oB,GAAY,GACZ3hC,GAAQ,KAkJCjzB,EAAE,eAKT,kBAAC,GAAD,CACEkQ,KAAMA,EACN0tE,aAtJe,SAAAI,GACnBppB,GAAY,GACZ3hC,GAAQ,GACR0iC,EAAgB,CACdsoB,UAAU,eACLD,EADI,CAEPntE,SAAU,CACRysE,QAAY,OAAJU,QAAI,IAAJA,OAAA,EAAAA,EAAMntE,YAAY,QAgJ5BgtE,kBA1IoB,SAAAvsE,GACxB1P,EAAQ,CACNlD,MAAM,eACNuB,YAAY,GAAD,OAAKqR,EAAKf,UAAV,YAAuBe,EAAKd,UACvCrQ,iBAAkB,SAClBC,iBAAkB,SACjBsT,MAAK,WACNyqE,EAAW,CAAE1qE,UAAW,CAAEyf,gBAAiB5hB,EAAK3Q,MAAQ+S,MAAK,WAC3DjB,EAAgBzS,EAAE,kCAAmC,CACnDkB,QAAS,YAEPgP,EAAKpM,eAAezB,QAAU,GAAKkW,GACrC/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,IAEf/F,EAAQ,CAAE+F,gBA0HZA,KAAMA,EACNulE,oBArHsB,SAAAvlE,GAC1B/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,MAoHZ9Y,GACC,kBAAC,GAAD,CACEirB,SAAUA,EACV/qB,QAAS,kBAAMszB,GAAQ,IACvBxzB,MAAM,EACN+rB,SAhEgB,SAAAhN,GACtB,IAAMtO,EAAI,eAAQsO,IAClBtO,EAAKW,SAAWX,EAAKW,SAASysE,OAC9B3qE,GAAW,GAEP+X,WACKxa,EAAKsD,kBACLtD,EAAKU,gBAvBU,SAAAV,GACxBkuE,EAAW,CAAE3qE,UAAW,CAAE5P,cAAeqM,KACtCwD,MAAK,WACJlB,IACAC,EAAgBzS,EAAE,kCAAmC,CACnDkB,QAAS,YAEX+xB,GAAQ,GACRtgB,GAAW,MAEZgX,OAAM,SAAA5hB,GACL4K,GAAW,GACX0rE,EAAct2E,MAYhBu2E,CAAkBpuE,IAhDI,SAAAA,GACxBguE,EAAW,CAAEzqE,UAAW,CAAE5P,cAAeqM,KACtCwD,MAAK,WACA6E,GACF/F,EAAQ,CACN+F,KAAMA,EAAO,IAEfgiD,EAAQhiD,EAAO,IAEf/F,IAEFC,EAAgBzS,EAAE,kCAAmC,CACnDkB,QAAS,YAEX+xB,GAAQ,GACRtgB,GAAW,GACXH,OAEDmX,OAAM,SAAA5hB,GACL4K,GAAW,GACX0rE,EAAct2E,MAoChBw2E,CANc,eACT//D,EADS,CAEZ2U,QAAStvB,EAAcH,sBAAsB/C,GAC7CwU,SAAUlH,GACVwC,YAAa,aCrJN+tE,GA5BI,WAAO,IAAD,EACiBl9E,mBAAS,IAD1B,mBAChBm9E,EADgB,KACFC,EADE,KAGvBhqE,qBAAU,WACR,IAAMiqE,EAAS92B,SAAS+2B,cAAc,UACtCD,EAAOl4E,IAAM7B,GACb+5E,EAAO/qE,OAAQ,EAEfi0C,SAASokB,KAAK4S,YAAYF,KACzB,IAMH,OACE,6BACE,8BACEr2E,MAAO,CAAE/C,MAAO,QAASD,OAAQ,SACjClD,MAAOq8E,EACP70E,SATe,SAAAC,GACnB60E,EAAgB70E,EAAEC,OAAO1H,QASrBmH,YAAY,kCAEd,yBAAKu1E,wBAAyB,CAAEC,OAAQN,OC0C/BnhF,GAlEGC,aAAW,SAAAC,GAAK,oBAAK,CACrC,UAAW,CACT,IAAK,CACHI,UAAW,cAEbquE,KAAM,CACJxtE,OAAQ,EACRN,QAAS,IAGbyC,MAAI,GACF4E,QAAS,OACTC,eAAgB,SAChBhH,OAAQ,SACRwwC,UAAW,UAJT,cAKDzxC,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,WANR,cAQDjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,WATR,GAYJsY,WAAS,GACPxR,MAAO,QACPxH,SAAU,OACVI,QAAS,UAHF,cAINX,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,QALF,cAON/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,QARF,cAUN/H,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BsH,MAAO,OACPpH,QAAS,WAZJ,GAeTO,OAAK,GACHH,WAAY,QADT,cAEFf,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,WAHT,cAKFb,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BI,SAAU,WANT,GASL2gF,WAAS,GACPvgF,OAAQ,UADD,cAENjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,WAHH,cAKNjB,EAAMQ,YAAYC,KAAK,MAAQ,CAC9BQ,OAAQ,UANH,GASTqrD,UAAQ,GACN/jD,aAAc,OADR,cAELvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,QAHV,cAKLvI,EAAMQ,YAAYC,KAAK,MAAQ,CAC9B8H,aAAc,QANV,OCQKk5E,GAxDW,WACxB,IAAMn/E,EAAUxC,KADc,EAElByC,cAALC,EAFuB,oBAI9B,OACE,oCACE,kBAAC,GAAD,MACA,yBAAKQ,UAAWV,EAAQc,MACtB,yBAAKJ,UAAWV,EAAQiX,WACtB,kBAACnQ,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,sCAEL,kBAAC4G,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQk/E,WAC5Ch/E,EAAE,8CAEL,kBAAC4G,EAAA,EAAD,CAAY1F,QAAQ,SAClB,4BACE,wBAAIV,UAAWV,EAAQgqD,UAAW9pD,EAAE,aACpC,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EACC,sEAGJ,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EACC,yGAGJ,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EACC,6IAGJ,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EACC,sFAGJ,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EACC,mGAGJ,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EACC,wGCiBHk/E,GAhEW,WACxB,IAAMp/E,EAAUxC,KADc,EAElByC,cAALC,EAFuB,oBAI9B,OACE,oCACE,kBAAC,GAAD,MACA,yBAAKQ,UAAWV,EAAQc,MACtB,yBAAKJ,UAAWV,EAAQiX,WACtB,kBAACnQ,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCsB,EAAE,sCAEL,kBAAC4G,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQk/E,WAC5Ch/E,EAAE,4CAEL,kBAAC4G,EAAA,EAAD,CAAY1F,QAAQ,SAClB,4BACE,wBAAIV,UAAWV,EAAQgqD,UAAW9pD,EAAE,gBACpC,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EACC,4GAGJ,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EACC,iEAGJ,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EACC,yEAGJ,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EAAE,iCAEL,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EACC,6FAGJ,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EACC,sFAGJ,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EACC,mGAGJ,wBAAIQ,UAAWV,EAAQgqD,UACpB9pD,EACC,qG,qBCZH1C,GA9CGC,YAAW,CAC3BmpC,MAAO,CACLnhC,MAAO,QACPD,OAAQ,QACRoqB,eAAgB,QAChBC,iBAAkB,YAClBC,mBAAoB,SACpB/xB,aAAc,MACdH,gBAAiB,UACjBqI,aAAc,QAEhBrH,MAAO,CACLqH,aAAc,QAEhB9F,YAAa,CACX8F,aAAc,QAEhB8P,SAAU,CACRrQ,QAAS,OACTE,WAAY,MACZK,aAAc,QAEhBo5E,aAAc,CACZ9gF,SAAU,OACVW,YAAa,QAEfogF,aAAc,CACZvgF,UAAW,OAEbwgF,eAAgB,CACdt5E,aAAc,QAEhBu5E,UAAW,CACT95E,QAAS,OACTE,WAAY,SACZD,eAAgB,gBAChBM,aAAc,QAEhBw5E,UAAW,CACThhF,WAAY,UAEdihF,aAAc,CACZz5E,aAAc,UCgHH05E,GA9IY,SAAC,GAAoB,IAAlBvvE,EAAiB,EAAjBA,KAAMjM,EAAW,EAAXA,KAC5BnE,EAAUxC,KAD6B,EAE3ByC,cAF2B,mBAEtCC,EAFsC,KAGvC8S,EAHuC,KAGfnH,SAExB6S,EAASva,EAAKua,OAEduG,EAAQvG,EAAOuG,MACfrK,EACJqK,GAASA,EAAMrK,UACXvB,KAAO4L,EAAMrK,WAAW4J,OAAO,cAC/B,KACA3J,EACJoK,GAASA,EAAMpK,QAAUxB,KAAO4L,EAAMpK,SAAS2J,OAAO,cAAgB,KAElEytB,EAAevzB,EAAOuzB,aACxB54B,KAAOqF,EAAOuzB,cAAcztB,OAAO,cACnC,KACEnJ,EAAYqD,EAAOrD,UACrBhC,KAAOqF,EAAOrD,UAAUA,UAAW,SAASmJ,OAAO,QACnD,KACElJ,EAAWoD,EAAOrD,UAAYqD,EAAOrD,UAAUC,SAAW,KAC1DC,EAAWmD,EAAOrD,UAAYqD,EAAOrD,UAAUE,SAAW,KAC1DlB,EAAcjK,EAAKiK,YACnBu3B,EAAuBxhC,EAAK,yBAC5BqK,EAAkBrK,EAAKqK,gBACvBmlE,EAA2BxvE,EAAK,6BAChCyvE,EAAUxlE,EAAY4tB,aACxB5uB,KAAOgB,EAAY4tB,cAAczjB,OAAO,QACxC,KACEs7D,EAAWzlE,EAAY8tB,eACzB9uB,KAAOgB,EAAY8tB,gBAAgB3jB,OAAO,QAC1C,KAEEu7D,EAA6BvzC,GACjCx5B,EACAqH,EACAu3B,GAGF,OACE,oCACE,yBACElxC,UAAWV,EAAQ4mC,MACnBp+B,MAAO,CACLopB,gBAAgB,OAAD,OAASvX,EAAYG,WAAWrU,MAAhC,OAGhB,IAEH,kBAACW,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQpB,QAC/CmhF,EAA2BnhF,OAE9B,kBAACkI,EAAA,EAAD,CAAY1F,QAAQ,QAAQpB,QAAS,CAAEc,KAAMd,EAAQG,cAEjDqsC,GACEx5B,EACAyH,EACAmlE,GACAt1E,UAILy1E,EAA2BhqE,YACxBgqE,EAA2BhqE,SAASxT,QACpC,yBAAK7B,UAAWV,EAAQ+V,UACtB,kBAAC,KAAD,CAAwBrV,UAAWV,EAAQq/E,eAC3C,kBAACv4E,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQs/E,cAC5CS,EAA2BhqE,WAKnCgqE,EAA2BlhE,iBACxBkhE,EAA2BlhE,cAActc,QACzC,yBAAK7B,UAAWV,EAAQ+V,UACtB,kBAAC,KAAD,CAAwBrV,UAAWV,EAAQq/E,eAC3C,kBAACv4E,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQs/E,cAC5CS,EAA2BlhE,iBAKjCjE,GAAaC,GAAYo3B,IAC1B,yBAAKvxC,UAAWV,EAAQ0/E,cACtB,kBAAC54E,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQu/E,iBAC/Cr/E,EAAE,eAGJ0a,GAAaC,GACZ,kBAAC/T,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQw/E,YAChD,8BAAOt/E,EAAE,kBAAT,KACA,0BAAMQ,UAAWV,EAAQy/E,WACtB7kE,EADH,WACiBC,IAIpBglE,GACC,oCACE,kBAAC/4E,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQw/E,YAChD,8BAAOt/E,EAAE,YAAT,KACA,0BAAMQ,UAAWV,EAAQy/E,WAAYI,IAEvC,kBAAC/4E,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQw/E,YAChD,8BAAOt/E,EAAE,aAAT,KACA,0BAAMQ,UAAWV,EAAQy/E,WAAYK,KAK1C7tC,GACC,kBAACnrC,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQw/E,YAChD,8BAAOt/E,EAAE,iBAAT,KACA,0BAAMQ,UAAWV,EAAQy/E,WAAYxtC,IAGxC52B,GACC,kBAACvU,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQw/E,YAChD,8BAAOt/E,EAAE,cAAT,KACA,0BAAMQ,UAAWV,EAAQy/E,WAAYpkE,IAGxCC,GACC,kBAACxU,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQw/E,YAChD,8BAAOt/E,EAAE,YAAT,KACA,0BAAMQ,UAAWV,EAAQy/E,WACtBnkE,EADH,IACcpb,EAAEqb,MAOxB,kBAAC,GAAD,CACEu2B,SAAU1hC,EACVw1B,SAAUlnB,EAAOknB,UAAY,MAC7BkQ,YAAY,MCtJdkqC,GAAsB,CAC1BC,MAAO,SACPC,SAAU,WACVC,OAAQ,UACRC,KAAM,QACNC,OAAQ,UACRC,UAAW,aACXC,OAAQ,WCoHK/iF,GAzHGC,aAAW,SAAAC,GAAK,cAAK,CACrCia,SAAO,GACLjS,QAAS,OACT86E,UAAW,OACXniF,QAAS,cACTM,OAAQ,YACR6G,OAAQ,sBALH,cAMJ,4BAA8B,CAC7BnH,QAAS,gBACTmH,OAAQ,uBARL,cAUJ,2BAA6B,CAC5BnH,QAAS,aACTM,OAAQ,MACR6G,OAAQ,sBAbL,cAeJ,2BAA6B,CAC5BnH,QAAS,aACTmH,OAAQ,uBAjBL,GAoBP84C,UAAQ,GACN74C,MAAO,OACPpH,QAAS,gBAFH,cAGL,4BAA8B,CAC7B+Q,aAAc,SAJV,cAML,2BAA6B,CAC5BrQ,UAAW,IAPP,cASL,2BAA6B,CAC5BqQ,aAAc,OACdrQ,UAAW,IAXP,GAcRw/C,UAAU,aACR94C,MAAO,QACPzH,SAAU,SACT,4BAA8B,CAC7B0H,QAAS,SAGb+6E,mBAAoB,CAClBx6E,aAAc,OACd0B,cAAe,YACfC,cAAe,UAEjB84E,sBAAuB,CACrBz6E,aAAc,OACdpI,OAAQ,oBACRQ,QAAS,cACTN,aAAc,OAEhB4iF,aAAc,CACZ16E,aAAc,QAEhBopE,WAAY,CACV3pE,QAAS,OACTE,WAAY,SACZD,eAAgB,gBAChBM,aAAc,OAEhB26E,UAAW,CACTliF,MAAO,QACPiJ,cAAe,YACfC,cAAe,UACf3B,aAAc,QAEhB46E,eAAgB,CACd/zD,aAAc,oBACd7mB,aAAc,MACd8B,cAAe,MACf,eAAgB,CACdlK,OAAQ,IAGZijF,cAAe,CACb50E,KAAM,UACN,iBAAkB,CAChBzF,UAAW,UAEb,eAAgB,CACdA,UAAW,QAGfs6E,SAAU,CACRr7E,QAAS,OACTE,WAAY,SACZD,eAAgB,gBAChBtH,QAAS,YACT4H,aAAc,OACdlI,aAAc,MACdmxC,SAAU,SACV5vC,SAAU,WACV,UAAW,CACTA,SAAU,WACVoG,QAAS,QACTM,QAAS,KACTR,OAAQ,OACRC,MAAO,OACP2a,KAAM,EACN7gB,IAAK,EACLgG,WAAY7H,EAAMuB,OAAOP,MACzB+wB,QAAS,OAGbksB,aAAc,CACZ11C,aAAc,QAEhB2/B,SAAU,CACRrnC,SAAU,QAEZ8yE,aAAc,CACZ3yE,MAAOhB,EAAMuB,OAAOP,OAEtBuxB,WAAY,CACV1xB,SAAU,OACVqQ,OAAQ,e,+BC7CGpR,GAxEGC,YAAW,CAC3Bka,QAAQ,aACNjS,QAAS,OACTE,WAAY,SACZD,eAAgB,gBAChBH,OAAQ,OACRnH,QAAS,kBACR,2BAA6B,CAC5BA,QAAS,iBACTwH,cAAe,iBACfD,WAAY,SACZJ,OAAQ,SAGZw7E,aAAa,aACXt7E,QAAS,OACTE,WAAY,UACX,2BAA6B,CAC5BC,cAAe,cACfF,eAAgB,kBAGpB0I,KAAK,aACH7I,OAAQ,OACRtG,YAAa,QACZ,2BAA6B,CAC5BP,OAAQ,IAGZm/C,QAAQ,aACNp4C,QAAS,OAET1H,SAAU,QACT,2BAA6B,CAC5B2H,eAAgB,gBAChBhH,OAAQ,mBAGZsiF,UAAW,CACTv7E,QAAS,QAEX4xB,OAAQ,CACNlxB,WAAY,OACZ1H,MAAO,WAETwiF,WAAY,CACV3iF,SAAU,QAEZ68B,WAAY,CACV18B,MAAO,WAETyiF,mBAAoB,CAClBziF,MAAO,WAET0iF,OAAQ,CACN1iF,MAAO,UACPK,UAAW,OAEbsiF,WAAY,CACV3iF,MAAO,WAET4iF,kBAAmB,CACjBzjF,OAAQ,EACR,UAAW,CACTA,OAAQ,IAGZgO,SAAU,CACR3M,YAAa,UCxDXqiF,GAAsB,CAC1Bn3E,QAAS,MACT+C,OAAQ,OAGJq0E,GAAqB,CACzBC,IAAK,UACLC,IAAK,UAwHQrwE,gBAZS,SAAAtO,GACtB,MAAO,CACLm4E,WAAYn4E,EAAMoB,KAAK+2E,eAIA,SAAA5pE,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,aAAc+F,EAAOvb,QAI1B+O,EArHA,SAAC,GAYT,IAXLzS,EAWI,EAXJA,MACAqwB,EAUI,EAVJA,eACAisD,EASI,EATJA,WACAtrC,EAQI,EARJA,qBACA+xC,EAOI,EAPJA,2BACAC,EAMI,EANJA,wBACAC,EAKI,EALJA,2BACAC,EAII,EAJJA,wBACAC,EAGI,EAHJA,2BACAC,EAEI,EAFJA,0BACA3zE,EACI,EADJA,KAEMrO,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAEMwR,EAFN,KAIEuwE,IAAiBvkE,OAAOC,KAAKu9D,GAAc,IAAI34E,OAE/CqjC,EAAWq8C,GACb/G,EAAWx8D,OAAOknB,UAClBg8C,EACExoC,EACJ6oC,GAAgB/G,EAAWx8D,OAAO06B,oBAC9B8hC,EAAWx8D,OAAO06B,oBAClBuoC,EAEA72D,EACJm3D,GAAgB/G,EAAWx8D,OAAOoM,UAC9BowD,EAAWx8D,OAAOoM,UAClBk3D,EACAhvE,EACHivE,GAAgB/G,EAAWx8D,OAAO1L,kBACnC8uE,EAEF,OACE,yBAAKphF,UAAWV,EAAQ2X,SACtB,yBAAKjX,UAAWV,EAAQghF,cACrB3yE,KAAUA,EAAK9L,QACd,yBAAKoE,IAAK0H,EAAMxH,IAAI,OAAOnG,UAAWV,EAAQqO,SAE7CzP,GAAS,kBAACkI,EAAA,EAAD,CAAY1F,QAAQ,MAAMlB,EAAEtB,KAE1C,yBAAK8B,UAAWV,EAAQ89C,SACtB,yBAAKp9C,UAAWV,EAAQihF,WACrBn2D,GAAaA,EAAUvoB,OAAS,GAC/B,yBAAK7B,UAAWV,EAAQ6L,UACtB,kBAAC,GAAD,CACE3D,MAAO,CACL5F,MAAOi/E,GAAoBvuE,GAC3BlJ,SAAU,SAAAC,GACR2H,EAAKqC,eAAeytE,GAAmBz3E,EAAEC,OAAO1H,QAC3C44E,GAAeA,EAAWx8D,OAAO1L,iBAMtC48B,EACE,mBACA4xC,GAAmBz3E,EAAEC,OAAO1H,QAP5By/E,EACEP,GAAmBz3E,EAAEC,OAAO1H,UAUpCq5B,eAAgB37B,EAAQshF,kBACxB1lD,gBAAiB57B,EAAQmhF,mBACzBtlD,gBAAiB77B,EAAQqhF,WACzB/1D,KAAM,CAAC,MAAO,OACd5hB,KAAM,MAIX0vC,GACC,kBAAC,GAAD,CACElxC,MAAO,CACL5F,MAAOsjC,EACP97B,SAAU,SAAAC,GACHmxE,GAAeA,EAAWx8D,OAAOknB,SAItCgK,EAAqB,WAAY7lC,EAAEC,OAAO1H,OAHxCu/E,EAA2B93E,EAAEC,OAAO1H,SAM1Cq5B,eAAgB37B,EAAQshF,kBACxB1lD,gBAAiB57B,EAAQo7B,WACzBS,gBAAiB77B,EAAQqhF,WACzB/1D,KAAM8tB,EACN1vC,KAAM,MAIZ,kBAACvI,EAAA,EAAD,CACET,UAAWV,EAAQs3B,OACnB32B,QAAS,kBAAMsuB,GAAkBA,KACjCizD,QAAS,kBAAC,KAAD,CAAoBxhF,UAAWV,EAAQkhF,cAEhD,kBAACp6E,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQohF,QAC5ClhF,EAAE,iBC0DA1C,GAjLGC,aAAW,SAAAC,GAAK,MAAK,CACrCia,QAAQ,aACNhZ,OAAQ,WACRN,QAAS,UACR,2BAA6B,CAC5BA,QAAS,IAGb8jF,YAAY,eACT,2BAA6B,CAC5Bz8E,QAAS,SAGbw/D,SAAU,CACRp4C,aAAc,oBACdthB,UAAW,OACX0jC,SAAU,UACVkzC,eAAgB,OAEhB,uBAAwB,CACtB18E,QAAS,SAGb28E,UAAW,CACT78E,OAAQ,OACR0pC,SAAU,sBAEZ7f,UAAW,CACT5pB,MAAO,OACPD,OAAQ,OACR7G,OAAQ,mBACRJ,SAAU,OACVC,WAAY,OACZT,aAAc,QACdqB,UAAW,OACXxB,gBAAiBF,EAAMuB,OAAOP,MAC9BA,MAAO,QACPgH,QAAS,OACTC,eAAgB,SAChBC,WAAY,UAEdyR,SAAU,CACR3Y,MAAOhB,EAAMuB,OAAOP,MACpBH,SAAU,OACVW,YAAa,QAEfojF,gBAAiB,CACf58E,QAAS,OACTE,WAAY,UAEd28E,cAAe,CACb3kF,gBAAiBF,EAAMuB,OAAOP,OAEhCyZ,IAAI,aACF3M,UAAW,OACXhG,OAAQ,OACRnH,QAAS,WACTL,SAAU,QACVkxC,SAAU,WACT,2BAA6B,CAC5BlxC,SAAU,SAGd6Z,UAAW,CACT4X,QAAS,GAEX3Z,SAAU,CACRrX,WAAY,QAEd+jF,UAAW,CACT/8E,MAAO,SAETg9E,eAAgB,CACd5kF,OAAQ,kBACRuB,UAAW,QAGb8W,OAAQ,CACNxQ,QAAS,OACTF,OAAQ,OACR3H,OAAQ,oBACRE,aAAc,MACdM,QAAS,OACTU,UAAW,QAEb2jF,WAAY,CACV1kF,SAAU,MACVwR,YAAa,oBACbtQ,YAAa,OACbkQ,aAAc,QAEhBuzE,YAAa,CACXpkF,SAAU,OACVC,WAAY,OACZG,OAAQ,IACRoJ,cAAe,MACftJ,WAAY,MACZkJ,cAAe,aACfiH,OAAQ,WAEVg0E,YAAY,aACV/kF,OAAQ,EACRa,MAAOhB,EAAMuB,OAAOP,MACpBH,SAAU,OACVC,WAAY,OACZC,WAAY,MACZJ,QAAS,EACTuQ,OAAQ,UAER,UAAW,CACT/Q,OAAQ,GAGV,QAAS,CACPuI,WAAY,QAGb,4BAA8B,CAC7B,QAAS,CACPV,QAAS,UAIfsmB,OAAQ,CACNtmB,QAAS,OACTE,WAAY,SACZD,eAAgB,gBAChBF,MAAO,QAETo9E,YAAY,aACVp9E,MAAO,SAEN,4BAA8B,CAC7BA,MAAO,SAGXq9E,UAAU,aACRjlF,OAAO,aAAD,OAAeH,EAAMuB,OAAOP,OAClCX,aAAc,MACdQ,SAAU,OACVC,WAAY,OACZC,WAAY,IACZC,MAAOhB,EAAMuB,OAAOP,MACpB+G,MAAO,QACPD,OAAQ,QAEP,4BAA8B,CAC7BC,MAAO,OACPzH,SAAU,OACVK,QAAS,YAGb0kF,iBAAkB,CAChB1kF,QAAS,aACTK,MAAOhB,EAAMuB,OAAOP,MACpBH,SAAU,OACVC,WAAY,OACZC,WAAY,OAEdukF,gBAAiB,CACfnlF,OAAQ,EACR,UAAW,CACTA,OAAQ,GAEV,oBAAqB,CACnBa,MAAOhB,EAAMuB,OAAOP,QAGxBukF,YAAa,CACX1kF,SAAU,OACVC,WAAY,OACZG,OAAQ,IACRoJ,cAAe,MACftJ,WAAY,MACZkJ,cAAe,kBC7JJu7E,GAjBO,WAAO,IAAD,EACF1hF,mBAAS,CAAC,EAAG,IADX,mBACnB0c,EADmB,KACbilE,EADa,KAc1B,OAXAxjC,2BAAgB,WACd,IAAMC,EAAa,WACjBujC,EAAQ,CAACzsC,OAAO8I,WAAY9I,OAAO0sC,eAMrC,OAHA1sC,OAAOllB,iBAAiB,SAAUouB,GAClCA,IAEO,kBAAMlJ,OAAOjlB,oBAAoB,SAAUmuB,MACjD,IAEI1hC,GC6OMoM,gBAAU,CACvBnmB,KAAM,gBACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,cAtOoB,CACpBrC,MAAO,CACLzN,UAAW,KACXC,QAAS,MAEXwoE,eAAgB,IA4NH/4D,CAMZjZ,aArBqB,SAAAtO,GACtB,MAAO,CACLugF,cAAevgF,EAAMoB,KAAKm/E,kBAIH,SAAAhyE,GAAQ,MAAK,CACtCiyE,2BAA4B,SAAC1lE,EAAOvb,GAClCgP,EAASwG,aAAO,aAAc+F,EAAOvb,KAEvCkhF,2BAA4B,SAAC3lE,EAAOvb,GAClCgP,EAASwG,aAAO,gBAAiB+F,EAAOvb,QAUzC+O,EA/NU,SAAC,GAaP,IAAD,IAZJoyE,EAYI,EAZJA,SACAttE,EAWI,EAXJA,MACAutE,EAUI,EAVJA,cACAC,EASI,EATJA,eACAC,EAQI,EARJA,aACAC,EAOI,EAPJA,SACAC,EAMI,EANJA,uBACAC,EAKI,EALJA,uBACA7I,EAII,EAJJA,WACAoI,EAGI,EAHJA,cACAC,EAEI,EAFJA,2BACAC,EACI,EADJA,2BAEMxjF,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,sBAIkD2R,IAAMrQ,UAAS,GAJjE,mBAIGwiF,EAJH,KAIwBC,EAJxB,OAKsCpyE,IAAMrQ,SAAS,MALrD,mBAKG0iF,EALH,KAKkBC,EALlB,KAOEn4D,EAAM,iBAAGs3D,QAAH,IAAGA,OAAH,YAAGA,EAAe5kE,cAAlB,aAAG,EAAuB2kE,sBAA1B,QAA4C,EAPpD,EASYH,KAATz9E,EATH,oBA2BE2+E,EAAgB,SAAA7zE,GACpB,QAAK2qE,KACD3qE,IAAUqzE,IAAgB1I,EAAW/6B,cACrC5vC,EAAQuzE,QAAZ,KA4BF,OACE,yBACEpjF,UAAWsG,KAAWhH,EAAQ2X,QAAT,eAClB3X,EAAQmiF,aAAewB,KAG1B,kBAAC,KAAD,CACErhF,MAAOshF,EACP95E,SA5Ce,SAAC4K,EAAO2vE,GACtBC,OAAOC,UAAUF,IACtBR,EAASQ,IA2CL5uE,aAAW,sBACXzV,QAAS,CACPc,KAAMd,EAAQklE,SACdhuD,UAAWlX,EAAQuiF,cACnBiC,MAAOxkF,EAAQqiF,YAGhBlsE,EAAM9F,KAAI,SAACmB,EAAMjB,GAAP,OACT,kBAAC6H,GAAA,EAAD,eACEvP,SAAU66E,GAAiBA,EAAcj/D,SAASlU,GAClD8H,IAAK9H,EACLvQ,QAAS,CACPc,KAAMkG,KAAWhH,EAAQmY,IAAT,eACbnY,EAAQ6X,WAAa8rE,GAAkBS,EAAc7zE,MAG1D7I,MACE,yBAAKhH,UAAWV,EAAQsiF,kBACpBqB,GACA,oCACGS,EAAc7zE,GACb,kBAAC,KAAD,CAAiB7P,UAAWV,EAAQqX,WAEpC,yBAAK3W,UAAWV,EAAQqvB,WAAY9e,EAAQ,IAIlD,kBAACzJ,EAAA,EAAD,CACE1F,QAAQ,QACRV,UAAWsG,KAAW,eACnBhH,EAAQ8V,SAAW8tE,IAAiBrzE,KAGvB,0BAAfiB,EAAK5S,OACLmlF,EAEG7jF,EAAEsR,EAAK5S,OADPsB,EAAE,gCAlIP,SAAAqQ,GACf,MAAO,CACL1P,GAAG,cAAD,OAAgB0P,GAClB,gBAAgB,mBAAhB,OAAoCA,IAoIxBk0E,CAASl0E,SAKlBozE,GAAkBF,GACjB,yBAAK/iF,UAAWV,EAAQkW,QACtB,yBAAKxV,UAAWV,EAAQ0iF,YACtB,kBAAC/2D,GAAA,EAAD,CACE9qB,GAAG,iBACHyX,KAAK,kBACL5Q,MAAM,aACNgtB,SAAS,EACTtS,eAAgB,EAChBG,QAAS,GACTpd,UAAWovB,GACXK,gBAAiB50B,EAAQ2iF,YACzB9tD,iBAAkB70B,EAAQ4iF,YAC1B9tD,gBAAgB,EAChBrrB,YAAahE,EAAQ,IAAM,cAAgB,SAC3C+uB,iBApHmB,SAAA5Z,GACzBA,IACF4oE,EAA2B,QAAS,CAClC5oE,UAAWA,EACXC,QAAS,OAEXspE,EAAiBvpE,GACjB4I,YAAW,kBAAMygE,GAAuB,WAiHpC,yBAAKvjF,UAAWV,EAAQ0iF,YACtB,kBAAC/2D,GAAA,EAAD,CACE9qB,GAAG,eACHyX,KAAK,gBACL5Q,MAAM,WACNgtB,SAAS,EACTtS,eAAgB,EAChBG,QAAS,GACTpd,UAAWovB,GACXK,gBAAiB50B,EAAQ2iF,YACzB9tD,iBAAkB70B,EAAQ4iF,YAC1B9tD,gBAAgB,EAChBrrB,YAAahE,EAAQ,IAAM,cAAgB,SAC3CsvB,UAAWivD,EACXhvD,WAAYkvD,EACZriE,eAhGLqiE,EACE,CACLtpE,UAAWvB,KAAO6qE,GAAephE,IAAI,EAAG,QACxCjI,QAAS,KACTyJ,WAAY,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAJ9B,KAiGjBmQ,sBAAuB,kBAAMwvD,GAAuB,OAIxD,yBAAKvjF,UAAWV,EAAQgsB,QACtB,yBAAKtrB,UAAWV,EAAQ6iF,aACtB,yBAAKniF,UAAWV,EAAQijF,aAAc/iF,EAAE,WACxC,kBAAC,GAAD,CACEgI,MAAO,CACL5F,MAAO0pB,GAAU,GACjBliB,SAAU,SAAAC,GACRy5E,EACE,iBACAz5E,EAAEC,OAAO1H,SAIfgpB,KAAM,CAAC,EAAG,EAAG,EAAG,EAAG,IACnBqQ,eAAgB37B,EAAQgjF,gBACxBt5E,KAAM,GACNkyB,gBAAiB57B,EAAQ+iF,iBACzBt5E,YAAahE,EAAQ,IAAM,gBAAkB,YAIjD,kBAACtE,EAAA,EAAD,CACEC,QAAQ,WACRT,QA7IG,WACb4iF,EAA2B,QAASD,EAAc5kE,OAAO2J,OACzDk7D,EACE,iBACAD,EAAc5kE,OAAO2kE,iBA0IbrjF,QAAS,CACPc,KAAMd,EAAQ8iF,WAEhBj6E,SAzIa,WAAO,IAAD,QAC7B,OACGy6E,KACD,OAACA,QAAD,IAACA,OAAD,YAACA,EAAe5kE,cAAhB,uBAAC,EAAuB2J,aAAxB,aAAC,EAA8BzN,cAC/B,OAAC0oE,QAAD,IAACA,OAAD,YAACA,EAAe5kE,cAAhB,uBAAC,EAAuB2J,aAAxB,aAAC,EAA8BxN,SAqIb6pE,IAETj/E,EAAQ,IAAMvF,EAAE,UAAY,kBAAC,KAAD,c,+BClK5B1C,GAjEGC,aAAW,SAAAC,GAAK,MAAK,CACrCia,QAAS,CACP,UAAW,CACT/I,OAAQ,YAGZhQ,MAAO,CACLD,OAAQ,WAEVgkC,OAAQ,CACNpkC,SAAU,OACVC,WAAY,OACZG,OAAQ,WACRF,WAAY,QAEdkmF,YAAa,CACXj/E,QAAS,OACT/G,OAAQ,YAEVimF,YAAa,CACXrmF,SAAU,OACVC,WAAY,OACZG,OAAQ,cAEVkmF,YAAa,CACXtmF,SAAU,QAEZumF,WAAY,CACVp/E,QAAS,OACTC,eAAgB,gBAChBC,WAAY,WACZgJ,OAAQ,WAEVm2E,eAAgB,CACdxmF,SAAU,OACV6H,WAAY,QAEdw/B,SAAU,CACRlnC,MAAOhB,EAAMuB,OAAOP,MACpBD,WAAY,QAEdumF,mBAAoB,CAClBt/E,QAAS,OACTiyB,SAAU,QAEZstD,iBAAkB,CAChBv/E,QAAS,gBAEXkhC,MAAM,aACJnhC,MAAO,OACPD,OAAQ,QACRoqB,eAAgB,QAChBC,iBAAkB,YAClBC,mBAAoB,SACpBlyB,gBAAiB,UACjBqI,aAAc,QACb,2BAA6B,CAC5BT,OAAQ,UAGZ0/E,YAAa,CACX7mF,QAAS,cCpBP8mF,GAAc,SAAC,GAKd,IAAD,EAJJrqE,EAII,EAJJA,KACAsqE,EAGI,EAHJA,eACAxD,EAEI,EAFJA,wBACAyD,EACI,EADJA,sBAEMrlF,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIEolF,MAAuB,OAAJxqE,QAAI,IAAJA,OAAA,YAAAA,EAAO,UAAP,eAAWkM,MAAQlM,EAAK,GAAGc,YAEpD,OACE,yBAAKlb,UAAW4kF,EAAgBtlF,EAAQglF,mBAAqB,MAA7D,OACGlqE,QADH,IACGA,OADH,EACGA,EAAMzK,KAAI,SAACmB,EAAMjB,EAAOwO,GACvB,IAAMjE,EAAOsqE,EAAiB5zE,EAAKsJ,KAAO,CAACtJ,EAAKwV,KAEhD,GAAIxV,EAAKoK,WACP,OACE,yBAAKvD,IAAK9H,GACR,kBAACzJ,EAAA,EAAD,CAAY1F,QAAQ,MACjB0Z,EAAKzK,KAAI,SAAC2W,EAAKzW,GAAN,gBAAmBA,EAAQ,IAAM,GAAjC,YAAuCrQ,EAAE8mB,QAEpDxV,EAAKoK,WAAWvL,KAAI,SAAC0xB,EAAUxxB,GAAW,IAAD,EACZg1E,GAC1BxjD,EACA6/C,EACAyD,GAHMn+C,EADgC,EAChCA,MAAOtB,EADyB,EACzBA,SAKT4/C,EAAaj1E,IAAUiB,EAAKoK,WAAWrZ,OAAS,EACtD,OACE,0BAAM8V,IAAK9H,GACiB,cAAzBwxB,EAASlmB,YACLkmB,EAASlmB,YAAc3b,EAAE,UAC1BA,EAAE6hC,EAASlmB,aAAc,IAC7B,0BAAMnb,UAAWV,EAAQ4lC,UACtBA,EADH,IACcsB,GACN,KACNs+C,GAAD,eAQb,IAAMA,EAAaj1E,IAAUwO,EAAIxc,OAAS,EAE1C,OAAIiP,EAAKwV,IAEL,yBAAK3O,IAAK9H,GACR,kBAACzJ,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQilF,kBACzC/kF,EAAEsR,EAAKwV,KADV,IACiB,KA9EP,SAACxV,EAAMo0B,EAAUy/C,GACvC,IAAMrlF,EAAUxC,KAEZ0pC,EAAQ11B,EAAKo0B,GACboM,EAAmBpM,EAElBkB,WAAWt1B,EAAKo0B,KACdy/C,GAA0Bv+C,WAAWI,IACxC,CAAC,MAAO,MAAO,OAAO72B,KAAI,SAAAu1B,IACnBkB,WAAWI,IAAU11B,EAAKo0B,KAC7BsB,EAAQ11B,EAAKo0B,GACboM,EAAmBpM,MAM3B,IAAMtjC,EAAQqqC,GAAkBzF,GAEhC,OACE,0BAAMxmC,UAAWV,EAAQ4lC,UACtB,IACAoM,EAFH,IAEsB1vC,GA0DXqzC,CACCnkC,EACAowE,EACAyD,IAEAG,GAAc,sDAXtB,OAoBKC,GAAS,SAAC,GAMhB,IALL9iD,EAKI,EALJA,OACAoD,EAII,EAJJA,WACA8D,EAGI,EAHJA,aACA+3C,EAEI,EAFJA,wBACAyD,EACI,EADJA,sBAEMrlF,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAGEwlC,GAAmBmE,EAEzB,OAAQ9D,GACN,IAAK,kBAAoB,IAYhB,EAZe,EACMw/C,GAC1B5iD,EACAi/C,EACAyD,GAHMn+C,EADc,EACdA,MAAOtB,EADO,EACPA,SAKf,MAAqB,qBAAjBiE,GAAuCnE,EAEvC,yBAAKhlC,UAAWV,EAAQ4lC,UACrBA,EADH,IACcsB,GAKd,oCACGvE,QADH,IACGA,OADH,YACGA,EAAQ7nB,YADX,aACG,EAAczK,KAAI,SAACmB,EAAMjB,GAAP,OACjB,yBAAK8H,IAAK9H,GACR,kBAACzJ,EAAA,EAAD,CAAY1F,QAAQ,MACjBoQ,EAAKsJ,KAAKzK,KACT,SAAC2W,EAAKzW,GAAN,gBAAmBA,EAAQ,IAAM,GAAjC,YAAuCrQ,EAAE8mB,QAG7C,kBAAClgB,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ4lC,UAC5CA,EADH,IACa,8BAAO+G,GAAkBn7B,EAAKo0B,WAQvD,IAAK,kBACH,IAAM9qB,EAAI,OAAG6nB,QAAH,IAAGA,OAAH,EAAGA,EAAQ7nB,KACrB,OACE,kBAAC,GAAD,CACEA,KAAMA,EACN8mE,wBAAyBA,EACzByD,sBAAuBA,IAI7B,IAAK,0BACH,IAAMvqE,EAAI,OAAG6nB,QAAH,IAAGA,OAAH,EAAGA,EAAQznB,UACrB,OACE,kBAAC,GAAD,CACEJ,KAAMA,EACNsqE,gBAAgB,EAChBxD,wBAAyBA,EACzByD,sBAAuBA,IAI7B,IAAK,qBACL,IAAK,kBAAoB,IAAD,EACtB,OAAI,OAAC1iD,QAAD,IAACA,OAAD,YAACA,EAAQ/mB,kBAAT,aAAC,EAAoBrZ,QAGvB,6BACGogC,EAAO/mB,WAAWvL,KAAI,SAACmB,EAAMjB,GAAW,IAAD,EACVg1E,GAC1B/zE,EACAowE,EACAyD,GAHMn+C,EAD8B,EAC9BA,MAAOtB,EADuB,EACvBA,SAKT4/C,EAAaj1E,IAAUoyB,EAAO/mB,WAAWrZ,OAAS,EACxD,OACE,0BAAM8V,IAAK9H,GACa,cAArBiB,EAAKqK,YACDrK,EAAKqK,YAAc3b,EAAE,UACtBA,EAAEsR,EAAKqK,aAHb,IAII,IACF,0BAAMnb,UAAWV,EAAQ4lC,UACtBA,EADH,IACcsB,GACN,KACNs+C,GAAD,eApB6B,KA6B5C,OAAO,MAGHD,GAAW,SAAC5iD,EAAQi/C,EAAyByD,GACjD,IAAIK,EAAkB9D,EAClB16C,EAAQvE,EAAOi/C,GAWnB,OATKyD,GAA0Bv+C,WAAWI,IACxC,CAAC,MAAO,MAAO,OAAO72B,KAAI,SAAAu1B,IACnBkB,WAAWI,IAAUvE,EAAOiD,KAC/BsB,EAAQvE,EAAOiD,GACf8/C,EAAkB9/C,MAKjB,CACLsB,MAAOyF,GAAkBzF,GACzBtB,SAAU8/C,IA2FCC,GAvFU,SAAC,GAQnB,IAe6B9nE,EAtBlCrM,EAOI,EAPJA,KACAowE,EAMI,EANJA,wBACAgE,EAKI,EALJA,SACAC,EAII,EAJJA,aACAp3C,EAGI,EAHJA,WACAq3C,EAEI,EAFJA,aACAC,EACI,EADJA,cAEM/lF,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAGE8S,EAHF,KAG0BnH,SAoB9B,OACE,yBAAKlL,QAAS,kBAnBQ,WACtB,IAAM04C,EAA4BF,GAA6B3nC,EAAKmxB,QAEpEojD,GACEA,EAAc,eACTv0E,EADQ,CAEX6nC,0BAA2BA,KAaX2sC,IAAuBtlF,UAAWV,EAAQ2X,SAC5D,yBACEjX,UAAWV,EAAQ4mC,MACnBp+B,MAAO,CAAEopB,gBAAgB,OAAD,OAASpgB,EAAKo1B,MAAd,OAEvB,IAGH,yBAAKlmC,UAAWV,EAAQklF,aACtB,yBAAKxkF,UAAWV,EAAQ8kF,YACtB,kBAACh+E,EAAA,EAAD,CACE1F,QAAQ,KACRpB,QAAS,CAAEc,KAAMkG,KAAWhH,EAAQpB,MAAO6vC,MArBnB5wB,EAuBG,QAtBV,WAArB7K,GAAiCxB,EAAK,GAAD,OAAIqM,EAAJ,OAChCrM,EAAK,GAAD,OAAIqM,EAAJ,OAGNrM,EAAKqM,KAoBLioE,GACC,kBAAC,KAAD,CAAqBplF,UAAWV,EAAQ+kF,kBAG3Ca,GACC,yBAAKllF,UAAWV,EAAQ2iC,QACtB,kBAAC,GAAD,CACEA,OAAQnxB,EAAKA,EAAKu0B,YAClBA,WAAYv0B,EAAKu0B,WACjB8D,aAAcr4B,EAAKq4B,aACnB+3C,wBAAyBA,KAI/B,6BACE,yBAAKlhF,UAAWV,EAAQ2kF,aACtB,kBAAC,KAAD,CAAwBjkF,UAAWV,EAAQ6kF,cAC3C,yBAAKnkF,UAAWV,EAAQ4kF,aAAcpzE,EAAKuE,WAE7C,yBAAKrV,UAAWV,EAAQ2kF,aACtB,kBAAC,KAAD,CAAmBjkF,UAAWV,EAAQ6kF,cACtC,yBAAKnkF,UAAWV,EAAQ4kF,aACrBpzE,EAAK46B,aADR,IACuBlsC,EAAE,YAG1B2lF,KAAkBr0E,EAAK3G,WAAWtI,QACjC,yBAAK7B,UAAWV,EAAQ2kF,aACtB,kBAAC,KAAD,CAAmBjkF,UAAWV,EAAQ6kF,cACtC,yBAAKnkF,UAAWV,EAAQ4kF,aACrBpzE,EAAK3G,WAAWovB,KAAK,kBCnQvBz8B,GA3CGC,YAAW,CAC3Bka,QAAQ,aACNjS,QAAS,OACTiyB,SAAU,OACVhyB,eAAgB,eAChBtH,QAAS,cACTM,OAAQ,YACRuwC,SAAU,OACVzjC,UAAW,sBACV,2BAA6B,CAC5BpN,QAAS,cACTmH,OAAQ,qBACRiG,UAAW,SAGfw6E,aAAc,CACZ/5E,KAAM,YACNvN,OAAQ,SAEV6S,KAAK,aACH/L,MAAO,QACP5H,OAAQ,oBACRE,aAAc,MACdmxC,SAAU,SACVvwC,OAAQ,cACP,2BAA6B,CAC5B8G,MAAO,UAGXmhC,MAAM,aACJnhC,MAAO,OACPD,OAAQ,QACRoqB,eAAgB,QAChBC,iBAAkB,YAClBC,mBAAoB,SACpBlyB,gBAAiB,UACjBqI,aAAc,QACb,2BAA6B,CAC5BT,OAAQ,YCJC0gF,GA7BmB,SAAC,GAA0F,IAAxFj+D,EAAuF,EAAvFA,eAAgBxP,EAAuE,EAAvEA,KAAM0tE,EAAiE,EAAjEA,UAAWC,EAAsD,EAAtDA,QAASL,EAA6C,EAA7CA,cAAenE,EAA8B,EAA9BA,wBACtF5hF,EAAUxC,KAEhB,OAAI,OAACyqB,QAAD,IAACA,OAAD,EAACA,EAAgB1lB,QAGnB,yBAAK7B,UAAWV,EAAQ2X,SACrBsQ,EAAe5X,KAAI,SAACmB,EAAMjB,GAAP,OAClB,yBAAK7P,UAAWV,EAAQwR,KAAM6G,IAAK9H,GACjC,6BACE,kBAAC,GAAD,CACEiB,KAAMA,EACNowE,wBAAyBA,EACzBgE,UAAU,EACVE,cAAc,EACdC,cAAeA,KAGjBttE,EAAO2tE,GAAa71E,IAAU0X,EAAe1lB,OAAS,GACtD,kBAAC,KAAD,CAAU8jF,QAAS,kBAAMF,EAAU1tE,EAAO,UAIhD,yBAAK/X,UAAWV,EAAQimF,cAAe,IACvC,yBAAKvlF,UAAWV,EAAQimF,cAAe,KArBP,MCmCvBzoF,GA3CGC,YAAW,CAC3Bka,QAAQ,aACNjS,QAAS,OACTiyB,SAAU,OACVhyB,eAAgB,eAChBtH,QAAS,cACTM,OAAQ,YACRuwC,SAAU,OACVzjC,UAAW,sBACV,2BAA6B,CAC5BpN,QAAS,cACTmH,OAAQ,qBACRiG,UAAW,SAGfw6E,aAAc,CACZ/5E,KAAM,YACNvN,OAAQ,SAEV6S,KAAK,aACH/L,MAAO,QACP5H,OAAQ,oBACRE,aAAc,MACdmxC,SAAU,SACVvwC,OAAQ,cACP,2BAA6B,CAC5B8G,MAAO,UAGXmhC,MAAM,aACJnhC,MAAO,OACPD,OAAQ,QACRoqB,eAAgB,QAChBC,iBAAkB,YAClBC,mBAAoB,SACpBlyB,gBAAiB,UACjBqI,aAAc,QACb,2BAA6B,CAC5BT,OAAQ,YCGC8gF,GApCe,SAAC,GAOxB,IANLt9C,EAMI,EANJA,WACA+8C,EAKI,EALJA,cACAnE,EAII,EAJJA,wBACAnpE,EAGI,EAHJA,KACA2tE,EAEI,EAFJA,QACAD,EACI,EADJA,UAEMnmF,EAAUxC,KAEhB,OAAI,OAACwrC,QAAD,IAACA,OAAD,EAACA,EAAYzmC,QAGf,yBAAK7B,UAAWV,EAAQ2X,SACrBqxB,EAAW34B,KAAI,SAACmB,EAAMjB,GAAP,OACd,yBAAK8H,IAAK7G,EAAK3Q,GAAIH,UAAWV,EAAQwR,MACpC,6BACE,kBAAC,GAAD,CACEA,KAAMA,EACNowE,wBAAyBA,EACzBgE,UAAU,EACVE,cAAc,EACdC,cAAeA,KAGjBttE,EAAO2tE,GAAa71E,IAAUy4B,EAAWzmC,OAAS,GAClD,kBAAC,KAAD,CAAU8jF,QAAS,kBAAMF,EAAU1tE,EAAO,UAIhD,yBAAK/X,UAAWV,EAAQimF,cAAe,IACvC,yBAAKvlF,UAAWV,EAAQimF,cAAe,KArBX,MCoCnBzoF,GAnDGC,YAAW,CAC3Bka,SAAO,IACLjS,QAAS,OACTF,OAAQ,oBACRnH,QAAS,eAHJ,eAIJ,2BAA6B,CAC5BwH,cAAe,SACfqpC,SAAU,OACV7wC,QAAS,gBAPN,eASJ,2BAA6B,CAC5BmH,OAAQ,uBAVL,IAaP84C,SAAS,aACP74C,MAAO,QACPzH,SAAU,QACVwH,OAAQ,OACRtG,YAAa,OACbgwC,SAAU,QACT,2BAA6B,CAC5BzpC,MAAO,QACPzH,SAAU,QACVwH,OAAQ,OACRS,aAAc,OACdipC,SAAU,YAGdqP,UAAU,aACR94C,MAAO,OACPD,OAAQ,OACR2pC,UAAW,SACXqxC,UAAW,QACV,2BAA6B,CAC5Bh7E,OAAQ,OACR0pC,SAAU,YAGdtI,MAAO,CACLphC,OAAQ,QACRoqB,eAAgB,QAChBC,iBAAkB,YAClBC,mBAAoB,SACpBlyB,gBAAiB,UACjBqI,aAAc,QAEhBrH,MAAO,CACLqH,aAAc,UCfHsgF,GA1BK,SAAC,GAA0C,IAAxCC,EAAuC,EAAvCA,QAAS5E,EAA8B,EAA9BA,wBACxB5hF,EAAUxC,KAEhB,OACE,yBAAKkD,UAAWV,EAAQ2X,SACtB,yBAAKjX,UAAWV,EAAQs+C,UACtB,kBAAC,GAAD,CACE9sC,KAAMg1E,EACN/3C,WAAYzuC,EAAQpB,MACpBinF,cAAc,KAGlB,yBAAKnlF,UAAWV,EAAQu+C,WACtB,kBAAC,GAAD,CACEzM,SAAU00C,EACV3wC,0BAA0B,EAC1BjQ,SAAUg8C,EACVriD,iBAAiB,EACjBC,sBAAsB,EACtBsW,YAAY,OCmCPt4C,GA5DGC,aAAW,SAAAC,GAAK,MAAK,CACrC+iF,mBAAoB,CAClBx6E,aAAc,QAEhB0R,QAAS,CACPjS,QAAS,OACTiyB,SAAU,OACVhyB,eAAgB,gBAChBF,MAAO,QAET+L,KAAM,CACJtF,KAAM,UACNxG,QAAS,OACTE,WAAY,SACZD,eAAgB,gBAChBmnB,aAAc,oBACd/kB,cAAe,OACf9B,aAAc,OACd1H,SAAU,OACVC,WAAY,OACZC,WAAY,QAEdmnC,SAAU,CACRrnC,SAAU,OACVW,YAAa,OAEf2e,MAAM,aACJpY,MAAO,OACPssE,WAAY,sBACZxmE,QAAS,QACR7N,EAAMQ,YAAYC,KAAK,MAAQ,CAC9Bm9B,UAAW,SAACh2B,GAAD,OAAYA,EAAMmhF,SAAW,aAAe,YACvDvnF,YAAa,SAGjBwnF,WAAY,CACVhhF,QAAS,OACTD,MAAO,OACPzH,SAAU,OACV4H,WAAY,WACZD,eAAgB,aAChB,oBAAqB,CACnBA,eAAgB,WAChBF,MAAO,OACPzH,SAAU,QAEZ,oBAAqB,CACnB2H,eAAgB,SAChBF,MAAO,OACPzH,SAAU,SAGd2oF,eAAgB,CACdjoF,MAAOhB,EAAMuB,OAAOP,OAEtBuJ,MAAO,CACLtJ,OAAQ,gBC5CNsuC,GAAS,SAAC,GAA6B,IAA3BrjC,EAA0B,EAA1BA,aAAc3B,EAAY,EAAZA,MACxBjI,EAAUxC,KAD0B,EAE9ByC,cAALC,EAFmC,oBAI1C,IAAK0J,IAAiB3B,EAAO,OAAO,KAIpC,GAF2E,IAAvDA,EAAMmW,QAAQ,0CAEjB,CACf,IAAM+uB,EAAallC,EAAM8+B,MAAM,KACzBqG,EAAcD,EAAW5qC,OACzB8qC,EAAcF,EAAWtN,MAAM,GAAI,GAAG5F,KAAK,KACjD,OACE,kBAACjxB,GAAA,EAAD,CAAgBtI,UAAWsG,KAAWhH,EAAQiI,OAAQA,OAAK,GACxD/H,EAAEmtC,EAAa,CAAEC,OAAQH,EAAWC,EAAc,MAKzD,OACE,kBAACpkC,GAAA,EAAD,CAAgBtI,UAAWsG,KAAWhH,EAAQiI,OAAQA,OAAK,GACxD/H,EAAE+H,KAoFM2+E,GA/ES,SAAC,GAQlB,IAPL7sD,EAOI,EAPJA,OACAn7B,EAMI,EANJA,MACA4vB,EAKI,EALJA,aACAq4D,EAII,EAJJA,UACAp4C,EAGI,EAHJA,WACA7I,EAEI,EAFJA,SAEI,IADJl8B,KAAQE,EACJ,EADIA,aAAc3B,EAClB,EADkBA,MAClB,EAEQhI,cAALC,EAFH,sBAG4BsB,oBAAS,GAHrC,mBAGGilF,EAHH,KAGaK,EAHb,KAIE9mF,EAAUxC,GAAU,CAAEipF,aAEtBM,EAAc,WAClBD,GAAY,IAGVE,EAAa,WACfF,GAAY,IAId,OAAK/sD,EAAOx3B,OAGV,yBAAK7B,UAAW8tB,GACd,kBAAC1nB,EAAA,EAAD,CACE1F,QAAQ,KACRpB,QAAS,CACPc,KAAMkG,KAAWA,KAAWhH,EAAQygF,mBAAoBhyC,MAGzDvuC,EAAEtB,IAEL,yBAAK8B,UAAWV,EAAQ2X,SACrBoiB,EAAO1pB,KAAI,SAACwN,EAAOtN,GAClB,IAAMiB,EAAOuoB,EAAOnE,IAAIrlB,GAClB22B,EAAK,UAAMyF,GAAkBn7B,EAAKo0B,KAExC,OACE,yBAAKllC,UAAWsG,KAAWhH,EAAQwR,KAAMq1E,GAAYxuE,IAAK9H,GACvDiB,EAAKqK,aACJ,yBAAKnb,UAAWV,EAAQ0mF,YACA,cAArBl1E,EAAKqK,YACDrK,EAAKqK,YAAc3b,EAAE,UACtBA,EAAEsR,EAAKqK,aAAc,KAG7B,yBACEnb,UAAWsG,KACThH,EAAQ0mF,WACR1mF,EAAQ2mF,iBAGV,0BAAMjmF,UAAWV,EAAQ4lC,UAAWA,GANtC,IAMwDsB,GAExD,yBAAKxmC,UAAWV,EAAQ0mF,YACtB,kBAAC/6D,GAAA,EAAD,CACErT,KAAI,UAAKuF,EAAL,iBACJzU,cAAc,EACdD,UAAW,EACXD,kBAAkB,EAClBxI,UAAS,UAAKV,EAAQ6d,MAAb,YAAsB4oE,EAAW,SAAW,IACrDthF,UAAW8D,GACXg+E,QAASF,EACTG,OAAQF,UAQpB,kBAAC,GAAD,CAAQ/+E,MAAOA,EAAO2B,aAAcA,KAnDb,MC2Bd6U,GArFE,SAACC,EAAQpZ,GACxB,IAAMgD,EAAS,GAEPy7E,EAAwCz+E,EAAxCy+E,uBAAwBoD,EAAgB7hF,EAAhB6hF,YAEhC,GAAKpD,EAWErlE,EAAOuG,OAAUvG,EAAOuG,MAAMrK,WAAc8D,EAAOuG,MAAMpK,QAG5DxB,KAAOqF,EAAOuG,MAAMpK,SAASsK,KAAKzG,EAAOuG,MAAMrK,UAAW,QAC1D8D,EAAOuN,YAEP3jB,EAAO2c,MAAQ,CACbI,KAAM,2CACN1R,UAAW,CAAE25B,OAAQ5uB,EAAOuN,aAP9B3jB,EAAO2c,MAAQ,yBAZU,CAC3B,IAAM4kB,EAAes9C,EAAYt9C,aATF,qBAW7BA,GACEnrB,EAAOwzB,YAAexzB,EAAOwzB,WAAWt3B,UAXrB,qBAcZivB,GAAwCnrB,EAAOuzB,eACxD3pC,EAAO2pC,aAAe,6BAFtB3pC,EAAO4pC,WAAa,4BAkBxB,GAAIxzB,EAAOonB,cAAgBpnB,EAAOonB,aAAavjC,OAAQ,CACrD,IAAIssC,EAA0B,GAC1BC,GAAsB,EAE1BpwB,EAAOonB,aAAanN,SAAQ,SAACnnB,EAAMjB,GAC7BiB,EAAKs0B,cAAgB1iC,SAASoO,EAAKs0B,cAAgB,IACrDgJ,GAAsB,GAGxBD,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG9CgJ,IACHxmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAQ,yDAKd,IACG7wB,EAAOw9B,cACRpnB,EAAOonB,cACPpnB,EAAOonB,aAAavjC,OACpB,CAAC,IAAD,EACMwsC,EAAwBrwB,EAAOrD,UACjCqD,EAAOrD,UAAU2zB,UACjBtwB,EAAOE,gBACLiwB,EAA0B,GAC5BI,EAAoB,EAExBvwB,EAAOonB,aAAanN,SAAQ,SAACnnB,EAAMjB,GAC7BiB,EAAKs0B,cAAgBt0B,EAAKs0B,aAAavjC,SACzC0sC,GAAqB7rC,SAASoO,EAAKs0B,eAErC+I,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG/CmJ,EAAoBF,EACtBzmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAO,0CAAD,OAAuC4V,MAG/C,UAAAo4C,EAAY9sE,mBAAZ,eAAyBsE,kBAAmBswB,EAAoBq1C,OAAO6C,EAAY9sE,YAAYsE,mBAE/FrW,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAO,gDAAD,OAA6CguD,EAAY9sE,YAAYsE,oBAKjF,OAAOrW,GCcM9K,GAnGGC,YAAW,CAC3Bka,SAAO,IACLrY,SAAU,WACVoG,QAAS,OACTrH,QAAS,cACTM,OAAQ,YACR6G,OAAQ,qBACRg7E,UAAW,OACXrxC,UAAW,UAPN,eAQJ,4BAA8B,CAC7B9wC,QAAS,gBACTmH,OAAQ,uBAVL,eAYJ,2BAA6B,CAC5BnH,QAAS,aACTM,OAAQ,MACR6G,OAAQ,sBAfL,eAiBJ,2BAA6B,CAC5BnH,QAAS,aACTmH,OAAQ,uBAnBL,IAsBP84C,UAAQ,IACN74C,MAAO,QACPpH,QAAS,gBAFH,eAGL,4BAA8B,CAC7BoH,MAAO,OACPpH,QAAS,oBALL,eAOL,2BAA6B,CAC5BU,UAAW,IARP,eAUL,2BAA6B,CAC5BqQ,aAAc,OACdrQ,UAAW,IAZP,IAeRw/C,UAAU,aACR94C,MAAO,QACPzH,SAAU,SACT,4BAA8B,CAC7B0H,QAAS,SAGb88E,WAAS,IACP7jF,OAAQ,SACR8G,MAAO,SAFA,eAGN,4BAA8B,CAC7B9G,OAAQ,aAJH,eAMN,2BAA6B,CAC5B8G,MAAO,UAPF,eASN,2BAA6B,CAC5BA,MAAO,UAVF,IAaToW,YAAY,aACV7d,SAAU,SACT,2BAA6B,CAC5BA,SAAU,SAGd6gD,kBAAmB,CACjBn5C,QAAS,QAEX+6E,mBAAoB,CAClBx6E,aAAc,QAEhBmhF,eAAgB,CACd7oF,SAAU,OACVC,WAAY,OACZC,WAAY,OACZkJ,cAAe,YACfC,cAAe,SACf3B,aAAc,KAEhBu7C,eAAgB,CACdjjD,SAAU,QAEZ8oF,iBAAkB,CAChB1oF,OAAQ,UAEV+I,MAAO,CACLC,cAAe,YACfC,cAAe,UAEjBV,cAAe,CACbxB,QAAS,OACTC,eAAgB,SAChBC,WAAY,UAEd2B,gBAAiB,CACf9B,MAAM,kBACND,OAAO,qBCjFLhI,GAAYC,YAAW,CAC3B8J,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,mBAEV0B,cAAe,CACb5H,SAAU,SAEZmX,SAAU,CACRjR,OAAQ,UAIG8hF,GAzBa,SAAC,GAAiB,IAAfh0D,EAAc,EAAdA,QACvBtzB,EAAUxC,KAEhB,OACE,kBAAC,GAAD,CACE8J,YAAagsB,EACb/rB,gBAAiBvH,EAAQuH,gBACzB7G,UAAWV,EAAQkH,iBC+BnBwjB,GAAgB,CACpB68D,kBAAmBluE,OACnB4L,MAAO,KACPgtB,aAAc,KACdnM,aAAc,GACdF,SAAU,KACVwT,oBAAqB,GACrBx6B,gBAAiB,EACjBzC,OAAQ,GACRwnB,cAAe,GACfqF,WAAY,GACZle,UAAW,GACX9X,iBAAkB,UAClBiZ,UAAW,GA6fE3B,gBAAU,CACvBnmB,KAAM,aACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,YACAiM,kBANaJ,CAOZjZ,aAnBqB,SAAAtO,GACtB,MAAO,CACLm4E,WAAYn4E,EAAMoB,KAAK+2E,eAIA,SAAA5pE,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,aAAc+F,EAAOvb,QAWtC+O,EA7fmB,SAAC,GAYhB,IAAD,IAXJ0yE,EAWI,EAXJA,uBACAnC,EAUI,EAVJA,wBACAE,EASI,EATJA,wBACAqF,EAQI,EARJA,YACAK,EAOI,EAPJA,gBACA53C,EAMI,EANJA,qBACAsrC,EAKI,EALJA,WACAvwD,EAII,EAJJA,aACA0I,EAGI,EAHJA,QACAvI,EAEI,EAFJA,UACA28D,EACI,EADJA,sBAEMznF,EAAUxC,KACVm9E,EAAYwM,EAAY9sE,YAAYxZ,GACpCgpC,EAAes9C,EAAYt9C,aAE3B5kB,EAAQi2D,EAAWx8D,OAAOuG,MAC1BrK,EAAYqK,GAASA,EAAMrK,UAN7B,EAQ4DpZ,mBAAS,IARrE,mBAQGmzC,EARH,KAQ6BC,EAR7B,OAS4BpzC,oBAAS,GATrC,mBASGopB,EATH,KASakqC,EATb,OAU8CtzD,mBAAS,MAVvD,mBAUGkmF,EAVH,KAUsBC,EAVtB,OAW8DnmF,mBAAS,MAXvE,mBAWG+wC,EAXH,KAW8BsC,EAX9B,OAYkCrzC,mBAASk1C,OAAO8I,YAZlD,mBAYGC,EAZH,KAYgBC,EAZhB,KAaEkoC,EAAYhoD,iBAAO,MAEzBhrB,qBAAU,WAAO,IAAD,KACV,UAAAsmE,EAAWx8D,OAAOuG,aAAlB,eAAyBrK,aAAzB,UAAsCsgE,EAAWx8D,OAAOuG,aAAxD,aAAsC,EAAyBpK,UACjE2I,YAAW,WACTokE,EAAUr2D,QAAQyO,eAAe,CAAEC,SAAU,aAC5C,KAEJ,CAACi7C,EAAWx8D,OAAOuG,QAEtBrQ,qBAAU,WAAO,IAAD,KACA,OAAVsmE,QAAU,IAAVA,OAAA,EAAAA,EAAYtxE,gBAAZ,OAA4BsxE,QAA5B,IAA4BA,OAA5B,YAA4BA,EAAY/6B,kBAAxC,uBAA4B,EAAwBra,oBAApD,aAA4B,EAAsC3M,SACpE3V,YAAW,WACTokE,EAAUr2D,QAAQyO,eAAe,CAAEC,SAAU,aAC5C,KAEJ,QAACi7C,QAAD,IAACA,OAAD,YAACA,EAAY/6B,kBAAb,uBAAC,EAAwBra,oBAAzB,aAAC,EAAsC3M,OAAvC,OAA+C+hD,QAA/C,IAA+CA,OAA/C,EAA+CA,EAAYtxE,eAE9DgL,qBAAU,WACHsmE,EAAWx8D,OAAOoM,UAAUvoB,SAC/BqtC,EAAqB,YAAa9kB,GAClC8kB,EAAqB,mBAAoBkyC,IAG3C6F,EACEzM,EAAWx8D,OAAOuzB,cAAgBr3B,GAAavB,QAEjD,IAAMuF,EAAkBuoE,EAAW,YAAgBvoE,gBAC/CA,GACFsyB,GAAmBtyB,GAErBgxB,EAAqB,YAAau3C,EAAW,YAAgBl7D,aAC5D,IAEH0zB,2BAAgB,WACd,IAAMC,EAAa,WACjBF,EAAehJ,OAAO8I,aAIxB,OAFA9I,OAAOllB,iBAAiB,SAAUouB,GAClCA,IACO,kBAAMlJ,OAAOjlB,oBAAoB,SAAUmuB,MACjD,IAtDC,MAwDuDptC,YACzDiyB,GACA,CACE4L,MAAO0zC,IAA2B2D,EAClCp3C,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTyf,gBAAiBC,EACjB2c,gBAAiB2qC,EACjBnqC,YAAan3B,KAAOquE,GACjB3iE,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAOquE,GAAmB5kE,IAAI,EAAG,WAChDkC,MAAM,SACNR,OAAO,iBAdCksB,EAxDb,EAwDIpd,QAAiCqd,EAxDrC,EAwD+BvgC,KAxD/B,EA8EAoC,YAAS0yB,GAAmC,CAC9CmL,KAAM0zC,IAA2B2D,EACjCp3C,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTyf,gBAAiBC,EACjBmhB,WAAYmmC,EACZnqC,YAAan3B,KAAOquE,GACjB3iE,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAOquE,GAAmB5kE,IAAI,EAAG,WAChDkC,MAAM,SACNR,OAAO,cACV+tB,0BAA2BA,KAfpBs1C,EA5EP,EA4EFv0D,QACMyV,EA7EJ,EA6EF34B,KAkBFwE,qBAAU,WACR,GAAKm0B,EAAL,CAEA,IAAMwJ,EAA4BzJ,GAChCC,GAGF8L,EAA6BtC,GAC7B3C,EACE,4BACA2C,EAA0BvJ,WAAW,GAAGC,iCAEzC,CAACF,IAEJn0B,qBAAU,WACH4yE,GAEL3nC,EAA6B2nC,KAC5B,CAACA,IAEJ5yE,qBAAU,WACR,GAAKmvE,GAQL,GAD4B7I,EAAWx8D,OAAO06B,oBACrB72C,OAAzB,CAEA,IAAMypB,EAASm7D,EAAY9sE,YAAY2R,OACvC4jB,EAAqB,kBAAmB5jB,GAExC+kB,EAAgBo2C,QAhJO,qBAoIjBA,EAAYt9C,cACdkH,EAAgBo2C,KAYnB,CAACjM,EAAWx8D,OAAO06B,oBAAqB8hC,EAAWx8D,OAAOuG,QAE7DrQ,qBAAU,WACRkzE,MACC,CAAC5M,EAAWx8D,OAAOuzB,aAAcM,EAA2B1I,IAE/Dj1B,qBAAU,WACR,GAAKsmE,EAAWx8D,OAAOwzB,WAAvB,CADc,MAEegpC,EAAWx8D,OAAOwzB,WAAzCt3B,EAFQ,EAERA,UAAWC,EAFH,EAEGA,QACZA,IACHA,EAAUD,GAEGvB,KAAOuB,GAAWyG,OAAOxG,EAAS,QAE/C+0B,EAAqB,QAAS,MAC9BA,EAAqB,eAAgBh1B,KAErCg1B,EAAqB,eAAgB,MACrCA,EAAqB,QAASsrC,EAAWx8D,OAAOwzB,YAChDkD,EAA8B+xC,GAC9Bp2C,EAAgBo2C,OAEjB,CAACjM,EAAWx8D,OAAOwzB,aAEtB,IAAM41C,EAA+B,WACnC,IAAM71C,EAAeipC,EAAWx8D,OAAOuzB,aACvC,GAAKA,EAAL,CAEA,IAAMzB,EAAcn3B,KAAOquE,GAAmB3iE,QAAQ,SAChD0rB,EAAYp3B,KAAOA,KAAOquE,GAAmB5kE,IAAI,EAAG,WAAWkC,MACnE,SAGE3L,KAAO44B,GAAc5tB,UAAUmsB,EAAaC,EAAW,MAAO,QAChEM,EAAgBo2C,GAChBjyC,GAAoCiyC,MAIlCtnC,EAA+B,SAAA2nC,GACnC,IAAMnuC,EAA4BF,GAChCquC,EAAgB7kD,QAGlBiN,EAAqB,sBAAuByJ,GAC5CzJ,EAAqB,WAAYgyC,IAG7B7wC,EAAkB,SAAAvoB,GACtB,IAAMod,EAAWs1C,EAAWx8D,OAAOknB,SAC7B3gB,EAAQi2D,EAAWx8D,OAAOuG,MAC1B8iE,EAAsB7M,EAAWx8D,OAAOonB,aAE1CA,EAAe,GAKfA,EAHAi+C,EAEE9+D,GAASA,EAAMrK,WAAaqK,EAAMpK,QACrBq9B,GACb1vB,EACAod,EACAmiD,EACA9iE,GAGa,GAGF8zB,GACbvwB,EACA0yD,GACA,SAAAtwD,GAAQ,OAAIkqC,EAAYlqC,KACxBA,EACAgb,EACAmiD,GAIJn4C,EAAqB,eAAgB9J,IAGjCsP,EAAgC,SAAAtD,GACpC,GAAKA,GAAaopC,EAAWx8D,OAAOwzB,WAApC,CADgD,MAGnBgpC,EAAWx8D,OAAOwzB,WAAzCt3B,EAH0C,EAG1CA,UAAWC,EAH+B,EAG/BA,QAEjB,GAAKD,EAAL,CAEKC,IACHA,EAAUD,GAGZ,IAAMquB,EAA+BsJ,EACjCA,EAA0BvJ,WAAW,GAAGC,6BACxC,GAEE8F,EAAwBoF,GAC5BlL,EACAruB,EACAC,GAIAq2B,GAD4B,OAA1BnC,EACiBA,EAEA+C,EAASz3B,YAAYuE,oBAItCs2B,GAAsC,SAAApD,GAC1C,GAAKA,EAAL,CAEA,IAAMG,EAAeipC,EAAWx8D,OAAOuzB,aACjChJ,EAA+BsJ,EACjCA,EAA0BvJ,WAAW,GAAGC,6BACxC,GACAsK,EAA6BT,GAC/B7J,EACA6I,EACAopC,GAEF3nC,EAA6BD,GAC3BxB,EACAyB,EACAtB,GAEF,IAAI4B,EAAoBV,GACtBI,EACA2nC,GAGGrnC,GAWH3C,GAAmB2C,EAAkB7E,WAErCuE,EAA6BS,GAC3BT,EACA,KACA2nC,EACA3oC,KAhBFrB,GAAmBY,EAASz3B,YAAYuE,iBACxCqqB,EAA6B54B,KAAI,SAAAmB,GAC/B,IAAM8jC,EAAqBrD,EACvB54B,KAAO44B,GAAcztB,OAAO,cAC5B,GACChT,EAAK6J,WAAa7J,EAAK4P,OAASk0B,GACnCpE,GAAmB1/B,EAAKu9B,2BAc9B8E,EAAoBV,GAClBI,EACA2nC,GAGFtrC,EAAqB,YAAaiE,GAClCe,EAA4BrB,KAGxBrC,GAAqB,SAAAlC,GACzB,IAAMpwB,EAAkB80B,GACtB1E,EACA,KACAksC,EACA3oC,GAGF3C,EAAqB,kBAAmBhxB,IAG1C,OACE,oCACE,kBAAC,GAAD,CAAc0U,QAASod,GAAoBm3C,IA9Td,qBAgU5Bh+C,EACC,yBAAKnpC,UAAWV,EAAQ2X,SACtB,yBAAKjX,UAAWV,EAAQs+C,UACtB,0BAAM5yB,SAAUf,GACbo5D,EACC,kBAACp4D,GAAA,EAAD,CACErT,KAAK,QACLuJ,eAAgBmmE,GACdb,GAEFjmE,cAAe+mE,GAA8Bt3C,GAC7C7uB,qBAAsB6lE,EACtBjnF,UAAWV,EAAQwiF,UACnBtgE,eAAgBliB,EAAQ6+C,kBACxBn3C,MAAM,eACNsa,aAAa,YACbC,qBAAqB,wBACrBG,eAAgBq9B,EAAc,IAAM,EAAI,EACxCp9B,iBAAkBo9B,GAAe,IACjCl9B,QAASk9B,EAAc,IAAM,GAAK,GAClCn9B,uBAAwB,KACxBE,iBAAkBxiB,EAAQ0H,MAC1BvC,UAAWuc,GACXe,QAAM,IAGR,oCA3VW,qBA4VRonB,GACC,kBAACle,GAAA,EAAD,CACElJ,QAAM,EACNnK,KAAK,aACL0J,aAAa,YACbta,MAAM,gBACNua,qBAAqB,wBACrBJ,eAAgBqmE,GAA+Bf,GAC/CjmE,cAAeinE,GACb51C,EACA,KACA40C,GACAhkF,OAAOskF,GACT3lE,qBAAsB6lE,EACtBjnF,UAAWV,EAAQwiF,UACnBtgE,eAAgBliB,EAAQ6+C,kBACxBr8B,iBAAkBxiB,EAAQ0H,MAC1B0a,eAAgBq9B,EAAc,IAAM,EAAI,EACxCt6C,UAAWozB,GACXhW,QAASk9B,EAAc,IAAM,GAAK,GAClCn9B,uBAAwB,KACxBhZ,WAAYtJ,EAAQ0H,MACpBitB,WAAYwyD,EAAYA,EAAYt9C,iBAnXtB,yBAyXrBA,GACC,kBAACle,GAAA,EAAD,CACErT,KAAK,YACL5Q,MAAM,wBACN4jB,KAAMqpB,EACNj0C,UAAWV,EAAQqnF,iBACnB/9E,WAAYtJ,EAAQonF,eACpB5lC,eAAgBxhD,EAAQwhD,eACxBr8C,UAAWo8C,KAGf,kBAAC5nB,GAAA,EAAD,CACErhB,KAAK,eACL1Z,MAAM,0BACNuG,UAAWyhF,GACXthF,MAAO,CAAE41E,cACTzsC,WAAYzuC,EAAQ0H,MACpBm/E,UAAW7mF,EAAQ6b,YACnB+pB,SAAUs1C,EAAWx8D,OAAOknB,UAAY,QAE1C,yBAAKlU,IAAKk2D,IACV,4BAAQ/wE,QAAQ,EAAM5T,KAAM,UAA5B,YAMJ,yBAAKvC,UAAWV,EAAQu+C,WACtB,kBAAC,GAAD,CAAoBnuC,KAAM+2E,EAAahjF,KAAM+2E,MAIjD,yBAAKx6E,UAAWV,EAAQ2X,SACtB,yBAAKjX,UAAWV,EAAQs+C,UACtB,0BAAM5yB,SAAUf,GACbo5D,EACC,kBAACp4D,GAAA,EAAD,CACErT,KAAK,QACLuJ,eAAgBmmE,GACdb,GAEFjmE,cAAe+mE,GAA8Bt3C,GAC7C7uB,qBAAsB6lE,EACtBjnF,UAAWV,EAAQwiF,UACnBtgE,eAAgBliB,EAAQ6+C,kBACxBn3C,MAAM,eACNsa,aAAa,YACbC,qBAAqB,wBACrBG,eAAgBq9B,EAAc,IAAM,EAAI,EACxCp9B,iBAAkBo9B,GAAe,IACjCl9B,QAASk9B,EAAc,IAAM,GAAK,GAClCn9B,uBAAwB,KACxBE,iBAAkBxiB,EAAQ0H,MAC1BvC,UAAWuc,GACXe,QAAM,IAGR,oCAjbW,qBAkbRonB,GACC,kBAACle,GAAA,EAAD,CACErT,KAAK,eACL5Q,MAAM,gBACNma,eAAgBqmE,GAA+Bf,GAC/CjmE,cAAeinE,GACb51C,EACA,KACA40C,GAEFrlE,qBAAsB6lE,EACtBjnF,UAAWV,EAAQwiF,UACnBpgE,eAAgBq9B,EAAc,IAAM,EAAI,EACxCt6C,UAAWovB,GACXhS,QAASk9B,EAAc,IAAM,GAAK,GAClCn9B,uBAAwB,KACxBhZ,WAAYtJ,EAAQ0H,MACpBitB,WAAYwyD,EAAYA,EAAYt9C,iBApctB,yBA0crBA,GACC,kBAACle,GAAA,EAAD,CACErT,KAAK,YACL5Q,MAAM,wBACN4jB,KAAMqpB,EACNj0C,UAAWV,EAAQqnF,iBACnB/9E,WAAYtJ,EAAQonF,eACpB5lC,eAAgBxhD,EAAQwhD,eACxBr8C,UAAWo8C,KAGf,kBAAC5nB,GAAA,EAAD,CACErhB,KAAK,eACL1Z,MAAM,0BACNuG,UAAWyhF,GACXthF,MAAO,CAAE41E,cACTzsC,WAAYzuC,EAAQ0H,MACpBm/E,UAAW7mF,EAAQ6b,YACnB+pB,SAAUs1C,EAAWx8D,OAAOknB,UAAY,QAE1C,yBAAKlU,IAAKk2D,IACV,4BAAQ/wE,QAAQ,EAAM5T,KAAM,UAA5B,YAMJ,yBAAKvC,UAAWV,EAAQu+C,WACtB,kBAAC,GAAD,CAAoBnuC,KAAM+2E,EAAahjF,KAAM+2E,WCxd1C19E,GAtEGC,aAAW,SAAAC,GAAK,cAAG,CACnCia,SAAO,GACLjS,QAAS,OACT86E,UAAW,OACXniF,QAAS,cACTM,OAAQ,YACR6G,OAAQ,sBALH,cAMJ,4BAA8B,CAC7BnH,QAAS,gBACTmH,OAAQ,uBARL,cAUJ,2BAA6B,CAC5BnH,QAAS,aACTM,OAAQ,MACR6G,OAAQ,sBAbL,cAeJ,2BAA6B,CAC5BnH,QAAS,aACTmH,OAAQ,uBAjBL,GAoBP84C,UAAQ,GACN74C,MAAO,OACPpH,QAAS,gBAFH,cAGL,4BAA8B,CAC7B+Q,aAAc,SAJV,cAML,2BAA6B,CAC5BrQ,UAAW,IAPP,cASL,2BAA6B,CAC5BqQ,aAAc,OACdrQ,UAAW,IAXP,GAcRw/C,UAAU,aACR94C,MAAO,QACPzH,SAAU,SACT,4BAA8B,CAC7B0H,QAAS,SAGb+6E,mBAAoB,CAClBx6E,aAAc,OACd0B,cAAe,YACfC,cAAe,UAEjBwgF,kBAAmB,CACjBniF,aAAc,QAEhByoC,eAAgB,CACd,eAAgB,CACd5hB,aAAc,IAGlBu7D,gBAAiB,CACf9pF,SAAU,QAEZowC,eAAe,aACblpC,MAAO,sBACN,2BAA6B,CAC5BA,MAAO,oBACPgB,UAAW,SAGftC,KAAM,CACJqB,OAAQ,eCyBG8kB,gBAAU,CACvBnmB,KAAM,aACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,cAtFoB,CACpBvO,OAAQ,KAgFKmO,CAMZjZ,aAlBqB,SAAAtO,GACtB,MAAO,CACLm4E,WAAYn4E,EAAMoB,KAAK+2E,eAIA,SAAA5pE,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,aAAc+F,EAAOvb,QAUtC+O,EAnFY,SAAC,GAKT,IAJLy/B,EAII,EAJJA,kBACAoqC,EAGI,EAHJA,WACAtrC,EAEI,EAFJA,qBACAjlB,EACI,EADJA,aAEM3qB,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIE0lC,EAAWs1C,EAAWx8D,OAAOknB,SAEnC/zB,IAAM+C,WAAU,WACdo8B,EAAUF,KACT,CAACA,IAEJ,IAAME,EAAY,SAAAxoB,GAChB,IAAM8/D,EAAiB9/D,EAActM,WAAWC,OAC1CosE,EAAgBrN,EAAWx8D,OAAOvC,OAExC,IAAIosE,IAAiBA,EAAchmF,OAAnC,CAEA,IAAM8uC,EAAai3C,EAAej4E,KAAI,SAAAmB,GACpC,OAAO,eACFA,EADL,CAEElP,MAAO,OAIXstC,EAAqB,SAAUyB,KAGjC,OACE,yBAAK3wC,UAAWV,EAAQ2X,SACtB,yBAAKjX,UAAWV,EAAQs+C,UACtB,0BAAM5yB,SAAUf,EAAcjqB,UAAWV,EAAQmE,MAC/C,kBAAC2C,EAAA,EAAD,CACE1F,QAAQ,KACRpB,QAAS,CAAEc,KAAMd,EAAQygF,qBAExBvgF,EAAE,8BAGL,kBAACy5B,GAAA,EAAD,CACErhB,KAAK,SACLstB,SAAUA,EACV6I,WAAYzuC,EAAQqoF,gBACpB75D,aAAcxuB,EAAQooF,kBACtB15C,eAAgB1uC,EAAQ0uC,eACxBC,eAAgB3uC,EAAQ2uC,eACxBJ,UAAU,EACVppC,UAAWqpC,KAGb,4BAAQ33B,QAAQ,EAAM5T,KAAM,UAA5B,YAKJ,yBAAKvC,UAAWV,EAAQu+C,WACtB,kBAAC,GAAD,CAAoBnuC,KAAM0gC,EAAmB3sC,KAAM+2E,UC9D5C19E,GAXGC,aAAW,SAAAC,GAAK,MAAG,CACnCia,QAAS,CACPjS,QAAS,QAIXvB,KAAM,CACJqB,OAAQ,eC0DG8kB,gBAAU,CACvBnmB,KAAM,aACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,cA5DoB,CACpBiZ,cAAe,KAsDFrZ,CAMZjZ,aAlBqB,SAAAtO,GACtB,MAAO,CACLm4E,WAAYn4E,EAAMoB,KAAK+2E,eAIA,SAAA5pE,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,aAAc+F,EAAOvb,QAUtC+O,EAzDmB,SAAC,GAKhB,IAJLy/B,EAII,EAJJA,kBACAoqC,EAGI,EAHJA,WACAtrC,EAEI,EAFJA,qBAGM5vC,GADF,EADJ2qB,aAEgBntB,MADZ,EAEQyC,cAFR,oBAIai7E,EAAWx8D,OAAOknB,SAEnC/zB,IAAM+C,WAAU,WACd4zE,EAAiB13C,KAChB,CAACA,IAEJ,IAAM03C,EAAmB,SAAAhgE,GACvB,IAAMigE,EAAyBjgE,EAAcsb,kBAAkBH,cACzD+kD,EAAuBxN,EAAWx8D,OAAOiqE,eAE/C,IAAID,IAAwBA,EAAqBnmF,OAAjD,CAEA,IAAMkvC,EAAoBg3C,EAAuBp4E,KAAI,SAAAmB,GACnD,OAAO,eACFA,EADL,CAEElP,MAAO,OAIXstC,EAAqB,gBAAiB6B,KAExC,OACE,yBAAK/wC,UAAWV,EAAQ2X,SAEpB,kBAAC,GAAD,CAAoBvH,KAAM0gC,EAAmB3sC,KAAM+2E,S,qBCoC5C19E,GAnFGC,YAAW,CAC3Bka,QAAS,GACTnG,KAAM,CACJ9L,QAAS,OACT/G,OAAQ,WACRN,QAAS,WACTiB,SAAU,WACV,UAAW,CACTsP,OAAQ,YAGZg4B,MAAM,aACJ5oC,SAAU,QACVwH,OAAQ,QACRoqB,eAAgB,QAChBC,iBAAkB,YAClBC,mBAAoB,SACpB/xB,aAAc,MACdH,gBAAiB,UACjBe,OAAQ,cACP,2BAA6B,CAC5BX,SAAU,OACVwH,OAAQ,SAGZq4C,KAAM,CACJp4C,MAAO,QAET7G,MAAO,CACL8G,QAAS,OACTE,WAAY,SACZK,aAAc,OAEhBqxB,OAAQ,CACN1oB,OAAQ,UACRlJ,QAAS,OACTE,WAAY,SACZnH,WAAY,SACZE,OAAQ,aACRD,MAAO,WAET+oB,KAAM,CACJlpB,SAAU,OACVI,OAAQ,aAEViqF,aAAc,CACZljF,QAAS,OACTE,WAAY,WACZD,eAAgB,gBAChBiJ,OAAQ,WAEVtE,SAAU,CACRpL,YAAa,QAEf4W,SAAU,CACRrQ,MAAO,OACPD,OAAQ,OACRE,QAAS,OACTE,WAAY,SACZD,eAAgB,SAChB/H,gBAAiB,wBAEnBirF,aAAa,aACXtqF,SAAU,OACVG,MAAO,SACN,2BAA6B,CAC5BH,SAAU,SAGdiY,QAAS,CACP9Q,QAAS,QACTF,OAAQ,MACRC,MAAO,qBACPF,WAAY,UACZjG,SAAU,WACVqgB,OAAQ,GAEVgjB,OAAQ,CACN18B,aAAc,MACdxH,WAAY,UCAD+8D,GApEQ,SAAC,GAA0C,IAAxCzhC,EAAuC,EAAvCA,OAAQ+uD,EAA+B,EAA/BA,eAAgBljD,EAAe,EAAfA,SAC1C5lC,EAAUxC,KAD+C,EAE7CyC,cAF6C,mBAIzD+S,GAJyD,UAIjCnH,UAE9B,OAAKkuB,EAAOx3B,OAGV,yBAAK7B,UAAWV,EAAQ2X,SACrBoiB,EAAO1pB,KAAI,SAACwN,EAAOtN,GAClB,IAAMiB,EAAOuoB,EAAOnE,IAAIrlB,GAClBpM,EAAOqoC,GACXx5B,EACAxB,EACAA,EAAI,WAEN,OACE,yBACE6G,IAAK9H,EACL7P,UAAWV,EAAQwR,KACnB7Q,QAAS,kBAAMmoF,EAAet3E,EAAMjB,KAEpC,yBACE7P,UAAWV,EAAQ4mC,MACnBp+B,MAAO,CACLopB,gBAAgB,OAAD,OAASpgB,EAAKo1B,MAAd,OAGhB,GACAp1B,EAAKmd,YACJ,yBAAKjuB,UAAWV,EAAQ8V,UACtB,kBAAC,KAAD,CACEpV,UAAWV,EAAQ6oF,iBAK3B,yBAAKnoF,UAAWV,EAAQ69C,MACtB,yBAAKn9C,UAAWV,EAAQ4oF,cACtB,kBAAC9hF,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,OACzCuF,EAAKvF,OAER,kBAAC,KAAD,CAAqB8B,UAAWV,EAAQynB,QAE1C,yBAAK/mB,UAAWV,EAAQ2iC,QACtB,kBAAC,GAAD,CACEA,OAAQnxB,EAAKmxB,OAAOnxB,EAAKu0B,YACzBA,WAAYv0B,EAAKu0B,WACjB8D,aAAcr4B,EAAKq4B,aACnB+3C,wBAAyBh8C,EACzBy/C,uBAAuB,KAG3B,kBAACv+E,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQsK,UAC5CnG,EAAKmG,UAEPiG,IAAUwpB,EAAOx3B,OAAS,GACzB,yBAAK7B,UAAWV,EAAQwW,SAAU,UApDrB,MCjBvBuyE,GAAsB,SAAC7N,EAAYiM,GACvC,IAAMvhD,EAAWs1C,EAAWx8D,OAAOknB,SAC7B3gB,EAAQi2D,EAAWx8D,OAAOuG,MAC1B6gB,EAAeo1C,EAAWx8D,OAAOonB,aACjC3pB,EAAS++D,EAAWx8D,OAAOvC,OAC3BwnB,EAAeu3C,EAAWx8D,OAAOilB,cACjCqF,EAAakyC,EAAWx8D,OAAOsqB,WAC/BggD,EAAqBhgD,EACvBA,EAAWprB,QAAO,SAAApM,GAAI,OAAIA,EAAKmd,cAC/B,GACEs6D,EAAgB,CACpBljD,WAAYohD,EAAYphD,WACxBL,iBAAkByhD,EAAYt9C,cAGhC,OAAO2P,GACLyvC,EACAhkE,EACA6gB,EACA3pB,EACAwnB,EACAqlD,EACApjD,EACAs1C,EAAWx8D,OAAOuG,QCwFPznB,GA7GGC,aAAW,SAAAC,GAAK,YAAK,CACrCia,QAAQ,aACNjS,QAAS,OACTE,WAAY,SACZD,eAAgB,gBAChBF,MAAO,oBACPpH,QAAS,SACTkH,WAAY,qBACZjG,SAAU,WACVqgB,OAAQ,GACP,2BAA6B,CAC5BthB,QAAS,SACToH,MAAO,oBAGXyjF,eAAe,aACb3qF,SAAU,OACVQ,UAAW,MACX2G,QAAS,cACT,qBAAsB,EACtB,qBAAsB,WACtBwpC,SAAU,UACRxxC,EAAMQ,YAAYC,KAAK,MAAQ,CAC/BuH,QAAS,cACX,qBAAsB,IAGxByjF,QAAS,CACP1qF,WAAY,OACZoiB,eAAgB,YAChBniB,MAAOhB,EAAMuB,OAAOP,OAEtBq5B,iBAAe,GACbp5B,OAAQ,aADK,cAEZ,4BAA8B,CAC7BW,SAAU,WACVqgB,OAAQ,OACRS,KAAM,IACN3a,MAAO,oBACPpH,QAAS,WACTqH,QAAS,OACTtG,UAAW,yBATA,cAWZ,4BAA8B,CAC7Bf,QAAS,WACToH,MAAO,OACP7H,gBAAiB,QACjBuJ,OAAQ,IACRiiF,OAAQ,SAhBG,GAmBfC,eAAgB,CACd1qF,OAAQ,QACRX,SAAU,eAEZsrF,UAAU,aACR/qF,SAAU,OACVF,QAAS,WACTa,YAAa,OACbtB,gBAAiB,QACjBc,MAAOhB,EAAMuB,OAAOP,MACpBb,OAAO,aAAD,OAAeH,EAAMuB,OAAOP,OAClC,UAAW,CACTd,gBAAiB,UAElB,4BAA8B,CAC7BsB,YAAa,QAGjBqqF,SAAU,CACRhrF,SAAU,OACVF,QAAS,WACTT,gBAAiBF,EAAMuB,OAAOP,MAC9Bb,OAAO,aAAD,OAAeH,EAAMuB,OAAOP,OAClCA,MAAO,QACP,UAAW,CACTd,gBAAiBF,EAAMuB,OAAOP,MAC9BA,MAAO,YAGXqa,MAAM,aACJ1a,QAAS,aACTmR,YAAa,kBACb7H,cAAe,QACd,2BAA6B,CAC5BjC,QAAS,SAGb8jF,KAAK,aACHnrF,QAAS,cACR,2BAA6B,CAC5BA,QAAS,UAGborF,WAAY,CACV/qF,MAAOhB,EAAMuB,OAAOP,MACpBQ,YAAa,OAEfwqF,aAAc,CACZrrF,QAAS,SAEXiQ,WAAW,aACT5I,QAAS,QACR,2BAA6B,CAC5BA,QAAS,cC2DA2L,gBAbS,SAAAtO,GACtB,MAAO,CACLm4E,WAAYn4E,EAAMoB,KAAK+2E,WACvBn3E,cAAehB,EAAMgB,kBAIE,SAAAuN,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,aAAc+F,EAAOvb,QAI1B+O,EAlJA,SAAC,GAeT,IAdL6pE,EAcI,EAdJA,WACApqC,EAaI,EAbJA,kBACA64C,EAYI,EAZJA,aACAC,EAWI,EAXJA,cACA36D,EAUI,EAVJA,eACA46D,EASI,EATJA,gBACAC,EAQI,EARJA,oBACAC,EAOI,EAPJA,WACAC,EAMI,EANJA,kBACAjG,EAKI,EALJA,uBACAkG,EAII,EAJJA,mBACAC,EAGI,EAHJA,UACAt6C,EAEI,EAFJA,qBACAvc,EACI,EADJA,QAEMrzB,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIKkQ,EAASoC,YAAS0nE,GAAiB,CAC1C5pC,YAAa,WACb38B,UAAW,CACTyf,gBAAiBC,KAHZjjB,KAOHqS,GAAa,OAAJrS,QAAI,IAAJA,OAAA,EAAAA,EAAMqS,SAAU,GACvB+2D,EAAsC/2D,EAAtC+2D,cAAeC,EAAuBh3D,EAAvBg3D,mBAEjBwI,IAAiBvkE,OAAOC,KAAKu9D,GAAc,IAAI34E,OAC/CqjC,EAAWq8C,EAAe/G,EAAWx8D,OAAOknB,SAAW,GACvDukD,EAAYlI,GAAe/G,EAAWx8D,OAAOyrE,YAAqB,EAUlEC,EAAa,SAAAt2B,GACZA,GAAQA,EAAIvxD,SACbuxD,EAAI11C,QAAQ,SAAW,GAAK01C,EAAI11C,QAAQ,QAAU,GACpDs4B,OAAO/2C,KAAP,kBAAuBm0D,GAAO,UAEhCpd,OAAO/2C,KAAKm0D,EAAK,YAGnB,OACE,yBAAKpzD,UAAWV,EAAQ2X,SACtB,6BACGoyE,GACC,oCACE,kBAAC,GAAD,CACE7hF,MAAO,CACL5F,MAAO,CACL6nF,UAAWA,GAEbrgF,SAAU,SAAAC,GACR6lC,EAAqB,YAAa7lC,EAAEogF,aAGxCzgF,KAAM,GACNhJ,UAAWV,EAAQ+3B,gBACnBrwB,MACE,yBAAKhH,UAAWV,EAAQkpF,gBACrBhpF,EAAE,+CAAgD,IACnD,0BACEQ,UAAWV,EAAQmpF,QACnBxoF,QAAS,kBAAMypF,EAAW5Q,KAEzBt5E,EAAE,mBAEJA,EAAE,SAAU,IACb,0BACEQ,UAAWV,EAAQmpF,QACnBxoF,QAAS,kBAAMypF,EAAW3Q,KAEzBv5E,EAAE,uBAbP,SAqBN8pF,IAAsBC,GACtB,kBAACnjF,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQsO,YAC1C,0BAAM5N,UAAWV,EAAQypF,YAAaS,EAAY,EAAlD,UAAkE,IAChC,eAAjC3P,GAAY2P,GAAWtrF,OACvBmlF,EAEG7jF,EAAEq6E,GAAY2P,GAAWtrF,OADzBsB,EAAE,oBAKZ,yBAAKQ,UAAWV,EAAQqpF,gBACtB,kBAACloF,EAAA,EAAD,CACEC,QAAQ,WACRpB,QAAS,CAAEc,KAAMd,EAAQspF,WACzB3oF,QAAS,kBAAMsuB,GAAkBA,MAEhC/uB,EAAEypF,KAEHG,GACA,kBAAC3oF,EAAA,EAAD,CACE8B,KAAK,SACL7B,QAAQ,WACRpB,QAAS,CAAEc,KAAMd,EAAQupF,UACzB5oF,QAAS,kBAAMkpF,GAAmBA,OAEhCG,GACA,oCACE,0BAAMtpF,UAAWV,EAAQ+Y,OACtB7Y,EAAE,SADL,KACiB0lC,EADjB,IAhFPq8C,GAAiBnxC,EAEfnE,GACLo8C,GAAoB7N,EAAYpqC,IAHc,QAkF5B,KAGZ,0BACEpwC,UAAWsG,KAAWhH,EAAQwpF,KAAT,eAClBxpF,EAAQ0pF,aAAeM,KAGzB9pF,EAAE0pF,UCpEFnrE,GA1EE,SAACC,EAAQpZ,GACxB,IAAMgD,EAAS,GAET+hF,EAAgB/kF,EAAMolB,cAAcna,MACpCuhC,EAAWpzB,EAAOsqB,WAAWqhD,GAEnC,IAAKv4C,EAAU,OAAOxpC,EActB,GAvBiC,qBAY/BwpC,EAASjI,cACPnrB,EAAOuG,OAAUvG,EAAOuG,MAAMrK,UAZJ,yBAgB5Bk3B,EAASjI,cACRnrB,EAAOuzB,eAER3pC,EAAO2pC,aAAe,6BALtB3pC,EAAO4pC,WAAa,4BAQlBJ,EAAShM,cAAgBgM,EAAShM,aAAavjC,OAAQ,CACzD,IAAIssC,EAA0B,GAC1BC,GAAsB,EAE1BgD,EAAShM,aAAanN,SAAQ,SAACnnB,EAAMjB,GAC/BiB,EAAKs0B,cAAgB1iC,SAASoO,EAAKs0B,cAAgB,IACrDgJ,GAAsB,GAGxBD,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG9CgJ,IACHxmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAQ,yDAKd,IACG7wB,EAAOw9B,cACRgM,EAAShM,cACTgM,EAAShM,aAAavjC,OACtB,CACA,IAAMwsC,EAAwB+C,EAASlzB,gBACjCiwB,EAA0B,GAC5BI,EAAoB,EAExB6C,EAAShM,aAAanN,SAAQ,SAACnnB,EAAMjB,GAC/BiB,EAAKs0B,cAAgBt0B,EAAKs0B,aAAavjC,SACzC0sC,GAAqB7rC,SAASoO,EAAKs0B,eAErC+I,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG/CmJ,EAAoBF,IACtBzmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAO,0CAAD,OAAuC4V,MAKnD,GAAMrxB,OAAOC,KAAKrV,GAAQ/F,OAAQ,CAChC,IAAM+nF,EAAU,eAAQhiF,GACxBA,EAAO0gC,WAAP,eACGqhD,EAAgBC,GAIrB,OAAOhiF,GCxEI9K,GAAYC,YAAW,CAClCE,MAAM,aACJuxC,SAAU,SACVtxC,gBAAiB,OACjBC,OAAQ,oBACRC,UAAW,aACXC,aAAc,MACd0H,MAAO,SACPxH,SAAU,SACVuN,UAAW,QACXhG,OAAQ,QACR7G,OAAQ,QACP,2BAA6B,CAC5B6G,OAAQ,OACRiG,UAAW,OACXD,UAAW,OACX/F,MAAO,OACP9G,OAAQ,IAGZwF,KAAM,CACJqB,OAAQ,QAEVQ,QAAQ,aACN3H,QAAS,SACTM,OAAQ,WACRuwC,SAAU,OACV1pC,OAAQ,sBACP,2BAA6B,CAC5BnH,QAAS,SACTmH,OAAQ,uBAGZ5G,MAAO,CACLD,OAAQ,eAEV4rF,YAAY,aACV7kF,QAAS,OACT/G,OAAQ,YACP,4BAA8B,CAC7BkH,cAAe,SACflH,OAAQ,YAGZ6rF,SAAS,aACPnsF,QAAS,aACT,gBAAiB,CACfmR,YAAa,oBACbnR,QAAS,cAEX,eAAgB,CACdoH,MAAO,SAER,4BAA8B,CAC7B5H,OAAQ,EACRQ,QAAS,EACTM,OAAQ,EACRV,SAAU,OACV,gBAAiB,CACfJ,OAAQ,EACRQ,QAAS,KAIfmT,KAAK,aACH/L,MAAO,OACPxH,SAAU,QACVI,QAAS,aACTM,OAAQ,aACR6Q,YAAa,oBACb,eAAgB,CACd3R,OAAQ,EACRQ,QAAS,EACTM,OAAQ,IAET,4BAA8B,CAC7Bd,OAAQ,EACRQ,QAAS,EACTM,OAAQ,EACRV,SAAU,SAGdmjB,MAAI,IACF3b,MAAO,QACPzH,SAAU,SAFR,eAGD,4BAA8B,CAC7ByH,MAAO,UAJP,eAMD,2BAA6B,CAC5BA,MAAO,UAPP,eASD,2BAA6B,CAC5BA,MAAO,UAVP,IAaJ4qE,YAAU,qBACP,4BAA8B,CAC7B5qE,MAAO,UAFD,eAIP,2BAA6B,CAC5BA,MAAO,UALD,eAOP,2BAA6B,CAC5BA,MAAO,UARD,IAWVglF,kBAAmB,CACjB9rF,OAAQ,WACRgJ,cAAe,YACfC,cAAe,UAEjB8iF,kBAAmB,CACjBnsF,SAAU,QAEZmxC,eAAgB,CACd7pC,cAAe,UAEjB0B,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,mBAEVq5C,kBAAmB,CACjBn5C,QAAS,QAEXilF,UAAW,CACTz+E,KAAM,WACN,eAAgB,CACdrO,OAAQ,IAGZ+sF,gBAAiB,CACfrsF,SAAU,QAEZmJ,MAAO,CACLC,cAAe,YACfC,cAAe,UAEjBijF,qBAAqB,eAClB,4BAA8B,CAC7B9iF,cAAe,SAGnB04E,mBAAoB,CAClBx6E,aAAc,OACd0B,cAAe,YACfC,cAAe,UAEjBwgF,kBAAmB,CACjBniF,aAAc,QAEhByoC,eAAgB,CACd,eAAgB,CACd5hB,aAAc,IAGlB6hB,eAAgB,CACdlpC,MAAO,OACPvG,YAAa,QAEf6W,SAAU,CACRrQ,QAAS,OACTE,WAAY,MACZK,aAAc,OACdG,WAAY,QAEdi5E,aAAc,CACZ9gF,SAAU,OACVW,YAAa,QAEfogF,aAAc,CACZvgF,UAAW,SCsZAurB,gBAAU,CACvBnmB,KAAM,aACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,aALa6L,CAMZjZ,aAzBqB,SAAAtO,GACtB,MAAO,CACLm4E,WAAYn4E,EAAMoB,KAAK+2E,eAIA,SAAA5pE,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,aAAc+F,EAAOvb,KAEvCwoF,eAAgB,WACdx5E,EAASy5E,aAAW,aAAc,MAEpCC,kBAAmB,SAAAjxD,GACjBzoB,EAAS25E,KAAO,WAAP,GAAQ,cAAR,mBAAyBlxD,OAEpCo5B,iBAAkB,kBAAM7hD,EAASkjD,aAAiB,aAAc,SAS/DnjD,EAngBoB,SAAC,GAajB,IAZL1R,EAYI,EAZJA,KACAmxC,EAWI,EAXJA,kBACAo6C,EAUI,EAVJA,oBACAxgE,EASI,EATJA,cACAwwD,EAQI,EARJA,WACAtrC,EAOI,EAPJA,qBACAk7C,EAMI,EANJA,eACAE,EAKI,EALJA,kBACArgE,EAII,EAJJA,aACA0I,EAGI,EAHJA,QACA8/B,EAEI,EAFJA,iBACA9kD,EACI,EADJA,KAEMrO,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAEMwR,EAFN,KAGE5P,EAAU+P,IAAMsX,WAAW/mB,GAE3BwjC,EAAWs1C,EAAWx8D,OAAOknB,SAC7BykD,EAAgB3/D,EAAcna,MAC9B46E,EAAgBjQ,EAAWx8D,OAAOsqB,WAAWqhD,GAP/C,EAS4Bx4E,IAAMrQ,SAAS,MAT3C,mBASGswC,EATH,KASa4C,EATb,OAaA7iC,IAAMrQ,SAAS,IAbf,mBAWFmzC,EAXE,KAYFC,EAZE,OAc4B/iC,IAAMrQ,UAAS,GAd3C,mBAcGopB,EAdH,KAcakqC,EAdb,OAkBAjjD,IAAMrQ,SAAS,MAlBf,mBAgBF+wC,EAhBE,KAiBFsC,EAjBE,OAmBkChjC,IAAMrQ,SAASk1C,OAAO8I,YAnBxD,mBAmBGC,EAnBH,KAmBgBC,EAnBhB,OAoBgC7tC,IAAMrQ,UAAS,GApB/C,mBAoBGmtB,EApBH,KAoBey8D,EApBf,KAsBE54C,GACJ9nB,EAAcunB,cAAgB54B,QAAYqR,EAAcwnB,WAE1DrgC,IAAM8tC,iBAAgB,WACpB,IAAMC,EAAa,WACjBF,EAAehJ,OAAO8I,aAIxB,OAFA9I,OAAOllB,iBAAiB,SAAUouB,GAClCA,IACO,kBAAMlJ,OAAOjlB,oBAAoB,SAAUmuB,MACjD,IAhCC,OAkCsBptC,YAASyyB,GAAU,CAC3CqL,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACT6gC,WAAY9pB,EAAc7pB,GAC1BuyB,gBAAiBC,KALbC,GAlCJ,GAkCIA,QAASljB,GAlCb,GAkCaA,KAlCb,GA8CAoC,YAAS0yB,GAAmC,CAC9CoL,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTyf,gBAAiBC,EACjBmhB,WAAY9pB,EAAc7pB,GAC1B2vC,YAAan3B,KAAOm5B,IACjBztB,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOm5B,IACfxtB,MAAM,SACNR,OAAO,iBAbNukB,GA5CJ,GA4CF34B,KACS2kC,GA7CP,GA6CFriC,QAgBFb,IAAM+C,WAAU,WACdw2E,EAAcD,EAAcx8D,cAC3B,IAEH9c,IAAM+C,WAAU,WACd,GAAKm0B,GAAL,CAEA,IAAMwJ,EAA4BzJ,GAChCC,IAGF8L,EAA6BtC,MAC5B,CAACxJ,KAEJl3B,IAAM+C,WAAU,WACVu2E,EAAc9vE,WAChBu0B,EAAqB,cAAD,OACJy6C,EADI,qBAElBc,EAAc9vE,UAAU2zB,aAG3B,CAACm8C,EAAc9vE,YAElBxJ,IAAM+C,WAAU,WACd,GAAKxE,IAASA,GAAK44B,WAAWzmC,OAA9B,CAEA,IAAMyyC,EAAmB5kC,GAAK44B,WAAW,GACnCiM,EAAevN,GAAwBsN,GAE7CC,EAAY,WAAiBD,EAAgB,WAC7CC,EAAY,aAAmBD,EAAgB,aAE/C9D,GAAmB+D,EAAY,YAAgBr2B,iBA5GxB,qBA8GnBq2B,EAAapL,cACfkH,GAAgBkE,GAGdvqB,EAAciE,aAChBoiB,GAAgBkE,GAChBC,GAAoCD,IAGtCrF,EAAqB,cAAD,OAAey6C,EAAf,iBAA4C,GAEhEr5C,GAAUiE,GAEVP,EAAYO,MACX,CAAC7kC,KAEJ,IAAM4gC,GAAY,SAAAiE,GAChB,IAAKk2C,EAAchvE,SAAWgvE,EAAchvE,OAAO5Z,OAAQ,CACzD,IAAM8uC,EAAa4D,EAAa/4B,WAAWC,OAAO9L,KAAI,SAAAmB,GACpD,OAAO,eACFA,EADL,CAEElP,MAAO,OAGXstC,EAAqB,cAAD,OAAey6C,EAAf,YAAwCh5C,KAIhEx/B,IAAM+C,WAAU,WACTu2E,EAAcl5C,eACnBlB,GAAgBe,GAChBoD,GAAoCpD,MACnC,CAACq5C,EAAcl5C,eAElBpgC,IAAM+C,WAAU,WACKu2E,EAAcj5C,aAE/BkD,GAA8BtD,GAC9Bf,GAAgBe,MAEjB,CAACq5C,EAAcj5C,aAElB,IAAMnB,GAAkB,SAAAe,GACtB,GAAKA,EAAL,CACA,IAAMjM,EAAuBslD,EAAcrlD,cAAgB,GACrDA,EAAeH,GACnBmM,EACA,CAAEpzB,OAAQysE,IACV,eACA,EACAvlD,EACAC,GAGF+J,EAAqB,cAAD,OACJy6C,EADI,kBAElBvkD,GAGFgvB,GAAalqC,KAGTyqB,GAAqB,SAAAj0B,GACzB2zB,GAAwB,CACtB3hB,gBAAiBC,EACjBmhB,WAAY9pB,EAAc7pB,GAC1B2vC,YAAan3B,KAAO+H,GACjB2D,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAO+H,GACf4D,MAAM,SACNR,OAAO,iBAIR4wB,GAAgC,SAAAtD,GACpC,GAAKA,GAAaq5C,EAAcj5C,WAAhC,CAEA,IAAMt3B,EAAYuwE,EAAcj5C,WAAWt3B,UACrCC,EAAUswE,EAAcj5C,WAAWr3B,QAEzC,GAAKD,GAAcC,EAAnB,CAEA,IAAMouB,EAA+BsJ,EACjCA,EAA0BvJ,WAAW,GAAGC,6BACxC,GAEE8F,EAAwBoF,GAC5BlL,EACAruB,EACAC,GAIAq2B,GAD4B,OAA1BnC,EACiBA,EAEA+C,EAASz3B,YAAYuE,oBAItCs2B,GAAsC,SAAApD,GAC1C,GAAKA,EAAL,CAEA,IAAMG,EAAek5C,EAAcl5C,aAC7BhJ,EAA+BsJ,EACjCA,EAA0BvJ,WAAW,GAAGC,6BACxC,GACAsK,EAA6BT,GAC/B7J,EACA6I,EACA,CAAEpzB,OAAQysE,IAEZ53C,EAA6BD,GAC3BxB,EACAyB,EACAtB,GAEF,IAAI4B,EAAoBV,GAAoBI,EAA4B,CACtE70B,OAAQysE,IAGLt3C,GAWH3C,GAAmB2C,EAAkB7E,WAErCuE,EAA6BS,GAC3BT,EACA,KACA,CAAE70B,OAAQysE,GACV54C,KAhBFrB,GAAmBY,EAASz3B,YAAYuE,iBACxCqqB,EAA6B54B,KAAI,SAAAmB,GAC/B,IAAM8jC,EAAqBrD,EACvB54B,KAAO44B,GAAcztB,OAAO,cAC5B,GACChT,EAAK6J,WAAa7J,EAAK4P,OAASk0B,GACnCpE,GAAmB1/B,EAAKu9B,2BAc9B8E,EAAoBV,GAAoBI,EAA4B,CAClE70B,OAAQysE,IAGVv7C,EAAqB,cAAD,OACJy6C,EADI,eAElBx2C,GAUFe,EAA4BrB,KAGxBrC,GAAqB,SAAAlC,GACzB,IAAMpwB,EAAkB80B,GACtB1E,EACA,KACA,CAAEtwB,OAAQysE,GACV54C,GAGF3C,EAAqB,cAAD,OACJy6C,EADI,qBAElBzrE,IAIEysE,GAAiB,SAAAC,GAKrBxpF,EAAQ,CACNlD,MALY0sF,EACV,sCACA,sCAIFjrF,iBAHuBirF,EAAW,SAAW,SAI7ChrF,iBAAkB,SAEjBsT,MAAK,WACJg8B,EAAqB,cAAD,OAAey6C,EAAf,kBAA8C,MAClEz6C,EAAqB,cAAD,OAAey6C,EAAf,gBAA4C,MAChEz6C,EAAqB,cAAD,OAAey6C,EAAf,kBAA8C,IAClEz6C,EAAqB,cAAD,OAAey6C,EAAf,eAA2C,MAE/Dz6C,EAAqB,cAAD,OAAey6C,EAAf,iBAA4C,GAEhEW,EAAkB,CAAC,cAAD,OAAeX,EAAf,oBAClBW,EAAkB,CAAC,cAAD,OAAeX,EAAf,kBAClBl3B,IACA23B,IAEAI,OAEDrhE,OAAM,gBAqBLk2D,GAA6BjuC,EAC/BtF,GACE96B,EAAK7F,SACLimC,EAASz3B,YACTy3B,EAAS,0BAEX,GAEJ,OACE,kBAACtxC,EAAA,EAAD,CAAQb,KAAMA,EAAMK,QAAS,CAAErC,MAAOqC,EAAQrC,QAC5C,0BAAM+tB,SAAUf,GA5BC,WACfuwD,EAAW/6B,aAEfvQ,EAAqB,cAAD,OAAey6C,EAAf,iBAA4C,GAChEa,QAwB8CxqF,UAAWV,EAAQmE,MAC7D,kBAAC,GAAD,CACEmD,UAAWgsB,GACX/rB,gBAAiBvH,EAAQuH,kBAG3B,kBAAC,GAAD,CACE8G,KAAMA,EACN4gB,eAAgBo8D,GAChBzsF,MAAOsB,EAAE,wBAGV4xC,GACC,yBAAKpxC,UAAWV,EAAQgG,SACtB,kBAACc,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQpB,QAC/CmhF,GAA2BnhF,OAE9B,yBAAK8B,UAAWV,EAAQ+V,UACtB,kBAAC,KAAD,CAAwBrV,UAAWV,EAAQq/E,eAC3C,kBAACv4E,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQs/E,cAC5CxtC,EAASz3B,YAAYwE,gBAG1B,yBAAKne,UAAWV,EAAQuqF,aA9WD,qBA+WpBz4C,EAASjI,cACR,yBAAKnpC,UAAWsG,KAAWhH,EAAQohB,KAAMphB,EAAQwR,OAC/C,kBAACma,GAAA,EAAD,CACErT,KAAI,qBAAgB+xE,EAAhB,gBACJ3iF,MAAM,cACNsa,aAAa,YACbC,qBAAqB,wBACrBC,eAAgBliB,EAAQ6+C,kBACxBh9B,eAAgB0G,GAAuBupB,GACvC5wB,cAAe4G,GACbyqB,EACA,KACAT,GAEFhwB,qBAAsBuzB,GACtBjzB,eACEq9B,EAAc,MAAQA,GAAe,IAAM,EAAI,EAEjDl9B,QAASk9B,EAAc,IAAM,GAAK,GAClCn9B,uBAAuB,KACvBnd,UAAWozB,GACXjvB,WAAYtJ,EAAQ0H,MACpBitB,WAAYmd,EAASA,EAASjI,iBApYd,yBAwYrBiI,EAASjI,cACR,yBAAKnpC,UAAWsG,KAAWhH,EAAQohB,KAAMphB,EAAQwR,OAC/C,kBAACma,GAAA,EAAD,CACErT,KAAI,qBAAgB+xE,EAAhB,kBACJ3iF,MAAM,cACNma,eAAgB0G,GAAuBupB,GACvC5wB,cAAe4G,GACbyqB,EACA,KACAT,GAEFhwB,qBAAsBuzB,GACtBjzB,eACEq9B,EAAc,MAAQA,GAAe,IAAM,EAAI,EAEjDl9B,QAASk9B,EAAc,IAAM,GAAK,GAClCn9B,uBAAuB,KACvBnd,UAAWovB,GACXjrB,WAAYtJ,EAAQ0H,MACpBitB,WAAYmd,EAASA,EAASjI,mBAIjCshD,EAAcrlD,cACf,yBAAKplC,UAAWV,EAAQwR,MACtB,kBAACmoB,GAAA,EAAD,CACErhB,KAAI,qBAAgB+xE,EAAhB,kBACJzrF,MAAM,SACNgsB,SAAUA,EACVgb,SAAUA,EACVpX,aAAcxuB,EAAQ6qF,qBACtBhE,UAAW7mF,EAAQ2qF,UACnBl8C,WAAYzuC,EAAQ0H,MACpBvC,UAAWyhF,QAIdjyC,EAAyBpyC,QAC1B,yBAAK7B,UAAWV,EAAQwR,MACtB,kBAAC1K,EAAA,EAAD,CACE1F,QAAQ,KACRV,UAAWV,EAAQyqF,mBAElBvqF,EAAE,0BAEL,kBAACyrB,GAAA,EAAD,CACErT,KAAI,qBAAgB+xE,EAAhB,eACJ/+D,KArHTqpB,EACJtkC,KAAI,SAAAmB,GACH,OAAO,eACFA,EADL,CAEE5S,MAAM,GAAD,OAAK4S,EAAK6J,UAAV,mBAAyB7J,EAAK8J,SAA9B,YAA0Cpb,EAAEsR,EAAK+J,gBAGzDqC,QAAO,SAAApM,GAAI,OAAIA,EAAKw9B,aA+GP7pC,UAAW0mB,GACXviB,WAAYtJ,EAAQ0qF,kBACpBr8D,MAAM,EACNC,mBAAmB,QACnBC,oBAAqBvuB,EAAQ0vC,mBAKrC,6BACGy7C,EAAchvE,UAAYgvE,EAAchvE,OAAO5Z,QAC9C,kBAACuE,EAAA,EAAD,CACE1F,QAAQ,KACRpB,QAAS,CAAEc,KAAMd,EAAQygF,qBAExBvgF,EAAE,YAGP,kBAACy5B,GAAA,EAAD,CACErhB,KAAI,qBAAgB+xE,EAAhB,YACJzkD,SAAUA,EACVpX,aAAcxuB,EAAQooF,kBACtB15C,eAAgB1uC,EAAQ0uC,eACxBC,eAAgB3uC,EAAQ2uC,eACxBJ,UAAU,EACVppC,UAAWqpC,MAGf,kBAAC,GAAD,CACEsD,SAAUA,EACVlM,SAAUA,EACVrG,iBAAiB,EACjBC,sBAAsB,EACtBsW,YAAY,EACZC,SAAS,KAKf,kBAAC,GAAD,CACEk0C,oBAAoB,EACpBlG,wBAAwB,EACxBiG,mBAAmB,EACnBL,aAAch7D,EAAa,kBAAoB,kBAC/Ci7D,cAAej7D,EAAa,gBAAkB,eAC9CM,eAAgB,kBAAMo8D,GAAe18D,IACrCmiB,kBAAmBA,UCpddryB,GAlFE,SAACC,EAAQpZ,GACxB,IAAMgD,EAAS,GAETijF,EAAqBjmF,EAAMolB,cAAcna,MACzCiY,EAAgB9J,EAAOsqB,WAAWuiD,GAExC,IAAK/iE,EAAe,OAAOlgB,EAoB3B,GAjBGkgB,EAAcvD,OACduD,EAAcvD,MAAMrK,WACpB4N,EAAcvD,MAAMpK,QAIrBxB,KAAOmP,EAAcvD,MAAMpK,SAASsK,KAClCqD,EAAcvD,MAAMrK,UACpB,QACE4N,EAAcyD,YAElB3jB,EAAO2c,MAAQ,CACbI,KAAM,2CACN1R,UAAW,CAAE25B,OAAQ9kB,EAAcyD,aATrC3jB,EAAO2c,MAAQ,qBAabuD,EAAcsd,cAAgBtd,EAAcsd,aAAavjC,OAAQ,CACnE,IAAIssC,EAA0B,GAC1BC,GAAsB,EAE1BtmB,EAAcsd,aAAanN,SAAQ,SAACnnB,EAAMjB,GACpCiB,EAAKs0B,cAAgB1iC,SAASoO,EAAKs0B,cAAgB,IACrDgJ,GAAsB,GAGxBD,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG9CgJ,IACHxmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAQ,yDAKd,IACG7wB,EAAOw9B,cACRtd,EAAcsd,cACdtd,EAAcsd,aAAavjC,OAC3B,CACA,IAAMwsC,EAAwBvmB,EAAcnN,UACxCmN,EAAcnN,UAAU2zB,UACxBxmB,EAAc5J,gBACZiwB,EAA0B,GAC5BI,EAAoB,EAExBzmB,EAAcsd,aAAanN,SAAQ,SAACnnB,EAAMjB,GACpCiB,EAAKs0B,cAAgBt0B,EAAKs0B,aAAavjC,SACzC0sC,GAAqB7rC,SAASoO,EAAKs0B,eAErC+I,EAAwBt+B,GAAS,CAAEu1B,aAAc,YAG/CmJ,EAAoBF,IACtBzmC,EAAOw9B,aAAP,eACK+I,EADL,CAEE1V,OAAO,0CAAD,OAAuC4V,MAKnD,GAAMrxB,OAAOC,KAAKrV,GAAQ/F,OAAQ,CAChC,IAAM+nF,EAAU,eAAQhiF,GACxBA,EAAO0gC,WAAP,eACGuiD,EAAqBjB,GAI1B,OAAOhiF,GC8WMgiB,gBAAU,CACvBnmB,KAAM,aACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,aALa6L,CAMZjZ,aAzBqB,SAAAtO,GACtB,MAAO,CACLm4E,WAAYn4E,EAAMoB,KAAK+2E,eAIA,SAAA5pE,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,aAAc+F,EAAOvb,KAEvCwoF,eAAgB,WACdx5E,EAASy5E,aAAW,aAAc,MAEpCC,kBAAmB,SAAAjxD,GACjBzoB,EAAS25E,KAAO,WAAP,GAAQ,cAAR,mBAAyBlxD,OAEpCo5B,iBAAkB,kBAAM7hD,EAASkjD,aAAiB,aAAc,SAS/DnjD,EA/YyB,SAAC,GAatB,IAZL1R,EAYI,EAZJA,KACAs1C,EAWI,EAXJA,aACAi2C,EAUI,EAVJA,oBACAxgE,EASI,EATJA,cACAwwD,EAQI,EARJA,WACAtrC,EAOI,EAPJA,qBACAk7C,EAMI,EANJA,eACAE,EAKI,EALJA,kBACArgE,EAII,EAJJA,aACA0I,EAGI,EAHJA,QACA8/B,EAEI,EAFJA,iBACA9kD,EACI,EADJA,KAEMrO,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAEMwR,EAFN,KAGE5P,EAAU+P,IAAMsX,WAAW/mB,GAE3BwjC,EAAWs1C,EAAWx8D,OAAOknB,SAC7B2lD,EAAqB7gE,EAAcna,MACnCi7E,EAAsBtQ,EAAWx8D,OAAOsqB,WACxCyiD,EAAqBD,EAAoBD,GAR3C,EAUsC15E,IAAMrQ,SAAS,MAVrD,mBAUGgnB,EAVH,KAUkB0nB,EAVlB,OAWsDr+B,IAAMrQ,SAC9D,MAZE,mBAWGkqF,EAXH,KAW0BC,EAX1B,OAckC95E,IAAMrQ,SAASk1C,OAAO8I,YAdxD,mBAcGC,EAdH,KAcgBC,EAdhB,OAegC7tC,IAAMrQ,UAAS,GAf/C,mBAeGmtB,EAfH,KAeey8D,EAff,KAiBEnmE,EAAQwmE,EAAmBxmE,MAC3BrK,EAAaqK,GAASA,EAAMrK,WAAcvB,OAEhDxH,IAAM8tC,iBAAgB,WACpB,IAAMC,EAAa,WACjBF,EAAehJ,OAAO8I,aAIxB,OAFA9I,OAAOllB,iBAAiB,SAAUouB,GAClCA,IACO,kBAAMlJ,OAAOjlB,oBAAoB,SAAUmuB,MACjD,IA3BC,MA6BsBptC,YAASkyB,GAAe,CAChD4L,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTq8B,gBAAiBtlB,EAAc7pB,GAC/BuyB,gBAAiBC,KALbC,EA7BJ,EA6BIA,QAASljB,EA7Bb,EA6BaA,KA7Bb,GA0CAoC,YAASiyB,GAAY,CACvB6L,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTyf,gBAAiBC,EACjB2c,gBAAiBtlB,EAAc7pB,GAC/B2vC,YAAan3B,KAAOuB,GACjBmK,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAOuB,GAAWkI,IAAI,EAAG,WACxCkC,MAAM,SACNR,OAAO,iBAdHksB,GAvCP,GAuCFpd,QACMqd,GAxCJ,GAwCFvgC,KACSwgC,GAzCP,GAyCFl+B,QAgBFb,IAAM+C,WAAU,WACdw2E,EAAcK,EAAmB98D,cAChC,IAEH9c,IAAM+C,WAAU,WACd,GAAKxE,GAASA,EAAK6X,eAAe1lB,OAAlC,CAEA,IAAMsuC,EAAwBzgC,EAAK6X,eAAe,GAC5C6oB,EAAoB/E,GACxB8E,GAEIjJ,EAAaiJ,EAAsBlO,OAAO,GAE5CiF,EAAW/rB,YAAYA,YACzBi1B,EAAiB,WlRzIC,qBkR0ITlJ,EAAW5gB,IACpB8pB,EAAiB,WlR1IF,kBkR4IfA,EAAiB,WlR9IF,kBkRiJjB86C,GAAa96C,GACbC,GAAgBD,GAEhB,IAAM+6C,EAAgBL,EAAoBt2E,WACxC,SAAA1D,GAAI,OAAIA,EAAKmd,eAIZk9D,GAAmC,IAAlBA,GAClBA,IAAkBN,GAElB37C,EAAqB,cAAD,OAAei8C,EAAf,iBAA4C,GAGlEj8C,EAAqB,cAAD,OAAe27C,EAAf,iBAAiD,GAErE37C,EAAqB,cAAD,OACJ27C,EADI,eAElBz6C,EAAkBz2B,YAAY4R,WAGhC+kB,GAAUF,GAEV66C,EAAyBE,GACzB37C,EAAiBY,MAChB,CAAC1gC,IAEJwE,qBAAU,WACH4T,GAAkBijE,GACvB16C,GAAgBvoB,KACf,CAACijE,EAAmBxmE,QAEvB,IAAM+rB,GAAY,SAAAF,GAChB,IAAK26C,EAAmBtvE,SAAWsvE,EAAmBtvE,OAAO5Z,OAAQ,CACnE,IAAM8uC,EAAaP,EAAkB50B,WAAWC,OAAO9L,KAAI,SAAAmB,GACzD,OAAO,eACFA,EADL,CAEElP,MAAO,OAGXstC,EAAqB,cAAD,OACJ27C,EADI,YAElBl6C,KAKAu6C,GAAe,SAAApjE,GACnB,GAAKA,EAAL,CAEA,IAAMwD,EAASxD,EAAcnO,YAAY2R,OACzC4jB,EAAqB,cAAD,OACJ27C,EADI,qBAElBv/D,KAIE+kB,GAAkB,SAAAvoB,GACtB,GAAKA,EAAL,CAEA,IAAMod,EAAWs1C,EAAWx8D,OAAOknB,SAC7B3gB,EAAQwmE,EAAmBxmE,MAC3B4gB,EAAuB4lD,EAAmB3lD,cAAgB,GAEhE,GAAI7gB,GAASA,EAAMrK,WAAaqK,EAAMpK,QAAS,CAC7C,IAAMirB,EAAeoS,GACnB1vB,EACAod,EACAC,EACA5gB,GAGF2qB,EAAqB,cAAD,OACJ27C,EADI,kBAElBzlD,QAGF8J,EAAqB,cAAD,OACJ27C,EADI,kBAElB,MAkBAO,GAAsB,SAAAR,GAK1BxpF,EAAQ,CACNlD,MALY0sF,EACV,sCACA,sCAIFjrF,iBAHuBirF,EAAW,SAAW,SAI7ChrF,iBAAkB,SAEjBsT,MAAK,WACJg8B,EAAqB,cAAD,OAAe27C,EAAf,WAA4C,MAChE37C,EAAqB,cAAD,OACJ27C,EADI,kBAElB,IAGF37C,EAAqB,cAAD,OACJ27C,EADI,iBAElB,IAICG,GAAmD,IAA1BA,GAC1BA,IAA0BH,GAE1B37C,EAAqB,cAAD,OACJ87C,EADI,iBAElB,GAIJV,EAAkB,CAAC,cAAD,OAAeO,EAAf,aAClBp4B,IACA23B,IAEAI,OAEDrhE,OAAM,gBA8BLk2D,GAA6Bv3D,EAC/BgkB,GACE96B,EAAK7F,SACL2c,EAAcnO,YACdmO,EAAc,0BAEhB,GAEJ,OACE,kBAAChoB,EAAA,EAAD,CAAQb,KAAMA,EAAMK,QAAS,CAAErC,MAAOqC,EAAQrC,QAC5C,0BAAM+tB,SAAUf,GArCC,WACnB,IAAIuwD,EAAW/6B,WAAf,EAGGurC,GAAmD,IAA1BA,GAC1BA,IAA0BH,IAE1BP,EAAkB,CAAC,cAAD,OAAeU,EAAf,aAClBZ,KAGF,IAAM7iE,EAAiBujE,EAAoBn7E,KAAI,SAACmB,EAAMjB,GAGpD,OAFAiB,EAAKmd,WAAape,IAAUg7E,EAExB/5E,EAAKmd,WAAmBnd,EAErB,eACFA,EADL,CAEEyT,MAAO,KACP6gB,aAAc,QAIlB8J,EAAqB,aAAD,YAAmB3nB,IACvCijE,QAa8CxqF,UAAWV,EAAQmE,MAC7D,kBAAC,GAAD,CACEmD,UAAWgsB,GAAWod,GACtBnpC,gBAAiBvH,EAAQuH,kBAG3B,kBAAC,GAAD,CACE8G,KAAMA,EACN4gB,eAAgB68D,GAChBltF,MAAOsB,EAAE,6BAGVsoB,GACC,yBAAK9nB,UAAWV,EAAQgG,SACtB,kBAACc,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQpB,QAC/CmhF,GAA2BnhF,OAE9B,yBAAK8B,UAAWV,EAAQ+V,UACtB,kBAAC,KAAD,CAAwBrV,UAAWV,EAAQq/E,eAC3C,kBAACv4E,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQs/E,cAC5C92D,EAAcnO,YAAYtE,WAG/B,yBAAKrV,UAAWV,EAAQuqF,aACtB,yBAAK7pF,UAAWsG,KAAWhH,EAAQwqF,SAAUxqF,EAAQqwE,aACnD,kBAAC1kD,GAAA,EAAD,CACErT,KAAI,qBAAgBizE,EAAhB,WACJ1pE,eAAgBmmE,GACdx/D,GAEFtH,cAAe+mE,GAA8Bt3C,IAC7C7uB,qBA1HW,SAAAV,GACzBwvB,GAAiB,CACfxd,gBAAiBC,EACjB2c,gBAAiBtlB,EAAc7pB,GAC/B2vC,YAAan3B,KAAO+H,GACjB2D,QAAQ,SACRP,OAAO,cACVisB,UAAWp3B,KAAOA,KAAO+H,GAAM0B,IAAI,EAAG,WACnCkC,MAAM,SACNR,OAAO,iBAkHEtC,eAAgBliB,EAAQ6+C,kBACxBn3C,MAAM,eACNsa,aAAa,YACbC,qBAAqB,wBACrBG,eACEq9B,EAAc,MAAQA,GAAe,IAAM,EAAI,EAEjDl9B,QAASk9B,EAAc,IAAM,GAAK,GAClCp9B,kBAAkB,EAClBG,iBAAkBxiB,EAAQ0H,MAC1B4a,uBAAuB,KACvBnd,UAAWuc,GACXkB,oBAAkB,KAGtB,yBAAKliB,UAAWV,EAAQwqF,UACtB,kBAAC7wD,GAAA,EAAD,CACErhB,KAAI,qBAAgBizE,EAAhB,kBACJ3sF,MAAM,SACNgnC,SAAUA,EACVpX,aAAcxuB,EAAQ6qF,qBACtBhE,UAAW7mF,EAAQ2qF,UACnBl8C,WAAYzuC,EAAQ0H,MACpBvC,UAAWyhF,OAKjB,6BACG6E,EAAmBtvE,UAAYsvE,EAAmBtvE,OAAO5Z,QACxD,kBAACuE,EAAA,EAAD,CACE1F,QAAQ,KACRpB,QAAS,CAAEc,KAAMd,EAAQygF,qBAExBvgF,EAAE,YAGP,kBAACy5B,GAAA,EAAD,CACErhB,KAAI,qBAAgBizE,EAAhB,YACJ3lD,SAAUA,EACVpX,aAAcxuB,EAAQooF,kBACtB15C,eAAgB1uC,EAAQ0uC,eACxBC,eAAgB3uC,EAAQ2uC,eACxBJ,UAAU,EACVppC,UAAWqpC,MAGf,kBAAC,GAAD,CACEsD,SAAUtpB,EACVod,SAAUA,EACVrG,iBAAiB,EACjBC,sBAAsB,EACtBsW,YAAY,EACZC,SAAS,KAKf,kBAAC,GAAD,CACEk0C,oBAAoB,EACpBlG,wBAAwB,EACxBiG,mBAAmB,EACnBL,aACEh7D,EAAa,uBAAyB,uBAExCi7D,cACEj7D,EAAa,qBAAuB,oBAEtCM,eAAgB,kBAAM68D,GAAoBn9D,IAC1CmiB,kBAAmBmE,UCvWdz3C,GA5DGC,YAAW,CAC3Bka,SAAO,IACLjS,QAAS,OACT86E,UAAW,OACXniF,QAAS,cACTM,OAAQ,YACR6G,OAAQ,sBALH,eAMJ,4BAA8B,CAC7BnH,QAAS,gBACTmH,OAAQ,uBARL,eAUJ,2BAA6B,CAC5BnH,QAAS,aACTM,OAAQ,MACR6G,OAAQ,sBAbL,eAeJ,2BAA6B,CAC5BnH,QAAS,aACTmH,OAAQ,uBAjBL,IAoBP84C,UAAQ,IACN74C,MAAO,OACPpH,QAAS,gBAFH,eAGL,4BAA8B,CAC7B+Q,aAAc,SAJV,eAML,2BAA6B,CAC5BrQ,UAAW,IAPP,eASL,2BAA6B,CAC5BqQ,aAAc,OACdrQ,UAAW,IAXP,IAcRw/C,UAAU,aACR94C,MAAO,QACPzH,SAAU,SACT,4BAA8B,CAC7B0H,QAAS,SAGb+6E,mBAAoB,CAClBx6E,aAAc,OACd0B,cAAe,YACfC,cAAe,UAEjBmkF,cAAe,CACbrmF,QAAS,OACTE,WAAY,WACZjH,OAAQ,YAEVmmE,YAAa,CACXnmE,OAAQ,cAEVqtF,eAAgB,CACdztF,SAAU,UCwEC+rB,gBAAU,CACvBnmB,KAAM,aACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbC,cAzHoB,CACpBse,WAAY,KAmHC1e,CAMZjZ,aAlBqB,SAAAtO,GACtB,MAAO,CACLm4E,WAAYn4E,EAAMoB,KAAK+2E,eAIA,SAAA5pE,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,aAAc+F,EAAOvb,QAUtC+O,EAtHc,SAAC,GAQX,IAPL81E,EAOI,EAPJA,YACAjM,EAMI,EANJA,WACAtrC,EAKI,EALJA,qBACAjlB,EAII,EAJJA,aACAo5D,EAGI,EAHJA,uBACA1wD,EAEI,EAFJA,QACAhlB,EACI,EADJA,KAEMrO,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,sBAIkD2R,IAAMrQ,UAAS,GAJjE,mBAIGyqF,EAJH,KAIwBC,EAJxB,OAK0Cr6E,IAAMrQ,SAAS,MALzD,mBAKG2qF,EALH,KAKoBC,EALpB,KAOExmD,EAAWs1C,EAAWx8D,OAAOknB,SAEnC/zB,IAAM+C,WAAU,WACd2mE,EAAc4L,KACb,CAACA,IAEJ,IAAM5L,EAAgB,SAAAiL,GACpB,IAAM6F,EAAkBtI,EACpByC,EAAQ76C,sBAAsBxG,kBAC9BqhD,EAAQpqE,0BAA0BC,sBAEhCiwE,EAAyBpR,EAAWx8D,OAAOsqB,WAE7CsjD,GAA0BA,EAAuB/pF,QAErDqtC,EAAqB,aAAcy8C,IAW/BE,EAAqB,WACzBL,GAAuB,IAGzB,OACE,yBAAKxrF,UAAWV,EAAQ2X,SACrBosE,EACC,6BACGkI,GACC,kBAAC,GAAD,CACE54D,QAASA,EACT1zB,KAAMssF,EACNvhE,cAAeyhE,EACfjB,oBAAqBqB,EACrBz7C,kBAAmBq2C,EACnB94E,KAAMA,KAKZ,6BACG49E,GACC,kBAAC,GAAD,CACE54D,QAASA,EACT1zB,KAAMssF,EACNvhE,cAAeyhE,EACfjB,oBAAqBqB,EACrBt3C,aAAckyC,EACd94E,KAAMA,KAMd,yBAAK3N,UAAWV,EAAQs+C,UACtB,0BAAM5yB,SAAUf,GACd,kBAAC7jB,EAAA,EAAD,CACE1F,QAAQ,KACRpB,QAAS,CAAEc,KAAMd,EAAQygF,qBAGrBvgF,EADH6jF,EACK,oBACA,0BAER,kBAACpqD,GAAA,EAAD,CACErhB,KAAK,aACLnT,UAAWq2D,GACXstB,eAvDY,SAACt3E,EAAMjB,GAC3B67E,EAAmB,eACd56E,EADa,CAEhBjB,MAAOA,KAET27E,GAAuB,IAmDftmD,SAAUA,MAIhB,yBAAKllC,UAAWV,EAAQu+C,WACtB,kBAAC,GAAD,CAAoBnuC,KAAM+2E,EAAahjF,KAAM+2E,U,kjCC9G9C,IAAMsR,GAAyBjgF,KAAH,MCA7BkgF,IDuBgClgF,KAAH,MCvBD,SAAAmgF,GAChC,IAAMC,EAAgB,GAElBD,EAAa/hB,gBACfgiB,EAAc12E,KAAKukE,IAGjBkS,EAAaliB,gBACfmiB,EAAc12E,KAAKwkE,IAGrB,IAAMnN,EAA0Bof,EAAapf,wBAK7C,OAJIA,GAA2BA,EAAwBjnB,cACrDsmC,EAAc12E,KxDiDK,kBwD9Cd02E,IChBInvF,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC5CsI,QAAS,CACPvH,WAAY,QAEd64B,OAAQ,CACN15B,gBAAiBF,EAAMuB,OAAOP,MAC9Bb,OAAO,aAAD,OAAeH,EAAMuB,OAAOP,OAClCA,MAAO,OACP,UAAW,CACTd,gBAAiBF,EAAMuB,OAAOP,QAGlCkuF,cAAe,CACbjuF,OAAQ,mBCHCkuF,GAAuB,SAAC,GAAkC,IAAhCltF,EAA+B,EAA/BA,KAAMsC,EAAyB,EAAzBA,YAAarD,EAAY,EAAZA,MAClDoB,EAAUxC,KADoD,EAExDyC,cAALC,EAF6D,oBAIpE,OACE,kBAACM,EAAA,EAAD,CACEb,KAAMA,EACNE,QAASoC,EACT6U,kBAAgB,qBAChBg2E,mBAAiB,4BAEjB,kBAAClsF,EAAA,EAAD,CAAaC,GAAG,sBACbX,EAAE,2CAEL,kBAACc,EAAA,EAAD,KACE,kBAACC,EAAA,EAAD,CACEJ,GAAG,2BACHH,UAAWV,EAAQgG,SAElB9F,EAAE,yBAJL,IAIgCtB,EAJhC,IAIwC,IACrCsB,EAAE,6DAGP,kBAACgB,EAAA,EAAD,KACE,yBAAKR,UAAWV,EAAQ4sF,eACtB,kBAACzrF,EAAA,EAAD,CACET,UAAWV,EAAQs3B,OACnBl2B,QAAQ,WACRT,QAASsB,GAHX,UCmCKwc,GA5DE,SAAAC,GACf,IAAMpW,EAAS,GAwDf,OAtDIgV,GAAWoB,EAAOjO,WAAa,IAAI,KACrCnI,EAAOmI,UAAY,0BAGjB6M,GAAWoB,EAAOhO,UAAY,IAAI,KACpCpI,EAAOoI,SAAW,yBAGhB4M,GAAWoB,EAAO25B,OAAS,IAAI,KACjC/vC,EAAO+vC,MAAQ,qBAGb/6B,GAAWoB,EAAO9N,OAAS,IAAI,GACjCtI,EAAOsI,MAAQ,oBACNwM,GAAQsB,EAAO9N,OAAS,IAAI,KACrCtI,EAAOsI,MAAQ,iBAGb0M,GAAWoB,EAAOquE,SAAW,IAAI,KACnCzkF,EAAOykF,QAAU,uBAGfzvE,GAAWoB,EAAOsuE,MAAQ,IAAI,KAChC1kF,EAAO0kF,KAAO,oBAGZ1vE,GAAWoB,EAAOuuE,KAAO,IAAI,KAC/B3kF,EAAO2kF,IAAM,mBAGX3vE,GAAWoB,EAAOwuE,YAAc,IAAI,GACtC5kF,EAAO4kF,WAAa,0BAEnBpvE,GAAcY,EAAOwuE,WAxCS,IAwC+B,KAE9D5kF,EAAO4kF,WAAa,uBAGlB5vE,GAAWoB,EAAOyuE,gBAAkB,IAAI,GAC1C7kF,EAAO6kF,eAAiB,8BAEvBrvE,GAAcY,EAAOyuE,eA/Ca,GA+CmC,I7YQrC,SAAA7qF,GACnC,IAAKA,EAAO,OAAO,EAEnB,IAAM2iB,EAAQ3iB,EAAMykC,MAAM,KACpBjgB,EAAQ1jB,SAAS6hB,EAAM,IACvBmoE,EAAOhqF,SAAS6hB,EAAM,IACtBooE,EAAcjqF,SAASiW,OAASmL,OAAO,OAE7C,QAAIsC,EA/DS,OAgETsmE,EAAOC,G6YdCC,CAAsB5uE,EAAOyuE,kBADvC7kF,EAAO6kF,eAAiB,2BAKtB5vE,GAASmB,EAAO6uE,KAAO,IAAI,GAC7BjlF,EAAOilF,IAAM,kBACHzvE,GAAcY,EAAO6uE,IAvDR,GAuDiC,KACxDjlF,EAAOilF,IAAM,eAGRjlF,GCnEH9K,GAAYC,aAAW,SAAAC,GAAK,cAAK,CACrCia,SAAO,GACLjS,QAAS,OACT86E,UAAW,OACXniF,QAAS,cACTM,OAAQ,YACR6G,OAAQ,sBALH,cAMJ,4BAA8B,CAC7BnH,QAAS,gBACTmH,OAAQ,uBARL,cAUJ,2BAA6B,CAC5BnH,QAAS,aACTM,OAAQ,MACR6G,OAAQ,uBAbL,cAeJ,2BAA6B,CAC5BnH,QAAS,gBACTmH,OAAQ,qBACRK,cAAe,mBAlBZ,GAqBPy4C,UAAQ,GACN74C,MAAO,OACPpH,QAAS,gBAFH,cAGL,4BAA8B,CAC7B+Q,aAAc,SAJV,cAML,2BAA6B,CAC5BrQ,UAAW,IAPP,cASL,2BAA6B,CAC5BqQ,aAAc,OACdrQ,UAAW,IAXP,GAcRw/C,UAAU,aACR94C,MAAO,QACPzH,SAAU,SACT,2BAA6B,CAC5BiI,aAAc,SAGlBrH,MAAO,CACL+I,cAAe,YACfC,cAAe,SACf3B,aAAc,QAEhBw6E,mBAAoB,CAClBx6E,aAAc,QAEhBunF,gBAAiB,CACfnvF,QAAS,GAEXovF,aAAc,CACZhiF,UAAW,SAEbtH,KAAM,CACJxF,OAAQ,cAEVogB,IAAK,CACHrZ,QAAS,OACTC,eAAgB,iBAElB+nF,eAAgB,CACdznF,aAAc,OACdR,MAAO,QAEToY,MAAO,CACL5X,aAAc,OACdR,MAAO,OAETkoF,WAAY,CACV1nF,aAAc,OACdR,MAAO,OAETmoF,UAAW,CACT3nF,aAAc,OACdR,MAAO,OAETquB,WAAY,CACVr1B,WAAY,QAEdovF,oBAAqB,CACnBpoF,MAAO,OAETqoF,SAAU,CACRroF,MAAO,OAETsoF,YAAa,CACX9nF,aAAc,QAEhB+nF,aAAc,CACZ/nF,aAAc,OAEhBgoF,0BAA2B,CACzBziF,UAAW,OACXnN,QAAS,aAEX6vF,+BAAgC,CAC9B1iF,UAAW,QACXhG,OAAQ,EACRnH,QAAS,GAEX8vF,mBAAoB,CAClBloF,aAAc,kBACd7G,UAAW,OACXvB,OAAO,aAAD,OAAeH,EAAMuB,OAAOP,OAClCwwC,SAAU,UAEZk/C,oBAAqB,CACnB5iF,UAAW,mBAEb6iF,wBAAyB,CACvBvhE,aAAa,aAAD,OAAepvB,EAAMuB,OAAOP,OACxCY,SAAU,WACV,UAAW,CACToG,QAAS,QACTM,QAAS,KACT1G,SAAU,WACV8gB,KAAM,EACN7gB,IAAK,EACLgG,WAAY7H,EAAMuB,OAAOP,MACzB+G,MAAO,OACPD,OAAQ,OACRiqB,QAAS,OAGb6+D,6BAA8B,CAC5BzwF,OAAQ,GAEV0wF,uBAAwB,CACtB1wF,OAAQ,EACR0H,WAAY,cACZ5G,OAAQ,eACRW,SAAU,WACV,UAAW,CACToG,QAAS,QACTM,QAAS,KACT1G,SAAU,WACV8gB,KAAM,EACN7gB,IAAK,EACLgG,WAAY,cACZE,MAAO,OACPD,OAAQ,OACRiqB,QAAS,OAGb++D,SAAU,CACR9oF,QAAS,OACTG,cAAe,SACfnH,MAAO,WAEToM,IAAK,CACHpM,MAAO,UACPD,WAAY,cAIV2vB,GAAiB3wB,aAAW,SAAAC,GAAK,MAAK,CAC1CoD,KAAM,CACJpC,MAAOhB,EAAMuB,OAAOP,MACpBH,SAAU,IAEZkiB,QAAS,CACP/hB,MAAOhB,EAAMuB,OAAOP,WChHlB+vF,GAAkB,WACtB,IAAMzuF,EAAUxC,KADY,EAEhByC,cAALC,EAFqB,oBAI5B,OACE,yBAAKQ,UAAWV,EAAQ+tF,aACtB,kBAACjnF,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQygF,qBAC/CvgF,EAAE,qBAEL,yBAAKQ,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAK,YACL5Q,MAAM,aACN+B,YAAY,aACZ/I,UAAWV,EAAQ6d,MACnBvU,WAAYtJ,EAAQ8zB,WACpB3uB,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,WACL5Q,MAAM,YACN+B,YAAY,YACZ/I,UAAWV,EAAQ6d,MACnBvU,WAAYtJ,EAAQ8zB,WACpB3uB,UAAW8D,MAGf,yBAAKvI,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAK,QACL5Q,MAAM,QACN+B,YAAY,QACZ/I,UAAWV,EAAQ6d,MACnBvU,WAAYtJ,EAAQ8zB,WACpB1qB,cAAc,EACdC,eAAe,EACfF,UAAW,GACXhE,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,QACL5Q,MAAM,QACN+B,YAAY,QACZ/I,UAAWV,EAAQ6d,MACnBvU,WAAYtJ,EAAQ8zB,WACpB3uB,UAAW8D,QAOfylF,GAAqB,WACzB,IAAM1uF,EAAUxC,KADe,EAEnByC,cAALC,EAFwB,oBAI/B,OACE,yBAAKQ,UAAWV,EAAQ+tF,aACtB,kBAACjnF,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQygF,qBAC/CvgF,EAAE,wBAEL,yBAAKQ,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAK,UACL5Q,MAAM,UACN+B,YAAY,UACZ/I,UAAWV,EAAQ0tF,eACnBpkF,WAAYtJ,EAAQ8zB,WACpB3uB,UAAW8D,MAGf,yBAAKvI,UAAWV,EAAQ+e,KACtB,kBAAC4M,GAAA,EAAD,CACErT,KAAK,OACL5Q,MAAM,OACN+B,YAAY,OACZ/I,UAAWV,EAAQ4tF,UACnBtkF,WAAYtJ,EAAQ8zB,WACpB3uB,UAAW8D,KAEb,kBAAC0iB,GAAA,EAAD,CACErT,KAAK,MACL5Q,MAAM,MACN+B,YAAY,MACZ/I,UAAWV,EAAQ2tF,WACnBrkF,WAAYtJ,EAAQ8zB,WACpB1qB,cAAc,EACdD,UAAW,GACXhE,UAAW8D,QAOf0lF,GAAwB,SAAC,GASxB,IARLjC,EAQI,EARJA,aACAzxC,EAOI,EAPJA,YACA2zC,EAMI,EANJA,SACAC,EAKI,EALJA,YACAC,EAII,EAJJA,eACAlpD,EAGI,EAHJA,SACAuU,EAEI,EAFJA,WACAvK,EACI,EADJA,qBAEM5vC,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAEMwR,EAFN,KAGEgd,EAAmBN,KAEnBpb,EAAmBtB,EAAK7F,SAExB8gF,EAAgBF,GAA0BC,GAP5C,EASwB76E,IAAMrQ,UAAS,GATvC,mBASGwzE,EATH,KASW+Z,EATX,KAuBJ,OAZAl9E,IAAM+C,WAAU,WACd,GAAIogE,EACF+Z,GAAU,OADZ,CAIA,IAAMC,EAAe/zC,EACrBrL,EAAqB,cAAe,IACpCpsB,YAAW,WACTosB,EAAqB,cAAeo/C,SAErC,CAACh8E,IAGF,6BACE,kBAAClM,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQygF,qBAC/CvgF,EAAE,mBAGJysF,EAAct8E,KAAI,SAACmB,EAAMjB,GACxB,OACE,yBAAK8H,IAAK9H,GACR,kBAACmuB,GAAA,EAAD,CACEN,SAAU6c,IAAgBzpC,EAC1BxR,QAAS,CAAEc,KAAMd,EAAQmuF,qBAEzB,kBAACrvD,GAAA,EAAD,CACE9+B,QAAS,CACPc,KAAMd,EAAQouF,oBACdhwD,SAAUp3B,KAAWhH,EAAQquF,wBAAT,eACjBruF,EAAQsuF,6B7DvIN,mB6DwID98E,IAEJxL,QAAShG,EAAQuuF,wBAEnB5tF,QAAS,kBAAMivC,EAAqB,cAAep+B,IACnDiE,aAAW,SACXupB,gBAAc,8BACdn+B,GAAG,8BAEH,kBAACwmB,GAAA,EAAD,CACEE,QACE,kBAACuH,GAAA,EAAD,CACEpwB,MAAM,UACNsB,QAAS0uB,EACTjO,QAASw6B,IAAgBzpC,IAG7B9J,MACE,kBAACZ,EAAA,EAAD,CAAY1F,QAAS,KAAMV,UAAWV,EAAQwuF,UAC3CtuF,EAAEsR,GAAO,I7D3JT,mB6D4JAA,GACC,0BAAM9Q,UAAWV,EAAQ8K,KACtB5K,EAAE,kCAOf,kBAAC++B,GAAA,EAAD,CACEj/B,QAAS,CACPc,KAAMkG,KAAWhH,EAAQiuF,0BAAT,eACbjuF,EAAQkuF,+B7DxKN,mB6DyKD18E,MAILA,IAASgpE,IAAUv/B,IAAgBu/B,IAClC,kBAACyU,GAAD,CACEL,SAAUA,EACVC,YAAaA,EACbC,eAAgBA,EAChBpC,aAAcA,EACd15E,iBAAkBA,IAGrBxB,IAASipE,IAAUx/B,IAAgBw/B,IAClC,kBAACyU,GAAD,CACEtpD,SAAUA,EACVuU,WAAYA,EACZ20C,eAAgBA,EAChBpC,aAAcA,EACd15E,iBAAkBA,YAyChCk8E,GAAoBr9E,IAAMs9E,MA7BV,SAAC,GAMhB,IALLvpD,EAKI,EALJA,SACAuU,EAII,EAJJA,WACA20C,EAGI,EAHJA,eACApC,EAEI,EAFJA,aACA15E,EACI,EADJA,iBAMA,OACE,kBAAC,gBAAD,CACE8F,OAAQqhC,EACRi1C,UAPqB,SAACC,EAASj/E,GACjC0+E,EAAe,KAAM1+E,IAOnBxQ,QAAS,CACP+mD,SAAU+lC,EAAaliB,eAAe7jB,SACtC/gB,SAAS,GAAD,OAAKA,GACbxgB,OAAQhY,GAAmB4F,IAE7BxK,MAAO,CACL8mF,OAAQ,aACR9pF,OAAQ,GACR9G,MAAO,OACP6wF,SAAS,QA4BXN,GAAoBp9E,IAAMs9E,MArBV,SAAC,GAMhB,IALLP,EAKI,EALJA,SACAC,EAII,EAJJA,YACAC,EAGI,EAHJA,eACApC,EAEI,EAFJA,aACA15E,EACI,EADJA,iBAEA,OACE,kBAAC,YAAD,CACEw8E,OAAQC,sBAAW/C,EAAa/hB,eAAe9jB,eAAgB,CAC7DzhC,OAAQlY,GAAY8F,MAGtB,kBAAC,GAAD,CACE47E,SAAUA,EACVC,YAAaA,EACbC,eAAgBA,QAOlBY,GAAqB,SAAC,GAA+C,IAA7Cd,EAA4C,EAA5CA,SAAUC,EAAkC,EAAlCA,YAAaC,EAAqB,EAArBA,eAC3Cn8E,EAAoBC,wBAApBD,gBAEF68E,EAASG,uBACTC,EAAWC,yBAEjBh+E,IAAM+C,WAAU,WACTg6E,GACL9uC,MACC,CAAC8uC,IAEJ,IAAM9uC,EAAS,iCAAAjsC,EAAAC,OAAA,uDACPg8E,EAAcF,EAASG,WAAWC,gBAD3B,YAAAn8E,EAAA,MAG0B27E,EAAOS,oBAAoB,CAChEhtF,KAAM,OACNitF,KAAMJ,KALK,gBAGL7nF,EAHK,EAGLA,MAAOkoF,EAHF,EAGEA,cAKXloF,GACF0K,EAAgB1K,EAAM+3C,QAAS,CAC7B5+C,QAAS,UAEXytF,GAAY,IAEZC,EAAeqB,GAdJ,sCAkBf,OACE,kBAAC,eAAD,CACEvwF,QAAS,CACP4I,MAAO,CACL4nF,KAAM,CACJ7xF,SAAU,OACVC,WAAY,OACZ,gBAAiB,CACfE,MAAO,iBA4aN4rB,gBAAU,CACvBnmB,KAAM,aACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,EACbhM,aALa6L,CAMZjZ,aAnBqB,SAAAtO,GACtB,MAAO,CACLm4E,WAAYn4E,EAAMoB,KAAK+2E,eAIA,SAAA5pE,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,aAAc+F,EAAOvb,KAEvC+tF,gBAAiB,kBAAM/+E,EAASg/E,aAAM,mBASrCj/E,EAzaa,SAAC,GAUV,IATLg/E,EASI,EATJA,gBACAnV,EAQI,EARJA,WACAiM,EAOI,EAPJA,YACAx8D,EAMI,EANJA,aACAkkE,EAKI,EALJA,YACAD,EAII,EAJJA,SACA7K,EAGI,EAHJA,uBACA2I,EAEI,EAFJA,aACA98C,EACI,EADJA,qBAEM5vC,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAGIyS,EAAoBC,wBAApBD,gBACF49E,EAAa3wD,iBAAO,MACpBqb,EAAcigC,EAAaA,EAAWx8D,OAAOu8B,YAAc,GAC3DrV,EAAWs1C,EAAaA,EAAWx8D,OAAOknB,SAAW,GACrDukD,EAAYjP,EAAWx8D,OAAOyrE,YAAa,EAP7C,EASgCt4E,IAAMrQ,SAAS,GAT/C,mBASG24C,EATH,KASeq2C,EATf,OAUgC3+E,IAAMrQ,SAAS,MAV/C,mBAUGivF,EAVH,KAUeC,EAVf,OAWgC7+E,IAAMrQ,SAAS,MAX/C,mBAWGmvF,EAXH,KAWeC,EAXf,OAYoC/+E,IAAMrQ,SAAS,IAZnD,mBAYGolD,EAZH,KAYiBiqC,EAZjB,OAa8Ch/E,IAAMrQ,SAAS,GAb7D,mBAaGghD,EAbH,KAasBsuC,EAbtB,OAcwDj/E,IAAMrQ,SAChE,IAfE,mBAcGq/C,EAdH,KAc2BkwC,EAd3B,KAiBJl/E,IAAM+C,WAAU,WACVgyC,IACFlQ,OAAOjlB,oBAAoB,UAAWu/D,IACtCt6C,OAAOjlB,oBAAoB,MAAOu/D,IAClCC,QAED,CAACrqC,IAvBA,MAwBiCv0C,YACnC4mC,IADKmG,EAxBH,sBA2B4B/sC,YAAY6uC,IAArCa,GA3BH,uBA4B2B1vC,YAAYm6E,IAApC0E,GA5BH,qBA8BEC,GAAsBt/E,IAAM9P,aAAY,SAAAO,GAC5CusF,EAAYvsF,KACX,IAhCC,GAkCoBuP,IAAMrQ,UAAS,GAlCnC,qBAkCG7B,GAlCH,MAkCSwzB,GAlCT,MAoCEi+D,GAAc,WAClB,OACE16C,OAAOjlB,oBAAoB,UAAWu/D,IACtCt6C,OAAOjlB,oBAAoB,MAAOu/D,KAIhC5sB,GAAa,WACjBjxC,IAAQ,IAGJlxB,GAAc,WAClBouF,IACAgB,IAASC,uBAAuBvpC,SAASwpC,e7DvazB,e6DwahBp+D,IAAQ,GACRujB,OAAO86C,OAAOzpC,SAASwpC,e7DvaD,uB6DuamC/oF,MAAM9C,QAC7D,QAGE+rF,GAAwB5/E,IAAM9P,aAAY,SAAC4uF,EAAYF,GACvDE,EACFC,EAAcD,GACLF,IACT99E,EAAgBzS,EAAE,uCAAwC,CACxDkB,QAAS,YAEXsvF,EAAcD,MAEf,IAEH5+E,IAAM+C,WAAU,WACd,IAAMulC,EAAa4uC,GAAoB7N,EAAYiM,GACnDqJ,EAAcr2C,GAETc,GACHrL,EACE,cACA68C,GAA0BC,GAAc,IAG5CuE,OACC,IAEHp/E,IAAM+C,WAAU,WACd87E,EAAc,MACdE,EAAc,QACb,CAAC31C,IAEJppC,IAAM+C,WAAU,WACd,GAAKg6E,EAEL,GAAI3zC,IAAgBw/B,GAAQ,CAC1B,IAAKgW,EAKH,OAJA99E,EAAgBzS,EAAE,6BAA8B,CAC9CkB,QAAS,eAEXytF,GAAY,GAGd6C,S7DrZiB,mB6DsZRz2C,GACTy2C,OAED,CAAC9C,IAEJ/8E,IAAM+C,WAAU,WACT+7E,GAAe/B,GACpB8C,OACC,CAACf,IAEJ,IAAMK,GAAqB,SAAAW,GA4BzB,GAAoB,8BAAhBA,EAAGvhF,KAAKwhF,KAAuChrC,EAAc,CAC/D,IAAMjzC,EAAY,CAChB6gC,WAAYuvC,EAAyB,KAAOoD,EAAY9sE,YAAYxZ,GACpEmvC,gBAAiB+zC,EACboD,EAAY9sE,YAAYxZ,GACxB,KACJggD,uBAAwBA,GAEpB,KACJ2B,kBAAmBA,GAAwC,KAC3DqvC,QAAQ,EACRjrC,aAAcA,GAEVkrC,EAAW/pC,SAASwpC,eAAe,eACrCO,GAAUA,EAAS5+D,SACvBvf,EAAUk+E,QAAS,EACnBX,GAAqB,CAAEv9E,UAAWA,IAAaC,MAC7C,SAAAm+E,GAAQ,IAAD,EACLX,KACA,IAAMY,EAAY,OAAGD,QAAH,IAAGA,OAAH,YAAGA,EAAK3hF,YAAR,aAAG,EAAW8gF,qBAChC,KAAI,OAACc,QAAD,IAACA,OAAD,EAACA,EAAcC,WAAf,OAA0BD,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAcE,QAQ1C,OAPAv/E,EAAgBzS,EAAE,6BAA8B,CAC9CkB,QAAS,UAEXytF,GAAY,QACZrrE,YAAW,WACTvhB,OACC,KAEE,OAAI+vF,QAAJ,IAAIA,KAAcC,SACvB7tB,QAIJ,WACEzxD,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,eAMb6vF,GAAmB,WACvBG,KACA16C,OAAOllB,iBAAiB,UAAWw/D,IAAoB,GACvDt6C,OAAOllB,iBAAiB,MAAOw/D,IAAoB,IAG/CU,GAAc,WAClB,IAAKvH,EAQH,OAPAx3E,EACEzS,EAAE,2DACF,CACEkB,QAAS,eAGbytF,GAAY,GAIV9K,EACFoO,KAEAC,MAIEC,GAAsB,SAC1BC,EACA1rC,EACApE,EACA3B,GAEA,IAAMl4B,EAAMo/B,SAAS+2B,cAAc,OACnCn2D,EAAIjoB,UAAY,eAChBioB,EAAIngB,MAAM+pF,QACR,8OACF,IAAMj7D,EAASywB,SAAS+2B,cAAc,UACtCxnD,EAAOz2B,GAAK,QACZy2B,EAAOh4B,SAAW,WAClBg4B,EAAOk7D,YAAc,QACrBl7D,EAAO9uB,MAAM+pF,QACX,6KACFj7D,EAAOm7D,QAAU,WACf,IAAMX,EAAW/pC,SAASwpC,eAAe,eACzCxpC,SAASwpC,eAAe,eAAe/oF,MAAM9C,QAAU,OACvDqiD,SAASwpC,eAAe,SAAS/oF,MAAM9C,QAAU,OAC7CosF,GAAUA,EAAS5+D,SACvBk+D,KACAnvF,MAGF,IAAMywF,EAAS3qC,SAAS+2B,cAAc,UACtCn2D,EAAIo2D,YAAY2T,GAChBA,EAAO7xF,GAAK,cACZ6xF,EAAO/rF,IAAM2rF,EACbI,EAAOC,aACL,UACA,+CAEFD,EAAOjtF,MAAQ,IACfitF,EAAOltF,OAAS,IAChBktF,EAAOntF,WAAa,QACpBmtF,EAAOpzF,SAAW,WAClBozF,EAAOjtF,MAAQ,IACfitF,EAAOltF,OAAS,IAChBktF,EAAOlqF,MAAM+pF,SACX,oEACFhC,EAAWh/D,QAAQwtD,YAAYp2D,IAG3BwpE,GAA6B,WACjCtD,GAAY,GAEZ,IAAMj0C,EAAc+1C,EAAaA,EAAW9vF,GAAK,KAC3Cg6C,EAAgB41C,EAAaA,EAAWmC,QAAU,KAElDxiF,EAAOsqC,GACXysC,EACAjM,EACA,IACA,EACAtgC,EACAC,GAGFuE,EAA2B,CAAEzrC,UAAWvD,IAAQwD,MAC9C,SAAAm+E,GAAQ,IAAD,YACCO,EAAa,OACjBP,QADiB,IACjBA,OADiB,YACjBA,EAAK3hF,YADY,uBACjB,EAAWgvC,kCADM,aACjB,EAAuCkzC,cACnC1rC,EAAY,OAChBmrC,QADgB,IAChBA,OADgB,YAChBA,EAAK3hF,YADW,uBAChB,EAAWgvC,kCADK,aAChB,EAAuCwH,aACnCisC,EAA2B,OAC/Bd,QAD+B,IAC/BA,OAD+B,YAC/BA,EAAK3hF,YAD0B,uBAC/B,EAAWgvC,kCADoB,aAC/B,EAAuCv+C,GAIzC,GAHAkwF,EAA0B8B,GAC1BhC,EAAgBjqC,GAEZ0rC,EAQF,OAPAzD,GAAY,QACZwD,GACEC,GAOFluB,QAGJ,SAAAr6D,GAEE,GADA8kF,GAAY,GACR9kF,EAAEi2C,QAAS,CACb,IAAM8yC,EAAkB/oF,EAAEi2C,QAAQjZ,MAAM,KACxCp0B,EAAgBmgF,EAAgBA,EAAgBvwF,OAAS,GAAI,CAC3DnB,QAAS,eAGXuR,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,cAObgxF,GAAwB,WAC5BvD,GAAY,GAEZ,IAAMj0C,EAAc+1C,EAAaA,EAAW9vF,GAAK,KAC3Cg6C,EAAgB41C,EAAaA,EAAWmC,QAAU,KAElDG,EAAe,CACnBr0E,OAAO,eACFw8D,EAAWx8D,OADV,CAEJuJ,eAAgBizD,EAAWx8D,OAAOsqB,cAGhC54B,EAAOqxC,GACX0lC,EACA4L,EACA,IACA,EACAn4C,EACAC,GAGFkH,GAAsB,CAAEpuC,UAAWvD,IAAQwD,MACzC,SAAAm+E,GAAQ,IAAD,YACCiB,EAAsB,OAAGjB,QAAH,IAAGA,OAAH,YAAGA,EAAK3hF,YAAR,uBAAG,EAAW2xC,6BAAd,aAAG,EAAkClhD,GACzCkxF,EAAI3hF,KAAK2xC,sBACjC+uC,EAAqBkC,GACrB,IAAMV,EAAa,OAAGP,QAAH,IAAGA,OAAH,YAAGA,EAAK3hF,YAAR,uBAAG,EAAW2xC,6BAAd,aAAG,EAAkCuwC,cAClD1rC,EAAY,OAAGmrC,QAAH,IAAGA,OAAH,YAAGA,EAAK3hF,YAAR,uBAAG,EAAW2xC,6BAAd,aAAG,EAAkC6E,aAGvD,GAFAiqC,EAAgBjqC,GAEZ0rC,GAAiBU,EAQnB,OAPAnE,GAAY,QACZwD,GACEC,GAOFluB,QAGJ,SAAAr6D,GAEE,GADA8kF,GAAY,GACR9kF,EAAEi2C,QAAS,CACb,IAAM8yC,EAAkB/oF,EAAEi2C,QAAQjZ,MAAM,KACxCp0B,EAAgBmgF,EAAgBA,EAAgBvwF,OAAS,GAAI,CAC3DnB,QAAS,eAGXuR,EAAgBzS,EAAE,uBAAwB,CACxCkB,QAAS,cAOnB,OACE,yBAAKV,UAAWV,EAAQ2X,QAAS+Z,IAAK6+D,GACpC,yBAAK7vF,UAAWV,EAAQs+C,UACtB,0BAAM5yB,SAAUf,EAAcjqB,UAAWV,EAAQmE,MAC/C,kBAAC2C,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQpB,QAC/CsB,EAAE,YAEL,kBAAC,GAAD,MACA,kBAAC,GAAD,MACA,kBAAC,GAAD,CACEwsF,aAAcA,EACdoC,eAAgB2C,GAChB5C,YAAasC,GACbl2C,YAAaA,EACb2zC,SAAUA,EACVhpD,SAAUA,EACVuU,WAAYA,EACZvK,qBAAsBA,IAExB,4BAAQ/4B,QAAQ,EAAM5T,KAAM,UAA5B,YAKJ,yBAAKvC,UAAWV,EAAQu+C,WACtB,kBAAC,GAAD,CAAoBnuC,KAAM+2E,EAAahjF,KAAM+2E,KAG/C,kBAAC,GAAD,CACEv7E,KAAMA,GACNsC,YAAaA,GACbrD,MAAOuoF,EAAY9sE,YAAYzb,aCjtBxBpB,GAzCGC,aAAW,SAAAC,GAAK,YAAI,CACpCia,SAAO,GACLlS,MAAO,oBACPxH,SAAU,SACVuH,OAAQ,QACRpG,UAAW,mCACXrB,aAAc,MACdM,QAAS,YACTT,gBAAiB,QACjBwiB,KAAM,MACN7gB,IAAK,MACLD,SAAU,WACVg8B,UAAW,yBAXN,cAYJ,2BAA6B,CAC5B71B,MAAO,kBACPD,OAAQ,sBAdL,cAmBJ9H,EAAMQ,YAAYC,KAAK,MAAO,CAC5BsH,MAAO,OACRD,OAAQ,sBArBL,cAuBJ9H,EAAMQ,YAAYC,KAAK,MAAO,CAC7BsH,MAAO,OACRD,OAAQ,sBAzBJ,GA4BPiR,SAAU,CACRjR,OAAQ,QAGVytF,UAAW,CACTztF,OAAQ,oBACRE,QAAS,OACTE,WAAY,SACZD,eAAgB,cCkBdutF,GAAuB,CAAC,MAAO,MAAO,OCMtCC,IDgmBS9hF,aAfS,SAAAtO,GACtB,MAAO,CACLm4E,WAAYn4E,EAAMoB,KAAK+2E,eAIA,SAAA5pE,GAAQ,MAAK,CACtCiyE,2BAA4B,SAAC1lE,EAAOvb,GAClCgP,EAASwG,aAAO,aAAc+F,EAAOvb,KAEvCkxD,WAAY,kBAAMliD,EAASwuC,aAAO,gBAClCqT,iBAAkB,kBAAM7hD,EAASkjD,aAAiB,aAAc,MAChE67B,gBAAiB,kBAAM/+E,EAASg/E,aAAM,mBAGzBj/E,EA/lBA,SAAC,GAaT,IAAD,oBAZJmiD,EAYI,EAZJA,WACAL,EAWI,EAXJA,iBACAk9B,EAUI,EAVJA,gBACAnV,EASI,EATJA,WACA7nD,EAQI,EARJA,QACA+/D,EAOI,EAPJA,wBACAC,EAMI,EANJA,mBACAvoE,EAKI,EALJA,UACAzc,EAII,EAJJA,KACAmrE,EAGI,EAHJA,cACAC,EAEI,EAFJA,mBACA8J,EACI,EADJA,2BAEMvjF,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIIyS,EAAoBC,wBAApBD,gBACF7Q,EAAU+P,IAAMsX,WAAW/mB,GAL7B,EAOsDZ,mBAAS,IAP/D,mBAOGimF,EAPH,KAO0B6L,EAP1B,OAS8B9xF,mBAAS4xF,GAA2BC,GATlE,mBASG1Y,EATH,KASc4Y,EATd,OAU4B/xF,mBAAS,MAVrC,mBAUGswC,EAVH,KAUa4C,EAVb,OAW4ClzC,mBAAS,MAXrD,mBAWGwzC,EAXH,KAWqBw+C,GAXrB,QAYsChyF,mBAAS,MAZ/C,qBAYGgnB,GAZH,MAYkB0nB,GAZlB,SAasD1uC,mBACxD,MAdE,qBAaGqvC,GAbH,MAa0B4iD,GAb1B,SAgB8BjyF,mBAAS,GAhBvC,qBAgBG0oF,GAhBH,MAgBcwJ,GAhBd,SAiB8ClyF,mBAAS,GAjBvD,qBAiBGmyF,GAjBH,MAiBsBC,GAjBtB,SAmBwDpyF,mBAAS,GAnBjE,qBAmBGsiF,GAnBH,MAmB2B+P,GAnB3B,SAoB4BryF,oBAAS,GApBrC,qBAoBGotF,GApBH,MAoBaC,GApBb,SAqBwCrtF,oBAAU4xF,IAA4BC,GArB9E,qBAqBGS,GArBH,MAqBmBC,GArBnB,SAsB0CvyF,mBAAS,MAtBnD,qBAsBG2qF,GAtBH,MAsBoBC,GAtBpB,SAuB0D5qF,mBAAS,OAvBnE,qBAuBGogF,GAvBH,MAuB4BC,GAvB5B,SAwB0DrgF,mBAASspB,EAAU,IAxB7E,qBAwBGg3D,GAxBH,MAwB4BC,GAxB5B,SAyBgEvgF,mBAAS0xF,IAzBzE,qBAyBGvR,GAzBH,MAyB+BqS,GAzB/B,SA0BqCxyF,mBAAS,IA1B9C,qBA0BGkiF,GA1BH,MA0BkBuQ,GA1BlB,SA4B8BzyF,mBAASk1C,OAAOw9C,kBA5B9C,qBA4BGC,GA5BH,MA4BcC,GA5Bd,SA8BqD5hF,YACvD83D,GACA,CACEh6B,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTyf,gBAAiBC,KANNghE,GA9Bb,GA8BI/gE,QAAgCo5D,GA9BpC,GA8B8Bt8E,KA9B9B,GEtEwC,SAAC,EAAyCigC,GAAU,IAAjDz1B,EAAgD,EAAhDA,UAAWC,EAAqC,EAArCA,QAASmR,EAA4B,EAA5BA,OAAQqH,EAAoB,EAApBA,QAAoB,EACvE7xB,mBAAS,GAD8D,mBACxFiX,EADwF,KAClFgiD,EADkF,OAEnDj5D,mBAAS,MAF0C,mBAExFymB,EAFwF,KAExEqzD,EAFwE,OAGxDgZ,YAAa9vD,GAAuB,CACzE+L,6BAA6B,EAC7BD,YAAa,eACbqe,YAAa,SAAC4lC,GACZ,GAAKA,GAAYA,EAAQtsE,eAAzB,CAEA,IAAMusE,EAAoBD,EAAQtsE,eAAe5X,KAAI,SAAAmB,GACnD,GAAIA,EAAKu0B,WACP,OAAOv0B,EAGT,IAAIw2B,E/RrBS,kB+R6Bb,OANIx2B,EAAKmxB,OAAO,GAAG9mB,YAAYA,YAC7BmsB,E/RvBc,qB+RwBLx2B,EAAKmxB,OAAO,GAAG3b,MACxBghB,E/RxBW,mB+R2BN,eACFx2B,EADL,GAEKi3B,GAAUj3B,GAFf,CAGEu0B,WAAYiC,QAIhB,OAAI/f,QAAJ,IAAIA,OAAJ,EAAIA,EAAgB1lB,SAClBk4D,EAAQhiD,EAAO,GAGjB6iE,EAAkB,GAAD,mBAAMrzD,GAAkB,IAAxB,YAAgCusE,SAjC0C,mBAGxFC,EAHwF,YAG3EnhE,EAH2E,EAG3EA,QAASljB,EAHkE,EAGlEA,KAkCvB+1E,EAAYpkF,uBAAY,SAAC2yF,GAC7B,IAAM/gF,EAAY,CAChB8E,KAAI,OAAEi8E,QAAF,IAAEA,IAAiB,EACvBthE,gBAAiBC,EACjBshE,6BAA8B,EAC9BnkD,YAAa51B,GAAavB,KAAOuB,GAAW4J,OAAO,cACnDisB,UAAW51B,GAAWxB,KAAOwB,GAAS2J,OAAO,eAG3CwH,IACFrY,EAAUy4B,aAAepgB,GAG3ByoE,EAAU,CAAE9gF,gBACX,CAACqY,EAAQqH,EAASzY,EAAWC,IAwBhC,OAtBAjG,qBAAU,WACHy7B,GACH81C,EAAU,KAEX,IAEHvxE,qBAAU,WACHgG,GAAcC,IACnBygE,EAAkB,IAClB6K,EAAU,GACV1rB,EAAQ,MACP,CAAC7/C,EAAWC,IAEfjG,qBAAU,WAEJoX,GAAUpR,GAAaC,IACzBygE,EAAkB,IAClB6K,EAAU,GACV1rB,EAAQ,MAET,CAACzuC,IAEG,CACL4oE,mBAAoBn8E,EACpBwP,iBACA4sE,wBAAyB1O,EACzB7yD,UACA8yD,QAASh2E,EAAOA,EAAKirD,4BAA8B,EAAI,GFqCrDy5B,CAA+B,CACjCl6E,UAAS,OAAEsgE,QAAF,IAAEA,OAAF,YAAEA,EAAYx8D,cAAd,uBAAE,EAAoB2J,aAAtB,aAAE,EAA2BzN,UACtCC,QAAO,OAAEqgE,QAAF,IAAEA,OAAF,YAAEA,EAAYx8D,cAAd,uBAAE,EAAoB2J,aAAtB,aAAE,EAA2BxN,QACpCmR,QAAkB,OAAVkvD,QAAU,IAAVA,OAAA,YAAAA,EAAYx8D,cAAZ,eAAoB2kE,iBAAkB,GAC9ChwD,aACGsnD,GAVHia,GA1CE,GA0CFA,mBACA3sE,GA3CE,GA2CFA,eACA4sE,GA5CE,GA4CFA,wBACSE,GA7CP,GA6CFzhE,QACS0hE,GA9CP,GA8CF5O,QA9CE,GGvEoC,SAAC,EAAyC/1C,GAAU,IAAjDz1B,EAAgD,EAAhDA,UAAWC,EAAqC,EAArCA,QAASmR,EAA4B,EAA5BA,OAAQqH,EAAoB,EAApBA,QAAoB,EACnE7xB,mBAAS,GAD0D,mBACpFiX,EADoF,KAC9EgiD,EAD8E,OAEvDj5D,mBAAS,MAF8C,mBAEpFwnC,EAFoF,KAExEuyC,EAFwE,OAGrC+Y,YAAatvD,GAAmB,CACpFuL,6BAA6B,EAC7BD,YAAa,eACbqe,YAAa,SAAC4lC,GACZ,GAAKA,GAAYA,EAAQvrD,WAAzB,CAEA,IAAMisD,EAAgBV,EAAQvrD,WAAW34B,KAAI,SAAAmB,GAC3C,OAAIA,EAAKuE,SACAvE,EAGF,eACFA,EADL,CAEEuE,SAAUvE,EAAKqN,cACfutB,aAAc56B,EAAKoN,gBACnB/T,WAAY,IACT49B,GAAUj3B,QAIjB,OAAIw3B,QAAJ,IAAIA,OAAJ,EAAIA,EAAYzmC,SACdk4D,EAAQhiD,EAAO,GAGjB8iE,EAAc,GAAD,mBAAMvyC,GAAc,IAApB,YAA4BisD,SA3B8C,mBAGpFR,EAHoF,YAGvEnhE,EAHuE,EAGvEA,QAASljB,EAH8D,EAG9DA,KA4BvB+1E,GA/BqF,EAGxD3vC,cA4BjBz0C,uBAAY,SAAC2yF,GAC7B,IAAM/gF,EAAY,CAChB8E,KAAI,OAAEi8E,QAAF,IAAEA,IAAiB,EACvBthE,gBAAiBC,EACjB6hE,wBAAyB,EACzB1kD,YAAa51B,GAAavB,KAAOuB,GAAW4J,OAAO,cACnDisB,UAAW51B,GAAWxB,KAAOwB,GAAS2J,OAAO,eAG3CwH,IACFrY,EAAUy4B,aAAepgB,GAG3ByoE,EAAU,CAAE9gF,gBACX,CAACqY,EAAQqH,EAASzY,EAAWC,KAuBhC,OArBAjG,qBAAU,WACHy7B,GACH81C,EAAU,KAEX,IAEHvxE,qBAAU,WACHgG,GAAcC,IACnB0gE,EAAc,IACd4K,EAAU,GACV1rB,EAAQ,MACP,CAAC7/C,EAAWC,IAEfjG,qBAAU,WACJoX,GAAUpR,GAAaC,IACzB0gE,EAAc,IACd4K,EAAU,GACV1rB,EAAQ,MAET,CAACzuC,IAEG,CACLmpE,eAAgB18E,EAChBuwB,aACAosD,oBAAqBjP,EACrB7yD,UACA8yD,QAASh2E,EAAOA,EAAKqrD,wBAA0B,EAAI,GH0DjD45B,CAA2B,CAC7Bz6E,UAAS,OAAEsgE,QAAF,IAAEA,OAAF,YAAEA,EAAYx8D,cAAd,uBAAE,EAAoB2J,aAAtB,aAAE,EAA2BzN,UACtCC,QAAO,OAAEqgE,QAAF,IAAEA,OAAF,YAAEA,EAAYx8D,cAAd,uBAAE,EAAoB2J,aAAtB,aAAE,EAA2BxN,QACpCmR,QAAkB,OAAVkvD,QAAU,IAAVA,OAAA,YAAAA,EAAYx8D,cAAZ,eAAoB2kE,iBAAkB,GAC9ChwD,aACGsnD,GAVHwa,GAvDE,GAuDFA,eACAnsD,GAxDE,GAwDFA,WACAosD,GAzDE,GAyDFA,oBACSE,GA1DP,GA0DFhiE,QACSiiE,GA3DP,GA2DFnP,QAQIoP,GAAoCT,IAA2BO,GAE/DvR,IACHyR,QACE,OAACvtE,SAAD,IAACA,QAAD,EAACA,GAAgB1lB,SAAgC,IAAtBoxF,MAA8BP,GAvE1D,GAyE8D5gF,YAChEkyB,GACA,CACE4L,YAAa,WACbC,6BAA6B,EAC7BF,KAAMyjD,IAAkB3H,KAAoBpI,IAA0BsP,EACtE1/E,UAAW,CACTq8B,gBAAiB2qC,EACjBvnD,gBAAiBC,KARNoiE,GAzEb,GAyEIniE,QAAqCwd,GAzEzC,GAyEmC1gC,KAzEnC,GAsFqDoC,YAASyyB,GAAU,CAC1EqL,YAAa,WACbC,6BAA6B,EAC7BF,KAAMyjD,IAAkB3H,IAAmBpI,IAA0BqP,EACrEz/E,UAAW,CACT6gC,WAAYmmC,EACZvnD,gBAAiBC,KANJqiE,GAtFb,GAsFIpiE,QAAgC2hB,GAtFpC,GAsF8B7kC,KAUlCwE,qBAAU,WACR,GAAK83E,KAEAA,GAAaliB,iBAAmBkiB,GAAa/hB,eAAgB,CAChE,IAAM2C,EAA0Bof,GAAapf,wBAC7C,GAAIA,GAA2BA,EAAwBjnB,aACrD,OAEFvkD,EAAQ,CACNlD,MAAO,0BACPyB,iBAAkB,SAEjBuT,MAAK,WACJy8E,IACAgB,IAASC,uBAAuBvpC,SAASwpC,e/D3L/B,e+D4LV76C,OAAO86C,OAAOzpC,SAASwpC,e/D1LP,uB+D4Ld/oF,MAAM9C,QAAU,UAEnBmkB,OAAM,kBAEV,CAAC6iE,KAEJ93E,qBAAU,WACR,GAAKk8B,IAAsBA,GAAkB7oB,eAAe1lB,OAA5D,CAEA,IAAMsuC,EAAwBC,GAAkB7oB,eAAe,GACzD7X,EAAO27B,GAA6B8E,GACpCjJ,EAAaiJ,EAAsBlO,OAAO,GAE5CiF,EAAW/rB,YAAYA,YACzBzL,EAAI,W7R3Mc,qB6R4MTw3B,EAAW5gB,IACpB5W,EAAI,W7R5MW,kB6R8MfA,EAAI,W7RhNW,kB6RmNjBulF,mCAAwB,WACtBlC,GAAyB5iD,GACzBX,GAAiB9/B,GACjB6jF,GAAgB2B,GAAiBxlF,UAElC,CAAC0gC,KAEJl8B,qBAAU,WACR,GAAKqgC,IAAiBA,GAAajM,WAAWzmC,OAA9C,CAEA,IAAMyyC,EAAmBC,GAAajM,WAAW,GAEjDsqD,EACEt+C,EAAiBnM,mBACdjrB,QAAO,qBAAGgM,cACVvZ,KAAI,YACH,OAAO6X,GAD8B,EAA/B+pB,aAA+B,EAAjB8E,YACsB1mC,KAAI,SAAA+Q,GAAI,OAChDA,EAAKoD,OAAO,oBAGfqxE,KAAK,IAGV,IAAMzlF,EAAOs3B,GAAwBsN,GAErC5kC,EAAI,WAAiB4kC,EAAgB,WACrC5kC,EAAI,aAAmB4kC,EAAgB,aAEvCw+C,GAAoBx+C,GACpBN,EAAYtkC,GACZ6jF,GAAgB2B,GAAiBxlF,OAChC,CAAC6kC,KAEJ,IAqBM6gD,GAAsB,WAC1Bh0F,EAAQ,CACNlD,MAAO,2BACPuB,YAAaD,EAAE,oCACfG,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJmiF,KAAQrhF,MAAM,CACZqtB,SAAU,SACV/+B,OAAO,6BACP0E,MAAO,WAET2oF,IACAgB,IAASC,uBAAuBvpC,SAASwpC,e/DvR7B,e+DwRZ76C,OAAO86C,OAAOzpC,SAASwpC,e/DtRL,uB+DsRuC/oF,MAAM9C,QAC7D,UAEHmkB,OAAM,gBAkDLmsE,GAA6B,SAACC,EAAcC,GAChD,IAAMC,EAAqBD,E/D3QA,EADT,E+D6QZE,EAAsBF,E/D7QV,EACS,E+D6R3B,OAfIxS,GAAcnhF,SAEd0zF,IAAiBE,GACjBzS,GAAcj/D,SAAS0xE,KAEvBF,EAAeC,EAASD,EAAe,EAAIA,EAAe,GAG1DA,IAAiBG,GACjB1S,GAAcj/D,SAAS2xE,KAEvBH,EAAeC,EAASD,EAAe,EAAIA,EAAe,IAIvDA,GAGHI,GAAiB,SAAAl5B,GACrB,OAAQA,GACN,KA3SwB,EA4StB,MAAO,kBACT,KA5SwB,EA6StB,MAAO,kBACT,KA7SgC,EA8S9B,MAAO,0BACT,KA9SyB,EA+SvB,MAAO,mBACT,KA/SwB,EAgTtB,MAAO,oBAIPm5B,GAAW,WACf,IAAIL,EAAeD,GAA2B9L,GAAY,GAEtD+L,EAAenS,IACjB+P,GAA0BoC,GAE5BvC,GAAauC,GAEbF,KAAQrhF,MAAM,CACZqtB,SAAU,SACV/+B,OAAO,SAAD,OAAWqzF,GAAeJ,IAChCvuF,MAAO,YAIL6uF,GAAmB,WACnBpK,GACFwJ,mCAAwB,WACtBpC,EAAapH,GAAgBtrF,IAC7BurF,GAAmB,MACnB4H,GAA8B,OAKlCxgC,KAGIuyB,GAAgB,SAAAv0E,GACpB,IAAM6nC,EAA4B7nC,EAAK6nC,0BAElCA,EAA0B50B,SAASm9D,KACtCC,GAA2BxoC,EAA0B,IAGvDs8C,mCAAwB,WACtB3B,GAA8B36C,GAC9B+yC,GAAmB56E,GACnBuiF,IAAkB,OAIhB6B,GAAmB,SAAAxlF,GACvB,IAAMszE,EAAgB,GAEtB,IAAKtzE,EAAM,MAAO,GAElB,IAAMomF,EAAepmF,EAAK8L,WAAWC,OAAO5Z,OACtCk0F,EAA0BrmF,EAAKu7B,sBACjCv7B,EAAKu7B,sBAAsBxG,kBAAkB5iC,OAC7C,EACEm0F,EAA8BtmF,EAAKgM,0BACrChM,EAAKgM,0BAA0BC,sBAAsB9Z,OACrD,EAOJ,OALKi0F,GAAc9S,EAAcztE,K/DvWf,G+DwWbwgF,GAA4BC,GAC/BhT,EAAcztE,K/DxWW,G+D2WpBytE,GAGHiT,GAAoB39B,mBAAQ,WAChC,IAAM1lD,EAAS,GAEf,OAAIkiF,IAAsCvtE,IAAmB+gB,KAI7D,OAAI/gB,SAAJ,IAAIA,QAAJ,EAAIA,GAAgB1lB,SAClB+Q,EAAO2C,K/DvYe,kB+D0YxB,OAAI+yB,SAAJ,IAAIA,QAAJ,EAAIA,GAAYzmC,SACd+Q,EAAO2C,K/D1YU,Y+D6YZ3C,GAXEA,IAYR,CAACkiF,GAAmCvtE,GAAgB+gB,KAEjD1V,GAAU+gE,IAAmBoB,IAAwBC,IAAmBF,GAwB9E,OAtBA5gF,qBAAU,WACR,IAAMgiF,EAAmB,WACvB,IAAMC,EAAcngD,OAAOw9C,iBAC3B,GAAI2C,IAAgB1C,GAAW,CAC7BC,GAAayC,GAEb,IAAMC,EAAUtzE,YAAW,WACzBukC,SAASokB,KAAK3jE,MAAMuuF,KAAO,OAC3B3C,GAAa19C,OAAOw9C,oBACnB,KAEH,OAAO,kBAAM8C,aAAaF,MAM9B,OAFApgD,OAAOllB,iBAAiB,SAAUolE,GAE3B,WACLlgD,OAAOjlB,oBAAoB,SAAUmlE,MAEtC,CAACzC,KAGF,yBAAKzzF,UAAWV,EAAQ2X,SACtB,kBAAC,GAAD,CAAc2b,QAASA,IAAWs7D,KAElC,kBAAC,GAAD,CACE3/D,eAAgB6mE,GAChBl3F,MAAO00B,GAAU,GAAKywD,GAAyB,0BAA4B,qBAC3EpC,2BAA4BA,GAC5BC,wBAAyBA,GACzBC,2BAA4BA,GAC5BC,wBAAyBA,GACzBC,2BAA4BA,GAC5BC,0BAA2Bl3D,EAC3Bzc,KAAMA,MAGLssE,GACD,kBAAC,GAAD,CACExkE,MAAOmkE,GACPoJ,cAAeA,GACfK,uBAAwBA,GACxBH,aAAcsG,GACdrG,SAnNoB,SAAAtzE,GAE1B,GACEA,EAAQuzE,IACPvzE,EAAQ25E,IAAahP,EAAW/6B,WAcjC,OAZAxtC,EACEzS,EACE,kFAEF,CACEkB,QAAS,OACT80D,iBAAkB,WAGlBglB,EAAW/6B,YAdQ,IAcM5vC,GAC3BgmF,MAKAhmF,EAAQ25E,IACV/2B,IAGFugC,GAAanjF,GACbwlF,KAAQrhF,MAAM,CACZqtB,SAAU,SACV/+B,OAAO,SAAD,OAAWqzF,GAAe9lF,GAA1B,iBAAyC8lF,GAC7CnM,KAEFxiF,MAAO,YAqLHo8E,uBAAwBA,KAI3BgQ,MAAoB6C,GAAkBp0F,QACrC,kBAAC,GAAD,CACEkhF,WAAYkT,GAAkBp0F,OAC9BohF,gBAAgB,EAChBxtE,MAAOwgF,GAAkBtmF,KAAI,SAAA4mF,GAAO,MAAK,CAAEr4F,MAAOq4F,MAClDrT,aAAc+P,GACd9P,SAAU+P,GACV9P,uBAAwBA,KAI3BgQ,MAAoB6C,GAAkBp0F,QACrC,oCACGo0F,GAAkBlyE,S/DjdD,kB+DkdhB,kBAAC/N,GAAD,CACEpU,MAAOqxF,GACPpjF,MAAO,EACP7P,UAAWV,EAAQyW,UAEnB,kBAAC,GAAD,CACEmrE,wBAAyBA,GACzB35D,eAAgBA,GAChBxP,KAAMm8E,GACN7O,cAAeA,GACfI,UAAW0O,GACXzO,QAAS4O,MAId2B,GAAkBlyE,S/DheN,a+DieX,kBAAC/N,GAAD,CACEpU,MAAOqxF,GACPpjF,MAAOomF,GAAkBlyE,S/DpeX,iB+Doe2C,EAAI,EAC7D/jB,UAAWV,EAAQyW,UAEnB,kBAAC,GAAD,CACEmrE,wBAAyBA,GACzB54C,WAAYA,GACZvwB,KAAM08E,GACNpP,cAAeA,GACfI,UAAWiP,GACXhP,QAASmP,QAOjBC,KAAsCmB,GAAkBp0F,SAAWo4E,GACnE,yBAAKj6E,UAAWV,EAAQizF,WACtB,yCAIH9G,IACC,kBAAC,GAAD,CACE3F,QAAS2F,GACTvK,wBAAyBA,MAI3Bp5D,IAAiBspB,IACjB,oCACE,kBAACp7B,GAAD,CAAUpU,MAAO4nF,GAAW35E,MAAO,EAAG7P,UAAWV,EAAQyW,UACxC,IAAdyzE,IACC,kBAAC,GAAD,CACE72D,QAASA,EACT0wD,uBAAwBA,GACxBnC,wBAAyBA,GACzBE,wBAAyBA,GACzB2F,sBAAuBA,EACvB/7D,SAAU4qE,GACVnP,YAAa3+D,IAAiBspB,EAC9B01C,gBAAiB32C,IAAyBmE,EAC1ClqB,UAAWA,KAIjB,kBAACpU,GAAD,CAAUpU,MAAO4nF,GAAW35E,MAAO,EAAG7P,UAAWV,EAAQyW,UACxC,IAAdyzE,IACC,kBAAC,GAAD,CAAQx+D,SAAU4qE,GAAUxlD,kBAAmBtoB,IAAiBspB,KAInEtpB,IACG,kBAAC,GAAD,CAAesoB,kBAAmBtoB,KAGtC,kBAAC9R,GAAD,CAAUpU,MAAO4nF,GAAW35E,MAAO,EAAG7P,UAAWV,EAAQyW,UACxC,IAAdyzE,IACC,kBAAC,GAAD,CACE77E,KAAMA,EACN01E,uBAAwBA,GACxBr4D,SAAU4qE,GACVnP,YAAa3+D,IAAiBspB,EAC9Bze,QAASA,KAIf,kBAAC3c,GAAD,CAAUpU,MAAO4nF,GAAW35E,MAAO,EAAG7P,UAAWV,EAAQyW,UACxC,IAAdyzE,IACC,kBAAC,GAAD,CACEnG,uBAAwBA,GACxBr4D,SAAU4qE,GACVnP,YAAa3+D,IAAiBspB,EAC9BlzC,MAAM,kBACN+0F,kBAAmBA,MAIzB,kBAACj9E,GAAD,CAAUpU,MAAO4nF,GAAW35E,MAAO,EAAG7P,UAAWV,EAAQyW,UACxC,IAAdyzE,IACC,kBAAC,GAAD,CACEnG,uBAAwBA,GACxBr4D,SAAU,WACRmjE,IAAY,GACZgF,GAA0B3J,GAAY,GACtC6L,KAAQrhF,MAAM,CACZqtB,SAAU,SACV/+B,OAAO,6BACP0E,MAAO,YAGXmnF,YAAaA,GACbD,SAAUA,GACVzH,YAAa3+D,IAAiBspB,EAC9B46C,aAAcA,QAOtBoH,IACA,kBAAC,GAAD,CACE5J,UAAWA,GACXnG,uBAAwBA,GACxBiG,oBAAqBmC,GACrBxC,aAvTFwC,IAAmBjC,GAAkB,OAClC,SAuTDN,cAhUqB,WAC3B,GAAIuC,GAAiB,MAAO,OAG5B,OAD8B,IACvBjC,GAAsC,kBAAoB,OA4T5CgN,GACfrN,gBAAiB0M,GACjBtnE,eA/Yc,WACpB,GAAIk9D,GAQF,OAPAwJ,mCAAwB,WACtB3B,GAA8Bd,IAC9B9G,GAAmB,MACnB2H,IAAkB,MAEpBxQ,EAA2B,QAAS,CAAE3oE,UAAW,KAAMC,QAAS,YAChE0oE,EAA2B,iBAAkB,GAI/C,GAAI2G,GAAJ,CACE,IAAM+L,EAAeD,GAA2B9L,GAAY,GAAG,GAC/DwJ,GAAauC,QAIfH,MA8XMhlD,kBAAmBtoB,IAAiBspB,EACpCg4C,oBAAqBgK,GACrB/J,WAA0B,IAAdG,GACZ1Q,cAAeA,EACfC,mBAAoBA,EACpBpmD,QAASA,QC1kBE,SAAC,GAOf,IANLyS,EAMI,EANJA,aACAC,EAKI,EALJA,WACA9gB,EAII,EAJJA,MACA2gB,EAGI,EAHJA,SAEAF,GACI,EAFJiuD,kBAEI,EADJjuD,iBAEM1lC,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIE0a,EAAYqK,GAASA,EAAMrK,UAC3BC,EAAUoK,GAASA,EAAMpK,QACzBs8E,EAAW1zB,KAAK2zB,IAAIv8E,EAAUD,GAC9By8E,EAAW5zB,KAAK6zB,KAAKH,EAAQ,OAC7BI,EAA6Br3F,EAAfm3F,EAAW,EAAM,SAAc,SAEnD,OACE,6BACGvxD,EAAaz1B,KAAI,SAACmB,EAAMjB,GACvB,GAAKiB,EAAKs0B,cAAiB1iC,SAASoO,EAAKs0B,cAAzC,CACA,IAAMhtB,EAAS1V,SAASoO,EAAKs0B,cACvBoB,EAAQyF,GAAkBn7B,EAAKo0B,IAC/BuU,EApDmB,SAC/BpU,EACAmB,EACApuB,EACAmM,EACAygB,GAEA,IAAIyU,EACJ,GAAIzU,GAVe,oBAUIK,EACrBoU,EAAajT,OACR,GAdY,oBAcPnB,GAA+BL,GAbrB,uBAayCK,EAC7D,GAAI9gB,GAASA,EAAMrK,WAAaqK,EAAMpK,QAAS,CAC7C,IAAMirB,EAfY,uBAeGC,EAAiCjtB,EAAS,EACzDmhC,EAASh1B,EAAMpK,QAAQsK,KAAKF,EAAMrK,UAAW,QACnDu/B,EAAa/2C,SAAS62C,GAAU/S,EAAQpB,OAExCqU,EAAajT,OAKfiT,EAzBiB,oBAsBTpU,GAAgCL,EAG3BwB,EAAQpuB,EAFRouB,EAOf,OAHKxB,IACHyU,EAAab,GAAsCr0B,EAAOk1B,IAErDxN,GAAkBwN,GA0BAq9C,CACjBzxD,EACAv0B,EAAKo0B,GACL9sB,EACAmM,EACAygB,GAEF,OACE,yBACErtB,IAAK9H,EACL7P,UAAWsG,KAAWhH,EAAQqvE,WAAYrvE,EAAQ6gF,iBAEjDn7C,GAlEQ,oBAkEWK,EAClB,kBAACj/B,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ8gF,eAC5ChoE,EAAQ,IACRA,EAAS,EACN5Y,EAAE8/E,GAAoBxuE,EAAKqK,cAAgB,UAC3C3b,EAAEsR,EAAKqK,cAAgB,QAAS,IACnCw7E,EAAW,QAAOA,EAAW,KAAOE,EAAc,IAGrD,oCACkB,oBAAfxxD,EACC,kBAACj/B,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ8gF,eAC7C,0BAAMpgF,UAAWV,EAAQ4lC,UAAWA,GADtC,IACwDsB,EAAO,IAC5DmwD,EACGn3F,EAAE,aAAe,SAAQm3F,EAAW,IAAME,EAC1C,IAGN,kBAACzwF,EAAA,EAAD,CAAY1F,QAAQ,QAAQV,UAAWV,EAAQ8gF,eAC7C,0BAAMpgF,UAAWV,EAAQ4lC,UAAWA,GADtC,IACwDsB,EAAO,IAC5DmwD,EAAWn3F,EAAE,aAAe,GAF/B,SAEsC4Y,EAAQ,IAC3CA,EAAS,EACN5Y,EAAE8/E,GAAoBxuE,EAAKqK,cAAgB,UAC3C3b,EAAEsR,EAAKqK,cAAgB,QAAS,IACnCw7E,EAAW,QAAOA,EAAW,KAAOE,EAAc,KAM3D,kBAACzwF,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQ8gF,eAC1C,0BAAMpgF,UAAWV,EAAQ4lC,UAAWA,GADtC,IACwDuU,WAS9Ds9C,GAAS,SAAC,GAOT,IANLt7E,EAMI,EANJA,OACAypB,EAKI,EALJA,SACAgK,EAII,EAJJA,qBACAkZ,EAGI,EAHJA,UAEA4uC,GACI,EAFJC,SAEI,EADJD,UAEM13F,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAEMwR,EAFN,KAGE5P,EAAU+P,IAAMsX,WAAW/mB,GAE3B4Q,EAAmBtB,EAAK7F,SAExB+rF,IAAaz7E,EAAOyB,QAAO,SAAApM,GAAI,OAAIA,EAAKlP,OAASc,SAASoO,EAAKlP,UAClEC,OAiCH,OAAKq1F,EAGH,yBAAKl3F,UAAWV,EAAQ0gF,uBACtB,kBAAC55E,EAAA,EAAD,CACE1F,QAAQ,KACRpB,QAAS,CAAEc,KAAMkG,KAAWhH,EAAQqvE,WAAYrvE,EAAQ4gF,aAEvD1gF,EAAE,YAGJic,EAAO9L,KAAI,SAACmB,EAAMjB,GACjB,GAAKiB,EAAKlP,OAAUc,SAASoO,EAAKlP,OAAlC,CACA,IAAM6B,EAAOqoC,GACXx5B,EACAxB,EACAA,EAAI,WAEAsH,EAAStH,EAAKlP,MACd4kC,EAAQyF,GAAkBn7B,EAAKo0B,IAC/BuU,EAAaxN,GAAkBn7B,EAAKo0B,GAAY9sB,GACtD,OACE,yBAAKT,IAAK9H,EAAO7P,UAAWV,EAAQ2gF,cAClC,yBAAKjgF,UAAWV,EAAQqvE,YACtB,kBAACvoE,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQqxE,cACzCltE,EAAKvF,QAEN84F,GACA,kBAAC,KAAD,CACEh3F,UAAWV,EAAQiwB,WACnBtvB,QAAS,kBA7DLk3F,EA6DuBrmF,OA5DzC1P,EAAQ,CACNlD,MAAO,sCACPyB,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJ,GAAIk1C,EAAJ,CACE,IAAMgvC,EAAeD,EAAaC,aAC5BvnF,EAAQsnF,EAAatnF,MAM3Bq/B,EAAqB,cAAD,OAAekoD,EAAf,oBAAuCvnF,EAAvC,oBACfsnF,EADe,CAElBv1F,MAAO,UAMXstC,EACE,SACAzzB,EAAOyB,QAAO,SAAApM,GAAI,OAAIA,IAASqmF,SAGlChuE,OAAM,eA5BS,IAAAguE,MAiEV,yBAAKn3F,UAAWV,EAAQqvE,YACtB,kBAACvoE,EAAA,EAAD,CAAY1F,QAAQ,SAClB,0BAAMV,UAAWV,EAAQ4lC,UAAWA,GADtC,IACwDsB,EADxD,QACiE,IAC9DpuB,GAEH,kBAAChS,EAAA,EAAD,CAAY1F,QAAQ,MAClB,0BAAMV,UAAWV,EAAQ4lC,UAAWA,GAAiB,IACpDuU,UAzCO,MAmDlBwG,GAAgB,SAAC,GAGhB,IAAD,IAFJhd,qBAEI,MAFY,GAEZ,EADJiC,EACI,EADJA,SAEM5lC,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAGE8S,EAHF,KAG0BnH,SAQ9B,OANwByd,MAAMC,QAAQoa,IAAkBA,EAAcpd,MACpE,SAAA/U,GAAI,OAAIA,EAAKo0B,IAAakB,WAAWt1B,EAAKo0B,OAQ1C,yBAAKllC,UAAWV,EAAQ0gF,uBACtB,kBAAC55E,EAAA,EAAD,CACE1F,QAAQ,KACRpB,QAAS,CAAEc,KAAMkG,KAAWhH,EAAQqvE,WAAYrvE,EAAQ4gF,aAEvD1gF,EAAE,kBAGJyjC,EAActzB,KAAI,SAACmB,EAAMjB,GACzB,GAAKiB,EAAKo0B,IAAcxiC,SAASoO,EAAKo0B,IAAtC,CACC,IAAMzhC,EAAOqoC,GACXx5B,EACAxB,EACAA,EAAI,WAEA01B,EAAQyF,GAAkBn7B,EAAKo0B,IACrC,OACE,yBAAKvtB,IAAK9H,EAAO7P,UAAWV,EAAQ2gF,cAClC,yBAAKjgF,UAAWV,EAAQqvE,YACtB,kBAACvoE,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQqxE,cACzCltE,EAAKvF,QAGV,yBAAK8B,UAAWV,EAAQqvE,YACtB,kBAACvoE,EAAA,EAAD,CAAY1F,QAAQ,SAClB,0BAAMV,UAAWV,EAAQ4lC,UAAWA,IAItC,kBAAC9+B,EAAA,EAAD,CAAY1F,QAAQ,MAClB,0BAAMV,UAAWV,EAAQ4lC,UAAWA,EAAU,KAC7CsB,UAlCc,MA6ClB6wD,GAAkB,SAAC,GAQzB,IAPLnoD,EAOI,EAPJA,qBACAsrC,EAMI,EANJA,WACAiM,EAKI,EALJA,YACAvhD,EAII,EAJJA,SACAm+C,EAGI,EAHJA,uBACA2T,EAEI,EAFJA,SACA/D,EACI,EADJA,kBAEM3zF,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAIE8S,EAJF,KAI0BnH,SAExB6S,EAASw8D,EAAWx8D,OACpBrE,EAAc8sE,EAAY9sE,YAC1Bu3B,EAAuBu1C,EAAY,yBACnCphD,EAAaohD,EAAYphD,WAE3B9gB,EAAQvG,EAAOuG,MACbgtB,EACJvzB,EAAOuzB,cACP54B,KAAOqF,EAAOuzB,cACX7sB,OAAOlY,GAAY8F,IACnBwR,OAAO,gBACNuyB,EACJr4B,EAAOq4B,YACP19B,KAAOqF,EAAOq4B,YACX3xB,OAAOlY,GAAY8F,IACnBwR,OAAO,gBACNnJ,EAAYqD,EAAOrD,UAAYqD,EAAOrD,UAAUA,UAAY,KAC5DE,EAAWmD,EAAOrD,UAAYqD,EAAOrD,UAAUE,SAAW,KAC1DD,EAAWoD,EAAOrD,UAAYqD,EAAOrD,UAAUC,SAAW,KAC1DV,EACJqK,GACA5L,KAAO4L,EAAMrK,WACVwK,OAAOlY,GAAY8F,IACnBwR,OAAO,gBACN3J,EACJoK,GACA5L,KAAO4L,EAAMpK,SACVuK,OAAOlY,GAAY8F,IACnBwR,OAAO,gBACNq7D,EACJxlE,EAAY4tB,cAAgB5uB,KAAOgB,EAAY4tB,cAAczjB,OAAO,QAChEs7D,EACJzlE,EAAY8tB,gBACZ9uB,KAAOgB,EAAY8tB,gBAAgB3jB,OAAO,QAEtCshB,EAAepnB,EAAOonB,aACtB3pB,EAASuC,EAAOvC,OAEhBwnB,EAAgBjlB,EAAOilB,cAEzB+B,GAAmByhD,EAAYt9C,aAkBnC,OAhBI6tD,IAAazyE,GAASgtB,GAAgB8E,IACxCrR,GAAkB,EAClBzgB,EAAQ,CACNrK,UAAW8D,EAAOuzB,aAClBp3B,QAAS6D,EAAOq4B,aAIhB2gD,GAAYh5E,EAAOwzB,YAAcxzB,EAAOwzB,WAAWr3B,UACrD6qB,GAAkB,EAClBzgB,EAAQ,CACNrK,UAAW8D,EAAOwzB,WAAWt3B,UAC7BC,QAAS6D,EAAOwzB,WAAWr3B,UAK7B,oCACE,yBAAKna,UAAWV,EAAQ0gF,uBACtB,kBAAC55E,EAAA,EAAD,CACE1F,QAAQ,KACRpB,QAAS,CAAEc,KAAMkG,KAAWhH,EAAQqvE,WAAYrvE,EAAQ4gF,aAE9B1gF,EAAzB6jF,EAA2B,gBAAqB,aAEnD,yBAAKrjF,UAAWV,EAAQ2gF,cACtB,yBAAKjgF,UAAWV,EAAQqvE,YACtB,kBAACvoE,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQqxE,cAExC7kC,GACEx5B,EACAqH,EACAu3B,GACAhzC,QAIR,yBAAK8B,UAAWV,EAAQqvE,YACrBp9B,IAAiB8E,GAChB,kBAACjwC,EAAA,EAAD,CAAY1F,QAAQ,SACjB6wC,EAAc,IACd52B,GAAS,eAASA,EAAT,iBAAwBC,EAAxB,YAAoCpb,EAAEqb,KAGnD02B,GAAgB8E,GACf,kBAACjwC,EAAA,EAAD,CAAY1F,QAAQ,SACjB6wC,EADH,IACkB,MADlB,IAC0B8E,GAG3Bn8B,GACC,kBAAC9T,EAAA,EAAD,CAAY1F,QAAQ,SACjBwZ,EADH,WACiBC,IAIpBglE,GACC,yBAAKn/E,UAAWV,EAAQqvE,YACtB,kBAACvoE,EAAA,EAAD,CAAY1F,QAAQ,SACjBlB,EAAE,YADL,KACoB2/E,EADpB,MACgC3/E,EAAE,aADlC,KACkD4/E,KAKxD,kBAAC,GAAD,CACEh6C,aAAcA,EACdC,WAAYA,EACZ9gB,MAAOA,EACP2gB,SAAUA,EACV+tD,kBAAmBA,EACnBjuD,gBAAiBA,KAGrB,kBAAC,GAAD,CACE/B,cAAeA,EACfiC,SAAUA,EACVgK,qBAAsBA,EACtB8nD,SAAUA,IAEZ,kBAAC,GAAD,CACEv7E,OAAQA,EACRypB,SAAUA,EACVgK,qBAAsBA,EACtB8nD,SAAUA,MAMLM,GAAkB,SAAC,GAOzB,IANLpoD,EAMI,EANJA,qBACAsrC,EAKI,EALJA,WACAt1C,EAII,EAJJA,SACAm+C,EAGI,EAHJA,uBACA2T,EAEI,EAFJA,SACA/D,EACI,EADJA,kBAEM3zF,EAAUxC,KADZ,EAEcyC,cAFd,mBAEGC,EAFH,KAEMwR,EAFN,KAGE5P,EAAU+P,IAAMsX,WAAW/mB,GAE3B4Q,EAAmBtB,EAAK7F,SAExBm9B,EAAakyC,EAAWx8D,OAAOsqB,WAC/BggD,EAAqBhgD,EAAWprB,QAAO,SAAApM,GAAI,OAAIA,EAAKmd,cAEtDxS,EAAS,GACTwnB,EAAgB,GAEpBqF,EAAW34B,KAAI,SAACmB,EAAM64E,GACpB,IAAK74E,EAAKmd,aAAend,EAAK2K,OAAQ,OAAO,EAC7C,IAAM87E,EAAUzmF,EAAK2K,OAAO9L,KAAI,SAACmB,EAAMjB,GAGrC,OAFAiB,EAAKsmF,aAAezN,EACpB74E,EAAKjB,MAAQA,EACNiB,KAET2K,EAAM,sBAAOA,GAAP,YAAkB87E,OAG5BjvD,EAAW34B,KAAI,SAACmB,EAAM64E,GACpB,IAAK74E,EAAKmd,aAAend,EAAKmyB,cAAe,OAAO,EACpD,IAAMu0D,EAAiB1mF,EAAKmyB,cAActzB,KAAI,SAACmB,EAAMjB,GAGnD,OAFAiB,EAAKsmF,aAAezN,EACpB74E,EAAKjB,MAAQA,EACNiB,KAETmyB,EAAa,sBAAOA,GAAP,YAAyBu0D,OA0BtC,OAAKlP,EAAmBzmF,OAGtB,oCACE,yBAAK7B,UAAWV,EAAQ0gF,uBACtB,kBAAC55E,EAAA,EAAD,CACE1F,QAAQ,KACRpB,QAAS,CAAEc,KAAMkG,KAAWhH,EAAQqvE,WAAYrvE,EAAQ4gF,aAE9B1gF,EAAzB6jF,EAA2B,aAAkB,mBAGhD,6BACG/6C,EAAW34B,KAAI,SAACmB,EAAMjB,GACrB,GAAKiB,EAAKmd,WAAV,CACA,IAAMxqB,EAAOqoC,GACXx5B,EACAxB,EACAA,EAAI,WAEAygC,EAAezgC,EAAKygC,aACtB54B,KAAO7H,EAAKygC,cACT7sB,OAAOlY,GAAY8F,IACnBwR,OAAO,gBACV,GACEuyB,EAAavlC,EAAKulC,WACpB19B,KAAO7H,EAAKulC,YACT3xB,OAAOlY,GAAY8F,IACnBwR,OAAO,gBACV,GACEnJ,EAAY7J,EAAK6J,UAAY7J,EAAK6J,UAAUA,UAAY,KACxDE,EAAW/J,EAAK6J,UAAY7J,EAAK6J,UAAUE,SAAW,KACtDD,EAAW9J,EAAK6J,UAAY7J,EAAK6J,UAAUC,SAAW,KACxD2J,EAAQzT,EAAKyT,MACXrK,EACJqK,GACA5L,KAAO4L,EAAMrK,WACVwK,OAAOlY,GAAY8F,IACnBwR,OAAO,gBACN3J,EACJoK,GACA5L,KAAO4L,EAAMpK,SACVuK,OAAOlY,GAAY8F,IACnBwR,OAAO,gBACNq7D,EACJruE,EAAKy2B,cAAgB5uB,KAAO7H,EAAKy2B,cAAczjB,OAAO,QAClDs7D,EACJtuE,EAAK22B,gBAAkB9uB,KAAO7H,EAAK22B,gBAAgB3jB,OAAO,QACtDshB,EAAet0B,EAAKs0B,aACpBC,EAAav0B,EAAKu0B,WAEpBL,GAAmBl0B,EAAKq4B,aAkB5B,OAhBI6tD,IAAazyE,GAASgtB,GAAgB8E,IACxCrR,GAAkB,EAClBzgB,EAAQ,CACNrK,UAAWpJ,EAAKygC,aAChBp3B,QAASrJ,EAAKulC,aAId2gD,GAAYlmF,EAAK0gC,YAAc1gC,EAAK0gC,WAAWr3B,UACjD6qB,GAAkB,EAClBzgB,EAAQ,CACNrK,UAAWpJ,EAAK0gC,WAAWt3B,UAC3BC,QAASrJ,EAAK0gC,WAAWr3B,UAK3B,yBAAKxC,IAAK9H,GACR,yBAAK7P,UAAWV,EAAQ2gF,cACtB,yBAAKjgF,UAAWV,EAAQqvE,YACtB,kBAACvoE,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQqxE,cACzCltE,EAAKvF,QAEN84F,GACA,kBAAC,KAAD,CACEh3F,UAAWV,EAAQiwB,WACnBtvB,QAAS,kBAtGFw3F,EAsG6B5nF,OArGxDzO,EAAQ,CACNlD,MAAO,sCACPyB,iBAAkB,SAClBC,iBAAkB,SAEjBsT,MAAK,WACJg8B,EACE,aACA5G,EAAW34B,KAAI,SAACmB,EAAMjB,GACpB,OAAIA,IAAU4nF,EACL,eACF3mF,EADL,CAEEmd,YAAY,IAGTnd,SAIZqY,OAAM,eApBkB,IAAAsuE,MA0Gb,yBAAKz3F,UAAWV,EAAQqvE,YACrBp9B,IAAiB8E,GAChB,kBAACjwC,EAAA,EAAD,CAAY1F,QAAQ,SACjB6wC,EAAc,IACd52B,GAAS,eACHA,EADG,iBACYC,EADZ,YACwBpb,EAAEqb,KAGvC02B,GAAgB8E,GACf,kBAACjwC,EAAA,EAAD,CAAY1F,QAAQ,SACjB6wC,EADH,IACkB,MADlB,IAC0B8E,GAG3Bn8B,GACC,kBAAC9T,EAAA,EAAD,CAAY1F,QAAQ,SACjBwZ,EADH,WACiBC,IAIpBglE,GACC,yBAAKn/E,UAAWV,EAAQqvE,YACtB,kBAACvoE,EAAA,EAAD,CAAY1F,QAAQ,SACjBlB,EAAE,YADL,KACoB2/E,EADpB,MACgC3/E,EAAE,aADlC,IACiD,IAC9C4/E,KAKT,yBAAKp/E,UAAWV,EAAQ2gF,cACtB,kBAAC,GAAD,CACE/wC,qBAAsBA,EACtBxf,UAAU,EACV0V,aAAcA,EACdC,WAAYA,EACZ9gB,MAAOA,GAASzT,EAAK0gC,WACrBtM,SAAUA,EACV+tD,kBAAmBA,EACnBjuD,gBAAiBA,YAS7B,kBAAC,GAAD,CACE/B,cAAeA,EACfiC,SAAUA,EACVgK,qBAAsBA,EACtBkZ,WAAW,EACX6uC,SAAU3uD,EACV0uD,SAAUA,IAEd,kBAAC,GAAD,CACEv7E,OAAQA,EACRypB,SAAUA,EACVgK,qBAAsBA,EACtBkZ,WAAW,EACX6uC,SAAU3uD,EACV0uD,SAAUA,KA/IuB,MAqJ5BU,GAAQ,SAAC,GAAqD,IAAnDld,EAAkD,EAAlDA,WAAYiM,EAAsC,EAAtCA,YAAavhD,EAAyB,EAAzBA,SAAU8xD,EAAe,EAAfA,SACnD13F,EAAUxC,KADwD,EAE5DyC,cAALC,EAFiE,oBAIpE+kB,EAAQi2D,EAAWx8D,OAAOuG,MACxB6gB,EAAeo1C,EAAWx8D,OAAOonB,aACjC3pB,EAAS++D,EAAWx8D,OAAOvC,OAC3BwnB,EAAgBu3C,EAAWx8D,OAAOilB,cAEpCqlD,EADe9N,EAAWx8D,OAAOsqB,WACDprB,QAAO,SAAApM,GAAI,OAAIA,EAAKmd,cAClDs6D,EAAgB,CACpBljD,WAAYohD,EAAYphD,WACxBL,iBAAkByhD,EAAYt9C,cAE1BoI,EAAeipC,EAAWx8D,OAAOuzB,aACjC8E,EAAamkC,EAAWx8D,OAAOq4B,WAErCiyC,EAAqBA,EAAmB34E,KAAI,SAAAyhC,GAC1C,OAAIA,EAASG,cAAgBH,EAASiF,WAC7B,eACFjF,EADL,CAEEpM,iBAAiB,EACjBwM,WAAY,CACVt3B,UAAWk3B,EAASG,aACpBp3B,QAASi3B,EAASiF,cAIpBjF,EAASI,WACJ,eACFJ,EADL,CAEEpM,iBAAiB,IAGd,eACFoM,EADL,CAEEpM,iBAAiB,OAIjBgyD,IAAazyE,GAASgtB,GAAgB8E,IACxC9xB,EAAQ,CACNrK,UAAWq3B,EACXp3B,QAASk8B,IAKX2gD,IACCzyE,GACDi2D,EAAWx8D,OAAOwzB,YAClBgpC,EAAWx8D,OAAOwzB,WAAWr3B,UAE7BoK,EAAQ,CACNrK,UAAWsgE,EAAWx8D,OAAOwzB,WAAWt3B,UACxCC,QAASqgE,EAAWx8D,OAAOwzB,WAAWr3B,UAI1C,IAAMs/B,EAAaxN,GACjB6M,GACEyvC,EACAhkE,EACA6gB,EACA3pB,EACAwnB,EACAqlD,EACApjD,EACA3gB,IAIJ,OACE,yBAAKvkB,UAAWV,EAAQ+gF,UACtB,kBAACj6E,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQqxE,cACzCnxE,EAAE,UAEL,kBAAC4G,EAAA,EAAD,CAAY1F,QAAQ,MAClB,0BAAMV,UAAWV,EAAQ4lC,UAAWA,GADtC,IACwDuU,KA6E/C7vB,gBAAU,CACvBnmB,KAAM,aACNomB,kBAAkB,EAClBC,0BAA0B,EAC1BC,aAAa,GAJAH,CAKZjZ,aAjBqB,SAAAtO,GACtB,MAAO,CACLm4E,WAAYn4E,EAAMoB,KAAK+2E,eAIA,SAAA5pE,GAAQ,MAAK,CACtCs+B,qBAAsB,SAAC/xB,EAAOvb,GAC5BgP,EAASwG,aAAO,aAAc+F,EAAOvb,QAStC+O,EA5Ec,SAAC,GAUX,IATLu+B,EASI,EATJA,qBACAjlB,EAQI,EARJA,aACA/rB,EAOI,EAPJA,MACAs8E,EAMI,EANJA,WACAmd,EAKI,EALJA,UACAlR,EAII,EAJJA,YACA34D,EAGI,EAHJA,aACAu1D,EAEI,EAFJA,uBACA4P,EACI,EADJA,kBAEM3zF,EAAUxC,KADZ,EAEQyC,cAALC,EAFH,oBAIE0lC,EAAWs1C,EAAaA,EAAWx8D,OAAOknB,SAAW,GAE3D,OACE,yBAAKllC,UAAWsG,KAAWhH,EAAQ2X,QAAS6W,IAC1C,yBAAK9tB,UAAWV,EAAQs+C,UACtB,kBAACx3C,EAAA,EAAD,CAAY1F,QAAQ,KAAKpB,QAAS,CAAEc,KAAMd,EAAQygF,qBAC/CvgF,EAAEtB,IAGL,0BAAM8sB,SAAUf,EAAcjqB,UAAWV,EAAQsrB,MAC9C+sE,GACC,kBAACvxF,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQ27C,cAA5C,WAIF,kBAAC,GAAD,CACE/L,qBAAsBA,EACtBsrC,WAAYA,EACZiM,YAAaA,EACbvhD,SAAUA,EACVm+C,uBAAwBA,EACxB4P,kBAAmBA,IAErB,kBAAC,GAAD,CACE/jD,qBAAsBA,EACtBsrC,WAAYA,EACZt1C,SAAUA,EACVm+C,uBAAwBA,EACxB4P,kBAAmBA,IAErB,kBAAC,GAAD,CACEzY,WAAYA,EACZiM,YAAaA,EACbvhD,SAAUA,EACVm+C,uBAAwBA,MAI9B,yBAAKrjF,UAAWV,EAAQu+C,WACtB,kBAAC,GAAD,CAAoBnuC,KAAM+2E,EAAahjF,KAAM+2E,UGvtBtCod,GA5DK3hE,aAAe,CACjCpgB,QAAS,CACPqgB,QAAS,CACPC,KAAM,WAERC,UAAW,CACTD,KAAM,WAER5uB,MAAO,CACL4uB,KAAM,YAGVE,WAAY,CACVC,WAAY,YACZC,GAAI,CACF14B,SAAU,OACVC,WAAY,OACZC,WAAY,QAEdy4B,GAAI,CACF34B,SAAU,OACVC,WAAY,OACZC,WAAY,QAEd04B,GAAI,CACF54B,SAAU,OACVC,WAAY,OACZC,WAAY,QAEd85F,GAAI,CACFh6F,SAAU,OACVC,WAAY,OACZC,WAAY,QAEd24B,MAAO,CACL74B,SAAU,OACVC,WAAY,OACZE,MAAO,WAET24B,MAAO,CACL94B,SAAU,OACVE,WAAY,QAEd64B,OAAQ,CACN3vB,cAAe,aACflJ,WAAY,MAGhB84B,UAAW,CACTC,eAAgB,CACd,UAAW,CACT,eAAgB,CACdl4B,SAAU,WACVjB,QAAS,QCZJb,GAzCGC,YAAW,CAC3Bka,QAAS,CACPjS,QAAS,OACTC,eAAgB,SAChBkK,WAAY,QAEd2oF,eAAgB,CACd/yF,MAAO,SAET4R,SAAU,CACR3Y,MAAO,UACPH,SAAU,OACVW,YAAa,QAEfu5F,cAAe,CACb/yF,QAAS,WACTjH,WAAY,OACZkJ,cAAe,aAEjB/I,MAAO,CACL8G,QAAS,OACTE,WAAY,SACZlH,MAAO,UACPuH,aAAc,OACdxH,WAAY,UAEd4yE,aAAc,CACZ3yE,MAAO,UACPiJ,cAAe,YACf1B,aAAc,OACd2B,cAAe,UAEjBL,gBAAiB,CACf9B,MAAO,kBACPD,OAAQ,mBAEV0B,cAAe,CACb5H,SAAU,WCiSCo5F,GAlSQ,WACrB,IAAM14F,EAAUxC,KADW,EAEL+4C,cAAd11C,EAFmB,EAEnBA,GAAIsuD,EAFe,EAEfA,MACJx8C,EAAoBC,wBAApBD,gBACFoD,EAAWynD,cAJU,EAMGh8D,mBAAS,MANZ,mBAMpBmnD,EANoB,KAMXgwC,EANW,OAOGn3F,mBAAS,MAPZ,mBAOpBglF,EAPoB,KAOXoS,EAPW,OAQKp3F,mBAAS,OARd,mBAQpBokC,EARoB,KAQVizD,EARU,OASiCr3F,mBAAS,MAT1C,mBASpBuiF,EAToB,KASI+U,EATJ,OAUOt3F,mBAAS,MAVhB,mBAUpBooB,EAVoB,KAURmvE,EAVQ,OAWyBv3F,mBAClD,uBAZyB,mBAWpBw3F,EAXoB,KAWAC,EAXA,OAeyBz3F,mBAAS,IAflC,mBAepB03F,EAfoB,KAeAC,EAfA,OAgBiB33F,mBAAS,IAhB1B,mBAgBpB4nC,EAhBoB,KAgBJgwD,EAhBI,OAiBK/mF,YAAY04C,IAArCY,EAjBoB,sBAkBUt5C,YACnC24C,IADK8N,EAlBoB,oBAsBrBgzB,EACJ/1E,EAASC,SAASoI,QAAQ,gCAAkC,EACxDitE,EACJt1E,EAASC,SAASoI,QAAQ,2BAA6B,EAEnDi7E,SADchO,IAAkBS,IACIliE,GA3Bf,GAiCvBpX,YAASwmC,GAAuB,CAClC3I,KACEt6B,EAASC,SAASoI,QAAQ,2BAA6B,GACvDrI,EAASC,SAASoI,QAAQ,gCAAkC,EAC9DkyB,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACTktC,uBAAwBz9C,SAASvC,GACjCsuD,MAAOA,KAXAsmC,GA9BgB,GA8BzBniE,QACOgmE,GA/BkB,GA+BzBrxF,MACM6oC,GAhCmB,GAgCzB1gC,KAhCyB,GAiDvBoC,YAAS8jC,GAAkB,CAC7BjG,KACEt6B,EAASC,SAASoI,QAAQ,uBAAyB,GACnDrI,EAASC,SAASoI,QAAQ,2BAA6B,EACzDkyB,YAAa,WACbC,6BAA6B,EAC7B58B,UAAW,CACT6uC,kBAAmBp/C,SAASvC,GAC5BsuD,MAAOA,KAXAumC,GA9CgB,GA8CzBpiE,QACOimE,GA/CkB,GA+CzBtxF,MACMgtC,GAhDmB,GAgDzB7kC,KA2CFwE,qBAAU,WACR,GAAKk8B,GAEL,GAAKA,GAAkBgQ,uBAAuBv+C,OAA9C,CAOA,IAAM24C,EAAuBpK,GAAkBgQ,uBAAuB,GAEtE,GAAI5F,EAAqBtxB,WACvBjX,EAAgB,uBAAwB,CACtCvR,QAAS,cAFb,CAOA,IAAMonB,EAAgB0yB,EAAqB1yB,cACrCgxE,EAAc3hD,GAClBqD,GAEFs+C,EAAYxwD,WAAawwD,EAAYxwD,WAAW34B,KAAI,SAAAmB,GAElD,OADAA,EAAKmd,YAAa,EACXnd,KAET,IAAM21E,EAAcx/C,GAAenf,GACnCswE,GAA0B,GAC1BH,EAAW,CACTj6E,OAAQ86E,IAEVX,EAAYW,EAAY5zD,UACxBgzD,EAAW,eACNzR,EADK,CAERphD,WAAY0zD,GAA2BjxE,MAGzC2wE,EAAsBj+C,EAAqB1yB,cAAc9d,cAAgB,IACzE0uF,EAAkBl+C,EAAqB1yB,cAAc4gB,gBAAkB,UAnCrEz2B,EAAgB,yBAA0B,CACxCvR,QAAS,YAoCZ,CAAC0vC,KAEJl8B,qBAAU,WACR,GAAKqgC,GAEL,GAAKA,GAAaqG,mBAAmB/4C,OAArC,CAOA,IAAMm/C,EAAkBzM,GAAaqG,mBAAmB,GAExD,GAAIoG,EAAgB93B,WAClBjX,EAAgB,uBAAwB,CACtCvR,QAAS,cAFb,CAOA,IAAM0wC,EAAW4P,EAAgB5P,SAE3B0nD,EAAcz4C,GAA8BW,GAClD83C,EAAYxwD,WAAawwD,EAAYvxE,eAAe5X,KAAI,SAAAmB,GAEtD,OADAA,EAAKmd,YAAa,EACXnd,KAET,IAAM21E,EAAcuS,GAAuB5nD,GAC3CgnD,GAA0B,GAC1BH,EAAW,CACTj6E,OAAQ86E,IAEVX,EAAYW,EAAY5zD,UACxBgzD,EAAW,eACNzR,EADK,CAERphD,WAAY+L,EAAQ,WACpBjI,aAAciI,EAAQ,gBAGxBqnD,EAAsBz3C,EAAgB5P,SAASpnC,cAAgB,IAC/D0uF,EAAkB13C,EAAgB5P,SAAS1I,gBAAkB,UAnC3Dz2B,EAAgB,yBAA0B,CACxCvR,QAAS,YAoCZ,CAAC6zC,KAsBJ,IAAMwkD,GAA6B,SAAAjxE,GACjC,IAAMof,EAAapf,EAAcma,OAAO,GAExC,OAAIiF,EAAW/rB,YAAYA,YnS7OP,qBmS+OT+rB,EAAW5gB,InS9OL,kBAFA,mBmSuPnB,OAAIyuE,IAAwBC,GAExB,kBAAC,GAAD,CACEpuF,WAAW,EACXC,gBAAiBvH,EAAQuH,gBACzB7G,UAAWV,EAAQkH,gBAIrBoyF,IAAsBC,KAAkB5wC,EAAgB,KAG1D,kBAACgxC,EAAA,EAAD,CAAej8F,MAAO46F,IACpB,yBAAK53F,UAAWV,EAAQ2X,SACtB,yBAAKjX,UAAWV,EAAQw4F,gBACtB,kBAAC1xF,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQpB,QACxCy6F,IACA,kBAAC,KAAD,CAAiB34F,UAAWV,EAAQqX,WAErCy0E,GAAuBT,EACpB2N,EACA,yCAGN,kBAAClyF,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQqxE,cAA5C,mBAGA,kBAAC,GAAD,CACEzhC,qBAAsB,aACtBsrC,WAAYvyB,EACZw+B,YAAaX,EACb5gD,SAAUA,EACVm+C,uBAAwBA,EACxB2T,UAAU,IAEZ,kBAAC,GAAD,CACE9nD,qBAAsB,aACtBsrC,WAAYvyB,EACZ/iB,SAAUA,EACVm+C,uBAAwBA,EACxB2T,UAAU,IAGZ,kBAAC,GAAD,CACExc,WAAYvyB,EACZw+B,YAAaX,EACb5gD,SAAUA,EACVm+C,uBAAwBA,EACxB2T,UAAU,IAEZ,kBAAC5wF,EAAA,EAAD,CAAY1F,QAAQ,KAAKV,UAAWV,EAAQk5F,oBAA5C,wBAGG9vD,EACG,oCACE,2BAAIA,IAGN,oCACE,2BAAI8vD,GAAsB,mBAIjCG,IACC,kBAACl4F,EAAA,EAAD,CACEC,QAAQ,WACR1C,MAAM,UACN8J,MAAO,CAAEoxF,MAAO,SAChBj5F,QAAS,WAvNfE,GAAMsuD,IACJ28B,GACFmN,EAAsB,2CACtBF,GAAY,GACZjgC,EAA2B,CACzBnlD,UAAW,CACT9S,GAAIA,EACJsuD,MAAOA,KAERv7C,MAAK,eACRjB,EAAgB,uBAAwB,CACtCvR,QAAS,WAEFiqF,IACT4N,EAAsB,2CACtBF,GAAY,GACZptC,EAAsB,CACpBh4C,UAAW,CACTo4C,IAAK,CAAClrD,GACNsuD,MAAOA,KAERv7C,MAAK,eACRjB,EAAgB,uBAAwB,CACtCvR,QAAS,cA4LP,4BCjRG,SAASy4F,KACtB,OACE,kBAAC,IAAD,KACE,kBAAC,IAAD,KACE,kBAAC,IAAD,CAAOztF,KAAK,UACV,kBAAC,GAAD,KACE,kBAAC,GAAD,QAIJ,kBAAC,IAAD,CAAOA,KAAK,mBACV,kBAAC,GAAD,KACE,kBAAC,GAAD,QAIJ,kBAAC,IAAD,CAAOA,KAAK,kCACV,kBAAC,GAAD,KACE,kBAAC,GAAD,CAAuB8iD,WAAW,EAAOD,SAAS,MAItD,kBAAC,IAAD,CAAO7iD,KAAK,oCACV,kBAAC,GAAD,KACE,kBAAC,GAAD,CAAuB8iD,WAAW,EAAMD,SAAS,MAIrD,kBAAC,GAAD,CACE7iD,KAAK,oCACLjH,UAAW20F,KAGb,kBAAC,GAAD,CACE1tF,KAAK,gCACLjH,UAAW40F,KAGb,kBAAC,GAAD,CAAc3oF,OAAK,EAAChF,KAAK,cAAcjH,UAAWk5D,KAElD,kBAAC,GAAD,CAAcjyD,KAAK,uBAAuBjH,UAAW60F,KAErD,kBAAC,GAAD,CACE5tF,KAAK,8BACLjH,UAAW80F,KAGb,kBAAC,GAAD,CAAc7tF,KAAK,qBAAqBjH,UAAWivD,KAEnD,kBAAC,GAAD,CACEhoD,KAAK,uBACLjH,UAAW+0F,IAEX,kBAAC,GAAD,OAGF,kBAAC,GAAD,CAAc9tF,KAAK,kBAAkBjH,UAAW+0F,IAC9C,kBAAC,GAAD,OAGF,kBAAC,GAAD,CACE9oF,OAAK,EACLhF,KAAK,kBACLjH,UAAWo5D,KAGb,kBAAC,GAAD,CACEnyD,KAAK,2BACLjH,UAAWg1F,KAGb,kBAAC,GAAD,CACE/tF,KAAK,kCACLjH,UAAWi1F,KAGb,kBAAC,GAAD,CACEhuF,KAAK,yBACLjH,UAAWwzD,KAGb,kBAAC,GAAD,CACEvsD,KAAK,2BACLjH,UAAWk1F,IAEX,kBAAC,GAAD,OAGF,kBAAC,GAAD,CACEjuF,KAAK,sBACLjH,UAAWk1F,IAEX,kBAAC,GAAD,OAGF,kBAAC,GAAD,CACEjuF,KAAK,iCACLjH,UAAWm1F,KAGb,kBAAC,GAAD,CACEluF,KAAK,gCACLjH,UAAWo1F,KAGb,kBAAC,GAAD,CACEnuF,KAAK,oCACLjH,UAAWq1F,KAGb,kBAAC,GAAD,CAAcppF,OAAK,EAAChF,KAAK,IAAIjH,UAAWs1F,KACxC,kBAAC,GAAD,CAAcruF,KAAK,kCACjB,kBAAC,GAAD,OAGF,kBAAC,GAAD,CAAcA,KAAK,iBAAiBjH,UAAWqgE,KAE/C,kBAAC,GAAD,CAAcp0D,OAAK,EAAChF,KAAK,cAAcjH,UAAWu1F,KAClD,kBAAC,GAAD,CAActpF,OAAK,EAAChF,KAAK,YAAYjH,UAAWw1F,KAChD,kBAAC,GAAD,CAAcvuF,KAAK,mBAAmBjH,UAAWy1F,KAEjD,kBAAC,GAAD,CAAcxuF,KAAK,mBAAmBjH,UAAW01F,KACjD,kBAAC,GAAD,CAAczuF,KAAK,SAASjH,UAAW21F,KAEvC,kBAAC,GAAD,CAAc1uF,KAAK,eAAejH,UAAWu5E,KAE7C,kBAAC,GAAD,CACEtyE,KAAK,8CACLjH,UAAWuzF,KAEb,kBAAC,GAAD,CACEtsF,KAAK,0CACLjH,UAAWuzF,KAEb,kBAAC,GAAD,CACEtsF,KAAK,sCACLjH,UAAWuzF,KAEb,kBAAC,GAAD,CACEtsF,KAAK,2CACLjH,UAAWuzF,KAGb,kBAAC,GAAD,CACEtsF,KAAK,sBACLjH,UAAWg6E,KAEb,kBAAC,GAAD,CACE/yE,KAAK,sBACLjH,UAAWi6E,O,eCjKf2b,GAAkB,IAAIC,IAA6B,CACvDC,6BAA8B,CAC5BC,SAAU,CACRC,MAAO,OAKPC,GAAQC,YAAYp3F,GAEpBq3F,GAAS,IAAIC,IAAa,CAC9Bv9D,KAAMw9D,aAAWnwD,KAAK,CACpBqjB,aAAQ,YAAsC,IAAnC3O,EAAkC,EAAlCA,cAAe07C,EAAmB,EAAnBA,aACpB17C,GACFA,EAAcpnB,SAAQ,YAAmC,IAAhCqnB,EAA+B,EAA/BA,QAAS07C,EAAsB,EAAtBA,UAAWtvF,EAAW,EAAXA,KAC3CuvF,QAAQC,IAAR,oCAC+B57C,EAD/B,uBACqD07C,EADrD,mBACyEtvF,IAEzD,0BAAZ4zC,IACFtJ,OAAO3gC,SAAP,aAGF0lF,GAAcE,QAAQC,IAAR,2BAAgCH,OAEpDI,2BAAiB,CAAEC,IAAKl3F,GAAKm3F,YAAa,YAC1C,IAAIC,IAAS,CACXF,IAAKl3F,GACLm3F,YAAa,cAIjBE,MAAO,IAAIC,IAAc,CAAEnB,uBA4CdoB,OAzCf,WAiBE,OAhBA9iF,IAAOC,GAAGC,WAAW,OACrBF,IAAO+L,OAAO,MACd/L,IAAO+iF,aAAa,KAAM,CACxBC,KAAM,CACJC,IAAK,KAUTv0C,SAASw0C,gBAAgB/zF,MAAMg0F,YAAY,eAAgB,WAGzD,kBAAC,IAAD,CAAgBlB,OAAQA,IACtB,kBAAC,IAAD,CAAUF,MAAOA,IACf,kBAACzB,EAAA,EAAD,CAAej8F,MAAK,eAAOA,GAAP,GAXL,CACnBuB,OAAQ,CACNP,MAAO,cAUH,kBAAC+9F,GAAA,EAAD,MAEA,kBAACC,EAAD,KACE,kBAAC,mBAAD,CACExmC,iBAAkB,IAClBymC,SAAU,EACV5hE,aAAc,CACZC,SAAU,MACVC,WAAY,UAGd,kBAAC4+D,GAAD,Y,kDCnDC+C,GAlCK,SAAAC,GA+BlB,OA9BAnrF,KACGorF,IAAIC,MACJD,IAAIE,MACJ3pC,KAAK,CACJ4pC,OAAOl4F,EACPm4F,IAAKL,GAAmB,UACxBM,YAAaN,GAAmB,UAChCO,cAAc,EACdC,cAAe,CACbC,aAAa,EACbC,gBAAiB,KAEnBC,MAAO,CACLC,MAAM,EACNC,aAAa,GAGfC,GAAI,CAAC,gBACLC,UAAW,eAEXC,UAAW,CACTzzF,QAAS,CACP0zF,aAAcC,IAEhB5wF,OAAQ,CACN2wF,aAAcE,OAKftsF,MC1BWkE,QACW,cAA7B8gC,OAAO3gC,SAASkoF,UAEe,UAA7BvnD,OAAO3gC,SAASkoF,UAEhBvnD,OAAO3gC,SAASkoF,SAAS/sF,MACvB,2DCHN,IAAM2rF,GAAkB5oF,aAAac,QAAQ,YAE7Cs8E,IAAShsF,OACP,kBAAC64F,EAAA,EAAD,CAAiBxsF,KAAMkrF,GAAYC,IAAmB,YACpD,kBAAC,GAAD,OAEF90C,SAASwpC,eAAe,SD8GpB,kBAAmB4M,WACrBA,UAAUC,cAAcC,MAAMzqF,MAAK,SAAA0qF,GACjCA,EAAaC,kB","file":"static/js/main.5b9221c4.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"containerClassName\":\"styles_containerClassName__oRqyP\",\"wrapperClassName\":\"styles_wrapperClassName__Q3Avj\",\"inputStyles\":\"styles_inputStyles__2cBoi\",\"rangePicker\":\"styles_rangePicker__3XTrq\"};","module.exports = __webpack_public_path__ + \"static/media/Forsidebilde_BifrostBooking.2230b16e.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","import { createContext } from 'react';\r\n\r\nexport default createContext();\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n paper: {\r\n backgroundColor: '#FFF',\r\n border: '1px solid #E5E5E5',\r\n boxSizing: 'border-box',\r\n borderRadius: '3px',\r\n minWidth: '400px',\r\n maxWidth: '600px',\r\n [theme.breakpoints.down('sm')]:{\r\n minWidth: '80%', \r\n maxWidth: '80%', \r\n \r\n }\r\n },\r\n contentRoot: {\r\n padding: '12px 30px'\r\n },\r\n contentTextRoot: {\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 'normal',\r\n color: '#000',\r\n padding: '0',\r\n margin: '0'\r\n },\r\n title: {\r\n fontSize: '15px',\r\n fontWeight: '600',\r\n lineHeight: '18px',\r\n color: '#000',\r\n padding: '35px 30px 0'\r\n },\r\n actionsRoot: {\r\n borderTop: '1px solid #E5E5E5',\r\n marginTop: '20px',\r\n padding: '12px 30px'\r\n },\r\n cancelBtnRoot: {\r\n border: `1px solid ${theme.baseUI.color}`,\r\n borderRadius: '3px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n color: theme.baseUI.color,\r\n padding: '8px 15px',\r\n minWidth: '70px',\r\n marginRight: '7px'\r\n },\r\n actionBtnRoot: {\r\n boxShadow: 'none',\r\n border: `1px solid ${theme.baseUI.color}`,\r\n borderRadius: '3px',\r\n backgroundColor: theme.baseUI.color,\r\n color: '#FFFFFF',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n padding: '8px 15px',\r\n minWidth: '70px',\r\n '&:hover': {\r\n backgroundColor: theme.baseUI.color,\r\n color: '#FFFFFF'\r\n }\r\n },\r\n closeBtn: {\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n padding: '10px'\r\n },\r\n closeIcon: {\r\n fontSize: '17px',\r\n color: '#000'\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport Button from '@material-ui/core/Button';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst ConfirmationDialog = ({\r\n open,\r\n options,\r\n onClose,\r\n onCancel,\r\n onConfirm\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const {\r\n title,\r\n description,\r\n warningText,\r\n confirmationText,\r\n cancellationText,\r\n translate\r\n } = options;\r\n\r\n return (\r\n <Dialog open={open} classes={{ paper: classes.paper }}>\r\n <IconButton className={classes.closeBtn} onClick={onClose}>\r\n <HighlightOffIcon className={classes.closeIcon} />\r\n </IconButton>\r\n {title && (\r\n <DialogTitle\r\n id=\"alert-dialog-title\"\r\n classes={{ root: classes.title }}\r\n disableTypography={true}\r\n >\r\n {t(title)}\r\n </DialogTitle>\r\n )}\r\n <DialogContent classes={{ root: classes.contentRoot }}>\r\n <DialogContentText\r\n id=\"alert-dialog-description\"\r\n classes={{ root: classes.contentTextRoot }}\r\n >\r\n {translate ? t(description) : description}\r\n </DialogContentText>\r\n {warningText && (\r\n <DialogContentText\r\n id=\"alert-dialog-description\"\r\n classes={{ root: classes.contentTextRoot }}\r\n >\r\n {translate ? t(warningText) : warningText}\r\n </DialogContentText>\r\n )}\r\n </DialogContent>\r\n <DialogActions classes={{ root: classes.actionsRoot }}>\r\n {cancellationText && (\r\n <Button\r\n onClick={onCancel}\r\n variant=\"outlined\"\r\n classes={{ root: classes.cancelBtnRoot }}\r\n >\r\n {t(cancellationText)}\r\n </Button>\r\n )}\r\n <Button\r\n onClick={onConfirm}\r\n variant=\"outlined\"\r\n classes={{ root: classes.actionBtnRoot }}\r\n autoFocus\r\n >\r\n {t(confirmationText)}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n\r\nexport default ConfirmationDialog;\r\n","import React, { useState, useCallback, Fragment } from 'react';\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\nimport ConfirmationDialog from 'components/confirmation-dialog/ConfirmationDialog';\r\n\r\nconst ConfirmProvider = ({ children }) => {\r\n const [options, setOptions] = useState({});\r\n const [resolveReject, setResolveReject] = useState([]);\r\n const [resolve, reject] = resolveReject;\r\n\r\n const confirm = useCallback((options = {}) => {\r\n return new Promise((resolve, reject) => {\r\n setOptions(options);\r\n setResolveReject([resolve, reject]);\r\n });\r\n }, []);\r\n\r\n const handleClose = useCallback(() => {\r\n setResolveReject([]);\r\n }, []);\r\n\r\n const handleCancel = useCallback(() => {\r\n reject();\r\n handleClose();\r\n }, [reject, handleClose]);\r\n\r\n const handleConfirm = useCallback(() => {\r\n resolve();\r\n handleClose();\r\n }, [resolve, handleClose]);\r\n\r\n return (\r\n <Fragment>\r\n <ConfirmContext.Provider value={confirm}>\r\n {children}\r\n </ConfirmContext.Provider>\r\n <ConfirmationDialog\r\n open={resolveReject.length === 2}\r\n options={options}\r\n onClose={handleClose}\r\n onCancel={handleCancel}\r\n onConfirm={handleConfirm}\r\n />\r\n </Fragment>\r\n );\r\n};\r\n\r\nexport default ConfirmProvider;\r\n","\r\nimport {\r\n DELETE_ACTIVITY_ADD_ONS,\r\n DELETE_ACTIVITY_MANDATORY_FEES,\r\n DELETE_RELATED_ACCOMMODATIONS,\r\n DELETE_RELATED_ACTIVITIES,\r\n DELETE_INTEGRATIONS,\r\n CLEAR_DELETED_FIELDS\r\n} from 'constants/activityAndAccommodationActionTypes';\r\n\r\nconst initialState = {\r\n deletedAddOns: [],\r\n deletedMandatoryFees: [],\r\n deletedRelatedAccommodations: [],\r\n deletedRelatedActivities: [],\r\n deletedIntegrations: []\r\n};\r\n\r\nconst activityReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case CLEAR_DELETED_FIELDS: {\r\n return {\r\n ...state,\r\n deletedAddOns: [],\r\n deletedMandatoryFees: [],\r\n deletedRelatedAccommodations: [],\r\n deletedRelatedActivities: [],\r\n deletedIntegrations: []\r\n };\r\n }\r\n case DELETE_ACTIVITY_ADD_ONS: {\r\n return {\r\n ...state,\r\n deletedAddOns: [\r\n ...new Set(state.deletedAddOns.concat(parseInt(action.id)))\r\n ]\r\n };\r\n }\r\n case DELETE_ACTIVITY_MANDATORY_FEES: {\r\n return {\r\n ...state,\r\n deletedMandatoryFees: [\r\n ...new Set(state.deletedMandatoryFees.concat(parseInt(action.id)))\r\n ]\r\n };\r\n }\r\n case DELETE_RELATED_ACCOMMODATIONS: {\r\n return {\r\n ...state,\r\n deletedRelatedAccommodations: [\r\n ...new Set(\r\n state.deletedRelatedAccommodations.concat(parseInt(action.id))\r\n )\r\n ]\r\n };\r\n }\r\n case DELETE_RELATED_ACTIVITIES: {\r\n return {\r\n ...state,\r\n deletedRelatedActivities: [\r\n ...new Set(state.deletedRelatedActivities.concat(parseInt(action.id)))\r\n ]\r\n };\r\n }\r\n case DELETE_INTEGRATIONS: {\r\n return {\r\n ...state,\r\n deletedIntegrations: [\r\n ...new Set(state.deletedIntegrations.concat(parseInt(action.id)))\r\n ]\r\n };\r\n }\r\n default: {\r\n return {\r\n ...state\r\n };\r\n }\r\n }\r\n};\r\n\r\nexport default activityReducer;\r\n","const DELETE_ACTIVITY_ADD_ONS = 'DELETE_ADD_ONS';\r\nconst DELETE_ACTIVITY_MANDATORY_FEES = 'DELETE_MANDATORY_FEES';\r\nconst DELETE_RELATED_ACCOMMODATIONS = 'DELETE_RELATED_ACCOMMODATIONS';\r\nconst DELETE_RELATED_ACTIVITIES = 'DELETE_RELATED_ACTIVITIES';\r\nconst DELETE_INTEGRATIONS = 'DELETE_INTEGRATIONS';\r\nconst CLEAR_DELETED_FIELDS = 'CLEAR_DELETED_FIELDS';\r\n\r\nexport {\r\n DELETE_ACTIVITY_ADD_ONS,\r\n DELETE_ACTIVITY_MANDATORY_FEES,\r\n DELETE_RELATED_ACCOMMODATIONS,\r\n DELETE_RELATED_ACTIVITIES,\r\n DELETE_INTEGRATIONS,\r\n CLEAR_DELETED_FIELDS\r\n};\r\n","export const AVAILABLE_PAYMENT_SYSTEMS = ['PayPal', 'Stripe', 'Pay on arrival'];\r\nexport const DELETE_PAYMENT_INFO = 'DELETE_PAYMENT_INFO';\r\nexport const DELETE_INTEGRATION_SETTINGS = 'DELETE_INTEGRATION_SETTINGS';\r\nexport const RESET_DELETED_INTEGRATION_SETTINGS =\r\n 'RESET_DELETED_INTEGRATION_SETTINGS';\r\nexport const DELETE_TREKKSOFT_CATEGORIES = 'DELETE_TREKKSOFT_CATEGORIES';\r\nexport const PAY_ON_ARRIVAL = 'Pay on arrival';\r\nexport const PAY_PAL_SYSTEM = 'PayPal';\r\nexport const STRIPE_SYSTEM = 'Stripe';\r\nexport const TREKKSOFT = 'Trekksoft';\r\nexport const EXPEDIA = 'Expedia';\r\nexport const BOOKING = 'BOOKING';\r\n","import {\r\n DELETE_PAYMENT_INFO,\r\n DELETE_INTEGRATION_SETTINGS,\r\n DELETE_TREKKSOFT_CATEGORIES,\r\n RESET_DELETED_INTEGRATION_SETTINGS\r\n} from 'constants/userSettings';\r\n\r\nconst initialState = {\r\n deletedPaymentsSettings: [],\r\n deletedIntegrationsSettings: [],\r\n deletedTrekksoftCategories: []\r\n};\r\n\r\nconst userSettingsReducer = (state = initialState, action) => {\r\n if (action.type === DELETE_PAYMENT_INFO) {\r\n {\r\n return {\r\n ...state,\r\n deletedPaymentsSettings: [\r\n ...new Set(\r\n state.deletedPaymentsSettings.concat({\r\n id: action.id,\r\n paymentSystem: action.paymentSystem\r\n })\r\n )\r\n ]\r\n };\r\n }\r\n } else if (action.type === DELETE_INTEGRATION_SETTINGS) {\r\n {\r\n return {\r\n ...state,\r\n deletedIntegrationsSettings: [\r\n ...new Set(\r\n state.deletedIntegrationsSettings.concat({\r\n id: action.id,\r\n integrationPlatform: action.integrationPlatform\r\n })\r\n )\r\n ]\r\n };\r\n }\r\n } else if (action.type === RESET_DELETED_INTEGRATION_SETTINGS) {\r\n return {\r\n ...state,\r\n deletedIntegrationsSettings: []\r\n };\r\n } else if (action.type === DELETE_TREKKSOFT_CATEGORIES) {\r\n return {\r\n ...state,\r\n deletedTrekksoftCategories: [\r\n ...new Set(state.deletedTrekksoftCategories.concat(action.id))\r\n ]\r\n };\r\n } else {\r\n return {\r\n ...state\r\n };\r\n }\r\n};\r\n\r\nexport default userSettingsReducer;\r\n","import {\r\n SET_AVAILABLE_BUSINESS_OWNERS,\r\n SET_BUSINESS_OWNER\r\n} from 'constants/businessOwner';\r\n\r\nconst initialState = {\r\n selectedBusinessOwner: {},\r\n availableBusinessOwners: []\r\n};\r\n\r\nconst businessOwnerReducer = (state = initialState, action) => {\r\n if (action.type === SET_BUSINESS_OWNER) {\r\n {\r\n return { ...state, selectedBusinessOwner: action.businessOwner };\r\n }\r\n } else if (action.type === SET_AVAILABLE_BUSINESS_OWNERS) {\r\n return { ...state, availableBusinessOwners: action.businessOwners };\r\n }\r\n\r\n return state;\r\n};\r\n\r\nexport default businessOwnerReducer;\r\n","const SET_BUSINESS_OWNER = 'SET_BUSINESS_OWNER';\r\nconst SET_AVAILABLE_BUSINESS_OWNERS = 'SET_AVAILABLE_BUSINESS_OWNERS';\r\n\r\nexport { SET_BUSINESS_OWNER, SET_AVAILABLE_BUSINESS_OWNERS };\r\n","import { combineReducers } from 'redux';\r\nimport { reducer as formReducer } from 'redux-form';\r\n\r\nimport activityAndAccommodationReducer from 'reducers/activityAndAccommodation';\r\nimport userSettingsReducer from 'reducers/userSettings';\r\nimport businessOwnerReducer from './businessOwner';\r\n\r\nconst rootReducer = combineReducers({\r\n form: formReducer,\r\n activityAndAccommodation: activityAndAccommodationReducer,\r\n userSettings: userSettingsReducer,\r\n businessOwner: businessOwnerReducer\r\n});\r\n\r\nexport default rootReducer;\r\n","/*\r\n * PROD\r\n * */\r\nconst PROD_DOMAIN = 'https://app.bifrostbooking.no/';\r\nconst PROD_API = 'https://api.bifrostbooking.no/graphql/';\r\nconst PROD_WIDGET_CSS_LINK =\r\n 'https://horn-prod-front-end.s3.amazonaws.com/widget/static/css/main.min.css';\r\nconst PROD_WIDGET_JS_LINK =\r\n 'https://horn-prod-front-end.s3.amazonaws.com/widget/static/js/bundle.min.js';\r\nconst PROD_WIDGET_LINK =\r\n 'https://horn-prod-front-end.s3.amazonaws.com/hornWidget.js';\r\n\r\n/*\r\n * STAGE\r\n * */\r\nconst STAGE_DOMAIN = 'https://stage.bifrostbooking.no/';\r\nconst STAGE_API = 'https://api-stage.bifrostbooking.no/graphql/';\r\nconst STAGE_WIDGET_CSS_LINK =\r\n 'https://horn-fron-end.s3.amazonaws.com/widget/static/css/main.min.css';\r\nconst STAGE_WIDGET_JS_LINK =\r\n 'https://horn-fron-end.s3.amazonaws.com/widget/static/js/bundle.min.js';\r\nconst STAGE_WIDGET_LINK =\r\n 'https://horn-fron-end.s3.amazonaws.com/hornWidget.js';\r\n\r\n/*\r\n * LOCAL\r\n * */\r\nconst LOCAL_DOMAIN = 'http://localhost:3000/';\r\n// const LOCAL_API = 'http://localhost:8000/graphql/';\r\n\r\n/*\r\n * GENERAL\r\n * */\r\nlet URI = STAGE_API;\r\nlet DOMAIN = LOCAL_DOMAIN;\r\nlet WIDGET_JS_LINK = STAGE_WIDGET_JS_LINK;\r\nlet WIDGET_CSS_LINK = STAGE_WIDGET_CSS_LINK;\r\nlet WIDGET_LINK = STAGE_WIDGET_LINK;\r\n\r\nif (process.env.NODE_ENV === 'production') {\r\n if (process.env.REACT_APP_IS_STAGE_BUILD) {\r\n URI = STAGE_API;\r\n DOMAIN = STAGE_DOMAIN;\r\n WIDGET_JS_LINK = STAGE_WIDGET_JS_LINK;\r\n WIDGET_CSS_LINK = STAGE_WIDGET_CSS_LINK;\r\n WIDGET_LINK = STAGE_WIDGET_LINK;\r\n } else {\r\n URI = PROD_API;\r\n DOMAIN = PROD_DOMAIN;\r\n WIDGET_JS_LINK = PROD_WIDGET_JS_LINK;\r\n WIDGET_CSS_LINK = PROD_WIDGET_CSS_LINK;\r\n WIDGET_LINK = PROD_WIDGET_LINK;\r\n }\r\n}\r\n\r\nexport { URI, DOMAIN, WIDGET_JS_LINK, WIDGET_CSS_LINK, WIDGET_LINK };\r\n","import React from 'react';\r\nimport Cookies from 'js-cookie';\r\nimport { Redirect, Route } from 'react-router-dom';\r\n\r\n// Don't work on staging\r\n// const PrivateRoute = ({ component: Component, ...rest }) => (\r\n// <Route\r\n// {...rest}\r\n// children={''}\r\n// render={props =>\r\n// Cookies.get('csrftoken') ? (\r\n// <Component {...props}>{rest.children}</Component>\r\n// ) : (\r\n// <Redirect\r\n// to={{ pathname: '/login', state: { from: props.location } }}\r\n// />\r\n// )\r\n// }\r\n// />\r\n// );\r\n\r\nconst PrivateRoute = ({ component: Component, ...rest }) => (\r\n <Route\r\n {...rest}\r\n children={''}\r\n render={props => <Component {...props}>{rest.children}</Component>}\r\n />\r\n);\r\n\r\nexport default PrivateRoute;\r\n","import { makeStyles,theme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles( theme=> ({\r\n root: {\r\n background: '#335267',\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n flexDirection: 'column',\r\n }\r\n },\r\n authBox: {\r\n width: 800,\r\n borderRadius: 3,\r\n height: 460,\r\n backgroundColor: '#fff',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '90%',\r\n flexDirection: 'column',\r\n }\r\n },\r\n header: {\r\n width: '100%',\r\n height: 40\r\n },\r\n content: {\r\n display: 'flex',\r\n marginBottom: 16,\r\n \r\n },\r\n imageWrapper: {\r\n width: 400,\r\n height: 380,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '1%'\r\n }\r\n },\r\n image: {\r\n width: '400px',\r\n height: '380px',\r\n marginLeft: '45px',\r\n [theme.breakpoints.down('sm')]:{\r\n display: 'none'\r\n }\r\n },\r\n contentMain: {\r\n width: '100%',\r\n padding: '0 50px',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n \r\n }\r\n },\r\n footer: {\r\n backgroundColor: '#E2EBF6',\r\n height: 24,\r\n color: '#59758B',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n borderBottomRightRadius: 3,\r\n borderBottomLeftRadius: 3,\r\n [theme.breakpoints.down('sm')]:{\r\n height: 34,\r\n textAlign: 'center'\r\n }\r\n }\r\n}));\r\n\r\n","import React from 'react';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { Logo } from 'components';\r\nimport AuthBoxImage from 'assets/Forsidebilde_BifrostBooking.svg';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst AuthLayout = ({ children }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={classes.root}>\r\n <div className={classes.authBox}>\r\n <div className={classes.header}>\r\n <Logo />\r\n </div>\r\n <div className={classes.content}>\r\n <div className={classes.imageWrapper}>\r\n <img src={AuthBoxImage} className={classes.image} alt=\"Logo\" />\r\n </div>\r\n <div className={classes.contentMain}>{children}</div>\r\n </div>\r\n <div className={classes.footer}>\r\n <Typography variant=\"body2\">\r\n If you need any help, contact us at <b>post@bifrostbooking.no</b>\r\n </Typography>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default AuthLayout;\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nimport LogoImage from 'assets/logo-dark@2x.png';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n display: 'flex',\r\n height: '100%'\r\n },\r\n image: {\r\n height: 'calc(100% - 4px)',\r\n }\r\n});\r\n\r\nconst Logo = ({ className }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={classNames(classes.root, className)}>\r\n <img src={LogoImage} className={classes.image} alt=\"Logo\" />\r\n </div>\r\n );\r\n};\r\n\r\nexport default Logo;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n loaderWrapper: {\r\n zIndex: '1101',\r\n top: '0',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: 'rgba(142, 144, 145, 0.5)',\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%'\r\n },\r\n loaderItem: {\r\n color: theme.baseUI.color\r\n }\r\n}));\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst CircularLoader = ({ isLoading, className, loaderClassName }) => {\r\n const classes = useStyles();\r\n\r\n if (isLoading) {\r\n return (\r\n <div className={classNames(classes.loaderWrapper, className)}>\r\n <CircularProgress\r\n disableShrink\r\n classes={{ root: classNames(classes.loaderItem, loaderClassName) }}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport default CircularLoader;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%'\r\n },\r\n label: {\r\n marginBottom: '6px',\r\n color: '#071B27',\r\n textTransform: 'uppercase',\r\n fontSize: '10px',\r\n lineHeight: '12px',\r\n letterSpacing: '0.035em'\r\n },\r\n inputRoot: {\r\n borderRadius: '3px',\r\n border: '1px solid #BECEDA',\r\n '&:hover': {\r\n border: `1px solid ${theme.baseUI.color}`\r\n }\r\n },\r\n inputCheckbox: {\r\n width: '40px',\r\n paddingBottom: '13px'\r\n },\r\n inputRootFocused: {\r\n boxShadow: `0 0 3px 0.5px ${theme.baseUI.color}`,\r\n border: `1px solid ${theme.baseUI.color}`\r\n },\r\n error: {\r\n boxShadow: 'none',\r\n border: '1px solid #EB5757',\r\n '&:hover': {\r\n border: '1px solid #EB5757'\r\n }\r\n },\r\n input: {\r\n padding: '9px 10px',\r\n fontSize: '13px',\r\n lineHeight: '18px'\r\n },\r\n disabledInput: {\r\n backgroundColor: '#e2ebf6',\r\n color: '#59758b'\r\n },\r\n disabledLabel: {\r\n color: '#071B27 !important'\r\n }\r\n}));\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nimport InputBase from '@material-ui/core/InputBase';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst SimpleInput = props => {\r\n const {\r\n input,\r\n label,\r\n className,\r\n errors,\r\n errorText,\r\n style,\r\n ...otherProps\r\n } = props;\r\n\r\n const classes = useStyles();\r\n\r\n const showErrors = !!errors.length;\r\n\r\n return (\r\n <div className={classNames(classes.root, className)} style={style}>\r\n <InputLabel\r\n className={classes.label}\r\n htmlFor={`${label}-input`}\r\n disabled={otherProps.disabled}\r\n classes={{\r\n disabled: classes.disabledLabel\r\n }}\r\n >\r\n {label}\r\n </InputLabel>\r\n <InputBase\r\n classes={{\r\n root: classNames(classes.inputRoot, { [classes.error]: showErrors }),\r\n focused: classNames({ [classes.inputRootFocused]: !showErrors }),\r\n input: classes.input,\r\n disabled: classes.disabledInput\r\n }}\r\n id={`${label}-input`}\r\n {...otherProps}\r\n />\r\n {errorText && <FormHelperText error>{errorText}</FormHelperText>}\r\n </div>\r\n );\r\n};\r\n\r\nexport default SimpleInput;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\n\r\nimport InputBase from '@material-ui/core/InputBase';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst Input = props => {\r\n const {\r\n input,\r\n label,\r\n isHiddenErrorMsg,\r\n maxLength,\r\n isOnlyNumber,\r\n isPhoneNumber,\r\n className,\r\n labelClass,\r\n inputClass,\r\n mask,\r\n placeholder,\r\n meta: { touched, error, submitFailed },\r\n ...otherProps\r\n } = props;\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const onChangeHandler = e => {\r\n const { value } = e.target;\r\n\r\n if (isPhoneNumber && value) {\r\n const reg = /^[0-9+ ]*$/;\r\n if (\r\n !reg.test(value) &&\r\n (value.length > 1 || (value.length === 1 && value[0] !== '+'))\r\n ) {\r\n return;\r\n }\r\n } else if (isOnlyNumber) {\r\n input.onChange(value.replace(/\\D/g, ''));\r\n return;\r\n }\r\n\r\n input.onChange(value);\r\n };\r\n\r\n return (\r\n <div className={classNames(classes.root, className)}>\r\n {label && (\r\n <InputLabel\r\n className={classNames(classes.label, labelClass)}\r\n htmlFor={`${label}-input`}\r\n disabled={otherProps.disabled}\r\n classes={{\r\n disabled: classes.disabledLabel\r\n }}\r\n >\r\n {t(label)}\r\n </InputLabel>\r\n )}\r\n <InputBase\r\n classes={{\r\n root: classNames(\r\n classes.inputRoot,\r\n {\r\n [classes.error]:\r\n (submitFailed || (touched && !isHiddenErrorMsg)) && error\r\n },\r\n inputClass\r\n ),\r\n focused: classes.inputRootFocused,\r\n input: classes.input,\r\n disabled: classes.disabledInput\r\n }}\r\n inputProps={{\r\n mask: mask,\r\n maxLength: isOnlyNumber ? maxLength : 255\r\n }}\r\n id={`${label}-input`}\r\n placeholder={t(placeholder)}\r\n {...input}\r\n {...otherProps}\r\n onChange={onChangeHandler}\r\n />\r\n {!isHiddenErrorMsg && (touched || submitFailed) && error && (\r\n <FormHelperText error>{t(error)}</FormHelperText>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default Input;\r\n","import { ENGLISH_TRANSLATIONS } from './English';\r\nimport { NORWEGIAN_TRANSLATIONS } from './Norwegian';\r\n\r\nexport const TRANSLATIONS = {\r\n English: ENGLISH_TRANSLATIONS,\r\n Norwegian: NORWEGIAN_TRANSLATIONS\r\n};\r\n","export const ENGLISH_TRANSLATIONS = {\r\n title: 'Title',\r\n description: 'Description',\r\n titleAndDescription: 'Title and description',\r\n overview: 'Overview',\r\n generalInfo: 'General info',\r\n whatToBring: 'What to bring',\r\n additionalInfo: 'Additional info',\r\n cancellation: 'Cancellation / Expiration',\r\n included: 'Included',\r\n notIncluded: 'Not included',\r\n bedDetails: 'Bed details',\r\n fee: 'Fee',\r\n\r\n titleIsRequired: 'Title is required',\r\n overviewIsRequired: 'Overview is required',\r\n cancellationIsRequired: 'Cancellation / Expiration is required',\r\n cancellationHelpMessage: `Here you need to fill in your cancellation policy and expire of the pass if that is applicable. Example “You can cancel up to 48 hours before the booked date for free, all trips canceled later is nonrefundableâ€.`,\r\n includedHelpMessage: `Hit enter for each item. Note, that if you type the text but don't hit enter, the item will not be saved.`,\r\n 'Hit Enter to add an item': 'Hit Enter to add an item'\r\n};\r\n","export const NORWEGIAN_TRANSLATIONS = {\r\n title: 'Tittel',\r\n description: 'Beskrivelse',\r\n titleAndDescription: 'Overskrift og beskrivelse',\r\n overview: 'Oversikt',\r\n generalInfo: 'Generell info',\r\n whatToBring: 'Hva bør man ha med',\r\n additionalInfo: 'Tilleggsinformasjon',\r\n cancellation: 'Avbestillingsbetingelser',\r\n included: 'Inkludert',\r\n notIncluded: 'Ikke inkuldert',\r\n bedDetails: 'Sengetype',\r\n fee: 'Gebyrer',\r\n\r\n titleIsRequired: 'Tittel er pÃ¥krevd',\r\n overviewIsRequired: 'Oversikt er pÃ¥krevd',\r\n cancellationIsRequired: 'Avbestillingsbetingelser er pÃ¥krevd',\r\n cancellationHelpMessage: `Her mÃ¥ du fylle ut vilkÃ¥rene for kansellering, og eventuell varighet for en \r\n pass-aktivitet. For eksempel: \"Du kan kansellere gratis opp til 48 timer før aktivitetens tidspunkt, alle \r\n andre kanselleringer er ikke refunderbare\".`,\r\n includedHelpMessage: `Trykk pÃ¥ enter for hvert element. Merk at hvis du skriver inn teksten, \r\n men ikke trykker pÃ¥ enter, vil ikke elementet bli lagret.`,\r\n 'Hit Enter to add an item': 'Trykk Enter for Ã¥ legge til et element'\r\n};\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%'\r\n },\r\n label: {\r\n marginBottom: '6px',\r\n color: '#071B27',\r\n textTransform: 'uppercase',\r\n fontSize: '10px',\r\n lineHeight: '12px',\r\n letterSpacing: '0.035em'\r\n },\r\n textarea: {\r\n resize: 'vertical',\r\n outline: 'none',\r\n boxShadow: 'none',\r\n padding: '9px 10px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n minHeight: '58px',\r\n maxHeight: '200px',\r\n borderRadius: '3px',\r\n border: '1px solid #BECEDA',\r\n '&:hover': {\r\n border: '1px solid #41B7D7'\r\n },\r\n '&::placeholder': {\r\n color: '#A2A2A2'\r\n },\r\n '&:focus': {\r\n boxShadow: '0 0 3px 3px rgba(65, 183, 215, 0.35)',\r\n border: '1px solid #41B7D7'\r\n }\r\n },\r\n error: {\r\n border: '1px solid #EB5757',\r\n '&:hover': {\r\n border: '1px solid #EB5757'\r\n },\r\n '&:focus': {\r\n boxShadow: 'none',\r\n border: '1px solid #EB5757'\r\n }\r\n },\r\n autoSizeTextarea: {\r\n maxHeight: 'none'\r\n }\r\n});\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport TextareaAutosize from '@material-ui/core/TextareaAutosize';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport { TRANSLATIONS } from 'translations/index';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst TextareaInput = ({\r\n input,\r\n label,\r\n isTranslateError,\r\n language,\r\n className,\r\n placeholder,\r\n isAutosize,\r\n meta: { touched, error },\r\n ...otherProps\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classNames(classes.root, className)}>\r\n <InputLabel className={classes.label} htmlFor={`${label}-input`}>\r\n {typeof label === 'string' ? t(label) : label}\r\n </InputLabel>\r\n\r\n <TextareaAutosize\r\n id={`${label}-input`}\r\n placeholder={t(placeholder)}\r\n className={classNames(classes.textarea, {\r\n [classes.error]: touched && error,\r\n [classes.autoSizeTextarea]: isAutosize\r\n })}\r\n rowsMax={4}\r\n {...input}\r\n {...otherProps}\r\n />\r\n\r\n {touched && error && (\r\n <FormHelperText error>\r\n {isTranslateError ? t(TRANSLATIONS[language][error]) : t(error)}\r\n </FormHelperText>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default TextareaInput;\r\n","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n resetPasswordLink: {\r\n display: 'flex',\r\n width: '100%',\r\n color: '#748CA0',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n textAlign: 'center',\r\n '&:before': {\r\n content: '\"\"',\r\n borderTop: '1px solid #BECEDA',\r\n margin: '0 15px 0 0',\r\n flex: '1 0 15px'\r\n },\r\n '&:after': {\r\n content: '\"\"',\r\n borderTop: '1px solid #BECEDA',\r\n margin: '0 0 0 15px',\r\n flex: '1 0 15px'\r\n }\r\n }\r\n});\r\n\r\nconst LineOnSidesLink = ({ path, children }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <Link to={path}>\r\n <Typography className={classes.resetPasswordLink} variant=\"body1\">\r\n {children}\r\n </Typography>\r\n </Link>\r\n );\r\n};\r\n\r\nexport default LineOnSidesLink;\r\n","import gql from 'graphql-tag';\r\n\r\nexport const SIGNIN_MUTATION = gql`\r\n mutation signIn($email: String!, $password: String!) {\r\n signIn(email: $email, password: $password) {\r\n id\r\n email\r\n firstName\r\n lastName\r\n isSuperUser\r\n }\r\n }\r\n`;\r\n\r\nexport const RESET_PASSWORD_MUTATION = gql`\r\n mutation sendResetEmail($email: String!) {\r\n sendResetEmail(email: $email) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const LOG_OUT = gql`\r\n mutation logOut {\r\n logOut {\r\n ok\r\n }\r\n }\r\n`;\r\n","import gql from 'graphql-tag';\r\n\r\nexport const UPDATE_BUSINESS_OWNER = gql`\r\n mutation updateBusinessOwner(\r\n $id: Int!\r\n $password: String!\r\n $token: String!\r\n $isResetPassword: Boolean\r\n $isConfirmPassword: Boolean\r\n ) {\r\n updateBusinessOwner(\r\n id: $id\r\n password: $password\r\n token: $token\r\n isResetPassword: $isResetPassword\r\n isConfirmPassword: $isConfirmPassword\r\n ) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const CREATE_BUSINESS_OWNER = gql`\r\n mutation createBusinessOwner($businessOwner: BusinessOwnerInput) {\r\n createBusinessOwner(businessOwner: $businessOwner) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const DELETE_BUSINESS_OWNER = gql`\r\n mutation deleteBusinessOwner($businessOwnerId: Int!) {\r\n deleteBusinessOwner(businessOwnerId: $businessOwnerId) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_BUSINESS_OWNER_USER = gql`\r\n mutation updateBusinessOwnerUser($businessOwner: BusinessOwnerInput) {\r\n updateBusinessOwnerUser(businessOwner: $businessOwner) {\r\n id\r\n }\r\n }\r\n`;\r\n","import gql from 'graphql-tag';\r\n\r\nexport const CURRENT_BUSINESS_OWNER_INFO = gql`\r\n {\r\n currentBusinessOwner {\r\n id\r\n }\r\n googleAnalyticsSettings {\r\n id\r\n googleAnalyticsId\r\n }\r\n }\r\n`;\r\n\r\nexport const BUSINESS_OWNER = gql`\r\n {\r\n currentBusinessOwner {\r\n id\r\n email\r\n firstName\r\n lastName\r\n isSuperuser\r\n referencePrefix\r\n companyName\r\n phoneNumber\r\n isNotify\r\n userType\r\n ownerId\r\n }\r\n businessOwners {\r\n id\r\n email\r\n firstName\r\n lastName\r\n referencePrefix\r\n companyName\r\n phoneNumber\r\n isNotify\r\n userType\r\n ownerId\r\n }\r\n }\r\n`;\r\n\r\nexport const EXISTING_BUSINESS_OWNERS = gql`\r\n query businessOwners($page: Int) {\r\n businessOwners(page: $page, numberOfOwnersPerPage: 11) {\r\n id\r\n email\r\n firstName\r\n lastName\r\n referencePrefix\r\n isNotify\r\n companyName\r\n phoneNumber\r\n userType\r\n ownerId\r\n }\r\n numberOfOwnersPages(numberOfOwnersPerPage: 11)\r\n businessOwnersOverview {\r\n total\r\n }\r\n }\r\n`;\r\n","import {\r\n SET_BUSINESS_OWNER,\r\n SET_AVAILABLE_BUSINESS_OWNERS\r\n} from 'constants/businessOwner';\r\n\r\nexport const setCurrentBusinessOwner = businessOwner => {\r\n return { type: SET_BUSINESS_OWNER, businessOwner };\r\n};\r\n\r\nexport const setAvailableBusinessOwners = businessOwners => {\r\n return { type: SET_AVAILABLE_BUSINESS_OWNERS, businessOwners };\r\n};\r\n","const LOCALES_OBJ = {\r\n English: 'en',\r\n Norway: 'nb'\r\n};\r\n\r\nconst PAYPAL_LOCALES_OBJ = {\r\n English: 'en_US',\r\n Norway: 'no_NO'\r\n};\r\n\r\nconst INTEGRATIONS_CONSTANTS = {\r\n Trekksoft: 'TREKKSOFT',\r\n 'Booking.com': 'BOOKING',\r\n Expedia: 'EXPEDIA',\r\n Airbnb: 'AIRBNB',\r\n Citybreak: 'CITYBREAK',\r\n TripAdvisor: 'TRIPADVISOR'\r\n};\r\n\r\nconst INTEGRATIONS_NAMES = {\r\n TREKKSOFT: 'Trekksoft',\r\n BOOKING: 'BOOKING',\r\n EXPEDIA: 'Expedia',\r\n AIRBNB: 'Airbnb',\r\n CITYBREAK: 'Citybreak',\r\n TRIPADVISOR: 'TripAdvisor'\r\n};\r\n\r\nconst WEEK_DAYS = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\r\n\r\nconst USER_TYPE = {\r\n employee: 'EMPLOYEE',\r\n owner: 'OWNER'\r\n};\r\n\r\nexport {\r\n LOCALES_OBJ,\r\n PAYPAL_LOCALES_OBJ,\r\n INTEGRATIONS_CONSTANTS,\r\n INTEGRATIONS_NAMES,\r\n WEEK_DAYS,\r\n USER_TYPE\r\n};\r\n","import { makeStyles, useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n header: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n flex: '0 1 auto',\r\n height: 52,\r\n backgroundColor: '#fff',\r\n justifyContent: 'space-between',\r\n boxShadow: '0px 1px 0px #E2EBF6'\r\n },\r\n leftSection: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n logo: {\r\n height: 'calc(80% - 4px)',\r\n marginTop: '8px'\r\n },\r\n navigation: {\r\n display: 'flex'\r\n },\r\n drawerNavigation: {\r\n width: 250,\r\n padding: theme.spacing(2)\r\n },\r\n navigationItems: {\r\n padding: '0 0 0 16px',\r\n listStyle: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n alignItems: 'flex-start'\r\n }\r\n },\r\n navigationItem: {\r\n fontSize: '13px',\r\n cursor: 'pointer',\r\n '&:not(:last-child)': {\r\n marginRight: 25\r\n },\r\n wordWrap: 'break-word',\r\n whiteSpace: 'nowrap',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '0 0 10px 0'\r\n }\r\n },\r\n navigationItemLink: {\r\n display: 'inline-block',\r\n color: '#335267'\r\n },\r\n activeNavigationLink: {\r\n color: '#071B27',\r\n fontWeight: 'bold'\r\n },\r\n headerActions: {\r\n display: 'flex',\r\n right: 0,\r\n alignItems: 'center',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n alignItems: 'flex-start'\r\n }\r\n },\r\n createNewBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '0 0 10px 14px'\r\n }\r\n },\r\n btnTitle: {\r\n paddingRight: '10px',\r\n color: '#0E8BB4'\r\n },\r\n createNewIcon: {\r\n fill: '#0E8BB4',\r\n width: '19px',\r\n height: '19px',\r\n marginRight: '5px'\r\n },\r\n btnActionWrapper: {\r\n display: 'flex',\r\n borderRight: '1px solid #E2EBF6',\r\n width: '120px',\r\n height: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n border: 'none'\r\n }\r\n },\r\n menu: {\r\n boxShadow:\r\n '0px 5px 5px -3px rgba(0,0,0,0.2), 0px 8px 10px 1px rgba(0,0,0,0.14), 0px 3px 14px 2px rgba(0,0,0,0.12)',\r\n position: 'absolute',\r\n top: '5px',\r\n backgroundColor: '#FFF',\r\n width: '165px',\r\n height: '60px'\r\n },\r\n businessOwnerNameWrapper: {\r\n width: '115px',\r\n display: 'flex',\r\n borderRight: '1px solid #E2EBF6',\r\n justifyContent: 'center'\r\n },\r\n languageSelectorWrapper: {\r\n width: '100px',\r\n display: 'flex',\r\n borderRight: '1px solid #E2EBF6',\r\n [theme.breakpoints.down('sm')]: {\r\n borderRight: 'none',\r\n padding: '0 0 10px 14px'\r\n }\r\n },\r\n businessOwnerSelectorWrapper: {\r\n width: '-webkit-fill-available',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n padding: '0px 20px',\r\n justifyContent: 'center',\r\n paddingTop: '8px !important',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '0 0 10px 14px'\r\n }\r\n },\r\n businessOwnerSelectorNotifySettings: {\r\n width: '120px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n padding: '0px 10px',\r\n borderRight: '1px solid #E2EBF6',\r\n justifyContent: 'center'\r\n },\r\n logOutBtn: {\r\n width: '100px',\r\n padding: '16px 20px'\r\n },\r\n logOutBtnTitle: {\r\n paddingRight: '10px',\r\n color: '#59758B'\r\n },\r\n businessOwnerName: {\r\n fontWeight: 'bold',\r\n fontSize: '15px'\r\n },\r\n selectedItem: {\r\n backgroundColor: '#E2F5F8 !important'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\nimport { connect } from 'react-redux';\r\nimport { Link, useHistory, useRouteMatch } from 'react-router-dom';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\r\nimport Menu from '@material-ui/core/Menu';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport MenuIcon from '@material-ui/icons/Menu';\r\nimport Hidden from '@material-ui/core/Hidden';\r\nimport Drawer from '@material-ui/core/Drawer';\r\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\r\n\r\nimport { Logo, SelectDropDown, AutocompleteDropdown } from 'components';\r\nimport { LOG_OUT } from 'graphql/mutations/auth';\r\nimport { UPDATE_BUSINESS_OWNER_USER } from '../../graphql/mutations/business-owner';\r\nimport { BUSINESS_OWNER } from 'graphql/queries/business-owner';\r\nimport {\r\n setAvailableBusinessOwners,\r\n setCurrentBusinessOwner\r\n} from 'actions/businessOwner';\r\n\r\nimport { USER_TYPE } from '../../constants/base';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst getAllCompanies = data => {\r\n return data.map((owner, index) => {\r\n const searchInfo = `${owner.firstName} ${owner.lastName} ${owner.companyName} ${owner.email}\r\n ${owner.phoneNumber} ${owner.referencePrefix} ${owner.isNotify}`;\r\n return {\r\n value: index,\r\n searchInfo: searchInfo,\r\n ...owner\r\n };\r\n });\r\n};\r\n\r\nfunction AppHeader({ className, ...props }) {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n const history = useHistory();\r\n const { businessOwner, setBusinessOwner, setAvailableBusinessOwners } = props;\r\n const [value, setValue] = React.useState(null);\r\n const [isSuperUser, setIsSuperUser] = React.useState(false);\r\n const [isBO, setIsBO] = React.useState(false);\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const [logOut] = useMutation(LOG_OUT);\r\n const [updateBusinessOwner] = useMutation(UPDATE_BUSINESS_OWNER_USER);\r\n const { data, refetch: refetchBO } = useQuery(BUSINESS_OWNER);\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [loading, setLoading] = React.useState(false);\r\n const [drawerOpen, setDrawerOpen] = React.useState(false);\r\n\r\n const selectedLanguage = i18n.language;\r\n const isNotification = !!businessOwner?.selectedBusinessOwner?.isNotify;\r\n const [notifyValue, setNotifyValue] = React.useState(false);\r\n\r\n const onChangeNotif = isNewNotif => {\r\n const newBOData = {\r\n ...businessOwner.selectedBusinessOwner,\r\n isNotify: isNewNotif\r\n };\r\n\r\n setBusinessOwner(newBOData);\r\n const result = data.businessOwners.find(obj => {\r\n return obj.id === newBOData.id;\r\n });\r\n\r\n if (result) {\r\n result.isNotify = isNewNotif;\r\n setAvailableBusinessOwners(data.businessOwners);\r\n }\r\n\r\n delete newBOData.isSuperuser;\r\n delete newBOData.referencePrefix;\r\n delete newBOData.__typename;\r\n\r\n updateBusinessOwner({\r\n variables: { businessOwner: newBOData }\r\n }).then(async () => {\r\n await refetchBO();\r\n setNotifyValue(isNewNotif);\r\n setLoading(true);\r\n enqueueSnackbar(t('Business owner was successfully updated!'), {\r\n variant: 'success'\r\n });\r\n });\r\n };\r\n\r\n const changeLanguage = languageValue => {\r\n localStorage.setItem('language', languageValue);\r\n i18n.changeLanguage(languageValue);\r\n };\r\n const changeBusinessOwner = newValue => {\r\n const selectedbusinessOw = businessOwner.availableBusinessOwners[newValue];\r\n localStorage.setItem(\r\n 'selectedBusinessOwner',\r\n JSON.stringify(selectedbusinessOw)\r\n );\r\n setValue(newValue);\r\n const selectedBO = businessOwner.availableBusinessOwners[newValue];\r\n setNotifyValue(selectedBO.isNotify);\r\n setBusinessOwner({\r\n ...selectedBO\r\n });\r\n };\r\n\r\n const handleOpenMenu = event => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n React.useEffect(() => {\r\n setBusinessOwnerFromStorage(businessOwner.availableBusinessOwners);\r\n }, []);\r\n\r\n const setBusinessOwnerFromStorage = listOfBusinessOwners => {\r\n let selectedBusinessOwner = localStorage.getItem('selectedBusinessOwner');\r\n if (selectedBusinessOwner) {\r\n selectedBusinessOwner = JSON.parse(selectedBusinessOwner);\r\n const businessOwnerIndex = listOfBusinessOwners.findIndex(\r\n item => item.id === `${selectedBusinessOwner.id}`\r\n );\r\n if (businessOwnerIndex >= 0) {\r\n setValue(parseInt(businessOwnerIndex));\r\n const selectedBusinessOw = listOfBusinessOwners[businessOwnerIndex];\r\n setNotifyValue(selectedBusinessOw.isNotify);\r\n setBusinessOwner({ ...listOfBusinessOwners[businessOwnerIndex] });\r\n }\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n if (data) {\r\n if (data.currentBusinessOwner.isSuperuser) {\r\n setBusinessOwnerFromStorage(data.businessOwners);\r\n setIsBO(true);\r\n setIsSuperUser(true);\r\n setAvailableBusinessOwners(data.businessOwners);\r\n } else {\r\n setIsBO(data.currentBusinessOwner.userType !== USER_TYPE.employee);\r\n setIsSuperUser(false);\r\n setBusinessOwner(data.currentBusinessOwner);\r\n }\r\n }\r\n }, [data]);\r\n\r\n return (\r\n <AppBar className={classNames(classes.header, className)} position=\"static\">\r\n <Hidden mdUp>\r\n <IconButton aria-label=\"menu\" onClick={() => setDrawerOpen(true)}>\r\n <MenuIcon />\r\n </IconButton>\r\n </Hidden>\r\n <Logo className={classes.logo} />\r\n <Hidden smDown>\r\n <nav className={classes.navigation}>\r\n <ul className={classes.navigationItems}>\r\n <MenuLink\r\n to=\"/\"\r\n label={`${t('Overview')}`}\r\n activeOnlyWhenExact={true}\r\n />\r\n <MenuLink to=\"/bookings-list\" label={`${t('Bookings')}`} />\r\n <MenuLink\r\n to=\"/accommodations-and-activities\"\r\n label={`${t('Accommodations & Activities')}`}\r\n />\r\n <MenuLink to=\"/statistics\" label={`${t('Statistics')}`} />\r\n <MenuLink to=\"/widget-settings\" label={`${t('Widget')}`} />\r\n <MenuLink to=\"/settings\" label={`${t('Settings')}`} />\r\n {data && isSuperUser && (\r\n <MenuLink\r\n to=\"/business-owners\"\r\n label={`${t('Business owners')}`}\r\n />\r\n )}\r\n {data && isBO && <MenuLink to=\"/users\" label={`${t('Users')}`} />}\r\n </ul>\r\n </nav>\r\n <div className={classes.headerActions}>\r\n <div className={classes.btnActionWrapper}>\r\n <Button className={classes.createNewBtn} onClick={handleOpenMenu}>\r\n <AddCircleOutlineIcon className={classes.createNewIcon} />\r\n <Typography className={classes.btnTitle}>\r\n {t('Create new')}\r\n </Typography>\r\n </Button>\r\n <Menu\r\n id=\"simple-menu\"\r\n anchorEl={anchorEl}\r\n keepMounted\r\n open={Boolean(anchorEl)}\r\n onClose={handleClose}\r\n >\r\n <MenuItem\r\n selected={\r\n history.location.pathname === '/accommodations/create'\r\n }\r\n classes={{ selected: classes.selectedItem }}\r\n onClick={() => {\r\n history.push('/accommodations/create');\r\n }}\r\n >\r\n {t('Accommodation')}\r\n </MenuItem>\r\n <MenuItem\r\n selected={history.location.pathname === '/activities/create'}\r\n classes={{ selected: classes.selectedItem }}\r\n onClick={() => {\r\n history.push('/activities/create');\r\n }}\r\n >\r\n {t('Activity')}\r\n </MenuItem>\r\n </Menu>\r\n </div>\r\n {data && !isSuperUser && (\r\n <div className={classes.businessOwnerNameWrapper}>\r\n <Typography className={classes.businessOwnerName}>\r\n {businessOwner.selectedBusinessOwner.firstName}{' '}\r\n {businessOwner.selectedBusinessOwner.lastName}\r\n </Typography>\r\n </div>\r\n )}\r\n {data && isSuperUser && (\r\n <div className={classes.businessOwnerSelectorWrapper}>\r\n <Typography className={classes.businessOwnerName}>\r\n {businessOwner.selectedBusinessOwner.firstName}{' '}\r\n {businessOwner.selectedBusinessOwner.lastName}\r\n </Typography>\r\n <AutocompleteDropdown\r\n value={value}\r\n label={'companyName'}\r\n search={'searchInfo'}\r\n onChange={changeBusinessOwner}\r\n items={getAllCompanies(businessOwner.availableBusinessOwners)}\r\n />\r\n </div>\r\n )}\r\n {data && (isBO || isSuperUser) && (\r\n <div className={classes.languageSelectorWrapper}>\r\n <SelectDropDown\r\n value={isNotification}\r\n onChange={onChangeNotif}\r\n items={[\r\n { value: true, label: 'Notify ON' },\r\n { value: false, label: 'Notify OFF' }\r\n ]}\r\n />\r\n </div>\r\n )}\r\n <div className={classes.languageSelectorWrapper}>\r\n <SelectDropDown\r\n value={selectedLanguage}\r\n onChange={changeLanguage}\r\n items={[\r\n { value: 'English', label: 'English' },\r\n { value: 'Norway', label: 'Norwegian' }\r\n ]}\r\n />\r\n </div>\r\n </div>\r\n </Hidden>\r\n <Drawer\r\n anchor=\"left\"\r\n open={drawerOpen}\r\n onClose={() => setDrawerOpen(false)}\r\n >\r\n <div>\r\n <IconButton aria-label=\"menu\" onClick={() => setDrawerOpen(false)}>\r\n <ArrowBackIcon />\r\n </IconButton>\r\n <nav className={classes.navigation}>\r\n <ul className={classes.navigationItems}>\r\n <MenuLink\r\n to=\"/\"\r\n label={`${t('Overview')}`}\r\n activeOnlyWhenExact={true}\r\n />\r\n <MenuLink to=\"/bookings-list\" label={`${t('Bookings')}`} />\r\n <MenuLink\r\n to=\"/accommodations-and-activities\"\r\n label={`${t('Accommodations & Activities')}`}\r\n />\r\n <MenuLink to=\"/statistics\" label={`${t('Statistics')}`} />\r\n <MenuLink to=\"/widget-settings\" label={`${t('Widget')}`} />\r\n <MenuLink to=\"/settings\" label={`${t('Settings')}`} />\r\n {data && isSuperUser && (\r\n <MenuLink\r\n to=\"/business-owners\"\r\n label={`${t('Business owners')}`}\r\n />\r\n )}\r\n {data && isBO && <MenuLink to=\"/users\" label={`${t('Users')}`} />}\r\n </ul>\r\n </nav>\r\n <div className={classes.headerActions}>\r\n <div className={classes.btnActionWrapper}>\r\n <Button className={classes.createNewBtn} onClick={handleOpenMenu}>\r\n <AddCircleOutlineIcon className={classes.createNewIcon} />\r\n <Typography className={classes.btnTitle}>\r\n {t('Create new')}\r\n </Typography>\r\n </Button>\r\n <Menu\r\n id=\"simple-menu\"\r\n anchorEl={anchorEl}\r\n keepMounted\r\n open={Boolean(anchorEl)}\r\n onClose={handleClose}\r\n >\r\n <MenuItem\r\n selected={\r\n history.location.pathname === '/accommodations/create'\r\n }\r\n classes={{ selected: classes.selectedItem }}\r\n onClick={() => {\r\n history.push('/accommodations/create');\r\n }}\r\n >\r\n {t('Accommodation')}\r\n </MenuItem>\r\n <MenuItem\r\n selected={history.location.pathname === '/activities/create'}\r\n classes={{ selected: classes.selectedItem }}\r\n onClick={() => {\r\n history.push('/activities/create');\r\n }}\r\n >\r\n {t('Activity')}\r\n </MenuItem>\r\n </Menu>\r\n </div>\r\n {data && !isSuperUser && (\r\n <div className={classes.businessOwnerNameWrapper}>\r\n <Typography className={classes.businessOwnerName}>\r\n {businessOwner.selectedBusinessOwner.firstName}{' '}\r\n {businessOwner.selectedBusinessOwner.lastName}\r\n </Typography>\r\n </div>\r\n )}\r\n {data && isSuperUser && (\r\n <div className={classes.businessOwnerSelectorWrapper}>\r\n <Typography className={classes.businessOwnerName}>\r\n {businessOwner.selectedBusinessOwner.firstName}{' '}\r\n {businessOwner.selectedBusinessOwner.lastName}\r\n </Typography>\r\n <AutocompleteDropdown\r\n value={value}\r\n label={'companyName'}\r\n search={'searchInfo'}\r\n onChange={changeBusinessOwner}\r\n items={getAllCompanies(businessOwner.availableBusinessOwners)}\r\n />\r\n </div>\r\n )}\r\n {data && (isBO || isSuperUser) && (\r\n <div className={classes.languageSelectorWrapper}>\r\n <SelectDropDown\r\n value={isNotification}\r\n onChange={onChangeNotif}\r\n items={[\r\n { value: true, label: 'Notify ON' },\r\n { value: false, label: 'Notify OFF' }\r\n ]}\r\n />\r\n </div>\r\n )}\r\n <div className={classes.languageSelectorWrapper}>\r\n <SelectDropDown\r\n value={selectedLanguage}\r\n onChange={changeLanguage}\r\n items={[\r\n { value: 'English', label: 'English' },\r\n { value: 'Norway', label: 'Norwegian' }\r\n ]}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </Drawer>\r\n <div>\r\n <Button\r\n className={classes.logOutBtn}\r\n onClick={() =>\r\n logOut().then(() => {\r\n setBusinessOwner({});\r\n setAvailableBusinessOwners([]);\r\n history.push('/login');\r\n })\r\n }\r\n >\r\n <Typography className={classes.logOutBtnTitle}>\r\n {t('Log out')}\r\n </Typography>\r\n </Button>\r\n </div>\r\n </AppBar>\r\n );\r\n}\r\n\r\nfunction MenuLink({ label, to, activeOnlyWhenExact }) {\r\n const match = useRouteMatch({\r\n path: to,\r\n exact: activeOnlyWhenExact\r\n });\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n <li className={classes.navigationItem}>\r\n <Link\r\n className={classNames(classes.navigationItemLink, {\r\n [classes.activeNavigationLink]: match\r\n })}\r\n to={to}\r\n >\r\n {label}\r\n </Link>\r\n </li>\r\n );\r\n}\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\nconst mapDispatchToProps = dispatch => ({\r\n setBusinessOwner: item => dispatch(setCurrentBusinessOwner(item)),\r\n setAvailableBusinessOwners: item => dispatch(setAvailableBusinessOwners(item))\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AppHeader);\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n tabs: {\r\n width: '100%',\r\n borderRight: `1px solid ${theme.palette.divider}`,\r\n boxSizing: 'border-box'\r\n },\r\n tabPanel: {\r\n flex: 1\r\n }\r\n}));\r\n\r\nexport function TabPanel(props) {\r\n const classes = useStyles();\r\n const { children, value, className, index, ...other } = props;\r\n\r\n return (\r\n <Typography\r\n component=\"div\"\r\n className={classNames(classes.tabPanel, className)}\r\n role=\"tabpanel\"\r\n hidden={value !== index}\r\n id={`vertical-tabpanel-${index}`}\r\n aria-labelledby={`vertical-tab-${index}`}\r\n {...other}\r\n >\r\n {value === index && children}\r\n </Typography>\r\n );\r\n}\r\n\r\nexport default ({ children, onChange, value, className }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <Tabs\r\n indicatorColor=\"primary\"\r\n orientation=\"vertical\"\r\n value={value}\r\n onChange={onChange}\r\n aria-label=\"Vertical tabs example\"\r\n className={classNames(classes.tabs, className)}\r\n >\r\n {children}\r\n </Tabs>\r\n );\r\n};\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n container: {\r\n minWidth: '220px',\r\n minHeight: '100%',\r\n boxShadow: 'inset -1px 0px 0px #e2ebf6',\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'none', \r\n },\r\n },\r\n indicator: {\r\n backgroundColor: '#008db0'\r\n },\r\n title: {\r\n padding: '12px 30px'\r\n },\r\n tabLabel: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: '100%',\r\n textTransform: 'initial'\r\n },\r\n errorIcon: {\r\n fontSize: '18px',\r\n color: 'red',\r\n marginRight: '10px'\r\n },\r\n doneIcon: {\r\n color: '#27ABD4',\r\n fontSize: '18px',\r\n marginRight: '12px'\r\n },\r\n customLabel: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n tabIsFilled: {\r\n color: '#000000'\r\n },\r\n selectedLabel: {\r\n fontWeight: '500',\r\n color: '#000000'\r\n },\r\n tabIsAvailable: {\r\n cursor: 'pointer !important',\r\n color: '#000000 !important'\r\n }\r\n}));\r\n\r\nexport const tabStyles = makeStyles({\r\n wrapper: {\r\n alignItems: 'flex-start'\r\n },\r\n root: {\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 'normal',\r\n color: '#99ADBD',\r\n padding: '9px 0 9px 30px',\r\n margin: '0 0 6px',\r\n textAlign: 'left',\r\n minHeight: '36px',\r\n cursor: 'not-allowed'\r\n },\r\n selected: {\r\n backgroundColor: '#e2f5f8',\r\n fontWeight: '500',\r\n color: '#000000',\r\n cursor: 'pointer'\r\n }\r\n});\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\nimport { connect } from 'react-redux';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Tab from '@material-ui/core/Tab';\r\n\r\nimport DoneIcon from '@material-ui/icons/Done';\r\n\r\nimport { useStyles, tabStyles } from './styles';\r\n\r\nconst TabsMenu = ({ activeTab, title, isDoneTab, tabs, change }) => {\r\n const classes = useStyles();\r\n const tabClasses = tabStyles();\r\n const [t] = useTranslation();\r\n\r\n let isAllPreviousValid = true;\r\n\r\n tabs.map(item => {\r\n item.isValid = isDoneTab(item);\r\n item.isAvailable = true;\r\n if (!isAllPreviousValid) item.isAvailable = false;\r\n if (!item.isValid) {\r\n isAllPreviousValid = false;\r\n }\r\n });\r\n\r\n return (\r\n <div className={classes.container}>\r\n <Typography variant=\"h2\" className={classes.title}>\r\n {t(title)}\r\n </Typography>\r\n\r\n <Tabs\r\n onChange={change}\r\n orientation=\"vertical\"\r\n value={activeTab}\r\n classes={{ indicator: classes.indicator }}\r\n >\r\n {tabs.map((tab, index) => (\r\n <Tab\r\n key={index}\r\n className={classNames({\r\n [classes.tabIsAvailable]: tab.isAvailable\r\n })}\r\n label={\r\n <div\r\n className={classNames(\r\n classes.customLabel,\r\n {\r\n [classes.tabIsFilled]: tab.isValid\r\n },\r\n { [classes.selectedLabel]: index === activeTab }\r\n )}\r\n >\r\n {tab.isValid && (\r\n <DoneIcon classes={{ root: classes.doneIcon }} />\r\n )}\r\n {t(tab.name)}\r\n </div>\r\n }\r\n classes={tabClasses}\r\n />\r\n ))}\r\n </Tabs>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n ...state.form\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, null)(TabsMenu);\r\n","import React from 'react';\r\n\r\nconst TabsPanel = ({ tabs, activeTab }) => {\r\n return (\r\n <div>\r\n {tabs.map((tab, index) => {\r\n if (activeTab === index)\r\n return (\r\n <div key={index} hidden={activeTab !== index}>\r\n {tab.component}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nexport default TabsPanel;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n container: {\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n },\r\n paginationContainer: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n },\r\n page: {\r\n marginRight: '20px'\r\n },\r\n itemRoot: {\r\n border: '1px solid #0e8bb4',\r\n backgroundColor: '#fff',\r\n color: '#0e8bb4',\r\n fontSize: '13px',\r\n minWidth: '30px',\r\n height: '30px',\r\n lineHeight: '30px'\r\n },\r\n itemEllipsis: {\r\n color: '#0e8bb4',\r\n backgroundColor: '#fff',\r\n border: 0\r\n },\r\n itemSelected: {\r\n backgroundColor: '#0e8bb4 !important',\r\n color: '#fff'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Typography } from '@material-ui/core';\r\nimport LabPagination from '@material-ui/lab/Pagination';\r\nimport LabPaginationItem from '@material-ui/lab/PaginationItem';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst Pagination = ({ amount, total, ...props }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classes.container}>\r\n <Typography variant=\"body1\">\r\n {t('Showing')} <b>{amount}</b> {t('of')} <b>{total}</b> {t('items')}\r\n </Typography>\r\n <div className={classes.paginationContainer}>\r\n {!!total && (\r\n <>\r\n <Typography variant=\"body1\" className={classes.page}>\r\n {t('Page')}\r\n </Typography>\r\n <LabPagination\r\n variant=\"outlined\"\r\n shape=\"rounded\"\r\n hideNextButton={true}\r\n hidePrevButton={true}\r\n renderItem={item => (\r\n <LabPaginationItem\r\n classes={{\r\n root: classes.itemRoot,\r\n ellipsis: classes.itemEllipsis,\r\n selected: classes.itemSelected\r\n }}\r\n {...item}\r\n />\r\n )}\r\n {...props}\r\n />\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Pagination;\r\n","import moment from 'moment-timezone';\r\nimport uuid from 'uuid/v1';\r\n\r\nmoment.tz.setDefault('CET');\r\n\r\nexport const DEFAULT_LANGUAGE = 'English';\r\nexport const AVAILABLE_LANGUAGES = ['English', 'Norwegian'];\r\n\r\nexport const ACTIVITIES_TAB = 1;\r\n\r\nexport const SCHEDULE_DAYS = {\r\n Mon: false,\r\n Tue: false,\r\n Wed: false,\r\n Thu: false,\r\n Fri: false,\r\n Sat: false,\r\n Sun: false\r\n};\r\n\r\nexport const SCHEDULE_SECTION = {\r\n dateNoTime: 0,\r\n dateTime: 1,\r\n pass: 2\r\n};\r\n\r\nexport const CATEGORIES = [\r\n 'Adult',\r\n 'Children',\r\n 'Senior',\r\n 'Teen',\r\n 'Infant',\r\n 'Universal'\r\n];\r\n\r\nexport const PLATFORMS = ['Expedia', 'Trekksoft', 'BOOKING'];\r\n\r\nexport const INITIAL_ACTIVITY_FORM_DATA = {\r\n generalForm: {\r\n activityType: 'Open',\r\n productCode: '',\r\n coverPhoto: {}\r\n },\r\n descriptionForm: {},\r\n scheduleDateForm: {\r\n availability: {\r\n startDate: moment(),\r\n endDate: null\r\n },\r\n days: SCHEDULE_DAYS,\r\n cutoffPeriod: 0,\r\n cutoffPeriodTimeType: 'days'\r\n },\r\n scheduleDateTimeForm: {\r\n availability: {\r\n startDate: moment(),\r\n endDate: null\r\n },\r\n cutoffPeriod: 0,\r\n cutoffPeriodTimeType: 'minutes',\r\n daysArray: [\r\n {\r\n id: uuid(),\r\n days: SCHEDULE_DAYS,\r\n startTimeAndDuration: [\r\n {\r\n startTime: moment(),\r\n duration: null,\r\n timeType: 'hours'\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n schedulePassForm: {\r\n availability: {\r\n startDate: moment(),\r\n endDate: null\r\n }\r\n },\r\n pricesFixedForm: {\r\n days: []\r\n },\r\n pricesDailyForm: {\r\n days: []\r\n },\r\n pricesEqualForm: {\r\n categories: [\r\n {\r\n participant: 'Adult',\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n }\r\n ]\r\n },\r\n pricesDailyScheduleForm: {\r\n daysArray: []\r\n },\r\n addOnsForm: {\r\n addOns: []\r\n },\r\n // mandatoryFeesForm: {\r\n // mandatoryFees: []\r\n // },\r\n relatedAccommodationsForm: {\r\n relatedAccommodations: []\r\n },\r\n integrationForm: {\r\n integrations: []\r\n }\r\n};\r\n\r\nexport const ACTIVITY_FORMS_ORDER = [\r\n 'generalForm',\r\n 'descriptionForm',\r\n {\r\n 0: 'scheduleDateForm',\r\n 1: 'scheduleDateTimeForm',\r\n 2: 'schedulePassForm'\r\n },\r\n {\r\n 0: {\r\n 0: 'pricesFixedForm',\r\n 1: 'pricesDailyForm',\r\n 2: 'pricesEqualForm'\r\n },\r\n 1: {\r\n 0: 'pricesFixedForm',\r\n 1: 'pricesDailyScheduleForm',\r\n 2: 'pricesEqualForm'\r\n },\r\n 2: {\r\n 0: 'pricesFixedForm',\r\n 1: 'pricesEqualForm'\r\n }\r\n },\r\n 'addOnsForm',\r\n 'relatedAccommodationsForm',\r\n 'integrationForm'\r\n];\r\n\r\nexport const ACTIVITY_FORMS_NUMBERS = {\r\n generalForm: 0,\r\n descriptionForm: 1,\r\n scheduleForm: 2,\r\n pricesForm: 3,\r\n addOnsForm: 4,\r\n relatedAccommodationsForm: 5, \r\n integrationForm: 6,\r\n \r\n};\r\n\r\nexport const ACTIVITY_SCHEDULE_FORMS_NUMBERS = {\r\n scheduleDateForm: 0,\r\n scheduleDateTimeForm: 1,\r\n schedulePassForm: 2\r\n};\r\n\r\nexport const ACTIVITY_PRICES_FORMS_NUMBERS = {\r\n 0: {\r\n pricesFixedForm: 0,\r\n pricesDailyForm: 1,\r\n pricesEqualForm: 2\r\n },\r\n 1: {\r\n pricesFixedForm: 0,\r\n pricesDailyScheduleForm: 1,\r\n pricesEqualForm: 2\r\n },\r\n 2: {\r\n pricesFixedForm: 0,\r\n pricesEqualForm: 1\r\n }\r\n};\r\n","import moment from 'moment';\r\n\r\n// eslint-disable-next-line\r\nconst emailValidationRegex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n// eslint-disable-next-line\r\nconst passwordRegex = /^.*(?=.{8,})((?=.*[!@#$%^&*()\\-_=+{};:,<.>]){1})(?=.*\\d)((?=.*[a-z]){1})((?=.*[A-Z]){1}).*$/;\r\n// eslint-disable-next-line react-hooks/exhaustive-deps\r\nconst numberRegex = /^[0-9]+$/;\r\nconst TEN_MB_IN_BYTES = 10000000;\r\nconst MONTHS = 12;\r\n\r\nexport const isEmail = (value, errorMessage) => {\r\n return !emailValidationRegex.test(value) && errorMessage;\r\n};\r\n\r\nexport const isRequired = (value, errorMessage) => {\r\n if (value === 0) return false;\r\n if (!value) return errorMessage;\r\n return !value.length && errorMessage;\r\n};\r\n\r\nexport const isNumber = (value, errorMessage) => {\r\n if (value === 0) return false;\r\n if (!value) return errorMessage;\r\n return !numberRegex.test(value.toString()) && errorMessage;\r\n};\r\n\r\nexport const isRequiredFieldTrueInObject = (value, errorMessage) => {\r\n return (\r\n !Object.keys(value).filter(field => value[field]).length && errorMessage\r\n );\r\n};\r\n\r\nexport const isRequiredFieldTrueInEachObjectInArray = (\r\n array,\r\n fieldName,\r\n errorMessage\r\n) => {\r\n let errors = {\r\n [fieldName]: {}\r\n };\r\n\r\n for (let i in array) {\r\n if (array.hasOwnProperty(i)) {\r\n const item = array[i];\r\n const obj = item[fieldName];\r\n\r\n if (!Object.keys(obj).filter(field => obj[field]).length) {\r\n errors[fieldName][i] = errorMessage;\r\n }\r\n }\r\n }\r\n\r\n return !!Object.keys(errors[fieldName]).length && errors;\r\n};\r\n\r\nexport const isRequiredArray = (array, errorMessage) => {\r\n return array && !array.length && errorMessage;\r\n};\r\n\r\nexport const isValidLength = (value, length, errorMessage) => {\r\n return value.length > length && errorMessage;\r\n};\r\n\r\nexport const isValidExpirationDate = value => {\r\n if (!value) return false;\r\n\r\n const dates = value.split('/');\r\n const month = parseInt(dates[0]);\r\n const year = parseInt(dates[1]);\r\n const currentYear = parseInt(moment().format('YY'));\r\n\r\n if (month > MONTHS) return false;\r\n if (year < currentYear) return false;\r\n\r\n return true;\r\n};\r\n\r\nexport const isValidPassword = (value, errorMessage) => {\r\n return !passwordRegex.test(value) && errorMessage;\r\n};\r\n\r\nexport const isConfirmPassword = (value, valueToConfirm, errorMessage) => {\r\n return value !== valueToConfirm && errorMessage;\r\n};\r\n\r\nexport const isValidUploadedImageSize = (value, errorMessage) => {\r\n if (!value.file) return false;\r\n return value.file.size > TEN_MB_IN_BYTES && errorMessage;\r\n};\r\n\r\nexport const isValidUploadedImageFormat = (value, errorMessage) => {\r\n if (!value.file) return false;\r\n if (!Object.keys(value.file).length && !value.file.type) return false;\r\n return (\r\n value.file.type.indexOf('jpg') < 0 &&\r\n value.file.type.indexOf('jpeg') < 0 &&\r\n value.file.type.indexOf('png') < 0 &&\r\n errorMessage\r\n );\r\n};\r\n\r\nexport const isFieldInArray = (field, array, arrayFieldName) => {\r\n return array.filter(item => item[arrayFieldName] === field).length > 1;\r\n};\r\n\r\nexport const isRequiredCurrency = field => {\r\n if (field.USD && field.USD.length && field.USD !== '0' && field.USD !== '0')\r\n return false;\r\n if (field.EUR && field.EUR.length && field.EUR !== '0' && field.EUR !== '0')\r\n return false;\r\n if (field.NOK && field.NOK.length && field.NOK !== '0' && field.NOK !== '0')\r\n return false;\r\n\r\n return true;\r\n};\r\n","import {\r\n isRequired,\r\n isValidUploadedImageSize,\r\n isValidUploadedImageFormat,\r\n isNumber,\r\n isValidLength\r\n} from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (values.coverPhoto) {\r\n if (isRequired(values.coverPhoto.image || '', true)) {\r\n errors.coverPhoto = 'Cover photo is required';\r\n } else if (isValidUploadedImageSize(values.coverPhoto || '', true)) {\r\n errors.coverPhoto = 'Your file exceeded the size limit';\r\n } else if (isValidUploadedImageFormat(values.coverPhoto || '', true)) {\r\n errors.coverPhoto = `File could not be uploaded because the format is not supported. Please upload the file with the format png, jpg, jpeg`;\r\n }\r\n } else {\r\n errors.coverPhoto = 'Cover photo is required';\r\n }\r\n\r\n if (isRequired(values.title || '', true)) {\r\n errors.title = 'Title is required';\r\n }\r\n\r\n if (isRequired(values.minParticipants || '', true)) {\r\n errors.minParticipants = 'Number of participants is required';\r\n } else if (isNumber(values.minParticipants || '', true)) {\r\n errors.minParticipants = 'Number of participants can be only number';\r\n } else if (isValidLength(values.minParticipants || '', 9, true)) {\r\n errors.minParticipants =\r\n 'Number of participants can be max 9 characters long';\r\n }\r\n\r\n if (isRequired(values.maxParticipants || '', true)) {\r\n errors.maxParticipants = 'Number of participants is required';\r\n } else if (isNumber(values.maxParticipants || '', true)) {\r\n errors.maxParticipants = 'Number of participants can be only number';\r\n } else if (isValidLength(values.maxParticipants || '', 9, true)) {\r\n errors.maxParticipants =\r\n 'Number of participants can be max 9 characters long';\r\n } else if (\r\n values.minParticipants &&\r\n parseInt(values.minParticipants) > parseInt(values.maxParticipants)\r\n ) {\r\n errors.maxParticipants =\r\n 'Maximum number can not be less than minimum number of participants';\r\n }\r\n\r\n if (isRequired(values.startingPoint || '', true)) {\r\n errors.startingPoint = 'Starting point is required';\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","\r\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\r\nexport const useStyles = makeStyles(theme => ({\r\n wrapper: {\r\n margin: '30px 0',\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '0 20px'\r\n }\r\n },\r\n title: {\r\n margin: '0 0 12px',\r\n },\r\n inputIndent: {\r\n marginBottom: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n \r\n padding: '0px 20px 0px 20px',\r\n alignItems: 'flex-center',\r\n }\r\n },\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n alignItems: 'flex-center',\r\n \r\n },\r\n },\r\n column: {\r\n width: '286px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n alignItems: 'flex-center',\r\n \r\n \r\n },\r\n },\r\n spaceBetween: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '0px 20px 0px 20px',\r\n \r\n },\r\n },\r\n datePickerWrapper: {\r\n width: '247px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '90%',\r\n },\r\n },\r\n helpIcon: {\r\n fontSize: '19px',\r\n marginTop: '29px',\r\n color: '#182e3d',\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'none', \r\n },\r\n },\r\n timePicker: {\r\n width: '135px !important',\r\n marginBottom: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100% !important',\r\n margin: '0px 20px 20px 0px',\r\n },\r\n },\r\n labelWithHelpIcon: {\r\n display: 'flex',\r\n position: 'relative'\r\n },\r\n chipsHelpIcon: {\r\n position: 'absolute',\r\n fontSize: '18px',\r\n top: '-4px',\r\n marginLeft: '6px'\r\n },\r\n activityTypeWrapper: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n },\r\n },\r\n colorPaletteWrapper: {\r\n width: '285px',\r\n [theme.breakpoints.down('sm')]:{\r\n marginLeft: '0px',\r\n marginBottom: '20px'\r\n }\r\n },\r\n colorPalette: {\r\n position: 'relative',\r\n width: '285px',\r\n height: '35px',\r\n borderRadius: '3px',\r\n backgroundColor: '#E2EBF6',\r\n },\r\n editIconWrapper: {\r\n position: 'absolute',\r\n bottom: '0',\r\n right: '0',\r\n '&:hover': {\r\n cursor: 'pointer'\r\n },\r\n background: '#464646',\r\n height: '24px',\r\n\r\n\r\n },\r\n helpIconColor:{\r\n position: 'absolute',\r\n margin: '20px 0 0 10px'\r\n },\r\n \r\n}));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\nimport zIndex from '@material-ui/core/styles/zIndex';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n container: {\r\n marginBottom: '26px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '20px',\r\n },\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n width: '100%',\r\n minHeight: '56px',\r\n [theme.breakpoints.down('sm')]: {\r\n minHeight: '48px',\r\n },\r\n },\r\n label: {\r\n display: 'block',\r\n marginBottom: 6,\r\n color: '#071B27',\r\n textTransform: 'uppercase',\r\n fontSize: 10,\r\n lineHeight: '12px',\r\n letterSpacing: '0.035em',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: 9,\r\n marginBottom: 5,\r\n },\r\n },\r\n secondLabel: {\r\n display: 'flex',\r\n alignItems: 'baseline',\r\n justifyContent: 'space-between',\r\n marginBottom: '12px',\r\n color: '#071B27',\r\n lineHeight: '12px',\r\n letterSpacing: '0.035em',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '10px',\r\n },\r\n },\r\n datesLabel: {\r\n display: 'flex',\r\n textTransform: 'none',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n },\r\n },\r\n fromTo: {\r\n marginRight: '10px',\r\n fontWeight: 500,\r\n [theme.breakpoints.down('sm')]: {\r\n marginRight: '5px'\r\n },\r\n },\r\n customInputDate: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n backgroundColor: '#FFFFFF',\r\n border: '1px solid #BECEDA',\r\n borderRadius: '3px',\r\n boxSizing: 'border-box',\r\n width: '100%',\r\n cursor: 'pointer',\r\n fontSize: '13px',\r\n lineHeight: '10px',\r\n padding: '7px 12px',\r\n position: 'absolute',\r\n zIndex: '1',\r\n '&:hover': {\r\n border: '1px solid #41B7D7',\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '12px',\r\n padding: '6px 10px',\r\n width: '100%'\r\n },\r\n },\r\n calendarIcon: {\r\n fontSize: '20px',\r\n marginRight: '7px',\r\n marginTop: '-2px',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '18px',\r\n marginRight: '6px',\r\n },\r\n },\r\n dateRangeDivider: {\r\n margin: '0 3px',\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '0 2px',\r\n },\r\n },\r\n hiddenDateRangePicker: {\r\n position: 'absolute',\r\n top: '19px',\r\n left: '0',\r\n [theme.breakpoints.down('sm')]: {\r\n top: '17px',\r\n },\r\n },\r\n focus: {\r\n boxShadow: '0 0 3px 3px rgba(65, 183, 215, 0.35)',\r\n border: '1px solid #41B7D7',\r\n },\r\n errorInput: {\r\n border: '1px solid #EB5757',\r\n boxShadow: 'none',\r\n '&:hover': {\r\n border: '1px solid #EB5757',\r\n },\r\n },\r\n error: {\r\n marginTop: '50px',\r\n },\r\n errorOpenedPicker: {\r\n position: 'relative',\r\n zIndex: 1,\r\n // margin: '-28px 105px 35px'\r\n },\r\n checkboxRoot: {},\r\n checked: {\r\n color: '#1D9DC6',\r\n },\r\n disabledCheckbox: {\r\n color: '#BECEDA',\r\n backgroundColor: '#BECEDA',\r\n },\r\n checkboxIcon: {\r\n color: theme.baseUI.color,\r\n fontSize: '21px',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '19px',\r\n },\r\n },\r\n\r\n ClearButton: {\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n marginTop: '-2px',\r\n fontWeight: 'bold',\r\n fontSize: '13px',\r\n textDecoration: 'underline',\r\n position: 'absolute',\r\n zIndex: 1,\r\n right: '0',\r\n bottom: '0',\r\n marginRight: '20px',\r\n marginBottom: '-30px',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '11px',\r\n right: '40px',\r\n marginRight: '30px',\r\n marginBottom: '-15px'\r\n },\r\n },\r\n \r\n dayHalfAvailable: {\r\n '&:before': {\r\n content: \"''\",\r\n position: 'absolute',\r\n width: '50%',\r\n height: '102%',\r\n top: 0,\r\n bottom: 0,\r\n background: '#cacccd',\r\n zIndex: 1,\r\n },\r\n '& > div': {\r\n zIndex: 2,\r\n position: 'relative',\r\n },\r\n },\r\n dayLeftDisable: {\r\n '&:before': {\r\n left: -1,\r\n bottom: -1,\r\n },\r\n },\r\n dayRightDisable: {\r\n '&:before': {\r\n right: -1,\r\n bottom: -1,\r\n },\r\n },\r\n \r\n}));\r\n\r\n\r\n\r\n","import moment from 'moment';\r\n\r\nexport const getIsHalf = (disabledDates, calendarDay) => {\r\n const { isAvailableForCheckOut, isAvailableForCheckIn } =\r\n disabledDates?.find(({ date }) =>\r\n moment(calendarDay).isSame(date, 'day')\r\n ) || {};\r\n\r\n return {\r\n disableLeft: !isAvailableForCheckOut && isAvailableForCheckIn,\r\n disableRight: isAvailableForCheckOut && !isAvailableForCheckIn\r\n };\r\n};\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport moment from 'moment';\r\nimport classNames from 'classnames';\r\n\r\nimport DateRangeIcon from '@material-ui/icons/DateRange';\r\nimport { useMediaQuery } from '@material-ui/core';\r\n\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport { Button, Typography } from '@material-ui/core';\r\n\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank';\r\nimport CheckBoxIcon from '@material-ui/icons/CheckBox';\r\nimport FormGroup from '@material-ui/core/FormGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\n\r\nimport { DateRangePicker } from 'react-dates';\r\nimport { CalendarDay, CalendarMonthCaption } from './styles';\r\nimport { LOCALES_OBJ } from 'constants/base';\r\n\r\nimport { useStyles } from './styles';\r\nimport { getIsHalf } from '../../utils/book-accommodation/getIsHalf';\r\nimport uuid from 'uuid/v1';\r\n\r\nconst CustomDateRangePicker = ({\r\n id,\r\n isStartDateRenderMonth,\r\n input,\r\n minimumNights,\r\n availableRange,\r\n disabledDates,\r\n changeMonthsCallback,\r\n label,\r\n className,\r\n containerClassName,\r\n initialFocus,\r\n dateRangePickerClass,\r\n inputClassName,\r\n isOutsideRange,\r\n numberOfMonths,\r\n isHideDatesLabel,\r\n labelTypographyVariant,\r\n daySize,\r\n secondLabelClass,\r\n meta: { touched, error, submitFailed },\r\n widget,\r\n updateBooking,\r\n statistics,\r\n accomodationDialog\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n const endDate = availableRange ? availableRange.endDate : null;\r\n const endDatePlusOneDay = endDate ? moment(endDate).add(1, 'days') : null;\r\n const startDateFocusId = `startDate-${id || uuid(20)}`;\r\n\r\n const [focus, setFocus] = React.useState(initialFocus || null);\r\n const [isHiddenNextButton, setHiddenNextButton] = React.useState(false);\r\n const [firstDisabledDate, setFirstDisabledDate] = React.useState(null);\r\n\r\n const [render, setRender] = React.useState(true);\r\n const [renderMonth, setRenderMonth] = React.useState(\r\n isStartDateRenderMonth && input.value.startDate\r\n ? input.value.startDate\r\n : moment()\r\n );\r\n\r\n React.useEffect(() => {\r\n setRender(!render);\r\n setTimeout(() => {\r\n setRender(render);\r\n }, 0);\r\n }, [selectedLanguage]);\r\n\r\n let firstDisabledDateAfterSelectedDate = firstDisabledDate;\r\n\r\n const selectedStartDate = input.value.startDate;\r\n const selectedEndDate = input.value.endDate;\r\n\r\n const isSmallScreen = useMediaQuery((theme) => theme.breakpoints.down('sm'));\r\n\r\n const onChangeHandler = (startDate, endDate) => {\r\n setFirstDisabledDate(null);\r\n\r\n if (!moment(startDate).isSame(selectedStartDate, 'day')) {\r\n input.onChange({ startDate, endDate: null });\r\n return;\r\n }\r\n\r\n input.onChange({ startDate, endDate });\r\n };\r\n\r\n const onPrevMonthClickHandler = date => {\r\n setRenderMonth(date);\r\n setHiddenNextButton(false);\r\n if (changeMonthsCallback) changeMonthsCallback(date);\r\n };\r\n\r\n const onNextMonthClickHandler = date => {\r\n setRenderMonth(date);\r\n const currentDate = moment();\r\n const endAvailableDate = moment(currentDate).add(23, 'M');\r\n\r\n const isTheSameDates = moment(date)\r\n .startOf('month')\r\n .isSame(endAvailableDate.startOf('month'));\r\n\r\n if (isTheSameDates) setHiddenNextButton(true);\r\n if (changeMonthsCallback) changeMonthsCallback(date);\r\n };\r\n\r\n const isBlockedDayByDisabledDates = (disabledDates, date) => {\r\n return disabledDates.find(item => {\r\n const itemDate = moment(item.date, 'YYYY-MM-DD');\r\n const isSameDate = moment(itemDate).isSame(date, 'day');\r\n\r\n if (isSameDate && item.deactivationBooking) return true;\r\n\r\n if (selectedStartDate && !selectedEndDate) {\r\n const isSameOrAfterDate = moment(date).isSameOrAfter(selectedStartDate);\r\n\r\n if (!item.isAvailableForCheckOut && isSameDate && isSameOrAfterDate) {\r\n return true;\r\n }\r\n }\r\n\r\n if (isSameDate) {\r\n const checkinCheckoutDate = disabledDates.filter(item =>\r\n moment(item.date, 'YYYY-MM-DD').isSame(itemDate, 'day')\r\n );\r\n if (checkinCheckoutDate.length > 1) {\r\n return true;\r\n }\r\n\r\n if (availableRange?.startDate) {\r\n if (\r\n moment(item.date, 'YYYY-MM-DD').isSame(\r\n availableRange.startDate,\r\n 'day'\r\n ) ||\r\n moment(item.date, 'YYYY-MM-DD').isSame(\r\n availableRange.endDate,\r\n 'day'\r\n ) ||\r\n moment(item.date, 'YYYY-MM-DD').isSame(moment(), 'day')\r\n ) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return (\r\n !item.isAvailableForCheckIn &&\r\n !item.isAvailableForCheckOut &&\r\n isSameDate\r\n );\r\n });\r\n };\r\n\r\n const isBlockedDay = date => {\r\n if (disabledDates) {\r\n const isDisabled = isBlockedDayByDisabledDates(disabledDates, date);\r\n if (isDisabled) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!availableRange) return false;\r\n\r\n if (availableRange.endDate && availableRange.endDate !== 'None') {\r\n const isBetween = moment(date).isBetween(\r\n availableRange.startDate,\r\n availableRange.endDate,\r\n 'day',\r\n '[]'\r\n );\r\n\r\n if (isBetween) {\r\n if (!availableRange.daysOfWeek.length) return false;\r\n const dayOfDate = moment(date).format('ddd');\r\n return !availableRange.daysOfWeek.includes(dayOfDate);\r\n }\r\n } else {\r\n const isSameOrAfter = moment(date).isSameOrAfter(\r\n availableRange.startDate,\r\n 'day'\r\n );\r\n\r\n if (isSameOrAfter) {\r\n if (!availableRange.daysOfWeek.length) return false;\r\n const dayOfDate = moment(date).format('ddd');\r\n return !availableRange.daysOfWeek.includes(dayOfDate);\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const isBlockedDayAfterSelectedStartDate = (date, isDayBlocked) => {\r\n if (selectedStartDate && !selectedEndDate) {\r\n if (isDayBlocked && moment(date).isAfter(selectedStartDate, 'day')) {\r\n if (\r\n endDatePlusOneDay &&\r\n moment(date).isSameOrAfter(endDatePlusOneDay, 'day')\r\n ) {\r\n return isDayBlocked;\r\n }\r\n const isTheSameDisabledDate = firstDisabledDateAfterSelectedDate\r\n ? moment(firstDisabledDateAfterSelectedDate).isSame(date, 'day')\r\n : null;\r\n if (!firstDisabledDateAfterSelectedDate || !isTheSameDisabledDate) {\r\n firstDisabledDateAfterSelectedDate = date;\r\n setFirstDisabledDate(date);\r\n }\r\n return true;\r\n }\r\n\r\n if (\r\n firstDisabledDateAfterSelectedDate &&\r\n moment(date).isSameOrAfter(firstDisabledDateAfterSelectedDate, 'day')\r\n ) {\r\n return true;\r\n }\r\n } else if (firstDisabledDateAfterSelectedDate) {\r\n setFirstDisabledDate(null);\r\n }\r\n\r\n return isDayBlocked;\r\n };\r\n\r\n const [checked, setChecked] = React.useState(true);\r\n\r\n const checkboxChangeHandler = () => {\r\n setChecked(!checked);\r\n input.onChange({ startDate: moment(), endDate: null });\r\n };\r\n\r\n const handleResetDate = () => {\r\n onChangeHandler(null, null);\r\n setFocus(initialFocus || null);\r\n };\r\n\r\n const [isDisabledDates, setIsDisabledDates] = React.useState(false);\r\n const [disabledDateslist, setDisabledDateslist] = React.useState([]);\r\n\r\n React.useEffect(() => {\r\n const startDate = moment(renderMonth).startOf('month');\r\n const endDate = moment(renderMonth)\r\n .add(2, 'month')\r\n .endOf('month');\r\n\r\n const dates = [];\r\n const isBlocked = isBlockedDay(startDate);\r\n\r\n if (isBlocked) dates.push(startDate.clone());\r\n\r\n while (startDate.add(1, 'days').diff(endDate) < 0) {\r\n const isBlocked = isBlockedDay(startDate);\r\n if (isBlocked) dates.push(startDate.clone());\r\n }\r\n\r\n setDisabledDateslist(dates);\r\n setIsDisabledDates(true);\r\n }, [availableRange, disabledDates, renderMonth]);\r\n\r\n if (!isDisabledDates) return null;\r\n\r\n return (\r\n <div className={classNames(classes.container, containerClassName)}>\r\n <div className={classNames(classes.wrapper, className)}>\r\n {initialFocus ? (\r\n <label className={classNames(classes.secondLabel, secondLabelClass)}>\r\n <Typography\r\n variant={labelTypographyVariant ? labelTypographyVariant : 'h2'}\r\n >\r\n {t(label)}\r\n </Typography>\r\n\r\n <div className={classes.datesLabel}>\r\n <Typography variant=\"body1\" className={classes.fromTo}>\r\n {input.value && !isHideDatesLabel ? `${t('From – To')}:` : ' '}\r\n </Typography>\r\n\r\n <Typography variant=\"body1\">\r\n {input.value && (\r\n <>\r\n {input.value.startDate &&\r\n moment(input.value.startDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM D, YYYY')}{' '}\r\n –{' '}\r\n {input.value.endDate &&\r\n moment(input.value.endDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM D, YYYY')}\r\n </>\r\n )}\r\n </Typography>\r\n </div>\r\n </label>\r\n ) : (\r\n <label htmlFor={startDateFocusId} className={classes.label}>\r\n {t(label)}\r\n </label>\r\n )}\r\n\r\n <label\r\n htmlFor={startDateFocusId}\r\n onClick={() => setFocus(startDateFocusId)}\r\n className={classNames(\r\n classes.customInputDate,\r\n {\r\n [classes.focus]: focus\r\n },\r\n {\r\n [classes.errorInput]: (touched || submitFailed) && error\r\n },\r\n inputClassName\r\n )}\r\n >\r\n <DateRangeIcon className={classes.calendarIcon} />\r\n {input.value.startDate ? (\r\n moment(input.value.startDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM D, YYYY')\r\n ) : (\r\n <div>{t('Start date')}</div>\r\n )}\r\n <span className={classes.dateRangeDivider}>-</span>\r\n {input.value.endDate ? (\r\n moment(input.value.endDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM D, YYYY')\r\n ) : (\r\n <div>{t('End date')}</div>\r\n )}\r\n </label>\r\n\r\n {!initialFocus && (touched || submitFailed) && error && (\r\n <FormHelperText className={classes.error} error>\r\n {typeof error === 'object'\r\n ? t(error.text, error.variables)\r\n : t(error)}\r\n </FormHelperText>\r\n )}\r\n\r\n <div\r\n className={classNames(\r\n classes.hiddenDateRangePicker,\r\n dateRangePickerClass\r\n )}\r\n style={{ zIndex: 10 }}\r\n >\r\n {render && (\r\n <DateRangePicker\r\n verticalSpacing={0}\r\n noBorder={true}\r\n customArrowIcon={<div>{''}</div>}\r\n readOnly={true}\r\n startDateId={startDateFocusId}\r\n endDateId=\"endDate\"\r\n displayFormat=\"MMM D, YYYY\"\r\n startDate={input.value.startDate}\r\n endDate={input.value.endDate}\r\n onDatesChange={({ startDate, endDate }) => {\r\n onChangeHandler(startDate, endDate);\r\n }}\r\n onPrevMonthClick={onPrevMonthClickHandler}\r\n onNextMonthClick={onNextMonthClickHandler}\r\n minimumNights={minimumNights}\r\n navNext={isHiddenNextButton ? <div>{''}</div> : ''}\r\n focusedInput={focus}\r\n onFocusChange={focusedInput => {\r\n setFocus(focusedInput || initialFocus || null);\r\n }}\r\n isOutsideRange={isOutsideRange}\r\n initialVisibleMonth={() => renderMonth}\r\n isDayBlocked={date => {\r\n return !!disabledDateslist.some(disabledDate => {\r\n const isBlocked = disabledDate.isSame(date, 'day');\r\n return isBlockedDayAfterSelectedStartDate(date, isBlocked);\r\n });\r\n }}\r\n numberOfMonths={numberOfMonths ? numberOfMonths : 2}\r\n daySize={daySize ? daySize : 38}\r\n // numberOfMonths={isSmallScreen ? 1 : 2}\r\n // daySize={isSmallScreen ? 30 : 35}\r\n renderMonthElement={({ month }) =>\r\n moment(month)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMMM YYYY')\r\n }\r\n renderDayContents={day => {\r\n if (selectedLanguage === 'Norway') {\r\n day._locale._weekdaysMin = [\r\n 'Sø',\r\n 'Ma',\r\n 'Ti',\r\n 'On',\r\n 'To',\r\n 'Fr',\r\n 'Lø'\r\n ];\r\n } else {\r\n day._locale._weekdaysMin = [\r\n 'Su',\r\n 'Mo',\r\n 'Tu',\r\n 'We',\r\n 'Th',\r\n 'Fr',\r\n 'Sa'\r\n ];\r\n }\r\n\r\n const { disableLeft, disableRight } = getIsHalf(\r\n disabledDates,\r\n day\r\n );\r\n\r\n return (\r\n <div\r\n className={classNames({\r\n [classes.dayHalfAvailable]: disableLeft || disableRight,\r\n [classes.dayLeftDisable]: disableLeft,\r\n [classes.dayRightDisable]: disableRight\r\n })}\r\n >\r\n <div>{day.format('D')}</div>\r\n </div>\r\n );\r\n }}\r\n hideKeyboardShortcutsPanel={true}\r\n />\r\n )}\r\n {initialFocus && input.value.startDate && (\r\n <Button\r\n className={classes.ClearButton}\r\n onClick={() => {\r\n handleResetDate();\r\n }}\r\n >\r\n Clear date\r\n </Button>\r\n )}\r\n </div>\r\n {initialFocus && (touched || submitFailed) && error && (\r\n <FormHelperText className={classes.errorOpenedPicker} error>\r\n {typeof error === 'object'\r\n ? t(error.text, error.variables)\r\n : t(error)}\r\n </FormHelperText>\r\n )}\r\n </div>\r\n\r\n {!widget && !updateBooking && !statistics && !accomodationDialog && (\r\n <FormGroup aria-label=\"position\">\r\n <FormControlLabel\r\n label={t('Available all the time')}\r\n labelPlacement=\"end\"\r\n control={\r\n <Checkbox\r\n icon={\r\n <CheckBoxOutlineBlankIcon className={classes.checkboxIcon} />\r\n }\r\n checkedIcon={<CheckBoxIcon className={classes.checkboxIcon} />}\r\n checked={!input.value.endDate}\r\n onChange={checkboxChangeHandler}\r\n disabled={!input.value.endDate}\r\n color=\"default\"\r\n classes={{\r\n root: classes.checkboxRoot,\r\n checked: classes.checked,\r\n disabled: classes.disabledCheckbox\r\n }}\r\n />\r\n }\r\n />\r\n </FormGroup>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CustomDateRangePicker;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme=>({\r\n wrapper: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n paddingRight:'20px',\r\n [theme.breakpoints.down('sm')]: {\r\n justifyContent: 'center',\r\n\r\n }\r\n },\r\n cancelBtnRoot: {\r\n border: '1px solid #0e8bb4',\r\n borderRadius: '3px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n color: '#0e8bb4',\r\n padding: '8px 15px',\r\n minWidth: '80px',\r\n marginRight: '15px'\r\n },\r\n actionBtnRoot: {\r\n boxShadow: 'none',\r\n border: '1px solid #0e8bb4',\r\n borderRadius: '3px',\r\n backgroundColor: '#0e8bb4',\r\n color: '#FFFFFF',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n padding: '8px 15px',\r\n minWidth: '80px',\r\n '&:hover': {\r\n backgroundColor: '#0e8bb4',\r\n color: '#FFFFFF'\r\n }\r\n },\r\n actionBtnDisabled: {\r\n borderColor: 'rgba(0,0,0,0.12)'\r\n },\r\n saveButton: {\r\n marginRight: '15px'\r\n }\r\n \r\n}));\r\n","import moment from 'moment';\r\n\r\nconst getDisabledDates = (dates, initialDates) => {\r\n let bookedDates = dates?.accommodations?.[0]?.bookedDates ?? [];\r\n\r\n if (initialDates) {\r\n bookedDates = bookedDates.filter(item => {\r\n const date = moment(item.date, 'YYYY-MM-DD');\r\n return !date.isBetween(\r\n initialDates.startDate,\r\n initialDates.endDate,\r\n 'day',\r\n '[]'\r\n );\r\n });\r\n }\r\n\r\n return bookedDates;\r\n};\r\n\r\nexport function getRange(startDate, endDate, type = 'days') {\r\n let fromDate = moment(startDate);\r\n let toDate = moment(endDate);\r\n let diff = toDate.diff(fromDate, type);\r\n let range = [];\r\n for (let i = 0; i <= diff; i++) {\r\n range.push(moment(startDate).add(i, type));\r\n }\r\n return range;\r\n}\r\n\r\nconst getAvailableRangeDates = accommodation => ({\r\n startDate: accommodation?.generalForm?.availability?.startDate ?? null,\r\n endDate: accommodation?.generalForm?.availability?.endDate ?? null,\r\n daysOfWeek: []\r\n});\r\n\r\nexport { getDisabledDates, getAvailableRangeDates };\r\n","import React, { useEffect, useState } from 'react';\r\nimport styled from 'styled-components';\r\nimport CustomDateRangePicker from '../custom-date-range-picker/customDateRangePicker';\r\nimport uuid from 'uuid/v1';\r\nimport classes from './styles.module.css';\r\nimport { Button, IconButton } from '@material-ui/core';\r\nimport { useStyles } from '../form-action-buttons/styles';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { getRange } from '../../utils/book-accommodation/availableDates';\r\nimport ConfirmContext from '../../contexts/ConfirmContext';\r\nimport moment from 'moment';\r\n\r\nconst Wrapper = styled.div`\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n`;\r\n\r\nconst Label = styled.label`\r\n font-weight: 500;\r\n font-size: 10px;\r\n line-height: 12px;\r\n\r\n letter-spacing: 0.0165em;\r\n text-transform: uppercase;\r\n\r\n color: #071b27;\r\n`;\r\n\r\nconst Section = styled.div`\r\n width: 100%;\r\n\r\n gap: 12px;\r\n row-gap: 2px;\r\n\r\n display: flex;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n\r\n padding: 0 4px 6px;\r\n margin-top: 6px;\r\n\r\n background: #ffffff;\r\n\r\n border: 1px solid #beceda;\r\n border-radius: 3px;\r\n`;\r\n\r\nconst DatePickerWrapper = styled.div`\r\n position: relative;\r\n \r\n`;\r\n\r\nconst CloseIconWrapper = styled.div`\r\n z-index: 1;\r\n position: absolute;\r\n top: calc(50% + 3px);\r\n right: 2px;\r\n transform: translateY(-50%);\r\n`;\r\n\r\nconst DeactivateDatesInput = ({\r\n input: { value, onChange },\r\n label,\r\n bookDates\r\n}) => {\r\n const buttonClasses = useStyles();\r\n const confirm = React.useContext(ConfirmContext);\r\n\r\n const [renderDates, setRenderedDates] = useState([]);\r\n\r\n useEffect(() => {\r\n setRenderedDates(\r\n Array.isArray(value) && value?.length\r\n ? value\r\n : [{ id: 'new-one' + uuid(10) }]\r\n );\r\n }, [value]);\r\n\r\n const handleChangeDate = id => newDate => {\r\n onChange(\r\n renderDates.map(date => (id === date.id ? { ...date, ...newDate } : date))\r\n );\r\n };\r\n\r\n const handleAddDateRange = () => {\r\n onChange([...renderDates, { id: 'new-one' + uuid(10) }]);\r\n };\r\n\r\n const handleDeleteDateRange = ({ id, startDate, endDate }) => () => {\r\n confirm({\r\n title: 'Delete deactivation Date?',\r\n description:\r\n startDate && endDate\r\n ? `${startDate &&\r\n moment(startDate).format('MMMM DD, YYYY')} - ${endDate &&\r\n moment(endDate).format('MMMM DD, YYYY')}`\r\n : undefined,\r\n cancellationText: 'Back',\r\n confirmationText: 'Delete'\r\n })\r\n .then(() => {\r\n onChange(\r\n renderDates.map(date =>\r\n date.id === id ? { ...date, isCanceled: true } : date\r\n )\r\n );\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const getDisabledRanges = currentId =>\r\n renderDates\r\n ?.reduce((acc, { id, startDate, endDate, isCanceled }) => {\r\n if (startDate && endDate && !isCanceled && id !== currentId) {\r\n return [\r\n ...acc,\r\n ...getRange(startDate, moment(endDate)).map(date => ({\r\n date\r\n }))\r\n ];\r\n }\r\n\r\n return acc;\r\n }, [])\r\n .concat(\r\n bookDates?.filter(({ deactivationBooking }) => !deactivationBooking) ||\r\n []\r\n );\r\n\r\n const activeDates = renderDates.filter(({ isCanceled }) => !isCanceled);\r\n\r\n return (\r\n <Wrapper>\r\n <Label>{label}</Label>\r\n\r\n <Section>\r\n {activeDates.map(({ id, ...dateValue }) => (\r\n <DatePickerWrapper key={id}>\r\n <CustomDateRangePicker\r\n id={id}\r\n input={{ value: dateValue, onChange: handleChangeDate(id) }}\r\n meta={{ touched: true, error: false, submitFailed: false }}\r\n accomodationDialog\r\n containerClassName={classes.containerClassName}\r\n className={classes.wrapperClassName}\r\n inputClassName={classes.inputStyles}\r\n disabledDates={getDisabledRanges(id)}\r\n />\r\n\r\n <CloseIconWrapper>\r\n <IconButton\r\n style={{ padding: 4 }}\r\n onClick={handleDeleteDateRange({ id, ...dateValue })}\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </CloseIconWrapper>\r\n </DatePickerWrapper>\r\n ))}\r\n\r\n <Button\r\n variant=\"outlined\"\r\n classes={{\r\n root: buttonClasses.cancelBtnRoot,\r\n disabled: buttonClasses.cancelBtnDisabled\r\n }}\r\n disabled={activeDates.length >= 10}\r\n onClick={handleAddDateRange}\r\n style={{ marginTop: 5 }}\r\n >\r\n Add\r\n </Button>\r\n </Section>\r\n </Wrapper>\r\n );\r\n};\r\n\r\nexport default DeactivateDatesInput;\r\n","import React from 'react';\r\nimport { Field, reduxForm } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport {\r\n DEFAULT_LANGUAGE,\r\n AVAILABLE_LANGUAGES\r\n} from 'pages/create-activity/constants';\r\n\r\nimport {\r\n Input,\r\n MultipleSelectField,\r\n RadioButtonsGroup,\r\n FormActionButtons,\r\n DndUploadImage,\r\n PopoverWrapper\r\n} from 'components';\r\n\r\nimport HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from './styles';\r\nimport DeactivateDatesInput from '../deactivate-dates-input';\r\n\r\nconst initialValues = {\r\n activityType: 'Open',\r\n productCode: ''\r\n};\r\n\r\nconst GeneralCreate = ({\r\n handleSubmit,\r\n isUpdate,\r\n setSubmitButton,\r\n bookDates,\r\n ...otherProps\r\n}) => {\r\n const {\r\n languages,\r\n selectedLanguage,\r\n addLanguage,\r\n deleteLanguage,\r\n selectLanguage\r\n } = otherProps;\r\n const [t] = useTranslation();\r\n\r\n const classes = useStyles();\r\n const availableLanguages = [...AVAILABLE_LANGUAGES].filter(\r\n x => !languages.includes(x)\r\n );\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('General')}\r\n </Typography>\r\n <MultipleSelectField\r\n availableItems={availableLanguages}\r\n notAvailableToDeleteItems={[DEFAULT_LANGUAGE]}\r\n list={languages}\r\n selectedItem={selectedLanguage}\r\n addItem={addLanguage}\r\n deleteItem={deleteLanguage}\r\n selectItem={selectLanguage}\r\n />\r\n <form onSubmit={handleSubmit}>\r\n <div className={classes.row}>\r\n <div className={classes.column}>\r\n <Field\r\n className={classes.inputIndent}\r\n name=\"coverPhoto\"\r\n label=\"Cover photo *\"\r\n component={DndUploadImage}\r\n />\r\n </div>\r\n <div className={classes.column}>\r\n <Field\r\n name=\"title\"\r\n placeholder=\"Title\"\r\n className={classes.inputIndent}\r\n label=\"Title *\"\r\n component={Input}\r\n />\r\n {isUpdate && (\r\n <Field\r\n name=\"productCode\"\r\n disabled\r\n placeholder=\"Product code\"\r\n className={classes.inputIndent}\r\n label=\"Product code\"\r\n component={Input}\r\n />\r\n )}\r\n <div className={classes.activityTypeWrapper}>\r\n <Field\r\n name=\"activityType\"\r\n label={'Activity type'}\r\n list={['Open', 'Private']}\r\n component={RadioButtonsGroup}\r\n />\r\n\r\n <PopoverWrapper text=\"Activity type info sign\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className={classes.row}>\r\n <div className={classes.column}>\r\n <Field\r\n name=\"minParticipants\"\r\n isOnlyNumber={true}\r\n maxLength={9}\r\n placeholder=\"Number of Participants\"\r\n className={classes.inputIndent}\r\n label=\"Min. number of participants *\"\r\n component={Input}\r\n />\r\n </div>\r\n <div className={classes.column}>\r\n <Field\r\n name=\"maxParticipants\"\r\n isOnlyNumber={true}\r\n maxLength={9}\r\n placeholder=\"Number of Participants\"\r\n className={classes.inputIndent}\r\n label=\"Max. number of participants *\"\r\n component={Input}\r\n />\r\n </div>\r\n </div>\r\n <Field\r\n name=\"startingPoint\"\r\n placeholder=\"Starting point\"\r\n className={classes.inputIndent}\r\n label=\"Starting point *\"\r\n component={Input}\r\n />\r\n\r\n <div className={classes.row} style={{ marginBottom: 30 }}>\r\n <Field\r\n name=\"deactivatedDates\"\r\n label=\"Deactivated Days\"\r\n component={DeactivateDatesInput}\r\n bookDates={bookDates}\r\n />\r\n </div>\r\n \r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nexport default reduxForm({\r\n form: 'generalForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(GeneralCreate);\r\n","import {\r\n isRequired,\r\n isValidUploadedImageSize,\r\n isValidUploadedImageFormat,\r\n isNumber\r\n} from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (values.coverPhoto) {\r\n if (isRequired(values.coverPhoto.image || '', true)) {\r\n errors.coverPhoto = 'Cover photo is required';\r\n } else if (isValidUploadedImageSize(values.coverPhoto || '', true)) {\r\n errors.coverPhoto = 'Your file exceeded the size limit';\r\n } else if (isValidUploadedImageFormat(values.coverPhoto || '', true)) {\r\n errors.coverPhoto = `File could not be uploaded because the format is not supported. Please upload the file with the format png, jpg, jpeg`;\r\n }\r\n } else {\r\n errors.coverPhoto = 'Cover photo is required';\r\n }\r\n\r\n if (isRequired(values.title || '', true)) {\r\n errors.title = 'Title is required';\r\n }\r\n\r\n if (isNumber(values.guests, true)) {\r\n errors.guests = 'Guests are required';\r\n }\r\n\r\n if (isRequired(values.location || '', true)) {\r\n errors.location = 'Location is required';\r\n }\r\n\r\n if (isRequired(`${values.minNights || ''}`, true)) {\r\n errors.minNights = 'Nights are required';\r\n } else if (values.minNights < 1) {\r\n errors.minNights = 'Minimum 1 night';\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Field, reduxForm } from 'redux-form';\r\nimport classNames from 'classnames';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\nimport HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport { TRANSLATIONS } from 'translations';\r\n\r\nimport {\r\n DEFAULT_LANGUAGE,\r\n AVAILABLE_LANGUAGES\r\n} from 'pages/create-activity/constants';\r\n\r\nimport {\r\n Input,\r\n MultipleSelectField,\r\n FormActionButtons,\r\n DndUploadImage,\r\n CustomDateRangePicker,\r\n PopoverWrapper,\r\n TimePicker,\r\n ChipsInput,\r\n CustomColorPicker\r\n} from 'components/index';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from 'components/general-create/styles';\r\nimport DeactivateDatesInput from '../../deactivate-dates-input';\r\n\r\nconst initialValues = {\r\n productCode: '',\r\n color: ''\r\n};\r\n\r\nconst AccommodationGeneralCreate = ({\r\n handleSubmit,\r\n isUpdate,\r\n setSubmitButton,\r\n bookDates,\r\n colorHandler,\r\n color,\r\n ...otherProps\r\n}) => {\r\n const {\r\n languages,\r\n selectedLanguage,\r\n addLanguage,\r\n deleteLanguage,\r\n selectLanguage\r\n } = otherProps;\r\n const [t] = useTranslation();\r\n\r\n const classes = useStyles();\r\n const availableLanguages = [...AVAILABLE_LANGUAGES].filter(\r\n x => !languages.includes(x)\r\n );\r\n const [openColorPicker, setOpenColorPicker] = React.useState(false);\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('General')}\r\n </Typography>\r\n <MultipleSelectField\r\n availableItems={availableLanguages}\r\n notAvailableToDeleteItems={[DEFAULT_LANGUAGE]}\r\n list={languages}\r\n selectedItem={selectedLanguage}\r\n addItem={addLanguage}\r\n deleteItem={deleteLanguage}\r\n selectItem={selectLanguage}\r\n />\r\n <form onSubmit={handleSubmit}>\r\n <div className={classes.row}>\r\n <div className={classes.column}>\r\n <Field\r\n className={classes.inputIndent}\r\n name=\"coverPhoto\"\r\n label=\"Cover photo *\"\r\n component={DndUploadImage}\r\n />\r\n </div>\r\n <div className={classes.column}>\r\n <Field\r\n name=\"title\"\r\n placeholder=\"Title\"\r\n className={classes.inputIndent}\r\n label=\"Title *\"\r\n component={Input}\r\n />\r\n {isUpdate && (\r\n <Field\r\n name=\"productCode\"\r\n disabled\r\n placeholder=\"Product code\"\r\n className={classes.inputIndent}\r\n label=\"Product code\"\r\n component={Input}\r\n />\r\n )}\r\n <Field\r\n isOnlyNumber={true}\r\n maxLength={9}\r\n name=\"guests\"\r\n placeholder=\"Guests\"\r\n label=\"Guests *\"\r\n className={classes.inputIndent}\r\n component={Input}\r\n />\r\n </div>\r\n </div>\r\n <Field\r\n name=\"location\"\r\n placeholder=\"Location\"\r\n label=\"Location *\"\r\n className={classes.inputIndent}\r\n component={Input}\r\n />\r\n\r\n <div className={classes.row}>\r\n <div className={classNames(classes.column, classes.spaceBetween)}>\r\n <div className={classes.datePickerWrapper}>\r\n <Field\r\n name=\"availability\"\r\n label=\"Availability\"\r\n component={CustomDateRangePicker}\r\n />\r\n </div>\r\n\r\n <PopoverWrapper text=\"If you don't select the timestamps, the activity will be available all the time\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n\r\n <div className={classNames(classes.column, classes.spaceBetween)}>\r\n <Field\r\n name=\"checkInAfter\"\r\n label=\"Check-in after *\"\r\n isHiddenErrorMsg={true}\r\n className={classes.timePicker}\r\n component={TimePicker}\r\n />\r\n\r\n <Field\r\n name=\"checkOutBefore\"\r\n label=\"Check-out before *\"\r\n isHiddenErrorMsg={true}\r\n className={classes.timePicker}\r\n component={TimePicker}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className={classes.spaceBetween} style={{ marginBottom: 30 }}>\r\n <Field\r\n name=\"deactivatedDates\"\r\n label=\"Deactivated Days\"\r\n component={DeactivateDatesInput}\r\n bookDates={bookDates}\r\n />\r\n </div>\r\n\r\n <Field\r\n name=\"bedDetails\"\r\n id=\"bedDetails\"\r\n className={classes.inputIndent}\r\n label={\r\n <div className={classes.labelWithHelpIcon}>\r\n <span>{t(TRANSLATIONS[selectedLanguage].bedDetails)}</span>\r\n <PopoverWrapper\r\n text={`${t(\r\n TRANSLATIONS[selectedLanguage].includedHelpMessage\r\n )}`}\r\n >\r\n <HelpIcon className={classes.chipsHelpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n }\r\n placeholder={`Hit Enter to add an item`}\r\n maxLength=\"255\"\r\n component={ChipsInput}\r\n />\r\n\r\n <div className={classes.row}>\r\n <div className={classes.column}>\r\n <Field\r\n name=\"minNights\"\r\n isOnlyNumber={true}\r\n maxLength={9}\r\n placeholder=\"Number of nights\"\r\n className={classes.inputIndent}\r\n label=\"Min. number of nights *\"\r\n component={Input}\r\n />\r\n </div>\r\n <div className={classNames(classes.column, classes.spaceBetween)}>\r\n <div className={classes.colorPaletteWrapper}>\r\n <Typography\r\n variant=\"h3\"\r\n style={{\r\n marginBottom: '6px',\r\n textTransform: 'uppercase'\r\n }}\r\n >\r\n {t('Booking tiles color')}\r\n </Typography>\r\n <div\r\n className={classes.colorPalette}\r\n style={{ backgroundColor: color }}\r\n >\r\n <div\r\n onClick={() => setOpenColorPicker(true)}\r\n className={classes.editIconWrapper}\r\n >\r\n <EditIcon className={classes.editIcon} />\r\n </div>\r\n {openColorPicker && (\r\n <Field\r\n name=\"color\"\r\n onClose={setOpenColorPicker}\r\n defaultColor={color}\r\n onChange={colorHandler}\r\n component={CustomColorPicker}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n <div className={classNames(classes.column)}>\r\n <PopoverWrapper text=\"This color will be displayed on the booking tiles for accommodations booking on the Show Calendar page.\">\r\n <HelpIcon className={classes.helpIconColor} />\r\n </PopoverWrapper>\r\n </div> \r\n </div>\r\n </div>\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nexport default reduxForm({\r\n form: 'generalForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(AccommodationGeneralCreate);\r\n","import { isRequired } from 'utils/validators';\r\nimport { TRANSLATIONS } from 'translations/index';\r\n\r\nconst SECOND_LANGUAGE = 'Norwegian';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (isRequired(values[`title`] || '', true)) {\r\n errors[`title`] = TRANSLATIONS[SECOND_LANGUAGE].titleIsRequired;\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Field, reduxForm } from 'redux-form';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport {\r\n DEFAULT_LANGUAGE,\r\n AVAILABLE_LANGUAGES\r\n} from 'pages/create-activity/constants';\r\n\r\nimport { FormActionButtons, Input, MultipleSelectField } from 'components';\r\nimport { TRANSLATIONS } from 'translations/index';\r\n\r\nimport validate from './validateSecondLanguage';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst GeneralCreateSecondLanguage = ({\r\n save,\r\n onSubmit,\r\n handleSubmit,\r\n setSubmitButton,\r\n isUpdate,\r\n ...otherProps\r\n}) => {\r\n const {\r\n languages,\r\n selectedLanguage,\r\n addLanguage,\r\n deleteLanguage,\r\n selectLanguage\r\n } = otherProps;\r\n const [t] = useTranslation();\r\n\r\n const classes = useStyles();\r\n const availableLanguages = [...AVAILABLE_LANGUAGES].filter(\r\n x => !languages.includes(x)\r\n );\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('General')}\r\n </Typography>\r\n <MultipleSelectField\r\n availableItems={availableLanguages}\r\n notAvailableToDeleteItems={[DEFAULT_LANGUAGE]}\r\n list={languages}\r\n selectedItem={selectedLanguage}\r\n addItem={addLanguage}\r\n deleteItem={deleteLanguage}\r\n selectItem={selectLanguage}\r\n />\r\n <form onSubmit={handleSubmit}>\r\n <Field\r\n name={`title`}\r\n inputProps={{ maxLength: 255 }}\r\n label={`${TRANSLATIONS[selectedLanguage].title} *`}\r\n placeholder={`${TRANSLATIONS[selectedLanguage].title}`}\r\n className={classes.inputIndent}\r\n component={Input}\r\n />\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nexport default reduxForm({\r\n form: `generalForm`,\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate\r\n})(GeneralCreateSecondLanguage);\r\n","import { isRequired } from 'utils/validators';\r\nimport { TRANSLATIONS } from 'translations/index';\r\n\r\nconst SECOND_LANGUAGE = 'Norwegian';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (isRequired(values[`title`] || '', true)) {\r\n errors[`title`] = TRANSLATIONS[SECOND_LANGUAGE].titleIsRequired;\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Field, reduxForm } from 'redux-form';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\nimport HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport {\r\n DEFAULT_LANGUAGE,\r\n AVAILABLE_LANGUAGES\r\n} from 'pages/create-activity/constants';\r\n\r\nimport {\r\n ChipsInput,\r\n FormActionButtons,\r\n Input,\r\n MultipleSelectField,\r\n PopoverWrapper\r\n} from 'components';\r\nimport { TRANSLATIONS } from 'translations/index';\r\n\r\nimport validate from './validateSecondLanguage';\r\n\r\nimport { useStyles } from 'components/general-create/styles';\r\n\r\nconst AccommodationGeneralCreateSecondLanguage = ({\r\n save,\r\n onSubmit,\r\n handleSubmit,\r\n setSubmitButton,\r\n isUpdate,\r\n ...otherProps\r\n}) => {\r\n const {\r\n languages,\r\n selectedLanguage,\r\n addLanguage,\r\n deleteLanguage,\r\n selectLanguage\r\n } = otherProps;\r\n const [t] = useTranslation();\r\n\r\n const classes = useStyles();\r\n const availableLanguages = [...AVAILABLE_LANGUAGES].filter(\r\n x => !languages.includes(x)\r\n );\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('General')}\r\n </Typography>\r\n <MultipleSelectField\r\n availableItems={availableLanguages}\r\n notAvailableToDeleteItems={[DEFAULT_LANGUAGE]}\r\n list={languages}\r\n selectedItem={selectedLanguage}\r\n addItem={addLanguage}\r\n deleteItem={deleteLanguage}\r\n selectItem={selectLanguage}\r\n />\r\n <form onSubmit={handleSubmit}>\r\n <Field\r\n name={`title`}\r\n inputProps={{ maxLength: 255 }}\r\n label={`${TRANSLATIONS[selectedLanguage].title} *`}\r\n placeholder={`${TRANSLATIONS[selectedLanguage].title}`}\r\n className={classes.inputIndent}\r\n component={Input}\r\n />\r\n <Field\r\n name=\"bedDetails\"\r\n id=\"bedDetails\"\r\n className={classes.inputIndent}\r\n label={\r\n <div className={classes.labelWithHelpIcon}>\r\n <span>{TRANSLATIONS[selectedLanguage].bedDetails}</span>\r\n <PopoverWrapper\r\n text={`${TRANSLATIONS[selectedLanguage].includedHelpMessage}`}\r\n >\r\n <HelpIcon className={classes.chipsHelpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n }\r\n placeholder={`Trykk Enter for Ã¥ legge til et element`}\r\n maxLength=\"255\"\r\n component={ChipsInput}\r\n />\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nexport default reduxForm({\r\n form: `generalForm`,\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate\r\n})(AccommodationGeneralCreateSecondLanguage);\r\n","import { isRequired } from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (isRequired(values[`overview`] || '', true)) {\r\n errors[`overview`] = 'overviewIsRequired';\r\n }\r\n\r\n if (isRequired(values[`cancellation`] || '', true)) {\r\n errors[`cancellation`] = 'cancellationIsRequired';\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme =>({\r\n wrapper: {\r\n margin: '30px 0',\r\n [theme.breakpoints.down('sm')]: {\r\n margin:'20px 20px 0px 20px'\r\n }\r\n },\r\n title: {\r\n margin: '0 0 12px',\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }\r\n },\r\n inputIndent: {\r\n marginBottom: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n \r\n padding: '0px 20px 0px 20px',\r\n alignItems: 'flex-center',\r\n }\r\n },\r\n labelWithHelpIcon: {\r\n display: 'flex',\r\n position: 'relative'\r\n },\r\n helpIcon: {\r\n position: 'absolute',\r\n fontSize: '18px',\r\n top: '-4px',\r\n marginLeft: '6px'\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Field, reduxForm } from 'redux-form';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport { DEFAULT_LANGUAGE } from 'pages/create-activity/constants';\r\nimport { TRANSLATIONS } from 'translations/index';\r\n\r\nimport {\r\n FormActionButtons,\r\n MultipleSelectField,\r\n TextareaInput,\r\n ChipsInput,\r\n PopoverWrapper\r\n} from 'components';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst DescriptionCreate = ({\r\n handleSubmit,\r\n setSubmitButton,\r\n isUpdate,\r\n ...otherProps\r\n}) => {\r\n const {\r\n languages,\r\n selectedLanguage,\r\n addLanguage,\r\n deleteLanguage,\r\n selectLanguage\r\n } = otherProps;\r\n const [t] = useTranslation();\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('Description')}\r\n </Typography>\r\n <MultipleSelectField\r\n availableItems={[]}\r\n notAvailableToDeleteItems={[DEFAULT_LANGUAGE]}\r\n list={languages}\r\n selectedItem={selectedLanguage}\r\n addItem={addLanguage}\r\n deleteItem={deleteLanguage}\r\n selectItem={selectLanguage}\r\n />\r\n <form onSubmit={handleSubmit}>\r\n <Field\r\n name={`overview`}\r\n className={classes.inputIndent}\r\n label={`${TRANSLATIONS[selectedLanguage].generalInfo} *`}\r\n placeholder={`${TRANSLATIONS[selectedLanguage].generalInfo}`}\r\n maxLength=\"2000\"\r\n component={TextareaInput}\r\n isTranslateError={true}\r\n language={selectedLanguage}\r\n />\r\n <Field\r\n name={`whatToBring`}\r\n id={'whatToBring'}\r\n className={classes.inputIndent}\r\n label={\r\n <div className={classes.labelWithHelpIcon}>\r\n <span>{t(TRANSLATIONS[selectedLanguage].whatToBring)}</span>\r\n <PopoverWrapper\r\n text={`${TRANSLATIONS[selectedLanguage].includedHelpMessage}`}\r\n >\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n }\r\n placeholder={\r\n TRANSLATIONS[selectedLanguage]['Hit Enter to add an item']\r\n }\r\n maxLength=\"1000\"\r\n component={ChipsInput}\r\n />\r\n <Field\r\n name={`additionalInfo`}\r\n className={classes.inputIndent}\r\n label={`${TRANSLATIONS[selectedLanguage].additionalInfo}`}\r\n placeholder={`${TRANSLATIONS[selectedLanguage].additionalInfo}`}\r\n maxLength=\"1000\"\r\n component={TextareaInput}\r\n isTranslateError={true}\r\n language={selectedLanguage}\r\n />\r\n <Field\r\n name={`cancellation`}\r\n className={classes.inputIndent}\r\n label={\r\n <div className={classes.labelWithHelpIcon}>\r\n <span>{t(TRANSLATIONS[selectedLanguage].cancellation)} *</span>\r\n <PopoverWrapper\r\n text={`${TRANSLATIONS[selectedLanguage].cancellationHelpMessage}`}\r\n >\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n }\r\n placeholder={`${TRANSLATIONS[selectedLanguage].cancellation}`}\r\n maxLength=\"1000\"\r\n component={TextareaInput}\r\n isTranslateError={true}\r\n language={selectedLanguage}\r\n />\r\n <Field\r\n name={`included`}\r\n id={'included'}\r\n className={classes.inputIndent}\r\n label={\r\n <div className={classes.labelWithHelpIcon}>\r\n <span>{t(TRANSLATIONS[selectedLanguage].included)}</span>\r\n <PopoverWrapper\r\n text={`${TRANSLATIONS[selectedLanguage].includedHelpMessage}`}\r\n >\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n }\r\n placeholder={\r\n TRANSLATIONS[selectedLanguage]['Hit Enter to add an item']\r\n }\r\n maxLength=\"1000\"\r\n component={ChipsInput}\r\n />\r\n <Field\r\n name={`notIncluded`}\r\n id={'notIncluded'}\r\n className={classes.inputIndent}\r\n label={\r\n <div className={classes.labelWithHelpIcon}>\r\n <span>{t(TRANSLATIONS[selectedLanguage].notIncluded)}</span>\r\n <PopoverWrapper\r\n text={`${TRANSLATIONS[selectedLanguage].includedHelpMessage}`}\r\n >\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n }\r\n placeholder={\r\n TRANSLATIONS[selectedLanguage]['Hit Enter to add an item']\r\n }\r\n maxLength=\"1000\"\r\n component={ChipsInput}\r\n />\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nexport default reduxForm({\r\n form: 'descriptionForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: false,\r\n touchOnBlur: false,\r\n validate\r\n})(DescriptionCreate);\r\n","import { isRequired } from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (isRequired(values[`overview`] || '', true)) {\r\n errors[`overview`] = 'overviewIsRequired';\r\n }\r\n \r\n if (isRequired(values[`cancellation`] || '', true)) {\r\n errors[`cancellation`] = 'cancellationIsRequired';\r\n }\r\n\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import React from 'react';\r\nimport { Field, reduxForm } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport { DEFAULT_LANGUAGE } from 'pages/create-activity/constants';\r\nimport { TRANSLATIONS } from 'translations/index';\r\n\r\nimport {\r\n FormActionButtons,\r\n MultipleSelectField,\r\n TextareaInput,\r\n ChipsInput,\r\n PopoverWrapper\r\n} from 'components';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from 'components/description-create/styles';\r\n\r\nconst AccommodationDescriptionCreate = ({\r\n handleSubmit,\r\n setSubmitButton,\r\n isUpdate,\r\n ...otherProps\r\n}) => {\r\n const {\r\n languages,\r\n selectedLanguage,\r\n addLanguage,\r\n deleteLanguage,\r\n selectLanguage\r\n } = otherProps;\r\n const [t] = useTranslation();\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('Description')}\r\n </Typography>\r\n <MultipleSelectField\r\n availableItems={[]}\r\n notAvailableToDeleteItems={[DEFAULT_LANGUAGE]}\r\n list={languages}\r\n selectedItem={selectedLanguage}\r\n addItem={addLanguage}\r\n deleteItem={deleteLanguage}\r\n selectItem={selectLanguage}\r\n />\r\n <form onSubmit={handleSubmit}>\r\n <Field\r\n name={`overview`}\r\n className={classes.inputIndent}\r\n label={`${TRANSLATIONS[selectedLanguage].generalInfo} *`}\r\n placeholder={`${TRANSLATIONS[selectedLanguage].generalInfo}`}\r\n maxLength=\"2000\"\r\n component={TextareaInput}\r\n isTranslateError={true}\r\n language={selectedLanguage}\r\n />\r\n <Field\r\n name={`additionalInfo`}\r\n className={classes.inputIndent}\r\n label={`${TRANSLATIONS[selectedLanguage].additionalInfo}`}\r\n placeholder={`${TRANSLATIONS[selectedLanguage].additionalInfo}`}\r\n maxLength=\"1000\"\r\n component={TextareaInput}\r\n isTranslateError={true}\r\n language={selectedLanguage}\r\n />\r\n <Field\r\n name={`cancellation`}\r\n className={classes.inputIndent}\r\n label={\r\n <div className={classes.labelWithHelpIcon}>\r\n <span>{t(TRANSLATIONS[selectedLanguage].cancellation)} *</span>\r\n <PopoverWrapper\r\n text={`${TRANSLATIONS[selectedLanguage].cancellationHelpMessage}`}\r\n >\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n }\r\n placeholder={`${TRANSLATIONS[selectedLanguage].cancellation}`}\r\n maxLength=\"1000\"\r\n component={TextareaInput}\r\n isTranslateError={true}\r\n language={selectedLanguage}\r\n />\r\n <Field\r\n name={`included`}\r\n id={'included'}\r\n className={classes.inputIndent}\r\n label={\r\n <div className={classes.labelWithHelpIcon}>\r\n <span>{t(TRANSLATIONS[selectedLanguage].included)}</span>\r\n <PopoverWrapper\r\n text={`${TRANSLATIONS[selectedLanguage].includedHelpMessage}`}\r\n >\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n }\r\n placeholder={\r\n TRANSLATIONS[selectedLanguage]['Hit Enter to add an item']\r\n }\r\n maxLength=\"1000\"\r\n component={ChipsInput}\r\n />\r\n <Field\r\n name={`notIncluded`}\r\n id={'notIncluded'}\r\n className={classes.inputIndent}\r\n label={\r\n <div className={classes.labelWithHelpIcon}>\r\n <span>{t(TRANSLATIONS[selectedLanguage].notIncluded)}</span>\r\n <PopoverWrapper\r\n text={`${TRANSLATIONS[selectedLanguage].includedHelpMessage}`}\r\n >\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n }\r\n placeholder={\r\n TRANSLATIONS[selectedLanguage]['Hit Enter to add an item']\r\n }\r\n maxLength=\"1000\"\r\n component={ChipsInput}\r\n />\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nexport default reduxForm({\r\n form: 'descriptionForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: false,\r\n touchOnBlur: false,\r\n validate\r\n})(AccommodationDescriptionCreate);\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n wrapper: {\r\n margin: '78px 0 30px'\r\n }\r\n});\r\n","import React from 'react';\r\n\r\nimport {\r\n SCHEDULE_SECTION,\r\n INITIAL_ACTIVITY_FORM_DATA\r\n} from 'pages/create-activity/constants';\r\n\r\nimport { ScheduleDate, ScheduleDateTime, SchedulePass } from 'components';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst ScheduleCreate = ({\r\n selectedTabIndex,\r\n onSubmit,\r\n getPricesData,\r\n setSubmitButton,\r\n isUpdate\r\n}) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n {selectedTabIndex === SCHEDULE_SECTION.dateNoTime && (\r\n <ScheduleDate\r\n onSubmit={values => onSubmit(values, 'scheduleDateForm')}\r\n getPricesData={values => getPricesData(values, 'pricesDailyForm')}\r\n initialValues={INITIAL_ACTIVITY_FORM_DATA['scheduleDateForm']}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )}\r\n {selectedTabIndex === SCHEDULE_SECTION.dateTime && (\r\n <ScheduleDateTime\r\n onSubmit={values => onSubmit(values, 'scheduleDateTimeForm')}\r\n getPricesData={values =>\r\n getPricesData(values, 'pricesDailyScheduleForm')\r\n }\r\n initialValues={INITIAL_ACTIVITY_FORM_DATA['scheduleDateTimeForm']}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )}\r\n {selectedTabIndex === SCHEDULE_SECTION.pass && (\r\n <SchedulePass\r\n onSubmit={values => onSubmit(values, 'schedulePassForm')}\r\n initialValues={INITIAL_ACTIVITY_FORM_DATA['schedulePassForm']}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ScheduleCreate;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n wrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n boxShadow: '0 1px 0 #e2ebf6',\r\n marginBottom: '30px'\r\n },\r\n item: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '15px 0 13px',\r\n borderBottom: '2px solid transparent',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n color: '#59758b',\r\n marginRight: '20px',\r\n '&:hover': {\r\n cursor: 'pointer'\r\n }\r\n },\r\n selected: {\r\n color: '#000000',\r\n fontWeight: '500',\r\n borderBottom: '2px solid #0e8bb4',\r\n '&:hover': {\r\n cursor: 'default'\r\n }\r\n },\r\n closeBtn: {\r\n color: '#59758b',\r\n fontSize: '13px',\r\n marginLeft: '4px',\r\n '&:hover': {\r\n cursor: 'pointer'\r\n }\r\n },\r\n addBtn: {\r\n color: '#0e8bb4',\r\n fontSize: '20px',\r\n '&:hover': {\r\n cursor: 'pointer'\r\n }\r\n }\r\n});\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { DropdownIconButton } from 'components';\r\n\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n// import AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst MultipleSelectField = ({\r\n selectedItem,\r\n list,\r\n availableItems,\r\n notAvailableToDeleteItems,\r\n addItem,\r\n deleteItem,\r\n selectItem,\r\n className\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const isAvailableToDelete = item => {\r\n return !notAvailableToDeleteItems.filter(\r\n notAvailableItem => notAvailableItem === item\r\n ).length;\r\n };\r\n\r\n const onDeleteHandler = (e, item) => {\r\n e.stopPropagation();\r\n deleteItem(item);\r\n };\r\n\r\n return (\r\n <div className={classNames(classes.wrapper, className)}>\r\n {list.map((item, index) => (\r\n <div\r\n key={index}\r\n onClick={() => selectItem(item)}\r\n className={classNames(classes.item, {\r\n [classes.selected]: selectedItem === item\r\n })}\r\n >\r\n {item}\r\n {isAvailableToDelete(item) && (\r\n <CloseIcon\r\n className={classes.closeBtn}\r\n onClick={e => onDeleteHandler(e, item)}\r\n />\r\n )}\r\n </div>\r\n ))}\r\n {availableItems.length > 0 && (\r\n <DropdownIconButton list={availableItems} click={addItem}>\r\n {t('New language')}\r\n </DropdownIconButton>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default MultipleSelectField;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const baseStyles = makeStyles({\r\n wrapper: {\r\n margin: '0 0 2px 9px'\r\n },\r\n circleIcon: {\r\n width: '19px',\r\n height: '19px',\r\n marginRight: '5px'\r\n },\r\n labelText: {\r\n marginBottom: '-2px',\r\n fontSize: '13px'\r\n }\r\n});\r\n\r\nexport const menuItemStyles = makeStyles({\r\n root: {\r\n color: '#666666',\r\n '&:hover': {\r\n color: '#000000'\r\n }\r\n }\r\n});\r\n\r\nexport const menuListStyles = makeStyles({\r\n list: {\r\n padding: 0,\r\n border: '1px solid #F0F0F0',\r\n borderRadius: '4px',\r\n boxShadow: '1px 2px 15px rgba(0,0,0, 0.08)',\r\n minWidth: '140px'\r\n }\r\n});\r\n\r\nexport const iconButtonStyles = makeStyles({\r\n root: {\r\n marginLeft: '-12px',\r\n fontSize: '10px',\r\n color: '#0E8BB4'\r\n }\r\n});\r\n","import React from 'react';\r\n\r\nimport Menu from '@material-ui/core/Menu';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport { Button } from '@material-ui/core';\r\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\r\n\r\nimport {\r\n baseStyles,\r\n menuItemStyles,\r\n menuListStyles,\r\n iconButtonStyles\r\n} from './styles';\r\n\r\nconst DropdownIconButton = ({ list, click, children }) => {\r\n const baseClasses = baseStyles();\r\n const menuItemClasses = menuItemStyles();\r\n const menuListClasses = menuListStyles();\r\n const iconButtonClasses = iconButtonStyles();\r\n\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n\r\n const onOpenHandler = event => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const onCloseHandler = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const onClickHandler = item => {\r\n click(item);\r\n };\r\n\r\n return (\r\n <div className={baseClasses.wrapper}>\r\n <Button classes={iconButtonClasses} onClick={onOpenHandler}>\r\n <AddCircleOutlineIcon className={baseClasses.circleIcon} />\r\n <span className={baseClasses.labelText}>{children}</span>\r\n </Button>\r\n <Menu\r\n id=\"simple-menu\"\r\n classes={menuListClasses}\r\n anchorEl={anchorEl}\r\n keepMounted\r\n open={Boolean(anchorEl)}\r\n onClose={onCloseHandler}\r\n >\r\n {list.map((item, index) => (\r\n <MenuItem\r\n classes={menuItemClasses}\r\n key={index}\r\n onClick={() => onClickHandler(item)}\r\n >\r\n {item}\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n </div>\r\n );\r\n};\r\n\r\nexport default DropdownIconButton;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n wrapper: {\r\n marginBottom: '17px'\r\n },\r\n label: {\r\n marginBottom: '6px',\r\n color: '#071B27',\r\n textTransform: 'uppercase',\r\n fontSize: 10,\r\n lineHeight: '12px'\r\n },\r\n radioBtnLabelChecked: {\r\n color: '#000000',\r\n fontWeight: 500\r\n }\r\n});\r\n\r\nexport const formControlLabelStyles = makeStyles({\r\n root: {\r\n marginRight: '25px'\r\n },\r\n label: {\r\n color: '#838383'\r\n }\r\n});\r\n\r\nexport const radioBtnStyles = makeStyles(theme => ({\r\n root: {\r\n color: theme.baseUI.color,\r\n fontSize: 18\r\n },\r\n checked: {\r\n color: theme.baseUI.color\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\n\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\n\r\nimport { useStyles, formControlLabelStyles, radioBtnStyles } from './styles';\r\n\r\nconst RadioButtonsGroup = ({\r\n input,\r\n label,\r\n list,\r\n isId,\r\n checkboxTitleField,\r\n radioGroupRootClass,\r\n labelClass,\r\n wrapperClass\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const formControlLabelClasses = formControlLabelStyles();\r\n const radioBtnSClasses = radioBtnStyles();\r\n\r\n const isSelected = item => {\r\n if (isId) {\r\n return item.id === input.value.id;\r\n }\r\n\r\n return item === input.value;\r\n };\r\n\r\n const onChangeHandler = e => {\r\n if (isId) {\r\n const updatedItem = list.find(item => item.id === e.target.value);\r\n input.onChange(updatedItem);\r\n\r\n return;\r\n }\r\n\r\n input.onChange(e.target.value);\r\n };\r\n\r\n return (\r\n <div className={classNames(classes.wrapper, wrapperClass)}>\r\n {label && <div className={classes.label}>{t(label)}</div>}\r\n <RadioGroup\r\n aria-label=\"position\"\r\n name=\"position\"\r\n row\r\n value={isId ? input.value.id || null : input.value}\r\n onChange={onChangeHandler}\r\n classes={{ root: radioGroupRootClass }}\r\n >\r\n {list.map((item, index) => (\r\n <FormControlLabel\r\n classes={formControlLabelClasses}\r\n key={index}\r\n value={isId ? item.id : item}\r\n control={<Radio color=\"default\" classes={radioBtnSClasses} />}\r\n label={\r\n <div\r\n className={classNames(\r\n {\r\n [classes.radioBtnLabelChecked]: isSelected(item)\r\n },\r\n labelClass\r\n )}\r\n >\r\n {checkboxTitleField ? item[checkboxTitleField] : t(item)}\r\n </div>\r\n }\r\n labelPlacement=\"end\"\r\n />\r\n ))}\r\n </RadioGroup>\r\n </div>\r\n );\r\n};\r\n\r\nexport default RadioButtonsGroup;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst ACCOMMODATION_AND_ACTIVITIES_PAGE = '/accommodations-and-activities';\r\nconst ACCOMMODATIONS_TAB = 0;\r\nconst ACTIVITIES_TAB = 1;\r\n\r\nconst FormActionButtons = ({\r\n cancelPath,\r\n actionLabel,\r\n isDisabledAction,\r\n form,\r\n cancelCallback,\r\n setSubmitButton,\r\n integration,\r\n isUpdate\r\n}) => {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const confirm = React.useContext(ConfirmContext);\r\n const [t] = useTranslation();\r\n\r\n const pathName = history.location.pathname;\r\n\r\n let historyState = {};\r\n\r\n if (cancelPath === ACCOMMODATION_AND_ACTIVITIES_PAGE) {\r\n if (pathName.indexOf('accommodations') >= 0) {\r\n historyState = {\r\n state: {\r\n tabNumber: ACCOMMODATIONS_TAB\r\n }\r\n };\r\n } else if (pathName.indexOf('activities') >= 0) {\r\n historyState = {\r\n state: {\r\n tabNumber: ACTIVITIES_TAB\r\n }\r\n };\r\n }\r\n }\r\n\r\n const onCancelHandler = () => {\r\n confirm({\r\n title: 'Are you sure you want to cancel?',\r\n confirmationText: 'Cancel',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n if (pathName === cancelPath && cancelCallback) {\r\n cancelCallback();\r\n return;\r\n }\r\n history.push({\r\n pathname: cancelPath,\r\n ...historyState\r\n });\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={onCancelHandler}\r\n classes={{\r\n root: classes.cancelBtnRoot\r\n }}\r\n >\r\n {t('Cancel')}\r\n </Button>\r\n {!integration && isUpdate && (\r\n <Button\r\n type=\"submit\"\r\n variant=\"contained\"\r\n className={classes.saveButton}\r\n classes={{\r\n root: classes.actionBtnRoot,\r\n disabled: classes.actionBtnDisabled\r\n }}\r\n onClick={() => setSubmitButton && setSubmitButton('save')}\r\n >\r\n {t('Save')}\r\n </Button>\r\n )}\r\n <Button\r\n type=\"submit\"\r\n variant=\"contained\"\r\n disabled={isDisabledAction}\r\n classes={{\r\n root: classes.actionBtnRoot,\r\n disabled: classes.actionBtnDisabled\r\n }}\r\n form={form}\r\n onClick={() => setSubmitButton && setSubmitButton('next')}\r\n >\r\n {t(actionLabel)}\r\n </Button>\r\n </div>\r\n );\r\n};\r\n\r\nexport default FormActionButtons;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n label: {\r\n marginBottom: '6px',\r\n textTransform: 'uppercase'\r\n },\r\n defaultZone: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n width: '100%',\r\n height: '204px',\r\n backgroundColor: '#fff',\r\n border: '1.5px dashed #beceda',\r\n borderRadius: '3px',\r\n boxSizing: 'border-box',\r\n position: 'relative'\r\n },\r\n imageZone: {\r\n border: '1px solid #BECEDA'\r\n },\r\n content: {\r\n textAlign: 'center'\r\n },\r\n imageIcon: {\r\n color: '#335267',\r\n opacity: '0.7',\r\n fontSize: '46px',\r\n marginBottom: '3px'\r\n },\r\n description: {\r\n color: '#335267',\r\n maxWidth: '160px',\r\n lineHeight: '18px'\r\n },\r\n browseWord: {\r\n color: '#008db0',\r\n textDecoration: 'underline',\r\n fontWeight: '600',\r\n '&:hover': {\r\n cursor: 'pointer'\r\n }\r\n },\r\n input: {\r\n display: 'none'\r\n },\r\n imageBlock: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n alignItems: 'flex-end',\r\n width: '100%',\r\n height: '100%',\r\n backgroundSize: 'contain',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center'\r\n },\r\n baseIcon: {\r\n color: 'white',\r\n background: '#464646',\r\n fontSize: '16px',\r\n padding: '4px',\r\n cursor: 'pointer'\r\n },\r\n editBtnLabel: {\r\n height: '24px'\r\n },\r\n deleteIcon: {\r\n marginLeft: '1px'\r\n },\r\n drag: {\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: '#C6DBE0',\r\n opacity: 0.5,\r\n position: 'absolute',\r\n top: 0,\r\n left: 0\r\n },\r\n error: {\r\n border: '1px solid #EB5757'\r\n },\r\n errorMsg: {\r\n marginBottom: '30px'\r\n },\r\n loaderWrapper: {\r\n backgroundColor: '#F7F7F7'\r\n }\r\n});\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Typography } from '@material-ui/core';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport CropOriginalIcon from '@material-ui/icons/CropOriginal';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport DeleteOutlineIcon from '@material-ui/icons/DeleteOutline';\r\n\r\nimport { CircularLoader } from 'components';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst DndUploadImage = ({\r\n input,\r\n label,\r\n className,\r\n isDelete,\r\n errorClass,\r\n meta: { touched, error }\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const confirm = React.useContext(ConfirmContext);\r\n\r\n const [drag, setDrag] = React.useState(false);\r\n const [isLoading, setLoading] = React.useState(false);\r\n\r\n const dropRef = React.createRef();\r\n let dragCounter = 0;\r\n\r\n const handleDrag = e => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n };\r\n\r\n const handleDragIn = e => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n dragCounter++;\r\n\r\n if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\r\n setDrag(true);\r\n }\r\n };\r\n\r\n const handleDragOut = e => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n dragCounter--;\r\n\r\n if (dragCounter === 0) {\r\n setDrag(false);\r\n }\r\n };\r\n\r\n const handleDrop = e => {\r\n setLoading(true);\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n setDrag(false);\r\n\r\n if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {\r\n let reader = new FileReader();\r\n const file = e.dataTransfer.files[0];\r\n\r\n reader.onload = imageEvent => {\r\n setLoading(false);\r\n onChangeHandler({\r\n file: file,\r\n image: imageEvent.target.result\r\n });\r\n };\r\n\r\n reader.readAsDataURL(e.dataTransfer.files[0]);\r\n e.dataTransfer.clearData();\r\n dragCounter = 0;\r\n } else {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const uploadImage = e => {\r\n if (!e.target.files.length) return;\r\n\r\n setLoading(true);\r\n\r\n let reader = new FileReader();\r\n const file = e.target.files[0];\r\n\r\n reader.onload = imageEvent => {\r\n setLoading(false);\r\n onChangeHandler({\r\n file: file,\r\n image: imageEvent.target.result\r\n });\r\n };\r\n\r\n reader.readAsDataURL(e.target.files[0]);\r\n };\r\n\r\n React.useEffect(() => {\r\n const div = dropRef.current;\r\n\r\n div.addEventListener('dragenter', handleDragIn);\r\n div.addEventListener('dragleave', handleDragOut);\r\n div.addEventListener('dragover', handleDrag);\r\n div.addEventListener('drop', handleDrop);\r\n\r\n return () => {\r\n div.removeEventListener('dragenter', handleDragIn);\r\n div.removeEventListener('dragleave', handleDragOut);\r\n div.removeEventListener('dragover', handleDrag);\r\n div.removeEventListener('drop', handleDrop);\r\n };\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const onChangeHandler = obj => {\r\n input.onChange(obj);\r\n };\r\n\r\n const deleteImage = () => {\r\n confirm({\r\n title: 'Are you sure you want to delete it?',\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() =>\r\n onChangeHandler({\r\n file: {},\r\n image: null\r\n })\r\n )\r\n .catch(() => {});\r\n };\r\n\r\n return (\r\n <div className={className}>\r\n <Typography className={classes.label} variant=\"h3\">\r\n {t(label)}\r\n </Typography>\r\n\r\n <div\r\n className={classNames(\r\n classes.defaultZone,\r\n {\r\n [classes.imageZone]: input.value.image && input.value.image.length\r\n },\r\n { [classes.error]: touched && error }\r\n )}\r\n ref={dropRef}\r\n >\r\n <CircularLoader\r\n isLoading={isLoading}\r\n className={classes.loaderWrapper}\r\n />\r\n {drag && <div className={classes.drag}>{''}</div>}\r\n <input\r\n onChange={uploadImage}\r\n accept=\".png, .jpg, .jpeg\"\r\n className={classes.input}\r\n id={`icon-button-file-${input.name}`}\r\n type=\"file\"\r\n />\r\n {input.value.image && input.value.image.length ? (\r\n <div\r\n style={{ backgroundImage: `url(${input.value.image})` }}\r\n className={classes.imageBlock}\r\n >\r\n <label\r\n htmlFor={`icon-button-file-${input.name}`}\r\n className={classes.editBtnLabel}\r\n >\r\n <EditIcon className={classes.baseIcon} />\r\n </label>\r\n {isDelete && (\r\n <DeleteOutlineIcon\r\n onClick={deleteImage}\r\n className={classNames(classes.baseIcon, classes.deleteIcon)}\r\n />\r\n )}\r\n </div>\r\n ) : (\r\n <div className={classes.content}>\r\n <CropOriginalIcon className={classes.imageIcon} />\r\n <Typography className={classes.description} variant=\"body1\">\r\n {t('Drop file here or')}{' '}\r\n <label\r\n htmlFor={`icon-button-file-${input.name}`}\r\n className={classes.browseWord}\r\n >\r\n {t('browse')}\r\n </label>{' '}\r\n {t('(file size limit is 10MB)')}\r\n </Typography>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {touched && error && (\r\n <FormHelperText\r\n error\r\n classes={{ root: classNames(classes.errorMsg, errorClass) }}\r\n >\r\n {t(error)}\r\n </FormHelperText>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default DndUploadImage;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const autocompleteStyles = makeStyles({\r\n root: {\r\n backgroundColor: 'white',\r\n borderRadius: '3px',\r\n border: '1px solid #BECEDA',\r\n '&:hover': {\r\n border: '1px solid #41B7D7'\r\n }\r\n },\r\n focused: {\r\n backgroundColor: 'white',\r\n boxShadow: '0 0 3px 3px rgba(65, 183, 215, 0.35)',\r\n border: '1px solid #41B7D7'\r\n },\r\n inputRoot: {\r\n outline: 'none',\r\n boxShadow: 'none',\r\n backgroundColor: 'white !important',\r\n padding: '0 !important',\r\n border: '0',\r\n borderRadius: '3px',\r\n '&:before': {\r\n border: 0\r\n },\r\n '&:after': {\r\n border: 0\r\n },\r\n '&:hover': {\r\n border: '0',\r\n backgroundColor: 'white',\r\n '&:before': {\r\n border: 0\r\n }\r\n }\r\n },\r\n input: {\r\n backgroundColor: 'white',\r\n borderRadius: '3px',\r\n padding: '9px 10px !important',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n border: '0'\r\n },\r\n endAdornment: {\r\n display: 'none'\r\n },\r\n tag: {\r\n height: '28px',\r\n border: 'none',\r\n borderRadius: '3px',\r\n backgroundColor: '#005a81',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n color: '#FFF',\r\n padding: '6px 10px'\r\n }\r\n});\r\n\r\nexport const chipStyles = makeStyles({\r\n label: {\r\n padding: '0 9px 0 0'\r\n },\r\n deleteIcon: {\r\n marginRight: '0 !important'\r\n }\r\n});\r\n\r\nexport const useStyles = makeStyles({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%'\r\n },\r\n label: {\r\n marginBottom: 6,\r\n color: '#071B27',\r\n textTransform: 'uppercase',\r\n fontSize: 10,\r\n lineHeight: '12px',\r\n letterSpacing: '0.035em'\r\n },\r\n closeIcon: {\r\n display: 'none'\r\n },\r\n deleteChipIcon: {\r\n width: '14px',\r\n height: '14px',\r\n color: '#fff'\r\n },\r\n error: {\r\n border: '1px solid #EB5757',\r\n '&:hover': {\r\n border: '1px solid #EB5757'\r\n }\r\n },\r\n paper: {\r\n backgroundColor: '#FFF',\r\n boxShadow: '0.5px 1px 8px rgba(0,0,0,0.1)',\r\n borderRadius: '4px'\r\n }\r\n});\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport Chip from '@material-ui/core/Chip';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\n\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\nimport { useStyles, autocompleteStyles, chipStyles } from './styles';\r\n\r\nconst ChipsInput = ({\r\n input,\r\n id,\r\n label,\r\n placeholder,\r\n maxLength,\r\n className,\r\n meta: { touched, error }\r\n}) => {\r\n const classes = useStyles();\r\n const autocompleteClasses = autocompleteStyles();\r\n const chipClasses = chipStyles();\r\n const [t] = useTranslation();\r\n\r\n const onChangeHandler = (e, value) => {\r\n input.onChange(value);\r\n };\r\n\r\n return (\r\n <div className={classNames(classes.root, className)}>\r\n <InputLabel className={classes.label} htmlFor={`${id}-input`}>\r\n {label}\r\n </InputLabel>\r\n\r\n <Autocomplete\r\n multiple\r\n id={`${id}-input`}\r\n className={classNames({\r\n [classes.error]: touched && error\r\n })}\r\n classes={autocompleteClasses}\r\n options={[]}\r\n freeSolo\r\n closeIcon={<div className={classes.closeIcon}>{''}</div>}\r\n renderTags={(value, getTagProps) =>\r\n value.map((option, index) => (\r\n <Chip\r\n classes={chipClasses}\r\n variant=\"outlined\"\r\n label={option}\r\n deleteIcon={<CloseIcon className={classes.deleteChipIcon} />}\r\n {...getTagProps({ index })}\r\n />\r\n ))\r\n }\r\n renderInput={params => (\r\n <TextField\r\n {...params}\r\n id={`${id}-input`}\r\n inputProps={{\r\n ...params.inputProps,\r\n maxLength: maxLength\r\n }}\r\n variant=\"filled\"\r\n placeholder={t(placeholder)}\r\n fullWidth\r\n />\r\n )}\r\n value={input.value}\r\n onChange={onChangeHandler}\r\n />\r\n\r\n {touched && error && <FormHelperText error>{error}</FormHelperText>}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChipsInput;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport classNames from 'classnames';\r\nimport { useQuery } from '@apollo/react-hooks';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\n\r\nimport Chip from '@material-ui/core/Chip';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\nimport { useStyles, autocompleteStyles, chipStyles } from './styles';\r\n\r\nconst AsyncChipsInput = ({\r\n input,\r\n label,\r\n placeholder,\r\n maxLength,\r\n className,\r\n query,\r\n queryName,\r\n optionLabel,\r\n remove,\r\n businessOwner,\r\n meta: { touched, error }\r\n}) => {\r\n const classes = useStyles();\r\n const autocompleteClasses = autocompleteStyles();\r\n const chipClasses = chipStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [options, setOptions] = React.useState([]);\r\n\r\n const { loading, data, refetch } = useQuery(query, {\r\n variables: {\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n if (!loading) setOptions(data[queryName] || []);\r\n }, [data]);\r\n\r\n React.useEffect(() => {\r\n refetch();\r\n }, []);\r\n\r\n const getOption = option => {\r\n return selectedLanguage === 'Norway' && option[`${optionLabel}No`]\r\n ? option[`${optionLabel}No`]\r\n : option[optionLabel];\r\n };\r\n\r\n return (\r\n <div className={classNames(classes.root, className)}>\r\n <InputLabel className={classes.label} htmlFor={`${label}-input`}>\r\n {t(label)}\r\n </InputLabel>\r\n\r\n <Autocomplete\r\n multiple\r\n id=\"asynchronous-demo\"\r\n className={classNames({\r\n [classes.error]: touched && error\r\n })}\r\n classes={autocompleteClasses}\r\n open={open}\r\n onOpen={() => {\r\n setOpen(true);\r\n }}\r\n onClose={() => {\r\n setOpen(false);\r\n }}\r\n onChange={(event, value) => {\r\n const deletedItems = input.value.filter(x => !value.includes(x));\r\n if (deletedItems.length) remove(deletedItems[0]);\r\n input.onChange(value);\r\n }}\r\n value={input.value}\r\n getOptionSelected={(option, value) => `${option.id}` === `${value.id}`}\r\n getOptionLabel={option => getOption(option)}\r\n options={options}\r\n loading={loading}\r\n closeIcon={<div className={classes.closeIcon}>{''}</div>}\r\n renderTags={(value, getTagProps) =>\r\n value.map((option, index) => (\r\n <Chip\r\n classes={chipClasses}\r\n variant=\"outlined\"\r\n label={getOption(option)}\r\n deleteIcon={<CloseIcon className={classes.deleteChipIcon} />}\r\n {...getTagProps({ index })}\r\n />\r\n ))\r\n }\r\n renderInput={params => (\r\n <TextField\r\n {...params}\r\n variant=\"filled\"\r\n placeholder={t(placeholder)}\r\n fullWidth\r\n inputProps={{\r\n ...params.inputProps,\r\n maxLength: maxLength\r\n }}\r\n InputProps={{\r\n ...params.InputProps,\r\n endAdornment: (\r\n <React.Fragment>\r\n {loading ? (\r\n <CircularProgress color=\"inherit\" size={20} />\r\n ) : null}\r\n {params.InputProps.endAdornment}\r\n </React.Fragment>\r\n )\r\n }}\r\n />\r\n )}\r\n />\r\n\r\n {touched && error && <FormHelperText error>{error}</FormHelperText>}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(AsyncChipsInput);\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n wrapper: {\r\n position: 'relative',\r\n marginBottom: '36px',\r\n zIndex: '10'\r\n },\r\n label: {\r\n display: 'flex',\r\n alignItems: 'baseline',\r\n justifyContent: 'space-between',\r\n marginBottom: 6,\r\n color: '#071B27',\r\n fontSize: 10,\r\n lineHeight: '12px',\r\n letterSpacing: '0.035em'\r\n },\r\n inputLabel: {\r\n display: 'block',\r\n marginBottom: 6,\r\n color: '#071B27',\r\n textTransform: 'uppercase',\r\n fontSize: 10,\r\n lineHeight: '12px',\r\n letterSpacing: '0.035em'\r\n },\r\n hiddenDateRangePicker: {\r\n position: 'static',\r\n top: '26px',\r\n left: '0'\r\n },\r\n customInputDate: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n backgroundColor: '#FFFFFF',\r\n border: '1px solid #BECEDA',\r\n borderRadius: '3px',\r\n boxSizing: 'border-box',\r\n width: '100%',\r\n cursor: 'pointer',\r\n fontSize: '13px',\r\n lineHeight: '10px',\r\n padding: '7px 12px',\r\n position: 'absolute',\r\n zIndex: '1',\r\n '&:hover': {\r\n border: '1px solid #41B7D7'\r\n }\r\n },\r\n selectedDate: {\r\n textTransform: 'none'\r\n },\r\n calendarIcon: {\r\n fontSize: '20px',\r\n marginRight: '7px'\r\n },\r\n focus: {\r\n boxShadow: '0 0 3px 3px rgba(65, 183, 215, 0.35)',\r\n border: '1px solid #41B7D7'\r\n },\r\n errorInput: {\r\n border: '1px solid #EB5757',\r\n boxShadow: 'none',\r\n '&:hover': {\r\n border: '1px solid #EB5757'\r\n }\r\n },\r\n error: {\r\n marginTop: '10px'\r\n },\r\n calendarButton: {\r\n position: 'relative',\r\n zIndex: '1',\r\n cursor: 'pointer',\r\n color: '#59758B'\r\n }\r\n});\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport moment from 'moment';\r\nimport classNames from 'classnames';\r\n\r\nimport { useMediaQuery } from '@material-ui/core';\r\nimport { SingleDatePicker as DatePicker } from 'react-dates';\r\n\r\nimport { Typography, useTheme } from '@material-ui/core';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport DateRangeIcon from '@material-ui/icons/DateRange';\r\n\r\nimport { LOCALES_OBJ } from 'constants/base';\r\n\r\nimport { useStyles } from './styles';\r\nimport { getIsHalf } from '../../utils/book-accommodation/getIsHalf';\r\n\r\nconst CalendarImage = ({ fill }) => (\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fillRule=\"evenodd\"\r\n clipRule=\"evenodd\"\r\n d=\"M13.625 1.8125V0.6875H12.5V1.8125H3.5V0.6875H2.375V1.8125H0.125V13.625C0.125 14.557 0.880519 15.3125 1.8125 15.3125H14.1875C15.1195 15.3125 15.875 14.557 15.875 13.625V1.8125H13.625ZM14.75 13.625C14.75 13.9357 14.4982 14.1875 14.1875 14.1875H1.8125C1.50184 14.1875 1.25 13.9357 1.25 13.625V2.9375H2.375V4.625H3.5V2.9375H12.5V4.625H13.625V2.9375H14.75V13.625ZM2.375 9.125H5.75V5.75H2.375V9.125ZM3.5 6.875H4.625V8H3.5V6.875ZM9.6875 9.125H6.3125V5.75H9.6875V9.125ZM8.5625 6.875H7.4375V8H8.5625V6.875ZM10.25 9.125H13.625V5.75H10.25V9.125ZM11.375 6.875H12.5V8H11.375V6.875ZM5.75 13.0625H2.375V9.6875H5.75V13.0625ZM4.625 10.8125H3.5V11.9375H4.625V10.8125ZM6.3125 13.0625H9.6875V9.6875H6.3125V13.0625ZM7.4375 10.8125H8.5625V11.9375H7.4375V10.8125Z\"\r\n fill={fill || '#0E8BB4'}\r\n />\r\n </svg>\r\n);\r\n\r\nconst SingleDatePicker = ({\r\n id,\r\n isStartDateRenderMonth,\r\n input,\r\n label,\r\n className,\r\n availableRange,\r\n disabledDates,\r\n changeMonthsCallback,\r\n onChangeCallback,\r\n closeCalendarCallback,\r\n isInput,\r\n numberOfMonths,\r\n labelTypographyVariant,\r\n cutoffData,\r\n daySize,\r\n labelClass,\r\n inputLabelClass,\r\n customInputClass,\r\n isWidgetSearch,\r\n placeholder,\r\n isFocused,\r\n dateRender,\r\n isIcon,\r\n meta: { touched, error, submitFailed }\r\n}) => {\r\n const theme = useTheme();\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n const [focus, setFocus] = React.useState(false);\r\n const [isHiddenNextButton, setHiddenNextButton] = React.useState(false);\r\n\r\n const [render, setRender] = React.useState(true);\r\n const [renderMonth, setRenderMonth] = React.useState(\r\n isStartDateRenderMonth && input.value ? input.value : moment()\r\n );\r\n\r\n React.useEffect(() => {\r\n if (typeof isFocused === 'boolean') {\r\n setFocus(isFocused);\r\n\r\n if (dateRender) {\r\n setRenderMonth(dateRender);\r\n }\r\n }\r\n }, [isFocused]);\r\n\r\n React.useEffect(() => {\r\n setRender(!render);\r\n setTimeout(() => {\r\n setRender(render);\r\n });\r\n }, [selectedLanguage]);\r\n\r\n\r\n\r\n const onChangeHandler = date => {\r\n input.onChange(date);\r\n if (onChangeCallback) onChangeCallback(date);\r\n };\r\n\r\n const isSmallScreen = useMediaQuery((theme) => theme.breakpoints.down('sm'));\r\n\r\n const onPrevMonthClickHandler = date => {\r\n setRenderMonth(date);\r\n setHiddenNextButton(false);\r\n if (changeMonthsCallback) changeMonthsCallback(date);\r\n };\r\n\r\n const onNextMonthClickHandler = date => {\r\n setRenderMonth(date);\r\n const currentDate = moment();\r\n const endAvailableDate = moment(currentDate).add(23, 'M');\r\n\r\n const isTheSameDates = moment(date)\r\n .startOf('month')\r\n .isSame(endAvailableDate.startOf('month'));\r\n\r\n if (isTheSameDates) setHiddenNextButton(true);\r\n if (changeMonthsCallback) changeMonthsCallback(date);\r\n };\r\n\r\n const isBlockDayByCutoffPeriodWithoutTime = (\r\n cutoffPeriod,\r\n cutoffPeriodTimeType,\r\n isDayBlocked,\r\n date\r\n ) => {\r\n if (!cutoffPeriod) return isDayBlocked;\r\n\r\n const dateWithTime = moment(date).set({\r\n hour: 0,\r\n minute: 0\r\n });\r\n const nowCutoffDate = moment().add(cutoffPeriod, cutoffPeriodTimeType);\r\n\r\n if (moment(dateWithTime).isSameOrBefore(nowCutoffDate, 'day')) {\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const isBlockDayByCutoffPeriodWithTime = (\r\n cutoffPeriod,\r\n cutoffPeriodTimeType,\r\n startTimeAndDuration,\r\n date\r\n ) => {\r\n const disabledStartTimeList = startTimeAndDuration.map(item => {\r\n const startTime = moment(item.startTime, 'HH:mm');\r\n const dateWithTime = moment(date).set({\r\n hour: startTime.get('hour'),\r\n minute: startTime.get('minute')\r\n });\r\n const nowCutoffDate = moment().add(cutoffPeriod, cutoffPeriodTimeType);\r\n const difference = moment(dateWithTime).diff(nowCutoffDate);\r\n return difference <= 0;\r\n });\r\n\r\n if (disabledStartTimeList.every(value => value)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const isBlockDayByCutoffPeriod = (date, isDayBlocked) => {\r\n if (isDayBlocked) return isDayBlocked;\r\n\r\n if (cutoffData) {\r\n const days = cutoffData.days;\r\n const daysArray = cutoffData.daysArray;\r\n\r\n const cutoffPeriod = parseInt(cutoffData.cutoffPeriod);\r\n const cutoffPeriodTimeType = cutoffData.cutoffPeriodTimeType;\r\n\r\n if (days) {\r\n const isDisabled = isBlockDayByCutoffPeriodWithoutTime(\r\n cutoffPeriod,\r\n cutoffPeriodTimeType,\r\n isDayBlocked,\r\n date\r\n );\r\n if (isDisabled) return true;\r\n } else if (daysArray) {\r\n let isDisabledDate = false;\r\n\r\n daysArray.map(item => {\r\n const days = item.days;\r\n const startTimeAndDuration = item.startTimeAndDuration;\r\n\r\n const dateDay = moment(date).format('ddd');\r\n\r\n if (days[dateDay]) {\r\n if (startTimeAndDuration.length) {\r\n const isDisabled = isBlockDayByCutoffPeriodWithTime(\r\n cutoffPeriod,\r\n cutoffPeriodTimeType,\r\n startTimeAndDuration,\r\n date\r\n );\r\n if (isDisabled) isDisabledDate = true;\r\n } else {\r\n const isDisabled = isBlockDayByCutoffPeriodWithoutTime(\r\n cutoffPeriod,\r\n cutoffPeriodTimeType,\r\n isDayBlocked,\r\n date\r\n );\r\n if (isDisabled) isDisabledDate = true;\r\n }\r\n }\r\n });\r\n\r\n if (isDisabledDate) return true;\r\n }\r\n }\r\n\r\n return isDayBlocked;\r\n };\r\n\r\n const isBlockedDay = date => {\r\n if (\r\n disabledDates &&\r\n disabledDates.includes(moment(date).format('YYYY-MM-DD'))\r\n ) {\r\n return true;\r\n }\r\n\r\n if (!availableRange) return false;\r\n\r\n if (availableRange.endDate && availableRange.endDate !== 'None') {\r\n const isBetween = moment(date).isBetween(\r\n availableRange.startDate,\r\n availableRange.endDate,\r\n 'day',\r\n '[]'\r\n );\r\n\r\n if (isBetween) {\r\n const dayOfDate = moment(date).format('ddd');\r\n return !availableRange.daysOfWeek.includes(dayOfDate);\r\n }\r\n } else {\r\n const isSameOrAfter = moment(date).isSameOrAfter(\r\n availableRange.startDate,\r\n 'day'\r\n );\r\n\r\n if (isSameOrAfter) {\r\n const dayOfDate = moment(date).format('ddd');\r\n return !availableRange.daysOfWeek.includes(dayOfDate);\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n return (\r\n <div className={classNames(classes.wrapper, className)}>\r\n {isIcon ? (\r\n <label htmlFor={id ? id : 'singleDate'}>\r\n <DateRangeIcon className={classes.calendarButton} />\r\n </label>\r\n ) : (\r\n <>\r\n {isInput ? (\r\n <label\r\n htmlFor={id ? id : 'singleDate'}\r\n className={classNames(classes.inputLabel, inputLabelClass)}\r\n >\r\n {t(label)}\r\n </label>\r\n ) : (\r\n <label className={classNames(classes.label, labelClass)}>\r\n <Typography\r\n variant={labelTypographyVariant ? labelTypographyVariant : 'h2'}\r\n >\r\n {t(label)}\r\n </Typography>\r\n <Typography variant=\"body1\" className={classes.selectedDate}>\r\n {input.value &&\r\n moment(input.value)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM D, YYYY')}\r\n </Typography>\r\n </label>\r\n )}\r\n\r\n {isInput && (\r\n <label\r\n htmlFor={id ? id : 'singleDate'}\r\n className={classNames(\r\n classes.customInputDate,\r\n {\r\n [classes.focus]: false\r\n },\r\n {\r\n [classes.errorInput]: (touched || submitFailed) && error\r\n },\r\n customInputClass\r\n )}\r\n >\r\n {isWidgetSearch ? (\r\n <>\r\n {input.value ? (\r\n <div>\r\n {moment(input.value)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM D, YYYY')}\r\n </div>\r\n ) : (\r\n <div>{placeholder ? t(placeholder) : t('Date')}</div>\r\n )}\r\n <CalendarImage fill={theme.baseUI.color} />\r\n </>\r\n ) : (\r\n <>\r\n <DateRangeIcon className={classes.calendarIcon} />\r\n\r\n {input.value ? (\r\n <div>\r\n {moment(input.value)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM D, YYYY')}\r\n </div>\r\n ) : (\r\n <div>{t('Date')}</div>\r\n )}\r\n </>\r\n )}\r\n </label>\r\n )}\r\n </>\r\n )}\r\n\r\n <div\r\n className={classNames(classes.hiddenDateRangePicker, {\r\n ['inputSinglePicker']: isInput\r\n })}\r\n >\r\n {render && (\r\n <DatePicker\r\n verticalSpacing={0}\r\n readOnly={true}\r\n id={id ? id : 'singleDate'}\r\n displayFormat=\"MMM D, YYYY\"\r\n date={input.value || null}\r\n onDateChange={date => {\r\n onChangeHandler(date);\r\n }}\r\n onPrevMonthClick={onPrevMonthClickHandler}\r\n onNextMonthClick={onNextMonthClickHandler}\r\n navNext={isHiddenNextButton ? <div>{''}</div> : ''}\r\n focused={isInput ? focus : true}\r\n onFocusChange={({ focused }) => {\r\n if (!focused && closeCalendarCallback) closeCalendarCallback();\r\n if (isInput) setFocus(focused);\r\n }}\r\n initialVisibleMonth={() => renderMonth}\r\n isDayBlocked={date => {\r\n const isDayBlocked = isBlockedDay(date);\r\n return isBlockDayByCutoffPeriod(date, isDayBlocked);\r\n }}\r\n daySize={daySize ? daySize : 38}\r\n numberOfMonths={numberOfMonths}\r\n // numberOfMonths={isSmallScreen ? 1 : 2}\r\n // daySize={isSmallScreen ? 30 : 38}\r\n renderMonthElement={({ month }) =>\r\n moment(month)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMMM YYYY')\r\n }\r\n renderDayContents={day => {\r\n if (selectedLanguage === 'Norway') {\r\n day._locale._weekdaysMin = [\r\n 'Sø',\r\n 'Ma',\r\n 'Ti',\r\n 'On',\r\n 'To',\r\n 'Fr',\r\n 'Lø'\r\n ];\r\n } else {\r\n day._locale._weekdaysMin = [\r\n 'Su',\r\n 'Mo',\r\n 'Tu',\r\n 'We',\r\n 'Th',\r\n 'Fr',\r\n 'Sa'\r\n ];\r\n }\r\n\r\n const { disableLeft, disableRight } = getIsHalf(\r\n disabledDates,\r\n day\r\n );\r\n\r\n return (\r\n <div\r\n className={classNames({\r\n [classes.dayHalfAvailable]: disableLeft || disableRight,\r\n [classes.dayLeftDisable]: disableLeft,\r\n [classes.dayRightDisable]: disableRight\r\n })}\r\n >\r\n <div>{day.format('D')}</div>\r\n </div>\r\n );\r\n }}\r\n hideKeyboardShortcutsPanel={true}\r\n />\r\n )}\r\n </div>\r\n\r\n {(touched || submitFailed) && error && (\r\n <FormHelperText\r\n className={classNames({ [classes.error]: isInput })}\r\n error\r\n >\r\n {t(error)}\r\n </FormHelperText>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default SingleDatePicker;\r\n","import { RadioGroup } from '@material-ui/core';\r\nimport { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme =>({\r\n container: {\r\n minWidth: '190px',\r\n boxShadow: 'inset -1px 0px 0px #e2ebf6',\r\n padding: '30px 0 0 30px',\r\n [theme.breakpoints.down('sm')]:{\r\n // display: 'none'\r\n }\r\n \r\n },\r\n \r\n title: {\r\n padding: '0 0 24px'\r\n },\r\n label: {\r\n marginBottom: '20px'\r\n },\r\n labelName: {\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 'normal',\r\n color: '#000000',\r\n marginBottom: '4px'\r\n },\r\n labelInstruction: {\r\n fontSize: '10px',\r\n lineHeight: '12px',\r\n fontWeight: 'normal',\r\n color: '#000000'\r\n },\r\n checkedLabel: {\r\n color: '#000000',\r\n fontWeight: '500'\r\n },\r\n rootCheckbox: {\r\n color: '#99adbd'\r\n },\r\n checked: {\r\n color: '#1d9dc6'\r\n },\r\n radioGroup: {\r\n \r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n flexDirection:'row',\r\n }\r\n },\r\n}));\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst RadioBtnTabsMenu = ({ tabs, activeTab, activeSubTab, change }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const selectedTab = tabs[activeTab];\r\n const subTabs = selectedTab.subTabs;\r\n\r\n if (subTabs && subTabs.length) {\r\n return (\r\n <div className={classes.container}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t(selectedTab.name)}\r\n </Typography>\r\n\r\n <RadioGroup\r\n aria-label=\"sub-tabs\"\r\n name=\"sub-tabs\"\r\n value={activeSubTab}\r\n onChange={change}\r\n className={classes.radioGroup} \r\n \r\n >\r\n {subTabs.map((subTab, index) => (\r\n <FormControlLabel\r\n className={classes.label}\r\n key={index}\r\n control={\r\n <Radio\r\n color=\"default\"\r\n classes={{\r\n root: classes.rootCheckbox,\r\n checked: classes.checked\r\n }}\r\n />\r\n }\r\n value={index}\r\n label={\r\n <div>\r\n <Typography\r\n className={classNames(classes.labelName, {\r\n [classes.checkedLabel]: index === activeSubTab\r\n })}\r\n >\r\n {t(subTab.title)}\r\n </Typography>\r\n <Typography className={classes.labelInstruction}>\r\n {t(subTab.instruction)}\r\n </Typography>\r\n </div>\r\n }\r\n />\r\n ))}\r\n </RadioGroup>\r\n </div>\r\n );\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport default RadioBtnTabsMenu;\r\n","import { isNumber, isRequiredFieldTrueInObject } from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (isNumber(values.cutoffPeriod, true)) {\r\n errors.cutoffPeriod = 'Cutoff period can be only number';\r\n }\r\n\r\n if (isRequiredFieldTrueInObject(values.days || '', true)) {\r\n errors.days = 'Select days is required';\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { createMuiTheme } from '@material-ui/core/styles';\r\n\r\nconst theme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: '#0E8BB4'\r\n },\r\n secondary: {\r\n main: '#254052'\r\n },\r\n error: {\r\n main: '#EB5757'\r\n }\r\n },\r\n typography: {\r\n fontFamily: 'Fira Sans',\r\n h1: {\r\n fontSize: 18,\r\n fontWeight: 500\r\n },\r\n h2: {\r\n fontSize: 15,\r\n fontWeight: 500\r\n },\r\n h3: {\r\n fontSize: 10,\r\n fontWeight: 500\r\n },\r\n body1: {\r\n fontSize: 13,\r\n color: '#071B27'\r\n },\r\n body2: {\r\n fontSize: 11,\r\n fontWeight: 500\r\n },\r\n button: {\r\n textTransform: 'capitalize',\r\n fontWeight: 500\r\n }\r\n },\r\n overrides: {\r\n MuiCssBaseline: {\r\n '@global': {\r\n '.CalendarDay': {\r\n position: 'relative'\r\n }\r\n }\r\n },\r\n MuiTableRow: {\r\n root: {\r\n borderBottom: '1px solid #E2EBF6',\r\n '&:last-child': {\r\n border: 0\r\n }\r\n },\r\n head: {\r\n border: 0\r\n }\r\n }\r\n }\r\n});\r\n\r\nexport default theme;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\nimport theme from 'theme';\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n margin: '20px 20px 20px 20px'\r\n }\r\n },\r\n column: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '286px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%'\r\n }\r\n },\r\n datePickerWrapper: {\r\n width: '257px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n flexWrap: 'wrap',\r\n }\r\n },\r\n helpIcon: {\r\n fontSize: '19px',\r\n marginTop: '27px',\r\n color: '#182e3d',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n flexWrap: 'wrap',\r\n }\r\n },\r\n cutOffField: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '120px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%'\r\n }\r\n },\r\n cutOffTypeField: {\r\n width: '140px',\r\n marginTop: '17px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n marginLeft: '20px'\r\n }\r\n },\r\n cutOffFieldWrapper: {\r\n marginRight: '10px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginLeft: '10px'\r\n }\r\n },\r\n divider: {\r\n height: '1px',\r\n marginBottom: '30px',\r\n backgroundColor: '#e2ebf6'\r\n },\r\n checkboxWrapper: {\r\n margin: '10px 0 24px 0'\r\n },\r\n checkboxRoot: {},\r\n checked: {\r\n color: '#1D9DC6'\r\n },\r\n disabledCheckbox: {\r\n color: '#BECEDA',\r\n backgroundColor: '#BECEDA'\r\n },\r\n checkboxIcon: {\r\n color: theme.baseUI.color,\r\n fontSize: '21px'\r\n }\r\n\r\n}));\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Field, reduxForm, change, Form, SubmissionError } from 'redux-form';\r\nimport uuid from 'uuid/v1';\r\nimport moment from 'moment';\r\n\r\nimport { SCHEDULE_DAYS } from 'pages/create-activity/constants';\r\n\r\nimport {\r\n CustomDateRangePicker,\r\n MultiDatePickerCalendar,\r\n PopoverWrapper,\r\n DropDown,\r\n Input,\r\n CheckboxButtonsGroup,\r\n FormActionButtons\r\n} from 'components';\r\n\r\nimport validate from './validate';\r\n\r\nimport HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n availability: {\r\n startDate: moment(),\r\n endDate: null\r\n },\r\n days: SCHEDULE_DAYS,\r\n cutoffPeriod: 0,\r\n cutoffPeriodTimeType: 'days'\r\n};\r\n\r\nconst ScheduleDate = ({\r\n onSubmit,\r\n handleSubmit,\r\n getPricesData,\r\n setSubmitButton,\r\n isUpdate,\r\n ...props\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const { pricesDailyForm, changeFieldValue } = props;\r\n\r\n const getFormCategoriesByDayName = day => {\r\n const existedDay = pricesDailyForm.values.days.find(\r\n item => item.day === day\r\n );\r\n\r\n if (existedDay) return existedDay.categories;\r\n\r\n return [\r\n {\r\n participant: 'Adult',\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n }\r\n ];\r\n };\r\n\r\n const submit = values => {\r\n const errors = validate(values);\r\n\r\n if (Object.keys(errors).length) {\r\n throw new SubmissionError(errors);\r\n }\r\n\r\n const days = values.days;\r\n\r\n const newDaysArray = Object.keys(days)\r\n .filter(key => days[key])\r\n .map(field => ({\r\n id: uuid(),\r\n day: field,\r\n categories: getFormCategoriesByDayName(field)\r\n }));\r\n\r\n const fixedPricesDays = newDaysArray.map(item => {\r\n const categories = item.categories;\r\n return {\r\n id: uuid(),\r\n days: [item.day],\r\n USD: (categories && categories[0]['USD']) || '0',\r\n EUR: (categories && categories[0]['EUR']) || '0',\r\n NOK: (categories && categories[0]['NOK']) || '0'\r\n };\r\n });\r\n\r\n changeFieldValue('pricesFixedForm', 'days', fixedPricesDays);\r\n changeFieldValue('pricesDailyForm', 'days', newDaysArray);\r\n getPricesData({\r\n days: newDaysArray\r\n });\r\n\r\n onSubmit(values);\r\n };\r\n\r\n return (\r\n <div>\r\n <Form onSubmit={handleSubmit(submit)}>\r\n <div className={classes.row}>\r\n <div className={classes.column}>\r\n <div className={classes.datePickerWrapper} >\r\n <Field\r\n name=\"availability\"\r\n label=\"Availability\"\r\n component={CustomDateRangePicker || MultiDatePickerCalendar}\r\n />\r\n </div>\r\n <PopoverWrapper text=\"If you don't select the timestamps, the activity will be available all the time\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n <div className={classes.column}>\r\n <div className={classes.cutOffField}>\r\n <div className={classes.cutOffFieldWrapper}>\r\n <Field\r\n name=\"cutoffPeriod\"\r\n isOnlyNumber={true}\r\n maxLength={9}\r\n placeholder=\"Number\"\r\n label=\"Cutoff period\"\r\n component={Input}\r\n />\r\n </div>\r\n\r\n <PopoverWrapper text=\"Cutoff period info sign\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n\r\n <div className={classes.cutOffTypeField}>\r\n <Field\r\n name=\"cutoffPeriodTimeType\"\r\n list={['minutes', 'hours', 'days', 'weeks']}\r\n component={DropDown}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <Field className={classes.row}\r\n name=\"days\"\r\n title=\"Select Days *\"\r\n component={CheckboxButtonsGroup}\r\n />\r\n <div className={classes.divider}>{''}</div>\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </Form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n pricesDailyForm: state.form.pricesDailyForm\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFieldValue: (form, field, value) => {\r\n dispatch(change(form, field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'scheduleDateForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(ScheduleDate));\r\n","import moment from 'moment';\r\n\r\nimport { isNumber, isRequiredFieldTrueInObject } from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (isNumber(values.cutoffPeriod, true)) {\r\n errors.cutoffPeriod = 'Cutoff period can be only number';\r\n }\r\n\r\n // if (isRequiredFieldTrueInObject(values.days || '', true)) {\r\n // errors.days = 'Select days is required';\r\n // }\r\n\r\n if (values.daysArray && values.daysArray.length) {\r\n const daysArrayErrors = [];\r\n\r\n values.daysArray.forEach((day, dayIndex) => {\r\n const daysErrors = {};\r\n\r\n if (isRequiredFieldTrueInObject(day.days || '', true)) {\r\n daysErrors.days = 'Select days is required';\r\n daysArrayErrors[dayIndex] = daysErrors;\r\n }\r\n\r\n if (day.startTimeAndDuration && day.startTimeAndDuration.length) {\r\n const timeArrayErrors = [];\r\n\r\n const startTimeAndDurationFormatted = day.startTimeAndDuration.map(\r\n item => ({\r\n ...item,\r\n startTime: moment(item.startTime).format('HH:mm'),\r\n duration: parseInt(item.duration)\r\n })\r\n );\r\n\r\n day.startTimeAndDuration.forEach((time, timeIndex) => {\r\n const timeErrors = {};\r\n if (isNumber(time.duration, true)) {\r\n timeErrors.duration = 'Duration is required';\r\n timeArrayErrors[timeIndex] = timeErrors;\r\n }\r\n\r\n const duplicatedItems = startTimeAndDurationFormatted.filter(\r\n item =>\r\n item.startTime === moment(time.startTime).format('HH:mm') &&\r\n item.duration === parseInt(time.duration) &&\r\n item.timeType === time.timeType\r\n );\r\n\r\n if (duplicatedItems.length > 1) {\r\n timeErrors.startTime = 'Error';\r\n timeErrors.duration = 'Error';\r\n timeErrors.timeType = 'Error';\r\n timeArrayErrors[timeIndex] = timeErrors;\r\n timeArrayErrors['_error'] = {\r\n ...timeArrayErrors['_error'],\r\n [timeIndex]: 'This start time and duration already exists'\r\n };\r\n }\r\n });\r\n\r\n if (timeArrayErrors.length || timeArrayErrors['_error']) {\r\n daysErrors.startTimeAndDuration = timeArrayErrors;\r\n daysArrayErrors[dayIndex] = daysErrors;\r\n }\r\n }\r\n });\r\n\r\n if (daysArrayErrors.length) {\r\n errors.daysArray = daysArrayErrors;\r\n errors.daysArray = { ...daysArrayErrors, _error: { ...daysArrayErrors } };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n width: '100%',\r\n margin: '0 20px 20px 20px'\r\n }\r\n },\r\n column: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '286px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '80%',\r\n },\r\n },\r\n datePickerWrapper: {\r\n width: '257px',\r\n marginBottom: '20px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n },\r\n helpIcon: {\r\n fontSize: '19px',\r\n marginTop: '27px',\r\n color: '#182e3d',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column'\r\n },\r\n },\r\n cutOffField: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '120px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n },\r\n cutOffTypeField: {\r\n width: '140px',\r\n marginTop: '17px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n },\r\n cutOffFieldWrapper: {\r\n marginRight: '10px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginRight: '0',\r\n },\r\n },\r\n divider: {\r\n height: '1px',\r\n backgroundColor: '#E5E5E5',\r\n marginBottom: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '15px',\r\n },\r\n },\r\n buttonsGroup: {\r\n width: '195px',\r\n marginBottom: '12px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n },\r\n panels: {\r\n marginBottom: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '15px',\r\n },\r\n },\r\n}));\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport moment from 'moment';\r\nimport uuid from 'uuid/v1';\r\nimport { useTranslation } from 'react-i18next';\r\nimport {\r\n change,\r\n Field,\r\n FieldArray,\r\n Form,\r\n reduxForm,\r\n SubmissionError\r\n} from 'redux-form';\r\n\r\nimport {\r\n CustomDateRangePicker,\r\n DropDown,\r\n FormActionButtons,\r\n Input,\r\n PopoverWrapper,\r\n ExpansionPanelWrapper,\r\n ScheduleDaysTimeDuration\r\n} from 'components';\r\n\r\nimport { SCHEDULE_DAYS } from 'pages/create-activity/constants';\r\n\r\nimport validate from './validate';\r\n\r\nimport HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n availability: {\r\n startDate: moment(),\r\n endDate: null\r\n },\r\n cutoffPeriod: 0,\r\n cutoffPeriodTimeType: 'minutes',\r\n daysArray: [\r\n {\r\n id: uuid(),\r\n days: SCHEDULE_DAYS,\r\n startTimeAndDuration: [\r\n {\r\n startTime: moment(),\r\n duration: null,\r\n timeType: 'hours'\r\n }\r\n ]\r\n }\r\n ]\r\n};\r\n\r\nconst ScheduleDateTime = ({\r\n onSubmit,\r\n handleSubmit,\r\n getPricesData,\r\n setSubmitButton,\r\n isUpdate,\r\n ...props\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const {\r\n scheduleDateTimeForm,\r\n pricesDailyScheduleForm,\r\n changeFieldValue\r\n } = props;\r\n const getExpansionPanelTitle = item => {\r\n return Object.keys(item.days)\r\n .filter(key => item.days[key])\r\n .map(key => t(key))\r\n .join(', ');\r\n };\r\n\r\n const getFormCategoriesById = item => {\r\n const day = pricesDailyScheduleForm.values.daysArray.find(\r\n day => day.id === item.id\r\n );\r\n\r\n if (day) {\r\n return day.categories;\r\n }\r\n\r\n const daysArray = pricesDailyScheduleForm.values.daysArray;\r\n const newDays = Object.keys(item.days).filter(field => item.days[field]);\r\n\r\n for (let i in daysArray) {\r\n if (daysArray.hasOwnProperty(i)) {\r\n const item = daysArray[i];\r\n const sameDays = item.days.filter(\r\n (day, index) => day === newDays[index]\r\n );\r\n if (sameDays.length === newDays.length) {\r\n return item.categories;\r\n }\r\n }\r\n }\r\n\r\n return [\r\n {\r\n participant: 'Adult',\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n }\r\n ];\r\n };\r\n\r\n const onAddHandler = (fields, id) => {\r\n fields.push({\r\n days: SCHEDULE_DAYS,\r\n startTimeAndDuration: [\r\n {\r\n startTime: moment(),\r\n duration: null,\r\n timeType: 'hours'\r\n }\r\n ],\r\n id: id\r\n });\r\n };\r\n\r\n const getAllSelectedDays = () => {\r\n const daysArray = [...scheduleDateTimeForm.values.daysArray];\r\n let selectedDays = [];\r\n\r\n daysArray.map(item =>\r\n selectedDays.push(...Object.keys(item.days).filter(key => item.days[key]))\r\n );\r\n\r\n return selectedDays;\r\n };\r\n\r\n const submit = values => {\r\n const errors = validate(values);\r\n\r\n if (Object.keys(errors).length) {\r\n throw new SubmissionError(errors);\r\n }\r\n\r\n let days = values.daysArray.map(item => ({\r\n id: item.id,\r\n days: Object.keys(item.days).filter(field => item.days[field]),\r\n categories: getFormCategoriesById(item)\r\n }));\r\n\r\n const fixedPricesDays = days.map(item => {\r\n const categories = item.categories;\r\n return {\r\n id: uuid(),\r\n days: item.days,\r\n USD: (categories && categories[0]['USD']) || '0',\r\n EUR: (categories && categories[0]['EUR']) || '0',\r\n NOK: (categories && categories[0]['NOK']) || '0'\r\n };\r\n });\r\n\r\n changeFieldValue('pricesFixedForm', 'days', fixedPricesDays);\r\n changeFieldValue('pricesDailyScheduleForm', 'daysArray', days);\r\n getPricesData({\r\n daysArray: days\r\n });\r\n\r\n onSubmit(values);\r\n };\r\n\r\n return (\r\n <div>\r\n <Form onSubmit={handleSubmit(submit)}>\r\n <div className={classes.row}>\r\n <div className={classes.column}>\r\n <div className={classes.datePickerWrapper}>\r\n <Field\r\n name=\"availability\"\r\n label=\"Availability\"\r\n component={CustomDateRangePicker}\r\n />\r\n </div>\r\n <PopoverWrapper text=\"If you don't select the timestamps, the activity will be available all the time\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n <div className={classes.column}>\r\n <div className={classes.cutOffField}>\r\n <div className={classes.cutOffFieldWrapper}>\r\n <Field\r\n name=\"cutoffPeriod\"\r\n isOnlyNumber={true}\r\n maxLength={9}\r\n placeholder=\"Number\"\r\n label=\"Cutoff period\"\r\n component={Input}\r\n />\r\n </div>\r\n\r\n <PopoverWrapper text=\"Cutoff period info sign\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n <div className={classes.cutOffTypeField}>\r\n <Field\r\n name=\"cutoffPeriodTimeType\"\r\n list={['minutes', 'hours', 'days', 'weeks']}\r\n component={DropDown}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <FieldArray\r\n name=\"daysArray\"\r\n component={ExpansionPanelWrapper}\r\n isAddDeleteActions={true}\r\n disabledItemIndex={0}\r\n add={onAddHandler}\r\n getTitle={item => getExpansionPanelTitle(item)}\r\n tabName=\"schedule\"\r\n tabNameAll=\"all schedules\"\r\n children={(field, index) => (\r\n <ScheduleDaysTimeDuration\r\n field={field}\r\n index={index}\r\n disabledDays={getAllSelectedDays()}\r\n />\r\n )}\r\n />\r\n\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </Form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n scheduleDateTimeForm: state.form.scheduleDateTimeForm,\r\n pricesDailyScheduleForm: state.form.pricesDailyScheduleForm\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFieldValue: (form, field, value) => {\r\n dispatch(change(form, field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'scheduleDateTimeForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(ScheduleDateTime));\r\n","\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n flexWrap: 'wrap',\r\n width: '100%', \r\n padding:'0 20px 0 20px'\r\n }\r\n },\r\n datePickerWrapper: {\r\n width: '572px',\r\n marginBottom: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%'\r\n }\r\n },\r\n helpIcon: {\r\n fontSize: '19px',\r\n marginTop: '27px',\r\n color: '#182e3d'\r\n }\r\n}));\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { connect } from 'react-redux';\r\nimport { change, Field, reduxForm } from 'redux-form';\r\n\r\nimport {\r\n CustomDateRangePicker,\r\n FormActionButtons,\r\n PopoverWrapper\r\n} from 'components';\r\n\r\nimport HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n availability: {\r\n startDate: moment(),\r\n endDate: null\r\n }\r\n};\r\n\r\nconst SchedulePass = ({\r\n onSubmit,\r\n handleSubmit,\r\n setSubmitButton,\r\n isUpdate,\r\n changeFieldValue\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const submit = values => {\r\n changeFieldValue('pricesFixedForm', 'USD', '0');\r\n changeFieldValue('pricesFixedForm', 'EUR', '0');\r\n changeFieldValue('pricesFixedForm', 'NOK', '0');\r\n onSubmit(values);\r\n };\r\n\r\n return (\r\n <div>\r\n <form onSubmit={handleSubmit(submit)}>\r\n <div className={classes.row}>\r\n <div className={classes.datePickerWrapper}>\r\n <Field\r\n name=\"availability\"\r\n label=\"Availability\"\r\n component={CustomDateRangePicker}\r\n />\r\n </div>\r\n <PopoverWrapper text=\"If you don't select the timestamps, the activity will be available all the time\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFieldValue: (form, field, value) => {\r\n dispatch(change(form, field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'schedulePassForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n initialValues\r\n})(connect(null, mapDispatchToProps)(SchedulePass));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n popover: {\r\n pointerEvents: 'none'\r\n },\r\n paper: {\r\n padding: theme.spacing(1),\r\n maxWidth: '500px'\r\n },\r\n children: {\r\n display: 'inline-block',\r\n '&:hover': {\r\n cursor: 'pointer'\r\n }\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Popover from '@material-ui/core/Popover';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst PopoverWrapper = ({ children, text }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n\r\n const handlePopoverOpen = event => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handlePopoverClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const open = Boolean(anchorEl);\r\n\r\n return (\r\n <div>\r\n <div\r\n className={classes.children}\r\n aria-owns={open ? 'mouse-over-popover-wrapper' : undefined}\r\n aria-haspopup=\"true\"\r\n onMouseEnter={handlePopoverOpen}\r\n onMouseLeave={handlePopoverClose}\r\n >\r\n {children}\r\n </div>\r\n\r\n <Popover\r\n id=\"mouse-over-popover\"\r\n className={classes.popover}\r\n classes={{\r\n paper: classes.paper\r\n }}\r\n open={open}\r\n anchorEl={anchorEl}\r\n anchorOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'center'\r\n }}\r\n transformOrigin={{\r\n vertical: 'top',\r\n horizontal: 'center'\r\n }}\r\n onClose={handlePopoverClose}\r\n disableRestoreFocus\r\n >\r\n <Typography>{`${t(text)}`}</Typography>\r\n </Popover>\r\n </div>\r\n );\r\n};\r\n\r\nexport default PopoverWrapper;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n wrapper: {\r\n // width: '100%',\r\n position: 'static'\r\n },\r\n selectRoot: {\r\n // width: '100%',\r\n padding: '10px 24px 9px 10px',\r\n color: '#000',\r\n '&:focus': {\r\n backgroundColor: 'transparent'\r\n }\r\n },\r\n selectRootDisabled: {\r\n color: 'rgba(0, 0, 0, 0.38)',\r\n border: '0 !important'\r\n },\r\n label: {\r\n marginBottom: 6,\r\n color: '#071B27',\r\n textTransform: 'uppercase',\r\n fontSize: 10,\r\n lineHeight: '12px',\r\n letterSpacing: '0.035em',\r\n position: 'static',\r\n transform: 'none',\r\n\r\n '&.Mui-focused': {\r\n color: '#071B27'\r\n }\r\n },\r\n inputRoot: {\r\n // width: '100%',\r\n border: '1px solid #BECEDA',\r\n borderRadius: '3px',\r\n color: '#838383',\r\n fontSize: '13px',\r\n '&:hover': {\r\n border: '1px solid #41B7D7'\r\n }\r\n },\r\n inputRootDisabled: {\r\n border: '1px solid #BECEDA',\r\n '&:hover': {\r\n border: '1px solid #BECEDA'\r\n }\r\n },\r\n menuList: {\r\n border: '1px solid #F0F0F0',\r\n padding: '0',\r\n minWidth: '140px',\r\n boxShadow: '1px 2px 15px rgba(0,0,0, 0.08)',\r\n borderRadius: '4px'\r\n },\r\n menuItemRoot: {\r\n color: '#666666',\r\n '&:hover': {\r\n color: '#000000'\r\n }\r\n },\r\n error: {\r\n boxShadow: 'none',\r\n border: '1px solid #EB5757',\r\n '&:hover': {\r\n border: '1px solid #EB5757'\r\n }\r\n },\r\n disabledMenuItem: {\r\n display: 'none'\r\n }\r\n});\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Select from '@material-ui/core/Select';\r\nimport InputBase from '@material-ui/core/InputBase';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport FormControl from '@material-ui/core/FormControl';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst DropDown = ({\r\n input,\r\n isHiddenErrorMsg,\r\n list,\r\n field,\r\n className,\r\n label,\r\n placeholder,\r\n inputBaseClass,\r\n selectRootClass,\r\n selectIconClass,\r\n disabled = false,\r\n meta: { touched, error, submitFailed }\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n return (\r\n <FormControl\r\n className={classNames(classes.wrapper, className)}\r\n disabled={disabled}\r\n >\r\n {label && (\r\n <InputLabel\r\n className={classes.label}\r\n htmlFor={`${label}-currency-input`}\r\n classes={{\r\n disabled: classes.disabledLabel\r\n }}\r\n >\r\n {t(label)}\r\n </InputLabel>\r\n )}\r\n <Select\r\n value={input.value}\r\n onChange={input.onChange}\r\n classes={{\r\n root: classNames(classes.selectRoot, selectRootClass),\r\n icon: selectIconClass,\r\n disabled: classes.selectRootDisabled\r\n }}\r\n displayEmpty\r\n MenuProps={{\r\n classes: {\r\n list: classes.menuList\r\n }\r\n }}\r\n input={\r\n <InputBase\r\n classes={{\r\n root: classNames(classes.inputRoot, inputBaseClass, {\r\n [classes.error]: (touched || submitFailed) && error\r\n }),\r\n disabled: classes.inputRootDisabled\r\n }}\r\n />\r\n }\r\n >\r\n {placeholder && (\r\n <MenuItem value=\"\" disabled className={classes.disabledMenuItem}>\r\n {t(placeholder)}\r\n </MenuItem>\r\n )}\r\n {list.map((item, index) => (\r\n <MenuItem\r\n key={index}\r\n value={field ? item['id'] : item}\r\n classes={{ root: classes.menuItemRoot }}\r\n >\r\n {field\r\n ? selectedLanguage === 'Norway' &&\r\n Object.keys(item['Norwegian']).length\r\n ? item[`Norwegian`][field]\r\n : item[field]\r\n : t(item)}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n {!isHiddenErrorMsg && (touched || submitFailed) && error && (\r\n <FormHelperText error>{t(error)}</FormHelperText>\r\n )}\r\n </FormControl>\r\n );\r\n};\r\n\r\nexport default DropDown;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n inputRoot: {\r\n '&::before': {\r\n border: 0\r\n },\r\n '&:hover': {\r\n '&::before': {\r\n borderBottom: '2px solid rgba(0, 0, 0, 0.87)'\r\n }\r\n }\r\n },\r\n input: {\r\n fontSize: '13px',\r\n color: '#717171'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\n\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { createFilterOptions } from '@material-ui/lab';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst AutocompleteDropdown = ({ onChange, value, items, label, search }) => {\r\n const classes = useStyles();\r\n\r\n const [inputValue, setInputValue] = React.useState('');\r\n\r\n const filterOptions = createFilterOptions({\r\n stringify: option => option[search]\r\n });\r\n\r\n return (\r\n <Autocomplete\r\n classes={{ inputRoot: classes.inputRoot, input: classes.input }}\r\n value={items.length && (value || value === 0) ? items[value] : value}\r\n onChange={(event, newValue) => {\r\n onChange(newValue.value);\r\n }}\r\n inputValue={inputValue}\r\n onInputChange={(event, newInputValue) => {\r\n setInputValue(newInputValue);\r\n }}\r\n options={items}\r\n getOptionLabel={option => {\r\n if (!option) return '';\r\n return option[label];\r\n }}\r\n filterOptions={filterOptions}\r\n id=\"disable-clearable\"\r\n disableClearable\r\n renderInput={params => (\r\n <TextField placeholder=\"Business Owner\" {...params} />\r\n )}\r\n />\r\n );\r\n};\r\n\r\nexport default AutocompleteDropdown;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n wrapper: {\r\n marginBottom: '19px'\r\n },\r\n label: {\r\n display: 'block',\r\n marginBottom: '5px',\r\n color: '#071B27',\r\n fontSize: 13,\r\n fontWeight: '500',\r\n lineHeight: '18px'\r\n },\r\n formControlLabelRoot: {\r\n marginRight: '24px'\r\n },\r\n checkboxRoot: {},\r\n checked: {\r\n color: '#1D9DC6'\r\n },\r\n disabledCheckbox: {\r\n color: '#BECEDA',\r\n backgroundColor: '#BECEDA'\r\n },\r\n checkboxIcon: {\r\n color: theme.baseUI.color,\r\n fontSize: '21px'\r\n },\r\n checkboxLabel: {\r\n display: 'flex',\r\n position: 'relative'\r\n },\r\n disabled: {\r\n color: '#BECEDA'\r\n }\r\n}));\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport FormGroup from '@material-ui/core/FormGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank';\r\nimport CheckBoxIcon from '@material-ui/icons/CheckBox';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst CheckboxButtonsGroup = ({\r\n input,\r\n title,\r\n disabledDays,\r\n isDisabledChange,\r\n className,\r\n label,\r\n popover,\r\n meta: { touched, error }\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const onChangeHandler = e => {\r\n if (isDisabledChange) return;\r\n\r\n const item = e.target.value;\r\n const isChecked = e.target.checked;\r\n const copyList = { ...input.value };\r\n\r\n copyList[item] = isChecked;\r\n\r\n input.onChange(copyList);\r\n };\r\n\r\n const isDisabled = (el, value) => {\r\n if (!disabledDays) return false;\r\n\r\n return !!disabledDays.find(\r\n item => (!value || isDisabledChange) && item === el\r\n );\r\n };\r\n\r\n return (\r\n <div className={classNames(classes.wrapper, className)}>\r\n <label className={classes.label}>{t(title)}</label>\r\n\r\n <FormGroup aria-label=\"position\" row>\r\n {Object.keys(input.value).map((keyName, index) => (\r\n <FormControlLabel\r\n classes={{\r\n root: classes.formControlLabelRoot,\r\n disabled: classes.disabled\r\n }}\r\n key={index}\r\n value={keyName}\r\n disabled={isDisabled(keyName, input.value[keyName])}\r\n control={\r\n <Checkbox\r\n checked={input.value[keyName]}\r\n onChange={onChangeHandler}\r\n icon={\r\n <CheckBoxOutlineBlankIcon className={classes.checkboxIcon} />\r\n }\r\n checkedIcon={<CheckBoxIcon className={classes.checkboxIcon} />}\r\n color=\"default\"\r\n classes={{\r\n root: classes.checkboxRoot,\r\n checked: classes.checked,\r\n disabled: classes.disabledCheckbox\r\n }}\r\n />\r\n }\r\n label={\r\n <div className={classes.checkboxLabel}>\r\n {label\r\n ? typeof label === 'string'\r\n ? t(label)\r\n : label\r\n : t(keyName)}\r\n {popover && popover}\r\n </div>\r\n }\r\n labelPlacement=\"end\"\r\n />\r\n ))}\r\n </FormGroup>\r\n\r\n {touched && error && <FormHelperText error>{t(error)}</FormHelperText>}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CheckboxButtonsGroup;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\nimport theme from 'theme';\r\n\r\nexport const useStyles = makeStyles(theme=>({\r\n wrapper: {\r\n marginBottom: '8px'\r\n },\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between'\r\n },\r\n buttonsGroup: {\r\n width: '185px',\r\n marginBottom: '12px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginLeft: '20px'\r\n }\r\n },\r\n heading: {\r\n fontWeight: '500',\r\n color: '#000000'\r\n },\r\n subTitleLink: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n color: '#748CA0'\r\n },\r\n launchIcon: {\r\n fontSize: '16px',\r\n marginLeft: '3px'\r\n },\r\n root: {\r\n marginBottom: '8px',\r\n boxShadow: 'none',\r\n border: '1px solid #E2EBF6',\r\n borderRadius: 3,\r\n '&:before': {\r\n display: 'none'\r\n },\r\n '&:last-child': {\r\n marginBottom: '30px'\r\n }\r\n },\r\n rootExpanded: {\r\n margin: '0 0 6px !important',\r\n '&:last-child': {\r\n marginBottom: '30px !important'\r\n }\r\n },\r\n rootSummary: {\r\n padding: '0 10px 0 10px',\r\n minHeight: '53px !important'\r\n },\r\n expandMoreIconRoot: {\r\n order: '-1'\r\n },\r\n expandMoreIcon: {\r\n fontSize: '19px',\r\n color: '#748CA0'\r\n },\r\n deleteIcon: {\r\n fontSize: '23px',\r\n color: '#59758B'\r\n },\r\n headerContentWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n marginLeft: '11px'\r\n },\r\n panelSummaryContent: {\r\n margin: '3px 0 !important'\r\n },\r\n panelDetailsRoot: {\r\n padding: '3px 30px 30px'\r\n },\r\n error: {\r\n border: '1px solid #EB5757'\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport uuid from 'uuid/v1';\r\nimport classNames from 'classnames';\r\n\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport Link from '@material-ui/core/Link';\r\n\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport DeleteOutlineIcon from '@material-ui/icons/DeleteOutline';\r\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\r\nimport LaunchIcon from '@material-ui/icons/Launch';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport { TextIconButton } from 'components';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst SubTitleLink = ({ getSubTitleLink, fields, index }) => {\r\n const [t] = useTranslation();\r\n const classes = useStyles();\r\n\r\n if (!getSubTitleLink) return null;\r\n\r\n const subTitleLink = getSubTitleLink(fields.get(index));\r\n if (!subTitleLink) return null;\r\n\r\n return (\r\n <Link\r\n onClick={e => e.stopPropagation()}\r\n href={subTitleLink.link}\r\n variant={'body1'}\r\n target=\"_blank\"\r\n className={classes.subTitleLink}\r\n >\r\n {t(subTitleLink.title)} <LaunchIcon className={classes.launchIcon} />\r\n </Link>\r\n );\r\n};\r\n\r\nconst ExpansionPanelWrapper = ({\r\n children,\r\n isAddDeleteActions,\r\n disabledItemIndex,\r\n getTitle,\r\n getSubTitleLink,\r\n fields,\r\n add,\r\n remove,\r\n removeAll,\r\n isHiddenAddNewButton,\r\n deleteDescription,\r\n meta,\r\n tabName,\r\n tabNameAll\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const confirm = React.useContext(ConfirmContext);\r\n const { error, submitFailed } = meta;\r\n\r\n const [expanded, setExpanded] = React.useState({});\r\n\r\n React.useEffect(() => {\r\n if (fields.getAll().length) {\r\n const firstField = fields.get(0);\r\n setExpanded({ ...expanded, [firstField.id]: true });\r\n }\r\n }, []);\r\n\r\n const onExpandHandler = (isExpanded, fieldId) => {\r\n setExpanded({ ...expanded, [fieldId]: isExpanded });\r\n };\r\n\r\n const onAddHandler = () => {\r\n const id = uuid();\r\n setExpanded({ ...expanded, [id]: true });\r\n add(fields, id);\r\n };\r\n\r\n const onDeleteHandler = (e, index) => {\r\n e.stopPropagation();\r\n\r\n confirm({\r\n title: `${t('Are you sure you want to delete')} ${t(tabName)}?`,\r\n description: deleteDescription,\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n if (remove) remove(fields.get(index));\r\n fields.remove(index);\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const onDeleteAllHandler = () => {\r\n confirm({\r\n title: `${t('Are you sure you want to delete')} ${t(tabNameAll)}?`,\r\n description: deleteDescription,\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n if (disabledItemIndex === 0 || disabledItemIndex) {\r\n const fieldCopy = fields.get(disabledItemIndex);\r\n fields.removeAll();\r\n fields.push(fieldCopy);\r\n } else {\r\n if (removeAll) removeAll();\r\n fields.removeAll();\r\n }\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const isDeleteAllBtn = () => {\r\n if (fields.length - 1 > disabledItemIndex) return true;\r\n return !!fields.length && disabledItemIndex === undefined;\r\n };\r\n\r\n const isDeleteBtn = () => {\r\n if (!isAddDeleteActions) return false;\r\n if (fields.length > 1) return true;\r\n return !!fields.length && disabledItemIndex === undefined;\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n {isAddDeleteActions && (\r\n <div className={classNames(classes.row, classes.buttonsGroup)}>\r\n {!isHiddenAddNewButton && (\r\n <TextIconButton\r\n icon={<AddCircleOutlineIcon />}\r\n text={t('Add new')}\r\n click={onAddHandler}\r\n />\r\n )}\r\n {isDeleteAllBtn() && (\r\n <TextIconButton\r\n icon={<DeleteOutlineIcon />}\r\n text={t('Delete all')}\r\n click={onDeleteAllHandler}\r\n />\r\n )}\r\n </div>\r\n )}\r\n\r\n {fields.map((field, index) => {\r\n const fieldObj = fields.get(index);\r\n\r\n return (\r\n <Accordion\r\n key={`${index}_${fieldObj.id}`}\r\n expanded={expanded[fieldObj.id] || false}\r\n onChange={(event, isExpanded) =>\r\n onExpandHandler(isExpanded, fieldObj.id)\r\n }\r\n classes={{\r\n root: classNames(classes.root, {\r\n [classes.error]: submitFailed && error && error[index]\r\n }),\r\n expanded: classes.rootExpanded\r\n }}\r\n >\r\n <AccordionSummary\r\n classes={{\r\n root: classes.rootSummary,\r\n content: classes.panelSummaryContent,\r\n expandIcon: classes.expandMoreIconRoot\r\n }}\r\n expandIcon={<ExpandMoreIcon className={classes.expandMoreIcon} />}\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\"\r\n >\r\n <div className={classes.headerContentWrapper}>\r\n <div>\r\n <Typography variant={'body1'} className={classes.heading}>\r\n {t(getTitle(fields.get(index)))}\r\n </Typography>\r\n <SubTitleLink\r\n fields={fields}\r\n index={index}\r\n getSubTitleLink={getSubTitleLink}\r\n />\r\n </div>\r\n {isDeleteBtn() && (\r\n <IconButton\r\n aria-label=\"delete\"\r\n onClick={e => onDeleteHandler(e, index)}\r\n >\r\n <DeleteOutlineIcon className={classes.deleteIcon} />\r\n </IconButton>\r\n )}\r\n </div>\r\n </AccordionSummary>\r\n <AccordionDetails classes={{ root: classes.panelDetailsRoot }}>\r\n {children(field, index, meta, fieldObj)}\r\n </AccordionDetails>\r\n </Accordion>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ExpansionPanelWrapper;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n title: {\r\n fontWeight: 'bold'\r\n },\r\n panel: {\r\n padding: '0',\r\n margin: '0 !important',\r\n boxShadow: 'none',\r\n borderTop: '1px solid #e2ebf6',\r\n '&:first-child': {\r\n borderRadius: '0'\r\n },\r\n '&:last-child': {\r\n borderRadius: '0',\r\n borderBottom: '1px solid #e2ebf6'\r\n },\r\n '&:before': {\r\n display: 'none'\r\n }\r\n },\r\n panelSummary: {\r\n minHeight: '42px !important',\r\n padding: '0'\r\n },\r\n panelSummaryContent: {\r\n margin: '0'\r\n },\r\n panelSummaryExpanded: {\r\n margin: '0 !important'\r\n },\r\n expandIcon: {\r\n padding: '0',\r\n margin: '0'\r\n },\r\n icon: {\r\n fontSize: '20px',\r\n color: '#748CA0'\r\n },\r\n panelDetails: {\r\n padding: '8px 0 20px',\r\n flexDirection: 'column'\r\n },\r\n image: {\r\n width: '300px',\r\n height: '160px',\r\n backgroundSize: 'cover',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center',\r\n borderRadius: '3px',\r\n backgroundColor: '#E2F5F8',\r\n marginBottom: '20px'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\n\r\nimport { Typography } from '@material-ui/core';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport Accordion from '@material-ui/core/Accordion';\r\n\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\n\r\nimport { BulletPoints } from 'components';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst SimpleExpansionPanel = ({\r\n list,\r\n defaultExpanded,\r\n firstDefaultExpanded,\r\n titleTypographyVariant,\r\n panelDetailsClass\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const itemsRef = React.useRef([]);\r\n\r\n const scrollIntoView = idx => {\r\n const ref = itemsRef.current[idx];\r\n\r\n if (!ref || ref.isOpened) {\r\n ref.isOpened = false;\r\n return;\r\n }\r\n\r\n ref.isOpened = true;\r\n\r\n setTimeout(() => {\r\n ref.scrollIntoView({\r\n behavior: 'smooth'\r\n });\r\n }, 300);\r\n };\r\n\r\n React.useEffect(() => {\r\n itemsRef.current = itemsRef.current.slice(0, list.length);\r\n }, []);\r\n\r\n return (\r\n <div>\r\n {list.map((item, index) => (\r\n <Accordion\r\n key={item.title}\r\n classes={{ root: classes.panel }}\r\n defaultExpanded={\r\n firstDefaultExpanded && !index ? true : defaultExpanded\r\n }\r\n ref={el => (itemsRef.current[index] = el)}\r\n >\r\n <AccordionSummary\r\n classes={{\r\n root: classes.panelSummary,\r\n content: classes.panelSummaryContent,\r\n expandIcon: classes.expandIcon,\r\n expanded: classes.panelSummaryExpanded\r\n }}\r\n expandIcon={<ExpandMoreIcon classes={{ root: classes.icon }} />}\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\"\r\n onClick={() => scrollIntoView(index)}\r\n >\r\n <Typography\r\n variant={\r\n titleTypographyVariant ? titleTypographyVariant : `body1`\r\n }\r\n classes={{ root: classes.title }}\r\n >\r\n {t(item.title)}\r\n </Typography>\r\n </AccordionSummary>\r\n <AccordionDetails\r\n classes={{\r\n root: classNames(classes.panelDetails, panelDetailsClass)\r\n }}\r\n >\r\n {(item.title === 'What to bring' ||\r\n item.title === 'Included' ||\r\n item.title === 'Not included') && (\r\n <BulletPoints item={item.description.props.children} />\r\n )}\r\n\r\n {item.title === 'Overview' && item.image && (\r\n <div\r\n className={classes.image}\r\n style={{\r\n backgroundImage: `url(${item.image})`\r\n }}\r\n >\r\n {''}\r\n </div>\r\n )}\r\n {item.title !== 'What to bring' &&\r\n item.title !== 'Included' &&\r\n item.title !== 'Not included' &&\r\n item.description}\r\n </AccordionDetails>\r\n </Accordion>\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nexport default SimpleExpansionPanel;\r\n","import { makeStyles,theme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme =>({\r\n root: {\r\n padding: '6px 0',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n color: '#59758B',\r\n '&:hover': {\r\n backgroundColor: 'white',\r\n [theme.breakpoints.down('sm')]:{\r\n alignItems: 'center',\r\n }\r\n }\r\n },\r\n startIcon: {\r\n fontSize: '19px',\r\n color: '#59758B'\r\n }\r\n}));\r\n","import React from 'react';\r\n\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst TextIconButton = ({ text, icon, click }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <Button startIcon={icon} classes={classes} onClick={click}>\r\n {text}\r\n </Button>\r\n );\r\n};\r\n\r\nexport default TextIconButton;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n marginBottom: '24px',\r\n paddingBottom: '25px',\r\n borderBottom: '1px solid #E5E5E5',\r\n '&:last-child': {\r\n borderBottom: 0,\r\n marginBottom: 0,\r\n paddingBottom: 0,\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n }\r\n },\r\n rowIcon: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]: {\r\n justifyContent: 'flex-start',\r\n width: '100%',\r\n }\r\n },\r\n title: {\r\n fontWeight: 500,\r\n marginBottom: '12px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '8px',\r\n fontSize: '18px',\r\n }\r\n },\r\n wrapper: {\r\n width: '100%',\r\n },\r\n divider: {\r\n marginBottom: '25px',\r\n height: '1px',\r\n backgroundColor: '#e2ebf6',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '15px',\r\n }\r\n },\r\n deleteIcon: {\r\n fontSize: '23px',\r\n marginTop: '15px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginTop: '10px',\r\n fontSize: '20px',\r\n }\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Field, FieldArray } from 'redux-form';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport { CheckboxButtonsGroup, TimeDuration } from 'components';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst ScheduleDaysTimeDuration = ({ field, disabledDays }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Field\r\n name={`${field}.days`}\r\n title=\"Select Days *\"\r\n disabledDays={disabledDays}\r\n component={CheckboxButtonsGroup}\r\n />\r\n <div className={classes.divider}>{''}</div>\r\n <Typography className={classes.title} variant=\"body1\">\r\n {t('Start time & Duration')}\r\n </Typography>\r\n <FieldArray\r\n name={`${field}.startTimeAndDuration`}\r\n disabledItemIndex={0}\r\n component={TimeDuration}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default ScheduleDaysTimeDuration;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n }\r\n },\r\n timeDurationRow: {\r\n paddingBottom: '24px',\r\n marginBottom: '24px',\r\n borderBottom: '1px solid #e2ebf6',\r\n '&:last-child': {\r\n paddingBottom: 0,\r\n marginBottom: 0,\r\n border: 0,\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n paddingBottom: '16px',\r\n marginBottom: '16px',\r\n }\r\n },\r\n deleteIcon: {\r\n fontSize: '23px',\r\n marginTop: '15px',\r\n color: '#59758B',\r\n [theme.breakpoints.down('sm')]: {\r\n marginTop: '10px',\r\n fontSize: '20px',\r\n }\r\n },\r\n buttonsGroup: {\r\n width: '195px',\r\n marginBottom: '13px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n marginBottom: '10px',\r\n mrrginLeft : '20px'\r\n }\r\n },\r\n timePickerWrapper: {\r\n width: '150px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n marginBottom: '10px',\r\n }\r\n },\r\n inputWrapper: {\r\n width: '75px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n marginBottom: '10px',\r\n }\r\n },\r\n dropDownWrapper: {\r\n width: '210px',\r\n marginTop: '17px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n marginTop: '10px',\r\n }\r\n }\r\n}));\r\n","import { isRequiredFieldTrueInObject } from 'utils/validators';\r\nimport moment from 'moment';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (values.daysArray && values.daysArray.length) {\r\n const daysArrayErrors = [];\r\n\r\n values.daysArray.forEach((day, dayIndex) => {\r\n const daysErrors = {};\r\n\r\n if (day.startTimeAndDuration && day.startTimeAndDuration.length) {\r\n const timeArrayErrors = [];\r\n\r\n const startTimeAndDurationFormatted = day.startTimeAndDuration.map(\r\n item => ({\r\n ...item,\r\n startTime: moment(item.startTime).format('HH:mm')\r\n })\r\n );\r\n\r\n startTimeAndDurationFormatted.map((item, itemIndex) => {\r\n const timeErrors = {};\r\n\r\n if (item.startTime && item.startTime === 'Invalid date') {\r\n timeErrors.startTime = 'Invalid time format';\r\n timeArrayErrors[itemIndex] = timeErrors;\r\n }\r\n });\r\n\r\n day.startTimeAndDuration.forEach((time, timeIndex) => {\r\n const timeErrors = {};\r\n\r\n if (isRequiredFieldTrueInObject(time.startTime || '', true)) {\r\n timeErrors.startTime = 'Time is required';\r\n timeArrayErrors[timeIndex] = timeErrors;\r\n }\r\n });\r\n\r\n if (timeArrayErrors.length || timeArrayErrors['_error']) {\r\n daysErrors.startTimeAndDuration = timeArrayErrors;\r\n daysArrayErrors[dayIndex] = daysErrors;\r\n }\r\n }\r\n });\r\n\r\n if (daysArrayErrors.length) {\r\n errors.daysArray = daysArrayErrors;\r\n errors.daysArray = { ...daysArrayErrors, _error: { ...daysArrayErrors } };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport classNames from 'classnames';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Field, reduxForm } from 'redux-form';\r\n\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport DeleteOutlineIcon from '@material-ui/icons/DeleteOutline';\r\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport { DropDown, Input, TextIconButton, TimePicker } from 'components';\r\n\r\nimport { useStyles } from './styles';\r\nimport validate from './validate';\r\n\r\nconst TimeDuration = ({\r\n fields,\r\n disabledItemIndex,\r\n meta: { submitFailed, error }\r\n}) => {\r\n const classes = useStyles();\r\n const confirm = React.useContext(ConfirmContext);\r\n const [t] = useTranslation();\r\n\r\n const onAddFieldHandler = () => {\r\n fields.push({ startTime: moment(), duration: null, timeType: 'hours' });\r\n };\r\n\r\n const onDeleteFieldHandler = index => {\r\n confirm({\r\n title: 'Are you sure you want to delete start time and duration?',\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n fields.remove(index);\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const onDeleteAllFields = () => {\r\n confirm({\r\n title: 'Are you sure you want to delete all?',\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n if (disabledItemIndex === 0 || disabledItemIndex) {\r\n const fieldCopy = fields.get(disabledItemIndex);\r\n fields.removeAll();\r\n fields.push(fieldCopy);\r\n } else {\r\n fields.removeAll();\r\n }\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n return (\r\n <div>\r\n <div className={classNames(classes.row, classes.buttonsGroup)}>\r\n <TextIconButton\r\n icon={<AddCircleOutlineIcon />}\r\n text={t('Add new')}\r\n click={onAddFieldHandler}\r\n />\r\n\r\n {fields.length > 1 && (\r\n <TextIconButton\r\n icon={<DeleteOutlineIcon />}\r\n text={t('Delete all')}\r\n click={onDeleteAllFields}\r\n />\r\n )}\r\n </div>\r\n\r\n {fields.map((field, index) => (\r\n <div key={index} className={classes.timeDurationRow}>\r\n <div className={classNames(classes.row)}>\r\n <div className={classes.timePickerWrapper}>\r\n <Field\r\n name={`${field}.startTime`}\r\n label=\"Start time *\"\r\n component={TimePicker}\r\n />\r\n </div>\r\n <Field\r\n name={`${field}.duration`}\r\n isOnlyNumber={true}\r\n maxLength={9}\r\n placeholder=\"Duration\"\r\n isHiddenErrorMsg={error && error[index]}\r\n label=\"Duration\"\r\n className={classes.inputWrapper}\r\n component={Input}\r\n />\r\n <div className={classes.dropDownWrapper}>\r\n <Field\r\n name={`${field}.timeType`}\r\n isHiddenErrorMsg={true}\r\n list={['minutes', 'hours', 'days', 'weeks']}\r\n component={DropDown}\r\n />\r\n </div>\r\n {fields.length > 1 && (\r\n <IconButton\r\n classes={{ sizeSmall: classes.deleteIcon }}\r\n size=\"small\"\r\n aria-label=\"delete\"\r\n onClick={() => onDeleteFieldHandler(index)}\r\n >\r\n <DeleteOutlineIcon />\r\n </IconButton>\r\n )}\r\n </div>\r\n {submitFailed && error && error[index] && (\r\n <FormHelperText error>{t(error[index])}</FormHelperText>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nexport default reduxForm({\r\n form: 'scheduleDateTimeForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: false,\r\n touchOnBlur: false,\r\n validate\r\n})(TimeDuration);\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%'\r\n },\r\n label: {\r\n marginBottom: 6,\r\n color: '#071B27',\r\n textTransform: 'uppercase',\r\n fontSize: 10,\r\n lineHeight: '12px',\r\n letterSpacing: '0.035em'\r\n },\r\n customTimePicker: {\r\n zIndex: '0',\r\n position: 'relative',\r\n borderRadius: 3,\r\n border: '1px solid #BECEDA',\r\n '&:hover': {\r\n border: '1px solid #41B7D7'\r\n }\r\n },\r\n scheduleIcon: {\r\n position: 'absolute',\r\n fontSize: '21px',\r\n left: '10px',\r\n top: '7px'\r\n },\r\n error: {\r\n border: '1px solid #EB5757',\r\n '&:hover': {\r\n border: '1px solid #EB5757'\r\n }\r\n }\r\n});\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\nimport MomentUtils from '@date-io/moment';\r\n\r\nimport ScheduleIcon from '@material-ui/icons/Schedule';\r\n\r\nimport {\r\n MuiPickersUtilsProvider,\r\n KeyboardTimePicker\r\n} from '@material-ui/pickers';\r\n\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst TimePicker = ({\r\n input,\r\n meta: { touched, error, submitFailed },\r\n label,\r\n isHiddenErrorMsg,\r\n className\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const onChangeHandler = date => {\r\n input.onChange(date);\r\n };\r\n\r\n return (\r\n <div className={classNames(classes.root, className)}>\r\n <InputLabel\r\n className={classes.label}\r\n htmlFor={`${label}-input`}\r\n classes={{\r\n disabled: classes.disabledLabel\r\n }}\r\n >\r\n {t(label)}\r\n </InputLabel>\r\n\r\n <div\r\n className={classNames('custom-time-picker', classes.customTimePicker, {\r\n [classes.error]: (submitFailed || touched) && error\r\n })}\r\n >\r\n <MuiPickersUtilsProvider utils={MomentUtils}>\r\n <KeyboardTimePicker\r\n clearable={false}\r\n ampm={false}\r\n label={label}\r\n value={input.value}\r\n onChange={onChangeHandler}\r\n invalidDateMessage={false}\r\n />\r\n </MuiPickersUtilsProvider>\r\n <ScheduleIcon className={classes.scheduleIcon} />\r\n </div>\r\n\r\n {!isHiddenErrorMsg && (touched || submitFailed) && error && (\r\n <FormHelperText error>{error}</FormHelperText>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default TimePicker;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n wrapper: {\r\n margin: '78px 0 30px'\r\n },\r\n passPrices: {\r\n margin: '30px 0',\r\n \r\n },\r\n passFixedPrices: {\r\n margin: '78px 0 30px'\r\n },\r\n title: {\r\n marginBottom: '10px',\r\n }\r\n});\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { SCHEDULE_SECTION } from 'pages/create-activity/constants';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport {\r\n PricesDaily,\r\n PricesEqual,\r\n PricesDailySchedule,\r\n DailyPricesFixed,\r\n PricesFixed\r\n} from 'components';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst PricesCreate = ({\r\n isOpen,\r\n selectedTabIndex,\r\n scheduleTabIndex,\r\n onSubmit,\r\n setSubmitButton,\r\n isUpdate\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const DAILY_PRICES = {\r\n firstSection: 0,\r\n secondSection: 1,\r\n thirdSection: 2\r\n };\r\n\r\n if (isOpen) {\r\n selectedTabIndex++;\r\n }\r\n\r\n if (scheduleTabIndex === SCHEDULE_SECTION.dateNoTime) {\r\n return (\r\n <div className={classes.wrapper}>\r\n {selectedTabIndex === DAILY_PRICES.firstSection && (\r\n <DailyPricesFixed\r\n onSubmit={values => onSubmit(values, 'pricesFixedForm')}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )}\r\n {selectedTabIndex === DAILY_PRICES.secondSection && (\r\n <PricesDaily\r\n onSubmit={values => onSubmit(values, 'pricesDailyForm')}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )}\r\n {selectedTabIndex === DAILY_PRICES.thirdSection && (\r\n <PricesEqual\r\n onSubmit={values => onSubmit(values, 'pricesEqualForm')}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )}\r\n </div>\r\n );\r\n }\r\n\r\n if (scheduleTabIndex === SCHEDULE_SECTION.dateTime) {\r\n return (\r\n <div className={classes.wrapper}>\r\n {selectedTabIndex === DAILY_PRICES.firstSection && (\r\n <DailyPricesFixed\r\n onSubmit={values => onSubmit(values, 'pricesFixedForm')}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )}\r\n {selectedTabIndex === DAILY_PRICES.secondSection && (\r\n <PricesDailySchedule\r\n onSubmit={values => onSubmit(values, 'pricesDailyScheduleForm')}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )}\r\n {selectedTabIndex === DAILY_PRICES.thirdSection && (\r\n <PricesEqual\r\n onSubmit={values => onSubmit(values, 'pricesEqualForm')}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )}\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div>\r\n {selectedTabIndex === DAILY_PRICES.firstSection && (\r\n <div className={classes.passFixedPrices}>\r\n <PricesFixed\r\n onSubmit={values => onSubmit(values, 'pricesFixedForm')}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </div>\r\n )}\r\n {selectedTabIndex === DAILY_PRICES.secondSection && (\r\n <div className={classes.passPrices}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('Prices')}\r\n </Typography>\r\n <PricesEqual\r\n onSubmit={values => onSubmit(values, 'pricesEqualForm')}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PricesCreate;\r\n","import React from 'react';\r\n\r\nimport { PricesFixed, PricesCategorySection, PricePerDay } from 'components';\r\n\r\nimport { useStyles } from 'components/prices-create/styles';\r\n\r\nconst AccommodationPricesCreate = ({\r\n selectedTabIndex,\r\n onSubmit,\r\n setSubmitButton,\r\n isUpdate\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const PRICES = {\r\n fixedPrices: 0,\r\n categoryPrices: 1,\r\n dailyPrices: 2\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n {selectedTabIndex === PRICES.fixedPrices && (\r\n <PricesFixed\r\n onSubmit={values => onSubmit(values, 'pricesFixedForm')}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )}\r\n {selectedTabIndex === PRICES.categoryPrices && (\r\n <PricesCategorySection\r\n onSubmit={values => onSubmit(values, 'pricesCategoryForm')}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )}\r\n {selectedTabIndex === PRICES.dailyPrices && (\r\n <PricePerDay\r\n onSubmit={values => onSubmit(values, 'pricesDailyForm')}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default AccommodationPricesCreate;\r\n","import {\r\n isRequired,\r\n isFieldInArray,\r\n isRequiredCurrency\r\n} from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (values.days && values.days.length) {\r\n const days = values.days;\r\n const daysArrayErrors = [];\r\n\r\n days.forEach((day, dayIndex) => {\r\n const daysErrors = {};\r\n\r\n const categoryArrayErrors = [];\r\n\r\n day.categories.forEach((category, categoryIndex) => {\r\n const categoryErrors = {};\r\n\r\n if (isRequired(category.participant || '', true)) {\r\n categoryErrors['participant'] = 'Category is required';\r\n categoryArrayErrors[categoryIndex] = categoryErrors;\r\n } else if (\r\n isFieldInArray(category.participant, day.categories, 'participant')\r\n ) {\r\n categoryErrors['participant'] = 'Category already exists';\r\n categoryArrayErrors[categoryIndex] = categoryErrors;\r\n }\r\n\r\n if (isRequiredCurrency(category)) {\r\n categoryErrors['USD'] = 'Error';\r\n categoryErrors['EUR'] = 'Error';\r\n categoryErrors['NOK'] = 'Error';\r\n categoryArrayErrors['_error'] = {\r\n ...categoryArrayErrors['_error'],\r\n [categoryIndex]:\r\n 'Value for at least one currency for each category should be filled in'\r\n };\r\n categoryArrayErrors[categoryIndex] = categoryErrors;\r\n }\r\n });\r\n\r\n if (categoryArrayErrors.length || categoryArrayErrors['_error']) {\r\n daysErrors['categories'] = categoryArrayErrors;\r\n daysArrayErrors[dayIndex] = daysErrors;\r\n }\r\n });\r\n\r\n if (daysArrayErrors.length) {\r\n errors.days = daysArrayErrors;\r\n errors.days = { ...daysArrayErrors, _error: { ...daysArrayErrors } };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { FieldArray, reduxForm } from 'redux-form';\r\n\r\nimport { CATEGORIES } from 'pages/create-activity/constants';\r\n\r\nimport {\r\n ExpansionPanelWrapper,\r\n CategoriesPrices,\r\n FormActionButtons\r\n} from 'components';\r\n\r\nimport validate from './validate';\r\n\r\nconst initialValues = {\r\n days: []\r\n};\r\n\r\nconst PricesDaily = ({\r\n handleSubmit,\r\n pricesDailyForm,\r\n setSubmitButton,\r\n isUpdate\r\n // selectedTabIndex\r\n}) => {\r\n const getAvailableCategoriesNames = index => {\r\n const days = [...pricesDailyForm.values.days];\r\n const categories = days[index].categories.map(item => item.participant);\r\n return CATEGORIES.filter(x => !categories.includes(x));\r\n };\r\n\r\n return (\r\n <div>\r\n <form onSubmit={handleSubmit}>\r\n <FieldArray\r\n name=\"days\"\r\n component={ExpansionPanelWrapper}\r\n isAddDeleteActions={false}\r\n getTitle={item => item.day}\r\n children={(field, index) => (\r\n <FieldArray\r\n name={`${field}.categories`}\r\n component={CategoriesPrices}\r\n availableCategories={getAvailableCategoriesNames(index)}\r\n tabName=\"price\"\r\n tabNameAll=\"all prices\"\r\n // selectedTabIndex={selectedTabIndex}\r\n />\r\n )}\r\n />\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n pricesDailyForm: state.form.pricesDailyForm\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'pricesDailyForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, null)(PricesDaily));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\nimport { Field, FieldArray } from 'redux-form';\r\nexport const useStyles = makeStyles((theme) => ({\r\n wrapper: {\r\n width: '100%'\r\n },\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n alignItems: 'flex-start'\r\n },\r\n },\r\n currencyField: {\r\n width: '147px !important',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100% !important',\r\n marginBottom: '10px'\r\n },\r\n },\r\n helpIcon: {\r\n fontSize: '19px',\r\n marginTop: '27px',\r\n color: '#182e3d',\r\n [theme.breakpoints.down('sm')]: {\r\n marginTop: '10px'\r\n },\r\n },\r\n dropDownField: {\r\n marginBottom: '18px',\r\n width: '493px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%'\r\n },\r\n },\r\n buttonsGroup: {\r\n width: '195px',\r\n marginBottom: '12px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%'\r\n },\r\n },\r\n deleteIcon: {\r\n fontSize: '23px',\r\n color: '#59758B'\r\n },\r\n deleteBtn: {\r\n height: '36px',\r\n padding: '0',\r\n marginTop: '18px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginTop: '10px'\r\n },\r\n },\r\n category: {\r\n paddingBottom: '25px',\r\n marginBottom: '25px',\r\n borderBottom: '1px solid #e2ebf6',\r\n '&:last-child': {\r\n paddingBottom: '0',\r\n marginBottom: '0',\r\n border: '0'\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n }\r\n}));\r\n\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { Field } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { CATEGORIES } from 'pages/create-activity/constants';\r\n\r\nimport HelpIcon from '@material-ui/icons/Help';\r\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\r\nimport DeleteOutlineIcon from '@material-ui/icons/DeleteOutline';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport {\r\n DropDown,\r\n CurrencyInputWrapper,\r\n PopoverWrapper,\r\n TextIconButton\r\n} from 'components';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst CategoriesPrices = ({\r\n fields,\r\n availableCategories,\r\n meta: { submitFailed, error },\r\n tabName,\r\n tabNameAll\r\n // dailyPrices\r\n // selectedTabIndex\r\n}) => {\r\n const classes = useStyles();\r\n const confirm = React.useContext(ConfirmContext);\r\n const [t] = useTranslation();\r\n\r\n const onAddHandler = () => {\r\n fields.push({\r\n participant: '',\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n });\r\n };\r\n\r\n const onDeleteHandler = (e, index) => {\r\n e.stopPropagation();\r\n\r\n confirm({\r\n title: `${t('Are you sure you want to delete')} ${t(tabName)}?`,\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n fields.remove(index);\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const onDeleteAllHandler = () => {\r\n confirm({\r\n title: `${t('Are you sure you want to delete')} ${t(tabNameAll)}?`,\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n const firstFieldCopy = fields.get(0);\r\n fields.removeAll();\r\n fields.push(firstFieldCopy);\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const getParticipantList = index => {\r\n const participant = fields.get(index).participant;\r\n if (participant) return [participant, ...availableCategories];\r\n return availableCategories;\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <div className={classNames(classes.row, classes.buttonsGroup)}>\r\n {fields.length < CATEGORIES.length && (\r\n <TextIconButton\r\n icon={<AddCircleOutlineIcon />}\r\n text={t('Add new')}\r\n click={onAddHandler}\r\n />\r\n )}\r\n {fields.length > 1 && (\r\n <TextIconButton\r\n icon={<DeleteOutlineIcon />}\r\n text={t('Delete all')}\r\n click={onDeleteAllHandler}\r\n />\r\n )}\r\n </div>\r\n\r\n {fields.map((field, index) => (\r\n <div key={index} className={classes.category}>\r\n <div className={classNames(classes.row)}>\r\n <Field\r\n name={`${field}.participant`}\r\n className={classes.dropDownField}\r\n list={getParticipantList(index)}\r\n label=\"Category\"\r\n placeholder=\"Choose category\"\r\n component={DropDown}\r\n />\r\n {fields.length > 1 && (\r\n <IconButton\r\n className={classes.deleteBtn}\r\n aria-label=\"delete\"\r\n onClick={e => onDeleteHandler(e, index)}\r\n >\r\n <DeleteOutlineIcon className={classes.deleteIcon} />\r\n </IconButton>\r\n )}\r\n </div>\r\n\r\n <div className={classes.row}>\r\n <Field\r\n name={`${field}.NOK`}\r\n label=\"NOK\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`${field}.EUR`}\r\n label=\"EUR\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`${field}.USD`}\r\n label=\"USD\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <PopoverWrapper text=\"Value for at least one currency for each category should be filled in. Currencies marked with zero (or empty) will not be displayed on the widget.\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n {submitFailed && error && error[index] && (\r\n <FormHelperText error>{t(error[index])}</FormHelperText>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CategoriesPrices;\r\n","import { isRequiredCurrency } from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (values.days && values.days.length) {\r\n const days = values.days;\r\n const daysErrors = [];\r\n\r\n days.forEach((day, dayIndex) => {\r\n if (isRequiredCurrency(day)) {\r\n daysErrors[dayIndex] = {\r\n USD: 'Error',\r\n EUR: 'Error',\r\n NOK: 'Error'\r\n };\r\n }\r\n });\r\n\r\n if (daysErrors.length) {\r\n errors.days = {\r\n ...daysErrors,\r\n _error: {\r\n ...daysErrors.map(\r\n () => 'Value for at least one currency should be filled in'\r\n )\r\n }\r\n };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n prices: {\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n },\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column', \r\n alignItems: 'center', \r\n },\r\n },\r\n currencyField: {\r\n maxWidth: '145px',\r\n [theme.breakpoints.down('sm')]: {\r\n maxWidth: '100%',\r\n margin: '0 0 20px ' \r\n },\r\n },\r\n helpIcon: {\r\n fontSize: '19px',\r\n marginTop: '27px',\r\n color: '#182e3d',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '16px', \r\n marginTop: '20px', \r\n },\r\n },\r\n}));\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Field, FieldArray, reduxForm } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport HelpIcon from '@material-ui/icons/Help';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport {\r\n ExpansionPanelWrapper,\r\n FormActionButtons,\r\n CurrencyInputWrapper,\r\n PopoverWrapper\r\n} from 'components';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n days: []\r\n};\r\n\r\nconst PricePerDay = ({ handleSubmit, setSubmitButton, isUpdate }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div>\r\n <form onSubmit={handleSubmit}>\r\n <FieldArray\r\n name=\"days\"\r\n component={ExpansionPanelWrapper}\r\n isAddDeleteActions={false}\r\n getTitle={item => item.day}\r\n children={(field, index, meta) => (\r\n <div className={classes.prices}>\r\n <div className={classes.row}>\r\n <Field\r\n name={`${field}.NOK`}\r\n label=\"NOK\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`${field}.EUR`}\r\n label=\"EUR\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`${field}.USD`}\r\n label=\"USD\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <PopoverWrapper text=\"Value for at least one currency should be filled in. Currencies marked with zero (or empty) will not be displayed on the widget.\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n {meta.submitFailed && meta.error && meta.error[index] && (\r\n <FormHelperText error>{t(meta.error[index])}</FormHelperText>\r\n )}\r\n </div>\r\n )}\r\n />\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n pricesDailyForm: state.form.pricesDailyForm\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'pricesDailyForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, null)(PricePerDay));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%'\r\n },\r\n label: {\r\n marginBottom: 6,\r\n color: '#071B27',\r\n textTransform: 'uppercase',\r\n fontSize: 10,\r\n lineHeight: '12px',\r\n letterSpacing: '0.035em'\r\n },\r\n inputRootFocused: {\r\n boxShadow: '0 0 3px 3px rgba(65, 183, 215, 0.35)',\r\n border: '1px solid #41B7D7'\r\n },\r\n input: {\r\n outline: 0,\r\n padding: '8px 10px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n borderRadius: '3px',\r\n border: '1px solid #BECEDA',\r\n '&:hover': {\r\n border: '1px solid #41B7D7'\r\n },\r\n '&:focus': {\r\n boxShadow: '0 0 3px 3px rgba(65, 183, 215, 0.35)',\r\n border: '1px solid #41B7D7'\r\n }\r\n },\r\n error: {\r\n boxShadow: 'none',\r\n border: '1px solid #EB5757',\r\n '&:hover': {\r\n border: '1px solid #EB5757'\r\n },\r\n '&:focus': {\r\n boxShadow: 'none',\r\n border: '1px solid #EB5757'\r\n }\r\n },\r\n disabledInput: {\r\n backgroundColor: '#F1F1F1',\r\n color: '#838383'\r\n },\r\n disabledLabel: {\r\n color: '#838383'\r\n }\r\n});\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\n// import CurrencyInput from 'react-currency-input';\r\n\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst CurrencyInputWrapper = ({\r\n input,\r\n label,\r\n isHiddenErrorMsg,\r\n className,\r\n meta: { touched, error },\r\n ...otherProps\r\n}) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={classNames(classes.root, className)}>\r\n <InputLabel\r\n className={classes.label}\r\n htmlFor={`${label}-currency-input`}\r\n disabled={otherProps.disabled}\r\n classes={{\r\n disabled: classes.disabledLabel\r\n }}\r\n >\r\n {label}\r\n </InputLabel>\r\n <input\r\n className={classNames(classes.input, {\r\n [classes.error]: touched && error\r\n })}\r\n type=\"number\"\r\n {...input}\r\n />\r\n {/* <CurrencyInput\r\n className={classNames(classes.input, {\r\n [classes.error]: touched && error\r\n })}\r\n maxLength=\"14\"\r\n decimalSeparator=\".\"\r\n thousandSeparator=\",\"\r\n precision=\"2\"\r\n {...input}\r\n /> */}\r\n {!isHiddenErrorMsg && touched && error && (\r\n <FormHelperText error>{error}</FormHelperText>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CurrencyInputWrapper;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n width: '100%',\r\n },\r\n },\r\n currencyRow: {\r\n paddingBottom: '24px',\r\n marginBottom: '30px',\r\n borderBottom: '1px solid #e2ebf6',\r\n \r\n\r\n },\r\n dailyCurrencyRow: {\r\n display: 'block',\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n width: '100%',\r\n },\r\n },\r\n currencyField: {\r\n width: '167px !important',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100% !important',\r\n paddingLeft:'20px',\r\n paddingBlockStart: '20px',\r\n paddingRight: '20px'\r\n \r\n },\r\n },\r\n dailyCurrencyField: {\r\n width: '147px !important',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100% !important',\r\n paddingBottom: '20px !important'\r\n },\r\n },\r\n helpIcon: {\r\n fontSize: '19px',\r\n marginTop: '27px',\r\n color: '#182e3d',\r\n [theme.breakpoints.down('sm')]: {\r\n paddingLeft:'20px',\r\n \r\n },\r\n },\r\n w: {\r\n width: '100%',\r\n padding: theme.spacing(2),\r\n // [theme.breakpoints.up('sm')]: {\r\n // width: '90%',\r\n // margin: '0 auto',\r\n // },\r\n // [theme.breakpoints.up('md')]: {\r\n // width: '75%',\r\n // },\r\n },\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n },\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { Field, reduxForm } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport HelpIcon from '@material-ui/icons/Help';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport {\r\n CurrencyInputWrapper,\r\n FormActionButtons,\r\n PopoverWrapper\r\n} from 'components';\r\n\r\nimport { validate } from './validate';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n};\r\n\r\nconst PricesFixed = ({\r\n handleSubmit,\r\n error,\r\n anyTouched,\r\n setSubmitButton,\r\n isUpdate\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div>\r\n <form onSubmit={handleSubmit}>\r\n <div className={classes.currencyRow}>\r\n <div className={classes.row}>\r\n <Field\r\n name={`NOK`}\r\n label=\"NOK\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`EUR`}\r\n label=\"EUR\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`USD`}\r\n label=\"USD\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <PopoverWrapper text=\"Value for at least one currency for each category should be filled in. Currencies marked with zero (or empty) will not be displayed on the widget.\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n {anyTouched && error && (\r\n <FormHelperText error>{t(error)}</FormHelperText>\r\n )}\r\n </div>\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nexport default reduxForm({\r\n form: 'pricesFixedForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(PricesFixed);\r\n","import { isRequiredCurrency } from 'utils/validators';\r\n\r\nexport const validate = values => {\r\n const errors = {};\r\n\r\n if (isRequiredCurrency(values)) {\r\n errors['USD'] = 'Error';\r\n errors['EUR'] = 'Error';\r\n errors['NOK'] = 'Error';\r\n errors['_error'] =\r\n 'Value for at least one currency for each category should be filled in';\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport const dailyValidate = values => {\r\n const errors = {};\r\n\r\n if (values.days && values.days.length) {\r\n const days = values.days;\r\n const daysArrayErrors = [];\r\n\r\n days.forEach((day, dayIndex) => {\r\n const dayErrors = {};\r\n\r\n if (isRequiredCurrency(day)) {\r\n dayErrors['USD'] = 'Error';\r\n dayErrors['EUR'] = 'Error';\r\n dayErrors['NOK'] = 'Error';\r\n dayErrors['error'] =\r\n 'Value for at least one currency for each category should be filled in';\r\n daysArrayErrors[dayIndex] = dayErrors;\r\n }\r\n });\r\n\r\n if (daysArrayErrors.length) {\r\n errors.days = daysArrayErrors;\r\n errors.days = { ...daysArrayErrors, _error: { ...daysArrayErrors } };\r\n errors['_error'] = { ...daysArrayErrors };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n","import React from 'react';\r\nimport { Field, FieldArray, reduxForm } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport HelpIcon from '@material-ui/icons/Help';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport {\r\n CurrencyInputWrapper,\r\n ExpansionPanelWrapper,\r\n FormActionButtons,\r\n PopoverWrapper\r\n} from 'components';\r\n\r\nimport { dailyValidate as validate } from './validate';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n days: []\r\n};\r\n\r\nconst DailyPricesFixed = ({\r\n handleSubmit,\r\n error,\r\n anyTouched,\r\n setSubmitButton,\r\n isUpdate\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classes.w}>\r\n <form onSubmit={handleSubmit}>\r\n <FieldArray\r\n name=\"days\"\r\n component={ExpansionPanelWrapper}\r\n isAddDeleteActions={false}\r\n getTitle={item => item.days.map(item => t(item)).join(', ')}\r\n children={(field, idx) => (\r\n <div className={classes.dailyCurrencyRow}>\r\n <div className={classes.row}>\r\n <Field\r\n name={`${field}.NOK`}\r\n label=\"NOK\"\r\n isHiddenErrorMsg={true}\r\n className={classes.dailyCurrencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`${field}.EUR`}\r\n label=\"EUR\"\r\n isHiddenErrorMsg={true}\r\n className={classes.dailyCurrencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`${field}.USD`}\r\n label=\"USD\"\r\n isHiddenErrorMsg={true}\r\n className={classes.dailyCurrencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <PopoverWrapper text=\"Value for at least one currency for each category should be filled in. Currencies marked with zero (or empty) will not be displayed on the widget.\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n {anyTouched && error && error[idx] && (\r\n <FormHelperText error>{t(error[idx].error)}</FormHelperText>\r\n )}\r\n </div>\r\n )}\r\n />\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nexport default reduxForm({\r\n form: 'pricesFixedForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(DailyPricesFixed);\r\n","import {\r\n isRequired,\r\n isFieldInArray,\r\n isRequiredCurrency\r\n} from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n const categoryArrayErrors = [];\r\n\r\n if (values.categories && values.categories.length) {\r\n values.categories.forEach((category, categoryIndex) => {\r\n const categoryErrors = {};\r\n\r\n if (isRequired(category.participant || '', true)) {\r\n categoryErrors['participant'] = 'Category is required';\r\n categoryArrayErrors[categoryIndex] = categoryErrors;\r\n } else if (\r\n isFieldInArray(category.participant, values.categories, 'participant')\r\n ) {\r\n categoryErrors['participant'] = 'Category already exists';\r\n categoryArrayErrors[categoryIndex] = categoryErrors;\r\n }\r\n\r\n if (isRequiredCurrency(category)) {\r\n categoryErrors['USD'] = 'Error';\r\n categoryErrors['EUR'] = 'Error';\r\n categoryErrors['NOK'] = 'Error';\r\n categoryArrayErrors['_error'] = {\r\n ...categoryArrayErrors['_error'],\r\n [categoryIndex]:\r\n 'Value for at least one currency for each category should be filled in'\r\n };\r\n categoryArrayErrors[categoryIndex] = categoryErrors;\r\n }\r\n });\r\n }\r\n\r\n if (categoryArrayErrors.length || categoryArrayErrors['_error']) {\r\n errors.categories = categoryArrayErrors;\r\n errors.categories = {\r\n ...categoryArrayErrors,\r\n _error: categoryArrayErrors['_error']\r\n };\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n form: {\r\n width: '540px',\r\n padding: '0 0 30px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n padding: '0 10px 30px',\r\n display: 'flex',\r\n flexDirection: 'column'\r\n },\r\n },\r\n fields: {\r\n paddingBottom: '25px',\r\n marginBottom: '30px',\r\n borderBottom: '1px solid #e2ebf6',\r\n display: 'flex',\r\n flexDirection: 'row',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n flexDirection: 'column'\r\n },\r\n },\r\n}));\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { FieldArray, reduxForm } from 'redux-form';\r\n\r\nimport { CategoriesPrices, FormActionButtons } from 'components';\r\n\r\nimport { CATEGORIES } from 'pages/create-activity/constants';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n categories: [\r\n {\r\n name: 'Adult',\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n }\r\n ]\r\n};\r\n\r\nconst PricesEqual = ({\r\n handleSubmit,\r\n pricesEqualForm,\r\n setSubmitButton,\r\n isUpdate\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const getAvailableCategoriesNames = () => {\r\n const categories = pricesEqualForm.values.categories.map(\r\n item => item.participant\r\n );\r\n return CATEGORIES.filter(x => !categories.includes(x));\r\n };\r\n\r\n return (\r\n <div>\r\n <form onSubmit={handleSubmit} className={(classes.form)}>\r\n <div className={(classes.fields )}>\r\n <FieldArray \r\n name=\"categories\"\r\n component={CategoriesPrices}\r\n availableCategories={getAvailableCategoriesNames()}\r\n tabName=\"price\"\r\n tabNameAll=\"all prices\"\r\n />\r\n </div>\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n pricesEqualForm: state.form.pricesEqualForm\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'pricesEqualForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, null)(PricesEqual));\r\n","import {\r\n isRequired,\r\n isFieldInArray,\r\n isRequiredCurrency\r\n} from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (values.daysArray && values.daysArray.length) {\r\n const daysArray = values.daysArray;\r\n const daysArrayErrors = [];\r\n\r\n daysArray.forEach((day, dayIndex) => {\r\n const daysErrors = {};\r\n\r\n const categoryArrayErrors = [];\r\n\r\n day.categories.forEach((category, categoryIndex) => {\r\n const categoryErrors = {};\r\n\r\n if (isRequired(category.participant || '', true)) {\r\n categoryErrors['participant'] = 'Category is required';\r\n categoryArrayErrors[categoryIndex] = categoryErrors;\r\n } else if (\r\n isFieldInArray(category.participant, day.categories, 'participant')\r\n ) {\r\n categoryErrors['participant'] = 'Category already exists';\r\n categoryArrayErrors[categoryIndex] = categoryErrors;\r\n }\r\n\r\n if (isRequiredCurrency(category)) {\r\n categoryErrors['USD'] = 'Error';\r\n categoryErrors['EUR'] = 'Error';\r\n categoryErrors['NOK'] = 'Error';\r\n categoryArrayErrors['_error'] = {\r\n ...categoryArrayErrors['_error'],\r\n [categoryIndex]:\r\n 'Value for at least one currency for each category should be filled in'\r\n };\r\n categoryArrayErrors[categoryIndex] = categoryErrors;\r\n }\r\n });\r\n\r\n if (categoryArrayErrors.length || categoryArrayErrors['_error']) {\r\n daysErrors['categories'] = categoryArrayErrors;\r\n daysArrayErrors[dayIndex] = daysErrors;\r\n }\r\n });\r\n\r\n if (daysArrayErrors.length) {\r\n errors.daysArray = daysArrayErrors;\r\n errors.daysArray = { ...daysArrayErrors, _error: { ...daysArrayErrors } };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import React from 'react';\r\nimport { FieldArray, reduxForm } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { CATEGORIES } from 'pages/create-activity/constants';\r\n\r\nimport {\r\n ExpansionPanelWrapper,\r\n CategoriesPrices,\r\n FormActionButtons\r\n} from 'components';\r\n\r\nimport validate from './validate';\r\nimport { connect } from 'react-redux';\r\n\r\nconst initialValues = {\r\n daysArray: []\r\n};\r\n\r\nconst PricesDailySchedule = ({\r\n handleSubmit,\r\n pricesDailyScheduleForm,\r\n setSubmitButton,\r\n isUpdate,\r\n selectedTabIndex\r\n}) => {\r\n const [t] = useTranslation();\r\n\r\n const getAvailableCategoriesNames = index => {\r\n const days = [...pricesDailyScheduleForm.values.daysArray];\r\n const categories = days[index].categories.map(item => item.participant);\r\n return CATEGORIES.filter(x => !categories.includes(x));\r\n };\r\n\r\n return (\r\n <div>\r\n <form onSubmit={handleSubmit}>\r\n <FieldArray\r\n name=\"daysArray\"\r\n component={ExpansionPanelWrapper}\r\n isAddDeleteActions={false}\r\n getTitle={item => item.days.map(item => t(item)).join(', ')}\r\n children={(field, index) => (\r\n <FieldArray\r\n name={`${field}.categories`}\r\n component={CategoriesPrices}\r\n availableCategories={getAvailableCategoriesNames(index)}\r\n selectedTabIndex={selectedTabIndex}\r\n tabName=\"price\"\r\n tabNameAll=\"all prices\"\r\n />\r\n )}\r\n />\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n pricesDailyScheduleForm: state.form.pricesDailyScheduleForm\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'pricesDailyScheduleForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, null)(PricesDailySchedule));\r\n","import {\r\n isRequired,\r\n isFieldInArray,\r\n isRequiredCurrency\r\n} from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (values.categories) {\r\n const categoryArrayErrors = [];\r\n\r\n values.categories.forEach((category, categoryIndex) => {\r\n const categoryErrors = {};\r\n\r\n if (isRequired(category.participant || '', true)) {\r\n categoryErrors['participant'] = 'Category is required';\r\n categoryArrayErrors[categoryIndex] = categoryErrors;\r\n } else if (\r\n isFieldInArray(category.participant, values.categories, 'participant')\r\n ) {\r\n categoryErrors['participant'] = 'Category already exists';\r\n categoryArrayErrors[categoryIndex] = categoryErrors;\r\n }\r\n\r\n if (isRequiredCurrency(category)) {\r\n categoryErrors['USD'] = 'Error';\r\n categoryErrors['EUR'] = 'Error';\r\n categoryErrors['NOK'] = 'Error';\r\n categoryArrayErrors['_error'] = {\r\n ...categoryArrayErrors['_error'],\r\n [categoryIndex]:\r\n 'Value for at least one currency for each category should be filled in'\r\n };\r\n categoryArrayErrors[categoryIndex] = categoryErrors;\r\n }\r\n });\r\n\r\n if (categoryArrayErrors.length || categoryArrayErrors['_error']) {\r\n errors['categories'] = categoryArrayErrors;\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n wrapper: {\r\n margin: '30px 0',\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '15px 0', \r\n },\r\n },\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column', \r\n alignItems: 'center', \r\n },\r\n },\r\n categoriesWrapper: {\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '0 0 20px ' \r\n },\r\n },\r\n currencyField: {\r\n width: '145px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%', \r\n margin: '0 0 20px ' \r\n },\r\n },\r\n dropDownField: {\r\n marginBottom: '18px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '12px',\r\n },\r\n },\r\n helpIcon: {\r\n fontSize: '19px',\r\n marginTop: '27px',\r\n color: '#182e3d',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '16px', \r\n marginTop: '20px', \r\n },\r\n },\r\n}));\r\n","import React from 'react';\r\nimport uuid from 'uuid/v1';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Field, FieldArray, reduxForm } from 'redux-form';\r\n\r\nimport { CATEGORIES } from 'pages/create-activity/constants';\r\n\r\nimport HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport {\r\n CurrencyInputWrapper,\r\n DropDown,\r\n ExpansionPanelWrapper,\r\n FormActionButtons,\r\n PopoverWrapper\r\n} from 'components';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from './styles';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nconst initialValues = {\r\n categories: [\r\n {\r\n id: uuid(),\r\n participant: 'Adult',\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n }\r\n ]\r\n};\r\n\r\nconst PricesCategorySection = ({\r\n handleSubmit,\r\n pricesCategoryForm,\r\n setSubmitButton,\r\n isUpdate\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const onAddHandler = (fields, id) => {\r\n fields.push({\r\n id: id,\r\n participant: '',\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n });\r\n };\r\n\r\n const getAvailableCategoriesNames = () => {\r\n const categories = pricesCategoryForm.values.categories.map(\r\n item => item.participant\r\n );\r\n return CATEGORIES.filter(x => !categories.includes(x));\r\n };\r\n\r\n const getParticipantList = index => {\r\n const participant = pricesCategoryForm.values.categories[index].participant;\r\n if (participant) return [participant, ...getAvailableCategoriesNames()];\r\n return getAvailableCategoriesNames();\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <form onSubmit={handleSubmit}>\r\n <FieldArray\r\n name=\"categories\"\r\n component={ExpansionPanelWrapper}\r\n disabledItemIndex={0}\r\n isAddDeleteActions={true}\r\n add={onAddHandler}\r\n getTitle={item => item.participant}\r\n tabName=\"price\"\r\n tabNameAll=\"all prices\"\r\n children={(field, index, meta) => (\r\n <div className={classes.categoriesWrapper}>\r\n <Field\r\n name={`${field}.participant`}\r\n className={classes.dropDownField}\r\n list={getParticipantList(index)}\r\n label=\"Category\"\r\n component={DropDown}\r\n />\r\n <div className={classes.row}>\r\n <Field\r\n name={`${field}.NOK`}\r\n label=\"NOK\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`${field}.EUR`}\r\n label=\"EUR\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`${field}.USD`}\r\n label=\"USD\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <PopoverWrapper text=\"Value for at least one currency for each category should be filled in. Currencies marked with zero (or empty) will not be displayed on the widget.\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n {meta.submitFailed && meta.error && meta.error[index] && (\r\n <FormHelperText error>{t(meta.error[index])}</FormHelperText>\r\n )}\r\n </div>\r\n )}\r\n />\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n pricesCategoryForm: state.form.pricesCategoryForm\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'pricesCategoryForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: false,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, null)(PricesCategorySection));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme =>({\r\n wrapper: {\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]:{\r\n \r\n }\r\n },\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n },\r\n },\r\n title: {\r\n color: '#000',\r\n lineHeight: '18px',\r\n fontWeight: '500',\r\n marginBottom: '15px',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '14px',\r\n // marginBottom: '10px',\r\n // paddingTop:'15px'\r\n \r\n },\r\n },\r\n inputIndent: {\r\n marginBottom: '23px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '15px',\r\n },\r\n },\r\n currencyField: {\r\n width: '147px !important',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100% !important',\r\n paddingBlockStart: '20px',\r\n },\r\n },\r\n helpIcon: {\r\n fontSize: '19px',\r\n marginTop: '27px',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '16px',\r\n marginTop: '20px',\r\n },\r\n },\r\n multiSelectWrapper: {\r\n marginTop: '-10px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginTop: '0',\r\n },\r\n },\r\n imgContainer: {\r\n marginBottom: '20px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '10px',\r\n },\r\n },\r\n}));\r\n","import React from 'react';\r\nimport { Field } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport HelpIcon from '@material-ui/icons/Help';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport { DEFAULT_LANGUAGE } from 'pages/create-activity/constants';\r\nimport { TRANSLATIONS } from 'translations/index';\r\n\r\nimport {\r\n CurrencyInputWrapper,\r\n Input,\r\n MultipleSelectField,\r\n PopoverWrapper,\r\n TextareaInput,\r\n} from 'components';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst MandatoryFeesFields = ({\r\n field,\r\n index,\r\n meta: { error, submitFailed },\r\n ...otherProps\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const {\r\n languages,\r\n selectedLanguage,\r\n addLanguage,\r\n deleteLanguage,\r\n selectLanguage\r\n } = otherProps;\r\n\r\n const additionalLanguage =\r\n selectedLanguage !== DEFAULT_LANGUAGE ? `.${selectedLanguage}` : '';\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <MultipleSelectField\r\n availableItems={[]}\r\n notAvailableToDeleteItems={[DEFAULT_LANGUAGE]}\r\n list={languages}\r\n selectedItem={selectedLanguage}\r\n addItem={addLanguage}\r\n deleteItem={deleteLanguage}\r\n selectItem={selectLanguage}\r\n className={classes.multiSelectWrapper}\r\n />\r\n <Typography variant=\"body1\" className={classes.title}>\r\n {t(TRANSLATIONS[selectedLanguage].titleAndDescription)}\r\n </Typography>\r\n <Field\r\n name={`${field}${additionalLanguage}.title`}\r\n component={Input}\r\n className={classes.inputIndent}\r\n placeholder={`${TRANSLATIONS[selectedLanguage].title}`}\r\n label={`${TRANSLATIONS[selectedLanguage].title} *`}\r\n maxLength=\"255\"\r\n />\r\n <Field\r\n name={`${field}${additionalLanguage}.description`}\r\n className={classes.inputIndent}\r\n placeholder={`${TRANSLATIONS[selectedLanguage].description}`}\r\n label={`${TRANSLATIONS[selectedLanguage].description}`}\r\n maxLength=\"1000\"\r\n component={TextareaInput}\r\n />\r\n {!additionalLanguage && (\r\n <>\r\n \r\n <div>\r\n <Typography variant=\"body1\" className={classes.title}>\r\n {t('Prices')}\r\n </Typography>\r\n <div className={classes.row}>\r\n <Field\r\n name={`${field}.NOK`}\r\n label=\"NOK\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`${field}.EUR`}\r\n label=\"EUR\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`${field}.USD`}\r\n label=\"USD\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <PopoverWrapper text=\"Value for at least one currency for each category should be filled in. Currencies marked with zero (or empty) will not be displayed on the widget.\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n {submitFailed &&\r\n error &&\r\n error['_error'] &&\r\n error['_error'][index] && (\r\n <FormHelperText error>\r\n {t(error['_error'][index])}\r\n </FormHelperText>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default MandatoryFeesFields;\r\n","import { TRANSLATIONS } from 'translations/index';\r\n\r\nimport {\r\n isRequired,\r\n isRequiredCurrency,\r\n \r\n} from 'utils/validators';\r\n\r\nconst validate = (values, props) => {\r\n const errors = {};\r\n\r\n const { languages } = props;\r\n const secondLanguage = languages[languages.length - 1];\r\n\r\n if (values.mandatoryFees && values.mandatoryFees.length) {\r\n const mandatoryFees = values.mandatoryFees;\r\n const mandatoryFeesArrayErrors = [];\r\n\r\n mandatoryFees.forEach((item, itemIndex) => {\r\n let mandatoryFeesErrors = {};\r\n\r\n if (languages.length > 1) {\r\n if (\r\n !item[secondLanguage] ||\r\n isRequired(item[secondLanguage].title || '', true)\r\n ) {\r\n mandatoryFeesErrors = {\r\n [secondLanguage]: {\r\n title: TRANSLATIONS[secondLanguage].titleIsRequired\r\n }\r\n };\r\n mandatoryFeesArrayErrors[itemIndex] = mandatoryFeesErrors;\r\n }\r\n }\r\n\r\n \r\n\r\n if (isRequired(item.title || '', true)) {\r\n mandatoryFeesErrors.title = 'Title is required';\r\n mandatoryFeesErrors[itemIndex] = mandatoryFeesErrors;\r\n }\r\n\r\n if (isRequiredCurrency(item)) {\r\n mandatoryFeesErrors['USD'] = 'Error';\r\n mandatoryFeesErrors['EUR'] = 'Error';\r\n mandatoryFeesErrors['NOK'] = 'Error';\r\n mandatoryFeesArrayErrors['_error'] = {\r\n ...mandatoryFeesArrayErrors['_error'],\r\n [itemIndex]:\r\n 'Value for at least one currency for each category should be filled in'\r\n };\r\n mandatoryFeesArrayErrors[itemIndex] = mandatoryFeesErrors;\r\n }\r\n });\r\n\r\n if (mandatoryFeesArrayErrors.length) {\r\n errors.mandatoryFees = mandatoryFeesArrayErrors;\r\n errors.mandatoryFees = {\r\n ...mandatoryFeesArrayErrors,\r\n _error: { ...mandatoryFeesArrayErrors }\r\n };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n wrapper: {\r\n margin: '78px 0 30px'\r\n },\r\n passPrices: {\r\n margin: '30px 0',\r\n \r\n },\r\n passFixedPrices: {\r\n margin: '78px 0 30px'\r\n },\r\n title: {\r\n marginBottom: '10px',\r\n }\r\n});\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSnackbar } from 'notistack';\r\nimport { connect } from 'react-redux';\r\nimport { FieldArray, reduxForm } from 'redux-form';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { DEFAULT_LANGUAGE } from 'pages/create-activity/constants';\r\n\r\nimport {\r\n ExpansionPanelWrapper,\r\n FormActionButtons,\r\n} from 'components';\r\n\r\nimport { deletedMandatoryFees } from 'actions/activityAndAccommodation';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from './styles';\r\nimport MandatoryFeesFields from 'components/fee-category-section/feeCategorySection';\r\n\r\nconst initialValues = {\r\n mandatoryFees: []\r\n};\r\n\r\nconst MandatoryFees = ({ handleSubmit, setSubmitButton, isUpdate, ...otherProps }) => {\r\n const classes = useStyles();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [t] = useTranslation();\r\n\r\n const { languages, selectedLanguage, deletedMandatoryFees, mandatoryFeesForm } = otherProps;\r\n\r\n const getTitle = item => {\r\n if (selectedLanguage !== DEFAULT_LANGUAGE) {\r\n if (item[selectedLanguage]) return item[selectedLanguage].title;\r\n return '';\r\n }\r\n return item.title;\r\n };\r\n\r\n const onAddHandler = (fields, id) => {\r\n const { languages } = otherProps;\r\n const languagesLength = languages.length;\r\n const secondLanguage = languages[languagesLength - 1];\r\n\r\n let data = {\r\n id: id,\r\n title: '',\r\n description: '',\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n };\r\n\r\n if (languagesLength > 1) {\r\n data[secondLanguage] = {\r\n title: '',\r\n description: ''\r\n };\r\n }\r\n\r\n fields.push(data);\r\n };\r\n\r\n const onDeleteHandler = item => {\r\n if (item.isCreated) deletedMandatoryFees(item.id);\r\n };\r\n\r\n const handleSubmitWrapper = props => {\r\n if (languages.length > 1) {\r\n const errors = validate(mandatoryFeesForm.values, otherProps);\r\n\r\n if (Object.keys(errors).length) {\r\n enqueueSnackbar(\r\n t(\r\n 'Please fill in all the required fields correctly on the current step for all languages'\r\n ),\r\n {\r\n variant: 'warning'\r\n }\r\n );\r\n }\r\n }\r\n handleSubmit(props);\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('Mandatory-Fee')}\r\n </Typography>\r\n\r\n <form onSubmit={handleSubmitWrapper}>\r\n <FieldArray \r\n name=\"mandatoryFees\"\r\n component={ExpansionPanelWrapper}\r\n isAddDeleteActions={true}\r\n add={onAddHandler}\r\n remove={onDeleteHandler}\r\n getTitle={item => getTitle(item)}\r\n tabName=\"Mandatory-Fee\"\r\n tabNameAll=\"all mandatory fees\"\r\n children={(field, index, meta) => (\r\n <MandatoryFeesFields\r\n field={field}\r\n index={index}\r\n meta={meta}\r\n {...otherProps}\r\n />\r\n )}\r\n />\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n mandatoryFeesForm: state.form.mandatoryFeesForm\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n deletedMandatoryFees: id => dispatch(deletedMandatoryFees(id))\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'mandatoryFeesForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(MandatoryFees));\r\n","import {\r\n DELETE_ACTIVITY_ADD_ONS,\r\n DELETE_ACTIVITY_MANDATORY_FEES,\r\n DELETE_RELATED_ACCOMMODATIONS,\r\n DELETE_RELATED_ACTIVITIES,\r\n DELETE_INTEGRATIONS,\r\n CLEAR_DELETED_FIELDS\r\n} from 'constants/activityAndAccommodationActionTypes';\r\n\r\nconst deleteAddOns = id => {\r\n return { type: DELETE_ACTIVITY_ADD_ONS, id };\r\n};\r\n\r\nconst deletedMandatoryFees = id => {\r\n return { type: DELETE_ACTIVITY_MANDATORY_FEES, id };\r\n};\r\n\r\nconst deleteRelatedAccommodations = id => {\r\n return { type: DELETE_RELATED_ACCOMMODATIONS, id };\r\n};\r\n\r\nconst deleteRelatedActivities = id => {\r\n return { type: DELETE_RELATED_ACTIVITIES, id };\r\n};\r\n\r\nconst deleteIntegrations = id => {\r\n return { type: DELETE_INTEGRATIONS, id };\r\n};\r\n\r\nconst clearDeletedFields = () => {\r\n return { type: CLEAR_DELETED_FIELDS };\r\n};\r\n\r\nexport {\r\n deleteAddOns,\r\n deletedMandatoryFees,\r\n deleteRelatedAccommodations,\r\n deleteRelatedActivities,\r\n deleteIntegrations,\r\n clearDeletedFields\r\n};\r\n","import { TRANSLATIONS } from 'translations/index';\r\n\r\nimport {\r\n isRequired,\r\n isRequiredCurrency,\r\n isValidUploadedImageSize,\r\n isValidUploadedImageFormat\r\n} from 'utils/validators';\r\n\r\nconst validate = (values, props) => {\r\n const errors = {};\r\n\r\n const { languages } = props;\r\n const secondLanguage = languages[languages.length - 1];\r\n\r\n if (values.addOns && values.addOns.length) {\r\n const addOns = values.addOns;\r\n const addOnsArrayErrors = [];\r\n\r\n addOns.forEach((item, itemIndex) => {\r\n let addOnsErrors = {};\r\n\r\n if (languages.length > 1) {\r\n if (\r\n !item[secondLanguage] ||\r\n isRequired(item[secondLanguage].title || '', true)\r\n ) {\r\n addOnsErrors = {\r\n [secondLanguage]: {\r\n title: TRANSLATIONS[secondLanguage].titleIsRequired\r\n }\r\n };\r\n addOnsArrayErrors[itemIndex] = addOnsErrors;\r\n }\r\n }\r\n\r\n if (item.coverPhoto) {\r\n if (isValidUploadedImageSize(item.coverPhoto || '', true)) {\r\n addOnsErrors.coverPhoto = 'Your file exceeded the size limit';\r\n addOnsArrayErrors[itemIndex] = addOnsErrors;\r\n } else if (isValidUploadedImageFormat(item.coverPhoto || '', true)) {\r\n addOnsErrors.coverPhoto = `File could not be uploaded because the format is not supported. Please upload the file with the format png, jpg, jpeg`;\r\n addOnsArrayErrors[itemIndex] = addOnsErrors;\r\n }\r\n }\r\n\r\n if (isRequired(item.title || '', true)) {\r\n addOnsErrors.title = 'Title is required';\r\n addOnsArrayErrors[itemIndex] = addOnsErrors;\r\n }\r\n\r\n if (isRequiredCurrency(item)) {\r\n addOnsErrors['USD'] = 'Error';\r\n addOnsErrors['EUR'] = 'Error';\r\n addOnsErrors['NOK'] = 'Error';\r\n addOnsArrayErrors['_error'] = {\r\n ...addOnsArrayErrors['_error'],\r\n [itemIndex]:\r\n 'Value for at least one currency for each category should be filled in'\r\n };\r\n addOnsArrayErrors[itemIndex] = addOnsErrors;\r\n }\r\n });\r\n\r\n if (addOnsArrayErrors.length) {\r\n errors.addOns = addOnsArrayErrors;\r\n errors.addOns = {\r\n ...addOnsArrayErrors,\r\n _error: { ...addOnsArrayErrors }\r\n };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme=>({\r\n wrapper: {\r\n margin: '30px 0',\r\n \r\n },\r\n title: {\r\n margin: '0 0 12px',\r\n [theme.breakpoints.down('sm')]:{\r\n textAlign: 'center'\r\n }\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSnackbar } from 'notistack';\r\nimport { connect } from 'react-redux';\r\nimport { FieldArray, reduxForm } from 'redux-form';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { DEFAULT_LANGUAGE } from 'pages/create-activity/constants';\r\n\r\nimport {\r\n ExpansionPanelWrapper,\r\n FormActionButtons,\r\n AddOnsFields\r\n} from 'components';\r\n\r\nimport { deleteAddOns } from 'actions/activityAndAccommodation';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n addOns: []\r\n};\r\n\r\nconst AddOns = ({ handleSubmit, setSubmitButton, isUpdate, ...otherProps }) => {\r\n const classes = useStyles();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [t] = useTranslation();\r\n\r\n const { languages, selectedLanguage, deleteAddOns, addOnsForm } = otherProps;\r\n\r\n const getTitle = item => {\r\n if (selectedLanguage !== DEFAULT_LANGUAGE) {\r\n if (item[selectedLanguage]) return item[selectedLanguage].title;\r\n return '';\r\n }\r\n return item.title;\r\n };\r\n\r\n const onAddHandler = (fields, id) => {\r\n const { languages } = otherProps;\r\n const languagesLength = languages.length;\r\n const secondLanguage = languages[languagesLength - 1];\r\n\r\n let data = {\r\n id: id,\r\n title: '',\r\n description: '',\r\n coverPhoto: '',\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n };\r\n\r\n if (languagesLength > 1) {\r\n data[secondLanguage] = {\r\n title: '',\r\n description: ''\r\n };\r\n }\r\n\r\n fields.push(data);\r\n };\r\n\r\n const onDeleteHandler = item => {\r\n if (item.isCreated) deleteAddOns(item.id);\r\n };\r\n\r\n const handleSubmitWrapper = props => {\r\n if (languages.length > 1) {\r\n const errors = validate(addOnsForm.values, otherProps);\r\n\r\n if (Object.keys(errors).length) {\r\n enqueueSnackbar(\r\n t(\r\n 'Please fill in all the required fields correctly on the current step for all languages'\r\n ),\r\n {\r\n variant: 'warning'\r\n }\r\n );\r\n }\r\n }\r\n handleSubmit(props);\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('Add-ons')}\r\n </Typography>\r\n\r\n <form onSubmit={handleSubmitWrapper}>\r\n <FieldArray \r\n name=\"addOns\"\r\n component={ExpansionPanelWrapper}\r\n isAddDeleteActions={true}\r\n add={onAddHandler}\r\n remove={onDeleteHandler}\r\n getTitle={item => getTitle(item)}\r\n tabName=\"add-on\"\r\n tabNameAll=\"all add-ons\"\r\n children={(field, index, meta) => (\r\n <AddOnsFields\r\n field={field}\r\n index={index}\r\n meta={meta}\r\n {...otherProps}\r\n />\r\n )}\r\n />\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n addOnsForm: state.form.addOnsForm\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n deleteAddOns: id => dispatch(deleteAddOns(id))\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'addOnsForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(AddOns));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme =>({\r\n wrapper: {\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]:{\r\n \r\n }\r\n },\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n },\r\n },\r\n title: {\r\n color: '#000',\r\n lineHeight: '18px',\r\n fontWeight: '500',\r\n marginBottom: '15px',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '14px',\r\n // marginBottom: '10px',\r\n // paddingTop:'15px'\r\n \r\n },\r\n },\r\n inputIndent: {\r\n marginBottom: '23px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '15px',\r\n },\r\n },\r\n currencyField: {\r\n width: '147px !important',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100% !important',\r\n paddingBlockStart: '20px',\r\n },\r\n },\r\n helpIcon: {\r\n fontSize: '19px',\r\n marginTop: '27px',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '16px',\r\n marginTop: '20px',\r\n },\r\n },\r\n multiSelectWrapper: {\r\n marginTop: '-10px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginTop: '0',\r\n },\r\n },\r\n imgContainer: {\r\n marginBottom: '20px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '10px',\r\n },\r\n },\r\n}));\r\n","import React from 'react';\r\nimport { Field } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport HelpIcon from '@material-ui/icons/Help';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport { DEFAULT_LANGUAGE } from 'pages/create-activity/constants';\r\nimport { TRANSLATIONS } from 'translations/index';\r\n\r\nimport {\r\n CurrencyInputWrapper,\r\n Input,\r\n MultipleSelectField,\r\n PopoverWrapper,\r\n TextareaInput,\r\n DndUploadImage\r\n} from 'components';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst AddOnsFields = ({\r\n field,\r\n index,\r\n meta: { error, submitFailed },\r\n ...otherProps\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const {\r\n languages,\r\n selectedLanguage,\r\n addLanguage,\r\n deleteLanguage,\r\n selectLanguage\r\n } = otherProps;\r\n\r\n const additionalLanguage =\r\n selectedLanguage !== DEFAULT_LANGUAGE ? `.${selectedLanguage}` : '';\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <MultipleSelectField\r\n availableItems={[]}\r\n notAvailableToDeleteItems={[DEFAULT_LANGUAGE]}\r\n list={languages}\r\n selectedItem={selectedLanguage}\r\n addItem={addLanguage}\r\n deleteItem={deleteLanguage}\r\n selectItem={selectLanguage}\r\n className={classes.multiSelectWrapper}\r\n />\r\n <Typography variant=\"body1\" className={classes.title}>\r\n {t(TRANSLATIONS[selectedLanguage].titleAndDescription)}\r\n </Typography>\r\n <Field\r\n name={`${field}${additionalLanguage}.title`}\r\n component={Input}\r\n className={classes.inputIndent}\r\n placeholder={`${TRANSLATIONS[selectedLanguage].title}`}\r\n label={`${TRANSLATIONS[selectedLanguage].title} *`}\r\n maxLength=\"255\"\r\n />\r\n <Field\r\n name={`${field}${additionalLanguage}.description`}\r\n className={classes.inputIndent}\r\n placeholder={`${TRANSLATIONS[selectedLanguage].description}`}\r\n label={`${TRANSLATIONS[selectedLanguage].description}`}\r\n maxLength=\"1000\"\r\n component={TextareaInput}\r\n />\r\n {!additionalLanguage && (\r\n <>\r\n <div className={classes.imgContainer}>\r\n <Field\r\n name={`${field}.coverPhoto`}\r\n label=\"Cover photo\"\r\n isDelete={true}\r\n component={DndUploadImage}\r\n />\r\n </div>\r\n <div>\r\n <Typography variant=\"body1\" className={classes.title}>\r\n {t('Prices')}\r\n </Typography>\r\n <div className={classes.row}>\r\n <Field\r\n name={`${field}.NOK`}\r\n label=\"NOK\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`${field}.EUR`}\r\n label=\"EUR\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <Field\r\n name={`${field}.USD`}\r\n label=\"USD\"\r\n isHiddenErrorMsg={true}\r\n className={classes.currencyField}\r\n component={CurrencyInputWrapper}\r\n />\r\n <PopoverWrapper text=\"Value for at least one currency for each category should be filled in. Currencies marked with zero (or empty) will not be displayed on the widget.\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </div>\r\n {submitFailed &&\r\n error &&\r\n error['_error'] &&\r\n error['_error'][index] && (\r\n <FormHelperText error>\r\n {t(error['_error'][index])}\r\n </FormHelperText>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default AddOnsFields;\r\n","import gql from 'graphql-tag';\r\n\r\nexport const ACCOMMODATIONS_TITLES = gql`\r\n query accommodations($businessOwnerId: Int) {\r\n accommodations(\r\n numberOfAccommodationPerPage: 10000\r\n businessOwnerId: $businessOwnerId\r\n ) {\r\n id\r\n title\r\n titleNo\r\n }\r\n }\r\n`;\r\n\r\nexport const ACCOMMODATIONS_WITH_BOOKINGS = gql`\r\n query accommodations(\r\n $startPeriod: Date\r\n $endPeriod: Date\r\n $businessOwnerId: Int\r\n ) {\r\n accommodations(businessOwnerId: $businessOwnerId) {\r\n id\r\n title\r\n photo\r\n productCode\r\n checkInTime\r\n checkOutTime\r\n guestsNumber\r\n fromDate\r\n toDate\r\n accommodationBookings(startDate: $startPeriod, endDate: $endPeriod) {\r\n id\r\n fromDate\r\n toDate\r\n bookingNotes\r\n deactivationBooking\r\n guestFirstName\r\n guestLastName\r\n guestPhoneNumber\r\n guestEmail\r\n platform\r\n bookingType\r\n creationTime\r\n referenceNumber\r\n isRelated\r\n guests {\r\n totalPrice\r\n guestsNumber\r\n participant {\r\n participant\r\n }\r\n }\r\n payments {\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n bookedAddOns {\r\n addOn {\r\n title\r\n }\r\n addOnCount\r\n totalPrice\r\n }\r\n bookedMandatoryFees {\r\n mandatoryFee {\r\n title\r\n }\r\n mandatoryFeeCount\r\n totalPrice\r\n } \r\n accommodation {\r\n id\r\n title\r\n productCode\r\n photo\r\n checkInTime\r\n checkOutTime\r\n guestsNumber\r\n fromDate\r\n toDate\r\n color\r\n }\r\n relatedActivitiesBookings {\r\n id\r\n activity {\r\n title\r\n }\r\n guests {\r\n totalPrice\r\n guestsNumber\r\n participant {\r\n participant\r\n }\r\n }\r\n payments {\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n bookedAddOns {\r\n addOn {\r\n title\r\n }\r\n addOnCount\r\n totalPrice\r\n }\r\n \r\n\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const ACCOMMODATIONS = gql`\r\n query accommodations($page: Int, $businessOwnerId: Int) {\r\n accommodations(\r\n page: $page\r\n numberOfAccommodationPerPage: 11\r\n businessOwnerId: $businessOwnerId\r\n ) {\r\n id\r\n photo\r\n title\r\n availability\r\n fromDate\r\n toDate\r\n productCode\r\n guestsNumber\r\n location\r\n }\r\n\r\n numberOfAccommodationsPages(\r\n numberOfAccommodationsPerPage: 11\r\n businessOwnerId: $businessOwnerId\r\n )\r\n accommodationsActivitiesOverview(businessOwnerId: $businessOwnerId) {\r\n activities {\r\n total\r\n available\r\n expired\r\n }\r\n accommodations {\r\n total\r\n available\r\n expired\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const WIDGET_ACCOMMODATIONS = gql`\r\n query accommodations(\r\n $page: Int\r\n $businessOwnerId: Int\r\n $numberOfAccommodationPerPage: Int!\r\n $startPeriod: Date\r\n $endPeriod: Date\r\n $guestsNumber: Int\r\n ) {\r\n accommodations(\r\n page: $page\r\n businessOwnerId: $businessOwnerId\r\n numberOfAccommodationPerPage: $numberOfAccommodationPerPage\r\n startPeriod: $startPeriod\r\n endPeriod: $endPeriod\r\n guestsNumber: $guestsNumber\r\n ) {\r\n id\r\n photo\r\n title\r\n titleNo\r\n overview\r\n overviewNo\r\n included\r\n includedNo\r\n notIncluded\r\n notIncludedNo\r\n bedDetails\r\n bedDetailsNo\r\n location\r\n checkInTime\r\n checkOutTime\r\n additionalInfo\r\n additionalInfoNo\r\n cancellation\r\n cancellationNo\r\n guestsNumber\r\n prices {\r\n id\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n value\r\n day\r\n }\r\n }\r\n numberOfAccommodationsPages(\r\n businessOwnerId: $businessOwnerId\r\n numberOfAccommodationsPerPage: $numberOfAccommodationPerPage\r\n )\r\n }\r\n`;\r\n\r\nexport const BOOK_DATES = gql`\r\n query accommodations(\r\n $accommodationId: Int\r\n $businessOwnerId: Int\r\n $startPeriod: Date\r\n $endPeriod: Date\r\n ) {\r\n accommodations(\r\n accommodationId: $accommodationId\r\n businessOwnerId: $businessOwnerId\r\n ) {\r\n id\r\n bookedDates(startPeriod: $startPeriod, endPeriod: $endPeriod) {\r\n date\r\n isAvailableForCheckIn\r\n isAvailableForCheckOut\r\n deactivationBooking\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const ACCOMMODATION = gql`\r\n query accommodations($accommodationId: Int, $businessOwnerId: Int) {\r\n accommodations(\r\n accommodationId: $accommodationId\r\n businessOwnerId: $businessOwnerId\r\n ) {\r\n id\r\n\r\n photo\r\n title\r\n titleNo\r\n productCode\r\n guestsNumber\r\n location\r\n fromDate\r\n toDate\r\n checkInTime\r\n checkOutTime\r\n bedDetails\r\n bedDetailsNo\r\n minNights\r\n color\r\n\r\n overview\r\n overviewNo\r\n additionalInfo\r\n additionalInfoNo\r\n cancellation\r\n cancellationNo\r\n included\r\n includedNo\r\n notIncluded\r\n notIncludedNo\r\n\r\n prices {\r\n id\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n value\r\n day\r\n }\r\n\r\n addOn {\r\n id\r\n title\r\n titleNo\r\n description\r\n descriptionNo\r\n photo\r\n prices {\r\n currency {\r\n currency\r\n }\r\n value\r\n }\r\n }\r\n \r\n mandatoryFee {\r\n id\r\n title\r\n titleNo\r\n description\r\n descriptionNo\r\n prices {\r\n currency {\r\n currency\r\n }\r\n value\r\n }\r\n }\r\n\r\n accommodationbookingSet {\r\n deactivationBooking\r\n id\r\n toDate\r\n fromDate\r\n isCanceled\r\n }\r\n\r\n relatedActivities {\r\n id\r\n title\r\n titleNo\r\n overview\r\n overviewNo\r\n photo\r\n scheduleType\r\n pricesType\r\n\r\n activitypriceSet {\r\n id\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n days\r\n value\r\n }\r\n }\r\n\r\n platforms {\r\n id\r\n platform\r\n titleOnPlatform\r\n }\r\n }\r\n }\r\n`;\r\n","\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n wrapper: {\r\n margin: '30px 0',\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '20px 20px 20px 20px', \r\n alignItems: 'flex-center',\r\n },\r\n },\r\n title: {\r\n margin: '0 0 19px',\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n },\r\n inputIndent: {\r\n marginBottom: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '20px', \r\n },\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Field, reduxForm } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { AsyncChipsInput, FormActionButtons } from 'components';\r\n\r\nimport { deleteRelatedAccommodations } from 'actions/activityAndAccommodation';\r\n\r\nimport { ACCOMMODATIONS_TITLES } from 'graphql/queries/accommodations';\r\n\r\nimport { useStyles } from 'components/related-accommodations/styles';\r\n\r\nconst initialValues = {\r\n relatedAccommodations: []\r\n};\r\n\r\nconst RelatedAccommodations = ({\r\n handleSubmit,\r\n setSubmitButton,\r\n isUpdate,\r\n ...otherProps\r\n}) => {\r\n const { deleteRelatedAccommodations } = otherProps;\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const onDeleteHandler = item => {\r\n if (item.isCreated) deleteRelatedAccommodations(item.id);\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('Related Accommodations')}\r\n </Typography>\r\n <form onSubmit={handleSubmit}>\r\n <Field\r\n name={`relatedAccommodations`}\r\n className={classes.inputIndent}\r\n placeholder=\"Accommodations\"\r\n maxLength=\"255\"\r\n query={ACCOMMODATIONS_TITLES}\r\n queryName=\"accommodations\"\r\n optionLabel=\"title\"\r\n remove={onDeleteHandler}\r\n component={AsyncChipsInput}\r\n />\r\n\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n deleteRelatedAccommodations: id => dispatch(deleteRelatedAccommodations(id))\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'relatedAccommodationsForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: false,\r\n touchOnBlur: false,\r\n initialValues\r\n})(connect(null, mapDispatchToProps)(RelatedAccommodations));\r\n","import gql from 'graphql-tag';\r\n\r\nexport const ACTIVITIES_TITLES = gql`\r\n query activities($businessOwnerId: Int) {\r\n activities(\r\n numberOfActivityPerPage: 10000\r\n businessOwnerId: $businessOwnerId\r\n ) {\r\n id\r\n title\r\n titleNo\r\n }\r\n }\r\n`;\r\n\r\nexport const ACTIVITIES_WITH_BOOKINGS = gql`\r\n query activities(\r\n $startPeriod: Date!\r\n $endPeriod: Date!\r\n $businessOwnerId: Int\r\n ) {\r\n activities(businessOwnerId: $businessOwnerId) {\r\n id\r\n title\r\n productCode\r\n scheduleType\r\n maxParticipants\r\n isPrivate\r\n schedule\r\n activityBookingsForPeriod(startDate: $startPeriod, endDate: $endPeriod) {\r\n id\r\n startingDate\r\n endingDate\r\n schedule\r\n guestFirstName\r\n guestLastName\r\n platform\r\n referenceNumber\r\n bookingType\r\n isCanceled\r\n isHandled\r\n creationTime\r\n cancellationTime\r\n checkInTime\r\n checkOutTime\r\n guests {\r\n guestsNumber\r\n totalPrice\r\n participant {\r\n participant\r\n }\r\n }\r\n payments {\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n bookedAddOns {\r\n addOnCount\r\n totalPrice\r\n addOn {\r\n title\r\n }\r\n }\r\n activity {\r\n id\r\n title\r\n schedule\r\n isPrivate\r\n isOpen\r\n productCode\r\n pricesType\r\n scheduleType\r\n maxParticipants\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const ACTIVITIES = gql`\r\n query activities($page: Int, $businessOwnerId: Int) {\r\n activities(\r\n page: $page\r\n numberOfActivityPerPage: 11\r\n businessOwnerId: $businessOwnerId\r\n ) {\r\n id\r\n photo\r\n title\r\n availability\r\n schedule\r\n productCode\r\n startingPoint\r\n isOpen\r\n minParticipants\r\n maxParticipants\r\n }\r\n numberOfActivitiesPages(\r\n numberOfActivitiesPerPage: 11\r\n businessOwnerId: $businessOwnerId\r\n )\r\n accommodationsActivitiesOverview(businessOwnerId: $businessOwnerId) {\r\n activities {\r\n total\r\n available\r\n expired\r\n }\r\n accommodations {\r\n total\r\n available\r\n expired\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const WIDGET_ACTIVITIES = gql`\r\n query activities(\r\n $page: Int\r\n $businessOwnerId: Int\r\n $numberOfActivityPerPage: Int!\r\n $startPeriod: Date\r\n $endPeriod: Date\r\n $guestsNumber: Int\r\n ) {\r\n activities(\r\n page: $page\r\n businessOwnerId: $businessOwnerId\r\n numberOfActivityPerPage: $numberOfActivityPerPage\r\n startPeriod: $startPeriod\r\n endPeriod: $endPeriod\r\n guestsNumber: $guestsNumber\r\n ) {\r\n id\r\n photo\r\n title\r\n titleNo\r\n\r\n overview\r\n overviewNo\r\n whatToBring\r\n whatToBringNo\r\n additionalInfo\r\n additionalInfoNo\r\n cancellation\r\n cancellationNo\r\n included\r\n includedNo\r\n notIncluded\r\n notIncludedNo\r\n minimalNight\r\n\r\n maxParticipants\r\n startingPoint\r\n scheduleType\r\n pricesType\r\n prices {\r\n id\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n days\r\n value\r\n }\r\n }\r\n numberOfActivitiesPages(\r\n businessOwnerId: $businessOwnerId\r\n numberOfActivitiesPerPage: $numberOfActivityPerPage\r\n )\r\n }\r\n`;\r\n\r\nexport const ACTIVITY = gql`\r\n query activities($activityId: Int, $businessOwnerId: Int) {\r\n activities(activityId: $activityId, businessOwnerId: $businessOwnerId) {\r\n id\r\n scheduleType\r\n pricesType\r\n\r\n photo\r\n title\r\n titleNo\r\n productCode\r\n isOpen\r\n minParticipants\r\n maxParticipants\r\n startingPoint\r\n\r\n overview\r\n overviewNo\r\n whatToBring\r\n whatToBringNo\r\n additionalInfo\r\n additionalInfoNo\r\n cancellation\r\n cancellationNo\r\n included\r\n includedNo\r\n notIncluded\r\n notIncludedNo\r\n\r\n schedule\r\n\r\n activitybookingSet {\r\n id\r\n deactivationBooking\r\n endingDate\r\n startingDate\r\n isCanceled\r\n }\r\n\r\n prices {\r\n id\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n days\r\n value\r\n }\r\n\r\n addOns {\r\n id\r\n title\r\n titleNo\r\n description\r\n descriptionNo\r\n photo\r\n prices {\r\n currency {\r\n currency\r\n }\r\n value\r\n }\r\n }\r\n\r\n relatedAccommodations {\r\n id\r\n title\r\n titleNo\r\n overview\r\n overviewNo\r\n photo\r\n checkInTime\r\n checkOutTime\r\n prices {\r\n id\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n value\r\n day\r\n }\r\n }\r\n\r\n platforms {\r\n id\r\n platform\r\n titleOnPlatform\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const ACTIVITIES_AVAILABLE_PARTICIPANTS = gql`\r\n query activities(\r\n $activityId: Int\r\n $businessOwnerId: Int\r\n $startPeriod: Date!\r\n $endPeriod: Date!\r\n ) {\r\n activities(activityId: $activityId, businessOwnerId: $businessOwnerId) {\r\n availableParticipantsPerDate(\r\n startPeriod: $startPeriod\r\n endPeriod: $endPeriod\r\n ) {\r\n date\r\n startTime\r\n availableParticipants\r\n }\r\n }\r\n }\r\n`;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Field, reduxForm } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { AsyncChipsInput, FormActionButtons } from 'components';\r\n\r\nimport { deleteRelatedActivities } from 'actions/activityAndAccommodation';\r\n\r\nimport { ACTIVITIES_TITLES } from 'graphql/queries/activities';\r\n\r\nimport { useStyles } from 'components/related-accommodations/styles';\r\n\r\nconst initialValues = {\r\n relatedActivities: []\r\n};\r\n\r\nconst RelatedActivities = ({\r\n handleSubmit,\r\n setSubmitButton,\r\n isUpdate,\r\n ...otherProps\r\n}) => {\r\n const { deleteRelatedActivities } = otherProps;\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const onDeleteHandler = item => {\r\n if (item.isCreated) deleteRelatedActivities(item.id);\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('Related Activities')}\r\n </Typography>\r\n <form onSubmit={handleSubmit}>\r\n <Field\r\n name={`relatedActivities`}\r\n className={classes.inputIndent}\r\n placeholder=\"Activities\"\r\n maxLength=\"255\"\r\n query={ACTIVITIES_TITLES}\r\n queryName=\"activities\"\r\n optionLabel=\"title\"\r\n remove={onDeleteHandler}\r\n component={AsyncChipsInput}\r\n />\r\n\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Next\"\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n deleteRelatedActivities: id => dispatch(deleteRelatedActivities(id))\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'relatedActivitiesForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: false,\r\n touchOnBlur: false,\r\n initialValues\r\n})(connect(null, mapDispatchToProps)(RelatedActivities));\r\n","import { isRequired } from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (values.integrations && values.integrations.length) {\r\n const integrations = values.integrations;\r\n const integrationsArrayErrors = [];\r\n\r\n integrations.forEach((item, index) => {\r\n const integrationsErrors = {};\r\n\r\n if (isRequired(item.platform, true)) {\r\n integrationsErrors['platform'] = 'Platform is required';\r\n integrationsArrayErrors[index] = integrationsErrors;\r\n }\r\n\r\n if (isRequired(item.titleOnPlatform || '', true)) {\r\n integrationsErrors['titleOnPlatform'] =\r\n 'Activity on the platform is required';\r\n integrationsArrayErrors[index] = integrationsErrors;\r\n }\r\n });\r\n\r\n if (integrationsArrayErrors.length) {\r\n errors.integrations = integrationsArrayErrors;\r\n errors.integrations = {\r\n ...integrationsArrayErrors,\r\n _error: { ...integrationsArrayErrors }\r\n };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n wrapper: {\r\n margin: '30px 0',\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '20px 0',\r\n width: '100%'\r\n },\r\n },\r\n title: {\r\n margin: '0 0 19px',\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '0 0 10px',\r\n textAlign: 'center'\r\n },\r\n },\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n flexWrap: 'wrap', \r\n },\r\n input: {\r\n width: '255px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%', \r\n marginBottom: '10px', \r\n },\r\n },\r\n}));\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Field, FieldArray, reduxForm } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { PLATFORMS } from 'pages/create-activity/constants';\r\n\r\nimport { deleteIntegrations } from 'actions/activityAndAccommodation';\r\n\r\nimport {\r\n DropDown,\r\n ExpansionPanelWrapper,\r\n FormActionButtons,\r\n Input\r\n} from 'components';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n integrations: []\r\n};\r\n\r\nconst Integration = ({\r\n handleSubmit,\r\n deleteIntegrations,\r\n isAccommodation,\r\n setSubmitButton\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const onAddHandler = (fields, id) => {\r\n fields.push({\r\n id: id,\r\n platform: '',\r\n titleOnPlatform: ''\r\n });\r\n };\r\n\r\n const onDeleteHandler = item => {\r\n if (item.isCreated) deleteIntegrations(item.id);\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('Integration')}\r\n </Typography>\r\n <form onSubmit={handleSubmit}>\r\n <FieldArray\r\n name=\"integrations\"\r\n component={ExpansionPanelWrapper}\r\n isAddDeleteActions={true}\r\n add={onAddHandler}\r\n remove={onDeleteHandler}\r\n getTitle={item => item.platform}\r\n tabName=\"integration\"\r\n tabNameAll=\"all integrations\"\r\n children={field => (\r\n <div className={classes.row}>\r\n <Field\r\n name={`${field}.platform`}\r\n className={classes.input}\r\n list={PLATFORMS}\r\n label=\"Platform *\"\r\n component={DropDown}\r\n />\r\n <Field\r\n name={`${field}.titleOnPlatform`}\r\n className={classes.input}\r\n inputProps={{ maxLength: 255 }}\r\n placeholder={\r\n isAccommodation ? 'Accommodation url' : 'Activity url'\r\n }\r\n label={\r\n isAccommodation\r\n ? 'Accommodation on the platform *'\r\n : 'Activity on the platform *'\r\n }\r\n component={Input}\r\n />\r\n </div>\r\n )}\r\n />\r\n <FormActionButtons\r\n cancelPath=\"/accommodations-and-activities\"\r\n actionLabel=\"Save\"\r\n integration\r\n setSubmitButton={setSubmitButton}\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n deleteIntegrations: id => dispatch(deleteIntegrations(id))\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'integrationForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: false,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(null, mapDispatchToProps)(Integration));\r\n","import moment from 'moment';\r\n\r\nconst FIXED_PRICES = 'pricesFixedForm';\r\nconst CATEGORY_PRICES = 'pricesCategoryForm';\r\nconst DAILY_PRICES = 'pricesDailyForm';\r\n\r\nconst getParticipants = (\r\n accommodation,\r\n currency,\r\n previousParticipants,\r\n dates\r\n) => {\r\n let participants = [];\r\n\r\n if (accommodation.pricesType === FIXED_PRICES) {\r\n const prices = accommodation[FIXED_PRICES];\r\n participants.push({\r\n id: `${currency}-${prices[currency]}`,\r\n participant: '',\r\n participants: 0,\r\n currency: currency,\r\n currencyValue: prices[currency],\r\n NOK: prices.NOK,\r\n EUR: prices.EUR,\r\n USD: prices.USD\r\n });\r\n participants = _setPreviousParticipantValue(\r\n participants,\r\n previousParticipants\r\n );\r\n return participants;\r\n }\r\n\r\n if (accommodation.pricesType === DAILY_PRICES) {\r\n if (dates && dates.startDate && dates.endDate) {\r\n const dailyPrices = accommodation.pricesDailyForm.days;\r\n const start = dates.startDate;\r\n const end = moment(dates.endDate).subtract(1, 'd');\r\n let value = 0;\r\n\r\n for (\r\n let date = moment(start);\r\n date.isSameOrBefore(end);\r\n date.add(1, 'days')\r\n ) {\r\n const day = date.format('ddd');\r\n dailyPrices.forEach(dailyPrice => {\r\n if (dailyPrice.day === day && dailyPrice[currency]) {\r\n value += +dailyPrice[currency];\r\n }\r\n });\r\n }\r\n\r\n participants.push({\r\n id: `${currency}-${value}`,\r\n participant: '',\r\n participants: 0,\r\n currency: currency,\r\n currencyValue: value,\r\n NOK: currency === 'NOK' ? value : 0,\r\n EUR: currency === 'EUR' ? value : 0,\r\n USD: currency === 'USD' ? value : 0\r\n });\r\n }\r\n } else {\r\n const categories = accommodation[CATEGORY_PRICES].categories;\r\n categories.forEach(item => {\r\n participants.push({\r\n id: `${item.participant}-${currency}-${item[currency]}`,\r\n participant: item.participant,\r\n participants: 0,\r\n currency: currency,\r\n currencyValue: item[currency],\r\n NOK: item.NOK,\r\n EUR: item.EUR,\r\n USD: item.USD\r\n });\r\n });\r\n }\r\n\r\n participants = _setPreviousParticipantValue(\r\n participants,\r\n previousParticipants\r\n );\r\n\r\n return participants;\r\n};\r\n\r\nconst _setPreviousParticipantValue = (participants, previousParticipants) => {\r\n return participants.map(item => {\r\n const theSameParticipant = previousParticipants\r\n ? previousParticipants.find(\r\n participant => participant.participant === item.participant\r\n )\r\n : false;\r\n if (theSameParticipant) {\r\n return {\r\n ...item,\r\n participants: theSameParticipant.participants\r\n };\r\n }\r\n return item;\r\n });\r\n};\r\n\r\nexport { getParticipants };\r\n","import uuid from 'uuid/v1';\r\n\r\nimport { INTEGRATIONS_CONSTANTS } from 'constants/base';\r\n\r\nconst getAddOns = (isUpdate, addOnsForm, secondLanguage) => {\r\n return addOnsForm.addOns.map(item => {\r\n const countryCode = 'No';\r\n let prices = getPreparedPricesCurrency(item);\r\n let secondLanguageFields = {};\r\n\r\n if (secondLanguage) {\r\n secondLanguageFields = {\r\n [`title${countryCode}`]: item[secondLanguage].title,\r\n [`description${countryCode}`]: item[secondLanguage].description\r\n };\r\n } else {\r\n secondLanguageFields = {\r\n [`title${countryCode}`]: null,\r\n [`description${countryCode}`]: null\r\n };\r\n }\r\n\r\n const idObj = isUpdate && item.isCreated ? { id: parseInt(item.id) } : {};\r\n\r\n return {\r\n ...idObj,\r\n title: item.title,\r\n description: item.description,\r\n photo:\r\n item.coverPhoto.file || item.coverPhoto.image\r\n ? item.coverPhoto.file || item.coverPhoto.image\r\n : null,\r\n ...secondLanguageFields,\r\n prices: prices\r\n };\r\n });\r\n};\r\n\r\nconst getMandatoryFees = (isUpdate, mandatoryFeesForm, secondLanguage) => {\r\n return mandatoryFeesForm.mandatoryFees.map(item => {\r\n const countryCode = 'No';\r\n let prices = getPreparedPricesCurrency(item);\r\n let secondLanguageFields = {};\r\n\r\n if (secondLanguage) {\r\n secondLanguageFields = {\r\n [`title${countryCode}`]: item[secondLanguage].title,\r\n [`description${countryCode}`]: item[secondLanguage].description\r\n };\r\n } else {\r\n secondLanguageFields = {\r\n [`title${countryCode}`]: null,\r\n [`description${countryCode}`]: null\r\n };\r\n }\r\n\r\n const idObj = isUpdate && item.isCreated ? { id: parseInt(item.id) } : {};\r\n\r\n return {\r\n ...idObj,\r\n title: item.title,\r\n description: item.description,\r\n \r\n ...secondLanguageFields,\r\n prices: prices\r\n };\r\n });\r\n};\r\n\r\nconst getPreparedPricesCurrency = item => {\r\n let prices = [];\r\n\r\n ['USD', 'EUR', 'NOK'].map(fieldName => {\r\n if (item[fieldName] && item[fieldName].length) {\r\n if (item[fieldName] === 'undefined') item[fieldName] = '0';\r\n prices.push({\r\n participant: item.participant,\r\n currency: fieldName,\r\n value: parseFloat(item[fieldName].split(',').join(''))\r\n });\r\n }\r\n });\r\n\r\n return prices;\r\n};\r\n\r\nconst getCurrencyValue = (prices, currency) => {\r\n const foundElement = prices.find(\r\n price => price.currency.currency === currency\r\n );\r\n if (foundElement) return foundElement.value.toString();\r\n return '0';\r\n};\r\n\r\nconst getIntegrations = (isUpdate, integrationForm) => {\r\n return integrationForm.integrations.map(item => {\r\n const idObj = isUpdate && item.isCreated ? { id: parseInt(item.id) } : {};\r\n\r\n return {\r\n ...idObj,\r\n platform: INTEGRATIONS_CONSTANTS[item.platform] || item.platform,\r\n titleOnPlatform: item.titleOnPlatform\r\n };\r\n });\r\n};\r\n\r\nconst getPricesFixedForm = data => {\r\n const categoriesPrices = {};\r\n\r\n data.prices.map(item => {\r\n categoriesPrices[item.participant.participant || 'Adult'] = {\r\n ...categoriesPrices[item.participant.participant || 'Adult'],\r\n [item.currency.currency]: item.value.toString()\r\n };\r\n });\r\n\r\n const fixedPrice = Object.keys(categoriesPrices).map(field => ({\r\n USD: categoriesPrices[field]['USD'] || '0',\r\n EUR: categoriesPrices[field]['EUR'] || '0',\r\n NOK: categoriesPrices[field]['NOK'] || '0'\r\n }));\r\n\r\n return fixedPrice[0];\r\n};\r\n\r\nconst getPricesCategoryForm = data => {\r\n const categoriesPrices = {};\r\n\r\n data.prices.map(item => {\r\n categoriesPrices[item.participant.participant || 'Adult'] = {\r\n ...categoriesPrices[item.participant.participant || 'Adult'],\r\n [item.currency.currency]: item.value.toString()\r\n };\r\n });\r\n\r\n return {\r\n categories: Object.keys(categoriesPrices).map(field => ({\r\n id: uuid(),\r\n participant: field,\r\n USD: categoriesPrices[field]['USD'] || '0',\r\n EUR: categoriesPrices[field]['EUR'] || '0',\r\n NOK: categoriesPrices[field]['NOK'] || '0'\r\n }))\r\n };\r\n};\r\n\r\nexport {\r\n getAddOns,\r\n getMandatoryFees,\r\n getPreparedPricesCurrency,\r\n getCurrencyValue,\r\n getIntegrations,\r\n getPricesFixedForm,\r\n getPricesCategoryForm\r\n};\r\n","import moment from 'moment';\r\n\r\nexport const transformReceivedDeactivationDates = (\r\n dates,\r\n startKey = 'fromDate',\r\n endkey = 'toDate'\r\n) => {\r\n return dates\r\n .filter(\r\n ({ deactivationBooking, isCanceled }) =>\r\n deactivationBooking && !isCanceled\r\n )\r\n .map(({ [startKey]: fromDate, [endkey]: toDate, id }) => ({\r\n id,\r\n startDate: moment(fromDate),\r\n endDate: moment(toDate)\r\n }));\r\n};\r\n","import icalendar from 'icalendar';\r\nimport uuid from 'uuid/v1';\r\nimport moment from 'moment';\r\n\r\nimport {\r\n getCurrencyValue,\r\n getPricesCategoryForm,\r\n getPricesFixedForm as getNoDaysPricedFixedForm\r\n} from 'utils/accommodations-and-activities/prepareAccommodationAndActivityData';\r\n\r\nimport { getPrices as getAccommodationPrices } from 'utils/accommodations-and-activities/prepareReceivedAccommodationData';\r\n\r\nimport { SCHEDULE_DAYS } from 'pages/create-activity/constants';\r\nimport {\r\n CATEGORY_PRICES,\r\n DAILY_PRICES,\r\n FIXED_PRICES\r\n} from 'pages/widget/constants';\r\n\r\nimport { INTEGRATIONS_NAMES } from 'constants/base';\r\nimport { transformReceivedDeactivationDates } from './transformReceivedDeactivationDates';\r\n\r\nexport const getReceivedActivityData = data => {\r\n const generalForm = getGeneralInfo(data).generalForm;\r\n\r\n const descriptionForm = {\r\n overview: data.overview,\r\n whatToBring: data.whatToBring,\r\n additionalInfo: data.additionalInfo,\r\n cancellation: data.cancellation,\r\n included: data.included,\r\n notIncluded: data.notIncluded\r\n };\r\n\r\n const addOnsForm = {\r\n addOns: data.addOns.map(item => ({\r\n id: parseInt(item.id),\r\n title: item.title,\r\n description: item.description,\r\n coverPhoto: {\r\n image: item.photo\r\n },\r\n USD: getCurrencyValue(item.prices, 'USD'),\r\n EUR: getCurrencyValue(item.prices, 'EUR'),\r\n NOK: getCurrencyValue(item.prices, 'NOK'),\r\n isCreated: true\r\n }))\r\n };\r\n\r\n const relatedAccommodationsForm = {\r\n relatedAccommodations: data.relatedAccommodations.map(item => {\r\n const firstPrice = item.prices[0];\r\n\r\n const norwegianFields = {};\r\n if (item.titleNo) norwegianFields.title = item.titleNo;\r\n if (item.overviewNo) norwegianFields.overview = item.overviewNo;\r\n\r\n let priceType = FIXED_PRICES;\r\n\r\n if (firstPrice.participant.participant) {\r\n priceType = CATEGORY_PRICES;\r\n } else if (firstPrice.day) {\r\n priceType = DAILY_PRICES;\r\n }\r\n\r\n return {\r\n id: parseInt(item.id),\r\n title: item.title,\r\n overview: item.overview,\r\n Norwegian: norwegianFields,\r\n photo: item.photo,\r\n checkInAfter: moment(item.checkInTime, 'HH:mm:ss'),\r\n checkOutBefore: moment(item.checkOutTime, 'HH:mm:ss'),\r\n pricesType: priceType,\r\n isCreated: true,\r\n prices: getAccommodationPrices(item)\r\n };\r\n })\r\n };\r\n\r\n const integrationForm = {\r\n integrations: data.platforms.map(item => ({\r\n id: parseInt(item.id),\r\n platform: INTEGRATIONS_NAMES[item.platform] || item.platform,\r\n titleOnPlatform: item.titleOnPlatform,\r\n isCreated: true\r\n }))\r\n };\r\n\r\n const schedule = getSchedule(data);\r\n\r\n const prices = getPrices(data);\r\n\r\n const secondLanguageForms = _getSecondLanguagesForm(data, addOnsForm);\r\n\r\n return {\r\n generalForm,\r\n descriptionForm,\r\n addOnsForm,\r\n relatedAccommodationsForm,\r\n integrationForm,\r\n ...schedule,\r\n ...prices,\r\n ...secondLanguageForms\r\n };\r\n};\r\n\r\nexport const getGeneralInfo = data => {\r\n return {\r\n generalForm: {\r\n id: parseInt(data.id),\r\n title: data.title,\r\n coverPhoto: {\r\n image: data.photo\r\n },\r\n productCode: data.productCode,\r\n activityType: data.isOpen ? 'Open' : 'Private',\r\n minParticipants: data.minParticipants.toString(),\r\n maxParticipants: data.maxParticipants.toString(),\r\n startingPoint: data.startingPoint,\r\n deactivatedDates: transformReceivedDeactivationDates(\r\n data.activitybookingSet,\r\n 'startingDate',\r\n 'endingDate'\r\n )\r\n }\r\n };\r\n};\r\n\r\nexport const getReceivedActivityBookingsDates = receivedAvailableParticipantsData => {\r\n if (!receivedAvailableParticipantsData.activities.length) {\r\n return receivedAvailableParticipantsData;\r\n }\r\n\r\n const receivedAvailableParticipantsPerDate =\r\n receivedAvailableParticipantsData.activities[0]\r\n .availableParticipantsPerDate;\r\n\r\n return {\r\n activities: [\r\n {\r\n availableParticipantsPerDate: receivedAvailableParticipantsPerDate.map(\r\n item => ({\r\n ...item,\r\n startTime:\r\n item.startTime &&\r\n moment(item.startTime, 'HH:mm:ssZZ').format('HH:mm:ss')\r\n })\r\n )\r\n }\r\n ]\r\n };\r\n};\r\n\r\nconst _getSecondLanguagesForm = (data, addOnsForm) => {\r\n const secondLanguage = 'Norwegian';\r\n const secondLanguageForms = {\r\n [`generalForm-${secondLanguage}`]: {},\r\n [`descriptionForm-${secondLanguage}`]: {}\r\n };\r\n\r\n if (data.titleNo) {\r\n secondLanguageForms[`generalForm-${secondLanguage}`] = {\r\n title: data.titleNo\r\n };\r\n\r\n secondLanguageForms[`descriptionForm-${secondLanguage}`] = {\r\n overview: data.overviewNo,\r\n whatToBring: data.whatToBringNo,\r\n additionalInfo: data.additionalInfoNo,\r\n cancellation: data.cancellationNo,\r\n included: data.includedNo,\r\n notIncluded: data.notIncludedNo\r\n };\r\n\r\n addOnsForm.addOns = addOnsForm.addOns.map((item, index) => ({\r\n ...item,\r\n [secondLanguage]: {\r\n id: parseInt(item.id),\r\n title: data.addOns[index]['titleNo'],\r\n description: data.addOns[index]['descriptionNo']\r\n }\r\n }));\r\n }\r\n\r\n return secondLanguageForms;\r\n};\r\n\r\nexport const getSchedule = data => {\r\n const scheduleProperties = icalendar.parse_calendar(data.schedule).properties;\r\n const scheduleComponents = icalendar.parse_calendar(data.schedule).components;\r\n\r\n switch (data.scheduleType) {\r\n case 'scheduleDateForm': {\r\n return {\r\n ['scheduleDateForm']: _getScheduleDateForm(\r\n scheduleProperties,\r\n scheduleComponents\r\n )\r\n };\r\n }\r\n case 'scheduleDateTimeForm': {\r\n return {\r\n ['scheduleDateTimeForm']: _getScheduleDateTimeForm(\r\n scheduleProperties,\r\n scheduleComponents\r\n )\r\n };\r\n }\r\n default: {\r\n return {\r\n ['schedulePassForm']: _getSchedulePassForm(scheduleProperties)\r\n };\r\n }\r\n }\r\n};\r\n\r\nconst _getScheduleDateForm = (scheduleProperties, scheduleComponents) => {\r\n if (!scheduleProperties || !scheduleComponents || !scheduleComponents.VEVENT)\r\n return {};\r\n\r\n return {\r\n availability: {\r\n startDate:\r\n scheduleProperties.START_DATE[0].value === 'None'\r\n ? null\r\n : moment(scheduleProperties.START_DATE[0].value, 'YYYY-MM-DD'),\r\n endDate:\r\n scheduleProperties.END_DATE[0].value === 'None'\r\n ? null\r\n : moment(scheduleProperties.END_DATE[0].value, 'YYYY-MM-DD')\r\n },\r\n days: {\r\n ...SCHEDULE_DAYS,\r\n ...scheduleComponents.VEVENT[0].properties.DAYS.reduce(\r\n (a, b) => ((a[b.value] = true), a),\r\n {}\r\n )\r\n },\r\n cutoffPeriod: scheduleProperties.CUTOFF_PERIOD[0].value,\r\n cutoffPeriodTimeType: scheduleProperties.CUTOFF_PERIOD_TIME_TYPE[0].value\r\n };\r\n};\r\n\r\nconst _getScheduleDateTimeForm = (scheduleProperties, scheduleComponents) => {\r\n if (!scheduleProperties || !scheduleComponents || !scheduleComponents.VEVENT)\r\n return {};\r\n\r\n return {\r\n availability: {\r\n startDate:\r\n scheduleProperties.START_DATE[0].value === 'None'\r\n ? null\r\n : moment(scheduleProperties.START_DATE[0].value, 'YYYY-MM-DD'),\r\n endDate:\r\n scheduleProperties.END_DATE[0].value === 'None'\r\n ? null\r\n : moment(scheduleProperties.END_DATE[0].value, 'YYYY-MM-DD')\r\n },\r\n daysArray: scheduleComponents.VEVENT.map(item => ({\r\n id: uuid(),\r\n days: {\r\n ...SCHEDULE_DAYS,\r\n ...item.properties.DAYS.reduce((a, b) => ((a[b.value] = true), a), {})\r\n },\r\n startTimeAndDuration: _getStartTimeAndDuration(item.properties)\r\n })),\r\n cutoffPeriod: scheduleProperties.CUTOFF_PERIOD[0].value,\r\n cutoffPeriodTimeType: scheduleProperties.CUTOFF_PERIOD_TIME_TYPE[0].value\r\n };\r\n};\r\n\r\nconst _getSchedulePassForm = scheduleProperties => {\r\n if (!scheduleProperties) return {};\r\n\r\n return {\r\n availability: {\r\n startDate:\r\n scheduleProperties.START_DATE[0].value === 'None'\r\n ? null\r\n : moment(scheduleProperties.START_DATE[0].value, 'YYYY-MM-DD'),\r\n endDate:\r\n scheduleProperties.END_DATE[0].value === 'None'\r\n ? null\r\n : moment(scheduleProperties.END_DATE[0].value, 'YYYY-MM-DD')\r\n }\r\n };\r\n};\r\n\r\nexport const getPrices = data => {\r\n switch (data.scheduleType) {\r\n case 'schedulePassForm': {\r\n return {\r\n ['pricesFixedForm']: getNoDaysPricedFixedForm(data),\r\n ['pricesEqualForm']: getPricesCategoryForm(data)\r\n };\r\n }\r\n default: {\r\n return {\r\n ['pricesFixedForm']: getPricesFixedForm(data),\r\n ['pricesDailyForm']: _getPricesDailyForm(data),\r\n ['pricesDailyScheduleForm']: _getPricesDailyScheduleForm(data),\r\n ['pricesEqualForm']: getPricesCategoryForm(data)\r\n };\r\n }\r\n }\r\n};\r\n\r\nconst _getPricesDailyForm = data => {\r\n const pricesDays = _getUniquePricesDays(data.prices);\r\n\r\n return {\r\n days: pricesDays.map(day => {\r\n const dayPrices = data.prices.filter(price => {\r\n if (price.days) {\r\n const priceDays = icalendar\r\n .parse_calendar(price.days)\r\n .components.VEVENT[0].properties.DAYS.map(item => item.value);\r\n\r\n if (priceDays.includes(day)) return true;\r\n }\r\n });\r\n\r\n const categoriesPrices = {};\r\n\r\n dayPrices.map(item => {\r\n categoriesPrices[item.participant.participant || 'Adult'] = {\r\n ...categoriesPrices[item.participant.participant || 'Adult'],\r\n [item.currency.currency]: item.value.toString()\r\n };\r\n });\r\n\r\n return {\r\n id: uuid(),\r\n day: day,\r\n categories: Object.keys(categoriesPrices).map(field => ({\r\n participant: field,\r\n USD: categoriesPrices[field]['USD'] || '0',\r\n EUR: categoriesPrices[field]['EUR'] || '0',\r\n NOK: categoriesPrices[field]['NOK'] || '0'\r\n }))\r\n };\r\n })\r\n };\r\n};\r\n\r\nconst _getPricesDailyScheduleForm = data => {\r\n const multiplePriceDays = _getUniqueMultiplePricesDays(data.prices);\r\n\r\n return {\r\n daysArray: multiplePriceDays.map(day => {\r\n const dayPrices = data.prices.filter(price => {\r\n if (price.days) {\r\n const pricesDays = icalendar\r\n .parse_calendar(price.days)\r\n .components.VEVENT.map(item =>\r\n item.properties.DAYS.map(day => day.value)\r\n );\r\n\r\n for (let i in pricesDays) {\r\n if (pricesDays.hasOwnProperty(i)) {\r\n if (_isSameArrays(pricesDays[i], day)) return true;\r\n }\r\n }\r\n }\r\n });\r\n\r\n const categoriesPrices = {};\r\n\r\n dayPrices.map(item => {\r\n categoriesPrices[item.participant.participant || 'Adult'] = {\r\n ...categoriesPrices[item.participant.participant || 'Adult'],\r\n [item.currency.currency]: item.value.toString()\r\n };\r\n });\r\n\r\n return {\r\n id: uuid(),\r\n days: day,\r\n categories: Object.keys(categoriesPrices).map(field => ({\r\n participant: field,\r\n USD: categoriesPrices[field]['USD'] || '0',\r\n EUR: categoriesPrices[field]['EUR'] || '0',\r\n NOK: categoriesPrices[field]['NOK'] || '0'\r\n }))\r\n };\r\n })\r\n };\r\n};\r\n\r\nconst getPricesFixedForm = data => {\r\n const pricesDays = _getUniqueMultiplePricesDays(data.prices);\r\n\r\n return {\r\n days: pricesDays.map(day => {\r\n const dayPrices = data.prices.filter(price => {\r\n if (price.days) {\r\n const pricesDays = icalendar\r\n .parse_calendar(price.days)\r\n .components.VEVENT.map(item =>\r\n item.properties.DAYS.map(day => day.value)\r\n );\r\n\r\n for (let i in pricesDays) {\r\n if (pricesDays.hasOwnProperty(i)) {\r\n if (_isSameArrays(pricesDays[i], day)) return true;\r\n }\r\n }\r\n }\r\n });\r\n\r\n const categoriesPrices = {};\r\n\r\n dayPrices.map(item => {\r\n categoriesPrices[item.participant.participant || 'Adult'] = {\r\n ...categoriesPrices[item.participant.participant || 'Adult'],\r\n [item.currency.currency]: item.value.toString()\r\n };\r\n });\r\n\r\n const categories =\r\n Object.keys(categoriesPrices).map(field => ({\r\n participant: field,\r\n USD: categoriesPrices[field]['USD'] || '0',\r\n EUR: categoriesPrices[field]['EUR'] || '0',\r\n NOK: categoriesPrices[field]['NOK'] || '0'\r\n })) || [];\r\n\r\n return {\r\n id: uuid(),\r\n days: day,\r\n USD: (categories.length && categories[0]['USD']) || '0',\r\n EUR: (categories.length && categories[0]['EUR']) || '0',\r\n NOK: (categories.length && categories[0]['NOK']) || '0'\r\n };\r\n })\r\n };\r\n};\r\n\r\nconst _getStartTimeAndDuration = properties => {\r\n if (!properties || !properties.START_TIME) return [];\r\n return properties.START_TIME.map((item, index) => ({\r\n startTime: moment(item.value, 'HH:mm:ss'),\r\n duration: parseInt(properties.DURATION_[index].value),\r\n timeType: properties.TIME_TYPE[index].value\r\n }));\r\n};\r\n\r\nconst _getUniquePricesDays = prices => {\r\n const daysArray = prices\r\n .map(item => {\r\n if (item.days) {\r\n return icalendar\r\n .parse_calendar(item.days)\r\n .components.VEVENT[0].properties.DAYS.map(day => day.value);\r\n }\r\n return '';\r\n })\r\n .filter(item => item.length);\r\n\r\n const uniqueDaysArray = Array.from(\r\n new Set(daysArray.map(JSON.stringify)),\r\n JSON.parse\r\n );\r\n\r\n let days = [];\r\n\r\n uniqueDaysArray.map(item => (days = [...days, ...item]));\r\n\r\n return [...new Set(days)];\r\n};\r\n\r\nconst _getUniqueMultiplePricesDays = prices => {\r\n const daysArray = prices\r\n .map(item => {\r\n if (item.days) {\r\n return icalendar\r\n .parse_calendar(item.days)\r\n .components.VEVENT.map(item =>\r\n item.properties.DAYS.map(day => day.value)\r\n );\r\n }\r\n return '';\r\n })\r\n .filter(item => item.length);\r\n\r\n const uniqueDaysArray = Array.from(\r\n new Set(daysArray.map(JSON.stringify)),\r\n JSON.parse\r\n );\r\n\r\n let days = [];\r\n\r\n uniqueDaysArray.map(item => (days = [...days, ...item]));\r\n\r\n return [...new Set(days)];\r\n};\r\n\r\nconst _isSameArrays = (array1, array2) => {\r\n return (\r\n array1.length === array2.length &&\r\n array1.every((element, index) => element === array2[index])\r\n );\r\n};\r\n","const FIXED_PRICES = 'pricesFixedForm';\r\nconst CATEGORY_PRICES = 'pricesCategoryForm';\r\nconst DAILY_PRICES = 'pricesDailyForm';\r\n\r\nexport { FIXED_PRICES, CATEGORY_PRICES, DAILY_PRICES };\r\n","import moment from 'moment-timezone';\r\nimport uuid from 'uuid/v1';\r\n\r\nimport { WEEK_DAYS } from '../../constants/base';\r\n\r\nmoment.tz.setDefault('CET');\r\n\r\nexport const ACCOMMODATIONS_TAB = 0;\r\n\r\nexport const PRICES_PER_DAY = {\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n};\r\n\r\nexport const INITIAL_ACCOMMODATION_FORM_DATA = {\r\n generalForm: {\r\n productCode: '',\r\n coverPhoto: {},\r\n availability: {\r\n startDate: moment(),\r\n endDate: null\r\n },\r\n checkInAfter: moment(),\r\n checkOutBefore: moment(),\r\n bedDetails: [],\r\n minNights: 1,\r\n deactivatedDates: [{ id: uuid(10) }],\r\n color: ''\r\n },\r\n descriptionForm: {},\r\n pricesFixedForm: {\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n },\r\n pricesCategoryForm: {\r\n categories: [\r\n {\r\n id: uuid(),\r\n participant: 'Adult',\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n }\r\n ]\r\n },\r\n pricesDailyForm: {\r\n days: WEEK_DAYS.map(day => ({\r\n id: uuid(),\r\n day: day,\r\n ...PRICES_PER_DAY\r\n }))\r\n },\r\n addOnsForm: {\r\n addOns: []\r\n },\r\n mandatoryFeesForm: {\r\n mandatoryFees: []\r\n },\r\n relatedActivitiesForm: {\r\n relatedActivities: []\r\n },\r\n integrationForm: {\r\n integrations: []\r\n }\r\n};\r\n\r\nexport const ACCOMMODATION_FORMS_NUMBERS = {\r\n generalForm: 0,\r\n descriptionForm: 1,\r\n pricesForm: 2,\r\n addOnsForm: 3,\r\n mandatoryFeesForm: 4,\r\n relatedActivitiesForm: 5,\r\n integrationForm: 6,\r\n \r\n};\r\n\r\nexport const ACCOMMODATION_FORMS_ORDER = [\r\n 'generalForm',\r\n 'descriptionForm',\r\n {\r\n 0: 'pricesFixedForm',\r\n 1: 'pricesCategoryForm',\r\n 2: 'pricesDailyForm'\r\n },\r\n 'addOnsForm',\r\n 'mandatoryFeesForm',\r\n 'relatedActivitiesForm',\r\n 'integrationForm'\r\n];\r\n\r\nexport const ACCOMMODATION_PRICES_FORMS_NUMBERS = {\r\n pricesFixedForm: 0,\r\n pricesCategoryForm: 1,\r\n pricesDailyForm: 2\r\n};\r\n","import moment from 'moment';\r\nimport uuid from 'uuid/v1';\r\n\r\nimport {\r\n getCurrencyValue,\r\n getPricesCategoryForm,\r\n getPricesFixedForm\r\n} from 'utils/accommodations-and-activities/prepareAccommodationAndActivityData';\r\n\r\nimport { getPrices as getActivityPrices } from 'utils/accommodations-and-activities/prepareReceivedActivityData';\r\n\r\nimport { INTEGRATIONS_NAMES, WEEK_DAYS } from 'constants/base';\r\nimport { PRICES_PER_DAY } from '../../pages/create-accommodation/constants';\r\nimport { transformReceivedDeactivationDates } from './transformReceivedDeactivationDates';\r\n\r\nexport const getReceivedAccommodationData = data => {\r\n const generalForm = getGeneralInfo(data).generalForm;\r\n\r\n const descriptionForm = {\r\n overview: data.overview,\r\n additionalInfo: data.additionalInfo,\r\n included: data.included,\r\n notIncluded: data.notIncluded,\r\n cancellation: data.cancellation\r\n };\r\n\r\n const prices = getPrices(data);\r\n\r\n const addOnsForm = {\r\n addOns: data.addOn.map(item => ({\r\n id: parseInt(item.id),\r\n title: item.title,\r\n description: item.description,\r\n coverPhoto: {\r\n image: item.photo\r\n },\r\n USD: getCurrencyValue(item.prices, 'USD'),\r\n EUR: getCurrencyValue(item.prices, 'EUR'),\r\n NOK: getCurrencyValue(item.prices, 'NOK'),\r\n isCreated: true\r\n }))\r\n };\r\n\r\n const mandatoryFeesForm = {\r\n mandatoryFees: data.mandatoryFee.map(item => ({\r\n id: parseInt(item.id),\r\n title: item.title,\r\n description: item.description,\r\n \r\n USD: getCurrencyValue(item.prices, 'USD'),\r\n EUR: getCurrencyValue(item.prices, 'EUR'),\r\n NOK: getCurrencyValue(item.prices, 'NOK'),\r\n isCreated: true\r\n }))\r\n };\r\n\r\n const relatedActivitiesForm = {\r\n relatedActivities: data.relatedActivities.map(item => {\r\n const norwegianFields = {};\r\n if (item.titleNo) norwegianFields.title = item.titleNo;\r\n if (item.overviewNo) norwegianFields.overview = item.overviewNo;\r\n\r\n return {\r\n id: parseInt(item.id),\r\n title: item.title,\r\n overview: item.overview,\r\n Norwegian: norwegianFields,\r\n photo: item.photo,\r\n scheduleType: item.scheduleType,\r\n pricesType: item.pricesType,\r\n isCreated: true,\r\n prices: getActivityPrices({\r\n prices: item.activitypriceSet,\r\n scheduleType: item.scheduleType\r\n })\r\n };\r\n })\r\n };\r\n\r\n const integrationForm = {\r\n integrations: data.platforms.map(item => ({\r\n id: parseInt(item.id),\r\n platform: INTEGRATIONS_NAMES[item.platform] || item.platform,\r\n titleOnPlatform: item.titleOnPlatform,\r\n isCreated: true\r\n }))\r\n };\r\n\r\n const secondLanguageForms = _getSecondLanguagesForm(data, addOnsForm,mandatoryFeesForm);\r\n\r\n return {\r\n generalForm,\r\n descriptionForm,\r\n ...prices,\r\n addOnsForm,\r\n mandatoryFeesForm,\r\n relatedActivitiesForm,\r\n integrationForm,\r\n ...secondLanguageForms\r\n };\r\n};\r\n\r\nexport const getGeneralInfo = data => {\r\n return {\r\n generalForm: {\r\n id: parseInt(data.id),\r\n productCode: data.productCode,\r\n title: data.title,\r\n coverPhoto: {\r\n image: data.photo\r\n },\r\n guests: parseInt(data.guestsNumber),\r\n location: data.location,\r\n availability: {\r\n startDate: moment(data.fromDate, 'YYYY-MM-DD'),\r\n endDate:\r\n !data.toDate || data.toDate === 'None'\r\n ? null\r\n : moment(data.toDate, 'YYYY-MM-DD')\r\n },\r\n checkInAfter: moment(data.checkInTime, 'HH:mm:ss'),\r\n checkOutBefore: moment(data.checkOutTime, 'HH:mm:ss'),\r\n bedDetails: data.bedDetails,\r\n minNights: data.minNights || 1,\r\n color : data.color,\r\n deactivatedDates: transformReceivedDeactivationDates(\r\n data.accommodationbookingSet\r\n )\r\n }\r\n };\r\n};\r\n\r\nconst pricesDailyForm = data => {\r\n const prices = WEEK_DAYS.reduce((acc, curr) => ((acc[curr] = {}), acc), {});\r\n\r\n if (data.prices?.[0]?.day) {\r\n data.prices.forEach(price => {\r\n if (prices[price.day]) {\r\n prices[price.day][price.currency.currency] = price.value;\r\n } else {\r\n prices[price.day] = {\r\n [price.currency.currency]: price.value\r\n };\r\n }\r\n });\r\n } else {\r\n return {\r\n days: WEEK_DAYS.map(day => ({\r\n id: uuid(),\r\n day: day,\r\n ...PRICES_PER_DAY\r\n }))\r\n };\r\n }\r\n\r\n return {\r\n days: Object.keys(prices).map(price => {\r\n return {\r\n id: uuid(),\r\n day: price,\r\n USD: `${prices[price]['USD']}` || '0',\r\n EUR: `${prices[price]['EUR']}` || '0',\r\n NOK: `${prices[price]['NOK']}` || '0'\r\n };\r\n })\r\n };\r\n};\r\n\r\nexport const getPrices = data => {\r\n return {\r\n pricesFixedForm: getPricesFixedForm(data),\r\n pricesCategoryForm: getPricesCategoryForm(data),\r\n pricesDailyForm: pricesDailyForm(data)\r\n };\r\n};\r\n\r\nconst _getSecondLanguagesForm = (data, addOnsForm,mandatoryFeesForm) => {\r\n const secondLanguage = 'Norwegian';\r\n const secondLanguageForms = {\r\n [`generalForm-${secondLanguage}`]: {},\r\n [`descriptionForm-${secondLanguage}`]: {}\r\n };\r\n\r\n if (data.titleNo) {\r\n secondLanguageForms[`generalForm-${secondLanguage}`] = {\r\n title: data.titleNo,\r\n bedDetails: data.bedDetailsNo\r\n };\r\n\r\n secondLanguageForms[`descriptionForm-${secondLanguage}`] = {\r\n overview: data.overviewNo,\r\n additionalInfo: data.additionalInfoNo,\r\n included: data.includedNo,\r\n notIncluded: data.notIncludedNo,\r\n cancellation: data.cancellationNo,\r\n };\r\n\r\n addOnsForm.addOns = addOnsForm.addOns.map((item, index) => ({\r\n ...item,\r\n [secondLanguage]: {\r\n id: parseInt(item.id),\r\n title: data.addOn[index]['titleNo'],\r\n description: data.addOn[index]['descriptionNo']\r\n }\r\n }));\r\n\r\n mandatoryFeesForm.mandatoryFees = mandatoryFeesForm.mandatoryFees.map((item, index) => ({\r\n ...item,\r\n [secondLanguage]: {\r\n id: parseInt(item.id),\r\n title: data.mandatoryFee[index]['titleNo'],\r\n description: data.mandatoryFee[index]['descriptionNo']\r\n }\r\n }));\r\n }\r\n\r\n return secondLanguageForms;\r\n};\r\n","const getFormByCurrentLanguage = (selectedLanguage, form1, form2) => {\r\n if (selectedLanguage === 'Norway' && form2 && Object.keys(form2).length > 0) {\r\n return form2;\r\n }\r\n\r\n return form1;\r\n};\r\n\r\nexport { getFormByCurrentLanguage };\r\n","const currencyFormatter = value => {\r\n let formatter = new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: 'USD'\r\n });\r\n\r\n const currency = formatter.format(value).replace('$', '');\r\n\r\n if (currency === 'NaN') return value;\r\n\r\n return currency;\r\n};\r\n\r\nexport { currencyFormatter };\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n sectionIndent: {\r\n marginBottom: '42px'\r\n },\r\n inputIndent: {\r\n marginBottom: '24px'\r\n },\r\n participants: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n flexFlow: 'wrap',\r\n marginBottom: '18px'\r\n },\r\n participant: {\r\n width: '285px'\r\n },\r\n inputField: {\r\n marginBottom: '24px'\r\n },\r\n error: {\r\n margin: '-34px 0 35px'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\nimport { Field } from 'redux-form';\r\n\r\nimport { Typography } from '@material-ui/core';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport { Input } from 'components';\r\n\r\nimport { currencyFormatter } from 'utils/prices/formatter';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst Errors = ({ submitFailed, error, errorClassName }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n if (!submitFailed || !error) return null;\r\n\r\n const exceedError = error.indexOf('The number of') === 0;\r\n\r\n if (exceedError) {\r\n const errorSplit = error.split(' ');\r\n const errorLength = errorSplit.length;\r\n const staticError = errorSplit.slice(0, -1).join(' ');\r\n return (\r\n <FormHelperText\r\n className={classNames(classes.error, errorClassName)}\r\n error\r\n >\r\n {t(staticError, { number: errorSplit[errorLength - 1] })}\r\n </FormHelperText>\r\n );\r\n }\r\n\r\n return (\r\n <FormHelperText className={classNames(classes.error, errorClassName)} error>\r\n {t(error)}\r\n </FormHelperText>\r\n );\r\n};\r\n\r\nconst NumberOfParticipants = ({\r\n fields,\r\n title,\r\n className,\r\n errorClassName,\r\n currency,\r\n meta: { submitFailed, error }\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div>\r\n {title && (\r\n <Typography variant=\"h2\" className={classes.inputIndent}>\r\n {t(title)}\r\n </Typography>\r\n )}\r\n <div className={classNames(classes.participants, className)}>\r\n {fields.map((field, index) => {\r\n const item = fields.get(index);\r\n const itemCurrency = currency || item.currency;\r\n const formattedCurrencyValue = currencyFormatter(item[itemCurrency]);\r\n\r\n let label = ``;\r\n if (item.participant.length) label = `${t(item.participant)} • `;\r\n label += `${itemCurrency} ${formattedCurrencyValue}`;\r\n\r\n return (\r\n <div key={item.id} className={classes.participant}>\r\n <Field\r\n name={`${field}.participants`}\r\n isOnlyNumber={true}\r\n maxLength={9}\r\n isHiddenErrorMsg={true}\r\n className={classes.inputField}\r\n label={label}\r\n component={Input}\r\n />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n <Errors\r\n error={error}\r\n submitFailed={submitFailed}\r\n errorClassName={errorClassName}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default NumberOfParticipants;\r\n","import { makeStyles, useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n sectionIndent: {\r\n marginBottom: '42px',\r\n },\r\n inputIndent: {\r\n marginBottom: '24px',\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '0px 20px 0px 20px',\r\n alignItems: 'center',\r\n textAlign: 'center',\r\n paddingBottom: '20px'\r\n },\r\n },\r\n addOnsItem: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n paddingBottom: '15px',\r\n marginBottom: '15px',\r\n borderBottom: '1px solid #e2ebf6',\r\n '&:last-child': {\r\n marginBottom: 0,\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n // flexDirection: 'column',\r\n // justifyContent: 'center',\r\n },\r\n },\r\n photo: {\r\n width: '200px',\r\n height: '120px',\r\n backgroundSize: 'cover',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center',\r\n borderRadius: '3px',\r\n margin: '0 20px 0 0',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '150px',\r\n height: '100px',\r\n margin: '0 10px 0 0',\r\n },\r\n [theme.breakpoints.down('xs')]: {\r\n width: '120px',\r\n margin: '0 5px 0 5px',\r\n },\r\n },\r\n addOnsTitle: {\r\n fontWeight: 'bold',\r\n marginBottom: '8px',\r\n [theme.breakpoints.down('sm')]: {\r\n paddingLeft: '40px'\r\n },\r\n },\r\n addOnsInfo: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n },\r\n },\r\n addOnsDescription: {\r\n width: '416px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n textAlign: 'center',\r\n padding: '20px 0'\r\n },\r\n },\r\n addOnsPrice: {\r\n fontSize: '13px',\r\n fontWeight: 'bold',\r\n },\r\n addOnsInput: {\r\n width: '170px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n },\r\n currencyWrapper: {\r\n color: theme.palette.text.primary,\r\n fontWeight: 'bold',\r\n marginRight: '20px',\r\n },\r\n currency: {\r\n fontSize: '10px',\r\n },\r\n descriptionCurrency: {\r\n marginRight: '20px',\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'none',\r\n },\r\n },\r\n mobileDescriptionCurrency: {\r\n // display: 'none',\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'block',\r\n // margin: '0 0 0 0',\r\n },\r\n },\r\n titleCurrency: {\r\n display: 'none',\r\n marginLeft: '10px',\r\n minWidth: 'fit-content',\r\n [theme.breakpoints.down('sm')]: {\r\n display: 'block',\r\n },\r\n },\r\n itemTitleWrapper: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n },\r\n currencyInputWrapper: {\r\n display: 'flex',\r\n alignItems: 'baseline',\r\n minWidth: 'fit-content',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n },\r\n },\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Field } from 'redux-form';\r\nimport classNames from 'classnames';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport { Input } from 'components';\r\n\r\nimport { currencyFormatter } from 'utils/prices/formatter';\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst Currency = ({ isWidget, item, currency }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n {isWidget ? (\r\n <Typography variant=\"h3\" className={classes.currencyWrapper}>\r\n <span className={classes.currency}>{currency}</span>{' '}\r\n {currencyFormatter(item[currency])}\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"h3\">\r\n {currency}{' '}\r\n <span className={classes.addOnsPrice}>\r\n {currencyFormatter(item[currency])}\r\n </span>\r\n </Typography>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nconst AddOnsList = ({\r\n fields,\r\n title,\r\n currency,\r\n titleClass,\r\n addOnItemClass,\r\n wrapperClass,\r\n addOnDescClass,\r\n addOnTitle,\r\n isWidget\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n if (!fields.length) return null;\r\n\r\n return (\r\n <div className={classNames(classes.sectionIndent, wrapperClass)}>\r\n {title && (\r\n <Typography variant=\"h2\" className={classes.inputIndent}>\r\n {t(title)}\r\n </Typography>\r\n )}\r\n <div>\r\n {fields.map((field, index) => {\r\n const item = fields.get(index);\r\n const form = getFormByCurrentLanguage(\r\n selectedLanguage,\r\n item,\r\n item['Norwegian']\r\n );\r\n return (\r\n <div\r\n key={item.id}\r\n // style={{ display: form.description ? 'flex' : 'block' }}\r\n className={classNames(classes.addOnsItem, addOnItemClass)}\r\n >\r\n {item.coverPhoto.image && (\r\n <div\r\n className={classes.photo}\r\n style={{\r\n backgroundImage: `url(${item.coverPhoto.image})`\r\n }}\r\n />\r\n )}\r\n <div style={{ width: '100%' }}>\r\n {form.description && (\r\n <div className={classes.itemTitleWrapper}>\r\n <Typography\r\n variant=\"body1\"\r\n className={classNames(classes.addOnsTitle, titleClass)}\r\n >\r\n {form.title}\r\n </Typography>\r\n <div className={classes.titleCurrency}>\r\n <Currency\r\n isWidget={isWidget}\r\n currency={currency}\r\n item={item}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n <div className={classes.addOnsInfo}>\r\n <Typography\r\n variant={form.description ? 'body1' : 'h3'}\r\n className={classNames(\r\n classes.addOnsDescription,\r\n addOnDescClass,\r\n addOnTitle\r\n )}\r\n >\r\n {form.description ? form.description : form.title}\r\n </Typography>\r\n <div className={classes.currencyInputWrapper}>\r\n <div\r\n className={classNames(classes.descriptionCurrency, {\r\n [classes.mobileDescriptionCurrency]: !form.description\r\n })}\r\n >\r\n <Currency\r\n isWidget={isWidget}\r\n currency={currency}\r\n item={item}\r\n />\r\n </div>\r\n <Field\r\n name={`${field}.value`}\r\n isOnlyNumber={true}\r\n maxLength={9}\r\n className={classes.addOnsInput}\r\n component={Input}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default AddOnsList;\r\n","import { isNumber } from 'utils/validators';\r\nimport moment from 'moment';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (isNumber(values.accommodation, true)) {\r\n errors.accommodation = 'Accommodation is required';\r\n }\r\n\r\n if (!values.dates || !values.dates.startDate || !values.dates.endDate) {\r\n errors.dates = 'Dates are required';\r\n } else if (\r\n moment(values.dates.endDate).diff(values.dates.startDate, 'days') <\r\n values.minNights\r\n ) {\r\n errors.dates = {\r\n text: 'The number of nights cannot be less than',\r\n variables: { number: values.minNights }\r\n };\r\n }\r\n\r\n if (values.participants && values.participants.length) {\r\n let participantsArrayErrors = [];\r\n let isValidParticipants = false;\r\n\r\n values.participants.forEach((item, index) => {\r\n if (item.participants && parseInt(item.participants) > 0) {\r\n isValidParticipants = true;\r\n }\r\n\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (!isValidParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: 'Value for at least one category should be filled in'\r\n };\r\n }\r\n }\r\n\r\n if (\r\n !errors.participants &&\r\n values.participants &&\r\n values.participants.length\r\n ) {\r\n const availableParticipants = values.startTime\r\n ? values.startTime.seatsLeft\r\n : values.maxParticipants;\r\n const participantsArrayErrors = [];\r\n let totalParticipants = 0;\r\n\r\n values.participants.forEach((item, index) => {\r\n if (item.participants && item.participants.length) {\r\n totalParticipants += parseInt(item.participants);\r\n }\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (totalParticipants > availableParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: `The number of Guests can’t exceed ${availableParticipants}`\r\n };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n paper: {\r\n backgroundColor: '#FFF',\r\n border: '1px solid #E5E5E5',\r\n boxSizing: 'border-box',\r\n borderRadius: '3px',\r\n width: '680px',\r\n maxWidth: '680px',\r\n height: '600px',\r\n overflow: 'hidden'\r\n },\r\n contentRoot: {\r\n overflowX: 'hidden',\r\n padding: '12px 30px',\r\n height: '451px',\r\n '&:first-child': {\r\n paddingTop: '3px'\r\n }\r\n },\r\n contentTextRoot: {\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 'normal',\r\n color: '#000',\r\n padding: '0',\r\n margin: '0'\r\n },\r\n title: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontSize: '15px',\r\n fontWeight: '600',\r\n lineHeight: '18px',\r\n color: '#000',\r\n padding: '35px 30px 18px'\r\n },\r\n actionsRoot: {\r\n borderTop: '1px solid #E5E5E5',\r\n padding: '12px 30px'\r\n },\r\n cancelBtnRoot: {\r\n border: '1px solid #0e8bb4',\r\n borderRadius: '3px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n color: '#0e8bb4',\r\n padding: '8px 15px',\r\n minWidth: '70px',\r\n marginRight: '7px'\r\n },\r\n actionBtnRoot: {\r\n boxShadow: 'none',\r\n border: '1px solid #0e8bb4',\r\n borderRadius: '3px',\r\n backgroundColor: '#0e8bb4',\r\n color: '#FFFFFF',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n padding: '8px 15px',\r\n minWidth: '70px',\r\n '&:hover': {\r\n backgroundColor: '#0e8bb4',\r\n color: '#FFFFFF'\r\n }\r\n },\r\n closeBtn: {\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n padding: '10px'\r\n },\r\n closeIcon: {\r\n fontSize: '17px',\r\n color: '#000'\r\n },\r\n infoItem: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginBottom: '5px',\r\n '&:last-child': {\r\n marginBottom: 0\r\n }\r\n },\r\n infoIcon: {\r\n fontSize: '17px',\r\n marginRight: '15px'\r\n },\r\n listInfo: {\r\n marginBottom: '24px'\r\n },\r\n inputIndent: {\r\n marginBottom: '24px'\r\n },\r\n sectionTitle: {\r\n fontWeight: 'bold',\r\n marginBottom: '15px'\r\n },\r\n smallSectionTitle: {\r\n fontWeight: 'bold',\r\n marginBottom: '7px'\r\n },\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important'\r\n },\r\n participants: {\r\n marginBottom: '1px'\r\n },\r\n participantsErrorMsg: {\r\n margin: '-17px 0 23px'\r\n },\r\n radioGroupRoot: {\r\n flexDirection: 'column'\r\n },\r\n helpIcon: {\r\n fontSize: '18px',\r\n marginLeft: '6px'\r\n },\r\n addOnTitle: {\r\n fontSize: '13px'\r\n }\r\n});\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport moment from 'moment';\r\nimport { connect } from 'react-redux';\r\nimport { change, Field, FieldArray, reduxForm } from 'redux-form';\r\nimport { useQuery } from '@apollo/react-hooks';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport Button from '@material-ui/core/Button';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\r\nimport LocationOnOutlinedIcon from '@material-ui/icons/LocationOnOutlined';\r\nimport PeopleOutlineIcon from '@material-ui/icons/PeopleOutline';\r\nimport HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport {\r\n CircularLoader,\r\n CustomDateRangePicker,\r\n DropDown,\r\n PopoverWrapper\r\n} from 'components';\r\n\r\nimport { getParticipants } from 'utils/book-accommodation/prepareParticipants';\r\nimport { getReceivedAccommodationData } from 'utils/accommodations-and-activities/prepareReceivedAccommodationData';\r\nimport {\r\n getAvailableRangeDates,\r\n getDisabledDates\r\n} from 'utils/book-accommodation/availableDates';\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport NumberOfParticipants from 'pages/book-activity/components/number-of-participants/NumberOfParticipants';\r\nimport AddOnsList from 'pages/book-activity/components/add-ons-list/AddOnsList';\r\n\r\nimport { ACCOMMODATION, BOOK_DATES } from 'graphql/queries/accommodations';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from '../styles';\r\n\r\nconst initialValues = {\r\n participants: [],\r\n addOns: [],\r\n mandatoryFees: []\r\n};\r\n\r\nconst FIXED_PRICES = 'pricesFixedForm';\r\nconst CATEGORY_PRICES = 'pricesCategoryForm';\r\nconst DAILY_PRICES = 'pricesDailyForm';\r\n\r\nconst BookAccommodationDialog = ({\r\n open,\r\n ownerId,\r\n onCancel,\r\n onConfirm,\r\n onUpdate,\r\n relatedAccommodationsForm,\r\n currency,\r\n bookRelatedAccommodationForm,\r\n changeFormFieldValue,\r\n handleSubmit,\r\n initialValues\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n const initialDates = initialValues.dates;\r\n const startDate = initialDates ? initialDates.startDate : moment();\r\n\r\n const [isInitial, setIsInitial] = React.useState(!!initialValues.title);\r\n const [accommodationId, setAccommodationId] = React.useState(null);\r\n const [accommodation, setAccommodation] = React.useState(null);\r\n const [isUpdatedParticipants, setIsUpdatedParticipants] = React.useState(\r\n false\r\n );\r\n\r\n const { loading, data } = useQuery(ACCOMMODATION, {\r\n skip: !accommodationId,\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n accommodationId: accommodationId,\r\n businessOwnerId: ownerId\r\n }\r\n });\r\n\r\n const {\r\n loading: bookDatesLoading,\r\n data: bookDatesData,\r\n refetch: bookDatesRefetch\r\n } = useQuery(BOOK_DATES, {\r\n skip: !accommodationId,\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n accommodationId: accommodationId,\r\n businessOwnerId: ownerId,\r\n startPeriod: moment(startDate)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(startDate).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n if (data && data.accommodations.length) {\r\n const receivedAccommodation = data.accommodations[0];\r\n const accommodationData = getReceivedAccommodationData(\r\n receivedAccommodation\r\n );\r\n\r\n if (receivedAccommodation.prices[0].participant.participant) {\r\n accommodationData['pricesType'] = CATEGORY_PRICES;\r\n } else if (receivedAccommodation.prices[0].day) {\r\n accommodationData['pricesType'] = DAILY_PRICES;\r\n } else {\r\n accommodationData['pricesType'] = FIXED_PRICES;\r\n }\r\n\r\n setParticipants(accommodationData);\r\n setAddOns(accommodationData);\r\n setMandatoryFees(accommodationData);\r\n setMaxParticipants(accommodationData);\r\n\r\n changeFormFieldValue(\r\n 'minNights',\r\n accommodationData.generalForm.minNights\r\n );\r\n\r\n if (!isInitial) {\r\n changeFormFieldValue('title', accommodationData.generalForm.title);\r\n changeFormFieldValue('pricesType', accommodationData['pricesType']);\r\n changeFormFieldValue('dates', null);\r\n }\r\n\r\n setIsInitial(false);\r\n setAccommodation(accommodationData);\r\n }\r\n }, [data]);\r\n\r\n React.useEffect(() => {\r\n const selectedAccommodationId =\r\n bookRelatedAccommodationForm.values.accommodation;\r\n\r\n if (selectedAccommodationId) {\r\n setAccommodationId(selectedAccommodationId);\r\n }\r\n }, [bookRelatedAccommodationForm.values.accommodation]);\r\n\r\n React.useEffect(() => {\r\n if (!bookRelatedAccommodationForm || !accommodation) return;\r\n setParticipants(accommodation);\r\n }, [bookRelatedAccommodationForm.values.dates]);\r\n\r\n const changeMonthHandler = date => {\r\n bookDatesRefetch({\r\n accommodationId: accommodationId,\r\n startPeriod: moment(date)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(date).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n });\r\n };\r\n\r\n const setParticipants = accommodation => {\r\n setIsUpdatedParticipants(!isUpdatedParticipants);\r\n\r\n const previousParticipants =\r\n bookRelatedAccommodationForm.values.participants || [];\r\n const dates = bookRelatedAccommodationForm.values.dates;\r\n\r\n if (dates && dates.startDate && dates.endDate) {\r\n const participants = getParticipants(\r\n accommodation,\r\n currency,\r\n previousParticipants,\r\n dates\r\n );\r\n changeFormFieldValue('participants', participants);\r\n } else {\r\n changeFormFieldValue('participants', []);\r\n }\r\n };\r\n\r\n const setAddOns = accommodation => {\r\n const previousAddOns = bookRelatedAccommodationForm.values.addOns || [];\r\n\r\n const addOnsList = accommodation.addOnsForm.addOns.map(item => {\r\n const theSameAddOn = previousAddOns.find(addOn => addOn.id === item.id);\r\n return {\r\n ...item,\r\n value: theSameAddOn ? theSameAddOn.value : 0,\r\n originalId: theSameAddOn ? theSameAddOn.originalId : null\r\n };\r\n });\r\n\r\n changeFormFieldValue('addOns', addOnsList);\r\n };\r\n\r\n const setMandatoryFees = accommodation => {\r\n const previousMandatoryFees = bookRelatedAccommodationForm.values.mandatoryFees || [];\r\n const mandatoryFeesList = accommodation.mandatoryFeesForm.mandatoryFees.map(item => {\r\n const theSameMandatoryFee = previousMandatoryFees.find(mandatoryFee => mandatoryFee.id === item.id);\r\n return {\r\n ...item,\r\n value: theSameMandatoryFee ? theSameMandatoryFee.value : 0,\r\n originalId: theSameMandatoryFee ? theSameMandatoryFee.originalId : null\r\n };\r\n });\r\n changeFormFieldValue('mandatoryFees', mandatoryFeesList);\r\n };\r\n\r\n const setMaxParticipants = accommodation => {\r\n changeFormFieldValue('maxParticipants', accommodation.generalForm.guests);\r\n };\r\n\r\n const confirmWrapper = item => {\r\n const generalFormNorwegian = accommodation['generalForm-Norwegian'];\r\n const norwegianFields = {};\r\n\r\n if (generalFormNorwegian) {\r\n norwegianFields['title'] = generalFormNorwegian.title;\r\n }\r\n onConfirm({\r\n ...item,\r\n Norwegian: norwegianFields\r\n });\r\n };\r\n\r\n return (\r\n <Dialog open={open} scroll=\"paper\" classes={{ paper: classes.paper }}>\r\n <CircularLoader\r\n isLoading={loading || bookDatesLoading}\r\n loaderClassName={classes.loaderClassName}\r\n />\r\n\r\n <IconButton className={classes.closeBtn} onClick={onCancel}>\r\n <HighlightOffIcon className={classes.closeIcon} />\r\n </IconButton>\r\n\r\n <DialogTitle\r\n id=\"alert-dialog-title\"\r\n classes={{ root: classes.title }}\r\n disableTypography={true}\r\n >\r\n {accommodation\r\n ? getFormByCurrentLanguage(\r\n selectedLanguage,\r\n accommodation.generalForm,\r\n accommodation['generalForm-Norwegian']\r\n ).title\r\n : t('Book Accommodation')}\r\n <PopoverWrapper text=\"Note you can book only an accommodation that is related to its activity\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </DialogTitle>\r\n\r\n <form\r\n onSubmit={handleSubmit(item =>\r\n !!initialValues.title ? onUpdate(item) : confirmWrapper(item)\r\n )}\r\n >\r\n <DialogContent classes={{ root: classes.contentRoot }}>\r\n {accommodation && (\r\n <div className={classes.listInfo}>\r\n <div className={classes.infoItem}>\r\n <LocationOnOutlinedIcon classes={{ root: classes.infoIcon }} />\r\n <Typography variant=\"body1\">\r\n {accommodation.generalForm.location}\r\n </Typography>\r\n </div>\r\n <div className={classes.infoItem}>\r\n <PeopleOutlineIcon classes={{ root: classes.infoIcon }} />\r\n <Typography variant=\"body1\">\r\n {accommodation.generalForm.guests} {t('Guests')}\r\n </Typography>\r\n </div>\r\n </div>\r\n )}\r\n <Field\r\n name=\"accommodation\"\r\n className={classes.inputIndent}\r\n list={relatedAccommodationsForm.relatedAccommodations}\r\n field=\"title\"\r\n label=\"Accommodation *\"\r\n component={DropDown}\r\n />\r\n {accommodation && (\r\n <>\r\n <Field\r\n name=\"dates\"\r\n availableRange={getAvailableRangeDates(accommodation)}\r\n disabledDates={getDisabledDates(bookDatesData, initialDates)}\r\n changeMonthsCallback={changeMonthHandler}\r\n className={classes.inputIndent}\r\n label=\"Select dates *\"\r\n daySize={39}\r\n component={CustomDateRangePicker}\r\n isStartDateRenderMonth={!!initialDates}\r\n />\r\n {!!bookRelatedAccommodationForm.values.participants.length && (\r\n <>\r\n <Typography variant=\"body1\" className={classes.sectionTitle}>\r\n {t('Guests')} *\r\n </Typography>\r\n <FieldArray\r\n name=\"participants\"\r\n className={classes.participants}\r\n errorClassName={classes.participantsErrorMsg}\r\n isUpdatedParticipants={isUpdatedParticipants}\r\n component={NumberOfParticipants}\r\n currency={currency}\r\n />\r\n </>\r\n )}\r\n\r\n {!!bookRelatedAccommodationForm.values.mandatoryFees.length }\r\n \r\n {!!bookRelatedAccommodationForm.values.addOns.length && (\r\n <>\r\n <Typography variant=\"body1\" className={classes.sectionTitle}>\r\n {t('Add-ons')}\r\n </Typography>\r\n <FieldArray\r\n name=\"addOns\"\r\n currency={currency}\r\n component={AddOnsList}\r\n addOnDescClass={classes.addOnTitle}\r\n />\r\n </>\r\n )}\r\n </>\r\n )}\r\n </DialogContent>\r\n\r\n <DialogActions classes={{ root: classes.actionsRoot }}>\r\n <Button\r\n onClick={onCancel}\r\n variant=\"outlined\"\r\n classes={{ root: classes.cancelBtnRoot }}\r\n >\r\n {t('Cancel')}\r\n </Button>\r\n <Button\r\n type=\"submit\"\r\n variant=\"outlined\"\r\n classes={{ root: classes.actionBtnRoot }}\r\n autoFocus\r\n >\r\n {t('Book')}\r\n </Button>\r\n </DialogActions>\r\n </form>\r\n </Dialog>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n bookRelatedAccommodationForm: state.form.bookRelatedAccommodationForm\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('bookRelatedAccommodationForm', field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'bookRelatedAccommodationForm',\r\n destroyOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(BookAccommodationDialog));\r\n","import moment from 'moment';\r\n\r\nconst DAILY_PRICE = 'pricesDailyForm';\r\nconst DAILY_TIME_PRICE = 'pricesDailyScheduleForm';\r\nconst EQUAL_PRICE = 'pricesEqualForm';\r\nconst FIXED_PRICE = 'pricesFixedForm';\r\n\r\nconst getParticipants = (\r\n activity,\r\n bookActivityForm,\r\n setIsUpdatedParticipants,\r\n isUpdatedParticipants,\r\n currency,\r\n previousParticipants\r\n) => {\r\n if (!activity) return;\r\n\r\n const selectedCurrency = currency || bookActivityForm.values.currency;\r\n let startingDate = bookActivityForm.values.startingDate;\r\n const multiDates = bookActivityForm.values.multiDates;\r\n const prices = activity[activity.pricesType];\r\n const pricesType = activity['pricesType'];\r\n const scheduleType = activity['scheduleType'];\r\n // const isMultiDates = !!multiDates;\r\n const participants = [];\r\n // const pricesEqual = activity[activity.pricesType];\r\n\r\n setIsUpdatedParticipants(!isUpdatedParticipants);\r\n\r\n if (!startingDate && multiDates) {\r\n startingDate = multiDates.startDate;\r\n }\r\n\r\n if (!startingDate && !multiDates) {\r\n if (!prices.categories) {\r\n _setFixedParticipant(\r\n prices,\r\n participants,\r\n selectedCurrency,\r\n previousParticipants\r\n );\r\n return participants;\r\n }\r\n _setParticipant(\r\n prices,\r\n participants,\r\n selectedCurrency,\r\n previousParticipants\r\n );\r\n return participants;\r\n }\r\n\r\n // if (multiDates && pricesType === EQUAL_PRICE) {\r\n // const range = enumerateDaysBetweenDates(\r\n // multiDates.startDate,\r\n // multiDates.endDate\r\n // );\r\n // range.forEach(calendarDay => {\r\n // const prices = pricesEqual.categories.find(\r\n // item => item.day === calendarDay\r\n // );\r\n // return prices;\r\n // });\r\n //\r\n // participants.length = 0;\r\n //\r\n // return _setFixedParticipant(\r\n // prices,\r\n // participants,\r\n // selectedCurrency,\r\n // previousParticipants,\r\n // range.length\r\n // );\r\n // }\r\n\r\n // if (isMultiDates) {\r\n // const range = enumerateDaysBetweenDates(\r\n // multiDates.startDate,\r\n // multiDates.endDate\r\n // );\r\n //\r\n // range.forEach(calendarDay => {\r\n // const day = prices.days.find(item => item.day === calendarDay);\r\n //\r\n // _setParticipant(\r\n // day,\r\n // participants,\r\n // selectedCurrency,\r\n // previousParticipants\r\n // );\r\n // });\r\n //\r\n // // fixme: from here\r\n // const formattedParticipants = participants.reduce((acc, item) => {\r\n // //item.participant === person/senior/adult/children....\r\n // const participant = acc.find(\r\n // accItem => accItem.participant === item.participant\r\n // );\r\n // if (participant) {\r\n // participant.currencyValue =\r\n // Number(participant.currencyValue) + Number(item.currencyValue);\r\n // participant.NOK = Number(participant.NOK) + Number(item.NOK);\r\n // participant.EUR = Number(participant.EUR) + Number(item.EUR);\r\n // participant.USD = Number(participant.USD) + Number(item.USD);\r\n // } else {\r\n // acc.push(item);\r\n // }\r\n //\r\n // return acc;\r\n // }, []);\r\n //\r\n // participants.length = 0;\r\n // participants.push(...formattedParticipants);\r\n // // fixme to here\r\n //\r\n // return participants;\r\n // }\r\n\r\n // if (isMultiDates) {\r\n // const range = enumerateDaysBetweenDates(\r\n // multiDates.startDate,\r\n // multiDates.endDate\r\n // );\r\n //\r\n // range.forEach(calendarDay => {\r\n // const day = prices.days.find(item => item.day === calendarDay);\r\n //\r\n // _setParticipant(\r\n // day,\r\n // participants,\r\n // selectedCurrency,\r\n // previousParticipants\r\n // );\r\n // });\r\n //\r\n // // fixme: from here\r\n // const formattedParticipants = participants.reduce((acc, item) => {\r\n // //item.participant === person/senior/adult/children....\r\n // const participant = acc.find(\r\n // accItem => accItem.participant === item.participant\r\n // );\r\n // if (participant) {\r\n // participant.currencyValue =\r\n // Number(participant.currencyValue) + Number(item.currencyValue);\r\n // participant.NOK = Number(participant.NOK) + Number(item.NOK);\r\n // participant.EUR = Number(participant.EUR) + Number(item.EUR);\r\n // participant.USD = Number(participant.USD) + Number(item.USD);\r\n // } else {\r\n // acc.push(item);\r\n // }\r\n //\r\n // return acc;\r\n // }, []);\r\n //\r\n // participants.length = 0;\r\n // participants.push(...formattedParticipants);\r\n // // fixme to here\r\n //\r\n // return participants;\r\n // }\r\n\r\n if (pricesType === DAILY_PRICE) {\r\n const day = prices.days.find(\r\n item => item.day === moment(startingDate).format('ddd')\r\n );\r\n _setParticipant(day, participants, selectedCurrency, previousParticipants);\r\n } else if (pricesType === DAILY_TIME_PRICE) {\r\n const day = prices.daysArray.find(item =>\r\n item.days.includes(moment(startingDate).format('ddd'))\r\n );\r\n _setParticipant(day, participants, selectedCurrency, previousParticipants);\r\n } else if (pricesType === EQUAL_PRICE) {\r\n _setParticipant(\r\n prices,\r\n participants,\r\n selectedCurrency,\r\n previousParticipants\r\n );\r\n } else if (pricesType === FIXED_PRICE) {\r\n const item =\r\n scheduleType === 'schedulePassForm'\r\n ? prices\r\n : prices.days.find(item =>\r\n item.days.includes(moment(startingDate).format('ddd'))\r\n );\r\n\r\n _setFixedParticipant(\r\n item,\r\n participants,\r\n selectedCurrency,\r\n previousParticipants\r\n );\r\n }\r\n\r\n return participants;\r\n};\r\n\r\n// function enumerateDaysBetweenDates(startDate, endDate) {\r\n// let date = [];\r\n// while (moment(startDate) <= moment(endDate)) {\r\n// date.push(startDate.format('ddd'));\r\n// startDate = moment(startDate).add(1, 'days');\r\n// }\r\n// return date;\r\n// }\r\n\r\nconst _setParticipant = (\r\n item,\r\n participants,\r\n selectedCurrency,\r\n previousParticipants\r\n) => {\r\n if (!item) return;\r\n item.categories.map(item => {\r\n participants.push({\r\n id: `${item.participant}-${selectedCurrency}-${item[selectedCurrency]}`,\r\n participant: item.participant,\r\n participants: 0,\r\n currency: selectedCurrency,\r\n currencyValue: item[selectedCurrency],\r\n NOK: item.NOK,\r\n EUR: item.EUR,\r\n USD: item.USD\r\n });\r\n });\r\n\r\n const updatedParticipants = _setPreviousParticipantValue(\r\n participants,\r\n previousParticipants\r\n );\r\n\r\n participants.length = 0;\r\n participants.push(...updatedParticipants);\r\n};\r\n\r\nconst _setFixedParticipant = (\r\n prices,\r\n participants,\r\n currency,\r\n previousParticipants,\r\n days\r\n) => {\r\n if (days) {\r\n participants.push({\r\n id: `${currency}-${prices.categories[0][currency]}`,\r\n participant: prices.categories[0].participant,\r\n participants: 0,\r\n currency: currency,\r\n currencyValue: prices.categories[0][currency],\r\n NOK: prices.categories[0].NOK * days,\r\n EUR: prices.categories[0].EUR * days,\r\n USD: prices.categories[0].USD * days\r\n });\r\n } else {\r\n participants.push({\r\n id: `${currency}-${prices[currency]}`,\r\n participant: '',\r\n participants: 0,\r\n currency: currency,\r\n currencyValue: prices[currency],\r\n NOK: prices.NOK,\r\n EUR: prices.EUR,\r\n USD: prices.USD\r\n });\r\n }\r\n const updatedParticipants = _setPreviousParticipantValue(\r\n participants,\r\n previousParticipants\r\n );\r\n\r\n participants.length = 0;\r\n participants.push(...updatedParticipants);\r\n return participants;\r\n};\r\n\r\nconst _setPreviousParticipantValue = (participants, previousParticipants) => {\r\n return participants.map(item => {\r\n const theSameParticipant = previousParticipants\r\n ? previousParticipants.find(\r\n participant => participant.participant === item.participant\r\n )\r\n : false;\r\n if (theSameParticipant) {\r\n return {\r\n ...item,\r\n participants: theSameParticipant.participants\r\n };\r\n }\r\n return item;\r\n });\r\n};\r\n\r\nexport { getParticipants };\r\n","import moment from 'moment';\r\n\r\nconst SCHEDULE_DATE_NO_TIME_NAME = 'scheduleDateForm';\r\nconst SCHEDULE_DATE_AND_TIME_NAME = 'scheduleDateTimeForm';\r\n\r\nconst getAvailableRangeDates = activity => {\r\n if (!activity) {\r\n return {\r\n startDate: null,\r\n endDate: null,\r\n daysOfWeek: []\r\n };\r\n }\r\n\r\n const schedule =\r\n activity[SCHEDULE_DATE_NO_TIME_NAME] ||\r\n activity[SCHEDULE_DATE_AND_TIME_NAME];\r\n\r\n if (!schedule) {\r\n return {\r\n startDate: null,\r\n endDate: null,\r\n daysOfWeek: []\r\n };\r\n }\r\n\r\n const daysOfWeek = [];\r\n\r\n if (activity[SCHEDULE_DATE_NO_TIME_NAME]) {\r\n const days = getAvailableDaysOfWeekList(schedule.days);\r\n daysOfWeek.push(...days);\r\n } else if (activity[SCHEDULE_DATE_AND_TIME_NAME]) {\r\n schedule.daysArray.map(item => {\r\n const days = getAvailableDaysOfWeekList(item.days);\r\n daysOfWeek.push(...days);\r\n });\r\n }\r\n\r\n const availability = schedule.availability || {};\r\n\r\n return {\r\n startDate: availability.startDate,\r\n endDate: availability.endDate,\r\n daysOfWeek: daysOfWeek\r\n };\r\n};\r\n\r\nconst getAvailableDaysOfWeekList = days => {\r\n return Object.keys(days || {})\r\n .filter(field => days[field])\r\n .map(item => item);\r\n};\r\n\r\nconst getDisabledDates = (\r\n availableParticipantsData,\r\n initialStartingDate,\r\n activity\r\n) => {\r\n const availableParticipantsPerDate = availableParticipantsData\r\n ? availableParticipantsData.activities[0].availableParticipantsPerDate\r\n : [];\r\n\r\n const schedule = activity && activity[SCHEDULE_DATE_AND_TIME_NAME];\r\n\r\n return availableParticipantsPerDate\r\n .filter(item => {\r\n if (initialStartingDate && item.date) {\r\n if (initialStartingDate.startDate && initialStartingDate.endDate) {\r\n if (\r\n moment(item.date, 'YYYY-MM-DD').isBetween(\r\n initialStartingDate.startDate,\r\n initialStartingDate.endDate,\r\n 'day',\r\n '[]'\r\n )\r\n ) {\r\n return false;\r\n }\r\n }\r\n if (\r\n moment(initialStartingDate).isSame(moment(item.date, 'YYYY-MM-DD'))\r\n ) {\r\n return false;\r\n }\r\n }\r\n if (item.startTime && !item.availableParticipants) {\r\n const bookedDayName = moment(item.date, 'YYYY-MM-DD').format('ddd');\r\n let isDisabled = true;\r\n\r\n if (schedule) {\r\n // eslint-disable-next-line array-callback-return\r\n schedule.daysArray.map(scheduleItem => {\r\n const days = getAvailableDaysOfWeekList(scheduleItem.days);\r\n\r\n if (days.includes(bookedDayName)) {\r\n const timesLength = scheduleItem.startTimeAndDuration.length;\r\n if (timesLength > 1) {\r\n const bookingsForDay = availableParticipantsPerDate.filter(\r\n dateData =>\r\n dateData.date === item.date &&\r\n !dateData.availableParticipants\r\n );\r\n if (bookingsForDay.length !== timesLength) {\r\n isDisabled = false;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n return isDisabled;\r\n }\r\n return !item.startTime && !item.availableParticipants;\r\n })\r\n .map(item => item.date);\r\n};\r\n\r\nconst getListOfStartTimeAndDuration = (\r\n availableParticipantsPerDate,\r\n activity,\r\n bookActivityForm\r\n) => {\r\n if (!activity) return [];\r\n\r\n const schedule = activity[SCHEDULE_DATE_AND_TIME_NAME];\r\n const selectedDate = bookActivityForm.values.startingDate || null;\r\n const startTimeAndDurationList = [];\r\n const formattedSelectedDate = selectedDate\r\n ? moment(selectedDate).format('YYYY-MM-DD')\r\n : null;\r\n\r\n const availableParticipants = availableParticipantsPerDate\r\n .filter(item => item.date === formattedSelectedDate)\r\n .map(item => {\r\n return {\r\n ...item,\r\n startTime: moment(item.startTime, 'HH:mm:ss').format('HH:mm')\r\n };\r\n });\r\n\r\n if (!schedule) return [];\r\n\r\n schedule.daysArray.map(item => {\r\n const days = getAvailableDaysOfWeekList(item.days);\r\n const dayOfSelectedDate = moment(selectedDate).format('ddd');\r\n\r\n if (selectedDate && days.includes(dayOfSelectedDate)) {\r\n item.startTimeAndDuration.map(item => {\r\n const startTime = moment(item.startTime).format('HH:mm');\r\n\r\n const seatsLeftObj = availableParticipants.find(\r\n item => item.startTime === startTime\r\n );\r\n\r\n const seatsLeft = seatsLeftObj\r\n ? seatsLeftObj.availableParticipants\r\n : activity.generalForm.maxParticipants;\r\n\r\n startTimeAndDurationList.push({\r\n id: `${startTime}-${item.duration}-${item.timeType}`,\r\n startTime: startTime,\r\n seatsLeft: parseInt(seatsLeft),\r\n maxParticipants: activity.generalForm.maxParticipants,\r\n duration: item.duration,\r\n timeType: item.timeType\r\n });\r\n });\r\n }\r\n });\r\n\r\n return startTimeAndDurationList;\r\n};\r\n\r\nconst getDefaultStartTime = (startTimeAndDurationList, bookActivityForm) => {\r\n const startTime = bookActivityForm.values.startTime;\r\n let defaultStartTime = null;\r\n\r\n if (!startTimeAndDurationList.length) {\r\n return defaultStartTime;\r\n }\r\n\r\n defaultStartTime = startTimeAndDurationList[0];\r\n\r\n if (startTime) {\r\n const existedStartTime = startTimeAndDurationList.find(\r\n item => item.id === startTime.id\r\n );\r\n if (existedStartTime) defaultStartTime = existedStartTime;\r\n }\r\n\r\n return defaultStartTime;\r\n};\r\n\r\nconst getListOfStartTimeAndDurationByCutoffPeriod = (\r\n activity,\r\n listOfStartTimeAndDuration,\r\n startingDate\r\n) => {\r\n const cutoffData = activity[activity.scheduleType];\r\n\r\n if (\r\n !listOfStartTimeAndDuration ||\r\n !listOfStartTimeAndDuration.length ||\r\n !cutoffData ||\r\n !startingDate\r\n ) {\r\n return listOfStartTimeAndDuration;\r\n }\r\n\r\n const cutoffPeriod = parseInt(cutoffData.cutoffPeriod);\r\n const cutoffPeriodTimeType = cutoffData.cutoffPeriodTimeType;\r\n\r\n return listOfStartTimeAndDuration\r\n .map(item => {\r\n const startTime = moment(item.startTime, 'HH:mm');\r\n const dateWithTime = moment(startingDate).set({\r\n hour: startTime.get('hour'),\r\n minute: startTime.get('minute')\r\n });\r\n const nowCutoffDate = moment().add(cutoffPeriod, cutoffPeriodTimeType);\r\n const difference = moment(dateWithTime).diff(nowCutoffDate);\r\n\r\n if (difference <= 0) {\r\n return false;\r\n }\r\n\r\n return item;\r\n })\r\n .filter(item => item);\r\n};\r\n\r\nexport {\r\n getAvailableRangeDates,\r\n getAvailableDaysOfWeekList,\r\n getDisabledDates,\r\n getListOfStartTimeAndDuration,\r\n getDefaultStartTime,\r\n getListOfStartTimeAndDurationByCutoffPeriod\r\n};\r\n","import Moment from 'moment';\r\nimport { extendMoment } from 'moment-range';\r\n\r\nconst moment = extendMoment(Moment);\r\n\r\nconst getMaxParticipants = (\r\n seatsLeft,\r\n initialValues,\r\n bookRelatedActivityForm,\r\n availableParticipantsData,\r\n newSelectedStartTime\r\n) => {\r\n if (\r\n !initialValues ||\r\n !initialValues.startingDate ||\r\n !bookRelatedActivityForm.values.startingDate ||\r\n !availableParticipantsData\r\n ) {\r\n return seatsLeft;\r\n }\r\n\r\n const startingDate = moment(\r\n bookRelatedActivityForm.values.startingDate\r\n ).format('YYYY-MM-DD');\r\n\r\n if (\r\n moment(bookRelatedActivityForm.values.startingDate).isSame(\r\n initialValues.startingDate,\r\n 'day'\r\n )\r\n ) {\r\n const activities = availableParticipantsData.activities;\r\n\r\n if (activities.length) {\r\n const availableParticipantsPerDate =\r\n activities[0].availableParticipantsPerDate || [];\r\n const selectedStartTime =\r\n newSelectedStartTime || bookRelatedActivityForm.values.startTime;\r\n const startTime = selectedStartTime\r\n ? moment(selectedStartTime.startTime, 'HH:mm').format('HH:mm:ss')\r\n : null;\r\n\r\n const existedDate = availableParticipantsPerDate.find(\r\n item =>\r\n item.date === startingDate &&\r\n (item.startTime === startTime || (!item.startTime && !startTime))\r\n );\r\n\r\n if (!!existedDate) {\r\n const numberOfBookedParticipants = initialValues.participants.reduce(\r\n (accumulator, participant) =>\r\n accumulator + (parseInt(participant['participants']) || 0),\r\n 0\r\n );\r\n\r\n return parseInt(seatsLeft) + numberOfBookedParticipants;\r\n }\r\n }\r\n }\r\n\r\n return seatsLeft;\r\n};\r\n\r\nconst getAvailableParticipantsForStartTime = (\r\n listOfStartTimeAndDuration,\r\n bookedData,\r\n bookForm,\r\n availableParticipantsData\r\n) => {\r\n if (!bookedData || !bookedData.startTime) return listOfStartTimeAndDuration;\r\n\r\n return listOfStartTimeAndDuration.map(item => {\r\n if (item.id === bookedData.startTime.id) {\r\n const maxParticipants = getMaxParticipants(\r\n item.seatsLeft,\r\n bookedData,\r\n bookForm,\r\n availableParticipantsData,\r\n item\r\n );\r\n return {\r\n ...item,\r\n maxParticipants: maxParticipants,\r\n seatsLeft: parseInt(maxParticipants)\r\n };\r\n }\r\n\r\n return item;\r\n });\r\n};\r\n\r\nconst getMaxParticipantsActivitySeveralDays = (\r\n availableParticipantsPerDate,\r\n startDate,\r\n endDate,\r\n bookedData\r\n) => {\r\n let availableParticipants = null;\r\n\r\n availableParticipantsPerDate.forEach(item => {\r\n const itemDate = moment(item.date, 'YYYY-MM-DD');\r\n if (itemDate.isBetween(startDate, endDate, 'days', '[]')) {\r\n if (availableParticipants !== null) {\r\n if (availableParticipants > item.availableParticipants) {\r\n availableParticipants = item.availableParticipants;\r\n }\r\n } else {\r\n availableParticipants = item.availableParticipants;\r\n }\r\n }\r\n });\r\n\r\n if (bookedData && bookedData.multiDates) {\r\n const bookedRange = moment.range(\r\n bookedData.multiDates.startDate,\r\n bookedData.multiDates.endDate\r\n );\r\n\r\n const selectedRange = moment.range(\r\n moment(moment(startDate).format('DD/MM/YYYY'), 'DD/MM/YYYY'),\r\n moment(moment(endDate).format('DD/MM/YYYY'), 'DD/MM/YYYY')\r\n );\r\n\r\n const overlaps = selectedRange.overlaps(bookedRange, { adjacent: true });\r\n\r\n const bookedPlaces = bookedData.participants.reduce(\r\n (acc, obj) => acc + parseInt(obj.participants),\r\n 0\r\n );\r\n\r\n if (overlaps) {\r\n if (!availableParticipants) availableParticipants = 0;\r\n return availableParticipants + bookedPlaces;\r\n }\r\n }\r\n\r\n return availableParticipants;\r\n};\r\n\r\nexport {\r\n getMaxParticipants,\r\n getAvailableParticipantsForStartTime,\r\n getMaxParticipantsActivitySeveralDays\r\n};\r\n","import { isNumber } from 'utils/validators';\r\n\r\nconst SCHEDULE_PASS_NAME = 'schedulePassForm';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (isNumber(values.activity, true)) {\r\n errors.activity = 'Activity is required';\r\n }\r\n\r\n if (\r\n values.scheduleType !== SCHEDULE_PASS_NAME &&\r\n !values.startingDate &&\r\n (!values.multiDates?.startDate || !values?.multiDates.endDate)\r\n ) {\r\n errors.startingDate = 'Starting date is required';\r\n errors.multiDates = 'Starting date is required';\r\n }\r\n\r\n if (values.participants && values.participants.length) {\r\n let participantsArrayErrors = [];\r\n let isValidParticipants = false;\r\n\r\n values.participants.forEach((item, index) => {\r\n if (item.participants && parseInt(item.participants) > 0) {\r\n isValidParticipants = true;\r\n }\r\n\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (!isValidParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: 'Value for at least one category should be filled in'\r\n };\r\n }\r\n }\r\n\r\n if (\r\n !errors.participants &&\r\n values.participants &&\r\n values.participants.length\r\n ) {\r\n const availableParticipants = values.maxParticipants;\r\n const participantsArrayErrors = [];\r\n let totalParticipants = 0;\r\n\r\n values.participants.forEach((item, index) => {\r\n if (item.participants && item.participants.length) {\r\n totalParticipants += parseInt(item.participants);\r\n }\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (totalParticipants > availableParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: `The number of Guests can’t exceed ${availableParticipants}`\r\n };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { change, Field, FieldArray, reduxForm } from 'redux-form';\r\nimport { useQuery } from '@apollo/react-hooks';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport Button from '@material-ui/core/Button';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\r\nimport LocationOnOutlinedIcon from '@material-ui/icons/LocationOnOutlined';\r\nimport PeopleOutlineIcon from '@material-ui/icons/PeopleOutline';\r\nimport HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport {\r\n CircularLoader,\r\n DropDown,\r\n MultiDatePickerCalendar,\r\n PopoverWrapper,\r\n RadioButtonsGroup,\r\n SingleDatePicker\r\n} from 'components';\r\n\r\nimport {\r\n getReceivedActivityBookingsDates,\r\n getReceivedActivityData\r\n} from 'utils/accommodations-and-activities/prepareReceivedActivityData';\r\nimport { getParticipants } from 'utils/book-activity/prepareParticipants';\r\nimport {\r\n getAvailableRangeDates,\r\n getDefaultStartTime,\r\n getDisabledDates,\r\n getListOfStartTimeAndDuration,\r\n getListOfStartTimeAndDurationByCutoffPeriod\r\n} from 'utils/book-activity/availableDates';\r\nimport {\r\n getMaxParticipants,\r\n getMaxParticipantsActivitySeveralDays\r\n} from 'utils/book-activity/maxParticipants';\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport NumberOfParticipants from 'pages/book-activity/components/number-of-participants/NumberOfParticipants';\r\nimport AddOnsList from 'pages/book-activity/components/add-ons-list/AddOnsList';\r\n\r\nimport {\r\n ACTIVITIES_AVAILABLE_PARTICIPANTS,\r\n ACTIVITY\r\n} from 'graphql/queries/activities';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from '../styles';\r\n\r\nconst initialValues = {\r\n participants: [],\r\n addOns: []\r\n};\r\n\r\nconst SCHEDULE_DATE_NO_TIME_NAME = 'scheduleDateForm';\r\nconst SCHEDULE_DATE_AND_TIME_NAME = 'scheduleDateTimeForm';\r\nconst SCHEDULE_PASS_NAME = 'schedulePassForm';\r\n\r\nconst BookActivityDialog = ({\r\n open,\r\n ownerId,\r\n onCancel,\r\n onConfirm,\r\n onUpdate,\r\n relatedActivitiesForm,\r\n currency,\r\n bookRelatedActivityForm,\r\n changeFormFieldValue,\r\n handleSubmit,\r\n initialValues\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n const [isInitial, setIsInitial] = React.useState(!!initialValues.title);\r\n const [activityId, setActivityId] = React.useState(null);\r\n const [activity, setActivity] = React.useState(null);\r\n const [isUpdatedParticipants, setIsUpdatedParticipants] = React.useState(\r\n false\r\n );\r\n const [\r\n listStartTimeAndDuration,\r\n setListStartTimeAndDuration\r\n ] = React.useState([]);\r\n const [\r\n availableParticipantsData,\r\n setAvailableParticipantsData\r\n ] = React.useState(null);\r\n\r\n const initialStartingDate =\r\n initialValues && initialValues.startingDate\r\n ? initialValues.startingDate\r\n : initialValues && initialValues.multiDates\r\n ? initialValues.multiDates.startDate\r\n : moment();\r\n\r\n const { loading, data } = useQuery(ACTIVITY, {\r\n skip: !activityId,\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n activityId: activityId,\r\n businessOwnerId: ownerId\r\n }\r\n });\r\n\r\n const {\r\n loading: isAvailableParticipantsLoading,\r\n data: receivedAvailableParticipantsData,\r\n refetch: refetchParticipantsData\r\n } = useQuery(ACTIVITIES_AVAILABLE_PARTICIPANTS, {\r\n skip: !activityId,\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n activityId: activityId,\r\n businessOwnerId: ownerId,\r\n startPeriod: moment(initialStartingDate)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(initialStartingDate).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n if (!receivedAvailableParticipantsData) return;\r\n\r\n const availableParticipantsData = getReceivedActivityBookingsDates(\r\n receivedAvailableParticipantsData\r\n );\r\n\r\n setAvailableParticipantsData(availableParticipantsData);\r\n }, [receivedAvailableParticipantsData]);\r\n\r\n React.useEffect(() => {\r\n if (data && data.activities.length) {\r\n const receivedActivity = data.activities[0];\r\n const activityData = getReceivedActivityData(receivedActivity);\r\n\r\n activityData['pricesType'] = data.activities[0]['pricesType'];\r\n activityData['scheduleType'] = data.activities[0]['scheduleType'];\r\n\r\n if (!isInitial) {\r\n changeFormFieldValue('title', activityData.generalForm.title);\r\n changeFormFieldValue('startingDate' && 'multiDates', null);\r\n changeFormFieldValue('maxParticipants', null);\r\n changeFormFieldValue('participants', []);\r\n changeFormFieldValue('pricesType', activityData['pricesType']);\r\n setListStartTimeAndDuration([]);\r\n } else {\r\n handleListStartTimeAndDurationField(activityData);\r\n setParticipants(activityData);\r\n }\r\n\r\n setMaxParticipants(activityData['generalForm'].maxParticipants);\r\n\r\n setAddOns(activityData);\r\n\r\n if (activityData.scheduleType === SCHEDULE_PASS_NAME) {\r\n if (!isInitial) {\r\n setParticipants(activityData);\r\n }\r\n }\r\n\r\n setIsInitial(false);\r\n setActivity(activityData);\r\n }\r\n }, [data]);\r\n\r\n React.useEffect(() => {\r\n const selectedActivityId = bookRelatedActivityForm.values.activity;\r\n\r\n if (selectedActivityId) {\r\n setActivityId(selectedActivityId);\r\n }\r\n }, [bookRelatedActivityForm.values.activity]);\r\n\r\n React.useEffect(() => {\r\n const startingDate = bookRelatedActivityForm.values.startingDate;\r\n\r\n if (startingDate) {\r\n handleListStartTimeAndDurationField(activity);\r\n setParticipants(activity);\r\n }\r\n }, [bookRelatedActivityForm.values.startingDate]);\r\n\r\n React.useEffect(() => {\r\n const multiDates = bookRelatedActivityForm.values.multiDates;\r\n if (multiDates) {\r\n handleMultiDateAvailableSeats(activity);\r\n setParticipants(activity);\r\n }\r\n }, [\r\n activity,\r\n availableParticipantsData,\r\n bookRelatedActivityForm.values.multiDates\r\n ]);\r\n\r\n React.useEffect(() => {\r\n const startTime = bookRelatedActivityForm.values.startTime;\r\n\r\n if (startTime) {\r\n setMaxParticipants(startTime.seatsLeft);\r\n }\r\n }, [bookRelatedActivityForm.values.startTime]);\r\n\r\n const setMaxParticipants = seatsLeft => {\r\n const maxParticipants = getMaxParticipants(\r\n seatsLeft,\r\n initialValues,\r\n bookRelatedActivityForm,\r\n availableParticipantsData\r\n );\r\n\r\n changeFormFieldValue('maxParticipants', maxParticipants);\r\n };\r\n\r\n const changeMonthHandler = date => {\r\n refetchParticipantsData({\r\n activityId: parseInt(activityId),\r\n startPeriod: moment(date)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(date).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n });\r\n };\r\n\r\n const setParticipants = activity => {\r\n const previousParticipants =\r\n bookRelatedActivityForm.values.participants || [];\r\n const participants = getParticipants(\r\n activity,\r\n bookRelatedActivityForm,\r\n setIsUpdatedParticipants,\r\n isUpdatedParticipants,\r\n currency,\r\n previousParticipants\r\n );\r\n\r\n changeFormFieldValue('participants', participants);\r\n };\r\n\r\n const setAddOns = activity => {\r\n const previousAddOns = bookRelatedActivityForm.values.addOns || [];\r\n\r\n const addOnsList = activity.addOnsForm.addOns.map(item => {\r\n const theSameAddOn = previousAddOns.find(addOn => addOn.id === item.id);\r\n return {\r\n ...item,\r\n value: theSameAddOn ? theSameAddOn.value : 0,\r\n originalId: theSameAddOn ? theSameAddOn.originalId : null\r\n };\r\n });\r\n\r\n changeFormFieldValue('addOns', addOnsList);\r\n };\r\n\r\n const handleMultiDateAvailableSeats = activity => {\r\n if (!activity || !bookRelatedActivityForm.values.multiDates) return;\r\n\r\n const startDate = bookRelatedActivityForm.values.multiDates.startDate;\r\n const endDate = bookRelatedActivityForm.values.multiDates.endDate;\r\n\r\n if (!startDate || !endDate) return;\r\n\r\n const availableParticipantsPerDate = availableParticipantsData\r\n ? availableParticipantsData.activities[0].availableParticipantsPerDate\r\n : [];\r\n\r\n const availableParticipants = getMaxParticipantsActivitySeveralDays(\r\n availableParticipantsPerDate,\r\n startDate,\r\n endDate,\r\n initialValues\r\n );\r\n\r\n if (availableParticipants !== null) {\r\n setMaxParticipants(availableParticipants);\r\n } else {\r\n setMaxParticipants(activity.generalForm.maxParticipants);\r\n }\r\n };\r\n\r\n const handleListStartTimeAndDurationField = activity => {\r\n if (!activity) return;\r\n\r\n const startingDate = bookRelatedActivityForm.values.startingDate;\r\n const availableParticipantsPerDate = availableParticipantsData\r\n ? availableParticipantsData.activities[0].availableParticipantsPerDate\r\n : [];\r\n let listOfStartTimeAndDuration = getListOfStartTimeAndDuration(\r\n availableParticipantsPerDate,\r\n activity,\r\n bookRelatedActivityForm\r\n );\r\n listOfStartTimeAndDuration = getListOfStartTimeAndDurationByCutoffPeriod(\r\n activity,\r\n listOfStartTimeAndDuration,\r\n startingDate\r\n );\r\n const selectedStartTime = getDefaultStartTime(\r\n listOfStartTimeAndDuration,\r\n bookRelatedActivityForm\r\n );\r\n changeFormFieldValue('startTime', selectedStartTime);\r\n\r\n if (!selectedStartTime) {\r\n setMaxParticipants(activity.generalForm.maxParticipants);\r\n availableParticipantsPerDate.map(item => {\r\n const formattedStartDate = startingDate\r\n ? moment(startingDate).format('YYYY-MM-DD')\r\n : '';\r\n if (!item.startTime && item.date === formattedStartDate) {\r\n setMaxParticipants(item.availableParticipants);\r\n }\r\n });\r\n } else {\r\n setMaxParticipants(selectedStartTime.seatsLeft);\r\n }\r\n\r\n setListStartTimeAndDuration(listOfStartTimeAndDuration);\r\n };\r\n\r\n const getStartTimeAndDuration = () => {\r\n return listStartTimeAndDuration\r\n .map(item => {\r\n return {\r\n ...item,\r\n title: `${item.startTime} • ${item.duration} ${t(item.timeType)}`\r\n };\r\n })\r\n .filter(item => item.seatsLeft);\r\n };\r\n\r\n const confirmWrapper = item => {\r\n const generalFormNorwegian = activity['generalForm-Norwegian'];\r\n const norwegianFields = {};\r\n\r\n if (generalFormNorwegian) {\r\n norwegianFields['title'] = generalFormNorwegian.title;\r\n }\r\n onConfirm({\r\n ...item,\r\n Norwegian: norwegianFields\r\n });\r\n };\r\n\r\n const generalForm = activity\r\n ? getFormByCurrentLanguage(\r\n selectedLanguage,\r\n activity.generalForm,\r\n activity['generalForm-Norwegian']\r\n )\r\n : {};\r\n\r\n return (\r\n <Dialog open={open} scroll=\"paper\" classes={{ paper: classes.paper }}>\r\n <CircularLoader\r\n isLoading={loading || isAvailableParticipantsLoading}\r\n loaderClassName={classes.loaderClassName}\r\n />\r\n\r\n <IconButton className={classes.closeBtn} onClick={onCancel}>\r\n <HighlightOffIcon className={classes.closeIcon} />\r\n </IconButton>\r\n\r\n <DialogTitle\r\n id=\"alert-dialog-title\"\r\n classes={{ root: classes.title }}\r\n disableTypography={true}\r\n >\r\n {activity ? generalForm.title : t('Book Activity')}\r\n <PopoverWrapper\r\n text={`Note you can book only an activity that is related to its accommodation`}\r\n >\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n </DialogTitle>\r\n\r\n <form\r\n onSubmit={handleSubmit(item =>\r\n !!initialValues.title ? onUpdate(item) : confirmWrapper(item)\r\n )}\r\n >\r\n <DialogContent classes={{ root: classes.contentRoot }}>\r\n {activity && (\r\n <div className={classes.listInfo}>\r\n <div className={classes.infoItem}>\r\n <LocationOnOutlinedIcon classes={{ root: classes.infoIcon }} />\r\n <Typography variant=\"body1\">\r\n {activity.generalForm.startingPoint}\r\n </Typography>\r\n </div>\r\n {bookRelatedActivityForm.values.maxParticipants >= 0 && (\r\n <div className={classes.infoItem}>\r\n <PeopleOutlineIcon classes={{ root: classes.infoIcon }} />\r\n <Typography variant=\"body1\">\r\n {bookRelatedActivityForm.values.maxParticipants}{' '}\r\n {t('Participants')}\r\n </Typography>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n <Field\r\n name=\"activity\"\r\n className={classes.inputIndent}\r\n list={relatedActivitiesForm.relatedActivities}\r\n field=\"title\"\r\n label=\"Activity *\"\r\n component={DropDown}\r\n />\r\n\r\n {activity && (\r\n <>\r\n {activity.scheduleType === SCHEDULE_DATE_NO_TIME_NAME && (\r\n <Field\r\n name=\"multiDates\"\r\n label=\"Starting date *\"\r\n availableRange={getAvailableRangeDates(activity)}\r\n disabledDates={getDisabledDates(\r\n availableParticipantsData,\r\n initialValues && initialValues.multiDates,\r\n activity\r\n )}\r\n changeMonthsCallback={changeMonthHandler}\r\n isInput={true}\r\n numberOfMonths={2}\r\n daySize={39}\r\n component={MultiDatePickerCalendar}\r\n cutoffData={activity[activity.scheduleType]}\r\n isStartDateRenderMonth={\r\n !!(initialValues && initialValues.multiDates)\r\n }\r\n />\r\n )}\r\n\r\n {activity.scheduleType === SCHEDULE_DATE_AND_TIME_NAME && (\r\n <Field\r\n name=\"startingDate\"\r\n label=\"Starting date *\"\r\n availableRange={getAvailableRangeDates(activity)}\r\n disabledDates={getDisabledDates(\r\n availableParticipantsData,\r\n initialValues && initialValues.startingDate,\r\n activity\r\n )}\r\n changeMonthsCallback={changeMonthHandler}\r\n isInput={true}\r\n numberOfMonths={2}\r\n daySize={39}\r\n component={SingleDatePicker}\r\n cutoffData={activity[activity.scheduleType]}\r\n isStartDateRenderMonth={\r\n !!(initialValues && initialValues.startingDate)\r\n }\r\n />\r\n )}\r\n\r\n {!!bookRelatedActivityForm.values.participants.length && (\r\n <>\r\n <Typography variant=\"body1\" className={classes.sectionTitle}>\r\n {t('Guests')} *\r\n </Typography>\r\n <FieldArray\r\n name=\"participants\"\r\n className={classes.participants}\r\n errorClassName={classes.participantsErrorMsg}\r\n isUpdatedParticipants={isUpdatedParticipants}\r\n component={NumberOfParticipants}\r\n currency={currency}\r\n />\r\n </>\r\n )}\r\n\r\n {activity.scheduleType === SCHEDULE_DATE_AND_TIME_NAME &&\r\n !!listStartTimeAndDuration.length && (\r\n <>\r\n <Typography\r\n variant=\"body1\"\r\n className={classes.smallSectionTitle}\r\n >\r\n {t('Start time & Duration')}\r\n </Typography>\r\n <Field\r\n name=\"startTime\"\r\n list={getStartTimeAndDuration()}\r\n component={RadioButtonsGroup}\r\n isId={true}\r\n checkboxTitleField=\"title\"\r\n radioGroupRootClass={classes.radioGroupRoot}\r\n />\r\n </>\r\n )}\r\n\r\n {!!bookRelatedActivityForm.values.addOns.length && (\r\n <>\r\n <Typography variant=\"body1\" className={classes.sectionTitle}>\r\n {t('Add-ons')}\r\n </Typography>\r\n <FieldArray\r\n name=\"addOns\"\r\n currency={currency}\r\n addOnDescClass={classes.addOnTitle}\r\n component={AddOnsList}\r\n />\r\n </>\r\n )}\r\n </>\r\n )}\r\n </DialogContent>\r\n\r\n <DialogActions classes={{ root: classes.actionsRoot }}>\r\n <Button\r\n onClick={onCancel}\r\n variant=\"outlined\"\r\n classes={{ root: classes.cancelBtnRoot }}\r\n >\r\n {t('Cancel')}\r\n </Button>\r\n <Button\r\n type=\"submit\"\r\n variant=\"outlined\"\r\n classes={{ root: classes.actionBtnRoot }}\r\n autoFocus\r\n >\r\n {t('Book')}\r\n </Button>\r\n </DialogActions>\r\n </form>\r\n </Dialog>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n bookRelatedActivityForm: state.form.bookRelatedActivityForm\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('bookRelatedActivityForm', field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'bookRelatedActivityForm',\r\n destroyOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(BookActivityDialog));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n price: {\r\n fontWeight: 'bold',\r\n fontSize: '14px'\r\n },\r\n pricesDailyItem: {\r\n marginBottom: '7px',\r\n '&:last-child': {\r\n marginBottom: 0\r\n }\r\n },\r\n checkInTime: {\r\n display: 'block',\r\n marginBottom: '3px'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport moment from 'moment';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport { SimpleExpansionPanel } from 'components';\r\n\r\nimport { currencyFormatter } from 'utils/prices/formatter';\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst INFO_LIST_FIELDS = [\r\n { title: 'Overview', field: 'overview' },\r\n { title: 'Prices' },\r\n { title: 'Check-in / Check-out', field: 'checkInTime' },\r\n { title: 'What to bring', field: 'whatToBring' },\r\n { title: 'Additional info', field: 'additionalInfo' },\r\n { title: 'Cancellation / Expiration', field: 'cancellation' },\r\n { title: 'Bed details', field: 'bedDetails' },\r\n { title: 'Included', field: 'included' },\r\n { title: 'Not included', field: 'notIncluded' }\r\n];\r\n\r\nconst INFO_ARRAY_FIELDS = [\r\n 'whatToBring',\r\n 'bedDetails',\r\n 'included',\r\n 'notIncluded'\r\n];\r\n\r\nconst BookInfoList = ({\r\n activity,\r\n isWithoutDescriptionForm,\r\n currency,\r\n defaultExpanded,\r\n firstDefaultExpanded,\r\n isOverview,\r\n isImage,\r\n titleTypographyVariant,\r\n panelDetailsClass\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n const list = [];\r\n\r\n const descForm = activity.descriptionForm;\r\n const descFormNorwegian = activity['descriptionForm-Norwegian'];\r\n const generalForm = activity.generalForm;\r\n const generalFormNorwegian = activity['generalForm-Norwegian'];\r\n\r\n INFO_LIST_FIELDS.map(item => {\r\n const fieldName = item.field;\r\n let itemField =\r\n selectedLanguage === 'Norway' && activity[`${fieldName}No`]\r\n ? activity[`${fieldName}No`]\r\n : activity[fieldName];\r\n\r\n if (!itemField || !itemField.length) {\r\n itemField = activity[fieldName];\r\n }\r\n\r\n let fieldValue = isWithoutDescriptionForm\r\n ? itemField\r\n : getFormByCurrentLanguage(selectedLanguage, descForm, descFormNorwegian)[\r\n item.field\r\n ];\r\n\r\n if (!fieldValue || !fieldValue.length) {\r\n fieldValue = isWithoutDescriptionForm\r\n ? itemField\r\n : getFormByCurrentLanguage('English', descForm, descFormNorwegian)[\r\n item.field\r\n ];\r\n }\r\n\r\n if (item.title === 'Bed details') {\r\n fieldValue = isWithoutDescriptionForm\r\n ? itemField\r\n : getFormByCurrentLanguage(\r\n selectedLanguage,\r\n generalForm,\r\n generalFormNorwegian\r\n )[item.field];\r\n if (!fieldName.length) {\r\n fieldValue = isWithoutDescriptionForm\r\n ? itemField\r\n : getFormByCurrentLanguage(\r\n 'English',\r\n generalForm,\r\n generalFormNorwegian\r\n )[item.field];\r\n }\r\n }\r\n\r\n if (item.title === 'Overview' && !isOverview) {\r\n return;\r\n }\r\n\r\n if (item.title === 'Prices') {\r\n fieldValue = _getPricesInfo(activity, currency);\r\n\r\n list.push({\r\n title: item.title,\r\n description: fieldValue\r\n });\r\n } else {\r\n if (fieldValue && fieldValue.length) {\r\n if (INFO_ARRAY_FIELDS.includes(item.field)) {\r\n fieldValue = fieldValue.join(', ');\r\n } else {\r\n fieldValue = fieldValue.trim();\r\n if (!fieldValue.length) return;\r\n }\r\n\r\n if (item.field === 'checkInTime') {\r\n const checkInTime = moment(fieldValue, 'HH:mm:ss').format('HH:mm');\r\n const checkoutValue = isWithoutDescriptionForm\r\n ? activity['checkOutTime']\r\n : activity.descriptionForm['checkOutTime'];\r\n const checkOutTime = moment(checkoutValue, 'HH:mm:ss').format(\r\n 'HH:mm'\r\n );\r\n fieldValue = (\r\n <>\r\n <span className={classes.checkInTime}>\r\n {t('Check-in')}: {checkInTime}\r\n </span>\r\n <span>\r\n {t('Check-out')}: {checkOutTime}\r\n </span>\r\n </>\r\n );\r\n }\r\n\r\n fieldValue = <Typography variant=\"body1\">{fieldValue}</Typography>;\r\n\r\n list.push({\r\n title: item.title,\r\n image: isImage ? generalForm.coverPhoto.image : null,\r\n description: fieldValue\r\n });\r\n }\r\n }\r\n });\r\n\r\n return (\r\n <SimpleExpansionPanel\r\n list={list}\r\n defaultExpanded={defaultExpanded}\r\n firstDefaultExpanded={firstDefaultExpanded}\r\n titleTypographyVariant={titleTypographyVariant}\r\n panelDetailsClass={panelDetailsClass}\r\n />\r\n );\r\n};\r\n\r\nconst _getPricePerDay = (item, currency) => {\r\n const classes = useStyles();\r\n const value = currencyFormatter(item[currency]);\r\n return (\r\n <Typography variant=\"body1\">\r\n {currency} <span className={classes.price}>{value}</span>\r\n </Typography>\r\n );\r\n};\r\n\r\nconst _getPricesInfo = (activity, currency) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const prices = activity[activity.pricesType];\r\n const isAccommodation = !activity.scheduleType;\r\n\r\n switch (activity.pricesType) {\r\n case 'pricesFixedForm': {\r\n if (activity.scheduleType === 'schedulePassForm' || isAccommodation) {\r\n const value = currencyFormatter(prices[currency]);\r\n return (\r\n <Typography variant=\"body1\">\r\n {currency} <span className={classes.price}>{value}</span>\r\n </Typography>\r\n );\r\n } else {\r\n return (\r\n <div>\r\n {prices?.days?.map((item, index) => (\r\n <div key={index} className={classes.pricesDailyItem}>\r\n <Typography variant=\"body1\">\r\n {item.days.map(\r\n (day, index) => `${index ? ',' : ''} ${t(day)}`\r\n )}\r\n </Typography>\r\n <Typography variant=\"body1\">\r\n {currency}{' '}\r\n <span className={classes.price}>\r\n {currencyFormatter(item[currency])}\r\n </span>\r\n </Typography>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n }\r\n }\r\n case 'pricesDailyForm': {\r\n return (\r\n <div>\r\n {prices?.days?.map((item, index) => {\r\n return (\r\n <div key={index} className={classes.pricesDailyItem}>\r\n <Typography variant=\"body1\">{t(item.day)}</Typography>\r\n {item.categories &&\r\n item.categories.map((category, index) => {\r\n const value = currencyFormatter(category[currency]);\r\n return (\r\n <Typography variant=\"body1\" key={index}>\r\n {currency}{' '}\r\n <span className={classes.price}>{value}</span> ×{' '}\r\n {category.participant === 'Universal'\r\n ? (category.participant = t('Person'))\r\n : t(category.participant)}\r\n </Typography>\r\n );\r\n })}\r\n {!item.categories && item.day && (\r\n <div key={index}>{_getPricePerDay(item, currency)}</div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n }\r\n case 'pricesDailyScheduleForm': {\r\n return (\r\n <div>\r\n {prices?.daysArray?.map((item, index) => {\r\n return (\r\n <div key={index} className={classes.pricesDailyItem}>\r\n <Typography variant=\"body1\">\r\n {item.days.map(\r\n (day, index) => `${index ? ',' : ''} ${t(day)}`\r\n )}\r\n </Typography>\r\n {item.categories.map((category, index) => {\r\n const value = currencyFormatter(category[currency]);\r\n return (\r\n <Typography variant=\"body1\" key={index}>\r\n {currency} <span className={classes.price}>{value}</span>{' '}\r\n ×{' '}\r\n {category.participant === 'Universal'\r\n ? (category.participant = t('Person'))\r\n : t(category.participant)}\r\n </Typography>\r\n );\r\n })}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n }\r\n case 'pricesCategoryForm':\r\n case 'pricesEqualForm': {\r\n return (\r\n <div>\r\n {prices?.categories?.map((item, index) => {\r\n const value = currencyFormatter(item[currency]);\r\n return (\r\n <Typography variant=\"body1\" key={index}>\r\n {currency} <span className={classes.price}>{value}</span> ×{' '}\r\n {item.participant === 'Universal'\r\n ? (item.participant = t('Person'))\r\n : t(item.participant)}\r\n </Typography>\r\n );\r\n })}\r\n </div>\r\n );\r\n }\r\n }\r\n};\r\n\r\nexport default BookInfoList;\r\n","import gql from 'graphql-tag';\r\n\r\nexport const ACTIVITY_BOOKING = gql`\r\n query activitiesBookings(\r\n $activityBookingId: Int\r\n $businessOwnerId: Int\r\n $token: String\r\n ) {\r\n activitiesBookings(\r\n activityBookingId: $activityBookingId\r\n businessOwnerId: $businessOwnerId\r\n token: $token\r\n ) {\r\n id\r\n activity {\r\n id\r\n title\r\n photo\r\n productCode\r\n isOpen\r\n minParticipants\r\n maxParticipants\r\n startingPoint\r\n pricesType\r\n scheduleType\r\n cancellation\r\n cancellationNo\r\n prices {\r\n id\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n days\r\n value\r\n }\r\n \r\n activitybookingSet {\r\n deactivationBooking\r\n id\r\n isCanceled\r\n }\r\n }\r\n isCanceled\r\n guestFirstName\r\n guestLastName\r\n guestPhoneNumber\r\n guestEmail\r\n platform\r\n startingDate\r\n endingDate\r\n schedule\r\n payments {\r\n id\r\n paymentType\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n bookedAddOns {\r\n id\r\n addOn {\r\n id\r\n title\r\n titleNo\r\n description\r\n descriptionNo\r\n prices {\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n value\r\n }\r\n }\r\n currency {\r\n currency\r\n }\r\n addOnCount\r\n totalPrice\r\n }\r\n guests {\r\n participant {\r\n participant\r\n }\r\n guestsNumber\r\n totalPrice\r\n }\r\n\r\n relatedAccommodationBooking {\r\n id\r\n accommodation {\r\n id\r\n title\r\n titleNo\r\n guestsNumber\r\n prices {\r\n id\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n value\r\n day\r\n }\r\n }\r\n platform\r\n fromDate\r\n toDate\r\n payments {\r\n paymentType\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n bookedAddOns {\r\n id\r\n addOn {\r\n id\r\n title\r\n titleNo\r\n description\r\n descriptionNo\r\n prices {\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n value\r\n }\r\n }\r\n currency {\r\n currency\r\n }\r\n addOnCount\r\n totalPrice\r\n }\r\n bookedMandatoryFees {\r\n id\r\n mandatoryFee {\r\n id\r\n title\r\n titleNo\r\n description\r\n descriptionNo\r\n prices {\r\n currency {\r\n currency\r\n }\r\n value\r\n }\r\n }\r\n currency {\r\n currency\r\n }\r\n mandatoryFeeCount\r\n totalPrice\r\n }\r\n guests {\r\n participant {\r\n participant\r\n }\r\n guestsNumber\r\n totalPrice\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\nimport { useQuery } from '@apollo/react-hooks';\r\n\r\nimport { ACTIVITY } from 'graphql/queries/activities';\r\n\r\nimport {\r\n ACTIVITY_SCHEDULE_FORMS_NUMBERS,\r\n ACTIVITY_PRICES_FORMS_NUMBERS\r\n} from 'pages/create-activity/constants';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport { getReceivedActivityData } from 'utils/accommodations-and-activities/prepareReceivedActivityData';\r\nimport { ACTIVITY_BOOK_DATES } from '../../graphql/queries/activities-bookings';\r\nimport { getRange } from '../../utils/book-accommodation/availableDates';\r\n\r\nconst UpdateActivityWrapper = ({ children, businessOwner }) => {\r\n const { id } = useParams();\r\n const confirm = React.useContext(ConfirmContext);\r\n const history = useHistory();\r\n\r\n const { loading, error, data, refetch, networkStatus } = useQuery(ACTIVITY, {\r\n variables: {\r\n activityId: id,\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n },\r\n notifyOnNetworkStatusChange: true\r\n });\r\n\r\n React.useEffect(() => {\r\n refetch();\r\n }, []);\r\n\r\n const isCopy = () => {\r\n return window.location.href.search('/copy') >= 0;\r\n };\r\n\r\n if (loading || networkStatus === 4) {\r\n return (\r\n <div style={{ height: '100%' }}>\r\n {React.cloneElement(children, {\r\n loading: true,\r\n isCopy: isCopy(),\r\n bookDates: []\r\n })}\r\n </div>\r\n );\r\n }\r\n\r\n if (error || !data.activities.length) {\r\n if (\r\n businessOwner &&\r\n businessOwner.selectedBusinessOwner.hasOwnProperty('id')\r\n ) {\r\n confirm({\r\n title: 'Activity does not exist!',\r\n confirmationText: 'Back'\r\n })\r\n .then(() => history.push('/accommodations-and-activities'))\r\n .catch(() => {});\r\n }\r\n\r\n return (\r\n <div style={{ height: '100%' }}>\r\n {React.cloneElement(children, {\r\n loading: false,\r\n isCopy: isCopy(),\r\n bookDates: []\r\n })}\r\n </div>\r\n );\r\n }\r\n\r\n const activity = data.activities[0];\r\n const initialData = getReceivedActivityData(activity);\r\n\r\n const scheduleActiveSubTabNumber =\r\n ACTIVITY_SCHEDULE_FORMS_NUMBERS[activity.scheduleType];\r\n let pricesActiveSubTabNumber =\r\n ACTIVITY_PRICES_FORMS_NUMBERS[scheduleActiveSubTabNumber][\r\n activity.pricesType\r\n ];\r\n\r\n if (activity.isOpen) pricesActiveSubTabNumber--;\r\n\r\n return (\r\n <div style={{ height: '100%' }}>\r\n {React.cloneElement(children, {\r\n data: initialData,\r\n scheduleActiveSubTabNumber,\r\n pricesActiveSubTabNumber,\r\n loading: false,\r\n isCopy: isCopy(),\r\n bookDates:\r\n activity?.activitybookingSet.reduce(\r\n (\r\n acc,\r\n { startingDate, endingDate, isCanceled, deactivationBooking }\r\n ) => {\r\n if (startingDate && endingDate && !isCanceled) {\r\n return [\r\n ...acc,\r\n ...getRange(startingDate, endingDate).map(date => ({\r\n date,\r\n deactivationBooking\r\n }))\r\n ];\r\n }\r\n\r\n return acc;\r\n },\r\n []\r\n ) || []\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(UpdateActivityWrapper);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\nimport { useQuery } from '@apollo/react-hooks';\r\n\r\nimport { ACCOMMODATION, BOOK_DATES } from 'graphql/queries/accommodations';\r\n\r\nimport { ACCOMMODATION_PRICES_FORMS_NUMBERS } from 'pages/create-accommodation/constants';\r\n\r\nimport { getReceivedAccommodationData } from 'utils/accommodations-and-activities/prepareReceivedAccommodationData';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\nimport moment from 'moment';\r\n\r\nconst UpdateAccommodationWrapper = ({ children, businessOwner }) => {\r\n const { id } = useParams();\r\n const confirm = React.useContext(ConfirmContext);\r\n const history = useHistory();\r\n\r\n const { loading, error, data, refetch, networkStatus } = useQuery(\r\n ACCOMMODATION,\r\n {\r\n variables: {\r\n accommodationId: id,\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n },\r\n notifyOnNetworkStatusChange: true\r\n }\r\n );\r\n\r\n const bookDates = useQuery(BOOK_DATES, {\r\n variables: {\r\n accommodationId: id,\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id,\r\n startPeriod: moment()\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment().add(6, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n },\r\n notifyOnNetworkStatusChange: true\r\n });\r\n\r\n React.useEffect(() => {\r\n refetch();\r\n bookDates.refetch();\r\n }, []);\r\n\r\n const isCopy = () => {\r\n return window.location.href.search('/copy') >= 0;\r\n };\r\n\r\n if (\r\n loading ||\r\n bookDates.loading ||\r\n networkStatus === 4 ||\r\n bookDates.networkStatus === 4\r\n ) {\r\n return (\r\n <div style={{ height: '100%' }}>\r\n {React.cloneElement(children, {\r\n loading: true,\r\n isCopy: isCopy(),\r\n bookDates: []\r\n })}\r\n </div>\r\n );\r\n }\r\n\r\n if (error || !data.accommodations.length) {\r\n if (\r\n businessOwner &&\r\n businessOwner.selectedBusinessOwner.hasOwnProperty('id')\r\n ) {\r\n confirm({\r\n title: 'Accommodation does not exist!',\r\n confirmationText: 'Back'\r\n })\r\n .then(() => history.push('/accommodations-and-activities'))\r\n .catch(() => {});\r\n }\r\n\r\n return (\r\n <div style={{ height: '100%' }}>\r\n {React.cloneElement(children, {\r\n loading: false,\r\n isCopy: isCopy(),\r\n bookDates: []\r\n })}\r\n </div>\r\n );\r\n }\r\n\r\n const accommodation = data.accommodations[0];\r\n const initialData = getReceivedAccommodationData(accommodation);\r\n let pricesActiveSubTabNumber =\r\n ACCOMMODATION_PRICES_FORMS_NUMBERS.pricesFixedForm;\r\n\r\n if (accommodation.prices[0].participant.participant) {\r\n pricesActiveSubTabNumber =\r\n ACCOMMODATION_PRICES_FORMS_NUMBERS.pricesCategoryForm;\r\n }\r\n\r\n if (accommodation.prices[0].day) {\r\n pricesActiveSubTabNumber =\r\n ACCOMMODATION_PRICES_FORMS_NUMBERS.pricesDailyForm;\r\n }\r\n\r\n return (\r\n <div style={{ height: '100%' }}>\r\n {React.cloneElement(children, {\r\n data: initialData,\r\n pricesActiveSubTabNumber,\r\n loading: false,\r\n isCopy: isCopy(),\r\n bookDates: bookDates.data?.accommodations?.[0]?.bookedDates || []\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(UpdateAccommodationWrapper);\r\n","import moment from 'moment';\r\nimport icalendar from 'icalendar';\r\n\r\nconst getReceivedParticipant = (\r\n participants,\r\n currency,\r\n relatedParticipants\r\n) => {\r\n return participants\r\n .map(participant => {\r\n const participantName = participant.participant[0]\r\n ? participant.participant[0].participant\r\n : null;\r\n\r\n const existedParticipant = relatedParticipants.find(\r\n activityParticipant => {\r\n if (participantName === activityParticipant.participant) {\r\n return activityParticipant;\r\n }\r\n return false;\r\n }\r\n );\r\n\r\n if (!existedParticipant) return false;\r\n\r\n return {\r\n ...existedParticipant,\r\n participants: `${participant.guestsNumber}`\r\n };\r\n })\r\n .filter(item => item);\r\n};\r\n\r\nconst getReceivedAddOns = addOns => {\r\n return addOns.map(item => {\r\n const originalAddOn = item.addOn[0];\r\n let prices = {\r\n NOK: '0',\r\n EUR: '0',\r\n USD: '0'\r\n };\r\n if (originalAddOn.prices) {\r\n originalAddOn.prices.map(item => {\r\n prices[item.currency.currency] = item.value;\r\n });\r\n }\r\n let norwegianFields = {};\r\n if (originalAddOn.titleNo) {\r\n norwegianFields = {\r\n Norwegian: {\r\n title: originalAddOn.titleNo,\r\n description: originalAddOn.descriptionNo\r\n }\r\n };\r\n }\r\n return {\r\n originalId: parseInt(item.id),\r\n id: parseInt(originalAddOn.id),\r\n title: originalAddOn.title,\r\n description: originalAddOn.description,\r\n ...norwegianFields,\r\n ...prices,\r\n value: item.addOnCount\r\n };\r\n });\r\n};\r\n\r\nconst getReceivedMandatoryFees = mandatoryFees => {\r\n return mandatoryFees?.map(item => {\r\n const originalMandatoryFee = item.mandatoryFee[0];\r\n let prices = {\r\n NOK: '0',\r\n EUR: '0',\r\n USD: '0'\r\n };\r\n if (originalMandatoryFee.prices) {\r\n originalMandatoryFee.prices.map(item => {\r\n prices[item.currency.currency] = item.value;\r\n });\r\n }\r\n let norwegianFields = {};\r\n if (originalMandatoryFee.titleNo) {\r\n norwegianFields = {\r\n Norwegian: {\r\n title: originalMandatoryFee.titleNo,\r\n description: originalMandatoryFee.descriptionNo\r\n }\r\n };\r\n }\r\n return {\r\n originalId: parseInt(item.id),\r\n id: parseInt(originalMandatoryFee.id),\r\n title: originalMandatoryFee.title,\r\n description: originalMandatoryFee.description,\r\n ...norwegianFields,\r\n ...prices,\r\n value: item.mandatoryFeeCount\r\n };\r\n });\r\n};\r\n\r\n\r\nconst getReceivedSchedule = schedule => {\r\n if (!schedule) return {};\r\n\r\n const data = icalendar.parse_calendar(schedule).components.VEVENT[0]\r\n .properties;\r\n\r\n const startTime = {\r\n startTime: moment(data.START_TIME[0].value, 'HH:mm:ss').format('HH:mm'),\r\n duration: data.DURATION_[0].value,\r\n timeType: data.TIME_TYPE[0].value\r\n };\r\n\r\n return {\r\n startTime: {\r\n id: `${startTime.startTime}-${startTime.duration}-${startTime.timeType}`,\r\n ...startTime\r\n }\r\n };\r\n};\r\n\r\nexport { getReceivedParticipant, getReceivedAddOns , getReceivedSchedule, getReceivedMandatoryFees };\r\n","import moment from 'moment';\r\n\r\nimport { getPrices as getActivityPrices } from 'utils/accommodations-and-activities/prepareReceivedActivityData';\r\nimport { getPrices as getAccommodationPrices } from 'utils/accommodations-and-activities/prepareReceivedAccommodationData';\r\nimport { getParticipants as getActivityParticipants } from 'utils/book-activity/prepareParticipants';\r\nimport { getParticipants as getAccommodationParticipants } from 'utils/book-accommodation/prepareParticipants';\r\nimport {\r\n getReceivedAddOns,\r\n getReceivedMandatoryFees,\r\n getReceivedParticipant,\r\n getReceivedSchedule\r\n} from 'utils/book-accommodation-and-activity/prepareReceivedDataMethods';\r\n\r\nconst FIXED_PRICES = 'pricesFixedForm';\r\nconst CATEGORY_PRICES = 'pricesCategoryForm';\r\nconst DAILY_PRICES = 'pricesDailyForm';\r\n\r\nconst getReceivedBookedAccommodationData = data => {\r\n const payment = data.payments[0];\r\n const currency = payment.currency.currency;\r\n\r\n const pricesObj = getAccommodationPrices(data.accommodation);\r\n let accommodation = {\r\n ...data.accommodation,\r\n ...pricesObj\r\n };\r\n\r\n if (accommodation.prices[0].participant.participant) {\r\n accommodation['pricesType'] = CATEGORY_PRICES;\r\n } else if (accommodation.prices[0].day) {\r\n accommodation['pricesType'] = DAILY_PRICES;\r\n } else {\r\n accommodation['pricesType'] = FIXED_PRICES;\r\n }\r\n\r\n const dates = {\r\n startDate: moment(data.fromDate, 'YYYY-MM-DD'),\r\n endDate: moment(data.toDate, 'YYYY-MM-DD')\r\n };\r\n\r\n const accommodationParticipants = getAccommodationParticipants(\r\n accommodation,\r\n currency,\r\n null,\r\n dates\r\n );\r\n\r\n return {\r\n id: parseInt(data.id),\r\n accommodationId: parseInt(data.accommodation.id),\r\n firstName: data.guestFirstName,\r\n lastName: data.guestLastName,\r\n phone: data.guestPhoneNumber,\r\n email: data.guestEmail,\r\n platform: data.platform,\r\n pay: {\r\n 'Pay on arrival': true\r\n },\r\n dates: dates,\r\n maxParticipants: data.accommodation.guestsNumber,\r\n currency: currency,\r\n paymentId: parseInt(payment.id),\r\n addOns: getReceivedAddOns(data.bookedAddOns),\r\n mandatoryFees: getReceivedMandatoryFees(data.bookedMandatoryFees),\r\n participants: getReceivedParticipant(\r\n data.guests,\r\n currency,\r\n accommodationParticipants\r\n ),\r\n activities: _getReceivedRelatedActivities(\r\n data.relatedActivitiesBookings,\r\n currency\r\n )\r\n };\r\n};\r\n\r\nconst _getReceivedRelatedActivities = (relatedActivitiesBookings, currency) => {\r\n return relatedActivitiesBookings.map(item => {\r\n const payment = item.payments[0];\r\n const startingDate = item.startingDate\r\n ? moment(item.startingDate, 'YYYY-MM-DD')\r\n : null;\r\n const endingDate = item.endingDate\r\n ? moment(item.endingDate, 'YYYY-MM-DD')\r\n : null;\r\n\r\n const pricesObj = getActivityPrices(item.activity);\r\n const activity = {\r\n ...item.activity,\r\n ...pricesObj\r\n };\r\n const participantData = {\r\n values: { currency: currency, startingDate: startingDate }\r\n };\r\n\r\n const activityParticipants = getActivityParticipants(\r\n activity,\r\n participantData,\r\n () => {},\r\n false\r\n );\r\n\r\n const norwegianFields = {};\r\n if (item.activity.titleNo) {\r\n norwegianFields.title = item.activity.titleNo;\r\n }\r\n\r\n const dates = {};\r\n\r\n if (startingDate && endingDate) {\r\n dates.multiDates = {\r\n startDate: startingDate,\r\n endDate: endingDate\r\n };\r\n dates.startingDate = null;\r\n } else {\r\n dates.startingDate = startingDate;\r\n }\r\n\r\n return {\r\n id: parseInt(item.id),\r\n activity: parseInt(item.activity.id),\r\n title: item.activity.title,\r\n Norwegian: norwegianFields,\r\n platform: item.platform,\r\n currency: currency,\r\n paymentId: parseInt(payment.id),\r\n addOns: getReceivedAddOns(item.bookedAddOns),\r\n mandatoryFees:getReceivedMandatoryFees(item.bookedMandatoryFees),\r\n participants: getReceivedParticipant(\r\n item.guests,\r\n currency,\r\n activityParticipants\r\n ),\r\n ...getReceivedSchedule(item.schedule),\r\n ...dates\r\n };\r\n });\r\n};\r\n\r\nexport { getReceivedBookedAccommodationData };\r\n","import gql from 'graphql-tag';\r\n\r\nexport const ACCOMMODATION_BOOKING = gql`\r\n query accommodationsBookings(\r\n $accommodationBookingId: Int\r\n $businessOwnerId: Int\r\n $token: String\r\n ) {\r\n accommodationsBookings(\r\n accommodationBookingId: $accommodationBookingId\r\n businessOwnerId: $businessOwnerId\r\n token: $token\r\n ) {\r\n id\r\n accommodation {\r\n id\r\n title\r\n photo\r\n productCode\r\n location\r\n guestsNumber\r\n fromDate\r\n toDate\r\n checkInTime\r\n checkOutTime\r\n cancellation\r\n cancellationNo\r\n bedDetails\r\n prices {\r\n id\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n value\r\n day\r\n }\r\n \r\n accommodationbookingSet {\r\n deactivationBooking\r\n id\r\n toDate\r\n fromDate\r\n isCanceled\r\n }\r\n }\r\n guestFirstName\r\n guestLastName\r\n guestPhoneNumber\r\n guestEmail\r\n platform\r\n fromDate\r\n toDate\r\n isCanceled\r\n payments {\r\n id\r\n paymentType\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n bookedAddOns {\r\n id\r\n addOn {\r\n id\r\n title\r\n description\r\n prices {\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n value\r\n }\r\n }\r\n currency {\r\n currency\r\n }\r\n addOnCount\r\n totalPrice\r\n }\r\n bookedMandatoryFees {\r\n id\r\n mandatoryFee {\r\n id\r\n title\r\n description\r\n prices {\r\n currency {\r\n currency\r\n }\r\n value\r\n }\r\n }\r\n currency {\r\n currency\r\n }\r\n mandatoryFeeCount\r\n totalPrice\r\n } \r\n guests {\r\n participant {\r\n participant\r\n }\r\n guestsNumber\r\n totalPrice\r\n }\r\n\r\n relatedActivitiesBookings {\r\n id\r\n activity {\r\n id\r\n title\r\n titleNo\r\n pricesType\r\n scheduleType\r\n prices {\r\n id\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n days\r\n value\r\n }\r\n }\r\n platform\r\n payments {\r\n paymentType\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n startingDate\r\n endingDate\r\n schedule\r\n bookedAddOns {\r\n id\r\n addOn {\r\n id\r\n title\r\n titleNo\r\n description\r\n descriptionNo\r\n prices {\r\n participant {\r\n participant\r\n }\r\n currency {\r\n currency\r\n }\r\n value\r\n }\r\n }\r\n currency {\r\n currency\r\n }\r\n addOnCount\r\n totalPrice\r\n }\r\n guests {\r\n participant {\r\n participant\r\n }\r\n guestsNumber\r\n totalPrice\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n","import gql from 'graphql-tag';\r\n\r\nexport const CREATE_ACCOMMODATION_BOOKING = gql`\r\n mutation createAccommodationBooking(\r\n $accommodationBooking: AccommodationBookingInput!\r\n $activitiesBookings: [ActivityBookingInput]\r\n ) {\r\n createAccommodationBooking(\r\n accommodationBooking: $accommodationBooking\r\n activitiesBookings: $activitiesBookings\r\n ) {\r\n id\r\n clientSecret\r\n nextActionUrl\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_ACCOMMODATION_BOOKING = gql`\r\n mutation updateAccommodationBooking(\r\n $accommodationBooking: AccommodationBookingInput!\r\n $activitiesBookings: [ActivityBookingInput]\r\n $deletedActivityBookings: [Int]\r\n ) {\r\n updateAccommodationBooking(\r\n accommodationBooking: $accommodationBooking\r\n activitiesBookings: $activitiesBookings\r\n deletedActivityBookings: $deletedActivityBookings\r\n ) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_ACTIVITY_BOOKING = gql`\r\n mutation updateActivityBooking($activityBooking: ActivityBookingInput!) {\r\n updateActivityBooking(activityBooking: $activityBooking) {\r\n id\r\n }\r\n }\r\n`;\r\n","const getListOfAvailableCurrencies = prices => {\r\n const availableCurrencies = {\r\n NOK: false,\r\n EUR: false,\r\n USD: false\r\n };\r\n const listOfAvailableCurrencies = [];\r\n\r\n prices.map(item => {\r\n if (parseFloat(item.value) > 0) {\r\n availableCurrencies[item.currency.currency] = true;\r\n }\r\n });\r\n\r\n Object.keys(availableCurrencies).map(key => {\r\n if (availableCurrencies[key]) {\r\n listOfAvailableCurrencies.push(key);\r\n }\r\n });\r\n\r\n return listOfAvailableCurrencies;\r\n};\r\n\r\nexport { getListOfAvailableCurrencies };\r\n","const getSummeryPriceForActivitySeveralDays = (multiDates, summery) => {\r\n if (multiDates && multiDates.startDate && multiDates.endDate) {\r\n const diffDays = multiDates.endDate.diff(multiDates.startDate, 'days') + 1;\r\n return summery * diffDays;\r\n }\r\n\r\n return summery;\r\n};\r\n\r\nconst getTotalPrice = (\r\n activity,\r\n dates,\r\n participants,\r\n addOns,\r\n mandatoryFees,\r\n relatedItems,\r\n currency,\r\n activityMultiDates\r\n) => {\r\n let total = 0;\r\n\r\n participants.map(item => {\r\n if (!item.participants || !parseInt(item.participants)) return;\r\n if (\r\n (activity.relatedActivitiesForm || activity.isAccommodation) &&\r\n activity.pricesType === 'pricesDailyForm'\r\n ) {\r\n total += item[currency];\r\n } else if (\r\n activity.pricesType === 'pricesFixedForm' ||\r\n activity.pricesType === 'pricesCategoryForm'\r\n ) {\r\n if (dates && dates.startDate && dates.endDate) {\r\n const isParticipants = activity.pricesType === 'pricesCategoryForm';\r\n total += getTotalFixedPricesPerDay(\r\n dates,\r\n item[currency],\r\n item,\r\n isParticipants,\r\n activity.isAccommodation,\r\n activity.pricesType\r\n );\r\n } else {\r\n total += parseFloat(item[currency]);\r\n }\r\n } else {\r\n total += item[currency] * parseInt(item.participants);\r\n }\r\n });\r\n\r\n if (!activity.isAccommodation) {\r\n total = getSummeryPriceForActivitySeveralDays(activityMultiDates, total);\r\n }\r\n\r\n if (addOns) {\r\n addOns.map(item => {\r\n if (!item.value || !parseInt(item.value)) return;\r\n total += parseInt(item.value) * item[currency];\r\n });\r\n }\r\n\r\n if (mandatoryFees) {\r\n mandatoryFees.map(item => {\r\n if (!item[currency]) return;\r\n total += parseFloat(item[currency]);\r\n });\r\n }\r\n\r\n total += getTotalRelatedItems(\r\n relatedItems,\r\n currency,\r\n activity.isAccommodation\r\n );\r\n\r\n return parseFloat(total.toFixed(2));\r\n};\r\n\r\nconst getTotalRelatedItems = (items, currency) => {\r\n let total = 0;\r\n\r\n items.map(item => {\r\n let itemTotal = 0;\r\n if (!item.participants) return;\r\n item.participants.map(participant => {\r\n if (!participant.participants || !parseInt(participant.participants))\r\n return;\r\n if (\r\n (item.accommodation || !item.scheduleType) &&\r\n item.pricesType === 'pricesDailyForm'\r\n ) {\r\n itemTotal += participant[currency];\r\n } else if (\r\n item.pricesType === 'pricesFixedForm' ||\r\n item.pricesType === 'pricesCategoryForm'\r\n ) {\r\n if (item.dates && item.dates.startDate && item.dates.endDate) {\r\n const isParticipants = item.pricesType === 'pricesCategoryForm';\r\n itemTotal += getTotalFixedPricesPerDay(\r\n item.dates,\r\n participant[currency],\r\n participant,\r\n isParticipants,\r\n item.accommodation,\r\n item.pricesType\r\n );\r\n } else {\r\n itemTotal += parseFloat(participant[currency]);\r\n }\r\n } else {\r\n itemTotal += participant[currency] * parseInt(participant.participants);\r\n }\r\n });\r\n\r\n if (!item.isAccommodation) {\r\n total += getSummeryPriceForActivitySeveralDays(\r\n item.multiDates,\r\n itemTotal\r\n );\r\n } else {\r\n total += itemTotal;\r\n }\r\n\r\n if (!item.addOns) return;\r\n item.addOns.map(item => {\r\n if (!item.value || !parseInt(item.value)) return;\r\n total += parseInt(item.value) * item[currency];\r\n });\r\n\r\n if (!item.mandatoryFees) return;\r\n item.mandatoryFees.map(item => {\r\n if ( !item[currency]) return;\r\n total += parseFloat (item[currency]);\r\n });\r\n });\r\n\r\n return parseFloat(total.toFixed(2));\r\n};\r\n\r\nconst getTotalFixedPricesPerDay = (dates, price, item, isParticipants, isAccommodation, pricesTypes) => {\r\n const FIXED_PRICES = 'pricesFixedForm';\r\n const nights = dates.endDate.diff(dates.startDate, 'days');\r\n const participants = isParticipants ? item.participants : 1;\r\n if(!isAccommodation && pricesTypes === FIXED_PRICES) // setting nights to 1 for fixed price activity\r\n return parseFloat(`${parseInt(1) * parseFloat(price) * participants}`);\r\n return parseFloat(`${parseInt(nights) * parseFloat(price) * participants}`);\r\n};\r\n\r\nexport {\r\n getSummeryPriceForActivitySeveralDays,\r\n getTotalPrice,\r\n getTotalRelatedItems,\r\n getTotalFixedPricesPerDay\r\n};\r\n","import moment from 'moment';\r\n\r\nimport { getTotalFixedPricesPerDay } from 'utils/book-accommodation-and-activity/totalPrice';\r\n\r\nconst getAddOns = (bookItem, currency) => {\r\n if (!bookItem.addOns || !bookItem.addOns.length) return {};\r\n\r\n return {\r\n addOns: bookItem.addOns\r\n .map(item => {\r\n if (!item.value || !parseInt(item.value)) return;\r\n const totalPrice = `${item.value * item[currency]}`;\r\n const originalIdObj = item.originalId ? { id: item.originalId } : {};\r\n return {\r\n ...originalIdObj,\r\n addOnId: item.id,\r\n currency: currency,\r\n addOnCount: parseInt(item.value),\r\n totalPrice: parseFloat(totalPrice.split(',').join(''))\r\n };\r\n })\r\n .filter(item => item)\r\n };\r\n};\r\n\r\nconst getMandatoryFees = (bookItem, currency) => {\r\n if (!bookItem.mandatoryFees || !bookItem.mandatoryFees.length) return {};\r\n\r\n return {\r\n mandatoryFees: bookItem.mandatoryFees\r\n .map(item => {\r\n // if (!item.value || !parseInt(item.value)) return;\r\n const totalPrice = `${item[currency]}`;\r\n const originalIdObj = item.originalId ? { id: item.originalId } : {};\r\n return {\r\n ...originalIdObj,\r\n mandatoryFeeId: item.id,\r\n currency: currency,\r\n mandatoryFeeCount: parseInt(0),\r\n totalPrice: parseFloat(totalPrice.split(',').join(''))\r\n };\r\n })\r\n .filter(item => item)\r\n };\r\n};\r\n\r\nconst getGuests = (bookItem, pricesType, currency, isAccommodation) => {\r\n if (!bookItem.participants || !bookItem.participants.length) return {};\r\n\r\n return {\r\n guests: bookItem.participants\r\n .map(item => {\r\n if (!item.participants || !parseInt(item.participants)) return;\r\n let totalPrice = `${item.participants * item[currency]}`;\r\n if (\r\n (bookItem.accommodationId || isAccommodation) &&\r\n pricesType === 'pricesDailyForm'\r\n ) {\r\n totalPrice = `${item[currency]}`;\r\n } else if (\r\n pricesType === 'pricesFixedForm' ||\r\n pricesType === 'pricesCategoryForm'\r\n ) {\r\n if (\r\n bookItem.dates &&\r\n bookItem.dates.startDate &&\r\n bookItem.dates.endDate\r\n ) {\r\n const isParticipants = pricesType === 'pricesCategoryForm';\r\n totalPrice = `${getTotalFixedPricesPerDay(\r\n bookItem.dates,\r\n item[currency],\r\n item,\r\n isParticipants,\r\n isAccommodation,\r\n pricesType\r\n )}`;\r\n } else {\r\n totalPrice = item[currency];\r\n }\r\n }\r\n return {\r\n participant: item.participant,\r\n guestsNumber: parseInt(item.participants),\r\n totalPrice: parseFloat(totalPrice.split(',').join(''))\r\n };\r\n })\r\n .filter(item => item)\r\n };\r\n};\r\n\r\nconst getStartingDate = bookItem => {\r\n if (!bookItem.startingDate && !bookItem.multiDates) return {};\r\n if (!bookItem.startingDate)\r\n return {\r\n startingDate: moment(bookItem.multiDates.startDate).format('YYYY-MM-DD'),\r\n endingDate: bookItem.multiDates.endDate ? moment(bookItem.multiDates.endDate).format('YYYY-MM-DD') : null\r\n };\r\n else\r\n return {\r\n startingDate: moment(bookItem.startingDate).format('YYYY-MM-DD')\r\n };\r\n};\r\n\r\nconst getSchedule = bookItem => {\r\n if (!bookItem.startTime) return {};\r\n\r\n return {\r\n schedule: {\r\n startTime: moment(bookItem.startTime.startTime, 'HH:mm').format(\r\n 'HH:mm:ssZZ'\r\n ),\r\n duration: parseInt(bookItem.startTime.duration),\r\n timeType: bookItem.startTime.timeType\r\n }\r\n };\r\n};\r\n\r\nexport { getAddOns, getMandatoryFees, getGuests, getStartingDate, getSchedule };\r\n","import moment from 'moment';\r\n\r\nimport {\r\n getTotalPrice,\r\n getTotalRelatedItems\r\n} from 'utils/book-accommodation-and-activity/totalPrice';\r\nimport {\r\n getAddOns,\r\n getMandatoryFees,\r\n getGuests,\r\n getSchedule,\r\n getStartingDate\r\n} from 'utils/book-accommodation-and-activity/prepareBookDataMethods';\r\n\r\nconst getPreparedBookAccommodationData = (\r\n accommodation,\r\n bookAccommodationForm,\r\n deletedRelatedActivities,\r\n isWidget,\r\n stripeToken,\r\n payPalOrderId\r\n) => {\r\n const bookAccommodation = bookAccommodationForm.values;\r\n const adminPlatform = bookAccommodation.platform\r\n ? bookAccommodation.platform\r\n : 'Admin panel';\r\n const platform = isWidget ? 'Widget' : adminPlatform;\r\n const idObj = bookAccommodation.id ? { id: bookAccommodation.id } : {};\r\n const paymentIdObj = bookAccommodation.paymentId\r\n ? { id: bookAccommodation.paymentId }\r\n : {};\r\n\r\n let paymentType = 'CASH';\r\n if (stripeToken) paymentType = 'STRIPE';\r\n if (payPalOrderId) paymentType = 'PAYPAL';\r\n\r\n return {\r\n accommodationBooking: {\r\n ...idObj,\r\n accommodationId: accommodation.generalForm.id,\r\n guestFirstName: bookAccommodation.firstName,\r\n guestLastName: bookAccommodation.lastName,\r\n guestPhoneNumber: bookAccommodation.phone,\r\n guestEmail: bookAccommodation.email,\r\n platform: platform,\r\n fromDate: moment(bookAccommodation.dates.startDate).format('YYYY-MM-DD'),\r\n toDate: moment(bookAccommodation.dates.endDate).format('YYYY-MM-DD'),\r\n payment: {\r\n ...paymentIdObj,\r\n paymentType: paymentType,\r\n stripeToken: stripeToken,\r\n payPalOrderId: payPalOrderId,\r\n currency: bookAccommodation.currency,\r\n totalPrice: getTotalPrice(\r\n accommodation,\r\n bookAccommodation.dates,\r\n bookAccommodation.participants,\r\n bookAccommodation.addOns,\r\n bookAccommodation.mandatoryFees,\r\n bookAccommodation.activities,\r\n bookAccommodation.currency\r\n )\r\n },\r\n ...getAddOns(bookAccommodation, bookAccommodation.currency),\r\n ...getMandatoryFees(bookAccommodation, bookAccommodation.currency),\r\n ...getGuests(\r\n bookAccommodation,\r\n accommodation.pricesType,\r\n bookAccommodation.currency,\r\n true\r\n )\r\n },\r\n ..._getActivitiesBooking(bookAccommodation, isWidget),\r\n ..._getDeletedActivityBookings(deletedRelatedActivities)\r\n };\r\n};\r\n\r\nconst _getDeletedActivityBookings = deletedRelatedActivities => {\r\n if (!deletedRelatedActivities || !deletedRelatedActivities.length) {\r\n return {};\r\n }\r\n\r\n return {\r\n deletedActivityBookings: deletedRelatedActivities\r\n };\r\n};\r\n\r\nconst _getActivitiesBooking = (bookAccommodation, isWidget) => {\r\n const activities = bookAccommodation.activities.filter(\r\n item => (isWidget && item.isSelected) || !isWidget\r\n );\r\n\r\n if (!activities.length) return {};\r\n\r\n return {\r\n activitiesBookings: activities.map(item => {\r\n const idObj = item.id && !isWidget ? { id: item.id } : {};\r\n const paymentIdObj =\r\n item.paymentId && !isWidget ? { id: item.paymentId } : {};\r\n const activityId = isWidget ? item.id : item.activity;\r\n return {\r\n ...idObj,\r\n activityId: activityId,\r\n platform: isWidget ? 'Widget' : 'Admin panel',\r\n payment: {\r\n ...paymentIdObj,\r\n paymentType: 'CASH',\r\n currency: bookAccommodation.currency,\r\n totalPrice: getTotalRelatedItems([item], bookAccommodation.currency)\r\n },\r\n ...getStartingDate(item),\r\n ...getSchedule(item),\r\n ...getAddOns(item, bookAccommodation.currency),\r\n ...getMandatoryFees(item, bookAccommodation.currency),\r\n ...getGuests(item, item.pricesType, bookAccommodation.currency)\r\n };\r\n })\r\n };\r\n};\r\n\r\nexport { getPreparedBookAccommodationData };\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n sectionIndent: {\r\n marginBottom: '42px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '32px',\r\n },\r\n },\r\n inputIndent: {\r\n marginBottom: '24px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '16px',\r\n paddingLeft: '20px'\r\n },\r\n },\r\n guestInfoRow: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n marginBottom: '24px',\r\n '&:last-child': {\r\n marginBottom: 0,\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n marginBottom: '16px',\r\n padding: '0px 20px '\r\n },\r\n },\r\n guestInfoField: {\r\n width: '280px',\r\n marginBottom: 0,\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n marginBottom: '16px',\r\n padding: '0px 20px '\r\n },\r\n },\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { Field } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport { Input } from 'components';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst GuestInformation = () => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classes.sectionIndent}>\r\n <Typography variant=\"h2\" className={classes.inputIndent}>\r\n {t('Guest information')}\r\n </Typography>\r\n <div className={classes.guestInfoRow}>\r\n <Field\r\n name=\"firstName\"\r\n placeholder=\"First name\"\r\n className={classes.guestInfoField}\r\n label=\"First name *\"\r\n component={Input}\r\n />\r\n <Field\r\n name=\"lastName\"\r\n placeholder=\"Last name\"\r\n className={classes.guestInfoField}\r\n label=\"Last name *\"\r\n component={Input}\r\n />\r\n </div>\r\n <div className={classes.guestInfoRow}>\r\n <Field\r\n name=\"phone\"\r\n placeholder=\"Phone\"\r\n className={classes.guestInfoField}\r\n label=\"Phone *\"\r\n isOnlyNumber={true}\r\n isPhoneNumber={true}\r\n maxLength={20}\r\n component={Input}\r\n />\r\n <Field\r\n name=\"email\"\r\n placeholder=\"Email\"\r\n className={classes.guestInfoField}\r\n label=\"Email *\"\r\n component={Input}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default GuestInformation;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n sectionIndent: {\r\n marginBottom: '42px'\r\n },\r\n inputIndent: {\r\n marginBottom: '24px'\r\n },\r\n summeryWrapper: {\r\n marginBottom: '30px'\r\n },\r\n summaryTitle: {\r\n color: '#757575',\r\n marginBottom: '12px',\r\n letterSpacing: '0.035em',\r\n textTransform: 'uppercase'\r\n },\r\n summaryActivityName: {\r\n marginBottom: '3px',\r\n fontWeight: 'bold'\r\n },\r\n summaryActivityInfo: {\r\n marginBottom: '5px'\r\n },\r\n summaryPricesList: {},\r\n summaryPricesItem: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'baseline',\r\n padding: '7px 0',\r\n letterSpacing: '0.035em',\r\n borderTop: '1px solid #e2ebf6',\r\n '&:last-child': {\r\n borderBottom: '1px solid #e2ebf6'\r\n }\r\n },\r\n summaryCurrency: {\r\n fontSize: '10px'\r\n },\r\n summaryPrice: {\r\n fontSize: '13px',\r\n fontWeight: 'bold'\r\n },\r\n summaryTotal: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n paddingBottom: '10px',\r\n borderBottom: '1px solid #e2ebf6'\r\n },\r\n summaryTotalPriceBlock: {\r\n letterSpacing: '0.035em'\r\n },\r\n summaryTotalPrice: {\r\n fontSize: '15px',\r\n fontWeight: 'bold'\r\n },\r\n addOnsSummaryWrapper: {\r\n marginBottom: '10px'\r\n },\r\n mandatoryFeesSummaryWrapper: {\r\n marginBottom: '10px'\r\n },\r\n relatedItem: {\r\n marginBottom: '10px',\r\n '&:last-child': {\r\n marginBottom: 0\r\n }\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport { LOCALES_OBJ } from 'constants/base';\r\n\r\nimport { currencyFormatter } from 'utils/prices/formatter';\r\nimport {\r\n getSummeryPriceForActivitySeveralDays,\r\n getTotalPrice\r\n} from 'utils/book-accommodation-and-activity/totalPrice';\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst DAILY_PRICES = 'pricesDailyForm';\r\n\r\nconst AddOnsComponent = ({ addOns, currency }) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n if (!addOns || !addOns.length) return null;\r\n\r\n const filledAddOns = addOns.filter(\r\n item => item.value && parseInt(item.value)\r\n );\r\n\r\n if (!filledAddOns || !filledAddOns.length) return null;\r\n\r\n return (\r\n <div className={classes.inputIndent}>\r\n <Typography variant=\"h3\" className={classes.summaryTitle}>\r\n {t('Add-ons')}\r\n </Typography>\r\n {addOns.map((item, index) => {\r\n if (!item.value || !parseInt(item.value)) return;\r\n const price = currencyFormatter(item[currency]);\r\n const total = currencyFormatter(parseInt(item.value) * item[currency]);\r\n const form = getFormByCurrentLanguage(\r\n selectedLanguage,\r\n item,\r\n item['Norwegian']\r\n );\r\n return (\r\n <div key={index} className={classes.addOnsSummaryWrapper}>\r\n <Typography variant=\"body1\" className={classes.summaryActivityName}>\r\n {form.title} • {currency} {price}\r\n </Typography>\r\n <div className={classes.summaryPricesList}>\r\n <div className={classes.summaryPricesItem}>\r\n <Typography variant=\"h3\">\r\n {currency}{' '}\r\n <span className={classes.summaryPrice}>{price}</span> ×{' '}\r\n {item.value}\r\n </Typography>\r\n <Typography variant=\"h3\">\r\n {currency}{' '}\r\n <span className={classes.summaryPrice}>{total}</span>\r\n </Typography>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nconst MandatoryFeesComponent = ({ mandatoryFees, currency }) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n if (!mandatoryFees || !mandatoryFees.length) return null;\r\n\r\n const filledMandatoryFees = mandatoryFees.filter(\r\n item => item && item[currency] && parseFloat(item[currency])\r\n );\r\n\r\n if (!filledMandatoryFees || !filledMandatoryFees.length) return null;\r\n\r\n return (\r\n <div className={classes.inputIndent}>\r\n <Typography variant=\"h3\" className={classes.summaryTitle}>\r\n {t('Mandatory-Fees')}\r\n </Typography>\r\n {mandatoryFees.map((item, index) => {\r\n if (!item[currency] || !parseInt(item[currency])) return;\r\n const price = currencyFormatter(item[currency]);\r\n const form = getFormByCurrentLanguage(\r\n selectedLanguage,\r\n item,\r\n item['Norwegian']\r\n );\r\n return (\r\n <div key={index} className={classes.addOnsSummaryWrapper}>\r\n <Typography variant=\"body1\" className={classes.summaryActivityName}>\r\n {form.title} • {currency} {price}\r\n </Typography>\r\n <div className={classes.summaryPricesList}>\r\n <div className={classes.summaryPricesItem}>\r\n <Typography variant=\"h3\">\r\n </Typography>\r\n <Typography variant=\"h3\">\r\n {currency}{' '}\r\n <span className={classes.summaryPrice}>{price}</span>\r\n </Typography>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\n\r\nconst BookingSummary = ({\r\n activity,\r\n bookActivity,\r\n relatedItems,\r\n generalSectionTitle\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n const getActivitySummaryDate = () => {\r\n if (\r\n bookActivity.dates &&\r\n bookActivity.dates.startDate &&\r\n bookActivity.dates.endDate\r\n ) {\r\n const startDate = moment(bookActivity.dates.startDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY');\r\n const endDate = moment(bookActivity.dates.endDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY');\r\n const checkInTime = moment(activity.generalForm.checkInAfter).format(\r\n 'HH:mm'\r\n );\r\n const checkOutTime = moment(activity.generalForm.checkOutBefore).format(\r\n 'HH:mm'\r\n );\r\n\r\n return `${startDate} – ${endDate} • ${t('Check-in')}: ${checkInTime}, ${t(\r\n 'Check-out'\r\n )}: ${checkOutTime}`;\r\n }\r\n\r\n const startingDate = bookActivity.startingDate;\r\n const startTime = bookActivity.startTime;\r\n let dateStr = ``;\r\n\r\n if (startingDate) {\r\n dateStr = `${moment(bookActivity.startingDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY')}`;\r\n }\r\n\r\n if (startTime) {\r\n dateStr = `${dateStr} • ${t('Start time')}: ${startTime.startTime} • ${\r\n startTime.duration\r\n } ${t(startTime.timeType)}`;\r\n }\r\n\r\n return dateStr;\r\n };\r\n\r\n const isActivitySummary = () => {\r\n let isShow = false;\r\n\r\n bookActivity.participants.map(item => {\r\n if (!item.participants || !parseInt(item.participants)) return;\r\n isShow = true;\r\n });\r\n\r\n return isShow;\r\n };\r\n\r\n const isAddOnsSummary = () => {\r\n let isShow = false;\r\n\r\n bookActivity.addOns.map(item => {\r\n if (!item.value || !parseInt(item.value)) return;\r\n isShow = true;\r\n });\r\n\r\n return isShow;\r\n };\r\n\r\n const isMandatoryFeesSummary = () => {\r\n let isShow = false;\r\n if(bookActivity?.mandatoryFees?.length > 0)\r\n isShow = true;\r\n return isShow;\r\n };\r\n\r\n const getTotalFixedSummaryPrice = (\r\n bookedItem,\r\n item,\r\n price,\r\n isParticipants\r\n ) => {\r\n if (\r\n bookedItem.dates &&\r\n bookedItem.dates.startDate &&\r\n bookedItem.dates.endDate\r\n ) {\r\n const currency = bookActivity.currency;\r\n const dates = bookedItem.dates;\r\n const nights = dates.endDate.diff(dates.startDate, 'days');\r\n const participants = isParticipants ? item.participants : 1;\r\n return currencyFormatter(\r\n parseInt(nights) * item[currency] * participants\r\n );\r\n } else {\r\n return price;\r\n }\r\n };\r\n if (!isActivitySummary() && !isAddOnsSummary() && !relatedItems.length) {\r\n return null;\r\n }\r\n\r\n const relatedItem = relatedItems.length ? relatedItems[0] : null;\r\n const relatedAddOns = [];\r\n const relatedMandatoryFees = [];\r\n if (relatedItem) {\r\n relatedItems.map(item => relatedAddOns.push(...item.addOns));\r\n }\r\n if (relatedItem) {\r\n relatedItems.forEach(item => {\r\n if (item.mandatoryFees) {\r\n relatedMandatoryFees.push(...item.mandatoryFees); // Spread mandatoryFees if it exists\r\n } else {\r\n relatedMandatoryFees.push(null); // Push null if mandatoryFees does not exist\r\n }\r\n });\r\n}\r\n return (\r\n <div className={classes.summeryWrapper}>\r\n <Typography variant=\"h2\" className={classes.inputIndent}>\r\n {t('Booking summary')}\r\n </Typography>\r\n {isActivitySummary() && (\r\n <div className={classes.inputIndent}>\r\n <Typography variant=\"h3\" className={classes.summaryTitle}>\r\n {t(generalSectionTitle)}\r\n </Typography>\r\n <Typography variant=\"body1\" className={classes.summaryActivityName}>\r\n {\r\n getFormByCurrentLanguage(\r\n selectedLanguage,\r\n activity.generalForm,\r\n activity['generalForm-Norwegian']\r\n ).title\r\n }\r\n </Typography>\r\n <Typography variant=\"body1\" className={classes.summaryActivityInfo}>\r\n {getActivitySummaryDate()}\r\n </Typography>\r\n <div className={classes.summaryPricesList}>\r\n {bookActivity.participants.map(item => {\r\n if (!item.participants || !parseInt(item.participants)) return;\r\n const price = currencyFormatter(item.currencyValue);\r\n const isAccommodationDailyPrice =\r\n activity.relatedActivitiesForm &&\r\n activity.pricesType === DAILY_PRICES;\r\n let summaryPrice = isAccommodationDailyPrice\r\n ? item.currencyValue\r\n : item.currencyValue * parseInt(item.participants);\r\n const nights =\r\n bookActivity.dates && bookActivity.dates.endDate\r\n ? bookActivity.dates.endDate.diff(\r\n bookActivity.dates.startDate,\r\n 'days'\r\n )\r\n : 0;\r\n const pluralNights = nights > 1 ? t('nights') : t('night');\r\n if (\r\n activity.pricesType === 'pricesFixedForm' ||\r\n activity.pricesType === 'pricesCategoryForm'\r\n ) {\r\n summaryPrice = getTotalFixedSummaryPrice(\r\n bookActivity,\r\n item,\r\n price,\r\n activity.pricesType === 'pricesCategoryForm'\r\n );\r\n }\r\n summaryPrice = currencyFormatter(\r\n getSummeryPriceForActivitySeveralDays(\r\n bookActivity.multiDates,\r\n summaryPrice\r\n )\r\n );\r\n return (\r\n <div key={item.id} className={classes.summaryPricesItem}>\r\n {isAccommodationDailyPrice ? (\r\n <Typography variant=\"body1\">\r\n {item.participants} {t(item.participant) || t('guests')}{' '}\r\n {!!nights && (\r\n <>\r\n × {nights} {pluralNights}\r\n </>\r\n )}\r\n </Typography>\r\n ) : (\r\n <>\r\n {activity.pricesType === 'pricesFixedForm' ? (\r\n <Typography variant=\"body1\">\r\n <span className={classes.summaryCurrency}>\r\n {item.currency}\r\n </span>{' '}\r\n {price}{' '}\r\n {!!nights && (\r\n <>\r\n × {nights} {pluralNights}\r\n </>\r\n )}\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"body1\">\r\n <span className={classes.summaryCurrency}>\r\n {item.currency}\r\n </span>{' '}\r\n {price} × {item.participants}{' '}\r\n {t(item.participant) || t('guests')}{' '}\r\n {!!nights && (\r\n <>\r\n × {nights} {pluralNights}\r\n </>\r\n )}\r\n </Typography>\r\n )}\r\n </>\r\n )} \r\n <Typography variant=\"body1\">\r\n {item.currency}{' '}\r\n <span className={classes.summaryPrice}>{summaryPrice}</span>\r\n </Typography>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n )}\r\n {isMandatoryFeesSummary() && (\r\n <MandatoryFeesComponent\r\n mandatoryFees={bookActivity.mandatoryFees}\r\n currency={bookActivity.currency}\r\n />\r\n )}\r\n\r\n {isAddOnsSummary() && (\r\n <AddOnsComponent\r\n addOns={bookActivity.addOns}\r\n currency={bookActivity.currency}\r\n />\r\n )}\r\n \r\n {!!relatedItems.length && (\r\n <>\r\n <div className={classes.inputIndent}>\r\n <Typography variant=\"h3\" className={classes.summaryTitle}>\r\n {relatedItem.dates ? t('Accommodation') : t('Activities')}\r\n </Typography>\r\n\r\n {relatedItems.map((relatedItem, index) => (\r\n <div key={index} className={classes.relatedItem}>\r\n <Typography\r\n variant=\"body1\"\r\n className={classes.summaryActivityName}\r\n >\r\n {selectedLanguage === 'Norway' &&\r\n Object.keys(relatedItem['Norwegian']).length\r\n ? relatedItem['Norwegian'].title\r\n : relatedItem.title}\r\n </Typography>\r\n <Typography\r\n variant=\"body1\"\r\n className={classes.summaryActivityInfo}\r\n >\r\n {relatedItem.dates && (\r\n <>\r\n {moment(relatedItem.dates.startDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY')}{' '}\r\n –{' '}\r\n {moment(relatedItem.dates.endDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY')}\r\n </>\r\n )}\r\n {relatedItem.startingDate && (\r\n <>\r\n {moment(relatedItem.startingDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY')}{' '}\r\n {relatedItem.startTime && (\r\n <>\r\n {'• '}\r\n {relatedItem.startTime.startTime} •{' '}\r\n {relatedItem.startTime.duration}{' '}\r\n {t(relatedItem.startTime.timeType)}\r\n </>\r\n )}\r\n </>\r\n )}\r\n </Typography>\r\n <div className={classes.summaryPricesList}>\r\n {relatedItem.participants.map(item => {\r\n if (!item.participants || !parseInt(item.participants))\r\n return;\r\n const price = currencyFormatter(\r\n item[bookActivity.currency]\r\n );\r\n const isAccommodationDailyPrice =\r\n relatedItem.accommodation &&\r\n relatedItem.pricesType === DAILY_PRICES;\r\n let summaryPrice = isAccommodationDailyPrice\r\n ? item[bookActivity.currency]\r\n : item[bookActivity.currency] *\r\n parseInt(item.participants);\r\n const nights = relatedItem.dates\r\n ? relatedItem.dates.endDate.diff(\r\n relatedItem.dates.startDate,\r\n 'days'\r\n )\r\n : 0;\r\n const pluralNights = nights > 1 ? t('nights') : t('night');\r\n if (\r\n relatedItem.pricesType === 'pricesFixedForm' ||\r\n relatedItem.pricesType === 'pricesCategoryForm'\r\n ) {\r\n summaryPrice = getTotalFixedSummaryPrice(\r\n relatedItem,\r\n item,\r\n price,\r\n relatedItem.pricesType === 'pricesCategoryForm'\r\n );\r\n }\r\n summaryPrice = currencyFormatter(\r\n getSummeryPriceForActivitySeveralDays(\r\n relatedItem.multiDates,\r\n summaryPrice\r\n )\r\n );\r\n return (\r\n <div key={item.id} className={classes.summaryPricesItem}>\r\n {isAccommodationDailyPrice ? (\r\n <Typography variant=\"h3\">\r\n {item.participants}{' '}\r\n {t(item.participant) || t('guests')}{' '}\r\n {!!nights && (\r\n <>\r\n × {nights} {pluralNights}\r\n </>\r\n )}\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"h3\">\r\n {bookActivity.currency}{' '}\r\n <span className={classes.summaryPrice}>\r\n {price}\r\n </span>{' '}\r\n × {item.participants}{' '}\r\n {t(item.participant) || t('guests')}{' '}\r\n {!!nights && (\r\n <>\r\n × {nights} {pluralNights}\r\n </>\r\n )}\r\n </Typography>\r\n )}\r\n <Typography variant=\"h3\">\r\n {bookActivity.currency}{' '}\r\n <span className={classes.summaryPrice}>\r\n {summaryPrice}\r\n </span>\r\n </Typography>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n\r\n <MandatoryFeesComponent\r\n mandatoryFees={relatedMandatoryFees}\r\n currency={bookActivity.currency}\r\n />\r\n\r\n <AddOnsComponent\r\n addOns={relatedAddOns}\r\n currency={bookActivity.currency}\r\n />\r\n </>\r\n )}\r\n\r\n <div className={classes.summaryTotal}>\r\n <Typography variant=\"h2\" className={classes.fontWeight}>\r\n {t('Total')}\r\n </Typography>\r\n <Typography variant=\"h3\" className={classes.summaryTotalPriceBlock}>\r\n {bookActivity.currency}{' '}\r\n <span className={classes.summaryTotalPrice}>\r\n {currencyFormatter(\r\n getTotalPrice(\r\n activity,\r\n bookActivity.dates,\r\n bookActivity.participants,\r\n bookActivity.addOns,\r\n bookActivity.mandatoryFees,\r\n relatedItems,\r\n bookActivity.currency,\r\n bookActivity.multiDates\r\n )\r\n )}\r\n </span>\r\n </Typography>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n\r\nexport default BookingSummary;\r\n","import React from 'react';\r\n\r\nconst TrashIcon = () => (\r\n <svg width={14} height={16} viewBox=\"0 0 14 16\" fill=\"none\">\r\n <path\r\n fillRule=\"evenodd\"\r\n clipRule=\"evenodd\"\r\n d=\"M9.286 1.714v.572h4.571v1.143h-1.143v10.857c0 .947-.767 1.714-1.714 1.714H3a1.714 1.714 0 01-1.714-1.714V3.429H.143V2.286h4.571v-.572C4.714.768 5.482 0 6.43 0H7.57c.947 0 1.715.768 1.715 1.714zm-2.857-.571a.571.571 0 00-.572.571v.572h2.286v-.572a.571.571 0 00-.572-.571H6.43zm5.142 13.143a.571.571 0 01-.571.571H3a.571.571 0 01-.571-.571V3.429h9.142v10.857zM4.143 12.57V5.714h1.143v6.857H4.143zM7.57 5.714H6.43v6.857H7.57V5.714zm2.286 0H8.714v6.857h1.143V5.714z\"\r\n fill=\"#335267\"\r\n />\r\n </svg>\r\n);\r\n\r\nexport default TrashIcon;\r\n","import React from 'react';\r\n\r\nconst EditIcon = () => (\r\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n fillRule=\"evenodd\"\r\n clipRule=\"evenodd\"\r\n d=\"M15.497 2.32L13.71.503a1.72 1.72 0 00-2.43 0L2.413 9.335A1.754 1.754 0 002 10.01L0 16l5.995-2c.251-.087.48-.228.67-.413l8.832-8.837a1.72 1.72 0 000-2.43zM3.462 9.93l5.014-5.008.906.905-5.032 5.015-.888-.911zm5.8-5.822l.91-.906 2.626 2.625-.906.911-2.63-2.63zm-6.385 6.889l2.132 2.126-3.192 1.06 1.06-3.186zm3.192 1.564l-.91-.911 5.014-5.009.905.905-5.009 5.015zm8.597-8.597L13.59 5.042 10.98 2.388l1.077-1.077a.573.573 0 01.407-.166c.153-.001.3.059.407.166l1.817 1.822a.573.573 0 010 .809l-.023.022z\"\r\n fill=\"#335267\"\r\n />\r\n </svg>\r\n);\r\n\r\nexport default EditIcon;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n wrapper: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n padding: '15px 30px',\r\n border: '1px solid #E2EBF6',\r\n borderRadius: '3px',\r\n marginBottom: '6px',\r\n '&:last-child': {\r\n marginBottom: 0\r\n }\r\n },\r\n info: {\r\n width: '469px'\r\n },\r\n title: {\r\n fontWeight: 'bold',\r\n marginBottom: '2px'\r\n },\r\n actions: {\r\n display: 'flex',\r\n justifyContent: 'space-between'\r\n },\r\n iconButton: {\r\n color: '#59758B'\r\n }\r\n});\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { IconButton, Typography } from '@material-ui/core';\r\n\r\nimport { TrashIcon, EditIcon } from 'components/icons';\r\n\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst BookRelatedField = ({ title, addOns, mandatoryFees, editCallBack, deleteCallBack }) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <div className={classes.info}>\r\n <Typography variant=\"body1\" className={classes.title}>\r\n {title}\r\n </Typography>\r\n {addOns && !!addOns.length && (\r\n <Typography variant=\"body1\">\r\n {addOns\r\n .filter(item => item.value && parseInt(item.value))\r\n .map(\r\n item =>\r\n `${item.value}x ${\r\n getFormByCurrentLanguage(\r\n selectedLanguage,\r\n item,\r\n item['Norwegian']\r\n ).title\r\n } `\r\n )\r\n .join('• ')}\r\n </Typography>\r\n )}\r\n </div>\r\n <div className={classes.info}>\r\n <Typography variant=\"body1\" className={classes.title}>\r\n {title}\r\n </Typography>\r\n {mandatoryFees && !!mandatoryFees.length && (\r\n <Typography variant=\"body1\">\r\n {mandatoryFees\r\n .filter(item => item.value && parseInt(item.value))\r\n .map(\r\n item =>\r\n `${item.value}x ${\r\n getFormByCurrentLanguage(\r\n selectedLanguage,\r\n item,\r\n item['Norwegian']\r\n ).title\r\n } `\r\n )\r\n .join('• ')}\r\n </Typography>\r\n )}\r\n </div>\r\n <div className={classes.actions}>\r\n <IconButton\r\n onClick={editCallBack}\r\n className={classes.iconButton}\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n aria-label=\"edit\"\r\n >\r\n <EditIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={deleteCallBack}\r\n className={classes.iconButton}\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n aria-label=\"delete\"\r\n >\r\n <TrashIcon />\r\n </IconButton>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default BookRelatedField;\r\n","import moment from 'moment';\r\nimport { isRequired, isEmail } from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (!values.dates || !values.dates.startDate || !values.dates.endDate) {\r\n errors.dates = 'Dates are required';\r\n } else if (\r\n moment(values.dates.endDate).diff(values.dates.startDate, 'days') <\r\n values.minNights\r\n ) {\r\n errors.dates = {\r\n text: 'The number of nights cannot be less than',\r\n variables: { number: values.minNights }\r\n };\r\n }\r\n\r\n if (values.participants && values.participants.length) {\r\n let participantsArrayErrors = [];\r\n let isValidParticipants = false;\r\n\r\n values.participants.forEach((item, index) => {\r\n if (item.participants && parseInt(item.participants) > 0) {\r\n isValidParticipants = true;\r\n }\r\n\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (!isValidParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: 'Value for at least one category should be filled in'\r\n };\r\n }\r\n }\r\n\r\n if (\r\n !errors.participants &&\r\n values.participants &&\r\n values.participants.length\r\n ) {\r\n const availableParticipants = values.startTime\r\n ? values.startTime.seatsLeft\r\n : values.maxParticipants;\r\n const participantsArrayErrors = [];\r\n let totalParticipants = 0;\r\n\r\n values.participants.forEach((item, index) => {\r\n if (item.participants && item.participants.length) {\r\n totalParticipants += parseInt(item.participants);\r\n }\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (totalParticipants > availableParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: `The number of Guests can’t exceed ${availableParticipants}`\r\n };\r\n errors.isMaxParticipantsErrors = true;\r\n }\r\n }\r\n\r\n if (isRequired(values.firstName || '', true)) {\r\n errors.firstName = 'First name is required';\r\n }\r\n\r\n if (isRequired(values.lastName || '', true)) {\r\n errors.lastName = 'Last name is required';\r\n }\r\n\r\n if (isRequired(values.phone || '', true)) {\r\n errors.phone = 'Phone is required';\r\n }\r\n\r\n if (isRequired(values.email || '', true)) {\r\n errors.email = 'Email is required';\r\n } else if (isEmail(values.email || '', true)) {\r\n errors.email = 'Invalid email';\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n width: '100%',\r\n minHeight: 'calc(100% - 52px)',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n alignItems : 'center'\r\n },\r\n },\r\n leftSide: {\r\n minWidth: '340px',\r\n width: '340px',\r\n boxShadow: 'inset -1px 0px 0px #e2ebf6',\r\n padding: '12px 30px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n minWidth: '100%',\r\n boxShadow: 'none',\r\n padding: '10px 40px',\r\n },\r\n },\r\n rightSide: {\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '10px 20px',\r\n },\r\n },\r\n bookWrapper: {\r\n width: '618px',\r\n padding: '30px 0 36px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n padding: '20px 0 30px',\r\n },\r\n },\r\n fontWeight: {\r\n fontWeight: 'bold',\r\n },\r\n productCode: {\r\n fontWeight: 'bold',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.035em',\r\n marginBottom: '6px',\r\n },\r\n photo: {\r\n backgroundSize: 'contain',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center',\r\n width: '100%',\r\n height: '180px',\r\n border: '1px solid #BECEDA',\r\n backgroundColor: '#E2F5F8',\r\n marginBottom: '24px',\r\n },\r\n listInfo: {\r\n margin: '18px 0',\r\n },\r\n infoItem: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n infoIcon: {\r\n fontSize: '16px',\r\n marginRight: '15px',\r\n },\r\n overview: {\r\n marginBottom: '24px',\r\n },\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important',\r\n },\r\n loaderWrapper: {\r\n position: 'fixed',\r\n },\r\n sectionIndent: {\r\n marginBottom: '42px',\r\n [theme.breakpoints.down('sm')]:{\r\n paddingLeft: '20px'\r\n }\r\n\r\n\r\n },\r\n inputIndent: {\r\n marginBottom: '24px',\r\n [theme.breakpoints.down('sm')]:{\r\n paddingLeft: '20px'\r\n }\r\n },\r\n currencyInput: {\r\n width: '190px',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '90%',\r\n padding: '20px 20px'\r\n }\r\n },\r\n accommodationsTitle: {\r\n marginBottom: '13px',\r\n [theme.breakpoints.down('sm')]:{\r\n textAlign: 'center'\r\n }\r\n },\r\n paymentWrapper: {\r\n borderBottom: '1px solid #e2ebf6',\r\n paddingBottom: '10px',\r\n marginBottom: '42px',\r\n [theme.breakpoints.down('sm')]:{\r\n paddingLeft: '20px'\r\n }\r\n },\r\n payment: {\r\n marginBottom: '13px',\r\n\r\n },\r\n paymentField: {\r\n marginBottom: 0,\r\n },\r\n addOnTitle: {\r\n fontSize: '13px',\r\n [theme.breakpoints.down('sm')]:{\r\n textAlign: 'left'\r\n }\r\n },\r\n addOnDescClass: {\r\n width: 'calc(100% - 163px)',\r\n [theme.breakpoints.down('sm')]: {\r\n width: 'calc(100% - 1px)',\r\n padding: '20px'\r\n },\r\n },\r\n disableInputFocus: {\r\n boxShadow: 'none !important',\r\n display: 'none'\r\n\r\n },\r\n inputIndent:{\r\n [theme.breakpoints.down('sm')]:{\r\n paddingLeft: '20px'\r\n }\r\n },\r\n\r\n smallInputIndent: {\r\n width: '100%',\r\n paddingLeft: '20px'\r\n \r\n },\r\n \r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSnackbar } from 'notistack';\r\nimport { connect } from 'react-redux';\r\nimport classNames from 'classnames';\r\nimport { useMediaQuery } from '@material-ui/core';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\nimport { change, Field, FieldArray, reduxForm } from 'redux-form';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\r\nimport LocationOnOutlinedIcon from '@material-ui/icons/LocationOnOutlined';\r\nimport PeopleOutlineIcon from '@material-ui/icons/PeopleOutline';\r\nimport HotelOutlinedIcon from '@material-ui/icons/HotelOutlined';\r\nimport DeleteOutlineIcon from '@material-ui/icons/DeleteOutline';\r\n\r\nimport { ACCOMMODATION, BOOK_DATES } from 'graphql/queries/accommodations';\r\nimport {\r\n CREATE_ACCOMMODATION_BOOKING,\r\n UPDATE_ACCOMMODATION_BOOKING\r\n} from 'graphql/mutations/accommodations-bookings';\r\n\r\nimport {\r\n AppHeader,\r\n CircularLoader,\r\n DropDown,\r\n TextIconButton,\r\n CheckboxButtonsGroup,\r\n FormActionButtons,\r\n BookInfoList,\r\n CustomDateRangePicker,\r\n BookActivityDialog\r\n} from 'components';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport { getListOfAvailableCurrencies } from 'utils/book-accommodation-and-activity/currency';\r\nimport { getReceivedAccommodationData } from 'utils/accommodations-and-activities/prepareReceivedAccommodationData';\r\nimport { getParticipants } from 'utils/book-accommodation/prepareParticipants';\r\nimport { getPreparedBookAccommodationData } from 'utils/book-accommodation/prepareBookAccommodationData';\r\nimport {\r\n getAvailableRangeDates,\r\n getDisabledDates\r\n} from 'utils/book-accommodation/availableDates';\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport NumberOfParticipants from 'pages/book-activity/components/number-of-participants/NumberOfParticipants';\r\nimport AddOnsList from 'pages/book-activity/components/add-ons-list/AddOnsList';\r\nimport GuestInformation from 'pages/book-activity/components/guest-information/GuestInformation';\r\nimport BookingSummary from 'pages/book-activity/components/booking-summary/BookingSummary';\r\nimport BookRelatedField from 'pages/book-activity/components/book-related-field/BookRelatedField';\r\n\r\nimport validate from './validate';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst initialValues = {\r\n maxParticipants: 0,\r\n currency: 'NOK',\r\n participants: [],\r\n addOns: [],\r\n mandatoryFees: [],\r\n activities: [],\r\n pay: {\r\n 'Pay on arrival': true\r\n },\r\n minNights: 1\r\n};\r\n\r\nconst FIXED_PRICES = 'pricesFixedForm';\r\nconst CATEGORY_PRICES = 'pricesCategoryForm';\r\nconst DAILY_PRICES = 'pricesDailyForm';\r\n\r\nconst BookAccommodation = ({\r\n bookAccommodationForm,\r\n changeFormFieldValue,\r\n handleSubmit,\r\n bookedData,\r\n isUpdate,\r\n businessOwner\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n const { id } = useParams();\r\n const history = useHistory();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const confirm = React.useContext(ConfirmContext);\r\n\r\n const selectedLanguage = i18n.language;\r\n const ownerId =\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id;\r\n\r\n const accommodationId = bookAccommodationForm.values.accommodationId;\r\n const initialDates = bookedData ? bookedData.dates : null;\r\n const startDate = initialDates ? initialDates.startDate : moment();\r\n\r\n const [deletedRelatedActivities, setDeletedRelatedActivity] = React.useState(\r\n []\r\n );\r\n const [relatedItem, setRelatedItem] = React.useState(null);\r\n const [isOpenBookDialog, setOpenBookDialog] = React.useState(false);\r\n const [isLoading, setLoading] = React.useState(null);\r\n const [accommodation, setAccommodation] = React.useState(null);\r\n const [isUpdatedParticipants, setIsUpdatedParticipants] = React.useState(\r\n false\r\n );\r\n const [listOfCurrencies, setListOfCurrencies] = React.useState([]);\r\n\r\n const [createAccommodationBooking] = useMutation(\r\n CREATE_ACCOMMODATION_BOOKING\r\n );\r\n const [updateAccommodationBooking] = useMutation(\r\n UPDATE_ACCOMMODATION_BOOKING\r\n );\r\n\r\n const { loading, data } = useQuery(ACCOMMODATION, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n accommodationId: accommodationId || parseInt(id),\r\n businessOwnerId: ownerId\r\n }\r\n });\r\n\r\n const isSmallScreen = useMediaQuery((theme) => theme.breakpoints.down('sm'));\r\n const isMediumScreen = useMediaQuery((theme) => theme.breakpoints.down('md'));\r\n const [windowWidth, setWindowWidth] = React.useState(window.innerWidth);\r\n\r\n React.useLayoutEffect(() => {\r\n const updateSize = () => {\r\n setWindowWidth(window.innerWidth);\r\n };\r\n window.addEventListener('resize', updateSize);\r\n updateSize();\r\n return () => window.removeEventListener('resize', updateSize);\r\n }, []);\r\n\r\n\r\n\r\n const {\r\n loading: bookDatesLoading,\r\n data: bookDatesData,\r\n refetch: bookDatesRefetch\r\n } = useQuery(BOOK_DATES, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n accommodationId: accommodationId || parseInt(id),\r\n businessOwnerId: ownerId,\r\n startPeriod: moment(startDate)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(startDate).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n if (data && data.accommodations && data.accommodations.length) {\r\n const receivedAccommodation = data.accommodations[0];\r\n const accommodationData = getReceivedAccommodationData(\r\n receivedAccommodation\r\n );\r\n\r\n if (receivedAccommodation.prices[0].participant.participant) {\r\n accommodationData['pricesType'] = CATEGORY_PRICES;\r\n } else if (receivedAccommodation.prices[0].day) {\r\n accommodationData['pricesType'] = DAILY_PRICES;\r\n } else {\r\n accommodationData['pricesType'] = FIXED_PRICES;\r\n }\r\n\r\n changeFormFieldValue(\r\n 'minNights',\r\n accommodationData.generalForm.minNights\r\n );\r\n\r\n setListOfAvailableCurrencies(receivedAccommodation);\r\n setMaxParticipants(accommodationData);\r\n setParticipants(accommodationData);\r\n setAddOns(accommodationData);\r\n setMandatoryFees(accommodationData);\r\n\r\n setAccommodation(accommodationData);\r\n }\r\n }, [data]);\r\n\r\n React.useEffect(() => {\r\n if (!bookAccommodationForm || !accommodation) return;\r\n setParticipants(accommodation);\r\n }, [\r\n bookAccommodationForm.values.currency,\r\n bookAccommodationForm.values.dates\r\n ]);\r\n\r\n const changeMonthHandler = date => {\r\n bookDatesRefetch({\r\n accommodationId: accommodationId || parseInt(id),\r\n startPeriod: moment(date)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(date).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n });\r\n };\r\n\r\n const setListOfAvailableCurrencies = receivedAccommodation => {\r\n const listOfAvailableCurrencies = getListOfAvailableCurrencies(\r\n receivedAccommodation.prices\r\n );\r\n const selectedCurrency = bookAccommodationForm.values.currency;\r\n\r\n setListOfCurrencies(listOfAvailableCurrencies);\r\n\r\n if (!listOfAvailableCurrencies.includes(selectedCurrency)) {\r\n changeFormFieldValue('currency', listOfAvailableCurrencies[0]);\r\n }\r\n };\r\n\r\n const setParticipants = accommodation => {\r\n setIsUpdatedParticipants(!isUpdatedParticipants);\r\n\r\n const currency = bookAccommodationForm.values.currency;\r\n const dates = bookAccommodationForm.values.dates;\r\n const previousParticipants =\r\n bookAccommodationForm.values.participants || [];\r\n\r\n if (dates && dates.startDate && dates.endDate) {\r\n const participants = getParticipants(\r\n accommodation,\r\n currency,\r\n previousParticipants,\r\n dates\r\n );\r\n changeFormFieldValue('participants', participants);\r\n } else {\r\n changeFormFieldValue('participants', []);\r\n }\r\n };\r\n\r\n const setAddOns = accommodation => {\r\n const previousAddOns = bookAccommodationForm.values.addOns || [];\r\n\r\n const addOnsList = accommodation.addOnsForm.addOns.map(item => {\r\n const theSameAddOn = previousAddOns.find(addOn => addOn.id === item.id);\r\n return {\r\n ...item,\r\n value: theSameAddOn ? theSameAddOn.value : 0,\r\n originalId: theSameAddOn ? theSameAddOn.originalId : null\r\n };\r\n });\r\n\r\n changeFormFieldValue('addOns', addOnsList);\r\n };\r\n\r\n const setMandatoryFees = accommodation => {\r\n const previousMandatoryFees = bookAccommodationForm.values.mandatoryFees || [];\r\n\r\n const mandatoryFeesList = accommodation.mandatoryFeesForm.mandatoryFees.map(item => {\r\n const theSameMandatoryFee = previousMandatoryFees.find(mandatoryFee => mandatoryFee.id === item.id);\r\n return {\r\n ...item,\r\n value: theSameMandatoryFee ? theSameMandatoryFee.value : 0,\r\n originalId: theSameMandatoryFee ? theSameMandatoryFee.originalId : null\r\n };\r\n });\r\n\r\n changeFormFieldValue('mandatoryFees', mandatoryFeesList);\r\n };\r\n\r\n\r\n const setMaxParticipants = accommodation => {\r\n changeFormFieldValue('maxParticipants', accommodation.generalForm.guests);\r\n };\r\n\r\n const handlerSubmitWrapper = props => {\r\n if (bookAccommodationForm.syncErrors) {\r\n const syncErrors = bookAccommodationForm.syncErrors;\r\n const errorsLength = Object.keys(syncErrors).length;\r\n\r\n if (syncErrors.isMaxParticipantsErrors && errorsLength === 2) {\r\n const error = syncErrors.participants['_error'];\r\n const errorSplit = error.split(' ');\r\n const errorLength = errorSplit.length;\r\n enqueueSnackbar(\r\n t('The number of Participants can’t exceed', {\r\n number: errorSplit[errorLength - 1]\r\n }),\r\n {\r\n variant: 'warning'\r\n }\r\n );\r\n } else {\r\n enqueueSnackbar(t('Please fill in all the required fields'), {\r\n variant: 'warning'\r\n });\r\n }\r\n }\r\n\r\n handleSubmit(submit)(props);\r\n };\r\n\r\n const submit = () => {\r\n setLoading(true);\r\n\r\n let data = getPreparedBookAccommodationData(\r\n accommodation,\r\n bookAccommodationForm,\r\n deletedRelatedActivities\r\n );\r\n\r\n if (isUpdate) {\r\n updateAccommodationBooking({ variables: data }).then(\r\n () => {\r\n enqueueSnackbar(\r\n t('Accommodation booking has been successfully updated'),\r\n {\r\n variant: 'success'\r\n }\r\n );\r\n history.push({\r\n pathname: '/bookings-list'\r\n });\r\n },\r\n (error) => {\r\n setLoading(false);\r\n // Extract error message from GraphQL response\r\n const errorMessage =\r\n error?.graphQLErrors?.[0]?.message ||\r\n t('Something was wrong'); // Fallback to a generic error message if no specific error message exists\r\n\r\n enqueueSnackbar(errorMessage, {\r\n variant: 'error',\r\n });\r\n }\r\n );\r\n } else {\r\n createAccommodationBooking({ variables: data }).then(\r\n () => {\r\n enqueueSnackbar(t('Accommodation has been successfully booked'), {\r\n variant: 'success',\r\n });\r\n history.push({\r\n pathname: '/accommodations',\r\n });\r\n },\r\n (error) => {\r\n setLoading(false);\r\n // Extract error message from GraphQL response\r\n const errorMessage =\r\n error?.graphQLErrors?.[0]?.message ||\r\n t('Something was wrong'); // Fallback to a generic error message if no specific error message exists\r\n\r\n enqueueSnackbar(errorMessage, {\r\n variant: 'error',\r\n });\r\n }\r\n );\r\n }\r\n };\r\n\r\n const cancelRelatedActivity = () => {\r\n confirm({\r\n title: 'You have unsaved changes',\r\n description: t('Are you sure you want to cancel?'),\r\n confirmationText: 'Cancel',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => setOpenBookDialog(false))\r\n .catch(() => {});\r\n };\r\n\r\n const addRelatedActivity = activity => {\r\n setOpenBookDialog(false);\r\n changeFormFieldValue('activities', [\r\n ...bookAccommodationForm.values.activities,\r\n activity\r\n ]);\r\n };\r\n\r\n const updateRelatedActivity = activity => {\r\n setOpenBookDialog(false);\r\n changeFormFieldValue('activities', [\r\n ...bookAccommodationForm.values.activities.map((item, index) => {\r\n if (index === activity.index) {\r\n return activity;\r\n }\r\n return item;\r\n })\r\n ]);\r\n };\r\n\r\n const getBookRelatedField = () => {\r\n const activities = bookAccommodationForm.values.activities;\r\n\r\n return (\r\n <div>\r\n {activities.map((item, index) => (\r\n <BookRelatedField\r\n key={index}\r\n title={\r\n getFormByCurrentLanguage(\r\n selectedLanguage,\r\n item,\r\n item['Norwegian']\r\n ).title\r\n }\r\n addOns={item.addOns}\r\n mandatoryFees={item.MandatoryFees}\r\n deleteCallBack={() => deleteRelatedItem(item, index)}\r\n editCallBack={() => {\r\n setRelatedItem({ ...item, index: index });\r\n setOpenBookDialog(true);\r\n }}\r\n />\r\n ))}\r\n </div>\r\n );\r\n };\r\n\r\n const deleteRelatedItem = (deleteItem, deleteItemIndex) => {\r\n confirm({\r\n title: 'Are you sure you want to delete it?',\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n const activities = bookAccommodationForm.values.activities;\r\n changeFormFieldValue('activities', [\r\n ...activities.filter((item, index) => index !== deleteItemIndex)\r\n ]);\r\n\r\n if (deleteItem.id) {\r\n setDeletedRelatedActivity([\r\n ...deletedRelatedActivities,\r\n deleteItem.id\r\n ]);\r\n }\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const deleteAllRelatedItems = () => {\r\n confirm({\r\n title: 'Are you sure you want to delete it?',\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n const activities = bookAccommodationForm.values.activities;\r\n const deletedActivitiesIds = [];\r\n\r\n activities.map(deleteItem => {\r\n if (deleteItem.id) {\r\n deletedActivitiesIds.push(deleteItem.id);\r\n }\r\n });\r\n\r\n setDeletedRelatedActivity([\r\n ...deletedRelatedActivities,\r\n ...deletedActivitiesIds\r\n ]);\r\n\r\n changeFormFieldValue('activities', []);\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const generalForm = accommodation\r\n ? getFormByCurrentLanguage(\r\n selectedLanguage,\r\n accommodation.generalForm,\r\n accommodation['generalForm-Norwegian']\r\n )\r\n : {};\r\n const descriptionForm = accommodation\r\n ? getFormByCurrentLanguage(\r\n selectedLanguage,\r\n accommodation.descriptionForm,\r\n accommodation['descriptionForm-Norwegian']\r\n )\r\n : {};\r\n\r\n return (\r\n <>\r\n <AppHeader />\r\n\r\n {accommodation && isOpenBookDialog && (\r\n <BookActivityDialog\r\n open={isOpenBookDialog}\r\n ownerId={ownerId}\r\n onCancel={cancelRelatedActivity}\r\n onConfirm={addRelatedActivity}\r\n onUpdate={updateRelatedActivity}\r\n relatedActivitiesForm={accommodation.relatedActivitiesForm}\r\n currency={bookAccommodationForm.values.currency}\r\n initialValues={\r\n relatedItem || {\r\n participants: [],\r\n addOns: [],\r\n mandatoryFees: []\r\n }\r\n }\r\n />\r\n )}\r\n <CircularLoader\r\n isLoading={loading || bookDatesLoading || isLoading }\r\n loaderClassName={classes.loaderClassName}\r\n className={classes.loaderWrapper}\r\n />\r\n\r\n {accommodation && (\r\n <div className={classes.root}>\r\n <div className={classes.leftSide}>\r\n <Typography variant=\"h3\" classes={{ root: classes.productCode }}>\r\n {t('Product code')}: {accommodation.generalForm.productCode}\r\n </Typography>\r\n\r\n <div\r\n className={classes.photo}\r\n style={{\r\n backgroundImage: `url(${accommodation.generalForm.coverPhoto.image})`\r\n }}\r\n >\r\n {''}\r\n </div>\r\n\r\n <Typography variant=\"h2\" className={classes.fontWeight}>\r\n {generalForm.title}\r\n </Typography>\r\n\r\n <div className={classes.listInfo}>\r\n <div className={classes.infoItem}>\r\n <LocationOnOutlinedIcon classes={{ root: classes.infoIcon }} />\r\n <Typography variant=\"body1\">\r\n {accommodation.generalForm.location}\r\n </Typography>\r\n </div>\r\n <div className={classes.infoItem}>\r\n <PeopleOutlineIcon classes={{ root: classes.infoIcon }} />\r\n <Typography variant=\"body1\">\r\n {accommodation.generalForm.guests} {t('Guests')}\r\n </Typography>\r\n </div>\r\n {generalForm.bedDetails && !!generalForm.bedDetails.length && (\r\n <div className={classes.infoItem}>\r\n <HotelOutlinedIcon classes={{ root: classes.infoIcon }} />\r\n <Typography variant=\"body1\">\r\n {generalForm.bedDetails.join(' • ')}\r\n </Typography>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <Typography variant=\"body1\" classes={{ root: classes.overview }}>\r\n {descriptionForm.overview}\r\n </Typography>\r\n\r\n <BookInfoList\r\n activity={accommodation}\r\n currency={bookAccommodationForm.values.currency}\r\n defaultExpanded={true}\r\n />\r\n </div>\r\n\r\n <div className={classes.rightSide}>\r\n <form\r\n onSubmit={handlerSubmitWrapper}\r\n className={classes.bookWrapper}\r\n >\r\n <Typography\r\n variant=\"h1\"\r\n className={classNames(classes.fontWeight, classes.inputIndent)}\r\n >\r\n {isUpdate\r\n ? t('Update Accommodation Booking')\r\n : t('Book Accommodation')}\r\n </Typography>\r\n\r\n <Field\r\n name=\"currency\"\r\n className={classNames(\r\n classes.currencyInput,\r\n classes.sectionIndent\r\n )}\r\n list={listOfCurrencies}\r\n label=\"Select currency\"\r\n component={DropDown}\r\n />\r\n \r\n {/* <Field\r\n name=\"dates\"\r\n // availableRange={getAvailableRangeDates(accommodation)}\r\n disabledDates={getDisabledDates(bookDatesData, initialDates)}\r\n changeMonthsCallback={changeMonthHandler}\r\n className={classes.inputIndent}\r\n inputClassName={classes.disableInputFocus}\r\n label=\"Select dates *\"\r\n initialFocus=\"startDate\"\r\n dateRangePickerClass=\"dateRangeOpenedPicker\"\r\n daySize={39}\r\n component={CustomDateRangePicker}\r\n updateBooking\r\n isStartDateRenderMonth={!!initialDates}\r\n /> */}\r\n <Field\r\n name=\"dates\"\r\n disabledDates={getDisabledDates(bookDatesData, initialDates)}\r\n changeMonthsCallback={changeMonthHandler}\r\n className={isSmallScreen ? classes.smallInputIndent : isMediumScreen ? classes.mediumInputIndent : classes.inputIndent}\r\n inputClassName={classes.disableInputFocus}\r\n label=\"Select dates *\"\r\n initialFocus=\"startDate\"\r\n dateRangePickerClass=\"dateRangeOpenedPicker\"\r\n // numberOfMonths={isSmallScreen ? 1 : 2}\r\n // daySize={isSmallScreen ? 30 : 39}\r\n numberOfMonths={windowWidth > 1010 ? 2 : 1 || windowWidth <= 750 ? 1 : 2 }\r\n daySize={windowWidth > 600 ? 38 : 41}\r\n component={CustomDateRangePicker}\r\n updateBooking\r\n isStartDateRenderMonth={!!initialDates}\r\n />\r\n\r\n {!!bookAccommodationForm.values.participants.length && (\r\n <FieldArray\r\n name=\"participants\"\r\n title=\"Number of guests *\"\r\n isUpdatedParticipants={isUpdatedParticipants}\r\n component={NumberOfParticipants}\r\n />\r\n )}\r\n\r\n {!!bookAccommodationForm.values.addOns.length && (\r\n <FieldArray\r\n name=\"addOns\"\r\n title=\"Add-ons\"\r\n currency={bookAccommodationForm.values.currency}\r\n component={AddOnsList}\r\n addOnDescClass={classes.addOnDescClass}\r\n addOnTitle={classes.addOnTitle}\r\n />\r\n )}\r\n\r\n\r\n \r\n\r\n <div className={classes.sectionIndent}>\r\n <Typography variant=\"h2\" className={classes.activitiesTitle}>\r\n {t('Activities')}\r\n </Typography>\r\n <div className={classes.activitiesButtons}>\r\n <TextIconButton\r\n icon={<AddCircleOutlineIcon />}\r\n text={t('Book')}\r\n click={() => {\r\n setRelatedItem(null);\r\n setOpenBookDialog(true);\r\n }}\r\n />\r\n {!!bookAccommodationForm.values.activities.length && (\r\n <TextIconButton\r\n icon={<DeleteOutlineIcon />}\r\n text={t('Delete all')}\r\n click={deleteAllRelatedItems}\r\n />\r\n )}\r\n </div>\r\n {!!bookAccommodationForm.values.activities.length && (\r\n <div className={classes.relatedFieldWrapper}>\r\n {getBookRelatedField()}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <GuestInformation />\r\n\r\n <div className={classes.paymentWrapper}>\r\n <Typography variant=\"h2\" className={classes.payment}>\r\n {t('Payment')}\r\n </Typography>\r\n <Field\r\n name=\"pay\"\r\n className={classes.paymentField}\r\n isDisabledChange={true}\r\n disabledDays={['Pay on arrival']}\r\n component={CheckboxButtonsGroup}\r\n />\r\n </div>\r\n\r\n <BookingSummary\r\n relatedItems={bookAccommodationForm.values.activities}\r\n activity={accommodation}\r\n bookActivity={bookAccommodationForm.values}\r\n generalSectionTitle=\"Accommodation\"\r\n />\r\n\r\n <FormActionButtons\r\n cancelPath={isUpdate ? '/bookings-list' : '/accommodations'}\r\n actionLabel={isUpdate ? 'Update' : 'Book'}\r\n />\r\n </form>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n bookAccommodationForm: state.form.bookAccommodationForm,\r\n businessOwner: state.businessOwner\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('bookAccommodationForm', field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'bookAccommodationForm',\r\n destroyOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(BookAccommodation));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important'\r\n },\r\n loaderWrapper: {\r\n position: 'fixed'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useQuery } from '@apollo/react-hooks';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\n\r\nimport { AppHeader, CircularLoader } from 'components';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport { getReceivedBookedAccommodationData } from 'utils/book-accommodation/prepareReceivedBookedAccoomodationData';\r\n\r\nimport { ACCOMMODATION_BOOKING } from 'graphql/queries/accommodations-bookings';\r\n\r\nimport BookAccommodation from 'pages/book-accommodation/BookAccommodation';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst UpdateAccommodationBookingWrapper = ({ businessOwner }) => {\r\n const classes = useStyles();\r\n const { id } = useParams();\r\n const confirm = React.useContext(ConfirmContext);\r\n const history = useHistory();\r\n\r\n const { loading, error, data } = useQuery(ACCOMMODATION_BOOKING, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n accommodationBookingId: parseInt(id),\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n });\r\n\r\n if (loading || !businessOwner.selectedBusinessOwner.hasOwnProperty('id')) {\r\n return (\r\n <>\r\n <AppHeader />\r\n\r\n <CircularLoader\r\n isLoading={true}\r\n loaderClassName={classes.loaderClassName}\r\n className={classes.loaderWrapper}\r\n />\r\n </>\r\n );\r\n }\r\n\r\n if (error || !data.accommodationsBookings.length) {\r\n confirm({\r\n title: 'Accommodation booking does not exist!',\r\n confirmationText: 'Back'\r\n })\r\n .then(() => history.push('/booking-list'))\r\n .catch(() => {});\r\n\r\n return <div style={{ height: '100%' }}>{''}</div>;\r\n }\r\n\r\n const bookedData = loading\r\n ? null\r\n : getReceivedBookedAccommodationData(data.accommodationsBookings[0]);\r\n\r\n return (\r\n <BookAccommodation\r\n initialValues={bookedData}\r\n bookedData={bookedData}\r\n isUpdate={true}\r\n />\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n null\r\n)(UpdateAccommodationBookingWrapper);\r\n","import moment from 'moment';\r\n\r\nimport {\r\n getReceivedAddOns,\r\n getReceivedParticipant,\r\n getReceivedSchedule,\r\n getReceivedMandatoryFees\r\n} from 'utils/book-accommodation-and-activity/prepareReceivedDataMethods';\r\nimport { getPrices as getActivityPrices } from 'utils/accommodations-and-activities/prepareReceivedActivityData';\r\nimport { getParticipants as getActivityParticipants } from 'utils/book-activity/prepareParticipants';\r\nimport { getPrices as getAccommodationPrices } from 'utils/accommodations-and-activities/prepareReceivedAccommodationData';\r\nimport { getParticipants as getAccommodationParticipants } from 'utils/book-accommodation/prepareParticipants';\r\n\r\nconst FIXED_PRICES = 'pricesFixedForm';\r\nconst CATEGORY_PRICES = 'pricesCategoryForm';\r\nconst DAILY_PRICES = 'pricesDailyForm';\r\n\r\nconst getReceivedBookedActivityData = data => {\r\n const payment = data.payments[0];\r\n const currency = payment.currency.currency;\r\n\r\n const startingDate = data.startingDate\r\n ? moment(data.startingDate, 'YYYY-MM-DD')\r\n : null;\r\n\r\n const endingDate = data.endingDate\r\n ? moment(data.endingDate, 'YYYY-MM-DD')\r\n : null;\r\n \r\n const pricesObj = getActivityPrices(data.activity);\r\n const activity = {\r\n ...data.activity,\r\n ...pricesObj\r\n };\r\n const participantData = {\r\n values: { currency: currency, startingDate: startingDate }\r\n };\r\n\r\n const activityParticipants = getActivityParticipants(\r\n activity,\r\n participantData,\r\n () => {},\r\n false\r\n );\r\n\r\n const dates = {};\r\n\r\n if (startingDate && endingDate) {\r\n dates.multiDates = {\r\n startDate: startingDate,\r\n endDate: endingDate\r\n };\r\n dates.startingDate = startingDate;\r\n } else {\r\n dates.startingDate = startingDate;\r\n }\r\n\r\n return {\r\n id: parseInt(data.id),\r\n activityId: parseInt(data.activity.id),\r\n firstName: data.guestFirstName,\r\n lastName: data.guestLastName,\r\n phone: data.guestPhoneNumber,\r\n email: data.guestEmail,\r\n platform: data.platform,\r\n pay: {\r\n 'Pay on arrival': true\r\n },\r\n currency: currency,\r\n paymentId: parseInt(payment.id),\r\n addOns: getReceivedAddOns(data.bookedAddOns),\r\n participants: getReceivedParticipant(\r\n data.guests,\r\n currency,\r\n activityParticipants\r\n ),\r\n ...getReceivedSchedule(data.schedule),\r\n accommodations: _getReceivedRelatedAccommodations(\r\n data.relatedAccommodationBooking,\r\n currency\r\n ),\r\n ...dates\r\n };\r\n};\r\n\r\nconst _getReceivedRelatedAccommodations = (\r\n relatedAccommodationBooking,\r\n currency\r\n) => {\r\n return relatedAccommodationBooking.map(item => {\r\n const payment = item.payments[0];\r\n\r\n const pricesObj = getAccommodationPrices(item.accommodation);\r\n let accommodation = {\r\n ...item.accommodation,\r\n ...pricesObj\r\n };\r\n\r\n if (accommodation.prices[0].participant.participant) {\r\n accommodation['pricesType'] = CATEGORY_PRICES;\r\n } else if (accommodation.prices[0].day) {\r\n accommodation['pricesType'] = DAILY_PRICES;\r\n } else {\r\n accommodation['pricesType'] = FIXED_PRICES;\r\n }\r\n\r\n const dates = {\r\n startDate: moment(item.fromDate, 'YYYY-MM-DD'),\r\n endDate: moment(item.toDate, 'YYYY-MM-DD')\r\n };\r\n\r\n const accommodationParticipants = getAccommodationParticipants(\r\n accommodation,\r\n currency,\r\n null,\r\n dates\r\n );\r\n\r\n const norwegianFields = {};\r\n if (item.accommodation.titleNo) {\r\n norwegianFields.title = item.accommodation.titleNo;\r\n }\r\n\r\n return {\r\n id: parseInt(item.id),\r\n accommodation: parseInt(item.accommodation.id),\r\n pricesType: accommodation.pricesType,\r\n title: item.accommodation.title,\r\n Norwegian: norwegianFields,\r\n platform: item.platform,\r\n currency: currency,\r\n paymentId: parseInt(payment.id),\r\n dates: dates,\r\n addOns: getReceivedAddOns(item.bookedAddOns),\r\n mandatoryFees:getReceivedMandatoryFees(item.bookedMandatoryFees),\r\n participants: getReceivedParticipant(\r\n item.guests,\r\n currency,\r\n accommodationParticipants\r\n )\r\n };\r\n });\r\n};\r\n\r\nexport { getReceivedBookedActivityData };\r\n","import gql from 'graphql-tag';\r\n\r\nexport const CREATE_ACTIVITY_BOOKING = gql`\r\n mutation createActivityBooking(\r\n $accommodationBooking: AccommodationBookingInput\r\n $activityBooking: ActivityBookingInput!\r\n ) {\r\n createActivityBooking(\r\n accommodationBooking: $accommodationBooking\r\n activityBooking: $activityBooking\r\n ) {\r\n id\r\n clientSecret\r\n nextActionUrl\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_ACTIVITY_BOOKING = gql`\r\n mutation updateActivityBooking(\r\n $activityBooking: ActivityBookingInput!\r\n $accommodationBooking: AccommodationBookingInput\r\n $deletedAccommodationBooking: [Int]\r\n ) {\r\n updateActivityBooking(\r\n activityBooking: $activityBooking\r\n accommodationBooking: $accommodationBooking\r\n deletedAccommodationBooking: $deletedAccommodationBooking\r\n ) {\r\n id\r\n }\r\n }\r\n`;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n wrapper: {\r\n marginBottom: '17px'\r\n },\r\n label: {\r\n marginBottom: '22px',\r\n color: '#071B27',\r\n fontSize: 15,\r\n lineHeight: '12px'\r\n },\r\n radioGroup: {\r\n display: 'flex',\r\n flexDirection: 'column'\r\n },\r\n labelWrapper: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'baseline'\r\n },\r\n time: {\r\n width: '33%'\r\n },\r\n seats: {\r\n width: '33%',\r\n textAlign: 'center',\r\n color: '#838383',\r\n height: '18px'\r\n },\r\n duration: {\r\n width: '33%',\r\n textAlign: 'right',\r\n color: '#000'\r\n },\r\n radioBtnLabelChecked: {\r\n color: '#000000',\r\n fontWeight: 500\r\n },\r\n capitalize: {\r\n textTransform: 'capitalize'\r\n }\r\n});\r\n\r\nexport const formControlLabelStyles = makeStyles({\r\n root: {\r\n marginRight: 0,\r\n borderBottom: '1px solid #e2ebf6',\r\n padding: '8px 0'\r\n },\r\n label: {\r\n width: '100%',\r\n color: '#838383'\r\n }\r\n});\r\n\r\nexport const radioBtnStyles = makeStyles(theme => ({\r\n root: {\r\n color: theme.baseUI.color,\r\n fontSize: 18\r\n },\r\n checked: {\r\n color: theme.baseUI.color\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\n\r\nimport { Typography } from '@material-ui/core';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\n\r\nimport { useStyles, formControlLabelStyles, radioBtnStyles } from './styles';\r\n\r\nconst StartTimeAndDurationRadioButtonsGroup = ({\r\n input,\r\n label,\r\n list,\r\n className,\r\n labelClass,\r\n startTimeClass\r\n}) => {\r\n const classes = useStyles();\r\n const formControlLabelClasses = formControlLabelStyles();\r\n const radioBtnSClasses = radioBtnStyles();\r\n const [t] = useTranslation();\r\n\r\n if (!list || !list.length) return null;\r\n\r\n const onChangeHandler = e => {\r\n const updatedItem = list.find(item => item.id === e.target.value);\r\n\r\n input.onChange(updatedItem);\r\n };\r\n\r\n return (\r\n <div className={classNames(classes.wrapper, className)}>\r\n <div className={classNames(classes.label, labelClass)}>{t(label)}</div>\r\n <RadioGroup\r\n aria-label=\"position\"\r\n name=\"position\"\r\n row\r\n value={input.value.id || null}\r\n onChange={onChangeHandler}\r\n className={classes.radioGroup}\r\n >\r\n {list.map((item, index) => {\r\n if (!item.seatsLeft) return null;\r\n return (\r\n <FormControlLabel\r\n classes={formControlLabelClasses}\r\n key={index}\r\n value={item.id}\r\n control={<Radio color=\"default\" classes={radioBtnSClasses} />}\r\n label={\r\n <div className={classes.labelWrapper}>\r\n <Typography\r\n variant=\"h2\"\r\n className={classNames(\r\n classes.time,\r\n {\r\n [classes.radioBtnLabelChecked]:\r\n item.id === input.value.id\r\n },\r\n startTimeClass\r\n )}\r\n >\r\n {item.startTime}\r\n </Typography>\r\n <Typography\r\n variant=\"body1\"\r\n className={classNames(classes.seats, {\r\n [classes.radioBtnLabelChecked]: item.id === input.value.id\r\n })}\r\n >\r\n {item.seatsLeft} {t('Seats left')}\r\n </Typography>\r\n <Typography\r\n variant=\"body1\"\r\n classes={{ root: classes.duration }}\r\n >\r\n {item.duration}{' '}\r\n <span className={classes.capitalize}>\r\n {t(item.timeType)}\r\n </span>\r\n </Typography>\r\n </div>\r\n }\r\n labelPlacement=\"end\"\r\n />\r\n );\r\n })}\r\n </RadioGroup>\r\n </div>\r\n );\r\n};\r\n\r\nexport default StartTimeAndDurationRadioButtonsGroup;\r\n","import moment from 'moment';\r\n\r\nimport {\r\n getTotalPrice,\r\n getTotalRelatedItems\r\n} from 'utils/book-accommodation-and-activity/totalPrice';\r\nimport {\r\n getAddOns,\r\n getMandatoryFees,\r\n getGuests,\r\n getSchedule,\r\n getStartingDate\r\n} from 'utils/book-accommodation-and-activity/prepareBookDataMethods';\r\n\r\nconst getPreparedBookActivityData = (\r\n activity,\r\n bookActivityForm,\r\n deleteRelatedAccommodations,\r\n isWidget,\r\n stripeToken,\r\n payPalOrderId\r\n) => {\r\n const bookActivity = bookActivityForm.values;\r\n const adminPlatform = bookActivity.platform\r\n ? bookActivity.platform\r\n : 'Admin panel';\r\n const platform = isWidget ? 'Widget' : adminPlatform;\r\n const idObj = bookActivity.id ? { id: bookActivity.id } : {};\r\n const paymentIdObj = bookActivity.paymentId\r\n ? { id: bookActivity.paymentId }\r\n : {};\r\n\r\n let paymentType = 'CASH';\r\n if (stripeToken) paymentType = 'STRIPE';\r\n if (payPalOrderId) paymentType = 'PAYPAL';\r\n\r\n return {\r\n activityBooking: {\r\n ...idObj,\r\n activityId: activity.generalForm.id,\r\n guestFirstName: bookActivity.firstName,\r\n guestLastName: bookActivity.lastName,\r\n guestPhoneNumber: bookActivity.phone,\r\n guestEmail: bookActivity.email,\r\n platform: platform,\r\n payment: {\r\n ...paymentIdObj,\r\n paymentType: paymentType,\r\n stripeToken: stripeToken,\r\n payPalOrderId: payPalOrderId,\r\n currency: bookActivity.currency,\r\n totalPrice: getTotalPrice(\r\n activity,\r\n bookActivity.dates,\r\n bookActivity.participants,\r\n bookActivity.addOns,\r\n null,\r\n bookActivity.accommodations,\r\n bookActivity.currency\r\n )\r\n },\r\n ...getStartingDate(bookActivity, bookActivity.multiDates),\r\n ...getSchedule(bookActivity),\r\n ...getAddOns(bookActivity, bookActivity.currency),\r\n ...getGuests(bookActivity, activity.pricesType, bookActivity.currency)\r\n },\r\n ..._getAccommodationBooking(bookActivity, isWidget),\r\n ..._getDeletedAccommodationBookings(deleteRelatedAccommodations)\r\n };\r\n};\r\n\r\nconst _getAccommodationBooking = (bookActivity, isWidget) => {\r\n if (!bookActivity.accommodations.length) return {};\r\n\r\n const accommodations = isWidget\r\n ? bookActivity.accommodations.filter(item => item.isSelected)\r\n : bookActivity.accommodations;\r\n\r\n if (!accommodations.length) return {};\r\n\r\n const accommodation = accommodations[0];\r\n const idObj = accommodation.id && !isWidget ? { id: accommodation.id } : {};\r\n const paymentIdObj =\r\n accommodation.paymentId && !isWidget ? { id: accommodation.paymentId } : {};\r\n const accommodationId = isWidget\r\n ? accommodation.id\r\n : accommodation.accommodation;\r\n\r\n return {\r\n accommodationBooking: {\r\n ...idObj,\r\n accommodationId: accommodationId,\r\n platform: isWidget ? 'Widget' : 'Admin panel',\r\n fromDate: moment(accommodation.dates.startDate).format('YYYY-MM-DD'),\r\n toDate: moment(accommodation.dates.endDate).format('YYYY-MM-DD'),\r\n payment: {\r\n ...paymentIdObj,\r\n paymentType: 'CASH',\r\n currency: bookActivity.currency,\r\n totalPrice: getTotalRelatedItems(\r\n bookActivity.accommodations,\r\n bookActivity.currency\r\n )\r\n },\r\n ...getAddOns(accommodation, bookActivity.currency),\r\n ...getMandatoryFees(accommodation, bookActivity.currency),\r\n ...getGuests(\r\n accommodation,\r\n accommodation.pricesType,\r\n bookActivity.currency,\r\n true\r\n )\r\n }\r\n };\r\n};\r\n\r\nconst _getDeletedAccommodationBookings = deleteRelatedAccommodations => {\r\n if (!deleteRelatedAccommodations || !deleteRelatedAccommodations.length) {\r\n return {};\r\n }\r\n\r\n return {\r\n deletedAccommodationBooking: deleteRelatedAccommodations\r\n };\r\n};\r\n\r\nexport { getPreparedBookActivityData };\r\n","import { isRequired, isEmail } from 'utils/validators';\r\n\r\nconst SCHEDULE_PASS_NAME = 'schedulePassForm';\r\nconst SCHEDULE_DATE_FORM = 'scheduleDateForm';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (values.participants && values.participants.length) {\r\n let participantsArrayErrors = [];\r\n let isValidParticipants = false;\r\n\r\n values.participants.forEach((item, index) => {\r\n if (item.participants && parseInt(item.participants) > 0) {\r\n isValidParticipants = true;\r\n }\r\n\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (!isValidParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: 'Value for at least one participant should be filled in'\r\n };\r\n }\r\n }\r\n\r\n if (\r\n !errors.participants &&\r\n values.participants &&\r\n values.participants.length\r\n ) {\r\n const availableParticipants = values.maxParticipants;\r\n const participantsArrayErrors = [];\r\n let totalParticipants = 0;\r\n\r\n values.participants.forEach((item, index) => {\r\n if (item.participants && item.participants.length) {\r\n totalParticipants += parseInt(item.participants);\r\n }\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (totalParticipants > availableParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: `The number of Participants can’t exceed ${availableParticipants}`\r\n };\r\n errors.isMaxParticipantsErrors = true;\r\n }\r\n }\r\n\r\n if (values.scheduleType === SCHEDULE_DATE_FORM) {\r\n if (!values.multiDates?.startDate) {\r\n errors.startingDate = 'Starting date is required';\r\n }\r\n } else if (\r\n values.scheduleType !== SCHEDULE_PASS_NAME &&\r\n !values.startingDate &&\r\n (!values.multiDates?.startDate || !values?.multiDates.endDate)\r\n ) {\r\n errors.startingDate = 'Starting date is required';\r\n errors.multiDates = 'Starting date is required';\r\n }\r\n\r\n if (isRequired(values.firstName || '', true)) {\r\n errors.firstName = 'First name is required';\r\n }\r\n\r\n if (isRequired(values.lastName || '', true)) {\r\n errors.lastName = 'Last name is required';\r\n }\r\n\r\n if (isRequired(values.phone || '', true)) {\r\n errors.phone = 'Phone is required';\r\n }\r\n\r\n if (isRequired(values.email || '', true)) {\r\n errors.email = 'Email is required';\r\n } else if (isEmail(values.email || '', true)) {\r\n errors.email = 'Invalid email';\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n width: '100%',\r\n minHeight: 'calc(100% - 52px)',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n alignItems : 'center'\r\n },\r\n },\r\n leftSide: {\r\n minWidth: '340px',\r\n width: '340px',\r\n boxShadow: 'inset -1px 0px 0px #e2ebf6',\r\n padding: '12px 30px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n minWidth: '100%',\r\n boxShadow: 'none',\r\n padding: '10px 40px',\r\n },\r\n },\r\n rightSide: {\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '10px 20px',\r\n },\r\n },\r\n bookWrapper: {\r\n width: '618px',\r\n padding: '30px 0 36px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n // padding: '20px 0 30px',\r\n },\r\n },\r\n fontWeight: {\r\n fontWeight: 'bold',\r\n },\r\n productCode: {\r\n fontWeight: 'bold',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.035em',\r\n marginBottom: '6px',\r\n },\r\n photo: {\r\n backgroundSize: 'contain',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center',\r\n width: '100%',\r\n height: '180px',\r\n border: '1px solid #BECEDA',\r\n backgroundColor: '#E2F5F8',\r\n marginBottom: '24px',\r\n },\r\n listInfo: {\r\n margin: '18px 0',\r\n },\r\n infoItem: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n infoIcon: {\r\n fontSize: '16px',\r\n marginRight: '15px',\r\n },\r\n overview: {\r\n marginBottom: '24px',\r\n },\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important',\r\n },\r\n loaderWrapper: {\r\n position: 'fixed',\r\n },\r\n sectionIndent: {\r\n marginBottom: '42px',\r\n [theme.breakpoints.down('sm')]:{\r\n paddingLeft: '20px'\r\n }\r\n\r\n },\r\n inputIndent: {\r\n marginBottom: '24px',\r\n },\r\n currencyInput: {\r\n width: '190px',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '90%',\r\n padding: '20px 20px'\r\n }\r\n },\r\n accommodationsTitle: {\r\n marginBottom: '13px',\r\n [theme.breakpoints.down('sm')]:{\r\n \r\n }\r\n },\r\n paymentWrapper: {\r\n borderBottom: '1px solid #e2ebf6',\r\n paddingBottom: '10px',\r\n marginBottom: '42px',\r\n [theme.breakpoints.down('sm')]:{\r\n paddingLeft: '20px'\r\n }\r\n },\r\n payment: {\r\n marginBottom: '13px',\r\n\r\n },\r\n paymentField: {\r\n marginBottom: 0,\r\n },\r\n addOnTitle: {\r\n fontSize: '13px',\r\n [theme.breakpoints.down('sm')]:{\r\n // textAlign: 'center'\r\n }\r\n },\r\n addOnDescClass: {\r\n width: 'calc(100% - 163px)',\r\n [theme.breakpoints.down('sm')]: {\r\n \r\n },\r\n },\r\n disableInputFocus: {\r\n boxShadow: 'none !important',\r\n display: 'none !important '\r\n },\r\n inputIndent:{\r\n [theme.breakpoints.down('sm')]:{\r\n paddingLeft: '20px'\r\n }\r\n },\r\n smallCalendar: {\r\n width: '100%',\r\n paddingLeft: '20px'\r\n \r\n },\r\n \r\n\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSnackbar } from 'notistack';\r\nimport { connect } from 'react-redux';\r\nimport classNames from 'classnames';\r\nimport { useMediaQuery } from '@material-ui/core';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\nimport { change, Field, FieldArray, reduxForm } from 'redux-form';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport LocationOnOutlinedIcon from '@material-ui/icons/LocationOnOutlined';\r\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\r\n\r\nimport {\r\n ACTIVITIES_AVAILABLE_PARTICIPANTS,\r\n ACTIVITY\r\n} from 'graphql/queries/activities';\r\nimport {\r\n CREATE_ACTIVITY_BOOKING,\r\n UPDATE_ACTIVITY_BOOKING\r\n} from 'graphql/mutations/activities-bookings';\r\n\r\nimport {\r\n AppHeader,\r\n CircularLoader,\r\n SingleDatePicker,\r\n DropDown,\r\n TextIconButton,\r\n CheckboxButtonsGroup,\r\n FormActionButtons,\r\n BookAccommodationDialog,\r\n BookInfoList,\r\n MultiDatePickerCalendar\r\n} from 'components';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport StartTimeAndDurationRadioButtonsGroup from './components/start-time-and-duration-radio-buttons-group/StartTimeAndDurationRadioButtonsGroup';\r\nimport NumberOfParticipants from './components/number-of-participants/NumberOfParticipants';\r\nimport AddOnsList from './components/add-ons-list/AddOnsList';\r\nimport GuestInformation from './components/guest-information/GuestInformation';\r\nimport BookingSummary from './components/booking-summary/BookingSummary';\r\nimport BookRelatedField from './components/book-related-field/BookRelatedField';\r\n\r\nimport { getListOfAvailableCurrencies } from 'utils/book-accommodation-and-activity/currency';\r\nimport {\r\n getReceivedActivityBookingsDates,\r\n getReceivedActivityData\r\n} from 'utils/accommodations-and-activities/prepareReceivedActivityData';\r\nimport { getParticipants } from 'utils/book-activity/prepareParticipants';\r\nimport { getPreparedBookActivityData } from 'utils/book-activity/prepareBookActivityData';\r\nimport {\r\n getAvailableRangeDates,\r\n getDefaultStartTime,\r\n getDisabledDates,\r\n getListOfStartTimeAndDuration,\r\n getListOfStartTimeAndDurationByCutoffPeriod\r\n} from 'utils/book-activity/availableDates';\r\nimport {\r\n getAvailableParticipantsForStartTime,\r\n getMaxParticipants,\r\n getMaxParticipantsActivitySeveralDays\r\n} from 'utils/book-activity/maxParticipants';\r\n\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport validate from './validate';\r\n\r\nimport useStyles from './styles';\r\nimport { getRange } from '../../utils/book-accommodation/availableDates';\r\n\r\nconst initialValues = {\r\n maxParticipants: 0,\r\n currency: 'NOK',\r\n participants: [],\r\n addOns: [],\r\n mandatoryFees: [],\r\n accommodations: [],\r\n pay: {\r\n 'Pay on arrival': true\r\n },\r\n scheduleType: null\r\n};\r\n\r\nconst SCHEDULE_DATE_NO_TIME_NAME = 'scheduleDateForm';\r\nconst SCHEDULE_DATE_AND_TIME_NAME = 'scheduleDateTimeForm';\r\nconst SCHEDULE_PASS_NAME = 'schedulePassForm';\r\n\r\nconst BookActivity = ({\r\n bookActivityForm,\r\n changeFormFieldValue,\r\n handleSubmit,\r\n bookedData,\r\n isUpdate,\r\n businessOwner\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n const { id } = useParams();\r\n const history = useHistory();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const confirm = React.useContext(ConfirmContext);\r\n\r\n const selectedLanguage = i18n.language;\r\n const ownerId =\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id;\r\n\r\n const activityId = bookActivityForm.values.activityId;\r\n\r\n const initialStartingDate =\r\n bookedData && bookedData.startingDate\r\n ? bookedData.startingDate\r\n : bookedData && bookedData.multiDates\r\n ? bookedData.multiDates.startDate\r\n : moment();\r\n\r\n const [\r\n deletedRelatedAccommodations,\r\n setDeletedRelatedAccommodations\r\n ] = React.useState([]);\r\n const [relatedItem, setRelatedItem] = React.useState(null);\r\n const [isOpenBookDialog, setOpenBookDialog] = React.useState(false);\r\n const [isLoading, setLoading] = React.useState(null);\r\n const [activity, setActivity] = React.useState(null);\r\n const [isUpdatedParticipants, setIsUpdatedParticipants] = React.useState(\r\n false\r\n );\r\n const [\r\n listStartTimeAndDuration,\r\n setListStartTimeAndDuration\r\n ] = React.useState([]);\r\n const [listOfCurrencies, setListOfCurrencies] = React.useState([]);\r\n const [\r\n availableParticipantsData,\r\n setAvailableParticipantsData\r\n ] = React.useState(null);\r\n\r\n const [createActivityBooking] = useMutation(CREATE_ACTIVITY_BOOKING);\r\n const [updateActivityBooking] = useMutation(UPDATE_ACTIVITY_BOOKING);\r\n\r\n const { loading, data } = useQuery(ACTIVITY, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n activityId: activityId || parseInt(id),\r\n businessOwnerId: ownerId\r\n }\r\n });\r\n\r\n const isSmallScreen = useMediaQuery((theme) => theme.breakpoints.down('sm'));\r\n const isMediumScreen = useMediaQuery((theme) => theme.breakpoints.down('md'));\r\n const [windowWidth, setWindowWidth] = React.useState(window.innerWidth);\r\n\r\n React.useLayoutEffect(() => {\r\n const updateSize = () => {\r\n setWindowWidth(window.innerWidth);\r\n };\r\n window.addEventListener('resize', updateSize);\r\n updateSize();\r\n return () => window.removeEventListener('resize', updateSize);\r\n }, []);\r\n\r\n const {\r\n loading: isAvailableParticipantsLoading,\r\n data: receivedAvailableParticipantsData,\r\n refetch: refetchParticipantsData\r\n } = useQuery(ACTIVITIES_AVAILABLE_PARTICIPANTS, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n activityId: activityId || parseInt(id),\r\n businessOwnerId: ownerId,\r\n startPeriod: moment(initialStartingDate)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(initialStartingDate).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n if (!receivedAvailableParticipantsData) return;\r\n\r\n const availableParticipantsData = getReceivedActivityBookingsDates(\r\n receivedAvailableParticipantsData\r\n );\r\n\r\n setAvailableParticipantsData(availableParticipantsData);\r\n }, [receivedAvailableParticipantsData]);\r\n\r\n React.useEffect(() => {\r\n if (data && data.activities && data.activities.length) {\r\n const receivedActivity = data.activities[0];\r\n const activityData = getReceivedActivityData(receivedActivity);\r\n\r\n activityData['pricesType'] = receivedActivity['pricesType'];\r\n activityData['scheduleType'] = receivedActivity['scheduleType'];\r\n\r\n changeFormFieldValue(`scheduleType`, activityData['scheduleType']);\r\n\r\n if (bookedData) {\r\n handleListStartTimeAndDurationField(activityData);\r\n setParticipants(activityData);\r\n }\r\n\r\n setListOfAvailableCurrencies(receivedActivity);\r\n setMaxParticipants(activityData['generalForm'].maxParticipants);\r\n\r\n setActivity(activityData);\r\n setAddOns(activityData);\r\n\r\n if (activityData.scheduleType === SCHEDULE_PASS_NAME) {\r\n setParticipants(activityData);\r\n }\r\n }\r\n }, [data]);\r\n\r\n React.useEffect(() => {\r\n const participants = bookActivityForm.values.participants;\r\n if (participants && participants.length) {\r\n setParticipants(activity);\r\n }\r\n }, [bookActivityForm.values.currency]);\r\n\r\n React.useEffect(() => {\r\n const multiDates = bookActivityForm.values.multiDates;\r\n if (multiDates) {\r\n handleMultiDateAvailableSeats(activity);\r\n setParticipants(activity);\r\n }\r\n }, [activity, availableParticipantsData, bookActivityForm.values.multiDates]);\r\n\r\n React.useEffect(() => {\r\n const startingDate = bookActivityForm.values.startingDate;\r\n\r\n if (startingDate) {\r\n handleListStartTimeAndDurationField(activity);\r\n setParticipants(activity);\r\n }\r\n }, [bookActivityForm.values.startingDate]);\r\n\r\n React.useEffect(() => {\r\n const startTime = bookActivityForm.values.startTime;\r\n\r\n if (startTime) {\r\n changeFormFieldValue('maxParticipants', startTime.seatsLeft);\r\n }\r\n }, [bookActivityForm.values.startTime]);\r\n\r\n const setListOfAvailableCurrencies = receivedActivity => {\r\n const listOfAvailableCurrencies = getListOfAvailableCurrencies(\r\n receivedActivity.prices\r\n );\r\n const selectedCurrency = bookActivityForm.values.currency;\r\n\r\n setListOfCurrencies(listOfAvailableCurrencies);\r\n\r\n if (!listOfAvailableCurrencies.includes(selectedCurrency)) {\r\n changeFormFieldValue('currency', listOfAvailableCurrencies[0]);\r\n }\r\n };\r\n\r\n const handleMultiDateAvailableSeats = activity => {\r\n if (!activity || !bookActivityForm.values.multiDates) return;\r\n\r\n const startDate = bookActivityForm.values.multiDates.startDate;\r\n const endDate = bookActivityForm.values.multiDates.endDate;\r\n\r\n if (!startDate || !endDate) return;\r\n\r\n const availableParticipantsPerDate = availableParticipantsData\r\n ? availableParticipantsData.activities[0].availableParticipantsPerDate\r\n : [];\r\n\r\n const availableParticipants = getMaxParticipantsActivitySeveralDays(\r\n availableParticipantsPerDate,\r\n startDate,\r\n endDate,\r\n bookedData\r\n );\r\n\r\n if (availableParticipants !== null) {\r\n setMaxParticipants(availableParticipants);\r\n } else {\r\n setMaxParticipants(activity.generalForm.maxParticipants);\r\n }\r\n };\r\n\r\n const handleListStartTimeAndDurationField = activity => {\r\n if (!activity) return;\r\n\r\n const startingDate = bookActivityForm.values.startingDate;\r\n const availableParticipantsPerDate = availableParticipantsData\r\n ? availableParticipantsData.activities[0].availableParticipantsPerDate\r\n : [];\r\n let listOfStartTimeAndDuration = getListOfStartTimeAndDuration(\r\n availableParticipantsPerDate,\r\n activity,\r\n bookActivityForm\r\n );\r\n listOfStartTimeAndDuration = getListOfStartTimeAndDurationByCutoffPeriod(\r\n activity,\r\n listOfStartTimeAndDuration,\r\n startingDate\r\n );\r\n let selectedStartTime = getDefaultStartTime(\r\n listOfStartTimeAndDuration,\r\n bookActivityForm\r\n );\r\n\r\n if (!selectedStartTime) {\r\n setMaxParticipants(activity.generalForm.maxParticipants);\r\n availableParticipantsPerDate.map(item => {\r\n const formattedStartDate = startingDate\r\n ? moment(startingDate).format('YYYY-MM-DD')\r\n : '';\r\n if (!item.startTime && item.date === formattedStartDate) {\r\n setMaxParticipants(item.availableParticipants);\r\n }\r\n });\r\n } else {\r\n setMaxParticipants(selectedStartTime.seatsLeft);\r\n\r\n listOfStartTimeAndDuration = getAvailableParticipantsForStartTime(\r\n listOfStartTimeAndDuration,\r\n bookedData,\r\n bookActivityForm,\r\n availableParticipantsData\r\n );\r\n }\r\n\r\n selectedStartTime = getDefaultStartTime(\r\n listOfStartTimeAndDuration,\r\n bookActivityForm\r\n );\r\n\r\n changeFormFieldValue('startTime', selectedStartTime);\r\n setListStartTimeAndDuration(listOfStartTimeAndDuration);\r\n };\r\n\r\n const setParticipants = activity => {\r\n const previousParticipants = bookActivityForm.values.participants || [];\r\n const participants = getParticipants(\r\n activity,\r\n bookActivityForm,\r\n setIsUpdatedParticipants,\r\n isUpdatedParticipants,\r\n bookActivityForm.values.currency,\r\n previousParticipants\r\n );\r\n\r\n changeFormFieldValue('participants', participants);\r\n };\r\n\r\n const setAddOns = activity => {\r\n const previousAddOns = bookActivityForm.values.addOns || [];\r\n\r\n const addOnsList = activity.addOnsForm.addOns.map(item => {\r\n const theSameAddOn = previousAddOns.find(addOn => addOn.id === item.id);\r\n return {\r\n ...item,\r\n value: theSameAddOn ? theSameAddOn.value : 0,\r\n originalId: theSameAddOn ? theSameAddOn.originalId : null\r\n };\r\n });\r\n\r\n changeFormFieldValue('addOns', addOnsList);\r\n };\r\n\r\n const setMaxParticipants = seatsLeft => {\r\n const maxParticipants = getMaxParticipants(\r\n seatsLeft,\r\n bookedData,\r\n bookActivityForm,\r\n availableParticipantsData\r\n );\r\n\r\n changeFormFieldValue('maxParticipants', maxParticipants);\r\n };\r\n\r\n const changeMonthHandler = date => {\r\n refetchParticipantsData({\r\n activityId: activityId || parseInt(id),\r\n startPeriod: moment(date)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(date).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n });\r\n };\r\n\r\n const submit = () => {\r\n setLoading(true);\r\n\r\n const data = getPreparedBookActivityData(\r\n activity,\r\n bookActivityForm,\r\n deletedRelatedAccommodations\r\n );\r\n\r\n if (isUpdate) {\r\n updateActivityBooking({ variables: data }).then(\r\n () => {\r\n \r\n enqueueSnackbar(t('Activity booking has been successfully updated'), {\r\n variant: 'success'\r\n });\r\n history.push({\r\n pathname: '/bookings-list'\r\n });\r\n },\r\n () => {\r\n setLoading(false);\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n }\r\n );\r\n } else {\r\n createActivityBooking({ variables: data }).then(\r\n () => {\r\n \r\n enqueueSnackbar(t('Activity has been successfully booked'), {\r\n variant: 'success'\r\n });\r\n history.push({\r\n pathname: '/activities'\r\n });\r\n },\r\n () => {\r\n setLoading(false);\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n }\r\n );\r\n }\r\n };\r\n\r\n const getBookRelatedField = () => {\r\n const accommodation = bookActivityForm.values.accommodations[0];\r\n return (\r\n <BookRelatedField\r\n title={\r\n getFormByCurrentLanguage(\r\n selectedLanguage,\r\n accommodation,\r\n accommodation['Norwegian']\r\n ).title\r\n }\r\n addOns={accommodation.addOns}\r\n mandatoryFees={accommodation.mandatoryFees}\r\n deleteCallBack={() => deleteRelatedAccommodation(accommodation)}\r\n editCallBack={() => {\r\n setRelatedItem(accommodation);\r\n setOpenBookDialog(true);\r\n }}\r\n />\r\n );\r\n };\r\n\r\n const addRelatedAccommodation = accommodation => {\r\n setOpenBookDialog(false);\r\n changeFormFieldValue('accommodations', [accommodation]);\r\n };\r\n\r\n const deleteRelatedAccommodation = deleteItem => {\r\n confirm({\r\n title: 'Are you sure you want to delete it?',\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n changeFormFieldValue('accommodations', []);\r\n\r\n if (deleteItem.id) {\r\n setDeletedRelatedAccommodations([\r\n ...deletedRelatedAccommodations,\r\n deleteItem.id\r\n ]);\r\n }\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const cancelRelatedAccommodation = () => {\r\n confirm({\r\n title: 'You have unsaved changes',\r\n description: t('Are you sure you want to cancel?'),\r\n confirmationText: 'Cancel',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => setOpenBookDialog(false))\r\n .catch(() => {});\r\n };\r\n\r\n const handlerSubmitWrapper = props => {\r\n if (bookActivityForm.syncErrors) {\r\n const syncErrors = bookActivityForm.syncErrors;\r\n const errorsLength = Object.keys(syncErrors).length;\r\n\r\nconst availableParticipantsPerDate = availableParticipantsData\r\n ? availableParticipantsData.activities[0].availableParticipantsPerDate.filter(\r\n item => item.startDate = bookActivityForm.startDate\r\n )\r\n : [];\r\n\r\n if (syncErrors.isMaxParticipantsErrors && errorsLength === 2) {\r\n const error = syncErrors.participants['_error'];\r\n const errorSplit = error.split(' ');\r\n const errorLength = errorSplit.length;\r\n enqueueSnackbar(\r\n t('The number of Participants can’t exceed', {\r\n number: errorSplit[errorLength - 1]\r\n }),\r\n {\r\n variant: 'warning'\r\n }\r\n );\r\n } else {\r\n enqueueSnackbar(t('Please fill in all the required fields'), {\r\n variant: 'warning'\r\n });\r\n }\r\n }\r\n\r\n handleSubmit(submit)(props);\r\n };\r\n\r\n const updateRelatedAccommodation = accommodation => {\r\n setOpenBookDialog(false);\r\n changeFormFieldValue('accommodations', [\r\n ...bookActivityForm.values.accommodations.map(item => {\r\n if (item.accommodation === accommodation.accommodation) {\r\n return accommodation;\r\n }\r\n return item;\r\n })\r\n ]);\r\n };\r\n\r\n const bookedDates =(\r\n availableParticipantsData\r\n ) => {\r\n \r\n data?.activities?.[0]?.activitybookingSet?.reduce(\r\n (acc, { endingDate, startingDate, isCanceled }) => {\r\n if (!isCanceled) {\r\n const effectiveEndingDate = endingDate || startingDate;\r\n return [\r\n ...acc,\r\n ...getRange(startingDate, effectiveEndingDate).map(v => v.format('YYYY-MM-DD'))\r\n ];\r\n }\r\n const availableParticipantsPerDate = availableParticipantsData\r\n ? availableParticipantsData.activities[0].availableParticipantsPerDate\r\n : [];\r\n return acc.filter(bookedDate => !availableParticipantsPerDate.includes(bookedDate));\r\n },\r\n []\r\n );\r\n}\r\n\r\n return (\r\n <>\r\n <AppHeader />\r\n\r\n {activity && isOpenBookDialog && (\r\n <BookAccommodationDialog\r\n open={isOpenBookDialog}\r\n ownerId={ownerId}\r\n onCancel={cancelRelatedAccommodation}\r\n onConfirm={addRelatedAccommodation}\r\n onUpdate={updateRelatedAccommodation}\r\n relatedAccommodationsForm={activity.relatedAccommodationsForm}\r\n currency={bookActivityForm.values.currency}\r\n initialValues={\r\n relatedItem || {\r\n participants: [],\r\n addOns: [],\r\n mandatoryFees: []\r\n }\r\n }\r\n />\r\n )}\r\n\r\n <CircularLoader\r\n isLoading={loading || isAvailableParticipantsLoading || isLoading}\r\n loaderClassName={classes.loaderClassName}\r\n className={classes.loaderWrapper}\r\n />\r\n\r\n {activity && (\r\n <div className={classes.root}>\r\n <div className={classes.leftSide}>\r\n <Typography variant=\"h3\" classes={{ root: classes.productCode }}>\r\n {t('Product code')}: {activity.generalForm.productCode}\r\n </Typography>\r\n\r\n <div\r\n className={classes.photo}\r\n style={{\r\n backgroundImage: `url(${activity.generalForm.coverPhoto.image})`\r\n }}\r\n >\r\n {''}\r\n </div>\r\n\r\n <Typography variant=\"h2\" className={classes.fontWeight}>\r\n {\r\n getFormByCurrentLanguage(\r\n selectedLanguage,\r\n activity.generalForm,\r\n activity['generalForm-Norwegian']\r\n ).title\r\n }\r\n </Typography>\r\n\r\n <div className={classes.listInfo}>\r\n <div className={classes.infoItem}>\r\n <LocationOnOutlinedIcon classes={{ root: classes.infoIcon }} />\r\n <Typography variant=\"body1\">\r\n {activity.generalForm.startingPoint}\r\n </Typography>\r\n </div>\r\n </div>\r\n\r\n <Typography variant=\"body1\" classes={{ root: classes.overview }}>\r\n {\r\n getFormByCurrentLanguage(\r\n selectedLanguage,\r\n activity.generalForm,\r\n activity['descriptionForm-Norwegian']\r\n ).overview\r\n }\r\n </Typography>\r\n\r\n <BookInfoList\r\n activity={activity}\r\n currency={bookActivityForm.values.currency}\r\n defaultExpanded={true}\r\n />\r\n </div>\r\n\r\n <div className={classes.rightSide}>\r\n <form\r\n onSubmit={handlerSubmitWrapper}\r\n className={classes.bookWrapper}\r\n >\r\n <Typography\r\n variant=\"h1\"\r\n className={classNames(classes.fontWeight, classes.inputIndent)}\r\n >\r\n {isUpdate ? t('Update Activity Booking') : t('Book Activity')}\r\n </Typography>\r\n\r\n <Field\r\n name=\"currency\"\r\n className={classNames(\r\n classes.currencyInput,\r\n classes.sectionIndent\r\n )}\r\n list={listOfCurrencies}\r\n label=\"Select currency\"\r\n component={DropDown}\r\n />\r\n\r\n {activity.scheduleType === SCHEDULE_DATE_NO_TIME_NAME && (\r\n <Field\r\n name=\"multiDates\"\r\n label=\"Starting date *\"\r\n // availableRange={getAvailableRangeDates(activity)}\r\n className={isSmallScreen ? classes.smallCalendar : isMediumScreen ? classes.mediumCalendar : classes.calendar}\r\n disabledDates={getDisabledDates(\r\n availableParticipantsData,\r\n bookedData && bookedData.multiDates,\r\n activity\r\n ).concat(bookedDates)}\r\n changeMonthsCallback={changeMonthHandler}\r\n // numberOfMonths={isSmallScreen ? 1 : 2}\r\n // daySize={isSmallScreen ? 30 : 39}\r\n numberOfMonths={windowWidth > 1010 ? 2 : 1 || windowWidth <= 750 ? 1 : 2 }\r\n daySize={windowWidth > 600 ? 38 : 41}\r\n initialFocus=\"startDate\"\r\n dateRangePickerClass=\"dateRangeOpenedPicker\"\r\n inputClassName={classes.disableInputFocus}\r\n component={MultiDatePickerCalendar}\r\n cutoffData={activity[activity.scheduleType]}\r\n isStartDateRenderMonth={\r\n !!(bookedData && bookedData.multiDates)\r\n }\r\n />\r\n )} \r\n\r\n {activity.scheduleType === SCHEDULE_DATE_AND_TIME_NAME && (\r\n <Field\r\n name=\"startingDate\"\r\n label=\"Starting date *\"\r\n availableRange={getAvailableRangeDates(activity)}\r\n disabledDates={getDisabledDates(\r\n availableParticipantsData,\r\n bookedData && bookedData.startingDate,\r\n activity\r\n ).concat(bookedDates)}\r\n changeMonthsCallback={changeMonthHandler}\r\n numberOfMonths={2}\r\n daySize={39}\r\n component={SingleDatePicker}\r\n cutoffData={activity[activity.scheduleType]}\r\n isStartDateRenderMonth={\r\n !!(bookedData && bookedData.startingDate)\r\n }\r\n />\r\n )}\r\n\r\n {activity.scheduleType === SCHEDULE_DATE_AND_TIME_NAME && (\r\n <Field\r\n name=\"startTime\"\r\n label=\"Start time & Duration\"\r\n className={classes.sectionIndent}\r\n list={listStartTimeAndDuration}\r\n component={StartTimeAndDurationRadioButtonsGroup}\r\n />\r\n )}\r\n\r\n {!!bookActivityForm.values.participants.length && (\r\n <FieldArray\r\n name=\"participants\"\r\n title=\"Number of Participants *\"\r\n isUpdatedParticipants={isUpdatedParticipants}\r\n component={NumberOfParticipants}\r\n />\r\n )}\r\n\r\n {!!bookActivityForm.values.addOns.length && (\r\n <FieldArray\r\n name=\"addOns\"\r\n title=\"Add-ons\"\r\n currency={bookActivityForm.values.currency}\r\n component={AddOnsList}\r\n addOnDescClass={classes.addOnDescClass}\r\n addOnTitle={classes.addOnTitle}\r\n />\r\n )}\r\n\r\n <div className={classes.sectionIndent}>\r\n <Typography\r\n variant=\"h2\"\r\n className={classes.accommodationsTitle}\r\n >\r\n {t('Accommodation')}\r\n </Typography>\r\n {!bookActivityForm.values.accommodations.length && (\r\n <TextIconButton\r\n icon={<AddCircleOutlineIcon />}\r\n text={t('Book')}\r\n click={() => {\r\n setRelatedItem(null);\r\n setOpenBookDialog(true);\r\n }}\r\n />\r\n )}\r\n {!!bookActivityForm.values.accommodations.length &&\r\n getBookRelatedField()}\r\n </div>\r\n\r\n <GuestInformation />\r\n\r\n <div className={classes.paymentWrapper}>\r\n <Typography variant=\"h2\" className={classes.payment}>\r\n {t('Payment')}\r\n </Typography>\r\n <Field\r\n name=\"pay\"\r\n className={classes.paymentField}\r\n disabledDays={['Pay on arrival']}\r\n isDisabledChange={true}\r\n component={CheckboxButtonsGroup}\r\n />\r\n </div>\r\n\r\n <BookingSummary\r\n relatedItems={bookActivityForm.values.accommodations}\r\n activity={activity}\r\n bookActivity={bookActivityForm.values}\r\n generalSectionTitle=\"Activity\"\r\n />\r\n\r\n <FormActionButtons\r\n cancelPath={isUpdate ? '/bookings-list' : '/activities'}\r\n actionLabel={isUpdate ? 'Update' : 'Book'}\r\n />\r\n </form>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n bookActivityForm: state.form.bookActivityForm,\r\n businessOwner: state.businessOwner\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('bookActivityForm', field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'bookActivityForm',\r\n destroyOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(BookActivity));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important'\r\n },\r\n loaderWrapper: {\r\n position: 'fixed'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useQuery } from '@apollo/react-hooks';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\n\r\nimport { AppHeader, CircularLoader } from 'components';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport { getReceivedBookedActivityData } from 'utils/book-activity/prepareReceivedBookedActivityData';\r\n\r\nimport { ACTIVITY_BOOKING } from 'graphql/queries/activities-bookings';\r\n\r\nimport BookActivity from 'pages/book-activity/BookActivity';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst UpdateActivityBookingWrapper = ({ businessOwner }) => {\r\n const classes = useStyles();\r\n const { id } = useParams();\r\n const confirm = React.useContext(ConfirmContext);\r\n const history = useHistory();\r\n\r\n const { loading, error, data } = useQuery(ACTIVITY_BOOKING, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n activityBookingId: parseInt(id),\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n });\r\n\r\n if (loading || !businessOwner.selectedBusinessOwner.hasOwnProperty('id')) {\r\n return (\r\n <>\r\n <AppHeader />\r\n\r\n <CircularLoader\r\n isLoading={true}\r\n loaderClassName={classes.loaderClassName}\r\n className={classes.loaderWrapper}\r\n />\r\n </>\r\n );\r\n }\r\n\r\n if (error || !data.activitiesBookings.length) {\r\n confirm({\r\n title: 'Activity booking does not exist!',\r\n confirmationText: 'Back'\r\n })\r\n .then(() => history.push('/booking-list'))\r\n .catch(() => {});\r\n\r\n return <div style={{ height: '100%' }}>{''}</div>;\r\n }\r\n\r\n const bookedData = loading\r\n ? null\r\n : getReceivedBookedActivityData(data.activitiesBookings[0]);\r\n\r\n return (\r\n <BookActivity\r\n initialValues={bookedData}\r\n bookedData={bookedData}\r\n isUpdate={true}\r\n />\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(UpdateActivityBookingWrapper);\r\n","import React from 'react';\r\nimport { PieChart, Pie, Cell } from 'recharts';\r\n\r\nconst SimplePieChart = ({ data, colorsInfo }) => {\r\n return (\r\n <PieChart width={200} height={200}>\r\n <Pie\r\n data={data}\r\n cx={100}\r\n cy={100}\r\n labelLine={false}\r\n outerRadius={80}\r\n fill=\"#8884d8\"\r\n dataKey=\"value\"\r\n >\r\n {data.map((item, index) => (\r\n <Cell key={`cell-${index}`} fill={colorsInfo[item.name]} />\r\n ))}\r\n </Pie>\r\n </PieChart>\r\n );\r\n};\r\n\r\nexport default SimplePieChart;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n chartLegend: {\r\n width: '220px',\r\n padding: '20px'\r\n },\r\n legendTitle: {\r\n fontSize: '37px',\r\n fontWeight: 'bold'\r\n },\r\n legendIcon: {\r\n maxWidth: '30px !important'\r\n },\r\n legendItem: {\r\n fontSize: '13px',\r\n padding: '5px',\r\n '&:not(:last-child)': {\r\n borderBottom: '1px solid #E2EBF6'\r\n }\r\n },\r\n itemName: {\r\n width: '120px'\r\n },\r\n listIcon: {\r\n minWidth: '30px'\r\n },\r\n descriptionWrapper: {\r\n display: 'flex',\r\n flexDirection: 'row'\r\n },\r\n chipsHelpIcon: {\r\n fontSize: '18px',\r\n top: '-4px',\r\n marginLeft: '6px'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Typography } from '@material-ui/core';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport { PopoverWrapper } from 'components';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst CustomChartLegend = ({\r\n legendData,\r\n legendTitle,\r\n titleDescription,\r\n helpText,\r\n legendColors\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classes.chartLegend}>\r\n {legendTitle && (\r\n <Typography className={classes.legendTitle}>{legendTitle}</Typography>\r\n )}\r\n {titleDescription && (\r\n <div className={classes.descriptionWrapper}>\r\n <Typography>{t(titleDescription)}</Typography>\r\n {helpText && (\r\n <PopoverWrapper text={t(helpText)}>\r\n <HelpIcon className={classes.chipsHelpIcon} />\r\n </PopoverWrapper>\r\n )}\r\n </div>\r\n )}\r\n <List component=\"nav\" className={classes.root} aria-label=\"contacts\">\r\n {legendData.map((item, index) => {\r\n return (\r\n <ListItem key={index} className={classes.legendItem}>\r\n <ListItemIcon className={classes.listIcon}>\r\n {item.name !== 'noData' && (\r\n <FiberManualRecordIcon\r\n style={{\r\n fill: legendColors[item.name]\r\n }}\r\n />\r\n )}\r\n </ListItemIcon>\r\n <ListItemText\r\n className={classes.itemName}\r\n primary={t(item.legendTitle)}\r\n />\r\n {item.name !== 'noData' && (\r\n <ListItemText primary={`${item.value}%`} />\r\n )}\r\n </ListItem>\r\n );\r\n })}\r\n </List>\r\n </div>\r\n );\r\n};\r\n\r\nexport default CustomChartLegend;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n selectInput: {\r\n fontSize: '13px',\r\n color: '#717171',\r\n '&::before': {\r\n border: 'none'\r\n }\r\n },\r\n disabledMenuItem: {\r\n display: 'none'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\n\r\nimport Select from '@material-ui/core/Select';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst SelectDropDown = ({\r\n onChange,\r\n value,\r\n items,\r\n selectClass,\r\n placeholder\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const handleOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n return (\r\n <Select\r\n open={open}\r\n onClose={handleClose}\r\n onOpen={handleOpen}\r\n displayEmpty\r\n value={value}\r\n onChange={event => {\r\n onChange(event.target.value);\r\n }}\r\n className={classNames(classes.selectInput, selectClass)}\r\n >\r\n {placeholder && (\r\n <MenuItem value=\"\" disabled className={classes.disabledMenuItem}>\r\n {t(placeholder)}\r\n </MenuItem>\r\n )}\r\n {items.map((item, index) => {\r\n return (\r\n <MenuItem\r\n style={item.value === value ? { backgroundColor: '#E2F5F8' } : {}}\r\n key={index}\r\n value={item.value}\r\n >\r\n {t(item.label)}\r\n </MenuItem>\r\n );\r\n })}\r\n </Select>\r\n );\r\n};\r\n\r\nexport default SelectDropDown;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nconst GuestsDetailsInformation = ({ guestsInfo }) => {\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div>\r\n {guestsInfo\r\n .map(guests => {\r\n return `${guests.guestsNumber.toString()} \r\n ${t(guests.participant[0].participant)}`;\r\n })\r\n .join(' ⋅ ')}\r\n </div>\r\n );\r\n};\r\n\r\nexport default GuestsDetailsInformation;\r\n","import React from 'react';\r\n\r\nconst BulletPoints = ({ item }) => {\r\n const newItem = item.split(', ');\r\n return (\r\n <ul style={{ margin: '0' }}>\r\n {newItem.map((bringItem, index) => (\r\n <li key={index} style={{ padding: '3px 0', fontSize: '13px' }}>\r\n {bringItem}\r\n </li>\r\n ))}\r\n </ul>\r\n );\r\n};\r\n\r\nexport default BulletPoints;\r\n","import {\r\n DELETE_PAYMENT_INFO,\r\n DELETE_INTEGRATION_SETTINGS,\r\n DELETE_TREKKSOFT_CATEGORIES,\r\n RESET_DELETED_INTEGRATION_SETTINGS\r\n} from 'constants/userSettings';\r\n\r\nexport const deletePaymentInfo = (id, paymentSystem) => {\r\n return { type: DELETE_PAYMENT_INFO, id, paymentSystem };\r\n};\r\n\r\nexport const deleteIntegrationSettings = (id, integrationPlatform) => {\r\n return { type: DELETE_INTEGRATION_SETTINGS, id, integrationPlatform };\r\n};\r\n\r\nexport const resetDeletedIntegrationSettings = () => {\r\n return { type: RESET_DELETED_INTEGRATION_SETTINGS };\r\n};\r\n\r\nexport const deleteTrekksoftCategory = id => {\r\n return { type: DELETE_TREKKSOFT_CATEGORIES, id };\r\n};\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme=>({\r\n categoriesMappingWrapper: {\r\n paddingTop: '40px',\r\n width: '100%'\r\n },\r\n title: {\r\n margin: '0 0 19px'\r\n },\r\n input: {\r\n paddingTop: '24px',\r\n width: '180px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n },\r\n inputRow: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n }\r\n}));\r\n","import React from 'react';\r\n\r\nimport { connect } from 'react-redux';\r\nimport { Field, FieldArray, reduxForm } from 'redux-form';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { deleteTrekksoftCategory } from 'actions/userSettings';\r\nimport { DropDown, ExpansionPanelWrapper } from 'components';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n trekkSoftCategoriesMapping: []\r\n};\r\n\r\nconst TREKKSOFT_CATEGORIES = [\r\n 'Adult',\r\n 'Senior',\r\n 'Child',\r\n 'Infant',\r\n 'Traveler',\r\n 'Student',\r\n 'Youth',\r\n 'Junior',\r\n 'Military',\r\n 'Other'\r\n];\r\n\r\nexport const HORN_CATEGORIES = [\r\n 'Adult',\r\n 'Children',\r\n 'Senior',\r\n 'Teen',\r\n 'Infant',\r\n 'Universal'\r\n];\r\n\r\nconst TrekksoftCategoriesMapping = ({\r\n deleteCategoriesInfo,\r\n trekSoftCategoriesMapping\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const onAddHandler = (fields, id) => {\r\n fields.push({\r\n id: id,\r\n categoryOnTrekksoft: '',\r\n category: ''\r\n });\r\n };\r\n\r\n const onDeleteHandler = item => {\r\n if (item.isCreated) deleteCategoriesInfo(item.id);\r\n };\r\n\r\n const onDeleteAllHandler = () => {\r\n const categories =\r\n trekSoftCategoriesMapping.values.trekkSoftCategoriesMapping;\r\n categories.map(item => {\r\n if (item.isCreated) deleteCategoriesInfo(item.id);\r\n });\r\n };\r\n\r\n return (\r\n <div className={classes.categoriesMappingWrapper}>\r\n <Typography variant=\"h2\" className={classes.title}>\r\n Trekksoft participants categories\r\n </Typography>\r\n <FieldArray\r\n name=\"trekkSoftCategoriesMapping\"\r\n component={ExpansionPanelWrapper}\r\n isAddDeleteActions={true}\r\n add={onAddHandler}\r\n remove={onDeleteHandler}\r\n removeAll={onDeleteAllHandler}\r\n getTitle={item => item.categoryOnTrekksoft}\r\n children={field => (\r\n <div className={classes.inputRow}>\r\n <Field\r\n name={`${field}.categoryOnTrekksoft`}\r\n className={classes.input}\r\n list={TREKKSOFT_CATEGORIES}\r\n label=\"Trekksoft platform category\"\r\n component={DropDown}\r\n />\r\n <Field\r\n name={`${field}.category`}\r\n className={classes.input}\r\n list={HORN_CATEGORIES}\r\n label=\"Horn platform category\"\r\n component={DropDown}\r\n />\r\n </div>\r\n )}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n deleteCategoriesInfo: id => dispatch(deleteTrekksoftCategory(id))\r\n});\r\n\r\nconst mapStateToProps = state => ({\r\n trekSoftCategoriesMapping: state.form.trekkSoftCategoriesMapping\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'trekkSoftCategoriesMapping',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: false,\r\n touchOnBlur: false,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(TrekksoftCategoriesMapping));\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme =>({\r\n input: {\r\n paddingTop: '24px',\r\n width: '255px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n },\r\n merchantName: {\r\n width: '100%'\r\n },\r\n inputRow: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n },\r\n formWrapper: {\r\n width: '100%'\r\n }\r\n}));\r\n\r\n","import React from 'react';\r\n\r\nimport { Field } from 'redux-form';\r\n\r\nimport { TREKKSOFT, EXPEDIA, BOOKING } from 'constants/userSettings';\r\nimport { Input } from 'components';\r\nimport TrekksoftCategoriesMapping from '../trekksoft-categories-mapping/TrekkSoftCategotiesMapping';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst IntegrationsInputFields = ({ field, integrationPlatform }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={classes.inputRow}>\r\n {integrationPlatform === TREKKSOFT && (\r\n <div className={classes.formWrapper}>\r\n <Field\r\n name={`${field}.merchantName`}\r\n className={classes.merchantName}\r\n placeholder=\"Merchant name\"\r\n label=\"Merchant name *\"\r\n component={Input}\r\n />\r\n <div className={classes.inputRow}>\r\n <Field\r\n name={`${field}.apiClientId`}\r\n className={classes.input}\r\n placeholder=\"API client id\"\r\n label=\"API client id *\"\r\n component={Input}\r\n />\r\n <Field\r\n name={`${field}.apiClientSecret`}\r\n className={classes.input}\r\n placeholder=\"API client secret\"\r\n label=\"API client secret *\"\r\n component={Input}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n {(integrationPlatform === EXPEDIA || integrationPlatform === BOOKING) && (\r\n <div className={classes.inputRow}>\r\n <Field\r\n name={`${field}.username`}\r\n className={classes.input}\r\n placeholder=\"Username\"\r\n label=\"Username *\"\r\n component={Input}\r\n />\r\n <Field\r\n name={`${field}.password`}\r\n className={classes.input}\r\n placeholder=\"Password\"\r\n label=\"Password *\"\r\n type={'password'}\r\n component={Input}\r\n />\r\n </div>\r\n )}\r\n\r\n {integrationPlatform === TREKKSOFT && <TrekksoftCategoriesMapping />}\r\n </div>\r\n );\r\n};\r\n\r\nexport default IntegrationsInputFields;\r\n","import { isRequired } from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (values.integrations && values.integrations.length) {\r\n const integrations = values.integrations;\r\n const integrationsArrayErrors = [];\r\n\r\n integrations.forEach((item, index) => {\r\n const integrationsErrors = {};\r\n if (item.integrationPlatform === 'Trekksoft') {\r\n if (isRequired(item.merchantName, true)) {\r\n integrationsErrors['merchantName'] = 'Merchant name is required';\r\n integrationsArrayErrors[index] = integrationsErrors;\r\n }\r\n if (isRequired(item.apiClientId || '', true)) {\r\n integrationsErrors['apiClientId'] = 'Client id is required';\r\n integrationsArrayErrors[index] = integrationsErrors;\r\n }\r\n if (isRequired(item.apiClientSecret || '', true)) {\r\n integrationsErrors['apiClientSecret'] = 'Client secret is required';\r\n integrationsArrayErrors[index] = integrationsErrors;\r\n }\r\n }\r\n if (\r\n item.integrationPlatform === 'Expedia' ||\r\n item.integrationPlatform === 'BOOKING'\r\n ) {\r\n if (isRequired(item.username, true)) {\r\n integrationsErrors['username'] = 'Username is required';\r\n integrationsArrayErrors[index] = integrationsErrors;\r\n }\r\n if (isRequired(item.password || '', true)) {\r\n integrationsErrors['password'] = 'Password is required';\r\n integrationsArrayErrors[index] = integrationsErrors;\r\n }\r\n }\r\n });\r\n if (integrationsArrayErrors.length) {\r\n errors.integrations = integrationsArrayErrors;\r\n errors.integrations = {\r\n ...integrationsArrayErrors,\r\n _error: { ...integrationsArrayErrors }\r\n };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme=>({\r\n wrapper: {\r\n margin: '30px 0'\r\n },\r\n title: {\r\n margin: '0 0 19px',\r\n [theme.breakpoints.down('sm')]:{\r\n justifyContent: 'center',\r\n display: 'flex',\r\n }\r\n },\r\n row: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n }\r\n },\r\n input: {\r\n paddingBottom: '24px',\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n display: 'flex'\r\n }\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Field, FieldArray, isDirty, reduxForm } from 'redux-form';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport {\r\n DropDown,\r\n ExpansionPanelWrapper,\r\n FormActionButtons,\r\n IntegrationsInputFields\r\n} from 'components';\r\n\r\nimport {\r\n deleteIntegrationSettings,\r\n deleteTrekksoftCategory\r\n} from 'actions/userSettings';\r\nimport validate from './validate';\r\nimport { BOOKING, EXPEDIA, TREKKSOFT } from 'constants/userSettings';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n integrations: []\r\n};\r\n\r\nconst PLATFORMS = ['Trekksoft', 'Expedia', 'BOOKING'];\r\n\r\nconst Integrations = ({\r\n handleSubmit,\r\n deleteIntegrationInfo,\r\n deleteCategoriesInfo,\r\n integrationSettingsForm,\r\n trekkSoftCategoriesMapping,\r\n isDirty,\r\n isDirtyCategoriesForm\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const integrations = integrationSettingsForm.values.integrations;\r\n\r\n const getAvailableIntegrationPlatforms = index => {\r\n const createdPlatforms = integrationSettingsForm.values.integrations.map(\r\n item => item.integrationPlatform\r\n );\r\n const currentPlatform =\r\n integrationSettingsForm.values.integrations[index].integrationPlatform;\r\n\r\n if (currentPlatform)\r\n return [\r\n currentPlatform,\r\n ...PLATFORMS.filter(x => !createdPlatforms.includes(x))\r\n ];\r\n return PLATFORMS.filter(x => !createdPlatforms.includes(x));\r\n };\r\n\r\n const onAddHandler = (fields, id) => {\r\n fields.push({\r\n id: id,\r\n integrationPlatform: ''\r\n });\r\n };\r\n\r\n const onDeleteTrekSoftCategoriesHandler = () => {\r\n const categories =\r\n trekkSoftCategoriesMapping.values.trekkSoftCategoriesMapping;\r\n categories.map(item => {\r\n if (item.isCreated) deleteCategoriesInfo(item.id);\r\n });\r\n };\r\n\r\n const onDeleteHandler = item => {\r\n deleteIntegrationInfo(item.id, item.integrationPlatform);\r\n onDeleteTrekSoftCategoriesHandler();\r\n };\r\n\r\n const onDeleteAllHandler = () => {\r\n const integration = integrationSettingsForm.values.integrations[0];\r\n if (integration.id) {\r\n deleteIntegrationInfo(integration.id, integration.integrationPlatform);\r\n onDeleteTrekSoftCategoriesHandler();\r\n }\r\n };\r\n\r\n const isDisabledPlatform = fieldObj => {\r\n return fieldObj && fieldObj.id >= 0;\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('Integrations')}\r\n </Typography>\r\n <form onSubmit={handleSubmit}>\r\n <FieldArray\r\n name=\"integrations\"\r\n component={ExpansionPanelWrapper}\r\n isAddDeleteActions={true}\r\n add={onAddHandler}\r\n remove={onDeleteHandler}\r\n removeAll={onDeleteAllHandler}\r\n isHiddenAddNewButton={integrations.length >= PLATFORMS.length}\r\n getTitle={item => item.integrationPlatform}\r\n tabName=\"integration\"\r\n tabNameAll=\"all integrations\"\r\n children={(field, index, meta, fieldObj) => (\r\n <div className={classes.row}>\r\n <Field\r\n name={`${field}.integrationPlatform`}\r\n className={classes.input}\r\n list={getAvailableIntegrationPlatforms(index)}\r\n label=\"Integration platform *\"\r\n placeholder=\"Choose integration platform\"\r\n disabled={isDisabledPlatform(fieldObj)}\r\n component={DropDown}\r\n />\r\n {fieldObj.integrationPlatform === TREKKSOFT && (\r\n <IntegrationsInputFields\r\n field={field}\r\n integrationPlatform=\"Trekksoft\"\r\n />\r\n )}\r\n {fieldObj.integrationPlatform === EXPEDIA && (\r\n <IntegrationsInputFields\r\n field={field}\r\n integrationPlatform=\"Expedia\"\r\n />\r\n )}\r\n {fieldObj.integrationPlatform === BOOKING && (\r\n <IntegrationsInputFields\r\n field={field}\r\n integrationPlatform=\"Expedia\"\r\n />\r\n )}\r\n </div>\r\n )}\r\n />\r\n <FormActionButtons\r\n isDisabledAction={!isDirty && !isDirtyCategoriesForm}\r\n cancelPath=\"/settings\"\r\n actionLabel=\"Save\"\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n deleteIntegrationInfo: (id, item) =>\r\n dispatch(deleteIntegrationSettings(id, item)),\r\n deleteCategoriesInfo: id => dispatch(deleteTrekksoftCategory(id))\r\n});\r\n\r\nconst mapStateToProps = state => ({\r\n integrationSettingsForm: state.form.integrationSettingsForm,\r\n trekkSoftCategoriesMapping: state.form.trekkSoftCategoriesMapping,\r\n isDirty: isDirty('integrationSettingsForm')(state),\r\n isDirtyCategoriesForm: isDirty('trekkSoftCategoriesMapping')(state)\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'integrationSettingsForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: false,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(Integrations));\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\nimport theme from 'theme';\r\n\r\nexport const useStyles = makeStyles(theme=> ({\r\n input: {\r\n paddingTop: '24px',\r\n width: '255px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n },\r\n },\r\n inputRow: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n flexDirection: 'column',\r\n },\r\n }\r\n}));\r\n","import React from 'react';\r\n\r\nimport { Field } from 'redux-form';\r\n\r\nimport { Input, RadioButtonsGroup } from 'components';\r\nimport { useStyles } from './styles';\r\n\r\n\r\nconst PAYMENTS_INPUT_FIElDS = {\r\n PayPal: [\r\n {\r\n name: 'clientId',\r\n placeholder: 'Client ID',\r\n label: 'Client ID *'\r\n },\r\n {\r\n name: 'clientSecret',\r\n placeholder: 'Client secret',\r\n label: 'Client secret *'\r\n }\r\n ],\r\n Stripe: [\r\n {\r\n name: 'publishableKey',\r\n placeholder: 'Publishable key',\r\n label: 'Publishable key *'\r\n },\r\n {\r\n name: 'secretKey',\r\n placeholder: 'API password',\r\n label: 'Secret key *'\r\n }\r\n ],\r\n payOnArrival: [\r\n {\r\n name: 'payOnArrivalPossibility',\r\n title: 'Pay on arrival'\r\n }\r\n ]\r\n};\r\nconst PaymentsInputFields = ({ field, paymentSystem, isUpdate }) => {\r\n const classes = useStyles();\r\n return (\r\n <div className={classes.inputRow}>\r\n {paymentSystem &&\r\n paymentSystem !== 'payOnArrival' &&\r\n PAYMENTS_INPUT_FIElDS[paymentSystem].map(\r\n (paymentSystemDetails, index) => {\r\n const isSecretKey = paymentSystemDetails.name === 'secretKey';\r\n return (\r\n <Field\r\n key={index}\r\n name={`${field}.${paymentSystemDetails.name}`}\r\n className={classes.input}\r\n placeholder={paymentSystemDetails.placeholder}\r\n label={paymentSystemDetails.label}\r\n component={Input}\r\n disabled={ isUpdate && isSecretKey}\r\n />\r\n );\r\n }\r\n )}\r\n {paymentSystem &&\r\n paymentSystem === 'payOnArrival' &&\r\n PAYMENTS_INPUT_FIElDS[paymentSystem].map(\r\n (paymentSystemDetails, index) => {\r\n return (\r\n <Field\r\n key={index}\r\n name={`${field}.${paymentSystemDetails.name}`}\r\n label={paymentSystemDetails.title}\r\n list={['Yes', 'No']}\r\n component={RadioButtonsGroup}\r\n />\r\n );\r\n }\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default PaymentsInputFields;\r\n","import { isRequired } from 'utils/validators';\r\n\r\nconst validate =(values) => { \r\n const errors = {};\r\n\r\n if (values.payments && values.payments.length) {\r\n const payments = values.payments;\r\n const paymentsArrayErrors = [];\r\n\r\n payments.forEach((item, index) => {\r\n const paymentsErrors = {};\r\n const isUpdate = item.isCreated;\r\n if (item.paymentSystem === 'PayPal') {\r\n if (isRequired(item.clientId, true)) {\r\n paymentsErrors['clientId'] = 'Client ID is required';\r\n paymentsArrayErrors[index] = paymentsErrors;\r\n }\r\n\r\n if (isRequired(item.clientSecret || '', true)) {\r\n paymentsErrors['clientSecret'] = 'Client secret is required';\r\n paymentsArrayErrors[index] = paymentsErrors;\r\n }\r\n } else if (item.paymentSystem === 'Stripe') {\r\n if (isRequired(item.publishableKey, true)) {\r\n paymentsErrors['publishableKey'] = 'Publishable key is required';\r\n paymentsArrayErrors[index] = paymentsErrors;\r\n }\r\n\r\n if ( !isUpdate && isRequired(item.secretKey || '', true)) {\r\n paymentsErrors['secretKey'] = 'API password is required';\r\n paymentsArrayErrors[index] = paymentsErrors;\r\n }\r\n }\r\n });\r\n if (paymentsArrayErrors.length) {\r\n errors.payments = paymentsArrayErrors;\r\n errors.payments = {\r\n ...paymentsArrayErrors,\r\n _error: { ...paymentsArrayErrors }\r\n };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles((theme) => ({\r\n wrapper: {\r\n margin: '30px 0',\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '20px 0',\r\n width: '100%'\r\n }\r\n },\r\n title: {\r\n margin: '0 0 19px',\r\n [theme.breakpoints.down('sm')]: {\r\n textAlign: 'center'\r\n \r\n }\r\n },\r\n row: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n [theme.breakpoints.up('sm')]: {\r\n flexDirection: 'column',\r\n width: '100%',\r\n }\r\n },\r\n input: {\r\n display:'flex',\r\n paddingBottom: '24px',\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n paddingBottom: '12px',\r\n flexDirection: 'column',\r\n width: '100%',\r\n }\r\n }\r\n}));\r\n\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Field, FieldArray, isDirty, reduxForm } from 'redux-form';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport {\r\n DropDown,\r\n ExpansionPanelWrapper,\r\n FormActionButtons,\r\n PaymentsInputFields\r\n} from 'components';\r\n\r\nimport validate from './validate';\r\nimport { deletePaymentInfo } from 'actions/userSettings';\r\n\r\nimport {\r\n PAY_ON_ARRIVAL,\r\n PAY_PAL_SYSTEM,\r\n STRIPE_SYSTEM,\r\n AVAILABLE_PAYMENT_SYSTEMS\r\n} from 'constants/userSettings';\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n payments: []\r\n};\r\n\r\nconst Payments = ({\r\n handleSubmit,\r\n deletePaymentInfo,\r\n paymentsForm,\r\n isDirty,\r\n isUpdate\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const payments = paymentsForm.values.payments; \r\n const getAvailablePaymentsSystem = index => {\r\n const createdPayments = paymentsForm.values.payments.map(\r\n item => item.paymentSystem\r\n );\r\n const currentPayment = paymentsForm.values.payments[index].paymentSystem;\r\n if (currentPayment)\r\n return [\r\n currentPayment,\r\n ...AVAILABLE_PAYMENT_SYSTEMS.filter(x => !createdPayments.includes(x))\r\n ];\r\n return AVAILABLE_PAYMENT_SYSTEMS.filter(x => !createdPayments.includes(x));\r\n };\r\n const onAddHandler = (fields, id) => {\r\n fields.push({\r\n id: id,\r\n paymentSystem: ''\r\n });\r\n };\r\n\r\n const onDeleteHandler = item => {\r\n if (item.isCreated) deletePaymentInfo(item.id, item.paymentSystem);\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('Payments')}\r\n </Typography>\r\n <form onSubmit={handleSubmit}>\r\n <FieldArray\r\n name=\"payments\"\r\n component={ExpansionPanelWrapper}\r\n deleteDescription=\"Note that you will not be able to generate code for the widget if no payment system is connected.\"\r\n tabName=\"payment\"\r\n tabNameAll=\"all payments\"\r\n isAddDeleteActions={true}\r\n isUpdate={isUpdate}\r\n isHiddenAddNewButton={\r\n payments.length >= AVAILABLE_PAYMENT_SYSTEMS.length\r\n }\r\n add={onAddHandler}\r\n remove={onDeleteHandler}\r\n getTitle={item => item.paymentSystem}\r\n getSubTitleLink={item =>\r\n !item.paymentSystem || item.paymentSystem === PAY_ON_ARRIVAL\r\n ? null\r\n : {\r\n title: 'Go to the instruction',\r\n link:\r\n item.paymentSystem === STRIPE_SYSTEM\r\n ? '/stripe-instruction'\r\n : '/paypal-instruction'\r\n }\r\n }\r\n children={(field, index, meta, fieldObj) => (\r\n <div className={classes.row}>\r\n <Field\r\n name={`${field}.paymentSystem`}\r\n className={classes.input}\r\n list={getAvailablePaymentsSystem(index)}\r\n label=\"Payment system *\"\r\n placeholder=\"Choose payment system\"\r\n component={DropDown}\r\n />\r\n {fieldObj.paymentSystem === PAY_PAL_SYSTEM && (\r\n <PaymentsInputFields field={field} paymentSystem=\"PayPal\" />\r\n )}\r\n {fieldObj.paymentSystem === STRIPE_SYSTEM && (\r\n <PaymentsInputFields field={field} paymentSystem=\"Stripe\" \r\n isUpdate={fieldObj.paymentSystem && fieldObj.isCreated }\r\n />\r\n )}\r\n </div>\r\n )}\r\n />\r\n <FormActionButtons\r\n isDisabledAction={!isDirty}\r\n cancelPath=\"/settings\"\r\n actionLabel=\"Save\"\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n deletePaymentInfo: (id, item) => dispatch(deletePaymentInfo(id, item))\r\n});\r\n\r\nconst mapStateToProps = state => ({\r\n paymentsForm: state.form.paymentsForm,\r\n isDirty: isDirty('paymentsForm')(state)\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'paymentsForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: false,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(Payments));\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme=>({\r\n wrapper: {\r\n width: '100%',\r\n paddingBottom: '30px',\r\n marginBottom: '30px',\r\n borderBottom: '1px solid #E5E5E5',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '95%'\r\n }\r\n },\r\n selectRoot: {\r\n width: '100%',\r\n height: '36px',\r\n padding: '0',\r\n color: '#000',\r\n '&:focus': {\r\n backgroundColor: '#FFFFFF'\r\n }\r\n },\r\n label: {\r\n marginBottom: 6,\r\n color: '#071B27',\r\n textTransform: 'uppercase',\r\n fontSize: 10,\r\n lineHeight: '12px',\r\n letterSpacing: '0.035em'\r\n },\r\n inputRoot: {\r\n width: '100%',\r\n border: '1px solid #BECEDA',\r\n borderRadius: '3px',\r\n color: '#838383',\r\n fontSize: '13px',\r\n '&:hover': {\r\n border: '1px solid #41B7D7'\r\n }\r\n },\r\n menuList: {\r\n border: '1px solid #F0F0F0',\r\n padding: '0',\r\n minWidth: '140px',\r\n boxShadow: '1px 2px 15px rgba(0,0,0, 0.08)',\r\n borderRadius: '4px'\r\n },\r\n menuItemRoot: {\r\n color: '#666666',\r\n '&:hover': {\r\n color: '#000000'\r\n }\r\n },\r\n error: {\r\n boxShadow: 'none',\r\n border: '1px solid #EB5757',\r\n '&:hover': {\r\n border: '1px solid #EB5757'\r\n }\r\n },\r\n chips: {\r\n display: 'flex',\r\n flexWrap: 'wrap'\r\n },\r\n chip: {\r\n color: '#FFFFFF',\r\n backgroundColor: '#005a81',\r\n borderRadius: '3px',\r\n margin: 2\r\n },\r\n deleteChipIcon: {\r\n width: '14px',\r\n height: '14px',\r\n color: '#fff'\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\n\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Select from '@material-ui/core/Select';\r\nimport InputLabel from '@material-ui/core/InputLabel';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport Chip from '@material-ui/core/Chip';\r\nimport InputBase from '@material-ui/core/InputBase';\r\n\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst MultiSelect = ({\r\n input,\r\n isHiddenErrorMsg,\r\n list,\r\n field,\r\n className,\r\n label,\r\n meta: { touched, error, submitFailed }\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classNames(classes.wrapper, className)}>\r\n {label && (\r\n <InputLabel\r\n className={classes.label}\r\n htmlFor={`${label}-currency-input`}\r\n classes={{\r\n disabled: classes.disabledLabel\r\n }}\r\n >\r\n {label}\r\n </InputLabel>\r\n )}\r\n <Select\r\n multiple\r\n value={input.value}\r\n onChange={input.onChange}\r\n classes={{\r\n root: classes.selectRoot\r\n }}\r\n renderValue={selected => (\r\n <div className={classes.chips}>\r\n {selected.map(value => (\r\n <Chip\r\n key={value}\r\n onMouseDown={e => e.stopPropagation()}\r\n label={value}\r\n className={classes.chip}\r\n onDelete={() =>\r\n input.onChange(input.value.filter(item => item !== value))\r\n }\r\n deleteIcon={<CloseIcon className={classes.deleteChipIcon} />}\r\n />\r\n ))}\r\n </div>\r\n )}\r\n MenuProps={{\r\n classes: {\r\n list: classes.menuList\r\n }\r\n }}\r\n input={\r\n <InputBase\r\n classes={{\r\n root: classNames(classes.inputRoot, {\r\n [classes.error]: (touched || submitFailed) && error\r\n })\r\n }}\r\n />\r\n }\r\n >\r\n {list.map((item, index) => (\r\n <MenuItem\r\n key={index}\r\n value={field ? item['id'] : item}\r\n classes={{ root: classes.menuItemRoot }}\r\n >\r\n {field ? item[field] : item}\r\n </MenuItem>\r\n ))}\r\n </Select>\r\n {!isHiddenErrorMsg && (touched || submitFailed) && error && (\r\n <FormHelperText error>{t(error)}</FormHelperText>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default MultiSelect;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n colorPaletteWrapper: {\r\n width: '285px',\r\n height: '204px',\r\n marginLeft: '30px'\r\n },\r\n colorPalette: {\r\n position: 'relative',\r\n width: '285px',\r\n height: '204px',\r\n borderRadius: '3px',\r\n backgroundColor: '#E5E5E5'\r\n },\r\n closeBtn: {\r\n position: 'absolute',\r\n top: '-12px',\r\n right: '-12px',\r\n fontSize: '15px',\r\n padding: '10px'\r\n },\r\n closeIcon: {\r\n fontSize: '15px',\r\n color: '#000'\r\n },\r\n colorPickerWrapper: {\r\n zIndex: 999,\r\n top: '-30px',\r\n left: '70px',\r\n backgroundColor: '#fff',\r\n position: 'absolute'\r\n },\r\n errorOpenedPicker: {\r\n position: 'relative',\r\n zIndex: 1,\r\n margin: '-10px 0 35px'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React,{useRef,useEffect} from 'react';\r\n\r\nimport { SketchPicker } from 'react-color';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst CustomColorPicker = ({\r\n input,\r\n onClose,\r\n meta: { touched, error, submitFailed }\r\n}) => {\r\n const classes = useStyles();\r\n\r\n const pickerRef = useRef(null);\r\n const onColorChange = color => {\r\n input.onChange(color);\r\n };\r\n\r\n const handleClickOutside = (event) => {\r\n if (pickerRef.current && !pickerRef.current.contains(event.target)) {\r\n onClose(false); \r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, []);\r\n\r\n return (\r\n <div className={classes.colorPickerWrapper}ref={pickerRef}>\r\n <IconButton className={classes.closeBtn} onClick={() => onClose(false)}>\r\n <HighlightOffIcon className={classes.closeIcon} />\r\n </IconButton>\r\n <SketchPicker\r\n color={input.value}\r\n onChange={color => onColorChange(color.hex)}\r\n />\r\n {(touched || submitFailed) && error && (\r\n <FormHelperText className={classes.errorOpenedPicker} error>\r\n {error}\r\n </FormHelperText>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CustomColorPicker;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n },\r\n box: {\r\n textAlign: 'center'\r\n },\r\n text: {\r\n color: '#071B27',\r\n marginTop: '20px',\r\n maxWidth: '240px'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport SelectCompany from 'assets/select-company.png';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst SelectCompanyBox = () => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classes.root}>\r\n <div className={classes.box}>\r\n <img src={SelectCompany} alt=\"Select company\" />\r\n <Typography variant=\"body1\" className={classes.text}>\r\n {t(\r\n 'Please select Business Owner Company to view all appropriate data'\r\n )}\r\n </Typography>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SelectCompanyBox;\r\n","import moment from 'moment';\r\n\r\nimport { getReceivedSchedule } from 'utils/book-accommodation-and-activity/prepareReceivedDataMethods';\r\nimport { getSchedule } from 'utils/accommodations-and-activities/prepareReceivedActivityData';\r\nimport { getSummeryPriceForActivitySeveralDays } from '../book-accommodation-and-activity/totalPrice';\r\nimport { currencyFormatter } from '../prices/formatter';\r\n\r\nexport const BookedAddOns = addOns => {\r\n if (addOns.length !== 0) {\r\n return addOns\r\n .map(addOn => {\r\n return `${addOn.addOnCount} x ${addOn.addOn[0].title}`;\r\n })\r\n .join(' ⋅ ');\r\n }\r\n return '—';\r\n};\r\n\r\nexport const BookedMandatoryFees = mandatoryFees => {\r\n if (Array.isArray(mandatoryFees)&& (mandatoryFees.length !== 0)) {\r\n return mandatoryFees\r\n .map(mandatoryFee => {\r\n return `${mandatoryFee.mandatoryFee[0].title}`;\r\n })\r\n .join(' ⋅ ');\r\n }\r\n return '—';\r\n};\r\n\r\nexport const guestsSumSeats = guestsInfo => {\r\n try {\r\n return guestsInfo\r\n .map(guests => guests.guestsNumber)\r\n .reduce(\r\n (guestsSum, actualGuestsNumber) => guestsSum + actualGuestsNumber\r\n );\r\n } catch {\r\n return 0;\r\n }\r\n};\r\n\r\nexport const guestsDetailsInformation = (guestsInfo, t) => {\r\n return `${guestsInfo\r\n .map(guests => {\r\n return `${guests.guestsNumber.toString()} \r\n ${t(guests.participant[0].participant)}`;\r\n })\r\n .join(' ⋅ ')}`;\r\n};\r\n\r\nexport const getAccommodationBookingSchedule = booking => {\r\n return `${booking.fromDate}, ${moment(\r\n booking.accommodation.checkInTime,\r\n 'HH:mm:ssZZ'\r\n ).format('HH:mm')} - ${booking.toDate}, ${moment(\r\n booking.accommodation.checkOutTime,\r\n 'HH:mm:ssZZ'\r\n ).format('HH:mm')}`;\r\n};\r\n\r\nexport const getActivityBookingSchedule = booking => {\r\n if (!booking.startingDate) {\r\n return '—';\r\n }\r\n\r\n const startDate = booking.startingDate;\r\n const endDate = booking.endingDate;\r\n const checkInTime = booking.checkInTime\r\n ? `${moment(booking.checkInTime).format('HH:mm')}`\r\n : '—';\r\n\r\n const checkOutTime = booking.checkOutTime\r\n ? `${moment(booking.checkOutTime).format('YYYY-MM-DD')},\r\n ${moment(booking.checkOutTime).format('HH:mm')}`\r\n : '—';\r\n\r\n if (startDate && endDate) {\r\n return `${startDate} - ${endDate}`;\r\n }\r\n\r\n return `${startDate}, ${checkInTime} - ${checkOutTime}`;\r\n};\r\n\r\nexport const isParticipantInfo = guestsInfo => {\r\n try {\r\n return guestsInfo[0].participant[0].participant !== '';\r\n } catch {\r\n return false;\r\n }\r\n};\r\n\r\nexport const getActivityBookingTotalInfo = (data, isRelated) => {\r\n if (!data || !Object.keys(data).length) {\r\n return;\r\n }\r\n\r\n const totalInfo = {\r\n total: 0,\r\n currency: data?.payments[0]?.currency?.currency,\r\n type: 'activity',\r\n title: data.activity.title,\r\n guestsTotal: [],\r\n addOnsTotal: [],\r\n mandatoryFeesTotal: [],\r\n relatedBookings: []\r\n };\r\n\r\n data.bookedAddOns.forEach(addOn => {\r\n const addOnPrice = addOn.totalPrice / addOn.addOnCount;\r\n totalInfo.addOnsTotal.push({\r\n title: addOn.addOn[0].title,\r\n count: addOn.addOnCount,\r\n total: addOn.totalPrice,\r\n addOnPrice: addOnPrice.toFixed(2)\r\n });\r\n totalInfo.total += addOn.totalPrice;\r\n });\r\n\r\n // data.bookedMandatoryFees.forEach(mandatoryFee => {\r\n // const mandatoryFeePrice = mandatoryFee.totalPrice / mandatoryFee.mandatoryFeeCount;\r\n // totalInfo.mandatoryFeesTotal.push({\r\n // title: mandatoryFee.mandatoryFee[0].title,\r\n // count: mandatoryFee.mandatoryFeeCount,\r\n // total: mandatoryFee.totalPrice,\r\n // mandatoryFeePrice: mandatoryFeePrice.toFixed(2)\r\n // });\r\n // totalInfo.total += mandatoryFee.totalPrice;\r\n // });\r\n\r\n data.guests.forEach(guest => {\r\n const isActivitySeveralDays =\r\n data.activity.scheduleType === 'scheduleDateForm';\r\n\r\n if (isActivitySeveralDays && data.endingDate) {\r\n const multiDates = {\r\n startDate: moment(data.startingDate, 'YYYY-MM-DD'),\r\n endDate: moment(data.endingDate, 'YYYY-MM-DD')\r\n };\r\n const severalDaysTotal = getSummeryPriceForActivitySeveralDays(\r\n multiDates,\r\n guest.totalPrice\r\n );\r\n const severalDaysTotalCurrency = currencyFormatter(severalDaysTotal);\r\n const guestPrice =\r\n data.activity.pricesType === 'pricesFixedForm'\r\n ? guest.totalPrice\r\n : guest.totalPrice / guest.guestsNumber;\r\n totalInfo.guestsTotal.push({\r\n participant: guest.participant[0].participant,\r\n count: guest.guestsNumber,\r\n total: severalDaysTotalCurrency,\r\n guestPrice: guestPrice.toFixed(2)\r\n });\r\n totalInfo.total += severalDaysTotal;\r\n } else {\r\n const guestPrice =\r\n data.activity.pricesType === 'pricesFixedForm'\r\n ? guest.totalPrice\r\n : guest.totalPrice / guest.guestsNumber;\r\n totalInfo.guestsTotal.push({\r\n participant: guest.participant[0].participant,\r\n count: guest.guestsNumber,\r\n total: guest.totalPrice,\r\n guestPrice: guestPrice.toFixed(2)\r\n });\r\n totalInfo.total += guest.totalPrice;\r\n }\r\n });\r\n\r\n if (\r\n data.relatedAccommodationBooking &&\r\n data.relatedAccommodationBooking.length &&\r\n (!data.isCanceled || data.isCanceledWithMain)\r\n ) {\r\n const relatedData = data.relatedAccommodationBooking[0];\r\n if (!relatedData.isCanceled || relatedData.isCanceledWithMain) {\r\n totalInfo.relatedBookings.push(\r\n getAccommodationBookingTotalInfo(relatedData, true)\r\n );\r\n }\r\n totalInfo.relatedBookings.forEach(booking => {\r\n totalInfo.total += booking.total;\r\n });\r\n }\r\n\r\n if (!isRelated) totalInfo.total = totalInfo.total.toFixed(2);\r\n\r\n return totalInfo;\r\n};\r\n\r\nconst getGuestsPrice = (prices, guest, nightsNumber, total) => {\r\n if (prices && prices.length && prices[0].day) {\r\n return guest.totalPrice;\r\n } else if (guest.participant[0].participant && guest.totalPrice) {\r\n return guest.totalPrice / (guest.guestsNumber * nightsNumber);\r\n } else {\r\n return (guest.totalPrice || total) / nightsNumber;\r\n }\r\n};\r\n\r\nexport const getAccommodationBookingTotalInfo = (data, isRelated) => {\r\n if (!data || !Object.keys(data).length) {\r\n return;\r\n }\r\n const startDate = moment(data.fromDate, 'YYYY-MM-DD');\r\n const endDate = moment(data.toDate, 'YYYY-MM-DD');\r\n const nightsNumber = parseInt(endDate.diff(startDate, 'days'));\r\n\r\n const totalInfo = {\r\n total: 0,\r\n title: data.accommodation.title,\r\n nightsNumber: nightsNumber,\r\n type: 'accommodation',\r\n currency: data?.payments[0]?.currency?.currency,\r\n guestsTotal: [],\r\n addOnsTotal: [],\r\n mandatoryFeesTotal:[],\r\n relatedBookings: []\r\n };\r\n\r\n data.bookedAddOns.forEach(addOn => {\r\n const addOnPrice = addOn.totalPrice / addOn.addOnCount;\r\n totalInfo.addOnsTotal.push({\r\n title: addOn.addOn[0].title,\r\n count: addOn.addOnCount,\r\n total: addOn.totalPrice,\r\n addOnPrice: addOnPrice.toFixed(2)\r\n });\r\n totalInfo.total += addOn.totalPrice;\r\n });\r\n\r\n data.bookedMandatoryFees?.forEach(mandatoryFee => {\r\n const mandatoryFeePrice = mandatoryFee.totalPrice / mandatoryFee.mandatoryFeeCount;\r\n totalInfo.mandatoryFeesTotal.push({\r\n title: mandatoryFee.mandatoryFee[0].title,\r\n count: mandatoryFee.mandatoryFeeCount,\r\n total: mandatoryFee.totalPrice,\r\n mandatoryFeePrice: mandatoryFeePrice.toFixed(2)\r\n });\r\n totalInfo.total += mandatoryFee.totalPrice;\r\n });\r\n\r\n data.guests.forEach(guest => {\r\n const guestPrice = getGuestsPrice(\r\n data.accommodation.prices,\r\n guest,\r\n nightsNumber,\r\n totalInfo.total\r\n );\r\n totalInfo.guestsTotal.push({\r\n participant: guest.participant[0].participant,\r\n count: guest.guestsNumber,\r\n total: guest.totalPrice || totalInfo.total,\r\n guestPrice: guestPrice.toFixed(2)\r\n });\r\n totalInfo.total += guest.totalPrice || totalInfo.total;\r\n });\r\n\r\n if (\r\n data.relatedActivitiesBookings &&\r\n data.relatedActivitiesBookings.length &&\r\n (!data.isCanceled || data.isCanceledWithMain)\r\n ) {\r\n data.relatedActivitiesBookings.forEach(booking => {\r\n if (!booking.isCanceled || booking.isCanceledWithMain) {\r\n totalInfo.relatedBookings.push(\r\n getActivityBookingTotalInfo(booking, true)\r\n );\r\n }\r\n });\r\n totalInfo.relatedBookings.forEach(booking => {\r\n totalInfo.total += booking.total;\r\n });\r\n }\r\n\r\n if (!isRelated) totalInfo.total = totalInfo.total.toFixed(2);\r\n\r\n return totalInfo;\r\n};\r\n\r\nexport const getCalendarActivitiesBookings = activities => {\r\n const bookings = [];\r\n const activitiesBookings = [];\r\n\r\n activities.map(item => {\r\n if (item.scheduleType === 'schedulePassForm') return;\r\n\r\n if (item.activityBookingsForPeriod.length) {\r\n activitiesBookings.push(...item.activityBookingsForPeriod);\r\n } else {\r\n const schedule = getSchedule(item);\r\n activitiesBookings.push({\r\n id: item.id,\r\n title: item.title,\r\n productCode: item.productCode,\r\n scheduleType: item.scheduleType,\r\n schedule: schedule[Object.keys(schedule)[0]],\r\n maxParticipants: item.maxParticipants,\r\n isPrivate: item.isPrivate,\r\n isWithoutBookings: true\r\n });\r\n }\r\n });\r\n\r\n activitiesBookings.map(item => {\r\n if (item.isWithoutBookings) {\r\n if (item.scheduleType === 'schedulePassForm') return;\r\n bookings.push(item);\r\n return;\r\n }\r\n\r\n if (!item.startingDate) return;\r\n\r\n const existedBookingIndex = bookings.findIndex(\r\n booking =>\r\n booking.activities &&\r\n booking.activities.find(\r\n activity => activity.activity.id === item.activity.id\r\n )\r\n );\r\n const scheduleData = getReceivedSchedule(item.schedule);\r\n\r\n if (existedBookingIndex >= 0) {\r\n const existedActivities = bookings[existedBookingIndex].activities;\r\n\r\n const existedActivityTimeIndex = existedActivities.findIndex(activity => {\r\n if (!scheduleData) return false;\r\n if (!activity.schedule) {\r\n if (\r\n activity.startingDate === item.startingDate &&\r\n !activity.endingDate &&\r\n !item.endingDate\r\n ) {\r\n return activity;\r\n }\r\n\r\n if (\r\n activity.startingDate === item.startingDate &&\r\n activity.endingDate === item.endingDate\r\n ) {\r\n return activity;\r\n }\r\n return false;\r\n }\r\n if (\r\n activity.startingDate === item.startingDate &&\r\n scheduleData.startTime &&\r\n activity.schedule.id === scheduleData.startTime.id\r\n ) {\r\n return activity;\r\n }\r\n return false;\r\n });\r\n\r\n if (existedActivityTimeIndex >= 0) {\r\n existedActivities[existedActivityTimeIndex].participants.push(item);\r\n existedActivities[existedActivityTimeIndex].guests.push(...item.guests);\r\n return;\r\n }\r\n\r\n existedActivities.push({\r\n ...item.activity,\r\n ...item,\r\n activity: { ...item.activity },\r\n startingDate: item.startingDate,\r\n schedule: scheduleData ? scheduleData.startTime : {},\r\n participants: [item],\r\n guests: [...item.guests],\r\n payments: [...item.payments],\r\n bookedAddOns: [...item.bookedAddOns],\r\n // bookedMandatoryFees: [...item.bookedMandatoryFees]\r\n });\r\n return;\r\n }\r\n\r\n const schedule = getSchedule(item.activity);\r\n\r\n bookings.push({\r\n id: item.id,\r\n title: item.activity.title,\r\n closestEvent: item.activity.closestEvent,\r\n productCode: item.activity.productCode,\r\n maxParticipants: item.activity.maxParticipants,\r\n isPrivate: item.activity.isPrivate,\r\n isOpen: item.activity.isOpen,\r\n activity: { ...item.activity },\r\n schedule: schedule[Object.keys(schedule)[0]],\r\n activities: [\r\n {\r\n ...item.activity,\r\n ...item,\r\n activity: { ...item.activity },\r\n startingDate: item.startingDate,\r\n schedule: scheduleData ? scheduleData.startTime : {},\r\n participants: [item],\r\n guests: [...item.guests],\r\n payments: [...item.payments],\r\n bookedAddOns: [...item.bookedAddOns],\r\n // bookedMandatoryFees: [...item.bookedMandatoryFees]\r\n }\r\n ]\r\n });\r\n });\r\n\r\n return bookings;\r\n};\r\n\r\nexport const getCalendarAccommodationsBookings = accommodations => {\r\n const bookings = [];\r\n const accommodationsBookings = [];\r\n\r\n accommodations.map(item => {\r\n if (item.accommodationBookings.length) {\r\n accommodationsBookings.push(...item.accommodationBookings);\r\n } else {\r\n accommodationsBookings.push({\r\n id: item.id,\r\n title: item.title,\r\n photo:item.photo,\r\n productCode: item.productCode,\r\n fromDate: item.fromDate,\r\n toDate: item.toDate,\r\n isWithoutBookings: true\r\n });\r\n }\r\n });\r\n\r\n accommodationsBookings.map(item => {\r\n if (item.isWithoutBookings) {\r\n bookings.push(item);\r\n return;\r\n }\r\n const existedBookingIndex = bookings.findIndex(\r\n booking =>\r\n booking.accommodations &&\r\n booking.accommodations.find(\r\n accommodation =>\r\n accommodation.accommodation.id === item.accommodation.id\r\n )\r\n );\r\n if (existedBookingIndex >= 0) {\r\n bookings[existedBookingIndex].accommodations.push({\r\n ...item.accommodation,\r\n id: item.id,\r\n guestFirstName: item.guestFirstName,\r\n guestLastName: item.guestLastName,\r\n guestPhoneNumber: item.guestPhoneNumber,\r\n guestEmail:item.guestEmail,\r\n platform: item.platform,\r\n bookingNotes:item.bookingNotes,\r\n bookingType: item.bookingType,\r\n creationTime: item.creationTime,\r\n referenceNumber: item.referenceNumber,\r\n accommodation: { ...item.accommodation },\r\n fromDate: item.fromDate,\r\n toDate: item.toDate,\r\n isRelated: item.isRelated,\r\n guests: [...item.guests],\r\n payments: [...item.payments],\r\n bookedAddOns: [...item.bookedAddOns],\r\n bookedMandatoryFees: [...item.bookedMandatoryFees],\r\n relatedActivitiesBookings: [...item.relatedActivitiesBookings]\r\n });\r\n\r\n return;\r\n } else {\r\n bookings.push({\r\n id: item.accommodation.id,\r\n title: item.accommodation.title,\r\n photo: item.accommodation.photo,\r\n productCode: item.accommodation.productCode,\r\n fromDate: item.accommodation.fromDate,\r\n toDate: item.accommodation.toDate,\r\n accommodations: [\r\n {\r\n ...item.accommodation,\r\n id: item.id,\r\n accommodation: { ...item.accommodation },\r\n fromDate: item.fromDate,\r\n toDate: item.toDate,\r\n guestFirstName: item.guestFirstName,\r\n guestLastName: item.guestLastName,\r\n guestPhoneNumber: item.guestPhoneNumber,\r\n guestEmail:item.guestEmail,\r\n platform: item.platform,\r\n bookingType: item.bookingType,\r\n bookingNotes:item.bookingNotes,\r\n creationTime: item.creationTime,\r\n referenceNumber: item.referenceNumber,\r\n isRelated: item.isRelated,\r\n guests: [...item.guests],\r\n payments: [...item.payments],\r\n bookedAddOns: [...item.bookedAddOns],\r\n bookedMandatoryFees: [...item.bookedMandatoryFees],\r\n relatedActivitiesBookings: [...item.relatedActivitiesBookings]\r\n }\r\n ]\r\n });\r\n }\r\n });\r\n\r\n return bookings;\r\n};\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n panel: {\r\n border: 'none',\r\n padding: '0px 15px'\r\n },\r\n heading: {\r\n fontWeight: 'bold'\r\n },\r\n listItem: {\r\n color: '#000000',\r\n fontSize: '13px',\r\n paddingTop: '8px',\r\n fontWeight: 'lighter',\r\n borderBottom: 'none'\r\n },\r\n panelDetailsRoot: {\r\n padding: 0,\r\n display: 'block'\r\n },\r\n priceDetails: {\r\n minWidth: '200px',\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n unitTitle: {\r\n padding: '5px 16px',\r\n fontWeight: 'bold'\r\n },\r\n summarySubheader: {\r\n lineHeight: '24px',\r\n fontSize: '10px',\r\n fontWeight: 'bold',\r\n textTransform: 'uppercase'\r\n },\r\n total: {\r\n fontWeight: 'bold',\r\n fontSize: '15px'\r\n },\r\n totalContainer: {\r\n display: 'flex',\r\n minWidth: '200px',\r\n paddingTop: '10px'\r\n },\r\n totalPriceContainer: {\r\n paddingLeft: '30px',\r\n paddingTop: '10px',\r\n display: 'flex',\r\n alignItems: 'baseline'\r\n },\r\n subheader: {\r\n display: 'flex',\r\n alignItems: 'baseline'\r\n },\r\n currency: {\r\n marginTop: '4px',\r\n fontSize: '10px'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\n\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListSubheader from '@material-ui/core/ListSubheader';\r\nimport useStyles from './styles';\r\n\r\nconst PriceDetails = ({ priceDetails, classes, isRelated }) => {\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <AccordionDetails classes={{ root: classes.panelDetailsRoot }}>\r\n {isRelated && priceDetails.type === 'activity' && (\r\n <div className={classes.column}>\r\n <ListSubheader className={classes.summarySubheader}>\r\n {t('Activities')}\r\n </ListSubheader>\r\n <Typography className={classes.unitTitle}>\r\n {priceDetails.title}\r\n </Typography>\r\n </div>\r\n )}\r\n {isRelated && priceDetails.type === 'accommodation' && (\r\n <div className={classes.column}>\r\n <ListSubheader className={classes.summarySubheader}>\r\n {t('Accommodation')}\r\n </ListSubheader>\r\n <Typography className={classes.unitTitle}>\r\n {priceDetails.title}\r\n </Typography>\r\n </div>\r\n )}\r\n {priceDetails.guestsTotal &&\r\n priceDetails.guestsTotal.map((guest, index) => {\r\n return (\r\n <ListItem key={index} className={classes.listItem}>\r\n <div className={classes.priceDetails}>\r\n <Typography className={classes.currency}>\r\n {priceDetails.currency}\r\n </Typography>\r\n <Typography style={{ fontWeight: 'bold', padding: '0px 5px' }}>\r\n {`${guest.guestPrice}`}\r\n </Typography>\r\n {guest && guest.participant && (\r\n <Typography>\r\n x {guest.count} {t(guest.participant)}\r\n </Typography>\r\n )}\r\n {guest && guest.participant === '' && (\r\n <Typography>\r\n x {guest.count}{' '}\r\n <span style={{ textTransform: 'lowercase' }}>\r\n {t('Guests')}\r\n </span>\r\n </Typography>\r\n )}\r\n {priceDetails.nightsNumber && (\r\n <Typography style={{ paddingLeft: '5px' }}>\r\n x {priceDetails.nightsNumber}{' '}\r\n {priceDetails.nightsNumber > 1 ? t('nights') : t('night')}\r\n </Typography>\r\n )}\r\n </div>\r\n <Typography\r\n className={classes.currency}\r\n style={{ paddingLeft: '30px' }}\r\n >\r\n {priceDetails.currency}\r\n </Typography>\r\n <Typography style={{ paddingLeft: '5px', fontWeight: 'bold' }}>\r\n {guest.total}\r\n </Typography>\r\n </ListItem>\r\n );\r\n })}\r\n {priceDetails.addOnsTotal.length !== 0 && (\r\n <ListSubheader className={classes.summarySubheader}>\r\n {t('Add-ons')}\r\n </ListSubheader>\r\n )}\r\n {priceDetails.addOnsTotal.length !== 0 &&\r\n priceDetails.addOnsTotal.map((addOn, index) => {\r\n return (\r\n <ListItem key={index} className={classes.listItem}>\r\n <div className={classes.priceDetails}>\r\n <Typography className={classes.currency}>\r\n {priceDetails.currency}\r\n </Typography>\r\n <Typography\r\n className={classes.total}\r\n style={{ padding: '0px 5px' }}\r\n >\r\n {`${addOn.addOnPrice}`}\r\n </Typography>\r\n <Typography>\r\n x {addOn.count} {addOn.title}\r\n </Typography>\r\n </div>\r\n <Typography\r\n className={classes.currency}\r\n style={{ paddingLeft: '30px' }}\r\n >\r\n {priceDetails.currency}\r\n </Typography>\r\n <Typography\r\n className={classes.total}\r\n style={{ paddingLeft: '5px' }}\r\n >\r\n {addOn.total}\r\n </Typography>\r\n </ListItem>\r\n );\r\n })}\r\n\r\n{priceDetails && Array.isArray(priceDetails.mandatoryFeesTotal) && priceDetails.mandatoryFeesTotal.length !== 0 && (\r\n <ListSubheader className={classes.summarySubheader}>\r\n {t('Mandatory-Fees')}\r\n </ListSubheader>\r\n )}\r\n {priceDetails.mandatoryFeesTotal.length !== 0 &&\r\n priceDetails.mandatoryFeesTotal.map((mandatoryFee, index) => {\r\n return (\r\n <ListItem key={index} className={classes.listItem}>\r\n <div className={classes.priceDetails}>\r\n <Typography className={classes.currency}>\r\n {priceDetails.currency}\r\n </Typography>\r\n <Typography\r\n className={classes.total}\r\n style={{ padding: '0px 5px' }}\r\n >\r\n </Typography>\r\n <Typography>\r\n {mandatoryFee.title}\r\n </Typography>\r\n </div>\r\n <Typography\r\n className={classes.currency}\r\n style={{ paddingLeft: '30px' }}\r\n >\r\n {priceDetails.currency}\r\n </Typography>\r\n <Typography\r\n className={classes.total}\r\n style={{ paddingLeft: '5px' }}\r\n >\r\n {mandatoryFee.total}\r\n </Typography>\r\n </ListItem>\r\n );\r\n })}\r\n </AccordionDetails>\r\n );\r\n};\r\n\r\nconst BookingPriceDetailsPanel = ({ priceDetails }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const [expanded, setExpanded] = React.useState(false);\r\n\r\n const relatedBookings =\r\n priceDetails.relatedBookings ||\r\n priceDetails.relatedActivitiesBookings ||\r\n [];\r\n\r\n return (\r\n <div className={classes.root}>\r\n <Accordion\r\n elevation={0}\r\n expanded={expanded}\r\n onChange={(event, isExpanded) => setExpanded(isExpanded)}\r\n >\r\n <AccordionSummary\r\n expandIcon={<ExpandMoreIcon />}\r\n classes={{ root: classes.panel }}\r\n aria-controls=\"panel1c-content\"\r\n id=\"panel1c-header\"\r\n >\r\n <div className={classes.column}>\r\n <Typography className={classes.heading}>\r\n {t('Booking summary')}\r\n </Typography>\r\n {!expanded && (\r\n <div className={classes.subheader}>\r\n <Typography className={classes.currency}>\r\n {priceDetails.currency}\r\n </Typography>\r\n <Typography\r\n style={{ paddingLeft: '5px' }}\r\n className={classes.total}\r\n >\r\n {priceDetails.total}\r\n </Typography>\r\n </div>\r\n )}\r\n </div>\r\n </AccordionSummary>\r\n <PriceDetails priceDetails={priceDetails} classes={classes} />\r\n {relatedBookings &&\r\n relatedBookings.map((booking, index) => {\r\n return (\r\n <PriceDetails\r\n key={index}\r\n priceDetails={booking}\r\n classes={classes}\r\n isRelated={true}\r\n />\r\n );\r\n })}\r\n <ListItem\r\n style={{ backgroundColor: '#E2F5F8', paddingTop: 0 }}\r\n className={classes.listItem}\r\n >\r\n <div className={classes.totalContainer}>\r\n <Typography className={classes.total}>{t('Total')}</Typography>\r\n </div>\r\n <div className={classes.totalPriceContainer}>\r\n <Typography className={classes.currency}>\r\n {priceDetails.currency}\r\n </Typography>\r\n <Typography\r\n style={{ paddingLeft: '5px' }}\r\n className={classes.total}\r\n >\r\n {priceDetails.total}\r\n </Typography>\r\n </div>\r\n </ListItem>\r\n </Accordion>\r\n </div>\r\n );\r\n};\r\nexport default BookingPriceDetailsPanel;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n paper: {\r\n backgroundColor: '#FFF',\r\n border: '1px solid #E5E5E5',\r\n boxSizing: 'border-box',\r\n borderRadius: '3px',\r\n width: '400px',\r\n maxHeight: '644px'\r\n },\r\n root: {\r\n padding: '0px'\r\n },\r\n subheader: {\r\n color: '#000000',\r\n fontSize: '13px',\r\n position: 'relative',\r\n lineHeight: '18px',\r\n paddingTop: '9px',\r\n fontWeight: 'bold'\r\n },\r\n listItem: {\r\n color: '#000000',\r\n fontSize: '13px',\r\n paddingTop: '8px',\r\n fontWeight: 'lighter',\r\n '&:not(:last-child)': {\r\n borderBottom: '1px solid #E5E5E5'\r\n }\r\n },\r\n unitTitle: {\r\n padding: '0px 40px 8px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n lineHeight: '18px',\r\n fontSize: '13px'\r\n },\r\n title: {\r\n lineHeight: '18px',\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n padding: '40px 40px 12px'\r\n },\r\n unitIcon: {\r\n paddingRight: '10px'\r\n },\r\n closeBtn: {\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n padding: '10px'\r\n },\r\n cancelBtnRoot: {\r\n border: '1px solid #0e8bb4',\r\n borderRadius: '3px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n color: '#0e8bb4',\r\n padding: '8px 15px',\r\n minWidth: '70px',\r\n marginRight: '16px',\r\n '&:not(:last-child)': {\r\n marginRight: '15px'\r\n }\r\n },\r\n actionBtnRoot: {\r\n boxShadow: 'none',\r\n border: '1px solid #0e8bb4',\r\n borderRadius: '3px',\r\n backgroundColor: '#0e8bb4',\r\n color: '#FFFFFF',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n padding: '8px 15px',\r\n minWidth: '80px',\r\n '&:hover': {\r\n backgroundColor: '#0e8bb4',\r\n color: '#FFFFFF'\r\n }\r\n },\r\n closeIcon: {\r\n fontSize: '17px',\r\n color: '#000'\r\n },\r\n actionsRoot: {\r\n marginTop: '16px',\r\n borderTop: '1px solid #E5E5E5',\r\n justifyContent: 'flex-start',\r\n paddingLeft: '20px'\r\n }\r\n});\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport Button from '@material-ui/core/Button';\r\nimport List from '@material-ui/core/List';\r\nimport ListSubheader from '@material-ui/core/ListSubheader';\r\nimport ListItem from '@material-ui/core/ListItem';\r\n\r\nimport {\r\n getAccommodationBookingSchedule,\r\n guestsSumSeats,\r\n isParticipantInfo\r\n} from 'utils/bookings/prepareBookingsData';\r\nimport BookingPriceDetailsPanel from '../booking-price-total/BookingPriceDetails';\r\n\r\nimport { GuestsDetailsInformation } from 'components';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst UpcomingAccommodationDialog = ({\r\n open,\r\n booking,\r\n onClose,\r\n total,\r\n onCancel\r\n}) => {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const [t] = useTranslation();\r\n\r\n if (Object.keys(booking).length === 0) {\r\n return null;\r\n }\r\n return (\r\n <Dialog open={open} classes={{ paper: classes.paper }}>\r\n <IconButton className={classes.closeBtn} onClick={onClose}>\r\n <HighlightOffIcon className={classes.closeIcon} />\r\n </IconButton>\r\n <DialogTitle\r\n id=\"alert-dialog-title\"\r\n classes={{ root: classes.title }}\r\n disableTypography={true}\r\n >\r\n {booking.referenceNumber} • {booking.guestFirstName}{' '}\r\n {booking.guestLastName}\r\n </DialogTitle>\r\n <DialogTitle\r\n id=\"alert-dialog-title\"\r\n classes={{ root: classes.unitTitle }}\r\n disableTypography={true}\r\n >\r\n {booking.accommodation.title}\r\n </DialogTitle>\r\n <DialogContent classes={{ root: classes.contentRoot }}>\r\n <List className={classes.root}>\r\n <ListSubheader className={classes.subheader}>\r\n {t('Number of guests')}\r\n </ListSubheader>\r\n <ListItem className={classes.listItem}>\r\n {guestsSumSeats(booking.guests)}\r\n {isParticipantInfo(booking.guests) && (\r\n <>\r\n {' '}\r\n (<GuestsDetailsInformation guestsInfo={booking.guests} />)\r\n </>\r\n )}\r\n </ListItem>\r\n <ListSubheader className={classes.subheader}>\r\n {t('Checkin - checkout')}\r\n </ListSubheader>\r\n <ListItem className={classes.listItem}>\r\n {getAccommodationBookingSchedule(booking)}\r\n </ListItem>\r\n\r\n <ListSubheader className={classes.subheader}>\r\n {t('Platform')}\r\n </ListSubheader>\r\n <ListItem className={classes.listItem}>{booking.platform}</ListItem>\r\n {!booking.isCanceled && total && (\r\n <BookingPriceDetailsPanel priceDetails={total} />\r\n )}\r\n </List>\r\n </DialogContent>\r\n <DialogActions classes={{ root: classes.actionsRoot }}>\r\n <Button\r\n variant=\"contained\"\r\n classes={{ root: classes.actionBtnRoot }}\r\n onClick={e => {\r\n e.stopPropagation();\r\n history.push(`/accommodations-bookings/${booking.id}/edit`);\r\n }}\r\n >\r\n {t('Edit')}\r\n </Button>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={e => {\r\n e.stopPropagation();\r\n onClose();\r\n onCancel(booking);\r\n }}\r\n classes={{ root: classes.cancelBtnRoot }}\r\n >\r\n {t('Cancel Accommodation')}\r\n </Button>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={onClose}\r\n classes={{ root: classes.cancelBtnRoot }}\r\n >\r\n {t('Back')}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n\r\nexport default UpcomingAccommodationDialog;\r\n","import gql from 'graphql-tag';\r\n\r\nexport const CANCEL_ACTIVITY_BOOKING = gql`\r\n mutation cancelActivityBooking($ids: [Int]!, $token: String) {\r\n cancelActivityBooking(ids: $ids, token: $token) {\r\n ok\r\n }\r\n }\r\n`;\r\n\r\nexport const CANCEL_ACCOMMODATION_BOOKING = gql`\r\n mutation cancelAccommodationBooking($id: Int!, $token: String) {\r\n cancelAccommodationBooking(id: $id, token: $token) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const HANDLE_ACTIVITY_BOOKING = gql`\r\n mutation handleActivityBooking($id: Int!, $isHandled: Boolean!) {\r\n handleActivityBooking(id: $id, isHandled: $isHandled) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const HANDLE_ACCOMMODATION_BOOKING = gql`\r\n mutation handleAccommodationBooking($id: Int!, $isHandled: Boolean!) {\r\n handleAccommodationBooking(id: $id, isHandled: $isHandled) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const ACCOMMODATION_BOOKING_NOTES = gql`\r\n mutation AccommodationBookingNotes($id: Int!, $accommodationBookingNotes: AccommodationBookingNotesInput!) {\r\n accommodationBookingNotes(id: $id, accommodationBookingNotes: $accommodationBookingNotes) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const ACTIVITY_BOOKING_NOTES = gql`\r\n mutation ActivityBookingNotes($id: Int!, $activityBookingNotes: ActivityBookingNotesInput!) {\r\n activityBookingNotes(id: $id, activityBookingNotes: $activityBookingNotes) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme=>({\r\n paper: {\r\n backgroundColor: '#FFF',\r\n border: '1px solid #E5E5E5',\r\n boxSizing: 'border-box',\r\n borderRadius: '3px',\r\n width: '500px',\r\n maxHeight: '644px'\r\n },\r\n root: {\r\n padding: '0px'\r\n },\r\n subheader: {\r\n color: '#000000',\r\n fontSize: '13px',\r\n position: 'relative',\r\n lineHeight: '18px',\r\n paddingTop: '9px',\r\n fontWeight: 'bold'\r\n },\r\n listItem: {\r\n color: '#000000',\r\n fontSize: '13px',\r\n paddingTop: '8px',\r\n paddingBottom: '16px',\r\n fontWeight: 'lighter',\r\n '&:not(:last-child)': {\r\n borderBottom: '1px solid #E5E5E5'\r\n }\r\n },\r\n participantsItem: {\r\n borderBottom: 'none',\r\n fontSize: '13px',\r\n paddingTop: '6px',\r\n '&:last-child': {\r\n borderBottom: '1px solid #E5E5E5'\r\n }\r\n },\r\n participantName: {\r\n width: '185px',\r\n paddingRight: '10px'\r\n },\r\n unitTitle: {\r\n padding: '0px 40px 8px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n lineHeight: '18px',\r\n fontSize: '13px'\r\n },\r\n title: {\r\n lineHeight: '18px',\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n padding: '40px 40px 12px'\r\n },\r\n unitIcon: {\r\n paddingRight: '10px'\r\n },\r\n closeBtn: {\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n padding: '10px'\r\n },\r\n cancelBtnRoot: {\r\n border: '1px solid #0e8bb4',\r\n borderRadius: '3px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n color: '#0e8bb4',\r\n padding: '8px 15px',\r\n minWidth: '70px',\r\n margin: 0,\r\n [theme.breakpoints.down('sm')]:{\r\n marginTop: '10px',\r\n minWidth: '150px'\r\n }\r\n },\r\n actionBtnRoot: {\r\n boxShadow: 'none',\r\n border: '1px solid #0e8bb4',\r\n borderRadius: '3px',\r\n backgroundColor: '#0e8bb4',\r\n color: '#FFFFFF',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n padding: '8px 15px',\r\n minWidth: '80px',\r\n '&:hover': {\r\n backgroundColor: '#0e8bb4',\r\n color: '#FFFFFF'\r\n },\r\n [theme.breakpoints.down('sm')]:{\r\n marginTop: '10px'\r\n }\r\n },\r\n closeIcon: {\r\n fontSize: '17px',\r\n color: '#000'\r\n },\r\n actionsRoot: {\r\n display: 'flex',\r\n marginTop: '16px',\r\n borderTop: '1px solid #E5E5E5',\r\n justifyContent: 'space-between',\r\n padding: '8px 40px',\r\n [theme.breakpoints.down('sm')]:{\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n padding: '8px 20px',\r\n marginTop: '10px'\r\n }\r\n },\r\n actionsRootOnlyView: {\r\n justifyContent: 'flex-end'\r\n },\r\n actionIcon: {\r\n cursor: 'pointer',\r\n fontSize: '17px'\r\n },\r\n editIcon: {\r\n marginRight: '7px'\r\n },\r\n actionsWrapper: {\r\n display: 'flex',\r\n marginLeft: '15px'\r\n }\r\n}));\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useMutation } from '@apollo/react-hooks';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport Button from '@material-ui/core/Button';\r\nimport List from '@material-ui/core/List';\r\nimport ListSubheader from '@material-ui/core/ListSubheader';\r\nimport ListItem from '@material-ui/core/ListItem';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport { guestsSumSeats } from 'utils/bookings/prepareBookingsData';\r\n\r\nimport { CANCEL_ACTIVITY_BOOKING } from 'graphql/mutations/booking';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst UpcomingActivitiesDialog = ({\r\n open,\r\n activity,\r\n onClose,\r\n onCancel,\r\n isOnlyView\r\n}) => {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const [t] = useTranslation();\r\n const confirm = React.useContext(ConfirmContext);\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const [cancelActivityBooking] = useMutation(CANCEL_ACTIVITY_BOOKING);\r\n\r\n const schedule = activity.schedule;\r\n const activityBookings = activity.activityBookings || activity.participants;\r\n const bookTime = activity.closestEvent || {\r\n startDate: activity.startingDate,\r\n startTime: schedule && schedule.startTime,\r\n duration: schedule && schedule.duration,\r\n timeType: schedule && schedule.timeType\r\n };\r\n\r\n if (Object.keys(activity).length === 0) {\r\n return null;\r\n }\r\n\r\n const activityCancellationHandler = id => {\r\n confirm({\r\n title: `Cancel Booking?`,\r\n confirmationText: 'Cancel Booking',\r\n cancellationText: 'Back'\r\n }).then(() => {\r\n cancelActivityBooking({ variables: { ids: [parseInt(id)] } }).then(() => {\r\n enqueueSnackbar(t('Activity booking was successfully canceled!'), {\r\n variant: 'success'\r\n });\r\n onClose(true);\r\n });\r\n });\r\n };\r\n\r\n return (\r\n <Dialog open={open} classes={{ paper: classes.paper }}>\r\n <IconButton className={classes.closeBtn} onClick={onClose}>\r\n <HighlightOffIcon className={classes.closeIcon} />\r\n </IconButton>\r\n <DialogTitle\r\n id=\"alert-dialog-title\"\r\n classes={{ root: classes.title }}\r\n disableTypography={true}\r\n >\r\n {activity.productCode} • {activity.title}\r\n </DialogTitle>\r\n <DialogContent classes={{ root: classes.contentRoot }}>\r\n <List className={classes.root}>\r\n <ListSubheader className={classes.subheader}>\r\n {t('Activity type')}\r\n </ListSubheader>\r\n <ListItem className={classes.listItem}>\r\n {activity.isOpen ? t('Open') : t('Private')}\r\n </ListItem>\r\n <ListSubheader className={classes.subheader}>\r\n {t('Participants')}\r\n </ListSubheader>\r\n <List>\r\n {activityBookings &&\r\n activityBookings.map((booking, index) => {\r\n return (\r\n <ListItem key={index} className={classes.participantsItem}>\r\n <Typography className={classes.participantName}>\r\n {booking.guestFirstName} {booking.guestLastName}\r\n </Typography>\r\n <Typography className={classes.participantName}>\r\n {booking.platform}\r\n </Typography>\r\n <Typography>{guestsSumSeats(booking.guests)}</Typography>\r\n <div className={classes.actionsWrapper}>\r\n <EditIcon\r\n onClick={() =>\r\n history.push(\r\n `/activities-bookings/${booking.id}/edit`\r\n )\r\n }\r\n className={classNames(\r\n classes.actionIcon,\r\n classes.editIcon\r\n )}\r\n />\r\n <HighlightOffIcon\r\n onClick={() => activityCancellationHandler(booking.id)}\r\n className={classes.actionIcon}\r\n />\r\n </div>\r\n </ListItem>\r\n );\r\n })}\r\n {!activityBookings ||\r\n (activityBookings.length === 0 && (\r\n <ListItem className={classes.participantsItem}>—</ListItem>\r\n ))}\r\n </List>\r\n <ListSubheader className={classes.subheader}>\r\n {t('Start time')}\r\n </ListSubheader>\r\n <ListItem className={classes.listItem}>\r\n {bookTime.startDate ? `${bookTime.startDate}` : '—'}\r\n {bookTime.startTime ? `, ${bookTime.startTime}` : ''}\r\n </ListItem>\r\n <ListSubheader className={classes.subheader}>\r\n {t('Duration')}\r\n </ListSubheader>\r\n <ListItem className={classes.listItem}>\r\n {bookTime.duration ? bookTime.duration : '—'} {bookTime.timeType}\r\n </ListItem>\r\n </List>\r\n </DialogContent>\r\n <DialogActions\r\n classes={{\r\n root: classNames(classes.actionsRoot, {\r\n [classes.actionsRootOnlyView]: isOnlyView\r\n })\r\n }}\r\n >\r\n {!isOnlyView && (\r\n <div>\r\n <Button\r\n variant=\"contained\"\r\n classes={{ root: classes.actionBtnRoot }}\r\n onClick={e => {\r\n e.stopPropagation();\r\n history.push(\r\n `/activities/${\r\n activity.activity ? activity.activity.id : activity.id\r\n }`\r\n );\r\n }}\r\n >\r\n {t('Edit')}\r\n </Button>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={e => {\r\n e.stopPropagation();\r\n onCancel(activity);\r\n }}\r\n style={{ marginLeft: '8px' }}\r\n classes={{ root: classes.cancelBtnRoot }}\r\n >\r\n {t('Cancel all Activities')}\r\n </Button>\r\n </div>\r\n )}\r\n <Button\r\n variant=\"outlined\"\r\n onClick={onClose}\r\n classes={{ root: classes.cancelBtnRoot }}\r\n >\r\n {t('Back')}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n\r\nexport default UpcomingActivitiesDialog;\r\n","import { isRequired, isEmail, isValidLength } from 'utils/validators';\r\n\r\nconst COMPANY_NAME_MIN_LENGTH = 2;\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (isRequired(values.firstName || '', true)) {\r\n errors.firstName = 'First name is required';\r\n }\r\n\r\n if (isRequired(values.lastName || '', true)) {\r\n errors.lastName = 'Last name is required';\r\n }\r\n\r\n if (isRequired(values.email || '', true)) {\r\n errors.email = 'Email is required';\r\n } else if (isEmail(values.email, 'Incorrect email value')) {\r\n errors.email = 'Incorrect email value';\r\n }\r\n\r\n if (isRequired(values.phoneNumber || '', true)) {\r\n errors.phoneNumber = 'Phone is required';\r\n }\r\n if (isRequired(values.companyName || '', true)) {\r\n errors.companyName = 'Company name is required';\r\n } else if (\r\n !isValidLength(values.companyName, COMPANY_NAME_MIN_LENGTH, true)\r\n ) {\r\n errors.companyName = 'The Company name should contain at least 3 symbols';\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme=> ({\r\n paper: {\r\n backgroundColor: '#FFF',\r\n border: '1px solid #E5E5E5',\r\n boxSizing: 'border-box',\r\n borderRadius: '3px',\r\n width: '600px',\r\n maxHeight: '644px',\r\n [theme.breakpoints.down('sm')]: {\r\n // width: '100%', \r\n // maxWidth: '100%' \r\n }\r\n },\r\n closeIcon: {\r\n fontSize: '17px',\r\n color: '#000'\r\n },\r\n closeBtn: {\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n padding: '10px'\r\n },\r\n title: {\r\n fontSize: '15px',\r\n paddingBottom: '20px',\r\n padding: '40px 19px 20px',\r\n fontWeight: 'bold'\r\n },\r\n input: {\r\n width: '255px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n paddingBottom: '25px', \r\n }\r\n \r\n },\r\n formWrapper: {\r\n padding: '0px 20px'\r\n },\r\n actionsBtns: {\r\n marginTop: '20px',\r\n paddingTop: '20px',\r\n paddingBottom: '10px',\r\n borderTop: '1px solid #E5E5E5'\r\n },\r\n inlineInputs: {\r\n display: 'flex',\r\n paddingBottom: '25px',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]:{\r\n flexDirection:'column',\r\n paddingBottom: '0'\r\n }\r\n },\r\n inlineSwitch: {\r\n display: 'flex',\r\n fontSize: '10px',\r\n flexDirection: 'row'\r\n },\r\n inlineSwitchLabel: {\r\n flexDirection: 'row-reverse',\r\n textTransform: 'uppercase',\r\n marginLeft: '1px',\r\n color: '#071B27',\r\n lineHeight: '12px',\r\n marginBottom: '6px',\r\n letterSpacing: '0.035em',\r\n fontSize: '10px'\r\n },\r\n inputIndent: {\r\n paddingBottom: '25px'\r\n },\r\n checkbox: {\r\n margin: '-10px 0 40px'\r\n },\r\n helpIcon: {\r\n position: 'absolute',\r\n fontSize: '18px',\r\n top: '-1px',\r\n marginLeft: '6px'\r\n },\r\n selectBOButton: {\r\n border: '1px solid #0e8bb4',\r\n borderRadius: '3px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n color: '#0e8bb4',\r\n padding: '8px 15px',\r\n minWidth: '80px',\r\n marginRight: '15px'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { Field, reduxForm } from 'redux-form';\r\n\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport Button from '@material-ui/core/Button';\r\n\r\n// import HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport HelpIcon from '@material-ui/icons/Help';\r\n\r\nimport FormActionButtons from '../form-action-buttons/FormActionButtons';\r\nimport { Input, Switch, CheckboxInput, CheckboxButtonsGroup } from 'components';\r\nimport { SwitchInput } from 'components';\r\n\r\nimport validate from './validate';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst initialValues = {\r\n firstName: '',\r\n lastName: '',\r\n phoneNumber: '',\r\n companyName: '',\r\n referencePrefix: '',\r\n email: '',\r\n isNotify: ''\r\n};\r\n\r\nconst styles = {\r\n // use \"icon\" instead of \"thumb\" in v3\r\n thumb: {\r\n borderRadius: 0\r\n }\r\n};\r\n\r\nconst BusinessOwnerForm = ({ handleSubmit, open, onClose, isUpdate }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const [checked, setChecked] = useState(false);\r\n\r\n const [value, setValue] = useState('True');\r\n\r\n const onChangeHandler = e => {\r\n if (e.target.value) {\r\n const emailNotification = 'true';\r\n } else {\r\n const emailNotification = 'false';\r\n }\r\n };\r\n\r\n return (\r\n <Dialog open={open} classes={{ paper: classes.paper }}>\r\n <IconButton className={classes.closeBtn} onClick={onClose}>\r\n <HighlightOffIcon className={classes.closeIcon} />\r\n </IconButton>\r\n <DialogTitle\r\n id=\"alert-dialog-title\"\r\n classes={{ root: classes.title }}\r\n disableTypography={true}\r\n >\r\n {t('Business Owner')}\r\n </DialogTitle>\r\n <div className={classes.formWrapper}>\r\n <form onSubmit={handleSubmit}>\r\n {/*<div>\r\n <Field\r\n name=\"emailNotification\"\r\n checked={true}\r\n label=\"Email notification*\"\r\n type=\"checkbox\"\r\n value={true}\r\n defaultChecked={true}\r\n placeholder=\"Email\"\r\n component={CheckboxInput}\r\n className={classes.inlineSwitch}\r\n />\r\n </div> */}\r\n <div className={classes.inlineInputs}>\r\n <Field\r\n className={classes.input}\r\n name=\"firstName\"\r\n label=\"First name *\"\r\n placeholder=\"First name\"\r\n component={Input}\r\n />\r\n <Field\r\n name=\"lastName\"\r\n label=\"Last name *\"\r\n className={classes.input}\r\n placeholder=\"Last name\"\r\n component={Input}\r\n />\r\n </div>\r\n <div className={classes.inlineInputs}>\r\n <Field\r\n className={classes.input}\r\n name=\"email\"\r\n disabled={!!isUpdate}\r\n label=\"Email *\"\r\n placeholder=\"Email\"\r\n component={Input}\r\n />\r\n <Field\r\n name=\"phoneNumber\"\r\n label=\"Phone *\"\r\n className={classes.input}\r\n isOnlyNumber={true}\r\n isPhoneNumber={true}\r\n maxLength={20}\r\n placeholder=\"Phone\"\r\n component={Input}\r\n />\r\n </div>\r\n {!isUpdate && (\r\n <Field\r\n name=\"companyName\"\r\n label=\"Company name *\"\r\n placeholder=\"Company name\"\r\n component={Input}\r\n className={classes.inputIndent}\r\n />\r\n )}\r\n {isUpdate && (\r\n <div className={classes.inlineInputs}>\r\n <Field\r\n className={classes.input}\r\n name=\"companyName\"\r\n label=\"Company name *\"\r\n placeholder=\"Company name\"\r\n component={Input}\r\n />\r\n <Field\r\n className={classes.input}\r\n name=\"referencePrefix\"\r\n label=\"Reference prefix *\"\r\n disabled={true}\r\n placeholder=\"Reference prefix\"\r\n component={Input}\r\n />\r\n </div>\r\n )}\r\n <Field\r\n name=\"isNotify\"\r\n className={classes.checkbox}\r\n component={CheckboxButtonsGroup}\r\n />\r\n <Button\r\n variant=\"outlined\"\r\n onClick={handleSubmit}\r\n className={classes.selectBOButton}\r\n >\r\n {t('Select Business Owner')}\r\n </Button>\r\n {/* <Field\r\n name=\"selectBusinessOwner\"\r\n className={classes.checkbox}\r\n component={CheckboxButtonsGroup}\r\n popover={\r\n <PopoverWrapper text=\"Please select Business Owner Company to view all appropriate data within Admin Portal\">\r\n <HelpIcon className={classes.helpIcon} />\r\n </PopoverWrapper>\r\n }\r\n /> */}\r\n <div className={classes.actionsBtns}>\r\n <FormActionButtons\r\n cancelPath=\"/business-owners\"\r\n cancelCallback={onClose}\r\n actionLabel={isUpdate ? 'Save' : 'Create'}\r\n />\r\n </div>\r\n </form>\r\n </div>\r\n </Dialog>\r\n );\r\n};\r\n\r\nexport default reduxForm({\r\n form: 'businessOwnerForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n initialValues,\r\n validate\r\n})(connect(null)(BusinessOwnerForm));\r\n","import { isRequired, isEmail } from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (isRequired(values.firstName || '', true)) {\r\n errors.firstName = 'First name is required';\r\n }\r\n\r\n if (isRequired(values.lastName || '', true)) {\r\n errors.lastName = 'Last name is required';\r\n }\r\n\r\n if (isRequired(values.email || '', true)) {\r\n errors.email = 'Email is required';\r\n } else if (isEmail(values.email, 'Incorrect email value')) {\r\n errors.email = 'Incorrect email value';\r\n }\r\n\r\n if (isRequired(values.phoneNumber || '', true)) {\r\n errors.phoneNumber = 'Phone is required';\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\nimport { useTheme } from 'styled-components';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n paper: {\r\n backgroundColor: '#FFF',\r\n border: '1px solid #E5E5E5',\r\n boxSizing: 'border-box',\r\n borderRadius: '3px',\r\n width: '600px',\r\n maxHeight: '644px'\r\n },\r\n closeIcon: {\r\n fontSize: '17px',\r\n color: '#000'\r\n },\r\n closeBtn: {\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n padding: '10px'\r\n },\r\n title: {\r\n fontSize: '15px',\r\n paddingBottom: '20px',\r\n padding: '40px 19px 20px',\r\n fontWeight: 'bold'\r\n },\r\n input: {\r\n width: '255px',\r\n [theme.breakpoints.down('sm')]:{\r\n paddingBottom: '20px',\r\n width: '100%'\r\n }\r\n },\r\n formWrapper: {\r\n padding: '0px 20px'\r\n },\r\n actionsBtns: {\r\n marginTop: '20px',\r\n paddingTop: '20px',\r\n paddingBottom: '10px',\r\n borderTop: '1px solid #E5E5E5'\r\n },\r\n inlineInputs: {\r\n display: 'flex',\r\n paddingBottom: '25px',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]:{\r\n flexDirection: 'column',\r\n paddingBottom: '0'\r\n }\r\n },\r\n inlineSwitch: {\r\n display: 'flex',\r\n fontSize: '10px',\r\n flexDirection: 'row'\r\n },\r\n inlineSwitchLabel: {\r\n flexDirection: 'row-reverse',\r\n textTransform: 'uppercase',\r\n marginLeft: '1px',\r\n color: '#071B27',\r\n lineHeight: '12px',\r\n marginBottom: '6px',\r\n letterSpacing: '0.035em',\r\n fontSize: '10px'\r\n },\r\n inputIndent: {\r\n paddingBottom: '25px'\r\n },\r\n checkbox: {\r\n margin: '-10px 0 40px'\r\n },\r\n helpIcon: {\r\n position: 'absolute',\r\n fontSize: '18px',\r\n top: '-1px',\r\n marginLeft: '6px'\r\n },\r\n selectBOButton: {\r\n border: '1px solid #0e8bb4',\r\n borderRadius: '3px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n color: '#0e8bb4',\r\n padding: '8px 15px',\r\n minWidth: '80px',\r\n marginRight: '15px'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { connect } from 'react-redux';\r\nimport { Field, reduxForm } from 'redux-form';\r\n\r\nimport { Dialog, IconButton, DialogTitle, Button } from '@material-ui/core';\r\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\r\n\r\nimport { CheckboxButtonsGroup, Input } from '../index';\r\nimport FormActionButtons from '../form-action-buttons/FormActionButtons';\r\nimport validate from './validate';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst initialValues = {\r\n firstName: '',\r\n lastName: '',\r\n phoneNumber: '',\r\n companyName: '',\r\n referencePrefix: '',\r\n email: '',\r\n isNotify: ''\r\n};\r\n\r\nconst UserForm = props => {\r\n const { handleSubmit, open, onClose, isUpdate } = props;\r\n\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <Dialog open={open} classes={{ paper: classes.paper }}>\r\n <IconButton className={classes.closeBtn} onClick={onClose}>\r\n <HighlightOffIcon className={classes.closeIcon} />\r\n </IconButton>\r\n <DialogTitle\r\n id=\"alert-dialog-title\"\r\n classes={{ root: classes.title }}\r\n disableTypography={true}\r\n >\r\n {t('User')}\r\n </DialogTitle>\r\n <div className={classes.formWrapper}>\r\n <form onSubmit={handleSubmit}>\r\n <div className={classes.inlineInputs}>\r\n <Field\r\n className={classes.input}\r\n name=\"firstName\"\r\n label=\"First name *\"\r\n placeholder=\"First name\"\r\n component={Input}\r\n />\r\n <Field\r\n name=\"lastName\"\r\n label=\"Last name *\"\r\n className={classes.input}\r\n placeholder=\"Last name\"\r\n component={Input}\r\n />\r\n </div>\r\n <div className={classes.inlineInputs}>\r\n <Field\r\n className={classes.input}\r\n name=\"email\"\r\n disabled={!!isUpdate}\r\n label=\"Email *\"\r\n placeholder=\"Email\"\r\n component={Input}\r\n />\r\n <Field\r\n name=\"phoneNumber\"\r\n label=\"Phone *\"\r\n className={classes.input}\r\n isOnlyNumber={true}\r\n isPhoneNumber={true}\r\n maxLength={20}\r\n placeholder=\"Phone\"\r\n component={Input}\r\n />\r\n </div>\r\n <div className={classes.inlineInputs}>\r\n <Field\r\n name=\"isNotify\"\r\n className={classes.checkbox}\r\n component={CheckboxButtonsGroup}\r\n />\r\n </div>\r\n <div className={classes.actionsBtns}>\r\n <FormActionButtons\r\n cancelPath=\"/users\"\r\n cancelCallback={onClose}\r\n actionLabel={isUpdate ? 'Save' : 'Create'}\r\n />\r\n </div>\r\n </form>\r\n </div>\r\n </Dialog>\r\n );\r\n};\r\n\r\nexport default reduxForm({\r\n form: 'usersForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n initialValues,\r\n validate\r\n})(connect(null)(UserForm));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n container: {\r\n marginBottom: '26px'\r\n },\r\n wrapper: {\r\n position: 'relative',\r\n minHeight: '56px',\r\n [theme.breakpoints.down('sm')]: {\r\n minHeight: '48px'\r\n }\r\n },\r\n wrapperInitialFocus: {\r\n paddingBottom: '25px'\r\n },\r\n label: {\r\n display: 'block',\r\n marginBottom: 6,\r\n color: '#071B27',\r\n textTransform: 'uppercase',\r\n fontSize: 10,\r\n lineHeight: '12px',\r\n letterSpacing: '0.035em',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: 8\r\n }\r\n },\r\n secondLabel: {\r\n display: 'flex',\r\n alignItems: 'baseline',\r\n justifyContent: 'space-between',\r\n marginBottom: '12px',\r\n color: '#071B27',\r\n lineHeight: '12px',\r\n letterSpacing: '0.035em',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '8px'\r\n }\r\n },\r\n datesLabel: {\r\n display: 'flex',\r\n textTransform: 'none',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column'\r\n }\r\n },\r\n fromTo: {\r\n marginRight: '10px',\r\n fontWeight: 500,\r\n [theme.breakpoints.down('sm')]: {\r\n marginRight: '5px'\r\n }\r\n },\r\n customInputDate: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n backgroundColor: '#FFFFFF',\r\n border: '1px solid #BECEDA',\r\n borderRadius: '3px',\r\n boxSizing: 'border-box',\r\n width: '100%',\r\n cursor: 'pointer',\r\n fontSize: '13px',\r\n lineHeight: '10px',\r\n padding: '7px 12px',\r\n position: 'absolute',\r\n zIndex: '1',\r\n '&:hover': {\r\n border: '1px solid #41B7D7'\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '5px 10px',\r\n \r\n }\r\n },\r\n calendarIcon: {\r\n fontSize: '20px',\r\n marginRight: '7px',\r\n marginTop: '-2px',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '18px',\r\n marginRight: '5px'\r\n }\r\n },\r\n dateRangeDivider: {\r\n margin: '0 3px',\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '0 1px'\r\n }\r\n },\r\n hiddenDateRangePicker: {\r\n position: 'absolute',\r\n top: '19px',\r\n left: '0',\r\n [theme.breakpoints.down('sm')]: {\r\n top: '15px'\r\n }\r\n },\r\n focus: {\r\n boxShadow: '0 0 3px 3px rgba(65, 183, 215, 0.35)',\r\n border: '1px solid #41B7D7'\r\n },\r\n errorInput: {\r\n border: '1px solid #EB5757',\r\n boxShadow: 'none',\r\n '&:hover': {\r\n border: '1px solid #EB5757'\r\n }\r\n },\r\n error: {\r\n marginTop: '50px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginTop: '40px'\r\n }\r\n },\r\n errorOpenedPicker: {\r\n position: 'relative',\r\n zIndex: 1,\r\n margin: '-28px 105px 35px',\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '-24px 90px 30px'\r\n }\r\n },\r\n checkboxRoot: {},\r\n checked: {\r\n color: '#1D9DC6'\r\n },\r\n disabledCheckbox: {\r\n color: '#BECEDA',\r\n backgroundColor: '#BECEDA'\r\n },\r\n checkboxIcon: {\r\n color: theme.baseUI.color,\r\n fontSize: '21px',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '18px'\r\n }\r\n },\r\n ClearButton: {\r\n letterSpacing: '0.05em',\r\n textTransform: 'uppercase',\r\n marginTop: '-2px',\r\n fontWeight: 'bold',\r\n fontSize: '13px',\r\n textDecoration: 'underline',\r\n position: 'absolute',\r\n right: '0',\r\n bottom: '0',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '11px'\r\n }\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport moment from 'moment';\r\nimport classNames from 'classnames';\r\n\r\nimport { useMediaQuery } from '@material-ui/core';\r\nimport { DateRangePicker } from 'react-dates';\r\n\r\nimport { Button, Typography } from '@material-ui/core';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\nimport DateRangeIcon from '@material-ui/icons/DateRange';\r\n\r\nimport { LOCALES_OBJ } from 'constants/base';\r\n\r\nimport { useStyles } from './styles';\r\nimport { getIsHalf } from '../../utils/book-accommodation/getIsHalf';\r\n\r\nconst MultiDatePickerCalendar = ({\r\n isStartDateRenderMonth,\r\n isOutsideRange,\r\n inputClassName,\r\n input,\r\n label,\r\n className,\r\n secondLabelClass,\r\n availableRange,\r\n disabledDates,\r\n changeMonthsCallback,\r\n dateRangePickerClass,\r\n isInput,\r\n numberOfMonths,\r\n isHideDatesLabel,\r\n labelTypographyVariant,\r\n cutoffData,\r\n daySize,\r\n initialFocus,\r\n meta: { touched, error, submitFailed }\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n const [focus, setFocus] = React.useState(initialFocus || null);\r\n const [isHiddenNextButton, setHiddenNextButton] = React.useState(false);\r\n\r\n const [render, setRender] = React.useState(true);\r\n\r\n const [renderMonth, setRenderMonth] = React.useState(\r\n isStartDateRenderMonth && input.value.startDate\r\n ? input.value.startDate\r\n : moment()\r\n );\r\n\r\n React.useEffect(() => {\r\n setRender(!render);\r\n setTimeout(() => {\r\n setRender(render);\r\n });\r\n }, [selectedLanguage]);\r\n\r\n // const selectedStartDate = input.value.startDate;\r\n\r\n // const onChangeHandler = (startDate, endDate) => {\r\n // if (!moment(startDate).isSame(selectedStartDate, 'day')) {\r\n // input.onChange({ startDate, endDate: null });\r\n // return;\r\n // }\r\n\r\n // input.onChange({ startDate, endDate });\r\n // };\r\n const onChangeHandler = (startDate, endDate) => {\r\n if (!endDate || moment(startDate).isSame(endDate, 'day')) {\r\n input.onChange({ startDate, endDate: startDate });\r\n return;\r\n }\r\n\r\n const dateRange = getDates(startDate, endDate); \r\n const isAnyBlocked = dateRange.some(date => isBlockedDay(date));\r\n\r\n if (isAnyBlocked) {\r\n input.onChange({ startDate, endDate: startDate });\r\n } else {\r\n // Allow range selection if no dates in range are blocked\r\n input.onChange({ startDate, endDate });\r\n }\r\n};\r\n\r\n const onPrevMonthClickHandler = date => {\r\n setRenderMonth(date);\r\n setHiddenNextButton(false);\r\n if (changeMonthsCallback) changeMonthsCallback(date);\r\n };\r\n\r\n const onNextMonthClickHandler = date => {\r\n setRenderMonth(date);\r\n const currentDate = moment();\r\n const endAvailableDate = moment(currentDate).add(23, 'M');\r\n\r\n const isTheSameDates = moment(date)\r\n .startOf('month')\r\n .isSame(endAvailableDate.startOf('month'));\r\n\r\n if (isTheSameDates) setHiddenNextButton(true);\r\n if (changeMonthsCallback) changeMonthsCallback(date);\r\n };\r\n const isSmallScreen = useMediaQuery((theme) => theme.breakpoints.down('sm'));\r\n const isBlockDayByCutoffPeriodWithoutTime = (\r\n cutoffPeriod,\r\n cutoffPeriodTimeType,\r\n isDayBlocked,\r\n date\r\n ) => {\r\n if (!cutoffPeriod) return isDayBlocked;\r\n\r\n const dateWithTime = moment(date).set({\r\n hour: 0,\r\n minute: 0\r\n });\r\n const nowCutoffDate = moment().add(cutoffPeriod, cutoffPeriodTimeType);\r\n\r\n if (moment(dateWithTime).isSameOrBefore(nowCutoffDate, 'day')) {\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const isBlockDayByCutoffPeriodWithTime = (\r\n cutoffPeriod,\r\n cutoffPeriodTimeType,\r\n startTimeAndDuration,\r\n date\r\n ) => {\r\n const disabledStartTimeList = startTimeAndDuration.map(item => {\r\n const startTime = moment(item.startTime, 'HH:mm');\r\n const dateWithTime = moment(date).set({\r\n hour: startTime.get('hour'),\r\n minute: startTime.get('minute')\r\n });\r\n const nowCutoffDate = moment().add(cutoffPeriod, cutoffPeriodTimeType);\r\n const difference = moment(dateWithTime).diff(nowCutoffDate);\r\n return difference <= 0;\r\n });\r\n\r\n if (disabledStartTimeList.every(value => value)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n function getDates(startDate, stopDate) {\r\n const dateArray = [];\r\n let currentDate = moment(startDate);\r\n let endDate = moment(stopDate);\r\n while (currentDate <= endDate) {\r\n dateArray.push(moment(currentDate).format('YYYY-MM-DD'));\r\n currentDate = moment(currentDate).add(1, 'days');\r\n }\r\n return dateArray;\r\n }\r\n\r\n const isBlockDayByCutoffPeriod = (date, isDayBlocked) => {\r\n if (isDayBlocked) return isDayBlocked;\r\n\r\n if (cutoffData) {\r\n const days = cutoffData.days;\r\n const daysArray = cutoffData.daysArray;\r\n\r\n const cutoffPeriod = parseInt(cutoffData.cutoffPeriod);\r\n const cutoffPeriodTimeType = cutoffData.cutoffPeriodTimeType;\r\n\r\n if (days) {\r\n const isDisabled = isBlockDayByCutoffPeriodWithoutTime(\r\n cutoffPeriod,\r\n cutoffPeriodTimeType,\r\n isDayBlocked,\r\n date\r\n );\r\n if (isDisabled) return true;\r\n } else if (daysArray) {\r\n let isDisabledDate = false;\r\n\r\n daysArray.map(item => {\r\n const days = item.days;\r\n const startTimeAndDuration = item.startTimeAndDuration;\r\n\r\n const dateDay = moment(date).format('ddd');\r\n\r\n if (days[dateDay]) {\r\n if (startTimeAndDuration.length) {\r\n const isDisabled = isBlockDayByCutoffPeriodWithTime(\r\n cutoffPeriod,\r\n cutoffPeriodTimeType,\r\n startTimeAndDuration,\r\n date\r\n );\r\n if (isDisabled) isDisabledDate = true;\r\n } else {\r\n const isDisabled = isBlockDayByCutoffPeriodWithoutTime(\r\n cutoffPeriod,\r\n cutoffPeriodTimeType,\r\n isDayBlocked,\r\n date\r\n );\r\n if (isDisabled) isDisabledDate = true;\r\n }\r\n }\r\n });\r\n\r\n if (isDisabledDate) return true;\r\n }\r\n }\r\n\r\n return isDayBlocked;\r\n };\r\n\r\n const isBlockedDay = date => {\r\n if (\r\n disabledDates &&\r\n disabledDates.includes(moment(date).format('YYYY-MM-DD'))\r\n ) {\r\n return true;\r\n }\r\n\r\n if (input.value.startDate && !input.value.endDate) {\r\n const arr = getDates(input.value.startDate, date);\r\n let flag = false;\r\n\r\n arr.forEach((el, item) => {\r\n const dayOfWeek = moment(el).format('ddd');\r\n if (\r\n !!availableRange &&\r\n !availableRange?.daysOfWeek.includes(dayOfWeek)\r\n ) {\r\n flag = true;\r\n }\r\n });\r\n\r\n disabledDates.forEach(el => {\r\n if (moment(el).isBetween(input.value.startDate, date, 'day', '[]')) {\r\n flag = true;\r\n }\r\n });\r\n\r\n if (flag) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!availableRange) return false;\r\n\r\n if (availableRange.endDate && availableRange.endDate !== 'None') {\r\n const isBetween = moment(date).isBetween(\r\n availableRange.startDate,\r\n availableRange.endDate,\r\n 'day',\r\n '[]'\r\n );\r\n\r\n if (isBetween) {\r\n const dayOfDate = moment(date).format('ddd');\r\n return !availableRange.daysOfWeek.includes(dayOfDate);\r\n }\r\n } else {\r\n const isSameOrAfter = moment(date).isSameOrAfter(\r\n availableRange.startDate,\r\n 'day'\r\n );\r\n\r\n if (isSameOrAfter) {\r\n const dayOfDate = moment(date).format('ddd');\r\n return !availableRange.daysOfWeek.includes(dayOfDate);\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const handleResetDate = () => {\r\n onChangeHandler(null, null);\r\n setFocus(initialFocus || null);\r\n };\r\n\r\n return (\r\n <div className={classes.container}>\r\n <div\r\n className={classNames(\r\n classes.wrapper,\r\n className,\r\n initialFocus ? classes.wrapperInitialFocus : ''\r\n )}\r\n >\r\n {initialFocus ? (\r\n <label className={classNames(classes.secondLabel, secondLabelClass)}>\r\n <Typography\r\n variant={labelTypographyVariant ? labelTypographyVariant : 'h2'}\r\n >\r\n {t(label)}\r\n </Typography>\r\n <div className={classes.datesLabel}>\r\n <Typography variant=\"body1\" className={classes.fromTo}>\r\n {input.value && !isHideDatesLabel ? `${t('From – To')}:` : ' '}\r\n </Typography>\r\n <Typography variant=\"body1\">\r\n {input.value && (\r\n <>\r\n {input.value.startDate &&\r\n moment(input.value.startDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM D, YYYY')}{' '}\r\n –{' '}\r\n {input.value.endDate &&\r\n moment(input.value.endDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM D, YYYY')}\r\n </>\r\n )}\r\n </Typography>\r\n </div>\r\n </label>\r\n ) : (\r\n <label htmlFor=\"startDate\" className={classes.label}>\r\n {t(label)}\r\n </label>\r\n )}\r\n\r\n <label\r\n htmlFor=\"startDate\"\r\n onClick={() => setFocus('startDate')}\r\n className={classNames(\r\n classes.customInputDate,\r\n {\r\n [classes.focus]: focus\r\n },\r\n {\r\n [classes.errorInput]: (touched || submitFailed) && error\r\n },\r\n inputClassName\r\n )}\r\n >\r\n <DateRangeIcon className={classes.calendarIcon} />\r\n\r\n {input.value.startDate ? (\r\n moment(input.value.startDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM D, YYYY')\r\n ) : (\r\n <div>{t('Start date')}</div>\r\n )}\r\n <span className={classes.dateRangeDivider}>-</span>\r\n {input.value.endDate ? (\r\n moment(input.value.endDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM D, YYYY')\r\n ) : (\r\n <div>{t('End date')}</div>\r\n )}\r\n </label>\r\n\r\n {!initialFocus && (touched || submitFailed) && error && (\r\n <FormHelperText className={classes.error} error>\r\n {t(error)}\r\n </FormHelperText>\r\n )}\r\n\r\n <div\r\n className={classNames(\r\n classes.hiddenDateRangePicker,\r\n dateRangePickerClass\r\n )}\r\n >\r\n {render && (\r\n <DateRangePicker\r\n verticalSpacing={0}\r\n readOnly={true}\r\n noBorder={true}\r\n customArrowIcon={<div>{''}</div>}\r\n startDateId=\"startDate\"\r\n endDateId=\"endDate\"\r\n displayFormat=\"MMM D, YYYY\"\r\n startDate={input.value.startDate}\r\n endDate={input.value.endDate}\r\n onDatesChange={({ startDate, endDate }) => {\r\n onChangeHandler(startDate, endDate);\r\n }}\r\n minimumNights={0}\r\n onPrevMonthClick={onPrevMonthClickHandler}\r\n onNextMonthClick={onNextMonthClickHandler}\r\n navNext={isHiddenNextButton ? <div>{''}</div> : ''}\r\n initialVisibleMonth={() => renderMonth}\r\n isOutsideRange={isOutsideRange}\r\n focusedInput={focus}\r\n onFocusChange={focusedInput => {\r\n setFocus(focusedInput || initialFocus || null);\r\n }}\r\n isDayBlocked={date => {\r\n const isBlocked = isBlockedDay(date);\r\n return isBlockDayByCutoffPeriod(date, isBlocked);\r\n }}\r\n daySize={daySize ? daySize : 38}\r\n numberOfMonths={numberOfMonths ? numberOfMonths : 2}\r\n // numberOfMonths={isSmallScreen ? 1 : 2}\r\n // daySize={isSmallScreen ? 30 : 38}\r\n renderMonthElement={({ month }) =>\r\n moment(month)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMMM YYYY')\r\n }\r\n renderDayContents={day => {\r\n if (selectedLanguage === 'Norway') {\r\n day._locale._weekdaysMin = [\r\n 'Sø',\r\n 'Ma',\r\n 'Ti',\r\n 'On',\r\n 'To',\r\n 'Fr',\r\n 'Lø'\r\n ];\r\n } else {\r\n day._locale._weekdaysMin = [\r\n 'Su',\r\n 'Mo',\r\n 'Tu',\r\n 'We',\r\n 'Th',\r\n 'Fr',\r\n 'Sa'\r\n ];\r\n }\r\n\r\n const { disableLeft, disableRight } = getIsHalf(\r\n disabledDates,\r\n day\r\n );\r\n\r\n return (\r\n <div\r\n className={classNames({\r\n [classes.dayHalfAvailable]: disableLeft || disableRight,\r\n [classes.dayLeftDisable]: disableLeft,\r\n [classes.dayRightDisable]: disableRight\r\n })}\r\n >\r\n <div>{day.format('D')}</div>\r\n </div>\r\n );\r\n }}\r\n hideKeyboardShortcutsPanel={true}\r\n />\r\n )}\r\n {initialFocus && input.value.startDate && (\r\n <Button\r\n className={classes.ClearButton}\r\n onClick={() => {\r\n handleResetDate();\r\n }}\r\n >\r\n Clear date\r\n </Button>\r\n )}\r\n </div>\r\n\r\n {initialFocus && (touched || submitFailed) && error && (\r\n <FormHelperText\r\n className={classNames({ [classes.error]: isInput })}\r\n error\r\n >\r\n {t(error)}\r\n </FormHelperText>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default MultiDatePickerCalendar;\r\n","import React from 'react';\r\n\r\nexport default (name, form, { defaultValue, validations = [] }) => {\r\n const [value, setValue] = React.useState(defaultValue);\r\n const [errors, setErrors] = React.useState([]);\r\n\r\n const validate = () => {\r\n const formData = form.getFormData();\r\n\r\n let errorMessages = validations.map(validation =>\r\n validation(formData, name)\r\n );\r\n\r\n errorMessages = errorMessages.filter(errorMsg => !!errorMsg);\r\n\r\n setErrors(errorMessages);\r\n\r\n const fieldValid = errorMessages.length === 0;\r\n\r\n return fieldValid;\r\n };\r\n\r\n const setError = errorMsg => {\r\n setErrors([errorMsg]);\r\n };\r\n\r\n const field = {\r\n name,\r\n value,\r\n errors,\r\n validate,\r\n setError,\r\n onChange: e => {\r\n setValue(e.target.value);\r\n setErrors([]);\r\n }\r\n };\r\n\r\n form.addField(field);\r\n\r\n return field;\r\n};\r\n","import React from 'react';\r\n\r\nexport default ({ onSubmit }) => {\r\n let [submitted, setSubmitted] = React.useState(false);\r\n\r\n const fields = [];\r\n\r\n const getFormData = () => {\r\n return fields.reduce((formData, field) => {\r\n formData[field.name] = field.value;\r\n\r\n return formData;\r\n }, {});\r\n };\r\n\r\n const validateFields = () => {\r\n const fieldsToValidate = fields;\r\n const fieldsValid = fieldsToValidate.map(field => {\r\n return field.validate();\r\n });\r\n\r\n const formValid = fieldsValid.every(isValid => {\r\n return isValid === true;\r\n });\r\n\r\n return formValid;\r\n };\r\n\r\n return {\r\n handleSubmit: e => {\r\n e.preventDefault();\r\n const formValid = validateFields();\r\n setSubmitted(true);\r\n return onSubmit(getFormData(), formValid);\r\n },\r\n addField: field => fields.push(field),\r\n getFormData,\r\n submitted\r\n };\r\n};\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n wrapper: {\r\n marginTop: 42,\r\n },\r\n title: {\r\n marginBottom: 30\r\n },\r\n button: {\r\n width: '100%',\r\n marginTop: 36,\r\n marginBottom: theme.spacing(3)\r\n },\r\n inputIndent: {\r\n marginBottom: theme.spacing(3)\r\n },\r\n passwordIcon: {\r\n fontSize: 18\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import SignIn from './SignIn';\r\n\r\nexport default SignIn;\r\n","import React from 'react';\r\n\r\nimport { useMutation } from '@apollo/react-hooks';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport {\r\n Typography,\r\n Button,\r\n InputAdornment,\r\n IconButton\r\n} from '@material-ui/core';\r\n\r\nimport Visibility from '@material-ui/icons/Visibility';\r\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\r\n\r\nimport { DOMAIN } from 'config';\r\n\r\nimport { SimpleInput, LineOnSidesLink } from 'components';\r\nimport { useField, useForm } from 'custom-hooks';\r\nimport { SIGNIN_MUTATION } from 'graphql/mutations/auth';\r\nimport { isRequired, isEmail, isValidPassword } from 'utils/validators';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst SignIn = () => {\r\n const classes = useStyles();\r\n\r\n const history = useHistory();\r\n\r\n const [signIn] = useMutation(SIGNIN_MUTATION);\r\n\r\n const loginForm = useForm({\r\n onSubmit: (formData, formValid) => {\r\n if (!formValid) return;\r\n\r\n signIn({\r\n variables: { email: formData.email, password: formData.password }\r\n }).then(\r\n () => {\r\n window.location = DOMAIN;\r\n // history.push('/');\r\n },\r\n () => {\r\n passwordField.setError(\r\n 'Email or password is incorrect, please try again'\r\n );\r\n emailField.setError('');\r\n }\r\n );\r\n }\r\n });\r\n\r\n const [showPassword, setShowPassword] = React.useState(false);\r\n const onShowPasswordClick = () => {\r\n setShowPassword(!showPassword);\r\n };\r\n\r\n const emailField = useField('email', loginForm, {\r\n defaultValue: '',\r\n validations: [\r\n formData => isRequired(formData.email, 'Email is required'),\r\n formData => isEmail(formData.email, 'Invalid email')\r\n ]\r\n });\r\n\r\n const passwordField = useField('password', loginForm, {\r\n defaultValue: '',\r\n validations: [\r\n formData => isRequired(formData.password, 'Password is required'),\r\n formData =>\r\n isValidPassword(\r\n formData.password,\r\n 'The password must include at least 8 characters with 1 symbol, 1 digit, 1 uppercase letter, 1 lowercase letter'\r\n )\r\n ]\r\n });\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography className={classes.title} variant=\"h1\">\r\n Login\r\n </Typography>\r\n <form onSubmit={loginForm.handleSubmit}>\r\n <SimpleInput\r\n placeholder=\"Email\"\r\n className={classes.inputIndent}\r\n label=\"Email\"\r\n value={emailField.value}\r\n onChange={emailField.onChange}\r\n errors={emailField.errors}\r\n errorText={emailField.errors[0]}\r\n />\r\n <SimpleInput\r\n type={showPassword ? 'text' : 'password'}\r\n placeholder=\"Password\"\r\n label=\"Password\"\r\n endAdornment={\r\n <InputAdornment position=\"end\">\r\n <IconButton onClick={onShowPasswordClick}>\r\n {showPassword ? (\r\n <Visibility className={classes.passwordIcon} />\r\n ) : (\r\n <VisibilityOff className={classes.passwordIcon} />\r\n )}\r\n </IconButton>\r\n </InputAdornment>\r\n }\r\n value={passwordField.value}\r\n onChange={passwordField.onChange}\r\n errors={passwordField.errors}\r\n errorText={passwordField.errors[0]}\r\n autoComplete=\"new-password\"\r\n />\r\n <Button\r\n type=\"submit\"\r\n className={classes.button}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n Login\r\n </Button>\r\n </form>\r\n <LineOnSidesLink path=\"/password/reset\"> Reset password</LineOnSidesLink>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SignIn;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n wrapper: {\r\n marginTop: 42\r\n },\r\n title: {\r\n marginBottom: 12,\r\n marginTop: 42\r\n },\r\n inputIndent: {\r\n marginTop: 30\r\n },\r\n button: {\r\n width: '100%',\r\n marginTop: 30,\r\n marginBottom: theme.spacing(3)\r\n },\r\n sentEmailWrapper: {\r\n marginTop: 145\r\n },\r\n backLogin: {\r\n marginTop: '24px'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import ResetPassword from './ResetPassword';\r\n\r\nexport default ResetPassword;\r\n","import React from 'react';\r\n\r\nimport { useMutation } from '@apollo/react-hooks';\r\nimport { Typography, Button } from '@material-ui/core';\r\n\r\nimport { SimpleInput, LineOnSidesLink } from 'components';\r\nimport { isRequired, isEmail } from 'utils/validators';\r\nimport { useField, useForm } from 'custom-hooks';\r\nimport { RESET_PASSWORD_MUTATION } from 'graphql/mutations/auth';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst ResetPassword = () => {\r\n const classes = useStyles();\r\n\r\n const [isSentEmail, setIsSentEmail] = React.useState(false);\r\n\r\n const [resetPassword] = useMutation(RESET_PASSWORD_MUTATION, {\r\n onError: () => {\r\n emailField.setError('User with this email does not exist');\r\n },\r\n onCompleted: () => {\r\n setIsSentEmail(true);\r\n }\r\n });\r\n\r\n const resetPasswordForm = useForm({\r\n onSubmit: (formData, formValid) => {\r\n if (!formValid) return;\r\n\r\n resetPassword({\r\n variables: { email: formData.email }\r\n });\r\n }\r\n });\r\n\r\n const emailField = useField('email', resetPasswordForm, {\r\n defaultValue: '',\r\n validations: [\r\n formData => isRequired(formData.email, 'Email is required'),\r\n formData => isEmail(formData.email, 'Invalid email')\r\n ]\r\n });\r\n\r\n return !isSentEmail ? (\r\n <div className={classes.wrapper}>\r\n <Typography className={classes.title} variant=\"h1\">\r\n Reset Password\r\n </Typography>\r\n <Typography variant=\"body1\">\r\n Enter the email address you used to register and we’ll send you an email\r\n with instructions to reset your password.\r\n </Typography>\r\n <form onSubmit={resetPasswordForm.handleSubmit}>\r\n <SimpleInput\r\n placeholder=\"Email\"\r\n className={classes.inputIndent}\r\n label=\"Email\"\r\n value={emailField.value}\r\n onChange={emailField.onChange}\r\n errors={emailField.errors}\r\n errorText={emailField.errors[0]}\r\n />\r\n <Button\r\n type=\"submit\"\r\n className={classes.button}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n Reset\r\n </Button>\r\n </form>\r\n <LineOnSidesLink path=\"/login\">Back to Login</LineOnSidesLink>\r\n </div>\r\n ) : (\r\n <div className={classes.sentEmailWrapper}>\r\n <Typography className={classes.title} variant=\"h1\">\r\n Instructions have been sent\r\n </Typography>\r\n <Typography>\r\n Instructions have been sent to your email, {emailField.value}. Check\r\n your email and follow instructions.\r\n </Typography>\r\n <div className={classes.backLogin}>\r\n <LineOnSidesLink path=\"/login\"> Back to Login</LineOnSidesLink>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ResetPassword;\r\n","import gql from 'graphql-tag';\r\n\r\nexport const CHECK_TOKEN = gql`\r\n mutation checkToken(\r\n $id: Int!\r\n $token: String!\r\n $isConfirmPassword: Boolean\r\n $isResetPassword: Boolean\r\n ) {\r\n checkToken(\r\n id: $id\r\n token: $token\r\n isResetPassword: $isResetPassword\r\n isConfirmPassword: $isConfirmPassword\r\n ) {\r\n id\r\n }\r\n }\r\n`;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n wrapper: {\r\n marginTop: 61\r\n },\r\n tokeExpiredWrapper: {\r\n height: '100%',\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n title: {\r\n marginBottom: 30\r\n },\r\n inputIndent: {\r\n marginTop: 24\r\n },\r\n button: {\r\n width: '100%',\r\n marginTop: 36,\r\n marginBottom: theme.spacing(3)\r\n },\r\n backLogin: {\r\n marginTop: '24px'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import CreateNewPassword from './CreateNewPassword';\r\n\r\nexport default CreateNewPassword;\r\n","import React from 'react';\r\nimport { useParams, useHistory } from 'react-router-dom';\r\n\r\nimport { useMutation } from '@apollo/react-hooks';\r\nimport { Typography, Button } from '@material-ui/core';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nimport { SimpleInput, LineOnSidesLink } from 'components';\r\nimport {\r\n isRequired,\r\n isValidPassword,\r\n isConfirmPassword\r\n} from 'utils/validators';\r\n\r\nimport { useField, useForm } from 'custom-hooks';\r\n\r\nimport { UPDATE_BUSINESS_OWNER } from 'graphql/mutations/business-owner';\r\nimport { CHECK_TOKEN } from 'graphql/mutations/token';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst CreateNewPassword = ({ isReset, isConfirm }) => {\r\n const classes = useStyles();\r\n\r\n const { id, token } = useParams();\r\n const history = useHistory();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [tokenExpired, setTokenExpired] = React.useState(null);\r\n\r\n const [updatePassword] = useMutation(UPDATE_BUSINESS_OWNER);\r\n const [checkToken] = useMutation(CHECK_TOKEN);\r\n\r\n React.useEffect(() => {\r\n checkToken({\r\n variables: {\r\n id: id,\r\n token: token,\r\n isResetPassword: isReset,\r\n isConfirmPassword: isConfirm\r\n }\r\n }).then(\r\n () => setTokenExpired(false),\r\n () => setTokenExpired(true)\r\n );\r\n }, []);\r\n\r\n const createNewPasswordForm = useForm({\r\n onSubmit: (formData, formValid) => {\r\n if (!formValid) return;\r\n\r\n updatePassword({\r\n variables: {\r\n id: id,\r\n password: formData.password,\r\n token: token,\r\n isResetPassword: isReset,\r\n isConfirmPassword: isConfirm\r\n }\r\n }).then(\r\n () => {\r\n const msg = isConfirm\r\n ? 'Your password has been successfully created'\r\n : 'Your password has been successfully reset';\r\n enqueueSnackbar(msg, {\r\n variant: 'success'\r\n });\r\n history.push('/login');\r\n },\r\n () => setTokenExpired(true)\r\n );\r\n }\r\n });\r\n\r\n const passwordField = useField('password', createNewPasswordForm, {\r\n defaultValue: '',\r\n validations: [\r\n formData => isRequired(formData.password, 'Password is required'),\r\n formData =>\r\n isValidPassword(\r\n formData.password,\r\n 'The password must include at least 8 characters with 1 symbol, 1 digit, 1 uppercase letter, 1 lowercase letter'\r\n )\r\n ]\r\n });\r\n\r\n const confirmPasswordField = useField(\r\n 'confirmPassword',\r\n createNewPasswordForm,\r\n {\r\n defaultValue: '',\r\n validations: [\r\n formData =>\r\n isRequired(formData.confirmPassword, 'Confirm password is required'),\r\n formData =>\r\n isConfirmPassword(\r\n formData.confirmPassword,\r\n passwordField.value,\r\n 'Your password and confirmation password do not match'\r\n )\r\n ]\r\n }\r\n );\r\n\r\n if (tokenExpired === null) {\r\n return false;\r\n }\r\n\r\n if (tokenExpired) {\r\n return (\r\n <div className={classes.tokeExpiredWrapper}>\r\n <div>\r\n <Typography variant=\"h1\">\r\n The link you followed has expired\r\n </Typography>\r\n <div className={classes.backLogin}>\r\n <LineOnSidesLink path=\"/login\"> Back to Login</LineOnSidesLink>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography className={classes.title} variant=\"h1\">\r\n Create new Password\r\n </Typography>\r\n\r\n <form onSubmit={createNewPasswordForm.handleSubmit}>\r\n <SimpleInput\r\n type=\"password\"\r\n placeholder=\"Password\"\r\n label=\"Password\"\r\n value={passwordField.value}\r\n onChange={passwordField.onChange}\r\n errors={passwordField.errors}\r\n errorText={passwordField.errors[0]}\r\n autoComplete=\"new-password\"\r\n />\r\n <SimpleInput\r\n className={classes.inputIndent}\r\n type=\"password\"\r\n placeholder=\"Confirm password\"\r\n label=\"Confirm password\"\r\n value={confirmPasswordField.value}\r\n onChange={confirmPasswordField.onChange}\r\n errors={confirmPasswordField.errors}\r\n errorText={confirmPasswordField.errors[0]}\r\n autoComplete=\"new-password\"\r\n />\r\n <Button\r\n type=\"submit\"\r\n className={classes.button}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n >\r\n Create\r\n </Button>\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nexport default CreateNewPassword;\r\n","import moment from 'moment-timezone';\r\n\r\nimport {\r\n ACTIVITY_FORMS_NUMBERS,\r\n ACTIVITY_FORMS_ORDER\r\n} from 'pages/create-activity/constants';\r\n\r\nimport {\r\n getAddOns,\r\n getIntegrations,\r\n getPreparedPricesCurrency\r\n} from 'utils/accommodations-and-activities/prepareAccommodationAndActivityData';\r\n\r\nexport const getPreparedDataToCreateActivity = (\r\n forms,\r\n scheduleActiveSubTab,\r\n pricesActiveSubTab,\r\n languages,\r\n isUpdate,\r\n deletedAddOns,\r\n deletedRelatedAccommodations,\r\n deletedIntegrations,\r\n isCopy\r\n) => {\r\n const languagesLength = languages.length;\r\n let secondLanguage = false;\r\n if (languagesLength > 1) secondLanguage = languages[languagesLength - 1];\r\n\r\n const generalForm = _getGeneralForm(forms);\r\n const descriptionForm = { ...forms['descriptionForm'].values };\r\n const integrationForm = { ...forms['integrationForm'].values };\r\n const addOnsForm = { ...forms['addOnsForm'].values };\r\n const relatedForm = _getRelatedForm(forms);\r\n\r\n const photoObj = generalForm.coverPhoto.file\r\n ? { photo: generalForm.coverPhoto.file }\r\n : {};\r\n\r\n const ownerIdObj = {\r\n businessOwnerId:\r\n forms.businessOwner.selectedBusinessOwner.ownerId ||\r\n forms.businessOwner.selectedBusinessOwner.id\r\n };\r\n\r\n delete generalForm.coverPhoto;\r\n delete generalForm.activityType;\r\n\r\n const scheduleFormName =\r\n ACTIVITY_FORMS_ORDER[ACTIVITY_FORMS_NUMBERS.scheduleForm][\r\n scheduleActiveSubTab\r\n ];\r\n const scheduleForm = { ...forms[scheduleFormName].values };\r\n let scheduleDetails = _getScheduleDetails(scheduleForm);\r\n\r\n let pricesActiveSubTabIsOpen = pricesActiveSubTab;\r\n if (forms['generalForm'].values.activityType === 'Open') {\r\n pricesActiveSubTabIsOpen++;\r\n }\r\n const pricesFormName =\r\n ACTIVITY_FORMS_ORDER[ACTIVITY_FORMS_NUMBERS.pricesForm][\r\n scheduleActiveSubTab\r\n ][pricesActiveSubTabIsOpen];\r\n const priceForm = { ...forms[pricesFormName].values };\r\n let prices = _getPreparedPrices(priceForm, scheduleDetails);\r\n\r\n let addOns = getAddOns(isUpdate, addOnsForm, secondLanguage);\r\n let integrations = getIntegrations(isUpdate, integrationForm);\r\n\r\n let deletedAddOnsObj = deletedAddOns.length\r\n ? {\r\n deletedAddOns: deletedAddOns\r\n }\r\n : {};\r\n let deletedRelatedAccommodationsObj = deletedRelatedAccommodations.length\r\n ? { deletedRelatedAccommodation: deletedRelatedAccommodations }\r\n : {};\r\n let deletedPlatformsObj = deletedIntegrations.length\r\n ? { deletedPlatforms: deletedIntegrations }\r\n : {};\r\n\r\n const deactivationPeriods = generalForm.deactivationPeriods?.length\r\n ? JSON.parse(JSON.stringify(generalForm.deactivationPeriods)).filter(({ startPeriod, endPeriod }) =>\r\n !!startPeriod && !!endPeriod)\r\n : [];\r\n\r\n delete generalForm.deactivationPeriods;\r\n\r\n if (isCopy) {\r\n delete generalForm.id;\r\n generalForm.productCode = '';\r\n addOns = addOns.map(addOn => ({ ...addOn, id: null }));\r\n integrations = integrations.map(integration => ({\r\n ...integration,\r\n id: null\r\n }));\r\n deletedAddOnsObj = {};\r\n deletedRelatedAccommodationsObj = {};\r\n deletedPlatformsObj = {};\r\n }\r\n\r\n return {\r\n ...photoObj,\r\n ...ownerIdObj,\r\n activity: {\r\n scheduleType: scheduleFormName,\r\n pricesType: pricesFormName,\r\n\r\n ...generalForm,\r\n ..._getGeneralInfoSecondLanguage(forms, secondLanguage),\r\n\r\n ...descriptionForm,\r\n ..._getDescriptionInfoSecondLanguage(forms, secondLanguage),\r\n\r\n schedule: {\r\n fromDate: moment(scheduleForm.availability?.startDate).format(\r\n 'YYYY-MM-DD'\r\n ),\r\n toDate: scheduleForm.availability?.endDate\r\n ? moment(scheduleForm.availability?.endDate).format('YYYY-MM-DD')\r\n : null,\r\n cutoffPeriod: parseInt(scheduleForm.cutoffPeriod),\r\n cutoffPeriodTimeType: scheduleForm.cutoffPeriodTimeType,\r\n scheduleDetails: scheduleDetails\r\n },\r\n\r\n prices: prices,\r\n activityOnPlatforms: integrations,\r\n ...relatedForm\r\n },\r\n addOns: addOns,\r\n ...deletedAddOnsObj,\r\n ...deletedRelatedAccommodationsObj,\r\n ...deletedPlatformsObj,\r\n deactivationPeriods\r\n };\r\n};\r\n\r\nconst _getGeneralForm = forms => {\r\n const { deactivatedDates, ...generalFormValues } = {\r\n ...forms['generalForm'].values\r\n };\r\n\r\n return {\r\n ...generalFormValues,\r\n isOpen: generalFormValues.activityType === 'Open',\r\n isPrivate: generalFormValues.activityType !== 'Open',\r\n minParticipants: parseInt(generalFormValues.minParticipants),\r\n maxParticipants: parseInt(generalFormValues.maxParticipants),\r\n deactivationPeriods: deactivatedDates?.map(\r\n ({ startDate, endDate, id, isCanceled }) => ({\r\n id,\r\n startPeriod: startDate?.format('YYYY-MM-DD'),\r\n endPeriod: endDate?.format('YYYY-MM-DD'),\r\n isCanceled\r\n })\r\n ) ?? []\r\n };\r\n};\r\n\r\nconst _getRelatedForm = forms => {\r\n return {\r\n relatedAccommodations: forms[\r\n 'relatedAccommodationsForm'\r\n ].values.relatedAccommodations.map(item => parseInt(item.id))\r\n };\r\n};\r\n\r\nconst _getScheduleDetails = scheduleForm => {\r\n let scheduleDetails = [];\r\n\r\n if (scheduleForm.days) {\r\n scheduleDetails.push({\r\n days: Object.keys(scheduleForm.days)\r\n .filter(field => scheduleForm.days[field])\r\n .map(item => item)\r\n });\r\n } else if (scheduleForm.daysArray) {\r\n scheduleDetails = scheduleForm.daysArray.map(item => ({\r\n days: Object.keys(item.days)\r\n .filter(field => item.days[field])\r\n .map(item => item),\r\n startTimes: item.startTimeAndDuration.map(item => ({\r\n ...item,\r\n duration: parseInt(item.duration),\r\n startTime: moment(item.startTime).format('HH:mm:ssZZ')\r\n }))\r\n }));\r\n }\r\n\r\n return scheduleDetails;\r\n};\r\n\r\nconst _getPreparedPrices = (priceForm, scheduleDetails) => {\r\n if (priceForm.days && priceForm.days.length) {\r\n return priceForm.days.map(item => {\r\n let categoryPrices = [];\r\n\r\n if (item.hasOwnProperty('categories')) {\r\n item.categories.map(item => {\r\n categoryPrices = [\r\n ...categoryPrices,\r\n ...getPreparedPricesCurrency(item)\r\n ];\r\n });\r\n return {\r\n schedule: [\r\n {\r\n days: [item.day]\r\n }\r\n ],\r\n prices: categoryPrices\r\n };\r\n } else {\r\n return {\r\n schedule: [\r\n {\r\n days: item.days\r\n }\r\n ],\r\n prices: getPreparedPricesCurrency(item)\r\n };\r\n }\r\n });\r\n } else if (priceForm.daysArray) {\r\n return priceForm.daysArray.map(item => {\r\n let categoryPrices = [];\r\n item.categories.map(item => {\r\n categoryPrices = [\r\n ...categoryPrices,\r\n ...getPreparedPricesCurrency(item)\r\n ];\r\n });\r\n return {\r\n schedule: [\r\n {\r\n days: item.days\r\n }\r\n ],\r\n prices: categoryPrices\r\n };\r\n });\r\n } else if (priceForm.categories) {\r\n let schedule = scheduleDetails.map(item => ({\r\n days: item.days\r\n }));\r\n let categoryPrices = [];\r\n priceForm.categories.map(item => {\r\n categoryPrices = [...categoryPrices, ...getPreparedPricesCurrency(item)];\r\n });\r\n return [\r\n {\r\n schedule: schedule,\r\n prices: categoryPrices\r\n }\r\n ];\r\n } else {\r\n let days = [];\r\n scheduleDetails.map(item => {\r\n days.push(...item.days);\r\n });\r\n return [\r\n {\r\n schedule: [\r\n {\r\n days: days\r\n }\r\n ],\r\n prices: getPreparedPricesCurrency(priceForm)\r\n }\r\n ];\r\n }\r\n};\r\n\r\nconst _getGeneralInfoSecondLanguage = (forms, secondLanguage) => {\r\n const countryCode = 'No';\r\n\r\n if (!secondLanguage) return { [`title${countryCode}`]: null };\r\n\r\n const generalFormSecondLanguage = {\r\n ...forms[`generalForm-${secondLanguage}`].values\r\n };\r\n\r\n return {\r\n [`title${countryCode}`]: generalFormSecondLanguage.title\r\n };\r\n};\r\n\r\nconst _getDescriptionInfoSecondLanguage = (forms, secondLanguage) => {\r\n const countryCode = 'No';\r\n\r\n if (!secondLanguage) {\r\n return {\r\n [`overview${countryCode}`]: null,\r\n [`whatToBring${countryCode}`]: null,\r\n [`additionalInfo${countryCode}`]: null,\r\n [`cancellation${countryCode}`]: null,\r\n [`included${countryCode}`]: [],\r\n [`notIncluded${countryCode}`]: []\r\n };\r\n }\r\n\r\n const generalFormSecondLanguage = {\r\n ...forms[`descriptionForm-${secondLanguage}`].values\r\n };\r\n const newSecondLanguageObject = {};\r\n\r\n Object.keys(generalFormSecondLanguage).map(\r\n field =>\r\n (newSecondLanguageObject[`${field}${countryCode}`] =\r\n generalFormSecondLanguage[field])\r\n );\r\n\r\n return newSecondLanguageObject;\r\n};\r\n","import {\r\n ACTIVITY_FORMS_NUMBERS,\r\n ACTIVITY_FORMS_ORDER\r\n} from 'pages/create-activity/constants';\r\n\r\nexport const isNextStepAvailable = (\r\n forms,\r\n languages,\r\n newActiveTab,\r\n savedForms,\r\n scheduleActiveSubTab,\r\n pricesActiveSubTab\r\n) => {\r\n let newActiveTabCopy = newActiveTab;\r\n const activityType = forms['generalForm'].values.activityType;\r\n\r\n while (newActiveTabCopy > 0) {\r\n let formName = ACTIVITY_FORMS_ORDER[newActiveTabCopy - 1];\r\n\r\n if (typeof formName === 'object') {\r\n formName = formName[scheduleActiveSubTab];\r\n\r\n if (typeof formName === 'object') {\r\n if (activityType === 'Open') {\r\n let pricesActiveSubTabIsOpen = pricesActiveSubTab;\r\n pricesActiveSubTabIsOpen++;\r\n formName = formName[pricesActiveSubTabIsOpen];\r\n } else {\r\n formName = formName[pricesActiveSubTab];\r\n }\r\n } else {\r\n let pricesActiveSubTabIsOpen = pricesActiveSubTab;\r\n if (activityType === 'Open') {\r\n pricesActiveSubTabIsOpen++;\r\n }\r\n const priceTabName =\r\n ACTIVITY_FORMS_ORDER[ACTIVITY_FORMS_NUMBERS.pricesForm][\r\n scheduleActiveSubTab\r\n ][pricesActiveSubTabIsOpen];\r\n if (\r\n (priceTabName === 'pricesDailyForm' ||\r\n priceTabName === 'pricesDailyScheduleForm') &&\r\n !forms['pricesDailyForm'].values.days.length &&\r\n !forms['pricesDailyScheduleForm'].values.daysArray.length\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n if (formName === 'schedulePassForm' && !savedForms['schedulePassForm']) {\r\n return false;\r\n }\r\n if (\r\n forms[formName] &&\r\n (forms[formName].syncErrors || !savedForms[formName])\r\n )\r\n return false;\r\n } else {\r\n const languagesLength = languages.length;\r\n const secondLanguage = languages[languagesLength - 1];\r\n\r\n if (languagesLength > 1 && formName === 'addOnsForm') {\r\n const addOnsSecondLanguageForm = forms[formName].values;\r\n for (let i in addOnsSecondLanguageForm.addOns) {\r\n if (!addOnsSecondLanguageForm.addOns.hasOwnProperty(i)) continue;\r\n const addOns = addOnsSecondLanguageForm.addOns[i][secondLanguage];\r\n if (!addOns.title) return false;\r\n }\r\n }\r\n\r\n if (\r\n languagesLength > 1 &&\r\n (formName === 'generalForm' || formName === 'descriptionForm')\r\n ) {\r\n const secondLanguageFormName = `${formName}-${secondLanguage}`;\r\n if (\r\n languagesLength > 1 &&\r\n forms[secondLanguageFormName] &&\r\n (forms[secondLanguageFormName].syncErrors ||\r\n !Object.keys(savedForms[secondLanguageFormName]).length)\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n if (\r\n forms[formName] &&\r\n (forms[formName].syncErrors || !savedForms[formName])\r\n )\r\n return false;\r\n }\r\n newActiveTabCopy--;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nexport const isCurrentStepAvailable = (\r\n forms,\r\n activeTab,\r\n scheduleActiveSubTab,\r\n pricesActiveSubTab\r\n) => {\r\n let activeFormName = '';\r\n\r\n if (activeTab === ACTIVITY_FORMS_NUMBERS.scheduleForm) {\r\n activeFormName = ACTIVITY_FORMS_ORDER[activeTab][scheduleActiveSubTab];\r\n } else if (activeTab === ACTIVITY_FORMS_NUMBERS.pricesForm) {\r\n const pricesTabIndex =\r\n forms['generalForm'].values.activityType === 'Open'\r\n ? pricesActiveSubTab + 1\r\n : pricesActiveSubTab;\r\n activeFormName =\r\n ACTIVITY_FORMS_ORDER[activeTab][scheduleActiveSubTab][pricesTabIndex];\r\n } else {\r\n activeFormName = ACTIVITY_FORMS_ORDER[activeTab];\r\n }\r\n\r\n if (forms[activeFormName].syncErrors) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n","import {\r\n ACTIVITY_FORMS_NUMBERS,\r\n ACTIVITY_FORMS_ORDER,\r\n ACTIVITY_PRICES_FORMS_NUMBERS,\r\n ACTIVITY_SCHEDULE_FORMS_NUMBERS\r\n} from 'pages/create-activity/constants';\r\n\r\nexport const isDiscardChanges = (\r\n forms,\r\n formName,\r\n activeTab,\r\n newActiveTab,\r\n savedForms,\r\n initialFormData,\r\n dynamicInitialData,\r\n languages\r\n) => {\r\n // const formValues = JSON.stringify(forms[formName].values);\r\n const formValues = JSON.stringify(forms[formName]?.values || {});\r\n\r\n const savedFormValues = JSON.stringify(savedForms[formName]);\r\n const languagesLength = languages.length;\r\n\r\n if (\r\n languagesLength > 1 &&\r\n (formName === 'generalForm' || formName === 'descriptionForm')\r\n ) {\r\n const secondLanguage = languages[languagesLength - 1];\r\n const secondLanguageFormName = `${formName}-${secondLanguage}`;\r\n\r\n const secondLanguageFormValues = JSON.stringify(\r\n forms[secondLanguageFormName].values\r\n );\r\n const secondLanguageSavedFormValues = JSON.stringify(\r\n savedForms[secondLanguageFormName]\r\n );\r\n\r\n if (\r\n activeTab !== newActiveTab &&\r\n secondLanguageFormValues !== secondLanguageSavedFormValues\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n if (formName === 'addOnsForm') {\r\n if (activeTab !== newActiveTab && formValues !== savedFormValues) {\r\n if (!savedFormValues && !forms[formName].values.addOns.length)\r\n return false;\r\n return true;\r\n }\r\n }\r\n\r\n if (formName === 'mandatoryFeesForm') {\r\n if (activeTab !== newActiveTab && formValues !== savedFormValues) {\r\n if (!savedFormValues && !forms[formName].values.mandatoryFees.length)\r\n return false;\r\n return true;\r\n }\r\n }\r\n\r\n if (\r\n formName === 'generalForm' &&\r\n savedForms[formName] &&\r\n activeTab !== newActiveTab\r\n ) {\r\n if (\r\n forms[formName].values.activityType !== savedForms[formName].activityType\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n if (\r\n activeTab !== newActiveTab &&\r\n formValues !== savedFormValues &&\r\n savedFormValues\r\n ) {\r\n if (\r\n (formName === 'pricesDailyForm' ||\r\n formName === 'pricesDailyScheduleForm') &&\r\n formValues === JSON.stringify(dynamicInitialData[formName])\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const discardChanges = (\r\n languages,\r\n formName,\r\n initializeForm,\r\n savedForms,\r\n dynamicInitialData,\r\n initialFormData,\r\n newActiveTab,\r\n activeTab,\r\n setActiveTab\r\n) => {\r\n let isError = false;\r\n const languagesLength = languages.length;\r\n const secondLanguage = languages[languagesLength - 1];\r\n const forms = [formName];\r\n\r\n if (\r\n languagesLength > 1 &&\r\n (formName === 'generalForm' || formName === 'descriptionForm')\r\n ) {\r\n forms.push(`${formName}-${secondLanguage}`);\r\n }\r\n\r\n for (let i in forms) {\r\n if (!forms.hasOwnProperty(i)) continue;\r\n const formName = forms[i];\r\n let newInitializedForm = {};\r\n\r\n if (\r\n formName === 'pricesDailyForm' ||\r\n formName === 'pricesDailyScheduleForm'\r\n ) {\r\n initializeForm(\r\n formName,\r\n savedForms[formName] || dynamicInitialData[formName]\r\n );\r\n } else {\r\n newInitializedForm =\r\n savedForms[formName] || initialFormData[formName] || {};\r\n initializeForm(formName, newInitializedForm);\r\n }\r\n\r\n if (!savedForms[formName] && newActiveTab >= activeTab) isError = true;\r\n\r\n if (\r\n formName === 'addOnsForm' &&\r\n newActiveTab >= activeTab &&\r\n languagesLength > 1\r\n ) {\r\n newInitializedForm.addOns.map(item => {\r\n if (!item[secondLanguage] || !item[secondLanguage].title) {\r\n isError = true;\r\n }\r\n });\r\n }\r\n if (!savedForms[formName] && newActiveTab >= activeTab) isError = true;\r\n if (\r\n formName === 'mandatoryFeesForm' &&\r\n newActiveTab >= activeTab &&\r\n languagesLength > 1\r\n ) {\r\n newInitializedForm.mandatoryFees.map(item => {\r\n if (!item[secondLanguage] || !item[secondLanguage].title) {\r\n isError = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (!isError) setActiveTab(newActiveTab);\r\n};\r\n\r\nexport const isDiscardSection = (\r\n activeTab,\r\n newActiveTab,\r\n scheduleActiveSubTab,\r\n pricesActiveSubTab,\r\n savedForms\r\n) => {\r\n if (activeTab === newActiveTab) return false;\r\n\r\n if (\r\n activeTab === ACTIVITY_FORMS_NUMBERS.scheduleForm &&\r\n savedForms.scheduleTab &&\r\n savedForms.scheduleTab !==\r\n ACTIVITY_FORMS_ORDER[activeTab][scheduleActiveSubTab]\r\n ) {\r\n return true;\r\n }\r\n\r\n if (savedForms && savedForms['generalForm']) {\r\n let pricesTabIndex =\r\n savedForms['generalForm'].activityType === 'Open'\r\n ? pricesActiveSubTab + 1\r\n : pricesActiveSubTab;\r\n\r\n if (savedForms.scheduleTab === 'schedulePassForm') {\r\n if (\r\n !savedForms['generalForm'] ||\r\n savedForms['generalForm'].activityType === 'Open'\r\n ) {\r\n pricesTabIndex = 0;\r\n } else {\r\n if (pricesActiveSubTab) {\r\n pricesTabIndex = 1;\r\n } else {\r\n pricesTabIndex = 0;\r\n }\r\n }\r\n }\r\n\r\n if (\r\n activeTab === ACTIVITY_FORMS_NUMBERS.pricesForm &&\r\n savedForms.pricesTab &&\r\n savedForms.pricesTab !==\r\n ACTIVITY_FORMS_ORDER[activeTab][scheduleActiveSubTab][pricesTabIndex]\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const discardSection = (\r\n activeTab,\r\n newActiveTab,\r\n setScheduleActiveSubTab,\r\n setPricesActiveSubTab,\r\n setActiveTab,\r\n formName,\r\n initializeForm,\r\n savedForms,\r\n initialFormData,\r\n dynamicInitialData\r\n) => {\r\n if (activeTab === ACTIVITY_FORMS_NUMBERS.scheduleForm) {\r\n const formName = savedForms.scheduleTab;\r\n setScheduleActiveSubTab(ACTIVITY_SCHEDULE_FORMS_NUMBERS[formName]);\r\n initializeForm(\r\n formName,\r\n savedForms[formName] || initialFormData[formName] || {}\r\n );\r\n }\r\n\r\n if (activeTab === ACTIVITY_FORMS_NUMBERS.pricesForm) {\r\n const formName = savedForms.pricesTab;\r\n const scheduleSectionIndex =\r\n ACTIVITY_SCHEDULE_FORMS_NUMBERS[savedForms.scheduleTab];\r\n let pricesSectionIndex =\r\n ACTIVITY_PRICES_FORMS_NUMBERS[scheduleSectionIndex][formName];\r\n\r\n if (savedForms['generalForm'].activityType === 'Open') pricesSectionIndex--;\r\n\r\n setPricesActiveSubTab(pricesSectionIndex);\r\n\r\n if (\r\n formName === 'pricesDailyForm' ||\r\n formName === 'pricesDailyScheduleForm'\r\n ) {\r\n initializeForm(\r\n formName,\r\n savedForms[formName] || dynamicInitialData[formName]\r\n );\r\n } else {\r\n initializeForm(\r\n formName,\r\n savedForms[formName] || initialFormData[formName] || {}\r\n );\r\n }\r\n }\r\n\r\n setActiveTab(newActiveTab);\r\n};\r\n","import { ACTIVITY_FORMS_NUMBERS } from 'pages/create-activity/constants';\r\n\r\nexport const addAddOnsLanguage = (\r\n forms,\r\n newLanguage,\r\n changeFormFieldValue,\r\n updateFormErrors,\r\n setSavedForms,\r\n savedForms\r\n) => {\r\n let addOns = [...forms.addOnsForm.values.addOns];\r\n addOns = addOns.map(item => {\r\n if (!item[newLanguage]) {\r\n return {\r\n ...item,\r\n [newLanguage]: {\r\n title: '',\r\n description: '',\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n }\r\n };\r\n }\r\n return item;\r\n });\r\n changeFormFieldValue('addOnsForm', 'addOns', addOns);\r\n if (forms['addOnsForm'].values.addOns.length) {\r\n updateFormErrors('addOnsForm', {\r\n init: 'Error'\r\n });\r\n setSavedForms({\r\n ...savedForms,\r\n addOnsForm: {\r\n addOns: addOns\r\n }\r\n });\r\n }\r\n};\r\n\r\nexport const deleteAddOnsLanguage = (\r\n forms,\r\n deletedLanguage,\r\n changeFormFieldValue,\r\n activeTab,\r\n setActiveTab,\r\n setSavedForms,\r\n savedForms,\r\n updateFormErrors,\r\n submitForm\r\n) => {\r\n let addOns = [...forms.addOnsForm.values.addOns];\r\n addOns = addOns.map(item => {\r\n return {\r\n ...item,\r\n [deletedLanguage]: null\r\n };\r\n });\r\n changeFormFieldValue('addOnsForm', 'addOns', addOns);\r\n if (forms['addOnsForm'].values.addOns.length) {\r\n if (activeTab === ACTIVITY_FORMS_NUMBERS.addOnsForm) {\r\n setActiveTab(activeTab);\r\n }\r\n setSavedForms({\r\n ...savedForms,\r\n addOnsForm: {\r\n addOns: addOns\r\n }\r\n });\r\n submitForm('addOnsForm');\r\n }\r\n};\r\n","import gql from 'graphql-tag';\r\n\r\nexport const CREATE_ACTIVITY = gql`\r\n mutation createActivity(\r\n $photo: Upload!\r\n $activity: ActivityInput\r\n $businessOwnerId: Int\r\n $addOns: [AddOnInput]\r\n $deactivationPeriods: [DeactivationPeriodsInput]\r\n ) {\r\n createActivity(\r\n photo: $photo\r\n activity: $activity\r\n addOns: $addOns\r\n businessOwnerId: $businessOwnerId\r\n deactivationPeriods: $deactivationPeriods\r\n ) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const DELETE_ACTIVITY = gql`\r\n mutation deleteActivity($id: Int!) {\r\n deleteActivity(id: $id) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_ACTIVITY = gql`\r\n mutation updateActivity(\r\n $photo: Upload\r\n $businessOwnerId: Int\r\n $activity: ActivityInput\r\n $addOns: [AddOnInput]\r\n $deletedAddOns: [Int]\r\n $deletedRelatedAccommodation: [Int]\r\n $deletedPlatforms: [Int]\r\n $deactivationPeriods: [DeactivationPeriodsInput]\r\n ) {\r\n updateActivity(\r\n photo: $photo\r\n businessOwnerId: $businessOwnerId\r\n activity: $activity\r\n addOns: $addOns\r\n deletedAddOns: $deletedAddOns\r\n deletedRelatedAccommodation: $deletedRelatedAccommodation\r\n deletedPlatforms: $deletedPlatforms\r\n deactivationPeriods: $deactivationPeriods\r\n ) {\r\n activity {\r\n id\r\n }\r\n }\r\n }\r\n`;\r\n","import { makeStyles,theme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n root: {\r\n minHeight: 'calc(100% - 52px)',\r\n width: '100%',\r\n display: 'flex',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n flexDirection: 'column'\r\n }\r\n },\r\n content: {\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n \r\n }\r\n \r\n \r\n },\r\n contentBox: {\r\n width: '600px',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n \r\n }\r\n\r\n },\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important'\r\n }\r\n}));\r\n","export const getFileByUrl = async url => {\r\n const blob = await (await fetch(`${url}?cacheblock=true`)).blob();\r\n const filename = url.split('/').pop();\r\n return new File([blob], filename);\r\n};\r\n","import CreateActivity from './CreateActivity';\r\n\r\nexport default CreateActivity;\r\n","import React from 'react';\r\nimport { useSnackbar } from 'notistack';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useMutation } from '@apollo/react-hooks';\r\nimport {\r\n change,\r\n destroy,\r\n initialize,\r\n updateSyncErrors,\r\n submit\r\n} from 'redux-form';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { clearDeletedFields } from 'actions/activityAndAccommodation';\r\n\r\nimport { getPreparedDataToCreateActivity } from 'utils/accommodations-and-activities/prepareActivityData';\r\nimport {\r\n isCurrentStepAvailable,\r\n isNextStepAvailable\r\n} from 'utils/accommodations-and-activities/activityNextStepAvailableHander';\r\nimport {\r\n discardSection,\r\n isDiscardChanges,\r\n isDiscardSection,\r\n discardChanges\r\n} from 'utils/accommodations-and-activities/activityDiscardChangesHandler';\r\nimport { isActivityFormDone } from 'utils/accommodations-and-activities/activityFormDoneHandler';\r\nimport {\r\n addAddOnsLanguage,\r\n deleteAddOnsLanguage\r\n} from 'utils/accommodations-and-activities/addOnsLanguagesHandler';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport { CREATE_ACTIVITY, UPDATE_ACTIVITY } from 'graphql/mutations/activity';\r\n\r\nimport {\r\n TabsMenu,\r\n TabsPanel,\r\n RadioBtnTabsMenu,\r\n GeneralCreate,\r\n GeneralCreateSecondLanguage,\r\n DescriptionCreate,\r\n ScheduleCreate,\r\n PricesCreate,\r\n AddOns,\r\n RelatedAccommodations,\r\n Integration,\r\n CircularLoader,\r\n AppHeader\r\n} from 'components';\r\n\r\nimport {\r\n DEFAULT_LANGUAGE,\r\n SCHEDULE_SECTION,\r\n ACTIVITY_FORMS_ORDER,\r\n INITIAL_ACTIVITY_FORM_DATA,\r\n ACTIVITY_FORMS_NUMBERS,\r\n ACTIVITIES_TAB\r\n} from './constants';\r\n\r\nimport { useStyles } from './styles';\r\nimport { getFileByUrl } from '../../utils/files/handleFIles';\r\nimport { CANCEL_ACTIVITY_BOOKING } from '../../graphql/mutations/booking';\r\n\r\n\r\nconst CreateActivity = ({\r\n data,\r\n scheduleActiveSubTabNumber,\r\n pricesActiveSubTabNumber,\r\n loading,\r\n isCopy,\r\n bookDates,\r\n ...props\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const history = useHistory();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const confirm = React.useContext(ConfirmContext);\r\n\r\n const [createActivity] = useMutation(CREATE_ACTIVITY);\r\n const [updateActivity] = useMutation(UPDATE_ACTIVITY);\r\n const [cancelActivityBooking] = useMutation(CANCEL_ACTIVITY_BOOKING);\r\n\r\n const {\r\n changeFormFieldValue,\r\n destroyForm,\r\n initializeForm,\r\n updateFormErrors,\r\n submitForm,\r\n deletedAddOns,\r\n deletedRelatedAccommodations,\r\n deletedIntegrations,\r\n clearDeletedFields\r\n } = props;\r\n\r\n const [initialFormData, setInitialFormData] = React.useState({\r\n ...INITIAL_ACTIVITY_FORM_DATA\r\n });\r\n\r\n const [isLoading, setIsLoading] = React.useState(true);\r\n const [isUpdate, setIsUpdate] = React.useState(false);\r\n const [isVisitedPrices, setIsVisitedPrices] = React.useState(false);\r\n const [isSaveUnsavedChanges, setIsSaveUnsavedChanges] = React.useState(false);\r\n\r\n const [savedForms, setSavedForms] = React.useState({});\r\n const [dynamicInitialData, setDynamicInitialData] = React.useState({});\r\n\r\n const [languages, setLanguages] = React.useState([DEFAULT_LANGUAGE]);\r\n const [selectedLanguage, setSelectedLanguage] = React.useState(\r\n DEFAULT_LANGUAGE\r\n );\r\n\r\n const [activeTab, setActiveTab] = React.useState(\r\n ACTIVITY_FORMS_NUMBERS.generalForm\r\n );\r\n const [scheduleActiveSubTab, setScheduleActiveSubTab] = React.useState(0);\r\n const [pricesActiveSubTab, setPricesActiveSubTab] = React.useState(0);\r\n\r\n React.useEffect(() => {\r\n destroySecondLanguageForms();\r\n clearDeletedFields();\r\n setLanguages([DEFAULT_LANGUAGE]);\r\n setInitialFormData({ ...INITIAL_ACTIVITY_FORM_DATA });\r\n if (loading) {\r\n setIsLoading(true);\r\n return;\r\n }\r\n if (data) {\r\n setIsUpdate(true);\r\n setIsVisitedPrices(true);\r\n const scheduleTab =\r\n ACTIVITY_FORMS_ORDER[ACTIVITY_FORMS_NUMBERS.scheduleForm][\r\n scheduleActiveSubTabNumber\r\n ];\r\n const activityType = data['generalForm'].activityType;\r\n let pricesTabIndex =\r\n activityType === 'Open'\r\n ? pricesActiveSubTabNumber + 1\r\n : pricesActiveSubTabNumber;\r\n if (scheduleTab === 'schedulePassForm') {\r\n if (activityType === 'Open') {\r\n pricesTabIndex = 0;\r\n } else {\r\n if (pricesActiveSubTab) {\r\n pricesTabIndex = 1;\r\n } else {\r\n pricesTabIndex = 0;\r\n }\r\n }\r\n }\r\n setSavedForms({\r\n ...data,\r\n scheduleTab: scheduleTab,\r\n pricesTab:\r\n ACTIVITY_FORMS_ORDER[ACTIVITY_FORMS_NUMBERS.pricesForm][\r\n scheduleActiveSubTabNumber\r\n ][pricesTabIndex]\r\n });\r\n setScheduleActiveSubTab(scheduleActiveSubTabNumber);\r\n setPricesActiveSubTab(pricesActiveSubTabNumber);\r\n } else {\r\n setSavedForms({\r\n scheduleTab: 'scheduleDateForm',\r\n pricesTab: 'pricesDailyForm'\r\n });\r\n }\r\n let newInitialFormData = {\r\n ...INITIAL_ACTIVITY_FORM_DATA,\r\n ...data\r\n };\r\n setInitialFormData(newInitialFormData);\r\n initializeForms(newInitialFormData);\r\n setIsLoading(false);\r\n }, [loading]);\r\n\r\n const initializeForms = initialFormsData => {\r\n if (\r\n initialFormsData['generalForm-Norwegian'] &&\r\n initialFormsData['generalForm-Norwegian'].title\r\n ) {\r\n setLanguages([...languages, 'Norwegian']);\r\n }\r\n\r\n Object.keys(initialFormsData).map(field => {\r\n updateFormErrors(field, {});\r\n initializeForm(field, initialFormsData[field]);\r\n });\r\n };\r\n\r\n const destroySecondLanguageForms = () => {\r\n const forms = ['generalForm-Norwegian', 'descriptionForm-Norwegian'];\r\n destroyForm(forms);\r\n };\r\n\r\n const replacePhotosToFiles = async data => {\r\n if (!!data.addOns) {\r\n for (const addOn of data.addOns) {\r\n if (!addOn.photo || typeof addOn.photo !== 'string') continue;\r\n addOn.photo = await getFileByUrl(addOn.photo);\r\n }\r\n }\r\n\r\n if (!data.photo) {\r\n data.photo = await getFileByUrl(\r\n props['generalForm'].values.coverPhoto.image\r\n );\r\n }\r\n\r\n return data;\r\n };\r\n\r\n const onCreateActivityHandler = async () => {\r\n const pricesTabIndex =\r\n props['generalForm'].values.activityType === 'Open'\r\n ? pricesActiveSubTab + 1\r\n : pricesActiveSubTab;\r\n\r\n const activePricesForm =\r\n props[\r\n ACTIVITY_FORMS_ORDER[ACTIVITY_FORMS_NUMBERS.pricesForm][\r\n scheduleActiveSubTab\r\n ][pricesTabIndex]\r\n ];\r\n\r\n if (activePricesForm?.syncErrors) {\r\n enqueueSnackbar(\r\n t(\r\n 'You should complete and save all previous steps before you can save'\r\n ),\r\n {\r\n variant: 'info',\r\n autoHideDuration: 5000\r\n }\r\n );\r\n return;\r\n }\r\n\r\n setIsLoading(true);\r\n\r\n let data = getPreparedDataToCreateActivity(\r\n props,\r\n scheduleActiveSubTab,\r\n pricesActiveSubTab,\r\n languages,\r\n isUpdate,\r\n deletedAddOns,\r\n deletedRelatedAccommodations,\r\n deletedIntegrations,\r\n isCopy\r\n );\r\n\r\n if (isUpdate && !isCopy) {\r\n const promises = data.deactivationPeriods.map(({ id }) =>\r\n id?.includes('new-one')\r\n ? Promise.resolve()\r\n : cancelActivityBooking({\r\n variables: {\r\n ids: [id]\r\n }\r\n })\r\n );\r\n\r\n await Promise.all(promises);\r\n\r\n updateActivity({\r\n variables: {\r\n ...data,\r\n\r\n deactivationPeriods: data.deactivationPeriods\r\n .filter(({ isCanceled }) => !isCanceled)\r\n .map(({ id, ...date }) => date)\r\n }\r\n }).then(\r\n () => {\r\n enqueueSnackbar(t('Activity has been successfully updated'), {\r\n variant: 'success'\r\n });\r\n history.push({\r\n pathname: '/accommodations-and-activities',\r\n state: { tabNumber: ACTIVITIES_TAB }\r\n });\r\n },\r\n () => {\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n setIsLoading(false);\r\n }\r\n );\r\n return;\r\n }\r\n\r\n if (isCopy) {\r\n data = await replacePhotosToFiles(data);\r\n }\r\n\r\n createActivity({\r\n variables: {\r\n ...data,\r\n\r\n deactivationPeriods: data.deactivationPeriods\r\n .filter(({ isCanceled }) => !isCanceled)\r\n .map(({ id, ...date }) => date)\r\n }\r\n }).then(\r\n () => {\r\n enqueueSnackbar(\r\n t(`Activity has been successfully ${isCopy ? 'copied' : 'created'}`),\r\n {\r\n variant: 'success'\r\n }\r\n );\r\n history.push({\r\n pathname: '/accommodations-and-activities',\r\n state: { tabNumber: ACTIVITIES_TAB }\r\n });\r\n },\r\n () => {\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n setIsLoading(false);\r\n }\r\n );\r\n };\r\n\r\n const onActiveTabChangeHandler = (event, newActiveTab) => {\r\n if (\r\n !isNextStepAvailable(\r\n props,\r\n languages,\r\n newActiveTab,\r\n savedForms,\r\n scheduleActiveSubTab,\r\n pricesActiveSubTab\r\n )\r\n ) {\r\n enqueueSnackbar(\r\n t(\r\n 'You should complete and save all previous steps before you can go to this step'\r\n ),\r\n {\r\n variant: 'info',\r\n autoHideDuration: 5000\r\n }\r\n );\r\n return false;\r\n }\r\n let formName = ACTIVITY_FORMS_ORDER[activeTab];\r\n\r\n if (activeTab === ACTIVITY_FORMS_NUMBERS.scheduleForm) {\r\n formName = formName[scheduleActiveSubTab];\r\n } else if (activeTab === ACTIVITY_FORMS_NUMBERS.pricesForm) {\r\n if (\r\n props.generalForm &&\r\n props.generalForm.values.activityType === 'Open'\r\n ) {\r\n let pricesActiveSubTabIsOpen = pricesActiveSubTab;\r\n pricesActiveSubTabIsOpen++;\r\n formName = formName[scheduleActiveSubTab][pricesActiveSubTabIsOpen];\r\n } else {\r\n formName = formName[scheduleActiveSubTab][pricesActiveSubTab];\r\n }\r\n }\r\n\r\n if (\r\n isDiscardSection(\r\n activeTab,\r\n newActiveTab,\r\n scheduleActiveSubTab,\r\n pricesActiveSubTab,\r\n savedForms\r\n )\r\n ) {\r\n onDiscardChangesHandler(formName, newActiveTab, true);\r\n return;\r\n }\r\n\r\n if (\r\n isDiscardChanges(\r\n props,\r\n formName,\r\n activeTab,\r\n newActiveTab,\r\n savedForms,\r\n initialFormData,\r\n dynamicInitialData,\r\n languages\r\n )\r\n ) {\r\n onDiscardChangesHandler(formName, newActiveTab, false);\r\n return;\r\n }\r\n\r\n setActiveTab(newActiveTab);\r\n };\r\n\r\n const onDiscardChangesHandler = (\r\n formName,\r\n newActiveTab,\r\n isDiscardSection\r\n ) => {\r\n confirm({\r\n title: 'You have unsaved changes',\r\n description: t('Are you sure you want to discard the changes?'),\r\n confirmationText: 'Save',\r\n cancellationText: 'Discard'\r\n })\r\n .then(() => {\r\n setIsSaveUnsavedChanges(true);\r\n submitForm(formName);\r\n\r\n if (\r\n !isCurrentStepAvailable(\r\n props,\r\n activeTab,\r\n scheduleActiveSubTab,\r\n pricesActiveSubTab\r\n )\r\n ) {\r\n setIsSaveUnsavedChanges(false);\r\n return;\r\n }\r\n\r\n if (\r\n isNextStepAvailable(\r\n props,\r\n languages,\r\n newActiveTab,\r\n savedForms,\r\n scheduleActiveSubTab,\r\n pricesActiveSubTab\r\n )\r\n ) {\r\n setActiveTab(newActiveTab);\r\n } else {\r\n enqueueSnackbar(\r\n t(\r\n 'You should complete and save all previous steps before you can go to this step'\r\n ),\r\n {\r\n variant: 'info',\r\n autoHideDuration: 5000\r\n }\r\n );\r\n }\r\n setIsSaveUnsavedChanges(false);\r\n })\r\n .catch(() => {\r\n if (isDiscardSection) {\r\n discardSection(\r\n activeTab,\r\n newActiveTab,\r\n setScheduleActiveSubTab,\r\n setPricesActiveSubTab,\r\n setActiveTab,\r\n formName,\r\n initializeForm,\r\n savedForms,\r\n initialFormData,\r\n dynamicInitialData\r\n );\r\n return;\r\n }\r\n discardChanges(\r\n languages,\r\n formName,\r\n initializeForm,\r\n savedForms,\r\n dynamicInitialData,\r\n initialFormData,\r\n newActiveTab,\r\n activeTab,\r\n setActiveTab\r\n );\r\n });\r\n };\r\n\r\n const addLanguage = newItem => {\r\n setLanguages([...languages, newItem]);\r\n addAddOnsLanguage(\r\n props,\r\n newItem,\r\n changeFormFieldValue,\r\n updateFormErrors,\r\n setSavedForms,\r\n savedForms\r\n );\r\n };\r\n\r\n const deleteLanguage = deletedItem => {\r\n confirm({\r\n title: 'Are you sure you want to delete this tab?',\r\n description: t('All related tabs in this language will also be deleted.'),\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n setIsSaveUnsavedChanges(true);\r\n\r\n const languagesCopy = [...languages];\r\n const updatedLanguages = languagesCopy.filter(\r\n item => item !== deletedItem\r\n );\r\n setSelectedLanguage(DEFAULT_LANGUAGE);\r\n setLanguages(updatedLanguages);\r\n\r\n deleteAddOnsLanguage(\r\n props,\r\n deletedItem,\r\n changeFormFieldValue,\r\n activeTab,\r\n setActiveTab,\r\n setSavedForms,\r\n savedForms,\r\n updateFormErrors,\r\n submitForm\r\n );\r\n deleteFormLanguage(deletedItem);\r\n\r\n setIsSaveUnsavedChanges(false);\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const selectLanguage = item => {\r\n setSelectedLanguage(item);\r\n };\r\n\r\n const deleteFormLanguage = deletedLanguage => {\r\n const general = `generalForm-${deletedLanguage}`;\r\n const description = `descriptionForm-${deletedLanguage}`;\r\n\r\n destroyForm([general, description]);\r\n setSavedForms({\r\n ...savedForms,\r\n [general]: {},\r\n [description]: {}\r\n });\r\n };\r\n\r\n const onChangeActivityTypeHandler = savedFormsCopy => {\r\n const pricesTabIndex =\r\n props['generalForm'].values.activityType === 'Open' ? 1 : 0;\r\n setPricesActiveSubTab(0);\r\n setSavedForms({\r\n ...savedFormsCopy,\r\n pricesTab:\r\n ACTIVITY_FORMS_ORDER[ACTIVITY_FORMS_NUMBERS.pricesForm][\r\n scheduleActiveSubTab\r\n ][pricesTabIndex]\r\n });\r\n };\r\n\r\n const getPropsForTabsWithLanguages = () => {\r\n return {\r\n selectedLanguage: selectedLanguage,\r\n languages: languages,\r\n addLanguage: addLanguage,\r\n deleteLanguage: deleteLanguage,\r\n selectLanguage: selectLanguage\r\n };\r\n };\r\n\r\n const [submitButton, setSubmitButton] = React.useState('');\r\n\r\n const onGeneralAndDescFormSubmitHandler = (\r\n languagesLength,\r\n secondLanguage,\r\n currentFormName,\r\n secondFormName\r\n ) => {\r\n const forms = [currentFormName];\r\n let savedFormsCopy = { ...savedForms };\r\n let isSetPriceActiveSubTab = false;\r\n\r\n if (languagesLength > 1) forms.push(`${currentFormName}-${secondLanguage}`);\r\n\r\n for (let i in forms) {\r\n if (!forms.hasOwnProperty(i)) continue;\r\n\r\n const formName = forms[i];\r\n const form = { ...props[formName] };\r\n\r\n if (!form || !form.values || form.syncErrors) {\r\n enqueueSnackbar(\r\n t(\r\n 'Please fill in all the required fields correctly on the current step for all languages'\r\n ),\r\n {\r\n variant: 'warning'\r\n }\r\n );\r\n return;\r\n }\r\n\r\n if (formName === 'generalForm') {\r\n if (savedForms[formName]) {\r\n if (savedForms[formName].activityType !== form.values.activityType) {\r\n isSetPriceActiveSubTab = true;\r\n }\r\n } else if (\r\n initialFormData[formName].activityType !== form.values.activityType\r\n ) {\r\n isSetPriceActiveSubTab = true;\r\n }\r\n }\r\n\r\n savedFormsCopy = {\r\n ...savedFormsCopy,\r\n [formName]: { ...form.values }\r\n };\r\n }\r\n\r\n if (isSetPriceActiveSubTab && isVisitedPrices && isSaveUnsavedChanges) {\r\n onChangeActivityTypeHandler(savedFormsCopy, secondFormName);\r\n return;\r\n }\r\n\r\n if (isSetPriceActiveSubTab && isVisitedPrices && !isSaveUnsavedChanges) {\r\n confirm({\r\n title: 'Are you sure you want to change the activity type?',\r\n description:\r\n 'Note, that previously filled in data on the Prices may be reset.',\r\n confirmationText: 'Change',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n onChangeActivityTypeHandler(savedFormsCopy);\r\n setActiveTab(ACTIVITY_FORMS_NUMBERS[secondFormName]);\r\n })\r\n .catch(() => {});\r\n return;\r\n }\r\n\r\n setSavedForms({\r\n ...savedFormsCopy\r\n });\r\n\r\n if (submitButton === 'save' && !isSaveUnsavedChanges) {\r\n onCreateActivityHandler();\r\n }\r\n if (submitButton === 'next' && !isSaveUnsavedChanges) {\r\n setActiveTab(ACTIVITY_FORMS_NUMBERS[secondFormName]);\r\n }\r\n };\r\n\r\n const getGeneralCreateTab = () => {\r\n const languagesLength = languages.length;\r\n const secondLanguage = languages[languagesLength - 1];\r\n\r\n const generalFormProps = {\r\n onSubmit: () =>\r\n onGeneralAndDescFormSubmitHandler(\r\n languagesLength,\r\n secondLanguage,\r\n 'generalForm',\r\n 'descriptionForm'\r\n ),\r\n ...getPropsForTabsWithLanguages()\r\n };\r\n\r\n return (\r\n <div>\r\n <div hidden={selectedLanguage !== DEFAULT_LANGUAGE}>\r\n <GeneralCreate\r\n {...generalFormProps}\r\n isUpdate={isUpdate}\r\n setSubmitButton={setSubmitButton}\r\n bookDates={bookDates}\r\n />\r\n </div>\r\n {languagesLength > 1 && (\r\n <div hidden={selectedLanguage === DEFAULT_LANGUAGE}>\r\n <GeneralCreateSecondLanguage\r\n {...generalFormProps}\r\n form={`generalForm-${secondLanguage}`}\r\n isUpdate={isUpdate}\r\n setSubmitButton={setSubmitButton}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const getDescriptionCreateTab = () => {\r\n const languagesLength = languages.length;\r\n const secondLanguage = languages[languagesLength - 1];\r\n\r\n const descriptionFormProps = {\r\n onSubmit: () =>\r\n onGeneralAndDescFormSubmitHandler(\r\n languagesLength,\r\n secondLanguage,\r\n 'descriptionForm',\r\n 'scheduleForm'\r\n ),\r\n ...getPropsForTabsWithLanguages()\r\n };\r\n\r\n return (\r\n <div>\r\n <div hidden={selectedLanguage !== DEFAULT_LANGUAGE}>\r\n <DescriptionCreate\r\n {...descriptionFormProps}\r\n isUpdate={isUpdate}\r\n setSubmitButton={setSubmitButton}\r\n />\r\n </div>\r\n {languagesLength > 1 && (\r\n <div hidden={selectedLanguage === DEFAULT_LANGUAGE}>\r\n <DescriptionCreate\r\n {...descriptionFormProps}\r\n isUpdate={isUpdate}\r\n form={`descriptionForm-${secondLanguage}`}\r\n setSubmitButton={setSubmitButton}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const getPricesSubTabs = () => {\r\n let subTabs = [];\r\n\r\n if (scheduleActiveSubTab === SCHEDULE_SECTION.dateNoTime) {\r\n subTabs = [\r\n {\r\n title: 'Daily prices',\r\n instruction: 'Prices per each day, with multiple categories'\r\n },\r\n {\r\n title: 'Equal prices',\r\n instruction: 'Equal prices for all days with multiple categories'\r\n }\r\n ];\r\n } else if (scheduleActiveSubTab === SCHEDULE_SECTION.dateTime) {\r\n subTabs = [\r\n {\r\n title: 'Prices by days and categories',\r\n instruction:\r\n 'Prices per day or a group of days, with multiple categories'\r\n },\r\n {\r\n title: 'Equal prices',\r\n instruction: 'Equal prices for all days with multiple categories'\r\n }\r\n ];\r\n }\r\n\r\n const generalForm = { ...props['generalForm'] };\r\n if (\r\n generalForm &&\r\n generalForm.values &&\r\n generalForm.values.activityType === 'Private'\r\n ) {\r\n if (scheduleActiveSubTab === SCHEDULE_SECTION.pass) {\r\n subTabs = [\r\n {\r\n title: 'Prices by categories',\r\n instruction: 'Specific prices for different categories'\r\n }\r\n ];\r\n }\r\n\r\n subTabs.unshift({\r\n title: 'Fixed price',\r\n instruction: 'One price for whole activity'\r\n });\r\n }\r\n\r\n return subTabs;\r\n };\r\n\r\n const tabs = [\r\n {\r\n name: 'General',\r\n formName: 'generalForm',\r\n component: getGeneralCreateTab()\r\n },\r\n {\r\n name: 'Description',\r\n formName: 'descriptionForm',\r\n component: getDescriptionCreateTab()\r\n },\r\n {\r\n name: 'Schedule',\r\n formName: 'scheduleForm',\r\n component: (\r\n <ScheduleCreate\r\n onSubmit={(values, formName) => {\r\n const activityType = props['generalForm'].values.activityType;\r\n const scheduleTab =\r\n ACTIVITY_FORMS_ORDER[activeTab][scheduleActiveSubTab];\r\n let pricesTabIndex =\r\n activityType === 'Open'\r\n ? pricesActiveSubTab + 1\r\n : pricesActiveSubTab;\r\n if (scheduleTab === 'schedulePassForm') {\r\n if (activityType === 'Open') {\r\n pricesTabIndex = 0;\r\n } else {\r\n if (pricesActiveSubTab) {\r\n pricesTabIndex = 1;\r\n } else {\r\n pricesTabIndex = 0;\r\n }\r\n }\r\n setPricesActiveSubTab(pricesTabIndex);\r\n }\r\n setSavedForms({\r\n ...savedForms,\r\n [formName]: { ...values },\r\n scheduleTab: scheduleTab,\r\n pricesTab:\r\n ACTIVITY_FORMS_ORDER[ACTIVITY_FORMS_NUMBERS.pricesForm][\r\n scheduleActiveSubTab\r\n ][pricesTabIndex]\r\n });\r\n if (submitButton === 'save' && !isSaveUnsavedChanges) {\r\n onCreateActivityHandler();\r\n setIsVisitedPrices(true);\r\n }\r\n if (submitButton === 'next' && !isSaveUnsavedChanges) {\r\n setActiveTab(ACTIVITY_FORMS_NUMBERS.pricesForm);\r\n setIsVisitedPrices(true);\r\n }\r\n }}\r\n getPricesData={(values, formName) => {\r\n setDynamicInitialData({\r\n ...dynamicInitialData,\r\n [formName]: values\r\n });\r\n }}\r\n selectedTabIndex={scheduleActiveSubTab}\r\n isUpdate={isUpdate}\r\n setSubmitButton={setSubmitButton}\r\n />\r\n ),\r\n subTabs: [\r\n {\r\n title: 'Date, no time',\r\n instruction: 'Select date & days'\r\n },\r\n {\r\n title: 'Date & time',\r\n instruction: 'Select both date and time'\r\n },\r\n {\r\n title: 'Pass',\r\n instruction: 'No date is selected'\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Prices',\r\n formName: 'pricesForm',\r\n component: (\r\n <PricesCreate\r\n onSubmit={(values, formName) => {\r\n const pricesSubTab =\r\n props['generalForm'].values.activityType === 'Open'\r\n ? pricesActiveSubTab + 1\r\n : pricesActiveSubTab;\r\n setSavedForms({\r\n ...savedForms,\r\n [formName]: { ...values },\r\n pricesTab:\r\n ACTIVITY_FORMS_ORDER[activeTab][scheduleActiveSubTab][\r\n pricesSubTab\r\n ]\r\n });\r\n if (submitButton === 'save' && !isSaveUnsavedChanges) {\r\n onCreateActivityHandler();\r\n }\r\n if (submitButton === 'next' && !isSaveUnsavedChanges) {\r\n setActiveTab(ACTIVITY_FORMS_NUMBERS.addOnsForm);\r\n }\r\n }}\r\n isOpen={\r\n props['generalForm'] &&\r\n props['generalForm'].values.activityType === 'Open'\r\n }\r\n scheduleTabIndex={scheduleActiveSubTab}\r\n selectedTabIndex={pricesActiveSubTab}\r\n isUpdate={isUpdate}\r\n setSubmitButton={setSubmitButton}\r\n />\r\n ),\r\n subTabs: getPricesSubTabs()\r\n },\r\n {\r\n name: 'Add-ons',\r\n formName: 'addOnsForm',\r\n component: (\r\n <AddOns\r\n {...getPropsForTabsWithLanguages()}\r\n onSubmit={values => {\r\n setSavedForms({ ...savedForms, addOnsForm: { ...values } });\r\n if (submitButton === 'save' && !isSaveUnsavedChanges) {\r\n onCreateActivityHandler();\r\n }\r\n if (submitButton === 'next' && !isSaveUnsavedChanges) {\r\n setActiveTab(ACTIVITY_FORMS_NUMBERS.relatedAccommodationsForm);\r\n }\r\n }}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )\r\n },\r\n {\r\n name: 'Related Accommodations',\r\n formName: 'relatedAccommodationsForm',\r\n component: (\r\n <RelatedAccommodations\r\n onSubmit={values => {\r\n setSavedForms({\r\n ...savedForms,\r\n relatedAccommodationsForm: { ...values }\r\n });\r\n if (submitButton === 'save' && !isSaveUnsavedChanges) {\r\n onCreateActivityHandler();\r\n }\r\n if (submitButton === 'next' && !isSaveUnsavedChanges) {\r\n setActiveTab(ACTIVITY_FORMS_NUMBERS.integrationForm);\r\n }\r\n }}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n )\r\n },\r\n {\r\n name: 'Integration',\r\n formName: 'integrationForm',\r\n component: (\r\n <Integration\r\n onSubmit={values => {\r\n setSavedForms({\r\n ...savedForms,\r\n integrationForm: { ...values }\r\n });\r\n if (submitButton === 'next' && !isSaveUnsavedChanges)\r\n onCreateActivityHandler();\r\n }}\r\n setSubmitButton={setSubmitButton}\r\n />\r\n )\r\n }\r\n ];\r\n\r\n const getSubActiveTab = () => {\r\n if (activeTab === ACTIVITY_FORMS_NUMBERS.scheduleForm) {\r\n return scheduleActiveSubTab;\r\n } else if (activeTab === ACTIVITY_FORMS_NUMBERS.pricesForm) {\r\n return pricesActiveSubTab;\r\n }\r\n };\r\n\r\n const onSubActiveTabChangeHandler = e => {\r\n if (activeTab === ACTIVITY_FORMS_NUMBERS.scheduleForm) {\r\n setScheduleActiveSubTab(parseInt(e.target.value));\r\n } else if (activeTab === ACTIVITY_FORMS_NUMBERS.pricesForm) {\r\n setPricesActiveSubTab(parseInt(e.target.value));\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <AppHeader />\r\n <CircularLoader\r\n isLoading={isLoading}\r\n loaderClassName={classes.loaderClassName}\r\n />\r\n <div className={classes.root}>\r\n <TabsMenu\r\n activeTab={activeTab}\r\n title={\r\n isUpdate && !isCopy\r\n ? 'Edit Activity'\r\n : isCopy\r\n ? 'Copy Activity'\r\n : 'Create new Activity'\r\n }\r\n isDoneTab={tab => {\r\n return isActivityFormDone(\r\n tab.formName,\r\n languages,\r\n props,\r\n savedForms,\r\n activeTab,\r\n scheduleActiveSubTab,\r\n pricesActiveSubTab\r\n );\r\n }}\r\n tabs={tabs}\r\n change={onActiveTabChangeHandler}\r\n />\r\n\r\n <RadioBtnTabsMenu\r\n activeTab={activeTab}\r\n activeSubTab={getSubActiveTab()}\r\n tabs={tabs}\r\n change={onSubActiveTabChangeHandler}\r\n />\r\n\r\n <div className={classes.content}>\r\n <div className={classes.contentBox}>\r\n <TabsPanel tabs={tabs} activeTab={activeTab} />\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n ...state.form,\r\n businessOwner: state.businessOwner,\r\n deletedAddOns: state.activityAndAccommodation.deletedAddOns,\r\n deletedRelatedAccommodations:\r\n state.activityAndAccommodation.deletedRelatedAccommodations,\r\n deletedIntegrations: state.activityAndAccommodation.deletedIntegrations\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (form, field, value) => {\r\n dispatch(change(form, field, value));\r\n },\r\n destroyForm: forms => {\r\n dispatch(destroy(...forms));\r\n },\r\n initializeForm: (form, data) => {\r\n dispatch(initialize(form, data));\r\n },\r\n updateFormErrors: (form, fields) => {\r\n dispatch(updateSyncErrors(form, fields));\r\n },\r\n submitForm: form => {\r\n dispatch(submit(form));\r\n },\r\n clearDeletedFields: () => {\r\n dispatch(clearDeletedFields());\r\n }\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CreateActivity);\r\n","import {\r\n ACTIVITY_FORMS_NUMBERS,\r\n ACTIVITY_FORMS_ORDER,\r\n ACTIVITY_SCHEDULE_FORMS_NUMBERS\r\n} from 'pages/create-activity/constants';\r\n\r\nexport const isActivityFormDone = (\r\n formName,\r\n languages,\r\n forms,\r\n savedForms,\r\n activeTab,\r\n scheduleActiveSubTab,\r\n pricesActiveSubTab\r\n) => {\r\n if (formName === 'generalForm' || formName === 'descriptionForm') {\r\n if (languages.length > 1) {\r\n const formNameSecondLanguage = `${formName}-Norwegian`;\r\n if (\r\n !forms[formNameSecondLanguage] ||\r\n forms[formNameSecondLanguage].syncErrors ||\r\n !savedForms[formNameSecondLanguage] ||\r\n !Object.keys(savedForms[formNameSecondLanguage]).length\r\n ) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (formName === 'scheduleForm') {\r\n const scheduleFormName =\r\n ACTIVITY_FORMS_ORDER[ACTIVITY_FORMS_NUMBERS.scheduleForm][\r\n scheduleActiveSubTab\r\n ];\r\n if (!savedForms.scheduleTab) return false;\r\n if (\r\n !forms[scheduleFormName] ||\r\n forms[scheduleFormName].syncErrors ||\r\n !savedForms[scheduleFormName]\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n if (formName === 'pricesForm') {\r\n if (!forms['generalForm']) return false;\r\n let pricesTabIndex =\r\n forms['generalForm'].values.activityType === 'Open'\r\n ? pricesActiveSubTab + 1\r\n : pricesActiveSubTab;\r\n const pricesFormName =\r\n ACTIVITY_FORMS_ORDER[ACTIVITY_FORMS_NUMBERS.pricesForm][\r\n scheduleActiveSubTab\r\n ][pricesTabIndex];\r\n if (\r\n ACTIVITY_SCHEDULE_FORMS_NUMBERS.schedulePassForm === scheduleActiveSubTab\r\n ) {\r\n if (forms['generalForm'].values.activityType === 'Open') {\r\n pricesTabIndex = 0;\r\n } else {\r\n if (pricesActiveSubTab) {\r\n pricesTabIndex = 1;\r\n } else {\r\n pricesTabIndex = 0;\r\n }\r\n }\r\n }\r\n if (!savedForms.pricesTab) return false;\r\n if (\r\n !forms[pricesFormName] ||\r\n forms[pricesFormName].syncErrors ||\r\n !savedForms[pricesFormName]\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n if (!forms[formName] || forms[formName].syncErrors || !savedForms[formName]) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n","import gql from 'graphql-tag';\r\n\r\nexport const DELETE_ACCOMMODATION = gql`\r\n mutation deleteAccommodation($id: Int!) {\r\n deleteAccommodation(id: $id) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const CREATE_ACCOMMODATION = gql`\r\n mutation createAccommodation(\r\n $photo: Upload!\r\n $accommodation: AccommodationInput!\r\n $addOns: [AddOnInput]\r\n $mandatoryFees: [MandatoryFeeInput]\r\n $businessOwnerId: Int\r\n $deactivationPeriods: [DeactivationPeriodsInput]\r\n ) {\r\n createAccommodation(\r\n photo: $photo\r\n businessOwnerId: $businessOwnerId\r\n accommodation: $accommodation\r\n addOns: $addOns\r\n mandatoryFees: $mandatoryFees\r\n deactivationPeriods: $deactivationPeriods\r\n ) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_ACCOMMODATION = gql`\r\n mutation updateAccommodation(\r\n $photo: Upload\r\n $businessOwnerId: Int\r\n $accommodation: AccommodationInput\r\n $addOns: [AddOnInput]\r\n $deletedAddOns: [Int]\r\n $mandatoryFees: [MandatoryFeeInput]\r\n $deletedMandatoryFees: [Int]\r\n $deletedRelatedActivities: [Int]\r\n $deletedPlatforms: [Int]\r\n $deactivationPeriods: [DeactivationPeriodsInput]\r\n ) {\r\n updateAccommodation(\r\n photo: $photo\r\n businessOwnerId: $businessOwnerId\r\n accommodation: $accommodation\r\n addOns: $addOns\r\n deletedAddOns: $deletedAddOns\r\n mandatoryFees: $mandatoryFees\r\n deletedMandatoryFees: $deletedMandatoryFees\r\n deletedRelatedActivities: $deletedRelatedActivities\r\n deletedPlatforms: $deletedPlatforms\r\n deactivationPeriods: $deactivationPeriods\r\n ) {\r\n accommodation {\r\n id\r\n }\r\n }\r\n }\r\n`;\r\n","import moment from 'moment-timezone';\r\n\r\nimport {\r\n ACCOMMODATION_FORMS_NUMBERS,\r\n ACCOMMODATION_FORMS_ORDER\r\n} from 'pages/create-accommodation/constants';\r\n\r\nimport {\r\n getAddOns,\r\n getMandatoryFees,\r\n getIntegrations,\r\n getPreparedPricesCurrency\r\n} from 'utils/accommodations-and-activities/prepareAccommodationAndActivityData';\r\n\r\nexport const getPreparedDataToCreateAccommodation = (\r\n forms,\r\n pricesActiveSubTab,\r\n languages,\r\n isUpdate,\r\n deletedAddOns,\r\n deletedMandatoryFees,\r\n deletedRelatedActivities,\r\n deletedIntegrations,\r\n isCopy\r\n) => {\r\n const languagesLength = languages.length;\r\n let secondLanguage = false;\r\n if (languagesLength > 1) secondLanguage = languages[languagesLength - 1];\r\n\r\n const generalForm = _getGeneralForm(forms);\r\n const descriptionForm = { ...forms['descriptionForm'].values };\r\n const integrationForm = { ...forms['integrationForm'].values };\r\n const addOnsForm = { ...forms['addOnsForm'].values };\r\n const mandatoryFeesForm = { ...forms['mandatoryFeesForm'].values };\r\n const relatedForm = _getRelatedForm(forms);\r\n\r\n let addOns = getAddOns(isUpdate, addOnsForm, secondLanguage);\r\n let mandatoryFees = getMandatoryFees(isUpdate, mandatoryFeesForm, secondLanguage);\r\n let integrations = getIntegrations(isUpdate, integrationForm);\r\n const ownerIdObj = {\r\n businessOwnerId:\r\n forms.businessOwner.selectedBusinessOwner.ownerId ||\r\n forms.businessOwner.selectedBusinessOwner.id\r\n };\r\n\r\n const pricesFormName =\r\n ACCOMMODATION_FORMS_ORDER[ACCOMMODATION_FORMS_NUMBERS.pricesForm][\r\n pricesActiveSubTab\r\n ];\r\n const pricesForm = { ...forms[pricesFormName].values };\r\n const prices = _getPrices(pricesForm);\r\n\r\n const photoObj = forms['generalForm'].values.coverPhoto.file\r\n ? { photo: forms['generalForm'].values.coverPhoto.file }\r\n : {};\r\n\r\n delete generalForm.coverPhoto;\r\n delete generalForm.activityType;\r\n\r\n let deletedAddOnsObj = deletedAddOns.length\r\n ? {\r\n deletedAddOns: deletedAddOns\r\n }\r\n : {};\r\n \r\n let deletedMandatoryFeesObj = deletedMandatoryFees.length\r\n ? {\r\n deletedMandatoryFees: deletedMandatoryFees\r\n }\r\n : {};\r\n\r\n let deletedRelatedActivitiesObj = deletedRelatedActivities.length\r\n ? { deletedRelatedActivities: deletedRelatedActivities }\r\n : {};\r\n\r\n let deletedPlatformsObj = deletedIntegrations.length\r\n ? { deletedPlatforms: deletedIntegrations }\r\n : {};\r\n\r\n const deactivationPeriods = JSON.parse(\r\n JSON.stringify(generalForm.deactivationPeriods)\r\n ).filter(({ startPeriod, endPeriod }) => !!startPeriod && !!endPeriod);\r\n\r\n delete generalForm.deactivationPeriods;\r\n\r\n if (isCopy) {\r\n delete generalForm.id;\r\n generalForm.productCode = '';\r\n addOns = addOns.map(addOn => ({ ...addOn, id: null }));\r\n mandatoryFees = mandatoryFees.map(mandatoryFee => ({ ...mandatoryFee, id: null }));\r\n integrations = integrations.map(integration => ({\r\n ...integration,\r\n id: null\r\n }));\r\n deletedAddOnsObj = {};\r\n deletedMandatoryFeesObj = {};\r\n deletedRelatedActivitiesObj = {};\r\n deletedPlatformsObj = {};\r\n }\r\n\r\n return {\r\n ...photoObj,\r\n ...ownerIdObj,\r\n accommodation: {\r\n ...generalForm,\r\n ..._getGeneralInfoSecondLanguage(forms, secondLanguage),\r\n ...descriptionForm,\r\n ..._getDescriptionInfoSecondLanguage(forms, secondLanguage),\r\n ...relatedForm,\r\n prices: prices,\r\n accommodationOnPlatform: integrations\r\n },\r\n addOns: addOns,\r\n ...deletedAddOnsObj,\r\n mandatoryFees: mandatoryFees,\r\n ...deletedMandatoryFeesObj,\r\n ...deletedRelatedActivitiesObj,\r\n ...deletedPlatformsObj,\r\n deactivationPeriods\r\n };\r\n};\r\n\r\nconst _getGeneralForm = forms => {\r\n const generalFormValues = { ...forms['generalForm'].values };\r\n const idObj = generalFormValues.id ? { id: generalFormValues.id } : {};\r\n\r\n return {\r\n ...idObj,\r\n title: generalFormValues.title,\r\n productCode: generalFormValues.productCode,\r\n guestsNumber: parseInt(generalFormValues.guests),\r\n location: generalFormValues.location,\r\n fromDate: moment(generalFormValues.availability.startDate).format(\r\n 'YYYY-MM-DD'\r\n ),\r\n toDate: generalFormValues.availability.endDate\r\n ? moment(generalFormValues.availability.endDate).format('YYYY-MM-DD')\r\n : null,\r\n checkInTime: moment(generalFormValues.checkInAfter).format('HH:mm:ssZZ'),\r\n checkOutTime: moment(generalFormValues.checkOutBefore).format('HH:mm:ssZZ'),\r\n bedDetails: generalFormValues.bedDetails,\r\n minNights: generalFormValues.minNights,\r\n color:generalFormValues.color,\r\n deactivationPeriods: generalFormValues.deactivatedDates.map(\r\n ({ startDate, endDate, id, isCanceled }) => ({\r\n id,\r\n startPeriod: startDate?.format('YYYY-MM-DD'),\r\n endPeriod: endDate?.format('YYYY-MM-DD'),\r\n isCanceled\r\n })\r\n )\r\n };\r\n};\r\n\r\nconst _getGeneralInfoSecondLanguage = (forms, secondLanguage) => {\r\n const countryCode = 'No';\r\n\r\n if (!secondLanguage)\r\n return {\r\n [`title${countryCode}`]: null,\r\n [`bedDetails${countryCode}`]: null\r\n };\r\n\r\n const generalFormSecondLanguage = {\r\n ...forms[`generalForm-${secondLanguage}`].values\r\n };\r\n\r\n return {\r\n [`title${countryCode}`]: generalFormSecondLanguage.title,\r\n [`bedDetails${countryCode}`]: generalFormSecondLanguage.bedDetails\r\n };\r\n};\r\n\r\nconst _getDescriptionInfoSecondLanguage = (forms, secondLanguage) => {\r\n const countryCode = 'No';\r\n\r\n if (!secondLanguage) {\r\n return {\r\n [`overview${countryCode}`]: null,\r\n [`additionalInfo${countryCode}`]: null,\r\n [`included${countryCode}`]: [],\r\n [`notIncluded${countryCode}`]: []\r\n };\r\n }\r\n\r\n const generalFormSecondLanguage = {\r\n ...forms[`descriptionForm-${secondLanguage}`].values\r\n };\r\n const newSecondLanguageObject = {};\r\n\r\n Object.keys(generalFormSecondLanguage).map(\r\n field =>\r\n (newSecondLanguageObject[`${field}${countryCode}`] =\r\n generalFormSecondLanguage[field])\r\n );\r\n\r\n return newSecondLanguageObject;\r\n};\r\n\r\nconst _getRelatedForm = forms => {\r\n return {\r\n relatedActivities: forms[\r\n 'relatedActivitiesForm'\r\n ].values.relatedActivities.map(item => parseInt(item.id))\r\n };\r\n};\r\n\r\nconst _getPricesPerDay = days => {\r\n const prices = [];\r\n\r\n days.forEach(day => {\r\n getPreparedPricesCurrency(day).forEach(price => {\r\n prices.push({\r\n ...price,\r\n day: day.day\r\n });\r\n });\r\n });\r\n\r\n return prices;\r\n};\r\n\r\nconst _getPrices = pricesForm => {\r\n if (pricesForm.categories) {\r\n let categoryPrices = [];\r\n pricesForm.categories.map(item => {\r\n categoryPrices = [...categoryPrices, ...getPreparedPricesCurrency(item)];\r\n });\r\n return categoryPrices;\r\n } else if (pricesForm.days) {\r\n return _getPricesPerDay(pricesForm.days);\r\n } else {\r\n return getPreparedPricesCurrency(pricesForm);\r\n }\r\n};\r\n","import {\r\n ACCOMMODATION_FORMS_NUMBERS,\r\n ACCOMMODATION_FORMS_ORDER\r\n} from 'pages/create-accommodation/constants';\r\n\r\nexport const isNextStepAvailable = (\r\n forms,\r\n languages,\r\n newActiveTab,\r\n savedForms,\r\n pricesActiveSubTab\r\n) => {\r\n let newActiveTabCopy = newActiveTab;\r\n\r\n while (newActiveTabCopy > 0) {\r\n let formName = ACCOMMODATION_FORMS_ORDER[newActiveTabCopy - 1];\r\n\r\n if (typeof formName === 'object') {\r\n formName = formName[pricesActiveSubTab];\r\n }\r\n\r\n const languagesLength = languages.length;\r\n const secondLanguage = languages[languagesLength - 1];\r\n\r\n if (languagesLength > 1 && formName === 'addOnsForm') {\r\n const addOnsSecondLanguageForm = forms[formName].values;\r\n for (let i in addOnsSecondLanguageForm.addOns) {\r\n if (!addOnsSecondLanguageForm.addOns.hasOwnProperty(i)) continue;\r\n const addOns = addOnsSecondLanguageForm.addOns[i][secondLanguage];\r\n if (!addOns.title) return false;\r\n }\r\n }\r\n\r\n if (languagesLength > 1 && formName === 'mandatoryFeesForm') {\r\n const mandatoryFeesSecondLanguageForm = forms[formName].values;\r\n for (let i in mandatoryFeesSecondLanguageForm.mandatoryFees) {\r\n if (!mandatoryFeesSecondLanguageForm.mandatoryFees.hasOwnProperty(i)) continue;\r\n const mandatoryFees = mandatoryFeesSecondLanguageForm.mandatoryFees[i][secondLanguage];\r\n if (!mandatoryFees.title) return false;\r\n }\r\n }\r\n\r\n if (\r\n languagesLength > 1 &&\r\n (formName === 'generalForm' || formName === 'descriptionForm')\r\n ) {\r\n const secondLanguageFormName = `${formName}-${secondLanguage}`;\r\n if (\r\n languagesLength > 1 &&\r\n forms[secondLanguageFormName] &&\r\n (forms[secondLanguageFormName].syncErrors ||\r\n !Object.keys(savedForms[secondLanguageFormName]).length)\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n if (\r\n forms[formName] &&\r\n (forms[formName].syncErrors || !savedForms[formName])\r\n ) {\r\n return false;\r\n }\r\n\r\n newActiveTabCopy--;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nexport const isCurrentStepAvailable = (\r\n forms,\r\n activeTab,\r\n pricesActiveSubTab\r\n) => {\r\n let activeFormName = '';\r\n\r\n if (activeTab === ACCOMMODATION_FORMS_NUMBERS.pricesForm) {\r\n activeFormName = ACCOMMODATION_FORMS_ORDER[activeTab][pricesActiveSubTab];\r\n } else {\r\n activeFormName = ACCOMMODATION_FORMS_ORDER[activeTab];\r\n }\r\n\r\n if (forms[activeFormName].syncErrors) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme=>({\r\n root: {\r\n minHeight: 'calc(100% - 52px)',\r\n width: '100%',\r\n display: 'flex',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n flexDirection: 'column',\r\n overflowX: 'hidden',\r\n }\r\n },\r\n content: {\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n flexDirection: 'column'\r\n }\r\n },\r\n contentBox: {\r\n width: '600px',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n \r\n }\r\n },\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important'\r\n }\r\n \r\n}));\r\n","import CreateAccommodation from './CreateAccommodation';\r\n\r\nexport default CreateAccommodation;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useMutation } from '@apollo/react-hooks';\r\nimport { useSnackbar } from 'notistack';\r\nimport { connect } from 'react-redux';\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\nimport {\r\n change,\r\n destroy,\r\n initialize,\r\n submit,\r\n updateSyncErrors\r\n} from 'redux-form';\r\n\r\nimport {\r\n AppHeader,\r\n CircularLoader,\r\n RadioBtnTabsMenu,\r\n TabsMenu,\r\n TabsPanel,\r\n AccommodationGeneralCreate,\r\n AccommodationGeneralCreateSecondLanguage,\r\n AccommodationDescriptionCreate,\r\n AddOns,\r\n RelatedActivities,\r\n Integration,\r\n AccommodationPricesCreate,\r\n FeeCategorySection,\r\n MandatoryFees\r\n} from 'components';\r\n\r\nimport {\r\n CREATE_ACCOMMODATION,\r\n UPDATE_ACCOMMODATION\r\n} from 'graphql/mutations/accommodation';\r\n\r\nimport { isAccommodationFormDone } from 'utils/accommodations-and-activities/accommodationFormDoneHandler';\r\nimport { onGeneralAndDescFormsHandler } from 'utils/accommodations-and-activities/generalAndDescriptionFormsHandler';\r\nimport { getPreparedDataToCreateAccommodation } from 'utils/accommodations-and-activities/prepareAccommodationData';\r\nimport {\r\n isNextStepAvailable,\r\n isCurrentStepAvailable\r\n} from 'utils/accommodations-and-activities/accommodationNextStepAvailableHandler';\r\nimport {\r\n isDiscardSection,\r\n discardSection\r\n} from 'utils/accommodations-and-activities/accommodationDiscardChangesHandler';\r\nimport {\r\n discardChanges,\r\n isDiscardChanges\r\n} from 'utils/accommodations-and-activities/activityDiscardChangesHandler';\r\n\r\nimport { DEFAULT_LANGUAGE } from 'pages/create-activity/constants';\r\n\r\nimport { clearDeletedFields, deletedMandatoryFees } from 'actions/activityAndAccommodation';\r\n\r\nimport {\r\n INITIAL_ACCOMMODATION_FORM_DATA,\r\n ACCOMMODATION_FORMS_NUMBERS,\r\n ACCOMMODATION_FORMS_ORDER,\r\n ACCOMMODATIONS_TAB\r\n} from 'pages/create-accommodation/constants';\r\n\r\nimport {\r\n addAddOnsLanguage,\r\n deleteAddOnsLanguage\r\n} from 'utils/accommodations-and-activities/addOnsLanguagesHandler';\r\nimport { getFileByUrl } from '../../utils/files/handleFIles';\r\n\r\nimport { useStyles } from './styles';\r\nimport { CANCEL_ACCOMMODATION_BOOKING } from '../../graphql/mutations/booking';\r\nimport { addMandatoryFeesLanguage,deleteMandatoryFeesLanguage } from 'utils/accommodations-and-activities/mandatoryFeeLanguageHandler';\r\n\r\n\r\nconst DEFAULT_COLOR = '#0E8BB4';\r\nconst CreateAccommodation = ({\r\n data,\r\n pricesActiveSubTabNumber,\r\n loading,\r\n isCopy,\r\n bookDates,\r\n ...props\r\n}) => {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const [t] = useTranslation();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const confirm = React.useContext(ConfirmContext);\r\n\r\n const [createAccommodation] = useMutation(CREATE_ACCOMMODATION);\r\n const [updateAccommodation] = useMutation(UPDATE_ACCOMMODATION);\r\n const [cancelAccommodationBooking] = useMutation(\r\n CANCEL_ACCOMMODATION_BOOKING\r\n );\r\n\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [isUpdate, setIsUpdate] = React.useState(false);\r\n const [isVisitedPrices] = React.useState(false);\r\n const [isSaveUnsavedChanges, setIsSaveUnsavedChanges] = React.useState(false);\r\n\r\n const [activeTab, setActiveTab] = React.useState(0);\r\n const [scheduleActiveSubTab] = React.useState(0);\r\n const [pricesActiveSubTab, setPricesActiveSubTab] = React.useState(0);\r\n\r\n const [selectedLanguage, setSelectedLanguage] = React.useState(\r\n DEFAULT_LANGUAGE\r\n );\r\n const [languages, setLanguages] = React.useState([DEFAULT_LANGUAGE]);\r\n\r\n const [initialFormData, setInitialFormData] = React.useState({\r\n ...INITIAL_ACCOMMODATION_FORM_DATA\r\n });\r\n const [savedForms, setSavedForms] = React.useState({});\r\n\r\n const [color, setColor] = React.useState(DEFAULT_COLOR);\r\n const [savedColor, setSavedColor] = React.useState({});\r\n\r\n const {\r\n initializeForm,\r\n destroyForm,\r\n submitForm,\r\n deletedAddOns,\r\n deletedMandatoryFees,\r\n changeFormFieldValue,\r\n updateFormErrors,\r\n deletedRelatedActivities,\r\n deletedIntegrations,\r\n clearDeletedFields\r\n } = props;\r\n\r\n React.useEffect(() => {\r\n destroySecondLanguageForms();\r\n clearDeletedFields();\r\n setLanguages([DEFAULT_LANGUAGE]);\r\n setInitialFormData({ ...INITIAL_ACCOMMODATION_FORM_DATA });\r\n\r\n if (loading) {\r\n setIsLoading(true);\r\n return;\r\n }\r\n\r\n if (data) {\r\n setIsUpdate(true);\r\n setSavedForms({\r\n ...data,\r\n pricesTab:\r\n ACCOMMODATION_FORMS_ORDER[ACCOMMODATION_FORMS_NUMBERS.pricesForm][\r\n pricesActiveSubTabNumber\r\n ]\r\n });\r\n setPricesActiveSubTab(pricesActiveSubTabNumber);\r\n }\r\n\r\n let newInitialFormData = {\r\n ...INITIAL_ACCOMMODATION_FORM_DATA,\r\n ...data\r\n };\r\n\r\n setInitialFormData(newInitialFormData);\r\n initializeForms(newInitialFormData);\r\n setIsLoading(false);\r\n }, [loading]);\r\n\r\n const newInitialFormData = React.useMemo(() => ({\r\n ...INITIAL_ACCOMMODATION_FORM_DATA,\r\n ...data,\r\n }), [data]);\r\n\r\n React.useEffect(() => {\r\n if (newInitialFormData?.generalForm?.color) {\r\n setColor(newInitialFormData.generalForm.color);\r\n }\r\n }, [newInitialFormData?.generalForm?.color]);\r\n\r\n const initializeForms = initialFormsData => {\r\n if (\r\n initialFormsData['generalForm-Norwegian'] &&\r\n initialFormsData['generalForm-Norwegian'].title\r\n ) {\r\n setLanguages([...languages, 'Norwegian']);\r\n }\r\n\r\n Object.keys(initialFormsData).map(field => {\r\n updateFormErrors(field, {});\r\n initializeForm(field, initialFormsData[field]);\r\n });\r\n };\r\n\r\n const destroySecondLanguageForms = () => {\r\n const forms = ['generalForm-Norwegian', 'descriptionForm-Norwegian'];\r\n destroyForm(forms);\r\n };\r\n\r\n const replacePhotosToFiles = async data => {\r\n if (!!data.addOns) {\r\n for (const addOn of data.addOns) {\r\n if (!addOn.photo || typeof addOn.photo !== 'string') continue;\r\n addOn.photo = await getFileByUrl(addOn.photo);\r\n }\r\n }\r\n\r\n if (!data.photo) {\r\n data.photo = await getFileByUrl(\r\n props['generalForm'].values.coverPhoto.image\r\n );\r\n }\r\n\r\n return data;\r\n };\r\n\r\n const onCreateActivityHandler = async () => {\r\n const activePricesForm =\r\n props[\r\n ACCOMMODATION_FORMS_ORDER[ACCOMMODATION_FORMS_NUMBERS.pricesForm][\r\n pricesActiveSubTab\r\n ]\r\n ];\r\n\r\n if (activePricesForm.syncErrors) {\r\n enqueueSnackbar(\r\n t(\r\n 'You should complete and save all previous steps before you can save'\r\n ),\r\n {\r\n variant: 'info',\r\n autoHideDuration: 5000\r\n }\r\n );\r\n return;\r\n }\r\n\r\n setIsLoading(true);\r\n\r\n let data = getPreparedDataToCreateAccommodation(\r\n props,\r\n pricesActiveSubTab,\r\n languages,\r\n isUpdate,\r\n deletedAddOns,\r\n deletedMandatoryFees,\r\n deletedRelatedActivities,\r\n deletedIntegrations,\r\n isCopy\r\n );\r\n\r\n if (isUpdate && !isCopy) {\r\n const removeOldDeactivationBookings = data.deactivationPeriods.map(\r\n ({ id }) =>\r\n id?.includes('new-one')\r\n ? Promise.resolve()\r\n : cancelAccommodationBooking({ variables: { id } })\r\n );\r\n\r\n await Promise.all(removeOldDeactivationBookings);\r\n\r\n updateAccommodation({\r\n variables: {\r\n ...data,\r\n deactivationPeriods: data.deactivationPeriods\r\n .filter(({ isCanceled }) => !isCanceled)\r\n .map(({ id, ...date }) => date)\r\n }\r\n }).then(\r\n () => {\r\n enqueueSnackbar(t('Accommodation has been successfully updated'), {\r\n variant: 'success'\r\n });\r\n history.push({\r\n pathname: '/accommodations-and-activities',\r\n state: { tabNumber: ACCOMMODATIONS_TAB }\r\n });\r\n },\r\n () => {\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n setIsLoading(false);\r\n }\r\n );\r\n return;\r\n }\r\n\r\n if (isCopy) data = await replacePhotosToFiles(data);\r\n\r\n createAccommodation({\r\n variables: {\r\n ...data,\r\n\r\n deactivationPeriods: data.deactivationPeriods\r\n .filter(({ isCanceled }) => !isCanceled)\r\n .map(({ id, ...date }) => date)\r\n }\r\n }).then(\r\n () => {\r\n enqueueSnackbar(\r\n t(\r\n `Accommodation has been successfully ${\r\n isCopy ? 'copied' : 'created'\r\n }`\r\n ),\r\n {\r\n variant: 'success'\r\n }\r\n );\r\n history.push({\r\n pathname: '/accommodations-and-activities',\r\n state: { tabNumber: ACCOMMODATIONS_TAB }\r\n });\r\n },\r\n () => {\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n setIsLoading(false);\r\n }\r\n );\r\n };\r\n\r\n const deleteLanguage = deletedItem => {\r\n confirm({\r\n title: 'Are you sure you want to delete this tab?',\r\n description: t('All related tabs in this language will also be deleted.'),\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n setIsSaveUnsavedChanges(true);\r\n\r\n const languagesCopy = [...languages];\r\n const updatedLanguages = languagesCopy.filter(\r\n item => item !== deletedItem\r\n );\r\n setSelectedLanguage(DEFAULT_LANGUAGE);\r\n setLanguages(updatedLanguages);\r\n\r\n deleteAddOnsLanguage(\r\n props,\r\n deletedItem,\r\n changeFormFieldValue,\r\n activeTab,\r\n setActiveTab,\r\n setSavedForms,\r\n savedForms,\r\n updateFormErrors,\r\n submitForm\r\n );\r\n deleteMandatoryFeesLanguage(\r\n props,\r\n deletedItem,\r\n changeFormFieldValue,\r\n activeTab,\r\n setActiveTab,\r\n setSavedForms,\r\n savedForms,\r\n updateFormErrors,\r\n submitForm\r\n );\r\n deleteFormLanguage(deletedItem);\r\n\r\n setIsSaveUnsavedChanges(false);\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const deleteFormLanguage = deletedLanguage => {\r\n const general = `generalForm-${deletedLanguage}`;\r\n const description = `descriptionForm-${deletedLanguage}`;\r\n\r\n destroyForm([general, description]);\r\n setSavedForms({\r\n ...savedForms,\r\n [general]: {},\r\n [description]: {}\r\n });\r\n };\r\n\r\n const onActiveTabChangeHandler = (event, newActiveTab) => {\r\n if (\r\n !isNextStepAvailable(\r\n props,\r\n languages,\r\n newActiveTab,\r\n savedForms,\r\n pricesActiveSubTab\r\n )\r\n ) {\r\n enqueueSnackbar(\r\n t(\r\n 'You should complete and save all previous steps before you can go to this step'\r\n ),\r\n {\r\n variant: 'info',\r\n autoHideDuration: 5000\r\n }\r\n );\r\n return false;\r\n }\r\n\r\n let formName = ACCOMMODATION_FORMS_ORDER[activeTab];\r\n\r\n if (activeTab === ACCOMMODATION_FORMS_NUMBERS.pricesForm) {\r\n formName = formName[pricesActiveSubTab];\r\n }\r\n\r\n if (\r\n isDiscardSection(activeTab, newActiveTab, pricesActiveSubTab, savedForms)\r\n ) {\r\n onDiscardChangesHandler(formName, newActiveTab, true);\r\n return;\r\n }\r\n\r\n if (\r\n isDiscardChanges(\r\n props,\r\n formName,\r\n activeTab,\r\n newActiveTab,\r\n savedForms,\r\n initialFormData,\r\n {},\r\n languages\r\n )\r\n ) {\r\n onDiscardChangesHandler(formName, newActiveTab, false);\r\n return;\r\n }\r\n\r\n setActiveTab(newActiveTab);\r\n };\r\n\r\n const onDiscardChangesHandler = (\r\n formName,\r\n newActiveTab,\r\n isDiscardSection\r\n ) => {\r\n confirm({\r\n title: 'You have unsaved changes',\r\n description: t('Are you sure you want to discard the changes?'),\r\n confirmationText: 'Save',\r\n cancellationText: 'Discard'\r\n })\r\n .then(() => {\r\n setIsSaveUnsavedChanges(true);\r\n submitForm(formName);\r\n\r\n if (!isCurrentStepAvailable(props, activeTab, pricesActiveSubTab)) {\r\n setIsSaveUnsavedChanges(false);\r\n return;\r\n }\r\n\r\n if (\r\n isNextStepAvailable(\r\n props,\r\n languages,\r\n newActiveTab,\r\n savedForms,\r\n pricesActiveSubTab\r\n )\r\n ) {\r\n setActiveTab(newActiveTab);\r\n } else {\r\n enqueueSnackbar(\r\n t(\r\n 'You should complete and save all previous steps before you can go to this step'\r\n ),\r\n {\r\n variant: 'info',\r\n autoHideDuration: 5000\r\n }\r\n );\r\n }\r\n\r\n setIsSaveUnsavedChanges(false);\r\n })\r\n .catch(() => {\r\n if (isDiscardSection) {\r\n discardSection(\r\n activeTab,\r\n newActiveTab,\r\n setPricesActiveSubTab,\r\n setActiveTab,\r\n initializeForm,\r\n savedForms,\r\n initialFormData\r\n );\r\n return;\r\n }\r\n discardChanges(\r\n languages,\r\n formName,\r\n initializeForm,\r\n savedForms,\r\n {},\r\n initialFormData,\r\n newActiveTab,\r\n activeTab,\r\n setActiveTab\r\n );\r\n });\r\n };\r\n\r\n const onChangeActivityTypeHandler = savedFormsCopy => {\r\n const pricesTabIndex =\r\n props['generalForm'].values.activityType === 'Open' ? 1 : 0;\r\n setPricesActiveSubTab(0);\r\n setSavedForms({\r\n ...savedFormsCopy,\r\n pricesTab:\r\n ACCOMMODATION_FORMS_ORDER[ACCOMMODATION_FORMS_NUMBERS.pricesForm][\r\n pricesTabIndex\r\n ]\r\n });\r\n };\r\n\r\n const confirmActivityType = (savedFormsCopy, secondFormName) => {\r\n confirm({\r\n title: 'Are you sure you want to change the activity type?',\r\n description:\r\n 'Note, that previously filled in data on the Prices may be reset.',\r\n confirmationText: 'Change',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n onChangeActivityTypeHandler(savedFormsCopy);\r\n setActiveTab(ACCOMMODATION_FORMS_NUMBERS[secondFormName]);\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const showSnackbarToFillAllField = () => {\r\n enqueueSnackbar(\r\n t(\r\n 'Please fill in all the required fields correctly on the current step for all languages'\r\n ),\r\n {\r\n variant: 'warning'\r\n }\r\n );\r\n };\r\n\r\n const [submitButton, setSubmitButton] = React.useState('');\r\n\r\n const onGeneralAndDescFormSubmitHandler = (\r\n languagesLength,\r\n secondLanguage,\r\n currentFormName,\r\n secondFormName\r\n ) => {\r\n const savedFormsCopy = onGeneralAndDescFormsHandler(\r\n props,\r\n initialFormData,\r\n savedForms,\r\n languagesLength,\r\n secondLanguage,\r\n secondFormName,\r\n currentFormName,\r\n isVisitedPrices,\r\n isSaveUnsavedChanges,\r\n onChangeActivityTypeHandler,\r\n showSnackbarToFillAllField,\r\n confirmActivityType\r\n );\r\n\r\n if (!savedFormsCopy) {\r\n return;\r\n }\r\n\r\n setSavedForms({\r\n ...savedFormsCopy\r\n });\r\n\r\n if (submitButton === 'save' && !isSaveUnsavedChanges) {\r\n onCreateActivityHandler();\r\n }\r\n if (submitButton === 'next' && !isSaveUnsavedChanges) {\r\n setActiveTab(ACCOMMODATION_FORMS_NUMBERS[secondFormName]);\r\n }\r\n };\r\n\r\n const getPropsForTabsWithLanguages = () => {\r\n return {\r\n selectedLanguage: selectedLanguage,\r\n languages: languages,\r\n addLanguage: newItem => {\r\n setLanguages([...languages, newItem]);\r\n addAddOnsLanguage(\r\n props,\r\n newItem,\r\n changeFormFieldValue,\r\n updateFormErrors,\r\n setSavedForms,\r\n savedForms\r\n );\r\n },\r\n deleteLanguage: deleteLanguage,\r\n selectLanguage: item => setSelectedLanguage(item)\r\n };\r\n };\r\n\r\n const getMandatoryFeesPropsForTabsWithLanguages = () => {\r\n return {\r\n selectedLanguage: selectedLanguage,\r\n languages: languages,\r\n addLanguage: newItem => {\r\n setLanguages([...languages, newItem]);\r\n addMandatoryFeesLanguage(\r\n props,\r\n newItem,\r\n changeFormFieldValue,\r\n updateFormErrors,\r\n setSavedForms,\r\n savedForms\r\n );\r\n },\r\n deleteLanguage: deleteLanguage,\r\n selectLanguage: item => setSelectedLanguage(item)\r\n };\r\n };\r\n\r\n const getGeneralCreateTab = () => {\r\n const languagesLength = languages.length;\r\n const secondLanguage = languages[languagesLength - 1];\r\n\r\n const generalFormProps = {\r\n onSubmit: () =>\r\n onGeneralAndDescFormSubmitHandler(\r\n languagesLength,\r\n secondLanguage,\r\n 'generalForm',\r\n 'descriptionForm'\r\n ),\r\n ...getPropsForTabsWithLanguages()\r\n };\r\n\r\n return (\r\n <div>\r\n <div hidden={selectedLanguage !== DEFAULT_LANGUAGE}>\r\n <AccommodationGeneralCreate\r\n {...generalFormProps}\r\n initialValues={INITIAL_ACCOMMODATION_FORM_DATA.generalForm}\r\n isUpdate={isUpdate}\r\n color={color}\r\n colorHandler={setColor}\r\n setSubmitButton={setSubmitButton}\r\n bookDates={bookDates}\r\n />\r\n </div>\r\n {languagesLength > 1 && (\r\n <div hidden={selectedLanguage === DEFAULT_LANGUAGE}>\r\n <AccommodationGeneralCreateSecondLanguage\r\n {...generalFormProps}\r\n form={`generalForm-${secondLanguage}`}\r\n isUpdate={isUpdate}\r\n setSubmitButton={setSubmitButton}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const getDescriptionCreateTab = () => {\r\n const languagesLength = languages.length;\r\n const secondLanguage = languages[languagesLength - 1];\r\n\r\n const descriptionFormProps = {\r\n onSubmit: () =>\r\n onGeneralAndDescFormSubmitHandler(\r\n languagesLength,\r\n secondLanguage,\r\n 'descriptionForm',\r\n 'pricesForm'\r\n ),\r\n ...getPropsForTabsWithLanguages()\r\n };\r\n\r\n return (\r\n <div>\r\n <div hidden={selectedLanguage !== DEFAULT_LANGUAGE}>\r\n <AccommodationDescriptionCreate\r\n {...descriptionFormProps}\r\n isUpdate={isUpdate}\r\n setSubmitButton={setSubmitButton}\r\n />\r\n </div>\r\n {languagesLength > 1 && (\r\n <div hidden={selectedLanguage === DEFAULT_LANGUAGE}>\r\n <AccommodationDescriptionCreate\r\n {...descriptionFormProps}\r\n isUpdate={isUpdate}\r\n form={`descriptionForm-${secondLanguage}`}\r\n setSubmitButton={setSubmitButton}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const tabs = [\r\n {\r\n name: 'General',\r\n formName: 'generalForm',\r\n component: getGeneralCreateTab()\r\n },\r\n {\r\n name: 'Description',\r\n formName: 'descriptionForm',\r\n component: getDescriptionCreateTab()\r\n },\r\n {\r\n name: 'Prices',\r\n formName: 'pricesForm',\r\n component: (\r\n <AccommodationPricesCreate\r\n onSubmit={(values, formName) => {\r\n setSavedForms({\r\n ...savedForms,\r\n [formName]: { ...values },\r\n pricesTab: formName\r\n });\r\n if (submitButton === 'save' && !isSaveUnsavedChanges) {\r\n onCreateActivityHandler();\r\n }\r\n if (submitButton === 'next' && !isSaveUnsavedChanges) {\r\n setActiveTab(ACCOMMODATION_FORMS_NUMBERS.addOnsForm);\r\n }\r\n }}\r\n selectedTabIndex={pricesActiveSubTab}\r\n isUpdate={isUpdate}\r\n setSubmitButton={setSubmitButton}\r\n />\r\n ),\r\n subTabs: [\r\n {\r\n title: 'Fixed prices',\r\n instruction: 'One price for whole accommodation per day'\r\n },\r\n {\r\n title: 'Price per person',\r\n instruction: 'Prices for multiple categories'\r\n },\r\n {\r\n title: 'Daily prices',\r\n instruction: 'Prices per each day'\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Add-ons',\r\n formName: 'addOnsForm',\r\n component: (\r\n <AddOns\r\n {...getPropsForTabsWithLanguages()}\r\n onSubmit={values => {\r\n setSavedForms({ ...savedForms, addOnsForm: { ...values } });\r\n if (submitButton === 'save' && !isSaveUnsavedChanges) {\r\n onCreateActivityHandler();\r\n }\r\n if (submitButton === 'next' && !isSaveUnsavedChanges) {\r\n setActiveTab(ACCOMMODATION_FORMS_NUMBERS.mandatoryFeesForm);\r\n }\r\n }}\r\n isUpdate={isUpdate}\r\n setSubmitButton={setSubmitButton}\r\n />\r\n )\r\n },\r\n {\r\n name: 'Mandatory Fee',\r\n formName: 'mandatoryFeesForm',\r\n component:(\r\n <MandatoryFees\r\n {...getMandatoryFeesPropsForTabsWithLanguages()}\r\n onSubmit={values => {\r\n setSavedForms({ ...savedForms, mandatoryFeesForm: { ...values } });\r\n if (submitButton === 'save' && !isSaveUnsavedChanges) {\r\n onCreateActivityHandler();\r\n }\r\n if (submitButton === 'next' && !isSaveUnsavedChanges) {\r\n setActiveTab(ACCOMMODATION_FORMS_NUMBERS.relatedActivitiesForm);\r\n }\r\n }}\r\n setSubmitButton={setSubmitButton}\r\n isUpdate={isUpdate}\r\n />\r\n ),\r\n \r\n },\r\n {\r\n name: 'Related Activities',\r\n formName: 'relatedActivitiesForm',\r\n component: (\r\n <RelatedActivities\r\n onSubmit={values => {\r\n setSavedForms({\r\n ...savedForms,\r\n relatedActivitiesForm: { ...values }\r\n });\r\n if (submitButton === 'save' && !isSaveUnsavedChanges) {\r\n onCreateActivityHandler();\r\n }\r\n if (submitButton === 'next' && !isSaveUnsavedChanges) {\r\n setActiveTab(ACCOMMODATION_FORMS_NUMBERS.integrationForm);\r\n }\r\n }}\r\n isUpdate={isUpdate}\r\n setSubmitButton={setSubmitButton}\r\n />\r\n )\r\n },\r\n {\r\n name: 'Integration',\r\n formName: 'integrationForm',\r\n component: (\r\n <Integration\r\n isAccommodation={true}\r\n onSubmit={values => {\r\n setSavedForms({\r\n ...savedForms,\r\n integrationForm: { ...values }\r\n });\r\n if (submitButton === 'next' && !isSaveUnsavedChanges)\r\n onCreateActivityHandler();\r\n }}\r\n setSubmitButton={setSubmitButton}\r\n />\r\n )\r\n }\r\n ];\r\n\r\n return (\r\n <>\r\n <AppHeader />\r\n <CircularLoader\r\n isLoading={isLoading}\r\n loaderClassName={classes.loaderClassName}\r\n />\r\n <div className={classes.root}>\r\n <TabsMenu\r\n activeTab={activeTab}\r\n title={\r\n isUpdate && !isCopy\r\n ? 'Edit Accommodation'\r\n : isCopy\r\n ? 'Copy Accommodation'\r\n : 'Create new Accommodation'\r\n }\r\n isDoneTab={tab => {\r\n return isAccommodationFormDone(\r\n tab.formName,\r\n languages,\r\n props,\r\n savedForms,\r\n activeTab,\r\n scheduleActiveSubTab,\r\n pricesActiveSubTab\r\n );\r\n }}\r\n tabs={tabs}\r\n change={onActiveTabChangeHandler}\r\n />\r\n\r\n <RadioBtnTabsMenu\r\n activeTab={activeTab}\r\n activeSubTab={pricesActiveSubTab}\r\n tabs={tabs}\r\n change={e => setPricesActiveSubTab(parseInt(e.target.value))}\r\n />\r\n\r\n <div className={classes.content}>\r\n <div className={classes.contentBox}>\r\n <TabsPanel tabs={tabs} activeTab={activeTab} />\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n ...state.form,\r\n businessOwner: state.businessOwner,\r\n deletedAddOns: state.activityAndAccommodation.deletedAddOns,\r\n deletedMandatoryFees: state.activityAndAccommodation.deletedMandatoryFees,\r\n deletedRelatedActivities:\r\n state.activityAndAccommodation.deletedRelatedActivities,\r\n deletedIntegrations: state.activityAndAccommodation.deletedIntegrations\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n destroyForm: forms => {\r\n dispatch(destroy(...forms));\r\n },\r\n submitForm: form => {\r\n dispatch(submit(form));\r\n },\r\n changeFormFieldValue: (form, field, value) => {\r\n dispatch(change(form, field, value));\r\n },\r\n updateFormErrors: (form, fields) => {\r\n dispatch(updateSyncErrors(form, fields));\r\n },\r\n initializeForm: (form, data) => {\r\n dispatch(initialize(form, data));\r\n },\r\n clearDeletedFields: () => {\r\n dispatch(clearDeletedFields());\r\n }\r\n});\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(CreateAccommodation);\r\n","import { ACTIVITY_FORMS_NUMBERS } from 'pages/create-activity/constants';\r\n\r\nexport const addMandatoryFeesLanguage = (\r\n forms,\r\n newLanguage,\r\n changeFormFieldValue,\r\n updateFormErrors,\r\n setSavedForms,\r\n savedForms\r\n) => {\r\n let mandatoryFees = [...forms.mandatoryFeesForm.values.mandatoryFees];\r\n mandatoryFees = mandatoryFees.map(item => {\r\n if (!item[newLanguage]) {\r\n return {\r\n ...item,\r\n [newLanguage]: {\r\n title: '',\r\n description: '',\r\n USD: '0',\r\n EUR: '0',\r\n NOK: '0'\r\n }\r\n };\r\n }\r\n return item;\r\n });\r\n changeFormFieldValue('mandatoryFeesForm', 'mandatoryFees', mandatoryFees);\r\n if (forms['mandatoryFeesForm'].values.mandatoryFees.length) {\r\n updateFormErrors('mandatoryFeesForm', {\r\n init: 'Error'\r\n });\r\n setSavedForms({\r\n ...savedForms,\r\n mandatoryFeesForm: {\r\n mandatoryFees: mandatoryFees\r\n }\r\n });\r\n }\r\n};\r\n\r\nexport const deleteMandatoryFeesLanguage = (\r\n forms,\r\n deletedLanguage,\r\n changeFormFieldValue,\r\n activeTab,\r\n setActiveTab,\r\n setSavedForms,\r\n savedForms,\r\n updateFormErrors,\r\n submitForm\r\n) => {\r\n let mandatoryFees = [...forms.mandatoryFees.values.mandatoryFees];\r\n mandatoryFees = mandatoryFees.map(item => {\r\n return {\r\n ...item,\r\n [deletedLanguage]: null\r\n };\r\n });\r\n changeFormFieldValue('mandatoryFees', 'mandatoryFees', mandatoryFees);\r\n if (forms['mandatoryFees'].values.mandatoryFees.length) {\r\n if (activeTab === ACTIVITY_FORMS_NUMBERS.mandatoryFeesForm) {\r\n setActiveTab(activeTab);\r\n }\r\n setSavedForms({\r\n ...savedForms,\r\n mandatoryFeesForm: {\r\n mandatoryFees: mandatoryFees\r\n }\r\n });\r\n submitForm('mandatoryFeesForm');\r\n }\r\n};\r\n","import {\r\n ACCOMMODATION_FORMS_NUMBERS,\r\n ACCOMMODATION_FORMS_ORDER,\r\n ACCOMMODATION_PRICES_FORMS_NUMBERS\r\n} from 'pages/create-accommodation/constants';\r\n\r\nexport const isDiscardSection = (\r\n activeTab,\r\n newActiveTab,\r\n pricesActiveSubTab,\r\n savedForms\r\n) => {\r\n if (activeTab === newActiveTab) return false;\r\n\r\n if (\r\n activeTab === ACCOMMODATION_FORMS_NUMBERS.pricesForm &&\r\n savedForms.pricesTab &&\r\n savedForms.pricesTab !==\r\n ACCOMMODATION_FORMS_ORDER[activeTab][pricesActiveSubTab]\r\n ) {\r\n return true;\r\n }\r\n};\r\n\r\nexport const discardSection = (\r\n activeTab,\r\n newActiveTab,\r\n setPricesActiveSubTab,\r\n setActiveTab,\r\n initializeForm,\r\n savedForms,\r\n initialFormData\r\n) => {\r\n if (activeTab === ACCOMMODATION_FORMS_NUMBERS.pricesForm) {\r\n const formName = savedForms.pricesTab;\r\n setPricesActiveSubTab(ACCOMMODATION_PRICES_FORMS_NUMBERS[formName]);\r\n\r\n initializeForm(\r\n formName,\r\n savedForms[formName] || initialFormData[formName] || {}\r\n );\r\n }\r\n\r\n setActiveTab(newActiveTab);\r\n};\r\n","export const onGeneralAndDescFormsHandler = (\r\n forms,\r\n initialFormData,\r\n savedForms,\r\n languagesLength,\r\n secondLanguage,\r\n secondFormName,\r\n currentFormName,\r\n isVisitedPrices,\r\n isSaveUnsavedChanges,\r\n onChangeActivityTypeHandler,\r\n showSnackbarToFillAllField,\r\n confirmActivityType\r\n) => {\r\n const _forms = [currentFormName];\r\n let savedFormsCopy = { ...savedForms };\r\n let isSetPriceActiveSubTab = false;\r\n\r\n if (languagesLength > 1) _forms.push(`${currentFormName}-${secondLanguage}`);\r\n\r\n for (let i in _forms) {\r\n if (!_forms.hasOwnProperty(i)) continue;\r\n\r\n const formName = _forms[i];\r\n const form = { ...forms[formName] };\r\n\r\n if (!form || !form.values || form.syncErrors) {\r\n showSnackbarToFillAllField();\r\n return false;\r\n }\r\n\r\n if (formName === 'generalForm') {\r\n if (savedForms[formName]) {\r\n if (savedForms[formName].activityType !== form.values.activityType) {\r\n isSetPriceActiveSubTab = true;\r\n }\r\n } else if (\r\n initialFormData[formName].activityType !== form.values.activityType\r\n ) {\r\n isSetPriceActiveSubTab = true;\r\n }\r\n }\r\n\r\n savedFormsCopy = {\r\n ...savedFormsCopy,\r\n [formName]: { ...form.values }\r\n };\r\n }\r\n\r\n if (isSetPriceActiveSubTab && isVisitedPrices && isSaveUnsavedChanges) {\r\n onChangeActivityTypeHandler(savedFormsCopy, secondFormName);\r\n return false;\r\n }\r\n\r\n if (isSetPriceActiveSubTab && isVisitedPrices && !isSaveUnsavedChanges) {\r\n confirmActivityType(savedFormsCopy, secondFormName);\r\n return false;\r\n }\r\n\r\n return savedFormsCopy;\r\n};\r\n","import {\r\n ACCOMMODATION_FORMS_NUMBERS,\r\n ACCOMMODATION_FORMS_ORDER\r\n} from 'pages/create-accommodation/constants';\r\n\r\nexport const isAccommodationFormDone = (\r\n formName,\r\n languages,\r\n forms,\r\n savedForms,\r\n activeTab,\r\n scheduleActiveSubTab,\r\n pricesActiveSubTab\r\n) => {\r\n if (formName === 'generalForm' || formName === 'descriptionForm') {\r\n if (languages.length > 1) {\r\n const formNameSecondLanguage = `${formName}-Norwegian`;\r\n if (\r\n !forms[formNameSecondLanguage] ||\r\n forms[formNameSecondLanguage].syncErrors ||\r\n !savedForms[formNameSecondLanguage] ||\r\n !Object.keys(savedForms[formNameSecondLanguage]).length\r\n ) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (formName === 'pricesForm') {\r\n if (!forms['generalForm']) return false;\r\n if (!savedForms.pricesTab) return false;\r\n const pricesFormName =\r\n ACCOMMODATION_FORMS_ORDER[ACCOMMODATION_FORMS_NUMBERS.pricesForm][\r\n pricesActiveSubTab\r\n ];\r\n if (\r\n !forms[pricesFormName] ||\r\n forms[pricesFormName].syncErrors ||\r\n !savedForms[pricesFormName]\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n if (!forms[formName] || forms[formName].syncErrors || !savedForms[formName]) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n","import React from 'react';\r\nimport icalendar from 'icalendar';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { LOCALES_OBJ } from 'constants/base';\r\n\r\nconst ScheduleDates = ({ item }) => {\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n if (item) {\r\n let startDate = '';\r\n let endDate = '';\r\n\r\n if (item.schedule) {\r\n const scheduleProperties = icalendar.parse_calendar(item.schedule)\r\n .properties;\r\n startDate = scheduleProperties.START_DATE[0].value;\r\n endDate = scheduleProperties.END_DATE[0].value;\r\n } else {\r\n startDate = item.fromDate;\r\n endDate = item.toDate;\r\n }\r\n\r\n const startDateFormatted = moment(startDate, 'YYYY-MM-DD')\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM D, YYYY');\r\n const endDateFormatted = endDate\r\n ? moment(endDate, 'YYYY-MM-DD')\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM D, YYYY')\r\n : endDate;\r\n\r\n if (!endDate || endDate === 'None')\r\n return (\r\n <div style={{ display: 'flex', alignItems: 'center' }}>\r\n {startDateFormatted} <span style={{ marginLeft: '32px' }}>—</span>\r\n </div>\r\n );\r\n\r\n return `${startDateFormatted} - ${endDateFormatted}`;\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport default ScheduleDates;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme =>({\r\n container: {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n overflow: 'hidden',\r\n },\r\n table: {\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]:{\r\n overflowX: 'auto',\r\n behavior: 'smooth' ,\r\n display: 'block',\r\n width: '100%',\r\n }\r\n },\r\n heading: {\r\n color: '#071B27',\r\n fontWeight: 'bold',\r\n textTransform: 'uppercase'\r\n },\r\n imageWrapper: {\r\n width: 60,\r\n height: 36\r\n },\r\n image: {\r\n width: '100%',\r\n height: '100%',\r\n border: '1px solid rgba(0, 0, 0, 0.22)',\r\n boxSizing: 'border-box',\r\n borderRadius: 3\r\n },\r\n tableCell: {\r\n fontSize: '13px',\r\n border: 'none',\r\n padding: '5px 0',\r\n color: '#071B27'\r\n },\r\n headTableCell: {\r\n paddingBottom: '15px',\r\n paddingTop: 0\r\n },\r\n imgCell: {\r\n width: 60,\r\n paddingLeft: 10\r\n },\r\n nameCell: {\r\n width: 237,\r\n paddingLeft: 24\r\n },\r\n availabilityCell: {\r\n width: 153,\r\n paddingLeft: 15,\r\n color: '#99ADBD'\r\n },\r\n scheduleCell: {\r\n width: 237,\r\n paddingLeft: 15\r\n },\r\n productCodeCell: {\r\n width: 153,\r\n paddingLeft: 15\r\n },\r\n guestsCell: {\r\n width: 118,\r\n paddingLeft: 15\r\n },\r\n iconButton: {\r\n padding: '0px 0px 0px 24px',\r\n '&:hover': {\r\n backgroundColor: 'transparent'\r\n }\r\n },\r\n tableHead: {\r\n padding: 18\r\n },\r\n tableRow: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#E2F5F8'\r\n }\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useHistory } from 'react-router-dom';\r\nimport classNames from 'classnames';\r\nimport { useSnackbar } from 'notistack';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\n\r\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\r\n\r\nimport { Pagination } from 'components';\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport { ACCOMMODATIONS } from 'graphql/queries/accommodations';\r\nimport { DELETE_ACCOMMODATION } from 'graphql/mutations/accommodation';\r\n\r\nimport { TrashIcon, EditIcon } from 'components/icons';\r\n\r\nimport ScheduleDates from 'pages/accommodations-and-activities/components/schedule-dates/ScheduleDates';\r\n\r\nimport {\r\n Typography,\r\n IconButton,\r\n TableRow,\r\n TableHead,\r\n TableContainer,\r\n TableCell,\r\n TableBody,\r\n Table\r\n} from '@material-ui/core';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst headingsConfig = classes => {\r\n return [\r\n { label: 'Photo', cellClassName: classes.imgCell, align: 'left' },\r\n {\r\n label: 'Accommodation name',\r\n cellClassName: classes.nameCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Status',\r\n cellClassName: classes.availabilityCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Availability',\r\n cellClassName: classes.scheduleCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Product code',\r\n cellClassName: classes.productCodeCell,\r\n align: 'left'\r\n },\r\n { label: 'Guests', cellClassName: classes.guestsCell, align: 'left' },\r\n { label: 'Actions', align: 'right' }\r\n ];\r\n};\r\n\r\nfunction AccommodationsList({ deleteCallback, ownerId }) {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const history = useHistory();\r\n const confirm = React.useContext(ConfirmContext);\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const [page, setPage] = React.useState(0);\r\n\r\n const { data, refetch } = useQuery(ACCOMMODATIONS, {\r\n variables: {\r\n businessOwnerId: ownerId,\r\n page: page\r\n }\r\n });\r\n const [deleteAccommodation] = useMutation(DELETE_ACCOMMODATION);\r\n\r\n React.useEffect(() => {\r\n refetch();\r\n }, []);\r\n\r\n const onDeleteHandler = item => {\r\n confirm({\r\n title: 'Delete Accommodation?',\r\n description: `${item.title} • ${item.productCode}`,\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() =>\r\n deleteAccommodation({ variables: { id: item.id } }).then(() => {\r\n deleteCallback();\r\n enqueueSnackbar(t('Accommodation was successfully removed!'), {\r\n variant: 'success'\r\n });\r\n if (data.accommodations.length <= 1 && page) {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n } else {\r\n refetch({ page });\r\n }\r\n })\r\n )\r\n .catch(() => {});\r\n };\r\n\r\n const onPageChangeHandler = (e, page) => {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n };\r\n\r\n return (\r\n <TableContainer component=\"div\" classes={{ root: classes.container }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead className={classes.tableHead}>\r\n <TableRow>\r\n {headingsConfig(classes).map(heading => (\r\n <TableCell\r\n key={heading.label}\r\n align={heading.align}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.headTableCell,\r\n heading.cellClassName\r\n )}\r\n >\r\n <Typography variant=\"h3\" className={classes.heading}>\r\n {t(heading.label)}\r\n </Typography>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n\r\n <TableBody>\r\n {data &&\r\n data.accommodations &&\r\n data.accommodations.map(accommodation => (\r\n <TableRow\r\n key={accommodation.id}\r\n classes={{ root: classes.tableRow }}\r\n onClick={() =>\r\n history.push(`/accommodations/${accommodation.id}`)\r\n }\r\n >\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.imgCell)}\r\n component=\"th\"\r\n scope=\"row\"\r\n >\r\n <div className={classes.imageWrapper}>\r\n {accommodation.photo && (\r\n <img\r\n src={accommodation.photo}\r\n alt=\"\"\r\n className={classes.image}\r\n />\r\n )}\r\n </div>\r\n </TableCell>\r\n\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.nameCell)}\r\n align=\"left\"\r\n >\r\n {accommodation.title}\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.availabilityCell\r\n )}\r\n align=\"left\"\r\n >\r\n {accommodation.availability ? (\r\n <Typography color=\"primary\">{t('Active')}</Typography>\r\n ) : (\r\n <Typography color=\"inherit\">{t('Not active')}</Typography>\r\n )}\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.scheduleCell\r\n )}\r\n align=\"left\"\r\n >\r\n <ScheduleDates item={accommodation} />\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.productCodeCell\r\n )}\r\n align=\"left\"\r\n >\r\n {accommodation.productCode}\r\n </TableCell>\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.guestsCell)}\r\n align=\"left\"\r\n >\r\n {accommodation.guestsNumber}\r\n </TableCell>\r\n <TableCell className={classes.tableCell} align=\"right\">\r\n <div style={{ display: 'inline-flex', paddingRight: '10px' }}>\r\n <IconButton\r\n onClick={e => {\r\n e.stopPropagation();\r\n history.push(\r\n `/accommodations/${accommodation.id}/copy`\r\n );\r\n }}\r\n className={classes.iconButton}\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n aria-label=\"edit\"\r\n >\r\n <FileCopyIcon\r\n style={{\r\n color: '#59758B',\r\n width: '18px',\r\n height: '18px'\r\n }}\r\n />\r\n </IconButton>\r\n <IconButton\r\n onClick={e => {\r\n e.stopPropagation();\r\n history.push(`/accommodations/${accommodation.id}`);\r\n }}\r\n className={classes.iconButton}\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n aria-label=\"edit\"\r\n >\r\n <EditIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={e => {\r\n e.stopPropagation();\r\n onDeleteHandler(accommodation);\r\n }}\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n className={classes.iconButton}\r\n aria-label=\"delete\"\r\n >\r\n <TrashIcon />\r\n </IconButton>\r\n </div>\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n\r\n {data && (\r\n <Pagination\r\n page={page + 1}\r\n count={data.numberOfAccommodationsPages}\r\n onChange={onPageChangeHandler}\r\n amount={data.accommodations.length}\r\n total={data.accommodationsActivitiesOverview.accommodations.total}\r\n />\r\n )}\r\n </TableContainer>\r\n );\r\n}\r\n\r\nexport default AccommodationsList;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme=>({\r\n container: {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n overflow: 'hidden'\r\n },\r\n table: {\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]:{\r\n overflowX: 'auto',\r\n behavior: 'smooth' ,\r\n display: 'block',\r\n width: '100%',\r\n }\r\n },\r\n heading: {\r\n color: '#071B27',\r\n fontWeight: 'bold',\r\n textTransform: 'uppercase'\r\n },\r\n imageWrapper: {\r\n width: 60,\r\n height: 36\r\n },\r\n image: {\r\n width: '100%',\r\n height: '100%',\r\n border: '1px solid rgba(0, 0, 0, 0.22)',\r\n boxSizing: 'border-box',\r\n borderRadius: 3\r\n },\r\n tableCell: {\r\n fontSize: '13px',\r\n border: 'none',\r\n padding: '5px 0',\r\n color: '#071B27'\r\n },\r\n headTableCell: {\r\n paddingBottom: '15px',\r\n paddingTop: 0\r\n },\r\n imgCell: {\r\n width: 60,\r\n paddingLeft: 10\r\n },\r\n nameCell: {\r\n width: 240,\r\n paddingLeft: 30\r\n },\r\n availabilityCell: {\r\n width: 80,\r\n paddingLeft: 30,\r\n color: '#99ADBD'\r\n },\r\n scheduleCell: {\r\n width: 170,\r\n paddingLeft: 30\r\n },\r\n productCodeCell: {\r\n width: 100,\r\n paddingLeft: 30\r\n },\r\n startingPointCell: {\r\n width: 240,\r\n paddingLeft: 30\r\n },\r\n iconButton: {\r\n padding: '0px 0px 0px 24px',\r\n '&:hover': {\r\n backgroundColor: 'transparent'\r\n }\r\n },\r\n tableHead: {\r\n padding: 18\r\n },\r\n tableRow: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#E2F5F8'\r\n }\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\nimport { useSnackbar } from 'notistack';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\r\n\r\nimport { Pagination } from 'components';\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport { ACTIVITIES } from 'graphql/queries/activities';\r\nimport { DELETE_ACTIVITY } from 'graphql/mutations/activity';\r\n\r\nimport ScheduleDates from '../schedule-dates/ScheduleDates';\r\n\r\nimport { TrashIcon, EditIcon } from 'components/icons';\r\n\r\nimport {\r\n Typography,\r\n IconButton,\r\n TableRow,\r\n TableHead,\r\n TableContainer,\r\n TableCell,\r\n TableBody,\r\n Table\r\n} from '@material-ui/core';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst headingsConfig = classes => {\r\n return [\r\n { label: 'Photo', align: 'left', cellClassName: classes.imgCell },\r\n {\r\n label: 'Activity name',\r\n cellClassName: classes.nameCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Status',\r\n cellClassName: classes.availabilityCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Availability',\r\n cellClassName: classes.scheduleCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Product code',\r\n cellClassName: classes.productCodeCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Starting point',\r\n cellClassName: classes.startingPointCell,\r\n align: 'left'\r\n },\r\n { label: 'Actions', align: 'right' }\r\n ];\r\n};\r\n\r\nfunction ActivitiesList({ deleteCallback, ownerId }) {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const history = useHistory();\r\n const confirm = React.useContext(ConfirmContext);\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const [page, setPage] = React.useState(0);\r\n\r\n const { data, refetch } = useQuery(ACTIVITIES, {\r\n variables: {\r\n businessOwnerId: ownerId,\r\n page: page\r\n }\r\n });\r\n const [deleteAccommodation] = useMutation(DELETE_ACTIVITY);\r\n\r\n React.useEffect(() => {\r\n refetch();\r\n }, []);\r\n\r\n const onDeleteHandler = item => {\r\n confirm({\r\n title: 'Delete Activity?',\r\n description: `${item.title} • ${item.productCode}`,\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() =>\r\n deleteAccommodation({ variables: { id: item.id } }).then(() => {\r\n deleteCallback();\r\n enqueueSnackbar(t('Activity was successfully removed!'), {\r\n variant: 'success'\r\n });\r\n if (data.activities.length <= 1 && page) {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n } else {\r\n refetch({ page });\r\n }\r\n })\r\n )\r\n .catch(() => {});\r\n };\r\n\r\n const onPageChangeHandler = (e, page) => {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n };\r\n\r\n return (\r\n <TableContainer component=\"div\" classes={{ root: classes.container }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead className={classes.tableHead}>\r\n <TableRow>\r\n {headingsConfig(classes).map(heading => (\r\n <TableCell\r\n key={heading.label}\r\n align={heading.align}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.headTableCell,\r\n heading.cellClassName\r\n )}\r\n >\r\n <Typography variant=\"h3\" className={classes.heading}>\r\n {t(heading.label)}\r\n </Typography>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {data &&\r\n data.activities &&\r\n data.activities.map(activity => (\r\n <TableRow\r\n key={activity.id}\r\n classes={{ root: classes.tableRow }}\r\n onClick={() => history.push(`/activities/${activity.id}`)}\r\n >\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.imgCell)}\r\n component=\"th\"\r\n scope=\"row\"\r\n >\r\n <div className={classes.imageWrapper}>\r\n {activity.photo && (\r\n <img\r\n src={activity.photo}\r\n alt=\"\"\r\n className={classes.image}\r\n />\r\n )}\r\n </div>\r\n </TableCell>\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.nameCell)}\r\n align=\"left\"\r\n >\r\n {activity.title}\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.availabilityCell\r\n )}\r\n align=\"left\"\r\n >\r\n {activity.availability ? (\r\n <Typography color=\"primary\">{t('Active')}</Typography>\r\n ) : (\r\n <Typography color=\"inherit\">{t('Not active')}</Typography>\r\n )}\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.scheduleCell\r\n )}\r\n align=\"left\"\r\n >\r\n <ScheduleDates item={activity} />\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.productCodeCell\r\n )}\r\n align=\"left\"\r\n >\r\n {activity.productCode}\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.startingPointCell\r\n )}\r\n align=\"left\"\r\n >\r\n {activity.startingPoint}\r\n </TableCell>\r\n <TableCell className={classes.tableCell} align=\"right\">\r\n <div style={{ display: 'inline-flex', paddingRight: '10px' }}>\r\n <IconButton\r\n onClick={e => {\r\n e.stopPropagation();\r\n history.push(`/activities/${activity.id}/copy`);\r\n }}\r\n className={classes.iconButton}\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n aria-label=\"edit\"\r\n >\r\n <FileCopyIcon\r\n style={{\r\n color: '#59758B',\r\n width: '18px',\r\n height: '18px'\r\n }}\r\n />\r\n </IconButton>\r\n <IconButton\r\n onClick={e => {\r\n e.stopPropagation();\r\n history.push(`/activities/${activity.id}`);\r\n }}\r\n className={classes.iconButton}\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n aria-label=\"edit\"\r\n >\r\n <EditIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={e => {\r\n e.stopPropagation();\r\n onDeleteHandler(activity);\r\n }}\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n className={classes.iconButton}\r\n aria-label=\"delete\"\r\n >\r\n <TrashIcon />\r\n </IconButton>\r\n </div>\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n\r\n {data && (\r\n <Pagination\r\n page={page + 1}\r\n count={data.numberOfActivitiesPages}\r\n onChange={onPageChangeHandler}\r\n amount={data.activities.length}\r\n total={data.accommodationsActivitiesOverview.activities.total}\r\n />\r\n )}\r\n </TableContainer>\r\n );\r\n}\r\n\r\nexport default ActivitiesList;\r\n","\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { BorderTop } from '@material-ui/icons';\r\nimport styled from 'styled-components';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n\r\n },\r\n },\r\n\r\n bookingsTotalTitle: {\r\n letterSpacing: '0.035em',\r\n fontWeight: 'bold',\r\n lineHeight: '14px',\r\n marginBottom: theme.spacing(1),\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '12px',\r\n },\r\n },\r\n\r\n tabContentWrapper: {\r\n padding: '24px 20px 22px 20px',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '40px 10px 14px 10px',\r\n borderTop: '1px solid #E5E5E5',\r\n \r\n },\r\n },\r\n}));\r\n\r\nexport const TabsRoot = styled.div`\r\n flex: 1 1 auto;\r\n display: flex;\r\n @media (max-width: 600px) {\r\n flex-direction: column;\r\n \r\n }\r\n`;\r\n\r\nexport default useStyles;\r\n\r\n","export const EntityTabs = {\r\n Accommodation: 0,\r\n Activities: 1\r\n};\r\n","import { EntityTabs } from '../../../constants/entity-tabs';\r\n\r\nexport const CreateEntityRoutes = {\r\n [EntityTabs.Accommodation]: '/accommodations/create',\r\n [EntityTabs.Activities]: '/activities/create'\r\n};\r\n\r\nexport const CreateButtonContent = {\r\n [EntityTabs.Accommodation]: 'New Accommodation',\r\n [EntityTabs.Activities]: 'New Activity'\r\n};\r\n","import React from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(() => ({\r\n root: {\r\n fontSize: '13px',\r\n fontWeight: 'bold',\r\n padding: '3px 20px'\r\n }\r\n}));\r\n\r\nconst OutlinedButton = ({ children, classes, ...props }) => {\r\n const { root } = useStyles();\r\n\r\n return (\r\n <Button\r\n variant=\"outlined\"\r\n color=\"primary\"\r\n classes={{ root, ...classes }}\r\n {...props}\r\n >\r\n {children}\r\n </Button>\r\n );\r\n};\r\n\r\nexport default OutlinedButton;\r\n","import styled from 'styled-components';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nexport const Toolbar = styled.div`\r\n display: flex;\r\n align-items: center;\r\n border-bottom: 1px solid #e2ebf6;\r\n box-sizing: border-box;\r\n min-height: 48px;\r\n @media (max-width: 600px) {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n min-height: auto;\r\n }\r\n`;\r\n\r\nexport const ToolbarLeft = styled.div`\r\n display: flex;\r\n align-items: center;\r\n min-width: 220px;\r\n height: 100%;\r\n border-right: 1px solid #e2ebf6;\r\n box-sizing: border-box;\r\n @media (max-width: 600px) {\r\n min-width: 100%;\r\n border-right: none;\r\n border-bottom: 1px solid #e2ebf6;\r\n justify-content: center;\r\n }\r\n`;\r\n\r\nexport const ToolbarRight = styled.div`\r\n height: 100%;\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n padding-right: 30px;\r\n @media (max-width: 600px) {\r\n justify-content: center;\r\n padding-right: 0;\r\n width: 100%;\r\n padding: 10px 0;\r\n }\r\n`;\r\n\r\nexport const ToolbarTitle = styled(Typography)`\r\n padding: 0 40px 0 30px;\r\n font-weight: bold;\r\n @media (max-width: 600px) {\r\n padding: 10px 20px;\r\n font-size: 14px;\r\n }\r\n`;\r\n","import React from 'react';\r\nimport { Typography } from '@material-ui/core';\r\nimport Button from '@material-ui/core/Button';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport {\r\n CreateButtonContent,\r\n CreateEntityRoutes\r\n} from '../../constants/entity-values';\r\nimport OutlinedButton from '../../../../components/buttons/OutlinedButton';\r\nimport { Toolbar, ToolbarLeft, ToolbarRight, ToolbarTitle } from './styles';\r\n\r\nconst ToolBar = ({ tab }) => {\r\n const history = useHistory();\r\n const [t] = useTranslation();\r\n\r\n const handleCreateEntity = () => {\r\n history.push(CreateEntityRoutes[tab]);\r\n };\r\n\r\n return (\r\n <Toolbar>\r\n <ToolbarLeft>\r\n <ToolbarTitle variant=\"h2\">\r\n {t('Accommodations & Activities')}\r\n </ToolbarTitle>\r\n </ToolbarLeft>\r\n\r\n <ToolbarRight>\r\n <OutlinedButton onClick={handleCreateEntity}>\r\n {t(CreateButtonContent[tab])}\r\n </OutlinedButton>\r\n </ToolbarRight>\r\n </Toolbar>\r\n );\r\n};\r\n\r\nexport default ToolBar;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles((theme => ({\r\n tabsWrapper: {\r\n flex: '0 1 220px', \r\n [theme.breakpoints.down('sm')]:{\r\n flex: '0 1 300px',\r\n }\r\n },\r\n\r\n root: {\r\n padding: '18px 30px',\r\n borderBottom: '1px solid #E2EBF6',\r\n boxSizing: 'border-box',\r\n [theme.breakpoints.down('sm')]:{\r\n \r\n }\r\n },\r\n\r\n wrapper: {\r\n alignItems: 'flex-start'\r\n },\r\n\r\n selected: {\r\n backgroundColor: '#E2F5F8',\r\n color: '#071B27 !important'\r\n },\r\n\r\n textColorInherit: {\r\n opacity: 1,\r\n color: '#335267'\r\n }\r\n})));\r\n\r\nexport default useStyles;\r\n","import styled from 'styled-components';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nconst TabItemTitle = styled(Typography)`\r\n font-weight: bold;\r\n line-height: 18px;\r\n color: inherit;\r\n`;\r\n\r\nconst TabItemQuantity = styled(Typography)`\r\n font-weight: 500;\r\n font-size: 31px;\r\n line-height: 24px;\r\n margin-top: 12px;\r\n`;\r\n\r\nconst BookingsTotalNumbersWrapper = styled.div`\r\n margin-top: 18px;\r\n display: flex;\r\n gap: 20px;\r\n`;\r\n\r\nconst BookingsItem = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n`;\r\n\r\nconst BookingsItemCaption = styled.div`\r\n padding-top: 6px;\r\n font-weight: 500;\r\n font-size: 10px;\r\n line-height: 12px;\r\n\r\n letter-spacing: 0.035em;\r\n text-transform: uppercase;\r\n`;\r\n\r\nexport {\r\n TabItemTitle,\r\n TabItemQuantity,\r\n BookingsTotalNumbersWrapper,\r\n BookingsItem,\r\n BookingsItemCaption\r\n};\r\n","import { useTranslation } from 'react-i18next';\r\nimport React from 'react';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport {\r\n BookingsItem,\r\n BookingsItemCaption,\r\n BookingsTotalNumbersWrapper,\r\n TabItemQuantity,\r\n TabItemTitle\r\n} from './styles';\r\n\r\nconst EntityTabComponent = ({ title, selected, overview }) => {\r\n const [t] = useTranslation();\r\n\r\n const { total, available, expired } = overview || {};\r\n const color = selected ? 'primary' : 'inherit';\r\n\r\n return (\r\n <>\r\n <TabItemTitle variant=\"body1\">{title}</TabItemTitle>\r\n\r\n <TabItemQuantity color={color}>{total}</TabItemQuantity>\r\n\r\n <BookingsTotalNumbersWrapper>\r\n <BookingsItem>\r\n <Typography color={color} variant=\"h2\">\r\n {available}\r\n </Typography>\r\n\r\n <BookingsItemCaption variant=\"h3\">{t('Active')}</BookingsItemCaption>\r\n </BookingsItem>\r\n\r\n <BookingsItem>\r\n <Typography color={color} variant=\"h2\">\r\n {expired}\r\n </Typography>\r\n\r\n <BookingsItemCaption variant=\"h3\">\r\n {t('Not active')}\r\n </BookingsItemCaption>\r\n </BookingsItem>\r\n </BookingsTotalNumbersWrapper>\r\n </>\r\n );\r\n};\r\n\r\nexport default EntityTabComponent;\r\n","import React from 'react';\r\nimport { Tab } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport useStyles from './styles';\r\nimport EntityTabComponent from '../EntityTabComponent';\r\nimport { VerticalTabs } from '../../../../components';\r\n\r\nfunction a11yProps(index) {\r\n return {\r\n id: `vertical-tab-${index}`,\r\n 'aria-controls': `vertical-tabpanel-${index}`\r\n };\r\n}\r\n\r\nconst EntityTabBar = ({ tab, onChangeTab, tabs }) => {\r\n const {\r\n tabsWrapper,\r\n root,\r\n wrapper,\r\n selected,\r\n textColorInherit\r\n } = useStyles();\r\n\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <VerticalTabs className={tabsWrapper} onChange={onChangeTab} value={tab}>\r\n {tabs.map(({ title, overview, tabIndex }) => (\r\n <Tab\r\n key={title}\r\n classes={{ root, wrapper, selected, textColorInherit }}\r\n label={\r\n <EntityTabComponent\r\n title={t(title)}\r\n selected={tab === tabIndex}\r\n overview={overview}\r\n />\r\n }\r\n {...a11yProps(0)}\r\n />\r\n ))}\r\n </VerticalTabs>\r\n );\r\n};\r\n\r\nexport default EntityTabBar;\r\n","import gql from 'graphql-tag';\r\n\r\nexport const ACCOMMODATIONS_ACTIVITIES_OVERVIEW = gql`\r\n query accommodationsActivitiesOverview($businessOwnerId: Int) {\r\n accommodationsActivitiesOverview(businessOwnerId: $businessOwnerId) {\r\n activities {\r\n total\r\n available\r\n expired\r\n }\r\n accommodations {\r\n total\r\n available\r\n expired\r\n }\r\n }\r\n }\r\n`;\r\n","import React from 'react';\r\nimport { useQuery } from '@apollo/react-hooks';\r\nimport { ACCOMMODATIONS_ACTIVITIES_OVERVIEW } from '../../../graphql/queries/accommodations-activities-overview';\r\n\r\nconst DefaultOverview = {\r\n accommodations: {},\r\n activities: {}\r\n};\r\n\r\nconst useOverview = businessOwnerId => {\r\n const { data, ...props } = useQuery(ACCOMMODATIONS_ACTIVITIES_OVERVIEW, {\r\n variables: { businessOwnerId }\r\n });\r\n\r\n return {\r\n overview: data?.accommodationsActivitiesOverview || DefaultOverview,\r\n ...props\r\n };\r\n};\r\n\r\nexport default useOverview;\r\n","import { useState } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nimport { EntityTabs } from '../../../constants/entity-tabs';\r\n\r\nconst useEntityTabs = ({ refetch, overview }) => {\r\n const { state } = useLocation();\r\n\r\n const [tab, setTab] = useState(state?.tabNumber || EntityTabs.Accommodation);\r\n\r\n const handleChangeTab = (event, newTab) => {\r\n setTab(newTab);\r\n refetch();\r\n };\r\n\r\n const Tabs = [\r\n {\r\n title: 'Accommodations',\r\n overview: overview.accommodations,\r\n tabIndex: EntityTabs.Accommodation\r\n },\r\n {\r\n title: 'Activities',\r\n overview: overview.activities,\r\n tabIndex: EntityTabs.Activities\r\n }\r\n ];\r\n\r\n return { tab, handleChangeTab, Tabs };\r\n};\r\n\r\nexport default useEntityTabs;\r\n","import AccommodationsAndActivities from './AccommodationsAndActivities';\r\n\r\nexport default AccommodationsAndActivities;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { AppHeader, TabPanel, SelectCompanyBox } from 'components';\r\n\r\nimport AccommodationsList from './components/accommodations-list/AccommodationsList';\r\nimport ActivitiesList from './components/activities-list/ActivitiesList';\r\n\r\nimport useStyles, { TabsRoot } from './styles';\r\nimport ToolBar from './components/ToolBar';\r\nimport { EntityTabs } from '../../constants/entity-tabs';\r\nimport EntityTabBar from './components/EntityTabBar';\r\nimport useOverview from './hooks/useOverview';\r\nimport useEntityTabs from './hooks/useEntityTabs';\r\n\r\nconst AccommodationsAndActivities = ({ businessOwner }) => {\r\n const classes = useStyles();\r\n\r\n const isOwnerSelected = Boolean(businessOwner.selectedBusinessOwner.id);\r\n\r\n const businessOwnerId =\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id;\r\n\r\n const { overview, refetch } = useOverview(businessOwnerId);\r\n const { tab, handleChangeTab, Tabs } = useEntityTabs({ overview, refetch });\r\n\r\n return (\r\n <div className={classes.root}>\r\n <AppHeader />\r\n\r\n {isOwnerSelected && (\r\n <>\r\n <ToolBar tab={tab} />\r\n\r\n <TabsRoot>\r\n <EntityTabBar tab={tab} onChangeTab={handleChangeTab} tabs={Tabs} />\r\n\r\n <TabPanel\r\n className={classes.tabContentWrapper}\r\n value={tab}\r\n index={EntityTabs.Accommodation}\r\n >\r\n <AccommodationsList\r\n ownerId={businessOwnerId}\r\n deleteCallback={refetch}\r\n />\r\n </TabPanel>\r\n\r\n <TabPanel\r\n className={classes.tabContentWrapper}\r\n value={tab}\r\n index={EntityTabs.Activities}\r\n >\r\n <ActivitiesList\r\n ownerId={businessOwnerId}\r\n deleteCallback={refetch}\r\n />\r\n </TabPanel>\r\n </TabsRoot>\r\n </>\r\n )}\r\n\r\n {!isOwnerSelected && <SelectCompanyBox />}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(AccommodationsAndActivities);\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme=>({\r\n container: {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n overflow: 'hidden'\r\n },\r\n table: {\r\n width: '100%',\r\n overflow: 'hidden',\r\n [theme.breakpoints.down('sm')]:{\r\n overflowX: 'scroll',\r\n behavior: 'smooth' ,\r\n display: 'block',\r\n width: '100%',\r\n }\r\n },\r\n heading: {\r\n color: '#071B27',\r\n fontWeight: 'bold',\r\n textTransform: 'uppercase'\r\n },\r\n imageWrapper: {\r\n width: 60,\r\n height: 36\r\n },\r\n image: {\r\n width: '100%',\r\n height: '100%',\r\n border: '1px solid rgba(0, 0, 0, 0.22)',\r\n boxSizing: 'border-box',\r\n borderRadius: 3\r\n },\r\n tableCell: {\r\n fontSize: '13px',\r\n border: 'none',\r\n padding: '5px 0',\r\n color: '#071B27'\r\n },\r\n headTableCell: {\r\n paddingBottom: '15px',\r\n paddingTop: 0\r\n },\r\n imgCell: {\r\n width: 60,\r\n paddingLeft: 10\r\n },\r\n nameCell: {\r\n width: 337,\r\n paddingLeft: 20\r\n },\r\n participantsCell: {\r\n width: 97,\r\n paddingLeft: 20\r\n },\r\n activityTypeCell: {\r\n width: 97,\r\n paddingLeft: 39\r\n },\r\n productCodeCell: {\r\n width: 96,\r\n paddingLeft: 59\r\n },\r\n startingPointCell: {\r\n width: 396,\r\n paddingLeft: 41\r\n },\r\n iconButton: {\r\n padding: '0px 0px 0px 24px',\r\n '&:hover': {\r\n backgroundColor: 'transparent'\r\n }\r\n },\r\n tableHead: {\r\n padding: 18\r\n },\r\n tableRow: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#E2F5F8'\r\n }\r\n },\r\n buttonRoot: {\r\n fontSize: '13px',\r\n fontWeight: 'bold',\r\n padding: '3px 20px',\r\n marginRight: '10px'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\nimport { useQuery } from '@apollo/react-hooks';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport { Pagination } from 'components';\r\n\r\nimport { ACTIVITIES } from 'graphql/queries/activities';\r\n\r\nimport {\r\n Typography,\r\n TableRow,\r\n TableHead,\r\n TableContainer,\r\n TableCell,\r\n TableBody,\r\n Table,\r\n Button\r\n} from '@material-ui/core';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst headingsConfig = classes => {\r\n return [\r\n { label: 'Photo', align: 'left', cellClassName: classes.imgCell },\r\n {\r\n label: 'Activity',\r\n cellClassName: classes.nameCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Min/Max number of participants',\r\n cellClassName: classes.participantsCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Activity type',\r\n cellClassName: classes.activityTypeCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Product code',\r\n cellClassName: classes.productCodeCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Starting point',\r\n cellClassName: classes.startingPointCell,\r\n align: 'left'\r\n },\r\n { label: '', align: 'right' }\r\n ];\r\n};\r\n\r\nfunction ActivitiesList({ businessOwner }) {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const [t] = useTranslation();\r\n\r\n const [page, setPage] = React.useState(0);\r\n\r\n const { data, refetch } = useQuery(ACTIVITIES, {\r\n variables: {\r\n page: page,\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n refetch();\r\n }, []);\r\n\r\n const onPageChangeHandler = (e, page) => {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n };\r\n\r\n return (\r\n <TableContainer component=\"div\" classes={{ root: classes.container }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead className={classes.tableHead}>\r\n <TableRow>\r\n {headingsConfig(classes).map(heading => (\r\n <TableCell\r\n key={heading.label}\r\n align={heading.align}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.headTableCell,\r\n heading.cellClassName\r\n )}\r\n >\r\n <Typography variant=\"h3\" className={classes.heading}>\r\n {t(heading.label)}\r\n </Typography>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {data &&\r\n data.activities &&\r\n data.activities.map(activity => (\r\n <TableRow\r\n key={activity.id}\r\n classes={{ root: classes.tableRow }}\r\n onClick={() => history.push(`/activities/${activity.id}/book`)}\r\n >\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.imgCell)}\r\n component=\"th\"\r\n scope=\"row\"\r\n >\r\n <div className={classes.imageWrapper}>\r\n {activity.photo && (\r\n <img\r\n src={activity.photo}\r\n alt=\"\"\r\n className={classes.image}\r\n />\r\n )}\r\n </div>\r\n </TableCell>\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.nameCell)}\r\n align=\"left\"\r\n >\r\n {activity.title}\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.participantsCell\r\n )}\r\n align=\"left\"\r\n >\r\n {activity.minParticipants}/{activity.maxParticipants}\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.activityTypeCell\r\n )}\r\n align=\"left\"\r\n >\r\n {activity.isOpen ? t('Open') : t('Private')}\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.productCodeCell\r\n )}\r\n align=\"left\"\r\n >\r\n {activity.productCode}\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.startingPointCell\r\n )}\r\n align=\"left\"\r\n >\r\n {activity.startingPoint}\r\n </TableCell>\r\n {/* <TableCell className={classes.tableCell} align=\"right\">\r\n <Button\r\n onClick={e => {\r\n e.stopPropagation();\r\n history.push(`/activities/${activity.id}/manual-book`);\r\n }}\r\n variant=\"outlined\"\r\n color=\"primary\"\r\n classes={{ root: classes.buttonRoot }}\r\n >\r\n {t('Manual book')}\r\n </Button>\r\n </TableCell> */}\r\n <TableCell className={classes.tableCell} align=\"left\">\r\n <Button\r\n onClick={e => {\r\n e.stopPropagation();\r\n history.push(`/activities/${activity.id}/book`);\r\n }}\r\n variant=\"outlined\"\r\n color=\"primary\"\r\n classes={{ root: classes.buttonRoot }}\r\n >\r\n {t('Book')}\r\n </Button>\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n\r\n {data && (\r\n <Pagination\r\n page={page + 1}\r\n count={data.numberOfActivitiesPages}\r\n onChange={onPageChangeHandler}\r\n amount={data.activities.length}\r\n total={data.accommodationsActivitiesOverview.activities.total}\r\n />\r\n )}\r\n </TableContainer>\r\n );\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(ActivitiesList);\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%'\r\n },\r\n toolbar: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n borderBottom: '1px solid #E2EBF6',\r\n boxSizing: 'border-box',\r\n minHeight: '48px',\r\n padding: '0 30px'\r\n },\r\n toolbarTitle: {\r\n fontWeight: 'bold',\r\n },\r\n listWrapper: {\r\n height: '100%',\r\n padding: '15px 30px 20px'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport { AppHeader } from 'components';\r\n\r\nimport ActivitiesList from 'pages/book-activities-list/components/activities-list/ActivitiesList';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst BookActivitiesList = () => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classes.root}>\r\n <AppHeader />\r\n\r\n <div className={classes.toolbar}>\r\n <Typography variant=\"h2\" className={classes.toolbarTitle}>\r\n {t('Book Activity')}\r\n </Typography>\r\n </div>\r\n\r\n <div className={classes.listWrapper}>\r\n <ActivitiesList />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default BookActivitiesList;\r\n","const validate = values => {\r\n const errors = {};\r\n\r\n if (!values.startingDate && !values.multiDates?.startDate && !values?.multiDates?.endDate) {\r\n errors.multiDates = 'Dates are required';\r\n errors.startingDate = 'Starting date is required';\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSnackbar } from 'notistack';\r\nimport { connect } from 'react-redux';\r\nimport classNames from 'classnames';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\nimport { change, Field, reduxForm } from 'redux-form';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport LocationOnOutlinedIcon from '@material-ui/icons/LocationOnOutlined';\r\n\r\nimport {\r\n ACTIVITIES_AVAILABLE_PARTICIPANTS,\r\n ACTIVITY\r\n} from 'graphql/queries/activities';\r\nimport {\r\n CREATE_ACTIVITY_BOOKING,\r\n UPDATE_ACTIVITY_BOOKING\r\n} from 'graphql/mutations/activities-bookings';\r\n\r\nimport {\r\n AppHeader,\r\n CircularLoader,\r\n SingleDatePicker,\r\n FormActionButtons,\r\n BookInfoList,\r\n MultiDatePickerCalendar\r\n} from 'components';\r\n\r\nimport { getListOfAvailableCurrencies } from 'utils/book-accommodation-and-activity/currency';\r\nimport {\r\n getReceivedActivityBookingsDates,\r\n getReceivedActivityData\r\n} from 'utils/accommodations-and-activities/prepareReceivedActivityData';\r\nimport { getParticipants } from 'utils/book-activity/prepareParticipants';\r\nimport { getPreparedBookActivityData } from 'utils/book-activity/prepareBookActivityData';\r\nimport {\r\n getAvailableRangeDates,\r\n getDefaultStartTime,\r\n getDisabledDates,\r\n getListOfStartTimeAndDuration,\r\n getListOfStartTimeAndDurationByCutoffPeriod\r\n} from 'utils/book-activity/availableDates';\r\nimport {\r\n getAvailableParticipantsForStartTime,\r\n getMaxParticipants\r\n} from 'utils/book-activity/maxParticipants';\r\n\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport validate from './validate';\r\n\r\nimport useStyles from 'pages/book-activity/styles';\r\n\r\nconst initialValues = {\r\n maxParticipants: 0,\r\n currency: 'NOK',\r\n participants: [],\r\n addOns: [],\r\n accommodations: [],\r\n pay: {\r\n 'Pay on arrival': true\r\n },\r\n scheduleType: null\r\n};\r\n\r\nconst SCHEDULE_DATE_NO_TIME_NAME = 'scheduleDateForm';\r\nconst SCHEDULE_DATE_AND_TIME_NAME = 'scheduleDateTimeForm';\r\nconst SCHEDULE_PASS_NAME = 'schedulePassForm';\r\n\r\nconst BookActivity = ({\r\n bookActivityForm,\r\n changeFormFieldValue,\r\n handleSubmit,\r\n bookedData,\r\n isUpdate,\r\n businessOwner\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n const { id } = useParams();\r\n const history = useHistory();\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const selectedLanguage = i18n.language;\r\n const ownerId = businessOwner.selectedBusinessOwner.id;\r\n\r\n const activityId = bookActivityForm.values.activityId;\r\n\r\n const initialStartingDate =\r\n bookedData && bookedData.startingDate ? bookedData.startingDate : moment();\r\n\r\n const [deletedRelatedAccommodations] = React.useState([]);\r\n const [isLoading, setLoading] = React.useState(null);\r\n const [activity, setActivity] = React.useState(null);\r\n const [isUpdatedParticipants, setIsUpdatedParticipants] = React.useState(\r\n false\r\n );\r\n const [\r\n availableParticipantsData,\r\n setAvailableParticipantsData\r\n ] = React.useState(null);\r\n\r\n const [createActivityBooking] = useMutation(CREATE_ACTIVITY_BOOKING);\r\n const [updateActivityBooking] = useMutation(UPDATE_ACTIVITY_BOOKING);\r\n\r\n const { loading, data } = useQuery(ACTIVITY, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n activityId: activityId || parseInt(id),\r\n businessOwnerId: ownerId\r\n }\r\n });\r\n\r\n const {\r\n loading: isAvailableParticipantsLoading,\r\n data: receivedAvailableParticipantsData,\r\n refetch: refetchParticipantsData\r\n } = useQuery(ACTIVITIES_AVAILABLE_PARTICIPANTS, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n activityId: activityId || parseInt(id),\r\n businessOwnerId: ownerId,\r\n startPeriod: moment(initialStartingDate)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(initialStartingDate).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n if (!receivedAvailableParticipantsData) return;\r\n\r\n receivedAvailableParticipantsData.activities.forEach(data => {\r\n data.availableParticipantsPerDate = data.availableParticipantsPerDate.map(\r\n participants => ({\r\n ...participants,\r\n availableParticipants: 0\r\n })\r\n );\r\n });\r\n\r\n const availableParticipantsData = getReceivedActivityBookingsDates(\r\n receivedAvailableParticipantsData\r\n );\r\n\r\n setAvailableParticipantsData(availableParticipantsData);\r\n }, [receivedAvailableParticipantsData]);\r\n\r\n React.useEffect(() => {\r\n if (data && data.activities && data.activities.length) {\r\n const receivedActivity = data.activities[0];\r\n const activityData = getReceivedActivityData(receivedActivity);\r\n\r\n activityData['pricesType'] = receivedActivity['pricesType'];\r\n activityData['scheduleType'] = receivedActivity['scheduleType'];\r\n\r\n changeFormFieldValue(`scheduleType`, activityData['scheduleType']);\r\n\r\n if (bookedData) {\r\n handleListStartTimeAndDurationField(activityData);\r\n setParticipants(activityData);\r\n }\r\n\r\n setListOfAvailableCurrencies(receivedActivity);\r\n setMaxParticipants(activityData['generalForm'].maxParticipants);\r\n\r\n setActivity(activityData);\r\n setAddOns(activityData);\r\n\r\n if (activityData.scheduleType === SCHEDULE_PASS_NAME) {\r\n setParticipants(activityData);\r\n }\r\n }\r\n }, [data]);\r\n\r\n React.useEffect(() => {\r\n const participants = bookActivityForm.values.participants;\r\n if (participants && participants.length) {\r\n setParticipants(activity);\r\n }\r\n }, [bookActivityForm.values.currency]);\r\n\r\n React.useEffect(() => {\r\n const multiDates = bookActivityForm.values.multiDates;\r\n if (multiDates) {\r\n setParticipants(activity);\r\n }\r\n }, [bookActivityForm.values.multiDates]);\r\n\r\n React.useEffect(() => {\r\n const startingDate = bookActivityForm.values.startingDate;\r\n\r\n if (startingDate) {\r\n handleListStartTimeAndDurationField(activity);\r\n setParticipants(activity);\r\n }\r\n }, [bookActivityForm.values.startingDate]);\r\n\r\n React.useEffect(() => {\r\n const startTime = bookActivityForm.values.startTime;\r\n\r\n if (startTime) {\r\n changeFormFieldValue('maxParticipants', startTime.seatsLeft);\r\n }\r\n }, [bookActivityForm.values.startTime]);\r\n\r\n const setListOfAvailableCurrencies = receivedActivity => {\r\n const listOfAvailableCurrencies = getListOfAvailableCurrencies(\r\n receivedActivity.prices\r\n );\r\n const selectedCurrency = bookActivityForm.values.currency;\r\n\r\n if (!listOfAvailableCurrencies.includes(selectedCurrency)) {\r\n changeFormFieldValue('currency', listOfAvailableCurrencies[0]);\r\n }\r\n };\r\n\r\n const handleListStartTimeAndDurationField = activity => {\r\n if (!activity) return;\r\n\r\n const startingDate = bookActivityForm.values.startingDate;\r\n const availableParticipantsPerDate = availableParticipantsData\r\n ? availableParticipantsData.activities[0].availableParticipantsPerDate\r\n : [];\r\n let listOfStartTimeAndDuration = getListOfStartTimeAndDuration(\r\n availableParticipantsPerDate,\r\n activity,\r\n bookActivityForm\r\n );\r\n listOfStartTimeAndDuration = getListOfStartTimeAndDurationByCutoffPeriod(\r\n activity,\r\n listOfStartTimeAndDuration,\r\n startingDate\r\n );\r\n let selectedStartTime = getDefaultStartTime(\r\n listOfStartTimeAndDuration,\r\n bookActivityForm\r\n );\r\n\r\n if (!selectedStartTime) {\r\n setMaxParticipants(activity.generalForm.maxParticipants);\r\n availableParticipantsPerDate.map(item => {\r\n const formattedStartDate = startingDate\r\n ? moment(startingDate).format('YYYY-MM-DD')\r\n : '';\r\n if (!item.startTime && item.date === formattedStartDate) {\r\n setMaxParticipants(item.availableParticipants);\r\n }\r\n });\r\n } else {\r\n setMaxParticipants(selectedStartTime.seatsLeft);\r\n\r\n listOfStartTimeAndDuration = getAvailableParticipantsForStartTime(\r\n listOfStartTimeAndDuration,\r\n bookedData,\r\n bookActivityForm,\r\n availableParticipantsData\r\n );\r\n }\r\n\r\n selectedStartTime = getDefaultStartTime(\r\n listOfStartTimeAndDuration,\r\n bookActivityForm\r\n );\r\n\r\n changeFormFieldValue('startTime', selectedStartTime);\r\n };\r\n\r\n const setParticipants = activity => {\r\n const previousParticipants = bookActivityForm.values.participants || [];\r\n const participants = getParticipants(\r\n activity,\r\n bookActivityForm,\r\n setIsUpdatedParticipants,\r\n isUpdatedParticipants,\r\n bookActivityForm.values.currency,\r\n previousParticipants\r\n );\r\n\r\n changeFormFieldValue('participants', participants);\r\n };\r\n\r\n const setAddOns = activity => {\r\n const previousAddOns = bookActivityForm.values.addOns || [];\r\n\r\n const addOnsList = activity.addOnsForm.addOns.map(item => {\r\n const theSameAddOn = previousAddOns.find(addOn => addOn.id === item.id);\r\n return {\r\n ...item,\r\n value: theSameAddOn ? theSameAddOn.value : 0,\r\n originalId: theSameAddOn ? theSameAddOn.originalId : null\r\n };\r\n });\r\n\r\n changeFormFieldValue('addOns', addOnsList);\r\n };\r\n\r\n const setMaxParticipants = seatsLeft => {\r\n const maxParticipants = getMaxParticipants(\r\n seatsLeft,\r\n bookedData,\r\n bookActivityForm,\r\n availableParticipantsData\r\n );\r\n\r\n changeFormFieldValue('maxParticipants', maxParticipants);\r\n };\r\n\r\n const changeMonthHandler = date => {\r\n refetchParticipantsData({\r\n activityId: activityId || parseInt(id),\r\n startPeriod: moment(date)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(date).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n });\r\n };\r\n\r\n const submit = () => {\r\n setLoading(true);\r\n\r\n if (\r\n bookActivityForm.values.participants &&\r\n bookActivityForm.values.participants.length\r\n ) {\r\n bookActivityForm.values.participants = [\r\n {\r\n ...bookActivityForm.values.participants[0],\r\n participants: bookActivityForm.values.maxParticipants\r\n }\r\n ];\r\n }\r\n\r\n const data = getPreparedBookActivityData(\r\n activity,\r\n bookActivityForm,\r\n deletedRelatedAccommodations\r\n );\r\n\r\n if (isUpdate) {\r\n updateActivityBooking({ variables: data }).then(\r\n () => {\r\n enqueueSnackbar(t('Activity booking has been successfully updated'), {\r\n variant: 'success'\r\n });\r\n history.push({\r\n pathname: '/bookings-list'\r\n });\r\n },\r\n () => {\r\n setLoading(false);\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n }\r\n );\r\n } else {\r\n createActivityBooking({ variables: data }).then(\r\n () => {\r\n enqueueSnackbar(t('Activity has been successfully booked'), {\r\n variant: 'success'\r\n });\r\n history.push({\r\n pathname: '/activities'\r\n });\r\n },\r\n () => {\r\n setLoading(false);\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n }\r\n );\r\n }\r\n };\r\n\r\n const handlerSubmitWrapper = props => {\r\n if (bookActivityForm.syncErrors) {\r\n const syncErrors = bookActivityForm.syncErrors;\r\n const errorsLength = Object.keys(syncErrors).length;\r\n\r\n if (syncErrors.isMaxParticipantsErrors && errorsLength === 2) {\r\n const error = syncErrors.participants['_error'];\r\n const errorSplit = error.split(' ');\r\n const errorLength = errorSplit.length;\r\n enqueueSnackbar(\r\n t('The number of Participants can’t exceed', {\r\n number: errorSplit[errorLength - 1]\r\n }),\r\n {\r\n variant: 'warning'\r\n }\r\n );\r\n } else {\r\n enqueueSnackbar(t('Please fill in all the required fields'), {\r\n variant: 'warning'\r\n });\r\n }\r\n }\r\n\r\n handleSubmit(submit)(props);\r\n };\r\n\r\n return (\r\n <>\r\n <AppHeader />\r\n\r\n <CircularLoader\r\n isLoading={loading || isAvailableParticipantsLoading || isLoading}\r\n loaderClassName={classes.loaderClassName}\r\n className={classes.loaderWrapper}\r\n />\r\n\r\n {activity && (\r\n <div className={classes.root}>\r\n <div className={classes.leftSide}>\r\n <Typography variant=\"h3\" classes={{ root: classes.productCode }}>\r\n {t('Product code')}: {activity.generalForm.productCode}\r\n </Typography>\r\n\r\n <div\r\n className={classes.photo}\r\n style={{\r\n backgroundImage: `url(${activity.generalForm.coverPhoto.image})`\r\n }}\r\n >\r\n {''}\r\n </div>\r\n\r\n <Typography variant=\"h2\" className={classes.fontWeight}>\r\n {\r\n getFormByCurrentLanguage(\r\n selectedLanguage,\r\n activity.generalForm,\r\n activity['generalForm-Norwegian']\r\n ).title\r\n }\r\n </Typography>\r\n\r\n <div className={classes.listInfo}>\r\n <div className={classes.infoItem}>\r\n <LocationOnOutlinedIcon classes={{ root: classes.infoIcon }} />\r\n <Typography variant=\"body1\">\r\n {activity.generalForm.startingPoint}\r\n </Typography>\r\n </div>\r\n </div>\r\n\r\n <Typography variant=\"body1\" classes={{ root: classes.overview }}>\r\n {\r\n getFormByCurrentLanguage(\r\n selectedLanguage,\r\n activity.generalForm,\r\n activity['descriptionForm-Norwegian']\r\n ).overview\r\n }\r\n </Typography>\r\n\r\n <BookInfoList\r\n activity={activity}\r\n currency={bookActivityForm.values.currency}\r\n defaultExpanded={true}\r\n />\r\n </div>\r\n\r\n <div className={classes.rightSide}>\r\n <form\r\n onSubmit={handlerSubmitWrapper}\r\n className={classes.bookWrapper}\r\n >\r\n <Typography\r\n variant=\"h1\"\r\n className={classNames(classes.fontWeight, classes.inputIndent)}\r\n >\r\n {isUpdate ? t('Update Activity Booking') : t('Book Activity')}\r\n </Typography>\r\n\r\n {activity.scheduleType === SCHEDULE_DATE_NO_TIME_NAME && (\r\n <Field\r\n name=\"multiDates\"\r\n label=\"Starting date *\"\r\n availableRange={getAvailableRangeDates(activity)}\r\n disabledDates={getDisabledDates(\r\n availableParticipantsData,\r\n null,\r\n activity\r\n )}\r\n changeMonthsCallback={changeMonthHandler}\r\n numberOfMonths={2}\r\n daySize={39}\r\n initialFocus=\"startDate\"\r\n component={MultiDatePickerCalendar}\r\n dateRangePickerClass=\"dateRangeOpenedPicker\"\r\n inputClassName={classes.disableInputFocus}\r\n cutoffData={activity[activity.scheduleType]}\r\n />\r\n )}\r\n\r\n {activity.scheduleType === SCHEDULE_DATE_AND_TIME_NAME && (\r\n <Field\r\n name=\"startingDate\"\r\n label=\"Starting date *\"\r\n availableRange={getAvailableRangeDates(activity)}\r\n disabledDates={getDisabledDates(\r\n availableParticipantsData,\r\n null,\r\n activity\r\n )}\r\n changeMonthsCallback={changeMonthHandler}\r\n numberOfMonths={2}\r\n daySize={39}\r\n component={SingleDatePicker}\r\n cutoffData={activity[activity.scheduleType]}\r\n />\r\n )}\r\n\r\n <FormActionButtons\r\n cancelPath={isUpdate ? '/bookings-list' : '/activities'}\r\n actionLabel={isUpdate ? 'Update' : 'Book'}\r\n />\r\n </form>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n bookActivityForm: state.form.bookActivityForm,\r\n businessOwner: state.businessOwner\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('bookActivityForm', field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'bookActivityForm',\r\n destroyOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(BookActivity));\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme=>({\r\n container: {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n overflow: 'hidden'\r\n },\r\n table: {\r\n width: '100%',\r\n overflow: 'hidden',\r\n [theme.breakpoints.down('sm')]:{\r\n overflowX: 'scroll',\r\n behavior: 'smooth' ,\r\n display:'block',\r\n width: '100%',\r\n }\r\n },\r\n heading: {\r\n color: '#071B27',\r\n fontWeight: 'bold',\r\n textTransform: 'uppercase'\r\n },\r\n imageWrapper: {\r\n width: 60,\r\n height: 36\r\n },\r\n image: {\r\n width: '100%',\r\n height: '100%',\r\n border: '1px solid rgba(0, 0, 0, 0.22)',\r\n boxSizing: 'border-box',\r\n borderRadius: 3\r\n },\r\n tableCell: {\r\n fontSize: '13px',\r\n border: 'none',\r\n padding: '5px 0',\r\n color: '#071B27'\r\n },\r\n headTableCell: {\r\n paddingBottom: '15px',\r\n paddingTop: 0\r\n },\r\n imgCell: {\r\n width: 60,\r\n paddingLeft: 10\r\n },\r\n nameCell: {\r\n width: 337,\r\n paddingLeft: 20\r\n },\r\n productCodeCell: {\r\n width: 97,\r\n paddingLeft: 78\r\n },\r\n locationCell: {\r\n width: 417,\r\n paddingLeft: 78\r\n },\r\n guestsCell: {\r\n width: 97,\r\n paddingLeft: 20\r\n },\r\n iconButton: {\r\n padding: '0px 0px 0px 24px',\r\n '&:hover': {\r\n backgroundColor: 'transparent'\r\n }\r\n },\r\n tableHead: {\r\n padding: 18\r\n },\r\n tableRow: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#E2F5F8'\r\n }\r\n },\r\n buttonRoot: {\r\n fontSize: '13px',\r\n fontWeight: 'bold',\r\n padding: '3px 20px',\r\n marginRight: '10px'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\nimport { useQuery } from '@apollo/react-hooks';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport { Pagination } from 'components';\r\n\r\nimport { ACCOMMODATIONS } from 'graphql/queries/accommodations';\r\n\r\nimport {\r\n Typography,\r\n TableRow,\r\n TableHead,\r\n TableContainer,\r\n TableCell,\r\n TableBody,\r\n Table,\r\n Button\r\n} from '@material-ui/core';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst headingsConfig = classes => {\r\n return [\r\n { label: 'Photo', align: 'left', cellClassName: classes.imgCell },\r\n {\r\n label: 'Accommodation',\r\n cellClassName: classes.nameCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Product code',\r\n cellClassName: classes.productCodeCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Location',\r\n cellClassName: classes.locationCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Guests',\r\n cellClassName: classes.guestsCell,\r\n align: 'left'\r\n },\r\n { label: '', align: 'right' }\r\n ];\r\n};\r\n\r\nfunction AccommodationsList({ businessOwner }) {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const [t] = useTranslation();\r\n\r\n const [page, setPage] = React.useState(0);\r\n\r\n const { data, refetch } = useQuery(ACCOMMODATIONS, {\r\n variables: {\r\n page: page,\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n refetch();\r\n }, []);\r\n\r\n const onPageChangeHandler = (e, page) => {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n };\r\n\r\n return (\r\n <TableContainer component=\"div\" classes={{ root: classes.container }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead className={classes.tableHead}>\r\n <TableRow>\r\n {headingsConfig(classes).map(heading => (\r\n <TableCell\r\n key={heading.label}\r\n align={heading.align}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.headTableCell,\r\n heading.cellClassName\r\n )}\r\n >\r\n <Typography variant=\"h3\" className={classes.heading}>\r\n {t(heading.label)}\r\n </Typography>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {data &&\r\n data.accommodations &&\r\n data.accommodations.map(accommodation => (\r\n <TableRow\r\n key={accommodation.id}\r\n classes={{ root: classes.tableRow }}\r\n onClick={() =>\r\n history.push(`/accommodations/${accommodation.id}/book`)\r\n }\r\n >\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.imgCell)}\r\n component=\"th\"\r\n scope=\"row\"\r\n >\r\n <div className={classes.imageWrapper}>\r\n {accommodation.photo && (\r\n <img\r\n src={accommodation.photo}\r\n alt=\"\"\r\n className={classes.image}\r\n />\r\n )}\r\n </div>\r\n </TableCell>\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.nameCell)}\r\n align=\"left\"\r\n >\r\n {accommodation.title}\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.productCodeCell\r\n )}\r\n align=\"left\"\r\n >\r\n {accommodation.productCode}\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.locationCell\r\n )}\r\n align=\"left\"\r\n >\r\n {accommodation.location}\r\n </TableCell>\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.guestsCell)}\r\n align=\"left\"\r\n >\r\n {accommodation.guestsNumber}\r\n </TableCell>\r\n {/* <TableCell className={classes.tableCell} align=\"right\">\r\n <Button\r\n onClick={e => {\r\n e.stopPropagation();\r\n history.push(\r\n `/accommodations/${accommodation.id}/manual-book`\r\n );\r\n }}\r\n variant=\"outlined\"\r\n color=\"primary\"\r\n classes={{ root: classes.buttonRoot }}\r\n >\r\n {t('Manual book')}\r\n </Button>\r\n </TableCell> */}\r\n <TableCell className={classes.tableCell} align=\"left\">\r\n <Button\r\n onClick={e => {\r\n e.stopPropagation();\r\n history.push(`/accommodations/${accommodation.id}/book`);\r\n }}\r\n variant=\"outlined\"\r\n color=\"primary\"\r\n classes={{ root: classes.buttonRoot }}\r\n >\r\n {t('Book')}\r\n </Button>\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n\r\n {data && (\r\n <Pagination\r\n page={page + 1}\r\n count={data.numberOfAccommodationsPages}\r\n onChange={onPageChangeHandler}\r\n amount={data.accommodations.length}\r\n total={data.accommodationsActivitiesOverview.accommodations.total}\r\n />\r\n )}\r\n </TableContainer>\r\n );\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(AccommodationsList);\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme=>({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%'\r\n },\r\n toolbar: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n borderBottom: '1px solid #E2EBF6',\r\n boxSizing: 'border-box',\r\n minHeight: '48px',\r\n padding: '0 30px',\r\n [theme.breakpoints.down('sm')]:{\r\n textAlign: 'cemter',\r\n alignItems: 'center',\r\n }\r\n },\r\n toolbarTitle: {\r\n fontWeight: 'bold',\r\n [theme.breakpoints.down('sm')]:{\r\n textAlign: 'cemter',\r\n alignItems: 'center',\r\n }\r\n },\r\n listWrapper: {\r\n height: '100%',\r\n padding: '15px 30px 20px'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport { AppHeader } from 'components';\r\n\r\nimport AccommodationsList from './components/accommodations-list/AccommodationsList';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst BookAccommodationList = () => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classes.root}>\r\n <AppHeader />\r\n\r\n <div className={classes.toolbar}>\r\n <Typography variant=\"h2\" className={classes.toolbarTitle}>\r\n {t('Book Accommodation')}\r\n </Typography>\r\n </div>\r\n\r\n <div className={classes.listWrapper}>\r\n <AccommodationsList />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default BookAccommodationList;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n paper: {\r\n backgroundColor: '#FFF',\r\n border: '1px solid #E5E5E5',\r\n boxSizing: 'border-box',\r\n borderRadius: '3px',\r\n width: '400px',\r\n maxHeight: '644px'\r\n },\r\n root: {\r\n padding: '0px'\r\n },\r\n subheader: {\r\n color: '#000000',\r\n fontSize: '13px',\r\n position: 'relative',\r\n lineHeight: '18px',\r\n paddingTop: '9px',\r\n fontWeight: 'bold'\r\n },\r\n notesLabel: {\r\n borderTop: '1px solid #E5E5E5',\r\n display: 'flex',\r\n alignItems: 'center',\r\n\r\n '& div:first-child': {\r\n marginRight: 10\r\n }\r\n },\r\n listItem: {\r\n color: '#000000',\r\n fontSize: '13px',\r\n paddingTop: '8px',\r\n fontWeight: 'lighter',\r\n borderBottom: '1px solid #E5E5E5'\r\n },\r\n unitTitle: {\r\n padding: '0px 40px 8px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n lineHeight: '18px',\r\n fontSize: '13px'\r\n },\r\n title: {\r\n lineHeight: '18px',\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n padding: '40px 40px 12px'\r\n },\r\n unitIcon: {\r\n fill: '#0E8BB4',\r\n paddingRight: '10px'\r\n },\r\n closeBtn: {\r\n position: 'absolute',\r\n top: 0,\r\n right: 0,\r\n padding: '10px'\r\n },\r\n actionBtnRoot: {\r\n boxShadow: 'none',\r\n border: '1px solid #0e8bb4',\r\n borderRadius: '3px',\r\n backgroundColor: '#0e8bb4',\r\n color: '#FFFFFF',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n padding: '8px 15px',\r\n minWidth: '80px',\r\n marginRight: '8px',\r\n '&:hover': {\r\n backgroundColor: '#0e8bb4',\r\n color: '#FFFFFF'\r\n }\r\n },\r\n cancelBtnRoot: {\r\n border: '1px solid #0e8bb4',\r\n borderRadius: '3px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n color: '#0e8bb4',\r\n padding: '8px 15px',\r\n minWidth: '70px',\r\n marginRight: '16px'\r\n },\r\n closeIcon: {\r\n fontSize: '17px',\r\n color: '#000'\r\n },\r\n contentRoot: {\r\n padding: '0px 24px',\r\n '&::-webkit-scrollbar': {\r\n width: '6px'\r\n },\r\n '&::-webkit-scrollbar-track': {\r\n background: '#C2C2C2',\r\n borderRadius: '2px'\r\n },\r\n '&::-webkit-scrollbar-thumb': {\r\n backgroundColor: '#666666',\r\n opacity: 0.48,\r\n borderRadius: '2px'\r\n }\r\n },\r\n actionsRoot: {\r\n marginTop: '16px',\r\n borderTop: '1px solid #E5E5E5'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { SimpleInput } from '../../index';\r\nimport { useField, useForm } from '../../../custom-hooks';\r\nimport { isValidLength } from '../../../utils/validators';\r\nimport { Button } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useMutation } from '@apollo/react-hooks';\r\n\r\nimport {ACCOMMODATION_BOOKING_NOTES, ACTIVITY_BOOKING_NOTES} from '../../../graphql/mutations/booking';\r\nimport { useSnackbar } from 'notistack';\r\n\r\nconst NotesForm = ({\r\n id,\r\n defaultValue = '',\r\n onCancel,\r\n onConfirm,\r\n refetchParams,\r\n isActivity,\r\n accommodationId\r\n}) => {\r\n const [t] = useTranslation();\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const [updateAccommodationBookingNotes, { loading }] = useMutation(\r\n ACCOMMODATION_BOOKING_NOTES,\r\n {\r\n refetchQueries: [refetchParams]\r\n }\r\n );\r\n const [\r\n updateActivityBookingNotes,\r\n { loading: loadingActivity }\r\n ] = useMutation(ACTIVITY_BOOKING_NOTES, {\r\n refetchQueries: [refetchParams]\r\n });\r\n\r\n const notesForm = useForm({\r\n onSubmit: (formData, formValid) => {\r\n if (!formValid) return;\r\n\r\n (isActivity\r\n ? updateActivityBookingNotes({\r\n variables: {\r\n id,\r\n activityBookingNotes: { activityNotes: formData.note }\r\n }\r\n })\r\n : updateAccommodationBookingNotes({\r\n variables: {\r\n id,\r\n accommodationBookingNotes: { \r\n accommodationId,\r\n bookingNotes: formData.note,\r\n \r\n },\r\n },\r\n })\r\n )\r\n .then(() => {\r\n onCancel && onCancel();\r\n onConfirm(formData.note);\r\n })\r\n .catch(() => {\r\n enqueueSnackbar(t('Notes were not updated. Try again.'), {\r\n variant: 'warning'\r\n });\r\n });\r\n }\r\n });\r\n\r\n const noteField = useField('note', notesForm, {\r\n defaultValue,\r\n validations: [\r\n formData =>\r\n isValidLength(formData.note, 400, 'Max note length is 400 symbols')\r\n ]\r\n });\r\n\r\n return (\r\n <form onSubmit={notesForm.handleSubmit} style={{ width: '100%' }}>\r\n <SimpleInput\r\n placeholder={t('Notes')}\r\n value={noteField.value}\r\n onChange={noteField.onChange}\r\n errors={noteField.errors}\r\n errorText={noteField.errors[0]}\r\n style={{ width: '100%' }}\r\n fullWidth\r\n multiline\r\n rows={6}\r\n disabled={loading || loadingActivity}\r\n />\r\n\r\n <div style={{ marginTop: '10px', display: 'flex' }}>\r\n <Button\r\n type=\"submit\"\r\n variant=\"contained\"\r\n color=\"primary\"\r\n disabled={\r\n noteField.value === defaultValue ||\r\n (noteField.errors && noteField.errors.length) ||\r\n loading ||\r\n loadingActivity\r\n }\r\n style={{ marginRight: '10px' }}\r\n >\r\n {t('Save')}\r\n </Button>\r\n\r\n {!!defaultValue && (\r\n <Button variant=\"outlined\" color=\"secondary\" onClick={onCancel}>\r\n {t('Cancel')}\r\n </Button>\r\n )}\r\n </div>\r\n </form>\r\n );\r\n};\r\n\r\nexport default NotesForm;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport moment from 'moment';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useSnackbar } from 'notistack';\r\nimport { useMutation } from '@apollo/react-hooks';\r\nimport classNames from 'classnames';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport StarBorderRoundedIcon from '@material-ui/icons/StarBorderRounded';\r\nimport HomeOutlinedIcon from '@material-ui/icons/HomeOutlined';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport Button from '@material-ui/core/Button';\r\nimport List from '@material-ui/core/List';\r\nimport ListSubheader from '@material-ui/core/ListSubheader';\r\nimport ListItem from '@material-ui/core/ListItem';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport {\r\n BookedAddOns,\r\n BookedMandatoryFees,\r\n getAccommodationBookingSchedule,\r\n getActivityBookingSchedule,\r\n guestsSumSeats,\r\n guestsDetailsInformation,\r\n isParticipantInfo\r\n} from 'utils/bookings/prepareBookingsData';\r\n\r\nimport BookingPriceDetailsPanel from '../booking-price-total/BookingPriceDetails';\r\n\r\nimport { CANCEL_ACCOMMODATION_BOOKING } from 'graphql/mutations/booking';\r\n\r\nimport useStyles from './styles';\r\nimport NotesForm from './NotesForm';\r\nimport EditIcon from '@material-ui/icons/Edit';\r\n\r\nconst ACCOMMODATION_TYPE = 'Accommodation';\r\nconst ACTIVITY_TYPE = 'Activity';\r\n\r\nconst CancelledInfo = ({ cancellationTime, isHandled, total }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <List className={classes.root}>\r\n <ListSubheader className={classes.subheader}>\r\n {t('Cancelled date')}\r\n </ListSubheader>\r\n <ListItem className={classes.listItem}>\r\n {`${moment(cancellationTime).format('YYYY-MM-DD')}, `}\r\n {moment(cancellationTime).format('HH:mm')}\r\n </ListItem>\r\n <ListSubheader className={classes.subheader}>{t('Status')}</ListSubheader>\r\n <ListItem className={classes.listItem}>\r\n {isHandled && t('Handled')}\r\n {!isHandled && t('Not handled')}\r\n </ListItem>\r\n <BookingPriceDetailsPanel priceDetails={total} />\r\n </List>\r\n );\r\n};\r\n\r\nconst BookingsDetailsDialog = ({\r\n open,\r\n booking,\r\n onClose,\r\n bookingTotal,\r\n isEditCancelBtns,\r\n cancelBooking,\r\n refetchParams\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const history = useHistory();\r\n const confirm = React.useContext(ConfirmContext);\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const [isNotesEditMode, setNotesEditMode] = useState(false);\r\n const [presetNotes, setPresetNotes] = useState(\r\n booking.bookingNotes || booking.activityNotes\r\n );\r\n \r\n useEffect(() => {\r\n setPresetNotes(booking.bookingNotes || booking.activityNotes);\r\n }, [booking]);\r\n\r\n const [cancelAccommodationBooking] = useMutation(\r\n CANCEL_ACCOMMODATION_BOOKING\r\n );\r\n\r\n if (Object.keys(booking).length === 0) {\r\n return null;\r\n }\r\n\r\n const accommodationCancellationHandler = item => {\r\n confirm({\r\n title: `${t('Cancel Booking')}?`,\r\n warningText: `${\r\n item.relatedActivitiesBookings.length && !item.isRelated\r\n ? t('Please note that related booking also will be deleted')\r\n : ''\r\n }`,\r\n description: `${item.fromDate} — ${item.toDate} • ${item.guestFirstName} ${item.guestLastName} • ${item.accommodation.title}`,\r\n confirmationText: t('Cancel Booking'),\r\n cancellationText: t('Back')\r\n }).then(() => {\r\n cancelAccommodationBooking({ variables: { id: item.id } }).then(() => {\r\n enqueueSnackbar(t('Accommodation booking was successfully canceled!'), {\r\n variant: 'success'\r\n });\r\n cancelBooking();\r\n });\r\n });\r\n };\r\n\r\n return (\r\n <Dialog open={open} classes={{ paper: classes.paper }}>\r\n <IconButton className={classes.closeBtn} onClick={onClose}>\r\n <HighlightOffIcon className={classes.closeIcon} />\r\n </IconButton>\r\n\r\n {booking && (\r\n <DialogTitle\r\n id=\"alert-dialog-title\"\r\n classes={{ root: classes.title }}\r\n disableTypography={true}\r\n >\r\n {booking.trekksoftId || booking.expediaReferenceNumber\r\n ? booking.trekksoftId || booking.expediaReferenceNumber\r\n : booking.referenceNumber}{' '}\r\n • {booking.guestFirstName} {booking.guestLastName}\r\n </DialogTitle>\r\n )}\r\n\r\n <DialogTitle\r\n id=\"alert-dialog-title\"\r\n classes={{ root: classes.unitTitle }}\r\n disableTypography={true}\r\n >\r\n {booking.bookingType === ACTIVITY_TYPE && (\r\n <StarBorderRoundedIcon\r\n className={classes.unitIcon}\r\n ></StarBorderRoundedIcon>\r\n )}\r\n\r\n {booking.bookingType === ACCOMMODATION_TYPE && (\r\n <HomeOutlinedIcon className={classes.unitIcon}></HomeOutlinedIcon>\r\n )}\r\n\r\n {booking.bookingType === ACTIVITY_TYPE && booking.activity.title}\r\n\r\n {booking.bookingType === ACCOMMODATION_TYPE &&\r\n booking.accommodation.title}\r\n </DialogTitle>\r\n\r\n <DialogContent classes={{ root: classes.contentRoot }}>\r\n <List className={classes.root}>\r\n <ListSubheader className={classes.subheader}>\r\n {t('Number of guests')}\r\n </ListSubheader>\r\n\r\n <ListItem className={classes.listItem}>\r\n {guestsSumSeats(booking.guests)}\r\n\r\n {isParticipantInfo(booking.guests) &&\r\n ` (${guestsDetailsInformation(booking.guests, t)})`}\r\n </ListItem>\r\n\r\n <ListSubheader className={classes.subheader}>\r\n {t('Checkin - checkout')}\r\n </ListSubheader>\r\n\r\n <ListItem className={classes.listItem}>\r\n {booking.bookingType === ACCOMMODATION_TYPE &&\r\n getAccommodationBookingSchedule(booking)}\r\n\r\n {booking.bookingType === ACTIVITY_TYPE &&\r\n getActivityBookingSchedule(booking)}\r\n </ListItem>\r\n\r\n <ListSubheader className={classes.subheader}>\r\n {t('Platform')}\r\n </ListSubheader>\r\n\r\n <ListItem className={classes.listItem}>{booking.platform}</ListItem>\r\n\r\n <ListSubheader className={classes.subheader}>\r\n {t('Add-ons')}\r\n </ListSubheader>\r\n\r\n <ListItem className={classes.listItem}>\r\n {BookedAddOns(booking.bookedAddOns)}\r\n </ListItem>\r\n\r\n <ListSubheader className={classes.subheader}>\r\n {t('Mandatory-Fees')}\r\n </ListSubheader>\r\n\r\n <ListItem className={classes.listItem}>\r\n {BookedMandatoryFees(booking.bookedMandatoryFees)}\r\n </ListItem>\r\n\r\n <ListSubheader className={classes.subheader}>\r\n {t('First name')}\r\n </ListSubheader>\r\n <ListItem className={classes.listItem}>\r\n {booking.guestFirstName}\r\n </ListItem>\r\n\r\n <ListSubheader className={classes.subheader}>\r\n {t('Last name')}\r\n </ListSubheader>\r\n\r\n <ListItem className={classes.listItem}>\r\n {booking.guestLastName}\r\n </ListItem>\r\n\r\n <ListSubheader className={classes.subheader}>\r\n {t('Phone')}\r\n </ListSubheader>\r\n\r\n <ListItem className={classes.listItem}>\r\n {booking.guestPhoneNumber}\r\n </ListItem>\r\n\r\n <ListSubheader className={classes.subheader}>\r\n {t('Email')}\r\n </ListSubheader>\r\n\r\n <ListItem className={classes.listItem}>{booking.guestEmail}</ListItem>\r\n\r\n <ListSubheader className={classes.subheader}>\r\n {t('Booking date')}\r\n </ListSubheader>\r\n\r\n <ListItem\r\n className={classes.listItem}\r\n style={!booking.isCanceled ? { borderBottom: 'None' } : {}}\r\n >\r\n {booking.creationTime}\r\n </ListItem>\r\n\r\n {!booking.isCanceled && bookingTotal && (\r\n <BookingPriceDetailsPanel priceDetails={bookingTotal} />\r\n )}\r\n\r\n <ListSubheader\r\n className={classNames(classes.subheader, classes.notesLabel)}\r\n >\r\n <div>{t('Notes')}</div>\r\n\r\n {!isNotesEditMode && !!presetNotes && (\r\n <IconButton\r\n onClick={() => setNotesEditMode(true)}\r\n style={{ padding: '4px' }}\r\n >\r\n <EditIcon fontSize=\"small\" />\r\n </IconButton>\r\n )}\r\n </ListSubheader>\r\n\r\n <ListItem\r\n className={classes.listItem}\r\n style={{ borderBottom: 'None' }}\r\n >\r\n {isNotesEditMode || !presetNotes ? (\r\n <NotesForm\r\n id={booking.id}\r\n accommodationId={booking?.accommodation?.id}\r\n defaultValue={presetNotes}\r\n onCancel={() => setNotesEditMode(false)}\r\n onConfirm={newNote => setPresetNotes(newNote)}\r\n refetchParams={refetchParams}\r\n isActivity={booking.__typename === 'ActivityBookingType'}\r\n />\r\n ) : (\r\n presetNotes\r\n )}\r\n </ListItem>\r\n </List>\r\n\r\n {booking.isCanceled && bookingTotal && (\r\n <CancelledInfo\r\n isHandled={booking.isHandled}\r\n cancellationTime={booking.cancellationTime}\r\n total={bookingTotal}\r\n />\r\n )}\r\n </DialogContent>\r\n\r\n <DialogActions classes={{ root: classes.actionsRoot }}>\r\n {isEditCancelBtns && (\r\n <div>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={e => {\r\n e.stopPropagation();\r\n history.push(`/accommodations-bookings/${booking.id}/edit`);\r\n }}\r\n classes={{ root: classes.actionBtnRoot }}\r\n >\r\n {t('Edit')}\r\n </Button>\r\n <Button\r\n variant=\"outlined\"\r\n onClick={() => accommodationCancellationHandler(booking)}\r\n classes={{ root: classes.cancelBtnRoot }}\r\n >\r\n {t('Cancel Accommodation')}\r\n </Button>\r\n </div>\r\n )}\r\n <Button\r\n variant=\"outlined\"\r\n onClick={onClose}\r\n classes={{ root: classes.cancelBtnRoot }}\r\n >\r\n {t('Back')}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n\r\nexport default BookingsDetailsDialog;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n popover: {\r\n pointerEvents: 'none'\r\n },\r\n children: {\r\n display: 'inline',\r\n '&:hover': {\r\n cursor: 'pointer'\r\n }\r\n },\r\n listContainer: {\r\n backgroundColor: '#000000'\r\n }\r\n});\r\n","import React from 'react';\r\n\r\nimport Popover from '@material-ui/core/Popover';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst ListPopover = ({ children, list, maxWidth }) => {\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n\r\n const handlePopoverOpen = event => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handlePopoverClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const open = Boolean(anchorEl);\r\n\r\n return (\r\n <div style={{ display: 'inline' }}>\r\n <div\r\n className={classes.children}\r\n aria-owns={open ? 'mouse-over-popover-wrapper' : undefined}\r\n aria-haspopup=\"true\"\r\n onMouseEnter={handlePopoverOpen}\r\n onMouseLeave={handlePopoverClose}\r\n >\r\n {children}\r\n </div>\r\n\r\n <Popover\r\n id=\"mouse-over-popover\"\r\n className={classes.popover}\r\n open={open}\r\n anchorEl={anchorEl}\r\n anchorOrigin={{\r\n vertical: 'bottom',\r\n horizontal: 'center'\r\n }}\r\n transformOrigin={{\r\n vertical: 'top',\r\n horizontal: 'center'\r\n }}\r\n onClose={handlePopoverClose}\r\n disableRestoreFocus\r\n PaperProps={{ style: { maxWidth } }}\r\n >\r\n <div className={classes.listContainer}>{list}</div>\r\n </Popover>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ListPopover;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n numberIcon: {\r\n height: '24px',\r\n width: '24px',\r\n borderRadius: '50%',\r\n verticalAlign: 'bottom',\r\n backgroundColor: '#E3E3E3',\r\n display: 'inline-flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n '&:hover': {\r\n color: '#FFFFFF',\r\n backgroundColor: '#000000'\r\n }\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst NumberIcon = ({ number }) => {\r\n const classes = useStyles();\r\n\r\n return <div className={classes.numberIcon}>+{number}</div>;\r\n};\r\n\r\nexport default NumberIcon;\r\n","/* eslint-disable */\r\nimport gql from 'graphql-tag';\r\n\r\nexport const ALL_BOOKINGS = gql`\r\n query allBooking(\r\n $page: Int\r\n $orderBy: String\r\n $isHandled: Boolean\r\n $isHistory: Boolean\r\n $isCanceled: Boolean\r\n $businessOwnerId: Int\r\n $search: String\r\n ) {\r\n allBookings(\r\n page: $page\r\n orderBy: $orderBy\r\n isHandled: $isHandled\r\n isCanceled: $isCanceled\r\n isHistory: $isHistory\r\n businessOwnerId: $businessOwnerId\r\n numberOfBookingsPerPage: 11\r\n search: $search\r\n ) {\r\n ... on ActivityBookingType {\r\n id\r\n trekksoftId\r\n referenceNumber\r\n creationTime\r\n cancellationTime\r\n guestFirstName\r\n guestPhoneNumber\r\n guestEmail\r\n platform\r\n isCanceled\r\n isCanceledWithMain\r\n isHandled\r\n isRelated\r\n startingDate\r\n endingDate\r\n deactivationBooking\r\n checkInTime\r\n checkOutTime\r\n bookingType\r\n activityNotes\r\n guestLastName\r\n activity {\r\n id\r\n pricesType\r\n title\r\n schedule\r\n scheduleType\r\n }\r\n bookedAddOns {\r\n addOnCount\r\n totalPrice\r\n addOn {\r\n title\r\n }\r\n }\r\n guests {\r\n guestsNumber\r\n totalPrice\r\n participant {\r\n participant\r\n }\r\n }\r\n payments {\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n relatedAccommodationBooking {\r\n id\r\n fromDate\r\n toDate\r\n accommodation {\r\n id\r\n title\r\n prices {\r\n day\r\n }\r\n }\r\n guests {\r\n totalPrice\r\n guestsNumber\r\n participant {\r\n participant\r\n }\r\n }\r\n payments {\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n bookedAddOns {\r\n addOn {\r\n title\r\n }\r\n totalPrice\r\n addOnCount\r\n }\r\n }\r\n }\r\n ... on AccommodationBookingType {\r\n id\r\n referenceNumber\r\n creationTime\r\n isCanceled\r\n isCanceledWithMain\r\n isHandled\r\n isRelated\r\n bookingType\r\n bookingNotes\r\n cancellationTime\r\n guestFirstName\r\n guestLastName\r\n guestPhoneNumber\r\n guestEmail\r\n platform\r\n fromDate\r\n toDate\r\n deactivationBooking\r\n expediaReferenceNumber\r\n guests {\r\n totalPrice\r\n guestsNumber\r\n participant {\r\n participant\r\n }\r\n }\r\n bookedAddOns {\r\n addOn {\r\n title\r\n }\r\n totalPrice\r\n addOnCount\r\n }\r\n \r\n bookedMandatoryFees {\r\n mandatoryFee {\r\n title\r\n }\r\n mandatoryFeeCount\r\n totalPrice\r\n }\r\n \r\n accommodation {\r\n id\r\n title\r\n checkInTime\r\n checkOutTime\r\n prices {\r\n day\r\n }\r\n }\r\n payments {\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n relatedActivitiesBookings {\r\n id\r\n startingDate\r\n endingDate\r\n activity {\r\n id\r\n pricesType\r\n title\r\n scheduleType\r\n }\r\n guests {\r\n totalPrice\r\n guestsNumber\r\n participant {\r\n participant\r\n }\r\n }\r\n payments {\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n bookedAddOns {\r\n addOn {\r\n title\r\n }\r\n totalPrice\r\n addOnCount\r\n }\r\n }\r\n }\r\n }\r\n numberOfBookingsPages(\r\n isCanceled: $isCanceled\r\n isHistory: $isHistory\r\n isHandled: $isHandled\r\n businessOwnerId: $businessOwnerId\r\n numberOfBookingsPerPage: 11\r\n search: $search\r\n ) {\r\n totalBookingsNumber {\r\n allBookings\r\n activitiesBookings\r\n accommodationsBookings\r\n }\r\n pages {\r\n allBookings\r\n activitiesBookings\r\n accommodationsBookings\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const ACCOMMODATIONS_BOOKINGS = gql`\r\n query accommodationsBookings(\r\n $page: Int\r\n $orderBy: String\r\n $isHandled: Boolean\r\n $isHistory: Boolean\r\n $isCanceled: Boolean\r\n $startPeriod: Date\r\n $endPeriod: Date\r\n $businessOwnerId: Int\r\n $search: String\r\n ) {\r\n accommodationsBookings(\r\n page: $page\r\n orderBy: $orderBy\r\n isHandled: $isHandled\r\n isCanceled: $isCanceled\r\n isHistory: $isHistory\r\n startPeriod: $startPeriod\r\n endPeriod: $endPeriod\r\n businessOwnerId: $businessOwnerId\r\n numberOfBookingsPerPage: 11\r\n search: $search\r\n ) {\r\n id\r\n referenceNumber\r\n creationTime\r\n isCanceled\r\n isCanceledWithMain\r\n isHandled\r\n isRelated\r\n bookingType\r\n bookingNotes\r\n cancellationTime\r\n guestFirstName\r\n guestLastName\r\n guestPhoneNumber\r\n guestEmail\r\n platform\r\n expediaReferenceNumber\r\n fromDate\r\n toDate\r\n deactivationBooking\r\n guests {\r\n totalPrice\r\n guestsNumber\r\n participant {\r\n participant\r\n }\r\n }\r\n payments {\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n bookedAddOns {\r\n addOn {\r\n title\r\n }\r\n addOnCount\r\n totalPrice\r\n }\r\n accommodation {\r\n id\r\n title\r\n productCode\r\n checkInTime\r\n checkOutTime\r\n guestsNumber\r\n prices {\r\n day\r\n }\r\n }\r\n relatedActivitiesBookings {\r\n id\r\n startingDate\r\n endingDate\r\n activity {\r\n id\r\n pricesType\r\n title\r\n scheduleType\r\n }\r\n bookedAddOns {\r\n addOnCount\r\n totalPrice\r\n addOn {\r\n title\r\n }\r\n }\r\n guests {\r\n guestsNumber\r\n totalPrice\r\n participant {\r\n participant\r\n }\r\n }\r\n payments {\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n }\r\n }\r\n numberOfBookingsPages(\r\n businessOwnerId: $businessOwnerId\r\n isCanceled: $isCanceled\r\n isHistory: $isHistory\r\n isHandled: $isHandled\r\n numberOfBookingsPerPage: 11\r\n search: $search\r\n ) {\r\n totalBookingsNumber {\r\n allBookings\r\n activitiesBookings\r\n accommodationsBookings\r\n }\r\n pages {\r\n allBookings\r\n activitiesBookings\r\n accommodationsBookings\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const ACTIVITIES_BOOKINGS = gql`\r\n query activitiesBooking(\r\n $page: Int\r\n $orderBy: String\r\n $isHandled: Boolean\r\n $isHistory: Boolean\r\n $isCanceled: Boolean\r\n $startPeriod: Date\r\n $endPeriod: Date\r\n $businessOwnerId: Int\r\n $search: String\r\n ) {\r\n activitiesBookings(\r\n page: $page\r\n orderBy: $orderBy\r\n isHandled: $isHandled\r\n isCanceled: $isCanceled\r\n isHistory: $isHistory\r\n startPeriod: $startPeriod\r\n endPeriod: $endPeriod\r\n businessOwnerId: $businessOwnerId\r\n numberOfBookingsPerPage: 11\r\n search: $search\r\n ) {\r\n id\r\n trekksoftId\r\n referenceNumber\r\n schedule\r\n creationTime\r\n cancellationTime\r\n startingDate\r\n endingDate\r\n deactivationBooking\r\n checkInTime\r\n checkOutTime\r\n isHandled\r\n isCanceledWithMain\r\n isCanceled\r\n isRelated\r\n bookingType\r\n activityNotes\r\n guestFirstName\r\n guestPhoneNumber\r\n guestEmail\r\n platform\r\n guestLastName\r\n activity {\r\n id\r\n title\r\n schedule\r\n isPrivate\r\n productCode\r\n pricesType\r\n scheduleType\r\n maxParticipants\r\n }\r\n bookedAddOns {\r\n addOnCount\r\n totalPrice\r\n addOn {\r\n title\r\n }\r\n }\r\n guests {\r\n guestsNumber\r\n totalPrice\r\n participant {\r\n participant\r\n }\r\n }\r\n payments {\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n relatedAccommodationBooking {\r\n id\r\n fromDate\r\n toDate\r\n accommodation {\r\n id\r\n title\r\n prices {\r\n day\r\n }\r\n }\r\n guests {\r\n totalPrice\r\n guestsNumber\r\n participant {\r\n participant\r\n }\r\n }\r\n payments {\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n bookedAddOns {\r\n addOn {\r\n title\r\n }\r\n totalPrice\r\n addOnCount\r\n }\r\n }\r\n }\r\n numberOfBookingsPages(\r\n isCanceled: $isCanceled\r\n isHistory: $isHistory\r\n isHandled: $isHandled\r\n businessOwnerId: $businessOwnerId\r\n numberOfBookingsPerPage: 11\r\n search: $search\r\n ) {\r\n totalBookingsNumber {\r\n allBookings\r\n activitiesBookings\r\n accommodationsBookings\r\n }\r\n pages {\r\n allBookings\r\n activitiesBookings\r\n accommodationsBookings\r\n }\r\n }\r\n }\r\n`;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme=>({\r\n container: {\r\n height: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n overflow: 'hidden',\r\n paddingBottom: '40px',\r\n },\r\n tableCell: {\r\n fontSize: '13px',\r\n border: 'none',\r\n color: '#000000',\r\n padding: 0\r\n },\r\n table: {\r\n width: '100%',\r\n overflow: 'hidden',\r\n [theme.breakpoints.down('sm')]:{\r\n overflowX: 'scroll',\r\n behavior: 'smooth' ,\r\n display: 'block',\r\n width: '100%',\r\n }\r\n },\r\n heading: {\r\n color: '#071B27',\r\n fontWeight: 'bold',\r\n fontSize: '10px',\r\n fontFamily: 'Fira Sans',\r\n textTransform: 'uppercase',\r\n whiteSpace: 'nowrap'\r\n },\r\n orderIcon: {\r\n icon: {\r\n display: 'none'\r\n }\r\n },\r\n arrowCell: {\r\n padding: '0',\r\n width: '10px!important',\r\n margin: '0'\r\n },\r\n nameCell: {\r\n width: '155px',\r\n fontWeight: 'bold',\r\n paddingLeft: 0,\r\n paddingRight: '20px'\r\n },\r\n referenceCell: {\r\n minWidth: '120px',\r\n paddingLeft: '20px'\r\n },\r\n unitCell: {\r\n alignItems: 'center',\r\n width: '248px',\r\n wordWrap: 'break-word',\r\n paddingRight: '20px'\r\n },\r\n unitIcon: {\r\n fill: '#0E8BB4',\r\n verticalAlign: 'bottom',\r\n marginRight: '10px'\r\n },\r\n unitContent: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n guestsContent: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n guestsCell: {\r\n alignItems: 'center',\r\n width: '115px',\r\n paddingRight: '30px'\r\n },\r\n cellText: {\r\n display: 'flex',\r\n height: '48px',\r\n alignItems: 'center'\r\n },\r\n checkInCell: {\r\n width: '80px'\r\n },\r\n iconButton: {\r\n padding: '0px 0px 0px 14px',\r\n '&:hover': {\r\n backgroundColor: 'transparent'\r\n }\r\n },\r\n title: {\r\n display: 'inline'\r\n },\r\n closeIcon: {\r\n fontSize: '21px'\r\n },\r\n checkOutCell: {\r\n width: '85px',\r\n paddingLeft: '5px',\r\n paddingRight: '20px'\r\n },\r\n platformCell: {\r\n width: '96px',\r\n paddingLeft: '20px'\r\n },\r\n addOnsCell: {\r\n width: '100px',\r\n paddingLeft: '20px',\r\n paddingRight: '20px'\r\n },\r\n notesCell: {\r\n width: '200px',\r\n paddingLeft: '20px',\r\n paddingRight: '20px'\r\n },\r\n addOnTitle: {\r\n display: 'inline',\r\n paddingRight: '20px'\r\n },\r\n list: {\r\n padding: '10px',\r\n margin: '0',\r\n fontSize: '10px',\r\n color: '#FFFFFF'\r\n },\r\n tableRow: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#E2F5F8'\r\n }\r\n },\r\n\r\n disabledArea: {\r\n position: 'relative',\r\n '&::after': {\r\n content: \"''\",\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n height: '100%',\r\n width: '100%',\r\n background: 'black',\r\n opacity: 0.2\r\n }\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import { useEffect } from 'react';\r\n\r\nexport const useSyncDialogContent = (data, setDialogContent) => {\r\n useEffect(() => {\r\n setDialogContent(prev => {\r\n if (prev?.id) {\r\n return data?.allBookings?.find(({ id }) => id === prev.id) || {};\r\n }\r\n\r\n return {};\r\n });\r\n }, [data]);\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport moment from 'moment';\r\nimport classNames from 'classnames';\r\nimport { useSnackbar } from 'notistack';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\n\r\nimport StarBorderRoundedIcon from '@material-ui/icons/StarBorderRounded';\r\nimport HomeOutlinedIcon from '@material-ui/icons/HomeOutlined';\r\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\r\n\r\nimport TrendingFlatIcon from '@material-ui/icons/TrendingFlat';\r\n\r\nimport {\r\n Typography,\r\n IconButton,\r\n TableRow,\r\n TableHead,\r\n TableContainer,\r\n TableCell,\r\n TableBody,\r\n Table,\r\n TableSortLabel\r\n} from '@material-ui/core';\r\n\r\nimport {\r\n BookedAddOns,\r\n guestsDetailsInformation,\r\n guestsSumSeats,\r\n isParticipantInfo,\r\n getActivityBookingTotalInfo,\r\n getAccommodationBookingTotalInfo\r\n} from 'utils/bookings/prepareBookingsData';\r\n\r\nimport { EditIcon } from 'components/icons';\r\nimport Pagination from 'components/pagination/Pagination';\r\nimport BookingsDetailsDialogDialog from 'components/booking-details-dialog/BookingDetailsDialog';\r\nimport ListPopover from 'components/list-popover/ListPopover';\r\nimport NumberIcon from 'components/number-icon/NumberIcon';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport {\r\n ALL_BOOKINGS,\r\n ACCOMMODATIONS_BOOKINGS,\r\n ACTIVITIES_BOOKINGS\r\n} from 'graphql/queries/bookings';\r\n\r\nimport {\r\n CANCEL_ACCOMMODATION_BOOKING,\r\n CANCEL_ACTIVITY_BOOKING\r\n} from 'graphql/mutations/booking';\r\n\r\nimport useStyles from './styles';\r\nimport { InfoOutlined } from '@material-ui/icons';\r\nimport { useSyncDialogContent } from '../../../../hooks/useSyncDialodContent';\r\n\r\nconst queriesConfig = {\r\n allBookings: ALL_BOOKINGS,\r\n activitiesBookings: ACTIVITIES_BOOKINGS,\r\n accommodationsBookings: ACCOMMODATIONS_BOOKINGS\r\n};\r\n\r\nconst headingsConfig = classes => {\r\n return [\r\n {\r\n label: 'Reference • Date',\r\n align: 'left',\r\n sortBy: 'creation_time',\r\n cellClassName: classes.referenceCell\r\n },\r\n {\r\n label: 'Booking name',\r\n sortBy: 'guest_first_name',\r\n cellClassName: classes.nameCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Accommodations/Activities',\r\n sortBy: 'title',\r\n cellClassName: classes.unitCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'NO. of guests',\r\n sortBy: 'guests',\r\n cellClassName: classes.guestsCell\r\n },\r\n {\r\n label: 'Check-in',\r\n sortBy: 'check_in_time',\r\n cellClassName: classes.checkInCell,\r\n align: 'left'\r\n },\r\n {\r\n label: '',\r\n cellClassName: classes.arrowCell,\r\n align: 'left',\r\n sortBy: ''\r\n },\r\n {\r\n label: 'Check-out',\r\n sortBy: 'check_out_time',\r\n cellClassName: classes.checkOutCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Platform',\r\n sortBy: 'platform',\r\n cellClassName: classes.platformCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Add-ons',\r\n cellClassName: classes.addOnsCell,\r\n sortBy: '',\r\n align: 'left'\r\n },\r\n {\r\n label: 'Notes',\r\n cellClassName: classes.notesCell,\r\n sortBy: '',\r\n align: 'left'\r\n },\r\n { label: 'Actions', sortBy: '', align: 'right' }\r\n ];\r\n};\r\n\r\nconst ACCOMMODATION_TYPE = 'Accommodation';\r\nconst ACTIVITY_TYPE = 'Activity';\r\n\r\nfunction CurrentBookingsListTable({\r\n bookingsQueryType,\r\n businessOwner,\r\n search\r\n}) {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const confirm = React.useContext(ConfirmContext);\r\n const history = useHistory();\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [dialogContent, setDialogContent] = React.useState({});\r\n\r\n const openInfoDialog = booking => {\r\n setOpen(true);\r\n setDialogContent(booking);\r\n };\r\n\r\n const onClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const [order, setOrder] = React.useState('desc');\r\n const [orderBy, setOrderBy] = React.useState('creation_time');\r\n\r\n const [cancelAccommodationBooking] = useMutation(\r\n CANCEL_ACCOMMODATION_BOOKING\r\n );\r\n const [cancelActivityBooking] = useMutation(CANCEL_ACTIVITY_BOOKING);\r\n\r\n const QUERY = queriesConfig[bookingsQueryType];\r\n\r\n const [page, setPage] = React.useState(0);\r\n\r\n const variables = {\r\n page: page,\r\n orderBy: order === 'asc' ? orderBy : `-${orderBy}`,\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id,\r\n search: search || ''\r\n };\r\n\r\n const { data, refetch } = useQuery(QUERY, { variables });\r\n\r\n useSyncDialogContent(data, setDialogContent);\r\n\r\n const accommodationCancellationHandler = item => {\r\n confirm({\r\n title: `Cancel Booking?`,\r\n warningText: `${\r\n item.relatedActivitiesBookings.length && !item.isRelated\r\n ? 'Please note that related booking also will be deleted'\r\n : ''\r\n }`,\r\n description: `${item.fromDate} — ${item.toDate} • ${item.guestFirstName} ${item.guestLastName} • ${item.accommodation.title}`,\r\n confirmationText: 'Cancel Booking',\r\n cancellationText: 'Back',\r\n translate: false\r\n }).then(() =>\r\n cancelAccommodationBooking({ variables: { id: item.id } }).then(() => {\r\n enqueueSnackbar(t('Accommodation booking was successfully canceled!'), {\r\n variant: 'success'\r\n });\r\n\r\n if (data[bookingsQueryType].length <= 1 && page) {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n } else {\r\n refetch({ page });\r\n }\r\n })\r\n );\r\n };\r\n const activityCancellationHandler = item => {\r\n confirm({\r\n title: `Cancel Booking?`,\r\n warningText: `${\r\n item.relatedAccommodationBooking.length && !item.isRelated\r\n ? 'Please note that related booking also will be deleted'\r\n : ''\r\n }`,\r\n description: `${item.startingDate ? item.startingDate : '-'} — ${\r\n item.checkOutTime\r\n ? moment(item.checkOutTime, 'HH:mm:ssZZ').format('HH:mm:ss')\r\n : '-'\r\n } \r\n • ${item.guestFirstName} ${item.guestLastName} • ${item.activity.title}`,\r\n confirmationText: 'Cancel Booking',\r\n cancellationText: 'Back',\r\n translate: false\r\n }).then(() =>\r\n cancelActivityBooking({ variables: { ids: [item.id] } }).then(() => {\r\n enqueueSnackbar(t('Activity booking was successfully canceled!'), {\r\n variant: 'success'\r\n });\r\n\r\n if (data[bookingsQueryType].length <= 1 && page) {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n } else {\r\n refetch({ page });\r\n }\r\n })\r\n );\r\n };\r\n\r\n const onPageChangeHandler = (e, page) => {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n };\r\n\r\n const handleRequestSort = (event, property) => {\r\n const isAsc = orderBy === property && order === 'asc';\r\n setOrder(isAsc ? 'desc' : 'asc');\r\n setOrderBy(property);\r\n };\r\n const createSortHandler = property => event => {\r\n handleRequestSort(event, property);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (search === undefined) return;\r\n setPage(0);\r\n }, [search]);\r\n\r\n React.useEffect(() => {\r\n setPage(0);\r\n refetch();\r\n }, [bookingsQueryType, refetch]);\r\n\r\n return (\r\n <TableContainer component=\"div\" classes={{ root: classes.container }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead className={classes.tableHead}>\r\n <TableRow>\r\n {headingsConfig(classes).map(heading => (\r\n <TableCell\r\n key={heading.label}\r\n align={heading.align}\r\n style={{ paddingBottom: 15 }}\r\n className={classNames(classes.tableCell, heading.cellClassName)}\r\n sortDirection={orderBy === heading.label ? order : false}\r\n >\r\n <TableSortLabel\r\n active={orderBy === heading.sortBy && orderBy !== ''}\r\n direction={orderBy === heading.sortBy ? order : 'asc'}\r\n onClick={createSortHandler(heading.sortBy)}\r\n className={classes.heading}\r\n disabled={heading.sortBy === ''}\r\n hideSortIcon={heading.sortBy === ''}\r\n >\r\n {t(heading.label)}\r\n </TableSortLabel>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {data &&\r\n data[bookingsQueryType] &&\r\n data[bookingsQueryType].map(booking => (\r\n <TableRow\r\n key={booking.id}\r\n classes={{ root: classes.tableRow }}\r\n onClick={e => {\r\n if (booking.deactivationBooking) return;\r\n\r\n e.stopPropagation();\r\n openInfoDialog(booking);\r\n }}\r\n className={classNames({\r\n [classes.disabledArea]: booking.deactivationBooking\r\n })}\r\n >\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.referenceCell\r\n )}\r\n align=\"left\"\r\n >\r\n <Typography>\r\n {booking.trekksoftId || booking.expediaReferenceNumber\r\n ? booking.trekksoftId || booking.expediaReferenceNumber\r\n : booking.referenceNumber}\r\n </Typography>\r\n <Typography>{booking.creationTime}</Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.nameCell)}\r\n align=\"left\"\r\n >\r\n <Typography className={classes.nameCell}>\r\n {booking.deactivationBooking\r\n ? 'Deactivation Booking'\r\n : `${booking.guestFirstName} ${booking.guestLastName}`}\r\n </Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.unitCell)}\r\n align=\"left\"\r\n >\r\n <div className={classes.unitContent}>\r\n {booking.bookingType === ACTIVITY_TYPE && (\r\n <StarBorderRoundedIcon\r\n fontSize=\"small\"\r\n className={classes.unitIcon}\r\n ></StarBorderRoundedIcon>\r\n )}\r\n\r\n {booking.bookingType === ACCOMMODATION_TYPE && (\r\n <HomeOutlinedIcon\r\n fontSize=\"small\"\r\n className={classes.unitIcon}\r\n ></HomeOutlinedIcon>\r\n )}\r\n\r\n <Typography className={classes.title}>\r\n {booking.bookingType === ACCOMMODATION_TYPE &&\r\n booking.accommodation.title}\r\n\r\n {booking.bookingType === ACTIVITY_TYPE &&\r\n booking.activity.title}\r\n </Typography>\r\n </div>\r\n </TableCell>\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.guestsCell)}\r\n align=\"left\"\r\n >\r\n <div className={classes.guestsContent}>\r\n {booking.guests.length === 0 && `—`}\r\n {booking.guests.length !== 0 && booking.guests.length <= 2 && (\r\n <Typography className={classes.cellText}>\r\n {guestsSumSeats(booking.guests)}\r\n {isParticipantInfo(booking.guests) &&\r\n ` (${guestsDetailsInformation(booking.guests, t)})`}\r\n </Typography>\r\n )}\r\n {booking.guests.length !== 0 && booking.guests.length > 2 && (\r\n <Typography className={classes.cellText}>\r\n {guestsSumSeats(booking.guests)} (\r\n {guestsDetailsInformation(\r\n booking.guests.slice(0, 2),\r\n t\r\n )}\r\n ...\r\n </Typography>\r\n )}\r\n\r\n {booking.guests.length !== 0 &&\r\n booking.guests &&\r\n booking.guests.length > 2 && (\r\n <ListPopover\r\n list={\r\n <ul className={classes.list}>\r\n {booking.guests.slice(2).map((guest, index) => {\r\n return (\r\n <li key={index}>\r\n {guest.guestsNumber} x{' '}\r\n {guest.participant[0].participant}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n }\r\n >\r\n <NumberIcon number={booking.guests.length - 2} />\r\n </ListPopover>\r\n )}\r\n </div>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.checkInCell)}\r\n align=\"left\"\r\n >\r\n {booking.bookingType === ACCOMMODATION_TYPE &&\r\n `${booking.fromDate} ${moment(\r\n booking.accommodation.checkInTime,\r\n 'HH:mm:ssZZ'\r\n ).format('HH:mm')}`}\r\n\r\n {booking.bookingType === ACTIVITY_TYPE &&\r\n booking.checkInTime &&\r\n `${moment(booking.startingDate).format('YYYY-MM-DD')} \r\n ${moment(booking.checkInTime).format('HH:mm')}`}\r\n {booking.bookingType === ACTIVITY_TYPE &&\r\n !booking.checkInTime &&\r\n booking.startingDate &&\r\n `${moment(booking.startingDate).format('YYYY-MM-DD')}`}\r\n {booking.bookingType === ACTIVITY_TYPE &&\r\n !booking.checkInTime &&\r\n !booking.startingDate &&\r\n `—`}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell)}\r\n align=\"left\"\r\n >\r\n <TrendingFlatIcon\r\n style={{ fill: '9B9B9B', width: '25px', height: '20px' }}\r\n />\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.checkOutCell\r\n )}\r\n align=\"left\"\r\n >\r\n {booking.bookingType === ACCOMMODATION_TYPE &&\r\n `${booking.toDate} ${moment(\r\n booking.accommodation.checkOutTime,\r\n 'HH:mm:ssZZ'\r\n ).format('HH:mm')}`}\r\n {booking.bookingType === ACTIVITY_TYPE &&\r\n booking.checkOutTime &&\r\n `${moment(booking.checkOutTime).format('YYYY-MM-DD')} \r\n ${moment(booking.checkOutTime).format('HH:mm')} `}\r\n {booking.bookingType === ACTIVITY_TYPE &&\r\n !booking.checkOutTime &&\r\n !booking.endingDate &&\r\n '—'}\r\n {booking.bookingType === ACTIVITY_TYPE &&\r\n booking.endingDate &&\r\n `${moment(booking.endingDate).format('YYYY-MM-DD')}`}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.platformCell\r\n )}\r\n align=\"left\"\r\n >\r\n {t(booking.platform)}\r\n </TableCell>\r\n\r\n <TableCell\r\n style={{ paddingBottom: 5 }}\r\n className={classNames(classes.tableCell, classes.addOnsCell)}\r\n align=\"left\"\r\n >\r\n {booking.bookedAddOns.length <= 2 && (\r\n <Typography className={classes.addOnTitle}>\r\n {BookedAddOns(booking.bookedAddOns)}\r\n </Typography>\r\n )}\r\n {booking.bookedAddOns.length > 2 && (\r\n <Typography className={classes.addOnTitle}>\r\n {BookedAddOns(booking.bookedAddOns.slice(0, 2))} ...\r\n </Typography>\r\n )}\r\n\r\n {booking.bookedAddOns.length > 2 && (\r\n <ListPopover\r\n list={\r\n <ul className={classes.list}>\r\n {booking.bookedAddOns.slice(2).map((o, index) => {\r\n return (\r\n <li key={index}>\r\n {o.addOnCount} x {o.addOn[0].title}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n }\r\n >\r\n <NumberIcon number={booking.bookedAddOns.length - 2} />\r\n </ListPopover>\r\n )}\r\n </TableCell>\r\n\r\n <TableCell\r\n style={{ paddingBottom: 5 }}\r\n className={classNames(classes.tableCell, classes.notesCell)}\r\n align=\"left\"\r\n >\r\n <ListPopover\r\n maxWidth={300}\r\n list={\r\n <div className={classes.list} style={{ minWidth: 120 }}>\r\n {booking.bookingNotes ||\r\n booking.activityNotes ||\r\n 'There are no notes yet.'}\r\n </div>\r\n }\r\n >\r\n <InfoOutlined />\r\n </ListPopover>\r\n </TableCell>\r\n\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classes.tableCell}\r\n align=\"right\"\r\n >\r\n <div style={{ display: 'inline-flex', paddingRight: '10px' }}>\r\n <IconButton\r\n className={classes.iconButton}\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n aria-label=\"edit\"\r\n onClick={e => {\r\n e.stopPropagation();\r\n if (booking.accommodation) {\r\n history.push(\r\n `/accommodations-bookings/${booking.id}/edit`\r\n );\r\n } else {\r\n history.push(\r\n `/activities-bookings/${booking.id}/edit`\r\n );\r\n }\r\n }}\r\n >\r\n <EditIcon />\r\n </IconButton>\r\n <IconButton\r\n onClick={\r\n booking.bookingType === ACCOMMODATION_TYPE\r\n ? e => {\r\n e.stopPropagation();\r\n accommodationCancellationHandler(booking);\r\n }\r\n : e => {\r\n e.stopPropagation();\r\n activityCancellationHandler(booking);\r\n }\r\n }\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n className={classes.iconButton}\r\n aria-label=\"delete\"\r\n >\r\n <HighlightOffIcon className={classes.closeIcon} />\r\n </IconButton>\r\n </div>\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n\r\n <BookingsDetailsDialogDialog\r\n onClose={onClose}\r\n open={open}\r\n booking={dialogContent}\r\n bookingTotal={\r\n dialogContent.bookingType === ACTIVITY_TYPE\r\n ? getActivityBookingTotalInfo(dialogContent)\r\n : getAccommodationBookingTotalInfo(dialogContent)\r\n }\r\n refetchParams={{ query: QUERY, variables }}\r\n />\r\n </TableBody>\r\n </Table>\r\n\r\n {data && data[bookingsQueryType] && (\r\n <Pagination\r\n page={page + 1}\r\n count={data.numberOfBookingsPages.pages[bookingsQueryType]}\r\n amount = {Math.min(data.numberOfBookingsPages.totalBookingsNumber[bookingsQueryType],\r\n (page + 1) * 11)}\r\n total={\r\n data.numberOfBookingsPages.totalBookingsNumber[bookingsQueryType]\r\n }\r\n onChange={onPageChangeHandler}\r\n />\r\n )}\r\n </TableContainer>\r\n );\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(CurrentBookingsListTable);\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n formControl: {\r\n minWidth: '90px',\r\n display: 'inline'\r\n },\r\n selectInput: {\r\n fontSize: '13px',\r\n color: '#717171',\r\n '&::before': {\r\n border: 'none'\r\n }\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useMutation } from '@apollo/react-hooks';\r\n\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Select from '@material-ui/core/Select';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n\r\nimport {\r\n HANDLE_ACTIVITY_BOOKING,\r\n HANDLE_ACCOMMODATION_BOOKING\r\n} from 'graphql/mutations/booking';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst mutationsConfig = {\r\n Activity: HANDLE_ACTIVITY_BOOKING,\r\n Accommodation: HANDLE_ACCOMMODATION_BOOKING\r\n};\r\n\r\nfunction HandledCell({ booking, isHandledBooking, refetch }) {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const [isHandled, setIsHandled] = React.useState(isHandledBooking);\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const [handleBooking] = useMutation(mutationsConfig[booking.bookingType]);\r\n\r\n const handleClose = e => {\r\n e.stopPropagation();\r\n setOpen(false);\r\n };\r\n\r\n const handleOpen = e => {\r\n e.stopPropagation();\r\n setOpen(true);\r\n };\r\n\r\n const changeBookingHandledValue = (id, value) => {\r\n setIsHandled(value);\r\n booking.isHandled = value;\r\n handleBooking({ variables: { id: id, isHandled: value } })\r\n .then(() => refetch())\r\n .catch();\r\n };\r\n\r\n return (\r\n <FormControl className={classes.formControl}>\r\n <Select\r\n value={isHandled}\r\n open={open}\r\n onClose={e => handleClose(e)}\r\n onOpen={e => handleOpen(e)}\r\n className={classes.selectInput}\r\n onChange={event => {\r\n changeBookingHandledValue(booking.id, event.target.value);\r\n }}\r\n >\r\n <MenuItem value={true}>{t('Handled')}</MenuItem>\r\n <MenuItem value={false}>{t('Not handled')}</MenuItem>\r\n </Select>\r\n </FormControl>\r\n );\r\n}\r\n\r\nexport default HandledCell;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme=>({\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n overflow: 'hidden',\r\n \r\n },\r\n table: {\r\n width: '100%',\r\n overflow: 'hidden',\r\n [theme.breakpoints.down('sm')]:{\r\n overflowX: 'scroll',\r\n behavior: 'smooth' ,\r\n display:'block',\r\n width: '100%',\r\n }\r\n },\r\n tableCell: {\r\n fontSize: '13px',\r\n border: 'none',\r\n color: '#000000',\r\n padding: 0\r\n },\r\n heading: {\r\n color: '#071B27',\r\n fontWeight: 'bold',\r\n fontSize: '10px',\r\n fontFamily: 'Fira Sans',\r\n textTransform: 'uppercase',\r\n whiteSpace: 'nowrap'\r\n },\r\n referenceCell: {\r\n width: '155px',\r\n paddingLeft: '20px',\r\n paddingRight: '0'\r\n },\r\n unitCell: {\r\n alignItems: 'center',\r\n minWidth: '300px',\r\n paddingRight: '20px',\r\n wordWrap: 'break-word'\r\n },\r\n unitContent: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n unitIcon: {\r\n fill: '#0E8BB4',\r\n display: 'inline',\r\n verticalAlign: 'bottom',\r\n marginRight: '10px'\r\n },\r\n title: {\r\n display: 'inline'\r\n },\r\n platformCell: {\r\n width: '96px',\r\n paddingLeft: '20px'\r\n },\r\n nameCell: {\r\n width: '155px',\r\n paddingRight: '20px',\r\n fontWeight: 'bold'\r\n },\r\n guestsCell: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n paddingRight: '80px',\r\n width: '155px'\r\n },\r\n cellText: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '48px',\r\n marginRight: '10px'\r\n },\r\n orderIcon: {\r\n icon: {\r\n display: 'none'\r\n }\r\n },\r\n cancellationTimeCell: {\r\n width: '175px',\r\n paddingLeft: '70px'\r\n },\r\n\r\n statusCell: {\r\n width: '100px',\r\n color: '#717171!important',\r\n paddingLeft: '30px',\r\n [theme.breakpoints.down]:{\r\n width: '150px',\r\n paddingLeft: '30px',\r\n }\r\n },\r\n formControl: {\r\n minWidth: '90px',\r\n display: 'inline'\r\n },\r\n selectInput: {\r\n fontSize: '13px',\r\n color: '#717171',\r\n '&::before': {\r\n border: 'none'\r\n }\r\n },\r\n list: {\r\n padding: '10px',\r\n margin: '0',\r\n fontSize: '10px',\r\n color: '#FFFFFF'\r\n },\r\n tableRow: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#E2F5F8'\r\n }\r\n },\r\n disabledArea: {\r\n position: 'relative',\r\n '&::after': {\r\n content: \"''\",\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n height: '100%',\r\n width: '100%',\r\n background: 'black',\r\n opacity: 0.2\r\n }\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport moment from 'moment';\r\nimport classNames from 'classnames';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { useQuery } from '@apollo/react-hooks';\r\n\r\nimport {\r\n Typography,\r\n TableRow,\r\n TableHead,\r\n TableContainer,\r\n TableCell,\r\n TableBody,\r\n Table\r\n} from '@material-ui/core';\r\nimport StarBorderRoundedIcon from '@material-ui/icons/StarBorderRounded';\r\nimport HomeOutlinedIcon from '@material-ui/icons/HomeOutlined';\r\n\r\nimport TableSortLabel from '@material-ui/core/TableSortLabel';\r\nimport Pagination from 'components/pagination/Pagination';\r\nimport HandledCell from 'components/handled-status-cell/handledCell';\r\n\r\nimport BookingsDetailsDialogDialog from 'components/booking-details-dialog/BookingDetailsDialog';\r\n\r\nimport { ALL_BOOKINGS } from 'graphql/queries/bookings';\r\nimport useStyles from './styles';\r\nimport {\r\n getAccommodationBookingTotalInfo,\r\n getActivityBookingTotalInfo,\r\n guestsDetailsInformation,\r\n guestsSumSeats,\r\n isParticipantInfo\r\n} from 'utils/bookings/prepareBookingsData';\r\nimport ListPopover from 'components/list-popover/ListPopover';\r\nimport NumberIcon from '../../../../components/number-icon/NumberIcon';\r\nimport { InfoOutlined } from '@material-ui/icons';\r\nimport { useSyncDialogContent } from '../../../../hooks/useSyncDialodContent';\r\n\r\nconst cancelledBookingsQueryVariablesConfig = (page, order, orderBy) => {\r\n return {\r\n all: {\r\n isCanceled: true,\r\n page: page,\r\n orderBy: order === 'asc' ? orderBy : `-${orderBy}`\r\n },\r\n handled: {\r\n isCanceled: true,\r\n isHandled: true,\r\n page: page,\r\n orderBy: order === 'asc' ? orderBy : `-${orderBy}`\r\n },\r\n notHandled: {\r\n isCanceled: true,\r\n isHandled: false,\r\n page: page,\r\n orderBy: order === 'asc' ? orderBy : `-${orderBy}`\r\n }\r\n };\r\n};\r\n\r\nconst ACCOMMODATION_TYPE = 'Accommodation';\r\nconst ACTIVITY_TYPE = 'Activity';\r\n\r\nconst headingsConfig = classes => {\r\n return [\r\n {\r\n label: 'Reference • Date',\r\n align: 'left',\r\n sortBy: 'creation_time',\r\n cellClassName: classes.referenceCell\r\n },\r\n {\r\n label: 'Booking name',\r\n sortBy: 'guest_first_name',\r\n cellClassName: classes.nameCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Accommodations/Activities',\r\n sortBy: 'title',\r\n cellClassName: classes.unitCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'NO. of guests',\r\n sortBy: 'guests',\r\n cellClassName: classes.guestsCell\r\n },\r\n {\r\n label: 'Platform',\r\n sortBy: 'platform',\r\n cellClassName: classes.platformCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Cancelled date',\r\n cellClassName: classes.cancellationTimeCell,\r\n sortBy: 'cancellation_time',\r\n align: 'left'\r\n },\r\n {\r\n label: 'Notes',\r\n cellClassName: classes.notesCell,\r\n sortBy: '',\r\n align: 'left'\r\n },\r\n {\r\n label: 'Status',\r\n cellClassName: classes.statusCell,\r\n sortBy: '',\r\n align: 'right'\r\n }\r\n ];\r\n};\r\n\r\nfunction CancelledBookingsListTable({ handledStatus, businessOwner, search }) {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [dialogContent, setDialogContent] = React.useState({});\r\n const [order, setOrder] = React.useState('desc');\r\n const [orderBy, setOrderBy] = React.useState('creation_time');\r\n const [page, setPage] = React.useState(0);\r\n\r\n const openInfoDialog = booking => {\r\n setOpen(true);\r\n setDialogContent(booking);\r\n };\r\n\r\n const onClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const variables = {\r\n ...cancelledBookingsQueryVariablesConfig(page, order, orderBy)[\r\n handledStatus\r\n ],\r\n search: search || '',\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n };\r\n\r\n const { data, refetch } = useQuery(ALL_BOOKINGS, {\r\n variables\r\n });\r\n\r\n useSyncDialogContent(data, setDialogContent);\r\n\r\n const onPageChangeHandler = (e, page) => {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n };\r\n\r\n const handleRequestSort = (event, property) => {\r\n const isAsc = orderBy === property && order === 'asc';\r\n setOrder(isAsc ? 'desc' : 'asc');\r\n setOrderBy(property);\r\n };\r\n\r\n const createSortHandler = property => event => {\r\n handleRequestSort(event, property);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (search === undefined) return;\r\n setPage(0);\r\n }, [search]);\r\n\r\n React.useEffect(() => {\r\n setPage(0);\r\n refetch();\r\n }, [handledStatus, refetch]);\r\n\r\n return (\r\n <TableContainer component=\"div\" classes={{ root: classes.container }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead className={classes.tableHead}>\r\n <TableRow>\r\n {headingsConfig(classes).map(heading => (\r\n <TableCell\r\n key={heading.label}\r\n align={heading.align}\r\n style={{ paddingBottom: 15 }}\r\n className={classNames(classes.tableCell, heading.cellClassName)}\r\n sortDirection={orderBy === heading.label ? order : false}\r\n >\r\n <TableSortLabel\r\n active={orderBy === heading.sortBy && orderBy !== ''}\r\n direction={orderBy === heading.sortBy ? order : 'asc'}\r\n onClick={createSortHandler(heading.sortBy)}\r\n className={classes.heading}\r\n disabled={heading.sortBy === ''}\r\n hideSortIcon={heading.sortBy === ''}\r\n >\r\n {t(heading.label)}\r\n </TableSortLabel>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {data &&\r\n data.allBookings &&\r\n data.allBookings.map(booking => (\r\n <TableRow\r\n key={booking.id}\r\n classes={{ root: classes.tableRow }}\r\n onClick={e => {\r\n if (booking.deactivationBooking) return;\r\n e.stopPropagation();\r\n openInfoDialog(booking);\r\n }}\r\n className={classNames({\r\n [classes.disabledArea]: booking.deactivationBooking\r\n })}\r\n >\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.referenceCell\r\n )}\r\n align=\"left\"\r\n >\r\n <Typography>\r\n {booking.trekksoftId || booking.expediaReferenceNumber\r\n ? booking.trekksoftId || booking.expediaReferenceNumber\r\n : booking.referenceNumber}\r\n </Typography>\r\n <Typography>{booking.creationTime}</Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.nameCell)}\r\n align=\"left\"\r\n >\r\n <Typography className={classes.nameCell}>\r\n {booking.deactivationBooking\r\n ? 'Deactivation Booking'\r\n : `${booking.guestFirstName} ${booking.guestLastName}`}\r\n </Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.unitCell)}\r\n align=\"left\"\r\n >\r\n <div className={classes.unitContent}>\r\n {booking.bookingType === ACTIVITY_TYPE && (\r\n <StarBorderRoundedIcon\r\n fontSize=\"small\"\r\n className={classes.unitIcon}\r\n ></StarBorderRoundedIcon>\r\n )}\r\n {booking.bookingType === ACCOMMODATION_TYPE && (\r\n <HomeOutlinedIcon\r\n fontSize=\"small\"\r\n className={classes.unitIcon}\r\n ></HomeOutlinedIcon>\r\n )}\r\n <Typography className={classes.title}>\r\n {booking.bookingType === ACCOMMODATION_TYPE &&\r\n booking.accommodation.title}\r\n\r\n {booking.bookingType === ACTIVITY_TYPE &&\r\n booking.activity.title}\r\n </Typography>\r\n </div>\r\n </TableCell>\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.guestsCell)}\r\n align=\"left\"\r\n >\r\n {booking.guests.length === 0 && `—`}\r\n {booking.guests.length !== 0 && booking.guests.length <= 2 && (\r\n <Typography className={classes.cellText}>\r\n {guestsSumSeats(booking.guests)}\r\n {isParticipantInfo(booking.guests) &&\r\n ` (${guestsDetailsInformation(booking.guests, t)})`}\r\n </Typography>\r\n )}\r\n {booking.guests.length !== 0 && booking.guests.length > 2 && (\r\n <Typography className={classes.cellText}>\r\n {guestsSumSeats(booking.guests)} (\r\n {guestsDetailsInformation(booking.guests.slice(0, 2), t)}\r\n ...\r\n </Typography>\r\n )}\r\n\r\n {booking.guests.length !== 0 &&\r\n booking.guests &&\r\n booking.guests.length > 2 && (\r\n <ListPopover\r\n list={\r\n <ul className={classes.list}>\r\n {booking.guests.slice(2).map((guest, index) => {\r\n return (\r\n <li key={index}>\r\n {guest.guestsNumber} x{' '}\r\n {guest.participant[0].participant}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n }\r\n >\r\n <NumberIcon number={booking.guests.length - 2} />\r\n </ListPopover>\r\n )}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.platformCell\r\n )}\r\n align=\"left\"\r\n >\r\n {t(booking.platform)}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.cancellationTimeCell\r\n )}\r\n align=\"left\"\r\n >\r\n <Typography>\r\n {moment(booking.cancellationTime).format('YYYY-MM-DD')}\r\n </Typography>\r\n <Typography>\r\n {moment(booking.cancellationTime).format('HH:mm')}\r\n </Typography>\r\n </TableCell>\r\n\r\n <TableCell\r\n style={{ paddingBottom: 5 }}\r\n className={classNames(classes.tableCell, classes.notesCell)}\r\n align=\"left\"\r\n >\r\n <ListPopover\r\n maxWidth={300}\r\n list={\r\n <div className={classes.list} style={{ minWidth: 120 }}>\r\n {booking.bookingNotes ||\r\n booking.activityNotes ||\r\n 'There are no notes yet.'}\r\n </div>\r\n }\r\n >\r\n <InfoOutlined />\r\n </ListPopover>\r\n </TableCell>\r\n\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.statusCell)}\r\n align=\"right\"\r\n >\r\n <HandledCell\r\n booking={booking}\r\n refetch={refetch}\r\n isHandledBooking={booking.isHandled}\r\n />\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n <BookingsDetailsDialogDialog\r\n onClose={onClose}\r\n open={open}\r\n booking={dialogContent}\r\n bookingTotal={\r\n dialogContent.bookingType === ACTIVITY_TYPE\r\n ? getActivityBookingTotalInfo(dialogContent)\r\n : getAccommodationBookingTotalInfo(dialogContent)\r\n }\r\n refetchParams={{ query: ALL_BOOKINGS, variables }}\r\n />\r\n </TableBody>\r\n </Table>\r\n {data && data.allBookings && (\r\n <Pagination\r\n page={page + 1}\r\n count={data.numberOfBookingsPages.pages.allBookings}\r\n amount = {Math.min(data.numberOfBookingsPages.totalBookingsNumber.allBookings,\r\n (page + 1) * 11)}\r\n total={data.numberOfBookingsPages.totalBookingsNumber.allBookings}\r\n onChange={onPageChangeHandler}\r\n />\r\n )}\r\n </TableContainer>\r\n );\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(CancelledBookingsListTable);\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme =>({\r\n container: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n overflow: 'hidden'\r\n },\r\n table: {\r\n width: '100%',\r\n overflow: 'hidden',\r\n [theme.breakpoints.down('sm')]:{\r\n overflowX: 'scroll',\r\n behavior: 'smooth' ,\r\n display: 'block',\r\n width: '100%',\r\n }\r\n },\r\n tableCell: {\r\n fontSize: '13px',\r\n border: 'none',\r\n color: '#000000',\r\n padding: 0\r\n },\r\n heading: {\r\n color: '#071B27',\r\n fontWeight: 'bold',\r\n fontSize: '10px',\r\n fontFamily: 'Fira Sans',\r\n textTransform: 'uppercase',\r\n whiteSpace: 'nowrap'\r\n },\r\n referenceCell: {\r\n width: '120px',\r\n paddingLeft: '20px',\r\n paddingRight: '40px'\r\n },\r\n unitCell: {\r\n alignItems: 'center',\r\n width: '470px',\r\n wordWrap: 'break-word',\r\n paddingRight: '10px'\r\n },\r\n unitContent: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n unitIcon: {\r\n fill: '#0E8BB4',\r\n display: 'inline',\r\n verticalAlign: 'bottom',\r\n marginRight: '10px'\r\n },\r\n title: {\r\n display: 'inline'\r\n },\r\n platformCell: {\r\n width: '96px',\r\n paddingLeft: '43px'\r\n },\r\n nameCell: {\r\n width: '155px',\r\n paddingRight: '80px',\r\n fontWeight: 'bold'\r\n },\r\n guestsCell: {\r\n alignItems: 'center',\r\n width: '255px',\r\n paddingLeft: '30px'\r\n },\r\n cellText: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n height: '48px',\r\n marginRight: '10px'\r\n },\r\n list: {\r\n padding: '10px',\r\n margin: '0',\r\n fontSize: '10px',\r\n color: '#FFFFFF'\r\n },\r\n tableRow: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#E2F5F8'\r\n }\r\n },\r\n disabledArea: {\r\n position: 'relative',\r\n '&::after': {\r\n content: \"''\",\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n height: '100%',\r\n width: '100%',\r\n background: 'black',\r\n opacity: 0.2\r\n }\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\nimport { useQuery } from '@apollo/react-hooks';\r\n\r\nimport {\r\n Typography,\r\n TableRow,\r\n TableHead,\r\n TableContainer,\r\n TableCell,\r\n TableBody,\r\n Table\r\n} from '@material-ui/core';\r\n\r\nimport TableSortLabel from '@material-ui/core/TableSortLabel';\r\nimport StarBorderRoundedIcon from '@material-ui/icons/StarBorderRounded';\r\nimport HomeOutlinedIcon from '@material-ui/icons/HomeOutlined';\r\n\r\nimport {\r\n ALL_BOOKINGS,\r\n ACCOMMODATIONS_BOOKINGS,\r\n ACTIVITIES_BOOKINGS\r\n} from 'graphql/queries/bookings';\r\n\r\nimport Pagination from 'components/pagination/Pagination';\r\nimport BookingsDetailsDialogDialog from 'components/booking-details-dialog/BookingDetailsDialog';\r\n\r\nimport {\r\n getAccommodationBookingTotalInfo,\r\n getActivityBookingTotalInfo,\r\n guestsDetailsInformation,\r\n guestsSumSeats,\r\n isParticipantInfo\r\n} from 'utils/bookings/prepareBookingsData';\r\n\r\nimport ListPopover from 'components/list-popover/ListPopover';\r\nimport NumberIcon from '../../../../components/number-icon/NumberIcon';\r\nimport useStyles from './styles';\r\nimport { InfoOutlined } from '@material-ui/icons';\r\nimport { useSyncDialogContent } from '../../../../hooks/useSyncDialodContent';\r\n\r\nconst queriesConfig = {\r\n allBookings: ALL_BOOKINGS,\r\n activitiesBookings: ACTIVITIES_BOOKINGS,\r\n accommodationsBookings: ACCOMMODATIONS_BOOKINGS\r\n};\r\n\r\nconst ACCOMMODATION_TYPE = 'Accommodation';\r\nconst ACTIVITY_TYPE = 'Activity';\r\n\r\nconst headingsConfig = classes => {\r\n return [\r\n {\r\n label: 'Reference • Date',\r\n align: 'left',\r\n sortBy: 'creation_time',\r\n cellClassName: classes.referenceCell\r\n },\r\n {\r\n label: 'Booking name',\r\n sortBy: 'guest_first_name',\r\n cellClassName: classes.nameCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Accommodations/Activities',\r\n sortBy: 'title',\r\n cellClassName: classes.unitCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'NO. of guests',\r\n sortBy: 'guests',\r\n cellClassName: classes.guestsCell\r\n },\r\n {\r\n label: 'Notes',\r\n cellClassName: classes.notesCell,\r\n sortBy: '',\r\n align: 'left'\r\n },\r\n {\r\n label: 'Platform',\r\n sortBy: 'platform',\r\n cellClassName: classes.platformCell,\r\n align: 'right'\r\n }\r\n ];\r\n};\r\n\r\nfunction HistoryBookingsListTable({\r\n bookingsQueryType,\r\n businessOwner,\r\n search\r\n}) {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [dialogContent, setDialogContent] = React.useState({});\r\n const [order, setOrder] = React.useState('desc');\r\n const [orderBy, setOrderBy] = React.useState('creation_time');\r\n\r\n const QUERY = queriesConfig[bookingsQueryType];\r\n\r\n const [page, setPage] = React.useState(0);\r\n\r\n const variables = {\r\n isHistory: true,\r\n page: page,\r\n orderBy: order === 'asc' ? orderBy : `-${orderBy}`,\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id,\r\n search: search || ''\r\n };\r\n\r\n const { data, refetch } = useQuery(QUERY, {\r\n variables\r\n });\r\n\r\n useSyncDialogContent(data, setDialogContent);\r\n\r\n const openInfoDialog = booking => {\r\n setOpen(true);\r\n setDialogContent(booking);\r\n };\r\n\r\n const onClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const onPageChangeHandler = (e, page) => {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n };\r\n\r\n const handleRequestSort = (event, property) => {\r\n const isAsc = orderBy === property && order === 'asc';\r\n setOrder(isAsc ? 'desc' : 'asc');\r\n setOrderBy(property);\r\n };\r\n\r\n const createSortHandler = property => event => {\r\n handleRequestSort(event, property);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (search === undefined) return;\r\n setPage(0);\r\n }, [search]);\r\n\r\n React.useEffect(() => {\r\n setPage(0);\r\n refetch();\r\n }, [bookingsQueryType, refetch]);\r\n\r\n return (\r\n <TableContainer component=\"div\" classes={{ root: classes.container }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead className={classes.tableHead}>\r\n <TableRow>\r\n {headingsConfig(classes).map(heading => (\r\n <TableCell\r\n key={heading.label}\r\n align={heading.align}\r\n style={{ paddingBottom: 15 }}\r\n className={classNames(classes.tableCell, heading.cellClassName)}\r\n sortDirection={orderBy === heading.label ? order : false}\r\n >\r\n <TableSortLabel\r\n active={orderBy === heading.sortBy}\r\n direction={orderBy === heading.sortBy ? order : 'asc'}\r\n onClick={createSortHandler(heading.sortBy)}\r\n className={classes.heading}\r\n hideSortIcon={heading.sortBy === ''}\r\n >\r\n {t(heading.label)}\r\n </TableSortLabel>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {data &&\r\n data[bookingsQueryType] &&\r\n data[bookingsQueryType].map(booking => (\r\n <TableRow\r\n key={booking.id}\r\n classes={{ root: classes.tableRow }}\r\n onClick={e => {\r\n if (booking.deactivationBooking) return;\r\n\r\n e.stopPropagation();\r\n openInfoDialog(booking);\r\n }}\r\n className={classNames({\r\n [classes.disabledArea]: booking.deactivationBooking\r\n })}\r\n >\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.referenceCell\r\n )}\r\n align=\"left\"\r\n >\r\n <Typography>\r\n {booking.trekksoftId || booking.expediaReferenceNumber\r\n ? booking.trekksoftId || booking.expediaReferenceNumber\r\n : booking.referenceNumber}\r\n </Typography>\r\n <Typography>{booking.creationTime}</Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.nameCell)}\r\n align=\"left\"\r\n >\r\n <Typography className={classes.nameCell}>\r\n {booking.deactivationBooking\r\n ? 'Deactivation Booking'\r\n : `${booking.guestFirstName} ${booking.guestLastName}`}\r\n </Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.unitCell)}\r\n align=\"left\"\r\n >\r\n <div className={classes.unitContent}>\r\n {booking.bookingType === ACTIVITY_TYPE && (\r\n <StarBorderRoundedIcon\r\n fontSize=\"small\"\r\n className={classes.unitIcon}\r\n ></StarBorderRoundedIcon>\r\n )}\r\n {booking.bookingType === ACCOMMODATION_TYPE && (\r\n <HomeOutlinedIcon\r\n fontSize=\"small\"\r\n className={classes.unitIcon}\r\n ></HomeOutlinedIcon>\r\n )}\r\n <Typography className={classes.title}>\r\n {booking.bookingType === ACCOMMODATION_TYPE &&\r\n booking.accommodation.title}\r\n\r\n {booking.bookingType === ACTIVITY_TYPE &&\r\n booking.activity.title}\r\n </Typography>\r\n </div>\r\n </TableCell>\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.guestsCell)}\r\n align=\"left\"\r\n >\r\n {booking.guests.length === 0 && `—`}\r\n {booking.guests.length !== 0 && booking.guests.length <= 5 && (\r\n <Typography className={classes.cellText}>\r\n {guestsSumSeats(booking.guests)}\r\n {isParticipantInfo(booking.guests) &&\r\n ` (${guestsDetailsInformation(booking.guests, t)})`}\r\n </Typography>\r\n )}\r\n {booking.guests.length !== 0 && booking.guests.length > 5 && (\r\n <Typography className={classes.cellText}>\r\n {guestsSumSeats(booking.guests)} (\r\n {guestsDetailsInformation(booking.guests.slice(0, 5), t)}\r\n ...\r\n </Typography>\r\n )}\r\n\r\n {booking.guests.length !== 0 &&\r\n booking.guests &&\r\n booking.guests.length > 5 && (\r\n <ListPopover\r\n list={\r\n <ul className={classes.list}>\r\n {booking.guests.slice(5).map((guest, index) => {\r\n return (\r\n <li key={index}>\r\n {guest.guestsNumber} x{' '}\r\n {guest.participant[0].participant}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n }\r\n >\r\n <NumberIcon number={booking.guests.length - 5} />\r\n </ListPopover>\r\n )}\r\n </TableCell>\r\n\r\n <TableCell\r\n style={{ paddingBottom: 5 }}\r\n className={classNames(classes.tableCell, classes.notesCell)}\r\n align=\"left\"\r\n >\r\n <ListPopover\r\n maxWidth={300}\r\n list={\r\n <div className={classes.list} style={{ minWidth: 120 }}>\r\n {booking.bookingNotes ||\r\n booking.activityNotes ||\r\n 'There are no notes yet.'}\r\n </div>\r\n }\r\n >\r\n <InfoOutlined />\r\n </ListPopover>\r\n </TableCell>\r\n\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.platformCell\r\n )}\r\n align=\"right\"\r\n >\r\n {t(booking.platform)}\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n <BookingsDetailsDialogDialog\r\n onClose={onClose}\r\n open={open}\r\n booking={dialogContent}\r\n bookingTotal={\r\n dialogContent.bookingType === ACTIVITY_TYPE\r\n ? getActivityBookingTotalInfo(dialogContent)\r\n : getAccommodationBookingTotalInfo(dialogContent)\r\n }\r\n refetchParams={{ query: QUERY, variables }}\r\n />\r\n </TableBody>\r\n </Table>\r\n {data && data[bookingsQueryType] && (\r\n <Pagination\r\n page={page + 1}\r\n count={data.numberOfBookingsPages.pages[bookingsQueryType]}\r\n amount = {Math.min(data.numberOfBookingsPages.totalBookingsNumber[bookingsQueryType],\r\n (page + 1) * 11)}\r\n total={\r\n data.numberOfBookingsPages.totalBookingsNumber[bookingsQueryType]\r\n }\r\n onChange={onPageChangeHandler}\r\n />\r\n )}\r\n </TableContainer>\r\n );\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(HistoryBookingsListTable);\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%',\r\n },\r\n wrapper: {\r\n height: '100%',\r\n },\r\n toolbar: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n boxShadow: '0px 1px 0px #E5E5E5',\r\n boxSizing: 'border-box',\r\n marginBottom: '5px',\r\n minHeight: '48px',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n minHeight: 'auto',\r\n width: '100%'\r\n },\r\n },\r\n toolbarLeft: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n minWidth: '140px',\r\n height: '100%',\r\n borderRight: '1px solid #E2EBF6',\r\n boxSizing: 'border-box',\r\n color: '#59758B',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n borderRight: 'hidden',\r\n paddingTop: '20px',\r\n \r\n },\r\n },\r\n toolbarTitle: {\r\n padding: '12px 30px',\r\n fontWeight: 'bold',\r\n fontSize: '18px',\r\n lineHeight: '24px',\r\n color: '#000000',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '16px',\r\n padding: '10px 20px',\r\n width: '100%',\r\n textAlign: 'center'\r\n },\r\n },\r\n toolbarFilter: {\r\n alignItems: 'center',\r\n display: 'flex',\r\n height: '100%',\r\n },\r\n formControl: {\r\n padding: '11px 30px 9px 0',\r\n minWidth: '90px',\r\n display: 'inline',\r\n },\r\n selectInput: {\r\n fontSize: '13px',\r\n color: '#717171',\r\n '&::before': {\r\n border: 'none',\r\n },\r\n },\r\n filterTitle: {\r\n padding: '12px 30px',\r\n minWidth: '51px',\r\n fontSize: '13px',\r\n whiteSpace: 'nowrap',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '10px 20px',\r\n },\r\n },\r\n selected: {\r\n backgroundColor: '#E2F5F8',\r\n fontWeight: 'bold',\r\n },\r\n customTabRoot: {\r\n padding: '8px 17px',\r\n borderBottom: '1px solid #E2EBF6',\r\n boxSizing: 'border-box',\r\n fontSize: '13px',\r\n minWidth: '50px!important',\r\n },\r\n toolbarSwitchers: {\r\n flexDirection: 'row',\r\n minWidth: '540px',\r\n borderRight: '1px solid #E2EBF6',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: '300px',\r\n width: '100%',\r\n borderBottom: '1px solid #E2EBF6',\r\n borderTop: '1px solid #E2EBF6',\r\n borderRight: 'hidden',\r\n paddingTop: '20px',\r\n alignItems: 'center',\r\n display: 'flex',\r\n justifyContent: 'center'\r\n },\r\n },\r\n buttonRoot: {\r\n fontSize: '13px',\r\n fontWeight: 'bold',\r\n padding: '7px 15px',\r\n marginLeft: '10px',\r\n },\r\n toolbarRight: {\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n paddingRight: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n justifyContent: 'center',\r\n borderBottom: '1px solid #E2EBF6',\r\n borderTop: '1px solid #E2EBF6',\r\n paddingTop: '20px',\r\n paddingBottom: '20px',\r\n },\r\n },\r\n tabsRoot: {\r\n flex: '1 1 auto',\r\n backgroundColor: theme.palette.background.paper,\r\n height: 'calc(100% - 24px)'\r\n },\r\n tabs: {\r\n flex: '0 1 220px',\r\n [theme.breakpoints.down('sm')]: {\r\n flex: '0 1 180px',\r\n },\r\n },\r\n customTabWrapper: {\r\n alignItems: 'center',\r\n },\r\n tabItemTitle: {\r\n fontWeight: 'bold',\r\n lineHeight: '18px',\r\n marginBottom: 12,\r\n color: 'inherit',\r\n },\r\n tabContentWrapper: {\r\n padding: '24px 20px 22px 20px',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '16px 10px 14px 10px',\r\n },\r\n },\r\n textColorInheritCustom: {\r\n opacity: 1,\r\n color: '#335267',\r\n },\r\n searchField: {\r\n width: '200px',\r\n '& .MuiInputBase-root': {\r\n border: '1px solid #BECEDA',\r\n borderRadius: '3px',\r\n '&:hover': {\r\n border: '1px solid #0E8BB4',\r\n },\r\n '&.Mui-focused': {\r\n border: '1px solid #0E8BB4',\r\n boxShadow: `0 0 3px 0.5px ${theme.baseUI.color}`,\r\n },\r\n },\r\n '& .MuiInputBase-input': {\r\n padding: '9px 5px 9px 10px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n },\r\n '& .MuiOutlinedInput-adornedEnd': {\r\n paddingRight: '10px',\r\n },\r\n '& .MuiIconButton-root': {\r\n padding: 0,\r\n },\r\n '& .MuiOutlinedInput-notchedOutline': {\r\n border: 0,\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n borderBottom: '1px solid #E2EBF6',\r\n borderTop: '1px solid #E2EBF6',\r\n paddingTop: '20px',\r\n paddingBottom: '20px',\r\n justifyContent: 'center',\r\n \r\n },\r\n },\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport {\r\n Typography,\r\n Tab,\r\n TextField,\r\n InputAdornment,\r\n IconButton\r\n} from '@material-ui/core';\r\nimport Button from '@material-ui/core/Button';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\n\r\nimport { AppHeader, SelectCompanyBox, TabPanel } from 'components';\r\nimport CurrentBookingsListTable from './components/current-bookings-list/CurrentBookingsListTable';\r\nimport CancelledBookingsListTable from './components/cancelled-bookings-list/CancelledBookingsListTable';\r\nimport HistoryBookingsListTable from './components/history-bookings-list/HistoryBoookingListTable';\r\n\r\nimport SelectDropDown from '../../components/select-drop-down/SelectDropDown';\r\n\r\nimport useStyles from './styles';\r\n\r\nfunction verticalTabProps(index) {\r\n return {\r\n id: `vertical-tab-${index}`,\r\n 'aria-controls': `vertical-tabpanel-${index}`\r\n };\r\n}\r\n\r\nconst CURRENT_TAB_INDEX = 0;\r\nconst CANCELLED_TAB_INDEX = 1;\r\nconst HISTORY_TAB_INDEX = 2;\r\n\r\nconst BookingList = ({ location, businessOwner }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const history = useHistory();\r\n\r\n const [value, setValue] = React.useState(\r\n location.state ? location.state.tabNumber : 0\r\n );\r\n const [handledBookings, setHandledBookings] = React.useState('all');\r\n const [searchField, setSearchField] = React.useState(undefined);\r\n const [search, setSearch] = React.useState(undefined);\r\n\r\n const handleChange = (event, newValue) => {\r\n setValue(newValue);\r\n };\r\n const [historyQuery, setHistoryQuery] = React.useState('allBookings');\r\n const [currentQuery, setCurrentQuery] = React.useState(\r\n location.state ? location.state.sortedBy : 'allBookings'\r\n );\r\n\r\n const handleSearchField = e => {\r\n setSearchField(e.target.value);\r\n };\r\n\r\n const onKeyDownHandler = e => {\r\n if (e.keyCode === 13) {\r\n setSearch(searchField);\r\n }\r\n };\r\n\r\n return (\r\n <div className={classes.root}>\r\n <AppHeader />\r\n\r\n {!businessOwner.selectedBusinessOwner.id && <SelectCompanyBox />}\r\n\r\n {businessOwner.selectedBusinessOwner.id && (\r\n <div className={classes.wrapper}>\r\n <div className={classes.toolbar}>\r\n <div className={classes.toolbarLeft}>\r\n <Typography variant=\"h2\" className={classes.toolbarTitle}>\r\n {t('Bookings')}\r\n </Typography>\r\n </div>\r\n <div className={classes.toolbarSwitchers}>\r\n <Tabs\r\n indicatorColor=\"primary\"\r\n value={value}\r\n onChange={handleChange}\r\n >\r\n <Tab\r\n classes={{\r\n root: classes.customTabRoot,\r\n wrapper: classes.customTabWrapper,\r\n selected: classes.selected,\r\n textColorInherit: classes.textColorInheritCustom\r\n }}\r\n label={t('Current')}\r\n {...verticalTabProps(CURRENT_TAB_INDEX)}\r\n />\r\n <Tab\r\n classes={{\r\n root: classes.customTabRoot,\r\n wrapper: classes.customTabWrapper,\r\n selected: classes.selected,\r\n textColorInherit: classes.textColorInheritCustom\r\n }}\r\n label={t('Canceled')}\r\n {...verticalTabProps(CANCELLED_TAB_INDEX)}\r\n />\r\n <Tab\r\n classes={{\r\n root: classes.customTabRoot,\r\n wrapper: classes.customTabWrapper,\r\n selected: classes.selected,\r\n textColorInherit: classes.textColorInheritCustom\r\n }}\r\n label={t('History')}\r\n {...verticalTabProps(CURRENT_TAB_INDEX)}\r\n />\r\n </Tabs>\r\n </div>\r\n <div className={classes.toolbarFilter}>\r\n <Typography className={classes.filterTitle}>\r\n {t('Filter by')}:\r\n </Typography>\r\n <FormControl className={classes.formControl}>\r\n {value === CANCELLED_TAB_INDEX && (\r\n <SelectDropDown\r\n value={handledBookings}\r\n onChange={setHandledBookings}\r\n items={[\r\n {\r\n value: 'all',\r\n label: 'All bookings'\r\n },\r\n {\r\n value: 'handled',\r\n label: 'Handled'\r\n },\r\n {\r\n value: 'notHandled',\r\n label: 'Not handled'\r\n }\r\n ]}\r\n className={classes.selectInput}\r\n />\r\n )}\r\n {value !== CANCELLED_TAB_INDEX && (\r\n <SelectDropDown\r\n value={\r\n value === CURRENT_TAB_INDEX ? currentQuery : historyQuery\r\n }\r\n onChange={\r\n value === CURRENT_TAB_INDEX\r\n ? setCurrentQuery\r\n : setHistoryQuery\r\n }\r\n className={classes.selectInput}\r\n items={[\r\n {\r\n value: 'allBookings',\r\n label: 'All bookings'\r\n },\r\n {\r\n value: 'accommodationsBookings',\r\n label: 'Accommodations'\r\n },\r\n {\r\n value: 'activitiesBookings',\r\n label: 'Activities'\r\n }\r\n ]}\r\n />\r\n )}\r\n </FormControl>\r\n </div>\r\n <div>\r\n <TextField\r\n classes={{\r\n root: classes.searchField\r\n }}\r\n placeholder=\"Search...\"\r\n variant=\"outlined\"\r\n value={searchField}\r\n onChange={handleSearchField}\r\n onKeyDown={onKeyDownHandler}\r\n InputProps={{\r\n endAdornment: (\r\n <InputAdornment\r\n position=\"end\"\r\n onClick={() => setSearch(searchField)}\r\n >\r\n <IconButton>\r\n <SearchIcon />\r\n </IconButton>\r\n </InputAdornment>\r\n )\r\n }}\r\n />\r\n </div>\r\n <div className={classes.toolbarRight}>\r\n <Button\r\n onClick={() => {\r\n history.push(`/accommodations`);\r\n }}\r\n variant=\"outlined\"\r\n color=\"primary\"\r\n classes={{ root: classes.buttonRoot }}\r\n >\r\n {t('Book Accommodation')}\r\n </Button>\r\n <Button\r\n onClick={() => {\r\n history.push(`/activities`);\r\n }}\r\n variant=\"outlined\"\r\n color=\"primary\"\r\n classes={{ root: classes.buttonRoot }}\r\n >\r\n {t('Book Activity')}\r\n </Button>\r\n </div>\r\n </div>\r\n <div className={classes.tabsRoot}>\r\n <TabPanel\r\n className={classes.tabContentWrapper}\r\n value={value}\r\n index={CURRENT_TAB_INDEX}\r\n >\r\n <CurrentBookingsListTable\r\n bookingsQueryType={currentQuery}\r\n search={search}\r\n />\r\n </TabPanel>\r\n <TabPanel\r\n className={classes.tabContentWrapper}\r\n value={value}\r\n index={CANCELLED_TAB_INDEX}\r\n >\r\n <CancelledBookingsListTable\r\n handledStatus={handledBookings}\r\n search={search}\r\n />\r\n </TabPanel>\r\n <TabPanel\r\n className={classes.tabContentWrapper}\r\n value={value}\r\n index={HISTORY_TAB_INDEX}\r\n >\r\n <HistoryBookingsListTable\r\n bookingsQueryType={historyQuery}\r\n search={search}\r\n />\r\n </TabPanel>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(BookingList);\r\n","import BookingList from './BookingsList';\r\n\r\nexport default BookingList;\r\n","const validate = values => {\r\n const errors = {};\r\n\r\n if (!values.dates || !values.dates.startDate || !values.dates.endDate) {\r\n errors.dates = 'Dates are required';\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useSnackbar } from 'notistack';\r\nimport { connect } from 'react-redux';\r\nimport classNames from 'classnames';\r\nimport { useHistory, useParams } from 'react-router-dom';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\nimport { change, Field, reduxForm } from 'redux-form';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport LocationOnOutlinedIcon from '@material-ui/icons/LocationOnOutlined';\r\nimport PeopleOutlineIcon from '@material-ui/icons/PeopleOutline';\r\nimport HotelOutlinedIcon from '@material-ui/icons/HotelOutlined';\r\n\r\nimport { ACCOMMODATION, BOOK_DATES } from 'graphql/queries/accommodations';\r\nimport {\r\n CREATE_ACCOMMODATION_BOOKING,\r\n UPDATE_ACCOMMODATION_BOOKING\r\n} from 'graphql/mutations/accommodations-bookings';\r\n\r\nimport {\r\n AppHeader,\r\n CircularLoader,\r\n FormActionButtons,\r\n BookInfoList,\r\n CustomDateRangePicker\r\n} from 'components';\r\n\r\nimport { getListOfAvailableCurrencies } from 'utils/book-accommodation-and-activity/currency';\r\nimport { getReceivedAccommodationData } from 'utils/accommodations-and-activities/prepareReceivedAccommodationData';\r\nimport { getParticipants } from 'utils/book-accommodation/prepareParticipants';\r\nimport { getPreparedBookAccommodationData } from 'utils/book-accommodation/prepareBookAccommodationData';\r\nimport {\r\n getAvailableRangeDates,\r\n getDisabledDates\r\n} from 'utils/book-accommodation/availableDates';\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport validate from './validate';\r\n\r\nimport useStyles from 'pages/book-accommodation/styles';\r\n\r\nconst initialValues = {\r\n maxParticipants: 0,\r\n currency: 'NOK',\r\n participants: [],\r\n addOns: [],\r\n activities: [],\r\n pay: {\r\n 'Pay on arrival': true\r\n }\r\n};\r\n\r\nconst FIXED_PRICES = 'pricesFixedForm';\r\nconst CATEGORY_PRICES = 'pricesCategoryForm';\r\n\r\nconst BookAccommodation = ({\r\n bookAccommodationForm,\r\n changeFormFieldValue,\r\n handleSubmit,\r\n bookedData,\r\n isUpdate,\r\n businessOwner\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n const { id } = useParams();\r\n const history = useHistory();\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const selectedLanguage = i18n.language;\r\n const ownerId = businessOwner.selectedBusinessOwner.id;\r\n\r\n const accommodationId = bookAccommodationForm.values.accommodationId;\r\n const initialDates = bookedData ? bookedData.dates : null;\r\n const startDate = initialDates ? initialDates.startDate : moment();\r\n\r\n const [isLoading, setLoading] = React.useState(null);\r\n const [accommodation, setAccommodation] = React.useState(null);\r\n const [isUpdatedParticipants, setIsUpdatedParticipants] = React.useState(\r\n false\r\n );\r\n\r\n const [createAccommodationBooking] = useMutation(\r\n CREATE_ACCOMMODATION_BOOKING\r\n );\r\n const [updateAccommodationBooking] = useMutation(\r\n UPDATE_ACCOMMODATION_BOOKING\r\n );\r\n const { loading, data } = useQuery(ACCOMMODATION, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n accommodationId: accommodationId || parseInt(id),\r\n businessOwnerId: ownerId\r\n }\r\n });\r\n const {\r\n loading: bookDatesLoading,\r\n data: bookDatesData,\r\n refetch: bookDatesRefetch\r\n } = useQuery(BOOK_DATES, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n accommodationId: accommodationId || parseInt(id),\r\n businessOwnerId: ownerId,\r\n startPeriod: moment(startDate)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(startDate).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n if (data && data.accommodations && data.accommodations.length) {\r\n const receivedAccommodation = data.accommodations[0];\r\n const accommodationData = getReceivedAccommodationData(\r\n receivedAccommodation\r\n );\r\n\r\n if (receivedAccommodation.prices[0].participant.participant) {\r\n accommodationData['pricesType'] = CATEGORY_PRICES;\r\n } else {\r\n accommodationData['pricesType'] = FIXED_PRICES;\r\n }\r\n\r\n setListOfAvailableCurrencies(receivedAccommodation);\r\n setMaxParticipants(accommodationData);\r\n setParticipants(accommodationData);\r\n setAddOns(accommodationData);\r\n\r\n setAccommodation(accommodationData);\r\n }\r\n }, [data]);\r\n\r\n React.useEffect(() => {\r\n if (!bookAccommodationForm || !accommodation) return;\r\n setParticipants(accommodation);\r\n }, [bookAccommodationForm.values.currency]);\r\n\r\n const changeMonthHandler = date => {\r\n bookDatesRefetch({\r\n accommodationId: accommodationId || parseInt(id),\r\n startPeriod: moment(date)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(date).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n });\r\n };\r\n\r\n const setListOfAvailableCurrencies = receivedAccommodation => {\r\n const listOfAvailableCurrencies = getListOfAvailableCurrencies(\r\n receivedAccommodation.prices\r\n );\r\n const selectedCurrency = bookAccommodationForm.values.currency;\r\n\r\n if (!listOfAvailableCurrencies.includes(selectedCurrency)) {\r\n changeFormFieldValue('currency', listOfAvailableCurrencies[0]);\r\n }\r\n };\r\n\r\n const setParticipants = accommodation => {\r\n setIsUpdatedParticipants(!isUpdatedParticipants);\r\n\r\n const currency = bookAccommodationForm.values.currency;\r\n const previousParticipants =\r\n bookAccommodationForm.values.participants || [];\r\n const participants = getParticipants(\r\n accommodation,\r\n currency,\r\n previousParticipants\r\n );\r\n\r\n changeFormFieldValue('participants', participants);\r\n };\r\n\r\n const setAddOns = accommodation => {\r\n const previousAddOns = bookAccommodationForm.values.addOns || [];\r\n\r\n const addOnsList = accommodation.addOnsForm.addOns.map(item => {\r\n const theSameAddOn = previousAddOns.find(addOn => addOn.id === item.id);\r\n return {\r\n ...item,\r\n value: theSameAddOn ? theSameAddOn.value : 0,\r\n originalId: theSameAddOn ? theSameAddOn.originalId : null\r\n };\r\n });\r\n\r\n changeFormFieldValue('addOns', addOnsList);\r\n };\r\n\r\n const setMaxParticipants = accommodation => {\r\n changeFormFieldValue('maxParticipants', accommodation.generalForm.guests);\r\n };\r\n\r\n const handlerSubmitWrapper = props => {\r\n if (bookAccommodationForm.syncErrors) {\r\n const syncErrors = bookAccommodationForm.syncErrors;\r\n const errorsLength = Object.keys(syncErrors).length;\r\n\r\n if (syncErrors.isMaxParticipantsErrors && errorsLength === 2) {\r\n const error = syncErrors.participants['_error'];\r\n const errorSplit = error.split(' ');\r\n const errorLength = errorSplit.length;\r\n enqueueSnackbar(\r\n t('The number of Participants can’t exceed', {\r\n number: errorSplit[errorLength - 1]\r\n }),\r\n {\r\n variant: 'warning'\r\n }\r\n );\r\n } else {\r\n enqueueSnackbar(t('Please fill in all the required fields'), {\r\n variant: 'warning'\r\n });\r\n }\r\n }\r\n\r\n handleSubmit(submit)(props);\r\n };\r\n\r\n const submit = () => {\r\n setLoading(true);\r\n\r\n if (\r\n bookAccommodationForm.values.participants &&\r\n bookAccommodationForm.values.participants.length\r\n ) {\r\n bookAccommodationForm.values.participants = [\r\n {\r\n ...bookAccommodationForm.values.participants[0],\r\n participants: bookAccommodationForm.values.maxParticipants\r\n }\r\n ];\r\n }\r\n\r\n let data = getPreparedBookAccommodationData(\r\n accommodation,\r\n bookAccommodationForm,\r\n []\r\n );\r\n\r\n if (isUpdate) {\r\n updateAccommodationBooking({ variables: data }).then(\r\n () => {\r\n enqueueSnackbar(\r\n t('Accommodation booking has been successfully updated'),\r\n {\r\n variant: 'success'\r\n }\r\n );\r\n history.push({\r\n pathname: '/bookings-list'\r\n });\r\n },\r\n () => {\r\n setLoading(false);\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n }\r\n );\r\n } else {\r\n createAccommodationBooking({ variables: data }).then(\r\n () => {\r\n enqueueSnackbar(t('Accommodation has been successfully booked'), {\r\n variant: 'success'\r\n });\r\n history.push({\r\n pathname: '/accommodations'\r\n });\r\n },\r\n () => {\r\n setLoading(false);\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n }\r\n );\r\n }\r\n };\r\n\r\n const generalForm = accommodation\r\n ? getFormByCurrentLanguage(\r\n selectedLanguage,\r\n accommodation.generalForm,\r\n accommodation['generalForm-Norwegian']\r\n )\r\n : {};\r\n const descriptionForm = accommodation\r\n ? getFormByCurrentLanguage(\r\n selectedLanguage,\r\n accommodation.descriptionForm,\r\n accommodation['descriptionForm-Norwegian']\r\n )\r\n : {};\r\n\r\n return (\r\n <>\r\n <AppHeader />\r\n\r\n <CircularLoader\r\n isLoading={loading || bookDatesLoading || isLoading}\r\n loaderClassName={classes.loaderClassName}\r\n className={classes.loaderWrapper}\r\n />\r\n\r\n {accommodation && (\r\n <div className={classes.root}>\r\n <div className={classes.leftSide}>\r\n <Typography variant=\"h3\" classes={{ root: classes.productCode }}>\r\n {t('Product code')}: {accommodation.generalForm.productCode}\r\n </Typography>\r\n\r\n <div\r\n className={classes.photo}\r\n style={{\r\n backgroundImage: `url(${accommodation.generalForm.coverPhoto.image})`\r\n }}\r\n >\r\n {''}\r\n </div>\r\n\r\n <Typography variant=\"h2\" className={classes.fontWeight}>\r\n {generalForm.title}\r\n </Typography>\r\n\r\n <div className={classes.listInfo}>\r\n <div className={classes.infoItem}>\r\n <LocationOnOutlinedIcon classes={{ root: classes.infoIcon }} />\r\n <Typography variant=\"body1\">\r\n {accommodation.generalForm.location}\r\n </Typography>\r\n </div>\r\n <div className={classes.infoItem}>\r\n <PeopleOutlineIcon classes={{ root: classes.infoIcon }} />\r\n <Typography variant=\"body1\">\r\n {accommodation.generalForm.guests} {t('Guests')}\r\n </Typography>\r\n </div>\r\n {generalForm.bedDetails && !!generalForm.bedDetails.length && (\r\n <div className={classes.infoItem}>\r\n <HotelOutlinedIcon classes={{ root: classes.infoIcon }} />\r\n <Typography variant=\"body1\">\r\n {generalForm.bedDetails.join(' • ')}\r\n </Typography>\r\n </div>\r\n )}\r\n </div>\r\n\r\n <Typography variant=\"body1\" classes={{ root: classes.overview }}>\r\n {descriptionForm.overview}\r\n </Typography>\r\n\r\n <BookInfoList\r\n activity={accommodation}\r\n currency={bookAccommodationForm.values.currency}\r\n defaultExpanded={true}\r\n />\r\n </div>\r\n\r\n <div className={classes.rightSide}>\r\n <form\r\n onSubmit={handlerSubmitWrapper}\r\n className={classes.bookWrapper}\r\n >\r\n <Typography\r\n variant=\"h1\"\r\n className={classNames(classes.fontWeight, classes.inputIndent)}\r\n >\r\n {isUpdate\r\n ? t('Update Accommodation Booking')\r\n : t('Book Accommodation')}\r\n </Typography>\r\n\r\n <Field\r\n name=\"dates\"\r\n availableRange={getAvailableRangeDates(accommodation)}\r\n disabledDates={getDisabledDates(bookDatesData, initialDates)}\r\n changeMonthsCallback={changeMonthHandler}\r\n className={classes.inputIndent}\r\n inputClassName={classes.disableInputFocus}\r\n label=\"Select dates *\"\r\n initialFocus=\"startDate\"\r\n dateRangePickerClass=\"dateRangeOpenedPicker\"\r\n daySize={39}\r\n component={CustomDateRangePicker}\r\n updateBooking\r\n />\r\n\r\n <FormActionButtons\r\n cancelPath={isUpdate ? '/bookings-list' : '/accommodations'}\r\n actionLabel={isUpdate ? 'Update' : 'Book'}\r\n />\r\n </form>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n bookAccommodationForm: state.form.bookAccommodationForm,\r\n businessOwner: state.businessOwner\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('bookAccommodationForm', field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'bookAccommodationForm',\r\n destroyOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(BookAccommodation));\r\n","import gql from 'graphql-tag';\r\n\r\nexport const STATISTICS = gql`\r\n query statistics(\r\n $startPeriod: Date!\r\n $endPeriod: Date!\r\n $businessOwnerId: Int\r\n ) {\r\n accommodationsBookingsStatistic(\r\n startPeriod: $startPeriod\r\n endPeriod: $endPeriod\r\n businessOwnerId: $businessOwnerId\r\n ) {\r\n accommodationBookings {\r\n accommodationTitle\r\n numberOfBookedSlots\r\n status\r\n }\r\n capacityBooked\r\n capacityAvailable\r\n bookingsPerPlatform {\r\n platform\r\n bookingsPerPlatform\r\n }\r\n numberOfAllSlots\r\n numberOfBookedSlots\r\n }\r\n activitiesBookingsStatistic(\r\n startPeriod: $startPeriod\r\n endPeriod: $endPeriod\r\n businessOwnerId: $businessOwnerId\r\n ) {\r\n open {\r\n capacityBooked\r\n capacityAvailable\r\n maxParticipants\r\n bookedParticipants\r\n bookingPerActivity {\r\n activityTitle\r\n status\r\n bookedParticipants\r\n }\r\n bookingsPerPlatform {\r\n platform\r\n bookingsPerPlatform\r\n }\r\n }\r\n private {\r\n capacityBooked\r\n capacityAvailable\r\n bookedSlots\r\n maxSlots\r\n bookingPerActivity {\r\n activityTitle\r\n status\r\n numberOfBookedSlots\r\n }\r\n bookingsPerPlatform {\r\n platform\r\n bookingsPerPlatform\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n","export const OVERALL_CAPACITY_COLORS = {\r\n capacityBooked: '#005A81',\r\n capacityAvailable: '#87D5E4',\r\n noData: '#748CA0'\r\n};\r\n\r\nexport const PLATFORMS_COLORS = {\r\n 'Booking.com': '#E2F5F8',\r\n 'Hotels.com': '#87D5E4',\r\n 'Expedia.com': '#1D9DC6',\r\n Airnbnb: '#0E8BB4',\r\n TrekkSoft: '#0D7AA1',\r\n 'Admin panel': '#005A81',\r\n Widget: '#5EC4DB'\r\n};\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n leftPanel: {\r\n flex: '0 1',\r\n borderRight: '1px solid #E2EBF6',\r\n [theme.breakpoints.down('sm')]: {\r\n flex: '1 1 100%',\r\n borderRight: 'none',\r\n borderBottom: '1px solid #E2EBF6'\r\n }\r\n },\r\n tabTitle: {\r\n fontSize: 15,\r\n display: 'inline',\r\n paddingLeft: '30px',\r\n color: '#071B27', \r\n fontWeight: 'bold',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: 12,\r\n paddingLeft: '15px'\r\n }\r\n },\r\n statisticTab: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n borderBottom: '1px solid #E2EBF6',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column'\r\n }\r\n },\r\n chartLegend: {\r\n width: '220px',\r\n padding: '20px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n padding: '10px'\r\n }\r\n },\r\n legendTitle: {\r\n fontSize: '37px',\r\n fontWeight: 'bold',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '24px'\r\n }\r\n },\r\n chartWrapper: {\r\n paddingTop: '20px',\r\n [theme.breakpoints.down('sm')]: {\r\n paddingTop: '10px'\r\n }\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import moment from 'moment';\r\n\r\nexport const getSumOfOverallPercentage = overall => {\r\n return overall\r\n .map(overallInfo => overallInfo.value)\r\n .reduce(\r\n (overallSum, actualOverallValue) => overallSum + actualOverallValue\r\n );\r\n};\r\n\r\nexport const getPeriodRange = periodInput => {\r\n const periodValues = {\r\n startPeriod: periodInput.startDate.format('YYYY-MM-DD')\r\n };\r\n\r\n if (!periodInput.endDate) {\r\n periodValues.endPeriod = moment().format('YYYY-MM-DD');\r\n } else {\r\n periodValues.endPeriod = periodInput.endDate.format('YYYY-MM-DD');\r\n }\r\n\r\n return periodValues;\r\n};\r\n\r\nexport const prepareReceivedStatisticsData = data => {\r\n if (!data) return [];\r\n\r\n const preparedData = {\r\n accommodationStatistics: {},\r\n openActivitiesStatistics: {},\r\n privateActivitiesStatistics: {}\r\n };\r\n\r\n const accommodationStatistics = data.accommodationsBookingsStatistic;\r\n const openActivitiesStatistics = data.activitiesBookingsStatistic.open;\r\n const privateActivitiesStatistics = data.activitiesBookingsStatistic.private;\r\n\r\n if (accommodationStatistics) {\r\n preparedData.accommodationStatistics.total =\r\n accommodationStatistics.numberOfBookedSlots;\r\n\r\n preparedData.accommodationStatistics.platformsLegendData = preparePlatformsLegend(\r\n accommodationStatistics.bookingsPerPlatform\r\n );\r\n\r\n preparedData.accommodationStatistics.overallLegendData = prepareOverallLegendForAccommodation(\r\n accommodationStatistics\r\n );\r\n\r\n preparedData.accommodationStatistics.bookingsInfo = prepareBookingsPerAccommodationData(\r\n accommodationStatistics.accommodationBookings\r\n );\r\n }\r\n\r\n if (openActivitiesStatistics) {\r\n preparedData.openActivitiesStatistics.total =\r\n openActivitiesStatistics.bookedParticipants;\r\n\r\n preparedData.openActivitiesStatistics.platformsLegendData = preparePlatformsLegend(\r\n openActivitiesStatistics.bookingsPerPlatform\r\n );\r\n\r\n preparedData.openActivitiesStatistics.overallLegendData = prepareOverallLegendForOpenActivity(\r\n openActivitiesStatistics\r\n );\r\n\r\n preparedData.openActivitiesStatistics.bookingsInfo = prepareBookingsPerOpenActivityData(\r\n openActivitiesStatistics.bookingPerActivity\r\n );\r\n }\r\n\r\n if (privateActivitiesStatistics) {\r\n preparedData.privateActivitiesStatistics.total =\r\n privateActivitiesStatistics.bookedSlots;\r\n\r\n preparedData.privateActivitiesStatistics.platformsLegendData = preparePlatformsLegend(\r\n privateActivitiesStatistics.bookingsPerPlatform\r\n );\r\n\r\n preparedData.privateActivitiesStatistics.overallLegendData = prepareOverallLegendForPrivateActivity(\r\n privateActivitiesStatistics\r\n );\r\n\r\n preparedData.privateActivitiesStatistics.bookingsInfo = prepareBookingsPerPrivateActivityData(\r\n privateActivitiesStatistics.bookingPerActivity\r\n );\r\n }\r\n return preparedData;\r\n};\r\n\r\nconst preparePlatformsLegend = bookingsPerPlatform => {\r\n const legendData = [];\r\n if (!bookingsPerPlatform) {\r\n return [];\r\n }\r\n bookingsPerPlatform.forEach(item => {\r\n legendData.push({\r\n name: item.platform,\r\n value: item.bookingsPerPlatform,\r\n legendTitle: item.platform\r\n });\r\n });\r\n return legendData;\r\n};\r\n\r\nconst prepareOverallLegendForAccommodation = data => {\r\n return [\r\n {\r\n name: 'capacityBooked',\r\n value: data.capacityBooked,\r\n legendTitle: 'Booked slots'\r\n },\r\n {\r\n name: 'capacityAvailable',\r\n value: data.capacityAvailable,\r\n legendTitle: 'Available slots'\r\n }\r\n ];\r\n};\r\n\r\nconst prepareOverallLegendForOpenActivity = data => {\r\n return [\r\n {\r\n name: 'capacityBooked',\r\n value: data.capacityBooked,\r\n legendTitle: 'Booked seats'\r\n },\r\n {\r\n name: 'capacityAvailable',\r\n value: data.capacityAvailable,\r\n legendTitle: 'Available seats'\r\n }\r\n ];\r\n};\r\n\r\nconst prepareOverallLegendForPrivateActivity = data => {\r\n return [\r\n {\r\n name: 'capacityBooked',\r\n value: data.capacityBooked,\r\n legendTitle: 'Booked slots'\r\n },\r\n {\r\n name: 'capacityAvailable',\r\n value: data.capacityAvailable,\r\n legendTitle: 'Available slots'\r\n }\r\n ];\r\n};\r\n\r\nconst prepareBookingsPerAccommodationData = bookingsInfo => {\r\n const preparedData = [];\r\n bookingsInfo.forEach(item => {\r\n preparedData.push({\r\n total: item.numberOfBookedSlots,\r\n status: item.status,\r\n title: item.accommodationTitle\r\n });\r\n });\r\n return preparedData;\r\n};\r\n\r\nconst prepareBookingsPerOpenActivityData = bookingsInfo => {\r\n const preparedData = [];\r\n bookingsInfo.forEach(item => {\r\n preparedData.push({\r\n total: item.bookedParticipants ? parseInt(item.bookedParticipants) : 0,\r\n status: item.status,\r\n title: item.activityTitle\r\n });\r\n });\r\n return preparedData;\r\n};\r\n\r\nconst prepareBookingsPerPrivateActivityData = bookingsInfo => {\r\n const preparedData = [];\r\n bookingsInfo.forEach(item => {\r\n preparedData.push({\r\n total: item.numberOfBookedSlots ? parseInt(item.numberOfBookedSlots) : 0,\r\n status: item.status,\r\n title: item.activityTitle\r\n });\r\n });\r\n return preparedData;\r\n};\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Typography, Tab } from '@material-ui/core';\r\n\r\nimport { SimplePieChart, CustomChartLegend } from 'components';\r\nimport { OVERALL_CAPACITY_COLORS, PLATFORMS_COLORS } from './constants';\r\n\r\nimport useStyles from './styles';\r\nimport { getSumOfOverallPercentage } from 'utils/statistics/prepareStatisticsData';\r\n\r\nconst StatisticsChartsTab = ({\r\n total,\r\n overallLegendData,\r\n platformsLegendData,\r\n description,\r\n helpText\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const overallPercentageSum = getSumOfOverallPercentage(overallLegendData);\r\n\r\n if (!overallPercentageSum) {\r\n overallLegendData.push({ name: 'noData', value: 100 });\r\n }\r\n\r\n return (\r\n <div className={classes.leftPanel}>\r\n <div className={classes.chartWrapper}>\r\n <Typography className={classes.tabTitle}>\r\n {t('Overall capacity')}\r\n </Typography>\r\n <div className={classes.statisticTab}>\r\n <SimplePieChart\r\n data={overallLegendData}\r\n colorsInfo={OVERALL_CAPACITY_COLORS}\r\n />\r\n <CustomChartLegend\r\n legendData={overallLegendData}\r\n legendColors={OVERALL_CAPACITY_COLORS}\r\n legendTitle={`${total}`}\r\n titleDescription={description}\r\n helpText={helpText}\r\n />\r\n </div>\r\n </div>\r\n {platformsLegendData.length !== 0 && (\r\n <div className={classes.chartWrapper}>\r\n <Typography className={classes.tabTitle}>{t('Platforms')}</Typography>\r\n <div className={classes.statisticTab}>\r\n <SimplePieChart\r\n data={platformsLegendData}\r\n colorsInfo={PLATFORMS_COLORS}\r\n />\r\n <CustomChartLegend\r\n legendData={platformsLegendData}\r\n legendColors={PLATFORMS_COLORS}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default StatisticsChartsTab;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n tableCell: {\r\n fontSize: '13px',\r\n border: 'none',\r\n color: '#000000',\r\n padding: 0,\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '11px',\r\n }\r\n },\r\n tableRow: {\r\n height: '46px',\r\n [theme.breakpoints.down('sm')]: {\r\n height: '36px',\r\n }\r\n },\r\n tableHead: {\r\n height: '36px',\r\n [theme.breakpoints.down('sm')]: {\r\n height: '30px',\r\n }\r\n },\r\n tableWrapper: {\r\n padding: '20px 80px 0px 180px',\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '10px 20px 40px 20px',\r\n }\r\n },\r\n table: {\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '12px',\r\n paddingBottom: '30px'\r\n }\r\n },\r\n tableTitle: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n paddingBottom: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '15px',\r\n paddingBottom: '20px',\r\n }\r\n },\r\n heading: {\r\n color: '#717171',\r\n border: 'none',\r\n padding: 0,\r\n fontWeight: 'bold',\r\n fontSize: '10px',\r\n fontFamily: 'Fira Sans',\r\n letterSpacing: '0.035em',\r\n textTransform: 'uppercase',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '8px',\r\n letterSpacing: '0.03em',\r\n }\r\n },\r\n unitCell: {\r\n width: '300px',\r\n paddingRight: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '200px',\r\n paddingRight: '10px',\r\n }\r\n },\r\n unitTitle: {\r\n fontWeight: 'bold',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '12px',\r\n }\r\n },\r\n slotsNumberCell: {\r\n width: '120px',\r\n paddingRight: '20px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '80px',\r\n paddingRight: '10px',\r\n }\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport classNames from 'classnames';\r\n\r\nimport {\r\n Typography,\r\n TableHead,\r\n TableRow,\r\n TableCell,\r\n Table,\r\n TableBody\r\n} from '@material-ui/core';\r\nimport useStyles from './styles';\r\n\r\nconst headingsConfig = classes => {\r\n return {\r\n accommodationStatistics: {\r\n headings: [\r\n {\r\n label: 'Accommodation name',\r\n align: 'left',\r\n cellClassName: classes.unitCell\r\n },\r\n {\r\n label: 'Booked slots',\r\n align: 'right',\r\n cellClassName: classes.slotsNumberCell\r\n }\r\n ]\r\n },\r\n privateActivitiesStatistics: {\r\n headings: [\r\n {\r\n label: 'Activity name',\r\n align: 'left',\r\n cellClassName: classes.unitCell\r\n },\r\n {\r\n label: 'Booked slots',\r\n align: 'right',\r\n cellClassName: classes.slotsNumberCell\r\n }\r\n ]\r\n },\r\n openActivitiesStatistics: {\r\n headings: [\r\n {\r\n label: 'Activity name',\r\n align: 'left',\r\n cellClassName: classes.unitCell\r\n },\r\n {\r\n label: 'Booked seats',\r\n align: 'right',\r\n cellClassName: classes.slotsNumberCell\r\n }\r\n ]\r\n }\r\n };\r\n};\r\n\r\nconst StatisticsBookingsList = ({\r\n tableTitle,\r\n statisticsType,\r\n bookingsData\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classes.tableWrapper}>\r\n <Typography className={classes.tableTitle} variant=\"h1\">\r\n {t(tableTitle)}\r\n </Typography>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead className={classes.tableHead}>\r\n <TableRow>\r\n {headingsConfig(classes)[statisticsType].headings.map(heading => (\r\n <TableCell\r\n key={heading.label}\r\n align={heading.align}\r\n style={{ paddingBottom: 5 }}\r\n className={classNames(classes.heading, heading.cellClassName)}\r\n >\r\n {t(heading.label)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {bookingsData &&\r\n bookingsData.map((booking, index) => (\r\n <TableRow key={index} classes={{ root: classes.tableRow }}>\r\n <TableCell\r\n className={classNames(classes.tableCell, classes.unitCell)}\r\n align=\"left\"\r\n >\r\n <Typography className={classes.unitTitle}>\r\n {booking.title}\r\n </Typography>\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.slotsNumberCell\r\n )}\r\n align=\"right\"\r\n >\r\n <Typography>\r\n {booking.status === null\r\n ? booking.total\r\n : t(booking.status)}\r\n </Typography>\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </div>\r\n );\r\n};\r\n\r\nexport default StatisticsBookingsList;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n }\r\n },\r\n toolbar: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n boxShadow: '0px 1px 0px #E5E5E5',\r\n boxSizing: 'border-box',\r\n marginBottom: '5px',\r\n minHeight: '48px',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n minHeight: 'auto'\r\n }\r\n },\r\n toolbarLeft: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n minWidth: '140px',\r\n height: '100%',\r\n borderRight: '1px solid #E2EBF6',\r\n boxSizing: 'border-box',\r\n color: '#59758B',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: '100%',\r\n borderRight: 'none',\r\n borderBottom: '1px solid #E2EBF6',\r\n justifyContent: 'center'\r\n }\r\n },\r\n toolbarRight: {\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n paddingRight: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n paddingRight: '10px',\r\n justifyContent: 'flex-start'\r\n }\r\n },\r\n toolbarTitle: {\r\n padding: '12px 30px 12px 30px',\r\n fontWeight: 'bold',\r\n fontSize: '18px',\r\n lineHeight: '24px',\r\n color: '#000000',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '12px 10px',\r\n fontSize: '16px',\r\n }\r\n },\r\n tabsRoot: {\r\n width: '470px',\r\n backgroundColor: theme.palette.background.paper,\r\n display: 'flex',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%'\r\n }\r\n },\r\n tabs: {\r\n flex: '0 1 220px',\r\n [theme.breakpoints.down('sm')]: {\r\n flex: '0 1 auto'\r\n }\r\n },\r\n customTabRoot: {\r\n padding: '0',\r\n boxSizing: 'border-box',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '10px 15px',\r\n fontSize: '12px',\r\n overflowX: 'auto', \r\n display: 'flex', \r\n\r\n }\r\n },\r\n datePickerWrapper: {\r\n width: '255px',\r\n maxHeight: '48px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%'\r\n }\r\n },\r\n customTabWrapper: {\r\n alignItems: 'center',\r\n fontSize: '13px'\r\n },\r\n toolbarSwitchers: {\r\n flexDirection: 'row',\r\n minWidth: '540px',\r\n alignItems: 'center',\r\n borderRight: '1px solid #E2EBF6',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: '100%',\r\n borderRight: 'none',\r\n borderBottom: '1px solid #E2EBF6',\r\n justifyContent: 'space-between'\r\n }\r\n },\r\n textColorInheritCustom: {\r\n opacity: 1,\r\n color: '#335267'\r\n },\r\n inputClassName: {\r\n border: 'none !important',\r\n\r\n },\r\n selected: {\r\n backgroundColor: '#E2F5F8',\r\n color: '#071B27 !important',\r\n fontWeight: 'bold'\r\n },\r\n customTabWrapper: {\r\n padding: '0'\r\n },\r\n content: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n // justifyContent: 'space-between',\r\n justifyContent: 'center',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n width: '100%'\r\n }\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport moment from 'moment';\r\nimport { connect } from 'react-redux';\r\nimport { Field, reduxForm } from 'redux-form';\r\nimport { useQuery } from '@apollo/react-hooks';\r\n\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport { Typography, Tab } from '@material-ui/core';\r\n\r\nimport { STATISTICS } from 'graphql/queries/statistics';\r\nimport {\r\n AppHeader,\r\n CustomDateRangePicker,\r\n SelectCompanyBox,\r\n TabPanel\r\n} from 'components';\r\nimport StatisticsInfoTab from './components/statistics-charts-tabs/StatisticsChartsTabs';\r\nimport StatisticsBookingsList from './components/statistics-bookings-list/StatisticsBookingsList';\r\nimport {\r\n getPeriodRange,\r\n prepareReceivedStatisticsData\r\n} from 'utils/statistics/prepareStatisticsData';\r\n\r\nimport useStyles from './styles';\r\n\r\nfunction verticalTabProps(index) {\r\n return {\r\n id: `vertical-tab-${index}`,\r\n 'aria-controls': `vertical-tabpanel-${index}`\r\n };\r\n}\r\nconst initialValues = {\r\n statisticsPeriod: {\r\n startDate: moment().subtract(1, 'month'),\r\n endDate: moment()\r\n }\r\n};\r\nconst ACCOMMODATION_STATISTICS_TAB = 0;\r\nconst OPEN_ACTIVITIES_STATISTICS_TAB = 1;\r\nconst PRIVATE_ACTIVITIES_STATISTICS_TAB = 2;\r\n\r\nconst Statistics = props => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const { statisticsDate, businessOwner } = props;\r\n\r\n const [value, setValue] = React.useState(0);\r\n const handleChange = (event, newValue) => {\r\n setValue(newValue);\r\n };\r\n\r\n const statisticsPeriodRange = getPeriodRange(\r\n statisticsDate.values.statisticsPeriod\r\n );\r\n\r\n const { data, refetch } = useQuery(STATISTICS, {\r\n variables: {\r\n ...statisticsPeriodRange,\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n });\r\n const statisticsData = prepareReceivedStatisticsData(data);\r\n\r\n React.useEffect(() => {\r\n refetch();\r\n }, [statisticsDate]);\r\n\r\n return (\r\n <div className={classes.root}>\r\n <AppHeader />\r\n {!businessOwner.selectedBusinessOwner.id && <SelectCompanyBox />}\r\n {businessOwner.selectedBusinessOwner.id && (\r\n <div className={classes.toolbar}>\r\n <div className={classes.toolbarLeft}>\r\n <Typography variant=\"h2\" className={classes.toolbarTitle}>\r\n {t('Statistics')}\r\n </Typography>\r\n </div>\r\n <div className={classes.toolbarSwitchers}>\r\n <Tabs\r\n indicatorColor=\"primary\"\r\n value={value}\r\n onChange={handleChange}\r\n orientation=\"horizontal\"\r\n variant=\"scrollable\"\r\n >\r\n <Tab\r\n classes={{\r\n root: classes.customTabRoot,\r\n wrapper: classes.customTabWrapper,\r\n selected: classes.selected,\r\n textColorInherit: classes.textColorInheritCustom\r\n }}\r\n label={t('Accommodations')}\r\n {...verticalTabProps(ACCOMMODATION_STATISTICS_TAB)}\r\n />\r\n <Tab\r\n classes={{\r\n root: classes.customTabRoot,\r\n wrapper: classes.customTabWrapper,\r\n selected: classes.selected,\r\n textColorInherit: classes.textColorInheritCustom\r\n }}\r\n label={t('Open activities')}\r\n {...verticalTabProps(OPEN_ACTIVITIES_STATISTICS_TAB)}\r\n />\r\n <Tab\r\n classes={{\r\n root: classes.customTabRoot,\r\n wrapper: classes.customTabWrapper,\r\n selected: classes.selected,\r\n textColorInherit: classes.textColorInheritCustom\r\n }}\r\n label={t('Private Activities')}\r\n {...verticalTabProps(PRIVATE_ACTIVITIES_STATISTICS_TAB)}\r\n />\r\n </Tabs>\r\n </div>\r\n <div className={classes.datePickerWrapper}>\r\n <Field\r\n name=\"statisticsPeriod\"\r\n inputClassName={classes.inputClassName}\r\n className={classes.datePickerWrapper}\r\n minimumNights={0}\r\n availableRange={{\r\n endDate: moment(),\r\n startDate: moment('1970-01-01').format('YYYY-MM-DD'),\r\n daysOfWeek: []\r\n }}\r\n isOutsideRange={() => false}\r\n component={CustomDateRangePicker}\r\n statistics\r\n />\r\n </div>\r\n </div>\r\n )}\r\n {businessOwner.selectedBusinessOwner.id && (\r\n <div className={classes.content}>\r\n <div className={classes.tabsRoot}>\r\n <TabPanel\r\n className={classes.tabContentWrapper}\r\n value={value}\r\n index={ACCOMMODATION_STATISTICS_TAB}\r\n >\r\n {statisticsData && statisticsData.accommodationStatistics && (\r\n <StatisticsInfoTab\r\n total={statisticsData.accommodationStatistics.total}\r\n description=\"Slots are booked\"\r\n helpText=\"Number of slots is the number of days when the accommodations are booked\"\r\n overallLegendData={\r\n statisticsData.accommodationStatistics.overallLegendData\r\n }\r\n platformsLegendData={\r\n statisticsData.accommodationStatistics.platformsLegendData\r\n }\r\n />\r\n )}\r\n </TabPanel>\r\n <TabPanel\r\n className={classes.tabContentWrapper}\r\n value={value}\r\n index={OPEN_ACTIVITIES_STATISTICS_TAB}\r\n >\r\n {statisticsData && statisticsData.openActivitiesStatistics && (\r\n <StatisticsInfoTab\r\n total={statisticsData.openActivitiesStatistics.total}\r\n description=\"Participants who booked activities in total\"\r\n helpText=\"Number of participants who booked activities within the selected period\"\r\n overallLegendData={\r\n statisticsData.openActivitiesStatistics.overallLegendData\r\n }\r\n platformsLegendData={\r\n statisticsData.openActivitiesStatistics.platformsLegendData\r\n }\r\n />\r\n )}\r\n </TabPanel>\r\n <TabPanel\r\n className={classes.tabContentWrapper}\r\n value={value}\r\n index={PRIVATE_ACTIVITIES_STATISTICS_TAB}\r\n >\r\n {statisticsData && statisticsData.privateActivitiesStatistics && (\r\n <StatisticsInfoTab\r\n total={statisticsData.privateActivitiesStatistics.total}\r\n description=\"Slots are booked\"\r\n helpText=\"Number of slots is the number of each available date and / or start time when the activity is active and booked\"\r\n overallLegendData={\r\n statisticsData.privateActivitiesStatistics.overallLegendData\r\n }\r\n platformsLegendData={\r\n statisticsData.privateActivitiesStatistics\r\n .platformsLegendData\r\n }\r\n />\r\n )}\r\n </TabPanel>\r\n </div>\r\n {value === ACCOMMODATION_STATISTICS_TAB &&\r\n statisticsData.accommodationStatistics && (\r\n <StatisticsBookingsList\r\n bookingsData={\r\n statisticsData.accommodationStatistics.bookingsInfo\r\n }\r\n statisticsType=\"accommodationStatistics\"\r\n tableTitle=\"Accommodations list\"\r\n />\r\n )}\r\n {value === OPEN_ACTIVITIES_STATISTICS_TAB &&\r\n statisticsData.openActivitiesStatistics && (\r\n <StatisticsBookingsList\r\n bookingsData={\r\n statisticsData.openActivitiesStatistics.bookingsInfo\r\n }\r\n statisticsType=\"openActivitiesStatistics\"\r\n tableTitle=\"Open Activities list\"\r\n />\r\n )}\r\n {value === PRIVATE_ACTIVITIES_STATISTICS_TAB &&\r\n statisticsData.privateActivitiesStatistics && (\r\n <StatisticsBookingsList\r\n bookingsData={\r\n statisticsData.privateActivitiesStatistics.bookingsInfo\r\n }\r\n statisticsType=\"privateActivitiesStatistics\"\r\n tableTitle=\"Private Activities list\"\r\n />\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n ...state.form,\r\n businessOwner: state.businessOwner\r\n };\r\n};\r\n\r\nexport default reduxForm({\r\n form: 'statisticsDate',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n initialValues\r\n})(connect(mapStateToProps, null)(Statistics));\r\n","import gql from 'graphql-tag';\r\n\r\nexport const CREATE_PAYMENT_SETTING = gql`\r\n mutation createPaymentsSettings(\r\n $payPalSettings: [PayPalInput]\r\n $stripeSettings: [StripeInput]\r\n $payOnArrival: Boolean\r\n $businessOwnerId: Int\r\n ) {\r\n createPaymentsSettings(\r\n payPalSettings: $payPalSettings\r\n stripeSettings: $stripeSettings\r\n payOnArrival: $payOnArrival\r\n businessOwnerId: $businessOwnerId\r\n ) {\r\n ok\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_PAYMENT_SETTING = gql`\r\n mutation updatePaymentsSettings(\r\n $payPalSettings: [PayPalInput]\r\n $stripeSettings: [StripeInput]\r\n $deletedPayPalSettingsId: [Int]\r\n $deletedStripeSettingsId: [Int]\r\n $deletedPayOnArrivalSettingsId: [Int]\r\n $payOnArrival: Boolean\r\n $businessOwnerId: Int\r\n ) {\r\n updatePaymentsSettings(\r\n payPalSettings: $payPalSettings\r\n stripeSettings: $stripeSettings\r\n payOnArrival: $payOnArrival\r\n businessOwnerId: $businessOwnerId\r\n deletedPayPalSettingsId: $deletedPayPalSettingsId\r\n deletedStripeSettingsId: $deletedStripeSettingsId\r\n deletedPayOnArrivalSettingsId: $deletedPayOnArrivalSettingsId\r\n ) {\r\n ok\r\n }\r\n }\r\n`;\r\n\r\nexport const CREATE_INTEGRATIONS_SETTINGS = gql`\r\n mutation createIntegrationsSettings(\r\n $trekksoftSettings: TrekkSoftSettingsInput\r\n $expediaSettings: ExpediaSettingsInput\r\n $bookingSettings: BookingSettings\r\n $businessOwnerId: Int\r\n ) {\r\n createIntegrationsSettings(\r\n trekksoftSettings: $trekksoftSettings\r\n expediaSettings: $expediaSettings\r\n bookingSettings: $bookingSettings\r\n businessOwnerId: $businessOwnerId\r\n ) {\r\n ok\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_INTEGRATIONS_SETTINGS = gql`\r\n mutation updateIntegrationsSettings(\r\n $trekksoftSettings: TrekkSoftSettingsInput\r\n $expediaSettings: ExpediaSettingsInput\r\n $bookingSettings: BookingSettings\r\n $deletedTrekksoftSettingsId: Int\r\n $deletedExpediaSettingsId: Int\r\n $deletedBookingSettingsId: Int\r\n $deletedTrekksoftCategories: [Int]\r\n $businessOwnerId: Int\r\n ) {\r\n updateIntegrationsSettings(\r\n businessOwnerId: $businessOwnerId\r\n trekksoftSettings: $trekksoftSettings\r\n expediaSettings: $expediaSettings\r\n bookingSettings: $bookingSettings\r\n deletedExpediaSettingsId: $deletedExpediaSettingsId\r\n deletedBookingSettingsId: $deletedBookingSettingsId\r\n deletedTrekksoftSettingsId: $deletedTrekksoftSettingsId\r\n deletedTrekksoftCategories: $deletedTrekksoftCategories\r\n ) {\r\n ok\r\n }\r\n }\r\n`;\r\n\r\nexport const CREATE_GOOGLE_ANALYTICS_SETTINGS = gql`\r\n mutation createGoogleAnalyticsSettings(\r\n $googleAnalyticsId: String!\r\n $businessOwnerId: Int\r\n ) {\r\n createGoogleAnalyticsSettings(\r\n googleAnalyticsId: $googleAnalyticsId\r\n businessOwnerId: $businessOwnerId\r\n ) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_GOOGLE_ANALYTICS_SETTINGS = gql`\r\n mutation updateGoogleAnalyticsSettings(\r\n $googleAnalyticsId: String!\r\n $businessOwnerId: Int\r\n $googleAnalyticsSettingsId: Int\r\n ) {\r\n updateGoogleAnalyticsSettings(\r\n googleAnalyticsId: $googleAnalyticsId\r\n businessOwnerId: $businessOwnerId\r\n googleAnalyticsSettingsId: $googleAnalyticsSettingsId\r\n ) {\r\n ok\r\n }\r\n }\r\n`;\r\n\r\nexport const SET_EMAIL_TEMPLATE = gql`\r\n mutation setEmailTemplate($subject: String!, $body: String!, $ownerId: Int) {\r\n setEmailTemplate(subject: $subject, body: $body, ownerId: $ownerId) {\r\n status\r\n }\r\n }\r\n`;\r\n","import gql from 'graphql-tag';\r\n\r\nexport const USER_SETTINGS = gql`\r\n query userSettings($businessOwnerId: Int) {\r\n payPalSettings(businessOwnerId: $businessOwnerId) {\r\n id\r\n clientId\r\n clientSecret\r\n }\r\n stripeSettings(businessOwnerId: $businessOwnerId) {\r\n id\r\n publishableKey\r\n\r\n }\r\n payOnArrivalPossibility(businessOwnerId: $businessOwnerId) {\r\n id\r\n payOnArrival\r\n }\r\n googleAnalyticsSettings(businessOwnerId: $businessOwnerId) {\r\n id\r\n googleAnalyticsId\r\n }\r\n emailTemplates(businessOwnerId: $businessOwnerId) {\r\n subject\r\n body\r\n }\r\n trekksoftSettings(businessOwnerId: $businessOwnerId) {\r\n id\r\n apiClientId\r\n apiClientSecret\r\n merchantName\r\n }\r\n expediaSettings(businessOwnerId: $businessOwnerId) {\r\n id\r\n username\r\n password\r\n }\r\n trekksoftCategoriesMapping(businessOwnerId: $businessOwnerId) {\r\n id\r\n category\r\n categoryOnTrekksoft\r\n }\r\n bookingSettings(businessOwnerId: $businessOwnerId) {\r\n id\r\n username\r\n password\r\n }\r\n }\r\n`;\r\n\r\nexport const USER_SETTINGS_WITHOUT_SECRET_KEYS = gql`\r\n query userSettings($businessOwnerId: Int) {\r\n payPalSettings(businessOwnerId: $businessOwnerId) {\r\n id\r\n clientId\r\n clientSecret\r\n }\r\n stripeSettings(businessOwnerId: $businessOwnerId) {\r\n id\r\n publishableKey\r\n }\r\n payOnArrivalPossibility(businessOwnerId: $businessOwnerId) {\r\n id\r\n payOnArrival\r\n }\r\n googleAnalyticsSettings(businessOwnerId: $businessOwnerId) {\r\n id\r\n googleAnalyticsId\r\n }\r\n emailTemplates(businessOwnerId: $businessOwnerId) {\r\n subject\r\n body\r\n }\r\n trekksoftSettings(businessOwnerId: $businessOwnerId) {\r\n id\r\n apiClientId\r\n apiClientSecret\r\n merchantName\r\n }\r\n expediaSettings(businessOwnerId: $businessOwnerId) {\r\n id\r\n username\r\n }\r\n trekksoftCategoriesMapping(businessOwnerId: $businessOwnerId) {\r\n id\r\n category\r\n categoryOnTrekksoft\r\n }\r\n bookingSettings(businessOwnerId: $businessOwnerId) {\r\n id\r\n username\r\n }\r\n }\r\n`;\r\n","import {\r\n PAY_ON_ARRIVAL,\r\n PAY_PAL_SYSTEM,\r\n STRIPE_SYSTEM\r\n} from 'constants/userSettings';\r\n\r\nconst getPayPalSettings = (isUpdate, paymentsForm) => {\r\n const payPalSettings = [];\r\n\r\n paymentsForm.payments.forEach(item => {\r\n if (item.paymentSystem === PAY_PAL_SYSTEM) {\r\n const idObj = isUpdate && item.isCreated ? { id: parseInt(item.id) } : {};\r\n payPalSettings.push({\r\n ...idObj,\r\n clientId: item.clientId,\r\n clientSecret: item.clientSecret\r\n });\r\n }\r\n });\r\n return payPalSettings;\r\n};\r\n\r\nconst getPayOnArrivalSettings = paymentsForm => {\r\n let payOnArrival = null;\r\n\r\n paymentsForm.payments.forEach(item => {\r\n if (item.paymentSystem === PAY_ON_ARRIVAL) {\r\n payOnArrival = true;\r\n }\r\n });\r\n return payOnArrival;\r\n};\r\n\r\nconst getStripeSettings = (isUpdate, paymentsForm) => {\r\n const stripeSettings = [];\r\n\r\n paymentsForm.payments.forEach(item => {\r\n if (item.paymentSystem === STRIPE_SYSTEM) {\r\n const idObj = isUpdate && item.isCreated ? { id: parseInt(item.id) } : {};\r\n stripeSettings.push({\r\n ...idObj,\r\n publishableKey: item.publishableKey,\r\n secretKey: item.secretKey\r\n });\r\n }\r\n });\r\n return stripeSettings;\r\n};\r\nexport const prepareAllPaymentsSettingsData = (isUpdate, data) => {\r\n return {\r\n payPalSettings: getPayPalSettings(isUpdate, data),\r\n stripeSettings: getStripeSettings(isUpdate, data),\r\n payOnArrival: getPayOnArrivalSettings(data)\r\n };\r\n};\r\n\r\nexport const getDeletedPaymentsSettings = data => {\r\n const deletedPayments = {\r\n PayPal: [],\r\n Stripe: [],\r\n 'Pay on arrival': []\r\n };\r\n\r\n data.forEach(item => {\r\n deletedPayments[item.paymentSystem].push(item.id);\r\n });\r\n\r\n return deletedPayments;\r\n};\r\n\r\nexport const getReceivedPaymentsData = data => {\r\n const payments = [];\r\n\r\n if (data.payPalSettings) {\r\n payments.push({\r\n id: data.payPalSettings.id ? parseInt(data.payPalSettings.id) : 0,\r\n clientId: data.payPalSettings.clientId,\r\n paymentSystem: 'PayPal',\r\n clientSecret: data.payPalSettings.clientSecret,\r\n isCreated: true\r\n });\r\n }\r\n\r\n if (data.stripeSettings) {\r\n payments.push({\r\n id: data.stripeSettings.id ? parseInt(data.stripeSettings.id) : 0,\r\n paymentSystem: 'Stripe',\r\n publishableKey: data.stripeSettings.publishableKey,\r\n secretKey: data.stripeSettings.secretKey,\r\n isCreated: true\r\n });\r\n }\r\n\r\n if (data.payOnArrivalPossibility) {\r\n payments.push({\r\n id: data.payOnArrivalPossibility.id\r\n ? parseInt(data.payOnArrivalPossibility.id)\r\n : 0,\r\n paymentSystem: 'Pay on arrival',\r\n isCreated: true,\r\n payOnArrivalPossibility: data.payOnArrivalPossibility.payOnArrival\r\n ? 'Yes'\r\n : 'No'\r\n });\r\n }\r\n return payments;\r\n};\r\n\r\nexport const getReceivedIntegrationsData = data => {\r\n const integrations = [];\r\n if (data.trekksoftSettings) {\r\n integrations.push({\r\n id: data.trekksoftSettings.id ? parseInt(data.trekksoftSettings.id) : 0,\r\n apiClientId: data.trekksoftSettings.apiClientId,\r\n integrationPlatform: 'Trekksoft',\r\n apiClientSecret: data.trekksoftSettings.apiClientSecret,\r\n merchantName: data.trekksoftSettings.merchantName,\r\n isCreated: true\r\n });\r\n }\r\n\r\n if (data.expediaSettings) {\r\n integrations.push({\r\n id: data.expediaSettings.id ? parseInt(data.expediaSettings.id) : 0,\r\n username: data.expediaSettings.username,\r\n password: data.expediaSettings.password,\r\n integrationPlatform: 'Expedia',\r\n isCreated: true\r\n });\r\n }\r\n\r\n if (data.bookingSettings) {\r\n integrations.push({\r\n id: data.bookingSettings.id ? parseInt(data.bookingSettings.id) : 0,\r\n username: data.bookingSettings.username,\r\n password: data.bookingSettings.password,\r\n integrationPlatform: 'BOOKING',\r\n isCreated: true\r\n });\r\n }\r\n\r\n return integrations;\r\n};\r\n\r\nexport const getTrekkSoftSettings = (isUpdate, integrationsForm) => {\r\n let trekkSoftSettings = {};\r\n integrationsForm.integrations.forEach(item => {\r\n if (item.integrationPlatform === 'Trekksoft') {\r\n const idObj = isUpdate && item.isCreated ? { id: parseInt(item.id) } : {};\r\n\r\n trekkSoftSettings = {\r\n ...idObj,\r\n apiClientId: item.apiClientId,\r\n apiClientSecret: item.apiClientSecret,\r\n merchantName: item.merchantName\r\n };\r\n }\r\n });\r\n return trekkSoftSettings;\r\n};\r\n\r\nexport const getExpediaSettings = (isUpdate, integrationsForm) => {\r\n let expediaSettings = {};\r\n integrationsForm.integrations.forEach(item => {\r\n if (item.integrationPlatform === 'Expedia') {\r\n const idObj = isUpdate && item.isCreated ? { id: parseInt(item.id) } : {};\r\n expediaSettings = {\r\n ...idObj,\r\n username: item.username,\r\n password: item.password\r\n };\r\n }\r\n });\r\n return expediaSettings;\r\n};\r\n\r\nexport const getBookingSettings = (isUpdate, integrationsForm) => {\r\n let expediaSettings = {};\r\n integrationsForm.integrations.forEach(item => {\r\n if (item.integrationPlatform === 'BOOKING') {\r\n const idObj = isUpdate && item.isCreated ? { id: parseInt(item.id) } : {};\r\n expediaSettings = {\r\n ...idObj,\r\n username: item.username,\r\n password: item.password\r\n };\r\n }\r\n });\r\n return expediaSettings;\r\n};\r\n\r\nexport const getTrekkSoftCategoriesMapping = data => {\r\n const trekkSoftCategoriesMapping = [];\r\n if (data.trekksoftCategoriesMapping) {\r\n data.trekksoftCategoriesMapping.forEach(item => {\r\n trekkSoftCategoriesMapping.push({\r\n id: item.id ? parseInt(item.id) : 0,\r\n category: item.category,\r\n categoryOnTrekksoft: item.categoryOnTrekksoft,\r\n isCreated: true\r\n });\r\n });\r\n }\r\n return trekkSoftCategoriesMapping;\r\n};\r\n\r\nexport const getDeletedIntegrationsSettings = data => {\r\n const deletedIntegrationsSettings = {\r\n Trekksoft: null,\r\n Expedia: null,\r\n BOOKING: null\r\n };\r\n\r\n data.forEach(item => {\r\n deletedIntegrationsSettings[item.integrationPlatform] = item.id;\r\n });\r\n\r\n return deletedIntegrationsSettings;\r\n};\r\n\r\nexport const prepareCategoriesMappingData = (isUpdate, data) => {\r\n const preparedCategoriesMappingData = [];\r\n if (data.values.trekkSoftCategoriesMapping) {\r\n data.values.trekkSoftCategoriesMapping.forEach(item => {\r\n const idObj = isUpdate && item.isCreated ? { id: parseInt(item.id) } : {};\r\n preparedCategoriesMappingData.push({\r\n ...idObj,\r\n category: item.category,\r\n categoryOnTrekksoft: item.categoryOnTrekksoft\r\n });\r\n });\r\n }\r\n return preparedCategoriesMappingData;\r\n};\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme=>({\r\n wrapper: {\r\n margin: '30px 0'\r\n },\r\n title: {\r\n margin: '0 0 19px',\r\n [theme.breakpoints.down('sm')]:{\r\n textAlign: 'center'\r\n }\r\n\r\n },\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n },\r\n input: {\r\n width: '100%',\r\n marginBottom: '20px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n padding: '0 20px 0 20px'\r\n },\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Field, isDirty, reduxForm } from 'redux-form';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { FormActionButtons, Input } from 'components';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n id: '',\r\n googleAnalyticsId: ''\r\n};\r\n\r\nconst GoogleAnalyticsForm = ({ handleSubmit, isDirty }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('Google analytics settings')}\r\n </Typography>\r\n <form onSubmit={handleSubmit}>\r\n <Field\r\n name=\"googleAnalyticsId\"\r\n className={classes.input}\r\n inputProps={{ maxLength: 255 }}\r\n placeholder=\"Google analytics tracking id\"\r\n label=\"Google analytics tracking id *\"\r\n component={Input}\r\n />\r\n <FormActionButtons\r\n isDisabledAction={!isDirty}\r\n cancelPath=\"/\"\r\n actionLabel=\"Save\"\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n isDirty: isDirty('googleAnalyticsForm')(state)\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'googleAnalyticsForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: false,\r\n touchOnBlur: false,\r\n initialValues\r\n})(connect(mapStateToProps)(GoogleAnalyticsForm));\r\n","export const EMAIL_BODY = `Hi {name},\r\n\r\nThank you for booking {bookingName} with us!\r\n\r\nWe are pleased to confirm that your booking has been successfully completed.You can view all the details of your booking by following the link below:\r\n\r\nView Booking Details\r\n\r\n{bookingDetailsLink}\r\n\r\nCancellation Policy\r\n\r\n{cancellationPolicy}\r\n\r\nIf you need to cancel your booking, you can do so by clicking this link\r\n{bookingCancelLink}\r\n\r\nFor more information about our cancellation policy, please refer to the Cancellation Policy.\r\n\r\nTerms and Conditions\r\nBy completing this booking, you agree to our Terms and Conditions \r\n\r\n{termsAndConditionsLink}.\r\n\r\nWe look forward to providing you with a memorable experience. Should you have any questions or require further assistance, feel free to reach out.\r\n\r\nKind regards,\r\n{companyName}`;\r\n\r\nexport const EMAIL_SUBJECT = 'Booking info';\r\n\r\nexport const EMAIL_INFO = {\r\n name: 'the name and surname of the person who made the booking',\r\n bookingName: 'the name of booked activity or accommodation',\r\n bookingDetailsLink: 'a link with booking details',\r\n bookingCancelLink: 'a link to cancel the booking',\r\n termsAndConditionsLink: 'a link for terms and conditions',\r\n companyName: 'Name of your company'\r\n};\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme =>({\r\n wrapper: {\r\n display: 'flex',\r\n height: '100%',\r\n [theme.breakpoints.down('sm')]:{\r\n flexDirection: 'column',\r\n width: '100%'\r\n }\r\n },\r\n emailSettingsWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n width: 'calc(100% - 300px)',\r\n paddingTop: '30px',\r\n marginBottom : '80px',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n marginBottom : '0px',\r\n }\r\n },\r\n emailSettings: {\r\n width: '600px',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n \r\n }\r\n },\r\n title: {\r\n margin: '0 0 19px',\r\n [theme.breakpoints.down('sm')]:{\r\n textAlign: 'center'\r\n }\r\n },\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '100%'\r\n },\r\n input: {\r\n width: '100%',\r\n marginBottom: '20px',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n padding: '5px 20px 2px 20px'\r\n }\r\n },\r\n actionButtons: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n padding: '0px 20px 0px 20px'\r\n }\r\n },\r\n resetButton: {\r\n border: '1px solid #0e8bb4',\r\n borderRadius: '3px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 500,\r\n color: '#0e8bb4',\r\n padding: '8px 15px',\r\n minWidth: '80px',\r\n marginRight: '15px'\r\n },\r\n\r\n info: {\r\n width: '240px',\r\n padding: '30px 30px 0',\r\n borderLeft: '1px solid #E5E5E5',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n paddingBottom: '50px'\r\n \r\n }\r\n },\r\n infoList: {\r\n background: '#E2F5F8',\r\n border: '1px solid #B5E6EE',\r\n borderRadius: '3px',\r\n overflow: 'hidden',\r\n padding: '12px 10px',\r\n width: '220px',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n \r\n }\r\n },\r\n infoItem: {\r\n color: '#005A81',\r\n margin: '0 0 15px',\r\n '&:last-child': {\r\n margin: 0\r\n }\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { change, Field, isDirty, reduxForm } from 'redux-form';\r\n\r\nimport { Typography, Button } from '@material-ui/core';\r\n\r\nimport { FormActionButtons, Input, TextareaInput } from '../index';\r\n\r\nimport { EMAIL_BODY, EMAIL_INFO, EMAIL_SUBJECT } from './constants';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nconst initialValues = {\r\n id: '',\r\n subject: EMAIL_SUBJECT,\r\n body: EMAIL_BODY\r\n};\r\n\r\nconst EmailSettingsForm = ({ handleSubmit, isDirty, changeFieldValue }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const setDefaultEmail = () => {\r\n changeFieldValue('subject', EMAIL_SUBJECT);\r\n changeFieldValue('body', EMAIL_BODY);\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <div className={classes.emailSettingsWrapper}>\r\n <div className={classes.emailSettings}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('Email settings')}\r\n </Typography>\r\n <form onSubmit={handleSubmit}>\r\n <Field\r\n name=\"subject\"\r\n className={classes.input}\r\n inputProps={{ maxLength: 255 }}\r\n placeholder=\"Subject\"\r\n label=\"Subject *\"\r\n component={Input}\r\n />\r\n <Field\r\n name=\"body\"\r\n className={classes.input}\r\n maxLength=\"2000\"\r\n rows={5}\r\n rowsMax={100}\r\n placeholder=\"Body\"\r\n label=\"Body *\"\r\n isAutosize={true}\r\n component={TextareaInput}\r\n />\r\n <div className={classes.actionButtons}>\r\n <Button\r\n type=\"button\"\r\n variant=\"outlined\"\r\n classes={{\r\n root: classes.resetButton\r\n }}\r\n onClick={setDefaultEmail}\r\n >\r\n {t('Set default')}\r\n </Button>\r\n\r\n <FormActionButtons\r\n isDisabledAction={!isDirty}\r\n cancelPath=\"/\"\r\n actionLabel=\"Save\"\r\n />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <div className={classes.info}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('Info')}\r\n </Typography>\r\n <div className={classes.infoList}>\r\n {Object.keys(EMAIL_INFO).map(key => (\r\n <p className={classes.infoItem}>\r\n <b>{`{${key}}`}</b> - {t(EMAIL_INFO[key])};\r\n </p>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n isDirty: isDirty('emailSettingsForm')(state)\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFieldValue: (field, value) => {\r\n dispatch(change('emailSettingsForm', field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'emailSettingsForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: false,\r\n touchOnBlur: false,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(EmailSettingsForm));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%'\r\n },\r\n toolbar: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n boxShadow: '0px 1px 0px #E5E5E5',\r\n boxSizing: 'border-box',\r\n marginBottom: '5px',\r\n minHeight: '48px',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n minHeight: 'auto'\r\n }\r\n },\r\n toolbarLeft: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n minWidth: '140px',\r\n height: '100%',\r\n borderRight: '1px solid #E2EBF6',\r\n boxSizing: 'border-box',\r\n color: '#59758B',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: '100%',\r\n borderRight: 'none',\r\n borderBottom: '1px solid #E2EBF6',\r\n justifyContent:'center'\r\n }\r\n },\r\n toolbarTitle: {\r\n padding: '12px 30px',\r\n fontWeight: 'bold',\r\n fontSize: '18px',\r\n lineHeight: '24px',\r\n color: '#000000',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '8px 20px',\r\n fontSize: '16px'\r\n }\r\n },\r\n customTabRoot: {\r\n color: '#335267',\r\n padding: '12px 17px',\r\n borderBottom: '1px solid #E2EBF6',\r\n boxSizing: 'border-box',\r\n fontSize: '13px',\r\n minWidth: '84px!important',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '10px 15px',\r\n fontSize: '12px',\r\n overflowX: 'auto', \r\n display: 'flex', \r\n\r\n }\r\n },\r\n toolbarSwitchers: {\r\n flexDirection: 'row',\r\n Width: '540px',\r\n [theme.breakpoints.down('sm')]: { \r\n width: '100%', \r\n justifyContent: 'center',\r\n // flexDirection: 'row',\r\n }\r\n },\r\n tabsRoot: {\r\n flex: '1 1 auto',\r\n backgroundColor: theme.palette.background.paper,\r\n display: 'flex',\r\n \r\n },\r\n tabs: {\r\n flex: '0 1 220px',\r\n [theme.breakpoints.down('sm')]: {\r\n flex: '0 1 auto'\r\n }\r\n },\r\n // customTabWrapper: {\r\n // alignItems: 'flex-start'\r\n // },\r\n content: {\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n justifyContent: 'center'\r\n },\r\n selected: {\r\n backgroundColor: '#E2F5F8',\r\n fontWeight: 'bold'\r\n },\r\n loaderWrapper: {\r\n position: 'fixed'\r\n },\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important'\r\n },\r\n tab: {\r\n maxWidth: '600px'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport uuid from 'uuid/v1';\r\n\r\nimport { useSnackbar } from 'notistack';\r\nimport { connect } from 'react-redux';\r\nimport { initialize } from 'redux-form';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\n\r\nimport { Tab, Typography } from '@material-ui/core';\r\nimport Tabs from '@material-ui/core/Tabs';\r\n\r\nimport {\r\n AppHeader,\r\n CircularLoader,\r\n TabPanel,\r\n Payments,\r\n Integrations,\r\n SelectCompanyBox\r\n} from 'components';\r\n\r\nimport {\r\n CREATE_PAYMENT_SETTING,\r\n UPDATE_PAYMENT_SETTING,\r\n CREATE_INTEGRATIONS_SETTINGS,\r\n UPDATE_INTEGRATIONS_SETTINGS,\r\n CREATE_GOOGLE_ANALYTICS_SETTINGS,\r\n UPDATE_GOOGLE_ANALYTICS_SETTINGS,\r\n SET_EMAIL_TEMPLATE\r\n} from 'graphql/mutations/settings';\r\n\r\nimport { USER_SETTINGS } from 'graphql/queries/settings';\r\n\r\nimport {\r\n prepareAllPaymentsSettingsData,\r\n getReceivedPaymentsData,\r\n getDeletedPaymentsSettings,\r\n getReceivedIntegrationsData,\r\n getTrekkSoftSettings,\r\n getDeletedIntegrationsSettings,\r\n getTrekkSoftCategoriesMapping,\r\n prepareCategoriesMappingData,\r\n getExpediaSettings,\r\n getBookingSettings\r\n} from 'utils/prepareUserSettingsData';\r\n\r\nimport GoogleAnalyticsForm from '../../components/google-analytics-form/GoogleAnalyticsForm';\r\nimport EmailSettingsForm from '../../components/email-settings-form/EmailSettingsForm';\r\n\r\nimport { resetDeletedIntegrationSettings } from '../../actions/userSettings';\r\n\r\nimport useStyles from './styles';\r\n\r\nfunction verticalTabProps(index) {\r\n return {\r\n id: `vertical-tab-${index}`,\r\n 'aria-controls': `vertical-tabpanel-${index}`\r\n };\r\n}\r\n\r\nconst PAYMENTS_TAB_INDEX = 0;\r\nconst INTEGRATIONS_TAB_INDEX = 1;\r\nconst GOOGLE_ANALYTICS_TAB_INDEX = 2;\r\nconst EMAIL_TAB_INDEX = 3;\r\n\r\nconst SettingsPage = ({ ...props }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const {\r\n initializeForm,\r\n deletedPaymentsSettings,\r\n deletedIntegrationsSettings,\r\n deletedTrekksoftCategories,\r\n trekkSoftCategoriesMapping,\r\n businessOwner,\r\n resetDeletedIntegrationSettings\r\n } = props;\r\n\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const { data, refetch, networkStatus } = useQuery(USER_SETTINGS, {\r\n variables: {\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n },\r\n fetchPolicy: 'network-only',\r\n notifyOnNetworkStatusChange: true\r\n });\r\n\r\n const [value, setValue] = React.useState(0);\r\n const [savedForms, setSavedForms] = React.useState({});\r\n const [isLoading, setIsLoading] = React.useState(true);\r\n const [isUpdatePayments, setIsUpdatePayments] = React.useState(false);\r\n const [isUpdateIntegrations, setIsUpdateIntegrations] = React.useState(false);\r\n const [isUpdateGoogleAnalytics, setIsUpdateGoogleAnalytics] = React.useState(\r\n false\r\n );\r\n const [isInitializedForm, setIsInitializedForm] = React.useState(false);\r\n\r\n const [createPaymentsSettings] = useMutation(CREATE_PAYMENT_SETTING);\r\n const [updatePaymentsSettings] = useMutation(UPDATE_PAYMENT_SETTING);\r\n const [createIntegrationsSettings] = useMutation(\r\n CREATE_INTEGRATIONS_SETTINGS\r\n );\r\n const [updateIntegrationsSettings] = useMutation(\r\n UPDATE_INTEGRATIONS_SETTINGS\r\n );\r\n\r\n const [createGoogleAnalyticsSettings] = useMutation(\r\n CREATE_GOOGLE_ANALYTICS_SETTINGS\r\n );\r\n const [updateGoogleAnalyticsSettings] = useMutation(\r\n UPDATE_GOOGLE_ANALYTICS_SETTINGS\r\n );\r\n\r\n const [setEmailTemplate] = useMutation(SET_EMAIL_TEMPLATE);\r\n\r\n React.useEffect(() => {\r\n if (data && networkStatus === 7) {\r\n setIsLoading(false);\r\n const paymentsData = getReceivedPaymentsData(data);\r\n const integrationsData = getReceivedIntegrationsData(data);\r\n const trekksoftCategoriesMapping = getTrekkSoftCategoriesMapping(data);\r\n\r\n setIsUpdatePayments(!!paymentsData.length);\r\n setIsUpdateIntegrations(!!integrationsData.length);\r\n setIsUpdateGoogleAnalytics(!!data.googleAnalyticsSettings);\r\n\r\n const savedForm = {\r\n paymentsForm: { payments: paymentsData },\r\n integrationSettingsForm: {\r\n integrations: integrationsData\r\n },\r\n trekkSoftCategoriesMapping: {\r\n trekkSoftCategoriesMapping: trekksoftCategoriesMapping\r\n },\r\n googleAnalyticsForm: { ...data.googleAnalyticsSettings }\r\n };\r\n\r\n let emailSettingsForm = null;\r\n\r\n if (data.emailTemplates && data.emailTemplates.length) {\r\n emailSettingsForm = data.emailTemplates[0];\r\n savedForm.emailSettingsForm = emailSettingsForm;\r\n }\r\n\r\n setSavedForms(savedForm);\r\n\r\n let initialValues = {\r\n paymentsForm: {\r\n payments:\r\n paymentsData && paymentsData.length\r\n ? paymentsData\r\n : [\r\n {\r\n id: uuid(),\r\n paymentSystem: ''\r\n }\r\n ]\r\n },\r\n integrationSettingsForm: {\r\n integrations:\r\n integrationsData && integrationsData.length\r\n ? integrationsData\r\n : [\r\n {\r\n id: uuid(),\r\n integrationPlatform: ''\r\n }\r\n ]\r\n },\r\n trekkSoftCategoriesMapping: {\r\n trekkSoftCategoriesMapping: trekksoftCategoriesMapping\r\n },\r\n googleAnalyticsForm: { ...data.googleAnalyticsSettings }\r\n };\r\n\r\n if (emailSettingsForm) {\r\n initialValues.emailSettingsForm = emailSettingsForm;\r\n }\r\n\r\n initializeForms(initialValues);\r\n setIsInitializedForm(true);\r\n }\r\n }, [data]);\r\n\r\n const initializeForms = initialFormsData => {\r\n Object.keys(initialFormsData).map(field => {\r\n initializeForm(field, initialFormsData[field]);\r\n });\r\n };\r\n\r\n const handleChange = (event, newValue) => {\r\n setValue(newValue);\r\n };\r\n\r\n const paymentsSubmit = values => {\r\n if (isUpdatePayments) {\r\n const dataToStore = prepareAllPaymentsSettingsData(\r\n isUpdatePayments,\r\n values\r\n );\r\n const deletedSettings = getDeletedPaymentsSettings(\r\n deletedPaymentsSettings\r\n );\r\n updatePaymentsSettings({\r\n variables: {\r\n ...dataToStore,\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id,\r\n deletedPayPalSettingsId: deletedSettings.PayPal,\r\n deletedStripeSettingsId: deletedSettings.Stripe,\r\n deletedPayOnArrivalSettingsId: deletedSettings['Pay on arrival']\r\n }\r\n })\r\n .then(() => {\r\n enqueueSnackbar(t('Settings have been successfully updated'), {\r\n variant: 'success'\r\n });\r\n initializeForm('paymentsForm', values, false, {\r\n keepSubmitSucceeded: true\r\n }); \r\n });\r\n\r\n } else {\r\n const dataToStore = prepareAllPaymentsSettingsData(\r\n isUpdatePayments,\r\n values\r\n );\r\n createPaymentsSettings({\r\n variables: {\r\n ...dataToStore,\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n }).then(() => {\r\n enqueueSnackbar(t('Settings have been successfully saved'), {\r\n variant: 'success'\r\n });\r\n initializeForm('paymentsForm', values, false, {\r\n keepSubmitSucceeded: true\r\n });\r\n });\r\n }\r\n };\r\n \r\n const integrationsSubmit = values => {\r\n setIsLoading(true);\r\n\r\n if (isUpdateIntegrations) {\r\n const trekksoftSettings = getTrekkSoftSettings(\r\n isUpdateIntegrations,\r\n values\r\n );\r\n\r\n const expediaSettings = getExpediaSettings(isUpdateIntegrations, values);\r\n const bookingSettings = getBookingSettings(isUpdateIntegrations, values);\r\n const deletedSettings = getDeletedIntegrationsSettings(\r\n deletedIntegrationsSettings\r\n );\r\n trekksoftSettings.categoriesMapping = prepareCategoriesMappingData(\r\n isUpdateIntegrations,\r\n trekkSoftCategoriesMapping\r\n );\r\n\r\n let variables = {\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id,\r\n deletedTrekksoftSettingsId: deletedSettings.Trekksoft,\r\n deletedTrekksoftCategories: deletedTrekksoftCategories,\r\n deletedExpediaSettingsId: deletedSettings.Expedia,\r\n deletedBookingSettingsId: deletedSettings.BOOKING,\r\n expediaSettings: expediaSettings,\r\n bookingSettings: bookingSettings\r\n };\r\n\r\n if (!deletedSettings.Trekksoft && deletedSettings.Trekksoft >= 0) {\r\n variables['trekksoftSettings'] = trekksoftSettings;\r\n }\r\n\r\n updateIntegrationsSettings({\r\n variables: variables\r\n })\r\n .then(() => {\r\n enqueueSnackbar(t('Settings have been successfully updated'), {\r\n variant: 'success'\r\n });\r\n refetch({\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n });\r\n resetDeletedIntegrationSettings();\r\n })\r\n .catch(() => {\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n setIsLoading(false);\r\n resetDeletedIntegrationSettings();\r\n });\r\n } else {\r\n const trekksoftSettings = getTrekkSoftSettings(\r\n isUpdateIntegrations,\r\n values\r\n );\r\n\r\n const expediaSettings = getExpediaSettings(isUpdateIntegrations, values);\r\n const bookingSettings = getBookingSettings(isUpdateIntegrations, values);\r\n\r\n trekksoftSettings.categoriesMapping = prepareCategoriesMappingData(\r\n isUpdateIntegrations,\r\n trekkSoftCategoriesMapping\r\n );\r\n createIntegrationsSettings({\r\n variables: {\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id,\r\n trekksoftSettings: trekksoftSettings,\r\n expediaSettings: expediaSettings,\r\n bookingSettings: bookingSettings\r\n }\r\n })\r\n .then(() => {\r\n enqueueSnackbar(t('Settings have been successfully saved'), {\r\n variant: 'success'\r\n });\r\n refetch({\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n });\r\n resetDeletedIntegrationSettings();\r\n })\r\n .catch(() => {\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n setIsLoading(false);\r\n resetDeletedIntegrationSettings();\r\n });\r\n }\r\n };\r\n\r\n const googleAnalyticsSettingsSubmit = values => {\r\n if (isUpdateGoogleAnalytics) {\r\n updateGoogleAnalyticsSettings({\r\n variables: {\r\n googleAnalyticsSettingsId: values.id,\r\n googleAnalyticsId: values.googleAnalyticsId,\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n }).then(() => {\r\n enqueueSnackbar(t('Settings have been successfully updated'), {\r\n variant: 'success'\r\n });\r\n initializeForm('googleAnalyticsForm', values, false, {\r\n keepSubmitSucceeded: true\r\n });\r\n });\r\n } else {\r\n createGoogleAnalyticsSettings({\r\n variables: {\r\n googleAnalyticsId: values.googleAnalyticsId || '',\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n }).then(() => {\r\n enqueueSnackbar(t('Settings have been successfully saved'), {\r\n variant: 'success'\r\n });\r\n initializeForm('googleAnalyticsForm', values, false, {\r\n keepSubmitSucceeded: true\r\n });\r\n });\r\n }\r\n };\r\n\r\n const emailSettingsSubmit = values => {\r\n setEmailTemplate({\r\n variables: {\r\n subject: values.subject,\r\n body: values.body,\r\n ownerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n })\r\n .then(({ data }) => {\r\n if (data.setEmailTemplate.status) {\r\n enqueueSnackbar(t('Settings have been successfully updated'), {\r\n variant: 'success'\r\n });\r\n initializeForm('emailSettingsForm', values, false, {\r\n keepSubmitSucceeded: true\r\n });\r\n } else {\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n }\r\n setIsLoading(false);\r\n })\r\n .catch(() => {\r\n enqueueSnackbar(t('Email address is not verified'), {\r\n variant: 'error'\r\n });\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n <div className={classes.root}>\r\n <AppHeader />\r\n <CircularLoader\r\n isLoading={isLoading}\r\n className={classes.loaderWrapper}\r\n loaderClassName={classes.loaderClassName}\r\n />\r\n {!businessOwner.selectedBusinessOwner.id && <SelectCompanyBox />}\r\n {businessOwner.selectedBusinessOwner.id && (\r\n <div className={classes.toolbar}>\r\n <div className={classes.toolbarLeft}>\r\n <Typography variant=\"h2\" className={classes.toolbarTitle}>\r\n {t('Settings')}\r\n </Typography>\r\n </div>\r\n <div className={classes.toolbarSwitchers}>\r\n <Tabs\r\n indicatorColor=\"primary\"\r\n value={value}\r\n onChange={handleChange}\r\n orientation=\"horizontal\"\r\n variant=\"scrollable\"\r\n >\r\n <Tab\r\n classes={{\r\n root: classes.customTabRoot,\r\n wrapper: classes.customTabWrapper,\r\n selected: classes.selected,\r\n textColorInherit: classes.textColorInheritCustom\r\n }}\r\n label={t('Payments')}\r\n {...verticalTabProps(PAYMENTS_TAB_INDEX)}\r\n />\r\n <Tab\r\n classes={{\r\n root: classes.customTabRoot,\r\n wrapper: classes.customTabWrapper,\r\n selected: classes.selected,\r\n textColorInherit: classes.textColorInheritCustom\r\n }}\r\n label={t('Integrations')}\r\n {...verticalTabProps(INTEGRATIONS_TAB_INDEX)}\r\n />\r\n <Tab\r\n classes={{\r\n root: classes.customTabRoot,\r\n wrapper: classes.customTabWrapper,\r\n selected: classes.selected,\r\n textColorInherit: classes.textColorInheritCustom\r\n }}\r\n label={t('Google analytics')}\r\n {...verticalTabProps(INTEGRATIONS_TAB_INDEX)}\r\n />\r\n <Tab\r\n classes={{\r\n root: classes.customTabRoot,\r\n wrapper: classes.customTabWrapper,\r\n selected: classes.selected,\r\n textColorInherit: classes.textColorInheritCustom\r\n }}\r\n label={t('Confirmation Email')}\r\n {...verticalTabProps(INTEGRATIONS_TAB_INDEX)}\r\n />\r\n </Tabs>\r\n </div>\r\n </div>\r\n )}\r\n {businessOwner.selectedBusinessOwner.id && isInitializedForm && (\r\n <div className={classes.content}>\r\n <TabPanel\r\n value={value}\r\n index={PAYMENTS_TAB_INDEX}\r\n className={classes.tab}\r\n >\r\n <Payments\r\n onSubmit={values => {\r\n setSavedForms({\r\n ...savedForms,\r\n paymentsForm: { ...values }\r\n });\r\n paymentsSubmit(values);\r\n }}\r\n />\r\n </TabPanel>\r\n <TabPanel\r\n value={value}\r\n index={INTEGRATIONS_TAB_INDEX}\r\n className={classes.tab}\r\n >\r\n <Integrations\r\n onSubmit={values => {\r\n setSavedForms({\r\n ...savedForms,\r\n integrationSettingsForm: { ...values }\r\n });\r\n integrationsSubmit(values);\r\n }}\r\n />\r\n </TabPanel>\r\n <TabPanel\r\n value={value}\r\n index={GOOGLE_ANALYTICS_TAB_INDEX}\r\n className={classes.tab}\r\n >\r\n <GoogleAnalyticsForm\r\n onSubmit={values => {\r\n setSavedForms({\r\n ...savedForms,\r\n googleAnalyticsForm: { ...values }\r\n });\r\n googleAnalyticsSettingsSubmit(values);\r\n }}\r\n />\r\n </TabPanel>\r\n\r\n <TabPanel value={value} index={EMAIL_TAB_INDEX}>\r\n <EmailSettingsForm\r\n onSubmit={values => {\r\n setSavedForms({\r\n ...savedForms,\r\n emailSettingsForm: { ...values }\r\n });\r\n emailSettingsSubmit(values);\r\n }}\r\n />\r\n </TabPanel>\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n initializeForm: (form, data) => {\r\n dispatch(initialize(form, data));\r\n },\r\n resetDeletedIntegrationSettings: () => {\r\n dispatch(resetDeletedIntegrationSettings());\r\n }\r\n});\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n businessOwner: state.businessOwner,\r\n trekkSoftCategoriesMapping: state.form.trekkSoftCategoriesMapping,\r\n deletedPaymentsSettings: state.userSettings.deletedPaymentsSettings,\r\n deletedIntegrationsSettings: state.userSettings.deletedIntegrationsSettings,\r\n deletedTrekksoftCategories: state.userSettings.deletedTrekksoftCategories\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SettingsPage);\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n generalRow: {\r\n display: 'flex',\r\n padding: '18px 0 12px',\r\n borderBottom: '1px solid #E4EBF5',\r\n // [theme.breakpoints.down('sm')]: {\r\n // flexDirection: 'column',\r\n // padding: '12px 0'\r\n // },\r\n },\r\n tableName: {\r\n minWidth: '240px',\r\n padding: '0 30px',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: '150px',\r\n padding: '25px 0px 0px 30px '\r\n },\r\n \r\n },\r\n columnWrapper: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n \r\n },\r\n column: {\r\n width: '100%',\r\n textAlign: 'center',\r\n textTransform: 'capitalize',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '20px ',\r\n marginLeft: '28px'\r\n \r\n }\r\n \r\n },\r\n sameDay: {\r\n color: '#1D9DC6',\r\n fontWeight: 'bold',\r\n borderBottom: '2px solid #1D9DC6',\r\n marginBottom: '-12px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '0',\r\n borderBottom: 'none'\r\n },\r\n },\r\n selectedDay: {\r\n color: '#59758B',\r\n fontWeight: 'bold',\r\n borderBottom: '2px solid #59758B',\r\n marginBottom: '-12px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '0',\r\n borderBottom: 'none'\r\n },\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport moment from 'moment';\r\nimport classNames from 'classnames';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport { LOCALES_OBJ } from 'constants/base';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst CalendarGeneralRow = ({ rangeList, title, selectedDate }) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n return (\r\n <div className={classes.generalRow}>\r\n <Typography variant=\"h2\" className={classes.tableName}>\r\n {t(title)}\r\n </Typography>\r\n <div className={classes.columnWrapper}>\r\n {rangeList.map((item, index) => {\r\n const day = moment(item.day, 'dddd')\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('dddd');\r\n const isSameDay = moment().isSame(item.date, 'day');\r\n const isSelectedDay = selectedDate\r\n ? moment(selectedDate).isSame(item.date, 'day')\r\n : false;\r\n return (\r\n <Typography\r\n key={index}\r\n variant=\"body1\"\r\n className={classNames(classes.column, {\r\n [classes.sameDay]: isSameDay,\r\n [classes.selectedDay]: !isSameDay && isSelectedDay\r\n })}\r\n >\r\n {`${day} ${item.number}`}\r\n </Typography>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default CalendarGeneralRow;\r\n","import { Hidden } from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { BorderRight } from '@material-ui/icons';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n header: {\r\n display: 'flex',\r\n boxShadow: '0px 1px 0px #E2EBF6',\r\n padding: '0 25px',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n padding: '0 15px',\r\n },\r\n },\r\n backAction: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '8px 25px 8px 0',\r\n boxShadow: '1px 0px 0px #E2EBF6',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '8px 15px 8px 0',\r\n boxShadow: 'none',\r\n borderBottom: '1px solid #E2EBF6',\r\n justifyContent: 'center'\r\n },\r\n },\r\n backButtonTitle: {\r\n color: '#59758B',\r\n },\r\n backIcon: {\r\n fontSize: '18px',\r\n color: '#59758B',\r\n },\r\n headerTitle: {\r\n borderLeft: '1px solid #E2EBF6',\r\n borderRadius: 0,\r\n color: '#071B27',\r\n marginLeft: '5px',\r\n paddingLeft: '15px',\r\n fontWeight: 'bold',\r\n [theme.breakpoints.down('sm')]: {\r\n textAlign: 'center',\r\n width: '100%',\r\n justifyContent: 'center',\r\n display: 'flex',\r\n borderLeft: 'hidden',\r\n paddingRight: '30px'\r\n \r\n },\r\n },\r\n rangeWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n paddingLeft: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n // paddingLeft: '15px',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n },\r\n button: {\r\n border: '1px solid #0E8BB4',\r\n borderRadius: '3px',\r\n padding: '5px 29px',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '5px 20px',\r\n marginTop: '10px',\r\n marginBottom: '10px'\r\n },\r\n },\r\n todayTitle: {\r\n color: '#0E8BB4',\r\n fontWeight: 'bold',\r\n },\r\n range: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginLeft: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginLeft: '15px',\r\n },\r\n },\r\n rangeIcon: {\r\n fontSize: '15px',\r\n border: '1px solid #000',\r\n borderRadius: '100%',\r\n padding: '1px',\r\n cursor: 'pointer',\r\n },\r\n rangeDates: {\r\n margin: '0 15px',\r\n },\r\n disabledRangeIcon: {\r\n cursor: 'not-allowed',\r\n },\r\n datePickerButton: {\r\n marginBottom: '0',\r\n marginLeft: '20px',\r\n position: 'relative',\r\n [theme.breakpoints.down('sm')]: {\r\n marginLeft: '10px',\r\n \r\n },\r\n '& .inputSinglePicker': {\r\n position: 'absolute',\r\n top: '-5px',\r\n },\r\n '& .DateInput_input': {\r\n cursor: 'default',\r\n },\r\n },\r\n\r\n datePickerWrapper: {\r\n position: 'relative',\r\n '& .SingleDatePicker_picker': {\r\n [theme.breakpoints.down('sm')]: {\r\n left: 'auto !important', // Override left positioning\r\n right: 0, // Position to the right\r\n },\r\n },\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport moment from 'moment';\r\nimport classNames from 'classnames';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport { Typography } from '@material-ui/core';\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport KeyboardBackspaceIcon from '@material-ui/icons/KeyboardBackspace';\r\nimport ArrowBackIosOutlinedIcon from '@material-ui/icons/ArrowBackIosOutlined';\r\nimport ArrowForwardIosOutlinedIcon from '@material-ui/icons/ArrowForwardIosOutlined';\r\n\r\nimport { SingleDatePicker } from '../../../../components';\r\n\r\nimport { LOCALES_OBJ } from 'constants/base';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst OverviewCalendarHeader = ({\r\n startDate,\r\n endDate,\r\n changeWeekCallback,\r\n tabIndex,\r\n selectedDate,\r\n setSelectedDate\r\n}) => {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n const isPreviousWeekButton = () => {\r\n return !moment().isBetween(startDate, endDate, 'day', '[]');\r\n };\r\n\r\n const handleDatePickerChanges = value => {\r\n setSelectedDate(value);\r\n changeWeekCallback({\r\n startDate: moment(value).startOf('isoWeek'),\r\n endDate: moment(value).endOf('isoWeek')\r\n });\r\n };\r\n\r\n const nextWeek = () => {\r\n const newStartDate = moment(startDate).add(7, 'day');\r\n changeWeekCallback({\r\n startDate: newStartDate,\r\n endDate: moment(endDate).add(7, 'day')\r\n });\r\n };\r\n\r\n const previousWeek = () => {\r\n const newStartDate = moment(startDate).subtract(7, 'day');\r\n changeWeekCallback({\r\n startDate: newStartDate,\r\n endDate: moment(endDate).subtract(7, 'day')\r\n });\r\n };\r\n\r\n const setCurrentWeek = () => {\r\n changeWeekCallback({\r\n startDate: moment().startOf('isoWeek'),\r\n endDate: moment().endOf('isoWeek')\r\n });\r\n };\r\n\r\n return (\r\n <div className={classes.header}>\r\n <div className={classes.backAction}>\r\n <Button\r\n startIcon={<KeyboardBackspaceIcon className={classes.backIcon} />}\r\n onClick={() => {\r\n history.push({\r\n pathname: '/',\r\n state: {\r\n tabNumber: tabIndex\r\n }\r\n });\r\n }}\r\n >\r\n <Typography variant=\"body1\" className={classes.backButtonTitle}>\r\n {t('Back')}\r\n </Typography>\r\n </Button>\r\n <Typography variant=\"h1\" className={classes.headerTitle}>\r\n {t('Calendar')}\r\n </Typography>\r\n </div>\r\n <div className={classes.rangeWrapper}>\r\n <Button\r\n variant=\"outlined\"\r\n className={classes.button}\r\n onClick={setCurrentWeek}\r\n >\r\n <Typography variant=\"body1\" className={classes.todayTitle}>\r\n {t('Today')}\r\n </Typography>\r\n </Button>\r\n <div className={classes.range}>\r\n <ArrowBackIosOutlinedIcon\r\n className={classNames(classes.rangeIcon, {\r\n [classes.disabledRangeIcon]: !isPreviousWeekButton()\r\n })}\r\n onClick={() => isPreviousWeekButton() && previousWeek()}\r\n />\r\n <Typography variant=\"body1\" className={classes.rangeDates}>\r\n {moment(startDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMMM D, YYYY')}{' '}\r\n –{' '}\r\n {moment(endDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMMM D, YYYY')}\r\n </Typography>\r\n <ArrowForwardIosOutlinedIcon\r\n className={classes.rangeIcon}\r\n onClick={nextWeek}\r\n />\r\n <div className={classes.datePickerWrapper}>\r\n <SingleDatePicker\r\n id=\"rangeStartDate\"\r\n name=\"range.startDate\"\r\n label=\"Start date\"\r\n isInput={true}\r\n numberOfMonths={2}\r\n daySize={39}\r\n isWidgetSearch={true}\r\n placeholder=\"Select date\"\r\n className={classes.datePickerButton}\r\n anchorDirection=\"right\"\r\n input={{\r\n value: selectedDate,\r\n onChange: handleDatePickerChanges\r\n }}\r\n meta={{\r\n touched: null,\r\n error: null,\r\n submitFailed: null\r\n }}\r\n isIcon={true}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default OverviewCalendarHeader;\r\n","import moment from 'moment';\r\n\r\nconst getRangeList = (startDate, endDate) => {\r\n let daysArray = [];\r\n let date = startDate;\r\n\r\n while (moment(date).isSameOrBefore(endDate, 'day')) {\r\n const day = moment(date).format('dddd');\r\n const number = moment(date).format('D');\r\n\r\n daysArray.push({\r\n day: day,\r\n number: number,\r\n date: date\r\n });\r\n date = moment(date).add(1, 'day');\r\n }\r\n\r\n return daysArray;\r\n};\r\n\r\nexport { getRangeList };\r\n","import { makeStyles } from '@material-ui/core/styles';\r\nimport zIndex from '@material-ui/core/styles/zIndex';\r\n\r\nconst useStyles = makeStyles(theme =>({\r\n wrapper: {\r\n height: '100%',\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]:{\r\n\r\n }\r\n },\r\n calendarWrapper: {\r\n height: 'calc(100% - 153px)',\r\n [theme.breakpoints.down('sm')]:{\r\n height: '100%',\r\n width: '100%',\r\n overflowX: 'scroll '\r\n }\r\n \r\n },\r\n columnWrapper: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: ' 100%'\r\n },\r\n column: {\r\n width: '100%',\r\n textAlign: 'center',\r\n \r\n },\r\n bookingRow: {\r\n display: 'flex'\r\n },\r\n bookingTitleWrapper: {\r\n display: 'flex',\r\n padding: '6px 0',\r\n backgroundColor: '#E2EBF6',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '1000px !important'\r\n }\r\n \r\n },\r\n bookingTitleBlock: {\r\n width: '300px',\r\n minWidth: '300px',\r\n display: 'flex',\r\n cursor: 'pointer',\r\n [theme.breakpoints.down('sm')]:{\r\n minWidth: '160px'\r\n }\r\n },\r\n bookingAccommodationTitleBgWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n position: 'relative',\r\n cursor: 'pointer',\r\n color: '#FFFFF',\r\n borderBottom: '1px solid #dbbfe4',\r\n '&:last-child': {\r\n borderBottom: '0'\r\n },\r\n '&::before': {\r\n width: '300px',\r\n content: '\"\"',\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '-1px',\r\n height: '1px',\r\n background: '#dbbfe4',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '1000px !important'\r\n },\r\n },\r\n '&:last-child::before': {\r\n content: '\"\"',\r\n display: 'none'\r\n }\r\n },\r\n bookingTitle: {\r\n maxWidth: '240px',\r\n padding: '0 30px',\r\n overflow: 'hidden',\r\n display: 'inline-block',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n \r\n flex: '1 0 0px',\r\n display: 'flex',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '150px',\r\n textOverflow: 'clip',\r\n }\r\n },\r\n bookingTime: {\r\n minWidth: '250px',\r\n padding: '6px 0 6px 50px',\r\n [theme.breakpoints.down('sm')]:{\r\n minWidth: '150px'\r\n }\r\n },\r\n bookingParticipantsRow: {\r\n borderBottom: '1px dashed #E2EBF6',\r\n position: 'relative',\r\n '&:last-child': {\r\n borderBottom: '0'\r\n },\r\n '&::before': {\r\n width: '300px',\r\n content: '\"\"',\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '-1px',\r\n height: '1px',\r\n background: 'white'\r\n },\r\n '&:last-child::before': {\r\n content: '\"\"',\r\n display: 'none'\r\n }\r\n },\r\n participantsColumn: {\r\n borderLeft: '1px solid #E2EBF6'\r\n },\r\n participants: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n height: '19px',\r\n color: '#FFF',\r\n backgroundColor: '#0E8BB4',\r\n margin: '6px 10px',\r\n padding: '0 10px',\r\n borderRadius: '3px',\r\n overflow: 'hidden',\r\n textAlign: 'left',\r\n display: 'flex',\r\n WebkitBoxAlign: 'center',\r\n alignItems: 'center',\r\n padding: '0.813rem 0 0.813rem 1rem',\r\n minHeight: '56px',\r\n height: 'calc(56px)',\r\n borderTop: '1px solid rgb(210, 210, 210)',\r\n transition: '0.5s',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '120px',\r\n textAlign: 'center',\r\n // padding: '0.813rem 0',\r\n }\r\n },\r\n participantsHover: {\r\n cursor: 'pointer'\r\n },\r\n noParticipants: {\r\n height: '17px',\r\n background:\r\n 'repeating-linear-gradient(-59.5deg, #fff, #fff 5px, #E2EBF6 5px, #E2EBF6 10px)',\r\n margin: '6px 10px',\r\n border: '1px solid #E2EBF6',\r\n borderRadius: '3px',\r\n overflow: 'hidden',\r\n position: 'relative',\r\n borderBottomRightRadius: 0,\r\n display: 'flex',\r\n WebkitBoxAlign: 'center',\r\n alignItems: 'center',\r\n padding: '0.813rem 0 0.813rem 1rem',\r\n minHeight: '56px',\r\n height: 'calc(56px)',\r\n border: '1px solid rgb(210, 210, 210)',\r\n transition: '0.5s',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '120px',\r\n textAlign: 'center',\r\n margin: '6px auto',\r\n \r\n }\r\n },\r\n participantsStart: {\r\n borderRight: 'none',\r\n margin: '6px -1px 6px 10px',\r\n borderTopRightRadius: 0,\r\n borderBottomRightRadius: 0,\r\n display: 'flex',\r\n WebkitBoxAlign: 'center',\r\n alignItems: 'center',\r\n padding: '0.813rem 0 0.813rem 1rem',\r\n width: '100%',\r\n minHeight: '56px',\r\n height: 'calc(56px)',\r\n border: '1px solid rgb(210, 210, 210)',\r\n transition: '0.5s',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '120px',\r\n textAlign: 'center',\r\n margin: '6px auto',\r\n // padding: '0.813rem 0',\r\n }\r\n },\r\n participantsHalfStart: {\r\n overflow: 'visible',\r\n borderTopRightRadius: 0,\r\n borderBottomRightRadius: 0,\r\n margin: '6px -50px 6px 50%',\r\n position: 'relative',\r\n display: 'flex',\r\n WebkitBoxAlign: 'center',\r\n alignItems: 'center',\r\n padding: '0.813rem 0 0.813rem 1rem',\r\n minHeight: '56px',\r\n height: 'calc(56px)',\r\n borderTop: '1px solid rgb(210, 210, 210)',\r\n transition: '0.5s',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '120px',\r\n textAlign: 'center',\r\n margin: '6px auto',\r\n // padding: '0.813rem 0',\r\n }\r\n },\r\n participantsHalfDate: {\r\n overflow: 'visible',\r\n borderTopRightRadius: 0,\r\n borderBottomRightRadius: 0,\r\n margin: '6px -50px 6px 50%',\r\n position: 'relative',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '120px',\r\n textAlign: 'center',\r\n margin: '6px auto',\r\n // padding: '0.813rem 0',\r\n }\r\n },\r\n participantsMid: {\r\n display: 'flex',\r\n WebkitBoxAlign: 'center',\r\n alignItems: 'center',\r\n padding: '0.813rem 0 0.813rem 1rem',\r\n width: '101%',\r\n minHeight: '56px',\r\n height: 'calc(56px)',\r\n transition: '0.5s',\r\n cursor: 'pointer',\r\n overflow: 'visible',\r\n borderRight: 'none',\r\n borderLeft: 'none',\r\n margin: '6px 0 6px 0',\r\n borderRadius: 0,\r\n position: 'relative',\r\n \r\n [theme.breakpoints.down('sm')]:{\r\n width: '120px',\r\n textAlign: 'center',\r\n // margin: '6px auto',\r\n }\r\n },\r\n participantsEnd: {\r\n borderLeft: 'none',\r\n margin: '6px 10px 6px -1px',\r\n borderRadius: '3px',\r\n borderTopLeftRadius: 0,\r\n borderBottomLeftRadius: 0,\r\n display: 'flex',\r\n WebkitBoxAlign: 'center',\r\n alignItems: 'center',\r\n padding: '0.813rem 0 0.813rem 1rem',\r\n width: '100%',\r\n minHeight: '56px',\r\n height: 'calc(56px)',\r\n border: '1px solid rgb(210, 210, 210)',\r\n transition: '0.5s',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '120px',\r\n textAlign: 'center',\r\n margin: '6px auto',\r\n padding: '0.813rem 0',\r\n borderRadius: '3px',\r\n }\r\n },\r\n participantsHalfEnd: {\r\n maxWidth:'150px',\r\n overflow: 'visible',\r\n borderRadius: 0,\r\n borderTopRightRadius: '3px',\r\n borderBottomRightRadius: '3px',\r\n border:'3px',\r\n margin: '6px 50% 6px -1px',\r\n position: 'relative',\r\n display: 'flex',\r\n WebkitBoxAlign: 'center',\r\n alignItems: 'center',\r\n padding: '0.813rem 0 0.813rem 1rem',\r\n minHeight: '56px',\r\n height: 'calc(56px)',\r\n borderTop: '1px solid rgb(210, 210, 210)',\r\n transition: '0.5s',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '120px',\r\n textAlign: 'center',\r\n margin: '6px auto',\r\n // padding: '0.813rem 0',\r\n borderRadius: '3px',\r\n \r\n }\r\n },\r\n activeProduct: {\r\n height: '30px',\r\n border: 1,\r\n background: 'white', \r\n margin: '6px 0px 6px 0',\r\n [theme.breakpoints.down('sm')]: {\r\n // width: '100%',\r\n margin: '6px auto',\r\n },\r\n },\r\n bookingsList: {\r\n height: '100%',\r\n overflow: 'auto',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n overflow: 'visible', \r\n }\r\n \r\n },\r\n header: {\r\n display: 'flex',\r\n boxShadow: '0px 1px 0px #E2EBF6',\r\n padding: '0 25px'\r\n },\r\n backAction: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n padding: '9px 25px 9px 0',\r\n boxShadow: '1px 0px 0px #E2EBF6'\r\n },\r\n backButtonTitle: {\r\n color: '#59758B'\r\n },\r\n backIcon: {\r\n fontSize: '18px',\r\n color: '#59758B'\r\n },\r\n headerTitle: {\r\n borderLeft: '1px solid #E2EBF6',\r\n borderRadius: 1,\r\n color: '#071B27',\r\n marginLeft: '5px',\r\n paddingLeft: '15px'\r\n },\r\n rangeWrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n paddingLeft: '30px'\r\n },\r\n button: {\r\n border: '1px solid #0E8BB4',\r\n borderRadius: '3px',\r\n padding: '5px 29px'\r\n },\r\n todayTitle: {\r\n color: '#0E8BB4',\r\n fontWeight: 'bold'\r\n },\r\n range: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginLeft: '30px'\r\n },\r\n rangeIcon: {\r\n fontSize: '10px',\r\n border: '1px solid #000',\r\n borderRadius: '100%',\r\n padding: '1px',\r\n cursor: 'pointer'\r\n },\r\n rangeDates: {\r\n margin: '0 15px'\r\n },\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important'\r\n },\r\n loaderWrapper: {\r\n position: 'fixed'\r\n },\r\n\r\n bookingImage: {\r\n marginRight: '0.5rem',\r\n width: '2.5rem',\r\n height: '2.5rem',\r\n borderRadius: '50%',\r\n overflow: 'hidden',\r\n flexShrink: 0,\r\n },\r\n\r\n bookingTitleText:{\r\n margin: 0,\r\n padding: 0,\r\n fontSize: '0.80rem',\r\n lineHeight: '1.125rem',\r\n color: 'rgb(28, 34, 47)',\r\n textOverflow: 'ellipsis',\r\n display: 'inline-block',\r\n maxWidth: '144px',\r\n width: '100%',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textAlign: 'left',\r\n fontWeight: '600'\r\n \r\n },\r\n bookingProductCode:{\r\n margin: 0,\r\n padding: 0,\r\n fontSize: '0.625rem',\r\n letterSpacing: '0.5px',\r\n lineHeight: '0.75rem',\r\n color: 'rgb(119, 119, 119)',\r\n textOverflow: 'ellipsis',\r\n display: 'inline-block',\r\n maxWidth: '144px',\r\n width: '100%',\r\n whiteSpace: 'nowrap',\r\n overflow: 'hidden',\r\n textAlign: 'left',\r\n },\r\n wrapperTitle:{\r\n display: 'flex',\r\n flexDirection:'column',\r\n textAlign: 'center',\r\n justifyContent: 'center'\r\n },\r\n\r\n activityparticipants:{\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n height: '19px',\r\n color: '#FFF',\r\n backgroundColor: '#335267',\r\n margin: '6px 10px',\r\n padding: '0 10px',\r\n borderRadius: '3px',\r\n overflow: 'hidden',\r\n textAlign: 'left',\r\n display: 'flex',\r\n WebkitBoxAlign: 'center',\r\n alignItems: 'center',\r\n padding: '0.813rem 0 0.813rem 1rem',\r\n minHeight: '56px',\r\n height: 'calc(56px)',\r\n borderTop: '1px solid rgb(210, 210, 210)',\r\n transition: '0.5s',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100px',\r\n textAlign: 'center',\r\n }\r\n },\r\n activitynoParticipants:{\r\n height: '17px',\r\n background:\r\n 'repeating-linear-gradient(-59.5deg, #fff, #fff 5px, #E2EBF6 5px, #E2EBF6 10px)',\r\n margin: '6px 10px',\r\n border: '1px solid #E2EBF6',\r\n borderRadius: '3px',\r\n overflow: 'hidden',\r\n position: 'relative',\r\n borderBottomRightRadius: 0,\r\n display: 'flex',\r\n WebkitBoxAlign: 'center',\r\n alignItems: 'center',\r\n padding: '0.813rem 0 0.813rem 1rem',\r\n minHeight: '56px',\r\n height: 'calc(56px)',\r\n border: '1px solid rgb(210, 210, 210)',\r\n transition: '0.5s',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100px',\r\n textAlign: 'center',\r\n }\r\n },\r\n guestName: {\r\n fontSize: '14px',\r\n color: 'white',\r\n fontWeight: '600',\r\n zIndex: '1',\r\n textOverflow: 'ellipsis', \r\n overflow: 'hidden', \r\n display: '-webkit-box', \r\n '-webkit-line-clamp': '2', \r\n '-webkit-box-orient': 'vertical' \r\n },\r\n}));\r\n\r\nexport default useStyles;\r\n\r\n\r\n","import React, { useState } from 'react';\r\nimport moment from 'moment';\r\nimport { useSnackbar } from 'notistack';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport classNames from 'classnames';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\n\r\nimport { Typography } from '@material-ui/core';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\nimport { ACTIVITIES_WITH_BOOKINGS } from 'graphql/queries/activities';\r\nimport { CANCEL_ACTIVITY_BOOKING } from 'graphql/mutations/booking';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport {\r\n AppHeader,\r\n CircularLoader,\r\n UpcomingActivitiesDialog\r\n} from 'components';\r\n\r\nimport CalendarGeneralRow from './components/calendar-general-row/CalendarGeneralRow';\r\nimport OverviewCalendarHeader from './components/overview-calendar-header/OverviewCalendarHeader';\r\n\r\nimport {\r\n getCalendarActivitiesBookings,\r\n guestsSumSeats\r\n} from 'utils/bookings/prepareBookingsData';\r\n\r\nimport { getRangeList } from 'utils/datesMethods';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst ACTIVITIES_TAB_INDEX = 1;\r\n\r\nconst isActivityAvailable = (availableDates, rangeItem, availableDays) => {\r\n const startDate = availableDates.startDate;\r\n const endDate = availableDates.endDate;\r\n const rangeDate = rangeItem.date;\r\n const rangeDay = moment(rangeItem.day, 'dddd').format('ddd');\r\n\r\n if (startDate && endDate) {\r\n return (\r\n moment(rangeDate).isBetween(startDate, endDate, 'day', '[]') &&\r\n availableDays[rangeDay]\r\n );\r\n }\r\n\r\n if (startDate) {\r\n return (\r\n moment(rangeDate).isSameOrAfter(startDate, 'day') &&\r\n availableDays[rangeDay]\r\n );\r\n }\r\n\r\n if (endDate) {\r\n return (\r\n moment(rangeDate).isSameOrBefore(endDate, 'day') &&\r\n availableDays[rangeDay]\r\n );\r\n }\r\n};\r\n\r\nconst BookingsList = ({ activitiesBookings, rangeList, refetch }) => {\r\n const classes = useStyles();\r\n\r\n if (!activitiesBookings || !activitiesBookings.length) return null;\r\n\r\n return (\r\n <div className={classes.bookingsList}>\r\n {activitiesBookings?.map(booking => (\r\n <div key={booking.id}>\r\n <div\r\n className={classNames(\r\n classes.bookingRow,\r\n classes.bookingTitleWrapper\r\n )}\r\n >\r\n <Tooltip title={`${booking.productCode} ⋅ ${booking.title}`} arrow>\r\n <Typography variant=\"body1\" className={classes.bookingTitle}>\r\n {booking.productCode} ⋅ {booking.title}\r\n </Typography>\r\n </Tooltip>\r\n </div>\r\n\r\n <TimesList\r\n booking={booking}\r\n activities={booking.activities}\r\n rangeList={rangeList}\r\n refetch={refetch}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n};\r\n\r\nconst BookingDay = ({ activity, isAvailable, booking, refetch }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const confirm = React.useContext(ConfirmContext);\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const [cancelActivityBookings] = useMutation(CANCEL_ACTIVITY_BOOKING);\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [dialogContent, setDialogContent] = React.useState({});\r\n\r\n const activityCancellationHandler = item => {\r\n const activityBookings = item.participants\r\n ?.map(booking => {\r\n return parseInt(booking.id);\r\n });\r\n confirm({\r\n title: `${t('Cancel all Activities')}?`,\r\n description: `Activity: ${item.title} • ${item.productCode}`,\r\n confirmationText: t('Cancel all Activities'),\r\n cancellationText: t('Back')\r\n }).then(() =>\r\n cancelActivityBookings({\r\n variables: { ids: activityBookings }\r\n }).then(() => {\r\n setOpen(false);\r\n enqueueSnackbar(t('Activity was successfully canceled!'), {\r\n variant: 'success'\r\n });\r\n refetch();\r\n })\r\n );\r\n };\r\n\r\n if (activity) {\r\n return (\r\n <>\r\n <Typography\r\n variant=\"body1\"\r\n onClick={() => {\r\n setDialogContent(activity);\r\n setOpen(true);\r\n }}\r\n className={classNames(\r\n classes.activityparticipants,\r\n classes.participantsHover\r\n )}\r\n >\r\n <span>\r\n {guestsSumSeats(activity.guests)}/{activity.maxParticipants}\r\n </span>\r\n {activity.isPrivate && <span>P</span>}\r\n </Typography>\r\n\r\n <UpcomingActivitiesDialog\r\n activity={dialogContent}\r\n onClose={isRefetch => {\r\n setOpen(false);\r\n if (typeof isRefetch === 'boolean' && isRefetch) refetch();\r\n }}\r\n open={open}\r\n onCancel={activityCancellationHandler}\r\n />\r\n </>\r\n );\r\n }\r\n\r\n if (isAvailable) {\r\n return (\r\n <Typography variant=\"body1\" className={classes.activityparticipants}>\r\n <span>0/{booking.maxParticipants}</span>\r\n {booking.isPrivate && <span>P</span>}\r\n </Typography>\r\n );\r\n }\r\n\r\n return (\r\n <Typography variant=\"body1\" className={classes.activitynoParticipants}>\r\n {' '}\r\n </Typography>\r\n );\r\n};\r\n\r\nconst DateNoTimeRow = ({\r\n rangeList,\r\n activities,\r\n schedule,\r\n days,\r\n booking,\r\n refetch\r\n}) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <div\r\n className={classNames(classes.bookingRow, classes.bookingParticipantsRow)}\r\n >\r\n <Typography variant=\"body1\" className={classes.bookingTime}>\r\n (Date no time)\r\n </Typography>\r\n {rangeList?.map((item, index) => {\r\n const rangeActivities =\r\n activities &&\r\n activities.filter(activity => {\r\n const startingDate = moment(activity.startingDate, 'YYYY-MM-DD');\r\n\r\n if (activity.endingDate) {\r\n const endingDate = moment(activity.endingDate, 'YYYY-MM-DD');\r\n if (item.date.isBetween(startingDate, endingDate, 'days', '[]')) {\r\n return activity;\r\n }\r\n return null;\r\n }\r\n\r\n const isSameDates = moment(startingDate).isSame(item.date, 'day');\r\n if (isSameDates) return activity;\r\n return null;\r\n });\r\n\r\n const activity =\r\n !!rangeActivities && rangeActivities.length\r\n ? { ...rangeActivities[0] }\r\n : null;\r\n\r\n if (activity) {\r\n activity.guests = [];\r\n activity.participants = [];\r\n rangeActivities.forEach(rangeActivity => {\r\n activity.guests.push(...rangeActivity.guests);\r\n activity.participants.push(rangeActivity);\r\n });\r\n }\r\n\r\n const isAvailable =\r\n !activity && isActivityAvailable(schedule.availability, item, days);\r\n\r\n return (\r\n <div\r\n key={index}\r\n className={classNames(classes.column, classes.participantsColumn)}\r\n >\r\n <BookingDay\r\n activity={activity}\r\n isAvailable={isAvailable}\r\n booking={booking}\r\n refetch={refetch}\r\n />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nconst TimesList = ({ booking, rangeList, refetch }) => {\r\n const classes = useStyles();\r\n const activities = booking?.activities;\r\n const schedule = booking.schedule;\r\n if (typeof schedule.daysArray === 'undefined') {\r\n schedule.daysArray = [];\r\n}\r\n \r\n\r\n if (typeof booking.activities === 'undefined')\r\n {\r\n booking.activities =[];\r\n } \r\n \r\n if (!!schedule.days) {\r\n return (\r\n <DateNoTimeRow\r\n rangeList={rangeList}\r\n activities={activities}\r\n schedule={schedule}\r\n days={schedule.days}\r\n booking={booking}\r\n refetch={refetch}\r\n />\r\n );\r\n }\r\n\r\n if (Array.isArray(schedule.daysArray)) { \r\n return (\r\n <>\r\n {schedule.daysArray?.map((day, index) => {\r\n const startTimeAndDuration = day.startTimeAndDuration || [];\r\n if (!startTimeAndDuration.length) {\r\n return (\r\n <div key={index}>\r\n <DateNoTimeRow\r\n rangeList={rangeList}\r\n activities={activities}\r\n schedule={schedule}\r\n days={day.days}\r\n booking={booking}\r\n refetch={refetch}\r\n />\r\n </div>\r\n );\r\n }\r\n return (\r\n <div key={index}>\r\n {startTimeAndDuration.map((time, index) => {\r\n const timeId = `${moment(time.startTime).format('HH:mm')}-${time.duration}-${time.timeType}`;\r\n return (\r\n <div\r\n key={index}\r\n className={classNames(\r\n classes.bookingRow,\r\n classes.bookingParticipantsRow\r\n )}\r\n >\r\n <Typography variant=\"body1\" className={classes.bookingTime}>\r\n {moment(time.startTime).format('HH:mm')} ⋅ {time.duration} {time.timeType}\r\n </Typography>\r\n {rangeList.map((item, index) => {\r\n const activity = activities?.find(activity => {\r\n if (!activity || !schedule.id ){\r\n return false\r\n }\r\n const startingDate = moment(activity.startingDate, 'YYYY-MM-DD');\r\n const isSameDate = moment(startingDate).isSame(item.date, 'day');\r\n return isSameDate && activity.schedule.id === timeId;\r\n });\r\n const isAvailable = !activity && isActivityAvailable(schedule.availability, item, day.days);\r\n return (\r\n <div\r\n key={index}\r\n className={classNames(\r\n classes.column,\r\n classes.participantsColumn\r\n )}\r\n >\r\n <BookingDay\r\n booking={booking}\r\n activity={activity}\r\n isAvailable={isAvailable}\r\n refetch={refetch}\r\n />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n })}\r\n </>\r\n );\r\n }\r\n\r\n return null; \r\n};\r\nconst ActivitiesOverviewCalendar = ({ businessOwner }) => {\r\n const classes = useStyles();\r\n\r\n const [rangeDates, setRangeDates] = React.useState({\r\n startDate: moment().startOf('isoWeek'),\r\n endDate: moment().endOf('isoWeek')\r\n });\r\n const [activitiesBookings, setActivitiesBookings] = React.useState(null);\r\n const [rangeList, setRangeList] = React.useState(\r\n getRangeList(rangeDates.startDate, rangeDates.endDate)\r\n );\r\n const [selectedDate, setSelectedDate] = useState(null);\r\n\r\n const { loading, data, refetch } = useQuery(ACTIVITIES_WITH_BOOKINGS, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n startPeriod: moment(rangeDates.startDate).format('YYYY-MM-DD'),\r\n endPeriod: moment(rangeDates.endDate).format('YYYY-MM-DD'),\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n if (!data) return;\r\n\r\n setRangeList(getRangeList(rangeDates.startDate, rangeDates.endDate));\r\n setActivitiesBookings(getCalendarActivitiesBookings(data.activities));\r\n }, [data]);\r\n\r\n const changeWeek = range => {\r\n setRangeDates(range);\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <AppHeader />\r\n\r\n <CircularLoader\r\n isLoading={loading}\r\n loaderClassName={classes.loaderClassName}\r\n className={classes.loaderWrapper}\r\n />\r\n\r\n <OverviewCalendarHeader\r\n startDate={rangeDates.startDate}\r\n endDate={rangeDates.endDate}\r\n changeWeekCallback={changeWeek}\r\n tabIndex={ACTIVITIES_TAB_INDEX}\r\n selectedDate={selectedDate}\r\n setSelectedDate={setSelectedDate}\r\n />\r\n\r\n <div className={classes.calendarWrapper}>\r\n <CalendarGeneralRow\r\n rangeList={rangeList}\r\n title=\"Activities\"\r\n selectedDate={selectedDate}\r\n />\r\n\r\n \r\n <BookingsList\r\n activitiesBookings={activitiesBookings}\r\n rangeList={rangeList}\r\n refetch={refetch}\r\n />\r\n \r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(ActivitiesOverviewCalendar);","import React, { useState,useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\nimport moment from 'moment';\r\nimport classNames from 'classnames';\r\nimport { useQuery } from '@apollo/react-hooks';\r\n\r\nimport { Typography } from '@material-ui/core';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\n\r\nimport { ACCOMMODATIONS_WITH_BOOKINGS} from 'graphql/queries/accommodations';\r\n\r\nimport { AppHeader, CircularLoader } from 'components';\r\n\r\nimport CalendarGeneralRow from './components/calendar-general-row/CalendarGeneralRow';\r\nimport OverviewCalendarHeader from './components/overview-calendar-header/OverviewCalendarHeader';\r\nimport BookingsDetailsDialog from 'components/booking-details-dialog/BookingDetailsDialog';\r\n\r\nimport { getRangeList } from 'utils/datesMethods';\r\nimport {\r\n getAccommodationBookingTotalInfo,\r\n getCalendarAccommodationsBookings,\r\n guestsSumSeats\r\n} from 'utils/bookings/prepareBookingsData';\r\n\r\nimport useStyles from './styles';\r\n\r\n\r\nconst ACCOMMODATION_TAB_INDEX = 0;\r\n\r\nconst isAccommodationUnActive = (booking, day) => {\r\n const bookingFromDate =\r\n booking.fromDate && moment(booking.fromDate, 'YYYY-MM-DD');\r\n const bookingEndDate = booking.toDate && moment(booking.toDate, 'YYYY-MM-DD');\r\n if (bookingFromDate && bookingEndDate) {\r\n return !moment(day.date).isBetween(\r\n bookingFromDate,\r\n bookingEndDate,\r\n 'day',\r\n '[]'\r\n );\r\n }\r\n if (bookingFromDate) {\r\n return !moment(day.date).isSameOrAfter(bookingFromDate, 'day');\r\n }\r\n if (bookingEndDate) {\r\n return !moment(day.date).isSameOrBefore(bookingEndDate, 'day');\r\n }\r\n return true;\r\n};\r\n\r\nconst BookingsList = ({ accommodationsBookings, rangeList, refetch }) => {\r\n const classes = useStyles();\r\n const history = useHistory(); \r\n \r\n if (!accommodationsBookings || !accommodationsBookings.length) return null;\r\n return (\r\n <div className={classes.bookingsList}>\r\n {accommodationsBookings.map((booking) => {\r\n return (\r\n <div\r\n key={booking.id}\r\n className={classNames(\r\n classes.bookingRow,\r\n classes.bookingAccommodationTitleBgWrapper\r\n )}\r\n >\r\n <div className={classes.bookingTitleBlock}>\r\n <Tooltip title={`${booking?.productCode} . ${booking?.title}`} arrow>\r\n <Typography\r\n variant=\"body1\"\r\n className={classes.bookingTitle}\r\n onClick={() => {\r\n history.push(`/accommodations/${booking.id}`);\r\n }}\r\n >\r\n \r\n <img\r\n src={booking?.photo }\r\n alt=\"Booking Icon\"\r\n className={classes.bookingImage}\r\n />\r\n \r\n \r\n <span variant=\"body1\" className={classes.wrapperTitle}>\r\n <span className={classes.bookingTitleText}>{booking?.title}</span>\r\n <span className={classes.bookingProductCode}>\r\n {booking?.productCode}\r\n </span>\r\n </span>\r\n </Typography>\r\n </Tooltip>\r\n\r\n </div>\r\n <BookingsDatesList\r\n booking={booking}\r\n rangeList={rangeList}\r\n refetch={refetch}\r\n />\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nconst DatesListWithoutBookings = ({ rangeList, booking }) => {\r\n const classes = useStyles();\r\n let isInit = true;\r\n let isProgress = false;\r\n\r\n return (\r\n <div className={classes.columnWrapper}>\r\n {rangeList.map((item, index) => {\r\n const isUnActive = isAccommodationUnActive(booking, item);\r\n const previousItem = rangeList[index - 1];\r\n const isUnActivePreviousItem = previousItem\r\n ? isAccommodationUnActive(booking, previousItem)\r\n : false;\r\n const nextItem = rangeList[index + 1];\r\n const isUnActiveNextItem = nextItem\r\n ? isAccommodationUnActive(booking, nextItem)\r\n : true;\r\n\r\n const isStart = isInit && isUnActive && isUnActiveNextItem;\r\n const isMid =\r\n isProgress &&\r\n !isStart &&\r\n isUnActiveNextItem &&\r\n index &&\r\n index < rangeList.length - 1;\r\n const isEnd =\r\n isProgress && !isStart && !isMid && isUnActivePreviousItem;\r\n\r\n if (isUnActive) {\r\n isInit = false;\r\n isProgress = true;\r\n }\r\n\r\n return (\r\n <div\r\n key={index}\r\n className={classNames(classes.column, classes.participantsColumn)}\r\n >\r\n <Typography\r\n variant=\"body1\"\r\n className={classNames(\r\n classes.noParticipants,\r\n { [classes.participantsStart]: isStart },\r\n {\r\n [classes.participantsMid]: isMid\r\n },\r\n { [classes.participantsEnd]: isEnd },\r\n { [classes.activeProduct]: !isUnActive }\r\n )}\r\n >\r\n {' '}\r\n </Typography>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nconst BookingsDatesList = ({ booking, rangeList, refetch }) => {\r\n const classes = useStyles();\r\n \r\n const accommodations = booking.accommodations;\r\n const [open, setOpen] = React.useState(false);\r\n const [dialogContent, setDialogContent] = React.useState({});\r\n const [participantColors, setParticipantColors] = React.useState({}); \r\n const onClose = () => {\r\n setOpen(false);\r\n refetch();\r\n };\r\n\r\n useEffect(() => {\r\n if (accommodations) {\r\n const newParticipantColors = {};\r\n accommodations.forEach(accommodation => {\r\n newParticipantColors[accommodation.id] = accommodation.color;\r\n });\r\n setParticipantColors(newParticipantColors);\r\n }\r\n }, [accommodations]);\r\n \r\n if (!accommodations) {\r\n return <DatesListWithoutBookings rangeList={rangeList} booking={booking} />;\r\n }\r\n\r\n return (\r\n <div className={classes.columnWrapper}>\r\n {rangeList.map((item, index) => {\r\n const lastIndex = rangeList.length - 1;\r\n\r\n const isUnActive = isAccommodationUnActive(booking, item);\r\n const previousItem = rangeList[index - 1];\r\n const isUnActivePreviousItem = previousItem\r\n ? isAccommodationUnActive(booking, previousItem)\r\n : false;\r\n const nextItem = rangeList[index + 1];\r\n const isUnActiveNextItem = nextItem\r\n ? isAccommodationUnActive(booking, nextItem)\r\n : true;\r\n\r\n const isStartDate = accommodations.find(accommodation => {\r\n return moment(accommodation.fromDate, 'YYYY-MM-DD').isSame(\r\n item.date,\r\n 'day'\r\n );\r\n });\r\n const isEndDate = accommodations.find(accommodation => {\r\n return moment(accommodation.toDate, 'YYYY-MM-DD').isSame(\r\n item.date,\r\n 'day'\r\n );\r\n });\r\n const isMidDate =\r\n !isStartDate &&\r\n !isEndDate &&\r\n accommodations.find(accommodation => {\r\n const fromDate = moment(accommodation.fromDate, 'YYYY-MM-DD');\r\n const toDate = moment(accommodation.toDate, 'YYYY-MM-DD');\r\n return moment(item.date).isBetween(fromDate, toDate, 'day', '[]');\r\n });\r\n const isHalfDate = isStartDate && isEndDate;\r\n const accommodation = isStartDate || isMidDate || isEndDate;\r\n\r\n const isNextDayStart =\r\n !accommodation &&\r\n rangeList[index + 1] &&\r\n accommodations.find(accommodation => {\r\n return moment(accommodation.fromDate, 'YYYY-MM-DD').isSame(\r\n rangeList[index + 1].date,\r\n 'day'\r\n );\r\n });\r\n\r\n const isPreviousDayEnd =\r\n !accommodation &&\r\n rangeList[index - 1] &&\r\n accommodations.find(accommodation => {\r\n return moment(accommodation.toDate, 'YYYY-MM-DD').isSame(\r\n rangeList[index - 1].date,\r\n 'day'\r\n );\r\n });\r\n\r\n const openDialog = accommodation => {\r\n setOpen(true);\r\n setDialogContent({\r\n ...accommodation,\r\n id: accommodation.id\r\n });\r\n }; \r\n\r\n const getTextColor = (bgColor) => {\r\n if (!bgColor) return \"#FFF\"; \r\n\r\n const r = parseInt(bgColor.substring(1, 3), 16);\r\n const g = parseInt(bgColor.substring(3, 5), 16);\r\n const b = parseInt(bgColor.substring(5, 7), 16);\r\n\r\n\r\n const brightness = (r * 299 + g * 587 + b * 114) / 1000;\r\n\r\n return brightness > 125 ? \"#000\" : \"#FFF\"; \r\n };\r\n\r\n const participantColor = accommodation ? participantColors[accommodation.id] : null;\r\n const textColor = getTextColor(participantColor);\r\n\r\n \r\n return (\r\n <div\r\n key={index}\r\n className={classNames(classes.column, classes.participantsColumn)}\r\n >\r\n {isStartDate || isMidDate || isEndDate ? (\r\n <Typography\r\n variant=\"body1\"\r\n onClick={() => openDialog(accommodation)}\r\n className={classNames(\r\n classes.participants,\r\n classes.participantsHover,\r\n {\r\n [classes.participantsHalfStart]: isStartDate && !isHalfDate\r\n },\r\n { [classes.participantsHalfDate]: isHalfDate },\r\n { [classes.participantsMid]: isMidDate },\r\n { [classes.participantsHalfEnd]: isEndDate && !isHalfDate }\r\n )}\r\n style={{ backgroundColor: participantColor }} \r\n >\r\n {(isStartDate || !index) && (\r\n <span\r\n className={classNames(\r\n classes.guestName\r\n )}\r\n style={{ color: textColor }} \r\n >\r\n {`${guestsSumSeats(accommodation.guests)}/${\r\n accommodation.guestsNumber\r\n }`} \r\n <br/>\r\n { accommodation.guestFirstName + ' ' + accommodation.guestLastName}\r\n </span>\r\n \r\n )}\r\n </Typography>\r\n ) : (\r\n <Typography\r\n variant=\"body1\"\r\n className={classNames(\r\n classes.noParticipants,\r\n {\r\n [classes.participantsStart]:\r\n (!isUnActivePreviousItem &&\r\n isUnActiveNextItem &&\r\n index !== lastIndex &&\r\n !isNextDayStart) ||\r\n (isUnActiveNextItem &&\r\n (!isNextDayStart || !isPreviousDayEnd) &&\r\n ((isPreviousDayEnd && index !== lastIndex) ||\r\n (!isNextDayStart && !index)))\r\n },\r\n {\r\n [classes.participantsMid]:\r\n isUnActivePreviousItem &&\r\n isUnActiveNextItem &&\r\n !isPreviousDayEnd &&\r\n !isNextDayStart &&\r\n index &&\r\n index !== lastIndex\r\n },\r\n {\r\n [classes.participantsEnd]:\r\n (!isUnActiveNextItem &&\r\n isUnActivePreviousItem &&\r\n !isPreviousDayEnd) ||\r\n (isUnActivePreviousItem &&\r\n (!isNextDayStart || !isPreviousDayEnd) &&\r\n ((isNextDayStart && index) ||\r\n (!isPreviousDayEnd && index === lastIndex)))\r\n },\r\n { [classes.activeProduct]: !isUnActive }\r\n )}\r\n >\r\n {' '}\r\n </Typography>\r\n )}\r\n </div>\r\n );\r\n })}\r\n <BookingsDetailsDialog\r\n isEditCancelBtns={true}\r\n onClose={onClose}\r\n open={open}\r\n booking={dialogContent}\r\n bookingTotal={getAccommodationBookingTotalInfo(dialogContent)}\r\n refetchParams={{ query: ACCOMMODATIONS_WITH_BOOKINGS }}\r\n cancelBooking={() => {\r\n refetch();\r\n setOpen(false);\r\n }}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nconst AccommodationsOverviewCalendar = ({ businessOwner }) => {\r\n const classes = useStyles();\r\n\r\n const [rangeDates, setRangeDates] = React.useState({\r\n startDate: moment().startOf('isoWeek'),\r\n endDate: moment().endOf('isoWeek')\r\n });\r\n const [accommodationsBookings, setAccommodationsBookings] = React.useState(\r\n null\r\n );\r\n const [rangeList, setRangeList] = React.useState(\r\n getRangeList(rangeDates.startDate, rangeDates.endDate)\r\n );\r\n const [selectedDate, setSelectedDate] = useState(null);\r\n\r\n const { loading, data, refetch } = useQuery(ACCOMMODATIONS_WITH_BOOKINGS, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n startPeriod: moment(rangeDates.startDate).format('YYYY-MM-DD'),\r\n endPeriod: moment(rangeDates.endDate).format('YYYY-MM-DD'),\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n if (!data) return;\r\n\r\n setRangeList(getRangeList(rangeDates.startDate, rangeDates.endDate));\r\n setAccommodationsBookings(\r\n getCalendarAccommodationsBookings(data.accommodations)\r\n );\r\n }, [data]);\r\n\r\n const changeWeek = range => {\r\n setRangeDates(range);\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <AppHeader />\r\n\r\n <CircularLoader\r\n isLoading={loading}\r\n loaderClassName={classes.loaderClassName}\r\n className={classes.loaderWrapper}\r\n />\r\n\r\n <OverviewCalendarHeader\r\n startDate={rangeDates.startDate}\r\n endDate={rangeDates.endDate}\r\n changeWeekCallback={changeWeek}\r\n tabIndex={ACCOMMODATION_TAB_INDEX}\r\n selectedDate={selectedDate}\r\n setSelectedDate={setSelectedDate}\r\n />\r\n\r\n <div className={classes.calendarWrapper}>\r\n <CalendarGeneralRow\r\n rangeList={rangeList}\r\n title=\"Accommodations\"\r\n selectedDate={selectedDate}\r\n />\r\n\r\n <BookingsList\r\n accommodationsBookings={accommodationsBookings}\r\n rangeList={rangeList}\r\n refetch={refetch}\r\n accommodation={data?.accommodations?.[0]} \r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(AccommodationsOverviewCalendar);\r\n\r\n\r\n","import gql from 'graphql-tag';\r\n\r\nexport const OVERVIEW = gql`\r\n query accommodationsActivitiesOverview($businessOwnerId: Int) {\r\n accommodationsBookingsOverview(businessOwnerId: $businessOwnerId) {\r\n currentBookingsNumber\r\n newBookingsNumber\r\n arrivalGuestsNumber\r\n departureGuestsNumber\r\n canceledBookingsNumber\r\n bookingsWhichStartToday\r\n bookingsWhichEndToday\r\n }\r\n activitiesBookingsOverview(businessOwnerId: $businessOwnerId) {\r\n currentBookingsNumber\r\n newBookingsNumber\r\n arrivalGuestsNumber\r\n canceledBookingsNumber\r\n bookingsWhichStartToday\r\n }\r\n }\r\n`;\r\n\r\nexport const UPCOMING_ACCOMMODATIONS = gql`\r\n query accommodationsBookings(\r\n $orderBy: String\r\n $businessOwnerId: Int\r\n $closestEventsPeriod: String\r\n ) {\r\n accommodationsBookings(\r\n isClosestEvents: true\r\n orderBy: $orderBy\r\n businessOwnerId: $businessOwnerId\r\n closestEventsPeriod: $closestEventsPeriod\r\n ) {\r\n id\r\n toDate\r\n fromDate\r\n referenceNumber\r\n creationTime\r\n isRelated\r\n guestFirstName\r\n guestLastName\r\n bookingNotes\r\n deactivationBooking\r\n platform\r\n closestEvent {\r\n id\r\n date\r\n event\r\n }\r\n guests {\r\n totalPrice\r\n guestsNumber\r\n participant {\r\n participant\r\n }\r\n }\r\n bookedAddOns {\r\n addOn {\r\n title\r\n }\r\n addOnCount\r\n totalPrice\r\n }\r\n accommodation {\r\n id\r\n title\r\n checkInTime\r\n checkOutTime\r\n }\r\n payments {\r\n id\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n relatedActivitiesBookings {\r\n id\r\n activity {\r\n title\r\n }\r\n guests {\r\n totalPrice\r\n guestsNumber\r\n participant {\r\n participant\r\n }\r\n }\r\n payments {\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n bookedAddOns {\r\n addOn {\r\n title\r\n }\r\n addOnCount\r\n totalPrice\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const UPCOMING_ACTIVITIES = gql`\r\n query activities($businessOwnerId: Int, $closestEventsPeriod: String) {\r\n activities(\r\n isClosestEvents: true\r\n businessOwnerId: $businessOwnerId\r\n closestEventsPeriod: $closestEventsPeriod\r\n ) {\r\n id\r\n title\r\n productCode\r\n isOpen\r\n isPrivate\r\n minParticipants\r\n maxParticipants\r\n closestEvent {\r\n duration\r\n startDate\r\n startTime\r\n timeType\r\n }\r\n activityBookings {\r\n id\r\n platform\r\n guestFirstName\r\n guestLastName\r\n deactivationBooking\r\n guests {\r\n guestsNumber\r\n totalPrice\r\n participant {\r\n participant\r\n }\r\n }\r\n payments {\r\n currency {\r\n currency\r\n }\r\n totalPrice\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme =>({\r\n container: {\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n overflow: 'hidden',\r\n border: '1px solid #E2EBF6',\r\n borderRadius: '3px'\r\n },\r\n tableCell: {\r\n fontSize: '13px',\r\n border: 'none',\r\n color: '#000000',\r\n padding: 0\r\n },\r\n table: {\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]:{\r\n overflowX: 'auto',\r\n behavior: 'smooth' ,\r\n display: 'block',\r\n width: '100%',\r\n }\r\n },\r\n iconButton: {\r\n padding: '0px 0px 0px 14px',\r\n '&:hover': {\r\n backgroundColor: 'transparent'\r\n }\r\n },\r\n heading: {\r\n color: '#071B27',\r\n fontWeight: 'bold',\r\n fontSize: '10px',\r\n fontFamily: 'Fira Sans',\r\n textTransform: 'uppercase'\r\n },\r\n nameCell: {\r\n width: '255px',\r\n fontWeight: 'bold',\r\n paddingLeft: '20px',\r\n paddingRight: '20px'\r\n },\r\n referenceCell: {\r\n width: '150px',\r\n paddingLeft: '20px'\r\n },\r\n guestsCell: {\r\n width: '255px',\r\n fontWeight: 'bold',\r\n paddingLeft: '20px',\r\n paddingRight: '20px'\r\n },\r\n addOnsCell: {\r\n width: '255px',\r\n fontWeight: 'bold',\r\n paddingLeft: '20px',\r\n paddingRight: '20px'\r\n },\r\n notesCell: {\r\n width: '255px',\r\n fontWeight: 'bold',\r\n paddingLeft: '20px',\r\n paddingRight: '20px'\r\n },\r\n unitCell: {\r\n alignItems: 'center',\r\n width: '355px',\r\n paddingLeft: '20px',\r\n wordWrap: 'break-word',\r\n paddingRight: '20px'\r\n },\r\n closeIcon: {\r\n fontSize: '21px'\r\n },\r\n checkInCheckOutCell: {\r\n width: '190px',\r\n paddingLeft: '20px',\r\n paddingRight: '20px'\r\n },\r\n tableRow: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#E2F5F8'\r\n }\r\n },\r\n list: {\r\n padding: '10px',\r\n margin: '0',\r\n fontSize: '10px',\r\n color: '#FFFFFF'\r\n },\r\n disabledArea: {\r\n position: 'relative',\r\n '&::after': {\r\n content: \"''\",\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n height: '100%',\r\n width: '100%',\r\n background: 'black',\r\n opacity: 0.2\r\n }\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useSnackbar } from 'notistack';\r\nimport classNames from 'classnames';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\n\r\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\r\n\r\nimport {\r\n Typography,\r\n IconButton,\r\n TableRow,\r\n TableHead,\r\n TableContainer,\r\n TableCell,\r\n TableBody,\r\n Table,\r\n TableSortLabel\r\n} from '@material-ui/core';\r\n\r\nimport { EditIcon } from 'components/icons';\r\nimport { UPCOMING_ACCOMMODATIONS } from 'graphql/queries/overview';\r\nimport { CANCEL_ACCOMMODATION_BOOKING } from 'graphql/mutations/booking';\r\nimport { UpcomingAccommodationDialog } from 'components';\r\nimport {\r\n BookedAddOns,\r\n guestsSumSeats,\r\n isParticipantInfo,\r\n getAccommodationBookingTotalInfo,\r\n guestsDetailsInformation\r\n} from 'utils/bookings/prepareBookingsData';\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\nimport ListPopover from 'components/list-popover/ListPopover';\r\n\r\nimport useStyles from './styles';\r\nimport { InfoOutlined } from '@material-ui/icons';\r\n\r\nconst headingsConfig = classes => {\r\n return [\r\n {\r\n label: 'Reference • Date',\r\n align: 'left',\r\n cellClassName: classes.referenceCell\r\n },\r\n {\r\n label: 'Booking name',\r\n cellClassName: classes.nameCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Accommodation name',\r\n cellClassName: classes.unitCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'NO. of guests',\r\n sortBy: 'guests',\r\n cellClassName: classes.guestsCell\r\n },\r\n {\r\n label: 'Check-in • Check-out',\r\n align: 'left',\r\n sortBy: 'check_in_check_out',\r\n cellClassName: classes.checkInCheckOutCell\r\n },\r\n {\r\n label: 'Platform',\r\n sortBy: 'platform',\r\n cellClassName: classes.platformCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Add-ons',\r\n cellClassName: classes.addOnsCell,\r\n sortBy: '',\r\n align: 'left'\r\n },\r\n {\r\n label: 'Notes',\r\n cellClassName: classes.notesCell,\r\n sortBy: '',\r\n align: 'left'\r\n },\r\n { label: 'Actions', align: 'right' }\r\n ];\r\n};\r\n\r\nfunction UpcomingAccommodations({ ownerId, upcomingPeriod }) {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const [t] = useTranslation();\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [order, setOrder] = React.useState('asc');\r\n const [orderBy, setOrderBy] = React.useState('check_in_check_out');\r\n\r\n const [dialogContent, setDialogContent] = React.useState({});\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const { data, refetch } = useQuery(UPCOMING_ACCOMMODATIONS, {\r\n variables: {\r\n businessOwnerId: ownerId,\r\n orderBy: order === 'asc' ? orderBy : `-${orderBy}`,\r\n closestEventsPeriod: upcomingPeriod\r\n },\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true\r\n });\r\n\r\n const confirm = React.useContext(ConfirmContext);\r\n const [cancelAccommodationBooking] = useMutation(\r\n CANCEL_ACCOMMODATION_BOOKING\r\n );\r\n\r\n const onClose = () => {\r\n setOpen(false);\r\n };\r\n const openInfoDialog = booking => {\r\n setOpen(true);\r\n setDialogContent(booking);\r\n };\r\n\r\n const handleRequestSort = (event, property) => {\r\n const isAsc = orderBy === property && order === 'asc';\r\n setOrder(isAsc ? 'desc' : 'asc');\r\n setOrderBy(property);\r\n };\r\n\r\n const createSortHandler = property => event => {\r\n handleRequestSort(event, property);\r\n };\r\n const accommodationCancellationHandler = item => {\r\n confirm({\r\n title: `${t('Cancel Booking')}?`,\r\n warningText: `${\r\n item.relatedActivitiesBookings.length && !item.isRelated\r\n ? t('Please note that related booking also will be deleted')\r\n : ''\r\n }`,\r\n description: `${item.fromDate} — ${item.toDate} • ${item.guestFirstName} ${item.guestLastName} • ${item.accommodation.title}`,\r\n confirmationText: t('Cancel Booking'),\r\n cancellationText: t('Back')\r\n }).then(() =>\r\n cancelAccommodationBooking({ variables: { id: item.id } }).then(() => {\r\n enqueueSnackbar(t('Accommodation booking was successfully canceled!'), {\r\n variant: 'success'\r\n });\r\n refetch();\r\n })\r\n );\r\n };\r\n return (\r\n <TableContainer component=\"div\" classes={{ root: classes.container }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead>\r\n <TableRow>\r\n {headingsConfig(classes).map(heading => (\r\n <TableCell\r\n key={heading.label}\r\n align={heading.align}\r\n style={{ padding: '20px' }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.heading,\r\n heading.cellClassName\r\n )}\r\n >\r\n <TableSortLabel\r\n active={orderBy === heading.sortBy && orderBy !== ''}\r\n direction={orderBy === heading.sortBy ? order : 'asc'}\r\n onClick={createSortHandler(heading.sortBy)}\r\n className={classes.heading}\r\n disabled={!heading.sortBy}\r\n hideSortIcon={!heading.sortBy}\r\n >\r\n {t(heading.label)}\r\n </TableSortLabel>\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {data &&\r\n data.accommodationsBookings &&\r\n data.accommodationsBookings.map((booking, index) => {\r\n return (\r\n <TableRow\r\n key={index}\r\n classes={{ root: classes.tableRow }}\r\n onClick={e => {\r\n if (booking.deactivationBooking) return;\r\n\r\n e.stopPropagation();\r\n openInfoDialog(booking);\r\n }}\r\n className={classNames({\r\n [classes.disabledArea]: booking.deactivationBooking\r\n })}\r\n >\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.referenceCell\r\n )}\r\n align=\"left\"\r\n >\r\n <Typography>{booking.referenceNumber}</Typography>\r\n <Typography>{booking.creationTime}</Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.nameCell)}\r\n align=\"left\"\r\n >\r\n <Typography>\r\n {booking.deactivationBooking\r\n ? 'Deactivation Booking'\r\n : `${booking.guestFirstName} ${booking.guestLastName}`}\r\n </Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.unitCell)}\r\n align=\"left\"\r\n >\r\n <Typography>{booking.accommodation.title}</Typography>\r\n </TableCell>\r\n <TableCell\r\n className={classNames(\r\n classes.tableCell,\r\n classes.guestsCell\r\n )}\r\n align=\"left\"\r\n >\r\n <div className={classes.guestsContent}>\r\n {booking.guests.length === 0 && `—`}\r\n {booking.guests.length !== 0 &&\r\n booking.guests.length <= 2 && (\r\n <Typography className={classes.cellText}>\r\n {guestsSumSeats(booking.guests)}\r\n {isParticipantInfo(booking.guests) &&\r\n ` (${guestsDetailsInformation(\r\n booking.guests,\r\n t\r\n )})`}\r\n </Typography>\r\n )}\r\n {booking.guests.length !== 0 &&\r\n booking.guests.length > 2 && (\r\n <Typography className={classes.cellText}>\r\n {guestsSumSeats(booking.guests)} (\r\n {guestsDetailsInformation(\r\n booking.guests.slice(0, 2),\r\n t\r\n )}\r\n ...\r\n </Typography>\r\n )}\r\n\r\n {booking.guests.length !== 0 &&\r\n booking.guests &&\r\n booking.guests.length > 2 && (\r\n <ListPopover\r\n list={\r\n <ul className={classes.list}>\r\n {booking.guests.slice(2).map((guest, index) => {\r\n return (\r\n <li key={index}>\r\n {guest.guestsNumber} x{' '}\r\n {guest.participant[0].participant}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n }\r\n >\r\n <NumberIcon number={booking.guests.length - 2} />\r\n </ListPopover>\r\n )}\r\n </div>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.checkInCheckOutCell\r\n )}\r\n align=\"left\"\r\n >\r\n <Typography>\r\n {booking.closestEvent.date}\r\n {', '}\r\n {booking.closestEvent.event === 'Check-in'\r\n ? moment(\r\n booking.accommodation.checkInTime,\r\n 'HH:mm:ssZZ'\r\n ).format('HH:mm')\r\n : moment(\r\n booking.accommodation.checkOutTime,\r\n 'HH:mm:ssZZ'\r\n ).format('HH:mm')}\r\n {' • '}\r\n {t(booking.closestEvent.event)}\r\n </Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.platformCell\r\n )}\r\n align=\"left\"\r\n >\r\n {t(booking.platform)}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.addOnsCell\r\n )}\r\n align=\"left\"\r\n >\r\n {booking.bookedAddOns.length <= 2 && (\r\n <Typography className={classes.addOnTitle}>\r\n {BookedAddOns(booking.bookedAddOns)}\r\n </Typography>\r\n )}\r\n {booking.bookedAddOns.length > 2 && (\r\n <Typography className={classes.addOnTitle}>\r\n {BookedAddOns(booking.bookedAddOns.slice(0, 2))} ...\r\n </Typography>\r\n )}\r\n\r\n {booking.bookedAddOns.length > 2 && (\r\n <ListPopover\r\n list={\r\n <ul className={classes.list}>\r\n {booking.bookedAddOns.slice(2).map((o, index) => {\r\n return (\r\n <li key={index}>\r\n {o.addOnCount} x {o.addOn[0].title}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n }\r\n >\r\n <NumberIcon number={booking.bookedAddOns.length - 2} />\r\n </ListPopover>\r\n )}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5 }}\r\n className={classNames(classes.tableCell, classes.notesCell)}\r\n align=\"left\"\r\n >\r\n <ListPopover\r\n maxWidth={300}\r\n list={\r\n <div className={classes.list} style={{ minWidth: 120 }}>\r\n {booking.bookingNotes ||\r\n booking.activityNotes ||\r\n 'There are no notes yet.'}\r\n </div>\r\n }\r\n >\r\n <InfoOutlined />\r\n </ListPopover>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classes.tableCell}\r\n align=\"right\"\r\n >\r\n <div\r\n style={{ display: 'inline-flex', paddingRight: '15px' }}\r\n >\r\n <IconButton\r\n className={classes.iconButton}\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n aria-label=\"edit\"\r\n onClick={e => {\r\n e.stopPropagation();\r\n history.push(\r\n `/accommodations-bookings/${booking.id}/edit`\r\n );\r\n }}\r\n >\r\n <EditIcon />\r\n </IconButton>\r\n <IconButton\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n className={classes.iconButton}\r\n aria-label=\"delete\"\r\n onClick={e => {\r\n e.stopPropagation();\r\n accommodationCancellationHandler(booking);\r\n }}\r\n >\r\n <HighlightOffIcon className={classes.closeIcon} />\r\n </IconButton>\r\n </div>\r\n </TableCell>\r\n </TableRow>\r\n );\r\n })}\r\n <UpcomingAccommodationDialog\r\n onClose={onClose}\r\n booking={dialogContent}\r\n total={getAccommodationBookingTotalInfo(dialogContent)}\r\n onCancel={accommodationCancellationHandler}\r\n open={open}\r\n />\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n );\r\n}\r\n\r\nexport default UpcomingAccommodations;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\nimport theme from 'theme';\r\n\r\nconst useStyles = makeStyles(theme=>({\r\n container: {\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n overflow: 'hidden',\r\n border: '1px solid #E2EBF6',\r\n borderRadius: '3px',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n\r\n },\r\n },\r\n tableCell: {\r\n fontSize: '13px',\r\n border: 'none',\r\n color: '#000000',\r\n padding: 0\r\n },\r\n table: {\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]:{\r\n overflowX: 'auto',\r\n behavior: 'smooth' ,\r\n display: 'block',\r\n width: '100%',\r\n }\r\n },\r\n iconButton: {\r\n padding: '5px 0px 5px 14px',\r\n '&:hover': {\r\n backgroundColor: 'transparent'\r\n }\r\n },\r\n heading: {\r\n color: '#071B27',\r\n fontWeight: 'bold',\r\n fontSize: '10px',\r\n fontFamily: 'Fira Sans',\r\n textTransform: 'uppercase'\r\n },\r\n productCodeCell: {\r\n width: '80px',\r\n paddingLeft: '20px'\r\n },\r\n unitCell: {\r\n alignItems: 'center',\r\n width: '320px',\r\n paddingLeft: '20px',\r\n wordWrap: 'break-word',\r\n paddingRight: '20px'\r\n },\r\n\r\n closeIcon: {\r\n fontSize: '21px'\r\n },\r\n activityTypeCell: {\r\n width: '110px',\r\n paddingLeft: '20px'\r\n },\r\n startTimeCell: {\r\n width: '170px',\r\n paddingLeft: '20px'\r\n },\r\n durationCell: {\r\n width: '150px',\r\n paddingLeft: '20px'\r\n },\r\n participantsCell: {\r\n width: '170px',\r\n paddingLeft: '20px'\r\n },\r\n tableRow: {\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#E2F5F8'\r\n }\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\nimport classNames from 'classnames';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useSnackbar } from 'notistack';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\n\r\nimport HighlightOffIcon from '@material-ui/icons/HighlightOff';\r\nimport {\r\n Typography,\r\n IconButton,\r\n TableRow,\r\n TableHead,\r\n TableContainer,\r\n TableCell,\r\n TableBody,\r\n Table\r\n} from '@material-ui/core';\r\n\r\nimport { UPCOMING_ACTIVITIES } from 'graphql/queries/overview';\r\nimport { CANCEL_ACTIVITY_BOOKING } from 'graphql/mutations/booking';\r\n\r\nimport { guestsSumSeats } from 'utils/bookings/prepareBookingsData';\r\n\r\nimport { EditIcon } from 'components/icons';\r\nimport { UpcomingActivitiesDialog } from 'components';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst headingsConfig = classes => {\r\n return [\r\n {\r\n label: 'Product code',\r\n align: 'left',\r\n cellClassName: classes.productCodeCell\r\n },\r\n {\r\n label: 'Activity name',\r\n cellClassName: classes.unitCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Activity type',\r\n cellClassName: classes.activityTypeCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Booked/Maximum available seats',\r\n align: 'left',\r\n cellClassName: classes.participantsCell\r\n },\r\n {\r\n label: 'Start time',\r\n align: 'left',\r\n cellClassName: classes.startTimeCell\r\n },\r\n {\r\n label: 'Duration',\r\n align: 'left',\r\n cellClassName: classes.durationCell\r\n },\r\n { label: 'Actions', align: 'right' }\r\n ];\r\n};\r\n\r\nfunction UpcomingActivities({ ownerId, upcomingPeriod }) {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const [t] = useTranslation();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const confirm = React.useContext(ConfirmContext);\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [dialogContent, setDialogContent] = React.useState({});\r\n const [cancelActivityBookings] = useMutation(CANCEL_ACTIVITY_BOOKING);\r\n const { data, refetch } = useQuery(UPCOMING_ACTIVITIES, {\r\n variables: {\r\n businessOwnerId: ownerId,\r\n closestEventsPeriod: upcomingPeriod\r\n },\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true\r\n });\r\n\r\n const onClose = isRefetch => {\r\n setOpen(false);\r\n if (typeof isRefetch === 'boolean' && isRefetch) refetch();\r\n };\r\n const openInfoDialog = booking => {\r\n setOpen(true);\r\n setDialogContent(booking);\r\n };\r\n\r\n const getActivityBookingsGuestsNumber = activity => {\r\n let guests = 0;\r\n\r\n activity.activityBookings.map(booking => {\r\n guests += guestsSumSeats(booking.guests);\r\n });\r\n\r\n return guests;\r\n };\r\n\r\n const activityCancellationHandler = item => {\r\n const activityBookings = item.activityBookings.map(booking => {\r\n return parseInt(booking.id);\r\n });\r\n confirm({\r\n title: `${t('Cancel all Activities')}?`,\r\n description: `Activity: ${item.title} • ${item.productCode}`,\r\n confirmationText: t('Cancel all Activities'),\r\n cancellationText: t('Back')\r\n }).then(() =>\r\n cancelActivityBookings({\r\n variables: { ids: activityBookings }\r\n }).then(() => {\r\n enqueueSnackbar(t('Activity was successfully canceled!'), {\r\n variant: 'success'\r\n });\r\n onClose();\r\n refetch();\r\n })\r\n );\r\n };\r\n return (\r\n <TableContainer component=\"div\" classes={{ root: classes.container }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead>\r\n <TableRow>\r\n {headingsConfig(classes).map(heading => (\r\n <TableCell\r\n key={heading.label}\r\n align={heading.align}\r\n style={{ padding: '20px' }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.heading,\r\n heading.cellClassName\r\n )}\r\n >\r\n {t(heading.label)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {data &&\r\n data.activities &&\r\n data.activities.map((activity, index) => {\r\n return (\r\n <TableRow\r\n key={index}\r\n classes={{ root: classes.tableRow }}\r\n onClick={e => {\r\n e.stopPropagation();\r\n openInfoDialog(activity);\r\n }}\r\n >\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.productCodeCell\r\n )}\r\n align=\"left\"\r\n >\r\n <Typography>{activity.productCode}</Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.unitCell)}\r\n align=\"left\"\r\n >\r\n <Typography>\r\n {activity.deactivationBooking\r\n ? 'Deactivation Booking'\r\n : activity.title}\r\n </Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.activityTypeCell\r\n )}\r\n align=\"left\"\r\n >\r\n <Typography>\r\n {activity.isOpen ? t('Open') : t('Private')}\r\n </Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.participantsCell\r\n )}\r\n align=\"left\"\r\n >\r\n <Typography>\r\n {getActivityBookingsGuestsNumber(activity)}/\r\n {activity.maxParticipants}\r\n </Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.startTimeCell\r\n )}\r\n align=\"left\"\r\n >\r\n <Typography>\r\n {activity.closestEvent.startDate\r\n ? `${activity.closestEvent.startDate}`\r\n : '—'}\r\n {activity.closestEvent.startTime\r\n ? `, ${moment(\r\n activity.closestEvent.startTime,\r\n 'HH:mm:ssZZ'\r\n ).format('HH:mm')}`\r\n : ''}\r\n </Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.durationCell\r\n )}\r\n align=\"left\"\r\n >\r\n <Typography>\r\n {activity.closestEvent.duration\r\n ? activity.closestEvent.duration\r\n : '—'}{' '}\r\n {t(activity.closestEvent.timeType)}\r\n </Typography>\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classes.tableCell}\r\n align=\"right\"\r\n >\r\n <div\r\n style={{ display: 'inline-flex', paddingRight: '10px' }}\r\n >\r\n <IconButton\r\n className={classes.iconButton}\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n aria-label=\"edit\"\r\n onClick={e => {\r\n e.stopPropagation();\r\n history.push(`/activities/${activity.id}`);\r\n }}\r\n >\r\n <EditIcon />\r\n </IconButton>\r\n <IconButton\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n className={classes.iconButton}\r\n aria-label=\"delete\"\r\n onClick={e => {\r\n e.stopPropagation();\r\n activityCancellationHandler(activity);\r\n }}\r\n >\r\n <HighlightOffIcon className={classes.closeIcon} />\r\n </IconButton>\r\n </div>\r\n </TableCell>\r\n </TableRow>\r\n );\r\n })}\r\n <UpcomingActivitiesDialog\r\n activity={dialogContent}\r\n onClose={onClose}\r\n open={open}\r\n onCancel={activityCancellationHandler}\r\n />\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n );\r\n}\r\n\r\nexport default UpcomingActivities;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%',\r\n [theme.breakpoints.down('sm')]: {\r\n overflowX: 'hidden'\r\n },\r\n },\r\n toolbar: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n boxShadow: '0px 1px 0px #E5E5E5',\r\n boxSizing: 'border-box',\r\n marginBottom: '5px',\r\n minHeight: '48px',\r\n },\r\n toolbarLeft: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n minWidth: '140px',\r\n height: '100%',\r\n borderRight: '1px solid #E2EBF6',\r\n boxSizing: 'border-box',\r\n color: '#59758B',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: '100px',\r\n },\r\n },\r\n toolbarTitle: {\r\n padding: '12px 30px',\r\n fontWeight: 'bold',\r\n fontSize: '18px',\r\n lineHeight: '24px',\r\n color: '#000000',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '8px 16px',\r\n fontSize: '16px',\r\n },\r\n },\r\n customTabRoot: {\r\n color: '#335267',\r\n padding: '0px 30px',\r\n borderBottom: '1px solid #E2EBF6',\r\n boxSizing: 'border-box',\r\n fontSize: '13px',\r\n minWidth: '84px!important',\r\n },\r\n tabsRoot: {\r\n flex: '1 1 auto',\r\n backgroundColor: theme.palette.background.paper,\r\n display: 'flex',\r\n },\r\n tabs: {\r\n flex: '0 1 220px',\r\n [theme.breakpoints.down('sm')]: {\r\n flex: '0 1 150px',\r\n },\r\n },\r\n customTabWrapper: {\r\n alignItems: 'flex-start',\r\n },\r\n horizontalTabs: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n padding: '32px 30px',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n padding: '16px',\r\n },\r\n },\r\n tabContentWrapper: {\r\n padding: '0px 30px',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '0px 16px',\r\n },\r\n },\r\n accommodationOverviewTab: {\r\n width: '230px',\r\n height: '175px',\r\n border: '1px solid #E2EBF6',\r\n borderRadius: '3px',\r\n padding: '12px 20px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n marginBottom: '26px',\r\n height: '100%'\r\n \r\n },\r\n },\r\n activityOverviewTab: {\r\n width: '290px',\r\n height: '175px',\r\n border: '1px solid #E2EBF6',\r\n borderRadius: '3px',\r\n padding: '12px 20px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '100%',\r\n marginBottom: '26px',\r\n height: '100%'\r\n },\r\n },\r\n numberTitle: {\r\n width: '228px',\r\n height: '42px',\r\n fontSize: '37px',\r\n fontWeight: 'bold',\r\n color: '#0E8BB4',\r\n },\r\n tabDescription: {\r\n paddingTop: '10px',\r\n },\r\n seeMoreOption: {\r\n paddingTop: '30px',\r\n color: '#59758B',\r\n width: '56px',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n },\r\n tableTitle: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n paddingRight: '15px',\r\n borderRight: '1px solid #E2EBF6',\r\n marginRight: '10px',\r\n },\r\n viewSwitchers: {\r\n display: 'flex',\r\n '&:hover': {\r\n cursor: 'pointer',\r\n },\r\n marginBottom: '18px',\r\n alignItems: 'center',\r\n },\r\n calendarIcon: {\r\n paddingLeft: '15px',\r\n paddingRight: '10px',\r\n fill: '#59758B',\r\n },\r\n calendarTitle: {\r\n color: '#59758B',\r\n },\r\n backToolbar: {\r\n paddingLeft: '30px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n [theme.breakpoints.down('sm')]: {\r\n paddingLeft: '16px',\r\n },\r\n },\r\n backIcon: {\r\n paddingRight: '10px',\r\n fill: '#59758B',\r\n },\r\n button: {\r\n padding: 0,\r\n height: '20px',\r\n '&:hover': {\r\n backgroundColor: '#fff',\r\n },\r\n },\r\n selected: {\r\n backgroundColor: '#E2F5F8',\r\n fontWeight: 'bold',\r\n },\r\n textColorInheritCustom: {\r\n opacity: 1,\r\n color: '#335267',\r\n },\r\n backButtonText: {\r\n color: '#59758B',\r\n paddingLeft: '6px',\r\n paddingRight: '15px',\r\n borderRight: '1px solid #E2EBF6',\r\n },\r\n}));\r\n\r\nexport default useStyles;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\nimport styled from 'styled-components';\r\n\r\nconst useStyles = makeStyles(() => ({\r\n root: {\r\n color: '#335267',\r\n padding: '0px 30px',\r\n borderBottom: '1px solid #E2EBF6',\r\n boxSizing: 'border-box',\r\n fontSize: '13px',\r\n minWidth: '84px!important'\r\n },\r\n\r\n wrapper: { alignItems: 'flex-start' },\r\n selected: { backgroundColor: '#E2F5F8', fontWeight: 'bold' },\r\n textColorInherit: { opacity: 1, color: '#335267' }\r\n}));\r\n\r\nexport const ToolbarWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n min-width: 540px;\r\n @media (max-width: 600px) {\r\n flex-direction: column;\r\n min-width: 100%;\r\n }\r\n`;\r\n\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { Tab } from '@material-ui/core';\r\nimport { useTranslation } from 'react-i18next';\r\nimport useStyles, { ToolbarWrapper } from './styles';\r\nimport Tabs from '@material-ui/core/Tabs';\r\n\r\nfunction a11yProps(index) {\r\n return {\r\n id: `vertical-tab-${index}`,\r\n 'aria-controls': `vertical-tabpanel-${index}`\r\n };\r\n}\r\n\r\nconst TabsMap = ['Accommodations', 'Activities'];\r\n\r\nconst ToolbarTabs = ({ tab, onChangeTab }) => {\r\n const [t] = useTranslation();\r\n const { root, wrapper, selected, textColorInherit } = useStyles();\r\n\r\n return (\r\n <ToolbarWrapper>\r\n <Tabs indicatorColor=\"primary\" value={tab} onChange={onChangeTab}>\r\n {TabsMap.map((tabName, index) => (\r\n <Tab\r\n key={tabName}\r\n classes={{ root, wrapper, selected, textColorInherit }}\r\n label={`${t(tabName)}`}\r\n {...a11yProps(index)}\r\n />\r\n ))}\r\n </Tabs>\r\n </ToolbarWrapper>\r\n );\r\n};\r\n\r\nexport default ToolbarTabs;\r\n","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useHistory } from 'react-router-dom';\r\n\r\nimport { useQuery } from '@apollo/react-hooks';\r\n\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Button from '@material-ui/core/Button';\r\nimport { Tab, Typography } from '@material-ui/core';\r\nimport DateRangeIcon from '@material-ui/icons/DateRange';\r\n\r\nimport { AppHeader, TabPanel, SelectCompanyBox } from 'components';\r\nimport UpcomingAccommodations from './components/upcoming-accommodations/UpcomingAccommodations';\r\nimport UpcomingActivities from './components/upcoming-activities/UpcomingActivities';\r\nimport { OVERVIEW } from 'graphql/queries/overview';\r\n\r\nimport useStyles from './styles';\r\nimport SelectDropDown from '../../components/select-drop-down/SelectDropDown';\r\nimport EntityTab from './components/ToolbarTabs';\r\nimport ToolbarTabs from './components/ToolbarTabs';\r\n\r\nconst CURRENT_TAB = 0;\r\nconst CANCELED_TAB = 1;\r\nconst SORTED_BY_ACCOMMODATIONS = 'accommodationsBookings';\r\nconst SORTED_BY_ACTIVITIES = 'activitiesBookings';\r\nconst ACCOMMODATIONS_OVERVIEW_INDEX = 0;\r\nconst ACTIVITIES_OVERVIEW_INDEX = 1;\r\n\r\nconst Overview = ({ location, businessOwner }) => {\r\n const classes = useStyles();\r\n const history = useHistory();\r\n const [t] = useTranslation();\r\n\r\n const [tab, setTab] = useState(location.state?.tabNumber || 0);\r\n const [upcomingPeriod, setUpcomingPeriod] = useState('today');\r\n const [\r\n upcomingPeriodForActivities,\r\n setUpcomingPeriodForActivities\r\n ] = useState('today');\r\n\r\n const overviewType =\r\n tab === ACCOMMODATIONS_OVERVIEW_INDEX\r\n ? 'accommodationsBookingsOverview'\r\n : 'activitiesBookingsOverview';\r\n\r\n const { data, refetch } = useQuery(OVERVIEW, {\r\n variables: {\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n },\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true\r\n });\r\n\r\n const handleChangeTab = (event, newTab) => {\r\n setTab(newTab);\r\n refetch();\r\n };\r\n\r\n const handleChangeUpcomingPeriod = newValue => {\r\n setUpcomingPeriod(newValue);\r\n };\r\n\r\n const handleChangeUpcomingPeriodForActivities = newValue => {\r\n setUpcomingPeriodForActivities(newValue);\r\n };\r\n\r\n return (\r\n <div className={classes.root}>\r\n <AppHeader />\r\n {!businessOwner.selectedBusinessOwner.id && <SelectCompanyBox />}\r\n\r\n {businessOwner.selectedBusinessOwner.id && (\r\n <div className={classes.toolbar}>\r\n <div className={classes.toolbarLeft}>\r\n <Typography variant=\"h2\" className={classes.toolbarTitle}>\r\n {t('Overview')}\r\n </Typography>\r\n </div>\r\n\r\n <ToolbarTabs tab={tab} onChangeTab={handleChangeTab} />\r\n </div>\r\n )}\r\n\r\n {businessOwner.selectedBusinessOwner.id && data && (\r\n <div className={classes.content}>\r\n <div className={classes.horizontalTabs}>\r\n <div\r\n className={\r\n tab === ACCOMMODATIONS_OVERVIEW_INDEX\r\n ? classes.accommodationOverviewTab\r\n : classes.activityOverviewTab\r\n }\r\n >\r\n <Typography className={classes.numberTitle}>\r\n {data[overviewType].newBookingsNumber}\r\n </Typography>\r\n <Typography className={classes.tabDescription}>\r\n {t('New bookings today')}\r\n </Typography>\r\n <Typography\r\n className={classes.seeMoreOption}\r\n onClick={() => {\r\n history.push({\r\n pathname: '/bookings-list',\r\n state: {\r\n tabNumber: CURRENT_TAB,\r\n sortedBy:\r\n tab === ACCOMMODATIONS_OVERVIEW_INDEX\r\n ? SORTED_BY_ACCOMMODATIONS\r\n : SORTED_BY_ACTIVITIES\r\n }\r\n });\r\n }}\r\n >\r\n {t('See more')}\r\n </Typography>\r\n </div>\r\n <div\r\n className={\r\n tab === ACCOMMODATIONS_OVERVIEW_INDEX\r\n ? classes.accommodationOverviewTab\r\n : classes.activityOverviewTab\r\n }\r\n >\r\n <Typography className={classes.numberTitle}>\r\n {data[overviewType].currentBookingsNumber}\r\n </Typography>\r\n <Typography className={classes.tabDescription}>\r\n {t('Active bookings')}\r\n </Typography>\r\n <Typography\r\n className={classes.seeMoreOption}\r\n onClick={() => {\r\n history.push({\r\n pathname: '/bookings-list',\r\n state: {\r\n tabNumber: CURRENT_TAB,\r\n sortedBy:\r\n tab === ACCOMMODATIONS_OVERVIEW_INDEX\r\n ? SORTED_BY_ACCOMMODATIONS\r\n : SORTED_BY_ACTIVITIES\r\n }\r\n });\r\n }}\r\n >\r\n {t('See more')}\r\n </Typography>\r\n </div>\r\n <div\r\n className={\r\n tab === ACCOMMODATIONS_OVERVIEW_INDEX\r\n ? classes.accommodationOverviewTab\r\n : classes.activityOverviewTab\r\n }\r\n >\r\n <Typography className={classes.numberTitle}>\r\n {data[overviewType].bookingsWhichStartToday\r\n ? data[overviewType].bookingsWhichStartToday\r\n : 0}\r\n </Typography>\r\n <Typography className={classes.tabDescription}>\r\n {t('Bookings with check-in today')}\r\n </Typography>\r\n <Typography className={classes.numberTitle}>\r\n {data[overviewType].arrivalGuestsNumber\r\n ? data[overviewType].arrivalGuestsNumber\r\n : 0}\r\n </Typography>\r\n <Typography className={classes.tabDescription}>\r\n {t('Guests scheduled for arrival today')}\r\n </Typography>\r\n </div>\r\n {tab === ACCOMMODATIONS_OVERVIEW_INDEX && (\r\n <div className={classes.accommodationOverviewTab}>\r\n <Typography className={classes.numberTitle}>\r\n {data[overviewType].bookingsWhichEndToday\r\n ? data[overviewType].bookingsWhichEndToday\r\n : 0}\r\n </Typography>\r\n <Typography className={classes.tabDescription}>\r\n {t('Bookings with check-out today')}\r\n </Typography>\r\n <Typography className={classes.numberTitle}>\r\n {data[overviewType].departureGuestsNumber\r\n ? data[overviewType].departureGuestsNumber\r\n : 0}\r\n </Typography>\r\n <Typography className={classes.tabDescription}>\r\n {t('Guests scheduled for departure today')}\r\n </Typography>\r\n </div>\r\n )}\r\n <div\r\n className={\r\n tab === ACCOMMODATIONS_OVERVIEW_INDEX\r\n ? classes.accommodationOverviewTab\r\n : classes.activityOverviewTab\r\n }\r\n >\r\n <Typography className={classes.numberTitle}>\r\n {data[overviewType].canceledBookingsNumber}\r\n </Typography>\r\n\r\n <Typography className={classes.tabDescription}>\r\n {t('Bookings are cancelled')}\r\n </Typography>\r\n\r\n <Typography\r\n className={classes.seeMoreOption}\r\n onClick={() => {\r\n history.push({\r\n pathname: '/bookings-list',\r\n state: {\r\n tabNumber: CANCELED_TAB,\r\n sortedBy: 'allBookings'\r\n }\r\n });\r\n }}\r\n >\r\n {t('See more')}\r\n </Typography>\r\n </div>\r\n </div>\r\n\r\n <TabPanel\r\n className={classes.tabContentWrapper}\r\n value={tab}\r\n index={ACCOMMODATIONS_OVERVIEW_INDEX}\r\n >\r\n <div>\r\n <div className={classes.viewSwitchers}>\r\n <Typography className={classes.tableTitle}>\r\n {t('Upcoming accommodations')}\r\n </Typography>\r\n <SelectDropDown\r\n value={upcomingPeriod}\r\n onChange={handleChangeUpcomingPeriod}\r\n className={classes.selectInput}\r\n items={[\r\n {\r\n value: 'today',\r\n label: 'today'\r\n },\r\n {\r\n value: 'week',\r\n label: '7 days'\r\n },\r\n {\r\n value: 'month',\r\n label: '30 days'\r\n }\r\n ]}\r\n />\r\n <Button\r\n classes={{ root: classes.button }}\r\n onClick={() =>\r\n history.push(`/accommodations-overview-calendar`)\r\n }\r\n >\r\n <DateRangeIcon\r\n fontSize=\"small\"\r\n className={classes.calendarIcon}\r\n />\r\n <Typography className={classes.calendarTitle}>\r\n {t('Show Calendar')}\r\n </Typography>\r\n </Button>\r\n </div>\r\n <UpcomingAccommodations\r\n ownerId={\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n upcomingPeriod={upcomingPeriod}\r\n />\r\n </div>\r\n </TabPanel>\r\n <TabPanel\r\n className={classes.tabContentWrapper}\r\n value={tab}\r\n index={ACTIVITIES_OVERVIEW_INDEX}\r\n >\r\n <div>\r\n <div className={classes.viewSwitchers}>\r\n <Typography className={classes.tableTitle}>\r\n {t('Upcoming activities')}\r\n </Typography>\r\n <SelectDropDown\r\n value={upcomingPeriodForActivities}\r\n onChange={handleChangeUpcomingPeriodForActivities}\r\n className={classes.selectInput}\r\n items={[\r\n {\r\n value: 'today',\r\n label: 'today'\r\n },\r\n {\r\n value: 'week',\r\n label: '7 days'\r\n },\r\n {\r\n value: 'month',\r\n label: '30 days'\r\n }\r\n ]}\r\n />\r\n <Button\r\n classes={{ root: classes.button }}\r\n onClick={() => history.push(`/activities-overview-calendar`)}\r\n >\r\n <DateRangeIcon\r\n fontSize=\"small\"\r\n className={classes.calendarIcon}\r\n />\r\n <Typography className={classes.calendarTitle}>\r\n {t('Show Calendar')}\r\n </Typography>\r\n </Button>\r\n </div>\r\n <UpcomingActivities\r\n upcomingPeriod={upcomingPeriodForActivities}\r\n ownerId={\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n }\r\n />\r\n </div>\r\n </TabPanel>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nexport default connect(mapStateToProps, null)(Overview);\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme =>({\r\n instructionsWrapper: {\r\n paddingTop: '30px',\r\n [theme.breakpoints.down]:{\r\n width: '280px',\r\n padding: '0px 10px 0px 10px'\r\n \r\n }\r\n },\r\n instructionItem: {\r\n display: 'flex',\r\n alignItems: 'self-start',\r\n padding: '18px 0px',\r\n [theme.breakpoints.down]:{\r\n // width: '100%',\r\n width: '280px',\r\n }\r\n },\r\n instructionText: {\r\n display: 'flex',\r\n padding: '0px 10px',\r\n alignItems: 'center',\r\n [theme.breakpoints.down]:{\r\n width: '100%',\r\n \r\n justifyContent: 'center',\r\n // paddingRight: '10px'\r\n }\r\n },\r\n listNumberMark: {\r\n minWidth: '24px',\r\n minHeight: '24px',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n backgroundColor: '#000000',\r\n color: '#FFFFFF',\r\n borderRadius: '50%',\r\n display: 'flex'\r\n },\r\n linkText: {\r\n backgroundColor: '#E2F5F8',\r\n padding: '10px',\r\n marginLeft: '20px',\r\n\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport { WIDGET_LINK } from '../../../../config';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst Instructions = () => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classes.instructionsWrapper}>\r\n <Typography\r\n style={{ paddingBottom: '15px', fontWeight: 'bold', fontSize: '15px' }}\r\n >\r\n {t('Instruction')}\r\n </Typography>\r\n <div className={classes.instructionItem}>\r\n <div className={classes.listNumberMark}>1</div>\r\n <Typography className={classes.instructionText}>\r\n {t(\r\n 'If you would like to customize the Horn website widget color scheme, please upload a logo and select the accent color.'\r\n )}\r\n </Typography>\r\n </div>\r\n <div className={classes.instructionItem}>\r\n <div className={classes.listNumberMark}>2</div>\r\n <Typography className={classes.instructionText}>\r\n {t(\r\n 'To enable the Horn website widget throughout your website, please insert the below script between the Header tags of your website.'\r\n )}\r\n </Typography>\r\n </div>\r\n <Typography className={classes.linkText}>\r\n {`<script src=\"${WIDGET_LINK}\"></script>`}\r\n </Typography>\r\n <div className={classes.instructionItem}>\r\n <div className={classes.listNumberMark}>3</div>\r\n <Typography className={classes.instructionText}>\r\n {t(\r\n 'Select the Horn website widget type (Product list or Specific unit) above and add a [Book button] by clicking on the \"Generate and copy\".'\r\n )}\r\n </Typography>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Instructions;\r\n","import {\r\n isValidUploadedImageSize,\r\n isValidUploadedImageFormat,\r\n isRequired\r\n} from 'utils/validators';\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (isRequired(values.privacyPolicy || '', true)) {\r\n errors.privacyPolicy = 'Privacy policy is required';\r\n }\r\n\r\n if (isRequired(values.termsAndConditions || '', true)) {\r\n errors.termsAndConditions = 'Terms and conditions is required';\r\n }\r\n\r\n if (values.coverPhoto) {\r\n if (isValidUploadedImageSize(values.coverPhoto || '', true)) {\r\n errors.coverPhoto = 'Your file exceeded the size limit';\r\n } else if (isValidUploadedImageFormat(values.coverPhoto || '', true)) {\r\n errors.coverPhoto = `File could not be uploaded because the format is not supported. Please upload the file with the format png, jpg, jpeg`;\r\n }\r\n }\r\n\r\n if (values.languages) {\r\n if (values.languages.length === 0) {\r\n errors.languages = 'Select at least one language';\r\n }\r\n }\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme =>({\r\n panelTitle: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n lineHeight: '18px'\r\n },\r\n formPanel: {\r\n paddingTop: '30px',\r\n paddingLeft: '220px',\r\n [theme.breakpoints.down('sm')]:{\r\n paddingLeft: '20px',\r\n flexDirection: 'column',\r\n display: 'flex',\r\n paddingBottom: '50px'\r\n }\r\n },\r\n inputFields: {\r\n display: 'flex',\r\n flexDirection: 'row',\r\n paddingTop: '30px',\r\n paddingBottom: '30px',\r\n [theme.breakpoints.down('sm')]:{\r\n flexDirection: 'column',\r\n display: 'flex',\r\n width: '80%',\r\n }\r\n },\r\n photoUpload: {\r\n width: '285px'\r\n },\r\n photoError: {\r\n marginBottom: 0\r\n },\r\n colorPaletteWrapper: {\r\n width: '285px',\r\n marginLeft: '30px',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '85px',\r\n marginLeft: '0px',\r\n marginTop: '20px'\r\n }\r\n },\r\n colorPalette: {\r\n position: 'relative',\r\n width: '285px',\r\n height: '204px',\r\n borderRadius: '3px',\r\n backgroundColor: '#E5E5E5'\r\n },\r\n editIconWrapper: {\r\n position: 'absolute',\r\n bottom: '0',\r\n right: '0',\r\n '&:hover': {\r\n cursor: 'pointer'\r\n },\r\n background: '#464646',\r\n height: '24px',\r\n [theme.breakpoints.down('sm')]:{\r\n height: '50px',\r\n width: '50px'\r\n \r\n }\r\n\r\n },\r\n editIcon: {\r\n color: 'white',\r\n fontSize: '16px',\r\n padding: '4px',\r\n [theme.breakpoints.down('sm')]:{\r\n height: '50px',\r\n width: '50px'\r\n \r\n }\r\n \r\n },\r\n unitSelectWrapper: {\r\n paddingTop: '30px'\r\n },\r\n languagesSelect: {\r\n display: 'block',\r\n width: '100%'\r\n },\r\n inputWrapper: {\r\n width: '100%',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n paddingBottom: '30px',\r\n [theme.breakpoints.down('sm')]:{\r\n flexDirection: 'column',\r\n display: 'flex',\r\n width: '100%',\r\n \r\n }\r\n },\r\n input: {\r\n width: '45%',\r\n [theme.breakpoints.down('sm')]:{\r\n paddingBottom: '20px',\r\n width: '100%',\r\n paddingRight: '10px'\r\n }\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Field, isDirty, reduxForm } from 'redux-form';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport EditIcon from '@material-ui/icons/Edit';\r\n\r\nimport {\r\n DndUploadImage,\r\n FormActionButtons,\r\n CustomColorPicker,\r\n MultiSelect,\r\n Input\r\n} from 'components';\r\n\r\nimport validate from './validate';\r\nimport useStyles from './styles';\r\n\r\nconst initialValues = {\r\n color: '',\r\n coverPhoto: {\r\n image: ''\r\n },\r\n languages: [],\r\n selectedUnitId: '',\r\n privacyPolicy: '',\r\n termsAndConditions: ''\r\n};\r\n\r\nconst WidgetSettingsForm = ({ handleSubmit, colorHandler, color, isDirty }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const [openColorPicker, setOpenColorPicker] = React.useState(false);\r\n return (\r\n <div className={classes.formPanel}>\r\n <Typography className={classes.panelTitle}>\r\n {t('Widget settings')}\r\n </Typography>\r\n <form onSubmit={handleSubmit}>\r\n <div className={classes.inputFields}>\r\n <div className={classes.photoUpload}>\r\n <Field\r\n name=\"coverPhoto\"\r\n label=\"Logotype\"\r\n component={DndUploadImage}\r\n errorClass={classes.photoError}\r\n isDelete={true}\r\n />\r\n </div>\r\n <div className={classes.colorPaletteWrapper}>\r\n <Typography\r\n variant=\"h3\"\r\n style={{\r\n marginBottom: '6px',\r\n textTransform: 'uppercase'\r\n }}\r\n >\r\n {t('Accent color')}\r\n </Typography>\r\n <div\r\n className={classes.colorPalette}\r\n style={{ backgroundColor: color }}\r\n >\r\n <div\r\n onClick={() => setOpenColorPicker(true)}\r\n className={classes.editIconWrapper}\r\n >\r\n <EditIcon className={classes.editIcon} />\r\n </div>\r\n {openColorPicker && (\r\n <Field\r\n name=\"color\"\r\n onClose={setOpenColorPicker}\r\n defaultColor={color}\r\n onChange={colorHandler}\r\n component={CustomColorPicker}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n <div className={classes.inputWrapper}>\r\n <Field\r\n name=\"privacyPolicy\"\r\n className={classes.input}\r\n placeholder={t('Privacy Policy')}\r\n label={t('Privacy Policy') + ' *'}\r\n component={Input}\r\n />\r\n <Field\r\n name=\"termsAndConditions\"\r\n className={classes.input}\r\n placeholder={t('Terms & Conditions')}\r\n label={t('Terms & Conditions') + ' *'}\r\n component={Input}\r\n />\r\n </div>\r\n\r\n <Field\r\n name=\"languages\"\r\n list={['English', 'Norwegian']}\r\n component={MultiSelect}\r\n />\r\n\r\n <FormActionButtons\r\n isDisabledAction={!isDirty}\r\n cancelPath=\"/\"\r\n actionLabel=\"Save\"\r\n />\r\n </form>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n isDirty: isDirty('widgetForm')(state)\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'widgetForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n initialValues,\r\n validate\r\n})(connect(mapStateToProps)(WidgetSettingsForm));\r\n","import gql from 'graphql-tag';\r\n\r\nexport const WIDGET_SETTINGS = gql`\r\n query widget($businessOwnerId: Int) {\r\n widget(businessOwnerId: $businessOwnerId) {\r\n id\r\n color\r\n photo\r\n languages\r\n privacyPolicy\r\n termsAndConditions\r\n }\r\n activities(businessOwnerId: $businessOwnerId) {\r\n id\r\n title\r\n }\r\n accommodations(businessOwnerId: $businessOwnerId) {\r\n id\r\n title\r\n }\r\n }\r\n`;\r\n","import gql from 'graphql-tag';\r\n\r\nexport const CREATE_WIDGET_SETTINGS = gql`\r\n mutation widgetSetSettings(\r\n $photo: Upload\r\n $widgetSettings: WidgetCustomizationInput\r\n ) {\r\n widgetSetSettings(photo: $photo, widgetSettings: $widgetSettings) {\r\n id\r\n }\r\n }\r\n`;\r\n\r\nexport const UPDATE_WIDGET_SETTINGS = gql`\r\n mutation widgetUpdateSettings(\r\n $photo: Upload\r\n $widgetSettings: WidgetCustomizationInput\r\n ) {\r\n widgetUpdateSettings(photo: $photo, widgetSettings: $widgetSettings) {\r\n widget {\r\n id\r\n }\r\n }\r\n }\r\n`;\r\n","const WIDGET_ROOT = 'widgetRoot';\r\nconst WIDGET_BUTTON_ID = 'horn-widget-button';\r\nconst WIDGET_WRAPPER_ID = 'horn-widget-wrapper';\r\nconst WIDGET_OWNER_ID_ATTRIBUTE = 'data-horn-business-owner-id';\r\nconst WIDGET_ACTIVITY_ID_ATTRIBUTE = 'data-horn-activity-id';\r\nconst WIDGET_ACCOMMODATION_ID_ATTRIBUTE = 'data-horn-accommodation-id';\r\nconst WIDGET_COLOR_ATTRIBUTE = 'data-horn-color';\r\nconst WIDGET_GOOGLE_ANALYTICS_ID_ATTRIBUTE = 'data-horn-google-analytics-id';\r\nconst WIDGET_LANGUAGES_ATTRIBUTE = 'data-horn-languages';\r\nconst WIDGET_LOGO_ATTRIBUTE = 'data-horn-logo';\r\nconst WIDGET_PRIVACY_POLICY_ATTRIBUTE = 'data-horn-privacy-policy';\r\nconst WIDGET_TERMS_AND_CONDITIONS_ATTRIBUTE = 'data-horn-terms-and-conditions';\r\nconst WIDGET_CLICK_HANDLER = `(function(){document.getElementById('${WIDGET_WRAPPER_ID}').contentWindow.mountApp(event)})()`;\r\n\r\nconst MENU = [\r\n {\r\n title: 'Date and Guests'\r\n },\r\n {\r\n title: 'Add-ons | optional'\r\n },\r\n {\r\n title: 'Activities | optional'\r\n },\r\n {\r\n title: 'Checkout'\r\n },\r\n {\r\n title: 'Payment'\r\n }\r\n];\r\n\r\nconst FOOTER_MENU = [\r\n {\r\n title: 'Date and Guests'\r\n },\r\n {\r\n title: 'Add-ons'\r\n },\r\n {\r\n title: 'Activities'\r\n },\r\n {\r\n title: 'Checkout'\r\n },\r\n {\r\n title: 'Payment'\r\n }\r\n];\r\n\r\nconst ACCOMMODATION_TITLE = 'Accommodation';\r\nconst ACTIVITY_TITLE = 'Activity';\r\n\r\nconst PRODUCTS_MENU = [\r\n {\r\n title: ACCOMMODATION_TITLE\r\n },\r\n {\r\n title: ACTIVITY_TITLE\r\n }\r\n];\r\n\r\nconst STRIPE = 'Credit & Debit cards';\r\nconst PAYPAL = 'Pay with Paypal';\r\nconst PAY_ON_ARRIVAL = 'Pay on arrival';\r\n\r\nconst ADD_ONS_INDEX = 1;\r\nconst RELATED_PRODUCTS_INDEX = 2;\r\n\r\nexport {\r\n WIDGET_ROOT,\r\n WIDGET_BUTTON_ID,\r\n WIDGET_WRAPPER_ID,\r\n WIDGET_OWNER_ID_ATTRIBUTE,\r\n WIDGET_ACTIVITY_ID_ATTRIBUTE,\r\n WIDGET_ACCOMMODATION_ID_ATTRIBUTE,\r\n WIDGET_COLOR_ATTRIBUTE,\r\n WIDGET_GOOGLE_ANALYTICS_ID_ATTRIBUTE,\r\n WIDGET_LANGUAGES_ATTRIBUTE,\r\n WIDGET_LOGO_ATTRIBUTE,\r\n MENU,\r\n FOOTER_MENU,\r\n ACCOMMODATION_TITLE,\r\n ACTIVITY_TITLE,\r\n PRODUCTS_MENU,\r\n STRIPE,\r\n PAYPAL,\r\n PAY_ON_ARRIVAL,\r\n ADD_ONS_INDEX,\r\n RELATED_PRODUCTS_INDEX,\r\n WIDGET_PRIVACY_POLICY_ATTRIBUTE,\r\n WIDGET_TERMS_AND_CONDITIONS_ATTRIBUTE,\r\n WIDGET_CLICK_HANDLER\r\n};\r\n","import {\r\n WIDGET_BUTTON_ID,\r\n WIDGET_COLOR_ATTRIBUTE,\r\n WIDGET_OWNER_ID_ATTRIBUTE,\r\n WIDGET_GOOGLE_ANALYTICS_ID_ATTRIBUTE,\r\n WIDGET_LANGUAGES_ATTRIBUTE,\r\n WIDGET_LOGO_ATTRIBUTE,\r\n WIDGET_TERMS_AND_CONDITIONS_ATTRIBUTE,\r\n WIDGET_PRIVACY_POLICY_ATTRIBUTE,\r\n WIDGET_CLICK_HANDLER\r\n} from 'constants/widget';\r\n\r\nexport const generateWidgetButton = ({\r\n businessOwnerId,\r\n color,\r\n googleAnalyticsId,\r\n languages,\r\n logo,\r\n productId,\r\n itemType,\r\n privacyPolicy,\r\n termsAndConditions\r\n}) => {\r\n const attributes = {\r\n id: WIDGET_BUTTON_ID,\r\n [WIDGET_OWNER_ID_ATTRIBUTE]: businessOwnerId,\r\n [WIDGET_COLOR_ATTRIBUTE]: color,\r\n [WIDGET_GOOGLE_ANALYTICS_ID_ATTRIBUTE]:\r\n googleAnalyticsId && googleAnalyticsId.length ? googleAnalyticsId : null,\r\n [WIDGET_LANGUAGES_ATTRIBUTE]: languages.length ? languages : null,\r\n [WIDGET_LOGO_ATTRIBUTE]: logo,\r\n [WIDGET_PRIVACY_POLICY_ATTRIBUTE]: privacyPolicy,\r\n [WIDGET_TERMS_AND_CONDITIONS_ATTRIBUTE]: termsAndConditions,\r\n onClick: WIDGET_CLICK_HANDLER\r\n };\r\n\r\n if (itemType) {\r\n const type = itemType.toLowerCase();\r\n attributes[`data-horn-${type}-id`] = productId;\r\n }\r\n\r\n let widgetAttrs = '';\r\n\r\n Object.keys(attributes).forEach(key => {\r\n const value = attributes[key];\r\n widgetAttrs += `${key}=\"${value}\" `;\r\n });\r\n\r\n return `<button ${widgetAttrs}>Book now</button>`;\r\n};\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%',\r\n \r\n },\r\n toolbar: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n boxShadow: '0px 1px 0px #E5E5E5',\r\n boxSizing: 'border-box',\r\n minHeight: '48px',\r\n [theme.breakpoints.down('sm')]:{\r\n flexDirection: 'column',\r\n minHeight: 'auto',\r\n }\r\n },\r\n toolbarLeft: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n minWidth: '140px',\r\n height: '100%',\r\n boxSizing: 'border-box',\r\n color: '#59758B',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: '100px',\r\n alignItems : 'center',\r\n justifyContent:'center', \r\n },\r\n },\r\n toolbarTitle: {\r\n padding: '12px 30px',\r\n fontWeight: 'bold',\r\n fontSize: '18px',\r\n lineHeight: '24px',\r\n color: '#000000',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '8px 16px',\r\n fontSize: '16px',\r\n textAlign: 'center'\r\n },\r\n },\r\n content: {\r\n display: 'flex',\r\n width: '100%',\r\n height: '100%',\r\n flexDirection: 'row',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n padding: ' 0 20px',\r\n \r\n },\r\n },\r\n codePanel: {\r\n padding: '30px',\r\n minWidth: '420px',\r\n maxWidth: '450px',\r\n borderRight: '1px solid #E5E5E5',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: '100%',\r\n maxWidth: '100%',\r\n borderRight: 'none',\r\n borderBottom: '1px solid #E5E5E5',\r\n },\r\n },\r\n panelTitle: {\r\n fontSize: '15px',\r\n fontWeight: 'bold',\r\n lineHeight: '18px',\r\n },\r\n switchers: {\r\n display: 'flex',\r\n width: '100%',\r\n paddingTop: '24px',\r\n paddingBottom: '18px',\r\n [theme.breakpoints.down('sm')]: {\r\n paddingTop: '16px',\r\n paddingBottom: '12px',\r\n width: '100%'\r\n },\r\n },\r\n customTabRoot: {\r\n width: '50%',\r\n height: '36px',\r\n minHeight: '36px',\r\n borderRadius: '3px',\r\n color: '#59758B',\r\n border: '1px solid #E5E5E5',\r\n fontSize: '13px',\r\n [theme.breakpoints.down('sm')]: {\r\n width: '50%',\r\n fontSize: '12px',\r\n },\r\n },\r\n selected: {\r\n backgroundColor: '#005A81',\r\n color: '#FFFFFF',\r\n },\r\n customTabWrapper: {\r\n padding: 0,\r\n },\r\n tabs: {\r\n height: '36px',\r\n minHeight: '36px',\r\n width: '100%',\r\n },\r\n buttonRoot: {\r\n width: '100%',\r\n fontSize: '13px',\r\n fontWeight: 'bold',\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%'\r\n }\r\n },\r\n unitSelectWrapper: {\r\n paddingTop: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n paddingTop: '20px',\r\n },\r\n },\r\n selectInput: {\r\n width: '100%',\r\n \r\n },\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important',\r\n },\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { NetworkStatus } from 'apollo-client';\r\n\r\nimport { connect } from 'react-redux';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\nimport { useSnackbar } from 'notistack';\r\nimport { initialize } from 'redux-form';\r\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\r\n\r\nimport { Tab, Typography } from '@material-ui/core';\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport {\r\n AppHeader,\r\n RadioButtonsGroup,\r\n TabPanel,\r\n CircularLoader,\r\n SelectDropDown,\r\n SelectCompanyBox\r\n} from 'components';\r\n\r\nimport Instructions from './components/instructions/Instructions';\r\nimport WidgetSettingsForm from './components/widget-form/WidgetForm';\r\n\r\nimport { CURRENT_BUSINESS_OWNER_INFO } from 'graphql/queries/business-owner';\r\nimport { WIDGET_SETTINGS } from 'graphql/queries/widget';\r\nimport { USER_SETTINGS } from 'graphql/queries/settings';\r\n\r\nimport { getDataToStore } from 'utils/widget/getDataToStore';\r\nimport {\r\n prepareReceivedWidgetData,\r\n prepareUnitsDataForSelect\r\n} from 'utils/widget/prepareReceivedData';\r\n\r\nimport {\r\n CREATE_WIDGET_SETTINGS,\r\n UPDATE_WIDGET_SETTINGS\r\n} from 'graphql/mutations/widget';\r\n\r\nimport { generateWidgetButton } from 'utils/widget/generateWidgetButton';\r\n\r\nimport useStyles from './styles';\r\n\r\nfunction verticalTabProps(index) {\r\n return {\r\n id: `vertical-tab-${index}`,\r\n 'aria-controls': `vertical-tabpanel-${index}`\r\n };\r\n}\r\n\r\nconst PRODUCT_LIST_INDEX = 0;\r\nconst SPECIFIC_UNIT_INDEX = 1;\r\n\r\nconst ACCOMMODATION_UNIT_SELECT_TYPE = 'Accommodation';\r\nconst ACTIVITY_UNIT_SELECT_TYPE = 'Activity';\r\n\r\nconst DEFAULT_COLOR = '#0E8BB4';\r\n\r\nlet WidgetSettings = ({ ...props }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const { initializeForm, businessOwner } = props;\r\n\r\n const [value, setValue] = React.useState(0);\r\n const [color, setColor] = React.useState(DEFAULT_COLOR);\r\n const [isLoading, setIsLoading] = React.useState(true);\r\n const [savedForms, setSavedForms] = React.useState({});\r\n const [unitType, setUnitType] = React.useState('Accommodation');\r\n const [isUpdate, setIsUpdate] = React.useState(false);\r\n const [selectedUnitId, setSelectedUnitId] = React.useState('');\r\n\r\n const [accommodations, setAccommodations] = React.useState([]);\r\n const [activities, setActivities] = React.useState([]);\r\n\r\n const { enqueueSnackbar } = useSnackbar();\r\n const [createWidgetSettings] = useMutation(CREATE_WIDGET_SETTINGS);\r\n const [updateWidgetSettings] = useMutation(UPDATE_WIDGET_SETTINGS);\r\n\r\n const { data, refetch: refetchWidgetSettings, networkStatus } = useQuery(\r\n WIDGET_SETTINGS,\r\n {\r\n variables: {\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n },\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true\r\n }\r\n );\r\n\r\n const { loading: userSettingsLoading, data: userSettingsData } = useQuery(\r\n USER_SETTINGS,\r\n {\r\n variables: {\r\n businessOwnerId:\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n },\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true\r\n }\r\n );\r\n\r\n const { loading: businessOwnerLoading, data: businessOwnerData } = useQuery(\r\n CURRENT_BUSINESS_OWNER_INFO,\r\n {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true\r\n }\r\n );\r\n\r\n const handleChange = (event, newValue) => {\r\n setValue(newValue);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (data) {\r\n if (networkStatus === NetworkStatus.refetch) return;\r\n setIsLoading(false);\r\n const widgetData = prepareReceivedWidgetData(data.widget);\r\n const unitsData = prepareUnitsDataForSelect(data);\r\n\r\n setSavedForms({\r\n ...widgetData,\r\n color: widgetData.color || DEFAULT_COLOR\r\n });\r\n\r\n setIsUpdate(!!widgetData.id);\r\n\r\n let initialValues = {\r\n widgetForm: widgetData\r\n };\r\n\r\n setColor(widgetData.color ? widgetData.color : DEFAULT_COLOR);\r\n setAccommodations(unitsData.accommodations);\r\n setActivities(unitsData.activities);\r\n\r\n initializeForms(initialValues);\r\n }\r\n }, [data]);\r\n\r\n const isPaymentsSettings = isMessage => {\r\n if (!userSettingsData.payPalSettings && !userSettingsData.stripeSettings) {\r\n const payOnArrivalPossibility = userSettingsData.payOnArrivalPossibility;\r\n if (payOnArrivalPossibility && payOnArrivalPossibility.payOnArrival) {\r\n return true;\r\n }\r\n\r\n if (isMessage) {\r\n enqueueSnackbar(\r\n t(\r\n 'Code can’t be generated because the payment system isn’t connected'\r\n ),\r\n {\r\n variant: 'error'\r\n }\r\n );\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const widgetSettingSubmit = values => {\r\n const dataToStore = getDataToStore(\r\n values,\r\n businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n );\r\n setIsLoading(true);\r\n if (isUpdate) {\r\n updateWidgetSettings({ variables: dataToStore }).then(() => {\r\n enqueueSnackbar(t('Widget settings have been successfully updated'), {\r\n variant: 'success'\r\n });\r\n refetchWidgetSettings();\r\n });\r\n } else {\r\n createWidgetSettings({ variables: dataToStore }).then(() => {\r\n enqueueSnackbar(t('Widget settings have been successfully created'), {\r\n variant: 'success'\r\n });\r\n refetchWidgetSettings();\r\n });\r\n }\r\n };\r\n\r\n const initializeForms = initialFormsData => {\r\n Object.keys(initialFormsData).map(field => {\r\n initializeForm(field, initialFormsData[field]);\r\n });\r\n };\r\n\r\n const copyButtonCode = () => {\r\n if (!userSettingsData || !isPaymentsSettings(false) || !savedForms) return;\r\n const allItems = value === PRODUCT_LIST_INDEX;\r\n\r\n const businessOwnerId =\r\n businessOwner && businessOwner.selectedBusinessOwner\r\n ? businessOwner.selectedBusinessOwner.ownerId ||\r\n businessOwner.selectedBusinessOwner.id\r\n : null;\r\n\r\n const googleAnalyticsId =\r\n businessOwnerData && businessOwnerData.googleAnalyticsSettings\r\n ? businessOwnerData.googleAnalyticsSettings.googleAnalyticsId\r\n : null;\r\n\r\n if (allItems) {\r\n return generateWidgetButton({\r\n businessOwnerId: businessOwnerId,\r\n color: savedForms.color || DEFAULT_COLOR,\r\n googleAnalyticsId: googleAnalyticsId,\r\n languages: savedForms.languages,\r\n logo: savedForms.coverPhoto.image,\r\n termsAndConditions: savedForms.termsAndConditions,\r\n privacyPolicy: savedForms.privacyPolicy\r\n });\r\n }\r\n\r\n const itemType =\r\n unitType === ACTIVITY_UNIT_SELECT_TYPE && !allItems\r\n ? ACTIVITY_UNIT_SELECT_TYPE\r\n : ACCOMMODATION_UNIT_SELECT_TYPE;\r\n\r\n return generateWidgetButton({\r\n businessOwnerId: businessOwnerId,\r\n color: savedForms.color || DEFAULT_COLOR,\r\n googleAnalyticsId: googleAnalyticsId,\r\n languages: savedForms.languages,\r\n logo: savedForms.coverPhoto.image,\r\n termsAndConditions: savedForms.termsAndConditions,\r\n privacyPolicy: savedForms.privacyPolicy,\r\n productId: selectedUnitId,\r\n itemType: itemType\r\n });\r\n };\r\n\r\n return (\r\n <div className={classes.root}>\r\n <AppHeader />\r\n <CircularLoader\r\n isLoading={userSettingsLoading || businessOwnerLoading || isLoading}\r\n loaderClassName={classes.loaderClassName}\r\n />\r\n {!businessOwner.selectedBusinessOwner.id && <SelectCompanyBox />}\r\n {businessOwner.selectedBusinessOwner.id && (\r\n <div className={classes.toolbar}>\r\n <div className={classes.toolbarLeft}>\r\n <Typography variant=\"h2\" className={classes.toolbarTitle}>\r\n {t('Widget')}\r\n </Typography>\r\n </div>\r\n </div>\r\n )}\r\n {businessOwner.selectedBusinessOwner.id && (\r\n <div className={classes.content}>\r\n <div className={classes.codePanel}>\r\n <Typography className={classes.panelTitle}>{t('Code')}</Typography>\r\n <div className={classes.switchers}>\r\n <Tabs\r\n classes={{ root: classes.tabs }}\r\n indicatorColor=\"secondary\"\r\n value={value}\r\n onChange={handleChange}\r\n >\r\n <Tab\r\n classes={{\r\n root: classes.customTabRoot,\r\n wrapper: classes.customTabWrapper,\r\n selected: classes.selected,\r\n textColorInherit: classes.textColorInheritCustom\r\n }}\r\n label={t('Product list')}\r\n {...verticalTabProps(PRODUCT_LIST_INDEX)}\r\n />\r\n <Tab\r\n classes={{\r\n root: classes.customTabRoot,\r\n wrapper: classes.customTabWrapper,\r\n selected: classes.selected,\r\n textColorInherit: classes.textColorInheritCustom\r\n }}\r\n label={t('Specific unit')}\r\n {...verticalTabProps(SPECIFIC_UNIT_INDEX)}\r\n />\r\n </Tabs>\r\n </div>\r\n\r\n <CopyToClipboard\r\n onCopy={() => {\r\n if (!isPaymentsSettings(false)) return;\r\n enqueueSnackbar(t('Copied'), {\r\n variant: 'success'\r\n });\r\n }}\r\n text={copyButtonCode()}\r\n >\r\n <Button\r\n disabled={\r\n (value === SPECIFIC_UNIT_INDEX && !selectedUnitId) ||\r\n !savedForms\r\n }\r\n variant=\"outlined\"\r\n color=\"primary\"\r\n onClick={() => isPaymentsSettings(true)}\r\n classes={{ root: classes.buttonRoot }}\r\n >\r\n {t('Generate and copy')}\r\n </Button>\r\n </CopyToClipboard>\r\n\r\n <TabPanel value={value} index={PRODUCT_LIST_INDEX}>\r\n <Instructions />\r\n </TabPanel>\r\n\r\n <TabPanel value={value} index={SPECIFIC_UNIT_INDEX}>\r\n <div className={classes.unitSelectWrapper}>\r\n <RadioButtonsGroup\r\n onChange={setUnitType}\r\n input={{\r\n value: unitType,\r\n onChange: val => {\r\n setUnitType(val);\r\n setSelectedUnitId('');\r\n }\r\n }}\r\n list={['Accommodation', 'Activity']}\r\n />\r\n {(accommodations.length !== 0 || activities.length !== 0) && (\r\n <SelectDropDown\r\n className={classes.selectInput}\r\n value={selectedUnitId}\r\n placeholder=\"Select\"\r\n onChange={setSelectedUnitId}\r\n items={\r\n unitType === ACCOMMODATION_UNIT_SELECT_TYPE\r\n ? accommodations\r\n : activities\r\n }\r\n />\r\n )}\r\n </div>\r\n <Instructions />\r\n </TabPanel>\r\n </div>\r\n {data && (\r\n <WidgetSettingsForm\r\n color={color}\r\n colorHandler={setColor}\r\n onSubmit={values => widgetSettingSubmit(values)}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n widgetForm: state.form.widgetForm,\r\n businessOwner: state.businessOwner\r\n };\r\n};\r\nconst mapDispatchToProps = dispatch => ({\r\n initializeForm: (form, data) => {\r\n dispatch(initialize(form, data));\r\n }\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WidgetSettings);\r\n","export const prepareReceivedWidgetData = receivedData => {\r\n if (!receivedData) {\r\n return {\r\n color: '',\r\n coverPhoto: {\r\n image: ''\r\n },\r\n languages: [],\r\n selectedUnitId: '',\r\n privacyPolicy: '',\r\n termsAndConditions: ''\r\n };\r\n }\r\n\r\n const languages = [...receivedData.languages].map(item => {\r\n if (item === 'Norway') {\r\n return 'Norwegian';\r\n }\r\n return item;\r\n });\r\n\r\n return {\r\n coverPhoto: { image: receivedData.photo },\r\n color: receivedData.color,\r\n id: receivedData.id,\r\n languages: receivedData.languages ? languages : [],\r\n privacyPolicy: receivedData.privacyPolicy,\r\n termsAndConditions: receivedData.termsAndConditions\r\n };\r\n};\r\n\r\nexport const prepareUnitsDataForSelect = data => {\r\n const accommodations = [];\r\n const activities = [];\r\n if (!data) {\r\n return {};\r\n }\r\n\r\n data.accommodations.forEach(accommodation => {\r\n accommodations.push({\r\n value: accommodation.id,\r\n label: accommodation.title\r\n });\r\n });\r\n\r\n data.activities.forEach(activity => {\r\n activities.push({\r\n value: activity.id,\r\n label: activity.title\r\n });\r\n });\r\n return {\r\n accommodations: accommodations,\r\n activities: activities\r\n };\r\n};\r\n","export const getDataToStore = (data, businessOwnerId) => {\r\n const photoObj = data.coverPhoto.file ? { photo: data.coverPhoto.file } : {};\r\n const idObj = data.id ? { id: parseInt(data.id) } : {};\r\n const businessOwnerIdObj = businessOwnerId\r\n ? { businessOwnerId: businessOwnerId }\r\n : {};\r\n return {\r\n ...photoObj,\r\n widgetSettings: {\r\n ...idObj,\r\n color: data.color,\r\n languages: data.languages,\r\n privacyPolicy: data.privacyPolicy,\r\n termsAndConditions: data.termsAndConditions,\r\n ...businessOwnerIdObj\r\n }\r\n };\r\n};\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%',\r\n \r\n },\r\n toolbar: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n boxShadow: '0px 1px 0px #E5E5E5',\r\n boxSizing: 'border-box',\r\n marginBottom: '5px',\r\n minHeight: '48px',\r\n [theme.breakpoints.down('sm')]: {\r\n flexDirection: 'column',\r\n minHeight: 'auto',\r\n },\r\n },\r\n toolbarLeft: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n minWidth: '200px',\r\n height: '100%',\r\n borderRight: '1px solid #E2EBF6',\r\n boxSizing: 'border-box',\r\n color: '#59758B',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: 'auto',\r\n borderRight: 'none',\r\n borderBottom: '1px solid #E2EBF6',\r\n },\r\n },\r\n toolbarTitle: {\r\n padding: '12px 30px 12px 29px',\r\n fontWeight: 'bold',\r\n fontSize: '18px',\r\n lineHeight: '24px',\r\n color: '#000000',\r\n [theme.breakpoints.down('sm')]: {\r\n padding: '10px 20px',\r\n fontSize: '16px',\r\n }\r\n },\r\n buttonRoot: {\r\n fontSize: '13px',\r\n fontWeight: 'bold',\r\n padding: '3px 20px',\r\n marginLeft: '10px',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '12px',\r\n padding: '12px 15px',\r\n marginBottom : '20px'\r\n \r\n },\r\n },\r\n toolbarRight: {\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n paddingRight: '30px',\r\n [theme.breakpoints.down('sm')]: {\r\n justifyContent: 'center',\r\n paddingRight: '10px',\r\n PaddingBottom : '10px'\r\n }\r\n },\r\n tabsRoot: {\r\n flex: '1 1 auto',\r\n backgroundColor: theme.palette.background.paper,\r\n display: 'flex',\r\n \r\n\r\n },\r\n container: {\r\n display: 'flex',\r\n padding: '20px',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n overflow: 'hidden',\r\n // [theme.breakpoints.down('sm')]: {\r\n // overflowX: 'scroll',\r\n // },\r\n \r\n },\r\n tableCell: {\r\n fontSize: '13px',\r\n border: 'none',\r\n color: '#000000',\r\n padding: 0\r\n },\r\n table: {\r\n width: '100%',\r\n overflow: 'hidden',\r\n [theme.breakpoints.down('sm')]:{\r\n overflowX: 'scroll',\r\n behavior: 'smooth' ,\r\n display: 'block',\r\n width: '100%',\r\n }\r\n },\r\n heading: {\r\n color: '#071B27',\r\n fontWeight: 'bold',\r\n fontSize: '10px',\r\n fontFamily: 'Fira Sans',\r\n textTransform: 'uppercase',\r\n [theme.breakpoints.down('sm')]:{\r\n fontSize: '11px',\r\n }\r\n },\r\n orderIcon: {\r\n icon: {\r\n display: 'none'\r\n }\r\n },\r\n arrowCell: {\r\n padding: '0',\r\n width: '10px!important',\r\n margin: '0'\r\n },\r\n nameCell: {\r\n width: '255px',\r\n fontWeight: 'bold',\r\n paddingLeft: 10,\r\n paddingRight: '20px',\r\n \r\n },\r\n emailCell: {\r\n width: '248px',\r\n paddingRight: '20px',\r\n paddingLeft: 0\r\n },\r\n iconButton: {\r\n padding: '0px 0px 0px 14px',\r\n '&:hover': {\r\n backgroundColor: 'transparent'\r\n }\r\n },\r\n title: {\r\n display: 'inline'\r\n },\r\n closeIcon: {\r\n fontSize: '21px'\r\n },\r\n checkOutCell: {\r\n width: '85px',\r\n paddingLeft: '5px',\r\n paddingRight: '20px'\r\n },\r\n phoneCell: {\r\n width: '120px',\r\n paddingRight: '20px'\r\n },\r\n companyCell: {\r\n width: '200px',\r\n paddingRight: '20px'\r\n },\r\n tableRow: {\r\n height: '42px',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#E2F5F8'\r\n },\r\n \r\n },\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important'\r\n },\r\n\r\n tableHead: {\r\n [theme.breakpoints.down('sm')]: {\r\n '& th:nth-of-type(1)': {\r\n \r\n },\r\n '& th:nth-of-type(2)': {\r\n \r\n },\r\n '& th:nth-of-type(3)': {\r\n \r\n },\r\n '& th:nth-of-type(4)': {\r\n \r\n },\r\n '& th:nth-of-type(5)': {\r\n paddingRight: '20px'\r\n },\r\n '& th:nth-of-type(6)': {\r\n \r\n \r\n },\r\n '& th:nth-of-type(7)': {\r\n \r\n \r\n },\r\n\r\n }\r\n }\r\n\r\n\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useSnackbar } from 'notistack';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\nimport { initialize, updateSyncErrors } from 'redux-form';\r\nimport { connect } from 'react-redux';\r\nimport classNames from 'classnames';\r\n\r\nimport {\r\n IconButton,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow,\r\n Typography\r\n} from '@material-ui/core';\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport {\r\n AppHeader,\r\n BusinessOwnerForm,\r\n CircularLoader,\r\n Pagination\r\n} from 'components';\r\nimport { EditIcon, TrashIcon } from 'components/icons';\r\nimport { EXISTING_BUSINESS_OWNERS } from 'graphql/queries/business-owner';\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\nimport { setCurrentBusinessOwner } from 'actions/businessOwner';\r\nimport {\r\n CREATE_BUSINESS_OWNER,\r\n DELETE_BUSINESS_OWNER,\r\n UPDATE_BUSINESS_OWNER_USER\r\n} from 'graphql/mutations/business-owner';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst headingsConfig = classes => {\r\n return [\r\n {\r\n label: 'Name',\r\n align: 'left',\r\n cellClassName: classes.nameCell\r\n },\r\n {\r\n label: 'Email',\r\n cellClassName: classes.emailCell,\r\n align: 'left',\r\n },\r\n {\r\n label: 'Phone',\r\n cellClassName: classes.unitCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Company name',\r\n align: 'left',\r\n cellClassName: classes.guestsCell\r\n },\r\n {\r\n label: 'Reference prefix',\r\n cellClassName: classes.checkInCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Email notification',\r\n cellClassName: classes.checkInCell,\r\n align: 'left'\r\n },\r\n { label: 'Actions', align: 'right' }\r\n ];\r\n};\r\n\r\nconst BusinessOwners = ({\r\n initializeForm,\r\n updateFormErrors,\r\n setBusinessOwner\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const confirm = React.useContext(ConfirmContext);\r\n const history = useHistory();\r\n\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const [createBusinessOwner] = useMutation(CREATE_BUSINESS_OWNER);\r\n const [deleteBusinessOwner] = useMutation(DELETE_BUSINESS_OWNER);\r\n const [updateBusinessOwner] = useMutation(UPDATE_BUSINESS_OWNER_USER);\r\n\r\n const [page, setPage] = React.useState(0);\r\n const [open, setOpen] = React.useState(false);\r\n const [isUpdate, setIsUpdate] = React.useState(false);\r\n const [loading, setLoading] = React.useState(false);\r\n\r\n const { data, refetch } = useQuery(EXISTING_BUSINESS_OWNERS, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n page: page\r\n }\r\n });\r\n\r\n const openInfoDialog = businessOwner => {\r\n setOpen(true);\r\n initializeForms({\r\n businessOwnerForm: {\r\n ...businessOwner,\r\n selectBusinessOwner: {\r\n 'Select Business Owner': false\r\n },\r\n isNotify: {\r\n Notify: businessOwner?.isNotify || false\r\n }\r\n }\r\n });\r\n };\r\n\r\n const openCreateBusinessOwnerDialog = () => {\r\n initializeForms({\r\n businessOwnerForm: {\r\n selectBusinessOwner: {\r\n 'Select Business Owner': false\r\n },\r\n isNotify: {\r\n Notify: false\r\n }\r\n }\r\n });\r\n setIsUpdate(false);\r\n setOpen(true);\r\n };\r\n\r\n const onCloseHandler = () => {\r\n setOpen(false);\r\n };\r\n\r\n const selectBusinessOwner = data => {\r\n localStorage.setItem('selectedBusinessOwner', JSON.stringify(data));\r\n setBusinessOwner(data);\r\n setTimeout(() => history.go(), 3500);\r\n };\r\n\r\n const onSubmitHandler = values => {\r\n const data = { ...values };\r\n data.isNotify = data.isNotify.Notify;\r\n delete data.selectBusinessOwner;\r\n delete data.referencePrefix;\r\n\r\n if (!isUpdate) {\r\n createBusinessOwner({\r\n variables: { businessOwner: data }\r\n })\r\n .then(data => {\r\n setLoading(true);\r\n enqueueSnackbar(t('Business owner was successfully created!'), {\r\n variant: 'success'\r\n });\r\n refetch();\r\n setOpen(false);\r\n selectBusinessOwner({\r\n ...values,\r\n id: data.data.createBusinessOwner.id\r\n });\r\n })\r\n .catch(error => {\r\n if (\r\n error.message ===\r\n 'GraphQL error: User with this email is already in use'\r\n ) {\r\n updateFormErrors({ email: 'This email is already in use' });\r\n return;\r\n }\r\n\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n });\r\n } else {\r\n delete data.__typename;\r\n updateBusinessOwner({\r\n variables: { businessOwner: data }\r\n }).then(() => {\r\n setLoading(true);\r\n selectBusinessOwner(values);\r\n enqueueSnackbar(t('Business owner was successfully updated!'), {\r\n variant: 'success'\r\n });\r\n refetch();\r\n setOpen(false);\r\n });\r\n }\r\n };\r\n\r\n const initializeForms = initialFormsData => {\r\n Object.keys(initialFormsData).map(field => {\r\n initializeForm(field, initialFormsData[field]);\r\n });\r\n };\r\n\r\n const deleteBusinessOwnerHandler = item => {\r\n confirm({\r\n title: `Delete Business owner?`,\r\n description: `${item.firstName} ${item.lastName}`,\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n }).then(() =>\r\n deleteBusinessOwner({ variables: { businessOwnerId: item.id } }).then(\r\n () => {\r\n enqueueSnackbar(t('Business owner was successfully deleted!'), {\r\n variant: 'success'\r\n });\r\n if (data.businessOwners.length <= 1 && page) {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n } else {\r\n refetch({ page });\r\n }\r\n }\r\n )\r\n );\r\n };\r\n\r\n const onPageChangeHandler = (e, page) => {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n };\r\n\r\n return (\r\n <div className={classes.root}>\r\n <CircularLoader\r\n isLoading={loading}\r\n loaderClassName={classes.loaderClassName}\r\n />\r\n <AppHeader />\r\n <div className={classes.toolbar}>\r\n <div className={classes.toolbarLeft}>\r\n <Typography variant=\"h2\" className={classes.toolbarTitle}>\r\n {t('Business owners')}\r\n </Typography>\r\n </div>\r\n <div className={classes.toolbarRight}>\r\n <Button\r\n variant=\"outlined\"\r\n color=\"primary\"\r\n classes={{ root: classes.buttonRoot }}\r\n onClick={e => {\r\n e.stopPropagation();\r\n openCreateBusinessOwnerDialog();\r\n }}\r\n >\r\n {t('Add Business Owner')}\r\n </Button>\r\n </div>\r\n </div>\r\n <div className={classes.tabsRoot}>\r\n <TableContainer component=\"div\" classes={{ root: classes.container }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead className={classes.tableHead}>\r\n <TableRow>\r\n {headingsConfig(classes).map(heading => (\r\n <TableCell\r\n key={heading.label}\r\n align={heading.align}\r\n style={{ paddingBottom: 15 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.heading,\r\n heading.cellClassName\r\n )}\r\n >\r\n {t(heading.label)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {data &&\r\n data.businessOwners &&\r\n data.businessOwners.map(businessOwner => (\r\n <TableRow\r\n key={businessOwner.id}\r\n classes={{ root: classes.tableRow }}\r\n >\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.nameCell\r\n )}\r\n align=\"left\"\r\n >\r\n {businessOwner.firstName} {businessOwner.lastName}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.emailCell,\r\n )}\r\n align=\"left\"\r\n >\r\n {businessOwner.email}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.phoneCell\r\n )}\r\n align=\"left\"\r\n >\r\n {businessOwner.phoneNumber}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.companyCell\r\n )}\r\n align=\"left\"\r\n >\r\n {businessOwner.companyName}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.referenceCell\r\n )}\r\n align=\"left\"\r\n >\r\n {businessOwner.referencePrefix}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.companyCell\r\n )}\r\n align=\"left\"\r\n >\r\n {businessOwner.isNotify ? 'ON' : 'OFF'}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classes.tableCell}\r\n align=\"right\"\r\n >\r\n <div\r\n style={{ display: 'inline-flex', paddingRight: '10px' }}\r\n >\r\n <IconButton\r\n className={classes.iconButton}\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n aria-label=\"edit\"\r\n onClick={e => {\r\n e.stopPropagation();\r\n setIsUpdate(true);\r\n openInfoDialog(businessOwner);\r\n }}\r\n >\r\n <EditIcon />\r\n </IconButton>\r\n <IconButton\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n className={classes.iconButton}\r\n aria-label=\"delete\"\r\n onClick={e => {\r\n e.stopPropagation();\r\n deleteBusinessOwnerHandler(businessOwner);\r\n }}\r\n >\r\n <TrashIcon />\r\n </IconButton>\r\n </div>\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n {open && (\r\n <BusinessOwnerForm\r\n isUpdate={isUpdate}\r\n onClose={onCloseHandler}\r\n open={open}\r\n onSubmit={values => {\r\n onSubmitHandler(values);\r\n }}\r\n />\r\n )}\r\n </TableBody>\r\n </Table>\r\n\r\n {data && (\r\n <Pagination\r\n page={page + 1}\r\n count={data.numberOfOwnersPages}\r\n onChange={onPageChangeHandler}\r\n amount={data.businessOwners.length}\r\n total={data.businessOwnersOverview.total}\r\n />\r\n )}\r\n </TableContainer>\r\n </div>\r\n </div>\r\n );\r\n};\r\nconst mapStateToProps = state => ({\r\n businessOwnerForm: state.form.businessOwnerForm\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n initializeForm: (form, data) => {\r\n dispatch(initialize(form, data));\r\n },\r\n updateFormErrors: fields => {\r\n dispatch(updateSyncErrors('businessOwnerForm', fields));\r\n },\r\n setBusinessOwner: item => dispatch(setCurrentBusinessOwner(item))\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BusinessOwners);\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n width: '100%',\r\n height: '100%'\r\n },\r\n toolbar: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n boxShadow: '0px 1px 0px #E5E5E5',\r\n boxSizing: 'border-box',\r\n marginBottom: '5px',\r\n minHeight: '48px'\r\n },\r\n toolbarLeft: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n minWidth: '200px',\r\n height: '100%',\r\n borderRight: '1px solid #E2EBF6',\r\n boxSizing: 'border-box',\r\n color: '#59758B'\r\n },\r\n toolbarTitle: {\r\n padding: '12px 30px 12px 29px',\r\n fontWeight: 'bold',\r\n fontSize: '18px',\r\n lineHeight: '24px',\r\n color: '#000000'\r\n },\r\n buttonRoot: {\r\n fontSize: '13px',\r\n fontWeight: 'bold',\r\n padding: '3px 20px',\r\n marginLeft: '10px'\r\n },\r\n toolbarRight: {\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n paddingRight: '30px'\r\n },\r\n tabsRoot: {\r\n flex: '1 1 auto',\r\n backgroundColor: theme.palette.background.paper,\r\n display: 'flex'\r\n },\r\n container: {\r\n display: 'flex',\r\n padding: '20px',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n overflow: 'auto',\r\n width: 'auto',\r\n height: '100%'\r\n },\r\n tableCell: {\r\n fontSize: '13px',\r\n border: 'none',\r\n color: '#000000',\r\n padding: 0\r\n },\r\n table: {\r\n width: '100%',\r\n [theme.breakpoints.down('sm')]:{\r\n overflowX: 'scroll',\r\n display: 'block',\r\n }\r\n },\r\n heading: {\r\n color: '#071B27',\r\n fontWeight: 'bold',\r\n fontSize: '10px',\r\n fontFamily: 'Fira Sans',\r\n textTransform: 'uppercase'\r\n },\r\n orderIcon: {\r\n icon: {\r\n display: 'none'\r\n }\r\n },\r\n arrowCell: {\r\n padding: '0',\r\n width: '10px!important',\r\n margin: '0'\r\n },\r\n nameCell: {\r\n width: '255px',\r\n fontWeight: 'bold',\r\n paddingLeft: 10,\r\n paddingRight: '20px'\r\n },\r\n emailCell: {\r\n width: '248px',\r\n paddingRight: '20px',\r\n paddingLeft: 0\r\n },\r\n iconButton: {\r\n padding: '0px 0px 0px 14px',\r\n '&:hover': {\r\n backgroundColor: 'transparent'\r\n }\r\n },\r\n title: {\r\n display: 'inline'\r\n },\r\n closeIcon: {\r\n fontSize: '21px'\r\n },\r\n checkOutCell: {\r\n width: '85px',\r\n paddingLeft: '5px',\r\n paddingRight: '20px'\r\n },\r\n phoneCell: {\r\n width: '120px',\r\n paddingRight: '20px'\r\n },\r\n companyCell: {\r\n width: '200px',\r\n paddingRight: '20px'\r\n },\r\n tableRow: {\r\n height: '42px',\r\n cursor: 'pointer',\r\n '&:hover': {\r\n backgroundColor: '#E2F5F8'\r\n }\r\n },\r\n loader: {\r\n zIndex: 9999999\r\n },\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\n\r\nimport {\r\n IconButton,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableContainer,\r\n TableHead,\r\n TableRow\r\n} from '@material-ui/core';\r\n\r\nimport { EditIcon, TrashIcon } from '../../components/icons';\r\nimport { Pagination } from '../../components';\r\n\r\nimport { TABLE_HEAD } from './constants';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst EmployeesTable = props => {\r\n const {\r\n data,\r\n openEditUser,\r\n deleteUserHandler,\r\n page,\r\n onPageChangeHandler\r\n } = props;\r\n const [isUpdate, setIsUpdate] = React.useState(false);\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <TableContainer component=\"div\" classes={{ root: classes.container }}>\r\n <Table className={classes.table} aria-label=\"simple table\">\r\n <TableHead>\r\n <TableRow>\r\n {TABLE_HEAD(classes).map(heading => (\r\n <TableCell\r\n key={heading.label}\r\n align={heading.align}\r\n style={{ paddingBottom: 15 }}\r\n className={classNames(\r\n classes.tableCell,\r\n classes.heading,\r\n heading.cellClassName\r\n )}\r\n >\r\n {t(heading.label)}\r\n </TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {data &&\r\n data.businessOwners &&\r\n data.businessOwners.map(user => (\r\n <TableRow key={user.id} classes={{ root: classes.tableRow }}>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.nameCell)}\r\n align=\"left\"\r\n >\r\n {user.firstName} {user.lastName}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.emailCell)}\r\n align=\"left\"\r\n >\r\n {user.email}\r\n </TableCell>\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.phoneCell)}\r\n align=\"left\"\r\n >\r\n {user.phoneNumber}\r\n </TableCell>\r\n \r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classNames(classes.tableCell, classes.phoneCell)}\r\n align=\"left\"\r\n >\r\n {user.isNotify ? 'ON' : 'OFF'}\r\n </TableCell>\r\n\r\n\r\n <TableCell\r\n style={{ paddingBottom: 5, paddingTop: 5 }}\r\n className={classes.tableCell}\r\n align=\"right\"\r\n >\r\n <div style={{ display: 'inline-flex', paddingRight: '10px' }}>\r\n <IconButton\r\n className={classes.iconButton}\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n aria-label=\"edit\"\r\n onClick={e => {\r\n e.stopPropagation();\r\n setIsUpdate(true);\r\n openEditUser(user);\r\n }}\r\n >\r\n <EditIcon />\r\n </IconButton>\r\n <IconButton\r\n disableTouchRipple={true}\r\n disableFocusRipple={true}\r\n className={classes.iconButton}\r\n aria-label=\"delete\"\r\n onClick={e => {\r\n e.stopPropagation();\r\n deleteUserHandler(user);\r\n }}\r\n >\r\n <TrashIcon />\r\n </IconButton>\r\n </div>\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n\r\n {data && (\r\n <Pagination\r\n page={page + 1}\r\n count={data.numberOfOwnersPages}\r\n onChange={(e, page) => onPageChangeHandler(page)}\r\n amount={data.businessOwners.length}\r\n total={data.businessOwnersOverview.total}\r\n />\r\n )}\r\n </TableContainer>\r\n );\r\n};\r\n\r\nexport default EmployeesTable;\r\n","export const TABLE_HEAD = classes => {\r\n return [\r\n {\r\n label: 'Name',\r\n align: 'left',\r\n cellClassName: classes.nameCell\r\n },\r\n {\r\n label: 'Email',\r\n cellClassName: classes.emailCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Phone',\r\n cellClassName: classes.unitCell,\r\n align: 'left'\r\n },\r\n {\r\n label: 'Email notification',\r\n cellClassName: classes.unitCell,\r\n align: 'left'\r\n },\r\n { label: 'Actions', align: 'right' }\r\n ];\r\n};\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\n\r\nimport { connect } from 'react-redux';\r\nimport { initialize, updateSyncErrors } from 'redux-form';\r\n\r\nimport { useSnackbar } from 'notistack';\r\n\r\nimport { Typography, Button } from '@material-ui/core';\r\n\r\nimport { AppHeader, CircularLoader, UserForm } from '../../components';\r\nimport EmployeesTable from './Table';\r\nimport ConfirmContext from '../../contexts/ConfirmContext';\r\n\r\nimport { USER_TYPE } from '../../constants/base';\r\n\r\nimport { EXISTING_BUSINESS_OWNERS } from '../../graphql/queries/business-owner';\r\nimport {\r\n CREATE_BUSINESS_OWNER,\r\n DELETE_BUSINESS_OWNER,\r\n UPDATE_BUSINESS_OWNER_USER\r\n} from '../../graphql/mutations/business-owner';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst Users = props => {\r\n const { initializeForm, businessOwner, updateFormErrors } = props;\r\n\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const confirm = React.useContext(ConfirmContext);\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const [loading, setLoading] = React.useState(false);\r\n const [open, setOpen] = React.useState(false);\r\n const [isUpdate, setIsUpdate] = React.useState(false);\r\n const [page, setPage] = React.useState(0);\r\n\r\n const [createUser] = useMutation(CREATE_BUSINESS_OWNER);\r\n const [deleteUser] = useMutation(DELETE_BUSINESS_OWNER);\r\n const [updateUser] = useMutation(UPDATE_BUSINESS_OWNER_USER);\r\n const { data, refetch } = useQuery(EXISTING_BUSINESS_OWNERS, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n page: page\r\n }\r\n });\r\n\r\n const initializeForms = initialFormsData => {\r\n Object.keys(initialFormsData).forEach(field => {\r\n initializeForm(field, initialFormsData[field]);\r\n });\r\n };\r\n\r\n const openCreateUserDialog = () => {\r\n initializeForms({\r\n usersForm: {\r\n isNotify: {\r\n Notify: false\r\n }\r\n }\r\n \r\n });\r\n setIsUpdate(false);\r\n setOpen(true);\r\n };\r\n\r\n const openEditUser = user => {\r\n setIsUpdate(true);\r\n setOpen(true);\r\n initializeForms({\r\n usersForm: {\r\n ...user,\r\n isNotify: {\r\n Notify: user?.isNotify || false\r\n }\r\n }\r\n });\r\n };\r\n\r\n const deleteUserHandler = item => {\r\n confirm({\r\n title: `Delete user?`,\r\n description: `${item.firstName} ${item.lastName}`,\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n }).then(() => {\r\n deleteUser({ variables: { businessOwnerId: item.id } }).then(() => {\r\n enqueueSnackbar(t('User was successfully deleted!'), {\r\n variant: 'success'\r\n });\r\n if (data.businessOwners.length <= 1 && page) {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n } else {\r\n refetch({ page });\r\n }\r\n });\r\n });\r\n };\r\n\r\n const onPageChangeHandler = page => {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n };\r\n\r\n const showUserError = error => {\r\n if (\r\n error &&\r\n error.message === 'GraphQL error: User with this email is already in use'\r\n ) {\r\n updateFormErrors({ email: 'This email is already in use' });\r\n return;\r\n }\r\n\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n };\r\n\r\n const createUserHandler = data => {\r\n createUser({ variables: { businessOwner: data } })\r\n .then(() => {\r\n if (page) {\r\n refetch({\r\n page: page - 1\r\n });\r\n setPage(page - 1);\r\n } else {\r\n refetch();\r\n }\r\n enqueueSnackbar(t('User was successfully created!'), {\r\n variant: 'success'\r\n });\r\n setOpen(false);\r\n setLoading(false);\r\n refetch();\r\n })\r\n .catch(error => {\r\n setLoading(false);\r\n showUserError(error);\r\n });\r\n };\r\n\r\n const updateUserHandler = data => {\r\n updateUser({ variables: { businessOwner: data } })\r\n .then(() => {\r\n refetch();\r\n enqueueSnackbar(t('User was successfully updated!'), {\r\n variant: 'success'\r\n });\r\n setOpen(false);\r\n setLoading(false);\r\n })\r\n .catch(error => {\r\n setLoading(false);\r\n showUserError(error);\r\n });\r\n };\r\n\r\n const onSubmitHandler = values => {\r\n const data = { ...values };\r\n data.isNotify = data.isNotify.Notify;\r\n setLoading(true);\r\n\r\n if (isUpdate) {\r\n delete data.__typename;\r\n delete data.referencePrefix;\r\n updateUserHandler(data);\r\n } else {\r\n const userData = {\r\n ...values,\r\n ownerId: businessOwner.selectedBusinessOwner.id,\r\n userType: USER_TYPE.employee,\r\n companyName: ''\r\n };\r\n createUserHandler(userData);\r\n }\r\n };\r\n\r\n return (\r\n <div className={classes.root}>\r\n <AppHeader />\r\n\r\n <CircularLoader\r\n isLoading={loading}\r\n className={classes.loader}\r\n loaderClassName={classes.loaderClassName}\r\n />\r\n\r\n <div className={classes.toolbar}>\r\n <div className={classes.toolbarLeft}>\r\n <Typography variant=\"h2\" className={classes.toolbarTitle}>\r\n {t('Users')}\r\n </Typography>\r\n </div>\r\n <div className={classes.toolbarRight}>\r\n <Button\r\n variant=\"outlined\"\r\n color=\"primary\"\r\n classes={{ root: classes.buttonRoot }}\r\n onClick={e => {\r\n e.stopPropagation();\r\n openCreateUserDialog();\r\n }}\r\n >\r\n {t('Add user')}\r\n </Button>\r\n </div>\r\n </div>\r\n\r\n <EmployeesTable\r\n data={data}\r\n openEditUser={openEditUser}\r\n deleteUserHandler={deleteUserHandler}\r\n page={page}\r\n onPageChangeHandler={onPageChangeHandler}\r\n />\r\n\r\n {open && (\r\n <UserForm\r\n isUpdate={isUpdate}\r\n onClose={() => setOpen(false)}\r\n open={true}\r\n onSubmit={onSubmitHandler}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n usersForm: state.form.usersForm,\r\n businessOwner: state.businessOwner\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n initializeForm: (form, data) => {\r\n dispatch(initialize(form, data));\r\n },\r\n updateFormErrors: fields => {\r\n dispatch(updateSyncErrors('usersForm', fields));\r\n }\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Users);\r\n","import React, { useState, useEffect } from 'react';\r\nimport { WIDGET_LINK } from '../../config';\r\n\r\nconst TestWidget = () => {\r\n const [widgetButton, setWidgetButton] = useState('');\r\n\r\n useEffect(() => {\r\n const script = document.createElement('script');\r\n script.src = WIDGET_LINK;\r\n script.async = true;\r\n\r\n document.body.appendChild(script);\r\n }, []);\r\n\r\n const handleChange = e => {\r\n setWidgetButton(e.target.value);\r\n };\r\n\r\n return (\r\n <div>\r\n <textarea\r\n style={{ width: '400px', height: '100px' }}\r\n value={widgetButton}\r\n onChange={handleChange}\r\n placeholder=\"Please insert a widget button\"\r\n />\r\n <div dangerouslySetInnerHTML={{ __html: widgetButton }} />\r\n </div>\r\n );\r\n};\r\n\r\nexport default TestWidget;\r\n","import { makeStyles, useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n '@global': {\r\n '*': {\r\n boxSizing: 'border-box',\r\n },\r\n body: {\r\n margin: 0,\r\n padding: 0,\r\n }\r\n },\r\n root: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n margin: '30px 0',\r\n overflowX: 'hidden', \r\n [theme.breakpoints.down('sm')]: {\r\n margin: '20px 0',\r\n },\r\n [theme.breakpoints.down('xs')]: {\r\n margin: '10px 0',\r\n },\r\n },\r\n container: {\r\n width: '600px',\r\n maxWidth: '100%', \r\n padding: '0 15px', \r\n [theme.breakpoints.down('md')]: {\r\n width: '80%',\r\n },\r\n [theme.breakpoints.down('sm')]: {\r\n width: '90%',\r\n },\r\n [theme.breakpoints.down('xs')]: {\r\n width: '100%',\r\n padding: '0 10px', \r\n },\r\n },\r\n title: {\r\n fontWeight: 'bold',\r\n [theme.breakpoints.down('sm')]: {\r\n fontSize: '1.5rem',\r\n },\r\n [theme.breakpoints.down('xs')]: {\r\n fontSize: '1.2rem',\r\n },\r\n },\r\n paragraph: {\r\n margin: '15px 0',\r\n [theme.breakpoints.down('sm')]: {\r\n margin: '10px 0',\r\n },\r\n [theme.breakpoints.down('xs')]: {\r\n margin: '5px 0',\r\n },\r\n },\r\n listItem: {\r\n marginBottom: '5px',\r\n [theme.breakpoints.down('sm')]: {\r\n marginBottom: '3px',\r\n },\r\n [theme.breakpoints.down('xs')]: {\r\n marginBottom: '2px',\r\n },\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport { AppHeader } from 'components';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst StripeInstruction = () => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <>\r\n <AppHeader />\r\n <div className={classes.root}>\r\n <div className={classes.container}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('How to add Stripe to your website')}\r\n </Typography>\r\n <Typography variant=\"body1\" className={classes.paragraph}>\r\n {t('For configuring the Stripe Payment method')}\r\n </Typography>\r\n <Typography variant=\"body1\">\r\n <ol>\r\n <li className={classes.listItem}>{t('Log into')}</li>\r\n <li className={classes.listItem}>\r\n {t(\r\n \"In the main Dashboard screen, you'll see a menu on the left side.\"\r\n )}\r\n </li>\r\n <li className={classes.listItem}>\r\n {t(\r\n 'While on the API Keys page, click on the View Test Data slider button in the upper righthand corner.'\r\n )}\r\n </li>\r\n <li className={classes.listItem}>\r\n {t(\r\n 'Copy the Publishable Key and Secret Key from the Token column (use test keys for testing purposes and live keys for real payments mode).'\r\n )}\r\n </li>\r\n <li className={classes.listItem}>\r\n {t(\r\n 'Go to the Horn Admin Portal and select Settings on the horizontal navigation bar.'\r\n )}\r\n </li>\r\n <li className={classes.listItem}>\r\n {t(\r\n 'On the Payment Settings page add the new panel and select “Stripe†in the drop-down.'\r\n )}\r\n </li>\r\n <li className={classes.listItem}>\r\n {t(\r\n 'Paste copied Publishable Key and Secret Key values into appropriate fields and Save the page.'\r\n )}\r\n </li>\r\n </ol>\r\n </Typography>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default StripeInstruction;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport useStyles from './styles';\r\nimport { AppHeader } from 'components';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nconst PayPalInstruction = () => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <>\r\n <AppHeader />\r\n <div className={classes.root}>\r\n <div className={classes.container}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {t('How to add PayPal to your website')}\r\n </Typography>\r\n <Typography variant=\"body1\" className={classes.paragraph}>\r\n {t('Prior to configuring the PayPal Payment')}\r\n </Typography>\r\n <Typography variant=\"body1\">\r\n <ol>\r\n <li className={classes.listItem}>{t('Go to https')}</li>\r\n <li className={classes.listItem}>\r\n {t(\r\n 'Navigate to the My Apps & Credentials tab and click the CREATE APP button in the REST API Apps section.'\r\n )}\r\n </li>\r\n <li className={classes.listItem}>\r\n {t(\r\n 'Name the application (this does not impact the integration).'\r\n )}\r\n </li>\r\n <li className={classes.listItem}>\r\n {t(\r\n 'Select “Live†and fill in your PayPal account credentials.'\r\n )}\r\n </li>\r\n <li className={classes.listItem}>\r\n {t('Click the CREATE APP button.')}\r\n </li>\r\n <li className={classes.listItem}>\r\n {t(\r\n 'The App will be created and you can copy the Client ID and Client Secret from this page.'\r\n )}\r\n </li>\r\n <li className={classes.listItem}>\r\n {t(\r\n 'Go to the Horn Admin Portal and select Settings on the horizontal navigation bar.'\r\n )}\r\n </li>\r\n <li className={classes.listItem}>\r\n {t(\r\n 'On the Payment Settings page add the new panel and select “PayPal†in the drop-down.'\r\n )}\r\n </li>\r\n <li className={classes.listItem}>\r\n {t(\r\n 'Paste copied Client ID and Client Secret values into appropriate fields and Save the page.'\r\n )}\r\n </li>\r\n </ol>\r\n </Typography>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default PayPalInstruction;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n photo: {\r\n width: '300px',\r\n height: '160px',\r\n backgroundSize: 'cover',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center',\r\n borderRadius: '3px',\r\n backgroundColor: '#E2F5F8',\r\n marginBottom: '15px'\r\n },\r\n title: {\r\n marginBottom: '10px'\r\n },\r\n description: {\r\n marginBottom: '20px'\r\n },\r\n location: {\r\n display: 'flex',\r\n alignItems: 'end',\r\n marginBottom: '20px'\r\n },\r\n locationIcon: {\r\n fontSize: '20px',\r\n marginRight: '10px'\r\n },\r\n locationText: {\r\n marginTop: '1px'\r\n },\r\n infoDatesTitle: {\r\n marginBottom: '10px'\r\n },\r\n datesItem: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n marginBottom: '10px'\r\n },\r\n infoValue: {\r\n fontWeight: 'normal'\r\n },\r\n datesWrapper: {\r\n marginBottom: '20px'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport LocationOnOutlinedIcon from '@material-ui/icons/LocationOnOutlined';\r\n\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport { BookInfoList } from 'components';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst BookingInformation = ({ data, form }) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n const selectedLanguage = i18n.language;\r\n\r\n const values = form.values;\r\n\r\n const dates = values.dates;\r\n const startDate =\r\n dates && dates.startDate\r\n ? moment(dates.startDate).format('DD.MM.YYYY')\r\n : null;\r\n const endDate =\r\n dates && dates.endDate ? moment(dates.endDate).format('DD.MM.YYYY') : null;\r\n\r\n const startingDate = values.startingDate\r\n ? moment(values.startingDate).format('DD.MM.YYYY')\r\n : null;\r\n const startTime = values.startTime\r\n ? moment(values.startTime.startTime, 'hh:mm').format('H:mm')\r\n : null;\r\n const duration = values.startTime ? values.startTime.duration : null;\r\n const timeType = values.startTime ? values.startTime.timeType : null;\r\n const generalForm = data.generalForm;\r\n const generalFormNorwegian = data['generalForm-Norwegian'];\r\n const descriptionForm = data.descriptionForm;\r\n const descriptionFormNorwegian = data['descriptionForm-Norwegian'];\r\n const checkIn = generalForm.checkInAfter\r\n ? moment(generalForm.checkInAfter).format('H:mm')\r\n : null;\r\n const checkOut = generalForm.checkOutBefore\r\n ? moment(generalForm.checkOutBefore).format('H:mm')\r\n : null;\r\n\r\n const currentLanguageGeneralForm = getFormByCurrentLanguage(\r\n selectedLanguage,\r\n generalForm,\r\n generalFormNorwegian\r\n );\r\n\r\n return (\r\n <>\r\n <div\r\n className={classes.photo}\r\n style={{\r\n backgroundImage: `url(${generalForm.coverPhoto.image})`\r\n }}\r\n >\r\n {''}\r\n </div>\r\n <Typography variant=\"h2\" classes={{ root: classes.title }}>\r\n {currentLanguageGeneralForm.title}\r\n </Typography>\r\n <Typography variant=\"body1\" classes={{ root: classes.description }}>\r\n {\r\n getFormByCurrentLanguage(\r\n selectedLanguage,\r\n descriptionForm,\r\n descriptionFormNorwegian\r\n ).overview\r\n }\r\n </Typography>\r\n\r\n {currentLanguageGeneralForm.location &&\r\n !!currentLanguageGeneralForm.location.length && (\r\n <div className={classes.location}>\r\n <LocationOnOutlinedIcon className={classes.locationIcon} />\r\n <Typography variant=\"body1\" className={classes.locationText}>\r\n {currentLanguageGeneralForm.location}\r\n </Typography>\r\n </div>\r\n )}\r\n\r\n {currentLanguageGeneralForm.startingPoint &&\r\n !!currentLanguageGeneralForm.startingPoint.length && (\r\n <div className={classes.location}>\r\n <LocationOnOutlinedIcon className={classes.locationIcon} />\r\n <Typography variant=\"body1\" className={classes.locationText}>\r\n {currentLanguageGeneralForm.startingPoint}\r\n </Typography>\r\n </div>\r\n )}\r\n\r\n {((startDate && endDate) || startingDate) && (\r\n <div className={classes.datesWrapper}>\r\n <Typography variant=\"h2\" classes={{ root: classes.infoDatesTitle }}>\r\n {t('Your dates')}\r\n </Typography>\r\n\r\n {startDate && endDate && (\r\n <Typography variant=\"h3\" classes={{ root: classes.datesItem }}>\r\n <span>{t('From – To')}:</span>\r\n <span className={classes.infoValue}>\r\n {startDate} – {endDate}\r\n </span>\r\n </Typography>\r\n )}\r\n {checkIn && (\r\n <>\r\n <Typography variant=\"h3\" classes={{ root: classes.datesItem }}>\r\n <span>{t('Check-in')}:</span>\r\n <span className={classes.infoValue}>{checkIn}</span>\r\n </Typography>\r\n <Typography variant=\"h3\" classes={{ root: classes.datesItem }}>\r\n <span>{t('Check-out')}:</span>\r\n <span className={classes.infoValue}>{checkOut}</span>\r\n </Typography>\r\n </>\r\n )}\r\n\r\n {startingDate && (\r\n <Typography variant=\"h3\" classes={{ root: classes.datesItem }}>\r\n <span>{t('Starting date')}:</span>\r\n <span className={classes.infoValue}>{startingDate}</span>\r\n </Typography>\r\n )}\r\n {startTime && (\r\n <Typography variant=\"h3\" classes={{ root: classes.datesItem }}>\r\n <span>{t('Start time')}:</span>\r\n <span className={classes.infoValue}>{startTime}</span>\r\n </Typography>\r\n )}\r\n {duration && (\r\n <Typography variant=\"h3\" classes={{ root: classes.datesItem }}>\r\n <span>{t('Duration')}:</span>\r\n <span className={classes.infoValue}>\r\n {duration} {t(timeType)}\r\n </span>\r\n </Typography>\r\n )}\r\n </div>\r\n )}\r\n\r\n <BookInfoList\r\n activity={data}\r\n currency={values.currency || 'NOK'}\r\n isOverview={false}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport default BookingInformation;\r\n","const PLURAL_PARTICIPANTS = {\r\n Adult: 'Adults',\r\n Children: 'Children',\r\n Senior: 'Seniors',\r\n Teen: 'Teens',\r\n Infant: 'Infants',\r\n Universal: 'Universals',\r\n Person: 'Persons'\r\n};\r\n\r\nexport { PLURAL_PARTICIPANTS };\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n wrapper: {\r\n display: 'flex',\r\n overflowY: 'auto',\r\n padding: '18px 40px 0',\r\n margin: '-18px 0 0',\r\n height: 'calc(100% - 125px)',\r\n ['@media (max-width:1010px)']: {\r\n padding: '18px 0 0 40px',\r\n height: 'calc(100% - 125px)'\r\n },\r\n ['@media (max-width:850px)']: {\r\n padding: '0 0 0 40px',\r\n margin: '0px',\r\n height: 'calc(100% - 64px)'\r\n },\r\n ['@media (max-width:600px)']: {\r\n padding: '0 0 0 15px',\r\n height: 'calc(100% - 102px)'\r\n }\r\n },\r\n leftSide: {\r\n width: '100%',\r\n padding: '0 40px 0 1px',\r\n ['@media (max-width:1010px)']: {\r\n paddingRight: '40px'\r\n },\r\n ['@media (max-width:850px)']: {\r\n marginTop: 0\r\n },\r\n ['@media (max-width:600px)']: {\r\n paddingRight: '15px',\r\n marginTop: 0\r\n }\r\n },\r\n rightSide: {\r\n width: '300px',\r\n minWidth: '300px',\r\n ['@media (max-width:1010px)']: {\r\n display: 'none'\r\n }\r\n },\r\n sectionTitleIndent: {\r\n marginBottom: '20px',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em'\r\n },\r\n accommodationCheckout: {\r\n marginBottom: '15px',\r\n border: '1px solid #E2EBF6',\r\n padding: '10px 15px 0',\r\n borderRadius: '3px'\r\n },\r\n checkoutInfo: {\r\n marginBottom: '10px'\r\n },\r\n generalRow: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n marginBottom: '5px'\r\n },\r\n listTitle: {\r\n color: 'black',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.035em',\r\n marginBottom: '10px'\r\n },\r\n participantRow: {\r\n borderBottom: '1px solid #E2EBF6',\r\n marginBottom: '6px',\r\n paddingBottom: '4px',\r\n '&:last-child': {\r\n border: 0\r\n }\r\n },\r\n bookingColumn: {\r\n flex: '1 1 30%',\r\n '&:nth-child(2)': {\r\n textAlign: 'center'\r\n },\r\n '&:last-child': {\r\n textAlign: 'end'\r\n }\r\n },\r\n totalRow: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n padding: '12px 15px',\r\n marginBottom: '15px',\r\n borderRadius: '3px',\r\n overflow: 'hidden',\r\n position: 'relative',\r\n '&:after': {\r\n position: 'absolute',\r\n display: 'block',\r\n content: '\"\"',\r\n height: '100%',\r\n width: '100%',\r\n left: 0,\r\n top: 0,\r\n background: theme.baseUI.color,\r\n opacity: '.1'\r\n }\r\n },\r\n summaryTitle: {\r\n marginBottom: '15px'\r\n },\r\n currency: {\r\n fontSize: '10px'\r\n },\r\n bookingTitle: {\r\n color: theme.baseUI.color\r\n },\r\n deleteIcon: {\r\n fontSize: '15px',\r\n cursor: 'pointer'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n wrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n height: '42px',\r\n padding: '12px 40px 10px',\r\n ['@media (max-width:600px)']: {\r\n padding: '12px 15px 10px',\r\n flexDirection: 'column-reverse',\r\n alignItems: 'normal',\r\n height: '80px'\r\n }\r\n },\r\n titleSection: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n ['@media (max-width:600px)']: {\r\n flexDirection: 'row-reverse',\r\n justifyContent: 'space-between'\r\n }\r\n },\r\n logo: {\r\n height: '38px',\r\n marginRight: '15px',\r\n ['@media (max-width:600px)']: {\r\n margin: 0\r\n }\r\n },\r\n actions: {\r\n display: 'flex',\r\n // alignItems: 'baseline',\r\n minWidth: '62px',\r\n ['@media (max-width:600px)']: {\r\n justifyContent: 'space-between',\r\n margin: '0 -5px 0 -10px'\r\n }\r\n },\r\n dropdowns: {\r\n display: 'flex'\r\n },\r\n button: {\r\n marginLeft: '10px',\r\n color: '#59758B'\r\n },\r\n cancelIcon: {\r\n fontSize: '18px'\r\n },\r\n selectRoot: {\r\n color: '#59758B'\r\n },\r\n currencySelectRoot: {\r\n color: '#59758B'\r\n },\r\n cancel: {\r\n color: '#59758B',\r\n marginTop: '2px'\r\n },\r\n selectIcon: {\r\n color: '#59758B'\r\n },\r\n dropdownInputBase: {\r\n border: 0,\r\n '&:hover': {\r\n border: 0\r\n }\r\n },\r\n language: {\r\n marginRight: '10px'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { change } from 'redux-form';\r\nimport { connect } from 'react-redux';\r\n\r\nimport { Typography } from '@material-ui/core';\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport CancelOutlinedIcon from '@material-ui/icons/CancelOutlined';\r\n\r\nimport { DropDown } from 'components';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst SHORT_LANGUAGES_OBJ = {\r\n English: 'Eng',\r\n Norway: 'Nor'\r\n};\r\n\r\nconst FULL_LANGUAGES_OBJ = {\r\n Eng: 'English',\r\n Nor: 'Norway'\r\n};\r\n\r\nconst Header = ({\r\n title,\r\n cancelCallback,\r\n widgetForm,\r\n changeFormFieldValue,\r\n initialAvailableCurrencies,\r\n initialSelectedCurrency,\r\n setInitialSelectedCurrency,\r\n initialSelectedLanguage,\r\n setInitialSelectedLanguage,\r\n initialAvailableLanguages,\r\n logo\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const isWidgetForm = !!Object.keys(widgetForm || {}).length;\r\n\r\n const currency = isWidgetForm\r\n ? widgetForm.values.currency || initialSelectedCurrency\r\n : initialSelectedCurrency;\r\n const availableCurrencies =\r\n isWidgetForm && widgetForm.values.availableCurrencies\r\n ? widgetForm.values.availableCurrencies\r\n : initialAvailableCurrencies;\r\n\r\n const languages =\r\n isWidgetForm && widgetForm.values.languages\r\n ? widgetForm.values.languages\r\n : initialAvailableLanguages;\r\n const selectedLanguage =\r\n (isWidgetForm && widgetForm.values.selectedLanguage) ||\r\n initialSelectedLanguage;\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <div className={classes.titleSection}>\r\n {logo && !!logo.length && (\r\n <img src={logo} alt=\"Logo\" className={classes.logo} />\r\n )}\r\n {!!title && <Typography variant=\"h1\">{t(title)}</Typography>}\r\n </div>\r\n <div className={classes.actions}>\r\n <div className={classes.dropdowns}>\r\n {languages && languages.length > 1 && (\r\n <div className={classes.language}>\r\n <DropDown\r\n input={{\r\n value: SHORT_LANGUAGES_OBJ[selectedLanguage],\r\n onChange: e => {\r\n i18n.changeLanguage(FULL_LANGUAGES_OBJ[e.target.value]);\r\n if (!widgetForm || !widgetForm.values.selectedLanguage) {\r\n setInitialSelectedLanguage(\r\n FULL_LANGUAGES_OBJ[e.target.value]\r\n );\r\n return;\r\n }\r\n changeFormFieldValue(\r\n 'selectedLanguage',\r\n FULL_LANGUAGES_OBJ[e.target.value]\r\n );\r\n }\r\n }}\r\n inputBaseClass={classes.dropdownInputBase}\r\n selectRootClass={classes.currencySelectRoot}\r\n selectIconClass={classes.selectIcon}\r\n list={['Eng', 'Nor']}\r\n meta={{}}\r\n />\r\n </div>\r\n )}\r\n {availableCurrencies && (\r\n <DropDown\r\n input={{\r\n value: currency,\r\n onChange: e => {\r\n if (!widgetForm || !widgetForm.values.currency) {\r\n setInitialSelectedCurrency(e.target.value);\r\n return;\r\n }\r\n changeFormFieldValue('currency', e.target.value);\r\n }\r\n }}\r\n inputBaseClass={classes.dropdownInputBase}\r\n selectRootClass={classes.selectRoot}\r\n selectIconClass={classes.selectIcon}\r\n list={availableCurrencies}\r\n meta={{}}\r\n />\r\n )}\r\n </div>\r\n <Button\r\n className={classes.button}\r\n onClick={() => cancelCallback && cancelCallback()}\r\n endIcon={<CancelOutlinedIcon className={classes.cancelIcon} />}\r\n >\r\n <Typography variant=\"body1\" className={classes.cancel}>\r\n {t('Cancel')}\r\n </Typography>\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n widgetForm: state.form.widgetForm\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('widgetForm', field, value));\r\n }\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Header);\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n wrapper: {\r\n margin: '0 0 18px',\r\n padding: '0 40px',\r\n ['@media (max-width:600px)']: {\r\n padding: 0\r\n }\r\n },\r\n defaultMenu: {\r\n ['@media (max-width:850px)']: {\r\n display: 'none'\r\n }\r\n },\r\n tabsRoot: {\r\n borderBottom: '1px solid #e2ebf6',\r\n minHeight: '42px',\r\n overflow: 'visible',\r\n scrollbarWidth: 'none',\r\n\r\n '&::-webkit-scrollbar': {\r\n display: 'none'\r\n }\r\n },\r\n tabsFixed: {\r\n height: '42px',\r\n overflow: 'visible !important'\r\n },\r\n tabNumber: {\r\n width: '18px',\r\n height: '18px',\r\n margin: '2px 12px 2px 2px',\r\n fontSize: '13px',\r\n lineHeight: '13px',\r\n borderRadius: '100px',\r\n boxShadow: 'none',\r\n backgroundColor: theme.baseUI.color,\r\n color: 'white',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n },\r\n doneIcon: {\r\n color: theme.baseUI.color,\r\n fontSize: '22px',\r\n marginRight: '10px'\r\n },\r\n tabLabelWrapper: {\r\n display: 'flex',\r\n alignItems: 'center'\r\n },\r\n tabsIndicator: {\r\n backgroundColor: theme.baseUI.color\r\n },\r\n tab: {\r\n minHeight: '42px',\r\n height: '42px',\r\n padding: '6px 15px',\r\n minWidth: '126px',\r\n overflow: 'visible',\r\n ['@media (max-width:465px)']: {\r\n minWidth: '77px'\r\n }\r\n },\r\n isDoneTab: {\r\n opacity: 1\r\n },\r\n selected: {\r\n fontWeight: 'bold'\r\n },\r\n dateRange: {\r\n width: '210px'\r\n },\r\n dateRangeInput: {\r\n border: 'none !important',\r\n boxShadow: 'none'\r\n },\r\n\r\n search: {\r\n display: 'flex',\r\n height: '76px',\r\n border: '1px solid #E2EBF6',\r\n borderRadius: '3px',\r\n padding: '18px',\r\n marginTop: '10px'\r\n },\r\n searchDate: {\r\n minWidth: '25%',\r\n borderRight: '1px solid #E2EBF6',\r\n marginRight: '15px',\r\n paddingRight: '15px'\r\n },\r\n searchLabel: {\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n margin: '0',\r\n paddingBottom: '4px',\r\n fontWeight: '600',\r\n textTransform: 'capitalize',\r\n cursor: 'pointer'\r\n },\r\n searchInput: {\r\n border: 0,\r\n color: theme.baseUI.color,\r\n fontSize: '15px',\r\n lineHeight: '18px',\r\n fontWeight: '600',\r\n padding: 0,\r\n cursor: 'pointer',\r\n\r\n '&:hover': {\r\n border: 0\r\n },\r\n\r\n '& svg': {\r\n marginLeft: '7px'\r\n },\r\n\r\n ['@media (max-width: 700px)']: {\r\n '& svg': {\r\n display: 'none'\r\n }\r\n }\r\n },\r\n guests: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n width: '100%'\r\n },\r\n guestsField: {\r\n width: '100px',\r\n\r\n ['@media (max-width: 700px)']: {\r\n width: '70px'\r\n }\r\n },\r\n searchBtn: {\r\n border: `1px solid ${theme.baseUI.color}`,\r\n borderRadius: '3px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 600,\r\n color: theme.baseUI.color,\r\n width: '100px',\r\n height: '30px',\r\n\r\n ['@media (max-width: 700px)']: {\r\n width: '30px',\r\n minWidth: '30px',\r\n padding: '5px 5px'\r\n }\r\n },\r\n guestsSelectRoot: {\r\n padding: '0 10px 0 0',\r\n color: theme.baseUI.color,\r\n fontSize: '15px',\r\n lineHeight: '18px',\r\n fontWeight: '600'\r\n },\r\n guestsInputBase: {\r\n border: 0,\r\n '&:hover': {\r\n border: 0\r\n },\r\n '& .MuiSelect-icon': {\r\n color: theme.baseUI.color\r\n }\r\n },\r\n guestsLabel: {\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n margin: '0',\r\n paddingBottom: '4px',\r\n fontWeight: '600',\r\n textTransform: 'capitalize'\r\n }\r\n}));\r\nexport default useStyles;\r\n","import { useLayoutEffect, useState } from 'react';\r\n\r\nconst useWindowSize = () => {\r\n const [size, setSize] = useState([0, 0]);\r\n\r\n useLayoutEffect(() => {\r\n const updateSize = () => {\r\n setSize([window.innerWidth, window.innerHeight]);\r\n };\r\n\r\n window.addEventListener('resize', updateSize);\r\n updateSize();\r\n\r\n return () => window.removeEventListener('resize', updateSize);\r\n }, []);\r\n\r\n return size;\r\n};\r\n\r\nexport default useWindowSize;\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { change, Field, reduxForm } from 'redux-form';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\nimport { connect } from 'react-redux';\r\n\r\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\r\nimport { Typography } from '@material-ui/core';\r\nimport Button from '@material-ui/core/Button';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\n\r\nimport Tabs from '@material-ui/core/Tabs';\r\nimport Tab from '@material-ui/core/Tab';\r\n\r\nimport { MENU, PRODUCTS_MENU } from 'constants/widget';\r\nimport { DropDown, SingleDatePicker } from '../../../../components';\r\n\r\nimport useStyles from './styles';\r\nimport useWindowSize from '../../../../custom-hooks/useWindowSize';\r\n\r\nconst tabProps = index => {\r\n return {\r\n id: `simple-tab-${index}`,\r\n 'aria-controls': `simple-tabpanel-${index}`\r\n };\r\n};\r\n\r\nconst initialValues = {\r\n range: {\r\n startDate: null,\r\n endDate: null\r\n },\r\n numberOfGuests: 0\r\n};\r\n\r\nconst Menu = ({\r\n isFilter,\r\n items,\r\n disabledSteps,\r\n isProductsMenu,\r\n currentIndex,\r\n setIndex,\r\n lastSubmittedFormIndex,\r\n isAccommodationBooking,\r\n widgetForm,\r\n searchOptions,\r\n changeWidgetFormFieldValue,\r\n changeSearchFormFieldValue\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const [isOpenEndDatePicker, setIsOpenEndDatePicker] = React.useState(false);\r\n const [endDateRender, setEndDateRender] = React.useState(null);\r\n\r\n const guests = searchOptions?.values?.numberOfGuests ?? 0;\r\n\r\n const [width] = useWindowSize();\r\n\r\n const handleStartDateChanges = startDate => {\r\n if (startDate) {\r\n changeSearchFormFieldValue('range', {\r\n startDate: startDate,\r\n endDate: null\r\n });\r\n setEndDateRender(startDate);\r\n setTimeout(() => setIsOpenEndDatePicker(true));\r\n }\r\n };\r\n\r\n const handleChange = (event, newIndex) => {\r\n if (!Number.isInteger(newIndex)) return;\r\n setIndex(newIndex);\r\n };\r\n\r\n const isDoneSection = index => {\r\n if (!widgetForm) return false;\r\n if (index === currentIndex && widgetForm.syncErrors) return false;\r\n if (index < lastSubmittedFormIndex) return true;\r\n };\r\n\r\n const search = () => {\r\n changeWidgetFormFieldValue('range', searchOptions.values.range);\r\n changeWidgetFormFieldValue(\r\n 'numberOfGuests',\r\n searchOptions.values.numberOfGuests\r\n );\r\n };\r\n\r\n const isDisabledSearch = () => {\r\n return (\r\n !searchOptions ||\r\n !searchOptions?.values?.range?.startDate ||\r\n !searchOptions?.values?.range?.endDate\r\n );\r\n };\r\n\r\n const getAvailableRange = () => {\r\n if (!endDateRender) return null;\r\n return {\r\n startDate: moment(endDateRender).add(1, 'days'),\r\n endDate: null,\r\n daysOfWeek: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']\r\n };\r\n };\r\n\r\n return (\r\n <div\r\n className={classNames(classes.wrapper, {\r\n [classes.defaultMenu]: !isProductsMenu\r\n })}\r\n >\r\n <Tabs\r\n value={currentIndex}\r\n onChange={handleChange}\r\n aria-label=\"simple tabs example\"\r\n classes={{\r\n root: classes.tabsRoot,\r\n indicator: classes.tabsIndicator,\r\n fixed: classes.tabsFixed\r\n }}\r\n >\r\n {items.map((item, index) => (\r\n <Tab\r\n disabled={disabledSteps && disabledSteps.includes(index)}\r\n key={index}\r\n classes={{\r\n root: classNames(classes.tab, {\r\n [classes.isDoneTab]: !isProductsMenu && isDoneSection(index)\r\n })\r\n }}\r\n label={\r\n <div className={classes.tabLabelWrapper}>\r\n {!isProductsMenu && (\r\n <>\r\n {isDoneSection(index) ? (\r\n <CheckCircleIcon className={classes.doneIcon} />\r\n ) : (\r\n <div className={classes.tabNumber}>{index + 1}</div>\r\n )}\r\n </>\r\n )}\r\n <Typography\r\n variant=\"body1\"\r\n className={classNames({\r\n [classes.selected]: currentIndex === index\r\n })}\r\n >\r\n {item.title === 'Activities | optional' &&\r\n !isAccommodationBooking\r\n ? t('Accommodations | optional')\r\n : t(item.title)}\r\n </Typography>\r\n </div>\r\n }\r\n {...tabProps(index)}\r\n />\r\n ))}\r\n </Tabs>\r\n\r\n {isProductsMenu && isFilter && (\r\n <div className={classes.search}>\r\n <div className={classes.searchDate}>\r\n <Field\r\n id=\"rangeStartDate\"\r\n name=\"range.startDate\"\r\n label=\"Start date\"\r\n isInput={true}\r\n numberOfMonths={1}\r\n daySize={39}\r\n component={SingleDatePicker}\r\n inputLabelClass={classes.searchLabel}\r\n customInputClass={classes.searchInput}\r\n isWidgetSearch={true}\r\n placeholder={width > 700 ? 'Select date' : 'Select'}\r\n onChangeCallback={handleStartDateChanges}\r\n />\r\n </div>\r\n\r\n <div className={classes.searchDate}>\r\n <Field\r\n id=\"rangeEndDate\"\r\n name=\"range.endDate\"\r\n label=\"End date\"\r\n isInput={true}\r\n numberOfMonths={1}\r\n daySize={39}\r\n component={SingleDatePicker}\r\n inputLabelClass={classes.searchLabel}\r\n customInputClass={classes.searchInput}\r\n isWidgetSearch={true}\r\n placeholder={width > 700 ? 'Select date' : 'Select'}\r\n isFocused={isOpenEndDatePicker}\r\n dateRender={endDateRender}\r\n availableRange={getAvailableRange()}\r\n closeCalendarCallback={() => setIsOpenEndDatePicker(false)}\r\n />\r\n </div>\r\n\r\n <div className={classes.guests}>\r\n <div className={classes.guestsField}>\r\n <div className={classes.guestsLabel}>{t('Guests')}</div>\r\n <DropDown\r\n input={{\r\n value: guests || '',\r\n onChange: e => {\r\n changeSearchFormFieldValue(\r\n 'numberOfGuests',\r\n e.target.value\r\n );\r\n }\r\n }}\r\n list={[2, 4, 6, 8, 10]}\r\n inputBaseClass={classes.guestsInputBase}\r\n meta={{}}\r\n selectRootClass={classes.guestsSelectRoot}\r\n placeholder={width > 700 ? 'Select guests' : 'Select'}\r\n />\r\n </div>\r\n\r\n <Button\r\n variant=\"outlined\"\r\n onClick={search}\r\n classes={{\r\n root: classes.searchBtn\r\n }}\r\n disabled={isDisabledSearch()}\r\n >\r\n {width > 700 ? t('Search') : <SearchIcon />}\r\n </Button>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n searchOptions: state.form.searchOptions\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeWidgetFormFieldValue: (field, value) => {\r\n dispatch(change('widgetForm', field, value));\r\n },\r\n changeSearchFormFieldValue: (field, value) => {\r\n dispatch(change('searchOptions', field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'searchOptions',\r\n destroyOnUnmount: true,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(Menu));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n wrapper: {\r\n '&:hover': {\r\n cursor: 'pointer'\r\n }\r\n },\r\n title: {\r\n margin: '0 0 8px'\r\n },\r\n prices: {\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n margin: '0 0 13px',\r\n fontWeight: 'bold'\r\n },\r\n detailsItem: {\r\n display: 'flex',\r\n margin: '0 0 12px'\r\n },\r\n detailsInfo: {\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n margin: '0 0 0 12px'\r\n },\r\n detailsIcon: {\r\n fontSize: '20px'\r\n },\r\n titleBlock: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'baseline',\r\n cursor: 'pointer'\r\n },\r\n arrowRightIcon: {\r\n fontSize: '11px',\r\n marginLeft: '10px'\r\n },\r\n currency: {\r\n color: theme.baseUI.color,\r\n fontWeight: 'bold'\r\n },\r\n pricePerDayWrapper: {\r\n display: 'flex',\r\n flexWrap: 'wrap'\r\n },\r\n pricePerDayTitle: {\r\n display: 'inline-block'\r\n },\r\n photo: {\r\n width: '100%',\r\n height: '148px',\r\n backgroundSize: 'cover',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center',\r\n backgroundColor: '#E2F5F8',\r\n marginBottom: '15px',\r\n ['@media (max-width:735px)']: {\r\n height: '180px'\r\n }\r\n },\r\n infoWrapper: {\r\n padding: '0 15px'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport LocationOnOutlinedIcon from '@material-ui/icons/LocationOnOutlined';\r\nimport PeopleOutlineIcon from '@material-ui/icons/PeopleOutline';\r\nimport HotelOutlinedIcon from '@material-ui/icons/HotelOutlined';\r\nimport ArrowForwardIosIcon from '@material-ui/icons/ArrowForwardIos';\r\n\r\nimport { currencyFormatter } from 'utils/prices/formatter';\r\nimport { getListOfAvailableCurrencies } from 'utils/book-accommodation-and-activity/currency';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst _getPricePerDay = (item, currency, isAvailableEmptyPrice) => {\r\n const classes = useStyles();\r\n\r\n let price = item[currency];\r\n let selectedCurrency = currency;\r\n\r\n if (!parseFloat(item[currency])) {\r\n if (!isAvailableEmptyPrice && !parseFloat(price)) {\r\n ['NOK', 'EUR', 'USD'].map(currency => {\r\n if (!parseFloat(price) && item[currency]) {\r\n price = item[currency];\r\n selectedCurrency = currency;\r\n }\r\n });\r\n }\r\n }\r\n\r\n const value = currencyFormatter(price);\r\n\r\n return (\r\n <span className={classes.currency}>\r\n {' '}\r\n {selectedCurrency} {value}\r\n </span>\r\n );\r\n};\r\n\r\nconst DailyPrices = ({\r\n days,\r\n isMultipleDays,\r\n initialSelectedCurrency,\r\n isAvailableEmptyPrice\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const isPricePerDay = !!(days?.[0]?.day && !days[0].categories);\r\n\r\n return (\r\n <div className={isPricePerDay ? classes.pricePerDayWrapper : null}>\r\n {days?.map((item, index, row) => {\r\n const days = isMultipleDays ? item.days : [item.day];\r\n\r\n if (item.categories) {\r\n return (\r\n <div key={index}>\r\n <Typography variant=\"h3\">\r\n {days.map((day, index) => `${index ? ',' : ''} ${t(day)}`)}\r\n </Typography>\r\n {item.categories.map((category, index) => {\r\n const { price, currency } = getPrice(\r\n category,\r\n initialSelectedCurrency,\r\n isAvailableEmptyPrice\r\n );\r\n const isLastItem = index === item.categories.length - 1;\r\n return (\r\n <span key={index}>\r\n {category.participant === 'Universal'\r\n ? (category.participant = t('Person'))\r\n : t(category.participant)}{' '}\r\n <span className={classes.currency}>\r\n {currency} {price}\r\n </span>{' '}\r\n {!isLastItem && `• `}\r\n </span>\r\n );\r\n })}\r\n </div>\r\n );\r\n }\r\n\r\n const isLastItem = index === row.length - 1;\r\n\r\n if (item.day) {\r\n return (\r\n <div key={index}>\r\n <Typography variant=\"h3\" className={classes.pricePerDayTitle}>\r\n {t(item.day)}:{' '}\r\n </Typography>\r\n {_getPricePerDay(\r\n item,\r\n initialSelectedCurrency,\r\n isAvailableEmptyPrice\r\n )}\r\n {!isLastItem && <span> • </span>}\r\n </div>\r\n );\r\n }\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nexport const Prices = ({\r\n prices,\r\n pricesType,\r\n scheduleType,\r\n initialSelectedCurrency,\r\n isAvailableEmptyPrice\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const isAccommodation = !scheduleType;\r\n\r\n switch (pricesType) {\r\n case 'pricesFixedForm': {\r\n const { price, currency } = getPrice(\r\n prices,\r\n initialSelectedCurrency,\r\n isAvailableEmptyPrice\r\n );\r\n if (scheduleType === 'schedulePassForm' || isAccommodation) {\r\n return (\r\n <div className={classes.currency}>\r\n {currency} {price}\r\n </div>\r\n );\r\n } else {\r\n return (\r\n <div>\r\n {prices?.days?.map((item, index) => (\r\n <div key={index}>\r\n <Typography variant=\"h3\">\r\n {item.days.map(\r\n (day, index) => `${index ? ',' : ''} ${t(day)}`\r\n )}\r\n </Typography>\r\n <Typography variant=\"body1\" className={classes.currency}>\r\n {currency} <span>{currencyFormatter(item[currency])}</span>\r\n </Typography>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n }\r\n }\r\n case 'pricesDailyForm': {\r\n const days = prices?.days;\r\n return (\r\n <DailyPrices\r\n days={days}\r\n initialSelectedCurrency={initialSelectedCurrency}\r\n isAvailableEmptyPrice={isAvailableEmptyPrice}\r\n />\r\n );\r\n }\r\n case 'pricesDailyScheduleForm': {\r\n const days = prices?.daysArray;\r\n return (\r\n <DailyPrices\r\n days={days}\r\n isMultipleDays={true}\r\n initialSelectedCurrency={initialSelectedCurrency}\r\n isAvailableEmptyPrice={isAvailableEmptyPrice}\r\n />\r\n );\r\n }\r\n case 'pricesCategoryForm':\r\n case 'pricesEqualForm': {\r\n if (!prices?.categories?.length) return null;\r\n\r\n return (\r\n <div>\r\n {prices.categories.map((item, index) => {\r\n const { price, currency } = getPrice(\r\n item,\r\n initialSelectedCurrency,\r\n isAvailableEmptyPrice\r\n );\r\n const isLastItem = index === prices.categories.length - 1;\r\n return (\r\n <span key={index}>\r\n {item.participant === 'Universal'\r\n ? (item.participant = t('Person'))\r\n : t(item.participant)}\r\n :{' '}\r\n <span className={classes.currency}>\r\n {currency} {price}\r\n </span>{' '}\r\n {!isLastItem && `• `}\r\n </span>\r\n );\r\n })}\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst getPrice = (prices, initialSelectedCurrency, isAvailableEmptyPrice) => {\r\n let initialCurrency = initialSelectedCurrency;\r\n let price = prices[initialSelectedCurrency];\r\n\r\n if (!isAvailableEmptyPrice && !parseFloat(price)) {\r\n ['NOK', 'EUR', 'USD'].map(currency => {\r\n if (!parseFloat(price) && prices[currency]) {\r\n price = prices[currency];\r\n initialCurrency = currency;\r\n }\r\n });\r\n }\r\n\r\n return {\r\n price: currencyFormatter(price),\r\n currency: initialCurrency\r\n };\r\n};\r\n\r\nconst ProductShortInfo = ({\r\n item,\r\n initialSelectedCurrency,\r\n isPrices,\r\n isBedDetails,\r\n titleClass,\r\n isRightArrow,\r\n selectProduct\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n const selectedLanguage = i18n.language;\r\n\r\n const onSelectHandler = () => {\r\n const listOfAvailableCurrencies = getListOfAvailableCurrencies(item.prices);\r\n\r\n selectProduct &&\r\n selectProduct({\r\n ...item,\r\n listOfAvailableCurrencies: listOfAvailableCurrencies\r\n });\r\n };\r\n\r\n const getFieldByCurrentLanguage = field => {\r\n if (selectedLanguage === 'Norway' && item[`${field}No`]) {\r\n return item[`${field}No`];\r\n }\r\n\r\n return item[field];\r\n };\r\n\r\n return (\r\n <div onClick={() => onSelectHandler(item)} className={classes.wrapper}>\r\n <div\r\n className={classes.photo}\r\n style={{ backgroundImage: `url(${item.photo})` }}\r\n >\r\n {''}\r\n </div>\r\n\r\n <div className={classes.infoWrapper}>\r\n <div className={classes.titleBlock}>\r\n <Typography\r\n variant=\"h2\"\r\n classes={{ root: classNames(classes.title, titleClass) }}\r\n >\r\n {getFieldByCurrentLanguage('title')}\r\n </Typography>\r\n {isRightArrow && (\r\n <ArrowForwardIosIcon className={classes.arrowRightIcon} />\r\n )}\r\n </div>\r\n {isPrices && (\r\n <div className={classes.prices}>\r\n <Prices\r\n prices={item[item.pricesType]}\r\n pricesType={item.pricesType}\r\n scheduleType={item.scheduleType}\r\n initialSelectedCurrency={initialSelectedCurrency}\r\n />\r\n </div>\r\n )}\r\n <div>\r\n <div className={classes.detailsItem}>\r\n <LocationOnOutlinedIcon className={classes.detailsIcon} />\r\n <div className={classes.detailsInfo}>{item.location}</div>\r\n </div>\r\n <div className={classes.detailsItem}>\r\n <PeopleOutlineIcon className={classes.detailsIcon} />\r\n <div className={classes.detailsInfo}>\r\n {item.guestsNumber} {t('Guests')}\r\n </div>\r\n </div>\r\n {isBedDetails && !!item.bedDetails.length && (\r\n <div className={classes.detailsItem}>\r\n <HotelOutlinedIcon className={classes.detailsIcon} />\r\n <div className={classes.detailsInfo}>\r\n {item.bedDetails.join(' • ')}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ProductShortInfo;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n wrapper: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'space-around',\r\n padding: '15px 40px 0',\r\n margin: '-18px 0 0',\r\n overflow: 'auto',\r\n maxHeight: 'calc(100% - 160px)',\r\n ['@media (max-width:600px)']: {\r\n padding: '25px 15px 0',\r\n height: 'calc(100% - 188px)',\r\n maxHeight: 'none'\r\n }\r\n },\r\n afterElement: {\r\n flex: '0 0 285px',\r\n margin: '0 8px'\r\n },\r\n item: {\r\n width: '283px',\r\n border: '1px solid #e2ebf6',\r\n borderRadius: '3px',\r\n overflow: 'hidden',\r\n margin: '0 8px 30px',\r\n ['@media (max-width:735px)']: {\r\n width: '345px'\r\n }\r\n },\r\n photo: {\r\n width: '100%',\r\n height: '148px',\r\n backgroundSize: 'cover',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center',\r\n backgroundColor: '#E2F5F8',\r\n marginBottom: '15px',\r\n ['@media (max-width:735px)']: {\r\n height: '180px'\r\n }\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { Waypoint } from 'react-waypoint';\r\n\r\nimport ProductShortInfo from '../product-short-info/ProductShortInfo';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst GeneralAccommodationsList = ({ accommodations, page, fetchData, perPage, selectProduct, initialSelectedCurrency }) => {\r\n const classes = useStyles();\r\n\r\n if (!accommodations?.length) return null;\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n {accommodations.map((item, index) => (\r\n <div className={classes.item} key={index}>\r\n <div>\r\n <ProductShortInfo\r\n item={item}\r\n initialSelectedCurrency={initialSelectedCurrency}\r\n isPrices={true}\r\n isRightArrow={true}\r\n selectProduct={selectProduct}\r\n />\r\n </div>\r\n {(page < perPage) && (index === accommodations.length - 2) && (\r\n <Waypoint onEnter={() => fetchData(page + 1)} />\r\n )}\r\n </div>\r\n ))}\r\n <div className={classes.afterElement}>{''}</div>\r\n <div className={classes.afterElement}>{''}</div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default GeneralAccommodationsList;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n wrapper: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'space-around',\r\n padding: '15px 40px 0',\r\n margin: '-18px 0 0',\r\n overflow: 'auto',\r\n maxHeight: 'calc(100% - 160px)',\r\n ['@media (max-width:600px)']: {\r\n padding: '25px 15px 0',\r\n height: 'calc(100% - 188px)',\r\n maxHeight: 'none'\r\n }\r\n },\r\n afterElement: {\r\n flex: '0 0 285px',\r\n margin: '0 8px'\r\n },\r\n item: {\r\n width: '283px',\r\n border: '1px solid #e2ebf6',\r\n borderRadius: '3px',\r\n overflow: 'hidden',\r\n margin: '0 8px 30px',\r\n ['@media (max-width:735px)']: {\r\n width: '345px'\r\n }\r\n },\r\n photo: {\r\n width: '100%',\r\n height: '148px',\r\n backgroundSize: 'cover',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center',\r\n backgroundColor: '#E2F5F8',\r\n marginBottom: '15px',\r\n ['@media (max-width:735px)']: {\r\n height: '180px'\r\n }\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { Waypoint } from 'react-waypoint';\r\n\r\nimport ProductShortInfo from '../product-short-info/ProductShortInfo';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst GeneralActivitiesList = ({\r\n activities,\r\n selectProduct,\r\n initialSelectedCurrency,\r\n page,\r\n perPage,\r\n fetchData,\r\n}) => {\r\n const classes = useStyles();\r\n\r\n if (!activities?.length) return null;\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n {activities.map((item, index) => (\r\n <div key={item.id} className={classes.item}>\r\n <div>\r\n <ProductShortInfo\r\n item={item}\r\n initialSelectedCurrency={initialSelectedCurrency}\r\n isPrices={true}\r\n isRightArrow={true}\r\n selectProduct={selectProduct}\r\n />\r\n </div>\r\n {(page < perPage) && (index === activities.length - 2) && (\r\n <Waypoint onEnter={() => fetchData(page + 1)} />\r\n )}\r\n </div>\r\n ))}\r\n <div className={classes.afterElement}>{''}</div>\r\n <div className={classes.afterElement}>{''}</div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default GeneralActivitiesList;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n wrapper: {\r\n display: 'flex',\r\n height: 'calc(100% - 75px)',\r\n padding: '10px 40px 0',\r\n ['@media (max-width:760px)']: {\r\n flexDirection: 'column',\r\n overflow: 'auto',\r\n padding: '10px 15px 0'\r\n },\r\n ['@media (max-width:600px)']: {\r\n height: 'calc(100% - 112px)'\r\n }\r\n },\r\n leftSide: {\r\n width: '300px',\r\n minWidth: '300px',\r\n height: '100%',\r\n marginRight: '40px',\r\n overflow: 'auto',\r\n ['@media (max-width:760px)']: {\r\n width: '345px',\r\n minWidth: '345px',\r\n height: 'auto',\r\n marginBottom: '10px',\r\n overflow: 'visible'\r\n }\r\n },\r\n rightSide: {\r\n width: '100%',\r\n height: '100%',\r\n overflowX: 'hidden',\r\n overflowY: 'auto',\r\n ['@media (max-width:760px)']: {\r\n height: 'auto',\r\n overflow: 'visible'\r\n }\r\n },\r\n photo: {\r\n height: '160px',\r\n backgroundSize: 'cover',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center',\r\n backgroundColor: '#E2F5F8',\r\n marginBottom: '15px'\r\n },\r\n title: {\r\n marginBottom: '15px'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\n\r\nimport { BookInfoList } from 'components';\r\n\r\nimport ProductShortInfo from '../product-short-info/ProductShortInfo';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst ProductInfo = ({ product, initialSelectedCurrency }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <div className={classes.leftSide}>\r\n <ProductShortInfo\r\n item={product}\r\n titleClass={classes.title}\r\n isBedDetails={true}\r\n />\r\n </div>\r\n <div className={classes.rightSide}>\r\n <BookInfoList\r\n activity={product}\r\n isWithoutDescriptionForm={true}\r\n currency={initialSelectedCurrency}\r\n defaultExpanded={false}\r\n firstDefaultExpanded={true}\r\n isOverview={true}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default ProductInfo;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n sectionTitleIndent: {\r\n marginBottom: '20px'\r\n },\r\n wrapper: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'space-between',\r\n width: '100%'\r\n },\r\n item: {\r\n flex: '0 0 47%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n borderBottom: '1px solid #e2ebf6',\r\n paddingBottom: '15px',\r\n marginBottom: '15px',\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 'bold'\r\n },\r\n currency: {\r\n fontSize: '10px',\r\n marginRight: '3px'\r\n },\r\n field: {\r\n width: '70px',\r\n transition: 'transform 0.3s ease',\r\n outline: 'none',\r\n [theme.breakpoints.down('sm')]: {\r\n transform: (props) => (props.isZoomed ? 'scale(1.6)' : 'scale(1)'),\r\n marginRight: '20px'\r\n },\r\n },\r\n itemColumn: {\r\n display: 'flex',\r\n width: '70px',\r\n minWidth: '70px',\r\n alignItems: 'baseLine',\r\n justifyContent: 'flex-start',\r\n '&:nth-child(3n+3)': {\r\n justifyContent: 'flex-end',\r\n width: '80px',\r\n minWidth: '80px'\r\n },\r\n '&:nth-child(3n+2)': {\r\n justifyContent: 'center',\r\n width: 'auto',\r\n minWidth: 'auto'\r\n }\r\n },\r\n currencyColumn: {\r\n color: theme.baseUI.color\r\n },\r\n error: {\r\n margin: '0 0 10px'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Field } from 'redux-form';\r\nimport classNames from 'classnames';\r\n\r\nimport { Typography } from '@material-ui/core';\r\nimport FormHelperText from '@material-ui/core/FormHelperText';\r\n\r\nimport { currencyFormatter } from 'utils/prices/formatter';\r\n\r\nimport { Input } from 'components';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst Errors = ({ submitFailed, error }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n if (!submitFailed || !error) return null;\r\n\r\n const exceedError = error.indexOf('The number of Guests can’t exceed') === 0;\r\n\r\n if (exceedError) {\r\n const errorSplit = error.split(' ');\r\n const errorLength = errorSplit.length;\r\n const staticError = errorSplit.slice(0, -1).join(' ');\r\n return (\r\n <FormHelperText className={classNames(classes.error)} error>\r\n {t(staticError, { number: errorSplit[errorLength - 1] })}\r\n </FormHelperText>\r\n );\r\n }\r\n\r\n return (\r\n <FormHelperText className={classNames(classes.error)} error>\r\n {t(error)}\r\n </FormHelperText>\r\n );\r\n};\r\n\r\nexport const Visitors = ({\r\n fields,\r\n title,\r\n wrapperClass,\r\n itemClass,\r\n titleClass,\r\n currency,\r\n meta: { submitFailed, error }\r\n}) => {\r\n\r\n const [t] = useTranslation();\r\n const [isZoomed, setIsZoomed] = useState(false);\r\n const classes = useStyles({ isZoomed });\r\n\r\n const handleFocus = () => {\r\n setIsZoomed(true); \r\n};\r\n\r\nconst handleBlur = () => {\r\n setIsZoomed(false); \r\n};\r\n\r\n\r\n if (!fields.length) return null;\r\n\r\n return (\r\n <div className={wrapperClass}>\r\n <Typography\r\n variant=\"h3\"\r\n classes={{\r\n root: classNames(classNames(classes.sectionTitleIndent, titleClass))\r\n }}\r\n >\r\n {t(title)}\r\n </Typography>\r\n <div className={classes.wrapper}>\r\n {fields.map((field, index) => {\r\n const item = fields.get(index);\r\n const price = `${currencyFormatter(item[currency])}`;\r\n\r\n return (\r\n <div className={classNames(classes.item, itemClass)} key={index}>\r\n {item.participant && (\r\n <div className={classes.itemColumn}>\r\n {item.participant === 'Universal'\r\n ? (item.participant = t('Person'))\r\n : t(item.participant)}{' '}\r\n </div>\r\n )}\r\n <div\r\n className={classNames(\r\n classes.itemColumn,\r\n classes.currencyColumn\r\n )}\r\n >\r\n <span className={classes.currency}>{currency}</span> {price}\r\n </div>\r\n <div className={classes.itemColumn}>\r\n <Field\r\n name={`${field}.participants`}\r\n isOnlyNumber={true}\r\n maxLength={9}\r\n isHiddenErrorMsg={true}\r\n className={`${classes.field} ${isZoomed ? 'zoomed' : ''}`} \r\n component={Input}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur} \r\n />\r\n \r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n <Errors error={error} submitFailed={submitFailed} />\r\n </div>\r\n );\r\n};\r\n\r\nexport default Visitors;\r\n","import moment from 'moment';\r\n\r\nconst SCHEDULE_DATE_NO_TIME_NAME = 'scheduleDateForm';\r\nconst SCHEDULE_PASS_NAME = 'schedulePassForm';\r\n\r\nconst validate = (values, props) => {\r\n const errors = {};\r\n\r\n const { isAccommodationBooking, productData } = props;\r\n\r\n if (!isAccommodationBooking) {\r\n const scheduleType = productData.scheduleType;\r\n if (\r\n scheduleType === SCHEDULE_DATE_NO_TIME_NAME &&\r\n (!values.multiDates || !values.multiDates.startDate)\r\n ) {\r\n errors.multiDates = 'Starting date is required';\r\n } else if (scheduleType !== SCHEDULE_PASS_NAME && !values.startingDate) {\r\n errors.startingDate = 'Starting date is required';\r\n }\r\n } else {\r\n if (!values.dates || !values.dates.startDate || !values.dates.endDate) {\r\n errors.dates = 'Dates are required';\r\n } else if (\r\n moment(values.dates.endDate).diff(values.dates.startDate, 'days') <\r\n values.minNights\r\n ) {\r\n errors.dates = {\r\n text: 'The number of nights cannot be less than',\r\n variables: { number: values.minNights }\r\n };\r\n }\r\n }\r\n\r\n if (values.participants && values.participants.length) {\r\n let participantsArrayErrors = [];\r\n let isValidParticipants = false;\r\n\r\n values.participants.forEach((item, index) => {\r\n if (item.participants && parseInt(item.participants) > 0) {\r\n isValidParticipants = true;\r\n }\r\n\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (!isValidParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: 'Value for at least one category should be filled in'\r\n };\r\n }\r\n }\r\n\r\n if (\r\n !errors.participants &&\r\n values.participants &&\r\n values.participants.length\r\n ) {\r\n const availableParticipants = values.startTime\r\n ? values.startTime.seatsLeft\r\n : values.maxParticipants;\r\n const participantsArrayErrors = [];\r\n let totalParticipants = 0;\r\n\r\n values.participants.forEach((item, index) => {\r\n if (item.participants && item.participants.length) {\r\n totalParticipants += parseInt(item.participants);\r\n }\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (totalParticipants > availableParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: `The number of Guests can’t exceed ${availableParticipants}`\r\n };\r\n } else if (\r\n productData.generalForm?.minParticipants && totalParticipants < Number(productData.generalForm.minParticipants)\r\n ) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: `The number of Guests can’t be less than ${productData.generalForm.minParticipants}`\r\n };\r\n }\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n wrapper: {\r\n position: 'relative',\r\n display: 'flex',\r\n padding: '18px 40px 0',\r\n margin: '-18px 0 0',\r\n height: 'calc(100% - 125px)',\r\n overflowY: 'auto',\r\n overflowX: 'hidden',\r\n ['@media (max-width:1010px)']: {\r\n padding: '18px 0 0 40px',\r\n height: 'calc(100% - 125px)'\r\n },\r\n ['@media (max-width:850px)']: {\r\n padding: '0 0 0 40px',\r\n margin: '0px',\r\n height: 'calc(100% - 64px)'\r\n },\r\n ['@media (max-width:600px)']: {\r\n padding: '0 0 0 15px',\r\n height: 'calc(100% - 102px)'\r\n }\r\n },\r\n leftSide: {\r\n width: '618px',\r\n padding: '0 54px 0 1px',\r\n ['@media (max-width:1010px)']: {\r\n width: '100%',\r\n padding: '18px 40px 0 1px'\r\n },\r\n ['@media (max-width:850px)']: {\r\n marginTop: 0\r\n },\r\n ['@media (max-width:600px)']: {\r\n paddingRight: '15px',\r\n marginTop: 0\r\n }\r\n },\r\n rightSide: {\r\n width: '300px',\r\n minWidth: '300px',\r\n ['@media (max-width:1010px)']: {\r\n display: 'none'\r\n }\r\n },\r\n dateRange: {\r\n margin: '15px 0',\r\n width: '561px',\r\n ['@media (max-width:1010px)']: {\r\n margin: '0 0 15px'\r\n },\r\n ['@media (max-width:700px)']: {\r\n width: '292px'\r\n },\r\n ['@media (max-width:600px)']: {\r\n width: '332px'\r\n }\r\n },\r\n participant: {\r\n minWidth: '227px',\r\n ['@media (max-width:600px)']: {\r\n minWidth: '100%'\r\n }\r\n },\r\n disableInputFocus: {\r\n display: 'none'\r\n },\r\n sectionTitleIndent: {\r\n marginBottom: '20px'\r\n },\r\n startTimeLabel: {\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 'bold',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em',\r\n marginBottom: '0'\r\n },\r\n startTimeClass: {\r\n fontSize: '13px'\r\n },\r\n startTimeWrapper: {\r\n margin: '25px 0'\r\n },\r\n label: {\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em'\r\n },\r\n loaderWrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n },\r\n loaderClassName: {\r\n width: `80px !important`,\r\n height: `80px !important`,\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { CircularLoader } from '../../../../components';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const WidgetLoader = ({ loading }) => {\r\n const classes = useStyles();\r\n\r\n return (\r\n <CircularLoader\r\n isLoading={!!loading}\r\n loaderClassName={classes.loaderClassName}\r\n className={classes.loaderWrapper}\r\n />\r\n );\r\n}\r\n\r\nconst useStyles = makeStyles({\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important'\r\n },\r\n loaderWrapper: {\r\n position: 'fixed'\r\n },\r\n tabPanel: {\r\n height: '100%'\r\n }\r\n});\r\n\r\nexport default WidgetLoader;\r\n","import React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\r\nimport moment from 'moment';\r\nimport { useQuery } from '@apollo/react-hooks';\r\nimport { connect } from 'react-redux';\r\nimport { change, Field, FieldArray, reduxForm } from 'redux-form';\r\n\r\nimport { BOOK_DATES } from 'graphql/queries/accommodations';\r\nimport { ACTIVITIES_AVAILABLE_PARTICIPANTS } from 'graphql/queries/activities';\r\n\r\nimport StartTimeAndDurationRadioButtonsGroup from 'pages/book-activity/components/start-time-and-duration-radio-buttons-group/StartTimeAndDurationRadioButtonsGroup';\r\n\r\nimport { getListOfAvailableCurrencies } from 'utils/book-accommodation-and-activity/currency';\r\nimport { getParticipants as getAccommodationParticipants } from 'utils/book-accommodation/prepareParticipants';\r\nimport { getParticipants as getActivityParticipants } from 'utils/book-activity/prepareParticipants';\r\nimport {\r\n getAvailableRangeDates as getAccommodationAvailableRangeDates,\r\n getDisabledDates as getAccommodationDisabledDates\r\n} from 'utils/book-accommodation/availableDates';\r\nimport {\r\n getAvailableRangeDates as getActivityAvailableRangeDates,\r\n getDefaultStartTime,\r\n getDisabledDates as getActivityDisabledDates,\r\n getListOfStartTimeAndDuration,\r\n getListOfStartTimeAndDurationByCutoffPeriod\r\n} from 'utils/book-activity/availableDates';\r\nimport {\r\n getAvailableParticipantsForStartTime,\r\n getMaxParticipants,\r\n getMaxParticipantsActivitySeveralDays\r\n} from 'utils/book-activity/maxParticipants';\r\nimport { getReceivedActivityBookingsDates } from 'utils/accommodations-and-activities/prepareReceivedActivityData';\r\n\r\nimport { CustomDateRangePicker, MultiDatePickerCalendar, SingleDatePicker } from 'components';\r\n\r\nimport BookingInformation from '../booking-information/BookingInformation';\r\nimport Visitors from '../visiters/Visiters';\r\n\r\nimport validate from './validate';\r\n\r\nimport useStyles from './styles';\r\nimport WidgetLoader from '../widget-loader/WidgetLoader';\r\n\r\nconst initialValues = {\r\n startBookingsDate: moment(),\r\n dates: null,\r\n startingDate: null,\r\n participants: [],\r\n currency: null,\r\n availableCurrencies: [],\r\n maxParticipants: 0,\r\n addOns: [],\r\n mandatoryFees: [],\r\n activities: [],\r\n languages: [],\r\n selectedLanguage: 'English',\r\n minNights: 1\r\n};\r\n\r\nconst SCHEDULE_DATE_AND_TIME_NAME = 'scheduleDateTimeForm';\r\nconst SCHEDULE_PASS_NAME = 'schedulePassForm';\r\nconst SCHEDULE_DATE_NO_TIME_NAME = 'scheduleDateForm';\r\n\r\nconst DateAndGuests = ({\r\n isAccommodationBooking,\r\n initialSelectedCurrency,\r\n initialSelectedLanguage,\r\n productData,\r\n receivedProduct,\r\n changeFormFieldValue,\r\n widgetForm,\r\n handleSubmit,\r\n ownerId,\r\n languages,\r\n activityDisabledDates\r\n}) => {\r\n const classes = useStyles();\r\n const productId = productData.generalForm.id;\r\n const scheduleType = productData.scheduleType;\r\n\r\n const dates = widgetForm.values.dates;\r\n const startDate = dates && dates.startDate;\r\n\r\n const [listStartTimeAndDuration, setListStartTimeAndDuration] = useState([]);\r\n const [isUpdate, setIsUpdate] = useState(false);\r\n const [calendarFirstDate, setCalendarFirstDate] = useState(null);\r\n const [availableParticipantsData, setAvailableParticipantsData] = useState(null);\r\n const [windowWidth, setWindowWidth] = useState(window.innerWidth);\r\n const bottomRef = useRef(null);\r\n\r\n useEffect(() => {\r\n if (widgetForm.values.dates?.startDate && widgetForm.values.dates?.endDate) {\r\n setTimeout(() => {\r\n bottomRef.current.scrollIntoView({ behavior: \"smooth\" })\r\n }, 0)\r\n }\r\n }, [widgetForm.values.dates])\r\n\r\n useEffect(() => {\r\n if (widgetForm?.submitFailed && widgetForm?.syncErrors?.participants?._error) {\r\n setTimeout(() => {\r\n bottomRef.current.scrollIntoView({ behavior: \"smooth\" })\r\n }, 0)\r\n }\r\n }, [widgetForm?.syncErrors?.participants?._error, widgetForm?.submitFailed])\r\n\r\n useEffect(() => {\r\n if (!widgetForm.values.languages.length) {\r\n changeFormFieldValue('languages', languages);\r\n changeFormFieldValue('selectedLanguage', initialSelectedLanguage);\r\n }\r\n\r\n setCalendarFirstDate(\r\n widgetForm.values.startingDate || startDate || moment()\r\n );\r\n const maxParticipants = productData['generalForm'].maxParticipants;\r\n if (maxParticipants) {\r\n setMaxParticipants(maxParticipants);\r\n }\r\n changeFormFieldValue('minNights', productData['generalForm'].minNights);\r\n }, []);\r\n\r\n useLayoutEffect(() => {\r\n const updateSize = () => {\r\n setWindowWidth(window.innerWidth);\r\n };\r\n window.addEventListener('resize', updateSize);\r\n updateSize();\r\n return () => window.removeEventListener('resize', updateSize);\r\n }, []);\r\n\r\n const { loading: bookDatesLoading, data: bookDatesData } = useQuery(\r\n BOOK_DATES,\r\n {\r\n skip: !isAccommodationBooking || !calendarFirstDate,\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n businessOwnerId: ownerId,\r\n accommodationId: productId,\r\n startPeriod: moment(calendarFirstDate)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(calendarFirstDate).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n }\r\n }\r\n );\r\n\r\n const {\r\n loading: availableParticipantsLoading,\r\n data: receivedAvailableParticipantsData\r\n } = useQuery(ACTIVITIES_AVAILABLE_PARTICIPANTS, {\r\n skip: isAccommodationBooking || !calendarFirstDate,\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n businessOwnerId: ownerId,\r\n activityId: productId,\r\n startPeriod: moment(calendarFirstDate)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(calendarFirstDate).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD'),\r\n availableParticipantsData: availableParticipantsData\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n if (!receivedAvailableParticipantsData) return;\r\n\r\n const availableParticipantsData = getReceivedActivityBookingsDates(\r\n receivedAvailableParticipantsData\r\n );\r\n\r\n setAvailableParticipantsData(availableParticipantsData);\r\n changeFormFieldValue(\r\n 'availableParticipantsData',\r\n availableParticipantsData.activities[0].availableParticipantsPerDate\r\n );\r\n }, [receivedAvailableParticipantsData]);\r\n\r\n useEffect(() => {\r\n if (!receivedProduct) return;\r\n\r\n setListOfAvailableCurrencies(receivedProduct);\r\n }, [receivedProduct]);\r\n\r\n useEffect(() => {\r\n if (!isAccommodationBooking) {\r\n if (productData.scheduleType === SCHEDULE_PASS_NAME) {\r\n setParticipants(productData);\r\n }\r\n return;\r\n }\r\n\r\n const availableCurrencies = widgetForm.values.availableCurrencies;\r\n if (!availableCurrencies.length) return;\r\n\r\n const guests = productData.generalForm.guests;\r\n changeFormFieldValue('maxParticipants', guests);\r\n\r\n setParticipants(productData);\r\n }, [widgetForm.values.availableCurrencies, widgetForm.values.dates]);\r\n\r\n useEffect(() => {\r\n setParticipantsAndStartTimes();\r\n }, [widgetForm.values.startingDate, availableParticipantsData, scheduleType]);\r\n\r\n useEffect(() => {\r\n if (!widgetForm.values.multiDates) return;\r\n let { startDate, endDate } = widgetForm.values.multiDates;\r\n if (!endDate) {\r\n endDate = startDate;\r\n }\r\n const isSame = moment(startDate).isSame(endDate, 'day');\r\n if (isSame) {\r\n changeFormFieldValue('dates', null);\r\n changeFormFieldValue('startingDate', startDate);\r\n } else {\r\n changeFormFieldValue('startingDate', null);\r\n changeFormFieldValue('dates', widgetForm.values.multiDates);\r\n handleMultiDateAvailableSeats(productData);\r\n setParticipants(productData);\r\n }\r\n }, [widgetForm.values.multiDates]);\r\n\r\n const setParticipantsAndStartTimes = () => {\r\n const startingDate = widgetForm.values.startingDate;\r\n if (!startingDate) return;\r\n\r\n const startPeriod = moment(calendarFirstDate).startOf('month');\r\n const endPeriod = moment(moment(calendarFirstDate).add(1, 'months')).endOf(\r\n 'month'\r\n );\r\n\r\n if (moment(startingDate).isBetween(startPeriod, endPeriod, 'day', '[]')) {\r\n setParticipants(productData);\r\n handleListStartTimeAndDurationField(productData);\r\n }\r\n };\r\n\r\n const setListOfAvailableCurrencies = receivedProduct => {\r\n const listOfAvailableCurrencies = getListOfAvailableCurrencies(\r\n receivedProduct.prices\r\n );\r\n\r\n changeFormFieldValue('availableCurrencies', listOfAvailableCurrencies);\r\n changeFormFieldValue('currency', initialSelectedCurrency);\r\n };\r\n\r\n const setParticipants = accommodation => {\r\n const currency = widgetForm.values.currency;\r\n const dates = widgetForm.values.dates;\r\n const createdParticipants = widgetForm.values.participants;\r\n\r\n let participants = [];\r\n\r\n if (isAccommodationBooking) {\r\n // if (createdParticipants && createdParticipants.length) return;\r\n if (dates && dates.startDate && dates.endDate) {\r\n participants = getAccommodationParticipants(\r\n accommodation,\r\n currency,\r\n createdParticipants,\r\n dates\r\n );\r\n } else {\r\n participants = [];\r\n }\r\n } else {\r\n participants = getActivityParticipants(\r\n accommodation,\r\n widgetForm,\r\n isUpdate => setIsUpdate(isUpdate),\r\n isUpdate,\r\n currency,\r\n createdParticipants\r\n );\r\n }\r\n\r\n changeFormFieldValue('participants', participants);\r\n };\r\n\r\n const handleMultiDateAvailableSeats = activity => {\r\n if (!activity || !widgetForm.values.multiDates) return;\r\n\r\n let { startDate, endDate } = widgetForm.values.multiDates;\r\n\r\n if (!startDate) return;\r\n\r\n if (!endDate) {\r\n endDate = startDate;\r\n }\r\n\r\n const availableParticipantsPerDate = availableParticipantsData\r\n ? availableParticipantsData.activities[0].availableParticipantsPerDate\r\n : [];\r\n\r\n const availableParticipants = getMaxParticipantsActivitySeveralDays(\r\n availableParticipantsPerDate,\r\n startDate,\r\n endDate\r\n );\r\n\r\n if (availableParticipants !== null) {\r\n setMaxParticipants(availableParticipants);\r\n } else {\r\n setMaxParticipants(activity.generalForm.maxParticipants);\r\n }\r\n };\r\n\r\n const handleListStartTimeAndDurationField = activity => {\r\n if (!activity) return;\r\n\r\n const startingDate = widgetForm.values.startingDate;\r\n const availableParticipantsPerDate = availableParticipantsData\r\n ? availableParticipantsData.activities[0].availableParticipantsPerDate\r\n : [];\r\n let listOfStartTimeAndDuration = getListOfStartTimeAndDuration(\r\n availableParticipantsPerDate,\r\n activity,\r\n widgetForm\r\n );\r\n listOfStartTimeAndDuration = getListOfStartTimeAndDurationByCutoffPeriod(\r\n activity,\r\n listOfStartTimeAndDuration,\r\n startingDate\r\n );\r\n let selectedStartTime = getDefaultStartTime(\r\n listOfStartTimeAndDuration,\r\n widgetForm\r\n );\r\n\r\n if (!selectedStartTime) {\r\n setMaxParticipants(activity.generalForm.maxParticipants);\r\n availableParticipantsPerDate.map(item => {\r\n const formattedStartDate = startingDate\r\n ? moment(startingDate).format('YYYY-MM-DD')\r\n : '';\r\n if (!item.startTime && item.date === formattedStartDate) {\r\n setMaxParticipants(item.availableParticipants);\r\n }\r\n });\r\n } else {\r\n setMaxParticipants(selectedStartTime.seatsLeft);\r\n\r\n listOfStartTimeAndDuration = getAvailableParticipantsForStartTime(\r\n listOfStartTimeAndDuration,\r\n null,\r\n widgetForm,\r\n availableParticipantsData\r\n );\r\n }\r\n\r\n selectedStartTime = getDefaultStartTime(\r\n listOfStartTimeAndDuration,\r\n widgetForm\r\n );\r\n\r\n changeFormFieldValue('startTime', selectedStartTime);\r\n setListStartTimeAndDuration(listOfStartTimeAndDuration);\r\n };\r\n\r\n const setMaxParticipants = seatsLeft => {\r\n const maxParticipants = getMaxParticipants(\r\n seatsLeft,\r\n null,\r\n widgetForm,\r\n availableParticipantsData\r\n );\r\n\r\n changeFormFieldValue('maxParticipants', maxParticipants);\r\n };\r\n\r\n return (\r\n <>\r\n <WidgetLoader loading={bookDatesLoading || availableParticipantsLoading} />\r\n\r\n {scheduleType === SCHEDULE_DATE_NO_TIME_NAME ? (\r\n <div className={classes.wrapper}>\r\n <div className={classes.leftSide}>\r\n <form onSubmit={handleSubmit}>\r\n {isAccommodationBooking ? (\r\n <Field\r\n name=\"dates\"\r\n availableRange={getAccommodationAvailableRangeDates(\r\n productData\r\n )}\r\n disabledDates={getAccommodationDisabledDates(bookDatesData)}\r\n changeMonthsCallback={setCalendarFirstDate}\r\n className={classes.dateRange}\r\n inputClassName={classes.disableInputFocus}\r\n label=\"Select dates\"\r\n initialFocus=\"startDate\"\r\n dateRangePickerClass=\"dateRangeOpenedPicker\"\r\n numberOfMonths={windowWidth > 700 ? 2 : 1}\r\n isHideDatesLabel={windowWidth <= 700}\r\n daySize={windowWidth > 600 ? 35 : 41}\r\n labelTypographyVariant={'h3'}\r\n secondLabelClass={classes.label}\r\n component={CustomDateRangePicker}\r\n widget\r\n />\r\n ) : (\r\n <>\r\n {scheduleType !== SCHEDULE_PASS_NAME && (\r\n <Field\r\n widget\r\n name=\"multiDates\"\r\n initialFocus=\"startDate\"\r\n label=\"Starting date\"\r\n dateRangePickerClass=\"dateRangeOpenedPicker\"\r\n availableRange={getActivityAvailableRangeDates(productData)}\r\n disabledDates={getActivityDisabledDates(\r\n availableParticipantsData,\r\n null,\r\n productData\r\n ).concat(activityDisabledDates)}\r\n changeMonthsCallback={setCalendarFirstDate}\r\n className={classes.dateRange}\r\n inputClassName={classes.disableInputFocus}\r\n secondLabelClass={classes.label}\r\n numberOfMonths={windowWidth > 700 ? 2 : 1}\r\n component={MultiDatePickerCalendar}\r\n daySize={windowWidth > 600 ? 35 : 41}\r\n labelTypographyVariant={'h3'}\r\n labelClass={classes.label}\r\n cutoffData={productData[productData.scheduleType]}\r\n />\r\n )}\r\n </>\r\n )}\r\n\r\n {scheduleType === SCHEDULE_DATE_AND_TIME_NAME && (\r\n <Field\r\n name=\"startTime\"\r\n label=\"Start time & Duration\"\r\n list={listStartTimeAndDuration}\r\n className={classes.startTimeWrapper}\r\n labelClass={classes.startTimeLabel}\r\n startTimeClass={classes.startTimeClass}\r\n component={StartTimeAndDurationRadioButtonsGroup}\r\n />\r\n )}\r\n <FieldArray\r\n name=\"participants\"\r\n title=\"Select number of guests\"\r\n component={Visitors}\r\n props={{ widgetForm }}\r\n titleClass={classes.label}\r\n itemClass={classes.participant}\r\n currency={widgetForm.values.currency || 'NOK'}\r\n />\r\n <div ref={bottomRef} />\r\n <button hidden={true} type={'submit'}>\r\n Submit\r\n </button>\r\n </form>\r\n </div>\r\n\r\n <div className={classes.rightSide}>\r\n <BookingInformation data={productData} form={widgetForm} />\r\n </div>\r\n </div>\r\n ) : (\r\n <div className={classes.wrapper}>\r\n <div className={classes.leftSide}>\r\n <form onSubmit={handleSubmit}>\r\n {isAccommodationBooking ? (\r\n <Field\r\n name=\"dates\"\r\n availableRange={getAccommodationAvailableRangeDates(\r\n productData\r\n )}\r\n disabledDates={getAccommodationDisabledDates(bookDatesData)}\r\n changeMonthsCallback={setCalendarFirstDate}\r\n className={classes.dateRange}\r\n inputClassName={classes.disableInputFocus}\r\n label=\"Select dates\"\r\n initialFocus=\"startDate\"\r\n dateRangePickerClass=\"dateRangeOpenedPicker\"\r\n numberOfMonths={windowWidth > 700 ? 2 : 1}\r\n isHideDatesLabel={windowWidth <= 700}\r\n daySize={windowWidth > 600 ? 35 : 41}\r\n labelTypographyVariant={'h3'}\r\n secondLabelClass={classes.label}\r\n component={CustomDateRangePicker}\r\n widget\r\n />\r\n ) : (\r\n <>\r\n {scheduleType !== SCHEDULE_PASS_NAME && (\r\n <Field\r\n name=\"startingDate\"\r\n label=\"Starting date\"\r\n availableRange={getActivityAvailableRangeDates(productData)}\r\n disabledDates={getActivityDisabledDates(\r\n availableParticipantsData,\r\n null,\r\n productData\r\n )}\r\n changeMonthsCallback={setCalendarFirstDate}\r\n className={classes.dateRange}\r\n numberOfMonths={windowWidth > 700 ? 2 : 1}\r\n component={SingleDatePicker}\r\n daySize={windowWidth > 600 ? 35 : 41}\r\n labelTypographyVariant={'h3'}\r\n labelClass={classes.label}\r\n cutoffData={productData[productData.scheduleType]}\r\n />\r\n )}\r\n </>\r\n )}\r\n\r\n {scheduleType === SCHEDULE_DATE_AND_TIME_NAME && (\r\n <Field\r\n name=\"startTime\"\r\n label=\"Start time & Duration\"\r\n list={listStartTimeAndDuration}\r\n className={classes.startTimeWrapper}\r\n labelClass={classes.startTimeLabel}\r\n startTimeClass={classes.startTimeClass}\r\n component={StartTimeAndDurationRadioButtonsGroup}\r\n />\r\n )}\r\n <FieldArray\r\n name=\"participants\"\r\n title=\"Select number of guests\"\r\n component={Visitors}\r\n props={{ widgetForm }}\r\n titleClass={classes.label}\r\n itemClass={classes.participant}\r\n currency={widgetForm.values.currency || 'NOK'}\r\n />\r\n <div ref={bottomRef} />\r\n <button hidden={true} type={'submit'}>\r\n Submit\r\n </button>\r\n </form>\r\n </div>\r\n\r\n <div className={classes.rightSide}>\r\n <BookingInformation data={productData} form={widgetForm} />\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n )\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n widgetForm: state.form.widgetForm\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('widgetForm', field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'widgetForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(DateAndGuests));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme=>({\r\n wrapper: {\r\n display: 'flex',\r\n overflowY: 'auto',\r\n padding: '18px 40px 0',\r\n margin: '-18px 0 0',\r\n height: 'calc(100% - 125px)',\r\n ['@media (max-width:1010px)']: {\r\n padding: '18px 0 0 40px',\r\n height: 'calc(100% - 125px)'\r\n },\r\n ['@media (max-width:850px)']: {\r\n padding: '0 0 0 40px',\r\n margin: '0px',\r\n height: 'calc(100% - 64px)'\r\n },\r\n ['@media (max-width:600px)']: {\r\n padding: '0 0 0 15px',\r\n height: 'calc(100% - 102px)'\r\n }\r\n },\r\n leftSide: {\r\n width: '100%',\r\n padding: '0 40px 0 1px',\r\n ['@media (max-width:1010px)']: {\r\n paddingRight: '40px'\r\n },\r\n ['@media (max-width:850px)']: {\r\n marginTop: 0\r\n },\r\n ['@media (max-width:600px)']: {\r\n paddingRight: '15px',\r\n marginTop: 0\r\n }\r\n },\r\n rightSide: {\r\n width: '300px',\r\n minWidth: '300px',\r\n ['@media (max-width:1010px)']: {\r\n display: 'none'\r\n }\r\n },\r\n sectionTitleIndent: {\r\n marginBottom: '20px',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em'\r\n },\r\n addOnWrapperClass: {\r\n marginBottom: '10px'\r\n },\r\n addOnItemClass: {\r\n '&:last-child': {\r\n borderBottom: 0\r\n }\r\n },\r\n addOnTitleClass: {\r\n fontSize: '14px'\r\n },\r\n addOnDescClass: {\r\n width: 'calc(100% - 163px)',\r\n ['@media (max-width:600px)']: {\r\n width: 'calc(100% - 83px)',\r\n textAlign: 'left'\r\n },\r\n },\r\n form: {\r\n height: 'inherit'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { change, FieldArray, reduxForm } from 'redux-form';\r\n\r\nimport { Typography } from '@material-ui/core';\r\nimport AddOnsList from 'pages/book-activity/components/add-ons-list/AddOnsList';\r\n\r\nimport BookingInformation from '../booking-information/BookingInformation';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst initialValues = {\r\n addOns: []\r\n};\r\n\r\nconst AddOns = ({\r\n accommodationData,\r\n widgetForm,\r\n changeFormFieldValue,\r\n handleSubmit\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const currency = widgetForm.values.currency;\r\n\r\n React.useEffect(() => {\r\n setAddOns(accommodationData);\r\n }, [accommodationData]);\r\n\r\n const setAddOns = accommodation => {\r\n const receivedAddOns = accommodation.addOnsForm.addOns;\r\n const createdAddOns = widgetForm.values.addOns;\r\n\r\n if (createdAddOns && createdAddOns.length) return;\r\n\r\n const addOnsList = receivedAddOns.map(item => {\r\n return {\r\n ...item,\r\n value: 0\r\n };\r\n });\r\n\r\n changeFormFieldValue('addOns', addOnsList);\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <div className={classes.leftSide}>\r\n <form onSubmit={handleSubmit} className={classes.form}>\r\n <Typography\r\n variant=\"h3\"\r\n classes={{ root: classes.sectionTitleIndent }}\r\n >\r\n {t('Select additional options')}\r\n </Typography>\r\n\r\n <FieldArray\r\n name=\"addOns\"\r\n currency={currency}\r\n titleClass={classes.addOnTitleClass}\r\n wrapperClass={classes.addOnWrapperClass}\r\n addOnItemClass={classes.addOnItemClass}\r\n addOnDescClass={classes.addOnDescClass}\r\n isWidget={true}\r\n component={AddOnsList}\r\n />\r\n\r\n <button hidden={true} type={'submit'}>\r\n Submit\r\n </button>\r\n </form>\r\n </div>\r\n <div className={classes.rightSide}>\r\n <BookingInformation data={accommodationData} form={widgetForm} />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n widgetForm: state.form.widgetForm\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('widgetForm', field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'widgetForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(AddOns));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme=>({\r\n wrapper: {\r\n display: 'none',\r\n },\r\n \r\n \r\n form: {\r\n height: 'inherit'\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { change, FieldArray, reduxForm } from 'redux-form';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\n\r\nimport BookingInformation from '../booking-information/BookingInformation';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst initialValues = {\r\n mandatoryFees: []\r\n};\r\n\r\nconst MandatoryFees = ({\r\n accommodationData,\r\n widgetForm,\r\n changeFormFieldValue,\r\n handleSubmit\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const currency = widgetForm.values.currency;\r\n\r\n React.useEffect(() => {\r\n setmandatoryFees(accommodationData);\r\n }, [accommodationData]);\r\n\r\n const setmandatoryFees = accommodation => {\r\n const receivedmandattoryFees = accommodation.mandatoryFeesForm.mandatoryFees;\r\n const createdmandatoryFees = widgetForm.values.mandatoryFeess;\r\n\r\n if (createdmandatoryFees && createdmandatoryFees.length) return;\r\n\r\n const mandatoryFeesList = receivedmandattoryFees.map(item => {\r\n return {\r\n ...item,\r\n value: 0\r\n };\r\n });\r\n\r\n changeFormFieldValue('mandatoryFees', mandatoryFeesList);\r\n };\r\n return (\r\n <div className={classes.wrapper}>\r\n \r\n <BookingInformation data={accommodationData} form={widgetForm} />\r\n \r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n widgetForm: state.form.widgetForm\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('widgetForm', field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'widgetForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(MandatoryFees));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n wrapper: {},\r\n item: {\r\n display: 'flex',\r\n margin: '0 0 18px',\r\n padding: '0 0 18px',\r\n position: 'relative',\r\n '&:hover': {\r\n cursor: 'pointer'\r\n }\r\n },\r\n photo: {\r\n minWidth: '120px',\r\n height: '120px',\r\n backgroundSize: 'cover',\r\n backgroundRepeat: 'no-repeat',\r\n backgroundPosition: 'center',\r\n borderRadius: '3px',\r\n backgroundColor: '#E2F5F8',\r\n margin: '0 20px 0 0',\r\n ['@media (max-width:600px)']: {\r\n minWidth: '80px',\r\n height: '80px'\r\n }\r\n },\r\n info: {\r\n width: '100%'\r\n },\r\n title: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginBottom: '5px'\r\n },\r\n button: {\r\n cursor: 'pointer',\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontWeight: 'normal',\r\n margin: '0 0 0 30px',\r\n color: '#949494'\r\n },\r\n icon: {\r\n fontSize: '12px',\r\n margin: '0 0 0 5px'\r\n },\r\n titleWrapper: {\r\n display: 'flex',\r\n alignItems: 'baseline',\r\n justifyContent: 'space-between',\r\n cursor: 'pointer'\r\n },\r\n overview: {\r\n marginRight: '15px'\r\n },\r\n selected: {\r\n width: '100%',\r\n height: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: 'rgba(7, 27, 39, .65)'\r\n },\r\n selectedIcon: {\r\n fontSize: '50px',\r\n color: 'white',\r\n ['@media (max-width:600px)']: {\r\n fontSize: '30px'\r\n }\r\n },\r\n divider: {\r\n display: 'block',\r\n height: '1px',\r\n width: 'calc(100% - 140px)',\r\n background: '#E2EBF6',\r\n position: 'absolute',\r\n bottom: 0\r\n },\r\n prices: {\r\n marginBottom: '5px',\r\n fontWeight: 'bold'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { Typography } from '@material-ui/core';\r\nimport ArrowForwardIosIcon from '@material-ui/icons/ArrowForwardIos';\r\nimport CheckCircleOutlineOutlinedIcon from '@material-ui/icons/CheckCircleOutlineOutlined';\r\n\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport { Prices } from '../product-short-info/ProductShortInfo';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst ActivitiesList = ({ fields, selectCallback, currency }) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n if (!fields.length) return null;\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n {fields.map((field, index) => {\r\n const item = fields.get(index);\r\n const form = getFormByCurrentLanguage(\r\n selectedLanguage,\r\n item,\r\n item['Norwegian']\r\n );\r\n return (\r\n <div\r\n key={index}\r\n className={classes.item}\r\n onClick={() => selectCallback(item, index)}\r\n >\r\n <div\r\n className={classes.photo}\r\n style={{\r\n backgroundImage: `url(${item.photo})`\r\n }}\r\n >\r\n {''}\r\n {item.isSelected && (\r\n <div className={classes.selected}>\r\n <CheckCircleOutlineOutlinedIcon\r\n className={classes.selectedIcon}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n <div className={classes.info}>\r\n <div className={classes.titleWrapper}>\r\n <Typography variant=\"h2\" className={classes.title}>\r\n {form.title}\r\n </Typography>\r\n <ArrowForwardIosIcon className={classes.icon} />\r\n </div>\r\n <div className={classes.prices}>\r\n <Prices\r\n prices={item.prices[item.pricesType]}\r\n pricesType={item.pricesType}\r\n scheduleType={item.scheduleType}\r\n initialSelectedCurrency={currency}\r\n isAvailableEmptyPrice={true}\r\n />\r\n </div>\r\n <Typography variant=\"body1\" className={classes.overview}>\r\n {form.overview}\r\n </Typography>\r\n {index !== fields.length - 1 && (\r\n <div className={classes.divider}>{''}</div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ActivitiesList;\r\n","import { getTotalPrice } from 'utils/book-accommodation-and-activity/totalPrice';\r\n\r\nconst getWidgetTotalPrice = (widgetForm, productData) => {\r\n const currency = widgetForm.values.currency;\r\n const dates = widgetForm.values.dates;\r\n const participants = widgetForm.values.participants;\r\n const addOns = widgetForm.values.addOns;\r\n const mandatoryFees =widgetForm.values.mandatoryFees;\r\n const activities = widgetForm.values.activities;\r\n const selectedActivities = activities\r\n ? activities.filter(item => item.isSelected)\r\n : [];\r\n const pricesTypeObj = {\r\n pricesType: productData.pricesType,\r\n isAccommodation: !productData.scheduleType\r\n };\r\n\r\n return getTotalPrice(\r\n pricesTypeObj,\r\n dates,\r\n participants,\r\n addOns,\r\n mandatoryFees,\r\n selectedActivities,\r\n currency,\r\n widgetForm.values.dates\r\n );\r\n};\r\n\r\nexport { getWidgetTotalPrice };\r\n","import { makeStyles } from '@material-ui/core/styles';\r\nimport zIndex from '@material-ui/core/styles/zIndex';\r\nimport { Height } from '@material-ui/icons';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n wrapper: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n width: 'calc(100% - 80px)',\r\n padding: '0 40px',\r\n background: 'rgba(0, 0, 0, .05)',\r\n position: 'absolute',\r\n bottom: 0,\r\n ['@media (max-width:600px)']: {\r\n padding: '0 15px',\r\n width: '100% !important'\r\n }\r\n },\r\n confirmPayment: {\r\n fontSize: '13px',\r\n marginTop: '2px',\r\n display: '-webkit-box',\r\n '-webkit-line-clamp': 2,\r\n '-webkit-box-orient': 'vertical',\r\n overflow: 'hidden', \r\n [theme.breakpoints.down('sm')]: {\r\n display: '-webkit-box',\r\n '-webkit-line-clamp': 7,\r\n }\r\n },\r\n privacy: {\r\n fontWeight: 'bold',\r\n textDecoration: 'underline',\r\n color: theme.baseUI.color\r\n },\r\n checkboxWrapper: {\r\n margin: '0 0 4px 0',\r\n ['@media (max-width: 850px)']: {\r\n position: 'absolute',\r\n bottom: '44px',\r\n left: '0',\r\n width: 'calc(100% - 80px)',\r\n padding: '5px 40px',\r\n display: 'flex',\r\n boxShadow: '0px -1px 0px #E2EBF6'\r\n },\r\n ['@media (max-width: 600px)']: {\r\n padding: '5px 15px',\r\n width: '100%', \r\n backgroundColor: 'white',\r\n zIndex: '1',\r\n Height: '100%'\r\n }\r\n },\r\n buttonsWrapper: {\r\n margin: '6px 0',\r\n minWidth: 'fit-content'\r\n },\r\n cancelBtn: {\r\n fontSize: '13px',\r\n padding: '6px 15px',\r\n marginRight: '15px',\r\n backgroundColor: 'white',\r\n color: theme.baseUI.color,\r\n border: `1px solid ${theme.baseUI.color}`,\r\n '&:hover': {\r\n backgroundColor: 'white'\r\n },\r\n ['@media (max-width: 400px)']: {\r\n marginRight: '8px'\r\n }\r\n },\r\n totalBtn: {\r\n fontSize: '13px',\r\n padding: '6px 15px',\r\n backgroundColor: theme.baseUI.color,\r\n border: `1px solid ${theme.baseUI.color}`,\r\n color: 'white',\r\n '&:hover': {\r\n backgroundColor: theme.baseUI.color,\r\n color: '#FFFFFF'\r\n }\r\n },\r\n total: {\r\n padding: '0 15px 0 0',\r\n borderRight: '1px solid white',\r\n textTransform: 'none',\r\n ['@media (max-width:600px)']: {\r\n display: 'none'\r\n }\r\n },\r\n next: {\r\n padding: '0 0 0 15px',\r\n ['@media (max-width:600px)']: {\r\n padding: '0 5px'\r\n }\r\n },\r\n stepNumber: {\r\n color: theme.baseUI.color,\r\n marginRight: '6px'\r\n },\r\n withoutTotal: {\r\n padding: '0 5px'\r\n },\r\n navigation: {\r\n display: 'none',\r\n ['@media (max-width:850px)']: {\r\n display: 'block'\r\n }\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\nimport { change } from 'redux-form';\r\nimport { connect } from 'react-redux';\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport { FOOTER_MENU } from 'constants/widget';\r\n\r\nimport { currencyFormatter } from 'utils/prices/formatter';\r\nimport { getWidgetTotalPrice } from 'utils/widget/getTotalPrice';\r\n\r\nimport { CheckboxButtonsGroup } from 'components';\r\n\r\nimport { useQuery } from '@apollo/react-hooks';\r\nimport { WIDGET_SETTINGS } from 'graphql/queries/widget';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst Footer = ({\r\n widgetForm,\r\n accommodationData,\r\n cancelButton,\r\n confirmButton,\r\n cancelCallback,\r\n confirmCallback,\r\n isHideConfirmButton,\r\n isLastStep,\r\n isSelectedProduct,\r\n isAccommodationBooking,\r\n isHiddenNavigation,\r\n menuIndex,\r\n changeFormFieldValue,\r\n ownerId\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const { data } = useQuery(WIDGET_SETTINGS, {\r\n fetchPolicy: 'no-cache',\r\n variables: { \r\n businessOwnerId :ownerId\r\n },\r\n });\r\n\r\n const widget = data?.widget || {};\r\n const { privacyPolicy, termsAndConditions } = widget;\r\n\r\n const isWidgetForm = !!Object.keys(widgetForm || {}).length;\r\n const currency = isWidgetForm ? widgetForm.values.currency : '';\r\n const isPrivacy = isWidgetForm ? widgetForm.values.isPrivacy || false : false;\r\n\r\n const calculateTotalPrice = () => {\r\n if (!isWidgetForm || !accommodationData) return '0.00';\r\n\r\n return currencyFormatter(\r\n getWidgetTotalPrice(widgetForm, accommodationData)\r\n );\r\n };\r\n\r\n const redirectTo = url => {\r\n if (!url || !url.length) return;\r\n if (url.indexOf('https') < 0 && url.indexOf('http') < 0) {\r\n window.open(`https://${url}`, '_blank');\r\n }\r\n window.open(url, '_blank');\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n <div>\r\n {isLastStep && (\r\n <>\r\n <CheckboxButtonsGroup\r\n input={{\r\n value: {\r\n isPrivacy: isPrivacy\r\n },\r\n onChange: e => {\r\n changeFormFieldValue('isPrivacy', e.isPrivacy);\r\n }\r\n }}\r\n meta={{}}\r\n className={classes.checkboxWrapper}\r\n label={\r\n <div className={classes.confirmPayment}>\r\n {t('By confirming the payment, I agree with the')}{' '}\r\n <span\r\n className={classes.privacy}\r\n onClick={() => redirectTo(privacyPolicy)}\r\n >\r\n {t('Privacy Policy')}\r\n </span>\r\n {t(' and ')}{' '}\r\n <span\r\n className={classes.privacy}\r\n onClick={() => redirectTo(termsAndConditions)}\r\n >\r\n {t('Terms & Conditions')}\r\n </span>\r\n .\r\n </div>\r\n }\r\n />\r\n </>\r\n )}\r\n {!isSelectedProduct && !isHiddenNavigation && (\r\n <Typography variant=\"h3\" className={classes.navigation}>\r\n <span className={classes.stepNumber}>{menuIndex + 1} of 5 </span>{' '}\r\n {FOOTER_MENU[menuIndex].title === 'Activities' &&\r\n !isAccommodationBooking\r\n ? t('Accommodations')\r\n : t(FOOTER_MENU[menuIndex].title)}\r\n </Typography>\r\n )}\r\n </div>\r\n <div className={classes.buttonsWrapper}>\r\n <Button\r\n variant=\"outlined\"\r\n classes={{ root: classes.cancelBtn }}\r\n onClick={() => cancelCallback && cancelCallback()}\r\n >\r\n {t(cancelButton)}\r\n </Button>\r\n {!isHideConfirmButton && (\r\n <Button\r\n type=\"submit\"\r\n variant=\"outlined\"\r\n classes={{ root: classes.totalBtn }}\r\n onClick={() => confirmCallback && confirmCallback()}\r\n >\r\n {!isSelectedProduct && (\r\n <>\r\n <span className={classes.total}>\r\n {t('Total')}: {currency} {calculateTotalPrice()}\r\n </span>{' '}\r\n </>\r\n )}\r\n <span\r\n className={classNames(classes.next, {\r\n [classes.withoutTotal]: isSelectedProduct\r\n })}\r\n >\r\n {t(confirmButton)}\r\n </span>\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n widgetForm: state.form.widgetForm,\r\n businessOwner: state.businessOwner\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('widgetForm', field, value));\r\n }\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Footer);\r\n","const SCHEDULE_DATE_NO_TIME_NAME = 'scheduleDateForm';\r\nconst SCHEDULE_DATE_TIME_NAME = 'scheduleDateTimeForm';\r\n\r\nconst validate = (values, props) => {\r\n const errors = {};\r\n\r\n const activityIndex = props.initialValues.index;\r\n const activity = values.activities[activityIndex];\r\n\r\n if (!activity) return errors;\r\n\r\n if (\r\n activity.scheduleType === SCHEDULE_DATE_NO_TIME_NAME &&\r\n (!values.dates || !values.dates.startDate)\r\n ) {\r\n errors.multiDates = 'Starting date is required';\r\n } else if (\r\n activity.scheduleType === SCHEDULE_DATE_TIME_NAME &&\r\n !values.startingDate\r\n ) {\r\n errors.startingDate = 'Starting date is required';\r\n }\r\n\r\n if (activity.participants && activity.participants.length) {\r\n let participantsArrayErrors = [];\r\n let isValidParticipants = false;\r\n\r\n activity.participants.forEach((item, index) => {\r\n if (item.participants && parseInt(item.participants) > 0) {\r\n isValidParticipants = true;\r\n }\r\n\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (!isValidParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: 'Value for at least one category should be filled in'\r\n };\r\n }\r\n }\r\n\r\n if (\r\n !errors.participants &&\r\n activity.participants &&\r\n activity.participants.length\r\n ) {\r\n const availableParticipants = activity.maxParticipants;\r\n const participantsArrayErrors = [];\r\n let totalParticipants = 0;\r\n\r\n activity.participants.forEach((item, index) => {\r\n if (item.participants && item.participants.length) {\r\n totalParticipants += parseInt(item.participants);\r\n }\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (totalParticipants > availableParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: `The number of Guests can’t exceed ${availableParticipants}`\r\n };\r\n }\r\n }\r\n\r\n if (!!Object.keys(errors).length) {\r\n const errorsCopy = { ...errors };\r\n errors.activities = {\r\n [activityIndex]: errorsCopy\r\n };\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles({\r\n paper: {\r\n overflow: 'hidden',\r\n backgroundColor: '#FFF',\r\n border: '1px solid #E5E5E5',\r\n boxSizing: 'border-box',\r\n borderRadius: '3px',\r\n width: '1000px',\r\n maxWidth: '1000px',\r\n minHeight: '700px',\r\n height: '700px',\r\n margin: '25px',\r\n ['@media (max-width:960px)']: {\r\n height: '100%',\r\n maxHeight: '100%',\r\n minHeight: '100%',\r\n width: '100%',\r\n margin: 0\r\n }\r\n },\r\n form: {\r\n height: '100%'\r\n },\r\n content: {\r\n padding: '0 40px',\r\n margin: '0 0 48px',\r\n overflow: 'auto',\r\n height: 'calc(100% - 111px)',\r\n ['@media (max-width:600px)']: {\r\n padding: '0 15px',\r\n height: 'calc(100% - 150px)'\r\n }\r\n },\r\n title: {\r\n margin: '10px 0 15px'\r\n },\r\n editSection: {\r\n display: 'flex',\r\n margin: '0 0 30px',\r\n ['@media (max-width:1010px)']: {\r\n flexDirection: 'column',\r\n margin: '0 0 5px'\r\n }\r\n },\r\n editItem: {\r\n padding: '0 0 0 40px',\r\n '&:first-child': {\r\n borderRight: '1px solid #e2ebf6',\r\n padding: '0 40px 0 0'\r\n },\r\n '&:last-child': {\r\n width: '100%'\r\n },\r\n ['@media (max-width:1010px)']: {\r\n border: 0,\r\n padding: 0,\r\n margin: 0,\r\n maxWidth: '100%',\r\n '&:first-child': {\r\n border: 0,\r\n padding: 0\r\n }\r\n }\r\n },\r\n item: {\r\n width: '100%',\r\n maxWidth: '540px',\r\n padding: '0 30px 0 0',\r\n margin: '0 30px 0 0',\r\n borderRight: '1px solid #e2ebf6',\r\n '&:last-child': {\r\n border: 0,\r\n padding: 0,\r\n margin: 0\r\n },\r\n ['@media (max-width:1010px)']: {\r\n border: 0,\r\n padding: 0,\r\n margin: 0,\r\n maxWidth: '100%'\r\n }\r\n },\r\n date: {\r\n width: '313px',\r\n minWidth: '313px',\r\n ['@media (max-width:1010px)']: {\r\n width: '606px'\r\n },\r\n ['@media (max-width:750px)']: {\r\n width: '313px'\r\n },\r\n ['@media (max-width:600px)']: {\r\n width: '333px'\r\n }\r\n },\r\n rangeDates: {\r\n ['@media (max-width:1010px)']: {\r\n width: '606px'\r\n },\r\n ['@media (max-width:750px)']: {\r\n width: '313px'\r\n },\r\n ['@media (max-width:600px)']: {\r\n width: '333px'\r\n }\r\n },\r\n availabilityTitle: {\r\n margin: '0 0 10px',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em'\r\n },\r\n availabilityLabel: {\r\n fontSize: '14px'\r\n },\r\n radioGroupRoot: {\r\n flexDirection: 'column'\r\n },\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important'\r\n },\r\n disableInputFocus: {\r\n display: 'none'\r\n },\r\n visitItem: {\r\n flex: '0 0 100%',\r\n '&:last-child': {\r\n border: 0\r\n }\r\n },\r\n visitTitleClass: {\r\n fontSize: '14px'\r\n },\r\n label: {\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em'\r\n },\r\n visitorsWrapperClass: {\r\n ['@media (max-width:1010px)']: {\r\n paddingBottom: '10px'\r\n }\r\n },\r\n sectionTitleIndent: {\r\n marginBottom: '20px',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em'\r\n },\r\n addOnWrapperClass: {\r\n marginBottom: '30px'\r\n },\r\n addOnItemClass: {\r\n '&:last-child': {\r\n borderBottom: 0\r\n }\r\n },\r\n addOnDescClass: {\r\n width: '100%',\r\n marginRight: '10px'\r\n },\r\n location: {\r\n display: 'flex',\r\n alignItems: 'end',\r\n marginBottom: '20px',\r\n marginLeft: '-5px'\r\n },\r\n locationIcon: {\r\n fontSize: '20px',\r\n marginRight: '10px'\r\n },\r\n locationText: {\r\n marginTop: '1px'\r\n }\r\n});\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport moment from 'moment';\r\nimport classNames from 'classnames';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n change,\r\n stopSubmit,\r\n Field,\r\n FieldArray,\r\n reduxForm,\r\n untouch,\r\n updateSyncErrors\r\n} from 'redux-form';\r\nimport { useQuery } from '@apollo/react-hooks';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport LocationOnOutlinedIcon from '@material-ui/icons/LocationOnOutlined';\r\n\r\nimport {\r\n ACTIVITIES_AVAILABLE_PARTICIPANTS,\r\n ACTIVITY\r\n} from 'graphql/queries/activities';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport {\r\n BookInfoList,\r\n CircularLoader,\r\n MultiDatePickerCalendar,\r\n RadioButtonsGroup,\r\n SingleDatePicker\r\n} from 'components';\r\n\r\nimport Header from 'pages/widget/components/header/Header';\r\nimport Footer from 'pages/widget/components/footer/Footer';\r\nimport Visitors from 'pages/widget/components/visiters/Visiters';\r\n\r\nimport {\r\n getReceivedActivityBookingsDates,\r\n getReceivedActivityData\r\n} from 'utils/accommodations-and-activities/prepareReceivedActivityData';\r\nimport {\r\n getAvailableRangeDates,\r\n getDefaultStartTime,\r\n getDisabledDates,\r\n getListOfStartTimeAndDuration,\r\n getListOfStartTimeAndDurationByCutoffPeriod\r\n} from 'utils/book-activity/availableDates';\r\nimport {\r\n getAvailableParticipantsForStartTime,\r\n getMaxParticipants,\r\n getMaxParticipantsActivitySeveralDays\r\n} from 'utils/book-activity/maxParticipants';\r\nimport { getParticipants } from 'utils/book-activity/prepareParticipants';\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport AddOnsList from 'pages/book-activity/components/add-ons-list/AddOnsList';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from '../styles';\r\n\r\nconst SCHEDULE_DATE_NO_TIME_NAME = 'scheduleDateForm';\r\nconst SCHEDULE_DATE_AND_TIME_NAME = 'scheduleDateTimeForm';\r\nconst SCHEDULE_PASS_NAME = 'schedulePassForm';\r\n\r\nconst ActivityDialog = ({\r\n open,\r\n accommodationData,\r\n closeDialogCallback,\r\n initialValues,\r\n widgetForm,\r\n changeFormFieldValue,\r\n stopSubmitForm,\r\n untouchFormFields,\r\n handleSubmit,\r\n ownerId,\r\n updateFormErrors,\r\n logo\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n const confirm = React.useContext(ConfirmContext);\r\n\r\n const currency = widgetForm.values.currency;\r\n const activityIndex = initialValues.index;\r\n const reduxActivity = widgetForm.values.activities[activityIndex];\r\n\r\n const [activity, setActivity] = React.useState(null);\r\n const [\r\n listStartTimeAndDuration,\r\n setListStartTimeAndDuration\r\n ] = React.useState([]);\r\n const [isUpdate, setIsUpdate] = React.useState(false);\r\n const [\r\n availableParticipantsData,\r\n setAvailableParticipantsData\r\n ] = React.useState(null);\r\n const [windowWidth, setWindowWidth] = React.useState(window.innerWidth);\r\n const [isSelected, setIsSelected] = React.useState(false);\r\n\r\n const initialStartingDate =\r\n initialValues.startingDate || moment() || initialValues.multiDates;\r\n\r\n React.useLayoutEffect(() => {\r\n const updateSize = () => {\r\n setWindowWidth(window.innerWidth);\r\n };\r\n window.addEventListener('resize', updateSize);\r\n updateSize();\r\n return () => window.removeEventListener('resize', updateSize);\r\n }, []);\r\n\r\n const { loading, data } = useQuery(ACTIVITY, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n activityId: initialValues.id,\r\n businessOwnerId: ownerId\r\n }\r\n });\r\n\r\n const {\r\n data: receivedAvailableParticipantsData,\r\n refetch: refetchParticipantsData\r\n } = useQuery(ACTIVITIES_AVAILABLE_PARTICIPANTS, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n businessOwnerId: ownerId,\r\n activityId: initialValues.id,\r\n startPeriod: moment(initialStartingDate)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(initialStartingDate)\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n setIsSelected(reduxActivity.isSelected);\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (!receivedAvailableParticipantsData) return;\r\n\r\n const availableParticipantsData = getReceivedActivityBookingsDates(\r\n receivedAvailableParticipantsData\r\n );\r\n\r\n setAvailableParticipantsData(availableParticipantsData);\r\n }, [receivedAvailableParticipantsData]);\r\n\r\n React.useEffect(() => {\r\n if (reduxActivity.startTime) {\r\n changeFormFieldValue(\r\n `activities[${activityIndex}].maxParticipants`,\r\n reduxActivity.startTime.seatsLeft\r\n );\r\n }\r\n }, [reduxActivity.startTime]);\r\n\r\n React.useEffect(() => {\r\n if (!data || !data.activities.length) return;\r\n\r\n const receivedActivity = data.activities[0];\r\n const activityData = getReceivedActivityData(receivedActivity);\r\n\r\n activityData['pricesType'] = receivedActivity['pricesType'];\r\n activityData['scheduleType'] = receivedActivity['scheduleType'];\r\n\r\n setMaxParticipants(activityData['generalForm'].maxParticipants);\r\n\r\n if (activityData.scheduleType === SCHEDULE_PASS_NAME) {\r\n setParticipants(activityData);\r\n }\r\n\r\n if (initialValues.isSelected) {\r\n setParticipants(activityData);\r\n handleListStartTimeAndDurationField(activityData);\r\n }\r\n\r\n changeFormFieldValue(`activities[${activityIndex}].isSelected`, true);\r\n\r\n setAddOns(activityData);\r\n\r\n setActivity(activityData);\r\n }, [data]);\r\n\r\n const setAddOns = activityData => {\r\n if (!reduxActivity.addOns || !reduxActivity.addOns.length) {\r\n const addOnsList = activityData.addOnsForm.addOns.map(item => {\r\n return {\r\n ...item,\r\n value: 0\r\n };\r\n });\r\n changeFormFieldValue(`activities[${activityIndex}].addOns`, addOnsList);\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n if (!reduxActivity.startingDate) return;\r\n setParticipants(activity);\r\n handleListStartTimeAndDurationField(activity);\r\n }, [reduxActivity.startingDate]);\r\n\r\n React.useEffect(() => {\r\n const multiDates = reduxActivity.multiDates;\r\n if (multiDates) {\r\n handleMultiDateAvailableSeats(activity);\r\n setParticipants(activity);\r\n }\r\n }, [reduxActivity.multiDates]);\r\n\r\n const setParticipants = activity => {\r\n if (!activity) return;\r\n const previousParticipants = reduxActivity.participants || [];\r\n const participants = getParticipants(\r\n activity,\r\n { values: reduxActivity },\r\n () => {},\r\n false,\r\n currency,\r\n previousParticipants\r\n );\r\n\r\n changeFormFieldValue(\r\n `activities[${activityIndex}].participants`,\r\n participants\r\n );\r\n\r\n setIsUpdate(!isUpdate);\r\n };\r\n\r\n const changeMonthHandler = date => {\r\n refetchParticipantsData({\r\n businessOwnerId: ownerId,\r\n activityId: initialValues.id,\r\n startPeriod: moment(date)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(date)\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n });\r\n };\r\n\r\n const handleMultiDateAvailableSeats = activity => {\r\n if (!activity || !reduxActivity.multiDates) return;\r\n\r\n const startDate = reduxActivity.multiDates.startDate;\r\n const endDate = reduxActivity.multiDates.endDate;\r\n\r\n if (!startDate || !endDate) return;\r\n\r\n const availableParticipantsPerDate = availableParticipantsData\r\n ? availableParticipantsData.activities[0].availableParticipantsPerDate\r\n : [];\r\n\r\n const availableParticipants = getMaxParticipantsActivitySeveralDays(\r\n availableParticipantsPerDate,\r\n startDate,\r\n endDate\r\n );\r\n\r\n if (availableParticipants !== null) {\r\n setMaxParticipants(availableParticipants);\r\n } else {\r\n setMaxParticipants(activity.generalForm.maxParticipants);\r\n }\r\n };\r\n\r\n const handleListStartTimeAndDurationField = activity => {\r\n if (!activity) return;\r\n\r\n const startingDate = reduxActivity.startingDate;\r\n const availableParticipantsPerDate = availableParticipantsData\r\n ? availableParticipantsData.activities[0].availableParticipantsPerDate\r\n : [];\r\n let listOfStartTimeAndDuration = getListOfStartTimeAndDuration(\r\n availableParticipantsPerDate,\r\n activity,\r\n { values: reduxActivity }\r\n );\r\n listOfStartTimeAndDuration = getListOfStartTimeAndDurationByCutoffPeriod(\r\n activity,\r\n listOfStartTimeAndDuration,\r\n startingDate\r\n );\r\n let selectedStartTime = getDefaultStartTime(listOfStartTimeAndDuration, {\r\n values: reduxActivity\r\n });\r\n\r\n if (!selectedStartTime) {\r\n setMaxParticipants(activity.generalForm.maxParticipants);\r\n availableParticipantsPerDate.map(item => {\r\n const formattedStartDate = startingDate\r\n ? moment(startingDate).format('YYYY-MM-DD')\r\n : '';\r\n if (!item.startTime && item.date === formattedStartDate) {\r\n setMaxParticipants(item.availableParticipants);\r\n }\r\n });\r\n } else {\r\n setMaxParticipants(selectedStartTime.seatsLeft);\r\n\r\n listOfStartTimeAndDuration = getAvailableParticipantsForStartTime(\r\n listOfStartTimeAndDuration,\r\n null,\r\n { values: reduxActivity },\r\n availableParticipantsData\r\n );\r\n }\r\n\r\n selectedStartTime = getDefaultStartTime(listOfStartTimeAndDuration, {\r\n values: reduxActivity\r\n });\r\n\r\n changeFormFieldValue(\r\n `activities[${activityIndex}].startTime`,\r\n selectedStartTime\r\n );\r\n\r\n // listOfStartTimeAndDuration = listOfStartTimeAndDuration.map(item => {\r\n // return {\r\n // ...item,\r\n // title: `${item.startTime} • ${item.duration} ${item.timeType}`\r\n // };\r\n // });\r\n\r\n setListStartTimeAndDuration(listOfStartTimeAndDuration);\r\n };\r\n\r\n const setMaxParticipants = seatsLeft => {\r\n const maxParticipants = getMaxParticipants(\r\n seatsLeft,\r\n null,\r\n { values: reduxActivity },\r\n availableParticipantsData\r\n );\r\n\r\n changeFormFieldValue(\r\n `activities[${activityIndex}].maxParticipants`,\r\n maxParticipants\r\n );\r\n };\r\n\r\n const cancelActivity = isRemove => {\r\n const title = isRemove\r\n ? 'Are you sure you want to remove it?'\r\n : 'Are you sure you want to cancel it?';\r\n const confirmationText = isRemove ? 'Remove' : 'Cancel';\r\n confirm({\r\n title: title,\r\n confirmationText: confirmationText,\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n changeFormFieldValue(`activities[${activityIndex}].startingDate`, null);\r\n changeFormFieldValue(`activities[${activityIndex}].multiDates`, null);\r\n changeFormFieldValue(`activities[${activityIndex}].participants`, []);\r\n changeFormFieldValue(`activities[${activityIndex}].startTime`, null);\r\n\r\n changeFormFieldValue(`activities[${activityIndex}].isSelected`, false);\r\n\r\n untouchFormFields([`activities[${activityIndex}].startingDate`]);\r\n untouchFormFields([`activities[${activityIndex}].multiDates`]);\r\n updateFormErrors();\r\n stopSubmitForm();\r\n\r\n closeDialogCallback();\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const saveActivity = () => {\r\n if (widgetForm.syncErrors) return;\r\n\r\n changeFormFieldValue(`activities[${activityIndex}].isSelected`, true);\r\n closeDialogCallback();\r\n };\r\n\r\n const getStartTimeAndDuration = () => {\r\n return listStartTimeAndDuration\r\n .map(item => {\r\n return {\r\n ...item,\r\n title: `${item.startTime} • ${item.duration} ${t(item.timeType)}`\r\n };\r\n })\r\n .filter(item => item.seatsLeft);\r\n };\r\n\r\n const currentLanguageGeneralForm = activity\r\n ? getFormByCurrentLanguage(\r\n i18n.language,\r\n activity.generalForm,\r\n activity['generalForm-Norwegian']\r\n )\r\n : {};\r\n\r\n return (\r\n <Dialog open={open} classes={{ paper: classes.paper }}>\r\n <form onSubmit={handleSubmit(saveActivity)} className={classes.form}>\r\n <CircularLoader\r\n isLoading={loading}\r\n loaderClassName={classes.loaderClassName}\r\n />\r\n\r\n <Header\r\n logo={logo}\r\n cancelCallback={cancelActivity}\r\n title={t('Book your activity')}\r\n />\r\n\r\n {activity && (\r\n <div className={classes.content}>\r\n <Typography variant=\"h2\" classes={{ root: classes.title }}>\r\n {currentLanguageGeneralForm.title}\r\n </Typography>\r\n <div className={classes.location}>\r\n <LocationOnOutlinedIcon className={classes.locationIcon} />\r\n <Typography variant=\"body1\" className={classes.locationText}>\r\n {activity.generalForm.startingPoint}\r\n </Typography>\r\n </div>\r\n <div className={classes.editSection}>\r\n {activity.scheduleType === SCHEDULE_DATE_NO_TIME_NAME && (\r\n <div className={classNames(classes.date, classes.item)}>\r\n <Field\r\n name={`activities[${activityIndex}].multiDates`}\r\n label=\"Select date\"\r\n initialFocus=\"startDate\"\r\n dateRangePickerClass=\"dateRangeOpenedPicker\"\r\n inputClassName={classes.disableInputFocus}\r\n availableRange={getAvailableRangeDates(activity)}\r\n disabledDates={getDisabledDates(\r\n availableParticipantsData,\r\n null,\r\n activity\r\n )}\r\n changeMonthsCallback={changeMonthHandler}\r\n numberOfMonths={\r\n windowWidth > 1010 || windowWidth <= 750 ? 1 : 2\r\n }\r\n daySize={windowWidth > 600 ? 38 : 41}\r\n labelTypographyVariant=\"h3\"\r\n component={MultiDatePickerCalendar}\r\n labelClass={classes.label}\r\n cutoffData={activity[activity.scheduleType]}\r\n />\r\n </div>\r\n )}\r\n {activity.scheduleType === SCHEDULE_DATE_AND_TIME_NAME && (\r\n <div className={classNames(classes.date, classes.item)}>\r\n <Field\r\n name={`activities[${activityIndex}].startingDate`}\r\n label=\"Select date\"\r\n availableRange={getAvailableRangeDates(activity)}\r\n disabledDates={getDisabledDates(\r\n availableParticipantsData,\r\n null,\r\n activity\r\n )}\r\n changeMonthsCallback={changeMonthHandler}\r\n numberOfMonths={\r\n windowWidth > 1010 || windowWidth <= 750 ? 1 : 2\r\n }\r\n daySize={windowWidth > 600 ? 38 : 41}\r\n labelTypographyVariant=\"h3\"\r\n component={SingleDatePicker}\r\n labelClass={classes.label}\r\n cutoffData={activity[activity.scheduleType]}\r\n />\r\n </div>\r\n )}\r\n {!!reduxActivity.participants && (\r\n <div className={classes.item}>\r\n <FieldArray\r\n name={`activities[${activityIndex}].participants`}\r\n title=\"Guests\"\r\n isUpdate={isUpdate}\r\n currency={currency}\r\n wrapperClass={classes.visitorsWrapperClass}\r\n itemClass={classes.visitItem}\r\n titleClass={classes.label}\r\n component={Visitors}\r\n />\r\n </div>\r\n )}\r\n {!!listStartTimeAndDuration.length && (\r\n <div className={classes.item}>\r\n <Typography\r\n variant=\"h3\"\r\n className={classes.availabilityTitle}\r\n >\r\n {t('Start time & Duration')}\r\n </Typography>\r\n <Field\r\n name={`activities[${activityIndex}].startTime`}\r\n list={getStartTimeAndDuration()}\r\n component={RadioButtonsGroup}\r\n labelClass={classes.availabilityLabel}\r\n isId={true}\r\n checkboxTitleField=\"title\"\r\n radioGroupRootClass={classes.radioGroupRoot}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n <div>\r\n {reduxActivity.addOns && !!reduxActivity.addOns.length && (\r\n <Typography\r\n variant=\"h3\"\r\n classes={{ root: classes.sectionTitleIndent }}\r\n >\r\n {t('Add-ons')}\r\n </Typography>\r\n )}\r\n <FieldArray\r\n name={`activities[${activityIndex}].addOns`}\r\n currency={currency}\r\n wrapperClass={classes.addOnWrapperClass}\r\n addOnItemClass={classes.addOnItemClass}\r\n addOnDescClass={classes.addOnDescClass}\r\n isWidget={true}\r\n component={AddOnsList}\r\n />\r\n </div>\r\n <BookInfoList\r\n activity={activity}\r\n currency={currency}\r\n defaultExpanded={false}\r\n firstDefaultExpanded={true}\r\n isOverview={true}\r\n isImage={true}\r\n />\r\n </div>\r\n )}\r\n\r\n <Footer\r\n isHiddenNavigation={true}\r\n isAccommodationBooking={true}\r\n isSelectedProduct={false}\r\n cancelButton={isSelected ? 'Remove Activity' : 'Cancel Activity'}\r\n confirmButton={isSelected ? 'Save Activity' : 'Add Activity'}\r\n cancelCallback={() => cancelActivity(isSelected)}\r\n accommodationData={accommodationData}\r\n />\r\n </form>\r\n </Dialog>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n widgetForm: state.form.widgetForm\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('widgetForm', field, value));\r\n },\r\n stopSubmitForm: () => {\r\n dispatch(stopSubmit('widgetForm', {}));\r\n },\r\n untouchFormFields: fields => {\r\n dispatch(untouch('widgetForm', ...fields));\r\n },\r\n updateFormErrors: () => dispatch(updateSyncErrors('widgetForm', {}))\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'widgetForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate\r\n})(connect(mapStateToProps, mapDispatchToProps)(ActivityDialog));\r\n","import moment from 'moment';\r\n\r\nconst validate = (values, props) => {\r\n const errors = {};\r\n\r\n const accommodationIndex = props.initialValues.index;\r\n const accommodation = values.activities[accommodationIndex];\r\n\r\n if (!accommodation) return errors;\r\n\r\n if (\r\n !accommodation.dates ||\r\n !accommodation.dates.startDate ||\r\n !accommodation.dates.endDate\r\n ) {\r\n errors.dates = 'Dates are required';\r\n } else if (\r\n moment(accommodation.dates.endDate).diff(\r\n accommodation.dates.startDate,\r\n 'days'\r\n ) < accommodation.minNights\r\n ) {\r\n errors.dates = {\r\n text: 'The number of nights cannot be less than',\r\n variables: { number: accommodation.minNights }\r\n };\r\n }\r\n\r\n if (accommodation.participants && accommodation.participants.length) {\r\n let participantsArrayErrors = [];\r\n let isValidParticipants = false;\r\n\r\n accommodation.participants.forEach((item, index) => {\r\n if (item.participants && parseInt(item.participants) > 0) {\r\n isValidParticipants = true;\r\n }\r\n\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (!isValidParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: 'Value for at least one category should be filled in'\r\n };\r\n }\r\n }\r\n\r\n if (\r\n !errors.participants &&\r\n accommodation.participants &&\r\n accommodation.participants.length\r\n ) {\r\n const availableParticipants = accommodation.startTime\r\n ? accommodation.startTime.seatsLeft\r\n : accommodation.maxParticipants;\r\n const participantsArrayErrors = [];\r\n let totalParticipants = 0;\r\n\r\n accommodation.participants.forEach((item, index) => {\r\n if (item.participants && item.participants.length) {\r\n totalParticipants += parseInt(item.participants);\r\n }\r\n participantsArrayErrors[index] = { participants: 'Error' };\r\n });\r\n\r\n if (totalParticipants > availableParticipants) {\r\n errors.participants = {\r\n ...participantsArrayErrors,\r\n _error: `The number of Guests can’t exceed ${availableParticipants}`\r\n };\r\n }\r\n }\r\n\r\n if (!!Object.keys(errors).length) {\r\n const errorsCopy = { ...errors };\r\n errors.activities = {\r\n [accommodationIndex]: errorsCopy\r\n };\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import React, { useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\nimport moment from 'moment';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n change,\r\n stopSubmit,\r\n Field,\r\n FieldArray,\r\n reduxForm,\r\n untouch,\r\n updateSyncErrors\r\n} from 'redux-form';\r\nimport { useQuery } from '@apollo/react-hooks';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport { Typography } from '@material-ui/core';\r\nimport LocationOnOutlinedIcon from '@material-ui/icons/LocationOnOutlined';\r\n\r\nimport { ACCOMMODATION, BOOK_DATES } from 'graphql/queries/accommodations';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport {\r\n BookInfoList,\r\n CircularLoader,\r\n CustomDateRangePicker\r\n} from 'components';\r\n\r\nimport Header from 'pages/widget/components/header/Header';\r\nimport Footer from 'pages/widget/components/footer/Footer';\r\nimport Visitors from 'pages/widget/components/visiters/Visiters';\r\n\r\nimport {\r\n CATEGORY_PRICES,\r\n DAILY_PRICES,\r\n FIXED_PRICES\r\n} from 'pages/widget/constants';\r\n\r\nimport {\r\n getAvailableRangeDates as getAccommodationAvailableRangeDates,\r\n getDisabledDates as getAccommodationDisabledDates\r\n} from 'utils/book-accommodation/availableDates';\r\nimport { getReceivedAccommodationData } from 'utils/accommodations-and-activities/prepareReceivedAccommodationData';\r\nimport { getParticipants as getAccommodationParticipants } from 'utils/book-accommodation/prepareParticipants';\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport AddOnsList from 'pages/book-activity/components/add-ons-list/AddOnsList';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles } from '../styles';\r\n\r\nconst AccommodationDialog = ({\r\n open,\r\n activityData,\r\n closeDialogCallback,\r\n initialValues,\r\n widgetForm,\r\n changeFormFieldValue,\r\n stopSubmitForm,\r\n untouchFormFields,\r\n handleSubmit,\r\n ownerId,\r\n updateFormErrors,\r\n logo\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n const confirm = React.useContext(ConfirmContext);\r\n\r\n const currency = widgetForm.values.currency;\r\n const accommodationIndex = initialValues.index;\r\n const reduxAccommodations = widgetForm.values.activities;\r\n const reduxAccommodation = reduxAccommodations[accommodationIndex];\r\n\r\n const [accommodation, setAccommodation] = React.useState(null);\r\n const [previousSelectedIndex, setPreviousSelectedIndex] = React.useState(\r\n null\r\n );\r\n const [windowWidth, setWindowWidth] = React.useState(window.innerWidth);\r\n const [isSelected, setIsSelected] = React.useState(false);\r\n\r\n const dates = reduxAccommodation.dates;\r\n const startDate = (dates && dates.startDate) || moment();\r\n\r\n React.useLayoutEffect(() => {\r\n const updateSize = () => {\r\n setWindowWidth(window.innerWidth);\r\n };\r\n window.addEventListener('resize', updateSize);\r\n updateSize();\r\n return () => window.removeEventListener('resize', updateSize);\r\n }, []);\r\n\r\n const { loading, data } = useQuery(ACCOMMODATION, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n accommodationId: initialValues.id,\r\n businessOwnerId: ownerId\r\n }\r\n });\r\n\r\n const {\r\n loading: bookDatesLoading,\r\n data: bookDatesData,\r\n refetch: bookDatesRefetch\r\n } = useQuery(BOOK_DATES, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n businessOwnerId: ownerId,\r\n accommodationId: initialValues.id,\r\n startPeriod: moment(startDate)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(startDate).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n }\r\n });\r\n\r\n React.useEffect(() => {\r\n setIsSelected(reduxAccommodation.isSelected);\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n if (!data || !data.accommodations.length) return;\r\n\r\n const receivedAccommodation = data.accommodations[0];\r\n const accommodationData = getReceivedAccommodationData(\r\n receivedAccommodation\r\n );\r\n const firstPrice = receivedAccommodation.prices[0];\r\n\r\n if (firstPrice.participant.participant) {\r\n accommodationData['pricesType'] = CATEGORY_PRICES;\r\n } else if (firstPrice.day) {\r\n accommodationData['pricesType'] = DAILY_PRICES;\r\n } else {\r\n accommodationData['pricesType'] = FIXED_PRICES;\r\n }\r\n\r\n setMaxGuests(accommodationData);\r\n setParticipants(accommodationData);\r\n\r\n const previousIndex = reduxAccommodations.findIndex(\r\n item => item.isSelected\r\n );\r\n\r\n if (\r\n (previousIndex || previousIndex === 0) &&\r\n previousIndex !== accommodationIndex\r\n ) {\r\n changeFormFieldValue(`activities[${previousIndex}].isSelected`, false);\r\n }\r\n\r\n changeFormFieldValue(`activities[${accommodationIndex}].isSelected`, true);\r\n\r\n changeFormFieldValue(\r\n `activities[${accommodationIndex}].minNights`,\r\n accommodationData.generalForm.minNights\r\n );\r\n\r\n setAddOns(accommodationData);\r\n\r\n setPreviousSelectedIndex(previousIndex);\r\n setAccommodation(accommodationData);\r\n }, [data]);\r\n\r\n useEffect(() => {\r\n if (!accommodation || !reduxAccommodation) return;\r\n setParticipants(accommodation);\r\n }, [reduxAccommodation.dates]);\r\n\r\n const setAddOns = accommodationData => {\r\n if (!reduxAccommodation.addOns || !reduxAccommodation.addOns.length) {\r\n const addOnsList = accommodationData.addOnsForm.addOns.map(item => {\r\n return {\r\n ...item,\r\n value: 0\r\n };\r\n });\r\n changeFormFieldValue(\r\n `activities[${accommodationIndex}].addOns`,\r\n addOnsList\r\n );\r\n }\r\n };\r\n\r\n const setMaxGuests = accommodation => {\r\n if (!accommodation) return;\r\n\r\n const guests = accommodation.generalForm.guests;\r\n changeFormFieldValue(\r\n `activities[${accommodationIndex}].maxParticipants`,\r\n guests\r\n );\r\n };\r\n\r\n const setParticipants = accommodation => {\r\n if (!accommodation) return;\r\n\r\n const currency = widgetForm.values.currency;\r\n const dates = reduxAccommodation.dates;\r\n const previousParticipants = reduxAccommodation.participants || [];\r\n\r\n if (dates && dates.startDate && dates.endDate) {\r\n const participants = getAccommodationParticipants(\r\n accommodation,\r\n currency,\r\n previousParticipants,\r\n dates\r\n );\r\n\r\n changeFormFieldValue(\r\n `activities[${accommodationIndex}].participants`,\r\n participants\r\n );\r\n } else {\r\n changeFormFieldValue(\r\n `activities[${accommodationIndex}].participants`,\r\n []\r\n );\r\n }\r\n };\r\n\r\n const changeMonthHandler = date => {\r\n bookDatesRefetch({\r\n businessOwnerId: ownerId,\r\n accommodationId: initialValues.id,\r\n startPeriod: moment(date)\r\n .startOf('month')\r\n .format('YYYY-MM-DD'),\r\n endPeriod: moment(moment(date).add(1, 'months'))\r\n .endOf('month')\r\n .format('YYYY-MM-DD')\r\n });\r\n };\r\n\r\n const cancelAccommodation = isRemove => {\r\n const title = isRemove\r\n ? 'Are you sure you want to remove it?'\r\n : 'Are you sure you want to cancel it?';\r\n const confirmationText = isRemove ? 'Remove' : 'Cancel';\r\n confirm({\r\n title: title,\r\n confirmationText: confirmationText,\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n changeFormFieldValue(`activities[${accommodationIndex}].dates`, null);\r\n changeFormFieldValue(\r\n `activities[${accommodationIndex}].participants`,\r\n []\r\n );\r\n\r\n changeFormFieldValue(\r\n `activities[${accommodationIndex}].isSelected`,\r\n false\r\n );\r\n\r\n if (\r\n (previousSelectedIndex || previousSelectedIndex === 0) &&\r\n previousSelectedIndex !== accommodationIndex\r\n ) {\r\n changeFormFieldValue(\r\n `activities[${previousSelectedIndex}].isSelected`,\r\n true\r\n );\r\n }\r\n\r\n untouchFormFields([`activities[${accommodationIndex}].dates`]);\r\n updateFormErrors();\r\n stopSubmitForm();\r\n\r\n closeDialogCallback();\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const saveActivity = () => {\r\n if (widgetForm.syncErrors) return;\r\n\r\n if (\r\n (previousSelectedIndex || previousSelectedIndex === 0) &&\r\n previousSelectedIndex !== accommodationIndex\r\n ) {\r\n untouchFormFields([`activities[${previousSelectedIndex}].dates`]);\r\n stopSubmitForm();\r\n }\r\n\r\n const accommodations = reduxAccommodations.map((item, index) => {\r\n item.isSelected = index === accommodationIndex;\r\n\r\n if (item.isSelected) return item;\r\n\r\n return {\r\n ...item,\r\n dates: null,\r\n participants: []\r\n };\r\n });\r\n\r\n changeFormFieldValue(`activities`, [...accommodations]);\r\n closeDialogCallback();\r\n };\r\n\r\n const currentLanguageGeneralForm = accommodation\r\n ? getFormByCurrentLanguage(\r\n i18n.language,\r\n accommodation.generalForm,\r\n accommodation['generalForm-Norwegian']\r\n )\r\n : {};\r\n\r\n return (\r\n <Dialog open={open} classes={{ paper: classes.paper }}>\r\n <form onSubmit={handleSubmit(saveActivity)} className={classes.form}>\r\n <CircularLoader\r\n isLoading={loading || bookDatesLoading}\r\n loaderClassName={classes.loaderClassName}\r\n />\r\n\r\n <Header\r\n logo={logo}\r\n cancelCallback={cancelAccommodation}\r\n title={t('Book your accommodation')}\r\n />\r\n\r\n {accommodation && (\r\n <div className={classes.content}>\r\n <Typography variant=\"h2\" classes={{ root: classes.title }}>\r\n {currentLanguageGeneralForm.title}\r\n </Typography>\r\n <div className={classes.location}>\r\n <LocationOnOutlinedIcon className={classes.locationIcon} />\r\n <Typography variant=\"body1\" className={classes.locationText}>\r\n {accommodation.generalForm.location}\r\n </Typography>\r\n </div>\r\n <div className={classes.editSection}>\r\n <div className={classNames(classes.editItem, classes.rangeDates)}>\r\n <Field\r\n name={`activities[${accommodationIndex}].dates`}\r\n availableRange={getAccommodationAvailableRangeDates(\r\n accommodation\r\n )}\r\n disabledDates={getAccommodationDisabledDates(bookDatesData)}\r\n changeMonthsCallback={changeMonthHandler}\r\n inputClassName={classes.disableInputFocus}\r\n label=\"Select dates\"\r\n initialFocus=\"startDate\"\r\n dateRangePickerClass=\"dateRangeOpenedPicker\"\r\n numberOfMonths={\r\n windowWidth > 1010 || windowWidth <= 750 ? 1 : 2\r\n }\r\n daySize={windowWidth > 600 ? 38 : 41}\r\n isHideDatesLabel={true}\r\n secondLabelClass={classes.label}\r\n labelTypographyVariant=\"h3\"\r\n component={CustomDateRangePicker}\r\n accomodationDialog\r\n />\r\n </div>\r\n <div className={classes.editItem}>\r\n <FieldArray\r\n name={`activities[${accommodationIndex}].participants`}\r\n title=\"Guests\"\r\n currency={currency}\r\n wrapperClass={classes.visitorsWrapperClass}\r\n itemClass={classes.visitItem}\r\n titleClass={classes.label}\r\n component={Visitors}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div>\r\n {reduxAccommodation.addOns && !!reduxAccommodation.addOns.length && (\r\n <Typography\r\n variant=\"h3\"\r\n classes={{ root: classes.sectionTitleIndent }}\r\n >\r\n {t('Add-ons')}\r\n </Typography>\r\n )}\r\n <FieldArray\r\n name={`activities[${accommodationIndex}].addOns`}\r\n currency={currency}\r\n wrapperClass={classes.addOnWrapperClass}\r\n addOnItemClass={classes.addOnItemClass}\r\n addOnDescClass={classes.addOnDescClass}\r\n isWidget={true}\r\n component={AddOnsList}\r\n />\r\n </div>\r\n <BookInfoList\r\n activity={accommodation}\r\n currency={currency}\r\n defaultExpanded={false}\r\n firstDefaultExpanded={true}\r\n isOverview={true}\r\n isImage={true}\r\n />\r\n </div>\r\n )}\r\n\r\n <Footer\r\n isHiddenNavigation={true}\r\n isAccommodationBooking={false}\r\n isSelectedProduct={false}\r\n cancelButton={\r\n isSelected ? 'Remove Accommodation' : 'Cancel Accommodation'\r\n }\r\n confirmButton={\r\n isSelected ? 'Save Accommodation' : 'Add Accommodation'\r\n }\r\n cancelCallback={() => cancelAccommodation(isSelected)}\r\n accommodationData={activityData}\r\n />\r\n </form>\r\n </Dialog>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n widgetForm: state.form.widgetForm\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('widgetForm', field, value));\r\n },\r\n stopSubmitForm: () => {\r\n dispatch(stopSubmit('widgetForm', {}));\r\n },\r\n untouchFormFields: fields => {\r\n dispatch(untouch('widgetForm', ...fields));\r\n },\r\n updateFormErrors: () => dispatch(updateSyncErrors('widgetForm', {}))\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'widgetForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate\r\n})(connect(mapStateToProps, mapDispatchToProps)(AccommodationDialog));\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n wrapper: {\r\n display: 'flex',\r\n overflowY: 'auto',\r\n padding: '18px 40px 0',\r\n margin: '-18px 0 0',\r\n height: 'calc(100% - 125px)',\r\n ['@media (max-width:1010px)']: {\r\n padding: '18px 0 0 40px',\r\n height: 'calc(100% - 125px)'\r\n },\r\n ['@media (max-width:850px)']: {\r\n padding: '0 0 0 40px',\r\n margin: '0px',\r\n height: 'calc(100% - 64px)'\r\n },\r\n ['@media (max-width:600px)']: {\r\n padding: '0 0 0 15px',\r\n height: 'calc(100% - 102px)'\r\n }\r\n },\r\n leftSide: {\r\n width: '100%',\r\n padding: '0 40px 0 1px',\r\n ['@media (max-width:1010px)']: {\r\n paddingRight: '40px'\r\n },\r\n ['@media (max-width:850px)']: {\r\n marginTop: 0\r\n },\r\n ['@media (max-width:600px)']: {\r\n paddingRight: '15px',\r\n marginTop: 0\r\n }\r\n },\r\n rightSide: {\r\n width: '300px',\r\n minWidth: '300px',\r\n ['@media (max-width:1010px)']: {\r\n display: 'none'\r\n }\r\n },\r\n sectionTitleIndent: {\r\n marginBottom: '20px',\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em'\r\n },\r\n filterSection: {\r\n display: 'flex',\r\n alignItems: 'baseline',\r\n margin: '0 0 10px'\r\n },\r\n filterTitle: {\r\n margin: '0 20px 0 0'\r\n },\r\n selectDropDown: {\r\n fontSize: '14px'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { change, FieldArray, reduxForm } from 'redux-form';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport ActivitiesList from '../activities-list/ActivitiesList';\r\nimport BookingInformation from '../booking-information/BookingInformation';\r\nimport ActivityDialog from '../related-product-dialog/activity-dialog/ActivityDialog';\r\nimport AccommodationDialog from '../related-product-dialog/accommodation-dialog/AccommodationDialog';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst initialValues = {\r\n activities: []\r\n};\r\n\r\nconst Products = ({\r\n productData,\r\n widgetForm,\r\n changeFormFieldValue,\r\n handleSubmit,\r\n isAccommodationBooking,\r\n ownerId,\r\n logo\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const [isOpenProductDialog, setIsOpenProductDialog] = React.useState(false);\r\n const [selectedProduct, setSelectedProduct] = React.useState(null);\r\n\r\n const currency = widgetForm.values.currency;\r\n\r\n React.useEffect(() => {\r\n setActivities(productData);\r\n }, [productData]);\r\n\r\n const setActivities = product => {\r\n const relatedProducts = isAccommodationBooking\r\n ? product.relatedActivitiesForm.relatedActivities\r\n : product.relatedAccommodationsForm.relatedAccommodations;\r\n\r\n const createdRelatedProducts = widgetForm.values.activities;\r\n\r\n if (createdRelatedProducts && createdRelatedProducts.length) return;\r\n\r\n changeFormFieldValue('activities', relatedProducts);\r\n };\r\n\r\n const selectProduct = (item, index) => {\r\n setSelectedProduct({\r\n ...item,\r\n index: index\r\n });\r\n setIsOpenProductDialog(true);\r\n };\r\n\r\n const closeProductDialog = () => {\r\n setIsOpenProductDialog(false);\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper}>\r\n {isAccommodationBooking ? (\r\n <div>\r\n {isOpenProductDialog && (\r\n <ActivityDialog\r\n ownerId={ownerId}\r\n open={isOpenProductDialog}\r\n initialValues={selectedProduct}\r\n closeDialogCallback={closeProductDialog}\r\n accommodationData={productData}\r\n logo={logo}\r\n />\r\n )}\r\n </div>\r\n ) : (\r\n <div>\r\n {isOpenProductDialog && (\r\n <AccommodationDialog\r\n ownerId={ownerId}\r\n open={isOpenProductDialog}\r\n initialValues={selectedProduct}\r\n closeDialogCallback={closeProductDialog}\r\n activityData={productData}\r\n logo={logo}\r\n />\r\n )}\r\n </div>\r\n )}\r\n\r\n <div className={classes.leftSide}>\r\n <form onSubmit={handleSubmit}>\r\n <Typography\r\n variant=\"h3\"\r\n classes={{ root: classes.sectionTitleIndent }}\r\n >\r\n {isAccommodationBooking\r\n ? t('Select activities')\r\n : t('Select accommodations')}\r\n </Typography>\r\n <FieldArray\r\n name=\"activities\"\r\n component={ActivitiesList}\r\n selectCallback={selectProduct}\r\n currency={currency}\r\n />\r\n </form>\r\n </div>\r\n <div className={classes.rightSide}>\r\n <BookingInformation data={productData} form={widgetForm} />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n widgetForm: state.form.widgetForm\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('widgetForm', field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'widgetForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n initialValues\r\n})(connect(mapStateToProps, mapDispatchToProps)(Products));\r\n","import gql from 'graphql-tag';\r\n\r\nexport const UPDATE_BOOKING_PAYMENT = gql`\r\n mutation updateBookingPayment(\r\n $activityId: Int\r\n $accommodationId: Int\r\n $isPaid: Boolean\r\n $clientSecret: String\r\n $activityBookingId: Int\r\n $accommodationBookingId: Int\r\n ) {\r\n updateBookingPayment(\r\n activityId: $activityId\r\n accommodationId: $accommodationId\r\n isPaid: $isPaid\r\n clientSecret: $clientSecret\r\n activityBookingId: $activityBookingId\r\n accommodationBookingId: $accommodationBookingId\r\n ) {\r\n success\r\n update\r\n }\r\n }\r\n`;\r\n\r\nexport const CANCEL_BOOKING_PAYMENT = gql`\r\n mutation cancelBookingPayment(\r\n $activityId: Int\r\n $accommodationId: Int\r\n $activityBookingId: Int\r\n $accommodationBookingId: Int\r\n ) {\r\n cancelBookingPayment(\r\n activityId: $activityId\r\n accommodationId: $accommodationId\r\n activityBookingId: $activityBookingId\r\n accommodationBookingId: $accommodationBookingId\r\n ) {\r\n status\r\n }\r\n }\r\n`;\r\n","import { PAY_ON_ARRIVAL, PAYPAL, STRIPE } from 'constants/widget';\r\n\r\nconst getAvailablePaymentsTypes = settingsData => {\r\n const paymentsTypes = [];\r\n\r\n if (settingsData.stripeSettings) {\r\n paymentsTypes.push(STRIPE);\r\n }\r\n\r\n if (settingsData.payPalSettings) {\r\n paymentsTypes.push(PAYPAL);\r\n }\r\n\r\n const payOnArrivalPossibility = settingsData.payOnArrivalPossibility;\r\n if (payOnArrivalPossibility && payOnArrivalPossibility.payOnArrival) {\r\n paymentsTypes.push(PAY_ON_ARRIVAL);\r\n }\r\n\r\n return paymentsTypes;\r\n};\r\n\r\nexport { getAvailablePaymentsTypes };\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nexport const useStyles = makeStyles(theme => ({\r\n content: {\r\n fontWeight: 'bold'\r\n },\r\n button: {\r\n backgroundColor: theme.baseUI.color,\r\n border: `1px solid ${theme.baseUI.color}`,\r\n color: '#fff',\r\n '&:hover': {\r\n backgroundColor: theme.baseUI.color\r\n }\r\n },\r\n buttonWrapper: {\r\n margin: '0 5px 5px 0'\r\n }\r\n}));\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Button from '@material-ui/core/Button';\r\n\r\nimport { useStyles } from './styles';\r\n\r\nexport const BookingConfirmDialog = ({ open, handleClose, title }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <Dialog\r\n open={open}\r\n onClose={handleClose}\r\n aria-labelledby=\"alert-dialog-title\"\r\n aria-describedby=\"alert-dialog-description\"\r\n >\r\n <DialogTitle id=\"alert-dialog-title\">\r\n {t('Your booking was successfully created!')}\r\n </DialogTitle>\r\n <DialogContent>\r\n <DialogContentText\r\n id=\"alert-dialog-description\"\r\n className={classes.content}\r\n >\r\n {t('Thank you for booking')} {title}!{' '}\r\n {t('The details of your booking will be sent to your email.')}\r\n </DialogContentText>\r\n </DialogContent>\r\n <DialogActions>\r\n <div className={classes.buttonWrapper}>\r\n <Button\r\n className={classes.button}\r\n variant=\"outlined\"\r\n onClick={handleClose}\r\n >\r\n Ok\r\n </Button>\r\n </div>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n};\r\n","import {\r\n isRequired,\r\n isEmail,\r\n isValidLength,\r\n isValidExpirationDate,\r\n isNumber\r\n} from 'utils/validators';\r\n\r\nconst CREDIT_CARD_AMOUNT_SYMBOLS = 18;\r\nconst EXPIRATION_DATE_AMOUNT_SYMBOLS = 4;\r\nconst CVV_AMOUNT_SYMBOLS = 2;\r\n\r\nconst validate = values => {\r\n const errors = {};\r\n\r\n if (isRequired(values.firstName || '', true)) {\r\n errors.firstName = 'First name is required';\r\n }\r\n\r\n if (isRequired(values.lastName || '', true)) {\r\n errors.lastName = 'Last name is required';\r\n }\r\n\r\n if (isRequired(values.phone || '', true)) {\r\n errors.phone = 'Phone is required';\r\n }\r\n\r\n if (isRequired(values.email || '', true)) {\r\n errors.email = 'Email is required';\r\n } else if (isEmail(values.email || '', true)) {\r\n errors.email = 'Invalid email';\r\n }\r\n\r\n if (isRequired(values.address || '', true)) {\r\n errors.address = 'Address is required';\r\n }\r\n\r\n if (isRequired(values.city || '', true)) {\r\n errors.city = 'City is required';\r\n }\r\n\r\n if (isRequired(values.zip || '', true)) {\r\n errors.zip = 'Zip is required';\r\n }\r\n\r\n if (isRequired(values.creditCard || '', true)) {\r\n errors.creditCard = 'Credit card is required';\r\n } else if (\r\n !isValidLength(values.creditCard, CREDIT_CARD_AMOUNT_SYMBOLS, true)\r\n ) {\r\n errors.creditCard = 'Invalid credit card';\r\n }\r\n\r\n if (isRequired(values.expirationDate || '', true)) {\r\n errors.expirationDate = 'Expiration date is required';\r\n } else if (\r\n !isValidLength(values.expirationDate, EXPIRATION_DATE_AMOUNT_SYMBOLS, true)\r\n ) {\r\n errors.expirationDate = 'Invalid expiration date';\r\n } else if (!isValidExpirationDate(values.expirationDate)) {\r\n errors.expirationDate = 'Invalid expiration date';\r\n }\r\n\r\n if (isNumber(values.cvv || '', true)) {\r\n errors.cvv = 'Cvv is required';\r\n } else if (!isValidLength(values.cvv, CVV_AMOUNT_SYMBOLS, true)) {\r\n errors.cvv = 'Invalid CVV';\r\n }\r\n\r\n return errors;\r\n};\r\n\r\nexport default validate;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n wrapper: {\r\n display: 'flex',\r\n overflowY: 'auto',\r\n padding: '18px 40px 0',\r\n margin: '-18px 0 0',\r\n height: 'calc(100% - 125px)',\r\n ['@media (max-width:1010px)']: {\r\n padding: '18px 0 0 40px',\r\n height: 'calc(100% - 125px)'\r\n },\r\n ['@media (max-width:850px)']: {\r\n padding: '0 0 0 40px',\r\n margin: '0px',\r\n height: 'calc(100% - 113px)'\r\n },\r\n ['@media (max-width:600px)']: {\r\n padding: '0 15px 0 15px',\r\n height: 'calc(100% - 151px)',\r\n flexDirection: 'column-reverse'\r\n }\r\n },\r\n leftSide: {\r\n width: '100%',\r\n padding: '0 40px 0 1px',\r\n ['@media (max-width:1010px)']: {\r\n paddingRight: '40px'\r\n },\r\n ['@media (max-width:850px)']: {\r\n marginTop: 0\r\n },\r\n ['@media (max-width:600px)']: {\r\n paddingRight: '15px',\r\n marginTop: 0\r\n }\r\n },\r\n rightSide: {\r\n width: '300px',\r\n minWidth: '300px',\r\n ['@media (max-width:600px)']: {\r\n marginBottom: '70px'\r\n }\r\n },\r\n title: {\r\n textTransform: 'uppercase',\r\n letterSpacing: '0.05em',\r\n marginBottom: '20px'\r\n },\r\n sectionTitleIndent: {\r\n marginBottom: '15px'\r\n },\r\n checkoutWrapper: {\r\n padding: 0\r\n },\r\n checkoutList: {\r\n maxHeight: '390px'\r\n },\r\n form: {\r\n margin: '3px 0 15px'\r\n },\r\n row: {\r\n display: 'flex',\r\n justifyContent: 'space-between'\r\n },\r\n fieldFullWidth: {\r\n marginBottom: '18px',\r\n width: '100%'\r\n },\r\n field: {\r\n marginBottom: '18px',\r\n width: '47%'\r\n },\r\n shortField: {\r\n marginBottom: '18px',\r\n width: '24%'\r\n },\r\n longField: {\r\n marginBottom: '18px',\r\n width: '70%'\r\n },\r\n inputLabel: {\r\n fontWeight: 'bold'\r\n },\r\n expirationDateField: {\r\n width: '30%'\r\n },\r\n cvvField: {\r\n width: '17%'\r\n },\r\n userSection: {\r\n marginBottom: '15px'\r\n },\r\n radioButtons: {\r\n marginBottom: '5px'\r\n },\r\n expansionPanelDetailsRoot: {\r\n minHeight: '34px',\r\n padding: '20px 24px'\r\n },\r\n emptyExpansionPanelDetailsRoot: {\r\n minHeight: \"unset\",\r\n height: 0,\r\n padding: 0\r\n },\r\n expansionPanelRoot: {\r\n marginBottom: '12px !important',\r\n boxShadow: 'none',\r\n border: `1px solid ${theme.baseUI.color}`,\r\n overflow: 'hidden'\r\n },\r\n expPanelSummaryRoot: {\r\n minHeight: '55px !important'\r\n },\r\n expPanelSummaryExpanded: {\r\n borderBottom: `1px solid ${theme.baseUI.color}`,\r\n position: 'relative',\r\n '&:after': {\r\n display: 'block',\r\n content: '\"\"',\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n background: theme.baseUI.color,\r\n width: '100%',\r\n height: '100%',\r\n opacity: '.1'\r\n }\r\n },\r\n emptyExpPanelSummaryExpanded: {\r\n border: 0\r\n },\r\n expPanelSummaryContent: {\r\n border: 0,\r\n background: 'transparent',\r\n margin: '0 !important',\r\n position: 'relative',\r\n '&:after': {\r\n display: 'block',\r\n content: '\"\"',\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n background: 'transparent',\r\n width: '100%',\r\n height: '100%',\r\n opacity: '.1'\r\n }\r\n },\r\n expLabel: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n color: '#071B27'\r\n },\r\n fee: {\r\n color: '#3E5F77',\r\n fontWeight: 'normal'\r\n }\r\n}));\r\n\r\nconst radioBtnStyles = makeStyles(theme => ({\r\n root: {\r\n color: theme.baseUI.color,\r\n fontSize: 18\r\n },\r\n checked: {\r\n color: theme.baseUI.color\r\n }\r\n}));\r\n\r\nexport { useStyles, radioBtnStyles };\r\n","import React, { useRef } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport ReactDOM from 'react-dom';\r\nimport classNames from 'classnames';\r\nimport { connect } from 'react-redux';\r\nimport { useSnackbar } from 'notistack';\r\nimport { change, Field, reduxForm, reset } from 'redux-form';\r\n\r\nimport { PayPalButton } from 'react-paypal-button-v2';\r\nimport {\r\n CardElement,\r\n Elements,\r\n useElements,\r\n useStripe\r\n} from '@stripe/react-stripe-js';\r\nimport { loadStripe } from '@stripe/stripe-js/pure';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport { useMutation } from '@apollo/react-hooks';\r\n\r\nimport {\r\n PAYPAL,\r\n STRIPE,\r\n PAY_ON_ARRIVAL,\r\n WIDGET_ROOT,\r\n WIDGET_WRAPPER_ID\r\n} from 'constants/widget';\r\n\r\nimport { CREATE_ACCOMMODATION_BOOKING } from 'graphql/mutations/accommodations-bookings';\r\nimport { CREATE_ACTIVITY_BOOKING } from 'graphql/mutations/activities-bookings';\r\nimport { UPDATE_BOOKING_PAYMENT } from 'graphql/mutations/booking-payment';\r\n\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport Radio from '@material-ui/core/Radio';\r\n\r\nimport { getPreparedBookAccommodationData } from 'utils/book-accommodation/prepareBookAccommodationData';\r\nimport { getPreparedBookActivityData } from 'utils/book-activity/prepareBookActivityData';\r\nimport { getWidgetTotalPrice } from 'utils/widget/getTotalPrice';\r\nimport { getAvailablePaymentsTypes } from 'utils/widget/getAvailablePaymentsTypes';\r\n\r\nimport BookingInformation from '../booking-information/BookingInformation';\r\n\r\nimport { Input } from 'components';\r\nimport { BookingConfirmDialog } from '../booking-confirm-dialog/BookingConfirmDialog';\r\n\r\nimport { LOCALES_OBJ, PAYPAL_LOCALES_OBJ } from 'constants/base';\r\n\r\nimport validate from './validate';\r\n\r\nimport { useStyles, radioBtnStyles } from './styles';\r\n\r\nconst UserInformation = () => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classes.userSection}>\r\n <Typography variant=\"h3\" classes={{ root: classes.sectionTitleIndent }}>\r\n {t('Your information')}\r\n </Typography>\r\n <div className={classes.row}>\r\n <Field\r\n name=\"firstName\"\r\n label=\"First name\"\r\n placeholder=\"First name\"\r\n className={classes.field}\r\n labelClass={classes.inputLabel}\r\n component={Input}\r\n />\r\n <Field\r\n name=\"lastName\"\r\n label=\"Last name\"\r\n placeholder=\"Last name\"\r\n className={classes.field}\r\n labelClass={classes.inputLabel}\r\n component={Input}\r\n />\r\n </div>\r\n <div className={classes.row}>\r\n <Field\r\n name=\"phone\"\r\n label=\"Phone\"\r\n placeholder=\"Phone\"\r\n className={classes.field}\r\n labelClass={classes.inputLabel}\r\n isOnlyNumber={true}\r\n isPhoneNumber={true}\r\n maxLength={20}\r\n component={Input}\r\n />\r\n <Field\r\n name=\"email\"\r\n label=\"Email\"\r\n placeholder=\"Email\"\r\n className={classes.field}\r\n labelClass={classes.inputLabel}\r\n component={Input}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst BillingInformation = () => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n return (\r\n <div className={classes.userSection}>\r\n <Typography variant=\"h3\" classes={{ root: classes.sectionTitleIndent }}>\r\n {t('Billing information')}\r\n </Typography>\r\n <div className={classes.row}>\r\n <Field\r\n name=\"address\"\r\n label=\"Address\"\r\n placeholder=\"Address\"\r\n className={classes.fieldFullWidth}\r\n labelClass={classes.inputLabel}\r\n component={Input}\r\n />\r\n </div>\r\n <div className={classes.row}>\r\n <Field\r\n name=\"city\"\r\n label=\"City\"\r\n placeholder=\"City\"\r\n className={classes.longField}\r\n labelClass={classes.inputLabel}\r\n component={Input}\r\n />\r\n <Field\r\n name=\"zip\"\r\n label=\"Zip\"\r\n placeholder=\"Zip\"\r\n className={classes.shortField}\r\n labelClass={classes.inputLabel}\r\n isOnlyNumber={true}\r\n maxLength={12}\r\n component={Input}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst CreditCardInformation = ({\r\n settingsData,\r\n paymentType,\r\n isSubmit,\r\n setIsSubmit,\r\n submitCallback,\r\n currency,\r\n totalPrice,\r\n changeFormFieldValue\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n const radioBtnSClasses = radioBtnStyles();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n const paymentsTypes = getAvailablePaymentsTypes(settingsData);\r\n\r\n const [isInit, setIsInit] = React.useState(true);\r\n\r\n React.useEffect(() => {\r\n if (isInit) {\r\n setIsInit(false);\r\n return;\r\n }\r\n const _paymentType = paymentType;\r\n changeFormFieldValue('paymentType', '');\r\n setTimeout(() => {\r\n changeFormFieldValue('paymentType', _paymentType);\r\n });\r\n }, [selectedLanguage]);\r\n\r\n return (\r\n <div>\r\n <Typography variant=\"h3\" classes={{ root: classes.sectionTitleIndent }}>\r\n {t('Payment method')}\r\n </Typography>\r\n\r\n {paymentsTypes.map((item, index) => {\r\n return (\r\n <div key={index}>\r\n <Accordion\r\n expanded={paymentType === item}\r\n classes={{ root: classes.expansionPanelRoot }}\r\n >\r\n <AccordionSummary\r\n classes={{\r\n root: classes.expPanelSummaryRoot,\r\n expanded: classNames(classes.expPanelSummaryExpanded, {\r\n [classes.emptyExpPanelSummaryExpanded]:\r\n item === PAY_ON_ARRIVAL\r\n }),\r\n content: classes.expPanelSummaryContent\r\n }}\r\n onClick={() => changeFormFieldValue('paymentType', item)}\r\n aria-label=\"Expand\"\r\n aria-controls=\"additional-actions1-content\"\r\n id=\"additional-actions1-header\"\r\n >\r\n <FormControlLabel\r\n control={\r\n <Radio\r\n color=\"default\"\r\n classes={radioBtnSClasses}\r\n checked={paymentType === item}\r\n />\r\n }\r\n label={\r\n <Typography variant={'h3'} className={classes.expLabel}>\r\n {t(item)}{' '}\r\n {item !== PAY_ON_ARRIVAL && (\r\n <span className={classes.fee}>\r\n {t('Transaction fee may apply')}\r\n </span>\r\n )}\r\n </Typography>\r\n }\r\n />\r\n </AccordionSummary>\r\n <AccordionDetails\r\n classes={{\r\n root: classNames(classes.expansionPanelDetailsRoot, {\r\n [classes.emptyExpansionPanelDetailsRoot]:\r\n item === PAY_ON_ARRIVAL\r\n })\r\n }}\r\n >\r\n {item === STRIPE && paymentType === STRIPE && (\r\n <MemoStripePayment\r\n isSubmit={isSubmit}\r\n setIsSubmit={setIsSubmit}\r\n submitCallback={submitCallback}\r\n settingsData={settingsData}\r\n selectedLanguage={selectedLanguage}\r\n />\r\n )}\r\n {item === PAYPAL && paymentType === PAYPAL && (\r\n <MemoPayPalPayment\r\n currency={currency}\r\n totalPrice={totalPrice}\r\n submitCallback={submitCallback}\r\n settingsData={settingsData}\r\n selectedLanguage={selectedLanguage}\r\n />\r\n )}\r\n </AccordionDetails>\r\n </Accordion>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nconst PayPalPayment = ({\r\n currency,\r\n totalPrice,\r\n submitCallback,\r\n settingsData,\r\n selectedLanguage\r\n}) => {\r\n const onSuccessHandler = (details, data) => {\r\n submitCallback(null, data);\r\n };\r\n\r\n return (\r\n <PayPalButton\r\n amount={totalPrice}\r\n onSuccess={onSuccessHandler}\r\n options={{\r\n clientId: settingsData.payPalSettings.clientId,\r\n currency: `${currency}`,\r\n locale: PAYPAL_LOCALES_OBJ[selectedLanguage]\r\n }}\r\n style={{\r\n layout: 'horizontal',\r\n height: 33,\r\n color: 'blue',\r\n tagline: false\r\n }}\r\n />\r\n );\r\n};\r\nconst MemoPayPalPayment = React.memo(PayPalPayment);\r\n\r\nconst StripePayment = ({\r\n isSubmit,\r\n setIsSubmit,\r\n submitCallback,\r\n settingsData,\r\n selectedLanguage\r\n}) => {\r\n return (\r\n <Elements\r\n stripe={loadStripe(settingsData.stripeSettings.publishableKey, {\r\n locale: LOCALES_OBJ[selectedLanguage]\r\n })}\r\n >\r\n <CardElementWrapper\r\n isSubmit={isSubmit}\r\n setIsSubmit={setIsSubmit}\r\n submitCallback={submitCallback}\r\n />\r\n </Elements>\r\n );\r\n};\r\nconst MemoStripePayment = React.memo(StripePayment);\r\n\r\nconst CardElementWrapper = ({ isSubmit, setIsSubmit, submitCallback }) => {\r\n const { enqueueSnackbar } = useSnackbar();\r\n\r\n const stripe = useStripe();\r\n const elements = useElements();\r\n\r\n React.useEffect(() => {\r\n if (!isSubmit) return;\r\n submit();\r\n }, [isSubmit]);\r\n\r\n const submit = async () => {\r\n const cardElement = elements.getElement(CardElement);\r\n\r\n const { error, paymentMethod } = await stripe.createPaymentMethod({\r\n type: 'card',\r\n card: cardElement\r\n });\r\n\r\n if (error) {\r\n enqueueSnackbar(error.message, {\r\n variant: 'error'\r\n });\r\n setIsSubmit(false);\r\n } else {\r\n submitCallback(paymentMethod);\r\n }\r\n };\r\n\r\n return (\r\n <CardElement\r\n options={{\r\n style: {\r\n base: {\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n '::placeholder': {\r\n color: '#A2A2A2'\r\n }\r\n }\r\n }\r\n }}\r\n />\r\n );\r\n};\r\n\r\nconst Payment = ({\r\n resetWidgetForm,\r\n widgetForm,\r\n productData,\r\n handleSubmit,\r\n setIsSubmit,\r\n isSubmit,\r\n isAccommodationBooking,\r\n settingsData,\r\n changeFormFieldValue\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const wrapperRef = useRef(null);\r\n const paymentType = widgetForm ? widgetForm.values.paymentType : '';\r\n const currency = widgetForm ? widgetForm.values.currency : '';\r\n const isPrivacy = widgetForm.values.isPrivacy || false;\r\n\r\n const [totalPrice, setTotalPrice] = React.useState(0);\r\n const [payPalData, setPayPalData] = React.useState(null);\r\n const [stripeData, setStripeData] = React.useState(null);\r\n const [clientSecret, setClientSecret] = React.useState('');\r\n const [activityBookingId, setActivityBookingId] = React.useState(0);\r\n const [accommodationBookingId, setAccommodationBookingId] = React.useState(\r\n ''\r\n );\r\n React.useEffect(() => {\r\n if (clientSecret) {\r\n window.removeEventListener('message', handleEventMessage);\r\n window.removeEventListener('msg', handleEventMessage);\r\n handleStripeAuth();\r\n }\r\n }, [clientSecret]);\r\n const [createAccommodationBooking] = useMutation(\r\n CREATE_ACCOMMODATION_BOOKING\r\n );\r\n const [createActivityBooking] = useMutation(CREATE_ACTIVITY_BOOKING);\r\n const [updateBookingPayment] = useMutation(UPDATE_BOOKING_PAYMENT);\r\n\r\n const setIsSubmitCallback = React.useCallback(value => {\r\n setIsSubmit(value);\r\n }, []);\r\n\r\n const [open, setOpen] = React.useState(false);\r\n\r\n const removeEvent = () => {\r\n return (\r\n window.removeEventListener('message', handleEventMessage),\r\n window.removeEventListener('msg', handleEventMessage)\r\n );\r\n };\r\n\r\n const handleOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleClose = () => {\r\n resetWidgetForm();\r\n ReactDOM.unmountComponentAtNode(document.getElementById(WIDGET_ROOT));\r\n setOpen(false);\r\n window.parent.document.getElementById(WIDGET_WRAPPER_ID).style.display =\r\n 'none';\r\n };\r\n\r\n const submitProductCallback = React.useCallback((stripeData, payPalData) => {\r\n if (stripeData) {\r\n setStripeData(stripeData);\r\n } else if (payPalData) {\r\n enqueueSnackbar(t('Payment has been successfully added'), {\r\n variant: 'success'\r\n });\r\n setPayPalData(payPalData);\r\n }\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n const totalPrice = getWidgetTotalPrice(widgetForm, productData);\r\n setTotalPrice(totalPrice);\r\n\r\n if (!paymentType) {\r\n changeFormFieldValue(\r\n 'paymentType',\r\n getAvailablePaymentsTypes(settingsData)[0]\r\n );\r\n }\r\n handleStripeAuth();\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n setPayPalData(null);\r\n setStripeData(null);\r\n }, [paymentType]);\r\n\r\n React.useEffect(() => {\r\n if (!isSubmit) return;\r\n\r\n if (paymentType === PAYPAL) {\r\n if (!payPalData) {\r\n enqueueSnackbar(t('Your payment is not added'), {\r\n variant: 'error'\r\n });\r\n setIsSubmit(false);\r\n return;\r\n }\r\n startSubmit();\r\n } else if (paymentType === PAY_ON_ARRIVAL) {\r\n startSubmit();\r\n }\r\n }, [isSubmit]);\r\n\r\n React.useEffect(() => {\r\n if (!stripeData || !isSubmit) return;\r\n startSubmit();\r\n }, [stripeData]);\r\n\r\n const handleEventMessage = ev => {\r\n /*if (ev.data.type === 'stripe-3ds-result') {\r\n const str_auth = document.getElementById('STRIPE_AUTH');\r\n if (str_auth) str_auth.remove();\r\n\r\n if (ev.data.message.payment_intent) {\r\n variables.isPaid = true;\r\n variables.clientSecret = ev.data.message.payment_intent.id;\r\n }\r\n updateBookingPayment({ variables: variables }).then(\r\n res => {\r\n if (!res?.data?.updateBookingPayment?.success) {\r\n setIsSubmit(false);\r\n\r\n enqueueSnackbar(t('Your payment is not added'), {\r\n variant: 'error'\r\n });\r\n return;\r\n }\r\n handleOpen();\r\n },\r\n () => {\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n }\r\n );\r\n } else */\r\n if (ev.data.msg === 'bif-stripe-complete-event' && clientSecret) {\r\n const variables = {\r\n activityId: isAccommodationBooking ? null : productData.generalForm.id,\r\n accommodationId: isAccommodationBooking\r\n ? productData.generalForm.id\r\n : null,\r\n accommodationBookingId: accommodationBookingId\r\n ? accommodationBookingId\r\n : null,\r\n activityBookingId: activityBookingId ? activityBookingId : null,\r\n isPaid: false,\r\n clientSecret: clientSecret\r\n };\r\n const str_auth = document.getElementById('STRIPE_AUTH');\r\n if (str_auth) str_auth.remove();\r\n variables.isPaid = true;\r\n updateBookingPayment({ variables: variables }).then(\r\n res => {\r\n removeEvent();\r\n const updateResult = res?.data?.updateBookingPayment;\r\n if (!updateResult?.success && updateResult?.update) {\r\n enqueueSnackbar(t('Your payment is not added'), {\r\n variant: 'error'\r\n });\r\n setIsSubmit(false);\r\n setTimeout(() => {\r\n handleClose();\r\n }, 5000);\r\n return;\r\n } else if (updateResult?.success) {\r\n handleOpen();\r\n return;\r\n }\r\n },\r\n () => {\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n }\r\n );\r\n }\r\n };\r\n const handleStripeAuth = () => {\r\n removeEvent();\r\n window.addEventListener('message', handleEventMessage, false);\r\n window.addEventListener('msg', handleEventMessage, false);\r\n };\r\n\r\n const startSubmit = () => {\r\n if (!isPrivacy) {\r\n enqueueSnackbar(\r\n t('Privacy Policy and Terms & Conditions are not confirmed'),\r\n {\r\n variant: 'error'\r\n }\r\n );\r\n setIsSubmit(false);\r\n return;\r\n }\r\n\r\n if (isAccommodationBooking) {\r\n submitAccommodationBooking();\r\n } else {\r\n submitActivityBooking();\r\n }\r\n };\r\n\r\n const addStripeAuthIframe = (\r\n nextActionUrl,\r\n clientSecret,\r\n activityBookingId,\r\n accommodationBookingId\r\n ) => {\r\n const div = document.createElement('div');\r\n div.className = 'row-stripe33';\r\n div.style.cssText =\r\n 'display: block !important;position: fixed !important;z-index: 2147483647 !important;background: rgba(40, 40, 40, 0.75) !important;transition: background 400ms ease 0s !important;will-change: background !important;inset: 0px !important;';\r\n const button = document.createElement('button');\r\n button.id = 'close';\r\n button.position = 'absolute';\r\n button.textContent = 'Close';\r\n button.style.cssText =\r\n 'position: absolute;z-index: 99999;margin-top: 3px;left: 846px;ont-size: 20px;width: 65px;height: 35px;background: none;border: none; font-size: 18px;color: white;top: 8%;';\r\n button.onclick = () => {\r\n const str_auth = document.getElementById('STRIPE_AUTH');\r\n document.getElementById('STRIPE_AUTH').style.display = 'none';\r\n document.getElementById('close').style.display = 'none';\r\n if (str_auth) str_auth.remove();\r\n removeEvent();\r\n handleClose();\r\n };\r\n //div.appendChild(button);\r\n const iframe = document.createElement('iframe');\r\n div.appendChild(iframe);\r\n iframe.id = 'STRIPE_AUTH';\r\n iframe.src = nextActionUrl;\r\n iframe.setAttribute(\r\n 'sandbox',\r\n 'allow-scripts allow-forms allow-same-origin'\r\n );\r\n iframe.width = 600;\r\n iframe.height = 400;\r\n iframe.background = 'white';\r\n iframe.position = 'absolute';\r\n iframe.width = 930;\r\n iframe.height = 502;\r\n iframe.style.cssText +=\r\n 'position:absolute;max-width:82%;max-height:65%;left:9.1%;top:15%;';\r\n wrapperRef.current.appendChild(div);\r\n };\r\n\r\n const submitAccommodationBooking = () => {\r\n setIsSubmit(true);\r\n\r\n const stripeToken = stripeData ? stripeData.id : null;\r\n const payPalOrderId = payPalData ? payPalData.orderID : null;\r\n\r\n const data = getPreparedBookAccommodationData(\r\n productData,\r\n widgetForm,\r\n [],\r\n true,\r\n stripeToken,\r\n payPalOrderId\r\n );\r\n\r\n createAccommodationBooking({ variables: data }).then(\r\n res => {\r\n const nextActionUrl =\r\n res?.data?.createAccommodationBooking?.nextActionUrl;\r\n const clientSecret =\r\n res?.data?.createAccommodationBooking?.clientSecret;\r\n const accommodationBookingIdLocal =\r\n res?.data?.createAccommodationBooking?.id;\r\n setAccommodationBookingId(accommodationBookingIdLocal);\r\n setClientSecret(clientSecret);\r\n\r\n if (nextActionUrl) {\r\n setIsSubmit(false);\r\n addStripeAuthIframe(\r\n nextActionUrl,\r\n clientSecret,\r\n null,\r\n accommodationBookingIdLocal\r\n );\r\n return;\r\n } else {\r\n handleOpen();\r\n }\r\n },\r\n e => {\r\n setIsSubmit(false);\r\n if (e.message) {\r\n const splitErrMessage = e.message.split(':');\r\n enqueueSnackbar(splitErrMessage[splitErrMessage.length - 1], {\r\n variant: 'error'\r\n });\r\n } else {\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n }\r\n }\r\n );\r\n };\r\n\r\n const submitActivityBooking = () => {\r\n setIsSubmit(true);\r\n\r\n const stripeToken = stripeData ? stripeData.id : null;\r\n const payPalOrderId = payPalData ? payPalData.orderID : null;\r\n\r\n const activityForm = {\r\n values: {\r\n ...widgetForm.values,\r\n accommodations: widgetForm.values.activities\r\n }\r\n };\r\n const data = getPreparedBookActivityData(\r\n productData,\r\n activityForm,\r\n [],\r\n true,\r\n stripeToken,\r\n payPalOrderId\r\n );\r\n\r\n createActivityBooking({ variables: data }).then(\r\n res => {\r\n const activityBookingIdLocal = res?.data?.createActivityBooking?.id;\r\n const activityCreated = res.data.createActivityBooking;\r\n setActivityBookingId(activityBookingIdLocal);\r\n const nextActionUrl = res?.data?.createActivityBooking?.nextActionUrl;\r\n const clientSecret = res?.data?.createActivityBooking?.clientSecret;\r\n setClientSecret(clientSecret);\r\n\r\n if (nextActionUrl && activityBookingIdLocal) {\r\n setIsSubmit(false);\r\n addStripeAuthIframe(\r\n nextActionUrl,\r\n clientSecret,\r\n activityBookingIdLocal,\r\n null\r\n );\r\n return;\r\n } else {\r\n handleOpen();\r\n }\r\n },\r\n e => {\r\n setIsSubmit(false);\r\n if (e.message) {\r\n const splitErrMessage = e.message.split(':');\r\n enqueueSnackbar(splitErrMessage[splitErrMessage.length - 1], {\r\n variant: 'error'\r\n });\r\n } else {\r\n enqueueSnackbar(t('Something was wrong'), {\r\n variant: 'error'\r\n });\r\n }\r\n }\r\n );\r\n };\r\n\r\n return (\r\n <div className={classes.wrapper} ref={wrapperRef}>\r\n <div className={classes.leftSide}>\r\n <form onSubmit={handleSubmit} className={classes.form}>\r\n <Typography variant=\"h3\" classes={{ root: classes.title }}>\r\n {t('Payment')}\r\n </Typography>\r\n <UserInformation />\r\n <BillingInformation />\r\n <CreditCardInformation\r\n settingsData={settingsData}\r\n submitCallback={submitProductCallback}\r\n setIsSubmit={setIsSubmitCallback}\r\n paymentType={paymentType}\r\n isSubmit={isSubmit}\r\n currency={currency}\r\n totalPrice={totalPrice}\r\n changeFormFieldValue={changeFormFieldValue}\r\n />\r\n <button hidden={true} type={'submit'}>\r\n Submit\r\n </button>\r\n </form>\r\n </div>\r\n <div className={classes.rightSide}>\r\n <BookingInformation data={productData} form={widgetForm} />\r\n </div>\r\n\r\n <BookingConfirmDialog\r\n open={open}\r\n handleClose={handleClose}\r\n title={productData.generalForm.title}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n widgetForm: state.form.widgetForm\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('widgetForm', field, value));\r\n },\r\n resetWidgetForm: () => dispatch(reset('widgetForm'))\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'widgetForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false,\r\n validate\r\n})(connect(mapStateToProps, mapDispatchToProps)(Payment));\r\n","import { makeStyles,useTheme } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles(theme =>({\r\n wrapper: {\r\n width: 'calc(100% - 50px)',\r\n maxWidth: '1000px',\r\n height: '652px',\r\n boxShadow: '1px 3px 12px rgba(0, 0, 0, 0.15)',\r\n borderRadius: '8px',\r\n padding: ' 0 0 48px',\r\n backgroundColor: 'white',\r\n left: '50%',\r\n top: '50%',\r\n position: 'relative',\r\n transform: 'translate(-50%, -50%)',\r\n ['@media (max-width:960px)']: {\r\n width: '100% !important',\r\n height: 'calc(100% - 48px)'\r\n },\r\n // ['@media (max-width:1010px)']: {\r\n // overflow: 'hidden'\r\n // },\r\n [theme.breakpoints.down('sm')]:{\r\n width: '100%',\r\n height: 'calc(100% - 48px)'\r\n },\r\n [theme.breakpoints.down('xs')]:{\r\n width: '100%',\r\n height: 'calc(100% - 40px)'\r\n }\r\n },\r\n tabPanel: {\r\n height: '100%',\r\n \r\n },\r\n noItemMsg: {\r\n height: 'calc(100% - 80px)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }\r\n}));\r\n\r\nexport default useStyles;\r\n","import React, { useState, useEffect, useMemo } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport ReactDOM, { unstable_batchedUpdates } from 'react-dom';\r\nimport ReactGA from 'react-ga';\r\nimport { connect } from 'react-redux';\r\nimport { useSnackbar } from 'notistack';\r\nimport { submit, updateSyncErrors, reset, change } from 'redux-form';\r\nimport { useQuery } from '@apollo/react-hooks';\r\n\r\nimport { ACCOMMODATION } from 'graphql/queries/accommodations';\r\nimport { ACTIVITY } from 'graphql/queries/activities';\r\nimport { USER_SETTINGS_WITHOUT_SECRET_KEYS } from 'graphql/queries/settings';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport {\r\n WIDGET_ROOT,\r\n WIDGET_WRAPPER_ID,\r\n ADD_ONS_INDEX,\r\n RELATED_PRODUCTS_INDEX,\r\n MENU,\r\n ACCOMMODATION_TITLE,\r\n ACTIVITY_TITLE\r\n} from 'constants/widget';\r\n\r\nimport {\r\n CATEGORY_PRICES,\r\n DAILY_PRICES,\r\n FIXED_PRICES\r\n} from 'pages/widget/constants';\r\n\r\nimport {\r\n getReceivedAccommodationData\r\n} from 'utils/accommodations-and-activities/prepareReceivedAccommodationData';\r\nimport { getReceivedActivityData } from 'utils/accommodations-and-activities/prepareReceivedActivityData';\r\n\r\nimport { TabPanel } from 'components';\r\n\r\nimport Header from './components/header/Header';\r\nimport Menu from './components/menu/Menu';\r\nimport GeneralAccommodationsList from './components/general-accommodations-list/GeneralAccommodationsList';\r\nimport GeneralActivitiesList from './components/general-activities-list/GeneralActivitiesList';\r\nimport ProductInfo from './components/product-info/ProductInfo';\r\nimport DateAndGuests from './components/date-and-guests/DateAndGuests';\r\nimport AddOns from './components/add-ons/AddOns';\r\nimport MandatoryFees from './components/mandatory-fees/MandatoryFees';\r\nimport Products from 'pages/widget/components/related-products/Products';\r\nimport Checkout from './components/checkout/Checkout';\r\nimport Payment from './components/payment/Payment';\r\nimport Footer from './components/footer/Footer';\r\n\r\nimport useStyles from './styles';\r\nimport { getRange } from '../../utils/book-accommodation/availableDates';\r\nimport { useAccommodationsInfiniteQuery } from './hooks/useAccommodationsInfiniteQuery';\r\nimport { useActivitiesInfiniteQuery } from './hooks/useActivitiesInfiniteQuery';\r\nimport WidgetLoader from './components/widget-loader/WidgetLoader';\r\n\r\nconst AVAILABLE_CURRENCIES = ['NOK', 'EUR', 'USD'];\r\nconst PRODUCT_SECTION_INDEX = 0;\r\nconst ADD_ONS_SECTION_INDEX = 1;\r\nconst RELATED_PRODUCT_SECTION_INDEX = 2;\r\nconst CHECKOUT_SECTION_INDEX = 3;\r\nconst PAYMENT_SECTION_INDEX = 4;\r\n\r\nconst Widget = ({\r\n submitForm,\r\n updateFormErrors,\r\n resetWidgetForm,\r\n widgetForm,\r\n ownerId,\r\n receivedAccommodationId,\r\n receivedActivityId,\r\n languages,\r\n logo,\r\n privacyPolicy,\r\n termsAndConditions,\r\n changeWidgetFormFieldValue\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const { enqueueSnackbar } = useSnackbar();\r\n const confirm = React.useContext(ConfirmContext);\r\n\r\n const [activityDisabledDates, setActivityDisabledDates] = useState([]);\r\n\r\n const [productId, setProductId] = useState(receivedAccommodationId || receivedActivityId);\r\n const [activity, setActivity] = useState(null);\r\n const [receivedActivity, setReceivedActivity] = useState(null);\r\n const [accommodation, setAccommodation] = useState(null);\r\n const [receivedAccommodation, setReceivedAccommodation] = useState(\r\n null\r\n );\r\n const [menuIndex, setMenuIndex] = useState(0);\r\n const [productsMenuIndex, setProductsMenuIndex] = useState(0);\r\n\r\n const [lastSubmittedFormIndex, setLastSubmittedFormIndex] = useState(0);\r\n const [isSubmit, setIsSubmit] = useState(false);\r\n const [isProductsList, setIsProductsList] = useState(!receivedAccommodationId && !receivedActivityId);\r\n const [selectedProduct, setSelectedProduct] = useState(null);\r\n const [initialSelectedCurrency, setInitialSelectedCurrency] = useState('NOK');\r\n const [initialSelectedLanguage, setInitialSelectedLanguage] = useState(languages[0]);\r\n const [initialAvailableCurrencies, setInitialAvailableCurrencies] = useState(AVAILABLE_CURRENCIES);\r\n const [disabledSteps, setDisabledStep] = useState([]);\r\n\r\n const [zoomLevel, setZoomLevel] = useState(window.devicePixelRatio);\r\n\r\n const { loading: settingsLoading, data: settingsData } = useQuery(\r\n USER_SETTINGS_WITHOUT_SECRET_KEYS,\r\n {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n businessOwnerId: ownerId\r\n }\r\n }\r\n );\r\n\r\n const {\r\n accommodationsPage,\r\n accommodations,\r\n fetchAccommodationsData,\r\n loading: isAccommodationsLoading,\r\n perPage: accommodationsPerPage\r\n } = useAccommodationsInfiniteQuery({\r\n startDate: widgetForm?.values?.range?.startDate,\r\n endDate: widgetForm?.values?.range?.endDate,\r\n guests: widgetForm?.values?.numberOfGuests || '',\r\n ownerId\r\n }, !!productId);\r\n\r\n const {\r\n activitiesPage,\r\n activities,\r\n fetchActivitiesData,\r\n loading: isActivitiesLoading,\r\n perPage: activitiesPerPage\r\n } = useActivitiesInfiniteQuery({\r\n startDate: widgetForm?.values?.range?.startDate,\r\n endDate: widgetForm?.values?.range?.endDate,\r\n guests: widgetForm?.values?.numberOfGuests || '',\r\n ownerId\r\n }, !!productId);\r\n\r\n const isActivitiesAccommodationsLoading = isAccommodationsLoading || isActivitiesLoading;\r\n\r\n const isAccommodationBooking =\r\n !isActivitiesAccommodationsLoading &&\r\n ((!!accommodations?.length && productsMenuIndex === 0) || !!receivedAccommodationId);\r\n\r\n const { loading: accommodationLoading, data: accommodationData} = useQuery(\r\n ACCOMMODATION,\r\n {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n skip: isProductsList || selectedProduct || !isAccommodationBooking || receivedActivityId,\r\n variables: {\r\n accommodationId: productId,\r\n businessOwnerId: ownerId\r\n }\r\n }\r\n );\r\n\r\n const { loading: activityLoading, data: activityData } = useQuery(ACTIVITY, {\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n skip: isProductsList || selectedProduct || isAccommodationBooking || receivedAccommodationId,\r\n variables: {\r\n activityId: productId,\r\n businessOwnerId: ownerId\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n if (!settingsData) return;\r\n\r\n if (!settingsData.payPalSettings && !settingsData.stripeSettings) {\r\n const payOnArrivalPossibility = settingsData.payOnArrivalPossibility;\r\n if (payOnArrivalPossibility && payOnArrivalPossibility.payOnArrival) {\r\n return;\r\n }\r\n confirm({\r\n title: 'Payments were not added',\r\n confirmationText: 'Okay'\r\n })\r\n .then(() => {\r\n resetWidgetForm();\r\n ReactDOM.unmountComponentAtNode(document.getElementById(WIDGET_ROOT));\r\n window.parent.document.getElementById(\r\n WIDGET_WRAPPER_ID\r\n ).style.display = 'none';\r\n })\r\n .catch(() => {});\r\n }\r\n }, [settingsData]);\r\n\r\n useEffect(() => {\r\n if (!accommodationData || !accommodationData.accommodations.length) return;\r\n\r\n const receivedAccommodation = accommodationData.accommodations[0];\r\n const data = getReceivedAccommodationData(receivedAccommodation);\r\n const firstPrice = receivedAccommodation.prices[0];\r\n\r\n if (firstPrice.participant.participant) {\r\n data['pricesType'] = CATEGORY_PRICES;\r\n } else if (firstPrice.day) {\r\n data['pricesType'] = DAILY_PRICES;\r\n } else {\r\n data['pricesType'] = FIXED_PRICES;\r\n }\r\n\r\n unstable_batchedUpdates(() => {\r\n setReceivedAccommodation(receivedAccommodation);\r\n setAccommodation(data);\r\n setDisabledStep(getDisabledSteps(data));\r\n })\r\n }, [accommodationData]);\r\n\r\n useEffect(() => {\r\n if (!activityData || !activityData.activities.length) return;\r\n\r\n const receivedActivity = activityData.activities[0];\r\n\r\n setActivityDisabledDates(\r\n receivedActivity.activitybookingSet\r\n .filter(({ isCanceled }) => !isCanceled)\r\n .map(({ startingDate, endingDate }) => {\r\n return getRange(startingDate, endingDate).map(date =>\r\n date.format('YYYY-MM-DD')\r\n );\r\n })\r\n .flat(1)\r\n );\r\n\r\n const data = getReceivedActivityData(receivedActivity);\r\n\r\n data['pricesType'] = receivedActivity['pricesType'];\r\n data['scheduleType'] = receivedActivity['scheduleType'];\r\n\r\n setReceivedActivity(receivedActivity);\r\n setActivity(data);\r\n setDisabledStep(getDisabledSteps(data));\r\n }, [activityData]);\r\n\r\n const onBackHandler = () => {\r\n if (selectedProduct) {\r\n unstable_batchedUpdates(() => {\r\n setInitialAvailableCurrencies(AVAILABLE_CURRENCIES);\r\n setSelectedProduct(null);\r\n setIsProductsList(true);\r\n });\r\n changeWidgetFormFieldValue('range', { startDate: null, endDate: null });\r\n changeWidgetFormFieldValue('numberOfGuests', 0);\r\n return;\r\n }\r\n\r\n if (menuIndex) {\r\n const newMenuIndex = getNextStepIncludeDisabled(menuIndex - 1, true);\r\n setMenuIndex(newMenuIndex);\r\n return;\r\n }\r\n\r\n cancelWidgetBooking();\r\n };\r\n\r\n const cancelWidgetBooking = () => {\r\n confirm({\r\n title: 'You have unsaved changes',\r\n description: t('Are you sure you want to cancel?'),\r\n confirmationText: 'Cancel',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n ReactGA.event({\r\n category: 'widget',\r\n action: `Cancel booking from widget`,\r\n label: 'widget'\r\n });\r\n resetWidgetForm();\r\n ReactDOM.unmountComponentAtNode(document.getElementById(WIDGET_ROOT));\r\n window.parent.document.getElementById(WIDGET_WRAPPER_ID).style.display =\r\n 'none';\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const setMenuIndexHandler = index => {\r\n const CHECKOUT_SECTION = 3;\r\n if (\r\n index > lastSubmittedFormIndex ||\r\n (index > menuIndex && widgetForm.syncErrors)\r\n ) {\r\n enqueueSnackbar(\r\n t(\r\n 'You should complete and save all previous steps before you can go to this step'\r\n ),\r\n {\r\n variant: 'info',\r\n autoHideDuration: 5000\r\n }\r\n );\r\n if (widgetForm.syncErrors && index !== CHECKOUT_SECTION) {\r\n remoteSubmitForm();\r\n }\r\n return;\r\n }\r\n\r\n if (index < menuIndex) {\r\n updateFormErrors();\r\n }\r\n\r\n setMenuIndex(index);\r\n ReactGA.event({\r\n category: 'widget',\r\n action: `go to ${getNextTabName(index)} from ${getNextTabName(\r\n menuIndex\r\n )}`,\r\n label: 'widget'\r\n });\r\n };\r\n\r\n const getConfirmButtonText = () => {\r\n if (selectedProduct) return 'Book';\r\n\r\n const PAYMENT_SECTION_INDEX = 4;\r\n return menuIndex === PAYMENT_SECTION_INDEX ? 'Confirm payment' : 'Next';\r\n };\r\n\r\n const getCancelButtonText = () => {\r\n if (selectedProduct || menuIndex) return 'Back';\r\n return 'Cancel';\r\n };\r\n\r\n const getNextStepIncludeDisabled = (newMenuIndex, isBack) => {\r\n const firstDisabledIndex = isBack ? RELATED_PRODUCTS_INDEX : ADD_ONS_INDEX;\r\n const secondDisabledIndex = isBack ? ADD_ONS_INDEX : RELATED_PRODUCTS_INDEX;\r\n\r\n if (disabledSteps.length) {\r\n if (\r\n newMenuIndex === firstDisabledIndex &&\r\n disabledSteps.includes(firstDisabledIndex)\r\n ) {\r\n newMenuIndex = isBack ? newMenuIndex - 1 : newMenuIndex + 1;\r\n }\r\n if (\r\n newMenuIndex === secondDisabledIndex &&\r\n disabledSteps.includes(secondDisabledIndex)\r\n ) {\r\n newMenuIndex = isBack ? newMenuIndex - 1 : newMenuIndex + 1;\r\n }\r\n }\r\n\r\n return newMenuIndex;\r\n };\r\n\r\n const getNextTabName = tabIndex => {\r\n switch (tabIndex) {\r\n case PRODUCT_SECTION_INDEX:\r\n return 'product section';\r\n case ADD_ONS_SECTION_INDEX:\r\n return 'add-ons section';\r\n case RELATED_PRODUCT_SECTION_INDEX:\r\n return 'related product section';\r\n case CHECKOUT_SECTION_INDEX:\r\n return 'checkout section';\r\n case PAYMENT_SECTION_INDEX:\r\n return 'payment section';\r\n }\r\n };\r\n\r\n const nextStep = () => {\r\n let newMenuIndex = getNextStepIncludeDisabled(menuIndex + 1);\r\n\r\n if (newMenuIndex > lastSubmittedFormIndex) {\r\n setLastSubmittedFormIndex(newMenuIndex);\r\n }\r\n setMenuIndex(newMenuIndex);\r\n\r\n ReactGA.event({\r\n category: 'widget',\r\n action: `go to ${getNextTabName(newMenuIndex)}`,\r\n label: 'widget'\r\n });\r\n };\r\n\r\n const remoteSubmitForm = () => {\r\n if (selectedProduct) {\r\n unstable_batchedUpdates(() => {\r\n setProductId(selectedProduct.id);\r\n setSelectedProduct(null);\r\n setInitialAvailableCurrencies([]);\r\n });\r\n return;\r\n }\r\n\r\n submitForm();\r\n };\r\n\r\n const selectProduct = item => {\r\n const listOfAvailableCurrencies = item.listOfAvailableCurrencies;\r\n\r\n if (!listOfAvailableCurrencies.includes(initialSelectedCurrency)) {\r\n setInitialSelectedCurrency(listOfAvailableCurrencies[0]);\r\n }\r\n\r\n unstable_batchedUpdates(() => {\r\n setInitialAvailableCurrencies(listOfAvailableCurrencies);\r\n setSelectedProduct(item);\r\n setIsProductsList(false);\r\n });\r\n };\r\n\r\n const getDisabledSteps = data => {\r\n const disabledSteps = [];\r\n\r\n if (!data) return [];\r\n\r\n const addOnsLength = data.addOnsForm.addOns.length;\r\n const relatedActivitiesLength = data.relatedActivitiesForm\r\n ? data.relatedActivitiesForm.relatedActivities.length\r\n : 0;\r\n const relatedAccommodationsLength = data.relatedAccommodationsForm\r\n ? data.relatedAccommodationsForm.relatedAccommodations.length\r\n : 0;\r\n\r\n if (!addOnsLength) disabledSteps.push(ADD_ONS_INDEX);\r\n if (!relatedActivitiesLength && !relatedAccommodationsLength) {\r\n disabledSteps.push(RELATED_PRODUCTS_INDEX);\r\n }\r\n\r\n return disabledSteps;\r\n };\r\n\r\n const availableSections = useMemo(() => {\r\n const result = [];\r\n\r\n if (isActivitiesAccommodationsLoading && !accommodations && !activities) {\r\n return result;\r\n }\r\n\r\n if (accommodations?.length) {\r\n result.push(ACCOMMODATION_TITLE);\r\n }\r\n\r\n if (activities?.length) {\r\n result.push(ACTIVITY_TITLE);\r\n }\r\n\r\n return result;\r\n }, [isActivitiesAccommodationsLoading, accommodations, activities])\r\n\r\n const loading = settingsLoading || accommodationLoading || activityLoading || isActivitiesAccommodationsLoading;\r\n\r\n useEffect(() => {\r\n const handleZoomChange = () => {\r\n const currentZoom = window.devicePixelRatio;\r\n if (currentZoom !== zoomLevel) {\r\n setZoomLevel(currentZoom);\r\n\r\n const timeout = setTimeout(() => {\r\n document.body.style.zoom = \"100%\"; \r\n setZoomLevel(window.devicePixelRatio); \r\n }, 6000);\r\n\r\n return () => clearTimeout(timeout); \r\n }\r\n };\r\n\r\n window.addEventListener(\"resize\", handleZoomChange);\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", handleZoomChange);\r\n };\r\n }, [zoomLevel]);\r\n \r\n return (\r\n <div className={classes.wrapper}>\r\n <WidgetLoader loading={loading || isSubmit} />\r\n\r\n <Header\r\n cancelCallback={cancelWidgetBooking}\r\n title={loading ? \"\" : isAccommodationBooking ? 'Book your accommodation' : 'Book your activity'}\r\n initialAvailableCurrencies={initialAvailableCurrencies}\r\n initialSelectedCurrency={initialSelectedCurrency}\r\n setInitialSelectedCurrency={setInitialSelectedCurrency}\r\n initialSelectedLanguage={initialSelectedLanguage}\r\n setInitialSelectedLanguage={setInitialSelectedLanguage}\r\n initialAvailableLanguages={languages}\r\n logo={logo}\r\n />\r\n\r\n {!!productId && (\r\n <Menu\r\n items={MENU}\r\n disabledSteps={disabledSteps}\r\n isAccommodationBooking={isAccommodationBooking}\r\n currentIndex={menuIndex}\r\n setIndex={setMenuIndexHandler}\r\n lastSubmittedFormIndex={lastSubmittedFormIndex}\r\n />\r\n )}\r\n\r\n {isProductsList && !!availableSections.length && (\r\n <Menu\r\n isFilter={!!availableSections.length}\r\n isProductsMenu={true}\r\n items={availableSections.map(section => ({ title: section }))}\r\n currentIndex={productsMenuIndex}\r\n setIndex={setProductsMenuIndex}\r\n lastSubmittedFormIndex={lastSubmittedFormIndex}\r\n />\r\n )}\r\n\r\n {isProductsList && !!availableSections.length && (\r\n <>\r\n {availableSections.includes(ACCOMMODATION_TITLE) && (\r\n <TabPanel\r\n value={productsMenuIndex}\r\n index={0}\r\n className={classes.tabPanel}\r\n >\r\n <GeneralAccommodationsList\r\n initialSelectedCurrency={initialSelectedCurrency}\r\n accommodations={accommodations}\r\n page={accommodationsPage}\r\n selectProduct={selectProduct}\r\n fetchData={fetchAccommodationsData}\r\n perPage={accommodationsPerPage}\r\n />\r\n </TabPanel>\r\n )}\r\n {availableSections.includes(ACTIVITY_TITLE) && (\r\n <TabPanel\r\n value={productsMenuIndex}\r\n index={availableSections.includes(ACCOMMODATION_TITLE) ? 1 : 0}\r\n className={classes.tabPanel}\r\n >\r\n <GeneralActivitiesList\r\n initialSelectedCurrency={initialSelectedCurrency}\r\n activities={activities}\r\n page={activitiesPage}\r\n selectProduct={selectProduct}\r\n fetchData={fetchActivitiesData}\r\n perPage={activitiesPerPage}\r\n />\r\n </TabPanel>\r\n )}\r\n </>\r\n )}\r\n\r\n {!isActivitiesAccommodationsLoading && !availableSections.length && !productId && (\r\n <div className={classes.noItemMsg}>\r\n <h1>No items</h1>\r\n </div>\r\n )}\r\n\r\n {selectedProduct && (\r\n <ProductInfo\r\n product={selectedProduct}\r\n initialSelectedCurrency={initialSelectedCurrency}\r\n />\r\n )}\r\n\r\n {(accommodation || activity) && (\r\n <>\r\n <TabPanel value={menuIndex} index={0} className={classes.tabPanel}>\r\n {menuIndex === 0 && (\r\n <DateAndGuests\r\n ownerId={ownerId}\r\n isAccommodationBooking={isAccommodationBooking}\r\n initialSelectedCurrency={initialSelectedCurrency}\r\n initialSelectedLanguage={initialSelectedLanguage}\r\n activityDisabledDates={activityDisabledDates}\r\n onSubmit={nextStep}\r\n productData={accommodation || activity}\r\n receivedProduct={receivedAccommodation || receivedActivity}\r\n languages={languages}\r\n />\r\n )}\r\n </TabPanel>\r\n <TabPanel value={menuIndex} index={1} className={classes.tabPanel}>\r\n {menuIndex === 1 && (\r\n <AddOns onSubmit={nextStep} accommodationData={accommodation || activity} />\r\n )}\r\n </TabPanel>\r\n \r\n {accommodation && (\r\n <MandatoryFees accommodationData={accommodation} />\r\n )}\r\n \r\n <TabPanel value={menuIndex} index={2} className={classes.tabPanel}>\r\n {menuIndex === 2 && (\r\n <Products\r\n logo={logo}\r\n isAccommodationBooking={isAccommodationBooking}\r\n onSubmit={nextStep}\r\n productData={accommodation || activity}\r\n ownerId={ownerId}\r\n />\r\n )}\r\n </TabPanel>\r\n <TabPanel value={menuIndex} index={3} className={classes.tabPanel}>\r\n {menuIndex === 3 && (\r\n <Checkout\r\n isAccommodationBooking={isAccommodationBooking}\r\n onSubmit={nextStep}\r\n productData={accommodation || activity}\r\n title=\"Booking summary\"\r\n productsMenuIndex={productsMenuIndex}\r\n />\r\n )}\r\n </TabPanel>\r\n <TabPanel value={menuIndex} index={4} className={classes.tabPanel}>\r\n {menuIndex === 4 && (\r\n <Payment\r\n isAccommodationBooking={isAccommodationBooking}\r\n onSubmit={() => {\r\n setIsSubmit(true);\r\n setLastSubmittedFormIndex(menuIndex + 1);\r\n ReactGA.event({\r\n category: 'widget',\r\n action: `submit booking from widget`,\r\n label: 'widget'\r\n });\r\n }}\r\n setIsSubmit={setIsSubmit}\r\n isSubmit={isSubmit}\r\n productData={accommodation || activity}\r\n settingsData={settingsData}\r\n />\r\n )}\r\n </TabPanel>\r\n </>\r\n )}\r\n\r\n {!isProductsList && (\r\n <Footer\r\n menuIndex={menuIndex}\r\n isAccommodationBooking={isAccommodationBooking}\r\n isSelectedProduct={!!selectedProduct}\r\n cancelButton={getCancelButtonText()}\r\n confirmButton={getConfirmButtonText()}\r\n confirmCallback={remoteSubmitForm}\r\n cancelCallback={onBackHandler}\r\n accommodationData={accommodation || activity}\r\n isHideConfirmButton={isProductsList}\r\n isLastStep={menuIndex === 4}\r\n privacyPolicy={privacyPolicy}\r\n termsAndConditions={termsAndConditions}\r\n ownerId={ownerId}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n widgetForm: state.form.widgetForm\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeWidgetFormFieldValue: (field, value) => {\r\n dispatch(change('widgetForm', field, value));\r\n },\r\n submitForm: () => dispatch(submit('widgetForm')),\r\n updateFormErrors: () => dispatch(updateSyncErrors('widgetForm', {})),\r\n resetWidgetForm: () => dispatch(reset('widgetForm'))\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Widget);\r\n","import React from 'react';\r\nimport moment from 'moment';\r\nimport { useTranslation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\nimport { connect } from 'react-redux';\r\nimport { change, reduxForm } from 'redux-form';\r\n\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport DeleteOutlineIcon from '@material-ui/icons/DeleteOutline';\r\n\r\nimport ConfirmContext from 'contexts/ConfirmContext';\r\n\r\nimport BookingInformation from '../booking-information/BookingInformation';\r\n\r\nimport { currencyFormatter } from 'utils/prices/formatter';\r\nimport {\r\n getSummeryPriceForActivitySeveralDays,\r\n getTotalPrice\r\n} from 'utils/book-accommodation-and-activity/totalPrice';\r\n\r\nimport { PLURAL_PARTICIPANTS } from 'constants/participants';\r\n\r\nimport { LOCALES_OBJ } from 'constants/base';\r\n\r\nimport { getFormByCurrentLanguage } from 'utils/form-localization/formLocalization';\r\n\r\nimport useStyles from './styles';\r\nimport Widget from 'pages/widget/Widget';\r\n\r\nconst FIXED_PRICES = 'pricesFixedForm';\r\nconst CATEGORY_PRICES = 'pricesCategoryForm';\r\nconst DAILY_PRICES = 'pricesDailyForm';\r\n\r\nconst getTotalParticipantPrice = (\r\n pricesType,\r\n price,\r\n amount,\r\n dates,\r\n isAccommodation\r\n) => {\r\n let totalPrice;\r\n if (isAccommodation && pricesType === DAILY_PRICES) {\r\n totalPrice = price;\r\n } else if ((pricesType === FIXED_PRICES && isAccommodation) || pricesType === CATEGORY_PRICES) {\r\n if (dates && dates.startDate && dates.endDate) {\r\n const participants = pricesType === CATEGORY_PRICES ? amount : 1;\r\n const nights = dates.endDate.diff(dates.startDate, 'days');\r\n totalPrice = parseInt(nights) * price * participants;\r\n } else {\r\n totalPrice = price;\r\n }\r\n } else if(pricesType === FIXED_PRICES && !isAccommodation){\r\n totalPrice = price;\r\n } else {\r\n totalPrice = price * amount;\r\n }\r\n if (!isAccommodation) {\r\n totalPrice = getSummeryPriceForActivitySeveralDays(dates, totalPrice);\r\n }\r\n return currencyFormatter(totalPrice);\r\n};\r\n\r\nconst Participants = ({\r\n participants,\r\n pricesType,\r\n dates,\r\n currency,\r\n productsMenuIndex,\r\n isAccommodation\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const startDate = dates && dates.startDate;\r\n const endDate = dates && dates.endDate;\r\n const diffTime = Math.abs(endDate - startDate);\r\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\r\n const pluralNigts = diffDays > 1 ? t('nights') : t('night');\r\n\r\n return (\r\n <div>\r\n {participants.map((item, index) => {\r\n if (!item.participants || !parseInt(item.participants)) return;\r\n const amount = parseInt(item.participants);\r\n const price = currencyFormatter(item[currency]);\r\n const totalPrice = getTotalParticipantPrice(\r\n pricesType,\r\n item[currency],\r\n amount,\r\n dates,\r\n isAccommodation\r\n );\r\n return (\r\n <div\r\n key={index}\r\n className={classNames(classes.generalRow, classes.participantRow)}\r\n >\r\n {isAccommodation && pricesType === DAILY_PRICES ? (\r\n <Typography variant=\"body1\" className={classes.bookingColumn}>\r\n {amount}{' '}\r\n {amount > 1\r\n ? t(PLURAL_PARTICIPANTS[item.participant] || 'guests')\r\n : t(item.participant) || 'guest'}{' '}\r\n {diffDays ? '× ' + diffDays + ' ' + pluralNigts : ''}\r\n </Typography>\r\n ) : (\r\n <>\r\n {pricesType === 'pricesFixedForm' ? (\r\n <Typography variant=\"body1\" className={classes.bookingColumn}>\r\n <span className={classes.currency}>{currency}</span> {price}{' '}\r\n {diffDays\r\n ? t('per night') + ' × ' + diffDays + ' ' + pluralNigts\r\n : ''}\r\n </Typography>\r\n ) : (\r\n <Typography variant=\"body1\" className={classes.bookingColumn}>\r\n <span className={classes.currency}>{currency}</span> {price}{' '}\r\n {diffDays ? t('per night') : ''} × {amount}{' '}\r\n {amount > 1\r\n ? t(PLURAL_PARTICIPANTS[item.participant] || 'guests')\r\n : t(item.participant) || 'guest'}{' '}\r\n {diffDays ? '× ' + diffDays + ' ' + pluralNigts : ''}\r\n </Typography>\r\n )}\r\n </>\r\n )}\r\n\r\n <Typography variant=\"h3\" className={classes.bookingColumn}>\r\n <span className={classes.currency}>{currency}</span> {totalPrice}\r\n </Typography>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nconst AddOns = ({\r\n addOns,\r\n currency,\r\n changeFormFieldValue,\r\n isRelated,\r\n products,\r\n isStatic\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n const confirm = React.useContext(ConfirmContext);\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n const isAddOns = !!addOns.filter(item => item.value && parseInt(item.value))\r\n .length;\r\n\r\n const deleteAddOn = deletedAddOn => {\r\n confirm({\r\n title: 'Are you sure you want to delete it?',\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n if (isRelated) {\r\n const productIndex = deletedAddOn.productIndex;\r\n const index = deletedAddOn.index;\r\n // changeFormFieldValue(\r\n // `activities[${index}].addOns`,\r\n // products[index].addOns.filter(item => item.id !== deletedAddOn.id)\r\n // );\r\n\r\n changeFormFieldValue(`activities[${productIndex}].addOns[${index}]`, {\r\n ...deletedAddOn,\r\n value: 0\r\n });\r\n\r\n return;\r\n }\r\n\r\n changeFormFieldValue(\r\n 'addOns',\r\n addOns.filter(item => item !== deletedAddOn)\r\n );\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n if (!isAddOns) return null;\r\n\r\n return (\r\n <div className={classes.accommodationCheckout}>\r\n <Typography\r\n variant=\"h4\"\r\n classes={{ root: classNames(classes.generalRow, classes.listTitle) }}\r\n >\r\n {t('Add-ons')}\r\n </Typography>\r\n\r\n {addOns.map((item, index) => {\r\n if (!item.value || !parseInt(item.value)) return;\r\n const form = getFormByCurrentLanguage(\r\n selectedLanguage,\r\n item,\r\n item['Norwegian']\r\n );\r\n const amount = item.value;\r\n const price = currencyFormatter(item[currency]);\r\n const totalPrice = currencyFormatter(item[currency] * amount);\r\n return (\r\n <div key={index} className={classes.checkoutInfo}>\r\n <div className={classes.generalRow}>\r\n <Typography variant=\"h3\" className={classes.bookingTitle}>\r\n {form.title}\r\n </Typography>\r\n {!isStatic && (\r\n <DeleteOutlineIcon\r\n className={classes.deleteIcon}\r\n onClick={() => deleteAddOn(item)}\r\n />\r\n )}\r\n </div>\r\n <div className={classes.generalRow}>\r\n <Typography variant=\"body1\">\r\n <span className={classes.currency}>{currency}</span> {price} ×{' '}\r\n {amount}\r\n </Typography>\r\n <Typography variant=\"h3\">\r\n <span className={classes.currency}>{currency}</span>{' '}\r\n {totalPrice}\r\n </Typography>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nconst MandatoryFees = ({\r\n mandatoryFees = [],\r\n currency,\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n const selectedLanguage = i18n.language;\r\n\r\n const isMandatoryFees = Array.isArray(mandatoryFees) && mandatoryFees.some(\r\n item => item[currency] && parseFloat(item[currency])\r\n );\r\n\r\n \r\n\r\n if (!isMandatoryFees) return null;\r\n\r\n return (\r\n <div className={classes.accommodationCheckout}>\r\n <Typography\r\n variant=\"h4\"\r\n classes={{ root: classNames(classes.generalRow, classes.listTitle) }}\r\n >\r\n {t('Mandatory-Fee')}\r\n </Typography>\r\n\r\n {mandatoryFees.map((item, index) => {\r\n if (!item[currency] || !parseInt(item[currency])) return;\r\n const form = getFormByCurrentLanguage(\r\n selectedLanguage,\r\n item,\r\n item['Norwegian']\r\n );\r\n const price = currencyFormatter(item[currency])\r\n return (\r\n <div key={index} className={classes.checkoutInfo}>\r\n <div className={classes.generalRow}>\r\n <Typography variant=\"h3\" className={classes.bookingTitle}>\r\n {form.title}\r\n </Typography>\r\n </div>\r\n <div className={classes.generalRow}>\r\n <Typography variant=\"body1\">\r\n <span className={classes.currency}>{currency}</span> \r\n \r\n </Typography>\r\n \r\n <Typography variant=\"h3\">\r\n <span className={classes.currency}>{currency}{' '}</span>\r\n {price}\r\n </Typography>\r\n \r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nexport const GeneralCheckout = ({\r\n changeFormFieldValue,\r\n widgetForm,\r\n productData,\r\n currency,\r\n isAccommodationBooking,\r\n isStatic,\r\n productsMenuIndex\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n const values = widgetForm.values;\r\n const generalForm = productData.generalForm;\r\n const generalFormNorwegian = productData['generalForm-Norwegian'];\r\n const pricesType = productData.pricesType;\r\n\r\n let dates = values.dates;\r\n const startingDate =\r\n values.startingDate &&\r\n moment(values.startingDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY');\r\n const endingDate =\r\n values.endingDate &&\r\n moment(values.endingDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY');\r\n const startTime = values.startTime ? values.startTime.startTime : null;\r\n const timeType = values.startTime ? values.startTime.timeType : null;\r\n const duration = values.startTime ? values.startTime.duration : null;\r\n const startDate =\r\n dates &&\r\n moment(dates.startDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY');\r\n const endDate =\r\n dates &&\r\n moment(dates.endDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY');\r\n const checkIn =\r\n generalForm.checkInAfter && moment(generalForm.checkInAfter).format('H:mm');\r\n const checkOut =\r\n generalForm.checkOutBefore &&\r\n moment(generalForm.checkOutBefore).format('H:mm');\r\n\r\n const participants = values.participants;\r\n const addOns = values.addOns;\r\n // const mandatoryFees = values.accommodations[0]?.mandatoryFees ;\r\n const mandatoryFees = values.mandatoryFees;\r\n\r\n let isAccommodation = !productData.scheduleType;\r\n\r\n if (isStatic && !dates && startingDate && endingDate) {\r\n isAccommodation = false;\r\n dates = {\r\n startDate: values.startingDate,\r\n endDate: values.endingDate\r\n };\r\n }\r\n\r\n if (isStatic && values.multiDates && values.multiDates.endDate) {\r\n isAccommodation = false;\r\n dates = {\r\n startDate: values.multiDates.startDate,\r\n endDate: values.multiDates.endDate\r\n };\r\n }\r\n\r\n return (\r\n <>\r\n <div className={classes.accommodationCheckout}>\r\n <Typography\r\n variant=\"h4\"\r\n classes={{ root: classNames(classes.generalRow, classes.listTitle) }}\r\n >\r\n {isAccommodationBooking ? t('Accommodation') : t('Activity')}\r\n </Typography>\r\n <div className={classes.checkoutInfo}>\r\n <div className={classes.generalRow}>\r\n <Typography variant=\"h3\" className={classes.bookingTitle}>\r\n {\r\n getFormByCurrentLanguage(\r\n selectedLanguage,\r\n generalForm,\r\n generalFormNorwegian\r\n ).title\r\n }\r\n </Typography>\r\n </div>\r\n <div className={classes.generalRow}>\r\n {startingDate && !endingDate && (\r\n <Typography variant=\"body1\">\r\n {startingDate}{' '}\r\n {startTime && `· ${startTime} · ${duration} ${t(timeType)}`}\r\n </Typography>\r\n )}\r\n {startingDate && endingDate && (\r\n <Typography variant=\"body1\">\r\n {startingDate} {' - '} {endingDate}\r\n </Typography>\r\n )}\r\n {startDate && (\r\n <Typography variant=\"body1\">\r\n {startDate} – {endDate}\r\n </Typography>\r\n )}\r\n </div>\r\n {checkIn && (\r\n <div className={classes.generalRow}>\r\n <Typography variant=\"body1\">\r\n {t('Check-in')}: {checkIn} - {t('Check-out')}: {checkOut}\r\n </Typography>\r\n </div>\r\n )}\r\n </div>\r\n <Participants\r\n participants={participants}\r\n pricesType={pricesType}\r\n dates={dates}\r\n currency={currency}\r\n productsMenuIndex={productsMenuIndex}\r\n isAccommodation={isAccommodation}\r\n />\r\n </div>\r\n <MandatoryFees\r\n mandatoryFees={mandatoryFees}\r\n currency={currency}\r\n changeFormFieldValue={changeFormFieldValue}\r\n isStatic={isStatic}\r\n />\r\n <AddOns\r\n addOns={addOns}\r\n currency={currency}\r\n changeFormFieldValue={changeFormFieldValue}\r\n isStatic={isStatic}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport const RelatedCheckout = ({\r\n changeFormFieldValue,\r\n widgetForm,\r\n currency,\r\n isAccommodationBooking,\r\n isStatic,\r\n productsMenuIndex\r\n}) => {\r\n const classes = useStyles();\r\n const [t, i18n] = useTranslation();\r\n const confirm = React.useContext(ConfirmContext);\r\n\r\n const selectedLanguage = i18n.language;\r\n\r\n const activities = widgetForm.values.activities;\r\n const selectedActivities = activities.filter(item => item.isSelected);\r\n\r\n let addOns = [];\r\n let mandatoryFees = [];\r\n\r\n activities.map((item, activityIndex) => {\r\n if (!item.isSelected || !item.addOns) return false;\r\n const _addOns = item.addOns.map((item, index) => {\r\n item.productIndex = activityIndex;\r\n item.index = index;\r\n return item;\r\n });\r\n addOns = [...addOns, ..._addOns];\r\n });\r\n\r\nactivities.map((item, activityIndex) => {\r\n if (!item.isSelected || !item.mandatoryFees) return false;\r\n const _mandatoryFees = item.mandatoryFees.map((item, index) => {\r\n item.productIndex = activityIndex;\r\n item.index = index;\r\n return item;\r\n });\r\n mandatoryFees = [...mandatoryFees, ..._mandatoryFees];\r\n});\r\n\r\n const deleteRelatedProduct = deletedProductIndex => {\r\n confirm({\r\n title: 'Are you sure you want to delete it?',\r\n confirmationText: 'Delete',\r\n cancellationText: 'Back'\r\n })\r\n .then(() => {\r\n changeFormFieldValue(\r\n 'activities',\r\n activities.map((item, index) => {\r\n if (index === deletedProductIndex) {\r\n return {\r\n ...item,\r\n isSelected: false\r\n };\r\n }\r\n return item;\r\n })\r\n );\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n if (!selectedActivities.length) return null;\r\n\r\n return (\r\n <>\r\n <div className={classes.accommodationCheckout}>\r\n <Typography\r\n variant=\"h4\"\r\n classes={{ root: classNames(classes.generalRow, classes.listTitle) }}\r\n >\r\n {isAccommodationBooking ? t('Activities') : t('Accommodations')}\r\n </Typography>\r\n\r\n <div>\r\n {activities.map((item, index) => {\r\n if (!item.isSelected) return;\r\n const form = getFormByCurrentLanguage(\r\n selectedLanguage,\r\n item,\r\n item['Norwegian']\r\n );\r\n const startingDate = item.startingDate\r\n ? moment(item.startingDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY')\r\n : '';\r\n const endingDate = item.endingDate\r\n ? moment(item.endingDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY')\r\n : '';\r\n const startTime = item.startTime ? item.startTime.startTime : null;\r\n const timeType = item.startTime ? item.startTime.timeType : null;\r\n const duration = item.startTime ? item.startTime.duration : null;\r\n let dates = item.dates;\r\n const startDate =\r\n dates &&\r\n moment(dates.startDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY');\r\n const endDate =\r\n dates &&\r\n moment(dates.endDate)\r\n .locale(LOCALES_OBJ[selectedLanguage])\r\n .format('MMM DD, YYYY');\r\n const checkIn =\r\n item.checkInAfter && moment(item.checkInAfter).format('H:mm');\r\n const checkOut =\r\n item.checkOutBefore && moment(item.checkOutBefore).format('H:mm');\r\n const participants = item.participants;\r\n const pricesType = item.pricesType;\r\n\r\n let isAccommodation = !item.scheduleType;\r\n\r\n if (isStatic && !dates && startingDate && endingDate) {\r\n isAccommodation = false;\r\n dates = {\r\n startDate: item.startingDate,\r\n endDate: item.endingDate\r\n };\r\n }\r\n\r\n if (isStatic && item.multiDates && item.multiDates.endDate) {\r\n isAccommodation = false;\r\n dates = {\r\n startDate: item.multiDates.startDate,\r\n endDate: item.multiDates.endDate\r\n };\r\n }\r\n\r\n return (\r\n <div key={index}>\r\n <div className={classes.checkoutInfo}>\r\n <div className={classes.generalRow}>\r\n <Typography variant=\"h3\" className={classes.bookingTitle}>\r\n {form.title}\r\n </Typography>\r\n {!isStatic && (\r\n <DeleteOutlineIcon\r\n className={classes.deleteIcon}\r\n onClick={() => deleteRelatedProduct(index)}\r\n />\r\n )}\r\n </div>\r\n <div className={classes.generalRow}>\r\n {startingDate && !endingDate && (\r\n <Typography variant=\"body1\">\r\n {startingDate}{' '}\r\n {startTime &&\r\n `· ${startTime} · ${duration} ${t(timeType)}`}\r\n </Typography>\r\n )}\r\n {startingDate && endingDate && (\r\n <Typography variant=\"body1\">\r\n {startingDate} {' - '} {endingDate}\r\n </Typography>\r\n )}\r\n {startDate && (\r\n <Typography variant=\"body1\">\r\n {startDate} – {endDate}\r\n </Typography>\r\n )}\r\n </div>\r\n {checkIn && (\r\n <div className={classes.generalRow}>\r\n <Typography variant=\"body1\">\r\n {t('Check-in')}: {checkIn} - {t('Check-out')}:{' '}\r\n {checkOut}\r\n </Typography>\r\n </div>\r\n )}\r\n </div>\r\n <div className={classes.checkoutInfo}>\r\n <Participants\r\n changeFormFieldValue={changeFormFieldValue}\r\n isDelete={true}\r\n participants={participants}\r\n pricesType={pricesType}\r\n dates={dates || item.multiDates}\r\n currency={currency}\r\n productsMenuIndex={productsMenuIndex}\r\n isAccommodation={isAccommodation}\r\n />\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n <MandatoryFees\r\n mandatoryFees={mandatoryFees}\r\n currency={currency}\r\n changeFormFieldValue={changeFormFieldValue}\r\n isRelated={true}\r\n products={activities}\r\n isStatic={isStatic}\r\n />\r\n <AddOns\r\n addOns={addOns}\r\n currency={currency}\r\n changeFormFieldValue={changeFormFieldValue}\r\n isRelated={true}\r\n products={activities}\r\n isStatic={isStatic}\r\n />\r\n </>\r\n );\r\n};\r\n\r\nexport const Total = ({ widgetForm, productData, currency, isStatic }) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n let dates = widgetForm.values.dates;\r\n const participants = widgetForm.values.participants;\r\n const addOns = widgetForm.values.addOns;\r\n const mandatoryFees = widgetForm.values.mandatoryFees;\r\n const activities = widgetForm.values.activities;\r\n let selectedActivities = activities.filter(item => item.isSelected);\r\n const pricesTypeObj = {\r\n pricesType: productData.pricesType,\r\n isAccommodation: !productData.scheduleType\r\n };\r\n const startingDate = widgetForm.values.startingDate;\r\n const endingDate = widgetForm.values.endingDate;\r\n\r\n selectedActivities = selectedActivities.map(activity => {\r\n if (activity.startingDate && activity.endingDate) {\r\n return {\r\n ...activity,\r\n isAccommodation: false,\r\n multiDates: {\r\n startDate: activity.startingDate,\r\n endDate: activity.endingDate\r\n }\r\n };\r\n }\r\n if (activity.multiDates) {\r\n return {\r\n ...activity,\r\n isAccommodation: false\r\n };\r\n }\r\n return {\r\n ...activity,\r\n isAccommodation: true\r\n };\r\n });\r\n\r\n if (isStatic && !dates && startingDate && endingDate) {\r\n dates = {\r\n startDate: startingDate,\r\n endDate: endingDate\r\n };\r\n }\r\n\r\n if (\r\n isStatic &&\r\n !dates &&\r\n widgetForm.values.multiDates &&\r\n widgetForm.values.multiDates.endDate\r\n ) {\r\n dates = {\r\n startDate: widgetForm.values.multiDates.startDate,\r\n endDate: widgetForm.values.multiDates.endDate\r\n };\r\n }\r\n\r\n const totalPrice = currencyFormatter(\r\n getTotalPrice(\r\n pricesTypeObj,\r\n dates,\r\n participants,\r\n addOns,\r\n mandatoryFees,\r\n selectedActivities,\r\n currency,\r\n dates\r\n )\r\n );\r\n\r\n return (\r\n <div className={classes.totalRow}>\r\n <Typography variant=\"h3\" className={classes.bookingTitle}>\r\n {t('Total')}\r\n </Typography>\r\n <Typography variant=\"h3\">\r\n <span className={classes.currency}>{currency}</span> {totalPrice}\r\n </Typography>\r\n </div>\r\n );\r\n};\r\n\r\nconst Checkout = ({\r\n changeFormFieldValue,\r\n handleSubmit,\r\n title,\r\n widgetForm,\r\n isSummary,\r\n productData,\r\n wrapperClass,\r\n isAccommodationBooking,\r\n productsMenuIndex\r\n}) => {\r\n const classes = useStyles();\r\n const [t] = useTranslation();\r\n\r\n const currency = widgetForm ? widgetForm.values.currency : '';\r\n\r\n return (\r\n <div className={classNames(classes.wrapper, wrapperClass)}>\r\n <div className={classes.leftSide}>\r\n <Typography variant=\"h3\" classes={{ root: classes.sectionTitleIndent }}>\r\n {t(title)}\r\n </Typography>\r\n\r\n <form onSubmit={handleSubmit} className={classes.list}>\r\n {isSummary && (\r\n <Typography variant=\"h3\" className={classes.summaryTitle}>\r\n Summary\r\n </Typography>\r\n )}\r\n <GeneralCheckout\r\n changeFormFieldValue={changeFormFieldValue}\r\n widgetForm={widgetForm}\r\n productData={productData}\r\n currency={currency}\r\n isAccommodationBooking={isAccommodationBooking}\r\n productsMenuIndex={productsMenuIndex}\r\n />\r\n <RelatedCheckout\r\n changeFormFieldValue={changeFormFieldValue}\r\n widgetForm={widgetForm}\r\n currency={currency}\r\n isAccommodationBooking={isAccommodationBooking}\r\n productsMenuIndex={productsMenuIndex}\r\n />\r\n <Total\r\n widgetForm={widgetForm}\r\n productData={productData}\r\n currency={currency}\r\n isAccommodationBooking={isAccommodationBooking}\r\n />\r\n </form>\r\n </div>\r\n <div className={classes.rightSide}>\r\n <BookingInformation data={productData} form={widgetForm} />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n widgetForm: state.form.widgetForm\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n changeFormFieldValue: (field, value) => {\r\n dispatch(change('widgetForm', field, value));\r\n }\r\n});\r\n\r\nexport default reduxForm({\r\n form: 'widgetForm',\r\n destroyOnUnmount: false,\r\n forceUnregisterOnUnmount: true,\r\n touchOnBlur: false\r\n})(connect(mapStateToProps, mapDispatchToProps)(Checkout));\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\nimport { useLazyQuery } from '@apollo/react-hooks';\r\nimport { WIDGET_ACCOMMODATIONS } from '../../../graphql/queries/accommodations';\r\nimport { CATEGORY_PRICES, DAILY_PRICES, FIXED_PRICES } from '../constants';\r\nimport { getPrices } from '../../../utils/accommodations-and-activities/prepareReceivedAccommodationData';\r\nimport moment from 'moment';\r\n\r\nexport const useAccommodationsInfiniteQuery = ({ startDate, endDate, guests, ownerId }, skip) => {\r\n const [page, setPage] = useState(0);\r\n const [accommodations, setAccommodations] = useState(null);\r\n const [fetchMore, { loading, data }] = useLazyQuery(WIDGET_ACCOMMODATIONS, {\r\n notifyOnNetworkStatusChange: true,\r\n fetchPolicy: 'network-only',\r\n onCompleted: (accData) => {\r\n if (!accData || !accData.accommodations) return;\r\n\r\n const newAccommodations = accData.accommodations.map(item => {\r\n if (item.pricesType) {\r\n return item;\r\n }\r\n\r\n let priceType = FIXED_PRICES;\r\n\r\n if (item.prices[0].participant.participant) {\r\n priceType = CATEGORY_PRICES;\r\n } else if (item.prices[0].day) {\r\n priceType = DAILY_PRICES;\r\n }\r\n\r\n return {\r\n ...item,\r\n ...getPrices(item),\r\n pricesType: priceType\r\n };\r\n });\r\n\r\n if (accommodations?.length) {\r\n setPage(page + 1);\r\n }\r\n\r\n setAccommodations([...(accommodations || []), ...newAccommodations]);\r\n }\r\n });\r\n\r\n const fetchData = useCallback((requestedPage) => {\r\n const variables = {\r\n page: requestedPage ?? 0,\r\n businessOwnerId: ownerId,\r\n numberOfAccommodationPerPage: 9,\r\n startPeriod: startDate && moment(startDate).format('YYYY-MM-DD'),\r\n endPeriod: endDate && moment(endDate).format('YYYY-MM-DD')\r\n };\r\n\r\n if (guests) {\r\n variables.guestsNumber = guests;\r\n }\r\n\r\n fetchMore({ variables });\r\n }, [guests, ownerId, startDate, endDate]);\r\n\r\n useEffect(() => {\r\n if (!skip) {\r\n fetchData(0);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!startDate || !endDate) return;\r\n setAccommodations([]);\r\n fetchData(0);\r\n setPage(0);\r\n }, [startDate, endDate]);\r\n\r\n useEffect(() => {\r\n // was moving this logic, needs to be reviewed/tested as startDate and endDate are not in dependency array\r\n if (guests && startDate && endDate) {\r\n setAccommodations([]);\r\n fetchData(0);\r\n setPage(0);\r\n }\r\n }, [guests]);\r\n\r\n return {\r\n accommodationsPage: page,\r\n accommodations,\r\n fetchAccommodationsData: fetchData,\r\n loading,\r\n perPage: data ? data.numberOfAccommodationsPages - 1 : 0\r\n }\r\n}\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\nimport { useLazyQuery } from '@apollo/react-hooks';\r\nimport { getPrices } from '../../../utils/accommodations-and-activities/prepareReceivedAccommodationData';\r\nimport moment from 'moment';\r\nimport { WIDGET_ACTIVITIES } from '../../../graphql/queries/activities';\r\n\r\nexport const useActivitiesInfiniteQuery = ({ startDate, endDate, guests, ownerId }, skip) => {\r\n const [page, setPage] = useState(0);\r\n const [activities, setActivities] = useState(null);\r\n const [fetchMore, { loading, data, networkStatus }] = useLazyQuery(WIDGET_ACTIVITIES, {\r\n notifyOnNetworkStatusChange: true,\r\n fetchPolicy: 'network-only',\r\n onCompleted: (accData) => {\r\n if (!accData || !accData.activities) return;\r\n\r\n const newActivities = accData.activities.map(item => {\r\n if (item.location) {\r\n return item;\r\n }\r\n\r\n return {\r\n ...item,\r\n location: item.startingPoint,\r\n guestsNumber: item.maxParticipants,\r\n bedDetails: [],\r\n ...getPrices(item)\r\n };\r\n });\r\n\r\n if (activities?.length) {\r\n setPage(page + 1);\r\n }\r\n\r\n setActivities([...(activities || []), ...newActivities]);\r\n }\r\n });\r\n\r\n const fetchData = useCallback((requestedPage) => {\r\n const variables = {\r\n page: requestedPage ?? 0,\r\n businessOwnerId: ownerId,\r\n numberOfActivityPerPage: 9,\r\n startPeriod: startDate && moment(startDate).format('YYYY-MM-DD'),\r\n endPeriod: endDate && moment(endDate).format('YYYY-MM-DD')\r\n };\r\n\r\n if (guests) {\r\n variables.guestsNumber = guests;\r\n }\r\n\r\n fetchMore({ variables });\r\n }, [guests, ownerId, startDate, endDate]);\r\n\r\n useEffect(() => {\r\n if (!skip) {\r\n fetchData(0);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!startDate || !endDate) return;\r\n setActivities([]);\r\n fetchData(0);\r\n setPage(0);\r\n }, [startDate, endDate]);\r\n\r\n useEffect(() => {\r\n if (guests && startDate && endDate) {\r\n setActivities([]);\r\n fetchData(0);\r\n setPage(0);\r\n }\r\n }, [guests]);\r\n\r\n return {\r\n activitiesPage: page,\r\n activities,\r\n fetchActivitiesData: fetchData,\r\n loading,\r\n perPage: data ? data.numberOfActivitiesPages - 1 : 0\r\n }\r\n}\r\n","import { createMuiTheme } from '@material-ui/core/styles';\r\n\r\nconst widgetTheme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: '#0E8BB4'\r\n },\r\n secondary: {\r\n main: '#254052'\r\n },\r\n error: {\r\n main: '#EB5757'\r\n }\r\n },\r\n typography: {\r\n fontFamily: 'Fira Sans',\r\n h1: {\r\n fontSize: '17px',\r\n lineHeight: '30px',\r\n fontWeight: 'bold'\r\n },\r\n h2: {\r\n fontSize: '15px',\r\n lineHeight: '24px',\r\n fontWeight: 'bold'\r\n },\r\n h3: {\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n fontWeight: 'bold'\r\n },\r\n h4: {\r\n fontSize: '10px',\r\n lineHeight: '18px',\r\n fontWeight: 'bold'\r\n },\r\n body1: {\r\n fontSize: '13px',\r\n lineHeight: '18px',\r\n color: '#071B27'\r\n },\r\n body2: {\r\n fontSize: '11px',\r\n fontWeight: 'bold'\r\n },\r\n button: {\r\n textTransform: 'capitalize',\r\n fontWeight: 500\r\n }\r\n },\r\n overrides: {\r\n MuiCssBaseline: {\r\n '@global': {\r\n '.CalendarDay': {\r\n position: 'relative',\r\n padding: 0\r\n }\r\n }\r\n }\r\n }\r\n});\r\n\r\nexport default widgetTheme;\r\n","import { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles({\r\n wrapper: {\r\n display: 'flex',\r\n justifyContent: 'center',\r\n paddingTop: '35px'\r\n },\r\n bookingDetails: {\r\n width: '600px'\r\n },\r\n doneIcon: {\r\n color: '#0D7AA1',\r\n fontSize: '22px',\r\n marginRight: '10px'\r\n },\r\n bookingNumber: {\r\n display: 'contents',\r\n fontWeight: 'bold',\r\n textTransform: 'uppercase'\r\n },\r\n title: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n color: '#071B27',\r\n marginBottom: '20px',\r\n fontWeight: 'normal'\r\n },\r\n bookingTitle: {\r\n color: '#071B27',\r\n textTransform: 'uppercase',\r\n marginBottom: '15px',\r\n letterSpacing: '0.05em'\r\n },\r\n loaderClassName: {\r\n width: '80px !important',\r\n height: '80px !important'\r\n },\r\n loaderWrapper: {\r\n position: 'fixed'\r\n }\r\n});\r\n\r\nexport default useStyles;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useSnackbar } from 'notistack';\r\nimport { useParams, useLocation } from 'react-router-dom';\r\nimport { useMutation, useQuery } from '@apollo/react-hooks';\r\n\r\nimport { ThemeProvider } from '@material-ui/core/styles';\r\nimport { Typography, Button } from '@material-ui/core';\r\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\r\n\r\nimport { ACCOMMODATION_BOOKING } from 'graphql/queries/accommodations-bookings';\r\nimport { ACTIVITY_BOOKING } from 'graphql/queries/activities-bookings';\r\nimport {\r\n CANCEL_ACCOMMODATION_BOOKING,\r\n CANCEL_ACTIVITY_BOOKING\r\n} from 'graphql/mutations/booking';\r\n\r\nimport { getReceivedBookedAccommodationData } from 'utils/book-accommodation/prepareReceivedBookedAccoomodationData';\r\nimport { getReceivedBookedActivityData } from 'utils/book-activity/prepareReceivedBookedActivityData';\r\nimport { getGeneralInfo } from 'utils/accommodations-and-activities/prepareReceivedAccommodationData';\r\nimport { getGeneralInfo as getGeneralActivityInfo } from 'utils/accommodations-and-activities/prepareReceivedActivityData';\r\n\r\nimport {\r\n CATEGORY_PRICES,\r\n FIXED_PRICES,\r\n DAILY_PRICES\r\n} from 'pages/widget/constants';\r\nimport {\r\n GeneralCheckout,\r\n RelatedCheckout,\r\n Total\r\n} from 'pages/widget/components/checkout/Checkout';\r\n\r\nimport { CircularLoader } from 'components';\r\n\r\nimport widgetTheme from 'widgetTheme';\r\n\r\nimport useStyles from './styles';\r\n\r\nconst BookingDetails = () => {\r\n const classes = useStyles();\r\n const { id, token } = useParams();\r\n const { enqueueSnackbar } = useSnackbar();\r\n const location = useLocation();\r\n\r\n const [booking, setBooking] = useState(null);\r\n const [product, setProduct] = useState(null);\r\n const [currency, setCurrency] = useState('USD');\r\n const [isAccommodationBooking, setIsAccommodationBooking] = useState(null);\r\n const [isCanceled, setCanceled] = useState(null);\r\n const [bookingCancelation, setBookingCancelation] = useState(\r\n 'Booking cancelation'\r\n );\r\n\r\n const [cancellationPolicy, setCancellationPolicy] = useState('');\r\n const [cancellationNo, setCancellationNo] = useState('');\r\n const [cancelActivityBooking] = useMutation(CANCEL_ACTIVITY_BOOKING);\r\n const [cancelAccommodationBooking] = useMutation(\r\n CANCEL_ACCOMMODATION_BOOKING\r\n );\r\n\r\n const cancelAccommodation =\r\n location.pathname.indexOf('cancel-accommodation-booking') > 0;\r\n const cancelActivity =\r\n location.pathname.indexOf('cancel-activity-booking') > 0;\r\n const cancelation = cancelActivity || cancelAccommodation ? true : false;\r\n const cancelationAction = cancelation && !isCanceled ? true : false;\r\n\r\n const {\r\n loading: accommodationLoading,\r\n error: accommodationError,\r\n data: accommodationData\r\n } = useQuery(ACCOMMODATION_BOOKING, {\r\n skip:\r\n location.pathname.indexOf('accommodations-bookings') < 0 &&\r\n location.pathname.indexOf('cancel-accommodation-booking') < 0,\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n accommodationBookingId: parseInt(id),\r\n token: token\r\n }\r\n });\r\n\r\n const {\r\n loading: activityLoading,\r\n error: activityError,\r\n data: activityData\r\n } = useQuery(ACTIVITY_BOOKING, {\r\n skip:\r\n location.pathname.indexOf('activities-bookings') < 0 &&\r\n location.pathname.indexOf('cancel-activity-booking') < 0,\r\n fetchPolicy: 'no-cache',\r\n notifyOnNetworkStatusChange: true,\r\n variables: {\r\n activityBookingId: parseInt(id),\r\n token: token\r\n }\r\n });\r\n\r\n const handleCancelationBooking = () => {\r\n if (id && token) {\r\n if (cancelAccommodation) {\r\n setBookingCancelation('Your booking was successfully cancelled');\r\n setCanceled(true);\r\n cancelAccommodationBooking({\r\n variables: {\r\n id: id,\r\n token: token\r\n }\r\n }).then(() => {});\r\n enqueueSnackbar('Booking was canceled', {\r\n variant: 'error'\r\n });\r\n } else if (cancelActivity) {\r\n setBookingCancelation('Your booking was successfully cancelled');\r\n setCanceled(true);\r\n cancelActivityBooking({\r\n variables: {\r\n ids: [id],\r\n token: token\r\n }\r\n }).then(() => {});\r\n enqueueSnackbar('Booking was canceled', {\r\n variant: 'error'\r\n });\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (!accommodationData) return;\r\n\r\n if (!accommodationData.accommodationsBookings.length) {\r\n enqueueSnackbar('Booking does not exist', {\r\n variant: 'error'\r\n });\r\n return;\r\n }\r\n\r\n const accommodationBooking = accommodationData.accommodationsBookings[0];\r\n\r\n if (accommodationBooking.isCanceled) {\r\n enqueueSnackbar('Booking was canceled', {\r\n variant: 'error'\r\n });\r\n return;\r\n }\r\n\r\n const accommodation = accommodationBooking.accommodation;\r\n const bookingData = getReceivedBookedAccommodationData(\r\n accommodationBooking\r\n );\r\n bookingData.activities = bookingData.activities.map(item => {\r\n item.isSelected = true;\r\n return item;\r\n });\r\n const productData = getGeneralInfo(accommodation);\r\n setIsAccommodationBooking(true);\r\n setBooking({\r\n values: bookingData\r\n });\r\n setCurrency(bookingData.currency);\r\n setProduct({\r\n ...productData,\r\n pricesType: getAccommodationPricesType(accommodation)\r\n });\r\n\r\n setCancellationPolicy(accommodationBooking.accommodation.cancellation || '');\r\n setCancellationNo(accommodationBooking.accommodation.cancellationNo || '');\r\n\r\n }, [accommodationData]);\r\n\r\n useEffect(() => {\r\n if (!activityData) return;\r\n\r\n if (!activityData.activitiesBookings.length) {\r\n enqueueSnackbar('Booking does not exist', {\r\n variant: 'error'\r\n });\r\n return;\r\n }\r\n\r\n const activityBooking = activityData.activitiesBookings[0];\r\n\r\n if (activityBooking.isCanceled) {\r\n enqueueSnackbar('Booking was canceled', {\r\n variant: 'error'\r\n });\r\n return;\r\n }\r\n\r\n const activity = activityBooking.activity;\r\n\r\n const bookingData = getReceivedBookedActivityData(activityBooking);\r\n bookingData.activities = bookingData.accommodations.map(item => {\r\n item.isSelected = true;\r\n return item;\r\n });\r\n const productData = getGeneralActivityInfo(activity);\r\n setIsAccommodationBooking(false);\r\n setBooking({\r\n values: bookingData\r\n });\r\n setCurrency(bookingData.currency);\r\n setProduct({\r\n ...productData,\r\n pricesType: activity['pricesType'],\r\n scheduleType: activity['scheduleType']\r\n });\r\n\r\n setCancellationPolicy(activityBooking.activity.cancellation || '');\r\n setCancellationNo(activityBooking.activity.cancellationNo || '');\r\n\r\n }, [activityData]);\r\n\r\n /*useEffect(() => {\r\n if (id && token) {\r\n if (cancelAccommodation) {\r\n cancelAccommodationBooking({\r\n variables: {\r\n id: 222,\r\n token: token\r\n }\r\n }).then(() => {});\r\n } else if (cancelActivity) {\r\n cancelActivityBooking({\r\n variables: {\r\n ids: [id],\r\n token: token\r\n }\r\n }).then(() => {});\r\n }\r\n }\r\n }, [cancelAccommodation, cancelActivity]);*/\r\n\r\n const getAccommodationPricesType = accommodation => {\r\n const firstPrice = accommodation.prices[0];\r\n\r\n if (firstPrice.participant.participant) {\r\n return CATEGORY_PRICES;\r\n } else if (firstPrice.day) {\r\n return DAILY_PRICES;\r\n } else {\r\n return FIXED_PRICES;\r\n }\r\n };\r\n\r\n if (accommodationLoading || activityLoading)\r\n return (\r\n <CircularLoader\r\n isLoading={true}\r\n loaderClassName={classes.loaderClassName}\r\n className={classes.loaderWrapper}\r\n />\r\n );\r\n\r\n if (accommodationError || activityError || !booking) return null;\r\n\r\n return (\r\n <ThemeProvider theme={widgetTheme}>\r\n <div className={classes.wrapper}>\r\n <div className={classes.bookingDetails}>\r\n <Typography variant=\"h1\" className={classes.title}>\r\n {!cancelationAction && (\r\n <CheckCircleIcon className={classes.doneIcon} />\r\n )}\r\n {cancelAccommodation || cancelActivity\r\n ? bookingCancelation\r\n : 'Your booking was successfully created'}\r\n {/*<span className={classes.bookingNumber}>ABS123</span>*/}\r\n </Typography>\r\n <Typography variant=\"h3\" className={classes.bookingTitle}>\r\n Booking summary\r\n </Typography>\r\n <GeneralCheckout\r\n changeFormFieldValue={() => {}}\r\n widgetForm={booking}\r\n productData={product}\r\n currency={currency}\r\n isAccommodationBooking={isAccommodationBooking}\r\n isStatic={true}\r\n />\r\n <RelatedCheckout\r\n changeFormFieldValue={() => {}}\r\n widgetForm={booking}\r\n currency={currency}\r\n isAccommodationBooking={isAccommodationBooking}\r\n isStatic={true}\r\n />\r\n \r\n <Total\r\n widgetForm={booking}\r\n productData={product}\r\n currency={currency}\r\n isAccommodationBooking={isAccommodationBooking}\r\n isStatic={true}\r\n />\r\n <Typography variant=\"h3\" className={classes.cancellationPolicy}>\r\n Cancellation Policy : \r\n \r\n {cancellationNo ? (\r\n <>\r\n <p>{cancellationNo}</p> \r\n </>\r\n ) : (\r\n <>\r\n <p>{cancellationPolicy || 'Not specified'}</p>\r\n </>\r\n )}\r\n </Typography>\r\n {cancelationAction && (\r\n <Button\r\n variant=\"outlined\"\r\n color=\"primary\"\r\n style={{ float: 'right' }}\r\n onClick={() => {\r\n handleCancelationBooking();\r\n }}\r\n >\r\n Confirm Cancellation\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n </ThemeProvider>\r\n );\r\n};\r\n\r\nexport default BookingDetails;\r\n","import React from 'react';\r\nimport { BrowserRouter as Router, Switch, Route } from 'react-router-dom';\r\n\r\nimport SignInPage from 'pages/sign-in';\r\nimport ResetPasswordPage from 'pages/reset-password';\r\nimport CreateNewPasswordPage from 'pages/create-new-password';\r\nimport CreateActivity from 'pages/create-activity';\r\nimport CreateAccommodation from 'pages/create-accommodation';\r\nimport AccommodationsAndActivitiesPage from 'pages/accommodations-and-activities';\r\nimport BookActivitiesList from 'pages/book-activities-list/BookActivitiesList';\r\nimport BookActivity from 'pages/book-activity/BookActivity';\r\nimport ManualBookActivity from 'pages/book-activity-manual/ManualBookActivity';\r\nimport BookAccommodationList from 'pages/book-accommodations-list/BookAccommodationsList';\r\nimport BookingList from 'pages/bookings-list';\r\nimport BookAccommodation from 'pages/book-accommodation/BookAccommodation';\r\nimport ManualBookAccommodation from 'pages/book-accommodation-manual/ManualBookAccommodation';\r\nimport Statistics from 'pages/statistics/Statistics';\r\nimport SettingsPage from 'pages/user-settings/SettingsPage';\r\nimport ActivitiesOverviewCalendar from 'pages/overview-calendar/ActivitiesOverviewCalendar';\r\nimport AccommodationsOverviewCalendar from 'pages/overview-calendar/AccommodationsOverviewCalendar';\r\nimport Overview from 'pages/overview/Overview';\r\nimport WidgetSettings from './pages/widget-settings/WidgetSettings';\r\nimport BusinessOwners from './pages/business-owners/BusinessOwners';\r\nimport Users from './pages/users/Users';\r\nimport TestWidget from 'pages/test-widget/TestWidget';\r\nimport StripeInstruction from 'pages/payments-instruction/StripeInstruction';\r\nimport PayPalInstruction from 'pages/payments-instruction/PayPalInstruction';\r\nimport BookingDetails from 'pages/booking-details/BookingDetails';\r\n\r\nimport {\r\n PrivateRoute,\r\n AuthLayout,\r\n UpdateActivityWrapper,\r\n UpdateAccommodationWrapper,\r\n UpdateAccommodationBookingWrapper,\r\n UpdateActivityBookingWrapper\r\n} from 'components';\r\n\r\nexport default function Routes() {\r\n return (\r\n <Router>\r\n <Switch>\r\n <Route path=\"/login\">\r\n <AuthLayout>\r\n <SignInPage />\r\n </AuthLayout>\r\n </Route>\r\n\r\n <Route path=\"/password/reset\">\r\n <AuthLayout>\r\n <ResetPasswordPage />\r\n </AuthLayout>\r\n </Route>\r\n\r\n <Route path=\"/password/reset-new/:id/:token\">\r\n <AuthLayout>\r\n <CreateNewPasswordPage isConfirm={false} isReset={true} />\r\n </AuthLayout>\r\n </Route>\r\n\r\n <Route path=\"/password/confirm-new/:id/:token\">\r\n <AuthLayout>\r\n <CreateNewPasswordPage isConfirm={true} isReset={false} />\r\n </AuthLayout>\r\n </Route>\r\n\r\n <PrivateRoute\r\n path=\"/accommodations-bookings/:id/edit\"\r\n component={UpdateAccommodationBookingWrapper}\r\n />\r\n\r\n <PrivateRoute\r\n path=\"/activities-bookings/:id/edit\"\r\n component={UpdateActivityBookingWrapper}\r\n />\r\n\r\n <PrivateRoute exact path=\"/activities\" component={BookActivitiesList} />\r\n\r\n <PrivateRoute path=\"/activities/:id/book\" component={BookActivity} />\r\n\r\n <PrivateRoute\r\n path=\"/activities/:id/manual-book\"\r\n component={ManualBookActivity}\r\n />\r\n\r\n <PrivateRoute path=\"/activities/create\" component={CreateActivity} />\r\n\r\n <PrivateRoute\r\n path=\"/activities/:id/copy\"\r\n component={UpdateActivityWrapper}\r\n >\r\n <CreateActivity />\r\n </PrivateRoute>\r\n\r\n <PrivateRoute path=\"/activities/:id\" component={UpdateActivityWrapper}>\r\n <CreateActivity />\r\n </PrivateRoute>\r\n\r\n <PrivateRoute\r\n exact\r\n path=\"/accommodations\"\r\n component={BookAccommodationList}\r\n />\r\n\r\n <PrivateRoute\r\n path=\"/accommodations/:id/book\"\r\n component={BookAccommodation}\r\n />\r\n\r\n <PrivateRoute\r\n path=\"/accommodations/:id/manual-book\"\r\n component={ManualBookAccommodation}\r\n />\r\n\r\n <PrivateRoute\r\n path=\"/accommodations/create\"\r\n component={CreateAccommodation}\r\n />\r\n\r\n <PrivateRoute\r\n path=\"/accommodations/:id/copy\"\r\n component={UpdateAccommodationWrapper}\r\n >\r\n <CreateAccommodation />\r\n </PrivateRoute>\r\n\r\n <PrivateRoute\r\n path=\"/accommodations/:id\"\r\n component={UpdateAccommodationWrapper}\r\n >\r\n <CreateAccommodation />\r\n </PrivateRoute>\r\n\r\n <PrivateRoute\r\n path=\"/accommodations-and-activities\"\r\n component={AccommodationsAndActivitiesPage}\r\n />\r\n\r\n <PrivateRoute\r\n path=\"/activities-overview-calendar\"\r\n component={ActivitiesOverviewCalendar}\r\n />\r\n\r\n <PrivateRoute\r\n path=\"/accommodations-overview-calendar\"\r\n component={AccommodationsOverviewCalendar}\r\n />\r\n\r\n <PrivateRoute exact path=\"/\" component={Overview} />\r\n <PrivateRoute path=\"/accommodations-and-activities\">\r\n <AccommodationsAndActivitiesPage />\r\n </PrivateRoute>\r\n\r\n <PrivateRoute path=\"/bookings-list\" component={BookingList} />\r\n\r\n <PrivateRoute exact path=\"/statistics\" component={Statistics} />\r\n <PrivateRoute exact path=\"/settings\" component={SettingsPage} />\r\n <PrivateRoute path=\"/widget-settings\" component={WidgetSettings} />\r\n\r\n <PrivateRoute path=\"/business-owners\" component={BusinessOwners} />\r\n <PrivateRoute path=\"/users\" component={Users} />\r\n\r\n <PrivateRoute path=\"/test-widget\" component={TestWidget} />\r\n\r\n <PrivateRoute\r\n path=\"/accommodations-bookings/:id/details/:token\"\r\n component={BookingDetails}\r\n />\r\n <PrivateRoute\r\n path=\"/activities-bookings/:id/details/:token\"\r\n component={BookingDetails}\r\n />\r\n <PrivateRoute\r\n path=\"/cancel-activity-booking/:id/:token\"\r\n component={BookingDetails}\r\n />\r\n <PrivateRoute\r\n path=\"/cancel-accommodation-booking/:id/:token\"\r\n component={BookingDetails}\r\n />\r\n\r\n <PrivateRoute\r\n path=\"/stripe-instruction\"\r\n component={StripeInstruction}\r\n />\r\n <PrivateRoute\r\n path=\"/paypal-instruction\"\r\n component={PayPalInstruction}\r\n />\r\n </Switch>\r\n </Router>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { createStore } from 'redux';\r\nimport moment from 'moment-timezone';\r\nimport { Provider } from 'react-redux';\r\nimport { ApolloClient } from 'apollo-client';\r\nimport {\r\n InMemoryCache,\r\n IntrospectionFragmentMatcher\r\n} from 'apollo-cache-inmemory';\r\nimport { HttpLink } from 'apollo-link-http';\r\nimport { createUploadLink } from 'apollo-upload-client';\r\nimport { onError } from 'apollo-link-error';\r\nimport { ApolloLink } from 'apollo-link';\r\nimport { ApolloProvider } from 'react-apollo';\r\nimport { SnackbarProvider } from 'notistack';\r\nimport ConfirmProvider from 'providers/ConfirmProvide';\r\n\r\nimport { ThemeProvider } from '@material-ui/core/styles';\r\n\r\nimport rootReducer from 'reducers';\r\n\r\nimport Routes from './routes';\r\nimport { URI } from './config';\r\nimport theme from './theme';\r\nimport { CssBaseline } from '@material-ui/core';\r\n\r\nconst fragmentMatcher = new IntrospectionFragmentMatcher({\r\n introspectionQueryResultData: {\r\n __schema: {\r\n types: [] // no types provided\r\n }\r\n }\r\n});\r\n\r\nconst store = createStore(rootReducer);\r\n\r\nconst client = new ApolloClient({\r\n link: ApolloLink.from([\r\n onError(({ graphQLErrors, networkError }) => {\r\n if (graphQLErrors)\r\n graphQLErrors.forEach(({ message, locations, path }) => {\r\n console.log(\r\n `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`\r\n );\r\n if (message === 'User is not logged in') {\r\n window.location = `/login`;\r\n }\r\n });\r\n if (networkError) console.log(`[Network error]: ${networkError}`);\r\n }),\r\n createUploadLink({ uri: URI, credentials: 'include' }),\r\n new HttpLink({\r\n uri: URI,\r\n credentials: 'include'\r\n })\r\n ]),\r\n\r\n cache: new InMemoryCache({ fragmentMatcher })\r\n});\r\n\r\nfunction App() {\r\n moment.tz.setDefault('CET');\r\n moment.locale('en');\r\n moment.updateLocale('en', {\r\n week: {\r\n dow: 1\r\n }\r\n });\r\n\r\n const cssVariables = {\r\n baseUI: {\r\n color: '#0E8BB4'\r\n }\r\n };\r\n\r\n document.documentElement.style.setProperty('--base-color', '#0E8BB4');\r\n\r\n return (\r\n <ApolloProvider client={client}>\r\n <Provider store={store}>\r\n <ThemeProvider theme={{ ...theme, ...cssVariables }}>\r\n <CssBaseline />\r\n\r\n <ConfirmProvider>\r\n <SnackbarProvider\r\n autoHideDuration={3000}\r\n maxSnack={1}\r\n anchorOrigin={{\r\n vertical: 'top',\r\n horizontal: 'right'\r\n }}\r\n >\r\n <Routes />\r\n </SnackbarProvider>\r\n </ConfirmProvider>\r\n </ThemeProvider>\r\n </Provider>\r\n </ApolloProvider>\r\n );\r\n}\r\n\r\nexport default App;\r\n","import i18n from 'i18next';\r\nimport LanguageDetector from 'i18next-browser-languagedetector';\r\nimport XHR from 'i18next-xhr-backend';\r\n\r\nimport translationEng from './locales/en/translation.json';\r\nimport translationNor from './locales/nor/translation.json';\r\n\r\nconst i18nWrapper = defaultLanguage => {\r\n i18n\r\n .use(XHR)\r\n .use(LanguageDetector)\r\n .init({\r\n debug: process.env.NODE_ENV !== 'production',\r\n lng: defaultLanguage || 'English',\r\n fallbackLng: defaultLanguage || 'English',\r\n keySeparator: false,\r\n interpolation: {\r\n escapeValue: false,\r\n formatSeparator: ','\r\n },\r\n react: {\r\n wait: true,\r\n useSuspense: false\r\n },\r\n\r\n ns: ['translations'],\r\n defaultNS: 'translations',\r\n\r\n resources: {\r\n English: {\r\n translations: translationEng\r\n },\r\n Norway: {\r\n translations: translationNor\r\n }\r\n }\r\n });\r\n\r\n return i18n;\r\n};\r\n\r\nexport default i18nWrapper;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import 'react-dates/initialize';\r\nimport 'moment/locale/nb';\r\n\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { I18nextProvider } from 'react-i18next';\r\n\r\nimport 'react-dates/lib/css/_datepicker.css';\r\nimport './index.css';\r\n\r\nimport App from './App';\r\nimport i18nWrapper from './i18n';\r\n\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nconst defaultLanguage = localStorage.getItem('language');\r\n\r\nReactDOM.render(\r\n <I18nextProvider i18n={i18nWrapper(defaultLanguage || 'English')}>\r\n <App />\r\n </I18nextProvider>,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}