{"version":3,"file":"index.mjs","sources":["../../../../../../../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../../../../../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../../../../../../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../../../../../../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../../../../../../clearscore-group/libs/constants/session-action-types/src/index.ts","../../../../../../../../clearscore-group/libs/redux/action-bridge-middleware/src/action-bridge-middleware.js","../../../../../../../../../node_modules/redux-observable/lib/esm/operators.js","../../../../../../../../../node_modules/redux-observable/lib/esm/ActionsObservable.js","../../../../../../../../../node_modules/redux-observable/lib/esm/StateObservable.js","../../../../../../../../../node_modules/redux-observable/lib/esm/combineEpics.js","../../../../../../../../clearscore-group/libs/helpers/create-action/src/index.js","../../../../../../../../clearscore-group/libs/helpers/create-request-payload/src/index.js","../../../../../../../../clearscore-group/libs/helpers/resolve-props/src/index.js","../../../../../../../../clearscore-group/libs/helpers/can-use-dom/src/index.js","../../../../../../../../clearscore-group/libs/helpers/envs/src/index.js","../../../../../../../../clearscore-group/libs/redux/market/src/utils.js","../../../../../../../../clearscore-group/libs/redux/market/src/types.js","../../../../../../../../clearscore-group/libs/constants/request-statuses/src/index.ts","../../../../../../../../../node_modules/cookie/index.js","../../../../../../../../clearscore-group/libs/helpers/cookies/src/cookies.js","../../../../../../../../clearscore-group/libs/helpers/cookies/src/constants.js","../../../../../../../../clearscore-group/libs/helpers/cookies/src/cookies-publisher.js","../../../../../../../../clearscore-group/libs/helpers/cookies/src/cookies-session.js","../../../../../../../../clearscore-group/libs/helpers/uid/src/index.js","../../../../../../../../clearscore-group/libs/helpers/cookies/src/anonymous-id.js","../../../../../../../../clearscore-group/libs/helpers/cookies/src/index.js","../../../../../../../../clearscore-group/libs/helpers/cookies/src/cs-person.js","../../../../../../../../clearscore-group/libs/helpers/cookies/src/visited-site.js","../../../../../../../../clearscore-group/libs/helpers/cookies/src/cookies-alerts.js","../../../../../../../../clearscore-group/libs/redux/market/src/lib/helpers.js","../../../../../../../../clearscore-group/libs/redux/market/src/reducers/domain.js","../../../../../../../../clearscore-group/libs/redux/market/src/reducers/index.js","../../../../../../../../clearscore-group/libs/helpers/resolve-request/src/index.js","../../../../../../../../clearscore-group/libs/redux/market/src/selectors/getFetchStatus.js","../../../../../../../../clearscore-group/libs/redux/market/src/selectors/getPredicate.js","../../../../../../../../clearscore-group/libs/redux/market/src/selectors/getMarkets.js","../../../../../../../../clearscore-group/libs/redux/market/src/selectors/getActiveMarket.js","../../../../../../../../clearscore-group/libs/redux/market/src/selectors/getLocales.js","../../../../../../../../clearscore-group/libs/redux/market/src/selectors/legacy/legacyMap.js","../../../../../../../../clearscore-group/libs/redux/market/src/selectors/legacy/legacy.getLangCode.js","../../../../../../../../clearscore-group/libs/redux/market/src/selectors/getActiveLocale.js","../../../../../../../../clearscore-group/libs/redux/market/src/selectors/getConfig.js","../../../../../../../../clearscore-group/libs/redux/market/src/selectors/getResolution.js","../../../../../../../../clearscore-group/libs/redux/market/src/selectors/legacy.getLanguage.js","../../../../../../../../clearscore-group/libs/redux/market/src/selectors/index.js","../../../../../../../../clearscore-group/libs/redux/market/src/index.js","../../../../../../../../clearscore-group/libs/redux/market/src/actions.js","../../../../../../../../clearscore-group/libs/redux/store/src/index.ts","../../../../../../../../../node_modules/redux-observable/lib/esm/createEpicMiddleware.js","../../../../../../../../clearscore-group/libs/redux/store/src/assets/development.ts","../../../../../../../../../node_modules/i18next-icu/dist/es/utils.js","../../../../../../../../../node_modules/i18next-icu/dist/es/index.js","../../../../../../../../../node_modules/@babel/runtime/helpers/esm/createClass.js","../../../../../../../../../node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js","../../../../../../../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../../../../../../../clearscore-group/libs/helpers/monitoring/src/index.js","../../../../../../../../clearscore-group/libs/helpers/i18n/src/index.ts","../../../../../../../../clearscore-group/libs/redux/cs-provider/src/detectors/sessionCookie.ts","../../../../../../../../clearscore-group/libs/redux/cs-provider/src/detectors/marketPath.ts","../../../../../../../../clearscore-group/libs/redux/cs-provider/src/lib/i18n.ts","../../../../../../../../clearscore-group/libs/redux/cs-provider/src/index.jsx","../../../../../../../libs/ui/rainbow/font/src/index.ts","../../../../../../../../clearscore-group/libs/redux/router/src/selectors/router.getRegistrationProspectId.js","../../../../../../../../clearscore-group/libs/redux/router/src/selectors/router.getRegistrationStep.js","../../../../../../../../clearscore-group/libs/helpers/query-string/src/index.ts","../../../../../../../../clearscore-group/libs/redux/router/src/selectors/router.getQueryParams.js","../../../../../../../../clearscore-group/libs/redux/router/src/selectors/router.getErrorName.js","../../../../../../../../clearscore-group/libs/redux/router/src/selectors/getCurrentPath.js","../../../../../../../../clearscore-group/libs/redux/router/src/selectors/getMarketInPathName.js","../../../../../../../../clearscore-group/libs/redux/router/src/selectors/getLocationState.js","../../../../../../../../clearscore-group/libs/redux/router/src/index.js","../../../../../../../../clearscore-group/libs/redux/identity/src/lib/market-config.js","../../../../../../../../clearscore-group/libs/redux/identity/src/identity.types.js","../../../../../../../../clearscore-group/libs/redux/identity/src/index.js","../../../../../../../../clearscore-group/libs/redux/identity/src/identity.actions.js","../../../../../../../../clearscore-group/libs/helpers/initialise-tracking-cookies/src/helpers.ts","../../../../../../../../clearscore-group/libs/helpers/initialise-tracking-cookies/src/index.ts","../../../../../../../../clearscore-group/libs/ui/shared/vertical-takeover/src/lib/constants.ts","../../../../../../../../clearscore-group/libs/helpers/cache/src/index.js","../../../../../../../../clearscore-group/libs/helpers/create-global-context/src/index.ts","../../../../../../../../clearscore-group/libs/helpers/injectors/src/css.js","../../../../../../../../clearscore-group/libs/normalize/title-case/src/index.js","../../../../../../../libs/ui/rainbow/tokens/dist/index.mjs","../../../../../../../libs/ui/rainbow/components/loader/src/constants.ts","../../../../../../../libs/ui/rainbow/components/loader/src/loader.tsx","../../../../../../../../clearscore-group/libs/core/flux/lazy-load/src/polyfill/import-module.js","../../../../../../../../clearscore-group/libs/core/flux/lazy-load/src/legacy-browser-lazy-component/index.jsx","../../../../../../../../clearscore-group/libs/helpers/injectors/src/js.js","../../../../../../../../clearscore-group/libs/core/flux/lazy-load/src/index.jsx","../../../../../../../../clearscore-group/libs/redux/routes/src/types.js","../../../../../../../../clearscore-group/libs/redux/routes/src/reducer/routes.domain.js","../../../../../../../../clearscore-group/libs/helpers/state-normalise/src/index.js","../../../../../../../../clearscore-group/libs/redux/routes/src/reducer/lib/filterRoutesByStatus.js","../../../../../../../../clearscore-group/libs/redux/routes/src/reducer/routes.byId.js","../../../../../../../../clearscore-group/libs/redux/routes/src/reducer/routes.byCategory.js","../../../../../../../../clearscore-group/libs/redux/routes/src/reducer/routes.byTemplate.js","../../../../../../../../clearscore-group/libs/redux/routes/src/reducer/routes.byStage.js","../../../../../../../../clearscore-group/libs/redux/routes/src/reducer/index.js","../../../../../../../../clearscore-group/libs/redux/routes/src/reducer/routes.segmentation.js","../../../../../../../../clearscore-group/libs/constants/profile-action-types/src/index.ts","../../../../../../../../clearscore-group/libs/redux/profile/src/actions/index.js","../../../../../../../../clearscore-group/libs/redux/profile/src/reducers/profile.domain.js","../../../../../../../../clearscore-group/libs/redux/profile/src/reducers/index.js","../../../../../../../../clearscore-group/libs/normalize/address/src/index.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getSimple.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getPredicate.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getStatus.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getTerms.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getMarketing.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getFinancial.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getCoachingProducts.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getProducts.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/index.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getAdditionalQuestionData.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getRemortgageData.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getReportAddresses.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getDocumentsMeta.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getSaveModified.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.isTwoFactorAuthEnabled.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getSelfieRequired.js","../../../../../../../../clearscore-group/libs/redux/profile/src/selectors/profile.getUserSettings.js","../../../../../../../../clearscore-group/libs/redux/profile/src/index.js","../../../../../../../../clearscore-group/libs/redux/routes/src/selectors/routeSelector.js","../../../../../../../../clearscore-group/libs/redux/routes/src/selectors/routesSelector.js","../../../../../../../../clearscore-group/libs/redux/routes/src/selectors/routesStagesSelector.js","../../../../../../../../clearscore-group/libs/redux/routes/src/selectors/getRouteByIDVStatus.js","../../../../../../../../clearscore-group/libs/redux/routes/src/selectors/getCurrentPath.js","../../../../../../../../clearscore-group/libs/redux/routes/src/selectors/areRoutesLoaded.js","../../../../../../../../../node_modules/ua-parser-js/src/ua-parser.js","../../../../../../../../../node_modules/current-device/es/index.js","../../../../../../../../clearscore-group/libs/helpers/device/src/index.js","../../../../../../../../../node_modules/tslib/tslib.es6.mjs","../../../../../../../../../node_modules/@fingerprintjs/fingerprintjs/dist/fp.esm.js","../../../../../../../../clearscore-group/libs/helpers/device-fingerprinting/src/fingerprint.js","../../../../../../../../clearscore-group/libs/helpers/segment/src/index.js","../../../../../../../../clearscore-group/libs/redux/session/src/session.actions.js","../../../../../../../../clearscore-group/libs/constants/profile-statuses/src/index.ts","../../../../../../../../clearscore-group/libs/constants/role-statuses/src/index.ts","../../../../../../../../clearscore-group/libs/redux/session/src/reducers/session.domain.js","../../../../../../../../clearscore-group/libs/redux/session/src/reducers/index.js","../../../../../../../../clearscore-group/libs/redux/session/src/selectors/session.getAccountId.js","../../../../../../../../clearscore-group/libs/redux/session/src/selectors/session.getAuthRole.js","../../../../../../../../clearscore-group/libs/redux/session/src/selectors/session.getPredicate.js","../../../../../../../../clearscore-group/libs/redux/session/src/selectors/session.getError.js","../../../../../../../../clearscore-group/libs/redux/session/src/selectors/index.js","../../../../../../../../clearscore-group/libs/redux/session/src/index.js","../../../../../../../../clearscore-group/libs/redux/routes/src/selectors/getUserRoleRoutes.js","../../../../../../../../clearscore-group/libs/redux/routes/src/selectors/getCurrentRouteMarket.js","../../../../../../../../clearscore-group/libs/redux/routes/src/selectors/getSegmentation.js","../../../../../../../../clearscore-group/libs/redux/routes/src/selectors/getTakeoverRoutes.js","../../../../../../../../clearscore-group/libs/redux/routes/src/selectors/index.js","../../../../../../../../clearscore-group/libs/redux/routes/src/index.js","../../../../../../../../clearscore-group/libs/redux/routes/src/actions.js","../../../../../../../../clearscore-group/libs/ui/shared/vertical-takeover/src/components/vertical-takeover-lazy-renderer.tsx","../../../../../../../../clearscore-group/libs/ui/shared/vertical-takeover/src/vertical-takeover.provider.tsx","../../../../../../../../../node_modules/@sentry/utils/esm/node.js","../../../../../../../../../node_modules/@sentry/utils/esm/env.js","../../../../../../../../../node_modules/@sentry/utils/esm/global.js","../../../../../../../../../node_modules/@sentry/utils/esm/is.js","../../../../../../../../../node_modules/@sentry/utils/esm/logger.js","../../../../../../../../../node_modules/@sentry/utils/esm/object.js","../../../../../../../../../node_modules/@sentry/utils/esm/misc.js","../../../../../../../../../node_modules/@sentry/utils/esm/syncpromise.js","../../../../../../../../../node_modules/@sentry/utils/esm/time.js","../../../../../../../../../node_modules/@sentry/hub/esm/session.js","../../../../../../../../../node_modules/@sentry/hub/esm/scope.js","../../../../../../../../../node_modules/@sentry/hub/esm/hub.js","../../../../../../../../../node_modules/react-is/cjs/react-is.production.min.js","../../../../../../../../../node_modules/react-is/index.js","../../../../../../../../../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../../../../../../../../../node_modules/@sentry/react/esm/profiler.js","../../../../../../../../clearscore-group/libs/hooks/use-previous/src/index.js","../../../../../../../../clearscore-group/libs/helpers/session/src/index.js","../../../../../../../../../node_modules/jwt-decode/build/jwt-decode.esm.js","../../../../../../../../clearscore-group/libs/hooks/use-tracking/src/lib/helpers.js","../../../../../../../../clearscore-group/libs/hooks/use-tracking/src/lib/hooks/use-default-segment-props.js","../../../../../../../../clearscore-group/libs/helpers/market/src/index.ts","../../../../../../../../clearscore-group/libs/hooks/use-tracking/src/lib/tracking-event-receiver.js","../../../../../../../../clearscore-group/libs/hooks/use-tracking/src/use-tracking.js","../../../../../../../../clearscore-group/libs/hooks/use-webapp-tracking/src/index.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/dashboard.types.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/dashboard.actions.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/dashboard.constants.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/reducers/dashboard.domain.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/reducers/index.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/selectors/dashboard.getCoachingSummary.js","../../../../../../../../clearscore-group/libs/constants/score-bands/src/index.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/selectors/dashboard.getScores.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/selectors/index.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/selectors/dashboard.getReportMeta.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/selectors/dashboard.getUserStatus.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/selectors/dashboard.getPredicate.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/selectors/dashboard.getDebt.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/selectors/dashboard.getRawData.js","../../../../../../../../clearscore-group/libs/redux/dashboard/src/index.js","../../../../../../../../clearscore-group/libs/redux/connect/src/index.js","../../../../../../../libs/core/webapp/app-shell/src/lib/constants.js","../../../../../../../libs/core/webapp/app-shell/src/core-router/core-routes/auth-route.jsx","../../../../../../../libs/core/webapp/app-shell/src/core-router/core-routes/prospect-route.jsx","../../../../../../../libs/core/webapp/app-shell/src/core-router/core-routes/nomatch-route.jsx","../../../../../../../libs/core/webapp/app-shell/src/core-router/core-routes/unauth-route.jsx","../../../../../../../../../node_modules/strict-uri-encode/index.js","../../../../../../../../../node_modules/decode-uri-component/index.js","../../../../../../../../../node_modules/split-on-first/index.js","../../../../../../../../../node_modules/filter-obj/index.js","../../../../../../../../../node_modules/query-string/index.js","../../../../../../../../../node_modules/fast-deep-equal/index.js","../../../../../../../libs/core/webapp/app-shell/src/lib/feature-query-params.ts","../../../../../../../libs/core/webapp/app-shell/src/core-router/core-router-component.jsx","../../../../../../../libs/core/webapp/app-shell/src/lib/hooks/use-scroll-to-top.js","../../../../../../../../clearscore-group/libs/hooks/use-tracking/src/use-page-tracking/index.js","../../../../../../../libs/core/webapp/app-shell/src/lib/hooks/use-tracking/index.js","../../../../../../../libs/core/webapp/app-shell/src/core-router/core-router-container.js","../../../../../../../libs/core/webapp/app-shell/src/lib/a11y-outline.js","../../../../../../../libs/core/webapp/app-shell/src/core-app.jsx","../../../../../../../../clearscore-group/libs/helpers/query-client/src/index.ts","../../../../../../../libs/ui/rainbow/icons/clearscore-logo-wordmark/clearscore-logo-wordmark.svg","../../../../../../../../clearscore-group/libs/redux/alerts/src/alerts.types.js","../../../../../../../../clearscore-group/libs/redux/alerts/src/actions/index.js","../../../../../../../../clearscore-group/libs/redux/alerts/src/reducers/index.js","../../../../../../../../clearscore-group/libs/redux/alerts/src/reducers/alerts.domain.js","../../../../../../../../clearscore-group/libs/redux/alerts/src/selectors/index.js","../../../../../../../../clearscore-group/libs/redux/alerts/src/selectors/alerts.getAlert.js","../../../../../../../../clearscore-group/libs/redux/alerts/src/index.js","../../../../../../../../clearscore-group/libs/redux/alerts/src/constants.js","../../../../../../../../../node_modules/prop-types/factoryWithThrowingShims.js","../../../../../../../../../node_modules/prop-types/index.js","../../../../../../../../../node_modules/prop-types/lib/ReactPropTypesSecret.js","../../../../../../../../clearscore-group/libs/helpers/portal/src/portal.js","../../../../../../../../clearscore-group/libs/hooks/use-media/src/index.js","../../../../../../../../clearscore-group/libs/helpers/is-internal-url/src/index.js","../../../../../../../libs/ui/rainbow/components/text/src/components/text-link/constants.ts","../../../../../../../libs/ui/rainbow/components/text/src/components/text-link/text-link.tsx","../../../../../../../libs/ui/rainbow/components/text/src/components/text-strong/text-strong.tsx","../../../../../../../libs/ui/rainbow/components/text/src/constants.ts","../../../../../../../libs/ui/rainbow/components/text/src/text.tsx","../../../../../../../libs/ui/rainbow/icons/status-success/status-success.svg","../../../../../../../libs/ui/rainbow/icons/status-info/status-info.svg","../../../../../../../libs/ui/rainbow/icons/status-warning/status-warning.svg","../../../../../../../libs/ui/rainbow/icons/status-error/status-error.svg","../../../../../../../libs/ui/rainbow/icons/cross/cross.svg","../../../../../../../libs/ui/rainbow/components/clickable-icon/src/clickable-icon.tsx","../../../../../../../libs/ui/rainbow/components/button/src/constants.ts","../../../../../../../libs/ui/rainbow/components/button/src/button.tsx","../../../../../../../libs/ui/rainbow/components/notification/src/constants.ts","../../../../../../../libs/ui/rainbow/components/notification/src/notification.tsx","../../../../../../../libs/ui/rainbow/components/notification/src/components/notification.controller.tsx","../../../../../../../../clearscore-group/libs/hooks/use-timeout/src/index.js","../../../../../../../../clearscore-group/libs/ui/shared/alert/src/alert.container.jsx","../../../../../../../../clearscore-group/libs/ui/shared/alert/src/lib/hooks/use-tracking/index.js","../../../../../../../libs/core/webapp/template-global/src/full-width-container.jsx","../../../../../../../libs/core/webapp/template-global/src/index.jsx","../../../../../../../../../node_modules/ramda.clone/clone.js","../../../../../../../../../node_modules/ramda.clone/index.js","../../../../../../../../../node_modules/lodash.isequal/index.js","../../../../../../../../clearscore-group/libs/redux/create-requests/src/types.js","../../../../../../../../clearscore-group/libs/redux/create-requests/src/request-reducer.js","../../../../../../../../clearscore-group/libs/redux/create-requests/src/reducers.js","../../../../../../../../clearscore-group/libs/redux/create-requests/src/index.js","../../../../../../../../clearscore-group/libs/redux/notifications/src/actions.js","../../../../../../../../../node_modules/date-fns/esm/_lib/requiredArgs/index.js","../../../../../../../../../node_modules/date-fns/esm/toDate/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/roundingMethods/index.js","../../../../../../../../../node_modules/date-fns/esm/differenceInHours/index.js","../../../../../../../../../node_modules/date-fns/esm/differenceInMilliseconds/index.js","../../../../../../../../../node_modules/date-fns/esm/constants/index.js","../../../../../../../../../node_modules/date-fns/esm/isValid/index.js","../../../../../../../../../node_modules/date-fns/esm/isDate/index.js","../../../../../../../../../node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","../../../../../../../../../node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","../../../../../../../../../node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","../../../../../../../../../node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","../../../../../../../../../node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","../../../../../../../../../node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","../../../../../../../../../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","../../../../../../../../../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","../../../../../../../../../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","../../../../../../../../../node_modules/date-fns/esm/locale/en-US/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/toInteger/index.js","../../../../../../../../../node_modules/date-fns/esm/subMilliseconds/index.js","../../../../../../../../../node_modules/date-fns/esm/addMilliseconds/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/getUTCWeek/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/format/formatters/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/format/longFormatters/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/protectedTokens/index.js","../../../../../../../../../node_modules/date-fns/esm/format/index.js","../../../../../../../../../node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","../../../../../../../../clearscore-group/libs/redux/notifications/src/selectors.js","../../../../../../../../clearscore-group/libs/redux/notifications/src/index.js","../../../../../../../../clearscore-group/libs/tools/feature-toggle/src/index.js","../../../../../../../../clearscore-group/libs/ui/shared/app-background/src/lib/market-config.ts","../../../../../../../../clearscore-group/libs/ui/shared/app-background/src/app-background.tsx","../../../../../../../../clearscore-group/libs/hooks/use-segmentation/src/index.ts","../../../../../../../../../node_modules/deepmerge/dist/cjs.js","../../../../../../../../clearscore-group/libs/hooks/use-market-config-deprecated/src/index.ts","../../../../../../../../../node_modules/@babel/runtime/helpers/esm/extends.js","../../../../../../../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../../../../../../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../../../../../../../../node_modules/react-media/node_modules/prop-types/factoryWithThrowingShims.js","../../../../../../../../../node_modules/react-media/node_modules/prop-types/index.js","../../../../../../../../../node_modules/react-media/node_modules/prop-types/lib/ReactPropTypesSecret.js","../../../../../../../../../node_modules/invariant/browser.js","../../../../../../../../../node_modules/string-convert/camel2hyphen.js","../../../../../../../../../node_modules/json2mq/index.js","../../../../../../../../../node_modules/react-media/esm/react-media.js","../../../../../../../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../../../../../../libs/ui/rainbow/icons/document-hoverable/document-hoverable.svg","../../../../../../../libs/ui/rainbow/icons/card-credit-builder-hoverable/card-credit-builder-hoverable.svg","../../../../../../../libs/ui/rainbow/icons/credit-card-multiple-hoverable/credit-card-multiple-hoverable.svg","../../../../../../../libs/ui/rainbow/icons/target-hoverable/target-hoverable.svg","../../../../../../../libs/ui/rainbow/icons/timeline-legacy-hoverable/timeline-legacy-hoverable.svg","../../../../../../../libs/ui/rainbow/icons/shield-monitor-hoverable/shield-monitor-hoverable.svg","../../../../../../../libs/ui/rainbow/icons/drivescore-logo-hoverable/drivescore-logo-hoverable.svg","../../../../../../../libs/ui/rainbow/icons/car-outline/car-outline.svg","../../../../../../../libs/ui/rainbow/icons/more/more.svg","../../../../../../../libs/ui/rainbow/icons/improve-logo-hoverable/improve-logo-hoverable.svg","../../../../../../../libs/ui/rainbow/components/badge-notification/src/index.jsx","../../../../../../../../../node_modules/react/cjs/react.production.min.js","../../../../../../../../../node_modules/react/index.js","../../../../../../../../../node_modules/react-dom/node_modules/scheduler/cjs/scheduler.production.min.js","../../../../../../../../../node_modules/react-dom/node_modules/scheduler/index.js","../../../../../../../../../node_modules/react-dom/cjs/react-dom.production.min.js","../../../../../../../../../node_modules/react-dom/index.js","../../../../../../../../../node_modules/tabbable/dist/index.esm.js","../../../../../../../../../node_modules/focus-trap/dist/focus-trap.esm.js","../../../../../../../../../node_modules/focus-trap-react/dist/focus-trap-react.js","../../../../../../../libs/ui/rainbow/components/portal-core/src/portal-core.tsx","../../../../../../../libs/ui/rainbow/components/drawer/src/drawer.tsx","../../../../../../../../clearscore-group/libs/helpers/has-client-data/src/index.js","../../../../../../../libs/core/webapp/add-client-instance/src/client-directory.js","../../../../../../../../clearscore-group/libs/helpers/interpolate-with-market/src/index.js","../../../../../../../../clearscore-group/libs/helpers/branch/src/index.js","../../../../../../../libs/core/webapp/logout/src/index.js","../../../../../../../libs/core/webapp/add-client-instance/src/lib/get-interpolated-url.js","../../../../../../../libs/core/webapp/add-client-instance/src/lib/handle-erroneous-response-interceptor.js","../../../../../../../libs/core/webapp/add-client-instance/src/lib/auth.js","../../../../../../../libs/core/webapp/add-client-instance/src/clients.js","../../../../../../../libs/core/webapp/add-client-instance/src/index.js","../../../../../../../../clearscore-group/libs/hooks/use-cs-query/src/use-cs-query.js","../../../../../../../../clearscore-group/libs/service-config/home-feature/dist/esm/index.mjs","../../../../../../../libs/hooks/use-better-score/src/index.js","../../../../../../../libs/hooks/use-better-score/src/lib/market-config.js","../../../../../../../libs/core/webapp/cs-query-deprecated/src/use-auth-cs-query.js","../../../../../../../libs/ui/shared/icon-navigation/src/components/dashboard-icon/dashboard.svg","../../../../../../../libs/ui/shared/icon-navigation/src/components/dashboard-icon/component.jsx","../../../../../../../libs/ui/shared/icon-navigation/src/components/dashboard-icon/container.js","../../../../../../../libs/ui/shared/icon-navigation/src/lib/market-config.ts","../../../../../../../libs/ui/shared/icon-navigation/src/components/route-icon.component.tsx","../../../../../../../../../node_modules/path-to-regexp/dist.es2015/index.js","../../../../../../../libs/ui/shared/icon-navigation/src/index.jsx","../../../../../../../libs/ui/shared/icon-navigation/src/lib/parse-path.js","../../../../../../../libs/ui/rainbow/icons/menu-hamburger/menu-hamburger.svg","../../../../../../../libs/ui/rainbow/components/badge/src/badge.tsx","../../../../../../../libs/ui/shared/hamburger-navigation/src/hamburger-navigation.jsx","../../../../../../../libs/ui/rainbow/components/container/src/container.tsx","../../../../../../../libs/ui/rainbow/icons/clearscore-logo-symbol/clearscore-logo-symbol.svg","../../../../../../../libs/ui/rainbow/icons/notification-hoverable/notification-hoverable.svg","../../../../../../../../clearscore-group/libs/hooks/use-language/src/index.js","../../../../../../../libs/ui/rainbow/components/spacer/src/constants.ts","../../../../../../../libs/ui/rainbow/components/spacer/src/spacer.tsx","../../../../../../../libs/ui/rainbow/icons/account-hoverable/account-hoverable.svg","../../../../../../../libs/ui/rainbow/icons/chevron-down/chevron-down.svg","../../../../../../../libs/ui/rainbow/components/menu-secondary-return/src/menu-secondary-return.tsx","../../../../../../../libs/ui/rainbow/icons/information-hoverable/information-hoverable.svg","../../../../../../../libs/ui/rainbow/icons/log-out-hoverable/log-out-hoverable.svg","../../../../../../../libs/ui/rainbow/components/progress-ring/src/components/circle/circle.tsx","../../../../../../../libs/ui/rainbow/components/progress-ring/src/progress-ring.tsx","../../../../../../../../clearscore-group/libs/redux/prospect/src/lib/market-config.js","../../../../../../../../clearscore-group/libs/redux/prospect/src/prospect.types.js","../../../../../../../../clearscore-group/libs/redux/prospect/src/prospect.actions.js","../../../../../../../../clearscore-group/libs/redux/prospect/src/reducers/prospect.domain.js","../../../../../../../../clearscore-group/libs/redux/prospect/src/reducers/index.js","../../../../../../../../clearscore-group/libs/redux/prospect/src/selectors/index.js","../../../../../../../../clearscore-group/libs/redux/prospect/src/selectors/prospect.getPredicate.js","../../../../../../../../clearscore-group/libs/redux/prospect/src/selectors/prospect.getSimple.js","../../../../../../../../clearscore-group/libs/redux/prospect/src/index.js","../../../../../../../libs/ui/rainbow/components/modal/src/modal.tsx","../../../../../../../libs/ui/webapp/shared/download-app-modal/src/lib/hooks/use-tracking.ts","../../../../../../../libs/ui/webapp/shared/download-app-modal/src/lib/types.ts","../../../../../../../libs/ui/rainbow/components/stack/src/constants.ts","../../../../../../../libs/ui/rainbow/components/stack/src/stack.tsx","../../../../../../../libs/ui/webapp/shared/download-app-modal/src/components/store-links/play-store-icon.tsx","../../../../../../../libs/ui/webapp/shared/download-app-modal/assets/app-store-icon.svg","../../../../../../../libs/ui/webapp/shared/download-app-modal/src/lib/constants.ts","../../../../../../../libs/ui/webapp/shared/download-app-modal/src/components/store-links/store-links.tsx","../../../../../../../libs/ui/webapp/shared/download-app-modal/assets/qr-code.svg","../../../../../../../libs/ui/webapp/shared/download-app-modal/assets/nz-qr-code.svg","../../../../../../../libs/ui/webapp/shared/download-app-modal/assets/au-qr-code.svg","../../../../../../../libs/ui/webapp/shared/download-app-modal/src/components/install-content/qr-code.tsx","../../../../../../../libs/ui/webapp/shared/download-app-modal/src/components/install-content/install-content.tsx","../../../../../../../libs/ui/webapp/shared/download-app-modal/src/download-app-modal.tsx","../../../../../../../libs/ui/webapp/shared/download-app-modal/src/lib/hooks/use-modal-content.tsx","../../../../../../../libs/ui/webapp/shared/download-app-modal/src/index.ts","../../../../src/components/side-menu/lib/lang.js","../../../../src/components/side-menu/lib/market.js","../../../../src/components/side-menu/lib/market-config.js","../../../../src/components/side-menu/lib/hooks/use-tracking.js","../../../../src/components/side-menu/side-menu.jsx","../../../../src/components/header/lib/lang.js","../../../../src/components/header/lib/hooks/use-tracking.js","../../../../../../../libs/ui/rainbow/icons/notification-outline/notification-outline.svg","../../../../../../../libs/ui/rainbow/icons/clearscore/clearscore.svg","../../../../../../../libs/ui/rainbow/icons/trend-down/trend-down.svg","../../../../../../../libs/ui/rainbow/icons/trend-up/trend-up.svg","../../../../../../../libs/ui/rainbow/components/tag/src/tag.tsx","../../../../../../../../clearscore-group/libs/hooks/use-cs-mutate-query/src/use-cs-mutate-query.js","../../../../../../../libs/ui/rainbow/components/image/src/image.tsx","../../../../src/components/notifications/lib/hooks/use-tracking/index.js","../../../../src/components/notifications/lib/lang.js","../../../../src/components/notifications/lib/constants.ts","../../../../src/components/notifications/notifications.jsx","../../../../../../../libs/core/webapp/cs-mutate-query-deprecated/src/use-auth-cs-mutate-query.js","../../../../../../../../clearscore-group/libs/hooks/use-request/src/index.js","../../../../src/components/notification-drawer/types.ts","../../../../src/components/notification-drawer/notification-drawer.tsx","../../../../src/components/header/lib/market-config.ts","../../../../src/components/header/header.jsx","../../../../../../../libs/core/webapp/cs-build-nav-test/src/lib/hooks/use-cs-build-nav.js","../../../../../../../libs/core/webapp/cs-build-nav-test/src/index.js","../../../../../../../libs/service-hooks/use-profile-service/src/index.ts","../../../../../../../libs/core/webapp/offers-notification-nav-experiment/src/index.ts","../../../../src/components/mobile-navigation-bar/mobile-navigation-bar.jsx","../../../../src/libs/hooks/use-identify-on-profile-fetch.js","../../../../../../../../../node_modules/date-fns/esm/formatISO9075/index.js","../../../../../../../../clearscore-group/libs/helpers/interpolate-with-components/src/index.js","../../../../src/libs/lang.js","../../../../src/libs/market-config.js","../../../../src/libs/hooks/use-new-terms/index.js","../../../../src/libs/hooks/use-branch-tracking.js","../../../../../../../../clearscore-group/libs/hooks/use-branch-tracking/src/index.js","../../../../src/libs/hooks/use-branch-login-tracking.js","../../../../src/libs/hooks/use-auth-listeners.js","../../../../src/templates/app/lib/market-config.ts","../../../../src/templates/app/component.jsx","../../../../src/templates/app/container.js","../../../../src/components/logo-navigation/logo-navigation.jsx","../../../../../../../libs/ui/rainbow/icons/success-inline/success-inline.svg","../../../../../../../libs/ui/rainbow/components/progress-indicator-with-number/src/progress-indicator-with-number.jsx","../../../../src/components/progress-navigation/lib/get-steps.js","../../../../src/components/progress-navigation/progress-navigation.jsx","../../../../../../../libs/ui/rainbow/components/progress-step-bar/src/progress-step-bar.tsx","../../../../src/components/progress-step-bar-navigation/lib/constants.ts","../../../../src/components/progress-step-bar-navigation/progress-step-bar-navigation.tsx","../../../../src/components/progress-step-bar-navigation/index.ts","../../../../src/components/progress-header/lib/lang.js","../../../../src/components/progress-header/progress-header.jsx","../../../../src/components/progress-header/lib/market-config.js","../../../../src/templates/reg/reg-template.container.js","../../../../src/templates/reg/reg-template.jsx","../../../../src/templates/public/component.jsx","../../../../src/templates/public/container.js","../../../../src/templates/simple/component.jsx","../../../../src/templates/simple/container.js","../../../../../../../../clearscore-group/libs/redux/products/src/types.js","../../../../../../../../clearscore-group/libs/redux/products/src/reducers/lib/merge-fetch-status.js","../../../../../../../../clearscore-group/libs/redux/products/src/reducers/products.domain.js","../../../../../../../../clearscore-group/libs/redux/products/src/reducers/index.js","../../../../../../../../clearscore-group/libs/redux/products/src/reducers/lib/normalise-results.js","../../../../../../../../clearscore-group/libs/redux/products/src/reducers/lib/merge-results-request-data.js","../../../../src/libs/action-bridge.js","../../../../../../../../clearscore-group/libs/epic/stage-redirect/src/stage-redirect.epic.js","../../../../../../../../clearscore-group/libs/epic/tracking/src/filterEvents.js","../../../../../../../../clearscore-group/libs/helpers/interpolate-values/src/utils/type-guards.ts","../../../../../../../../clearscore-group/libs/helpers/interpolate-values/src/utils/resolver.ts","../../../../../../../../clearscore-group/libs/helpers/interpolate-values/src/index.ts","../../../../../../../../clearscore-group/libs/epic/tracking/src/segment/transformer.js","../../../../../../../../clearscore-group/libs/helpers/create-event-context/src/index.js","../../../../../../../../clearscore-group/libs/epic/tracking/src/segment/observer.js","../../../../../../../libs/core/webapp/tracking/src/lib/segmentProps.js","../../../../../../../libs/core/webapp/tracking/src/events/first-time-login.js","../../../../../../../libs/core/webapp/tracking/src/events/product-apply-click.js","../../../../../../../libs/core/webapp/tracking/src/events/score-band-received.js","../../../../../../../libs/core/webapp/tracking/src/config.js","../../../../../../../libs/core/webapp/tracking/src/index.js","../../../../../../../../clearscore-group/libs/epic/tracking/src/index.js","../../../../src/libs/epics/gdpr-redirect.js","../../../../src/libs/epics/report-not-found.epic.js","../../../../src/components/alert-link-wrapper/alert-link-wrapper.jsx","../../../../src/components/alert-link-wrapper/lib/hooks/use-tracking.js","../../../../src/libs/epics/global-notifications.epic/email-verification.js","../../../../src/libs/epics/global-notifications.epic/index.js","../../../../src/libs/epic.js","../../../../../../../../clearscore-group/libs/epic/session/src/epics/logout.js","../../../../src/libs/epics/maintenance-mode-redirect.epic.js","../../../../../../../../clearscore-group/libs/epic/market-config/src/market-config.epic.js","../../../../src/libs/epics/request-failed.epic.js","../../../../src/libs/epics/refresh-new-notifications.epic.js","../../../../../../../../clearscore-group/libs/redux/transactions/src/transactions.types.js","../../../../../../../../../node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js","../../../../../../../../clearscore-group/libs/redux/transactions/src/helpers/normalise-id.js","../../../../../../../../clearscore-group/libs/redux/transactions/src/reducers/transactions.accountId.js","../../../../../../../../clearscore-group/libs/redux/transactions/src/reducers/transactions.accountNumber.js","../../../../../../../../clearscore-group/libs/redux/transactions/src/reducers/index.js","../../../../../../../../clearscore-group/libs/redux/transactions/src/index.js","../../../../../../../../clearscore-group/libs/redux/transactions/src/reducers/transactions.domain.js","../../../../../../../../clearscore-group/libs/redux/history/src/reducer/history.domain.js","../../../../../../../../clearscore-group/libs/redux/history/src/reducer/index.js","../../../../../../../../clearscore-group/libs/redux/history/src/types/index.js","../../../../../../../../clearscore-group/libs/redux/history/src/index.js","../../../../src/libs/reducer.js","../../../../../../../../clearscore-group/libs/redux/session-middleware/src/logoutMiddleware.js","../../../../../../../../clearscore-group/libs/redux/native-bridge-middleware/src/nativeBridgeMiddleware.js","../../../../../../../../clearscore-group/libs/redux/nova-user/src/nova-user.types.js","../../../../../../../../clearscore-group/libs/redux/nova-user/src/index.js","../../../../../../../../clearscore-group/libs/redux/monitoring-middleware/src/index.js","../../../../../../../../clearscore-group/libs/helpers/add-url-variables/src/interpolateValues.js","../../../../../../../../clearscore-group/libs/helpers/add-url-variables/src/index.js","../../../../../../../libs/core/webapp/request-middleware/src/index.js","../../../../src/libs/middleware.js","../../../../src/webapp.jsx","../../../../src/index.jsx"],"sourcesContent":["export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","export const LOGIN_OAUTH_SUBMIT = 'CS/LOGIN_OAUTH_SUBMIT';\nexport const LOGIN_OAUTH_SUBMIT_ERROR = 'CS/LOGIN_OAUTH_SUBMIT_ERROR';\nexport const LOGIN_OAUTH_SUBMIT_SUCCESS = 'CS/LOGIN_OAUTH_SUBMIT_SUCCESS';\n\nexport const LOGIN_OAUTH_AUTHORISE = 'CS/LOGIN_OAUTH_AUTHORISE';\nexport const LOGIN_OAUTH_AUTHORISE_ERROR = 'CS/LOGIN_OAUTH_AUTHORISE_ERROR';\nexport const LOGIN_OAUTH_AUTHORISE_SUCCESS = 'CS/LOGIN_OAUTH_AUTHORISE_SUCCESS';\n\nexport const LOGIN_OAUTH_REFRESH = 'CS/LOGIN_OAUTH_REFRESH';\nexport const LOGIN_OAUTH_REFRESH_ERROR = 'CS/LOGIN_OAUTH_REFRESH_ERROR';\nexport const LOGIN_OAUTH_REFRESH_SUCCESS = 'CS/LOGIN_OAUTH_REFRESH_SUCCESS';\n\nexport const SET_SESSION = 'CS/SET_SESSION';\n\n// Native only event, we should never act on this action\nexport const NATIVE_SET_SESSION = 'CS/NATIVE_SET_SESSION';\n\nexport const TIMEOUT_SUCCESS = 'CS/TIMEOUT_SUCCESS';\n\nexport const LOGOUT_SUBMIT = 'CS/LOGOUT_SUBMIT';\nexport const LOGOUT_SUBMIT_ERROR = 'CS/LOGOUT_SUBMIT_ERROR';\nexport const LOGOUT_SUBMIT_SUCCESS = 'CS/LOGOUT_SUBMIT_SUCCESS';\n\nexport const CLEAR_SESSION = 'CS/CLEAR_SESSION';\n\nexport const SET_USER_ROLE = 'CS/SET_USER_ROLE';\n","import * as sessionTypes from '@clearscore-group/lib.constants.session-action-types';\n\n/** Type for the bridge */\nconst ROUTER_TYPE = ['@@router'];\nconst DEFAULT_TYPES = [sessionTypes.LOGIN_OAUTH_REFRESH_SUCCESS];\n\n/**\n * Conditional to check if action should be pushed\n * Currently pushing all router and session stuff\n * @todo: if there is anymore we should come up with a better pattern\n * @param {object} action redux action\n * @param {Array} appBridgeTypes array of type to bridge\n * @returns {boolean} if action structure is correct\n */\nfunction _shouldBridge(action, appBridgeTypes) {\n if (!action) throw Error('action-bridge-types: undefined action');\n if (!action.type) throw Error('action-bridge-types: undefined action.type');\n const types = [...DEFAULT_TYPES, ...appBridgeTypes];\n return action.type.includes(ROUTER_TYPE) || types.includes(action.type);\n}\n\n/**\n * Propagate all actions to core store if available\n * @returns {Function} middleware\n */\nconst _actionBridge = (store, next, action, coreDispatch) => {\n if (coreDispatch) coreDispatch(action);\n next(action);\n};\n\n/**\n * If action has correct signature, perform API request.\n * Dispatch success or error actions\n * @param {object} coreDispatch redux store\n * @param {array} appBridgeTypes array of type to bridge\n * @returns {Function} middleware\n */\nconst actionBridgeMiddleware =\n (coreDispatch, appBridgeTypes = []) =>\n (store) =>\n (next) =>\n (action) =>\n _shouldBridge(action, appBridgeTypes) ? _actionBridge(store, next, action, coreDispatch) : next(action);\n\nexport default actionBridgeMiddleware;\n","import { filter } from 'rxjs/operators';\n\nvar keyHasType = function keyHasType(type, key) {\n return type === key || typeof key === 'function' && type === key.toString();\n};\n\nexport var ofType = function ofType() {\n for (var _len = arguments.length, keys = Array(_len), _key = 0; _key < _len; _key++) {\n keys[_key] = arguments[_key];\n }\n\n return function (source) {\n return source.pipe(filter(function (_ref) {\n var type = _ref.type;\n\n var len = keys.length;\n if (len === 1) {\n return keyHasType(type, keys[0]);\n } else {\n for (var i = 0; i < len; i++) {\n if (keyHasType(type, keys[i])) {\n return true;\n }\n }\n }\n return false;\n }));\n };\n};","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport { Observable, of as _of, from as _from } from 'rxjs';\nimport { ofType as _ofType } from './operators';\n\nexport var ActionsObservable = function (_Observable) {\n _inherits(ActionsObservable, _Observable);\n\n _createClass(ActionsObservable, null, [{\n key: 'of',\n value: function of() {\n return new this(_of.apply(undefined, arguments));\n }\n }, {\n key: 'from',\n value: function from(actions, scheduler) {\n return new this(_from(actions, scheduler));\n }\n }]);\n\n function ActionsObservable(actionsSubject) {\n _classCallCheck(this, ActionsObservable);\n\n var _this = _possibleConstructorReturn(this, (ActionsObservable.__proto__ || Object.getPrototypeOf(ActionsObservable)).call(this));\n\n _this.source = actionsSubject;\n return _this;\n }\n\n _createClass(ActionsObservable, [{\n key: 'lift',\n value: function lift(operator) {\n var observable = new ActionsObservable(this);\n observable.operator = operator;\n return observable;\n }\n }, {\n key: 'ofType',\n value: function ofType() {\n return _ofType.apply(undefined, arguments)(this);\n }\n }]);\n\n return ActionsObservable;\n}(Observable);","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport { Observable, Subject } from 'rxjs';\n\nexport var StateObservable = function (_Observable) {\n _inherits(StateObservable, _Observable);\n\n function StateObservable(stateSubject, initialState) {\n _classCallCheck(this, StateObservable);\n\n var _this = _possibleConstructorReturn(this, (StateObservable.__proto__ || Object.getPrototypeOf(StateObservable)).call(this, function (subscriber) {\n var subscription = _this.__notifier.subscribe(subscriber);\n if (subscription && !subscription.closed) {\n subscriber.next(_this.value);\n }\n return subscription;\n }));\n\n _this.value = initialState;\n _this.__notifier = new Subject();\n _this.__subscription = stateSubject.subscribe(function (value) {\n // We only want to update state$ if it has actually changed since\n // redux requires reducers use immutability patterns.\n // This is basically what distinctUntilChanged() does but it's so simple\n // we don't need to pull that code in\n if (value !== _this.value) {\n _this.value = value;\n _this.__notifier.next(value);\n }\n });\n return _this;\n }\n\n return StateObservable;\n}(Observable);","function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nimport { merge } from 'rxjs';\n\n/**\n Merges all epics into a single one.\n */\nexport var combineEpics = function combineEpics() {\n for (var _len = arguments.length, epics = Array(_len), _key = 0; _key < _len; _key++) {\n epics[_key] = arguments[_key];\n }\n\n var merger = function merger() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return merge.apply(undefined, _toConsumableArray(epics.map(function (epic) {\n var output$ = epic.apply(undefined, args);\n if (!output$) {\n throw new TypeError('combineEpics: one of the provided Epics \"' + (epic.name || '') + '\" does not return a stream. Double check you\\'re not missing a return statement!');\n }\n return output$;\n })));\n };\n\n // Technically the `name` property on Function's are supposed to be read-only.\n // While some JS runtimes allow it anyway (so this is useful in debugging)\n // some actually throw an exception when you attempt to do so.\n try {\n Object.defineProperty(merger, 'name', {\n value: 'combineEpics(' + epics.map(function (epic) {\n return epic.name || '';\n }).join(', ') + ')'\n });\n } catch (e) {}\n\n return merger;\n};","/**\n * Create an action object\n * @param {String} type Name of Redux action\n * @param {*} payload action payload\n * @return {{ type: string, payload?: any }} flux action format object\n */\nexport default function createAction(type, payload) {\n return {\n type,\n ...(payload && { payload }),\n };\n}\n","export default function createRequestPayload(\n client,\n url,\n // eslint-disable-next-line default-param-last\n method = 'get',\n data,\n meta,\n headers,\n timeout,\n { params } = {},\n) {\n return {\n request: {\n client,\n url,\n method,\n ...(data && { data }),\n ...(meta && { meta }),\n ...(headers && { headers }),\n ...(timeout && { timeout }),\n ...(params && { params }),\n },\n };\n}\n","/**\n * Given an single pathref, resolve to the value of the given data object\n * @param {string} pathArr single property path\n * @param {object} obj object of data to resolve\n * @returns {object} object containing resolved data\n */\nexport function resolveProp(pathArr, obj) {\n if (arguments.length === 1) {\n return (objHolder) => resolveProp(pathArr, objHolder);\n }\n if (obj === null || obj === undefined) {\n return undefined;\n }\n let willReturn = obj;\n let counter = 0;\n\n const pathArrValue = typeof pathArr === 'string' ? pathArr.split('.') : pathArr;\n\n while (counter < pathArrValue.length) {\n if (willReturn === null || willReturn === undefined) {\n return undefined;\n }\n willReturn = willReturn[pathArrValue[counter]];\n counter += 1;\n }\n\n return willReturn;\n}\n\n/**\n * Given an object of object property paths and an object, resolves the paths to the values in the object\n * @param {object} paths object of property paths\n * @param {object} data object of data to resolve\n * @returns {object} object containing resolved data\n */\n\nfunction resolveProps(paths, data) {\n return Object.keys(paths).reduce((resolvedData, prop) => {\n const pathRef = paths[prop];\n return {\n ...resolvedData,\n [prop]: resolveProp(pathRef, data),\n };\n }, {});\n}\n\nexport default resolveProps;\n","export default () => !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n","import { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\nimport canUseDom from '@clearscore-group/lib.helpers.can-use-dom';\n\nconst CACHE_NAME = '__cs__';\nconst LOCAL_NAMESPACE = 'local';\nexport const RESET_MARKET_ENVS = {\n local: {},\n};\n\n/**\n * Returns an env after providing a object path\n * @param path\n * @return {*}\n */\n\nfunction getSingleEnv(path) {\n if (!canUseDom()) return ''; // @todo: [PM] get envs on the server\n let envs;\n\n if (window[CACHE_NAME] && window[CACHE_NAME].env) {\n envs = window[CACHE_NAME].env;\n } else {\n envs = window.env;\n }\n\n return resolveProp(`${LOCAL_NAMESPACE}.${path}`, envs) || resolveProp(path, envs);\n}\n\nexport const getEnvs = () => {\n if (!canUseDom()) return '';\n return window[CACHE_NAME].env || window.env;\n};\n\n/**\n * Set envs\n * @param envs - new market envs\n * @return void\n */\n\nexport const setEnvs = (envs = {}) => {\n if (window[CACHE_NAME] && window[CACHE_NAME].env) {\n window[CACHE_NAME].env = Object.assign(window[CACHE_NAME].env, envs);\n } else {\n window.env = Object.assign(window.env, envs);\n }\n};\n\n/**\n * Returns an env after providing a object path or array of multiple object paths\n * @param paths\n * @return {*}\n */\n\nexport default function getEnv(paths) {\n if (Array.isArray(paths)) {\n return paths.map((path) => getSingleEnv(path));\n }\n return getSingleEnv(paths);\n}\n","/* eslint-disable import/prefer-default-export */\nimport getEnv from '@clearscore-group/lib.helpers.envs';\n\n/**\n * Get the app version from querystring if running in webview\n * context (to be passed eventually to segmenter)\n */\nexport const getWebviewAppVersion = () => {\n if (!getEnv('WEBVIEW')) return null;\n\n return new URLSearchParams(window.location?.search).get('appVersion');\n};\n","const MARKET = 'CS/MARKET';\n\nexport const MARKET_SET_MARKETS = `${MARKET}_SET_MARKETS`;\nexport const MARKET_SET_LOCALES = `${MARKET}_SET_LOCALES`;\nexport const MARKET_SET_ENVS = `${MARKET}_SET_ENVS`;\n\nexport const MARKET_SET_ACTIVE_MARKET = `${MARKET}_SET_ACTIVE_MARKET`;\nexport const MARKET_SET_ACTIVE_LOCALE = `${MARKET}_SET_ACTIVE_LOCALE`;\n\nexport const MARKET_FETCH_CONFIG = `${MARKET}_FETCH_CONFIG`;\nexport const MARKET_FETCH_CONFIG_PENDING = `${MARKET}_FETCH_CONFIG_PENDING`;\nexport const MARKET_FETCH_CONFIG_SUCCESS = `${MARKET_FETCH_CONFIG}_SUCCESS`;\nexport const MARKET_FETCH_CONFIG_ERROR = `${MARKET_FETCH_CONFIG}_ERROR`;\n\nexport const MARKET_FETCH_STATIC_CONFIG = `${MARKET}_FETCH_STATIC_CONFIG`;\nexport const MARKET_FETCH_STATIC_CONFIG_SUCCESS = `${MARKET_FETCH_STATIC_CONFIG}_SUCCESS`;\nexport const MARKET_FETCH_STATIC_CONFIG_ERROR = `${MARKET_FETCH_STATIC_CONFIG}_ERROR`;\n","export const INITIAL = 'initial';\nexport const SUCCESS = 'success';\nexport const ERROR = 'error';\nexport const PENDING = 'pending';\n","/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar decode = decodeURIComponent;\nvar encode = encodeURIComponent;\nvar pairSplitRegExp = /; */;\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n * obs-text = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {}\n var opt = options || {};\n var pairs = str.split(pairSplitRegExp);\n var dec = opt.decode || decode;\n\n for (var i = 0; i < pairs.length; i++) {\n var pair = pairs[i];\n var eq_idx = pair.indexOf('=');\n\n // skip things that don't look like key=value\n if (eq_idx < 0) {\n continue;\n }\n\n var key = pair.substr(0, eq_idx).trim()\n var val = pair.substr(++eq_idx, pair.length).trim();\n\n // quoted values\n if ('\"' == val[0]) {\n val = val.slice(1, -1);\n }\n\n // only assign once\n if (undefined == obj[key]) {\n obj[key] = tryDecode(val, dec);\n }\n }\n\n return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n var opt = options || {};\n var enc = opt.encode || encode;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!fieldContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (value && !fieldContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n\n if (null != opt.maxAge) {\n var maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n if (typeof opt.expires.toUTCString !== 'function') {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + opt.expires.toUTCString();\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n","import cookie from 'cookie';\nimport getEnvs from '@clearscore-group/lib.helpers.envs';\nimport canUseDom from '@clearscore-group/lib.helpers.can-use-dom';\n\nconst hasDocumentCookie = () => canUseDom() && 'cookie' in window.document;\n\n// if it looks like JSON, we'll treat it like JSON\nconst isParsingCookie = (value = '') => value[0] === '{' || value[0] === '[' || value[0] === '\"';\nconst readCookie = (value) => {\n if (isParsingCookie(value)) {\n try {\n return JSON.parse(value);\n } catch (e) {\n // at least we tried\n }\n }\n return value;\n};\n\nconst getDefaultOptions = () => ({\n ...(getEnvs('COOKIE_DOMAIN') && { domain: getEnvs('COOKIE_DOMAIN') }),\n path: '/',\n secure: true,\n});\n\n/**\n * set cookie\n * @param {string} cookieName\n * @param {any} payload\n * @param {object} options\n */\nexport const setCookie = (cookieName, payload, options) => {\n const cookieValue = typeof payload === 'object' ? JSON.stringify(payload) : payload;\n\n if (hasDocumentCookie()) {\n document.cookie = cookie.serialize(cookieName, cookieValue, {\n ...getDefaultOptions(),\n ...options,\n });\n }\n};\n\n/**\n * get cookie\n * @param {string} cookieName\n */\nexport const getCookie = (cookieName) => {\n if (hasDocumentCookie()) {\n const cookieValue = cookie.parse(document.cookie ?? '')[cookieName];\n return readCookie(cookieValue);\n }\n return null;\n};\n\n/**\n * get all cookies\n */\nexport const getAllCookies = () => {\n if (hasDocumentCookie()) {\n const allCookies = cookie.parse(document.cookie ?? '');\n\n return Object.entries(allCookies).reduce(\n (acc, [cookieKey, cookieValue]) => ({\n ...acc,\n [cookieKey]: readCookie(cookieValue),\n }),\n {},\n );\n }\n return null;\n};\n\n/**\n * deletes cookie\n * @param {string} cookieName\n */\nexport const removeCookie = (cookieName) => {\n if (hasDocumentCookie()) {\n const options = {\n ...getDefaultOptions(),\n expires: new Date(1970, 1, 1, 0, 0, 1),\n maxAge: 0,\n };\n document.cookie = cookie.serialize(cookieName, '', options);\n }\n};\n","import getEnv from '@clearscore-group/lib.helpers.envs';\n\nexport const CS_SESSION_COOKIE = getEnv('SESSION_COOKIE') || 'CS_SESSION';\nexport const CS_PERSON_COOKIE = 'CS_PERSON';\nexport const CS_PUBLISHER_ID = 'CS_PUBLISHER_ID';\nexport const VISITED_SITE_COOKIE_NAME = 'CS_VISITED_SITE';\n// Please note this is concatenated with `alertId` to give full cookie key\nexport const CS_ALERT_VIEWED_COOKIE_PREFIX = 'CS_ALERT_VIEWED';\nexport const CS_CURRENT_LANGUAGE = 'CS_CURRENT_LANGUAGE';\nexport const CS_ANONYMOUS_ID_COOKIE = 'CS_ANONYMOUS_ID';\n\n// Expiry (in milliseconds)\nexport const EXPIRE_3DAYS = 259200000;\n","import { getCookie, setCookie } from './cookies';\nimport { CS_PUBLISHER_ID, EXPIRE_3DAYS } from './constants';\n\n/**\n * Directly set the publisher cookie to `body` with no validation\n */\nconst setPublisherCookieValue = (body) =>\n setCookie(CS_PUBLISHER_ID, body, {\n expires: new Date(Date.now() + EXPIRE_3DAYS),\n });\n\n/**\n * Sets the CS_PUBLISHER_ID cookie if utm_source + utm_medium is present in search params\n * @param {String} searchParams\n */\nexport const setPublisherCookie = (searchParams = '') => {\n const urlParams = new URLSearchParams(searchParams);\n const publisherId = urlParams.get('utm_source');\n const transactionId = urlParams.get('utm_medium');\n const campaignId = urlParams.get('utm_campaign');\n if (publisherId && transactionId) {\n setPublisherCookieValue({\n publisherId,\n transactionId,\n ...(campaignId && { campaignId }),\n });\n }\n};\n\n/**\n * Returns CS_PUBLISHER_ID cookie or {} if it does not exist\n */\nexport const getPublisherCookie = () => getCookie(CS_PUBLISHER_ID) || {};\n\n/**\n * Returns CS_PUBLISHER_ID cookie (if present) as the original map\n * of `utm_xxx` to value as opposed to the mappings above (`publisherId` etc.)\n */\nexport const getPublisherCookieUTM = () => {\n const { publisherId, transactionId, campaignId, sentToBackend } = getPublisherCookie();\n\n if (!publisherId || !transactionId) {\n return {};\n }\n\n return {\n utm_source: publisherId,\n utm_medium: transactionId,\n ...(campaignId && { utm_campaign: campaignId }),\n ...(sentToBackend && { sentToBackend }),\n };\n};\n\n/**\n * Check if a given publisher cookie has been sent to the backend\n * @param {Object} publisherCookie Publisher cookie as returned from `getPublisherCookie`\n */\nexport const publisherCookieIsSentToBackend = (publisherCookie) => !!publisherCookie.sentToBackend;\n\n/**\n * Mark the publisher cookie as \"sent to the backend\" so we can avoid sending it again\n */\nexport const markPublisherCookieAsSentToBackend = () => {\n const pubCookie = getPublisherCookie();\n\n if (Object.entries(pubCookie).length > 0 && !publisherCookieIsSentToBackend(pubCookie)) {\n setPublisherCookieValue({\n ...pubCookie,\n sentToBackend: true,\n });\n }\n};\n","/* eslint-disable camelcase */\nimport { setCookie, getCookie, removeCookie } from './cookies';\nimport * as constants from './constants';\n\n// needed for the remember-me checkbox on login\n// work around since you can not use JS APIs to calculate if a cookie has 'expires' set\n// We create a session with 'expires', then when changing language, or refreshing a token, we update the cookie.\n// except, 'updating' cookies is impossible, so we need to cache the unreachable properties of the cookie\nconst CS_SESSION_EXPIRES = 'CS_SESSION_EXPIRES';\nconst setExpires = (expiresDate) => {\n window[CS_SESSION_EXPIRES] = expiresDate;\n};\nconst getExpires = () => window[CS_SESSION_EXPIRES];\n\n/**\n * Sets the session cookie\n * @param session.sessionToken\n * @param session.accountId\n * @param session.username\n * @param session.market\n * @todo SESSION - remove old auth flow when LLT/2FA is live\n */\nexport const setSessionCookie = ({ market, access_token, refresh_token, session_id, remember, o_token, locale }) => {\n const expiresDate = new Date(new Date().setFullYear(new Date().getFullYear() + 1));\n setExpires(remember ? expiresDate : undefined);\n setCookie(\n constants.CS_SESSION_COOKIE,\n {\n access_token,\n refresh_token,\n session_id,\n o_token,\n market: market.toLowerCase(),\n ...(locale ? { locale } : {}),\n },\n {\n ...(remember && {\n expires: getExpires(),\n }),\n },\n );\n};\n/* eslint-enable camelcase */\n\n/**\n * Update the session cookie\n */\nexport const updateSessionCookie = (data) => {\n const cookie = getCookie(constants.CS_SESSION_COOKIE);\n setSessionCookie({\n ...cookie,\n ...data,\n remember: !!getExpires(),\n });\n};\n\n/**\n * Get the session cookie\n */\nexport const getSessionCookie = () => getCookie(constants.CS_SESSION_COOKIE);\n\n/**\n * Removes the session cookie\n */\nexport const removeSessionCookie = () => {\n removeCookie(constants.CS_SESSION_COOKIE);\n};\n\nexport default setSessionCookie;\n","// Generate UUID\nfunction s4() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n}\n\nfunction getId() {\n // eslint-disable-next-line no-undef\n return typeof crypto !== 'undefined' && typeof crypto?.randomUUID === 'function'\n ? // eslint-disable-next-line no-undef\n crypto.randomUUID()\n : // TODO: remove when everything is on node 16 and browser support is stable\n `${s4() + s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`;\n}\n\nexport default getId;\n\nexport function addIdToItem(item) {\n return {\n ...item,\n id: item.id ? item.id : getId(),\n };\n}\n\nexport function addIdToCollectionItems(collection) {\n return collection.map(addIdToItem);\n}\n","import getUid from '@clearscore-group/lib.helpers.uid';\n\nimport { getCookie, setCookie, removeCookie } from './cookies';\nimport { CS_ANONYMOUS_ID_COOKIE } from './constants';\n\nconst ONE_YEAR = new Date(new Date().setFullYear(new Date().getFullYear() + 1));\n\nconst setAnonymousCookie = (anonymousId) => {\n setCookie(CS_ANONYMOUS_ID_COOKIE, anonymousId, {\n expires: ONE_YEAR,\n });\n setCookie('ajs_anonymous_id', anonymousId, {\n expires: ONE_YEAR,\n });\n};\n\n/*\nThis function is both a getter and a setter, the reason for this is because we have\nusers may have an ajs_anonymous_id cookie already set. We want to use this if they do\n(and set CS_ANONYMOUS_ID to this value) and set it if they don't just in case they ever do\nload Segment (browser change etc). These cookies should ALWAYS match and we should try\nand get the ajs_anonymous_id cookie first, then CS_ANONYMOUS_ID, then generate and set\nboth to that value, the order matters.\n\nAt the time of writing, we are using Segment library on the website/webapp and also\ntracking via `tracking-event-receiver`.\n*/\nexport const orchestrateAnonymousCookie = () => {\n const segmentAnonId = getCookie('ajs_anonymous_id');\n const csAnonId = getCookie(CS_ANONYMOUS_ID_COOKIE);\n\n // If both cookies are undefined or they don't match we need to refresh the cookies to make the match\n const shouldRefreshAnonymousId = (!csAnonId && !segmentAnonId) || csAnonId !== segmentAnonId;\n\n if (shouldRefreshAnonymousId) {\n const uid = segmentAnonId || csAnonId || getUid();\n\n setAnonymousCookie(uid);\n\n return uid;\n }\n\n // We want to keep the TTL on the cookies at 1 year\n setAnonymousCookie(csAnonId);\n\n return csAnonId;\n};\n\nexport const removeAnonymousCookie = () => removeCookie(CS_ANONYMOUS_ID_COOKIE);\n","import {\n setCookie as setHelper,\n getCookie as getHelper,\n removeCookie as removeHelper,\n getAllCookies as getAllHelper,\n} from './cookies';\nimport {\n setPublisherCookie as setPublisherHelper,\n getPublisherCookie as getPublisherHelper,\n getPublisherCookieUTM as getPublisherUTMHelper,\n publisherCookieIsSentToBackend as publisherIsSentToBackendHelper,\n markPublisherCookieAsSentToBackend as markPublisherAsSentToBackendHelper,\n} from './cookies-publisher';\nimport {\n setPersonCookie as setPersonHelper,\n getPersonCookie as getPersonHelper,\n removePersonCookie as removePersonHelper,\n} from './cs-person';\nimport {\n setVisitedSiteCookie as setVisitedSiteHelper,\n getVisitedSiteCookie as getVisitedSiteHelper,\n removeVisitedSiteCookie as removeVisitedSiteHelper,\n} from './visited-site';\nimport {\n setSessionCookie as setSessionHelper,\n getSessionCookie as getSessionHelper,\n updateSessionCookie as updateSessionHelper,\n removeSessionCookie as removeSessionHelper,\n} from './cookies-session';\nimport {\n getAlertCookie as getAlertHelper,\n setAlertCookie as setAlertHelper,\n hasCookieForAlert as hasCookieForAlertHelper,\n} from './cookies-alerts';\nimport {\n removeAnonymousCookie as removeAnonymousCookieHelper,\n orchestrateAnonymousCookie as orchestrateAnonymousCookieHelper,\n} from './anonymous-id';\nimport * as consts from './constants';\n\nexport const getAllCookies = getAllHelper;\nexport const setCookie = setHelper;\nexport const getCookie = getHelper;\nexport const removeCookie = removeHelper;\nexport const getPersonCookie = getPersonHelper;\nexport const setPersonCookie = setPersonHelper;\nexport const removePersonCookie = removePersonHelper;\nexport const getVisitedSiteCookie = getVisitedSiteHelper;\nexport const setVisitedSiteCookie = setVisitedSiteHelper;\nexport const removeVisitedSiteCookie = removeVisitedSiteHelper;\nexport const getPublisherCookie = getPublisherHelper;\nexport const setPublisherCookie = setPublisherHelper;\nexport const getPublisherCookieUTM = getPublisherUTMHelper;\nexport const publisherCookieIsSentToBackend = publisherIsSentToBackendHelper;\nexport const markPublisherCookieAsSentToBackend = markPublisherAsSentToBackendHelper;\nexport const setSessionCookie = setSessionHelper;\nexport const getSessionCookie = getSessionHelper;\nexport const updateSessionCookie = updateSessionHelper;\nexport const removeSessionCookie = removeSessionHelper;\nexport const getAlertCookie = getAlertHelper;\nexport const setAlertCookie = setAlertHelper;\nexport const hasCookieForAlert = hasCookieForAlertHelper;\nexport const removeAnonymousCookie = removeAnonymousCookieHelper;\nexport const orchestrateAnonymousCookie = orchestrateAnonymousCookieHelper;\nexport const constants = consts;\n","import { getCookie, setCookie, removeCookie } from './cookies';\nimport { CS_PERSON_COOKIE } from './constants';\n\nconst second = 1000;\nconst minute = second * 60;\nconst thirtyMinutes = minute * 30;\n\nexport const setPersonCookie = (personIdentifier) => {\n setCookie(CS_PERSON_COOKIE, personIdentifier, {\n expires: new Date(new Date().getTime() + thirtyMinutes),\n });\n};\n\nexport const getPersonCookie = () => getCookie(CS_PERSON_COOKIE);\n\nexport const removePersonCookie = () => removeCookie(CS_PERSON_COOKIE);\n","import { getCookie, setCookie, removeCookie } from './cookies';\nimport { VISITED_SITE_COOKIE_NAME } from './constants';\n\nconst second = 1000;\nconst minute = second * 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst oneYear = day * 365;\n\nexport const setVisitedSiteCookie = (userIdentifier) => {\n setCookie(VISITED_SITE_COOKIE_NAME, userIdentifier, {\n expires: new Date(new Date().getTime() + oneYear),\n });\n};\n\nexport const getVisitedSiteCookie = () => getCookie(VISITED_SITE_COOKIE_NAME);\n\nexport const removeVisitedSiteCookie = () => removeCookie(VISITED_SITE_COOKIE_NAME);\n","import { getCookie, setCookie } from './cookies';\nimport { CS_ALERT_VIEWED_COOKIE_PREFIX } from './constants';\n\nconst getKeyForAlertId = (alertId) => `${CS_ALERT_VIEWED_COOKIE_PREFIX}_${alertId.toUpperCase()}`;\n\nexport const setAlertCookie = (alertId, alertCooldown) => {\n const key = getKeyForAlertId(alertId);\n\n setCookie(key, true, {\n expires: new Date(Date.now() + alertCooldown),\n });\n};\n\nexport const getAlertCookie = (alertId) => getCookie(getKeyForAlertId(alertId)) || null;\n\nexport const hasCookieForAlert = (alertId) => getAlertCookie(alertId) !== null;\n","import { GLOBAL, EN_GB } from '@clearscore-group/lib.config.i18n';\nimport { getSessionCookie } from '@clearscore-group/lib.helpers.cookies';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getCurrentMarketDetails = () => {\n const sessionToken = getSessionCookie();\n const marketSessionToken = resolveProp('market', sessionToken);\n const localeSessionToken = resolveProp('locale', sessionToken);\n\n return {\n marketSessionToken,\n localeSessionToken,\n };\n};\n\nexport const getActiveMarket = () => {\n const { marketSessionToken } = getCurrentMarketDetails();\n return marketSessionToken || GLOBAL;\n};\n\nexport const getActiveLocale = () => {\n const { marketSessionToken, localeSessionToken } = getCurrentMarketDetails();\n\n if (localeSessionToken) return localeSessionToken;\n if (marketSessionToken) return `en-${marketSessionToken}`;\n return EN_GB;\n};\n","import { MARKETS, LOCALES } from '@clearscore-group/lib.config.i18n';\nimport * as requestStatuses from '@clearscore-group/lib.constants.request-statuses';\n\nimport { getActiveLocale, getActiveMarket } from '../lib/helpers';\nimport {\n MARKET_SET_LOCALES,\n MARKET_SET_MARKETS,\n MARKET_SET_ACTIVE_LOCALE,\n MARKET_SET_ACTIVE_MARKET,\n MARKET_FETCH_CONFIG,\n MARKET_FETCH_CONFIG_PENDING,\n MARKET_FETCH_CONFIG_ERROR,\n MARKET_FETCH_CONFIG_SUCCESS,\n MARKET_FETCH_STATIC_CONFIG,\n MARKET_FETCH_STATIC_CONFIG_SUCCESS,\n} from '../types';\n\nconst initialState = () => ({\n checkStatus: requestStatuses.INITIAL,\n fetchStatus: requestStatuses.INITIAL,\n activeMarket: getActiveMarket(),\n activeLocale: getActiveLocale(),\n markets: MARKETS,\n locales: LOCALES,\n});\n\nconst domain = (state = initialState(), action = {}) => {\n const { type, payload } = action;\n\n switch (type) {\n case MARKET_FETCH_CONFIG:\n case MARKET_FETCH_CONFIG_PENDING: // allow core to be aware of pending updates, without re-fetching the config\n case MARKET_FETCH_STATIC_CONFIG:\n return {\n ...state,\n fetchStatus: requestStatuses.PENDING,\n };\n case MARKET_FETCH_CONFIG_SUCCESS:\n case MARKET_FETCH_STATIC_CONFIG_SUCCESS:\n return {\n ...state,\n fetchStatus: requestStatuses.SUCCESS,\n };\n case MARKET_FETCH_CONFIG_ERROR:\n return {\n ...state,\n fetchStatus: requestStatuses.ERROR,\n };\n case MARKET_SET_ACTIVE_MARKET: {\n return {\n ...state,\n activeMarket: (payload && payload.market) || initialState().activeMarket,\n activeLocale: (payload && `en-${payload.market}`) || initialState().activeLocale,\n };\n }\n case MARKET_SET_ACTIVE_LOCALE:\n return {\n ...state,\n activeLocale: payload || initialState().activeLocale,\n };\n case MARKET_SET_LOCALES:\n return {\n ...state,\n locales: payload || initialState().locales,\n };\n case MARKET_SET_MARKETS:\n return {\n ...state,\n markets: payload || initialState().markets,\n };\n default:\n return state;\n }\n};\n\nexport default domain;\n","/* eslint-disable import/prefer-default-export */\nimport marketDomain from './domain';\n\nexport const domain = marketDomain;\n","import { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\nimport * as requestStatuses from '@clearscore-group/lib.constants.request-statuses';\n\nexport const getRequestStatus = (status, statusCode) => ({\n isInitial: status === requestStatuses.INITIAL,\n isPending: status === requestStatuses.PENDING,\n isComplete: status === requestStatuses.SUCCESS,\n hasFailed: status === requestStatuses.ERROR,\n statusCode,\n});\n\nconst calculateIsCompleteMultiple = (statusList) => {\n if (statusList.every((status) => status === requestStatuses.SUCCESS)) return true;\n if (statusList.every((status) => status === requestStatuses.ERROR)) return false;\n\n return statusList\n .map((status) => status === requestStatuses.SUCCESS || status === requestStatuses.ERROR)\n .every(Boolean);\n};\n\nexport const getRequestStatusMultiple = (statusList = [], statusCodes = []) => {\n const hasStatuses = statusList.length;\n\n return {\n isInitial: hasStatuses ? statusList.every((status) => status === requestStatuses.INITIAL) : true,\n isPending: statusList.some((status) => status === requestStatuses.PENDING),\n isComplete: hasStatuses ? calculateIsCompleteMultiple(statusList) : false,\n hasFailed: hasStatuses ? statusList.every((status) => status === requestStatuses.ERROR) : false,\n hasFailures: statusList.some((status) => status === requestStatuses.ERROR),\n statusCodes,\n };\n};\n\nexport default (state, prop) => {\n const props = prop.split('.');\n const hasValidRootReducer = props.length === 1 ? state : state[props[0]];\n if (hasValidRootReducer) {\n return resolveProp(prop, state) || requestStatuses.INITIAL;\n }\n console.error(`Cannot resolve root state for prop: ${prop}`); // eslint-disable-line no-console\n return requestStatuses.ERROR;\n};\n","import { createSelector } from 'reselect';\nimport resolveRequest, { getRequestStatus } from '@clearscore-group/lib.helpers.resolve-request';\n\nconst resolveFetchStatus = (state) => resolveRequest(state, 'market.fetchStatus');\n\nexport default createSelector(resolveFetchStatus, (fetchStatus) => getRequestStatus(fetchStatus));\n","import { createSelector } from 'reselect';\nimport resolveRequest, { getRequestStatus } from '@clearscore-group/lib.helpers.resolve-request';\n\nimport getFetchStatus from './getFetchStatus';\n\nconst getCheckStatus = (state) => resolveRequest(state, 'market.checkStatus');\n\nexport default createSelector(getCheckStatus, getFetchStatus, (checkStatus, fetchStatus) => ({\n check: getRequestStatus(checkStatus),\n fetch: fetchStatus,\n}));\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst marketsSelector = (state) => resolveProp('market.markets', state);\n\nexport default createSelector(marketsSelector, (markets) => markets);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst activeMarketSelector = (state) => resolveProp('market.activeMarket', state);\n\nexport default createSelector(activeMarketSelector, (activeMarket) => activeMarket);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst localesSelector = (state) => resolveProp('market.locales', state);\n\nexport default createSelector(localesSelector, (locales = []) => locales);\n","const legacyMap = {\n uk: 'en-gb',\n za: 'en-za',\n};\n\nexport default legacyMap;\n","import { createSelector } from 'reselect';\n\nimport legacyMap from './legacyMap';\n\nconst localeSelector = (state = {}) => state.locale;\nconst getActiveLanguage = (locale = {}) => ((locale && locale.languages) || []).find((copy) => copy.active === true);\n\nexport default createSelector(localeSelector, (locale) => {\n const activeLanguage = getActiveLanguage(locale) || {};\n const activeLocale = activeLanguage.languageCode || activeLanguage.code;\n return legacyMap[activeLocale] || activeLocale || 'en-gb';\n});\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nimport getLegacyLanguageCode from './legacy/legacy.getLangCode';\nimport localesSelector from './getLocales';\n\nconst activeLocaleSelector = (state) => resolveProp('market.activeLocale', state);\n\nexport default createSelector(\n activeLocaleSelector,\n localesSelector,\n getLegacyLanguageCode,\n (locale = '', locales = [], legacyLocale = '') =>\n locales.find((item) => item === locale) || legacyLocale || 'en-gb',\n);\n","import { createSelector } from 'reselect';\n\nimport getActiveMarket from './getActiveMarket.js';\n\nexport default createSelector(\n getActiveMarket,\n (activeMarket) => (marketConfig) => marketConfig[activeMarket] || marketConfig.gb || {},\n);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getResolution = (state) => resolveProp('market.resolution', state) || 'ip';\n\nexport default createSelector(getResolution, (resolution) => resolution);\n","import { createSelector } from 'reselect';\n\nimport getActiveLocale from './getActiveLocale';\n\nexport default createSelector(getActiveLocale, (locale) => (copy) => copy[locale] || copy['en-gb'] || copy.uk);\n","import marketGetPredicate from './getPredicate';\nimport marketGetFetchStatus from './getFetchStatus';\nimport marketGetMarkets from './getMarkets';\nimport marketGetActiveMarket from './getActiveMarket';\nimport marketGetLocales from './getLocales';\nimport marketGetActiveLocale from './getActiveLocale';\nimport marketGetConfig from './getConfig';\nimport marketGetResolution from './getResolution';\nimport marketLegacyGetLanguage from './legacy.getLanguage';\n\nexport const getPredicate = marketGetPredicate;\nexport const getFetchStatus = marketGetFetchStatus;\nexport const getConfig = marketGetConfig;\nexport const getMarkets = marketGetMarkets;\nexport const getActiveMarket = marketGetActiveMarket;\nexport const getLocales = marketGetLocales;\nexport const getActiveLocale = marketGetActiveLocale;\nexport const getResolution = marketGetResolution;\nexport const getLegacyLanguage = marketLegacyGetLanguage;\n","import { GB, ZA, GLOBAL, MARKETS, EN_GB, EN_ZA, LOCALES } from '@clearscore-group/lib.config.i18n';\n\nimport {\n setActiveLocale,\n setActiveMarket,\n setMarketsEnvs,\n setLocales,\n setMarkets,\n fetchMarketConfig,\n setFetchPending,\n fetchStaticMarketConfig,\n} from './actions';\nimport {\n MARKET_SET_ACTIVE_LOCALE,\n MARKET_SET_ACTIVE_MARKET,\n MARKET_SET_LOCALES,\n MARKET_SET_MARKETS,\n MARKET_SET_ENVS,\n MARKET_FETCH_CONFIG,\n MARKET_FETCH_CONFIG_PENDING,\n MARKET_FETCH_CONFIG_ERROR,\n MARKET_FETCH_CONFIG_SUCCESS,\n MARKET_FETCH_STATIC_CONFIG,\n MARKET_FETCH_STATIC_CONFIG_ERROR,\n MARKET_FETCH_STATIC_CONFIG_SUCCESS,\n} from './types';\nimport { domain } from './reducers';\nimport {\n getPredicate,\n getFetchStatus,\n getConfig,\n getActiveLocale,\n getActiveMarket,\n getLocales,\n getMarkets,\n getResolution,\n getLegacyLanguage,\n} from './selectors/index';\n\nexport * as helpers from './lib/helpers';\n\nexport const actions = {\n setActiveLocale,\n setActiveMarket,\n setMarkets,\n setLocales,\n setMarketsEnvs,\n fetchMarketConfig,\n setFetchPending,\n fetchStaticMarketConfig,\n};\nexport const types = {\n MARKET_SET_ACTIVE_LOCALE,\n MARKET_SET_ACTIVE_MARKET,\n MARKET_SET_MARKETS,\n MARKET_SET_LOCALES,\n MARKET_SET_ENVS,\n MARKET_FETCH_CONFIG,\n MARKET_FETCH_CONFIG_PENDING,\n MARKET_FETCH_CONFIG_ERROR,\n MARKET_FETCH_CONFIG_SUCCESS,\n MARKET_FETCH_STATIC_CONFIG,\n MARKET_FETCH_STATIC_CONFIG_ERROR,\n MARKET_FETCH_STATIC_CONFIG_SUCCESS,\n};\n/* export for backward compatibility, however these should be imported directly \nfrom @clearscore-group/lib.config.i18n */\nexport const constants = { GB, ZA, GLOBAL, MARKETS, EN_GB, EN_ZA, LOCALES };\nexport const reducers = { domain };\nexport const selectors = {\n getFetchStatus,\n getPredicate,\n getConfig,\n getLocales,\n getMarkets,\n getActiveMarket,\n getActiveLocale,\n getResolution,\n getLegacyLanguage,\n};\n","import createAction from '@clearscore-group/lib.helpers.create-action';\nimport createRequestPayload from '@clearscore-group/lib.helpers.create-request-payload';\nimport getEnv from '@clearscore-group/lib.helpers.envs';\n\nimport { getWebviewAppVersion } from './utils';\nimport {\n MARKET_SET_LOCALES,\n MARKET_SET_ACTIVE_LOCALE,\n MARKET_SET_MARKETS,\n MARKET_SET_ACTIVE_MARKET,\n MARKET_SET_ENVS,\n MARKET_FETCH_CONFIG,\n MARKET_FETCH_CONFIG_PENDING,\n MARKET_FETCH_STATIC_CONFIG,\n} from './types';\n\nexport const setMarkets = (markets) => ({ type: MARKET_SET_MARKETS, payload: markets });\n\nexport const setLocales = (locales) => ({ type: MARKET_SET_LOCALES, payload: locales });\n\nexport const setMarketsEnvs = (envs) => ({ type: MARKET_SET_ENVS, payload: envs });\n\nexport const setActiveMarket = (market) => createAction(MARKET_SET_ACTIVE_MARKET, { market });\n\nexport const setFetchPending = () => ({ type: MARKET_FETCH_CONFIG_PENDING });\nexport const fetchMarketConfig = (market) => {\n const meta = {\n market,\n };\n const timeout = getEnv('MARKET_REQUEST_TIMEOUT') || 1000;\n const appVersion = getWebviewAppVersion();\n\n const headers = {\n 'x-app-id': getEnv('APP'),\n 'x-market-id': market,\n ...(appVersion && { 'x-cs-app-version': appVersion }),\n };\n\n return createAction(\n MARKET_FETCH_CONFIG,\n createRequestPayload('international', '/render-engine-local/v1/config', 'get', null, meta, headers, timeout),\n );\n};\n\nexport const fetchStaticMarketConfig = (market) =>\n createAction(MARKET_FETCH_STATIC_CONFIG, {\n ...createRequestPayload(\n 'renderEngine',\n `${market}.json?version=${getEnv(`${market.toUpperCase()}_VERSION`) || '1'}`,\n ),\n market,\n });\n\nexport const setActiveLocale = (activeLocale) => createAction(MARKET_SET_ACTIVE_LOCALE, activeLocale);\n","import type { Dispatch, Middleware, Reducer, Store } from 'redux';\nimport { combineReducers, createStore } from 'redux';\nimport { connectRouter, routerMiddleware, ConnectedRouter } from 'connected-react-router';\nimport createActionBridgeMiddleware from '@clearscore-group/lib.redux.action-bridge-middleware';\nimport type { Epic } from 'redux-observable';\nimport { combineEpics, createEpicMiddleware } from 'redux-observable';\nimport type { MemoryHistory, History } from 'history';\nimport { createMemoryHistory, createBrowserHistory } from 'history';\n// import { createBrowserHistory } from 'history'; // <-- this does not work in verticals with v4.9.0\n// import createBrowserHistory from 'history/createBrowserHistory';\nimport * as sessionTypes from '@clearscore-group/lib.constants.session-action-types';\nimport { reducers as marketReducers } from '@clearscore-group/lib.redux.market';\nimport canUseDom from '@clearscore-group/lib.helpers.can-use-dom';\nimport { Provider as ReduxProvider } from 'react-redux';\n\n// TODO: with our current setup they get included anyways\n// only that these tools never get initialized. Once modules are ready\n// we can conditionally handle this in a better way, like `import()` [TC]\nimport composeWithTools from './assets/development';\n\nexport const Provider = ReduxProvider;\nexport const Router = ConnectedRouter;\nexport const browserHistory = (basename = ''): History | MemoryHistory =>\n canUseDom() ? createBrowserHistory({ basename }) : createMemoryHistory({ initialEntries: [basename || '/'] });\n\ntype NestedReducer = Record;\n\nconst isCombined = (reducers?: S | Record): reducers is S => typeof reducers === 'function';\n\nexport const combineNestedReducers = (reducers: NestedReducer): Reducer => {\n const nestedReducers = Object.keys(reducers).reduce(\n (prev, reducer) => ({\n ...prev,\n [reducer]: typeof reducers[reducer] === 'function' ? reducers[reducer] : combineReducers(reducers[reducer]),\n }),\n {},\n );\n return combineReducers(nestedReducers);\n};\n\ninterface ComposeMiddleWaresOptions {\n pageMiddleWare: Middleware[];\n actionBridgeMiddleWare?: Middleware;\n epicMiddleWare?: Middleware;\n routerMiddleWare?: Middleware;\n}\n\nexport const composeMiddleWares = ({\n pageMiddleWare = [],\n actionBridgeMiddleWare,\n epicMiddleWare,\n routerMiddleWare,\n}: ComposeMiddleWaresOptions): Middleware[] =>\n [actionBridgeMiddleWare, epicMiddleWare, routerMiddleWare, ...pageMiddleWare].filter(\n (maybeMiddleware: Middleware | undefined): maybeMiddleware is Middleware => Boolean(maybeMiddleware),\n );\n\n// Can't use `?` as optional argument, since `reducers` is not in last position so it has\n// to be explicitly typed as `undefined`\nconst createRootReducer = (reducers: Reducer | NestedReducer | undefined, baseReducers: NestedReducer): Reducer => {\n const combinedReducers = isCombined(reducers)\n ? reducers\n : combineNestedReducers({ ...baseReducers, ...reducers });\n\n return (state, action) => {\n if ([sessionTypes.LOGOUT_SUBMIT, sessionTypes.TIMEOUT_SUCCESS].includes(action.type)) {\n return combinedReducers(undefined, action);\n }\n return combinedReducers(state, action);\n };\n};\n\ninterface ConfigStoreOptions {\n initialState?: Record;\n reducers?: Reducer | NestedReducer;\n name?: string;\n appBridgeTypes?: string[];\n coreDispatch?: Dispatch;\n pageMiddleWare?: Middleware[];\n pageEpics?: Record;\n history?: History;\n}\n\n/**\n * Returns store\n * @param initialState\n * @param reducers\n * @param name\n * @param appBridgeTypes\n * @param coreDispatch\n * @param pageMiddleWare\n * @param pageEpics\n * @param history\n * @return Object\n * */\nexport default function configureStore({\n initialState = {},\n reducers,\n name,\n appBridgeTypes = [],\n coreDispatch,\n pageMiddleWare = [],\n pageEpics,\n history = browserHistory(),\n}: ConfigStoreOptions = {}): Store {\n const epicMiddleWare = pageEpics && createEpicMiddleware();\n const actionBridgeMiddleWare = coreDispatch && createActionBridgeMiddleware(coreDispatch, appBridgeTypes);\n\n const middleWares = composeMiddleWares({\n pageMiddleWare,\n actionBridgeMiddleWare,\n epicMiddleWare,\n routerMiddleWare: routerMiddleware(history),\n });\n\n const rootReducer = createRootReducer(reducers, {\n router: connectRouter(history),\n market: marketReducers.domain,\n });\n\n const enhancer = composeWithTools({ name, middleWares });\n const store = createStore(rootReducer, initialState, enhancer);\n\n if (pageEpics) {\n epicMiddleWare?.run(isCombined(pageEpics) ? pageEpics : combineEpics(...Object.values(pageEpics)));\n }\n\n return store;\n}\n","import { Subject, from, queueScheduler } from 'rxjs';\nimport { map, mergeMap, observeOn, subscribeOn } from 'rxjs/operators';\nimport { ActionsObservable } from './ActionsObservable';\nimport { StateObservable } from './StateObservable';\nimport { warn } from './utils/console';\n\nexport function createEpicMiddleware() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // This isn't great. RxJS doesn't publicly export the constructor for\n // QueueScheduler nor QueueAction, so we reach in. We need to do this because\n // we don't want our internal queuing mechanism to be on the same queue as any\n // other RxJS code outside of redux-observable internals.\n var QueueScheduler = queueScheduler.constructor;\n var uniqueQueueScheduler = new QueueScheduler(queueScheduler.SchedulerAction);\n\n if (process.env.NODE_ENV !== 'production' && typeof options === 'function') {\n throw new TypeError('Providing your root Epic to `createEpicMiddleware(rootEpic)` is no longer supported, instead use `epicMiddleware.run(rootEpic)`\\n\\nLearn more: https://redux-observable.js.org/MIGRATION.html#setting-up-the-middleware');\n }\n\n var epic$ = new Subject();\n var store = void 0;\n\n var epicMiddleware = function epicMiddleware(_store) {\n if (process.env.NODE_ENV !== 'production' && store) {\n // https://github.com/redux-observable/redux-observable/issues/389\n warn('this middleware is already associated with a store. createEpicMiddleware should be called for every store.\\n\\nLearn more: https://goo.gl/2GQ7Da');\n }\n store = _store;\n var actionSubject$ = new Subject().pipe(observeOn(uniqueQueueScheduler));\n var stateSubject$ = new Subject().pipe(observeOn(uniqueQueueScheduler));\n var action$ = new ActionsObservable(actionSubject$);\n var state$ = new StateObservable(stateSubject$, store.getState());\n\n var result$ = epic$.pipe(map(function (epic) {\n var output$ = 'dependencies' in options ? epic(action$, state$, options.dependencies) : epic(action$, state$);\n\n if (!output$) {\n throw new TypeError('Your root Epic \"' + (epic.name || '') + '\" does not return a stream. Double check you\\'re not missing a return statement!');\n }\n\n return output$;\n }), mergeMap(function (output$) {\n return from(output$).pipe(subscribeOn(uniqueQueueScheduler), observeOn(uniqueQueueScheduler));\n }));\n\n result$.subscribe(store.dispatch);\n\n return function (next) {\n return function (action) {\n // Downstream middleware gets the action first,\n // which includes their reducers, so state is\n // updated before epics receive the action\n var result = next(action);\n\n // It's important to update the state$ before we emit\n // the action because otherwise it would be stale\n stateSubject$.next(store.getState());\n actionSubject$.next(action);\n\n return result;\n };\n };\n };\n\n epicMiddleware.run = function (rootEpic) {\n if (process.env.NODE_ENV !== 'production' && !store) {\n warn('epicMiddleware.run(rootEpic) called before the middleware has been setup by redux. Provide the epicMiddleware instance to createStore() first.');\n }\n epic$.next(rootEpic);\n };\n\n return epicMiddleware;\n}","/* eslint-disable prefer-spread */\n/* eslint-disable prefer-template */\n// must be ie11 compatible\nimport * as logger from 'redux-logger';\nimport type * as Redux from 'redux';\nimport canUseDom from '@clearscore-group/lib.helpers.can-use-dom';\nimport { compose, applyMiddleware } from 'redux';\n\nconst regex = /@@redux-form\\/(BLUR|FOCUS|CHANGE)/g;\n\nfunction logging(name?: string): Redux.Middleware {\n // redux-logger has issue for this https://github.com/LogRocket/redux-logger/issues/233\n // rollup and webpack seem to understand it's build in different way, so need to check,\n // which one is fine\n // @ts-expect-error ts-middleware-issue\n const createLogger: typeof logger.createLogger = logger.__moduleExports\n ? // @ts-expect-error ts-middleware-issue\n logger.__moduleExports.createLogger\n : logger.createLogger;\n return createLogger({\n collapsed: function collapsed(getState, action, logEntry) {\n return !logEntry?.error;\n },\n titleFormatter: function titleFormatter(action, time, took) {\n return '[' + name + '] ' + action.type + ' (' + took.toFixed(2) + 'ms)';\n },\n predicate: function predicate(getState, action) {\n return !action.type.match(regex);\n },\n });\n}\n\ndeclare global {\n interface Window {\n __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose;\n }\n}\n\nconst composeWithDevTools =\n canUseDom() && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n : // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n function () {\n if (arguments.length === 0) return undefined;\n // eslint-disable-next-line prefer-rest-params\n if (typeof arguments[0] === 'object') return compose;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return compose.apply(null, arguments); // eslint-disable-line prefer-rest-params, @typescript-eslint/ban-ts-comment, max-len\n };\n\nfunction composeWithTools(options: {\n middleWares: Redux.Middleware[];\n name?: string;\n}): Redux.StoreEnhancer<{ dispatch: unknown }, unknown> {\n if (process.env.DEBUG) {\n options.middleWares.unshift(logging(options.name));\n // @ts-expect-error ts-middleware-issue\n return composeWithDevTools({ name: options.name })(applyMiddleware.apply(null, options.middleWares));\n }\n return compose(applyMiddleware.apply(null, options.middleWares));\n}\n\nexport default composeWithTools;\n","function getLastOfPath(object, path, Empty) {\n function cleanKey(key) {\n return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n }\n\n function canNotTraverseDeeper() {\n return !object || typeof object === 'string';\n }\n\n var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n\n while (stack.length > 1) {\n if (canNotTraverseDeeper()) return {};\n var key = cleanKey(stack.shift());\n if (!object[key] && Empty) object[key] = new Empty();\n object = object[key];\n }\n\n if (canNotTraverseDeeper()) return {};\n return {\n obj: object,\n k: cleanKey(stack.shift())\n };\n}\n\nexport function setPath(object, path, newValue) {\n var _getLastOfPath = getLastOfPath(object, path, Object),\n obj = _getLastOfPath.obj,\n k = _getLastOfPath.k;\n\n obj[k] = newValue;\n}\nexport function pushPath(object, path, newValue, concat) {\n var _getLastOfPath2 = getLastOfPath(object, path, Object),\n obj = _getLastOfPath2.obj,\n k = _getLastOfPath2.k;\n\n obj[k] = obj[k] || [];\n if (concat) obj[k] = obj[k].concat(newValue);\n if (!concat) obj[k].push(newValue);\n}\nexport function getPath(object, path) {\n var _getLastOfPath3 = getLastOfPath(object, path),\n obj = _getLastOfPath3.obj,\n k = _getLastOfPath3.k;\n\n if (!obj) return undefined;\n return obj[k];\n}\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nexport function defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\nexport function extend(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport * as utils from './utils.js';\nimport IntlMessageFormat from 'intl-messageformat';\n\nfunction getDefaults() {\n return {\n memoize: true,\n memoizeFallback: false,\n bindI18n: '',\n bindI18nStore: '',\n parseErrorHandler: function parseErrorHandler(err, key, res, options) {\n return res;\n }\n };\n}\n\nvar ICU = /*#__PURE__*/function () {\n function ICU(options) {\n _classCallCheck(this, ICU);\n\n this.type = 'i18nFormat';\n this.mem = {};\n this.init(null, options);\n }\n\n _createClass(ICU, [{\n key: \"init\",\n value: function init(i18next, options) {\n var _this = this;\n\n var i18nextOptions = i18next && i18next.options && i18next.options.i18nFormat || {};\n this.options = utils.defaults(i18nextOptions, options, this.options || {}, getDefaults());\n this.formats = this.options.formats;\n\n if (i18next) {\n var _this$options = this.options,\n bindI18n = _this$options.bindI18n,\n bindI18nStore = _this$options.bindI18nStore,\n memoize = _this$options.memoize;\n i18next.IntlMessageFormat = IntlMessageFormat;\n i18next.ICU = this;\n\n if (memoize) {\n if (bindI18n) {\n i18next.on(bindI18n, function () {\n return _this.clearCache();\n });\n }\n\n if (bindI18nStore) {\n i18next.store.on(bindI18nStore, function () {\n return _this.clearCache();\n });\n }\n }\n }\n }\n }, {\n key: \"addUserDefinedFormats\",\n value: function addUserDefinedFormats(formats) {\n this.formats = this.formats ? _objectSpread(_objectSpread({}, this.formats), formats) : formats;\n }\n }, {\n key: \"parse\",\n value: function parse(res, options, lng, ns, key, info) {\n var hadSuccessfulLookup = info && info.resolved && info.resolved.res;\n var memKey = this.options.memoize && \"\".concat(lng, \".\").concat(ns, \".\").concat(key.replace(/\\./g, '###'));\n var fc;\n\n if (this.options.memoize) {\n fc = utils.getPath(this.mem, memKey);\n }\n\n try {\n if (!fc) {\n // without ignoreTag, react-i18next translations with <0> placeholders\n // will fail to parse, as IntlMessageFormat expects them to be defined in the\n // options passed to fc.format() as { 0: (children) => string }\n // but the replacement of placeholders is done in react-i18next\n fc = new IntlMessageFormat(res, lng, this.formats, {\n ignoreTag: true\n });\n if (this.options.memoize && (this.options.memoizeFallback || !info || hadSuccessfulLookup)) utils.setPath(this.mem, memKey, fc);\n }\n\n return fc.format(options);\n } catch (err) {\n return this.options.parseErrorHandler(err, key, res, options);\n }\n }\n }, {\n key: \"addLookupKeys\",\n value: function addLookupKeys(finalKeys, _key, _code, _ns, _options) {\n // no additional keys needed for select or plural\n // so there is no need to add keys to that finalKeys array\n return finalKeys;\n }\n }, {\n key: \"clearCache\",\n value: function clearCache() {\n this.mem = {};\n }\n }]);\n\n return ICU;\n}();\n\nICU.type = 'i18nFormat';\nexport default ICU;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","import _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\n\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nfunction defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\n\n// eslint-disable-next-line no-control-regex\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\nvar serializeCookie = function serializeCookie(name, val, options) {\n var opt = options || {};\n opt.path = opt.path || '/';\n var value = encodeURIComponent(val);\n var str = \"\".concat(name, \"=\").concat(value);\n\n if (opt.maxAge > 0) {\n var maxAge = opt.maxAge - 0;\n if (Number.isNaN(maxAge)) throw new Error('maxAge should be a Number');\n str += \"; Max-Age=\".concat(Math.floor(maxAge));\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += \"; Domain=\".concat(opt.domain);\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += \"; Path=\".concat(opt.path);\n }\n\n if (opt.expires) {\n if (typeof opt.expires.toUTCString !== 'function') {\n throw new TypeError('option expires is invalid');\n }\n\n str += \"; Expires=\".concat(opt.expires.toUTCString());\n }\n\n if (opt.httpOnly) str += '; HttpOnly';\n if (opt.secure) str += '; Secure';\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string' ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n\n case 'lax':\n str += '; SameSite=Lax';\n break;\n\n case 'strict':\n str += '; SameSite=Strict';\n break;\n\n case 'none':\n str += '; SameSite=None';\n break;\n\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n};\n\nvar cookie = {\n create: function create(name, value, minutes, domain) {\n var cookieOptions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n path: '/',\n sameSite: 'strict'\n };\n\n if (minutes) {\n cookieOptions.expires = new Date();\n cookieOptions.expires.setTime(cookieOptions.expires.getTime() + minutes * 60 * 1000);\n }\n\n if (domain) cookieOptions.domain = domain;\n document.cookie = serializeCookie(name, encodeURIComponent(value), cookieOptions);\n },\n read: function read(name) {\n var nameEQ = \"\".concat(name, \"=\");\n var ca = document.cookie.split(';');\n\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n\n return null;\n },\n remove: function remove(name) {\n this.create(name, '', -1);\n }\n};\nvar cookie$1 = {\n name: 'cookie',\n lookup: function lookup(options) {\n var found;\n\n if (options.lookupCookie && typeof document !== 'undefined') {\n var c = cookie.read(options.lookupCookie);\n if (c) found = c;\n }\n\n return found;\n },\n cacheUserLanguage: function cacheUserLanguage(lng, options) {\n if (options.lookupCookie && typeof document !== 'undefined') {\n cookie.create(options.lookupCookie, lng, options.cookieMinutes, options.cookieDomain, options.cookieOptions);\n }\n }\n};\n\nvar querystring = {\n name: 'querystring',\n lookup: function lookup(options) {\n var found;\n\n if (typeof window !== 'undefined') {\n var search = window.location.search;\n\n if (!window.location.search && window.location.hash && window.location.hash.indexOf('?') > -1) {\n search = window.location.hash.substring(window.location.hash.indexOf('?'));\n }\n\n var query = search.substring(1);\n var params = query.split('&');\n\n for (var i = 0; i < params.length; i++) {\n var pos = params[i].indexOf('=');\n\n if (pos > 0) {\n var key = params[i].substring(0, pos);\n\n if (key === options.lookupQuerystring) {\n found = params[i].substring(pos + 1);\n }\n }\n }\n }\n\n return found;\n }\n};\n\nvar hasLocalStorageSupport = null;\n\nvar localStorageAvailable = function localStorageAvailable() {\n if (hasLocalStorageSupport !== null) return hasLocalStorageSupport;\n\n try {\n hasLocalStorageSupport = window !== 'undefined' && window.localStorage !== null;\n var testKey = 'i18next.translate.boo';\n window.localStorage.setItem(testKey, 'foo');\n window.localStorage.removeItem(testKey);\n } catch (e) {\n hasLocalStorageSupport = false;\n }\n\n return hasLocalStorageSupport;\n};\n\nvar localStorage = {\n name: 'localStorage',\n lookup: function lookup(options) {\n var found;\n\n if (options.lookupLocalStorage && localStorageAvailable()) {\n var lng = window.localStorage.getItem(options.lookupLocalStorage);\n if (lng) found = lng;\n }\n\n return found;\n },\n cacheUserLanguage: function cacheUserLanguage(lng, options) {\n if (options.lookupLocalStorage && localStorageAvailable()) {\n window.localStorage.setItem(options.lookupLocalStorage, lng);\n }\n }\n};\n\nvar hasSessionStorageSupport = null;\n\nvar sessionStorageAvailable = function sessionStorageAvailable() {\n if (hasSessionStorageSupport !== null) return hasSessionStorageSupport;\n\n try {\n hasSessionStorageSupport = window !== 'undefined' && window.sessionStorage !== null;\n var testKey = 'i18next.translate.boo';\n window.sessionStorage.setItem(testKey, 'foo');\n window.sessionStorage.removeItem(testKey);\n } catch (e) {\n hasSessionStorageSupport = false;\n }\n\n return hasSessionStorageSupport;\n};\n\nvar sessionStorage = {\n name: 'sessionStorage',\n lookup: function lookup(options) {\n var found;\n\n if (options.lookupSessionStorage && sessionStorageAvailable()) {\n var lng = window.sessionStorage.getItem(options.lookupSessionStorage);\n if (lng) found = lng;\n }\n\n return found;\n },\n cacheUserLanguage: function cacheUserLanguage(lng, options) {\n if (options.lookupSessionStorage && sessionStorageAvailable()) {\n window.sessionStorage.setItem(options.lookupSessionStorage, lng);\n }\n }\n};\n\nvar navigator$1 = {\n name: 'navigator',\n lookup: function lookup(options) {\n var found = [];\n\n if (typeof navigator !== 'undefined') {\n if (navigator.languages) {\n // chrome only; not an array, so can't use .push.apply instead of iterating\n for (var i = 0; i < navigator.languages.length; i++) {\n found.push(navigator.languages[i]);\n }\n }\n\n if (navigator.userLanguage) {\n found.push(navigator.userLanguage);\n }\n\n if (navigator.language) {\n found.push(navigator.language);\n }\n }\n\n return found.length > 0 ? found : undefined;\n }\n};\n\nvar htmlTag = {\n name: 'htmlTag',\n lookup: function lookup(options) {\n var found;\n var htmlTag = options.htmlTag || (typeof document !== 'undefined' ? document.documentElement : null);\n\n if (htmlTag && typeof htmlTag.getAttribute === 'function') {\n found = htmlTag.getAttribute('lang');\n }\n\n return found;\n }\n};\n\nvar path = {\n name: 'path',\n lookup: function lookup(options) {\n var found;\n\n if (typeof window !== 'undefined') {\n var language = window.location.pathname.match(/\\/([a-zA-Z-]*)/g);\n\n if (language instanceof Array) {\n if (typeof options.lookupFromPathIndex === 'number') {\n if (typeof language[options.lookupFromPathIndex] !== 'string') {\n return undefined;\n }\n\n found = language[options.lookupFromPathIndex].replace('/', '');\n } else {\n found = language[0].replace('/', '');\n }\n }\n }\n\n return found;\n }\n};\n\nvar subdomain = {\n name: 'subdomain',\n lookup: function lookup(options) {\n // If given get the subdomain index else 1\n var lookupFromSubdomainIndex = typeof options.lookupFromSubdomainIndex === 'number' ? options.lookupFromSubdomainIndex + 1 : 1; // get all matches if window.location. is existing\n // first item of match is the match itself and the second is the first group macht which sould be the first subdomain match\n // is the hostname no public domain get the or option of localhost\n\n var language = typeof window !== 'undefined' && window.location && window.location.hostname && window.location.hostname.match(/^(\\w{2,5})\\.(([a-z0-9-]{1,63}\\.[a-z]{2,6})|localhost)/i); // if there is no match (null) return undefined\n\n if (!language) return undefined; // return the given group match\n\n return language[lookupFromSubdomainIndex];\n }\n};\n\nfunction getDefaults() {\n return {\n order: ['querystring', 'cookie', 'localStorage', 'sessionStorage', 'navigator', 'htmlTag'],\n lookupQuerystring: 'lng',\n lookupCookie: 'i18next',\n lookupLocalStorage: 'i18nextLng',\n lookupSessionStorage: 'i18nextLng',\n // cache user language\n caches: ['localStorage'],\n excludeCacheFor: ['cimode'] // cookieMinutes: 10,\n // cookieDomain: 'myDomain'\n\n };\n}\n\nvar Browser = /*#__PURE__*/function () {\n function Browser(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Browser);\n\n this.type = 'languageDetector';\n this.detectors = {};\n this.init(services, options);\n }\n\n _createClass(Browser, [{\n key: \"init\",\n value: function init(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var i18nOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.services = services;\n this.options = defaults(options, this.options || {}, getDefaults()); // backwards compatibility\n\n if (this.options.lookupFromUrlIndex) this.options.lookupFromPathIndex = this.options.lookupFromUrlIndex;\n this.i18nOptions = i18nOptions;\n this.addDetector(cookie$1);\n this.addDetector(querystring);\n this.addDetector(localStorage);\n this.addDetector(sessionStorage);\n this.addDetector(navigator$1);\n this.addDetector(htmlTag);\n this.addDetector(path);\n this.addDetector(subdomain);\n }\n }, {\n key: \"addDetector\",\n value: function addDetector(detector) {\n this.detectors[detector.name] = detector;\n }\n }, {\n key: \"detect\",\n value: function detect(detectionOrder) {\n var _this = this;\n\n if (!detectionOrder) detectionOrder = this.options.order;\n var detected = [];\n detectionOrder.forEach(function (detectorName) {\n if (_this.detectors[detectorName]) {\n var lookup = _this.detectors[detectorName].lookup(_this.options);\n\n if (lookup && typeof lookup === 'string') lookup = [lookup];\n if (lookup) detected = detected.concat(lookup);\n }\n });\n if (this.services.languageUtils.getBestMatchFromCodes) return detected; // new i18next v19.5.0\n\n return detected.length > 0 ? detected[0] : null; // a little backward compatibility\n }\n }, {\n key: \"cacheUserLanguage\",\n value: function cacheUserLanguage(lng, caches) {\n var _this2 = this;\n\n if (!caches) caches = this.options.caches;\n if (!caches) return;\n if (this.options.excludeCacheFor && this.options.excludeCacheFor.indexOf(lng) > -1) return;\n caches.forEach(function (cacheName) {\n if (_this2.detectors[cacheName]) _this2.detectors[cacheName].cacheUserLanguage(lng, _this2.options);\n });\n }\n }]);\n\n return Browser;\n}();\n\nBrowser.type = 'languageDetector';\n\nexport { Browser as default };\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","import canUseDom from '@clearscore-group/lib.helpers.can-use-dom';\n\nconst CACHE_NAME = '__cs__';\nconst MONITORING_NAME = 'monitoring';\n/**\n * helper to check if monitoring is available\n */\nfunction hasMonitoring() {\n return canUseDom && window[CACHE_NAME] && window[CACHE_NAME][MONITORING_NAME];\n}\n\nfunction pageview(location) {\n if (hasMonitoring()) window[CACHE_NAME][MONITORING_NAME].pageview(location);\n}\n\nfunction identity(uuid) {\n if (hasMonitoring()) window[CACHE_NAME][MONITORING_NAME].identity(uuid);\n}\n\nfunction tag(name, value) {\n if (hasMonitoring()) window[CACHE_NAME][MONITORING_NAME].tag(name, value);\n}\n\nfunction property(name, value) {\n if (hasMonitoring()) window[CACHE_NAME][MONITORING_NAME].property(name, value);\n}\n\nfunction addBreadcrumb(data) {\n if (hasMonitoring()) window[CACHE_NAME][MONITORING_NAME].addBreadcrumb(data);\n}\n\nfunction error(err) {\n if (hasMonitoring()) window[CACHE_NAME][MONITORING_NAME].error(err);\n}\n\nfunction log(msg) {\n if (hasMonitoring()) window[CACHE_NAME][MONITORING_NAME].log(msg);\n}\n\nfunction withScope(func) {\n if (hasMonitoring()) window[CACHE_NAME][MONITORING_NAME].withScope(func);\n}\n\nexport default {\n hasMonitoring,\n identity,\n tag,\n property,\n addBreadcrumb,\n error,\n log,\n withScope,\n pageview,\n};\n","export const isValidLocale = (locale: string): boolean => {\n try {\n return typeof Intl.DateTimeFormat(locale) !== 'undefined';\n } catch {\n return false;\n }\n};\n","/* eslint-disable camelcase */\nimport { getSessionCookie } from '@clearscore-group/lib.helpers.cookies';\nimport { isValidLocale } from '@clearscore-group/lib.helpers.i18n';\n\nexport interface CSSessionCookie {\n access_token: string;\n refresh_token: string;\n session_id: string;\n o_token: string;\n market: string;\n locale: string;\n}\n\ninterface CustomDetectorOptions {\n name: string;\n lookup: () => string | undefined;\n}\n\nconst sessionCookie: CustomDetectorOptions = {\n name: 'sessionCookie',\n lookup: () => {\n try {\n const sessionCookieObj: CSSessionCookie = getSessionCookie();\n return isValidLocale(sessionCookieObj.locale) ? sessionCookieObj.locale : undefined;\n } catch {\n return undefined;\n }\n },\n};\n\nexport default sessionCookie;\n","import { isValidLocale } from '@clearscore-group/lib.helpers.i18n';\nimport { MARKETS } from '@clearscore-group/lib.config.i18n';\n\ninterface CustomDetectorOptions {\n name: string;\n lookup: () => undefined | string;\n}\n\nconst marketPath: CustomDetectorOptions = {\n name: 'marketPath',\n lookup: () => {\n if (typeof window !== 'undefined') {\n const regExp = new RegExp(\n [\n ...MARKETS.map((market: string) => `/${market}/`),\n ...MARKETS.map((market: string) => `/${market}$`),\n ].join('|'),\n );\n const result = regExp.exec(window.location.pathname)?.[0] ?? [];\n const possibleMarket = `en-${result[1]}${result[2]}` ?? '';\n return isValidLocale(possibleMarket) ? possibleMarket : undefined;\n }\n return undefined;\n },\n};\n\nexport default marketPath;\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport ICU from 'i18next-icu';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport monitoring from '@clearscore-group/lib.helpers.monitoring';\nimport { EN_AU, EN_CA, EN_GB, EN_ZA, FR_CA, EN_NZ } from '@clearscore-group/lib.config.i18n';\nimport { constants, updateSessionCookie, getSessionCookie } from '@clearscore-group/lib.helpers.cookies';\n\nimport sessionCookieDetector from '../detectors/sessionCookie';\nimport marketPathDetector from '../detectors/marketPath';\n\nconst { CS_CURRENT_LANGUAGE } = constants;\n\nconst languageDetector = new LanguageDetector(null, {\n caches: ['cookie'],\n order: ['querystring', marketPathDetector.name, sessionCookieDetector.name, 'cookie', 'navigator'],\n lookupCookie: CS_CURRENT_LANGUAGE,\n});\n\nconst supportedLngs = [EN_GB, EN_AU, EN_CA, EN_ZA, FR_CA, EN_NZ];\n\nlanguageDetector.addDetector(marketPathDetector);\nlanguageDetector.addDetector(sessionCookieDetector);\n\ni18n.use(initReactI18next)\n .use(ICU)\n .use(languageDetector)\n .init({\n ns: [],\n resources: {\n EN_GB: {},\n },\n supportedLngs,\n lowerCaseLng: true,\n fallbackLng: EN_GB,\n interpolation: {\n escapeValue: false,\n },\n saveMissing: true,\n missingKeyHandler: (locale, ns, copyKey) => {\n // don't throw for copy tagged as coming from a feature service\n if (monitoring.hasMonitoring() && ns !== 'cs-dont-throw') {\n const errObject = new Error(`[i18n.missing-key] local: ${locale}, Scope: ${ns}, Copy-key: ${copyKey}`);\n monitoring.error(errObject);\n }\n },\n });\n\ni18n.on('languageChanged', (lng) => {\n if (getSessionCookie()) updateSessionCookie({ locale: lng });\n});\n\nexport default i18n;\n","/* eslint-disable react/prop-types */\nimport React from 'react';\nimport { I18nextProvider } from 'react-i18next';\nimport configureStore, { Router, Provider, browserHistory } from '@clearscore-group/lib.redux.store';\nimport { selectors as marketSelectors } from '@clearscore-group/lib.redux.market';\n\nimport i18n from './lib/i18n';\n\nconst isFunction = (config) => typeof config === 'function';\n\nexport const i18nInstance = i18n;\n\nexport default ({\n children,\n storeConfig,\n i18n: newI18nInstance = i18n, // allow modified instance for testing\n defaultMarket,\n defaultLocale,\n basename,\n history = browserHistory(basename),\n ...props\n}) => {\n const store = isFunction(storeConfig)\n ? storeConfig\n : configureStore({ ...storeConfig, defaultLocale, defaultMarket, history });\n const state = store.getState();\n const locale = marketSelectors.getActiveLocale(state);\n const providerProps = { store, history, locale, ...props };\n const getChild = () => (isFunction(children) ? children(providerProps) : children);\n\n return (\n \n \n {getChild()}\n \n \n );\n};\n","import type { ReactElement } from 'react';\nimport './style/styles.css';\n\ninterface FontProps {\n children?: ReactElement;\n}\n\ninterface Font {\n (props: FontProps): ReactElement | null;\n}\n\nconst Font: Font = ({ children }) => children || null;\n\nexport default Font;\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getRegistrationProspectId = (state) => resolveProp('router.location.pathname', state).replace(/\\/step.+\\//, '');\n\nexport default createSelector(getRegistrationProspectId, (prospectId) => prospectId);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getRegistrationStep = (state, props) => {\n const pathname = resolveProp('location.pathname', props) || resolveProp('router.location.pathname', state) || {};\n const step = pathname.match('/step([1-4])');\n return step ? parseInt(step[1], 10) : undefined;\n};\n\nexport default createSelector(getRegistrationStep, (registrationStep) => registrationStep);\n","const parse = (search: string): T => {\n const pairs = search.slice(1).split('&');\n const result = pairs.reduce((prev: Record, pair: string) => {\n const [key, encodedValue = ''] = pair.split('=');\n const value = decodeURIComponent(encodedValue);\n const arrValues = prev[key] && Array.isArray(prev[key]) ? prev[key] : [prev[key]];\n const arrValue = prev[key] ? [...arrValues, value] : value;\n return {\n ...prev,\n ...(key ? { [key]: arrValue as string[] } : {}),\n };\n }, {});\n return JSON.parse(JSON.stringify(result));\n};\n\ntype StringifyParams = Record;\n\nconst getValues = (params: StringifyParams, key: string): string[] => {\n if (Array.isArray(params[key])) {\n return params[key] as string[];\n }\n\n return [params[key]] as string[];\n};\n\nconst stringify = (params: StringifyParams): string => {\n const result = Object.entries(params).reduce((prev, [key, value]) => {\n if (value === undefined) return prev;\n\n return getValues(params, key).reduce((prevValue: string, decodedValue: string) => {\n const amp = prevValue.length > 0 ? '&' : '';\n return `${prevValue}${amp}${key}=${encodeURIComponent(decodedValue)}`;\n }, prev);\n }, '');\n return JSON.parse(JSON.stringify(result));\n};\n\nexport default {\n parse,\n stringify,\n};\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\nimport queryString from '@clearscore-group/lib.helpers.query-string';\n\nconst getQueryParams = (state) => queryString.parse(resolveProp('router.location.search', state)) || {};\n\nexport default createSelector(getQueryParams, (queryParams) => queryParams);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getErrorName = (state) => {\n const error = resolveProp('router.location.pathname', state).match('/error.*/([^/]+)/?$');\n return error ? error[1] : 'generic';\n};\n\nexport default createSelector(getErrorName, (errorName) => errorName);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst windowPathname = () => (window && window.location ? window.location.pathname : undefined);\nconst currentPath = (state) => resolveProp('router.location.pathname', state) || windowPathname();\n\nexport default createSelector(currentPath, (path) => path);\n","import { createSelector } from 'reselect';\nimport { constants } from '@clearscore-group/lib.redux.market';\n\nimport getCurrentPath from './getCurrentPath';\n\nconst marketRegExCaptureGroup = RegExp(`^/(${constants.MARKETS.join('|')})(.*)$`, 'gi');\n\nexport default createSelector(getCurrentPath, (currentPath) =>\n currentPath && currentPath.match(marketRegExCaptureGroup)\n ? currentPath.replace(marketRegExCaptureGroup, '$1').toLowerCase()\n : null,\n);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getLocationState = (state) => resolveProp('router.location.state', state) || {};\n\nexport default createSelector(getLocationState, (locationState) => locationState);\n","import * as selectorsImport from './selectors';\n\n// eslint-disable-next-line import/prefer-default-export\nexport const selectors = selectorsImport;\n","import { AU, NZ } from '@clearscore-group/lib.config.i18n';\n\nexport default (market) => {\n switch (market) {\n case AU:\n return {\n reidentify: '/au-registration/v1/register/reidentify',\n skipReidentify: '/au-registration/v1/skip-update',\n };\n case NZ:\n return {\n reidentify: '/nz-registration/v1/register/reidentify',\n skipReidentify: '/nz-registration/v1/skip-update',\n };\n default:\n return {\n reidentify: '/cs-identity/v1/reidentify',\n skipReidentify: '/cs-identity/v1/reidentify',\n };\n }\n};\n","export const IDENTITY_IDENTIFY = 'CS/IDENTITY_IDENTIFY';\nexport const IDENTITY_IDENTIFY_SUCCESS = `${IDENTITY_IDENTIFY}_SUCCESS`;\nexport const IDENTITY_IDENTIFY_ERROR = `${IDENTITY_IDENTIFY}_ERROR`;\nexport const IDENTITY_REIDENTIFY = 'CS/IDENTITY_REIDENTIFY';\nexport const IDENTITY_REIDENTIFY_SUCCESS = `${IDENTITY_REIDENTIFY}_SUCCESS`;\nexport const IDENTITY_REIDENTIFY_ERROR = `${IDENTITY_REIDENTIFY}_ERROR`;\nexport const IDENTITY_RESTART = 'CS/IDENTITY_RESTART';\nexport const IDENTITY_RESTART_SUCCESS = `${IDENTITY_RESTART}_SUCCESS`;\nexport const IDENTITY_RESTART_ERROR = `${IDENTITY_RESTART}_ERROR`;\nexport const IDENTITY_GENERATE_TOKEN = 'CS/IDENTITY_GENERATE_TOKEN';\nexport const IDENTITY_GENERATE_TOKEN_SUCCESS = `${IDENTITY_GENERATE_TOKEN}_SUCCESS`;\nexport const IDENTITY_GENERATE_TOKEN_ERROR = `${IDENTITY_GENERATE_TOKEN}_ERROR`;\nexport const IDENTITY_VERIFY_OTP_TOKEN = 'CS/IDENTITY_VERIFY_OTP_TOKEN';\nexport const IDENTITY_VERIFY_OTP_TOKEN_SUCCESS = `${IDENTITY_VERIFY_OTP_TOKEN}_SUCCESS`;\nexport const IDENTITY_VERIFY_OTP_TOKEN_ERROR = `${IDENTITY_VERIFY_OTP_TOKEN}_ERROR`;\nexport const IDENTITY_CHOOSE = 'CS/IDENTITY_CHOOSE';\nexport const IDENTITY_CHOOSE_SUCCESS = `${IDENTITY_CHOOSE}_SUCCESS`;\nexport const IDENTITY_CHOOSE_ERROR = `${IDENTITY_CHOOSE}_ERROR`;\nexport const IDENTITY_FIRST_TIME_VISIT = 'CS/IDENTITY_FIRST_TIME_VISIT';\nexport const IDENTITY_FIRST_TIME_REGISTRATION = 'CS/IDENTITY_FIRST_TIME_REGISTRATION';\n\nexport const IDENTITY_FETCH_KBA = 'CS/IDENTITY_FETCH_KBA';\nexport const IDENTITY_FETCH_KBA_SUCCESS = `${IDENTITY_FETCH_KBA}_SUCCESS`;\nexport const IDENTITY_FETCH_KBA_ERROR = `${IDENTITY_FETCH_KBA}_ERROR`;\nexport const IDENTITY_VERIFY_KBA = 'CS/IDENTITY_VERIFY_KBA';\nexport const IDENTITY_VERIFY_KBA_SUCCESS = `${IDENTITY_VERIFY_KBA}_SUCCESS`;\nexport const IDENTITY_VERIFY_KBA_ERROR = `${IDENTITY_VERIFY_KBA}_ERROR`;\n\nexport const IDENTITY_VERIFY_BAV = 'CS/IDENTITY_VERIFY_BAV';\nexport const IDENTITY_VERIFY_BAV_SUCCESS = `${IDENTITY_VERIFY_BAV}_SUCCESS`;\nexport const IDENTITY_VERIFY_BAV_ERROR = `${IDENTITY_VERIFY_BAV}_ERROR`;\nexport const IDENTITY_SKIP_BAV = 'CS/IDENTITY_SKIP_BAV';\nexport const IDENTITY_SKIP_BAV_SUCCESS = `${IDENTITY_SKIP_BAV}_SUCCESS`;\nexport const IDENTITY_SKIP_BAV_ERROR = `${IDENTITY_SKIP_BAV}_ERROR`;\n\nexport const IDENTITY_MARKETING_USER = 'CS/IDENTITY_MARKETING_USER';\nexport const IDENTITY_SKIP_OTP = 'CS/IDENTITY_SKIP_OTP';\nexport const IDENTITY_SKIP_OTP_SUCCESS = `${IDENTITY_SKIP_OTP}_SUCCESS`;\nexport const IDENTITY_SKIP_OTP_ERROR = `${IDENTITY_SKIP_OTP}_ERROR`;\n\nexport const IDENTITY_SKIP_REIDENTIFY = 'CS/IDENTITY_SKIP_REIDENTIFY';\nexport const IDENTITY_SKIP_REIDENTIFY_SUCCESS = `${IDENTITY_SKIP_REIDENTIFY}_SUCCESS`;\nexport const IDENTITY_SKIP_REIDENTIFY_ERROR = `${IDENTITY_SKIP_REIDENTIFY}_ERROR`;\n\nexport const IDENTITY_EMPTY = 'CS/IDENTITY_EMPTY';\n","import * as actionsImport from './identity.actions';\nimport * as reducersImport from './identity.reducers';\nimport * as selectorsImport from './selectors/index';\nimport * as typesImport from './identity.types';\n\nexport const actions = actionsImport;\nexport const reducers = reducersImport;\nexport const selectors = selectorsImport;\nexport const types = typesImport;\n","import createAction from '@clearscore-group/lib.helpers.create-action';\nimport createRequestPayload from '@clearscore-group/lib.helpers.create-request-payload';\n\nimport marketConfig from './lib/market-config';\nimport {\n IDENTITY_IDENTIFY,\n IDENTITY_REIDENTIFY,\n IDENTITY_RESTART,\n IDENTITY_GENERATE_TOKEN,\n IDENTITY_VERIFY_OTP_TOKEN,\n IDENTITY_CHOOSE,\n IDENTITY_FIRST_TIME_VISIT,\n IDENTITY_FIRST_TIME_REGISTRATION,\n IDENTITY_FETCH_KBA,\n IDENTITY_VERIFY_KBA,\n IDENTITY_VERIFY_BAV,\n IDENTITY_SKIP_BAV,\n IDENTITY_MARKETING_USER,\n IDENTITY_SKIP_OTP,\n IDENTITY_SKIP_REIDENTIFY,\n} from './identity.types';\n\nexport const identify = (blackBox) =>\n createAction(\n IDENTITY_IDENTIFY,\n createRequestPayload('international', '/cs-identity/v1/identify', 'post', { beginBlackbox: blackBox }),\n );\nexport const reidentify = (market, blackBox) =>\n createAction(\n IDENTITY_REIDENTIFY,\n createRequestPayload(\n 'international',\n marketConfig(market).reidentify,\n 'post',\n blackBox\n ? {\n beginBlackbox: blackBox,\n }\n : undefined,\n ),\n );\n\nexport const skipReidentify = (market, blackBox) =>\n createAction(\n IDENTITY_SKIP_REIDENTIFY,\n createRequestPayload(\n 'international',\n marketConfig(market).skipReidentify,\n 'post',\n blackBox\n ? {\n beginBlackbox: blackBox,\n }\n : undefined,\n ),\n );\n\nexport const restart = () =>\n createAction(IDENTITY_RESTART, createRequestPayload('international', `/cs-identity/v1/restart`, 'post'));\n\nexport const generateToken = ({ isResend = false } = {}) =>\n createAction(\n IDENTITY_GENERATE_TOKEN,\n createRequestPayload('international', '/cs-identity/v2/otp/generate', 'post', null, { isResend }),\n );\n\nexport const verifyOtpToken = (data) =>\n createAction(\n IDENTITY_VERIFY_OTP_TOKEN,\n createRequestPayload('international', `/cs-identity/v1/otp/verify/${data.otpCandidate}`, 'post'),\n );\nexport const choose = (data) =>\n createAction(IDENTITY_CHOOSE, createRequestPayload('international', '/cs-identity/v1/choose', 'post', data));\n\nexport const firstTimeVisit = () => createAction(IDENTITY_FIRST_TIME_VISIT);\n\nexport const firstTimeRegistration = () => createAction(IDENTITY_FIRST_TIME_REGISTRATION);\n\nexport const fetchKba = () =>\n createAction(IDENTITY_FETCH_KBA, createRequestPayload('international', `/cs-identity/v1/kba`));\n\nexport const verifyKba = (data) =>\n createAction(\n IDENTITY_VERIFY_KBA,\n createRequestPayload('international', `/cs-identity/v1/kba/verify`, 'post', data),\n );\n\nexport const verifyBav = (data) =>\n createAction(\n IDENTITY_VERIFY_BAV,\n createRequestPayload('international', `/cs-identity/v1/bav/verify`, 'post', data),\n );\n\nexport const skipBav = () =>\n createAction(IDENTITY_SKIP_BAV, createRequestPayload('international', `/cs-identity/v1/bav/skip`, 'post'));\n\nexport const trackUserCameFromMarketingSource = ({ context }) => createAction(IDENTITY_MARKETING_USER, { context });\n\nexport const skipOtp = () =>\n createAction(IDENTITY_SKIP_OTP, createRequestPayload('international', `/cs-identity/v1/otp/skip`, 'post'));\n","export const marketingCampaignConfig = {\n utm_source: 'utm_source',\n utm_medium: 'utm_medium',\n utm_campaign: 'utm_campaign',\n utm_term: 'utm_term',\n utm_content: 'utm_content',\n} as const;\n\nexport const getMarketingUrlParams = ({\n queryParams = {},\n}: {\n queryParams?: { [k: string]: string };\n}): {\n [k: string]: string | undefined;\n} =>\n Object.keys(queryParams).reduce(\n (values, param) => ({\n ...values,\n [param]: param in marketingCampaignConfig ? queryParams[param] : undefined,\n }),\n {},\n );\n\nexport const urlContainsMarketingParams = (queryParams: { [k: string]: string }): boolean =>\n Object.keys(queryParams).includes(marketingCampaignConfig.utm_source);\n","import type { Dispatch, Store } from 'redux';\nimport { MARKETS } from '@clearscore-group/lib.config.i18n';\nimport {\n setPersonCookie,\n setVisitedSiteCookie,\n getVisitedSiteCookie,\n setPublisherCookie,\n getSessionCookie,\n orchestrateAnonymousCookie,\n} from '@clearscore-group/lib.helpers.cookies';\nimport canUseDom from '@clearscore-group/lib.helpers.can-use-dom';\nimport getEnv from '@clearscore-group/lib.helpers.envs';\nimport { selectors as routerSelectors } from '@clearscore-group/lib.redux.router';\nimport { actions as identityActions } from '@clearscore-group/lib.redux.identity';\nimport { actions as marketActions } from '@clearscore-group/lib.redux.market';\n\nimport { urlContainsMarketingParams, getMarketingUrlParams } from './helpers';\n\n/**\n * Set the active market from the `market` parameter in the querystring\n * if provided to ensure tracking events are fired in the correct region\n */\nconst setMarketFromQuerystring = (dispatch: Dispatch, overrideQueryString?: string | null): void => {\n if (!canUseDom()) {\n return;\n }\n\n const queryString = overrideQueryString || window.location.search;\n const qsMarket = new URLSearchParams(queryString).get('market') || '';\n\n if (!(MARKETS as unknown as Array).includes(qsMarket)) {\n // Invalid market passed in querystring\n return;\n }\n\n dispatch(marketActions.setActiveMarket(qsMarket));\n};\n\ninterface IInitialiseTrackingCookieEventHandlers {\n onFirstTimeVisit?: (userIdentifieer?: string) => void;\n onMarketingCampaignVisit?: (marketingUrlParams: { [k: string]: string | undefined }) => void;\n}\n\n/**\n * Initialise tracking by dispatching identity actions and saving UTM parameters from\n * the URL into a cookie to be persisted across the site\n *\n * If you're using `connected-react-router`, you need to pass the whole redux store to\n * this function so it's able to pull the query params from the state. Otherwise, you\n * can simply pass an object with the `dispatch` propery and the function will look\n * in the second argument (or window querystring) for UTM tags\n */\nexport default (\n {\n dispatch,\n getState,\n }: {\n dispatch: Store['dispatch'];\n getState?: Store['getState'];\n },\n overrideQueryString?: string | null,\n { onFirstTimeVisit, onMarketingCampaignVisit }: IInitialiseTrackingCookieEventHandlers = {},\n): null => {\n const isWebview = getEnv('WEBVIEW');\n // If it's a webview with injected session cookie, it's not a first time visit\n const isFirstVisit = !getVisitedSiteCookie() && (!isWebview || !getSessionCookie());\n const userIdentifier = orchestrateAnonymousCookie();\n\n if (isFirstVisit) {\n setMarketFromQuerystring(dispatch, overrideQueryString);\n dispatch(identityActions.firstTimeVisit());\n onFirstTimeVisit?.(userIdentifier);\n }\n\n // always set or overwrite the visited site cookie\n // extending by a year each time a user visits\n setVisitedSiteCookie(userIdentifier);\n setPersonCookie(userIdentifier);\n\n if (canUseDom()) {\n const queryString = overrideQueryString || window.location.search;\n\n let queryParams;\n if (!overrideQueryString && typeof getState === 'function') {\n // connected-react-router context with no override; select from provided store state\n queryParams = routerSelectors.getQueryParams(getState());\n } else {\n // Use override or window querystring, and reduce search params to a key-value object\n queryParams = Object.fromEntries(new URLSearchParams(queryString).entries());\n }\n\n if (urlContainsMarketingParams(queryParams)) {\n setPublisherCookie(queryString);\n const marketingUrlParams = getMarketingUrlParams({ queryParams });\n dispatch(\n identityActions.trackUserCameFromMarketingSource({\n context: marketingUrlParams,\n }),\n );\n onMarketingCampaignVisit?.(marketingUrlParams);\n }\n }\n\n return null;\n};\n","export const VERTICAL_TAKEOVER_CONTEXT_NAME = 'vertical-takeover';\n","const CACHE_NAME = '__cs__';\n\nconst objGlobal = typeof window !== 'undefined' && window.document && window.document.createElement ? window : {};\n\nobjGlobal[CACHE_NAME] = objGlobal[CACHE_NAME] || {};\nobjGlobal[CACHE_NAME].verticals = objGlobal[CACHE_NAME].verticals || {};\nobjGlobal[CACHE_NAME].envs = objGlobal[CACHE_NAME].envs || {};\n\nexport const cache = objGlobal[CACHE_NAME];\n\nexport function loadRoutes() {\n return cache.routes || [];\n}\n\nexport function hasComponent(name) {\n const vertical = cache.verticals[name];\n return !!vertical;\n}\n\nexport function loadComponent(name) {\n const vertical = cache.verticals[name];\n return vertical ? vertical.Component : undefined;\n}\n\nexport function getEntry(key) {\n if (cache && cache[key]) {\n return cache[key];\n }\n return null;\n}\n\nexport function setEntry(key, value) {\n cache[key] = value;\n return getEntry(key);\n}\n","import type { Context } from 'react';\nimport { createContext } from 'react';\nimport { cache } from '@clearscore-group/lib.helpers.cache';\n\nconst REACT_CONTEXT_CACHE_NAME = '__cs_global_react_context_cache__';\n\nconst getGlobalContextCache = (): { [key: string]: Context } => {\n if (!cache[REACT_CONTEXT_CACHE_NAME]) {\n cache[REACT_CONTEXT_CACHE_NAME] = {};\n }\n return cache[REACT_CONTEXT_CACHE_NAME];\n};\n\nexport const createGlobalContext = (contextName: string, defaultValue: T): Context => {\n const globalContextObject = getGlobalContextCache();\n if (!globalContextObject[contextName]) {\n globalContextObject[contextName] = createContext(defaultValue);\n }\n return globalContextObject[contextName] as Context;\n};\n","function injectCss(src) {\n return new Promise((resolve, reject) => {\n const script = document.createElement('link');\n script.async = true;\n script.rel = 'stylesheet';\n script.href = src;\n script.addEventListener('load', resolve);\n script.addEventListener('error', (error) => reject(new Error(`Error css file. src: ${src}`, { cause: error })));\n script.addEventListener('abort', () => reject(new Error(`CSS loading aborted. src: ${src}`)));\n document.head.appendChild(script);\n });\n}\n\nexport default injectCss;\n","export default (string) => {\n if (string && string.split) {\n return string\n .split(/_|-| /)\n .map((part) => part[0].toUpperCase() + part.substr(1).toLowerCase())\n .join('');\n }\n\n return string;\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar borderRadius = {\n \"rnb-border-radius-circle\": \"50%\",\n \"rnb-border-radius-small\": \"0.25rem\",\n \"rnb-border-radius-medium\": \"0.5rem\",\n \"rnb-border-radius-large\": \"1rem\",\n \"rnb-border-radius-big\": \"1.25rem\"\n};\nvar borderWidth = {\n \"rnb-border-width-thin\": \"1px\",\n \"rnb-border-width-thin-offset\": \"-1px\",\n \"rnb-border-width-default\": \"2px\",\n \"rnb-border-width-thick\": \"4px\"\n};\nconst black = \"#000\";\nconst blackRgb = \"0, 0, 0\";\nconst white = \"#fff\";\nconst whiteRgb = \"255, 255, 255\";\nconst midnight = \"#263648\";\nconst midnightRgb = \"38, 54, 72\";\nconst chill = \"#0f81a3\";\nconst chillRgb = \"15, 129, 163\";\nconst rose = \"#bd2f2f\";\nconst roseRgb = \"189, 47, 47\";\nconst lavender = \"#d27df3\";\nconst lavenderRgb = \"210, 125, 243\";\nconst sand = \"#f69f4d\";\nconst sandRgb = \"246, 159, 77\";\nconst dandelion = \"#e9c627\";\nconst dandelionRgb = \"233, 198, 39\";\nconst moss = \"#add230\";\nconst mossRgb = \"173, 210, 48\";\nconst sea = \"#2cdb7b\";\nconst seaRgb = \"44, 219, 123\";\nconst reef = \"#2bcfc8\";\nconst reefRgb = \"43, 207, 200\";\nconst salvia = \"#9E86E7\";\nconst salviaRgb = \"158, 134, 231\";\nconst sky = \"#49C1E3\";\nconst skyRgb = \"73, 193, 227\";\nconst core = {\n \"rnb-colour-transparent\": \"transparent\",\n \"rnb-colour-black-tint-4\": \"#f5f5f5\",\n \"rnb-colour-black-tint-4-rgb\": \"245, 245, 245\",\n \"rnb-colour-black-alpha-4\": `rgba(${blackRgb}, 0.04)`,\n \"rnb-colour-black-alpha-8\": `rgba(${blackRgb}, 0.08)`,\n \"rnb-colour-black-alpha-16\": `rgba(${blackRgb}, 0.16)`,\n \"rnb-colour-black-alpha-32\": `rgba(${blackRgb}, 0.32)`,\n \"rnb-colour-black-alpha-48\": `rgba(${blackRgb}, 0.48)`,\n \"rnb-colour-black-alpha-64\": `rgba(${blackRgb}, 0.64)`,\n \"rnb-colour-black\": black,\n \"rnb-colour-black-rgb\": blackRgb,\n \"rnb-colour-white-alpha-4\": `rgba(${whiteRgb}, 0.04)`,\n \"rnb-colour-white-alpha-8\": `rgba(${whiteRgb}, 0.08)`,\n \"rnb-colour-white-alpha-16\": `rgba(${whiteRgb}, 0.16)`,\n \"rnb-colour-white-alpha-32\": `rgba(${whiteRgb}, 0.32)`,\n \"rnb-colour-white-alpha-48\": `rgba(${whiteRgb}, 0.48)`,\n \"rnb-colour-white-alpha-64\": `rgba(${whiteRgb}, 0.64)`,\n \"rnb-colour-white-alpha-80\": `rgba(${whiteRgb}, 0.80)`,\n \"rnb-colour-white\": white,\n \"rnb-colour-white-rgb\": whiteRgb,\n \"rnb-colour-midnight-tint-4\": \"#f7f7f8\",\n \"rnb-colour-midnight-tint-4-rgb\": \"247, 247, 248\",\n \"rnb-colour-midnight-tint-8\": \"#eeeff1\",\n \"rnb-colour-midnight-tint-8-rgb\": \"238, 239, 241\",\n \"rnb-colour-midnight-tint-16\": \"#dcdfe2\",\n \"rnb-colour-midnight-tint-16-rgb\": \"220, 223, 226\",\n \"rnb-colour-midnight-tint-32\": \"#b9bec4\",\n \"rnb-colour-midnight-tint-32-rgb\": \"185, 190, 196\",\n \"rnb-colour-midnight-tint-48\": \"#979fa8\",\n \"rnb-colour-midnight-tint-48-rgb\": \"151, 159, 168\",\n \"rnb-colour-midnight-tint-64\": \"#747f8a\",\n \"rnb-colour-midnight-tint-64-rgb\": \"116, 127, 138\",\n \"rnb-colour-midnight-tint-80\": \"#515E6D\",\n \"rnb-colour-midnight-tint-80-rgb\": \"81, 94, 109\",\n \"rnb-colour-midnight-alpha-96\": `rgba(${midnightRgb}, 0.96)`,\n \"rnb-colour-midnight\": midnight,\n \"rnb-colour-midnight-rgb\": midnightRgb,\n \"rnb-colour-midnight-shade-64\": \"#18232e\",\n \"rnb-colour-midnight-shade-64-rgb\": \"24, 35, 46\",\n \"rnb-colour-midnight-shade-48\": \"#121a23\",\n \"rnb-colour-midnight-shade-48-rgb\": \"18, 26, 35\",\n \"rnb-colour-midnight-shade-32\": \"#0c1117\",\n \"rnb-colour-midnight-shade-32-rgb\": \"12, 17, 23\",\n \"rnb-colour-chill-tint-4\": \"#f6fafc\",\n \"rnb-colour-chill-tint-4-rgb\": \"246, 250, 252\",\n \"rnb-colour-chill-tint-8\": \"#ecf5f8\",\n \"rnb-colour-chill-tint-8-rgb\": \"236, 245, 248\",\n \"rnb-colour-chill-tint-16\": \"#d8ebf0\",\n \"rnb-colour-chill-tint-16-rgb\": \"216, 235, 240\",\n \"rnb-colour-chill-tint-32\": \"#b2d6e1\",\n \"rnb-colour-chill-tint-32-rgb\": \"178, 214, 225\",\n \"rnb-colour-chill-tint-64\": \"#66aec5\",\n \"rnb-colour-chill-tint-64-rgb\": \"102, 174, 197\",\n \"rnb-colour-chill\": chill,\n \"rnb-colour-chill-rgb\": chillRgb,\n \"rnb-colour-chill-shade-64\": \"#0a5269\",\n \"rnb-colour-chill-shade-64-rgb\": \"10, 82, 105\",\n \"rnb-colour-chill-shade-48\": \"#073e4e\",\n \"rnb-colour-chill-shade-48-rgb\": \"7, 62, 78\",\n \"rnb-colour-chill-shade-32\": \"#052934\",\n \"rnb-colour-chill-shade-32-rgb\": \"5, 41, 52\",\n \"rnb-colour-rose-tint-8\": \"#faefef\",\n \"rnb-colour-rose-tint-8-rgb\": \"250, 239, 239\",\n \"rnb-colour-rose-tint-16\": \"#f4dede\",\n \"rnb-colour-rose-tint-16-rgb\": \"244, 222, 222\",\n \"rnb-colour-rose-tint-32\": \"#e9bcbc\",\n \"rnb-colour-rose-tint-32-rgb\": \"233, 188, 188\",\n \"rnb-colour-rose-tint-64\": \"#d57a7a\",\n \"rnb-colour-rose-tint-64-rgb\": \"213, 122, 122\",\n \"rnb-colour-rose\": rose,\n \"rnb-colour-rose-rgb\": roseRgb,\n \"rnb-colour-rose-shade-64\": \"#791e1e\",\n \"rnb-colour-rose-shade-64-rgb\": \"121, 30, 30\",\n \"rnb-colour-rose-shade-48\": \"#5b1717\",\n \"rnb-colour-rose-shade-48-rgb\": \"91, 23, 23\",\n \"rnb-colour-rose-shade-32\": \"#3c0f0f\",\n \"rnb-colour-rose-shade-32-rgb\": \"60, 15, 15\",\n \"rnb-colour-lavender-tint-8\": \"#fcf5fe\",\n \"rnb-colour-lavender-tint-8-rgb\": \"252, 245, 254\",\n \"rnb-colour-lavender-tint-16\": \"#f8eafd\",\n \"rnb-colour-lavender-tint-16-rgb\": \"248, 234, 253\",\n \"rnb-colour-lavender-tint-32\": \"#f0d5fb\",\n \"rnb-colour-lavender-tint-32-rgb\": \"240, 213, 251\",\n \"rnb-colour-lavender-tint-64\": \"#e2acf7\",\n \"rnb-colour-lavender-tint-64-rgb\": \"226, 172, 247\",\n \"rnb-colour-lavender\": lavender,\n \"rnb-colour-lavender-rgb\": lavenderRgb,\n \"rnb-colour-lavender-shade-64\": \"#86509b\",\n \"rnb-colour-lavender-shade-64-rgb\": \"134, 80, 155\",\n \"rnb-colour-lavender-shade-48\": \"#653c75\",\n \"rnb-colour-lavender-shade-48-rgb\": \"101, 60, 117\",\n \"rnb-colour-lavender-shade-32\": \"#43284e\",\n \"rnb-colour-lavender-shade-32-rgb\": \"67, 40, 78\",\n \"rnb-colour-sand-tint-8\": \"#fff8f1\",\n \"rnb-colour-sand-tint-8-rgb\": \"255, 248, 241\",\n \"rnb-colour-sand-tint-16\": \"#fdefe2\",\n \"rnb-colour-sand-tint-16-rgb\": \"253, 239, 226\",\n \"rnb-colour-sand-tint-32\": \"#fce0c6\",\n \"rnb-colour-sand-tint-32-rgb\": \"252, 224, 198\",\n \"rnb-colour-sand-tint-64\": \"#f9c28d\",\n \"rnb-colour-sand-tint-64-rgb\": \"249, 194, 141\",\n \"rnb-colour-sand\": sand,\n \"rnb-colour-sand-rgb\": sandRgb,\n \"rnb-colour-sand-shade-64\": \"#9d6631\",\n \"rnb-colour-sand-shade-64-rgb\": \"157, 102, 49\",\n \"rnb-colour-sand-shade-48\": \"#764c25\",\n \"rnb-colour-sand-shade-48-rgb\": \"118, 76, 37\",\n \"rnb-colour-sand-shade-32\": \"#4f3319\",\n \"rnb-colour-sand-shade-32-rgb\": \"79, 51, 25\",\n \"rnb-colour-dandelion-tint-8\": \"#fefbee\",\n \"rnb-colour-dandelion-tint-8-rgb\": \"254, 251, 238\",\n \"rnb-colour-dandelion-tint-16\": \"#fbf6dc\",\n \"rnb-colour-dandelion-tint-16-rgb\": \"251, 246, 220\",\n \"rnb-colour-dandelion-tint-32\": \"#f8ecb9\",\n \"rnb-colour-dandelion-tint-32-rgb\": \"248, 236, 185\",\n \"rnb-colour-dandelion-tint-64\": \"#f1db75\",\n \"rnb-colour-dandelion-tint-64-rgb\": \"41, 219, 117\",\n \"rnb-colour-dandelion\": dandelion,\n \"rnb-colour-dandelion-rgb\": dandelionRgb,\n \"rnb-colour-dandelion-shade-64\": \"#957f19\",\n \"rnb-colour-dandelion-shade-64-rgb\": \"149, 127, 25\",\n \"rnb-colour-dandelion-shade-48\": \"#705f13\",\n \"rnb-colour-dandelion-shade-48-rgb\": \"112, 95, 19\",\n \"rnb-colour-dandelion-shade-32\": \"#4b3f0c\",\n \"rnb-colour-dandelion-shade-32-rgb\": \"75, 63, 12\",\n \"rnb-colour-moss-tint-8\": \"#f8fbee\",\n \"rnb-colour-moss-tint-8-rgb\": \"248, 251, 238\",\n \"rnb-colour-moss-tint-16\": \"#f2f8de\",\n \"rnb-colour-moss-tint-16-rgb\": \"242, 248, 222\",\n \"rnb-colour-moss-tint-32\": \"#e4f0bc\",\n \"rnb-colour-moss-tint-32-rgb\": \"228, 240, 188\",\n \"rnb-colour-moss-tint-64\": \"#cbe27b\",\n \"rnb-colour-moss-tint-64-rgb\": \"203, 226, 123\",\n \"rnb-colour-moss\": moss,\n \"rnb-colour-moss-rgb\": mossRgb,\n \"rnb-colour-moss-shade-64\": \"#6f861f\",\n \"rnb-colour-moss-shade-64-rgb\": \"111, 134, 3\",\n \"rnb-colour-moss-shade-48\": \"#536517\",\n \"rnb-colour-moss-shade-48-rgb\": \"83, 101, 23\",\n \"rnb-colour-moss-shade-32\": \"#37430f\",\n \"rnb-colour-moss-shade-32-rgb\": \"55, 67, 15\",\n \"rnb-colour-sea-tint-8\": \"#effdf5\",\n \"rnb-colour-sea-tint-8-rgb\": \"#239, 253, 245\",\n \"rnb-colour-sea-tint-16\": \"#ddf9ea\",\n \"rnb-colour-sea-tint-16-rgb\": \"221, 249, 234\",\n \"rnb-colour-sea-tint-32\": \"#bbf3d4\",\n \"rnb-colour-sea-tint-32-rgb\": \"187, 243, 212\",\n \"rnb-colour-sea-tint-64\": \"#78e8ab\",\n \"rnb-colour-sea-tint-64-rgb\": \"120, 232, 171\",\n \"rnb-colour-sea\": sea,\n \"rnb-colour-sea-rgb\": seaRgb,\n \"rnb-colour-sea-shade-64\": \"#1c8c4f\",\n \"rnb-colour-sea-shade-64-rgb\": \"28, 140, 79\",\n \"rnb-colour-sea-shade-48\": \"#15693b\",\n \"rnb-colour-sea-shade-48-rgb\": \"21, 105, 59\",\n \"rnb-colour-sea-shade-32\": \"#0e4627\",\n \"rnb-colour-sea-shade-32-rgb\": \"14, 70, 39\",\n \"rnb-colour-reef-tint-8\": \"#effcfb\",\n \"rnb-colour-reef-tint-8-rgb\": \"239, 252, 25\",\n \"rnb-colour-reef-tint-16\": \"#ddf8f7\",\n \"rnb-colour-reef-tint-16-rgb\": \"221, 248, 247\",\n \"rnb-colour-reef-tint-32\": \"#bbf0ee\",\n \"rnb-colour-reef-tint-32-rgb\": \"187, 240, 238\",\n \"rnb-colour-reef-tint-64\": \"#78e1dc\",\n \"rnb-colour-reef-tint-64-rgb\": \"120, 225, 220\",\n \"rnb-colour-reef\": reef,\n \"rnb-colour-reef-rgb\": reefRgb,\n \"rnb-colour-reef-shade-64\": \"#1c8580\",\n \"rnb-colour-reef-shade-64-rgb\": \"28, 133, 128\",\n \"rnb-colour-reef-shade-48\": \"#156460\",\n \"rnb-colour-reef-shade-48-rgb\": \"21, 100, 96\",\n \"rnb-colour-reef-shade-32\": \"#0e4341\",\n \"rnb-colour-reef-shade-32-rgb\": \"14, 67, 65\",\n \"rnb-colour-salvia\": salvia,\n \"rnb-colour-salvia-rgb\": salviaRgb,\n \"rnb-colour-salvia-shade-32\": \"#332B4A\",\n \"rnb-colour-salvia-shade-32-rgb\": \"51, 43, 74\",\n \"rnb-colour-salvia-shade-48\": \"#4C406F\",\n \"rnb-colour-salvia-shade-48-rgb\": \"76, 64, 111\",\n \"rnb-colour-salvia-shade-64\": \"#655694\",\n \"rnb-colour-salvia-shade-64-rgb\": \"101, 86, 148\",\n \"rnb-colour-salvia-tint-8\": \"#F7F5FD\",\n \"rnb-colour-salvia-tint-8-rgb\": \"247, 245, 253\",\n \"rnb-colour-salvia-tint-16\": \"#EFECFB\",\n \"rnb-colour-salvia-tint-16-rgb\": \"239, 236, 251\",\n \"rnb-colour-salvia-tint-32\": \"#E0D8F7\",\n \"rnb-colour-salvia-tint-32-rgb\": \"224, 216, 247\",\n \"rnb-colour-salvia-tint-64\": \"#C1B2F0\",\n \"rnb-colour-salvia-tint-64-rgb\": \"193, 178, 240\",\n \"rnb-colour-sky\": sky,\n \"rnb-colour-sky-rgb\": skyRgb,\n \"rnb-colour-sky-shade-32\": \"#173E49\",\n \"rnb-colour-sky-shade-32-rgb\": \"23, 62, 73\",\n \"rnb-colour-sky-shade-48\": \"#235D6D\",\n \"rnb-colour-sky-shade-48-rgb\": \"35, 93, 109\",\n \"rnb-colour-sky-shade-64\": \"#2F7C91\",\n \"rnb-colour-sky-shade-64-rgb\": \"47, 124, 145\",\n \"rnb-colour-sky-tint-8\": \"#F0FAFD\",\n \"rnb-colour-sky-tint-8-rgb\": \"240, 250, 253\",\n \"rnb-colour-sky-tint-16\": \"#E2F5FB\",\n \"rnb-colour-sky-tint-16-rgb\": \"225, 245, 251\",\n \"rnb-colour-sky-tint-32\": \"#C5EBF6\",\n \"rnb-colour-sky-tint-32-rgb\": \"197, 235, 246\",\n \"rnb-colour-sky-tint-64\": \"#8AD8ED\",\n \"rnb-colour-sky-tint-64-rgb\": \"138, 216, 237\",\n \"rnb-colour-grad-shade-a\": \"#1A2430\",\n \"rnb-colour-grad-shade-a-rgb\": \"26, 36, 48, 1\",\n \"rnb-colour-grad-shade-tint\": \"#3E3837\",\n \"rnb-colour-grad-shade-tint-rgb\": \"62, 56, 55, 1\",\n \"rnb-colour-grad-shade-b\": \"#C46466\",\n \"rnb-colour-grad-shade-b-rgb\": \"196, 100, 102, 1\"\n};\nconst defaults = {\n \"rnb-colour-band-theta\": core[\"rnb-colour-sand-tint-64\"],\n \"rnb-colour-band-alpha\": core[\"rnb-colour-sand-tint-64\"],\n \"rnb-colour-band-beta\": core[\"rnb-colour-dandelion-tint-64\"],\n \"rnb-colour-band-gamma\": core[\"rnb-colour-moss-tint-64\"],\n \"rnb-colour-band-delta\": core[\"rnb-colour-sea-tint-64\"],\n \"rnb-colour-band-epsilon\": core[\"rnb-colour-chill-tint-32\"],\n \"rnb-colour-primary-light\": core[\"rnb-colour-midnight\"],\n \"rnb-colour-primary-inverted-light\": core[\"rnb-colour-white\"],\n \"rnb-colour-primary-light-rgb\": core[\"rnb-colour-midnight-rgb\"],\n \"rnb-colour-secondary-light\": core[\"rnb-colour-midnight-tint-64\"],\n \"rnb-colour-secondary-light-rgb\": core[\"rnb-colour-midnight-tint-64-rgb\"],\n \"rnb-colour-tertiary-light\": core[\"rnb-colour-midnight-tint-48\"],\n \"rnb-colour-tertiary-light-rgb\": core[\"rnb-colour-midnight-tint-48-rgb\"],\n \"rnb-colour-positive-light\": core[\"rnb-colour-sea-shade-64\"],\n \"rnb-colour-positive-light-rgb\": core[\"rnb-colour-sea-shade-64-rgb\"],\n \"rnb-colour-negative-light\": core[\"rnb-colour-rose\"],\n \"rnb-colour-negative-light-rgb\": core[\"rnb-colour-rose-rgb\"],\n \"rnb-colour-attention-light\": core[\"rnb-colour-sand\"],\n \"rnb-colour-attention-light-rgb\": core[\"rnb-colour-sand-rgb\"],\n \"rnb-colour-disabled-light\": core[\"rnb-colour-midnight-tint-16\"],\n \"rnb-colour-disabled-light-rgb\": core[\"rnb-colour-midnight-tint-16-rgb\"],\n \"rnb-colour-action-light\": core[\"rnb-colour-chill\"],\n \"rnb-colour-action-light-rgb\": core[\"rnb-colour-chill-rgb\"],\n \"rnb-colour-action-hover-light\": core[\"rnb-colour-chill-shade-64\"],\n \"rnb-colour-overlay-light\": core[\"rnb-colour-midnight-alpha-96\"],\n \"rnb-colour-background-light\": core[\"rnb-colour-midnight-tint-4\"],\n \"rnb-colour-card-light\": core[\"rnb-colour-white\"],\n \"rnb-colour-cell-light\": core[\"rnb-colour-white\"],\n \"rnb-colour-section-light\": core[\"rnb-colour-white\"],\n \"rnb-colour-header-light\": core[\"rnb-colour-white\"],\n \"rnb-colour-footer-light\": core[\"rnb-colour-midnight-shade-64\"],\n \"rnb-colour-primary-dark\": core[\"rnb-colour-white\"],\n \"rnb-colour-primary-inverted-dark\": core[\"rnb-colour-midnight\"],\n \"rnb-colour-secondary-dark\": core[\"rnb-colour-white-alpha-64\"],\n \"rnb-colour-tertiary-dark\": core[\"rnb-colour-white-alpha-48\"],\n \"rnb-colour-positive-dark\": core[\"rnb-colour-sea\"],\n \"rnb-colour-negative-dark\": core[\"rnb-colour-rose-tint-64\"],\n \"rnb-colour-attention-dark\": core[\"rnb-colour-sand\"],\n \"rnb-colour-disabled-dark\": core[\"rnb-colour-white-alpha-16\"],\n \"rnb-colour-action-dark\": core[\"rnb-colour-white\"],\n \"rnb-colour-action-hover-dark\": core[\"rnb-colour-white-alpha-64\"],\n \"rnb-colour-overlay-dark\": core[\"rnb-colour-black-alpha-64\"],\n \"rnb-colour-background-dark\": core[\"rnb-colour-midnight-shade-32\"],\n \"rnb-colour-card-dark\": core[\"rnb-colour-midnight-shade-64\"],\n \"rnb-colour-cell-dark\": core[\"rnb-colour-white-alpha-4\"],\n \"rnb-colour-section-dark\": core[\"rnb-colour-white-alpha-4\"],\n \"rnb-colour-header-dark\": core[\"rnb-colour-white-alpha-4\"],\n \"rnb-colour-footer-dark\": core[\"rnb-colour-white-alpha-4\"]\n};\nvar colour = __spreadValues(__spreadValues({}, core), defaults);\nvar fontFamily = {\n \"rnb-font-family-cs-clarity\": \"CSClarity, Helvetica Neue, Helvetica, Arial, sans-serif\"\n};\nvar fontSize = {\n \"rnb-font-size-micro\": \"0.625rem\",\n \"rnb-font-size-tiny\": \"0.75rem\",\n \"rnb-font-size-mini\": \"0.875rem\",\n \"rnb-font-size-small\": \"1rem\",\n \"rnb-font-size-medium\": \"1.25rem\",\n \"rnb-font-size-large\": \"1.5rem\",\n \"rnb-font-size-big\": \"2rem\",\n \"rnb-font-size-huge\": \"2.5rem\",\n \"rnb-font-size-massive\": \"2.75rem\",\n \"rnb-font-size-jumbo\": \"4rem\",\n \"rnb-font-size-gargantuan\": \"6rem\",\n \"rnb-font-size-ridiculous\": \"8rem\"\n};\nvar fontWeight = {\n \"rnb-font-weight-thin\": 100,\n \"rnb-font-weight-light\": 200,\n \"rnb-font-weight-book\": 300,\n \"rnb-font-weight-regular\": 400,\n \"rnb-font-weight-medium\": 500,\n \"rnb-font-weight-bold\": 700,\n \"rnb-font-weight-black\": 900\n};\nvar lineHeight = {\n \"rnb-line-height-reset\": \"1\",\n \"rnb-line-height-text\": \"1.5\",\n \"rnb-line-height-heading\": \"1.2\"\n};\nconst small = 375;\nconst phablet = 512;\nconst medium = 768;\nconst large = 1024;\nconst huge = 1408;\nvar mediaQuery = {\n \"rnb-mq-small\": `(min-width: ${small}px)`,\n \"rnb-mq-phablet\": `(min-width: ${phablet}px)`,\n \"rnb-mq-medium\": `(min-width: ${medium}px)`,\n \"rnb-mq-lt-medium\": `(max-width: ${medium - 1}px)`,\n \"rnb-mq-large\": `(min-width: ${large}px)`,\n \"rnb-mq-huge\": `(min-width: ${huge}px)`\n};\nvar shadow = {\n \"rnb-shadow-sea\": `0 0 0 ${colour[\"rnb-colour-transparent\"]}`,\n \"rnb-shadow-earth\": `0 0.125rem 0.25rem ${colour[\"rnb-colour-black-alpha-16\"]}`,\n \"rnb-shadow-hill\": `0 0.25rem 0.5rem ${colour[\"rnb-colour-black-alpha-16\"]}`,\n \"rnb-shadow-mountain\": `0 0.5rem 0.75rem ${colour[\"rnb-colour-black-alpha-16\"]}`,\n \"rnb-shadow-hill-light\": `0 0 0.75rem ${colour[\"rnb-colour-black-alpha-4\"]}, 0 0.4rem 0.75rem ${colour[\"rnb-colour-black-alpha-8\"]}`,\n \"rnb-shadow-earth-top\": `0 -0.125rem 0.25rem ${colour[\"rnb-colour-black-alpha-16\"]}`,\n \"rnb-shadow-hill-top\": `0 -0.25rem 0.5rem ${colour[\"rnb-colour-black-alpha-16\"]}`,\n \"rnb-shadow-mountain-top\": `0 -0.5rem 0.75rem ${colour[\"rnb-colour-black-alpha-16\"]}`\n};\nconst spacing = {\n \"rnb-spacing-none\": \"0rem\",\n \"rnb-spacing-micro\": \"0.25rem\",\n \"rnb-spacing-tiny\": \"0.5rem\",\n \"rnb-spacing-small\": \"0.75rem\",\n \"rnb-spacing-medium\": \"1rem\",\n \"rnb-spacing-large\": \"1.5rem\",\n \"rnb-spacing-big\": \"2rem\",\n \"rnb-spacing-huge\": \"3rem\",\n \"rnb-spacing-super\": \"4rem\",\n \"rnb-spacing-jumbo\": \"8rem\"\n};\nvar spacing$1 = __spreadProps(__spreadValues({}, spacing), {\n \"rnb-spacing-inset-squash-micro\": `${spacing[\"rnb-spacing-micro\"]} ${spacing[\"rnb-spacing-tiny\"]}`,\n \"rnb-spacing-inset-squash-tiny\": `${spacing[\"rnb-spacing-tiny\"]} ${spacing[\"rnb-spacing-small\"]}`,\n \"rnb-spacing-inset-squash-small\": `${spacing[\"rnb-spacing-small\"]} ${spacing[\"rnb-spacing-medium\"]}`,\n \"rnb-spacing-inset-squash-medium\": `${spacing[\"rnb-spacing-medium\"]} ${spacing[\"rnb-spacing-large\"]}`,\n \"rnb-spacing-inset-squeeze-micro\": `${spacing[\"rnb-spacing-tiny\"]} ${spacing[\"rnb-spacing-micro\"]}`,\n \"rnb-spacing-inset-squeeze-tiny\": `${spacing[\"rnb-spacing-small\"]} ${spacing[\"rnb-spacing-tiny\"]}`,\n \"rnb-spacing-inset-squeeze-medium\": `${spacing[\"rnb-spacing-large\"]} ${spacing[\"rnb-spacing-medium\"]}`\n});\nvar timing = {\n \"rnb-timing-fast\": \"250ms\",\n \"rnb-timing-normal\": \"500ms\",\n \"rnb-timing-slow\": \"1000ms\",\n \"rnb-timing-easing-in\": \"cubic-bezier(0.4, 0, 1, 1)\"\n};\nvar zIndex = {\n \"rnb-zindex-dive\": -200,\n \"rnb-zindex-default\": 1,\n \"rnb-zindex-levitate\": 2,\n \"rnb-zindex-rise\": 200,\n \"rnb-zindex-sky\": 400,\n \"rnb-zindex-top\": 600\n};\nvar gradient = {\n \"rnb-gradient-exclusive\": `linear-gradient(-180deg, ${colour[\"rnb-colour-midnight\"]}, ${colour[\"rnb-colour-midnight-shade-64\"]})`\n};\nexport { borderRadius, borderWidth, colour, fontFamily, fontSize, fontWeight, gradient, lineHeight, mediaQuery, shadow, spacing$1 as spacing, timing, zIndex };\n","export const Size = {\n TINY: 'TINY',\n SMALL: 'SMALL',\n MEDIUM: 'MEDIUM',\n LARGE: 'LARGE',\n FULL_WIDTH: 'FULL_WIDTH',\n} as const;\n\nexport const Theme = {\n LIGHT: 'LIGHT',\n DARK: 'DARK',\n} as const;\n","import type { ReactElement, ReactNode } from 'react';\nimport React from 'react';\nimport cx from 'classnames';\nimport toTitleCase from '@clearscore-group/lib.normalize.title-case';\nimport { timing } from '@clearscore/ui.rainbow.tokens';\n\nimport { Size, Theme } from './constants';\nimport styles from './loader.module.css';\n\ninterface LoaderProps {\n size?: keyof typeof Size;\n animationDuration?: string;\n isFullPage?: boolean;\n theme?: keyof typeof Theme;\n children?: ReactNode;\n}\n\nexport interface LoaderExport {\n (props: LoaderProps): ReactElement;\n Size: typeof Size;\n Theme: typeof Theme;\n}\n\nconst Loader: LoaderExport = ({\n size = Size.MEDIUM,\n animationDuration = timing['rnb-timing-normal'],\n isFullPage,\n theme,\n children,\n}): ReactElement => {\n const inlineStyles = {\n animationDuration,\n };\n\n const loader = (\n \n {children || 'loading'}\n \n );\n\n if (isFullPage) {\n return (\n
\n {loader}\n
\n );\n }\n\n return loader;\n};\n\nLoader.Size = Size;\nLoader.Theme = Theme;\n\nexport default Loader;\n","// https://github.com/uupaa/dynamic-import-polyfill\nfunction toAbsoluteURL(url) {\n const a = document.createElement('a');\n a.setAttribute('href', url); // \n return a.cloneNode(false).href; // -> \"http://example.com/hoge.html\"\n}\n\nexport function importModule(url) {\n return new Promise((resolve, reject) => {\n const vector = `$importModule$${Math.random().toString(32).slice(2)}`;\n const script = document.createElement('script');\n const destructor = () => {\n delete window[vector];\n script.onerror = null;\n script.onload = null;\n script.remove();\n URL.revokeObjectURL(script.src);\n script.src = '';\n };\n script.defer = 'defer';\n script.type = 'module';\n script.onerror = () => {\n reject(new Error(`Failed to import: ${url}`));\n destructor();\n };\n script.onload = () => {\n resolve(window[vector]);\n destructor();\n };\n const absURL = toAbsoluteURL(url);\n const loader = `import * as m from \"${absURL}\"; window.${vector} = m;`; // export Module\n // eslint-disable-next-line no-undef\n const blob = new Blob([loader], { type: 'text/javascript' });\n script.src = URL.createObjectURL(blob);\n\n document.head.appendChild(script);\n });\n}\n\nexport default importModule;\n","import React, { useEffect, useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { js as importJs, css as importCss } from '@clearscore-group/lib.helpers.injectors';\nimport { hasComponent, loadComponent } from '@clearscore-group/lib.helpers.cache';\n\n/**\n * Object used to store the current vertical Component and associated store,\n * which is then used maintain the store when navigating within the same vertical\n */\nconst currentStore = {};\n\n/**\n * Component to lazy load a react component from the CDN, requires object which must contain\n * a component and id property\n */\nconst LazyLoadComponent = ({ component, handleError, handleComplete }) => {\n const { name, vertical, component: componentName } = component;\n const portaName = name.split('.').join('--');\n const [loaded, setLoaded] = useState({ Component: null, js: false, css: false });\n const assetPath = vertical || componentName;\n const cssSrc = assetPath.replace('index.js', `${name}.css`);\n\n const loadJs = useCallback(async () => {\n try {\n await importJs(assetPath);\n const Component = loadComponent(name) || loadComponent(portaName);\n setLoaded((prevLoaded) => ({ ...prevLoaded, Component, js: true }));\n } catch (e) {\n handleError(e);\n }\n }, [name, handleError]);\n\n const loadCss = useCallback(async () => {\n try {\n await importCss(cssSrc);\n setLoaded((prevLoaded) => ({ ...prevLoaded, css: true }));\n } catch (e) {\n handleError(e);\n }\n }, [name, handleError]);\n\n useEffect(() => {\n const componentInCache = hasComponent(name) || hasComponent(portaName);\n\n // If not loaded in local state, but loaded in cache, set in local state from cache\n if (!loaded.Component && componentInCache) {\n const Component = loadComponent(name) || loadComponent(portaName);\n setLoaded({ Component, js: true, css: true });\n } else if (!componentInCache) {\n // Otherwise if not cached, let's load up CSS and JS\n loadJs();\n loadCss();\n }\n }, [name, vertical, componentName, loaded.Component, loadJs, loadCss]);\n\n // If not everything loaded, let's return `null`\n if (!Object.values(loaded).every((val) => !!val)) {\n return null;\n }\n\n handleComplete();\n\n return (\n \n );\n};\n\nLazyLoadComponent.propTypes = {\n component: PropTypes.shape({\n routeProps: PropTypes.object.isRequired,\n computedMatch: PropTypes.object.isRequired,\n parentProps: PropTypes.object.isRequired,\n name: PropTypes.string.isRequired,\n vertical: PropTypes.string,\n component: PropTypes.string,\n }),\n handleComplete: PropTypes.func,\n handleError: PropTypes.func,\n};\n\nLazyLoadComponent.defaultProps = {\n component: null,\n handleError: () => {},\n handleComplete: () => {},\n};\n\nexport default LazyLoadComponent;\n","function injectScript(src) {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.async = true;\n script.src = src;\n script.addEventListener('load', resolve);\n script.addEventListener('error', () => reject(new Error(`Error loading script. src: ${src}`)));\n script.addEventListener('abort', () => reject(new Error(`Script loading aborted. src: ${src}`)));\n document.head.appendChild(script);\n });\n}\n\nexport default injectScript;\n","import React, { lazy, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { css } from '@clearscore-group/lib.helpers.injectors';\nimport Loader from '@clearscore/ui.rainbow.loader';\nimport { getCookie } from '@clearscore-group/lib.helpers.cookies';\n\n// needed for chrome 62, edge 17, edge 18\nimport { importModule } from './polyfill/import-module';\nimport LegacyBrowserLazyComponent from './legacy-browser-lazy-component';\n\nconst currentStore = {};\n\n// Placeholder, needed for tests\nlet getLazy = () => () => null;\nif (process.env.MODULE === 'esm') {\n getLazy = (path) => lazy(() => importModule(path).then((module) => ({ default: module.Component })));\n}\n\nconst useLazy = (assetPath) => {\n const lazyComponentStore = React.useRef({}).current;\n if (!lazyComponentStore[assetPath]) {\n lazyComponentStore[assetPath] = getLazy(assetPath.replace('index.js', 'index.mjs').replace('/resources/', '/'));\n }\n return lazyComponentStore[assetPath];\n};\n\nconst EsmComponent = ({ component }) => {\n const { vertical, component: componentName, parentProps, routeProps, computedMatch } = component;\n const assetPath = vertical ?? componentName;\n const Lazy = useLazy(assetPath);\n\n // fetching config causes a rerender of the whole app\n // this checks allows us to wait it out\n // so will show the loading spinner once instead of twice\n if (parentProps.currentMarketFetchStatus?.isPending) {\n return ;\n }\n\n return (\n }>\n \n \n );\n};\n\nEsmComponent.propTypes = {\n component: PropTypes.shape({\n routeProps: PropTypes.object.isRequired,\n computedMatch: PropTypes.object.isRequired,\n parentProps: PropTypes.object.isRequired,\n name: PropTypes.string.isRequired,\n vertical: PropTypes.string,\n component: PropTypes.string,\n esmodules: PropTypes.bool,\n }).isRequired,\n};\n\nconst LazyLoadComponent = ({ component }) => {\n const { vertical, component: componentName, esmodules } = component;\n const assetPath = vertical ?? componentName;\n const hasForcedCjs = getCookie('experiment-esm') === 'development'; // allow us to force cjs verticals for cypress\n const isModernBrowser = process.env.MODULE === 'esm'; // is this porta mjs core build\n const isEsmVertical = isModernBrowser && esmodules && !hasForcedCjs;\n\n useEffect(() => {\n // we need to load the styles which are named like `index.css` because of naming clashes\n // for both modules and nomodules\n // while we are rending esm and cjs together we need to check that the asset path is esm\n if (isEsmVertical) {\n css(`${assetPath.slice(0, assetPath.indexOf('index'))}index.css`.replace('/resources/', '/'));\n }\n }, [assetPath]);\n\n // while we are rending esm and cjs together we need to check that the asset path is esm\n if (isEsmVertical) {\n return ;\n }\n\n return ;\n};\n\nLazyLoadComponent.propTypes = {\n component: PropTypes.shape({\n routeProps: PropTypes.object.isRequired,\n computedMatch: PropTypes.object.isRequired,\n parentProps: PropTypes.object.isRequired,\n name: PropTypes.string.isRequired,\n vertical: PropTypes.string,\n component: PropTypes.string,\n esmodules: PropTypes.bool,\n }).isRequired,\n};\n\nexport default LazyLoadComponent;\n","const ROUTES = 'CS/ROUTES';\n/* eslint-disable import/prefer-default-export */\nexport const ROUTES_REINITIALISE = `${ROUTES}_REINITIALISE`;\n","import * as requestStatuses from '@clearscore-group/lib.constants.request-statuses';\n\nimport { ROUTES_REINITIALISE } from '../types';\n\n/**\n * Route initial state\n * @returns {array}\n */\nconst initialState = {\n current: 'global',\n fetchStatus: requestStatuses.SUCCESS,\n};\n\n/**\n * Routes Domain Reducer\n * @param state\n * @param action\n */\nexport default function routesReducer(state = initialState, { type, payload } = {}) {\n switch (type) {\n case ROUTES_REINITIALISE:\n return {\n ...state,\n current: payload.market,\n };\n default:\n return state;\n }\n}\n","import { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\n/**\n * Returns an object of routes by id\n * @param collection Array\n * @param id String (id or id.key etc)\n */\nconst objectById = (collection, id = 'id') =>\n collection.reduce((state, item) => {\n const key = resolveProp(id, item);\n return {\n ...state,\n [key]: item,\n };\n }, {});\n\n/**\n * Returns a simplified object with an array of ids\n * @param collection\n * @param id\n * @param name\n */\n// eslint-disable-next-line default-param-last\nexport const lookupById = (collection, id = 'id', name) =>\n collection.reduce((state, item) => {\n const reduceState = { ...state };\n if (item[id]) {\n if (Array.isArray(item[id])) {\n item[id].forEach((idvName) => {\n if (!state[idvName]) {\n reduceState[idvName] = {\n id: idvName,\n [name]: [item.id],\n };\n } else {\n reduceState[idvName][name].push(item.id);\n }\n });\n } else if (!state[item[id]]) {\n reduceState[item[id]] = {\n id: item[id],\n [name]: [item.id],\n };\n } else {\n reduceState[item[id]][name].push(item.id);\n }\n }\n return reduceState;\n }, {});\n\nexport default objectById;\n","export default (routes, accountIDVStatus) => {\n const routeHasVisibility = ({ visibility }) =>\n (Array.isArray(visibility) && visibility.includes(accountIDVStatus)) || !visibility || !accountIDVStatus;\n\n return routes.filter((route) => routeHasVisibility(route));\n};\n","import { loadRoutes } from '@clearscore-group/lib.helpers.cache';\nimport objectById from '@clearscore-group/lib.helpers.state-normalise';\nimport * as requestStatuses from '@clearscore-group/lib.constants.request-statuses';\nimport * as sessionTypes from '@clearscore-group/lib.constants.session-action-types';\n\nimport { ROUTES_REINITIALISE } from '../types';\nimport filterRoutesByStatus from './lib/filterRoutesByStatus';\n\n/**\n * Normalise routes by id\n * @param routes\n * @return {{byId, allIds: Array}}\n */\nfunction normaliseById(routes) {\n const byId = objectById(routes);\n const allIds = Object.keys(byId);\n\n return {\n status: requestStatuses.INITIAL,\n byId,\n allIds,\n };\n}\n\n/**\n * Route initial state\n * @returns {array}\n */\nconst initialState = normaliseById(loadRoutes());\n\n/**\n * Routes Reducer\n * @param state\n * @param action\n */\nexport default function routesReducer(state = initialState, action = {}) {\n switch (action.type) {\n case sessionTypes.TIMEOUT_SUCCESS:\n case sessionTypes.LOGOUT_SUBMIT:\n case ROUTES_REINITIALISE:\n if (action && action.payload && action.payload.routes) {\n const { routes, accountIDVStatus } = action.payload;\n return {\n ...normaliseById([...loadRoutes(), ...filterRoutesByStatus(routes, accountIDVStatus)]),\n status: requestStatuses.SUCCESS,\n };\n }\n return {\n ...state,\n status: requestStatuses.SUCCESS,\n };\n default:\n return state;\n }\n}\n","import { loadRoutes } from '@clearscore-group/lib.helpers.cache';\nimport { lookupById } from '@clearscore-group/lib.helpers.state-normalise';\nimport * as requestStatuses from '@clearscore-group/lib.constants.request-statuses';\nimport * as sessionTypes from '@clearscore-group/lib.constants.session-action-types';\n\nimport { ROUTES_REINITIALISE } from '../types';\nimport filterRoutesByStatus from './lib/filterRoutesByStatus';\n\n/**\n * Normalise routes by categories\n * @param routes\n * @return {{byId, allIds: Array}}\n */\nfunction normaliseCategories(routes) {\n const byId = lookupById(routes, 'category', 'routes');\n const allIds = Object.keys(byId);\n\n return {\n status: requestStatuses.SUCCESS,\n byId,\n allIds,\n };\n}\n\n/**\n * Route initial state\n * @returns {array}\n */\nconst initialState = normaliseCategories(loadRoutes());\n\n/**\n * Routes Reducer\n * @param state\n * @param action\n */\nexport default function routesReducer(state = initialState, action = {}) {\n switch (action.type) {\n case sessionTypes.TIMEOUT_SUCCESS:\n case sessionTypes.LOGOUT_SUBMIT:\n case ROUTES_REINITIALISE: {\n const { routes, accountIDVStatus } = action.payload || {};\n\n if (routes) {\n return {\n ...normaliseCategories([...loadRoutes(), ...filterRoutesByStatus(routes, accountIDVStatus)]),\n status: requestStatuses.SUCCESS,\n };\n }\n\n return {\n ...state,\n status: requestStatuses.SUCCESS,\n };\n }\n\n default:\n return state;\n }\n}\n","import { loadRoutes } from '@clearscore-group/lib.helpers.cache';\nimport { lookupById } from '@clearscore-group/lib.helpers.state-normalise';\nimport * as requestStatuses from '@clearscore-group/lib.constants.request-statuses';\nimport * as sessionTypes from '@clearscore-group/lib.constants.session-action-types';\n\nimport { ROUTES_REINITIALISE } from '../types';\nimport filterRoutesByStatus from './lib/filterRoutesByStatus';\n\n/**\n * Normalise routes by templates\n * @param routes\n * @return {{byId, allIds: Array}}\n */\nfunction normaliseTemplates(routes) {\n const byId = lookupById(routes, 'template', 'routes');\n const allIds = Object.keys(byId);\n\n return {\n status: requestStatuses.SUCCESS,\n byId,\n allIds,\n };\n}\n\n/**\n * Route initial state\n * @returns {array}\n */\nconst initialState = normaliseTemplates(loadRoutes());\n\n/**\n * Routes Reducer\n * @param state\n * @param action\n */\nexport default function routesReducer(state = initialState, action = {}) {\n switch (action.type) {\n case sessionTypes.TIMEOUT_SUCCESS:\n case sessionTypes.LOGOUT_SUBMIT:\n case ROUTES_REINITIALISE:\n if (action && action.payload && action.payload.routes) {\n const { routes, accountIDVStatus } = action.payload;\n\n return {\n ...normaliseTemplates([...loadRoutes(), ...filterRoutesByStatus(routes, accountIDVStatus)]),\n status: requestStatuses.SUCCESS,\n };\n }\n return {\n ...state,\n status: requestStatuses.SUCCESS,\n };\n default:\n return state;\n }\n}\n","import { loadRoutes } from '@clearscore-group/lib.helpers.cache';\nimport { lookupById } from '@clearscore-group/lib.helpers.state-normalise';\nimport * as requestStatuses from '@clearscore-group/lib.constants.request-statuses';\nimport * as sessionTypes from '@clearscore-group/lib.constants.session-action-types';\n\nimport { ROUTES_REINITIALISE } from '../types';\nimport filterRoutesByStatus from './lib/filterRoutesByStatus';\n\n/**\n * Normalise routes by status\n * @param routes\n * @return {{byId, allIds: Array}}\n */\nfunction normaliseStatus(routes) {\n const byId = lookupById(routes, 'idvStatus', 'routes');\n const allIds = Object.keys(byId);\n\n return {\n status: requestStatuses.INITIAL,\n byId,\n allIds,\n };\n}\n\n/**\n * Route initial state\n * @returns {array}\n */\nconst initialState = normaliseStatus(loadRoutes());\n\n/**\n * Routes Reducer\n * @param state\n * @param action\n */\nexport default function routesReducer(state = initialState, action = {}) {\n switch (action.type) {\n case sessionTypes.TIMEOUT_SUCCESS:\n case sessionTypes.LOGOUT_SUBMIT:\n case ROUTES_REINITIALISE:\n if (action && action.payload && action.payload.routes) {\n const { routes, accountIDVStatus } = action.payload;\n\n return {\n ...normaliseStatus([...loadRoutes(), ...filterRoutesByStatus(routes, accountIDVStatus)]),\n status: requestStatuses.SUCCESS,\n };\n }\n return {\n ...state,\n status: requestStatuses.SUCCESS,\n };\n default:\n return state;\n }\n}\n","import domainImport from './routes.domain';\nimport byId from './routes.byId';\nimport byCategory from './routes.byCategory';\nimport byTemplate from './routes.byTemplate';\nimport byStage from './routes.byStage';\nimport segments from './routes.segmentation';\n\nexport const domain = domainImport;\nexport const entities = {\n routes: byId,\n routeCategories: byCategory,\n routeTemplate: byTemplate,\n routeStages: byStage,\n routeSegments: segments,\n};\n","import * as requestStatuses from '@clearscore-group/lib.constants.request-statuses';\nimport * as sessionTypes from '@clearscore-group/lib.constants.session-action-types';\n\nimport { ROUTES_REINITIALISE } from '../types';\n\n/**\n * Route segmentation Reducer\n * @param state\n * @param action\n */\nexport default function routesSegmentation(state = {}, action = {}) {\n switch (action.type) {\n case sessionTypes.TIMEOUT_SUCCESS:\n case sessionTypes.LOGOUT_SUBMIT:\n case ROUTES_REINITIALISE:\n if (action?.payload?.segmentation) {\n const { segmentation } = action.payload;\n\n return {\n segmentation,\n status: requestStatuses.SUCCESS,\n };\n }\n return {\n segmentation: { groups: [] },\n status: requestStatuses.SUCCESS,\n };\n default:\n return state;\n }\n}\n","export const PROFILE_FETCH = 'CS/PROFILE_FETCH';\nexport const PROFILE_FETCH_SUCCESS = `CS/PROFILE_FETCH_SUCCESS`;\nexport const PROFILE_FETCH_ERROR = `CS/PROFILE_FETCH_ERROR`;\n\nexport const PROFILE_SAVE = 'CS/PROFILE_SAVE';\nexport const PROFILE_SAVE_SUCCESS = `CS/PROFILE_SAVE_SUCCESS`;\nexport const PROFILE_SAVE_ERROR = `CS/PROFILE_SAVE_ERROR`;\n\nexport const PROFILE_REMOVE = 'CS/PROFILE_REMOVE';\nexport const PROFILE_REMOVE_SUCCESS = `CS/PROFILE_REMOVE_SUCCESS`;\nexport const PROFILE_REMOVE_ERROR = `CS/PROFILE_REMOVE_ERROR`;\n\nexport const PROFILE_ERASE = 'CS/PROFILE_ERASE';\nexport const PROFILE_ERASE_SUCCESS = `CS/PROFILE_ERASE_SUCCESS`;\nexport const PROFILE_ERASE_ERROR = `CS/PROFILE_ERASE_ERROR`;\n\nexport const PROFILE_FETCH_REPORT_ADDRESSES = 'CS/PROFILE_FETCH_REPORT_ADDRESSES';\nexport const PROFILE_FETCH_REPORT_ADDRESSES_SUCCESS = `CS/PROFILE_FETCH_REPORT_ADDRESSES_SUCCESS`;\nexport const PROFILE_FETCH_REPORT_ADDRESSES_ERROR = `CS/PROFILE_FETCH_REPORT_ADDRESSES_ERROR`;\n\nexport const PROFILE_SAVE_CURRENT_ADDRESS = 'CS/PROFILE_SAVE_CURRENT_ADDRESS';\nexport const PROFILE_SAVE_CURRENT_ADDRESS_SUCCESS = `CS/PROFILE_SAVE_CURRENT_ADDRESS_SUCCESS`;\nexport const PROFILE_SAVE_CURRENT_ADDRESS_ERROR = `CS/PROFILE_SAVE_CURRENT_ADDRESS_ERROR`;\n\nexport const PROFILE_SEND_USER_DATA = 'CS/PROFILE_SEND_USER_DATA';\nexport const PROFILE_SEND_USER_DATA_SUCCESS = `CS/PROFILE_SEND_USER_DATA_SUCCESS`;\nexport const PROFILE_SEND_USER_DATA_ERROR = `CS/PROFILE_SEND_USER_DATA_ERROR`;\n\nexport const PROFILE_SEND_USER_DATA_UNVERIFIED_EMAIL = 'CS/PROFILE_SEND_USER_DATA_UNVERIFIED_EMAIL';\n\nexport const PROFILE_RESEND_EMAIL_VERIFICATION = 'CS/PROFILE_RESEND_EMAIL_VERIFICATION';\nexport const PROFILE_RESEND_EMAIL_VERIFICATION_SUCCESS = `CS/PROFILE_RESEND_EMAIL_VERIFICATION_SUCCESS`;\nexport const PROFILE_RESEND_EMAIL_VERIFICATION_ERROR = `CS/PROFILE_RESEND_EMAIL_VERIFICATION_ERROR`;\n\nexport const PROFILE_MKTG_PREF_FETCH = 'CS/PROFILE_MKTG_PREF_FETCH';\nexport const PROFILE_MKTG_PREF_FETCH_SUCCESS = `CS/PROFILE_MKTG_PREF_FETCH_SUCCESS`;\nexport const PROFILE_MKTG_PREF_FETCH_ERROR = `CS/PROFILE_MKTG_PREF_FETCH_ERROR`;\n\nexport const PROFILE_MKTG_PREF_SAVE = 'CS/PROFILE_MKTG_PREF_SAVE';\nexport const PROFILE_MKTG_PREF_SAVE_SUCCESS = `CS/PROFILE_MKTG_PREF_SAVE_SUCCESS`;\nexport const PROFILE_MKTG_PREF_SAVE_ERROR = `CS/PROFILE_MKTG_PREF_SAVE_ERROR`;\n\nexport const PROFILE_SAVE_TERMS = 'CS/PROFILE_SAVE_TERMS';\nexport const PROFILE_SAVE_TERMS_SUCCESS = `CS/PROFILE_SAVE_TERMS_SUCCESS`;\nexport const PROFILE_SAVE_TERMS_ERROR = `CS/PROFILE_SAVE_TERMS_ERROR`;\n","import createAction from '@clearscore-group/lib.helpers.create-action';\nimport createRequestPayload from '@clearscore-group/lib.helpers.create-request-payload';\nimport {\n PROFILE_FETCH,\n PROFILE_FETCH_SUCCESS,\n PROFILE_SAVE,\n PROFILE_REMOVE,\n PROFILE_SAVE_SUCCESS,\n PROFILE_ERASE,\n PROFILE_FETCH_REPORT_ADDRESSES,\n PROFILE_SAVE_CURRENT_ADDRESS,\n PROFILE_SEND_USER_DATA,\n PROFILE_SEND_USER_DATA_UNVERIFIED_EMAIL,\n PROFILE_RESEND_EMAIL_VERIFICATION,\n PROFILE_MKTG_PREF_FETCH,\n PROFILE_MKTG_PREF_SAVE,\n PROFILE_SAVE_TERMS,\n} from '@clearscore-group/lib.constants.profile-action-types';\n\n// PROFILE_FETCH\nexport const fetch = () => createAction(PROFILE_FETCH, createRequestPayload('international', '/profile-service/v2/'));\n\n// PROFILE_FETCH_SUCCESS\n// @todo: this seems to only needed for the angular integration\nexport const fetchSuccess = (profileData) => createAction(PROFILE_FETCH_SUCCESS, profileData);\n\n// PROFILE_SAVE\nexport const save = (profile) =>\n createAction(PROFILE_SAVE, createRequestPayload('international', '/profile-service/v2/', 'patch', profile));\n\nexport const remove = () =>\n createAction(PROFILE_REMOVE, createRequestPayload('caesium', '/accounts/@session.auth.accountId', 'delete'));\n\nexport const erase = () =>\n createAction(PROFILE_ERASE, createRequestPayload('international', '/profile-service/v2/', 'delete'));\n\n// PROFILE_SAVE_SUCCESS\n// @todo: this seems to only needed for the angular integration\nexport const saveSuccess = (profileData) => createAction(PROFILE_SAVE_SUCCESS, profileData);\n\n// PROFILE_FETCH_REPORT_ADDRESSES\nexport const fetchReportAddresses = () =>\n createAction(\n PROFILE_FETCH_REPORT_ADDRESSES,\n createRequestPayload('international', '/profile-service/v2/report/credit-report-address'),\n );\n\n// PROFILE_SAVE_CURRENT_ADDRESS\nexport const saveCurrentAddress = (addressId) =>\n createAction(\n PROFILE_SAVE_CURRENT_ADDRESS,\n createRequestPayload('international', `/profile-service/v2/account/current-address/${addressId}`, 'put'),\n );\n\n// PROFILE_SEND_USER_DATA\nexport const sendUserData = () =>\n createAction(\n PROFILE_SEND_USER_DATA,\n createRequestPayload('international', '/profile-service/v1/send-user-data', 'post'),\n );\n\n// PROFILE_RESEND_EMAIL_VERIFICATION\nexport const resendEmailVerification = ({ email }) =>\n createAction(\n PROFILE_RESEND_EMAIL_VERIFICATION,\n createRequestPayload('international', '/profile-service/v2/resend-email-verification', 'post', { email }),\n );\n\n// PROFILE_SEND_USER_DATA_UNVERIFIED_EMAIL\nexport const sendUserDataUnverifiedEmail = () => createAction(PROFILE_SEND_USER_DATA_UNVERIFIED_EMAIL);\n\nexport const fetchMarketingPreferences = () =>\n createAction(\n PROFILE_MKTG_PREF_FETCH,\n createRequestPayload('international', '/profile-service/v2/marketing-preferences'),\n );\n\nexport const saveMarketingPreferences = (mktgPreferences) =>\n createAction(\n PROFILE_MKTG_PREF_SAVE,\n createRequestPayload('international', '/profile-service/v2/marketing-preferences', 'patch', mktgPreferences),\n );\n\n// this action has been created to not conflict with profile save functionality in other verticals\nexport const saveTerms = (profile) =>\n createAction(PROFILE_SAVE_TERMS, createRequestPayload('international', '/profile-service/v2/', 'patch', profile));\n","import * as requestStatuses from '@clearscore-group/lib.constants.request-statuses';\nimport { types as identityTypes } from '@clearscore-group/lib.redux.identity';\nimport {\n PROFILE_FETCH,\n PROFILE_FETCH_SUCCESS,\n PROFILE_FETCH_ERROR,\n PROFILE_SAVE,\n PROFILE_SAVE_SUCCESS,\n PROFILE_SAVE_ERROR,\n PROFILE_REMOVE,\n PROFILE_REMOVE_SUCCESS,\n PROFILE_REMOVE_ERROR,\n PROFILE_ERASE,\n PROFILE_ERASE_ERROR,\n PROFILE_ERASE_SUCCESS,\n PROFILE_FETCH_REPORT_ADDRESSES,\n PROFILE_FETCH_REPORT_ADDRESSES_SUCCESS,\n PROFILE_FETCH_REPORT_ADDRESSES_ERROR,\n PROFILE_SAVE_CURRENT_ADDRESS,\n PROFILE_SAVE_CURRENT_ADDRESS_SUCCESS,\n PROFILE_SAVE_CURRENT_ADDRESS_ERROR,\n PROFILE_SEND_USER_DATA,\n PROFILE_SEND_USER_DATA_SUCCESS,\n PROFILE_SEND_USER_DATA_ERROR,\n PROFILE_RESEND_EMAIL_VERIFICATION,\n PROFILE_RESEND_EMAIL_VERIFICATION_SUCCESS,\n PROFILE_RESEND_EMAIL_VERIFICATION_ERROR,\n PROFILE_MKTG_PREF_FETCH,\n PROFILE_MKTG_PREF_FETCH_SUCCESS,\n PROFILE_MKTG_PREF_FETCH_ERROR,\n PROFILE_MKTG_PREF_SAVE,\n PROFILE_MKTG_PREF_SAVE_SUCCESS,\n PROFILE_MKTG_PREF_SAVE_ERROR,\n PROFILE_SAVE_TERMS,\n PROFILE_SAVE_TERMS_SUCCESS,\n PROFILE_SAVE_TERMS_ERROR,\n} from '@clearscore-group/lib.constants.profile-action-types';\n\nconst initialState = {\n fetchStatus: requestStatuses.INITIAL,\n saveCurrentAddressStatus: requestStatuses.INITIAL,\n reportAddressesFetchStatus: requestStatuses.INITIAL,\n sendUserDataStatus: requestStatuses.INITIAL,\n resendEmailStatus: requestStatuses.INITIAL,\n mktgFetchStatus: requestStatuses.INITIAL,\n mktgSaveStatus: requestStatuses.INITIAL,\n};\n\nconst transformPhoneNumber = (requestData) => ({\n ...requestData,\n ...{\n phoneNumber: requestData.phoneNumber.number,\n phoneCountryCode: requestData.phoneNumber.countryCode,\n phoneType: requestData.phoneNumber.type,\n },\n});\n\nconst transformSaveSuccessRequestData = (requestData) =>\n requestData.phoneNumber && typeof requestData.phoneNumber !== 'string'\n ? transformPhoneNumber(requestData)\n : requestData;\n\nexport default (state = initialState, action = {}) => {\n const { type, payload, requestData } = action;\n\n // N.B phoneNumber property in profile-service GET and PATCH methods isn't consistent\n // 1. .save() action is creating requestData passed from phone-form.container that's matching PATCH method\n // 2. phoneNumber data needs to be transformed back to its original shape provided by profile-service GET method\n const saveSuccessRequestData = requestData && transformSaveSuccessRequestData(requestData);\n\n switch (type) {\n case PROFILE_FETCH:\n return {\n ...state,\n fetchStatus: requestStatuses.PENDING,\n };\n case PROFILE_FETCH_SUCCESS:\n return {\n ...state,\n data: {\n ...payload,\n },\n fetchStatus: requestStatuses.SUCCESS,\n };\n case PROFILE_FETCH_ERROR:\n return {\n ...state,\n fetchStatus: requestStatuses.ERROR,\n };\n case PROFILE_SAVE: {\n const { modified, ...stateWithoutModified } = state;\n return {\n ...stateWithoutModified,\n saveStatus: requestStatuses.PENDING,\n };\n }\n case PROFILE_SAVE_SUCCESS:\n return {\n ...state,\n data: {\n ...state.data,\n ...saveSuccessRequestData,\n },\n modified: payload.modified,\n saveStatus: requestStatuses.SUCCESS,\n };\n case PROFILE_SAVE_ERROR:\n return {\n ...state,\n saveStatus: requestStatuses.ERROR,\n };\n case PROFILE_ERASE:\n case PROFILE_REMOVE:\n return {\n ...state,\n removeStatus: requestStatuses.PENDING,\n };\n case PROFILE_ERASE_SUCCESS:\n case PROFILE_REMOVE_SUCCESS:\n return {\n ...state,\n data: {\n ...state.data,\n ...requestData,\n },\n removeStatus: requestStatuses.SUCCESS,\n };\n case PROFILE_ERASE_ERROR:\n case PROFILE_REMOVE_ERROR:\n return {\n ...state,\n removeStatus: requestStatuses.ERROR,\n };\n case PROFILE_FETCH_REPORT_ADDRESSES:\n return {\n ...state,\n reportAddressesFetchStatus: requestStatuses.PENDING,\n };\n case PROFILE_FETCH_REPORT_ADDRESSES_SUCCESS:\n return {\n ...state,\n reportAddresses: [...Object.values(payload || {})],\n reportAddressesFetchStatus: requestStatuses.SUCCESS,\n };\n case PROFILE_FETCH_REPORT_ADDRESSES_ERROR:\n return {\n ...state,\n reportAddressesFetchStatus: requestStatuses.ERROR,\n };\n case PROFILE_SAVE_CURRENT_ADDRESS:\n return {\n ...state,\n saveCurrentAddressStatus: requestStatuses.PENDING,\n };\n case PROFILE_SAVE_CURRENT_ADDRESS_SUCCESS:\n return {\n ...state,\n data: {\n ...state.data,\n ...requestData,\n },\n saveCurrentAddressStatus: requestStatuses.SUCCESS,\n };\n case PROFILE_SAVE_CURRENT_ADDRESS_ERROR:\n return {\n ...state,\n saveCurrentAddressStatus: requestStatuses.ERROR,\n };\n case PROFILE_SEND_USER_DATA:\n return {\n ...state,\n sendUserDataStatus: requestStatuses.PENDING,\n };\n case PROFILE_SEND_USER_DATA_SUCCESS:\n return {\n ...state,\n sendUserDataStatus: requestStatuses.SUCCESS,\n };\n case PROFILE_SEND_USER_DATA_ERROR:\n return {\n ...state,\n sendUserDataStatus: requestStatuses.ERROR,\n };\n case PROFILE_RESEND_EMAIL_VERIFICATION:\n return {\n ...state,\n resendEmailStatus: requestStatuses.PENDING,\n };\n case PROFILE_RESEND_EMAIL_VERIFICATION_SUCCESS:\n return {\n ...state,\n resendEmailStatus: requestStatuses.SUCCESS,\n };\n case PROFILE_RESEND_EMAIL_VERIFICATION_ERROR:\n return {\n ...state,\n resendEmailStatus: requestStatuses.ERROR,\n };\n case PROFILE_MKTG_PREF_FETCH:\n return {\n ...state,\n mktgFetchStatus: requestStatuses.PENDING,\n };\n case PROFILE_MKTG_PREF_FETCH_SUCCESS:\n return {\n ...state,\n mktg: {\n ...state.mktg,\n ...payload,\n },\n mktgFetchStatus: requestStatuses.SUCCESS,\n };\n case PROFILE_MKTG_PREF_FETCH_ERROR:\n return {\n ...state,\n mktgFetchStatus: requestStatuses.ERROR,\n };\n case PROFILE_MKTG_PREF_SAVE:\n return {\n ...state,\n mktgSaveStatus: requestStatuses.PENDING,\n };\n case PROFILE_MKTG_PREF_SAVE_SUCCESS:\n return {\n ...state,\n mktg: {\n ...state.mktg,\n ...requestData,\n },\n mktgSaveStatus: requestStatuses.SUCCESS,\n };\n case PROFILE_MKTG_PREF_SAVE_ERROR:\n return {\n ...state,\n mktgSaveStatus: requestStatuses.ERROR,\n };\n case identityTypes.IDENTITY_IDENTIFY_SUCCESS:\n return {\n ...state,\n data: {\n ...state.data,\n accountIDVStatus: payload.accountIDVStatus,\n },\n };\n case PROFILE_SAVE_TERMS: {\n const { modified, ...stateWithoutModified } = state;\n return {\n ...stateWithoutModified,\n termsSaveStatus: requestStatuses.PENDING,\n };\n }\n case PROFILE_SAVE_TERMS_SUCCESS:\n return {\n ...state,\n data: {\n ...state.data,\n ...saveSuccessRequestData,\n },\n modified: payload.modified,\n termsSaveStatus: requestStatuses.SUCCESS,\n };\n case PROFILE_SAVE_TERMS_ERROR:\n return {\n ...state,\n termsSaveStatus: requestStatuses.ERROR,\n };\n default:\n return state;\n }\n};\n","/* eslint-disable import/prefer-default-export */\nimport profileDomain from './profile.domain';\n\nexport const domain = profileDomain;\n","import { AU, GB, ZA, CA, NZ } from '@clearscore-group/lib.config.i18n';\n\nfunction formatAddressParts(addressParts) {\n return addressParts.filter(Boolean).join(', ');\n}\n\nconst isBuildingNumberWithinBuildingName = (buildingNumber, buildingName) => {\n if (!buildingName) return false;\n\n const regex = /(\\d+)/g;\n const numbersInName = buildingName.match(regex);\n\n if (!numbersInName) return false;\n\n const isNumberInName = numbersInName.find((numberInName) => numberInName === buildingNumber);\n\n return !!isNumberInName;\n};\n\nexport function formatAddress(address, market) {\n const flatOrAbodeNumber = address.flatNumber || address.abodeNumber;\n let addressLine1;\n if (flatOrAbodeNumber) {\n if (isBuildingNumberWithinBuildingName(address.buildingNumber, address.buildingName)) {\n addressLine1 = formatAddressParts([flatOrAbodeNumber, address.buildingName]);\n } else {\n addressLine1 = formatAddressParts([flatOrAbodeNumber, address.buildingName, address.buildingNumber]);\n }\n } else if (isBuildingNumberWithinBuildingName(address.buildingNumber, address.buildingName)) {\n addressLine1 = formatAddressParts([address.buildingName]);\n } else {\n addressLine1 = formatAddressParts([address.buildingNumber, address.buildingName]);\n }\n const streetOrRoad = address.street || address.road;\n const townOrCity = address.town || address.city;\n const countyOrState = address.county || address.state;\n const postcodeOrPincode = address.postcode || address.pinCode;\n\n switch (market) {\n case AU: {\n const noCommasParts = [address.city, address.state, address.postalCode || address.postcode]\n .filter(Boolean)\n .join(' ');\n if (address.flatNumber || address.buildingNumber || address.street) {\n return formatAddressParts([address.flatNumber, address.buildingNumber, address.street, noCommasParts]);\n }\n return formatAddressParts([address.addressLine1, address.addressLine2, noCommasParts]);\n }\n case NZ: {\n const noCommasParts = [address.city, address.state, address.postalCode || address.postcode]\n .filter(Boolean)\n .join(' ');\n if (address.flatNumber || address.buildingNumber || address.street) {\n return formatAddressParts([address.flatNumber, address.buildingNumber, address.street, noCommasParts]);\n }\n return formatAddressParts([address.addressLine1, address.addressLine2, noCommasParts]);\n }\n\n case ZA:\n return formatAddressParts([\n address.flatNumber,\n address.buildingNumber,\n address.buildingName,\n streetOrRoad,\n townOrCity,\n countyOrState,\n postcodeOrPincode,\n ]);\n\n case CA:\n return formatAddressParts([\n address.flatNumber,\n address.buildingNumber,\n address.addressLine1,\n streetOrRoad,\n townOrCity,\n countyOrState,\n address.zipCode,\n postcodeOrPincode,\n ]);\n case GB:\n default:\n return formatAddressParts([addressLine1, streetOrRoad, townOrCity, countyOrState, postcodeOrPincode]);\n }\n}\n\nexport default function normalizeAddress(value) {\n if (!value) {\n return value;\n }\n\n const regex = /[A-Za-z0-9'.\\-\\s'/,]*/g;\n return value.match(regex).join('');\n}\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\nimport { formatAddress } from '@clearscore-group/lib.normalize.address';\nimport { selectors as marketSelectors } from '@clearscore-group/lib.redux.market';\n\nconst year = 365;\nconst day = 24;\nconst hour = 60;\nconst minute = 60;\nconst second = 1000;\nconst millisInYear = second * minute * hour * day * year;\n\nconst getAccountId = (state) => resolveProp('profile.data.accountId', state);\nconst getUuid = (state) => resolveProp('profile.data.uuid', state);\nconst getEmail = (state) => resolveProp('profile.data.email', state);\nconst getEmailVerified = (state) => resolveProp('profile.data.emailVerified', state);\nconst getFirstName = (state) => resolveProp('profile.data.firstName', state);\nconst getMiddleNames = (state) => resolveProp('profile.data.middleNames', state);\nconst getLastName = (state) => resolveProp('profile.data.lastName', state);\nconst getDOB = (state) => {\n const dob = resolveProp('profile.data.dob', state) || '';\n return dob.replace(/^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/, '$3-$2-$1');\n};\nconst getAddress = (state) => resolveProp('profile.data.address', state) || {};\nconst getAddressId = (state) => resolveProp('profile.data.address.addressId', state) || {};\nconst getAddressBuildingName = (state) => resolveProp('profile.data.address.buildingName', state);\nconst getAddressFlatNumber = (state) => resolveProp('profile.data.address.flatNumber', state);\nconst getAddressRoad = (state) => resolveProp('profile.data.address.road', state);\nconst getAddressPinCode = (state) => resolveProp('profile.data.address.pinCode', state);\nconst getAddressCity = (state) => resolveProp('profile.data.address.city', state);\nconst getAddressState = (state) => resolveProp('profile.data.address.state', state);\nconst getAddressCurrent = (state) => resolveProp('profile.data.address.currentAddress', state);\nconst getPreviousAddresses = (state) => resolveProp('profile.data.previousAddresses', state) || [];\nconst getPhoneNumber = (state) => resolveProp('profile.data.phoneNumber', state);\nconst getPhoneCountryCode = (state) => resolveProp('profile.data.phoneCountryCode', state);\nconst getPhoneType = (state) => resolveProp('profile.data.phoneType', state);\nconst getPhoneVerified = (state) => resolveProp('profile.data.phoneVerified', state);\nconst getGender = (state) => resolveProp('profile.data.gender', state);\nconst getIDDocuments = (state) => resolveProp('profile.data.idDocuments', state);\nconst getEmployerName = (state) => resolveProp('profile.data.employerName', state);\nconst getMonthlyIncome = (state) => resolveProp('profile.data.income.amount', state);\nconst marketSelector = (state) => marketSelectors.getActiveMarket(state);\n\nexport default createSelector(\n getAccountId,\n getUuid,\n getEmail,\n getEmailVerified,\n getFirstName,\n getMiddleNames,\n getLastName,\n getDOB,\n getAddress,\n getAddressId,\n getAddressBuildingName,\n getAddressFlatNumber,\n getAddressRoad,\n getAddressPinCode,\n getAddressCity,\n getAddressState,\n getAddressCurrent,\n getPreviousAddresses,\n getPhoneNumber,\n getPhoneCountryCode,\n getPhoneType,\n getPhoneVerified,\n getGender,\n getIDDocuments,\n getEmployerName,\n getMonthlyIncome,\n marketSelector,\n (\n accountId,\n uuid,\n email,\n emailVerified,\n firstName,\n middleNames,\n lastName,\n dob,\n address,\n addressId,\n addressBuildingName,\n addressFlatNumber,\n addressRoad,\n addressPinCode,\n addressCity,\n addressState,\n addressCurrent,\n previousAddresses,\n phoneNumber,\n phoneCountryCode,\n phoneType,\n phoneVerified,\n gender,\n idDocuments,\n employerName,\n monthlyIncome,\n market,\n ) => {\n // dob formatted as yyy-mm-dd within selector. happy days.\n const ageInYears = (new Date() - new Date(dob)) / millisInYear;\n const age = Math.floor(ageInYears);\n const pan = ((idDocuments || []).find(({ type }) => type === 'PAN') || {}).value;\n const addressLineOne =\n addressCurrent || [addressFlatNumber, addressBuildingName, addressRoad].filter(Boolean).join(', ');\n\n return {\n accountId,\n uuid,\n email,\n emailVerified,\n firstName,\n middleNames,\n lastName,\n dob,\n age,\n phoneNumber,\n phoneCountryCode,\n phoneType,\n phoneVerified,\n gender,\n pan,\n employerName,\n monthlyIncome,\n address,\n previousAddresses,\n addressLineOne,\n addressCity,\n addressState,\n addressPinCode,\n idDocuments,\n fullName: [firstName, middleNames, lastName].filter(Boolean).join(' '),\n addressId,\n fullAddress: formatAddress(address, market),\n previousFullAddresses: previousAddresses.map((prevAddress) => formatAddress(prevAddress, market)),\n };\n },\n);\n","import { createSelector } from 'reselect';\nimport resolveRequest, { getRequestStatus } from '@clearscore-group/lib.helpers.resolve-request';\n\nconst getFetchStatus = (state) => resolveRequest(state, 'profile.fetchStatus');\nconst getSaveStatus = (state) => resolveRequest(state, 'profile.saveStatus');\nconst getRemoveStatus = (state) => resolveRequest(state, 'profile.removeStatus');\nconst getReportAddressesFetchStatus = (state) => resolveRequest(state, 'profile.reportAddressesFetchStatus');\nconst getSaveCurrentAddressStatus = (state) => resolveRequest(state, 'profile.saveCurrentAddressStatus');\nconst getSendUserDataStatus = (state) => resolveRequest(state, 'profile.sendUserDataStatus');\nconst getResendEmailStatus = (state) => resolveRequest(state, 'profile.resendEmailStatus');\nconst getMarketingFetchStatus = (state) => resolveRequest(state, 'profile.mktgFetchStatus');\nconst getMarketingSaveStatus = (state) => resolveRequest(state, 'profile.mktgSaveStatus');\nconst getTermsSaveStatus = (state) => resolveRequest(state, 'profile.termsSaveStatus');\n\nexport default createSelector(\n getFetchStatus,\n getSaveStatus,\n getRemoveStatus,\n getReportAddressesFetchStatus,\n getSaveCurrentAddressStatus,\n getSendUserDataStatus,\n getResendEmailStatus,\n getMarketingFetchStatus,\n getMarketingSaveStatus,\n getTermsSaveStatus,\n (\n fetchStatus,\n saveStatus,\n removeStatus,\n reportAddressesFetchStatus,\n saveCurrentAddressStatus,\n sendUserDataStatusParam,\n resendEmailStatus,\n mktgFetchStatus,\n mktgSaveStatus,\n termsSaveStatus,\n ) => ({\n fetch: getRequestStatus(fetchStatus),\n save: getRequestStatus(saveStatus),\n remove: getRequestStatus(removeStatus),\n reportAddressesFetch: getRequestStatus(reportAddressesFetchStatus),\n saveCurrentAddress: getRequestStatus(saveCurrentAddressStatus),\n sendUserData: getRequestStatus(sendUserDataStatusParam),\n resendEmail: getRequestStatus(resendEmailStatus),\n mktgFetch: getRequestStatus(mktgFetchStatus),\n mktgSave: getRequestStatus(mktgSaveStatus),\n termsSave: getRequestStatus(termsSaveStatus),\n }),\n);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getUserStatus = (state) => resolveProp('profile.data.userStatus', state);\nconst getAllowSoftSearch = (state) =>\n resolveProp('profile.data.userPreferences.products.allowSoftSearch', state) || false;\nconst getWalkthrough = (state) => resolveProp('profile.data.userPreferences.ftw', state) || {};\nconst getAccountIDVStatus = (state) => resolveProp('profile.data.accountIDVStatus', state);\nconst getFailureReason = (state) => resolveProp('profile.data.failureReason', state);\nconst getEmploymentStatus = (state) => resolveProp('profile.data.employmentStatus', state);\nconst getResidentialStatus = (state) => resolveProp('profile.data.residentialStatus', state);\nconst getScoreBand = (state) => resolveProp('profile.data.userPreferences.scoreBand', state);\nconst getUserNovelty = (state) => resolveProp('profile.data.isNewUser', state);\n\nexport default createSelector(\n getAccountIDVStatus,\n getUserStatus,\n getFailureReason,\n getAllowSoftSearch,\n getWalkthrough,\n getEmploymentStatus,\n getResidentialStatus,\n getScoreBand,\n getUserNovelty,\n (\n accountIDVStatus,\n userStatus,\n failureReason,\n allowSoftSearch,\n walkthrough,\n employmentStatus,\n residentialStatus,\n scoreBand,\n isNewUser,\n ) => ({\n accountIDVStatus,\n userStatus,\n failureReason,\n allowSoftSearch,\n walkthrough,\n employmentStatus,\n residentialStatus,\n scoreBand,\n isNewUser,\n }),\n);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getTncAgreedVersion = (state) => resolveProp('profile.data.tncAgreedVersion', state);\nconst getTncAgreedDate = (state) => resolveProp('profile.data.tncAgreedDate', state) || '';\n\nexport default createSelector(getTncAgreedVersion, getTncAgreedDate, (tncAgreedVersion, tncAgreedDate) => ({\n tncAgreedVersion,\n tncAgreedDate,\n}));\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getMarketingNewsEmailSubscribed = (state) => resolveProp('profile.mktg.newsEmailSubscribed', state);\nconst getMarketingOffersEmailSubscribed = (state) => resolveProp('profile.mktg.offersEmailSubscribed', state);\nconst getMarketingTipsEmailSubscribed = (state) => resolveProp('profile.mktg.tipsEmailSubscribed', state);\nconst getMarketingInfoEmailSubscribed = (state) => resolveProp('profile.mktg.infoEmailSubscribed', state);\nconst getMarketingPreferencesVersion = (state) => resolveProp('profile.data.mktgPreferencesVersion', state);\nconst getMarketingRtcEmailSubscribed = (state) => resolveProp('profile.mktg.rtcEmailSubscribed', state);\nconst getMarketingCoachEmailSubscribed = (state) => resolveProp('profile.mktg.coachEmailSubscribed', state);\nconst getMarketingEmailSubscribed = (state) => resolveProp('profile.mktg.emailSubscribed', state);\n\nexport default createSelector(\n getMarketingNewsEmailSubscribed,\n getMarketingOffersEmailSubscribed,\n getMarketingTipsEmailSubscribed,\n getMarketingInfoEmailSubscribed,\n getMarketingPreferencesVersion,\n getMarketingRtcEmailSubscribed,\n getMarketingCoachEmailSubscribed,\n getMarketingEmailSubscribed,\n (\n newsEmailSubscribed,\n offersEmailSubscribed,\n tipsEmailSubscribed,\n infoEmailSubscribed,\n mktgPreferencesVersion,\n rtcEmailSubscribed,\n coachEmailSubscribed,\n emailSubscribed,\n ) => {\n const preferences = {\n newsEmailSubscribed,\n offersEmailSubscribed,\n tipsEmailSubscribed,\n infoEmailSubscribed,\n mktgPreferencesVersion,\n rtcEmailSubscribed,\n coachEmailSubscribed,\n emailSubscribed,\n };\n\n return preferences;\n },\n);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getBankName = (state) => resolveProp('profile.data.bankName', state) || null;\nconst getAnnualIncome = (state) => resolveProp('profile.data.annualIncome', state) || {};\nconst getIncome = (state) => resolveProp('profile.data.income', state) || {};\n\nexport default createSelector(getBankName, getAnnualIncome, getIncome, (bankName, annualIncome, income) => ({\n bankName,\n annualIncome,\n income,\n}));\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getUserPreferences = (state) => resolveProp('profile.data.userPreferences', state) || {};\n\nexport default createSelector(getUserPreferences, ({ coaching }) => coaching || []);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getUserPreferenceProducts = (state) => resolveProp('profile.data.userPreferences.products', state) || {};\n\nexport default createSelector(getUserPreferenceProducts, (products) => products);\n","import profileGetSimple from './profile.getSimple';\nimport profileGetPredicate from './profile.getPredicate';\nimport profileGetStatus from './profile.getStatus';\nimport profileGetTerms from './profile.getTerms';\nimport profileGetMarketing from './profile.getMarketing';\nimport profileGetFinancial from './profile.getFinancial';\nimport profileGetCoachingProducts from './profile.getCoachingProducts';\nimport profileGetProducts from './profile.getProducts';\nimport profileGetAdditionalQuestionData from './profile.getAdditionalQuestionData';\nimport profileGetRemortgageData from './profile.getRemortgageData';\nimport profileGetReportAddresses from './profile.getReportAddresses';\nimport profileGetDocumentsMeta from './profile.getDocumentsMeta';\nimport profileGetSaveModified from './profile.getSaveModified';\nimport profileIsTwoFactorAuthEnabled from './profile.isTwoFactorAuthEnabled';\nimport profileGetSelfieRequired from './profile.getSelfieRequired';\nimport profileGetUserSettings from './profile.getUserSettings';\n\nexport const getSimple = profileGetSimple;\nexport const getPredicate = profileGetPredicate;\nexport const getStatus = profileGetStatus;\nexport const getTerms = profileGetTerms;\nexport const getMarketing = profileGetMarketing;\nexport const getFinancial = profileGetFinancial;\nexport const getCoachingProducts = profileGetCoachingProducts;\nexport const getProducts = profileGetProducts;\nexport const getAdditionalQuestionData = profileGetAdditionalQuestionData;\nexport const getRemortgageData = profileGetRemortgageData;\nexport const getReportAddresses = profileGetReportAddresses;\nexport const getDocumentsMeta = profileGetDocumentsMeta;\nexport const getSaveModified = profileGetSaveModified;\nexport const isTwoFactorAuthEnabled = profileIsTwoFactorAuthEnabled;\nexport const getSelfieRequired = profileGetSelfieRequired;\nexport const getUserSettings = profileGetUserSettings;\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getAnnualIncome = (state) => resolveProp('profile.data.annualIncome', state);\nconst getEmploymentStatus = (state) => resolveProp('profile.data.employmentStatus', state);\nconst getResidentialStatus = (state) => resolveProp('profile.data.residentialStatus', state);\nconst getAddresses = (state) => {\n const addresses = [resolveProp('profile.data.address', state)];\n const previousAddresses = resolveProp('profile.data.previousAddresses', state);\n if (previousAddresses && previousAddresses.length) addresses.push(...previousAddresses);\n return addresses;\n};\n\nexport default createSelector(\n getAnnualIncome,\n getEmploymentStatus,\n getResidentialStatus,\n getAddresses,\n (annualIncome, employmentStatus, residentialStatus, addresses) => ({\n annualIncome,\n employmentStatus,\n residentialStatus,\n addresses,\n }),\n);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getUserPreferences = (state) => resolveProp('profile.data.userPreferences', state);\n\nexport default createSelector(getUserPreferences, (userPreferences) =>\n userPreferences && userPreferences.remortgages ? userPreferences.remortgages : undefined,\n);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getReportAddresses = (state) => resolveProp('profile.reportAddresses', state);\n\nexport default createSelector(getReportAddresses, (addresses) => addresses);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getDocumentsMeta = (state) => resolveProp('profile.data.documentsMeta', state);\n\nexport default createSelector(getDocumentsMeta, (documentsMeta) => ({\n documentsMeta,\n}));\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getSaveModified = (state) => resolveProp('profile.modified', state);\n\nexport default createSelector(getSaveModified, (modified) => modified);\n","import { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nexport default (state) => resolveProp('profile.data.2faEnabled', state);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getSelfieRequired = (state) => resolveProp('profile.data.idvSelfieRequired', state);\n\nexport default createSelector(getSelfieRequired, (selfieRequired) => selfieRequired);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getUserSettings = (state) => resolveProp('profile.data.userSettings', state);\n\nexport default createSelector(getUserSettings, (userSettings) => userSettings);\n","import * as profileTypes from '@clearscore-group/lib.constants.profile-action-types';\n\nimport * as actionsImport from './actions';\nimport * as constantsImport from './constants';\nimport * as reducersImport from './reducers';\nimport * as selectorsImport from './selectors';\n\nexport const actions = actionsImport;\nexport const constants = constantsImport;\nexport const reducers = reducersImport;\nexport const selectors = selectorsImport;\nexport const types = profileTypes;\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\nimport { selectors as profileSelectors } from '@clearscore-group/lib.redux.profile';\n\nconst getRoutes = (state) => resolveProp('entities.routes.byId', state) || {};\nconst getRouteIdsByCategory = (state, { menu }) =>\n resolveProp(`entities.routeCategories.byId.${menu}.routes`, state) || [];\n\nexport default createSelector(\n getRoutes,\n getRouteIdsByCategory,\n profileSelectors.getStatus,\n (routes, routeIdsByCategory, { accountIDVStatus }) =>\n Object.values(routes).filter(\n ({ id, visibility }) =>\n routeIdsByCategory.includes(id) && (!visibility || visibility.includes(accountIDVStatus)),\n ),\n);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\nimport { selectors as profileSelectors } from '@clearscore-group/lib.redux.profile';\n\nconst routesAll = (state) => resolveProp('entities.routes.allIds', state) || [];\nconst getRoutes = (state) => resolveProp('entities.routes.byId', state) || {};\n\nexport default createSelector(routesAll, getRoutes, profileSelectors.getStatus, (ids, routes, { accountIDVStatus }) =>\n Object.entries(routes)\n .filter(\n ([key, { visibility, isTakeover }]) =>\n ids.includes(key) && !isTakeover && (!visibility || visibility.includes(accountIDVStatus)),\n )\n .reduce((state, [key]) => {\n state.push(routes[key]);\n return state;\n }, []),\n);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst routeStages = (state, stage) => resolveProp(`entities.routeStages.byId.${stage}.routes`, state) || [];\nconst getRoutes = (state) => resolveProp('entities.routes.byId', state) || {};\n\nexport default createSelector(routeStages, getRoutes, (ids, routes) =>\n Object.keys(routes)\n .filter((key) => ids.includes(key))\n .reduce((state, key) => {\n state.push(routes[key]);\n return state;\n }, []),\n);\n","import { createSelector } from 'reselect';\nimport { selectors as profileSelectors } from '@clearscore-group/lib.redux.profile';\n\nimport getRoutesByStage from './routesStagesSelector';\n\nexport const setKbaRoute = (routes) =>\n routes.find((route) => route?.path === window.location.pathname) || routes[0] || {};\n\nconst getRouteByIDVStatus = (state) => {\n const { accountIDVStatus = 'CREATE_ACCOUNT', failureReason } = profileSelectors.getStatus(state);\n\n const routes = getRoutesByStage(state, failureReason || accountIDVStatus);\n\n // it enables to render open banking identification routes with kba status\n // by default a user will still be redirect to /kba from a route without kba status\n if (accountIDVStatus === 'KBA') {\n return setKbaRoute(routes);\n }\n\n return routes[0] || {};\n};\n\nexport default createSelector(getRouteByIDVStatus, (route) => ({\n route,\n}));\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getCurrentPath = (state, props) =>\n resolveProp('location.pathname', props) || resolveProp('router.location.pathname', state) || '';\n\nexport default createSelector(getCurrentPath, (path) => path);\n","import { createSelector } from 'reselect';\nimport resolveRequest from '@clearscore-group/lib.helpers.resolve-request';\n\nconst getActiveMarket = (state) => resolveRequest(state, 'market.activeMarket');\nconst getRoutesMarket = (state) => resolveRequest(state, 'routes.current');\nconst getFetchStatus = (state) => resolveRequest(state, 'market.fetchStatus');\n\nexport default createSelector(\n getActiveMarket,\n getRoutesMarket,\n getFetchStatus,\n (activeMarket, routesMarket, fetchStatus) => activeMarket === routesMarket && fetchStatus === 'success',\n);\n","/*!@license\n * UAParser.js v0.7.28\n * Lightweight JavaScript-based User-Agent string parser\n * https://github.com/faisalman/ua-parser-js\n *\n * Copyright © 2012-2021 Faisal Salman \n * Licensed under MIT License\n */\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '0.7.28',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major', // deprecated\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 255;\n\n\n ///////////\n // Helper\n //////////\n\n\n var util = {\n extend : function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n has : function (str1, str2) {\n return typeof str1 === STR_TYPE ? str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1 : false;\n },\n lowerize : function (str) {\n return str.toLowerCase();\n },\n major : function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g,'').split(\".\")[0] : undefined;\n },\n trim : function (str, len) {\n str = str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n }\n };\n\n\n ///////////////\n // Map helper\n //////////////\n\n\n var mapper = {\n\n rgx : function (ua, arrays) {\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length == 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length == 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n str : function (str, map) {\n\n for (var i in map) {\n // check if array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (util.has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (util.has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n }\n };\n\n\n ///////////////\n // String map\n //////////////\n\n\n var maps = {\n\n browser : {\n // Safari < 3.0\n oldSafari : {\n version : {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n }\n },\n oldEdge : {\n version : {\n '0.1' : '12.',\n '21' : '13.',\n '31' : '14.',\n '39' : '15.',\n '41' : '16.',\n '42' : '17.',\n '44' : '18.'\n }\n }\n },\n\n os : {\n windows : {\n version : {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n }\n }\n }\n };\n\n\n //////////////\n // Regex map\n /////////////\n\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n // breaking change (reserved for next major release):\n ///edge\\/([\\w\\.]+)/i // Old Edge (Trident)\n //], [[VERSION, mapper.str, maps.browser.oldEdge.version], [NAME, 'Edge']], [\n\n // Presto based\n /(opera\\smini)\\/([\\w\\.-]+)/i, // Opera Mini\n /(opera\\s[mobiletab]{3,6})\\b.+version\\/([\\w\\.-]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/\\s]+)([\\w\\.]+)/i, // Opera\n ], [NAME, VERSION], [\n /opios[\\/\\s]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, 'Opera Mini']], [\n /\\sopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, 'Opera']], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant\\s|iemobile|slim)(?:browser)?[\\/\\s]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(ba?idubrowser)[\\/\\s]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie)\\s([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\\/([\\w\\.-]+)/i,\n // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(rekonq|puffin|brave|whale|qqbrowserlite|qq)\\/([\\w\\.]+)/i, // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:[\\s\\/]uc?\\s?browser|(?:juc.+)ucweb)[\\/\\s]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UCBrowser']], [\n /(?:windowswechat)?\\sqbcore\\/([\\w\\.]+)\\b.*(?:windowswechat)?/i // WeChat Desktop for Windows Built-in Browser\n ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[:\\s]([\\w\\.]{1,9})\\b.+like\\sgecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /yabrowser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure Browser'], VERSION], [\n /focus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, 'Firefox Focus']], [\n /opt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, 'Opera Touch']], [\n /coc_coc_browser\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, 'Opera Coast']],\n [/xiaomi\\/miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI Browser']], [\n /fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, 'Firefox']], [\n /(qihu|qhbrowser|qihoobrowser|360browser)/i // 360\n ], [[NAME, '360 Browser']], [\n /(oculus|samsung|sailfish)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 Browser'], VERSION], [ // Oculus/Samsung/Sailfish Browser\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /\\s(electron)\\/([\\w\\.]+)\\ssafari/i, // Electron-based App\n /(tesla)(?:\\sqtcarbrowser|\\/(20[12]\\d\\.[\\w\\.-]+))/i, // Tesla\n /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/\\s]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n ], [NAME, VERSION], [\n /(MetaSr)[\\/\\s]?([\\w\\.]+)/i, // SouGouBrowser\n /(LBBROWSER)/i // LieBao Browser\n ], [NAME], [\n\n // WebView\n /;fbav\\/([\\w\\.]+);/i // Facebook App for iOS & Android with version\n ], [VERSION, [NAME, 'Facebook']], [\n /FBAN\\/FBIOS|FB_IAB\\/FB4A/i // Facebook App for iOS & Android without version\n ], [[NAME, 'Facebook']], [\n /safari\\s(line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(chromium|instagram)[\\/\\s]([\\w\\.-]+)/i // Chromium/Instagram\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+)\\s.*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)|\\s)/i // Chrome Headless\n ], [VERSION, [NAME, 'Chrome Headless']], [\n\n /\\swv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, 'Chrome WebView'], VERSION], [\n\n /droid.+\\sversion\\/([\\w\\.]+)\\b.+(?:mobile\\ssafari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android Browser']], [\n\n /(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.]+)\\s.*mobile\\/\\w+\\s(safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w\\.]+)\\s.*(mobile\\s?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, mapper.str, maps.browser.oldSafari.version]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape)\\/([\\w\\.-]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /ile\\svr;\\srv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, 'Firefox Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([\\w\\.-]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)\\s[\\w\\s\\-]+\\/[\\w\\.]+$/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+)\\s.+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir\n /(links)\\s\\(([\\w\\.]+)/i, // Links\n /(gobrowser)\\/?([\\w\\.]*)/i, // GoBrowser\n /(ice\\s?browser)\\/v?([\\w\\._]+)/i, // ICE Browser\n /(mosaic)[\\/\\s]([\\w\\.]+)/i // Mosaic\n ], [NAME, VERSION]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, util.lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|armv?8e?l?)\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows\\s(ce|mobile);\\sppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, '', util.lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?:64|(?=v(?:[1-7]|[5-7]1)l?|;|eabi))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, util.lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n // Ordered by popularity\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[pt]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus\\s10)/i\n ], [MODEL, [VENDOR, 'Samsung'], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy\\snexus)/i,\n /\\ssamsung[\\s-]([\\w-]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n\n // Apple\n /\\((ip(?:hone|od)[\\s\\w]*);/i // iPod/iPhone\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [\n /\\((ipad);[\\w\\s\\),;-]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+\\s\\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [\n\n // Huawei\n /\\b((?:agr|ags[23]|bah2?|sht?)-a?[lw]\\d{2})/i,\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [\n /d\\/huawei([\\w\\s-]+)[;\\)]/i,\n /\\b(nexus\\s6p|vog-[at]?l\\d\\d|ane-[at]?l[x\\d]\\d|eml-a?l\\d\\da?|lya-[at]?l\\d[\\dc]|clt-a?l\\d\\di?|ele-l\\d\\d)/i,\n /\\b(\\w{2,4}-[atu][ln][01259][019])[;\\)\\s]/i\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\s\\w]+)(?:\\sbuild|\\))/i, // Xiaomi POCO\n /\\b;\\s(\\w+)\\sbuild\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[\\s\\-_]?note?[\\s_]?(?:\\d\\w)?)\\sbuild/i, // Xiaomi Hongmi\n /\\b(redmi[\\s\\-_]?(?:note|k)?[\\w\\s_]+)(?:\\sbuild|\\))/i, // Xiaomi Redmi\n /\\b(mi[\\s\\-_]?(?:a\\d|one|one[\\s_]plus|note lte)?[\\s_]?(?:\\d?\\w?)[\\s_]?(?:plus)?)\\sbuild/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [\n /\\b(mi[\\s\\-_]?(?:pad)(?:[\\w\\s_]+))(?:\\sbuild|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [\n\n // OPPO\n /;\\s(\\w+)\\sbuild.+\\soppo/i,\n /\\s(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /\\svivo\\s(\\w+)(?:\\sbuild|\\))/i,\n /\\s(v[12]\\d{3}\\w?[at])(?:\\sbuild|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\s(rmx[12]\\d{3})(?:\\sbuild|;)/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?:?(\\s4g)?)\\b[\\w\\s]+build\\//i,\n /\\smot(?:orola)?[\\s-](\\w*)/i,\n /((?:moto[\\s\\w\\(\\)]+|xt\\d{3,4}|nexus\\s6)(?=\\sbuild|\\)))/i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [\n /\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3})\\sbuild|\\s3\\.[\\s\\w;-]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [\n /(lm-?f100[nv]?|nexus\\s[45])/i,\n /lg[e;\\s\\/-]+((?!browser|netcast)\\w+)/i,\n /\\blg(\\-?[\\d\\w]+)\\sbuild/i\n ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[\\w\\-\\s]+)/i,\n /lenovo\\s?(s(?:5000|6000)(?:[\\w-]+)|tab(?:[\\s\\w]+)|yt[\\d\\w-]{6}|tb[\\d\\w-]{6})/i // Lenovo tablets\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia\\s\\d+)/i,\n /nokia[\\s_-]?([\\w\\.-]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /droid.+;\\s(pixel\\sc)[\\s)]/i // Google Pixel C\n ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [\n /droid.+;\\s(pixel[\\s\\daxl]{0,6})(?:\\sbuild|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+\\s([c-g]\\d{4}|so[-l]\\w+|xq-a\\w[4-7][12])(?=\\sbuild\\/|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n /sony\\stablet\\s[ps]\\sbuild\\//i,\n /(?:sony)?sgp\\w+(?:\\sbuild\\/|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, 'Sony'], [TYPE, TABLET]], [\n\n // OnePlus\n /\\s(kb2005|in20[12]5|be20[12][59])\\b/i,\n /\\ba000(1)\\sbuild/i, // OnePlus\n /\\boneplus\\s(a\\d{4})[\\s)]/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi)(\\sbuild\\/|\\))/i, // Kindle Fire without Silk\n /(kf[a-z]+)(\\sbuild\\/|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n /(sd|kf)[0349hijorstuw]+(\\sbuild\\/|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, 'Fire Phone'], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [\n\n // BlackBerry\n /\\((playbook);[\\w\\s\\),;-]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10;\\s(\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus\\s7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, 'ASUS'], [TYPE, TABLET]], [\n /\\s(z[es]6[027][01][km][ls]|zenfone\\s\\d\\w?)\\b/i\n ], [MODEL, [VENDOR, 'ASUS'], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus\\s9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[;_\\s-]{1,2}([\\w\\s]+(?=\\)|\\sbuild)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)-(\\w*)/i,\n /(alcatel|geeksphone|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid[x\\d\\.\\s;]+\\s([ab][1-7]\\-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+;\\s(m[1-5]\\snote)\\sbuild/i,\n /\\bmz-([\\w-]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\\s_-]?([\\w-]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp)\\s([\\w\\s]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft);\\s(lumia[\\s\\w]+)/i, // Microsoft Lumia\n /(lenovo)[_\\s-]?([\\w-]+)/i, // Lenovo\n /linux;.+(jolla);/i, // Jolla\n /droid.+;\\s(oppo)\\s?([\\w\\s]+)\\sbuild/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(archos)\\s(gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /\\s(nook)[\\w\\s]+build\\/(\\w+)/i, // Nook\n /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i, // Dell Streak\n /[;\\/]\\s?(le[\\s\\-]+pan)[\\s\\-]+(\\w{1,9})\\sbuild/i, // Le Pan Tablets\n /[;\\/]\\s?(trinity)[\\-\\s]*(t\\d{3})\\sbuild/i, // Trinity Tablets\n /\\b(gigaset)[\\s\\-]+(q\\w{1,9})\\sbuild/i, // Gigaset Tablets\n /\\b(vodafone)\\s([\\w\\s]+)(?:\\)|\\sbuild)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /\\s(surface\\sduo)\\s/i // Surface Duo\n ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, TABLET]], [\n /droid\\s[\\d\\.]+;\\s(fp\\du?)\\sbuild/i\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /\\s(u304aa)\\sbuild/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /sie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /[;\\/]\\s?(rct\\w+)\\sbuild/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /[;\\/\\s](venue[\\d\\s]{2,7})\\sbuild/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /[;\\/]\\s?(q(?:mv|ta)\\w+)\\sbuild/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /[;\\/]\\s(?:barnes[&\\s]+noble\\s|bn[rt])([\\w\\s\\+]*)\\sbuild/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /[;\\/]\\s(tm\\d{3}\\w+)\\sbuild/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /;\\s(k88)\\sbuild/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /;\\s(nx\\d{3}j)\\sbuild/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /[;\\/]\\s?(gen\\d{3})\\sbuild.*49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /[;\\/]\\s?(zur\\d{3})\\sbuild/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /[;\\/]\\s?((zeki)?tb.*\\b)\\sbuild/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /[;\\/]\\s([yr]\\d{2})\\sbuild/i,\n /[;\\/]\\s(dragon[\\-\\s]+touch\\s|dt)(\\w{5})\\sbuild/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /[;\\/]\\s?(ns-?\\w{0,9})\\sbuild/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /[;\\/]\\s?((nxa|Next)-?\\w{0,9})\\sbuild/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /[;\\/]\\s?(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05]))\\sbuild/i\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones\n /[;\\/]\\s?(lvtel\\-)?(v1[12])\\sbuild/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /;\\s(ph-1)\\s/i\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1\n /[;\\/]\\s?(v(100md|700na|7011|917g).*\\b)\\sbuild/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /[;\\/]\\s?(trio[\\s\\w\\-\\.]+)\\sbuild/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /[;\\/]\\s?tu_(1491)\\sbuild/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w\\s]+)\\sbuild/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint)\\s(\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [\n /droid\\s[\\d\\.]+;\\s(cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, 'Zebra'], [TYPE, TABLET]], [\n /droid\\s[\\d\\.]+;\\s(ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, 'Zebra'], [TYPE, MOBILE]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /\\s(ouya)\\s/i, // Ouya\n /(nintendo)\\s([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+;\\s(shield)\\sbuild/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation\\s[345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [\n /[\\s\\(;](xbox(?:\\sone)?(?!;\\sxbox))[\\s\\);]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [\n /(?:linux;\\snetcast.+smarttv|lg\\snetcast\\.tv-201\\d)/i, // LG SmartTV\n ], [[VENDOR, 'LG'], [TYPE, SMARTTV]], [\n /(apple)\\s?tv/i // Apple TV\n ], [VENDOR, [MODEL, 'Apple TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [\n /droid.+aft([\\w])(\\sbuild\\/|\\))/i // Fire TV\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n /hbbtv\\/\\d+\\.\\d+\\.\\d+\\s+\\([\\w\\s]*;\\s*(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [\n /[\\s\\/\\(](android\\s|smart[-\\s]?|opera\\s)tv[;\\)\\s]/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app\\/[\\d\\.]+\\s/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /droid.+;\\s(glass)\\s\\d/i // Google Glass\n ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [\n /droid\\s[\\d\\.]+;\\s(wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, 'Zebra'], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?:\\sqtcarbrowser|\\/20[12]\\d\\.[\\w\\.-]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: build|\\) applewebkit).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?;\\s([^;]+?)(?: build|\\) applewebkit).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\s(tablet|tab)[;\\/]/i, // Unidentifiable Tablet\n /\\s(mobile)(?:[;\\/]|\\ssafari)/i // Unidentifiable Mobile\n ], [[TYPE, util.lowerize]], [\n /(android[\\w\\.\\s\\-]{0,9});.+build/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']], [\n /(phone)/i\n ], [[TYPE, MOBILE]]\n ],\n\n engine : [[\n\n /windows.+\\sedge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, 'EdgeHTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/\\s]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/\\s]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft\\s(windows)\\s(vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows)\\snt\\s6\\.2;\\s(arm)/i, // Windows RT\n /(windows\\sphone(?:\\sos)*)[\\s\\/]?([\\d\\.\\s\\w]*)/i, // Windows Phone\n /(windows\\smobile|windows)[\\s\\/]?([ntce\\d\\.\\s]+\\w)(?!.+xbox)/i\n ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [\n /(win(?=3|9|n)|win\\s9x\\s)([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os\\s([\\w]+)\\slike\\smac|;\\sopera)/i, // iOS\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac\\sos\\sx)\\s?([\\w\\s\\.]*)/i,\n /(macintosh|mac(?=_powerpc)\\s)(?!.+haiku)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Mobile OSes // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS\n /(android|webos|palm\\sos|qnx|bada|rim\\stablet\\sos|meego|sailfish|contiki)[\\/\\s-]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/\\s]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, 'BlackBerry']], [\n /(?:symbian\\s?os|symbos|s60(?=;)|series60)[\\/\\s-]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla.+\\(mobile;.+gecko.+firefox/i // Firefox OS\n ], [[NAME, 'Firefox OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, 'Chromecast']], [\n /(cros)\\s[\\w]+\\s([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Console\n /(nintendo|playstation)\\s([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox);\\s+xbox\\s([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // GNU/Linux based\n /(mint)[\\/\\s\\(\\)]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[;\\s]/i, // Mageia/VectorLinux\n /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?=\\slinux)|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus|raspbian)(?:\\sgnu\\/linux)?(?:\\slinux)?[\\/\\s-]?(?!chrom|package)([\\w\\.-]*)/i,\n // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware\n // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus\n /(hurd|linux)\\s?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu)\\s?([\\w\\.]*)/i, // GNU\n\n // BSD based\n /\\s([frentopc-]{0,4}bsd|dragonfly)\\s?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly\n /(haiku)\\s(\\w+)/i // Haiku\n ], [NAME, VERSION], [\n\n // Other\n /(sunos)\\s?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[\\/\\s-]?([\\w\\.]*)/i, // Solaris\n /(aix)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.])*/i, // AIX\n /(plan\\s9|minix|beos|os\\/2|amigaos|morphos|risc\\sos|openvms|fuchsia)/i, // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia\n /(unix)\\s?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n\n /////////////////\n // Constructor\n ////////////////\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === 'object') {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _ua = ua || ((typeof window !== 'undefined' && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var _rgxmap = extensions ? util.extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var _browser = { name: undefined, version: undefined };\n mapper.rgx.call(_browser, _ua, _rgxmap.browser);\n _browser.major = util.major(_browser.version); // deprecated\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = { architecture: undefined };\n mapper.rgx.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = { vendor: undefined, model: undefined, type: undefined };\n mapper.rgx.call(_device, _ua, _rgxmap.device);\n return _device;\n };\n this.getEngine = function () {\n var _engine = { name: undefined, version: undefined };\n mapper.rgx.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = { name: undefined, version: undefined };\n mapper.rgx.call(_os, _ua, _rgxmap.os);\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? util.trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = {\n NAME : NAME,\n MAJOR : MAJOR, // deprecated\n VERSION : VERSION\n };\n UAParser.CPU = {\n ARCHITECTURE : ARCHITECTURE\n };\n UAParser.DEVICE = {\n MODEL : MODEL,\n VENDOR : VENDOR,\n TYPE : TYPE,\n CONSOLE : CONSOLE,\n MOBILE : MOBILE,\n SMARTTV : SMARTTV,\n TABLET : TABLET,\n WEARABLE: WEARABLE,\n EMBEDDED: EMBEDDED\n };\n UAParser.ENGINE = {\n NAME : NAME,\n VERSION : VERSION\n };\n UAParser.OS = {\n NAME : NAME,\n VERSION : VERSION\n };\n\n ///////////\n // Export\n //////////\n\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === 'function' && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== 'undefined') {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== 'undefined' && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (uastring) {\n parser.setUA(uastring);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n// Save the previous value of the device variable.\nvar previousDevice = window.device;\n\nvar device = {};\n\nvar changeOrientationList = [];\n\n// Add device as a global object.\nwindow.device = device;\n\n// The element.\nvar documentElement = window.document.documentElement;\n\n// The client user agent string.\n// Lowercase, so we can use the more efficient indexOf(), instead of Regex\nvar userAgent = window.navigator.userAgent.toLowerCase();\n\n// Detectable television devices.\nvar television = ['googletv', 'viera', 'smarttv', 'internet.tv', 'netcast', 'nettv', 'appletv', 'boxee', 'kylo', 'roku', 'dlnadoc', 'pov_tv', 'hbbtv', 'ce-html'];\n\n// Main functions\n// --------------\n\ndevice.macos = function () {\n return find('mac');\n};\n\ndevice.ios = function () {\n return device.iphone() || device.ipod() || device.ipad();\n};\n\ndevice.iphone = function () {\n return !device.windows() && find('iphone');\n};\n\ndevice.ipod = function () {\n return find('ipod');\n};\n\ndevice.ipad = function () {\n var iPadOS13Up = navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;\n return find('ipad') || iPadOS13Up;\n};\n\ndevice.android = function () {\n return !device.windows() && find('android');\n};\n\ndevice.androidPhone = function () {\n return device.android() && find('mobile');\n};\n\ndevice.androidTablet = function () {\n return device.android() && !find('mobile');\n};\n\ndevice.blackberry = function () {\n return find('blackberry') || find('bb10');\n};\n\ndevice.blackberryPhone = function () {\n return device.blackberry() && !find('tablet');\n};\n\ndevice.blackberryTablet = function () {\n return device.blackberry() && find('tablet');\n};\n\ndevice.windows = function () {\n return find('windows');\n};\n\ndevice.windowsPhone = function () {\n return device.windows() && find('phone');\n};\n\ndevice.windowsTablet = function () {\n return device.windows() && find('touch') && !device.windowsPhone();\n};\n\ndevice.fxos = function () {\n return (find('(mobile') || find('(tablet')) && find(' rv:');\n};\n\ndevice.fxosPhone = function () {\n return device.fxos() && find('mobile');\n};\n\ndevice.fxosTablet = function () {\n return device.fxos() && find('tablet');\n};\n\ndevice.meego = function () {\n return find('meego');\n};\n\ndevice.cordova = function () {\n return window.cordova && location.protocol === 'file:';\n};\n\ndevice.nodeWebkit = function () {\n return _typeof(window.process) === 'object';\n};\n\ndevice.mobile = function () {\n return device.androidPhone() || device.iphone() || device.ipod() || device.windowsPhone() || device.blackberryPhone() || device.fxosPhone() || device.meego();\n};\n\ndevice.tablet = function () {\n return device.ipad() || device.androidTablet() || device.blackberryTablet() || device.windowsTablet() || device.fxosTablet();\n};\n\ndevice.desktop = function () {\n return !device.tablet() && !device.mobile();\n};\n\ndevice.television = function () {\n var i = 0;\n while (i < television.length) {\n if (find(television[i])) {\n return true;\n }\n i++;\n }\n return false;\n};\n\ndevice.portrait = function () {\n if (screen.orientation && Object.prototype.hasOwnProperty.call(window, 'onorientationchange')) {\n return includes(screen.orientation.type, 'portrait');\n }\n if (device.ios() && Object.prototype.hasOwnProperty.call(window, 'orientation')) {\n return Math.abs(window.orientation) !== 90;\n }\n return window.innerHeight / window.innerWidth > 1;\n};\n\ndevice.landscape = function () {\n if (screen.orientation && Object.prototype.hasOwnProperty.call(window, 'onorientationchange')) {\n return includes(screen.orientation.type, 'landscape');\n }\n if (device.ios() && Object.prototype.hasOwnProperty.call(window, 'orientation')) {\n return Math.abs(window.orientation) === 90;\n }\n return window.innerHeight / window.innerWidth < 1;\n};\n\n// Public Utility Functions\n// ------------------------\n\n// Run device.js in noConflict mode,\n// returning the device variable to its previous owner.\ndevice.noConflict = function () {\n window.device = previousDevice;\n return this;\n};\n\n// Private Utility Functions\n// -------------------------\n\n// Check if element exists\nfunction includes(haystack, needle) {\n return haystack.indexOf(needle) !== -1;\n}\n\n// Simple UA string search\nfunction find(needle) {\n return includes(userAgent, needle);\n}\n\n// Check if documentElement already has a given class.\nfunction hasClass(className) {\n return documentElement.className.match(new RegExp(className, 'i'));\n}\n\n// Add one or more CSS classes to the element.\nfunction addClass(className) {\n var currentClassNames = null;\n if (!hasClass(className)) {\n currentClassNames = documentElement.className.replace(/^\\s+|\\s+$/g, '');\n documentElement.className = currentClassNames + ' ' + className;\n }\n}\n\n// Remove single CSS class from the element.\nfunction removeClass(className) {\n if (hasClass(className)) {\n documentElement.className = documentElement.className.replace(' ' + className, '');\n }\n}\n\n// HTML Element Handling\n// ---------------------\n\n// Insert the appropriate CSS class based on the _user_agent.\n\nif (device.ios()) {\n if (device.ipad()) {\n addClass('ios ipad tablet');\n } else if (device.iphone()) {\n addClass('ios iphone mobile');\n } else if (device.ipod()) {\n addClass('ios ipod mobile');\n }\n} else if (device.macos()) {\n addClass('macos desktop');\n} else if (device.android()) {\n if (device.androidTablet()) {\n addClass('android tablet');\n } else {\n addClass('android mobile');\n }\n} else if (device.blackberry()) {\n if (device.blackberryTablet()) {\n addClass('blackberry tablet');\n } else {\n addClass('blackberry mobile');\n }\n} else if (device.windows()) {\n if (device.windowsTablet()) {\n addClass('windows tablet');\n } else if (device.windowsPhone()) {\n addClass('windows mobile');\n } else {\n addClass('windows desktop');\n }\n} else if (device.fxos()) {\n if (device.fxosTablet()) {\n addClass('fxos tablet');\n } else {\n addClass('fxos mobile');\n }\n} else if (device.meego()) {\n addClass('meego mobile');\n} else if (device.nodeWebkit()) {\n addClass('node-webkit');\n} else if (device.television()) {\n addClass('television');\n} else if (device.desktop()) {\n addClass('desktop');\n}\n\nif (device.cordova()) {\n addClass('cordova');\n}\n\n// Orientation Handling\n// --------------------\n\n// Handle device orientation changes.\nfunction handleOrientation() {\n if (device.landscape()) {\n removeClass('portrait');\n addClass('landscape');\n walkOnChangeOrientationList('landscape');\n } else {\n removeClass('landscape');\n addClass('portrait');\n walkOnChangeOrientationList('portrait');\n }\n setOrientationCache();\n}\n\nfunction walkOnChangeOrientationList(newOrientation) {\n for (var index = 0; index < changeOrientationList.length; index++) {\n changeOrientationList[index](newOrientation);\n }\n}\n\ndevice.onChangeOrientation = function (cb) {\n if (typeof cb == 'function') {\n changeOrientationList.push(cb);\n }\n};\n\n// Detect whether device supports orientationchange event,\n// otherwise fall back to the resize event.\nvar orientationEvent = 'resize';\nif (Object.prototype.hasOwnProperty.call(window, 'onorientationchange')) {\n orientationEvent = 'orientationchange';\n}\n\n// Listen for changes in orientation.\nif (window.addEventListener) {\n window.addEventListener(orientationEvent, handleOrientation, false);\n} else if (window.attachEvent) {\n window.attachEvent(orientationEvent, handleOrientation);\n} else {\n window[orientationEvent] = handleOrientation;\n}\n\nhandleOrientation();\n\n// Public functions to get the current value of type, os, or orientation\n// ---------------------------------------------------------------------\n\nfunction findMatch(arr) {\n for (var i = 0; i < arr.length; i++) {\n if (device[arr[i]]()) {\n return arr[i];\n }\n }\n return 'unknown';\n}\n\ndevice.type = findMatch(['mobile', 'tablet', 'desktop']);\ndevice.os = findMatch(['ios', 'iphone', 'ipad', 'ipod', 'android', 'blackberry', 'macos', 'windows', 'fxos', 'meego', 'television']);\n\nfunction setOrientationCache() {\n device.orientation = findMatch(['portrait', 'landscape']);\n}\n\nsetOrientationCache();\n\nexport default device;","import canUseDom from '@clearscore-group/lib.helpers.can-use-dom';\nimport getEnv from '@clearscore-group/lib.helpers.envs';\nimport UAParser from 'ua-parser-js';\nimport currentDevice from 'current-device';\n\nimport { IOS_WEBVIEW, ANDROID_WEBVIEW, IOS_MOBILE, IOS_TABLET, ANDROID_MOBILE, ANDROID_TABLET } from './lib/constants';\n\nconst browserParsed = new UAParser().getResult();\nconst SERVER = 'server';\nconst NATIVE = 'native';\nconst MOBILE = 'mobile';\nconst WEBVIEW = 'WEBVIEW';\n\nfunction getDevice() {\n if (!canUseDom()) {\n return SERVER;\n }\n\n const deviceLib = currentDevice.noConflict();\n const device = deviceLib.default || deviceLib;\n\n const isWebview = getEnv(WEBVIEW);\n const type = isWebview ? NATIVE : device.type;\n\n if (type === MOBILE) {\n return device.os;\n }\n return `${type}_${device.os}`;\n}\n\nexport const isIOSWebview = () => getDevice() === IOS_WEBVIEW;\nexport const isAndroidWebview = () => getDevice() === ANDROID_WEBVIEW;\n\nexport const isIOSBrowser = () => [IOS_MOBILE, IOS_TABLET].includes(getDevice());\nexport const isAndroidBrowser = () => [ANDROID_MOBILE, ANDROID_TABLET].includes(getDevice());\n\nexport const isDesktop = () => getDevice().includes('desktop');\n\nexport const getBrowser = () => {\n const parser = new UAParser();\n const { browser } = parser.getResult();\n if (!browser.version) {\n // put within conditional so we don't have to update mocks in a tonne of vertical tests\n const ua = parser.getUA();\n if (ua.indexOf('Pingdom.com_bot') > -1) {\n const versionString = ua.replace('Pingdom.com_bot_version_', '').replace('_(http://www.pingdom.com/)', '');\n const [major, minor = 0] = versionString.split('.');\n const version = `${major}.${minor}`;\n return { name: 'pingdom', version };\n }\n return { name: 'unknown', version: 'unknown' };\n }\n\n const [major, minor = 0] = browser.version?.split('.') || ['unknown'];\n const version = `${major}.${minor}`;\n return {\n name: browser.name,\n version,\n };\n};\n\ngetDevice.DEVICE_NAME = `${browserParsed.os.name} ${browserParsed.browser.name}`;\n\nexport * as deviceConstants from './lib/constants';\n\nexport default getDevice;\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n function next() {\n while (env.stack.length) {\n var rec = env.stack.pop();\n try {\n var result = rec.dispose && rec.dispose.call(rec.value);\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n catch (e) {\n fail(e);\n }\n }\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","/**\n * FingerprintJS v3.0.6 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)\n * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.\n *\n * This software contains code from open-source projects:\n * MurmurHash3 by Karan Lyons (https://github.com/karanlyons/murmurHash3.js)\n */\n\nimport { __assign, __awaiter, __generator } from 'tslib';\n\n/*\n * Taken from https://github.com/karanlyons/murmurHash3.js/blob/a33d0723127e2e5415056c455f8aed2451ace208/murmurHash3.js\n */\n//\n// Given two 64bit ints (as an array of two 32bit ints) returns the two\n// added together as a 64bit int (as an array of two 32bit ints).\n//\nfunction x64Add(m, n) {\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\n var o = [0, 0, 0, 0];\n o[3] += m[3] + n[3];\n o[2] += o[3] >>> 16;\n o[3] &= 0xffff;\n o[2] += m[2] + n[2];\n o[1] += o[2] >>> 16;\n o[2] &= 0xffff;\n o[1] += m[1] + n[1];\n o[0] += o[1] >>> 16;\n o[1] &= 0xffff;\n o[0] += m[0] + n[0];\n o[0] &= 0xffff;\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\n}\n//\n// Given two 64bit ints (as an array of two 32bit ints) returns the two\n// multiplied together as a 64bit int (as an array of two 32bit ints).\n//\nfunction x64Multiply(m, n) {\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\n var o = [0, 0, 0, 0];\n o[3] += m[3] * n[3];\n o[2] += o[3] >>> 16;\n o[3] &= 0xffff;\n o[2] += m[2] * n[3];\n o[1] += o[2] >>> 16;\n o[2] &= 0xffff;\n o[2] += m[3] * n[2];\n o[1] += o[2] >>> 16;\n o[2] &= 0xffff;\n o[1] += m[1] * n[3];\n o[0] += o[1] >>> 16;\n o[1] &= 0xffff;\n o[1] += m[2] * n[2];\n o[0] += o[1] >>> 16;\n o[1] &= 0xffff;\n o[1] += m[3] * n[1];\n o[0] += o[1] >>> 16;\n o[1] &= 0xffff;\n o[0] += m[0] * n[3] + m[1] * n[2] + m[2] * n[1] + m[3] * n[0];\n o[0] &= 0xffff;\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\n}\n//\n// Given a 64bit int (as an array of two 32bit ints) and an int\n// representing a number of bit positions, returns the 64bit int (as an\n// array of two 32bit ints) rotated left by that number of positions.\n//\nfunction x64Rotl(m, n) {\n n %= 64;\n if (n === 32) {\n return [m[1], m[0]];\n }\n else if (n < 32) {\n return [(m[0] << n) | (m[1] >>> (32 - n)), (m[1] << n) | (m[0] >>> (32 - n))];\n }\n else {\n n -= 32;\n return [(m[1] << n) | (m[0] >>> (32 - n)), (m[0] << n) | (m[1] >>> (32 - n))];\n }\n}\n//\n// Given a 64bit int (as an array of two 32bit ints) and an int\n// representing a number of bit positions, returns the 64bit int (as an\n// array of two 32bit ints) shifted left by that number of positions.\n//\nfunction x64LeftShift(m, n) {\n n %= 64;\n if (n === 0) {\n return m;\n }\n else if (n < 32) {\n return [(m[0] << n) | (m[1] >>> (32 - n)), m[1] << n];\n }\n else {\n return [m[1] << (n - 32), 0];\n }\n}\n//\n// Given two 64bit ints (as an array of two 32bit ints) returns the two\n// xored together as a 64bit int (as an array of two 32bit ints).\n//\nfunction x64Xor(m, n) {\n return [m[0] ^ n[0], m[1] ^ n[1]];\n}\n//\n// Given a block, returns murmurHash3's final x64 mix of that block.\n// (`[0, h[0] >>> 1]` is a 33 bit unsigned right shift. This is the\n// only place where we need to right shift 64bit ints.)\n//\nfunction x64Fmix(h) {\n h = x64Xor(h, [0, h[0] >>> 1]);\n h = x64Multiply(h, [0xff51afd7, 0xed558ccd]);\n h = x64Xor(h, [0, h[0] >>> 1]);\n h = x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]);\n h = x64Xor(h, [0, h[0] >>> 1]);\n return h;\n}\n//\n// Given a string and an optional seed as an int, returns a 128 bit\n// hash using the x64 flavor of MurmurHash3, as an unsigned hex.\n//\nfunction x64hash128(key, seed) {\n key = key || '';\n seed = seed || 0;\n var remainder = key.length % 16;\n var bytes = key.length - remainder;\n var h1 = [0, seed];\n var h2 = [0, seed];\n var k1 = [0, 0];\n var k2 = [0, 0];\n var c1 = [0x87c37b91, 0x114253d5];\n var c2 = [0x4cf5ad43, 0x2745937f];\n var i;\n for (i = 0; i < bytes; i = i + 16) {\n k1 = [\n (key.charCodeAt(i + 4) & 0xff) |\n ((key.charCodeAt(i + 5) & 0xff) << 8) |\n ((key.charCodeAt(i + 6) & 0xff) << 16) |\n ((key.charCodeAt(i + 7) & 0xff) << 24),\n (key.charCodeAt(i) & 0xff) |\n ((key.charCodeAt(i + 1) & 0xff) << 8) |\n ((key.charCodeAt(i + 2) & 0xff) << 16) |\n ((key.charCodeAt(i + 3) & 0xff) << 24),\n ];\n k2 = [\n (key.charCodeAt(i + 12) & 0xff) |\n ((key.charCodeAt(i + 13) & 0xff) << 8) |\n ((key.charCodeAt(i + 14) & 0xff) << 16) |\n ((key.charCodeAt(i + 15) & 0xff) << 24),\n (key.charCodeAt(i + 8) & 0xff) |\n ((key.charCodeAt(i + 9) & 0xff) << 8) |\n ((key.charCodeAt(i + 10) & 0xff) << 16) |\n ((key.charCodeAt(i + 11) & 0xff) << 24),\n ];\n k1 = x64Multiply(k1, c1);\n k1 = x64Rotl(k1, 31);\n k1 = x64Multiply(k1, c2);\n h1 = x64Xor(h1, k1);\n h1 = x64Rotl(h1, 27);\n h1 = x64Add(h1, h2);\n h1 = x64Add(x64Multiply(h1, [0, 5]), [0, 0x52dce729]);\n k2 = x64Multiply(k2, c2);\n k2 = x64Rotl(k2, 33);\n k2 = x64Multiply(k2, c1);\n h2 = x64Xor(h2, k2);\n h2 = x64Rotl(h2, 31);\n h2 = x64Add(h2, h1);\n h2 = x64Add(x64Multiply(h2, [0, 5]), [0, 0x38495ab5]);\n }\n k1 = [0, 0];\n k2 = [0, 0];\n switch (remainder) {\n case 15:\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 14)], 48));\n // fallthrough\n case 14:\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 13)], 40));\n // fallthrough\n case 13:\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 12)], 32));\n // fallthrough\n case 12:\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 11)], 24));\n // fallthrough\n case 11:\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 10)], 16));\n // fallthrough\n case 10:\n k2 = x64Xor(k2, x64LeftShift([0, key.charCodeAt(i + 9)], 8));\n // fallthrough\n case 9:\n k2 = x64Xor(k2, [0, key.charCodeAt(i + 8)]);\n k2 = x64Multiply(k2, c2);\n k2 = x64Rotl(k2, 33);\n k2 = x64Multiply(k2, c1);\n h2 = x64Xor(h2, k2);\n // fallthrough\n case 8:\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 7)], 56));\n // fallthrough\n case 7:\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 6)], 48));\n // fallthrough\n case 6:\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 5)], 40));\n // fallthrough\n case 5:\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 4)], 32));\n // fallthrough\n case 4:\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 3)], 24));\n // fallthrough\n case 3:\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 2)], 16));\n // fallthrough\n case 2:\n k1 = x64Xor(k1, x64LeftShift([0, key.charCodeAt(i + 1)], 8));\n // fallthrough\n case 1:\n k1 = x64Xor(k1, [0, key.charCodeAt(i)]);\n k1 = x64Multiply(k1, c1);\n k1 = x64Rotl(k1, 31);\n k1 = x64Multiply(k1, c2);\n h1 = x64Xor(h1, k1);\n // fallthrough\n }\n h1 = x64Xor(h1, [0, key.length]);\n h2 = x64Xor(h2, [0, key.length]);\n h1 = x64Add(h1, h2);\n h2 = x64Add(h2, h1);\n h1 = x64Fmix(h1);\n h2 = x64Fmix(h2);\n h1 = x64Add(h1, h2);\n h2 = x64Add(h2, h1);\n return (('00000000' + (h1[0] >>> 0).toString(16)).slice(-8) +\n ('00000000' + (h1[1] >>> 0).toString(16)).slice(-8) +\n ('00000000' + (h2[0] >>> 0).toString(16)).slice(-8) +\n ('00000000' + (h2[1] >>> 0).toString(16)).slice(-8));\n}\n\nvar version = \"3.0.6\";\n\nfunction requestIdleCallbackIfAvailable(fallbackTimeout, deadlineTimeout) {\n if (deadlineTimeout === void 0) { deadlineTimeout = Infinity; }\n return new Promise(function (resolve) {\n var requestIdleCallback = window.requestIdleCallback;\n if (requestIdleCallback) {\n requestIdleCallback(function () { return resolve(); }, { timeout: deadlineTimeout });\n }\n else {\n setTimeout(resolve, Math.min(fallbackTimeout, deadlineTimeout));\n }\n });\n}\n\n/**\n * Converts an error object to a plain object that can be used with `JSON.stringify`.\n * If you just run `JSON.stringify(error)`, you'll get `'{}'`.\n */\nfunction errorToObject(error) {\n var _a;\n return __assign({ name: error.name, message: error.message, stack: (_a = error.stack) === null || _a === void 0 ? void 0 : _a.split('\\n') }, error);\n}\n\n/*\n * This file contains functions to work with pure data only (no browser features, DOM, side effects, etc).\n */\n/**\n * Does the same as Array.prototype.includes but has better typing\n */\nfunction includes(haystack, needle) {\n for (var i = 0, l = haystack.length; i < l; ++i) {\n if (haystack[i] === needle) {\n return true;\n }\n }\n return false;\n}\n/**\n * Like `!includes()` but with proper typing\n */\nfunction excludes(haystack, needle) {\n return !includes(haystack, needle);\n}\n/**\n * Be careful, NaN can return\n */\nfunction toInt(value) {\n return parseInt(value);\n}\n/**\n * Be careful, NaN can return\n */\nfunction toFloat(value) {\n return parseFloat(value);\n}\nfunction replaceNaN(value, replacement) {\n return typeof value === 'number' && isNaN(value) ? replacement : value;\n}\nfunction countTruthy(values) {\n return values.reduce(function (sum, value) { return sum + (value ? 1 : 0); }, 0);\n}\n\n/*\n * Functions to help with features that vary through browsers\n */\n/**\n * Checks whether the browser is based on Trident (the Internet Explorer engine) without using user-agent.\n *\n * Warning for package users:\n * This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.\n */\nfunction isTrident() {\n var w = window;\n var n = navigator;\n // The properties are checked to be in IE 10, IE 11 and not to be in other browsers in October 2020\n return (countTruthy([\n 'MSCSSMatrix' in w,\n 'msSetImmediate' in w,\n 'msIndexedDB' in w,\n 'msMaxTouchPoints' in n,\n 'msPointerEnabled' in n,\n ]) >= 4);\n}\n/**\n * Checks whether the browser is based on EdgeHTML (the pre-Chromium Edge engine) without using user-agent.\n *\n * Warning for package users:\n * This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.\n */\nfunction isEdgeHTML() {\n // Based on research in October 2020\n var w = window;\n var n = navigator;\n return (countTruthy(['msWriteProfilerMark' in w, 'MSStream' in w, 'msLaunchUri' in n, 'msSaveBlob' in n]) >= 3 &&\n !isTrident());\n}\n/**\n * Checks whether the browser is based on Chromium without using user-agent.\n *\n * Warning for package users:\n * This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.\n */\nfunction isChromium() {\n // Based on research in October 2020. Tested to detect Chromium 42-86.\n var w = window;\n var n = navigator;\n return (countTruthy([\n 'webkitPersistentStorage' in n,\n 'webkitTemporaryStorage' in n,\n n.vendor.indexOf('Google') === 0,\n 'webkitResolveLocalFileSystemURL' in w,\n 'BatteryManager' in w,\n 'webkitMediaStream' in w,\n 'webkitSpeechGrammar' in w,\n ]) >= 5);\n}\n/**\n * Checks whether the browser is based on mobile or desktop Safari without using user-agent.\n * All iOS browsers use WebKit (the Safari engine).\n *\n * Warning for package users:\n * This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.\n */\nfunction isWebKit() {\n // Based on research in September 2020\n var w = window;\n var n = navigator;\n return (countTruthy([\n 'ApplePayError' in w,\n 'CSSPrimitiveValue' in w,\n 'Counter' in w,\n n.vendor.indexOf('Apple') === 0,\n 'getStorageUpdates' in n,\n 'WebKitMediaKeys' in w,\n ]) >= 4);\n}\n/**\n * Checks whether the WebKit browser is a desktop Safari.\n *\n * Warning for package users:\n * This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.\n */\nfunction isDesktopSafari() {\n var w = window;\n return (countTruthy([\n 'safari' in w,\n !('DeviceMotionEvent' in w),\n !('ongestureend' in w),\n !('standalone' in navigator),\n ]) >= 3);\n}\n/**\n * Checks whether the browser is based on Gecko (Firefox engine) without using user-agent.\n *\n * Warning for package users:\n * This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.\n */\nfunction isGecko() {\n var _a, _b;\n var w = window;\n // Based on research in September 2020\n return (countTruthy([\n 'buildID' in navigator,\n 'MozAppearance' in ((_b = (_a = document.documentElement) === null || _a === void 0 ? void 0 : _a.style) !== null && _b !== void 0 ? _b : {}),\n 'MediaRecorderErrorEvent' in w,\n 'mozInnerScreenX' in w,\n 'CSSMozDocumentRule' in w,\n 'CanvasCaptureMediaStream' in w,\n ]) >= 4);\n}\n/**\n * Checks whether the browser is based on Chromium version ≥86 without using user-agent.\n * It doesn't check that the browser is based on Chromium, there is a separate function for this.\n */\nfunction isChromium86OrNewer() {\n // Checked in Chrome 85 vs Chrome 86 both on desktop and Android\n var w = window;\n return (countTruthy([\n !('MediaSettingsRange' in w),\n 'RTCEncodedAudioFrame' in w,\n '' + w.Intl === '[object Intl]',\n '' + w.Reflect === '[object Reflect]',\n ]) >= 3);\n}\n/**\n * Checks whether the browser is based on WebKit version ≥606 (Safari ≥12) without using user-agent.\n * It doesn't check that the browser is based on WebKit, there is a separate function for this.\n *\n * @link https://en.wikipedia.org/wiki/Safari_version_history#Release_history Safari-WebKit versions map\n */\nfunction isWebKit606OrNewer() {\n // Checked in Safari 9–14\n var w = window;\n return (countTruthy([\n 'DOMRectList' in w,\n 'RTCPeerConnectionIceEvent' in w,\n 'SVGGeometryElement' in w,\n 'ontransitioncancel' in w,\n ]) >= 3);\n}\n\n// Inspired by and based on https://github.com/cozylife/audio-fingerprint\nfunction getAudioFingerprint() {\n return __awaiter(this, void 0, void 0, function () {\n var w, AudioContext, context, oscillator, compressor, buffer, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n w = window;\n AudioContext = w.OfflineAudioContext || w.webkitOfflineAudioContext;\n if (!AudioContext) {\n return [2 /*return*/, -2 /* NotSupported */];\n }\n // In some browsers, audio context always stays suspended unless the context is started in response to a user action\n // (e.g. a click or a tap). It prevents audio fingerprint from being taken at an arbitrary moment of time.\n // Such browsers are old and unpopular, so the audio fingerprinting is just skipped in them.\n // See a similar case explanation at https://stackoverflow.com/questions/46363048/onaudioprocess-not-called-on-ios11#46534088\n if (doesCurrentBrowserSuspendAudioContext()) {\n return [2 /*return*/, -1 /* KnownToSuspend */];\n }\n context = new AudioContext(1, 44100, 44100);\n oscillator = context.createOscillator();\n oscillator.type = 'triangle';\n setAudioParam(context, oscillator.frequency, 10000);\n compressor = context.createDynamicsCompressor();\n setAudioParam(context, compressor.threshold, -50);\n setAudioParam(context, compressor.knee, 40);\n setAudioParam(context, compressor.ratio, 12);\n setAudioParam(context, compressor.reduction, -20);\n setAudioParam(context, compressor.attack, 0);\n setAudioParam(context, compressor.release, 0.25);\n oscillator.connect(compressor);\n compressor.connect(context.destination);\n oscillator.start(0);\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, 4, 5]);\n return [4 /*yield*/, renderAudio(context)];\n case 2:\n buffer = _a.sent();\n return [3 /*break*/, 5];\n case 3:\n error_1 = _a.sent();\n if (error_1.name === \"timeout\" /* Timeout */ || error_1.name === \"suspended\" /* Suspended */) {\n return [2 /*return*/, -3 /* Timeout */];\n }\n throw error_1;\n case 4:\n oscillator.disconnect();\n compressor.disconnect();\n return [7 /*endfinally*/];\n case 5: return [2 /*return*/, getHash(buffer.getChannelData(0))];\n }\n });\n });\n}\n/**\n * Checks if the current browser is known to always suspend audio context\n */\nfunction doesCurrentBrowserSuspendAudioContext() {\n return isWebKit() && !isDesktopSafari() && !isWebKit606OrNewer();\n}\nfunction setAudioParam(context, param, value) {\n var isAudioParam = function (value) {\n return value && typeof value.setValueAtTime === 'function';\n };\n if (isAudioParam(param)) {\n param.setValueAtTime(value, context.currentTime);\n }\n}\nfunction renderAudio(context) {\n var resumeTriesMaxCount = 3;\n var resumeRetryDelay = 500;\n var runningTimeout = 1000;\n return new Promise(function (resolve, reject) {\n context.oncomplete = function (event) { return resolve(event.renderedBuffer); };\n var resumeTriesLeft = resumeTriesMaxCount;\n var tryResume = function () {\n context.startRendering();\n switch (context.state) {\n case 'running':\n setTimeout(function () { return reject(makeInnerError(\"timeout\" /* Timeout */)); }, runningTimeout);\n break;\n // Sometimes the audio context doesn't start after calling `startRendering` (in addition to the cases where\n // audio context doesn't start at all). A known case is starting an audio context when the browser tab is in\n // background on iPhone. Retries usually help in this case.\n case 'suspended':\n // The audio context can reject starting until the tab is in foreground. Long fingerprint duration\n // in background isn't a problem, therefore the retry attempts don't count in background. It can lead to\n // a situation when a fingerprint takes very long time and finishes successfully. FYI, the audio context\n // can be suspended when `document.hidden === false` and start running after a retry.\n if (!document.hidden) {\n resumeTriesLeft--;\n }\n if (resumeTriesLeft > 0) {\n setTimeout(tryResume, resumeRetryDelay);\n }\n else {\n reject(makeInnerError(\"suspended\" /* Suspended */));\n }\n break;\n }\n };\n tryResume();\n });\n}\nfunction getHash(signal) {\n var hash = 0;\n for (var i = 4500; i < 5000; ++i) {\n hash += Math.abs(signal[i]);\n }\n return hash;\n}\nfunction makeInnerError(name) {\n var error = new Error(name);\n error.name = name;\n return error;\n}\n\n// We use m or w because these two characters take up the maximum width.\n// And we use a LLi so that the same matching fonts can get separated.\nvar testString = 'mmMwWLliI0O&1';\n// We test using 48px font size, we may use any size. I guess larger the better.\nvar testSize = '48px';\n// A font will be compared against all the three default fonts.\n// And if it doesn't match all 3 then that font is not available.\nvar baseFonts = ['monospace', 'sans-serif', 'serif'];\nvar fontList = [\n // This is android-specific font from \"Roboto\" family\n 'sans-serif-thin',\n 'ARNO PRO',\n 'Agency FB',\n 'Arabic Typesetting',\n 'Arial Unicode MS',\n 'AvantGarde Bk BT',\n 'BankGothic Md BT',\n 'Batang',\n 'Bitstream Vera Sans Mono',\n 'Calibri',\n 'Century',\n 'Century Gothic',\n 'Clarendon',\n 'EUROSTILE',\n 'Franklin Gothic',\n 'Futura Bk BT',\n 'Futura Md BT',\n 'GOTHAM',\n 'Gill Sans',\n 'HELV',\n 'Haettenschweiler',\n 'Helvetica Neue',\n 'Humanst521 BT',\n 'Leelawadee',\n 'Letter Gothic',\n 'Levenim MT',\n 'Lucida Bright',\n 'Lucida Sans',\n 'Menlo',\n 'MS Mincho',\n 'MS Outlook',\n 'MS Reference Specialty',\n 'MS UI Gothic',\n 'MT Extra',\n 'MYRIAD PRO',\n 'Marlett',\n 'Meiryo UI',\n 'Microsoft Uighur',\n 'Minion Pro',\n 'Monotype Corsiva',\n 'PMingLiU',\n 'Pristina',\n 'SCRIPTINA',\n 'Segoe UI Light',\n 'Serifa',\n 'SimHei',\n 'Small Fonts',\n 'Staccato222 BT',\n 'TRAJAN PRO',\n 'Univers CE 55 Medium',\n 'Vrinda',\n 'ZWAdobeF',\n];\nvar fontSpanStyle = {\n // CSS font reset to reset external styles\n fontStyle: 'normal',\n fontWeight: 'normal',\n letterSpacing: 'normal',\n lineBreak: 'auto',\n lineHeight: 'normal',\n textTransform: 'none',\n textAlign: 'left',\n textDecoration: 'none',\n textShadow: 'none',\n whiteSpace: 'normal',\n wordBreak: 'normal',\n wordSpacing: 'normal',\n // We need this css as in some weird browser this span elements shows up for a microSec which creates\n // a bad user experience\n position: 'absolute',\n left: '-9999px',\n fontSize: testSize,\n};\n// kudos to http://www.lalit.org/lab/javascript-css-font-detect/\nfunction getFonts() {\n var d = document;\n var holder = d.body;\n // div to load spans for the base fonts\n var baseFontsDiv = d.createElement('div');\n // div to load spans for the fonts to detect\n var fontsDiv = d.createElement('div');\n var defaultWidth = {};\n var defaultHeight = {};\n // creates a span where the fonts will be loaded\n var createSpan = function () {\n var span = d.createElement('span');\n span.textContent = testString;\n for (var _i = 0, _a = Object.keys(fontSpanStyle); _i < _a.length; _i++) {\n var prop = _a[_i];\n span.style[prop] = fontSpanStyle[prop];\n }\n return span;\n };\n // creates a span and load the font to detect and a base font for fallback\n var createSpanWithFonts = function (fontToDetect, baseFont) {\n var s = createSpan();\n s.style.fontFamily = \"'\" + fontToDetect + \"',\" + baseFont;\n return s;\n };\n // creates spans for the base fonts and adds them to baseFontsDiv\n var initializeBaseFontsSpans = function () {\n return baseFonts.map(function (baseFont) {\n var s = createSpan();\n s.style.fontFamily = baseFont;\n baseFontsDiv.appendChild(s);\n return s;\n });\n };\n // creates spans for the fonts to detect and adds them to fontsDiv\n var initializeFontsSpans = function () {\n // Stores {fontName : [spans for that font]}\n var spans = {};\n var _loop_1 = function (font) {\n spans[font] = baseFonts.map(function (baseFont) {\n var s = createSpanWithFonts(font, baseFont);\n fontsDiv.appendChild(s);\n return s;\n });\n };\n for (var _i = 0, fontList_1 = fontList; _i < fontList_1.length; _i++) {\n var font = fontList_1[_i];\n _loop_1(font);\n }\n return spans;\n };\n // checks if a font is available\n var isFontAvailable = function (fontSpans) {\n return baseFonts.some(function (baseFont, baseFontIndex) {\n return fontSpans[baseFontIndex].offsetWidth !== defaultWidth[baseFont] ||\n fontSpans[baseFontIndex].offsetHeight !== defaultHeight[baseFont];\n });\n };\n // create spans for base fonts\n var baseFontsSpans = initializeBaseFontsSpans();\n // add the spans to the DOM\n holder.appendChild(baseFontsDiv);\n // get the default width for the three base fonts\n for (var index = 0, length_1 = baseFonts.length; index < length_1; index++) {\n defaultWidth[baseFonts[index]] = baseFontsSpans[index].offsetWidth; // width for the default font\n defaultHeight[baseFonts[index]] = baseFontsSpans[index].offsetHeight; // height for the default font\n }\n // create spans for fonts to detect\n var fontsSpans = initializeFontsSpans();\n // add all the spans to the DOM\n holder.appendChild(fontsDiv);\n // check available fonts\n var available = [];\n for (var i = 0, l = fontList.length; i < l; i++) {\n if (isFontAvailable(fontsSpans[fontList[i]])) {\n available.push(fontList[i]);\n }\n }\n // remove spans from DOM\n holder.removeChild(fontsDiv);\n holder.removeChild(baseFontsDiv);\n return available;\n}\n\nfunction getPlugins() {\n if (isTrident()) {\n return [];\n }\n if (!navigator.plugins) {\n return undefined;\n }\n var plugins = [];\n // Safari 10 doesn't support iterating navigator.plugins with for...of\n for (var i = 0; i < navigator.plugins.length; ++i) {\n var plugin = navigator.plugins[i];\n if (!plugin) {\n continue;\n }\n var mimeTypes = [];\n for (var j = 0; j < plugin.length; ++j) {\n var mimeType = plugin[j];\n mimeTypes.push({\n type: mimeType.type,\n suffixes: mimeType.suffixes,\n });\n }\n plugins.push({\n name: plugin.name,\n description: plugin.description,\n mimeTypes: mimeTypes,\n });\n }\n return plugins;\n}\n\nfunction makeCanvasContext() {\n var canvas = document.createElement('canvas');\n canvas.width = 240;\n canvas.height = 140;\n canvas.style.display = 'inline';\n return [canvas, canvas.getContext('2d')];\n}\nfunction isSupported(canvas, context) {\n // TODO: look into: https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob\n return !!(context && canvas.toDataURL);\n}\nfunction save(canvas) {\n // TODO: look into: https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob\n return canvas.toDataURL();\n}\n// https://www.browserleaks.com/canvas#how-does-it-work\nfunction getCanvasFingerprint() {\n var _a = makeCanvasContext(), canvas = _a[0], context = _a[1];\n if (!isSupported(canvas, context)) {\n return { winding: false, data: '' };\n }\n // detect browser support of canvas winding\n // http://blogs.adobe.com/webplatform/2013/01/30/winding-rules-in-canvas/\n // https://github.com/Modernizr/Modernizr/blob/master/feature-detects/canvas/winding.js\n context.rect(0, 0, 10, 10);\n context.rect(2, 2, 6, 6);\n var winding = !context.isPointInPath(5, 5, 'evenodd');\n context.textBaseline = 'alphabetic';\n context.fillStyle = '#f60';\n context.fillRect(125, 1, 62, 20);\n context.fillStyle = '#069';\n // https://github.com/Valve/fingerprintjs2/issues/66\n // this can affect FP generation when applying different CSS on different websites\n context.font = '11pt no-real-font-123';\n // the choice of emojis has a gigantic impact on rendering performance (especially in FF)\n // some newer emojis cause it to slow down 50-200 times\n // context.fillText(\"Cw爨m fjordbank \\ud83d\\ude03 gly\", 2, 15)\n var printedText = 'Cwm fjordbank \\ud83d\\ude03 gly';\n context.fillText(printedText, 2, 15);\n context.fillStyle = 'rgba(102, 204, 0, 0.2)';\n context.font = '18pt Arial';\n context.fillText(printedText, 4, 45);\n // canvas blending\n // http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/\n // http://jsfiddle.net/NDYV8/16/\n context.globalCompositeOperation = 'multiply';\n context.fillStyle = 'rgb(255,0,255)';\n context.beginPath();\n context.arc(50, 50, 50, 0, Math.PI * 2, true);\n context.closePath();\n context.fill();\n context.fillStyle = 'rgb(0,255,255)';\n context.beginPath();\n context.arc(100, 50, 50, 0, Math.PI * 2, true);\n context.closePath();\n context.fill();\n context.fillStyle = 'rgb(255,255,0)';\n context.beginPath();\n context.arc(75, 100, 50, 0, Math.PI * 2, true);\n context.closePath();\n context.fill();\n context.fillStyle = 'rgb(255,0,255)';\n // canvas winding\n // http://blogs.adobe.com/webplatform/2013/01/30/winding-rules-in-canvas/\n // http://jsfiddle.net/NDYV8/19/\n context.arc(75, 75, 75, 0, Math.PI * 2, true);\n context.arc(75, 75, 25, 0, Math.PI * 2, true);\n context.fill('evenodd');\n return {\n winding: winding,\n data: save(canvas),\n };\n}\n\n/**\n * This is a crude and primitive touch screen detection. It's not possible to currently reliably detect the availability\n * of a touch screen with a JS, without actually subscribing to a touch event.\n *\n * @see http://www.stucox.com/blog/you-cant-detect-a-touchscreen/\n * @see https://github.com/Modernizr/Modernizr/issues/548\n */\nfunction getTouchSupport() {\n var n = navigator;\n var maxTouchPoints = 0;\n var touchEvent;\n if (n.maxTouchPoints !== undefined) {\n maxTouchPoints = toInt(n.maxTouchPoints);\n }\n else if (n.msMaxTouchPoints !== undefined) {\n maxTouchPoints = n.msMaxTouchPoints;\n }\n try {\n document.createEvent('TouchEvent');\n touchEvent = true;\n }\n catch (_) {\n touchEvent = false;\n }\n var touchStart = 'ontouchstart' in window;\n return {\n maxTouchPoints: maxTouchPoints,\n touchEvent: touchEvent,\n touchStart: touchStart,\n };\n}\n\nfunction getOsCpu() {\n return navigator.oscpu;\n}\n\nfunction getLanguages() {\n var n = navigator;\n var result = [];\n var language = n.language || n.userLanguage || n.browserLanguage || n.systemLanguage;\n if (language !== undefined) {\n result.push([language]);\n }\n if (Array.isArray(n.languages)) {\n // Starting from Chromium 86, there is only a single value in `navigator.language` in Incognito mode:\n // the value of `navigator.language`. Therefore the value is ignored in this browser.\n if (!(isChromium() && isChromium86OrNewer())) {\n result.push(n.languages);\n }\n }\n else if (typeof n.languages === 'string') {\n var languages = n.languages;\n if (languages) {\n result.push(languages.split(','));\n }\n }\n return result;\n}\n\nfunction getColorDepth() {\n return window.screen.colorDepth;\n}\n\nfunction getDeviceMemory() {\n // `navigator.deviceMemory` is a string containing a number in some unidentified cases\n return replaceNaN(toFloat(navigator.deviceMemory), undefined);\n}\n\nfunction getScreenResolution() {\n var s = screen;\n // Some browsers return screen resolution as strings, e.g. \"1200\", instead of a number, e.g. 1200.\n // I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.\n var dimensions = [toInt(s.width), toInt(s.height)];\n dimensions.sort().reverse();\n return dimensions;\n}\n\nfunction getAvailableScreenResolution() {\n var s = screen;\n if (s.availWidth && s.availHeight) {\n // Some browsers return screen resolution as strings, e.g. \"1200\", instead of a number, e.g. 1200.\n // I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.\n var dimensions = [toInt(s.availWidth), toInt(s.availHeight)];\n dimensions.sort().reverse();\n return dimensions;\n }\n return undefined;\n}\n\nfunction getHardwareConcurrency() {\n try {\n // sometimes hardware concurrency is a string\n var concurrency = toInt(navigator.hardwareConcurrency);\n return isNaN(concurrency) ? 1 : concurrency;\n }\n catch (e) {\n return 1;\n }\n}\n\nfunction getTimezoneOffset() {\n var currentYear = new Date().getFullYear();\n // The timezone offset may change over time due to daylight saving time (DST) shifts.\n // The non-DST timezone offset is used as the result timezone offset.\n // Since the DST season differs in the northern and the southern hemispheres,\n // both January and July timezones offsets are considered.\n return Math.max(\n // `getTimezoneOffset` returns a number as a string in some unidentified cases\n toFloat(new Date(currentYear, 0, 1).getTimezoneOffset()), toFloat(new Date(currentYear, 6, 1).getTimezoneOffset()));\n}\n\nfunction getTimezone() {\n var _a;\n var DateTimeFormat = (_a = window.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat;\n if (DateTimeFormat) {\n return new DateTimeFormat().resolvedOptions().timeZone;\n }\n return undefined;\n}\n\nfunction getSessionStorage() {\n try {\n return !!window.sessionStorage;\n }\n catch (error) {\n /* SecurityError when referencing it means it exists */\n return true;\n }\n}\n\n// https://bugzilla.mozilla.org/show_bug.cgi?id=781447\nfunction getLocalStorage() {\n try {\n return !!window.localStorage;\n }\n catch (e) {\n /* SecurityError when referencing it means it exists */\n return true;\n }\n}\n\nfunction getIndexedDB() {\n // IE and Edge don't allow accessing indexedDB in private mode, therefore IE and Edge will have different\n // visitor identifier in normal and private modes.\n if (isTrident() || isEdgeHTML()) {\n return undefined;\n }\n try {\n return !!window.indexedDB;\n }\n catch (e) {\n /* SecurityError when referencing it means it exists */\n return true;\n }\n}\n\nfunction getOpenDatabase() {\n return !!window.openDatabase;\n}\n\nfunction getCpuClass() {\n return navigator.cpuClass;\n}\n\n/**\n * It should be improved to handle mock value on iOS:\n * https://github.com/fingerprintjs/fingerprintjs/issues/514#issuecomment-727782842\n */\nfunction getPlatform() {\n return navigator.platform;\n}\n\nfunction getPluginsSupport() {\n return navigator.plugins !== undefined;\n}\n\nfunction getProductSub() {\n return navigator.productSub; // It's undefined in IE\n}\n\nfunction getEmptyEvalLength() {\n return eval.toString().length;\n}\n\nfunction getErrorFF() {\n try {\n throw 'a';\n }\n catch (e) {\n try {\n e.toSource();\n return true;\n }\n catch (e2) {\n return false;\n }\n }\n}\n\nfunction getVendor() {\n return navigator.vendor;\n}\n\nfunction getChrome() {\n return window.chrome !== undefined;\n}\n\n/**\n * navigator.cookieEnabled cannot detect custom or nuanced cookie blocking configurations. For example, when blocking\n * cookies via the Advanced Privacy Settings in IE9, it always returns true. And there have been issues in the past with\n * site-specific exceptions. Don't rely on it.\n *\n * @see https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cookies.js Taken from here\n */\nfunction areCookiesEnabled() {\n var d = document;\n // Taken from here: https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cookies.js\n // navigator.cookieEnabled cannot detect custom or nuanced cookie blocking configurations. For example, when blocking\n // cookies via the Advanced Privacy Settings in IE9, it always returns true. And there have been issues in the past\n // with site-specific exceptions. Don't rely on it.\n // try..catch because some in situations `document.cookie` is exposed but throws a\n // SecurityError if you try to access it; e.g. documents created from data URIs\n // or in sandboxed iframes (depending on flags/context)\n try {\n // Create cookie\n d.cookie = 'cookietest=1; SameSite=Strict;';\n var result = d.cookie.indexOf('cookietest=') !== -1;\n // Delete cookie\n d.cookie = 'cookietest=1; SameSite=Strict; expires=Thu, 01-Jan-1970 00:00:01 GMT';\n return result;\n }\n catch (e) {\n return false;\n }\n}\n\n/**\n * The list of entropy sources used to make visitor identifiers.\n *\n * This value isn't restricted by Semantic Versioning, i.e. it may be changed without bumping minor or major version of\n * this package.\n */\nvar sources = {\n // Expected errors and default values must be handled inside the functions. Unexpected errors must be thrown.\n osCpu: getOsCpu,\n languages: getLanguages,\n colorDepth: getColorDepth,\n deviceMemory: getDeviceMemory,\n screenResolution: getScreenResolution,\n availableScreenResolution: getAvailableScreenResolution,\n hardwareConcurrency: getHardwareConcurrency,\n timezoneOffset: getTimezoneOffset,\n timezone: getTimezone,\n sessionStorage: getSessionStorage,\n localStorage: getLocalStorage,\n indexedDB: getIndexedDB,\n openDatabase: getOpenDatabase,\n cpuClass: getCpuClass,\n platform: getPlatform,\n plugins: getPlugins,\n canvas: getCanvasFingerprint,\n // adBlock: isAdblockUsed, // https://github.com/fingerprintjs/fingerprintjs/issues/405\n touchSupport: getTouchSupport,\n fonts: getFonts,\n audio: getAudioFingerprint,\n pluginsSupport: getPluginsSupport,\n productSub: getProductSub,\n emptyEvalLength: getEmptyEvalLength,\n errorFF: getErrorFF,\n vendor: getVendor,\n chrome: getChrome,\n cookiesEnabled: areCookiesEnabled,\n};\n/**\n * Gets a components list from the given list of entropy sources.\n *\n * Warning for package users:\n * This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.\n */\nfunction getComponents(sources, sourceOptions, excludeSources) {\n return __awaiter(this, void 0, void 0, function () {\n var timestamp, components, _i, _a, sourceKey, result, error_1, nextTimestamp;\n var _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n timestamp = Date.now();\n components = {};\n _i = 0, _a = Object.keys(sources);\n _c.label = 1;\n case 1:\n if (!(_i < _a.length)) return [3 /*break*/, 7];\n sourceKey = _a[_i];\n if (!excludes(excludeSources, sourceKey)) {\n return [3 /*break*/, 6];\n }\n result = void 0;\n _c.label = 2;\n case 2:\n _c.trys.push([2, 4, , 5]);\n _b = {};\n return [4 /*yield*/, sources[sourceKey](sourceOptions)];\n case 3:\n result = (_b.value = _c.sent(), _b);\n return [3 /*break*/, 5];\n case 4:\n error_1 = _c.sent();\n result = error_1 && typeof error_1 === 'object' && 'message' in error_1 ? { error: error_1 } : { error: { message: error_1 } };\n return [3 /*break*/, 5];\n case 5:\n nextTimestamp = Date.now();\n components[sourceKey] = __assign(__assign({}, result), { duration: nextTimestamp - timestamp }); // TypeScript has beaten me here\n timestamp = nextTimestamp;\n _c.label = 6;\n case 6:\n _i++;\n return [3 /*break*/, 1];\n case 7: return [2 /*return*/, components];\n }\n });\n });\n}\n/**\n * Collects entropy components from the built-in sources to make the visitor identifier.\n */\nfunction getBuiltinComponents() {\n return getComponents(sources, undefined, []);\n}\n\nfunction componentsToCanonicalString(components) {\n var result = '';\n for (var _i = 0, _a = Object.keys(components); _i < _a.length; _i++) {\n var componentKey = _a[_i];\n var component = components[componentKey];\n var value = component.error ? 'error' : JSON.stringify(component.value);\n result += \"\" + (result ? '|' : '') + componentKey.replace(/([:|\\\\])/g, '\\\\$1') + \":\" + value;\n }\n return result;\n}\nfunction componentsToDebugString(components) {\n return JSON.stringify(components, function (_key, value) {\n if (value instanceof Error) {\n return errorToObject(value);\n }\n return value;\n }, 2);\n}\nfunction hashComponents(components) {\n return x64hash128(componentsToCanonicalString(components));\n}\n/**\n * Makes a GetResult implementation that calculates the visitor id hash on demand.\n * Designed for optimisation.\n */\nfunction makeLazyGetResult(components) {\n var visitorIdCache;\n // A plain class isn't used because its getters and setters aren't enumerable.\n return {\n components: components,\n get visitorId() {\n if (visitorIdCache === undefined) {\n visitorIdCache = hashComponents(this.components);\n }\n return visitorIdCache;\n },\n set visitorId(visitorId) {\n visitorIdCache = visitorId;\n },\n };\n}\n/**\n * The class isn't exported from the index file to not expose the constructor.\n * The hiding gives more freedom for future non-breaking updates.\n */\nvar OpenAgent = /** @class */ (function () {\n function OpenAgent() {\n }\n /**\n * @inheritDoc\n */\n OpenAgent.prototype.get = function (options) {\n if (options === void 0) { options = {}; }\n return __awaiter(this, void 0, void 0, function () {\n var components, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, getBuiltinComponents()];\n case 1:\n components = _a.sent();\n result = makeLazyGetResult(components);\n if (options.debug) {\n // console.log is ok here because it's under a debug clause\n // eslint-disable-next-line no-console\n console.log(\"Copy the text below to get the debug data:\\n\\n```\\nversion: \" + version + \"\\nuserAgent: \" + navigator.userAgent + \"\\ngetOptions: \" + JSON.stringify(options, undefined, 2) + \"\\nvisitorId: \" + result.visitorId + \"\\ncomponents: \" + componentsToDebugString(components) + \"\\n```\");\n }\n return [2 /*return*/, result];\n }\n });\n });\n };\n return OpenAgent;\n}());\n/**\n * Builds an instance of Agent and waits a delay required for a proper operation.\n */\nfunction load(_a) {\n var _b = (_a === void 0 ? {} : _a).delayFallback, delayFallback = _b === void 0 ? 50 : _b;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0: \n // A delay is required to ensure consistent entropy components.\n // See https://github.com/fingerprintjs/fingerprintjs/issues/254\n // and https://github.com/fingerprintjs/fingerprintjs/issues/307\n // and https://github.com/fingerprintjs/fingerprintjs/commit/945633e7c5f67ae38eb0fea37349712f0e669b18\n // A proper deadline is unknown. Let it be twice the fallback timeout so that both cases have the same average time.\n return [4 /*yield*/, requestIdleCallbackIfAvailable(delayFallback, delayFallback * 2)];\n case 1:\n // A delay is required to ensure consistent entropy components.\n // See https://github.com/fingerprintjs/fingerprintjs/issues/254\n // and https://github.com/fingerprintjs/fingerprintjs/issues/307\n // and https://github.com/fingerprintjs/fingerprintjs/commit/945633e7c5f67ae38eb0fea37349712f0e669b18\n // A proper deadline is unknown. Let it be twice the fallback timeout so that both cases have the same average time.\n _c.sent();\n return [2 /*return*/, new OpenAgent()];\n }\n });\n });\n}\n\n// The default export is a syntax sugar (`import * as FP from '...' → import FP from '...'`).\n// It should contain all the public exported values.\nvar index = { load: load, hashComponents: hashComponents, componentsToDebugString: componentsToDebugString };\n// The exports below are for private usage. They may change unexpectedly. Use them at your own risk.\n/** Not documented, out of Semantic Versioning, usage is at your own risk */\nvar murmurX64Hash128 = x64hash128;\n\nexport default index;\nexport { componentsToDebugString, getComponents, hashComponents, isChromium, isDesktopSafari, isEdgeHTML, isGecko, isTrident, isWebKit, load, murmurX64Hash128 };\n","import FingerprintJS from '@fingerprintjs/fingerprintjs';\nimport { cache } from '@clearscore-group/lib.helpers.cache';\nimport device from '@clearscore-group/lib.helpers.device';\n\n// eslint-disable-next-line import/no-mutable-exports\nconst fingerprint = {\n component: [],\n hash: 'server',\n calculate: function fingerprintPromise() {\n return FingerprintJS.load()\n .then((fp) => fp.get())\n .then((components) => components.visitorId);\n },\n};\n\n(async () => {\n const fp = await FingerprintJS.load();\n const results = await fp.get();\n\n const {\n colorDepth,\n screenResolution,\n availableScreenResolution,\n plugins,\n fonts,\n canvas,\n audio,\n touchSupport,\n ...components\n } = results.components;\n\n const extendedComponents = {\n ...components,\n osAndBrowser: { value: device.DEVICE_NAME },\n };\n\n const visitorId = FingerprintJS.hashComponents(extendedComponents);\n\n fingerprint.hash = visitorId;\n fingerprint.components = extendedComponents;\n cache.device = {\n hash: fingerprint.hash,\n components: fingerprint.components,\n };\n})();\n\nexport default fingerprint;\n","import canUseDom from '@clearscore-group/lib.helpers.can-use-dom';\nimport { removeAnonymousCookie, orchestrateAnonymousCookie } from '@clearscore-group/lib.helpers.cookies';\n\n/**\n * Make sure segment exists adn has that function\n * @param {String} fcnName - Function name\n * @return {boolean} does the fucntion exist\n */\nexport function hasSegmentFunction(fcnName) {\n return canUseDom() ? window.analytics && typeof window.analytics[fcnName] === 'function' : false;\n}\n\n/**\n * Get the user anonymousID\n * @return {String} the user anonymousId\n */\nexport function getAnonymousId() {\n return orchestrateAnonymousCookie();\n}\n\n/**\n * Reset the user is including anonymousID\n * @return {void}\n */\nexport function resetUser() {\n removeAnonymousCookie();\n if (hasSegmentFunction('reset')) {\n window.analytics.reset();\n }\n}\n\n/**\n * Export the segment library by default\n */\nexport default canUseDom() ? window.analytics : false;\n","import createAction from '@clearscore-group/lib.helpers.create-action';\nimport createRequestPayload from '@clearscore-group/lib.helpers.create-request-payload';\nimport getEnv from '@clearscore-group/lib.helpers.envs';\nimport getDevice from '@clearscore-group/lib.helpers.device';\nimport fingerprint from '@clearscore-group/lib.helpers.device-fingerprinting';\nimport {\n getPublisherCookieUTM,\n publisherCookieIsSentToBackend,\n markPublisherCookieAsSentToBackend,\n} from '@clearscore-group/lib.helpers.cookies';\nimport { getAnonymousId } from '@clearscore-group/lib.helpers.segment';\nimport {\n SET_SESSION,\n LOGIN_OAUTH_AUTHORISE,\n LOGIN_OAUTH_SUBMIT,\n TIMEOUT_SUCCESS,\n LOGOUT_SUBMIT,\n CLEAR_SESSION,\n SET_USER_ROLE,\n LOGIN_OAUTH_REFRESH,\n NATIVE_SET_SESSION,\n} from '@clearscore-group/lib.constants.session-action-types';\n\n/**\n * Get the extra payload to add to requests containing the\n * user's UTM data (if any, and not sent already), and\n * mark cookie as \"sent\" if found so we don't send again\n */\nconst getMarketingIntentPayload = () => {\n const utmParams = getPublisherCookieUTM();\n\n if (Object.entries(utmParams).length > 0 && !publisherCookieIsSentToBackend(utmParams)) {\n markPublisherCookieAsSentToBackend(utmParams);\n\n return {\n utm_parameters: utmParams,\n };\n }\n\n return {};\n};\n\n/*\n * Send action for global login\n *\n * @param {Object} data - object containing required properties\n * @param {String} data.email - users uuid\n * @param {String} data.password - users password\n * @todo: remove conditional when oAuth is out\n */\nexport const login = (data, meta) =>\n createAction(\n LOGIN_OAUTH_SUBMIT,\n createRequestPayload(\n 'international',\n '/login-service/v3/authorise',\n 'post',\n {\n ...(getEnv('SSO_AGENT_ID') && { agent_id: navigator?.userAgent }),\n response_type: 'code', // its always code\n client_type: 'internal', // its always internal\n client_id: getEnv('OAUTH_CLIENT_ID'),\n device_id: fingerprint.hash,\n device_type: getDevice(), // Desktop\n device_name: getDevice.DEVICE_NAME, // Browser Name\n refresh_token_ttl: getEnv('OAUTH_REFRESH_TLL'), // default life of refresh token\n ...data,\n },\n meta,\n ),\n );\n\n/*\n * Auth code for a refresh_token and session_token\n *\n * @param {Object} data - object containing required properties\n * @param {String} data.email - users uuid\n * @param {String} data.password - users password\n */\nexport const authorise = (data, meta) =>\n createAction(\n LOGIN_OAUTH_AUTHORISE,\n createRequestPayload(\n 'international',\n '/login-service/v3/token',\n 'post',\n {\n grant_type: 'authorization_code',\n client_type: 'internal',\n client_id: getEnv('OAUTH_CLIENT_ID'),\n device_id: fingerprint.hash,\n session_id: getAnonymousId(),\n ...getMarketingIntentPayload(),\n ...data,\n },\n meta,\n ),\n );\n\n/*\n * Refresh oauth tokens\n *\n * @param {Object} data - object containing required properties\n */\nexport const refreshToken = (data, meta) =>\n createAction(\n LOGIN_OAUTH_REFRESH,\n createRequestPayload(\n 'international',\n '/login-service/v3/token',\n 'post',\n {\n grant_type: 'refresh_token',\n client_type: 'internal',\n client_id: getEnv('OAUTH_CLIENT_ID'),\n device_id: fingerprint.hash,\n session_id: getAnonymousId(),\n ...getMarketingIntentPayload(),\n ...data,\n },\n meta,\n ),\n );\n\n/*\n * Manually set the session data\n *\n * @param {string} data.accountId - users uuid\n * @param {string} data.sessionToken - unique session token\n */\nexport const setSession = (data) =>\n createAction(SET_SESSION, { accountId: '', sessionToken: data.accessToken || data.access_token || '', ...data });\n\n/*\n * Manually set the native session, we should never listen to this action\n *\n * @param {string} data.accountId - users uuid\n * @param {string} data.sessionToken - unique session token\n */\nexport const setNativeSession = (data) =>\n createAction(NATIVE_SET_SESSION, {\n accountId: '',\n sessionToken: data.accessToken || data.access_token || '',\n ...data,\n });\n\nexport const timeout = () => createAction(TIMEOUT_SUCCESS);\nexport const clearSession = () => createAction(CLEAR_SESSION);\n\nexport const logout = () => createAction(LOGOUT_SUBMIT);\n\nexport const setUserRole = ({ role }) => createAction(SET_USER_ROLE, { role });\n","export const PROFILE_STATUSES = {\n NONE: 'NONE',\n BAV: 'BAV',\n CREATE_ACCOUNT: 'CREATE_ACCOUNT',\n CARD_REQD: 'CARD_REQD',\n CHALLENGE: 'CHALLENGE',\n CHOICE_KBA_BAV: 'CHOICE_KBA_BAV',\n CREATE_ACCOUNT_FAIL: 'CREATE_ACCOUNT_FAIL',\n DOC_PENDING: 'DOC_PENDING',\n DOC_REJECTED: 'DOC_REJECTED',\n DOC_SECURITY: 'DOC_SECURITY',\n DOC_VERIFY: 'DOC_VERIFY',\n ERROR: 'ERROR',\n FAIL: 'FAIL',\n ID_CHECK: 'ID_CHECK',\n INCORRECT_PHONE_NUMBER: 'INCORRECT_PHONE_NUMBER',\n INCORRECT_EMAIL_ADDRESS: 'INCORRECT_EMAIL_ADDRESS',\n KBA: 'KBA',\n KBA_BLOCKED: 'KBA_BLOCKED',\n MISSING_ADDRESS: 'MISSING_ADDRESS',\n NO_FILE: 'NO_FILE',\n OTP: 'OTP',\n OTP_EMAIL: 'OTP_EMAIL',\n OTP_MASKED: 'OTP_MASKED',\n OTP_MASKED_EMAIL: 'OTP_MASKED_EMAIL',\n OTP_PHONE_OR_EMAIL: 'OTP_PHONE_OR_EMAIL',\n PASS: 'PASS',\n REVIEW_DVS: 'REVIEW_DVS',\n TEMP_NO_FILE: 'TEMP_NO_FILE',\n TEMP_PARTIAL_MATCH: 'TEMP_PARTIAL_MATCH',\n THIN_FILE: 'THIN_FILE',\n UNVERIFIED: 'UNVERIFIED',\n WAIT_72_HOURS: 'WAIT_72_HOURS',\n PASSED_DVS: 'PASSED_DVS',\n BUREAU_CONSENT: 'BUREAU_CONSENT',\n};\n\nexport const PROFILE_FAILURE_REASONS = {\n FAIL1: 'FAIL1',\n FAIL2: 'FAIL2',\n FAIL3: 'FAIL3',\n FAIL4: 'FAIL4',\n FAIL5: 'FAIL5',\n BAV_REQUIRED: 'BAV_REQUIRED',\n DOC_FILED_BAV: 'DOC_FILED_BAV',\n DOC_REQUIRED: 'DOC_REQUIRED',\n DOC_RESUBMIT: 'DOC_RESUBMIT',\n DOC_SUBMITTED: 'DOC_SUBMITTED',\n DOC_CIFAS: 'DOC_CIFAS',\n PARTIAL_MATCH_FAIL: 'PARTIAL_MATCH_FAIL',\n FRAUD_RISK: 'FRAUD_RISK',\n BAN: 'BAN',\n DVS_NO_MATCH: 'DVS_NO_MATCH',\n OTP_FAILED: 'OTP_FAILED',\n};\n\nexport const DUPLOCK_ROUTES = {\n DUP_LOCKED: '/reg/duplock',\n DUPLOCK_BAV: '/reg/duplock-bav',\n DUPLOCK_RECOVERY: '/reg/duplock-recovery',\n};\n\nexport const DUPLOCK_STATUSES = {\n DUP_LOCKED: 'DUP_LOCKED',\n DUPLOCK_BAV: 'DUPLOCK_BAV',\n DUPLOCK_RECOVERY: 'DUPLOCK_RECOVERY',\n};\n\nexport const ACCOUNT_STATUSES = {\n BLOCKED: 'BLOCKED',\n ACTIVE: 'ACTIVE',\n INACTIVE: 'INACTIVE',\n PASS: 'PASS',\n TEMP_LOCKED: 'TEMP_LOCKED',\n LOCKED: 'LOCKED',\n DUP_LOCKED: 'DUP_LOCKED',\n SEC_LOCKED: 'SEC_LOCKED',\n};\n\nexport const RESUBMIT_STATUS = {\n idvStatus: PROFILE_STATUSES.THIN_FILE,\n idvReason: 'DOC_RESUBMIT',\n};\n\nexport const DOCUMENTS_UPLOAD_STATUSES = [PROFILE_STATUSES.DOC_VERIFY, PROFILE_STATUSES.DOC_PENDING];\n\nexport const OPT_STATUSES = [\n PROFILE_STATUSES.ID_CHECK,\n PROFILE_STATUSES.OTP,\n PROFILE_STATUSES.OTP_MASKED,\n PROFILE_STATUSES.INCORRECT_PHONE_NUMBER,\n];\n\nexport const GB_PASS_STATUSES = [PROFILE_STATUSES.PASS, PROFILE_STATUSES.NO_FILE];\n\nexport const GB_REGISTRATION_STATUSES = [\n PROFILE_STATUSES.CREATE_ACCOUNT,\n PROFILE_STATUSES.CREATE_ACCOUNT_FAIL,\n PROFILE_STATUSES.FAIL,\n PROFILE_STATUSES.MISSING_ADDRESS,\n PROFILE_STATUSES.ID_CHECK,\n PROFILE_STATUSES.UNVERIFIED,\n PROFILE_STATUSES.KBA,\n PROFILE_STATUSES.DOC_VERIFY,\n PROFILE_STATUSES.DOC_PENDING,\n PROFILE_STATUSES.THIN_FILE,\n PROFILE_STATUSES.CHOICE_KBA_BAV,\n PROFILE_STATUSES.TEMP_NO_FILE,\n PROFILE_STATUSES.TEMP_PARTIAL_MATCH,\n PROFILE_STATUSES.BAV,\n PROFILE_STATUSES.DOC_REJECTED,\n PROFILE_STATUSES.DOC_SECURITY,\n PROFILE_STATUSES.WAIT_72_HOURS,\n];\n\nexport const EMPLOYMENT_STATUSES = {\n SALARIED: 'SALARIED',\n SELF_EMPLOYED_BUSINESS: 'SELF_EMPLOYED_BUSINESS',\n SELF_EMPLOYED_PROFESSIONAL: 'SELF_EMPLOYED_PROFESSIONAL',\n STUDENT: 'STUDENT',\n RETIRED: 'RETIRED',\n UNEMPLOYED: 'UNEMPLOYED',\n FT_EMPLOYED: 'FT_EMPLOYED',\n PT_EMPLOYED: 'PT_EMPLOYED',\n WORK_AT_HOME: 'WORK_AT_HOME',\n SELF_EMPLOYED: 'SELF_EMPLOYED',\n};\n\nexport const RESIDENTIAL_STATUSES = {\n HOMEOWNER: 'HOMEOWNER',\n PRIVATE_TENANT: 'PRIVATE_TENANT',\n COUNCIL_TENANT: 'COUNCIL_TENANT',\n WITH_PARENTS: 'WITH_PARENTS',\n RDP_TENANT: 'RDP_TENANT',\n};\n","export const UNAUTHORISED = 'unauthorised';\nexport const AUTHORISED = 'authorised';\nexport const PROSPECT = 'prospect';\nexport const PENDING = 'pending';\n","import * as requestStatuses from '@clearscore-group/lib.constants.request-statuses';\nimport { getSessionCookie } from '@clearscore-group/lib.helpers.cookies';\nimport { PROFILE_STATUSES, ACCOUNT_STATUSES } from '@clearscore-group/lib.constants.profile-statuses';\nimport * as roles from '@clearscore-group/lib.constants.role-statuses';\nimport { types as profileTypes } from '@clearscore-group/lib.redux.profile';\nimport * as types from '@clearscore-group/lib.constants.session-action-types';\n\n/**\n * List of all statuses for userRole AUTHORISED\n */\nexport const AUTHED_IDV_STATUSES = [PROFILE_STATUSES.PASS, PROFILE_STATUSES.THIN_FILE, PROFILE_STATUSES.NO_FILE];\n\nconst getProfileFetchSuccessRole = (payload) => {\n const { accountIDVStatus, failureReason, userStatus } = payload || {};\n\n if (AUTHED_IDV_STATUSES.includes(accountIDVStatus) && !failureReason && userStatus === ACCOUNT_STATUSES.ACTIVE) {\n return roles.AUTHORISED;\n }\n\n return roles.PROSPECT;\n};\n\nconst sessionToken = getSessionCookie();\n\n// @todo: This conditional is added to allow old consumers (native apps, etc) to continue working\n// once native stop being hybrid this code can be removed.\nif (sessionToken) {\n sessionToken.accountId = sessionToken.username;\n delete sessionToken.username;\n}\n\nconst role = sessionToken ? roles.PENDING : roles.UNAUTHORISED;\n\nconst initialState = sessionToken ? { role, meta: {}, error: null } : {};\n\nexport default (state = initialState, action = {}) => {\n const { type, payload } = action;\n switch (type) {\n case types.SET_USER_ROLE:\n return {\n ...state,\n role: payload.role,\n };\n case profileTypes.PROFILE_FETCH:\n return {\n ...state,\n role: roles.PENDING,\n };\n case profileTypes.PROFILE_FETCH_SUCCESS:\n return {\n ...state,\n role: getProfileFetchSuccessRole(payload),\n };\n case types.LOGIN_OAUTH_SUBMIT_ERROR:\n case types.LOGIN_OAUTH_AUTHORISE_ERROR:\n return {\n ...state,\n meta: {},\n error: payload ? payload.data : null,\n status: requestStatuses.ERROR,\n role: roles.UNAUTHORISED,\n };\n case types.CLEAR_SESSION:\n case types.TIMEOUT_SUCCESS:\n case types.LOGOUT_SUBMIT:\n return {\n meta: {},\n error: null,\n status: requestStatuses.INITIAL,\n };\n default:\n return state;\n }\n};\n","/* eslint-disable import/prefer-default-export */\nimport sessionDomain from './session.domain';\n\nexport const domain = sessionDomain;\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getAccountId = (state) => resolveProp('session.auth.accountId', state);\n\nexport default createSelector(getAccountId, (accountId) => accountId);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\nimport * as roles from '@clearscore-group/lib.constants.role-statuses';\n\nconst authRole = (state) => resolveProp('session.role', state) || roles.UNAUTHORISED;\n\nexport default createSelector(authRole, (role) => role);\n","import { createSelector } from 'reselect';\nimport resolveRequest, { getRequestStatus } from '@clearscore-group/lib.helpers.resolve-request';\n\nconst getSessionStatus = (state) => resolveRequest(state, 'session.status');\n\nexport default createSelector(getSessionStatus, (sessionStatus) => ({\n fetch: getRequestStatus(sessionStatus),\n}));\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getError = (state) => resolveProp('session.error', state);\n\nexport default createSelector(getError, (error) => error);\n","import sessiongetAccountId from './session.getAccountId';\nimport sessionGetAuthRole from './session.getAuthRole';\nimport sessionGetPredicate from './session.getPredicate';\nimport sessionGetError from './session.getError';\n\nexport const getAccountId = sessiongetAccountId;\nexport const getAuthRole = sessionGetAuthRole;\nexport const getPredicate = sessionGetPredicate;\nexport const getError = sessionGetError;\n","import * as sessionTypes from '@clearscore-group/lib.constants.session-action-types';\n\nimport * as actionsImport from './session.actions';\nimport * as reducersImport from './reducers';\nimport * as selectorsImport from './selectors';\n\nexport const actions = actionsImport;\nexport const reducers = reducersImport;\nexport const selectors = selectorsImport;\nexport const types = sessionTypes;\n","import { createSelector } from 'reselect';\nimport { selectors as sessionSelectors } from '@clearscore-group/lib.redux.session';\nimport * as roles from '@clearscore-group/lib.constants.role-statuses';\n\nimport routesSelector from './routesSelector';\n\nconst getRoutesRole = ({ userRole }) => {\n if (userRole === roles.AUTHORISED) {\n return roles.AUTHORISED;\n } else if (userRole === roles.PROSPECT) {\n return roles.PROSPECT;\n } else if (userRole === roles.PENDING) {\n return roles.PENDING;\n }\n return roles.UNAUTHORISED;\n};\n\nexport default createSelector(routesSelector, sessionSelectors.getAuthRole, (routes, userRole) => {\n const loggedOut = userRole === roles.UNAUTHORISED;\n const isProspect = userRole === roles.PROSPECT;\n const isPending = userRole === roles.PENDING;\n const loggedIn = userRole === roles.AUTHORISED;\n const userRoutes = routes.filter((route) => {\n // TODO: We should add `isPending` role to the relevant routes render-engine config\n if (isPending && route.path.includes('login')) return true;\n\n return route.role.includes(getRoutesRole({ userRole }));\n });\n\n return { routes: userRoutes, loggedIn, loggedOut, isProspect, isPending };\n});\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getCurrentRouteMarket = (state) => resolveProp('routes.current', state) || 'global';\n\nexport default createSelector(getCurrentRouteMarket, (market) => market);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getSegmentation = (state) => resolveProp('entities.routeSegments.segmentation', state) || { groups: [] };\n\nexport default createSelector(getSegmentation, (segmentation) => segmentation);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getRoutes = (state) => resolveProp('entities.routes.byId', state) || {};\nconst filterTakeoverRoutes = (routes) =>\n Object.entries(routes)\n .filter(([, { isTakeover }]) => isTakeover)\n .reduce(\n (takeoverRoutes, [route]) => ({\n ...takeoverRoutes,\n [route]: routes[route],\n }),\n {},\n );\n\nexport default createSelector(getRoutes, filterTakeoverRoutes);\n","import routeSelectorImport from './routeSelector';\nimport routesSelectorImport from './routesSelector';\nimport getSubMenuImport from './routesSubMenu';\nimport getRouteByIDVStatusImport from './getRouteByIDVStatus';\nimport getCurrentRouteImport from './getCurrentRoute';\nimport getCurrentPathImport from './getCurrentPath';\nimport getRoutesByStageImport from './routesStagesSelector';\nimport containsMarketPathImport from './containsMarketPath';\nimport areRoutesLoadedImport from './areRoutesLoaded';\nimport getUserRoleRoutesImport from './getUserRoleRoutes';\nimport getCurrentRouteMarketImport from './getCurrentRouteMarket';\nimport getSegmentationImport from './getSegmentation';\nimport getTakeoverRoutesImport from './getTakeoverRoutes';\n\nexport const routeSelector = routeSelectorImport;\nexport const routesSelector = routesSelectorImport;\nexport const getSubMenu = getSubMenuImport;\nexport const getRouteByIDVStatus = getRouteByIDVStatusImport;\nexport const getCurrentRoute = getCurrentRouteImport;\nexport const getCurrentPath = getCurrentPathImport;\nexport const getRoutesByStage = getRoutesByStageImport;\nexport const containsMarketPath = containsMarketPathImport;\nexport const areRoutesLoaded = areRoutesLoadedImport;\nexport const getUserRoleRoutes = getUserRoleRoutesImport;\nexport const getCurrentRouteMarket = getCurrentRouteMarketImport;\nexport const getSegmentation = getSegmentationImport;\nexport const getTakeoverRoutes = getTakeoverRoutesImport;\n","import { ROUTES_REINITIALISE } from './types';\nimport { reinitialiseRoutes } from './actions';\n\nexport * as reducers from './reducer';\nexport * as selectors from './selectors';\nexport const types = { ROUTES_REINITIALISE };\nexport const actions = { reinitialiseRoutes };\n","import createAction from '@clearscore-group/lib.helpers.create-action';\n\nimport { ROUTES_REINITIALISE } from './types';\n\n/* eslint-disable import/prefer-default-export */\nexport const reinitialiseRoutes = (routes, accountIDVStatus, market, segmentation) =>\n createAction(ROUTES_REINITIALISE, { routes, accountIDVStatus, market, segmentation });\n","import type { ReactElement } from 'react';\nimport React, { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useRouteMatch } from 'react-router-dom';\nimport LazyLoadComponent from '@clearscore-group/lib.flux-core.lazy-load';\nimport { selectors as routesSelectors } from '@clearscore-group/lib.redux.routes';\n\nimport type { VerticalTakeoverTriggerProps } from '../vertical-takeover.types';\n\nexport interface VerticalTakeoverLazyRendererProps {\n name: string;\n onClose: VoidFunction;\n triggerProps: VerticalTakeoverTriggerProps;\n}\n\ninterface TakeoverRoutes {\n [key: string]: Record;\n}\n\nconst VerticalTakeoverLazyRenderer = ({\n name,\n onClose,\n triggerProps,\n}: VerticalTakeoverLazyRendererProps): ReactElement | null => {\n const match = useRouteMatch();\n const takeoverRoutes: TakeoverRoutes = useSelector(routesSelectors.getTakeoverRoutes);\n const component = useMemo(\n () => Object.values(takeoverRoutes ?? {}).find(({ name: verticalName }) => name === verticalName),\n [name, takeoverRoutes],\n );\n return component ? (\n \n ) : null;\n};\n\nexport default VerticalTakeoverLazyRenderer;\n","import type { ReactElement, ReactNode } from 'react';\nimport React, { useContext, useState, useCallback, useMemo } from 'react';\nimport { createGlobalContext } from '@clearscore-group/lib.helpers.create-global-context';\n\nimport { VERTICAL_TAKEOVER_CONTEXT_NAME } from './lib/constants';\nimport VerticalTakeoverLazyRenderer from './components/vertical-takeover-lazy-renderer';\nimport type { VerticalTakeoverContextValue, VerticalTakeoverTriggerProps } from './vertical-takeover.types';\n\nconst VerticalTakeoverContext = createGlobalContext(\n VERTICAL_TAKEOVER_CONTEXT_NAME,\n undefined,\n);\n\ninterface VerticalTakeoverProviderProps {\n children: ReactNode;\n}\n\nconst VerticalTakeoverProvider = ({ children }: VerticalTakeoverProviderProps): ReactElement => {\n const [verticalName, setVerticalName] = useState();\n const [triggerProps, setTriggerProps] = useState();\n\n const trigger = useCallback((name: string, input: VerticalTakeoverTriggerProps): void => {\n setVerticalName(name);\n setTriggerProps(input);\n }, []);\n\n const close = useCallback(() => {\n setVerticalName(undefined);\n setTriggerProps(undefined);\n }, []);\n\n const value: VerticalTakeoverContextValue = useMemo(\n () => ({\n close,\n trigger,\n }),\n [close, trigger],\n );\n\n return (\n \n {children}\n {verticalName && triggerProps && (\n \n )}\n \n );\n};\n\nconst useVerticalTakeoverContext = (): VerticalTakeoverContextValue | undefined => {\n const context = useContext(VerticalTakeoverContext);\n return context;\n};\n\nexport { VerticalTakeoverProvider, useVerticalTakeoverContext };\n","import { isBrowserBundle } from './env.js';\n\n/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n */\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nfunction isNodeEnv() {\n // explicitly check for browser bundles as those can be optimized statically\n // by terser/rollup.\n return (\n !isBrowserBundle() &&\n Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\nfunction dynamicRequire(mod, request) {\n return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @returns possibly required module\n */\nfunction loadModule(moduleName) {\n let mod;\n\n try {\n mod = dynamicRequire(module, moduleName);\n } catch (e) {\n // no-empty\n }\n\n try {\n const { cwd } = dynamicRequire(module, 'process');\n mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`) ;\n } catch (e) {\n // no-empty\n }\n\n return mod;\n}\n\nexport { dynamicRequire, isNodeEnv, loadModule };\n//# sourceMappingURL=node.js.map\n","/*\n * This module exists for optimizations in the build process through rollup and terser. We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `logger` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These fags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nfunction isBrowserBundle() {\n return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\nexport { isBrowserBundle };\n//# sourceMappingURL=env.js.map\n","import { isNodeEnv } from './node.js';\n\n/** Internal */\n\nvar fallbackGlobalObject = {};\n\n/**\n * Safely get global scope object\n *\n * @returns Global scope object\n */\nfunction getGlobalObject() {\n return (\n isNodeEnv()\n ? global\n : typeof window !== 'undefined' ? window : typeof self !== 'undefined'\n ? self\n : fallbackGlobalObject\n ) ;\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `getGlobalObject`'s return value\n * @returns the singleton\n */\nfunction getGlobalSingleton(name, creator, obj) {\n var global = (obj || getGlobalObject()) ;\n var __SENTRY__ = (global.__SENTRY__ = global.__SENTRY__ || {});\n var singleton = __SENTRY__[name] || (__SENTRY__[name] = creator());\n return singleton;\n}\n\nexport { getGlobalObject, getGlobalSingleton };\n//# sourceMappingURL=global.js.map\n","var objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isError(wat) {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat, className) {\n return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isErrorEvent(wat) {\n return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMError(wat) {\n return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMException(wat) {\n return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isString(wat) {\n return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPrimitive(wat) {\n return wat === null || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPlainObject(wat) {\n return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isEvent(wat) {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isElement(wat) {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isRegExp(wat) {\n return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nfunction isThenable(wat) {\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isSyntheticEvent(wat) {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value is NaN\n * {@link isNaN}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isNaN(wat) {\n return typeof wat === 'number' && wat !== wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nfunction isInstanceOf(wat, base) {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isNaN, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable };\n//# sourceMappingURL=is.js.map\n","import { getGlobalObject, getGlobalSingleton } from './global.js';\n\n// TODO: Implement different loggers for different environments\nvar global = getGlobalObject();\n\n/** Prefix for logging strings */\nvar PREFIX = 'Sentry Logger ';\n\nvar CONSOLE_LEVELS = ['debug', 'info', 'warn', 'error', 'log', 'assert', 'trace'] ;\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nfunction consoleSandbox(callback) {\n var global = getGlobalObject();\n\n if (!('console' in global)) {\n return callback();\n }\n\n var originalConsole = global.console ;\n var wrappedLevels = {};\n\n // Restore all wrapped console methods\n CONSOLE_LEVELS.forEach(level => {\n // TODO(v7): Remove this check as it's only needed for Node 6\n var originalWrappedFunc =\n originalConsole[level] && (originalConsole[level] ).__sentry_original__;\n if (level in global.console && originalWrappedFunc) {\n wrappedLevels[level] = originalConsole[level] ;\n originalConsole[level] = originalWrappedFunc ;\n }\n });\n\n try {\n return callback();\n } finally {\n // Revert restoration to wrapped state\n Object.keys(wrappedLevels).forEach(level => {\n originalConsole[level] = wrappedLevels[level ];\n });\n }\n}\n\nfunction makeLogger() {\n let enabled = false;\n var logger = {\n enable: () => {\n enabled = true;\n },\n disable: () => {\n enabled = false;\n },\n };\n\n if ((typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__)) {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = (...args) => {\n if (enabled) {\n consoleSandbox(() => {\n global.console[name](`${PREFIX}[${name}]:`, ...args);\n });\n }\n };\n });\n } else {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = () => undefined;\n });\n }\n\n return logger ;\n}\n\n// Ensure we only have a single logger instance, even if multiple versions of @sentry/utils are being used\nlet logger;\nif ((typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__)) {\n logger = getGlobalSingleton('logger', makeLogger);\n} else {\n logger = makeLogger();\n}\n\nexport { CONSOLE_LEVELS, consoleSandbox, logger };\n//# sourceMappingURL=logger.js.map\n","import { htmlTreeAsString } from './browser.js';\nimport { isError, isEvent, isInstanceOf, isElement, isPlainObject, isPrimitive } from './is.js';\nimport { truncate } from './string.js';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, )` or `origMethod.apply(this, [])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nfunction fill(source, name, replacementFactory) {\n if (!(name in source)) {\n return;\n }\n\n var original = source[name] ;\n var wrapped = replacementFactory(original) ;\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (typeof wrapped === 'function') {\n try {\n markFunctionWrapped(wrapped, original);\n } catch (_Oo) {\n // This can throw if multiple fill happens on a global object like XMLHttpRequest\n // Fixes https://github.com/getsentry/sentry-javascript/issues/2043\n }\n }\n\n source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nfunction addNonEnumerableProperty(obj, name, value) {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value: value,\n writable: true,\n configurable: true,\n });\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nfunction markFunctionWrapped(wrapped, original) {\n var proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n}\n\n/**\n * This extracts the original function if available. See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nfunction getOriginalFunction(func) {\n return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nfunction urlEncode(object) {\n return Object.keys(object)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n * an Error.\n */\nfunction convertToPlainObject(\n value,\n)\n\n {\n if (isError(value)) {\n return {\n message: value.message,\n name: value.name,\n stack: value.stack,\n ...getOwnProperties(value),\n };\n } else if (isEvent(value)) {\n var newObj\n\n = {\n type: value.type,\n target: serializeEventTarget(value.target),\n currentTarget: serializeEventTarget(value.currentTarget),\n ...getOwnProperties(value),\n };\n\n if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n newObj.detail = value.detail;\n }\n\n return newObj;\n } else {\n return value;\n }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target) {\n try {\n return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n } catch (_oO) {\n return '';\n }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj) {\n if (typeof obj === 'object' && obj !== null) {\n var extractedProps = {};\n for (var property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n extractedProps[property] = (obj )[property];\n }\n }\n return extractedProps;\n } else {\n return {};\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception, maxLength = 40) {\n var keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n\n if (!keys.length) {\n return '[object has no keys]';\n }\n\n if (keys[0].length >= maxLength) {\n return truncate(keys[0], maxLength);\n }\n\n for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n var serialized = keys.slice(0, includedKeys).join(', ');\n if (serialized.length > maxLength) {\n continue;\n }\n if (includedKeys === keys.length) {\n return serialized;\n }\n return truncate(serialized, maxLength);\n }\n\n return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nfunction dropUndefinedKeys(inputValue) {\n // This map keeps track of what already visited nodes map to.\n // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n // references as the input object.\n var memoizationMap = new Map();\n\n // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n if (isPlainObject(inputValue)) {\n // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n var memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n var returnValue = {};\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n for (var key of Object.keys(inputValue)) {\n if (typeof inputValue[key] !== 'undefined') {\n returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n }\n }\n\n return returnValue ;\n }\n\n if (Array.isArray(inputValue)) {\n // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n var memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n var returnValue = [];\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n inputValue.forEach((item) => {\n returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n });\n\n return returnValue ;\n }\n\n return inputValue;\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nfunction objectify(wat) {\n let objectified;\n switch (true) {\n case wat === undefined || wat === null:\n objectified = new String(wat);\n break;\n\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case typeof wat === 'symbol' || typeof wat === 'bigint':\n objectified = Object(wat);\n break;\n\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n objectified = new (wat ).constructor(wat);\n break;\n\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify, urlEncode };\n//# sourceMappingURL=object.js.map\n","import { getGlobalObject } from './global.js';\nimport { addNonEnumerableProperty } from './object.js';\nimport { snipLine } from './string.js';\n\n/**\n * Extended Window interface that allows for Crypto API usage in IE browsers\n */\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nfunction uuid4() {\n var global = getGlobalObject() ;\n var crypto = (global.crypto || global.msCrypto) ;\n\n if (crypto && crypto.randomUUID) {\n return crypto.randomUUID().replace(/-/g, '');\n }\n\n var getRandomByte =\n crypto && crypto.getRandomValues ? () => crypto.getRandomValues(new Uint8Array(1))[0] : () => Math.random() * 16;\n\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n return (([1e7] ) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n ((c ) ^ ((getRandomByte() & 15) >> ((c ) / 4))).toString(16),\n );\n}\n\nfunction getFirstException(event) {\n return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nfunction getEventDescription(event) {\n const { message, event_id: eventId } = event;\n if (message) {\n return message;\n }\n\n var firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return `${firstException.type}: ${firstException.value}`;\n }\n return firstException.type || firstException.value || eventId || '';\n }\n return eventId || '';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nfunction addExceptionTypeValue(event, value, type) {\n var exception = (event.exception = event.exception || {});\n var values = (exception.values = exception.values || []);\n var firstException = (values[0] = values[0] || {});\n if (!firstException.value) {\n firstException.value = value || '';\n }\n if (!firstException.type) {\n firstException.type = type || 'Error';\n }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nfunction addExceptionMechanism(event, newMechanism) {\n var firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n\n var defaultMechanism = { type: 'generic', handled: true };\n var currentMechanism = firstException.mechanism;\n firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n if (newMechanism && 'data' in newMechanism) {\n var mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n firstException.mechanism.data = mergedData;\n }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nvar SEMVER_REGEXP =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nfunction parseSemver(input) {\n var match = input.match(SEMVER_REGEXP) || [];\n var major = parseInt(match[1], 10);\n var minor = parseInt(match[2], 10);\n var patch = parseInt(match[3], 10);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4],\n };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n var lineno = frame.lineno || 0;\n var maxLines = lines.length;\n var sourceLine = Math.max(Math.min(maxLines, lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line) => snipLine(line, 0));\n\n frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nfunction checkOrSetAlreadyCaught(exception) {\n if (exception && (exception ).__sentry_captured__) {\n return true;\n }\n\n try {\n // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n // `ExtraErrorData` integration\n addNonEnumerableProperty(exception , '__sentry_captured__', true);\n } catch (err) {\n // `exception` is a primitive, so we can't mark it seen\n }\n\n return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nfunction arrayify(maybeArray) {\n return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, arrayify, checkOrSetAlreadyCaught, getEventDescription, parseSemver, uuid4 };\n//# sourceMappingURL=misc.js.map\n","import { isThenable } from './is.js';\n\n/** SyncPromise internal states */\nvar States; (function (States) {\n /** Pending */\n var PENDING = 0; States[States[\"PENDING\"] = PENDING] = \"PENDING\";\n /** Resolved / OK */\n var RESOLVED = 1; States[States[\"RESOLVED\"] = RESOLVED] = \"RESOLVED\";\n /** Rejected / Error */\n var REJECTED = 2; States[States[\"REJECTED\"] = REJECTED] = \"REJECTED\";\n})(States || (States = {}));\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nfunction resolvedSyncPromise(value) {\n return new SyncPromise(resolve => {\n resolve(value);\n });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nfunction rejectedSyncPromise(reason) {\n return new SyncPromise((_, reject) => {\n reject(reason);\n });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise {\n __init() {this._state = States.PENDING;}\n __init2() {this._handlers = [];}\n \n\n constructor(\n executor,\n ) {;SyncPromise.prototype.__init.call(this);SyncPromise.prototype.__init2.call(this);SyncPromise.prototype.__init3.call(this);SyncPromise.prototype.__init4.call(this);SyncPromise.prototype.__init5.call(this);SyncPromise.prototype.__init6.call(this);\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n\n /** JSDoc */\n then(\n onfulfilled,\n onrejected,\n ) {\n return new SyncPromise((resolve, reject) => {\n this._handlers.push([\n false,\n result => {\n if (!onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result );\n } else {\n try {\n resolve(onfulfilled(result));\n } catch (e) {\n reject(e);\n }\n }\n },\n reason => {\n if (!onrejected) {\n reject(reason);\n } else {\n try {\n resolve(onrejected(reason));\n } catch (e) {\n reject(e);\n }\n }\n },\n ]);\n this._executeHandlers();\n });\n }\n\n /** JSDoc */\n catch(\n onrejected,\n ) {\n return this.then(val => val, onrejected);\n }\n\n /** JSDoc */\n finally(onfinally) {\n return new SyncPromise((resolve, reject) => {\n let val;\n let isRejected;\n\n return this.then(\n value => {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n },\n reason => {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n },\n ).then(() => {\n if (isRejected) {\n reject(val);\n return;\n }\n\n resolve(val );\n });\n });\n }\n\n /** JSDoc */\n __init3() {this._resolve = (value) => {\n this._setResult(States.RESOLVED, value);\n };}\n\n /** JSDoc */\n __init4() {this._reject = (reason) => {\n this._setResult(States.REJECTED, reason);\n };}\n\n /** JSDoc */\n __init5() {this._setResult = (state, value) => {\n if (this._state !== States.PENDING) {\n return;\n }\n\n if (isThenable(value)) {\n void (value ).then(this._resolve, this._reject);\n return;\n }\n\n this._state = state;\n this._value = value;\n\n this._executeHandlers();\n };}\n\n /** JSDoc */\n __init6() {this._executeHandlers = () => {\n if (this._state === States.PENDING) {\n return;\n }\n\n var cachedHandlers = this._handlers.slice();\n this._handlers = [];\n\n cachedHandlers.forEach(handler => {\n if (handler[0]) {\n return;\n }\n\n if (this._state === States.RESOLVED) {\n handler[1](this._value );\n }\n\n if (this._state === States.REJECTED) {\n handler[2](this._value);\n }\n\n handler[0] = true;\n });\n };}\n}\n\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise };\n//# sourceMappingURL=syncpromise.js.map\n","import { getGlobalObject } from './global.js';\nimport { dynamicRequire, isNodeEnv } from './node.js';\n\n/**\n * An object that can return the current timestamp in seconds since the UNIX epoch.\n */\n\n/**\n * A TimestampSource implementation for environments that do not support the Performance Web API natively.\n *\n * Note that this TimestampSource does not use a monotonic clock. A call to `nowSeconds` may return a timestamp earlier\n * than a previously returned value. We do not try to emulate a monotonic behavior in order to facilitate debugging. It\n * is more obvious to explain \"why does my span have negative duration\" than \"why my spans have zero duration\".\n */\nvar dateTimestampSource = {\n nowSeconds: () => Date.now() / 1000,\n};\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction getBrowserPerformance() {\n const { performance } = getGlobalObject();\n if (!performance || !performance.now) {\n return undefined;\n }\n\n // Replace performance.timeOrigin with our own timeOrigin based on Date.now().\n //\n // This is a partial workaround for browsers reporting performance.timeOrigin such that performance.timeOrigin +\n // performance.now() gives a date arbitrarily in the past.\n //\n // Additionally, computing timeOrigin in this way fills the gap for browsers where performance.timeOrigin is\n // undefined.\n //\n // The assumption that performance.timeOrigin + performance.now() ~= Date.now() is flawed, but we depend on it to\n // interact with data coming out of performance entries.\n //\n // Note that despite recommendations against it in the spec, browsers implement the Performance API with a clock that\n // might stop when the computer is asleep (and perhaps under other circumstances). Such behavior causes\n // performance.timeOrigin + performance.now() to have an arbitrary skew over Date.now(). In laptop computers, we have\n // observed skews that can be as long as days, weeks or months.\n //\n // See https://github.com/getsentry/sentry-javascript/issues/2590.\n //\n // BUG: despite our best intentions, this workaround has its limitations. It mostly addresses timings of pageload\n // transactions, but ignores the skew built up over time that can aversely affect timestamps of navigation\n // transactions of long-lived web pages.\n var timeOrigin = Date.now() - performance.now();\n\n return {\n now: () => performance.now(),\n timeOrigin,\n };\n}\n\n/**\n * Returns the native Performance API implementation from Node.js. Returns undefined in old Node.js versions that don't\n * implement the API.\n */\nfunction getNodePerformance() {\n try {\n var perfHooks = dynamicRequire(module, 'perf_hooks') ;\n return perfHooks.performance;\n } catch (_) {\n return undefined;\n }\n}\n\n/**\n * The Performance API implementation for the current platform, if available.\n */\nvar platformPerformance = isNodeEnv() ? getNodePerformance() : getBrowserPerformance();\n\nvar timestampSource =\n platformPerformance === undefined\n ? dateTimestampSource\n : {\n nowSeconds: () => (platformPerformance.timeOrigin + platformPerformance.now()) / 1000,\n };\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nvar dateTimestampInSeconds = dateTimestampSource.nowSeconds.bind(dateTimestampSource);\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * See `usingPerformanceAPI` to test whether the Performance API is used.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nvar timestampInSeconds = timestampSource.nowSeconds.bind(timestampSource);\n\n// Re-exported with an old name for backwards-compatibility.\nvar timestampWithMs = timestampInSeconds;\n\n/**\n * A boolean that is true when timestampInSeconds uses the Performance API to produce monotonic timestamps.\n */\nvar usingPerformanceAPI = platformPerformance !== undefined;\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nlet _browserPerformanceTimeOriginMode;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nvar browserPerformanceTimeOrigin = (() => {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n\n const { performance } = getGlobalObject();\n if (!performance || !performance.now) {\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n\n var threshold = 3600 * 1000;\n var performanceNow = performance.now();\n var dateNow = Date.now();\n\n // if timeOrigin isn't available set delta to threshold so it isn't used\n var timeOriginDelta = performance.timeOrigin\n ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n : threshold;\n var timeOriginIsReliable = timeOriginDelta < threshold;\n\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n var navigationStart = performance.timing && performance.timing.navigationStart;\n var hasNavigationStart = typeof navigationStart === 'number';\n // if navigationStart isn't available set delta to threshold so it isn't used\n var navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n var navigationStartIsReliable = navigationStartDelta < threshold;\n\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n } else {\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n }\n\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n})();\n\nexport { _browserPerformanceTimeOriginMode, browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds, timestampWithMs, usingPerformanceAPI };\n//# sourceMappingURL=time.js.map\n","import { timestampInSeconds, uuid4, dropUndefinedKeys } from '@sentry/utils';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nfunction makeSession(context) {\n // Both timestamp and started are in seconds since the UNIX epoch.\n var startingTime = timestampInSeconds();\n\n var session = {\n sid: uuid4(),\n init: true,\n timestamp: startingTime,\n started: startingTime,\n duration: 0,\n status: 'ok',\n errors: 0,\n ignoreDuration: false,\n toJSON: () => sessionToJSON(session),\n };\n\n if (context) {\n updateSession(session, context);\n }\n\n return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\nfunction updateSession(session, context = {}) {\n if (context.user) {\n if (!session.ipAddress && context.user.ip_address) {\n session.ipAddress = context.user.ip_address;\n }\n\n if (!session.did && !context.did) {\n session.did = context.user.id || context.user.email || context.user.username;\n }\n }\n\n session.timestamp = context.timestamp || timestampInSeconds();\n\n if (context.ignoreDuration) {\n session.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n session.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== undefined) {\n session.init = context.init;\n }\n if (!session.did && context.did) {\n session.did = `${context.did}`;\n }\n if (typeof context.started === 'number') {\n session.started = context.started;\n }\n if (session.ignoreDuration) {\n session.duration = undefined;\n } else if (typeof context.duration === 'number') {\n session.duration = context.duration;\n } else {\n var duration = session.timestamp - session.started;\n session.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n session.release = context.release;\n }\n if (context.environment) {\n session.environment = context.environment;\n }\n if (!session.ipAddress && context.ipAddress) {\n session.ipAddress = context.ipAddress;\n }\n if (!session.userAgent && context.userAgent) {\n session.userAgent = context.userAgent;\n }\n if (typeof context.errors === 'number') {\n session.errors = context.errors;\n }\n if (context.status) {\n session.status = context.status;\n }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n * this function will keep the previously set status, unless it was `'ok'` in which case\n * it is changed to `'exited'`.\n */\nfunction closeSession(session, status) {\n let context = {};\n if (status) {\n context = { status };\n } else if (session.status === 'ok') {\n context = { status: 'exited' };\n }\n\n updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session) {\n return dropUndefinedKeys({\n sid: `${session.sid}`,\n init: session.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(session.started * 1000).toISOString(),\n timestamp: new Date(session.timestamp * 1000).toISOString(),\n status: session.status,\n errors: session.errors,\n did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n duration: session.duration,\n attrs: {\n release: session.release,\n environment: session.environment,\n ip_address: session.ipAddress,\n user_agent: session.userAgent,\n },\n });\n}\n\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","import { isPlainObject, dateTimestampInSeconds, getGlobalSingleton, SyncPromise, logger, isThenable, arrayify } from '@sentry/utils';\nimport { updateSession } from './session.js';\n\n/**\n * Absolute maximum number of breadcrumbs added to an event.\n * The `maxBreadcrumbs` option cannot be higher than this value.\n */\nvar MAX_BREADCRUMBS = 100;\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nclass Scope {\n /** Flag if notifying is happening. */\n \n\n /** Callback for client to receive scope changes. */\n \n\n /** Callback list that will be called after {@link applyToEvent}. */\n \n\n /** Array of breadcrumbs. */\n \n\n /** User */\n \n\n /** Tags */\n \n\n /** Extra */\n \n\n /** Contexts */\n \n\n /** Attachments */\n \n\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n \n\n /** Fingerprint */\n \n\n /** Severity */\n \n\n /** Transaction Name */\n \n\n /** Span */\n \n\n /** Session */\n \n\n /** Request Mode Session Status */\n \n\n constructor() {\n this._notifyingListeners = false;\n this._scopeListeners = [];\n this._eventProcessors = [];\n this._breadcrumbs = [];\n this._attachments = [];\n this._user = {};\n this._tags = {};\n this._extra = {};\n this._contexts = {};\n this._sdkProcessingMetadata = {};\n }\n\n /**\n * Inherit values from the parent scope.\n * @param scope to clone.\n */\n static clone(scope) {\n var newScope = new Scope();\n if (scope) {\n newScope._breadcrumbs = [...scope._breadcrumbs];\n newScope._tags = { ...scope._tags };\n newScope._extra = { ...scope._extra };\n newScope._contexts = { ...scope._contexts };\n newScope._user = scope._user;\n newScope._level = scope._level;\n newScope._span = scope._span;\n newScope._session = scope._session;\n newScope._transactionName = scope._transactionName;\n newScope._fingerprint = scope._fingerprint;\n newScope._eventProcessors = [...scope._eventProcessors];\n newScope._requestSession = scope._requestSession;\n newScope._attachments = [...scope._attachments];\n }\n return newScope;\n }\n\n /**\n * Add internal on change listener. Used for sub SDKs that need to store the scope.\n * @hidden\n */\n addScopeListener(callback) {\n this._scopeListeners.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n addEventProcessor(callback) {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setUser(user) {\n this._user = user || {};\n if (this._session) {\n updateSession(this._session, { user });\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getUser() {\n return this._user;\n }\n\n /**\n * @inheritDoc\n */\n getRequestSession() {\n return this._requestSession;\n }\n\n /**\n * @inheritDoc\n */\n setRequestSession(requestSession) {\n this._requestSession = requestSession;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTags(tags) {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTag(key, value) {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtras(extras) {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtra(key, extra) {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setFingerprint(fingerprint) {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setLevel(\n level,\n ) {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTransactionName(name) {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setContext(key, context) {\n if (context === null) {\n delete this._contexts[key];\n } else {\n this._contexts = { ...this._contexts, [key]: context };\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setSpan(span) {\n this._span = span;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getSpan() {\n return this._span;\n }\n\n /**\n * @inheritDoc\n */\n getTransaction() {\n // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n // have a pointer to the currently-active transaction.\n var span = this.getSpan();\n return span && span.transaction;\n }\n\n /**\n * @inheritDoc\n */\n setSession(session) {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getSession() {\n return this._session;\n }\n\n /**\n * @inheritDoc\n */\n update(captureContext) {\n if (!captureContext) {\n return this;\n }\n\n if (typeof captureContext === 'function') {\n var updatedScope = (captureContext )(this);\n return updatedScope instanceof Scope ? updatedScope : this;\n }\n\n if (captureContext instanceof Scope) {\n this._tags = { ...this._tags, ...captureContext._tags };\n this._extra = { ...this._extra, ...captureContext._extra };\n this._contexts = { ...this._contexts, ...captureContext._contexts };\n if (captureContext._user && Object.keys(captureContext._user).length) {\n this._user = captureContext._user;\n }\n if (captureContext._level) {\n this._level = captureContext._level;\n }\n if (captureContext._fingerprint) {\n this._fingerprint = captureContext._fingerprint;\n }\n if (captureContext._requestSession) {\n this._requestSession = captureContext._requestSession;\n }\n } else if (isPlainObject(captureContext)) {\n captureContext = captureContext ;\n this._tags = { ...this._tags, ...captureContext.tags };\n this._extra = { ...this._extra, ...captureContext.extra };\n this._contexts = { ...this._contexts, ...captureContext.contexts };\n if (captureContext.user) {\n this._user = captureContext.user;\n }\n if (captureContext.level) {\n this._level = captureContext.level;\n }\n if (captureContext.fingerprint) {\n this._fingerprint = captureContext.fingerprint;\n }\n if (captureContext.requestSession) {\n this._requestSession = captureContext.requestSession;\n }\n }\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n clear() {\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._span = undefined;\n this._session = undefined;\n this._notifyScopeListeners();\n this._attachments = [];\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addBreadcrumb(breadcrumb, maxBreadcrumbs) {\n var maxCrumbs = typeof maxBreadcrumbs === 'number' ? Math.min(maxBreadcrumbs, MAX_BREADCRUMBS) : MAX_BREADCRUMBS;\n\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n\n var mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n };\n this._breadcrumbs = [...this._breadcrumbs, mergedBreadcrumb].slice(-maxCrumbs);\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n clearBreadcrumbs() {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addAttachment(attachment) {\n this._attachments.push(attachment);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getAttachments() {\n return this._attachments;\n }\n\n /**\n * @inheritDoc\n */\n clearAttachments() {\n this._attachments = [];\n return this;\n }\n\n /**\n * Applies data from the scope to the event and runs all event processors on it.\n *\n * @param event Event\n * @param hint Object containing additional information about the original exception, for use by the event processors.\n * @hidden\n */\n applyToEvent(event, hint = {}) {\n if (this._extra && Object.keys(this._extra).length) {\n event.extra = { ...this._extra, ...event.extra };\n }\n if (this._tags && Object.keys(this._tags).length) {\n event.tags = { ...this._tags, ...event.tags };\n }\n if (this._user && Object.keys(this._user).length) {\n event.user = { ...this._user, ...event.user };\n }\n if (this._contexts && Object.keys(this._contexts).length) {\n event.contexts = { ...this._contexts, ...event.contexts };\n }\n if (this._level) {\n event.level = this._level;\n }\n if (this._transactionName) {\n event.transaction = this._transactionName;\n }\n\n // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n if (this._span) {\n event.contexts = { trace: this._span.getTraceContext(), ...event.contexts };\n var transactionName = this._span.transaction && this._span.transaction.name;\n if (transactionName) {\n event.tags = { transaction: transactionName, ...event.tags };\n }\n }\n\n this._applyFingerprint(event);\n\n event.breadcrumbs = [...(event.breadcrumbs || []), ...this._breadcrumbs];\n event.breadcrumbs = event.breadcrumbs.length > 0 ? event.breadcrumbs : undefined;\n\n event.sdkProcessingMetadata = { ...event.sdkProcessingMetadata, ...this._sdkProcessingMetadata };\n\n return this._notifyEventProcessors([...getGlobalEventProcessors(), ...this._eventProcessors], event, hint);\n }\n\n /**\n * Add data which will be accessible during event processing but won't get sent to Sentry\n */\n setSDKProcessingMetadata(newData) {\n this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n return this;\n }\n\n /**\n * This will be called after {@link applyToEvent} is finished.\n */\n _notifyEventProcessors(\n processors,\n event,\n hint,\n index = 0,\n ) {\n return new SyncPromise((resolve, reject) => {\n var processor = processors[index];\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n var result = processor({ ...event }, hint) ;\n\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&\n processor.id &&\n result === null &&\n logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n if (isThenable(result)) {\n void result\n .then(final => this._notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n .then(null, reject);\n } else {\n void this._notifyEventProcessors(processors, result, hint, index + 1)\n .then(resolve)\n .then(null, reject);\n }\n }\n });\n }\n\n /**\n * This will be called on every set call.\n */\n _notifyScopeListeners() {\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(callback => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n\n /**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\n _applyFingerprint(event) {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n // If we have something on the scope, then merge it with event\n if (this._fingerprint) {\n event.fingerprint = event.fingerprint.concat(this._fingerprint);\n }\n\n // If we have no data at all, remove empty array default\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n }\n}\n\n/**\n * Returns the global event processors.\n */\nfunction getGlobalEventProcessors() {\n return getGlobalSingleton('globalEventProcessors', () => []);\n}\n\n/**\n * Add a EventProcessor to be kept globally.\n * @param callback EventProcessor to add\n */\nfunction addGlobalEventProcessor(callback) {\n getGlobalEventProcessors().push(callback);\n}\n\nexport { Scope, addGlobalEventProcessor };\n//# sourceMappingURL=scope.js.map\n","import { uuid4, dateTimestampInSeconds, consoleSandbox, logger, getGlobalObject, getGlobalSingleton, isNodeEnv } from '@sentry/utils';\nimport { Scope } from './scope.js';\nimport { closeSession, makeSession, updateSession } from './session.js';\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nvar API_VERSION = 4;\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nvar DEFAULT_BREADCRUMBS = 100;\n\n/**\n * A layer in the process stack.\n * @hidden\n */\n\n/**\n * @inheritDoc\n */\nclass Hub {\n /** Is a {@link Layer}[] containing the client and scope */\n __init() {this._stack = [{}];}\n\n /** Contains the last event id of a captured event. */\n \n\n /**\n * Creates a new instance of the hub, will push one {@link Layer} into the\n * internal stack on creation.\n *\n * @param client bound to the hub.\n * @param scope bound to the hub.\n * @param version number, higher number means higher priority.\n */\n constructor(client, scope = new Scope(), _version = API_VERSION) {;this._version = _version;Hub.prototype.__init.call(this);\n this.getStackTop().scope = scope;\n if (client) {\n this.bindClient(client);\n }\n }\n\n /**\n * @inheritDoc\n */\n isOlderThan(version) {\n return this._version < version;\n }\n\n /**\n * @inheritDoc\n */\n bindClient(client) {\n var top = this.getStackTop();\n top.client = client;\n if (client && client.setupIntegrations) {\n client.setupIntegrations();\n }\n }\n\n /**\n * @inheritDoc\n */\n pushScope() {\n // We want to clone the content of prev scope\n var scope = Scope.clone(this.getScope());\n this.getStack().push({\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * @inheritDoc\n */\n popScope() {\n if (this.getStack().length <= 1) return false;\n return !!this.getStack().pop();\n }\n\n /**\n * @inheritDoc\n */\n withScope(callback) {\n var scope = this.pushScope();\n try {\n callback(scope);\n } finally {\n this.popScope();\n }\n }\n\n /**\n * @inheritDoc\n */\n getClient() {\n return this.getStackTop().client ;\n }\n\n /** Returns the scope of the top stack. */\n getScope() {\n return this.getStackTop().scope;\n }\n\n /** Returns the scope stack for domains or the process. */\n getStack() {\n return this._stack;\n }\n\n /** Returns the topmost scope layer in the order domain > local > process. */\n getStackTop() {\n return this._stack[this._stack.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n captureException(exception, hint) {\n var eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n var syntheticException = new Error('Sentry syntheticException');\n this._withClient((client, scope) => {\n client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n scope,\n );\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureMessage(\n message,\n level,\n hint,\n ) {\n var eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n var syntheticException = new Error(message);\n this._withClient((client, scope) => {\n client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n scope,\n );\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureEvent(event, hint) {\n var eventId = hint && hint.event_id ? hint.event_id : uuid4();\n if (event.type !== 'transaction') {\n this._lastEventId = eventId;\n }\n\n this._withClient((client, scope) => {\n client.captureEvent(event, { ...hint, event_id: eventId }, scope);\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n lastEventId() {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n addBreadcrumb(breadcrumb, hint) {\n const { scope, client } = this.getStackTop();\n\n if (!scope || !client) return;\n\n const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n (client.getOptions && client.getOptions()) || {};\n\n if (maxBreadcrumbs <= 0) return;\n\n var timestamp = dateTimestampInSeconds();\n var mergedBreadcrumb = { timestamp, ...breadcrumb };\n var finalBreadcrumb = beforeBreadcrumb\n ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) )\n : mergedBreadcrumb;\n\n if (finalBreadcrumb === null) return;\n\n scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n }\n\n /**\n * @inheritDoc\n */\n setUser(user) {\n var scope = this.getScope();\n if (scope) scope.setUser(user);\n }\n\n /**\n * @inheritDoc\n */\n setTags(tags) {\n var scope = this.getScope();\n if (scope) scope.setTags(tags);\n }\n\n /**\n * @inheritDoc\n */\n setExtras(extras) {\n var scope = this.getScope();\n if (scope) scope.setExtras(extras);\n }\n\n /**\n * @inheritDoc\n */\n setTag(key, value) {\n var scope = this.getScope();\n if (scope) scope.setTag(key, value);\n }\n\n /**\n * @inheritDoc\n */\n setExtra(key, extra) {\n var scope = this.getScope();\n if (scope) scope.setExtra(key, extra);\n }\n\n /**\n * @inheritDoc\n */\n setContext(name, context) {\n var scope = this.getScope();\n if (scope) scope.setContext(name, context);\n }\n\n /**\n * @inheritDoc\n */\n configureScope(callback) {\n const { scope, client } = this.getStackTop();\n if (scope && client) {\n callback(scope);\n }\n }\n\n /**\n * @inheritDoc\n */\n run(callback) {\n var oldHub = makeMain(this);\n try {\n callback(this);\n } finally {\n makeMain(oldHub);\n }\n }\n\n /**\n * @inheritDoc\n */\n getIntegration(integration) {\n var client = this.getClient();\n if (!client) return null;\n try {\n return client.getIntegration(integration);\n } catch (_oO) {\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n return null;\n }\n }\n\n /**\n * @inheritDoc\n */\n startTransaction(context, customSamplingContext) {\n return this._callExtensionMethod('startTransaction', context, customSamplingContext);\n }\n\n /**\n * @inheritDoc\n */\n traceHeaders() {\n return this._callExtensionMethod('traceHeaders');\n }\n\n /**\n * @inheritDoc\n */\n captureSession(endSession = false) {\n // both send the update and pull the session from the scope\n if (endSession) {\n return this.endSession();\n }\n\n // only send the update\n this._sendSessionUpdate();\n }\n\n /**\n * @inheritDoc\n */\n endSession() {\n var layer = this.getStackTop();\n var scope = layer && layer.scope;\n var session = scope && scope.getSession();\n if (session) {\n closeSession(session);\n }\n this._sendSessionUpdate();\n\n // the session is over; take it off of the scope\n if (scope) {\n scope.setSession();\n }\n }\n\n /**\n * @inheritDoc\n */\n startSession(context) {\n const { scope, client } = this.getStackTop();\n const { release, environment } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n var global = getGlobalObject();\n const { userAgent } = global.navigator || {};\n\n var session = makeSession({\n release,\n environment,\n ...(scope && { user: scope.getUser() }),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n if (scope) {\n // End existing session if there's one\n var currentSession = scope.getSession && scope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n this.endSession();\n\n // Afterwards we set the new session on the scope\n scope.setSession(session);\n }\n\n return session;\n }\n\n /**\n * Returns if default PII should be sent to Sentry and propagated in ourgoing requests\n * when Tracing is used.\n */\n shouldSendDefaultPii() {\n var client = this.getClient();\n var options = client && client.getOptions();\n return Boolean(options && options.sendDefaultPii);\n }\n\n /**\n * Sends the current Session on the scope\n */\n _sendSessionUpdate() {\n const { scope, client } = this.getStackTop();\n if (!scope) return;\n\n var session = scope.getSession();\n if (session) {\n if (client && client.captureSession) {\n client.captureSession(session);\n }\n }\n }\n\n /**\n * Internal helper function to call a method on the top client if it exists.\n *\n * @param method The method to call on the client.\n * @param args Arguments to pass to the client function.\n */\n _withClient(callback) {\n const { scope, client } = this.getStackTop();\n if (client) {\n callback(client, scope);\n }\n }\n\n /**\n * Calls global extension method and binding current instance to the function call\n */\n // @ts-ignore Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n _callExtensionMethod(method, ...args) {\n var carrier = getMainCarrier();\n var sentry = carrier.__SENTRY__;\n if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n return sentry.extensions[method].apply(this, args);\n }\n (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n }\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nfunction getMainCarrier() {\n var carrier = getGlobalObject();\n carrier.__SENTRY__ = carrier.__SENTRY__ || {\n extensions: {},\n hub: undefined,\n };\n return carrier;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\nfunction makeMain(hub) {\n var registry = getMainCarrier();\n var oldHub = getHubFromCarrier(registry);\n setHubOnCarrier(registry, hub);\n return oldHub;\n}\n\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\nfunction getCurrentHub() {\n // Get main carrier (global for every environment)\n var registry = getMainCarrier();\n\n // If there's no hub, or its an old API, assign a new one\n if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n setHubOnCarrier(registry, new Hub());\n }\n\n // Prefer domains over global if they are there (applicable only to Node environment)\n if (isNodeEnv()) {\n return getHubFromActiveDomain(registry);\n }\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n}\n\n/**\n * Try to read the hub from an active domain, and fallback to the registry if one doesn't exist\n * @returns discovered hub\n */\nfunction getHubFromActiveDomain(registry) {\n try {\n var sentry = getMainCarrier().__SENTRY__;\n var activeDomain = sentry && sentry.extensions && sentry.extensions.domain && sentry.extensions.domain.active;\n\n // If there's no active domain, just return global hub\n if (!activeDomain) {\n return getHubFromCarrier(registry);\n }\n\n // If there's no hub on current domain, or it's an old API, assign a new one\n if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(API_VERSION)) {\n var registryHubTopStack = getHubFromCarrier(registry).getStackTop();\n setHubOnCarrier(activeDomain, new Hub(registryHubTopStack.client, Scope.clone(registryHubTopStack.scope)));\n }\n\n // Return hub that lives on a domain\n return getHubFromCarrier(activeDomain);\n } catch (_Oo) {\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n }\n}\n\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier) {\n return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\nfunction getHubFromCarrier(carrier) {\n return getGlobalSingleton('hub', () => new Hub(), carrier);\n}\n\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\nfunction setHubOnCarrier(carrier, hub) {\n if (!carrier) return false;\n var __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n __SENTRY__.hub = hub;\n return true;\n}\n\nexport { API_VERSION, Hub, getCurrentHub, getHubFromCarrier, getMainCarrier, makeMain, setHubOnCarrier };\n//# sourceMappingURL=hub.js.map\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","import { getCurrentHub } from '@sentry/browser';\nimport { timestampWithMs } from '@sentry/utils';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport * as React from 'react';\nimport { REACT_MOUNT_OP, REACT_UPDATE_OP, REACT_RENDER_OP } from './constants.js';\n\nvar _jsxFileName = \"/home/runner/work/sentry-javascript/sentry-javascript/packages/react/src/profiler.tsx\";\nvar UNKNOWN_COMPONENT = 'unknown';\n\n/**\n * The Profiler component leverages Sentry's Tracing integration to generate\n * spans based on component lifecycles.\n */\nclass Profiler extends React.Component {\n /**\n * The span of the mount activity\n * Made protected for the React Native SDK to access\n */\n __init() {this._mountSpan = undefined;}\n /**\n * The span that represents the duration of time between shouldComponentUpdate and componentDidUpdate\n */\n __init2() {this._updateSpan = undefined;}\n\n static __initStatic() {this.defaultProps = {\n disabled: false,\n includeRender: true,\n includeUpdates: true,\n };}\n\n constructor(props) {\n super(props);Profiler.prototype.__init.call(this);Profiler.prototype.__init2.call(this);;\n const { name, disabled = false } = this.props;\n\n if (disabled) {\n return;\n }\n\n var activeTransaction = getActiveTransaction();\n if (activeTransaction) {\n this._mountSpan = activeTransaction.startChild({\n description: `<${name}>`,\n op: REACT_MOUNT_OP,\n });\n }\n }\n\n // If a component mounted, we can finish the mount activity.\n componentDidMount() {\n if (this._mountSpan) {\n this._mountSpan.finish();\n }\n }\n\n shouldComponentUpdate({ updateProps, includeUpdates = true }) {\n // Only generate an update span if includeUpdates is true, if there is a valid mountSpan,\n // and if the updateProps have changed. It is ok to not do a deep equality check here as it is expensive.\n // We are just trying to give baseline clues for further investigation.\n if (includeUpdates && this._mountSpan && updateProps !== this.props.updateProps) {\n // See what props haved changed between the previous props, and the current props. This is\n // set as data on the span. We just store the prop keys as the values could be potenially very large.\n var changedProps = Object.keys(updateProps).filter(k => updateProps[k] !== this.props.updateProps[k]);\n if (changedProps.length > 0) {\n var now = timestampWithMs();\n this._updateSpan = this._mountSpan.startChild({\n data: {\n changedProps,\n },\n description: `<${this.props.name}>`,\n op: REACT_UPDATE_OP,\n startTimestamp: now,\n });\n }\n }\n\n return true;\n }\n\n componentDidUpdate() {\n if (this._updateSpan) {\n this._updateSpan.finish();\n this._updateSpan = undefined;\n }\n }\n\n // If a component is unmounted, we can say it is no longer on the screen.\n // This means we can finish the span representing the component render.\n componentWillUnmount() {\n const { name, includeRender = true } = this.props;\n\n if (this._mountSpan && includeRender) {\n // If we were able to obtain the spanId of the mount activity, we should set the\n // next activity as a child to the component mount activity.\n this._mountSpan.startChild({\n description: `<${name}>`,\n endTimestamp: timestampWithMs(),\n op: REACT_RENDER_OP,\n startTimestamp: this._mountSpan.endTimestamp,\n });\n }\n }\n\n render() {\n return this.props.children;\n }\n} Profiler.__initStatic();\n\n/**\n * withProfiler is a higher order component that wraps a\n * component in a {@link Profiler} component. It is recommended that\n * the higher order component be used over the regular {@link Profiler} component.\n *\n * @param WrappedComponent component that is wrapped by Profiler\n * @param options the {@link ProfilerProps} you can pass into the Profiler\n */\nfunction withProfiler(\n WrappedComponent,\n // We do not want to have `updateProps` given in options, it is instead filled through the HOC.\n options,\n) {\n var componentDisplayName =\n (options && options.name) || WrappedComponent.displayName || WrappedComponent.name || UNKNOWN_COMPONENT;\n\n var Wrapped = (props) => (\n React.createElement(Profiler, { ...options, name: componentDisplayName, updateProps: props, __self: this, __source: {fileName: _jsxFileName, lineNumber: 143}}\n , React.createElement(WrappedComponent, { ...props, __self: this, __source: {fileName: _jsxFileName, lineNumber: 144}} )\n )\n );\n\n Wrapped.displayName = `profiler(${componentDisplayName})`;\n\n // Copy over static methods from Wrapped component to Profiler HOC\n // See: https://reactjs.org/docs/higher-order-components.html#static-methods-must-be-copied-over\n hoistNonReactStatics(Wrapped, WrappedComponent);\n return Wrapped;\n}\n\n/**\n *\n * `useProfiler` is a React hook that profiles a React component.\n *\n * Requires React 16.8 or above.\n * @param name displayName of component being profiled\n */\nfunction useProfiler(\n name,\n options = {\n disabled: false,\n hasRenderSpan: true,\n },\n) {\n const [mountSpan] = React.useState(() => {\n if (options && options.disabled) {\n return undefined;\n }\n\n var activeTransaction = getActiveTransaction();\n if (activeTransaction) {\n return activeTransaction.startChild({\n description: `<${name}>`,\n op: REACT_MOUNT_OP,\n });\n }\n\n return undefined;\n });\n\n React.useEffect(() => {\n if (mountSpan) {\n mountSpan.finish();\n }\n\n return () => {\n if (mountSpan && options.hasRenderSpan) {\n mountSpan.startChild({\n description: `<${name}>`,\n endTimestamp: timestampWithMs(),\n op: REACT_RENDER_OP,\n startTimestamp: mountSpan.endTimestamp,\n });\n }\n };\n // We only want this to run once.\n }, []);\n}\n\n/** Grabs active transaction off scope */\nfunction getActiveTransaction(hub = getCurrentHub()) {\n if (hub) {\n var scope = hub.getScope();\n if (scope) {\n return scope.getTransaction() ;\n }\n }\n\n return undefined;\n}\n\nexport { Profiler, UNKNOWN_COMPONENT, getActiveTransaction, useProfiler, withProfiler };\n//# sourceMappingURL=profiler.js.map\n","import { useEffect, useRef } from 'react';\n\nfunction usePrevious(value) {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\n\nexport default usePrevious;\n","/* eslint-disable camelcase */\nimport { getSessionCookie } from '@clearscore-group/lib.helpers.cookies';\n\nexport const getSessionToken = () => {\n const { access_token, sessionToken } = getSessionCookie() || {};\n return access_token || sessionToken;\n};\n\nexport const getRefreshToken = () => {\n const { refresh_token } = getSessionCookie() || {};\n return refresh_token;\n};\n\nexport const getStructuredData = () => {\n const { access_token, sessionToken, refresh_token } = getSessionCookie() || {};\n return { authToken: access_token || sessionToken, refreshToken: refresh_token };\n};\n","function e(e){this.message=e}e.prototype=new Error,e.prototype.name=\"InvalidCharacterError\";var r=\"undefined\"!=typeof window&&window.atob&&window.atob.bind(window)||function(r){var t=String(r).replace(/=+$/,\"\");if(t.length%4==1)throw new e(\"'atob' failed: The string to be decoded is not correctly encoded.\");for(var n,o,a=0,i=0,c=\"\";o=t.charAt(i++);~o&&(n=a%4?64*n+o:o,a++%4)?c+=String.fromCharCode(255&n>>(-2*a&6)):0)o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".indexOf(o);return c};function t(e){var t=e.replace(/-/g,\"+\").replace(/_/g,\"/\");switch(t.length%4){case 0:break;case 2:t+=\"==\";break;case 3:t+=\"=\";break;default:throw\"Illegal base64url string!\"}try{return function(e){return decodeURIComponent(r(e).replace(/(.)/g,(function(e,r){var t=r.charCodeAt(0).toString(16).toUpperCase();return t.length<2&&(t=\"0\"+t),\"%\"+t})))}(t)}catch(e){return r(t)}}function n(e){this.message=e}function o(e,r){if(\"string\"!=typeof e)throw new n(\"Invalid token specified\");var o=!0===(r=r||{}).header?0:1;try{return JSON.parse(t(e.split(\".\")[o]))}catch(e){throw new n(\"Invalid token specified: \"+e.message)}}n.prototype=new Error,n.prototype.name=\"InvalidTokenError\";export default o;export{n as InvalidTokenError};\n//# sourceMappingURL=jwt-decode.esm.js.map\n","const blacklistedSearchParams = ['email', 'firstName', 'lastName', 'dob'];\n\n/* eslint-disable import/prefer-default-export */\nexport const getSanitisedUrl = () => {\n const { location } = window;\n const url = new URL(location.href);\n blacklistedSearchParams.forEach((p) => url.searchParams.delete(p));\n const search = !url.search && location.search ? '?' : url.search;\n const urlString = `${url.protocol}//${url.host}${url.pathname}${search}`;\n\n return { url: urlString, search };\n};\n","import { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { selectors as marketSelectors } from '@clearscore-group/lib.redux.market';\nimport getDevice, { getBrowser } from '@clearscore-group/lib.helpers.device';\n\nlet _device;\nconst device = () => {\n if (!_device) {\n _device = getDevice();\n }\n\n return _device;\n};\n\n/**\n * Hook to get the default segment props that must be pulled from the redux store\n */\nconst useDefaultSegmentProps = () => {\n const market = useSelector(marketSelectors.getActiveMarket);\n const browser = getBrowser();\n return useMemo(\n () => ({\n device: device(),\n cs_site: market,\n browserName: browser.name,\n browserVersion: browser.version,\n }),\n [market, browser],\n );\n};\n\nexport default useDefaultSegmentProps;\n","import { MARKETS } from '@clearscore-group/lib.config.i18n';\nimport { getSessionCookie } from '@clearscore-group/lib.helpers.cookies';\nimport type { Market } from '@clearscore-group/lib.config.i18n';\n\nconst getMarketFromPath = (): string | undefined => {\n const path = window.location.pathname;\n\n // we check 2 patterns: /market_name and /market_name/\n // e.g. /gb and /za/\n return MARKETS.find((market: string) => !!path.match(new RegExp(`\\\\/[\\b${market}\\\\b]{2}($|/)`, 'g')));\n};\n\nconst getMarketFromParams = (): string | undefined => {\n const searchParams = window.location.search;\n // we check 2 patterns: market=market_name and market=market_name?\n // e.g. market=gb and market=za?\n return MARKETS.find((market: string) => !!searchParams.match(new RegExp(`market=[\\b${market}\\\\b]{2}($|\\\\?)`, 'g')));\n};\n\n/* detecting the market from session cookie, url path and market param */\nexport const getMarket = (): Market | undefined => {\n const cookie = getSessionCookie();\n\n return cookie?.market || getMarketFromPath() || getMarketFromParams();\n};\n\nconst isObject = (value: unknown) => value && typeof value === 'object' && value.constructor === Object;\n\ntype TMarketConfig = Partial>;\ntype TMarketConfigValue = T extends TMarketConfig ? T[keyof T] : never;\n\nexport const getMarketConfig = (marketConfig: T): TMarketConfigValue => {\n if (!marketConfig || !isObject(marketConfig)) {\n throw new Error('A market config object must be provided');\n }\n const market = getMarket();\n const config = market ? marketConfig[market] : null;\n if (!config) {\n throw new Error(`Config for ${market} could not be resolved`);\n }\n return config as TMarketConfigValue;\n};\n","import axios from 'axios';\nimport getEnv from '@clearscore-group/lib.helpers.envs';\nimport { getMarket } from '@clearscore-group/lib.helpers.market';\nimport { orchestrateAnonymousCookie } from '@clearscore-group/lib.helpers.cookies';\n\nimport { getSanitisedUrl } from './helpers';\n\nconst getBaseUrl = (clientUrl) => clientUrl.replace(/@market@/gi, getMarket?.() || 'global');\n\nexport const sendToTrackingEventReceiver = async ({ name, event, uuid, props, app }) => {\n const { url, search } = getSanitisedUrl();\n const additionalProps = event === 'page' ? { path: window.location.pathname, ...props } : props;\n\n const clientUrl = getEnv('INTERNATIONAL_API_DOMAIN') ?? '';\n\n const payload = {\n ...(event === 'track' && { event: name }),\n timestamp: new Date().toISOString(),\n userId: uuid,\n anonymousId: orchestrateAnonymousCookie(),\n type: event,\n [event === 'identify' ? 'traits' : 'properties']: additionalProps,\n context: {\n page: {\n path: window.location.pathname,\n referrer: document.referrer || 'Direct',\n search,\n title: document.title,\n url,\n },\n userAgent: window.navigator.userAgent,\n locale: window.navigator.languages?.[0] ? window.navigator.languages[0] : window.navigator.language,\n },\n };\n\n await axios\n .post('te-receiver/publish', payload, {\n baseURL: getBaseUrl(clientUrl),\n headers: { 'x-cs-site': props.cs_site, 'x-cs-app': app || getEnv('APP') },\n })\n .catch(() => {});\n};\n","import { useCallback } from 'react';\nimport monitoring from '@clearscore-group/lib.helpers.monitoring';\nimport getEnv from '@clearscore-group/lib.helpers.envs';\nimport { selectors as profileSelectors } from '@clearscore-group/lib.redux.profile';\nimport { getSessionToken } from '@clearscore-group/lib.helpers.session';\nimport { useSelector } from 'react-redux';\nimport jwtDecode from 'jwt-decode';\n\nimport { getSanitisedUrl } from './lib/helpers';\nimport useDefaultSegmentProps from './lib/hooks/use-default-segment-props';\nimport { sendToTrackingEventReceiver } from './lib/tracking-event-receiver';\n\n/**\n * Get the default segment props that must be generated at event send time\n */\nconst getWindowSegmentProps = () => {\n const { url } = getSanitisedUrl();\n\n return {\n location: url,\n referrer: document.referrer || 'Direct',\n };\n};\n\nexport const TRACKING_EVENT_RECEIVER_ENABLED = 'TRACKING_EVENT_RECEIVER_ENABLED';\n\nconst getUUIDFromSession = () => {\n try {\n return jwtDecode(getSessionToken())?.sub;\n } catch (e) {\n return null;\n }\n};\n\nconst useTracking = () => {\n const defaultSegmentProps = useDefaultSegmentProps();\n const { uuid: profileUuid } = useSelector(profileSelectors.getSimple);\n const uuid = !profileUuid ? getUUIDFromSession() : profileUuid;\n\n const track = useCallback(\n ({ name, props = {}, event = 'track', onComplete, app } = {}) => {\n const hasTracking = typeof window?.analytics?.track === 'function';\n\n if (!hasTracking && monitoring.hasMonitoring()) {\n monitoring.log(`Cannot send tracking event ${name} - no window.analytics available`);\n }\n\n if (\n getEnv(TRACKING_EVENT_RECEIVER_ENABLED) === 'true' ||\n getEnv(TRACKING_EVENT_RECEIVER_ENABLED) === true\n ) {\n sendToTrackingEventReceiver({\n name,\n event,\n uuid: uuid || null,\n props: {\n ...getWindowSegmentProps(),\n ...defaultSegmentProps,\n ...props,\n },\n app,\n });\n }\n\n if (!hasTracking) {\n return;\n }\n\n let hasFiredOnComplete = false;\n\n const fallbackTimeout = setTimeout(() => {\n if (onComplete && !hasFiredOnComplete) onComplete();\n }, 100);\n\n const customOnComplete = () => {\n hasFiredOnComplete = true;\n clearTimeout(fallbackTimeout);\n onComplete();\n };\n\n window.analytics[event](\n name,\n {\n ...getWindowSegmentProps(),\n ...defaultSegmentProps,\n ...props,\n },\n // analytics.js \"options\" object - not needed for us (yet!)\n {},\n // An optional function called when the analytics request completes\n onComplete ? customOnComplete : undefined,\n );\n },\n [defaultSegmentProps],\n );\n\n return track;\n};\n\nexport default useTracking;\n","import { useCallback } from 'react';\nimport { useSelector } from 'react-redux';\nimport useTracking from '@clearscore-group/lib.hooks.use-tracking';\nimport { getCookie } from '@clearscore-group/lib.helpers.cookies';\n\nconst useScoreBand = () => useSelector((state) => state.dashboard?.data?.creditReportInfo?.scoreBand);\n\nconst useWebappTracking = () => {\n const TRACK_FBP = getCookie('_fbp');\n const TRACK_FBC = getCookie('_fbc');\n const track = useTracking();\n const scoreBand = useScoreBand();\n\n const webappTrack = useCallback(\n ({ name, props = {}, onComplete } = {}) =>\n track({\n name,\n props: {\n score_band: scoreBand,\n ...(TRACK_FBP && { fbp: TRACK_FBP }),\n ...(TRACK_FBC && { fbc: TRACK_FBC }),\n ...props,\n },\n onComplete,\n }),\n [track, scoreBand, TRACK_FBP, TRACK_FBC],\n );\n\n return webappTrack;\n};\n\nexport default useWebappTracking;\n","export const DASHBOARD_FETCH = 'CS/DASHBOARD_FETCH';\nexport const DASHBOARD_FETCH_SUCCESS = 'CS/DASHBOARD_FETCH_SUCCESS';\nexport const DASHBOARD_FETCH_ERROR = 'CS/DASHBOARD_FETCH_ERROR';\n\nexport const DASHBOARD_SERVICE_FETCH_ERROR = 'CS/DASHBOARD_SERVICE_FETCH_ERROR';\nexport const DASHBOARD_SERVICE_REPORT_NOT_FOUND_ERROR = 'CS/DASHBOARD_SERVICE_REPORT_NOT_FOUND_ERROR';\n","/* eslint-disable import/prefer-default-export */\nimport createAction from '@clearscore-group/lib.helpers.create-action';\nimport createRequestPayload from '@clearscore-group/lib.helpers.create-request-payload';\n\nimport { DASHBOARD_FETCH } from './dashboard.types';\n\n// DASHBOARD_FETCH\nexport const fetch = () =>\n createAction(DASHBOARD_FETCH, createRequestPayload('international', '/report-viewer/v2/dashboard'));\n","export const NO_FILE = 'NO_FILE';\nexport const PASS = 'PASS';\n","import * as requestStatuses from '@clearscore-group/lib.constants.request-statuses';\n\nimport { DASHBOARD_FETCH, DASHBOARD_FETCH_SUCCESS, DASHBOARD_FETCH_ERROR } from '../dashboard.types';\n\nconst initialState = {\n fetchStatus: requestStatuses.INITIAL,\n};\n\nexport default function dashboardReducer(state = initialState, action = {}) {\n const { type, payload, statusCode } = action;\n\n switch (type) {\n case DASHBOARD_FETCH:\n return {\n ...state,\n fetchStatus: requestStatuses.PENDING,\n };\n case DASHBOARD_FETCH_SUCCESS: {\n return {\n ...state,\n fetchStatus: requestStatuses.SUCCESS,\n data: payload,\n };\n }\n case DASHBOARD_FETCH_ERROR:\n return {\n ...state,\n fetchStatus: requestStatuses.ERROR,\n statusCode,\n };\n default:\n return state;\n }\n}\n","/* eslint-disable import/prefer-default-export */\nimport dashboardDomain from './dashboard.domain';\n\nexport const domain = dashboardDomain;\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getCourseSummary = (state) => resolveProp('dashboard.data.coachingSummary.courseSummary', state);\n\nexport default createSelector(getCourseSummary, (courseSummary) => ({\n courseSummary,\n}));\n","/* eslint-disable object-shorthand */\nexport const themeNames = ['alpha', 'beta', 'gamma', 'delta', 'epsilon', 'no-file'];\n\n/**\n * Simple lookup to change numeric scoreband into themes\n * @param {number} scoreband of the user\n * @return {string} theme name\n */\nexport function theme(scoreband) {\n return themeNames[scoreband] || 'default';\n}\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\nimport { theme as themes } from '@clearscore-group/lib.constants.score-bands';\n\nimport { NO_FILE } from '../dashboard.constants';\n\nconst getScore = (state) => resolveProp('dashboard.data.creditReportInfo.score', state) || 0;\nconst getScoreMax = (state) => resolveProp('dashboard.data.creditReportInfo.scoreMaxValue', state);\nconst getScoreBand = (state) => resolveProp('dashboard.data.creditReportInfo.scoreBand', state);\nconst getTheme = (state) => {\n const accountIdvStatus = resolveProp('dashboard.data.accountIDVStatus', state);\n const scoreBand = resolveProp('dashboard.data.creditReportInfo.scoreBand', state);\n const scoreBandWithNoFile = accountIdvStatus === NO_FILE ? '5' : scoreBand;\n return themes(scoreBandWithNoFile);\n};\n\nexport default createSelector(getScore, getScoreMax, getScoreBand, getTheme, (score, scoreMax, scoreBand, theme) => ({\n score,\n scoreMax,\n scoreBand,\n theme,\n}));\n","import dashboardGetCoachingSummary from './dashboard.getCoachingSummary';\nimport dashboardGetScores from './dashboard.getScores';\nimport dashboardGetReportMeta from './dashboard.getReportMeta';\nimport dashboardGetUserStatus from './dashboard.getUserStatus';\nimport dashboardGetPredicate from './dashboard.getPredicate';\nimport dashboardGetDebt from './dashboard.getDebt';\nimport dashboardGetRawData from './dashboard.getRawData';\n\nexport const getCoachingSummary = dashboardGetCoachingSummary;\nexport const getScores = dashboardGetScores;\nexport const getReportMeta = dashboardGetReportMeta;\nexport const getUserStatus = dashboardGetUserStatus;\nexport const getPredicate = dashboardGetPredicate;\nexport const getDebt = dashboardGetDebt;\nexport const getRawData = dashboardGetRawData;\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst reportIdSelector = (state) => resolveProp('dashboard.data.creditReportInfo.clientRef', state);\nconst scoreProviderSelector = (state) => resolveProp('dashboard.data.creditReportInfo.scoreProvider', state);\nconst daysUntilNextReportSelector = (state) =>\n resolveProp('dashboard.data.creditReportInfo.daysUntilNextReport', state);\nconst changedScoreSelector = (state) => resolveProp('dashboard.data.creditReportInfo.changedScore', state);\nconst numPositiveFactorsSelector = (state) =>\n resolveProp('dashboard.data.creditReportInfo.numPositiveScoreFactors', state);\nconst numNegativeFactorsSelector = (state) =>\n resolveProp('dashboard.data.creditReportInfo.numNegativeScoreFactors', state);\n\nconst daysToNextIdentificationCheckSelector = (state) =>\n resolveProp('dashboard.data.daysToNextIdentificationCheck', state);\n\nexport default createSelector(\n reportIdSelector,\n scoreProviderSelector,\n daysUntilNextReportSelector,\n changedScoreSelector,\n numPositiveFactorsSelector,\n numNegativeFactorsSelector,\n daysToNextIdentificationCheckSelector,\n (\n reportId,\n scoreProvider,\n daysUntilNextReport,\n changedScore,\n numPositiveFactors,\n numNegativeFactors,\n daysToNextIdentificationCheck,\n ) => ({\n reportId,\n scoreProvider,\n daysUntilNextReport,\n changedScore,\n numPositiveFactors,\n numNegativeFactors,\n numFactors: numPositiveFactors + numNegativeFactors,\n daysToNextIdentificationCheck,\n }),\n);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getDashboardStatus = (state) => resolveProp('dashboard.data.dashboardStatus', state);\nconst getAccountIdvStatus = (state) => resolveProp('dashboard.data.accountIDVStatus', state);\n\nexport default createSelector(getDashboardStatus, getAccountIdvStatus, (dashboardStatus, accountIDVStatus) => ({\n dashboardStatus,\n accountIDVStatus,\n}));\n","import { createSelector } from 'reselect';\nimport resolveRequest, { getRequestStatus } from '@clearscore-group/lib.helpers.resolve-request';\n\nconst getFetchStatus = (state) => resolveRequest(state, 'dashboard.fetchStatus');\nconst getFetchStatusCode = (state) => resolveRequest(state, 'dashboard.statusCode');\n\nexport default createSelector(getFetchStatus, getFetchStatusCode, (fetchStatus, statusCode) => ({\n fetch: getRequestStatus(fetchStatus, statusCode),\n}));\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getShortTermDebt = (state) =>\n resolveProp('dashboard.data.creditReportInfo.currentShortTermDebt.amount', state) || 0;\nconst getShortTermDebtChange = (state) =>\n resolveProp('dashboard.data.creditReportInfo.changeInShortTermDebt.amount', state) || 0;\nconst getShortTermCreditLimit = (state) =>\n resolveProp('dashboard.data.creditReportInfo.currentShortTermCreditLimit.amount', state) || 0;\nconst getLongTermDebt = (state) =>\n resolveProp('dashboard.data.creditReportInfo.currentLongTermDebt.amount', state) || 0;\nconst getLongTermDebtChange = (state) =>\n resolveProp('dashboard.data.creditReportInfo.changeInLongTermDebt.amount', state) || 0;\n\nexport default createSelector(\n getShortTermDebt,\n getShortTermDebtChange,\n getShortTermCreditLimit,\n getLongTermDebt,\n getLongTermDebtChange,\n (shortTermDebt, shortTermDebtChange, shortTermCreditLimit, longTermDebt, longTermDebtChange) => ({\n shortTermDebt,\n shortTermDebtChange,\n shortTermCreditLimit,\n longTermDebt,\n longTermDebtChange,\n }),\n);\n","import { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst getDashboardData = (state) => resolveProp('dashboard.data', state);\n\nexport default createSelector(getDashboardData, (data) => data);\n","import * as actionsImport from './dashboard.actions';\nimport * as constantsImport from './dashboard.constants';\nimport * as reducersImport from './reducers';\nimport * as selectorsImport from './selectors';\nimport * as typesImport from './dashboard.types';\n\nexport const actions = actionsImport;\nexport const constants = constantsImport;\nexport const reducers = reducersImport;\nexport const selectors = selectorsImport;\nexport const types = typesImport;\n","import { connect } from 'react-redux';\nimport { withRouter as _withRouter } from 'react-router-dom';\n\nconst withRouter = (useRouter) => (Component) => useRouter ? _withRouter(Component) : Component;\n\nexport default (mapState, mapDispatch, { mergeProps, useRouter, options } = {}) =>\n (Component) =>\n withRouter(useRouter)(connect(mapState, mapDispatch, mergeProps, options)(Component));\n","export const ROUTE_NO_MATCH_AUTH = '/';\nexport const ROUTE_NO_MATCH_PROSPECT = '/';\nexport const ROUTE_NO_MATCH_UNAUTH = '/login';\nexport const AUTHORISED = 'authorised';\nexport const PROSPECT = 'prospect';\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { func, shape, string, node, element, oneOfType } from 'prop-types';\nimport { Route, Redirect } from 'react-router-dom';\nimport querystring from '@clearscore-group/lib.helpers.query-string';\nimport { selectors as routesSelectors } from '@clearscore-group/lib.redux.routes';\n\nimport { ROUTE_NO_MATCH_UNAUTH } from '../../lib/constants';\n\nconst getRedirectPath = (location) => {\n const { redirect } = querystring.parse(location.search);\n return redirect || ROUTE_NO_MATCH_UNAUTH;\n};\n\nconst shouldRedirectOnLogin = (location, loggedIn) => loggedIn && location.search?.indexOf('?redirect=') === 0;\n\nconst AuthRoute = ({ Component, location, path, ...rest }) => {\n const { loggedIn } = useSelector(routesSelectors.getUserRoleRoutes);\n const redirectOnLogin = shouldRedirectOnLogin(location, loggedIn);\n return (\n \n loggedIn || !redirectOnLogin ? (\n \n ) : (\n \n )\n }\n />\n );\n};\n\nAuthRoute.propTypes = {\n location: shape({\n search: string,\n pathname: string,\n }),\n path: string.isRequired,\n Component: oneOfType([node, element, func]).isRequired,\n};\n\nAuthRoute.defaultProps = {\n location: {},\n};\n\nexport default AuthRoute;\n","import React from 'react';\nimport { func, string, array, shape, node, element, oneOfType } from 'prop-types';\nimport { Route, Redirect } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { selectors as profileSelectors } from '@clearscore-group/lib.redux.profile';\nimport { selectors as sessionSelectors } from '@clearscore-group/lib.redux.session';\n\nimport { ROUTE_NO_MATCH_PROSPECT } from '../../lib/constants';\n\nconst isValidProspectRoute = ({ routes, location, currentRole, accountIDVStatus, failureReason }) => {\n const failureRouteExists =\n !!failureReason && routes.find((searchRoute) => searchRoute.failureReason?.includes(failureReason));\n return !!routes.find((route) => {\n const pathRegex = new RegExp(route.path);\n\n // if path and role fails, definiely wrong place\n if (!pathRegex.test(location.pathname) || !route.role.includes(currentRole)) {\n return false;\n } else if (!route.idvStatus && !route.failureReason) {\n // if path has no guards go there\n return true;\n } else if (failureReason) {\n // failureReason, check if path is specific to failure reason, otherwise\n // if there is no matching failureRoute check idvStatus match\n return (\n route.failureReason?.includes(failureReason) ||\n (!failureRouteExists && route.idvStatus?.includes(accountIDVStatus))\n );\n }\n return route.idvStatus?.includes(accountIDVStatus);\n });\n};\n\nconst getCorrectProspectRoute = ({ routes, currentRole, accountIDVStatus, failureReason }) => {\n const [failurePath] = routes.filter(\n (route) => route.role.includes(currentRole) && route.failureReason?.includes(failureReason),\n );\n const [validPath] = routes.filter(\n (route) => route.role.includes(currentRole) && route.idvStatus?.includes(accountIDVStatus),\n );\n if (failurePath) return failurePath.path;\n return validPath ? validPath.path : ROUTE_NO_MATCH_PROSPECT;\n};\n\nconst ProspectRoute = ({ Component, routes, location, path, ...rest }) => {\n const { accountIDVStatus, failureReason } = useSelector(profileSelectors.getStatus);\n const currentRole = useSelector(sessionSelectors.getAuthRole);\n\n return (\n \n isValidProspectRoute({ routes, location, currentRole, accountIDVStatus, failureReason }) ? (\n \n ) : (\n \n )\n }\n />\n );\n};\n\nProspectRoute.propTypes = {\n routes: array,\n location: shape({\n search: string,\n pathname: string,\n }),\n path: string.isRequired,\n Component: oneOfType([node, element, func]).isRequired,\n};\n\nProspectRoute.defaultProps = {\n routes: [],\n location: {},\n};\n\nexport default ProspectRoute;\n","import React from 'react';\nimport { shape, string, array } from 'prop-types';\nimport { Redirect } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { selectors as sessionSelectors } from '@clearscore-group/lib.redux.session';\nimport { selectors as profileSelectors } from '@clearscore-group/lib.redux.profile';\nimport getEnv from '@clearscore-group/lib.helpers.envs';\nimport querystring from '@clearscore-group/lib.helpers.query-string';\n\nimport {\n ROUTE_NO_MATCH_UNAUTH,\n ROUTE_NO_MATCH_AUTH,\n ROUTE_NO_MATCH_PROSPECT,\n AUTHORISED,\n PROSPECT,\n} from '../../lib/constants';\n\nconst getUnauthedRedirect = (location) => {\n const [NO_MATCH_UNAUTH = ROUTE_NO_MATCH_UNAUTH] = getEnv(['ROUTE_NO_MATCH_UNAUTH']);\n if (location.pathname !== '/') {\n // eslint-disable-next-line camelcase\n const { redirect, client_id, client_type, device_id, device_name, session_id, ...rest } = querystring.parse(\n location.search,\n );\n const search = querystring.stringify(rest);\n return {\n pathname: NO_MATCH_UNAUTH,\n search: `redirect=${location.pathname}${search ? `&${search}` : ''}`,\n };\n }\n return { pathname: NO_MATCH_UNAUTH };\n};\n\nconst getAuthedRedirect = (location) => {\n const [NO_MATCH_AUTH = ROUTE_NO_MATCH_AUTH] = getEnv(['ROUTE_NO_MATCH_AUTH']);\n const { redirect, ...rest } = querystring.parse(location.search);\n const search = querystring.stringify(rest);\n return {\n pathname: redirect || NO_MATCH_AUTH,\n search: search || '',\n state: location.state,\n };\n};\n\nconst getProspectRedirect = ({ routes, currentRole, accountIDVStatus, failureReason }) => {\n const [NO_MATCH_PROSPECT = ROUTE_NO_MATCH_PROSPECT] = getEnv(['ROUTE_NO_MATCH_PROSPECT']);\n const [failurePath] = routes.filter(\n (route) => route.role.includes(currentRole) && route.failureReason?.includes(failureReason),\n );\n const [validPath] = routes.filter(\n (route) => route.role.includes(currentRole) && route.idvStatus?.includes(accountIDVStatus),\n );\n if (failurePath) return { pathname: failurePath.path, search: '' };\n return { pathname: validPath ? validPath.path : NO_MATCH_PROSPECT, search: '' };\n};\n\nconst getFallThroughRedirect = ({ currentRole, location, routes, accountIDVStatus, failureReason }) => {\n switch (currentRole) {\n case AUTHORISED:\n return getAuthedRedirect(location);\n case PROSPECT:\n return getProspectRedirect({ currentRole, routes, accountIDVStatus, failureReason });\n default:\n return getUnauthedRedirect(location);\n }\n};\n\nconst NoMatchRoute = ({ location, routes }) => {\n const currentRole = useSelector(sessionSelectors.getAuthRole);\n const { accountIDVStatus, failureReason } = useSelector(profileSelectors.getStatus);\n const redirectTo = getFallThroughRedirect({ currentRole, location, routes, accountIDVStatus, failureReason });\n return ;\n};\n\nNoMatchRoute.propTypes = {\n routes: array,\n location: shape({\n search: string,\n pathname: string,\n }),\n};\n\nNoMatchRoute.defaultProps = {\n location: {},\n routes: [],\n};\n\nexport default NoMatchRoute;\n","import React from 'react';\nimport { string, func, node, element, oneOfType } from 'prop-types';\nimport { Route } from 'react-router-dom';\n\nconst UnauthRoute = ({ Component, path, ...rest }) => (\n } />\n);\n\nUnauthRoute.propTypes = {\n path: string.isRequired,\n Component: oneOfType([node, element, func]).isRequired,\n};\n\nexport default UnauthRoute;\n","'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher) || [];\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n","'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n","'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\nconst filterObject = require('filter-obj');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (value === null || value === undefined || value.length === 0) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(query, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn ret;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of query.split('&')) {\n\t\tif (param === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (url, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url_, hash] = splitOnFirst(url, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url_.split('?')[0] || '',\n\t\t\tquery: parse(extract(url), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (object, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true\n\t}, options);\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(object.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, object.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\thash = `#${encode(object.fragmentIdentifier, options)}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n\nexports.pick = (input, filter, options) => {\n\toptions = Object.assign({\n\t\tparseFragmentIdentifier: true\n\t}, options);\n\n\tconst {url, query, fragmentIdentifier} = exports.parseUrl(input, options);\n\treturn exports.stringifyUrl({\n\t\turl,\n\t\tquery: filterObject(query, filter),\n\t\tfragmentIdentifier\n\t}, options);\n};\n\nexports.exclude = (input, filter, options) => {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn exports.pick(input, exclusionFilter, options);\n};\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","import { parse } from 'query-string';\nimport { getCookie } from '@clearscore-group/lib.helpers.cookies';\nimport deepEqual from 'fast-deep-equal';\n\nconst featurePrefix = 'feature-';\n\ntype FeatureKey = `${typeof featurePrefix}${string}`;\n\ninterface ParsedQueryStringFeatures {\n [key: FeatureKey]: boolean;\n}\n\ninterface ParsedFeatures {\n [key: string]: boolean;\n}\n\nexport const parseQueryParamFeatures = (querystring: string): ParsedFeatures | undefined => {\n const features: ParsedQueryStringFeatures = parse(querystring) as unknown as ParsedQueryStringFeatures;\n const featureReducer = (parsedFeatures: ParsedFeatures, [key, value]: [FeatureKey, string]): ParsedFeatures => {\n if (key.startsWith(featurePrefix)) {\n const featureKey = key.replace(featurePrefix, '');\n // eslint-disable-next-line no-param-reassign\n parsedFeatures[featureKey] = value === 'true';\n }\n return parsedFeatures;\n };\n const parsedFeatures = Object.entries(features).reduce(\n // @ts-expect-error Object.entries has key values of string seems to be a fun Typescript bug\n featureReducer,\n {} as ParsedFeatures,\n ) as unknown as ParsedFeatures;\n\n return Object.keys(parsedFeatures).length > 0 ? parsedFeatures : undefined;\n};\n\nexport const shouldUpdateFeaturesCookieAndReload = (parsedFeatures: ParsedFeatures): boolean =>\n !deepEqual(getCookie('features'), parsedFeatures);\n","import React, { useRef, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Switch, Route, useHistory } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { usePageTracking } from '@clearscore-group/lib.hooks.use-tracking';\nimport { selectors as routesSelectors } from '@clearscore-group/lib.redux.routes';\nimport {\n actions as marketActions,\n constants as marketConstants,\n selectors as marketSelectors,\n} from '@clearscore-group/lib.redux.market';\nimport { MARKETS } from '@clearscore-group/lib.config.i18n';\nimport { selectors as sessionSelectors } from '@clearscore-group/lib.redux.session';\nimport monitoring from '@clearscore-group/lib.helpers.monitoring';\nimport { setCookie } from '@clearscore-group/lib.helpers.cookies';\n\nimport { AUTHORISED, PROSPECT } from '../lib/constants';\nimport { useCoreErrorTracking } from '../lib/hooks/use-tracking';\nimport useScrollToTop from '../lib/hooks/use-scroll-to-top';\nimport AuthRoute from './core-routes/auth-route';\nimport ProspectRoute from './core-routes/prospect-route';\nimport NoMatchRoute from './core-routes/nomatch-route';\nimport UnauthRoute from './core-routes/unauth-route';\nimport { parseQueryParamFeatures, shouldUpdateFeaturesCookieAndReload } from '../lib/feature-query-params';\n\nconst useShouldFetchMarketConfig = (currentMarket, parentDispatch) => {\n const { fetch: currentMarketFetchStatus } = useSelector(marketSelectors.getPredicate);\n const currentRouteMarket = useSelector(routesSelectors.getCurrentRouteMarket);\n\n if (\n currentMarket === currentRouteMarket ||\n currentMarketFetchStatus.isPending ||\n currentMarketFetchStatus.isComplete ||\n currentMarketFetchStatus.hasFailed\n ) {\n return;\n }\n parentDispatch(marketActions.fetchMarketConfig(currentMarket));\n};\n\nconst useGetRoutesToRender = (routes, location, isPending) => {\n const previousRoutes = useRef([]);\n const areRoutesLoaded = useSelector(routesSelectors.areRoutesLoaded);\n const isActiveMarketGlobal = useSelector(marketSelectors.getActiveMarket) === marketConstants.GLOBAL;\n const isMarketInRoute = location.pathname.split('/').some((path) => MARKETS.includes(path));\n const shouldRenderRoutes = isMarketInRoute || isActiveMarketGlobal || (areRoutesLoaded && !isPending);\n\n useEffect(() => {\n if (shouldRenderRoutes) {\n previousRoutes.current = routes;\n }\n }, [routes, shouldRenderRoutes]);\n\n const routesToRender = shouldRenderRoutes ? routes : previousRoutes.current;\n return routesToRender;\n};\n\nconst getRouteForRoleType = (roles, currentRole) => {\n const currentRoleType = roles.find((role) => role === currentRole);\n switch (currentRoleType) {\n case AUTHORISED:\n return AuthRoute;\n case PROSPECT:\n return ProspectRoute;\n default:\n return UnauthRoute;\n }\n};\n\nconst Routes = ({ parentState, templates, coreAppBridgeTypes, location, hasPageTracking }) => {\n const parentDispatch = useDispatch();\n const { routes, isPending } = useSelector(routesSelectors.getUserRoleRoutes);\n const routesToRender = useGetRoutesToRender(routes, location, isPending);\n const currentMarket = useSelector(marketSelectors.getActiveMarket);\n const currentRole = useSelector(sessionSelectors.getAuthRole);\n const parsedQueryParamFeatures = parseQueryParamFeatures(location.search);\n const history = useHistory();\n\n useShouldFetchMarketConfig(currentMarket, parentDispatch);\n useScrollToTop();\n usePageTracking({ hasPageTracking });\n useCoreErrorTracking();\n\n if (!isPending && !routesToRender.length) {\n monitoring.log('CS-37393 - White Screen No Routes');\n }\n\n if (parsedQueryParamFeatures && shouldUpdateFeaturesCookieAndReload(parsedQueryParamFeatures)) {\n setCookie('features', parsedQueryParamFeatures);\n history.go(0);\n }\n\n return (\n \n {routesToRender.map((route) => {\n const RouteComponent = getRouteForRoleType(route.role, currentRole);\n const Template = templates[route.template];\n if (!Template) {\n throw Error(\n `Core-App Template Error: You requested template ${\n route.template\n } while we only have ${Object.keys(templates)}`,\n );\n }\n return (\n \n );\n })}\n {!isPending && routesToRender.length && (\n \n \n \n )}\n \n );\n};\n\nexport default Routes;\n\nRoutes.propTypes = {\n parentState: PropTypes.object.isRequired,\n templates: PropTypes.object.isRequired,\n coreAppBridgeTypes: PropTypes.arrayOf(PropTypes.string),\n location: PropTypes.shape({\n search: PropTypes.string,\n pathname: PropTypes.string,\n }),\n hasPageTracking: PropTypes.bool,\n};\n\nRoutes.defaultProps = {\n coreAppBridgeTypes: [],\n location: {},\n hasPageTracking: false,\n};\n","import { useLayoutEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\n\nconst useScrollToTop = () => {\n const history = useHistory();\n\n useLayoutEffect(\n () =>\n history.listen(() => {\n document.body.scrollIntoView();\n }),\n [],\n );\n};\n\nexport default useScrollToTop;\n","import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport usePrevious from '@clearscore-group/lib.hooks.use-previous';\n\nimport useTracking from '../use-tracking';\nimport { getSanitisedUrl } from '../lib/helpers';\n\nconst usePageTracking = ({ hasPageTracking, location: setLocation, props } = {}) => {\n const track = useTracking();\n const reactRouterLocation = useLocation();\n const location = setLocation || reactRouterLocation;\n const referrer = usePrevious(location.pathname);\n\n const { source, props: stateProps = {} } = location?.state?.tracking || {};\n\n useEffect(() => {\n if (hasPageTracking) {\n track({\n event: 'page',\n props: {\n ...getSanitisedUrl(),\n ...stateProps,\n ...props,\n referrer,\n source,\n },\n });\n }\n }, [location?.pathname]); // eslint-disable-line react-hooks/exhaustive-deps\n};\n\nexport default usePageTracking;\n","import { useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\nimport usePrevious from '@clearscore-group/lib.hooks.use-previous';\nimport useWebappTracking from '@clearscore-group/lib.hooks.use-webapp-tracking';\nimport { types as dashboardTypes, selectors as dashboardSelectors } from '@clearscore-group/lib.redux.dashboard';\nimport { types as profileTypes, selectors as profileSelectors } from '@clearscore-group/lib.redux.profile';\n\nexport const useCoreErrorTracking = () => {\n const track = useWebappTracking();\n const { fetch: profileFetch } = useSelector(profileSelectors.getPredicate);\n const { fetch: dashboardFetch } = useSelector(dashboardSelectors.getPredicate);\n const { creditReportInfo } = useSelector(dashboardSelectors.getRawData) || {};\n const location = useLocation();\n const prevRoute = usePrevious(location.pathname);\n\n const trackError = (props) =>\n track({\n name: 'fe_core_error_logged',\n props: {\n path: prevRoute,\n ...props,\n },\n });\n\n useEffect(() => {\n if (profileFetch.hasFailed) {\n trackError({ failed_api_name: profileTypes.PROFILE_FETCH_ERROR });\n }\n }, [profileFetch.hasFailed]);\n\n useEffect(() => {\n if (dashboardFetch.hasFailed) {\n trackError({ failed_api_name: dashboardTypes.DASHBOARD_FETCH_ERROR });\n }\n }, [dashboardFetch.hasFailed]);\n\n useEffect(() => {\n if (dashboardFetch.isComplete && !creditReportInfo) {\n trackError({ error_message: 'report_not_found' });\n }\n }, [dashboardFetch.isComplete]);\n};\n\nconst MARKETING_CAMPAIGN_EVENT = 'fe_marketing_campaign_source';\nconst FIRST_TIME_VISIT_EVENT = 'fe_new_prospect_visited';\n\nexport const useCoreVisitTracking = () => {\n const track = useWebappTracking();\n\n return {\n onFirstTimeVisit: (userIdentity) =>\n track({\n name: FIRST_TIME_VISIT_EVENT,\n props: {\n CS_VISITED_SITE_COOKIE: userIdentity,\n },\n }),\n // eslint-disable-next-line camelcase\n onMarketingCampaignVisit: ({ utm_source, utm_medium, utm_campaign, utm_term, utm_content }) =>\n track({\n name: MARKETING_CAMPAIGN_EVENT,\n props: {\n campaign_source: utm_source,\n campaign_medium: utm_medium,\n campaign_name: utm_campaign,\n campaign_term: utm_term,\n campaign_content: utm_content,\n },\n }),\n };\n};\n","import connect from '@clearscore-group/lib.redux.connect';\n\nimport Routes from './core-router-component';\n\n/**\n * WARNING\n * Do not add a mapDispatch as its mutates the dispatch function passed\n * to the component and prevent action bridge from working\n * */\nconst CoreRouter = connect(null, null, { useRouter: true })(Routes);\n\nexport default CoreRouter;\n","/* eslint-disable */\nfunction handleFirstTab(e) {\n if (e.keyCode === 9) {\n document.body.classList.add('isKeyboardUser');\n window.removeEventListener('keydown', handleFirstTab);\n window.addEventListener('mousedown', handleMouseDownOnce);\n }\n}\n\nfunction handleMouseDownOnce() {\n document.body.classList.remove('isKeyboardUser');\n window.removeEventListener('mousedown', handleMouseDownOnce);\n window.addEventListener('keydown', handleFirstTab);\n}\n\nexport function detectKeyboardUser() {\n window.addEventListener('keydown', handleFirstTab);\n}\n","import React, { Fragment } from 'react';\nimport { QueryClientProvider, QueryClient } from '@tanstack/react-query';\n// import { ReactQueryDevtools } from '@tanstack/react-query-devtools';\nimport PropTypes from 'prop-types';\nimport CSProvider from '@clearscore-group/lib.redux.cs-provider';\nimport Font from '@clearscore/ui.rainbow.font';\nimport initialiseTrackingCookies from '@clearscore-group/lib.helpers.initialise-tracking-cookies';\nimport { VerticalTakeoverProvider } from '@clearscore-group/ui.shared.vertical-takeover';\nimport * as Sentry from '@sentry/react';\nimport { setQueryClient } from '@clearscore-group/lib.helpers.query-client';\nimport { orchestrateAnonymousCookie } from '@clearscore-group/lib.helpers.cookies';\n\nimport { useCoreVisitTracking } from './lib/hooks/use-tracking';\nimport Router from './core-router';\nimport { detectKeyboardUser } from './lib/a11y-outline';\n\n// NOTE: `reset` should go before any other styles, otherwise it will brake fonts\n// and you will have specificity wars.\nimport './styles/reset.module.css';\nimport './styles/index.module.css';\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n retry: 0,\n },\n },\n logger: {\n log: () => {},\n warn: () => {},\n error: () => {},\n },\n});\nsetQueryClient(queryClient); // make query-client available without hooks\n\nconst CoreRouter = ({ store, storeConfig, templates, hasPageTracking }) => {\n const { onFirstTimeVisit, onMarketingCampaignVisit } = useCoreVisitTracking();\n\n initialiseTrackingCookies(store, null, { onFirstTimeVisit, onMarketingCampaignVisit });\n const parentState = store.getState();\n\n return (\n \n \n \n \n );\n};\n\nconst CoreApp = ({ storeConfig, templates, hasPageTracking }) => {\n // Enable keyboard focus highlight in browser\n detectKeyboardUser();\n\n orchestrateAnonymousCookie();\n\n return (\n \n \n {({ store }) => (\n \n \n \n )}\n \n {/* TODO: configure react query devtools*/}\n {/* */}\n \n );\n};\n\nCoreRouter.propTypes = {\n store: PropTypes.object.isRequired,\n /** @type {Object} config use to configure redux store, including reducers, initial state etc. */\n storeConfig: PropTypes.object.isRequired,\n /** @type {Object} mapping of config template string to template component */\n templates: PropTypes.object.isRequired,\n hasPageTracking: PropTypes.bool,\n};\n\nCoreRouter.defaultProps = {\n hasPageTracking: false,\n};\n\nCoreApp.propTypes = {\n /** @type {Object} config use to configure redux store, including reducers, initial state etc. */\n storeConfig: PropTypes.object.isRequired,\n /** @type {Object} mapping of config template string to template component */\n templates: PropTypes.object.isRequired,\n hasPageTracking: PropTypes.bool,\n};\n\nCoreApp.defaultProps = {\n hasPageTracking: false,\n};\n\n// https://github.com/getsentry/sentry-javascript/tree/master/packages/react\nexport default Sentry.withProfiler(CoreApp);\n","import type { QueryClient } from '@tanstack/react-query';\nimport getEnv, { setEnvs } from '@clearscore-group/lib.helpers.envs';\n\nexport const setQueryClient = (queryClient: QueryClient): void => setEnvs({ queryClient });\nexport const getQueryClient = (): QueryClient => getEnv('queryClient');\n","\n","export const ALERTS_SHOW_ALERT = 'CS/ALERTS_SHOW_ALERT';\nexport const ALERTS_HIDE_ALERT = 'CS/ALERTS_HIDE_ALERT';\nexport const ALERTS_PARTIAL_HIDE_ALERT = 'CS/ALERTS_PARTIAL_HIDE_ALERT';\n","import createAction from '@clearscore-group/lib.helpers.create-action';\n\nimport { ALERTS_SHOW_ALERT, ALERTS_HIDE_ALERT, ALERTS_PARTIAL_HIDE_ALERT } from '../alerts.types';\n\nexport const showAlert = (payload) => createAction(ALERTS_SHOW_ALERT, payload);\n\nexport const delayedDismissAlert = () => createAction(ALERTS_PARTIAL_HIDE_ALERT);\n\nexport const dismissAlert = () => createAction(ALERTS_HIDE_ALERT);\n","import alertsDomain from './alerts.domain';\n/* eslint-disable import/prefer-default-export */\nexport const domain = alertsDomain;\n","import { LOCATION_CHANGE } from 'connected-react-router';\n\nimport { ALERTS_SHOW_ALERT, ALERTS_HIDE_ALERT, ALERTS_PARTIAL_HIDE_ALERT } from '../alerts.types';\n\nexport const initialState = {\n isAlertOpen: false,\n isDismissible: true,\n isNewTab: false,\n};\n\nexport default (state = initialState, action = {}) => {\n const { type, payload } = action;\n const { isDismissible, isNewTab } = state;\n\n switch (type) {\n case ALERTS_SHOW_ALERT:\n return {\n isDismissible,\n isNewTab,\n ...payload,\n isAlertOpen: true,\n };\n\n case ALERTS_PARTIAL_HIDE_ALERT: // useful for delays/transitions\n return {\n ...state,\n ...initialState,\n };\n\n case ALERTS_HIDE_ALERT:\n return initialState;\n\n case LOCATION_CHANGE:\n if (!state.sticky) {\n return initialState;\n }\n return state;\n default:\n return state;\n }\n};\n","import alertsGetAlert from './alerts.getAlert';\n/* eslint-disable import/prefer-default-export */\nexport const getAlert = alertsGetAlert;\n","import { createStructuredSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\n\nconst alertId = (state) => resolveProp('alerts.alertId', state);\nconst isAlertOpen = (state) => resolveProp('alerts.isAlertOpen', state);\nconst alertType = (state) => resolveProp('alerts.alertType', state);\nconst alertContent = (state) => resolveProp('alerts.alertContent', state);\nconst alertCloseText = (state) => resolveProp('alerts.alertCloseText', state);\nconst isDismissible = (state) => resolveProp('alerts.isDismissible', state);\nconst duration = (state) => resolveProp('alerts.duration', state);\nconst href = (state) => resolveProp('alerts.href', state);\nconst ctaText = (state) => resolveProp('alerts.ctaText', state);\nconst title = (state) => resolveProp('alerts.title', state);\nconst isNewTab = (state) => resolveProp('alerts.isNewTab', state);\nconst alertCooldown = (state) => resolveProp('alerts.alertCooldown', state);\n\nexport default createStructuredSelector({\n alertId,\n isAlertOpen,\n alertType,\n alertContent,\n alertCloseText,\n isDismissible,\n duration,\n href,\n ctaText,\n title,\n isNewTab,\n alertCooldown,\n});\n","import * as actionsImport from './actions/index';\nimport * as typesImport from './alerts.types';\nimport * as reducersImport from './reducers/index';\nimport * as selectorsImport from './selectors/index';\nimport * as constantsImport from './constants';\n\nexport const actions = actionsImport;\nexport const types = typesImport;\nexport const reducers = reducersImport;\nexport const selectors = selectorsImport;\nexport const constants = constantsImport;\n","export const WARNING = 'warning';\nexport const ERROR = 'error';\nexport const SUCCESS = 'success';\nexport const ALERT_INFO = 'alert_info';\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import { useEffect, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport canUseDom from '@clearscore-group/lib.helpers.can-use-dom';\n\nconst Portal = ({ children, className }) => {\n const elRef = useRef(canUseDom() ? document.createElement('div') : null);\n\n useEffect(() => {\n const el = elRef.current;\n el.classList.add(className);\n document.body.appendChild(el);\n return () => document.body.removeChild(el);\n }, [className, elRef]);\n\n return canUseDom() ? ReactDOM.createPortal(children, elRef.current) : null;\n};\n\nPortal.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n};\n\nPortal.defaultProps = {\n className: 'react-portal',\n};\n\nexport default Portal;\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect, useState } from 'react';\nimport canUseDom from '@clearscore-group/lib.helpers.can-use-dom';\n\nfunction getValue(mediaQueryLists, values) {\n const index = mediaQueryLists.findIndex((mql) => mql.matches);\n if (Array.isArray(values)) {\n return typeof values[index] === 'undefined' ? values[0] : values[index];\n }\n return values;\n}\n\nfunction useMedia(queries, values) {\n const isBrowser = canUseDom();\n // fall back to first query if rendering on the server as window is unavailable\n const mediaQueryLists = isBrowser ? queries.map((q) => window.matchMedia(q)) : [true];\n const [value, setValue] = useState(getValue(mediaQueryLists, values));\n\n function setState() {\n setValue(getValue(mediaQueryLists, values));\n }\n\n useEffect(() => {\n if (canUseDom()) {\n mediaQueryLists.forEach((mql) => mql.addListener(setState));\n }\n\n setState();\n return () => {\n if (canUseDom()) {\n mediaQueryLists.forEach((mql) => mql.removeListener(setState));\n }\n };\n }, [queries, values, isBrowser]);\n\n return value;\n}\n\nexport default useMedia;\n","const removeSubDomain = (url = '') => (url.split('.').length > 2 ? url.split('.').slice(1).join('.') : url);\nconst matchSubDomain = (url = '', subdomains = []) => subdomains.includes(url.split('//')[1]?.split('.')[0]);\n\n// apps which should keep focus when going to other apps, ie. `app` and `beta` on all envs.\nconst APPS = ['app', 'app-ci', 'app-stg', 'beta', 'beta-ci', 'beta-stg'];\n\nconst sameOrigin = (pathname) => {\n const { hostname } = window.location;\n const comingFromApp = matchSubDomain(`//${hostname}`, APPS);\n const goingToApp = matchSubDomain(pathname, APPS);\n const appToApp = (comingFromApp && goingToApp) || !comingFromApp;\n return removeSubDomain(pathname).includes(removeSubDomain(hostname)) && appToApp;\n};\n\n// always ensure www links start with // (i.e. learn articles)\n// if its a link on same domain, then remove http(s) so RR doesn't prefix with `/`\nconst normalisePath = (pathname) => {\n const url = pathname.startsWith('www.') ? `//${pathname}` : pathname;\n return sameOrigin(pathname) ? url.replace(/https?:/, '') : url;\n};\n\nexport default (href) => {\n const url = normalisePath(href);\n const hasFullUrl = /^(https?:\\/\\/|\\/\\/)/.test(url); // starts with 'http(s)?:' or '//'\n const isRelative = /^(\\.\\.?\\/|\\/(?!\\/)|\\?)/.test(url); // starts with './', '../', single '/', or '?'\n const isAppLink = hasFullUrl\n ? url.split('//')[1].split('/')[0].indexOf(':') > 0\n : url.split('/')[0].indexOf(':') > 0; // e.g. tel:1902 or mail:pete@clearscore.com\n const isSameOrigin = !isAppLink && sameOrigin(url);\n const isRelativeWithoutSlash = !hasFullUrl && !isAppLink; // i.e. href=\"results/details\"\n return url && (isSameOrigin || isRelative || isRelativeWithoutSlash);\n};\n","/* eslint-disable import/prefer-default-export */\nexport const themes = {\n LIGHT: 'LIGHT',\n DARK: 'DARK',\n INHERIT: 'INHERIT',\n} as const;\n","import type { ReactNode, ReactElement, MouseEventHandler } from 'react';\nimport React from 'react';\nimport cx from 'classnames';\nimport { Link as RouterLink } from 'react-router-dom';\nimport toTitleCase from '@clearscore-group/lib.normalize.title-case';\nimport isInternalUrl from '@clearscore-group/lib.helpers.is-internal-url';\n\nimport { themes } from './constants';\nimport styles from './text-link.module.css';\n\nexport interface ToProps {\n pathname?: string;\n search?: string;\n hash?: string;\n state?: object;\n}\n\ntype PathPropsTo = ToProps | string | ((location: ToProps) => ToProps);\n\ninterface PathnameProps {\n href?: string;\n to?: PathPropsTo;\n}\n\ninterface TextLinkExports {\n themes: typeof themes;\n}\n\nexport interface TextLinkProps {\n children: ReactNode;\n theme?: (typeof themes)[keyof typeof themes];\n href?: string;\n title?: string;\n ariaLabel?: string;\n isNewTab?: boolean;\n isSimpleLink?: boolean;\n to?: PathPropsTo;\n onClick?: MouseEventHandler;\n}\n\ntype TextLink = (props: TextLinkProps) => ReactElement;\n\nconst removeSubDomain = (url: string | undefined = ''): string =>\n url.split('.').length > 2 ? url.split('.').slice(1).join('.') : url;\nconst getSubDomain = (url: string): string | undefined =>\n url.split('//').length > 1 ? url.split('.').shift() : undefined;\n\nconst sameOrigin = (pathname: string): boolean => {\n const { hostname } = window.location;\n return removeSubDomain(pathname).includes(removeSubDomain(hostname));\n};\n\nconst sameSubDomain = (pathname: string): boolean => {\n const { origin } = window.location;\n const linkSubdomain = getSubDomain(pathname);\n\n if (!linkSubdomain) return true;\n\n const originSubDomain = getSubDomain(origin);\n const pathnameSubDomain = getSubDomain(pathname);\n\n if (!originSubDomain || !pathnameSubDomain) return false;\n\n return originSubDomain.includes(pathnameSubDomain);\n};\n\n// always ensure www links start with // (i.e. learn articles)\n// if its a link on same domain, then remove http(s) so RR doesn't prefix with `/`\nconst normalisePath = (pathname: string): string => {\n const url = pathname.startsWith('www.') ? `//${pathname}` : pathname;\n return sameOrigin(pathname) ? url.replace(/https?:/, '') : url;\n};\n\nconst getPathname = ({ href, to }: PathnameProps): string => {\n if (typeof to === 'string') return to;\n if (typeof to === 'function') return getPathname({ to: to(window.location) });\n if (typeof to?.pathname === 'string') return to.pathname;\n if (typeof href === 'string') return href;\n return '';\n};\n\n// note: href is now deprecated please do not use\nconst TextLink: TextLink & TextLinkExports = ({\n children,\n theme = themes.LIGHT,\n href,\n title,\n isNewTab = false,\n onClick,\n isSimpleLink = false,\n to,\n ariaLabel,\n}) => {\n const link = normalisePath(getPathname({ href, to }));\n const internalLink = isInternalUrl(link);\n const newTabProps = { rel: 'noopener noreferrer', target: '_blank' };\n const reactRouterSafe = !link.startsWith('#') && sameSubDomain(link); // react-router doesn't like '#' or different sub-domains links\n const linkProps = {\n className: cx(styles.component, styles[`isTheme${toTitleCase(theme)}`], {\n [styles.isSimpleLink]: isSimpleLink,\n }),\n onClick,\n title,\n 'aria-label': ariaLabel,\n };\n\n switch (true) {\n case internalLink && reactRouterSafe:\n return (\n \n {children}\n \n );\n case !link:\n return (\n \n );\n case internalLink:\n return (\n \n {children}\n \n );\n default:\n return (\n \n {children}\n \n );\n }\n};\n\nTextLink.themes = themes;\n\nexport default TextLink;\n","import type { ReactNode, ReactElement } from 'react';\nimport React from 'react';\n\nimport styles from './text-strong.module.css';\n\nexport interface ITextStrongProps {\n children: ReactNode;\n}\n\ntype TextStrong = (props: ITextStrongProps) => ReactElement;\n\nconst TextStrong: TextStrong = ({ children }) => {children};\n\nexport default TextStrong;\n","import { mediaQuery } from '@clearscore/ui.rainbow.tokens';\n\nexport const types = {\n MICRO: 'MICRO',\n TINY: 'TINY',\n MINI: 'MINI',\n SMALL: 'SMALL',\n MEDIUM: 'MEDIUM',\n LARGE: 'LARGE',\n BIG: 'BIG',\n HUGE: 'HUGE',\n MASSIVE: 'MASSIVE',\n JUMBO: 'JUMBO',\n GARGANTUAN: 'GARGANTUAN',\n RIDICULOUS: 'RIDICULOUS',\n} as const;\n\nexport const weights = {\n THIN: 'THIN',\n LIGHT: 'LIGHT',\n BOOK: 'BOOK',\n REGULAR: 'REGULAR',\n MEDIUM: 'MEDIUM',\n BOLD: 'BOLD',\n BLACK: 'BLACK',\n} as const;\n\nexport const spacings = {\n TIGHT: 'TIGHT',\n WIDE: 'WIDE',\n EXPLODED: 'EXPLODED',\n} as const;\n\nexport const tags = {\n DIV: 'div',\n H1: 'h1',\n H2: 'h2',\n H3: 'h3',\n H4: 'h4',\n H5: 'h5',\n H6: 'h6',\n P: 'p',\n SPAN: 'span',\n LABEL: 'label',\n LEGEND: 'legend',\n} as const;\n\nexport const presets = {\n J1: {\n type: [types.GARGANTUAN, types.RIDICULOUS],\n weight: weights.THIN,\n breakpoints: [null, mediaQuery['rnb-mq-medium']],\n },\n J2: {\n type: [types.JUMBO, types.GARGANTUAN],\n weight: weights.THIN,\n breakpoints: [null, mediaQuery['rnb-mq-medium']],\n },\n J3: {\n type: [types.MASSIVE, types.JUMBO],\n weight: weights.THIN,\n breakpoints: [null, mediaQuery['rnb-mq-medium']],\n },\n J4: {\n type: [types.BIG, types.MASSIVE],\n breakpoints: [null, mediaQuery['rnb-mq-medium']],\n },\n\n H1: {\n type: [types.BIG, types.HUGE],\n tag: tags.H1,\n breakpoints: [null, mediaQuery['rnb-mq-medium']],\n },\n H2: {\n type: [types.MEDIUM, types.LARGE],\n tag: tags.H2,\n weight: weights.BOLD,\n breakpoints: [null, mediaQuery['rnb-mq-medium']],\n },\n H3: {\n type: types.SMALL,\n weight: weights.BOLD,\n tag: tags.H3,\n },\n H4: {\n type: types.MINI,\n weight: weights.BOLD,\n tag: tags.H4,\n },\n H5: {\n type: types.MINI,\n spacing: spacings.WIDE,\n tag: tags.H5,\n isUppercase: true,\n },\n H6: {\n type: types.TINY,\n weight: weights.BOLD,\n spacing: spacings.WIDE,\n tag: tags.H6,\n isUppercase: true,\n },\n\n BODY1: {\n type: types.SMALL,\n tag: tags.P,\n },\n BODY2: {\n type: types.MINI,\n tag: tags.P,\n },\n BODY3: {\n type: types.MINI,\n weight: weights.BOLD,\n tag: tags.P,\n },\n BODY4: {\n type: types.TINY,\n tag: tags.P,\n },\n BODY5: {\n type: types.TINY,\n weight: weights.BOLD,\n tag: tags.P,\n },\n BODY6: {\n type: types.MICRO,\n spacing: spacings.WIDE,\n tag: tags.P,\n },\n\n BUTTON1: {\n type: types.MINI,\n weight: weights.BOLD,\n spacing: spacings.WIDE,\n },\n BUTTON2: {\n type: types.TINY,\n weight: weights.BOLD,\n spacing: spacings.WIDE,\n },\n\n CAPTION: {\n type: types.TINY,\n spacing: spacings.WIDE,\n },\n\n OVERLINE: {\n type: types.TINY,\n spacing: spacings.EXPLODED,\n isUppercase: true,\n },\n LINK: {\n type: types.MINI,\n weight: weights.BOLD,\n },\n} as const;\n","import type { ReactElement, ReactNode, HTMLAttributes, LabelHTMLAttributes } from 'react';\nimport React from 'react';\nimport cx from 'classnames';\nimport toTitleCase from '@clearscore-group/lib.normalize.title-case';\nimport useMedia from '@clearscore-group/lib.hooks.use-media';\nimport type { mediaQuery } from '@clearscore/ui.rainbow.tokens';\n\nimport type { TextLinkProps } from './components/text-link';\nimport TextLink from './components/text-link';\nimport TextStrong from './components/text-strong';\nimport { types, weights, spacings, tags, presets } from './constants';\nimport styles from './text.module.css';\n\ntype ValueOf = T[keyof T];\n\ninterface ITextProps\n extends HTMLAttributes<\n HTMLHeadingElement | HTMLParagraphElement | HTMLDivElement | HTMLSpanElement | HTMLLegendElement\n >,\n Pick, 'htmlFor'>,\n Omit {\n children: ReactNode | ReactNode[];\n type?: readonly ValueOf[] | ValueOf;\n weight?: ValueOf;\n spacing?: ValueOf;\n tag?: ValueOf;\n breakpoints?: readonly (ValueOf | null)[];\n isItalic?: boolean;\n isUppercase?: boolean;\n isLink?: boolean;\n isSimpleLink?: boolean;\n dataId?: string;\n}\n\ninterface DisplayNameExport {\n displayName?: string;\n}\n\ntype Text = (props: ITextProps) => ReactElement;\n\nexport interface TextExports {\n types: typeof types;\n weights: typeof weights;\n spacings: typeof spacings;\n tags: typeof tags;\n presets: typeof presets;\n Link: typeof TextLink;\n Strong: typeof TextStrong;\n Link1: Text & DisplayNameExport;\n J1: Text & DisplayNameExport;\n J2: Text & DisplayNameExport;\n J3: Text & DisplayNameExport;\n J4: Text & DisplayNameExport;\n H1: Text & DisplayNameExport;\n H2: Text & DisplayNameExport;\n H3: Text & DisplayNameExport;\n H4: Text & DisplayNameExport;\n H5: Text & DisplayNameExport;\n H6: Text & DisplayNameExport;\n Body1: Text & DisplayNameExport;\n Body2: Text & DisplayNameExport;\n Body3: Text & DisplayNameExport;\n Body4: Text & DisplayNameExport;\n Body5: Text & DisplayNameExport;\n Body6: Text & DisplayNameExport;\n Button1: Text & DisplayNameExport;\n Button2: Text & DisplayNameExport;\n Caption: Text & DisplayNameExport;\n Overline: Text & DisplayNameExport;\n}\n\nconst Text: Text & TextExports = ({\n children,\n type,\n weight = weights.REGULAR,\n spacing = spacings.TIGHT,\n tag = tags.DIV,\n breakpoints = [],\n isItalic = false,\n isUppercase = false,\n isLink = false,\n isSimpleLink = false,\n dataId,\n ...wrapProps\n}) => {\n const typeValue = useMedia(breakpoints, type);\n const typeClass = styles[`isType${toTitleCase(typeValue)}`];\n const weightClass = styles[`isWeight${toTitleCase(weight)}`];\n const spacingClass = styles[`isSpacing${toTitleCase(spacing)}`];\n const isWrapped = isLink || wrapProps.href || wrapProps.to;\n const Tag = tag as React.ElementType;\n\n return (\n \n {isWrapped ? (\n \n {children}\n \n ) : (\n children\n )}\n \n );\n};\n\nText.types = types;\nText.weights = weights;\nText.spacings = spacings;\nText.tags = tags;\nText.presets = presets;\n\nText.Link = TextLink;\nText.Strong = TextStrong;\n\nText.Link1 = ({ tag, ...props }): ReactElement => ;\nText.Link1.displayName = 'Link1';\nText.J1 = ({ tag, ...props }): ReactElement => ;\nText.J1.displayName = 'J1';\nText.J2 = ({ tag, ...props }): ReactElement => ;\nText.J2.displayName = 'J2';\nText.J3 = ({ tag, ...props }): ReactElement => ;\nText.J3.displayName = 'J3';\nText.J4 = ({ tag, ...props }): ReactElement => ;\nText.J4.displayName = 'J4';\nText.H1 = ({ tag, ...props }): ReactElement => ;\nText.H1.displayName = 'H1';\nText.H2 = ({ tag, ...props }): ReactElement => ;\nText.H2.displayName = 'H2';\nText.H3 = ({ tag, ...props }): ReactElement => ;\nText.H3.displayName = 'H3';\nText.H4 = ({ tag, ...props }): ReactElement => ;\nText.H4.displayName = 'H4';\nText.H5 = ({ tag, ...props }): ReactElement => ;\nText.H5.displayName = 'H5';\nText.H6 = ({ tag, ...props }): ReactElement => ;\nText.H6.displayName = 'H6';\nText.Body1 = ({ tag, ...props }): ReactElement => ;\nText.Body1.displayName = 'Body1';\nText.Body2 = ({ tag, ...props }): ReactElement => ;\nText.Body2.displayName = 'Body2';\nText.Body3 = ({ tag, ...props }): ReactElement => ;\nText.Body3.displayName = 'Body3';\nText.Body4 = ({ tag, ...props }): ReactElement => ;\nText.Body4.displayName = 'Body4';\nText.Body5 = ({ tag, ...props }): ReactElement => ;\nText.Body5.displayName = 'Body5';\nText.Body6 = ({ tag, ...props }): ReactElement => ;\nText.Body6.displayName = 'Body6';\nText.Button1 = ({ tag, ...props }): ReactElement => ;\nText.Button1.displayName = 'Button1';\nText.Button2 = ({ tag, ...props }): ReactElement => ;\nText.Button2.displayName = 'Button2';\nText.Caption = ({ tag, ...props }): ReactElement => ;\nText.Caption.displayName = 'Caption';\nText.Overline = ({ tag, ...props }): ReactElement => ;\nText.Overline.displayName = 'Overline';\n\nexport default Text;\n","","","","","","import type { MouseEvent, ReactElement } from 'react';\nimport React from 'react';\nimport cx from 'classnames';\n\nimport styles from './icon.module.css';\n\nconst Type = {\n BUTTON: 'button',\n SUBMIT: 'submit',\n} as const;\n\nconst Tag = {\n BUTTON: 'button',\n DIV: 'div',\n} as const;\n\ninterface ClickableIconProps {\n onClick: (event: MouseEvent) => void;\n children: ReactElement;\n name?: string;\n type?: (typeof Type)[keyof typeof Type];\n isActive?: boolean;\n isDisabled?: boolean;\n dataId?: string;\n tag?: (typeof Tag)[keyof typeof Tag];\n ariaLabel?: string;\n}\n\nexport interface ClickableIconExport {\n (props: ClickableIconProps): ReactElement;\n Type: typeof Type;\n Tag: typeof Tag;\n}\n\nconst ClickableIcon: ClickableIconExport = ({\n type = Type.BUTTON,\n name = undefined,\n onClick,\n children,\n isActive = false,\n isDisabled = false,\n dataId = undefined,\n tag = Tag.BUTTON,\n ariaLabel,\n}) => {\n if (tag === Tag.DIV) {\n return (\n \n {children}\n \n );\n }\n\n return (\n \n {children}\n \n );\n};\n\nClickableIcon.Type = Type;\nClickableIcon.Tag = Tag;\n\nexport default ClickableIcon;\n","export const types = {\n PRIMARY: 'PRIMARY',\n SECONDARY: 'SECONDARY',\n TERTIARY: 'TERTIARY',\n STICKY: 'STICKY',\n} as const;\n\nexport const sizes = {\n TINY: 'TINY',\n SMALL: 'SMALL',\n LARGE: 'LARGE',\n} as const;\n\nexport const themes = {\n LIGHT: 'LIGHT',\n DARK: 'DARK',\n INHERIT: 'INHERIT',\n} as const;\n","import type { HTMLAttributeAnchorTarget, MouseEvent, ReactElement } from 'react';\nimport React, { PureComponent } from 'react';\nimport cx from 'classnames';\nimport { Link as RouterLink } from 'react-router-dom';\nimport Loader from '@clearscore/ui.rainbow.loader';\nimport Text from '@clearscore/ui.rainbow.text';\nimport toTitleCase from '@clearscore-group/lib.normalize.title-case';\nimport type { LocationDescriptorObject } from 'history';\n\nimport { types, sizes, themes } from './constants';\nimport styles from './button.module.css';\nimport type { IButtonProps } from './types';\n\nconst getReactRouterLinkToProps = (href: string | undefined): LocationDescriptorObject => {\n if (href) {\n const [hashPathname, hash] = href.split('#');\n const [pathname, search] = hashPathname.split('?');\n return {\n pathname,\n hash,\n search,\n };\n }\n\n return {\n pathname: '',\n hash: '',\n search: '',\n };\n};\n\nexport default class Button extends PureComponent {\n // eslint-disable-next-line react/static-property-placement\n static defaultProps = {\n type: types.PRIMARY,\n size: sizes.SMALL,\n theme: themes.LIGHT,\n isWide: false,\n isNarrow: false,\n isFlat: false,\n isResponsive: false,\n isDisabled: false,\n isLoading: false,\n loadingLabel: 'loading',\n onClick: undefined,\n href: undefined,\n newTab: false,\n htmlType: 'button',\n dataId: undefined,\n routerTrackingSource: undefined,\n routerTrackingProps: undefined,\n state: undefined,\n download: false,\n };\n\n static types = types;\n static sizes = sizes;\n static themes = themes;\n\n get isDisabled(): boolean {\n const { isDisabled, isLoading } = this.props;\n return (isDisabled || isLoading) === true;\n }\n\n handleClick = (event: MouseEvent): void => {\n const { onClick } = this.props;\n\n if (!this.isDisabled && onClick) {\n onClick(event);\n }\n };\n\n get target(): HTMLAttributeAnchorTarget | undefined {\n const { href, newTab } = this.props;\n if (!href) {\n return undefined;\n }\n\n return newTab ? '_blank' : '_self';\n }\n\n get ButtonText(): ReactElement {\n const { isLoading, size, children, loadingLabel } = this.props;\n const sizeClass = styles[`isSize${toTitleCase(size)}`];\n const loaderClass: string = cx(styles.loaderWrapper, sizeClass);\n const TextButton: typeof Text.Button1 | typeof Text.Button2 =\n size === sizes.LARGE ? Text.Button1 : Text.Button2;\n\n return (\n \n {isLoading ? (\n
\n
\n {loadingLabel}\n
\n {'\\u00A0'}\n
\n ) : (\n children\n )}\n
\n );\n }\n\n render(): ReactElement {\n const {\n type,\n size,\n theme,\n isWide,\n isNarrow,\n isFlat,\n isResponsive,\n isDisabled,\n href,\n dataId,\n htmlType,\n newTab,\n routerTrackingSource,\n routerTrackingProps,\n state,\n download,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n loadingLabel, // suppressed to prevent being spread onto html\n ...props\n } = this.props;\n\n const typeClass: string = styles[`isType${toTitleCase(type)}`];\n const sizeClass: string = styles[`isSize${toTitleCase(size)}`];\n const themeClass: string = styles[`isTheme${toTitleCase(theme)}`];\n const CustomTag: 'a' | 'button' = href ? 'a' : 'button';\n const buttonProps = {\n ...props,\n className: cx(styles.button, typeClass, sizeClass, themeClass, {\n [styles.isWide]: isWide,\n [styles.isNarrow]: isNarrow,\n [styles.isFlat]: isFlat,\n [styles.isDisabled]: isDisabled,\n [styles.isResponsive]: isResponsive,\n }),\n disabled: this.isDisabled,\n onClick: this.handleClick,\n };\n /**\n * We need to remove incompatible HTML attributes,\n * from our button/anchor/link.\n */\n delete buttonProps.isLoading;\n\n const isInternalLink: boolean = (!newTab && href && !href.startsWith('http')) === true;\n if (isInternalLink && href) {\n /**\n * Checks the route and updates the UI without reloading the full page in the browser.\n */\n const getToPropValues = (): LocationDescriptorObject => {\n const toProps = getReactRouterLinkToProps(href);\n if (state && (routerTrackingSource || routerTrackingProps)) {\n return {\n ...toProps,\n state: {\n ...state,\n tracking: {\n source: routerTrackingSource,\n props: routerTrackingProps,\n },\n },\n };\n }\n\n if (state) {\n return {\n ...toProps,\n state,\n };\n }\n\n return {\n ...toProps,\n state: {\n tracking: {\n source: routerTrackingSource,\n props: routerTrackingProps,\n },\n },\n };\n };\n\n const hasState = state || routerTrackingSource || routerTrackingProps;\n const to: LocationDescriptorObject | string = hasState ? getToPropValues() : href;\n\n return (\n \n {this.ButtonText}\n \n );\n }\n\n return (\n \n {this.ButtonText}\n \n );\n }\n}\n","export const DisplayState = {\n SUCCESS: 'SUCCESS',\n INFO: 'INFO',\n INFO_WARNING: 'INFO_WARNING',\n WARNING: 'WARNING',\n ERROR: 'ERROR',\n ALERT_INFO: 'ALERT_INFO',\n} as const;\n","import type { ReactElement, ReactNode } from 'react';\nimport React, { Fragment } from 'react';\nimport cx from 'classnames';\nimport SuccessSvg from '@clearscore/rainbow.icons.status-success';\nimport InformationSvg from '@clearscore/rainbow.icons.status-info';\nimport AttentionSvg from '@clearscore/rainbow.icons.status-warning';\nimport AlertErrorSvg from '@clearscore/rainbow.icons.status-error';\nimport CloseSimple from '@clearscore/rainbow.icons.cross';\nimport ClickableIcon from '@clearscore/ui.rainbow.clickable-icon';\nimport Text from '@clearscore/ui.rainbow.text';\nimport Button from '@clearscore/ui.rainbow.button';\nimport toTitleCase from '@clearscore-group/lib.normalize.title-case';\n\nimport { DisplayState } from './constants';\nimport styles from './notification.module.css';\nimport type { INotificationBaseProps, TDisplayState } from './types';\n\ninterface INotificationProps extends INotificationBaseProps {\n href?: string;\n isNewTab?: boolean;\n children?: ReactNode;\n}\n\nexport interface INotification {\n (props: INotificationProps): ReactElement;\n DisplayState: typeof DisplayState;\n}\n\nconst NOOP = (): void => {\n // noop\n};\n\nconst getIcon = (displayState: TDisplayState): ReactElement =>\n ({\n [DisplayState.SUCCESS]: ,\n [DisplayState.INFO]: ,\n [DisplayState.INFO_WARNING]: ,\n [DisplayState.WARNING]: ,\n [DisplayState.ERROR]: ,\n [DisplayState.ALERT_INFO]: ,\n }[displayState] || );\n\nconst Notification: INotification = ({\n dataId = '',\n title = '',\n displayState = DisplayState.INFO,\n ctaText = '',\n href = '',\n ctaHandler = undefined,\n isNewTab = false,\n onDismiss = NOOP,\n isDismissible = true,\n dismissText = 'dismiss notification',\n children,\n}) => {\n const hasCtaLink = ctaText && href;\n const hasCtaButton = ctaText && !href;\n return (\n \n
{getIcon(displayState)}
\n\n
\n {title ? {title} : null}\n {children}\n
\n {hasCtaLink ? (\n
\n \n {ctaText}\n \n
\n ) : null}\n {hasCtaButton ? (\n \n ) : null}\n {isDismissible ? (\n
\n \n \n \n {dismissText}\n \n \n
\n ) : null}\n \n );\n};\n\nNotification.DisplayState = DisplayState;\n\nexport default Notification;\n","import type { ReactElement } from 'react';\nimport React, { useState, useEffect } from 'react';\nimport cx from 'classnames';\nimport useTimeout from '@clearscore-group/lib.hooks.use-timeout';\nimport Portal from '@clearscore-group/lib.helpers.portal';\nimport Text from '@clearscore/ui.rainbow.text';\n\nimport styles from './notification.controller.module.css';\nimport Notification from '../notification';\nimport type { INotificationBaseProps } from '../types';\n\ntype TTimeout = ReturnType;\ntype TNotificationController = (props: INotificationBaseProps) => ReactElement;\n\nconst NotificationController: TNotificationController = ({\n dataId = '',\n isOpen = false,\n children = null,\n duration = null,\n displayState = Notification.DisplayState.INFO,\n ctaText = '',\n ctaHandler = undefined,\n title = '',\n onDismiss = undefined,\n isDismissible = true,\n href = '',\n isNewTab = false,\n}) => {\n const [render, setRender] = useState(false);\n useEffect(() => {\n let timer: TTimeout;\n\n isOpen ? setRender(true) : (timer = setTimeout(() => setRender(false), 100));\n\n return (): void => clearTimeout(timer);\n }, [isOpen, setRender]);\n useTimeout(onDismiss, duration);\n\n return (\n \n \n {render && (\n \n {children}\n \n )}\n \n \n );\n};\n\nexport default NotificationController;\n","import { useEffect } from 'react';\n\nconst useTimeout = (callback, delay = null) => {\n useEffect(() => {\n let id;\n\n if (delay !== null) {\n id = setTimeout(callback, delay);\n }\n\n return () => clearTimeout(id);\n });\n};\n\nexport default useTimeout;\n","import React, { useEffect, useCallback } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { setAlertCookie } from '@clearscore-group/lib.helpers.cookies';\nimport { actions as alertActions, selectors as alertSelectors } from '@clearscore-group/lib.redux.alerts';\nimport { NotificationController } from '@clearscore/ui.rainbow.notification';\n\nimport useTracking from './lib/hooks/use-tracking';\n\nconst toUpper = (v) => (typeof v === 'string' ? v.toUpperCase() : v);\n\nconst AlertContainer = () => {\n const dispatch = useDispatch();\n const { trackBanner } = useTracking();\n\n const {\n isAlertOpen: isOpen,\n alertType: displayState,\n alertCloseText,\n alertContent: children,\n duration,\n\n ctaText = alertCloseText,\n isDismissible,\n alertId,\n href,\n title,\n isNewTab,\n alertCooldown,\n } = useSelector(alertSelectors.getAlert);\n\n const notificationControllerProps = {\n isOpen,\n // NOTE: there is mismatch in constants between rainbow and\n // rest of the system rainbow use UPPERCASE.\n displayState: toUpper(displayState),\n ctaText,\n children,\n duration,\n isDismissible,\n alertId,\n href,\n title,\n isNewTab,\n dataId: displayState,\n };\n\n const isAlertWithCooldown = alertId && alertCooldown > 0;\n\n const trackIfPossible = useCallback(\n (name) => {\n if (alertId) {\n trackBanner({ name, alertId, ctaText, href });\n }\n },\n [alertId, ctaText, href, dispatch],\n );\n\n useEffect(() => {\n if (isOpen) {\n trackIfPossible('fe_banner_viewed');\n }\n }, [isOpen, trackIfPossible, alertId, alertCooldown]);\n\n const onDismiss = () => {\n dispatch(alertActions.delayedDismissAlert());\n trackIfPossible('fe_banner_dismissed');\n\n if (isAlertWithCooldown) {\n setAlertCookie(alertId, alertCooldown);\n }\n };\n\n const ctaHandler = () => {\n dispatch(alertActions.dismissAlert());\n trackIfPossible('fe_banner_clicked');\n\n if (isAlertWithCooldown) {\n setAlertCookie(alertId, alertCooldown);\n }\n };\n\n return ;\n};\n\nexport default AlertContainer;\n","import { useLocation } from 'react-router-dom';\nimport useWebappTracking from '@clearscore-group/lib.hooks.use-webapp-tracking';\n\nexport default () => {\n const track = useWebappTracking();\n const { pathname } = useLocation();\n\n return {\n trackBanner: ({ name, alertId, ctaText, href }) =>\n track({\n name,\n props: {\n banner_id: alertId,\n cta_text: ctaText,\n destination: href,\n source: pathname,\n },\n }),\n };\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport styles from './full-width-container.module.css';\n\nconst FullWidthContainer = ({ children }) =>
{children}
;\n\nFullWidthContainer.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n};\n\nexport default FullWidthContainer;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport connect from '@clearscore-group/lib.redux.connect';\nimport getEnv from '@clearscore-group/lib.helpers.envs';\nimport Logo from '@clearscore/rainbow.icons.clearscore-logo-wordmark';\nimport LazyLoadComponent from '@clearscore-group/lib.flux-core.lazy-load';\nimport ConnectedAlert from '@clearscore-group/ui.shared.alert';\n\nimport styles from './index.module.css';\nimport FullWidthContainer from './full-width-container';\n\nconst websiteUrl = getEnv('INTERNATIONAL_WEBSITE');\n\nconst GlobalTemplate = ({ route, parentState, dispatch, match, coreAppBridgeTypes }) => {\n const isCreditSimpleUser = window\n ? window.location.pathname.includes('signup/credit-simple') ||\n window.location.pathname.includes('signup/nz/credit-simple')\n : false;\n return (\n
\n
\n \n
\n\n
\n \n
\n {isCreditSimpleUser ? (\n
\n \n
|
\n
\n ) : null}\n \n \n \n
\n
\n
\n\n \n
\n );\n};\n\nGlobalTemplate.propTypes = {\n route: PropTypes.object.isRequired,\n match: PropTypes.object.isRequired,\n parentState: PropTypes.object.isRequired,\n dispatch: PropTypes.func.isRequired,\n coreAppBridgeTypes: PropTypes.array.isRequired,\n};\n\nconst mapState = (state) => ({\n parentState: state,\n});\n\nexport default connect(mapState)(GlobalTemplate);\n","// Ramda v0.26.1\n// https://github.com/ramda/ramda\n// (c) 2013-2019 Scott Sauyet, Michael Hurley, and David Chambers\n// Ramda may be freely distributed under the MIT license.\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.R = {})));\n}(this, (function (exports) { 'use strict';\n\n function _cloneRegExp(pattern) {\n return new RegExp(pattern.source, (pattern.global ? 'g' : '') +\n (pattern.ignoreCase ? 'i' : '') +\n (pattern.multiline ? 'm' : '') +\n (pattern.sticky ? 'y' : '') +\n (pattern.unicode ? 'u' : ''));\n }\n\n function _isPlaceholder(a) {\n return a != null &&\n typeof a === 'object' &&\n a['@@functional/placeholder'] === true;\n }\n\n /**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\n function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n }\n\n /**\n * Gives a single-word string description of the (native) type of a value,\n * returning such answers as 'Object', 'Number', 'Array', or 'Null'. Does not\n * attempt to distinguish user Object types any further, reporting them all as\n * 'Object'.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Type\n * @sig (* -> {*}) -> String\n * @param {*} val The value to test\n * @return {String}\n * @example\n *\n * R.type({}); //=> \"Object\"\n * R.type(1); //=> \"Number\"\n * R.type(false); //=> \"Boolean\"\n * R.type('s'); //=> \"String\"\n * R.type(null); //=> \"Null\"\n * R.type([]); //=> \"Array\"\n * R.type(/[A-z]/); //=> \"RegExp\"\n * R.type(() => {}); //=> \"Function\"\n * R.type(undefined); //=> \"Undefined\"\n */\n var type = _curry1(function type(val) {\n return val === null\n ? 'Null'\n : val === undefined\n ? 'Undefined'\n : Object.prototype.toString.call(val).slice(8, -1);\n });\n\n /**\n * Copies an object.\n *\n * @private\n * @param {*} value The value to be copied\n * @param {Array} refFrom Array containing the source references\n * @param {Array} refTo Array containing the copied source references\n * @param {Boolean} deep Whether or not to perform deep cloning.\n * @return {*} The copied value.\n */\n function _clone(value, refFrom, refTo, deep) {\n var copy = function copy(copiedValue) {\n var len = refFrom.length;\n var idx = 0;\n while (idx < len) {\n if (value === refFrom[idx]) {\n return refTo[idx];\n }\n idx += 1;\n }\n refFrom[idx + 1] = value;\n refTo[idx + 1] = copiedValue;\n for (var key in value) {\n copiedValue[key] = deep ?\n _clone(value[key], refFrom, refTo, true) : value[key];\n }\n return copiedValue;\n };\n switch (type(value)) {\n case 'Object': return copy({});\n case 'Array': return copy([]);\n case 'Date': return new Date(value.valueOf());\n case 'RegExp': return _cloneRegExp(value);\n default: return value;\n }\n }\n\n /**\n * Creates a deep copy of the value which may contain (nested) `Array`s and\n * `Object`s, `Number`s, `String`s, `Boolean`s and `Date`s. `Function`s are\n * assigned by reference rather than copied\n *\n * Dispatches to a `clone` method if present.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {*} -> {*}\n * @param {*} value The object or array to clone\n * @return {*} A deeply cloned copy of `val`\n * @example\n *\n * const objects = [{}, {}, {}];\n * const objectsClone = R.clone(objects);\n * objects === objectsClone; //=> false\n * objects[0] === objectsClone[0]; //=> false\n */\n var clone = _curry1(function clone(value) {\n return value != null && typeof value.clone === 'function' ?\n value.clone() :\n _clone(value, [], [], true);\n });\n\n exports.clone = clone;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","'use strict';\n\nmodule.exports = require('./clone').clone;\n","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","export const SUCCESS = 'SUCCESS';\nexport const ERROR = 'ERROR';\nexport const RESET = 'RESET';\n\nexport const successType = (type) => `${type}_${SUCCESS}`;\nexport const errorType = (type) => `${type}_${ERROR}`;\nexport const resetType = (type) => `${type}_${RESET}`;\n\nexport const getTypes = (type) => ({\n pending: type,\n success: successType(type),\n error: errorType(type),\n reset: resetType(type),\n});\n","import * as requestStatuses from '@clearscore-group/lib.constants.request-statuses';\n\nimport { getTypes } from './types';\n\nexport default (TYPE) => {\n const TYPES = getTypes(TYPE);\n const initialState = {\n status: requestStatuses.INITIAL,\n };\n return (state = initialState, action = {}) => {\n const { payload = {}, type = '' } = action;\n switch (type) {\n case TYPES.pending:\n return {\n ...state,\n status: requestStatuses.PENDING,\n statusCode: undefined,\n request: action.requestData,\n meta: payload?.request?.meta,\n };\n case TYPES.success:\n return {\n ...state,\n status: requestStatuses.SUCCESS,\n data: payload?.data || payload,\n statusCode: action.statusCode,\n request: action.requestData,\n meta: action.requestMeta,\n };\n case TYPES.error:\n return {\n ...state,\n status: requestStatuses.ERROR,\n data: payload?.data || payload,\n statusCode: action.statusCode || payload?.status,\n request: action.requestData,\n meta: action.requestMeta,\n };\n case TYPES.reset:\n return {\n ...state,\n status: requestStatuses.INITIAL,\n statusCode: undefined,\n request: undefined,\n meta: undefined,\n };\n default:\n return state;\n }\n };\n};\n","/* eslint-disable guard-for-in, no-restricted-syntax */\nimport clonedeep from 'ramda.clone';\nimport isEqual from 'lodash.isequal';\n\nimport requestReducerFactory from './request-reducer';\n\nconst reducersFactory = (actionTypes) =>\n Object.keys(actionTypes).reduce(\n (prev, actionType) => ({\n ...prev,\n [actionType]: requestReducerFactory(actionTypes[actionType]),\n }),\n {},\n );\n\nconst createReducers = (actionTypes) => {\n const reducers = reducersFactory(actionTypes);\n\n const reduce = (stateValue, action) => {\n const mutatableCopy = clonedeep(stateValue);\n for (const currentReducerKey in reducers) {\n // eslint-disable-next-line no-param-reassign\n mutatableCopy[currentReducerKey] = reducers[currentReducerKey](mutatableCopy[currentReducerKey], action);\n }\n return isEqual(stateValue, mutatableCopy) ? stateValue : mutatableCopy;\n };\n return (state = {}, action = {}) => reduce(state, action);\n};\n\nexport default createReducers;\n","import createAction from '@clearscore-group/lib.helpers.create-action';\nimport { createSelector } from 'reselect';\nimport resolveRequest, { getRequestStatus } from '@clearscore-group/lib.helpers.resolve-request';\n\nimport createReducers from './reducers';\nimport { getTypes } from './types';\n\nconst snakify = (input) =>\n input\n .split(/(?=[A-Z])/)\n .join('_')\n .toUpperCase();\n\nconst createActionSelector = (moduleName, type) =>\n createSelector(\n (state) => resolveRequest(state, `${moduleName}.${type}`),\n (result) => result,\n );\nconst createStatusSelector = (moduleName, type) =>\n createSelector(createActionSelector(moduleName, type), ({ status, statusCode }) =>\n getRequestStatus(status, statusCode),\n );\n\nexport default ({ moduleName, actionCreators, customReducer }) => {\n // eslint-disable-next-line default-param-last\n const createActionType = (prev = {}, actionName) => ({\n ...prev,\n [actionName]: `CS/${snakify(moduleName)}_${snakify(actionName)}`,\n });\n const createType = (prev, actionName, actionTypes) => ({\n ...prev,\n [actionName]: getTypes(actionTypes[actionName]),\n });\n const createActions = (prev, actionName, types) => ({\n ...prev,\n [actionName]: actionCreators[actionName](types[actionName].pending),\n [`${actionName}Reset`]: (payload) => createAction(types[actionName].reset, payload),\n });\n const createSelectors = (prev, actionName) => ({\n ...prev,\n [actionName]: {\n getState: createActionSelector(moduleName, actionName),\n getStatus: createStatusSelector(moduleName, actionName),\n },\n });\n\n const { types, actions, selectors, actionTypes } = Object.keys(actionCreators).reduce((prev, actionName) => {\n const newActionTypes = createActionType(prev.actionTypes, actionName);\n const newType = createType(prev.types, actionName, newActionTypes);\n const newActions = createActions(prev.actions, actionName, newType);\n const newSelectors = createSelectors(prev.selectors, actionName);\n return {\n ...prev,\n actionTypes: newActionTypes,\n types: newType,\n actions: newActions,\n selectors: newSelectors,\n };\n }, {});\n\n return {\n reducers: {\n domain: createReducers(actionTypes, customReducer),\n },\n types,\n actionTypes,\n actions,\n selectors,\n };\n};\n","/* eslint-disable no-nested-ternary */\nimport createAction from '@clearscore-group/lib.helpers.create-action';\nimport createRequestPayload from '@clearscore-group/lib.helpers.create-request-payload';\n\nexport const fetchHasNewNotifications = (TYPE) => () =>\n createAction(TYPE, createRequestPayload('international', '/notifications/v1/notifications/hasNew'));\n\nexport const fetch = (TYPE) => () =>\n createAction(TYPE, createRequestPayload('international', '/notifications/v1/notifications'));\n\nexport const trackNotificationsClick = (TYPE) => (id, title, description, destination, rank, isSeen) =>\n createAction(TYPE, {\n context: {\n id,\n title,\n description,\n destination,\n rank: rank + 1,\n viewType: isSeen ? 'repeat_view' : 'first_view',\n },\n });\n\nexport const trackNotificationIconSeen = (TYPE) => (isBadgeShown, status) =>\n createAction(TYPE, {\n context: {\n isBadgeShown,\n status,\n },\n });\n","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}","var roundingMap = {\n ceil: Math.ceil,\n round: Math.round,\n floor: Math.floor,\n trunc: function (value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n } // Math.trunc is not supported by IE\n\n};\nvar defaultRoundingMethod = 'trunc';\nexport function getRoundingMethod(method) {\n return method ? roundingMap[method] : roundingMap[defaultRoundingMethod];\n}","import { millisecondsInHour } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of hours\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * const result = differenceInHours(\n * new Date(2014, 6, 2, 19, 0),\n * new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\n\nexport default function differenceInHours(dateLeft, dateRight, options) {\n requiredArgs(2, arguments);\n var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInHour;\n return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\n\nexport default function differenceInMilliseconds(dateLeft, dateRight) {\n requiredArgs(2, arguments);\n return toDate(dateLeft).getTime() - toDate(dateRight).getTime();\n}","/**\n * Days in 1 week.\n *\n * @name daysInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInWeek = 7;\n/**\n * Maximum allowed time.\n *\n * @name maxTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n/**\n * Milliseconds in 1 minute\n *\n * @name millisecondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInMinute = 60000;\n/**\n * Milliseconds in 1 hour\n *\n * @name millisecondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInHour = 3600000;\n/**\n * Milliseconds in 1 second\n *\n * @name millisecondsInSecond\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInSecond = 1000;\n/**\n * Minimum allowed time.\n *\n * @name minTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minTime = -maxTime;\n/**\n * Minutes in 1 hour\n *\n * @name minutesInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minutesInHour = 60;\n/**\n * Months in 1 quarter\n *\n * @name monthsInQuarter\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInQuarter = 3;\n/**\n * Months in 1 year\n *\n * @name monthsInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInYear = 12;\n/**\n * Quarters in 1 year\n *\n * @name quartersInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var quartersInYear = 4;\n/**\n * Seconds in 1 hour\n *\n * @name secondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInHour = 3600;\n/**\n * Seconds in 1 minute\n *\n * @name secondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInMinute = 60;","import isDate from \"../isDate/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n * if the first argument is not an instance of Date.\n * Instead, argument is converted beforehand using `toDate`.\n *\n * Examples:\n *\n * | `isValid` argument | Before v2.0.0 | v2.0.0 onward |\n * |---------------------------|---------------|---------------|\n * | `new Date()` | `true` | `true` |\n * | `new Date('2016-01-01')` | `true` | `true` |\n * | `new Date('')` | `false` | `false` |\n * | `new Date(1488370835081)` | `true` | `true` |\n * | `new Date(NaN)` | `false` | `false` |\n * | `'2016-01-01'` | `TypeError` | `false` |\n * | `''` | `TypeError` | `false` |\n * | `1488370835081` | `TypeError` | `true` |\n * | `NaN` | `TypeError` | `false` |\n *\n * We introduce this change to make *date-fns* consistent with ECMAScript behavior\n * that try to coerce arguments to the expected type\n * (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\n\nexport default function isValid(dirtyDate) {\n requiredArgs(1, arguments);\n\n if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {\n return false;\n }\n\n var date = toDate(dirtyDate);\n return !isNaN(Number(date));\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\n\nexport default function isDate(value) {\n requiredArgs(1, arguments);\n return value instanceof Date || typeof value === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\n\nvar formatDistance = function (token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', count.toString());\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n\n return result;\n};\n\nexport default formatDistance;","export default function buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\n\nvar formatRelative = function (token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;","export default function buildLocalizeFn(args) {\n return function (dirtyIndex, dirtyOptions) {\n var options = dirtyOptions || {};\n var context = options.context ? String(options.context) : 'standalone';\n var valuesArray;\n\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n\n var _width = options.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n\n return valuesArray[index];\n };\n}","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}; // Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\n\nvar ordinalNumber = function (dirtyNumber, _options) {\n var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n var rem100 = number % 100;\n\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n\n case 2:\n return number + 'nd';\n\n case 3:\n return number + 'rd';\n }\n }\n\n return number + 'th';\n};\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function (quarter) {\n return quarter - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;","export default function buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\n\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n\n return undefined;\n}","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function (value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function (index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;","export default function buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n code: 'en-US',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0\n /* Sunday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;","export default function toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n\n var number = Number(dirtyNumber);\n\n if (isNaN(number)) {\n return number;\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\n\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\n\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var timestamp = toDate(dirtyDate).getTime();\n var amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var fourthOfJanuaryOfNextYear = new Date(0);\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n var fourthOfJanuaryOfThisYear = new Date(0);\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var year = getUTCISOWeekYear(dirtyDate);\n var fourthOfJanuary = new Date(0);\n fourthOfJanuary.setUTCFullYear(year, 0, 4);\n fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCISOWeek(fourthOfJanuary);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var firstWeekOfNextYear = new Date(0);\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions);\n var firstWeekOfThisYear = new Date(0);\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeek(dirtyDate, options) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate);\n var year = getUTCWeekYear(dirtyDate, dirtyOptions);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCWeek(firstWeek, dirtyOptions);\n return date;\n}","export default function addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n\n while (output.length < targetLength) {\n output = '0' + output;\n }\n\n return sign + output;\n}","import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nvar formatters = {\n // Year\n y: function (date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n },\n // Month\n M: function (date, token) {\n var month = date.getUTCMonth();\n return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n // Day of the month\n d: function (date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function (date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return dayPeriodEnumValue.toUpperCase();\n\n case 'aaa':\n return dayPeriodEnumValue;\n\n case 'aaaaa':\n return dayPeriodEnumValue[0];\n\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n }\n },\n // Hour [1-12]\n h: function (date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function (date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length);\n },\n // Minute\n m: function (date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function (date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function (date, token) {\n var numberOfDigits = token.length;\n var milliseconds = date.getUTCMilliseconds();\n var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n return addLeadingZeros(fractionalSeconds, token.length);\n }\n};\nexport default formatters;","import getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nimport lightFormatters from \"../lightFormatters/index.js\";\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n};\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n // Era\n G: function (date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0;\n\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, {\n width: 'abbreviated'\n });\n // A, B\n\n case 'GGGGG':\n return localize.era(era, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return localize.era(era, {\n width: 'wide'\n });\n }\n },\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, {\n unit: 'year'\n });\n }\n\n return lightFormatters.y(date, token);\n },\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year\n\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n } // Ordinal number\n\n\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, {\n unit: 'year'\n });\n } // Padding\n\n\n return addLeadingZeros(weekYear, token.length);\n },\n // ISO week-numbering year\n R: function (date, token) {\n var isoWeekYear = getUTCISOWeekYear(date); // Padding\n\n return addLeadingZeros(isoWeekYear, token.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n var year = date.getUTCFullYear();\n return addLeadingZeros(year, token.length);\n },\n // Quarter\n Q: function (date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'QQ':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone quarter\n q: function (date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'qq':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Month\n M: function (date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n case 'M':\n case 'MM':\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return localize.month(month, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone month\n L: function (date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1);\n // 01, 02, ..., 12\n\n case 'LL':\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return localize.month(month, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Local week of year\n w: function (date, token, localize, options) {\n var week = getUTCWeek(date, options);\n\n if (token === 'wo') {\n return localize.ordinalNumber(week, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(week, token.length);\n },\n // ISO week of year\n I: function (date, token, localize) {\n var isoWeek = getUTCISOWeek(date);\n\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n // Day of the month\n d: function (date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), {\n unit: 'date'\n });\n }\n\n return lightFormatters.d(date, token);\n },\n // Day of year\n D: function (date, token, localize) {\n var dayOfYear = getUTCDayOfYear(date);\n\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, {\n unit: 'dayOfYear'\n });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n // Day of week\n E: function (date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Local day of week\n e: function (date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'ee':\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'cc':\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // ISO day of week\n i: function (date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek);\n // 02\n\n case 'ii':\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'iiii':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM or PM\n a: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n }\n\n switch (token) {\n case 'b':\n case 'bb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return lightFormatters.h(date, token);\n },\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), {\n unit: 'hour'\n });\n }\n\n return lightFormatters.H(date, token);\n },\n // Hour [0-11]\n K: function (date, token, localize) {\n var hours = date.getUTCHours() % 12;\n\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Hour [1-24]\n k: function (date, token, localize) {\n var hours = date.getUTCHours();\n if (hours === 0) hours = 24;\n\n if (token === 'ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Minute\n m: function (date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), {\n unit: 'minute'\n });\n }\n\n return lightFormatters.m(date, token);\n },\n // Second\n s: function (date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), {\n unit: 'second'\n });\n }\n\n return lightFormatters.s(date, token);\n },\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return 'Z';\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Seconds timestamp\n t: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = Math.floor(originalDate.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n // Milliseconds timestamp\n T: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = originalDate.getTime();\n return addLeadingZeros(timestamp, token.length);\n }\n};\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n\n if (minutes === 0) {\n return sign + String(hours);\n }\n\n var delimiter = dirtyDelimiter || '';\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n\n return formatTimezone(offset, dirtyDelimiter);\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n var minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n\nexport default formatters;","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCDayOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var timestamp = date.getTime();\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n var startOfYearTimestamp = date.getTime();\n var difference = timestamp - startOfYearTimestamp;\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}","function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/) || [];\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n var dateTimeFormat;\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n}\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nexport default longFormatters;","var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n if (token === 'YYYY') {\n throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'YY') {\n throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'D') {\n throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'DD') {\n throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n }\n}","import isValid from \"../isValid/index.js\";\nimport defaultLocale from \"../locale/en-US/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n * ```javascript\n * // Before v2.0.0\n * format(new Date(2016, 0, 1))\n *\n * // v2.0.0 onward\n * format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n * ```\n *\n * - New format string API for `format` function\n * which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).\n * See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://git.io/fxCyr\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n requiredArgs(2, arguments);\n var formatStr = String(dirtyFormatStr);\n var options = dirtyOptions || {};\n var locale = options.locale || defaultLocale;\n var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property');\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property');\n }\n\n var originalDate = toDate(dirtyDate);\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value');\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n\n\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n var utcDate = subMilliseconds(originalDate, timezoneOffset);\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n };\n var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong, formatterOptions);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp).map(function (substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\";\n }\n\n var firstCharacter = substring[0];\n\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring);\n }\n\n var formatter = formatters[firstCharacter];\n\n if (formatter) {\n if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n return formatter(utcDate, substring, locale.localize, formatterOptions);\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n\n return substring;\n }).join('');\n return result;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}","/* eslint-disable no-bitwise, no-empty */\nimport { createSelector } from 'reselect';\nimport { resolveProp } from '@clearscore-group/lib.helpers.resolve-props';\nimport differenceInHours from 'date-fns/differenceInHours';\nimport formatDate from 'date-fns/format';\n\nconst DAYS_IN_WEEK = 7;\nconst HOURS_IN_DAY = 24;\n\nexport const getHasNewNotifications = createSelector(\n (state) => resolveProp('notifications.fetchHasNewNotifications.data', state),\n (hasNewData = { hasNew: false, count: 0 }) => hasNewData,\n);\n\nconst getDifferenceInHours = (date) => {\n const now = new Date();\n return Math.abs(differenceInHours(date, now));\n};\n\nexport const getHumanReadableFormat = (distance, notificationDate, language) => {\n if (distance <= HOURS_IN_DAY) return language.today;\n if (distance <= HOURS_IN_DAY * 2) return language.yesterday;\n if (distance < HOURS_IN_DAY * DAYS_IN_WEEK)\n return `${Math.floor(distance / HOURS_IN_DAY)} ${language.days} ${language.ago}`;\n const numWeeks = Math.floor(distance / HOURS_IN_DAY / DAYS_IN_WEEK);\n if (numWeeks <= 8) {\n if (numWeeks < 2) return `${numWeeks} ${language.week} ${language.ago}`;\n return `${numWeeks} ${language.weeks} ${language.ago}`;\n }\n return formatDate(new Date(notificationDate), 'd MMM yyyy');\n};\n\nexport const getNotifications = (language) =>\n createSelector(\n (state) => resolveProp('notifications.fetch.data', state),\n (notifications = []) =>\n notifications.map((notification) => ({\n description: notification?.payload?.description,\n destinationUrl: notification?.payload?.destinationUrl,\n friendlyDateCreated: getHumanReadableFormat(\n getDifferenceInHours(new Date(notification.createdAt)),\n notification.createdAt,\n language,\n ),\n id: notification.id,\n isSeen: !!notification?.seenAt,\n title: notification?.payload?.title,\n isExclusive: !!notification?.payload?.badge,\n disclaimer: notification?.payload?.disclaimer,\n badge: notification?.payload?.badge,\n notificationType: notification?.payload?.notificationType,\n modalId: notification?.payload?.modalId,\n modalProperties: notification?.payload?.modalProperties,\n ctaText: notification?.payload?.ctaText,\n icon: notification?.payload?.icon,\n })),\n );\n","import createReduxModule from '@clearscore-group/lib.redux.create-requests';\n\nimport * as actionCreators from './actions';\nimport * as customSelectors from './selectors';\n\nconst redux = createReduxModule({ moduleName: 'notifications', actionCreators });\n\nexport const { types } = redux;\nexport const { actions } = redux;\nexport const { reducers } = redux;\nexport const selectors = { ...redux.selectors, ...customSelectors };\n","export function get(feature) {\n const mocked = JSON.parse(localStorage.getItem(`features`) || '{}');\n return feature ? mocked[feature] : mocked;\n}\n\nexport function set(feature, options = true) {\n localStorage.setItem(`features`, JSON.stringify({ ...get(), [feature]: options }, null, 2));\n}\n","import { GB, ZA, AU, CA, NZ, GLOBAL } from '@clearscore-group/lib.config.i18n';\nimport * as featureToggle from '@clearscore-group/ui.tools.feature-toggle';\n\nconst seasonalBackgroundFeature = featureToggle.get('seasonalBackgrounds') || {};\nconst getTheme = ({ overrideTheme, storeTheme }: { overrideTheme?: string; storeTheme: string }): string =>\n seasonalBackgroundFeature.band || overrideTheme || storeTheme;\n\ninterface GetSeason {\n market: any;\n month: number;\n}\n\ntype SeasonReturnType = 'autumn' | 'summer' | 'winter' | 'spring';\n\nconst GetSeason = ({ market, month }: GetSeason): SeasonReturnType => {\n if (seasonalBackgroundFeature.season) {\n return seasonalBackgroundFeature.season;\n }\n if ([AU, ZA, NZ].includes(market)) {\n // southern hemisphere\n switch (true) {\n case month >= 12 || month < 3:\n return 'summer';\n case month >= 3 && month < 6:\n return 'autumn';\n case month >= 6 && month < 9:\n return 'winter';\n default:\n return 'spring';\n }\n } else {\n // northern hemisphere\n switch (true) {\n case month >= 12 || month < 3:\n return 'winter';\n case month >= 3 && month < 6:\n return 'spring';\n case month >= 6 && month < 9:\n return 'summer';\n default:\n return 'autumn';\n }\n }\n};\n\nexport default {\n [GB]: { seasonOverride: (): SeasonReturnType => 'winter', getTheme: (): string => 'all' },\n [ZA]: { seasonOverride: (): SeasonReturnType => 'spring', getTheme: (): string => 'all' },\n [AU]: {\n seasonOverride: ({ month }: { month: number }): SeasonReturnType => GetSeason({ market: AU, month }),\n getTheme: (): string => 'sigma',\n },\n [NZ]: {\n seasonOverride: ({ month }: { month: number }): SeasonReturnType => GetSeason({ market: NZ, month }),\n getTheme: (): string => 'sigma',\n },\n [GLOBAL]: {\n seasonOverride: ({ month }: { month: number }): SeasonReturnType => GetSeason({ market: GLOBAL, month }),\n getTheme,\n },\n [CA]: {\n seasonOverride: ({ month }: { month: number }): SeasonReturnType => GetSeason({ market: CA, month }),\n getTheme: (): string => 'all',\n },\n};\n","import type { ReactElement } from 'react';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport cx from 'classnames';\nimport { MARKETS, GLOBAL, GB, CA, AU, ZA, NZ } from '@clearscore-group/lib.config.i18n';\nimport { selectors as dashboardSelectors } from '@clearscore-group/lib.redux.dashboard';\nimport { selectors as marketSelectors } from '@clearscore-group/lib.redux.market';\nimport * as featureToggle from '@clearscore-group/ui.tools.feature-toggle';\n\nimport styles from './app-background.module.css';\nimport marketConfig from './lib/market-config';\n\nconst seasonalBackgroundFeature = featureToggle.get('seasonalBackgrounds') || {};\nconst env = seasonalBackgroundFeature.environment || 'production';\nconst HOST = `//media.clearscore.com`;\nconst IMAGE_NORMAL = 'normal';\nconst IMAGE_BLURRED = 'blurred';\nconst FORMATS = ['avif', 'webp', 'jpg'] as const; // order matters, we want to try to serve avif first, then webp, then finally jpg\nconst sizes: { orientation: Orientation; width: Width }[] = [\n { orientation: 'portrait', width: 720 },\n { orientation: 'portrait', width: 1440 },\n { orientation: 'landscape', width: 720 },\n { orientation: 'landscape', width: 1280 },\n { orientation: 'landscape', width: 1920 },\n];\n\ntype Format = (typeof FORMATS)[number];\ntype Focus = boolean | undefined;\ntype Orientation = 'landscape' | 'portrait';\ntype Width = 720 | 1440 | 720 | 1280 | 1920;\n\ninterface GetImgUrl {\n market: any;\n theme: string;\n orientation: Orientation;\n width: Width;\n format: Format;\n focus?: Focus;\n isNighttime?: boolean;\n cacheString: string;\n}\n\nconst getImgUrl = ({\n market,\n theme: originalTheme,\n orientation,\n width,\n focus,\n format,\n isNighttime,\n cacheString,\n}: GetImgUrl): string => {\n // TODO: fix this and all hacks in here with JIRA CS-71732\n // @ts-expect-error adjust for config.i18n ts types\n const { seasonOverride } = marketConfig[market];\n const season = seasonOverride({ month: new Date(Date.now()).getMonth() + 1 });\n const blur = focus ? '' : '-blur';\n const time = isNighttime ? '' : ''; // soon: '-night'\n const theme = originalTheme === 'no-file' ? 'theta' : originalTheme;\n const chosenMarket = seasonalBackgroundFeature.market || market;\n // use cache-busting string when testing images with 'featureToggle' (i.e. from within cs-dev-tools) turned on\n // additional cache-busting added since the '1st sept 2021' date was missed for new images\n\n const cacheBust = seasonalBackgroundFeature.market ? `?${cacheString}` : '?winter2023';\n if (chosenMarket === GB) {\n // TODO New format, will be used across all the markets once CS-106379 is integrated.\n // eslint-disable-next-line max-len\n return `${HOST}/${chosenMarket}/images/seasonal/2023/${season}/home/web/${orientation}-${width}/background${blur}${time}.${format}${cacheBust}`;\n }\n if (chosenMarket === CA) {\n // TODO New format, will be used across all the markets once CS-106379 is integrated.\n // eslint-disable-next-line max-len\n return `${HOST}/${chosenMarket}/images/seasonal/2023/${season}/home/web/${orientation}-${width}/background${blur}${time}.${format}${cacheBust}`;\n }\n if (chosenMarket === AU) {\n // TODO New format, will be used across all the markets once CS-106379 is integrated.\n // eslint-disable-next-line max-len\n return `${HOST}/${chosenMarket}/images/seasonal/2023/${season}/home/web/${orientation}-${width}/background${blur}${time}.${format}${cacheBust}`;\n }\n if (chosenMarket === ZA) {\n // TODO New format, will be used across all the markets once CS-106379 is integrated.\n // eslint-disable-next-line max-len\n return `${HOST}/${chosenMarket}/images/seasonal/2023/${season}/home/web/${orientation}-${width}/background${blur}${time}.${format}${cacheBust}`;\n }\n if (chosenMarket === NZ) {\n // TODO New format, will be used across all the markets once CS-106379 is integrated.\n // eslint-disable-next-line max-len\n return `${HOST}/${chosenMarket}/images/seasonal/2023/spring/home/web/${orientation}-${width}/background${blur}${time}.${format}${cacheBust}`;\n }\n // eslint-disable-next-line max-len\n return `${HOST}/${chosenMarket}/images/seasonal/${season}/${env}/${theme}/web/${orientation}-${width}/background${blur}${time}.${format}${cacheBust}`;\n};\n\nconst useTimes = (): { isNighttime: boolean } =>\n // useMemo in case the user is viewing the page when it crosses over into nighttime / daytime (also performance)\n React.useMemo(() => {\n const now = new Date(Date.now());\n const hourOfDay = now.getHours();\n const isNighttime = hourOfDay > 18 || hourOfDay < 7; // Later than 7pm or earlier than 7am\n return { isNighttime };\n }, []);\n\ninterface AppBackground {\n overrideMarket?: any;\n theme?: string;\n focus?: Focus;\n transparent?: boolean;\n hasGradient?: boolean;\n imageURL?: string;\n}\n\nconst AppBackground = ({\n overrideMarket,\n theme: overrideTheme,\n focus,\n transparent,\n hasGradient,\n imageURL,\n}: AppBackground): ReactElement | null => {\n const cacheString = Math.random().toString(36);\n const { isNighttime } = useTimes();\n const storeMarket = useSelector(marketSelectors.getActiveMarket);\n const market = overrideMarket || storeMarket;\n const isActualMarket = [...MARKETS, GLOBAL].includes(market);\n const scores = useSelector(dashboardSelectors.getScores) as { theme: string };\n // @ts-expect-error adjust for config.i18n ts types\n const theme = marketConfig[market]?.getTheme({ overrideTheme, storeTheme: scores.theme });\n const type = focus ? IMAGE_NORMAL : IMAGE_BLURRED;\n const time = isNighttime ? 'night' : 'day';\n const defaultUrlArgs = { market, theme, focus, isNighttime };\n if (transparent || !isActualMarket) return null;\n\n return (\n \n {!imageURL ? (\n \n {FORMATS.map((format) => (\n \n `${getImgUrl({\n ...defaultUrlArgs,\n orientation,\n width,\n format,\n cacheString,\n })} ${width}w`,\n )\n .join(',\\n')}\n />\n ))}\n \n \n ) : (\n \n \"\"\n \n )}\n \n );\n};\n\nexport default AppBackground;\n","import { useSelector } from 'react-redux';\nimport { selectors as routeSelectors } from '@clearscore-group/lib.redux.routes';\n\ninterface Segments {\n groups: string[] | string;\n}\n\nconst useSegmentation = (): Segments => useSelector(routeSelectors.getSegmentation);\n\n/**\n * Check if a user has any of the argument groups\n * @param {...string} requestedGroups groups to check for\n */\n\nexport const useHasSegmentationGroups = (...requestedGroups: string[]) => {\n const { groups } = useSegmentation();\n\n return requestedGroups.some((rg) => groups.includes(rg));\n};\n\ninterface VariantMap {\n [key: string]: string;\n}\n\nexport const useExperiment = (experimentName: string, variantMap: VariantMap) => {\n const { groups } = useSegmentation();\n\n const selectedVariant = Object.keys(variantMap).find((variant) => groups.includes(`${experimentName}:${variant}`));\n\n if (selectedVariant) {\n return variantMap[selectedVariant];\n }\n\n return variantMap.control || null;\n};\n\nexport default useSegmentation;\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","import deepmerge from 'deepmerge';\nimport type { DefaultRootState } from 'react-redux';\nimport { useSelector } from 'react-redux';\nimport type { MARKETS } from '@clearscore-group/lib.config.i18n';\nimport { GB } from '@clearscore-group/lib.config.i18n';\nimport { selectors as marketSelectors } from '@clearscore-group/lib.redux.market';\n\ntype TMarketConfigKey = (typeof MARKETS)[number] | 'common';\ntype TMarketConfig = Partial>;\n\nconst isObject = (value: unknown): value is TMarketConfig =>\n !!value && typeof value === 'object' && value.constructor === Object;\n\nconst useMarketConfig = (marketConfig: T): T extends TMarketConfig ? T[keyof T] : never => {\n if (!marketConfig || !isObject(marketConfig)) throw new Error('A market config object must be provided');\n const market = useSelector(marketSelectors.getActiveMarket);\n\n // GB market defaulting is temporary and will be removed.\n // Common config should be placed under a 'common' property.\n const baseConfig = marketConfig.common || marketConfig[GB];\n\n if (marketConfig[market]) {\n return baseConfig\n ? deepmerge(baseConfig, marketConfig[market], {\n arrayMerge: (_, sourceArray) => sourceArray,\n })\n : marketConfig[market];\n }\n\n return baseConfig || null;\n};\n\nexport default useMarketConfig;\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","var camel2hyphen = function (str) {\n return str\n .replace(/[A-Z]/g, function (match) {\n return '-' + match.toLowerCase();\n })\n .toLowerCase();\n};\n\nmodule.exports = camel2hyphen;","var camel2hyphen = require('string-convert/camel2hyphen');\n\nvar isDimension = function (feature) {\n var re = /[height|width]$/;\n return re.test(feature);\n};\n\nvar obj2mq = function (obj) {\n var mq = '';\n var features = Object.keys(obj);\n features.forEach(function (feature, index) {\n var value = obj[feature];\n feature = camel2hyphen(feature);\n // Add px to dimension features\n if (isDimension(feature) && typeof value === 'number') {\n value = value + 'px';\n }\n if (value === true) {\n mq += feature;\n } else if (value === false) {\n mq += 'not ' + feature;\n } else {\n mq += '(' + feature + ': ' + value + ')';\n }\n if (index < features.length-1) {\n mq += ' and '\n }\n });\n return mq;\n};\n\nvar json2mq = function (query) {\n var mq = '';\n if (typeof query === 'string') {\n return query;\n }\n // Handling array of media queries\n if (query instanceof Array) {\n query.forEach(function (q, index) {\n mq += obj2mq(q);\n if (index < query.length-1) {\n mq += ', '\n }\n });\n return mq;\n }\n // Handling single media query\n return obj2mq(query);\n};\n\nmodule.exports = json2mq;","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport invariant from 'invariant';\nimport json2mq from 'json2mq';\n\nvar MediaQueryListener =\n/*#__PURE__*/\nfunction () {\n function MediaQueryListener(targetWindow, query, listener) {\n var _this = this;\n\n this.nativeMediaQueryList = targetWindow.matchMedia(query);\n this.active = true; // Safari doesn't clear up listener with removeListener\n // when the listener is already waiting in the event queue.\n // Having an active flag to make sure the listener is not called\n // after we removeListener.\n\n this.cancellableListener = function () {\n _this.matches = _this.nativeMediaQueryList.matches;\n\n if (_this.active) {\n listener.apply(void 0, arguments);\n }\n };\n\n this.nativeMediaQueryList.addListener(this.cancellableListener);\n this.matches = this.nativeMediaQueryList.matches;\n }\n\n var _proto = MediaQueryListener.prototype;\n\n _proto.cancel = function cancel() {\n this.active = false;\n this.nativeMediaQueryList.removeListener(this.cancellableListener);\n };\n\n return MediaQueryListener;\n}();\n\nvar queryType = PropTypes.oneOfType([PropTypes.string, PropTypes.object, PropTypes.arrayOf(PropTypes.object.isRequired)]);\n/**\n * Conditionally renders based on whether or not a media query matches.\n */\n\nvar Media =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Media, _React$Component);\n\n function Media(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"queries\", []);\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"getMatches\", function () {\n var result = _this.queries.reduce(function (acc, _ref) {\n var _extends2;\n\n var name = _ref.name,\n mqListener = _ref.mqListener;\n return _extends({}, acc, (_extends2 = {}, _extends2[name] = mqListener.matches, _extends2));\n }, {}); // return result;\n\n\n return unwrapSingleQuery(result);\n });\n\n _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), \"updateMatches\", function () {\n var newMatches = _this.getMatches();\n\n _this.setState(function () {\n return {\n matches: newMatches\n };\n }, _this.onChange);\n });\n\n !(!(!props.query && !props.queries) || props.query && props.queries) ? process.env.NODE_ENV !== \"production\" ? invariant(false, ' must be supplied with either \"query\" or \"queries\"') : invariant(false) : void 0;\n !(props.defaultMatches === undefined || !props.query || typeof props.defaultMatches === \"boolean\") ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" when query is set, defaultMatches must be a boolean, received \" + typeof props.defaultMatches) : invariant(false) : void 0;\n !(props.defaultMatches === undefined || !props.queries || typeof props.defaultMatches === \"object\") ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" when queries is set, defaultMatches must be a object of booleans, received \" + typeof props.defaultMatches) : invariant(false) : void 0;\n\n if (typeof window !== \"object\") {\n // In case we're rendering on the server, apply the default matches\n var matches;\n\n if (props.defaultMatches !== undefined) {\n matches = props.defaultMatches;\n } else if (props.query) {\n matches = true;\n }\n /* if (props.queries) */\n else {\n matches = Object.keys(_this.props.queries).reduce(function (acc, key) {\n var _extends3;\n\n return _extends({}, acc, (_extends3 = {}, _extends3[key] = true, _extends3));\n }, {});\n }\n\n _this.state = {\n matches: matches\n };\n return _assertThisInitialized(_this);\n }\n\n _this.initialize(); // Instead of calling this.updateMatches, we manually set the initial state to prevent\n // calling setState, which could trigger an unnecessary second render\n\n\n _this.state = {\n matches: _this.props.defaultMatches !== undefined ? _this.props.defaultMatches : _this.getMatches()\n };\n\n _this.onChange();\n\n return _this;\n }\n\n var _proto = Media.prototype;\n\n _proto.initialize = function initialize() {\n var _this2 = this;\n\n var targetWindow = this.props.targetWindow || window;\n !(typeof targetWindow.matchMedia === \"function\") ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" does not support `matchMedia`.\") : invariant(false) : void 0;\n var queries = this.props.queries || wrapInQueryObject(this.props.query);\n this.queries = Object.keys(queries).map(function (name) {\n var query = queries[name];\n var qs = typeof query !== \"string\" ? json2mq(query) : query;\n var mqListener = new MediaQueryListener(targetWindow, qs, _this2.updateMatches);\n return {\n name: name,\n mqListener: mqListener\n };\n });\n };\n\n _proto.componentDidMount = function componentDidMount() {\n this.initialize(); // If props.defaultMatches has been set, ensure we trigger a two-pass render.\n // This is useful for SSR with mismatching defaultMatches vs actual matches from window.matchMedia\n // Details: https://github.com/ReactTraining/react-media/issues/81\n\n if (this.props.defaultMatches !== undefined) {\n this.updateMatches();\n }\n };\n\n _proto.onChange = function onChange() {\n var onChange = this.props.onChange;\n\n if (onChange) {\n onChange(this.state.matches);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.queries.forEach(function (_ref2) {\n var mqListener = _ref2.mqListener;\n return mqListener.cancel();\n });\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n children = _this$props.children,\n render = _this$props.render;\n var matches = this.state.matches;\n var isAnyMatches = typeof matches === \"object\" ? Object.keys(matches).some(function (key) {\n return matches[key];\n }) : matches;\n return render ? isAnyMatches ? render(matches) : null : children ? typeof children === \"function\" ? children(matches) : !Array.isArray(children) || children.length // Preact defaults to empty children array\n ? isAnyMatches ? // We have to check whether child is a composite component or not to decide should we\n // provide `matches` as a prop or not\n React.Children.only(children) && typeof React.Children.only(children).type === \"string\" ? React.Children.only(children) : React.cloneElement(React.Children.only(children), {\n matches: matches\n }) : null : null : null;\n };\n\n return Media;\n}(React.Component);\n/**\n * Wraps a single query in an object. This is used to provide backward compatibility with\n * the old `query` prop (as opposed to `queries`). If only a single query is passed, the object\n * will be unpacked down the line, but this allows our internals to assume an object of queries\n * at all times.\n */\n\n\n_defineProperty(Media, \"propTypes\", {\n defaultMatches: PropTypes.oneOfType([PropTypes.bool, PropTypes.objectOf(PropTypes.bool)]),\n query: queryType,\n queries: PropTypes.objectOf(queryType),\n render: PropTypes.func,\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n targetWindow: PropTypes.object,\n onChange: PropTypes.func\n});\n\nfunction wrapInQueryObject(query) {\n return {\n __DEFAULT__: query\n };\n}\n/**\n * Unwraps an object of queries, if it was originally passed as a single query.\n */\n\n\nfunction unwrapSingleQuery(queryObject) {\n var queryNames = Object.keys(queryObject);\n\n if (queryNames.length === 1 && queryNames[0] === \"__DEFAULT__\") {\n return queryObject.__DEFAULT__;\n }\n\n return queryObject;\n}\n\nexport default Media;\n","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","\n \n \n \n \n \n \n","\n \n \n \n \n \n \n","\n \n \n \n \n \n \n\n","\n \n \n \n \n \n \n\n","\n \n \n \n \n \n \n\n","\n\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n","\n \n \n \n \n \n \n\n","\n \n \n \n \n \n \n\n","","\n \n \n \n \n \n \n\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Text from '@clearscore/ui.rainbow.text';\n\nimport styles from './styles.module.css';\n\nfunction Badge({ value, dataId }) {\n return (\n \n \n {value}\n \n \n );\n}\n\nBadge.propTypes = {\n value: PropTypes.number.isRequired,\n dataId: PropTypes.string,\n};\n\nBadge.defaultProps = {\n dataId: undefined,\n};\n\nexport default Badge;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&uh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=sh(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Ah(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=yh(f.type,f.key,f.props,null,a.mode,h),h.ref=sh(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=zh(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);th(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=xh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Bh=vh(!0),Ch=vh(!1),Dh={},Eh=Uf(Dh),Fh=Uf(Dh),Gh=Uf(Dh);function Hh(a){if(a===Dh)throw Error(p(174));return a}function Ih(a,b){G(Gh,b);G(Fh,a);G(Eh,Dh);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(Eh);G(Eh,b)}function Jh(){E(Eh);E(Fh);E(Gh)}\nfunction Kh(a){Hh(Gh.current);var b=Hh(Eh.current);var c=lb(b,a.type);b!==c&&(G(Fh,a),G(Eh,c))}function Lh(a){Fh.current===a&&(E(Eh),E(Fh))}var M=Uf(0);\nfunction Mh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Nh=[];\nfunction Oh(){for(var a=0;ac?c:4;a(!0);var d=Qh.transition;Qh.transition={};try{a(!1),b()}finally{C=c,Qh.transition=d}}function Fi(){return di().memoizedState}\nfunction Gi(a,b,c){var d=lh(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,c);else if(c=Yg(a,b,c,d),null!==c){var e=L();mh(c,a,d,e);Ji(c,b,d)}}\nfunction ri(a,b,c){var d=lh(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,Xg(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=Yg(a,b,e,d);null!==c&&(e=L(),mh(c,a,d,e),Ji(c,b,d))}}\nfunction Hi(a){var b=a.alternate;return a===N||null!==b&&b===N}function Ii(a,b){Th=Sh=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Ji(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar ai={readContext:Vg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useInsertionEffect:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useSyncExternalStore:Q,useId:Q,unstable_isNewReconciler:!1},Yh={readContext:Vg,useCallback:function(a,b){ci().memoizedState=[a,void 0===b?null:b];return a},useContext:Vg,useEffect:vi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ti(4194308,\n4,yi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ti(4194308,4,a,b)},useInsertionEffect:function(a,b){return ti(4,2,a,b)},useMemo:function(a,b){var c=ci();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=ci();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Gi.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=\nci();a={current:a};return b.memoizedState=a},useState:qi,useDebugValue:Ai,useDeferredValue:function(a){return ci().memoizedState=a},useTransition:function(){var a=qi(!1),b=a[0];a=Ei.bind(null,a[1]);ci().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=N,e=ci();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===R)throw Error(p(349));0!==(Rh&30)||ni(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;vi(ki.bind(null,d,\nf,a),[a]);d.flags|=2048;li(9,mi.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=ci(),b=R.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Uh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eHj&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304)}else{if(!d)if(a=Mh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Ej(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Hj&&1073741824!==c&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=M.current,G(M,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Ij(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(gj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Jj(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Jh(),E(Wf),E(H),Oh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Lh(b),null;case 13:E(M);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(M),null;case 4:return Jh(),null;case 10:return Rg(b.type._context),null;case 22:case 23:return Ij(),\nnull;case 24:return null;default:return null}}var Kj=!1,U=!1,Lj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Mj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Nj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Oj=!1;\nfunction Pj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Lg(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Oj;Oj=!1;return n}\nfunction Qj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Nj(b,c,f)}e=e.next}while(e!==d)}}function Rj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Sj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Tj(a){var b=a.alternate;null!==b&&(a.alternate=null,Tj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Uj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Vj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Uj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}\nfunction Xj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Xj(a,b,c),a=a.sibling;null!==a;)Xj(a,b,c),a=a.sibling}var X=null,Yj=!1;function Zj(a,b,c){for(c=c.child;null!==c;)ak(a,b,c),c=c.sibling}\nfunction ak(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Mj(c,b);case 6:var d=X,e=Yj;X=null;Zj(a,b,c);X=d;Yj=e;null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Yj;X=c.stateNode.containerInfo;Yj=!0;\nZj(a,b,c);X=d;Yj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Nj(c,b,g):0!==(f&4)&&Nj(c,b,g));e=e.next}while(e!==d)}Zj(a,b,c);break;case 1:if(!U&&(Mj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Zj(a,b,c);break;case 21:Zj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Zj(a,b,c),U=d):Zj(a,b,c);break;default:Zj(a,b,c)}}function bk(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Lj);b.forEach(function(b){var d=ck.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction dk(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*mk(d/1960))-d;if(10a?16:a;if(null===xk)var d=!1;else{a=xk;xk=null;yk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-gk?Lk(a,0):sk|=c);Ek(a,b)}function Zk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=L();a=Zg(a,b);null!==a&&(Ac(a,b,c),Ek(a,c))}function vj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Zk(a,c)}\nfunction ck(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Zk(a,c)}var Wk;\nWk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)Ug=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return Ug=!1,zj(a,b,c);Ug=0!==(a.flags&131072)?!0:!1}else Ug=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;jj(a,b);a=b.pendingProps;var e=Yf(b,H.current);Tg(b,c);e=Xh(null,b,d,a,e,c);var f=bi();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,ah(b),e.updater=nh,b.stateNode=e,e._reactInternals=b,rh(b,d,a,c),b=kj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Yi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{jj(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=$k(d);a=Lg(d,a);switch(e){case 0:b=dj(null,b,d,a,c);break a;case 1:b=ij(null,b,d,a,c);break a;case 11:b=Zi(null,b,d,a,c);break a;case 14:b=aj(null,b,d,Lg(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),dj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),ij(a,b,d,e,c);case 3:a:{lj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;bh(a,b);gh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ki(Error(p(423)),b);b=mj(a,b,d,c,e);break a}else if(d!==e){e=Ki(Error(p(424)),b);b=mj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Ch(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=$i(a,b,c);break a}Yi(a,b,d,c)}b=b.child}return b;case 5:return Kh(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\nhj(a,b),Yi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return pj(a,b,c);case 4:return Ih(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Bh(b,null,d,c):Yi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),Zi(a,b,d,e,c);case 7:return Yi(a,b,b.pendingProps,c),b.child;case 8:return Yi(a,b,b.pendingProps.children,c),b.child;case 12:return Yi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Mg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=$i(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=ch(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);Sg(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);Sg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Yi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,Tg(b,c),e=Vg(e),d=d(e),b.flags|=1,Yi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Lg(d,b.pendingProps),e=Lg(d.type,e),aj(a,b,d,e,c);case 15:return cj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),jj(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,Tg(b,c),ph(b,d,e),rh(b,d,e,c),kj(null,b,d,!0,a,c);case 19:return yj(a,b,c);case 22:return ej(a,b,c)}throw Error(p(156,b.tag));};function Gk(a,b){return ac(a,b)}\nfunction al(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new al(a,b,c,d)}function bj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction $k(a){if(\"function\"===typeof a)return bj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction wh(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction yh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Ah(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return qj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Ah(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function qj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function xh(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction zh(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction bl(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function cl(a,b,c,d,e,f,g,h,k){a=new bl(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};ah(f);return a}function dl(a,b,c){var d=3summary:first-of-type', 'details'];\nvar candidateSelector = /* #__PURE__ */candidateSelectors.join(',');\nvar NoElement = typeof Element === 'undefined';\nvar matches = NoElement ? function () {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\nvar getRootNode = !NoElement && Element.prototype.getRootNode ? function (element) {\n return element.getRootNode();\n} : function (element) {\n return element.ownerDocument;\n};\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\n\nvar getCandidates = function getCandidates(el, includeContainer, filter) {\n var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));\n\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n\n candidates = candidates.filter(filter);\n return candidates;\n};\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidatesScope\n * @property {Element} scope contains inner candidates\n * @property {Element[]} candidates\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n * if a function, implies shadow support is enabled and either returns the shadow root of an element\n * or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidatesScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.}\n */\n\n\nvar getCandidatesIteratively = function getCandidatesIteratively(elements, includeContainer, options) {\n var candidates = [];\n var elementsToCheck = Array.from(elements);\n\n while (elementsToCheck.length) {\n var element = elementsToCheck.shift();\n\n if (element.tagName === 'SLOT') {\n // add shadow dom slot scope (slot itself cannot be focusable)\n var assigned = element.assignedElements();\n var content = assigned.length ? assigned : element.children;\n var nestedCandidates = getCandidatesIteratively(content, true, options);\n\n if (options.flatten) {\n candidates.push.apply(candidates, nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: nestedCandidates\n });\n }\n } else {\n // check candidate element\n var validCandidate = matches.call(element, candidateSelector);\n\n if (validCandidate && options.filter(element) && (includeContainer || !elements.includes(element))) {\n candidates.push(element);\n } // iterate over shadow content if possible\n\n\n var shadowRoot = element.shadowRoot || // check for an undisclosed shadow\n typeof options.getShadowRoot === 'function' && options.getShadowRoot(element);\n var validShadowRoot = !options.shadowRootFilter || options.shadowRootFilter(element);\n\n if (shadowRoot && validShadowRoot) {\n // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n // shadow exists, so look at light dom children as fallback BUT create a scope for any\n // child candidates found because they're likely slotted elements (elements that are\n // children of the web component element (which has the shadow), in the light dom, but\n // slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n // _after_ we return from this recursive call\n var _nestedCandidates = getCandidatesIteratively(shadowRoot === true ? element.children : shadowRoot.children, true, options);\n\n if (options.flatten) {\n candidates.push.apply(candidates, _nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: _nestedCandidates\n });\n }\n } else {\n // there's not shadow so just dig into the element's (light dom) children\n // __without__ giving the element special scope treatment\n elementsToCheck.unshift.apply(elementsToCheck, element.children);\n }\n }\n }\n\n return candidates;\n};\n\nvar getTabindex = function getTabindex(node, isScope) {\n if (node.tabIndex < 0) {\n // in Chrome,
,